From febcb77f067c6a69290b216953887489a3259093 Mon Sep 17 00:00:00 2001 From: scnorton Date: Tue, 11 Jul 2017 10:14:35 -0400 Subject: Decompile secret base data --- src/decoration.c | 0 src/field_specials.c | 0 src/field_tasks.c | 0 src/pokeblock.c | 0 src/secret_base.c | 93 ++++++++++++++++++++++++++++++++++++++++++++------ src/sound_check_menu.c | 0 src/use_pokeblock.c | 0 7 files changed, 83 insertions(+), 10 deletions(-) mode change 100755 => 100644 src/decoration.c mode change 100755 => 100644 src/field_specials.c mode change 100755 => 100644 src/field_tasks.c mode change 100755 => 100644 src/pokeblock.c mode change 100755 => 100644 src/sound_check_menu.c mode change 100755 => 100644 src/use_pokeblock.c (limited to 'src') diff --git a/src/decoration.c b/src/decoration.c old mode 100755 new mode 100644 diff --git a/src/field_specials.c b/src/field_specials.c old mode 100755 new mode 100644 diff --git a/src/field_tasks.c b/src/field_tasks.c old mode 100755 new mode 100644 diff --git a/src/pokeblock.c b/src/pokeblock.c old mode 100755 new mode 100644 diff --git a/src/secret_base.c b/src/secret_base.c index d88d2c66a..2923d770d 100644 --- a/src/secret_base.c +++ b/src/secret_base.c @@ -22,20 +22,93 @@ #include "text.h" #include "vars.h" -extern u8 gUnknown_020387DC; -extern u16 gSpecialVar_0x8004; -extern u16 gSpecialVar_0x8005; -extern u16 gSpecialVar_0x8006; -extern u16 gSpecialVar_0x8007; -extern u16 gScriptResult; -extern const struct +u8 sub_80BCA84(); +u8 sub_80BCBF8(); +void sub_80BCB90(u8); +void sub_80BCBC0(u8); + +const struct { u16 unk_083D1358_0; u16 unk_083D1358_1; -} gUnknown_083D1358[7]; -extern const u8 gUnknown_083D1374[4 * 16]; +} gUnknown_083D1358[] = { + {0x26, 0x36}, + {0x27, 0x37}, + {0x1a0, 0x1a1}, + {0x1a8, 0x1a9}, + {0x1b0, 0x1b1}, + {0x208, 0x210}, + {0x271, 0x278} +}; + +extern u8 gUnknown_020387DC; + +const u8 gUnknown_083D1374[] = { + MAP_ID_SECRET_BASE_RED_CAVE1, 0, + MAP_ID_SECRET_BASE_BROWN_CAVE1, 3, + MAP_ID_SECRET_BASE_RED_CAVE2, 0, + MAP_ID_SECRET_BASE_SHRUB1, 9, + MAP_ID_SECRET_BASE_RED_CAVE3, 0, + MAP_ID_SECRET_BASE_BROWN_CAVE1, 3, + MAP_ID_SECRET_BASE_RED_CAVE4, 0, + MAP_ID_SECRET_BASE_BROWN_CAVE2, 13, + MAP_ID_SECRET_BASE_BROWN_CAVE1, 0, + MAP_ID_SECRET_BASE_BLUE_CAVE1, 3, + MAP_ID_SECRET_BASE_BROWN_CAVE2, 0, + MAP_ID_SECRET_BASE_YELLOW_CAVE2, 2, + MAP_ID_SECRET_BASE_BROWN_CAVE3, 0, + MAP_ID_SECRET_BASE_BROWN_CAVE3, 4, + MAP_ID_SECRET_BASE_BROWN_CAVE4, 0, + MAP_ID_SECRET_BASE_BROWN_CAVE1, 2, + MAP_ID_SECRET_BASE_BLUE_CAVE1, 0, + MAP_ID_SECRET_BASE_BROWN_CAVE1, 3, + MAP_ID_SECRET_BASE_BLUE_CAVE2, 0, + MAP_ID_SECRET_BASE_BROWN_CAVE1, 2, + MAP_ID_SECRET_BASE_BLUE_CAVE3, 0, + MAP_ID_SECRET_BASE_YELLOW_CAVE1, 15, + MAP_ID_SECRET_BASE_BLUE_CAVE4, 0, + MAP_ID_SECRET_BASE_YELLOW_CAVE1, 14, + MAP_ID_SECRET_BASE_YELLOW_CAVE1, 0, + MAP_ID_SECRET_BASE_YELLOW_CAVE2, 3, + MAP_ID_SECRET_BASE_YELLOW_CAVE2, 0, + MAP_ID_SECRET_BASE_BLUE_CAVE2, 7, + MAP_ID_SECRET_BASE_YELLOW_CAVE3, 0, + MAP_ID_SECRET_BASE_YELLOW_CAVE1, 6, + MAP_ID_SECRET_BASE_YELLOW_CAVE4, 0, + MAP_ID_SECRET_BASE_SHRUB1, 9, + MAP_ID_SECRET_BASE_TREE1, 0, + MAP_ID_SECRET_BASE_BLUE_CAVE1, 3, + MAP_ID_SECRET_BASE_TREE2, 0, + MAP_ID_SECRET_BASE_SHRUB1, 6, + MAP_ID_SECRET_BASE_TREE3, 0, + MAP_ID_SECRET_BASE_YELLOW_CAVE3, 3, + MAP_ID_SECRET_BASE_TREE4, 0, + MAP_ID_SECRET_BASE_TREE1, 10, + MAP_ID_SECRET_BASE_SHRUB1, 0, + MAP_ID_SECRET_BASE_YELLOW_CAVE1, 3, + MAP_ID_SECRET_BASE_SHRUB2, 0, + MAP_ID_SECRET_BASE_BROWN_CAVE1, 2, + MAP_ID_SECRET_BASE_SHRUB3, 0, + MAP_ID_SECRET_BASE_BROWN_CAVE2, 8, + MAP_ID_SECRET_BASE_SHRUB4, 0, + MAP_ID_SECRET_BASE_YELLOW_CAVE2, 6 +}; + +const struct MenuAction gUnknown_083D13D4[] = { + {SecretBaseText_DelRegist, sub_80BCA84}, + {gUnknownText_Exit, sub_80BCBF8} +}; + +void (*const gUnknown_083D13E4[])(u8) = { + sub_80BCB90, + sub_80BCBC0 +}; + +const u8 gUnknown_083D13EC[] = { + 0x23,0x24,0xF,0x1F,0x21,0x2F,0xE,0x14,0x20,0x22,0x0,0x0 +}; + extern void *gUnknown_0300485C; -extern const u8 gUnknown_083D13EC[12]; extern u8 gUnknown_081A2E14[]; diff --git a/src/sound_check_menu.c b/src/sound_check_menu.c old mode 100755 new mode 100644 diff --git a/src/use_pokeblock.c b/src/use_pokeblock.c old mode 100755 new mode 100644 -- cgit v1.2.3 From 37ffd07ac741016f8da662f9cf416c82ffd269d7 Mon Sep 17 00:00:00 2001 From: scnorton Date: Tue, 11 Jul 2017 10:51:22 -0400 Subject: Matching sub_80BBCCC --- src/secret_base.c | 134 ++---------------------------------------------------- 1 file changed, 4 insertions(+), 130 deletions(-) (limited to 'src') diff --git a/src/secret_base.c b/src/secret_base.c index 2923d770d..a5074c4e0 100644 --- a/src/secret_base.c +++ b/src/secret_base.c @@ -396,7 +396,6 @@ bool8 CurrentMapIsSecretBase(void) return FALSE; } -#ifdef NONMATCHING void sub_80BBCCC(u8 flagIn) { u16 curBaseId; @@ -404,8 +403,8 @@ void sub_80BBCCC(u8 flagIn) if (CurrentMapIsSecretBase()) { curBaseId = VarGet(VAR_0x4054); for (x=0; x<16; x++) { - if ((u8)(gSaveBlock1.secretBases[curBaseId].decorations[x] - 1) <= 0x77 && gDecorations[gSaveBlock1.secretBases[curBaseId].decorations[x]].decor_field_11 != 4) { - sub_80FF394((gSaveBlock1.secretBases[0].decorationPos[x] >> 4) + 7, (gSaveBlock1.secretBases[0].decorationPos[x] & 0xF) + 7, gSaveBlock1.secretBases[curBaseId].decorations[x]); + if (gSaveBlock1.secretBases[curBaseId].decorations[x] > 0 && gSaveBlock1.secretBases[curBaseId].decorations[x] <= 0x78 && gDecorations[gSaveBlock1.secretBases[curBaseId].decorations[x]].permission != DECORPERM_SOLID_MAT) { + sub_80FF394((gSaveBlock1.secretBases[curBaseId].decorationPos[x] >> 4) + 7, (gSaveBlock1.secretBases[curBaseId].decorationPos[x] & 0xF) + 7, gSaveBlock1.secretBases[curBaseId].decorations[x]); } } if (curBaseId != 0) { @@ -418,6 +417,7 @@ void sub_80BBCCC(u8 flagIn) } } +#ifdef NONMATCHING void sub_80BBDD0(void) { u8 *roomdecor; @@ -439,7 +439,7 @@ void sub_80BBDD0(void) for (decidx=0; decidxmapObjectCount; objid++) { if (gMapHeader.events->mapObjects[objid].flagId == gSpecialVar_0x8004 + 0xAE) @@ -464,132 +464,6 @@ void sub_80BBDD0(void) } #else -__attribute__((naked)) -void sub_80BBCCC(u8 flagIn) -{ - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r8\n\ - push {r7}\n\ - sub sp, 0x4\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - mov r8, r0\n\ - bl CurrentMapIsSecretBase\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - beq _080BBDBC\n\ - ldr r0, _080BBD70 @ =0x00004054\n\ - bl VarGet\n\ - lsls r0, 16\n\ - lsrs r5, r0, 16\n\ - movs r1, 0\n\ - mov r0, sp\n\ - strh r1, [r0]\n\ - ldr r6, _080BBD74 @ =gSaveBlock1\n\ - mov r4, sp\n\ - ldr r0, _080BBD78 @ =0x00001a2a\n\ - adds r7, r6, r0\n\ -_080BBCFC:\n\ - lsls r0, r5, 2\n\ - adds r0, r5\n\ - lsls r0, 5\n\ - ldrh r1, [r4]\n\ - adds r2, r0, r1\n\ - ldr r1, _080BBD7C @ =0x00001a1a\n\ - adds r0, r6, r1\n\ - adds r1, r2, r0\n\ - ldrb r0, [r1]\n\ - subs r0, 0x1\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - cmp r0, 0x77\n\ - bhi _080BBD3A\n\ - ldr r0, _080BBD80 @ =gDecorations\n\ - ldrb r3, [r1]\n\ - lsls r1, r3, 5\n\ - adds r1, r0\n\ - ldrb r0, [r1, 0x11]\n\ - cmp r0, 0x4\n\ - beq _080BBD3A\n\ - adds r0, r2, r7\n\ - ldrb r2, [r0]\n\ - lsrs r0, r2, 4\n\ - adds r0, 0x7\n\ - movs r1, 0xF\n\ - ands r1, r2\n\ - adds r1, 0x7\n\ - adds r2, r3, 0\n\ - bl sub_80FF394\n\ -_080BBD3A:\n\ - ldrh r0, [r4]\n\ - adds r0, 0x1\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - strh r0, [r4]\n\ - cmp r0, 0xF\n\ - bls _080BBCFC\n\ - cmp r5, 0\n\ - beq _080BBD88\n\ - mov r4, sp\n\ - adds r4, 0x2\n\ - movs r2, 0x88\n\ - lsls r2, 2\n\ - mov r0, sp\n\ - adds r1, r4, 0\n\ - bl sub_80BB764\n\ - mov r0, sp\n\ - ldrh r0, [r0]\n\ - adds r0, 0x7\n\ - ldrh r1, [r4]\n\ - adds r1, 0x7\n\ - ldr r2, _080BBD84 @ =0x00000e21\n\ - bl MapGridSetMetatileIdAt\n\ - b _080BBDBC\n\ - .align 2, 0\n\ -_080BBD70: .4byte 0x00004054\n\ -_080BBD74: .4byte gSaveBlock1\n\ -_080BBD78: .4byte 0x00001a2a\n\ -_080BBD7C: .4byte 0x00001a1a\n\ -_080BBD80: .4byte gDecorations\n\ -_080BBD84: .4byte 0x00000e21\n\ -_080BBD88:\n\ - mov r0, r8\n\ - cmp r0, 0x1\n\ - bne _080BBDBC\n\ - ldr r0, _080BBDC8 @ =0x00004089\n\ - bl VarGet\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - cmp r0, 0x1\n\ - bne _080BBDBC\n\ - mov r4, sp\n\ - adds r4, 0x2\n\ - movs r2, 0x88\n\ - lsls r2, 2\n\ - mov r0, sp\n\ - adds r1, r4, 0\n\ - bl sub_80BB764\n\ - mov r0, sp\n\ - ldrh r0, [r0]\n\ - adds r0, 0x7\n\ - ldrh r1, [r4]\n\ - adds r1, 0x7\n\ - ldr r2, _080BBDCC @ =0x00000e0a\n\ - bl MapGridSetMetatileIdAt\n\ -_080BBDBC:\n\ - add sp, 0x4\n\ - pop {r3}\n\ - mov r8, r3\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_080BBDC8: .4byte 0x00004089\n\ -_080BBDCC: .4byte 0x00000e0a\n\ -.syntax divided\n"); -} - __attribute__((naked)) void sub_80BBDD0(void) { -- cgit v1.2.3 From e9e2f4f5cf1ca2801d31453eeb6b7ea646f6d48d Mon Sep 17 00:00:00 2001 From: scnorton Date: Tue, 11 Jul 2017 11:18:31 -0400 Subject: Futile attempt to get sub_80BBDD0 matching --- src/secret_base.c | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) (limited to 'src') diff --git a/src/secret_base.c b/src/secret_base.c index a5074c4e0..c35797168 100644 --- a/src/secret_base.c +++ b/src/secret_base.c @@ -418,6 +418,8 @@ void sub_80BBCCC(u8 flagIn) } #ifdef NONMATCHING +// The only nonmatching property of this function is that the implicit variables &gSaveBlock1 and &roomdecor[decidx] +// are stored in the wrong registers. void sub_80BBDD0(void) { u8 *roomdecor; @@ -437,20 +439,19 @@ void sub_80BBDD0(void) ndecor = 16; } for (decidx=0; decidxmapObjectCount; objid++) { - if (gMapHeader.events->mapObjects[objid].flagId == gSpecialVar_0x8004 + 0xAE) - break; - } - if (objid != gMapHeader.events->mapObjectCount) { + if (roomdecor[decidx] != 0 && gDecorations[roomdecor[decidx]].permission == DECORPERM_SOLID_MAT) + { + for (objid=0; objidmapObjectCount; objid++) { + if (gMapHeader.events->mapObjects[objid].flagId == gSpecialVar_0x8004 + 0xAE) + break; + } + if (objid == gMapHeader.events->mapObjectCount) + continue; gSpecialVar_0x8006 = roomdecorpos[decidx] >> 4; gSpecialVar_0x8007 = roomdecorpos[decidx] & 0xF; metatile = MapGridGetMetatileBehaviorAt(gSpecialVar_0x8006 + 7, gSpecialVar_0x8007 + 7); - if (sub_80572D8(metatile) == 1 || sub_80572EC(metatile) == 1) { - gScriptResult = gMapHeader.events->mapObjects[objid].graphicsId + 0x3f20; + if (sub_80572D8(metatile) == TRUE || sub_80572EC(metatile) == TRUE) { + gScriptResult = gMapHeader.events->mapObjects[objid].graphicsId + VAR_0x3F20; VarSet(gScriptResult, gDecorations[roomdecor[decidx]].tiles[0]); gScriptResult = gMapHeader.events->mapObjects[objid].localId; FlagReset(gSpecialVar_0x8004 + 0xAE); -- cgit v1.2.3 From 20f8a5dd5971fedf01ea49f4f26a8fb74a79acf9 Mon Sep 17 00:00:00 2001 From: scnorton Date: Tue, 11 Jul 2017 12:17:05 -0400 Subject: Futile attempt to get sub_80BC300 --- src/secret_base.c | 44 +++++++++++++++++++++++--------------------- 1 file changed, 23 insertions(+), 21 deletions(-) (limited to 'src') diff --git a/src/secret_base.c b/src/secret_base.c index c35797168..17377a287 100644 --- a/src/secret_base.c +++ b/src/secret_base.c @@ -1,6 +1,9 @@ #include "global.h" #include "secret_base.h" #include "decoration.h" +#include "species.h" +#include "items.h" +#include "moves.h" #include "event_data.h" #include "field_camera.h" #include "field_fadetransition.h" @@ -821,32 +824,31 @@ u8 sub_80BC298(struct Pokemon *mon) { // 80bc298 } #ifdef NONMATCHING +// So much is wrong with this function. +// The compiler likes to store pointers in temp variables. That's not what it's supposed to do. void sub_80BC300(void) { + u16 partyidx; u16 moveidx; u16 sbpartyidx = 0; - int resetVal = 0; - u16 partyidx = 0; - while (partyidx < 6) { - partyidx ++; - for (moveidx=0; moveidx<4; moveidx++) { - gSaveBlock1.secretBases[0].partyMoves[(partyidx - 1) * 6 + moveidx] = resetVal; - } - gSaveBlock1.secretBases[0].partySpecies[partyidx - 1] = resetVal; - gSaveBlock1.secretBases[0].partyHeldItems[partyidx - 1] = resetVal; - gSaveBlock1.secretBases[0].partyLevels[partyidx - 1] = resetVal; - gSaveBlock1.secretBases[0].partyPersonality[partyidx - 1] = resetVal; - gSaveBlock1.secretBases[0].partyEVs[partyidx - 1] = resetVal; - if (GetMonData(&(gPlayerParty[partyidx - 1]), MON_DATA_SPECIES) != 0 && !GetMonData(&(gPlayerParty[partyidx - 1]), MON_DATA_IS_EGG)) { + for (partyidx=0; partyidx Date: Tue, 11 Jul 2017 12:29:45 -0400 Subject: sub_80BC474 --- src/secret_base.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'src') diff --git a/src/secret_base.c b/src/secret_base.c index 17377a287..0488a3bf3 100644 --- a/src/secret_base.c +++ b/src/secret_base.c @@ -1023,3 +1023,27 @@ void SecretBasePC_PackUp(void) IncrementGameStat(20); sub_80BC440(); } + +void sub_80BC474(void) +{ + u16 i, j; + s16 metatileId; + struct MapEvents *mapEvents = gMapHeader.events; + for (i=0; ibgEventCount; i++) + { + if (mapEvents->bgEvents[i].kind == 8 && gSaveBlock1.secretBases[0].sbr_field_0 == mapEvents->bgEvents[i].bgUnion.secretBaseId) + { + metatileId = MapGridGetMetatileIdAt(mapEvents->bgEvents[i].x + 7, mapEvents->bgEvents[i].y + 7); + for (j=0; j<7; j++) + { + if (gUnknown_083D1358[j].unk_083D1358_1 == metatileId) + { + MapGridSetMetatileIdAt(mapEvents->bgEvents[i].x + 7, mapEvents->bgEvents[i].y + 7, gUnknown_083D1358[j].unk_083D1358_0 | 0xc00); + break; + } + } + DrawWholeMapView(); + break; + } + } +} -- cgit v1.2.3 From 89f34eedccd7e8c346cd4e20277e79c94b5b5064 Mon Sep 17 00:00:00 2001 From: scnorton Date: Tue, 11 Jul 2017 14:01:53 -0400 Subject: sub_80BC50C --- src/secret_base.c | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'src') diff --git a/src/secret_base.c b/src/secret_base.c index 0488a3bf3..544289885 100644 --- a/src/secret_base.c +++ b/src/secret_base.c @@ -1047,3 +1047,13 @@ void sub_80BC474(void) } } } + +void sub_80BC50C(void) +{ + u16 backup_sbr_field_e; + sub_80BC474(); + IncrementGameStat(GAME_STAT_MOVED_SECRET_BASE); + backup_sbr_field_e = gSaveBlock1.secretBases[0].sbr_field_e; + ResetSecretBase(0); + gSaveBlock1.secretBases[0].sbr_field_e = backup_sbr_field_e; +} -- cgit v1.2.3 From 1a8ac29f66ce7be99950d016c41e0b066e271aa8 Mon Sep 17 00:00:00 2001 From: scnorton Date: Tue, 11 Jul 2017 14:03:57 -0400 Subject: sub_80BC538 --- src/secret_base.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'src') diff --git a/src/secret_base.c b/src/secret_base.c index 544289885..88547881d 100644 --- a/src/secret_base.c +++ b/src/secret_base.c @@ -1057,3 +1057,15 @@ void sub_80BC50C(void) ResetSecretBase(0); gSaveBlock1.secretBases[0].sbr_field_e = backup_sbr_field_e; } + +u8 sub_80BC538(void) +{ + s16 i; + u8 count = 0; + for (i=1; i<20; i++) + { + if (sub_80BC268(i) == TRUE) + count++; + } + return count; +} -- cgit v1.2.3 From 34343d1b9710ca14a5a271e758137ea6ec27d3db Mon Sep 17 00:00:00 2001 From: scnorton Date: Tue, 11 Jul 2017 14:06:20 -0400 Subject: sub_80BC56C --- src/secret_base.c | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'src') diff --git a/src/secret_base.c b/src/secret_base.c index 88547881d..77491fb0e 100644 --- a/src/secret_base.c +++ b/src/secret_base.c @@ -1069,3 +1069,13 @@ u8 sub_80BC538(void) } return count; } + +void sub_80BC56C(void) +{ + if (sub_80BC268(sub_80BC14C(gUnknown_020387DC)) == TRUE) + gScriptResult = 1; + else if (sub_80BC538() > 9) + gScriptResult = 2; + else + gScriptResult = 0; +} -- cgit v1.2.3 From b2e57bc5b2c173a848e02bbe9687c0eaef72290f Mon Sep 17 00:00:00 2001 From: scnorton Date: Tue, 11 Jul 2017 14:09:33 -0400 Subject: sub_80BC5BC --- src/secret_base.c | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'src') diff --git a/src/secret_base.c b/src/secret_base.c index 77491fb0e..a099b14e7 100644 --- a/src/secret_base.c +++ b/src/secret_base.c @@ -1079,3 +1079,9 @@ void sub_80BC56C(void) else gScriptResult = 0; } + +void sub_80BC5BC(void) +{ + gSaveBlock1.secretBases[sub_80BC14C(gUnknown_020387DC)].sbr_field_1_6 ^= 1; + FlagSet(0x10c); +} -- cgit v1.2.3 From 8c78376f853714e75e4fb2d8df71484e7bd2038b Mon Sep 17 00:00:00 2001 From: "U-Maria-PC\\Maria" Date: Wed, 19 Jul 2017 21:59:53 -0400 Subject: Update --- src/intro_credits_graphics.c | 180 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 180 insertions(+) create mode 100755 src/intro_credits_graphics.c (limited to 'src') diff --git a/src/intro_credits_graphics.c b/src/intro_credits_graphics.c new file mode 100755 index 000000000..8f5e86b05 --- /dev/null +++ b/src/intro_credits_graphics.c @@ -0,0 +1,180 @@ +#include "global.h" +#include "gba/m4a_internal.h" +#include "intro.h" +#include "data2.h" +#include "decompress.h" +#include "hall_of_fame.h" +#include "intro_credits_graphics.h" +#include "libgncmultiboot.h" +#include "link.h" +#include "m4a.h" +#include "main.h" +#include "new_game.h" +#include "palette.h" +#include "rng.h" +#include "save.h" +#include "songs.h" +#include "sound.h" +#include "species.h" +#include "task.h" +#include "title_screen.h" +#include "trig.h" +#include "unknown_task.h" + +extern u8 gUnknown_0841225C; +extern u8 gUnknown_084126DC; +extern u8 gUnknown_084121FC; +extern u8 gUnknown_084128D8; +extern u8 gUnknown_08412EB4; +extern u8 gUnknown_08412818; +extern u8 gUnknown_08413184; +extern u8 gUnknown_08413340; +extern u8 gUnknown_084139C8; +extern u8 gUnknown_08413300; +extern u8 gUnknown_08413CCC; + +const extern struct CompressedSpriteSheet gUnknown_08416B54; +const extern struct CompressedSpriteSheet gUnknown_08416BDC; + +extern s16 gUnknown_0203935C; + +extern u8 gReservedSpritePaletteCount; + +void sub_8149248(); +void sub_8149264(); + +void load_intro_part2_graphics(u8 a){ + LZ77UnCompVram(&gUnknown_0841225C, (void *)(VRAM + 0x4000)); + LZ77UnCompVram(&gUnknown_084126DC, (void *)(VRAM + 0x7800)); + LoadPalette(&gUnknown_084121FC, 240, 32); + switch (a) + { + case 0: + default: + LZ77UnCompVram(&gUnknown_084128D8, (void *)(VRAM)); + LZ77UnCompVram(&gUnknown_08412EB4, (void *)(VRAM + 0x3000)); + LoadPalette(&gUnknown_08412818, 0, 96); + LoadCompressedObjectPic(&gUnknown_08416B54); + LoadPalette(&gUnknown_08413184, 256, 32); + sub_8149248(); + break; + case 1: + LZ77UnCompVram(&gUnknown_08413340, (void *)(VRAM)); + LZ77UnCompVram(&gUnknown_084139C8, (void *)(VRAM + 0x3000)); + LoadPalette(&gUnknown_08413300, 0, 32); + LoadCompressedObjectPic(&gUnknown_08416BDC); + LoadPalette(&gUnknown_08413CCC, 256, 32); + sub_8149264(); + break; + } + gUnknown_0203935C = 0; + gReservedSpritePaletteCount = 8; +} + +void sub_8148C78(u8 a) +{ + if (a == 1) + { + REG_BG3CNT = 0x603; + REG_BG2CNT = 0x702; + REG_BG1CNT = 0xF05; + REG_DISPCNT = 0x1E40; + } + else + { + REG_BG3CNT = 0x603; + REG_BG2CNT = 0x702; + REG_BG1CNT = 0xF05; + REG_DISPCNT = 0x1E40; + } +} + +extern u8 gUnknown_084131C4; +extern u8 gUnknown_084131A4; +extern u8 gUnknown_0841221C; +extern u8 gUnknown_08412878; +extern u8 gUnknown_08413320; +extern u8 gUnknown_0841223C; +extern u8 gUnknown_08413E78; +extern u8 gUnknown_08414084; +extern u8 gUnknown_08413E38; +const extern struct CompressedSpriteSheet gUnknown_08416C70; +extern u8 gUnknown_08414064; + +void sub_8149280(); + +void sub_8148CB0(u8 a){ + LZ77UnCompVram(&gUnknown_0841225C, (void *)(VRAM + 0x4000)); + LZ77UnCompVram(&gUnknown_084126DC, (void *)(VRAM + 0x7800)); + switch (a) + { + case 0: + default: + LoadPalette(&gUnknown_084121FC, 240, 32); + LZ77UnCompVram(&gUnknown_084128D8, (void *)(VRAM)); + LZ77UnCompVram(&gUnknown_08412EB4, (void *)(VRAM + 0x3000)); + LoadPalette(&gUnknown_08412818, 0, 96); + LoadCompressedObjectPic(&gUnknown_08416B54); + LZ77UnCompVram(&gUnknown_084131C4, (void *)(VRAM + 0x10000)); + LoadPalette(&gUnknown_08413184, 256, 32); + sub_8149248(); + break; + case 1: + LoadPalette(&gUnknown_0841221C, 240, 32); + LZ77UnCompVram(&gUnknown_084128D8, (void *)(VRAM)); + LZ77UnCompVram(&gUnknown_08412EB4, (void *)(VRAM + 0x3000)); + LoadPalette(&gUnknown_08412878, 0, 96); + LoadCompressedObjectPic(&gUnknown_08416B54); + LZ77UnCompVram(&gUnknown_084131C4, (void *)(VRAM + 0x10000)); + LoadPalette(&gUnknown_084131A4, 256, 32); + sub_8149248(); + break; + case 2: + case 3: + LoadPalette(&gUnknown_0841221C, 240, 32); + LZ77UnCompVram(&gUnknown_08413340, (void *)(VRAM)); + LZ77UnCompVram(&gUnknown_084139C8, (void *)(VRAM + 0x3000)); + LoadPalette(&gUnknown_08413320, 0, 32); + LoadCompressedObjectPic(&gUnknown_08416BDC); + LoadPalette(&gUnknown_08413320, 256, 32); + sub_8149264(); + break; + case 4: + LoadPalette(&gUnknown_0841223C, 240, 32); + LZ77UnCompVram(&gUnknown_08413E78, (void *)(VRAM)); + LZ77UnCompVram(&gUnknown_08414084, (void *)(VRAM + 0x3000)); + LoadPalette(&gUnknown_08413E38, 0, 64); + LoadCompressedObjectPic(&gUnknown_08416C70); + LoadPalette(&gUnknown_08414064, 256, 32); + sub_8149280(); + break; + } + gReservedSpritePaletteCount = 8; + gUnknown_0203935C = 0; +} + +void sub_8148E90(u8 a) +{ + REG_BG3CNT = 0x603; + REG_BG2CNT = 0x702; + REG_BG1CNT = 0xF05; + REG_DISPCNT = 0x1F40; +} + + + +u8 sub_8148EC0(u8 a, u16 b, u16 c, u16 d){ + u8 taskId = CreateTask(&sub_8148F3C, 0); + gTasks[taskId].data[0] = a; + gTasks[taskId].data[1] = b; + gTasks[taskId].data[2] = 0; + gTasks[taskId].data[3] = 0; + gTasks[taskId].data[4] = c; + gTasks[taskId].data[5] = 0; + gTasks[taskId].data[6] = 0; + gTasks[taskId].data[7] = d; + gTasks[taskId].data[8] = 8; + gTasks[taskId].data[9] = 0; + sub_8148F3C(taskId); + return taskId; +} -- cgit v1.2.3 From 071a1ff58d550078427310f695113d8d44938f31 Mon Sep 17 00:00:00 2001 From: scnorton Date: Thu, 20 Jul 2017 14:34:18 -0400 Subject: Task_SecretBasePC_Registry --- src/secret_base.c | 102 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 102 insertions(+) (limited to 'src') diff --git a/src/secret_base.c b/src/secret_base.c index a099b14e7..bf98b0b4c 100644 --- a/src/secret_base.c +++ b/src/secret_base.c @@ -30,6 +30,11 @@ u8 sub_80BCBF8(); void sub_80BCB90(u8); void sub_80BCBC0(u8); +void Task_SecretBasePC_Registry(u8); +void sub_80BC7D8(u8); +void sub_80BC824(u8); +void sub_80BCC54(u8); + const struct { u16 unk_083D1358_0; @@ -1085,3 +1090,100 @@ void sub_80BC5BC(void) gSaveBlock1.secretBases[sub_80BC14C(gUnknown_020387DC)].sbr_field_1_6 ^= 1; FlagSet(0x10c); } + +void SecretBasePC_Decoration(void) +{ + CreateTask(Task_SecretBasePC_Decoration, 0); +} + +void SecretBasePC_Registry(void) +{ + CreateTask(Task_SecretBasePC_Registry, 0); +} + +#ifdef NONMATCHING +void Task_SecretBasePC_Registry(u8 taskId) +{ + s16 *data; + ScriptContext2_Enable(); + sub_80F944C(); + LoadScrollIndicatorPalette(); + data = gTasks[taskId].data; + if ((data[0] = sub_80BC538()) != 0) + { + data[3] = max(data[0], 7); + data[1] = 0; + data[2] = 0; + MenuZeroFillWindowRect(0, 0, 29, 19); + sub_80BC7D8(taskId); + gTasks[taskId].func = sub_80BC824; + } + else + { + DisplayItemMessageOnField(taskId, gSecretBaseText_NoRegistry, sub_80BCC54, 0); + } +} +#else +__attribute__((naked)) +void Task_SecretBasePC_Registry(u8 taskId) +{ + asm_unified("\tpush {r4,r5,lr}\n" + "\tlsls r0, 24\n" + "\tlsrs r5, r0, 24\n" + "\tbl ScriptContext2_Enable\n" + "\tbl sub_80F944C\n" + "\tbl LoadScrollIndicatorPalette\n" + "\tlsls r0, r5, 2\n" + "\tadds r0, r5\n" + "\tlsls r0, 3\n" + "\tldr r1, _080BC688 @ =gTasks + 0x8\n" + "\tadds r4, r0, r1\n" + "\tbl sub_80BC538\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tstrh r0, [r4]\n" + "\tadds r1, r0, 0\n" + "\tcmp r1, 0\n" + "\tbeq _080BC694\n" + "\tcmp r1, 0x7\n" + "\tble _080BC65E\n" + "\tmovs r0, 0x7\n" + "_080BC65E:\n" + "\tstrh r0, [r4, 0x6]\n" + "\tmovs r0, 0\n" + "\tstrh r0, [r4, 0x2]\n" + "\tstrh r0, [r4, 0x4]\n" + "\tmovs r0, 0\n" + "\tmovs r1, 0\n" + "\tmovs r2, 0x1D\n" + "\tmovs r3, 0x13\n" + "\tbl MenuZeroFillWindowRect\n" + "\tadds r0, r5, 0\n" + "\tbl sub_80BC7D8\n" + "\tldr r1, _080BC68C @ =gTasks\n" + "\tlsls r0, r5, 2\n" + "\tadds r0, r5\n" + "\tlsls r0, 3\n" + "\tadds r0, r1\n" + "\tldr r1, _080BC690 @ =sub_80BC824\n" + "\tstr r1, [r0]\n" + "\tb _080BC6A0\n" + "\t.align 2, 0\n" + "_080BC688: .4byte gTasks + 0x8\n" + "_080BC68C: .4byte gTasks\n" + "_080BC690: .4byte sub_80BC824\n" + "_080BC694:\n" + "\tldr r1, _080BC6A8 @ =gSecretBaseText_NoRegistry\n" + "\tldr r2, _080BC6AC @ =sub_80BCC54\n" + "\tadds r0, r5, 0\n" + "\tmovs r3, 0\n" + "\tbl DisplayItemMessageOnField\n" + "_080BC6A0:\n" + "\tpop {r4,r5}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" + "_080BC6A8: .4byte gSecretBaseText_NoRegistry\n" + "_080BC6AC: .4byte sub_80BCC54"); +} +#endif -- cgit v1.2.3 From 3339df8b2fb8644bc57820a446e094d75afd3879 Mon Sep 17 00:00:00 2001 From: scnorton Date: Thu, 20 Jul 2017 15:21:32 -0400 Subject: sub_80BC6B0 --- src/secret_base.c | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) (limited to 'src') diff --git a/src/secret_base.c b/src/secret_base.c index bf98b0b4c..a4776719e 100644 --- a/src/secret_base.c +++ b/src/secret_base.c @@ -1187,3 +1187,46 @@ void Task_SecretBasePC_Registry(u8 taskId) "_080BC6AC: .4byte sub_80BCC54"); } #endif + +void sub_80BC6B0(u8 taskId) +{ + u8 i; + s16 *data = gTasks[taskId].data; + u8 m = 0; + u8 n = 0; + for (i=1; i<20; i++) + { + if (m == data[2]) + { + m = i; + break; + } + if (sub_80BC268(i) == TRUE) + m ++; + } + for (i=m; i<20; i++) + { + if (sub_80BC268(i) == TRUE) + { + sub_80BC190(gStringVar1, i); + MenuFillWindowRectWithBlankTile(18, 2 * n + 2, 28, 2 * n + 3); + MenuPrint(gStringVar1, 18, 2 * n + 2); + if (++n == 8) + break; + } + } + if (n < 8) + { + MenuFillWindowRectWithBlankTile(18, 2 * n + 2, 28, 2 * n + 3); + MenuPrint(gUnknownText_Exit, 18, 2 * n + 2); + DestroyVerticalScrollIndicator(1); + if (n != 7) + MenuFillWindowRectWithBlankTile(18, ((n << 25) + (1 << 26)) >> 24, 28, 18); // needed to match + } + else + CreateVerticalScrollIndicators(1, 0xbc, 0x98); + if (data[2] == 0) + DestroyVerticalScrollIndicator(0); + else + CreateVerticalScrollIndicators(0, 0xbc, 0x08); +} -- cgit v1.2.3 From 01865ff248543d58e78a63237e15e849fd8e590a Mon Sep 17 00:00:00 2001 From: scnorton Date: Thu, 20 Jul 2017 15:35:26 -0400 Subject: sub_80BC7D8 --- src/secret_base.c | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'src') diff --git a/src/secret_base.c b/src/secret_base.c index a4776719e..1f4e257db 100644 --- a/src/secret_base.c +++ b/src/secret_base.c @@ -1230,3 +1230,11 @@ void sub_80BC6B0(u8 taskId) else CreateVerticalScrollIndicators(0, 0xbc, 0x08); } + +void sub_80BC7D8(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + MenuDrawTextWindow(17, 0, 29, 19); + InitMenu(0, 18, 2, data[3] + 1, data[1], 11); + sub_80BC6B0(taskId); +} -- cgit v1.2.3 From be5840dac3fb62ffc60841b3170163834f99df6e Mon Sep 17 00:00:00 2001 From: scnorton Date: Thu, 20 Jul 2017 16:43:14 -0400 Subject: sub_80BC824 --- src/secret_base.c | 63 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) (limited to 'src') diff --git a/src/secret_base.c b/src/secret_base.c index 1f4e257db..a4ec4aeae 100644 --- a/src/secret_base.c +++ b/src/secret_base.c @@ -11,6 +11,8 @@ #include "field_weather.h" #include "fieldmap.h" #include "main.h" +#include "sound.h" +#include "songs.h" #include "map_constants.h" #include "map_name_popup.h" #include "menu.h" @@ -34,6 +36,8 @@ void Task_SecretBasePC_Registry(u8); void sub_80BC7D8(u8); void sub_80BC824(u8); void sub_80BCC54(u8); +u8 sub_80BC948(u8); +void sub_80BC980(u8); const struct { @@ -1238,3 +1242,62 @@ void sub_80BC7D8(u8 taskId) InitMenu(0, 18, 2, data[3] + 1, data[1], 11); sub_80BC6B0(taskId); } + +void sub_80BC824(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + if (gMain.newAndRepeatedKeys & DPAD_UP) + { + if (data[1] != 0) + { + PlaySE(SE_SELECT); + data[1] = MoveMenuCursor(-1); + } + else if (data[2] != 0) + { + PlaySE(SE_SELECT); + data[2]--; + sub_80BC6B0(taskId); + } + } + else if (gMain.newAndRepeatedKeys & DPAD_DOWN) + { + if (data[1] == data[3]) + { + if (data[2] + data[1] != data[0]) + { + PlaySE(SE_SELECT); + data[2]++; + sub_80BC6B0(taskId); + } + } + else + { + PlaySE(SE_SELECT); + data[1] = MoveMenuCursor(+1); + } + } + else if (gMain.newKeys & A_BUTTON) + { + PlaySE(SE_SELECT); + if (data[1] + data[2] == data[0]) + { + HandleDestroyMenuCursors(); + MenuZeroFillWindowRect(0, 0, 29, 19); + sub_80BCC54(taskId); + } + else + { + HandleDestroyMenuCursors(); + data[4] = sub_80BC948(data[1] + data[2]); + sub_80BC980(taskId); + } + } + else if (gMain.newKeys & B_BUTTON) + { + PlaySE(SE_SELECT); + HandleDestroyMenuCursors(); + MenuZeroFillWindowRect(0, 0, 29, 19); + sub_80BCC54(taskId); + } +} -- cgit v1.2.3 From 8d95b42e7c840d11ec3bd86bfa128d115ad1c226 Mon Sep 17 00:00:00 2001 From: scnorton Date: Thu, 20 Jul 2017 16:47:32 -0400 Subject: sub_80BC948 --- src/secret_base.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'src') diff --git a/src/secret_base.c b/src/secret_base.c index a4ec4aeae..6530ea7c6 100644 --- a/src/secret_base.c +++ b/src/secret_base.c @@ -1301,3 +1301,19 @@ void sub_80BC824(u8 taskId) sub_80BCC54(taskId); } } + +u8 sub_80BC948(u8 a0) +{ + u8 n = 0; + u8 i; + for (i=1; i<20; i++) + { + if (sub_80BC268(i) == TRUE) + { + if (a0 == n) + return i; + n++; + } + } + return 0; +} -- cgit v1.2.3 From 82d3ffe0d2bf1a1a4d9f97fccbcd381f85e753aa Mon Sep 17 00:00:00 2001 From: scnorton Date: Thu, 20 Jul 2017 17:07:03 -0400 Subject: sub_80BC980 --- src/secret_base.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'src') diff --git a/src/secret_base.c b/src/secret_base.c index 6530ea7c6..ecc230425 100644 --- a/src/secret_base.c +++ b/src/secret_base.c @@ -16,6 +16,7 @@ #include "map_constants.h" #include "map_name_popup.h" #include "menu.h" +#include "menu_helpers.h" #include "metatile_behavior.h" #include "palette.h" #include "pokemon.h" @@ -38,6 +39,7 @@ void sub_80BC824(u8); void sub_80BCC54(u8); u8 sub_80BC948(u8); void sub_80BC980(u8); +void sub_80BC9E4(u8); const struct { @@ -1317,3 +1319,13 @@ u8 sub_80BC948(u8 a0) } return 0; } + +void sub_80BC980(u8 taskId) +{ + PauseVerticalScrollIndicator(0); + PauseVerticalScrollIndicator(1); + MenuDrawTextWindow(1, 0, 12, 5); + PrintMenuItems(2, 1, 2, gUnknown_083D13D4); + InitMenu(0, 2, 1, 2, 0, 10); + gTasks[taskId].func = sub_80BC9E4; +} -- cgit v1.2.3 From cc2bc365519a7a690e8d030fff961a18032c9d56 Mon Sep 17 00:00:00 2001 From: scnorton Date: Thu, 20 Jul 2017 17:12:58 -0400 Subject: sub_80BC9E4 --- src/secret_base.c | 38 ++++++++++++++++++++++++++++++++++---- 1 file changed, 34 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/secret_base.c b/src/secret_base.c index ecc230425..bcf7371f4 100644 --- a/src/secret_base.c +++ b/src/secret_base.c @@ -28,8 +28,8 @@ #include "text.h" #include "vars.h" -u8 sub_80BCA84(); -u8 sub_80BCBF8(); +void sub_80BCA84(u8); +void sub_80BCBF8(u8); void sub_80BCB90(u8); void sub_80BCBC0(u8); @@ -108,7 +108,7 @@ const u8 gUnknown_083D1374[] = { MAP_ID_SECRET_BASE_YELLOW_CAVE2, 6 }; -const struct MenuAction gUnknown_083D13D4[] = { +const struct MenuAction2 gUnknown_083D13D4[] = { {SecretBaseText_DelRegist, sub_80BCA84}, {gUnknownText_Exit, sub_80BCBF8} }; @@ -1325,7 +1325,37 @@ void sub_80BC980(u8 taskId) PauseVerticalScrollIndicator(0); PauseVerticalScrollIndicator(1); MenuDrawTextWindow(1, 0, 12, 5); - PrintMenuItems(2, 1, 2, gUnknown_083D13D4); + PrintMenuItems(2, 1, 2, (const struct MenuAction *)gUnknown_083D13D4); InitMenu(0, 2, 1, 2, 0, 10); gTasks[taskId].func = sub_80BC9E4; } + +void sub_80BC9E4(u8 taskId) +{ + if (gMain.newAndRepeatedKeys & DPAD_UP) + { + if (GetMenuCursorPos() != 0) + { + PlaySE(SE_SELECT); + MoveMenuCursor(-1); + } + } + else if (gMain.newAndRepeatedKeys & DPAD_DOWN) + { + if (GetMenuCursorPos() != 1) + { + PlaySE(SE_SELECT); + MoveMenuCursor(+1); + } + } + else if (gMain.newKeys & A_BUTTON) + { + PlaySE(SE_SELECT); + gUnknown_083D13D4[GetMenuCursorPos()].func(taskId); + } + else if (gMain.newKeys & B_BUTTON) + { + PlaySE(SE_SELECT); + sub_80BCBF8(taskId); + } +} -- cgit v1.2.3 From a44190a0b09c8fc0a6d5517218942f9aa3bbe188 Mon Sep 17 00:00:00 2001 From: scnorton Date: Thu, 20 Jul 2017 17:18:03 -0400 Subject: sub_80BCA84 --- src/secret_base.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'src') diff --git a/src/secret_base.c b/src/secret_base.c index bcf7371f4..b5d1ef310 100644 --- a/src/secret_base.c +++ b/src/secret_base.c @@ -40,6 +40,7 @@ void sub_80BCC54(u8); u8 sub_80BC948(u8); void sub_80BC980(u8); void sub_80BC9E4(u8); +void sub_80BCAEC(u8); const struct { @@ -1359,3 +1360,15 @@ void sub_80BC9E4(u8 taskId) sub_80BCBF8(taskId); } } + +void sub_80BCA84(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + DestroyVerticalScrollIndicator(0); + DestroyVerticalScrollIndicator(1); + HandleDestroyMenuCursors(); + MenuZeroFillWindowRect(0, 0, 29, 19); + sub_80BC190(gStringVar1, data[4]); + StringExpandPlaceholders(gStringVar4, gOtherText_OkayToDeleteFromRegistry); + DisplayItemMessageOnField(taskId, gStringVar4, sub_80BCAEC, 0); +} -- cgit v1.2.3 From 1761e09ccdfb575c98e728f63a31cbc5db5c5935 Mon Sep 17 00:00:00 2001 From: scnorton Date: Thu, 20 Jul 2017 17:33:51 -0400 Subject: Through sub_80BCB10 --- src/secret_base.c | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/secret_base.c b/src/secret_base.c index b5d1ef310..4904f7667 100644 --- a/src/secret_base.c +++ b/src/secret_base.c @@ -114,7 +114,7 @@ const struct MenuAction2 gUnknown_083D13D4[] = { {gUnknownText_Exit, sub_80BCBF8} }; -void (*const gUnknown_083D13E4[])(u8) = { +const struct YesNoFuncTable gUnknown_083D13E4 = { sub_80BCB90, sub_80BCBC0 }; @@ -1108,6 +1108,7 @@ void SecretBasePC_Registry(void) CreateTask(Task_SecretBasePC_Registry, 0); } +// This function tries to keep gTasks + 8 in a register. It should not. #ifdef NONMATCHING void Task_SecretBasePC_Registry(u8 taskId) { @@ -1372,3 +1373,23 @@ void sub_80BCA84(u8 taskId) StringExpandPlaceholders(gStringVar4, gOtherText_OkayToDeleteFromRegistry); DisplayItemMessageOnField(taskId, gStringVar4, sub_80BCAEC, 0); } + +void sub_80BCAEC(u8 taskId) +{ + DisplayYesNoMenu(20, 8, 1); + DoYesNoFuncWithChoice(taskId, &gUnknown_083D13E4); +} + +void sub_80BCB10(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + MenuZeroFillWindowRect(0, 0, 29, 19); + gSaveBlock1.secretBases[data[4]].sbr_field_1_6 = 0; + data[0]--; + if (data[2] > 0) + data[2]--; + if (data[0] < 8) + data[3]--; + sub_80BC7D8(taskId); + gTasks[taskId].func = sub_80BC824; +} -- cgit v1.2.3 From bab5b59b088452951e3afec325a8cacbb5f8d21f Mon Sep 17 00:00:00 2001 From: scnorton Date: Thu, 20 Jul 2017 17:40:15 -0400 Subject: through sub_80BCBC0 --- src/secret_base.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'src') diff --git a/src/secret_base.c b/src/secret_base.c index 4904f7667..6304e3acf 100644 --- a/src/secret_base.c +++ b/src/secret_base.c @@ -1393,3 +1393,16 @@ void sub_80BCB10(u8 taskId) sub_80BC7D8(taskId); gTasks[taskId].func = sub_80BC824; } + +void sub_80BCB90(u8 taskId) +{ + MenuZeroFillWindowRect(20, 8, 26, 13); + DisplayItemMessageOnField(taskId, gOtherText_RegisteredDataDeleted, sub_80BCB10, 0); +} + +void sub_80BCBC0(u8 taskId) +{ + MenuZeroFillWindowRect(0, 0, 29, 19); + sub_80BC7D8(taskId); + gTasks[taskId].func = sub_80BC824; +} -- cgit v1.2.3 From f18645e5d7e4fb4d9b060a77625d305a27791f43 Mon Sep 17 00:00:00 2001 From: scnorton Date: Thu, 20 Jul 2017 17:44:01 -0400 Subject: sub_80BCBF8 --- src/secret_base.c | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'src') diff --git a/src/secret_base.c b/src/secret_base.c index 6304e3acf..291ddc41d 100644 --- a/src/secret_base.c +++ b/src/secret_base.c @@ -1406,3 +1406,13 @@ void sub_80BCBC0(u8 taskId) sub_80BC7D8(taskId); gTasks[taskId].func = sub_80BC824; } + +void sub_80BCBF8(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + InitMenu(0, 18, 2, data[3] + 1, data[1], 11); + MenuZeroFillWindowRect(1, 0, 12, 5); + StartVerticalScrollIndicators(0); + StartVerticalScrollIndicators(1); + gTasks[taskId].func = sub_80BC824; +} -- cgit v1.2.3 From 5f0a01fc627003b17bc54fd4716a7380792005cf Mon Sep 17 00:00:00 2001 From: scnorton Date: Thu, 20 Jul 2017 17:48:36 -0400 Subject: sub_80BCC54 --- src/secret_base.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'src') diff --git a/src/secret_base.c b/src/secret_base.c index 291ddc41d..b9c316d95 100644 --- a/src/secret_base.c +++ b/src/secret_base.c @@ -28,6 +28,9 @@ #include "text.h" #include "vars.h" +extern u8 gUnknown_0815F399[]; +extern u8 gUnknown_0815F49A[]; + void sub_80BCA84(u8); void sub_80BCBF8(u8); void sub_80BCB90(u8); @@ -1416,3 +1419,20 @@ void sub_80BCBF8(u8 taskId) StartVerticalScrollIndicators(1); gTasks[taskId].func = sub_80BC824; } + +void sub_80BCC54(u8 taskId) +{ + u16 var54 = VarGet(VAR_0x4054); + BuyMenuFreeMemory(); + DestroyVerticalScrollIndicator(0); + DestroyVerticalScrollIndicator(1); + if (var54 == 0) + { + ScriptContext1_SetupScript(gUnknown_0815F399); + } + else + { + ScriptContext1_SetupScript(gUnknown_0815F49A); + } + DestroyTask(taskId); +} -- cgit v1.2.3 From 65efebf2d8cb0e727e7c6e179f5cdb281ec9482b Mon Sep 17 00:00:00 2001 From: scnorton Date: Thu, 20 Jul 2017 17:55:32 -0400 Subject: sub_80BCCA4 --- src/secret_base.c | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'src') diff --git a/src/secret_base.c b/src/secret_base.c index b9c316d95..16ff656c1 100644 --- a/src/secret_base.c +++ b/src/secret_base.c @@ -44,6 +44,7 @@ u8 sub_80BC948(u8); void sub_80BC980(u8); void sub_80BC9E4(u8); void sub_80BCAEC(u8); +u8 sub_80BCCA4(u8); const struct { @@ -1436,3 +1437,8 @@ void sub_80BCC54(u8 taskId) } DestroyTask(taskId); } + +u8 sub_80BCCA4(u8 sbid) +{ + return (gSaveBlock1.secretBases[sbid].trainerId[0] % 5) + gSaveBlock1.secretBases[sbid].gender * 5; +} -- cgit v1.2.3 From 96ebc5d46287e33df7bda74a6fb340281cdaa4c5 Mon Sep 17 00:00:00 2001 From: scnorton Date: Thu, 20 Jul 2017 18:03:49 -0400 Subject: sub_80BCCE8 --- src/secret_base.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) (limited to 'src') diff --git a/src/secret_base.c b/src/secret_base.c index 16ff656c1..20bf02ded 100644 --- a/src/secret_base.c +++ b/src/secret_base.c @@ -31,6 +31,17 @@ extern u8 gUnknown_0815F399[]; extern u8 gUnknown_0815F49A[]; +extern const u8 UnknownString_81A1BB2[]; +extern const u8 UnknownString_81A1F67[]; +extern const u8 UnknownString_81A2254[]; +extern const u8 UnknownString_81A25C3[]; +extern const u8 UnknownString_81A2925[]; +extern const u8 UnknownString_81A1D74[]; +extern const u8 UnknownString_81A20C9[]; +extern const u8 UnknownString_81A2439[]; +extern const u8 UnknownString_81A2754[]; +extern const u8 UnknownString_81A2B2A[]; + void sub_80BCA84(u8); void sub_80BCBF8(u8); void sub_80BCB90(u8); @@ -1442,3 +1453,18 @@ u8 sub_80BCCA4(u8 sbid) { return (gSaveBlock1.secretBases[sbid].trainerId[0] % 5) + gSaveBlock1.secretBases[sbid].gender * 5; } + +const u8 *sub_80BCCE8(void) +{ + u8 param = sub_80BCCA4(VarGet(VAR_0x4054)); + if (param == 0) return UnknownString_81A1BB2; + if (param == 1) return UnknownString_81A1F67; + if (param == 2) return UnknownString_81A2254; + if (param == 3) return UnknownString_81A25C3; + if (param == 4) return UnknownString_81A2925; + if (param == 5) return UnknownString_81A1D74; + if (param == 6) return UnknownString_81A20C9; + if (param == 7) return UnknownString_81A2439; + if (param == 8) return UnknownString_81A2754; + return UnknownString_81A2B2A; +} -- cgit v1.2.3 From 844714f5dcd80fe7073bfc1860f0f1138139ceb8 Mon Sep 17 00:00:00 2001 From: "U-Maria-PC\\Maria" Date: Wed, 26 Jul 2017 11:26:08 -0400 Subject: Update --- src/intro_credits_graphics.c | 430 ++++++++++++++++++++++++++++++++++--------- 1 file changed, 340 insertions(+), 90 deletions(-) (limited to 'src') diff --git a/src/intro_credits_graphics.c b/src/intro_credits_graphics.c index 8f5e86b05..ee3fa392b 100755 --- a/src/intro_credits_graphics.c +++ b/src/intro_credits_graphics.c @@ -21,6 +21,9 @@ #include "trig.h" #include "unknown_task.h" +// define register constants for the inline asm +asm(".include \"constants/gba_constants.inc\"\n"); + extern u8 gUnknown_0841225C; extern u8 gUnknown_084126DC; extern u8 gUnknown_084121FC; @@ -36,39 +39,41 @@ extern u8 gUnknown_08413CCC; const extern struct CompressedSpriteSheet gUnknown_08416B54; const extern struct CompressedSpriteSheet gUnknown_08416BDC; +extern u16 gUnknown_02039358; +extern s16 gUnknown_0203935A; extern s16 gUnknown_0203935C; - extern u8 gReservedSpritePaletteCount; void sub_8149248(); void sub_8149264(); -void load_intro_part2_graphics(u8 a){ - LZ77UnCompVram(&gUnknown_0841225C, (void *)(VRAM + 0x4000)); - LZ77UnCompVram(&gUnknown_084126DC, (void *)(VRAM + 0x7800)); - LoadPalette(&gUnknown_084121FC, 240, 32); - switch (a) - { - case 0: - default: - LZ77UnCompVram(&gUnknown_084128D8, (void *)(VRAM)); - LZ77UnCompVram(&gUnknown_08412EB4, (void *)(VRAM + 0x3000)); - LoadPalette(&gUnknown_08412818, 0, 96); - LoadCompressedObjectPic(&gUnknown_08416B54); - LoadPalette(&gUnknown_08413184, 256, 32); - sub_8149248(); - break; - case 1: - LZ77UnCompVram(&gUnknown_08413340, (void *)(VRAM)); - LZ77UnCompVram(&gUnknown_084139C8, (void *)(VRAM + 0x3000)); - LoadPalette(&gUnknown_08413300, 0, 32); - LoadCompressedObjectPic(&gUnknown_08416BDC); - LoadPalette(&gUnknown_08413CCC, 256, 32); - sub_8149264(); - break; - } - gUnknown_0203935C = 0; - gReservedSpritePaletteCount = 8; +void load_intro_part2_graphics(u8 a) +{ + LZ77UnCompVram(&gUnknown_0841225C, (void *)(VRAM + 0x4000)); + LZ77UnCompVram(&gUnknown_084126DC, (void *)(VRAM + 0x7800)); + LoadPalette(&gUnknown_084121FC, 240, 32); + switch (a) + { + case 0: + default: + LZ77UnCompVram(&gUnknown_084128D8, (void *)(VRAM)); + LZ77UnCompVram(&gUnknown_08412EB4, (void *)(VRAM + 0x3000)); + LoadPalette(&gUnknown_08412818, 0, 96); + LoadCompressedObjectPic(&gUnknown_08416B54); + LoadPalette(&gUnknown_08413184, 256, 32); + sub_8149248(); + break; + case 1: + LZ77UnCompVram(&gUnknown_08413340, (void *)(VRAM)); + LZ77UnCompVram(&gUnknown_084139C8, (void *)(VRAM + 0x3000)); + LoadPalette(&gUnknown_08413300, 0, 32); + LoadCompressedObjectPic(&gUnknown_08416BDC); + LoadPalette(&gUnknown_08413CCC, 256, 32); + sub_8149264(); + break; + } + gUnknown_0203935C = 0; + gReservedSpritePaletteCount = 8; } void sub_8148C78(u8 a) @@ -103,78 +108,323 @@ extern u8 gUnknown_08414064; void sub_8149280(); -void sub_8148CB0(u8 a){ - LZ77UnCompVram(&gUnknown_0841225C, (void *)(VRAM + 0x4000)); - LZ77UnCompVram(&gUnknown_084126DC, (void *)(VRAM + 0x7800)); - switch (a) - { - case 0: - default: - LoadPalette(&gUnknown_084121FC, 240, 32); - LZ77UnCompVram(&gUnknown_084128D8, (void *)(VRAM)); - LZ77UnCompVram(&gUnknown_08412EB4, (void *)(VRAM + 0x3000)); - LoadPalette(&gUnknown_08412818, 0, 96); - LoadCompressedObjectPic(&gUnknown_08416B54); - LZ77UnCompVram(&gUnknown_084131C4, (void *)(VRAM + 0x10000)); - LoadPalette(&gUnknown_08413184, 256, 32); - sub_8149248(); - break; - case 1: - LoadPalette(&gUnknown_0841221C, 240, 32); - LZ77UnCompVram(&gUnknown_084128D8, (void *)(VRAM)); - LZ77UnCompVram(&gUnknown_08412EB4, (void *)(VRAM + 0x3000)); - LoadPalette(&gUnknown_08412878, 0, 96); - LoadCompressedObjectPic(&gUnknown_08416B54); - LZ77UnCompVram(&gUnknown_084131C4, (void *)(VRAM + 0x10000)); - LoadPalette(&gUnknown_084131A4, 256, 32); - sub_8149248(); - break; - case 2: - case 3: - LoadPalette(&gUnknown_0841221C, 240, 32); - LZ77UnCompVram(&gUnknown_08413340, (void *)(VRAM)); - LZ77UnCompVram(&gUnknown_084139C8, (void *)(VRAM + 0x3000)); - LoadPalette(&gUnknown_08413320, 0, 32); - LoadCompressedObjectPic(&gUnknown_08416BDC); - LoadPalette(&gUnknown_08413320, 256, 32); - sub_8149264(); - break; - case 4: - LoadPalette(&gUnknown_0841223C, 240, 32); - LZ77UnCompVram(&gUnknown_08413E78, (void *)(VRAM)); - LZ77UnCompVram(&gUnknown_08414084, (void *)(VRAM + 0x3000)); - LoadPalette(&gUnknown_08413E38, 0, 64); - LoadCompressedObjectPic(&gUnknown_08416C70); - LoadPalette(&gUnknown_08414064, 256, 32); - sub_8149280(); - break; - } - gReservedSpritePaletteCount = 8; - gUnknown_0203935C = 0; +void sub_8148CB0(u8 a) +{ + LZ77UnCompVram(&gUnknown_0841225C, (void *)(VRAM + 0x4000)); + LZ77UnCompVram(&gUnknown_084126DC, (void *)(VRAM + 0x7800)); + switch (a) + { + case 0: + default: + LoadPalette(&gUnknown_084121FC, 240, 32); + LZ77UnCompVram(&gUnknown_084128D8, (void *)(VRAM)); + LZ77UnCompVram(&gUnknown_08412EB4, (void *)(VRAM + 0x3000)); + LoadPalette(&gUnknown_08412818, 0, 96); + LoadCompressedObjectPic(&gUnknown_08416B54); + LZ77UnCompVram(&gUnknown_084131C4, (void *)(VRAM + 0x10000)); + LoadPalette(&gUnknown_08413184, 256, 32); + sub_8149248(); + break; + case 1: + LoadPalette(&gUnknown_0841221C, 240, 32); + LZ77UnCompVram(&gUnknown_084128D8, (void *)(VRAM)); + LZ77UnCompVram(&gUnknown_08412EB4, (void *)(VRAM + 0x3000)); + LoadPalette(&gUnknown_08412878, 0, 96); + LoadCompressedObjectPic(&gUnknown_08416B54); + LZ77UnCompVram(&gUnknown_084131C4, (void *)(VRAM + 0x10000)); + LoadPalette(&gUnknown_084131A4, 256, 32); + sub_8149248(); + break; + case 2: + case 3: + LoadPalette(&gUnknown_0841221C, 240, 32); + LZ77UnCompVram(&gUnknown_08413340, (void *)(VRAM)); + LZ77UnCompVram(&gUnknown_084139C8, (void *)(VRAM + 0x3000)); + LoadPalette(&gUnknown_08413320, 0, 32); + LoadCompressedObjectPic(&gUnknown_08416BDC); + LoadPalette(&gUnknown_08413320, 256, 32); + sub_8149264(); + break; + case 4: + LoadPalette(&gUnknown_0841223C, 240, 32); + LZ77UnCompVram(&gUnknown_08413E78, (void *)(VRAM)); + LZ77UnCompVram(&gUnknown_08414084, (void *)(VRAM + 0x3000)); + LoadPalette(&gUnknown_08413E38, 0, 64); + LoadCompressedObjectPic(&gUnknown_08416C70); + LoadPalette(&gUnknown_08414064, 256, 32); + sub_8149280(); + break; + } + gReservedSpritePaletteCount = 8; + gUnknown_0203935C = 0; } void sub_8148E90(u8 a) { - REG_BG3CNT = 0x603; + REG_BG3CNT = 0x603; REG_BG2CNT = 0x702; REG_BG1CNT = 0xF05; REG_DISPCNT = 0x1F40; } +u8 sub_8148EC0(u8 a, u16 b, u16 c, u16 d) +{ + u8 taskId = CreateTask(&sub_8148F3C, 0); + + gTasks[taskId].data[0] = a; + gTasks[taskId].data[1] = b; + gTasks[taskId].data[2] = 0; + gTasks[taskId].data[3] = 0; + gTasks[taskId].data[4] = c; + gTasks[taskId].data[5] = 0; + gTasks[taskId].data[6] = 0; + gTasks[taskId].data[7] = d; + gTasks[taskId].data[8] = 8; + gTasks[taskId].data[9] = 0; + sub_8148F3C(taskId); + return taskId; +} + +#ifdef NONMATCHING +void sub_8148F3C(u8 taskId) +{ + register u32 r4 asm("r4"); + s32 r2; + + r4 = (u16)gTasks[taskId].data[1] << 16; + if (r4 != 0) + { + r2 = (gTasks[taskId].data[2] << 16) + (u16)gTasks[taskId].data[3] - (r4 >> 12); + gTasks[taskId].data[2] = r2 >> 16; + gTasks[taskId].data[3] = r2; + REG_BG1HOFS = gTasks[taskId].data[2]; + REG_BG1VOFS = gUnknown_0203935A + gUnknown_02039358; + } + + r4 = (u16)gTasks[taskId].data[4] << 16; + if (r4 != 0) + { + r2 = (gTasks[taskId].data[5] << 16) + (u16)gTasks[taskId].data[6] - (r4 >> 12); + gTasks[taskId].data[5] = r2 >> 16; + gTasks[taskId].data[3] = r2; + REG_BG2HOFS = gTasks[taskId].data[5]; + if (gTasks[taskId].data[0] != 0) + REG_BG2VOFS = gUnknown_0203935A + gUnknown_02039358; + else + REG_BG2VOFS = gUnknown_02039358; + } + + r4 = (u16)gTasks[taskId].data[7] << 16; + if (r4 != 0) + { + r2 = (gTasks[taskId].data[8] << 16) + (u16)gTasks[taskId].data[9] - (r4 >> 12);; + gTasks[taskId].data[8] = r2 >> 16; + gTasks[taskId].data[9] = r2; + REG_BG3HOFS = gTasks[taskId].data[8]; + REG_BG3VOFS = gUnknown_02039358; + } +} +#else +__attribute__((naked)) +void sub_8148F3C(u8 taskId) +{ + asm(".syntax unified\n\ + push {r4-r6,lr}\n\ + lsls r0, 24\n\ + lsrs r5, r0, 24\n\ + ldr r1, _08148FB4 @ =gTasks\n\ + lsls r0, r5, 2\n\ + adds r0, r5\n\ + lsls r0, 3\n\ + adds r3, r0, r1\n\ + ldrh r0, [r3, 0xA]\n\ + lsls r4, r0, 16\n\ + adds r6, r1, 0\n\ + cmp r4, 0\n\ + beq _08148F7C\n\ + movs r1, 0xC\n\ + ldrsh r0, [r3, r1]\n\ + lsls r0, 16\n\ + ldrh r1, [r3, 0xE]\n\ + adds r2, r0, r1\n\ + lsrs r0, r4, 12\n\ + subs r2, r0\n\ + asrs r1, r2, 16\n\ + strh r1, [r3, 0xC]\n\ + strh r2, [r3, 0xE]\n\ + ldr r0, _08148FB8 @ =REG_BG1HOFS\n\ + strh r1, [r0]\n\ + ldr r2, _08148FBC @ =REG_BG1VOFS\n\ + ldr r1, _08148FC0 @ =gUnknown_02039358\n\ + ldr r0, _08148FC4 @ =gUnknown_0203935A\n\ + ldrh r0, [r0]\n\ + ldrh r1, [r1]\n\ + adds r0, r1\n\ + strh r0, [r2]\n\ +_08148F7C:\n\ + ldrh r0, [r3, 0x10]\n\ + lsls r4, r0, 16\n\ + cmp r4, 0\n\ + beq _08148FD8\n\ + movs r1, 0x12\n\ + ldrsh r0, [r3, r1]\n\ + lsls r0, 16\n\ + ldrh r1, [r3, 0x14]\n\ + adds r2, r0, r1\n\ + lsrs r0, r4, 12\n\ + subs r2, r0\n\ + asrs r1, r2, 16\n\ + strh r1, [r3, 0x12]\n\ + strh r2, [r3, 0x14]\n\ + ldr r0, _08148FC8 @ =REG_BG2HOFS\n\ + strh r1, [r0]\n\ + movs r1, 0x8\n\ + ldrsh r0, [r3, r1]\n\ + cmp r0, 0\n\ + beq _08148FD0\n\ + ldr r2, _08148FCC @ =REG_BG2VOFS\n\ + ldr r1, _08148FC0 @ =gUnknown_02039358\n\ + ldr r0, _08148FC4 @ =gUnknown_0203935A\n\ + ldrh r0, [r0]\n\ + ldrh r1, [r1]\n\ + adds r0, r1\n\ + strh r0, [r2]\n\ + b _08148FD8\n\ + .align 2, 0\n\ +_08148FB4: .4byte gTasks\n\ +_08148FB8: .4byte REG_BG1HOFS\n\ +_08148FBC: .4byte REG_BG1VOFS\n\ +_08148FC0: .4byte gUnknown_02039358\n\ +_08148FC4: .4byte gUnknown_0203935A\n\ +_08148FC8: .4byte REG_BG2HOFS\n\ +_08148FCC: .4byte REG_BG2VOFS\n\ +_08148FD0:\n\ + ldr r0, _08149010 @ =REG_BG2VOFS\n\ + ldr r1, _08149014 @ =gUnknown_02039358\n\ + ldrh r1, [r1]\n\ + strh r1, [r0]\n\ +_08148FD8:\n\ + lsls r0, r5, 2\n\ + adds r0, r5\n\ + lsls r0, 3\n\ + adds r3, r0, r6\n\ + ldrh r0, [r3, 0x16]\n\ + lsls r4, r0, 16\n\ + cmp r4, 0\n\ + beq _08149008\n\ + movs r1, 0x18\n\ + ldrsh r0, [r3, r1]\n\ + lsls r0, 16\n\ + ldrh r1, [r3, 0x1A]\n\ + adds r2, r0, r1\n\ + lsrs r0, r4, 12\n\ + subs r2, r0\n\ + asrs r1, r2, 16\n\ + strh r1, [r3, 0x18]\n\ + strh r2, [r3, 0x1A]\n\ + ldr r0, _08149018 @ =REG_BG3HOFS\n\ + strh r1, [r0]\n\ + ldr r1, _0814901C @ =REG_BG3VOFS\n\ + ldr r0, _08149014 @ =gUnknown_02039358\n\ + ldrh r0, [r0]\n\ + strh r0, [r1]\n\ +_08149008:\n\ + pop {r4-r6}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_08149010: .4byte REG_BG2VOFS\n\ +_08149014: .4byte gUnknown_02039358\n\ +_08149018: .4byte REG_BG3HOFS\n\ +_0814901C: .4byte REG_BG3VOFS\n\ + .syntax divided\n"); +} +#endif +void sub_8149020(u8 mode) +{ + u16 var1; + u16 var2; + switch (mode) + { + case 0: + default: + /* stuff */ + if(gMain.vblankCounter1 & 3 || gPaletteFade.active) break; + if(gMain.vblankCounter1 & 4) + { + var1 = gPlttBufferUnfaded[9]; + var2 = gPlttBufferUnfaded[10]; + } + else + { + var1 = gPlttBufferUnfaded[10]; + var2 = gPlttBufferUnfaded[9]; + } + LoadPalette(&var1, 9, 2); + LoadPalette(&var2, 10, 2); + break; + case 2: + /* stuff */ + if(gMain.vblankCounter1 & 3 || gPaletteFade.active) break; + if(gMain.vblankCounter1 & 4) + { + var1 = 0x3D27; + var2 = 0x295; + } + else + { + var1 = 0x31C; + var2 = 0x3D27; + } + LoadPalette(&var1, 12, 2); + LoadPalette(&var2, 13, 2); + break; + case 1: + break; + } +} -u8 sub_8148EC0(u8 a, u16 b, u16 c, u16 d){ - u8 taskId = CreateTask(&sub_8148F3C, 0); - gTasks[taskId].data[0] = a; - gTasks[taskId].data[1] = b; - gTasks[taskId].data[2] = 0; - gTasks[taskId].data[3] = 0; - gTasks[taskId].data[4] = c; - gTasks[taskId].data[5] = 0; - gTasks[taskId].data[6] = 0; - gTasks[taskId].data[7] = d; - gTasks[taskId].data[8] = 8; - gTasks[taskId].data[9] = 0; - sub_8148F3C(taskId); - return taskId; +void sub_814910C(struct Sprite *sprite) +{ + if(gUnknown_0203935C) + { + DestroySprite(sprite); + } + else + { + s32 var = ((sprite->pos1.x << 16) | (u16)sprite->data2) + (u16)sprite->data1; + sprite->pos1.x = var >> 16; + sprite->data2 = var; + if (sprite->pos1.x > 255) sprite->pos1.x = 0xFFE0; + if (sprite->data0) + { + sprite->pos2.y = -(gUnknown_02039358 + gUnknown_0203935A); + } + else + { + sprite->pos2.y = -gUnknown_02039358; + } + } } + +struct UnknownStruct1 +{ + s8 var0; + s8 var1; + u8 var2; + u8 var3; + u16 var4; +}; + +// void sub_8149174(u8 a, struct UnknownStruct1 *b, union AnimCmd **c, u8 d) +// { + // int i; + // for(i = 0, i < d, i++) + // { + // u8 sprite = CreateSprite(&gSpriteTemplate_8416B3C, b[i].var1, b[i].var2, b[i].var3) + // CalcCenterToCornerVec(&gSprites[sprite], b[i].var0 / 16, b[i].var0 << 20, 0) + // gSprites[sprite].oam.priority = 3; + + // } +// } \ No newline at end of file -- cgit v1.2.3 From a9da4340a3c91553d19afdcd07355c53d5157a3e Mon Sep 17 00:00:00 2001 From: "U-Maria-PC\\Maria" Date: Sat, 29 Jul 2017 11:32:47 -0400 Subject: update --- src/intro_credits_graphics.c | 204 ++++++++++++++++++++++++++++++++++++++----- 1 file changed, 182 insertions(+), 22 deletions(-) (limited to 'src') diff --git a/src/intro_credits_graphics.c b/src/intro_credits_graphics.c index ee3fa392b..3ff4b4958 100755 --- a/src/intro_credits_graphics.c +++ b/src/intro_credits_graphics.c @@ -24,6 +24,17 @@ // define register constants for the inline asm asm(".include \"constants/gba_constants.inc\"\n"); +struct UnknownStruct1 +{ + u8 var0_0:4; + u8 var0_4:2; + u8 var0_6:2; + u8 var1; + u8 var2; + u8 var3; + u16 var4; +}; + extern u8 gUnknown_0841225C; extern u8 gUnknown_084126DC; extern u8 gUnknown_084121FC; @@ -36,6 +47,7 @@ extern u8 gUnknown_084139C8; extern u8 gUnknown_08413300; extern u8 gUnknown_08413CCC; +extern const struct SpriteTemplate gSpriteTemplate_8416B3C; const extern struct CompressedSpriteSheet gUnknown_08416B54; const extern struct CompressedSpriteSheet gUnknown_08416BDC; @@ -105,6 +117,18 @@ extern u8 gUnknown_08414084; extern u8 gUnknown_08413E38; const extern struct CompressedSpriteSheet gUnknown_08416C70; extern u8 gUnknown_08414064; +extern struct UnknownStruct1 gUnknown_08416B94; +extern struct UnknownStruct1 gUnknown_08416C10; +extern struct UnknownStruct1 gUnknown_08416C8C; +const extern union AnimCmd *const gSpriteAnimTable_8416B84; +const extern union AnimCmd *const gSpriteAnimTable_8416C04; +const extern union AnimCmd *const gSpriteAnimTable_8416C88; +const extern struct SpriteTemplate gSpriteTemplate_8416CDC; +const extern struct SpriteTemplate gSpriteTemplate_Brendan; +const extern struct SpriteTemplate gSpriteTemplate_8416CF4; +const extern struct SpriteTemplate gSpriteTemplate_May; +const extern struct SpriteTemplate gSpriteTemplate_8416D7C; +const extern struct SpriteTemplate gSpriteTemplate_8416D94; void sub_8149280(); @@ -170,7 +194,7 @@ void sub_8148E90(u8 a) u8 sub_8148EC0(u8 a, u16 b, u16 c, u16 d) { u8 taskId = CreateTask(&sub_8148F3C, 0); - + gTasks[taskId].data[0] = a; gTasks[taskId].data[1] = b; gTasks[taskId].data[2] = 0; @@ -190,7 +214,7 @@ void sub_8148F3C(u8 taskId) { register u32 r4 asm("r4"); s32 r2; - + r4 = (u16)gTasks[taskId].data[1] << 16; if (r4 != 0) { @@ -200,7 +224,7 @@ void sub_8148F3C(u8 taskId) REG_BG1HOFS = gTasks[taskId].data[2]; REG_BG1VOFS = gUnknown_0203935A + gUnknown_02039358; } - + r4 = (u16)gTasks[taskId].data[4] << 16; if (r4 != 0) { @@ -213,7 +237,7 @@ void sub_8148F3C(u8 taskId) else REG_BG2VOFS = gUnknown_02039358; } - + r4 = (u16)gTasks[taskId].data[7] << 16; if (r4 != 0) { @@ -408,23 +432,159 @@ void sub_814910C(struct Sprite *sprite) } } -struct UnknownStruct1 +void sub_8149174(u8 a, struct UnknownStruct1 *b, const union AnimCmd *const *c, u8 d) { - s8 var0; - s8 var1; - u8 var2; - u8 var3; - u16 var4; -}; + u8 i; + + for(i = 0; i < d; i++) + { + u8 sprite = CreateSprite(&gSpriteTemplate_8416B3C, b[i].var1, b[i].var2, b[i].var3); + CalcCenterToCornerVec(&gSprites[sprite], b[i].var0_4, b[i].var0_6, 0); + gSprites[sprite].oam.priority = 3; + gSprites[sprite].oam.shape = b[i].var0_4; + gSprites[sprite].oam.size = b[i].var0_6; + gSprites[sprite].oam.paletteNum = 0; + gSprites[sprite].anims = c; + StartSpriteAnim(&gSprites[sprite], b[i].var0_0); + gSprites[sprite].data0 = a; + gSprites[sprite].data1 = b[i].var4; + gSprites[sprite].data2 = 0; + } +} + +void sub_8149248() +{ + sub_8149174(0, &gUnknown_08416B94, &gSpriteAnimTable_8416B84, 9); +} + +void sub_8149264() +{ + sub_8149174(1, &gUnknown_08416C10, &gSpriteAnimTable_8416C04, 12); +} + +void sub_8149280() +{ + sub_8149174(1, &gUnknown_08416C8C, &gSpriteAnimTable_8416C88, 6); +} + +void nullsub_82() +{ +} + +void sub_81492A0(struct Sprite* sprite) +{ + sprite->invisible = gSprites[sprite->data0].invisible; + sprite->pos1.x = gSprites[sprite->data0].pos1.x; + sprite->pos1.y = gSprites[sprite->data0].pos1.y + 8; + sprite->pos2.x = gSprites[sprite->data0].pos2.x; + sprite->pos2.y = gSprites[sprite->data0].pos2.y; +} + + + +u8 intro_create_brendan_sprite(s16 a, s16 b) +{ + u8 sprite = CreateSprite(&gSpriteTemplate_8416CDC, a, b, 0); + u8 brendan = CreateSprite(&gSpriteTemplate_Brendan, a, b + 8, 1); + gSprites[brendan].data0 = sprite; + return sprite; +} + +u8 intro_create_may_sprite(s16 a, s16 b) +{ + u8 sprite = CreateSprite(&gSpriteTemplate_8416CF4, a, b, 0); + u8 may = CreateSprite(&gSpriteTemplate_May, a, b + 8, 1); + gSprites[may].data0 = sprite; + return sprite; +} + +void nullsub_83() +{ +} + +void sub_81493C4(struct Sprite* sprite) +{ + sprite->invisible = gSprites[sprite->data0].invisible; + sprite->pos1.y = gSprites[sprite->data0].pos1.y; + sprite->pos2.x = gSprites[sprite->data0].pos2.x; + sprite->pos2.y = gSprites[sprite->data0].pos2.y; +} + +u8 intro_create_latios_sprite(s16 a, s16 b) +{ + u8 sprite = CreateSprite(&gSpriteTemplate_8416D7C, a - 32, b, 2); + u8 latios = CreateSprite(&gSpriteTemplate_8416D7C, a + 32, b, 2); + gSprites[latios].data0 = sprite; + StartSpriteAnim(&gSprites[latios], 1); + gSprites[latios].callback = &sub_81493C4; + return sprite; +} + +u8 intro_create_latias_sprite(s16 a, s16 b) +{ + u8 sprite = CreateSprite(&gSpriteTemplate_8416D94, a - 32, b, 2); + u8 latios = CreateSprite(&gSpriteTemplate_8416D94, a + 32, b, 2); + gSprites[latios].data0 = sprite; + StartSpriteAnim(&gSprites[latios], 1); + gSprites[latios].callback = &sub_81493C4; + return sprite; +} -// void sub_8149174(u8 a, struct UnknownStruct1 *b, union AnimCmd **c, u8 d) -// { - // int i; - // for(i = 0, i < d, i++) - // { - // u8 sprite = CreateSprite(&gSpriteTemplate_8416B3C, b[i].var1, b[i].var2, b[i].var3) - // CalcCenterToCornerVec(&gSprites[sprite], b[i].var0 / 16, b[i].var0 << 20, 0) - // gSprites[sprite].oam.priority = 3; - - // } -// } \ No newline at end of file +/* thumb_func_start intro_create_latios_sprite +intro_create_latios_sprite: @ 8149424 + push {r4-r6,lr} + mov r6, r8 + push {r6} + adds r2, r0, 0 + adds r5, r1, 0 + ldr r0, _08149490 @ =gSpriteTemplate_8416D7C + mov r8, r0 + lsls r2, 16 + asrs r4, r2, 16 + ldr r0, _08149494 @ =0xffe00000 + adds r2, r0 + asrs r2, 16 + lsls r5, 16 + asrs r5, 16 + mov r0, r8 + adds r1, r2, 0 + adds r2, r5, 0 + movs r3, 0x2 + bl CreateSprite + adds r6, r0, 0 + lsls r6, 24 + lsrs r6, 24 + adds r4, 0x20 + lsls r4, 16 + asrs r4, 16 + mov r0, r8 + adds r1, r4, 0 + adds r2, r5, 0 + movs r3, 0x2 + bl CreateSprite + lsls r0, 24 + lsrs r0, 24 + ldr r5, _08149498 @ =gSprites + lsls r4, r0, 4 + adds r4, r0 + lsls r4, 2 + adds r0, r4, r5 + strh r6, [r0, 0x2E] + movs r1, 0x1 + bl StartSpriteAnim + adds r5, 0x1C + adds r4, r5 + ldr r0, _0814949C @ =sub_81493C4 + str r0, [r4] + adds r0, r6, 0 + pop {r3} + mov r8, r3 + pop {r4-r6} + pop {r1} + bx r1 + .align 2, 0 +_08149490: .4byte gSpriteTemplate_8416D7C +_08149494: .4byte 0xffe00000 +_08149498: .4byte gSprites +_0814949C: .4byte sub_81493C4 + thumb_func_end intro_create_latios_sprite */ \ No newline at end of file -- cgit v1.2.3 From abc36f9930a18e2302d9752ca695c41c555c341d Mon Sep 17 00:00:00 2001 From: "U-Maria-PC\\Maria" Date: Sat, 29 Jul 2017 19:46:13 -0400 Subject: intro_credits_graphics --- src/intro_credits_graphics.c | 211 ++++++++++++++++--------------------------- 1 file changed, 76 insertions(+), 135 deletions(-) (limited to 'src') diff --git a/src/intro_credits_graphics.c b/src/intro_credits_graphics.c index 3ff4b4958..58e40da91 100755 --- a/src/intro_credits_graphics.c +++ b/src/intro_credits_graphics.c @@ -367,42 +367,42 @@ _0814901C: .4byte REG_BG3VOFS\n\ void sub_8149020(u8 mode) { - u16 var1; - u16 var2; + u16 var1; + u16 var2; switch (mode) { - case 0: + case 0: default: /* stuff */ - if(gMain.vblankCounter1 & 3 || gPaletteFade.active) break; - if(gMain.vblankCounter1 & 4) - { - var1 = gPlttBufferUnfaded[9]; - var2 = gPlttBufferUnfaded[10]; - } - else - { - var1 = gPlttBufferUnfaded[10]; - var2 = gPlttBufferUnfaded[9]; - } - LoadPalette(&var1, 9, 2); - LoadPalette(&var2, 10, 2); + if(gMain.vblankCounter1 & 3 || gPaletteFade.active) break; + if(gMain.vblankCounter1 & 4) + { + var1 = gPlttBufferUnfaded[9]; + var2 = gPlttBufferUnfaded[10]; + } + else + { + var1 = gPlttBufferUnfaded[10]; + var2 = gPlttBufferUnfaded[9]; + } + LoadPalette(&var1, 9, 2); + LoadPalette(&var2, 10, 2); break; case 2: /* stuff */ - if(gMain.vblankCounter1 & 3 || gPaletteFade.active) break; - if(gMain.vblankCounter1 & 4) - { - var1 = 0x3D27; - var2 = 0x295; - } - else - { - var1 = 0x31C; - var2 = 0x3D27; - } - LoadPalette(&var1, 12, 2); - LoadPalette(&var2, 13, 2); + if(gMain.vblankCounter1 & 3 || gPaletteFade.active) break; + if(gMain.vblankCounter1 & 4) + { + var1 = 0x3D27; + var2 = 0x295; + } + else + { + var1 = 0x31C; + var2 = 0x3D27; + } + LoadPalette(&var1, 12, 2); + LoadPalette(&var2, 13, 2); break; case 1: break; @@ -412,35 +412,35 @@ void sub_8149020(u8 mode) void sub_814910C(struct Sprite *sprite) { if(gUnknown_0203935C) - { - DestroySprite(sprite); - } - else - { - s32 var = ((sprite->pos1.x << 16) | (u16)sprite->data2) + (u16)sprite->data1; + { + DestroySprite(sprite); + } + else + { + s32 var = ((sprite->pos1.x << 16) | (u16)sprite->data2) + (u16)sprite->data1; sprite->pos1.x = var >> 16; sprite->data2 = var; - if (sprite->pos1.x > 255) sprite->pos1.x = 0xFFE0; - if (sprite->data0) - { - sprite->pos2.y = -(gUnknown_02039358 + gUnknown_0203935A); - } - else - { - sprite->pos2.y = -gUnknown_02039358; - } - } + if (sprite->pos1.x > 255) sprite->pos1.x = 0xFFE0; + if (sprite->data0) + { + sprite->pos2.y = -(gUnknown_02039358 + gUnknown_0203935A); + } + else + { + sprite->pos2.y = -gUnknown_02039358; + } + } } void sub_8149174(u8 a, struct UnknownStruct1 *b, const union AnimCmd *const *c, u8 d) { u8 i; - for(i = 0; i < d; i++) - { - u8 sprite = CreateSprite(&gSpriteTemplate_8416B3C, b[i].var1, b[i].var2, b[i].var3); - CalcCenterToCornerVec(&gSprites[sprite], b[i].var0_4, b[i].var0_6, 0); - gSprites[sprite].oam.priority = 3; + for(i = 0; i < d; i++) + { + u8 sprite = CreateSprite(&gSpriteTemplate_8416B3C, b[i].var1, b[i].var2, b[i].var3); + CalcCenterToCornerVec(&gSprites[sprite], b[i].var0_4, b[i].var0_6, 0); + gSprites[sprite].oam.priority = 3; gSprites[sprite].oam.shape = b[i].var0_4; gSprites[sprite].oam.size = b[i].var0_6; gSprites[sprite].oam.paletteNum = 0; @@ -474,28 +474,28 @@ void nullsub_82() void sub_81492A0(struct Sprite* sprite) { sprite->invisible = gSprites[sprite->data0].invisible; - sprite->pos1.x = gSprites[sprite->data0].pos1.x; - sprite->pos1.y = gSprites[sprite->data0].pos1.y + 8; - sprite->pos2.x = gSprites[sprite->data0].pos2.x; - sprite->pos2.y = gSprites[sprite->data0].pos2.y; + sprite->pos1.x = gSprites[sprite->data0].pos1.x; + sprite->pos1.y = gSprites[sprite->data0].pos1.y + 8; + sprite->pos2.x = gSprites[sprite->data0].pos2.x; + sprite->pos2.y = gSprites[sprite->data0].pos2.y; } u8 intro_create_brendan_sprite(s16 a, s16 b) { - u8 sprite = CreateSprite(&gSpriteTemplate_8416CDC, a, b, 0); - u8 brendan = CreateSprite(&gSpriteTemplate_Brendan, a, b + 8, 1); - gSprites[brendan].data0 = sprite; - return sprite; + u8 sprite = CreateSprite(&gSpriteTemplate_8416CDC, a, b, 0); + u8 brendan = CreateSprite(&gSpriteTemplate_Brendan, a, b + 8, 1); + gSprites[brendan].data0 = sprite; + return sprite; } u8 intro_create_may_sprite(s16 a, s16 b) { - u8 sprite = CreateSprite(&gSpriteTemplate_8416CF4, a, b, 0); - u8 may = CreateSprite(&gSpriteTemplate_May, a, b + 8, 1); - gSprites[may].data0 = sprite; - return sprite; + u8 sprite = CreateSprite(&gSpriteTemplate_8416CF4, a, b, 0); + u8 may = CreateSprite(&gSpriteTemplate_May, a, b + 8, 1); + gSprites[may].data0 = sprite; + return sprite; } void nullsub_83() @@ -505,86 +505,27 @@ void nullsub_83() void sub_81493C4(struct Sprite* sprite) { sprite->invisible = gSprites[sprite->data0].invisible; - sprite->pos1.y = gSprites[sprite->data0].pos1.y; - sprite->pos2.x = gSprites[sprite->data0].pos2.x; - sprite->pos2.y = gSprites[sprite->data0].pos2.y; + sprite->pos1.y = gSprites[sprite->data0].pos1.y; + sprite->pos2.x = gSprites[sprite->data0].pos2.x; + sprite->pos2.y = gSprites[sprite->data0].pos2.y; } u8 intro_create_latios_sprite(s16 a, s16 b) { u8 sprite = CreateSprite(&gSpriteTemplate_8416D7C, a - 32, b, 2); - u8 latios = CreateSprite(&gSpriteTemplate_8416D7C, a + 32, b, 2); - gSprites[latios].data0 = sprite; - StartSpriteAnim(&gSprites[latios], 1); - gSprites[latios].callback = &sub_81493C4; - return sprite; + u8 latios = CreateSprite(&gSpriteTemplate_8416D7C, a + 32, b, 2); + gSprites[latios].data0 = sprite; + StartSpriteAnim(&gSprites[latios], 1); + gSprites[latios].callback = &sub_81493C4; + return sprite; } u8 intro_create_latias_sprite(s16 a, s16 b) { u8 sprite = CreateSprite(&gSpriteTemplate_8416D94, a - 32, b, 2); - u8 latios = CreateSprite(&gSpriteTemplate_8416D94, a + 32, b, 2); - gSprites[latios].data0 = sprite; - StartSpriteAnim(&gSprites[latios], 1); - gSprites[latios].callback = &sub_81493C4; - return sprite; -} - -/* thumb_func_start intro_create_latios_sprite -intro_create_latios_sprite: @ 8149424 - push {r4-r6,lr} - mov r6, r8 - push {r6} - adds r2, r0, 0 - adds r5, r1, 0 - ldr r0, _08149490 @ =gSpriteTemplate_8416D7C - mov r8, r0 - lsls r2, 16 - asrs r4, r2, 16 - ldr r0, _08149494 @ =0xffe00000 - adds r2, r0 - asrs r2, 16 - lsls r5, 16 - asrs r5, 16 - mov r0, r8 - adds r1, r2, 0 - adds r2, r5, 0 - movs r3, 0x2 - bl CreateSprite - adds r6, r0, 0 - lsls r6, 24 - lsrs r6, 24 - adds r4, 0x20 - lsls r4, 16 - asrs r4, 16 - mov r0, r8 - adds r1, r4, 0 - adds r2, r5, 0 - movs r3, 0x2 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - ldr r5, _08149498 @ =gSprites - lsls r4, r0, 4 - adds r4, r0 - lsls r4, 2 - adds r0, r4, r5 - strh r6, [r0, 0x2E] - movs r1, 0x1 - bl StartSpriteAnim - adds r5, 0x1C - adds r4, r5 - ldr r0, _0814949C @ =sub_81493C4 - str r0, [r4] - adds r0, r6, 0 - pop {r3} - mov r8, r3 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_08149490: .4byte gSpriteTemplate_8416D7C -_08149494: .4byte 0xffe00000 -_08149498: .4byte gSprites -_0814949C: .4byte sub_81493C4 - thumb_func_end intro_create_latios_sprite */ \ No newline at end of file + u8 latios = CreateSprite(&gSpriteTemplate_8416D94, a + 32, b, 2); + gSprites[latios].data0 = sprite; + StartSpriteAnim(&gSprites[latios], 1); + gSprites[latios].callback = &sub_81493C4; + return sprite; +} \ No newline at end of file -- cgit v1.2.3 From 9f625c9ec3129d9908d7a9498df58542bd66676a Mon Sep 17 00:00:00 2001 From: "U-Maria-PC\\Maria" Date: Wed, 2 Aug 2017 19:29:36 -0400 Subject: decompiled up to sub_80cb438 --- src/battle_anim_80CA710.c | 831 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 831 insertions(+) create mode 100755 src/battle_anim_80CA710.c (limited to 'src') diff --git a/src/battle_anim_80CA710.c b/src/battle_anim_80CA710.c new file mode 100755 index 000000000..191280e7b --- /dev/null +++ b/src/battle_anim_80CA710.c @@ -0,0 +1,831 @@ +#include "global.h" +#include "battle.h" +#include "battle_anim.h" +#include "blend_palette.h" +#include "decompress.h" +#include "palette.h" +#include "rng.h" +#include "rom_8077ABC.h" +#include "sprite.h" +#include "task.h" +#include "trig.h" + +extern s16 gBattleAnimArgs[8]; +extern u8 gBattleAnimPlayerMonIndex; +extern u8 gBattleAnimEnemyMonIndex; +extern struct SpriteTemplate gSpriteTemplate_83D631C; + +void sub_80CA768(struct Sprite* sprite); +void sub_80CA8B4(struct Sprite* sprite); +void sub_80CA9F8(struct Sprite* sprite); +void sub_80CAACC(struct Sprite* sprite); +void sub_80CAB88(struct Sprite* sprite); +void sub_80CABC0(struct Sprite* sprite); +void sub_80CAC44(struct Sprite* sprite); +void sub_80CADA8(struct Sprite* sprite); +void sub_80CAE74(struct Sprite* sprite); +void sub_80CAF20(struct Sprite* sprite); +void sub_80CAF6C(struct Sprite* sprite); +void sub_80CB09C(struct Sprite* sprite); +void sub_80CB1A4(struct Sprite* sprite); +void sub_80CB298(struct Sprite* sprite); +void sub_80CB2D4(struct Sprite* sprite); + +void sub_80787B0(struct Sprite *sprite, u8 a2); +void sub_8078764(struct Sprite *sprite, u8 a2); +void sub_8078B34(struct Sprite *sprite); +void sub_8078D60(struct Sprite *sprite); +void sub_80786EC(struct Sprite *sprite); +void sub_80782D8(struct Sprite *sprite); +void sub_807A3FC(u8 slot, u8 a2, s16 *a3, s16 *a4); +u8 sub_8079ED4(u8 slot); + +void move_anim_8074EE0(struct Sprite *sprite); +bool8 sub_8078718(struct Sprite *sprite); +bool8 sub_8078CE8(struct Sprite *sprite); + +void sub_80CB3A8(u8 taskId); +void sub_80CB438(u8 taskId); + +void sub_80CA710(struct Sprite* sprite) +{ + sprite->pos1.x += gBattleAnimArgs[0]; + sprite->pos1.y += gBattleAnimArgs[1]; + sprite->data0 = gBattleAnimArgs[2]; + sprite->data1 = gBattleAnimArgs[3]; + if (GetBankSide(gBattleAnimPlayerMonIndex)) + { + sprite->data3 = -gBattleAnimArgs[4]; + } + else + { + sprite->data3 = gBattleAnimArgs[4]; + } + sprite->data4 = gBattleAnimArgs[5]; + sprite->callback = sub_80CA768; +} + +void sub_80CA768(struct Sprite* sprite) +{ + if (sprite->data0 > 0) + { + sprite->data0--; + sprite->pos2.y = sprite->data2 >> 8; + sprite->data2 += sprite->data1; + sprite->pos2.x = Sin(sprite->data5, sprite->data3); + sprite->data5 = (sprite->data5 + sprite->data4) & 0xFF; + } + else + { + move_anim_8072740(sprite); + } +} + +void sub_80CA7B0(struct Sprite* sprite) +{ + sub_80787B0(sprite, 1); + sprite->data0 = gBattleAnimArgs[2]; + sprite->data2 = sub_8077ABC(gBattleAnimPlayerMonIndex, 2); + sprite->data4 = sub_8077ABC(gBattleAnimPlayerMonIndex, 3); + sprite->callback = sub_8078B34; + oamt_set_x3A_32(sprite, move_anim_8074EE0); +} + +void sub_80CA800(struct Sprite* sprite) +{ + sub_80787B0(sprite, 1); + StartSpriteAnim(sprite, gBattleAnimArgs[3]); + sprite->data0 = gBattleAnimArgs[2]; + sprite->data2 = sub_8077ABC(gBattleAnimEnemyMonIndex, 2); + sprite->data4 = sub_8077ABC(gBattleAnimEnemyMonIndex, 3); + sprite->callback = sub_8078B34; + oamt_set_x3A_32(sprite, move_anim_8072740); +} + +void sub_80CA858(struct Sprite* sprite) +{ + sub_80787B0(sprite, 1); + sprite->data0 = gBattleAnimArgs[2]; + sprite->data1 = sprite->pos1.x; + sprite->data2 = sub_8077ABC(gBattleAnimEnemyMonIndex, 2); + sprite->data3 = sprite->pos1.y; + sprite->data4 = sub_8077ABC(gBattleAnimEnemyMonIndex, 3); + obj_translate_based_on_private_1_2_3_4(sprite); + sprite->data5 = gBattleAnimArgs[3]; + sprite->callback = sub_80CA8B4; + sub_80CA8B4(sprite); +} + +void sub_80CA8B4(struct Sprite* sprite) +{ + if(sub_8078B5C(sprite)) + { + DestroySprite(sprite); + } + else + { + if(sprite->data5 > 0x7F) + { + sprite->subpriority = sub_8079E90(gBattleAnimEnemyMonIndex) + 1; + } + else + { + sprite->subpriority = sub_8079E90(gBattleAnimEnemyMonIndex) + 6; + } + sprite->pos2.x += Sin(sprite->data5, 5); + sprite->pos2.y += Cos(sprite->data5, 14); + sprite->data5 = (sprite->data5 + 15) & 0xFF; + } +} + +void sub_80CA928(u8 taskId) +{ + gTasks[taskId].data[0]--; + if (gTasks[taskId].data[0] == -1) + { + gTasks[taskId].data[1]++; + gTasks[taskId].data[0] = 6; + gBattleAnimArgs[0] = 15; + gBattleAnimArgs[1] = 0; + gBattleAnimArgs[2] = 80; + gBattleAnimArgs[3] = 0; + CreateSpriteAndAnimate(&gSpriteTemplate_83D631C, 0, 0, sub_8079E90(gBattleAnimEnemyMonIndex) + 1); + } + if (gTasks[taskId].data[1] == 15) DestroyAnimVisualTask(taskId); +} + +void sub_80CA9A8(struct Sprite* sprite) +{ + sub_8078764(sprite, 1); + sprite->data0 = gBattleAnimArgs[3]; + sprite->data2 = sub_8077ABC(gBattleAnimPlayerMonIndex, 2); + sprite->data4 = sub_8077ABC(gBattleAnimPlayerMonIndex, 3); + sprite->data5 = gBattleAnimArgs[2]; + sub_80786EC(sprite); + sprite->callback = sub_80CA9F8; +} + +void sub_80CA9F8(struct Sprite* sprite) +{ + if (sub_8078718(sprite)) move_anim_8072740(sprite); +} + +void sub_80CAA14(struct Sprite* sprite) +{ + u16 a = Random(); + u16 b; + + StartSpriteAnim(sprite, a & 7); + sprite->pos1.x = sub_8077ABC(gBattleAnimPlayerMonIndex, 2); + sprite->pos1.y = sub_8077ABC(gBattleAnimPlayerMonIndex, 3); + if (GetBankSide(gBattleAnimPlayerMonIndex)) + { + sprite->pos1.x -= 20; + } + else + { + sprite->pos1.x += 20; + } + b = Random(); + sprite->data0 = (b & 31) + 64; + sprite->data1 = sprite->pos1.x; + sprite->data2 = sub_8077ABC(gBattleAnimEnemyMonIndex, 2); + sprite->data3 = sprite->pos1.y; + sprite->data4 = sub_8077ABC(gBattleAnimEnemyMonIndex, 3); + sub_8078D60(sprite); + sprite->data5 = Random() & 0xFF; + sprite->data6 = sprite->subpriority; + sprite->callback = sub_80CAACC; + sub_80CAACC(sprite); +} + +void sub_80CAACC(struct Sprite* sprite) +{ + if (sub_8078CE8(sprite)) + { + move_anim_8072740(sprite); + } + else + { + sprite->pos2.y += Cos(sprite->data5, 12); + if (sprite->data5 <= 0x7E) + { + sprite->subpriority = sprite->data6; + } + else + { + sprite->subpriority = sprite->data6 + 1; + } + sprite->data5 = (sprite->data5 + 24) & 0xFF; + } +} + +void sub_80CAB18(struct Sprite* sprite) +{ + sub_80787B0(sprite, 1); + if(GetBankSide(gBattleAnimPlayerMonIndex)) + { + gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + } + sprite->data0 = gBattleAnimArgs[4]; + sprite->data2 = sub_8077ABC(gBattleAnimEnemyMonIndex, 0) + gBattleAnimArgs[2]; + sprite->data4 = sub_8077ABC(gBattleAnimEnemyMonIndex, 1) + gBattleAnimArgs[3]; + sprite->data5 = gBattleAnimArgs[5]; + sub_80786EC(sprite); + sprite->callback = sub_80CAB88; +} + +void sub_80CAB88(struct Sprite* sprite) +{ + if(sub_8078718(sprite)) + { + sprite->invisible = 1; + sprite->data0 = 10; + sprite->callback = sub_80782D8; + oamt_set_x3A_32(sprite, sub_80CABC0); + } +} + +void sub_80CABC0(struct Sprite* sprite) +{ + sprite->invisible = 0; + StartSpriteAnim(sprite, 1); + sprite->data0 = 60; + sprite->callback = sub_80782D8; + oamt_set_x3A_32(sprite, move_anim_8072740); +} + +void sub_80CABF8(struct Sprite* sprite) +{ + sub_8078764(sprite, 1); + StartSpriteAnim(sprite, gBattleAnimArgs[4]); + if (gBattleAnimArgs[4] == 1) + { + sprite->oam.objMode = 1; + } + sprite->data0 = gBattleAnimArgs[3]; + sprite->data1 = gBattleAnimArgs[2]; + sprite->callback = sub_80CAC44; + sub_80CAC44(sprite); +} + +void sub_80CAC44(struct Sprite* sprite) +{ + + u8 b; + + sprite->pos2.x = Sin(sprite->data1, 32); + sprite->pos2.y = Cos(sprite->data1, -3) + ((sprite->data2 += 24) >> 8); + if ((u16)(sprite->data1 - 0x40) < 0x80) + { + sprite->oam.priority = (sub_8079ED4(gBattleAnimEnemyMonIndex) & 3); + } + else + { + b = sub_8079ED4(gBattleAnimEnemyMonIndex) + 1; + if ( b > 3) + { + b = 3; + } + sprite->oam.priority = b; + } + sprite->data1 = (sprite->data1 + 2) & 0xFF; + sprite->data0--; + if (sprite->data0 == -1) move_anim_8072740(sprite); +} + +void sub_80CACEC(u8 taskId) +{ + if(IsContest() || !IsDoubleBattle()) + { + DestroyAnimVisualTask(taskId); + } + else + { + if (GetBankIdentity_permutated(gBattleAnimEnemyMonIndex) == 1) + { + REG_BG2CNT_BITFIELD.priority = 3; + } + else + { + REG_BG1CNT_BITFIELD.priority = 1; + } + DestroyAnimVisualTask(taskId); + } +} + +void sub_80CAD54(struct Sprite* sprite) +{ + sub_80787B0(sprite, 0); + sprite->data0 = gBattleAnimArgs[3]; + sprite->data1 = sprite->pos1.x; + sprite->data2 = sprite->pos1.x; + sprite->data3 = sprite->pos1.y; + sprite->data4 = sub_8077ABC(gBattleAnimPlayerMonIndex, 3) + gBattleAnimArgs[2]; + obj_translate_based_on_private_1_2_3_4(sprite); + sprite->data5 = 0x40; + sprite->callback = sub_80CADA8; + sub_80CADA8(sprite); +} + +void sub_80CADA8(struct Sprite* sprite) +{ + if(!sub_8078B5C(sprite)) + { + sprite->pos2.x += Sin(sprite->data5, 32); + sprite->pos2.y += Cos(sprite->data5, -5); + if ((u16)(sprite->data5 - 0x40) < 0x80) + { + sprite->subpriority = sub_8079E90(gBattleAnimPlayerMonIndex) - 1; + } + else + { + sprite->subpriority = sub_8079E90(gBattleAnimPlayerMonIndex) + 1; + } + sprite->data5 = (sprite->data5 + 5) & 0xFF; + } + else + { + move_anim_8072740(sprite); + } +} + +void sub_80CAE20(struct Sprite* sprite) +{ + sub_80787B0(sprite, 1); + sprite->data0 = gBattleAnimArgs[3]; + sprite->data1 = sprite->pos1.x; + sprite->data2 = sprite->pos1.x; + sprite->data3 = sprite->pos1.y; + sprite->data4 = sub_8077ABC(gBattleAnimPlayerMonIndex, 3) + gBattleAnimArgs[2]; + obj_translate_based_on_private_1_2_3_4(sprite); + sprite->data5 = 0x40; + sprite->callback = sub_80CAE74; + sub_80CAE74(sprite); +} + +void sub_80CAE74(struct Sprite* sprite) +{ + if(!sub_8078B5C(sprite)) + { + sprite->pos2.x += Sin(sprite->data5, 8); + if ((u16)(sprite->data5 - 0x3B) < 5 || (u16)(sprite->data5 - 0xBB) < 5) + { + sprite->oam.matrixNum ^= 8; + } + sprite->data5 = (sprite->data5 + 5) & 0xFF; + } + else + { + move_anim_8072740(sprite); + } +} + +void sub_80CAED8(struct Sprite* sprite) +{ + sprite->pos1.x = sub_8077ABC(gBattleAnimPlayerMonIndex, 2); + sprite->pos1.y = sub_8077ABC(gBattleAnimPlayerMonIndex, 3); + sprite->data0 = gBattleAnimArgs[0]; + sprite->data1 = gBattleAnimArgs[1]; + sprite->data2 = gBattleAnimArgs[2]; + sprite->callback = sub_80CAF20; +} + +void sub_80CAF20(struct Sprite* sprite) +{ + if(!sprite->data2) + { + if(sprite->data1 & 1) + { + sprite->data0 = 0x80; + sprite->data1 = 0; + sprite->data2 = 0; + } + else + { + sprite->data0 = sprite->data1 & 1; + sprite->data1 = sprite->data1 & 1; + sprite->data2 = sprite->data1 & 1; + } + sprite->callback = sub_80CAF6C; + } + else + { + sprite->data2--; + sprite->pos1.x += sprite->data0; + sprite->pos1.y += sprite->data1; + } +} + +void sub_80CAF6C(struct Sprite* sprite) +{ + if(GetBankSide(gBattleAnimPlayerMonIndex)) + { + sprite->pos2.x = -Sin(sprite->data0, 0x19); + } + else + { + sprite->pos2.x = Sin(sprite->data0, 0x19); + } + sprite->data0 = (sprite->data0 + 2) & 0xFF; + sprite->data1++; + if(!(sprite->data1 & 1)) + { + sprite->pos2.y++; + } + if(sprite->data1 > 0x50) + { + move_anim_8072740(sprite); + } +} + +void sub_80CAFD0(struct Sprite* sprite) +{ + sub_80787B0(sprite, 1); + if(GetBankSide(gBattleAnimPlayerMonIndex)) + { + gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + } + sprite->data0 = gBattleAnimArgs[4]; + if(!(gBattleAnimArgs[6])) + { + sprite->data2 = sub_8077ABC(gBattleAnimEnemyMonIndex, 2) + gBattleAnimArgs[2]; + sprite->data4 = sub_8077ABC(gBattleAnimEnemyMonIndex, 3) + gBattleAnimArgs[3]; + } + else + { + sub_807A3FC(gBattleAnimEnemyMonIndex, 1, &sprite->data2, &sprite->data4); + sprite->data2 += gBattleAnimArgs[2]; + sprite->data4 += gBattleAnimArgs[3]; + } + sprite->data5 = gBattleAnimArgs[5]; + sub_80786EC(sprite); + if(GetBankSide(gBattleAnimPlayerMonIndex) == GetBankSide(gBattleAnimEnemyMonIndex)) + { + sprite->data0 = 1; + } + else + { + sprite->data0 = 0; + } + sprite->callback = sub_80CB09C; +} + +#ifdef NONMATCHING +void sub_80CB09C(struct Sprite* sprite) +{ + s16 c = 0; + s16 a = sprite->data0; + s16 b = sprite->data7; + sprite->data0 = 1; + sub_8078718(sprite); + sprite->data0 = a; + if (b > 0xC8 && sprite->data7 <= 0x37 && sprite->oam.affineParam == 0) + sprite->oam.affineParam++; + if (sprite->oam.affineParam != 0 && sprite->data0 != 0) + { + sprite->invisible ^= 1; + sprite->oam.affineParam++; + if(sprite->oam.affineParam == 0x1E) + { + c = 1; + } + } + if((sprite->pos1.x + sprite->pos2.x + 16) <= 0x110 && (sprite->pos1.y + sprite->pos2.y) <= 0xA0 && (sprite->pos1.y + sprite->pos2.y) < -16) + { + c = 1; + } + if (!c) move_anim_8072740(sprite); +} +#else +__attribute__((naked)) +void sub_80CB09C(struct Sprite* sprite) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + adds r6, r0, 0\n\ + movs r7, 0\n\ + ldrh r5, [r6, 0x2E]\n\ + ldrh r4, [r6, 0x3C]\n\ + movs r0, 0x1\n\ + strh r0, [r6, 0x2E]\n\ + adds r0, r6, 0\n\ + bl sub_8078718\n\ + ldrh r0, [r6, 0x3C]\n\ + strh r5, [r6, 0x2E]\n\ + lsls r4, 16\n\ + asrs r4, 16\n\ + cmp r4, 0xC8\n\ + ble _080CB0CE\n\ + lsls r0, 16\n\ + asrs r0, 16\n\ + cmp r0, 0x37\n\ + bgt _080CB0CE\n\ + ldrh r0, [r6, 0x6]\n\ + cmp r0, 0\n\ + bne _080CB0D4\n\ + adds r0, 0x1\n\ + strh r0, [r6, 0x6]\n\ +_080CB0CE:\n\ + ldrh r0, [r6, 0x6]\n\ + cmp r0, 0\n\ + beq _080CB106\n\ +_080CB0D4:\n\ + movs r1, 0x2E\n\ + ldrsh r0, [r6, r1]\n\ + cmp r0, 0\n\ + beq _080CB106\n\ + adds r3, r6, 0\n\ + adds r3, 0x3E\n\ + ldrb r2, [r3]\n\ + lsls r0, r2, 29\n\ + lsrs r0, 31\n\ + movs r1, 0x1\n\ + eors r1, r0\n\ + lsls r1, 2\n\ + movs r0, 0x5\n\ + negs r0, r0\n\ + ands r0, r2\n\ + orrs r0, r1\n\ + strb r0, [r3]\n\ + ldrh r0, [r6, 0x6]\n\ + adds r0, 0x1\n\ + strh r0, [r6, 0x6]\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + cmp r0, 0x1E\n\ + bne _080CB106\n\ + movs r7, 0x1\n\ +_080CB106:\n\ + movs r2, 0x20\n\ + ldrsh r0, [r6, r2]\n\ + movs r2, 0x24\n\ + ldrsh r1, [r6, r2]\n\ + adds r0, r1\n\ + adds r0, 0x10\n\ + movs r1, 0x88\n\ + lsls r1, 1\n\ + cmp r0, r1\n\ + bhi _080CB130\n\ + movs r0, 0x22\n\ + ldrsh r1, [r6, r0]\n\ + movs r2, 0x26\n\ + ldrsh r0, [r6, r2]\n\ + adds r1, r0\n\ + cmp r1, 0xA0\n\ + bgt _080CB130\n\ + movs r0, 0x10\n\ + negs r0, r0\n\ + cmp r1, r0\n\ + bge _080CB132\n\ +_080CB130:\n\ + movs r7, 0x1\n\ +_080CB132:\n\ + cmp r7, 0\n\ + beq _080CB13C\n\ + adds r0, r6, 0\n\ + bl move_anim_8072740\n\ +_080CB13C:\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .syntax divided\n"); +} +#endif + +void sub_80CB144(struct Sprite* sprite) +{ + if(!IsContest() && IsDoubleBattle() == TRUE) + { + sub_807A3FC(gBattleAnimEnemyMonIndex, 1, &sprite->pos1.x, &sprite->pos1.y); + } + sprite->pos1.y += 32; + sprite->data0 = gBattleAnimArgs[0]; + sprite->data1 = gBattleAnimArgs[1]; + sprite->data2 = gBattleAnimArgs[2]; + sprite->data3 = gBattleAnimArgs[3]; + sprite->data4 = gBattleAnimArgs[4]; + sprite->callback = sub_80CB1A4; +} + +void sub_80CB1A4(struct Sprite* sprite) +{ + if(sprite->data1 == 0xFF) + { + sprite->pos1.y -= 2; + } + else if(sprite->data1 > 0) + { + sprite->pos1.y -= 2; + sprite->data1 -= 2; + } + sprite->data5 += sprite->data2; + if(sprite->data0 < sprite->data4) sprite->data5 += sprite->data2; + sprite->data5 &= 0xFF; + sprite->pos2.x = Cos(sprite->data5, sprite->data3); + sprite->pos2.y = Sin(sprite->data5, 5); + if(sprite->data5 <= 0x7F) + { + sprite->oam.priority = sub_8079ED4(gBattleAnimEnemyMonIndex) - 1; + } + else + { + sprite->oam.priority = sub_8079ED4(gBattleAnimEnemyMonIndex) + 1; + } + sprite->data0--; + if(!sprite->data0) move_anim_8072740(sprite); +} + +void sub_80CB25C(struct Sprite* sprite) +{ + sub_8078764(sprite, 0); + sprite->affineAnimPaused = 1; + StartSpriteAffineAnim(sprite, gBattleAnimArgs[2]); + sprite->data6 = gBattleAnimArgs[2]; + sprite->data7 = gBattleAnimArgs[3]; + sprite->callback = sub_80CB298; +} + +void sub_80CB298(struct Sprite* sprite) +{ + if((u16)gBattleAnimArgs[7] == 0xFFFF) + { + sprite->affineAnimPaused = 0; + obj_id_for_side_relative_to_move(1); + sprite->data0 = 0x100; + sprite->callback = sub_80CB2D4; + } +} + +void sub_80CB2D4(struct Sprite* sprite) +{ + obj_id_for_side_relative_to_move(1); + if(!sprite->data2) + { + sprite->data0 += 11; + } + else + { + sprite->data0 -= 11; + } + sprite->data1++; + if(sprite->data1 == 6) + { + sprite->data1 = 0; + sprite->data2 ^= 1; + } + if(sprite->affineAnimEnded) + { + sprite->data7--; + if(sprite->data7 > 0) + { + StartSpriteAffineAnim(sprite, sprite->data6); + } + else + { + move_anim_8072740(sprite); + } + } +} + +void sub_80CB340(u8 taskId) +{ + u8 spriteId = obj_id_for_side_relative_to_move(1); + if(gSprites[spriteId].invisible) + { + DestroyAnimVisualTask(taskId); + } + else + { + sub_8078E70(spriteId, 1); + gTasks[taskId].data[0] = gBattleAnimArgs[0]; + gTasks[taskId].data[1] = gBattleAnimArgs[1]; + gTasks[taskId].data[11] = 256; + gTasks[taskId].func = sub_80CB3A8; + } +} + +void sub_80CB3A8(u8 taskId) +{ + u8 spriteId = obj_id_for_side_relative_to_move(1); + gTasks[taskId].data[10] += gTasks[taskId].data[0]; + gSprites[spriteId].pos2.x = gTasks[taskId].data[10] >> 8; + if(GetBankSide(gBattleAnimEnemyMonIndex)) + { + gSprites[spriteId].pos2.x = -gSprites[spriteId].pos2.x; + } + gTasks[taskId].data[11] += 16; + obj_id_set_rotscale(spriteId, gTasks[taskId].data[11], gTasks[taskId].data[11], 0); + sub_8079A64(spriteId); + gTasks[taskId].data[1]--; + if(!gTasks[taskId].data[1]) + { + gTasks[taskId].data[0] = 0; + gTasks[taskId].func = sub_80CB438; + } +} + +#ifdef NONMATCHING +void sub_80CB438(u8 taskId) +{ + if((u16)gBattleAnimArgs[7] == 0xFFFF) + { + if(!gTasks[taskId].data[0]) + { + u8 spriteId = obj_id_for_side_relative_to_move(1); + sub_8078F40(spriteId); + gSprites[spriteId].pos2.x = 0; + gSprites[spriteId].pos2.y = 0; + gTasks[taskId].data[0]++; + } + else + { + gTasks[taskId].data[0]++; + + } + } + else if(gTasks[taskId].data[0]) + { + gTasks[taskId].data[0]++; + } + if(gTasks[taskId].data[0] == 3) DestroyAnimVisualTask(taskId); +} +#else +__attribute__((naked)) +void sub_80CB438(u8 taskId) +{ + asm(".syntax unified\n\ + push {r4-r6,lr}\n\ + lsls r0, 24\n\ + lsrs r3, r0, 24\n\ + ldr r0, _080CB484 @ =gBattleAnimArgs\n\ + ldrh r1, [r0, 0xE]\n\ + ldr r0, _080CB488 @ =0x0000ffff\n\ + cmp r1, r0\n\ + bne _080CB494\n\ + ldr r0, _080CB48C @ =gTasks\n\ + lsls r2, r3, 2\n\ + adds r1, r2, r3\n\ + lsls r1, 3\n\ + adds r6, r1, r0\n\ + movs r1, 0x8\n\ + ldrsh r5, [r6, r1]\n\ + adds r4, r0, 0\n\ + cmp r5, 0\n\ + bne _080CB4A8\n\ + movs r0, 0x1\n\ + bl obj_id_for_side_relative_to_move\n\ + adds r4, r0, 0\n\ + lsls r4, 24\n\ + lsrs r4, 24\n\ + adds r0, r4, 0\n\ + bl sub_8078F40\n\ + ldr r1, _080CB490 @ =gSprites\n\ + lsls r0, r4, 4\n\ + adds r0, r4\n\ + lsls r0, 2\n\ + adds r0, r1\n\ + strh r5, [r0, 0x24]\n\ + strh r5, [r0, 0x26]\n\ + ldrh r0, [r6, 0x8]\n\ + adds r0, 0x1\n\ + strh r0, [r6, 0x8]\n\ + b _080CB4C2\n\ + .align 2, 0\n\ +_080CB484: .4byte gBattleAnimArgs\n\ +_080CB488: .4byte 0x0000ffff\n\ +_080CB48C: .4byte gTasks\n\ +_080CB490: .4byte gSprites\n\ +_080CB494:\n\ + ldr r1, _080CB4C8 @ =gTasks\n\ + lsls r2, r3, 2\n\ + adds r0, r2, r3\n\ + lsls r0, 3\n\ + adds r0, r1\n\ + movs r4, 0x8\n\ + ldrsh r0, [r0, r4]\n\ + adds r4, r1, 0\n\ + cmp r0, 0\n\ + beq _080CB4C2\n\ +_080CB4A8:\n\ + adds r1, r2, r3\n\ + lsls r1, 3\n\ + adds r1, r4\n\ + ldrh r0, [r1, 0x8]\n\ + adds r0, 0x1\n\ + strh r0, [r1, 0x8]\n\ + lsls r0, 16\n\ + asrs r0, 16\n\ + cmp r0, 0x3\n\ + bne _080CB4C2\n\ + adds r0, r3, 0\n\ + bl DestroyAnimVisualTask\n\ +_080CB4C2:\n\ + pop {r4-r6}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_080CB4C8: .4byte gTasks\n\ + .syntax divided\n"); +} +#endif \ No newline at end of file -- cgit v1.2.3 From 00116b858033312ee9f00d85d72c5a9d421faf14 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BAl=20Pe=C3=B1acoba?= Date: Thu, 3 Aug 2017 11:57:53 +0200 Subject: decompiled some functions --- src/pokenav.c | 40 ---- src/pokenav_after.c | 40 ++++ src/pokenav_before.c | 611 +++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 651 insertions(+), 40 deletions(-) delete mode 100644 src/pokenav.c create mode 100644 src/pokenav_after.c create mode 100644 src/pokenav_before.c (limited to 'src') diff --git a/src/pokenav.c b/src/pokenav.c deleted file mode 100644 index 84ed7b14b..000000000 --- a/src/pokenav.c +++ /dev/null @@ -1,40 +0,0 @@ -#include "global.h" -#include "main.h" -#include "pokenav.h" -#include "battle.h" -#include "data2.h" -#include "de_rom_8040FE0.h" -#include "string_util.h" - -void sub_80F700C(u8 *arg0, u16 arg1) { - struct Trainer *trainer; - u8 *ptr; - -#if ENGLISH - trainer = (struct Trainer *) &gTrainers[gUnknown_083DFEC4->unkCEE8[arg1].unk0]; -#elif GERMAN - const u16 trainerIndex = gUnknown_083DFEC4->unkCEE8[arg1].unk0; - trainer = (struct Trainer *) &gTrainers[trainerIndex]; -#endif - - ptr = arg0; - if (arg1 < gUnknown_083DFEC4->unkD158) - { -#if ENGLISH - ptr = StringCopy(ptr, gTrainerClassNames[trainer->trainerClass]); -#elif GERMAN - ptr = StringCopy(ptr, de_sub_8041024(0, trainerIndex)); -#endif - - ptr[0] = 0xFC; - ptr[1] = 0x13; - ptr[2] = 0x4B; - ptr += 3; - ptr = StringCopy(ptr, trainer->trainerName); - } - - ptr[0] = 0xFC; - ptr[1] = 0x13; - ptr[2] = 0x80; - ptr[3] = 0xFF; -} diff --git a/src/pokenav_after.c b/src/pokenav_after.c new file mode 100644 index 000000000..84ed7b14b --- /dev/null +++ b/src/pokenav_after.c @@ -0,0 +1,40 @@ +#include "global.h" +#include "main.h" +#include "pokenav.h" +#include "battle.h" +#include "data2.h" +#include "de_rom_8040FE0.h" +#include "string_util.h" + +void sub_80F700C(u8 *arg0, u16 arg1) { + struct Trainer *trainer; + u8 *ptr; + +#if ENGLISH + trainer = (struct Trainer *) &gTrainers[gUnknown_083DFEC4->unkCEE8[arg1].unk0]; +#elif GERMAN + const u16 trainerIndex = gUnknown_083DFEC4->unkCEE8[arg1].unk0; + trainer = (struct Trainer *) &gTrainers[trainerIndex]; +#endif + + ptr = arg0; + if (arg1 < gUnknown_083DFEC4->unkD158) + { +#if ENGLISH + ptr = StringCopy(ptr, gTrainerClassNames[trainer->trainerClass]); +#elif GERMAN + ptr = StringCopy(ptr, de_sub_8041024(0, trainerIndex)); +#endif + + ptr[0] = 0xFC; + ptr[1] = 0x13; + ptr[2] = 0x4B; + ptr += 3; + ptr = StringCopy(ptr, trainer->trainerName); + } + + ptr[0] = 0xFC; + ptr[1] = 0x13; + ptr[2] = 0x80; + ptr[3] = 0xFF; +} diff --git a/src/pokenav_before.c b/src/pokenav_before.c new file mode 100644 index 000000000..d0efd2bbd --- /dev/null +++ b/src/pokenav_before.c @@ -0,0 +1,611 @@ +#include "global.h" +#include "main.h" +#include "pokenav.h" +#include "battle.h" +#include "data2.h" +#include "de_rom_8040FE0.h" +#include "string_util.h" +#include "rom4.h" +#include "palette.h" +#include "task.h" +#include "unknown_task.h" +#include "sound.h" +#include "region_map.h" +#include "songs.h" +#include "flags.h" + +struct UnknownPokenav0 { + /* 0x0000 */ u8 fill0000[0x0300]; + /* 0x0300 */ void (*var300)(void); + /* 0x0304 */ u16 var304; + /* 0x0306 */ u8 fill0306; + /* 0x0308 */ u32 var308; + /* 0x030C */ u8 fill030C[0x6a9f]; + /* 0x6dab */ u8 var6dab; + /* 0x6dac */ u8 var6dac; + /* 0x6dad */ u8 var6dad; + /* 0x6dae */ u8 var6dae; + /* 0x6daf */ u8 fill6daf[0x3]; + /* 0x6db2 */ u8 var6db2; + /* 0x6db3 */ u8 fill6db3[0x29]; + /* 0x6ddc */ u8 var6ddc; + /* 0x6ddd */ u8 fill6ddd[0x198b]; + /* 0x8768 */ u32 var8768; + /* 0x876C */ u8 fill876B[0x00bc]; + /* 0x8828 */ u8 var8828; + /* 0x8829 */ u8 fill8829[0x07c0]; + /* 0x8FE8 */ u8 var8fe8; + /* 0x8FE9 */ u8 fill8FE9[0x035B]; + /* 0x9344 */ u8 var9344; + /* 0x9345 */ u8 fill9345[0x3b8b]; + /* 0xced0 */ u32 varCED0; +}; + +struct UnknownPokenav8fff { + /* 0x8fff */ u8 var8fff[5]; + /* 0x9004 */ u8 fill9004[0x6e90]; + /* 0x6e95 */ u8 var6e95; +}; + + +extern u8 ewram[]; +#define ewram0 (*(struct UnknownPokenav0*)(ewram + 0)) +#define ewram8fff (*(struct UnknownPokenav8fff*)(ewram + 0x8fff)) +extern u8 unk_2000000[]; + +extern void sub_80F1A90(); +extern bool8 sub_80F1AC4(); +extern void sub_80F36F0(); +extern bool8 sub_80F3724(); +extern void sub_80EBC10(); +extern void sub_80EBDBC(void (*func)(void)); +extern void sub_80EBBE8(); +extern bool8 sub_80F26BC(void); +extern void sub_80EBDD8(); +extern void sub_80EBD90(); +extern void sub_80EBD18(); +extern void sub_80F1A74(); +extern void sub_80F1FF0(); +extern void sub_80FB260(); +extern void sub_80EFE7C(); +extern void sub_80F5BF0(); +extern void sub_80F6F64(); +extern void _call_via_r0(void (*func)(void)); +extern void sub_80F19FC(); + +void sub_80EBA5C() { + switch (gMain.state) { + default: + gMain.state = 0; + case 0: + ewram0.var6dac = is_c1_link_related_active(); + if (!ewram0.var6dac) { + ewram0.var6dab = 0; + gMain.state++; + SetMainCallback2(&sub_80EBBE8); + break; + } + break; + case 1: + SetVBlankCallback(NULL); + break; + case 2: + ResetPaletteFade(); + break; + case 3: + ResetSpriteData(); + break; + case 4: + FreeAllSpritePalettes(); + break; + case 5: + ResetTasks(); + break; + case 6: + remove_some_task(); + break; + case 7: + sub_80F1A90(); + gMain.state++; + case 8: + if (sub_80F1AC4()) return; + break; + case 9: + sub_80F2688(); + gMain.state++; + + case 0xA: + if (sub_80F26BC()) return; + break; + case 0xB: + sub_80F36F0(); + gMain.state++; + case 0xC: + if (sub_80F3724()) return; + break; + case 0xD: + sub_80EBC10(); + sub_80EBDBC(&sub_80EBDD8); + break; + case 0xE: + ewram0.var6dab = 1; + PlaySE(SE_PN_ON); + SetMainCallback2(&sub_80EBD90); + SetVBlankCallback(&sub_80EBD18); + sub_80F1A74(); + break; + } + gMain.state++; +} + +void sub_80EBBE8() { + u8 var1; + if (!ewram0.var6dab) { + var1 = ewram0.var6dab; + do { + sub_80EBA5C(); + var1 = ewram0.var6dab; + } while (!var1); + } +} + +// Falla el acceso a 0x8fff +#if 0 + +u16 gKeyRepeatStartDelay; +void sub_80EBCA8(); + +//void sub_80EBC10() { +// u16 i; +// u16 *unk2; +// gKeyRepeatStartDelay = 0x14; +// unk_2000000[0x8828] = CalculatePlayerPartyCount(); +// unk_2000000[0x6ddc] = unk_2000000[0x9344] = 0; +// *(u32 *)&unk_2000000[0x8768] = 0; +// *(u32 *)&unk_2000000[0xced0] = 0; +// for (i = 0; i <= 4; ++i) { +// unk_2000000[0x8fff + i] = 0; +// unk2 = (u16 *)unk_2000000; +// unk2[i*2 + 0x4820] = 0x9B; +// unk2[i*2 + 0x4821] = 0x5B; +// } +// unk_2000000[0x8fff + 0x6e95] = 0; +// sub_80EBCA8(); +//} +void sub_80EBC10() { + u16 i; + u16 *unk2; + gKeyRepeatStartDelay = 0x14; + ewram0.var8828 = CalculatePlayerPartyCount(); + ewram0.var6ddc = 0; + ewram0.var9344 = 0; + ewram0.var8768 = 0; + ewram0.varCED0 = 0; + for (i = 0; i <= 4; ++i) { + ewram8fff.var8fff[i] = 0; + unk2 = (u16 *)ewram; + unk2[i*2 + 0x4820] = 0x9B; + unk2[i*2 + 0x4821] = 0x5B; + } + ewram8fff.var6e95 = 0; + sub_80EBCA8(); +} + +#else + +__attribute__((naked)) +void sub_80EBC10() { + asm_unified("push {r4-r7,lr}\n\ + ldr r1, _080EBC7C @ =gKeyRepeatStartDelay\n\ + movs r0, 0x14\n\ + strh r0, [r1]\n\ + bl CalculatePlayerPartyCount\n\ + ldr r2, _080EBC80 @ =0x02000000\n\ + ldr r1, _080EBC84 @ =0x00008828\n\ + adds r3, r2, r1\n\ + movs r1, 0\n\ + strb r0, [r3]\n\ + ldr r3, _080EBC88 @ =0x00006ddc\n\ + adds r0, r2, r3\n\ + strb r1, [r0]\n\ + ldr r3, _080EBC8C @ =0x00009344\n\ + adds r0, r2, r3\n\ + strb r1, [r0]\n\ + ldr r3, _080EBC90 @ =0x00008768\n\ + adds r0, r2, r3\n\ + str r1, [r0]\n\ + ldr r3, _080EBC94 @ =0x0000ced0\n\ + adds r0, r2, r3\n\ + str r1, [r0]\n\ + movs r3, 0\n\ + ldr r0, _080EBC98 @ =0x00008fff\n\ + adds r7, r2, r0\n\ + mov r12, r2\n\ + movs r6, 0\n\ + ldr r5, _080EBC9C @ =0x00009040\n\ + movs r4, 0x9B\n\ +_080EBC4C:\n\ + adds r0, r3, r7\n\ + strb r6, [r0]\n\ + lsls r1, r3, 2\n\ + adds r1, r2\n\ + adds r0, r1, r5\n\ + strh r4, [r0]\n\ + ldr r0, _080EBCA0 @ =0x00009042\n\ + adds r1, r0\n\ + movs r0, 0x5B\n\ + strh r0, [r1]\n\ + adds r0, r3, 0x1\n\ + lsls r0, 16\n\ + lsrs r3, r0, 16\n\ + cmp r3, 0x4\n\ + bls _080EBC4C\n\ + ldr r1, _080EBCA4 @ =0x00006e95\n\ + add r1, r12\n\ + movs r0, 0\n\ + strb r0, [r1]\n\ + bl sub_80EBCA8\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_080EBC7C: .4byte gKeyRepeatStartDelay\n\ +_080EBC80: .4byte 0x02000000\n\ +_080EBC84: .4byte 0x00008828\n\ +_080EBC88: .4byte 0x00006ddc\n\ +_080EBC8C: .4byte 0x00009344\n\ +_080EBC90: .4byte 0x00008768\n\ +_080EBC94: .4byte 0x0000ced0\n\ +_080EBC98: .4byte 0x00008fff\n\ +_080EBC9C: .4byte 0x00009040\n\ +_080EBCA0: .4byte 0x00009042\n\ +_080EBCA4: .4byte 0x00006e95\n"); +} +#endif + +void sub_80EBCA8() { + unk_2000000[0x6db2] = 1; + unk_2000000[0x6db3] = 2; + unk_2000000[0x6db4] = 3; + if (FlagGet(SYS_RIBBON_GET)) { + unk_2000000[0x6db5] = 4; + } + else { + unk_2000000[0x6db5] = 0; + } + unk_2000000[0x6db6] = 5; +} + +void sub_80EBD18() { + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); + sub_80F1FF0(); +} + +void sub_80EBD30() { + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); + UpdateRegionMapVideoRegs(); + sub_80EFE7C(); +} + +void sub_80EBD4C() { + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); + sub_80F5BF0(); + sub_8089668(); +} + +void sub_80EBD68() { + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); + sub_80F6F64(); +} + +void sub_80EBD80() { + LoadOam(); + ProcessSpriteCopyRequests(); +} + +void sub_80EBD90() { + _call_via_r0(ewram0.var300); + AnimateSprites(); + BuildOamBuffer(); + RunTasks(); + UpdatePaletteFade(); + sub_80F19FC(); +} + +void sub_80EBDBC(void (*func)(void)) { + ewram0.var300 = func; + ewram0.var304 = 0; +} + +void sub_80F3FF0(); +bool8 sub_80F4024(); +void sub_80F2598(); +void sub_80EEE20(); +bool8 sub_80EEE54(); +void sub_80EEE08(); +void sub_80EF248(); +bool8 sub_80EF284(); +void sub_80F1B8C(); +bool8 sub_80F1BC8(u32 unk); +void sub_80EED2C(); +void sub_80F1DF0(); +bool8 sub_80F1E50(); +void sub_80EF428(); +void sub_80EC268(); + +void sub_80EBDD8() { + switch (ewram0.var304) { + case 0: + SetVBlankCallback(NULL); + REG_DISPCNT = 0; + ewram0.var6dad = ewram0.var6ddc; + ewram0.var6dae = 5; + ewram0.var304++; + break; + case 1: + sub_80F3FF0(); + ewram0.var304++; + case 2: + if (sub_80F4024()) return; + ewram0.var304++; + break; + case 3: + sub_80F2598(); + ewram0.var304++; + break; + case 4: + sub_80EEE20(); + ewram0.var304++; + case 5: + if (sub_80EEE54()) return; + sub_80EEE08(); + ewram0.var304++; + return; + case 6: + sub_80EF248(0); + ewram0.var304++; + case 7: + if (sub_80EF284(0)) return; + ewram0.var304++; + break; + case 8: + sub_80F1B8C(0); + ewram0.var304++; + case 9: + if (sub_80F1BC8(0)) return; + ewram0.var304++; + break; + case 10: + SetVBlankCallback(&sub_80EBD18); + ewram0.var304++; + break; + case 11: + BeginNormalPaletteFade(-1, 0, 0x10, 0, 0); + ewram0.var304++; + return; + case 12: + sub_80EED2C(0); + ewram0.var304++; + return; + case 13: + if (gPaletteFade.active) return; + ewram0.var304++; + return; + case 14: + sub_80F2C80(0); + ewram0.var304++; + case 15: + if (sub_80F2CBC(0)) return; + ewram0.var304++; + break; + case 16: + sub_80F1DF0(); + ewram0.var304++; + return; + case 17: + if (!sub_80F1E50()) { + sub_80EF428(0, 0); + sub_80EBDBC(&sub_80EC268); + } + return; + + } + +} + +bool8 sub_80EEF78(); +void sub_80EED1C(); + +void sub_80EC00C() { + switch (ewram0.var304) { + case 0: + if (!sub_80EEF78()) { + SetVBlankCallback(&sub_80EBD80); + sub_80EED1C(); + ewram0.var6dad = ewram0.var6ddc; + ewram0.var6dae = 5; + sub_80EEE08(); + ewram0.var304++; + } + break; + case 1: + sub_80EF248(0); + ewram0.var304++; + case 2: + if (sub_80EF284(0)) return; + ewram0.var304++; + break; + case 3: + sub_80F1B8C(0); + ewram0.var304++; + case 4: + if (sub_80F1BC8(0)) return; + ewram0.var304++; + break; + case 5: + if (sub_8055870()) return; + ewram0.var304++; + break; + case 6: + BeginNormalPaletteFade(ewram0.var308, -1, 0x10, 0, 0); + SetVBlankCallback(&sub_80EBD18); + ewram0.var304++; + break; + case 7: + sub_80EED2C(0); + ewram0.var304++; + break; + case 8: + if (gPaletteFade.active) return; + ewram0.var304++; + return; + case 9: + sub_80F2598(); + ewram0.var304++; + break; + case 10: + sub_80F2C80(0); + ewram0.var304++; + case 11: + if (sub_80F2CBC(0)) return; + ewram0.var304++; + return; + case 12: + sub_80F1DF0(); + ewram0.var304++; + return; + case 13: + if (sub_80F1E50()) return; + sub_80EF428(0, ewram0.var6dad); + sub_80EBDBC(&sub_80EC268); + } +} + +void sub_80F2D04(u32); +void sub_80EE9C0(u32, u8, u32); +bool8 sub_80EEA0C(); + +void sub_80EC210() { + switch (ewram0.var304) { + case 0: + sub_80F2D04(1); + sub_80EE9C0(0, ewram0.var6ddc, 0); + ewram0.var304++; + break; + case 1: + if (sub_80EEA0C()) return; + sub_80EBDBC(&sub_80EC268); + } +} + +#if 0 +bool8 sub_80EEC10(); +bool8 sub_80F6250(); +void sub_80EED9C(); +void sub_80F6208(); +void sub_80EDB88(); +void sub_80EC4A0(); +void sub_80EC81C(); +void sub_80F208C(); +void sub_80EE96C(); + +void sub_80EC268() { + if (ewram0.var304 != 3) { + // bls -> bgt + if (ewram0.var304 > 3) { + if (ewram0.var304 != 6) { + if (ewram0.var304 > 6) { + if (ewram0.var304 != 0xFF) return; + if (sub_80EEC10() == 0) { + if (gMain.newKeys == (A_BUTTON | B_BUTTON)) return; + sub_80EF428(0, ewram0.var6dad); + return; + } + PlaySE(0x5); + sub_80EF428(0, ewram0.var6dad); + sub_80EED9C(); + return; + + } + if (ewram0.var304 != 4) return; + if (sub_8055870() != 0) return; + if (ewram0.var8fe8 == 0) { + PlaySE(0x20); + sub_80EF428(0, 5); + ewram0.var304 = 0xFF; + return; + } + PlaySE(0x5); + sub_80EBDBC(&sub_80EDB88); + return; + } + if (ewram0.var304 != 4) return; + if (sub_8055870()) return; + if (!ewram0.var8fe8) { + PlaySE(0x20); + sub_80EF428(0, 5); + ewram0.var304 = 0xFF; + return; + } + PlaySE(5); + sub_80EBDBC(&sub_80EDB88); + return; + } + if (ewram0.var304 != 1) { + if (ewram0.var304 < 1) { + if (ewram0.var304 == 0) { + if (sub_80EEC10() == 0) { + if (gMain.newKeys != A_BUTTON) { + + } + ewram0.var6ddc = ewram0.var6dad; + // TODO arreglar esto + switch (ewram0.var6db2) { + case 1: + PlaySE(5); + sub_80EBDBC(&sub_80EC4A0); + return; + case 2: + PlaySE(5); + sub_80EBDBC(&sub_80EC81C); + return; + case 3: + ewram0.var304 = 6; + return; + case 4: + ewram0.var304 = 2; + return; + case 5: + ewram0.var304 = 1; + return; + } + } + PlaySE(0x5); + sub_80EF428(0, ewram0.var6dad); + sub_80EED9C(); + return; + } + } + sub_80F6208(); + ewram0.var304++; + if (sub_80F6250() != 0) return; + ewram0.var304++; + return; + } + sub_80F208C(); + sub_80EBDBC(&sub_80EE96C); + return; + } + if (sub_80F6250() != 0) return; + ewram0.var304++; + return; +} +#endif -- cgit v1.2.3 From b1f4bed3d16b251a2f9075b54da11652b22aa7fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BAl=20Pe=C3=B1acoba?= Date: Fri, 4 Aug 2017 13:21:18 +0200 Subject: sub_80EC4A0() --- src/pokenav_before.c | 365 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 365 insertions(+) (limited to 'src') diff --git a/src/pokenav_before.c b/src/pokenav_before.c index d0efd2bbd..4545da2c3 100644 --- a/src/pokenav_before.c +++ b/src/pokenav_before.c @@ -608,4 +608,369 @@ void sub_80EC268() { ewram0.var304++; return; } +#else +__attribute__((naked)) +void sub_80EC268() { + asm_unified("push {r4-r6,lr}\n\ + ldr r4, _080EC290 @ =0x02000000\n\ + movs r0, 0xC1\n\ + lsls r0, 2\n\ + adds r6, r4, r0\n\ + ldrh r0, [r6]\n\ + cmp r0, 0x3\n\ + bne _080EC27A\n\ + b _080EC3BE\n\ +_080EC27A:\n\ + cmp r0, 0x3\n\ + bgt _080EC294\n\ + cmp r0, 0x1\n\ + bne _080EC284\n\ + b _080EC3A2\n\ +_080EC284:\n\ + cmp r0, 0x1\n\ + ble _080EC28A\n\ + b _080EC3B4\n\ +_080EC28A:\n\ + cmp r0, 0\n\ + beq _080EC2AE\n\ + b _080EC492\n\ + .align 2, 0\n\ +_080EC290: .4byte 0x02000000\n\ +_080EC294:\n\ + cmp r0, 0x6\n\ + bne _080EC29A\n\ + b _080EC414\n\ +_080EC29A:\n\ + cmp r0, 0x6\n\ + bgt _080EC2A6\n\ + cmp r0, 0x4\n\ + bne _080EC2A4\n\ + b _080EC3DC\n\ +_080EC2A4:\n\ + b _080EC492\n\ +_080EC2A6:\n\ + cmp r0, 0xFF\n\ + bne _080EC2AC\n\ + b _080EC44C\n\ +_080EC2AC:\n\ + b _080EC492\n\ +_080EC2AE:\n\ + bl sub_80EEC10\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _080EC2D4\n\ + movs r0, 0x5\n\ + bl PlaySE\n\ + ldr r1, _080EC2D0 @ =0x00006dad\n\ + adds r0, r4, r1\n\ + ldrb r1, [r0]\n\ + movs r0, 0\n\ + bl sub_80EF428\n\ + bl sub_80EED9C\n\ + b _080EC492\n\ + .align 2, 0\n\ +_080EC2D0: .4byte 0x00006dad\n\ +_080EC2D4:\n\ + ldr r0, _080EC310 @ =gMain\n\ + ldrh r1, [r0, 0x2E]\n\ + movs r2, 0x1\n\ + adds r0, r2, 0\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _080EC394\n\ + ldr r2, _080EC314 @ =0x00006dad\n\ + adds r0, r4, r2\n\ + ldrb r1, [r0]\n\ + adds r2, 0x2F\n\ + adds r0, r4, r2\n\ + strb r1, [r0]\n\ + ldrb r0, [r0]\n\ + lsls r0, 24\n\ + asrs r0, 24\n\ + subs r2, 0x2A\n\ + adds r1, r4, r2\n\ + adds r0, r1\n\ + ldrb r0, [r0]\n\ + subs r0, 0x1\n\ + cmp r0, 0x4\n\ + bls _080EC304\n\ + b _080EC492\n\ +_080EC304:\n\ + lsls r0, 2\n\ + ldr r1, _080EC318 @ =_080EC31C\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + mov pc, r0\n\ + .align 2, 0\n\ +_080EC310: .4byte gMain\n\ +_080EC314: .4byte 0x00006dad\n\ +_080EC318: .4byte _080EC31C\n\ + .align 2, 0\n\ +_080EC31C:\n\ + .4byte _080EC330\n\ + .4byte _080EC344\n\ + .4byte _080EC380\n\ + .4byte _080EC36C\n\ + .4byte _080EC358\n\ +_080EC330:\n\ + movs r0, 0x5\n\ + bl PlaySE\n\ + ldr r0, _080EC340 @ =sub_80EC4A0\n\ + bl sub_80EBDBC\n\ + b _080EC492\n\ + .align 2, 0\n\ +_080EC340: .4byte sub_80EC4A0\n\ +_080EC344:\n\ + movs r0, 0x5\n\ + bl PlaySE\n\ + ldr r0, _080EC354 @ =sub_80EC81C\n\ + bl sub_80EBDBC\n\ + b _080EC492\n\ + .align 2, 0\n\ +_080EC354: .4byte sub_80EC81C\n\ +_080EC358:\n\ + ldr r0, _080EC368 @ =0x02000000\n\ + movs r1, 0xC1\n\ + lsls r1, 2\n\ + adds r0, r1\n\ + movs r1, 0x1\n\ + strh r1, [r0]\n\ + b _080EC492\n\ + .align 2, 0\n\ +_080EC368: .4byte 0x02000000\n\ +_080EC36C:\n\ + ldr r0, _080EC37C @ =0x02000000\n\ + movs r2, 0xC1\n\ + lsls r2, 2\n\ + adds r0, r2\n\ + movs r1, 0x2\n\ + strh r1, [r0]\n\ + b _080EC492\n\ + .align 2, 0\n\ +_080EC37C: .4byte 0x02000000\n\ +_080EC380:\n\ + ldr r0, _080EC390 @ =0x02000000\n\ + movs r1, 0xC1\n\ + lsls r1, 2\n\ + adds r0, r1\n\ + movs r1, 0x6\n\ + strh r1, [r0]\n\ + b _080EC492\n\ + .align 2, 0\n\ +_080EC390: .4byte 0x02000000\n\ +_080EC394:\n\ + movs r0, 0x2\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _080EC39E\n\ + b _080EC492\n\ +_080EC39E:\n\ + strh r2, [r6]\n\ + b _080EC492\n\ +_080EC3A2:\n\ + bl sub_80F208C\n\ + ldr r0, _080EC3B0 @ =sub_80EE96C\n\ + bl sub_80EBDBC\n\ + b _080EC492\n\ + .align 2, 0\n\ +_080EC3B0: .4byte sub_80EE96C\n\ +_080EC3B4:\n\ + bl sub_80F6208\n\ + ldrh r0, [r6]\n\ + adds r0, 0x1\n\ + strh r0, [r6]\n\ +_080EC3BE:\n\ + bl sub_80F6250\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + bne _080EC492\n\ + ldr r1, _080EC3D8 @ =0x02000000\n\ + movs r2, 0xC1\n\ + lsls r2, 2\n\ + adds r1, r2\n\ + ldrh r0, [r1]\n\ + adds r0, 0x1\n\ + strh r0, [r1]\n\ + b _080EC492\n\ + .align 2, 0\n\ +_080EC3D8: .4byte 0x02000000\n\ +_080EC3DC:\n\ + bl sub_8055870\n\ + cmp r0, 0\n\ + bne _080EC492\n\ + ldr r1, _080EC400 @ =0x00008fe8\n\ + adds r0, r4, r1\n\ + ldrb r0, [r0]\n\ + lsls r0, 24\n\ + asrs r0, 24\n\ + cmp r0, 0\n\ + beq _080EC408\n\ + movs r0, 0x5\n\ + bl PlaySE\n\ + ldr r0, _080EC404 @ =sub_80EDB88\n\ + bl sub_80EBDBC\n\ + b _080EC492\n\ + .align 2, 0\n\ +_080EC400: .4byte 0x00008fe8\n\ +_080EC404: .4byte sub_80EDB88\n\ +_080EC408:\n\ + movs r0, 0x20\n\ + bl PlaySE\n\ + movs r0, 0\n\ + movs r1, 0x5\n\ + b _080EC442\n\ +_080EC414:\n\ + bl sub_80F6C20\n\ + ldr r2, _080EC430 @ =0x0000d158\n\ + adds r0, r4, r2\n\ + ldrh r0, [r0]\n\ + cmp r0, 0\n\ + beq _080EC438\n\ + movs r0, 0x5\n\ + bl PlaySE\n\ + ldr r0, _080EC434 @ =sub_80EE3D8\n\ + bl sub_80EBDBC\n\ + b _080EC492\n\ + .align 2, 0\n\ +_080EC430: .4byte 0x0000d158\n\ +_080EC434: .4byte sub_80EE3D8\n\ +_080EC438:\n\ + movs r0, 0x20\n\ + bl PlaySE\n\ + movs r0, 0\n\ + movs r1, 0x6\n\ +_080EC442:\n\ + bl sub_80EF428\n\ + movs r0, 0xFF\n\ + strh r0, [r6]\n\ + b _080EC492\n\ +_080EC44C:\n\ + bl sub_80EEC10\n\ + lsls r0, 24\n\ + lsrs r5, r0, 24\n\ + cmp r5, 0\n\ + beq _080EC478\n\ + movs r0, 0x5\n\ + bl PlaySE\n\ + ldr r1, _080EC474 @ =0x00006dad\n\ + adds r0, r4, r1\n\ + ldrb r1, [r0]\n\ + movs r0, 0\n\ + bl sub_80EF428\n\ + movs r0, 0\n\ + strh r0, [r6]\n\ + bl sub_80EED9C\n\ + b _080EC492\n\ + .align 2, 0\n\ +_080EC474: .4byte 0x00006dad\n\ +_080EC478:\n\ + ldr r0, _080EC498 @ =gMain\n\ + ldrh r1, [r0, 0x2E]\n\ + movs r0, 0x3\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _080EC492\n\ + ldr r2, _080EC49C @ =0x00006dad\n\ + adds r0, r4, r2\n\ + ldrb r1, [r0]\n\ + movs r0, 0\n\ + bl sub_80EF428\n\ + strh r5, [r6]\n\ +_080EC492:\n\ + pop {r4-r6}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_080EC498: .4byte gMain\n\ +_080EC49C: .4byte 0x00006dad\n\ + "); +} #endif + +void sub_80F1E84(); +bool8 sub_80F1F10(); +void sub_80EEFBC(u32); +bool8 sub_80EEF34(); +void sub_80EED0C(); +void sub_80F2620(); +void sub_80EF814(); +void sub_80EF840(); +bool8 sub_80EF874(); +void sub_80F2DD8(); +void sub_80EC67C(); + +void sub_80EC4A0() { + u32 var1; + u32 var2; + switch (ewram0.var304) { + case 0: + sub_80F1E84(); + sub_80F2D04(0); + ewram0.var304++; + break; + case 1: + if (!sub_80F1F10()) { + if (gSaveBlock2.regionMapZoom) { + var1 = 0x7; + } + else var1 = 0x8; + sub_80EEFBC(var1); + ewram0.var304++; + } + break; + case 2: + if (!(var2 = sub_80EEF34())) { + BeginNormalPaletteFade(ewram0.var308, -1, 0x0, 0x10, var2); + ewram0.var304++; + } + break; + case 3: + if (gPaletteFade.active) return; + SetVBlankCallback(NULL); + sub_80EED0C(); + ewram0.var304++; + break; + case 4: + sub_80F2620(); + ewram0.var304++; + break; + case 5: + sub_80EF814(); + ewram0.var304++; + break; + case 6: + sub_80EF840(); + ewram0.var304++; + case 7: + if (sub_80EF874()) return; + ewram0.var304++; + break; + case 8: + sub_80F2C80(0x4); + ewram0.var304++; + case 9: + if (sub_80F2CBC(0x4)) return; + ewram0.var304++; + break; + case 0xA: + sub_80F2DD8(); + SetVBlankCallback(&sub_80EBD30); + ewram0.var304++; + break; + case 0xB: + if (sub_8055870()) return; + ewram0.var304++; + break; + case 0xC: + BeginNormalPaletteFade(ewram0.var308, -1, 0x10, 0, 0); + ewram0.var304++; + break; + case 0xD: + sub_80EED2C(0x1); + ewram0.var304++; + break; + case 0xE: + if (gPaletteFade.active) return; + sub_80EBDBC(&sub_80EC67C); + } +} -- cgit v1.2.3 From 02384ce88a28fd1e55a0d1d55fc1468e884560f3 Mon Sep 17 00:00:00 2001 From: "U-Maria-PC\\Maria" Date: Sat, 5 Aug 2017 16:47:38 -0400 Subject: decompiled up to sub_80CB7EC --- src/battle_anim_80CA710.c | 233 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 232 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/battle_anim_80CA710.c b/src/battle_anim_80CA710.c index 191280e7b..50bdb3005 100755 --- a/src/battle_anim_80CA710.c +++ b/src/battle_anim_80CA710.c @@ -14,6 +14,7 @@ extern s16 gBattleAnimArgs[8]; extern u8 gBattleAnimPlayerMonIndex; extern u8 gBattleAnimEnemyMonIndex; extern struct SpriteTemplate gSpriteTemplate_83D631C; +extern s16 gUnknown_03000728[]; void sub_80CA768(struct Sprite* sprite); void sub_80CA8B4(struct Sprite* sprite); @@ -30,6 +31,7 @@ void sub_80CB09C(struct Sprite* sprite); void sub_80CB1A4(struct Sprite* sprite); void sub_80CB298(struct Sprite* sprite); void sub_80CB2D4(struct Sprite* sprite); +void sub_80CB710(struct Sprite* sprite); void sub_80787B0(struct Sprite *sprite, u8 a2); void sub_8078764(struct Sprite *sprite, u8 a2); @@ -37,6 +39,7 @@ void sub_8078B34(struct Sprite *sprite); void sub_8078D60(struct Sprite *sprite); void sub_80786EC(struct Sprite *sprite); void sub_80782D8(struct Sprite *sprite); +void sub_8078CC0(struct Sprite *sprite); void sub_807A3FC(u8 slot, u8 a2, s16 *a3, s16 *a4); u8 sub_8079ED4(u8 slot); @@ -828,4 +831,232 @@ _080CB4C2:\n\ _080CB4C8: .4byte gTasks\n\ .syntax divided\n"); } -#endif \ No newline at end of file +#endif + +void sub_80CB4CC(struct Sprite* sprite) +{ + switch(sprite->data0) + { + case 0: + { + if(GetBankSide(gBattleAnimEnemyMonIndex) == 0) + { + s16 a = gBattleAnimArgs[0]; + gBattleAnimArgs[0] = -a; + } + sprite->pos1.x = sub_8077ABC(gBattleAnimEnemyMonIndex, 0) + gBattleAnimArgs[0]; + sprite->pos1.y = sub_8077ABC(gBattleAnimEnemyMonIndex, 1) + gBattleAnimArgs[1]; + sprite->invisible = 1; + sprite->data0++; + break; + } + case 1: + { + sprite->invisible = 0; + if(sprite->affineAnimEnded) + { + ChangeSpriteAffineAnim(sprite, 1); + sprite->data0 = 25; + sprite->data2 = sub_8077ABC(gBattleAnimPlayerMonIndex, 2); + sprite->data4 = sub_8077ABC(gBattleAnimPlayerMonIndex, 3); + sprite->callback = sub_8078CC0; + oamt_set_x3A_32(sprite, move_anim_8072740); + break; + } + } + } +} + +void sub_80CB59C(struct Sprite* sprite) +{ + if(!sprite->data0) + { + sprite->pos1.x = sub_8077ABC(gBattleAnimPlayerMonIndex, 2); + sprite->pos1.y = sub_8077ABC(gBattleAnimPlayerMonIndex, 1); + sprite->pos2.x = gBattleAnimArgs[0]; + sprite->pos2.y = gBattleAnimArgs[1]; + sprite->subpriority = gBattleAnimArgs[2] + 30; + StartSpriteAnim(sprite, gBattleAnimArgs[3]); + sprite->data2 = gBattleAnimArgs[4]; + sprite->data0++; + if((sprite->pos1.y + sprite->pos2.y) > 120) + { + sprite->pos1.y += -120 + (sprite->pos2.y + sprite->pos1.y); + } + } + sprite->callback = sub_80CB710; +} + +#ifdef NONMATCHING +void sub_80CB620(struct Sprite* sprite) +{ + u8 p1 = sub_8077ABC(gBattleAnimPlayerMonIndex, 2); + u8 p2 = sub_8077ABC(gBattleAnimPlayerMonIndex, 3); + u8 e1 = sub_8077ABC(gBattleAnimEnemyMonIndex, 2); + u8 e2 = sub_8077ABC(gBattleAnimEnemyMonIndex, 3); + e1 -= p1; + e2 -= p2; + sprite->pos1.x = p1 + ((gBattleAnimArgs[0] * e1) / 100); + sprite->pos1.y = p2 + ((gBattleAnimArgs[0] * e2) / 100); + sprite->pos2.x = gBattleAnimArgs[1]; + sprite->pos2.y = gBattleAnimArgs[2]; + sprite->subpriority = gBattleAnimArgs[3] + 30; + StartSpriteAnim(sprite, gBattleAnimArgs[4]); + sprite->data2 = gBattleAnimArgs[5]; + sprite->callback = sub_80CB710; + gUnknown_03000728[0] = sprite->pos1.x; + gUnknown_03000728[1] = sprite->pos1.y; + gUnknown_03000728[2] = e1; + gUnknown_03000728[3] = e2; +} +#else +__attribute__((naked)) +void sub_80CB620(struct Sprite* sprite) +{ + asm(".syntax unified\n\ + push {r4-r6,lr}\n\ + mov r6, r10\n\ + mov r5, r9\n\ + mov r4, r8\n\ + push {r4-r6}\n\ + sub sp, 0x4\n\ + mov r9, r0\n\ + ldr r4, _080CB6FC @ =gBattleAnimPlayerMonIndex\n\ + ldrb r0, [r4]\n\ + movs r1, 0x2\n\ + bl sub_8077ABC\n\ + adds r5, r0, 0\n\ + lsls r5, 24\n\ + lsrs r5, 24\n\ + ldrb r0, [r4]\n\ + movs r1, 0x3\n\ + bl sub_8077ABC\n\ + mov r8, r0\n\ + mov r0, r8\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + mov r8, r0\n\ + ldr r6, _080CB700 @ =gBattleAnimEnemyMonIndex\n\ + ldrb r0, [r6]\n\ + movs r1, 0x2\n\ + bl sub_8077ABC\n\ + adds r4, r0, 0\n\ + lsls r4, 24\n\ + lsrs r4, 24\n\ + ldrb r0, [r6]\n\ + movs r1, 0x3\n\ + bl sub_8077ABC\n\ + adds r2, r0, 0\n\ + lsls r2, 24\n\ + subs r4, r5\n\ + lsls r4, 16\n\ + lsrs r2, 24\n\ + mov r1, r8\n\ + subs r2, r1\n\ + lsls r2, 16\n\ + lsrs r2, 16\n\ + lsrs r3, r4, 16\n\ + mov r10, r3\n\ + asrs r4, 16\n\ + ldr r6, _080CB704 @ =gBattleAnimArgs\n\ + movs r1, 0\n\ + ldrsh r0, [r6, r1]\n\ + muls r0, r4\n\ + movs r1, 0x64\n\ + str r2, [sp]\n\ + bl __divsi3\n\ + adds r5, r0\n\ + mov r3, r9\n\ + strh r5, [r3, 0x20]\n\ + ldr r2, [sp]\n\ + lsls r0, r2, 16\n\ + asrs r0, 16\n\ + movs r3, 0\n\ + ldrsh r1, [r6, r3]\n\ + muls r0, r1\n\ + movs r1, 0x64\n\ + bl __divsi3\n\ + add r8, r0\n\ + mov r1, r8\n\ + mov r0, r9\n\ + strh r1, [r0, 0x22]\n\ + ldrh r0, [r6, 0x2]\n\ + mov r3, r9\n\ + strh r0, [r3, 0x24]\n\ + ldrh r0, [r6, 0x4]\n\ + strh r0, [r3, 0x26]\n\ + ldrb r0, [r6, 0x6]\n\ + adds r0, 0x1E\n\ + mov r1, r9\n\ + adds r1, 0x43\n\ + strb r0, [r1]\n\ + ldrb r1, [r6, 0x8]\n\ + mov r0, r9\n\ + bl StartSpriteAnim\n\ + ldrh r0, [r6, 0xA]\n\ + mov r1, r9\n\ + strh r0, [r1, 0x32]\n\ + ldr r0, _080CB708 @ =sub_80CB710\n\ + str r0, [r1, 0x1C]\n\ + ldr r1, _080CB70C @ =gUnknown_03000728\n\ + mov r3, r9\n\ + ldrh r0, [r3, 0x20]\n\ + strh r0, [r1]\n\ + ldrh r0, [r3, 0x22]\n\ + strh r0, [r1, 0x2]\n\ + mov r0, r10\n\ + strh r0, [r1, 0x4]\n\ + ldr r2, [sp]\n\ + strh r2, [r1, 0x6]\n\ + add sp, 0x4\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r6}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_080CB6FC: .4byte gBattleAnimPlayerMonIndex\n\ +_080CB700: .4byte gBattleAnimEnemyMonIndex\n\ +_080CB704: .4byte gBattleAnimArgs\n\ +_080CB708: .4byte sub_80CB710\n\ +_080CB70C: .4byte gUnknown_03000728\n\ + .syntax divided\n"); +} +#endif + +void sub_80CB710(struct Sprite* sprite) +{ + if(++sprite->data0 > (sprite->data2 - 10)) + { + sprite->invisible = sprite->data0 % 2; + } + if(sprite->data0 > sprite->data2) move_anim_8072740(sprite); +} + +void sub_80CB768(struct Sprite* sprite) +{ + if(!sprite->data0) + { + sprite->pos1.x = sub_8077ABC(gBattleAnimPlayerMonIndex, 2) + gBattleAnimArgs[0]; + sprite->pos1.y = sub_8077ABC(gBattleAnimPlayerMonIndex, 1) + gBattleAnimArgs[1]; + sprite->data1 = gBattleAnimArgs[2]; + sprite->data2 = gBattleAnimArgs[3]; + sprite->data3 = gBattleAnimArgs[4]; + } + sprite->data0++; + sprite->pos2.x = sprite->data1 * sprite->data0; + sprite->pos2.y = Sin((sprite->data0 * 20) & 0xFF, sprite->data2); + if(sprite->data0 > sprite->data3) move_anim_8072740(sprite); +} + +void sub_80CB7EC(struct Sprite* sprite, s16 c) +{ + s32 a = (sprite->pos1.x * 256) | sprite->pos1.y; + s32 b = (sprite->data6 * 256) | sprite->data7; + c *= 256; + sprite->data5 = a; + sprite->data6 = b; + sprite->data7 = c; +} \ No newline at end of file -- cgit v1.2.3 From dbea9d1df5cb25f16571b65847001279d51a2b37 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BAl=20Pe=C3=B1acoba?= Date: Sun, 6 Aug 2017 12:23:27 +0200 Subject: sub_80EC67C, sub_80EC81C, sub_80EC86C, sub_80EC960, sub_80EC9A8 --- src/pokenav_before.c | 158 ++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 157 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/pokenav_before.c b/src/pokenav_before.c index 4545da2c3..577441733 100644 --- a/src/pokenav_before.c +++ b/src/pokenav_before.c @@ -29,7 +29,11 @@ struct UnknownPokenav0 { /* 0x6db2 */ u8 var6db2; /* 0x6db3 */ u8 fill6db3[0x29]; /* 0x6ddc */ u8 var6ddc; - /* 0x6ddd */ u8 fill6ddd[0x198b]; + /* 0x6ddd */ u8 fill6ddd[0x13]; + /* 0x6df0 */ s8 var6df0; + /* 0x6df1 */ u8 fill6df1[0x9f]; + /* 0x6e90 */ u8 var6e90; + /* 0x6e91 */ u8 fill6e91[0x18d7]; /* 0x8768 */ u32 var8768; /* 0x876C */ u8 fill876B[0x00bc]; /* 0x8828 */ u8 var8828; @@ -974,3 +978,155 @@ void sub_80EC4A0() { sub_80EBDBC(&sub_80EC67C); } } + +void sub_80EF9F8(); +void sub_80EED9C(); +bool8 sub_80EFBDC(u32); +void sub_80EFBB0(); +void sub_80F2DF4(); + +void sub_80EC67C() { + u32 var1; + u32 var2; + switch (ewram0.var304) { + case 0: + switch (sub_80FAB60()) { + case 1: + sub_80EED9C(); + break; + case 3: + sub_80EF9F8(); + break; + case 4: + PlaySE(0x5); + ewram0.var304 = 1; + break; + case 5: + PlaySE(0x5); + ewram0.var304 = 4; + break; + } + break; + case 1: + if (!ewram0.var6e90) { + sub_80FAEC4(); + ewram0.var304++; + break; + } + if (sub_80EFBDC(1)) return; + sub_80FAEC4(); + ewram0.var304++; + break; + case 2: + if ((var2 = sub_80FAFC0())) return; + if (!ewram0.var6e90) { + sub_80EFBB0(); + ewram0.var304 = var2; + break; + } + ewram0.var304++; + break; + case 3: + if ((var1 = sub_80EFBDC(0))) return; + sub_80EFBB0(); + ewram0.var304 = var1; + break; + case 4: + BeginNormalPaletteFade(ewram0.var308, -1, 0, 0x10, 0); + ewram0.var304++; + break; + case 5: + if (gPaletteFade.active) return; + sub_80F2DF4(); + sub_80F2D04(0x4); + gSaveBlock2.regionMapZoom = (ewram0.var6e90 == 1) ? 1 : 0; + sub_80EBDBC(&sub_80EC00C); + } +} + +void sub_80EC86C(); + +void sub_80EC81C() { + switch (ewram0.var304) { + case 0: + sub_80F2D04(0); + sub_80EE9C0(1, 0, 1); + ewram0.var304++; + break; + case 1: + if (sub_80EEA0C()) return; + sub_80EBDBC(&sub_80EC86C); + } +} + +bool8 sub_80EEC90(); +void sub_80ED620(); +void sub_80EC960(); +bool8 sub_80F1E6C(); + +void sub_80EC86C() { + switch (ewram0.var304) { + case 0: + if (sub_80EEC90()) { + PlaySE(0x5); + sub_80EF428(1, ewram0.var6dad); + sub_80EED9C(); + break; + } + if (gMain.newKeys & A_BUTTON) { + PlaySE(0x5); + ewram0.var6df0 = ewram0.var6dad; + switch (ewram0.var6df0) { + case 0: + sub_80EBDBC(&sub_80ED620); + break; + case 1: + sub_80EBDBC(&sub_80EC960); + break; + case 2: + sub_80EBDBC(&sub_80EC210); + break; + } + break; + } + else if (gMain.newKeys & B_BUTTON) { + PlaySE(0x5); + ewram0.var6df0 = 0x2; + ewram0.var6dad = 0x2; + ewram0.var304++; + break; + } + break; + case 1: + if (sub_80F1E6C()) return; + sub_80EBDBC(&sub_80EC210); + } +} + +void sub_80ECC08(); + +void sub_80EC960() { + switch (ewram0.var304) { + case 0: + sub_80EE9C0(2, 0, 5); + ewram0.var304++; + break; + case 1: + if (sub_80EEA0C()) return; + sub_80EBDBC(&sub_80ECC08); + } +} + +void sub_80EC9A8() { + switch (ewram0.var304) { + case 0: + sub_80F2D04(5); + sub_80EE9C0(1, ewram0.var6df0, 0xC); + ewram0.var304++; + break; + case 1: + if (sub_80EEA0C()) return; + sub_80EBDBC(&sub_80EC86C); + sub_80EF428(1, ewram0.var6dad); + } +} -- cgit v1.2.3 From 6c6afe1c8a58457a0caa0b1a5532622b4249cebf Mon Sep 17 00:00:00 2001 From: "U-Maria-PC\\Maria" Date: Sun, 6 Aug 2017 16:44:22 -0400 Subject: decompiled up to sub_80cbc8c --- src/battle_anim_80CA710.c | 502 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 502 insertions(+) (limited to 'src') diff --git a/src/battle_anim_80CA710.c b/src/battle_anim_80CA710.c index 50bdb3005..85ad92d7f 100755 --- a/src/battle_anim_80CA710.c +++ b/src/battle_anim_80CA710.c @@ -6,6 +6,7 @@ #include "palette.h" #include "rng.h" #include "rom_8077ABC.h" +#include "sound.h" #include "sprite.h" #include "task.h" #include "trig.h" @@ -32,6 +33,9 @@ void sub_80CB1A4(struct Sprite* sprite); void sub_80CB298(struct Sprite* sprite); void sub_80CB2D4(struct Sprite* sprite); void sub_80CB710(struct Sprite* sprite); +void sub_80CBB60(struct Sprite* sprite); +void sub_80CBC8C(struct Sprite* sprite); +void sub_80CBCF8(struct Sprite* sprite); void sub_80787B0(struct Sprite *sprite, u8 a2); void sub_8078764(struct Sprite *sprite, u8 a2); @@ -42,6 +46,7 @@ void sub_80782D8(struct Sprite *sprite); void sub_8078CC0(struct Sprite *sprite); void sub_807A3FC(u8 slot, u8 a2, s16 *a3, s16 *a4); u8 sub_8079ED4(u8 slot); +s8 sub_8076F98(s8 a); void move_anim_8074EE0(struct Sprite *sprite); bool8 sub_8078718(struct Sprite *sprite); @@ -1059,4 +1064,501 @@ void sub_80CB7EC(struct Sprite* sprite, s16 c) sprite->data5 = a; sprite->data6 = b; sprite->data7 = c; +} + +#ifdef NONMATCHING +bool8 sub_80CB814(struct Sprite* sprite) +{ + s32 a = sprite->data5 >> 8; + s16 d = sprite->data5; + s16 b = sprite->data6 >> 8; + s16 e = sprite->data6; + s16 c = sprite->data7 >> 8; + s16 f = c & 0xFF; + if(!b) + { + b = ~32; + } + else if(b == 255) + { + b = 0x110; + } + sprite->pos1.x = ((b - a) * f / a ) + (((e - d) * f) / a); + sprite->pos2.y = d; + f++; + if(f != a) + { + sprite->data7 = (f << 8) | c; + return FALSE; + } + return TRUE; +} +#else +__attribute__((naked)) +bool8 sub_80CB814(struct Sprite* sprite) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + mov r8, r0\n\ + ldrh r0, [r0, 0x38]\n\ + lsrs r1, r0, 8\n\ + mov r10, r1\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + mov r9, r0\n\ + mov r1, r8\n\ + ldrh r0, [r1, 0x3A]\n\ + lsrs r2, r0, 8\n\ + lsls r0, 24\n\ + lsrs r4, r0, 24\n\ + ldrh r1, [r1, 0x3C]\n\ + lsls r0, r1, 16\n\ + asrs r0, 24\n\ + lsls r0, 16\n\ + lsrs r6, r0, 16\n\ + movs r3, 0xFF\n\ + ands r3, r1\n\ + cmp r2, 0\n\ + bne _080CB84E\n\ + movs r2, 0x20\n\ + negs r2, r2\n\ + b _080CB856\n\ +_080CB84E:\n\ + cmp r2, 0xFF\n\ + bne _080CB856\n\ + movs r2, 0x88\n\ + lsls r2, 1\n\ +_080CB856:\n\ + mov r0, r9\n\ + subs r4, r0\n\ + lsls r4, 16\n\ + lsrs r4, 16\n\ + mov r1, r10\n\ + subs r0, r2, r1\n\ + lsls r5, r3, 16\n\ + asrs r5, 16\n\ + muls r0, r5\n\ + lsls r1, r6, 16\n\ + asrs r7, r1, 16\n\ + adds r1, r7, 0\n\ + bl __divsi3\n\ + adds r6, r0, 0\n\ + lsls r4, 16\n\ + asrs r4, 16\n\ + adds r0, r4, 0\n\ + muls r0, r5\n\ + adds r1, r7, 0\n\ + bl __divsi3\n\ + add r6, r10\n\ + mov r1, r8\n\ + strh r6, [r1, 0x20]\n\ + add r0, r9\n\ + strh r0, [r1, 0x22]\n\ + adds r5, 0x1\n\ + lsls r5, 16\n\ + lsrs r3, r5, 16\n\ + asrs r5, 16\n\ + cmp r5, r7\n\ + beq _080CB8A8\n\ + lsls r1, r7, 8\n\ + lsls r0, r3, 16\n\ + asrs r0, 16\n\ + orrs r0, r1\n\ + mov r1, r8\n\ + strh r0, [r1, 0x3C]\n\ + movs r0, 0\n\ + b _080CB8AA\n\ +_080CB8A8:\n\ + movs r0, 0x1\n\ +_080CB8AA:\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r1}\n\ + bx r1\n\ + .syntax divided\n"); +} +#endif + +void sub_80CB8B8(struct Sprite* sprite) +{ + if(sprite->data0 == 10) + { + StartSpriteAffineAnim(sprite, 1); + } + sprite->data0++; + if(sprite->data0 > 50) move_anim_8072740(sprite); +} + +#ifdef NONMATCHING +void sub_80CB8E8(struct Sprite* sprite) +{ + int temp = ((sprite->data3 * 128) / sprite->data4) + sprite->data0; + int zero = 0; + sprite->data0 = temp; + if(sprite->data0 > 0x7F) + { + sprite->data1++; + sprite->data0 = zero; + } + sprite->pos2.y = Sin(sprite->data0 + 0x80, (sprite->data1 * 8) - 30); + if(!sub_80CB814(sprite)) + { + sprite->pos2.y = zero; + sprite->data0 = zero; + sprite->callback = sub_80CB8B8; + } +} +#else +__attribute__((naked)) +void sub_80CB8E8(struct Sprite* sprite) +{ + asm(".syntax unified\n\ + push {r4,r5,lr}\n\ + adds r4, r0, 0\n\ + movs r1, 0x34\n\ + ldrsh r0, [r4, r1]\n\ + lsls r0, 7\n\ + movs r2, 0x36\n\ + ldrsh r1, [r4, r2]\n\ + bl __divsi3\n\ + ldrh r1, [r4, 0x2E]\n\ + adds r1, r0\n\ + movs r5, 0\n\ + strh r1, [r4, 0x2E]\n\ + lsls r1, 16\n\ + asrs r1, 16\n\ + cmp r1, 0x7F\n\ + ble _080CB912\n\ + ldrh r0, [r4, 0x30]\n\ + adds r0, 0x1\n\ + strh r0, [r4, 0x30]\n\ + strh r5, [r4, 0x2E]\n\ +_080CB912:\n\ + ldrh r0, [r4, 0x2E]\n\ + adds r0, 0x80\n\ + lsls r0, 16\n\ + asrs r0, 16\n\ + movs r1, 0x30\n\ + ldrsh r2, [r4, r1]\n\ + lsls r2, 3\n\ + movs r1, 0x1E\n\ + subs r1, r2\n\ + lsls r1, 16\n\ + asrs r1, 16\n\ + bl Sin\n\ + strh r0, [r4, 0x26]\n\ + adds r0, r4, 0\n\ + bl sub_80CB814\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _080CB942\n\ + strh r5, [r4, 0x26]\n\ + strh r5, [r4, 0x2E]\n\ + ldr r0, _080CB948 @ =sub_80CB8B8\n\ + str r0, [r4, 0x1C]\n\ +_080CB942:\n\ + pop {r4,r5}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_080CB948: .4byte sub_80CB8B8\n\ + .syntax divided\n"); +} +#endif + +void sub_80CB94C(struct Sprite* sprite) +{ + s16 e1; + s16 e2; + sub_80787B0(sprite, 0); + e1 = sub_8077ABC(gBattleAnimEnemyMonIndex, 0); + e2 = sub_8077ABC(gBattleAnimEnemyMonIndex, 1); + if((gBattleAnimPlayerMonIndex ^ 2) == gBattleAnimEnemyMonIndex) + { + sprite->data6 = e1; + sprite->data7 = e2 + 10; + sub_80CB7EC(sprite, 0x3C); + sprite->data3 = 1; + } + else + { + sprite->data6 = e1; + sprite->data7 = e2 + 10; + sub_80CB7EC(sprite, 0x3C); + sprite->data3 = 3; + } + sprite->data4 = 0x3C; + sprite->callback = sub_80CB8E8; +} + +void sub_80CB9C4(struct Sprite* sprite) +{ + int zero; + sprite->data0 += ((sprite->data3 * 128) / sprite->data4); + zero = 0; + if(sprite->data0 > 0x7F) + { + sprite->data1++; + sprite->data0 = zero; + } + sprite->pos2.y = Sin(sprite->data0 + 0x80, 30 - sprite->data1 * 8); + if(sub_80CB814(sprite)) + { + sprite->pos2.y = zero; + sprite->data0 = zero; + move_anim_8072740(sprite); + } +} + +void sub_80CBA28(struct Sprite* sprite) +{ + s16 e = sub_8077ABC(gBattleAnimEnemyMonIndex, 1); + if(GetBankSide(gBattleAnimEnemyMonIndex) == 0) + { + sprite->data6 = 0; + sprite->data7 = e + 10; + sub_80CB7EC(sprite, 0x28); + sprite->data3 = 3; + sprite->data4 = 0x3C; + sprite->callback = sub_80CB8E8; + } + else + { + sprite->data6 = 255; + sprite->data7 = e + 10; + if(IsContest()) sprite->data6 = 0; + sub_80CB7EC(sprite, 0x28); + sprite->data3 = 3; + sprite->data4 = 0x3C; + sprite->callback = sub_80CB9C4; + } +} + +void sub_80CBAA4(struct Sprite* sprite) +{ + if(sprite->data0 == 0) + { + sub_8078764(sprite, 0); + sprite->data1 = gBattleAnimArgs[2]; + } + sprite->data0++; + sprite->pos2.y = sprite->data1 * sprite->data0; + if(sprite->animEnded) move_anim_8072740(sprite); +} + +void sub_80CBAE8(struct Sprite* sprite) +{ + s16 p1; + s16 p2; + sub_8078764(sprite, 0); + p1 = sub_8077ABC(gBattleAnimPlayerMonIndex, 0); + p2 = sub_8077ABC(gBattleAnimPlayerMonIndex, 1); + if((gBattleAnimEnemyMonIndex ^ 2) == gBattleAnimPlayerMonIndex) + { + sprite->data6 = p1; + sprite->data7 = p2 + 10; + sub_80CB7EC(sprite, 0x3c); + sprite->data3 = 1; + } + else + { + sprite->data6 = p1; + sprite->data7 = p2 + 10; + sub_80CB7EC(sprite, 0x3c); + sprite->data3 = 3; + } + sprite->data4 = 0x3C; + sprite->callback = sub_80CBB60; +} + +void sub_80CBB60(struct Sprite* sprite) +{ + int zero; + sprite->data0 += ((sprite->data3 * 128) / sprite->data4); + zero = 0; + if(sprite->data0 > 0x7F) + { + sprite->data1++; + sprite->data0 = zero; + } + sprite->pos2.y = Sin(sprite->data0 + 0x80, 30 - sprite->data1 * 8); + if(sprite->pos2.y == 0) + { + PlaySE12WithPanning(0x7D, sub_8076F98(0x3F)); + } + if(sub_80CB814(sprite)) + { + sprite->pos2.y = 0; + sprite->data0 = 0; + sprite->callback = sub_80CB8B8; + PlaySE12WithPanning(0x7D, sub_8076F98(-0x40)); + } +} + +#ifdef NONMATCHING +void sub_80CBBF0(struct Sprite* sprite) +{ + int a; + int b; + if(sprite->data0 == 0) + { + if(!IsContest()) + { + sprite->data1 = gBattleAnimArgs[1]; + sprite->pos1.x = 0x78; + } + else + { + a = gBattleAnimArgs[1] - 32; + b = a; + if(a < 0) + { + b += gBattleAnimArgs[1] + 0xDF; + } + sprite->data1 = b - a; + sprite->pos1.x = 0x46; + + } + sprite->pos1.y = gBattleAnimArgs[0]; + sprite->data2 = gBattleAnimArgs[0]; + sprite->data4 = 20; + sprite->pos2.x = Cos(sprite->data1, 0x3C); + sprite->pos2.y = Sin(sprite->data1, 20); + sprite->callback = sub_80CBC8C; + if((sprite->data1 - 1) <= 0xBE) + { + sprite->subpriority = 30; + } + else + { + sprite->subpriority = 28; + } + } +} +#else +__attribute__((naked)) +void sub_80CBBF0(struct Sprite* sprite) +{ + asm(".syntax unified\n\ + push {r4,r5,lr}\n\ + adds r4, r0, 0\n\ + movs r1, 0x2E\n\ + ldrsh r0, [r4, r1]\n\ + cmp r0, 0\n\ + bne _080CBC84\n\ + bl IsContest\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + bne _080CBC18\n\ + ldr r0, _080CBC14 @ =gBattleAnimArgs\n\ + ldrh r1, [r0, 0x2]\n\ + strh r1, [r4, 0x30]\n\ + movs r1, 0x78\n\ + strh r1, [r4, 0x20]\n\ + adds r5, r0, 0\n\ + b _080CBC3A\n\ + .align 2, 0\n\ +_080CBC14: .4byte gBattleAnimArgs\n\ +_080CBC18:\n\ + ldr r0, _080CBC74 @ =gBattleAnimArgs\n\ + movs r1, 0x2\n\ + ldrsh r3, [r0, r1]\n\ + adds r1, r3, 0\n\ + subs r1, 0x20\n\ + adds r2, r1, 0\n\ + adds r5, r0, 0\n\ + cmp r1, 0\n\ + bge _080CBC2E\n\ + adds r2, r3, 0\n\ + adds r2, 0xDF\n\ +_080CBC2E:\n\ + asrs r0, r2, 8\n\ + lsls r0, 8\n\ + subs r0, r1, r0\n\ + strh r0, [r4, 0x30]\n\ + movs r0, 0x46\n\ + strh r0, [r4, 0x20]\n\ +_080CBC3A:\n\ + ldrh r0, [r5]\n\ + strh r0, [r4, 0x22]\n\ + strh r0, [r4, 0x32]\n\ + movs r0, 0x14\n\ + strh r0, [r4, 0x36]\n\ + movs r1, 0x30\n\ + ldrsh r0, [r4, r1]\n\ + movs r1, 0x3C\n\ + bl Cos\n\ + strh r0, [r4, 0x24]\n\ + movs r1, 0x30\n\ + ldrsh r0, [r4, r1]\n\ + movs r1, 0x14\n\ + bl Sin\n\ + strh r0, [r4, 0x26]\n\ + ldr r0, _080CBC78 @ =sub_80CBC8C\n\ + str r0, [r4, 0x1C]\n\ + ldrh r0, [r4, 0x30]\n\ + subs r0, 0x1\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + cmp r0, 0xBE\n\ + bhi _080CBC7C\n\ + adds r1, r4, 0\n\ + adds r1, 0x43\n\ + movs r0, 0x1F\n\ + b _080CBC82\n\ + .align 2, 0\n\ +_080CBC74: .4byte gBattleAnimArgs\n\ +_080CBC78: .4byte sub_80CBC8C\n\ +_080CBC7C:\n\ + adds r1, r4, 0\n\ + adds r1, 0x43\n\ + movs r0, 0x1D\n\ +_080CBC82:\n\ + strb r0, [r1]\n\ +_080CBC84:\n\ + pop {r4,r5}\n\ + pop {r0}\n\ + bx r0\n\ + .syntax divided\n"); +} +#endif + +void sub_80CBC8C(struct Sprite* sprite) +{ + switch(sprite->data3) + { + case 0: + { + if(sprite->data2 > 0x4E) + { + sprite->data3 = 1; + StartSpriteAffineAnim(sprite, 1); + break; + } + else + { + sprite->data2 += sprite->data4 / 10; + sprite->data4 += 3; + sprite->pos1.y = sprite->data2; + break; + } + } + case 1: + { + if(sprite->data3 && sprite->affineAnimEnded) + { + sprite->data0 = 0; + sprite->data2 = 0; + sprite->callback = sub_80CBCF8; + } + break; + } + } } \ No newline at end of file -- cgit v1.2.3 From ffda533c1467ede557da624775674c642a17a97c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BAl=20Pe=C3=B1acoba?= Date: Tue, 8 Aug 2017 12:14:58 +0200 Subject: some changes: - decompiled sub_80EBC10 - fix padding in struct - approximate sub_80EC268 --- src/pokenav_before.c | 382 +++++++++++++++++++++++++-------------------------- 1 file changed, 184 insertions(+), 198 deletions(-) (limited to 'src') diff --git a/src/pokenav_before.c b/src/pokenav_before.c index 577441733..d69cd2158 100644 --- a/src/pokenav_before.c +++ b/src/pokenav_before.c @@ -27,35 +27,37 @@ struct UnknownPokenav0 { /* 0x6dae */ u8 var6dae; /* 0x6daf */ u8 fill6daf[0x3]; /* 0x6db2 */ u8 var6db2; - /* 0x6db3 */ u8 fill6db3[0x29]; + /* 0x6db3 */ u8 var6db3; + /* 0x6db4 */ u8 var6db4; + /* 0x6db5 */ u8 var6db5; + /* 0x6db6 */ u8 var6db6; + /* 0x6db7 */ u8 fill6db7[0x25]; /* 0x6ddc */ u8 var6ddc; /* 0x6ddd */ u8 fill6ddd[0x13]; /* 0x6df0 */ s8 var6df0; /* 0x6df1 */ u8 fill6df1[0x9f]; /* 0x6e90 */ u8 var6e90; - /* 0x6e91 */ u8 fill6e91[0x18d7]; + /* 0x6e91 */ u8 fill6e91[0x4]; + /* 0x6e95 */ u8 var6e95; + /* 0x6e96 */ u8 var6e96[0x18d2]; /* 0x8768 */ u32 var8768; /* 0x876C */ u8 fill876B[0x00bc]; /* 0x8828 */ u8 var8828; - /* 0x8829 */ u8 fill8829[0x07c0]; + /* 0x8829 */ u8 fill8829[0x07bf]; /* 0x8FE8 */ u8 var8fe8; - /* 0x8FE9 */ u8 fill8FE9[0x035B]; + /* 0x8FE9 */ u8 fill8FE9[0x16]; + /* 0x8FFF */ u8 var8fff[5]; + /* 0x9004 */ u8 fill9004[0x340]; /* 0x9344 */ u8 var9344; /* 0x9345 */ u8 fill9345[0x3b8b]; /* 0xced0 */ u32 varCED0; -}; - -struct UnknownPokenav8fff { - /* 0x8fff */ u8 var8fff[5]; - /* 0x9004 */ u8 fill9004[0x6e90]; - /* 0x6e95 */ u8 var6e95; + /* 0xced4 */ u8 fillCED4[0x284]; + /* 0xD158 */ u16 varD158; }; extern u8 ewram[]; #define ewram0 (*(struct UnknownPokenav0*)(ewram + 0)) -#define ewram8fff (*(struct UnknownPokenav8fff*)(ewram + 0x8fff)) -extern u8 unk_2000000[]; extern void sub_80F1A90(); extern bool8 sub_80F1AC4(); @@ -153,131 +155,39 @@ void sub_80EBBE8() { } } -// Falla el acceso a 0x8fff -#if 0 - u16 gKeyRepeatStartDelay; void sub_80EBCA8(); -//void sub_80EBC10() { -// u16 i; -// u16 *unk2; -// gKeyRepeatStartDelay = 0x14; -// unk_2000000[0x8828] = CalculatePlayerPartyCount(); -// unk_2000000[0x6ddc] = unk_2000000[0x9344] = 0; -// *(u32 *)&unk_2000000[0x8768] = 0; -// *(u32 *)&unk_2000000[0xced0] = 0; -// for (i = 0; i <= 4; ++i) { -// unk_2000000[0x8fff + i] = 0; -// unk2 = (u16 *)unk_2000000; -// unk2[i*2 + 0x4820] = 0x9B; -// unk2[i*2 + 0x4821] = 0x5B; -// } -// unk_2000000[0x8fff + 0x6e95] = 0; -// sub_80EBCA8(); -//} void sub_80EBC10() { u16 i; - u16 *unk2; + u16 *var1; gKeyRepeatStartDelay = 0x14; ewram0.var8828 = CalculatePlayerPartyCount(); - ewram0.var6ddc = 0; + ewram0.var6ddc = 0; ewram0.var9344 = 0; ewram0.var8768 = 0; ewram0.varCED0 = 0; for (i = 0; i <= 4; ++i) { - ewram8fff.var8fff[i] = 0; - unk2 = (u16 *)ewram; - unk2[i*2 + 0x4820] = 0x9B; - unk2[i*2 + 0x4821] = 0x5B; + ewram0.var8fff[i] = 0; + var1 = (u16 *)ewram; + var1[i*2 + 0x4820] = 0x9B; + var1[i*2 + 0x4821] = 0x5B; } - ewram8fff.var6e95 = 0; + ewram0.var6e95 = 0; sub_80EBCA8(); } -#else - -__attribute__((naked)) -void sub_80EBC10() { - asm_unified("push {r4-r7,lr}\n\ - ldr r1, _080EBC7C @ =gKeyRepeatStartDelay\n\ - movs r0, 0x14\n\ - strh r0, [r1]\n\ - bl CalculatePlayerPartyCount\n\ - ldr r2, _080EBC80 @ =0x02000000\n\ - ldr r1, _080EBC84 @ =0x00008828\n\ - adds r3, r2, r1\n\ - movs r1, 0\n\ - strb r0, [r3]\n\ - ldr r3, _080EBC88 @ =0x00006ddc\n\ - adds r0, r2, r3\n\ - strb r1, [r0]\n\ - ldr r3, _080EBC8C @ =0x00009344\n\ - adds r0, r2, r3\n\ - strb r1, [r0]\n\ - ldr r3, _080EBC90 @ =0x00008768\n\ - adds r0, r2, r3\n\ - str r1, [r0]\n\ - ldr r3, _080EBC94 @ =0x0000ced0\n\ - adds r0, r2, r3\n\ - str r1, [r0]\n\ - movs r3, 0\n\ - ldr r0, _080EBC98 @ =0x00008fff\n\ - adds r7, r2, r0\n\ - mov r12, r2\n\ - movs r6, 0\n\ - ldr r5, _080EBC9C @ =0x00009040\n\ - movs r4, 0x9B\n\ -_080EBC4C:\n\ - adds r0, r3, r7\n\ - strb r6, [r0]\n\ - lsls r1, r3, 2\n\ - adds r1, r2\n\ - adds r0, r1, r5\n\ - strh r4, [r0]\n\ - ldr r0, _080EBCA0 @ =0x00009042\n\ - adds r1, r0\n\ - movs r0, 0x5B\n\ - strh r0, [r1]\n\ - adds r0, r3, 0x1\n\ - lsls r0, 16\n\ - lsrs r3, r0, 16\n\ - cmp r3, 0x4\n\ - bls _080EBC4C\n\ - ldr r1, _080EBCA4 @ =0x00006e95\n\ - add r1, r12\n\ - movs r0, 0\n\ - strb r0, [r1]\n\ - bl sub_80EBCA8\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_080EBC7C: .4byte gKeyRepeatStartDelay\n\ -_080EBC80: .4byte 0x02000000\n\ -_080EBC84: .4byte 0x00008828\n\ -_080EBC88: .4byte 0x00006ddc\n\ -_080EBC8C: .4byte 0x00009344\n\ -_080EBC90: .4byte 0x00008768\n\ -_080EBC94: .4byte 0x0000ced0\n\ -_080EBC98: .4byte 0x00008fff\n\ -_080EBC9C: .4byte 0x00009040\n\ -_080EBCA0: .4byte 0x00009042\n\ -_080EBCA4: .4byte 0x00006e95\n"); -} -#endif - void sub_80EBCA8() { - unk_2000000[0x6db2] = 1; - unk_2000000[0x6db3] = 2; - unk_2000000[0x6db4] = 3; + ewram0.var6db2 = 1; + ewram0.var6db3 = 2; + ewram0.var6db4 = 3; if (FlagGet(SYS_RIBBON_GET)) { - unk_2000000[0x6db5] = 4; + ewram0.var6db5 = 4; } else { - unk_2000000[0x6db5] = 0; + ewram0.var6db5 = 0; } - unk_2000000[0x6db6] = 5; + ewram0.var6db6 = 5; } void sub_80EBD18() { @@ -520,97 +430,173 @@ void sub_80EC4A0(); void sub_80EC81C(); void sub_80F208C(); void sub_80EE96C(); +void sub_80F6C20(); +void sub_80EE3D8(); void sub_80EC268() { - if (ewram0.var304 != 3) { - // bls -> bgt - if (ewram0.var304 > 3) { - if (ewram0.var304 != 6) { - if (ewram0.var304 > 6) { - if (ewram0.var304 != 0xFF) return; - if (sub_80EEC10() == 0) { - if (gMain.newKeys == (A_BUTTON | B_BUTTON)) return; - sub_80EF428(0, ewram0.var6dad); - return; - } - PlaySE(0x5); - sub_80EF428(0, ewram0.var6dad); - sub_80EED9C(); - return; - - } - if (ewram0.var304 != 4) return; - if (sub_8055870() != 0) return; - if (ewram0.var8fe8 == 0) { - PlaySE(0x20); - sub_80EF428(0, 5); - ewram0.var304 = 0xFF; - return; + u8 var1; + switch (ewram0.var304) { + case 3: + if (sub_80F6250()) return; + ewram0.var304++; + break; + case 6: + sub_80F6C20(); + if (ewram0.varD158 != 0) { + PlaySE(0x5); + sub_80EBDBC(&sub_80EE3D8); + break; + } + else { + PlaySE(0x20); + sub_80EF428(0, 6); + ewram0.var304 = 0xFF; + break; + } + case 0: + if (sub_80EEC10() != 0) { + PlaySE(0x5); + sub_80EF428(0, ewram0.var6dad); + sub_80EED9C(); + break; + } + else { + if (gMain.newKeys & A_BUTTON) { + if (!(gMain.newKeys & B_BUTTON)) { + ewram0.var304 = 1; } - PlaySE(0x5); - sub_80EBDBC(&sub_80EDB88); - return; - } - if (ewram0.var304 != 4) return; - if (sub_8055870()) return; - if (!ewram0.var8fe8) { - PlaySE(0x20); - sub_80EF428(0, 5); - ewram0.var304 = 0xFF; - return; + break; } - PlaySE(5); + ewram0.var6ddc = ewram0.var6dad; + // TODO switch + break; + } + case 0xFF: + if ((var1 = sub_80EEC10()) != 0) { + PlaySE(0x5); + sub_80EF428(0, ewram0.var6dad); + ewram0.var304 = 0; + break; + } + else { + if (gMain.newKeys & (A_BUTTON | B_BUTTON)) return; + sub_80EF428(0, ewram0.var6dad); + ewram0.var304 = var1; + break; + } + case 4: + if (sub_8055870()) return; + if (ewram0.var8fe8 != 0) { + PlaySE(0x5); sub_80EBDBC(&sub_80EDB88); - return; + break; } - if (ewram0.var304 != 1) { - if (ewram0.var304 < 1) { - if (ewram0.var304 == 0) { - if (sub_80EEC10() == 0) { - if (gMain.newKeys != A_BUTTON) { - - } - ewram0.var6ddc = ewram0.var6dad; - // TODO arreglar esto - switch (ewram0.var6db2) { - case 1: - PlaySE(5); - sub_80EBDBC(&sub_80EC4A0); - return; - case 2: - PlaySE(5); - sub_80EBDBC(&sub_80EC81C); - return; - case 3: - ewram0.var304 = 6; - return; - case 4: - ewram0.var304 = 2; - return; - case 5: - ewram0.var304 = 1; - return; - } - } - PlaySE(0x5); - sub_80EF428(0, ewram0.var6dad); - sub_80EED9C(); - return; - } - } - sub_80F6208(); - ewram0.var304++; - if (sub_80F6250() != 0) return; - ewram0.var304++; - return; + else { + PlaySE(0x20); + sub_80EF428(0, 5); + ewram0.var304 = 0xFF; + break; } + case 2: + sub_80F6208(); + ewram0.var304++; + if (sub_80F6250()) return; + ewram0.var304++; + break; + case 1: sub_80F208C(); sub_80EBDBC(&sub_80EE96C); - return; + break; } - if (sub_80F6250() != 0) return; - ewram0.var304++; - return; +// if (ewram0.var304 != 3) { +// // bls -> bgt +// if (ewram0.var304 > 3) { +// if (ewram0.var304 != 6) { +// if (ewram0.var304 > 6) { +// if (ewram0.var304 != 0xFF) return; +// if (sub_80EEC10() == 0) { +// if (gMain.newKeys == (A_BUTTON | B_BUTTON)) return; +// sub_80EF428(0, ewram0.var6dad); +// return; +// } +// PlaySE(0x5); +// sub_80EF428(0, ewram0.var6dad); +// sub_80EED9C(); +// return; +// +// } +// if (ewram0.var304 != 4) return; +// if (sub_8055870() != 0) return; +// if (ewram0.var8fe8 == 0) { +// PlaySE(0x20); +// sub_80EF428(0, 5); +// ewram0.var304 = 0xFF; +// return; +// } +// PlaySE(0x5); +// sub_80EBDBC(&sub_80EDB88); +// return; +// } +// if (ewram0.var304 != 4) return; +// if (sub_8055870()) return; +// if (!ewram0.var8fe8) { +// PlaySE(0x20); +// sub_80EF428(0, 5); +// ewram0.var304 = 0xFF; +// return; +// } +// PlaySE(5); +// sub_80EBDBC(&sub_80EDB88); +// return; +// } +// if (ewram0.var304 != 1) { +// if (ewram0.var304 < 1) { +// if (ewram0.var304 == 0) { +// if (sub_80EEC10() == 0) { +// if (gMain.newKeys != A_BUTTON) { +// +// } +// ewram0.var6ddc = ewram0.var6dad; +// // TODO arreglar esto +// switch (ewram0.var6db2) { +// case 1: +// PlaySE(5); +// sub_80EBDBC(&sub_80EC4A0); +// return; +// case 2: +// PlaySE(5); +// sub_80EBDBC(&sub_80EC81C); +// return; +// case 3: +// ewram0.var304 = 6; +// return; +// case 4: +// ewram0.var304 = 2; +// return; +// case 5: +// ewram0.var304 = 1; +// return; +// } +// } +// PlaySE(0x5); +// sub_80EF428(0, ewram0.var6dad); +// sub_80EED9C(); +// return; +// } +// } +// sub_80F6208(); +// ewram0.var304++; +// if (sub_80F6250() != 0) return; +// ewram0.var304++; +// return; +// } +// sub_80F208C(); +// sub_80EBDBC(&sub_80EE96C); +// return; +// } +// if (sub_80F6250() != 0) return; +// ewram0.var304++; +// return; } #else __attribute__((naked)) -- cgit v1.2.3 From dcc56003d063500b867cce0e76d7723cc64b0187 Mon Sep 17 00:00:00 2001 From: "U-Maria-PC\\Maria" Date: Wed, 9 Aug 2017 20:00:17 -0400 Subject: decompiled up to sub_80CC408 --- src/battle_anim_80CA710.c | 543 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 542 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/battle_anim_80CA710.c b/src/battle_anim_80CA710.c index 85ad92d7f..8befb4b4e 100755 --- a/src/battle_anim_80CA710.c +++ b/src/battle_anim_80CA710.c @@ -11,11 +11,17 @@ #include "task.h" #include "trig.h" +struct __attribute__((packed)) Some3ByteStruct { + u8 unkArr[3]; +}; + extern s16 gBattleAnimArgs[8]; extern u8 gBattleAnimPlayerMonIndex; extern u8 gBattleAnimEnemyMonIndex; extern struct SpriteTemplate gSpriteTemplate_83D631C; +extern struct SpriteTemplate gSpriteTemplate_83D6884; extern s16 gUnknown_03000728[]; +extern s8 gUnknown_083D680C[11][3]; void sub_80CA768(struct Sprite* sprite); void sub_80CA8B4(struct Sprite* sprite); @@ -36,6 +42,10 @@ void sub_80CB710(struct Sprite* sprite); void sub_80CBB60(struct Sprite* sprite); void sub_80CBC8C(struct Sprite* sprite); void sub_80CBCF8(struct Sprite* sprite); +void sub_80CBDB0(struct Sprite* sprite); +void sub_80CC408(struct Sprite* sprite); + +s16 sub_80CC338(struct Sprite* sprite); void sub_80787B0(struct Sprite *sprite, u8 a2); void sub_8078764(struct Sprite *sprite, u8 a2); @@ -47,6 +57,7 @@ void sub_8078CC0(struct Sprite *sprite); void sub_807A3FC(u8 slot, u8 a2, s16 *a3, s16 *a4); u8 sub_8079ED4(u8 slot); s8 sub_8076F98(s8 a); +int sub_807A100(u8 slot, u8 a2); void move_anim_8074EE0(struct Sprite *sprite); bool8 sub_8078718(struct Sprite *sprite); @@ -54,6 +65,8 @@ bool8 sub_8078CE8(struct Sprite *sprite); void sub_80CB3A8(u8 taskId); void sub_80CB438(u8 taskId); +void sub_80CBF5C(u8 taskId); +void sub_80CC358(struct Task* task, u8 taskId); void sub_80CA710(struct Sprite* sprite) { @@ -1561,4 +1574,532 @@ void sub_80CBC8C(struct Sprite* sprite) break; } } -} \ No newline at end of file +} + + + +void sub_80CBCF8(struct Sprite* sprite) +{ + if(sprite->data2 == gUnknown_083D680C[sprite->data0][1]) + { + if(gUnknown_083D680C[sprite->data0][2] == 0x7F) + { + sprite->data0 = 0; + sprite->callback = sub_80CBDB0; + } + sprite->data2 = 0; + sprite->data0++; + } + else + { + sprite->data2++; + sprite->data1 = (gUnknown_083D680C[sprite->data0][0] * gUnknown_083D680C[sprite->data0][2] + sprite->data1) & 0xFF; + if (!IsContest()) + { + if((u16)(sprite->data1 - 1) <= 0xBE) + { + sprite->subpriority = 31; + } + else + { + sprite->subpriority = 29; + } + } + sprite->pos2.x = Cos(sprite->data1, 0x3C); + sprite->pos2.y = Sin(sprite->data1, 20); + } +} + +void sub_80CBDB0(struct Sprite* sprite) +{ + if(sprite->data0 > 20) move_anim_8072740(sprite); + sprite->invisible = sprite->data0 % 2; + sprite->data0++; +} + +#ifdef NONMATCHING +void sub_80CBDF4(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + task->data[4] = sub_8079E90(gBattleAnimEnemyMonIndex) - 1; + task->data[6] = sub_8077ABC(gBattleAnimEnemyMonIndex, 2); + task->data[7] = sub_8077ABC(gBattleAnimEnemyMonIndex, 3); + task->data[10] = sub_807A100(gBattleAnimEnemyMonIndex, 1); + task->data[11] = sub_807A100(gBattleAnimEnemyMonIndex, 0); + if(GetBankSide(gBattleAnimEnemyMonIndex) == 1) + { + task->data[5] = 1; + } + else + { + task->data[5] = -1; + } + task->data[9] = 0x38 - (task->data[5] * 64); + task->data[8] = task->data[7] - task->data[9] + task->data[6]; + task->data[2] = CreateSprite(&gSpriteTemplate_83D6884, task->data[8], task->data[9], task->data[4]); + if(task->data[2] == 0x40) DestroyAnimVisualTask(taskId); + gSprites[task->data[2]].data0 = 10; + gSprites[task->data[2]].data1 = task->data[8]; + gSprites[task->data[2]].data2 = task->data[6] - (((task->data[10] / 2) + 10) * task->data[5]); + gSprites[task->data[2]].data3 = task->data[9]; + gSprites[task->data[2]].data4 = ((task->data[11] / 2) + 10) * task->data[5] + task->data[7]; + gSprites[task->data[2]].data5 = sub_80CC338(&gSprites[task->data[2]]); + sub_80786EC(&gSprites[task->data[2]]); + task->func = sub_80CBF5C; +} +#else +__attribute__((naked)) +void sub_80CBDF4(u8 taskId) +{ + asm(".syntax unified\n\ + push {r4-r6,lr}\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + adds r6, r0, 0\n\ + lsls r0, r6, 2\n\ + adds r0, r6\n\ + lsls r0, 3\n\ + ldr r1, _080CBF48 @ =gTasks\n\ + adds r5, r0, r1\n\ + ldr r4, _080CBF4C @ =gBattleAnimEnemyMonIndex\n\ + ldrb r0, [r4]\n\ + bl sub_8079E90\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + subs r0, 0x1\n\ + strh r0, [r5, 0x10]\n\ + ldrb r0, [r4]\n\ + movs r1, 0x2\n\ + bl sub_8077ABC\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + strh r0, [r5, 0x14]\n\ + ldrb r0, [r4]\n\ + movs r1, 0x3\n\ + bl sub_8077ABC\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + strh r0, [r5, 0x16]\n\ + ldrb r0, [r4]\n\ + movs r1, 0x1\n\ + bl sub_807A100\n\ + strh r0, [r5, 0x1C]\n\ + ldrb r0, [r4]\n\ + movs r1, 0\n\ + bl sub_807A100\n\ + strh r0, [r5, 0x1E]\n\ + ldrb r0, [r4]\n\ + bl GetBankSide\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + movs r2, 0x1\n\ + negs r2, r2\n\ + adds r1, r2, 0\n\ + cmp r0, 0x1\n\ + bne _080CBE5C\n\ + movs r1, 0x1\n\ +_080CBE5C:\n\ + strh r1, [r5, 0x12]\n\ + movs r3, 0x12\n\ + ldrsh r0, [r5, r3]\n\ + lsls r0, 6\n\ + movs r1, 0x38\n\ + subs r1, r0\n\ + strh r1, [r5, 0x1A]\n\ + ldrh r0, [r5, 0x16]\n\ + subs r0, r1\n\ + ldrh r1, [r5, 0x14]\n\ + adds r0, r1\n\ + strh r0, [r5, 0x18]\n\ + ldr r0, _080CBF50 @ =gSpriteTemplate_83D6884\n\ + movs r2, 0x18\n\ + ldrsh r1, [r5, r2]\n\ + movs r3, 0x1A\n\ + ldrsh r2, [r5, r3]\n\ + ldrb r3, [r5, 0x10]\n\ + bl CreateSprite\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + strh r0, [r5, 0xC]\n\ + cmp r0, 0x40\n\ + bne _080CBE94\n\ + adds r0, r6, 0\n\ + bl DestroyAnimVisualTask\n\ +_080CBE94:\n\ + ldr r4, _080CBF54 @ =gSprites\n\ + movs r0, 0xC\n\ + ldrsh r1, [r5, r0]\n\ + lsls r0, r1, 4\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + adds r0, r4\n\ + movs r1, 0xA\n\ + strh r1, [r0, 0x2E]\n\ + movs r2, 0xC\n\ + ldrsh r1, [r5, r2]\n\ + lsls r0, r1, 4\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + adds r0, r4\n\ + ldrh r1, [r5, 0x18]\n\ + strh r1, [r0, 0x30]\n\ + movs r3, 0xC\n\ + ldrsh r0, [r5, r3]\n\ + lsls r2, r0, 4\n\ + adds r2, r0\n\ + lsls r2, 2\n\ + adds r2, r4\n\ + movs r1, 0x1C\n\ + ldrsh r0, [r5, r1]\n\ + lsrs r1, r0, 31\n\ + adds r0, r1\n\ + asrs r0, 1\n\ + adds r0, 0xA\n\ + movs r3, 0x12\n\ + ldrsh r1, [r5, r3]\n\ + muls r1, r0\n\ + ldrh r0, [r5, 0x14]\n\ + subs r0, r1\n\ + strh r0, [r2, 0x32]\n\ + movs r0, 0xC\n\ + ldrsh r1, [r5, r0]\n\ + lsls r0, r1, 4\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + adds r0, r4\n\ + ldrh r1, [r5, 0x1A]\n\ + strh r1, [r0, 0x34]\n\ + movs r1, 0xC\n\ + ldrsh r0, [r5, r1]\n\ + lsls r1, r0, 4\n\ + adds r1, r0\n\ + lsls r1, 2\n\ + adds r1, r4\n\ + movs r2, 0x1E\n\ + ldrsh r0, [r5, r2]\n\ + lsrs r2, r0, 31\n\ + adds r0, r2\n\ + asrs r0, 1\n\ + adds r0, 0xA\n\ + movs r3, 0x12\n\ + ldrsh r2, [r5, r3]\n\ + muls r0, r2\n\ + ldrh r2, [r5, 0x16]\n\ + adds r0, r2\n\ + strh r0, [r1, 0x36]\n\ + movs r3, 0xC\n\ + ldrsh r1, [r5, r3]\n\ + lsls r0, r1, 4\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + adds r0, r4\n\ + bl sub_80CC338\n\ + movs r1, 0xC\n\ + ldrsh r2, [r5, r1]\n\ + lsls r1, r2, 4\n\ + adds r1, r2\n\ + lsls r1, 2\n\ + adds r1, r4\n\ + strh r0, [r1, 0x38]\n\ + movs r2, 0xC\n\ + ldrsh r1, [r5, r2]\n\ + lsls r0, r1, 4\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + adds r0, r4\n\ + bl sub_80786EC\n\ + ldr r0, _080CBF58 @ =sub_80CBF5C\n\ + str r0, [r5]\n\ + pop {r4-r6}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_080CBF48: .4byte gTasks\n\ +_080CBF4C: .4byte gBattleAnimEnemyMonIndex\n\ +_080CBF50: .4byte gSpriteTemplate_83D6884\n\ +_080CBF54: .4byte gSprites\n\ +_080CBF58: .4byte sub_80CBF5C\n\ + .syntax divided\n"); +} +#endif + +void sub_80CBF5C(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + struct Sprite* sprite = &gSprites[task->data[2]]; + int a = task->data[0]; + switch(a) + { + case 4: + { + sub_80CC358(task, taskId); + if(sub_8078718(sprite) == 0) + { + break; + } + else + { + task->data[15] = 5; + task->data[0] = 0xFF; + break; + } + } + case 8: + { + sub_80CC358(task, taskId); + if(sub_8078718(sprite) == 0) + { + break; + } + else + { + task->data[15] = 9; + task->data[0] = 0xFF; + break; + } + } + case 0: + { + sub_80CC358(task, taskId); + if(sub_8078718(sprite) == 0) + { + break; + } + task->data[15] = 1; + task->data[0] = 0xFF; + break; + } + case 1: + { + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.x = 0; + sprite->pos2.y = 0; + sprite->data0 = 10; + sprite->data1 = sprite->pos1.x; + sprite->data2 = task->data[6]; + sprite->data3 = sprite->pos1.y; + sprite->data4 = task->data[7]; + sprite->data5 = sub_80CC338(sprite); + task->data[4] += 2; + task->data[3] = a; + sprite->subpriority = task->data[4]; + StartSpriteAnim(sprite, task->data[3]); + sub_80786EC(sprite); + task->data[0]++; + break; + } + case 2: + { + sub_80CC358(task, taskId); + if(sub_8078718(sprite) == 0) + { + break; + } + task->data[15] = 3; + task->data[0] = 0xFF; + break; + } + case 3: + { + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.x = 0; + sprite->pos2.y = 0; + sprite->data0 = 10; + sprite->data1 = sprite->pos1.x; + sprite->data2 = task->data[6] - ((task->data[10] / 2) + 10) * task->data[5]; + sprite->data3 = sprite->pos1.y; + sprite->data4 = task->data[7] - ((task->data[11] / 2) + 10) * task->data[5]; + sprite->data5 = sub_80CC338(sprite); + task->data[3] = 2; + sprite->subpriority = task->data[4]; + StartSpriteAnim(sprite, task->data[3]); + sub_80786EC(sprite); + task->data[0]++; + break; + } + case 5: + { + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.x = 0; + sprite->pos2.y = 0; + sprite->data0 = 10; + sprite->data1 = sprite->pos1.x; + sprite->data2 = task->data[6] + ((task->data[10] / 2) + 10) * task->data[5]; + sprite->data3 = sprite->pos1.y; + sprite->data4 = task->data[7] + ((task->data[11] / 2) + 10) * task->data[5]; + sprite->data5 = sub_80CC338(sprite); + task->data[4] -= 2; + task->data[3] = 3; + sprite->subpriority = task->data[4]; + StartSpriteAnim(sprite, task->data[3]); + sub_80786EC(sprite); + task->data[0]++; + break; + } + case 6: + { + sub_80CC358(task, taskId); + if(sub_8078718(sprite) == 0) + { + break; + } + task->data[15] = 7; + task->data[0] = 0xFF; + break; + } + case 7: + { + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.x = 0; + sprite->pos2.y = 0; + sprite->data0 = 10; + sprite->data1 = sprite->pos1.x; + sprite->data2 = task->data[6]; + sprite->data3 = sprite->pos1.y; + sprite->data4 = task->data[7]; + sprite->data5 = sub_80CC338(sprite); + task->data[4] += 2; + task->data[3] = 4; + sprite->subpriority = task->data[4]; + StartSpriteAnim(sprite, task->data[3]); + sub_80786EC(sprite); + task->data[0]++; + break; + } + case 9: + { + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.x = 0; + sprite->pos2.y = 0; + sprite->data0 = 10; + sprite->data1 = sprite->pos1.x; + sprite->data2 = task->data[6] - ((task->data[10] / 2) + 10) * task->data[5]; + sprite->data3 = sprite->pos1.y; + sprite->data4 = task->data[7] + ((task->data[11] / 2) + 10) * task->data[5]; + sprite->data5 = sub_80CC338(sprite); + task->data[3] = 5; + sprite->subpriority = task->data[4]; + StartSpriteAnim(sprite, task->data[3]); + sub_80786EC(sprite); + task->data[0]++; + break; + } + case 10: + { + sub_80CC358(task, taskId); + if(sub_8078718(sprite) == 0) + { + break; + } + else + { + task->data[15] = 11; + task->data[0] = 0xFF; + break; + } + } + case 11: + { + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.x = 0; + sprite->pos2.y = 0; + sprite->data0 = 10; + sprite->data1 = sprite->pos1.x; + sprite->data2 = task->data[8]; + sprite->data3 = sprite->pos1.y; + sprite->data4 = task->data[9]; + sprite->data5 = sub_80CC338(sprite); + task->data[4] -= 2; + task->data[3] = 6; + sprite->subpriority = task->data[4]; + StartSpriteAnim(sprite, task->data[3]); + sub_80786EC(sprite); + task->data[0]++; + break; + } + case 12: + { + sub_80CC358(task, taskId); + if(sub_8078718(sprite) != 0) + { + DestroySprite(sprite); + task->data[0]++; + } + break; + } + case 13: + { + if(task->data[12] == 0) + { + DestroyAnimVisualTask(taskId); + break; + } + break; + } + case 255: + { + task->data[1]++; + if(task->data[1] > 5) + { + task->data[1] = 0; + task->data[0] = task->data[15]; + } + } + } +} + +s16 sub_80CC338(struct Sprite* sprite) +{ + s16 var = 8; + if(sprite->data4 < sprite->pos1.y) var = -var; + return var; +} + +void sub_80CC358(struct Task* task, u8 taskId) +{ + task->data[14]++; + if(task->data[14] > 0) + { + u8 spriteId; + s16 spriteX; + s16 spriteY; + task->data[14] = 0; + spriteX = gSprites[task->data[2]].pos1.x + gSprites[task->data[2]].pos2.x; + spriteY = gSprites[task->data[2]].pos1.y + gSprites[task->data[2]].pos2.y; + spriteId = CreateSprite(&gSpriteTemplate_83D6884, spriteX, spriteY, task->data[4]); + if (spriteId != 0x40) + { + gSprites[spriteId].data6 = taskId; + gSprites[spriteId].data7 = 12; + gTasks[taskId].data[12]++; + gSprites[spriteId].data0 = task->data[13] & 1; + gTasks[taskId].data[13]++; + StartSpriteAnim(&gSprites[spriteId], task->data[3]); + gSprites[spriteId].subpriority = task->data[4]; + gSprites[spriteId].callback = sub_80CC408; + } + } +} + +void sub_80CC408(struct Sprite* sprite) +{ + sprite->data0++; + if (sprite->data0 > 1) + { + sprite->data0 = 0; + sprite->invisible ^= 1; + sprite->data1++; + if(sprite->data1 > 8) + { + gTasks[sprite->data6].data[sprite->data7]--; + DestroySprite(sprite); + } + } +} + -- cgit v1.2.3 From dc0ca156582f6195b09cef9475aa9e491546c290 Mon Sep 17 00:00:00 2001 From: "U-Maria-PC\\Maria" Date: Sat, 12 Aug 2017 21:34:54 -0400 Subject: decompiled up to sub_80CCD24 --- src/battle_anim_80CA710.c | 542 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 542 insertions(+) (limited to 'src') diff --git a/src/battle_anim_80CA710.c b/src/battle_anim_80CA710.c index 8befb4b4e..53494608a 100755 --- a/src/battle_anim_80CA710.c +++ b/src/battle_anim_80CA710.c @@ -22,6 +22,7 @@ extern struct SpriteTemplate gSpriteTemplate_83D631C; extern struct SpriteTemplate gSpriteTemplate_83D6884; extern s16 gUnknown_03000728[]; extern s8 gUnknown_083D680C[11][3]; +extern u16 gUnknown_083D6984[]; void sub_80CA768(struct Sprite* sprite); void sub_80CA8B4(struct Sprite* sprite); @@ -44,6 +45,11 @@ void sub_80CBC8C(struct Sprite* sprite); void sub_80CBCF8(struct Sprite* sprite); void sub_80CBDB0(struct Sprite* sprite); void sub_80CC408(struct Sprite* sprite); +void sub_80CC580(struct Sprite* sprite); +void sub_80CC7D4(struct Sprite* sprite); +void sub_80CCB00(struct Sprite* sprite); +void sub_80CCCB4(struct Sprite* sprite); +void sub_80CCE0C(struct Sprite* sprite); s16 sub_80CC338(struct Sprite* sprite); @@ -54,10 +60,17 @@ void sub_8078D60(struct Sprite *sprite); void sub_80786EC(struct Sprite *sprite); void sub_80782D8(struct Sprite *sprite); void sub_8078CC0(struct Sprite *sprite); +void sub_8078600(struct Sprite *sprite); +void sub_8078504(struct Sprite *sprite); + void sub_807A3FC(u8 slot, u8 a2, s16 *a3, s16 *a4); u8 sub_8079ED4(u8 slot); s8 sub_8076F98(s8 a); int sub_807A100(u8 slot, u8 a2); +u16 sub_80790F0(s16 a, s16 b); +void sub_8078FDC(struct Sprite *sprite, bool8 a2, s16 xScale, s16 yScale, u16 rotation); +void sub_807867C(struct Sprite *sprite, s16 a2); +u8 sub_8077EE4(u8 slot, u8 a2); void move_anim_8074EE0(struct Sprite *sprite); bool8 sub_8078718(struct Sprite *sprite); @@ -2103,3 +2116,532 @@ void sub_80CC408(struct Sprite* sprite) } } +void sub_80CC474(struct Sprite* sprite) +{ + u8 bank; + if (!gBattleAnimArgs[6]) + bank = gBattleAnimPlayerMonIndex; + else + bank = gBattleAnimEnemyMonIndex; + if (GetBankSide(bank) != 0) + { + sprite->data4 = 0; + sprite->data2 = gBattleAnimArgs[3]; + sprite->pos1.x = 0xFFF0; + } + else + { + sprite->data4 = 1; + sprite->data2 = -gBattleAnimArgs[3]; + sprite->pos1.x = 0x100; + } + sprite->data1 = gBattleAnimArgs[1]; + sprite->data0 = gBattleAnimArgs[2]; + sprite->data3 = gBattleAnimArgs[4]; + switch(gBattleAnimArgs[5]) + { + case 0: + { + sprite->pos1.y = gBattleAnimArgs[0]; + sprite->oam.priority = sub_8079ED4(bank); + break; + } + case 1: + { + sprite->pos1.y = gBattleAnimArgs[0]; + sprite->oam.priority = sub_8079ED4(bank) + 1; + break; + } + case 2: + { + sprite->pos1.y = sub_8077ABC(bank, 3) + gBattleAnimArgs[0]; + sprite->oam.priority = sub_8079ED4(bank); + break; + } + case 3: + { + sprite->pos1.y = sub_8077ABC(gBattleAnimEnemyMonIndex, 3) + gBattleAnimArgs[0]; + obj_id_for_side_relative_to_move(1); + sprite->oam.priority = sub_8079ED4(bank) + 1; + break; + } + } + sprite->callback = sub_80CC580; +} + +// why did you make me use gotos WHY +void sub_80CC580(struct Sprite* sprite) +{ + int a = sprite->data7; + sprite->data7++; + sprite->pos2.y = (sprite->data1 * gSineTable[sprite->data0]) >> 8; + sprite->pos2.x = sprite->data2 * a; + sprite->data0 = (sprite->data3 * a) & 0xFF; + if (sprite->data4 == 0) + { + if (sprite->pos2.x + sprite->pos1.x <= 0xF7) return; + else goto END; + } + else if (sprite->data4 != 0 && sprite->pos2.x + sprite->pos1.x <= -16) + { + goto END; + } + else + return; + + END: + move_anim_8074EE0(sprite); +} + +void sub_80CC5F8(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + switch(task->data[0]) + { + case 0: + { + task->data[8] = IndexOfSpritePaletteTag(0x274f) * 16 + 256; + task->data[12] = IndexOfSpritePaletteTag(0x27b0) * 16 + 256; + task->data[0]++; + break; + } + case 1: + { + task->data[9]++; + if(task->data[9] >= 0) + { + task->data[9] = 0; + BlendPalette(task->data[8], 0x10, task->data[10], gUnknown_083D6984[task->data[11]]); + BlendPalette(task->data[12], 0x10, task->data[10], gUnknown_083D6984[task->data[11]]); + task->data[10]++; + if(task->data[10] == 17) + { + task->data[10] = 0; + task->data[11]++; + if(task->data[11] == 7) task->data[11] = 0; + } + } + break; + } + } + if(gBattleAnimArgs[7] == -1) DestroyAnimVisualTask(taskId); +} + +#ifdef NONMATCHING +void sub_80CC6CC(struct Sprite* sprite) +{ + u8 a; + u8 b; + u8 bank; + int c; + u16 x; + u16 y; + if (gBattleAnimArgs[4] == 0) + { + move_anim_8072740(sprite); + } + else + { + + if (gBattleAnimArgs[0] == 0) bank = gBattleAnimPlayerMonIndex; + else + bank = gBattleAnimEnemyMonIndex; + a = sub_8077ABC(bank, 2); + b = sub_8077ABC(bank, 3); + sprite->data0 = gBattleAnimArgs[4]; + if (gBattleAnimArgs[1] == 0) + { + sprite->pos1.x = gBattleAnimArgs[2] + a; + sprite->pos1.y = gBattleAnimArgs[3] + b; + sprite->data5 = a; + sprite->data6 = b; + } + else + { + sprite->pos1.x = a; + sprite->pos1.y = b; + sprite->data5 = gBattleAnimArgs[2] + a; + sprite->data6 = gBattleAnimArgs[3] + b; + } + x = sprite->pos1.x; + sprite->data1 = x * 16; + y = sprite->pos1.y; + sprite->data2 = y * 16; + sprite->data3 = ((sprite->data5 - sprite->pos1.x) * 16) / gBattleAnimArgs[4]; + sprite->data4 = ((sprite->data6 - sprite->pos1.y) * 16) / gBattleAnimArgs[4]; + c = sub_80790F0(sprite->data5 - x, sprite->data6 - y); + if(IsContest() != 0) c = c + -0x8000; + sub_8078FDC(sprite, 0, 0x100, 0x100, c); + sprite->callback = sub_80CC7D4; + } +} +#else +__attribute__((naked)) +void sub_80CC6CC(struct Sprite* sprite) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + sub sp, 0x4\n\ + adds r6, r0, 0\n\ + ldr r1, _080CC6E4 @ =gBattleAnimArgs\n\ + movs r2, 0x8\n\ + ldrsh r0, [r1, r2]\n\ + cmp r0, 0\n\ + bne _080CC6E8\n\ + adds r0, r6, 0\n\ + bl move_anim_8072740\n\ + b _080CC7C2\n\ + .align 2, 0\n\ +_080CC6E4: .4byte gBattleAnimArgs\n\ +_080CC6E8:\n\ + movs r3, 0\n\ + ldrsh r0, [r1, r3]\n\ + cmp r0, 0\n\ + bne _080CC6F8\n\ + ldr r4, _080CC6F4 @ =gBattleAnimPlayerMonIndex\n\ + b _080CC6FA\n\ + .align 2, 0\n\ +_080CC6F4: .4byte gBattleAnimPlayerMonIndex\n\ +_080CC6F8:\n\ + ldr r4, _080CC734 @ =gBattleAnimEnemyMonIndex\n\ +_080CC6FA:\n\ + ldrb r0, [r4]\n\ + movs r1, 0x2\n\ + bl sub_8077ABC\n\ + lsls r0, 24\n\ + lsrs r5, r0, 24\n\ + ldrb r0, [r4]\n\ + movs r1, 0x3\n\ + bl sub_8077ABC\n\ + lsls r0, 24\n\ + lsrs r2, r0, 24\n\ + ldr r0, _080CC738 @ =gBattleAnimArgs\n\ + ldrh r1, [r0, 0x8]\n\ + strh r1, [r6, 0x2E]\n\ + movs r3, 0x2\n\ + ldrsh r1, [r0, r3]\n\ + adds r7, r0, 0\n\ + cmp r1, 0\n\ + bne _080CC73C\n\ + ldrh r0, [r7, 0x4]\n\ + adds r0, r5\n\ + strh r0, [r6, 0x20]\n\ + ldrh r0, [r7, 0x6]\n\ + adds r0, r2\n\ + strh r0, [r6, 0x22]\n\ + strh r5, [r6, 0x38]\n\ + strh r2, [r6, 0x3A]\n\ + b _080CC74C\n\ + .align 2, 0\n\ +_080CC734: .4byte gBattleAnimEnemyMonIndex\n\ +_080CC738: .4byte gBattleAnimArgs\n\ +_080CC73C:\n\ + strh r5, [r6, 0x20]\n\ + strh r2, [r6, 0x22]\n\ + ldrh r0, [r7, 0x4]\n\ + adds r0, r5\n\ + strh r0, [r6, 0x38]\n\ + ldrh r0, [r7, 0x6]\n\ + adds r0, r2\n\ + strh r0, [r6, 0x3A]\n\ +_080CC74C:\n\ + ldrh r4, [r6, 0x20]\n\ + lsls r0, r4, 4\n\ + strh r0, [r6, 0x30]\n\ + ldrh r5, [r6, 0x22]\n\ + lsls r0, r5, 4\n\ + strh r0, [r6, 0x32]\n\ + movs r1, 0x38\n\ + ldrsh r0, [r6, r1]\n\ + movs r2, 0x20\n\ + ldrsh r1, [r6, r2]\n\ + subs r0, r1\n\ + lsls r0, 4\n\ + movs r3, 0x8\n\ + ldrsh r1, [r7, r3]\n\ + bl __divsi3\n\ + strh r0, [r6, 0x34]\n\ + movs r1, 0x3A\n\ + ldrsh r0, [r6, r1]\n\ + movs r2, 0x22\n\ + ldrsh r1, [r6, r2]\n\ + subs r0, r1\n\ + lsls r0, 4\n\ + movs r3, 0x8\n\ + ldrsh r1, [r7, r3]\n\ + bl __divsi3\n\ + strh r0, [r6, 0x36]\n\ + ldrh r0, [r6, 0x38]\n\ + subs r0, r4\n\ + lsls r0, 16\n\ + asrs r0, 16\n\ + ldrh r1, [r6, 0x3A]\n\ + subs r1, r5\n\ + lsls r1, 16\n\ + asrs r1, 16\n\ + bl sub_80790F0\n\ + lsls r0, 16\n\ + lsrs r4, r0, 16\n\ + bl IsContest\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _080CC7AE\n\ + ldr r1, _080CC7CC @ =0xffff8000\n\ + adds r0, r4, r1\n\ + lsls r0, 16\n\ + lsrs r4, r0, 16\n\ +_080CC7AE:\n\ + movs r3, 0x80\n\ + lsls r3, 1\n\ + str r4, [sp]\n\ + adds r0, r6, 0\n\ + movs r1, 0\n\ + adds r2, r3, 0\n\ + bl sub_8078FDC\n\ + ldr r0, _080CC7D0 @ =sub_80CC7D4\n\ + str r0, [r6, 0x1C]\n\ +_080CC7C2:\n\ + add sp, 0x4\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_080CC7CC: .4byte 0xffff8000\n\ +_080CC7D0: .4byte sub_80CC7D4\n\ + .syntax divided\n"); +} +#endif + +void sub_80CC7D4(struct Sprite* sprite) +{ + if(sprite->data0) + { + sprite->data1 += sprite->data3; + sprite->data2 += sprite->data4; + sprite->pos1.x = sprite->data1 >> 4 ; + sprite->pos1.y = sprite->data2 >> 4 ; + sprite->data0--; + } + else + move_anim_8074EE0(sprite); +} + +void sub_80CC810(struct Sprite* sprite) +{ + if(sprite->animEnded) + move_anim_8072740(sprite); +} + +void sub_80CC82C(struct Sprite* sprite) +{ + if(GetBankSide(gBattleAnimPlayerMonIndex) != 0) + { + sprite->pos1.x -= gBattleAnimArgs[0]; + sprite->pos1.y += gBattleAnimArgs[1]; + } + else + { + sprite->pos1.x += gBattleAnimArgs[0]; + sprite->pos1.y += gBattleAnimArgs[1]; + } + sprite->callback = sub_8078600; + oamt_set_x3A_32(sprite, move_anim_8072740); +} + +void sub_80CC884(struct Sprite* sprite) +{ + if(GetBankSide(gBattleAnimPlayerMonIndex) == 0) + StartSpriteAnim(sprite, 1); + sprite->callback = sub_80CC810; + sub_807867C(sprite, gBattleAnimArgs[0]); + sprite->pos1.y += gBattleAnimArgs[1]; +} + +void sub_80CC8C8(struct Sprite* sprite) +{ + sprite->pos1.x += gBattleAnimArgs[0]; + sprite->pos1.y += gBattleAnimArgs[1]; + sprite->data0 = gBattleAnimArgs[2]; + sprite->data1 = gBattleAnimArgs[3]; + sprite->data3 = gBattleAnimArgs[4]; + sprite->data5 = gBattleAnimArgs[5]; + StartSpriteAffineAnim(sprite, gBattleAnimArgs[6]); + oamt_set_x3A_32(sprite, move_anim_8074EE0); + sprite->callback = sub_8078504; +} + +void sub_80CC914(struct Sprite* sprite) +{ + sprite->pos1.x = sub_8077ABC(gBattleAnimEnemyMonIndex, 0); + sprite->pos1.y = sub_8077ABC(gBattleAnimEnemyMonIndex, 1); + if(GetBankSide(gBattleAnimEnemyMonIndex) == 0) + sprite->pos1.y += 8; + sprite->callback = sub_80CCB00; + if(gBattleAnimArgs[2] == 0) + sprite->pos1.x += gBattleAnimArgs[0]; + else + { + sprite->pos1.x -= gBattleAnimArgs[0]; + sprite->hFlip = 1; + } + sprite->pos1.y += gBattleAnimArgs[1]; + sprite->data1 -= 0x400; + sprite->data2 += 0x400; + sprite->data5 = gBattleAnimArgs[2]; + if(sprite->data5 == 1) + sprite->data1 = -sprite->data1; +} + +void sub_80CC9BC(struct Sprite* sprite) +{ + u8 a; + u8 b; + switch(gBattleAnimArgs[3]) + { + case 1: + { + a = sub_8077ABC(gBattleAnimEnemyMonIndex ^ 2, 0); + b = sub_8077ABC(gBattleAnimEnemyMonIndex ^ 2, 1); + break; + } + case 2: + { + a = sub_8077ABC(gBattleAnimEnemyMonIndex, 0); + b = sub_8077ABC(gBattleAnimEnemyMonIndex, 1); + if(b_side_obj__get_some_boolean(gBattleAnimEnemyMonIndex ^ 2)) + { + a = (sub_8077ABC(gBattleAnimEnemyMonIndex ^ 2, 0) + a) / 2; + b = (sub_8077ABC(gBattleAnimEnemyMonIndex ^ 2, 1) + b) / 2; + } + break; + } + case 0: + default: + { + a = sub_8077ABC(gBattleAnimEnemyMonIndex, 0); + b = sub_8077ABC(gBattleAnimEnemyMonIndex, 1); + break; + } + } + sprite->pos1.x = a; + sprite->pos1.y = b; + if(GetBankSide(gBattleAnimEnemyMonIndex) == 0) + sprite->pos1.y += 8; + sprite->callback = sub_80CCB00; + if(gBattleAnimArgs[2] == 0) + sprite->pos1.x += gBattleAnimArgs[0]; + else + { + sprite->pos1.x -= gBattleAnimArgs[0]; + sprite->hFlip = 1; + } + sprite->pos1.y += gBattleAnimArgs[1]; + sprite->data1 -= 0x400; + sprite->data2 += 0x400; + sprite->data5 = gBattleAnimArgs[2]; + if(sprite->data5 == 1) + sprite->data1 = -sprite->data1; +} + +void sub_80CCB00(struct Sprite* sprite) +{ + sprite->data3 += sprite->data1; + sprite->data4 += sprite->data2; + if(sprite->data5 == 0) + sprite->data1 += 0x18; + else + sprite->data1 -= 0x18; + sprite->data2 -= 0x18; + sprite->pos2.x = sprite->data3 >> 8; + sprite->pos2.y = sprite->data4 >> 8; + sprite->data0++; + if(sprite->data0 == 20) + { + oamt_set_x3A_32(sprite, move_anim_8072740); + sprite->data0 = 3; + sprite->callback = sub_80782D8; + } +} + +void unref_sub_80CCB6C(struct Sprite* sprite) +{ + if(sprite->data2 > 1) + { + if(sprite->data3 & 1) + { + sprite->invisible = 0; + gSprites[sprite->data0].invisible = 0; + gSprites[sprite->data1].invisible = 0; + } + else + { + sprite->invisible = 1; + gSprites[sprite->data0].invisible = 1; + gSprites[sprite->data1].invisible = 1; + } + sprite->data2 = 0; + sprite->data3++; + } + else + { + sprite->data2++; + } + if(sprite->data3 == 10) + { + DestroySprite(&gSprites[sprite->data0]); + DestroySprite(&gSprites[sprite->data1]); + move_anim_8072740(sprite); + } +} + +void sub_80CCC50(struct Sprite* sprite) +{ + sprite->data0 = gBattleAnimArgs[2]; + if(GetBankSide(gBattleAnimPlayerMonIndex) != 0) + sprite->pos1.x -= gBattleAnimArgs[0]; + else + sprite->pos1.x += gBattleAnimArgs[0]; + StartSpriteAnim(sprite, gBattleAnimArgs[5]); + sprite->data1 = -gBattleAnimArgs[3]; + sprite->pos1.y += gBattleAnimArgs[1]; + sprite->data3 = gBattleAnimArgs[4]; + sprite->callback = sub_80CCCB4; + sub_80CCCB4(sprite); +} + +void sub_80CCCB4(struct Sprite* sprite) +{ + sprite->pos2.x = Cos(sprite->data0, 100); + sprite->pos2.y = Sin(sprite->data0, 20); + if(sprite->data0 <= 0x7F) + sprite->subpriority = 0; + else + sprite->subpriority = 14; + sprite->data0 = (sprite->data0 + sprite->data1) & 0xFF; + sprite->data5 += 0x82; + sprite->pos2.y += sprite->data5 >> 8; + sprite->data2++; + if(sprite->data2 == sprite->data3) + move_anim_8072740(sprite); +} + +void sub_80CCD24(struct Sprite* sprite) +{ + if(IsContest() != 0) + { + gBattleAnimArgs[1] += 8; + } + sprite->pos1.x = sub_8077EE4(gBattleAnimPlayerMonIndex, 0) + gBattleAnimArgs[0]; + sprite->pos1.y = sub_8077EE4(gBattleAnimPlayerMonIndex, 1) + gBattleAnimArgs[1]; + if (GetBankSide(gBattleAnimPlayerMonIndex) == 0 || IsContest()) + sprite->oam.priority = sub_8079ED4(gBattleAnimPlayerMonIndex) + 1; + else + sprite->oam.priority = sub_8079ED4(gBattleAnimPlayerMonIndex); + sprite->data0 = gBattleAnimArgs[2]; + sprite->data2 = (IndexOfSpritePaletteTag(0x2828) << 4) + 0x100; + sprite->data7 = 16; + REG_BLDCNT = 0x3F40; + REG_BLDALPHA = (sprite->data7 << 8) | (16 - sprite->data7); + sprite->callback = sub_80CCE0C; +} + -- cgit v1.2.3 From 5478caaa603a898b35707c945370559f47d8c356 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BAl=20Pe=C3=B1acoba?= Date: Sun, 13 Aug 2017 11:45:44 +0200 Subject: sub_80EC268 --- src/pokenav_before.c | 488 +++++++-------------------------------------------- 1 file changed, 65 insertions(+), 423 deletions(-) (limited to 'src') diff --git a/src/pokenav_before.c b/src/pokenav_before.c index d69cd2158..f90410c26 100644 --- a/src/pokenav_before.c +++ b/src/pokenav_before.c @@ -26,13 +26,9 @@ struct UnknownPokenav0 { /* 0x6dad */ u8 var6dad; /* 0x6dae */ u8 var6dae; /* 0x6daf */ u8 fill6daf[0x3]; - /* 0x6db2 */ u8 var6db2; - /* 0x6db3 */ u8 var6db3; - /* 0x6db4 */ u8 var6db4; - /* 0x6db5 */ u8 var6db5; - /* 0x6db6 */ u8 var6db6; + /* 0x6db2 */ u8 var6db2[5]; /* 0x6db7 */ u8 fill6db7[0x25]; - /* 0x6ddc */ u8 var6ddc; + /* 0x6ddc */ s8 var6ddc; /* 0x6ddd */ u8 fill6ddd[0x13]; /* 0x6df0 */ s8 var6df0; /* 0x6df1 */ u8 fill6df1[0x9f]; @@ -44,7 +40,7 @@ struct UnknownPokenav0 { /* 0x876C */ u8 fill876B[0x00bc]; /* 0x8828 */ u8 var8828; /* 0x8829 */ u8 fill8829[0x07bf]; - /* 0x8FE8 */ u8 var8fe8; + /* 0x8FE8 */ s8 var8fe8; /* 0x8FE9 */ u8 fill8FE9[0x16]; /* 0x8FFF */ u8 var8fff[5]; /* 0x9004 */ u8 fill9004[0x340]; @@ -178,16 +174,16 @@ void sub_80EBC10() { } void sub_80EBCA8() { - ewram0.var6db2 = 1; - ewram0.var6db3 = 2; - ewram0.var6db4 = 3; + ewram0.var6db2[0] = 1; + ewram0.var6db2[1] = 2; + ewram0.var6db2[2] = 3; if (FlagGet(SYS_RIBBON_GET)) { - ewram0.var6db5 = 4; + ewram0.var6db2[3] = 4; } else { - ewram0.var6db5 = 0; + ewram0.var6db2[3] = 0; } - ewram0.var6db6 = 5; + ewram0.var6db2[4] = 5; } void sub_80EBD18() { @@ -420,7 +416,6 @@ void sub_80EC210() { } } -#if 0 bool8 sub_80EEC10(); bool8 sub_80F6250(); void sub_80EED9C(); @@ -436,39 +431,76 @@ void sub_80EE3D8(); void sub_80EC268() { u8 var1; switch (ewram0.var304) { + case 0: + if (sub_80EEC10() != 0) { + PlaySE(0x5); + sub_80EF428(0, ewram0.var6dad); + sub_80EED9C(); + break; + } + else { + if (gMain.newKeys & A_BUTTON) { + ewram0.var6ddc = ewram0.var6dad; + switch (ewram0.var6db2[ewram0.var6ddc] - 1) { + case 0: + PlaySE(5); + sub_80EBDBC(&sub_80EC4A0); + break; + case 1: + PlaySE(5); + sub_80EBDBC(&sub_80EC81C); + break; + case 4: + ewram0.var304 = 1; + break; + case 3: + ewram0.var304 = 2; + break; + case 2: + ewram0.var304 = 6; + break; + } + } + else if (gMain.newKeys & B_BUTTON) { + ewram0.var304 = 1; + } + break; + } + case 1: + sub_80F208C(); + sub_80EBDBC(&sub_80EE96C); + break; + case 2: + sub_80F6208(); + ewram0.var304++; case 3: if (sub_80F6250()) return; ewram0.var304++; break; - case 6: - sub_80F6C20(); - if (ewram0.varD158 != 0) { + case 4: + if (sub_8055870()) return; + if (ewram0.var8fe8 != 0) { PlaySE(0x5); - sub_80EBDBC(&sub_80EE3D8); + sub_80EBDBC(&sub_80EDB88); break; } else { PlaySE(0x20); - sub_80EF428(0, 6); + sub_80EF428(0, 5); ewram0.var304 = 0xFF; break; } - case 0: - if (sub_80EEC10() != 0) { + case 6: + sub_80F6C20(); + if (ewram0.varD158 != 0) { PlaySE(0x5); - sub_80EF428(0, ewram0.var6dad); - sub_80EED9C(); + sub_80EBDBC(&sub_80EE3D8); break; } else { - if (gMain.newKeys & A_BUTTON) { - if (!(gMain.newKeys & B_BUTTON)) { - ewram0.var304 = 1; - } - break; - } - ewram0.var6ddc = ewram0.var6dad; - // TODO switch + PlaySE(0x20); + sub_80EF428(0, 6); + ewram0.var304 = 0xFF; break; } case 0xFF: @@ -476,406 +508,16 @@ void sub_80EC268() { PlaySE(0x5); sub_80EF428(0, ewram0.var6dad); ewram0.var304 = 0; - break; + sub_80EED9C(); } else { - if (gMain.newKeys & (A_BUTTON | B_BUTTON)) return; + if (!(gMain.newKeys & (A_BUTTON | B_BUTTON))) return; sub_80EF428(0, ewram0.var6dad); ewram0.var304 = var1; break; } - case 4: - if (sub_8055870()) return; - if (ewram0.var8fe8 != 0) { - PlaySE(0x5); - sub_80EBDBC(&sub_80EDB88); - break; - } - else { - PlaySE(0x20); - sub_80EF428(0, 5); - ewram0.var304 = 0xFF; - break; - } - case 2: - sub_80F6208(); - ewram0.var304++; - if (sub_80F6250()) return; - ewram0.var304++; - break; - case 1: - sub_80F208C(); - sub_80EBDBC(&sub_80EE96C); - break; } -// if (ewram0.var304 != 3) { -// // bls -> bgt -// if (ewram0.var304 > 3) { -// if (ewram0.var304 != 6) { -// if (ewram0.var304 > 6) { -// if (ewram0.var304 != 0xFF) return; -// if (sub_80EEC10() == 0) { -// if (gMain.newKeys == (A_BUTTON | B_BUTTON)) return; -// sub_80EF428(0, ewram0.var6dad); -// return; -// } -// PlaySE(0x5); -// sub_80EF428(0, ewram0.var6dad); -// sub_80EED9C(); -// return; -// -// } -// if (ewram0.var304 != 4) return; -// if (sub_8055870() != 0) return; -// if (ewram0.var8fe8 == 0) { -// PlaySE(0x20); -// sub_80EF428(0, 5); -// ewram0.var304 = 0xFF; -// return; -// } -// PlaySE(0x5); -// sub_80EBDBC(&sub_80EDB88); -// return; -// } -// if (ewram0.var304 != 4) return; -// if (sub_8055870()) return; -// if (!ewram0.var8fe8) { -// PlaySE(0x20); -// sub_80EF428(0, 5); -// ewram0.var304 = 0xFF; -// return; -// } -// PlaySE(5); -// sub_80EBDBC(&sub_80EDB88); -// return; -// } -// if (ewram0.var304 != 1) { -// if (ewram0.var304 < 1) { -// if (ewram0.var304 == 0) { -// if (sub_80EEC10() == 0) { -// if (gMain.newKeys != A_BUTTON) { -// -// } -// ewram0.var6ddc = ewram0.var6dad; -// // TODO arreglar esto -// switch (ewram0.var6db2) { -// case 1: -// PlaySE(5); -// sub_80EBDBC(&sub_80EC4A0); -// return; -// case 2: -// PlaySE(5); -// sub_80EBDBC(&sub_80EC81C); -// return; -// case 3: -// ewram0.var304 = 6; -// return; -// case 4: -// ewram0.var304 = 2; -// return; -// case 5: -// ewram0.var304 = 1; -// return; -// } -// } -// PlaySE(0x5); -// sub_80EF428(0, ewram0.var6dad); -// sub_80EED9C(); -// return; -// } -// } -// sub_80F6208(); -// ewram0.var304++; -// if (sub_80F6250() != 0) return; -// ewram0.var304++; -// return; -// } -// sub_80F208C(); -// sub_80EBDBC(&sub_80EE96C); -// return; -// } -// if (sub_80F6250() != 0) return; -// ewram0.var304++; -// return; -} -#else -__attribute__((naked)) -void sub_80EC268() { - asm_unified("push {r4-r6,lr}\n\ - ldr r4, _080EC290 @ =0x02000000\n\ - movs r0, 0xC1\n\ - lsls r0, 2\n\ - adds r6, r4, r0\n\ - ldrh r0, [r6]\n\ - cmp r0, 0x3\n\ - bne _080EC27A\n\ - b _080EC3BE\n\ -_080EC27A:\n\ - cmp r0, 0x3\n\ - bgt _080EC294\n\ - cmp r0, 0x1\n\ - bne _080EC284\n\ - b _080EC3A2\n\ -_080EC284:\n\ - cmp r0, 0x1\n\ - ble _080EC28A\n\ - b _080EC3B4\n\ -_080EC28A:\n\ - cmp r0, 0\n\ - beq _080EC2AE\n\ - b _080EC492\n\ - .align 2, 0\n\ -_080EC290: .4byte 0x02000000\n\ -_080EC294:\n\ - cmp r0, 0x6\n\ - bne _080EC29A\n\ - b _080EC414\n\ -_080EC29A:\n\ - cmp r0, 0x6\n\ - bgt _080EC2A6\n\ - cmp r0, 0x4\n\ - bne _080EC2A4\n\ - b _080EC3DC\n\ -_080EC2A4:\n\ - b _080EC492\n\ -_080EC2A6:\n\ - cmp r0, 0xFF\n\ - bne _080EC2AC\n\ - b _080EC44C\n\ -_080EC2AC:\n\ - b _080EC492\n\ -_080EC2AE:\n\ - bl sub_80EEC10\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - beq _080EC2D4\n\ - movs r0, 0x5\n\ - bl PlaySE\n\ - ldr r1, _080EC2D0 @ =0x00006dad\n\ - adds r0, r4, r1\n\ - ldrb r1, [r0]\n\ - movs r0, 0\n\ - bl sub_80EF428\n\ - bl sub_80EED9C\n\ - b _080EC492\n\ - .align 2, 0\n\ -_080EC2D0: .4byte 0x00006dad\n\ -_080EC2D4:\n\ - ldr r0, _080EC310 @ =gMain\n\ - ldrh r1, [r0, 0x2E]\n\ - movs r2, 0x1\n\ - adds r0, r2, 0\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _080EC394\n\ - ldr r2, _080EC314 @ =0x00006dad\n\ - adds r0, r4, r2\n\ - ldrb r1, [r0]\n\ - adds r2, 0x2F\n\ - adds r0, r4, r2\n\ - strb r1, [r0]\n\ - ldrb r0, [r0]\n\ - lsls r0, 24\n\ - asrs r0, 24\n\ - subs r2, 0x2A\n\ - adds r1, r4, r2\n\ - adds r0, r1\n\ - ldrb r0, [r0]\n\ - subs r0, 0x1\n\ - cmp r0, 0x4\n\ - bls _080EC304\n\ - b _080EC492\n\ -_080EC304:\n\ - lsls r0, 2\n\ - ldr r1, _080EC318 @ =_080EC31C\n\ - adds r0, r1\n\ - ldr r0, [r0]\n\ - mov pc, r0\n\ - .align 2, 0\n\ -_080EC310: .4byte gMain\n\ -_080EC314: .4byte 0x00006dad\n\ -_080EC318: .4byte _080EC31C\n\ - .align 2, 0\n\ -_080EC31C:\n\ - .4byte _080EC330\n\ - .4byte _080EC344\n\ - .4byte _080EC380\n\ - .4byte _080EC36C\n\ - .4byte _080EC358\n\ -_080EC330:\n\ - movs r0, 0x5\n\ - bl PlaySE\n\ - ldr r0, _080EC340 @ =sub_80EC4A0\n\ - bl sub_80EBDBC\n\ - b _080EC492\n\ - .align 2, 0\n\ -_080EC340: .4byte sub_80EC4A0\n\ -_080EC344:\n\ - movs r0, 0x5\n\ - bl PlaySE\n\ - ldr r0, _080EC354 @ =sub_80EC81C\n\ - bl sub_80EBDBC\n\ - b _080EC492\n\ - .align 2, 0\n\ -_080EC354: .4byte sub_80EC81C\n\ -_080EC358:\n\ - ldr r0, _080EC368 @ =0x02000000\n\ - movs r1, 0xC1\n\ - lsls r1, 2\n\ - adds r0, r1\n\ - movs r1, 0x1\n\ - strh r1, [r0]\n\ - b _080EC492\n\ - .align 2, 0\n\ -_080EC368: .4byte 0x02000000\n\ -_080EC36C:\n\ - ldr r0, _080EC37C @ =0x02000000\n\ - movs r2, 0xC1\n\ - lsls r2, 2\n\ - adds r0, r2\n\ - movs r1, 0x2\n\ - strh r1, [r0]\n\ - b _080EC492\n\ - .align 2, 0\n\ -_080EC37C: .4byte 0x02000000\n\ -_080EC380:\n\ - ldr r0, _080EC390 @ =0x02000000\n\ - movs r1, 0xC1\n\ - lsls r1, 2\n\ - adds r0, r1\n\ - movs r1, 0x6\n\ - strh r1, [r0]\n\ - b _080EC492\n\ - .align 2, 0\n\ -_080EC390: .4byte 0x02000000\n\ -_080EC394:\n\ - movs r0, 0x2\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _080EC39E\n\ - b _080EC492\n\ -_080EC39E:\n\ - strh r2, [r6]\n\ - b _080EC492\n\ -_080EC3A2:\n\ - bl sub_80F208C\n\ - ldr r0, _080EC3B0 @ =sub_80EE96C\n\ - bl sub_80EBDBC\n\ - b _080EC492\n\ - .align 2, 0\n\ -_080EC3B0: .4byte sub_80EE96C\n\ -_080EC3B4:\n\ - bl sub_80F6208\n\ - ldrh r0, [r6]\n\ - adds r0, 0x1\n\ - strh r0, [r6]\n\ -_080EC3BE:\n\ - bl sub_80F6250\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - bne _080EC492\n\ - ldr r1, _080EC3D8 @ =0x02000000\n\ - movs r2, 0xC1\n\ - lsls r2, 2\n\ - adds r1, r2\n\ - ldrh r0, [r1]\n\ - adds r0, 0x1\n\ - strh r0, [r1]\n\ - b _080EC492\n\ - .align 2, 0\n\ -_080EC3D8: .4byte 0x02000000\n\ -_080EC3DC:\n\ - bl sub_8055870\n\ - cmp r0, 0\n\ - bne _080EC492\n\ - ldr r1, _080EC400 @ =0x00008fe8\n\ - adds r0, r4, r1\n\ - ldrb r0, [r0]\n\ - lsls r0, 24\n\ - asrs r0, 24\n\ - cmp r0, 0\n\ - beq _080EC408\n\ - movs r0, 0x5\n\ - bl PlaySE\n\ - ldr r0, _080EC404 @ =sub_80EDB88\n\ - bl sub_80EBDBC\n\ - b _080EC492\n\ - .align 2, 0\n\ -_080EC400: .4byte 0x00008fe8\n\ -_080EC404: .4byte sub_80EDB88\n\ -_080EC408:\n\ - movs r0, 0x20\n\ - bl PlaySE\n\ - movs r0, 0\n\ - movs r1, 0x5\n\ - b _080EC442\n\ -_080EC414:\n\ - bl sub_80F6C20\n\ - ldr r2, _080EC430 @ =0x0000d158\n\ - adds r0, r4, r2\n\ - ldrh r0, [r0]\n\ - cmp r0, 0\n\ - beq _080EC438\n\ - movs r0, 0x5\n\ - bl PlaySE\n\ - ldr r0, _080EC434 @ =sub_80EE3D8\n\ - bl sub_80EBDBC\n\ - b _080EC492\n\ - .align 2, 0\n\ -_080EC430: .4byte 0x0000d158\n\ -_080EC434: .4byte sub_80EE3D8\n\ -_080EC438:\n\ - movs r0, 0x20\n\ - bl PlaySE\n\ - movs r0, 0\n\ - movs r1, 0x6\n\ -_080EC442:\n\ - bl sub_80EF428\n\ - movs r0, 0xFF\n\ - strh r0, [r6]\n\ - b _080EC492\n\ -_080EC44C:\n\ - bl sub_80EEC10\n\ - lsls r0, 24\n\ - lsrs r5, r0, 24\n\ - cmp r5, 0\n\ - beq _080EC478\n\ - movs r0, 0x5\n\ - bl PlaySE\n\ - ldr r1, _080EC474 @ =0x00006dad\n\ - adds r0, r4, r1\n\ - ldrb r1, [r0]\n\ - movs r0, 0\n\ - bl sub_80EF428\n\ - movs r0, 0\n\ - strh r0, [r6]\n\ - bl sub_80EED9C\n\ - b _080EC492\n\ - .align 2, 0\n\ -_080EC474: .4byte 0x00006dad\n\ -_080EC478:\n\ - ldr r0, _080EC498 @ =gMain\n\ - ldrh r1, [r0, 0x2E]\n\ - movs r0, 0x3\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _080EC492\n\ - ldr r2, _080EC49C @ =0x00006dad\n\ - adds r0, r4, r2\n\ - ldrb r1, [r0]\n\ - movs r0, 0\n\ - bl sub_80EF428\n\ - strh r5, [r6]\n\ -_080EC492:\n\ - pop {r4-r6}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_080EC498: .4byte gMain\n\ -_080EC49C: .4byte 0x00006dad\n\ - "); } -#endif void sub_80F1E84(); bool8 sub_80F1F10(); -- cgit v1.2.3 From 43042f7495b2fe8ba6e16b2aa987f492b0ffd9ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BAl=20Pe=C3=B1acoba?= Date: Sun, 13 Aug 2017 12:25:31 +0200 Subject: sub_80ECA10 --- src/pokenav_before.c | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) (limited to 'src') diff --git a/src/pokenav_before.c b/src/pokenav_before.c index f90410c26..210aedf0e 100644 --- a/src/pokenav_before.c +++ b/src/pokenav_before.c @@ -758,3 +758,68 @@ void sub_80EC9A8() { sub_80EF428(1, ewram0.var6dad); } } + +void sub_80ECA10() { + switch (ewram0.var304) { + case 0: + if (sub_80EEF78()) return; + SetVBlankCallback(&sub_80EBD80); + sub_80EED1C(); + ewram0.var6dad = ewram0.var6df0; + ewram0.var6dae = 0x3; + sub_80EEE08(); + ewram0.var304++; + break; + case 1: + sub_80EF248(0x1); + ewram0.var304++; + case 2: + if (sub_80EF284(0x1)) return; + ewram0.var304++; + break; + case 3: + sub_80F1B8C(0x1); + ewram0.var304++; + case 4: + if (sub_80F1BC8(0x1)) return; + ewram0.var304++; + break; + case 5: + if (sub_8055870()) return; + ewram0.var304++; + break; + case 6: + BeginNormalPaletteFade(ewram0.var308, -1, 0x10, 0, 0); + SetVBlankCallback(&sub_80EBD18); + ewram0.var304++; + break; + case 7: + sub_80EED2C(0); + ewram0.var304++; + break; + case 8: + sub_80F2598(); + ewram0.var304++; + break; + case 9: + if (gPaletteFade.active) return; + ewram0.var304++; + break; + case 0xA: + sub_80F2C80(0x1); + ewram0.var304++; + + case 0xB: + if (sub_80F2CBC(0x1)) return; + ewram0.var304++; + break; + case 0xC: + sub_80F1DF0(); + ewram0.var304++; + break; + case 0xD: + if (sub_80F1E50()) return; + sub_80EF428(1, ewram0.var6dad); + sub_80EBDBC(&sub_80EC86C); + } +} -- cgit v1.2.3 From 9cd9c2534671fc8d4a7e12d93bc99644e99c685b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BAl=20Pe=C3=B1acoba?= Date: Mon, 14 Aug 2017 16:20:22 +0200 Subject: sub_80ECC08 --- src/pokenav_before.c | 62 +++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 59 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/pokenav_before.c b/src/pokenav_before.c index 210aedf0e..f86b93ca1 100644 --- a/src/pokenav_before.c +++ b/src/pokenav_before.c @@ -31,13 +31,19 @@ struct UnknownPokenav0 { /* 0x6ddc */ s8 var6ddc; /* 0x6ddd */ u8 fill6ddd[0x13]; /* 0x6df0 */ s8 var6df0; - /* 0x6df1 */ u8 fill6df1[0x9f]; + /* 0x6df1 */ u8 fill6df1[0xB]; + /* 0x6dfc */ u8 var6dfc; + /* 0x6dfd */ u8 fill6dfd[0x93]; /* 0x6e90 */ u8 var6e90; /* 0x6e91 */ u8 fill6e91[0x4]; /* 0x6e95 */ u8 var6e95; - /* 0x6e96 */ u8 var6e96[0x18d2]; + /* 0x6e96 */ u8 var6e96[0x814]; + /* 0x76AA */ u8 var76aa; + /* 0x76AB */ u8 fill76AB[0x10BD]; /* 0x8768 */ u32 var8768; - /* 0x876C */ u8 fill876B[0x00bc]; + /* 0x876C */ u8 fill876B[0x6C]; + /* 0x87D8 */ u8 var87D8; + /* 0x87D9 */ u8 fill87D9[0x4F]; /* 0x8828 */ u8 var8828; /* 0x8829 */ u8 fill8829[0x07bf]; /* 0x8FE8 */ s8 var8fe8; @@ -823,3 +829,53 @@ void sub_80ECA10() { sub_80EBDBC(&sub_80EC86C); } } + +void sub_80ED01C(); + +void sub_80ECC08() { + switch (ewram0.var304) { + case 0: + if (sub_80EEC90()) { + PlaySE(0x5); + sub_80EF428(2, ewram0.var6dad); + sub_80EED9C(); + break; + } + if ((gMain.newKeys & A_BUTTON)) { + PlaySE(0x5); + switch ((s8)ewram0.var6dad) { + case 0: + ewram0.var87D8 = 22; + break; + case 1: + ewram0.var87D8 = 23; + break; + case 2: + ewram0.var87D8 = 24; + break; + case 3: + ewram0.var87D8 = 33; + break; + case 4: + ewram0.var87D8 = 47; + break; + case 5: + sub_80EBDBC(&sub_80EC9A8); + return; + } + ewram0.var6dfc = ewram0.var6dad; + ewram0.var76aa = 1; + sub_80EBDBC(&sub_80ED01C); + } + else if (gMain.newKeys & B_BUTTON) { + PlaySE(0x5); + ewram0.var6dad = 0x5; + ewram0.var304++; + } + break; + case 1: + if (sub_80F1E6C()) return;; + sub_80EBDBC(&sub_80EC9A8); + break; + } +} -- cgit v1.2.3 From 9790da07394c311fd72713466b4c4589963adb5d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BAl=20Pe=C3=B1acoba?= Date: Mon, 14 Aug 2017 17:29:10 +0200 Subject: sub_80ECD80 --- src/pokenav_before.c | 100 +++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 98 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/pokenav_before.c b/src/pokenav_before.c index f86b93ca1..0c4942f47 100644 --- a/src/pokenav_before.c +++ b/src/pokenav_before.c @@ -18,7 +18,7 @@ struct UnknownPokenav0 { /* 0x0000 */ u8 fill0000[0x0300]; /* 0x0300 */ void (*var300)(void); /* 0x0304 */ u16 var304; - /* 0x0306 */ u8 fill0306; + /* 0x0306 */ u16 var306; /* 0x0308 */ u32 var308; /* 0x030C */ u8 fill030C[0x6a9f]; /* 0x6dab */ u8 var6dab; @@ -825,7 +825,7 @@ void sub_80ECA10() { break; case 0xD: if (sub_80F1E50()) return; - sub_80EF428(1, ewram0.var6dad); + sub_80EF428(1, ewram0.var6dad); sub_80EBDBC(&sub_80EC86C); } } @@ -879,3 +879,99 @@ void sub_80ECC08() { break; } } + +void sub_80F3130(); +void sub_80F2D6C(u32); + +void sub_80ECD80() { + u16 var1; + switch (ewram0.var304) { + case 0: + BeginNormalPaletteFade(ewram0.var308, -1, 0, 0x10, 0); + ewram0.var304++; + break; + case 1: + if (gPaletteFade.active) return; + ewram0.var304++; + break; + case 2: + if (sub_80EEF78()) return; + SetVBlankCallback(&sub_80EBD80); + ewram0.var304++; + break; + case 3: + sub_80EED1C(); + sub_80F3130(); + ewram0.var304++; + break; + case 4: + sub_80F2D6C(0x1); + ewram0.var304++; + break; + case 5: + sub_80F2D6C(0x5); + ewram0.var304++; + break; + case 6: + ewram0.var6dad = ewram0.var6dfc; + ewram0.var6dae = 0x6; + sub_80EEE08(); + ewram0.var304++; + break; + case 7: + sub_80EF248(0x2); + ewram0.var304++; + case 8: + if (sub_80EF284(0x2)) return; + ewram0.var304++; + break; + case 9: + sub_80F1B8C(0x2); + ewram0.var304++; + case 0xA: + if (sub_80F1BC8(0x2)) return; + ewram0.var304++; + break; + case 0xB: + if (sub_8055870()) return; + ewram0.var304++; + break; + case 0xC: + BeginNormalPaletteFade(ewram0.var308, -1, 0x10, 0, 0); + SetVBlankCallback(&sub_80EBD18); + ewram0.var304++; + break; + case 0xD: + sub_80EED2C(0); + ewram0.var304++; + break; + case 0xE: + sub_80F2598(); + ewram0.var304++; + break; + case 0xF: + if (gPaletteFade.active) return; + ewram0.var304++; + break; + case 0x10: + sub_80F2C80(0x1); + ewram0.var304++; + case 0x11: + if ((var1 = sub_80F2CBC(0x1))) return; + ewram0.var306 = var1; + ewram0.var304++; + break; + case 0x12: + sub_80F2C80(0x5); + ewram0.var304++; + case 0x13: + if (sub_80F2CBC(0x5)) return; + sub_80F1DF0(); + ewram0.var304++; + break; + case 0x14: + if (sub_80F1E50()) return; + sub_80EF428(2, ewram0.var6dad); + sub_80EBDBC(&sub_80ECC08); + } +} -- cgit v1.2.3 From 870c5ca2b53444424effa3265d37206742d0ffec Mon Sep 17 00:00:00 2001 From: "U-Maria-PC\\Maria" Date: Mon, 14 Aug 2017 13:47:43 -0400 Subject: decompiled up to sub_80CD394 --- src/battle_anim_80CA710.c | 266 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 266 insertions(+) (limited to 'src') diff --git a/src/battle_anim_80CA710.c b/src/battle_anim_80CA710.c index 53494608a..7c66203c7 100755 --- a/src/battle_anim_80CA710.c +++ b/src/battle_anim_80CA710.c @@ -50,6 +50,10 @@ void sub_80CC7D4(struct Sprite* sprite); void sub_80CCB00(struct Sprite* sprite); void sub_80CCCB4(struct Sprite* sprite); void sub_80CCE0C(struct Sprite* sprite); +void sub_80CCF70(struct Sprite* sprite); +void sub_80CD0CC(struct Sprite* sprite, int unk1, int unk2); +void sub_80CD2D4(struct Sprite* sprite); +void sub_80CD394(struct Sprite* sprite); s16 sub_80CC338(struct Sprite* sprite); @@ -62,6 +66,9 @@ void sub_80782D8(struct Sprite *sprite); void sub_8078CC0(struct Sprite *sprite); void sub_8078600(struct Sprite *sprite); void sub_8078504(struct Sprite *sprite); +void sub_807861C(struct Sprite *sprite); +void sub_8078650(struct Sprite *sprite); +void sub_8078394(struct Sprite *sprite); void sub_807A3FC(u8 slot, u8 a2, s16 *a3, s16 *a4); u8 sub_8079ED4(u8 slot); @@ -2645,3 +2652,262 @@ void sub_80CCD24(struct Sprite* sprite) sprite->callback = sub_80CCE0C; } +void sub_80CCE0C(struct Sprite* sprite) +{ + int a; + int i; + sprite->data5 += 0x60; + sprite->pos2.x = -(sprite->data5 >> 8); + sprite->data1++; + if(sprite->data1 > 1) + { + sprite->data1 = 0; + a = gPlttBufferFaded[sprite->data2 + 1]; + i = 0; + do + { + gPlttBufferFaded[sprite->data2 + ++i] = gPlttBufferFaded[sprite->data2 + i + 1]; + } + while ( i <= 5 ); + gPlttBufferFaded[sprite->data2 + 7] = a; + } + if (sprite->data7 > 6 && sprite->data0 >0 && ++sprite->data6 > 1) + { + sprite->data6 = 0; + sprite->data7 -= 1; + REG_BLDALPHA = (sprite->data7 << 8) | (16 - sprite->data7);; + } + if (sprite->data0 >0) + { + sprite->data0 -= 1; + } + else if (++sprite->data6 > 1) + { + sprite->data6 = 0; + sprite->data7++; + REG_BLDALPHA = (sprite->data7 << 8) | (16 - sprite->data7); + if(sprite->data7 == 16) + { + sprite->invisible = 1; + sprite->callback = sub_807861C; + } + } +} + +void sub_80CCF04(struct Sprite* sprite) +{ + sprite->pos1.x = sub_8077ABC(gBattleAnimEnemyMonIndex, 2); + sprite->pos1.y = sub_8077ABC(gBattleAnimEnemyMonIndex, 3) + 0xFFE8; + sprite->data0 = 0; + sprite->data1 = 0; + sprite->data2 = 0; + sprite->data3 = 0; + sprite->data4 = 0; + sprite->data6 = 0; + sprite->data7 = 16; + REG_BLDCNT = 0x3F40; + REG_BLDALPHA = (sprite->data7 << 8) | sprite->data6; + sprite->callback = sub_80CCF70; +} + +void sub_80CCF70(struct Sprite* sprite) +{ + switch(sprite->data0) + { + case 0: + { + if(++sprite->data2 > 0) + { + sprite->data2 = 0; + if(((++sprite->data1) & 1) != 0) + { + if(sprite->data6 <= 15) + sprite->data6++; + } + else if (sprite->data7 > 0) + sprite->data7--; + REG_BLDALPHA = (sprite->data7 << 8) | sprite->data6; + if(sprite->data6 == 16 && sprite->data7 == 0) + { + sprite->data1 = 0; + sprite->data0++; + break; + } + } + break; + } + case 1: + { + if(++sprite->data1 > 8) + { + sprite->data1 = 0; + StartSpriteAffineAnim(sprite, 1); + sprite->data0++; + break; + } + break; + } + case 2: + { + sub_80CD0CC(sprite, 16, 4); + if(++sprite->data1 > 2) + { + sprite->data1 = 0; + sprite->pos1.y++; + } + if(++sprite->data2 <= 29) + break; + if(sprite->data2 & 1) + { + if(sprite->data6 > 0) + sprite->data6--; + } + else if(sprite->data7 <= 15) + sprite->data7++; + REG_BLDALPHA = (sprite->data7 << 8) | sprite->data6; + if(sprite->data6 == 0 && sprite->data7 == 16) + { + sprite->data1 = 0; + sprite->data2 = 0; + sprite->data0++; + break; + } + else + break; + } + case 3: + { + sprite->invisible = 1; + sprite->data0++; + break; + } + case 4: + { + REG_BLDCNT = 0; + REG_BLDALPHA = 0; + move_anim_8072740(sprite); + } + } +} + +void sub_80CD0CC(struct Sprite* sprite, int unk1, int unk2) +{ + if(sprite->data3 <= 11) + sprite->data4 += 2; + if((u16)(sprite->data3 - 0x12) <= 0x17) + sprite->data4 -= 2; + if((sprite->data3) > 0x2F) + sprite->data4 += 2; + sprite->pos2.x = sprite->data4 / 9; + sprite->pos2.y = sprite->data4 / 14; + if(sprite->pos2.y < 0) + sprite->pos2.y *= -1; + sprite->data3++; + if(sprite->data3 > 0x3B) + sprite->data3 = 0; +} + +void sub_80CD140(struct Sprite* sprite) +{ + if (!gBattleAnimArgs[2]) + sub_8078650(sprite); + sub_807867C(sprite, gBattleAnimArgs[0]); + sprite->pos1.y += gBattleAnimArgs[1]; + sprite->data0 = gBattleAnimArgs[5]; + sprite->data1 = gBattleAnimArgs[3]; + sprite->data2 = gBattleAnimArgs[4]; + oamt_set_x3A_32(sprite, move_anim_8072740); + sprite->callback = sub_8078394; +} + +void sub_80CD190(struct Sprite* sprite) +{ + u8 bank; + if (!gBattleAnimArgs[2]) + bank = gBattleAnimPlayerMonIndex; + else + bank = gBattleAnimEnemyMonIndex; + if (IsDoubleBattle() && b_side_obj__get_some_boolean(bank ^ 2)) + { + sub_807A3FC(bank, gBattleAnimArgs[6], &sprite->pos1.x, &sprite->pos1.y); + sub_807867C(sprite, gBattleAnimArgs[0]); + sprite->pos1.y += gBattleAnimArgs[1]; + } + else + { + if (!gBattleAnimArgs[6]) + { + sprite->pos1.x = sub_8077ABC(bank, 0); + sprite->pos1.y = sub_8077ABC(bank, 1) + gBattleAnimArgs[1]; + } + else + { + sprite->pos1.x = sub_8077ABC(bank, 2); + sprite->pos1.y = sub_8077ABC(bank, 3) + gBattleAnimArgs[1]; + } + sub_807867C(sprite, gBattleAnimArgs[0]); + } + sprite->data0 = gBattleAnimArgs[5]; + sprite->data1 = gBattleAnimArgs[3]; + sprite->data2 = gBattleAnimArgs[4]; + oamt_set_x3A_32(sprite, move_anim_8072740); + sprite->callback = sub_8078394; +} + +void sub_80CD274(struct Sprite* sprite) +{ + sub_8078650(sprite); + if (GetBankSide(gBattleAnimPlayerMonIndex) == 0) + { + sprite->pos1.x += gBattleAnimArgs[0]; + sprite->pos1.y += gBattleAnimArgs[1]; + } + else + { + sprite->pos1.x -= gBattleAnimArgs[0]; + sprite->pos1.y += gBattleAnimArgs[1]; + StartSpriteAnim(sprite, 1); + } + sprite->callback = sub_80CD2D4; +} + +void sub_80CD2D4(struct Sprite* sprite) +{ + if (++sprite->data0 > 30) + { + sprite->pos2.y = (30 - sprite->data0) / 3; + sprite->pos2.x = Sin(sprite->data1 * 4, 3); + sprite->data1++; + } + if(sprite->animEnded) + move_anim_8072740(sprite); +} + +void sub_80CD328(struct Sprite* sprite) +{ + sub_8078650(sprite); + if (GetBankSide(gBattleAnimPlayerMonIndex) == 0) + { + sprite->pos1.x += gBattleAnimArgs[0]; + sprite->pos1.y += gBattleAnimArgs[1]; + sprite->data3 = 1; + } + else + { + sprite->pos1.x -= gBattleAnimArgs[0]; + sprite->pos1.y += gBattleAnimArgs[1]; + sprite->data3 = 0xFFFF; + StartSpriteAffineAnim(sprite, 1); + } + sprite->callback = sub_80CD394; +} + +void sub_80CD394(struct Sprite* sprite) +{ + sprite->pos2.y = -(sprite->data0 / 0x28); + sprite->pos2.x = sprite->data4 / 10; + sprite->data4 += sprite->data3 * 2; + sprite->data0 += sprite->data1; + if (++sprite->data1 > 0x3C) + move_anim_8074EE0(sprite); +} \ No newline at end of file -- cgit v1.2.3 From c33fac030e2e2f5761adf07e1e26d3e4568252bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BAl=20Pe=C3=B1acoba?= Date: Tue, 15 Aug 2017 12:22:47 +0200 Subject: sub_80ED01C --- src/pokenav_before.c | 103 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 103 insertions(+) (limited to 'src') diff --git a/src/pokenav_before.c b/src/pokenav_before.c index 0c4942f47..fea93d4cf 100644 --- a/src/pokenav_before.c +++ b/src/pokenav_before.c @@ -975,3 +975,106 @@ void sub_80ECD80() { sub_80EBDBC(&sub_80ECC08); } } + +void sub_80F4D44(); +bool8 sub_80F4D88(); +void sub_80F0264(); +bool8 sub_80F02A0(); +void sub_80F3008(); +void sub_80ED31C(); + +void sub_80ED01C() { + u16 var1; + u16 var3; + switch (ewram0.var304) { + case 0: + sub_80F1E84(); + sub_80F2D04(0x1); + sub_80F2D04(0x5); + ewram0.var304++; + break; + case 1: + if (sub_80F1F10()) return; + sub_80EEFBC(0); + ewram0.var304++; + break; + case 2: + if ((var1 = sub_80EEF34())) return; + BeginNormalPaletteFade(ewram0.var308, -1, 0x0, 0x10, var1); + ewram0.var304++; + break; + case 3: + if (gPaletteFade.active) return; + SetVBlankCallback(NULL); + sub_80EED0C(); + sub_80EF814(); + ewram0.var304++; + break; + case 4: + sub_80F2620(); + ewram0.var304++; + break; + case 5: + sub_80F4D44(); + ewram0.var304++; + case 6: + if (!sub_80F4D88()) { + ewram0.var304 += 2; + break; + } + ewram0.var304++; + break; + case 7: + if (sub_8055870()) return; + ewram0.var304--; + break; + case 8: + if (sub_8055870()) return; + ewram0.var304++; + break; + case 9: + sub_80F0264(0); + ewram0.var304++; + case 0xA: + if (sub_80F02A0()) return; + ewram0.var304++; + break; + case 0xB: + sub_80F3008(0); + ewram0.var304++; + break; + case 0xC: + if (sub_8055870()) return; + ewram0.var304++; + break; + case 0xD: + BeginNormalPaletteFade(ewram0.var308, -1, 0x10, 0, 0); + SetVBlankCallback(&sub_80EBD18); + ewram0.var304++; + break; + case 0xE: + sub_80EED2C(0x4); + ewram0.var304++; + break; + case 0xF: + if (gPaletteFade.active) return; + ewram0.var306 = (u8)(gPaletteFade.active << 24); + ewram0.var304++; + break; + case 0x10: + sub_80F2C80(0x1); + ewram0.var304++; + case 0x11: + if ((var3 = sub_80F2CBC(0x1))) return; + ewram0.var306 = var3; + ewram0.var304++; + break; + case 0x12: + sub_80F2C80(ewram0.var6dfc + 7); + ewram0.var304++; + case 0x13: + if (sub_80F2CBC(ewram0.var6dfc + 7)) return; + sub_80EBDBC(&sub_80ED31C); + break; + } +} -- cgit v1.2.3 From 348cb0b5762b192cffade7be12885ce75025fe9b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BAl=20Pe=C3=B1acoba?= Date: Tue, 15 Aug 2017 12:46:23 +0200 Subject: sub_80ED31C --- src/pokenav_before.c | 45 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/pokenav_before.c b/src/pokenav_before.c index fea93d4cf..56cf07243 100644 --- a/src/pokenav_before.c +++ b/src/pokenav_before.c @@ -841,7 +841,7 @@ void sub_80ECC08() { sub_80EED9C(); break; } - if ((gMain.newKeys & A_BUTTON)) { + if (gMain.newKeys & A_BUTTON) { PlaySE(0x5); switch ((s8)ewram0.var6dad) { case 0: @@ -1078,3 +1078,46 @@ void sub_80ED01C() { break; } } + +u8 sub_80F5DD4(); +void ShowMapNamePopUpWindow(); +void sub_80ED4D8(); +bool8 sub_80F0718(); +bool8 sub_80F3264(); + +void sub_80ED31C() { + switch (ewram0.var304) { + case 0: + switch (sub_80F5DD4()) { + case 1: + PlaySE(0x5); + ShowMapNamePopUpWindow(); + break; + case 2: + PlaySE(0x5); + ewram0.var304++; + break; + default: + if (gMain.newKeys & A_BUTTON) { + PlaySE(0x5); + sub_80EBDBC(&sub_80ED4D8); + } + else if (gMain.newKeys & B_BUTTON) { + PlaySE(0x5); + sub_80EBDBC(&sub_80ECD80); + } + break; + } + break; + case 1: + if (sub_80F0718()) return; + ShowMapNamePopUpWindow(); + sub_80F3264(); + ewram0.var304++; + break; + case 2: + if (sub_8055870()) return; + ewram0.var304 = 0; + break; + } +} -- cgit v1.2.3 From cbe6de0e2a25252ac64313e9a0d032d406b90baf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BAl=20Pe=C3=B1acoba?= Date: Tue, 15 Aug 2017 12:56:20 +0200 Subject: sub_80ED3D0 --- src/pokenav_before.c | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) (limited to 'src') diff --git a/src/pokenav_before.c b/src/pokenav_before.c index 56cf07243..5f705100f 100644 --- a/src/pokenav_before.c +++ b/src/pokenav_before.c @@ -1121,3 +1121,47 @@ void sub_80ED31C() { break; } } + +void sub_80F6134(); + +void sub_80ED3D0() { + switch (ewram0.var304) { + case 0: + SetVBlankCallback(NULL); + ewram0.var304++; + break; + case 1: + sub_80EED0C(); + sub_80F6134(); + ewram0.var304++; + break; + case 2: + sub_80EEFBC(0); + ewram0.var304++; + break; + case 3: + sub_80F0264(0); + ewram0.var304++; + case 4: + if (sub_80F02A0()) return; + ewram0.var304++; + break; + case 5: + if (sub_8055870()) return; + ewram0.var304++; + break; + case 6: + sub_80F3008(0); + BeginNormalPaletteFade(ewram0.var308, -1, 0x10, 0, 0); + SetVBlankCallback(&sub_80EBD18); + ewram0.var304++; + break; + case 7: + sub_80EED2C(0x4); + ewram0.var304++; + break; + case 8: + if (gPaletteFade.active) return; + sub_80EBDBC(&sub_80ED31C); + } +} -- cgit v1.2.3 From db70cd9ff371c6504571d69e52420d1409a163c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BAl=20Pe=C3=B1acoba?= Date: Tue, 15 Aug 2017 15:47:33 +0200 Subject: sub_80ED4D8 --- src/pokenav_before.c | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) (limited to 'src') diff --git a/src/pokenav_before.c b/src/pokenav_before.c index 5f705100f..769fa60b9 100644 --- a/src/pokenav_before.c +++ b/src/pokenav_before.c @@ -1165,3 +1165,55 @@ void sub_80ED3D0() { sub_80EBDBC(&sub_80ED31C); } } + +void sub_80F4CF0(); +void sub_80EFF34(); +bool8 sub_80EFF68(); +void sub_80F35B4(); +void sub_80ED858(); + +void sub_80ED4D8() { + switch (ewram0.var304) { + case 0: + BeginNormalPaletteFade(ewram0.var308, -1, 0, 0x10, 0); + ewram0.var304++; + break; + case 1: + if (gPaletteFade.active) return; + SetVBlankCallback(NULL); + sub_80EED0C(); + sub_80F3130(); + ewram0.var304++; + break; + case 2: + if (sub_8055870()) return; + ewram0.var304++; + break; + case 3: + sub_80F4CF0(); + ewram0.var304++; + break; + case 4: + sub_80EFF34(); + ewram0.var304++; + case 5: + if (sub_80EFF68()) return; + ewram0.var304++; + break; + case 6: + sub_80F35B4(); + sub_80EEFBC(0x2); + BeginNormalPaletteFade(ewram0.var308, -1, 0x10, 0, 0); + SetVBlankCallback(sub_80EBD4C); + ewram0.var304++; + break; + case 7: + sub_80EED2C(0x2); + ewram0.var304++; + break; + case 8: + if (gPaletteFade.active) return; + sub_80EBDBC(&sub_80ED858); + break; + } +} -- cgit v1.2.3 From 937e14d06e6332ec02ff2b98ed0bf294a3ccdd04 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BAl=20Pe=C3=B1acoba?= Date: Tue, 15 Aug 2017 16:14:56 +0200 Subject: sub_80ED620 --- src/pokenav_before.c | 85 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) (limited to 'src') diff --git a/src/pokenav_before.c b/src/pokenav_before.c index 769fa60b9..64e4aa278 100644 --- a/src/pokenav_before.c +++ b/src/pokenav_before.c @@ -55,6 +55,8 @@ struct UnknownPokenav0 { /* 0xced0 */ u32 varCED0; /* 0xced4 */ u8 fillCED4[0x284]; /* 0xD158 */ u16 varD158; + /* 0xD15A */ u8 fillD15A[0x8]; + /* 0xD162 */ u8 varD162; }; @@ -1217,3 +1219,86 @@ void sub_80ED4D8() { break; } } + +void sub_80ED620() { + u8 var1; + switch (ewram0.var304) { + case 0: + sub_80F1E84(); + sub_80F2D04(0x1); + ewram0.var304++; + break; + case 1: + if (sub_80F1F10()) return; + sub_80EEFBC(0x1); + ewram0.var304++; + break; + case 2: + if (!(var1 = sub_80EEF34())) { + BeginNormalPaletteFade(ewram0.var308, -1, 0x0, 0x10, var1); + ewram0.var304++; + } + break; + case 3: + if (gPaletteFade.active) return; + SetVBlankCallback(NULL); + sub_80EED0C(); + sub_80EF814(); + ewram0.var76aa = (u8)(gPaletteFade.active << 24); + ewram0.var304++; + break; + case 4: + sub_80F2620(); + ewram0.var304++; + break; + case 5: + ewram0.varD162 = 0x2; + sub_80F4BD0(); + ewram0.var304++; + break; + case 6: + sub_80EFF34(); + ewram0.var304++; + case 7: + if (sub_80EFF68()) return; + ewram0.var304++; + break; + case 8: + if (sub_8055870()) return; + ewram0.var304++; + break; + case 9: + if (sub_8055870()) return; + ewram0.var304++; + break; + case 0xA: + sub_80F33A8(); + BeginNormalPaletteFade(ewram0.var308, -1, 0x10, 0, 0); + SetVBlankCallback(&sub_80EBD4C); + ewram0.var304++; + break; + case 0xB: + sub_80EED2C(0x2); + ewram0.var304++; + break; + case 0xC: + if (gPaletteFade.active) return; + ewram0.var304++; + break; + case 0xD: + sub_80F2C80(0x1); + ewram0.var304++; + case 0xE: + if (sub_80F2CBC(0x1)) return; + ewram0.var304++; + break; + case 0xF: + sub_80F2C80(0x6); + ewram0.var304++; + case 0x10: + if (sub_80F2CBC(0x6)) return; + sub_80EBDBC(&sub_80ED858); + break; + } + +} -- cgit v1.2.3 From 94af636b20601dd4e1088ca345c472eddb321579 Mon Sep 17 00:00:00 2001 From: "U-Maria-PC\\Maria" Date: Thu, 17 Aug 2017 14:26:50 -0400 Subject: decompiled up to sub_80CDAC8 --- src/battle_anim_80CA710.c | 455 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 454 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/battle_anim_80CA710.c b/src/battle_anim_80CA710.c index 7c66203c7..b7a45e37c 100755 --- a/src/battle_anim_80CA710.c +++ b/src/battle_anim_80CA710.c @@ -23,6 +23,8 @@ extern struct SpriteTemplate gSpriteTemplate_83D6884; extern s16 gUnknown_03000728[]; extern s8 gUnknown_083D680C[11][3]; extern u16 gUnknown_083D6984[]; +extern s8 gUnknown_083D6DDC[4][2]; +extern u8 gObjectBankIDs[]; void sub_80CA768(struct Sprite* sprite); void sub_80CA8B4(struct Sprite* sprite); @@ -54,6 +56,19 @@ void sub_80CCF70(struct Sprite* sprite); void sub_80CD0CC(struct Sprite* sprite, int unk1, int unk2); void sub_80CD2D4(struct Sprite* sprite); void sub_80CD394(struct Sprite* sprite); +void sub_80CD408(struct Sprite* sprite); +void sub_80CD4B8(struct Sprite* sprite); +void sub_80CD4EC(struct Sprite* sprite); +void sub_80CD5A8(struct Sprite* sprite); +void sub_80CD654(struct Sprite* sprite); +void sub_80CD67C(struct Sprite* sprite); +void sub_80CD7CC(struct Sprite* sprite); +void sub_80CD81C(struct Sprite* sprite); +void sub_80CD8A8(struct Sprite* sprite); +void sub_80CD8F8(struct Sprite* sprite); +void sub_80CD91C(struct Sprite* sprite); +void sub_80CD9B8(struct Sprite* sprite); +void sub_80CD9D4(struct Sprite* sprite); s16 sub_80CC338(struct Sprite* sprite); @@ -78,6 +93,7 @@ u16 sub_80790F0(s16 a, s16 b); void sub_8078FDC(struct Sprite *sprite, bool8 a2, s16 xScale, s16 yScale, u16 rotation); void sub_807867C(struct Sprite *sprite, s16 a2); u8 sub_8077EE4(u8 slot, u8 a2); +u32 sub_80791A8(u8 a1, u8 a2, u8 a3, u8 a4, u8 a5, u8 a6, u8 a7); void move_anim_8074EE0(struct Sprite *sprite); bool8 sub_8078718(struct Sprite *sprite); @@ -86,6 +102,9 @@ bool8 sub_8078CE8(struct Sprite *sprite); void sub_80CB3A8(u8 taskId); void sub_80CB438(u8 taskId); void sub_80CBF5C(u8 taskId); +void sub_80CDB60(u8 taskId); +void sub_80CDD20(u8 taskId); + void sub_80CC358(struct Task* task, u8 taskId); void sub_80CA710(struct Sprite* sprite) @@ -2910,4 +2929,438 @@ void sub_80CD394(struct Sprite* sprite) sprite->data0 += sprite->data1; if (++sprite->data1 > 0x3C) move_anim_8074EE0(sprite); -} \ No newline at end of file +} + +void sub_80CD3E0(struct Sprite* sprite) +{ + sprite->pos1.x -= 32; + sprite->pos1.y -= 32; + sprite->data0 = 20; + sprite->callback = sub_80782D8; + oamt_set_x3A_32(sprite, sub_80CD408); +} + +void sub_80CD408(struct Sprite* sprite) +{ + switch(sprite->data5 & 1) + { + case 0: + sprite->data0 = 1; + sprite->callback = sub_80782D8; + oamt_set_x3A_32(sprite, sub_80CD408); + break; + case 1: + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.y = 0; + sprite->pos2.x = 0; + sprite->data0 = 8; + sprite->data2 = sprite->pos1.x + gUnknown_083D6DDC[sprite->data5 >> 8][0]; + sprite->data4 = sprite->pos1.y + gUnknown_083D6DDC[sprite->data5 >> 8][1]; + sprite->callback = sub_8078B34; + oamt_set_x3A_32(sprite, sub_80CD4B8); + sprite->data5 += 0x100; + PlaySE12WithPanning(0xD2, sub_8076F98(0x3F)); + break; + } + sprite->data5 ^= 1; +} + +void sub_80CD4B8(struct Sprite* sprite) +{ + if ((sprite->data5 >> 8) == 4) + { + sprite->data0 = 10; + sprite->callback = sub_80782D8; + oamt_set_x3A_32(sprite, sub_80CD4EC); + } + else + sprite->callback = sub_80CD408; +} + +void sub_80CD4EC(struct Sprite* sprite) +{ + s16 a; + s16 b; + if(sprite->oam.affineParam == 0) + { + sprite->data0 = 3; + sprite->data1 = 0; + sprite->data2 = 0; + sprite->callback = sub_80782D8; + oamt_set_x3A_32(sprite, sub_80CD5A8); + } + else + { + switch(sprite->oam.affineParam) + { + case 1: + a = -8; + b = -8; + break; + case 2: + a = -8; + b = 8; + break; + case 3: + a = 8; + b = -8; + break; + default: + a = 8; + b = 8; + break; + } + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.y = 0; + sprite->pos2.x = 0; + sprite->data0 = 6; + sprite->data2 = sub_8077ABC(gBattleAnimEnemyMonIndex, 2) + a; + sprite->data4 = sub_8077ABC(gBattleAnimEnemyMonIndex, 3) + b; + sprite->callback = sub_8078B34; + oamt_set_x3A_32(sprite, sub_80CD654); + } +} + +void sub_80CD5A8(struct Sprite* sprite) +{ + if (sprite->data2 == 0) + { + if ((sprite->data1 += 3) > 16) + sprite->data1 = 16; + } + else if ((sprite->data1 -= 3) < 0) + sprite->data1 = 0; + BlendPalettes(sub_80791A8(1, 1, 1, 1, 1, 0, 0), sprite->data1, 0x7FFF); + if (sprite->data1 == 16) + { + int pal; + sprite->data2++; + pal = sprite->oam.paletteNum; + LoadPalette(&gPlttBufferUnfaded[0x108 + pal * 16], pal * 16 | 0x101, 4); + PlaySE12WithPanning(0xC0, sub_8076F98(0x3F)); + } + else if (sprite->data1 == 0) + sprite->callback = sub_80CD654; +} + +void sub_80CD654(struct Sprite* sprite) +{ + if ((u16)gBattleAnimArgs[7] == 0xFFFF) + { + sprite->data1 = 0; + sprite->data0 = 0; + sprite->callback = sub_80CD67C; + } +} + +void sub_80CD67C(struct Sprite* sprite) +{ + if (sprite->data0 % 3 == 0) + { + sprite->data1++; + sprite->invisible ^= 1; + } + sprite->data0++; + if (sprite->data1 == 8) + move_anim_8072740(sprite); +} + +void sub_80CD6CC(struct Sprite* sprite) +{ + sprite->oam.affineParam = gBattleAnimArgs[0]; + if ((s16)sprite->oam.affineParam == 1) + { + sprite->pos1.x -= 0x18; + sprite->pos1.y -= 0x18; + } + else if((s16)sprite->oam.affineParam == 2) + { + sprite->pos1.x -= 0x18; + sprite->pos1.y += 0x18; + sprite->oam.matrixNum = 16; + } + else if((s16)sprite->oam.affineParam == 3) + { + sprite->pos1.x += 0x18; + sprite->pos1.y -= 0x18; + sprite->oam.matrixNum = 8; + } + else + { + sprite->pos1.x += 0x18; + sprite->pos1.y += 0x18; + sprite->oam.matrixNum = 24; + } + sprite->oam.tileNum = (sprite->oam.tileNum + 16); + sprite->callback = sub_80CD3E0; + sub_80CD3E0(sprite); +} + +void sub_80CD774(struct Sprite* sprite) +{ + sprite->invisible = 1; + sprite->data0 = 0; + switch(gBattleAnimArgs[0]) + { + case 0: + sprite->callback = sub_80CD7CC; + break; + case 1: + sprite->callback = sub_80CD8A8; + break; + case 2: + sprite->callback = sub_80CD8F8; + break; + default: + sprite->callback = sub_80CD9B8; + break; + } +} + +void sub_80CD7CC(struct Sprite* sprite) +{ + sprite->data0 = 6; + sprite->data1 = (GetBankSide(gBattleAnimPlayerMonIndex)) ? 2 : -2; + sprite->data2 = 0; + sprite->data3 = gObjectBankIDs[gBattleAnimPlayerMonIndex]; + oamt_set_x3A_32(sprite, sub_80CD81C); + sprite->callback = sub_8078458; +} + +void sub_80CD81C(struct Sprite* sprite) +{ + if (sprite->data0 == 0) + { + sprite->data3 = gObjectBankIDs[gBattleAnimPlayerMonIndex]; + sub_8078E70(sprite->data3, 0); + sprite->data4 = (sprite->data6 = GetBankSide(gBattleAnimPlayerMonIndex)) ? 0x300 : 0xFFFFFD00; + sprite->data5 = 0; + } + sprite->data5 += sprite->data4; + obj_id_set_rotscale(sprite->data3, 0x100, 0x100, sprite->data5); + sub_8078F9C(sprite->data3); + if (++sprite->data0 > 3) + { + sprite->data0 = 0; + sprite->callback = sub_80CD9B8; + } +} + +void sub_80CD8A8(struct Sprite* sprite) +{ + sprite->data0 = 4; + sprite->data1 = (GetBankSide(gBattleAnimPlayerMonIndex)) ? -3 : 3; + sprite->data2 = 0; + sprite->data3 = gObjectBankIDs[gBattleAnimPlayerMonIndex]; + oamt_set_x3A_32(sprite, sub_80CD9B8); + sprite->callback = sub_8078458; +} + +void sub_80CD8F8(struct Sprite* sprite) +{ + if(++sprite->data0 > 8) + { + sprite->data0 = 0; + sprite->callback = sub_80CD91C; + } +} + +void sub_80CD91C(struct Sprite* sprite) +{ + if (sprite->data0 == 0) + { + sprite->data3 = gObjectBankIDs[gBattleAnimPlayerMonIndex]; + sprite->data6 = GetBankSide(gBattleAnimPlayerMonIndex); + if (GetBankSide(gBattleAnimPlayerMonIndex)) + { + sprite->data4 = 0xFC00; + sprite->data5 = 0xC00; + } + else + { + sprite->data4 = 0x400; + sprite->data5 = 0xF400; + } + } + sprite->data5 += sprite->data4; + obj_id_set_rotscale(sprite->data3, 0x100, 0x100, sprite->data5); + sub_8078F9C(sprite->data3); + if (++sprite->data0 > 2) + { + sub_8078F40(sprite->data3); + sprite->callback = sub_80CD9B8; + } +} + +void sub_80CD9B8(struct Sprite* sprite) +{ + move_anim_8072740(sprite); +} + +void sub_80CD9C4(struct Sprite* sprite) +{ + sprite->data0 = 0; + sprite->callback = sub_80CD9D4; +} + +void sub_80CD9D4(struct Sprite* sprite) +{ + switch(sprite->data0) + { + case 0: + sprite->data1 = 0; + sprite->data2 = gObjectBankIDs[gBattleAnimPlayerMonIndex]; + sprite->data3 = GetBankSide(gBattleAnimPlayerMonIndex); + sprite->data4 = (sprite->data3 != 0) ? 0x200 : -0x200; + sprite->data5 = 0; + sub_8078E70(sprite->data2, 0); + sprite->data0++; + case 1: + sprite->data5 += sprite->data4; + obj_id_set_rotscale(sprite->data2, 0x100, 0x100, sprite->data5); + sub_8078F9C(sprite->data2); + if (++sprite->data1 > 3) + { + sprite->data1 = 0; + sprite->data4 *= -1; + sprite->data0++; + } + break; + case 2: + sprite->data5 += sprite->data4; + obj_id_set_rotscale(sprite->data2, 0x100, 0x100, sprite->data5); + sub_8078F9C(sprite->data2); + if (++sprite->data1 > 3) + { + sub_8078F40(sprite->data2); + move_anim_8072740(sprite); + } + break; + } +} + +void sub_80CDAC8(u8 taskId) +{ u8 a; + gTasks[taskId].data[0] = gObjectBankIDs[gBattleAnimPlayerMonIndex]; + a = GetBankSide(gBattleAnimPlayerMonIndex); + gTasks[taskId].data[1] = a; + gTasks[taskId].data[2] = 0; + switch(gBattleAnimArgs[0]) + { + default: + DestroyAnimVisualTask(taskId); + break; + case 0: + gTasks[taskId].data[2] = 0; + gTasks[taskId].data[3] = 8; + gTasks[taskId].data[4] = 0; + gTasks[taskId].data[5] = 3; + if (a == 0) + gTasks[taskId].data[5] *= -1; + gTasks[taskId].func = sub_80CDB60; + break; + case 1: + gTasks[taskId].data[3] = 8; + gTasks[taskId].data[4] = 0x600; + gTasks[taskId].data[5] = 0xC0; + if (a == 0) + { + gTasks[taskId].data[4] = -gTasks[taskId].data[4]; + gTasks[taskId].data[5] = -gTasks[taskId].data[5]; + } + gTasks[taskId].func = sub_80CDD20; + break; + } +} + +/* void sub_80CDB60(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + switch(task->data[2]) + { + case 0: + if(task->data[3]) + { + task->data[4] += task->data[5]; + gSprites[task->data[0]].pos2.x = task->data[4]; + task->data[3]--; + } + else + { + task->data[3] = 8; + task->data[4] = 0; + task->data[5] = (task->data[1] == 0) ? -0xC0 : 0xC0; + sub_8078E70(task->data[0], 0); + task->data[2]++; + } + break; + case 1: + if (task->data[3]) + { + task->data[4] += task->data[5]; + obj_id_set_rotscale(task->data[0], 0x100, 0x100, task->data[4]); + sub_8078F9C(task->data[0]); + task->data[3]--; + } + else + { + task->data[3] = 8; + task->data[4] = gSprites[task->data[0]].pos2.x; + task->data[5] = (task->data[1] == 0) ? 0x2 : -0x2; + task->data[6] = 1; + task->data[2]++; + } + break; + case 2: + if (task->data[3]) + { + + if (task->data[6]) + { + task->data[6]--; + } + else if (task->data[3] & 1) + { + gSprites[task->data[0]].pos2.x = task->data[4] + task->data[5]; + task->data[6] = 1; + task->data[3]--; + } + else + { + gSprites[task->data[0]].pos2.x = task->data[4] - task->data[5]; + task->data[6] = 1; + task->data[3]--; + } + } + else + { + gSprites[task->data[0]].pos2.x = task->data[4]; + task->data[3] = 12; + task->data[2]++; + } + break; + case 3: + if (task->data[3]) + task->data[3]--; + else + { + task->data[3] = 3; + task->data[4] = gSprites[task->data[0]].pos2.x; + task->data[5] = (task->data[1]) ? 8 : -8; + task->data[2]++; + } + break; + case 4: + if (task->data[3]) + { + task->data[4] += task->data[5]; + gSprites[task->data[0]].pos2.x = task->data[4]; + task->data[3]--; + } + else + DestroyAnimVisualTask(taskId); + break; + } +} */ -- cgit v1.2.3 From ed37dbec0e603f775c579fc092125f1b3df2b73f Mon Sep 17 00:00:00 2001 From: "U-Maria-PC\\Maria" Date: Thu, 17 Aug 2017 17:37:40 -0400 Subject: decompiled up to sub_80CDD20 --- src/battle_anim_80CA710.c | 602 +++++++++++++--------------------------------- 1 file changed, 172 insertions(+), 430 deletions(-) (limited to 'src') diff --git a/src/battle_anim_80CA710.c b/src/battle_anim_80CA710.c index b7a45e37c..b037fd347 100755 --- a/src/battle_anim_80CA710.c +++ b/src/battle_anim_80CA710.c @@ -69,6 +69,7 @@ void sub_80CD8F8(struct Sprite* sprite); void sub_80CD91C(struct Sprite* sprite); void sub_80CD9B8(struct Sprite* sprite); void sub_80CD9D4(struct Sprite* sprite); +void sub_80CDEC0(struct Sprite* sprite); s16 sub_80CC338(struct Sprite* sprite); @@ -531,127 +532,36 @@ void sub_80CAFD0(struct Sprite* sprite) sprite->callback = sub_80CB09C; } -#ifdef NONMATCHING void sub_80CB09C(struct Sprite* sprite) { - s16 c = 0; + bool8 c = FALSE; s16 a = sprite->data0; s16 b = sprite->data7; + s16 r0; + sprite->data0 = 1; sub_8078718(sprite); + r0 = sprite->data7; sprite->data0 = a; - if (b > 0xC8 && sprite->data7 <= 0x37 && sprite->oam.affineParam == 0) - sprite->oam.affineParam++; + if (b > 0xC8 && r0 <= 0x37 && sprite->oam.affineParam == 0) + sprite->oam.affineParam++; if (sprite->oam.affineParam != 0 && sprite->data0 != 0) { sprite->invisible ^= 1; sprite->oam.affineParam++; - if(sprite->oam.affineParam == 0x1E) - { - c = 1; - } - } - if((sprite->pos1.x + sprite->pos2.x + 16) <= 0x110 && (sprite->pos1.y + sprite->pos2.y) <= 0xA0 && (sprite->pos1.y + sprite->pos2.y) < -16) - { - c = 1; + if (sprite->oam.affineParam == 0x1E) + c = TRUE; } - if (!c) move_anim_8072740(sprite); -} -#else -__attribute__((naked)) -void sub_80CB09C(struct Sprite* sprite) -{ - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - adds r6, r0, 0\n\ - movs r7, 0\n\ - ldrh r5, [r6, 0x2E]\n\ - ldrh r4, [r6, 0x3C]\n\ - movs r0, 0x1\n\ - strh r0, [r6, 0x2E]\n\ - adds r0, r6, 0\n\ - bl sub_8078718\n\ - ldrh r0, [r6, 0x3C]\n\ - strh r5, [r6, 0x2E]\n\ - lsls r4, 16\n\ - asrs r4, 16\n\ - cmp r4, 0xC8\n\ - ble _080CB0CE\n\ - lsls r0, 16\n\ - asrs r0, 16\n\ - cmp r0, 0x37\n\ - bgt _080CB0CE\n\ - ldrh r0, [r6, 0x6]\n\ - cmp r0, 0\n\ - bne _080CB0D4\n\ - adds r0, 0x1\n\ - strh r0, [r6, 0x6]\n\ -_080CB0CE:\n\ - ldrh r0, [r6, 0x6]\n\ - cmp r0, 0\n\ - beq _080CB106\n\ -_080CB0D4:\n\ - movs r1, 0x2E\n\ - ldrsh r0, [r6, r1]\n\ - cmp r0, 0\n\ - beq _080CB106\n\ - adds r3, r6, 0\n\ - adds r3, 0x3E\n\ - ldrb r2, [r3]\n\ - lsls r0, r2, 29\n\ - lsrs r0, 31\n\ - movs r1, 0x1\n\ - eors r1, r0\n\ - lsls r1, 2\n\ - movs r0, 0x5\n\ - negs r0, r0\n\ - ands r0, r2\n\ - orrs r0, r1\n\ - strb r0, [r3]\n\ - ldrh r0, [r6, 0x6]\n\ - adds r0, 0x1\n\ - strh r0, [r6, 0x6]\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - cmp r0, 0x1E\n\ - bne _080CB106\n\ - movs r7, 0x1\n\ -_080CB106:\n\ - movs r2, 0x20\n\ - ldrsh r0, [r6, r2]\n\ - movs r2, 0x24\n\ - ldrsh r1, [r6, r2]\n\ - adds r0, r1\n\ - adds r0, 0x10\n\ - movs r1, 0x88\n\ - lsls r1, 1\n\ - cmp r0, r1\n\ - bhi _080CB130\n\ - movs r0, 0x22\n\ - ldrsh r1, [r6, r0]\n\ - movs r2, 0x26\n\ - ldrsh r0, [r6, r2]\n\ - adds r1, r0\n\ - cmp r1, 0xA0\n\ - bgt _080CB130\n\ - movs r0, 0x10\n\ - negs r0, r0\n\ - cmp r1, r0\n\ - bge _080CB132\n\ -_080CB130:\n\ - movs r7, 0x1\n\ -_080CB132:\n\ - cmp r7, 0\n\ - beq _080CB13C\n\ - adds r0, r6, 0\n\ - bl move_anim_8072740\n\ -_080CB13C:\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .syntax divided\n"); + + if (sprite->pos1.x + sprite->pos2.x > 0x100 + || sprite->pos1.x + sprite->pos2.x < -16 + || sprite->pos1.y + sprite->pos2.y > 0xA0 + || sprite->pos1.y + sprite->pos2.y < -16) + c = TRUE; + + if (c) + move_anim_8072740(sprite); } -#endif void sub_80CB144(struct Sprite* sprite) { @@ -785,110 +695,29 @@ void sub_80CB3A8(u8 taskId) } } -#ifdef NONMATCHING void sub_80CB438(u8 taskId) { - if((u16)gBattleAnimArgs[7] == 0xFFFF) + if ((u16)gBattleAnimArgs[7] == 0xFFFF) { - if(!gTasks[taskId].data[0]) + if (gTasks[taskId].data[0] == 0) { u8 spriteId = obj_id_for_side_relative_to_move(1); sub_8078F40(spriteId); gSprites[spriteId].pos2.x = 0; gSprites[spriteId].pos2.y = 0; gTasks[taskId].data[0]++; - } - else - { - gTasks[taskId].data[0]++; - + return; } } - else if(gTasks[taskId].data[0]) + else { - gTasks[taskId].data[0]++; + if (gTasks[taskId].data[0] == 0) + return; } - if(gTasks[taskId].data[0] == 3) DestroyAnimVisualTask(taskId); -} -#else -__attribute__((naked)) -void sub_80CB438(u8 taskId) -{ - asm(".syntax unified\n\ - push {r4-r6,lr}\n\ - lsls r0, 24\n\ - lsrs r3, r0, 24\n\ - ldr r0, _080CB484 @ =gBattleAnimArgs\n\ - ldrh r1, [r0, 0xE]\n\ - ldr r0, _080CB488 @ =0x0000ffff\n\ - cmp r1, r0\n\ - bne _080CB494\n\ - ldr r0, _080CB48C @ =gTasks\n\ - lsls r2, r3, 2\n\ - adds r1, r2, r3\n\ - lsls r1, 3\n\ - adds r6, r1, r0\n\ - movs r1, 0x8\n\ - ldrsh r5, [r6, r1]\n\ - adds r4, r0, 0\n\ - cmp r5, 0\n\ - bne _080CB4A8\n\ - movs r0, 0x1\n\ - bl obj_id_for_side_relative_to_move\n\ - adds r4, r0, 0\n\ - lsls r4, 24\n\ - lsrs r4, 24\n\ - adds r0, r4, 0\n\ - bl sub_8078F40\n\ - ldr r1, _080CB490 @ =gSprites\n\ - lsls r0, r4, 4\n\ - adds r0, r4\n\ - lsls r0, 2\n\ - adds r0, r1\n\ - strh r5, [r0, 0x24]\n\ - strh r5, [r0, 0x26]\n\ - ldrh r0, [r6, 0x8]\n\ - adds r0, 0x1\n\ - strh r0, [r6, 0x8]\n\ - b _080CB4C2\n\ - .align 2, 0\n\ -_080CB484: .4byte gBattleAnimArgs\n\ -_080CB488: .4byte 0x0000ffff\n\ -_080CB48C: .4byte gTasks\n\ -_080CB490: .4byte gSprites\n\ -_080CB494:\n\ - ldr r1, _080CB4C8 @ =gTasks\n\ - lsls r2, r3, 2\n\ - adds r0, r2, r3\n\ - lsls r0, 3\n\ - adds r0, r1\n\ - movs r4, 0x8\n\ - ldrsh r0, [r0, r4]\n\ - adds r4, r1, 0\n\ - cmp r0, 0\n\ - beq _080CB4C2\n\ -_080CB4A8:\n\ - adds r1, r2, r3\n\ - lsls r1, 3\n\ - adds r1, r4\n\ - ldrh r0, [r1, 0x8]\n\ - adds r0, 0x1\n\ - strh r0, [r1, 0x8]\n\ - lsls r0, 16\n\ - asrs r0, 16\n\ - cmp r0, 0x3\n\ - bne _080CB4C2\n\ - adds r0, r3, 0\n\ - bl DestroyAnimVisualTask\n\ -_080CB4C2:\n\ - pop {r4-r6}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_080CB4C8: .4byte gTasks\n\ - .syntax divided\n"); + gTasks[taskId].data[0]++; + if (gTasks[taskId].data[0] == 3) + DestroyAnimVisualTask(taskId); } -#endif void sub_80CB4CC(struct Sprite* sprite) { @@ -944,17 +773,17 @@ void sub_80CB59C(struct Sprite* sprite) sprite->callback = sub_80CB710; } -#ifdef NONMATCHING -void sub_80CB620(struct Sprite* sprite) +void sub_80CB620(struct Sprite *sprite) { - u8 p1 = sub_8077ABC(gBattleAnimPlayerMonIndex, 2); - u8 p2 = sub_8077ABC(gBattleAnimPlayerMonIndex, 3); - u8 e1 = sub_8077ABC(gBattleAnimEnemyMonIndex, 2); - u8 e2 = sub_8077ABC(gBattleAnimEnemyMonIndex, 3); + s16 p1 = sub_8077ABC(gBattleAnimPlayerMonIndex, 2); + s16 p2 = sub_8077ABC(gBattleAnimPlayerMonIndex, 3); + s16 e1 = sub_8077ABC(gBattleAnimEnemyMonIndex, 2); + s16 e2 = sub_8077ABC(gBattleAnimEnemyMonIndex, 3); + e1 -= p1; e2 -= p2; - sprite->pos1.x = p1 + ((gBattleAnimArgs[0] * e1) / 100); - sprite->pos1.y = p2 + ((gBattleAnimArgs[0] * e2) / 100); + sprite->pos1.x = p1 + e1 * gBattleAnimArgs[0] / 100; + sprite->pos1.y = p2 + e2 * gBattleAnimArgs[0] / 100; sprite->pos2.x = gBattleAnimArgs[1]; sprite->pos2.y = gBattleAnimArgs[2]; sprite->subpriority = gBattleAnimArgs[3] + 30; @@ -966,122 +795,6 @@ void sub_80CB620(struct Sprite* sprite) gUnknown_03000728[2] = e1; gUnknown_03000728[3] = e2; } -#else -__attribute__((naked)) -void sub_80CB620(struct Sprite* sprite) -{ - asm(".syntax unified\n\ - push {r4-r6,lr}\n\ - mov r6, r10\n\ - mov r5, r9\n\ - mov r4, r8\n\ - push {r4-r6}\n\ - sub sp, 0x4\n\ - mov r9, r0\n\ - ldr r4, _080CB6FC @ =gBattleAnimPlayerMonIndex\n\ - ldrb r0, [r4]\n\ - movs r1, 0x2\n\ - bl sub_8077ABC\n\ - adds r5, r0, 0\n\ - lsls r5, 24\n\ - lsrs r5, 24\n\ - ldrb r0, [r4]\n\ - movs r1, 0x3\n\ - bl sub_8077ABC\n\ - mov r8, r0\n\ - mov r0, r8\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - mov r8, r0\n\ - ldr r6, _080CB700 @ =gBattleAnimEnemyMonIndex\n\ - ldrb r0, [r6]\n\ - movs r1, 0x2\n\ - bl sub_8077ABC\n\ - adds r4, r0, 0\n\ - lsls r4, 24\n\ - lsrs r4, 24\n\ - ldrb r0, [r6]\n\ - movs r1, 0x3\n\ - bl sub_8077ABC\n\ - adds r2, r0, 0\n\ - lsls r2, 24\n\ - subs r4, r5\n\ - lsls r4, 16\n\ - lsrs r2, 24\n\ - mov r1, r8\n\ - subs r2, r1\n\ - lsls r2, 16\n\ - lsrs r2, 16\n\ - lsrs r3, r4, 16\n\ - mov r10, r3\n\ - asrs r4, 16\n\ - ldr r6, _080CB704 @ =gBattleAnimArgs\n\ - movs r1, 0\n\ - ldrsh r0, [r6, r1]\n\ - muls r0, r4\n\ - movs r1, 0x64\n\ - str r2, [sp]\n\ - bl __divsi3\n\ - adds r5, r0\n\ - mov r3, r9\n\ - strh r5, [r3, 0x20]\n\ - ldr r2, [sp]\n\ - lsls r0, r2, 16\n\ - asrs r0, 16\n\ - movs r3, 0\n\ - ldrsh r1, [r6, r3]\n\ - muls r0, r1\n\ - movs r1, 0x64\n\ - bl __divsi3\n\ - add r8, r0\n\ - mov r1, r8\n\ - mov r0, r9\n\ - strh r1, [r0, 0x22]\n\ - ldrh r0, [r6, 0x2]\n\ - mov r3, r9\n\ - strh r0, [r3, 0x24]\n\ - ldrh r0, [r6, 0x4]\n\ - strh r0, [r3, 0x26]\n\ - ldrb r0, [r6, 0x6]\n\ - adds r0, 0x1E\n\ - mov r1, r9\n\ - adds r1, 0x43\n\ - strb r0, [r1]\n\ - ldrb r1, [r6, 0x8]\n\ - mov r0, r9\n\ - bl StartSpriteAnim\n\ - ldrh r0, [r6, 0xA]\n\ - mov r1, r9\n\ - strh r0, [r1, 0x32]\n\ - ldr r0, _080CB708 @ =sub_80CB710\n\ - str r0, [r1, 0x1C]\n\ - ldr r1, _080CB70C @ =gUnknown_03000728\n\ - mov r3, r9\n\ - ldrh r0, [r3, 0x20]\n\ - strh r0, [r1]\n\ - ldrh r0, [r3, 0x22]\n\ - strh r0, [r1, 0x2]\n\ - mov r0, r10\n\ - strh r0, [r1, 0x4]\n\ - ldr r2, [sp]\n\ - strh r2, [r1, 0x6]\n\ - add sp, 0x4\n\ - pop {r3-r5}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - mov r10, r5\n\ - pop {r4-r6}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_080CB6FC: .4byte gBattleAnimPlayerMonIndex\n\ -_080CB700: .4byte gBattleAnimEnemyMonIndex\n\ -_080CB704: .4byte gBattleAnimArgs\n\ -_080CB708: .4byte sub_80CB710\n\ -_080CB70C: .4byte gUnknown_03000728\n\ - .syntax divided\n"); -} -#endif void sub_80CB710(struct Sprite* sprite) { @@ -1121,29 +834,30 @@ void sub_80CB7EC(struct Sprite* sprite, s16 c) #ifdef NONMATCHING bool8 sub_80CB814(struct Sprite* sprite) { - s32 a = sprite->data5 >> 8; - s16 d = sprite->data5; - s16 b = sprite->data6 >> 8; - s16 e = sprite->data6; - s16 c = sprite->data7 >> 8; - s16 f = c & 0xFF; - if(!b) - { - b = ~32; - } - else if(b == 255) - { - b = 0x110; - } - sprite->pos1.x = ((b - a) * f / a ) + (((e - d) * f) / a); - sprite->pos2.y = d; - f++; - if(f != a) - { - sprite->data7 = (f << 8) | c; - return FALSE; - } - return TRUE; + s32 r10 = (u8)(sprite->data5 >> 8); + s32 r9 = (u8)sprite->data5; + s32 r2 = (u8)(sprite->data6 >> 8); + s16 r4 = (u8)sprite->data6; + u16 r6 = sprite->data7 >> 8; + s16 r3 = sprite->data7 & 0xFF; + s32 var1; + s32 var2; + + if (r2 == 0) + r2 = -32; + else if (r2 == 255) + r2 = 0x110; + + r4 -= r9; + var1 = (r2 - r10) * r3 / r6; + var2 = r4 * r3 / r6; + sprite->pos1.x = var1 + r10; + sprite->pos2.y = var2 + r9; + r3++; + if ((u16)r3 == r6) + return TRUE; + sprite->data7 = r3 | (r6 << 8); + return FALSE; } #else __attribute__((naked)) @@ -2195,7 +1909,6 @@ void sub_80CC474(struct Sprite* sprite) sprite->callback = sub_80CC580; } -// why did you make me use gotos WHY void sub_80CC580(struct Sprite* sprite) { int a = sprite->data7; @@ -2205,18 +1918,15 @@ void sub_80CC580(struct Sprite* sprite) sprite->data0 = (sprite->data3 * a) & 0xFF; if (sprite->data4 == 0) { - if (sprite->pos2.x + sprite->pos1.x <= 0xF7) return; - else goto END; + if (sprite->pos2.x + sprite->pos1.x <= 0xF7) + return; } - else if (sprite->data4 != 0 && sprite->pos2.x + sprite->pos1.x <= -16) + else { - goto END; + if (sprite->pos2.x + sprite->pos1.x > -16) + return; } - else - return; - - END: - move_anim_8074EE0(sprite); + move_anim_8074EE0(sprite); } void sub_80CC5F8(u8 taskId) @@ -3275,92 +2985,124 @@ void sub_80CDAC8(u8 taskId) } } -/* void sub_80CDB60(u8 taskId) +void sub_80CDB60(u8 taskId) { - struct Task* task = &gTasks[taskId]; + struct Task *task = &gTasks[taskId]; switch(task->data[2]) { - case 0: - if(task->data[3]) - { - task->data[4] += task->data[5]; - gSprites[task->data[0]].pos2.x = task->data[4]; - task->data[3]--; - } - else - { - task->data[3] = 8; - task->data[4] = 0; - task->data[5] = (task->data[1] == 0) ? -0xC0 : 0xC0; - sub_8078E70(task->data[0], 0); - task->data[2]++; - } - break; - case 1: - if (task->data[3]) + case 0: + if(task->data[3]) + { + task->data[4] += task->data[5]; + gSprites[task->data[0]].pos2.x = task->data[4]; + task->data[3]--; + } + else + { + task->data[3] = 8; + task->data[4] = 0; + task->data[5] = (task->data[1] == 0) ? -0xC0 : 0xC0; + sub_8078E70(task->data[0], 0); + task->data[2]++; + } + break; + case 1: + if (task->data[3]) + { + task->data[4] += task->data[5]; + obj_id_set_rotscale(task->data[0], 0x100, 0x100, task->data[4]); + sub_8078F9C(task->data[0]); + task->data[3]--; + } + else + { + task->data[3] = 8; + task->data[4] = gSprites[task->data[0]].pos2.x; + task->data[5] = (task->data[1] == 0) ? 0x2 : -0x2; + task->data[6] = 1; + task->data[2]++; + } + break; + case 2: + if (task->data[3]) + { + if (task->data[6]) { - task->data[4] += task->data[5]; - obj_id_set_rotscale(task->data[0], 0x100, 0x100, task->data[4]); - sub_8078F9C(task->data[0]); - task->data[3]--; + task->data[6]--; } else { - task->data[3] = 8; - task->data[4] = gSprites[task->data[0]].pos2.x; - task->data[5] = (task->data[1] == 0) ? 0x2 : -0x2; - task->data[6] = 1; - task->data[2]++; - } - break; - case 2: - if (task->data[3]) - { - - if (task->data[6]) - { - task->data[6]--; - } - else if (task->data[3] & 1) - { + if (task->data[3] & 1) gSprites[task->data[0]].pos2.x = task->data[4] + task->data[5]; - task->data[6] = 1; - task->data[3]--; - } else - { gSprites[task->data[0]].pos2.x = task->data[4] - task->data[5]; - task->data[6] = 1; - task->data[3]--; - } - } - else - { - gSprites[task->data[0]].pos2.x = task->data[4]; - task->data[3] = 12; - task->data[2]++; - } - break; - case 3: - if (task->data[3]) - task->data[3]--; - else - { - task->data[3] = 3; - task->data[4] = gSprites[task->data[0]].pos2.x; - task->data[5] = (task->data[1]) ? 8 : -8; - task->data[2]++; - } - break; - case 4: - if (task->data[3]) - { - task->data[4] += task->data[5]; - gSprites[task->data[0]].pos2.x = task->data[4]; + task->data[6] = 1; task->data[3]--; } - else - DestroyAnimVisualTask(taskId); - break; + } + else + { + gSprites[task->data[0]].pos2.x = task->data[4]; + task->data[3] = 12; + task->data[2]++; + } + break; + case 3: + if (task->data[3]) + { + task->data[3]--; + } + else + { + task->data[3] = 3; + task->data[4] = gSprites[task->data[0]].pos2.x; + task->data[5] = (task->data[1] == 0) ? 8 : -8; + task->data[2]++; + } + break; + case 4: + if (task->data[3]) + { + task->data[4] += task->data[5]; + gSprites[task->data[0]].pos2.x = task->data[4]; + task->data[3]--; + } + else + { + DestroyAnimVisualTask(taskId); + } + break; } +} + +void sub_80CDD20(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + if (task->data[3]) + { + task->data[4] -= task->data[5]; + obj_id_set_rotscale(task->data[0], 0x100, 0x100, task->data[4]); + sub_8078F9C(task->data[0]); + task->data[3]--; + } + else + { + sub_8078F40(task->data[0]); + DestroyAnimVisualTask(taskId); + } +} + +/* void sub_80CDD74(struct Sprite* sprite) +{ + u8 bank; + if (!gBattleAnimArgs[0]) + bank = gBattleAnimPlayerMonIndex; + else + bank = gBattleAnimEnemyMonIndex; + sprite->pos1.x = sub_8077ABC(bank, 2) + gBattleAnimArgs[1]; + sprite->pos1.y = sub_8077ABC(bank, 3) + gBattleAnimArgs[2]; + sprite->data0 = 0; + sprite->data1 = 0; + oamt_set_x3A_32(sprite, sub_80CDEC0); + sprite->callback = sub_8078600; } */ -- cgit v1.2.3 From 68f6699736e435905845502ab12f849171d48ef3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BAl=20Pe=C3=B1acoba?= Date: Fri, 18 Aug 2017 13:08:16 +0200 Subject: sub_80ED858 unfinished, sub_80EDB88 --- src/pokenav_before.c | 565 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 565 insertions(+) (limited to 'src') diff --git a/src/pokenav_before.c b/src/pokenav_before.c index 64e4aa278..f89f64656 100644 --- a/src/pokenav_before.c +++ b/src/pokenav_before.c @@ -1302,3 +1302,568 @@ void sub_80ED620() { } } + +#if 0 + +void sub_80F4F78(); +void sub_80F0174(u32); +bool8 sub_80F4FB4(); +void sub_80F3668(); +bool8 sub_80F7500(); +void sub_80F3698(); +bool8 sub_80F5038(); +void sub_80F2F48(); +void sub_80F3CE8(); +void sub_80F3614(); +void sub_80F357C(); + +void sub_80ED858() { + u8 var1; + switch (ewram0.var304) { + case 0: + sub_80F4F78(); + sub_80F5B38(); + ewram0.var304 = 0x1; + break; + case 1: + if (sub_80F5B50()) return; + ewram0.var304 = 0x2; + break; + case 2: + sub_80F0174(0x1); + ewram0.var304 = 0x3; + break; + case 3: + if (sub_80F4FB4()) return; + sub_80F3C94(); + sub_80F3D00(); + ewram0.var304 = 0x4; + break; + case 4: + break; +// if (!(gMain.heldKeys & 0x40) && !(gMain.heldKeys & 0x80) && (gMain.newKeys & B_BUTTON)) { +// PlaySE(0x5); +// sub_80F4FDC(); +// move_anim_execute(); +// ewram0.var304 = 0x9; +// } +// else if (!ewram0.var87CB && !(gMain.heldKeys & 0x80) && (gMain.newKeys & B_BUTTON)) { +// PlaySE(0x5); +// sub_80F4FDC(); +// move_anim_execute(); +// ewram0.var304 = 0x9; +// } +// else if (ewram0.var87DC) { +// if (gMain.heldKeys & 0x80) +// +// } + case 5: + if (gpu_sync_bg_show()) return; + sub_80F3D00(); + ewram0.var304 = 0x6; + break; + case 6: + if (sub_8055870()) return; + ewram0.var304 = 0x4; + break; + case 7: + sub_80EEFBC(0x3); + sub_80F3668(); + ewram0.var304 = 0x8; + break; + case 8: + if (sub_80F7500()) return; + sub_80EEFBC(0x2); + sub_80F3698(); + ewram0.var304 = 0x4; + break; + case 9: + if (!(var1 = sub_80F5038())) { + sub_80F0174(0); + sub_80F2F48(); + BeginNormalPaletteFade(ewram0.var308, -1, 0x0, 0x10, var1); + ewram0.var304 = 0xB; + } + break; + case 0xA: + if (gPaletteFade.active) return; + sub_80F3CE8(); + sub_80F5BDC(); + if (!ewram0.var76aa) { + sub_80F357C(); + sub_80F2D6C(0x1); + sub_80F2D6C(0x6); + sub_80EBDBC(&sub_80ECA10); + } + else { + sub_80F3614(); + sub_80EBDBC(&sub_80ED3D0); + } + break; + } + +} +#else +__attribute__((naked)) +void sub_80ED858() { + asm_unified("push {r4,r5,lr}\n\ + sub sp, 0x4\n\ + ldr r1, _080ED878 @ =0x02000000\n\ + movs r2, 0xC1\n\ + lsls r2, 2\n\ + adds r0, r1, r2\n\ + ldrh r0, [r0]\n\ + adds r5, r1, 0\n\ + cmp r0, 0xB\n\ + bls _080ED86E\n\ + b _080EDB7A\n\ +_080ED86E:\n\ + lsls r0, 2\n\ + ldr r1, _080ED87C @ =_080ED880\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + mov pc, r0\n\ + .align 2, 0\n\ +_080ED878: .4byte 0x02000000\n\ +_080ED87C: .4byte _080ED880\n\ + .align 2, 0\n\ +_080ED880:\n\ + .4byte _080ED8B0\n\ + .4byte _080ED8CC\n\ + .4byte _080ED8EC\n\ + .4byte _080ED904\n\ + .4byte _080ED91A\n\ + .4byte _080EDA68\n\ + .4byte _080EDA8C\n\ + .4byte _080EDAA4\n\ + .4byte _080EDAC0\n\ + .4byte _080EDAE8\n\ + .4byte _080EDB7A\n\ + .4byte _080EDB28\n\ +_080ED8B0:\n\ + bl sub_80F4F78\n\ + bl sub_80F5B38\n\ + ldr r0, _080ED8C8 @ =0x02000000\n\ + movs r4, 0xC1\n\ + lsls r4, 2\n\ + adds r0, r4\n\ + movs r1, 0x1\n\ + strh r1, [r0]\n\ + b _080EDB7A\n\ + .align 2, 0\n\ +_080ED8C8: .4byte 0x02000000\n\ +_080ED8CC:\n\ + bl sub_80F5B50\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _080ED8D8\n\ + b _080EDB7A\n\ +_080ED8D8:\n\ + ldr r0, _080ED8E8 @ =0x02000000\n\ + movs r1, 0xC1\n\ + lsls r1, 2\n\ + adds r0, r1\n\ + movs r1, 0x2\n\ + strh r1, [r0]\n\ + b _080EDB7A\n\ + .align 2, 0\n\ +_080ED8E8: .4byte 0x02000000\n\ +_080ED8EC:\n\ + movs r0, 0x1\n\ + bl sub_80F0174\n\ + ldr r0, _080ED900 @ =0x02000000\n\ + movs r2, 0xC1\n\ + lsls r2, 2\n\ + adds r0, r2\n\ + movs r1, 0x3\n\ + strh r1, [r0]\n\ + b _080EDB7A\n\ + .align 2, 0\n\ +_080ED900: .4byte 0x02000000\n\ +_080ED904:\n\ + bl sub_80F4FB4\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _080ED910\n\ + b _080EDB7A\n\ +_080ED910:\n\ + bl sub_80F3C94\n\ + bl sub_80F3D00\n\ + b _080EDAD4\n\ +_080ED91A:\n\ + ldr r2, _080ED960 @ =gMain\n\ + ldrh r1, [r2, 0x2C]\n\ + movs r0, 0x40\n\ + ands r0, r1\n\ + adds r3, r2, 0\n\ + cmp r0, 0\n\ + beq _080ED970\n\ + ldr r1, _080ED964 @ =0x000087cb\n\ + adds r0, r5, r1\n\ + ldrb r0, [r0]\n\ + cmp r0, 0\n\ + beq _080ED970\n\ + ldr r2, _080ED968 @ =0x000076aa\n\ + adds r0, r5, r2\n\ + ldrb r0, [r0]\n\ + cmp r0, 0\n\ + beq _080ED948\n\ + ldr r4, _080ED96C @ =0x000087dc\n\ + adds r0, r5, r4\n\ + movs r1, 0\n\ + ldrsh r0, [r0, r1]\n\ + cmp r0, 0\n\ + beq _080ED970\n\ +_080ED948:\n\ + movs r0, 0x5\n\ + bl PlaySE\n\ + movs r0, 0x1\n\ + bl sub_80F5060\n\ + bl move_anim_execute\n\ + movs r2, 0xC1\n\ + lsls r2, 2\n\ + adds r1, r5, r2\n\ + b _080ED9B8\n\ + .align 2, 0\n\ +_080ED960: .4byte gMain\n\ +_080ED964: .4byte 0x000087cb\n\ +_080ED968: .4byte 0x000076aa\n\ +_080ED96C: .4byte 0x000087dc\n\ +_080ED970:\n\ + ldrh r1, [r3, 0x2C]\n\ + movs r0, 0x80\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _080ED9CC\n\ + ldr r4, _080ED9C0 @ =0x000087cb\n\ + adds r0, r5, r4\n\ + ldrb r0, [r0]\n\ + cmp r0, 0\n\ + beq _080ED9CC\n\ + ldr r1, _080ED9C4 @ =0x000076aa\n\ + adds r0, r5, r1\n\ + ldrb r0, [r0]\n\ + cmp r0, 0\n\ + beq _080ED9A2\n\ + ldr r2, _080ED9C8 @ =0x000087dc\n\ + adds r0, r5, r2\n\ + subs r4, 0x57\n\ + adds r1, r5, r4\n\ + movs r4, 0\n\ + ldrsh r2, [r0, r4]\n\ + movs r4, 0\n\ + ldrsh r0, [r1, r4]\n\ + cmp r2, r0\n\ + bge _080ED9CC\n\ +_080ED9A2:\n\ + movs r0, 0x5\n\ + bl PlaySE\n\ + movs r0, 0\n\ + bl sub_80F5060\n\ + bl move_anim_execute\n\ + movs r0, 0xC1\n\ + lsls r0, 2\n\ + adds r1, r5, r0\n\ +_080ED9B8:\n\ + movs r0, 0x5\n\ + strh r0, [r1]\n\ + b _080EDB7A\n\ + .align 2, 0\n\ +_080ED9C0: .4byte 0x000087cb\n\ +_080ED9C4: .4byte 0x000076aa\n\ +_080ED9C8: .4byte 0x000087dc\n\ +_080ED9CC:\n\ + ldrh r2, [r3, 0x2E]\n\ + movs r0, 0x2\n\ + ands r0, r2\n\ + cmp r0, 0\n\ + beq _080ED9F8\n\ + movs r0, 0x5\n\ + bl PlaySE\n\ + bl sub_80F4FDC\n\ + bl move_anim_execute\n\ + ldr r0, _080ED9F4 @ =0x02000000\n\ + movs r1, 0xC1\n\ + lsls r1, 2\n\ + adds r0, r1\n\ + movs r1, 0x9\n\ + strh r1, [r0]\n\ + b _080EDB7A\n\ + .align 2, 0\n\ +_080ED9F4: .4byte 0x02000000\n\ +_080ED9F8:\n\ + movs r0, 0x1\n\ + ands r0, r2\n\ + cmp r0, 0\n\ + bne _080EDA02\n\ + b _080EDB7A\n\ +_080EDA02:\n\ + adds r4, r5, 0\n\ + ldr r2, _080EDA38 @ =0x000076aa\n\ + adds r0, r4, r2\n\ + ldrb r0, [r0]\n\ + cmp r0, 0\n\ + bne _080EDA44\n\ + ldr r1, _080EDA3C @ =0x000087dc\n\ + adds r0, r4, r1\n\ + movs r2, 0\n\ + ldrsh r1, [r0, r2]\n\ + ldr r2, _080EDA40 @ =0x000087da\n\ + adds r0, r4, r2\n\ + movs r2, 0\n\ + ldrsh r0, [r0, r2]\n\ + subs r0, 0x1\n\ + cmp r1, r0\n\ + beq _080EDA26\n\ + b _080EDB7A\n\ +_080EDA26:\n\ + movs r0, 0x5\n\ + bl PlaySE\n\ + movs r0, 0xC1\n\ + lsls r0, 2\n\ + adds r1, r4, r0\n\ + movs r0, 0x9\n\ + strh r0, [r1]\n\ + b _080EDB7A\n\ + .align 2, 0\n\ +_080EDA38: .4byte 0x000076aa\n\ +_080EDA3C: .4byte 0x000087dc\n\ +_080EDA40: .4byte 0x000087da\n\ +_080EDA44:\n\ + ldr r1, _080EDA64 @ =0x00006dac\n\ + adds r0, r5, r1\n\ + ldrb r0, [r0]\n\ + cmp r0, 0\n\ + beq _080EDA50\n\ + b _080EDB7A\n\ +_080EDA50:\n\ + movs r0, 0x5\n\ + bl PlaySE\n\ + movs r2, 0xC1\n\ + lsls r2, 2\n\ + adds r1, r5, r2\n\ + movs r0, 0x7\n\ + strh r0, [r1]\n\ + b _080EDB7A\n\ + .align 2, 0\n\ +_080EDA64: .4byte 0x00006dac\n\ +_080EDA68:\n\ + bl gpu_sync_bg_show\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _080EDA74\n\ + b _080EDB7A\n\ +_080EDA74:\n\ + bl sub_80F3D00\n\ + ldr r0, _080EDA88 @ =0x02000000\n\ + movs r4, 0xC1\n\ + lsls r4, 2\n\ + adds r0, r4\n\ + movs r1, 0x6\n\ + strh r1, [r0]\n\ + b _080EDB7A\n\ + .align 2, 0\n\ +_080EDA88: .4byte 0x02000000\n\ +_080EDA8C:\n\ + bl sub_8055870\n\ + cmp r0, 0\n\ + bne _080EDB7A\n\ + ldr r0, _080EDAA0 @ =0x02000000\n\ + movs r1, 0xC1\n\ + lsls r1, 2\n\ + adds r0, r1\n\ + b _080EDADC\n\ + .align 2, 0\n\ +_080EDAA0: .4byte 0x02000000\n\ +_080EDAA4:\n\ + movs r0, 0x3\n\ + bl sub_80EEFBC\n\ + bl sub_80F3668\n\ + ldr r0, _080EDABC @ =0x02000000\n\ + movs r2, 0xC1\n\ + lsls r2, 2\n\ + adds r0, r2\n\ + movs r1, 0x8\n\ + strh r1, [r0]\n\ + b _080EDB7A\n\ + .align 2, 0\n\ +_080EDABC: .4byte 0x02000000\n\ +_080EDAC0:\n\ + bl sub_80F7500\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + bne _080EDB7A\n\ + movs r0, 0x2\n\ + bl sub_80EEFBC\n\ + bl sub_80F3698\n\ +_080EDAD4:\n\ + ldr r0, _080EDAE4 @ =0x02000000\n\ + movs r4, 0xC1\n\ + lsls r4, 2\n\ + adds r0, r4\n\ +_080EDADC:\n\ + movs r1, 0x4\n\ + strh r1, [r0]\n\ + b _080EDB7A\n\ + .align 2, 0\n\ +_080EDAE4: .4byte 0x02000000\n\ +_080EDAE8:\n\ + bl sub_80F5038\n\ + lsls r0, 24\n\ + lsrs r4, r0, 24\n\ + cmp r4, 0\n\ + bne _080EDB7A\n\ + movs r0, 0\n\ + bl sub_80F0174\n\ + bl sub_80F2F48\n\ + ldr r5, _080EDB24 @ =0x02000000\n\ + movs r1, 0xC2\n\ + lsls r1, 2\n\ + adds r0, r5, r1\n\ + ldr r0, [r0]\n\ + movs r1, 0x1\n\ + negs r1, r1\n\ + str r4, [sp]\n\ + movs r2, 0\n\ + movs r3, 0x10\n\ + bl BeginNormalPaletteFade\n\ + movs r2, 0xC1\n\ + lsls r2, 2\n\ + adds r1, r5, r2\n\ + movs r0, 0xB\n\ + strh r0, [r1]\n\ + b _080EDB7A\n\ + .align 2, 0\n\ +_080EDB24: .4byte 0x02000000\n\ +_080EDB28:\n\ + ldr r0, _080EDB60 @ =gPaletteFade\n\ + ldrb r1, [r0, 0x7]\n\ + movs r0, 0x80\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _080EDB7A\n\ + bl sub_80F3CE8\n\ + bl sub_80F5BDC\n\ + ldr r0, _080EDB64 @ =0x02000000\n\ + ldr r4, _080EDB68 @ =0x000076aa\n\ + adds r0, r4\n\ + ldrb r0, [r0]\n\ + cmp r0, 0\n\ + bne _080EDB70\n\ + bl sub_80F357C\n\ + movs r0, 0x1\n\ + bl sub_80F2D6C\n\ + movs r0, 0x6\n\ + bl sub_80F2D6C\n\ + ldr r0, _080EDB6C @ =sub_80ECA10\n\ + bl sub_80EBDBC\n\ + b _080EDB7A\n\ + .align 2, 0\n\ +_080EDB60: .4byte gPaletteFade\n\ +_080EDB64: .4byte 0x02000000\n\ +_080EDB68: .4byte 0x000076aa\n\ +_080EDB6C: .4byte sub_80ECA10\n\ +_080EDB70:\n\ + bl sub_80F3614\n\ + ldr r0, _080EDB84 @ =sub_80ED3D0\n\ + bl sub_80EBDBC\n\ +_080EDB7A:\n\ + add sp, 0x4\n\ + pop {r4,r5}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_080EDB84: .4byte sub_80ED3D0\n"); +} +#endif + +void sub_80F638C(); +bool8 sub_80F63D0(); +void sub_80EDDBC(); + +void sub_80EDB88() { + u8 var1; + switch (ewram0.var304) { + case 0: + sub_80F1E84(); + sub_80F2D04(0); + ewram0.var304++; + break; + case 1: + if (sub_80F1F10()) return; + sub_80EEFBC(0x4); + ewram0.var304++; + break; + case 2: + if (!(var1 = sub_80EEF34())) { + BeginNormalPaletteFade(ewram0.var308, -1, 0x0, 0x10, var1); + ewram0.var304++; + } + break; + case 3: + if (gPaletteFade.active) return; + SetVBlankCallback(0); + sub_80EED0C(); + sub_80EF814(); + ewram0.var304++; + break; + case 4: + sub_80F2620(); + ewram0.var304++; + break; + case 5: + sub_80F638C(); + ewram0.var304++; + case 6: + if (!sub_80F63D0()) { + ewram0.var304 += 0x2; + break; + } + ewram0.var304++; + break; + case 7: + if (sub_8055870()) return; + ewram0.var304--; + break; + case 8: + if (sub_8055870()) return; + ewram0.var304++; + break; + case 9: + sub_80F0264(0x1); + ewram0.var304++; + case 0xA: + if (sub_80F02A0()) return; + ewram0.var304++; + break; + case 0xB: + sub_80F2C80(0x2); + ewram0.var304++; + case 0xC: + if (sub_80F2CBC(0x2)) return; + ewram0.var304++; + break; + case 0xD: + sub_80F3008(0x1); + ewram0.var304++; + break; + case 0xE: + if (sub_8055870()) return; + ewram0.var304++; + break; + case 0xF: + BeginNormalPaletteFade(ewram0.var308, -1, 0x10, 0, 0); + SetVBlankCallback(&sub_80EBD18); + ewram0.var304++; + break; + case 0x10: + sub_80EED2C(0x4); + ewram0.var304++; + break; + case 0x11: + if (gPaletteFade.active) return; + sub_80EBDBC(&sub_80EDDBC); + break; + } + +} -- cgit v1.2.3 From 7055b50fd73a95f6999854d433a583c2e32d9652 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BAl=20Pe=C3=B1acoba?= Date: Fri, 18 Aug 2017 16:41:47 +0200 Subject: sub_80EDDBC --- src/pokenav_before.c | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) (limited to 'src') diff --git a/src/pokenav_before.c b/src/pokenav_before.c index f89f64656..0beeda120 100644 --- a/src/pokenav_before.c +++ b/src/pokenav_before.c @@ -1865,5 +1865,45 @@ void sub_80EDB88() { sub_80EBDBC(&sub_80EDDBC); break; } +} + +void sub_80EDE70(); +void sub_80EDEE4(); +void sub_80EDDBC() { + switch (ewram0.var304) { + case 0: + switch (sub_80F5DD4()) { + case 1: + PlaySE(0x5); + ShowMapNamePopUpWindow(); + break; + case 2: + PlaySE(0x5); + ewram0.var304++; + break; + default: + if (gMain.newKeys & A_BUTTON) { + PlaySE(0x5); + sub_80EBDBC(&sub_80EDEE4); + } + else if (gMain.newKeys & B_BUTTON) { + PlaySE(0x5); + sub_80EBDBC(&sub_80EDE70); + } + break; + } + break; + case 1: + if (sub_80F0718()) return; + ShowMapNamePopUpWindow(); + sub_80F3264(); + ewram0.var304++; + break; + case 2: + if (sub_8055870()) return; + ewram0.var304 = 0; + break; + + } } -- cgit v1.2.3 From d543e1a28a781f666c59b1cb53378657084e2587 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BAl=20Pe=C3=B1acoba?= Date: Fri, 18 Aug 2017 16:56:22 +0200 Subject: sub_80EDE70 --- src/pokenav_before.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'src') diff --git a/src/pokenav_before.c b/src/pokenav_before.c index 0beeda120..09a5e8a54 100644 --- a/src/pokenav_before.c +++ b/src/pokenav_before.c @@ -1907,3 +1907,22 @@ void sub_80EDDBC() { } } + +void sub_80EDE70() { + switch (ewram0.var304) { + case 0: + BeginNormalPaletteFade(ewram0.var308, -1, 0, 0x10, 0); + ewram0.var304++; + break; + case 1: + if (gPaletteFade.active) return; + sub_80F3130(); + sub_80F2D6C(0x2); + ewram0.var304++; + break; + case 2: + sub_80EBDBC(&sub_80EC00C); + break; + } + +} -- cgit v1.2.3 From 9fa07908cb530dc8548233f42def613e6e9ca5dc Mon Sep 17 00:00:00 2001 From: "U-Maria-PC\\Maria" Date: Fri, 18 Aug 2017 19:21:08 -0400 Subject: decompiled up to sub_80CE09C --- src/battle_anim_80CA710.c | 572 +++++++++++++++++++++------------------------- 1 file changed, 258 insertions(+), 314 deletions(-) (limited to 'src') diff --git a/src/battle_anim_80CA710.c b/src/battle_anim_80CA710.c index b037fd347..77bcff3e9 100755 --- a/src/battle_anim_80CA710.c +++ b/src/battle_anim_80CA710.c @@ -69,7 +69,11 @@ void sub_80CD8F8(struct Sprite* sprite); void sub_80CD91C(struct Sprite* sprite); void sub_80CD9B8(struct Sprite* sprite); void sub_80CD9D4(struct Sprite* sprite); +void sub_80CDE78(struct Sprite* sprite); +void sub_80CDEB0(struct Sprite* sprite); void sub_80CDEC0(struct Sprite* sprite); +void sub_80CDF70(struct Sprite* sprite); +void sub_80CE000(struct Sprite* sprite); s16 sub_80CC338(struct Sprite* sprite); @@ -1168,14 +1172,14 @@ void sub_80CBB60(struct Sprite* sprite) } } -#ifdef NONMATCHING void sub_80CBBF0(struct Sprite* sprite) { int a; int b; - if(sprite->data0 == 0) + + if (sprite->data0 == 0) { - if(!IsContest()) + if (!IsContest()) { sprite->data1 = gBattleAnimArgs[1]; sprite->pos1.x = 0x78; @@ -1183,14 +1187,13 @@ void sub_80CBBF0(struct Sprite* sprite) else { a = gBattleAnimArgs[1] - 32; - b = a; - if(a < 0) - { - b += gBattleAnimArgs[1] + 0xDF; - } - sprite->data1 = b - a; + if (a < 0) + b = gBattleAnimArgs[1] + 0xDF; + else + b = a; + sprite->data1 = a - ((b >> 8) << 8); sprite->pos1.x = 0x46; - + } sprite->pos1.y = gBattleAnimArgs[0]; sprite->data2 = gBattleAnimArgs[0]; @@ -1198,103 +1201,12 @@ void sub_80CBBF0(struct Sprite* sprite) sprite->pos2.x = Cos(sprite->data1, 0x3C); sprite->pos2.y = Sin(sprite->data1, 20); sprite->callback = sub_80CBC8C; - if((sprite->data1 - 1) <= 0xBE) - { - sprite->subpriority = 30; - } + if (sprite->data1 > 0 && sprite->data1 < 0xC0) + sprite->subpriority = 31; else - { - sprite->subpriority = 28; - } + sprite->subpriority = 29; } } -#else -__attribute__((naked)) -void sub_80CBBF0(struct Sprite* sprite) -{ - asm(".syntax unified\n\ - push {r4,r5,lr}\n\ - adds r4, r0, 0\n\ - movs r1, 0x2E\n\ - ldrsh r0, [r4, r1]\n\ - cmp r0, 0\n\ - bne _080CBC84\n\ - bl IsContest\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - bne _080CBC18\n\ - ldr r0, _080CBC14 @ =gBattleAnimArgs\n\ - ldrh r1, [r0, 0x2]\n\ - strh r1, [r4, 0x30]\n\ - movs r1, 0x78\n\ - strh r1, [r4, 0x20]\n\ - adds r5, r0, 0\n\ - b _080CBC3A\n\ - .align 2, 0\n\ -_080CBC14: .4byte gBattleAnimArgs\n\ -_080CBC18:\n\ - ldr r0, _080CBC74 @ =gBattleAnimArgs\n\ - movs r1, 0x2\n\ - ldrsh r3, [r0, r1]\n\ - adds r1, r3, 0\n\ - subs r1, 0x20\n\ - adds r2, r1, 0\n\ - adds r5, r0, 0\n\ - cmp r1, 0\n\ - bge _080CBC2E\n\ - adds r2, r3, 0\n\ - adds r2, 0xDF\n\ -_080CBC2E:\n\ - asrs r0, r2, 8\n\ - lsls r0, 8\n\ - subs r0, r1, r0\n\ - strh r0, [r4, 0x30]\n\ - movs r0, 0x46\n\ - strh r0, [r4, 0x20]\n\ -_080CBC3A:\n\ - ldrh r0, [r5]\n\ - strh r0, [r4, 0x22]\n\ - strh r0, [r4, 0x32]\n\ - movs r0, 0x14\n\ - strh r0, [r4, 0x36]\n\ - movs r1, 0x30\n\ - ldrsh r0, [r4, r1]\n\ - movs r1, 0x3C\n\ - bl Cos\n\ - strh r0, [r4, 0x24]\n\ - movs r1, 0x30\n\ - ldrsh r0, [r4, r1]\n\ - movs r1, 0x14\n\ - bl Sin\n\ - strh r0, [r4, 0x26]\n\ - ldr r0, _080CBC78 @ =sub_80CBC8C\n\ - str r0, [r4, 0x1C]\n\ - ldrh r0, [r4, 0x30]\n\ - subs r0, 0x1\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - cmp r0, 0xBE\n\ - bhi _080CBC7C\n\ - adds r1, r4, 0\n\ - adds r1, 0x43\n\ - movs r0, 0x1F\n\ - b _080CBC82\n\ - .align 2, 0\n\ -_080CBC74: .4byte gBattleAnimArgs\n\ -_080CBC78: .4byte sub_80CBC8C\n\ -_080CBC7C:\n\ - adds r1, r4, 0\n\ - adds r1, 0x43\n\ - movs r0, 0x1D\n\ -_080CBC82:\n\ - strb r0, [r1]\n\ -_080CBC84:\n\ - pop {r4,r5}\n\ - pop {r0}\n\ - bx r0\n\ - .syntax divided\n"); -} -#endif void sub_80CBC8C(struct Sprite* sprite) { @@ -1370,211 +1282,30 @@ void sub_80CBDB0(struct Sprite* sprite) sprite->data0++; } -#ifdef NONMATCHING void sub_80CBDF4(u8 taskId) { - struct Task* task = &gTasks[taskId]; - task->data[4] = sub_8079E90(gBattleAnimEnemyMonIndex) - 1; - task->data[6] = sub_8077ABC(gBattleAnimEnemyMonIndex, 2); - task->data[7] = sub_8077ABC(gBattleAnimEnemyMonIndex, 3); - task->data[10] = sub_807A100(gBattleAnimEnemyMonIndex, 1); - task->data[11] = sub_807A100(gBattleAnimEnemyMonIndex, 0); - if(GetBankSide(gBattleAnimEnemyMonIndex) == 1) - { - task->data[5] = 1; - } - else - { - task->data[5] = -1; - } - task->data[9] = 0x38 - (task->data[5] * 64); - task->data[8] = task->data[7] - task->data[9] + task->data[6]; - task->data[2] = CreateSprite(&gSpriteTemplate_83D6884, task->data[8], task->data[9], task->data[4]); - if(task->data[2] == 0x40) DestroyAnimVisualTask(taskId); - gSprites[task->data[2]].data0 = 10; - gSprites[task->data[2]].data1 = task->data[8]; - gSprites[task->data[2]].data2 = task->data[6] - (((task->data[10] / 2) + 10) * task->data[5]); - gSprites[task->data[2]].data3 = task->data[9]; - gSprites[task->data[2]].data4 = ((task->data[11] / 2) + 10) * task->data[5] + task->data[7]; - gSprites[task->data[2]].data5 = sub_80CC338(&gSprites[task->data[2]]); - sub_80786EC(&gSprites[task->data[2]]); - task->func = sub_80CBF5C; -} -#else -__attribute__((naked)) -void sub_80CBDF4(u8 taskId) -{ - asm(".syntax unified\n\ - push {r4-r6,lr}\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - adds r6, r0, 0\n\ - lsls r0, r6, 2\n\ - adds r0, r6\n\ - lsls r0, 3\n\ - ldr r1, _080CBF48 @ =gTasks\n\ - adds r5, r0, r1\n\ - ldr r4, _080CBF4C @ =gBattleAnimEnemyMonIndex\n\ - ldrb r0, [r4]\n\ - bl sub_8079E90\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - subs r0, 0x1\n\ - strh r0, [r5, 0x10]\n\ - ldrb r0, [r4]\n\ - movs r1, 0x2\n\ - bl sub_8077ABC\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - strh r0, [r5, 0x14]\n\ - ldrb r0, [r4]\n\ - movs r1, 0x3\n\ - bl sub_8077ABC\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - strh r0, [r5, 0x16]\n\ - ldrb r0, [r4]\n\ - movs r1, 0x1\n\ - bl sub_807A100\n\ - strh r0, [r5, 0x1C]\n\ - ldrb r0, [r4]\n\ - movs r1, 0\n\ - bl sub_807A100\n\ - strh r0, [r5, 0x1E]\n\ - ldrb r0, [r4]\n\ - bl GetBankSide\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - movs r2, 0x1\n\ - negs r2, r2\n\ - adds r1, r2, 0\n\ - cmp r0, 0x1\n\ - bne _080CBE5C\n\ - movs r1, 0x1\n\ -_080CBE5C:\n\ - strh r1, [r5, 0x12]\n\ - movs r3, 0x12\n\ - ldrsh r0, [r5, r3]\n\ - lsls r0, 6\n\ - movs r1, 0x38\n\ - subs r1, r0\n\ - strh r1, [r5, 0x1A]\n\ - ldrh r0, [r5, 0x16]\n\ - subs r0, r1\n\ - ldrh r1, [r5, 0x14]\n\ - adds r0, r1\n\ - strh r0, [r5, 0x18]\n\ - ldr r0, _080CBF50 @ =gSpriteTemplate_83D6884\n\ - movs r2, 0x18\n\ - ldrsh r1, [r5, r2]\n\ - movs r3, 0x1A\n\ - ldrsh r2, [r5, r3]\n\ - ldrb r3, [r5, 0x10]\n\ - bl CreateSprite\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - strh r0, [r5, 0xC]\n\ - cmp r0, 0x40\n\ - bne _080CBE94\n\ - adds r0, r6, 0\n\ - bl DestroyAnimVisualTask\n\ -_080CBE94:\n\ - ldr r4, _080CBF54 @ =gSprites\n\ - movs r0, 0xC\n\ - ldrsh r1, [r5, r0]\n\ - lsls r0, r1, 4\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - adds r0, r4\n\ - movs r1, 0xA\n\ - strh r1, [r0, 0x2E]\n\ - movs r2, 0xC\n\ - ldrsh r1, [r5, r2]\n\ - lsls r0, r1, 4\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - adds r0, r4\n\ - ldrh r1, [r5, 0x18]\n\ - strh r1, [r0, 0x30]\n\ - movs r3, 0xC\n\ - ldrsh r0, [r5, r3]\n\ - lsls r2, r0, 4\n\ - adds r2, r0\n\ - lsls r2, 2\n\ - adds r2, r4\n\ - movs r1, 0x1C\n\ - ldrsh r0, [r5, r1]\n\ - lsrs r1, r0, 31\n\ - adds r0, r1\n\ - asrs r0, 1\n\ - adds r0, 0xA\n\ - movs r3, 0x12\n\ - ldrsh r1, [r5, r3]\n\ - muls r1, r0\n\ - ldrh r0, [r5, 0x14]\n\ - subs r0, r1\n\ - strh r0, [r2, 0x32]\n\ - movs r0, 0xC\n\ - ldrsh r1, [r5, r0]\n\ - lsls r0, r1, 4\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - adds r0, r4\n\ - ldrh r1, [r5, 0x1A]\n\ - strh r1, [r0, 0x34]\n\ - movs r1, 0xC\n\ - ldrsh r0, [r5, r1]\n\ - lsls r1, r0, 4\n\ - adds r1, r0\n\ - lsls r1, 2\n\ - adds r1, r4\n\ - movs r2, 0x1E\n\ - ldrsh r0, [r5, r2]\n\ - lsrs r2, r0, 31\n\ - adds r0, r2\n\ - asrs r0, 1\n\ - adds r0, 0xA\n\ - movs r3, 0x12\n\ - ldrsh r2, [r5, r3]\n\ - muls r0, r2\n\ - ldrh r2, [r5, 0x16]\n\ - adds r0, r2\n\ - strh r0, [r1, 0x36]\n\ - movs r3, 0xC\n\ - ldrsh r1, [r5, r3]\n\ - lsls r0, r1, 4\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - adds r0, r4\n\ - bl sub_80CC338\n\ - movs r1, 0xC\n\ - ldrsh r2, [r5, r1]\n\ - lsls r1, r2, 4\n\ - adds r1, r2\n\ - lsls r1, 2\n\ - adds r1, r4\n\ - strh r0, [r1, 0x38]\n\ - movs r2, 0xC\n\ - ldrsh r1, [r5, r2]\n\ - lsls r0, r1, 4\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - adds r0, r4\n\ - bl sub_80786EC\n\ - ldr r0, _080CBF58 @ =sub_80CBF5C\n\ - str r0, [r5]\n\ - pop {r4-r6}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_080CBF48: .4byte gTasks\n\ -_080CBF4C: .4byte gBattleAnimEnemyMonIndex\n\ -_080CBF50: .4byte gSpriteTemplate_83D6884\n\ -_080CBF54: .4byte gSprites\n\ -_080CBF58: .4byte sub_80CBF5C\n\ - .syntax divided\n"); + struct Task *task = &gTasks[taskId]; + + task->data[4] = sub_8079E90(gBattleAnimEnemyMonIndex) - 1; + task->data[6] = sub_8077ABC(gBattleAnimEnemyMonIndex, 2); + task->data[7] = sub_8077ABC(gBattleAnimEnemyMonIndex, 3); + task->data[10] = sub_807A100(gBattleAnimEnemyMonIndex, 1); + task->data[11] = sub_807A100(gBattleAnimEnemyMonIndex, 0); + task->data[5] = (GetBankSide(gBattleAnimEnemyMonIndex) == 1) ? 1 : -1; + task->data[9] = 0x38 - (task->data[5] * 64); + task->data[8] = task->data[7] - task->data[9] + task->data[6]; + task->data[2] = CreateSprite(&gSpriteTemplate_83D6884, task->data[8], task->data[9], task->data[4]); + if (task->data[2] == 0x40) + DestroyAnimVisualTask(taskId); + gSprites[task->data[2]].data0 = 10; + gSprites[task->data[2]].data1 = task->data[8]; + gSprites[task->data[2]].data2 = task->data[6] - (task->data[10] / 2 + 10) * task->data[5]; + gSprites[task->data[2]].data3 = task->data[9]; + gSprites[task->data[2]].data4 = task->data[7] + (task->data[11] / 2 + 10) * task->data[5]; + gSprites[task->data[2]].data5 = sub_80CC338(&gSprites[task->data[2]]); + sub_80786EC(&gSprites[task->data[2]]); + task->func = sub_80CBF5C; } -#endif void sub_80CBF5C(u8 taskId) { @@ -3092,17 +2823,230 @@ void sub_80CDD20(u8 taskId) } } -/* void sub_80CDD74(struct Sprite* sprite) +void sub_80CDD74(struct Sprite* sprite) { - u8 bank; - if (!gBattleAnimArgs[0]) - bank = gBattleAnimPlayerMonIndex; + if (gBattleAnimArgs[0] == 0) + { + sprite->pos1.x = sub_8077ABC(gBattleAnimPlayerMonIndex, 2) + gBattleAnimArgs[1]; + sprite->pos1.y = sub_8077ABC(gBattleAnimPlayerMonIndex, 3) + gBattleAnimArgs[2]; + } else - bank = gBattleAnimEnemyMonIndex; - sprite->pos1.x = sub_8077ABC(bank, 2) + gBattleAnimArgs[1]; - sprite->pos1.y = sub_8077ABC(bank, 3) + gBattleAnimArgs[2]; + { + sprite->pos1.x = sub_8077ABC(gBattleAnimEnemyMonIndex, 2) + gBattleAnimArgs[1]; + sprite->pos1.y = sub_8077ABC(gBattleAnimEnemyMonIndex, 3) + gBattleAnimArgs[2]; + } sprite->data0 = 0; sprite->data1 = 0; oamt_set_x3A_32(sprite, sub_80CDEC0); sprite->callback = sub_8078600; -} */ +} + +void sub_80CDDDC(struct Sprite* sprite) +{ + sprite->pos1.x = sub_8077ABC(gBattleAnimEnemyMonIndex, 2) + 0xFFD0; + sprite->pos1.y = sub_8077ABC(gBattleAnimEnemyMonIndex, 3); + oamt_set_x3A_32(sprite, sub_80CDE78); + sprite->callback = sub_8078600; +} + +void sub_80CDE24(struct Sprite* sprite) +{ + sprite->pos1.x = sprite->pos1.x = sub_8077ABC(gBattleAnimEnemyMonIndex, 2) + 0xFFD0 + gBattleAnimArgs[0]; + sprite->pos1.y = sub_8077ABC(gBattleAnimEnemyMonIndex, 3); + StartSpriteAnim(sprite, 1); + sprite->data0 = 0; + sprite->data1 = 0; + sprite->callback = sub_80CDEC0; +} + +void sub_80CDE78(struct Sprite* sprite) +{ + if (++sprite->data0 > 8) + { + sprite->data0 = 12; + sprite->data1 = 8; + sprite->data2 = 0; + oamt_set_x3A_32(sprite, sub_80CDEB0); + sprite->callback = sub_8078364; + } +} + +void sub_80CDEB0(struct Sprite* sprite) +{ + sprite->data0 = 0; + sprite->data1 = 0; + sprite->callback = sub_80CDEC0; +} + +void sub_80CDEC0(struct Sprite* sprite) +{ + if(++sprite->data0 > 1) + { + sprite->data0 = 0; + sprite->invisible = !sprite->invisible; + if(++sprite->data1 > 8) + move_anim_8072740(sprite); + } +} + +void sub_80CDF0C(struct Sprite* sprite) +{ + if (gBattleAnimArgs[0] == 0) + { + sprite->pos1.x = sub_8077ABC(gBattleAnimPlayerMonIndex, 0) + gBattleAnimArgs[1]; + sprite->pos1.y = sub_8077ABC(gBattleAnimPlayerMonIndex, 1) + gBattleAnimArgs[2]; + } + else + { + sprite->pos1.x = sub_8077ABC(gBattleAnimEnemyMonIndex, 0) + gBattleAnimArgs[1]; + sprite->pos1.y = sub_8077ABC(gBattleAnimEnemyMonIndex, 1) + gBattleAnimArgs[2]; + } + sprite->data0 = 0; + sprite->data1 = gBattleAnimArgs[3]; + sprite->callback = sub_80CDF70; +} + +void sub_80CDF70(struct Sprite* sprite) +{ + if (++sprite->data0 > sprite->data1) + { + sprite->data0 = 0; + sprite->pos1.y--; + } + sprite->pos1.y -= sprite->data0; + if (sprite->animEnded) + move_anim_8072740(sprite); +} + +void sub_80CDFB0(struct Sprite* sprite) +{ + sprite->pos1.x = sub_8077ABC(gBattleAnimPlayerMonIndex, 2); + sprite->pos1.y = sub_8077ABC(gBattleAnimPlayerMonIndex, 3) - 12; + sprite->data0 = 0; + sprite->data1 = 2; + sprite->data2 = 0; + sprite->data3 = 0; + sprite->data4 = 0; + sprite->data5 = sub_8076F98(-0x40); + sprite->callback = sub_80CE000; +} + +#ifdef NONMATCHING +void sub_80CE000(struct Sprite* sprite) +{ + if (++sprite->data0 >= sprite->data1) + { + sprite->invisible = !sprite->invisible; + if (!sprite->invisible && !(++sprite->data4 & 1)) + PlaySE12WithPanning(0xC2, sprite->data5); + sprite->data0 = 0; + if (++sprite->data2 > 1) + { + sprite->data2 = 0; + sprite->data1++; + } + } + if (sprite->animEnded && sprite->data1 > 16 && sprite->invisible) + move_anim_8072740(sprite); +} +#else +__attribute__((naked)) +void sub_80CE000(struct Sprite* sprite) +{ + asm(".syntax unified\n\ + push {r4,lr}\n\ + adds r4, r0, 0\n\ + ldrh r0, [r4, 0x2E]\n\ + adds r0, 0x1\n\ + strh r0, [r4, 0x2E]\n\ + lsls r0, 16\n\ + asrs r0, 16\n\ + movs r2, 0x30\n\ + ldrsh r1, [r4, r2]\n\ + cmp r0, r1\n\ + blt _080CE06C\n\ + adds r3, r4, 0\n\ + adds r3, 0x3E\n\ + ldrb r2, [r3]\n\ + lsrs r1, r2, 2\n\ + movs r0, 0x1\n\ + eors r1, r0\n\ + ands r1, r0\n\ + lsls r1, 2\n\ + movs r0, 0x5\n\ + negs r0, r0\n\ + ands r0, r2\n\ + orrs r0, r1\n\ + strb r0, [r3]\n\ + movs r1, 0x4\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _080CE052\n\ + ldrh r0, [r4, 0x36]\n\ + adds r0, 0x1\n\ + strh r0, [r4, 0x36]\n\ + movs r1, 0x1\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _080CE052\n\ + ldrh r1, [r4, 0x38]\n\ + lsls r1, 24\n\ + asrs r1, 24\n\ + movs r0, 0xC2\n\ + bl PlaySE12WithPanning\n\ +_080CE052:\n\ + movs r1, 0\n\ + strh r1, [r4, 0x2E]\n\ + ldrh r0, [r4, 0x32]\n\ + adds r0, 0x1\n\ + strh r0, [r4, 0x32]\n\ + lsls r0, 16\n\ + asrs r0, 16\n\ + cmp r0, 0x1\n\ + ble _080CE06C\n\ + strh r1, [r4, 0x32]\n\ + ldrh r0, [r4, 0x30]\n\ + adds r0, 0x1\n\ + strh r0, [r4, 0x30]\n\ +_080CE06C:\n\ + adds r0, r4, 0\n\ + adds r0, 0x3F\n\ + ldrb r1, [r0]\n\ + movs r0, 0x10\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _080CE096\n\ + movs r1, 0x30\n\ + ldrsh r0, [r4, r1]\n\ + cmp r0, 0x10\n\ + ble _080CE096\n\ + adds r0, r4, 0\n\ + adds r0, 0x3E\n\ + ldrb r1, [r0]\n\ + movs r0, 0x4\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _080CE096\n\ + adds r0, r4, 0\n\ + bl move_anim_8072740\n\ +_080CE096:\n\ + pop {r4}\n\ + pop {r0}\n\ + bx r0\n\ + .syntax divided\n"); +} +#endif + +void sub_80CE09C(struct Sprite* sprite) +{ + if (sprite->data0 == 0) + { + sprite->pos1.x = sub_8077ABC(gBattleAnimPlayerMonIndex, 0) + gBattleAnimArgs[0]; + sprite->pos1.y = sub_8077ABC(gBattleAnimPlayerMonIndex, 1) + gBattleAnimArgs[1]; + if (IsContest()) + sprite->pos1.y += 10; + sprite->data0++; + } + if ((u16)gBattleAnimArgs[7] == 0xFFFF) + move_anim_8072740(sprite); +} \ No newline at end of file -- cgit v1.2.3 From 0ec479849db4ee6a6323df2da99280d91850632b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BAl=20Pe=C3=B1acoba?= Date: Sat, 19 Aug 2017 13:23:01 +0200 Subject: sub_80EDEE4 --- src/pokenav_before.c | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) (limited to 'src') diff --git a/src/pokenav_before.c b/src/pokenav_before.c index 09a5e8a54..af0933069 100644 --- a/src/pokenav_before.c +++ b/src/pokenav_before.c @@ -1926,3 +1926,65 @@ void sub_80EDE70() { } } + +void sub_80F66E0(); +bool8 sub_80F1080(); +void sub_80EEFBC(); +void sub_80F38B8(); +bool8 sub_80F38EC(); +void sub_80EE06C(); + +void sub_80EDEE4() { + switch (ewram0.var304) { + case 0: + BeginNormalPaletteFade(ewram0.var308, -1, 0, 0x10, 0); + ewram0.var304++; + break; + case 1: + if (gPaletteFade.active) return; + SetVBlankCallback(NULL); + sub_80EED0C(); + sub_80F3130(); + ewram0.var304++; + break; + case 2: + sub_80F66E0(); + sub_80EEE08(); + ewram0.var304++; + break; + case 3: + if (sub_80F1080()) return; + ewram0.var304++; + break; + case 4: + sub_80EEFBC(0x5); + sub_80F38B8(); + ewram0.var304++; + case 5: + if (sub_80F38EC()) return; + ewram0.var304++; + break; + case 6: + if (sub_8055870()) return; + ewram0.var304++; + break; + case 7: + BeginNormalPaletteFade(ewram0.var308, -1, 0x10, 0, 0); + SetVBlankCallback(&sub_80EBD18); + ewram0.var304++; + break; + case 8: + sub_80EED2C(0x3); + ewram0.var304++; + break; + case 9: + if (gPaletteFade.active) return; + ewram0.var304++; + break; + case 0xA: + if (sub_80F170C()) return; + sub_80EBDBC(&sub_80EE06C); + break; + } + +} -- cgit v1.2.3 From 582ddf91f553fd20d3cee819d197a5b0bf9b800e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BAl=20Pe=C3=B1acoba?= Date: Sun, 20 Aug 2017 11:48:36 +0200 Subject: sub_80EE06C. FIXME: try to match without goto --- src/pokenav_before.c | 108 ++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 106 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/pokenav_before.c b/src/pokenav_before.c index af0933069..ba2e22b0b 100644 --- a/src/pokenav_before.c +++ b/src/pokenav_before.c @@ -41,9 +41,13 @@ struct UnknownPokenav0 { /* 0x76AA */ u8 var76aa; /* 0x76AB */ u8 fill76AB[0x10BD]; /* 0x8768 */ u32 var8768; - /* 0x876C */ u8 fill876B[0x6C]; + /* 0x876C */ u8 fill876C[0x8]; + /* 0x8774 */ s16 var8774; + /* 0x8776 */ u8 fill8776[0x62]; /* 0x87D8 */ u8 var87D8; - /* 0x87D9 */ u8 fill87D9[0x4F]; + /* 0x87D9 */ u8 fill87D9[0x3]; + /* 0x87DC */ s16 var87DC; + /* 0x87DE */ u8 fill87DE[0x4a]; /* 0x8828 */ u8 var8828; /* 0x8829 */ u8 fill8829[0x07bf]; /* 0x8FE8 */ s8 var8fe8; @@ -1986,5 +1990,105 @@ void sub_80EDEE4() { sub_80EBDBC(&sub_80EE06C); break; } +} +void sub_80F15A8(); +void sub_80F6A4C(); +bool8 sub_80F6AF0(); +void sub_80F3B00(); +bool8 sub_80F3B58(); +void sub_80F1494(); +u8 sub_80F68E8(); +void sub_80F3B94(); +bool8 sub_80F3BD4(); +void sub_80EE294(); + +void sub_80EE06C() { + u32 var1; + u16 var2; + switch (ewram0.var304) { + case 0: + sub_80F15A8(); + ewram0.var304++; + break; + case 1: + if (gMain.newAndRepeatedKeys & 0x40) { + if (ewram0.var87DC) { + PlaySE(0x5); + sub_80F6A4C(-1); + ewram0.var304++; + } + else goto label1; + } + else goto label1; + break; +label1: + if (gMain.newAndRepeatedKeys & 0x80) { + if (ewram0.var87DC < ewram0.var8774) { + PlaySE(0x5); + sub_80F6A4C(1); + ewram0.var304++; + } + else goto label2; + } + else goto label2; + break; +label2: + if (gMain.newKeys & A_BUTTON) { + PlaySE(0x5); + sub_80EEFBC(0xB); + ewram0.var304 = 0x4; + } + else if (gMain.newKeys & B_BUTTON) { + PlaySE(0x5); + sub_80EBDBC(&sub_80EE294); + } + break; + case 2: + if (sub_80F6AF0()) return; + ewram0.var304++; + break; + case 3: + var1 = sub_8055870(); + if (var1) return; + ewram0.var304 = var1; + break; + case 4: + sub_80F3B00(); + ewram0.var304++; + break; + case 5: + if (sub_80F3B58()) return; + sub_80F1494(); + ewram0.var304++; + sub_80EED9C(); + break; + case 6: + switch (sub_80F68E8()) { + case 1: + PlaySE(0x5); + sub_80F3B94(); + ewram0.var304 = 0x7; + break; + default: + case 0: + if (gMain.newKeys & B_BUTTON) { + PlaySE(0x5); + sub_80F3B94(); + ewram0.var304 = 0x8; + } + break; + } + break; + case 7: + if (sub_80F3BD4()) return; + ewram0.var304 = 0x4; + break; + case 8: + var2 = sub_80F3BD4(); + if (var2) return; + sub_80EEFBC(0x5); + ewram0.var304 = var2; + break; + } } -- cgit v1.2.3 From d7c3b9213ed119767ae26b213be32d7a62b214a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BAl=20Pe=C3=B1acoba?= Date: Sun, 20 Aug 2017 12:07:54 +0200 Subject: sub_80EE294 --- src/pokenav_before.c | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) (limited to 'src') diff --git a/src/pokenav_before.c b/src/pokenav_before.c index ba2e22b0b..12bbf5aba 100644 --- a/src/pokenav_before.c +++ b/src/pokenav_before.c @@ -2092,3 +2092,52 @@ label2: break; } } + +void sub_80F3C2C(); + +void sub_80EE294() { + switch (ewram0.var304) { + case 0: + BeginNormalPaletteFade(ewram0.var308, -1, 0, 0x10, 0); + ewram0.var304++; + break; + case 1: + if (gPaletteFade.active) return; + SetVBlankCallback(NULL); + sub_80EED0C(); + sub_80F3C2C(); + sub_80EEE08(); + ewram0.var304++; + break; + case 2: + sub_80F6134(); + sub_80F0264(0x1); + ewram0.var304++; + case 3: + if (sub_80F02A0()) return; + ewram0.var304++; + break; + case 4: + sub_80EEFBC(0x4); + sub_80F3008(0x1); + SetVBlankCallback(&sub_80EBD18); + ewram0.var304++; + break; + case 5: + if (sub_8055870()) return; + ewram0.var304++; + break; + case 6: + BeginNormalPaletteFade(ewram0.var308, -1, 0x10, 0, 0); + ewram0.var304++; + break; + case 7: + sub_80EED2C(0x4); + ewram0.var304++; + break; + case 8: + if (gPaletteFade.active) return; + sub_80EBDBC(&sub_80EDDBC); + break; + } +} -- cgit v1.2.3 From f5dd2d9922067b02a8cb304dfb46e649aab51a81 Mon Sep 17 00:00:00 2001 From: "U-User-PC\\User" Date: Sun, 20 Aug 2017 18:06:50 -0400 Subject: decompiled up to sub_80CE3EC --- src/battle_anim_80CA710.c | 168 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 168 insertions(+) (limited to 'src') diff --git a/src/battle_anim_80CA710.c b/src/battle_anim_80CA710.c index 77bcff3e9..0146a551d 100755 --- a/src/battle_anim_80CA710.c +++ b/src/battle_anim_80CA710.c @@ -25,6 +25,8 @@ extern s8 gUnknown_083D680C[11][3]; extern u16 gUnknown_083D6984[]; extern s8 gUnknown_083D6DDC[4][2]; extern u8 gObjectBankIDs[]; +extern u8 gNoOfAllBanks; +extern u8 gHealthboxIDs[]; void sub_80CA768(struct Sprite* sprite); void sub_80CA8B4(struct Sprite* sprite); @@ -74,6 +76,9 @@ void sub_80CDEB0(struct Sprite* sprite); void sub_80CDEC0(struct Sprite* sprite); void sub_80CDF70(struct Sprite* sprite); void sub_80CE000(struct Sprite* sprite); +void sub_80CE1AC(struct Sprite* sprite); +void sub_80CE354(struct Sprite* sprite); +void sub_80CE3B0(struct Sprite* sprite); s16 sub_80CC338(struct Sprite* sprite); @@ -90,6 +95,9 @@ void sub_807861C(struct Sprite *sprite); void sub_8078650(struct Sprite *sprite); void sub_8078394(struct Sprite *sprite); +extern void sub_8043DB0(); +extern void sub_8043DFC(); + void sub_807A3FC(u8 slot, u8 a2, s16 *a3, s16 *a4); u8 sub_8079ED4(u8 slot); s8 sub_8076F98(s8 a); @@ -99,6 +107,7 @@ void sub_8078FDC(struct Sprite *sprite, bool8 a2, s16 xScale, s16 yScale, u16 ro void sub_807867C(struct Sprite *sprite, s16 a2); u8 sub_8077EE4(u8 slot, u8 a2); u32 sub_80791A8(u8 a1, u8 a2, u8 a3, u8 a4, u8 a5, u8 a6, u8 a7); +u32 sub_80792C0(u8 a1, u8 a2, u8 a3, u8 a4); void move_anim_8074EE0(struct Sprite *sprite); bool8 sub_8078718(struct Sprite *sprite); @@ -109,6 +118,7 @@ void sub_80CB438(u8 taskId); void sub_80CBF5C(u8 taskId); void sub_80CDB60(u8 taskId); void sub_80CDD20(u8 taskId); +void sub_80CE4D4(u8 taskId); void sub_80CC358(struct Task* task, u8 taskId); @@ -3049,4 +3059,162 @@ void sub_80CE09C(struct Sprite* sprite) } if ((u16)gBattleAnimArgs[7] == 0xFFFF) move_anim_8072740(sprite); +} + +void sub_80CE108(u8 taskId) +{ + if (gTasks[taskId].data[2] == 1) + { + gBattleAnimArgs[7] = 0xFFFF; + gTasks[taskId].data[2]++; + } + else if (gTasks[taskId].data[2] == 2) + { + DestroyAnimVisualTask(taskId); + } + else + { + if (++gTasks[taskId].data[0] == 4) + { + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[1]++; + REG_BLDALPHA = (gTasks[taskId].data[1] << 8) | (16 - gTasks[taskId].data[1]); + if (gTasks[taskId].data[1] == 16) + gTasks[taskId].data[2]++; + } + } +} + +void sub_80CE17C(struct Sprite* sprite) +{ + sub_8078764(sprite, 0); + sprite->animPaused = 1; + sprite->data0 = gBattleAnimArgs[2]; + sprite->callback = sub_80CE1AC; +} + +void sub_80CE1AC(struct Sprite* sprite) +{ + if (sprite->data0) + sprite->data0--; + else + { + sprite->animPaused = 0; + sprite->data0 = 30; + sprite->data2 = sub_8077ABC(gBattleAnimPlayerMonIndex, 2); + sprite->data4 = sub_8077ABC(gBattleAnimPlayerMonIndex, 3); + sprite->callback = sub_8078B34; + oamt_set_x3A_32(sprite, move_anim_8072740); + } +} + +void sub_80CE210(u8 taskId) +{ + if (++gTasks[taskId].data[0] == 4) + { + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[1]++; + REG_BLDALPHA = gTasks[taskId].data[1] | ((16 - gTasks[taskId].data[1]) << 8); + if (gTasks[taskId].data[1] == 16) + DestroyAnimVisualTask(taskId); + } +} + +void unref_sub_80CE260(u8 taskId) +{ + u8 i; + for (i = 0; i < gNoOfAllBanks; i++) + { + if (gBattleAnimArgs[0] == 1 && GetBankSide(i) == 0) + sub_8043DB0(gHealthboxIDs[i]); + if (gBattleAnimArgs[1] == 1 && GetBankSide(i) == 1) + sub_8043DB0(gHealthboxIDs[i]); + } + DestroyAnimVisualTask(taskId); +} + +void unref_sub_80CE2D4(u8 taskId) +{ + u8 i; + for (i = 0; i < gNoOfAllBanks; i++) + sub_8043DFC(gHealthboxIDs[i]); + DestroyAnimVisualTask(taskId); +} + +void sub_80CE30C(struct Sprite* sprite) +{ + if (IsContest()) + { + sprite->pos1.x = 0x30; + sprite->pos1.y = 0x28; + } + else + { + sprite->pos1.x = gBattleAnimArgs[0]; + sprite->pos1.y = gBattleAnimArgs[1]; + } + sprite->oam.shape = 0; + sprite->oam.size = 3; + sprite->data0 = 0; + sprite->callback = sub_80CE354; +} + +void sub_80CE354(struct Sprite* sprite) +{ + if (sprite->data0) + move_anim_8072740(sprite); +} + +void sub_80CE36C(struct Sprite* sprite) +{ + sprite->pos1.x = sub_8077ABC(gBattleAnimPlayerMonIndex, 2) + gBattleAnimArgs[0]; + sprite->pos1.y = gBattleAnimArgs[1]; + sprite->data0 = 0; + sprite->data1 = 0; + sprite->data2 = 0; + sprite->data3 = 0; + sprite->data4 = 1; + sprite->callback = sub_80CE3B0; +} + +void sub_80CE3B0(struct Sprite* sprite) +{ + if (++sprite->data1 > 1) + { + sprite->data1 = 0; + if (sprite->data2 <= 0x77) + { + sprite->pos1.y++; + sprite->data2++; + } + } + if (sprite->data0) + move_anim_8072740(sprite); +} + +void sub_80CE3EC(u8 taskId) +{ + int a = sub_80791A8(1, 0, 0, 0, 0, 0, 0) & 0xFFFF; + int b; + int c; + int d; + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[1] = 0; + gTasks[taskId].data[2] = 0; + gTasks[taskId].data[3] = a; + gTasks[taskId].data[4] = 0; + gTasks[taskId].data[5] = 0; + gTasks[taskId].data[6] = 0; + gTasks[taskId].data[7] = 13; + gTasks[taskId].data[8] = 14; + gTasks[taskId].data[9] = 15; + b = sub_80792C0(1, 1, 1, 1); + c = a | b; + sub_8079BF4(&gTasks[taskId].data[14], &gTasks[taskId].data[15], (void*)c); + b = b | (0x10000 << IndexOfSpritePaletteTag(0x27D2)); + d = IndexOfSpritePaletteTag(0x27D3); + BeginNormalPaletteFade((0x10000 << d) | b, 0, 0, 0x10, 32699); + gTasks[taskId].func = sub_80CE4D4; + sub_80CE4D4(taskId); + } \ No newline at end of file -- cgit v1.2.3 From cc1ee24512d974814499fcc3d35166901c227c9b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BAl=20Pe=C3=B1acoba?= Date: Mon, 21 Aug 2017 11:14:24 +0200 Subject: sub_80EE3D8 --- src/pokenav_before.c | 73 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) (limited to 'src') diff --git a/src/pokenav_before.c b/src/pokenav_before.c index 12bbf5aba..e43ff2857 100644 --- a/src/pokenav_before.c +++ b/src/pokenav_before.c @@ -2141,3 +2141,76 @@ void sub_80EE294() { break; } } + +void sub_80F6F10(); +void sub_80EE58C(); + +void sub_80EE3D8() { + u8 var1; + switch (ewram0.var304) { + case 0: + sub_80F1E84(); + sub_80F2D04(0); + ewram0.var304++; + break; + case 1: + if (sub_80F1F10()) return; + sub_80EEFBC(0x9); + ewram0.var304++; + break; + case 2: + if (!(var1 = sub_80EEF34())) { + BeginNormalPaletteFade(ewram0.var308, -1, 0x0, 0x10, var1); + ewram0.var304++; + } + break; + case 3: + if (gPaletteFade.active) return; + SetVBlankCallback(NULL); + sub_80EED0C(); + sub_80EF814(); + sub_80EEE08(); + ewram0.var304++; + break; + case 4: + sub_80F2620(); + ewram0.var304++; + break; + case 5: + sub_80F0264(0x2); + ewram0.var304++; + case 6: + if (sub_80F02A0()) return; + ewram0.var304++; + break; + case 7: + sub_80F2C80(0x3); + ewram0.var304++; + case 8: + if (sub_80F2CBC(0x3)) return; + ewram0.var304++; + break; + case 9: + sub_80F3008(0x2); + ewram0.var304++; + break; + case 0xA: + if (sub_8055870()) return; + ewram0.var304++; + break; + case 0xB: + sub_80F6F10(); + BeginNormalPaletteFade(ewram0.var308, -1, 0x10, 0, 0); + SetVBlankCallback(&sub_80EBD68); + ewram0.var304++; + break; + case 0xC: + sub_80EED2C(0x5); + ewram0.var304++; + break; + case 0xD: + if (gPaletteFade.active) return; + sub_80EBDBC(&sub_80EE58C); + break; + } +} -- cgit v1.2.3 From 3fe570f5d19e802fc7a69811d52d800757b5bd14 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BAl=20Pe=C3=B1acoba?= Date: Mon, 21 Aug 2017 11:28:11 +0200 Subject: sub_80EE58C --- src/pokenav_before.c | 45 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/pokenav_before.c b/src/pokenav_before.c index e43ff2857..0e28b72ba 100644 --- a/src/pokenav_before.c +++ b/src/pokenav_before.c @@ -41,7 +41,9 @@ struct UnknownPokenav0 { /* 0x76AA */ u8 var76aa; /* 0x76AB */ u8 fill76AB[0x10BD]; /* 0x8768 */ u32 var8768; - /* 0x876C */ u8 fill876C[0x8]; + /* 0x876C */ u8 fill876C[0x2]; + /* 0x876E */ u8 var876E; + /* 0x876F */ u8 fill876F[0x5]; /* 0x8774 */ s16 var8774; /* 0x8776 */ u8 fill8776[0x62]; /* 0x87D8 */ u8 var87D8; @@ -2214,3 +2216,44 @@ void sub_80EE3D8() { break; } } + +void sub_80F0FFC(); +void sub_80EE658(); +void sub_80EE8F4(); + +void sub_80EE58C() { + switch (ewram0.var304) { + case 0: + switch (sub_80F5DD4()) { + case 1: + PlaySE(0x5); + sub_80F0FFC(ewram0.var876E); + break; + case 2: + PlaySE(0x5); + ewram0.var304++; + break; + default: + if (gMain.newKeys & A_BUTTON) { + PlaySE(0x5); + sub_80EBDBC(&sub_80EE658); + } + else if (gMain.newKeys & B_BUTTON) { + PlaySE(0x5); + sub_80EBDBC(&sub_80EE8F4); + } + break; + } + break; + case 1: + if (sub_80F0718()) return; + sub_80F0FFC(ewram0.var876E); + sub_80F3264(); + ewram0.var304++; + break; + case 2: + if (sub_8055870()) return; + ewram0.var304 = 0; + break; + } +} -- cgit v1.2.3 From 0c078bdc603bd8ac91c17d33dbc7bed6ae43fcec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BAl=20Pe=C3=B1acoba?= Date: Mon, 21 Aug 2017 12:37:20 +0200 Subject: sub_80EE658 --- src/pokenav_before.c | 135 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 135 insertions(+) (limited to 'src') diff --git a/src/pokenav_before.c b/src/pokenav_before.c index 0e28b72ba..73567fc33 100644 --- a/src/pokenav_before.c +++ b/src/pokenav_before.c @@ -2257,3 +2257,138 @@ void sub_80EE58C() { break; } } + +void sub_80F3294(); +void sub_80F0B24(); +bool8 sub_80F0B44(); +void sub_80F0F64(); +bool8 sub_80F0FEC(); +void sub_80F6FB8(); +void sub_80F6DB8(); +void sub_80F0CD8(); +bool8 sub_80F6E9C(); +bool8 sub_80F0D5C(); +bool8 sub_80F6ED4(); +bool8 sub_80F0EF4(); +void sub_80F2FB0(); +void sub_80F0FA0(); +void sub_80F0C28(); +bool8 sub_80F0C48(); +bool8 sub_80F70FC(); +void sub_80F708C(u32); +void sub_80F4394(); +void sub_80F0EC0(); +void sub_80F700C(); +void sub_80F42C4(); + +void sub_80EE658() { + switch (ewram0.var304) { + case 0: + sub_80F3294(0x1); + sub_80EEFBC(0xA); + sub_80F0B24(); + ewram0.var304++; + break; + case 1: + if (sub_80F0B44()) return; + ewram0.var304++; + break; + case 2: + sub_80F0F64(); + ewram0.var304++; + break; + case 3: + if (sub_80F0FEC()) return; + sub_80F6FB8(0x1); + ewram0.var304++; + break; + case 4: + sub_80F6DB8(); + ewram0.var304++; + break; + case 5: + sub_80F700C((u8 *)(ewram + 0x8788), *(u16 *)(ewram + 0x8788 - 0x1A)); + sub_80F42C4((u8 *)(ewram + 0x8788)); + ewram0.var304++; + break; + case 6: + sub_80F0CD8(); + ewram0.var304++; + case 7: + if (sub_80F6E9C()) return; + if (sub_80F0D5C()) return; + ewram0.var304++; + break; + case 8: + if (gMain.heldKeys & 0x40) { + if (ewram0.var87DC) { + PlaySE(0x5); + sub_80F708C(-1); + ewram0.var304 = 0x10; + } + else goto label1; + } + else goto label1; + break; +label1: + if (gMain.heldKeys & 0x80) { + if (ewram0.var87DC < ewram0.var8774) { + PlaySE(0x5); + sub_80F708C(1); + ewram0.var304 = 0x10; + } + else goto label2; + } + else goto label2; + break; +label2: + if (gMain.newKeys & B_BUTTON) { + PlaySE(0x5); + sub_80F4394(); + sub_80F0EC0(); + ewram0.var304++; + } + break; + case 9: + if (sub_80F6ED4()) return; + if (sub_80F0EF4()) return; + sub_80F6FB8(0); + sub_80F2FB0(); + ewram0.var304++; + break; + case 0xA: + sub_80F6134(); + ewram0.var304++; + break; + case 0xB: + sub_80F0FA0(); + ewram0.var304++; + break; + case 0xC: + if (sub_80F0FEC()) return; + ewram0.var304++; + break; + case 0xD: + sub_80F0C28(); + ewram0.var304++; + break; + case 0xE: + if (sub_80F0C48()) return; + ewram0.var304++; + break; + case 0xF: + sub_80EEFBC(0x9); + sub_80F3294(0); + sub_80EBDBC(&sub_80EE58C); + sub_80EED9C(); + break; + case 0x10: + if (sub_80F70FC()) return; + ewram0.var304++; + break; + case 0x11: + if (sub_8055870()) return; + ewram0.var304 = 0x8; + break; + } +} -- cgit v1.2.3 From e4dacd4f00c8ba6572a8ff47601863bd1d5b0c50 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BAl=20Pe=C3=B1acoba?= Date: Mon, 21 Aug 2017 12:42:54 +0200 Subject: sub_80EE8F4 --- src/pokenav_before.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) (limited to 'src') diff --git a/src/pokenav_before.c b/src/pokenav_before.c index 73567fc33..ceb7a1e98 100644 --- a/src/pokenav_before.c +++ b/src/pokenav_before.c @@ -2392,3 +2392,24 @@ label2: break; } } + +void sub_80F6FFC(); + +void sub_80EE8F4() { + switch (ewram0.var304) { + case 0: + BeginNormalPaletteFade(ewram0.var308, -1, 0, 0x10, 0); + ewram0.var304++; + break; + case 1: + if (gPaletteFade.active) return; + sub_80F3130(); + sub_80F2D6C(0x2); + sub_80F6FFC(); + ewram0.var304++; + break; + case 2: + sub_80EBDBC(&sub_80EC00C); + break; + } +} -- cgit v1.2.3 From 8328db130f1e6f2e84ca3db3e581f0cc0d7e7baf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BAl=20Pe=C3=B1acoba?= Date: Mon, 21 Aug 2017 12:50:36 +0200 Subject: sub_80EE96C --- src/pokenav_before.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'src') diff --git a/src/pokenav_before.c b/src/pokenav_before.c index ceb7a1e98..1d5015940 100644 --- a/src/pokenav_before.c +++ b/src/pokenav_before.c @@ -2413,3 +2413,17 @@ void sub_80EE8F4() { break; } } + +void sub_80EE96C() { + u16 var1 = ewram0.var304; + if (!var1) { + PlaySE(0x6F); + BeginNormalPaletteFade(-1, 0, 0, 0x10, var1); + ewram0.var304++; + } + else { + if (gPaletteFade.active) return; + sub_80F5BDC(); + sub_805469C(); + } +} -- cgit v1.2.3 From 6421c90f26aeb1b31daf4acebbb48d546bfc2884 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BAl=20Pe=C3=B1acoba?= Date: Mon, 21 Aug 2017 16:34:09 +0200 Subject: sub_80EE9C0 --- src/pokenav_before.c | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/pokenav_before.c b/src/pokenav_before.c index 1d5015940..e782adf7c 100644 --- a/src/pokenav_before.c +++ b/src/pokenav_before.c @@ -33,7 +33,12 @@ struct UnknownPokenav0 { /* 0x6df0 */ s8 var6df0; /* 0x6df1 */ u8 fill6df1[0xB]; /* 0x6dfc */ u8 var6dfc; - /* 0x6dfd */ u8 fill6dfd[0x93]; + /* 0x6dfd */ u8 fill6dfd[0x17]; + /* 0x6e14 */ u8 var6e14; + /* 0x6e15 */ u8 var6e15; + /* 0x6e16 */ u8 var6e16; + /* 0x6e17 */ u8 var6e17; + /* 0x6e18 */ u8 fill6e18[0x78]; /* 0x6e90 */ u8 var6e90; /* 0x6e91 */ u8 fill6e91[0x4]; /* 0x6e95 */ u8 var6e95; @@ -414,7 +419,7 @@ void sub_80EC00C() { } void sub_80F2D04(u32); -void sub_80EE9C0(u32, u8, u32); +void sub_80EE9C0(u8, u8, u8); bool8 sub_80EEA0C(); void sub_80EC210() { @@ -2427,3 +2432,11 @@ void sub_80EE96C() { sub_805469C(); } } + +void sub_80EE9C0(u8 param1, u8 param2, u8 param3) { + sub_80F1E84(); + ewram0.var6e14 = param1; + ewram0.var6e15 = param2; + ewram0.var6e16 = 0; + ewram0.var6e17 = param3; +} -- cgit v1.2.3 From b6e4bb07de08ae72b95b352b0243aef4b870af4c Mon Sep 17 00:00:00 2001 From: "U-User-PC\\User" Date: Wed, 23 Aug 2017 13:18:26 -0400 Subject: decompiled up to sub_80CEAD8 --- src/battle_anim_80CA710.c | 355 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 354 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/battle_anim_80CA710.c b/src/battle_anim_80CA710.c index 0146a551d..7b54b9e7c 100755 --- a/src/battle_anim_80CA710.c +++ b/src/battle_anim_80CA710.c @@ -20,6 +20,8 @@ extern u8 gBattleAnimPlayerMonIndex; extern u8 gBattleAnimEnemyMonIndex; extern struct SpriteTemplate gSpriteTemplate_83D631C; extern struct SpriteTemplate gSpriteTemplate_83D6884; +extern struct SpriteTemplate gBattleAnimSpriteTemplate_83D6FC8; +extern struct SpriteTemplate gBattleAnimSpriteTemplate_83D6FF8; extern s16 gUnknown_03000728[]; extern s8 gUnknown_083D680C[11][3]; extern u16 gUnknown_083D6984[]; @@ -27,6 +29,7 @@ extern s8 gUnknown_083D6DDC[4][2]; extern u8 gObjectBankIDs[]; extern u8 gNoOfAllBanks; extern u8 gHealthboxIDs[]; +extern u16 gUnknown_083D712C[4][6]; void sub_80CA768(struct Sprite* sprite); void sub_80CA8B4(struct Sprite* sprite); @@ -79,6 +82,8 @@ void sub_80CE000(struct Sprite* sprite); void sub_80CE1AC(struct Sprite* sprite); void sub_80CE354(struct Sprite* sprite); void sub_80CE3B0(struct Sprite* sprite); +void sub_80CE798(struct Sprite* sprite); +void sub_80CE974(struct Sprite* sprite); s16 sub_80CC338(struct Sprite* sprite); @@ -108,6 +113,8 @@ void sub_807867C(struct Sprite *sprite, s16 a2); u8 sub_8077EE4(u8 slot, u8 a2); u32 sub_80791A8(u8 a1, u8 a2, u8 a3, u8 a4, u8 a5, u8 a6, u8 a7); u32 sub_80792C0(u8 a1, u8 a2, u8 a3, u8 a4); +s16 duplicate_obj_of_side_rel2move_in_transparent_mode(u8 a1); +void obj_delete_but_dont_free_vram(struct Sprite *sprite); void move_anim_8074EE0(struct Sprite *sprite); bool8 sub_8078718(struct Sprite *sprite); @@ -119,6 +126,7 @@ void sub_80CBF5C(u8 taskId); void sub_80CDB60(u8 taskId); void sub_80CDD20(u8 taskId); void sub_80CE4D4(u8 taskId); +void sub_80CE910(u8 taskId); void sub_80CC358(struct Task* task, u8 taskId); @@ -3216,5 +3224,350 @@ void sub_80CE3EC(u8 taskId) BeginNormalPaletteFade((0x10000 << d) | b, 0, 0, 0x10, 32699); gTasks[taskId].func = sub_80CE4D4; sub_80CE4D4(taskId); - +} + +void sub_80CE4D4(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + switch (task->data[0]) + { + case 0: + if (++task->data[1] > 0) + { + u16 color; + u16 bitmask; + u16 r3; + u16 i; + u16 j; + task->data[1] = 0; + if (++task->data[2] <= 15) + { + u16 red; + u16 green; + u16 blue; + task->data[4] += task->data[7]; + task->data[5] += task->data[8]; + task->data[6] += task->data[9]; + red = task->data[4] >> 3; + green = task->data[5] >> 3; + blue = task->data[6] >> 3; + color = RGB(red, green, blue); + } + else + { + color = RGB(27, 29, 31); + task->data[0]++; + } + bitmask = 1; + r3 = 0; + for (i = 0; i <= 15; i++) + { + if (task->data[3] & bitmask) + { + for (j = 1; j <= 15; j++) + gPlttBufferFaded[r3 + j] = color; + } + bitmask <<= 1; + r3 += 16; + } + } + break; + case 1: + if (!gPaletteFade.active) + { + u8 spriteId; + for (spriteId = 0; spriteId < MAX_SPRITES; spriteId++) + { + if (gSprites[spriteId].template == &gBattleAnimSpriteTemplate_83D6FC8 || gSprites[spriteId].template == &gBattleAnimSpriteTemplate_83D6FF8) + gSprites[spriteId].data0 = 1; + } + task->data[1] = 0; + task->data[0]++; + } + break; + case 2: + if (++task->data[1] > 30) + { + BeginNormalPaletteFade((u32)sub_8079BFC(task->data[14], task->data[15]), 0, 16, 0, RGB(27, 29, 31)); + task->data[0]++; + } + break; + case 3: + if (!gPaletteFade.active) + DestroyAnimVisualTask(taskId); + break; + } +} + +void sub_80CE670(struct Sprite* sprite) +{ + if (gBattleAnimArgs[2] <= 1) + gBattleAnimArgs[2] = 2; + if (gBattleAnimArgs[2] > 0x7F) + gBattleAnimArgs[2] = 0x7F; + sprite->data0 = 0; + sprite->data1 = gBattleAnimArgs[2]; + sprite->pos1.x = sub_8077ABC(gBattleAnimEnemyMonIndex, 2) + gBattleAnimArgs[0]; + sprite->pos1.y = sub_8077ABC(gBattleAnimEnemyMonIndex, 3) + gBattleAnimArgs[1]; + sprite->data6 = sprite->pos1.x; + sprite->data7 = sprite->pos1.y; + if (IsContest() != 0) + { + sprite->oam.matrixNum = 8; + sprite->pos1.x += 40; + sprite->pos1.y += 20; + sprite->data2 = sprite->pos1.x << 7; + sprite->data3 = -0x1400 / sprite->data1; + sprite->data4 = sprite->pos1.y << 7; + sprite->data5 = -0xA00 / sprite->data1; + } + else if (GetBankSide(gBattleAnimPlayerMonIndex) == 0) + { + sprite->pos1.x -= 40; + sprite->pos1.y += 20; + sprite->data2 = sprite->pos1.x << 7; + sprite->data3 = 0x1400 / sprite->data1; + sprite->data4 = sprite->pos1.y << 7; + sprite->data5 = -0xA00 / sprite->data1; + } + else + { + sprite->pos1.x += 40; + sprite->pos1.y -= 20; + sprite->data2 = sprite->pos1.x << 7; + sprite->data3 = -0x1400 / sprite->data1; + sprite->data4 = sprite->pos1.y << 7; + sprite->data5 = 0xA00 / sprite->data1; + sprite->oam.matrixNum = 24; + } + sprite->callback = sub_80CE798; +} + +void sub_80CE798(struct Sprite* sprite) +{ + sprite->data2 += sprite->data3; + sprite->data4 += sprite->data5; + sprite->pos1.x = sprite->data2 >> 7; + sprite->pos1.y = sprite->data4 >> 7; + if (--sprite->data1 == 1) + { + sprite->pos1.x = sprite->data6; + sprite->pos1.y = sprite->data7; + } + if (sprite->data1 == 0) + move_anim_8072740(sprite); +} + +// double team +void sub_80CE7E0(u8 taskId) +{ + u16 i; + int obj; + u16 r3; + u16 r4; + struct Task* task = &gTasks[taskId]; + task->data[0] = obj_id_for_side_relative_to_move(0); + task->data[1] = AllocSpritePalette(0x2771); + r3 = (task->data[1] * 16) + 0x100; + r4 = (gSprites[task->data[0]].oam.paletteNum + 16) << 4; + for (i = 1; i < 16; i++) + { + gPlttBufferUnfaded[r3 + i] = gPlttBufferUnfaded[r4 + i]; + } + BlendPalette(r3, 16, 11, 0); + task->data[3] = 0; + i = 0; + while (i <= 1 && (obj = duplicate_obj_of_side_rel2move_in_transparent_mode(0)) >= 0) + { + gSprites[obj].oam.paletteNum = task->data[1]; + gSprites[obj].data0 = 0; + gSprites[obj].data1 = i << 7; + gSprites[obj].data2 = taskId; + gSprites[obj].callback = sub_80CE974; + task->data[3]++; + i++; + } + task->func = sub_80CE910; + if (GetBankIdentity_permutated(gBattleAnimPlayerMonIndex) == 1) + { + REG_DISPCNT &= 0xFDFF; + } + else + REG_DISPCNT &= 0xFBFF; +} + +void sub_80CE910(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + if (!task->data[3]) + { + if (GetBankIdentity_permutated(gBattleAnimPlayerMonIndex) == 1) + REG_DISPCNT |= 0x200; + else + REG_DISPCNT |= 0x400; + FreeSpritePaletteByTag(0x2771); + DestroyAnimVisualTask(taskId); + } +} + +void sub_80CE974(struct Sprite* sprite) +{ + if (++sprite->data3 > 1) + { + sprite->data3 = 0; + sprite->data0++; + } + if (sprite->data0 > 0x40) + { + gTasks[sprite->data2].data[3]--; + obj_delete_but_dont_free_vram(sprite); + } + else + { + sprite->data4 = gSineTable[sprite->data0] / 6; + sprite->data5 = gSineTable[sprite->data0] / 13; + sprite->data1 = (sprite->data1 + sprite->data5) & 0xFF; + sprite->pos2.x = Sin(sprite->data1, sprite->data4); + } +} + +void sub_80CEA04(struct Sprite* sprite) +{ + oamt_set_x3A_32(sprite, move_anim_8072740); + sprite->callback = sub_8078600; +} + +// grasswhistle +#ifdef NONMATCHING +void sub_80CEA20(u8 taskId) +{ + u16 i; + u16 j; + u16 a; + u16 index; + if ((index = IndexOfSpritePaletteTag(gUnknown_083D712C[0][0])) != 0xFF) + { + index = (index << 4) + 0x100; + for (i = 1; i < 6; i++) + gPlttBufferFaded[index + i] = gUnknown_083D712C[0][i]; + } + for (i = 1; i < 4; i++) + { + a = AllocSpritePalette(gUnknown_083D712C[i][0]); + if (a != 0xFF) + { + a = (a << 4) + 0x100; + for (j = 1; j < 6; j++) + gPlttBufferFaded[a + j] = gUnknown_083D712C[i][j]; + } + } + DestroyAnimVisualTask(taskId); +} +#else +__attribute__((naked)) +void sub_80CEA20(u8 taskId) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r9\n\ + mov r6, r8\n\ + push {r6,r7}\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + mov r9, r0\n\ + ldr r4, _080CEAD0 @ =gUnknown_083D712C\n\ + ldrh r0, [r4]\n\ + bl IndexOfSpritePaletteTag\n\ + lsls r0, 24\n\ + lsrs r3, r0, 24\n\ + cmp r3, 0xFF\n\ + beq _080CEA64\n\ + lsls r0, r3, 20\n\ + movs r1, 0x80\n\ + lsls r1, 17\n\ + adds r0, r1\n\ + lsrs r3, r0, 16\n\ + movs r2, 0x1\n\ + ldr r5, _080CEAD4 @ =gPlttBufferFaded\n\ +_080CEA4C:\n\ + adds r1, r3, r2\n\ + lsls r1, 1\n\ + adds r1, r5\n\ + lsls r0, r2, 1\n\ + adds r0, r4\n\ + ldrh r0, [r0]\n\ + strh r0, [r1]\n\ + adds r0, r2, 0x1\n\ + lsls r0, 16\n\ + lsrs r2, r0, 16\n\ + cmp r2, 0x5\n\ + bls _080CEA4C\n\ +_080CEA64:\n\ + movs r4, 0x1\n\ + ldr r0, _080CEAD0 @ =gUnknown_083D712C\n\ + mov r8, r0\n\ +_080CEA6A:\n\ + lsls r0, r4, 1\n\ + adds r0, r4\n\ + lsls r5, r0, 2\n\ + mov r1, r8\n\ + adds r0, r5, r1\n\ + ldrh r0, [r0]\n\ + bl AllocSpritePalette\n\ + lsls r0, 24\n\ + lsrs r3, r0, 24\n\ + adds r4, 0x1\n\ + mov r12, r4\n\ + cmp r3, 0xFF\n\ + beq _080CEAB2\n\ + lsls r0, r3, 20\n\ + movs r1, 0x80\n\ + lsls r1, 17\n\ + adds r0, r1\n\ + lsrs r3, r0, 16\n\ + movs r2, 0x1\n\ + ldr r7, _080CEAD4 @ =gPlttBufferFaded\n\ + ldr r6, _080CEAD0 @ =gUnknown_083D712C\n\ + adds r4, r5, 0\n\ +_080CEA98:\n\ + adds r1, r3, r2\n\ + lsls r1, 1\n\ + adds r1, r7\n\ + lsls r0, r2, 1\n\ + adds r0, r4\n\ + adds r0, r6\n\ + ldrh r0, [r0]\n\ + strh r0, [r1]\n\ + adds r0, r2, 0x1\n\ + lsls r0, 16\n\ + lsrs r2, r0, 16\n\ + cmp r2, 0x5\n\ + bls _080CEA98\n\ +_080CEAB2:\n\ + mov r1, r12\n\ + lsls r0, r1, 16\n\ + lsrs r4, r0, 16\n\ + cmp r4, 0x3\n\ + bls _080CEA6A\n\ + mov r0, r9\n\ + bl DestroyAnimVisualTask\n\ + pop {r3,r4}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_080CEAD0: .4byte gUnknown_083D712C\n\ +_080CEAD4: .4byte gPlttBufferFaded\n\ +.syntax divided\n"); +} +#endif + +void sub_80CEAD8(u8 taskId) +{ + u16 i; + for (i = 1; i < 4; i++) + FreeSpritePaletteByTag(gUnknown_083D712C[i][0]); + DestroyAnimVisualTask(taskId); } \ No newline at end of file -- cgit v1.2.3 From a7b9cce866424a702690414792913eec4e9383e5 Mon Sep 17 00:00:00 2001 From: "U-User-PC\\User" Date: Thu, 24 Aug 2017 14:21:37 -0400 Subject: decompiled up to sub_80CF7E0 --- src/battle_anim_80CA710.c | 697 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 697 insertions(+) (limited to 'src') diff --git a/src/battle_anim_80CA710.c b/src/battle_anim_80CA710.c index 7b54b9e7c..15c67e09f 100755 --- a/src/battle_anim_80CA710.c +++ b/src/battle_anim_80CA710.c @@ -84,6 +84,19 @@ void sub_80CE354(struct Sprite* sprite); void sub_80CE3B0(struct Sprite* sprite); void sub_80CE798(struct Sprite* sprite); void sub_80CE974(struct Sprite* sprite); +void sub_80CEC1C(struct Sprite* sprite); +void sub_80CED78(struct Sprite* sprite); +void sub_80CEEE8(struct Sprite* sprite); +void sub_80CF008(struct Sprite* sprite); +void sub_80CF088(struct Sprite* sprite); +void sub_80CF138(struct Sprite* sprite); +void sub_80CF158(struct Sprite* sprite); +void sub_80CF228(struct Sprite* sprite); +void sub_80CF264(struct Sprite* sprite); +void sub_80CF310(struct Sprite* sprite); +void sub_80CF490(struct Sprite* sprite); +void sub_80CF4B8(struct Sprite* sprite); +void sub_80CF6B4(struct Sprite* sprite); s16 sub_80CC338(struct Sprite* sprite); @@ -99,6 +112,8 @@ void sub_8078504(struct Sprite *sprite); void sub_807861C(struct Sprite *sprite); void sub_8078650(struct Sprite *sprite); void sub_8078394(struct Sprite *sprite); +void sub_80785E4(struct Sprite *sprite); +void sub_8078278(struct Sprite *sprite); extern void sub_8043DB0(); extern void sub_8043DFC(); @@ -127,8 +142,11 @@ void sub_80CDB60(u8 taskId); void sub_80CDD20(u8 taskId); void sub_80CE4D4(u8 taskId); void sub_80CE910(u8 taskId); +void sub_80CF514(u8 taskId); + void sub_80CC358(struct Task* task, u8 taskId); +void sub_80CEBC4(s16 a, s16 b, s16* c, s16* d, s8 e); void sub_80CA710(struct Sprite* sprite) { @@ -3570,4 +3588,683 @@ void sub_80CEAD8(u8 taskId) for (i = 1; i < 4; i++) FreeSpritePaletteByTag(gUnknown_083D712C[i][0]); DestroyAnimVisualTask(taskId); +} + +void sub_80CEB0C(struct Sprite* sprite) +{ + u8 index; + u8 a; + u8 b; + sub_8078650(sprite); + StartSpriteAnim(sprite, gBattleAnimArgs[0]); + if ((index = IndexOfSpritePaletteTag(gUnknown_083D712C[gBattleAnimArgs[1]][0])) != 0xFF) + sprite->oam.paletteNum = index; + sprite->data1 = gBattleAnimArgs[1]; + sprite->data2 = 0; + sprite->data3 = gBattleAnimArgs[2]; + if (IsContest()) + { + a = 0x30; + b = 0x28; + } + else + { + a = sub_8077ABC(gBattleAnimEnemyMonIndex, 2); + b = sub_8077ABC(gBattleAnimEnemyMonIndex, 3); + } + sprite->data4 = sprite->pos1.x << 4; + sprite->data5 = sprite->pos1.y << 4; + sub_80CEBC4(a - sprite->pos1.x, b - sprite->pos1.y, &sprite->data6, &sprite->data7, 0x28); + sprite->callback = sub_80CEC1C; +} + +void sub_80CEBC4(s16 a, s16 b, s16* c, s16* d, s8 e) +{ + int f; + int g; + if (a < 0) + e = -e; + f = a << 8; + g = f / e; + if (g == 0) + g = 1; + *c = f / g; + *d = (b << 8) / g; +} + +//grasswhistle music notes +void sub_80CEC1C(struct Sprite* sprite) +{ + int b; + s16 a; + int c; + u8 index; + sprite->data0++; + b = sprite->data0 * 5 - ((sprite->data0 * 5 / 256) << 8); + sprite->data4 += sprite->data6; + sprite->data5 += sprite->data7; + sprite->pos1.x = sprite->data4 >> 4; + sprite->pos1.y = sprite->data5 >> 4; + sprite->pos2.y = Sin(b, 15); + a = (u16)sprite->pos1.y; + c = (u16)sprite->pos1.x; + //SOMEBODY CLEAN THIS UP THIS IS MESSY AS HELL AND I'M PRETTY SURE I DID IT IN SOME TACKY WAY + if ((u32)((c + 16) << 16) > (0x110) << 16 || a < -16 || a > 0x80) + { + move_anim_8074EE0(sprite); + } + else + { + if(sprite->data3 && ++sprite->data2 > sprite->data3) + { + sprite->data2 = 0; + if (++sprite->data1 > 3) + sprite->data1 = 0; + index = IndexOfSpritePaletteTag(gUnknown_083D712C[sprite->data1][0]); + if (index != 0xFF) + sprite->oam.paletteNum = index; + } + } +} + +void sub_80CECE8(struct Sprite* sprite) +{ + int a; + if (GetBankSide(gBattleAnimPlayerMonIndex) == 1) + { + a = gBattleAnimArgs[1]; + (u16)gBattleAnimArgs[1] = -a; + } + sprite->pos1.x = sub_8077ABC(gBattleAnimPlayerMonIndex, 2) + gBattleAnimArgs[1]; + sprite->pos1.y = sub_8077ABC(gBattleAnimPlayerMonIndex, 3) + gBattleAnimArgs[2]; + StartSpriteAnim(sprite, gBattleAnimArgs[0]); + sprite->data2 = 0; + sprite->data3 = 0; + sprite->data4 = sprite->pos1.x << 4; + sprite->data5 = sprite->pos1.y << 4; + sprite->data6 = (gBattleAnimArgs[1] << 4) / 5; + sprite->data7 = (gBattleAnimArgs[2] << 7) / 5; + sprite->callback = sub_80CED78; +} + +void sub_80CED78(struct Sprite* sprite) +{ + sprite->data4 += sprite->data6; + sprite->data5 += sprite->data7; + sprite->pos1.x = sprite->data4 >> 4; + sprite->pos1.y = sprite->data5 >> 4; + if (sprite->data0 > 5 && sprite->data3 == 0) + { + sprite->data2 = (sprite->data2 + 16) & 0xFF; + sprite->pos2.x = Cos(sprite->data2, 18); + sprite->pos2.y = Sin(sprite->data2, 18); + if (sprite->data2 == 0) + sprite->data3 = 1; + } + if (++sprite->data0 == 0x30) + move_anim_8074EE0(sprite); +} + +void sub_80CEDF0(struct Sprite* sprite) +{ + s16 a; + if (gBattleAnimArgs[0] == 1) + { + sprite->oam.matrixNum = 8; + a = 16; + } + else + a = -16; + sprite->pos1.x = sub_8077ABC(gBattleAnimPlayerMonIndex, 2) + a; + sprite->pos1.y = sub_8077ABC(gBattleAnimPlayerMonIndex, 3) + 8; + sprite->data0 = 8; + sprite->callback = sub_80782D8; + oamt_set_x3A_32(sprite, move_anim_8072740); +} + +void sub_80CEE60(struct Sprite* sprite) +{ + s16 a; + u8 index; + sub_8078650(sprite); + sprite->pos1.y += 8; + StartSpriteAnim(sprite, gBattleAnimArgs[1]); + index = IndexOfSpritePaletteTag(gUnknown_083D712C[gBattleAnimArgs[2]][0]); + if (index != 0xFF) + sprite->oam.paletteNum = index; + a = (gBattleAnimArgs[0] == 0) ? 0xFFE0 : 0x20; + sprite->data0 = 40; + sprite->data1 = sprite->pos1.x; + sprite->data2 = a + sprite->data1; + sprite->data3 = sprite->pos1.y; + sprite->data4 = sprite->data3 - 40; + obj_translate_based_on_private_1_2_3_4(sprite); + sprite->data5 = gBattleAnimArgs[3]; + sprite->callback = sub_80CEEE8; +} + +void sub_80CEEE8(struct Sprite* sprite) +{ + if (sub_8078B5C(sprite) == 0) + { + s16 a; + a = Sin(sprite->data5, 8); + if (sprite->pos2.x < 0) + a = -a; + sprite->pos2.x += a; + sprite->pos2.y += Sin(sprite->data5, 4); + sprite->data5 = (sprite->data5 + 8) & 0xFF; + } + else + move_anim_8072740(sprite); +} + +void sub_80CEF44(u8 bank, struct Sprite* sprite) +{ + if (GetBankSide(bank) == 0) + sprite->pos1.x = sub_807A100(bank, 5) + 8; + else + sprite->pos1.x = sub_807A100(bank, 4) - 8; + sprite->pos1.y = sub_8077ABC(bank, 3) - (s16)sub_807A100(bank, 0) / 4; +} + +void sub_80CEF9C(struct Sprite* sprite) +{ + u8 a; + u8 bank; + if (gBattleAnimArgs[0] == 0) + bank = gBattleAnimPlayerMonIndex; + else + bank = gBattleAnimEnemyMonIndex; + sub_80CEF44(bank, sprite); + a = (GetBankSide(bank) == 0) ? 0 : 1; + sprite->data0 = gBattleAnimArgs[1]; + sprite->data1 = a + 2; + StartSpriteAnim(sprite, a); + oamt_set_x3A_32(sprite, sub_80CF008); + sprite->callback = sub_8078600; +} + +void sub_80CF008(struct Sprite* sprite) +{ + if (--sprite->data0 == 0) + { + oamt_set_x3A_32(sprite, move_anim_8072740); + StartSpriteAnim(sprite, sprite->data1); + sprite->callback = sub_8078600; + } +} + +void sub_80CF040(struct Sprite* sprite) +{ + u8 bank; + if (gBattleAnimArgs[0] == 0) + bank = gBattleAnimPlayerMonIndex; + else + bank = gBattleAnimEnemyMonIndex; + sub_80CEF44(bank, sprite); + sprite->data0 = 0; + oamt_set_x3A_32(sprite, sub_80CF088); + sprite->callback = sub_80785E4; +} + +void sub_80CF088(struct Sprite* sprite) +{ + if (++sprite->data0 > 16) + { + StartSpriteAffineAnim(sprite, 1); + oamt_set_x3A_32(sprite, move_anim_8074EE0); + sprite->callback = sub_80785E4; + } +} + +void sub_80CF0BC(struct Sprite* sprite) +{ + u8 bank; + if (gBattleAnimArgs[0] == 0) + bank = gBattleAnimPlayerMonIndex; + else + bank = gBattleAnimEnemyMonIndex; + sprite->pos1.x = sub_8077ABC(bank, 0); + sprite->pos1.y = sub_807A100(bank, 2); + if (sprite->pos1.y <= 9) + sprite->pos1.y = 10; + sprite->data0 = 1; + sprite->data1 = 0; + sprite->data2 = sprite->subpriority; + sprite->data3 = sprite->subpriority + 4; + sprite->data4 = 0; + oamt_set_x3A_32(sprite, sub_80CF138); + sprite->callback = sub_80785E4; +} + +void sub_80CF138(struct Sprite* sprite) +{ + if (++sprite->data4 > 12) + sprite->callback = sub_80CF158; +} + +void sub_80CF158(struct Sprite* sprite) +{ + s16 temp; + s16 temp2; + sprite->data1 += 4; + if (sprite->data1 > 0xFE) + { + if (--sprite->data0 == 0) + { + sprite->pos2.x = 0; + sprite->callback = sub_80CF088; + return; + } + else + sprite->data1 &= 0xFF; + } + if (sprite->data1 > 0x4F) + sprite->subpriority = sprite->data3; + if (sprite->data1 > 0x9F) + sprite->subpriority = sprite->data2; + temp = gSineTable[sprite->data1]; + sprite->pos2.x = (temp2 = temp >> 3) + (temp2 >> 1); +} + +void sub_80CF1C8(struct Sprite* sprite) +{ + u8 bank; + if (gBattleAnimArgs[0] == 0) + bank = gBattleAnimPlayerMonIndex; + else + bank = gBattleAnimEnemyMonIndex; + sub_80CEF44(bank, sprite); + if (GetBankSide(bank) == 0) + { + StartSpriteAnim(sprite, 0); + sprite->data0 = 2; + } + else + { + StartSpriteAnim(sprite, 1); + sprite->data0 = 3; + } + sprite->callback = sub_80CF228; +} + +void sub_80CF228(struct Sprite* sprite) +{ + if (++sprite->data1 > 10) + { + sprite->data1 = 0; + StartSpriteAnim(sprite, sprite->data0); + oamt_set_x3A_32(sprite, sub_80CF264); + sprite->callback = sub_8078600; + } +} + +void sub_80CF264(struct Sprite* sprite) +{ + if (++sprite->data1 > 5) + move_anim_8072740(sprite); +} + +void sub_80CF280(struct Sprite* sprite) +{ + sub_8078650(sprite); + sub_807867C(sprite, gBattleAnimArgs[0]); + sprite->pos1.y += gBattleAnimArgs[1]; + sprite->data1 = gBattleAnimArgs[2]; + sprite->data2 = gBattleAnimArgs[4]; + sprite->data3 = gBattleAnimArgs[5]; + sprite->data4 = gBattleAnimArgs[3]; + oamt_set_x3A_32(sprite, move_anim_8074EE0); + sprite->callback = sub_8078278; + sub_8078278(sprite); +} + +void sub_80CF2D0(struct Sprite* sprite) +{ + u8 bank; + if (gBattleAnimArgs[0] == 0) + bank = gBattleAnimPlayerMonIndex; + else + bank = gBattleAnimEnemyMonIndex; + sub_80CEF44(bank, sprite); + sprite->data0 = 0; + sprite->data1 = 0; + sprite->callback = sub_80CF310; +} + +void sub_80CF310(struct Sprite* sprite) +{ + switch (sprite->data0) + { + case 0: + sprite->pos2.y -= 3; + if (++sprite->data1 == 6) + sprite->data0++; + break; + case 1: + sprite->pos2.y += 3; + if (--sprite->data1 == 0) + sprite->data0++; + break; + case 2: + if (++sprite->data1 == 0x40) + move_anim_8072740(sprite); + break; + } +} + +void sub_80CF374(struct Sprite* sprite) +{ + s16 temp; + gSprites[sprite->data2].pos2.x += sprite->data1; + temp = sprite->data1; + sprite->data1 = -temp; + if (sprite->data0 == 0) + { + gSprites[sprite->data2].pos2.x = 0; + move_anim_8074EE0(sprite); + } + sprite->data0--; +} + +void sub_80CF3C4(struct Sprite* sprite) +{ + u8 a; + sprite->pos1.x = sub_8077ABC(gBattleAnimPlayerMonIndex, 2); + sprite->pos1.y = sub_8077ABC(gBattleAnimPlayerMonIndex, 3); + a = gObjectBankIDs[gBattleAnimEnemyMonIndex]; + if (GetBankSide(gBattleAnimPlayerMonIndex) != 0) + { + sprite->pos1.x -= gBattleAnimArgs[0]; + } + else + { + sprite->pos1.x += gBattleAnimArgs[0]; + } + sprite->pos1.y += gBattleAnimArgs[1]; + sprite->data0 = gBattleAnimArgs[2]; + sprite->data1 = gBattleAnimArgs[3]; + sprite->data2 = a; + sprite->callback = sub_80CF374; + sprite->invisible = 1; +} + +void sub_80CF458(struct Sprite* sprite) +{ + sub_80787B0(sprite, 1); + sprite->data0 = gBattleAnimArgs[2]; + sprite->data1 = gBattleAnimArgs[3]; + sprite->data5 = gBattleAnimArgs[4]; + sprite->callback = sub_80782D8; + oamt_set_x3A_32(sprite, sub_80CF490); +} + +void sub_80CF490(struct Sprite* sprite) +{ + sprite->data0 = sprite->data1; + sprite->data2 = sprite->pos1.x; + sprite->data4 = sprite->pos1.y + 15; + sprite->callback = sub_8078B34; + oamt_set_x3A_32(sprite, sub_80CF4B8); +} + +void sub_80CF4B8(struct Sprite* sprite) +{ + if (sprite->data5 == 0) + move_anim_8072740(sprite); + else + sprite->data5--; +} + +void sub_80CF4D8(u8 taskId) +{ + sub_8078E70(gObjectBankIDs[gBattleAnimPlayerMonIndex], 0); + gTasks[taskId].func = sub_80CF514; +} + +void sub_80CF514(u8 taskId) +{ + u8 a = gObjectBankIDs[gBattleAnimPlayerMonIndex]; + s16 b; + if (GetBankSide(gBattleAnimPlayerMonIndex) == 0) + { + b = -gTasks[taskId].data[0]; + } + else + { + b = gTasks[taskId].data[0]; + } + obj_id_set_rotscale(a, 0x100, 0x100, b); + if (gTasks[taskId].data[1] == 0) + { + gTasks[taskId].data[0] += 0xB0; + gSprites[a].pos2.y++; + } + else if (gTasks[taskId].data[1] == 1) + { + if (++gTasks[taskId].data[3] == 0x1E) + gTasks[taskId].data[1] = 2; + return; + } + else + { + gTasks[taskId].data[0] -= 0xB0; + gSprites[a].pos2.y--; + } + sub_8078F9C(a); + if (gTasks[taskId].data[0] == 0xF20 || gTasks[taskId].data[0] == 0) + { + if (gTasks[taskId].data[1] == 2) + { + sub_8078F40(a); + DestroyAnimVisualTask(taskId); + } + else + { + gTasks[taskId].data[1]++; + } + } +} + +void sub_80CF610(struct Sprite* sprite) +{ + sub_8078650(sprite); + sub_807867C(sprite, gBattleAnimArgs[0]); + sprite->pos1.y += gBattleAnimArgs[1]; + if (GetBankSide(gBattleAnimPlayerMonIndex) != 0) + { + sprite->hFlip = 1; + if (gBattleAnimArgs[2] != 0) + sprite->vFlip = 1; + } + else + { + if (gBattleAnimArgs[2] != 0) + sprite->vFlip = 1; + } + sprite->callback = sub_8078600; + oamt_set_x3A_32(sprite, move_anim_8072740); +} + +void sub_80CF690(struct Sprite* sprite) +{ + sub_80787B0(sprite, 0); + sprite->callback = sub_80785E4; + oamt_set_x3A_32(sprite, sub_80CF6B4); +} + +void sub_80CF6B4(struct Sprite* sprite) +{ + sprite->data0 = 6; + sprite->data2 = sprite->pos1.x; + sprite->data4 = sprite->pos1.y - 32; + sprite->callback = sub_8078B34; + oamt_set_x3A_32(sprite, move_anim_8072740); +} + +//sonic boom +#ifdef NONMATCHING +void sub_80CF6DC(struct Sprite* sprite) +{ + s16 a; + s16 b; + s16 c; + if (IsContest() != 0) + gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + else if (GetBankSide(gBattleAnimPlayerMonIndex) != 0) + { + gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + gBattleAnimArgs[1] = -gBattleAnimArgs[1]; + gBattleAnimArgs[3] = -gBattleAnimArgs[3]; + } + sub_80787B0(sprite, 1); + a = sub_8077ABC(gBattleAnimEnemyMonIndex, 2) + gBattleAnimArgs[2]; + b = sub_8077ABC(gBattleAnimEnemyMonIndex, 3) + gBattleAnimArgs[3]; + c = sub_80790F0(a - sprite->pos1.x, b - sprite->pos1.y); + c += 0xF000; + if (IsContest() != 0) + c -= 0x6000; + sub_8078FDC(sprite, 0, 0x100, 0x100, c); + sprite->data0 = gBattleAnimArgs[4]; + sprite->data2 = a; + sprite->data4 = b; + sprite->callback = sub_8078B34; + oamt_set_x3A_32(sprite, move_anim_8072740); +} +#else +__attribute__((naked)) +void sub_80CF6DC(struct Sprite* sprite) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r8\n\ + push {r7}\n\ + sub sp, 0x4\n\ + adds r5, r0, 0\n\ + bl IsContest\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _080CF700\n\ + ldr r1, _080CF6FC @ =gBattleAnimArgs\n\ + ldrh r0, [r1, 0x4]\n\ + negs r0, r0\n\ + strh r0, [r1, 0x4]\n\ + b _080CF722\n\ + .align 2, 0\n\ +_080CF6FC: .4byte gBattleAnimArgs\n\ +_080CF700:\n\ + ldr r0, _080CF7C8 @ =gBattleAnimPlayerMonIndex\n\ + ldrb r0, [r0]\n\ + bl GetBankSide\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _080CF722\n\ + ldr r1, _080CF7CC @ =gBattleAnimArgs\n\ + ldrh r0, [r1, 0x4]\n\ + negs r0, r0\n\ + strh r0, [r1, 0x4]\n\ + ldrh r0, [r1, 0x2]\n\ + negs r0, r0\n\ + strh r0, [r1, 0x2]\n\ + ldrh r0, [r1, 0x6]\n\ + negs r0, r0\n\ + strh r0, [r1, 0x6]\n\ +_080CF722:\n\ + adds r0, r5, 0\n\ + movs r1, 0x1\n\ + bl sub_80787B0\n\ + ldr r4, _080CF7D0 @ =gBattleAnimEnemyMonIndex\n\ + ldrb r0, [r4]\n\ + movs r1, 0x2\n\ + bl sub_8077ABC\n\ + lsls r0, 24\n\ + ldr r6, _080CF7CC @ =gBattleAnimArgs\n\ + lsrs r0, 24\n\ + ldrh r1, [r6, 0x4]\n\ + adds r0, r1\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + mov r8, r0\n\ + ldrb r0, [r4]\n\ + movs r1, 0x3\n\ + bl sub_8077ABC\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + ldrh r2, [r6, 0x6]\n\ + adds r0, r2\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + adds r7, r0, 0\n\ + ldrh r1, [r5, 0x20]\n\ + mov r2, r8\n\ + lsls r0, r2, 16\n\ + asrs r0, 16\n\ + subs r0, r1\n\ + lsls r0, 16\n\ + asrs r0, 16\n\ + ldrh r2, [r5, 0x22]\n\ + lsls r1, r7, 16\n\ + asrs r1, 16\n\ + subs r1, r2\n\ + lsls r1, 16\n\ + asrs r1, 16\n\ + bl sub_80790F0\n\ + lsls r0, 16\n\ + movs r1, 0xF0\n\ + lsls r1, 24\n\ + adds r0, r1\n\ + lsrs r4, r0, 16\n\ + bl IsContest\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _080CF794\n\ + ldr r2, _080CF7D4 @ =0xffffa000\n\ + adds r0, r4, r2\n\ + lsls r0, 16\n\ + lsrs r4, r0, 16\n\ +_080CF794:\n\ + movs r3, 0x80\n\ + lsls r3, 1\n\ + str r4, [sp]\n\ + adds r0, r5, 0\n\ + movs r1, 0\n\ + adds r2, r3, 0\n\ + bl sub_8078FDC\n\ + ldrh r0, [r6, 0x8]\n\ + strh r0, [r5, 0x2E]\n\ + mov r0, r8\n\ + strh r0, [r5, 0x32]\n\ + strh r7, [r5, 0x36]\n\ + ldr r0, _080CF7D8 @ =sub_8078B34\n\ + str r0, [r5, 0x1C]\n\ + ldr r1, _080CF7DC @ =move_anim_8072740\n\ + adds r0, r5, 0\n\ + bl oamt_set_x3A_32\n\ + add sp, 0x4\n\ + pop {r3}\n\ + mov r8, r3\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_080CF7C8: .4byte gBattleAnimPlayerMonIndex\n\ +_080CF7CC: .4byte gBattleAnimArgs\n\ +_080CF7D0: .4byte gBattleAnimEnemyMonIndex\n\ +_080CF7D4: .4byte 0xffffa000\n\ +_080CF7D8: .4byte sub_8078B34\n\ +_080CF7DC: .4byte move_anim_8072740\n\ + .syntax divided\n"); +} +#endif + +void sub_80CF7E0(struct Sprite* sprite) +{ + s16 a = sprite->data0; + sprite->data0--; + if (a <= 0) + { + gTasks[sprite->data7].data[1]--; + DestroySprite(sprite); + } } \ No newline at end of file -- cgit v1.2.3 From eca7e71ab94cc4067e9e78ab5a752dca5eb0f0ca Mon Sep 17 00:00:00 2001 From: "U-User-PC\\User" Date: Thu, 24 Aug 2017 23:35:36 -0400 Subject: decompiled up to sub_80CFA20 --- src/battle_anim_80CA710.c | 119 ++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 115 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/battle_anim_80CA710.c b/src/battle_anim_80CA710.c index 15c67e09f..74f28c83e 100755 --- a/src/battle_anim_80CA710.c +++ b/src/battle_anim_80CA710.c @@ -15,11 +15,13 @@ struct __attribute__((packed)) Some3ByteStruct { u8 unkArr[3]; }; +extern u8 gBanksBySide[]; extern s16 gBattleAnimArgs[8]; extern u8 gBattleAnimPlayerMonIndex; extern u8 gBattleAnimEnemyMonIndex; extern struct SpriteTemplate gSpriteTemplate_83D631C; extern struct SpriteTemplate gSpriteTemplate_83D6884; +extern struct SpriteTemplate gSpriteTemplate_83D74BC; extern struct SpriteTemplate gBattleAnimSpriteTemplate_83D6FC8; extern struct SpriteTemplate gBattleAnimSpriteTemplate_83D6FF8; extern s16 gUnknown_03000728[]; @@ -30,6 +32,7 @@ extern u8 gObjectBankIDs[]; extern u8 gNoOfAllBanks; extern u8 gHealthboxIDs[]; extern u16 gUnknown_083D712C[4][6]; +extern u16 gBattleTypeFlags; void sub_80CA768(struct Sprite* sprite); void sub_80CA8B4(struct Sprite* sprite); @@ -130,6 +133,8 @@ u32 sub_80791A8(u8 a1, u8 a2, u8 a3, u8 a4, u8 a5, u8 a6, u8 a7); u32 sub_80792C0(u8 a1, u8 a2, u8 a3, u8 a4); s16 duplicate_obj_of_side_rel2move_in_transparent_mode(u8 a1); void obj_delete_but_dont_free_vram(struct Sprite *sprite); +s16 sub_81174E0(s16 a); +s16 sub_81174C4(s16 a, s16 b); void move_anim_8074EE0(struct Sprite *sprite); bool8 sub_8078718(struct Sprite *sprite); @@ -4260,11 +4265,117 @@ _080CF7DC: .4byte move_anim_8072740\n\ void sub_80CF7E0(struct Sprite* sprite) { - s16 a = sprite->data0; - sprite->data0--; - if (a <= 0) + if (sprite->data0-- <= 0) { gTasks[sprite->data7].data[1]--; DestroySprite(sprite); } -} \ No newline at end of file +} + +void sub_80CF814(struct Sprite* sprite) +{ + struct Task* task = &gTasks[sprite->data7]; + if (sprite->data0 > task->data[5]) + { + sprite->data5 += sprite->data3; + sprite->data6 += sprite->data4; + } + else + { + sprite->data5 -= sprite->data3; + sprite->data6 -= sprite->data4; + } + sprite->data1 += sprite->data5; + sprite->data2 += sprite->data6; + if (1 & task->data[7]) + sprite->pos2.x = ((u16)sprite->data1 >> 8) * -1; + else + sprite->pos2.x = (u16)sprite->data1 >> 8; + if (1 & task->data[8]) + sprite->pos2.y = ((u16)sprite->data2 / 256u) * -1; + else + sprite->pos2.y = (u16)sprite->data2 / 256u; + if (sprite->data0-- <= 0) + { + sprite->data0 = 30; + sprite->callback = sub_80CF7E0; + } +} + +//air cutter +void sub_80CF8B8(struct Sprite* sprite) +{ + s16 a; + s16 b; + s16 c; + struct Task* task = &gTasks[sprite->data7]; + sprite->data1 += (-2 & task->data[7]); + sprite->data2 += (-2 & task->data[8]); + if (1 & task->data[7]) + sprite->pos2.x = ((u16)sprite->data1 >> 8) * -1; + else + sprite->pos2.x = (u16)sprite->data1 >> 8; + if (1 & task->data[8]) + sprite->pos2.y = ((u16)sprite->data2 / 256u) * -1; + else + sprite->pos2.y = (u16)sprite->data2 / 256u; + if (sprite->data0-- <= 0) + { + sprite->data0 = 8; + task->data[5] = 4; + a = sub_81174E0(0x1000); + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.y = 0; + sprite->pos2.x = 0; + if (task->data[11] >= sprite->pos1.x) + b = (task->data[11] - sprite->pos1.x) << 8; + else + b = (sprite->pos1.x - task->data[11]) << 8; + if (task->data[12] >= sprite->pos1.y) + c = (task->data[12] - sprite->pos1.y) << 8; + else + c = (sprite->pos1.y - task->data[12]) << 8; + sprite->data2 = 0; + sprite->data1 = 0; + sprite->data6 = 0; + sprite->data5 = 0; + sprite->data3 = sub_81174C4(sub_81174C4(b, a), sub_81174E0(0x1C0)); + sprite->data4 = sub_81174C4(sub_81174C4(c, a), sub_81174E0(0x1C0)); + sprite->callback = sub_80CF814; + } +} + +void sub_80CF9F8(u8 taskId) +{ + if (gTasks[taskId].data[1] == 0) + DestroyAnimVisualTask(taskId); +} + +void sub_80CFA20(u8 taskId) +{ + if (gTasks[taskId].data[0]-- <= 0) + { + u8 spriteId; + struct Sprite* sprite; + spriteId = CreateSprite(&gSpriteTemplate_83D74BC, gTasks[taskId].data[9], gTasks[taskId].data[10], gTasks[taskId].data[2] - gTasks[taskId].data[1]); + sprite = &gSprites[spriteId]; + switch (gTasks[taskId].data[4]) + { + case 1: + sprite->oam.matrixNum |= 24; + break; + case 2: + sprite->oam.matrixNum = 8; + break; + } + sprite->data0 = gTasks[taskId].data[5] - gTasks[taskId].data[6]; + sprite->data7 = taskId; + gTasks[taskId].data[gTasks[taskId].data[1] + 13] = spriteId; + gTasks[taskId].data[0] = gTasks[taskId].data[3]; + gTasks[taskId].data[1]++; + PlaySE12WithPanning(0x9A, sub_8076F98(-0x3F)); + if (gTasks[taskId].data[1] > 2) + gTasks[taskId].func = sub_80CF9F8; + } +} -- cgit v1.2.3 From f91c42a00d4297f772715896437608bed2a219fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BAl=20Pe=C3=B1acoba?= Date: Fri, 25 Aug 2017 10:25:51 +0200 Subject: - try to match case 4: sub_80ED858 - skip sub_80EEA0C - sub_80EEC10 --- src/pokenav_before.c | 413 ++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 392 insertions(+), 21 deletions(-) (limited to 'src') diff --git a/src/pokenav_before.c b/src/pokenav_before.c index e782adf7c..c9e4fbe39 100644 --- a/src/pokenav_before.c +++ b/src/pokenav_before.c @@ -14,6 +14,8 @@ #include "songs.h" #include "flags.h" +extern u8 ewram[]; + struct UnknownPokenav0 { /* 0x0000 */ u8 fill0000[0x0300]; /* 0x0300 */ void (*var300)(void); @@ -50,9 +52,12 @@ struct UnknownPokenav0 { /* 0x876E */ u8 var876E; /* 0x876F */ u8 fill876F[0x5]; /* 0x8774 */ s16 var8774; - /* 0x8776 */ u8 fill8776[0x62]; + /* 0x8776 */ u8 fill8776[0x55]; + /* 0x87CB */ u8 var87CB; + /* 0x87CC */ u8 fill87CC[0xC]; /* 0x87D8 */ u8 var87D8; - /* 0x87D9 */ u8 fill87D9[0x3]; + /* 0x87D9 */ u8 fill87D9[0x1]; + /* 0x87DA */ s16 var87DA; /* 0x87DC */ s16 var87DC; /* 0x87DE */ u8 fill87DE[0x4a]; /* 0x8828 */ u8 var8828; @@ -70,10 +75,16 @@ struct UnknownPokenav0 { /* 0xD162 */ u8 varD162; }; - -extern u8 ewram[]; #define ewram0 (*(struct UnknownPokenav0*)(ewram + 0)) +struct UnknownPokenav0_1 { + u8 fill6dad[0x6dad]; + s8 var6dad; + s8 var6dae; +}; + +#define ewram0_1 (*(struct UnknownPokenav0_1*)(ewram + 0)) + extern void sub_80F1A90(); extern bool8 sub_80F1AC4(); extern void sub_80F36F0(); @@ -1315,7 +1326,6 @@ void sub_80ED620() { } #if 0 - void sub_80F4F78(); void sub_80F0174(u32); bool8 sub_80F4FB4(); @@ -1327,6 +1337,7 @@ void sub_80F2F48(); void sub_80F3CE8(); void sub_80F3614(); void sub_80F357C(); +void sub_80F4FDC(); void sub_80ED858() { u8 var1; @@ -1351,23 +1362,90 @@ void sub_80ED858() { ewram0.var304 = 0x4; break; case 4: + if ( (gMain.heldKeys & 0x40) && (ewram0.var87CB) && (!(ewram0.var76aa) || (ewram0.var87DC)) ) { + PlaySE(0x5); + sub_80F5060(0x1); + move_anim_execute(); + ewram0.var304 = 0x5; + } + else if ( (gMain.heldKeys & 0x80) && (ewram0.var87CB) && (!(ewram0.var76aa) || (ewram0.var76aa >= ewram0.var87DC)) ) { + PlaySE(0x5); + sub_80F5060(0); + move_anim_execute(); + ewram0.var304 = 0x5; + } + if (gMain.newKeys & B_BUTTON) { + PlaySE(0x5); + sub_80F4FDC(); + move_anim_execute(); + ewram0.var304 = 0x9; + } + else if (gMain.newKeys & A_BUTTON) { + if (ewram0.var76aa) { + if (ewram0.var6dac) { + PlaySE(0x5); + ewram0.var304 = 0x7; + } + } + else if ((ewram0.var87DC == ewram0.var87DA - 1)) { + PlaySE(0x5); + ewram0.var304 = 0x9; + } + } + +/* + if (gMain.heldKeys & 0x40) { + if (ewram0.var87CB) { + if (ewram0.var76aa) { + if (!ewram0.var87DC) goto label1; + } + PlaySE(0x5); + sub_80F5060(0x1); + move_anim_execute(); + ewram0.var304 = 0x5; + + } + else goto label1; + } + else goto label1; + break; +label1: + if (gMain.heldKeys & 0x80) { + if (ewram0.var87CB) { + if (ewram0.var76aa) { + if (!(ewram0.var76aa < ewram0.var87DC)) goto label2; + } + PlaySE(0x5); + sub_80F5060(0x1); + move_anim_execute(); + ewram0.var304 = 0x5; + } + else goto label2; + } + else goto label2; + break; +label2: + if (gMain.newKeys & B_BUTTON) { + PlaySE(0x5); + sub_80F4FDC(); + move_anim_execute(); + ewram0.var304 = 0x9; + } + else if (gMain.newKeys & A_BUTTON) { + if (!ewram0.var76aa) { + if ((ewram0.var87DC == ewram0.var87DA - 1)) { + PlaySE(0x5); + ewram0.var304 = 0x9; + } + } + else { + PlaySE(0x5); + ewram0.var304 = 0x9; + } + } +*/ break; -// if (!(gMain.heldKeys & 0x40) && !(gMain.heldKeys & 0x80) && (gMain.newKeys & B_BUTTON)) { -// PlaySE(0x5); -// sub_80F4FDC(); -// move_anim_execute(); -// ewram0.var304 = 0x9; -// } -// else if (!ewram0.var87CB && !(gMain.heldKeys & 0x80) && (gMain.newKeys & B_BUTTON)) { -// PlaySE(0x5); -// sub_80F4FDC(); -// move_anim_execute(); -// ewram0.var304 = 0x9; -// } -// else if (ewram0.var87DC) { -// if (gMain.heldKeys & 0x80) -// -// } + case 5: if (gpu_sync_bg_show()) return; sub_80F3D00(); @@ -2440,3 +2518,296 @@ void sub_80EE9C0(u8 param1, u8 param2, u8 param3) { ewram0.var6e16 = 0; ewram0.var6e17 = param3; } + +#if 0 +bool8 sub_80EEA0C() { + switch (ewram0.var6e16) { + case 0: + if (sub_80F1F10()) return 1; + if (ewram0.var6e17 != 0xC) { + ewram0.var6e16 = 0x1; + return 1; + } + else { + ewram0.var6e16 = 0x3; + return 1; + } + case 1: + sub_80F2C80(ewram0.var6e17); + ewram0.var6e16++; + case 2: + if (sub_80F2CBC(ewram0.var6e17)) return 1; + ewram0.var6e16++; + case 3: + + } +} +#else +__attribute__((naked)) +bool8 sub_80EEA0C() { + asm_unified( + "push {r4,lr}\n\ + ldr r1, _080EEA28 @ =0x02000000\n\ + ldr r2, _080EEA2C @ =0x00006e16\n\ + adds r0, r1, r2\n\ + ldrb r0, [r0]\n\ + adds r3, r1, 0\n\ + cmp r0, 0x8\n\ + bls _080EEA1E\n\ + b _080EEBFA\n\ +_080EEA1E:\n\ + lsls r0, 2\n\ + ldr r1, _080EEA30 @ =_080EEA34\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + mov pc, r0\n\ + .align 2, 0\n\ +_080EEA28: .4byte 0x02000000\n\ +_080EEA2C: .4byte 0x00006e16\n\ +_080EEA30: .4byte _080EEA34\n\ + .align 2, 0\n\ +_080EEA34:\n\ + .4byte _080EEA58\n\ + .4byte _080EEA98\n\ + .4byte _080EEAAE\n\ + .4byte _080EEAD4\n\ + .4byte _080EEB3E\n\ + .4byte _080EEB68\n\ + .4byte _080EEB88\n\ + .4byte _080EEBAC\n\ + .4byte _080EEBE4\n\ +_080EEA58:\n\ + bl sub_80F1F10\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _080EEA64\n\ + b _080EEC08\n\ +_080EEA64:\n\ + ldr r1, _080EEA7C @ =0x02000000\n\ + ldr r4, _080EEA80 @ =0x00006e17\n\ + adds r0, r1, r4\n\ + ldrb r0, [r0]\n\ + cmp r0, 0xC\n\ + beq _080EEA88\n\ + ldr r0, _080EEA84 @ =0x00006e16\n\ + adds r1, r0\n\ + movs r0, 0x1\n\ + strb r0, [r1]\n\ + b _080EEC08\n\ + .align 2, 0\n\ +_080EEA7C: .4byte 0x02000000\n\ +_080EEA80: .4byte 0x00006e17\n\ +_080EEA84: .4byte 0x00006e16\n\ +_080EEA88:\n\ + ldr r2, _080EEA94 @ =0x00006e16\n\ + adds r1, r2\n\ + movs r0, 0x3\n\ + strb r0, [r1]\n\ + b _080EEC08\n\ + .align 2, 0\n\ +_080EEA94: .4byte 0x00006e16\n\ +_080EEA98:\n\ + ldr r4, _080EEAC8 @ =0x02000000\n\ + ldr r1, _080EEACC @ =0x00006e17\n\ + adds r0, r4, r1\n\ + ldrb r0, [r0]\n\ + bl sub_80F2C80\n\ + ldr r2, _080EEAD0 @ =0x00006e16\n\ + adds r4, r2\n\ + ldrb r0, [r4]\n\ + adds r0, 0x1\n\ + strb r0, [r4]\n\ +_080EEAAE:\n\ + ldr r4, _080EEAC8 @ =0x02000000\n\ + ldr r1, _080EEACC @ =0x00006e17\n\ + adds r0, r4, r1\n\ + ldrb r0, [r0]\n\ + bl sub_80F2CBC\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _080EEAC2\n\ + b _080EEC08\n\ +_080EEAC2:\n\ + ldr r2, _080EEAD0 @ =0x00006e16\n\ + adds r1, r4, r2\n\ + b _080EEB76\n\ + .align 2, 0\n\ +_080EEAC8: .4byte 0x02000000\n\ +_080EEACC: .4byte 0x00006e17\n\ +_080EEAD0: .4byte 0x00006e16\n\ +_080EEAD4:\n\ + adds r2, r3, 0\n\ + ldr r4, _080EEAF8 @ =0x00006e15\n\ + adds r0, r2, r4\n\ + ldrb r1, [r0]\n\ + subs r4, 0x68\n\ + adds r0, r2, r4\n\ + strb r1, [r0]\n\ + ldr r1, _080EEAFC @ =0x00006e14\n\ + adds r0, r2, r1\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x1\n\ + beq _080EEB14\n\ + cmp r0, 0x1\n\ + bgt _080EEB00\n\ + cmp r0, 0\n\ + beq _080EEB06\n\ + b _080EEB28\n\ + .align 2, 0\n\ +_080EEAF8: .4byte 0x00006e15\n\ +_080EEAFC: .4byte 0x00006e14\n\ +_080EEB00:\n\ + cmp r0, 0x2\n\ + beq _080EEB20\n\ + b _080EEB28\n\ +_080EEB06:\n\ + ldr r4, _080EEB10 @ =0x00006dae\n\ + adds r1, r2, r4\n\ + movs r0, 0x5\n\ + b _080EEB26\n\ + .align 2, 0\n\ +_080EEB10: .4byte 0x00006dae\n\ +_080EEB14:\n\ + ldr r0, _080EEB1C @ =0x00006dae\n\ + adds r1, r2, r0\n\ + movs r0, 0x3\n\ + b _080EEB26\n\ + .align 2, 0\n\ +_080EEB1C: .4byte 0x00006dae\n\ +_080EEB20:\n\ + ldr r2, _080EEB58 @ =0x00006dae\n\ + adds r1, r3, r2\n\ + movs r0, 0x6\n\ +_080EEB26:\n\ + strb r0, [r1]\n\ +_080EEB28:\n\ + ldr r4, _080EEB5C @ =0x02000000\n\ + ldr r1, _080EEB60 @ =0x00006e14\n\ + adds r0, r4, r1\n\ + ldrb r0, [r0]\n\ + bl sub_80F1B8C\n\ + ldr r2, _080EEB64 @ =0x00006e16\n\ + adds r4, r2\n\ + ldrb r0, [r4]\n\ + adds r0, 0x1\n\ + strb r0, [r4]\n\ +_080EEB3E:\n\ + ldr r4, _080EEB5C @ =0x02000000\n\ + ldr r1, _080EEB60 @ =0x00006e14\n\ + adds r0, r4, r1\n\ + ldrb r0, [r0]\n\ + bl sub_80F1BC8\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + bne _080EEC08\n\ + ldr r2, _080EEB64 @ =0x00006e16\n\ + adds r1, r4, r2\n\ + b _080EEB76\n\ + .align 2, 0\n\ +_080EEB58: .4byte 0x00006dae\n\ +_080EEB5C: .4byte 0x02000000\n\ +_080EEB60: .4byte 0x00006e14\n\ +_080EEB64: .4byte 0x00006e16\n\ +_080EEB68:\n\ + bl sub_8055870\n\ + cmp r0, 0\n\ + bne _080EEC08\n\ + ldr r1, _080EEB80 @ =0x02000000\n\ + ldr r4, _080EEB84 @ =0x00006e16\n\ + adds r1, r4\n\ +_080EEB76:\n\ + ldrb r0, [r1]\n\ + adds r0, 0x1\n\ + strb r0, [r1]\n\ + b _080EEC08\n\ + .align 2, 0\n\ +_080EEB80: .4byte 0x02000000\n\ +_080EEB84: .4byte 0x00006e16\n\ +_080EEB88:\n\ + bl sub_80F1DF0\n\ + ldr r4, _080EEBA0 @ =0x02000000\n\ + ldr r1, _080EEBA4 @ =0x00006e14\n\ + adds r0, r4, r1\n\ + ldrb r0, [r0]\n\ + bl sub_80EF490\n\ + ldr r2, _080EEBA8 @ =0x00006e16\n\ + adds r4, r2\n\ + b _080EEBCC\n\ + .align 2, 0\n\ +_080EEBA0: .4byte 0x02000000\n\ +_080EEBA4: .4byte 0x00006e14\n\ +_080EEBA8: .4byte 0x00006e16\n\ +_080EEBAC:\n\ + bl sub_80F1E50\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + bne _080EEC08\n\ + ldr r4, _080EEBD4 @ =0x02000000\n\ + ldr r1, _080EEBD8 @ =0x00006e14\n\ + adds r0, r4, r1\n\ + ldrb r0, [r0]\n\ + ldr r2, _080EEBDC @ =0x00006dad\n\ + adds r1, r4, r2\n\ + ldrb r1, [r1]\n\ + bl sub_80EF428\n\ + ldr r0, _080EEBE0 @ =0x00006e16\n\ + adds r4, r0\n\ +_080EEBCC:\n\ + ldrb r0, [r4]\n\ + adds r0, 0x1\n\ + strb r0, [r4]\n\ + b _080EEC08\n\ + .align 2, 0\n\ +_080EEBD4: .4byte 0x02000000\n\ +_080EEBD8: .4byte 0x00006e14\n\ +_080EEBDC: .4byte 0x00006dad\n\ +_080EEBE0: .4byte 0x00006e16\n\ +_080EEBE4:\n\ + bl sub_80EF4F8\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + bne _080EEC08\n\ + ldr r1, _080EEC00 @ =0x02000000\n\ + ldr r2, _080EEC04 @ =0x00006e16\n\ + adds r1, r2\n\ + ldrb r0, [r1]\n\ + adds r0, 0x1\n\ + strb r0, [r1]\n\ +_080EEBFA:\n\ + movs r0, 0\n\ + b _080EEC0A\n\ + .align 2, 0\n\ +_080EEC00: .4byte 0x02000000\n\ +_080EEC04: .4byte 0x00006e16\n\ +_080EEC08:\n\ + movs r0, 0x1\n\ +_080EEC0A:\n\ + pop {r4}\n\ + pop {r1}\n\ + bx r1\n" + + ); +} +#endif + +// var6dad and var6dae must be s8 in this func +bool8 sub_80EEC10() { + if (gMain.newKeys& 0x40) { + do { + if (--ewram0_1.var6dad < 0) { + ewram0_1.var6dad = ewram0_1.var6dae - 1; + } + + } while (!ewram0.var6db2[ewram0_1.var6dad]); + return 1; + } + if (gMain.newKeys & 0x80) { + do { + if (++ewram0_1.var6dad >= ewram0_1.var6dae) { + ewram0_1.var6dad = 0; + } + } while (!ewram0.var6db2[ewram0_1.var6dad]); + return 1; + } + return 0; +} -- cgit v1.2.3 From b0919f5410589bf21f0a32f4e6350b687900a476 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BAl=20Pe=C3=B1acoba?= Date: Fri, 25 Aug 2017 10:33:33 +0200 Subject: sub_80EEC90 --- src/pokenav_before.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/pokenav_before.c b/src/pokenav_before.c index c9e4fbe39..de327e07f 100644 --- a/src/pokenav_before.c +++ b/src/pokenav_before.c @@ -2792,7 +2792,7 @@ _080EEC0A:\n\ // var6dad and var6dae must be s8 in this func bool8 sub_80EEC10() { - if (gMain.newKeys& 0x40) { + if (gMain.newKeys & 0x40) { do { if (--ewram0_1.var6dad < 0) { ewram0_1.var6dad = ewram0_1.var6dae - 1; @@ -2811,3 +2811,19 @@ bool8 sub_80EEC10() { } return 0; } + +bool8 sub_80EEC90() { + if (gMain.newKeys & 0x40) { + if (--ewram0_1.var6dad < 0) { + ewram0_1.var6dad = ewram0_1.var6dae - 1; + } + return 1; + } + if (gMain.newKeys & 0x80) { + if (++ewram0_1.var6dad >= ewram0_1.var6dae) { + ewram0_1.var6dad = 0; + } + return 1; + } + return 0; +} -- cgit v1.2.3 From a56d61661ce7edf2805cd4b887d2478c2f276bd1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BAl=20Pe=C3=B1acoba?= Date: Fri, 25 Aug 2017 10:37:49 +0200 Subject: sub_80EED0C --- src/pokenav_before.c | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'src') diff --git a/src/pokenav_before.c b/src/pokenav_before.c index de327e07f..903c6c205 100644 --- a/src/pokenav_before.c +++ b/src/pokenav_before.c @@ -2827,3 +2827,7 @@ bool8 sub_80EEC90() { } return 0; } + +void sub_80EED0C() { + REG_DISPCNT = 512; +} -- cgit v1.2.3 From 81f5319df003163215c3fbd4716051048abe53f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BAl=20Pe=C3=B1acoba?= Date: Fri, 25 Aug 2017 10:39:59 +0200 Subject: sub_80EED1C --- src/pokenav_before.c | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'src') diff --git a/src/pokenav_before.c b/src/pokenav_before.c index 903c6c205..b181068e8 100644 --- a/src/pokenav_before.c +++ b/src/pokenav_before.c @@ -2831,3 +2831,7 @@ bool8 sub_80EEC90() { void sub_80EED0C() { REG_DISPCNT = 512; } + +void sub_80EED1C() { + REG_DISPCNT = 0x92 << 5; +} -- cgit v1.2.3 From 70a73a6ac8adbbf036b5560957db7de56ca77adb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BAl=20Pe=C3=B1acoba?= Date: Fri, 25 Aug 2017 10:51:18 +0200 Subject: sub_80EED2C --- src/pokenav_before.c | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/pokenav_before.c b/src/pokenav_before.c index b181068e8..83ed3e0b5 100644 --- a/src/pokenav_before.c +++ b/src/pokenav_before.c @@ -275,7 +275,7 @@ void sub_80EF248(); bool8 sub_80EF284(); void sub_80F1B8C(); bool8 sub_80F1BC8(u32 unk); -void sub_80EED2C(); +void sub_80EED2C(u8); void sub_80F1DF0(); bool8 sub_80F1E50(); void sub_80EF428(); @@ -2835,3 +2835,24 @@ void sub_80EED0C() { void sub_80EED1C() { REG_DISPCNT = 0x92 << 5; } + +void sub_80EED2C(u8 param1) { + switch (param1) { + case 0: + REG_DISPCNT = 0xFA << 5; + break; + case 1: + REG_DISPCNT = 0x1741; + break; + case 3: + case 4: + REG_DISPCNT = 0xFA << 5; + break; + case 2: + REG_DISPCNT = 0x7b40; + break; + case 5: + REG_DISPCNT = 0xFD << 6; + break; + } +} -- cgit v1.2.3 From 68d07ec4dfd6842e67760c4da6261a62c1456084 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BAl=20Pe=C3=B1acoba?= Date: Fri, 25 Aug 2017 11:00:29 +0200 Subject: sub_80EED9C --- src/pokenav_before.c | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'src') diff --git a/src/pokenav_before.c b/src/pokenav_before.c index 83ed3e0b5..c80aaa237 100644 --- a/src/pokenav_before.c +++ b/src/pokenav_before.c @@ -2856,3 +2856,13 @@ void sub_80EED2C(u8 param1) { break; } } + +void (*gUnknown_03000744)(void); +void _call_via_r1(); +void sub_80EEDC4(); + +void sub_80EED9C() { + gUnknown_03000744 = ewram0.var300; + ewram0.var300 = &sub_80EEDC4; + _call_via_r1(); +} -- cgit v1.2.3 From 3809edbf86b4709b66bf73db76b788adfd88d251 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BAl=20Pe=C3=B1acoba?= Date: Fri, 25 Aug 2017 11:02:41 +0200 Subject: sub_80EEDC4 --- src/pokenav_before.c | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'src') diff --git a/src/pokenav_before.c b/src/pokenav_before.c index c80aaa237..28be782de 100644 --- a/src/pokenav_before.c +++ b/src/pokenav_before.c @@ -2866,3 +2866,9 @@ void sub_80EED9C() { ewram0.var300 = &sub_80EEDC4; _call_via_r1(); } + +void sub_80EEDC4() { + if (sub_8055870() != 0x1) { + ewram0.var300 = gUnknown_03000744; + } +} -- cgit v1.2.3 From e07bb92571b1657f564e4d61aae8ba1610c7f3a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BAl=20Pe=C3=B1acoba?= Date: Fri, 25 Aug 2017 11:08:39 +0200 Subject: sub_80EEDE8 --- src/pokenav_before.c | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'src') diff --git a/src/pokenav_before.c b/src/pokenav_before.c index 28be782de..4e4c8f31d 100644 --- a/src/pokenav_before.c +++ b/src/pokenav_before.c @@ -2872,3 +2872,12 @@ void sub_80EEDC4() { ewram0.var300 = gUnknown_03000744; } } + +void sub_80EEDE8() { + REG_BG0HOFS = 0; + REG_BG0VOFS = 0; + REG_BG2VOFS = 0; + REG_BG2HOFS = 0; + REG_BG3HOFS = 0; + REG_BG3VOFS = 0; +} -- cgit v1.2.3 From 50b94bc031db1d183d7781ad6189be81ae40cdb7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BAl=20Pe=C3=B1acoba?= Date: Fri, 25 Aug 2017 11:14:21 +0200 Subject: sub_80EEE08 --- src/pokenav_before.c | 3 +++ 1 file changed, 3 insertions(+) (limited to 'src') diff --git a/src/pokenav_before.c b/src/pokenav_before.c index 4e4c8f31d..518f6f866 100644 --- a/src/pokenav_before.c +++ b/src/pokenav_before.c @@ -2881,3 +2881,6 @@ void sub_80EEDE8() { REG_BG3HOFS = 0; REG_BG3VOFS = 0; } +void sub_80EEE08() { + gUnknown_083DFEC4->unkD160 = 0; +} -- cgit v1.2.3 From 09fcf47bebf471672f66bd61b6e57b0c18e22f38 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BAl=20Pe=C3=B1acoba?= Date: Fri, 25 Aug 2017 11:19:54 +0200 Subject: sub_80EEE20 --- src/pokenav_before.c | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'src') diff --git a/src/pokenav_before.c b/src/pokenav_before.c index 518f6f866..8804e11ba 100644 --- a/src/pokenav_before.c +++ b/src/pokenav_before.c @@ -2881,6 +2881,16 @@ void sub_80EEDE8() { REG_BG3HOFS = 0; REG_BG3VOFS = 0; } + void sub_80EEE08() { + // Here i've used .h struct instead of .c struct gUnknown_083DFEC4->unkD160 = 0; } + +void sub_80EEE20() { + // Here i've used .h struct instead of .c struct + gUnknown_083DFEC4->unkD160 = 0; + if (!gUnknown_083DFEC4->unk6DAC) { + while (sub_80EEE54()); + } +} -- cgit v1.2.3 From d844354e116e2051d601bc647d666a981725e08e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BAl=20Pe=C3=B1acoba?= Date: Fri, 25 Aug 2017 11:56:56 +0200 Subject: sub_80EEE54 --- src/pokenav_before.c | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) (limited to 'src') diff --git a/src/pokenav_before.c b/src/pokenav_before.c index 8804e11ba..b027f2a1d 100644 --- a/src/pokenav_before.c +++ b/src/pokenav_before.c @@ -2894,3 +2894,39 @@ void sub_80EEE20() { while (sub_80EEE54()); } } + +extern const u8 gPokenavHoennMapMisc_Gfx[]; +extern const u8 gUnknown_08E99FB0[]; +extern const u16 gPokenavHoennMap1_Pal[]; + +void sub_80EF58C(u32); + +bool8 sub_80EEE54() { + // Here i've used .h struct instead of .c struct + switch (gUnknown_083DFEC4->unkD160) { + case 0: + LZ77UnCompVram(gPokenavHoennMapMisc_Gfx, (void *)VRAM + 0xC000); + break; + case 1: + LZ77UnCompVram(gUnknown_08E99FB0, (void *)VRAM + 0xD800); + break; + case 2: + LoadPalette(gPokenavHoennMap1_Pal, 0x10, 0x20); + break; + case 3: + sub_80EF58C(0); + sub_80EF58C(1); + sub_80EF58C(2); + break; + case 4: + gUnknown_083DFEC4->unk030C = 0; + REG_BG1HOFS = 0; + REG_BG1VOFS = 0; + REG_BG1CNT = 0x1B0C; + gUnknown_083DFEC4->unkD160++; + default: + return 0; + } + gUnknown_083DFEC4->unkD160++; + return 1; +} -- cgit v1.2.3 From ae56f7859fe17915d3fb33713dfef2fe31fe2a1d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BAl=20Pe=C3=B1acoba?= Date: Fri, 25 Aug 2017 12:19:23 +0200 Subject: sub_80EEF34 almost finished. just register differences --- src/pokenav_before.c | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) (limited to 'src') diff --git a/src/pokenav_before.c b/src/pokenav_before.c index b027f2a1d..e3ea0dcc4 100644 --- a/src/pokenav_before.c +++ b/src/pokenav_before.c @@ -2930,3 +2930,67 @@ bool8 sub_80EEE54() { gUnknown_083DFEC4->unkD160++; return 1; } + +#if 0 +// not matches because of register differences +bool8 sub_80EEF34() { + bool8 ret = 0x1; + if ((s8)gUnknown_083DFEC4->unk030C == 0x20) { + return 0; + } + else { + gUnknown_083DFEC4->unk030C += 2; + if (gUnknown_083DFEC4->unk030C > 0x1F) { + gUnknown_083DFEC4->unk030C = 0x20; + ret = 0; + } + REG_BG1VOFS = gUnknown_083DFEC4->unk030C; + return ret; + } +} +#else +__attribute__((naked)) +bool8 sub_80EEF34() { + asm(".text\n" + ".include \"constants/gba_constants.inc\""); + + asm_unified( + "push {r4,lr}\n\ + movs r3, 0x1\n\ + ldr r0, _080EEF50 @ =gUnknown_083DFEC4\n\ + ldr r0, [r0]\n\ + movs r1, 0xC3\n\ + lsls r1, 2\n\ + adds r2, r0, r1\n\ + ldrh r1, [r2]\n\ + movs r4, 0\n\ + ldrsh r0, [r2, r4]\n\ + cmp r0, 0x20\n\ + bne _080EEF54\n\ + movs r0, 0\n\ + b _080EEF6E\n\ + .align 2, 0\n\ +_080EEF50: .4byte gUnknown_083DFEC4\n\ +_080EEF54:\n\ + adds r0, r1, 0x2\n\ + strh r0, [r2]\n\ + lsls r0, 16\n\ + asrs r0, 16\n\ + cmp r0, 0x1F\n\ + ble _080EEF66\n\ + movs r0, 0x20\n\ + strh r0, [r2]\n\ + movs r3, 0\n\ +_080EEF66:\n\ + ldr r1, _080EEF74 @ =REG_BG1VOFS\n\ + ldrh r0, [r2]\n\ + strh r0, [r1]\n\ + adds r0, r3, 0\n\ +_080EEF6E:\n\ + pop {r4}\n\ + pop {r1}\n\ + bx r1\n\ + .align 2, 0\n\ +_080EEF74: .4byte REG_BG1VOFS"); +} +#endif -- cgit v1.2.3 From 0c03f535e144d9b43f03826fb337afa3b83e7ebb Mon Sep 17 00:00:00 2001 From: "U-User-PC\\User" Date: Sat, 26 Aug 2017 23:31:11 -0400 Subject: decompiled up to sub_80D074C --- src/battle_anim_80CA710.c | 1415 ++++++++++++++++++++++++--------------------- 1 file changed, 766 insertions(+), 649 deletions(-) (limited to 'src') diff --git a/src/battle_anim_80CA710.c b/src/battle_anim_80CA710.c index 74f28c83e..76c74c89a 100755 --- a/src/battle_anim_80CA710.c +++ b/src/battle_anim_80CA710.c @@ -6,6 +6,7 @@ #include "palette.h" #include "rng.h" #include "rom_8077ABC.h" +#include "songs.h" #include "sound.h" #include "sprite.h" #include "task.h" @@ -22,8 +23,10 @@ extern u8 gBattleAnimEnemyMonIndex; extern struct SpriteTemplate gSpriteTemplate_83D631C; extern struct SpriteTemplate gSpriteTemplate_83D6884; extern struct SpriteTemplate gSpriteTemplate_83D74BC; +extern struct SpriteTemplate gSpriteTemplate_83D75AC; extern struct SpriteTemplate gBattleAnimSpriteTemplate_83D6FC8; extern struct SpriteTemplate gBattleAnimSpriteTemplate_83D6FF8; +extern struct AffineAnimFrameCmd gUnknown_083D76F4; extern s16 gUnknown_03000728[]; extern s8 gUnknown_083D680C[11][3]; extern u16 gUnknown_083D6984[]; @@ -100,6 +103,15 @@ void sub_80CF310(struct Sprite* sprite); void sub_80CF490(struct Sprite* sprite); void sub_80CF4B8(struct Sprite* sprite); void sub_80CF6B4(struct Sprite* sprite); +void sub_80CFE2C(struct Sprite* sprite); +void sub_80CFF68(struct Sprite* sprite); +void sub_80D0030(struct Sprite* sprite); +void sub_80D00B4(struct Sprite* sprite); +void sub_80D020C(struct Sprite* sprite); +void sub_80D02D0(struct Sprite* sprite); +void sub_80D0344(struct Sprite* sprite); +void sub_80D03A8(struct Sprite* sprite); +void sub_80D0704(struct Sprite* sprite); s16 sub_80CC338(struct Sprite* sprite); @@ -117,6 +129,9 @@ void sub_8078650(struct Sprite *sprite); void sub_8078394(struct Sprite *sprite); void sub_80785E4(struct Sprite *sprite); void sub_8078278(struct Sprite *sprite); +void sub_8078C00(struct Sprite *sprite); +void sub_8078114(struct Sprite *sprite); + extern void sub_8043DB0(); extern void sub_8043DFC(); @@ -135,6 +150,8 @@ s16 duplicate_obj_of_side_rel2move_in_transparent_mode(u8 a1); void obj_delete_but_dont_free_vram(struct Sprite *sprite); s16 sub_81174E0(s16 a); s16 sub_81174C4(s16 a, s16 b); +void sub_8079108(u16 a1, bool8 a2); +void sub_80798F4(struct Task *task, u8 a2, void *a3); void move_anim_8074EE0(struct Sprite *sprite); bool8 sub_8078718(struct Sprite *sprite); @@ -148,9 +165,13 @@ void sub_80CDD20(u8 taskId); void sub_80CE4D4(u8 taskId); void sub_80CE910(u8 taskId); void sub_80CF514(u8 taskId); - +void sub_80D0428(u8 taskId); +void sub_80D04E0(u8 taskId); +void sub_80D07AC(u8 taskId); void sub_80CC358(struct Task* task, u8 taskId); +void sub_80D0614(struct Task* task, u8 taskId); + void sub_80CEBC4(s16 a, s16 b, s16* c, s16* d, s8 e); void sub_80CA710(struct Sprite* sprite) @@ -876,126 +897,34 @@ void sub_80CB7EC(struct Sprite* sprite, s16 c) sprite->data7 = c; } -#ifdef NONMATCHING bool8 sub_80CB814(struct Sprite* sprite) { - s32 r10 = (u8)(sprite->data5 >> 8); - s32 r9 = (u8)sprite->data5; + u16 r10 = (u8)(sprite->data5 >> 8); + u16 r9 = (u8)sprite->data5; s32 r2 = (u8)(sprite->data6 >> 8); - s16 r4 = (u8)sprite->data6; - u16 r6 = sprite->data7 >> 8; + s32 r4 = (u8)sprite->data6; + s16 r6 = sprite->data7 >> 8; s16 r3 = sprite->data7 & 0xFF; + s16 r4_2; + s16 r0; s32 var1; s32 var2; - + if (r2 == 0) r2 = -32; else if (r2 == 255) r2 = 0x110; - - r4 -= r9; - var1 = (r2 - r10) * r3 / r6; - var2 = r4 * r3 / r6; + r4_2 = r4 - r9; + r0 = r2 - r10; + var1 = r0 * r3 / r6; + var2 = r4_2 * r3 / r6; sprite->pos1.x = var1 + r10; - sprite->pos2.y = var2 + r9; - r3++; - if ((u16)r3 == r6) + sprite->pos1.y = var2 + r9; + if (++r3 == r6) return TRUE; - sprite->data7 = r3 | (r6 << 8); + sprite->data7 = (r6 << 8) | r3; return FALSE; } -#else -__attribute__((naked)) -bool8 sub_80CB814(struct Sprite* sprite) -{ - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r10\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5-r7}\n\ - mov r8, r0\n\ - ldrh r0, [r0, 0x38]\n\ - lsrs r1, r0, 8\n\ - mov r10, r1\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - mov r9, r0\n\ - mov r1, r8\n\ - ldrh r0, [r1, 0x3A]\n\ - lsrs r2, r0, 8\n\ - lsls r0, 24\n\ - lsrs r4, r0, 24\n\ - ldrh r1, [r1, 0x3C]\n\ - lsls r0, r1, 16\n\ - asrs r0, 24\n\ - lsls r0, 16\n\ - lsrs r6, r0, 16\n\ - movs r3, 0xFF\n\ - ands r3, r1\n\ - cmp r2, 0\n\ - bne _080CB84E\n\ - movs r2, 0x20\n\ - negs r2, r2\n\ - b _080CB856\n\ -_080CB84E:\n\ - cmp r2, 0xFF\n\ - bne _080CB856\n\ - movs r2, 0x88\n\ - lsls r2, 1\n\ -_080CB856:\n\ - mov r0, r9\n\ - subs r4, r0\n\ - lsls r4, 16\n\ - lsrs r4, 16\n\ - mov r1, r10\n\ - subs r0, r2, r1\n\ - lsls r5, r3, 16\n\ - asrs r5, 16\n\ - muls r0, r5\n\ - lsls r1, r6, 16\n\ - asrs r7, r1, 16\n\ - adds r1, r7, 0\n\ - bl __divsi3\n\ - adds r6, r0, 0\n\ - lsls r4, 16\n\ - asrs r4, 16\n\ - adds r0, r4, 0\n\ - muls r0, r5\n\ - adds r1, r7, 0\n\ - bl __divsi3\n\ - add r6, r10\n\ - mov r1, r8\n\ - strh r6, [r1, 0x20]\n\ - add r0, r9\n\ - strh r0, [r1, 0x22]\n\ - adds r5, 0x1\n\ - lsls r5, 16\n\ - lsrs r3, r5, 16\n\ - asrs r5, 16\n\ - cmp r5, r7\n\ - beq _080CB8A8\n\ - lsls r1, r7, 8\n\ - lsls r0, r3, 16\n\ - asrs r0, 16\n\ - orrs r0, r1\n\ - mov r1, r8\n\ - strh r0, [r1, 0x3C]\n\ - movs r0, 0\n\ - b _080CB8AA\n\ -_080CB8A8:\n\ - movs r0, 0x1\n\ -_080CB8AA:\n\ - pop {r3-r5}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - mov r10, r5\n\ - pop {r4-r7}\n\ - pop {r1}\n\ - bx r1\n\ - .syntax divided\n"); -} -#endif void sub_80CB8B8(struct Sprite* sprite) { @@ -1007,82 +936,22 @@ void sub_80CB8B8(struct Sprite* sprite) if(sprite->data0 > 50) move_anim_8072740(sprite); } -#ifdef NONMATCHING void sub_80CB8E8(struct Sprite* sprite) { - int temp = ((sprite->data3 * 128) / sprite->data4) + sprite->data0; - int zero = 0; - sprite->data0 = temp; - if(sprite->data0 > 0x7F) + sprite->data0 += sprite->data3 * 128 / sprite->data4; + if (sprite->data0 >= 128) { sprite->data1++; - sprite->data0 = zero; + sprite->data0 = 0; } - sprite->pos2.y = Sin(sprite->data0 + 0x80, (sprite->data1 * 8) - 30); - if(!sub_80CB814(sprite)) + sprite->pos2.y = Sin(sprite->data0 + 128, 30 - sprite->data1 * 8); + if (sub_80CB814(sprite)) { - sprite->pos2.y = zero; - sprite->data0 = zero; + sprite->pos2.y = 0; + sprite->data0 = 0; sprite->callback = sub_80CB8B8; } } -#else -__attribute__((naked)) -void sub_80CB8E8(struct Sprite* sprite) -{ - asm(".syntax unified\n\ - push {r4,r5,lr}\n\ - adds r4, r0, 0\n\ - movs r1, 0x34\n\ - ldrsh r0, [r4, r1]\n\ - lsls r0, 7\n\ - movs r2, 0x36\n\ - ldrsh r1, [r4, r2]\n\ - bl __divsi3\n\ - ldrh r1, [r4, 0x2E]\n\ - adds r1, r0\n\ - movs r5, 0\n\ - strh r1, [r4, 0x2E]\n\ - lsls r1, 16\n\ - asrs r1, 16\n\ - cmp r1, 0x7F\n\ - ble _080CB912\n\ - ldrh r0, [r4, 0x30]\n\ - adds r0, 0x1\n\ - strh r0, [r4, 0x30]\n\ - strh r5, [r4, 0x2E]\n\ -_080CB912:\n\ - ldrh r0, [r4, 0x2E]\n\ - adds r0, 0x80\n\ - lsls r0, 16\n\ - asrs r0, 16\n\ - movs r1, 0x30\n\ - ldrsh r2, [r4, r1]\n\ - lsls r2, 3\n\ - movs r1, 0x1E\n\ - subs r1, r2\n\ - lsls r1, 16\n\ - asrs r1, 16\n\ - bl Sin\n\ - strh r0, [r4, 0x26]\n\ - adds r0, r4, 0\n\ - bl sub_80CB814\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - beq _080CB942\n\ - strh r5, [r4, 0x26]\n\ - strh r5, [r4, 0x2E]\n\ - ldr r0, _080CB948 @ =sub_80CB8B8\n\ - str r0, [r4, 0x1C]\n\ -_080CB942:\n\ - pop {r4,r5}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_080CB948: .4byte sub_80CB8B8\n\ - .syntax divided\n"); -} -#endif void sub_80CB94C(struct Sprite* sprite) { @@ -1735,27 +1604,31 @@ void sub_80CC5F8(u8 taskId) if(gBattleAnimArgs[7] == -1) DestroyAnimVisualTask(taskId); } -#ifdef NONMATCHING void sub_80CC6CC(struct Sprite* sprite) { u8 a; u8 b; - u8 bank; - int c; + u16 c; u16 x; u16 y; + if (gBattleAnimArgs[4] == 0) { move_anim_8072740(sprite); } else { - - if (gBattleAnimArgs[0] == 0) bank = gBattleAnimPlayerMonIndex; + + if (gBattleAnimArgs[0] == 0) + { + a = sub_8077ABC(gBattleAnimPlayerMonIndex, 2); + b = sub_8077ABC(gBattleAnimPlayerMonIndex, 3); + } else - bank = gBattleAnimEnemyMonIndex; - a = sub_8077ABC(bank, 2); - b = sub_8077ABC(bank, 3); + { + a = sub_8077ABC(gBattleAnimEnemyMonIndex, 2); + b = sub_8077ABC(gBattleAnimEnemyMonIndex, 3); + } sprite->data0 = gBattleAnimArgs[4]; if (gBattleAnimArgs[1] == 0) { @@ -1775,150 +1648,15 @@ void sub_80CC6CC(struct Sprite* sprite) sprite->data1 = x * 16; y = sprite->pos1.y; sprite->data2 = y * 16; - sprite->data3 = ((sprite->data5 - sprite->pos1.x) * 16) / gBattleAnimArgs[4]; - sprite->data4 = ((sprite->data6 - sprite->pos1.y) * 16) / gBattleAnimArgs[4]; + sprite->data3 = (sprite->data5 - sprite->pos1.x) * 16 / gBattleAnimArgs[4]; + sprite->data4 = (sprite->data6 - sprite->pos1.y) * 16 / gBattleAnimArgs[4]; c = sub_80790F0(sprite->data5 - x, sprite->data6 - y); - if(IsContest() != 0) c = c + -0x8000; + if (IsContest()) + c -= 0x8000; sub_8078FDC(sprite, 0, 0x100, 0x100, c); sprite->callback = sub_80CC7D4; } } -#else -__attribute__((naked)) -void sub_80CC6CC(struct Sprite* sprite) -{ - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - sub sp, 0x4\n\ - adds r6, r0, 0\n\ - ldr r1, _080CC6E4 @ =gBattleAnimArgs\n\ - movs r2, 0x8\n\ - ldrsh r0, [r1, r2]\n\ - cmp r0, 0\n\ - bne _080CC6E8\n\ - adds r0, r6, 0\n\ - bl move_anim_8072740\n\ - b _080CC7C2\n\ - .align 2, 0\n\ -_080CC6E4: .4byte gBattleAnimArgs\n\ -_080CC6E8:\n\ - movs r3, 0\n\ - ldrsh r0, [r1, r3]\n\ - cmp r0, 0\n\ - bne _080CC6F8\n\ - ldr r4, _080CC6F4 @ =gBattleAnimPlayerMonIndex\n\ - b _080CC6FA\n\ - .align 2, 0\n\ -_080CC6F4: .4byte gBattleAnimPlayerMonIndex\n\ -_080CC6F8:\n\ - ldr r4, _080CC734 @ =gBattleAnimEnemyMonIndex\n\ -_080CC6FA:\n\ - ldrb r0, [r4]\n\ - movs r1, 0x2\n\ - bl sub_8077ABC\n\ - lsls r0, 24\n\ - lsrs r5, r0, 24\n\ - ldrb r0, [r4]\n\ - movs r1, 0x3\n\ - bl sub_8077ABC\n\ - lsls r0, 24\n\ - lsrs r2, r0, 24\n\ - ldr r0, _080CC738 @ =gBattleAnimArgs\n\ - ldrh r1, [r0, 0x8]\n\ - strh r1, [r6, 0x2E]\n\ - movs r3, 0x2\n\ - ldrsh r1, [r0, r3]\n\ - adds r7, r0, 0\n\ - cmp r1, 0\n\ - bne _080CC73C\n\ - ldrh r0, [r7, 0x4]\n\ - adds r0, r5\n\ - strh r0, [r6, 0x20]\n\ - ldrh r0, [r7, 0x6]\n\ - adds r0, r2\n\ - strh r0, [r6, 0x22]\n\ - strh r5, [r6, 0x38]\n\ - strh r2, [r6, 0x3A]\n\ - b _080CC74C\n\ - .align 2, 0\n\ -_080CC734: .4byte gBattleAnimEnemyMonIndex\n\ -_080CC738: .4byte gBattleAnimArgs\n\ -_080CC73C:\n\ - strh r5, [r6, 0x20]\n\ - strh r2, [r6, 0x22]\n\ - ldrh r0, [r7, 0x4]\n\ - adds r0, r5\n\ - strh r0, [r6, 0x38]\n\ - ldrh r0, [r7, 0x6]\n\ - adds r0, r2\n\ - strh r0, [r6, 0x3A]\n\ -_080CC74C:\n\ - ldrh r4, [r6, 0x20]\n\ - lsls r0, r4, 4\n\ - strh r0, [r6, 0x30]\n\ - ldrh r5, [r6, 0x22]\n\ - lsls r0, r5, 4\n\ - strh r0, [r6, 0x32]\n\ - movs r1, 0x38\n\ - ldrsh r0, [r6, r1]\n\ - movs r2, 0x20\n\ - ldrsh r1, [r6, r2]\n\ - subs r0, r1\n\ - lsls r0, 4\n\ - movs r3, 0x8\n\ - ldrsh r1, [r7, r3]\n\ - bl __divsi3\n\ - strh r0, [r6, 0x34]\n\ - movs r1, 0x3A\n\ - ldrsh r0, [r6, r1]\n\ - movs r2, 0x22\n\ - ldrsh r1, [r6, r2]\n\ - subs r0, r1\n\ - lsls r0, 4\n\ - movs r3, 0x8\n\ - ldrsh r1, [r7, r3]\n\ - bl __divsi3\n\ - strh r0, [r6, 0x36]\n\ - ldrh r0, [r6, 0x38]\n\ - subs r0, r4\n\ - lsls r0, 16\n\ - asrs r0, 16\n\ - ldrh r1, [r6, 0x3A]\n\ - subs r1, r5\n\ - lsls r1, 16\n\ - asrs r1, 16\n\ - bl sub_80790F0\n\ - lsls r0, 16\n\ - lsrs r4, r0, 16\n\ - bl IsContest\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - beq _080CC7AE\n\ - ldr r1, _080CC7CC @ =0xffff8000\n\ - adds r0, r4, r1\n\ - lsls r0, 16\n\ - lsrs r4, r0, 16\n\ -_080CC7AE:\n\ - movs r3, 0x80\n\ - lsls r3, 1\n\ - str r4, [sp]\n\ - adds r0, r6, 0\n\ - movs r1, 0\n\ - adds r2, r3, 0\n\ - bl sub_8078FDC\n\ - ldr r0, _080CC7D0 @ =sub_80CC7D4\n\ - str r0, [r6, 0x1C]\n\ -_080CC7C2:\n\ - add sp, 0x4\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_080CC7CC: .4byte 0xffff8000\n\ -_080CC7D0: .4byte sub_80CC7D4\n\ - .syntax divided\n"); -} -#endif void sub_80CC7D4(struct Sprite* sprite) { @@ -2972,14 +2710,17 @@ void sub_80CDFB0(struct Sprite* sprite) sprite->callback = sub_80CE000; } -#ifdef NONMATCHING void sub_80CE000(struct Sprite* sprite) { if (++sprite->data0 >= sprite->data1) { sprite->invisible = !sprite->invisible; - if (!sprite->invisible && !(++sprite->data4 & 1)) - PlaySE12WithPanning(0xC2, sprite->data5); + if (!sprite->invisible) + { + sprite->data4++; + if (!(sprite->data4 & 1)) + PlaySE12WithPanning(SE_W207B, sprite->data5); + } sprite->data0 = 0; if (++sprite->data2 > 1) { @@ -2990,93 +2731,6 @@ void sub_80CE000(struct Sprite* sprite) if (sprite->animEnded && sprite->data1 > 16 && sprite->invisible) move_anim_8072740(sprite); } -#else -__attribute__((naked)) -void sub_80CE000(struct Sprite* sprite) -{ - asm(".syntax unified\n\ - push {r4,lr}\n\ - adds r4, r0, 0\n\ - ldrh r0, [r4, 0x2E]\n\ - adds r0, 0x1\n\ - strh r0, [r4, 0x2E]\n\ - lsls r0, 16\n\ - asrs r0, 16\n\ - movs r2, 0x30\n\ - ldrsh r1, [r4, r2]\n\ - cmp r0, r1\n\ - blt _080CE06C\n\ - adds r3, r4, 0\n\ - adds r3, 0x3E\n\ - ldrb r2, [r3]\n\ - lsrs r1, r2, 2\n\ - movs r0, 0x1\n\ - eors r1, r0\n\ - ands r1, r0\n\ - lsls r1, 2\n\ - movs r0, 0x5\n\ - negs r0, r0\n\ - ands r0, r2\n\ - orrs r0, r1\n\ - strb r0, [r3]\n\ - movs r1, 0x4\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _080CE052\n\ - ldrh r0, [r4, 0x36]\n\ - adds r0, 0x1\n\ - strh r0, [r4, 0x36]\n\ - movs r1, 0x1\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _080CE052\n\ - ldrh r1, [r4, 0x38]\n\ - lsls r1, 24\n\ - asrs r1, 24\n\ - movs r0, 0xC2\n\ - bl PlaySE12WithPanning\n\ -_080CE052:\n\ - movs r1, 0\n\ - strh r1, [r4, 0x2E]\n\ - ldrh r0, [r4, 0x32]\n\ - adds r0, 0x1\n\ - strh r0, [r4, 0x32]\n\ - lsls r0, 16\n\ - asrs r0, 16\n\ - cmp r0, 0x1\n\ - ble _080CE06C\n\ - strh r1, [r4, 0x32]\n\ - ldrh r0, [r4, 0x30]\n\ - adds r0, 0x1\n\ - strh r0, [r4, 0x30]\n\ -_080CE06C:\n\ - adds r0, r4, 0\n\ - adds r0, 0x3F\n\ - ldrb r1, [r0]\n\ - movs r0, 0x10\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _080CE096\n\ - movs r1, 0x30\n\ - ldrsh r0, [r4, r1]\n\ - cmp r0, 0x10\n\ - ble _080CE096\n\ - adds r0, r4, 0\n\ - adds r0, 0x3E\n\ - ldrb r1, [r0]\n\ - movs r0, 0x4\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _080CE096\n\ - adds r0, r4, 0\n\ - bl move_anim_8072740\n\ -_080CE096:\n\ - pop {r4}\n\ - pop {r0}\n\ - bx r0\n\ - .syntax divided\n"); -} -#endif void sub_80CE09C(struct Sprite* sprite) { @@ -3461,131 +3115,31 @@ void sub_80CEA04(struct Sprite* sprite) } // grasswhistle -#ifdef NONMATCHING void sub_80CEA20(u8 taskId) { u16 i; u16 j; - u16 a; u16 index; - if ((index = IndexOfSpritePaletteTag(gUnknown_083D712C[0][0])) != 0xFF) + + index = IndexOfSpritePaletteTag(gUnknown_083D712C[0][0]); + if (index != 0xFF) { index = (index << 4) + 0x100; for (i = 1; i < 6; i++) gPlttBufferFaded[index + i] = gUnknown_083D712C[0][i]; } - for (i = 1; i < 4; i++) + for (j = 1; j < 4; j++) { - a = AllocSpritePalette(gUnknown_083D712C[i][0]); - if (a != 0xFF) + index = AllocSpritePalette(gUnknown_083D712C[j][0]); + if (index != 0xFF) { - a = (a << 4) + 0x100; - for (j = 1; j < 6; j++) - gPlttBufferFaded[a + j] = gUnknown_083D712C[i][j]; + index = (index << 4) + 0x100; + for (i = 1; i < 6; i++) + gPlttBufferFaded[index + i] = gUnknown_083D712C[j][i]; } } DestroyAnimVisualTask(taskId); } -#else -__attribute__((naked)) -void sub_80CEA20(u8 taskId) -{ - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r9\n\ - mov r6, r8\n\ - push {r6,r7}\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - mov r9, r0\n\ - ldr r4, _080CEAD0 @ =gUnknown_083D712C\n\ - ldrh r0, [r4]\n\ - bl IndexOfSpritePaletteTag\n\ - lsls r0, 24\n\ - lsrs r3, r0, 24\n\ - cmp r3, 0xFF\n\ - beq _080CEA64\n\ - lsls r0, r3, 20\n\ - movs r1, 0x80\n\ - lsls r1, 17\n\ - adds r0, r1\n\ - lsrs r3, r0, 16\n\ - movs r2, 0x1\n\ - ldr r5, _080CEAD4 @ =gPlttBufferFaded\n\ -_080CEA4C:\n\ - adds r1, r3, r2\n\ - lsls r1, 1\n\ - adds r1, r5\n\ - lsls r0, r2, 1\n\ - adds r0, r4\n\ - ldrh r0, [r0]\n\ - strh r0, [r1]\n\ - adds r0, r2, 0x1\n\ - lsls r0, 16\n\ - lsrs r2, r0, 16\n\ - cmp r2, 0x5\n\ - bls _080CEA4C\n\ -_080CEA64:\n\ - movs r4, 0x1\n\ - ldr r0, _080CEAD0 @ =gUnknown_083D712C\n\ - mov r8, r0\n\ -_080CEA6A:\n\ - lsls r0, r4, 1\n\ - adds r0, r4\n\ - lsls r5, r0, 2\n\ - mov r1, r8\n\ - adds r0, r5, r1\n\ - ldrh r0, [r0]\n\ - bl AllocSpritePalette\n\ - lsls r0, 24\n\ - lsrs r3, r0, 24\n\ - adds r4, 0x1\n\ - mov r12, r4\n\ - cmp r3, 0xFF\n\ - beq _080CEAB2\n\ - lsls r0, r3, 20\n\ - movs r1, 0x80\n\ - lsls r1, 17\n\ - adds r0, r1\n\ - lsrs r3, r0, 16\n\ - movs r2, 0x1\n\ - ldr r7, _080CEAD4 @ =gPlttBufferFaded\n\ - ldr r6, _080CEAD0 @ =gUnknown_083D712C\n\ - adds r4, r5, 0\n\ -_080CEA98:\n\ - adds r1, r3, r2\n\ - lsls r1, 1\n\ - adds r1, r7\n\ - lsls r0, r2, 1\n\ - adds r0, r4\n\ - adds r0, r6\n\ - ldrh r0, [r0]\n\ - strh r0, [r1]\n\ - adds r0, r2, 0x1\n\ - lsls r0, 16\n\ - lsrs r2, r0, 16\n\ - cmp r2, 0x5\n\ - bls _080CEA98\n\ -_080CEAB2:\n\ - mov r1, r12\n\ - lsls r0, r1, 16\n\ - lsrs r4, r0, 16\n\ - cmp r4, 0x3\n\ - bls _080CEA6A\n\ - mov r0, r9\n\ - bl DestroyAnimVisualTask\n\ - pop {r3,r4}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_080CEAD0: .4byte gUnknown_083D712C\n\ -_080CEAD4: .4byte gPlttBufferFaded\n\ -.syntax divided\n"); -} -#endif void sub_80CEAD8(u8 taskId) { @@ -4109,13 +3663,13 @@ void sub_80CF6B4(struct Sprite* sprite) } //sonic boom -#ifdef NONMATCHING void sub_80CF6DC(struct Sprite* sprite) { s16 a; s16 b; - s16 c; - if (IsContest() != 0) + u16 c; + + if (IsContest()) gBattleAnimArgs[2] = -gBattleAnimArgs[2]; else if (GetBankSide(gBattleAnimPlayerMonIndex) != 0) { @@ -4128,7 +3682,7 @@ void sub_80CF6DC(struct Sprite* sprite) b = sub_8077ABC(gBattleAnimEnemyMonIndex, 3) + gBattleAnimArgs[3]; c = sub_80790F0(a - sprite->pos1.x, b - sprite->pos1.y); c += 0xF000; - if (IsContest() != 0) + if (IsContest()) c -= 0x6000; sub_8078FDC(sprite, 0, 0x100, 0x100, c); sprite->data0 = gBattleAnimArgs[4]; @@ -4137,131 +3691,6 @@ void sub_80CF6DC(struct Sprite* sprite) sprite->callback = sub_8078B34; oamt_set_x3A_32(sprite, move_anim_8072740); } -#else -__attribute__((naked)) -void sub_80CF6DC(struct Sprite* sprite) -{ - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r8\n\ - push {r7}\n\ - sub sp, 0x4\n\ - adds r5, r0, 0\n\ - bl IsContest\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - beq _080CF700\n\ - ldr r1, _080CF6FC @ =gBattleAnimArgs\n\ - ldrh r0, [r1, 0x4]\n\ - negs r0, r0\n\ - strh r0, [r1, 0x4]\n\ - b _080CF722\n\ - .align 2, 0\n\ -_080CF6FC: .4byte gBattleAnimArgs\n\ -_080CF700:\n\ - ldr r0, _080CF7C8 @ =gBattleAnimPlayerMonIndex\n\ - ldrb r0, [r0]\n\ - bl GetBankSide\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - beq _080CF722\n\ - ldr r1, _080CF7CC @ =gBattleAnimArgs\n\ - ldrh r0, [r1, 0x4]\n\ - negs r0, r0\n\ - strh r0, [r1, 0x4]\n\ - ldrh r0, [r1, 0x2]\n\ - negs r0, r0\n\ - strh r0, [r1, 0x2]\n\ - ldrh r0, [r1, 0x6]\n\ - negs r0, r0\n\ - strh r0, [r1, 0x6]\n\ -_080CF722:\n\ - adds r0, r5, 0\n\ - movs r1, 0x1\n\ - bl sub_80787B0\n\ - ldr r4, _080CF7D0 @ =gBattleAnimEnemyMonIndex\n\ - ldrb r0, [r4]\n\ - movs r1, 0x2\n\ - bl sub_8077ABC\n\ - lsls r0, 24\n\ - ldr r6, _080CF7CC @ =gBattleAnimArgs\n\ - lsrs r0, 24\n\ - ldrh r1, [r6, 0x4]\n\ - adds r0, r1\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - mov r8, r0\n\ - ldrb r0, [r4]\n\ - movs r1, 0x3\n\ - bl sub_8077ABC\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - ldrh r2, [r6, 0x6]\n\ - adds r0, r2\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - adds r7, r0, 0\n\ - ldrh r1, [r5, 0x20]\n\ - mov r2, r8\n\ - lsls r0, r2, 16\n\ - asrs r0, 16\n\ - subs r0, r1\n\ - lsls r0, 16\n\ - asrs r0, 16\n\ - ldrh r2, [r5, 0x22]\n\ - lsls r1, r7, 16\n\ - asrs r1, 16\n\ - subs r1, r2\n\ - lsls r1, 16\n\ - asrs r1, 16\n\ - bl sub_80790F0\n\ - lsls r0, 16\n\ - movs r1, 0xF0\n\ - lsls r1, 24\n\ - adds r0, r1\n\ - lsrs r4, r0, 16\n\ - bl IsContest\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - beq _080CF794\n\ - ldr r2, _080CF7D4 @ =0xffffa000\n\ - adds r0, r4, r2\n\ - lsls r0, 16\n\ - lsrs r4, r0, 16\n\ -_080CF794:\n\ - movs r3, 0x80\n\ - lsls r3, 1\n\ - str r4, [sp]\n\ - adds r0, r5, 0\n\ - movs r1, 0\n\ - adds r2, r3, 0\n\ - bl sub_8078FDC\n\ - ldrh r0, [r6, 0x8]\n\ - strh r0, [r5, 0x2E]\n\ - mov r0, r8\n\ - strh r0, [r5, 0x32]\n\ - strh r7, [r5, 0x36]\n\ - ldr r0, _080CF7D8 @ =sub_8078B34\n\ - str r0, [r5, 0x1C]\n\ - ldr r1, _080CF7DC @ =move_anim_8072740\n\ - adds r0, r5, 0\n\ - bl oamt_set_x3A_32\n\ - add sp, 0x4\n\ - pop {r3}\n\ - mov r8, r3\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_080CF7C8: .4byte gBattleAnimPlayerMonIndex\n\ -_080CF7CC: .4byte gBattleAnimArgs\n\ -_080CF7D0: .4byte gBattleAnimEnemyMonIndex\n\ -_080CF7D4: .4byte 0xffffa000\n\ -_080CF7D8: .4byte sub_8078B34\n\ -_080CF7DC: .4byte move_anim_8072740\n\ - .syntax divided\n"); -} -#endif void sub_80CF7E0(struct Sprite* sprite) { @@ -4379,3 +3808,691 @@ void sub_80CFA20(u8 taskId) gTasks[taskId].func = sub_80CF9F8; } } + +void sub_80CFB04(u8 taskId) +{ + s16 r9 = 0; + s16 r6 = 0; + s16 sp1 = 0; + s16 sp2 = 0; + s16 r4; + + if (IsContest()) + { + gTasks[taskId].data[4] = 2; + gBattleAnimArgs[0] = -gBattleAnimArgs[0]; + if (gBattleAnimArgs[2] & 1) + gBattleAnimArgs[2] &= ~1; + else + gBattleAnimArgs[2] |= 1; + } + else + { + if ((gBanksBySide[gBattleAnimEnemyMonIndex] & 1) == 0) + { + gTasks[taskId].data[4] = 1; + gBattleAnimArgs[0] = -gBattleAnimArgs[0]; + gBattleAnimArgs[1] = -gBattleAnimArgs[1]; + if (gBattleAnimArgs[2] & 1) + gBattleAnimArgs[2] &= ~1; + else + gBattleAnimArgs[2] |= 1; + } + } + r6 = gTasks[taskId].data[9] = sub_8077ABC(gBattleAnimPlayerMonIndex, 0); + r9 = gTasks[taskId].data[10] = sub_8077ABC(gBattleAnimPlayerMonIndex, 1); + if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + && b_side_obj__get_some_boolean(gBattleAnimEnemyMonIndex ^ 2)) + { + sub_807A3FC(gBattleAnimEnemyMonIndex, 0, &sp1, &sp2); + } + else + { + sp1 = sub_8077ABC(gBattleAnimEnemyMonIndex, 0); + sp2 = sub_8077ABC(gBattleAnimEnemyMonIndex, 1); + } + sp1 = gTasks[taskId].data[11] = sp1 + gBattleAnimArgs[0]; + sp2 = gTasks[taskId].data[12] = sp2 + gBattleAnimArgs[1]; + if (sp1 >= r6) + r4 = sp1 - r6; + else + r4 = r6 - sp1; + gTasks[taskId].data[5] = sub_81174C4(r4, sub_81174E0(gBattleAnimArgs[2] & ~1)); + gTasks[taskId].data[6] = sub_81174C4(gTasks[taskId].data[5], 0x80); + gTasks[taskId].data[7] = gBattleAnimArgs[2]; + if (sp2 >= r9) + { + r4 = sp2 - r9; + gTasks[taskId].data[8] = sub_81174C4(r4, sub_81174E0(gTasks[taskId].data[5])) & ~1; + } + else + { + r4 = r9 - sp2; + gTasks[taskId].data[8] = sub_81174C4(r4, sub_81174E0(gTasks[taskId].data[5])) | 1; + } + gTasks[taskId].data[3] = gBattleAnimArgs[3]; + if (gBattleAnimArgs[4] & 0x80) + { + gBattleAnimArgs[4] ^= 0x80; + if (gBattleAnimArgs[4] >= 64) + { + u16 var = sub_8079E90(gBattleAnimEnemyMonIndex) + (gBattleAnimArgs[4] - 64); + gTasks[taskId].data[2] = var; + } + else + { + u16 var = sub_8079E90(gBattleAnimEnemyMonIndex) - gBattleAnimArgs[4]; + gTasks[taskId].data[2] = var; + } + } + else + { + if (gBattleAnimArgs[4] >= 64) + { + u16 var = sub_8079E90(gBattleAnimEnemyMonIndex) + (gBattleAnimArgs[4] - 64); + gTasks[taskId].data[2] = var; + } + else + { + u16 var = sub_8079E90(gBattleAnimEnemyMonIndex) - gBattleAnimArgs[4]; + gTasks[taskId].data[2] = var; + } + } + if (gTasks[taskId].data[2] < 3) + gTasks[taskId].data[2] = 3; + gTasks[taskId].func = sub_80CFA20; +} + +void sub_80CFDFC(struct Sprite* sprite) +{ + sub_80787B0(sprite, 0); + sprite->data0 = 0x100 + (IndexOfSpritePaletteTag(gSpriteTemplate_83D75AC.paletteTag) << 4); + sprite->callback = sub_80CFE2C; +} + +#ifdef NONMATCHING +void sub_80CFE2C(struct Sprite* sprite) +{ + u16 r7; + u16* r1; + u16* r2; + int i; + if (++sprite->data1 == 2) + { + sprite->data1 = 0; + r7 = gPlttBufferFaded[sprite->data0 + 8]; + r2 = &gPlttBufferFaded[0x10]; + r1 = &gPlttBufferFaded[sprite->data0 + 9]; + for (i = 7; i >= 0; i--) + { + *r2 = *r1; + r1++; + r2++; + } + gPlttBufferFaded[sprite->data0 + 15] = r7; + if (++sprite->data2 == 0x18) + move_anim_8072740(sprite); + } +} +#else +__attribute__((naked)) +void sub_80CFE2C(struct Sprite* sprite) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + adds r4, r0, 0\n\ + ldrh r0, [r4, 0x30]\n\ + adds r0, 0x1\n\ + strh r0, [r4, 0x30]\n\ + lsls r0, 16\n\ + asrs r0, 16\n\ + cmp r0, 0x2\n\ + bne _080CFE90\n\ + movs r0, 0\n\ + strh r0, [r4, 0x30]\n\ + ldrh r5, [r4, 0x2E]\n\ + ldr r1, _080CFE98 @ =gPlttBufferFaded\n\ + adds r0, r5, 0\n\ + adds r0, 0x8\n\ + lsls r0, 1\n\ + adds r0, r1\n\ + ldrh r7, [r0]\n\ + adds r6, r1, 0 @puts gPlttBufferFaded in r6\n\ + adds r1, r5, 0\n\ + adds r1, 0x9\n\ + lsls r0, r5, 1\n\ + adds r0, r6 \n\ + adds r2, r0, 0\n\ + adds r2, 0x10\n\ + movs r3, 0x7\n\ + lsls r1, 1\n\ + adds r1, r6 \n\ +_080CFE64:\n\ + ldrh r0, [r1]\n\ + strh r0, [r2]\n\ + adds r1, 0x2\n\ + adds r2, 0x2\n\ + subs r3, 0x1\n\ + cmp r3, 0\n\ + bge _080CFE64\n\ + adds r0, r5, 0\n\ + adds r0, 0xF\n\ + lsls r0, 1\n\ + adds r0, r6\n\ + strh r7, [r0]\n\ + ldrh r0, [r4, 0x32]\n\ + adds r0, 0x1\n\ + strh r0, [r4, 0x32]\n\ + lsls r0, 16\n\ + asrs r0, 16\n\ + cmp r0, 0x18\n\ + bne _080CFE90\n\ + adds r0, r4, 0\n\ + bl move_anim_8072740\n\ +_080CFE90:\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_080CFE98: .4byte gPlttBufferFaded\n\ +.syntax divided\n"); +} +#endif + +void sub_80CFE9C(struct Sprite* sprite) +{ + s16 r6; + s16 r7; + u16 var; + + sub_80787B0(sprite, 1); + r6 = sub_8077ABC(gBattleAnimEnemyMonIndex, 2); + r7 = sub_8077ABC(gBattleAnimEnemyMonIndex, 3) + gBattleAnimArgs[3]; + if (GetBankSide(gBattleAnimPlayerMonIndex) != 0) + gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + r6 += gBattleAnimArgs[2]; + var = sub_80790F0(r6 - sprite->pos1.x, r7 - sprite->pos1.y); + var += 0xC000; + sub_8078FDC(sprite, 0, 0x100, 0x100, var); + sprite->data0 = gBattleAnimArgs[4]; + sprite->data2 = r6; + sprite->data4 = r7; + sprite->callback = sub_8078C00; + oamt_set_x3A_32(sprite, move_anim_8072740); +} + +void sub_80CFF50(struct Sprite* sprite) +{ + sprite->data2 = -16; + sprite->pos1.y += 8; + sprite->callback = sub_80CFF68; +} + +void sub_80CFF68(struct Sprite* sprite) +{ + sprite->data0 += 0x80; + sprite->pos2.x = sprite->data0 >> 8; + if (GetBankSide(gBattleAnimPlayerMonIndex) == 0) + sprite->pos2.x = -sprite->pos2.x; + sprite->pos2.y = Sin(sprite->data1, sprite->data2); + sprite->data1 += 5; + if (sprite->data1 > 0x7E) + { + sprite->data1 = 0; + sprite->data2 /= 2; + if (++sprite->data3 == 2) + move_anim_8072740(sprite); + } +} + +void sub_80CFFD8(struct Sprite* sprite) +{ + sub_80787B0(sprite, 1); + sprite->data0 = 20; + sprite->data2 = sub_8077ABC(gBattleAnimEnemyMonIndex, 2); + sprite->data4 = sub_8077ABC(gBattleAnimEnemyMonIndex, 3); + sprite->callback = sub_8078B34; + sprite->affineAnimPaused = 1; + oamt_set_x3A_32(sprite, sub_80D0030); +} + +void sub_80D0030(struct Sprite* sprite) +{ + int i; + u16 rand; + s16* ptr; + PlaySE12WithPanning(0xA6, sub_8076F98(0x3F)); + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.y = 0; + sprite->pos2.x = 0; + ptr = &sprite->data7; + for (i = 0; i < 8; i++) { + ptr[i - 7] = 0; + } + rand = Random(); + sprite->data6 = 0xFFF4 - (rand & 7); + rand = Random(); + sprite->data7 = (rand % 0xA0) + 0xA0; + sprite->callback = sub_80D00B4; + sprite->affineAnimPaused = 0; +} + +void sub_80D00B4(struct Sprite* sprite) +{ + sprite->data0 += sprite->data7; + sprite->pos2.x = sprite->data0 >> 8; + if (sprite->data7 & 1) + sprite->pos2.x = -sprite->pos2.x; + sprite->pos2.y = Sin(sprite->data1, sprite->data6); + sprite->data1 += 8; + if (sprite->data1 > 0x7E) + { + sprite->data1 = 0; + sprite->data2 /= 2; + if (++sprite->data3 == 1) + move_anim_8072740(sprite); + } +} + +void sub_80D0118(struct Sprite* sprite) +{ + sub_80787B0(sprite, 0); + if (GetBankSide(gBattleAnimPlayerMonIndex) == 0) + sprite->pos1.y += 16; + sprite->data0 = gBattleAnimArgs[4]; + sprite->data1 = gBattleAnimArgs[2]; + sprite->data2 = gBattleAnimArgs[5]; + sprite->data3 = gBattleAnimArgs[6]; + sprite->data4 = gBattleAnimArgs[3]; + sprite->callback = sub_8078114; + oamt_set_x3A_32(sprite, move_anim_8072740); + sprite->callback(sprite); +} + +void sub_80D0178(struct Sprite* sprite) +{ + s16 r7 = 32; + s16 r4 = -32; + s16 r8 = 16; + s16 r6 = -16; + if (gBattleAnimArgs[0] != 0) + { + r7 = r4; + r4 = 32; + r8 = r6; + r6 = 16; + StartSpriteAnim(sprite, 1); + } + sprite->pos1.x += r7; + sprite->pos1.y += r4; + sprite->data0 = 6; + sprite->data2 = sub_8077ABC(gBattleAnimEnemyMonIndex, 2) + r8; + sprite->data4 = sub_8077ABC(gBattleAnimEnemyMonIndex, 3) + r6; + sprite->callback = sub_8078B34; + oamt_set_x3A_32(sprite, sub_80D020C); +} + +void sub_80D020C(struct Sprite* sprite) +{ + if (sprite->animEnded == 1) + move_anim_8072740(sprite); +} + +void sub_80D0228(struct Sprite* sprite) +{ + s16 r8 = 32; + s16 r4 = -32; + s16 r9 = 16; + s16 r6 = -16; + if (gBattleAnimArgs[0] != 0) + { + r8 = r4; + r4 = 32; + r9 = r6; + r6 = 16; + StartSpriteAnim(sprite, gBattleAnimArgs[0]); + } + sprite->pos1.x += r8; + sprite->pos1.y += r4; + sprite->data0 = 6; + sprite->data1 = sprite->pos1.x; + sprite->data2 = sub_8077ABC(gBattleAnimEnemyMonIndex, 2) + r9; + sprite->data3 = sprite->pos1.y; + sprite->data4 = sub_8077ABC(gBattleAnimEnemyMonIndex, 3) + r6; + obj_translate_based_on_private_1_2_3_4(sprite); + sprite->data5 = gBattleAnimArgs[0]; + sprite->data6 = sprite->data0; + sprite->callback = sub_80D02D0; +} + +void sub_80D02D0(struct Sprite* sprite) +{ + if (sub_8078B5C(sprite) && sprite->animEnded == 1) + { + SeekSpriteAnim(sprite, 0); + sprite->animPaused = 1; + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.x = 2; + sprite->pos2.y = -2; + sprite->data0 = sprite->data6; + sprite->data1 ^= 1; + sprite->data2 ^= 1; + sprite->data4 = 0; + sprite->data3 = 0; + sprite->callback = sub_80D0344; + } +} + +void sub_80D0344(struct Sprite* sprite) +{ + if (sprite->data3) + { + sprite->pos2.x = -sprite->pos2.x; + sprite->pos2.y = -sprite->pos2.y; + } + sprite->data3 ^= 1; + if (++sprite->data4 == 0x33) + { + sprite->pos2.y = 0; + sprite->pos2.x = 0; + sprite->data4 = 0; + sprite->data3 = 0; + sprite->animPaused = 0; + StartSpriteAnim(sprite, sprite->data5 ^ 1); + sprite->callback = sub_80D03A8; + } +} + +void sub_80D03A8(struct Sprite* sprite) +{ + if (sub_8078B5C(sprite) != 0) + move_anim_8072740(sprite); +} + +void sub_80D03C4(u8 taskId) +{ + u8 spriteId = obj_id_for_side_relative_to_move(1); + sub_8078E70(spriteId, 1); + obj_id_set_rotscale(spriteId, 0xD0, 0xD0, 0); + sub_8079108(gSprites[spriteId].oam.paletteNum + 16, 0); + gTasks[taskId].data[0] = 0x50; + gTasks[taskId].func = sub_80D0428; +} + +void sub_80D0428(u8 taskId) +{ + if (--gTasks[taskId].data[0] == -1) + { + u8 spriteId = obj_id_for_side_relative_to_move(1); + sub_8078F40(spriteId); + sub_8079108(gSprites[spriteId].oam.paletteNum + 16, 1); + DestroyAnimVisualTask(taskId); + } +} + +void sub_80D0488(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + u8 spriteId = obj_id_for_side_relative_to_move(0); + task->data[0] = spriteId; + sub_8078E70(spriteId, 0); + task->data[1] = 0; + task->data[2] = 0; + task->data[3] = 0; + task->data[4] = 0x100; + task->data[5] = 0; + task->data[6] = 0; + task->data[7] = sub_8079E90(gBattleAnimPlayerMonIndex); + task->func = sub_80D04E0; +} + +void sub_80D04E0(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + switch (task->data[1]) + { + case 0: + if (task->data[2] == 0 || task->data[2] == 3 || task->data[2] == 6) + sub_80D0614(task, taskId); + task->data[2]++; + task->data[4] += 0x28; + obj_id_set_rotscale(task->data[0], task->data[4], task->data[4], 0); + sub_8079A64(task->data[0]); + if (task->data[2] == 32) + { + task->data[5]++; + task->data[1]++; + } + break; + case 1: + if (task->data[6] == 0) + { + if (task->data[5] == 3) + { + task->data[2] = 0; + task->data[1] = 3; + } + else + { + task->data[2] = 0; + task->data[3] = 0; + task->data[4] = 0x100; + obj_id_set_rotscale(task->data[0], task->data[4], task->data[4], 0); + sub_8079A64(task->data[0]); + task->data[1] = 2; + } + } + break; + case 2: + task->data[1] = 0; + break; + case 3: + if (++task->data[2] > 32) + { + task->data[2] = 0; + task->data[1]++; + } + break; + case 4: + task->data[2] += 2; + task->data[4] -= 0x50; + obj_id_set_rotscale(task->data[0], task->data[4], task->data[4], 0); + sub_8079A64(task->data[0]); + if (task->data[2] == 32) + { + task->data[2] = 0; + task->data[1]++; + } + break; + case 5: + sub_8078F40(task->data[0]); + gSprites[task->data[15]].pos2.y = 0; + DestroyAnimVisualTask(taskId); + break; + } +} + +#ifdef NONMATCHING +void sub_80D0614(struct Task* task, u8 taskId) +{ + s16 r8 = duplicate_obj_of_side_rel2move_in_transparent_mode(0); + if (r8 >= 0) + { + u8 r6 = AllocOamMatrix(); + if (r6 == 0xFF) + obj_delete_but_dont_free_vram(&gSprites[r8]); + else + { + gSprites[r8].oam.objMode = 1; + gSprites[r8].oam.affineMode = 3; + gSprites[r8].affineAnimPaused = 1; + gSprites[r8].oam.matrixNum = r6; + gSprites[r8].subpriority = task->data[7] - task->data[3]; + task->data[3]++; + task->data[6]++; + gSprites[r8].data0 = 16; + gSprites[r8].data1 = taskId; + gSprites[r8].data2 = 6; + gSprites[r8].callback = sub_80D0704; + obj_id_set_rotscale(r8, task->data[4], task->data[4], 0); + gSprites[r8].oam.affineMode = 1; + CalcCenterToCornerVec(&gSprites[r8], gSprites[r8].oam.shape, gSprites[r8].oam.size, gSprites[r8].oam.affineMode); + } + } +} +#else +__attribute__((naked)) +void sub_80D0614(struct Task* task, u8 taskId) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r9\n\ + mov r6, r8\n\ + push {r6,r7}\n\ + adds r7, r0, 0 @r7 is task\n\ + lsls r1, 24\n\ + lsrs r1, 24\n\ + mov r9, r1 @r9 is taskId\n\ + movs r0, 0\n\ + bl duplicate_obj_of_side_rel2move_in_transparent_mode\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + mov r8, r0\n\ + lsls r0, 16\n\ + asrs r4, r0, 16\n\ + cmp r4, 0\n\ + blt _080D06EE @jump to bottom\n\ + bl AllocOamMatrix\n\ + lsls r0, 24\n\ + lsrs r6, r0, 24\n\ + cmp r6, 0xFF\n\ + bne _080D0658\n\ + lsls r0, r4, 4\n\ + adds r0, r4\n\ + lsls r0, 2\n\ + ldr r1, _080D0654 @ =gSprites\n\ + adds r0, r1\n\ + bl obj_delete_but_dont_free_vram\n\ + b _080D06EE @ jump to bottom\n\ + .align 2, 0\n\ +_080D0654: .4byte gSprites\n\ +_080D0658:\n\ + ldr r5, _080D06FC @ =gSprites\n\ + lsls r3, r4, 4\n\ + adds r3, r4\n\ + lsls r3, 2\n\ + adds r4, r3, r5\n\ + ldrb r1, [r4, 0x1]\n\ + movs r0, 0xD\n\ + negs r0, r0\n\ + ands r0, r1\n\ + movs r1, 0x4\n\ + orrs r0, r1\n\ + movs r1, 0x3\n\ + orrs r0, r1\n\ + strb r0, [r4, 0x1]\n\ + adds r2, r4, 0\n\ + adds r2, 0x2C\n\ + ldrb r0, [r2]\n\ + movs r1, 0x80\n\ + orrs r0, r1\n\ + strb r0, [r2]\n\ + movs r0, 0x1F\n\ + ands r6, r0\n\ + lsls r2, r6, 1\n\ + ldrb r1, [r4, 0x3]\n\ + movs r0, 0x3F\n\ + negs r0, r0\n\ + ands r0, r1\n\ + orrs r0, r2\n\ + strb r0, [r4, 0x3]\n\ + ldrb r0, [r7, 0x16]\n\ + ldrb r1, [r7, 0xE]\n\ + subs r0, r1\n\ + adds r1, r4, 0\n\ + adds r1, 0x43\n\ + strb r0, [r1]\n\ + ldrh r0, [r7, 0xE]\n\ + adds r0, 0x1\n\ + strh r0, [r7, 0xE]\n\ + ldrh r0, [r7, 0x14]\n\ + adds r0, 0x1\n\ + strh r0, [r7, 0x14]\n\ + movs r0, 0x10\n\ + strh r0, [r4, 0x2E]\n\ + mov r0, r9\n\ + strh r0, [r4, 0x30]\n\ + movs r0, 0x6\n\ + strh r0, [r4, 0x32]\n\ + adds r5, 0x1C\n\ + adds r3, r5\n\ + ldr r0, _080D0700 @ =sub_80D0704\n\ + str r0, [r3]\n\ + mov r1, r8 @duplicate_obj_of_side_rel2move_in_transparent_mode(0)\n\ + lsls r0, r1, 24\n\ + lsrs r0, 24\n\ + movs r1, 0x10\n\ + ldrsh r2, [r7, r1]\n\ + adds r1, r2, 0\n\ + movs r3, 0\n\ + bl obj_id_set_rotscale\n\ + ldrb r0, [r4, 0x1]\n\ + movs r3, 0x4\n\ + negs r3, r3\n\ + ands r3, r0\n\ + movs r0, 0x1\n\ + orrs r3, r0\n\ + strb r3, [r4, 0x1]\n\ + lsrs r1, r3, 6\n\ + ldrb r2, [r4, 0x3]\n\ + lsrs r2, 6\n\ + lsls r3, 30\n\ + lsrs r3, 30\n\ + adds r0, r4, 0\n\ + bl CalcCenterToCornerVec\n\ +_080D06EE:\n\ + pop {r3,r4}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_080D06FC: .4byte gSprites\n\ +_080D0700: .4byte sub_80D0704\n\ +.syntax divided\n"); +} +#endif + +void sub_80D0704(struct Sprite* sprite) +{ + if (--sprite->data0 == 0) + { + gTasks[sprite->data1].data[sprite->data2]--; + FreeOamMatrix(sprite->oam.matrixNum); + obj_delete_but_dont_free_vram(sprite); + } +} + +void sub_80D074C(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + if (gBattleAnimArgs[1] == 0) + DestroyAnimVisualTask(taskId); + else + { + u8 spriteId = obj_id_for_side_relative_to_move(gBattleAnimArgs[0]); + task->data[0] = spriteId; + task->data[1] = 0; + task->data[2] = gBattleAnimArgs[1]; + task->data[3] = 0; + task->data[4] = 0; + sub_80798F4(task, spriteId, &gUnknown_083D76F4); + task->func = sub_80D07AC; + } +} + + + \ No newline at end of file -- cgit v1.2.3 From 863afd9ed825d0f401b2c6441c5f1ac54c41540a Mon Sep 17 00:00:00 2001 From: "U-User-PC\\User" Date: Mon, 28 Aug 2017 12:37:37 -0400 Subject: decompiled up to sub_80D0E30 --- src/battle_anim_80CA710.c | 447 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 446 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/battle_anim_80CA710.c b/src/battle_anim_80CA710.c index 76c74c89a..2c2c40ff1 100755 --- a/src/battle_anim_80CA710.c +++ b/src/battle_anim_80CA710.c @@ -16,6 +16,35 @@ struct __attribute__((packed)) Some3ByteStruct { u8 unkArr[3]; }; +struct UnknownStruct_1 +{ + void *src[2]; + void *dest; + u32 unkC; + void (*unk10)(void); + u8 srcBank; + u8 unk15; + u8 unk16; + u8 unk17; + u8 taskId; + u8 filler19[0x7]; +}; + +struct UnknownStruct_2 +{ + const void *dest; + u32 control; + u8 unk8; + u8 unk9; +}; + +struct UnknownStruct6 +{ + u16 unk0[0xA0]; + u8 fillerA0[0x640]; + u16 unk780[0xA0]; +}; + extern u8 gBanksBySide[]; extern s16 gBattleAnimArgs[8]; extern u8 gBattleAnimPlayerMonIndex; @@ -27,6 +56,8 @@ extern struct SpriteTemplate gSpriteTemplate_83D75AC; extern struct SpriteTemplate gBattleAnimSpriteTemplate_83D6FC8; extern struct SpriteTemplate gBattleAnimSpriteTemplate_83D6FF8; extern struct AffineAnimFrameCmd gUnknown_083D76F4; +extern struct AffineAnimFrameCmd gUnknown_083D7714; +extern struct AffineAnimFrameCmd gUnknown_083D77B0; extern s16 gUnknown_03000728[]; extern s8 gUnknown_083D680C[11][3]; extern u16 gUnknown_083D6984[]; @@ -36,6 +67,10 @@ extern u8 gNoOfAllBanks; extern u8 gHealthboxIDs[]; extern u16 gUnknown_083D712C[4][6]; extern u16 gBattleTypeFlags; +extern u16 gUnknown_030042C0; +extern u16 gUnknown_03004288; +extern struct UnknownStruct6 gUnknown_03004DE0; +extern struct UnknownStruct_1 gUnknown_03004DC0; void sub_80CA768(struct Sprite* sprite); void sub_80CA8B4(struct Sprite* sprite); @@ -112,6 +147,7 @@ void sub_80D02D0(struct Sprite* sprite); void sub_80D0344(struct Sprite* sprite); void sub_80D03A8(struct Sprite* sprite); void sub_80D0704(struct Sprite* sprite); +void sub_80D0E8C(struct Sprite* sprite); s16 sub_80CC338(struct Sprite* sprite); @@ -152,6 +188,9 @@ s16 sub_81174E0(s16 a); s16 sub_81174C4(s16 a, s16 b); void sub_8079108(u16 a1, bool8 a2); void sub_80798F4(struct Task *task, u8 a2, void *a3); +bool8 sub_807992C(struct Task *task); +u8 sub_8077FC0(u8 slot); +void sub_80895F8(struct UnknownStruct_2 unk); void move_anim_8074EE0(struct Sprite *sprite); bool8 sub_8078718(struct Sprite *sprite); @@ -168,6 +207,10 @@ void sub_80CF514(u8 taskId); void sub_80D0428(u8 taskId); void sub_80D04E0(u8 taskId); void sub_80D07AC(u8 taskId); +void sub_80D0904(u8 taskId); +void sub_80D0A8C(u8 taskId); +void sub_80D0B3C(u8 taskId); +void sub_80D0D68(u8 taskId); void sub_80CC358(struct Task* task, u8 taskId); void sub_80D0614(struct Task* task, u8 taskId); @@ -4494,5 +4537,407 @@ void sub_80D074C(u8 taskId) } } +void sub_80D07AC(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + switch (task->data[1]) + { + case 0: + sub_807992C(task); + task->data[4] += 3; + gSprites[task->data[0]].pos2.y += task->data[4]; + if (++task->data[3] > 7) + { + task->data[3] = 0; + task->data[1]++; + } + break; + case 1: + sub_807992C(task); + gSprites[task->data[0]].pos2.y += task->data[4]; + if (++task->data[3] > 7) + { + task->data[3] = 0; + task->data[1]++; + } + break; + case 2: + if (task->data[4] != 0) + { + gSprites[task->data[0]].pos2.y -= 2; + task->data[4] -= 2; + } + else + task->data[1]++; + break; + case 3: + if (!sub_807992C(task)) + { + if (--task->data[2] == 0) + { + gSprites[task->data[0]].pos2.y = 0; + DestroyAnimVisualTask(taskId); + } + else + { + sub_80798F4(task, task->data[0], &gUnknown_083D76F4); + task->data[1] = 0; + } + } + break; + } +} - \ No newline at end of file +void sub_80D08C8(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + u8 spriteId = obj_id_for_side_relative_to_move(0); + sub_80798F4(task, spriteId, &gUnknown_083D7714); + task->func = sub_80D0904; +} + +void sub_80D0904(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + if (!sub_807992C(task)) + DestroyAnimVisualTask(taskId); +} + +void sub_80D0930(struct Sprite* sprite) +{ + if (GetBankSide(gBattleAnimPlayerMonIndex) == 0) + { + StartSpriteAnim(sprite, 0); + sprite->pos1.x = sub_8077ABC(gBattleAnimPlayerMonIndex, 2) + 32; + sprite->data1 = 0x40; + } + else + { + StartSpriteAnim(sprite, 1); + sprite->pos1.x = sub_8077ABC(gBattleAnimPlayerMonIndex, 2) - 32; + sprite->data1 = -0x40; + } + sprite->pos1.y = sub_8077ABC(gBattleAnimPlayerMonIndex, 3); + sprite->data0 = 0x34; + sprite->data2 = 0; + sprite->data3 = 0; + sprite->data4 = 0; + oamt_set_x3A_32(sprite, move_anim_8072740); + sprite->callback = sub_8078394; +} + +void sub_80D09C0(struct Sprite* sprite) +{ + u8 bank; + if (gBattleAnimArgs[0] == 0) + bank = gBattleAnimPlayerMonIndex; + else + bank = gBattleAnimEnemyMonIndex; + if (GetBankSide(bank) == 1) + { + gBattleAnimArgs[1] *= -1; + } + sprite->pos1.x = sub_8077ABC(bank, 2) + gBattleAnimArgs[1]; + sprite->pos1.y = sub_8077ABC(bank, 3) + gBattleAnimArgs[2]; + if (sprite->pos1.y <= 7) + sprite->pos1.y = 8; + oamt_set_x3A_32(sprite, move_anim_8074EE0); + sprite->callback = sub_80785E4; +} + +void sub_80D0A4C(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + u8 spriteId = obj_id_for_side_relative_to_move(0); + task->data[0] = spriteId; + task->data[1] = 0; + sub_80798F4(task, spriteId, &gUnknown_083D77B0); + task->func = sub_80D0A8C; +} + +void sub_80D0A8C(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + if (!sub_807992C(task)) + DestroyAnimVisualTask(taskId); +} + +void sub_80D0AB8(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + task->data[0] = obj_id_for_side_relative_to_move(0); + task->data[1] = 0; + task->data[2] = 4; + task->data[3] = 7; + task->data[4] = 3; + task->data[5] = gSprites[task->data[0]].pos1.x; + task->data[6] = gSprites[task->data[0]].pos1.y; + task->data[7] = 0; + task->data[8] = 0; + task->data[9] = 2; + if (GetBankSide(gBattleAnimPlayerMonIndex) == 1) + task->data[2] *= -1; + task->func = sub_80D0B3C; +} + +void sub_80D0B3C(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + if (++task->data[7] > 2) + { + task->data[7] = 0; + task->data[8]++; + if ((task->data[8] & 1) != 0) + { + gSprites[task->data[0]].pos1.y += task->data[9]; + } + else + gSprites[task->data[0]].pos1.y -= task->data[9]; + } + switch (task->data[1]) + { + case 0: + gSprites[task->data[0]].pos1.x += task->data[2]; + if (--task->data[3] == 0) + { + task->data[3] = 14; + task->data[1] = 1; + } + break; + case 1: + gSprites[task->data[0]].pos1.x -= task->data[2]; + if (--task->data[3] == 0) + { + task->data[3] = 7; + task->data[1] = 2; + } + break; + case 2: + gSprites[task->data[0]].pos1.x += task->data[2]; + if (--task->data[3] == 0) + { + if (--task->data[4] != 0) + { + task->data[3] = 7; + task->data[1] = 0; + } + else + { + if ((task->data[8] & 1) != 0) + { + gSprites[task->data[0]].pos1.y -= task->data[9]; + } + DestroyAnimVisualTask(taskId); + } + } + break; + } +} + +void sub_80D0C88(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + struct UnknownStruct_2 sp; + s16 i; + task->data[0] = sub_8077FC0(gBattleAnimEnemyMonIndex) + 32; + task->data[1] = 4; + task->data[2] = 0; + task->data[3] = 0; + task->data[4] = 0; + task->data[5] = 0; + task->data[15] = sub_807A100(gBattleAnimEnemyMonIndex, 0); + if (GetBankIdentity_permutated(gBattleAnimEnemyMonIndex) == 1) + { + task->data[6] = gUnknown_030042C0; + sp.dest = (u16 *)REG_ADDR_BG1HOFS; + } + else + { + task->data[6] = gUnknown_03004288; + sp.dest = (u16 *)REG_ADDR_BG2HOFS; + } + for (i = task->data[0] - 0x40; i <= task->data[0];i++) + { + if (i >= 0) + { + gUnknown_03004DE0.unk0[i] = task->data[6] + 0xF0; + gUnknown_03004DE0.unk780[i] = task->data[6] + 0xF0; + } + } + sp.control = 0xa2600001; + sp.unk8 = 1; + sp.unk9 = 0; + sub_80895F8(sp); + task->func = sub_80D0D68; +} + +#ifdef NONMATCHING +void sub_80D0D68(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + switch (task->data[4]) + { + case 0: + if (++task->data[5] > 20) + task->data[4]++; + break; + case 1: + if (++task->data[1] > 3) + { + task->data[1] = 0; + task->data[2] = 3 & task->data[3]; + task->data[5] = task->data[0] - task->data[3]; + switch (task->data[2]) + { + case 1: + task->data[5] -= 2; + default: + case 0: + break; + case 2: + case 3: + task->data[5]++; + break; + } + if (task->data[5] >= 0) + { + gUnknown_03004DE0.unk0[task->data[5]] = task->data[6]; + gUnknown_03004DE0.unk780[task->data[5]] = task->data[6]; + } + if (++task->data[3] >= task->data[15]) + { + gUnknown_03004DC0.unk15 = 3; + DestroyAnimVisualTask(taskId); + } + + } + break; + } +} +#else +__attribute__((naked)) +void sub_80D0D68(u8 taskId) +{ + asm(".syntax unified\n\ + push {r4,lr}\n\ + lsls r0, 24\n\ + lsrs r4, r0, 24\n\ + lsls r0, r4, 2\n\ + adds r0, r4\n\ + lsls r0, 3\n\ + ldr r1, _080D0D88 @ =gTasks\n\ + adds r3, r0, r1\n\ + movs r1, 0x10\n\ + ldrsh r0, [r3, r1]\n\ + cmp r0, 0\n\ + beq _080D0D8C\n\ + cmp r0, 0x1\n\ + beq _080D0DA2\n\ + b _080D0E22\n\ + .align 2, 0\n\ +_080D0D88: .4byte gTasks\n\ +_080D0D8C:\n\ + ldrh r0, [r3, 0x12]\n\ + adds r0, 0x1\n\ + strh r0, [r3, 0x12]\n\ + lsls r0, 16\n\ + asrs r0, 16\n\ + cmp r0, 0x14\n\ + ble _080D0E22\n\ + ldrh r0, [r3, 0x10]\n\ + adds r0, 0x1\n\ + strh r0, [r3, 0x10]\n\ + b _080D0E22\n\ +_080D0DA2:\n\ + ldrh r0, [r3, 0xA]\n\ + adds r0, 0x1\n\ + strh r0, [r3, 0xA]\n\ + lsls r0, 16\n\ + asrs r0, 16\n\ + cmp r0, 0x3\n\ + ble _080D0E22\n\ + movs r0, 0\n\ + strh r0, [r3, 0xA]\n\ + ldrh r1, [r3, 0xE]\n\ + movs r0, 0x3\n\ + ands r0, r1\n\ + strh r0, [r3, 0xC]\n\ + ldrh r0, [r3, 0x8]\n\ + subs r0, r1\n\ + strh r0, [r3, 0x12]\n\ + movs r2, 0xC\n\ + ldrsh r1, [r3, r2]\n\ + cmp r1, 0x1\n\ + beq _080D0DD8\n\ + cmp r1, 0x1\n\ + ble _080D0DE0\n\ + cmp r1, 0x2\n\ + beq _080D0DDC\n\ + cmp r1, 0x3\n\ + beq _080D0DDC\n\ + b _080D0DE0\n\ +_080D0DD8:\n\ + subs r0, 0x2\n\ + b _080D0DDE\n\ +_080D0DDC:\n\ + adds r0, 0x1\n\ +_080D0DDE:\n\ + strh r0, [r3, 0x12]\n\ +_080D0DE0:\n\ + movs r1, 0x12\n\ + ldrsh r0, [r3, r1]\n\ + cmp r0, 0\n\ + blt _080D0E04\n\ + ldr r2, _080D0E28 @ =gUnknown_03004DE0\n\ + lsls r0, 1\n\ + adds r0, r2\n\ + ldrh r1, [r3, 0x14]\n\ + strh r1, [r0]\n\ + movs r1, 0x12\n\ + ldrsh r0, [r3, r1]\n\ + lsls r0, 1\n\ + movs r1, 0xF0\n\ + lsls r1, 3\n\ + adds r2, r1\n\ + adds r0, r2\n\ + ldrh r1, [r3, 0x14]\n\ + strh r1, [r0]\n\ +_080D0E04:\n\ + ldrh r0, [r3, 0xE]\n\ + adds r0, 0x1\n\ + strh r0, [r3, 0xE]\n\ + lsls r0, 16\n\ + asrs r0, 16\n\ + movs r2, 0x26\n\ + ldrsh r1, [r3, r2]\n\ + cmp r0, r1\n\ + blt _080D0E22\n\ + ldr r1, _080D0E2C @ =gUnknown_03004DC0\n\ + movs r0, 0x3\n\ + strb r0, [r1, 0x15]\n\ + adds r0, r4, 0\n\ + bl DestroyAnimVisualTask\n\ +_080D0E22:\n\ + pop {r4}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_080D0E28: .4byte gUnknown_03004DE0\n\ +_080D0E2C: .4byte gUnknown_03004DC0\n\ +.syntax divided\n"); +} +#endif + +void sub_80D0E30(struct Sprite* sprite) +{ + sprite->pos1.x = sub_8077ABC(gBattleAnimEnemyMonIndex, 0) - 16; + sprite->pos1.y = sub_8077FC0(gBattleAnimEnemyMonIndex) + 16; + sprite->data0 = 0; + sprite->data1 = 0; + sprite->data2 = 0; + sprite->data3 = 16; + sprite->data4 = 0; + sprite->data5 = sub_807A100(gBattleAnimEnemyMonIndex, 0) + 2; + sprite->data6 = sub_8076F98(0x3F); + sprite->callback = sub_80D0E8C; +} -- cgit v1.2.3 From f4acfafe795164d40252dc18d9afa215373af9fc Mon Sep 17 00:00:00 2001 From: "U-User-PC\\User" Date: Wed, 30 Aug 2017 13:33:28 -0400 Subject: decompiled up to sub_80D1318 --- src/battle_anim_80CA710.c | 602 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 601 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/battle_anim_80CA710.c b/src/battle_anim_80CA710.c index 2c2c40ff1..80bca9178 100755 --- a/src/battle_anim_80CA710.c +++ b/src/battle_anim_80CA710.c @@ -3,6 +3,7 @@ #include "battle_anim.h" #include "blend_palette.h" #include "decompress.h" +#include "main.h" #include "palette.h" #include "rng.h" #include "rom_8077ABC.h" @@ -148,6 +149,7 @@ void sub_80D0344(struct Sprite* sprite); void sub_80D03A8(struct Sprite* sprite); void sub_80D0704(struct Sprite* sprite); void sub_80D0E8C(struct Sprite* sprite); +void sub_80D1098(struct Sprite* sprite); s16 sub_80CC338(struct Sprite* sprite); @@ -167,7 +169,7 @@ void sub_80785E4(struct Sprite *sprite); void sub_8078278(struct Sprite *sprite); void sub_8078C00(struct Sprite *sprite); void sub_8078114(struct Sprite *sprite); - +void sub_80793C4(struct Sprite *sprite); extern void sub_8043DB0(); extern void sub_8043DFC(); @@ -4941,3 +4943,601 @@ void sub_80D0E30(struct Sprite* sprite) sprite->data6 = sub_8076F98(0x3F); sprite->callback = sub_80D0E8C; } + +void sub_80D0E8C(struct Sprite* sprite) +{ + switch (sprite->data0) + { + case 0: + if (++sprite->data2 > 1) + { + sprite->data2 = 0; + sprite->invisible = !sprite->invisible; + } + if (++sprite->data1 > 16) + { + sprite->invisible = 0; + sprite->data0++; + } + break; + case 1: + if (++sprite->data1 > 3 && sprite->data2 < sprite->data5) + { + sprite->data1 = 0; + sprite->pos1.y -= 1; + sprite->data2++; + if (sprite->data2 % 10 == 0) + PlaySE12WithPanning(0xCD, sprite->data6); + } + sprite->data4 += sprite->data3; + if (sprite->data4 > 31) + { + sprite->data4 = 0x40 - sprite->data4; + sprite->data3 *= -1; + } + else if (sprite->data4 <= -32) + { + sprite->data4 = -0x40 - sprite->data4; + sprite->data3 *= -1; + } + sprite->pos2.x = sprite->data4; + if (sprite->data5 == sprite->data2) + { + sprite->data1 = 0; + sprite->data2 = 0; + sprite->data0++; + } + break; + case 2: + if (++sprite->data2 > 1) + { + sprite->data2 = 0; + sprite->invisible = !sprite->invisible; + } + if (++sprite->data1 > 16) + { + sprite->invisible = 0; + move_anim_8072740(sprite); + } + break; + } +} + +#ifdef NONMATCHING +void sub_80D0FD8(struct Sprite* sprite) +{ + u16 sp[2]; + u8 bank; + u8 r4; + u16* r7; + sp[0] = 0; + sp[1] = 0; + r7 = &sp[1]; + if (gBattleAnimArgs[2] == 0) + bank = gBattleAnimPlayerMonIndex; + else + bank = gBattleAnimEnemyMonIndex; + r4 = gBattleAnimArgs[3] ^ 1; + if (IsDoubleBattle() && b_side_obj__get_some_boolean(bank ^ 2)) + { + sub_807A3FC(bank, r4, &sp[0], r7); + if (r4 == 0) + r4 = sub_8077ABC(bank, 0); + else + r4 = sub_8077ABC(bank, 2); + if (GetBankSide(bank)) + { + gBattleAnimArgs[0] -= (sp[0] - r4) - gBattleAnimArgs[0]; + } + else + gBattleAnimArgs[0] = sp[0] - r4; + } + sprite->callback = sub_80793C4; + sub_80793C4(sprite); +} +#else +__attribute__((naked)) +void sub_80D0FD8(struct Sprite* sprite) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + sub sp, 0x4\n\ + adds r6, r0, 0\n\ + movs r5, 0\n\ + mov r0, sp\n\ + strh r5, [r0]\n\ + mov r1, sp\n\ + adds r1, 0x2\n\ + strh r5, [r1]\n\ + ldr r0, _080D0FFC @ =gBattleAnimArgs\n\ + movs r3, 0x4\n\ + ldrsh r2, [r0, r3]\n\ + adds r7, r1, 0\n\ + adds r1, r0, 0\n\ + cmp r2, 0\n\ + bne _080D1004\n\ + ldr r0, _080D1000 @ =gBattleAnimPlayerMonIndex\n\ + b _080D1006\n\ + .align 2, 0\n\ +_080D0FFC: .4byte gBattleAnimArgs\n\ +_080D1000: .4byte gBattleAnimPlayerMonIndex\n\ +_080D1004:\n\ + ldr r0, _080D1040 @ =gBattleAnimEnemyMonIndex\n\ +_080D1006:\n\ + ldrb r5, [r0]\n\ + ldrb r1, [r1, 0x6]\n\ + movs r0, 0x1\n\ + adds r4, r0, 0\n\ + eors r4, r1\n\ + bl IsDoubleBattle\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _080D107E\n\ + movs r1, 0x2\n\ + adds r0, r5, 0\n\ + eors r0, r1\n\ + bl b_side_obj__get_some_boolean\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _080D107E\n\ + adds r0, r5, 0\n\ + adds r1, r4, 0\n\ + mov r2, sp\n\ + adds r3, r7, 0\n\ + bl sub_807A3FC\n\ + cmp r4, 0\n\ + bne _080D1044\n\ + adds r0, r5, 0\n\ + movs r1, 0\n\ + b _080D1048\n\ + .align 2, 0\n\ +_080D1040: .4byte gBattleAnimEnemyMonIndex\n\ +_080D1044:\n\ + adds r0, r5, 0\n\ + movs r1, 0x2\n\ +_080D1048:\n\ + bl sub_8077ABC\n\ + lsls r0, 24\n\ + lsrs r4, r0, 24\n\ + adds r0, r5, 0\n\ + bl GetBankSide\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _080D1074\n\ + ldr r2, _080D1070 @ =gBattleAnimArgs\n\ + mov r0, sp\n\ + ldrh r1, [r0]\n\ + subs r1, r4\n\ + ldrh r0, [r2]\n\ + subs r1, r0\n\ + subs r0, r1\n\ + strh r0, [r2]\n\ + b _080D107E\n\ + .align 2, 0\n\ +_080D1070: .4byte gBattleAnimArgs\n\ +_080D1074:\n\ + ldr r1, _080D1090 @ =gBattleAnimArgs\n\ + mov r0, sp\n\ + ldrh r0, [r0]\n\ + subs r0, r4\n\ + strh r0, [r1]\n\ +_080D107E:\n\ + ldr r1, _080D1094 @ =sub_80793C4\n\ + str r1, [r6, 0x1C]\n\ + adds r0, r6, 0\n\ + bl _call_via_r1\n\ + add sp, 0x4\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_080D1090: .4byte gBattleAnimArgs\n\ +_080D1094: .4byte sub_80793C4\n\ + .syntax divided\n"); +} +#endif + +void sub_80D1098(struct Sprite* sprite) +{ + if (sub_8078B5C(sprite)) + { + FreeSpriteOamMatrix(sprite); + move_anim_8072740(sprite); + } +} + +#ifdef NONMATCHING +void sub_80D10B8(struct Sprite* sprite) +{ + s16 sp0 = 0; + s16 sp1 = 0; + u8 sp4; + u8 bankr7; + u8 bankr8; + u8 r10; + u16 r9; + u16 r6; + if (gBattleAnimArgs[5] == 0) + { + bankr7 = gBattleAnimPlayerMonIndex; + bankr8 = gBattleAnimEnemyMonIndex; + } + else + { + bankr7 = gBattleAnimEnemyMonIndex; + bankr8 = gBattleAnimPlayerMonIndex; + } + if (gBattleAnimArgs[6] == 0) + { + r10 = 0; + sp4 = 1; + } + else + { + r10 = 2; + sp4 = 3; + } + if (GetBankSide(bankr7) != 0) + { + r9 = sub_8077ABC(bankr7, r10) + gBattleAnimArgs[0]; + if (b_side_obj__get_some_boolean(bankr8 ^ 2)) + sprite->subpriority = gSprites[gObjectBankIDs[bankr8 ^ 2]].subpriority - 1; + else + sprite->subpriority = gSprites[gObjectBankIDs[bankr8]].subpriority - 1; + } + else + { + r9 = sub_8077ABC(bankr7, r10) - gBattleAnimArgs[0]; + if (gMain.inBattle && b_side_obj__get_some_boolean(bankr7 ^ 2)) + { + if (gSprites[gObjectBankIDs[bankr7]].pos1.x < gSprites[gObjectBankIDs[bankr7 ^ 2]].pos1.x) + { + sprite->subpriority = gSprites[gObjectBankIDs[bankr7 ^ 2]].subpriority + 1; + } + else + { + sprite->subpriority = gSprites[gObjectBankIDs[bankr7]].subpriority - 1; + } + } + else + { + sprite->subpriority = gSprites[gObjectBankIDs[bankr7]].subpriority - 1; + } + + } + r6 = sub_8077ABC(bankr7, sp4) + gBattleAnimArgs[1]; + if (gMain.inBattle && b_side_obj__get_some_boolean(bankr8 ^ 2)) + { + sub_807A3FC(bankr8, gBattleAnimArgs[6], &sp0, &sp1); + } + else + { + sp0 = sub_8077ABC(bankr8, r10); + sp1 = sub_8077ABC(bankr8, sp4); + } + if (GetBankSide(bankr8)) + { + sp0 += gBattleAnimArgs[3]; + } + else + { + sp0 -= gBattleAnimArgs[3]; + } + sp1 += gBattleAnimArgs[4]; + sprite->data1 = r9; + sprite->pos1.x = r9; + sprite->data3 = r6; + sprite->pos1.y = r6; + sprite->data2 = sp0; + sprite->data4 = sp1; + sprite->data0 = gBattleAnimArgs[0]; + obj_translate_based_on_private_1_2_3_4(sprite); + sprite->callback = sub_80D1098; + sub_80D1098(sprite); +} +#else +__attribute__((naked)) +void sub_80D10B8(struct Sprite* sprite) +{ + asm (".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, 0x8\n\ + adds r5, r0, 0\n\ + movs r6, 0\n\ + mov r0, sp\n\ + strh r6, [r0]\n\ + mov r1, sp\n\ + adds r1, 0x2\n\ + strh r6, [r1]\n\ + ldr r0, _080D10E4 @ =gBattleAnimArgs\n\ + movs r2, 0xA\n\ + ldrsh r0, [r0, r2]\n\ + cmp r0, 0\n\ + bne _080D10F0\n\ + ldr r0, _080D10E8 @ =gBattleAnimPlayerMonIndex\n\ + ldrb r7, [r0]\n\ + ldr r0, _080D10EC @ =gBattleAnimEnemyMonIndex\n\ + b _080D10F6\n\ + .align 2, 0\n\ +_080D10E4: .4byte gBattleAnimArgs\n\ +_080D10E8: .4byte gBattleAnimPlayerMonIndex\n\ +_080D10EC: .4byte gBattleAnimEnemyMonIndex\n\ +_080D10F0:\n\ + ldr r0, _080D1110 @ =gBattleAnimEnemyMonIndex\n\ + ldrb r7, [r0]\n\ + ldr r0, _080D1114 @ =gBattleAnimPlayerMonIndex\n\ +_080D10F6:\n\ + ldrb r0, [r0]\n\ + mov r8, r0\n\ + ldr r0, _080D1118 @ =gBattleAnimArgs\n\ + movs r3, 0xC\n\ + ldrsh r0, [r0, r3]\n\ + cmp r0, 0\n\ + bne _080D111C\n\ + movs r0, 0\n\ + mov r10, r0\n\ + movs r1, 0x1\n\ + str r1, [sp, 0x4]\n\ + b _080D1124\n\ + .align 2, 0\n\ +_080D1110: .4byte gBattleAnimEnemyMonIndex\n\ +_080D1114: .4byte gBattleAnimPlayerMonIndex\n\ +_080D1118: .4byte gBattleAnimArgs\n\ +_080D111C:\n\ + movs r2, 0x2\n\ + mov r10, r2\n\ + movs r3, 0x3\n\ + str r3, [sp, 0x4]\n\ +_080D1124:\n\ + adds r0, r7, 0\n\ + bl GetBankSide\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _080D1180\n\ + adds r0, r7, 0\n\ + mov r1, r10\n\ + bl sub_8077ABC\n\ + lsls r0, 24\n\ + ldr r1, _080D1164 @ =gBattleAnimArgs\n\ + lsrs r0, 24\n\ + ldrh r1, [r1]\n\ + adds r0, r1\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + mov r9, r0\n\ + movs r0, 0x2\n\ + mov r4, r8\n\ + eors r4, r0\n\ + adds r0, r4, 0\n\ + bl b_side_obj__get_some_boolean\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _080D1170\n\ + ldr r2, _080D1168 @ =gSprites\n\ + ldr r0, _080D116C @ =gObjectBankIDs\n\ + adds r0, r4, r0\n\ + b _080D120A\n\ + .align 2, 0\n\ +_080D1164: .4byte gBattleAnimArgs\n\ +_080D1168: .4byte gSprites\n\ +_080D116C: .4byte gObjectBankIDs\n\ +_080D1170:\n\ + ldr r2, _080D1178 @ =gSprites\n\ + ldr r0, _080D117C @ =gObjectBankIDs\n\ + add r0, r8\n\ + b _080D120A\n\ + .align 2, 0\n\ +_080D1178: .4byte gSprites\n\ +_080D117C: .4byte gObjectBankIDs\n\ +_080D1180:\n\ + adds r0, r7, 0\n\ + mov r1, r10\n\ + bl sub_8077ABC\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + ldr r1, _080D11EC @ =gBattleAnimArgs\n\ + ldrh r1, [r1]\n\ + subs r0, r1\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + mov r9, r0\n\ + ldr r0, _080D11F0 @ =gMain\n\ + ldr r1, _080D11F4 @ =0x0000043d\n\ + adds r0, r1\n\ + ldrb r1, [r0]\n\ + movs r0, 0x2\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _080D1204\n\ + adds r4, r7, 0\n\ + movs r0, 0x2\n\ + eors r4, r0\n\ + adds r0, r4, 0\n\ + bl b_side_obj__get_some_boolean\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _080D1204\n\ + ldr r3, _080D11F8 @ =gSprites\n\ + ldr r2, _080D11FC @ =gObjectBankIDs\n\ + adds r0, r7, r2\n\ + ldrb r1, [r0]\n\ + lsls r0, r1, 4\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + adds r6, r0, r3\n\ + adds r2, r4, r2\n\ + ldrb r1, [r2]\n\ + lsls r0, r1, 4\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + adds r2, r0, r3\n\ + movs r3, 0x20\n\ + ldrsh r1, [r6, r3]\n\ + movs r3, 0x20\n\ + ldrsh r0, [r2, r3]\n\ + cmp r1, r0\n\ + bge _080D1200\n\ + adds r0, r2, 0\n\ + adds r0, 0x43\n\ + ldrb r0, [r0]\n\ + adds r0, 0x1\n\ + b _080D121A\n\ + .align 2, 0\n\ +_080D11EC: .4byte gBattleAnimArgs\n\ +_080D11F0: .4byte gMain\n\ +_080D11F4: .4byte 0x0000043d\n\ +_080D11F8: .4byte gSprites\n\ +_080D11FC: .4byte gObjectBankIDs\n\ +_080D1200:\n\ + adds r0, r6, 0\n\ + b _080D1214\n\ +_080D1204:\n\ + ldr r2, _080D1268 @ =gSprites\n\ + ldr r0, _080D126C @ =gObjectBankIDs\n\ + adds r0, r7, r0\n\ +_080D120A:\n\ + ldrb r1, [r0]\n\ + lsls r0, r1, 4\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + adds r0, r2\n\ +_080D1214:\n\ + adds r0, 0x43\n\ + ldrb r0, [r0]\n\ + subs r0, 0x1\n\ +_080D121A:\n\ + adds r1, r5, 0\n\ + adds r1, 0x43\n\ + strb r0, [r1]\n\ + adds r0, r7, 0\n\ + ldr r1, [sp, 0x4]\n\ + bl sub_8077ABC\n\ + lsls r0, 24\n\ + ldr r4, _080D1270 @ =gBattleAnimArgs\n\ + lsrs r0, 24\n\ + ldrh r1, [r4, 0x2]\n\ + adds r0, r1\n\ + lsls r0, 16\n\ + lsrs r6, r0, 16\n\ + ldr r0, _080D1274 @ =gMain\n\ + ldr r2, _080D1278 @ =0x0000043d\n\ + adds r0, r2\n\ + ldrb r1, [r0]\n\ + movs r0, 0x2\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _080D127C\n\ + mov r0, r8\n\ + movs r1, 0x2\n\ + eors r0, r1\n\ + bl b_side_obj__get_some_boolean\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _080D127C\n\ + ldrb r1, [r4, 0xC]\n\ + mov r0, r8\n\ + mov r2, sp\n\ + mov r3, sp\n\ + adds r3, 0x2\n\ + bl sub_807A3FC\n\ + b _080D129C\n\ + .align 2, 0\n\ +_080D1268: .4byte gSprites\n\ +_080D126C: .4byte gObjectBankIDs\n\ +_080D1270: .4byte gBattleAnimArgs\n\ +_080D1274: .4byte gMain\n\ +_080D1278: .4byte 0x0000043d\n\ +_080D127C:\n\ + mov r4, sp\n\ + mov r0, r8\n\ + mov r1, r10\n\ + bl sub_8077ABC\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + strh r0, [r4]\n\ + mov r0, r8\n\ + ldr r1, [sp, 0x4]\n\ + bl sub_8077ABC\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + mov r3, sp\n\ + strh r0, [r3, 0x2]\n\ +_080D129C:\n\ + mov r0, r8\n\ + bl GetBankSide\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _080D12C0\n\ + mov r3, sp\n\ + mov r2, sp\n\ + ldr r1, _080D12BC @ =gBattleAnimArgs\n\ + ldrh r0, [r1, 0x6]\n\ + ldrh r2, [r2]\n\ + adds r0, r2\n\ + strh r0, [r3]\n\ + adds r2, r1, 0\n\ + b _080D12CE\n\ + .align 2, 0\n\ +_080D12BC: .4byte gBattleAnimArgs\n\ +_080D12C0:\n\ + mov r3, sp\n\ + mov r0, sp\n\ + ldr r2, _080D1310 @ =gBattleAnimArgs\n\ + ldrh r0, [r0]\n\ + ldrh r1, [r2, 0x6]\n\ + subs r0, r1\n\ + strh r0, [r3]\n\ +_080D12CE:\n\ + ldrh r1, [r2, 0x8]\n\ + mov r0, sp\n\ + ldrh r0, [r0, 0x2]\n\ + adds r1, r0\n\ + mov r3, sp\n\ + strh r1, [r3, 0x2]\n\ + mov r0, r9\n\ + strh r0, [r5, 0x30]\n\ + strh r0, [r5, 0x20]\n\ + strh r6, [r5, 0x34]\n\ + strh r6, [r5, 0x22]\n\ + mov r0, sp\n\ + ldrh r0, [r0]\n\ + strh r0, [r5, 0x32]\n\ + strh r1, [r5, 0x36]\n\ + ldrh r0, [r2]\n\ + strh r0, [r5, 0x2E]\n\ + adds r0, r5, 0\n\ + bl obj_translate_based_on_private_1_2_3_4\n\ + ldr r1, _080D1314 @ =sub_80D1098\n\ + str r1, [r5, 0x1C]\n\ + adds r0, r5, 0\n\ + bl _call_via_r1\n\ + add sp, 0x8\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_080D1310: .4byte gBattleAnimArgs\n\ +_080D1314: .4byte sub_80D1098\n\ + .syntax divided\n"); +} +#endif + +void sub_80D1318(struct Sprite* sprite) +{ + u8 index = IndexOfSpritePaletteTag(0x27DB); + if (index != 0xFF) + { + BlendPalette(((index << 20) + 0x1010000) >> 16, 15, gBattleAnimArgs[5], gBattleAnimArgs[4]); + } + StartSpriteAffineAnim(sprite, 1); + sprite->callback = sub_80793C4; + sub_80793C4(sprite); +} \ No newline at end of file -- cgit v1.2.3 From 7c32f9d05f06303f5350eb079960e0d4fab40dcd Mon Sep 17 00:00:00 2001 From: "U-User-PC\\User" Date: Wed, 30 Aug 2017 16:03:26 -0400 Subject: decompiled up to sub_80D15A4 --- src/battle_anim_80CA710.c | 121 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 121 insertions(+) (limited to 'src') diff --git a/src/battle_anim_80CA710.c b/src/battle_anim_80CA710.c index 80bca9178..c1818fb39 100755 --- a/src/battle_anim_80CA710.c +++ b/src/battle_anim_80CA710.c @@ -59,6 +59,7 @@ extern struct SpriteTemplate gBattleAnimSpriteTemplate_83D6FF8; extern struct AffineAnimFrameCmd gUnknown_083D76F4; extern struct AffineAnimFrameCmd gUnknown_083D7714; extern struct AffineAnimFrameCmd gUnknown_083D77B0; +extern struct AffineAnimFrameCmd gUnknown_083D79BC; extern s16 gUnknown_03000728[]; extern s8 gUnknown_083D680C[11][3]; extern u16 gUnknown_083D6984[]; @@ -150,6 +151,13 @@ void sub_80D03A8(struct Sprite* sprite); void sub_80D0704(struct Sprite* sprite); void sub_80D0E8C(struct Sprite* sprite); void sub_80D1098(struct Sprite* sprite); +void sub_80D13AC(struct Sprite* sprite); +void sub_80D1424(struct Sprite* sprite); +void sub_80D144C(struct Sprite* sprite); +void sub_80D14C4(struct Sprite* sprite); +void sub_80D1504(struct Sprite* sprite); +void sub_80D154C(struct Sprite* sprite); +void sub_80D158C(struct Sprite* sprite); s16 sub_80CC338(struct Sprite* sprite); @@ -213,6 +221,8 @@ void sub_80D0904(u8 taskId); void sub_80D0A8C(u8 taskId); void sub_80D0B3C(u8 taskId); void sub_80D0D68(u8 taskId); +void sub_80D15E0(u8 taskId); + void sub_80CC358(struct Task* task, u8 taskId); void sub_80D0614(struct Task* task, u8 taskId); @@ -5540,4 +5550,115 @@ void sub_80D1318(struct Sprite* sprite) StartSpriteAffineAnim(sprite, 1); sprite->callback = sub_80793C4; sub_80793C4(sprite); +} + +void sub_80D1368(struct Sprite* sprite) +{ + s16 r1; + sub_80787B0(sprite, 0); + r1 = (GetBankSide(gBattleAnimPlayerMonIndex)) ? -0xA0 : 0xA0; + sprite->data0 = 0x380; + sprite->data1 = r1; + sprite->data7 = gBattleAnimArgs[2]; + sprite->callback = sub_80D13AC; +} + +void sub_80D13AC(struct Sprite* sprite) +{ + s16 add; + sprite->pos2.y -= (sprite->data0 >> 8); + sprite->pos2.x = sprite->data1 >> 8; + sprite->data0 -= 32; + add = (GetBankSide(gBattleAnimPlayerMonIndex)) ? -0xA0 : 0xA0; + sprite->data1 += add; + if (sprite->pos2.y > 0) + { + sprite->pos1.y += sprite->pos2.y; + sprite->pos1.x += sprite->pos2.x; + sprite->pos2.y = 0; + sprite->pos2.x = 0; + sprite->data0 = 0; + StartSpriteAffineAnim(sprite, 1); + sprite->callback = sub_80D1424; + } +} + +void sub_80D1424(struct Sprite* sprite) +{ + if (sprite->data0++ > 19) + { + StartSpriteAffineAnim(sprite, 2); + sprite->callback = sub_80D144C; + } +} + +void sub_80D144C(struct Sprite* sprite) +{ + if (sprite->affineAnimEnded) + { + StartSpriteAffineAnim(sprite, 1); + sprite->data0 = 0; + if (sprite->data7 == 0) + { + sprite->oam.tileNum += 16; + sprite->callback = sub_80D14C4; + } + else + { + sprite->oam.tileNum += 32; + sprite->callback = sub_80D154C; + } + } +} + +void sub_80D14C4(struct Sprite* sprite) +{ + sprite->pos2.y -= 2; + if (++sprite->data0 == 9) + { + sprite->data0 = 16; + sprite->data1 = 0; + REG_BLDCNT = 0x3F40; + REG_BLDALPHA = sprite->data0; + sprite->callback = sub_80D1504; + } +} + +void sub_80D1504(struct Sprite* sprite) +{ + if (sprite->data1++ % 3 == 0) + { + sprite->data0--; + REG_BLDALPHA = sprite->data0 | ((16 - sprite->data0) << 8); + if (sprite->data0 == 0) + sprite->callback = sub_80D154C; + } +} + +void sub_80D154C(struct Sprite* sprite) +{ + if ((u16)gBattleAnimArgs[7] == 0xFFFF) + { + sprite->invisible = 1; + if (sprite->data7 == 0) + sprite->callback = sub_80D158C; + else + sprite->callback = move_anim_8072740; + } +} + +void sub_80D158C(struct Sprite* sprite) +{ + REG_BLDCNT = 0; + REG_BLDALPHA = 0; + move_anim_8072740(sprite); +} + +void sub_80D15A4(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + u8 spriteId = obj_id_for_side_relative_to_move(0); + task->data[0] = spriteId; + sub_80798F4(task, spriteId, &gUnknown_083D79BC); + task->func = sub_80D15E0; } \ No newline at end of file -- cgit v1.2.3 From d7fb151b926ad85b61e268c473e80a49bc3ea516 Mon Sep 17 00:00:00 2001 From: "U-User-PC\\User" Date: Wed, 30 Aug 2017 21:49:06 -0400 Subject: decompiled up to sub_80D17C4 --- src/battle_anim_80CA710.c | 254 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 253 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/battle_anim_80CA710.c b/src/battle_anim_80CA710.c index c1818fb39..b3d3ba410 100755 --- a/src/battle_anim_80CA710.c +++ b/src/battle_anim_80CA710.c @@ -222,7 +222,8 @@ void sub_80D0A8C(u8 taskId); void sub_80D0B3C(u8 taskId); void sub_80D0D68(u8 taskId); void sub_80D15E0(u8 taskId); - +void sub_80D16A0(u8 taskId); +void sub_80D1808(u8 taskId); void sub_80CC358(struct Task* task, u8 taskId); void sub_80D0614(struct Task* task, u8 taskId); @@ -5661,4 +5662,255 @@ void sub_80D15A4(u8 taskId) task->data[0] = spriteId; sub_80798F4(task, spriteId, &gUnknown_083D79BC); task->func = sub_80D15E0; +} + +void sub_80D15E0(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + if (sub_807992C(task) == 0) + { + gSprites[task->data[0]].pos2.y = 0; + gSprites[task->data[0]].invisible = 1; + DestroyAnimVisualTask(taskId); + } +} + +void sub_80D1638(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + task->data[0] = 0; + task->data[1] = 0; + task->data[2] = 0; + task->data[3] = 0; + task->data[12] = 3; + if (GetBankSide(gBattleAnimEnemyMonIndex) == 0) + { + task->data[13] = 0xFFFF; + task->data[14] = 8; + } + else + { + task->data[13] = 1; + task->data[14] = -8; + } + task->data[15] = obj_id_for_side_relative_to_move(1); + task->func = sub_80D16A0; +} + +#ifdef NONMATCHING +void sub_80D16A0(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + switch (task->data[0]) + { + case 0: + gSprites[task->data[15]].pos2.x += task->data[14]; + task->data[1] = 0; + task->data[2] = 0; + task->data[3] = 0; + task->data[0]++; + break; + case 1: + if (++task->data[1] > 1) + { + task->data[1] = 0; + if (1 & ++task->data[2]) + gSprites[task->data[15]].pos2.x += 6; + else + gSprites[task->data[15]].pos2.x -= 6; + if (++task->data[3] > 4) + { + if (task->data[2] & 1) + gSprites[task->data[15]].pos2.x -= 6; + task->data[0]++; + } + } + break; + case 2: + if (--task->data[12] != 0) + task->data[0] = 0; + else + task->data[0]++; + break; + case 3: + gSprites[task->data[15]].pos2.x += task->data[13]; + if (gSprites[task->data[15]].pos2.x == 0) + DestroyAnimVisualTask(taskId); + break; + } +} +#else +__attribute__((naked)) +void sub_80D16A0(u8 taskId) +{ + asm(".syntax unified\n\ + push {r4,r5,lr}\n\ + lsls r0, 24\n\ + lsrs r5, r0, 24\n\ + lsls r0, r5, 2\n\ + adds r0, r5\n\ + lsls r0, 3\n\ + ldr r1, _080D16C4 @ =gTasks\n\ + adds r3, r0, r1\n\ + movs r0, 0x8\n\ + ldrsh r4, [r3, r0]\n\ + cmp r4, 0x1\n\ + beq _080D16F4\n\ + cmp r4, 0x1\n\ + bgt _080D16C8\n\ + cmp r4, 0\n\ + beq _080D16D2\n\ + b _080D17BA\n\ + .align 2, 0\n\ +_080D16C4: .4byte gTasks\n\ +_080D16C8:\n\ + cmp r4, 0x2\n\ + beq _080D1770\n\ + cmp r4, 0x3\n\ + beq _080D178A\n\ + b _080D17BA\n\ +_080D16D2:\n\ + ldr r2, _080D16F0 @ =gSprites\n\ + movs r0, 0x26\n\ + ldrsh r1, [r3, r0]\n\ + lsls r0, r1, 4\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + adds r0, r2\n\ + ldrh r1, [r3, 0x24]\n\ + ldrh r2, [r0, 0x24]\n\ + adds r1, r2\n\ + strh r1, [r0, 0x24]\n\ + strh r4, [r3, 0xA]\n\ + strh r4, [r3, 0xC]\n\ + strh r4, [r3, 0xE]\n\ + b _080D1782\n\ + .align 2, 0\n\ +_080D16F0: .4byte gSprites\n\ +_080D16F4:\n\ + ldrh r0, [r3, 0xA]\n\ + adds r0, 0x1\n\ + strh r0, [r3, 0xA]\n\ + lsls r0, 16\n\ + asrs r0, 16\n\ + cmp r0, 0x1\n\ + ble _080D17BA\n\ + movs r0, 0\n\ + strh r0, [r3, 0xA]\n\ + ldrh r0, [r3, 0xC]\n\ + adds r0, 0x1\n\ + strh r0, [r3, 0xC]\n\ + ands r0, r4\n\ + lsls r0, 16\n\ + cmp r0, 0\n\ + beq _080D172C\n\ + ldr r2, _080D1728 @ =gSprites\n\ + movs r4, 0x26\n\ + ldrsh r1, [r3, r4]\n\ + lsls r0, r1, 4\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + adds r0, r2\n\ + ldrh r1, [r0, 0x24]\n\ + adds r1, 0x6\n\ + b _080D173E\n\ + .align 2, 0\n\ +_080D1728: .4byte gSprites\n\ +_080D172C:\n\ + ldr r2, _080D176C @ =gSprites\n\ + movs r0, 0x26\n\ + ldrsh r1, [r3, r0]\n\ + lsls r0, r1, 4\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + adds r0, r2\n\ + ldrh r1, [r0, 0x24]\n\ + subs r1, 0x6\n\ +_080D173E:\n\ + strh r1, [r0, 0x24]\n\ + ldrh r0, [r3, 0xE]\n\ + adds r0, 0x1\n\ + strh r0, [r3, 0xE]\n\ + lsls r0, 16\n\ + asrs r0, 16\n\ + cmp r0, 0x4\n\ + ble _080D17BA\n\ + ldrh r1, [r3, 0xC]\n\ + movs r0, 0x1\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _080D1782\n\ + movs r1, 0x26\n\ + ldrsh r0, [r3, r1]\n\ + lsls r1, r0, 4\n\ + adds r1, r0\n\ + lsls r1, 2\n\ + adds r1, r2\n\ + ldrh r0, [r1, 0x24]\n\ + subs r0, 0x6\n\ + strh r0, [r1, 0x24]\n\ + b _080D1782\n\ + .align 2, 0\n\ +_080D176C: .4byte gSprites\n\ +_080D1770:\n\ + ldrh r0, [r3, 0x20]\n\ + subs r0, 0x1\n\ + strh r0, [r3, 0x20]\n\ + lsls r0, 16\n\ + cmp r0, 0\n\ + beq _080D1782\n\ + movs r0, 0\n\ + strh r0, [r3, 0x8]\n\ + b _080D17BA\n\ +_080D1782:\n\ + ldrh r0, [r3, 0x8]\n\ + adds r0, 0x1\n\ + strh r0, [r3, 0x8]\n\ + b _080D17BA\n\ +_080D178A:\n\ + ldr r2, _080D17C0 @ =gSprites\n\ + movs r4, 0x26\n\ + ldrsh r1, [r3, r4]\n\ + lsls r0, r1, 4\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + adds r0, r2\n\ + ldrh r1, [r3, 0x22]\n\ + ldrh r4, [r0, 0x24]\n\ + adds r1, r4\n\ + strh r1, [r0, 0x24]\n\ + movs r0, 0x26\n\ + ldrsh r1, [r3, r0]\n\ + lsls r0, r1, 4\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + adds r0, r2\n\ + movs r1, 0x24\n\ + ldrsh r0, [r0, r1]\n\ + cmp r0, 0\n\ + bne _080D17BA\n\ + adds r0, r5, 0\n\ + bl DestroyAnimVisualTask\n\ +_080D17BA:\n\ + pop {r4,r5}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_080D17C0: .4byte gSprites\n\ + .syntax divided\n"); +} +#endif + +void sub_80D17C4(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + task->data[0] = 0; + task->data[1] = 0; + task->data[2] = 0; + task->data[3] = 0; + task->data[4] = 1; + task->data[13] = 14; + task->data[14] = 2; + task->data[15] = obj_id_for_side_relative_to_move(0); + task->func = sub_80D1808; } \ No newline at end of file -- cgit v1.2.3 From f4045ad07a96bebaf5108873857752f3560a4af5 Mon Sep 17 00:00:00 2001 From: "U-User-PC\\User" Date: Fri, 1 Sep 2017 21:27:14 -0400 Subject: decompiled up to sub_80D2100 --- src/battle_anim_80CA710.c | 516 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 515 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/battle_anim_80CA710.c b/src/battle_anim_80CA710.c index b3d3ba410..f8982613b 100755 --- a/src/battle_anim_80CA710.c +++ b/src/battle_anim_80CA710.c @@ -46,6 +46,13 @@ struct UnknownStruct6 u16 unk780[0xA0]; }; +struct Struct_sub_8078914 +{ + u8 *field_0; + u8 *field_4; + u8 field_8; +}; + extern u8 gBanksBySide[]; extern s16 gBattleAnimArgs[8]; extern u8 gBattleAnimPlayerMonIndex; @@ -54,12 +61,18 @@ extern struct SpriteTemplate gSpriteTemplate_83D631C; extern struct SpriteTemplate gSpriteTemplate_83D6884; extern struct SpriteTemplate gSpriteTemplate_83D74BC; extern struct SpriteTemplate gSpriteTemplate_83D75AC; +extern struct SpriteTemplate gSpriteTemplate_83D79E8; extern struct SpriteTemplate gBattleAnimSpriteTemplate_83D6FC8; extern struct SpriteTemplate gBattleAnimSpriteTemplate_83D6FF8; extern struct AffineAnimFrameCmd gUnknown_083D76F4; extern struct AffineAnimFrameCmd gUnknown_083D7714; extern struct AffineAnimFrameCmd gUnknown_083D77B0; extern struct AffineAnimFrameCmd gUnknown_083D79BC; +extern struct AffineAnimFrameCmd gUnknown_083D7A98; +extern struct INCBIN_U8 gBattleAnimSpritePalette_206; +extern struct INCBIN_U8 gAttractTilemap; +extern struct INCBIN_U8 gAttractGfx; +extern struct INCBIN_U8 gAttractPal; extern s16 gUnknown_03000728[]; extern s8 gUnknown_083D680C[11][3]; extern u16 gUnknown_083D6984[]; @@ -71,6 +84,11 @@ extern u16 gUnknown_083D712C[4][6]; extern u16 gBattleTypeFlags; extern u16 gUnknown_030042C0; extern u16 gUnknown_03004288; +extern u16 gUnknown_030042C4; +extern u16 gUnknown_03004240; +extern u16 gUnknown_030041B4; +extern s8 gUnknown_083D7A00[4][2]; +extern u16 gUnknown_083D7A5C[5]; extern struct UnknownStruct6 gUnknown_03004DE0; extern struct UnknownStruct_1 gUnknown_03004DC0; @@ -158,6 +176,9 @@ void sub_80D14C4(struct Sprite* sprite); void sub_80D1504(struct Sprite* sprite); void sub_80D154C(struct Sprite* sprite); void sub_80D158C(struct Sprite* sprite); +void sub_80D1FA4(struct Sprite* sprite); +void sub_80D2094(struct Sprite* sprite); + s16 sub_80CC338(struct Sprite* sprite); @@ -201,6 +222,7 @@ void sub_80798F4(struct Task *task, u8 a2, void *a3); bool8 sub_807992C(struct Task *task); u8 sub_8077FC0(u8 slot); void sub_80895F8(struct UnknownStruct_2 unk); +void sub_80763FC(u16 a, u16 *b, u32 c, u8 d); void move_anim_8074EE0(struct Sprite *sprite); bool8 sub_8078718(struct Sprite *sprite); @@ -224,6 +246,11 @@ void sub_80D0D68(u8 taskId); void sub_80D15E0(u8 taskId); void sub_80D16A0(u8 taskId); void sub_80D1808(u8 taskId); +void sub_80D1930(u8 taskId); +void sub_80D1D48(u8 taskId); +void sub_80D1D9C(u8 taskId); +void sub_80D21F0(u8 taskId); + void sub_80CC358(struct Task* task, u8 taskId); void sub_80D0614(struct Task* task, u8 taskId); @@ -5913,4 +5940,491 @@ void sub_80D17C4(u8 taskId) task->data[14] = 2; task->data[15] = obj_id_for_side_relative_to_move(0); task->func = sub_80D1808; -} \ No newline at end of file +} + +void sub_80D1808(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + if (task->data[0] == 0 && ++task->data[1] > task->data[4]) + { + task->data[1] = 0; + if (++task->data[2] & 1) + gSprites[task->data[15]].invisible = 0; + else + gSprites[task->data[15]].invisible = 1; + if (++task->data[3] >= task->data[13]) + { + if (++task->data[4] < task->data[14]) + { + task->data[1] = 0; + task->data[2] = 0; + task->data[3] = 0; + } + else + { + gSprites[task->data[15]].invisible = 0; + DestroyAnimVisualTask(taskId); + } + } + } +} + +void sub_80D18D4(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + task->data[0] = 0; + task->data[1] = 4; + task->data[2] = 0; + task->data[3] = 0; + task->data[4] = 0; + task->data[5] = 0; + task->data[6] = 0; + task->data[7] = 0; + task->data[8] = 0; + task->data[13] = 0; + task->data[14] = sub_8077ABC(gBattleAnimPlayerMonIndex, 0); + task->data[15] = sub_8077ABC(gBattleAnimPlayerMonIndex, 1); + task->func = sub_80D1930; +} + +void sub_80D1930(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + switch (task->data[8]) + { + case 0: + if (++task->data[4] > 1) + { + task->data[4] = 0; + task->data[5] = (task->data[5] + 1) & 1; + if (++task->data[6] > 20) + { + if (task->data[7] == 0) + { + task->data[6] = 0; + task->data[8] = 1; + } + else + task->data[8] = 2; + } + } + break; + case 1: + task->data[5] = 0; + if (++task->data[4] > 20) + { + task->data[7] = 1; + task->data[8] = 0; + } + break; + case 2: + task->data[5] = 1; + break; + } + switch (task->data[0]) + { + case 0: + if (++task->data[1] > 4) + { + u8 spriteId; + task->data[1] = 0; + spriteId = CreateSprite(&gSpriteTemplate_83D79E8, task->data[14], task->data[15], 0); + if (spriteId != MAX_SPRITES) + { + gSprites[spriteId].data0 = taskId; + gSprites[spriteId].data1 = 13; + gSprites[spriteId].pos2.x = gUnknown_083D7A00[task->data[2]][0]; + gSprites[spriteId].pos2.y = gUnknown_083D7A00[task->data[2]][1]; + task->data[13]++; + if (++task->data[2] > 3) + { + task->data[2] = 0; + if (++task->data[3] > 5) + task->data[0]++; + } + } + } + break; + case 1: + if (task->data[13] == 0) + DestroyAnimVisualTask(taskId); + break; + } +} + +#ifdef NONMATCHING +void sub_80D1A70(struct Sprite* sprite) +{ + sprite->invisible = (bool8)(gTasks[sprite->data0].data[5] & 1); + if (sprite->animEnded) + { + gTasks[sprite->data0].data[sprite->data1]--; + DestroySprite(sprite); + } +} +#else +__attribute__((naked)) +void sub_80D1A70(struct Sprite* sprite) +{ + asm(".syntax unified\n\ + push {r4,lr}\n\ + adds r3, r0, 0\n\ + ldr r4, _080D1AD8 @ =gTasks\n\ + movs r0, 0x2E\n\ + ldrsh r1, [r3, r0]\n\ + lsls r0, r1, 2\n\ + adds r0, r1\n\ + lsls r0, 3\n\ + adds r0, r4\n\ + movs r1, 0x3E\n\ + adds r1, r3\n\ + mov r12, r1\n\ + movs r2, 0x1\n\ + ldrb r1, [r0, 0x12]\n\ + ands r1, r2\n\ + lsls r1, 2\n\ + mov r0, r12\n\ + ldrb r2, [r0]\n\ + movs r0, 0x5\n\ + negs r0, r0\n\ + ands r0, r2\n\ + orrs r0, r1\n\ + mov r1, r12\n\ + strb r0, [r1]\n\ + adds r0, r3, 0\n\ + adds r0, 0x3F\n\ + ldrb r1, [r0]\n\ + movs r0, 0x10\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _080D1AD2\n\ + movs r0, 0x30\n\ + ldrsh r1, [r3, r0]\n\ + lsls r1, 1\n\ + movs r0, 0x2E\n\ + ldrsh r2, [r3, r0]\n\ + lsls r0, r2, 2\n\ + adds r0, r2\n\ + lsls r0, 3\n\ + adds r1, r0\n\ + adds r0, r4, 0\n\ + adds r0, 0x8\n\ + adds r1, r0\n\ + ldrh r0, [r1]\n\ + subs r0, 0x1\n\ + strh r0, [r1]\n\ + adds r0, r3, 0\n\ + bl DestroySprite\n\ +_080D1AD2:\n\ + pop {r4}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_080D1AD8: .4byte gTasks\n\ + .syntax divided\n"); +} +#endif + +void sub_80D1ADC(u8 taskId) +{ + int i; + u8 sp[8]; + void* src; + void* dest; + void* what; + sp[0] = IndexOfSpritePaletteTag(0x27DE); + for (i = 1; i <= 4; i++) + sp[i] = AllocSpritePalette(0x2710 - i); + src = &gBattleAnimSpritePalette_206; + dest = (IsContest()) ? ewram + 0x18000 - 0x3800: ewram + 0x18000; + sub_800D238(src, dest); + for (i = 0; i <= 4; i++) + { + what = ((IsContest()) ? ewram + 0x14800 : ewram + 0x18000) + (i << 5); + LoadPalette(what, (u16)((sp[i] << 4) + 0x100), 32); + } + DestroyAnimVisualTask(taskId); +} + +void sub_80D1B80(u8 taskId) +{ + int i; + for (i = 0; i < 5; i++) + FreeSpritePaletteByTag(gUnknown_083D7A5C[i]); + DestroyAnimVisualTask(taskId); +} + +void sub_80D1BA8(struct Sprite* sprite, u8 a, u8 b) +{ + u8 tile; + tile = (b & 1); + tile = ((-tile | tile) >> 31) & 32; + sprite->oam.tileNum += tile + (a << 2); + sprite->oam.paletteNum = IndexOfSpritePaletteTag(gUnknown_083D7A5C[b >> 1]); +} + +void sub_80D1C08(struct Sprite* sprite) +{ + sub_80787B0(sprite, 0); + if (GetBankSide(gBattleAnimPlayerMonIndex) != 0) + gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + sprite->data0 = gBattleAnimArgs[4]; + sprite->data2 = sub_8077ABC(gBattleAnimPlayerMonIndex, 0) + gBattleAnimArgs[2]; + sprite->data4 = sub_8077ABC(gBattleAnimPlayerMonIndex, 1) + gBattleAnimArgs[3]; + sprite->callback = sub_8078B34; + oamt_set_x3A_32(sprite, move_anim_8072740); + sub_80D1BA8(sprite, gBattleAnimArgs[5], gBattleAnimArgs[6]); +} + +void sub_80D1C80(struct Sprite* sprite) +{ + if (++sprite->data0 == 1) + sub_80787B0(sprite, 0); + sprite->pos2.x = Sin(sprite->data1, 8); + sprite->pos2.y = sprite->data2 >> 8; + sprite->data1 = (sprite->data1 + 7) & 0xFF; + sprite->data2 -= 0x80; + if (sprite->data0 == 0x3C) + move_anim_8072740(sprite); +} + +void sub_80D1CD0(u8 taskId) +{ + int zero; + bool8 result = IsContest(); + u16 var = 0xF0; + if (result) + { + var = 0x98; + zero = 0; + } + else + zero = 0; + gUnknown_030042C4 = var; + gUnknown_03004240 = 0xA0; + REG_WIN0H = var; + REG_WIN0V = 0xA0; + REG_WININ = 0x3F1F; + REG_WINOUT = 0x3F3F; + REG_BLDCNT = 0xC8; + REG_BLDY = 0x10; + gTasks[taskId].data[0] = zero; + gTasks[taskId].data[1] = var; + gTasks[taskId].func = sub_80D1D48; +} + +void sub_80D1D48(u8 taskId) +{ + gTasks[taskId].data[0] += 13; + gTasks[taskId].data[1] -= 13; + if (gTasks[taskId].data[0] >= gTasks[taskId].data[1]) + { + gUnknown_030042C4 = 0; + gTasks[taskId].func = sub_80D1D9C; + } + else + gUnknown_030042C4 = gTasks[taskId].data[1] | (gTasks[taskId].data[0] << 8); +} + +void sub_80D1D9C(u8 taskId) +{ + if (++gTasks[taskId].data[10] == 5) + { + gTasks[taskId].data[11] = 0x88; + RequestSpriteCopy((u8 *)(&gTasks[taskId].data[11]), (u8 *)(®_BLDCNT), 2); + BlendPalettes(sub_80791A8(1, 0, 0, 0, 0, 0, 0), 16, RGB(31, 31, 31)); + } + else if (gTasks[taskId].data[10] > 4) + { + gUnknown_030042C4 = 0; + gUnknown_03004240 = 0; + REG_WININ = 0x3F3F; + REG_WINOUT = 0x3F3F; + REG_BLDCNT = 0; + REG_BLDY = 0; + DestroyAnimVisualTask(taskId); + } +} + +void sub_80D1E38(u8 taskId) +{ + u8 spriteId = obj_id_for_side_relative_to_move(1); + if (++gTasks[taskId].data[0] == 1) + { + sub_80798F4(&gTasks[taskId], obj_id_for_side_relative_to_move(1), &gUnknown_083D7A98); + gSprites[spriteId].pos2.x = 4; + } + else + { + gSprites[spriteId].pos2.x = -gSprites[spriteId].pos2.x; + if (sub_807992C(&gTasks[taskId]) == 0) + { + gSprites[spriteId].pos2.x = 0; + gSprites[spriteId].pos2.y = 0; + DestroyAnimVisualTask(taskId); + } + } +} + +void sub_80D1EC8(u8 taskId) +{ + u8 spriteId = obj_id_for_side_relative_to_move(0); + if (++gTasks[taskId].data[0] == 1) + { + sub_80798F4(&gTasks[taskId], obj_id_for_side_relative_to_move(0), &gUnknown_083D7A98); + gSprites[spriteId].pos2.x = 4; + } + else + { + gSprites[spriteId].pos2.x = -gSprites[spriteId].pos2.x; + if (sub_807992C(&gTasks[taskId]) == 0) + { + gSprites[spriteId].pos2.x = 0; + gSprites[spriteId].pos2.y = 0; + DestroyAnimVisualTask(taskId); + } + } +} + +void sub_80D1F58(struct Sprite* sprite) +{ + sub_80787B0(sprite, 1); + sprite->data0 = 0x5F; + sprite->data1 = sprite->pos1.x; + sprite->data2 = sub_8077ABC(gBattleAnimEnemyMonIndex, 2); + sprite->data3 = sprite->pos1.y; + sprite->data4 = sub_8077ABC(gBattleAnimEnemyMonIndex, 3); + obj_translate_based_on_private_1_2_3_4(sprite); + sprite->callback = sub_80D1FA4; +} + +void sub_80D1FA4(struct Sprite* sprite) +{ + if (sub_8078B5C(sprite) == 0) + { + sprite->pos2.y += Sin(sprite->data5, 14); + sprite->data5 = (sprite->data5 + 4) & 0xFF; + } + else + move_anim_8072740(sprite); +} + +void sub_80D1FDC(struct Sprite* sprite) +{ + if (sprite->data0 == 0) + { + sprite->data1 = gBattleAnimArgs[0]; + sprite->data2 = gBattleAnimArgs[1]; + sprite->data0++; + } + else + { + sprite->data4 += sprite->data1; + sprite->pos2.x = sprite->data4 >> 8; + sprite->pos2.y = Sin(sprite->data3, sprite->data2); + sprite->data3 = (sprite->data3 + 3) & 0xFF; + if (sprite->data3 > 0x64) + { + sprite->invisible = sprite->data3 % 2; + } + if (sprite->data3 > 0x78) + move_anim_8072740(sprite); + } +} + +void sub_80D2064(struct Sprite* sprite) +{ + sprite->pos1.x = gBattleAnimArgs[0]; + sprite->pos1.y = 0xA0; + sprite->data0 = gBattleAnimArgs[2]; + sprite->data1 = gBattleAnimArgs[1]; + sprite->callback = sub_80782D8; + oamt_set_x3A_32(sprite, sub_80D2094); +} + +void sub_80D2094(struct Sprite* sprite) +{ + s16 y; + sprite->data2 += sprite->data1; + sprite->pos2.y = -((u16)sprite->data2 >> 8); + sprite->pos2.x = Sin(sprite->data3, 4); + sprite->data3 = (sprite->data3 + 3) & 0xFF; + y = sprite->pos1.y + sprite->pos2.y; + if (y <= 0x48) + { + sprite->invisible = sprite->data3 % 2; + if (y <= 0x40) + move_anim_8072740(sprite); + } +} + +void sub_80D2100(u8 taskId) +{ + struct Struct_sub_8078914 subStruct; + u8* tempvar; + REG_BLDCNT = 0x3F42; + REG_BLDALPHA = 0x1000; + REG_BG1CNT_BITFIELD.priority = 3; + REG_BG1CNT_BITFIELD.screenSize = 0; + if (!IsContest()) + REG_BG1CNT_BITFIELD.charBaseBlock = 1; + gUnknown_030042C0 = 0; + gUnknown_030041B4 = 0; + REG_BG1HOFS = 0; + REG_BG1VOFS = 0; + sub_8078914(&subStruct); + tempvar = subStruct.field_4; + DmaFill32(3, 0x0, tempvar, 0x1000); + LZDecompressVram(&gAttractTilemap, tempvar); + LZDecompressVram(&gAttractGfx, subStruct.field_0); + LoadCompressedPalette(&gAttractPal, subStruct.field_8 << 4, 32); + if (IsContest()) + sub_80763FC(subStruct.field_8, (u16 *)subStruct.field_4, 0, 0); + gTasks[taskId].func = sub_80D21F0; +} + +/* void sub_80D21F0(u8 taskId) +{ + struct Struct_sub_8078914 subStruct; + int i; + switch (gTasks[taskId].data[12]) + { + case 0: + if (++gTasks[taskId].data[10] == 4) + { + gTasks[taskId].data[10] = 0; + gTasks[taskId].data[11]++; + REG_BLDALPHA = gTasks[taskId].data[11] | ((16 - gTasks[taskId].data[11]) << 8); + if (gTasks[taskId].data[11] == 16) + { + gTasks[taskId].data[12]++; + gTasks[taskId].data[11] = 0; + } + } + break; + case 1: + if (++gTasks[taskId].data[11] == 0x8D) + { + gTasks[taskId].data[11] = 16; + gTasks[taskId].data[12]++; + } + break; + case 2: + if (++gTasks[taskId].data[10] == 4) + { + gTasks[taskId].data[10] = 0; + gTasks[taskId].data[11]--; + REG_BLDALPHA = gTasks[taskId].data[11] | ((16 - gTasks[taskId].data[11]) << 8); + if (gTasks[taskId].data[11] == 0) + { + gTasks[taskId].data[12]++; + gTasks[taskId].data[11] = 0; + } + } + break; + case 3: + sub_8078914(&subStruct); + for (i = 0x2000; i <= 0x3000; i += 0x1000) + DmaFill32(3, 0x0, subStruct.field_0, 0x1000); + } +} */ \ No newline at end of file -- cgit v1.2.3 From 20d00c58ef49fa88533fa07ab1801c381f02b7bf Mon Sep 17 00:00:00 2001 From: "U-User-PC\\User" Date: Fri, 8 Sep 2017 23:23:22 -0400 Subject: decompiled up to sub_80D2A38 --- src/battle_anim_80CA710.c | 1170 +++++++++++++++++---------------------------- 1 file changed, 430 insertions(+), 740 deletions(-) (limited to 'src') diff --git a/src/battle_anim_80CA710.c b/src/battle_anim_80CA710.c index f8982613b..50f0ae134 100755 --- a/src/battle_anim_80CA710.c +++ b/src/battle_anim_80CA710.c @@ -73,6 +73,11 @@ extern struct INCBIN_U8 gBattleAnimSpritePalette_206; extern struct INCBIN_U8 gAttractTilemap; extern struct INCBIN_U8 gAttractGfx; extern struct INCBIN_U8 gAttractPal; +extern struct INCBIN_U8 gBattleAnimBackgroundTilemap_ScaryFaceContest; +extern struct INCBIN_U8 gBattleAnimBackgroundTilemap_ScaryFacePlayer; +extern struct INCBIN_U8 gBattleAnimBackgroundTilemap_ScaryFaceOpponent; +extern struct INCBIN_U8 gBattleAnimBackgroundImage_ScaryFace; +extern struct INCBIN_U8 gBattleAnimBackgroundPalette_ScaryFace; extern s16 gUnknown_03000728[]; extern s8 gUnknown_083D680C[11][3]; extern u16 gUnknown_083D6984[]; @@ -178,6 +183,8 @@ void sub_80D154C(struct Sprite* sprite); void sub_80D158C(struct Sprite* sprite); void sub_80D1FA4(struct Sprite* sprite); void sub_80D2094(struct Sprite* sprite); +void sub_80D2704(struct Sprite* sprite); +void sub_80D2834(struct Sprite* sprite); s16 sub_80CC338(struct Sprite* sprite); @@ -250,6 +257,7 @@ void sub_80D1930(u8 taskId); void sub_80D1D48(u8 taskId); void sub_80D1D9C(u8 taskId); void sub_80D21F0(u8 taskId); +void sub_80D24E0(u8 taskId); void sub_80CC358(struct Task* task, u8 taskId); @@ -4815,43 +4823,45 @@ void sub_80D0C88(u8 taskId) void sub_80D0D68(u8 taskId) { struct Task* task = &gTasks[taskId]; + switch (task->data[4]) { - case 0: - if (++task->data[5] > 20) - task->data[4]++; - break; - case 1: - if (++task->data[1] > 3) + case 0: + if (++task->data[5] > 20) + task->data[4]++; + break; + case 1: + if (++task->data[1] > 3) + { + task->data[1] = 0; + task->data[2] = task->data[3] & 3; + task->data[5] = task->data[0] - task->data[3]; + switch (task->data[2]) { - task->data[1] = 0; - task->data[2] = 3 & task->data[3]; - task->data[5] = task->data[0] - task->data[3]; - switch (task->data[2]) - { - case 1: - task->data[5] -= 2; - default: - case 0: - break; - case 2: - case 3: - task->data[5]++; - break; - } - if (task->data[5] >= 0) - { - gUnknown_03004DE0.unk0[task->data[5]] = task->data[6]; - gUnknown_03004DE0.unk780[task->data[5]] = task->data[6]; - } - if (++task->data[3] >= task->data[15]) - { - gUnknown_03004DC0.unk15 = 3; - DestroyAnimVisualTask(taskId); - } - + case 0: + break; + case 1: + task->data[5] -= 2; + break; + case 2: + task->data[5] += 1; + break; + case 3: + task->data[5] += 1; + break; } - break; + if (task->data[5] >= 0) + { + gUnknown_03004DE0.unk0[task->data[5]] = task->data[6]; + gUnknown_03004DE0.unk780[task->data[5]] = task->data[6]; + } + if (++task->data[3] >= task->data[15]) + { + gUnknown_03004DC0.unk15 = 3; + DestroyAnimVisualTask(taskId); + } + } + break; } } #else @@ -5041,16 +5051,13 @@ void sub_80D0E8C(struct Sprite* sprite) } } -#ifdef NONMATCHING void sub_80D0FD8(struct Sprite* sprite) { - u16 sp[2]; - u8 bank; + u8 bank = 0; + u16 sp0 = 0; + u16 sp1 = 0; u8 r4; - u16* r7; - sp[0] = 0; - sp[1] = 0; - r7 = &sp[1]; + if (gBattleAnimArgs[2] == 0) bank = gBattleAnimPlayerMonIndex; else @@ -5058,122 +5065,19 @@ void sub_80D0FD8(struct Sprite* sprite) r4 = gBattleAnimArgs[3] ^ 1; if (IsDoubleBattle() && b_side_obj__get_some_boolean(bank ^ 2)) { - sub_807A3FC(bank, r4, &sp[0], r7); + sub_807A3FC(bank, r4, &sp0, &sp1); if (r4 == 0) r4 = sub_8077ABC(bank, 0); else r4 = sub_8077ABC(bank, 2); - if (GetBankSide(bank)) - { - gBattleAnimArgs[0] -= (sp[0] - r4) - gBattleAnimArgs[0]; - } + if (GetBankSide(bank) != 0) + gBattleAnimArgs[0] -= (sp0 - r4) - gBattleAnimArgs[0]; // This is weird. else - gBattleAnimArgs[0] = sp[0] - r4; + gBattleAnimArgs[0] = sp0 - r4; } sprite->callback = sub_80793C4; sub_80793C4(sprite); } -#else -__attribute__((naked)) -void sub_80D0FD8(struct Sprite* sprite) -{ - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - sub sp, 0x4\n\ - adds r6, r0, 0\n\ - movs r5, 0\n\ - mov r0, sp\n\ - strh r5, [r0]\n\ - mov r1, sp\n\ - adds r1, 0x2\n\ - strh r5, [r1]\n\ - ldr r0, _080D0FFC @ =gBattleAnimArgs\n\ - movs r3, 0x4\n\ - ldrsh r2, [r0, r3]\n\ - adds r7, r1, 0\n\ - adds r1, r0, 0\n\ - cmp r2, 0\n\ - bne _080D1004\n\ - ldr r0, _080D1000 @ =gBattleAnimPlayerMonIndex\n\ - b _080D1006\n\ - .align 2, 0\n\ -_080D0FFC: .4byte gBattleAnimArgs\n\ -_080D1000: .4byte gBattleAnimPlayerMonIndex\n\ -_080D1004:\n\ - ldr r0, _080D1040 @ =gBattleAnimEnemyMonIndex\n\ -_080D1006:\n\ - ldrb r5, [r0]\n\ - ldrb r1, [r1, 0x6]\n\ - movs r0, 0x1\n\ - adds r4, r0, 0\n\ - eors r4, r1\n\ - bl IsDoubleBattle\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - beq _080D107E\n\ - movs r1, 0x2\n\ - adds r0, r5, 0\n\ - eors r0, r1\n\ - bl b_side_obj__get_some_boolean\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - beq _080D107E\n\ - adds r0, r5, 0\n\ - adds r1, r4, 0\n\ - mov r2, sp\n\ - adds r3, r7, 0\n\ - bl sub_807A3FC\n\ - cmp r4, 0\n\ - bne _080D1044\n\ - adds r0, r5, 0\n\ - movs r1, 0\n\ - b _080D1048\n\ - .align 2, 0\n\ -_080D1040: .4byte gBattleAnimEnemyMonIndex\n\ -_080D1044:\n\ - adds r0, r5, 0\n\ - movs r1, 0x2\n\ -_080D1048:\n\ - bl sub_8077ABC\n\ - lsls r0, 24\n\ - lsrs r4, r0, 24\n\ - adds r0, r5, 0\n\ - bl GetBankSide\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - beq _080D1074\n\ - ldr r2, _080D1070 @ =gBattleAnimArgs\n\ - mov r0, sp\n\ - ldrh r1, [r0]\n\ - subs r1, r4\n\ - ldrh r0, [r2]\n\ - subs r1, r0\n\ - subs r0, r1\n\ - strh r0, [r2]\n\ - b _080D107E\n\ - .align 2, 0\n\ -_080D1070: .4byte gBattleAnimArgs\n\ -_080D1074:\n\ - ldr r1, _080D1090 @ =gBattleAnimArgs\n\ - mov r0, sp\n\ - ldrh r0, [r0]\n\ - subs r0, r4\n\ - strh r0, [r1]\n\ -_080D107E:\n\ - ldr r1, _080D1094 @ =sub_80793C4\n\ - str r1, [r6, 0x1C]\n\ - adds r0, r6, 0\n\ - bl _call_via_r1\n\ - add sp, 0x4\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_080D1090: .4byte gBattleAnimArgs\n\ -_080D1094: .4byte sub_80793C4\n\ - .syntax divided\n"); -} -#endif void sub_80D1098(struct Sprite* sprite) { @@ -5184,17 +5088,17 @@ void sub_80D1098(struct Sprite* sprite) } } -#ifdef NONMATCHING void sub_80D10B8(struct Sprite* sprite) { + u16 r9 = 0; + u16 r6 = 0; s16 sp0 = 0; s16 sp1 = 0; u8 sp4; u8 bankr7; u8 bankr8; u8 r10; - u16 r9; - u16 r6; + if (gBattleAnimArgs[5] == 0) { bankr7 = gBattleAnimPlayerMonIndex; @@ -5205,6 +5109,7 @@ void sub_80D10B8(struct Sprite* sprite) bankr7 = gBattleAnimEnemyMonIndex; bankr8 = gBattleAnimPlayerMonIndex; } + if (gBattleAnimArgs[6] == 0) { r10 = 0; @@ -5215,6 +5120,7 @@ void sub_80D10B8(struct Sprite* sprite) r10 = 2; sp4 = 3; } + if (GetBankSide(bankr7) != 0) { r9 = sub_8077ABC(bankr7, r10) + gBattleAnimArgs[0]; @@ -5229,20 +5135,17 @@ void sub_80D10B8(struct Sprite* sprite) if (gMain.inBattle && b_side_obj__get_some_boolean(bankr7 ^ 2)) { if (gSprites[gObjectBankIDs[bankr7]].pos1.x < gSprites[gObjectBankIDs[bankr7 ^ 2]].pos1.x) - { sprite->subpriority = gSprites[gObjectBankIDs[bankr7 ^ 2]].subpriority + 1; - } else - { sprite->subpriority = gSprites[gObjectBankIDs[bankr7]].subpriority - 1; - } } else { sprite->subpriority = gSprites[gObjectBankIDs[bankr7]].subpriority - 1; } - + } + r6 = sub_8077ABC(bankr7, sp4) + gBattleAnimArgs[1]; if (gMain.inBattle && b_side_obj__get_some_boolean(bankr8 ^ 2)) { @@ -5253,19 +5156,15 @@ void sub_80D10B8(struct Sprite* sprite) sp0 = sub_8077ABC(bankr8, r10); sp1 = sub_8077ABC(bankr8, sp4); } + if (GetBankSide(bankr8)) - { sp0 += gBattleAnimArgs[3]; - } else - { sp0 -= gBattleAnimArgs[3]; - } + sp1 += gBattleAnimArgs[4]; - sprite->data1 = r9; - sprite->pos1.x = r9; - sprite->data3 = r6; - sprite->pos1.y = r6; + sprite->pos1.x = sprite->data1 = r9; + sprite->pos1.y = sprite->data3 = r6; sprite->data2 = sp0; sprite->data4 = sp1; sprite->data0 = gBattleAnimArgs[0]; @@ -5273,300 +5172,6 @@ void sub_80D10B8(struct Sprite* sprite) sprite->callback = sub_80D1098; sub_80D1098(sprite); } -#else -__attribute__((naked)) -void sub_80D10B8(struct Sprite* sprite) -{ - asm (".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r10\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5-r7}\n\ - sub sp, 0x8\n\ - adds r5, r0, 0\n\ - movs r6, 0\n\ - mov r0, sp\n\ - strh r6, [r0]\n\ - mov r1, sp\n\ - adds r1, 0x2\n\ - strh r6, [r1]\n\ - ldr r0, _080D10E4 @ =gBattleAnimArgs\n\ - movs r2, 0xA\n\ - ldrsh r0, [r0, r2]\n\ - cmp r0, 0\n\ - bne _080D10F0\n\ - ldr r0, _080D10E8 @ =gBattleAnimPlayerMonIndex\n\ - ldrb r7, [r0]\n\ - ldr r0, _080D10EC @ =gBattleAnimEnemyMonIndex\n\ - b _080D10F6\n\ - .align 2, 0\n\ -_080D10E4: .4byte gBattleAnimArgs\n\ -_080D10E8: .4byte gBattleAnimPlayerMonIndex\n\ -_080D10EC: .4byte gBattleAnimEnemyMonIndex\n\ -_080D10F0:\n\ - ldr r0, _080D1110 @ =gBattleAnimEnemyMonIndex\n\ - ldrb r7, [r0]\n\ - ldr r0, _080D1114 @ =gBattleAnimPlayerMonIndex\n\ -_080D10F6:\n\ - ldrb r0, [r0]\n\ - mov r8, r0\n\ - ldr r0, _080D1118 @ =gBattleAnimArgs\n\ - movs r3, 0xC\n\ - ldrsh r0, [r0, r3]\n\ - cmp r0, 0\n\ - bne _080D111C\n\ - movs r0, 0\n\ - mov r10, r0\n\ - movs r1, 0x1\n\ - str r1, [sp, 0x4]\n\ - b _080D1124\n\ - .align 2, 0\n\ -_080D1110: .4byte gBattleAnimEnemyMonIndex\n\ -_080D1114: .4byte gBattleAnimPlayerMonIndex\n\ -_080D1118: .4byte gBattleAnimArgs\n\ -_080D111C:\n\ - movs r2, 0x2\n\ - mov r10, r2\n\ - movs r3, 0x3\n\ - str r3, [sp, 0x4]\n\ -_080D1124:\n\ - adds r0, r7, 0\n\ - bl GetBankSide\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - beq _080D1180\n\ - adds r0, r7, 0\n\ - mov r1, r10\n\ - bl sub_8077ABC\n\ - lsls r0, 24\n\ - ldr r1, _080D1164 @ =gBattleAnimArgs\n\ - lsrs r0, 24\n\ - ldrh r1, [r1]\n\ - adds r0, r1\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - mov r9, r0\n\ - movs r0, 0x2\n\ - mov r4, r8\n\ - eors r4, r0\n\ - adds r0, r4, 0\n\ - bl b_side_obj__get_some_boolean\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - beq _080D1170\n\ - ldr r2, _080D1168 @ =gSprites\n\ - ldr r0, _080D116C @ =gObjectBankIDs\n\ - adds r0, r4, r0\n\ - b _080D120A\n\ - .align 2, 0\n\ -_080D1164: .4byte gBattleAnimArgs\n\ -_080D1168: .4byte gSprites\n\ -_080D116C: .4byte gObjectBankIDs\n\ -_080D1170:\n\ - ldr r2, _080D1178 @ =gSprites\n\ - ldr r0, _080D117C @ =gObjectBankIDs\n\ - add r0, r8\n\ - b _080D120A\n\ - .align 2, 0\n\ -_080D1178: .4byte gSprites\n\ -_080D117C: .4byte gObjectBankIDs\n\ -_080D1180:\n\ - adds r0, r7, 0\n\ - mov r1, r10\n\ - bl sub_8077ABC\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - ldr r1, _080D11EC @ =gBattleAnimArgs\n\ - ldrh r1, [r1]\n\ - subs r0, r1\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - mov r9, r0\n\ - ldr r0, _080D11F0 @ =gMain\n\ - ldr r1, _080D11F4 @ =0x0000043d\n\ - adds r0, r1\n\ - ldrb r1, [r0]\n\ - movs r0, 0x2\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _080D1204\n\ - adds r4, r7, 0\n\ - movs r0, 0x2\n\ - eors r4, r0\n\ - adds r0, r4, 0\n\ - bl b_side_obj__get_some_boolean\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - beq _080D1204\n\ - ldr r3, _080D11F8 @ =gSprites\n\ - ldr r2, _080D11FC @ =gObjectBankIDs\n\ - adds r0, r7, r2\n\ - ldrb r1, [r0]\n\ - lsls r0, r1, 4\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - adds r6, r0, r3\n\ - adds r2, r4, r2\n\ - ldrb r1, [r2]\n\ - lsls r0, r1, 4\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - adds r2, r0, r3\n\ - movs r3, 0x20\n\ - ldrsh r1, [r6, r3]\n\ - movs r3, 0x20\n\ - ldrsh r0, [r2, r3]\n\ - cmp r1, r0\n\ - bge _080D1200\n\ - adds r0, r2, 0\n\ - adds r0, 0x43\n\ - ldrb r0, [r0]\n\ - adds r0, 0x1\n\ - b _080D121A\n\ - .align 2, 0\n\ -_080D11EC: .4byte gBattleAnimArgs\n\ -_080D11F0: .4byte gMain\n\ -_080D11F4: .4byte 0x0000043d\n\ -_080D11F8: .4byte gSprites\n\ -_080D11FC: .4byte gObjectBankIDs\n\ -_080D1200:\n\ - adds r0, r6, 0\n\ - b _080D1214\n\ -_080D1204:\n\ - ldr r2, _080D1268 @ =gSprites\n\ - ldr r0, _080D126C @ =gObjectBankIDs\n\ - adds r0, r7, r0\n\ -_080D120A:\n\ - ldrb r1, [r0]\n\ - lsls r0, r1, 4\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - adds r0, r2\n\ -_080D1214:\n\ - adds r0, 0x43\n\ - ldrb r0, [r0]\n\ - subs r0, 0x1\n\ -_080D121A:\n\ - adds r1, r5, 0\n\ - adds r1, 0x43\n\ - strb r0, [r1]\n\ - adds r0, r7, 0\n\ - ldr r1, [sp, 0x4]\n\ - bl sub_8077ABC\n\ - lsls r0, 24\n\ - ldr r4, _080D1270 @ =gBattleAnimArgs\n\ - lsrs r0, 24\n\ - ldrh r1, [r4, 0x2]\n\ - adds r0, r1\n\ - lsls r0, 16\n\ - lsrs r6, r0, 16\n\ - ldr r0, _080D1274 @ =gMain\n\ - ldr r2, _080D1278 @ =0x0000043d\n\ - adds r0, r2\n\ - ldrb r1, [r0]\n\ - movs r0, 0x2\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _080D127C\n\ - mov r0, r8\n\ - movs r1, 0x2\n\ - eors r0, r1\n\ - bl b_side_obj__get_some_boolean\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - beq _080D127C\n\ - ldrb r1, [r4, 0xC]\n\ - mov r0, r8\n\ - mov r2, sp\n\ - mov r3, sp\n\ - adds r3, 0x2\n\ - bl sub_807A3FC\n\ - b _080D129C\n\ - .align 2, 0\n\ -_080D1268: .4byte gSprites\n\ -_080D126C: .4byte gObjectBankIDs\n\ -_080D1270: .4byte gBattleAnimArgs\n\ -_080D1274: .4byte gMain\n\ -_080D1278: .4byte 0x0000043d\n\ -_080D127C:\n\ - mov r4, sp\n\ - mov r0, r8\n\ - mov r1, r10\n\ - bl sub_8077ABC\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - strh r0, [r4]\n\ - mov r0, r8\n\ - ldr r1, [sp, 0x4]\n\ - bl sub_8077ABC\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - mov r3, sp\n\ - strh r0, [r3, 0x2]\n\ -_080D129C:\n\ - mov r0, r8\n\ - bl GetBankSide\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - beq _080D12C0\n\ - mov r3, sp\n\ - mov r2, sp\n\ - ldr r1, _080D12BC @ =gBattleAnimArgs\n\ - ldrh r0, [r1, 0x6]\n\ - ldrh r2, [r2]\n\ - adds r0, r2\n\ - strh r0, [r3]\n\ - adds r2, r1, 0\n\ - b _080D12CE\n\ - .align 2, 0\n\ -_080D12BC: .4byte gBattleAnimArgs\n\ -_080D12C0:\n\ - mov r3, sp\n\ - mov r0, sp\n\ - ldr r2, _080D1310 @ =gBattleAnimArgs\n\ - ldrh r0, [r0]\n\ - ldrh r1, [r2, 0x6]\n\ - subs r0, r1\n\ - strh r0, [r3]\n\ -_080D12CE:\n\ - ldrh r1, [r2, 0x8]\n\ - mov r0, sp\n\ - ldrh r0, [r0, 0x2]\n\ - adds r1, r0\n\ - mov r3, sp\n\ - strh r1, [r3, 0x2]\n\ - mov r0, r9\n\ - strh r0, [r5, 0x30]\n\ - strh r0, [r5, 0x20]\n\ - strh r6, [r5, 0x34]\n\ - strh r6, [r5, 0x22]\n\ - mov r0, sp\n\ - ldrh r0, [r0]\n\ - strh r0, [r5, 0x32]\n\ - strh r1, [r5, 0x36]\n\ - ldrh r0, [r2]\n\ - strh r0, [r5, 0x2E]\n\ - adds r0, r5, 0\n\ - bl obj_translate_based_on_private_1_2_3_4\n\ - ldr r1, _080D1314 @ =sub_80D1098\n\ - str r1, [r5, 0x1C]\n\ - adds r0, r5, 0\n\ - bl _call_via_r1\n\ - add sp, 0x8\n\ - pop {r3-r5}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - mov r10, r5\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_080D1310: .4byte gBattleAnimArgs\n\ -_080D1314: .4byte sub_80D1098\n\ - .syntax divided\n"); -} -#endif void sub_80D1318(struct Sprite* sprite) { @@ -5724,209 +5329,49 @@ void sub_80D1638(u8 taskId) task->func = sub_80D16A0; } -#ifdef NONMATCHING void sub_80D16A0(u8 taskId) { struct Task* task = &gTasks[taskId]; + switch (task->data[0]) { - case 0: - gSprites[task->data[15]].pos2.x += task->data[14]; + case 0: + gSprites[task->data[15]].pos2.x += task->data[14]; + task->data[1] = 0; + task->data[2] = 0; + task->data[3] = 0; + task->data[0]++; + break; + case 1: + if (++task->data[1] > 1) + { task->data[1] = 0; - task->data[2] = 0; - task->data[3] = 0; - task->data[0]++; - break; - case 1: - if (++task->data[1] > 1) + task->data[2]++; + if (task->data[2] & 1) + gSprites[task->data[15]].pos2.x += 6; + else + gSprites[task->data[15]].pos2.x -= 6; + if (++task->data[3] > 4) { - task->data[1] = 0; - if (1 & ++task->data[2]) - gSprites[task->data[15]].pos2.x += 6; - else + if (task->data[2] & 1) gSprites[task->data[15]].pos2.x -= 6; - if (++task->data[3] > 4) - { - if (task->data[2] & 1) - gSprites[task->data[15]].pos2.x -= 6; - task->data[0]++; - } - } - break; - case 2: - if (--task->data[12] != 0) - task->data[0] = 0; - else task->data[0]++; - break; - case 3: - gSprites[task->data[15]].pos2.x += task->data[13]; - if (gSprites[task->data[15]].pos2.x == 0) - DestroyAnimVisualTask(taskId); - break; + } + } + break; + case 2: + if (--task->data[12] != 0) + task->data[0] = 0; + else + task->data[0]++; + break; + case 3: + gSprites[task->data[15]].pos2.x += task->data[13]; + if (gSprites[task->data[15]].pos2.x == 0) + DestroyAnimVisualTask(taskId); + break; } } -#else -__attribute__((naked)) -void sub_80D16A0(u8 taskId) -{ - asm(".syntax unified\n\ - push {r4,r5,lr}\n\ - lsls r0, 24\n\ - lsrs r5, r0, 24\n\ - lsls r0, r5, 2\n\ - adds r0, r5\n\ - lsls r0, 3\n\ - ldr r1, _080D16C4 @ =gTasks\n\ - adds r3, r0, r1\n\ - movs r0, 0x8\n\ - ldrsh r4, [r3, r0]\n\ - cmp r4, 0x1\n\ - beq _080D16F4\n\ - cmp r4, 0x1\n\ - bgt _080D16C8\n\ - cmp r4, 0\n\ - beq _080D16D2\n\ - b _080D17BA\n\ - .align 2, 0\n\ -_080D16C4: .4byte gTasks\n\ -_080D16C8:\n\ - cmp r4, 0x2\n\ - beq _080D1770\n\ - cmp r4, 0x3\n\ - beq _080D178A\n\ - b _080D17BA\n\ -_080D16D2:\n\ - ldr r2, _080D16F0 @ =gSprites\n\ - movs r0, 0x26\n\ - ldrsh r1, [r3, r0]\n\ - lsls r0, r1, 4\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - adds r0, r2\n\ - ldrh r1, [r3, 0x24]\n\ - ldrh r2, [r0, 0x24]\n\ - adds r1, r2\n\ - strh r1, [r0, 0x24]\n\ - strh r4, [r3, 0xA]\n\ - strh r4, [r3, 0xC]\n\ - strh r4, [r3, 0xE]\n\ - b _080D1782\n\ - .align 2, 0\n\ -_080D16F0: .4byte gSprites\n\ -_080D16F4:\n\ - ldrh r0, [r3, 0xA]\n\ - adds r0, 0x1\n\ - strh r0, [r3, 0xA]\n\ - lsls r0, 16\n\ - asrs r0, 16\n\ - cmp r0, 0x1\n\ - ble _080D17BA\n\ - movs r0, 0\n\ - strh r0, [r3, 0xA]\n\ - ldrh r0, [r3, 0xC]\n\ - adds r0, 0x1\n\ - strh r0, [r3, 0xC]\n\ - ands r0, r4\n\ - lsls r0, 16\n\ - cmp r0, 0\n\ - beq _080D172C\n\ - ldr r2, _080D1728 @ =gSprites\n\ - movs r4, 0x26\n\ - ldrsh r1, [r3, r4]\n\ - lsls r0, r1, 4\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - adds r0, r2\n\ - ldrh r1, [r0, 0x24]\n\ - adds r1, 0x6\n\ - b _080D173E\n\ - .align 2, 0\n\ -_080D1728: .4byte gSprites\n\ -_080D172C:\n\ - ldr r2, _080D176C @ =gSprites\n\ - movs r0, 0x26\n\ - ldrsh r1, [r3, r0]\n\ - lsls r0, r1, 4\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - adds r0, r2\n\ - ldrh r1, [r0, 0x24]\n\ - subs r1, 0x6\n\ -_080D173E:\n\ - strh r1, [r0, 0x24]\n\ - ldrh r0, [r3, 0xE]\n\ - adds r0, 0x1\n\ - strh r0, [r3, 0xE]\n\ - lsls r0, 16\n\ - asrs r0, 16\n\ - cmp r0, 0x4\n\ - ble _080D17BA\n\ - ldrh r1, [r3, 0xC]\n\ - movs r0, 0x1\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _080D1782\n\ - movs r1, 0x26\n\ - ldrsh r0, [r3, r1]\n\ - lsls r1, r0, 4\n\ - adds r1, r0\n\ - lsls r1, 2\n\ - adds r1, r2\n\ - ldrh r0, [r1, 0x24]\n\ - subs r0, 0x6\n\ - strh r0, [r1, 0x24]\n\ - b _080D1782\n\ - .align 2, 0\n\ -_080D176C: .4byte gSprites\n\ -_080D1770:\n\ - ldrh r0, [r3, 0x20]\n\ - subs r0, 0x1\n\ - strh r0, [r3, 0x20]\n\ - lsls r0, 16\n\ - cmp r0, 0\n\ - beq _080D1782\n\ - movs r0, 0\n\ - strh r0, [r3, 0x8]\n\ - b _080D17BA\n\ -_080D1782:\n\ - ldrh r0, [r3, 0x8]\n\ - adds r0, 0x1\n\ - strh r0, [r3, 0x8]\n\ - b _080D17BA\n\ -_080D178A:\n\ - ldr r2, _080D17C0 @ =gSprites\n\ - movs r4, 0x26\n\ - ldrsh r1, [r3, r4]\n\ - lsls r0, r1, 4\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - adds r0, r2\n\ - ldrh r1, [r3, 0x22]\n\ - ldrh r4, [r0, 0x24]\n\ - adds r1, r4\n\ - strh r1, [r0, 0x24]\n\ - movs r0, 0x26\n\ - ldrsh r1, [r3, r0]\n\ - lsls r0, r1, 4\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - adds r0, r2\n\ - movs r1, 0x24\n\ - ldrsh r0, [r0, r1]\n\ - cmp r0, 0\n\ - bne _080D17BA\n\ - adds r0, r5, 0\n\ - bl DestroyAnimVisualTask\n\ -_080D17BA:\n\ - pop {r4,r5}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_080D17C0: .4byte gSprites\n\ - .syntax divided\n"); -} -#endif void sub_80D17C4(u8 taskId) { @@ -6052,78 +5497,15 @@ void sub_80D1930(u8 taskId) } } -#ifdef NONMATCHING void sub_80D1A70(struct Sprite* sprite) { - sprite->invisible = (bool8)(gTasks[sprite->data0].data[5] & 1); + sprite->invisible = gTasks[sprite->data0].data[5]; if (sprite->animEnded) { gTasks[sprite->data0].data[sprite->data1]--; DestroySprite(sprite); } } -#else -__attribute__((naked)) -void sub_80D1A70(struct Sprite* sprite) -{ - asm(".syntax unified\n\ - push {r4,lr}\n\ - adds r3, r0, 0\n\ - ldr r4, _080D1AD8 @ =gTasks\n\ - movs r0, 0x2E\n\ - ldrsh r1, [r3, r0]\n\ - lsls r0, r1, 2\n\ - adds r0, r1\n\ - lsls r0, 3\n\ - adds r0, r4\n\ - movs r1, 0x3E\n\ - adds r1, r3\n\ - mov r12, r1\n\ - movs r2, 0x1\n\ - ldrb r1, [r0, 0x12]\n\ - ands r1, r2\n\ - lsls r1, 2\n\ - mov r0, r12\n\ - ldrb r2, [r0]\n\ - movs r0, 0x5\n\ - negs r0, r0\n\ - ands r0, r2\n\ - orrs r0, r1\n\ - mov r1, r12\n\ - strb r0, [r1]\n\ - adds r0, r3, 0\n\ - adds r0, 0x3F\n\ - ldrb r1, [r0]\n\ - movs r0, 0x10\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _080D1AD2\n\ - movs r0, 0x30\n\ - ldrsh r1, [r3, r0]\n\ - lsls r1, 1\n\ - movs r0, 0x2E\n\ - ldrsh r2, [r3, r0]\n\ - lsls r0, r2, 2\n\ - adds r0, r2\n\ - lsls r0, 3\n\ - adds r1, r0\n\ - adds r0, r4, 0\n\ - adds r0, 0x8\n\ - adds r1, r0\n\ - ldrh r0, [r1]\n\ - subs r0, 0x1\n\ - strh r0, [r1]\n\ - adds r0, r3, 0\n\ - bl DestroySprite\n\ -_080D1AD2:\n\ - pop {r4}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_080D1AD8: .4byte gTasks\n\ - .syntax divided\n"); -} -#endif void sub_80D1ADC(u8 taskId) { @@ -6383,48 +5765,356 @@ void sub_80D2100(u8 taskId) gTasks[taskId].func = sub_80D21F0; } -/* void sub_80D21F0(u8 taskId) +void sub_80D21F0(u8 taskId) { struct Struct_sub_8078914 subStruct; - int i; + switch (gTasks[taskId].data[12]) { - case 0: - if (++gTasks[taskId].data[10] == 4) + case 0: + if (++gTasks[taskId].data[10] == 4) + { + gTasks[taskId].data[10] = 0; + gTasks[taskId].data[11]++; + REG_BLDALPHA = gTasks[taskId].data[11] | ((16 - gTasks[taskId].data[11]) << 8); + if (gTasks[taskId].data[11] == 16) + { + gTasks[taskId].data[12]++; + gTasks[taskId].data[11] = 0; + } + } + break; + case 1: + if (++gTasks[taskId].data[11] == 0x8D) + { + gTasks[taskId].data[11] = 16; + gTasks[taskId].data[12]++; + } + break; + case 2: + if (++gTasks[taskId].data[10] == 4) + { + gTasks[taskId].data[10] = 0; + gTasks[taskId].data[11]--; + REG_BLDALPHA = gTasks[taskId].data[11] | ((16 - gTasks[taskId].data[11]) << 8); + if (gTasks[taskId].data[11] == 0) + { + gTasks[taskId].data[12]++; + gTasks[taskId].data[11] = 0; + } + } + break; + case 3: + sub_8078914(&subStruct); + { + u8 *addr = subStruct.field_0; + u32 size = 0x2000; + while (1) { - gTasks[taskId].data[10] = 0; - gTasks[taskId].data[11]++; - REG_BLDALPHA = gTasks[taskId].data[11] | ((16 - gTasks[taskId].data[11]) << 8); - if (gTasks[taskId].data[11] == 16) + DmaFill32(3, 0, addr, 0x1000); + addr += 0x1000; + size -= 0x1000; + if (size <= 0x1000) { - gTasks[taskId].data[12]++; - gTasks[taskId].data[11] = 0; + DmaFill32(3, 0, addr, size); + break; } } - break; - case 1: - if (++gTasks[taskId].data[11] == 0x8D) + } + DmaClear32(3, subStruct.field_4, 0x800); + if (!IsContest()) + REG_BG1CNT_BITFIELD.charBaseBlock = 0; + gTasks[taskId].data[12]++; + // fall through + case 4: + REG_BLDCNT = 0; + REG_BLDALPHA = 0; + REG_BG1CNT_BITFIELD.priority = 1; + DestroyAnimVisualTask(taskId); + break; + } +} + +void sub_80D23B4(u8 taskId) +{ + struct Struct_sub_8078914 subStruct; + u8* tempvar; + REG_BLDCNT = 0x3F42; + REG_BLDALPHA = 0x1000; + REG_BG1CNT_BITFIELD.priority = 1; + REG_BG1CNT_BITFIELD.screenSize = 0; + if (!IsContest()) + REG_BG1CNT_BITFIELD.charBaseBlock = 1; + gUnknown_030042C0 = 0; + gUnknown_030041B4 = 0; + REG_BG1HOFS = 0; + REG_BG1VOFS = 0; + sub_8078914(&subStruct); + tempvar = subStruct.field_4; + DmaFill32(3, 0x0, tempvar, 0x1000); + if (IsContest()) + LZDecompressVram(&gBattleAnimBackgroundTilemap_ScaryFaceContest, subStruct.field_4); + else if (GetBankSide(gBattleAnimEnemyMonIndex) == 1) + LZDecompressVram(&gBattleAnimBackgroundTilemap_ScaryFacePlayer, subStruct.field_4); + else + LZDecompressVram(&gBattleAnimBackgroundTilemap_ScaryFaceOpponent, subStruct.field_4); + LZDecompressVram(&gBattleAnimBackgroundImage_ScaryFace, subStruct.field_0); + LoadCompressedPalette(&gBattleAnimBackgroundPalette_ScaryFace, subStruct.field_8 << 4, 32); + if (IsContest()) + sub_80763FC(subStruct.field_8, (u16 *)subStruct.field_4, 0, 0); + gTasks[taskId].func = sub_80D24E0; +} + +void sub_80D24E0(u8 taskId) +{ + struct Struct_sub_8078914 subStruct; + + switch (gTasks[taskId].data[12]) + { + case 0: + if (++gTasks[taskId].data[10] == 2) + { + gTasks[taskId].data[10] = 0; + gTasks[taskId].data[11]++; + REG_BLDALPHA = gTasks[taskId].data[11] | ((16 - gTasks[taskId].data[11]) << 8); + if (gTasks[taskId].data[11] == 14) { - gTasks[taskId].data[11] = 16; gTasks[taskId].data[12]++; + gTasks[taskId].data[11] = 0; } - break; - case 2: - if (++gTasks[taskId].data[10] == 4) + } + break; + case 1: + if (++gTasks[taskId].data[11] == 0x15) + { + gTasks[taskId].data[11] = 14; + gTasks[taskId].data[12]++; + } + break; + case 2: + if (++gTasks[taskId].data[10] == 2) + { + gTasks[taskId].data[10] = 0; + gTasks[taskId].data[11]--; + REG_BLDALPHA = gTasks[taskId].data[11] | ((16 - gTasks[taskId].data[11]) << 8); + if (gTasks[taskId].data[11] == 0) { - gTasks[taskId].data[10] = 0; - gTasks[taskId].data[11]--; - REG_BLDALPHA = gTasks[taskId].data[11] | ((16 - gTasks[taskId].data[11]) << 8); - if (gTasks[taskId].data[11] == 0) + gTasks[taskId].data[12]++; + gTasks[taskId].data[11] = 0; + } + } + break; + case 3: + sub_8078914(&subStruct); + { + u8 *addr = subStruct.field_0; + u32 size = 0x2000; + while (1) + { + DmaFill32(3, 0, addr, 0x1000); + addr += 0x1000; + size -= 0x1000; + if (size <= 0x1000) { - gTasks[taskId].data[12]++; - gTasks[taskId].data[11] = 0; + DmaFill32(3, 0, addr, size); + break; } } + } + DmaClear32(3, subStruct.field_4, 0x800); + if (!IsContest()) + REG_BG1CNT_BITFIELD.charBaseBlock = 0; + gTasks[taskId].data[12]++; + // fall through + case 4: + REG_BLDCNT = 0; + REG_BLDALPHA = 0; + REG_BG1CNT_BITFIELD.priority = 1; + DestroyAnimVisualTask(taskId); + break; + } +} + +void sub_80D26A4(struct Sprite* sprite) +{ + sprite->pos1.x = sub_8077ABC(gBattleAnimPlayerMonIndex, 2); + sprite->pos1.y = sub_8077ABC(gBattleAnimPlayerMonIndex, 3); + sprite->affineAnimPaused = 1; + sprite->data0 = gBattleAnimArgs[0]; + sprite->data1 = gBattleAnimArgs[1]; + sprite->data7 = sub_8079E90(gBattleAnimPlayerMonIndex); + sprite->callback = sub_80D2704; + sub_80D2704(sprite); +} + +void sub_80D2704(struct Sprite* sprite) +{ + if ((u16)(sprite->data1 - 0x40) <= 0x7F) + sprite->subpriority = sprite->data7 + 1; + else + sprite->subpriority = sprite->data7 - 1; + sprite->pos2.x = Sin(sprite->data1, sprite->data2 >> 8); + sprite->pos2.y = Cos(sprite->data1, sprite->data3 >> 8); + sprite->data1 = (sprite->data1 + 9) & 0xFF; + switch (sprite->data5) + { + case 1: + sprite->data2 -= 0x400; + sprite->data3 -= 0x100; + if (++sprite->data4 == sprite->data0) + { + sprite->data5 = 2; + return; + } break; - case 3: - sub_8078914(&subStruct); - for (i = 0x2000; i <= 0x3000; i += 0x1000) - DmaFill32(3, 0x0, subStruct.field_0, 0x1000); + case 0: + sprite->data2 += 0x400; + sprite->data3 += 0x100; + if (++sprite->data4 == sprite->data0) + { + sprite->data4 = 0; + sprite->data5 = 1; + } + break; + } + if ((u16)gBattleAnimArgs[7] == 0xFFFF) + move_anim_8072740(sprite); +} + +void sub_80D27E0(struct Sprite* sprite) +{ + sprite->pos1.x = sub_8077ABC(gBattleAnimPlayerMonIndex, 2); + sprite->pos1.y = sub_8077ABC(gBattleAnimPlayerMonIndex, 3); + sprite->data0 = Sin(gBattleAnimArgs[0], 10); + sprite->data1 = Cos(gBattleAnimArgs[0], 7); + sprite->callback = sub_80D2834; +} + +void sub_80D2834(struct Sprite* sprite) +{ + sprite->pos2.x += sprite->data0; + sprite->pos2.y += sprite->data1; + if (sprite->pos1.x + sprite->pos2.x + 16 > 0x110u || sprite->pos1.y + sprite->pos2.y > 0xA0 || sprite->pos1.y + sprite->pos2.y < -16) + move_anim_8072740(sprite); +} + +void sub_80D287C(struct Sprite* sprite) +{ + sprite->pos2.x += sprite->data0; + sprite->pos2.y += sprite->data1; + if (sprite->data3++ >= sprite->data2) + move_anim_8072740(sprite); +} + +void sub_80D28AC(struct Sprite* sprite) +{ + sprite->pos1.x = sub_8077ABC(gBattleAnimPlayerMonIndex, 2); + sprite->pos1.y = sub_8077ABC(gBattleAnimPlayerMonIndex, 3); + sprite->data0 = Sin(gBattleAnimArgs[0], 10); + sprite->data1 = Cos(gBattleAnimArgs[0], 7); + sprite->data2 = gBattleAnimArgs[1]; + sprite->callback = sub_80D287C; +} + +void sub_80D2904(struct Sprite* sprite) +{ + if (sprite->animEnded) + move_anim_8072740(sprite); +} + +void sub_80D2920(struct Sprite* sprite) +{ + sub_80787B0(sprite, 1); + sprite->callback = sub_80D2904; +} + +void sub_80D2938(struct Sprite* sprite) +{ + s16 r5; + if (sprite->data0 == 0) + { + sprite->pos1.x += gBattleAnimArgs[0]; + sprite->pos1.y += gBattleAnimArgs[1]; + } + sprite->data0++; + r5 = (sprite->data0 * 10) & 0xFF; + sprite->pos2.x = Sin(r5, 0x50) >> 8; + if (sprite->data0 <= 0x4F) + sprite->pos2.y = (sprite->data0 / 2) + (Cos(r5, 0x50) >> 8); + if (sprite->data0 > 0x5A) + { + sprite->data2++; + sprite->pos2.x -= sprite->data2 / 2; + } + if (sprite->data0 > 0x64) + move_anim_8072740(sprite); +} + +void sub_80D29CC(struct Sprite* sprite) +{ + sprite->data5++; + sprite->pos2.x = Sin(sprite->data3, 5); + sprite->pos2.y = sprite->data5 / 2; + sprite->data3 = (sprite->data3 + 3) & 0xFF; + if (sprite->data5 > 20) + sprite->invisible = sprite->data5 % 2; + if (sprite->data5 > 30) + move_anim_8072740(sprite); +} + +void sub_80D2A38(struct Sprite* sprite) +{ + if (sprite->data0 == 0) + { + sprite->data1 = gBattleAnimArgs[0]; + sprite->data2 = gBattleAnimArgs[1]; + sprite->data0++; + } + else + { + sprite->data4 += sprite->data1; + sprite->pos2.x = sprite->data4 >> 8; + sprite->pos2.y = Sin(sprite->data3, sprite->data2); + sprite->data3 = (sprite->data3 + 3) & 0xFF; + if (sprite->data3 > 0x46) + { + sprite->callback = sub_80D29CC; + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.x = 0; + sprite->pos2.y = 0; + sprite->data3 = Random() % 0xB4; + } } +} + +/* void sub_80D2ABC(struct Sprite* sprite) +{ + int var; + s16 var2; + int var3; + if (sprite->data3 == 0) + { + sprite->pos1.x += gBattleAnimArgs[0]; + sprite->pos1.y += gBattleAnimArgs[1]; + StartSpriteAnim(sprite, 0); + sprite->subpriority = sub_8079E90(gBattleAnimEnemyMonIndex) - 1; + sprite->data2 = 1; + } + sprite->data0 += sprite->data2; + var = sprite->data0 * 4; + if (var < 0) + var += 0xFF; + sprite->data1 = (sprite->data0 * 4) -(((var) >> 8) << 8); + if (sprite->data1 < 0) + sprite->data1 = 0; + var3 = sprite->data1; + var2 = sprite->data0; + var2 /= 4; + sprite->pos2.x = Cos(var3, 30 - var2); + var3 = sprite->data1; + var2 = sprite->data0 / 8; + sprite->pos2.x = Sin(var3, 10 - var2); + if (sprite->data1 > 0x80 && sprite->data2 > 0) + sprite->data2 = 0xFFFF; } */ \ No newline at end of file -- cgit v1.2.3 From 93d274828bb6efea08e0ef451ec2a832d4cfc8f0 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Tue, 19 Sep 2017 23:49:38 -0500 Subject: decompile the monster that is sub_807CEBC --- src/field_weather.c | 154 ++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 131 insertions(+), 23 deletions(-) (limited to 'src') diff --git a/src/field_weather.c b/src/field_weather.c index 5ff2eddf9..366d57824 100644 --- a/src/field_weather.c +++ b/src/field_weather.c @@ -4,11 +4,15 @@ #include "sprite.h" #include "task.h" +#define MACRO1(a) ((((a) >> 1) & 0xF) | (((a) >> 2) & 0xF0) | (((a) >> 3) & 0xF00)) + struct Weather { u8 filler_000[0x200]; u8 unknown_200[2][32]; - u8 filler_240[0x480]; + u8 filler_240[0x460-0x240]; + u8 unk460[2][32]; + u8 filler4A0[0x6C0-0x4A0]; s8 unknown_6C0; s8 unknown_6C1; u8 unknown_6C2; @@ -184,26 +188,18 @@ void sub_807CB10(void) for (v0 = 0; v0 <= 1; v0++) { if (v0 == 0) - { v1 = &gUnknown_0202F9E8; - } else - { v1 = &gUnknown_0202F9E8 + 19; - } + for (v2 = 0; (u16)v2 <= 0x1f; v2++) { v4 = v2 << 8; if (v0 == 0) - { v5 = (v2 << 8) / 16; - } else - { v5 = 0; - } - v6 = 0; - for (; v6 <= 2; v6++) + for (v6 = 0; v6 <= 2; v6++) { v4 = (v4 - v5); v1[v6][v2] = v4 >> 8; @@ -260,13 +256,9 @@ void sub_807CC24(void) { gWeather.unknown_6C3 = 0; if (gWeather.unknown_6C0 < gWeather.unknown_6C1) - { gWeather.unknown_6C0++; - } else - { gWeather.unknown_6C0--; - } sub_807CEBC(0, 0x20, gWeather.unknown_6C0); } } @@ -275,9 +267,7 @@ void sub_807CC24(void) void sub_807CCAC(void) { if (++gWeather.unknown_6CB > 1) - { gWeather.unknown_6CA = 0; - } switch (gWeather.unknown_6D0) { case 3: @@ -322,9 +312,7 @@ void sub_807CCAC(void) u8 sub_807CDC4(void) { if (gWeather.unknown_6C7 == 0x10) - { return 0; - } if (++gWeather.unknown_6C7 >= 0x10) { sub_807CEBC(0, 0x20, 3); @@ -338,9 +326,7 @@ u8 sub_807CDC4(void) u8 sub_807CE24(void) { if (gWeather.unknown_6C7 == 0x10) - { return 0; - } if (++gWeather.unknown_6C7 >= 0x10) { sub_807CEBC(0, 0x20, -6); @@ -354,9 +340,7 @@ u8 sub_807CE24(void) u8 sub_807CE7C(void) { if (gWeather.unknown_6C7 == 0x10) - { return 0; - } ++gWeather.unknown_6C7; sub_807D424(0x10 - gWeather.unknown_6C7, gWeather.unknown_6C4); return 1; @@ -365,3 +349,127 @@ u8 sub_807CE7C(void) void nullsub_39(void) { } + +struct RGBColor +{ + u16 r:5; + u16 g:5; + u16 b:5; +}; + +extern u8 ewram[]; + +struct Struct2000000 +{ + u16 data[0][0x1000]; // unknown length +}; + +#define ewram0 (*(struct Struct2000000 *)ewram) + +void sub_807CEBC(u8 a, u8 b, s8 c) +{ + u16 r4; + u16 r5; + u8 *r6; + u16 r7; + + if (c > 0) + { + c = c - 1; + r5 = a * 16; + b += a; + r4 = a; + while (r4 < b) + { + if (gUnknown_030006DC[r4] == 0) + { + CpuFastCopy(gPlttBufferUnfaded + r5, gPlttBufferFaded + r5, 16 * sizeof(u16)); + r5 += 16; + } + else + { + u8 r, g, b; + + if (gUnknown_030006DC[r4] == 2 || r4 - 16 == gUnknown_0202F7E8.unknown_6D5) + r6 = gUnknown_0202F7E8.unk460[c]; + else + r6 = gUnknown_0202F7E8.unknown_200[c]; + if (r4 == 16 || r4 > 0x1B) + { + for (r7 = 0; r7 < 16; r7++) + { + if (gPlttBufferUnfaded[r5] == 0x2D9F) + { + r5++; + } + else + { + struct RGBColor r1 = *(struct RGBColor *)&gPlttBufferUnfaded[r5]; + r = r6[r1.r]; + g = r6[r1.g]; + b = r6[r1.b]; + + gPlttBufferFaded[r5++] = (b << 10) | (g << 5) | r; + } + } + } + else + { + for (r7 = 0; r7 < 16; r7++) + { + struct RGBColor r1 = *(struct RGBColor *)&gPlttBufferUnfaded[r5]; + r = r6[r1.r]; + g = r6[r1.g]; + b = r6[r1.b]; + + gPlttBufferFaded[r5++] = (b << 10) | (g << 5) | r; + } + } + } + r4++; + } + } + else + { + if (c < 0) + { + c = -c - 1; + r5 = a * 16; + b += a; + r4 = a; + while (r4 < b) + { + if (gUnknown_030006DC[r4] == 0) + { + CpuFastCopy(gPlttBufferUnfaded + r5, gPlttBufferFaded + r5, 16 * sizeof(u16)); + r5 += 16; + } + else + { + if (r4 == 16 || r4 > 0x1B) + { + for (r7 = 0; r7 < 16; r7++) + { + if (gPlttBufferUnfaded[r5] != 0x2D9F) + gPlttBufferFaded[r5] = ewram0.data[c][MACRO1(gPlttBufferUnfaded[r5])]; + r5++; + } + } + else + { + for (r7 = 0; r7 < 16; r7++) + { + gPlttBufferFaded[r5] = ewram0.data[c][MACRO1(gPlttBufferUnfaded[r5])]; + r5++; + } + } + } + r4++; + } + } + else + { + CpuFastCopy(gPlttBufferUnfaded + a * 16, gPlttBufferFaded + a * 16, b * 16 * sizeof(u16)); + } + } +} -- cgit v1.2.3 From 1f74ac11c84c3e62854effebe5eda240991567f2 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Wed, 20 Sep 2017 11:12:52 -0500 Subject: decompile sub_807D1BC --- src/field_weather.c | 147 ++++++++++++++++++++++++++++++++++------------------ 1 file changed, 97 insertions(+), 50 deletions(-) (limited to 'src') diff --git a/src/field_weather.c b/src/field_weather.c index 366d57824..8807362e2 100644 --- a/src/field_weather.c +++ b/src/field_weather.c @@ -1,4 +1,5 @@ #include "global.h" +#include "blend_palette.h" #include "field_weather.h" #include "palette.h" #include "sprite.h" @@ -61,8 +62,9 @@ extern u8 (*gUnknown_08396FC8[][4])(void); extern u8 (*gUnknown_083970B8[])(void); extern u8 *gUnknown_030006DC; extern u8 gUnknown_083970C8; -extern u8 (*gUnknown_0202FC48)[32]; -extern u8 gUnknown_0202F9E8[32]; +//extern u8 (*gUnknown_0202FC48)[32]; +extern u8 gUnknown_0202FC48[][32]; +extern u8 gUnknown_0202F9E8[][32]; void sub_807C828(void) @@ -188,9 +190,10 @@ void sub_807CB10(void) for (v0 = 0; v0 <= 1; v0++) { if (v0 == 0) - v1 = &gUnknown_0202F9E8; + v1 = (void *)&gUnknown_0202F9E8; else - v1 = &gUnknown_0202F9E8 + 19; + //v1 = (void *)(&gUnknown_0202F9E8 + 19); + v1 = &gUnknown_0202F9E8[19]; for (v2 = 0; (u16)v2 <= 0x1f; v2++) { @@ -369,22 +372,22 @@ struct Struct2000000 void sub_807CEBC(u8 a, u8 b, s8 c) { u16 r4; - u16 r5; + u16 palOffset; u8 *r6; - u16 r7; + u16 i; if (c > 0) { c = c - 1; - r5 = a * 16; + palOffset = a * 16; b += a; r4 = a; while (r4 < b) { if (gUnknown_030006DC[r4] == 0) { - CpuFastCopy(gPlttBufferUnfaded + r5, gPlttBufferFaded + r5, 16 * sizeof(u16)); - r5 += 16; + CpuFastCopy(gPlttBufferUnfaded + palOffset, gPlttBufferFaded + palOffset, 16 * sizeof(u16)); + palOffset += 16; } else { @@ -396,80 +399,124 @@ void sub_807CEBC(u8 a, u8 b, s8 c) r6 = gUnknown_0202F7E8.unknown_200[c]; if (r4 == 16 || r4 > 0x1B) { - for (r7 = 0; r7 < 16; r7++) + for (i = 0; i < 16; i++) { - if (gPlttBufferUnfaded[r5] == 0x2D9F) + if (gPlttBufferUnfaded[palOffset] == 0x2D9F) { - r5++; + palOffset++; } else { - struct RGBColor r1 = *(struct RGBColor *)&gPlttBufferUnfaded[r5]; - r = r6[r1.r]; - g = r6[r1.g]; - b = r6[r1.b]; + struct RGBColor color = *(struct RGBColor *)&gPlttBufferUnfaded[palOffset]; - gPlttBufferFaded[r5++] = (b << 10) | (g << 5) | r; + r = r6[color.r]; + g = r6[color.g]; + b = r6[color.b]; + gPlttBufferFaded[palOffset++] = (b << 10) | (g << 5) | r; } } } else { - for (r7 = 0; r7 < 16; r7++) + for (i = 0; i < 16; i++) { - struct RGBColor r1 = *(struct RGBColor *)&gPlttBufferUnfaded[r5]; - r = r6[r1.r]; - g = r6[r1.g]; - b = r6[r1.b]; + struct RGBColor color = *(struct RGBColor *)&gPlttBufferUnfaded[palOffset]; - gPlttBufferFaded[r5++] = (b << 10) | (g << 5) | r; + r = r6[color.r]; + g = r6[color.g]; + b = r6[color.b]; + gPlttBufferFaded[palOffset++] = (b << 10) | (g << 5) | r; } } } r4++; } } - else + else if (c < 0) { - if (c < 0) + c = -c - 1; + palOffset = a * 16; + b += a; + r4 = a; + while (r4 < b) { - c = -c - 1; - r5 = a * 16; - b += a; - r4 = a; - while (r4 < b) + if (gUnknown_030006DC[r4] == 0) { - if (gUnknown_030006DC[r4] == 0) + CpuFastCopy(gPlttBufferUnfaded + palOffset, gPlttBufferFaded + palOffset, 16 * sizeof(u16)); + palOffset += 16; + } + else + { + if (r4 == 16 || r4 > 0x1B) { - CpuFastCopy(gPlttBufferUnfaded + r5, gPlttBufferFaded + r5, 16 * sizeof(u16)); - r5 += 16; + for (i = 0; i < 16; i++) + { + if (gPlttBufferUnfaded[palOffset] != 0x2D9F) + gPlttBufferFaded[palOffset] = ewram0.data[c][MACRO1(gPlttBufferUnfaded[palOffset])]; + palOffset++; + } } else { - if (r4 == 16 || r4 > 0x1B) + for (i = 0; i < 16; i++) { - for (r7 = 0; r7 < 16; r7++) - { - if (gPlttBufferUnfaded[r5] != 0x2D9F) - gPlttBufferFaded[r5] = ewram0.data[c][MACRO1(gPlttBufferUnfaded[r5])]; - r5++; - } - } - else - { - for (r7 = 0; r7 < 16; r7++) - { - gPlttBufferFaded[r5] = ewram0.data[c][MACRO1(gPlttBufferUnfaded[r5])]; - r5++; - } + gPlttBufferFaded[palOffset] = ewram0.data[c][MACRO1(gPlttBufferUnfaded[palOffset])]; + palOffset++; } } - r4++; } + r4++; + } + } + else + { + CpuFastCopy(gPlttBufferUnfaded + a * 16, gPlttBufferFaded + a * 16, b * 16 * sizeof(u16)); + } +} + +void sub_807D1BC(u8 a1, u8 a2, s8 c, u8 d, u16 e) +{ + u16 palOffset; + u16 r4; + u16 i; + struct RGBColor color = *(struct RGBColor *)&e; + u8 r_ = color.r; + u8 g_ = color.g; + u8 b_ = color.b; + + palOffset = a1 * 16; + a2 += a1; + c = c - 1; + r4 = a1; + while (r4 < a2) + { + if (gUnknown_030006DC[r4] == 0) + { + BlendPalette(palOffset, 16, d, e); + palOffset += 16; } else { - CpuFastCopy(gPlttBufferUnfaded + a * 16, gPlttBufferFaded + a * 16, b * 16 * sizeof(u16)); + u8 *r5; + + if (gUnknown_030006DC[r4] == 1) + r5 = gUnknown_0202F9E8[c]; + else + r5 = gUnknown_0202FC48[c]; + + for (i = 0; i < 16; i++) + { + struct RGBColor color = *(struct RGBColor *)&gPlttBufferUnfaded[palOffset]; + u8 r = r5[color.r]; + u8 g = r5[color.g]; + u8 b = r5[color.b]; + + r += ((r_ - r) * d) >> 4; + g += ((g_ - g) * d) >> 4; + b += ((b_ - b) * d) >> 4; + gPlttBufferFaded[palOffset++] = (b << 10) | (g << 5) | r; + } } + r4++; } } -- cgit v1.2.3 From d81ba931cc138074187924a5d3e88bb0a619f9f5 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Wed, 20 Sep 2017 19:57:57 -0500 Subject: decompile sub_807D304 --- src/field_weather.c | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 55 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/field_weather.c b/src/field_weather.c index 8807362e2..9460110be 100644 --- a/src/field_weather.c +++ b/src/field_weather.c @@ -192,7 +192,6 @@ void sub_807CB10(void) if (v0 == 0) v1 = (void *)&gUnknown_0202F9E8; else - //v1 = (void *)(&gUnknown_0202F9E8 + 19); v1 = &gUnknown_0202F9E8[19]; for (v2 = 0; (u16)v2 <= 0x1f; v2++) @@ -502,7 +501,7 @@ void sub_807D1BC(u8 a1, u8 a2, s8 c, u8 d, u16 e) if (gUnknown_030006DC[r4] == 1) r5 = gUnknown_0202F9E8[c]; else - r5 = gUnknown_0202FC48[c]; + r5 = gUnknown_0202F9E8[c + 19]; for (i = 0; i < 16; i++) { @@ -520,3 +519,57 @@ void sub_807D1BC(u8 a1, u8 a2, s8 c, u8 d, u16 e) r4++; } } + +void sub_807D304(s8 a, u8 arg2, u16 c) +{ + struct RGBColor color; + u8 r_; + u8 g_; + u8 b_; + u16 r4; + u16 r5; + u16 r12; + + a = -a - 1; + color = *(struct RGBColor *)&c; + r_ = color.r; + g_ = color.g; + b_ = color.b; + r5 = 0; + for (r4 = 0; r4 < 32; r4++) + { + if (gUnknown_030006DC[r4] == 0) + { + BlendPalette(r5, 16, arg2, c); + r5 += 16; + } + else + { + for (r12 = 0; r12 < 16; r12++) + { + u32 offset; + struct RGBColor color1; + struct RGBColor color2; + u8 r1, g1, b1; + u8 r2, g2, b2; + + color1 = *(struct RGBColor *)&gPlttBufferUnfaded[r5]; + r1 = color1.r; + g1 = color1.g; + b1 = color1.b; + + offset = ((b1 & 0x1E) << 7) | ((g1 & 0x1E) << 3) | ((r1 & 0x1E) >> 1); + color2 = *(struct RGBColor *)&ewram0.data[a][offset]; + r2 = color2.r; + g2 = color2.g; + b2 = color2.b; + + r2 += ((r_ - r2) * arg2) >> 4; + g2 += ((g_ - g2) * arg2) >> 4; + b2 += ((b_ - b2) * arg2) >> 4; + + gPlttBufferFaded[r5++] = (b2 << 10) | (g2 << 5) | r2; + } + } + } +} -- cgit v1.2.3 From 8fe982335e26911dcb6842d27c3d6bd5cd74c292 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Thu, 21 Sep 2017 13:00:04 -0500 Subject: decompile sub_807D424 - sub_807DBE8 --- src/field_weather.c | 413 ++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 399 insertions(+), 14 deletions(-) (limited to 'src') diff --git a/src/field_weather.c b/src/field_weather.c index 9460110be..9dc2560cc 100644 --- a/src/field_weather.c +++ b/src/field_weather.c @@ -4,6 +4,7 @@ #include "palette.h" #include "sprite.h" #include "task.h" +#include "trig.h" #define MACRO1(a) ((((a) >> 1) & 0xF) | (((a) >> 2) & 0xF0) | (((a) >> 3) & 0xF00)) @@ -13,7 +14,9 @@ struct Weather u8 unknown_200[2][32]; u8 filler_240[0x460-0x240]; u8 unk460[2][32]; - u8 filler4A0[0x6C0-0x4A0]; + u8 filler4A0[0x6B6-0x4A0]; + s8 unknown_6B6; + u8 filler_6B7[0xC0-0xB7]; s8 unknown_6C0; s8 unknown_6C1; u8 unknown_6C2; @@ -41,7 +44,8 @@ struct Weather u8 unknown_6DE; u8 filler_6DF[5]; u8 unknown_6E4; - u8 filler_6E5[0x15]; + u8 filler_6E5[0xF]; + u8 unknown_6F4[6]; u8 unknown_6FA; u8 unknown_6FB; u8 filler_6FC[4]; @@ -53,18 +57,34 @@ struct Weather u8 unknown_724; u8 filler_725[9]; u8 unknown_72E; + u8 filler_72F; + u16 unknown_730; + u16 unknown_732; + u16 unknown_734; + u16 unknown_736; + u8 unknown_738; + u8 unknown_739; + u8 unknown_73A; + u8 filler_73B[0x3C-0x3B]; + s16 unknown_73C; + s16 unknown_73E; + s16 unknown_740; + s16 unknown_742; + u8 filler_744[0xD-4]; + s8 unknown_74D; + u8 unknown_74E; }; #define gWeather gUnknown_0202F7E8 -extern struct Weather gWeather; +extern struct Weather gUnknown_0202F7E8; +extern u16 gUnknown_0202FF58; extern u8 *gUnknown_083970E8; extern u8 (*gUnknown_08396FC8[][4])(void); extern u8 (*gUnknown_083970B8[])(void); extern u8 *gUnknown_030006DC; extern u8 gUnknown_083970C8; -//extern u8 (*gUnknown_0202FC48)[32]; -extern u8 gUnknown_0202FC48[][32]; -extern u8 gUnknown_0202F9E8[][32]; + +extern const u8 *const gUnknown_08396FA8[]; void sub_807C828(void) @@ -176,7 +196,7 @@ u32 sub_807CB0C(void) void sub_807CB10(void) { u16 v0; - u8(*v1)[32]; + u8 (*v1)[32]; u16 v2; u16 v4; u16 v5; @@ -190,9 +210,9 @@ void sub_807CB10(void) for (v0 = 0; v0 <= 1; v0++) { if (v0 == 0) - v1 = (void *)&gUnknown_0202F9E8; + v1 = gWeather.unknown_200; else - v1 = &gUnknown_0202F9E8[19]; + v1 = gWeather.unk460; for (v2 = 0; (u16)v2 <= 0x1f; v2++) { @@ -392,10 +412,10 @@ void sub_807CEBC(u8 a, u8 b, s8 c) { u8 r, g, b; - if (gUnknown_030006DC[r4] == 2 || r4 - 16 == gUnknown_0202F7E8.unknown_6D5) - r6 = gUnknown_0202F7E8.unk460[c]; + if (gUnknown_030006DC[r4] == 2 || r4 - 16 == gWeather.unknown_6D5) + r6 = gWeather.unk460[c]; else - r6 = gUnknown_0202F7E8.unknown_200[c]; + r6 = gWeather.unknown_200[c]; if (r4 == 16 || r4 > 0x1B) { for (i = 0; i < 16; i++) @@ -499,9 +519,9 @@ void sub_807D1BC(u8 a1, u8 a2, s8 c, u8 d, u16 e) u8 *r5; if (gUnknown_030006DC[r4] == 1) - r5 = gUnknown_0202F9E8[c]; + r5 = gWeather.unknown_200[c]; else - r5 = gUnknown_0202F9E8[c + 19]; + r5 = gWeather.unk460[c]; for (i = 0; i < 16; i++) { @@ -573,3 +593,368 @@ void sub_807D304(s8 a, u8 arg2, u16 c) } } } + +bool8 sub_807D574(u8); + +void sub_807D424(u8 a, u16 b) +{ + struct RGBColor color; + u8 r_; + u8 g_; + u8 b_; + u16 r4; + + BlendPalette(0, 0x100, a, b); + color = *(struct RGBColor *)&b; + r_ = color.r; + g_ = color.g; + b_ = color.b; + + r4 = 16; + while (r4 < 32) + { + if (sub_807D574(r4)) + { + u16 r12 = (r4 + 1) * 16; + u16 r6 = r4 * 16; + + while (r6 < r12) + { + struct RGBColor color = *(struct RGBColor *)&gPlttBufferUnfaded[r6]; + u8 r = color.r; + u8 g = color.g; + u8 b = color.b; + + r += ((28 - r) * 3) >> 2; + g += ((31 - g) * 3) >> 2; + b += ((28 - b) * 3) >> 2; + + r += ((r_ - r) * a) >> 4; + g += ((g_ - g) * a) >> 4; + b += ((b_ - b) * a) >> 4; + + gPlttBufferFaded[r6] = (b << 10) | (g << 5) | r; + r6++; + } + } + else + { + BlendPalette(r4 * 16, 16, a, b); + } + r4++; + } +} + +void sub_807D540(u8 a) +{ + if (gWeather.unknown_6FA < 6) + { + gWeather.unknown_6F4[gWeather.unknown_6FA] = a; + gWeather.unknown_6FA++; + } +} + +bool8 sub_807D574(u8 a) +{ + u16 i; + + for (i = 0; i < gWeather.unknown_6FA; i++) + { + if (gWeather.unknown_6F4[i] == a) + return TRUE; + } + return FALSE; +} + +void sub_807D5BC(s8 a) +{ + if (gWeather.unknown_6C6 == 3) + { + sub_807CEBC(0, 32, a); + gWeather.unknown_6C0 = a; + } +} + +void sub_807D5F0(u8 a, u8 b, u8 c) +{ + if (gWeather.unknown_6C6 == 3) + { + gWeather.unknown_6C6 = 0; + gWeather.unknown_6C0 = a; + gWeather.unknown_6C1 = b; + gWeather.unknown_6C3 = 0; + gWeather.unknown_6C2 = c; + sub_807D5BC(a); + } +} + +void fade_screen(u8 a, u8 b) +{ + u32 r4; + u32 r1; + u32 r2; + + switch (a) + { + case 0: + r4 = 0; + r1 = 0; + break; + case 2: + r4 = 0xFFFF; + r1 = 0; + break; + case 1: + r4 = 0; + r1 = 1; + break; + case 3: + r4 = 0xFFFF; + r1 = 1; + break; + default: + return; + } + + switch (gWeather.unknown_6D0) + { + case 3: + case 4: + case 5: + case 6: + case 11: + case 12: + case 13: + r2 = 1; + break; + default: + r2 = 0; + break; + } + + if (r1 != 0) + { + if (r2 != 0) + CpuFastCopy(gPlttBufferFaded, gPlttBufferUnfaded, 0x400); + BeginNormalPaletteFade(0xFFFFFFFF, b, 0, 16, r4); + gWeather.unknown_6C6 = 2; + } + else + { + gWeather.unknown_6C4 = r4; + if (r2 != 0) + gWeather.unknown_6C7 = 0; + else + BeginNormalPaletteFade(0xFFFFFFFF, b, 16, 0, r4); + gWeather.unknown_6C6 = 1; + gWeather.unknown_6CA = 1; + gWeather.unknown_6CB = 0; + sub_807DB64(gWeather.unknown_730, gWeather.unknown_732); + gWeather.unknown_6C8 = 1; + } +} + +bool8 sub_807D770(void) +{ + return gWeather.unknown_6C6 ^ 1 ? TRUE : FALSE; +} + +void sub_807D78C(u8 a) +{ + u16 r4 = 16 + a; + u16 i; + + switch (gWeather.unknown_6C6) + { + case 1: + if (gWeather.unknown_6CA != 0) + { + if (gWeather.unknown_6D0 == 6) + sub_807D540(r4); + r4 *= 16; + for (i = 0; i < 16; i++) + gPlttBufferFaded[r4 + i] = gWeather.unknown_6C4; + } + break; + case 2: + r4 *= 16; + CpuFastCopy(gPlttBufferFaded + r4, gPlttBufferUnfaded + r4, 32); + BlendPalette(r4, 16, gPaletteFade.y, gPaletteFade.blendColor); + break; + default: + if (gWeather.unknown_6D0 != 6) + { + sub_807CEBC(r4, 1, gWeather.unknown_6C0); + } + else + { + r4 *= 16; + BlendPalette(r4, 16, 12, 0x73FC); + } + break; + } +} + +void sub_807D874(u8 a) +{ + sub_807CEBC(a, 1, gWeather.unknown_6C0); +} + +u8 unref_sub_807D894(void) +{ + if (gWeather.unknown_6C6 == 1) + return gWeather.unknown_6CA; + else + return 0; +} + +void sub_807D8C0(const u16 *palette) +{ + LoadPalette(palette, 0x100 + gWeather.unknown_6D4 * 16, 32); + sub_807D78C(gWeather.unknown_6D4); +} + +void sub_807D8F0(u8 *a, u8 *b) +{ + u8 r4 = *a; + u16 i; + + if (r4 < 7) + { + r4--; + LZ77UnCompWram(gUnknown_08396FA8[r4], ewram0.data[r4]); + if (r4 == 0) + { + ewram0.data[r4][0] = 0x421; + for (i = 1; i < 0x1000; i++) + ewram0.data[r4][i] += ewram0.data[r4][i - 1]; + } + else + { + for (i = 0; i < 0x1000; i++) + ewram0.data[r4][i] += ewram0.data[r4 - 1][i]; + } + (*a)++; + if (*a == 7) + { + *a = 32; + *b = 32; + } + } +} + +void sub_807D9A8(void) +{ + gWeather.unknown_74D = 1; + gWeather.unknown_74E = 1; +} + +bool8 sub_807D9C8(void) +{ + if (gWeather.unknown_74D < 32) + { + sub_807D8F0(&gWeather.unknown_74D, &gWeather.unknown_74E); + if (gWeather.unknown_74D < 32) + return TRUE; + } + return FALSE; +} + +void sub_807DA04(s8 a) +{ + sub_807D5BC(-a - 1); +} + +void sub_807DA14(void) +{ + gWeather.unknown_73C = 0; + gWeather.unknown_740 = 0; + gWeather.unknown_742 = 0; + gWeather.unknown_73E = 0; + gUnknown_0202FF58 = 5; +} + +void sub_807DA4C(void) +{ + switch (gWeather.unknown_742) + { + case 0: + if (++gWeather.unknown_740 > gUnknown_0202FF58) + { + gWeather.unknown_740 = 0; + sub_807DA04(gWeather.unknown_73C++); + if (gWeather.unknown_73C > 5) + { + gWeather.unknown_73E = gWeather.unknown_73C; + gWeather.unknown_742 = 1; + gWeather.unknown_740 = 0x3C; + } + } + break; + case 1: + gWeather.unknown_740 = (gWeather.unknown_740 + 3) & 0x7F; + gWeather.unknown_73C = ((gSineTable[gWeather.unknown_740] - 1) >> 6) + 2; + if (gWeather.unknown_73C != gWeather.unknown_73E) + sub_807DA04(gWeather.unknown_73C); + gWeather.unknown_73E = gWeather.unknown_73C; + break; + case 2: + if (++gWeather.unknown_740 > gUnknown_0202FF58) + { + gWeather.unknown_740 = 0; + sub_807DA04(--gWeather.unknown_73C); + if (gWeather.unknown_73C == 3) + gWeather.unknown_742 = 0; + } + break; + } +} + +void sub_807DB64(u8 a, u8 b) +{ + gWeather.unknown_730 = a; + gWeather.unknown_732 = b; + gWeather.unknown_734 = a; + gWeather.unknown_736 = b; + REG_BLDALPHA = (b << 8) | a; +} + +void sub_807DBA4(u8 a, u8 b, int c) +{ + gWeather.unknown_734 = a; + gWeather.unknown_736 = b; + gWeather.unknown_73A = c; + gWeather.unknown_739 = 0; + gWeather.unknown_738 = 0; +} + +bool8 sub_807DBE8(void) +{ + if (gWeather.unknown_730 == gWeather.unknown_734 + && gWeather.unknown_732 == gWeather.unknown_736) + return TRUE; + if (++gWeather.unknown_739 > gWeather.unknown_73A) + { + gWeather.unknown_739 = 0; + gWeather.unknown_738++; + if (gWeather.unknown_738 & 1) + { + if (gWeather.unknown_730 < gWeather.unknown_734) + gWeather.unknown_730++; + else if (gWeather.unknown_730 > gWeather.unknown_734) + gWeather.unknown_730--; + } + else + { + if (gWeather.unknown_732 < gWeather.unknown_736) + gWeather.unknown_732++; + else if (gWeather.unknown_732 > gWeather.unknown_736) + gWeather.unknown_732--; + } + } + REG_BLDALPHA = (gWeather.unknown_732 << 8) | gWeather.unknown_730; + if (gWeather.unknown_730 == gWeather.unknown_734 + && gWeather.unknown_732 == gWeather.unknown_736) + return TRUE; + return FALSE; +} -- cgit v1.2.3 From 61e8416b6e7d1b309b7382169c3fe47bc46f7c90 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Thu, 21 Sep 2017 15:24:12 -0500 Subject: decompile unref_sub_807DCB4 - sub_807E460 --- src/field_weather.c | 570 +++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 539 insertions(+), 31 deletions(-) (limited to 'src') diff --git a/src/field_weather.c b/src/field_weather.c index 9dc2560cc..f1b4d4391 100644 --- a/src/field_weather.c +++ b/src/field_weather.c @@ -1,16 +1,33 @@ #include "global.h" #include "blend_palette.h" +#include "field_map_obj.h" #include "field_weather.h" #include "palette.h" +#include "script.h" +#include "songs.h" +#include "sound.h" #include "sprite.h" #include "task.h" #include "trig.h" #define MACRO1(a) ((((a) >> 1) & 0xF) | (((a) >> 2) & 0xF0) | (((a) >> 3) & 0xF00)) +struct RGBColor +{ + u16 r:5; + u16 g:5; + u16 b:5; +}; + +struct Struct2000000 +{ + u16 data[0][0x1000]; // unknown length +}; + struct Weather { - u8 filler_000[0x200]; + u8 filler_000[0x1F4]; + struct Sprite *unknown_1F4[3]; u8 unknown_200[2][32]; u8 filler_240[0x460-0x240]; u8 unk460[2][32]; @@ -28,19 +45,21 @@ struct Weather u8 unknown_6C9; u8 unknown_6CA; u8 unknown_6CB; - u8 filler_6CC[2]; + u16 unknown_6CC; u16 unknown_6CE; u8 unknown_6D0; u8 unknown_6D1; - u8 filler_6D2[1]; + u8 unknown_6D2; u8 unknown_6D3; u8 unknown_6D4; u8 unknown_6D5; - u8 filler_6D6[2]; + u16 unknown_6D6; u8 unknown_6D8; - u8 filler_6D9[1]; + u8 unknown_6D9; u8 unknown_6DA; - u8 filler_6DB[3]; + u8 unknown_6DB; + u8 unknown_6DC; + u8 unknown_6DD; u8 unknown_6DE; u8 filler_6DF[5]; u8 unknown_6E4; @@ -75,17 +94,43 @@ struct Weather u8 unknown_74E; }; +extern u8 ewram[]; + +#define ewram0 (*(struct Struct2000000 *)ewram) + #define gWeather gUnknown_0202F7E8 extern struct Weather gUnknown_0202F7E8; +extern u8 gUnknown_0202FF38[]; extern u16 gUnknown_0202FF58; extern u8 *gUnknown_083970E8; extern u8 (*gUnknown_08396FC8[][4])(void); extern u8 (*gUnknown_083970B8[])(void); -extern u8 *gUnknown_030006DC; -extern u8 gUnknown_083970C8; - -extern const u8 *const gUnknown_08396FA8[]; - +extern const u8 *gUnknown_030006DC; +extern const u8 gUnknown_083970C8[]; +extern struct Weather *const gUnknown_08396FC4; +extern const struct SpriteSheet gUnknown_0839A9D4; +extern const struct SpriteTemplate gSpriteTemplate_839A9F0; +extern const u16 gUnknown_08397108[]; +//extern const s16 gUnknown_0839A9C8[][2]; +extern const struct Coords16 gUnknown_0839A9C8[]; + +const u8 DroughtPaletteData_0[] = INCBIN_U8("graphics/weather/drought0.bin.lz"); +const u8 DroughtPaletteData_1[] = INCBIN_U8("graphics/weather/drought1.bin.lz"); +const u8 DroughtPaletteData_2[] = INCBIN_U8("graphics/weather/drought2.bin.lz"); +const u8 DroughtPaletteData_3[] = INCBIN_U8("graphics/weather/drought3.bin.lz"); +const u8 DroughtPaletteData_4[] = INCBIN_U8("graphics/weather/drought4.bin.lz"); +const u8 DroughtPaletteData_5[] = INCBIN_U8("graphics/weather/drought5.bin.lz"); + +const u8 *const gUnknown_08396FA8[] = +{ + DroughtPaletteData_0, + DroughtPaletteData_1, + DroughtPaletteData_2, + DroughtPaletteData_3, + DroughtPaletteData_4, + DroughtPaletteData_5, + ewram, +}; void sub_807C828(void) { @@ -113,7 +158,7 @@ void sub_807C828(void) gWeather.unknown_6C6 = 3; gWeather.unknown_6C8 = 0; gWeather.unknown_6D3 = 1; - gWeather.unknown_6C9 = CreateTask(&sub_807C9E4, 80); + gWeather.unknown_6C9 = CreateTask(sub_807C9E4, 80); } } @@ -147,12 +192,12 @@ void sub_807C9B4(u8 effect) gWeather.unknown_6C8 = 1; } -void sub_807C9E4(u8 task) +void sub_807C9E4(u8 taskId) { if (gWeather.unknown_6C8) { gUnknown_08396FC8[gWeather.unknown_6D0][2](); - gTasks[task].func = &sub_807CA34; + gTasks[taskId].func = sub_807CA34; } } @@ -206,7 +251,7 @@ void sub_807CB10(void) u16 v11; s16 dunno; - gUnknown_030006DC = &gUnknown_083970C8; + gUnknown_030006DC = gUnknown_083970C8; for (v0 = 0; v0 <= 1; v0++) { if (v0 == 0) @@ -372,22 +417,6 @@ void nullsub_39(void) { } -struct RGBColor -{ - u16 r:5; - u16 g:5; - u16 b:5; -}; - -extern u8 ewram[]; - -struct Struct2000000 -{ - u16 data[0][0x1000]; // unknown length -}; - -#define ewram0 (*(struct Struct2000000 *)ewram) - void sub_807CEBC(u8 a, u8 b, s8 c) { u16 r4; @@ -958,3 +987,482 @@ bool8 sub_807DBE8(void) return TRUE; return FALSE; } + +void unref_sub_807DCB4(u8 a) +{ + switch (a) + { + case 1: + SetWeather(1); + break; + case 2: + SetWeather(2); + break; + case 3: + SetWeather(3); + break; + case 4: + SetWeather(4); + break; + case 5: + SetWeather(5); + break; + case 6: + SetWeather(6); + break; + case 7: + SetWeather(9); + break; + case 8: + SetWeather(7); + break; + case 9: + SetWeather(8); + break; + case 10: + SetWeather(11); + break; + } +} + +u8 weather_get_current(void) +{ + return gWeather.unknown_6D0; +} + +void sub_807DD5C(u16 sndEff) +{ + if (gUnknown_0202F7E8.unknown_6C6 != 2) + { + switch (sndEff) + { + case SE_T_KOAME: + gUnknown_0202F7E8.unknown_6DD = 0; + break; + case SE_T_OOAME: + gUnknown_0202F7E8.unknown_6DD = 1; + break; + case SE_T_AME: + gUnknown_0202F7E8.unknown_6DD = 2; + break; + default: + return; + } + PlaySE(sndEff); + } +} + +void PlayRainSoundEffect(void) +{ + if (IsSpecialSEPlaying()) + { + switch (gUnknown_0202F7E8.unknown_6DD) + { + case 0: + PlaySE(0x56); + break; + case 1: + PlaySE(0x54); + break; + case 2: + default: + PlaySE(0x52); + break; + } + } +} + +u8 sub_807DDFC(void) +{ + return gUnknown_0202F7E8.unknown_6D3; +} + +void sub_807DE10(void) +{ + gUnknown_0202F7E8.unknown_6C6 = 2; +} + +void unref_sub_807DE24(void) +{ + gUnknown_0202F7E8.unknown_6C6 = 3; +} + +void sub_807DE38(u8 a) +{ + CpuCopy16(gUnknown_083970C8, gUnknown_0202FF38, 32); + gUnknown_0202FF38[a] = 0; + gUnknown_030006DC = gUnknown_0202FF38; +} + +void sub_807DE68(void) +{ + gUnknown_030006DC = gUnknown_083970C8; +} + +void sub_807DE78(void) +{ + gUnknown_08396FC4->unknown_6C1 = 0; + gUnknown_08396FC4->unknown_6C2 = 20; + gUnknown_08396FC4->unknown_6D2 = 0; + gUnknown_08396FC4->unknown_6CC = 0; + if (gUnknown_08396FC4->unknown_6DE == 0) + sub_807DB64(0, 16); +} + +void sub_807DEF4(void); + +void sub_807DEC4(void) +{ + sub_807DE78(); + while (gUnknown_08396FC4->unknown_6D2 == 0) + sub_807DEF4(); +} + +void sub_807DFD4(void); + +void sub_807DEF4(void) +{ + switch (gUnknown_08396FC4->unknown_6CC) + { + case 0: + sub_807DFD4(); + gUnknown_08396FC4->unknown_6CC++; + break; + case 1: + sub_807DBA4(12, 8, 1); + gUnknown_08396FC4->unknown_6CC++; + break; + case 2: + if (sub_807DBE8()) + { + gUnknown_08396FC4->unknown_6D2 = 1; + gUnknown_08396FC4->unknown_6CC++; + } + break; + } +} + +void sub_807E0A0(void); + +bool8 sub_807DF54(void) +{ + switch (gUnknown_08396FC4->unknown_6CE) + { + case 0: + sub_807DBA4(0, 16, 1); + gUnknown_08396FC4->unknown_6CE++; + return TRUE; + case 1: + if (sub_807DBE8()) + { + sub_807E0A0(); + gUnknown_08396FC4->unknown_6CE++; + } + return TRUE; + } + return FALSE; +} + +void sub_807DF9C(void) +{ + gUnknown_08396FC4->unknown_6C1 = 0; + gUnknown_08396FC4->unknown_6C2 = 20; +} + +void sub_807DFC0(void) +{ + sub_807DF9C(); +} + +void nullsub_55(void) +{ +} + +int sub_807DFD0(void) +{ + return 0; +} + +void sub_807DFD4(void) +{ + u16 i; + + if (gUnknown_08396FC4->unknown_6DE == 1) + return; + LoadSpriteSheet(&gUnknown_0839A9D4); + sub_807D8C0(gUnknown_08397108); + for (i = 0; i < 3; i++) + { + u8 spriteId = CreateSprite(&gSpriteTemplate_839A9F0, 0, 0, 0xFF); + + if (spriteId != 64) + { + struct Sprite *sprite; + + gUnknown_08396FC4->unknown_1F4[i] = &gSprites[spriteId]; + sprite = gUnknown_08396FC4->unknown_1F4[i]; + sub_80603CC(gUnknown_0839A9C8[i].x + 7, gUnknown_0839A9C8[i].y + 7, &sprite->pos1.x, &sprite->pos1.y); + sprite->coordOffsetEnabled = TRUE; + } + else + { + gUnknown_08396FC4->unknown_1F4[i] = NULL; + } + } + gUnknown_08396FC4->unknown_6DE = 1; +} + +void sub_807E0A0(void) +{ + u16 i; + + if (gUnknown_08396FC4->unknown_6DE == 0) + return; + for (i = 0; i < 3; i++) + { + if (gUnknown_08396FC4->unknown_1F4[i] != NULL) + DestroySprite(gUnknown_08396FC4->unknown_1F4[i]); + } + FreeSpriteTilesByTag(0x1200); + gUnknown_08396FC4->unknown_6DE = 0; +} + +void sub_807E0F4(struct Sprite *sprite) +{ + sprite->data0 = (sprite->data0 + 1) & 1; + if (sprite->data0 != 0) + sprite->pos1.x--; +} + +void sub_807E110(void) +{ + gUnknown_08396FC4->unknown_6CC = 0; + gUnknown_08396FC4->unknown_6D2 = 0; + gUnknown_08396FC4->unknown_6C1 = 0; + gUnknown_08396FC4->unknown_6C2 = 0; +} + +void sub_807E174(void); + +void sub_807E144(void) +{ + sub_807E110(); + while (gUnknown_08396FC4->unknown_6D2 == 0) + sub_807E174(); +} + +void sub_807E174(void) +{ + switch (gUnknown_08396FC4->unknown_6CC) + { + case 0: + if (gUnknown_08396FC4->unknown_6C6 != 0) + gUnknown_08396FC4->unknown_6CC++; + break; + case 1: + sub_807D9A8(); + gUnknown_08396FC4->unknown_6CC++; + break; + case 2: + if (sub_807D9C8() == FALSE) + gUnknown_08396FC4->unknown_6CC++; + break; + case 3: + sub_807DA14(); + gUnknown_08396FC4->unknown_6CC++; + break; + case 4: + sub_807DA4C(); + if (gUnknown_08396FC4->unknown_73C == 6) + { + gUnknown_08396FC4->unknown_6D2 = 1; + gUnknown_08396FC4->unknown_6CC++; + } + break; + default: + sub_807DA4C(); + break; + } +} + +int sub_807E258(void) +{ + return 0; +} + +void task50_0807B6D4(u8); + +void sub_807E25C(void) +{ + CreateTask(task50_0807B6D4, 0x50); +} + +#define tState data[0] +#define tBlendY data[1] +#define tBlendDelay data[2] +#define tWinRange data[3] + +void task50_0807B6D4(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + switch (task->tState) + { + case 0: + task->tBlendY = 0; + task->tBlendDelay = 0; + task->tWinRange = REG_WININ; + REG_WININ = WIN_RANGE(63, 63); + REG_BLDCNT = 0x9E; + REG_BLDY = 0; + task->tState++; + // fall through + case 1: + task->tBlendY += 3; + if (task->tBlendY > 16) + task->tBlendY = 16; + REG_BLDY = task->tBlendY; + if (task->tBlendY >= 16) + task->tState++; + break; + case 2: + task->tBlendDelay++; + if (task->tBlendDelay > 9) + { + task->tBlendDelay = 0; + task->tBlendY--; + if (task->tBlendY <= 0) + { + task->tBlendY = 0; + task->tState++; + } + REG_BLDY = task->tBlendY; + } + break; + case 3: + REG_BLDCNT = 0; + REG_BLDY = 0; + REG_WININ = task->tWinRange; + task->tState++; + break; + case 4: + EnableBothScriptContexts(); + DestroyTask(taskId); + break; + } +} + +#undef tState +#undef tBlendY +#undef tBlendDelay +#undef tWinRange + +void sub_807E364(void) +{ + gUnknown_08396FC4->unknown_6CC = 0; + gUnknown_08396FC4->unknown_6D2 = 0; + gUnknown_08396FC4->unknown_6D6 = 0; + gUnknown_08396FC4->unknown_6DB = 8; + gUnknown_08396FC4->unknown_6DC = 0; + gUnknown_08396FC4->unknown_6D9 = 10; + gUnknown_08396FC4->unknown_6C1 = 3; + gUnknown_08396FC4->unknown_6C2 = 20; + sub_807DD5C(SE_T_KOAME); +} + +void sub_807E400(void); + +void sub_807E3D0(void) +{ + sub_807E364(); + while (gUnknown_08396FC4->unknown_6D2 == 0) + sub_807E400(); +} + +void sub_807E7A4(void); +u8 sub_807E7B4(void); +u8 sub_807E8E8(void); + +void sub_807E400(void) +{ + switch (gUnknown_08396FC4->unknown_6CC) + { + case 0: + sub_807E7A4(); + gUnknown_08396FC4->unknown_6CC++; + break; + case 1: + if (sub_807E7B4() == 0) + gUnknown_08396FC4->unknown_6CC++; + break; + case 2: + if (sub_807E8E8() == 0) + { + gUnknown_08396FC4->unknown_6D2 = 1; + gUnknown_08396FC4->unknown_6CC++; + } + break; + } +} + +void sub_807E974(void); + +bool8 sub_807E460(void) +{ + switch (gUnknown_08396FC4->unknown_6CE) + { + case 0: + if (gUnknown_08396FC4->unknown_6D1 == 3 + || gUnknown_08396FC4->unknown_6D1 == 5 + || gUnknown_08396FC4->unknown_6D1 == 13) + { + gUnknown_08396FC4->unknown_6CE = 0xFF; + return FALSE; + } + else + { + gUnknown_08396FC4->unknown_6D9 = 0; + gUnknown_08396FC4->unknown_6CE++; + } + // fall through + case 1: + if (sub_807E8E8() == 0) + { + sub_807E974(); + gUnknown_08396FC4->unknown_6CE++; + return FALSE; + } + return TRUE; + } + return FALSE; +} + +extern const struct Coords16 gUnknown_0839AAC4[]; +extern const struct Coords16 gUnknown_0839AABC[]; + +/* +void sub_807E4EC(struct Sprite *sprite) +{ + u32 randVal; + u16 r6; + s16 r4; + s16 r0; + + if (sprite->data1 == 0) + sprite->data1 = 361; + randVal = sprite->data1 * 1103515245 + 12345; + sprite->data1 = ((randVal & 0x7FFF0000) >> 16) % 600; + r6 = gUnknown_0839AAC4[gUnknown_08396FC4->unknown_6DC].x; + r4 = sprite->data1 % 31; + sprite->data2 = r4 * 8; + r0 = sprite->data1 / 31; + sprite->data2 = r4 * 128; + sprite->data3 = r0 * 128; + sprite->data2 = r4 * 128 - gUnknown_0839AABC[gUnknown_08396FC4->unknown_6DC].x * r6; + sprite->data3 = r0 * 128 - gUnknown_0839AABC[gUnknown_08396FC4->unknown_6DC].y * r6; + StartSpriteAnim(sprite, 0); + sprite->data4 = 0; + sprite->invisible = FALSE; + sprite->data0 = r6; +} +*/ \ No newline at end of file -- cgit v1.2.3 From 3185d7c252ef5eb036edbe8976de41abc40ee498 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Thu, 21 Sep 2017 18:12:02 -0500 Subject: get sub_807E4EC to match --- src/field_weather.c | 33 ++++++++++++++++++++------------- 1 file changed, 20 insertions(+), 13 deletions(-) (limited to 'src') diff --git a/src/field_weather.c b/src/field_weather.c index f1b4d4391..fff4ac673 100644 --- a/src/field_weather.c +++ b/src/field_weather.c @@ -1438,31 +1438,38 @@ bool8 sub_807E460(void) } extern const struct Coords16 gUnknown_0839AAC4[]; -extern const struct Coords16 gUnknown_0839AABC[]; +//extern const struct Coords16 gUnknown_0839AABC[]; +extern const s16 gUnknown_0839AABC[][2]; -/* void sub_807E4EC(struct Sprite *sprite) { u32 randVal; u16 r6; - s16 r4; - s16 r0; + s32 r4; + s32 r0; if (sprite->data1 == 0) sprite->data1 = 361; randVal = sprite->data1 * 1103515245 + 12345; sprite->data1 = ((randVal & 0x7FFF0000) >> 16) % 600; r6 = gUnknown_0839AAC4[gUnknown_08396FC4->unknown_6DC].x; - r4 = sprite->data1 % 31; - sprite->data2 = r4 * 8; - r0 = sprite->data1 / 31; - sprite->data2 = r4 * 128; - sprite->data3 = r0 * 128; - sprite->data2 = r4 * 128 - gUnknown_0839AABC[gUnknown_08396FC4->unknown_6DC].x * r6; - sprite->data3 = r0 * 128 - gUnknown_0839AABC[gUnknown_08396FC4->unknown_6DC].y * r6; + + r4 = sprite->data1 % 30; + sprite->data2 = r4 * 8; // useless assignment + + r0 = sprite->data1 / 30; + sprite->data3 = r0 * 8; // useless assignment + + sprite->data2 = r4; + sprite->data2 <<= 7; + + sprite->data3 = r0; + sprite->data3 <<= 7; + + sprite->data2 -= gUnknown_0839AABC[gUnknown_08396FC4->unknown_6DC][0] * r6; + sprite->data3 -= gUnknown_0839AABC[gUnknown_08396FC4->unknown_6DC][1] * r6; StartSpriteAnim(sprite, 0); sprite->data4 = 0; - sprite->invisible = FALSE; + sprite->coordOffsetEnabled = FALSE; sprite->data0 = r6; } -*/ \ No newline at end of file -- cgit v1.2.3 From a0a58c3f49fcc4fec62a9f4345fb29893f97c607 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Thu, 21 Sep 2017 21:40:26 -0500 Subject: decompile sub_807E5C0 - snowflakes_progress2 --- src/field_weather.c | 214 ++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 209 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/field_weather.c b/src/field_weather.c index fff4ac673..0027f2bc1 100644 --- a/src/field_weather.c +++ b/src/field_weather.c @@ -26,7 +26,8 @@ struct Struct2000000 struct Weather { - u8 filler_000[0x1F4]; + struct Sprite *unknown_0[24]; + struct Sprite *unknown_60[0x65]; // snowflakes? struct Sprite *unknown_1F4[3]; u8 unknown_200[2][32]; u8 filler_240[0x460-0x240]; @@ -61,9 +62,12 @@ struct Weather u8 unknown_6DC; u8 unknown_6DD; u8 unknown_6DE; - u8 filler_6DF[5]; + u8 filler_6DF[1]; + u16 unknown_6E0; + u8 filler_6E2[2]; u8 unknown_6E4; - u8 filler_6E5[0xF]; + u8 unknown_6E5; + u8 filler_6E6[0xE]; u8 unknown_6F4[6]; u8 unknown_6FA; u8 unknown_6FB; @@ -113,6 +117,8 @@ extern const struct SpriteTemplate gSpriteTemplate_839A9F0; extern const u16 gUnknown_08397108[]; //extern const s16 gUnknown_0839A9C8[][2]; extern const struct Coords16 gUnknown_0839A9C8[]; +extern const struct SpriteSheet gUnknown_0839AACC; +extern const struct SpriteTemplate gSpriteTemplate_839AAA4; const u8 DroughtPaletteData_0[] = INCBIN_U8("graphics/weather/drought0.bin.lz"); const u8 DroughtPaletteData_1[] = INCBIN_U8("graphics/weather/drought1.bin.lz"); @@ -1437,7 +1443,8 @@ bool8 sub_807E460(void) return FALSE; } -extern const struct Coords16 gUnknown_0839AAC4[]; +//extern const struct Coords16 gUnknown_0839AAC4[]; +extern const u16 gUnknown_0839AAC4[][2]; //extern const struct Coords16 gUnknown_0839AABC[]; extern const s16 gUnknown_0839AABC[][2]; @@ -1452,7 +1459,8 @@ void sub_807E4EC(struct Sprite *sprite) sprite->data1 = 361; randVal = sprite->data1 * 1103515245 + 12345; sprite->data1 = ((randVal & 0x7FFF0000) >> 16) % 600; - r6 = gUnknown_0839AAC4[gUnknown_08396FC4->unknown_6DC].x; + + r6 = gUnknown_0839AAC4[gUnknown_08396FC4->unknown_6DC][0]; r4 = sprite->data1 % 30; sprite->data2 = r4 * 8; // useless assignment @@ -1468,8 +1476,204 @@ void sub_807E4EC(struct Sprite *sprite) sprite->data2 -= gUnknown_0839AABC[gUnknown_08396FC4->unknown_6DC][0] * r6; sprite->data3 -= gUnknown_0839AABC[gUnknown_08396FC4->unknown_6DC][1] * r6; + StartSpriteAnim(sprite, 0); sprite->data4 = 0; sprite->coordOffsetEnabled = FALSE; sprite->data0 = r6; } + +void sub_807E5C0(struct Sprite *sprite) +{ + if (sprite->data4 == 0) + { + sprite->data2 += gUnknown_0839AABC[gUnknown_08396FC4->unknown_6DC][0]; + sprite->data3 += gUnknown_0839AABC[gUnknown_08396FC4->unknown_6DC][1]; + sprite->pos1.x = sprite->data2 >> 4; + sprite->pos1.y = sprite->data3 >> 4; + + if (sprite->data5 != 0 + && (sprite->pos1.x >= -8 && sprite->pos1.x <= 248) + && sprite->pos1.y >= -16 && sprite->pos1.y <= 176) + sprite->invisible = FALSE; + else + sprite->invisible = TRUE; + + sprite->data0--; + if (sprite->data0 == 0) + { + StartSpriteAnim(sprite, gUnknown_08396FC4->unknown_6DC + 1); + sprite->data4 = 1; + sprite->pos1.x -= gSpriteCoordOffsetX; + sprite->pos1.y -= gSpriteCoordOffsetY; + sprite->coordOffsetEnabled = TRUE; + } + } + else if (sprite->animEnded) + { + sprite->invisible = TRUE; + sub_807E4EC(sprite); + } +} + +void sub_807E6C4(struct Sprite *sprite) +{ + if (sprite->data0 == 0) + { + sub_807E4EC(sprite); + sprite->callback = sub_807E5C0; + } + else + { + sprite->data0--; + } +} + +void sub_807E6F0(struct Sprite *sprite, u16 b) +{ + u16 r8 = gUnknown_0839AAC4[gUnknown_08396FC4->unknown_6DC][0]; + u16 r6 = b / (gUnknown_0839AAC4[gUnknown_08396FC4->unknown_6DC][1] + r8); + u16 r4 = b % (gUnknown_0839AAC4[gUnknown_08396FC4->unknown_6DC][1] + r8); + + while (--r6 != 0xFFFF) + sub_807E4EC(sprite); + if (r4 < r8) + { + while (--r4 != 0xFFFF) + sub_807E5C0(sprite); + sprite->data6 = 0; + } + else + { + sprite->data0 = r4 - r8; + sprite->invisible = TRUE; + sprite->data6 = 1; + } +} + +void sub_807E7A4(void) +{ + LoadSpriteSheet(&gUnknown_0839AACC); +} + +extern const struct Coords16 gUnknown_0839AA08[]; + +bool8 sub_807E7B4(void) +{ + u8 r7; + u8 spriteId; + + if (gUnknown_08396FC4->unknown_6DA == 24) + return FALSE; + + r7 = gUnknown_08396FC4->unknown_6DA; + spriteId = CreateSpriteAtEnd(&gSpriteTemplate_839AAA4, + gUnknown_0839AA08[r7].x, gUnknown_0839AA08[r7].y, 78); + if (spriteId != 64) + { + gSprites[spriteId].data5 = 0; + gSprites[spriteId].data1 = r7 * 145; + while (gSprites[spriteId].data1 >= 600) + gSprites[spriteId].data1 -= 600; + sub_807E4EC(&gSprites[spriteId]); + sub_807E6F0(&gSprites[spriteId], r7 * 9); + gSprites[spriteId].invisible = TRUE; + gUnknown_08396FC4->unknown_0[r7] = &gSprites[spriteId]; + } + else + { + gUnknown_08396FC4->unknown_0[r7] = NULL; + } + + if (++gUnknown_08396FC4->unknown_6DA == 24) + { + u16 i; + + for (i = 0; i < 24; i++) + { + if (gUnknown_08396FC4->unknown_0[i] != NULL) + { + if (gUnknown_08396FC4->unknown_0[i]->data6 == 0) + gUnknown_08396FC4->unknown_0[i]->callback = sub_807E5C0; + else + gUnknown_08396FC4->unknown_0[i]->callback = sub_807E6C4; + } + } + return FALSE; + } + return TRUE; +} + +bool8 sub_807E8E8(void) +{ + if (gUnknown_08396FC4->unknown_6D8 == gUnknown_08396FC4->unknown_6D9) + return FALSE; + + if (++gUnknown_08396FC4->unknown_6D6 > gUnknown_08396FC4->unknown_6DB) + { + gUnknown_08396FC4->unknown_6D6 = 0; + if (gUnknown_08396FC4->unknown_6D8 < gUnknown_08396FC4->unknown_6D9) + { + gUnknown_08396FC4->unknown_0[gUnknown_08396FC4->unknown_6D8++]->data5 = 1; + } + else + { + gUnknown_08396FC4->unknown_6D8--; + gUnknown_08396FC4->unknown_0[gUnknown_08396FC4->unknown_6D8]->data5 = 0; + gUnknown_08396FC4->unknown_0[gUnknown_08396FC4->unknown_6D8]->invisible = TRUE; + } + } + return TRUE; +} + +void sub_807E974(void) +{ + u16 i; + + for (i = 0; i < gUnknown_08396FC4->unknown_6DA; i++) + { + if (gUnknown_08396FC4->unknown_0[i] != NULL) + DestroySprite(gUnknown_08396FC4->unknown_0[i]); + } + gUnknown_08396FC4->unknown_6DA = 0; + FreeSpriteTilesByTag(0x1206); +} + +void sub_807E9C8(void) +{ + gUnknown_08396FC4->unknown_6CC = 0; + gUnknown_08396FC4->unknown_6D2 = 0; + gUnknown_08396FC4->unknown_6C1 = 3; + gUnknown_08396FC4->unknown_6C2 = 20; + gUnknown_08396FC4->unknown_6E5 = 16; + gUnknown_08396FC4->unknown_6E0 = 0; +} + +void snowflakes_progress2(void); +void sub_807ED48(struct Sprite *); + +void sub_807EA18(void) +{ + sub_807E9C8(); + while (gUnknown_08396FC4->unknown_6D2 == 0) + { + u16 i; + + snowflakes_progress2(); + for (i = 0; i < gUnknown_08396FC4->unknown_6E4; i++) + { + sub_807ED48(gUnknown_08396FC4->unknown_60[i]); + } + } +} + +u8 snowflakes_progress(void); + +void snowflakes_progress2(void) +{ + if (gUnknown_08396FC4->unknown_6CC == 0 && snowflakes_progress() == 0) + { + gUnknown_08396FC4->unknown_6D2 = 1; + gUnknown_08396FC4->unknown_6CC++; + } +} -- cgit v1.2.3 From d40d0ee267a4ac1401ff6b4fe600159a21bd2cb3 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Fri, 22 Sep 2017 17:04:38 -0500 Subject: decompile sub_807EAC0 - sub_807F3F8 --- src/field_weather.c | 357 +++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 352 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/field_weather.c b/src/field_weather.c index 0027f2bc1..08eee454c 100644 --- a/src/field_weather.c +++ b/src/field_weather.c @@ -3,6 +3,7 @@ #include "field_map_obj.h" #include "field_weather.h" #include "palette.h" +#include "rng.h" #include "script.h" #include "songs.h" #include "sound.h" @@ -64,10 +65,16 @@ struct Weather u8 unknown_6DE; u8 filler_6DF[1]; u16 unknown_6E0; - u8 filler_6E2[2]; + u16 unknown_6E2; u8 unknown_6E4; u8 unknown_6E5; - u8 filler_6E6[0xE]; + u16 unknown_6E6; + u16 unknown_6E8; + u8 unknown_6EA; + u8 unknown_6EB; + u8 unknown_6EC; + u8 unknown_6ED; + u8 filler_6EE[0xF4-0xEE]; u8 unknown_6F4[6]; u8 unknown_6FA; u8 unknown_6FB; @@ -111,7 +118,11 @@ extern u8 (*gUnknown_08396FC8[][4])(void); extern u8 (*gUnknown_083970B8[])(void); extern const u8 *gUnknown_030006DC; extern const u8 gUnknown_083970C8[]; + +// This is a pointer to gWeather. All code sub_807DE78 and below uses this pointer, +// while everything above accesses gWeather directly. extern struct Weather *const gUnknown_08396FC4; + extern const struct SpriteSheet gUnknown_0839A9D4; extern const struct SpriteTemplate gSpriteTemplate_839A9F0; extern const u16 gUnknown_08397108[]; @@ -119,6 +130,7 @@ extern const u16 gUnknown_08397108[]; extern const struct Coords16 gUnknown_0839A9C8[]; extern const struct SpriteSheet gUnknown_0839AACC; extern const struct SpriteTemplate gSpriteTemplate_839AAA4; +extern const struct SpriteTemplate gSpriteTemplate_839AB04; const u8 DroughtPaletteData_0[] = INCBIN_U8("graphics/weather/drought0.bin.lz"); const u8 DroughtPaletteData_1[] = INCBIN_U8("graphics/weather/drought1.bin.lz"); @@ -1402,7 +1414,7 @@ void sub_807E400(void) gUnknown_08396FC4->unknown_6CC++; break; case 2: - if (sub_807E8E8() == 0) + if (sub_807E8E8() == FALSE) { gUnknown_08396FC4->unknown_6D2 = 1; gUnknown_08396FC4->unknown_6CC++; @@ -1432,7 +1444,7 @@ bool8 sub_807E460(void) } // fall through case 1: - if (sub_807E8E8() == 0) + if (sub_807E8E8() == FALSE) { sub_807E974(); gUnknown_08396FC4->unknown_6CE++; @@ -1671,9 +1683,344 @@ u8 snowflakes_progress(void); void snowflakes_progress2(void) { - if (gUnknown_08396FC4->unknown_6CC == 0 && snowflakes_progress() == 0) + if (gUnknown_08396FC4->unknown_6CC == 0 && snowflakes_progress() == FALSE) + { + gUnknown_08396FC4->unknown_6D2 = 1; + gUnknown_08396FC4->unknown_6CC++; + } +} + +bool8 sub_807EAC0(void) +{ + switch (gUnknown_08396FC4->unknown_6CE) + { + case 0: + gUnknown_08396FC4->unknown_6E5 = 0; + gUnknown_08396FC4->unknown_6E0 = 0; + gUnknown_08396FC4->unknown_6CE++; + // fall through + case 1: + if (snowflakes_progress() == FALSE) + { + gUnknown_08396FC4->unknown_6CE++; + return FALSE; + } + return TRUE; + } + return FALSE; +} + +bool8 snowflake_add(void); +bool8 snowflake_remove(void); + +bool8 snowflakes_progress(void) +{ + if (gUnknown_08396FC4->unknown_6E4 == gUnknown_08396FC4->unknown_6E5) + return FALSE; + + gUnknown_08396FC4->unknown_6E0++; + if (gUnknown_08396FC4->unknown_6E0 > 36) + { + gUnknown_08396FC4->unknown_6E0 = 0; + if (gUnknown_08396FC4->unknown_6E4 < gUnknown_08396FC4->unknown_6E5) + snowflake_add(); + else + snowflake_remove(); + } + return (gUnknown_08396FC4->unknown_6E4 != gUnknown_08396FC4->unknown_6E5); +} + +void sub_807EC40(struct Sprite *); + +bool8 snowflake_add(void) +{ + u8 spriteId = CreateSpriteAtEnd(&gSpriteTemplate_839AB04, 0, 0, 78); + + if (spriteId == 64) + return FALSE; + gSprites[spriteId].data4 = gUnknown_08396FC4->unknown_6E4; + sub_807EC40(&gSprites[spriteId]); + gSprites[spriteId].coordOffsetEnabled = TRUE; + gUnknown_08396FC4->unknown_60[gUnknown_08396FC4->unknown_6E4++] = &gSprites[spriteId]; + return TRUE; +} + +bool8 snowflake_remove(void) +{ + if (gUnknown_08396FC4->unknown_6E4 != 0) + { + DestroySprite(gUnknown_08396FC4->unknown_60[--gUnknown_08396FC4->unknown_6E4]); + return TRUE; + } + return FALSE; +} + +void sub_807EC40(struct Sprite *sprite) +{ + u16 r4 = ((sprite->data4 * 5) & 7) * 30 + (Random() % 30); + u16 r6; + + sprite->pos1.y = -3 - (gSpriteCoordOffsetY + sprite->centerToCornerVecY); + sprite->pos1.x = r4 - (gSpriteCoordOffsetX + sprite->centerToCornerVecX); + sprite->data0 = sprite->pos1.y * 128; + sprite->pos2.x = 0; + r6 = Random(); + sprite->data1 = (r6 & 3) * 5 + 64; + sprite->data7 = (r6 & 3) * 5 + 64; + StartSpriteAnim(sprite, (r6 & 1) ? 0 : 1); + sprite->data3 = 0; + sprite->data2 = ((r6 & 3) == 0) ? 2 : 1; + sprite->data6 = (r6 & 0x1F) + 210; + sprite->data5 = 0; +} + +void sub_807ECEC(struct Sprite *sprite) +{ + if (gUnknown_08396FC4->unknown_6E2 > 18) + { + sprite->invisible = FALSE; + sprite->callback = sub_807ED48; + sprite->pos1.y = 0xFA - (gSpriteCoordOffsetY + sprite->centerToCornerVecY); + sprite->data0 = sprite->pos1.y * 128; + gUnknown_08396FC4->unknown_6E2 = 0; + } +} + +void sub_807ED48(struct Sprite *sprite) +{ + s16 r3; + s16 r2; + + sprite->data0 += sprite->data1; + sprite->pos1.y = sprite->data0 >> 7; + sprite->data3 = (sprite->data3 + sprite->data2) & 0xFF; + sprite->pos2.x = gSineTable[sprite->data3] / 64; + + r3 = (sprite->pos1.x + sprite->centerToCornerVecX + gSpriteCoordOffsetX) & 0x1FF; + if (r3 & 0x100) + r3 = -0x100 | r3; // hmm... what is this? + if (r3 < -3) + sprite->pos1.x = 242 - (gSpriteCoordOffsetX + sprite->centerToCornerVecX); + else if (r3 > 242) + sprite->pos1.x = -3 - (gSpriteCoordOffsetX + sprite->centerToCornerVecX); + + r2 = (sprite->pos1.y + sprite->centerToCornerVecY + gSpriteCoordOffsetY) & 0xFF; + if (r2 > 163 && r2 < 171) + { + sprite->pos1.y = 250 - (gSpriteCoordOffsetY + sprite->centerToCornerVecY); + sprite->data0 = sprite->pos1.y * 128; + sprite->data5 = 0; + sprite->data6 = 220; + } + else if (r2 > 242 && r2 < 250) + { + sprite->pos1.y = 163; + sprite->data0 = sprite->pos1.y * 128; + sprite->data5 = 0; + sprite->data6 = 220; + sprite->invisible = TRUE; + sprite->callback = sub_807ECEC; + } + + sprite->data5++; + if (sprite->data5 == sprite->data6) + { + sub_807EC40(sprite); + sprite->pos1.y = 250; + sprite->invisible = TRUE; + sprite->callback = sub_807ECEC; + } +} + +void sub_807EE80(void) +{ + gUnknown_08396FC4->unknown_6CC = 0; + gUnknown_08396FC4->unknown_6D2 = 0; + gUnknown_08396FC4->unknown_6D6 = 0; + gUnknown_08396FC4->unknown_6DB = 4; + gUnknown_08396FC4->unknown_6DC = 0; + gUnknown_08396FC4->unknown_6D9 = 16; + gUnknown_08396FC4->unknown_6C1 = 3; + gUnknown_08396FC4->unknown_6C2 = 20; + gUnknown_08396FC4->unknown_6D2 = 0; // duplicate assignment + gUnknown_08396FC4->unknown_6ED = 0; + sub_807DD5C(0x51); +} + +void sub_807EFC0(void); + +void sub_807EEF4(void) +{ + sub_807EE80(); + while (gUnknown_08396FC4->unknown_6D2 == 0) + sub_807EFC0(); +} + +void sub_807EF24(void) +{ + gUnknown_08396FC4->unknown_6CC = 0; + gUnknown_08396FC4->unknown_6D2 = 0; + gUnknown_08396FC4->unknown_6D6 = 0; + gUnknown_08396FC4->unknown_6DB = 4; + gUnknown_08396FC4->unknown_6DC = 1; + gUnknown_08396FC4->unknown_6D9 = 24; + gUnknown_08396FC4->unknown_6C1 = 3; + gUnknown_08396FC4->unknown_6C2 = 20; + gUnknown_08396FC4->unknown_6D2 = 0; // duplicate assignment + sub_807DD5C(0x53); +} + +void sub_807EF90(void) +{ + sub_807EF24(); + while (gUnknown_08396FC4->unknown_6D2 == 0) + sub_807EFC0(); +} + +void sub_807F434(void); +void sub_807F3F8(u16); + +void sub_807EFC0(void) +{ + sub_807F434(); + switch (gUnknown_08396FC4->unknown_6CC) { + case 0: + sub_807E7A4(); + gUnknown_08396FC4->unknown_6CC++; + break; + case 1: + if (sub_807E7B4()) + break; + gUnknown_08396FC4->unknown_6CC++; + break; + case 2: + if (sub_807E8E8()) + break; gUnknown_08396FC4->unknown_6D2 = 1; gUnknown_08396FC4->unknown_6CC++; + break; + case 3: + if (gUnknown_08396FC4->unknown_6C6 == 0) + break; + gUnknown_08396FC4->unknown_6CC = 6; + break; + case 4: + gUnknown_08396FC4->unknown_6EA = 1; + gUnknown_08396FC4->unknown_6E6 = (Random() % 360) + 360; + gUnknown_08396FC4->unknown_6CC++; + // fall through + case 5: + if (--gUnknown_08396FC4->unknown_6E6 != 0) + break; + gUnknown_08396FC4->unknown_6CC++; + break; + case 6: + gUnknown_08396FC4->unknown_6EA = 1; + gUnknown_08396FC4->unknown_6EB = Random() % 2; + gUnknown_08396FC4->unknown_6CC++; + break; + case 7: + gUnknown_08396FC4->unknown_6EC = (Random() & 1) + 1; + gUnknown_08396FC4->unknown_6CC++; + // fall through + case 8: + sub_807D5BC(19); + if (gUnknown_08396FC4->unknown_6EB == 0 && gUnknown_08396FC4->unknown_6EC == 1) + sub_807F3F8(20); + gUnknown_08396FC4->unknown_6E6 = (Random() % 3) + 6; + gUnknown_08396FC4->unknown_6CC++; + break; + case 9: + if (--gUnknown_08396FC4->unknown_6E6 != 0) + break; + sub_807D5BC(3); + gUnknown_08396FC4->unknown_6EA = 1; + if (--gUnknown_08396FC4->unknown_6EC != 0) + { + gUnknown_08396FC4->unknown_6E6 = (Random() % 16) + 60; + gUnknown_08396FC4->unknown_6CC = 10; + } + else if (gUnknown_08396FC4->unknown_6EB == 0) + { + gUnknown_08396FC4->unknown_6CC = 4; + } + else + { + gUnknown_08396FC4->unknown_6CC = 11; + } + break; + case 10: + if (--gUnknown_08396FC4->unknown_6E6 != 0) + break; + gUnknown_08396FC4->unknown_6CC = 8; + break; + case 11: + gUnknown_08396FC4->unknown_6E6 = (Random() % 16) + 60; + gUnknown_08396FC4->unknown_6CC++; + break; + case 12: + if (--gUnknown_08396FC4->unknown_6E6 != 0) + break; + sub_807F3F8(100); + sub_807D5BC(19); + // Why use "% 16" everywhere else and "& 0xF" here. So dumb. + gUnknown_08396FC4->unknown_6E6 = (Random() & 0xF) + 30; + gUnknown_08396FC4->unknown_6CC++; + break; + case 13: + if (--gUnknown_08396FC4->unknown_6E6 != 0) + break; + sub_807D5F0(19, 3, 5); + gUnknown_08396FC4->unknown_6CC++; + break; + case 14: + if (gUnknown_08396FC4->unknown_6C6 != 3) + break; + gUnknown_08396FC4->unknown_6EA = 1; + gUnknown_08396FC4->unknown_6CC = 4; + break; + } +} + +bool8 sub_807F34C(void) +{ + switch (gUnknown_08396FC4->unknown_6CE) + { + case 0: + gUnknown_08396FC4->unknown_6EA = 0; + gUnknown_08396FC4->unknown_6CE++; + // fall through + case 1: + sub_807EFC0(); + if (gUnknown_08396FC4->unknown_6EA != 0) + { + if (gUnknown_08396FC4->unknown_6D1 == 3 + || gUnknown_08396FC4->unknown_6D1 == 5 + || gUnknown_08396FC4->unknown_6D1 == 13) + return FALSE; + gUnknown_08396FC4->unknown_6D9 = 0; + gUnknown_08396FC4->unknown_6CE++; + } + break; + case 2: + if (sub_807E8E8()) + break; + sub_807E974(); + gUnknown_08396FC4->unknown_6ED = 0; + gUnknown_08396FC4->unknown_6CE++; + return FALSE; + default: + return FALSE; + } + return TRUE; +} + +void sub_807F3F8(u16 a) +{ + if (gUnknown_08396FC4->unknown_6ED == 0) + { + gUnknown_08396FC4->unknown_6E8 = Random() % a; + gUnknown_08396FC4->unknown_6ED = 1; } } -- cgit v1.2.3 From ba06c424c974f18f9c4af85eb0ffe8adc6056941 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Fri, 22 Sep 2017 20:29:41 -0500 Subject: decompile sub_807F434 - sub_807F688 --- src/field_weather.c | 121 +++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 120 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/field_weather.c b/src/field_weather.c index 08eee454c..c4fb4872f 100644 --- a/src/field_weather.c +++ b/src/field_weather.c @@ -74,7 +74,9 @@ struct Weather u8 unknown_6EB; u8 unknown_6EC; u8 unknown_6ED; - u8 filler_6EE[0xF4-0xEE]; + u16 unknown_6EE; + u16 unknown_6F0; + u16 unknown_6F2; u8 unknown_6F4[6]; u8 unknown_6FA; u8 unknown_6FB; @@ -2024,3 +2026,120 @@ void sub_807F3F8(u16 a) gUnknown_08396FC4->unknown_6ED = 1; } } + +void sub_807F434(void) +{ + if (gUnknown_08396FC4->unknown_6ED == 1) + { + if (gUnknown_08396FC4->unknown_6E8 == 0) + { + if (IsSEPlaying()) + return; + if (Random() & 1) + PlaySE(0x57); + else + PlaySE(0x58); + gUnknown_08396FC4->unknown_6ED = 0; + } + else + { + gUnknown_08396FC4->unknown_6E8--; + } + } +} + +void sub_807F49C(void) +{ + gUnknown_08396FC4->unknown_6CC = 0; + gUnknown_08396FC4->unknown_6D2 = 0; + gUnknown_08396FC4->unknown_6C1 = 0; + gUnknown_08396FC4->unknown_6C2 = 20; + if (gUnknown_08396FC4->unknown_6FB == 0) + { + gUnknown_08396FC4->unknown_6F0 = 0; + gUnknown_08396FC4->unknown_6F2 = 0; + gUnknown_08396FC4->unknown_6EE = 0; + sub_807DB64(0, 16); + } +} + +void sub_807F52C(void); + +void sub_807F4FC(void) +{ + sub_807F49C(); + while (gUnknown_08396FC4->unknown_6D2 == 0) + sub_807F52C(); +} + +void sub_807F6E8(void); + +void sub_807F52C(void) +{ + gUnknown_08396FC4->unknown_6EE = (gSpriteCoordOffsetX - gUnknown_08396FC4->unknown_6F2) & 0xFF; + if (++gUnknown_08396FC4->unknown_6F0 > 3) + { + gUnknown_08396FC4->unknown_6F0 = 0; + gUnknown_08396FC4->unknown_6F2++; + } + switch (gUnknown_08396FC4->unknown_6CC) + { + case 0: + sub_807F6E8(); + if (gUnknown_08396FC4->unknown_6D0 == 6) + sub_807DBA4(12, 8, 3); + else + sub_807DBA4(4, 16, 0); + gUnknown_08396FC4->unknown_6CC++; + break; + case 1: + if (sub_807DBE8()) + { + gUnknown_08396FC4->unknown_6D2 = 1; + gUnknown_08396FC4->unknown_6CC++; + } + break; + } +} + +void sub_807F7A4(void); + +bool8 sub_807F5EC(void) +{ + gUnknown_08396FC4->unknown_6EE = (gSpriteCoordOffsetX - gUnknown_08396FC4->unknown_6F2) & 0xFF; + if (++gUnknown_08396FC4->unknown_6F0 > 3) + { + gUnknown_08396FC4->unknown_6F0 = 0; + gUnknown_08396FC4->unknown_6F2++; + } + switch (gUnknown_08396FC4->unknown_6CE) + { + case 0: + sub_807DBA4(0, 16, 3); + gUnknown_08396FC4->unknown_6CE++; + break; + case 1: + if (!sub_807DBE8()) + break; + gUnknown_08396FC4->unknown_6CE++; + break; + case 2: + sub_807F7A4(); + gUnknown_08396FC4->unknown_6CE++; + break; + default: + return FALSE; + } + return TRUE; +} + +void sub_807F688(struct Sprite *sprite) +{ + sprite->pos2.y = (u8)gSpriteCoordOffsetY; + sprite->pos1.x = gUnknown_08396FC4->unknown_6EE + 32 + sprite->data0 * 64; + if (sprite->pos1.x > 0x10F) + { + sprite->pos1.x = 480 + gUnknown_08396FC4->unknown_6EE - (4 - sprite->data0) * 64; + sprite->pos1.x &= 0x1FF; + } +} -- cgit v1.2.3 From fcd62bf39372bbb26e21f3dfb67ccf1782954834 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Sun, 15 Oct 2017 14:36:53 -0700 Subject: Start decomp on rest of secret_base --- src/field/secret_base.c | 684 +++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 671 insertions(+), 13 deletions(-) (limited to 'src') diff --git a/src/field/secret_base.c b/src/field/secret_base.c index f221d7f16..d60938d1b 100644 --- a/src/field/secret_base.c +++ b/src/field/secret_base.c @@ -11,17 +11,31 @@ #include "map_constants.h" #include "map_name_popup.h" #include "menu.h" +#include "menu_helpers.h" #include "metatile_behavior.h" #include "palette.h" #include "pokemon.h" #include "overworld.h" #include "script.h" +#include "sound.h" #include "string_util.h" #include "strings.h" #include "task.h" #include "text.h" #include "vars.h" +extern void sub_80BCBF8(u8 taskId); +extern void sub_80BCC54(u8 taskId); +extern void sub_80BC824(u8 taskId); +extern void sub_80BC7D8(u8 taskId); +static void sub_80BCAEC(u8 taskId); +static void sub_80BC980(u8 taskId); +static void sub_80BC9E4(u8 taskId); +static u8 sub_80BC948(u8 a); +static void Task_SecretBasePC_Registry(u8 taskId); + +extern struct YesNoFuncTable gUnknown_083D13E4; +extern struct MenuAction gUnknown_083D13D4[]; extern u8 gUnknown_020387DC; extern u16 gSpecialVar_0x8004; extern u16 gSpecialVar_0x8005; @@ -36,14 +50,26 @@ extern const struct extern const u8 gUnknown_083D1374[4 * 16]; extern void *gUnknown_0300485C; extern const u8 gUnknown_083D13EC[12]; +extern u8 gUnknown_0815F399[]; +extern u8 gUnknown_0815F49A[]; extern u8 gUnknown_081A2E14[]; +extern u8 UnknownString_81A1BB2[]; +extern u8 UnknownString_81A1F67[]; +extern u8 UnknownString_81A2254[]; +extern u8 UnknownString_81A25C3[]; +extern u8 UnknownString_81A2925[]; +extern u8 UnknownString_81A1D74[]; +extern u8 UnknownString_81A20C9[]; +extern u8 UnknownString_81A2439[]; +extern u8 UnknownString_81A2B2A[]; +extern u8 UnknownString_81A2754[]; void sub_80BB4AC(struct SecretBaseRecord *record) // 080bb4ac { u16 i; u16 j; - record->sbr_field_0 = 0; + record->secretBaseId = 0; for (i=0; i<7; i++) record->sbr_field_2[i] = 0xff; for (i=0; i<4; i++) @@ -93,7 +119,7 @@ void sub_80BB5E4(void) // 80bb5e4 u16 idx; gScriptResult = 0; for (idx=0; idx<20; idx++) { - if (gUnknown_020387DC != gSaveBlock1.secretBases[idx].sbr_field_0) + if (gUnknown_020387DC != gSaveBlock1.secretBases[idx].secretBaseId) continue; gScriptResult = 1; VarSet(VAR_0x4054, idx); @@ -103,7 +129,7 @@ void sub_80BB5E4(void) // 80bb5e4 void sub_80BB63C(void) // 80bb63c { - if (gSaveBlock1.secretBases[0].sbr_field_0) + if (gSaveBlock1.secretBases[0].secretBaseId) gScriptResult = 1; else gScriptResult = 0; @@ -196,7 +222,7 @@ void sub_80BB8CC(void) { u8 nameLength; u16 idx; - gSaveBlock1.secretBases[0].sbr_field_0 = gUnknown_020387DC; + gSaveBlock1.secretBases[0].secretBaseId = gUnknown_020387DC; for (idx=0; idx<4; idx++) { gSaveBlock1.secretBases[0].trainerId[idx] = gSaveBlock2.playerTrainerId[idx]; } @@ -215,7 +241,7 @@ void sub_80BB970(struct MapEvents *events) for (bgevidx=0; bgevidxbgEventCount; bgevidx++) { if (events->bgEvents[bgevidx].kind == 8) { for (jdx=0; jdx<20; jdx++) { - if (gSaveBlock1.secretBases[jdx].sbr_field_0 == events->bgEvents[bgevidx].bgUnion.secretBaseId) { + if (gSaveBlock1.secretBases[jdx].secretBaseId == events->bgEvents[bgevidx].bgUnion.secretBaseId) { tile_id = MapGridGetMetatileIdAt(events->bgEvents[bgevidx].x + 7, events->bgEvents[bgevidx].y + 7); for (idx=0; idx<7; idx++) { if (gUnknown_083D1358[idx].unk_083D1358_0 == tile_id) { @@ -811,7 +837,7 @@ void sub_80BC0F8(void) { } void sub_80BC114(void) { - if (gSaveBlock1.secretBases[0].sbr_field_0 != gUnknown_020387DC) + if (gSaveBlock1.secretBases[0].secretBaseId != gUnknown_020387DC) gScriptResult = 1; else gScriptResult = 0; @@ -821,7 +847,7 @@ u8 sub_80BC14C(u8 sbid) { s16 idx; for (idx=0; idx<20; idx++) { - if (gSaveBlock1.secretBases[idx].sbr_field_0 == sbid) + if (gSaveBlock1.secretBases[idx].secretBaseId == sbid) return idx; } return 0; @@ -844,7 +870,7 @@ u8 *sub_80BC190(u8 *dest, u8 arg1) { // 80bc190 } u8 *GetSecretBaseMapName(u8 *dest) { - gUnknown_020387DC = gSaveBlock1.secretBases[VarGet(VAR_0x4054)].sbr_field_0; + gUnknown_020387DC = gSaveBlock1.secretBases[VarGet(VAR_0x4054)].secretBaseId; return sub_80BC190(dest, VarGet(VAR_0x4054)); } @@ -856,10 +882,10 @@ void sub_80BC224(void) { *var3 = EOS; } -u8 sub_80BC268(u8 foo) { // 80bc268 - if (gSaveBlock1.secretBases[foo].sbr_field_1_6) - return 1; - return 0; +bool8 sub_80BC268(u8 i) { // 80bc268 + if (gSaveBlock1.secretBases[i].sbr_field_1_6) + return TRUE; + return FALSE; } u8 sub_80BC298(struct Pokemon *mon) { // 80bc298 @@ -1070,6 +1096,638 @@ void sub_80BC440(void) void SecretBasePC_PackUp(void) { - IncrementGameStat(20); + IncrementGameStat(GAME_STAT_MOVED_SECRET_BASE); sub_80BC440(); } + +void sub_80BC474(void) +{ + u16 eventId; + struct MapEvents *mapEvents = gMapHeader.events; + for (eventId = 0; eventId < mapEvents->bgEventCount; eventId++) + { + if (mapEvents->bgEvents[eventId].kind == 8 + && gSaveBlock1.secretBases[0].secretBaseId == mapEvents->bgEvents[eventId].bgUnion.secretBaseId) + { + u16 i; + s16 tileId = MapGridGetMetatileIdAt(mapEvents->bgEvents[eventId].x + 7, mapEvents->bgEvents[eventId].y + 7); + + for (i = 0; i < 7; i++) + { + if (gUnknown_083D1358[i].unk_083D1358_1 == tileId) + { + MapGridSetMetatileIdAt( + mapEvents->bgEvents[eventId].x + 7, + mapEvents->bgEvents[eventId].y + 7, + gUnknown_083D1358[i].unk_083D1358_0 | 0xc00); + break; + } + } + + DrawWholeMapView(); + break; + } + } +} + +void sub_80BC50C(void) +{ + u16 backupValue; + sub_80BC474(); + IncrementGameStat(GAME_STAT_MOVED_SECRET_BASE); + + backupValue = gSaveBlock1.secretBases[0].sbr_field_e; + ResetSecretBase(0); + gSaveBlock1.secretBases[0].sbr_field_e = backupValue; +} + +u8 sub_80BC538(void) +{ + s16 secretBaseIndex; + u8 retVal = 0; + + for (secretBaseIndex = 1; secretBaseIndex < 20; secretBaseIndex++) + { + if (sub_80BC268(secretBaseIndex) == TRUE) + { + retVal++; + } + } + + return retVal; +} + +void sub_80BC56C(void) +{ + u8 secretBaseIndex = sub_80BC14C(gUnknown_020387DC); + if (sub_80BC268(secretBaseIndex) == TRUE) + { + gScriptResult = 1; + } + else if (sub_80BC538() > 9) + { + gScriptResult = 2; + } + else + { + gScriptResult = 0; + } +} + +void sub_80BC5BC(void) +{ + gSaveBlock1.secretBases[sub_80BC14C(gUnknown_020387DC)].sbr_field_1_6 ^= 1; + FlagSet(0x10C); +} + +void SecretBasePC_Decoration(void) +{ + CreateTask(Task_SecretBasePC_Decoration, 0); +} + +void SecretBasePC_Registry(void) +{ + CreateTask(Task_SecretBasePC_Registry, 0); +} + +void Task_SecretBasePC_Registry(u8 taskId) +{ + s16 *taskData; + + ScriptContext2_Enable(); + sub_80F944C(); + LoadScrollIndicatorPalette(); + + taskData = &gTasks[taskId].data[0]; + taskData[0] = sub_80BC538(); + if (taskData[0] != 0) + { + if (taskData[0] > 7) { + taskData[3] = 7; + } + else + { + taskData[3] = taskData[0]; + } + + taskData[1] = 0; + taskData[2] = 0; + + MenuZeroFillWindowRect(0, 0, 29, 19); + sub_80BC7D8(taskId); + + gTasks[taskId].func = sub_80BC824; + } + else + { + DisplayItemMessageOnField(taskId, gSecretBaseText_NoRegistry, sub_80BCC54, 0); + } +} + +#ifdef NONMATCHING +void sub_80BC6B0(u8 taskId) +{ + s16 *taskData = gTasks[taskId].data; + u8 count = 0; + u8 var1 = 0; + u8 i = 1; + + if (var1 == taskData[2]) + { + count = 1; + } + else + { + while (1) + { + if (sub_80BC268(i) == TRUE) + { + count++; + } + + i++; + if (i > 19) + { + break; + } + + if (count == taskData[2]) + { + count = i; + break; + } + } + } + + while (count < 20) + { + if (sub_80BC268(count) == TRUE) + { + sub_80BC190(gStringVar1, count); + MenuFillWindowRectWithBlankTile(18, var1 * 2 + 2, 28, var1 * 2 + 3); + MenuPrint(gStringVar1, 18, var1 * 2 + 2); + + var1++; + if (var1 == 8) + { + break; + } + } + + count++; + } + + if (var1 < 8) + { + MenuFillWindowRectWithBlankTile(18, var1 * 2 + 2, 28, var1 * 2 + 3); + MenuPrint(gUnknownText_Exit, 18, var1 * 2 + 2); + DestroyVerticalScrollIndicator(1); + + if (var1 != 7) + { + MenuFillWindowRectWithBlankTile(18, (((var1 << 25) + 0x4000000)) >> 24, 28, 18); + } + } + else + { + CreateVerticalScrollIndicators(1, 188, 152); + } + + if (taskData[2] == 0) + { + DestroyVerticalScrollIndicator(0); + } + else + { + CreateVerticalScrollIndicators(0, 188, 8); + } +} +#else +__attribute__((naked)) +void sub_80BC6B0(u8 taskId) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r8\n\ + push {r7}\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + lsls r1, r0, 2\n\ + adds r1, r0\n\ + lsls r1, 3\n\ + ldr r0, _080BC6D8 @ =gTasks + 0x8\n\ + adds r1, r0\n\ + mov r8, r1\n\ + movs r4, 0\n\ + movs r6, 0\n\ + movs r5, 0x1\n\ + movs r2, 0x4\n\ + ldrsh r0, [r1, r2]\n\ + cmp r6, r0\n\ + bne _080BC6DC\n\ + movs r4, 0x1\n\ + b _080BC706\n\ + .align 2, 0\n\ +_080BC6D8: .4byte gTasks + 0x8\n\ +_080BC6DC:\n\ + adds r0, r5, 0\n\ + bl sub_80BC268\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0x1\n\ + bne _080BC6F0\n\ + adds r0, r4, 0x1\n\ + lsls r0, 24\n\ + lsrs r4, r0, 24\n\ +_080BC6F0:\n\ + adds r0, r5, 0x1\n\ + lsls r0, 24\n\ + lsrs r5, r0, 24\n\ + cmp r5, 0x13\n\ + bhi _080BC706\n\ + mov r1, r8\n\ + movs r2, 0x4\n\ + ldrsh r0, [r1, r2]\n\ + cmp r4, r0\n\ + bne _080BC6DC\n\ + adds r4, r5, 0\n\ +_080BC706:\n\ + adds r5, r4, 0\n\ + cmp r5, 0x13\n\ + bhi _080BC75A\n\ + ldr r7, _080BC7A0 @ =gStringVar1\n\ +_080BC70E:\n\ + adds r0, r5, 0\n\ + bl sub_80BC268\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0x1\n\ + bne _080BC750\n\ + adds r0, r7, 0\n\ + adds r1, r5, 0\n\ + bl sub_80BC190\n\ + lsls r3, r6, 1\n\ + adds r4, r3, 0x2\n\ + lsls r4, 24\n\ + lsrs r4, 24\n\ + adds r3, 0x3\n\ + lsls r3, 24\n\ + lsrs r3, 24\n\ + movs r0, 0x12\n\ + adds r1, r4, 0\n\ + movs r2, 0x1C\n\ + bl MenuFillWindowRectWithBlankTile\n\ + adds r0, r7, 0\n\ + movs r1, 0x12\n\ + adds r2, r4, 0\n\ + bl MenuPrint\n\ + adds r0, r6, 0x1\n\ + lsls r0, 24\n\ + lsrs r6, r0, 24\n\ + cmp r6, 0x8\n\ + beq _080BC75A\n\ +_080BC750:\n\ + adds r0, r5, 0x1\n\ + lsls r0, 24\n\ + lsrs r5, r0, 24\n\ + cmp r5, 0x13\n\ + bls _080BC70E\n\ +_080BC75A:\n\ + cmp r6, 0x7\n\ + bhi _080BC7A8\n\ + lsls r3, r6, 1\n\ + adds r4, r3, 0x2\n\ + lsls r4, 24\n\ + lsrs r4, 24\n\ + adds r3, 0x3\n\ + lsls r3, 24\n\ + lsrs r3, 24\n\ + movs r0, 0x12\n\ + adds r1, r4, 0\n\ + movs r2, 0x1C\n\ + bl MenuFillWindowRectWithBlankTile\n\ + ldr r0, _080BC7A4 @ =gUnknownText_Exit\n\ + movs r1, 0x12\n\ + adds r2, r4, 0\n\ + bl MenuPrint\n\ + movs r0, 0x1\n\ + bl DestroyVerticalScrollIndicator\n\ + cmp r6, 0x7\n\ + beq _080BC7B2\n\ + lsls r1, r6, 25\n\ + movs r0, 0x80\n\ + lsls r0, 19\n\ + adds r1, r0\n\ + lsrs r1, 24\n\ + movs r0, 0x12\n\ + movs r2, 0x1C\n\ + movs r3, 0x12\n\ + bl MenuFillWindowRectWithBlankTile\n\ + b _080BC7B2\n\ + .align 2, 0\n\ +_080BC7A0: .4byte gStringVar1\n\ +_080BC7A4: .4byte gUnknownText_Exit\n\ +_080BC7A8:\n\ + movs r0, 0x1\n\ + movs r1, 0xBC\n\ + movs r2, 0x98\n\ + bl CreateVerticalScrollIndicators\n\ +_080BC7B2:\n\ + mov r1, r8\n\ + movs r2, 0x4\n\ + ldrsh r0, [r1, r2]\n\ + cmp r0, 0\n\ + bne _080BC7C4\n\ + movs r0, 0\n\ + bl DestroyVerticalScrollIndicator\n\ + b _080BC7CE\n\ +_080BC7C4:\n\ + movs r0, 0\n\ + movs r1, 0xBC\n\ + movs r2, 0x8\n\ + bl CreateVerticalScrollIndicators\n\ +_080BC7CE:\n\ + pop {r3}\n\ + mov r8, r3\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .syntax divided\n"); +} +#endif + +void sub_80BC7D8(u8 taskId) +{ + u16 *taskData = &gTasks[taskId].data[0]; + MenuDrawTextWindow(17, 0, 29, 19); + InitMenu(0, 18, 2, taskData[3] + 1, taskData[1], 11); + sub_80BC6B0(taskId); +} + +void sub_80BC824(u8 taskId) +{ + s16 *taskData = gTasks[taskId].data; + + if (gMain.newAndRepeatedKeys & DPAD_UP) + { + if (taskData[1]) + { + PlaySE(5); + taskData[1] = MoveMenuCursor(-1); + } + else if (taskData[2]) + { + PlaySE(5); + taskData[2]--; + sub_80BC6B0(taskId); + } + else + { + return; + } + } + else if (gMain.newAndRepeatedKeys & DPAD_DOWN) + { + if (taskData[1] == taskData[3]) + { + if (taskData[2] + taskData[1] != taskData[0]) + { + PlaySE(5); + taskData[2]++; + sub_80BC6B0(taskId); + } + } + else + { + PlaySE(5); + taskData[1] = MoveMenuCursor(1); + } + } + else if (gMain.newKeys & A_BUTTON) + { + PlaySE(5); + if (taskData[1] + taskData[2] == taskData[0]) + { + HandleDestroyMenuCursors(); + MenuZeroFillWindowRect(0, 0, 29, 19); + sub_80BCC54(taskId); + } + else + { + HandleDestroyMenuCursors(); + taskData[4] = sub_80BC948(taskData[1] + taskData[2]); + sub_80BC980(taskId); + } + } + else if (gMain.newKeys & B_BUTTON) + { + PlaySE(5); + HandleDestroyMenuCursors(); + MenuZeroFillWindowRect(0, 0, 29, 19); + sub_80BCC54(taskId); + } +} + +u8 sub_80BC948(u8 a) +{ + u8 secretBaseIndex; + u8 count = 0; + + for (secretBaseIndex = 1; secretBaseIndex < 20; secretBaseIndex++) + { + if (sub_80BC268(secretBaseIndex) == TRUE) + { + if (a == count) + { + return secretBaseIndex; + } + else + { + count++; + } + } + } + + return 0; +} + +void sub_80BC980(u8 taskId) +{ + PauseVerticalScrollIndicator(0); + PauseVerticalScrollIndicator(1); + MenuDrawTextWindow(1, 0, 12, 5); + PrintMenuItems(2, 1, 2, gUnknown_083D13D4); + InitMenu(0, 2, 1, 2, 0, 10); + gTasks[taskId].func = sub_80BC9E4; +} + +void sub_80BC9E4(u8 taskId) +{ + if (gMain.newAndRepeatedKeys & DPAD_UP) + { + if (GetMenuCursorPos()) + { + PlaySE(5); + MoveMenuCursor(-1); + } + } + else if (gMain.newAndRepeatedKeys & DPAD_DOWN) + { + if (GetMenuCursorPos() != 1) + { + PlaySE(5); + MoveMenuCursor(1); + } + } + else if (gMain.newKeys & A_BUTTON) + { + PlaySE(5); + gUnknown_083D13D4[GetMenuCursorPos()].func(taskId); + } + else if (gMain.newKeys & B_BUTTON) + { + PlaySE(5); + sub_80BCBF8(taskId); + } +} + +void sub_80BCA84(u8 taskId) +{ + s16 *taskData = gTasks[taskId].data; + + DestroyVerticalScrollIndicator(0); + DestroyVerticalScrollIndicator(1); + HandleDestroyMenuCursors(); + MenuZeroFillWindowRect(0, 0, 29, 19); + + sub_80BC190(gStringVar1, taskData[4]); + StringExpandPlaceholders(gStringVar4, gOtherText_OkayToDeleteFromRegistry); + DisplayItemMessageOnField(taskId, gStringVar4, sub_80BCAEC, 0); +} + +void sub_80BCAEC(u8 taskId) +{ + DisplayYesNoMenu(20, 8, 1); + DoYesNoFuncWithChoice(taskId, &gUnknown_083D13E4); +} + +void sub_80BCB10(u8 taskId) +{ + s16 *taskData = gTasks[taskId].data; + + MenuZeroFillWindowRect(0, 0, 29, 19); + + gSaveBlock1.secretBases[taskData[4]].sbr_field_1_6 = 0; + taskData[0]--; + + if (taskData[2] > 0) + { + taskData[2]--; + } + + if (taskData[0] < 8) + { + taskData[3]--; + } + + sub_80BC7D8(taskId); + gTasks[taskId].func = sub_80BC824; +} + +void sub_80BCB90(u8 taskId) +{ + MenuZeroFillWindowRect(20, 8, 26, 13); + DisplayItemMessageOnField(taskId, gOtherText_RegisteredDataDeleted, sub_80BCB10, 0); +} + +void sub_80BCBC0(u8 taskId) +{ + MenuZeroFillWindowRect(0, 0, 29, 19); + + sub_80BC7D8(taskId); + gTasks[taskId].func = sub_80BC824; +} + +void sub_80BCBF8(u8 taskId) +{ + s16 *taskData = gTasks[taskId].data; + + InitMenu(0, 18, 2, taskData[3] + 1, taskData[1], 11); + MenuZeroFillWindowRect(1, 0, 12, 5); + StartVerticalScrollIndicators(0); + StartVerticalScrollIndicators(1); + + gTasks[taskId].func = sub_80BC824; +} + +void sub_80BCC54(u8 taskId) +{ + u16 curBaseIndex = VarGet(VAR_0x4054); + + BuyMenuFreeMemory(); + DestroyVerticalScrollIndicator(0); + DestroyVerticalScrollIndicator(1); + + if (curBaseIndex == 0) + { + ScriptContext1_SetupScript(gUnknown_0815F399); + } + else + { + ScriptContext1_SetupScript(gUnknown_0815F49A); + } + + DestroyTask(taskId); +} + +u8 sub_80BCCA4(u8 secretBaseIndex) +{ + return (gSaveBlock1.secretBases[secretBaseIndex].sbr_field_2[7] % 5) + + gSaveBlock1.secretBases[secretBaseIndex].gender * 5; +} + +u8 *sub_80BCCE8(void) +{ + u8 var1 = sub_80BCCA4(VarGet(VAR_0x4054)); + + if (var1 == 0) + { + return UnknownString_81A1BB2; + } + else if (var1 == 1) + { + return UnknownString_81A1F67; + } + else if (var1 == 2) + { + return UnknownString_81A2254; + } + else if (var1 == 3) + { + return UnknownString_81A25C3; + } + else if (var1 == 4) + { + return UnknownString_81A2925; + } + else if (var1 == 5) + { + return UnknownString_81A1D74; + } + else if (var1 == 6) + { + return UnknownString_81A20C9; + } + else if (var1 == 7) + { + return UnknownString_81A2439; + } + else if (var1 == 8) + { + return UnknownString_81A2754; + } + else + { + return UnknownString_81A2B2A; + } +} -- cgit v1.2.3 From b29c65b176bc7441ac38002e2ea9e38f8e4e9ce6 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Sun, 15 Oct 2017 19:25:32 -0700 Subject: Continue decomp of secret_base --- src/field/secret_base.c | 195 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 195 insertions(+) (limited to 'src') diff --git a/src/field/secret_base.c b/src/field/secret_base.c index d60938d1b..339b8a104 100644 --- a/src/field/secret_base.c +++ b/src/field/secret_base.c @@ -3,8 +3,10 @@ #include "decoration.h" #include "event_data.h" #include "field_camera.h" +#include "field_effect.h" #include "field_fadetransition.h" #include "field_player_avatar.h" +#include "field_specials.h" #include "field_weather.h" #include "fieldmap.h" #include "main.h" @@ -18,12 +20,18 @@ #include "overworld.h" #include "script.h" #include "sound.h" +#include "species.h" #include "string_util.h" #include "strings.h" #include "task.h" #include "text.h" #include "vars.h" + +extern void DoDecorationSoundEffect(s16 metatileId); +extern void sub_80C6A54(s16 x, s16 y); +extern void sub_80C68A4(s16 metatileId, s16 x, s16 y); +extern void DoYellowCave4Sparkle(void); extern void sub_80BCBF8(u8 taskId); extern void sub_80BCC54(u8 taskId); extern void sub_80BC824(u8 taskId); @@ -1731,3 +1739,190 @@ u8 *sub_80BCCE8(void) return UnknownString_81A2B2A; } } + +// Debugging function to test secret base battles. +void unref_sub_80BCD7C(u8 secretBaseIndex) +{ + u16 i; + for (i = 0; i == 0; i++) + { + gSaveBlock1.secretBases[secretBaseIndex].partyPersonality[i] = i + 1; + gSaveBlock1.secretBases[secretBaseIndex].partyMoves[i * 4] = i + 1; + gSaveBlock1.secretBases[secretBaseIndex].partySpecies[i] = SPECIES_TREECKO; + gSaveBlock1.secretBases[secretBaseIndex].partyHeldItems[i] = i + 1; + gSaveBlock1.secretBases[secretBaseIndex].partyLevels[i] = i + 5; + gSaveBlock1.secretBases[secretBaseIndex].partyEVs[i] = i * 5; + } +} + +void sub_80BCE1C(void) +{ + u16 curBaseIndex = VarGet(VAR_0x4054); + sub_810FB10(1); + + CreateSecretBaseEnemyParty(&gSaveBlock1.secretBases[curBaseIndex]); +} + +void sub_80BCE4C() +{ + gSaveBlock1.secretBases[VarGet(VAR_0x4054)].sbr_field_1_5 = gScriptResult; +} + +void sub_80BCE90() +{ + u16 curBaseIndex = VarGet(VAR_0x4054); + + if (!FlagGet(0x8C2)) + { + u8 i; + + for (i = 0; i < 20; i++) + { + gSaveBlock1.secretBases[i].sbr_field_1_5 = 0; + } + + FlagSet(0x8C2); + } + + gSpecialVar_0x8004 = sub_80BCCA4(curBaseIndex); + gScriptResult = gSaveBlock1.secretBases[curBaseIndex].sbr_field_1_5; +} + +void sub_80BCF1C(u8 taskId) +{ + s16 x, y; + u32 behavior; + s16 *taskData = gTasks[taskId].data; + + switch (taskData[1]) + { + case 0: + PlayerGetDestCoords(&taskData[2], &taskData[3]); + taskData[1] = 1; + break; + case 1: + PlayerGetDestCoords(&x, &y); + if (x != taskData[2] || y != taskData[3]) + { + taskData[2] = x; + taskData[3] = y; + + behavior = MapGridGetMetatileBehaviorAt(x, y); + if (sub_8057350(behavior) == TRUE) + { + DoYellowCave4Sparkle(); + } + else if (sub_8057314(behavior) == TRUE) + { + sub_80C68A4(MapGridGetMetatileIdAt(x, y), x, y); + } + else if (sub_8057328(behavior) == TRUE) + { + sub_80C6A54(x, y); + } + else if (sub_805733C(behavior) == TRUE) + { + DoDecorationSoundEffect(MapGridGetMetatileIdAt(x, y)); + } + } + break; + case 2: + if (!FieldEffectActiveListContains(taskData[4])) + { + taskData[1] = 1; + } + break; + } +} + +void sub_80BD034(u8 i, struct SecretBaseRecord *secretBase) +{ + gSaveBlock1.secretBases[i] = *secretBase; + gSaveBlock1.secretBases[i].sbr_field_1_6 = 2; +} + +bool8 sub_80BD070(struct SecretBaseRecord *baseA, struct SecretBaseRecord *baseB) +{ + u8 i; + + for (i = 0; i < 4; i++) + { + if (baseA->trainerId[i] != baseB->trainerId[i]) + { + return FALSE; + } + } + + return TRUE; +} + +bool8 sub_80BD0A0(struct SecretBaseRecord *baseA, struct SecretBaseRecord *baseB) +{ + u8 i; + + for (i = 0; i < 7 && (baseA->sbr_field_2[i] != 0xFF || baseB->sbr_field_2[i] != 0xFF); i++) + { + if (baseA->sbr_field_2[i] != baseB->sbr_field_2[i]) + { + return FALSE; + } + } + + return TRUE; +} + +bool8 sub_80BD0EC(struct SecretBaseRecord *baseA, struct SecretBaseRecord *baseB) +{ + if (baseA->gender == baseB->gender && sub_80BD070(baseA, baseB) && sub_80BD0A0(baseA, baseB)) + { + return TRUE; + } + + + return FALSE; +} + +s16 sub_80BD12C(u8 secretBaseId) +{ + s16 i; + + for (i = 0; i < 20; i++) + { + if (gSaveBlock1.secretBases[i].secretBaseId == secretBaseId) + { + return i; + } + } + + return -1; +} + +u8 sub_80BD170(void) +{ + s16 i; + + for (i = 1; i < 20; i++) + { + if (gSaveBlock1.secretBases[i].secretBaseId == 0) + { + return i; + } + } + + return 0; +} + +u8 sub_80BD1B0(void) +{ + s16 i; + + for (i = 1; i < 20; i++) + { + if (gSaveBlock1.secretBases[i].sbr_field_1_6 == 0 && gSaveBlock1.secretBases[i].sbr_field_1_0 == 0) + { + return i; + } + } + + return 0; +} -- cgit v1.2.3 From 687fee8891816c7d9b21670ba326edde8b15dce1 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Mon, 16 Oct 2017 14:38:52 -0700 Subject: Finish secret_base decomp --- src/field/secret_base.c | 484 +++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 433 insertions(+), 51 deletions(-) (limited to 'src') diff --git a/src/field/secret_base.c b/src/field/secret_base.c index be73f04bf..f2ed6adb6 100644 --- a/src/field/secret_base.c +++ b/src/field/secret_base.c @@ -12,6 +12,7 @@ #include "field_specials.h" #include "field_weather.h" #include "fieldmap.h" +#include "link.h" #include "main.h" #include "sound.h" #include "songs.h" @@ -33,29 +34,27 @@ #include "vars.h" +static void sub_80BC7D8(u8 taskId); +static void sub_80BC824(u8 taskId); static u8 sub_80BC948(u8 a); - -extern u8 gUnknown_0815F399[]; -extern u8 gUnknown_0815F49A[]; +static void sub_80BC980(u8 taskId); +static void sub_80BC9E4(u8 taskId); +static void sub_80BCA84(u8); +static void sub_80BCAEC(u8 taskId); +static void sub_80BCB90(u8); +static void sub_80BCBC0(u8); +static void sub_80BCBF8(u8 taskId); +static void sub_80BCC54(u8 taskId); +static void Task_SecretBasePC_Registry(u8 taskId); extern void DoDecorationSoundEffect(s16 metatileId); extern void sub_80C6A54(s16 x, s16 y); extern void sub_80C68A4(s16 metatileId, s16 x, s16 y); extern void DoYellowCave4Sparkle(void); -void sub_80BCA84(u8); -void sub_80BCBF8(u8 taskId); -void sub_80BCB90(u8); -void sub_80BCBC0(u8); - -void Task_SecretBasePC_Registry(u8 taskId); -void sub_80BC7D8(u8 taskId); -void sub_80BC824(u8 taskId); -void sub_80BCC54(u8 taskId); -void sub_80BC980(u8 taskId); -void sub_80BC9E4(u8 taskId); -void sub_80BCAEC(u8 taskId); -u8 sub_80BCCA4(u8); +extern u8 gUnknown_0815F399[]; +extern u8 gUnknown_0815F49A[]; +extern u8 gUnknown_020387DC; const struct { @@ -71,7 +70,6 @@ const struct {0x271, 0x278} }; -extern u8 gUnknown_020387DC; const u8 gUnknown_083D1374[] = { MAP_ID_SECRET_BASE_RED_CAVE1, 0, @@ -152,13 +150,13 @@ extern u8 UnknownString_81A2B2A[]; extern u8 UnknownString_81A2754[]; -void sub_80BB4AC(struct SecretBaseRecord *record) // 080bb4ac +void ClearSecretBase(struct SecretBaseRecord *record) { u16 i; u16 j; record->secretBaseId = 0; - for (i=0; i<7; i++) - record->sbr_field_2[i] = 0xff; + for (i=0; iplayerName[i] = 0xff; for (i=0; i<4; i++) record->trainerId[i] = 0x00; record->sbr_field_e = 0; @@ -184,32 +182,32 @@ void sub_80BB4AC(struct SecretBaseRecord *record) // 080bb4ac } } -void ResetSecretBase(u8 idx) // 80bb594 +void ResetSecretBase(u8 idx) { - sub_80BB4AC(&(gSaveBlock1.secretBases[idx])); + ClearSecretBase(&gSaveBlock1.secretBases[idx]); } -void ResetSecretBases(void) // 080bb5b4 +void ResetSecretBases(void) { u16 i; - for (i=0; i<20; i++) + for (i = 0; i < MAX_SECRET_BASES; i++) ResetSecretBase(i); } -void sub_80BB5D0(void) // 080bb5d0 +void sub_80BB5D0(void) { gUnknown_020387DC = gSpecialVar_0x8004; } -void sub_80BB5E4(void) // 80bb5e4 +void sub_80BB5E4(void) { - u16 idx; + u16 i; gScriptResult = 0; - for (idx=0; idx<20; idx++) { - if (gUnknown_020387DC != gSaveBlock1.secretBases[idx].secretBaseId) + for (i = 0; i < MAX_SECRET_BASES; i++) { + if (gUnknown_020387DC != gSaveBlock1.secretBases[i].secretBaseId) continue; gScriptResult = 1; - VarSet(VAR_0x4054, idx); + VarSet(VAR_0x4054, i); break; } } @@ -315,8 +313,8 @@ void sub_80BB8CC(void) } VarSet(VAR_0x4054, 0); nameLength = sub_80BB8A8(gSaveBlock2.playerName); - memset(gSaveBlock1.secretBases[0].sbr_field_2, 0xFF, 7); - StringCopyN(gSaveBlock1.secretBases[0].sbr_field_2, gSaveBlock2.playerName, nameLength); + memset(gSaveBlock1.secretBases[0].playerName, 0xFF, OT_NAME_LENGTH); + StringCopyN(gSaveBlock1.secretBases[0].playerName, gSaveBlock2.playerName, nameLength); gSaveBlock1.secretBases[0].gender = gSaveBlock2.playerGender; VarSet(VAR_SECRET_BASE_MAP, gMapHeader.regionMapSectionId); } @@ -327,7 +325,7 @@ void sub_80BB970(struct MapEvents *events) s16 tile_id; for (bgevidx=0; bgevidxbgEventCount; bgevidx++) { if (events->bgEvents[bgevidx].kind == 8) { - for (jdx=0; jdx<20; jdx++) { + for (jdx=0; jdxbgEvents[bgevidx].bgUnion.secretBaseId) { tile_id = MapGridGetMetatileIdAt(events->bgEvents[bgevidx].x + 7, events->bgEvents[bgevidx].y + 7); for (idx=0; idx<7; idx++) { @@ -364,7 +362,7 @@ void sub_80BBA48(u8 taskid) case 2: curbaseid = VarGet(VAR_0x4054); if (gSaveBlock1.secretBases[curbaseid].sbr_field_10 < 0xff) - gSaveBlock1.secretBases[curbaseid].sbr_field_10 ++; + gSaveBlock1.secretBases[curbaseid].sbr_field_10++; sub_80BBA14(); warp_in(); gFieldCallback = sub_8080990; @@ -503,7 +501,6 @@ void sub_80BBDD0(void) } } } - #else __attribute__((naked)) void sub_80BBDD0(void) @@ -808,7 +805,7 @@ void sub_80BC114(void) { u8 sub_80BC14C(u8 sbid) { s16 idx; - for (idx=0; idx<20; idx++) { + for (idx=0; idxsbr_field_2[i] != 0xFF || baseB->sbr_field_2[i] != 0xFF); i++) + for (i = 0; i < OT_NAME_LENGTH && (baseA->playerName[i] != 0xFF || baseB->playerName[i] != 0xFF); i++) { - if (baseA->sbr_field_2[i] != baseB->sbr_field_2[i]) + if (baseA->playerName[i] != baseB->playerName[i]) { return FALSE; } @@ -1619,7 +1616,7 @@ s16 sub_80BD12C(u8 secretBaseId) { s16 i; - for (i = 0; i < 20; i++) + for (i = 0; i < MAX_SECRET_BASES; i++) { if (gSaveBlock1.secretBases[i].secretBaseId == secretBaseId) { @@ -1634,7 +1631,7 @@ u8 sub_80BD170(void) { s16 i; - for (i = 1; i < 20; i++) + for (i = 1; i < MAX_SECRET_BASES; i++) { if (gSaveBlock1.secretBases[i].secretBaseId == 0) { @@ -1649,7 +1646,7 @@ u8 sub_80BD1B0(void) { s16 i; - for (i = 1; i < 20; i++) + for (i = 1; i < MAX_SECRET_BASES; i++) { if (gSaveBlock1.secretBases[i].sbr_field_1_6 == 0 && gSaveBlock1.secretBases[i].sbr_field_1_0 == 0) { @@ -1659,3 +1656,388 @@ u8 sub_80BD1B0(void) return 0; } + +#ifdef NONMATCHING +u8 sub_80BD1FC(struct SecretBaseRecord *secretBase) +{ + s16 secretBaseIndex; + + if (!secretBase->secretBaseId) + { + return 0; + } + + secretBaseIndex = sub_80BD12C(secretBase->secretBaseId); + if (secretBaseIndex) + { + if (secretBaseIndex != -1) + { + if (gSaveBlock1.secretBases[secretBaseIndex].sbr_field_1_0 != 1) + { + if (gSaveBlock1.secretBases[secretBaseIndex].sbr_field_1_6 != 2 + || secretBase->sbr_field_1_0 == 1) + { + sub_80BD034(secretBaseIndex, secretBase); + return secretBaseIndex; + } + } + } + else + { + secretBaseIndex = sub_80BD170(); + if (secretBaseIndex == 0) + { + secretBaseIndex = sub_80BD1B0(); + if (secretBaseIndex) + { + sub_80BD034(secretBaseIndex, secretBase); + return secretBaseIndex; + } + } + else + { + sub_80BD034(secretBaseIndex, secretBase); + return secretBaseIndex; + } + } + } + + return 0; +} +#else +__attribute__((naked)) +u8 sub_80BD1FC(struct SecretBaseRecord *secretBase) +{ + asm(".syntax unified\n\ + push {r4,r5,lr}\n\ + adds r5, r0, 0\n\ + ldrb r0, [r5]\n\ + cmp r0, 0\n\ + beq _080BD278\n\ + ldrb r0, [r5]\n\ + bl sub_80BD12C\n\ + lsls r0, 16\n\ + lsrs r4, r0, 16\n\ + asrs r2, r0, 16\n\ + cmp r2, 0\n\ + beq _080BD278\n\ + movs r0, 0x1\n\ + negs r0, r0\n\ + cmp r2, r0\n\ + beq _080BD254\n\ + ldr r0, _080BD24C @ =gSaveBlock1\n\ + lsls r1, r2, 2\n\ + adds r1, r2\n\ + lsls r1, 5\n\ + adds r1, r0\n\ + ldr r0, _080BD250 @ =0x00001a09\n\ + adds r1, r0\n\ + ldrb r1, [r1]\n\ + lsls r0, r1, 28\n\ + lsrs r0, 28\n\ + cmp r0, 0x1\n\ + beq _080BD278\n\ + lsrs r0, r1, 6\n\ + cmp r0, 0x2\n\ + bne _080BD246\n\ + ldrb r1, [r5, 0x1]\n\ + movs r0, 0xF\n\ + ands r0, r1\n\ + cmp r0, 0x1\n\ + bne _080BD278\n\ +_080BD246:\n\ + lsls r4, 24\n\ + lsrs r4, 24\n\ + b _080BD26C\n\ + .align 2, 0\n\ +_080BD24C: .4byte gSaveBlock1\n\ +_080BD250: .4byte 0x00001a09\n\ +_080BD254:\n\ + bl sub_80BD170\n\ + lsls r0, 24\n\ + lsrs r4, r0, 24\n\ + cmp r4, 0\n\ + bne _080BD26C\n\ + bl sub_80BD1B0\n\ + lsls r0, 24\n\ + lsrs r4, r0, 24\n\ + cmp r4, 0\n\ + beq _080BD278\n\ +_080BD26C:\n\ + adds r0, r4, 0\n\ + adds r1, r5, 0\n\ + bl sub_80BD034\n\ + adds r0, r4, 0\n\ + b _080BD27A\n\ +_080BD278:\n\ + movs r0, 0\n\ +_080BD27A:\n\ + pop {r4,r5}\n\ + pop {r1}\n\ + bx r1\n\ +.syntax divided\n"); +} +#endif + +void sub_80BD280(void) +{ + u8 i; + u8 j; + struct SecretBaseRecord temp; + struct SecretBaseRecord *secretBases = gSaveBlock1.secretBases; + + for (i = 1; i < MAX_SECRET_BASES - 1; i++) + { + for (j = i + 1; j < MAX_SECRET_BASES; j++) + { + if ((!secretBases[i].sbr_field_1_6 && secretBases[j].sbr_field_1_6 == 1) + || (secretBases[i].sbr_field_1_6 == 2 && secretBases[j].sbr_field_1_6 != 2)) + { + temp = secretBases[i]; + secretBases[i] = secretBases[j]; + secretBases[j] = temp; + } + } + } +} + +void sub_80BD328(struct SecretBaseRecord *secretBases, u8 b) +{ + u16 i; + + for (i = 1; i < MAX_SECRET_BASES; i++) + { + if (secretBases[i].sbr_field_1_6 == b) + { + sub_80BD1FC(&secretBases[i]); + } + } +} + +bool8 sub_80BD358(struct SecretBaseRecord *secretBase) +{ + u8 i; + + if (!secretBase->secretBaseId) + return FALSE; + + if (secretBase->secretBaseId && secretBase->gender != gSaveBlock2.playerGender) + return FALSE; + + // Check if the player's trainer Id matches the secret base's id. + for (i = 0; i < 4; i++) + { + if (secretBase->trainerId[i] != gSaveBlock2.playerTrainerId[i]) + return FALSE; + } + + for (i = 0; i < OT_NAME_LENGTH && (secretBase->playerName[i] != 0xFF || gSaveBlock2.playerName[i] != 0xFF); i++) + { + if (secretBase->playerName[i] != gSaveBlock2.playerName[i]) + return FALSE; + } + + return TRUE; +} + +void sub_80BD3DC(struct SecretBaseRecord *basesA, struct SecretBaseRecord *basesB, struct SecretBaseRecord *basesC) +{ + u8 i; + u8 var1 = 0; + + for (i = 0; i < MAX_SECRET_BASES; i++) + { + if ((var1 & 1) == 0) + { + if (sub_80BD358(&basesA[i]) == TRUE) + { + ClearSecretBase(&basesA[i]); + var1 |= 1; + } + } + + if ((var1 & 2) == 0) + { + if (sub_80BD358(&basesB[i]) == TRUE) + { + ClearSecretBase(&basesB[i]); + var1 |= 2; + } + } + + if ((var1 & 4) == 0) + { + if (sub_80BD358(&basesC[i]) == TRUE) + { + ClearSecretBase(&basesC[i]); + var1 |= 4; + } + } + + if (var1 == 7) + { + break; + } + } +} + +bool8 sub_80BD494(struct SecretBaseRecord *base, struct SecretBaseRecord *secretBases, u8 c) +{ + u8 i; + + for (i = 0; i < MAX_SECRET_BASES; i++) + { + if (secretBases[i].secretBaseId) + { + if (sub_80BD0EC(base, &secretBases[i]) == TRUE) + { + if (c == 0) + { + ClearSecretBase(&secretBases[i]); + return FALSE; + } + + if (base->sbr_field_e > secretBases[i].sbr_field_e) + { + ClearSecretBase(&secretBases[i]); + return FALSE; + } + + secretBases[i].sbr_field_1_0 = base->sbr_field_1_0; + + ClearSecretBase(base); + return TRUE; + } + } + } + + return FALSE; +} + +void sub_80BD514(struct SecretBaseRecord *basesA, struct SecretBaseRecord *basesB, struct SecretBaseRecord *basesC, struct SecretBaseRecord *basesD) +{ + u8 i; + + for (i = 1; i < MAX_SECRET_BASES; i++) + { + if (basesA[i].secretBaseId) + { + if (basesA[i].sbr_field_1_6 == 1) + { + basesA[i].sbr_field_1_0 = 1; + } + + if (!sub_80BD494(&basesA[i], basesB, i)) + { + if (!sub_80BD494(&basesA[i], basesC, i)) + { + sub_80BD494(&basesA[i], basesD, i); + } + } + } + } + + for (i = 0; i < MAX_SECRET_BASES; i++) + { + if (basesB[i].secretBaseId) + { + basesB[i].sbr_field_1_5 = 0; + + if (!sub_80BD494(&basesB[i], basesC, i)) + { + sub_80BD494(&basesB[i], basesD, i); + } + } + } + + for (i = 0; i < MAX_SECRET_BASES; i++) + { + if (basesC[i].secretBaseId) + { + basesC[i].sbr_field_1_5 = 0; + sub_80BD494(&basesC[i], basesD, i); + } + + if (basesD[i].secretBaseId) + { + basesD[i].sbr_field_1_5 = 0; + } + } +} + +void sub_80BD610(struct SecretBaseRecord *basesA, struct SecretBaseRecord *basesB, struct SecretBaseRecord *basesC) +{ + sub_80BD3DC(basesA, basesB, basesC); + sub_80BD514(gSaveBlock1.secretBases, basesA, basesB, basesC); + + sub_80BD1FC(basesA); + sub_80BD1FC(basesB); + sub_80BD1FC(basesC); + + sub_80BD328(basesA, 1); + sub_80BD328(basesB, 1); + sub_80BD328(basesC, 1); + + sub_80BD328(basesA, 0); + sub_80BD328(basesB, 0); + sub_80BD328(basesC, 0); +} + +void sub_80BD674(void *playerRecords, u32 size, u8 c) +{ + if (FlagGet(0x60)) + { + u16 i; + u8 numLinkedPlayers = GetLinkPlayerCount(); + switch (numLinkedPlayers) + { + case 2: + memset(playerRecords + size * 2, 0, size); + memset(playerRecords + size * 3, 0, size); + break; + case 3: + memset(playerRecords + size * 3, 0, size); + break; + } + + switch (c) + { + case 0: + sub_80BD610(playerRecords + size, playerRecords + size * 2, playerRecords + size * 3); + break; + case 1: + sub_80BD610(playerRecords + size * 2, playerRecords + size * 3, playerRecords); + break; + case 2: + sub_80BD610(playerRecords + size * 3, playerRecords, playerRecords + size); + break; + case 3: + sub_80BD610(playerRecords, playerRecords + size, playerRecords + size * 2); + break; + } + + for (i = 1; i < MAX_SECRET_BASES; i++) + { + if (gSaveBlock1.secretBases[i].sbr_field_1_0 == 1) + { + gSaveBlock1.secretBases[i].sbr_field_1_6 = 1; + gSaveBlock1.secretBases[i].sbr_field_1_0 = 0; + } + } + + sub_80BD280(); + + for (i = 1; i < MAX_SECRET_BASES; i++) + { + if (gSaveBlock1.secretBases[i].sbr_field_1_6 == 2) + { + gSaveBlock1.secretBases[i].sbr_field_1_6 = 0; + } + } + + if (gSaveBlock1.secretBases[0].sbr_field_e != 0xFFFF) + { + gSaveBlock1.secretBases[0].sbr_field_e++; + } + } +} -- cgit v1.2.3 From da48c3037762f19493280ca45800ba5d8e57b83d Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Tue, 17 Oct 2017 14:54:31 -0700 Subject: Begin battle_tower decompilation --- src/battle_tower.c | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 src/battle_tower.c (limited to 'src') diff --git a/src/battle_tower.c b/src/battle_tower.c new file mode 100644 index 000000000..51f4ca93d --- /dev/null +++ b/src/battle_tower.c @@ -0,0 +1,58 @@ +#include "global.h" +#include "battle_tower.h" +#include "event_data.h" +#include "vars.h" + + +extern void sub_813461C(u8 levelType); +extern void sub_8135C44(void); + + +void sub_8134548(void) +{ + u8 var1 = 0; + s32 levelType; + + for (levelType = 0; levelType < 2; levelType++) + { + switch (gSaveBlock2.filler_A8.var_4AE[levelType]) + { + case 0: + default: + sub_813461C(levelType); + if (!var1) + { + VarSet(VAR_0x4000, 5); + } + break; + case 1: + sub_813461C(levelType); + VarSet(VAR_0x4000, 1); + var1++; + break; + case 4: + VarSet(VAR_0x4000, 2); + var1++; + break; + case 5: + VarSet(VAR_0x4000, 3); + var1++; + break; + case 2: + VarSet(VAR_0x4000, 4); + var1++; + break; + case 3: + case 6: + break; + } + } + + if ((gSaveBlock2.filler_A8.var_4AE[0] == 3 || gSaveBlock2.filler_A8.var_4AE[0] == 6) + && (gSaveBlock2.filler_A8.var_4AE[1] == 3 || gSaveBlock2.filler_A8.var_4AE[1] == 6)) + { + VarSet(VAR_0x4000, 5); + } + + sub_8135C44(); +} -- cgit v1.2.3 From 9f523630fcfd25896561f66495a3b4f6bd8c0487 Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Tue, 17 Oct 2017 18:13:05 -0400 Subject: Fix Task_Truck1. --- src/field/field_special_scene.c | 82 +++++++++++++++++++++++++++++------------ 1 file changed, 58 insertions(+), 24 deletions(-) (limited to 'src') diff --git a/src/field/field_special_scene.c b/src/field/field_special_scene.c index d4b59c8a2..255b1d42b 100644 --- a/src/field/field_special_scene.c +++ b/src/field/field_special_scene.c @@ -18,6 +18,52 @@ #define SECONDS(value) ((signed) (60.0 * value + 0.5)) +// TODO: Move somewhere else +enum +{ + STEP_17 = 0x17, + STEP_18, + STEP_END = 0xFE, +}; + +const u32 gMapObjectPic_MovingBox[] = INCBIN_U32("graphics/map_objects/pics/misc/moving_box.4bpp"); +const u16 gMapObjectPalette19[] = INCBIN_U16("graphics/map_objects/palettes/19.gbapal"); + +static const s8 gTruckCamera_HorizontalTable[] = +{ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 2, + 2, + 2, + 2, + 2, + 2, + -1, + -1, + -1, + 0, +}; + +const u8 gUnknown_083D295F[] = +{ + STEP_18, + STEP_END, +}; + +const u8 gUnknown_083D2961[] = +{ + STEP_17, + STEP_END, +}; + // porthole states enum { @@ -27,12 +73,7 @@ enum EXIT_PORTHOLE, }; -extern s8 gTruckCamera_HorizontalTable[]; - -extern u8 gUnknown_083D295F[]; -extern u8 gUnknown_083D2961[]; - -s32 GetTruckCameraBobbingY(int a1) +s16 GetTruckCameraBobbingY(int a1) { if (!(a1 % 120)) return -1; @@ -42,7 +83,7 @@ s32 GetTruckCameraBobbingY(int a1) return 0; } -s32 GetTruckBoxMovement(int a1) // for the box movement? +s16 GetTruckBoxMovement(int a1) // for the box movement? { if (!((a1 + 120) % 180)) return -1; @@ -54,27 +95,22 @@ void Task_Truck1(u8 taskId) { s16 *data = gTasks[taskId].data; s16 cameraYpan; - s16 box1 = 0; - s16 box2 = 0; - s16 box3 = 0; - u8 mapNum, mapGroup; - register s16 zero asm("r4"); + s16 cameraXpan = 0; + s16 box1, box2, box3; box1 = GetTruckBoxMovement(data[0] + 30) * 4; // top box. - sub_805BD90(1, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, 3, box1 + 3); + sub_805BD90(1, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, 3 - cameraXpan, box1 + 3); box2 = GetTruckBoxMovement(data[0]) * 2; // bottom left box. - sub_805BD90(2, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, 0, box2 - 3); + sub_805BD90(2, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, -cameraXpan, box2 - 3); box3 = GetTruckBoxMovement(data[0]) * 4; // bottom right box. - mapNum = gSaveBlock1.location.mapNum; - mapGroup = gSaveBlock1.location.mapGroup; - zero = 0; - sub_805BD90(3, mapNum, mapGroup, -3, box3); + sub_805BD90(3, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, -3 - cameraXpan, box3); if (++data[0] == SECONDS(500)) // this will never run - data[0] = zero; // reset the timer if it gets stuck. + data[0] = 0; // reset the timer if it gets stuck. + // this also matches with directly calling GetTruckCameraBobbingY within SetCameraPanning, but this is consistent with a later function that requires a temp variable. cameraYpan = GetTruckCameraBobbingY(data[0]); - SetCameraPanning(0, cameraYpan); + SetCameraPanning(cameraXpan, cameraYpan); } void Task_Truck2(u8 taskId) @@ -82,9 +118,7 @@ void Task_Truck2(u8 taskId) s16 *data = gTasks[taskId].data; s16 cameraYpan; s16 cameraXpan; - s16 box1; - s16 box2; - s16 box3; + s16 box1, box2, box3; data[0]++; data[2]++; @@ -137,7 +171,7 @@ void Task_Truck3(u8 taskId) { cameraXpan = gTruckCamera_HorizontalTable[data[1]]; cameraYpan = 0; - SetCameraPanning(cameraXpan, 0); + SetCameraPanning(cameraXpan, cameraYpan); sub_805BD90(1, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, 3 - cameraXpan, cameraYpan + 3); sub_805BD90(2, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, -cameraXpan, cameraYpan - 3); sub_805BD90(3, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, -3 - cameraXpan, cameraYpan); -- cgit v1.2.3 From 8d80e1c9465d67dc848969a1615560331f12bc7a Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Tue, 17 Oct 2017 18:13:49 -0400 Subject: update script movement to use constant movement lists. --- src/field/script_movement.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) (limited to 'src') diff --git a/src/field/script_movement.c b/src/field/script_movement.c index 30e10b451..c7ce55171 100644 --- a/src/field/script_movement.c +++ b/src/field/script_movement.c @@ -5,19 +5,19 @@ #include "task.h" #include "util.h" -static EWRAM_DATA u8 *gUnknown_020384F8[16] = {0}; +static EWRAM_DATA const u8 *gUnknown_020384F8[16] = {0}; static void sub_80A2198(u8); static u8 sub_80A21E0(void); -static bool8 sub_80A21F4(u8, u8, u8 *); +static bool8 sub_80A21F4(u8, u8, const u8 *); static u8 sub_80A2260(u8, u8); static bool8 sub_80A2370(u8, u8); -static void sub_80A23C8(u8, u8, u8, u8 *); +static void sub_80A23C8(u8, u8, u8, const u8 *); static void UnfreezeObjects(u8); static void Task_80A244C(u8); -static void sub_80A2490(u8, u8, u8, u8 *); +static void sub_80A2490(u8, u8, u8, const u8 *); -bool8 ScriptMovement_StartObjectMovementScript(u8 localId, u8 mapNum, u8 mapGroup, u8 *movementScript) +bool8 ScriptMovement_StartObjectMovementScript(u8 localId, u8 mapNum, u8 mapGroup, const u8 *movementScript) { u8 mapObjId; @@ -70,7 +70,7 @@ static u8 sub_80A21E0(void) return FindTaskIdByFunc(Task_80A244C); } -static bool8 sub_80A21F4(u8 taskId, u8 mapObjId, u8 *movementScript) +static bool8 sub_80A21F4(u8 taskId, u8 mapObjId, const u8 *movementScript) { u8 r4; @@ -160,17 +160,17 @@ static bool8 sub_80A2370(u8 taskId, u8 b) return FALSE; } -static void npc_obj_offscreen_culling_and_flag_update(u8 a, u8 *movementScript) +static void npc_obj_offscreen_culling_and_flag_update(u8 a, const u8 *movementScript) { gUnknown_020384F8[a] = movementScript; } -static u8 *sub_80A23B8(u8 a) +static const u8 *sub_80A23B8(u8 a) { return gUnknown_020384F8[a]; } -static void sub_80A23C8(u8 taskId, u8 b, u8 mapObjId, u8 *movementScript) +static void sub_80A23C8(u8 taskId, u8 b, u8 mapObjId, const u8 *movementScript) { sub_80A2318(taskId, b); npc_obj_offscreen_culling_and_flag_update(b, movementScript); @@ -203,7 +203,7 @@ static void Task_80A244C(u8 taskId) } } -static void sub_80A2490(u8 taskId, u8 b, u8 mapObjId, u8 *d) +static void sub_80A2490(u8 taskId, u8 b, u8 mapObjId, const u8 *d) { u8 var; -- cgit v1.2.3 From fbbe7c5e4c42f6c4a25c40216e4eda1d1b1fb89e Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Wed, 18 Oct 2017 02:58:11 -0400 Subject: document bike.c. --- src/field/bike.c | 530 ++++++++++++++++++++------------------- src/field/field_camera.c | 7 +- src/field/field_control_avatar.c | 4 +- src/field/field_effect.c | 28 +-- src/field/field_map_obj.c | 4 +- src/field/field_player_avatar.c | 202 ++++++++------- src/field/field_specials.c | 24 +- src/field/map_obj_lock.c | 2 +- src/rom6.c | 4 +- src/scene/intro.c | 4 +- 10 files changed, 419 insertions(+), 390 deletions(-) (limited to 'src') diff --git a/src/field/bike.c b/src/field/bike.c index 8df901b40..58359e97f 100644 --- a/src/field/bike.c +++ b/src/field/bike.c @@ -10,16 +10,16 @@ #include "songs.h" #include "sound.h" -extern u8 gUnknown_02039250; -extern u8 gUnknown_02039251; -extern u8 gUnknown_0202E854; +extern bool8 gBikeCyclingChallenge; +extern u8 gBikeCollisions; +extern u8 gUnusedBikeCameraAheadPanback; static void MovePlayerOnMachBike(u8, u16, u16); static u8 GetMachBikeTransition(u8 *); static void MachBikeTransition_FaceDirection(u8); -static void MachBikeTransition_80E517C(u8); -static void MachBikeTransition_80E51C4(u8); -static void MachBikeTransition_80E5270(u8); +static void MachBikeTransition_TurnFrame(u8); +static void MachBikeTransition_TrySpeedUp(u8); +static void MachBikeTransition_TrySlowDown(u8); static void MovePlayerOnAcroBike(u8, u16, u16); static u8 CheckMovementInputAcroBike(u8 *, u16, u16); static u8 AcroBikeHandleInputNormal(u8 *, u16, u16); @@ -27,64 +27,65 @@ static u8 AcroBikeHandleInputTurning(u8 *, u16, u16); static u8 AcroBikeHandleInputWheelieStanding(u8 *, u16, u16); static u8 AcroBikeHandleInputBunnyHop(u8 *, u16, u16); static u8 AcroBikeHandleInputWheelieMoving(u8 *, u16, u16); -static u8 AcroBikeHandleInputState5(u8 *, u16, u16); -static u8 AcroBikeHandleInputState6(u8 *, u16, u16); +static u8 AcroBikeHandleInputSidewaysJump(u8 *, u16, u16); +static u8 AcroBikeHandleInputTurnJump(u8 *, u16, u16); static void AcroBikeTransition_FaceDirection(u8); -static void AcroBikeTransition_80E5708(u8); -static void AcroBikeTransition_80E5744(u8); +static void AcroBikeTransition_TurnDirection(u8); +static void AcroBikeTransition_Moving(u8); static void AcroBikeTransition_NormalToWheelie(u8); -static void AcroBikeTransition_80E57F8(u8); -static void AcroBikeTransition_80E5834(u8); -static void AcroBikeTransition_80E5870(u8); -static void AcroBikeTransition_80E58AC(u8); -static void AcroBikeTransition_80E5920(u8); -static void AcroBikeTransition_80E5990(u8); -static void AcroBikeTransition_80E59A0(u8); -static void AcroBikeTransition_80E5A30(u8); -static void AcroBikeTransition_80E5AC0(u8); -static void sub_80E5B60(u16, u16); -static u8 sub_80E5C2C(void); -static void sub_80E5C7C(u8); -static void sub_80E5CB8(u8); -static u8 sub_80E5CF4(u16); +static void AcroBikeTransition_WheelieToNormal(u8); +static void AcroBikeTransition_WheelieIdle(u8); +static void AcroBikeTransition_WheelieHoppingStanding(u8); +static void AcroBikeTransition_WheelieHoppingMoving(u8); +static void AcroBikeTransition_SideJump(u8); +static void AcroBikeTransition_TurnJump(u8); +static void AcroBikeTransition_WheelieMoving(u8); +static void AcroBikeTransition_WheelieRisingMoving(u8); +static void AcroBikeTransition_WheelieLoweringMoving(u8); +static void AcroBike_TryHistoryUpdate(u16, u16); +static u8 AcroBike_GetJumpDirection(void); +static void Bike_UpdateDirTimerHistory(u8); +static void Bike_UpdateABStartSelectHistory(u8); +static u8 Bike_DPadToDirection(u16); static u8 get_some_collision(u8); -static u8 sub_80E5DA0(struct MapObject *, s16, s16, u8, u8); +static u8 Bike_CheckCollisionTryAdvanceCollisionCount(struct MapObject *, s16, s16, u8, u8); static bool8 IsRunningDisallowedByMetatile(u8); -static void sub_80E5E4C(); +static void Bike_TryAdvanceCyclingRoadCollisions(); static u8 CanBikeFaceDirOnMetatile(u8, u8); -static bool8 sub_80E5EC0(u8, u8); -static void sub_80E6024(void); +static bool8 WillPlayerCollideWithCollision(u8, u8); +static void Bike_SetBikeStill(void); static void (*const sMachBikeTransitions[])(u8) = { - MachBikeTransition_FaceDirection, - MachBikeTransition_80E517C, - MachBikeTransition_80E51C4, - MachBikeTransition_80E5270, + MachBikeTransition_FaceDirection, // the difference between this and turn frame is that face direction has no turn anim while turn frame does. + MachBikeTransition_TurnFrame, + MachBikeTransition_TrySpeedUp, + MachBikeTransition_TrySlowDown, }; -static void (*const gUnknown_083DB5A4[])(u8) = +// bikeFrameCounter is input which is represented by gMachBikeSpeeds in order: 0 is normal speed (1 speed), 1 is fast speed (2 speed), 2 is fastest speed (4 speed) +static void (*const sMachBikeSpeedCallbacks[])(u8) = { - PlayerGoSpeed0, - sub_80593C4, - sub_80593F4, + PlayerGoSpeed1, // normal speed (1 speed) + PlayerGoSpeed2, // fast speed (2 speed) + PlayerGoSpeed4, // fastest speed (4 speed) }; static void (*const sAcroBikeTransitions[])(u8) = { AcroBikeTransition_FaceDirection, - AcroBikeTransition_80E5708, - AcroBikeTransition_80E5744, + AcroBikeTransition_TurnDirection, + AcroBikeTransition_Moving, AcroBikeTransition_NormalToWheelie, - AcroBikeTransition_80E57F8, - AcroBikeTransition_80E5834, - AcroBikeTransition_80E5870, - AcroBikeTransition_80E58AC, - AcroBikeTransition_80E5920, - AcroBikeTransition_80E5990, - AcroBikeTransition_80E59A0, - AcroBikeTransition_80E5A30, - AcroBikeTransition_80E5AC0, + AcroBikeTransition_WheelieToNormal, + AcroBikeTransition_WheelieIdle, + AcroBikeTransition_WheelieHoppingStanding, + AcroBikeTransition_WheelieHoppingMoving, + AcroBikeTransition_SideJump, + AcroBikeTransition_TurnJump, + AcroBikeTransition_WheelieMoving, + AcroBikeTransition_WheelieRisingMoving, + AcroBikeTransition_WheelieLoweringMoving, }; static u8 (*const sAcroBikeInputHandlers[])(u8 *, u16, u16) = @@ -94,19 +95,24 @@ static u8 (*const sAcroBikeInputHandlers[])(u8 *, u16, u16) = AcroBikeHandleInputWheelieStanding, AcroBikeHandleInputBunnyHop, AcroBikeHandleInputWheelieMoving, - AcroBikeHandleInputState5, - AcroBikeHandleInputState6, + AcroBikeHandleInputSidewaysJump, + AcroBikeHandleInputTurnJump, }; +// used with bikeFrameCounter from mach bike const u16 gMachBikeSpeeds[] = {SPEED_NORMAL, SPEED_FAST, SPEED_FASTEST}; -static const u8 Unknown_3DB606[] = {4, 0}; -static const struct UnknownStruct1 gUnknown_083DB608[] = +// this is a list of timers to compare against later, terminated with 0. the only timer being compared against is 4 frames in this list. +static const u8 BikeTimerList[] = {4, 0}; + +// this is a list of history inputs to do in order to do the check to retrieve a jump direction for acro bike. +static const struct BikeHistoryInputInfo gAcroBikeJumpInputList[] = { - {1, 2, 15, 15, Unknown_3DB606, Unknown_3DB606, 1}, - {2, 2, 15, 15, Unknown_3DB606, Unknown_3DB606, 2}, - {3, 2, 15, 15, Unknown_3DB606, Unknown_3DB606, 3}, - {4, 2, 15, 15, Unknown_3DB606, Unknown_3DB606, 4}, + // the 0xF is a mask performed with each byte of the array in order to perform the check on only the last entry of the history list, otherwise the check wouldnt work as there can be 0xF0 as opposed to 0x0F. + {DIR_SOUTH, B_BUTTON, 0xF, 0xF, BikeTimerList, BikeTimerList, DIR_SOUTH}, + {DIR_NORTH, B_BUTTON, 0xF, 0xF, BikeTimerList, BikeTimerList, DIR_NORTH}, + {DIR_WEST, B_BUTTON, 0xF, 0xF, BikeTimerList, BikeTimerList, DIR_WEST}, + {DIR_EAST, B_BUTTON, 0xF, 0xF, BikeTimerList, BikeTimerList, DIR_EAST}, }; void MovePlayerOnBike(u8 direction, u16 newKeys, u16 heldKeys) @@ -122,54 +128,60 @@ static void MovePlayerOnMachBike(u8 direction, u16 newKeys, u16 heldKeys) sMachBikeTransitions[GetMachBikeTransition(&direction)](direction); } -static u8 GetMachBikeTransition(u8 *ptr) +// dirTraveling is a variable that is 0 when the player is standing still. +static u8 GetMachBikeTransition(u8 *dirTraveling) { + // if the dir updated before this function, get the relevent new direction to check later. u8 direction = player_get_direction_upper_nybble(); - if (*ptr == 0) + // is the player standing still? + if (*dirTraveling == 0) { - *ptr = direction; - if (gPlayerAvatar.unkB == 0) + *dirTraveling = direction; // update the direction, since below we either faced a direction or we started moving. + if (gPlayerAvatar.bikeSpeed == SPEED_STANDING) { - gPlayerAvatar.running2 = 0; - return 0; + gPlayerAvatar.runningState = NOT_MOVING; + return MBT_FACE_DIRECTION; } - gPlayerAvatar.running2 = 2; - return 3; + gPlayerAvatar.runningState = MOVING; + return MBT_START_MOVING; } - if (*ptr != direction && gPlayerAvatar.running2 != 2) + // we need to check if the last traveled direction changed from the new direction as well as ensuring that we dont update the state while the player is moving: see the else check. + if (*dirTraveling != direction && gPlayerAvatar.runningState != MOVING) { - if (gPlayerAvatar.unkB != 0) + if (gPlayerAvatar.bikeSpeed != SPEED_STANDING) { - *ptr = direction; - gPlayerAvatar.running2 = 2; - return 3; + *dirTraveling = direction; // implement the new direction + gPlayerAvatar.runningState = MOVING; + return MBT_START_MOVING; } - gPlayerAvatar.running2 = 1; - return 1; + // if you didnt start moving but your dir was different, do a turn frame instead. + gPlayerAvatar.runningState = TURN_FRAME; + return MBT_TURN_FRAME; } - else + else // the player is either going in the current direction and hasnt changed or their state is currently moving. { - gPlayerAvatar.running2 = 2; - return 2; + gPlayerAvatar.runningState = MOVING; + return MBT_KEEP_MOVING; } } +// the difference between face direction and turn frame is that one changes direction while the other does the animation of turning as well as changing direction. static void MachBikeTransition_FaceDirection(u8 direction) { PlayerFaceDirection(direction); - sub_80E6024(); + Bike_SetBikeStill(); } -static void MachBikeTransition_80E517C(u8 direction) +static void MachBikeTransition_TurnFrame(u8 direction) { struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; if (CanBikeFaceDirOnMetatile(direction, playerMapObj->mapobj_unk_1E)) { PlayerTurnInPlace(direction); - sub_80E6024(); + Bike_SetBikeStill(); } else { @@ -177,15 +189,16 @@ static void MachBikeTransition_80E517C(u8 direction) } } -static void MachBikeTransition_80E51C4(u8 direction) +static void MachBikeTransition_TrySpeedUp(u8 direction) { struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; u8 collision; - if (CanBikeFaceDirOnMetatile(direction, playerMapObj->mapobj_unk_1E) == 0) + if (CanBikeFaceDirOnMetatile(direction, playerMapObj->mapobj_unk_1E) == FALSE) { - if (gPlayerAvatar.unkB) - MachBikeTransition_80E5270(playerMapObj->placeholder18); + // we cannot go forward, so either slow down or, if we are stopped, idle face direction. + if (gPlayerAvatar.bikeSpeed) + MachBikeTransition_TrySlowDown(playerMapObj->placeholder18); else MachBikeTransition_FaceDirection(playerMapObj->placeholder18); } @@ -194,33 +207,36 @@ static void MachBikeTransition_80E51C4(u8 direction) collision = get_some_collision(direction); if (collision > 0 && collision < 12) { + // we hit a solid object, but check to see if its a ledge and then jump. if (collision == COLLISION_LEDGE_JUMP) { PlayerJumpLedge(direction); } else { - sub_80E6024(); + // we hit a solid object that is not a ledge, so perform the collision. + Bike_SetBikeStill(); if (collision < 5 || collision > 8) PlayerOnBikeCollide(direction); } } else { - gUnknown_083DB5A4[gPlayerAvatar.bikeFrameCounter](direction); - gPlayerAvatar.unkB = gPlayerAvatar.bikeFrameCounter + (gPlayerAvatar.bikeFrameCounter >> 1); // same as dividing by 2, but compiler is insistent on >> 1 + // we did not hit anything that can slow us down, so perform the advancement callback depending on the bikeFrameCounter and try to increase the mach bike's speed. + sMachBikeSpeedCallbacks[gPlayerAvatar.bikeFrameCounter](direction); + gPlayerAvatar.bikeSpeed = gPlayerAvatar.bikeFrameCounter + (gPlayerAvatar.bikeFrameCounter >> 1); // same as dividing by 2, but compiler is insistent on >> 1 if (gPlayerAvatar.bikeFrameCounter < 2) // do not go faster than the last element in the mach bike array gPlayerAvatar.bikeFrameCounter++; } } } -static void MachBikeTransition_80E5270(u8 var) +static void MachBikeTransition_TrySlowDown(u8 var) { u8 collision; - if (gPlayerAvatar.unkB != 0) - gPlayerAvatar.bikeFrameCounter = --gPlayerAvatar.unkB; + if (gPlayerAvatar.bikeSpeed != SPEED_STANDING) + gPlayerAvatar.bikeFrameCounter = --gPlayerAvatar.bikeSpeed; collision = get_some_collision(var); @@ -232,14 +248,14 @@ static void MachBikeTransition_80E5270(u8 var) } else { - sub_80E6024(); + Bike_SetBikeStill(); if (collision < 5 || collision > 8) PlayerOnBikeCollide(var); } } else { - gUnknown_083DB5A4[gPlayerAvatar.bikeFrameCounter](var); + sMachBikeSpeedCallbacks[gPlayerAvatar.bikeFrameCounter](var); } } @@ -265,68 +281,71 @@ static u8 AcroBikeHandleInputNormal(u8 *newDirection, u16 newKeys, u16 heldKeys) //We're standing still with the B button held. //Do a wheelie. *newDirection = direction; - gPlayerAvatar.running2 = 0; + gPlayerAvatar.runningState = NOT_MOVING; gPlayerAvatar.acroBikeState = ACRO_STATE_WHEELIE_STANDING; return ACRO_TRANS_NORMAL_TO_WHEELIE; } else { *newDirection = direction; - gPlayerAvatar.running2 = 0; + gPlayerAvatar.runningState = NOT_MOVING; return ACRO_TRANS_FACE_DIRECTION; } } - if (*newDirection == direction && (heldKeys & B_BUTTON) && gPlayerAvatar.unkB == 0) + if (*newDirection == direction && (heldKeys & B_BUTTON) && gPlayerAvatar.bikeSpeed == SPEED_STANDING) { - gPlayerAvatar.unkB++; + gPlayerAvatar.bikeSpeed++; gPlayerAvatar.acroBikeState = ACRO_STATE_WHEELIE_MOVING; - return 11; + return ACRO_TRANS_WHEELIE_RISING_MOVING; } - if (*newDirection != direction && gPlayerAvatar.running2 != 2) + if (*newDirection != direction && gPlayerAvatar.runningState != MOVING) { gPlayerAvatar.acroBikeState = ACRO_STATE_TURNING; - gPlayerAvatar.unk9 = *newDirection; - gPlayerAvatar.running2 = 0; + gPlayerAvatar.newDirBackup = *newDirection; + gPlayerAvatar.runningState = NOT_MOVING; return CheckMovementInputAcroBike(newDirection, newKeys, heldKeys); } - gPlayerAvatar.running2 = 2; - return 2; + gPlayerAvatar.runningState = MOVING; + return ACRO_TRANS_MOVING; } static u8 AcroBikeHandleInputTurning(u8 *newDirection, u16 newKeys, u16 heldKeys) { u8 direction; - *newDirection = gPlayerAvatar.unk9; + *newDirection = gPlayerAvatar.newDirBackup; gPlayerAvatar.bikeFrameCounter++; //Wait 6 frames before actually changing direction - if (gPlayerAvatar.bikeFrameCounter > 6) + if (gPlayerAvatar.bikeFrameCounter > 6) // ... because it takes 6 frames to advance 1 tile. { - gPlayerAvatar.running2 = 1; + gPlayerAvatar.runningState = TURN_FRAME; gPlayerAvatar.acroBikeState = ACRO_STATE_NORMAL; - sub_80E6024(); - return 1; + Bike_SetBikeStill(); + return ACRO_TRANS_TURN_DIRECTION; } direction = player_get_direction_upper_nybble(); - if (*newDirection == sub_80E5C2C()) + if (*newDirection == AcroBike_GetJumpDirection()) { - sub_80E6024(); - gPlayerAvatar.unkB = 1; + Bike_SetBikeStill(); // Bike_SetBikeStill sets speed to standing, but the next line immediately overrides it. could have just reset acroBikeState to 0 here instead of wasting a jump. + gPlayerAvatar.bikeSpeed = SPEED_NORMAL; if (*newDirection == GetOppositeDirection(direction)) { - gPlayerAvatar.acroBikeState = ACRO_STATE_6; - return 9; + // do a turn jump. + // no need to update runningState, didnt move. + gPlayerAvatar.acroBikeState = ACRO_STATE_TURN_JUMP; + return ACRO_TRANS_TURN_JUMP; } else { - gPlayerAvatar.running2 = 2; - gPlayerAvatar.acroBikeState = ACRO_STATE_5; - return 8; + // do a sideways jump. + gPlayerAvatar.runningState = MOVING; // we need to move, set state to moving. + gPlayerAvatar.acroBikeState = ACRO_STATE_SIDE_JUMP; + return ACRO_TRANS_SIDE_JUMP; } } *newDirection = direction; - return 0; + return ACRO_TRANS_FACE_DIRECTION; } static u8 AcroBikeHandleInputWheelieStanding(u8 *ptr, u16 newKeys, u16 heldKeys) @@ -336,7 +355,7 @@ static u8 AcroBikeHandleInputWheelieStanding(u8 *ptr, u16 newKeys, u16 heldKeys) direction = player_get_direction_upper_nybble(); playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; - gPlayerAvatar.running2 = 0; + gPlayerAvatar.runningState = NOT_MOVING; if (heldKeys & B_BUTTON) gPlayerAvatar.bikeFrameCounter++; @@ -349,31 +368,31 @@ static u8 AcroBikeHandleInputWheelieStanding(u8 *ptr, u16 newKeys, u16 heldKeys) //Go back to normal on flat ground *ptr = direction; gPlayerAvatar.acroBikeState = ACRO_STATE_NORMAL; - sub_80E6024(); - return 4; + Bike_SetBikeStill(); + return ACRO_TRANS_WHEELIE_TO_NORMAL; } } if (gPlayerAvatar.bikeFrameCounter >= 40) { *ptr = direction; gPlayerAvatar.acroBikeState = ACRO_STATE_BUNNY_HOP; - sub_80E6024(); - return 6; + Bike_SetBikeStill(); + return ACRO_TRANS_WHEELIE_HOPPING_STANDING; } if (*ptr == direction) { - gPlayerAvatar.running2 = 2; + gPlayerAvatar.runningState = MOVING; gPlayerAvatar.acroBikeState = ACRO_STATE_WHEELIE_MOVING; - sub_80E6024(); - return 10; + Bike_SetBikeStill(); + return ACRO_TRANS_WHEELIE_MOVING; } if (*ptr == 0) { *ptr = direction; - return 5; + return ACRO_TRANS_WHEELIE_IDLE; } - gPlayerAvatar.running2 = 1; - return 5; + gPlayerAvatar.runningState = TURN_FRAME; + return ACRO_TRANS_WHEELIE_IDLE; } static u8 AcroBikeHandleInputBunnyHop(u8 *ptr, u16 newKeys, u16 heldKeys) @@ -386,7 +405,7 @@ static u8 AcroBikeHandleInputBunnyHop(u8 *ptr, u16 newKeys, u16 heldKeys) if (!(heldKeys & B_BUTTON)) { //B button was released - sub_80E6024(); + Bike_SetBikeStill(); if (MetatileBehavior_IsBumpySlope(playerMapObj->mapobj_unk_1E)) { //Do a standing wheelie on a bumpy slope @@ -397,9 +416,9 @@ static u8 AcroBikeHandleInputBunnyHop(u8 *ptr, u16 newKeys, u16 heldKeys) { //Go back to normal on flat ground *ptr = direction; - gPlayerAvatar.running2 = 0; + gPlayerAvatar.runningState = NOT_MOVING; gPlayerAvatar.acroBikeState = ACRO_STATE_NORMAL; - return 4; + return ACRO_TRANS_WHEELIE_TO_NORMAL; } } @@ -408,16 +427,16 @@ static u8 AcroBikeHandleInputBunnyHop(u8 *ptr, u16 newKeys, u16 heldKeys) if (*ptr == DIR_NONE) { *ptr = direction; - gPlayerAvatar.running2 = 0; - return 6; + gPlayerAvatar.runningState = NOT_MOVING; + return ACRO_TRANS_WHEELIE_HOPPING_STANDING; } - if (*ptr != direction && gPlayerAvatar.running2 != 2) + if (*ptr != direction && gPlayerAvatar.runningState != MOVING) { - gPlayerAvatar.running2 = 1; - return 6; + gPlayerAvatar.runningState = TURN_FRAME; + return ACRO_TRANS_WHEELIE_HOPPING_STANDING; } - gPlayerAvatar.running2 = 2; - return 7; + gPlayerAvatar.runningState = MOVING; + return ACRO_TRANS_WHEELIE_HOPPING_MOVING; } static u8 AcroBikeHandleInputWheelieMoving(u8 *ptr, u16 newKeys, u16 heldKeys) @@ -429,23 +448,23 @@ static u8 AcroBikeHandleInputWheelieMoving(u8 *ptr, u16 newKeys, u16 heldKeys) playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; if (!(heldKeys & B_BUTTON)) { - sub_80E6024(); + Bike_SetBikeStill(); if (!MetatileBehavior_IsBumpySlope(playerMapObj->mapobj_unk_1E)) { gPlayerAvatar.acroBikeState = ACRO_STATE_NORMAL; if (*ptr == 0) { *ptr = direction; - gPlayerAvatar.running2 = 0; - return 4; + gPlayerAvatar.runningState = NOT_MOVING; + return ACRO_TRANS_WHEELIE_TO_NORMAL; } - if (*ptr != direction && gPlayerAvatar.running2 != 2) + if (*ptr != direction && gPlayerAvatar.runningState != MOVING) { - gPlayerAvatar.running2 = 0; - return 4; + gPlayerAvatar.runningState = NOT_MOVING; + return ACRO_TRANS_WHEELIE_TO_NORMAL; } - gPlayerAvatar.running2 = 2; - return 12; + gPlayerAvatar.runningState = MOVING; + return ACRO_TRANS_WHEELIE_LOWERING_MOVING; } gPlayerAvatar.acroBikeState = ACRO_STATE_WHEELIE_STANDING; return CheckMovementInputAcroBike(ptr, newKeys, heldKeys); @@ -454,20 +473,20 @@ static u8 AcroBikeHandleInputWheelieMoving(u8 *ptr, u16 newKeys, u16 heldKeys) { *ptr = direction; gPlayerAvatar.acroBikeState = ACRO_STATE_WHEELIE_STANDING; - gPlayerAvatar.running2 = 0; - sub_80E6024(); - return 5; + gPlayerAvatar.runningState = NOT_MOVING; + Bike_SetBikeStill(); + return ACRO_TRANS_WHEELIE_IDLE; } - if (direction != *ptr && gPlayerAvatar.running2 != 2) + if (direction != *ptr && gPlayerAvatar.runningState != MOVING) { - gPlayerAvatar.running2 = 0; - return 5; + gPlayerAvatar.runningState = NOT_MOVING; + return ACRO_TRANS_WHEELIE_IDLE; } - gPlayerAvatar.running2 = 2; - return 10; + gPlayerAvatar.runningState = MOVING; + return ACRO_TRANS_WHEELIE_MOVING; } -static u8 AcroBikeHandleInputState5(u8 *ptr, u16 newKeys, u16 heldKeys) +static u8 AcroBikeHandleInputSidewaysJump(u8 *ptr, u16 newKeys, u16 heldKeys) { struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; @@ -477,18 +496,19 @@ static u8 AcroBikeHandleInputState5(u8 *ptr, u16 newKeys, u16 heldKeys) return CheckMovementInputAcroBike(ptr, newKeys, heldKeys); } -static u8 AcroBikeHandleInputState6(u8 *ptr, u16 newKeys, u16 heldKeys) +static u8 AcroBikeHandleInputTurnJump(u8 *ptr, u16 newKeys, u16 heldKeys) { gPlayerAvatar.acroBikeState = ACRO_STATE_NORMAL; return CheckMovementInputAcroBike(ptr, newKeys, heldKeys); } +// Face vs Turn: Face has no anim while Turn does. Turn checks for collision because if you turn right as opposed to face right, if there is a wall there, turn will make a bonk sound effect while face will not. static void AcroBikeTransition_FaceDirection(u8 direction) { PlayerFaceDirection(direction); } -static void AcroBikeTransition_80E5708(u8 direction) +static void AcroBikeTransition_TurnDirection(u8 direction) { struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; @@ -497,7 +517,7 @@ static void AcroBikeTransition_80E5708(u8 direction) PlayerFaceDirection(direction); } -static void AcroBikeTransition_80E5744(u8 direction) +static void AcroBikeTransition_Moving(u8 direction) { u8 collision; struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; @@ -530,41 +550,41 @@ static void AcroBikeTransition_NormalToWheelie(u8 direction) PlayerStartWheelie(direction); } -static void AcroBikeTransition_80E57F8(u8 direction) +static void AcroBikeTransition_WheelieToNormal(u8 direction) { struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; if (CanBikeFaceDirOnMetatile(direction, playerMapObj->mapobj_unk_1E) == 0) direction = playerMapObj->placeholder18; - sub_8059534(direction); + PlayerEndWheelie(direction); } -static void AcroBikeTransition_80E5834(u8 direction) +static void AcroBikeTransition_WheelieIdle(u8 direction) { struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; if (CanBikeFaceDirOnMetatile(direction, playerMapObj->mapobj_unk_1E) == 0) direction = playerMapObj->placeholder18; - sub_8059504(direction); + PlayerIdleWheelie(direction); } -static void AcroBikeTransition_80E5870(u8 direction) +static void AcroBikeTransition_WheelieHoppingStanding(u8 direction) { struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; if (CanBikeFaceDirOnMetatile(direction, playerMapObj->mapobj_unk_1E) == 0) direction = playerMapObj->placeholder18; - sub_805954C(direction); + PlayerStandingHoppingWheelie(direction); } -static void AcroBikeTransition_80E58AC(u8 direction) +static void AcroBikeTransition_WheelieHoppingMoving(u8 direction) { u8 var; struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; if (CanBikeFaceDirOnMetatile(direction, playerMapObj->mapobj_unk_1E) == 0) { - AcroBikeTransition_80E5870(playerMapObj->placeholder18); + AcroBikeTransition_WheelieHoppingStanding(playerMapObj->placeholder18); return; } var = get_some_collision(direction); @@ -575,23 +595,23 @@ static void AcroBikeTransition_80E58AC(u8 direction) } else if (var == 6) { - sub_8059594(direction); + PlayerLedgeHoppingWheelie(direction); } else if (var < 5 || var > 8) { if (var <= 11) { - AcroBikeTransition_80E5870(direction); + AcroBikeTransition_WheelieHoppingStanding(direction); } else { derp: - sub_8059570(direction); + PlayerMovingHoppingWheelie(direction); } } } -static void AcroBikeTransition_80E5920(u8 direction) +static void AcroBikeTransition_SideJump(u8 direction) { u8 var; struct MapObject *playerMapObj; @@ -603,12 +623,12 @@ static void AcroBikeTransition_80E5920(u8 direction) return; if (var < 10) { - AcroBikeTransition_80E5708(direction); + AcroBikeTransition_TurnDirection(direction); return; } - if (sub_80E5EC0(var, direction) == 0) + if (WillPlayerCollideWithCollision(var, direction) == FALSE) { - AcroBikeTransition_80E5708(direction); + AcroBikeTransition_TurnDirection(direction); return; } } @@ -618,19 +638,19 @@ static void AcroBikeTransition_80E5920(u8 direction) PlayerSetAnimId(sub_80608A4(direction), 2); } -static void AcroBikeTransition_80E5990(u8 direction) +static void AcroBikeTransition_TurnJump(u8 direction) { - sub_80595B8(direction); + PlayerAcroTurnJump(direction); } -static void AcroBikeTransition_80E59A0(u8 direction) +static void AcroBikeTransition_WheelieMoving(u8 direction) { u8 var; struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; if (CanBikeFaceDirOnMetatile(direction, playerMapObj->mapobj_unk_1E) == 0) { - sub_8059504(playerMapObj->placeholder18); + PlayerIdleWheelie(playerMapObj->placeholder18); return; } var = get_some_collision(direction); @@ -638,26 +658,26 @@ static void AcroBikeTransition_80E59A0(u8 direction) { if (var == 6) { - sub_8059594(direction); + PlayerLedgeHoppingWheelie(direction); } else if (var == 9) { - sub_8059504(direction); + PlayerIdleWheelie(direction); } else if (var <= 4) { if (MetatileBehavior_IsBumpySlope(playerMapObj->mapobj_unk_1E)) - sub_8059504(direction); + PlayerIdleWheelie(direction); else sub_80595DC(direction); //hit wall? } return; } sub_8059618(direction); - gPlayerAvatar.running2 = 2; + gPlayerAvatar.runningState = MOVING; } -static void AcroBikeTransition_80E5A30(u8 direction) +static void AcroBikeTransition_WheelieRisingMoving(u8 direction) { u8 var; struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; @@ -672,33 +692,33 @@ static void AcroBikeTransition_80E5A30(u8 direction) { if (var == 6) { - sub_8059594(direction); + PlayerLedgeHoppingWheelie(direction); } else if (var == 9) { - sub_8059504(direction); + PlayerIdleWheelie(direction); } else if (var <= 4) { if (MetatileBehavior_IsBumpySlope(playerMapObj->mapobj_unk_1E)) - sub_8059504(direction); + PlayerIdleWheelie(direction); else sub_80595DC(direction); //hit wall? } return; } sub_8059600(direction); - gPlayerAvatar.running2 = 2; + gPlayerAvatar.runningState = MOVING; } -static void AcroBikeTransition_80E5AC0(u8 direction) +static void AcroBikeTransition_WheelieLoweringMoving(u8 direction) { u8 var; struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; if (CanBikeFaceDirOnMetatile(direction, playerMapObj->mapobj_unk_1E) == 0) { - sub_8059534(playerMapObj->placeholder18); + PlayerEndWheelie(playerMapObj->placeholder18); return; } var = get_some_collision(direction); @@ -707,115 +727,115 @@ static void AcroBikeTransition_80E5AC0(u8 direction) if (var == 6) PlayerJumpLedge(direction); else if (var < 5 || var > 8) - sub_8059534(direction); + PlayerEndWheelie(direction); return; } sub_8059630(direction); } -void sub_80E5B38(u16 a, u16 b) +void Bike_TryAcroBikeHistoryUpdate(u16 newKeys, u16 heldKeys) { if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_ACRO_BIKE) - sub_80E5B60(a, b); + AcroBike_TryHistoryUpdate(newKeys, heldKeys); } -static void sub_80E5B60(u16 unused, u16 b) +static void AcroBike_TryHistoryUpdate(u16 newKeys, u16 heldKeys) // newKeys is unused { - u8 var; + u8 direction = Bike_DPadToDirection(heldKeys); - var = sub_80E5CF4(b); - if (var == (gPlayerAvatar.unkC & 0xF)) + if (direction == (gPlayerAvatar.directionHistory & 0xF)) { - if (gPlayerAvatar.unk14[0] < 0xFF) - gPlayerAvatar.unk14[0]++; + // increment the timer for direction history since last input. + if (gPlayerAvatar.dirTimerHistory[0] < 0xFF) + gPlayerAvatar.dirTimerHistory[0]++; } else { - sub_80E5C7C(var); - gPlayerAvatar.unkB = 0; + Bike_UpdateDirTimerHistory(direction); + gPlayerAvatar.bikeSpeed = SPEED_STANDING; } - var = b & 0xF; - if (var == (gPlayerAvatar.unk10 & 0xF)) + direction = heldKeys & (A_BUTTON | B_BUTTON | SELECT_BUTTON | START_BUTTON); // directions is reused for some reason. + if (direction == (gPlayerAvatar.abStartSelectHistory & 0xF)) { - if (gPlayerAvatar.unk1C[0] < 0xFF) - gPlayerAvatar.unk1C[0]++; + if (gPlayerAvatar.abStartSelectTimerHistory[0] < 0xFF) + gPlayerAvatar.abStartSelectTimerHistory[0]++; } else { - sub_80E5CB8(var); - gPlayerAvatar.unkB = 0; + Bike_UpdateABStartSelectHistory(direction); + gPlayerAvatar.bikeSpeed = SPEED_STANDING; } } -static bool8 sub_80E5BC8(const u8 *a, const u8 *b) +static bool8 HasPlayerInputTakenLongerThanList(const u8 *dirTimerList, const u8 *abStartSelectTimerList) { u8 i; - for (i = 0; a[i] != 0; i++) + for (i = 0; dirTimerList[i] != 0; i++) { - if (gPlayerAvatar.unk14[i] > a[i]) + if (gPlayerAvatar.dirTimerHistory[i] > dirTimerList[i]) return FALSE; } - for (i = 0; b[i] != 0; i++) + for (i = 0; abStartSelectTimerList[i] != 0; i++) { - if (gPlayerAvatar.unk1C[i] > b[i]) + if (gPlayerAvatar.abStartSelectTimerHistory[i] > abStartSelectTimerList[i]) return FALSE; } return TRUE; } -static u8 sub_80E5C2C(void) +static u8 AcroBike_GetJumpDirection(void) { u32 i; for (i = 0; i < 4; i++) { - const struct UnknownStruct1 *s = &gUnknown_083DB608[i]; - u32 r1 = gPlayerAvatar.unkC; - u32 r2 = gPlayerAvatar.unk10; - - r1 &= s->unk8; - r2 &= s->unkC; - if (r1 == s->unk0 && r2 == s->unk4 && sub_80E5BC8(s->unk10, s->unk14)) - return s->unk18; + const struct BikeHistoryInputInfo *historyInputInfo = &gAcroBikeJumpInputList[i]; + u32 dirHistory = gPlayerAvatar.directionHistory; + u32 abStartSelectHistory = gPlayerAvatar.abStartSelectHistory; + + dirHistory &= historyInputInfo->dirHistoryMask; + abStartSelectHistory &= historyInputInfo->abStartSelectHistoryMask; + if (dirHistory == historyInputInfo->dirHistoryMatch && abStartSelectHistory == historyInputInfo->abStartSelectHistoryMatch && HasPlayerInputTakenLongerThanList(historyInputInfo->dirTimerHistoryList, historyInputInfo->abStartSelectHistoryList)) + return historyInputInfo->direction; } return 0; } -static void sub_80E5C7C(u8 a) +static void Bike_UpdateDirTimerHistory(u8 dir) { u8 i; - gPlayerAvatar.unkC = (gPlayerAvatar.unkC << 4) | (a & 0xF); + gPlayerAvatar.directionHistory = (gPlayerAvatar.directionHistory << 4) | (dir & 0xF); for (i = 7; i != 0; i--) - gPlayerAvatar.unk14[i] = gPlayerAvatar.unk14[i - 1]; - gPlayerAvatar.unk14[0] = 1; + gPlayerAvatar.dirTimerHistory[i] = gPlayerAvatar.dirTimerHistory[i - 1]; + gPlayerAvatar.dirTimerHistory[0] = 1; } -static void sub_80E5CB8(u8 a) +static void Bike_UpdateABStartSelectHistory(u8 input) { u8 i; - gPlayerAvatar.unk10 = (gPlayerAvatar.unk10 << 4) | (a & 0xF); + gPlayerAvatar.abStartSelectHistory = (gPlayerAvatar.abStartSelectHistory << 4) | (input & 0xF); for (i = 7; i != 0; i--) - gPlayerAvatar.unk1C[i] = gPlayerAvatar.unk1C[i - 1]; - gPlayerAvatar.unk1C[0] = 1; + gPlayerAvatar.abStartSelectTimerHistory[i] = gPlayerAvatar.abStartSelectTimerHistory[i - 1]; + gPlayerAvatar.abStartSelectTimerHistory[0] = 1; } -static u8 sub_80E5CF4(u16 a) +static u8 Bike_DPadToDirection(u16 heldKeys) { - if (a & 0x40) - return 2; - if (a & 0x80) - return 1; - if (a & 0x20) - return 3; - if (a & 0x10) - return 4; - return 0; + if (heldKeys & DPAD_UP) + return DIR_NORTH; + if (heldKeys & DPAD_DOWN) + return DIR_SOUTH; + if (heldKeys & DPAD_LEFT) + return DIR_WEST; + if (heldKeys & DPAD_RIGHT) + return DIR_EAST; + return DIR_NONE; } static u8 get_some_collision(u8 direction) @@ -829,10 +849,10 @@ static u8 get_some_collision(u8 direction) y = playerMapObj->coords2.y; MoveCoords(direction, &x, &y); metatitleBehavior = MapGridGetMetatileBehaviorAt(x, y); - return sub_80E5DA0(playerMapObj, x, y, direction, metatitleBehavior); + return Bike_CheckCollisionTryAdvanceCollisionCount(playerMapObj, x, y, direction, metatitleBehavior); } -static u8 sub_80E5DA0(struct MapObject *mapObject, s16 x, s16 y, u8 direction, u8 metatitleBehavior) +static u8 Bike_CheckCollisionTryAdvanceCollisionCount(struct MapObject *mapObject, s16 x, s16 y, u8 direction, u8 metatitleBehavior) { u8 collision = CheckForFieldObjectCollision(mapObject, x, y, direction, metatitleBehavior); @@ -843,7 +863,7 @@ static u8 sub_80E5DA0(struct MapObject *mapObject, s16 x, s16 y, u8 direction, u collision = 2; if (collision) - sub_80E5E4C(); + Bike_TryAdvanceCyclingRoadCollisions(); return collision; } @@ -865,10 +885,10 @@ static bool8 IsRunningDisallowedByMetatile(u8 tile) return FALSE; } -static void sub_80E5E4C(void) +static void Bike_TryAdvanceCyclingRoadCollisions(void) { - if (gUnknown_02039250 != 0 && gUnknown_02039251 < 100) - gUnknown_02039251++; + if (gBikeCyclingChallenge != FALSE && gBikeCollisions < 100) + gBikeCollisions++; } static bool8 CanBikeFaceDirOnMetatile(u8 direction, u8 tile) @@ -890,14 +910,14 @@ static bool8 CanBikeFaceDirOnMetatile(u8 direction, u8 tile) return TRUE; } -static bool8 sub_80E5EC0(u8 var1, u8 direction) +static bool8 WillPlayerCollideWithCollision(u8 newTileCollision, u8 direction) { if (direction == DIR_NORTH || direction == DIR_SOUTH) { - if (var1 == 10 || var1 == 12) + if (newTileCollision == 10 || newTileCollision == 12) return FALSE; } - else if (var1 == 11 || var1 == 13) + else if (newTileCollision == 11 || newTileCollision == 13) { return FALSE; } @@ -930,7 +950,7 @@ bool8 player_should_look_direction_be_enforced_upon_movement(void) void GetOnOffBike(u8 var) { - gUnknown_0202E854 = 0; + gUnusedBikeCameraAheadPanback = FALSE; if (gPlayerAvatar.flags & (PLAYER_AVATAR_FLAG_MACH_BIKE | PLAYER_AVATAR_FLAG_ACRO_BIKE)) { @@ -946,34 +966,34 @@ void GetOnOffBike(u8 var) } } -void BikeClearState(int var1, int var2) +void BikeClearState(int newDirHistory, int newAbStartHistory) { u8 i; gPlayerAvatar.acroBikeState = ACRO_STATE_NORMAL; - gPlayerAvatar.unk9 = 0; + gPlayerAvatar.newDirBackup = DIR_NONE; gPlayerAvatar.bikeFrameCounter = 0; - gPlayerAvatar.unkB = 0; - gPlayerAvatar.unkC = var1; - gPlayerAvatar.unk10 = var2; + gPlayerAvatar.bikeSpeed = SPEED_STANDING; + gPlayerAvatar.directionHistory = newDirHistory; + gPlayerAvatar.abStartSelectHistory = newAbStartHistory; for (i = 0; i < 8; i++) - gPlayerAvatar.unk14[i] = 0; + gPlayerAvatar.dirTimerHistory[i] = 0; for (i = 0; i < 8; i++) - gPlayerAvatar.unk1C[i] = 0; + gPlayerAvatar.abStartSelectTimerHistory[i] = 0; } -void sub_80E6010(u8 var) +void Bike_UpdateBikeCounterSpeed(u8 counter) { - gPlayerAvatar.bikeFrameCounter = var; - gPlayerAvatar.unkB = gPlayerAvatar.bikeFrameCounter + (gPlayerAvatar.bikeFrameCounter >> 1); // lazy way of multiplying by 1.5. + gPlayerAvatar.bikeFrameCounter = counter; + gPlayerAvatar.bikeSpeed = gPlayerAvatar.bikeFrameCounter + (gPlayerAvatar.bikeFrameCounter >> 1); // lazy way of multiplying by 1.5. } -static void sub_80E6024(void) +static void Bike_SetBikeStill(void) { gPlayerAvatar.bikeFrameCounter = 0; - gPlayerAvatar.unkB = 0; + gPlayerAvatar.bikeSpeed = SPEED_STANDING; } s16 GetPlayerSpeed(void) @@ -993,7 +1013,7 @@ s16 GetPlayerSpeed(void) return SPEED_NORMAL; } -void sub_80E6084(void) +void Bike_HandleBumpySlopeJump(void) { s16 x, y; u8 tileBehavior; diff --git a/src/field/field_camera.c b/src/field/field_camera.c index db51cf054..a29f4c49f 100644 --- a/src/field/field_camera.c +++ b/src/field/field_camera.c @@ -7,7 +7,7 @@ #include "sprite.h" #include "text.h" -EWRAM_DATA u8 gUnknown_0202E854 = 0; +EWRAM_DATA bool8 gUnusedBikeCameraAheadPanback = FALSE; struct UnknownStruct { @@ -455,13 +455,14 @@ static void CameraPanningCB_PanAhead(void) { u8 var; - if (gUnknown_0202E854 == 0) + if (gUnusedBikeCameraAheadPanback == FALSE) { InstallCameraPanAheadCallback(); } else { - if (gPlayerAvatar.running1 == 1) + // this code is never reached. + if (gPlayerAvatar.tileTransitionState == T_TILE_TRANSITION) { gUnknown_0300059C ^= 1; if (gUnknown_0300059C == 0) diff --git a/src/field/field_control_avatar.c b/src/field/field_control_avatar.c index ff8e8504c..65357ac83 100644 --- a/src/field/field_control_avatar.c +++ b/src/field/field_control_avatar.c @@ -124,8 +124,8 @@ void FieldClearPlayerInput(struct FieldInput *input) void FieldGetPlayerInput(struct FieldInput *input, u16 newKeys, u16 heldKeys) { - u8 r6 = gPlayerAvatar.running1; - u8 r9 = gPlayerAvatar.running2; + u8 r6 = gPlayerAvatar.tileTransitionState; + u8 r9 = gPlayerAvatar.runningState; bool8 forcedMove = MetatileBehavior_IsMoveTile(cur_mapdata_block_role_at_player_pos(r9)); if ((r6 == 2 && forcedMove == FALSE) || r6 == 0) diff --git a/src/field/field_effect.c b/src/field/field_effect.c index afe020ac7..d86d6e5cd 100644 --- a/src/field/field_effect.c +++ b/src/field/field_effect.c @@ -1287,7 +1287,7 @@ bool8 sub_80867AC(struct Task *task) // gUnknown_0839F2CC[0] playerSprite = &gSprites[gPlayerAvatar.spriteId]; CameraObjectReset2(); gMapObjects[gPlayerAvatar.mapObjectId].mapobj_bit_13 = 1; - gPlayerAvatar.unk6 = 1; + gPlayerAvatar.preventStep = TRUE; FieldObjectSetSpecialAnim(playerObject, GetFaceDirectionAnimId(player_get_direction_lower_nybble())); task->data[4] = playerSprite->subspriteMode; playerObject->mapobj_bit_26 = 1; @@ -1382,7 +1382,7 @@ bool8 sub_80869B8(struct Task *task) bool8 sub_80869F8(struct Task *task) { - gPlayerAvatar.unk6 = 0; + gPlayerAvatar.preventStep = FALSE; ScriptContext2_Disable(); CameraObjectReset1(); UnfreezeMapObjects(); @@ -1678,7 +1678,7 @@ void sub_8086F64(u8 taskId) bool8 sub_8086FB0(struct Task *task, struct MapObject *mapObject) { ScriptContext2_Enable(); - gPlayerAvatar.unk6 = 1; + gPlayerAvatar.preventStep = TRUE; task->data[0]++; return FALSE; } @@ -1725,7 +1725,7 @@ bool8 sub_8087058(struct Task *task, struct MapObject *mapObject) return TRUE; } ScriptContext2_Disable(); - gPlayerAvatar.unk6 = 0; + gPlayerAvatar.preventStep = FALSE; DestroyTask(FindTaskIdByFunc(sub_8086F64)); FieldEffectActiveListRemove(FLDEFF_USE_WATERFALL); return FALSE; @@ -1751,7 +1751,7 @@ void Task_Dive(u8 taskId) bool8 sub_8087124(struct Task *task) { - gPlayerAvatar.unk6 = 1; + gPlayerAvatar.preventStep = TRUE; task->data[0]++; return FALSE; } @@ -1796,7 +1796,7 @@ bool8 sub_808722C(struct Task *task, struct MapObject *mapObject, struct Sprite FreezeMapObjects(); CameraObjectReset2(); SetCameraPanningCallback(NULL); - gPlayerAvatar.unk6 = 1; + gPlayerAvatar.preventStep = TRUE; mapObject->mapobj_bit_26 = 1; task->data[1] = 1; task->data[0]++; @@ -1913,7 +1913,7 @@ bool8 sub_80874CC(struct Task *task, struct MapObject *mapObject, struct Sprite { CameraObjectReset2(); FreezeMapObjects(); - gPlayerAvatar.unk6 = 1; + gPlayerAvatar.preventStep = TRUE; mapObject->mapobj_bit_13 = 1; task->data[0]++; return FALSE; @@ -1951,7 +1951,7 @@ bool8 sub_808759C(struct Task *task, struct MapObject *mapObject, struct Sprite { if (FieldObjectClearAnimIfSpecialAnimFinished(mapObject)) { - gPlayerAvatar.unk6 = 0; + gPlayerAvatar.preventStep = FALSE; ScriptContext2_Disable(); UnfreezeMapObjects(); DestroyTask(FindTaskIdByFunc(sub_8087470)); @@ -1996,7 +1996,7 @@ bool8 sub_80876C8(struct Task *task, struct MapObject *mapObject, struct Sprite { FreezeMapObjects(); CameraObjectReset2(); - gPlayerAvatar.unk6 = 1; + gPlayerAvatar.preventStep = TRUE; mapObject->mapobj_bit_26 = 1; task->data[0]++; return FALSE; @@ -2893,7 +2893,7 @@ void sub_8088984(struct Task *task) { ScriptContext2_Enable(); FreezeMapObjects(); - gPlayerAvatar.unk6 = 1; + gPlayerAvatar.preventStep = TRUE; SetPlayerAvatarStateMask(8); PlayerGetDestCoords(&task->data[1], &task->data[2]); MoveCoords(gMapObjects[gPlayerAvatar.mapObjectId].placeholder18, &task->data[1], &task->data[2]); @@ -2947,7 +2947,7 @@ void sub_8088AF4(struct Task *task) mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; if (FieldObjectClearAnimIfSpecialAnimFinished(mapObject)) { - gPlayerAvatar.unk6 = 0; + gPlayerAvatar.preventStep = FALSE; gPlayerAvatar.flags &= 0xdf; FieldObjectSetSpecialAnim(mapObject, GetFaceDirectionAnimId(mapObject->placeholder18)); sub_8127ED0(mapObject->mapobj_unk_1A, 1); @@ -3024,7 +3024,7 @@ void sub_8088CA0(struct Task *task) if (!FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(mapObject) || FieldObjectClearAnimIfSpecialAnimFinished(mapObject)) { task->data[15] = gPlayerAvatar.flags; - gPlayerAvatar.unk6 = 0x01; + gPlayerAvatar.preventStep = TRUE; SetPlayerAvatarStateMask(1); sub_8059BF4(); FieldObjectSetSpecialAnim(mapObject, 0x39); @@ -3296,7 +3296,7 @@ void sub_80892A0(struct Task *task) task->data[0]++; task->data[2] = 17; task->data[15] = gPlayerAvatar.flags; - gPlayerAvatar.unk6 = 1; + gPlayerAvatar.preventStep = TRUE; SetPlayerAvatarStateMask(0x01); if (task->data[15] & 0x08) { @@ -3398,7 +3398,7 @@ void fishE(struct Task *task) sub_805B980(mapObject, GetPlayerAvatarGraphicsIdByStateId(state)); FieldObjectTurn(mapObject, DIR_SOUTH); gPlayerAvatar.flags = task->data[15]; - gPlayerAvatar.unk6 = 0; + gPlayerAvatar.preventStep = FALSE; FieldEffectActiveListRemove(FLDEFF_FLY_IN); DestroyTask(FindTaskIdByFunc(sub_8089270)); } diff --git a/src/field/field_map_obj.c b/src/field/field_map_obj.c index 0cba448a9..9d37d90ad 100644 --- a/src/field/field_map_obj.c +++ b/src/field/field_map_obj.c @@ -5010,7 +5010,7 @@ u8 mss_npc_reset_oampriv3_1_unk2_unk3(struct MapObject *mapObject, struct Sprite u8 sub_805F364(struct MapObject *mapObject, struct Sprite *sprite) { - if (gMapObjects[gPlayerAvatar.mapObjectId].mapobj_unk_1C == 0xFF || gPlayerAvatar.running1 == 2) + if (gMapObjects[gPlayerAvatar.mapObjectId].mapobj_unk_1C == 0xFF || gPlayerAvatar.tileTransitionState == T_TILE_CENTER) { return 0; } @@ -5172,7 +5172,7 @@ fieldmap_object_cb(sub_805F8E0, sub_805F904, gUnknown_083755C0); u8 mss_08062EA4(struct MapObject *mapObject, struct Sprite *sprite) { - if (gMapObjects[gPlayerAvatar.mapObjectId].mapobj_unk_1C == 0xFF || gPlayerAvatar.running1 == 2) + if (gMapObjects[gPlayerAvatar.mapObjectId].mapobj_unk_1C == 0xFF || gPlayerAvatar.tileTransitionState == T_TILE_CENTER) { return 0; } diff --git a/src/field/field_player_avatar.c b/src/field/field_player_avatar.c index 6c1c9123a..563550f07 100644 --- a/src/field/field_player_avatar.c +++ b/src/field/field_player_avatar.c @@ -31,7 +31,7 @@ static bool8 sub_8058854(struct MapObject *, u8); static void npc_clear_strange_bits(struct MapObject *a); static void MovePlayerAvatarUsingKeypadInput(u8 a, u16 b, u16 c); static void PlayerAllowForcedMovementIfMovingSameDirection(void); -static u8 TryDoMetatileBehaviorForcedMovement(void); +static bool8 TryDoMetatileBehaviorForcedMovement(void); static u8 GetForcedMovementByMetatileBehavior(void); static void MovePlayerNotOnBike(u8 a, u16 b); static u8 CheckMovementInputNotOnBike(u8 a); @@ -49,7 +49,7 @@ static void PlayerNotOnBikeCollide(u8 a); static void PlayCollisionSoundIfNotFacingWarp(u8 a); static void sub_8059D60(struct MapObject *a); static void StartStrengthAnim(u8 a, u8 b); -static void sub_8059F94(void); +static void DoPlayerMatJump(void); static void sub_805A06C(void); static bool8 (*const gUnknown_0830FB58[])(u8) = @@ -73,7 +73,7 @@ static bool8 (*const gUnknown_0830FB58[])(u8) = MetatileBehavior_0xBC, MetatileBehavior_IsMuddySlope, }; -static u8 (*const gUnknown_0830FBA0[])(void) = +static bool8 (*const gUnknown_0830FBA0[])(void) = { ForcedMovement_None, ForcedMovement_Slip, @@ -91,7 +91,7 @@ static u8 (*const gUnknown_0830FBA0[])(void) = ForcedMovement_SlideWest, ForcedMovement_SlideEast, sub_8058B0C, - sub_8058C04, + ForcedMovement_MatJump, sub_8058C10, ForcedMovement_MuddySlope, }; @@ -182,9 +182,9 @@ static u8 (*const gUnknown_0830FC88[])(struct Task *, struct MapObject *, struct sub_8059EA4, sub_8059F40, }; -static u8 (*const gUnknown_0830FC94[])(struct Task *, struct MapObject *) = +static u8 (*const sPlayerAvatarSecretBaseMatJump[])(struct Task *, struct MapObject *) = { - sub_805A000, + PlayerAvatar_DoSecretBaseMatJump, }; static u8 (*const gUnknown_0830FC98[])(struct Task *, struct MapObject *) = { @@ -201,9 +201,9 @@ void player_step(u8 direction, u16 newKeys, u16 heldKeys) struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; sub_8059D60(playerMapObj); - if (gPlayerAvatar.unk6 == 0) + if (gPlayerAvatar.preventStep == FALSE) { - sub_80E5B38(newKeys, heldKeys); + Bike_TryAcroBikeHistoryUpdate(newKeys, heldKeys); if (!sub_8058854(playerMapObj, direction)) { npc_clear_strange_bits(playerMapObj); @@ -256,11 +256,11 @@ static void MovePlayerAvatarUsingKeypadInput(u8 direction, u16 newKeys, u16 held static void PlayerAllowForcedMovementIfMovingSameDirection(void) { - if (gPlayerAvatar.running2 == 2) + if (gPlayerAvatar.runningState == MOVING) gPlayerAvatar.flags &= ~PLAYER_AVATAR_FLAG_5; } -static u8 TryDoMetatileBehaviorForcedMovement(void) +static bool8 TryDoMetatileBehaviorForcedMovement(void) { return gUnknown_0830FBA0[GetForcedMovementByMetatileBehavior()](); } @@ -282,7 +282,7 @@ static u8 GetForcedMovementByMetatileBehavior(void) return 0; } -u8 ForcedMovement_None(void) +bool8 ForcedMovement_None(void) { if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_6) { @@ -293,7 +293,7 @@ u8 ForcedMovement_None(void) FieldObjectSetDirection(playerMapObj, playerMapObj->mapobj_unk_18); gPlayerAvatar.flags &= ~PLAYER_AVATAR_FLAG_6; } - return 0; + return FALSE; } static u8 DoForcedMovement(u8 direction, void (*b)(u8)) @@ -314,13 +314,13 @@ static u8 DoForcedMovement(u8 direction, void (*b)(u8)) if (collisionType == COLLISION_LEDGE_JUMP) PlayerJumpLedge(direction); playerAvatar->flags |= PLAYER_AVATAR_FLAG_6; - playerAvatar->running2 = 2; + playerAvatar->runningState = MOVING; return 1; } } else { - playerAvatar->running2 = 2; + playerAvatar->runningState = MOVING; b(direction); return 1; } @@ -334,47 +334,47 @@ static u8 DoForcedMovementInCurrentDirection(void (*a)(u8)) return DoForcedMovement(playerMapObj->placeholder18, a); } -u8 ForcedMovement_Slip(void) +bool8 ForcedMovement_Slip(void) { - return DoForcedMovementInCurrentDirection(sub_80593C4); + return DoForcedMovementInCurrentDirection(PlayerGoSpeed2); } -u8 sub_8058AAC(void) +bool8 sub_8058AAC(void) { - return DoForcedMovement(1, PlayerGoSpeed0); + return DoForcedMovement(1, PlayerGoSpeed1); } -u8 sub_8058AC4(void) +bool8 sub_8058AC4(void) { - return DoForcedMovement(2, PlayerGoSpeed0); + return DoForcedMovement(2, PlayerGoSpeed1); } -u8 sub_8058ADC(void) +bool8 sub_8058ADC(void) { - return DoForcedMovement(3, PlayerGoSpeed0); + return DoForcedMovement(3, PlayerGoSpeed1); } -u8 sub_8058AF4(void) +bool8 sub_8058AF4(void) { - return DoForcedMovement(4, PlayerGoSpeed0); + return DoForcedMovement(4, PlayerGoSpeed1); } -u8 sub_8058B0C(void) +bool8 sub_8058B0C(void) { return DoForcedMovement(1, npc_use_some_d2s); } -u8 sub_8058B24(void) +bool8 sub_8058B24(void) { return DoForcedMovement(2, npc_use_some_d2s); } -u8 sub_8058B3C(void) +bool8 sub_8058B3C(void) { return DoForcedMovement(3, npc_use_some_d2s); } -u8 sub_8058B54(void) +bool8 sub_8058B54(void) { return DoForcedMovement(4, npc_use_some_d2s); } @@ -388,51 +388,51 @@ static u8 ForcedMovement_Slide(u8 direction, void (*b)(u8)) return DoForcedMovement(direction, b); } -u8 ForcedMovement_SlideSouth(void) +bool8 ForcedMovement_SlideSouth(void) { - return ForcedMovement_Slide(1, sub_80593C4); + return ForcedMovement_Slide(1, PlayerGoSpeed2); } -u8 ForcedMovement_SlideNorth(void) +bool8 ForcedMovement_SlideNorth(void) { - return ForcedMovement_Slide(2, sub_80593C4); + return ForcedMovement_Slide(2, PlayerGoSpeed2); } -u8 ForcedMovement_SlideWest(void) +bool8 ForcedMovement_SlideWest(void) { - return ForcedMovement_Slide(3, sub_80593C4); + return ForcedMovement_Slide(3, PlayerGoSpeed2); } -u8 ForcedMovement_SlideEast(void) +bool8 ForcedMovement_SlideEast(void) { - return ForcedMovement_Slide(4, sub_80593C4); + return ForcedMovement_Slide(4, PlayerGoSpeed2); } -u8 sub_8058C04(void) +bool8 ForcedMovement_MatJump(void) { - sub_8059F94(); - return 1; + DoPlayerMatJump(); + return TRUE; } -u8 sub_8058C10(void) +bool8 sub_8058C10(void) { sub_805A06C(); - return 1; + return TRUE; } -u8 ForcedMovement_MuddySlope(void) +bool8 ForcedMovement_MuddySlope(void) { struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; if (playerMapObj->placeholder18 != 2 || GetPlayerSpeed() <= 3) { - sub_80E6010(0); + Bike_UpdateBikeCounterSpeed(0); playerMapObj->mapobj_bit_9 = 1; - return DoForcedMovement(1, sub_80593C4); + return DoForcedMovement(1, PlayerGoSpeed2); } else { - return 0; + return FALSE; } } @@ -445,17 +445,17 @@ static u8 CheckMovementInputNotOnBike(u8 direction) { if (direction == DIR_NONE) { - gPlayerAvatar.running2 = 0; + gPlayerAvatar.runningState = NOT_MOVING; return 0; } - else if (direction != player_get_direction_upper_nybble() && gPlayerAvatar.running2 != 2) + else if (direction != player_get_direction_upper_nybble() && gPlayerAvatar.runningState != MOVING) { - gPlayerAvatar.running2 = 1; + gPlayerAvatar.runningState = TURN_FRAME; return 1; } else { - gPlayerAvatar.running2 = 2; + gPlayerAvatar.runningState = MOVING; return 2; } } @@ -486,7 +486,8 @@ void sub_8058D0C(u8 direction, u16 heldKeys) case 0: if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_SURFING) { - sub_80593C4(direction); + // speed 2 is fast, same speed as running + PlayerGoSpeed2(direction); return; } if (!(gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_4) && (heldKeys & B_BUTTON) && FlagGet(SYS_B_DASH) @@ -497,7 +498,7 @@ void sub_8058D0C(u8 direction, u16 heldKeys) } else { - PlayerGoSpeed0(direction); + PlayerGoSpeed1(direction); } } } @@ -601,14 +602,14 @@ static void check_acro_bike_metatile(int unused1, int unused2, u8 c, u8 *d) void SetPlayerAvatarTransitionFlags(u16 a) { - gPlayerAvatar.bike |= a; + gPlayerAvatar.unk1 |= a; DoPlayerAvatarTransition(); } static void DoPlayerAvatarTransition(void) { u8 i; - u32 flags = gPlayerAvatar.bike; + u32 flags = gPlayerAvatar.unk1; if (flags != 0) { @@ -627,7 +628,7 @@ static void DoPlayerAvatarTransition(void) } #endif } - gPlayerAvatar.bike = 0; + gPlayerAvatar.unk1 = 0; } } @@ -656,7 +657,7 @@ void PlayerAvatarTransition_AcroBike(struct MapObject *a) FieldObjectTurn(a, a->placeholder18); SetPlayerAvatarStateMask(4); BikeClearState(0, 0); - sub_80E6084(); + Bike_HandleBumpySlopeJump(); } void PlayerAvatarTransition_Surfing(struct MapObject *a) @@ -689,18 +690,18 @@ void sub_80591F4(struct MapObject *a) void sub_8059204(void) { - gPlayerAvatar.running1 = 0; + gPlayerAvatar.tileTransitionState = T_NOT_MOVING; if (PlayerIsAnimActive()) { if (!PlayerCheckIfAnimFinishedOrInactive()) { if (!player_is_anim_in_certain_ranges()) - gPlayerAvatar.running1 = 1; + gPlayerAvatar.tileTransitionState = T_TILE_TRANSITION; } else { if (!sub_80592A4()) - gPlayerAvatar.running1 = 2; + gPlayerAvatar.tileTransitionState = T_TILE_CENTER; } } } @@ -721,7 +722,7 @@ static bool8 player_is_anim_in_certain_ranges(void) static bool8 sub_80592A4(void) { - if (player_is_anim_in_certain_ranges() && gPlayerAvatar.running2 != 1) + if (player_is_anim_in_certain_ranges() && gPlayerAvatar.runningState != TURN_FRAME) return TRUE; else return FALSE; @@ -761,12 +762,14 @@ void PlayerSetAnimId(u8 animId, u8 b) } } -void PlayerGoSpeed0(u8 a) +// normal speed (1 speed) +void PlayerGoSpeed1(u8 a) { PlayerSetAnimId(GetGoSpeed0AnimId(a), 2); } -void sub_80593C4(u8 a) +// fast speed (2 speed) +void PlayerGoSpeed2(u8 a) { PlayerSetAnimId(sub_8060744(a), 2); } @@ -776,7 +779,8 @@ void npc_use_some_d2s(u8 a) PlayerSetAnimId(d2s_08064034(a), 2); } -void sub_80593F4(u8 a) +// fastest speed (4 speed) +void PlayerGoSpeed4(u8 a) { PlayerSetAnimId(sub_806079C(a), 2); } @@ -816,48 +820,54 @@ void PlayerJumpLedge(u8 direction) void sub_80594C0(void) { - if (gPlayerAvatar.running1 == 2 || gPlayerAvatar.running1 == 0) + if (gPlayerAvatar.tileTransitionState == T_TILE_CENTER || gPlayerAvatar.tileTransitionState == T_NOT_MOVING) { if (player_should_look_direction_be_enforced_upon_movement()) sub_8059348(GetFaceDirectionAnimId(gMapObjects[gPlayerAvatar.mapObjectId].mapobj_unk_18)); } } -void sub_8059504(u8 a) +// wheelie idle +void PlayerIdleWheelie(u8 a) { PlayerSetAnimId(sub_80609D8(a), 1); } -//normal to wheelie +// normal to wheelie void PlayerStartWheelie(u8 a) { PlayerSetAnimId(sub_8060A04(a), 1); } -void sub_8059534(u8 a) +// wheelie to normal +void PlayerEndWheelie(u8 a) { PlayerSetAnimId(sub_8060A30(a), 1); } -void sub_805954C(u8 a) +// wheelie hopping standing +void PlayerStandingHoppingWheelie(u8 a) { PlaySE(SE_JITE_PYOKO); PlayerSetAnimId(sub_8060A5C(a), 1); } -void sub_8059570(u8 a) +// wheelie hopping moving +void PlayerMovingHoppingWheelie(u8 a) { PlaySE(SE_JITE_PYOKO); PlayerSetAnimId(sub_8060A88(a), 2); } -void sub_8059594(u8 a) +// wheelie hopping ledge +void PlayerLedgeHoppingWheelie(u8 a) { PlaySE(SE_JITE_PYOKO); PlayerSetAnimId(sub_8060AB4(a), 8); } -void sub_80595B8(u8 direction) +// acro turn jump +void PlayerAcroTurnJump(u8 direction) { PlaySE(SE_JITE_PYOKO); PlayerSetAnimId(sub_8060878(direction), 1); @@ -963,8 +973,8 @@ void sub_80597F4(void) FieldObjectSetDirection(playerMapObj, playerMapObj->mapobj_unk_18); if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_MACH_BIKE | PLAYER_AVATAR_FLAG_ACRO_BIKE)) { - sub_80E6084(); - sub_80E6010(0); + Bike_HandleBumpySlopeJump(); + Bike_UpdateBikeCounterSpeed(0); } } @@ -1060,7 +1070,6 @@ bool8 IsPlayerFacingSurfableFishableWater(void) void ClearPlayerAvatarInfo(void) { - //TODO: 0x24 should be the size of gPlayerAvatar memset(&gPlayerAvatar, 0, sizeof(struct PlayerAvatar)); } @@ -1099,7 +1108,7 @@ void SetPlayerAvatarExtraStateTransition(u8 a, u8 b) { u8 unk = GetPlayerAvatarStateTransitionByGraphicsId(a, gPlayerAvatar.gender); - gPlayerAvatar.bike |= unk | b; + gPlayerAvatar.unk1 |= unk | b; DoPlayerAvatarTransition(); } @@ -1127,8 +1136,8 @@ void InitPlayerAvatar(s16 x, s16 y, u8 direction, u8 gender) mapObject->mapobj_unk_1B = sub_8126B54(); FieldObjectTurn(mapObject, direction); ClearPlayerAvatarInfo(); - gPlayerAvatar.running2 = 0; - gPlayerAvatar.running1 = 0; + gPlayerAvatar.runningState = NOT_MOVING; + gPlayerAvatar.tileTransitionState = T_NOT_MOVING; gPlayerAvatar.mapObjectId = mapObjectId; gPlayerAvatar.spriteId = mapObject->spriteId; gPlayerAvatar.gender = gender; @@ -1212,7 +1221,7 @@ static void sub_8059E2C(u8 taskId) u8 sub_8059E84(struct Task *task, struct MapObject *b, struct MapObject *c) { ScriptContext2_Enable(); - gPlayerAvatar.unk6 = 1; + gPlayerAvatar.preventStep = TRUE; task->data[0]++; return 0; } @@ -1244,7 +1253,7 @@ u8 sub_8059F40(struct Task *task, struct MapObject *b, struct MapObject *c) { FieldObjectClearAnimIfSpecialAnimFinished(b); FieldObjectClearAnimIfSpecialAnimFinished(c); - gPlayerAvatar.unk6 = 0; + gPlayerAvatar.preventStep = FALSE; ScriptContext2_Disable(); DestroyTask(FindTaskIdByFunc(sub_8059E2C)); } @@ -1253,24 +1262,23 @@ u8 sub_8059F40(struct Task *task, struct MapObject *b, struct MapObject *c) /* Some field effect */ -static void sub_8059FB4(u8 taskId); +static void DoPlayerAvatarSecretBaseMatJump(u8 taskId); -static void sub_8059F94(void) +static void DoPlayerMatJump(void) { - u8 taskId = CreateTask(sub_8059FB4, 0xFF); - - sub_8059FB4(taskId); + DoPlayerAvatarSecretBaseMatJump(CreateTask(DoPlayerAvatarSecretBaseMatJump, 0xFF)); } -static void sub_8059FB4(u8 taskId) +static void DoPlayerAvatarSecretBaseMatJump(u8 taskId) { - while (gUnknown_0830FC94[gTasks[taskId].data[0]](&gTasks[taskId], &gMapObjects[gPlayerAvatar.mapObjectId])) + while (sPlayerAvatarSecretBaseMatJump[gTasks[taskId].data[0]](&gTasks[taskId], &gMapObjects[gPlayerAvatar.mapObjectId])) ; } -u8 sub_805A000(struct Task *task, struct MapObject *mapObject) +// because data[0] is used to call this, it can be inferred that there may have been multiple mat jump functions at one point, so the name for these groups of functions is appropriate in assuming the sole use of mat jump. +u8 PlayerAvatar_DoSecretBaseMatJump(struct Task *task, struct MapObject *mapObject) { - gPlayerAvatar.unk6 = 1; + gPlayerAvatar.preventStep = TRUE; if (FieldObjectClearAnimIfSpecialAnimFinished(mapObject)) { PlaySE(SE_DANSA); @@ -1278,9 +1286,9 @@ u8 sub_805A000(struct Task *task, struct MapObject *mapObject) task->data[1]++; if (task->data[1] > 1) { - gPlayerAvatar.unk6 = 0; - gPlayerAvatar.bike |= 0x20; - DestroyTask(FindTaskIdByFunc(sub_8059FB4)); + gPlayerAvatar.preventStep = FALSE; + gPlayerAvatar.unk1 |= 0x20; + DestroyTask(FindTaskIdByFunc(DoPlayerAvatarSecretBaseMatJump)); } } return 0; @@ -1307,7 +1315,7 @@ u8 sub_805A0D8(struct Task *task, struct MapObject *mapObject) { task->data[0]++; task->data[1] = mapObject->placeholder18; - gPlayerAvatar.unk6 = 1; + gPlayerAvatar.preventStep = TRUE; ScriptContext2_Enable(); PlaySE(SE_TK_WARPIN); return 1; @@ -1349,7 +1357,7 @@ u8 sub_805A1B8(struct Task *task, struct MapObject *mapObject) { FieldObjectSetSpecialAnim(mapObject, GetSimpleGoAnimId(GetOppositeDirection(task->data[1]))); ScriptContext2_Disable(); - gPlayerAvatar.unk6 = 0; + gPlayerAvatar.preventStep = FALSE; DestroyTask(FindTaskIdByFunc(sub_805A08C)); } return 0; @@ -1369,7 +1377,7 @@ void sub_805A20C(u8 a) Overworld_ChangeMusicToDefault(); gPlayerAvatar.flags &= ~PLAYER_AVATAR_FLAG_SURFING; gPlayerAvatar.flags |= PLAYER_AVATAR_FLAG_ON_FOOT; - gPlayerAvatar.unk6 = 1; + gPlayerAvatar.preventStep = TRUE; taskId = CreateTask(taskFF_0805D1D4, 0xFF); gTasks[taskId].data[0] = a; taskFF_0805D1D4(taskId); @@ -1397,7 +1405,7 @@ static void sub_805A2D0(u8 taskId) { sub_805B980(playerMapObj, GetPlayerAvatarGraphicsIdByStateId(0)); FieldObjectSetSpecialAnim(playerMapObj, GetFaceDirectionAnimId(playerMapObj->mapobj_unk_18)); - gPlayerAvatar.unk6 = 0; + gPlayerAvatar.preventStep = FALSE; ScriptContext2_Disable(); DestroySprite(&gSprites[playerMapObj->mapobj_unk_1A]); DestroyTask(taskId); @@ -1462,7 +1470,7 @@ static void Task_Fishing(u8 taskId) u8 Fishing1(struct Task *task) { ScriptContext2_Enable(); - gPlayerAvatar.unk6 = 1; + gPlayerAvatar.preventStep = TRUE; task->tStep++; return 0; } @@ -1647,7 +1655,7 @@ u8 Fishing11(struct Task *task) if (task->tFrameCounter != 0) { - gPlayerAvatar.unk6 = 0; + gPlayerAvatar.preventStep = FALSE; ScriptContext2_Disable(); FishingWildEncounter(task->tFishingRod); sub_80BE97C(1); @@ -1707,7 +1715,7 @@ u8 Fishing16(struct Task *task) { if (MenuUpdateWindowText()) { - gPlayerAvatar.unk6 = 0; + gPlayerAvatar.preventStep = FALSE; ScriptContext2_Disable(); UnfreezeMapObjects(); MenuZeroFillScreen(); diff --git a/src/field/field_specials.c b/src/field/field_specials.c index 36362d098..899905429 100644 --- a/src/field/field_specials.c +++ b/src/field/field_specials.c @@ -48,9 +48,9 @@ extern u16 gSpecialVar_0x8004; extern u16 gSpecialVar_0x8005; extern u16 gScriptResult; -EWRAM_DATA u8 gUnknown_02039250 = 0; -EWRAM_DATA u8 gUnknown_02039251 = 0; -EWRAM_DATA u32 gUnknown_02039254 = 0; +EWRAM_DATA bool8 gBikeCyclingChallenge = FALSE; +EWRAM_DATA u8 gBikeCollisions = 0; +EWRAM_DATA u32 gBikeCyclingTimer = 0; EWRAM_DATA u8 gUnknown_02039258 = 0; EWRAM_DATA u8 gUnknown_02039259 = 0; EWRAM_DATA u8 gUnknown_0203925A = 0; @@ -76,16 +76,16 @@ void ScrSpecial_ViewWallClock(void) void ResetCyclingRoadChallengeData(void) { - gUnknown_02039250 = 0; - gUnknown_02039251 = 0; - gUnknown_02039254 = 0; + gBikeCyclingChallenge = FALSE; + gBikeCollisions = 0; + gBikeCyclingTimer = 0; } void ScrSpecial_BeginCyclingRoadChallenge(void) { - gUnknown_02039250 = 1; - gUnknown_02039251 = 0; - gUnknown_02039254 = gMain.vblankCounter1; + gBikeCyclingChallenge = TRUE; + gBikeCollisions = 0; + gBikeCyclingTimer = gMain.vblankCounter1; } u16 GetPlayerAvatarBike(void) @@ -171,10 +171,10 @@ static void DetermineCyclingRoadResults(u32 arg0, u8 arg1) } void FinishCyclingRoadChallenge(void) { - const u32 time = gMain.vblankCounter1 - gUnknown_02039254; + const u32 time = gMain.vblankCounter1 - gBikeCyclingTimer; - DetermineCyclingRoadResults(time, gUnknown_02039251); - RecordCyclingRoadResults(time, gUnknown_02039251); + DetermineCyclingRoadResults(time, gBikeCollisions); + RecordCyclingRoadResults(time, gBikeCollisions); } static void RecordCyclingRoadResults(u32 arg0, u8 arg1) { diff --git a/src/field/map_obj_lock.c b/src/field/map_obj_lock.c index 2856320b8..91feaf177 100644 --- a/src/field/map_obj_lock.c +++ b/src/field/map_obj_lock.c @@ -10,7 +10,7 @@ extern u16 gScriptFacing; bool8 walkrun_is_standing_still(void) { - if (gPlayerAvatar.running1 == 1) + if (gPlayerAvatar.tileTransitionState == T_TILE_TRANSITION) return FALSE; else return TRUE; diff --git a/src/rom6.c b/src/rom6.c index b91a9b2c0..32b5f52a5 100644 --- a/src/rom6.c +++ b/src/rom6.c @@ -59,7 +59,7 @@ static void task08_080C9820(u8 taskId) u8 mapObjId; ScriptContext2_Enable(); - gPlayerAvatar.unk6 = 1; + gPlayerAvatar.preventStep = TRUE; mapObjId = gPlayerAvatar.mapObjectId; if (!FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(&gMapObjects[mapObjId]) || FieldObjectClearAnimIfSpecialAnimFinished(&gMapObjects[mapObjId])) @@ -112,7 +112,7 @@ static void sub_810B4CC(u8 taskId) void (*func)(void) = (void (*)(void))(((u16)gTasks[taskId].data[8] << 16) | (u16)gTasks[taskId].data[9]); func(); - gPlayerAvatar.unk6 = 0; + gPlayerAvatar.preventStep = FALSE; DestroyTask(taskId); } diff --git a/src/scene/intro.c b/src/scene/intro.c index dd7cc858c..a6dd23c92 100644 --- a/src/scene/intro.c +++ b/src/scene/intro.c @@ -768,7 +768,7 @@ const struct SpritePalette gIntro3MiscPal_Table[] = const u32 unusedData = 0x02000000; static void MainCB2_EndIntro(void); -static void Task_IntroLoadPart1Graphics(u8); +void Task_IntroLoadPart1Graphics(u8); static void Task_IntroFadeIn(u8); static void Task_IntroWaterDrops(u8); static void Task_IntroScrollDownAndShowEon(u8); @@ -938,7 +938,7 @@ void CB2_InitCopyrightScreenAfterTitleScreen(void) SetUpCopyrightScreen(); } -static void Task_IntroLoadPart1Graphics(u8 taskId) +void Task_IntroLoadPart1Graphics(u8 taskId) { SetVBlankCallback(NULL); gUnknown_02039318 = Random() & 1; -- cgit v1.2.3 From 17bb6dc21f3b5ab3cf1a694bb966928d1c24482f Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Wed, 18 Oct 2017 14:21:43 -0400 Subject: mbt to mach trans and additional comments --- src/field/bike.c | 122 +++++++++++++++++++++++----------------- src/field/field_player_avatar.c | 4 +- 2 files changed, 73 insertions(+), 53 deletions(-) (limited to 'src') diff --git a/src/field/bike.c b/src/field/bike.c index 58359e97f..e36ae1798 100644 --- a/src/field/bike.c +++ b/src/field/bike.c @@ -17,7 +17,7 @@ extern u8 gUnusedBikeCameraAheadPanback; static void MovePlayerOnMachBike(u8, u16, u16); static u8 GetMachBikeTransition(u8 *); static void MachBikeTransition_FaceDirection(u8); -static void MachBikeTransition_TurnFrame(u8); +static void MachBikeTransition_TurnDirection(u8); static void MachBikeTransition_TrySpeedUp(u8); static void MachBikeTransition_TrySlowDown(u8); static void MovePlayerOnAcroBike(u8, u16, u16); @@ -55,10 +55,19 @@ static u8 CanBikeFaceDirOnMetatile(u8, u8); static bool8 WillPlayerCollideWithCollision(u8, u8); static void Bike_SetBikeStill(void); +/* + A bike transition is a type of callback for the bike that actually + modifies the bicycle's direction or momentum or otherwise movement. + Alternatively, a bike may also have input handlers which process the + bike transition to call: the acro bike has input handlers while the mach + bike does not. This is because the Acro needs to know the button inputs + for its complex tricks and actions. +*/ + static void (*const sMachBikeTransitions[])(u8) = { - MachBikeTransition_FaceDirection, // the difference between this and turn frame is that face direction has no turn anim while turn frame does. - MachBikeTransition_TurnFrame, + MachBikeTransition_FaceDirection, // Face vs Turn: Face has no anim while Turn does. Turn checks for collision because if you turn right as opposed to face right, if there is a wall there, turn will make a bonk sound effect while face will not. + MachBikeTransition_TurnDirection, MachBikeTransition_TrySpeedUp, MachBikeTransition_TrySlowDown, }; @@ -103,16 +112,16 @@ static u8 (*const sAcroBikeInputHandlers[])(u8 *, u16, u16) = const u16 gMachBikeSpeeds[] = {SPEED_NORMAL, SPEED_FAST, SPEED_FASTEST}; // this is a list of timers to compare against later, terminated with 0. the only timer being compared against is 4 frames in this list. -static const u8 BikeTimerList[] = {4, 0}; +static const u8 AcroBikeJumpTimerList[] = {4, 0}; -// this is a list of history inputs to do in order to do the check to retrieve a jump direction for acro bike. -static const struct BikeHistoryInputInfo gAcroBikeJumpInputList[] = +// this is a list of history inputs to do in order to do the check to retrieve a jump direction for acro bike. it seems to be an extensible list, so its possible that Game Freak may have intended for the Acro Bike to have more complex tricks at some point. The final list only has the acro jump. +static const struct BikeHistoryInputInfo gAcroBikeTricksList[] = { // the 0xF is a mask performed with each byte of the array in order to perform the check on only the last entry of the history list, otherwise the check wouldnt work as there can be 0xF0 as opposed to 0x0F. - {DIR_SOUTH, B_BUTTON, 0xF, 0xF, BikeTimerList, BikeTimerList, DIR_SOUTH}, - {DIR_NORTH, B_BUTTON, 0xF, 0xF, BikeTimerList, BikeTimerList, DIR_NORTH}, - {DIR_WEST, B_BUTTON, 0xF, 0xF, BikeTimerList, BikeTimerList, DIR_WEST}, - {DIR_EAST, B_BUTTON, 0xF, 0xF, BikeTimerList, BikeTimerList, DIR_EAST}, + {DIR_SOUTH, B_BUTTON, 0xF, 0xF, AcroBikeJumpTimerList, AcroBikeJumpTimerList, DIR_SOUTH}, + {DIR_NORTH, B_BUTTON, 0xF, 0xF, AcroBikeJumpTimerList, AcroBikeJumpTimerList, DIR_NORTH}, + {DIR_WEST, B_BUTTON, 0xF, 0xF, AcroBikeJumpTimerList, AcroBikeJumpTimerList, DIR_WEST}, + {DIR_EAST, B_BUTTON, 0xF, 0xF, AcroBikeJumpTimerList, AcroBikeJumpTimerList, DIR_EAST}, }; void MovePlayerOnBike(u8 direction, u16 newKeys, u16 heldKeys) @@ -141,10 +150,10 @@ static u8 GetMachBikeTransition(u8 *dirTraveling) if (gPlayerAvatar.bikeSpeed == SPEED_STANDING) { gPlayerAvatar.runningState = NOT_MOVING; - return MBT_FACE_DIRECTION; + return MACH_TRANS_FACE_DIRECTION; } gPlayerAvatar.runningState = MOVING; - return MBT_START_MOVING; + return MACH_TRANS_START_MOVING; } // we need to check if the last traveled direction changed from the new direction as well as ensuring that we dont update the state while the player is moving: see the else check. @@ -154,27 +163,27 @@ static u8 GetMachBikeTransition(u8 *dirTraveling) { *dirTraveling = direction; // implement the new direction gPlayerAvatar.runningState = MOVING; - return MBT_START_MOVING; + return MACH_TRANS_START_MOVING; } - // if you didnt start moving but your dir was different, do a turn frame instead. - gPlayerAvatar.runningState = TURN_FRAME; - return MBT_TURN_FRAME; + // if you didnt start moving but your dir was different, do a turn direction instead. + gPlayerAvatar.runningState = TURN_DIRECTION; + return MACH_TRANS_TURN_DIRECTION; } else // the player is either going in the current direction and hasnt changed or their state is currently moving. { gPlayerAvatar.runningState = MOVING; - return MBT_KEEP_MOVING; + return MACH_TRANS_KEEP_MOVING; } } -// the difference between face direction and turn frame is that one changes direction while the other does the animation of turning as well as changing direction. +// the difference between face direction and turn direction is that one changes direction while the other does the animation of turning as well as changing direction. static void MachBikeTransition_FaceDirection(u8 direction) { PlayerFaceDirection(direction); Bike_SetBikeStill(); } -static void MachBikeTransition_TurnFrame(u8 direction) +static void MachBikeTransition_TurnDirection(u8 direction) { struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; @@ -259,6 +268,7 @@ static void MachBikeTransition_TrySlowDown(u8 var) } } +// the acro bike requires the input handler to be executed before the transition can. static void MovePlayerOnAcroBike(u8 newDirection, u16 newKeys, u16 heldKeys) { sAcroBikeTransitions[CheckMovementInputAcroBike(&newDirection, newKeys, heldKeys)](newDirection); @@ -316,10 +326,10 @@ static u8 AcroBikeHandleInputTurning(u8 *newDirection, u16 newKeys, u16 heldKeys *newDirection = gPlayerAvatar.newDirBackup; gPlayerAvatar.bikeFrameCounter++; - //Wait 6 frames before actually changing direction + // Wait 6 frames before actually changing direction if (gPlayerAvatar.bikeFrameCounter > 6) // ... because it takes 6 frames to advance 1 tile. { - gPlayerAvatar.runningState = TURN_FRAME; + gPlayerAvatar.runningState = TURN_DIRECTION; gPlayerAvatar.acroBikeState = ACRO_STATE_NORMAL; Bike_SetBikeStill(); return ACRO_TRANS_TURN_DIRECTION; @@ -348,7 +358,7 @@ static u8 AcroBikeHandleInputTurning(u8 *newDirection, u16 newKeys, u16 heldKeys return ACRO_TRANS_FACE_DIRECTION; } -static u8 AcroBikeHandleInputWheelieStanding(u8 *ptr, u16 newKeys, u16 heldKeys) +static u8 AcroBikeHandleInputWheelieStanding(u8 *newDirection, u16 newKeys, u16 heldKeys) { u8 direction; struct MapObject *playerMapObj; @@ -361,12 +371,12 @@ static u8 AcroBikeHandleInputWheelieStanding(u8 *ptr, u16 newKeys, u16 heldKeys) gPlayerAvatar.bikeFrameCounter++; else { - //B button was released. + // B button was released. gPlayerAvatar.bikeFrameCounter = 0; if (!MetatileBehavior_IsBumpySlope(playerMapObj->mapobj_unk_1E)) { - //Go back to normal on flat ground - *ptr = direction; + // Go back to normal on flat ground + *newDirection = direction; gPlayerAvatar.acroBikeState = ACRO_STATE_NORMAL; Bike_SetBikeStill(); return ACRO_TRANS_WHEELIE_TO_NORMAL; @@ -374,28 +384,28 @@ static u8 AcroBikeHandleInputWheelieStanding(u8 *ptr, u16 newKeys, u16 heldKeys) } if (gPlayerAvatar.bikeFrameCounter >= 40) { - *ptr = direction; + *newDirection = direction; gPlayerAvatar.acroBikeState = ACRO_STATE_BUNNY_HOP; Bike_SetBikeStill(); return ACRO_TRANS_WHEELIE_HOPPING_STANDING; } - if (*ptr == direction) + if (*newDirection == direction) { gPlayerAvatar.runningState = MOVING; gPlayerAvatar.acroBikeState = ACRO_STATE_WHEELIE_MOVING; Bike_SetBikeStill(); return ACRO_TRANS_WHEELIE_MOVING; } - if (*ptr == 0) + if (*newDirection == 0) { - *ptr = direction; + *newDirection = direction; return ACRO_TRANS_WHEELIE_IDLE; } - gPlayerAvatar.runningState = TURN_FRAME; + gPlayerAvatar.runningState = TURN_DIRECTION; return ACRO_TRANS_WHEELIE_IDLE; } -static u8 AcroBikeHandleInputBunnyHop(u8 *ptr, u16 newKeys, u16 heldKeys) +static u8 AcroBikeHandleInputBunnyHop(u8 *newDirection, u16 newKeys, u16 heldKeys) { u8 direction; struct MapObject *playerMapObj; @@ -404,42 +414,45 @@ static u8 AcroBikeHandleInputBunnyHop(u8 *ptr, u16 newKeys, u16 heldKeys) playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; if (!(heldKeys & B_BUTTON)) { - //B button was released + // B button was released Bike_SetBikeStill(); if (MetatileBehavior_IsBumpySlope(playerMapObj->mapobj_unk_1E)) { - //Do a standing wheelie on a bumpy slope + // even though B was released, dont undo the wheelie on the bumpy slope. gPlayerAvatar.acroBikeState = ACRO_STATE_WHEELIE_STANDING; - return CheckMovementInputAcroBike(ptr, newKeys, heldKeys); + return CheckMovementInputAcroBike(newDirection, newKeys, heldKeys); } else { - //Go back to normal on flat ground - *ptr = direction; + // .. otherwise, go back to normal on flat ground + *newDirection = direction; gPlayerAvatar.runningState = NOT_MOVING; gPlayerAvatar.acroBikeState = ACRO_STATE_NORMAL; return ACRO_TRANS_WHEELIE_TO_NORMAL; } } - //B Button is still held + // B Button is still held - if (*ptr == DIR_NONE) + if (*newDirection == DIR_NONE) { - *ptr = direction; + // we did not move, so keep hopping in place without moving. + *newDirection = direction; gPlayerAvatar.runningState = NOT_MOVING; return ACRO_TRANS_WHEELIE_HOPPING_STANDING; } - if (*ptr != direction && gPlayerAvatar.runningState != MOVING) + if (*newDirection != direction && gPlayerAvatar.runningState != MOVING) { - gPlayerAvatar.runningState = TURN_FRAME; + // we changed direction, so turn but do not move hop. + gPlayerAvatar.runningState = TURN_DIRECTION; return ACRO_TRANS_WHEELIE_HOPPING_STANDING; } + // otherwise, we started moving while hopping gPlayerAvatar.runningState = MOVING; return ACRO_TRANS_WHEELIE_HOPPING_MOVING; } -static u8 AcroBikeHandleInputWheelieMoving(u8 *ptr, u16 newKeys, u16 heldKeys) +static u8 AcroBikeHandleInputWheelieMoving(u8 *newDirection, u16 newKeys, u16 heldKeys) { u8 direction; struct MapObject *playerMapObj; @@ -448,36 +461,44 @@ static u8 AcroBikeHandleInputWheelieMoving(u8 *ptr, u16 newKeys, u16 heldKeys) playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; if (!(heldKeys & B_BUTTON)) { + // we were moving on a wheelie, but we let go while moving. reset bike still status Bike_SetBikeStill(); if (!MetatileBehavior_IsBumpySlope(playerMapObj->mapobj_unk_1E)) { + // we let go of B and arent on a bumpy slope, set state to normal because now we need to handle this gPlayerAvatar.acroBikeState = ACRO_STATE_NORMAL; - if (*ptr == 0) + if (*newDirection == DIR_NONE) { - *ptr = direction; + // we stopped moving but are turning, still try to lower the wheelie in place. + *newDirection = direction; gPlayerAvatar.runningState = NOT_MOVING; return ACRO_TRANS_WHEELIE_TO_NORMAL; } - if (*ptr != direction && gPlayerAvatar.runningState != MOVING) + if (*newDirection != direction && gPlayerAvatar.runningState != MOVING) { + // we did not turn while lowering wheelie, so do so without turning. gPlayerAvatar.runningState = NOT_MOVING; return ACRO_TRANS_WHEELIE_TO_NORMAL; } + // if we are moving while lowering wheelie, put the acro into a lowering state while moving. gPlayerAvatar.runningState = MOVING; return ACRO_TRANS_WHEELIE_LOWERING_MOVING; } + // please do not undo the wheelie on a bumpy slope gPlayerAvatar.acroBikeState = ACRO_STATE_WHEELIE_STANDING; - return CheckMovementInputAcroBike(ptr, newKeys, heldKeys); + return CheckMovementInputAcroBike(newDirection, newKeys, heldKeys); } - if (*ptr == 0) + // we are still holding B. + if (*newDirection == DIR_NONE) { - *ptr = direction; + // idle the wheelie in place because we're holding B without moving. + *newDirection = direction; gPlayerAvatar.acroBikeState = ACRO_STATE_WHEELIE_STANDING; gPlayerAvatar.runningState = NOT_MOVING; Bike_SetBikeStill(); return ACRO_TRANS_WHEELIE_IDLE; } - if (direction != *ptr && gPlayerAvatar.runningState != MOVING) + if (direction != *newDirection && gPlayerAvatar.runningState != MOVING) { gPlayerAvatar.runningState = NOT_MOVING; return ACRO_TRANS_WHEELIE_IDLE; @@ -502,7 +523,6 @@ static u8 AcroBikeHandleInputTurnJump(u8 *ptr, u16 newKeys, u16 heldKeys) return CheckMovementInputAcroBike(ptr, newKeys, heldKeys); } -// Face vs Turn: Face has no anim while Turn does. Turn checks for collision because if you turn right as opposed to face right, if there is a wall there, turn will make a bonk sound effect while face will not. static void AcroBikeTransition_FaceDirection(u8 direction) { PlayerFaceDirection(direction); @@ -791,7 +811,7 @@ static u8 AcroBike_GetJumpDirection(void) for (i = 0; i < 4; i++) { - const struct BikeHistoryInputInfo *historyInputInfo = &gAcroBikeJumpInputList[i]; + const struct BikeHistoryInputInfo *historyInputInfo = &gAcroBikeTricksList[i]; u32 dirHistory = gPlayerAvatar.directionHistory; u32 abStartSelectHistory = gPlayerAvatar.abStartSelectHistory; diff --git a/src/field/field_player_avatar.c b/src/field/field_player_avatar.c index 563550f07..e7da9b1b7 100644 --- a/src/field/field_player_avatar.c +++ b/src/field/field_player_avatar.c @@ -450,7 +450,7 @@ static u8 CheckMovementInputNotOnBike(u8 direction) } else if (direction != player_get_direction_upper_nybble() && gPlayerAvatar.runningState != MOVING) { - gPlayerAvatar.runningState = TURN_FRAME; + gPlayerAvatar.runningState = TURN_DIRECTION; return 1; } else @@ -722,7 +722,7 @@ static bool8 player_is_anim_in_certain_ranges(void) static bool8 sub_80592A4(void) { - if (player_is_anim_in_certain_ranges() && gPlayerAvatar.runningState != TURN_FRAME) + if (player_is_anim_in_certain_ranges() && gPlayerAvatar.runningState != TURN_DIRECTION) return TRUE; else return FALSE; -- cgit v1.2.3 From 13c196eda57ebbdb3c7e14bebd2985f1edceae34 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Sat, 21 Oct 2017 19:51:28 -0700 Subject: More battle_tower work --- src/battle/battle_records.c | 4 +- src/battle_tower.c | 1062 ++++++++++++++++++++++++++++++++++++- src/debug/unknown_debug_menu.c | 9 +- src/engine/mystery_event_script.c | 2 +- src/engine/record_mixing.c | 12 +- src/engine/trainer_card.c | 56 +- src/field/choose_party.c | 2 +- src/field/tv.c | 8 +- 8 files changed, 1108 insertions(+), 47 deletions(-) (limited to 'src') diff --git a/src/battle/battle_records.c b/src/battle/battle_records.c index d848a10b8..59da6ba73 100644 --- a/src/battle/battle_records.c +++ b/src/battle/battle_records.c @@ -295,13 +295,13 @@ static void PrintWinStreak(const u8 *str, u16 streak, u8 left, u8 top) static void PrintRecordWinStreak(u8 level, u8 left, u8 top) { struct SaveBlock2_Sub *sb2sub = &gSaveBlock2.filler_A8; - u16 winStreak = sb2sub->recordWinStreak[level]; + u16 winStreak = sb2sub->recordWinStreaks[level]; PrintWinStreak(gOtherText_Record, winStreak, left, top); } static u16 GetLastWinStreak(u8 level) { - u16 result = gSaveBlock2.filler_A8.winStreak[level]; + u16 result = gSaveBlock2.filler_A8.currentWinStreaks[level]; if (result > 9999) result = 9999; return result; diff --git a/src/battle_tower.c b/src/battle_tower.c index 51f4ca93d..90884ec98 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -1,11 +1,21 @@ #include "global.h" #include "battle_tower.h" #include "event_data.h" +#include "map_object_constants.h" +#include "rng.h" #include "vars.h" +extern u8 gTrainerClassToPicIndex[]; +extern u8 gTrainerClassToNameIndex[]; +extern u8 gUnknown_08405EB0[]; +extern u8 gUnknown_08405E7E[]; +extern u8 gUnknown_08405E92[]; +extern u8 gUnknown_08405E60[]; +extern struct BattleTowerTrainer gBattleTowerTrainers[]; -extern void sub_813461C(u8 levelType); extern void sub_8135C44(void); +extern void sub_813601C(void); +extern void sub_81349FC(u8); void sub_8134548(void) @@ -56,3 +66,1053 @@ void sub_8134548(void) sub_8135C44(); } + +void sub_813461C(u8 levelType) +{ + gSaveBlock2.filler_A8.var_4AE[levelType] = 0; + gSaveBlock2.filler_A8.var_4B0[levelType] = 1; + gSaveBlock2.filler_A8.var_4B4[levelType] = 1; +} + +// u8 sub_8134650(u8 levelType, u16 b) +// { +// u8 trainerTeamLevel; +// s32 i; +// u32 numValid = 0; + +// sub_813601C(); + +// if (gScriptResult || gSaveBlock2.filler_A8.ereaderTrainer.unk2 != b) +// { +// return 0; +// } + +// trainerTeamLevel = 50; +// if (levelType != 0) +// { +// trainerTeamLevel = 100; +// } + +// for (i = 0; i < 3; i++) +// { +// if (!gSaveBlock2.filler_A8.ereaderTrainer.party[i].level != trainerTeamLevel) +// { +// return 0; +// } + +// CheckMonBattleTowerBanlist(gSaveBlock2.filler_A8.ereaderTrainer.party[i].unk0, gSaveBlock2.filler_A8.ereaderTrainer.party[i].unk2, 1, levelType, &numValid); +// } + +// return numValid == 3; +// } + +__attribute__((naked)) +u8 sub_8134650(u8 levelType, u16 b) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r8\n\ + push {r7}\n\ + sub sp, 0x2C\n\ + lsls r0, 24\n\ + lsrs r5, r0, 24\n\ + lsls r1, 16\n\ + lsrs r6, r1, 16\n\ + add r4, sp, 0x28\n\ + movs r0, 0\n\ + strb r0, [r4]\n\ + bl sub_813601C\n\ + ldr r0, _08134684 @ =gScriptResult\n\ + ldrh r0, [r0]\n\ + adds r7, r4, 0\n\ + cmp r0, 0\n\ + bne _08134680\n\ + ldr r1, _08134688 @ =gSaveBlock2\n\ + ldr r2, _0813468C @ =0x0000049a\n\ + adds r0, r1, r2\n\ + ldrh r0, [r0]\n\ + cmp r0, r6\n\ + beq _08134690\n\ +_08134680:\n\ + movs r0, 0\n\ + b _081346E2\n\ + .align 2, 0\n\ +_08134684: .4byte gScriptResult\n\ +_08134688: .4byte gSaveBlock2\n\ +_0813468C: .4byte 0x0000049a\n\ +_08134690:\n\ + movs r6, 0x32\n\ + cmp r5, 0\n\ + beq _08134698\n\ + movs r6, 0x64\n\ +_08134698:\n\ + movs r4, 0\n\ + mov r8, r1\n\ +_0813469C:\n\ + movs r0, 0x2C\n\ + muls r0, r4\n\ + mov r3, r8\n\ + adds r1, r0, r3\n\ + movs r2, 0x9B\n\ + lsls r2, 3\n\ + adds r0, r1, r2\n\ + ldrb r2, [r0]\n\ + cmp r2, r6\n\ + bne _08134680\n\ + ldr r3, _081346F0 @ =0x000004cc\n\ + adds r0, r1, r3\n\ + ldrh r0, [r0]\n\ + adds r3, 0x2\n\ + adds r1, r3\n\ + ldrh r1, [r1]\n\ + str r2, [sp]\n\ + add r2, sp, 0x10\n\ + str r2, [sp, 0x4]\n\ + add r2, sp, 0x1C\n\ + str r2, [sp, 0x8]\n\ + str r7, [sp, 0xC]\n\ + movs r2, 0x1\n\ + adds r3, r5, 0\n\ + bl CheckMonBattleTowerBanlist\n\ + adds r4, 0x1\n\ + cmp r4, 0x2\n\ + ble _0813469C\n\ + movs r1, 0\n\ + ldrb r0, [r7]\n\ + cmp r0, 0x3\n\ + bne _081346E0\n\ + movs r1, 0x1\n\ +_081346E0:\n\ + adds r0, r1, 0\n\ +_081346E2:\n\ + add sp, 0x2C\n\ + pop {r3}\n\ + mov r8, r3\n\ + pop {r4-r7}\n\ + pop {r1}\n\ + bx r1\n\ + .align 2, 0\n\ +_081346F0: .4byte 0x000004cc\n\ +.syntax divided\n"); +} + +// bool8 sub_81346F4(void) +// { +// s32 i; +// u32 j; +// u32 arr[4]; +// u16 var2 = sub_8135D3C(gSaveBlock2.filler_A8.battleTowerLevelType); + +// if (sub_8134650(gSaveBlock2.filler_A8.battleTowerLevelType)) +// { +// gSaveBlock2.filler_A8.battleTowerTrainerId = 0xC8; +// return TRUE; +// } + +// for (i = 0; i < 5; i++) +// { +// u32 var_or = 0; +// u32 var_add = 0; +// for (j = 0; j < 40; j++) +// { +// var_or |= gSaveBlock2.filler_A8.var_0A4[i][j]; +// var_add += gSaveBlock2.filler_A8.var_0A4[i][j]; +// } + + +// } +// } + +__attribute__((naked)) +bool8 sub_81346F4(void) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, 0x18\n\ + movs r0, 0\n\ + mov r9, r0\n\ + ldr r4, _08134738 @ =gSaveBlock2\n\ + ldr r1, _0813473C @ =0x00000554\n\ + adds r0, r4, r1\n\ + ldrb r0, [r0]\n\ + lsls r0, 31\n\ + lsrs r7, r0, 31\n\ + adds r0, r7, 0\n\ + bl sub_8135D3C\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + mov r8, r0\n\ + adds r0, r7, 0\n\ + mov r1, r8\n\ + bl sub_8134650\n\ + lsls r0, 24\n\ + adds r1, r4, 0\n\ + cmp r0, 0\n\ + beq _08134744\n\ + ldr r2, _08134740 @ =0x00000564\n\ + adds r1, r2\n\ + movs r0, 0xC8\n\ + strb r0, [r1]\n\ + b _081347DE\n\ + .align 2, 0\n\ +_08134738: .4byte gSaveBlock2\n\ +_0813473C: .4byte 0x00000554\n\ +_08134740: .4byte 0x00000564\n\ +_08134744:\n\ + movs r5, 0\n\ + movs r3, 0xA4\n\ + mov r12, r3\n\ + mov r10, sp\n\ +_0813474C:\n\ + mov r0, r12\n\ + muls r0, r5\n\ + movs r4, 0\n\ + movs r1, 0\n\ + movs r2, 0\n\ + adds r6, r5, 0x1\n\ + str r6, [sp, 0x14]\n\ + ldr r6, _081347B4 @ =gSaveBlock2 + 0x14C\n\ + adds r3, r0, r6\n\ +_0813475E:\n\ + ldm r3!, {r0}\n\ + orrs r4, r0\n\ + adds r1, r0\n\ + adds r2, 0x1\n\ + cmp r2, 0x27\n\ + bls _0813475E\n\ + mov r3, r12\n\ + muls r3, r5\n\ + ldr r0, _081347B8 @ =gSaveBlock2\n\ + adds r2, r3, r0\n\ + movs r6, 0xA7\n\ + lsls r6, 1\n\ + adds r0, r2, r6\n\ + ldrh r0, [r0]\n\ + cmp r0, r8\n\ + bne _081347A4\n\ + subs r6, 0x2\n\ + adds r0, r2, r6\n\ + ldrb r0, [r0]\n\ + cmp r0, r7\n\ + bne _081347A4\n\ + cmp r4, 0\n\ + beq _081347A4\n\ + ldr r2, _081347BC @ =gSaveBlock2 + 0x1EC\n\ + adds r0, r3, r2\n\ + ldr r0, [r0]\n\ + cmp r0, r1\n\ + bne _081347A4\n\ + mov r3, r10\n\ + adds r3, 0x4\n\ + mov r10, r3\n\ + subs r3, 0x4\n\ + stm r3!, {r5}\n\ + movs r6, 0x1\n\ + add r9, r6\n\ +_081347A4:\n\ + ldr r5, [sp, 0x14]\n\ + cmp r5, 0x4\n\ + ble _0813474C\n\ + mov r0, r9\n\ + cmp r0, 0\n\ + bne _081347C0\n\ + movs r0, 0\n\ + b _081347E0\n\ + .align 2, 0\n\ +_081347B4: .4byte gSaveBlock2 + 0x14C\n\ +_081347B8: .4byte gSaveBlock2\n\ +_081347BC: .4byte gSaveBlock2 + 0x1EC\n\ +_081347C0:\n\ + bl Random\n\ + ldr r4, _081347F0 @ =gSaveBlock2\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + mov r1, r9\n\ + bl __modsi3\n\ + lsls r0, 2\n\ + add r0, sp\n\ + ldr r0, [r0]\n\ + adds r0, 0x64\n\ + ldr r1, _081347F4 @ =0x00000564\n\ + adds r4, r1\n\ + strb r0, [r4]\n\ +_081347DE:\n\ + movs r0, 0x1\n\ +_081347E0:\n\ + add sp, 0x18\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r1}\n\ + bx r1\n\ + .align 2, 0\n\ +_081347F0: .4byte gSaveBlock2\n\ +_081347F4: .4byte 0x00000564\n\ +.syntax divided\n"); +} + +// void sub_81347F8(void) +// { +// bool8 levelType = gSaveBlock2.filler_A8.battleTowerLevelType; +// if (sub_81346F4()) +// { +// sub_81349FC(gSaveBlock2.filler_A8.battleTowerTrainerId); +// gSaveBlock2.filler_A8.var_4C1[gSaveBlock2.filler_A8.var_4B0[levelType]] = gSaveBlock2.filler_A8.battleTowerTrainerId; +// } +// else +// { +// u16 var1; + +// if (gSaveBlock2.filler_A8.var_4B4[levelType] > 7) +// { +// while (1) +// { +// s32 i; +// u32 temp = ((Random() & 0xFF) * 30) >> 8; +// var1 = temp + 70; +// for (i = 0; i < gSaveBlock2.filler_A8.var_4B0[levelType] - 1 && var1 != gSaveBlock2.filler_A8.var_4C1[i]; i++) // TODO: [i + 1]??? +// { } + +// if (i == gSaveBlock2.filler_A8.var_4B0[levelType] - 1) +// { +// break; +// } +// } +// } +// else +// { +// if (gSaveBlock2.filler_A8.var_4B0[levelType] == 7) +// { +// while (1) +// { +// s32 i; +// u32 temp = ((Random() & 0xFF) * 5); +// u32 temp2 = (((gSaveBlock2.filler_A8.var_4B4[levelType] - 1) * 10) + 20); +// var1 = temp / 128 + temp2; +// for (i = 0; i < gSaveBlock2.filler_A8.var_4B0[levelType] - 1 && gSaveBlock2.filler_A8.var_4C1[i] != var1; i++) // TODO: [i + 1]???? +// { } + +// if (i == gSaveBlock2.filler_A8.var_4B0[levelType] - 1) +// { +// break; +// } +// } +// } +// else +// { +// while (1) +// { +// s32 i; +// u32 temp = ((Random() & 0xFF) * 320); +// u32 temp2 = ((gSaveBlock2.filler_A8.var_4B4[levelType] - 1) * 10); +// var1 = temp + temp2; +// for (i = 0; i < gSaveBlock2.filler_A8.var_4B0[levelType] - 1 && gSaveBlock2.filler_A8.var_4C1[i] != var1; i++) +// { } + +// if (i == gSaveBlock2.filler_A8.var_4B0[levelType] - 1) +// { +// break; +// } +// } +// } +// } + +// gSaveBlock2.filler_A8.battleTowerTrainerId = var1; +// sub_81349FC(gSaveBlock2.filler_A8.battleTowerTrainerId); + +// if (gSaveBlock2.filler_A8.var_4B0[levelType] < 7) +// { +// gSaveBlock2.filler_A8.var_4C1[gSaveBlock2.filler_A8.var_4B0[levelType]] = gSaveBlock2.filler_A8.battleTowerTrainerId; +// } +// } +// } + +__attribute__((naked)) +void sub_81347F8(void) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + ldr r5, _08134838 @ =gSaveBlock2\n\ + ldr r1, _0813483C @ =0x00000554\n\ + adds r0, r5, r1\n\ + ldrb r0, [r0]\n\ + lsls r0, 31\n\ + lsrs r6, r0, 31\n\ + bl sub_81346F4\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _08134848\n\ + ldr r2, _08134840 @ =0x00000564\n\ + adds r4, r5, r2\n\ + ldrb r0, [r4]\n\ + bl sub_81349FC\n\ + lsls r0, r6, 1\n\ + movs r3, 0xAB\n\ + lsls r3, 3\n\ + adds r1, r5, r3\n\ + adds r0, r1\n\ + ldrh r0, [r0]\n\ + adds r0, r5, r0\n\ + ldr r1, _08134844 @ =0x00000569\n\ + adds r0, r1\n\ + ldrb r1, [r4]\n\ + b _081349DC\n\ + .align 2, 0\n\ +_08134838: .4byte gSaveBlock2\n\ +_0813483C: .4byte 0x00000554\n\ +_08134840: .4byte 0x00000564\n\ +_08134844: .4byte 0x00000569\n\ +_08134848:\n\ + lsls r0, r6, 1\n\ + ldr r2, _081348D8 @ =0x0000055c\n\ + adds r1, r5, r2\n\ + adds r1, r0, r1\n\ + ldrh r1, [r1]\n\ + adds r7, r0, 0\n\ + cmp r1, 0x7\n\ + bls _0813485A\n\ + b _0813495C\n\ +_0813485A:\n\ + movs r3, 0xAB\n\ + lsls r3, 3\n\ + adds r0, r5, r3\n\ + adds r1, r7, r0\n\ + ldrh r0, [r1]\n\ + cmp r0, 0x7\n\ + bne _081348E4\n\ + adds r6, r5, 0\n\ + mov r9, r7\n\ + adds r5, r1, 0\n\ + ldr r0, _081348DC @ =0x0000056a\n\ + adds r0, r6\n\ + mov r10, r0\n\ + mov r8, r5\n\ +_08134876:\n\ + bl Random\n\ + movs r1, 0xFF\n\ + ands r1, r0\n\ + lsls r2, r1, 2\n\ + adds r2, r1\n\ + ldr r1, _081348D8 @ =0x0000055c\n\ + adds r4, r6, r1\n\ + mov r3, r9\n\ + adds r0, r3, r4\n\ + ldrh r1, [r0]\n\ + subs r1, 0x1\n\ + lsls r0, r1, 2\n\ + adds r0, r1\n\ + lsls r0, 1\n\ + adds r0, 0x14\n\ + lsrs r2, 7\n\ + adds r2, r0\n\ + lsls r2, 16\n\ + lsrs r2, 16\n\ + movs r1, 0\n\ + ldrh r0, [r5]\n\ + subs r0, 0x1\n\ + cmp r1, r0\n\ + bge _081348C8\n\ + mov r3, r10\n\ + ldrb r0, [r3]\n\ + cmp r0, r2\n\ + beq _081348C8\n\ + subs r0, r4, 0x4\n\ + adds r0, r7, r0\n\ + ldrh r0, [r0]\n\ + subs r3, r0, 0x1\n\ + adds r4, 0xE\n\ +_081348BA:\n\ + adds r1, 0x1\n\ + cmp r1, r3\n\ + bge _081348C8\n\ + adds r0, r1, r4\n\ + ldrb r0, [r0]\n\ + cmp r0, r2\n\ + bne _081348BA\n\ +_081348C8:\n\ + mov r3, r8\n\ + ldrh r0, [r3]\n\ + subs r0, 0x1\n\ + ldr r4, _081348E0 @ =gSaveBlock2\n\ + cmp r1, r0\n\ + bne _08134876\n\ + b _081349B6\n\ + .align 2, 0\n\ +_081348D8: .4byte 0x0000055c\n\ +_081348DC: .4byte 0x0000056a\n\ +_081348E0: .4byte gSaveBlock2\n\ +_081348E4:\n\ + adds r6, r5, 0\n\ + mov r9, r7\n\ + adds r5, r1, 0\n\ + ldr r2, _08134950 @ =0x0000056a\n\ + adds r2, r6\n\ + mov r10, r2\n\ + mov r8, r5\n\ +_081348F2:\n\ + bl Random\n\ + movs r1, 0xFF\n\ + ands r1, r0\n\ + lsls r0, r1, 2\n\ + adds r0, r1\n\ + lsrs r2, r0, 6\n\ + ldr r3, _08134954 @ =0x0000055c\n\ + adds r4, r6, r3\n\ + mov r1, r9\n\ + adds r0, r1, r4\n\ + ldrh r1, [r0]\n\ + subs r1, 0x1\n\ + lsls r0, r1, 2\n\ + adds r0, r1\n\ + lsls r0, 1\n\ + adds r0, r2, r0\n\ + lsls r0, 16\n\ + lsrs r2, r0, 16\n\ + movs r1, 0\n\ + ldrh r0, [r5]\n\ + subs r0, 0x1\n\ + cmp r1, r0\n\ + bge _08134942\n\ + mov r3, r10\n\ + ldrb r0, [r3]\n\ + cmp r0, r2\n\ + beq _08134942\n\ + subs r0, r4, 0x4\n\ + adds r0, r7, r0\n\ + ldrh r0, [r0]\n\ + subs r3, r0, 0x1\n\ + adds r4, 0xE\n\ +_08134934:\n\ + adds r1, 0x1\n\ + cmp r1, r3\n\ + bge _08134942\n\ + adds r0, r1, r4\n\ + ldrb r0, [r0]\n\ + cmp r0, r2\n\ + bne _08134934\n\ +_08134942:\n\ + mov r3, r8\n\ + ldrh r0, [r3]\n\ + subs r0, 0x1\n\ + ldr r4, _08134958 @ =gSaveBlock2\n\ + cmp r1, r0\n\ + bne _081348F2\n\ + b _081349B6\n\ + .align 2, 0\n\ +_08134950: .4byte 0x0000056a\n\ +_08134954: .4byte 0x0000055c\n\ +_08134958: .4byte gSaveBlock2\n\ +_0813495C:\n\ + movs r2, 0xAB\n\ + lsls r2, 3\n\ + adds r0, r5, r2\n\ + adds r6, r7, r0\n\ + ldr r3, _081349EC @ =0x0000056a\n\ + adds r3, r5\n\ + mov r8, r3\n\ + adds r5, r6, 0\n\ +_0813496C:\n\ + bl Random\n\ + movs r1, 0xFF\n\ + ands r1, r0\n\ + lsls r0, r1, 4\n\ + subs r0, r1\n\ + lsls r0, 1\n\ + asrs r0, 8\n\ + adds r0, 0x46\n\ + lsls r0, 16\n\ + lsrs r2, r0, 16\n\ + movs r1, 0\n\ + ldrh r0, [r6]\n\ + subs r0, 0x1\n\ + cmp r1, r0\n\ + bge _081349AC\n\ + mov r3, r8\n\ + ldrb r0, [r3]\n\ + ldr r4, _081349F0 @ =gSaveBlock2\n\ + cmp r0, r2\n\ + beq _081349AC\n\ + ldrh r0, [r5]\n\ + subs r3, r0, 0x1\n\ + ldr r0, _081349EC @ =0x0000056a\n\ + adds r4, r0\n\ +_0813499E:\n\ + adds r1, 0x1\n\ + cmp r1, r3\n\ + bge _081349AC\n\ + adds r0, r1, r4\n\ + ldrb r0, [r0]\n\ + cmp r0, r2\n\ + bne _0813499E\n\ +_081349AC:\n\ + ldrh r0, [r6]\n\ + subs r0, 0x1\n\ + ldr r4, _081349F0 @ =gSaveBlock2\n\ + cmp r1, r0\n\ + bne _0813496C\n\ +_081349B6:\n\ + ldr r1, _081349F4 @ =0x00000564\n\ + adds r0, r4, r1\n\ + strb r2, [r0]\n\ + ldr r2, _081349F4 @ =0x00000564\n\ + adds r5, r4, r2\n\ + ldrb r0, [r5]\n\ + bl sub_81349FC\n\ + movs r3, 0xAB\n\ + lsls r3, 3\n\ + adds r0, r4, r3\n\ + adds r1, r7, r0\n\ + ldrh r0, [r1]\n\ + cmp r0, 0x6\n\ + bhi _081349DE\n\ + adds r0, r4, r0\n\ + ldr r1, _081349F8 @ =0x00000569\n\ + adds r0, r1\n\ + ldrb r1, [r5]\n\ +_081349DC:\n\ + strb r1, [r0]\n\ +_081349DE:\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_081349EC: .4byte 0x0000056a\n\ +_081349F0: .4byte gSaveBlock2\n\ +_081349F4: .4byte 0x00000564\n\ +_081349F8: .4byte 0x00000569\n\ +.syntax divided\n"); +} + +void sub_81349FC(u8 trainerIndex) +{ + u32 i; + u8 trainerClass; + + if (trainerIndex < 100) + { + trainerClass = gBattleTowerTrainers[trainerIndex].trainerClass; + } + else if (trainerIndex < 200) + { + trainerClass = gSaveBlock2.filler_A8.var_14C[trainerIndex - 100].trainerClass; + } + else + { + trainerClass = gSaveBlock2.filler_A8.ereaderTrainer.trainerClass; + } + + for (i = 0; i < 30 && gUnknown_08405E60[i] != trainerClass; i++); + if (i != 30) + { + u8 trainerObjectGfxId = gUnknown_08405E92[i]; + VarSet(0x4010, trainerObjectGfxId); + return; + } + + for (i = 0; i < 20 && gUnknown_08405E7E[i] != trainerClass; i++); + if (i != 20) + { + u8 trainerObjectGfxId = gUnknown_08405EB0[i]; + VarSet(0x4010, trainerObjectGfxId); + return; + } + + VarSet(0x4010, MAP_OBJ_GFX_BOY_1); +} + +void sub_8134AB4() +{ + sub_81349FC(200); +} + +// void sub_8134AC0(struct BattleTowerRecord *record) +// { +// u16 var1[5]; +// u16 var2[5]; +// s32 i, j, k; +// s16 l = 0; + +// for (i = 0; i < 5; i++) +// { +// k = 0; +// for (j = 0; j < 4 && gSaveBlock2.filler_A8.var_14C[i].var_C[i] != record->var_C[j]; j++); +// if (j == 4) +// { +// for (k = 0; k < 7 && gSaveBlock2.filler_A8.var_14C[i].var_8 == record->var_8; k++) +// { +// if (record->var_8 == 0xFF) +// { +// k = 7; +// break; +// } +// } +// } + +// if (k == 7) +// { +// break; +// } +// } + +// if (i < 5) +// { +// gSaveBlock2.filler_A8.var_14C[i] = *record; +// return; +// } + +// i = 0; +// while (i < 5) +// { +// if (gSaveBlock2.filler_A8.var_14C[i].var_2 == 0) +// { +// if (i > 4) +// { +// break; +// } + +// gSaveBlock2.filler_A8.var_14C[i] = *record; +// return; +// } + +// i++; +// } + +// var1[0] = gSaveBlock2.filler_A8.var_14C[0].var_2; +// var2[0] = 0; +// l++; + +// for (i = 1; i < 5; i++) +// { +// for (j = 0; gSaveBlock2.filler_A8.var_14C[i].var_2 <= var1[0] && j < l; j++) +// { +// if (gSaveBlock2.filler_A8.var_14C[i].var_2 < var1[0]) +// { +// j = 0; +// l = 1; +// var1[0] = gSaveBlock2.filler_A8.var_14C[i].var_2; +// var2[0] = i; +// break; +// } +// } + +// if (j == l) +// { +// var1[l] = gSaveBlock2.filler_A8.var_14C[i].var_2; +// var2[l] = i; +// l++; +// } +// } + +// gSaveBlock2.filler_A8.var_14C[var2[(Random() % l)]] = *record; +// } + +__attribute__((naked)) +void sub_8134AC0(struct BattleTowerRecord *record) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, 0x1C\n\ + movs r7, 0\n\ + mov r8, r0\n\ + movs r5, 0\n\ + ldr r0, _08134B3C @ =gSaveBlock2\n\ + mov r12, r0\n\ + mov r1, r8\n\ + ldrb r1, [r1, 0xC]\n\ + str r1, [sp, 0x18]\n\ + movs r2, 0xAA\n\ + lsls r2, 1\n\ + add r2, r12\n\ + mov r10, r2\n\ + mov r9, r5\n\ +_08134AE6:\n\ + movs r6, 0\n\ + movs r3, 0\n\ + ldr r0, _08134B40 @ =gSaveBlock2 + 0x158\n\ + add r0, r9\n\ + ldrb r0, [r0]\n\ + ldr r1, [sp, 0x18]\n\ + cmp r0, r1\n\ + bne _08134B14\n\ + movs r0, 0xA4\n\ + muls r0, r5\n\ + ldr r1, _08134B40 @ =gSaveBlock2 + 0x158\n\ + adds r2, r0, r1\n\ + mov r4, r8\n\ + adds r4, 0xC\n\ +_08134B02:\n\ + adds r2, 0x1\n\ + adds r3, 0x1\n\ + cmp r3, 0x3\n\ + bgt _08134B14\n\ + adds r1, r4, r3\n\ + ldrb r0, [r2]\n\ + ldrb r1, [r1]\n\ + cmp r0, r1\n\ + beq _08134B02\n\ +_08134B14:\n\ + cmp r3, 0x4\n\ + bne _08134B54\n\ + movs r6, 0\n\ + mov r2, r10\n\ + ldrb r0, [r2]\n\ + mov r3, r8\n\ + ldrb r3, [r3, 0x8]\n\ + cmp r0, r3\n\ + bne _08134B54\n\ + adds r1, r0, 0\n\ + movs r0, 0xA4\n\ + muls r0, r5\n\ + adds r0, 0x4\n\ + ldr r3, _08134B44 @ =gSaveBlock2 + 0x150\n\ + adds r2, r0, r3\n\ +_08134B32:\n\ + cmp r1, 0xFF\n\ + bne _08134B48\n\ + movs r6, 0x7\n\ + b _08134B54\n\ + .align 2, 0\n\ +_08134B3C: .4byte gSaveBlock2\n\ +_08134B40: .4byte gSaveBlock2 + 0x158\n\ +_08134B44: .4byte gSaveBlock2 + 0x150\n\ +_08134B48:\n\ + adds r6, 0x1\n\ + cmp r6, 0x6\n\ + bgt _08134B54\n\ + ldrb r0, [r2]\n\ + cmp r0, r1\n\ + beq _08134B32\n\ +_08134B54:\n\ + cmp r6, 0x7\n\ + beq _08134B64\n\ + movs r0, 0xA4\n\ + add r10, r0\n\ + add r9, r0\n\ + adds r5, 0x1\n\ + cmp r5, 0x4\n\ + ble _08134AE6\n\ +\n\ +_08134B64:\n\ + cmp r5, 0x4\n\ + bgt _08134B76\n\ + movs r0, 0xA4\n\ + muls r0, r5\n\ + add r0, r12\n\ + movs r1, 0xA6\n\ + lsls r1, 1\n\ + adds r0, r1\n\ + b _08134B9E\n\ +_08134B76:\n\ + movs r5, 0\n\ + movs r1, 0xA7\n\ + lsls r1, 1\n\ + add r1, r12\n\ + b _08134B88\n\ +_08134B80:\n\ + adds r1, 0xA4\n\ + adds r5, 0x1\n\ + cmp r5, 0x4\n\ + bgt _08134BA8\n\ +_08134B88:\n\ + ldrh r0, [r1]\n\ + cmp r0, 0\n\ + bne _08134B80\n\ + cmp r5, 0x4\n\ + bgt _08134BA8\n\ + movs r0, 0xA4\n\ + muls r0, r5\n\ + add r0, r12\n\ + movs r2, 0xA6\n\ + lsls r2, 1\n\ + adds r0, r2\n\ +_08134B9E:\n\ + mov r1, r8\n\ + movs r2, 0xA4\n\ + bl memcpy\n\ + b _08134C5E\n\ +\n\ +_08134BA8:\n\ + mov r2, sp\n\ + movs r3, 0xA7\n\ + lsls r3, 1\n\ + mov r1, r12\n\ + adds r0, r1, r3\n\ + ldrh r0, [r0]\n\ + movs r1, 0\n\ + strh r0, [r2]\n\ + add r0, sp, 0xC\n\ + strh r1, [r0]\n\ + adds r7, 0x1\n\ + movs r5, 0x1\n\ + add r2, sp, 0xC @var2 = r2\n\ + mov r9, r2\n\ + mov r10, r3\n\ +_08134BC6:\n\ + movs r3, 0\n\ + adds r0, r5, 0x1\n\ + mov r12, r0\n\ + cmp r3, r7\n\ + bge _08134C0A\n\ + movs r1, 0xA4\n\ + adds r0, r5, 0\n\ + muls r0, r1\n\ + ldr r2, _08134BFC @ =gSaveBlock2\n\ + adds r0, r2\n\ + mov r1, r10\n\ + adds r4, r0, r1\n\ + mov r6, sp\n\ +_08134BE0:\n\ + lsls r0, r3, 1\n\ + add r0, sp\n\ + ldrh r2, [r4]\n\ + adds r1, r2, 0\n\ + ldrh r0, [r0]\n\ + cmp r1, r0\n\ + bcs _08134C00\n\ + movs r3, 0\n\ + movs r7, 0x1\n\ + strh r2, [r6]\n\ + mov r2, r9\n\ + strh r5, [r2]\n\ + b _08134C0A\n\ + .align 2, 0\n\ +_08134BFC: .4byte gSaveBlock2\n\ +_08134C00:\n\ + cmp r1, r0\n\ + bhi _08134C0A\n\ + adds r3, 0x1\n\ + cmp r3, r7\n\ + blt _08134BE0\n\ +_08134C0A:\n\ + cmp r3, r7\n\ + bne _08134C2A\n\ + lsls r1, r7, 1\n\ + mov r3, sp\n\ + adds r2, r3, r1\n\ + movs r3, 0xA4\n\ + adds r0, r5, 0\n\ + muls r0, r3\n\ + ldr r3, _08134C70 @ =gSaveBlock2\n\ + adds r0, r3\n\ + add r0, r10\n\ + ldrh r0, [r0]\n\ + strh r0, [r2]\n\ + add r1, r9\n\ + strh r5, [r1]\n\ + adds r7, 0x1\n\ +_08134C2A:\n\ + mov r5, r12\n\ + cmp r5, 0x4\n\ + ble _08134BC6\n\ + bl Random\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + adds r1, r7, 0\n\ + bl __modsi3\n\ + adds r5, r0, 0\n\ + ldr r2, _08134C70 @ =gSaveBlock2\n\ + lsls r0, r5, 1\n\ + add r0, sp\n\ + adds r0, 0xC\n\ + ldrh r1, [r0]\n\ + movs r0, 0xA4\n\ + muls r0, r1\n\ + adds r0, r2\n\ + movs r1, 0xA6\n\ + lsls r1, 1\n\ + adds r0, r1\n\ + mov r1, r8\n\ + movs r2, 0xA4\n\ + bl memcpy\n\ +_08134C5E:\n\ + add sp, 0x1C\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_08134C70: .4byte gSaveBlock2\n\ +.syntax divided\n"); +} + +u8 get_trainer_class_pic_index(void) +{ + if (gSaveBlock2.filler_A8.battleTowerTrainerId == 200) + { + return gTrainerClassToPicIndex[gSaveBlock2.filler_A8.ereaderTrainer.trainerClass]; + } + else if (gSaveBlock2.filler_A8.battleTowerTrainerId < 100) + { + return gTrainerClassToPicIndex[gBattleTowerTrainers[gSaveBlock2.filler_A8.battleTowerTrainerId].trainerClass]; + } + else + { + return gTrainerClassToPicIndex[gSaveBlock2.filler_A8.var_14C[gSaveBlock2.filler_A8.battleTowerTrainerId - 100].trainerClass]; + } +} + +u8 get_trainer_class_name_index(void) +{ + if (gSaveBlock2.filler_A8.battleTowerTrainerId == 200) + { + return gTrainerClassToNameIndex[gSaveBlock2.filler_A8.ereaderTrainer.trainerClass]; + } + else if (gSaveBlock2.filler_A8.battleTowerTrainerId >= 100) + { + return gTrainerClassToNameIndex[gSaveBlock2.filler_A8.var_14C[gSaveBlock2.filler_A8.battleTowerTrainerId - 100].trainerClass]; + } + else + { + return gTrainerClassToNameIndex[gBattleTowerTrainers[gSaveBlock2.filler_A8.battleTowerTrainerId].trainerClass]; + } +} + +void get_trainer_name(u8* dest) +{ + s32 i; + + if (gSaveBlock2.filler_A8.battleTowerTrainerId == 200) + { + for (i = 0; i < 7; i++) + { + dest[i] = gSaveBlock2.filler_A8.ereaderTrainer.name[i]; + } + } + else if (gSaveBlock2.filler_A8.battleTowerTrainerId < 100) + { + for (i = 0; i < 7; i++) + { + dest[i] = gBattleTowerTrainers[gSaveBlock2.filler_A8.battleTowerTrainerId].name[i]; + } + } + else + { + for (i = 0; i < 7; i++) + { + dest[i] = gSaveBlock2.filler_A8.var_14C[gSaveBlock2.filler_A8.battleTowerTrainerId - 100].name[i]; + } + } + + dest[i] = 0xFF; +} diff --git a/src/debug/unknown_debug_menu.c b/src/debug/unknown_debug_menu.c index a81625f2a..995fb38fc 100644 --- a/src/debug/unknown_debug_menu.c +++ b/src/debug/unknown_debug_menu.c @@ -1,4 +1,5 @@ #include "global.h" +#include "battle_tower.h" #include "menu.h" extern u8 gBattleCommunication[]; @@ -43,10 +44,10 @@ u8 sub_814A4B8(void) { gSaveBlock2.filler_A8.var_4AE[0] = 3; gSaveBlock2.filler_A8.var_4AE[1] = 3; - gSaveBlock2.filler_A8.var_4B4 = gBattleCommunication[0] + 1; - gSaveBlock2.filler_A8.var_4B6 = gBattleCommunication[0] + 1; - gSaveBlock2.filler_A8.var_4B0 = 1; - gSaveBlock2.filler_A8.var_4B2 = 1; + gSaveBlock2.filler_A8.var_4B4[0] = gBattleCommunication[0] + 1; + gSaveBlock2.filler_A8.var_4B4[1] = gBattleCommunication[0] + 1; + gSaveBlock2.filler_A8.var_4B0[0] = 1; + gSaveBlock2.filler_A8.var_4B0[1] = 1; CloseMenu(); return 1; } diff --git a/src/engine/mystery_event_script.c b/src/engine/mystery_event_script.c index a6568f5de..38ada0685 100644 --- a/src/engine/mystery_event_script.c +++ b/src/engine/mystery_event_script.c @@ -420,7 +420,7 @@ bool8 MEScrCmd_givepokemon(struct ScriptContext *ctx) bool8 MEScrCmd_addtrainer(struct ScriptContext *ctx) { u32 data = ScriptReadWord(ctx) - ctx->data[1] + ctx->data[0]; - memcpy(gSaveBlock2.filler_A8.ereaderTrainer, (void *)data, sizeof(gSaveBlock2.filler_A8.ereaderTrainer)); + memcpy(&gSaveBlock2.filler_A8.ereaderTrainer, (void *)data, sizeof(gSaveBlock2.filler_A8.ereaderTrainer)); sub_813601C(); StringExpandPlaceholders(gStringVar4, gOtherText_NewTrainerInHoenn); ctx->data[2] = 2; diff --git a/src/engine/record_mixing.c b/src/engine/record_mixing.c index 8dff432c1..000bafa4e 100644 --- a/src/engine/record_mixing.c +++ b/src/engine/record_mixing.c @@ -60,7 +60,7 @@ struct PlayerRecords u8 filler1044[0x40]; struct EasyChatPair easyChatPairs[5]; struct RecordMixingDayCareMail filler10AC; - u8 filler1124[0xA4]; + struct BattleTowerRecord battleTowerRecord; u16 filler11C8[0x34]; }; @@ -78,7 +78,7 @@ void RecordMixing_PrepareExchangePacket(void) gUnknown_02038738.mail[1] = gSaveBlock1.daycareData.misc.mail[1]; sub_8041324(gSaveBlock1.daycareData.mons, &gUnknown_02038738); memcpy(&unk_2018000.filler10AC, gUnknown_083D0280, sizeof(struct RecordMixingDayCareMail)); - memcpy(unk_2018000.filler1124, gUnknown_083D0284, sizeof(unk_2018000.filler1124)); + memcpy(&unk_2018000.battleTowerRecord, gUnknown_083D0284, sizeof(struct BattleTowerRecord)); if (GetMultiplayerId() == 0) unk_2018000.filler11C8[0] = GetRecordMixingGift(); @@ -92,7 +92,7 @@ void RecordMixing_ReceiveExchangePacket(u32 a) sub_80B9B1C(unk_2008000.filler1044, sizeof(struct PlayerRecords), a); sub_80FA4E4(unk_2008000.easyChatPairs, sizeof(struct PlayerRecords), a); sub_80B9C6C((u8 *)&unk_2008000.filler10AC, sizeof(struct PlayerRecords), a, unk_2008000.tvShows); - sub_80B9B70(unk_2008000.filler1124, sizeof(struct PlayerRecords), a); + sub_80B9B70(&unk_2008000.battleTowerRecord, sizeof(struct PlayerRecords), a); sub_80B9F3C(unk_2008000.filler11C8, a); } @@ -447,11 +447,11 @@ void sub_80B9B1C(u8 *a, size_t size, u8 index) sub_80F7F30(); } -void sub_80B9B70(u8 *a, size_t size, u8 index) +void sub_80B9B70(void *battleTowerRecord, u32 size, u8 index) { sub_80B9A88(gUnknown_0300071C); - memcpy(a + size * index, a + size * gUnknown_0300071C[index], 0xA4); - sub_8134AC0(a + size * index); + memcpy(battleTowerRecord + size * index, battleTowerRecord + size * gUnknown_0300071C[index], sizeof(struct BattleTowerRecord)); + sub_8134AC0(battleTowerRecord + size * index); } u8 sub_80B9BBC(u16 *a) diff --git a/src/engine/trainer_card.c b/src/engine/trainer_card.c index bcb62ede6..c8847b258 100644 --- a/src/engine/trainer_card.c +++ b/src/engine/trainer_card.c @@ -311,16 +311,16 @@ static void nullsub_60(u8 taskid) { } -void sub_8093390(struct TrainerCard *arg1) +void sub_8093390(struct TrainerCard *trainerCard) { u32 playTime; bool32 enteredHallOfFame; bool8 r4; u8 i; - arg1->gender = gSaveBlock2.playerGender; - arg1->playTimeHours = gSaveBlock2.playTimeHours; - arg1->playTimeMinutes = gSaveBlock2.playTimeMinutes; + trainerCard->gender = gSaveBlock2.playerGender; + trainerCard->playTimeHours = gSaveBlock2.playTimeHours; + trainerCard->playTimeMinutes = gSaveBlock2.playTimeMinutes; playTime = GetGameStat(GAME_STAT_FIRST_HOF_PLAY_TIME); enteredHallOfFame = GetGameStat(GAME_STAT_ENTERED_HOF); @@ -328,39 +328,39 @@ void sub_8093390(struct TrainerCard *arg1) { playTime = 0; } - arg1->firstHallOfFameA = playTime >> 16; - arg1->firstHallOfFameB = (playTime >> 8) & 0xFF; - arg1->firstHallOfFameC = playTime & 0xFF; + trainerCard->firstHallOfFameA = playTime >> 16; + trainerCard->firstHallOfFameB = (playTime >> 8) & 0xFF; + trainerCard->firstHallOfFameC = playTime & 0xFF; - arg1->hasPokedex = FlagGet(SYS_POKEDEX_GET); - arg1->var_3 = sub_8090FC0(); - arg1->pokedexSeen = GetPokedexSeenCount(); + trainerCard->hasPokedex = FlagGet(SYS_POKEDEX_GET); + trainerCard->var_3 = sub_8090FC0(); + trainerCard->pokedexSeen = GetPokedexSeenCount(); - arg1->trainerId = (gSaveBlock2.playerTrainerId[1] << 8) | gSaveBlock2.playerTrainerId[0]; + trainerCard->trainerId = (gSaveBlock2.playerTrainerId[1] << 8) | gSaveBlock2.playerTrainerId[0]; // Link Cable Battles - arg1->linkBattleWins = sav12_xor_get_clamped_above(GAME_STAT_LINK_BATTLE_WINS, 9999); - arg1->linkBattleLosses = sav12_xor_get_clamped_above(GAME_STAT_LINK_BATTLE_LOSSES, 9999); + trainerCard->linkBattleWins = sav12_xor_get_clamped_above(GAME_STAT_LINK_BATTLE_WINS, 9999); + trainerCard->linkBattleLosses = sav12_xor_get_clamped_above(GAME_STAT_LINK_BATTLE_LOSSES, 9999); // Contests w/ Friends - arg1->contestsWithFriends = sav12_xor_get_clamped_above(GAME_STAT_WON_LINK_CONTEST, 999); + trainerCard->contestsWithFriends = sav12_xor_get_clamped_above(GAME_STAT_WON_LINK_CONTEST, 999); // Pokéblocks w/ Friends - arg1->pokeblocksWithFriends = sav12_xor_get_clamped_above(GAME_STAT_POKEBLOCKS_WITH_FRIENDS, 0xFFFF); + trainerCard->pokeblocksWithFriends = sav12_xor_get_clamped_above(GAME_STAT_POKEBLOCKS_WITH_FRIENDS, 0xFFFF); // Pokémon Trades - arg1->pokemonTrades = sav12_xor_get_clamped_above(GAME_STAT_POKEMON_TRADES, 0xFFFF); + trainerCard->pokemonTrades = sav12_xor_get_clamped_above(GAME_STAT_POKEMON_TRADES, 0xFFFF); - // Battle tower? - arg1->battleTowerWins = gSaveBlock2.filler_A8.var_4C8; - arg1->battleTowerLosses = gSaveBlock2.filler_A8.var_4CA; - if (arg1->battleTowerWins > 9999) + // Battle Tower + trainerCard->battleTowerWins = gSaveBlock2.filler_A8.totalBattleTowerWins; + trainerCard->battleTowerLosses = gSaveBlock2.filler_A8.bestBattleTowerWinStreak; + if (trainerCard->battleTowerWins > 9999) { - arg1->battleTowerWins = 9999; + trainerCard->battleTowerWins = 9999; } - if (arg1->battleTowerLosses > 9999) + if (trainerCard->battleTowerLosses > 9999) { - arg1->battleTowerLosses = 9999; + trainerCard->battleTowerLosses = 9999; } r4 = FALSE; @@ -368,21 +368,21 @@ void sub_8093390(struct TrainerCard *arg1) { r4 = TRUE; } - arg1->var_4 = r4; + trainerCard->var_4 = r4; - arg1->money = gSaveBlock1.money; + trainerCard->money = gSaveBlock1.money; for (i = 0; i < 4; i++) { - arg1->var_28[i] = gSaveBlock1.unk2B1C[i]; + trainerCard->var_28[i] = gSaveBlock1.unk2B1C[i]; } for (i = 0; i < 8; i++) { - arg1->playerName[i] = gSaveBlock2.playerName[i]; + trainerCard->playerName[i] = gSaveBlock2.playerName[i]; } - arg1->stars = sub_80934F4(arg1); + trainerCard->stars = sub_80934F4(trainerCard); } u8 sub_80934C4(u8 id) diff --git a/src/field/choose_party.c b/src/field/choose_party.c index f35dcdf56..879139aa4 100644 --- a/src/field/choose_party.c +++ b/src/field/choose_party.c @@ -176,7 +176,7 @@ static bool8 IsMonAllowedInBattleTower(struct Pokemon *pkmn) return TRUE; } - if ((gSaveBlock2.filler_A8.var_4AC & 1) == 0 + if ((gSaveBlock2.filler_A8.battleTowerLevelType) == 0 && GetMonData(pkmn, MON_DATA_LEVEL) > 50) return FALSE; diff --git a/src/field/tv.c b/src/field/tv.c index e9b5e850d..89e978d00 100644 --- a/src/field/tv.c +++ b/src/field/tv.c @@ -675,11 +675,11 @@ void sub_80BE320(void) bravoTrainerTower->var01 = 1; StringCopy(bravoTrainerTower->trainerName, gSaveBlock2.playerName); StringCopy(bravoTrainerTower->pokemonName, gSaveBlock2.filler_A8.filler_3DC); - bravoTrainerTower->species = gSaveBlock2.filler_A8.var_480; - bravoTrainerTower->defeatedSpecies = gSaveBlock2.filler_A8.var_482; - bravoTrainerTower->var16 = sub_8135D3C(gSaveBlock2.filler_A8.var_4D0); + bravoTrainerTower->species = gSaveBlock2.filler_A8.firstMonSpecies; + bravoTrainerTower->defeatedSpecies = gSaveBlock2.filler_A8.defeatedBySpecies; + bravoTrainerTower->var16 = sub_8135D3C(gSaveBlock2.filler_A8.lastStreakLevelType); bravoTrainerTower->var1c = gSaveBlock2.filler_A8.var_4AD; - if (gSaveBlock2.filler_A8.var_4D0 == 0) + if (gSaveBlock2.filler_A8.lastStreakLevelType == 0) bravoTrainerTower->btLevel = 50; else bravoTrainerTower->btLevel = 100; -- cgit v1.2.3 From 37af50d1e2139f46e1f31c4b662fa51a2872c820 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Sun, 22 Oct 2017 14:37:52 -0700 Subject: decompile 2 battle_tower funcs --- src/battle_tower.c | 454 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 454 insertions(+) (limited to 'src') diff --git a/src/battle_tower.c b/src/battle_tower.c index 90884ec98..3ba522fe5 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -1,10 +1,20 @@ #include "global.h" #include "battle_tower.h" +#include "data2.h" #include "event_data.h" #include "map_object_constants.h" +#include "pokedex.h" #include "rng.h" +#include "string_util.h" +#include "text.h" #include "vars.h" +extern u8 gUnknown_08400E23[]; +extern u8 gUnknown_08400E29[]; +extern u8 gUnknown_08400E2E[]; +extern u8 gUnknown_08400E30[]; + +extern u16 gBattleTowerBanlist[]; extern u8 gTrainerClassToPicIndex[]; extern u8 gTrainerClassToNameIndex[]; extern u8 gUnknown_08405EB0[]; @@ -1116,3 +1126,447 @@ void get_trainer_name(u8* dest) dest[i] = 0xFF; } + +__attribute__((naked)) +void sub_8134DD4(void) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, 0x28\n\ + movs r0, 0\n\ + str r0, [sp, 0x18]\n\ + movs r1, 0x3C\n\ + str r1, [sp, 0x1C]\n\ + add r4, sp, 0xC\n\ + movs r0, 0xFF\n\ + strb r0, [r4]\n\ + bl ZeroEnemyPartyMons\n\ + ldr r1, _08134E04 @ =gSaveBlock2\n\ + ldr r2, _08134E08 @ =0x00000564\n\ + adds r0, r1, r2\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x13\n\ + bhi _08134E0C\n\ + movs r3, 0x6\n\ + str r3, [sp, 0x14]\n\ + b _08134ED8\n\ + .align 2, 0\n\ +_08134E04: .4byte gSaveBlock2\n\ +_08134E08: .4byte 0x00000564\n\ +_08134E0C:\n\ + cmp r0, 0x1D\n\ + bhi _08134E1A\n\ + movs r0, 0x9\n\ + str r0, [sp, 0x14]\n\ + movs r1, 0x1E\n\ + str r1, [sp, 0x18]\n\ + b _08134ED8\n\ +_08134E1A:\n\ + cmp r0, 0x27\n\ + bhi _08134E28\n\ + movs r2, 0xC\n\ + str r2, [sp, 0x14]\n\ + movs r3, 0x3C\n\ + str r3, [sp, 0x18]\n\ + b _08134ED8\n\ +_08134E28:\n\ + cmp r0, 0x31\n\ + bhi _08134E36\n\ + movs r0, 0xF\n\ + str r0, [sp, 0x14]\n\ + movs r1, 0x5A\n\ + str r1, [sp, 0x18]\n\ + b _08134ED8\n\ +_08134E36:\n\ + cmp r0, 0x3B\n\ + bhi _08134E44\n\ + movs r2, 0x12\n\ + str r2, [sp, 0x14]\n\ + movs r3, 0x78\n\ + str r3, [sp, 0x18]\n\ + b _08134ED8\n\ +_08134E44:\n\ + cmp r0, 0x45\n\ + bhi _08134E52\n\ + movs r0, 0x15\n\ + str r0, [sp, 0x14]\n\ + movs r1, 0x96\n\ + str r1, [sp, 0x18]\n\ + b _08134ED8\n\ +_08134E52:\n\ + cmp r0, 0x4F\n\ + bhi _08134E60\n\ + movs r2, 0x1F\n\ + str r2, [sp, 0x14]\n\ + movs r3, 0xB4\n\ + str r3, [sp, 0x18]\n\ + b _08134ED8\n\ +_08134E60:\n\ + cmp r0, 0x63\n\ + bhi _08134E72\n\ + movs r0, 0x1F\n\ + str r0, [sp, 0x14]\n\ + movs r1, 0xC8\n\ + str r1, [sp, 0x18]\n\ + movs r2, 0x64\n\ + str r2, [sp, 0x1C]\n\ + b _08134ED8\n\ +_08134E72:\n\ + cmp r0, 0xC8\n\ + bne _08134E9C\n\ + movs r6, 0\n\ +_08134E78:\n\ + movs r0, 0x64\n\ + muls r0, r6\n\ + ldr r1, _08134E94 @ =gEnemyParty\n\ + adds r0, r1\n\ + movs r1, 0x2C\n\ + muls r1, r6\n\ + ldr r2, _08134E98 @ =gSaveBlock2 + 0x4CC\n\ + adds r1, r2\n\ + bl sub_803ADE8\n\ + adds r6, 0x1\n\ + cmp r6, 0x2\n\ + ble _08134E78\n\ + b _08135082\n\ + .align 2, 0\n\ +_08134E94: .4byte gEnemyParty\n\ +_08134E98: .4byte gSaveBlock2 + 0x4CC\n\ +_08134E9C:\n\ + movs r6, 0\n\ + adds r4, r1, 0\n\ + ldr r3, _08134ECC @ =0xffffc158\n\ + adds r5, r4, r3\n\ +_08134EA4:\n\ + movs r0, 0x64\n\ + muls r0, r6\n\ + ldr r1, _08134ED0 @ =gEnemyParty\n\ + adds r0, r1\n\ + ldr r2, _08134ED4 @ =0x00000564\n\ + adds r1, r4, r2\n\ + ldrb r2, [r1]\n\ + movs r1, 0xA4\n\ + muls r1, r2\n\ + adds r1, r5\n\ + movs r2, 0x2C\n\ + muls r2, r6\n\ + adds r1, r2\n\ + bl sub_803ADE8\n\ + adds r6, 0x1\n\ + cmp r6, 0x2\n\ + ble _08134EA4\n\ + b _08135082\n\ + .align 2, 0\n\ +_08134ECC: .4byte 0xffffc158\n\ +_08134ED0: .4byte gEnemyParty\n\ +_08134ED4: .4byte 0x00000564\n\ +_08134ED8:\n\ + ldr r2, _08134EF4 @ =gSaveBlock2\n\ + ldr r3, _08134EF8 @ =0x00000554\n\ + adds r0, r2, r3\n\ + ldrb r1, [r0]\n\ + movs r0, 0x1\n\ + ands r0, r1\n\ + adds r1, r2, 0\n\ + cmp r0, 0\n\ + beq _08134F00\n\ + ldr r0, _08134EFC @ =gBattleTowerLevel100Mons\n\ + mov r10, r0\n\ + movs r2, 0x64\n\ + str r2, [sp, 0x10]\n\ + b _08134F08\n\ + .align 2, 0\n\ +_08134EF4: .4byte gSaveBlock2\n\ +_08134EF8: .4byte 0x00000554\n\ +_08134EFC: .4byte gBattleTowerLevel100Mons\n\ +_08134F00:\n\ + ldr r3, _08134F54 @ =gBattleTowerLevel50Mons\n\ + mov r10, r3\n\ + movs r0, 0x32\n\ + str r0, [sp, 0x10]\n\ +_08134F08:\n\ + ldr r2, _08134F58 @ =gBattleTowerTrainers\n\ + ldr r3, _08134F5C @ =0x00000564\n\ + adds r0, r1, r3\n\ + ldrb r1, [r0]\n\ + lsls r0, r1, 1\n\ + adds r0, r1\n\ + lsls r0, 3\n\ + adds r0, r2\n\ + ldrb r0, [r0, 0x9]\n\ + str r0, [sp, 0x20]\n\ + movs r6, 0\n\ +_08134F1E:\n\ + bl Random\n\ + movs r1, 0xFF\n\ + ands r1, r0\n\ + ldr r2, [sp, 0x1C]\n\ + adds r0, r1, 0\n\ + muls r0, r2\n\ + asrs r0, 8\n\ + ldr r3, [sp, 0x18]\n\ + adds r7, r0, r3\n\ + ldr r0, [sp, 0x20]\n\ + cmp r0, 0\n\ + beq _08134F48\n\ + lsls r0, r7, 4\n\ + add r0, r10\n\ + ldrb r0, [r0, 0x3]\n\ + ldr r1, [sp, 0x20]\n\ + ands r0, r1\n\ + cmp r0, r1\n\ + beq _08134F48\n\ + b _0813507C\n\ +_08134F48:\n\ + movs r5, 0\n\ + lsls r0, r7, 4\n\ + mov r2, r10\n\ + adds r3, r0, r2\n\ + movs r4, 0\n\ + b _08134F64\n\ + .align 2, 0\n\ +_08134F54: .4byte gBattleTowerLevel50Mons\n\ +_08134F58: .4byte gBattleTowerTrainers\n\ +_08134F5C: .4byte 0x00000564\n\ +_08134F60:\n\ + adds r4, 0x64\n\ + adds r5, 0x1\n\ +_08134F64:\n\ + cmp r5, r6\n\ + bge _08134F7E\n\ + ldr r1, _08135094 @ =gEnemyParty\n\ + adds r0, r4, r1\n\ + movs r1, 0xB\n\ + movs r2, 0\n\ + str r3, [sp, 0x24]\n\ + bl GetMonData\n\ + ldr r3, [sp, 0x24]\n\ + ldrh r2, [r3]\n\ + cmp r0, r2\n\ + bne _08134F60\n\ +_08134F7E:\n\ + cmp r5, r6\n\ + bne _0813507C\n\ + movs r5, 0\n\ + cmp r5, r6\n\ + bge _08134FCC\n\ + ldr r3, _08135098 @ =gBattleTowerHeldItems\n\ + mov r9, r3\n\ + lsls r0, r7, 4\n\ + add r0, r10\n\ + mov r8, r0\n\ + movs r3, 0\n\ +_08134F94:\n\ + ldr r0, _08135094 @ =gEnemyParty\n\ + adds r4, r3, r0\n\ + adds r0, r4, 0\n\ + movs r1, 0xC\n\ + movs r2, 0\n\ + str r3, [sp, 0x24]\n\ + bl GetMonData\n\ + ldr r3, [sp, 0x24]\n\ + cmp r0, 0\n\ + beq _08134FC4\n\ + adds r0, r4, 0\n\ + movs r1, 0xC\n\ + movs r2, 0\n\ + bl GetMonData\n\ + mov r2, r8\n\ + ldrb r1, [r2, 0x2]\n\ + lsls r1, 1\n\ + add r1, r9\n\ + ldr r3, [sp, 0x24]\n\ + ldrh r1, [r1]\n\ + cmp r0, r1\n\ + beq _08134FCC\n\ +_08134FC4:\n\ + adds r3, 0x64\n\ + adds r5, 0x1\n\ + cmp r5, r6\n\ + blt _08134F94\n\ +_08134FCC:\n\ + cmp r5, r6\n\ + bne _0813507C\n\ + movs r5, 0\n\ + cmp r5, r6\n\ + bge _08134FEE\n\ + add r0, sp, 0x4\n\ + ldrh r0, [r0]\n\ + cmp r0, r7\n\ + beq _08134FEE\n\ + add r1, sp, 0x4\n\ +_08134FE0:\n\ + adds r1, 0x2\n\ + adds r5, 0x1\n\ + cmp r5, r6\n\ + bge _08134FEE\n\ + ldrh r0, [r1]\n\ + cmp r0, r7\n\ + bne _08134FE0\n\ +_08134FEE:\n\ + cmp r5, r6\n\ + bne _0813507C\n\ + lsls r0, r6, 1\n\ + add r0, sp\n\ + adds r0, 0x4\n\ + strh r7, [r0]\n\ + movs r3, 0x64\n\ + adds r0, r6, 0\n\ + muls r0, r3\n\ + ldr r1, _08135094 @ =gEnemyParty\n\ + adds r0, r1\n\ + lsls r4, r7, 4\n\ + mov r3, r10\n\ + adds r2, r4, r3\n\ + ldrh r1, [r2]\n\ + ldrb r2, [r2, 0xC]\n\ + str r2, [sp]\n\ + ldr r2, [sp, 0x10]\n\ + ldr r3, [sp, 0x14]\n\ + bl CreateMonWithEVSpread\n\ + movs r5, 0\n\ + adds r0, r6, 0x1\n\ + mov r9, r0\n\ + mov r8, r4\n\ + movs r0, 0x64\n\ + adds r7, r6, 0\n\ + muls r7, r0\n\ + mov r0, r10\n\ + adds r0, 0x4\n\ + adds r4, r0\n\ + ldr r3, _08135094 @ =gEnemyParty\n\ +_0813502E:\n\ + ldrh r1, [r4]\n\ + lsls r2, r5, 24\n\ + lsrs r2, 24\n\ + adds r0, r7, r3\n\ + str r3, [sp, 0x24]\n\ + bl SetMonMoveSlot\n\ + ldrh r0, [r4]\n\ + ldr r3, [sp, 0x24]\n\ + cmp r0, 0xDA\n\ + bne _0813504A\n\ + movs r0, 0\n\ + mov r1, sp\n\ + strb r0, [r1, 0xC]\n\ +_0813504A:\n\ + adds r4, 0x2\n\ + adds r5, 0x1\n\ + cmp r5, 0x3\n\ + ble _0813502E\n\ + movs r2, 0x64\n\ + adds r4, r6, 0\n\ + muls r4, r2\n\ + ldr r3, _08135094 @ =gEnemyParty\n\ + adds r4, r3\n\ + adds r0, r4, 0\n\ + movs r1, 0x20\n\ + add r2, sp, 0xC\n\ + bl SetMonData\n\ + mov r0, r8\n\ + add r0, r10\n\ + ldrb r2, [r0, 0x2]\n\ + lsls r2, 1\n\ + ldr r0, _08135098 @ =gBattleTowerHeldItems\n\ + adds r2, r0\n\ + adds r0, r4, 0\n\ + movs r1, 0xC\n\ + bl SetMonData\n\ + mov r6, r9\n\ +_0813507C:\n\ + cmp r6, 0x3\n\ + beq _08135082\n\ + b _08134F1E\n\ +_08135082:\n\ + add sp, 0x28\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_08135094: .4byte gEnemyParty\n\ +_08135098: .4byte gBattleTowerHeldItems\n\ +.syntax divided\n"); +} + +u32 CountBattleTowerBanlistCaught() +{ + s32 i; + u32 numCaught = 0; + + for (i = 0; gBattleTowerBanlist[i] != 0xFFFF; i++) + { + if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(gBattleTowerBanlist[i]), FLAG_GET_CAUGHT)) + { + numCaught++; + } + } + + return numCaught; +} + +u8 AppendBattleTowerBannedSpeciesName(u16 species, u8 curIndexToAppend, s32 numToAppend) +{ + if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(species), FLAG_GET_CAUGHT)) + { + curIndexToAppend++; + + switch (curIndexToAppend - 1) + { + case 0: + case 2: + case 4: + case 6: + case 8: + case 10: + if (numToAppend == curIndexToAppend) + { + StringAppend(gStringVar1, gUnknown_08400E23); + } + else if (numToAppend > curIndexToAppend) + { + StringAppend(gStringVar1, gUnknown_08400E29); + } + break; + case 1: + if (curIndexToAppend == numToAppend) + { + StringAppend(gStringVar1, gUnknown_08400E23); + } + else + { + StringAppend(gStringVar1, gUnknown_08400E29); + } + + StringAppend(gStringVar1, gUnknown_08400E30); + break; + case 3: + case 5: + case 7: + case 9: + default: + if (curIndexToAppend == numToAppend) + { + StringAppend(gStringVar1, gUnknown_08400E23); + } + else + { + StringAppend(gStringVar1, gUnknown_08400E29); + } + + StringAppend(gStringVar1, gUnknown_08400E2E); + break; + } + + StringAppend(gStringVar1, gSpeciesNames[species]); + } + + return curIndexToAppend; +} -- cgit v1.2.3 From 33f679d08e2efa07826389c6dce089cd407323d7 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Sun, 22 Oct 2017 15:26:28 -0700 Subject: Move battle_tower trainer data to src/ --- src/battle_tower.c | 6 +- src/data/battle_tower/trainers.h | 1403 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 1408 insertions(+), 1 deletion(-) create mode 100644 src/data/battle_tower/trainers.h (limited to 'src') diff --git a/src/battle_tower.c b/src/battle_tower.c index 3ba522fe5..a9d79df17 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -1,14 +1,19 @@ #include "global.h" #include "battle_tower.h" #include "data2.h" +#include "easy_chat.h" #include "event_data.h" #include "map_object_constants.h" +#include "moves.h" #include "pokedex.h" #include "rng.h" #include "string_util.h" #include "text.h" +#include "trainer.h" #include "vars.h" +#include "data/battle_tower/trainers.h" + extern u8 gUnknown_08400E23[]; extern u8 gUnknown_08400E29[]; extern u8 gUnknown_08400E2E[]; @@ -21,7 +26,6 @@ extern u8 gUnknown_08405EB0[]; extern u8 gUnknown_08405E7E[]; extern u8 gUnknown_08405E92[]; extern u8 gUnknown_08405E60[]; -extern struct BattleTowerTrainer gBattleTowerTrainers[]; extern void sub_8135C44(void); extern void sub_813601C(void); diff --git a/src/data/battle_tower/trainers.h b/src/data/battle_tower/trainers.h new file mode 100644 index 000000000..857231e61 --- /dev/null +++ b/src/data/battle_tower/trainers.h @@ -0,0 +1,1403 @@ +const struct BattleTowerTrainer gBattleTowerTrainers[] = +{ + { + .trainerClass = TRAINER_CLASS_YOUNGSTER, + .name = _("ALVIN"), + .teamFlags = 0x01, + .padding = 0, + .easyChat = { + EC_WORD_ARE, + EC_WORD_YOU, + EC_WORD_READY, + EC_WORD_QUES, + EC_WORD_HERE_I_COME, + EC_WORD_EXCL, + }, + }, + { + .trainerClass = TRAINER_CLASS_BIRD_KEEPER, + .name = _("DIRK"), + .teamFlags = 0x01, + .padding = 0, + .easyChat = { + EC_WORD_OKAY, + EC_WORD_I_AM, + EC_WORD_GOING, + EC_WORD_FOR, + EC_WORD_IT, + EC_WORD_EXCL, + }, + }, + { + .trainerClass = TRAINER_CLASS_LADY, + .name = _("CYBIL"), + .teamFlags = 0x02, + .padding = 0, + .easyChat = { + EC_WORD_YOU_RE, + EC_WORD_A, + EC_WORD_PUSHOVER, + EC_WORD_LET_S, + EC_WORD_GET, + EC_WORD_GOING, + }, + }, + { + .trainerClass = TRAINER_CLASS_BLACK_BELT, + .name = _("CHEN"), + .teamFlags = 0x05, + .padding = 0, + .easyChat = { + EC_WORD_MY, + EC_WORD_SPIRIT, + EC_WORD_IS, + EC_WORD_ENOUGH, + EC_WORD_SNORT, + EC_WORD_ARRGH, + }, + }, + { + .trainerClass = TRAINER_CLASS_NINJA_BOY, + .name = _("YOSHI"), + .teamFlags = 0x05, + .padding = 0, + .easyChat = { + EC_WORD_GO, + EC_WORD_MY, + EC_WORD_POKEMON, + EC_WORD_FIGHT, + EC_WORD_THE, + EC_WORD_BATTLE, + }, + }, + { + .trainerClass = TRAINER_CLASS_SCHOOL_KID_F, + .name = _("TINA"), + .teamFlags = 0x0A, + .padding = 0, + .easyChat = { + EC_WORD_STUDY, + EC_WORD_IS, + EC_WORD_BORING, + EC_WORD_LET_S, + EC_WORD_BATTLE, + EC_WORD_NOW, + }, + }, + { + .trainerClass = TRAINER_CLASS_BUG_MANIAC, + .name = _("COREY"), + .teamFlags = 0x41, + .padding = 0, + .easyChat = { + EC_WORD_HEY, + EC_WORD_I, + EC_WORD_WILL, + EC_MOVE2(TRANSFORM), + EC_WORD_FOR, + EC_MOVE(STRENGTH), + }, + }, + { + .trainerClass = TRAINER_CLASS_FISHERMAN, + .name = _("GORDON"), + .teamFlags = 0x01, + .padding = 0, + .easyChat = { + EC_WORD_I, + EC_WORD_NEED, + EC_WORD_A, + EC_WORD_VACATION, + EC_WORD_RIGHT, + EC_WORD_NOW, + }, + }, + { + .trainerClass = TRAINER_CLASS_TUBER_F, + .name = _("ANN"), + .teamFlags = 0x02, + .padding = 0, + .easyChat = { + EC_WORD_WE, + EC_WORD_ALL, + EC_WORD_ADORE, + EC_WORD_POKEMON, + EC_WORD_ABSOLUTELY, + EC_WORD_TRULY, + }, + }, + { + .trainerClass = TRAINER_CLASS_POKEFAN_F, + .name = _("JULIA"), + .teamFlags = 0x42, + .padding = 0, + .easyChat = { + EC_WORD_I_AM, + EC_WORD_A, + EC_WORD_CUTE, + EC_WORD_LADY, + EC_WORD_YES, + EC_WORD_I_AM, + }, + }, + { + .trainerClass = TRAINER_CLASS_GENTLEMAN, + .name = _("GREGORY"), + .teamFlags = 0x01, + .padding = 0, + .easyChat = { + EC_WORD_I, + EC_WORD_THINK, + EC_WORD_WE, + EC_WORD_SHOULD, + EC_WORD_START, + EC_WORD_TODAY, + }, + }, + { + .trainerClass = TRAINER_CLASS_CAMPER, + .name = _("KEITH"), + .teamFlags = 0x01, + .padding = 0, + .easyChat = { + EC_WORD_YOU_RE, + EC_WORD_MY, + EC_WORD_FRIEND, + EC_WORD_FROM, + EC_WORD_NOW, + EC_WORD_ON, + }, + }, + { + .trainerClass = TRAINER_CLASS_RUNNING_TRIATHLETE_F, + .name = _("KENDRA"), + .teamFlags = 0x0A, + .padding = 0, + .easyChat = { + EC_WORD_I_AM, + EC_MOVE(SWIFT), + EC_WORD_HOW, + EC_WORD_ABOUT, + EC_WORD_YOU, + EC_WORD_QUES, + }, + }, + { + .trainerClass = TRAINER_CLASS_HIKER, + .name = _("DEV"), + .teamFlags = 0x01, + .padding = 0, + .easyChat = { + EC_WORD_WAHAHAHA, + EC_WORD_I_AM, + EC_WORD_FEELING, + EC_WORD_LIKE, + EC_WORD_IT_S, + EC_MOVE2(PAY_DAY), + }, + }, + { + .trainerClass = TRAINER_CLASS_BATTLE_GIRL, + .name = _("CASSIE"), + .teamFlags = 0x0A, + .padding = 0, + .easyChat = { + EC_WORD_YOU_RE, + EC_WORD_STRONG, + EC_WORD_AREN_T, + 0xFFFF, + EC_WORD_YOU, + EC_WORD_QUES, + }, + }, + { + .trainerClass = TRAINER_CLASS_PSYCHIC_M, + .name = _("JULIAN"), + .teamFlags = 0x05, + .padding = 0, + .easyChat = { + EC_WORD_FUFUFU, + 0xFFFF, + EC_WORD_YOU, + EC_WORD_CAN_T, + EC_WORD_WIN, + EC_WORD_KID, + }, + }, + { + .trainerClass = TRAINER_CLASS_LASS, + .name = _("JOYCE"), + .teamFlags = 0x02, + .padding = 0, + .easyChat = { + EC_WORD_BE, + EC_WORD_KIND, + EC_WORD_TO, + EC_WORD_THE, + EC_WORD_DIGITAL, + EC_WORD_IDOL, + }, + }, + { + .trainerClass = TRAINER_CLASS_GUITARIST, + .name = _("LES"), + .teamFlags = 0x01, + .padding = 0, + .easyChat = { + EC_WORD_I_AM, + EC_WORD_GREAT, + EC_WORD_YOU_RE, + EC_WORD_JUST, + EC_WORD_RATHER, + EC_WORD_OKAY, + }, + }, + { + .trainerClass = TRAINER_CLASS_RICH_BOY, + .name = _("CLINTON"), + .teamFlags = 0x01, + .padding = 0, + .easyChat = { + EC_WORD_I, + EC_WORD_HAVE, + EC_WORD_ROUGH_SKIN, + EC_WORD_I, + EC_WORD_NEED, + EC_WORD_NATURAL_CURE, + }, + }, + { + .trainerClass = TRAINER_CLASS_BUG_CATCHER, + .name = _("LEWIS"), + .teamFlags = 0x01, + .padding = 0, + .easyChat = { + EC_WORD_THIS, + EC_WORD_IS, + EC_WORD_EXCITING, + EC_WORD_CAN, + EC_WORD_I, + EC_WORD_WIN, + }, + }, + { + .trainerClass = TRAINER_CLASS_PICNICKER, + .name = _("RACHAEL"), + .teamFlags = 0x02, + .padding = 0, + .easyChat = { + EC_WORD_I, + EC_WORD_LIKE, + EC_WORD_WALKING, + EC_WORD_WITH, + EC_WORD_MY, + EC_WORD_POKEMON, + }, + }, + { + .trainerClass = TRAINER_CLASS_COLLECTOR, + .name = _("HAROLD"), + .teamFlags = 0x09, + .padding = 0, + .easyChat = { + EC_WORD_HERE, + EC_WORD_THEY, + EC_WORD_COME, + EC_WORD_MY, + EC_MOVE2(SUPERPOWER), + EC_WORD_POKEMON, + }, + }, + { + .trainerClass = TRAINER_CLASS_TUBER_M, + .name = _("KIPP"), + .teamFlags = 0x01, + .padding = 0, + .easyChat = { + EC_WORD_I_AM, + EC_WORD_A, + EC_WORD_GENIUS, + EC_WORD_I, + EC_WORD_SHOULD, + EC_WORD_WIN, + }, + }, + { + .trainerClass = TRAINER_CLASS_KINDLER, + .name = _("IRWIN"), + .teamFlags = 0x05, + .padding = 0, + .easyChat = { + EC_WORD_YOU, + EC_WORD_WILL, + EC_WORD_BE, + EC_WORD_FEELING, + EC_WORD_MY, + EC_WORD_FIRE, + }, + }, + { + .trainerClass = TRAINER_CLASS_PSYCHIC_F, + .name = _("EILEEN"), + .teamFlags = 0x0A, + .padding = 0, + .easyChat = { + EC_WORD_I, + EC_WORD_WILL, + EC_MOVE(ASTONISH), + EC_WORD_YOU, + EC_WORD_IN, + EC_WORD_BATTLE, + }, + }, + { + .trainerClass = TRAINER_CLASS_SWIMMER_F, + .name = _("ANNE"), + .teamFlags = 0x02, + .padding = 0, + .easyChat = { + EC_WORD_SORRY, + EC_WORD_BUT, + EC_WORD_YOU, + EC_WORD_WILL, + EC_WORD_NOT, + EC_WORD_WIN, + }, + }, + { + .trainerClass = TRAINER_CLASS_CYCLING_TRIATHLETE_F, + .name = _("RUTH"), + .teamFlags = 0x06, + .padding = 0, + .easyChat = { + EC_WORD_A, + EC_WORD_STRONG, + EC_WORD_GIRL, + EC_WORD_WANTS, + EC_WORD_TOUGH, + EC_WORD_POKEMON, + }, + }, + { + .trainerClass = TRAINER_CLASS_POKEMANIAC, + .name = _("JEREMY"), + .teamFlags = 0x40, + .padding = 0, + .easyChat = { + EC_WORD_MY, + EC_WORD_POKEMON, + EC_WORD_ARE, + EC_WORD_COOL, + EC_WORD_YOURS, + EC_WORD_CAN_T_WIN, + }, + }, + { + .trainerClass = TRAINER_CLASS_SAILOR, + .name = _("TREVOR"), + .teamFlags = 0x09, + .padding = 0, + .easyChat = { + EC_WORD_MY, + EC_WORD_OPPONENT, + EC_WORD_IS, + EC_WORD_FINALLY, + EC_WORD_HERE, + EC_WORD_EXCELLENT, + }, + }, + { + .trainerClass = TRAINER_CLASS_POKEMON_BREEDER_F, + .name = _("COLETTE"), + .teamFlags = 0x06, + .padding = 0, + .easyChat = { + EC_WORD_I, + EC_WORD_AM, + EC_WORD_HUNGRY, + EC_MOVE2(POUND), + EC_WORD_MY, + EC_MOVE2(BELLY_DRUM), + }, + }, + { + .trainerClass = TRAINER_CLASS_HEX_MANIAC, + .name = _("PAULA"), + .teamFlags = 0x42, + .padding = 0, + .easyChat = { + EC_WORD_IT_S, + EC_WORD_HARD, + EC_WORD_TO, + EC_WORD_TAKE, + EC_WORD_UGLY, + EC_MOVE(SPITE), + }, + }, + { + .trainerClass = TRAINER_CLASS_RUIN_MANIAC, + .name = _("STANLY"), + .teamFlags = 0x41, + .padding = 0, + .easyChat = { + EC_WORD_ADVENTURE, + EC_WORD_AND, + EC_WORD_BATTLE, + EC_WORD_ARE, + EC_WORD_MY, + EC_WORD_LIKES, + }, + }, + { + .trainerClass = TRAINER_CLASS_SWIMMING_TRIATHLETE_M, + .name = _("TROY"), + .teamFlags = 0x09, + .padding = 0, + .easyChat = { + EC_WORD_YOU, + EC_WORD_CAN_T, + EC_WORD_LOSE, + EC_WORD_TO, + EC_WORD_A, + EC_WORD_KID, + }, + }, + { + .trainerClass = TRAINER_CLASS_SCHOOL_KID_M, + .name = _("ED"), + .teamFlags = 0x08, + .padding = 0, + .easyChat = { + EC_WORD_POKEMON, + EC_WORD_DAILY, + EC_WORD_AT, + EC_WORD_SCHOOL, + EC_WORD_IT_S, + EC_WORD_AWESOME, + }, + }, + { + .trainerClass = TRAINER_CLASS_POKEMON_RANGER_F, + .name = _("ELLEN"), + .teamFlags = 0x04, + .padding = 0, + .easyChat = { + EC_WORD_ARE, + EC_WORD_YOU, + EC_WORD_KIND, + EC_WORD_TO, + EC_WORD_YOUR, + EC_WORD_POKEMON, + }, + }, + { + .trainerClass = TRAINER_CLASS_SWIMMER_M, + .name = _("ARNIE"), + .teamFlags = 0x09, + .padding = 0, + .easyChat = { + EC_WORD_I, + EC_WORD_BATTLE, + EC_WORD_SERIOUSLY, + EC_WORD_BEAUTIFUL, + EC_WORD_YOU, + EC_MOVE(DIG), + }, + }, + { + .trainerClass = TRAINER_CLASS_RUNNING_TRIATHLETE_M, + .name = _("HAL"), + .teamFlags = 0x09, + .padding = 0, + .easyChat = { + EC_WORD_BOY, + EC_WORD_I_AM, + EC_WORD_TIRED, + EC_WORD_READY, + EC_WORD_FOR, + EC_WORD_SLEEP, + }, + }, + { + .trainerClass = TRAINER_CLASS_BEAUTY, + .name = _("LAUREN"), + .teamFlags = 0x06, + .padding = 0, + .easyChat = { + EC_WORD_A, + EC_WORD_TRAINER, + EC_WORD_LIKE, + EC_WORD_YOU, + EC_WORD_IS, + EC_WORD_EXCITING, + }, + }, + { + .trainerClass = TRAINER_CLASS_AROMA_LADY, + .name = _("STACY"), + .teamFlags = 0x06, + .padding = 0, + .easyChat = { + EC_WORD_HAVE, + EC_WORD_YOU, + EC_WORD_A, + EC_WORD_STENCH, + EC_WORD_OR, + EC_MOVE(SWEET_SCENT), + }, + }, + { + .trainerClass = TRAINER_CLASS_COLLECTOR, + .name = _("DARYL"), + .teamFlags = 0x81, + .padding = 0, + .easyChat = { + EC_WORD_YOUR, + EC_WORD_POKEMON, + EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS, + EC_WORD_I, + EC_WORD_WANT, + EC_WORD_IT, + }, + }, + { + .trainerClass = TRAINER_CLASS_SWIMMING_TRIATHLETE_F, + .name = _("KATHY"), + .teamFlags = 0x04, + .padding = 0, + .easyChat = { + EC_WORD_I, + EC_WORD_WILL, + EC_WORD_TRY, + EC_WORD_MY, + EC_WORD_BEST, + EC_WORD_TODAY, + }, + }, + { + .trainerClass = TRAINER_CLASS_POKEMON_RANGER_M, + .name = _("HARRIS"), + .teamFlags = 0x0C, + .padding = 0, + .easyChat = { + EC_WORD_WAAAH, + EC_WORD_WAAAH, + EC_WORD_WAAAH, + EC_WORD_WAAAH, + EC_WORD_EHEHE, + EC_MOVE(FAKE_TEARS), + }, + }, + { + .trainerClass = TRAINER_CLASS_POKEFAN_M, + .name = _("GLENN"), + .teamFlags = 0x80, + .padding = 0, + .easyChat = { + EC_WORD_LISTEN, + EC_WORD_TO, + EC_WORD_MY, + EC_WORD_LOUSY, + EC_WORD_ANIME, + EC_WORD_SONG, + }, + }, + { + .trainerClass = TRAINER_CLASS_CYCLING_TRIATHLETE_M, + .name = _("NICO"), + .teamFlags = 0x04, + .padding = 0, + .easyChat = { + EC_WORD_DON_T, + EC_WORD_JUST, + EC_WORD_BATTLE, + EC_WORD_DO, + EC_WORD_SOMETHING, + EC_WORD_ELSE, + }, + }, + { + .trainerClass = TRAINER_CLASS_POKEMON_BREEDER_M, + .name = _("BAILEY"), + .teamFlags = 0x41, + .padding = 0, + .easyChat = { + EC_WORD_ARE, + EC_WORD_YOU, + EC_WORD_BUSY, + EC_WORD_GET, + EC_WORD_WITH, + EC_WORD_IT, + }, + }, + { + .trainerClass = TRAINER_CLASS_PARASOL_LADY, + .name = _("ABBIE"), + .teamFlags = 0x08, + .padding = 0, + .easyChat = { + EC_WORD_THE, + EC_MOVE(MORNING_SUN), + EC_WORD_HAS, + EC_WORD_SO, + EC_WORD_MUCH, + EC_MOVE(COSMIC_POWER), + }, + }, + { + .trainerClass = TRAINER_CLASS_CAMPER, + .name = _("AL"), + .teamFlags = 0x0C, + .padding = 0, + .easyChat = { + EC_WORD_LET_S, + EC_WORD_HAVE, + EC_WORD_AN, + EC_WORD_EXCITING, + EC_WORD_BATTLE, + EC_WORD_YEEHAW_EXCL, + }, + }, + { + .trainerClass = TRAINER_CLASS_SCHOOL_KID_F, + .name = _("PEGGY"), + .teamFlags = 0x42, + .padding = 0, + .easyChat = { + EC_WORD_I, + EC_WORD_WANT, + EC_WORD_TO, + EC_WORD_SEE, + EC_WORD_SOME, + EC_MOVE(GROWTH), + }, + }, + { + .trainerClass = TRAINER_CLASS_BEAUTY, + .name = _("NAOMI"), + .teamFlags = 0x04, + .padding = 0, + .easyChat = { + EC_WORD_IT, + EC_WORD_WAS, + EC_WORD_GREAT, + EC_WORD_TO, + EC_WORD_BE, + EC_WORD_YOUNG, + }, + }, + { + .trainerClass = TRAINER_CLASS_NINJA_BOY, + .name = _("KENJI"), + .teamFlags = 0x0C, + .padding = 0, + .easyChat = { + EC_WORD_PLEASE, + 0xFFFF, + EC_WORD_DON_T, + EC_WORD_BE, + EC_WORD_MEAN, + EC_WORD_TO_ME, + }, + }, + { + .trainerClass = TRAINER_CLASS_CYCLING_TRIATHLETE_M, + .name = _("ROSS"), + .teamFlags = 0x01, + .padding = 0, + .easyChat = { + EC_WORD_WAKE_UP, + EC_WORD_MY, + EC_MOVE2(HIDDEN_POWER), + EC_WORD_AND, + EC_MOVE(ASTONISH), + EC_WORD_ME, + }, + }, + { + .trainerClass = TRAINER_CLASS_POKEMON_RANGER_F, + .name = _("EDNA"), + .teamFlags = 0x02, + .padding = 0, + .easyChat = { + EC_WORD_BATTLE_TOWER, + EC_WORD_IS, + EC_WORD_SO, + EC_WORD_ENTERTAINING, + EC_WORD_IT_S, + EC_WORD_AWESOME, + }, + }, + { + .trainerClass = TRAINER_CLASS_RUIN_MANIAC, + .name = _("ANTON"), + .teamFlags = 0x41, + .padding = 0, + .easyChat = { + EC_WORD_BLEND, + EC_WORD_THICK_FAT, + EC_WORD_AND, + EC_WORD_CHLOROPHYLL, + EC_WORD_IT_S, + EC_WORD_TASTY, + }, + }, + { + .trainerClass = TRAINER_CLASS_SWIMMER_M, + .name = _("MITCH"), + .teamFlags = 0x81, + .padding = 0, + .easyChat = { + EC_WORD_NEXT, + EC_WORD_A, + EC_WORD_GIRL, + EC_WORD_WITH, + EC_WORD_A, + EC_MOVE(SCARY_FACE), + }, + }, + { + .trainerClass = TRAINER_CLASS_HEX_MANIAC, + .name = _("ROD"), + .teamFlags = 0x42, + .padding = 0, + .easyChat = { + EC_WORD_GIMME, + EC_WORD_A, + EC_WORD_TOUGH, + EC_WORD_BATTLE, + EC_WORD_NOT, + EC_WORD_WIMPY, + }, + }, + { + .trainerClass = TRAINER_CLASS_RUNNING_TRIATHLETE_M, + .name = _("RICH"), + .teamFlags = 0x01, + .padding = 0, + .easyChat = { + EC_WORD_TASTY, + EC_WORD_WATER, + EC_WORD_IS, + EC_WORD_HIP_AND, + EC_WORD_HAPPENING, + EC_WORD_YES_SIR_EXCL, + }, + }, + { + .trainerClass = TRAINER_CLASS_POKEFAN_M, + .name = _("DANIEL"), + .teamFlags = 0x80, + .padding = 0, + .easyChat = { + EC_WORD_GO, + EC_WORD_FOR, + EC_WORD_IT, + EC_WORD_MY, + EC_WORD_LOVEY_DOVEY, + EC_WORD_POKEMON, + }, + }, + { + .trainerClass = TRAINER_CLASS_PSYCHIC_F, + .name = _("GLORIA"), + .teamFlags = 0x82, + .padding = 0, + .easyChat = { + EC_WORD_LET_S, + EC_WORD_GET, + EC_WORD_THIS, + EC_WORD_FIERY, + EC_WORD_BATTLE, + EC_WORD_HAPPENING, + }, + }, + { + .trainerClass = TRAINER_CLASS_GUITARIST, + .name = _("NELSON"), + .teamFlags = 0x01, + .padding = 0, + .easyChat = { + EC_WORD_MUSIC, + EC_WORD_IS, + EC_WORD_MY, + EC_WORD_ALL, + EC_WORD_MY, + EC_WORD_DESTINY, + }, + }, + { + .trainerClass = TRAINER_CLASS_KINDLER, + .name = _("FERRIS"), + .teamFlags = 0x41, + .padding = 0, + .easyChat = { + EC_WORD_GOOD, + EC_WORD_IT, + EC_WORD_IS, + EC_WORD_SO, + EC_WORD_VERY, + EC_WORD_GOOD, + }, + }, + { + .trainerClass = TRAINER_CLASS_AROMA_LADY, + .name = _("AMANDA"), + .teamFlags = 0x82, + .padding = 0, + .easyChat = { + EC_WORD_WHAT, + EC_WORD_KIND, + EC_WORD_OF, + EC_WORD_TRAINER, + EC_WORD_ARE, + EC_WORD_YOU, + }, + }, + { + .trainerClass = TRAINER_CLASS_SWIMMING_TRIATHLETE_M, + .name = _("MASON"), + .teamFlags = 0x10, + .padding = 0, + .easyChat = { + EC_WORD_I, + EC_WORD_DON_T, + EC_WORD_KNOW, + EC_WORD_HOW, + EC_WORD_TO, + EC_WORD_LOSE, + }, + }, + { + .trainerClass = TRAINER_CLASS_DRAGON_TAMER, + .name = _("NATE"), + .teamFlags = 0x10, + .padding = 0, + .easyChat = { + EC_WORD_DRAGON, + EC_WORD_POKEMON, + EC_WORD_ARE, + EC_WORD_ALL, + EC_WORD_THE, + EC_MOVE(RAGE), + }, + }, + { + .trainerClass = TRAINER_CLASS_LASS, + .name = _("MIRIAM"), + .teamFlags = 0x82, + .padding = 0, + .easyChat = { + EC_WORD_YOU_RE, + EC_WORD_TOO_STRONG, + EC_WORD_SERIOUSLY, + EC_WORD_IT_S, + EC_WORD_BAD, + EC_WORD_NEWS, + }, + }, + { + .trainerClass = TRAINER_CLASS_POKEMANIAC, + .name = _("THEO"), + .teamFlags = 0x40, + .padding = 0, + .easyChat = { + EC_WORD_I, + EC_WORD_ADORE, + EC_WORD_MY, + EC_WORD_MEGA, + EC_WORD_CUTE, + EC_WORD_PLUSH_DOLL, + }, + }, + { + .trainerClass = TRAINER_CLASS_SWIMMING_TRIATHLETE_F, + .name = _("PAMELA"), + .teamFlags = 0x10, + .padding = 0, + .easyChat = { + EC_WORD_HERE_I_COME, + EC_WORD_I_AM, + EC_WORD_THE, + EC_WORD_CUTE, + EC_MOVE2(WATER_SPORT), + EC_WORD_IDOL, + }, + }, + { + .trainerClass = TRAINER_CLASS_POKEFAN_F, + .name = _("ALISSA"), + .teamFlags = 0x20, + .padding = 0, + .easyChat = { + EC_WORD_IT_S, + EC_WORD_A, + EC_WORD_PREPOSTEROUS, + EC_WORD_MATCH, + EC_WORD_I_AM, + EC_WORD_SHOCKED, + }, + }, + { + .trainerClass = TRAINER_CLASS_GENTLEMAN, + .name = _("ARTHUR"), + .teamFlags = 0x20, + .padding = 0, + .easyChat = { + EC_WORD_PLEASE, + EC_WORD_GIVE, + EC_WORD_ME, + EC_WORD_A, + EC_WORD_GOOD, + EC_WORD_BATTLE, + }, + }, + { + .trainerClass = TRAINER_CLASS_SWIMMER_F, + .name = _("MARCY"), + .teamFlags = 0x82, + .padding = 0, + .easyChat = { + EC_WORD_I_AM, + EC_WORD_BEAUTIFUL, + EC_WORD_YOU, + EC_WORD_CAN_T, + EC_WORD_BEAT, + EC_WORD_ME, + }, + }, + { + .trainerClass = TRAINER_CLASS_COOL_TRAINER_M, + .name = _("MILLER"), + .teamFlags = 0x10, + .padding = 0, + .easyChat = { + EC_WORD_I, + EC_WORD_BATTLE, + EC_WORD_DAILY, + EC_WORD_I, + EC_WORD_WON_T, + EC_WORD_LOSE, + }, + }, + { + .trainerClass = TRAINER_CLASS_BIRD_KEEPER, + .name = _("OLIVER"), + .teamFlags = 0x11, + .padding = 0, + .easyChat = { + EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS, + EC_WORD_GIGGLE, + EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS, + 0xFFFF, + 0xFFFF, + 0xFFFF, + }, + }, + { + .trainerClass = TRAINER_CLASS_CYCLING_TRIATHLETE_F, + .name = _("MOLLY"), + .teamFlags = 0x12, + .padding = 0, + .easyChat = { + EC_WORD_HOW, + EC_WORD_ARE, + EC_WORD_YOU, + EC_WORD_ON, + EC_WORD_MONDAY, + EC_WORD_MORNING, + }, + }, + { + .trainerClass = TRAINER_CLASS_BUG_MANIAC, + .name = _("JASON"), + .teamFlags = 0x40, + .padding = 0, + .easyChat = { + EC_WORD_WATER, + EC_WORD_AND, + EC_WORD_BUG, + EC_WORD_POKEMON, + EC_WORD_ARE, + EC_WORD_GREAT, + }, + }, + { + .trainerClass = TRAINER_CLASS_BATTLE_GIRL, + .name = _("AVA"), + .teamFlags = 0x20, + .padding = 0, + .easyChat = { + EC_WORD_WHAT, + EC_WORD_IS, + EC_WORD_THIS, + EC_WORD_PRESSURE, + EC_WORD_ELLIPSIS, + EC_WORD_STATIC, + }, + }, + { + .trainerClass = TRAINER_CLASS_FISHERMAN, + .name = _("HANK"), + .teamFlags = 0x10, + .padding = 0, + .easyChat = { + EC_WORD_YOU_RE, + EC_WORD_A, + EC_WORD_KID, + EC_WORD_YOU, + EC_WORD_CAN_T, + EC_WORD_WIN, + }, + }, + { + .trainerClass = TRAINER_CLASS_SAILOR, + .name = _("PETER"), + .teamFlags = 0x20, + .padding = 0, + .easyChat = { + EC_WORD_IT_S, + EC_WORD_SERIOUSLY, + EC_WORD_TERRIBLE, + EC_WORD_I, + EC_WORD_REALLY, + EC_WORD_THINK, + }, + }, + { + .trainerClass = TRAINER_CLASS_EXPERT_F, + .name = _("MINDY"), + .teamFlags = 0x20, + .padding = 0, + .easyChat = { + EC_WORD_YOU, + EC_WORD_APPEAR, + EC_WORD_TO, + EC_WORD_TRAIN, + EC_WORD_VERY, + EC_WORD_WELL, + }, + }, + { + .trainerClass = TRAINER_CLASS_BUG_MANIAC, + .name = _("DWIGHT"), + .teamFlags = 0x11, + .padding = 0, + .easyChat = { + EC_WORD_ARE, + EC_WORD_YOU, + EC_WORD_STRONG, + EC_WORD_YOU, + EC_WORD_ARE, + EC_WORD_SCARY, + }, + }, + { + .trainerClass = TRAINER_CLASS_POKEMON_BREEDER_F, + .name = _("REENA"), + .teamFlags = 0x12, + .padding = 0, + .easyChat = { + EC_WORD_I, + EC_WORD_ALWAYS, + EC_WORD_LOSE, + EC_WORD_MAYBE, + EC_WORD_TODAY, + EC_WORD_ELLIPSIS, + }, + }, + { + .trainerClass = TRAINER_CLASS_PARASOL_LADY, + .name = _("MEGAN"), + .teamFlags = 0x10, + .padding = 0, + .easyChat = { + EC_WORD_DON_T, + EC_WORD_MAKE, + EC_WORD_THAT, + EC_MOVE(SCARY_FACE), + EC_WORD_AT, + EC_WORD_ME, + }, + }, + { + .trainerClass = TRAINER_CLASS_RUNNING_TRIATHLETE_F, + .name = _("SIERRA"), + .teamFlags = 0x04, + .padding = 0, + .easyChat = { + EC_WORD_I_VE, + EC_WORD_RUN, + EC_WORD_A_LOT, + EC_WORD_SO, + EC_WORD_I_AM, + EC_WORD_HEALTHY, + }, + }, + { + .trainerClass = TRAINER_CLASS_POKEMON_RANGER_M, + .name = _("ARNOLD"), + .teamFlags = 0x08, + .padding = 0, + .easyChat = { + EC_WORD_I_AM, + EC_WORD_FEELING, + EC_WORD_AWESOME, + EC_WORD_MY, + EC_WORD_POKEMON, + EC_WORD_ROCK, + }, + }, + { + .trainerClass = TRAINER_CLASS_BLACK_BELT, + .name = _("XIN"), + .teamFlags = 0x04, + .padding = 0, + .easyChat = { + EC_WORD_HOO_HAH, + EC_WORD_ARE, + EC_WORD_YOU, + EC_WORD_READY, + EC_WORD_TO, + EC_WORD_ROCK, + }, + }, + { + .trainerClass = TRAINER_CLASS_COOL_TRAINER_F, + .name = _("KELLY"), + .teamFlags = 0x02, + .padding = 0, + .easyChat = { + EC_WORD_YOU, + EC_WORD_COULDN_T, + EC_WORD_BEAT, + EC_WORD_ME, + EC_WORD_EVER, + EC_WORD_KID, + }, + }, + { + .trainerClass = TRAINER_CLASS_COLLECTOR, + .name = _("VANCE"), + .teamFlags = 0x80, + .padding = 0, + .easyChat = { + EC_WORD_POKEMON, + EC_WORD_ALL, + EC_WORD_OVER, + EC_WORD_THE, + EC_WORD_PLACE, + EC_WORD_WOWEE, + }, + }, + { + .trainerClass = TRAINER_CLASS_SWIMMING_TRIATHLETE_M, + .name = _("TOBY"), + .teamFlags = 0x01, + .padding = 0, + .easyChat = { + EC_WORD_THIS, + EC_WORD_ISN_T, + EC_WORD_SPORTS, + EC_WORD_IT_S, + EC_WORD_A, + EC_WORD_BATTLE, + }, + }, + { + .trainerClass = TRAINER_CLASS_GENTLEMAN, + .name = _("NORTON"), + .teamFlags = 0x20, + .padding = 0, + .easyChat = { + EC_WORD_I, + EC_WORD_HAVE, + EC_WORD_TO, + EC_WORD_WIN, + EC_WORD_PLEASE, + EC_WORD_LOSE, + }, + }, + { + .trainerClass = TRAINER_CLASS_BATTLE_GIRL, + .name = _("ZOE"), + .teamFlags = 0x02, + .padding = 0, + .easyChat = { + EC_WORD_THIS, + EC_WORD_IS, + EC_WORD_SCARY, + EC_WORD_PLEASE, + EC_WORD_BE, + EC_WORD_NICE, + }, + }, + { + .trainerClass = TRAINER_CLASS_BEAUTY, + .name = _("EMMA"), + .teamFlags = 0x20, + .padding = 0, + .easyChat = { + EC_WORD_DON_T, + EC_WORD_YOU, + EC_MOVE(FLAIL), + EC_WORD_YOU, + EC_WORD_CAN_T, + EC_MOVE(WITHDRAW), + }, + }, + { + .trainerClass = TRAINER_CLASS_HIKER, + .name = _("VINCE"), + .teamFlags = 0x04, + .padding = 0, + .easyChat = { + EC_WORD_YAHOO, + EC_WORD_YAHOO, + EC_WORD_ARE, + EC_WORD_YOU, + EC_WORD_LISTENING, + EC_WORD_QUES, + }, + }, + { + .trainerClass = TRAINER_CLASS_EXPERT_M, + .name = _("MARV"), + .teamFlags = 0x10, + .padding = 0, + .easyChat = { + EC_WORD_LEARN, + EC_WORD_TO, + EC_WORD_BATTLE, + EC_WORD_THE, + EC_WORD_CORRECT, + EC_WORD_WAY, + }, + }, + { + .trainerClass = TRAINER_CLASS_POKEMON_BREEDER_M, + .name = _("TODD"), + .teamFlags = 0x40, + .padding = 0, + .easyChat = { + EC_WORD_THE, + EC_WORD_WAY, + EC_WORD_YOU, + EC_WORD_BATTLE, + EC_WORD_IT_S, + EC_WORD_CHILD_S_PLAY, + }, + }, + { + .trainerClass = TRAINER_CLASS_GUITARIST, + .name = _("GAVIN"), + .teamFlags = 0x01, + .padding = 0, + .easyChat = { + EC_WORD_BABY, + EC_WORD_BABY, + EC_WORD_BABY, + EC_WORD_ROCK, + EC_WORD_ME, + EC_WORD_HARD, + }, + }, + { + .trainerClass = TRAINER_CLASS_PSYCHIC_M, + .name = _("QUINN"), + .teamFlags = 0x08, + .padding = 0, + .easyChat = { + EC_WORD_I, + EC_WORD_HAVE, + EC_WORD_A, + EC_WORD_STICKY_HOLD, + EC_WORD_ON, + EC_WORD_YOU, + }, + }, + { + .trainerClass = TRAINER_CLASS_COOL_TRAINER_F, + .name = _("JENN"), + .teamFlags = 0x02, + .padding = 0, + .easyChat = { + EC_WORD_I_AM, + EC_WORD_ON, + EC_WORD_A, + EC_WORD_TOUGH, + EC_WORD_TRAINER, + EC_WORD_SEARCH, + }, + }, + { + .trainerClass = TRAINER_CLASS_EXPERT_M, + .name = _("JOEL"), + .teamFlags = 0x10, + .padding = 0, + .easyChat = { + EC_WORD_BELIEVE, + EC_WORD_IN, + EC_WORD_YOUR, + EC_WORD_POKEMON, + EC_WORD_AND, + EC_WORD_WIN, + }, + }, + { + .trainerClass = TRAINER_CLASS_DRAGON_TAMER, + .name = _("KYLE"), + .teamFlags = 0x0C, + .padding = 0, + .easyChat = { + EC_WORD_I, + EC_WORD_LIKE, + EC_WORD_A, + EC_WORD_GIRL, + EC_WORD_WITH, + EC_MOVE2(FORESIGHT), + }, + }, + { + .trainerClass = TRAINER_CLASS_COOL_TRAINER_M, + .name = _("BRET"), + .teamFlags = 0x01, + .padding = 0, + .easyChat = { + EC_WORD_TAKE, + EC_WORD_MY, + EC_WORD_OVERWHELMING, + EC_WORD_POWER, + EC_WORD_AND, + EC_WORD_DISAPPEAR, + }, + }, + { + .trainerClass = TRAINER_CLASS_EXPERT_F, + .name = _("CARRIE"), + .teamFlags = 0x10, + .padding = 0, + .easyChat = { + EC_WORD_TRAINER, + EC_WORD_I, + EC_WORD_SEE, + EC_WORD_YOU, + EC_WORD_ARE, + EC_WORD_CAPABLE, + }, + }, + { + .trainerClass = TRAINER_CLASS_LADY, + .name = _("GILLIAN"), + .teamFlags = 0x02, + .padding = 0, + .easyChat = { + EC_WORD_COME_ON, + EC_WORD_SHOW, + EC_WORD_ME, + EC_WORD_AN, + EC_WORD_EXCELLENT, + EC_WORD_TIME, + }, + }, +}; -- cgit v1.2.3 From 7b4527154ff1a28e793d9aab2b417e0a460b8187 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Sun, 22 Oct 2017 15:29:18 -0700 Subject: Move battle_tower held_items to src/ --- src/battle_tower.c | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) (limited to 'src') diff --git a/src/battle_tower.c b/src/battle_tower.c index a9d79df17..570d18720 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -3,6 +3,7 @@ #include "data2.h" #include "easy_chat.h" #include "event_data.h" +#include "items.h" #include "map_object_constants.h" #include "moves.h" #include "pokedex.h" @@ -14,6 +15,73 @@ #include "data/battle_tower/trainers.h" +const u16 gBattleTowerHeldItems[] = { + ITEM_NONE, + ITEM_KINGS_ROCK, + ITEM_SITRUS_BERRY, + ITEM_ORAN_BERRY, + ITEM_CHESTO_BERRY, + ITEM_HARD_STONE, + ITEM_FOCUS_BAND, + ITEM_PERSIM_BERRY, + ITEM_MIRACLE_SEED, + ITEM_BERRY_JUICE, + ITEM_MACHO_BRACE, + ITEM_SILVER_POWDER, + ITEM_CHERI_BERRY, + ITEM_BLACK_GLASSES, + ITEM_BLACK_BELT, + ITEM_SOUL_DEW, + ITEM_CHOICE_BAND, + ITEM_MAGNET, + ITEM_SILK_SCARF, + ITEM_WHITE_HERB, + ITEM_DEEP_SEA_SCALE, + ITEM_DEEP_SEA_TOOTH, + ITEM_MYSTIC_WATER, + ITEM_SHARP_BEAK, + ITEM_QUICK_CLAW, + ITEM_LEFTOVERS, + ITEM_RAWST_BERRY, + ITEM_LIGHT_BALL, + ITEM_POISON_BARB, + ITEM_NEVER_MELT_ICE, + ITEM_ASPEAR_BERRY, + ITEM_SPELL_TAG, + ITEM_BRIGHT_POWDER, + ITEM_LEPPA_BERRY, + ITEM_SCOPE_LENS, + ITEM_TWISTED_SPOON, + ITEM_METAL_COAT, + ITEM_MENTAL_HERB, + ITEM_CHARCOAL, + ITEM_PECHA_BERRY, + ITEM_SOFT_SAND, + ITEM_LUM_BERRY, + ITEM_DRAGON_SCALE, + ITEM_DRAGON_FANG, + ITEM_IAPAPA_BERRY, + ITEM_WIKI_BERRY, + ITEM_SEA_INCENSE, + ITEM_SHELL_BELL, + ITEM_SALAC_BERRY, + ITEM_LANSAT_BERRY, + ITEM_APICOT_BERRY, + ITEM_STARF_BERRY, + ITEM_LIECHI_BERRY, + ITEM_STICK, + ITEM_LAX_INCENSE, + ITEM_AGUAV_BERRY, + ITEM_FIGY_BERRY, + ITEM_THICK_CLUB, + ITEM_MAGO_BERRY, + ITEM_METAL_POWDER, + ITEM_PETAYA_BERRY, + ITEM_LUCKY_PUNCH, + ITEM_GANLON_BERRY, +}; + + extern u8 gUnknown_08400E23[]; extern u8 gUnknown_08400E29[]; extern u8 gUnknown_08400E2E[]; -- cgit v1.2.3 From 949a003bd1c81ae927764401a07bd83e2debb9b5 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Sun, 22 Oct 2017 15:43:32 -0700 Subject: Move battle_tower level50 mons to src/ --- src/battle_tower.c | 2 + src/data/battle_tower/level_50_mons.h | 3903 +++++++++++++++++++++++++++++++++ 2 files changed, 3905 insertions(+) create mode 100644 src/data/battle_tower/level_50_mons.h (limited to 'src') diff --git a/src/battle_tower.c b/src/battle_tower.c index 570d18720..a2715ad52 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -8,6 +8,7 @@ #include "moves.h" #include "pokedex.h" #include "rng.h" +#include "species.h" #include "string_util.h" #include "text.h" #include "trainer.h" @@ -81,6 +82,7 @@ const u16 gBattleTowerHeldItems[] = { ITEM_GANLON_BERRY, }; +#include "data/battle_tower/level_50_mons.h" extern u8 gUnknown_08400E23[]; extern u8 gUnknown_08400E29[]; diff --git a/src/data/battle_tower/level_50_mons.h b/src/data/battle_tower/level_50_mons.h new file mode 100644 index 000000000..65b66b7ef --- /dev/null +++ b/src/data/battle_tower/level_50_mons.h @@ -0,0 +1,3903 @@ +const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = +{ + { + .species = SPECIES_PIKACHU, + .item = BATTLE_TOWER_ITEM_ORAN_BERRY, + .teamFlags = 0x42, + .moves = { + MOVE_QUICK_ATTACK, + MOVE_THUNDER_WAVE, + MOVE_THUNDER_SHOCK, + MOVE_GROWL + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_BEAUTIFLY, + .item = BATTLE_TOWER_ITEM_MIRACLE_SEED, + .teamFlags = 0x41, + .moves = { + MOVE_ABSORB, + MOVE_STUN_SPORE, + MOVE_GUST, + MOVE_SAFEGUARD + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_BRAVE, + }, + { + .species = SPECIES_SWELLOW, + .item = BATTLE_TOWER_ITEM_SHARP_BEAK, + .teamFlags = 0x07, + .moves = { + MOVE_PECK, + MOVE_WING_ATTACK, + MOVE_AERIAL_ACE, + MOVE_AGILITY + }, + .evSpread = F_EV_SPREAD_ATTACK, + .nature = NATURE_GENTLE, + }, + { + .species = SPECIES_WALREIN, + .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .teamFlags = 0x0B, + .moves = { + MOVE_HAIL, + MOVE_ENCORE, + MOVE_ICE_BALL, + MOVE_TOXIC + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_ADAMANT, + }, + { + .species = SPECIES_SEAKING, + .item = BATTLE_TOWER_ITEM_MYSTIC_WATER, + .teamFlags = 0x07, + .moves = { + MOVE_PECK, + MOVE_FLAIL, + MOVE_FURY_ATTACK, + MOVE_SURF + }, + .evSpread = F_EV_SPREAD_SPEED, + .nature = NATURE_HASTY, + }, + { + .species = SPECIES_TORCHIC, + .item = BATTLE_TOWER_ITEM_KINGS_ROCK, + .teamFlags = 0x42, + .moves = { + MOVE_FIRE_SPIN, + MOVE_PROTECT, + MOVE_SAND_ATTACK, + MOVE_SLASH + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK, + .nature = NATURE_RELAXED, + }, + { + .species = SPECIES_MASQUERAIN, + .item = BATTLE_TOWER_ITEM_WHITE_HERB, + .teamFlags = 0x41, + .moves = { + MOVE_STUN_SPORE, + MOVE_WATER_SPORT, + MOVE_QUICK_ATTACK, + MOVE_GUST + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_IMPISH, + }, + { + .species = SPECIES_ILLUMISE, + .item = BATTLE_TOWER_ITEM_NONE, + .teamFlags = 0x41, + .moves = { + MOVE_FLATTER, + MOVE_COVET, + MOVE_WISH, + MOVE_FACADE + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_DELCATTY, + .item = BATTLE_TOWER_ITEM_SILK_SCARF, + .teamFlags = 0x42, + .moves = { + MOVE_ATTRACT, + MOVE_TAIL_WHIP, + MOVE_FAINT_ATTACK, + MOVE_DIG + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_LONELY, + }, + { + .species = SPECIES_KECLEON, + .item = BATTLE_TOWER_ITEM_PERSIM_BERRY, + .teamFlags = 0x0B, + .moves = { + MOVE_TAIL_WHIP, + MOVE_SLASH, + MOVE_LICK, + MOVE_SCREECH + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE, + .nature = NATURE_BRAVE, + }, + { + .species = SPECIES_MIGHTYENA, + .item = BATTLE_TOWER_ITEM_PECHA_BERRY, + .teamFlags = 0x05, + .moves = { + MOVE_BITE, + MOVE_TAKE_DOWN, + MOVE_ROAR, + MOVE_HOWL + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK, + .nature = NATURE_DOCILE, + }, + { + .species = SPECIES_SLAKING, + .item = BATTLE_TOWER_ITEM_BLACK_GLASSES, + .teamFlags = 0x05, + .moves = { + MOVE_FAINT_ATTACK, + MOVE_COUNTER, + MOVE_SCRATCH, + MOVE_TAUNT + }, + .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_LAX, + }, + { + .species = SPECIES_MACHOKE, + .item = BATTLE_TOWER_ITEM_CHESTO_BERRY, + .teamFlags = 0x05, + .moves = { + MOVE_LEER, + MOVE_DIG, + MOVE_LOW_KICK, + MOVE_FOCUS_PUNCH + }, + .evSpread = F_EV_SPREAD_SPEED, + .nature = NATURE_TIMID, + }, + { + .species = SPECIES_RHYDON, + .item = BATTLE_TOWER_ITEM_PERSIM_BERRY, + .teamFlags = 0x05, + .moves = { + MOVE_STRENGTH, + MOVE_ROCK_TOMB, + MOVE_STOMP, + MOVE_ROCK_SMASH + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, + .nature = NATURE_QUIRKY, + }, + { + .species = SPECIES_CACTURNE, + .item = BATTLE_TOWER_ITEM_POISON_BARB, + .teamFlags = 0x0B, + .moves = { + MOVE_POISON_STING, + MOVE_GROWTH, + MOVE_ABSORB, + MOVE_SOLAR_BEAM + }, + .evSpread = F_EV_SPREAD_SP_ATTACK, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_ZIGZAGOON, + .item = BATTLE_TOWER_ITEM_KINGS_ROCK, + .teamFlags = 0x0A, + .moves = { + MOVE_FLAIL, + MOVE_SAND_ATTACK, + MOVE_REST, + MOVE_SURF + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_SASSY, + }, + { + .species = SPECIES_DODRIO, + .item = BATTLE_TOWER_ITEM_SHARP_BEAK, + .teamFlags = 0x03, + .moves = { + MOVE_PURSUIT, + MOVE_TRI_ATTACK, + MOVE_GROWL, + MOVE_AGILITY + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_SERIOUS, + }, + { + .species = SPECIES_WHISCASH, + .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .teamFlags = 0x0B, + .moves = { + MOVE_WATER_GUN, + MOVE_AMNESIA, + MOVE_MAGNITUDE, + MOVE_MUD_SLAP + }, + .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK, + .nature = NATURE_LAX, + }, + { + .species = SPECIES_NINJASK, + .item = BATTLE_TOWER_ITEM_SILVER_POWDER, + .teamFlags = 0x41, + .moves = { + MOVE_SAND_ATTACK, + MOVE_FURY_CUTTER, + MOVE_AGILITY, + MOVE_HARDEN + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_DUSCLOPS, + .item = BATTLE_TOWER_ITEM_PECHA_BERRY, + .teamFlags = 0x01, + .moves = { + MOVE_PROTECT, + MOVE_NIGHT_SHADE, + MOVE_ASTONISH, + MOVE_WILL_O_WISP + }, + .evSpread = F_EV_SPREAD_HP, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_CAMERUPT, + .item = BATTLE_TOWER_ITEM_CHARCOAL, + .teamFlags = 0x07, + .moves = { + MOVE_DIG, + MOVE_EMBER, + MOVE_GROWL, + MOVE_ROCK_SMASH + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK, + .nature = NATURE_BOLD, + }, + { + .species = SPECIES_SPINDA, + .item = BATTLE_TOWER_ITEM_CHERI_BERRY, + .teamFlags = 0x4A, + .moves = { + MOVE_TEETER_DANCE, + MOVE_FLAIL, + MOVE_PSYCH_UP, + MOVE_DOUBLE_EDGE + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, + .nature = NATURE_CALM, + }, + { + .species = SPECIES_SEVIPER, + .item = BATTLE_TOWER_ITEM_POISON_BARB, + .teamFlags = 0x09, + .moves = { + MOVE_SCREECH, + MOVE_GLARE, + MOVE_DIG, + MOVE_POISON_FANG + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_FLYGON, + .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .teamFlags = 0x49, + .moves = { + MOVE_SAND_ATTACK, + MOVE_SAND_TOMB, + MOVE_FACADE, + MOVE_TOXIC + }, + .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_AZUMARILL, + .item = BATTLE_TOWER_ITEM_WHITE_HERB, + .teamFlags = 0x42, + .moves = { + MOVE_BUBBLE_BEAM, + MOVE_TAIL_WHIP, + MOVE_RAIN_DANCE, + MOVE_ROLLOUT + }, + .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_ZANGOOSE, + .item = BATTLE_TOWER_ITEM_MENTAL_HERB, + .teamFlags = 0x07, + .moves = { + MOVE_STRENGTH, + MOVE_TAUNT, + MOVE_CRUSH_CLAW, + MOVE_DETECT + }, + .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_MEDICHAM, + .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .teamFlags = 0x07, + .moves = { + MOVE_REVERSAL, + MOVE_MEDITATE, + MOVE_CONFUSION, + MOVE_FACADE + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE, + .nature = NATURE_HASTY, + }, + { + .species = SPECIES_ROSELIA, + .item = BATTLE_TOWER_ITEM_MIRACLE_SEED, + .teamFlags = 0x0A, + .moves = { + MOVE_GROWTH, + MOVE_MEGA_DRAIN, + MOVE_TOXIC, + MOVE_CUT + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK, + .nature = NATURE_NAUGHTY, + }, + { + .species = SPECIES_SWALOT, + .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .teamFlags = 0x0B, + .moves = { + MOVE_STOCKPILE, + MOVE_SPIT_UP, + MOVE_SLUDGE, + MOVE_POISON_GAS + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_MAGNETON, + .item = BATTLE_TOWER_ITEM_MAGNET, + .teamFlags = 0x0B, + .moves = { + MOVE_SUPERSONIC, + MOVE_THUNDER_WAVE, + MOVE_SCREECH, + MOVE_TRI_ATTACK + }, + .evSpread = F_EV_SPREAD_SPEED, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_GARDEVOIR, + .item = BATTLE_TOWER_ITEM_TWISTED_SPOON, + .teamFlags = 0x09, + .moves = { + MOVE_CONFUSION, + MOVE_TOXIC, + MOVE_TORMENT, + MOVE_PROTECT + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, + .nature = NATURE_BOLD, + }, + { + .species = SPECIES_RELICANTH, + .item = BATTLE_TOWER_ITEM_MYSTIC_WATER, + .teamFlags = 0x01, + .moves = { + MOVE_SURF, + MOVE_ANCIENT_POWER, + MOVE_ROCK_TOMB, + MOVE_HARDEN + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE, + .nature = NATURE_TIMID, + }, + { + .species = SPECIES_NINETALES, + .item = BATTLE_TOWER_ITEM_RAWST_BERRY, + .teamFlags = 0x03, + .moves = { + MOVE_CONFUSE_RAY, + MOVE_FIRE_SPIN, + MOVE_QUICK_ATTACK, + MOVE_FLAMETHROWER + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK, + .nature = NATURE_HASTY, + }, + { + .species = SPECIES_SHARPEDO, + .item = BATTLE_TOWER_ITEM_BLACK_GLASSES, + .teamFlags = 0x05, + .moves = { + MOVE_BITE, + MOVE_SKULL_BASH, + MOVE_RAIN_DANCE, + MOVE_SURF + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_RELAXED, + }, + { + .species = SPECIES_GIRAFARIG, + .item = BATTLE_TOWER_ITEM_KINGS_ROCK, + .teamFlags = 0x03, + .moves = { + MOVE_STRENGTH, + MOVE_PSYBEAM, + MOVE_AGILITY, + MOVE_EARTHQUAKE + }, + .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_IMPISH, + }, + { + .species = SPECIES_PELIPPER, + .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .teamFlags = 0x0B, + .moves = { + MOVE_MIST, + MOVE_STOCKPILE, + MOVE_SWALLOW, + MOVE_SPIT_UP + }, + .evSpread = F_EV_SPREAD_DEFENSE, + .nature = NATURE_QUIRKY, + }, + { + .species = SPECIES_SABLEYE, + .item = BATTLE_TOWER_ITEM_CHERI_BERRY, + .teamFlags = 0x09, + .moves = { + MOVE_SHADOW_BALL, + MOVE_NIGHT_SHADE, + MOVE_SNATCH, + MOVE_FAKE_OUT + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_LUNATONE, + .item = BATTLE_TOWER_ITEM_HARD_STONE, + .teamFlags = 0x0B, + .moves = { + MOVE_COSMIC_POWER, + MOVE_SANDSTORM, + MOVE_PSYCHIC, + MOVE_ROCK_THROW + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE, + .nature = NATURE_GENTLE, + }, + { + .species = SPECIES_LUDICOLO, + .item = BATTLE_TOWER_ITEM_NONE, + .teamFlags = 0x0B, + .moves = { + MOVE_THIEF, + MOVE_FAKE_OUT, + MOVE_SURF, + MOVE_RAIN_DANCE + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_GRUMPIG, + .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .teamFlags = 0x0B, + .moves = { + MOVE_ODOR_SLEUTH, + MOVE_CONFUSE_RAY, + MOVE_MAGIC_COAT, + MOVE_PSYCHIC + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_BRELOOM, + .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .teamFlags = 0x0B, + .moves = { + MOVE_CUT, + MOVE_LEECH_SEED, + MOVE_MEGA_DRAIN, + MOVE_STUN_SPORE + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE, + .nature = NATURE_SASSY, + }, + { + .species = SPECIES_WAILORD, + .item = BATTLE_TOWER_ITEM_MYSTIC_WATER, + .teamFlags = 0x03, + .moves = { + MOVE_WATER_SPOUT, + MOVE_ROLLOUT, + MOVE_MIST, + MOVE_RAIN_DANCE + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE, + .nature = NATURE_GENTLE, + }, + { + .species = SPECIES_WEEZING, + .item = BATTLE_TOWER_ITEM_POISON_BARB, + .teamFlags = 0x05, + .moves = { + MOVE_SMOG, + MOVE_SELF_DESTRUCT, + MOVE_TOXIC, + MOVE_SLUDGE_BOMB + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE, + .nature = NATURE_BASHFUL, + }, + { + .species = SPECIES_KADABRA, + .item = BATTLE_TOWER_ITEM_LEPPA_BERRY, + .teamFlags = 0x0B, + .moves = { + MOVE_FUTURE_SIGHT, + MOVE_FOCUS_PUNCH, + MOVE_SKILL_SWAP, + MOVE_SNATCH + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE, + .nature = NATURE_CAREFUL, + }, + { + .species = SPECIES_MANECTRIC, + .item = BATTLE_TOWER_ITEM_MAGNET, + .teamFlags = 0x07, + .moves = { + MOVE_THUNDER_WAVE, + MOVE_BITE, + MOVE_SPARK, + MOVE_QUICK_ATTACK + }, + .evSpread = F_EV_SPREAD_SP_ATTACK, + .nature = NATURE_RASH, + }, + { + .species = SPECIES_RAICHU, + .item = BATTLE_TOWER_ITEM_ASPEAR_BERRY, + .teamFlags = 0x03, + .moves = { + MOVE_QUICK_ATTACK, + MOVE_AGILITY, + MOVE_LIGHT_SCREEN, + MOVE_THUNDERBOLT + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_XATU, + .item = BATTLE_TOWER_ITEM_TWISTED_SPOON, + .teamFlags = 0x03, + .moves = { + MOVE_NIGHT_SHADE, + MOVE_PECK, + MOVE_CONFUSE_RAY, + MOVE_FUTURE_SIGHT + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_LOUDRED, + .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .teamFlags = 0x05, + .moves = { + MOVE_UPROAR, + MOVE_STOMP, + MOVE_SCREECH, + MOVE_EARTHQUAKE + }, + .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_MODEST, + }, + { + .species = SPECIES_SOLROCK, + .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .teamFlags = 0x03, + .moves = { + MOVE_ROCK_THROW, + MOVE_SUNNY_DAY, + MOVE_SOLAR_BEAM, + MOVE_SANDSTORM + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE, + .nature = NATURE_MILD, + }, + { + .species = SPECIES_CLAYDOL, + .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .teamFlags = 0x03, + .moves = { + MOVE_SANDSTORM, + MOVE_REFLECT, + MOVE_ROCK_TOMB, + MOVE_STRENGTH + }, + .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_SERIOUS, + }, + { + .species = SPECIES_CRAWDAUNT, + .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .teamFlags = 0x03, + .moves = { + MOVE_WATER_PULSE, + MOVE_KNOCK_OFF, + MOVE_HARDEN, + MOVE_CUT + }, + .evSpread = F_EV_SPREAD_HP, + .nature = NATURE_JOLLY, + }, + { + .species = SPECIES_GOLBAT, + .item = BATTLE_TOWER_ITEM_WHITE_HERB, + .teamFlags = 0x09, + .moves = { + MOVE_CONFUSE_RAY, + MOVE_WING_ATTACK, + MOVE_MEAN_LOOK, + MOVE_BITE + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED, + .nature = NATURE_BRAVE, + }, + { + .species = SPECIES_BELLOSSOM, + .item = BATTLE_TOWER_ITEM_MIRACLE_SEED, + .teamFlags = 0x0A, + .moves = { + MOVE_SOLAR_BEAM, + MOVE_PETAL_DANCE, + MOVE_SWEET_SCENT, + MOVE_BULLET_SEED + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_NAIVE, + }, + { + .species = SPECIES_DONPHAN, + .item = BATTLE_TOWER_ITEM_KINGS_ROCK, + .teamFlags = 0x05, + .moves = { + MOVE_ROCK_SMASH, + MOVE_RAPID_SPIN, + MOVE_FLAIL, + MOVE_HORN_ATTACK + }, + .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_IMPISH, + }, + { + .species = SPECIES_NOSEPASS, + .item = BATTLE_TOWER_ITEM_PERSIM_BERRY, + .teamFlags = 0x0B, + .moves = { + MOVE_SANDSTORM, + MOVE_ROCK_SLIDE, + MOVE_BLOCK, + MOVE_THUNDER_WAVE + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE, + .nature = NATURE_JOLLY, + }, + { + .species = SPECIES_PINSIR, + .item = BATTLE_TOWER_ITEM_CHESTO_BERRY, + .teamFlags = 0x05, + .moves = { + MOVE_SWORDS_DANCE, + MOVE_HARDEN, + MOVE_CUT, + MOVE_SEISMIC_TOSS + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE, + .nature = NATURE_DOCILE, + }, + { + .species = SPECIES_GOLDUCK, + .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .teamFlags = 0x0B, + .moves = { + MOVE_DISABLE, + MOVE_PSYCH_UP, + MOVE_WATER_PULSE, + MOVE_BRICK_BREAK + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_SHIFTRY, + .item = BATTLE_TOWER_ITEM_MENTAL_HERB, + .teamFlags = 0x07, + .moves = { + MOVE_TORMENT, + MOVE_EXTRASENSORY, + MOVE_SOLAR_BEAM, + MOVE_AERIAL_ACE + }, + .evSpread = F_EV_SPREAD_DEFENSE, + .nature = NATURE_NAIVE, + }, + { + .species = SPECIES_DUSTOX, + .item = BATTLE_TOWER_ITEM_SILVER_POWDER, + .teamFlags = 0x01, + .moves = { + MOVE_CONFUSION, + MOVE_SILVER_WIND, + MOVE_PSYBEAM, + MOVE_WHIRLWIND + }, + .evSpread = F_EV_SPREAD_SPEED, + .nature = NATURE_SERIOUS, + }, + { + .species = SPECIES_SHUPPET, + .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .teamFlags = 0x03, + .moves = { + MOVE_WILL_O_WISP, + MOVE_NIGHT_SHADE, + MOVE_FAINT_ATTACK, + MOVE_CURSE + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_SEAKING, + .item = BATTLE_TOWER_ITEM_MYSTIC_WATER, + .teamFlags = 0x07, + .moves = { + MOVE_RAIN_DANCE, + MOVE_SURF, + MOVE_HORN_ATTACK, + MOVE_HORN_DRILL + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE, + .nature = NATURE_LONELY, + }, + { + .species = SPECIES_SKARMORY, + .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .teamFlags = 0x07, + .moves = { + MOVE_STEEL_WING, + MOVE_SAND_ATTACK, + MOVE_SWIFT, + MOVE_AGILITY + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE, + .nature = NATURE_RELAXED, + }, + { + .species = SPECIES_TORKOAL, + .item = BATTLE_TOWER_ITEM_FOCUS_BAND, + .teamFlags = 0x43, + .moves = { + MOVE_FLAMETHROWER, + MOVE_IRON_DEFENSE, + MOVE_BODY_SLAM, + MOVE_PROTECT + }, + .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK, + .nature = NATURE_NAUGHTY, + }, + { + .species = SPECIES_GOLEM, + .item = BATTLE_TOWER_ITEM_SOFT_SAND, + .teamFlags = 0x05, + .moves = { + MOVE_MAGNITUDE, + MOVE_EXPLOSION, + MOVE_STRENGTH, + MOVE_SANDSTORM + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK, + .nature = NATURE_DOCILE, + }, + { + .species = SPECIES_GARDEVOIR, + .item = BATTLE_TOWER_ITEM_TWISTED_SPOON, + .teamFlags = 0x41, + .moves = { + MOVE_REFLECT, + MOVE_PSYCHIC, + MOVE_IMPRISON, + MOVE_TOXIC + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE, + .nature = NATURE_HASTY, + }, + { + .species = SPECIES_SANDSLASH, + .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .teamFlags = 0x07, + .moves = { + MOVE_SANDSTORM, + MOVE_SLASH, + MOVE_EARTHQUAKE, + MOVE_SWIFT + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE, + .nature = NATURE_ADAMANT, + }, + { + .species = SPECIES_WOBBUFFET, + .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .teamFlags = 0x0B, + .moves = { + MOVE_COUNTER, + MOVE_MIRROR_COAT, + MOVE_SAFEGUARD, + MOVE_DESTINY_BOND + }, + .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_CALM, + }, + { + .species = SPECIES_TENTACRUEL, + .item = BATTLE_TOWER_ITEM_CHERI_BERRY, + .teamFlags = 0x05, + .moves = { + MOVE_CONSTRICT, + MOVE_SURF, + MOVE_HYPER_BEAM, + MOVE_SCREECH + }, + .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_IMPISH, + }, + { + .species = SPECIES_TROPIUS, + .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .teamFlags = 0x05, + .moves = { + MOVE_SUNNY_DAY, + MOVE_SOLAR_BEAM, + MOVE_SYNTHESIS, + MOVE_RAZOR_LEAF + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE, + .nature = NATURE_DOCILE, + }, + { + .species = SPECIES_MAWILE, + .item = BATTLE_TOWER_ITEM_METAL_COAT, + .teamFlags = 0x43, + .moves = { + MOVE_IRON_DEFENSE, + MOVE_SLUDGE_BOMB, + MOVE_CRUNCH, + MOVE_STRENGTH + }, + .evSpread = F_EV_SPREAD_ATTACK, + .nature = NATURE_CALM, + }, + { + .species = SPECIES_MUK, + .item = BATTLE_TOWER_ITEM_RAWST_BERRY, + .teamFlags = 0x09, + .moves = { + MOVE_SLUDGE, + MOVE_ACID_ARMOR, + MOVE_GIGA_DRAIN, + MOVE_DISABLE + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_MAGCARGO, + .item = BATTLE_TOWER_ITEM_CHARCOAL, + .teamFlags = 0x0D, + .moves = { + MOVE_FLAMETHROWER, + MOVE_ROCK_THROW, + MOVE_HARDEN, + MOVE_AMNESIA + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK, + .nature = NATURE_NAUGHTY, + }, + { + .species = SPECIES_LINOONE, + .item = BATTLE_TOWER_ITEM_PECHA_BERRY, + .teamFlags = 0x07, + .moves = { + MOVE_HEADBUTT, + MOVE_TAIL_WHIP, + MOVE_SURF, + MOVE_DIG + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK, + .nature = NATURE_QUIRKY, + }, + { + .species = SPECIES_ELECTRODE, + .item = BATTLE_TOWER_ITEM_ASPEAR_BERRY, + .teamFlags = 0x05, + .moves = { + MOVE_LIGHT_SCREEN, + MOVE_THUNDERBOLT, + MOVE_SWIFT, + MOVE_ROLLOUT + }, + .evSpread = F_EV_SPREAD_SPEED, + .nature = NATURE_SERIOUS, + }, + { + .species = SPECIES_DUSCLOPS, + .item = BATTLE_TOWER_ITEM_SPELL_TAG, + .teamFlags = 0x09, + .moves = { + MOVE_MEAN_LOOK, + MOVE_NIGHT_SHADE, + MOVE_SKILL_SWAP, + MOVE_SHADOW_BALL + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, + .nature = NATURE_NAIVE, + }, + { + .species = SPECIES_VILEPLUME, + .item = BATTLE_TOWER_ITEM_MIRACLE_SEED, + .teamFlags = 0x0A, + .moves = { + MOVE_TOXIC, + MOVE_MOONLIGHT, + MOVE_GIGA_DRAIN, + MOVE_STUN_SPORE + }, + .evSpread = F_EV_SPREAD_HP, + .nature = NATURE_DOCILE, + }, + { + .species = SPECIES_CROBAT, + .item = BATTLE_TOWER_ITEM_LEPPA_BERRY, + .teamFlags = 0x05, + .moves = { + MOVE_BITE, + MOVE_HAZE, + MOVE_WING_ATTACK, + MOVE_STEEL_WING + }, + .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_TIMID, + }, + { + .species = SPECIES_CORSOLA, + .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .teamFlags = 0x0A, + .moves = { + MOVE_RECOVER, + MOVE_MIRROR_COAT, + MOVE_HAIL, + MOVE_SURF + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_STARMIE, + .item = BATTLE_TOWER_ITEM_MYSTIC_WATER, + .teamFlags = 0x0B, + .moves = { + MOVE_RAPID_SPIN, + MOVE_WATER_PULSE, + MOVE_REFLECT, + MOVE_SKILL_SWAP + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_EXPLOUD, + .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .teamFlags = 0x41, + .moves = { + MOVE_HYPER_BEAM, + MOVE_HOWL, + MOVE_UPROAR, + MOVE_EARTHQUAKE + }, + .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_ALAKAZAM, + .item = BATTLE_TOWER_ITEM_TWISTED_SPOON, + .teamFlags = 0x0B, + .moves = { + MOVE_PSYBEAM, + MOVE_SNATCH, + MOVE_REFLECT, + MOVE_HYPER_BEAM + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_RELAXED, + }, + { + .species = SPECIES_HERACROSS, + .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .teamFlags = 0x05, + .moves = { + MOVE_HORN_ATTACK, + MOVE_COUNTER, + MOVE_REVERSAL, + MOVE_LEER + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_BOLD, + }, + { + .species = SPECIES_CASTFORM, + .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .teamFlags = 0x0B, + .moves = { + MOVE_WEATHER_BALL, + MOVE_SUNNY_DAY, + MOVE_RAIN_DANCE, + MOVE_HAIL + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_LAX, + }, + { + .species = SPECIES_VIGOROTH, + .item = BATTLE_TOWER_ITEM_FOCUS_BAND, + .teamFlags = 0x05, + .moves = { + MOVE_FOCUS_PUNCH, + MOVE_REVERSAL, + MOVE_COUNTER, + MOVE_TAUNT + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_DUSKULL, + .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .teamFlags = 0x09, + .moves = { + MOVE_TOXIC, + MOVE_CONFUSE_RAY, + MOVE_SHADOW_BALL, + MOVE_WILL_O_WISP + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_LANTURN, + .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .teamFlags = 0x07, + .moves = { + MOVE_FLAIL, + MOVE_SURF, + MOVE_SPARK, + MOVE_TAKE_DOWN + }, + .evSpread = F_EV_SPREAD_SPEED, + .nature = NATURE_SASSY, + }, + { + .species = SPECIES_HARIYAMA, + .item = BATTLE_TOWER_ITEM_KINGS_ROCK, + .teamFlags = 0x05, + .moves = { + MOVE_STRENGTH, + MOVE_FAKE_OUT, + MOVE_FACADE, + MOVE_SAND_ATTACK + }, + .evSpread = F_EV_SPREAD_SPEED, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_KINGDRA, + .item = BATTLE_TOWER_ITEM_MYSTIC_WATER, + .teamFlags = 0x43, + .moves = { + MOVE_AGILITY, + MOVE_DIVE, + MOVE_ICE_BEAM, + MOVE_PROTECT + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_GYARADOS, + .item = BATTLE_TOWER_ITEM_DRAGON_FANG, + .teamFlags = 0x41, + .moves = { + MOVE_RAIN_DANCE, + MOVE_SURF, + MOVE_WATER_PULSE, + MOVE_HYPER_BEAM + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_IMPISH, + }, + { + .species = SPECIES_AGGRON, + .item = BATTLE_TOWER_ITEM_METAL_COAT, + .teamFlags = 0x45, + .moves = { + MOVE_EARTHQUAKE, + MOVE_BRICK_BREAK, + MOVE_METAL_CLAW, + MOVE_ROAR + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE, + .nature = NATURE_RELAXED, + }, + { + .species = SPECIES_ABSOL, + .item = BATTLE_TOWER_ITEM_KINGS_ROCK, + .teamFlags = 0xC7, + .moves = { + MOVE_SWORDS_DANCE, + MOVE_IRON_TAIL, + MOVE_SLASH, + MOVE_FACADE + }, + .evSpread = F_EV_SPREAD_ATTACK, + .nature = NATURE_LAX, + }, + { + .species = SPECIES_SWELLOW, + .item = BATTLE_TOWER_ITEM_SHARP_BEAK, + .teamFlags = 0x0F, + .moves = { + MOVE_DOUBLE_TEAM, + MOVE_FLY, + MOVE_TOXIC, + MOVE_STEEL_WING + }, + .evSpread = 0, + .nature = NATURE_HASTY, + }, + { + .species = SPECIES_MACHAMP, + .item = BATTLE_TOWER_ITEM_BLACK_BELT, + .teamFlags = 0x05, + .moves = { + MOVE_STRENGTH, + MOVE_CROSS_CHOP, + MOVE_EARTHQUAKE, + MOVE_FLAMETHROWER + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE, + .nature = NATURE_HASTY, + }, + { + .species = SPECIES_SWAMPERT, + .item = BATTLE_TOWER_ITEM_NEVER_MELT_ICE, + .teamFlags = 0x41, + .moves = { + MOVE_PROTECT, + MOVE_ICE_BEAM, + MOVE_HYPER_BEAM, + MOVE_SURF + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_DOCILE, + }, + { + .species = SPECIES_SCEPTILE, + .item = BATTLE_TOWER_ITEM_MIRACLE_SEED, + .teamFlags = 0x41, + .moves = { + MOVE_LEAF_BLADE, + MOVE_DRAGON_CLAW, + MOVE_AGILITY, + MOVE_PROTECT + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_DOCILE, + }, + { + .species = SPECIES_BLAZIKEN, + .item = BATTLE_TOWER_ITEM_CHARCOAL, + .teamFlags = 0x41, + .moves = { + MOVE_BLAZE_KICK, + MOVE_MIRROR_MOVE, + MOVE_EARTHQUAKE, + MOVE_PROTECT + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_DOCILE, + }, + { + .species = SPECIES_ALTARIA, + .item = BATTLE_TOWER_ITEM_DRAGON_FANG, + .teamFlags = 0x43, + .moves = { + MOVE_DRAGON_CLAW, + MOVE_DRAGON_DANCE, + MOVE_TOXIC, + MOVE_DOUBLE_TEAM + }, + .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_DOCILE, + }, + { + .species = SPECIES_LUDICOLO, + .item = BATTLE_TOWER_ITEM_BLACK_BELT, + .teamFlags = 0x43, + .moves = { + MOVE_BRICK_BREAK, + MOVE_WATER_PULSE, + MOVE_RAIN_DANCE, + MOVE_FOCUS_PUNCH + }, + .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_HASTY, + }, + { + .species = SPECIES_SABLEYE, + .item = BATTLE_TOWER_ITEM_SPELL_TAG, + .teamFlags = 0x49, + .moves = { + MOVE_SHADOW_BALL, + MOVE_SNATCH, + MOVE_DIG, + MOVE_CONFUSE_RAY + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_ZANGOOSE, + .item = BATTLE_TOWER_ITEM_BLACK_GLASSES, + .teamFlags = 0x0F, + .moves = { + MOVE_FACADE, + MOVE_THUNDERBOLT, + MOVE_CRUSH_CLAW, + MOVE_DETECT + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, + .nature = NATURE_CALM, + }, + { + .species = SPECIES_LINOONE, + .item = BATTLE_TOWER_ITEM_CHESTO_BERRY, + .teamFlags = 0x0F, + .moves = { + MOVE_IRON_TAIL, + MOVE_HEADBUTT, + MOVE_ATTRACT, + MOVE_ICE_BEAM + }, + .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_WHISCASH, + .item = BATTLE_TOWER_ITEM_SOFT_SAND, + .teamFlags = 0x07, + .moves = { + MOVE_MUD_SLAP, + MOVE_EARTHQUAKE, + MOVE_SURF, + MOVE_AMNESIA + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, + .nature = NATURE_BOLD, + }, + { + .species = SPECIES_SOLROCK, + .item = BATTLE_TOWER_ITEM_HARD_STONE, + .teamFlags = 0x43, + .moves = { + MOVE_EARTHQUAKE, + MOVE_LIGHT_SCREEN, + MOVE_ROCK_SLIDE, + MOVE_CONFUSION + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_BASHFUL, + }, + { + .species = SPECIES_STARMIE, + .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .teamFlags = 0x03, + .moves = { + MOVE_RECOVER, + MOVE_RAIN_DANCE, + MOVE_SURF, + MOVE_CONFUSE_RAY + }, + .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_NAIVE, + }, + { + .species = SPECIES_CACTURNE, + .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .teamFlags = 0x0F, + .moves = { + MOVE_INGRAIN, + MOVE_LEECH_SEED, + MOVE_PROTECT, + MOVE_FRUSTRATION + }, + .evSpread = 0, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_SHIFTRY, + .item = BATTLE_TOWER_ITEM_FOCUS_BAND, + .teamFlags = 0x05, + .moves = { + MOVE_FRUSTRATION, + MOVE_HYPER_BEAM, + MOVE_GIGA_DRAIN, + MOVE_TORMENT + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE, + .nature = NATURE_ADAMANT, + }, + { + .species = SPECIES_MANECTRIC, + .item = BATTLE_TOWER_ITEM_MAGNET, + .teamFlags = 0x0F, + .moves = { + MOVE_THUNDER, + MOVE_THUNDER_WAVE, + MOVE_IRON_TAIL, + MOVE_ROAR + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_ADAMANT, + }, + { + .species = SPECIES_KECLEON, + .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .teamFlags = 0xC3, + .moves = { + MOVE_THUNDERBOLT, + MOVE_FOCUS_PUNCH, + MOVE_IRON_TAIL, + MOVE_FLAMETHROWER + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_PINSIR, + .item = BATTLE_TOWER_ITEM_SOFT_SAND, + .teamFlags = 0x8D, + .moves = { + MOVE_GUILLOTINE, + MOVE_SUBMISSION, + MOVE_EARTHQUAKE, + MOVE_ROCK_TOMB + }, + .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_METANG, + .item = BATTLE_TOWER_ITEM_METAL_COAT, + .teamFlags = 0x05, + .moves = { + MOVE_EARTHQUAKE, + MOVE_SHADOW_BALL, + MOVE_PSYCHIC, + MOVE_METEOR_MASH + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK, + .nature = NATURE_IMPISH, + }, + { + .species = SPECIES_CLAYDOL, + .item = BATTLE_TOWER_ITEM_PECHA_BERRY, + .teamFlags = 0x43, + .moves = { + MOVE_EARTHQUAKE, + MOVE_SELF_DESTRUCT, + MOVE_SANDSTORM, + MOVE_PROTECT + }, + .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_LAX, + }, + { + .species = SPECIES_MASQUERAIN, + .item = BATTLE_TOWER_ITEM_PERSIM_BERRY, + .teamFlags = 0x0A, + .moves = { + MOVE_TOXIC, + MOVE_SILVER_WIND, + MOVE_ATTRACT, + MOVE_ICE_BEAM + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_RELICANTH, + .item = BATTLE_TOWER_ITEM_LIECHI_BERRY, + .teamFlags = 0xC5, + .moves = { + MOVE_ROCK_TOMB, + MOVE_DOUBLE_EDGE, + MOVE_SURF, + MOVE_EARTHQUAKE + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_WALREIN, + .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .teamFlags = 0x0D, + .moves = { + MOVE_SURF, + MOVE_ENCORE, + MOVE_BLIZZARD, + MOVE_HYPER_BEAM + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_WAILORD, + .item = BATTLE_TOWER_ITEM_APICOT_BERRY, + .teamFlags = 0x0B, + .moves = { + MOVE_WATER_SPOUT, + MOVE_REST, + MOVE_AMNESIA, + MOVE_HAIL + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE, + .nature = NATURE_HASTY, + }, + { + .species = SPECIES_GIRAFARIG, + .item = BATTLE_TOWER_ITEM_GANLON_BERRY, + .teamFlags = 0x4F, + .moves = { + MOVE_DOUBLE_TEAM, + MOVE_CRUNCH, + MOVE_PSYCHIC, + MOVE_EARTHQUAKE + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_MEDICHAM, + .item = BATTLE_TOWER_ITEM_APICOT_BERRY, + .teamFlags = 0x4B, + .moves = { + MOVE_CALM_MIND, + MOVE_REVERSAL, + MOVE_ROCK_TOMB, + MOVE_PSYCHIC + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_RELAXED, + }, + { + .species = SPECIES_TROPIUS, + .item = BATTLE_TOWER_ITEM_MENTAL_HERB, + .teamFlags = 0xC7, + .moves = { + MOVE_EARTHQUAKE, + MOVE_SYNTHESIS, + MOVE_RAZOR_LEAF, + MOVE_HYPER_BEAM + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_BOLD, + }, + { + .species = SPECIES_NINJASK, + .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .teamFlags = 0x05, + .moves = { + MOVE_DOUBLE_TEAM, + MOVE_SLASH, + MOVE_SWORDS_DANCE, + MOVE_LEECH_LIFE + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_LAX, + }, + { + .species = SPECIES_CAMERUPT, + .item = BATTLE_TOWER_ITEM_CHARCOAL, + .teamFlags = 0x0D, + .moves = { + MOVE_EARTHQUAKE, + MOVE_OVERHEAT, + MOVE_SUNNY_DAY, + MOVE_ROCK_SLIDE + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_CAREFUL, + }, + { + .species = SPECIES_SHARPEDO, + .item = BATTLE_TOWER_ITEM_KINGS_ROCK, + .teamFlags = 0x05, + .moves = { + MOVE_CRUNCH, + MOVE_SURF, + MOVE_EARTHQUAKE, + MOVE_PROTECT + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_WIGGLYTUFF, + .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .teamFlags = 0x0E, + .moves = { + MOVE_PROTECT, + MOVE_TOXIC, + MOVE_DOUBLE_TEAM, + MOVE_DIG + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE, + .nature = NATURE_LAX, + }, + { + .species = SPECIES_SEVIPER, + .item = BATTLE_TOWER_ITEM_POISON_BARB, + .teamFlags = 0x05, + .moves = { + MOVE_SLUDGE_BOMB, + MOVE_HAZE, + MOVE_CRUNCH, + MOVE_FLAMETHROWER + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK, + .nature = NATURE_NAIVE, + }, + { + .species = SPECIES_CRADILY, + .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .teamFlags = 0xC1, + .moves = { + MOVE_ROCK_TOMB, + MOVE_CONFUSE_RAY, + MOVE_INGRAIN, + MOVE_EARTHQUAKE + }, + .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_ARMALDO, + .item = BATTLE_TOWER_ITEM_RAWST_BERRY, + .teamFlags = 0xC1, + .moves = { + MOVE_EARTHQUAKE, + MOVE_SANDSTORM, + MOVE_PROTECT, + MOVE_SLASH + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_MAGNETON, + .item = BATTLE_TOWER_ITEM_PERSIM_BERRY, + .teamFlags = 0x0D, + .moves = { + MOVE_ZAP_CANNON, + MOVE_SUPERSONIC, + MOVE_TOXIC, + MOVE_PROTECT + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED, + .nature = NATURE_ADAMANT, + }, + { + .species = SPECIES_LANTURN, + .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .teamFlags = 0x06, + .moves = { + MOVE_THUNDER, + MOVE_SURF, + MOVE_ICE_BEAM, + MOVE_RAIN_DANCE + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE, + .nature = NATURE_ADAMANT, + }, + { + .species = SPECIES_SWALOT, + .item = BATTLE_TOWER_ITEM_CHERI_BERRY, + .teamFlags = 0x8B, + .moves = { + MOVE_SLUDGE_BOMB, + MOVE_SNATCH, + MOVE_ENCORE, + MOVE_BODY_SLAM + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_SKARMORY, + .item = BATTLE_TOWER_ITEM_METAL_COAT, + .teamFlags = 0x81, + .moves = { + MOVE_STEEL_WING, + MOVE_AGILITY, + MOVE_TORMENT, + MOVE_FACADE + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_LAX, + }, + { + .species = SPECIES_DONPHAN, + .item = BATTLE_TOWER_ITEM_WHITE_HERB, + .teamFlags = 0x0D, + .moves = { + MOVE_EARTHQUAKE, + MOVE_FLAIL, + MOVE_ROAR, + MOVE_IRON_TAIL + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_HERACROSS, + .item = BATTLE_TOWER_ITEM_FOCUS_BAND, + .teamFlags = 0x41, + .moves = { + MOVE_FACADE, + MOVE_REVERSAL, + MOVE_MEGAHORN, + MOVE_EARTHQUAKE + }, + .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_BANETTE, + .item = BATTLE_TOWER_ITEM_PETAYA_BERRY, + .teamFlags = 0x83, + .moves = { + MOVE_SHADOW_BALL, + MOVE_HYPER_BEAM, + MOVE_THUNDERBOLT, + MOVE_SKILL_SWAP + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE, + .nature = NATURE_CAREFUL, + }, + { + .species = SPECIES_SANDSLASH, + .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .teamFlags = 0x0F, + .moves = { + MOVE_SANDSTORM, + MOVE_TOXIC, + MOVE_SLASH, + MOVE_EARTHQUAKE + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_LAX, + }, + { + .species = SPECIES_CRAWDAUNT, + .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .teamFlags = 0x05, + .moves = { + MOVE_GUILLOTINE, + MOVE_CRABHAMMER, + MOVE_BLIZZARD, + MOVE_SLUDGE_BOMB + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_DOCILE, + }, + { + .species = SPECIES_GRUMPIG, + .item = BATTLE_TOWER_ITEM_TWISTED_SPOON, + .teamFlags = 0x8B, + .moves = { + MOVE_MAGIC_COAT, + MOVE_PSYCHIC, + MOVE_REFLECT, + MOVE_CONFUSE_RAY + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_LONELY, + }, + { + .species = SPECIES_RHYDON, + .item = BATTLE_TOWER_ITEM_CHOICE_BAND, + .teamFlags = 0x45, + .moves = { + MOVE_IRON_TAIL, + MOVE_EARTHQUAKE, + MOVE_SURF, + MOVE_FIRE_BLAST + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK, + .nature = NATURE_RASH, + }, + { + .species = SPECIES_ALAKAZAM, + .item = BATTLE_TOWER_ITEM_PETAYA_BERRY, + .teamFlags = 0x8B, + .moves = { + MOVE_PSYCHIC, + MOVE_REFLECT, + MOVE_RECOVER, + MOVE_SKILL_SWAP + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE, + .nature = NATURE_HASTY, + }, + { + .species = SPECIES_DUSCLOPS, + .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .teamFlags = 0x41, + .moves = { + MOVE_SHADOW_BALL, + MOVE_WILL_O_WISP, + MOVE_BLIZZARD, + MOVE_PSYCHIC + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK, + .nature = NATURE_CAREFUL, + }, + { + .species = SPECIES_TORKOAL, + .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .teamFlags = 0x09, + .moves = { + MOVE_FLAMETHROWER, + MOVE_AMNESIA, + MOVE_IRON_TAIL, + MOVE_REST + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK, + .nature = NATURE_NAIVE, + }, + { + .species = SPECIES_ELECTRODE, + .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .teamFlags = 0x09, + .moves = { + MOVE_SCREECH, + MOVE_EXPLOSION, + MOVE_MIRROR_COAT, + MOVE_PROTECT + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, + .nature = NATURE_RASH, + }, + { + .species = SPECIES_BRELOOM, + .item = BATTLE_TOWER_ITEM_LIECHI_BERRY, + .teamFlags = 0x0B, + .moves = { + MOVE_IRON_TAIL, + MOVE_FOCUS_PUNCH, + MOVE_DOUBLE_TEAM, + MOVE_LEECH_SEED + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_LAX, + }, + { + .species = SPECIES_MUK, + .item = BATTLE_TOWER_ITEM_POISON_BARB, + .teamFlags = 0x05, + .moves = { + MOVE_SLUDGE_BOMB, + MOVE_THUNDERBOLT, + MOVE_FLAMETHROWER, + MOVE_FOCUS_PUNCH + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_NAIVE, + }, + { + .species = SPECIES_WEEZING, + .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .teamFlags = 0x05, + .moves = { + MOVE_EXPLOSION, + MOVE_SLUDGE_BOMB, + MOVE_SHADOW_BALL, + MOVE_FLAMETHROWER + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_NAIVE, + }, + { + .species = SPECIES_RAICHU, + .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .teamFlags = 0x4E, + .moves = { + MOVE_THUNDERBOLT, + MOVE_DOUBLE_TEAM, + MOVE_FOCUS_PUNCH, + MOVE_ATTRACT + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_JOLLY, + }, + { + .species = SPECIES_TENTACRUEL, + .item = BATTLE_TOWER_ITEM_MYSTIC_WATER, + .teamFlags = 0x09, + .moves = { + MOVE_DOUBLE_TEAM, + MOVE_TOXIC, + MOVE_SURF, + MOVE_SLUDGE_BOMB + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_BOLD, + }, + { + .species = SPECIES_EXPLOUD, + .item = BATTLE_TOWER_ITEM_CHOICE_BAND, + .teamFlags = 0x05, + .moves = { + MOVE_BLIZZARD, + MOVE_FLAMETHROWER, + MOVE_EARTHQUAKE, + MOVE_RETURN + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_BASHFUL, + }, + { + .species = SPECIES_XATU, + .item = BATTLE_TOWER_ITEM_WHITE_HERB, + .teamFlags = 0x43, + .moves = { + MOVE_PSYCHIC, + MOVE_REST, + MOVE_CONFUSE_RAY, + MOVE_TOXIC + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED, + .nature = NATURE_BRAVE, + }, + { + .species = SPECIES_GOLEM, + .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .teamFlags = 0x05, + .moves = { + MOVE_EXPLOSION, + MOVE_EARTHQUAKE, + MOVE_ROCK_TOMB, + MOVE_FLAMETHROWER + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_IMPISH, + }, + { + .species = SPECIES_GOLDUCK, + .item = BATTLE_TOWER_ITEM_PECHA_BERRY, + .teamFlags = 0x83, + .moves = { + MOVE_SURF, + MOVE_ATTRACT, + MOVE_CALM_MIND, + MOVE_BLIZZARD + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_HASTY, + }, + { + .species = SPECIES_NINETALES, + .item = BATTLE_TOWER_ITEM_CHARCOAL, + .teamFlags = 0x4A, + .moves = { + MOVE_FLAMETHROWER, + MOVE_ATTRACT, + MOVE_TOXIC, + MOVE_CONFUSE_RAY + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_KINGDRA, + .item = BATTLE_TOWER_ITEM_CHESTO_BERRY, + .teamFlags = 0x13, + .moves = { + MOVE_DOUBLE_TEAM, + MOVE_REST, + MOVE_SURF, + MOVE_DRAGON_BREATH + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE, + .nature = NATURE_ADAMANT, + }, + { + .species = SPECIES_SLAKING, + .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .teamFlags = 0x03, + .moves = { + MOVE_CURSE, + MOVE_AMNESIA, + MOVE_YAWN, + MOVE_FOCUS_PUNCH + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE, + .nature = NATURE_LAX, + }, + { + .species = SPECIES_GYARADOS, + .item = BATTLE_TOWER_ITEM_CHERI_BERRY, + .teamFlags = 0x03, + .moves = { + MOVE_THUNDER, + MOVE_EARTHQUAKE, + MOVE_HYDRO_PUMP, + MOVE_RAIN_DANCE + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK, + .nature = NATURE_NAUGHTY, + }, + { + .species = SPECIES_HARIYAMA, + .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .teamFlags = 0x21, + .moves = { + MOVE_BELLY_DRUM, + MOVE_ENDURE, + MOVE_EARTHQUAKE, + MOVE_REVERSAL + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED, + .nature = NATURE_SASSY, + }, + { + .species = SPECIES_ABSOL, + .item = BATTLE_TOWER_ITEM_KINGS_ROCK, + .teamFlags = 0xC3, + .moves = { + MOVE_FAINT_ATTACK, + MOVE_DOUBLE_EDGE, + MOVE_SHADOW_BALL, + MOVE_FLAMETHROWER + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE, + .nature = NATURE_RELAXED, + }, + { + .species = SPECIES_ALTARIA, + .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .teamFlags = 0x83, + .moves = { + MOVE_DRAGON_DANCE, + MOVE_MIRROR_MOVE, + MOVE_DRAGON_CLAW, + MOVE_EARTHQUAKE + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED, + .nature = NATURE_RASH, + }, + { + .species = SPECIES_MACHAMP, + .item = BATTLE_TOWER_ITEM_BLACK_BELT, + .teamFlags = 0x11, + .moves = { + MOVE_CROSS_CHOP, + MOVE_FOCUS_PUNCH, + MOVE_ROCK_TOMB, + MOVE_ENCORE + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED, + .nature = NATURE_SASSY, + }, + { + .species = SPECIES_FLYGON, + .item = BATTLE_TOWER_ITEM_DRAGON_FANG, + .teamFlags = 0x43, + .moves = { + MOVE_CRUNCH, + MOVE_DRAGON_CLAW, + MOVE_EARTHQUAKE, + MOVE_FLAMETHROWER + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_NAIVE, + }, + { + .species = SPECIES_BLAZIKEN, + .item = BATTLE_TOWER_ITEM_PETAYA_BERRY, + .teamFlags = 0x33, + .moves = { + MOVE_COUNTER, + MOVE_ROCK_SLIDE, + MOVE_FOCUS_PUNCH, + MOVE_FLAMETHROWER + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK, + .nature = NATURE_GENTLE, + }, + { + .species = SPECIES_GLALIE, + .item = BATTLE_TOWER_ITEM_NEVER_MELT_ICE, + .teamFlags = 0x81, + .moves = { + MOVE_BLIZZARD, + MOVE_CRUNCH, + MOVE_ICY_WIND, + MOVE_DOUBLE_TEAM + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_JOLLY, + }, + { + .species = SPECIES_HUNTAIL, + .item = BATTLE_TOWER_ITEM_MYSTIC_WATER, + .teamFlags = 0xA1, + .moves = { + MOVE_RAIN_DANCE, + MOVE_HYDRO_PUMP, + MOVE_CRUNCH, + MOVE_BLIZZARD + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_MILOTIC, + .item = BATTLE_TOWER_ITEM_GANLON_BERRY, + .teamFlags = 0xD3, + .moves = { + MOVE_SURF, + MOVE_ATTRACT, + MOVE_RECOVER, + MOVE_TOXIC + }, + .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_HASTY, + }, + { + .species = SPECIES_GOREBYSS, + .item = BATTLE_TOWER_ITEM_PECHA_BERRY, + .teamFlags = 0x83, + .moves = { + MOVE_PSYCHIC, + MOVE_SURF, + MOVE_BLIZZARD, + MOVE_SHADOW_BALL + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_ADAMANT, + }, + { + .species = SPECIES_SCEPTILE, + .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .teamFlags = 0x53, + .moves = { + MOVE_LEAF_BLADE, + MOVE_ENDEAVOR, + MOVE_EARTHQUAKE, + MOVE_ROCK_TOMB + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED, + .nature = NATURE_BASHFUL, + }, + { + .species = SPECIES_SWAMPERT, + .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .teamFlags = 0x53, + .moves = { + MOVE_EARTHQUAKE, + MOVE_SURF, + MOVE_MUD_SHOT, + MOVE_BLIZZARD + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_NAIVE, + }, + { + .species = SPECIES_AGGRON, + .item = BATTLE_TOWER_ITEM_MENTAL_HERB, + .teamFlags = 0x41, + .moves = { + MOVE_DOUBLE_EDGE, + MOVE_FLAMETHROWER, + MOVE_IRON_TAIL, + MOVE_BLIZZARD + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_BOLD, + }, + { + .species = SPECIES_CRADILY, + .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .teamFlags = 0xE1, + .moves = { + MOVE_STOCKPILE, + MOVE_SPIT_UP, + MOVE_SWALLOW, + MOVE_DOUBLE_TEAM + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_LAX, + }, + { + .species = SPECIES_ARMALDO, + .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .teamFlags = 0xC1, + .moves = { + MOVE_EARTHQUAKE, + MOVE_HYPER_BEAM, + MOVE_SLASH, + MOVE_SWORDS_DANCE + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_LAX, + }, + { + .species = SPECIES_BRELOOM, + .item = BATTLE_TOWER_ITEM_SHELL_BELL, + .teamFlags = 0x82, + .moves = { + MOVE_FOCUS_PUNCH, + MOVE_COUNTER, + MOVE_MACH_PUNCH, + MOVE_SNATCH + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_LAX, + }, + { + .species = SPECIES_LUDICOLO, + .item = BATTLE_TOWER_ITEM_PETAYA_BERRY, + .teamFlags = 0x83, + .moves = { + MOVE_RAIN_DANCE, + MOVE_SURF, + MOVE_PROTECT, + MOVE_TOXIC + }, + .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_HASTY, + }, + { + .species = SPECIES_SHIFTRY, + .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .teamFlags = 0x03, + .moves = { + MOVE_TORMENT, + MOVE_FAINT_ATTACK, + MOVE_SHADOW_BALL, + MOVE_EXPLOSION + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_NAIVE, + }, + { + .species = SPECIES_TROPIUS, + .item = BATTLE_TOWER_ITEM_APICOT_BERRY, + .teamFlags = 0xC3, + .moves = { + MOVE_SUNNY_DAY, + MOVE_SYNTHESIS, + MOVE_SOLAR_BEAM, + MOVE_LEECH_SEED + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_GRUMPIG, + .item = BATTLE_TOWER_ITEM_MACHO_BRACE, + .teamFlags = 0x23, + .moves = { + MOVE_TRICK, + MOVE_SKILL_SWAP, + MOVE_PSYCHIC, + MOVE_REST + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_TORKOAL, + .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .teamFlags = 0x81, + .moves = { + MOVE_IRON_DEFENSE, + MOVE_TOXIC, + MOVE_REST, + MOVE_FLAMETHROWER + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_NAIVE, + }, + { + .species = SPECIES_MANECTRIC, + .item = BATTLE_TOWER_ITEM_NONE, + .teamFlags = 0x03, + .moves = { + MOVE_THUNDERBOLT, + MOVE_CRUNCH, + MOVE_ROAR, + MOVE_THIEF + }, + .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_HASTY, + }, + { + .species = SPECIES_PINSIR, + .item = BATTLE_TOWER_ITEM_LEPPA_BERRY, + .teamFlags = 0x61, + .moves = { + MOVE_GUILLOTINE, + MOVE_EARTHQUAKE, + MOVE_DOUBLE_TEAM, + MOVE_ROCK_TOMB + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_LAX, + }, + { + .species = SPECIES_STARMIE, + .item = BATTLE_TOWER_ITEM_CHESTO_BERRY, + .teamFlags = 0x93, + .moves = { + MOVE_LIGHT_SCREEN, + MOVE_THUNDERBOLT, + MOVE_SURF, + MOVE_REST + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_ADAMANT, + }, + { + .species = SPECIES_HERACROSS, + .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .teamFlags = 0x51, + .moves = { + MOVE_MEGAHORN, + MOVE_REVERSAL, + MOVE_EARTHQUAKE, + MOVE_COUNTER + }, + .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_WALREIN, + .item = BATTLE_TOWER_ITEM_NEVER_MELT_ICE, + .teamFlags = 0x83, + .moves = { + MOVE_BLIZZARD, + MOVE_EARTHQUAKE, + MOVE_SURF, + MOVE_ROCK_SLIDE + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_CAREFUL, + }, + { + .species = SPECIES_ALAKAZAM, + .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .teamFlags = 0x13, + .moves = { + MOVE_PSYCHIC, + MOVE_RECOVER, + MOVE_ENCORE, + MOVE_SNATCH + }, + .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_HASTY, + }, + { + .species = SPECIES_MILOTIC, + .item = BATTLE_TOWER_ITEM_APICOT_BERRY, + .teamFlags = 0x93, + .moves = { + MOVE_SURF, + MOVE_BLIZZARD, + MOVE_RECOVER, + MOVE_DOUBLE_TEAM + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_REGICE, + .item = BATTLE_TOWER_ITEM_CHESTO_BERRY, + .teamFlags = 0x11, + .moves = { + MOVE_REST, + MOVE_CURSE, + MOVE_BLIZZARD, + MOVE_EARTHQUAKE + }, + .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_MILD, + }, + { + .species = SPECIES_REGISTEEL, + .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .teamFlags = 0x11, + .moves = { + MOVE_REST, + MOVE_IRON_DEFENSE, + MOVE_THUNDERBOLT, + MOVE_EARTHQUAKE + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK, + .nature = NATURE_MILD, + }, + { + .species = SPECIES_REGIROCK, + .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .teamFlags = 0x91, + .moves = { + MOVE_ROCK_TOMB, + MOVE_EARTHQUAKE, + MOVE_THUNDERBOLT, + MOVE_EXPLOSION + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, + .nature = NATURE_SASSY, + }, + { + .species = SPECIES_DUSCLOPS, + .item = BATTLE_TOWER_ITEM_SPELL_TAG, + .teamFlags = 0x20, + .moves = { + MOVE_SHADOW_BALL, + MOVE_EARTHQUAKE, + MOVE_BLIZZARD, + MOVE_DESTINY_BOND + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED, + .nature = NATURE_NAUGHTY, + }, + { + .species = SPECIES_SEAKING, + .item = BATTLE_TOWER_ITEM_LEPPA_BERRY, + .teamFlags = 0xB2, + .moves = { + MOVE_HORN_DRILL, + MOVE_AGILITY, + MOVE_SLEEP_TALK, + MOVE_REST + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_BRAVE, + }, + { + .species = SPECIES_CAMERUPT, + .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .teamFlags = 0x00, + .moves = { + MOVE_EARTHQUAKE, + MOVE_ERUPTION, + MOVE_ROCK_SLIDE, + MOVE_FLAMETHROWER + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_NAIVE, + }, + { + .species = SPECIES_LANTURN, + .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .teamFlags = 0x82, + .moves = { + MOVE_THUNDERBOLT, + MOVE_SURF, + MOVE_THUNDER_WAVE, + MOVE_BLIZZARD + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, + .nature = NATURE_BRAVE, + }, + { + .species = SPECIES_WEEZING, + .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .teamFlags = 0x20, + .moves = { + MOVE_SLUDGE_BOMB, + MOVE_THUNDERBOLT, + MOVE_FIRE_BLAST, + MOVE_EXPLOSION + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, + .nature = NATURE_SERIOUS, + }, + { + .species = SPECIES_WHISCASH, + .item = BATTLE_TOWER_ITEM_PETAYA_BERRY, + .teamFlags = 0x41, + .moves = { + MOVE_EARTHQUAKE, + MOVE_SURF, + MOVE_ROCK_TOMB, + MOVE_ATTRACT + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK, + .nature = NATURE_RELAXED, + }, + { + .species = SPECIES_AGGRON, + .item = BATTLE_TOWER_ITEM_LIECHI_BERRY, + .teamFlags = 0x11, + .moves = { + MOVE_DOUBLE_EDGE, + MOVE_EARTHQUAKE, + MOVE_SURF, + MOVE_DRAGON_CLAW + }, + .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_GENTLE, + }, + { + .species = SPECIES_CACTURNE, + .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .teamFlags = 0x63, + .moves = { + MOVE_DYNAMIC_PUNCH, + MOVE_COUNTER, + MOVE_FAINT_ATTACK, + MOVE_GIGA_DRAIN + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK, + .nature = NATURE_RELAXED, + }, + { + .species = SPECIES_SHARPEDO, + .item = BATTLE_TOWER_ITEM_KINGS_ROCK, + .teamFlags = 0x01, + .moves = { + MOVE_CRUNCH, + MOVE_DOUBLE_EDGE, + MOVE_SURF, + MOVE_SWAGGER + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_SASSY, + }, + { + .species = SPECIES_ABSOL, + .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .teamFlags = 0x82, + .moves = { + MOVE_DOUBLE_EDGE, + MOVE_FACADE, + MOVE_SWORDS_DANCE, + MOVE_QUICK_ATTACK + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_WAILORD, + .item = BATTLE_TOWER_ITEM_LEPPA_BERRY, + .teamFlags = 0x23, + .moves = { + MOVE_HYDRO_PUMP, + MOVE_EARTHQUAKE, + MOVE_ATTRACT, + MOVE_FISSURE + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, + .nature = NATURE_TIMID, + }, + { + .species = SPECIES_TENTACRUEL, + .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .teamFlags = 0x21, + .moves = { + MOVE_HYDRO_PUMP, + MOVE_SLUDGE_BOMB, + MOVE_GIGA_DRAIN, + MOVE_MIRROR_COAT + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, + .nature = NATURE_RASH, + }, + { + .species = SPECIES_LUDICOLO, + .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .teamFlags = 0xA2, + .moves = { + MOVE_RAIN_DANCE, + MOVE_SURF, + MOVE_TOXIC, + MOVE_DOUBLE_TEAM + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_WOBBUFFET, + .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .teamFlags = 0x23, + .moves = { + MOVE_ENCORE, + MOVE_COUNTER, + MOVE_MIRROR_COAT, + MOVE_DESTINY_BOND + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, + .nature = NATURE_SERIOUS, + }, + { + .species = SPECIES_RHYDON, + .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .teamFlags = 0x21, + .moves = { + MOVE_EARTHQUAKE, + MOVE_MEGAHORN, + MOVE_HORN_DRILL, + MOVE_ROCK_SLIDE + }, + .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_GENTLE, + }, + { + .species = SPECIES_GLALIE, + .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .teamFlags = 0x21, + .moves = { + MOVE_CRUNCH, + MOVE_BLIZZARD, + MOVE_HAIL, + MOVE_EARTHQUAKE + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, + .nature = NATURE_SERIOUS, + }, + { + .species = SPECIES_SCEPTILE, + .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .teamFlags = 0x13, + .moves = { + MOVE_LEAF_BLADE, + MOVE_EARTHQUAKE, + MOVE_DRAGON_CLAW, + MOVE_CRUNCH + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED, + .nature = NATURE_BRAVE, + }, + { + .species = SPECIES_BLAZIKEN, + .item = BATTLE_TOWER_ITEM_LIECHI_BERRY, + .teamFlags = 0x17, + .moves = { + MOVE_BLAZE_KICK, + MOVE_ROCK_TOMB, + MOVE_ENDURE, + MOVE_REVERSAL + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, + .nature = NATURE_RASH, + }, + { + .species = SPECIES_SWAMPERT, + .item = BATTLE_TOWER_ITEM_SHELL_BELL, + .teamFlags = 0x17, + .moves = { + MOVE_SURF, + MOVE_EARTHQUAKE, + MOVE_MUD_SHOT, + MOVE_BLIZZARD + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_SERIOUS, + }, + { + .species = SPECIES_GARDEVOIR, + .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .teamFlags = 0x19, + .moves = { + MOVE_PSYCHIC, + MOVE_THUNDERBOLT, + MOVE_DESTINY_BOND, + MOVE_WILL_O_WISP + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED, + .nature = NATURE_BRAVE, + }, + { + .species = SPECIES_BRELOOM, + .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .teamFlags = 0xF6, + .moves = { + MOVE_SPORE, + MOVE_FOCUS_PUNCH, + MOVE_BRICK_BREAK, + MOVE_SLUDGE_BOMB + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_SASSY, + }, + { + .species = SPECIES_ALAKAZAM, + .item = BATTLE_TOWER_ITEM_GANLON_BERRY, + .teamFlags = 0x1B, + .moves = { + MOVE_PSYCHIC, + MOVE_THUNDER_PUNCH, + MOVE_REFLECT, + MOVE_RECOVER + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, + .nature = NATURE_HASTY, + }, + { + .species = SPECIES_SHIFTRY, + .item = BATTLE_TOWER_ITEM_CHESTO_BERRY, + .teamFlags = 0x89, + .moves = { + MOVE_FAINT_ATTACK, + MOVE_SHADOW_BALL, + MOVE_DOUBLE_TEAM, + MOVE_REST + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_SERIOUS, + }, + { + .species = SPECIES_HARIYAMA, + .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .teamFlags = 0x85, + .moves = { + MOVE_CROSS_CHOP, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FAKE_OUT + }, + .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_GENTLE, + }, + { + .species = SPECIES_CROBAT, + .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .teamFlags = 0x49, + .moves = { + MOVE_ATTRACT, + MOVE_CONFUSE_RAY, + MOVE_BITE, + MOVE_DOUBLE_TEAM + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_SASSY, + }, + { + .species = SPECIES_MACHAMP, + .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .teamFlags = 0x15, + .moves = { + MOVE_CROSS_CHOP, + MOVE_FLAMETHROWER, + MOVE_EARTHQUAKE, + MOVE_ROCK_SLIDE + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_MANECTRIC, + .item = BATTLE_TOWER_ITEM_PETAYA_BERRY, + .teamFlags = 0x0B, + .moves = { + MOVE_THUNDERBOLT, + MOVE_THUNDER_WAVE, + MOVE_ROAR, + MOVE_CRUNCH + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED, + .nature = NATURE_BRAVE, + }, + { + .species = SPECIES_ELECTRODE, + .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .teamFlags = 0x27, + .moves = { + MOVE_THUNDERBOLT, + MOVE_PROTECT, + MOVE_MIRROR_COAT, + MOVE_EXPLOSION + }, + .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_BASHFUL, + }, + { + .species = SPECIES_MUK, + .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .teamFlags = 0x05, + .moves = { + MOVE_SLUDGE_BOMB, + MOVE_FLAMETHROWER, + MOVE_THUNDERBOLT, + MOVE_EXPLOSION + }, + .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_GENTLE, + }, + { + .species = SPECIES_FLYGON, + .item = BATTLE_TOWER_ITEM_PETAYA_BERRY, + .teamFlags = 0x4D, + .moves = { + MOVE_DRAGON_CLAW, + MOVE_EARTHQUAKE, + MOVE_FLAMETHROWER, + MOVE_CRUNCH + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED, + .nature = NATURE_SERIOUS, + }, + { + .species = SPECIES_STARMIE, + .item = BATTLE_TOWER_ITEM_APICOT_BERRY, + .teamFlags = 0x1B, + .moves = { + MOVE_SURF, + MOVE_THUNDERBOLT, + MOVE_RECOVER, + MOVE_CONFUSE_RAY + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED, + .nature = NATURE_BRAVE, + }, + { + .species = SPECIES_DODRIO, + .item = BATTLE_TOWER_ITEM_LIECHI_BERRY, + .teamFlags = 0x2B, + .moves = { + MOVE_DRILL_PECK, + MOVE_TRI_ATTACK, + MOVE_AGILITY, + MOVE_FACADE + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_RAICHU, + .item = BATTLE_TOWER_ITEM_FOCUS_BAND, + .teamFlags = 0x0A, + .moves = { + MOVE_THUNDERBOLT, + MOVE_THUNDER_WAVE, + MOVE_REVERSAL, + MOVE_ATTRACT + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED, + .nature = NATURE_SERIOUS, + }, + { + .species = SPECIES_GOLDUCK, + .item = BATTLE_TOWER_ITEM_LIECHI_BERRY, + .teamFlags = 0x0A, + .moves = { + MOVE_SURF, + MOVE_CROSS_CHOP, + MOVE_ICE_BEAM, + MOVE_HYPER_BEAM + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_SERIOUS, + }, + { + .species = SPECIES_HERACROSS, + .item = BATTLE_TOWER_ITEM_LIECHI_BERRY, + .teamFlags = 0x54, + .moves = { + MOVE_MEGAHORN, + MOVE_ROCK_TOMB, + MOVE_ENDURE, + MOVE_REVERSAL + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_SASSY, + }, + { + .species = SPECIES_WALREIN, + .item = BATTLE_TOWER_ITEM_CHESTO_BERRY, + .teamFlags = 0x06, + .moves = { + MOVE_SURF, + MOVE_ICE_BEAM, + MOVE_EARTHQUAKE, + MOVE_REST + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_NAIVE, + }, + { + .species = SPECIES_KINGDRA, + .item = BATTLE_TOWER_ITEM_CHESTO_BERRY, + .teamFlags = 0x1D, + .moves = { + MOVE_SURF, + MOVE_TOXIC, + MOVE_PROTECT, + MOVE_REST + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_ADAMANT, + }, + { + .species = SPECIES_SALAMENCE, + .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .teamFlags = 0x9C, + .moves = { + MOVE_DRAGON_CLAW, + MOVE_EARTHQUAKE, + MOVE_CRUNCH, + MOVE_REST + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_ADAMANT, + }, + { + .species = SPECIES_METAGROSS, + .item = BATTLE_TOWER_ITEM_SHELL_BELL, + .teamFlags = 0x15, + .moves = { + MOVE_METEOR_MASH, + MOVE_PSYCHIC, + MOVE_EARTHQUAKE, + MOVE_LIGHT_SCREEN + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_REGIROCK, + .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .teamFlags = 0xB5, + .moves = { + MOVE_EARTHQUAKE, + MOVE_ANCIENT_POWER, + MOVE_FOCUS_PUNCH, + MOVE_EXPLOSION + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK, + .nature = NATURE_GENTLE, + }, + { + .species = SPECIES_REGICE, + .item = BATTLE_TOWER_ITEM_CHESTO_BERRY, + .teamFlags = 0x96, + .moves = { + MOVE_ICE_BEAM, + MOVE_THUNDERBOLT, + MOVE_DOUBLE_TEAM, + MOVE_REST + }, + .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_HASTY, + }, + { + .species = SPECIES_REGISTEEL, + .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .teamFlags = 0x94, + .moves = { + MOVE_METAL_CLAW, + MOVE_EARTHQUAKE, + MOVE_THUNDERBOLT, + MOVE_EXPLOSION + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK, + .nature = NATURE_GENTLE, + }, + { + .species = SPECIES_LATIAS, + .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .teamFlags = 0x96, + .moves = { + MOVE_MIST_BALL, + MOVE_THUNDERBOLT, + MOVE_REST, + MOVE_DRAGON_CLAW + }, + .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_MILD, + }, + { + .species = SPECIES_LATIOS, + .item = BATTLE_TOWER_ITEM_APICOT_BERRY, + .teamFlags = 0x95, + .moves = { + MOVE_LUSTER_PURGE, + MOVE_REFLECT, + MOVE_RECOVER, + MOVE_DRAGON_CLAW + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED, + .nature = NATURE_BRAVE, + }, + { + .species = SPECIES_MILOTIC, + .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .teamFlags = 0x96, + .moves = { + MOVE_SURF, + MOVE_TOXIC, + MOVE_RECOVER, + MOVE_MIRROR_COAT + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE, + .nature = NATURE_BRAVE, + }, + { + .species = SPECIES_SLAKING, + .item = BATTLE_TOWER_ITEM_CHOICE_BAND, + .teamFlags = 0x05, + .moves = { + MOVE_HYPER_BEAM, + MOVE_EARTHQUAKE, + MOVE_NONE, + MOVE_NONE + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_SERIOUS, + }, + { + .species = SPECIES_SCEPTILE, + .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .teamFlags = 0x1F, + .moves = { + MOVE_GIGA_DRAIN, + MOVE_DOUBLE_TEAM, + MOVE_LEECH_SEED, + MOVE_ATTRACT + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_BLAZIKEN, + .item = BATTLE_TOWER_ITEM_CHESTO_BERRY, + .teamFlags = 0x17, + .moves = { + MOVE_BLAZE_KICK, + MOVE_EARTHQUAKE, + MOVE_ROCK_SLIDE, + MOVE_REST + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED, + .nature = NATURE_BRAVE, + }, + { + .species = SPECIES_SWAMPERT, + .item = BATTLE_TOWER_ITEM_SHELL_BELL, + .teamFlags = 0x17, + .moves = { + MOVE_MUDDY_WATER, + MOVE_MUD_SHOT, + MOVE_MIRROR_COAT, + MOVE_ICE_BEAM + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_GARDEVOIR, + .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .teamFlags = 0x7B, + .moves = { + MOVE_PSYCHIC, + MOVE_SHADOW_BALL, + MOVE_DESTINY_BOND, + MOVE_SNATCH + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE, + .nature = NATURE_RELAXED, + }, + { + .species = SPECIES_BRELOOM, + .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .teamFlags = 0x56, + .moves = { + MOVE_SPORE, + MOVE_COUNTER, + MOVE_IRON_TAIL, + MOVE_GIGA_DRAIN + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_SASSY, + }, + { + .species = SPECIES_ALAKAZAM, + .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .teamFlags = 0x0A, + .moves = { + MOVE_PSYCHIC, + MOVE_THUNDER_PUNCH, + MOVE_FIRE_PUNCH, + MOVE_RECOVER + }, + .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_HASTY, + }, + { + .species = SPECIES_HARIYAMA, + .item = BATTLE_TOWER_ITEM_FOCUS_BAND, + .teamFlags = 0x05, + .moves = { + MOVE_CROSS_CHOP, + MOVE_ROCK_TOMB, + MOVE_ENDURE, + MOVE_REVERSAL + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_SASSY, + }, + { + .species = SPECIES_GYARADOS, + .item = BATTLE_TOWER_ITEM_SHELL_BELL, + .teamFlags = 0x0C, + .moves = { + MOVE_HYPER_BEAM, + MOVE_THUNDERBOLT, + MOVE_EARTHQUAKE, + MOVE_ICE_BEAM + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK, + .nature = NATURE_BOLD, + }, + { + .species = SPECIES_CROBAT, + .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .teamFlags = 0x49, + .moves = { + MOVE_TOXIC, + MOVE_CONFUSE_RAY, + MOVE_ATTRACT, + MOVE_PROTECT + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_MACHAMP, + .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .teamFlags = 0x15, + .moves = { + MOVE_CROSS_CHOP, + MOVE_COUNTER, + MOVE_EARTHQUAKE, + MOVE_FACADE + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, + .nature = NATURE_SERIOUS, + }, + { + .species = SPECIES_MANECTRIC, + .item = BATTLE_TOWER_ITEM_CHESTO_BERRY, + .teamFlags = 0x63, + .moves = { + MOVE_THUNDER, + MOVE_THUNDER_WAVE, + MOVE_REST, + MOVE_CRUNCH + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, + .nature = NATURE_BRAVE, + }, + { + .species = SPECIES_ELECTRODE, + .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .teamFlags = 0x07, + .moves = { + MOVE_THUNDERBOLT, + MOVE_SCREECH, + MOVE_MIRROR_COAT, + MOVE_EXPLOSION + }, + .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_MODEST, + }, + { + .species = SPECIES_MUK, + .item = BATTLE_TOWER_ITEM_LIECHI_BERRY, + .teamFlags = 0x45, + .moves = { + MOVE_SLUDGE_BOMB, + MOVE_GIGA_DRAIN, + MOVE_ROCK_TOMB, + MOVE_EXPLOSION + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, + .nature = NATURE_RASH, + }, + { + .species = SPECIES_FLYGON, + .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .teamFlags = 0x4D, + .moves = { + MOVE_DRAGON_CLAW, + MOVE_EARTHQUAKE, + MOVE_IRON_TAIL, + MOVE_ROCK_TOMB + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK, + .nature = NATURE_IMPISH, + }, + { + .species = SPECIES_STARMIE, + .item = BATTLE_TOWER_ITEM_CHESTO_BERRY, + .teamFlags = 0x1B, + .moves = { + MOVE_LIGHT_SCREEN, + MOVE_THUNDERBOLT, + MOVE_SURF, + MOVE_REST + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_NINETALES, + .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .teamFlags = 0x0A, + .moves = { + MOVE_CONFUSE_RAY, + MOVE_OVERHEAT, + MOVE_FLAMETHROWER, + MOVE_IRON_TAIL + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_GOLEM, + .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .teamFlags = 0x25, + .moves = { + MOVE_EARTHQUAKE, + MOVE_ROAR, + MOVE_FIRE_BLAST, + MOVE_EXPLOSION + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED, + .nature = NATURE_SERIOUS, + }, + { + .species = SPECIES_GOLDUCK, + .item = BATTLE_TOWER_ITEM_PETAYA_BERRY, + .teamFlags = 0x27, + .moves = { + MOVE_HYDRO_PUMP, + MOVE_CROSS_CHOP, + MOVE_BLIZZARD, + MOVE_PSYCH_UP + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_HERACROSS, + .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .teamFlags = 0x55, + .moves = { + MOVE_MEGAHORN, + MOVE_EARTHQUAKE, + MOVE_COUNTER, + MOVE_REVERSAL + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_WALREIN, + .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .teamFlags = 0x36, + .moves = { + MOVE_SURF, + MOVE_BLIZZARD, + MOVE_ROCK_SLIDE, + MOVE_SHEER_COLD + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, + .nature = NATURE_SERIOUS, + }, + { + .species = SPECIES_KINGDRA, + .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .teamFlags = 0x5C, + .moves = { + MOVE_HYDRO_PUMP, + MOVE_PROTECT, + MOVE_DRAGON_BREATH, + MOVE_DOUBLE_TEAM + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_ADAMANT, + }, + { + .species = SPECIES_SALAMENCE, + .item = BATTLE_TOWER_ITEM_KINGS_ROCK, + .teamFlags = 0x9D, + .moves = { + MOVE_DRAGON_CLAW, + MOVE_EARTHQUAKE, + MOVE_FLAMETHROWER, + MOVE_ROCK_TOMB + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED, + .nature = NATURE_SERIOUS, + }, + { + .species = SPECIES_METAGROSS, + .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .teamFlags = 0x15, + .moves = { + MOVE_METEOR_MASH, + MOVE_PSYCHIC, + MOVE_EARTHQUAKE, + MOVE_HYPER_BEAM + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_REGIROCK, + .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .teamFlags = 0x95, + .moves = { + MOVE_EARTHQUAKE, + MOVE_ROCK_TOMB, + MOVE_FACADE, + MOVE_EXPLOSION + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK, + .nature = NATURE_GENTLE, + }, + { + .species = SPECIES_REGICE, + .item = BATTLE_TOWER_ITEM_SHELL_BELL, + .teamFlags = 0x96, + .moves = { + MOVE_BLIZZARD, + MOVE_THUNDERBOLT, + MOVE_HAIL, + MOVE_EXPLOSION + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE, + .nature = NATURE_CAREFUL, + }, + { + .species = SPECIES_REGISTEEL, + .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .teamFlags = 0x94, + .moves = { + MOVE_METAL_CLAW, + MOVE_EARTHQUAKE, + MOVE_ANCIENT_POWER, + MOVE_EXPLOSION + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK, + .nature = NATURE_GENTLE, + }, + { + .species = SPECIES_LATIAS, + .item = BATTLE_TOWER_ITEM_APICOT_BERRY, + .teamFlags = 0x96, + .moves = { + MOVE_MIST_BALL, + MOVE_REFLECT, + MOVE_RECOVER, + MOVE_DRAGON_CLAW + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, + .nature = NATURE_BRAVE, + }, + { + .species = SPECIES_LATIOS, + .item = BATTLE_TOWER_ITEM_SHELL_BELL, + .teamFlags = 0x95, + .moves = { + MOVE_LUSTER_PURGE, + MOVE_ICE_BEAM, + MOVE_RECOVER, + MOVE_DRAGON_CLAW + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_MILOTIC, + .item = BATTLE_TOWER_ITEM_APICOT_BERRY, + .teamFlags = 0xD6, + .moves = { + MOVE_SURF, + MOVE_ICE_BEAM, + MOVE_RECOVER, + MOVE_DOUBLE_TEAM + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_ADAMANT, + }, + { + .species = SPECIES_KECLEON, + .item = BATTLE_TOWER_ITEM_CHOICE_BAND, + .teamFlags = 0x69, + .moves = { + MOVE_TRICK, + MOVE_REST, + MOVE_IRON_TAIL, + MOVE_DISABLE + }, + .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_QUIRKY, + }, + { + .species = SPECIES_SCEPTILE, + .item = BATTLE_TOWER_ITEM_CHESTO_BERRY, + .teamFlags = 0x5F, + .moves = { + MOVE_LEAF_BLADE, + MOVE_EARTHQUAKE, + MOVE_REST, + MOVE_CRUNCH + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE, + .nature = NATURE_BRAVE, + }, + { + .species = SPECIES_BLAZIKEN, + .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .teamFlags = 0x7F, + .moves = { + MOVE_FOCUS_PUNCH, + MOVE_COUNTER, + MOVE_SWAGGER, + MOVE_ROCK_TOMB + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, + .nature = NATURE_SASSY, + }, + { + .species = SPECIES_SWAMPERT, + .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .teamFlags = 0x57, + .moves = { + MOVE_IRON_TAIL, + MOVE_CURSE, + MOVE_DOUBLE_TEAM, + MOVE_REST + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_LAX, + }, + { + .species = SPECIES_GARDEVOIR, + .item = BATTLE_TOWER_ITEM_CHESTO_BERRY, + .teamFlags = 0x3B, + .moves = { + MOVE_SHADOW_BALL, + MOVE_PSYCHIC, + MOVE_REST, + MOVE_IMPRISON + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, + .nature = NATURE_BRAVE, + }, + { + .species = SPECIES_BRELOOM, + .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .teamFlags = 0x56, + .moves = { + MOVE_SPORE, + MOVE_FOCUS_PUNCH, + MOVE_SLUDGE_BOMB, + MOVE_IRON_TAIL + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_SASSY, + }, + { + .species = SPECIES_ALAKAZAM, + .item = BATTLE_TOWER_ITEM_CHOICE_BAND, + .teamFlags = 0x1A, + .moves = { + MOVE_PSYCHIC, + MOVE_TRICK, + MOVE_RECOVER, + MOVE_SNATCH + }, + .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_HASTY, + }, + { + .species = SPECIES_HARIYAMA, + .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .teamFlags = 0x65, + .moves = { + MOVE_REVENGE, + MOVE_COUNTER, + MOVE_FOCUS_PUNCH, + MOVE_REVERSAL + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, + .nature = NATURE_SASSY, + }, + { + .species = SPECIES_LUDICOLO, + .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .teamFlags = 0x54, + .moves = { + MOVE_RAIN_DANCE, + MOVE_PROTECT, + MOVE_TOXIC, + MOVE_SURF + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_CROBAT, + .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .teamFlags = 0x4B, + .moves = { + MOVE_SLUDGE_BOMB, + MOVE_BITE, + MOVE_AIR_CUTTER, + MOVE_SHADOW_BALL + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED, + .nature = NATURE_BRAVE, + }, + { + .species = SPECIES_MACHAMP, + .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .teamFlags = 0x75, + .moves = { + MOVE_CROSS_CHOP, + MOVE_ROCK_SLIDE, + MOVE_DYNAMIC_PUNCH, + MOVE_ROCK_TOMB + }, + .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_MANECTRIC, + .item = BATTLE_TOWER_ITEM_PETAYA_BERRY, + .teamFlags = 0x0A, + .moves = { + MOVE_THUNDERBOLT, + MOVE_THUNDER_WAVE, + MOVE_ATTRACT, + MOVE_CRUNCH + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_ELECTRODE, + .item = BATTLE_TOWER_ITEM_LIECHI_BERRY, + .teamFlags = 0x64, + .moves = { + MOVE_THUNDER, + MOVE_DOUBLE_TEAM, + MOVE_MIRROR_COAT, + MOVE_EXPLOSION + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, + .nature = NATURE_BASHFUL, + }, + { + .species = SPECIES_MUK, + .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .teamFlags = 0x49, + .moves = { + MOVE_SLUDGE_BOMB, + MOVE_FLAMETHROWER, + MOVE_THUNDERBOLT, + MOVE_SHADOW_PUNCH + }, + .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_GENTLE, + }, + { + .species = SPECIES_FLYGON, + .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .teamFlags = 0xCD, + .moves = { + MOVE_PROTECT, + MOVE_DIG, + MOVE_TOXIC, + MOVE_SANDSTORM + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_LAX, + }, + { + .species = SPECIES_STARMIE, + .item = BATTLE_TOWER_ITEM_KINGS_ROCK, + .teamFlags = 0x5B, + .moves = { + MOVE_SURF, + MOVE_THUNDERBOLT, + MOVE_BLIZZARD, + MOVE_PSYCHIC + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED, + .nature = NATURE_BRAVE, + }, + { + .species = SPECIES_LUDICOLO, + .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .teamFlags = 0x1A, + .moves = { + MOVE_RAIN_DANCE, + MOVE_LEECH_SEED, + MOVE_DIVE, + MOVE_PROTECT + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED, + .nature = NATURE_BRAVE, + }, + { + .species = SPECIES_RAICHU, + .item = BATTLE_TOWER_ITEM_LIECHI_BERRY, + .teamFlags = 0x4A, + .moves = { + MOVE_THUNDER, + MOVE_REVERSAL, + MOVE_FACADE, + MOVE_IRON_TAIL + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK, + .nature = NATURE_TIMID, + }, + { + .species = SPECIES_GOLDUCK, + .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .teamFlags = 0x0A, + .moves = { + MOVE_SURF, + MOVE_PSYCHIC, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED, + .nature = NATURE_DOCILE, + }, + { + .species = SPECIES_HERACROSS, + .item = BATTLE_TOWER_ITEM_LIECHI_BERRY, + .teamFlags = 0x15, + .moves = { + MOVE_MEGAHORN, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_ROCK_TOMB + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_WALREIN, + .item = BATTLE_TOWER_ITEM_LEPPA_BERRY, + .teamFlags = 0x26, + .moves = { + MOVE_SURF, + MOVE_ICE_BEAM, + MOVE_FISSURE, + MOVE_SHEER_COLD + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_KINGDRA, + .item = BATTLE_TOWER_ITEM_SHELL_BELL, + .teamFlags = 0x4D, + .moves = { + MOVE_HYDRO_PUMP, + MOVE_BLIZZARD, + MOVE_HYPER_BEAM, + MOVE_DISABLE + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_SALAMENCE, + .item = BATTLE_TOWER_ITEM_PETAYA_BERRY, + .teamFlags = 0x9C, + .moves = { + MOVE_DRAGON_CLAW, + MOVE_EARTHQUAKE, + MOVE_FIRE_BLAST, + MOVE_HYDRO_PUMP + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED, + .nature = NATURE_NAUGHTY, + }, + { + .species = SPECIES_METAGROSS, + .item = BATTLE_TOWER_ITEM_LIECHI_BERRY, + .teamFlags = 0xB5, + .moves = { + MOVE_METEOR_MASH, + MOVE_PSYCHIC, + MOVE_PURSUIT, + MOVE_ROCK_TOMB + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED, + .nature = NATURE_BRAVE, + }, + { + .species = SPECIES_REGIROCK, + .item = BATTLE_TOWER_ITEM_APICOT_BERRY, + .teamFlags = 0x95, + .moves = { + MOVE_EARTHQUAKE, + MOVE_TOXIC, + MOVE_SUPERPOWER, + MOVE_REST + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, + .nature = NATURE_SERIOUS, + }, + { + .species = SPECIES_REGICE, + .item = BATTLE_TOWER_ITEM_LAX_INCENSE, + .teamFlags = 0x96, + .moves = { + MOVE_ICE_BEAM, + MOVE_THUNDERBOLT, + MOVE_ANCIENT_POWER, + MOVE_EXPLOSION + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE, + .nature = NATURE_RASH, + }, + { + .species = SPECIES_REGISTEEL, + .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .teamFlags = 0xB4, + .moves = { + MOVE_CURSE, + MOVE_AMNESIA, + MOVE_RETURN, + MOVE_REST + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_LAX, + }, + { + .species = SPECIES_LATIAS, + .item = BATTLE_TOWER_ITEM_SHELL_BELL, + .teamFlags = 0x92, + .moves = { + MOVE_MIST_BALL, + MOVE_THUNDERBOLT, + MOVE_EARTHQUAKE, + MOVE_ICE_BEAM + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_LATIOS, + .item = BATTLE_TOWER_ITEM_SHELL_BELL, + .teamFlags = 0x91, + .moves = { + MOVE_LUSTER_PURGE, + MOVE_THUNDERBOLT, + MOVE_EARTHQUAKE, + MOVE_SURF + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_MILOTIC, + .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .teamFlags = 0xB2, + .moves = { + MOVE_SURF, + MOVE_ICE_BEAM, + MOVE_RECOVER, + MOVE_ATTRACT + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED, + .nature = NATURE_BRAVE, + }, + { + .species = SPECIES_SLAKING, + .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .teamFlags = 0x65, + .moves = { + MOVE_YAWN, + MOVE_SLASH, + MOVE_COUNTER, + MOVE_HYPER_BEAM + }, + .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_DOCILE, + }, + { + .species = SPECIES_SCEPTILE, + .item = BATTLE_TOWER_ITEM_SHELL_BELL, + .teamFlags = 0xDF, + .moves = { + MOVE_LEAF_BLADE, + MOVE_DETECT, + MOVE_DRAGON_CLAW, + MOVE_CRUNCH + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_BLAZIKEN, + .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .teamFlags = 0xD7, + .moves = { + MOVE_BLAZE_KICK, + MOVE_SKY_UPPERCUT, + MOVE_EARTHQUAKE, + MOVE_ROCK_SLIDE + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK, + .nature = NATURE_DOCILE, + }, + { + .species = SPECIES_SWAMPERT, + .item = BATTLE_TOWER_ITEM_PETAYA_BERRY, + .teamFlags = 0x5F, + .moves = { + MOVE_SURF, + MOVE_EARTHQUAKE, + MOVE_ICE_BEAM, + MOVE_ROCK_TOMB + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, + .nature = NATURE_SASSY, + }, + { + .species = SPECIES_SHEDINJA, + .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .teamFlags = 0xDB, + .moves = { + MOVE_CONFUSE_RAY, + MOVE_SHADOW_BALL, + MOVE_TOXIC, + MOVE_HYPER_BEAM + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_METAGROSS, + .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .teamFlags = 0x94, + .moves = { + MOVE_METEOR_MASH, + MOVE_PSYCHIC, + MOVE_SHADOW_BALL, + MOVE_EARTHQUAKE + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_GRUMPIG, + .item = BATTLE_TOWER_ITEM_MACHO_BRACE, + .teamFlags = 0x4B, + .moves = { + MOVE_PSYCHIC, + MOVE_CONFUSE_RAY, + MOVE_TRICK, + MOVE_REFLECT + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_LATIAS, + .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .teamFlags = 0x92, + .moves = { + MOVE_MIST_BALL, + MOVE_RECOVER, + MOVE_ATTRACT, + MOVE_DRAGON_CLAW + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_ADAMANT, + }, + { + .species = SPECIES_LATIOS, + .item = BATTLE_TOWER_ITEM_KINGS_ROCK, + .teamFlags = 0x91, + .moves = { + MOVE_LUSTER_PURGE, + MOVE_THUNDERBOLT, + MOVE_ICE_BEAM, + MOVE_DRAGON_CLAW + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_STARMIE, + .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .teamFlags = 0x1A, + .moves = { + MOVE_SURF, + MOVE_THUNDERBOLT, + MOVE_PSYCHIC, + MOVE_ICE_BEAM + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_MACHAMP, + .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .teamFlags = 0x14, + .moves = { + MOVE_CROSS_CHOP, + MOVE_COUNTER, + MOVE_ROCK_TOMB, + MOVE_FLAMETHROWER + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_HARDY, + }, +}; -- cgit v1.2.3 From f15bbca1ffe425c53c9e4f43f38d97b2e49d2c31 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Sun, 22 Oct 2017 15:49:44 -0700 Subject: Move battle_tower level100 mons to src/ --- src/battle_tower.c | 1 + src/data/battle_tower/level_100_mons.h | 3903 ++++++++++++++++++++++++++++++++ src/data/battle_tower/level_50_mons.h | 310 +-- 3 files changed, 4059 insertions(+), 155 deletions(-) create mode 100644 src/data/battle_tower/level_100_mons.h (limited to 'src') diff --git a/src/battle_tower.c b/src/battle_tower.c index a2715ad52..ec1d1f9ec 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -83,6 +83,7 @@ const u16 gBattleTowerHeldItems[] = { }; #include "data/battle_tower/level_50_mons.h" +#include "data/battle_tower/level_100_mons.h" extern u8 gUnknown_08400E23[]; extern u8 gUnknown_08400E29[]; diff --git a/src/data/battle_tower/level_100_mons.h b/src/data/battle_tower/level_100_mons.h new file mode 100644 index 000000000..fff34ff1f --- /dev/null +++ b/src/data/battle_tower/level_100_mons.h @@ -0,0 +1,3903 @@ +const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = +{ + { + .species = SPECIES_LINOONE, + .item = BATTLE_TOWER_ITEM_RAWST_BERRY, + .teamFlags = 0x42, + .moves = { + MOVE_SLASH, + MOVE_GROWL, + MOVE_TAIL_WHIP, + MOVE_SAND_ATTACK + }, + .evSpread = F_EV_SPREAD_SPEED, + .nature = NATURE_SERIOUS, + }, + { + .species = SPECIES_MIGHTYENA, + .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .teamFlags = 0x41, + .moves = { + MOVE_BITE, + MOVE_HOWL, + MOVE_ODOR_SLEUTH, + MOVE_SCARY_FACE + }, + .evSpread = F_EV_SPREAD_ATTACK, + .nature = NATURE_NAIVE, + }, + { + .species = SPECIES_BEAUTIFLY, + .item = BATTLE_TOWER_ITEM_PERSIM_BERRY, + .teamFlags = 0x41, + .moves = { + MOVE_GIGA_DRAIN, + MOVE_GUST, + MOVE_STUN_SPORE, + MOVE_PROTECT + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_CAREFUL, + }, + { + .species = SPECIES_DUSTOX, + .item = BATTLE_TOWER_ITEM_PECHA_BERRY, + .teamFlags = 0x41, + .moves = { + MOVE_PSYBEAM, + MOVE_GUST, + MOVE_DOUBLE_TEAM, + MOVE_SILVER_WIND + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE, + .nature = NATURE_RELAXED, + }, + { + .species = SPECIES_LOMBRE, + .item = BATTLE_TOWER_ITEM_CHESTO_BERRY, + .teamFlags = 0x03, + .moves = { + MOVE_ASTONISH, + MOVE_GROWL, + MOVE_MEGA_DRAIN, + MOVE_SURF + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_LONELY, + }, + { + .species = SPECIES_NUZLEAF, + .item = BATTLE_TOWER_ITEM_WHITE_HERB, + .teamFlags = 0x01, + .moves = { + MOVE_BULLET_SEED, + MOVE_RAZOR_WIND, + MOVE_FAINT_ATTACK, + MOVE_GROWTH + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK, + .nature = NATURE_DOCILE, + }, + { + .species = SPECIES_SWELLOW, + .item = BATTLE_TOWER_ITEM_SHARP_BEAK, + .teamFlags = 0x42, + .moves = { + MOVE_AERIAL_ACE, + MOVE_GROWL, + MOVE_ENDEAVOR, + MOVE_FOCUS_ENERGY + }, + .evSpread = F_EV_SPREAD_ATTACK, + .nature = NATURE_GENTLE, + }, + { + .species = SPECIES_PELIPPER, + .item = BATTLE_TOWER_ITEM_MYSTIC_WATER, + .teamFlags = 0x02, + .moves = { + MOVE_SURF, + MOVE_WATER_SPORT, + MOVE_PROTECT, + MOVE_SUPERSONIC + }, + .evSpread = F_EV_SPREAD_SP_ATTACK, + .nature = NATURE_MILD, + }, + { + .species = SPECIES_BRELOOM, + .item = BATTLE_TOWER_ITEM_KINGS_ROCK, + .teamFlags = 0x42, + .moves = { + MOVE_MACH_PUNCH, + MOVE_MEGA_DRAIN, + MOVE_HEADBUTT, + MOVE_STUN_SPORE + }, + .evSpread = F_EV_SPREAD_ATTACK, + .nature = NATURE_GENTLE, + }, + { + .species = SPECIES_NINJASK, + .item = BATTLE_TOWER_ITEM_RAWST_BERRY, + .teamFlags = 0x41, + .moves = { + MOVE_SCRATCH, + MOVE_SCREECH, + MOVE_LEECH_LIFE, + MOVE_FLASH + }, + .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK, + .nature = NATURE_SERIOUS, + }, + { + .species = SPECIES_CROBAT, + .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .teamFlags = 0x01, + .moves = { + MOVE_BITE, + MOVE_FLY, + MOVE_SUPERSONIC, + MOVE_HAZE + }, + .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_IMPISH, + }, + { + .species = SPECIES_MAWILE, + .item = BATTLE_TOWER_ITEM_METAL_COAT, + .teamFlags = 0x03, + .moves = { + MOVE_VICE_GRIP, + MOVE_SWEET_SCENT, + MOVE_ASTONISH, + MOVE_STRENGTH + }, + .evSpread = F_EV_SPREAD_ATTACK, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_NOSEPASS, + .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .teamFlags = 0x01, + .moves = { + MOVE_ROCK_THROW, + MOVE_SANDSTORM, + MOVE_HARDEN, + MOVE_PROTECT + }, + .evSpread = F_EV_SPREAD_ATTACK, + .nature = NATURE_IMPISH, + }, + { + .species = SPECIES_DELCATTY, + .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .teamFlags = 0x42, + .moves = { + MOVE_DOUBLE_SLAP, + MOVE_TAIL_WHIP, + MOVE_ATTRACT, + MOVE_CHARM + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE, + .nature = NATURE_BOLD, + }, + { + .species = SPECIES_CAMERUPT, + .item = BATTLE_TOWER_ITEM_CHARCOAL, + .teamFlags = 0x01, + .moves = { + MOVE_EMBER, + MOVE_TAKE_DOWN, + MOVE_GROWL, + MOVE_SANDSTORM + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE, + .nature = NATURE_RASH, + }, + { + .species = SPECIES_MUK, + .item = BATTLE_TOWER_ITEM_ORAN_BERRY, + .teamFlags = 0x01, + .moves = { + MOVE_POISON_GAS, + MOVE_MINIMIZE, + MOVE_SLUDGE, + MOVE_SCREECH + }, + .evSpread = F_EV_SPREAD_HP, + .nature = NATURE_CALM, + }, + { + .species = SPECIES_SANDSLASH, + .item = BATTLE_TOWER_ITEM_SOFT_SAND, + .teamFlags = 0x03, + .moves = { + MOVE_SLASH, + MOVE_SAND_ATTACK, + MOVE_DEFENSE_CURL, + MOVE_SWIFT + }, + .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK, + .nature = NATURE_DOCILE, + }, + { + .species = SPECIES_SPINDA, + .item = BATTLE_TOWER_ITEM_SILK_SCARF, + .teamFlags = 0x42, + .moves = { + MOVE_UPROAR, + MOVE_WATER_PULSE, + MOVE_THRASH, + MOVE_SAFEGUARD + }, + .evSpread = F_EV_SPREAD_SPEED, + .nature = NATURE_TIMID, + }, + { + .species = SPECIES_WHISCASH, + .item = BATTLE_TOWER_ITEM_CHESTO_BERRY, + .teamFlags = 0x01, + .moves = { + MOVE_TICKLE, + MOVE_MUD_SPORT, + MOVE_WATER_GUN, + MOVE_WATER_SPORT + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE, + .nature = NATURE_HASTY, + }, + { + .species = SPECIES_CACTURNE, + .item = BATTLE_TOWER_ITEM_POISON_BARB, + .teamFlags = 0x01, + .moves = { + MOVE_POISON_STING, + MOVE_PIN_MISSILE, + MOVE_ABSORB, + MOVE_COTTON_SPORE + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK, + .nature = NATURE_NAIVE, + }, + { + .species = SPECIES_JIGGLYPUFF, + .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .teamFlags = 0x42, + .moves = { + MOVE_SING, + MOVE_ROLLOUT, + MOVE_POUND, + MOVE_LIGHT_SCREEN + }, + .evSpread = F_EV_SPREAD_HP, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_MARILL, + .item = BATTLE_TOWER_ITEM_MYSTIC_WATER, + .teamFlags = 0x42, + .moves = { + MOVE_BUBBLE_BEAM, + MOVE_DEFENSE_CURL, + MOVE_RAIN_DANCE, + MOVE_IRON_TAIL + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_MAGNETON, + .item = BATTLE_TOWER_ITEM_RAWST_BERRY, + .teamFlags = 0x01, + .moves = { + MOVE_THUNDER_SHOCK, + MOVE_SUPERSONIC, + MOVE_FLASH, + MOVE_SCREECH + }, + .evSpread = F_EV_SPREAD_SPEED, + .nature = NATURE_CAREFUL, + }, + { + .species = SPECIES_CARVANHA, + .item = BATTLE_TOWER_ITEM_KINGS_ROCK, + .teamFlags = 0x01, + .moves = { + MOVE_BITE, + MOVE_RAGE, + MOVE_SCARY_FACE, + MOVE_LEER + }, + .evSpread = F_EV_SPREAD_ATTACK, + .nature = NATURE_QUIRKY, + }, + { + .species = SPECIES_KECLEON, + .item = BATTLE_TOWER_ITEM_PERSIM_BERRY, + .teamFlags = 0x03, + .moves = { + MOVE_THIEF, + MOVE_LICK, + MOVE_BIND, + MOVE_FURY_SWIPES + }, + .evSpread = F_EV_SPREAD_DEFENSE, + .nature = NATURE_JOLLY, + }, + { + .species = SPECIES_NINETALES, + .item = BATTLE_TOWER_ITEM_CHARCOAL, + .teamFlags = 0x02, + .moves = { + MOVE_EMBER, + MOVE_CONFUSE_RAY, + MOVE_FIRE_SPIN, + MOVE_SAFEGUARD + }, + .evSpread = F_EV_SPREAD_SP_ATTACK, + .nature = NATURE_LONELY, + }, + { + .species = SPECIES_RAICHU, + .item = BATTLE_TOWER_ITEM_PERSIM_BERRY, + .teamFlags = 0x42, + .moves = { + MOVE_SHOCK_WAVE, + MOVE_GROWL, + MOVE_DOUBLE_TEAM, + MOVE_LIGHT_SCREEN + }, + .evSpread = F_EV_SPREAD_DEFENSE, + .nature = NATURE_NAIVE, + }, + { + .species = SPECIES_SEALEO, + .item = BATTLE_TOWER_ITEM_NEVER_MELT_ICE, + .teamFlags = 0x01, + .moves = { + MOVE_ICE_BALL, + MOVE_WATER_GUN, + MOVE_ENCORE, + MOVE_HAIL + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK, + .nature = NATURE_LAX, + }, + { + .species = SPECIES_GRAVELER, + .item = BATTLE_TOWER_ITEM_HARD_STONE, + .teamFlags = 0x01, + .moves = { + MOVE_ROCK_THROW, + MOVE_MUD_SPORT, + MOVE_SANDSTORM, + MOVE_ROCK_TOMB + }, + .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_GENTLE, + }, + { + .species = SPECIES_SHUPPET, + .item = BATTLE_TOWER_ITEM_SPELL_TAG, + .teamFlags = 0x03, + .moves = { + MOVE_NIGHT_SHADE, + MOVE_WILL_O_WISP, + MOVE_SCREECH, + MOVE_KNOCK_OFF + }, + .evSpread = F_EV_SPREAD_SP_ATTACK, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_LUVDISC, + .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .teamFlags = 0x0A, + .moves = { + MOVE_ATTRACT, + MOVE_FLAIL, + MOVE_SWEET_KISS, + MOVE_WATER_PULSE + }, + .evSpread = F_EV_SPREAD_SP_ATTACK, + .nature = NATURE_ADAMANT, + }, + { + .species = SPECIES_LANTURN, + .item = BATTLE_TOWER_ITEM_CHERI_BERRY, + .teamFlags = 0x0A, + .moves = { + MOVE_THUNDER_WAVE, + MOVE_SUPERSONIC, + MOVE_WATER_GUN, + MOVE_SPARK + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_BOLD, + }, + { + .species = SPECIES_CORSOLA, + .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .teamFlags = 0x0A, + .moves = { + MOVE_MIRROR_COAT, + MOVE_BUBBLE, + MOVE_HARDEN, + MOVE_LIGHT_SCREEN + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE, + .nature = NATURE_TIMID, + }, + { + .species = SPECIES_WAILMER, + .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .teamFlags = 0x05, + .moves = { + MOVE_SURF, + MOVE_ROAR, + MOVE_GROWL, + MOVE_MIST + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_SASSY, + }, + { + .species = SPECIES_RHYDON, + .item = BATTLE_TOWER_ITEM_FOCUS_BAND, + .teamFlags = 0x05, + .moves = { + MOVE_TAKE_DOWN, + MOVE_SCARY_FACE, + MOVE_TAIL_WHIP, + MOVE_ROAR + }, + .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_DODRIO, + .item = BATTLE_TOWER_ITEM_SHARP_BEAK, + .teamFlags = 0x05, + .moves = { + MOVE_FURY_ATTACK, + MOVE_PURSUIT, + MOVE_AERIAL_ACE, + MOVE_AGILITY + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_GOLDUCK, + .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .teamFlags = 0x05, + .moves = { + MOVE_FURY_SWIPES, + MOVE_TAIL_WHIP, + MOVE_DISABLE, + MOVE_PSYCH_UP + }, + .evSpread = F_EV_SPREAD_ATTACK, + .nature = NATURE_RELAXED, + }, + { + .species = SPECIES_BELLOSSOM, + .item = BATTLE_TOWER_ITEM_MIRACLE_SEED, + .teamFlags = 0x0A, + .moves = { + MOVE_GIGA_DRAIN, + MOVE_POISON_POWDER, + MOVE_STUN_SPORE, + MOVE_ACID + }, + .evSpread = F_EV_SPREAD_SP_ATTACK, + .nature = NATURE_BOLD, + }, + { + .species = SPECIES_TROPIUS, + .item = BATTLE_TOWER_ITEM_KINGS_ROCK, + .teamFlags = 0x05, + .moves = { + MOVE_STOMP, + MOVE_RAZOR_LEAF, + MOVE_GUST, + MOVE_SYNTHESIS + }, + .evSpread = F_EV_SPREAD_ATTACK, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_SABLEYE, + .item = BATTLE_TOWER_ITEM_SPELL_TAG, + .teamFlags = 0x0A, + .moves = { + MOVE_NIGHT_SHADE, + MOVE_FAKE_OUT, + MOVE_PSYCH_UP, + MOVE_DETECT + }, + .evSpread = F_EV_SPREAD_SPEED, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_ELECTRODE, + .item = BATTLE_TOWER_ITEM_FOCUS_BAND, + .teamFlags = 0x03, + .moves = { + MOVE_SONIC_BOOM, + MOVE_SCREECH, + MOVE_SPARK, + MOVE_SELF_DESTRUCT + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE, + .nature = NATURE_QUIRKY, + }, + { + .species = SPECIES_TENTACRUEL, + .item = BATTLE_TOWER_ITEM_POISON_BARB, + .teamFlags = 0x01, + .moves = { + MOVE_ACID, + MOVE_WATER_PULSE, + MOVE_BARRIER, + MOVE_WRAP + }, + .evSpread = F_EV_SPREAD_SPEED, + .nature = NATURE_HASTY, + }, + { + .species = SPECIES_CLAYDOL, + .item = BATTLE_TOWER_ITEM_SOFT_SAND, + .teamFlags = 0x05, + .moves = { + MOVE_ANCIENT_POWER, + MOVE_MUD_SLAP, + MOVE_RAPID_SPIN, + MOVE_CONFUSION + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_GRUMPIG, + .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .teamFlags = 0x0A, + .moves = { + MOVE_PSYBEAM, + MOVE_PSYCH_UP, + MOVE_BOUNCE, + MOVE_MAGIC_COAT + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE, + .nature = NATURE_NAUGHTY, + }, + { + .species = SPECIES_CRAWDAUNT, + .item = BATTLE_TOWER_ITEM_MENTAL_HERB, + .teamFlags = 0x05, + .moves = { + MOVE_CRABHAMMER, + MOVE_BUBBLE_BEAM, + MOVE_BRICK_BREAK, + MOVE_PROTECT + }, + .evSpread = F_EV_SPREAD_ATTACK, + .nature = NATURE_CALM, + }, + { + .species = SPECIES_SEVIPER, + .item = BATTLE_TOWER_ITEM_POISON_BARB, + .teamFlags = 0x01, + .moves = { + MOVE_POISON_TAIL, + MOVE_GLARE, + MOVE_WRAP, + MOVE_THIEF + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE, + .nature = NATURE_CAREFUL, + }, + { + .species = SPECIES_ZANGOOSE, + .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .teamFlags = 0x05, + .moves = { + MOVE_FURY_CUTTER, + MOVE_LEER, + MOVE_QUICK_ATTACK, + MOVE_DETECT + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_ALTARIA, + .item = BATTLE_TOWER_ITEM_DRAGON_FANG, + .teamFlags = 0x03, + .moves = { + MOVE_DRAGON_BREATH, + MOVE_SING, + MOVE_SAFEGUARD, + MOVE_TAKE_DOWN + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_ROSELIA, + .item = BATTLE_TOWER_ITEM_CHESTO_BERRY, + .teamFlags = 0x0A, + .moves = { + MOVE_LEECH_SEED, + MOVE_MEGA_DRAIN, + MOVE_GROWTH, + MOVE_STUN_SPORE + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK, + .nature = NATURE_NAUGHTY, + }, + { + .species = SPECIES_VOLBEAT, + .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .teamFlags = 0x09, + .moves = { + MOVE_SIGNAL_BEAM, + MOVE_CONFUSE_RAY, + MOVE_DOUBLE_TEAM, + MOVE_LIGHT_SCREEN + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_ILLUMISE, + .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .teamFlags = 0x09, + .moves = { + MOVE_CHARM, + MOVE_ENCORE, + MOVE_SOLAR_BEAM, + MOVE_ATTRACT + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_MANECTRIC, + .item = BATTLE_TOWER_ITEM_MAGNET, + .teamFlags = 0x03, + .moves = { + MOVE_BITE, + MOVE_HOWL, + MOVE_THUNDER_WAVE, + MOVE_SPARK + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED, + .nature = NATURE_SERIOUS, + }, + { + .species = SPECIES_MAWILE, + .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .teamFlags = 0x0A, + .moves = { + MOVE_CRUNCH, + MOVE_IRON_DEFENSE, + MOVE_TORMENT, + MOVE_SANDSTORM + }, + .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK, + .nature = NATURE_RASH, + }, + { + .species = SPECIES_HARIYAMA, + .item = BATTLE_TOWER_ITEM_KINGS_ROCK, + .teamFlags = 0x05, + .moves = { + MOVE_ARM_THRUST, + MOVE_FAKE_OUT, + MOVE_WHIRLWIND, + MOVE_REVERSAL + }, + .evSpread = F_EV_SPREAD_ATTACK, + .nature = NATURE_GENTLE, + }, + { + .species = SPECIES_SKARMORY, + .item = BATTLE_TOWER_ITEM_METAL_COAT, + .teamFlags = 0x01, + .moves = { + MOVE_STEEL_WING, + MOVE_AGILITY, + MOVE_TAUNT, + MOVE_FLY + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED, + .nature = NATURE_NAIVE, + }, + { + .species = SPECIES_TORKOAL, + .item = BATTLE_TOWER_ITEM_PECHA_BERRY, + .teamFlags = 0x03, + .moves = { + MOVE_FIRE_SPIN, + MOVE_SMOKESCREEN, + MOVE_BODY_SLAM, + MOVE_AMNESIA + }, + .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_MILD, + }, + { + .species = SPECIES_GYARADOS, + .item = BATTLE_TOWER_ITEM_PERSIM_BERRY, + .teamFlags = 0x05, + .moves = { + MOVE_THRASH, + MOVE_DRAGON_RAGE, + MOVE_TWISTER, + MOVE_HYDRO_PUMP + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_QUIRKY, + }, + { + .species = SPECIES_MIGHTYENA, + .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .teamFlags = 0x05, + .moves = { + MOVE_CRUNCH, + MOVE_HOWL, + MOVE_IRON_TAIL, + MOVE_TORMENT + }, + .evSpread = F_EV_SPREAD_SP_ATTACK, + .nature = NATURE_QUIRKY, + }, + { + .species = SPECIES_LINOONE, + .item = BATTLE_TOWER_ITEM_CHERI_BERRY, + .teamFlags = 0x06, + .moves = { + MOVE_SLASH, + MOVE_ATTRACT, + MOVE_SHOCK_WAVE, + MOVE_TOXIC + }, + .evSpread = F_EV_SPREAD_ATTACK, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_MASQUERAIN, + .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .teamFlags = 0x0A, + .moves = { + MOVE_TOXIC, + MOVE_STUN_SPORE, + MOVE_SUNNY_DAY, + MOVE_SOLAR_BEAM + }, + .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK, + .nature = NATURE_LAX, + }, + { + .species = SPECIES_SCEPTILE, + .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .teamFlags = 0x06, + .moves = { + MOVE_BULLET_SEED, + MOVE_SLAM, + MOVE_SCREECH, + MOVE_DETECT + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED, + .nature = NATURE_RELAXED, + }, + { + .species = SPECIES_BLAZIKEN, + .item = BATTLE_TOWER_ITEM_KINGS_ROCK, + .teamFlags = 0x06, + .moves = { + MOVE_DOUBLE_KICK, + MOVE_FLAMETHROWER, + MOVE_DOUBLE_TEAM, + MOVE_ROAR + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK, + .nature = NATURE_GENTLE, + }, + { + .species = SPECIES_SWAMPERT, + .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .teamFlags = 0x49, + .moves = { + MOVE_SURF, + MOVE_MUD_SHOT, + MOVE_MUD_SPORT, + MOVE_RAIN_DANCE + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_SALAMENCE, + .item = BATTLE_TOWER_ITEM_DRAGON_FANG, + .teamFlags = 0x49, + .moves = { + MOVE_DRAGON_BREATH, + MOVE_FLY, + MOVE_TOXIC, + MOVE_FACADE + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_CALM, + }, + { + .species = SPECIES_KINGDRA, + .item = BATTLE_TOWER_ITEM_PERSIM_BERRY, + .teamFlags = 0x49, + .moves = { + MOVE_SURF, + MOVE_ICE_BEAM, + MOVE_SMOKESCREEN, + MOVE_RAIN_DANCE + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED, + .nature = NATURE_SERIOUS, + }, + { + .species = SPECIES_CORSOLA, + .item = BATTLE_TOWER_ITEM_PERSIM_BERRY, + .teamFlags = 0x03, + .moves = { + MOVE_ANCIENT_POWER, + MOVE_MIRROR_COAT, + MOVE_SAFEGUARD, + MOVE_REFLECT + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE, + .nature = NATURE_BOLD, + }, + { + .species = SPECIES_RHYDON, + .item = BATTLE_TOWER_ITEM_FOCUS_BAND, + .teamFlags = 0x41, + .moves = { + MOVE_EARTHQUAKE, + MOVE_IRON_TAIL, + MOVE_ROAR, + MOVE_THUNDERBOLT + }, + .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_HASTY, + }, + { + .species = SPECIES_HERACROSS, + .item = BATTLE_TOWER_ITEM_KINGS_ROCK, + .teamFlags = 0x06, + .moves = { + MOVE_MEGAHORN, + MOVE_COUNTER, + MOVE_PROTECT, + MOVE_LEER + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_GENTLE, + }, + { + .species = SPECIES_GIRAFARIG, + .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .teamFlags = 0x09, + .moves = { + MOVE_PSYCHIC, + MOVE_CRUNCH, + MOVE_BATON_PASS, + MOVE_AGILITY + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, + .nature = NATURE_ADAMANT, + }, + { + .species = SPECIES_XATU, + .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .teamFlags = 0x09, + .moves = { + MOVE_PSYCHIC, + MOVE_FLY, + MOVE_CONFUSE_RAY, + MOVE_TOXIC + }, + .evSpread = F_EV_SPREAD_SPEED, + .nature = NATURE_BASHFUL, + }, + { + .species = SPECIES_DODRIO, + .item = BATTLE_TOWER_ITEM_SHARP_BEAK, + .teamFlags = 0x03, + .moves = { + MOVE_DRILL_PECK, + MOVE_TRI_ATTACK, + MOVE_PURSUIT, + MOVE_TORMENT + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_SERIOUS, + }, + { + .species = SPECIES_VILEPLUME, + .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .teamFlags = 0x89, + .moves = { + MOVE_POISON_POWDER, + MOVE_STUN_SPORE, + MOVE_SLEEP_POWDER, + MOVE_PETAL_DANCE + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_MODEST, + }, + { + .species = SPECIES_MEDICHAM, + .item = BATTLE_TOWER_ITEM_TWISTED_SPOON, + .teamFlags = 0x06, + .moves = { + MOVE_FOCUS_PUNCH, + MOVE_LIGHT_SCREEN, + MOVE_BULK_UP, + MOVE_PSYCHIC + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE, + .nature = NATURE_JOLLY, + }, + { + .species = SPECIES_ABSOL, + .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .teamFlags = 0x06, + .moves = { + MOVE_SLASH, + MOVE_SWORDS_DANCE, + MOVE_DOUBLE_TEAM, + MOVE_ATTRACT + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_DUSCLOPS, + .item = BATTLE_TOWER_ITEM_SPELL_TAG, + .teamFlags = 0x4B, + .moves = { + MOVE_CONFUSE_RAY, + MOVE_WILL_O_WISP, + MOVE_NIGHT_SHADE, + MOVE_DISABLE + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE, + .nature = NATURE_LAX, + }, + { + .species = SPECIES_SHUPPET, + .item = BATTLE_TOWER_ITEM_SPELL_TAG, + .teamFlags = 0x43, + .moves = { + MOVE_GRUDGE, + MOVE_SHADOW_BALL, + MOVE_CURSE, + MOVE_KNOCK_OFF + }, + .evSpread = F_EV_SPREAD_SP_ATTACK, + .nature = NATURE_IMPISH, + }, + { + .species = SPECIES_CASTFORM, + .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .teamFlags = 0x82, + .moves = { + MOVE_WEATHER_BALL, + MOVE_HAIL, + MOVE_SUNNY_DAY, + MOVE_RAIN_DANCE + }, + .evSpread = F_EV_SPREAD_SPEED, + .nature = NATURE_MODEST, + }, + { + .species = SPECIES_MILOTIC, + .item = BATTLE_TOWER_ITEM_DRAGON_FANG, + .teamFlags = 0x02, + .moves = { + MOVE_SURF, + MOVE_REFRESH, + MOVE_RECOVER, + MOVE_RAIN_DANCE + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK, + .nature = NATURE_ADAMANT, + }, + { + .species = SPECIES_SHARPEDO, + .item = BATTLE_TOWER_ITEM_PERSIM_BERRY, + .teamFlags = 0x01, + .moves = { + MOVE_CRUNCH, + MOVE_FOCUS_ENERGY, + MOVE_SCARY_FACE, + MOVE_SCREECH + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_LAX, + }, + { + .species = SPECIES_FLYGON, + .item = BATTLE_TOWER_ITEM_CHERI_BERRY, + .teamFlags = 0x06, + .moves = { + MOVE_EARTHQUAKE, + MOVE_SAND_ATTACK, + MOVE_DRAGON_BREATH, + MOVE_SAND_TOMB + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_NAUGHTY, + }, + { + .species = SPECIES_TRAPINCH, + .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .teamFlags = 0x09, + .moves = { + MOVE_TOXIC, + MOVE_SAND_TOMB, + MOVE_CRUNCH, + MOVE_DOUBLE_TEAM + }, + .evSpread = F_EV_SPREAD_ATTACK, + .nature = NATURE_DOCILE, + }, + { + .species = SPECIES_LUNATONE, + .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .teamFlags = 0x43, + .moves = { + MOVE_PSYCHIC, + MOVE_ROCK_THROW, + MOVE_HYPNOSIS, + MOVE_LIGHT_SCREEN + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_SOLROCK, + .item = BATTLE_TOWER_ITEM_PECHA_BERRY, + .teamFlags = 0x43, + .moves = { + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_COSMIC_POWER, + MOVE_CALM_MIND + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_BALTOY, + .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .teamFlags = 0x43, + .moves = { + MOVE_PSYCHIC, + MOVE_EARTHQUAKE, + MOVE_REFLECT, + MOVE_SELF_DESTRUCT + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_BASHFUL, + }, + { + .species = SPECIES_CRAWDAUNT, + .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .teamFlags = 0x06, + .moves = { + MOVE_CRABHAMMER, + MOVE_SURF, + MOVE_PROTECT, + MOVE_BRICK_BREAK + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_RASH, + }, + { + .species = SPECIES_WHISCASH, + .item = BATTLE_TOWER_ITEM_ASPEAR_BERRY, + .teamFlags = 0x06, + .moves = { + MOVE_EARTHQUAKE, + MOVE_TICKLE, + MOVE_AMNESIA, + MOVE_SURF + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_SEVIPER, + .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .teamFlags = 0x09, + .moves = { + MOVE_POISON_TAIL, + MOVE_CRUNCH, + MOVE_GIGA_DRAIN, + MOVE_HAZE + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK, + .nature = NATURE_RELAXED, + }, + { + .species = SPECIES_MAGCARGO, + .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .teamFlags = 0x89, + .moves = { + MOVE_FLAMETHROWER, + MOVE_LIGHT_SCREEN, + MOVE_AMNESIA, + MOVE_ROCK_SLIDE + }, + .evSpread = F_EV_SPREAD_ATTACK, + .nature = NATURE_SASSY, + }, + { + .species = SPECIES_MACHAMP, + .item = BATTLE_TOWER_ITEM_BLACK_BELT, + .teamFlags = 0x09, + .moves = { + MOVE_KARATE_CHOP, + MOVE_SEISMIC_TOSS, + MOVE_BRICK_BREAK, + MOVE_LOW_KICK + }, + .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_GENTLE, + }, + { + .species = SPECIES_SWALOT, + .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .teamFlags = 0x86, + .moves = { + MOVE_YAWN, + MOVE_WATER_PULSE, + MOVE_SHADOW_BALL, + MOVE_SLUDGE_BOMB + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_NAUGHTY, + }, + { + .species = SPECIES_SCEPTILE, + .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .teamFlags = 0x0C, + .moves = { + MOVE_LEAF_BLADE, + MOVE_GIGA_DRAIN, + MOVE_FURY_CUTTER, + MOVE_DETECT + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, + .nature = NATURE_NAIVE, + }, + { + .species = SPECIES_BLAZIKEN, + .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .teamFlags = 0x0C, + .moves = { + MOVE_BLAZE_KICK, + MOVE_FLAMETHROWER, + MOVE_PROTECT, + MOVE_QUICK_ATTACK + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_DOCILE, + }, + { + .species = SPECIES_SWAMPERT, + .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .teamFlags = 0x4C, + .moves = { + MOVE_SURF, + MOVE_MUD_SHOT, + MOVE_MUD_SLAP, + MOVE_DOUBLE_TEAM + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_MIGHTYENA, + .item = BATTLE_TOWER_ITEM_BLACK_GLASSES, + .teamFlags = 0x04, + .moves = { + MOVE_CRUNCH, + MOVE_HOWL, + MOVE_SWAGGER, + MOVE_SHADOW_BALL + }, + .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_CALM, + }, + { + .species = SPECIES_LINOONE, + .item = BATTLE_TOWER_ITEM_CHESTO_BERRY, + .teamFlags = 0x04, + .moves = { + MOVE_SLASH, + MOVE_REST, + MOVE_BELLY_DRUM, + MOVE_THUNDERBOLT + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_MILD, + }, + { + .species = SPECIES_BEAUTIFLY, + .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .teamFlags = 0x08, + .moves = { + MOVE_GIGA_DRAIN, + MOVE_ATTRACT, + MOVE_MORNING_SUN, + MOVE_STUN_SPORE + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_HASTY, + }, + { + .species = SPECIES_DUSTOX, + .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .teamFlags = 0x08, + .moves = { + MOVE_PSYCHIC, + MOVE_SILVER_WIND, + MOVE_MOONLIGHT, + MOVE_TOXIC + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_CAREFUL, + }, + { + .species = SPECIES_LUDICOLO, + .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .teamFlags = 0x0C, + .moves = { + MOVE_FAKE_OUT, + MOVE_HYDRO_PUMP, + MOVE_ICE_BEAM, + MOVE_UPROAR + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_SHIFTRY, + .item = BATTLE_TOWER_ITEM_PERSIM_BERRY, + .teamFlags = 0x0C, + .moves = { + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_TORMENT, + MOVE_SWAGGER + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_RELAXED, + }, + { + .species = SPECIES_SWELLOW, + .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .teamFlags = 0x88, + .moves = { + MOVE_FLY, + MOVE_ENDEAVOR, + MOVE_AERIAL_ACE, + MOVE_TOXIC + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_GARDEVOIR, + .item = BATTLE_TOWER_ITEM_BLACK_GLASSES, + .teamFlags = 0x4A, + .moves = { + MOVE_HYPNOSIS, + MOVE_DREAM_EATER, + MOVE_PSYCHIC, + MOVE_DOUBLE_TEAM + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED, + .nature = NATURE_CAREFUL, + }, + { + .species = SPECIES_BRELOOM, + .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .teamFlags = 0x0C, + .moves = { + MOVE_DYNAMIC_PUNCH, + MOVE_MIND_READER, + MOVE_SNATCH, + MOVE_MEGA_DRAIN + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_ADAMANT, + }, + { + .species = SPECIES_VIGOROTH, + .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .teamFlags = 0x04, + .moves = { + MOVE_SLASH, + MOVE_UPROAR, + MOVE_ENCORE, + MOVE_FACADE + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_CALM, + }, + { + .species = SPECIES_NINJASK, + .item = BATTLE_TOWER_ITEM_SILVER_POWDER, + .teamFlags = 0x04, + .moves = { + MOVE_FURY_CUTTER, + MOVE_GIGA_DRAIN, + MOVE_SWORDS_DANCE, + MOVE_DOUBLE_TEAM + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_SASSY, + }, + { + .species = SPECIES_SHEDINJA, + .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .teamFlags = 0xCA, + .moves = { + MOVE_CONFUSE_RAY, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_GRUDGE + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE, + .nature = NATURE_JOLLY, + }, + { + .species = SPECIES_LOUDRED, + .item = BATTLE_TOWER_ITEM_PECHA_BERRY, + .teamFlags = 0x04, + .moves = { + MOVE_HYPER_VOICE, + MOVE_HOWL, + MOVE_SHADOW_BALL, + MOVE_TORMENT + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_HARIYAMA, + .item = BATTLE_TOWER_ITEM_KINGS_ROCK, + .teamFlags = 0x04, + .moves = { + MOVE_ARM_THRUST, + MOVE_BULK_UP, + MOVE_BRICK_BREAK, + MOVE_HIDDEN_POWER + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK, + .nature = NATURE_BASHFUL, + }, + { + .species = SPECIES_ALAKAZAM, + .item = BATTLE_TOWER_ITEM_TWISTED_SPOON, + .teamFlags = 0x88, + .moves = { + MOVE_PSYCHIC, + MOVE_SHADOW_BALL, + MOVE_FUTURE_SIGHT, + MOVE_DISABLE + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_CROBAT, + .item = BATTLE_TOWER_ITEM_CHERI_BERRY, + .teamFlags = 0x88, + .moves = { + MOVE_CONFUSE_RAY, + MOVE_TOXIC, + MOVE_MEAN_LOOK, + MOVE_SNATCH + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_MAWILE, + .item = BATTLE_TOWER_ITEM_METAL_COAT, + .teamFlags = 0x04, + .moves = { + MOVE_CRUNCH, + MOVE_IRON_DEFENSE, + MOVE_FAKE_TEARS, + MOVE_POISON_FANG + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK, + .nature = NATURE_NAIVE, + }, + { + .species = SPECIES_AGGRON, + .item = BATTLE_TOWER_ITEM_METAL_COAT, + .teamFlags = 0x45, + .moves = { + MOVE_METAL_CLAW, + MOVE_FLAMETHROWER, + MOVE_METAL_SOUND, + MOVE_ICE_BEAM + }, + .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_GOLEM, + .item = BATTLE_TOWER_ITEM_SOFT_SAND, + .teamFlags = 0xC5, + .moves = { + MOVE_ROLLOUT, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_TEAM, + MOVE_SELF_DESTRUCT + }, + .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_MANECTRIC, + .item = BATTLE_TOWER_ITEM_MAGNET, + .teamFlags = 0x04, + .moves = { + MOVE_THUNDER, + MOVE_RAIN_DANCE, + MOVE_THUNDER_WAVE, + MOVE_CHARGE + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, + .nature = NATURE_CAREFUL, + }, + { + .species = SPECIES_VOLBEAT, + .item = BATTLE_TOWER_ITEM_SILVER_POWDER, + .teamFlags = 0x08, + .moves = { + MOVE_CONFUSE_RAY, + MOVE_SIGNAL_BEAM, + MOVE_MOONLIGHT, + MOVE_TAIL_GLOW + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, + .nature = NATURE_DOCILE, + }, + { + .species = SPECIES_ILLUMISE, + .item = BATTLE_TOWER_ITEM_SILVER_POWDER, + .teamFlags = 0x08, + .moves = { + MOVE_THUNDERBOLT, + MOVE_FLATTER, + MOVE_WISH, + MOVE_ENCORE + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_MASQUERAIN, + .item = BATTLE_TOWER_ITEM_PERSIM_BERRY, + .teamFlags = 0x88, + .moves = { + MOVE_GIGA_DRAIN, + MOVE_SILVER_WIND, + MOVE_STUN_SPORE, + MOVE_TOXIC + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK, + .nature = NATURE_NAIVE, + }, + { + .species = SPECIES_ROSELIA, + .item = BATTLE_TOWER_ITEM_MIRACLE_SEED, + .teamFlags = 0x08, + .moves = { + MOVE_PETAL_DANCE, + MOVE_GROWTH, + MOVE_SYNTHESIS, + MOVE_GRASS_WHISTLE + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_IMPISH, + }, + { + .species = SPECIES_DELCATTY, + .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .teamFlags = 0x08, + .moves = { + MOVE_SING, + MOVE_ATTRACT, + MOVE_DOUBLE_SLAP, + MOVE_HEAL_BELL + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_TIMID, + }, + { + .species = SPECIES_SEAKING, + .item = BATTLE_TOWER_ITEM_MYSTIC_WATER, + .teamFlags = 0x88, + .moves = { + MOVE_RAIN_DANCE, + MOVE_SURF, + MOVE_ATTRACT, + MOVE_ICE_BEAM + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK, + .nature = NATURE_BRAVE, + }, + { + .species = SPECIES_GYARADOS, + .item = BATTLE_TOWER_ITEM_DRAGON_FANG, + .teamFlags = 0x8C, + .moves = { + MOVE_HYDRO_PUMP, + MOVE_EARTHQUAKE, + MOVE_DRAGON_RAGE, + MOVE_PROTECT + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_CALM, + }, + { + .species = SPECIES_SWALOT, + .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .teamFlags = 0x42, + .moves = { + MOVE_STOCKPILE, + MOVE_SWALLOW, + MOVE_SPIT_UP, + MOVE_YAWN + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_NAUGHTY, + }, + { + .species = SPECIES_MAGCARGO, + .item = BATTLE_TOWER_ITEM_ASPEAR_BERRY, + .teamFlags = 0x41, + .moves = { + MOVE_ROCK_SLIDE, + MOVE_FIRE_BLAST, + MOVE_BODY_SLAM, + MOVE_LIGHT_SCREEN + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_LONELY, + }, + { + .species = SPECIES_MUK, + .item = BATTLE_TOWER_ITEM_POISON_BARB, + .teamFlags = 0xC3, + .moves = { + MOVE_SLUDGE_BOMB, + MOVE_FLAMETHROWER, + MOVE_ACID_ARMOR, + MOVE_DISABLE + }, + .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_NAIVE, + }, + { + .species = SPECIES_SPINDA, + .item = BATTLE_TOWER_ITEM_SILK_SCARF, + .teamFlags = 0x42, + .moves = { + MOVE_DIZZY_PUNCH, + MOVE_TEETER_DANCE, + MOVE_PSYCH_UP, + MOVE_FACADE + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_MODEST, + }, + { + .species = SPECIES_ALTARIA, + .item = BATTLE_TOWER_ITEM_DRAGON_FANG, + .teamFlags = 0x03, + .moves = { + MOVE_DRAGON_CLAW, + MOVE_DRAGON_BREATH, + MOVE_DRAGON_DANCE, + MOVE_REFRESH + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_RASH, + }, + { + .species = SPECIES_ZANGOOSE, + .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .teamFlags = 0x03, + .moves = { + MOVE_CRUSH_CLAW, + MOVE_TAUNT, + MOVE_SWORDS_DANCE, + MOVE_DETECT + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_QUIRKY, + }, + { + .species = SPECIES_SEVIPER, + .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .teamFlags = 0x41, + .moves = { + MOVE_SWAGGER, + MOVE_TAUNT, + MOVE_GLARE, + MOVE_POISON_TAIL + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_CAREFUL, + }, + { + .species = SPECIES_GRUMPIG, + .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .teamFlags = 0x42, + .moves = { + MOVE_TOXIC, + MOVE_BOUNCE, + MOVE_CONFUSE_RAY, + MOVE_ATTRACT + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, + .nature = NATURE_BRAVE, + }, + { + .species = SPECIES_CACTURNE, + .item = BATTLE_TOWER_ITEM_MIRACLE_SEED, + .teamFlags = 0x41, + .moves = { + MOVE_NEEDLE_ARM, + MOVE_INGRAIN, + MOVE_SPIKES, + MOVE_COTTON_SPORE + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_SASSY, + }, + { + .species = SPECIES_CLAYDOL, + .item = BATTLE_TOWER_ITEM_CHESTO_BERRY, + .teamFlags = 0x03, + .moves = { + MOVE_EARTHQUAKE, + MOVE_SANDSTORM, + MOVE_COSMIC_POWER, + MOVE_EXPLOSION + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_LAX, + }, + { + .species = SPECIES_TENTACRUEL, + .item = BATTLE_TOWER_ITEM_MENTAL_HERB, + .teamFlags = 0xC1, + .moves = { + MOVE_SLUDGE_BOMB, + MOVE_HYDRO_PUMP, + MOVE_BARRIER, + MOVE_SUPERSONIC + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_WIGGLYTUFF, + .item = BATTLE_TOWER_ITEM_RAWST_BERRY, + .teamFlags = 0xC3, + .moves = { + MOVE_SING, + MOVE_FOCUS_PUNCH, + MOVE_DISABLE, + MOVE_FACADE + }, + .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_ADAMANT, + }, + { + .species = SPECIES_AZUMARILL, + .item = BATTLE_TOWER_ITEM_CHERI_BERRY, + .teamFlags = 0xC2, + .moves = { + MOVE_SURF, + MOVE_ATTRACT, + MOVE_DEFENSE_CURL, + MOVE_ROLLOUT + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_RASH, + }, + { + .species = SPECIES_ELECTRODE, + .item = BATTLE_TOWER_ITEM_CHERI_BERRY, + .teamFlags = 0xC3, + .moves = { + MOVE_THUNDERBOLT, + MOVE_MIRROR_COAT, + MOVE_LIGHT_SCREEN, + MOVE_SELF_DESTRUCT + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_MILOTIC, + .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .teamFlags = 0x42, + .moves = { + MOVE_HYDRO_PUMP, + MOVE_ATTRACT, + MOVE_RECOVER, + MOVE_REFRESH + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_JOLLY, + }, + { + .species = SPECIES_KECLEON, + .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .teamFlags = 0x43, + .moves = { + MOVE_SKILL_SWAP, + MOVE_ANCIENT_POWER, + MOVE_WATER_PULSE, + MOVE_THUNDERBOLT + }, + .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_NAUGHTY, + }, + { + .species = SPECIES_DUSCLOPS, + .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .teamFlags = 0x43, + .moves = { + MOVE_CONFUSE_RAY, + MOVE_CURSE, + MOVE_REST, + MOVE_MEAN_LOOK + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_BASHFUL, + }, + { + .species = SPECIES_ABSOL, + .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .teamFlags = 0x41, + .moves = { + MOVE_SLASH, + MOVE_SWORDS_DANCE, + MOVE_DOUBLE_TEAM, + MOVE_SNATCH + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_DOCILE, + }, + { + .species = SPECIES_NINETALES, + .item = BATTLE_TOWER_ITEM_APICOT_BERRY, + .teamFlags = 0xC2, + .moves = { + MOVE_FLAMETHROWER, + MOVE_CONFUSE_RAY, + MOVE_DOUBLE_TEAM, + MOVE_WILL_O_WISP + }, + .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_TIMID, + }, + { + .species = SPECIES_PIKACHU, + .item = BATTLE_TOWER_ITEM_LIGHT_BALL, + .teamFlags = 0xC2, + .moves = { + MOVE_THUNDER_WAVE, + MOVE_THUNDER, + MOVE_RAIN_DANCE, + MOVE_ATTRACT + }, + .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_HASTY, + }, + { + .species = SPECIES_VILEPLUME, + .item = BATTLE_TOWER_ITEM_ASPEAR_BERRY, + .teamFlags = 0xC3, + .moves = { + MOVE_GIGA_DRAIN, + MOVE_SLEEP_POWDER, + MOVE_MOONLIGHT, + MOVE_SLUDGE_BOMB + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_DONPHAN, + .item = BATTLE_TOWER_ITEM_PERSIM_BERRY, + .teamFlags = 0x41, + .moves = { + MOVE_EARTHQUAKE, + MOVE_DOUBLE_EDGE, + MOVE_IRON_TAIL, + MOVE_FISSURE + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_QUIRKY, + }, + { + .species = SPECIES_STARMIE, + .item = BATTLE_TOWER_ITEM_CHERI_BERRY, + .teamFlags = 0xC3, + .moves = { + MOVE_CONFUSE_RAY, + MOVE_ICE_BEAM, + MOVE_RECOVER, + MOVE_DOUBLE_TEAM + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE, + .nature = NATURE_HASTY, + }, + { + .species = SPECIES_WALREIN, + .item = BATTLE_TOWER_ITEM_NEVER_MELT_ICE, + .teamFlags = 0x43, + .moves = { + MOVE_ICE_BEAM, + MOVE_BODY_SLAM, + MOVE_ENCORE, + MOVE_HAIL + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_LAX, + }, + { + .species = SPECIES_RELICANTH, + .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .teamFlags = 0x41, + .moves = { + MOVE_YAWN, + MOVE_MUD_SPORT, + MOVE_DOUBLE_EDGE, + MOVE_SANDSTORM + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_LONELY, + }, + { + .species = SPECIES_KINGDRA, + .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .teamFlags = 0x43, + .moves = { + MOVE_RAIN_DANCE, + MOVE_ICE_BEAM, + MOVE_HYDRO_PUMP, + MOVE_AGILITY + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_CRADILY, + .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .teamFlags = 0x43, + .moves = { + MOVE_CONFUSE_RAY, + MOVE_INGRAIN, + MOVE_ANCIENT_POWER, + MOVE_GIGA_DRAIN + }, + .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_MILD, + }, + { + .species = SPECIES_ARMALDO, + .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .teamFlags = 0x43, + .moves = { + MOVE_SLASH, + MOVE_ROCK_SLIDE, + MOVE_EARTHQUAKE, + MOVE_WATER_PULSE + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_NAIVE, + }, + { + .species = SPECIES_METAGROSS, + .item = BATTLE_TOWER_ITEM_METAL_COAT, + .teamFlags = 0x41, + .moves = { + MOVE_METAL_CLAW, + MOVE_PSYCHIC, + MOVE_LIGHT_SCREEN, + MOVE_AGILITY + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_GENTLE, + }, + { + .species = SPECIES_SALAMENCE, + .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .teamFlags = 0x42, + .moves = { + MOVE_DRAGON_BREATH, + MOVE_CRUNCH, + MOVE_FLAMETHROWER, + MOVE_AERIAL_ACE + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE, + .nature = NATURE_HASTY, + }, + { + .species = SPECIES_MIGHTYENA, + .item = BATTLE_TOWER_ITEM_LIECHI_BERRY, + .teamFlags = 0x01, + .moves = { + MOVE_CRUNCH, + MOVE_YAWN, + MOVE_FACADE, + MOVE_HOWL + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_GENTLE, + }, + { + .species = SPECIES_LINOONE, + .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .teamFlags = 0x02, + .moves = { + MOVE_HYPER_BEAM, + MOVE_FACADE, + MOVE_ATTRACT, + MOVE_TRICK + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_LUDICOLO, + .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .teamFlags = 0x03, + .moves = { + MOVE_SURF, + MOVE_FOCUS_PUNCH, + MOVE_FAKE_OUT, + MOVE_SYNTHESIS + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_TIMID, + }, + { + .species = SPECIES_EXPLOUD, + .item = BATTLE_TOWER_ITEM_LIECHI_BERRY, + .teamFlags = 0x01, + .moves = { + MOVE_UPROAR, + MOVE_EARTHQUAKE, + MOVE_ICE_BEAM, + MOVE_FLAMETHROWER + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK, + .nature = NATURE_DOCILE, + }, + { + .species = SPECIES_SWELLOW, + .item = BATTLE_TOWER_ITEM_LANSAT_BERRY, + .teamFlags = 0x02, + .moves = { + MOVE_FACADE, + MOVE_SUPERSONIC, + MOVE_WING_ATTACK, + MOVE_ENDEAVOR + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_NAIVE, + }, + { + .species = SPECIES_PELIPPER, + .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .teamFlags = 0x82, + .moves = { + MOVE_STOCKPILE, + MOVE_SWALLOW, + MOVE_SPIT_UP, + MOVE_ATTRACT + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_BRELOOM, + .item = BATTLE_TOWER_ITEM_FOCUS_BAND, + .teamFlags = 0x01, + .moves = { + MOVE_DYNAMIC_PUNCH, + MOVE_COUNTER, + MOVE_BULK_UP, + MOVE_MIND_READER + }, + .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_SHEDINJA, + .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .teamFlags = 0x01, + .moves = { + MOVE_RETURN, + MOVE_DOUBLE_TEAM, + MOVE_TOXIC, + MOVE_SHADOW_BALL + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_EXPLOUD, + .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .teamFlags = 0x01, + .moves = { + MOVE_HYPER_BEAM, + MOVE_SUPERSONIC, + MOVE_FLAMETHROWER, + MOVE_ICE_BEAM + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK, + .nature = NATURE_GENTLE, + }, + { + .species = SPECIES_HARIYAMA, + .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .teamFlags = 0x01, + .moves = { + MOVE_CROSS_CHOP, + MOVE_COUNTER, + MOVE_FACADE, + MOVE_FAKE_OUT + }, + .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_GENTLE, + }, + { + .species = SPECIES_ALAKAZAM, + .item = BATTLE_TOWER_ITEM_PETAYA_BERRY, + .teamFlags = 0x83, + .moves = { + MOVE_PSYCHIC, + MOVE_ENCORE, + MOVE_DISABLE, + MOVE_RECOVER + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_CROBAT, + .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .teamFlags = 0x81, + .moves = { + MOVE_CONFUSE_RAY, + MOVE_AIR_CUTTER, + MOVE_TORMENT, + MOVE_DOUBLE_TEAM + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_SABLEYE, + .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .teamFlags = 0x83, + .moves = { + MOVE_TOXIC, + MOVE_DETECT, + MOVE_RECOVER, + MOVE_TORMENT + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_RELAXED, + }, + { + .species = SPECIES_MAWILE, + .item = BATTLE_TOWER_ITEM_CHESTO_BERRY, + .teamFlags = 0x02, + .moves = { + MOVE_CRUNCH, + MOVE_SWORDS_DANCE, + MOVE_IRON_DEFENSE, + MOVE_REST + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK, + .nature = NATURE_GENTLE, + }, + { + .species = SPECIES_AGGRON, + .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .teamFlags = 0x01, + .moves = { + MOVE_DOUBLE_EDGE, + MOVE_IRON_DEFENSE, + MOVE_ROAR, + MOVE_EARTHQUAKE + }, + .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_GENTLE, + }, + { + .species = SPECIES_GOLEM, + .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .teamFlags = 0x01, + .moves = { + MOVE_EARTHQUAKE, + MOVE_ROCK_SLIDE, + MOVE_FLAMETHROWER, + MOVE_FACADE + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_GENTLE, + }, + { + .species = SPECIES_NOSEPASS, + .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .teamFlags = 0x81, + .moves = { + MOVE_THUNDER_WAVE, + MOVE_ROCK_SLIDE, + MOVE_TORMENT, + MOVE_ATTRACT + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_NAIVE, + }, + { + .species = SPECIES_MANECTRIC, + .item = BATTLE_TOWER_ITEM_PETAYA_BERRY, + .teamFlags = 0x02, + .moves = { + MOVE_THUNDER, + MOVE_CRUNCH, + MOVE_THUNDER_WAVE, + MOVE_QUICK_ATTACK + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_JOLLY, + }, + { + .species = SPECIES_ROSELIA, + .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .teamFlags = 0x82, + .moves = { + MOVE_GRASS_WHISTLE, + MOVE_LEECH_SEED, + MOVE_GIGA_DRAIN, + MOVE_GROWTH + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_DELCATTY, + .item = BATTLE_TOWER_ITEM_STARF_BERRY, + .teamFlags = 0x02, + .moves = { + MOVE_ASSIST, + MOVE_SING, + MOVE_ATTRACT, + MOVE_SUBSTITUTE + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_DOCILE, + }, + { + .species = SPECIES_TROPIUS, + .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .teamFlags = 0xC2, + .moves = { + MOVE_RAZOR_LEAF, + MOVE_EARTHQUAKE, + MOVE_ATTRACT, + MOVE_SYNTHESIS + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK, + .nature = NATURE_JOLLY, + }, + { + .species = SPECIES_SWALOT, + .item = BATTLE_TOWER_ITEM_LIECHI_BERRY, + .teamFlags = 0x03, + .moves = { + MOVE_YAWN, + MOVE_SLUDGE_BOMB, + MOVE_ATTRACT, + MOVE_ICE_BEAM + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_GENTLE, + }, + { + .species = SPECIES_MACHAMP, + .item = BATTLE_TOWER_ITEM_BLACK_BELT, + .teamFlags = 0x01, + .moves = { + MOVE_CROSS_CHOP, + MOVE_BULK_UP, + MOVE_LOW_KICK, + MOVE_BRICK_BREAK + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_BASHFUL, + }, + { + .species = SPECIES_CAMERUPT, + .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .teamFlags = 0x40, + .moves = { + MOVE_ERUPTION, + MOVE_EARTHQUAKE, + MOVE_ROCK_SLIDE, + MOVE_OVERHEAT + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_NAIVE, + }, + { + .species = SPECIES_MAGCARGO, + .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .teamFlags = 0x03, + .moves = { + MOVE_FLAMETHROWER, + MOVE_ROCK_SLIDE, + MOVE_EARTHQUAKE, + MOVE_REFLECT + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_WEEZING, + .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .teamFlags = 0x81, + .moves = { + MOVE_WILL_O_WISP, + MOVE_HYPER_BEAM, + MOVE_THUNDERBOLT, + MOVE_DESTINY_BOND + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_LAX, + }, + { + .species = SPECIES_SPINDA, + .item = BATTLE_TOWER_ITEM_CHOICE_BAND, + .teamFlags = 0x82, + .moves = { + MOVE_TRICK, + MOVE_TEETER_DANCE, + MOVE_FOCUS_PUNCH, + MOVE_FACADE + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE, + .nature = NATURE_TIMID, + }, + { + .species = SPECIES_SKARMORY, + .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .teamFlags = 0x01, + .moves = { + MOVE_DRILL_PECK, + MOVE_STEEL_WING, + MOVE_TORMENT, + MOVE_PROTECT + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_ALTARIA, + .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .teamFlags = 0x02, + .moves = { + MOVE_SING, + MOVE_DRAGON_CLAW, + MOVE_ICE_BEAM, + MOVE_EARTHQUAKE + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_GRUMPIG, + .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .teamFlags = 0x82, + .moves = { + MOVE_PSYCHIC, + MOVE_CONFUSE_RAY, + MOVE_CALM_MIND, + MOVE_REST + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_SHIFTRY, + .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .teamFlags = 0x20, + .moves = { + MOVE_SWAGGER, + MOVE_FRUSTRATION, + MOVE_ATTRACT, + MOVE_EXPLOSION + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_CLAYDOL, + .item = BATTLE_TOWER_ITEM_LIECHI_BERRY, + .teamFlags = 0x20, + .moves = { + MOVE_COSMIC_POWER, + MOVE_PSYCHIC, + MOVE_EARTHQUAKE, + MOVE_EXPLOSION + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK, + .nature = NATURE_RELAXED, + }, + { + .species = SPECIES_HARIYAMA, + .item = BATTLE_TOWER_ITEM_CHESTO_BERRY, + .teamFlags = 0x33, + .moves = { + MOVE_EARTHQUAKE, + MOVE_COUNTER, + MOVE_BELLY_DRUM, + MOVE_REST + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_SASSY, + }, + { + .species = SPECIES_NOSEPASS, + .item = BATTLE_TOWER_ITEM_LIECHI_BERRY, + .teamFlags = 0x20, + .moves = { + MOVE_ROCK_SLIDE, + MOVE_THUNDER_WAVE, + MOVE_EARTHQUAKE, + MOVE_EXPLOSION + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_LAX, + }, + { + .species = SPECIES_DUSCLOPS, + .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .teamFlags = 0x33, + .moves = { + MOVE_SHADOW_PUNCH, + MOVE_WILL_O_WISP, + MOVE_CONFUSE_RAY, + MOVE_DESTINY_BOND + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, + .nature = NATURE_SASSY, + }, + { + .species = SPECIES_SEAKING, + .item = BATTLE_TOWER_ITEM_LEPPA_BERRY, + .teamFlags = 0x20, + .moves = { + MOVE_HORN_DRILL, + MOVE_AGILITY, + MOVE_SLEEP_TALK, + MOVE_REST + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_BRAVE, + }, + { + .species = SPECIES_CAMERUPT, + .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .teamFlags = 0x73, + .moves = { + MOVE_EARTHQUAKE, + MOVE_ERUPTION, + MOVE_ROCK_SLIDE, + MOVE_FISSURE + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_NAIVE, + }, + { + .species = SPECIES_LANTURN, + .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .teamFlags = 0x13, + .moves = { + MOVE_THUNDERBOLT, + MOVE_SURF, + MOVE_THUNDER_WAVE, + MOVE_CONFUSE_RAY + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_WEEZING, + .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .teamFlags = 0x33, + .moves = { + MOVE_SLUDGE_BOMB, + MOVE_THUNDERBOLT, + MOVE_FIRE_BLAST, + MOVE_EXPLOSION + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_WHISCASH, + .item = BATTLE_TOWER_ITEM_LEPPA_BERRY, + .teamFlags = 0x20, + .moves = { + MOVE_EARTHQUAKE, + MOVE_SURF, + MOVE_SPARK, + MOVE_FISSURE + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_RELAXED, + }, + { + .species = SPECIES_AGGRON, + .item = BATTLE_TOWER_ITEM_LIECHI_BERRY, + .teamFlags = 0x51, + .moves = { + MOVE_DOUBLE_EDGE, + MOVE_EARTHQUAKE, + MOVE_SURF, + MOVE_DRAGON_CLAW + }, + .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_GENTLE, + }, + { + .species = SPECIES_KECLEON, + .item = BATTLE_TOWER_ITEM_CHOICE_BAND, + .teamFlags = 0x12, + .moves = { + MOVE_TRICK, + MOVE_FOCUS_PUNCH, + MOVE_ATTRACT, + MOVE_SNATCH + }, + .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_MILD, + }, + { + .species = SPECIES_SHARPEDO, + .item = BATTLE_TOWER_ITEM_KINGS_ROCK, + .teamFlags = 0x11, + .moves = { + MOVE_CRUNCH, + MOVE_DOUBLE_EDGE, + MOVE_SURF, + MOVE_SWAGGER + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_ABSOL, + .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .teamFlags = 0x12, + .moves = { + MOVE_DOUBLE_EDGE, + MOVE_FACADE, + MOVE_SWORDS_DANCE, + MOVE_QUICK_ATTACK + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_WAILORD, + .item = BATTLE_TOWER_ITEM_LEPPA_BERRY, + .teamFlags = 0x72, + .moves = { + MOVE_HYDRO_PUMP, + MOVE_EARTHQUAKE, + MOVE_ATTRACT, + MOVE_FISSURE + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, + .nature = NATURE_TIMID, + }, + { + .species = SPECIES_TENTACRUEL, + .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .teamFlags = 0x20, + .moves = { + MOVE_HYDRO_PUMP, + MOVE_SLUDGE_BOMB, + MOVE_BARRIER, + MOVE_MIRROR_COAT + }, + .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK, + .nature = NATURE_JOLLY, + }, + { + .species = SPECIES_SABLEYE, + .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .teamFlags = 0x32, + .moves = { + MOVE_SHADOW_BALL, + MOVE_TOXIC, + MOVE_RECOVER, + MOVE_DOUBLE_TEAM + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_WOBBUFFET, + .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .teamFlags = 0x20, + .moves = { + MOVE_ENCORE, + MOVE_COUNTER, + MOVE_MIRROR_COAT, + MOVE_DESTINY_BOND + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_MILD, + }, + { + .species = SPECIES_RHYDON, + .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .teamFlags = 0x71, + .moves = { + MOVE_EARTHQUAKE, + MOVE_MEGAHORN, + MOVE_BRICK_BREAK, + MOVE_HORN_DRILL + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_GENTLE, + }, + { + .species = SPECIES_GLALIE, + .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .teamFlags = 0x31, + .moves = { + MOVE_CRUNCH, + MOVE_BLIZZARD, + MOVE_HAIL, + MOVE_SHEER_COLD + }, + .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_BASHFUL, + }, + { + .species = SPECIES_SCEPTILE, + .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .teamFlags = 0x8C, + .moves = { + MOVE_LEAF_BLADE, + MOVE_EARTHQUAKE, + MOVE_DRAGON_CLAW, + MOVE_CRUNCH + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_BLAZIKEN, + .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .teamFlags = 0x8C, + .moves = { + MOVE_BLAZE_KICK, + MOVE_COUNTER, + MOVE_ENDURE, + MOVE_REVERSAL + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, + .nature = NATURE_DOCILE, + }, + { + .species = SPECIES_SWAMPERT, + .item = BATTLE_TOWER_ITEM_SHELL_BELL, + .teamFlags = 0x8C, + .moves = { + MOVE_SURF, + MOVE_EARTHQUAKE, + MOVE_MIRROR_COAT, + MOVE_BLIZZARD + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_CAREFUL, + }, + { + .species = SPECIES_GARDEVOIR, + .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .teamFlags = 0x1A, + .moves = { + MOVE_PSYCHIC, + MOVE_THUNDERBOLT, + MOVE_DESTINY_BOND, + MOVE_SNATCH + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE, + .nature = NATURE_BRAVE, + }, + { + .species = SPECIES_BRELOOM, + .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .teamFlags = 0x15, + .moves = { + MOVE_SPORE, + MOVE_FOCUS_PUNCH, + MOVE_MACH_PUNCH, + MOVE_ATTRACT + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_ALAKAZAM, + .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .teamFlags = 0x58, + .moves = { + MOVE_PSYCHIC, + MOVE_FIRE_PUNCH, + MOVE_ICE_PUNCH, + MOVE_RECOVER + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED, + .nature = NATURE_HASTY, + }, + { + .species = SPECIES_HARIYAMA, + .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .teamFlags = 0x15, + .moves = { + MOVE_CROSS_CHOP, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FAKE_OUT + }, + .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_GENTLE, + }, + { + .species = SPECIES_GYARADOS, + .item = BATTLE_TOWER_ITEM_SHELL_BELL, + .teamFlags = 0x55, + .moves = { + MOVE_HYPER_BEAM, + MOVE_EARTHQUAKE, + MOVE_SURF, + MOVE_ICE_BEAM + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK, + .nature = NATURE_BOLD, + }, + { + .species = SPECIES_CROBAT, + .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .teamFlags = 0x58, + .moves = { + MOVE_SLUDGE_BOMB, + MOVE_CONFUSE_RAY, + MOVE_AIR_CUTTER, + MOVE_DOUBLE_TEAM + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_MACHAMP, + .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .teamFlags = 0x5D, + .moves = { + MOVE_CROSS_CHOP, + MOVE_FLAMETHROWER, + MOVE_EARTHQUAKE, + MOVE_ROCK_SLIDE + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_MANECTRIC, + .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .teamFlags = 0x1A, + .moves = { + MOVE_THUNDERBOLT, + MOVE_THUNDER_WAVE, + MOVE_ROAR, + MOVE_CRUNCH + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_ELECTRODE, + .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .teamFlags = 0x60, + .moves = { + MOVE_THUNDERBOLT, + MOVE_PROTECT, + MOVE_MIRROR_COAT, + MOVE_EXPLOSION + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK, + .nature = NATURE_BASHFUL, + }, + { + .species = SPECIES_MUK, + .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .teamFlags = 0x64, + .moves = { + MOVE_SLUDGE_BOMB, + MOVE_FLAMETHROWER, + MOVE_THUNDERBOLT, + MOVE_EXPLOSION + }, + .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_GENTLE, + }, + { + .species = SPECIES_FLYGON, + .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .teamFlags = 0x1C, + .moves = { + MOVE_DRAGON_CLAW, + MOVE_EARTHQUAKE, + MOVE_FLAMETHROWER, + MOVE_CRUNCH + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_TIMID, + }, + { + .species = SPECIES_STARMIE, + .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .teamFlags = 0x5C, + .moves = { + MOVE_SURF, + MOVE_THUNDERBOLT, + MOVE_RECOVER, + MOVE_CONFUSE_RAY + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_NINETALES, + .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .teamFlags = 0x4A, + .moves = { + MOVE_CONFUSE_RAY, + MOVE_TOXIC, + MOVE_FIRE_SPIN, + MOVE_HEAT_WAVE + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_RAICHU, + .item = BATTLE_TOWER_ITEM_FOCUS_BAND, + .teamFlags = 0x5A, + .moves = { + MOVE_THUNDERBOLT, + MOVE_THUNDER_WAVE, + MOVE_REVERSAL, + MOVE_IRON_TAIL + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE, + .nature = NATURE_TIMID, + }, + { + .species = SPECIES_GOLDUCK, + .item = BATTLE_TOWER_ITEM_LIECHI_BERRY, + .teamFlags = 0x55, + .moves = { + MOVE_SURF, + MOVE_CROSS_CHOP, + MOVE_ICE_BEAM, + MOVE_DIG + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK, + .nature = NATURE_JOLLY, + }, + { + .species = SPECIES_HERACROSS, + .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .teamFlags = 0x5D, + .moves = { + MOVE_MEGAHORN, + MOVE_EARTHQUAKE, + MOVE_ENDURE, + MOVE_REVERSAL + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_WALREIN, + .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .teamFlags = 0x26, + .moves = { + MOVE_SURF, + MOVE_ICE_BEAM, + MOVE_EARTHQUAKE, + MOVE_SHEER_COLD + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_CAREFUL, + }, + { + .species = SPECIES_KINGDRA, + .item = BATTLE_TOWER_ITEM_CHESTO_BERRY, + .teamFlags = 0x5B, + .moves = { + MOVE_SURF, + MOVE_ICE_BEAM, + MOVE_DRAGON_BREATH, + MOVE_REST + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_SALAMENCE, + .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .teamFlags = 0x0D, + .moves = { + MOVE_DRAGON_CLAW, + MOVE_EARTHQUAKE, + MOVE_CRUNCH, + MOVE_FIRE_BLAST + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED, + .nature = NATURE_NAUGHTY, + }, + { + .species = SPECIES_METAGROSS, + .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .teamFlags = 0x3D, + .moves = { + MOVE_METEOR_MASH, + MOVE_PSYCHIC, + MOVE_EARTHQUAKE, + MOVE_ROCK_TOMB + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_REGIROCK, + .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .teamFlags = 0x3C, + .moves = { + MOVE_EARTHQUAKE, + MOVE_ANCIENT_POWER, + MOVE_THUNDERBOLT, + MOVE_EXPLOSION + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_GENTLE, + }, + { + .species = SPECIES_REGICE, + .item = BATTLE_TOWER_ITEM_LAX_INCENSE, + .teamFlags = 0x3C, + .moves = { + MOVE_ICE_BEAM, + MOVE_THUNDERBOLT, + MOVE_EARTHQUAKE, + MOVE_EXPLOSION + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_CAREFUL, + }, + { + .species = SPECIES_REGISTEEL, + .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .teamFlags = 0x3C, + .moves = { + MOVE_METAL_CLAW, + MOVE_EARTHQUAKE, + MOVE_THUNDERBOLT, + MOVE_EXPLOSION + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_GENTLE, + }, + { + .species = SPECIES_LATIAS, + .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .teamFlags = 0x0E, + .moves = { + MOVE_MIST_BALL, + MOVE_THUNDERBOLT, + MOVE_RECOVER, + MOVE_DRAGON_CLAW + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_LATIOS, + .item = BATTLE_TOWER_ITEM_PETAYA_BERRY, + .teamFlags = 0x0D, + .moves = { + MOVE_LUSTER_PURGE, + MOVE_THUNDERBOLT, + MOVE_RECOVER, + MOVE_DRAGON_CLAW + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_MILOTIC, + .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .teamFlags = 0x1A, + .moves = { + MOVE_SURF, + MOVE_TOXIC, + MOVE_RECOVER, + MOVE_MIRROR_COAT + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, + .nature = NATURE_BRAVE, + }, + { + .species = SPECIES_SLAKING, + .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .teamFlags = 0x15, + .moves = { + MOVE_YAWN, + MOVE_FOCUS_PUNCH, + MOVE_COUNTER, + MOVE_SLACK_OFF + }, + .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_DOCILE, + }, + { + .species = SPECIES_SCEPTILE, + .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .teamFlags = 0x8C, + .moves = { + MOVE_GIGA_DRAIN, + MOVE_DOUBLE_TEAM, + MOVE_LEECH_SEED, + MOVE_ATTRACT + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_BLAZIKEN, + .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .teamFlags = 0x8C, + .moves = { + MOVE_BLAZE_KICK, + MOVE_EARTHQUAKE, + MOVE_ROCK_SLIDE, + MOVE_QUICK_ATTACK + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_DOCILE, + }, + { + .species = SPECIES_SWAMPERT, + .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .teamFlags = 0x8C, + .moves = { + MOVE_MUDDY_WATER, + MOVE_MUD_SHOT, + MOVE_MIRROR_COAT, + MOVE_ICE_BEAM + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK, + .nature = NATURE_CAREFUL, + }, + { + .species = SPECIES_GARDEVOIR, + .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .teamFlags = 0x0A, + .moves = { + MOVE_PSYCHIC, + MOVE_THUNDERBOLT, + MOVE_HYPNOSIS, + MOVE_DREAM_EATER + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_RELAXED, + }, + { + .species = SPECIES_BRELOOM, + .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .teamFlags = 0x05, + .moves = { + MOVE_SPORE, + MOVE_COUNTER, + MOVE_SKY_UPPERCUT, + MOVE_GIGA_DRAIN + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_DOCILE, + }, + { + .species = SPECIES_ALAKAZAM, + .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .teamFlags = 0x58, + .moves = { + MOVE_PSYCHIC, + MOVE_THUNDER_PUNCH, + MOVE_FIRE_PUNCH, + MOVE_RECOVER + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE, + .nature = NATURE_HASTY, + }, + { + .species = SPECIES_HARIYAMA, + .item = BATTLE_TOWER_ITEM_FOCUS_BAND, + .teamFlags = 0x04, + .moves = { + MOVE_CROSS_CHOP, + MOVE_COUNTER, + MOVE_ENDURE, + MOVE_REVERSAL + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_GENTLE, + }, + { + .species = SPECIES_GYARADOS, + .item = BATTLE_TOWER_ITEM_SHELL_BELL, + .teamFlags = 0x44, + .moves = { + MOVE_HYPER_BEAM, + MOVE_THUNDERBOLT, + MOVE_EARTHQUAKE, + MOVE_ICE_BEAM + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK, + .nature = NATURE_BOLD, + }, + { + .species = SPECIES_CROBAT, + .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .teamFlags = 0x48, + .moves = { + MOVE_TOXIC, + MOVE_CONFUSE_RAY, + MOVE_ATTRACT, + MOVE_FLY + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_MACHAMP, + .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .teamFlags = 0x5D, + .moves = { + MOVE_CROSS_CHOP, + MOVE_COUNTER, + MOVE_EARTHQUAKE, + MOVE_FACADE + }, + .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_MANECTRIC, + .item = BATTLE_TOWER_ITEM_PETAYA_BERRY, + .teamFlags = 0x0A, + .moves = { + MOVE_THUNDER, + MOVE_THUNDER_WAVE, + MOVE_QUICK_ATTACK, + MOVE_CRUNCH + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_ELECTRODE, + .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .teamFlags = 0x60, + .moves = { + MOVE_THUNDERBOLT, + MOVE_LIGHT_SCREEN, + MOVE_MIRROR_COAT, + MOVE_EXPLOSION + }, + .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_BASHFUL, + }, + { + .species = SPECIES_MUK, + .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .teamFlags = 0x64, + .moves = { + MOVE_SLUDGE_BOMB, + MOVE_GIGA_DRAIN, + MOVE_FLAMETHROWER, + MOVE_EXPLOSION + }, + .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_GENTLE, + }, + { + .species = SPECIES_FLYGON, + .item = BATTLE_TOWER_ITEM_SHELL_BELL, + .teamFlags = 0x1C, + .moves = { + MOVE_DRAGON_CLAW, + MOVE_EARTHQUAKE, + MOVE_IRON_TAIL, + MOVE_CRUNCH + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_TIMID, + }, + { + .species = SPECIES_STARMIE, + .item = BATTLE_TOWER_ITEM_APICOT_BERRY, + .teamFlags = 0x5C, + .moves = { + MOVE_BLIZZARD, + MOVE_THUNDERBOLT, + MOVE_PSYCHIC, + MOVE_RECOVER + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_DODRIO, + .item = BATTLE_TOWER_ITEM_LIECHI_BERRY, + .teamFlags = 0x5A, + .moves = { + MOVE_DRILL_PECK, + MOVE_TRI_ATTACK, + MOVE_AGILITY, + MOVE_FACADE + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_RAICHU, + .item = BATTLE_TOWER_ITEM_PETAYA_BERRY, + .teamFlags = 0x4A, + .moves = { + MOVE_THUNDERBOLT, + MOVE_THUNDER_WAVE, + MOVE_ATTRACT, + MOVE_FOCUS_PUNCH + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE, + .nature = NATURE_TIMID, + }, + { + .species = SPECIES_GOLDUCK, + .item = BATTLE_TOWER_ITEM_PETAYA_BERRY, + .teamFlags = 0x45, + .moves = { + MOVE_HYDRO_PUMP, + MOVE_CROSS_CHOP, + MOVE_BLIZZARD, + MOVE_ATTRACT + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_HERACROSS, + .item = BATTLE_TOWER_ITEM_LIECHI_BERRY, + .teamFlags = 0x5D, + .moves = { + MOVE_MEGAHORN, + MOVE_EARTHQUAKE, + MOVE_COUNTER, + MOVE_REVERSAL + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_WALREIN, + .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .teamFlags = 0x26, + .moves = { + MOVE_SURF, + MOVE_BLIZZARD, + MOVE_ROCK_SLIDE, + MOVE_SHEER_COLD + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_CAREFUL, + }, + { + .species = SPECIES_KINGDRA, + .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .teamFlags = 0x5C, + .moves = { + MOVE_HYDRO_PUMP, + MOVE_ICE_BEAM, + MOVE_DRAGON_BREATH, + MOVE_ATTRACT + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_SALAMENCE, + .item = BATTLE_TOWER_ITEM_KINGS_ROCK, + .teamFlags = 0x1D, + .moves = { + MOVE_DRAGON_CLAW, + MOVE_EARTHQUAKE, + MOVE_CRUNCH, + MOVE_ROCK_TOMB + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_RELAXED, + }, + { + .species = SPECIES_METAGROSS, + .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .teamFlags = 0x3D, + .moves = { + MOVE_METEOR_MASH, + MOVE_PSYCHIC, + MOVE_EARTHQUAKE, + MOVE_SHADOW_BALL + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_REGIROCK, + .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .teamFlags = 0x3C, + .moves = { + MOVE_EARTHQUAKE, + MOVE_THUNDERBOLT, + MOVE_FOCUS_PUNCH, + MOVE_EXPLOSION + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_GENTLE, + }, + { + .species = SPECIES_REGICE, + .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .teamFlags = 0x3C, + .moves = { + MOVE_ICE_BEAM, + MOVE_THUNDERBOLT, + MOVE_HAIL, + MOVE_EXPLOSION + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE, + .nature = NATURE_CAREFUL, + }, + { + .species = SPECIES_REGISTEEL, + .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .teamFlags = 0x3C, + .moves = { + MOVE_METAL_CLAW, + MOVE_EARTHQUAKE, + MOVE_ANCIENT_POWER, + MOVE_EXPLOSION + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK, + .nature = NATURE_GENTLE, + }, + { + .species = SPECIES_LATIAS, + .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .teamFlags = 0x1E, + .moves = { + MOVE_MIST_BALL, + MOVE_ICE_BEAM, + MOVE_RECOVER, + MOVE_DRAGON_CLAW + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_LATIOS, + .item = BATTLE_TOWER_ITEM_LAX_INCENSE, + .teamFlags = 0x1D, + .moves = { + MOVE_LUSTER_PURGE, + MOVE_ICE_BEAM, + MOVE_RECOVER, + MOVE_DRAGON_CLAW + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_MILOTIC, + .item = BATTLE_TOWER_ITEM_PETAYA_BERRY, + .teamFlags = 0x1A, + .moves = { + MOVE_HYDRO_PUMP, + MOVE_ICE_BEAM, + MOVE_RECOVER, + MOVE_MIRROR_COAT + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_BRAVE, + }, + { + .species = SPECIES_SLAKING, + .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .teamFlags = 0x15, + .moves = { + MOVE_YAWN, + MOVE_FOCUS_PUNCH, + MOVE_COUNTER, + MOVE_PURSUIT + }, + .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_DOCILE, + }, + { + .species = SPECIES_SCEPTILE, + .item = BATTLE_TOWER_ITEM_PETAYA_BERRY, + .teamFlags = 0x8C, + .moves = { + MOVE_LEAF_BLADE, + MOVE_ROCK_TOMB, + MOVE_DRAGON_CLAW, + MOVE_CRUNCH + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_BLAZIKEN, + .item = BATTLE_TOWER_ITEM_GANLON_BERRY, + .teamFlags = 0x8C, + .moves = { + MOVE_FOCUS_PUNCH, + MOVE_COUNTER, + MOVE_SWAGGER, + MOVE_ROCK_TOMB + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_SWAMPERT, + .item = BATTLE_TOWER_ITEM_SHELL_BELL, + .teamFlags = 0x8C, + .moves = { + MOVE_SURF, + MOVE_ICE_BEAM, + MOVE_ATTRACT, + MOVE_REST + }, + .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_CAREFUL, + }, + { + .species = SPECIES_GARDEVOIR, + .item = BATTLE_TOWER_ITEM_LAX_INCENSE, + .teamFlags = 0x0A, + .moves = { + MOVE_PSYCHIC, + MOVE_THUNDERBOLT, + MOVE_ATTRACT, + MOVE_WILL_O_WISP + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_BRELOOM, + .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .teamFlags = 0x05, + .moves = { + MOVE_SPORE, + MOVE_FOCUS_PUNCH, + MOVE_MACH_PUNCH, + MOVE_COUNTER + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_ALAKAZAM, + .item = BATTLE_TOWER_ITEM_CHOICE_BAND, + .teamFlags = 0x58, + .moves = { + MOVE_PSYCHIC, + MOVE_TRICK, + MOVE_RECOVER, + MOVE_SNATCH + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_HASTY, + }, + { + .species = SPECIES_HARIYAMA, + .item = BATTLE_TOWER_ITEM_FOCUS_BAND, + .teamFlags = 0x05, + .moves = { + MOVE_REVENGE, + MOVE_COUNTER, + MOVE_FOCUS_PUNCH, + MOVE_REVERSAL + }, + .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_GENTLE, + }, + { + .species = SPECIES_LUDICOLO, + .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .teamFlags = 0x0A, + .moves = { + MOVE_RAIN_DANCE, + MOVE_LEECH_SEED, + MOVE_GIGA_DRAIN, + MOVE_DIVE + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_CROBAT, + .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .teamFlags = 0x48, + .moves = { + MOVE_SLUDGE_BOMB, + MOVE_CONFUSE_RAY, + MOVE_SHADOW_BALL, + MOVE_SNATCH + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_MACHAMP, + .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .teamFlags = 0x5D, + .moves = { + MOVE_CROSS_CHOP, + MOVE_FIRE_BLAST, + MOVE_LOW_KICK, + MOVE_ROCK_TOMB + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_MANECTRIC, + .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .teamFlags = 0x08, + .moves = { + MOVE_THUNDERBOLT, + MOVE_THUNDER_WAVE, + MOVE_ATTRACT, + MOVE_CRUNCH + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_ELECTRODE, + .item = BATTLE_TOWER_ITEM_LIECHI_BERRY, + .teamFlags = 0x60, + .moves = { + MOVE_THUNDER, + MOVE_SWIFT, + MOVE_MIRROR_COAT, + MOVE_EXPLOSION + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE, + .nature = NATURE_BASHFUL, + }, + { + .species = SPECIES_MUK, + .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .teamFlags = 0x64, + .moves = { + MOVE_SLUDGE_BOMB, + MOVE_FLAMETHROWER, + MOVE_THUNDERBOLT, + MOVE_SHADOW_PUNCH + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_GENTLE, + }, + { + .species = SPECIES_FLYGON, + .item = BATTLE_TOWER_ITEM_LAX_INCENSE, + .teamFlags = 0x0C, + .moves = { + MOVE_DRAGON_CLAW, + MOVE_EARTHQUAKE, + MOVE_FIRE_BLAST, + MOVE_SANDSTORM + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_TIMID, + }, + { + .species = SPECIES_STARMIE, + .item = BATTLE_TOWER_ITEM_PETAYA_BERRY, + .teamFlags = 0x4C, + .moves = { + MOVE_SURF, + MOVE_THUNDERBOLT, + MOVE_ICE_BEAM, + MOVE_PSYCHIC + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_LUDICOLO, + .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .teamFlags = 0x4A, + .moves = { + MOVE_LEECH_SEED, + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_PROTECT + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_SKARMORY, + .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .teamFlags = 0x4B, + .moves = { + MOVE_DRILL_PECK, + MOVE_STEEL_WING, + MOVE_ATTRACT, + MOVE_PURSUIT + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED, + .nature = NATURE_SASSY, + }, + { + .species = SPECIES_GOLDUCK, + .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .teamFlags = 0x49, + .moves = { + MOVE_SURF, + MOVE_PSYCHIC, + MOVE_ICE_BEAM, + MOVE_CROSS_CHOP + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_JOLLY, + }, + { + .species = SPECIES_HERACROSS, + .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .teamFlags = 0x5D, + .moves = { + MOVE_MEGAHORN, + MOVE_EARTHQUAKE, + MOVE_FOCUS_PUNCH, + MOVE_ROCK_TOMB + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_WALREIN, + .item = BATTLE_TOWER_ITEM_LEPPA_BERRY, + .teamFlags = 0x26, + .moves = { + MOVE_SURF, + MOVE_ICE_BEAM, + MOVE_FISSURE, + MOVE_SHEER_COLD + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_KINGDRA, + .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .teamFlags = 0x5C, + .moves = { + MOVE_SURF, + MOVE_BLIZZARD, + MOVE_HYPER_BEAM, + MOVE_FLAIL + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED, + .nature = NATURE_BRAVE, + }, + { + .species = SPECIES_SALAMENCE, + .item = BATTLE_TOWER_ITEM_PETAYA_BERRY, + .teamFlags = 0x1D, + .moves = { + MOVE_DRAGON_CLAW, + MOVE_EARTHQUAKE, + MOVE_FIRE_BLAST, + MOVE_HYDRO_PUMP + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED, + .nature = NATURE_NAUGHTY, + }, + { + .species = SPECIES_METAGROSS, + .item = BATTLE_TOWER_ITEM_LIECHI_BERRY, + .teamFlags = 0x3D, + .moves = { + MOVE_METEOR_MASH, + MOVE_PSYCHIC, + MOVE_EARTHQUAKE, + MOVE_HYPER_BEAM + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_REGIROCK, + .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .teamFlags = 0x3C, + .moves = { + MOVE_EARTHQUAKE, + MOVE_THUNDERBOLT, + MOVE_SUPERPOWER, + MOVE_EXPLOSION + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK, + .nature = NATURE_GENTLE, + }, + { + .species = SPECIES_REGICE, + .item = BATTLE_TOWER_ITEM_LAX_INCENSE, + .teamFlags = 0x3C, + .moves = { + MOVE_ICE_BEAM, + MOVE_THUNDERBOLT, + MOVE_ANCIENT_POWER, + MOVE_EXPLOSION + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK, + .nature = NATURE_CAREFUL, + }, + { + .species = SPECIES_REGISTEEL, + .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .teamFlags = 0x3C, + .moves = { + MOVE_METAL_CLAW, + MOVE_THUNDERBOLT, + MOVE_HYPER_BEAM, + MOVE_EXPLOSION + }, + .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_GENTLE, + }, + { + .species = SPECIES_LATIAS, + .item = BATTLE_TOWER_ITEM_APICOT_BERRY, + .teamFlags = 0x1E, + .moves = { + MOVE_MIST_BALL, + MOVE_THUNDERBOLT, + MOVE_EARTHQUAKE, + MOVE_ICE_BEAM + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_LATIOS, + .item = BATTLE_TOWER_ITEM_GANLON_BERRY, + .teamFlags = 0x1D, + .moves = { + MOVE_LUSTER_PURGE, + MOVE_THUNDERBOLT, + MOVE_EARTHQUAKE, + MOVE_ICE_BEAM + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_MILOTIC, + .item = BATTLE_TOWER_ITEM_APICOT_BERRY, + .teamFlags = 0x1A, + .moves = { + MOVE_SURF, + MOVE_ICE_BEAM, + MOVE_RECOVER, + MOVE_ATTRACT + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_BRAVE, + }, + { + .species = SPECIES_ALTARIA, + .item = BATTLE_TOWER_ITEM_GANLON_BERRY, + .teamFlags = 0x0A, + .moves = { + MOVE_DRAGON_CLAW, + MOVE_ICE_BEAM, + MOVE_SING, + MOVE_FLAMETHROWER + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_SCEPTILE, + .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .teamFlags = 0x9C, + .moves = { + MOVE_LEAF_BLADE, + MOVE_DETECT, + MOVE_DRAGON_CLAW, + MOVE_CRUNCH + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_BLAZIKEN, + .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .teamFlags = 0x9C, + .moves = { + MOVE_BLAZE_KICK, + MOVE_SKY_UPPERCUT, + MOVE_EARTHQUAKE, + MOVE_ROCK_SLIDE + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK, + .nature = NATURE_DOCILE, + }, + { + .species = SPECIES_SWAMPERT, + .item = BATTLE_TOWER_ITEM_PETAYA_BERRY, + .teamFlags = 0x9C, + .moves = { + MOVE_SURF, + MOVE_EARTHQUAKE, + MOVE_ICE_BEAM, + MOVE_ROCK_TOMB + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_SHEDINJA, + .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .teamFlags = 0x20, + .moves = { + MOVE_CONFUSE_RAY, + MOVE_SHADOW_BALL, + MOVE_TOXIC, + MOVE_GRUDGE + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_METAGROSS, + .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .teamFlags = 0x1D, + .moves = { + MOVE_METEOR_MASH, + MOVE_EARTHQUAKE, + MOVE_DOUBLE_TEAM, + MOVE_PROTECT + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_NAIVE, + }, + { + .species = SPECIES_ALAKAZAM, + .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .teamFlags = 0x58, + .moves = { + MOVE_PSYCHIC, + MOVE_THUNDER_PUNCH, + MOVE_ICE_PUNCH, + MOVE_FIRE_PUNCH + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED, + .nature = NATURE_HASTY, + }, + { + .species = SPECIES_LATIAS, + .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .teamFlags = 0x1E, + .moves = { + MOVE_MIST_BALL, + MOVE_THUNDERBOLT, + MOVE_ICE_BEAM, + MOVE_DRAGON_CLAW + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_LATIOS, + .item = BATTLE_TOWER_ITEM_SHELL_BELL, + .teamFlags = 0x1D, + .moves = { + MOVE_LUSTER_PURGE, + MOVE_THUNDERBOLT, + MOVE_ICE_BEAM, + MOVE_DRAGON_CLAW + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_SALAMENCE, + .item = BATTLE_TOWER_ITEM_SHELL_BELL, + .teamFlags = 0x1D, + .moves = { + MOVE_DRAGON_CLAW, + MOVE_FLAMETHROWER, + MOVE_EARTHQUAKE, + MOVE_AERIAL_ACE + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE, + .nature = NATURE_RELAXED, + }, + { + .species = SPECIES_MACHAMP, + .item = BATTLE_TOWER_ITEM_LIECHI_BERRY, + .teamFlags = 0x5D, + .moves = { + MOVE_CROSS_CHOP, + MOVE_EARTHQUAKE, + MOVE_LOW_KICK, + MOVE_ROCK_SLIDE + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_HARDY, + }, +}; \ No newline at end of file diff --git a/src/data/battle_tower/level_50_mons.h b/src/data/battle_tower/level_50_mons.h index 65b66b7ef..8e1463a86 100644 --- a/src/data/battle_tower/level_50_mons.h +++ b/src/data/battle_tower/level_50_mons.h @@ -5,11 +5,11 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = .item = BATTLE_TOWER_ITEM_ORAN_BERRY, .teamFlags = 0x42, .moves = { - MOVE_QUICK_ATTACK, - MOVE_THUNDER_WAVE, - MOVE_THUNDER_SHOCK, - MOVE_GROWL - }, + MOVE_QUICK_ATTACK, + MOVE_THUNDER_WAVE, + MOVE_THUNDER_SHOCK, + MOVE_GROWL + }, .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE, .nature = NATURE_HARDY, }, @@ -18,11 +18,11 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = .item = BATTLE_TOWER_ITEM_MIRACLE_SEED, .teamFlags = 0x41, .moves = { - MOVE_ABSORB, - MOVE_STUN_SPORE, - MOVE_GUST, - MOVE_SAFEGUARD - }, + MOVE_ABSORB, + MOVE_STUN_SPORE, + MOVE_GUST, + MOVE_SAFEGUARD + }, .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, .nature = NATURE_BRAVE, }, @@ -31,11 +31,11 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = .item = BATTLE_TOWER_ITEM_SHARP_BEAK, .teamFlags = 0x07, .moves = { - MOVE_PECK, - MOVE_WING_ATTACK, - MOVE_AERIAL_ACE, - MOVE_AGILITY - }, + MOVE_PECK, + MOVE_WING_ATTACK, + MOVE_AERIAL_ACE, + MOVE_AGILITY + }, .evSpread = F_EV_SPREAD_ATTACK, .nature = NATURE_GENTLE, }, @@ -44,11 +44,11 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = .item = BATTLE_TOWER_ITEM_SCOPE_LENS, .teamFlags = 0x0B, .moves = { - MOVE_HAIL, - MOVE_ENCORE, - MOVE_ICE_BALL, - MOVE_TOXIC - }, + MOVE_HAIL, + MOVE_ENCORE, + MOVE_ICE_BALL, + MOVE_TOXIC + }, .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, .nature = NATURE_ADAMANT, }, @@ -57,11 +57,11 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = .item = BATTLE_TOWER_ITEM_MYSTIC_WATER, .teamFlags = 0x07, .moves = { - MOVE_PECK, - MOVE_FLAIL, - MOVE_FURY_ATTACK, - MOVE_SURF - }, + MOVE_PECK, + MOVE_FLAIL, + MOVE_FURY_ATTACK, + MOVE_SURF + }, .evSpread = F_EV_SPREAD_SPEED, .nature = NATURE_HASTY, }, @@ -70,11 +70,11 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = .item = BATTLE_TOWER_ITEM_KINGS_ROCK, .teamFlags = 0x42, .moves = { - MOVE_FIRE_SPIN, - MOVE_PROTECT, - MOVE_SAND_ATTACK, - MOVE_SLASH - }, + MOVE_FIRE_SPIN, + MOVE_PROTECT, + MOVE_SAND_ATTACK, + MOVE_SLASH + }, .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK, .nature = NATURE_RELAXED, }, @@ -83,11 +83,11 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = .item = BATTLE_TOWER_ITEM_WHITE_HERB, .teamFlags = 0x41, .moves = { - MOVE_STUN_SPORE, - MOVE_WATER_SPORT, - MOVE_QUICK_ATTACK, - MOVE_GUST - }, + MOVE_STUN_SPORE, + MOVE_WATER_SPORT, + MOVE_QUICK_ATTACK, + MOVE_GUST + }, .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP, .nature = NATURE_IMPISH, }, @@ -96,11 +96,11 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = .item = BATTLE_TOWER_ITEM_NONE, .teamFlags = 0x41, .moves = { - MOVE_FLATTER, - MOVE_COVET, - MOVE_WISH, - MOVE_FACADE - }, + MOVE_FLATTER, + MOVE_COVET, + MOVE_WISH, + MOVE_FACADE + }, .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE, .nature = NATURE_HARDY, }, @@ -109,11 +109,11 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = .item = BATTLE_TOWER_ITEM_SILK_SCARF, .teamFlags = 0x42, .moves = { - MOVE_ATTRACT, - MOVE_TAIL_WHIP, - MOVE_FAINT_ATTACK, - MOVE_DIG - }, + MOVE_ATTRACT, + MOVE_TAIL_WHIP, + MOVE_FAINT_ATTACK, + MOVE_DIG + }, .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, .nature = NATURE_LONELY, }, @@ -122,11 +122,11 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = .item = BATTLE_TOWER_ITEM_PERSIM_BERRY, .teamFlags = 0x0B, .moves = { - MOVE_TAIL_WHIP, - MOVE_SLASH, - MOVE_LICK, - MOVE_SCREECH - }, + MOVE_TAIL_WHIP, + MOVE_SLASH, + MOVE_LICK, + MOVE_SCREECH + }, .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE, .nature = NATURE_BRAVE, }, @@ -135,11 +135,11 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = .item = BATTLE_TOWER_ITEM_PECHA_BERRY, .teamFlags = 0x05, .moves = { - MOVE_BITE, - MOVE_TAKE_DOWN, - MOVE_ROAR, - MOVE_HOWL - }, + MOVE_BITE, + MOVE_TAKE_DOWN, + MOVE_ROAR, + MOVE_HOWL + }, .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK, .nature = NATURE_DOCILE, }, @@ -148,11 +148,11 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = .item = BATTLE_TOWER_ITEM_BLACK_GLASSES, .teamFlags = 0x05, .moves = { - MOVE_FAINT_ATTACK, - MOVE_COUNTER, - MOVE_SCRATCH, - MOVE_TAUNT - }, + MOVE_FAINT_ATTACK, + MOVE_COUNTER, + MOVE_SCRATCH, + MOVE_TAUNT + }, .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, .nature = NATURE_LAX, }, @@ -161,11 +161,11 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = .item = BATTLE_TOWER_ITEM_CHESTO_BERRY, .teamFlags = 0x05, .moves = { - MOVE_LEER, - MOVE_DIG, - MOVE_LOW_KICK, - MOVE_FOCUS_PUNCH - }, + MOVE_LEER, + MOVE_DIG, + MOVE_LOW_KICK, + MOVE_FOCUS_PUNCH + }, .evSpread = F_EV_SPREAD_SPEED, .nature = NATURE_TIMID, }, @@ -174,11 +174,11 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = .item = BATTLE_TOWER_ITEM_PERSIM_BERRY, .teamFlags = 0x05, .moves = { - MOVE_STRENGTH, - MOVE_ROCK_TOMB, - MOVE_STOMP, - MOVE_ROCK_SMASH - }, + MOVE_STRENGTH, + MOVE_ROCK_TOMB, + MOVE_STOMP, + MOVE_ROCK_SMASH + }, .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, .nature = NATURE_QUIRKY, }, @@ -187,11 +187,11 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = .item = BATTLE_TOWER_ITEM_POISON_BARB, .teamFlags = 0x0B, .moves = { - MOVE_POISON_STING, - MOVE_GROWTH, - MOVE_ABSORB, - MOVE_SOLAR_BEAM - }, + MOVE_POISON_STING, + MOVE_GROWTH, + MOVE_ABSORB, + MOVE_SOLAR_BEAM + }, .evSpread = F_EV_SPREAD_SP_ATTACK, .nature = NATURE_HARDY, }, @@ -200,11 +200,11 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = .item = BATTLE_TOWER_ITEM_KINGS_ROCK, .teamFlags = 0x0A, .moves = { - MOVE_FLAIL, - MOVE_SAND_ATTACK, - MOVE_REST, - MOVE_SURF - }, + MOVE_FLAIL, + MOVE_SAND_ATTACK, + MOVE_REST, + MOVE_SURF + }, .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, .nature = NATURE_SASSY, }, @@ -213,11 +213,11 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = .item = BATTLE_TOWER_ITEM_SHARP_BEAK, .teamFlags = 0x03, .moves = { - MOVE_PURSUIT, - MOVE_TRI_ATTACK, - MOVE_GROWL, - MOVE_AGILITY - }, + MOVE_PURSUIT, + MOVE_TRI_ATTACK, + MOVE_GROWL, + MOVE_AGILITY + }, .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, .nature = NATURE_SERIOUS, }, @@ -226,11 +226,11 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = .item = BATTLE_TOWER_ITEM_QUICK_CLAW, .teamFlags = 0x0B, .moves = { - MOVE_WATER_GUN, - MOVE_AMNESIA, - MOVE_MAGNITUDE, - MOVE_MUD_SLAP - }, + MOVE_WATER_GUN, + MOVE_AMNESIA, + MOVE_MAGNITUDE, + MOVE_MUD_SLAP + }, .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK, .nature = NATURE_LAX, }, @@ -239,11 +239,11 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = .item = BATTLE_TOWER_ITEM_SILVER_POWDER, .teamFlags = 0x41, .moves = { - MOVE_SAND_ATTACK, - MOVE_FURY_CUTTER, - MOVE_AGILITY, - MOVE_HARDEN - }, + MOVE_SAND_ATTACK, + MOVE_FURY_CUTTER, + MOVE_AGILITY, + MOVE_HARDEN + }, .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, .nature = NATURE_QUIET, }, @@ -252,11 +252,11 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = .item = BATTLE_TOWER_ITEM_PECHA_BERRY, .teamFlags = 0x01, .moves = { - MOVE_PROTECT, - MOVE_NIGHT_SHADE, - MOVE_ASTONISH, - MOVE_WILL_O_WISP - }, + MOVE_PROTECT, + MOVE_NIGHT_SHADE, + MOVE_ASTONISH, + MOVE_WILL_O_WISP + }, .evSpread = F_EV_SPREAD_HP, .nature = NATURE_HARDY, }, @@ -265,11 +265,11 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = .item = BATTLE_TOWER_ITEM_CHARCOAL, .teamFlags = 0x07, .moves = { - MOVE_DIG, - MOVE_EMBER, - MOVE_GROWL, - MOVE_ROCK_SMASH - }, + MOVE_DIG, + MOVE_EMBER, + MOVE_GROWL, + MOVE_ROCK_SMASH + }, .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK, .nature = NATURE_BOLD, }, @@ -278,11 +278,11 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = .item = BATTLE_TOWER_ITEM_CHERI_BERRY, .teamFlags = 0x4A, .moves = { - MOVE_TEETER_DANCE, - MOVE_FLAIL, - MOVE_PSYCH_UP, - MOVE_DOUBLE_EDGE - }, + MOVE_TEETER_DANCE, + MOVE_FLAIL, + MOVE_PSYCH_UP, + MOVE_DOUBLE_EDGE + }, .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, .nature = NATURE_CALM, }, @@ -291,11 +291,11 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = .item = BATTLE_TOWER_ITEM_POISON_BARB, .teamFlags = 0x09, .moves = { - MOVE_SCREECH, - MOVE_GLARE, - MOVE_DIG, - MOVE_POISON_FANG - }, + MOVE_SCREECH, + MOVE_GLARE, + MOVE_DIG, + MOVE_POISON_FANG + }, .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE, .nature = NATURE_HARDY, }, @@ -304,11 +304,11 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = .item = BATTLE_TOWER_ITEM_QUICK_CLAW, .teamFlags = 0x49, .moves = { - MOVE_SAND_ATTACK, - MOVE_SAND_TOMB, - MOVE_FACADE, - MOVE_TOXIC - }, + MOVE_SAND_ATTACK, + MOVE_SAND_TOMB, + MOVE_FACADE, + MOVE_TOXIC + }, .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, .nature = NATURE_HARDY, }, @@ -317,11 +317,11 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = .item = BATTLE_TOWER_ITEM_WHITE_HERB, .teamFlags = 0x42, .moves = { - MOVE_BUBBLE_BEAM, - MOVE_TAIL_WHIP, - MOVE_RAIN_DANCE, - MOVE_ROLLOUT - }, + MOVE_BUBBLE_BEAM, + MOVE_TAIL_WHIP, + MOVE_RAIN_DANCE, + MOVE_ROLLOUT + }, .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK, .nature = NATURE_HARDY, }, @@ -330,11 +330,11 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = .item = BATTLE_TOWER_ITEM_MENTAL_HERB, .teamFlags = 0x07, .moves = { - MOVE_STRENGTH, - MOVE_TAUNT, - MOVE_CRUSH_CLAW, - MOVE_DETECT - }, + MOVE_STRENGTH, + MOVE_TAUNT, + MOVE_CRUSH_CLAW, + MOVE_DETECT + }, .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, .nature = NATURE_HARDY, }, @@ -343,11 +343,11 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = .item = BATTLE_TOWER_ITEM_SCOPE_LENS, .teamFlags = 0x07, .moves = { - MOVE_REVERSAL, - MOVE_MEDITATE, - MOVE_CONFUSION, - MOVE_FACADE - }, + MOVE_REVERSAL, + MOVE_MEDITATE, + MOVE_CONFUSION, + MOVE_FACADE + }, .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE, .nature = NATURE_HASTY, }, @@ -356,11 +356,11 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = .item = BATTLE_TOWER_ITEM_MIRACLE_SEED, .teamFlags = 0x0A, .moves = { - MOVE_GROWTH, - MOVE_MEGA_DRAIN, - MOVE_TOXIC, - MOVE_CUT - }, + MOVE_GROWTH, + MOVE_MEGA_DRAIN, + MOVE_TOXIC, + MOVE_CUT + }, .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK, .nature = NATURE_NAUGHTY, }, @@ -369,11 +369,11 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = .item = BATTLE_TOWER_ITEM_LUM_BERRY, .teamFlags = 0x0B, .moves = { - MOVE_STOCKPILE, - MOVE_SPIT_UP, - MOVE_SLUDGE, - MOVE_POISON_GAS - }, + MOVE_STOCKPILE, + MOVE_SPIT_UP, + MOVE_SLUDGE, + MOVE_POISON_GAS + }, .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK, .nature = NATURE_HARDY, }, @@ -382,11 +382,11 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = .item = BATTLE_TOWER_ITEM_MAGNET, .teamFlags = 0x0B, .moves = { - MOVE_SUPERSONIC, - MOVE_THUNDER_WAVE, - MOVE_SCREECH, - MOVE_TRI_ATTACK - }, + MOVE_SUPERSONIC, + MOVE_THUNDER_WAVE, + MOVE_SCREECH, + MOVE_TRI_ATTACK + }, .evSpread = F_EV_SPREAD_SPEED, .nature = NATURE_HARDY, }, @@ -395,11 +395,11 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = .item = BATTLE_TOWER_ITEM_TWISTED_SPOON, .teamFlags = 0x09, .moves = { - MOVE_CONFUSION, - MOVE_TOXIC, - MOVE_TORMENT, - MOVE_PROTECT - }, + MOVE_CONFUSION, + MOVE_TOXIC, + MOVE_TORMENT, + MOVE_PROTECT + }, .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, .nature = NATURE_BOLD, }, -- cgit v1.2.3 From b4f9d6d92ea3bf2ce0227324e85311aaa0f828f0 Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Mon, 23 Oct 2017 19:09:35 -0400 Subject: document berry.c. --- src/engine/clock.c | 17 +- src/field/berry.c | 499 +++++++++++++++++++++------------------ src/field/field_control_avatar.c | 3 +- src/field/field_map_obj.c | 13 +- src/field/field_special_scene.c | 3 +- src/field/item_use.c | 2 +- 6 files changed, 285 insertions(+), 252 deletions(-) (limited to 'src') diff --git a/src/engine/clock.c b/src/engine/clock.c index 9635514d2..12b82018d 100644 --- a/src/engine/clock.c +++ b/src/engine/clock.c @@ -61,19 +61,18 @@ static void UpdatePerDay(struct Time *time) static void UpdatePerMinute(struct Time *time) { struct Time newTime; - s32 minutes; + s32 totalMinutes; CalcTimeDifference(&newTime, &gSaveBlock2.lastBerryTreeUpdate, time); - minutes = 1440 * newTime.days + 60 * newTime.hours + newTime.minutes; + totalMinutes = 1440 * newTime.days + 60 * newTime.hours + newTime.minutes; - // there's no way to get the correct assembly other than with this nested if check. so dumb. - if (minutes != 0) + if (totalMinutes == 0) // do not do the update for the first minute. + return; + + if (totalMinutes > -1) // do not perform an update on invalid totalMinutes. { - if (minutes >= 0) - { - BerryTreeTimeUpdate(minutes); - gSaveBlock2.lastBerryTreeUpdate = *time; - } + BerryTreeTimeUpdate(totalMinutes); + gSaveBlock2.lastBerryTreeUpdate = *time; } } diff --git a/src/field/berry.c b/src/field/berry.c index d82eab2a6..5127a3a4f 100644 --- a/src/field/berry.c +++ b/src/field/berry.c @@ -12,10 +12,16 @@ #include "text.h" #define BERRY_NAME_LENGTH 6 +#define BERRY_REGROW_LIMIT 10 +#define MAX_BERRY_TREES 128 +#define BERRY_NONE 0 #define FIRST_BERRY ITEM_CHERI_BERRY #define LAST_BERRY ITEM_ENIGMA_BERRY +#define GETBERRYID(berry) ((berry - FIRST_BERRY) + 1) +#define GETITEMID(berry) ((berry + FIRST_BERRY) - 1) + #ifdef ENGLISH #define NAME_CHERI_BERRY _("CHERI") #define NAME_CHESTO_BERRY _("CHESTO") @@ -61,92 +67,92 @@ #define NAME_STARF_BERRY _("STARF") #define NAME_ENIGMA_BERRY _("ENIGMA") -const u8 gBerryDescriptionPart1_Cheri[] = _("Blooms with delicate pretty flowers."); -const u8 gBerryDescriptionPart2_Cheri[] = _("The bright red BERRY is very spicy."); -const u8 gBerryDescriptionPart1_Chesto[] = _("The BERRY’s thick skin and fruit are"); -const u8 gBerryDescriptionPart2_Chesto[] = _("very tough. It is dry-tasting all over."); -const u8 gBerryDescriptionPart1_Pecha[] = _("Very sweet and delicious."); -const u8 gBerryDescriptionPart2_Pecha[] = _("Also very tender - handle with care."); -const u8 gBerryDescriptionPart1_Rawst[] = _("If the leaves grow long and curly,"); -const u8 gBerryDescriptionPart2_Rawst[] = _("the BERRY seems to grow very bitter."); -const u8 gBerryDescriptionPart1_Aspear[] = _("The hard BERRY is dense with a rich"); -const u8 gBerryDescriptionPart2_Aspear[] = _("juice. It is quite sour."); -const u8 gBerryDescriptionPart1_Leppa[] = _("Grows slower than CHERI and others."); -const u8 gBerryDescriptionPart2_Leppa[] = _("The smaller the BERRY, the tastier."); -const u8 gBerryDescriptionPart1_Oran[] = _("A peculiar BERRY with a mix of flavors."); -const u8 gBerryDescriptionPart2_Oran[] = _("BERRIES grow in half a day."); -const u8 gBerryDescriptionPart1_Persim[] = _("Loves sunlight. The BERRY’s color"); -const u8 gBerryDescriptionPart2_Persim[] = _("grows vivid when exposed to the sun."); -const u8 gBerryDescriptionPart1_Lum[] = _("Slow to grow. If raised with loving"); -const u8 gBerryDescriptionPart2_Lum[] = _("care, it may grow two BERRIES."); -const u8 gBerryDescriptionPart1_Sitrus[] = _("Closely related to ORAN. The large"); -const u8 gBerryDescriptionPart2_Sitrus[] = _("BERRY has a well-rounded flavor."); -const u8 gBerryDescriptionPart1_Figy[] = _("The BERRY, which looks chewed up,"); -const u8 gBerryDescriptionPart2_Figy[] = _("brims with spicy substances."); -const u8 gBerryDescriptionPart1_Wiki[] = _("The BERRY is said to have grown lumpy"); -const u8 gBerryDescriptionPart2_Wiki[] = _("to help POKéMON grip it."); -const u8 gBerryDescriptionPart1_Mago[] = _("The BERRY turns curvy as it grows."); -const u8 gBerryDescriptionPart2_Mago[] = _("The curvier, the sweeter and tastier."); -const u8 gBerryDescriptionPart1_Aguav[] = _("The flower is dainty. It is rare in its"); -const u8 gBerryDescriptionPart2_Aguav[] = _("ability to grow without light."); -const u8 gBerryDescriptionPart1_Iapapa[] = _("The BERRY is very big and sour."); -const u8 gBerryDescriptionPart2_Iapapa[] = _("It takes at least a day to grow."); -const u8 gBerryDescriptionPart1_Razz[] = _("The red BERRY tastes slightly spicy."); -const u8 gBerryDescriptionPart2_Razz[] = _("It grows quickly in just four hours."); -const u8 gBerryDescriptionPart1_Bluk[] = _("The BERRY is blue on the outside, but"); -const u8 gBerryDescriptionPart2_Bluk[] = _("it blackens the mouth when eaten."); -const u8 gBerryDescriptionPart1_Nanab[] = _("This BERRY was the seventh"); -const u8 gBerryDescriptionPart2_Nanab[] = _("discovered in the world. It is sweet."); -const u8 gBerryDescriptionPart1_Wepear[] = _("The flower is small and white. It has a"); -const u8 gBerryDescriptionPart2_Wepear[] = _("delicate balance of bitter and sour."); -const u8 gBerryDescriptionPart1_Pinap[] = _("Weak against wind and cold."); -const u8 gBerryDescriptionPart2_Pinap[] = _("The fruit is spicy and the skin, sour."); -const u8 gBerryDescriptionPart1_Pomeg[] = _("However much it is watered,"); -const u8 gBerryDescriptionPart2_Pomeg[] = _("it only grows up to six BERRIES."); -const u8 gBerryDescriptionPart1_Kelpsy[] = _("A rare variety shaped like a root."); -const u8 gBerryDescriptionPart2_Kelpsy[] = _("Grows a very large flower."); -const u8 gBerryDescriptionPart1_Qualot[] = _("Loves water. Grows strong even in"); -const u8 gBerryDescriptionPart2_Qualot[] = _("locations with constant rainfall."); -const u8 gBerryDescriptionPart1_Hondew[] = _("A BERRY that is very valuable and"); -const u8 gBerryDescriptionPart2_Hondew[] = _("rarely seen. It is very delicious."); -const u8 gBerryDescriptionPart1_Grepa[] = _("Despite its tenderness and round"); -const u8 gBerryDescriptionPart2_Grepa[] = _("shape, the BERRY is unimaginably sour."); -const u8 gBerryDescriptionPart1_Tamato[] = _("The BERRY is lip-bendingly spicy."); -const u8 gBerryDescriptionPart2_Tamato[] = _("It takes time to grow."); -const u8 gBerryDescriptionPart1_Cornn[] = _("A BERRY from an ancient era. May not"); -const u8 gBerryDescriptionPart2_Cornn[] = _("grow unless planted in quantity."); -const u8 gBerryDescriptionPart1_Magost[] = _("A BERRY that is widely said to have"); -const u8 gBerryDescriptionPart2_Magost[] = _("a finely balanced flavor."); -const u8 gBerryDescriptionPart1_Rabuta[] = _("A rare variety that is overgrown with"); -const u8 gBerryDescriptionPart2_Rabuta[] = _("hair. It is quite bitter."); -const u8 gBerryDescriptionPart1_Nomel[] = _("Quite sour. Just one bite makes it"); -const u8 gBerryDescriptionPart2_Nomel[] = _("impossible to taste for three days."); -const u8 gBerryDescriptionPart1_Spelon[] = _("The vividly red BERRY is very spicy."); -const u8 gBerryDescriptionPart2_Spelon[] = _("Its warts secrete a spicy substance."); -const u8 gBerryDescriptionPart1_Pamtre[] = _("Drifts on the sea from somewhere."); -const u8 gBerryDescriptionPart2_Pamtre[] = _("It is thought to grow elsewhere."); -const u8 gBerryDescriptionPart1_Watmel[] = _("A huge BERRY, with some over 20"); -const u8 gBerryDescriptionPart2_Watmel[] = _("inches discovered. Exceedingly sweet."); -const u8 gBerryDescriptionPart1_Durin[] = _("Bitter to even look at. It is so"); -const u8 gBerryDescriptionPart2_Durin[] = _("bitter, no one has ever eaten it as is."); -const u8 gBerryDescriptionPart1_Belue[] = _("It is glossy and looks delicious, but"); -const u8 gBerryDescriptionPart2_Belue[] = _("it is awfully sour. Takes time to grow."); -const u8 gBerryDescriptionPart1_Liechi[] = _("A mysterious BERRY. It is rumored to"); -const u8 gBerryDescriptionPart2_Liechi[] = _("contain the power of the sea."); -const u8 gBerryDescriptionPart1_Ganlon[] = _("A mysterious BERRY. It is rumored to"); -const u8 gBerryDescriptionPart2_Ganlon[] = _("contain the power of the land."); -const u8 gBerryDescriptionPart1_Salac[] = _("A mysterious BERRY. It is rumored to"); -const u8 gBerryDescriptionPart2_Salac[] = _("contain the power of the sky."); -const u8 gBerryDescriptionPart1_Petaya[] = _("A mysterious BERRY. It is rumored to"); -const u8 gBerryDescriptionPart2_Petaya[] = _("contain the power of all living things."); -const u8 gBerryDescriptionPart1_Apicot[] = _("A very mystifying BERRY. No telling"); -const u8 gBerryDescriptionPart2_Apicot[] = _("what may happen or how it can be used."); -const u8 gBerryDescriptionPart1_Lansat[] = _("Said to be a legendary BERRY."); -const u8 gBerryDescriptionPart2_Lansat[] = _("Holding it supposedly brings joy."); -const u8 gBerryDescriptionPart1_Starf[] = _("So strong, it was abandoned at the"); -const u8 gBerryDescriptionPart2_Starf[] = _("world’s edge. Considered a mirage."); -const u8 gBerryDescriptionPart1_Enigma[] = _("A completely enigmatic BERRY."); -const u8 gBerryDescriptionPart2_Enigma[] = _("Appears to have the power of stars."); +static const u8 gBerryDescriptionPart1_Cheri[] = _("Blooms with delicate pretty flowers."); +static const u8 gBerryDescriptionPart2_Cheri[] = _("The bright red BERRY is very spicy."); +static const u8 gBerryDescriptionPart1_Chesto[] = _("The BERRY’s thick skin and fruit are"); +static const u8 gBerryDescriptionPart2_Chesto[] = _("very tough. It is dry-tasting all over."); +static const u8 gBerryDescriptionPart1_Pecha[] = _("Very sweet and delicious."); +static const u8 gBerryDescriptionPart2_Pecha[] = _("Also very tender - handle with care."); +static const u8 gBerryDescriptionPart1_Rawst[] = _("If the leaves grow long and curly,"); +static const u8 gBerryDescriptionPart2_Rawst[] = _("the BERRY seems to grow very bitter."); +static const u8 gBerryDescriptionPart1_Aspear[] = _("The hard BERRY is dense with a rich"); +static const u8 gBerryDescriptionPart2_Aspear[] = _("juice. It is quite sour."); +static const u8 gBerryDescriptionPart1_Leppa[] = _("Grows slower than CHERI and others."); +static const u8 gBerryDescriptionPart2_Leppa[] = _("The smaller the BERRY, the tastier."); +static const u8 gBerryDescriptionPart1_Oran[] = _("A peculiar BERRY with a mix of flavors."); +static const u8 gBerryDescriptionPart2_Oran[] = _("BERRIES grow in half a day."); +static const u8 gBerryDescriptionPart1_Persim[] = _("Loves sunlight. The BERRY’s color"); +static const u8 gBerryDescriptionPart2_Persim[] = _("grows vivid when exposed to the sun."); +static const u8 gBerryDescriptionPart1_Lum[] = _("Slow to grow. If raised with loving"); +static const u8 gBerryDescriptionPart2_Lum[] = _("care, it may grow two BERRIES."); +static const u8 gBerryDescriptionPart1_Sitrus[] = _("Closely related to ORAN. The large"); +static const u8 gBerryDescriptionPart2_Sitrus[] = _("BERRY has a well-rounded flavor."); +static const u8 gBerryDescriptionPart1_Figy[] = _("The BERRY, which looks chewed up,"); +static const u8 gBerryDescriptionPart2_Figy[] = _("brims with spicy substances."); +static const u8 gBerryDescriptionPart1_Wiki[] = _("The BERRY is said to have grown lumpy"); +static const u8 gBerryDescriptionPart2_Wiki[] = _("to help POKéMON grip it."); +static const u8 gBerryDescriptionPart1_Mago[] = _("The BERRY turns curvy as it grows."); +static const u8 gBerryDescriptionPart2_Mago[] = _("The curvier, the sweeter and tastier."); +static const u8 gBerryDescriptionPart1_Aguav[] = _("The flower is dainty. It is rare in its"); +static const u8 gBerryDescriptionPart2_Aguav[] = _("ability to grow without light."); +static const u8 gBerryDescriptionPart1_Iapapa[] = _("The BERRY is very big and sour."); +static const u8 gBerryDescriptionPart2_Iapapa[] = _("It takes at least a day to grow."); +static const u8 gBerryDescriptionPart1_Razz[] = _("The red BERRY tastes slightly spicy."); +static const u8 gBerryDescriptionPart2_Razz[] = _("It grows quickly in just four hours."); +static const u8 gBerryDescriptionPart1_Bluk[] = _("The BERRY is blue on the outside, but"); +static const u8 gBerryDescriptionPart2_Bluk[] = _("it blackens the mouth when eaten."); +static const u8 gBerryDescriptionPart1_Nanab[] = _("This BERRY was the seventh"); +static const u8 gBerryDescriptionPart2_Nanab[] = _("discovered in the world. It is sweet."); +static const u8 gBerryDescriptionPart1_Wepear[] = _("The flower is small and white. It has a"); +static const u8 gBerryDescriptionPart2_Wepear[] = _("delicate balance of bitter and sour."); +static const u8 gBerryDescriptionPart1_Pinap[] = _("Weak against wind and cold."); +static const u8 gBerryDescriptionPart2_Pinap[] = _("The fruit is spicy and the skin, sour."); +static const u8 gBerryDescriptionPart1_Pomeg[] = _("However much it is watered,"); +static const u8 gBerryDescriptionPart2_Pomeg[] = _("it only grows up to six BERRIES."); +static const u8 gBerryDescriptionPart1_Kelpsy[] = _("A rare variety shaped like a root."); +static const u8 gBerryDescriptionPart2_Kelpsy[] = _("Grows a very large flower."); +static const u8 gBerryDescriptionPart1_Qualot[] = _("Loves water. Grows strong even in"); +static const u8 gBerryDescriptionPart2_Qualot[] = _("locations with constant rainfall."); +static const u8 gBerryDescriptionPart1_Hondew[] = _("A BERRY that is very valuable and"); +static const u8 gBerryDescriptionPart2_Hondew[] = _("rarely seen. It is very delicious."); +static const u8 gBerryDescriptionPart1_Grepa[] = _("Despite its tenderness and round"); +static const u8 gBerryDescriptionPart2_Grepa[] = _("shape, the BERRY is unimaginably sour."); +static const u8 gBerryDescriptionPart1_Tamato[] = _("The BERRY is lip-bendingly spicy."); +static const u8 gBerryDescriptionPart2_Tamato[] = _("It takes time to grow."); +static const u8 gBerryDescriptionPart1_Cornn[] = _("A BERRY from an ancient era. May not"); +static const u8 gBerryDescriptionPart2_Cornn[] = _("grow unless planted in quantity."); +static const u8 gBerryDescriptionPart1_Magost[] = _("A BERRY that is widely said to have"); +static const u8 gBerryDescriptionPart2_Magost[] = _("a finely balanced flavor."); +static const u8 gBerryDescriptionPart1_Rabuta[] = _("A rare variety that is overgrown with"); +static const u8 gBerryDescriptionPart2_Rabuta[] = _("hair. It is quite bitter."); +static const u8 gBerryDescriptionPart1_Nomel[] = _("Quite sour. Just one bite makes it"); +static const u8 gBerryDescriptionPart2_Nomel[] = _("impossible to taste for three days."); +static const u8 gBerryDescriptionPart1_Spelon[] = _("The vividly red BERRY is very spicy."); +static const u8 gBerryDescriptionPart2_Spelon[] = _("Its warts secrete a spicy substance."); +static const u8 gBerryDescriptionPart1_Pamtre[] = _("Drifts on the sea from somewhere."); +static const u8 gBerryDescriptionPart2_Pamtre[] = _("It is thought to grow elsewhere."); +static const u8 gBerryDescriptionPart1_Watmel[] = _("A huge BERRY, with some over 20"); +static const u8 gBerryDescriptionPart2_Watmel[] = _("inches discovered. Exceedingly sweet."); +static const u8 gBerryDescriptionPart1_Durin[] = _("Bitter to even look at. It is so"); +static const u8 gBerryDescriptionPart2_Durin[] = _("bitter, no one has ever eaten it as is."); +static const u8 gBerryDescriptionPart1_Belue[] = _("It is glossy and looks delicious, but"); +static const u8 gBerryDescriptionPart2_Belue[] = _("it is awfully sour. Takes time to grow."); +static const u8 gBerryDescriptionPart1_Liechi[] = _("A mysterious BERRY. It is rumored to"); +static const u8 gBerryDescriptionPart2_Liechi[] = _("contain the power of the sea."); +static const u8 gBerryDescriptionPart1_Ganlon[] = _("A mysterious BERRY. It is rumored to"); +static const u8 gBerryDescriptionPart2_Ganlon[] = _("contain the power of the land."); +static const u8 gBerryDescriptionPart1_Salac[] = _("A mysterious BERRY. It is rumored to"); +static const u8 gBerryDescriptionPart2_Salac[] = _("contain the power of the sky."); +static const u8 gBerryDescriptionPart1_Petaya[] = _("A mysterious BERRY. It is rumored to"); +static const u8 gBerryDescriptionPart2_Petaya[] = _("contain the power of all living things."); +static const u8 gBerryDescriptionPart1_Apicot[] = _("A very mystifying BERRY. No telling"); +static const u8 gBerryDescriptionPart2_Apicot[] = _("what may happen or how it can be used."); +static const u8 gBerryDescriptionPart1_Lansat[] = _("Said to be a legendary BERRY."); +static const u8 gBerryDescriptionPart2_Lansat[] = _("Holding it supposedly brings joy."); +static const u8 gBerryDescriptionPart1_Starf[] = _("So strong, it was abandoned at the"); +static const u8 gBerryDescriptionPart2_Starf[] = _("world’s edge. Considered a mirage."); +static const u8 gBerryDescriptionPart1_Enigma[] = _("A completely enigmatic BERRY."); +static const u8 gBerryDescriptionPart2_Enigma[] = _("Appears to have the power of stars."); #elif defined(GERMAN) #define NAME_CHERI_BERRY _("AMRENA") #define NAME_CHESTO_BERRY _("MARON") @@ -192,92 +198,92 @@ const u8 gBerryDescriptionPart2_Enigma[] = _("Appears to have the power of stars #define NAME_STARF_BERRY _("KRAMBO") #define NAME_ENIGMA_BERRY _("ENIGMA") -const u8 gBerryDescriptionPart1_Cheri[] = _("Erblüht mit hübschen, zarten Blumen."); -const u8 gBerryDescriptionPart2_Cheri[] = _("Diese knallrote BEERE ist sehr scharf."); -const u8 gBerryDescriptionPart1_Chesto[] = _("Diese BEERE hat eine dicke Haut und"); -const u8 gBerryDescriptionPart2_Chesto[] = _("hartes Fruchtfleisch. Trocken!"); -const u8 gBerryDescriptionPart1_Pecha[] = _("Sehr süß und delikat."); -const u8 gBerryDescriptionPart2_Pecha[] = _("Sehr zart. Vorsichtig anfassen!"); -const u8 gBerryDescriptionPart1_Rawst[] = _("Wenn die Blätter lang und wellig sind,"); -const u8 gBerryDescriptionPart2_Rawst[] = _("wird die BEERE sehr bitter."); -const u8 gBerryDescriptionPart1_Aspear[] = _("Diese harte BEERE ist sehr"); -const u8 gBerryDescriptionPart2_Aspear[] = _("saftig und sauer im Geschmack!"); -const u8 gBerryDescriptionPart1_Leppa[] = _("Wächst langsamer als AMRENA und"); -const u8 gBerryDescriptionPart2_Leppa[] = _("andere. Je kleiner, desto delikater."); -const u8 gBerryDescriptionPart1_Oran[] = _("Eine BEERE unterschiedlichsten Ge-"); -const u8 gBerryDescriptionPart2_Oran[] = _("schmacks. Wächst an einem halben Tag."); -const u8 gBerryDescriptionPart1_Persim[] = _("Liebt Sonnenlicht. Die BEERE"); -const u8 gBerryDescriptionPart2_Persim[] = _("wächst im Sonnenlicht sehr schnell."); -const u8 gBerryDescriptionPart1_Lum[] = _("Langsamer Wuchs. Wird sie liebevoll ge-"); -const u8 gBerryDescriptionPart2_Lum[] = _("pflegt, kann sie 2 BEEREN tragen."); -const u8 gBerryDescriptionPart1_Sitrus[] = _("Eng verwandt mit SINEL. Diese große"); -const u8 gBerryDescriptionPart2_Sitrus[] = _("BEERE ist von rundem Geschmack."); -const u8 gBerryDescriptionPart1_Figy[] = _("Die BEERE sieht angekaut aus. Sie ist"); -const u8 gBerryDescriptionPart2_Figy[] = _("voller scharfer Substanzen."); -const u8 gBerryDescriptionPart1_Wiki[] = _("Die BEERE wächst unförmig,"); -const u8 gBerryDescriptionPart2_Wiki[] = _("damit PKMN sie besser greifen können."); -const u8 gBerryDescriptionPart1_Mago[] = _("Die BEERE hat Ausbeulungen. Je mehr"); -const u8 gBerryDescriptionPart2_Mago[] = _("Beulen, desto schmackhafter ist sie."); -const u8 gBerryDescriptionPart1_Aguav[] = _("Die Blume ist zart. Sie ist fähig,"); -const u8 gBerryDescriptionPart2_Aguav[] = _("ohne Licht wachsen zu können."); -const u8 gBerryDescriptionPart1_Iapapa[] = _("Die BEERE ist groß und sauer."); -const u8 gBerryDescriptionPart2_Iapapa[] = _("Sie braucht einen Tag zum Wachsen."); -const u8 gBerryDescriptionPart1_Razz[] = _("Diese rote BEERE schmeckt etwas"); -const u8 gBerryDescriptionPart2_Razz[] = _("scharf. Sie wächst in nur 4 Stunden."); -const u8 gBerryDescriptionPart1_Bluk[] = _("Die BEERE ist außen blau, verfärbt"); -const u8 gBerryDescriptionPart2_Bluk[] = _("sich im Mund aber schwarz."); -const u8 gBerryDescriptionPart1_Nanab[] = _("Diese BEERE war die 7., die auf der"); -const u8 gBerryDescriptionPart2_Nanab[] = _("Welt entdeckt wurde. Sie ist süß."); -const u8 gBerryDescriptionPart1_Wepear[] = _("Die Blume ist klein und weiß. Angenehm"); -const u8 gBerryDescriptionPart2_Wepear[] = _("bitter und sauer zugleich."); -const u8 gBerryDescriptionPart1_Pinap[] = _("Wind und Kälte verträgt sie nicht."); -const u8 gBerryDescriptionPart2_Pinap[] = _("Fruchtfleisch: Scharf. Haut: Sauer."); -const u8 gBerryDescriptionPart1_Pomeg[] = _("Egal wie viel Wasser sie bekommt, sie"); -const u8 gBerryDescriptionPart2_Pomeg[] = _("trägt immer bis zu 6 BEEREN."); -const u8 gBerryDescriptionPart1_Kelpsy[] = _("Eine Seltenheit. Geformt wie eine"); -const u8 gBerryDescriptionPart2_Kelpsy[] = _("Wurzel. Hat eine große Blume."); -const u8 gBerryDescriptionPart1_Qualot[] = _("Liebt das Wasser. Wächst besonders"); -const u8 gBerryDescriptionPart2_Qualot[] = _("gut in regenreichen Gegenden."); -const u8 gBerryDescriptionPart1_Hondew[] = _("Eine wertvolle und seltene BEERE."); -const u8 gBerryDescriptionPart2_Hondew[] = _("Sie ist sehr schmackhaft."); -const u8 gBerryDescriptionPart1_Grepa[] = _("Die BEERE ist zart und von runder"); -const u8 gBerryDescriptionPart2_Grepa[] = _("Form. Aber sie ist unglaublich sauer!"); -const u8 gBerryDescriptionPart1_Tamato[] = _("Die Schärfe der BEERE verbrennt die"); -const u8 gBerryDescriptionPart2_Tamato[] = _("Lippen. Sie braucht Zeit zum Wachsen."); -const u8 gBerryDescriptionPart1_Cornn[] = _("Eine BEERE aus alten Zeiten. Wächst"); -const u8 gBerryDescriptionPart2_Cornn[] = _("nur, wenn in großen Mengen gepflanzt."); -const u8 gBerryDescriptionPart1_Magost[] = _("Eine BEERE, die für ihren feinen, aus-"); -const u8 gBerryDescriptionPart2_Magost[] = _("gewogenen Geschmack bekannt ist."); -const u8 gBerryDescriptionPart1_Rabuta[] = _("Eine Seltenheit, die über und über mit"); -const u8 gBerryDescriptionPart2_Rabuta[] = _("Haaren bewachsen ist. Sehr bitter!"); -const u8 gBerryDescriptionPart1_Nomel[] = _("Sehr sauer. Ein Biss betäubt die"); -const u8 gBerryDescriptionPart2_Nomel[] = _("Geschmacksnerven für 3 Tage!"); -const u8 gBerryDescriptionPart1_Spelon[] = _("Die leuchtend rote BEERE ist sehr"); -const u8 gBerryDescriptionPart2_Spelon[] = _("scharf. Gibt scharfe Substanzen ab!"); -const u8 gBerryDescriptionPart1_Pamtre[] = _("Wird vom Meer angespült. Sie wächst"); -const u8 gBerryDescriptionPart2_Pamtre[] = _("an einem anderen Ort."); -const u8 gBerryDescriptionPart1_Watmel[] = _("Eine große BEERE, 25 cm groß."); -const u8 gBerryDescriptionPart2_Watmel[] = _("Außergewöhnlich süß."); -const u8 gBerryDescriptionPart1_Durin[] = _("Bitter schon ihr Anblick! Sie ist so"); -const u8 gBerryDescriptionPart2_Durin[] = _("bitter, dass niemand sie pur isst."); -const u8 gBerryDescriptionPart1_Belue[] = _("Sie glänzt, sieht zart aus, ist extrem"); -const u8 gBerryDescriptionPart2_Belue[] = _("sauer und braucht Zeit zum Wachsen."); -const u8 gBerryDescriptionPart1_Liechi[] = _("Eine geheimnisvolle BEERE. Man sagt,"); -const u8 gBerryDescriptionPart2_Liechi[] = _("sie enthalte die Kraft des Meeres."); -const u8 gBerryDescriptionPart1_Ganlon[] = _("Eine geheimnisvolle BEERE. Man sagt,"); -const u8 gBerryDescriptionPart2_Ganlon[] = _("sie enthalte die Kraft des Landes."); -const u8 gBerryDescriptionPart1_Salac[] = _("Eine geheimnisvolle BEERE. Man sagt,"); -const u8 gBerryDescriptionPart2_Salac[] = _("sie enthalte die Kraft des Himmels."); -const u8 gBerryDescriptionPart1_Petaya[] = _("Eine geheimnisvolle BEERE. Man sagt,"); -const u8 gBerryDescriptionPart2_Petaya[] = _("sie enthalte die Kraft allen Lebens."); -const u8 gBerryDescriptionPart1_Apicot[] = _("Eine rätselhafte BEERE. Man kann"); -const u8 gBerryDescriptionPart2_Apicot[] = _("nicht sagen, wie und was sie ist."); -const u8 gBerryDescriptionPart1_Lansat[] = _("Eine legendäre BEERE. Sie zu"); -const u8 gBerryDescriptionPart2_Lansat[] = _("tragen bringt Freude."); -const u8 gBerryDescriptionPart1_Starf[] = _("So stark, dass sie an den Rand der"); -const u8 gBerryDescriptionPart2_Starf[] = _("Welt verbannt wurde. Ein Märchen?"); -const u8 gBerryDescriptionPart1_Enigma[] = _("Eine enigmatische BEERE. Sie scheint"); -const u8 gBerryDescriptionPart2_Enigma[] = _("die Macht der Sterne zu besitzen."); +static const u8 gBerryDescriptionPart1_Cheri[] = _("Erblüht mit hübschen, zarten Blumen."); +static const u8 gBerryDescriptionPart2_Cheri[] = _("Diese knallrote BEERE ist sehr scharf."); +static const u8 gBerryDescriptionPart1_Chesto[] = _("Diese BEERE hat eine dicke Haut und"); +static const u8 gBerryDescriptionPart2_Chesto[] = _("hartes Fruchtfleisch. Trocken!"); +static const u8 gBerryDescriptionPart1_Pecha[] = _("Sehr süß und delikat."); +static const u8 gBerryDescriptionPart2_Pecha[] = _("Sehr zart. Vorsichtig anfassen!"); +static const u8 gBerryDescriptionPart1_Rawst[] = _("Wenn die Blätter lang und wellig sind,"); +static const u8 gBerryDescriptionPart2_Rawst[] = _("wird die BEERE sehr bitter."); +static const u8 gBerryDescriptionPart1_Aspear[] = _("Diese harte BEERE ist sehr"); +static const u8 gBerryDescriptionPart2_Aspear[] = _("saftig und sauer im Geschmack!"); +static const u8 gBerryDescriptionPart1_Leppa[] = _("Wächst langsamer als AMRENA und"); +static const u8 gBerryDescriptionPart2_Leppa[] = _("andere. Je kleiner, desto delikater."); +static const u8 gBerryDescriptionPart1_Oran[] = _("Eine BEERE unterschiedlichsten Ge-"); +static const u8 gBerryDescriptionPart2_Oran[] = _("schmacks. Wächst an einem halben Tag."); +static const u8 gBerryDescriptionPart1_Persim[] = _("Liebt Sonnenlicht. Die BEERE"); +static const u8 gBerryDescriptionPart2_Persim[] = _("wächst im Sonnenlicht sehr schnell."); +static const u8 gBerryDescriptionPart1_Lum[] = _("Langsamer Wuchs. Wird sie liebevoll ge-"); +static const u8 gBerryDescriptionPart2_Lum[] = _("pflegt, kann sie 2 BEEREN tragen."); +static const u8 gBerryDescriptionPart1_Sitrus[] = _("Eng verwandt mit SINEL. Diese große"); +static const u8 gBerryDescriptionPart2_Sitrus[] = _("BEERE ist von rundem Geschmack."); +static const u8 gBerryDescriptionPart1_Figy[] = _("Die BEERE sieht angekaut aus. Sie ist"); +static const u8 gBerryDescriptionPart2_Figy[] = _("voller scharfer Substanzen."); +static const u8 gBerryDescriptionPart1_Wiki[] = _("Die BEERE wächst unförmig,"); +static const u8 gBerryDescriptionPart2_Wiki[] = _("damit PKMN sie besser greifen können."); +static const u8 gBerryDescriptionPart1_Mago[] = _("Die BEERE hat Ausbeulungen. Je mehr"); +static const u8 gBerryDescriptionPart2_Mago[] = _("Beulen, desto schmackhafter ist sie."); +static const u8 gBerryDescriptionPart1_Aguav[] = _("Die Blume ist zart. Sie ist fähig,"); +static const u8 gBerryDescriptionPart2_Aguav[] = _("ohne Licht wachsen zu können."); +static const u8 gBerryDescriptionPart1_Iapapa[] = _("Die BEERE ist groß und sauer."); +static const u8 gBerryDescriptionPart2_Iapapa[] = _("Sie braucht einen Tag zum Wachsen."); +static const u8 gBerryDescriptionPart1_Razz[] = _("Diese rote BEERE schmeckt etwas"); +static const u8 gBerryDescriptionPart2_Razz[] = _("scharf. Sie wächst in nur 4 Stunden."); +static const u8 gBerryDescriptionPart1_Bluk[] = _("Die BEERE ist außen blau, verfärbt"); +static const u8 gBerryDescriptionPart2_Bluk[] = _("sich im Mund aber schwarz."); +static const u8 gBerryDescriptionPart1_Nanab[] = _("Diese BEERE war die 7., die auf der"); +static const u8 gBerryDescriptionPart2_Nanab[] = _("Welt entdeckt wurde. Sie ist süß."); +static const u8 gBerryDescriptionPart1_Wepear[] = _("Die Blume ist klein und weiß. Angenehm"); +static const u8 gBerryDescriptionPart2_Wepear[] = _("bitter und sauer zugleich."); +static const u8 gBerryDescriptionPart1_Pinap[] = _("Wind und Kälte verträgt sie nicht."); +static const u8 gBerryDescriptionPart2_Pinap[] = _("Fruchtfleisch: Scharf. Haut: Sauer."); +static const u8 gBerryDescriptionPart1_Pomeg[] = _("Egal wie viel Wasser sie bekommt, sie"); +static const u8 gBerryDescriptionPart2_Pomeg[] = _("trägt immer bis zu 6 BEEREN."); +static const u8 gBerryDescriptionPart1_Kelpsy[] = _("Eine Seltenheit. Geformt wie eine"); +static const u8 gBerryDescriptionPart2_Kelpsy[] = _("Wurzel. Hat eine große Blume."); +static const u8 gBerryDescriptionPart1_Qualot[] = _("Liebt das Wasser. Wächst besonders"); +static const u8 gBerryDescriptionPart2_Qualot[] = _("gut in regenreichen Gegenden."); +static const u8 gBerryDescriptionPart1_Hondew[] = _("Eine wertvolle und seltene BEERE."); +static const u8 gBerryDescriptionPart2_Hondew[] = _("Sie ist sehr schmackhaft."); +static const u8 gBerryDescriptionPart1_Grepa[] = _("Die BEERE ist zart und von runder"); +static const u8 gBerryDescriptionPart2_Grepa[] = _("Form. Aber sie ist unglaublich sauer!"); +static const u8 gBerryDescriptionPart1_Tamato[] = _("Die Schärfe der BEERE verbrennt die"); +static const u8 gBerryDescriptionPart2_Tamato[] = _("Lippen. Sie braucht Zeit zum Wachsen."); +static const u8 gBerryDescriptionPart1_Cornn[] = _("Eine BEERE aus alten Zeiten. Wächst"); +static const u8 gBerryDescriptionPart2_Cornn[] = _("nur, wenn in großen Mengen gepflanzt."); +static const u8 gBerryDescriptionPart1_Magost[] = _("Eine BEERE, die für ihren feinen, aus-"); +static const u8 gBerryDescriptionPart2_Magost[] = _("gewogenen Geschmack bekannt ist."); +static const u8 gBerryDescriptionPart1_Rabuta[] = _("Eine Seltenheit, die über und über mit"); +static const u8 gBerryDescriptionPart2_Rabuta[] = _("Haaren bewachsen ist. Sehr bitter!"); +static const u8 gBerryDescriptionPart1_Nomel[] = _("Sehr sauer. Ein Biss betäubt die"); +static const u8 gBerryDescriptionPart2_Nomel[] = _("Geschmacksnerven für 3 Tage!"); +static const u8 gBerryDescriptionPart1_Spelon[] = _("Die leuchtend rote BEERE ist sehr"); +static const u8 gBerryDescriptionPart2_Spelon[] = _("scharf. Gibt scharfe Substanzen ab!"); +static const u8 gBerryDescriptionPart1_Pamtre[] = _("Wird vom Meer angespült. Sie wächst"); +static const u8 gBerryDescriptionPart2_Pamtre[] = _("an einem anderen Ort."); +static const u8 gBerryDescriptionPart1_Watmel[] = _("Eine große BEERE, 25 cm groß."); +static const u8 gBerryDescriptionPart2_Watmel[] = _("Außergewöhnlich süß."); +static const u8 gBerryDescriptionPart1_Durin[] = _("Bitter schon ihr Anblick! Sie ist so"); +static const u8 gBerryDescriptionPart2_Durin[] = _("bitter, dass niemand sie pur isst."); +static const u8 gBerryDescriptionPart1_Belue[] = _("Sie glänzt, sieht zart aus, ist extrem"); +static const u8 gBerryDescriptionPart2_Belue[] = _("sauer und braucht Zeit zum Wachsen."); +static const u8 gBerryDescriptionPart1_Liechi[] = _("Eine geheimnisvolle BEERE. Man sagt,"); +static const u8 gBerryDescriptionPart2_Liechi[] = _("sie enthalte die Kraft des Meeres."); +static const u8 gBerryDescriptionPart1_Ganlon[] = _("Eine geheimnisvolle BEERE. Man sagt,"); +static const u8 gBerryDescriptionPart2_Ganlon[] = _("sie enthalte die Kraft des Landes."); +static const u8 gBerryDescriptionPart1_Salac[] = _("Eine geheimnisvolle BEERE. Man sagt,"); +static const u8 gBerryDescriptionPart2_Salac[] = _("sie enthalte die Kraft des Himmels."); +static const u8 gBerryDescriptionPart1_Petaya[] = _("Eine geheimnisvolle BEERE. Man sagt,"); +static const u8 gBerryDescriptionPart2_Petaya[] = _("sie enthalte die Kraft allen Lebens."); +static const u8 gBerryDescriptionPart1_Apicot[] = _("Eine rätselhafte BEERE. Man kann"); +static const u8 gBerryDescriptionPart2_Apicot[] = _("nicht sagen, wie und was sie ist."); +static const u8 gBerryDescriptionPart1_Lansat[] = _("Eine legendäre BEERE. Sie zu"); +static const u8 gBerryDescriptionPart2_Lansat[] = _("tragen bringt Freude."); +static const u8 gBerryDescriptionPart1_Starf[] = _("So stark, dass sie an den Rand der"); +static const u8 gBerryDescriptionPart2_Starf[] = _("Welt verbannt wurde. Ein Märchen?"); +static const u8 gBerryDescriptionPart1_Enigma[] = _("Eine enigmatische BEERE. Sie scheint"); +static const u8 gBerryDescriptionPart2_Enigma[] = _("die Macht der Sterne zu besitzen."); #endif const struct Berry gBerries[] = @@ -972,7 +978,7 @@ const struct Berry gBerries[] = }, }; -const struct BerryTree gBlankBerryTree = {0}; +static const struct BerryTree gBlankBerryTree = {0}; extern u8 S_BerryTree[]; extern u16 gScriptLastTalked; @@ -980,7 +986,18 @@ extern u16 gSpecialVar_0x8004; extern u16 gSpecialVar_0x8005; extern u16 gSpecialVar_0x8006; +/* + An enigma berry is a type of berry which functions + as though it is a custom berry. Because it behaves + like its a custom berry, it doesn't hold an identity + represented in its icons or descriptions, leaving its + information to be decided by the e-reader cards + which were intended to deliver these custom + berries. +*/ + // unused +// this could be static, but making it so causes a compile-time warning. void ClearEnigmaBerries(void) { CpuFill16(0, &gSaveBlock1.enigmaBerry, sizeof(gSaveBlock1.enigmaBerry)); @@ -988,17 +1005,19 @@ void ClearEnigmaBerries(void) void SetEnigmaBerry(u8 *src) { + // initialize the enigma berry by copying the data from the script. u32 i; u8 *dest = (u8*)&gSaveBlock1.enigmaBerry; for (i = 0; i < sizeof(gSaveBlock1.enigmaBerry); i++) dest[i] = src[i]; + // at this point, the description pointer is not yet initialized. we need to initialize it since we dont know where in memory this is going to be. set the berry desc pointers to the EnigmaBerry struct's description arrays since these are where the descriptions are stored. gSaveBlock1.enigmaBerry.berry.description1 = gSaveBlock1.enigmaBerry.description1; gSaveBlock1.enigmaBerry.berry.description2 = gSaveBlock1.enigmaBerry.description2; } -u32 GetEnigmaBerryChecksum(struct EnigmaBerry *enigmaBerry) +static u32 GetEnigmaBerryChecksum(struct EnigmaBerry *enigmaBerry) { const u8 *description1; const u8 *description2; @@ -1006,10 +1025,11 @@ u32 GetEnigmaBerryChecksum(struct EnigmaBerry *enigmaBerry) u32 checksum; u8 *dest; + // the description pointers could be pointing to anywhere in memory. we do not want these pointers to factor into the checksum as it will produce a different result every time: so back the pointers up and set them to null so the checksum is safe to calculate. description1 = gSaveBlock1.enigmaBerry.berry.description1; description2 = gSaveBlock1.enigmaBerry.berry.description2; - gSaveBlock1.enigmaBerry.berry.description1 = 0; - gSaveBlock1.enigmaBerry.berry.description2 = 0; + gSaveBlock1.enigmaBerry.berry.description1 = NULL; + gSaveBlock1.enigmaBerry.berry.description2 = NULL; dest = (u8*)enigmaBerry; checksum = 0; @@ -1018,17 +1038,19 @@ u32 GetEnigmaBerryChecksum(struct EnigmaBerry *enigmaBerry) checksum += dest[i]; } + // the checksum is calculated: the descriptions are safe to restore now. gSaveBlock1.enigmaBerry.berry.description1 = description1; gSaveBlock1.enigmaBerry.berry.description2 = description2; return checksum; } +// due to e-reader scans being particularly volatile to failure, it is a requirement to check for their integrity here due to scans possibly failing to produce the correct result. bool32 IsEnigmaBerryValid(void) { - if (!gSaveBlock1.enigmaBerry.berry.stageDuration) + if (gSaveBlock1.enigmaBerry.berry.stageDuration == 0) return FALSE; - if (!gSaveBlock1.enigmaBerry.berry.maxYield) + if (gSaveBlock1.enigmaBerry.berry.maxYield == 0) return FALSE; if (GetEnigmaBerryChecksum(&gSaveBlock1.enigmaBerry) != gSaveBlock1.enigmaBerry.checksum) return FALSE; @@ -1037,37 +1059,42 @@ bool32 IsEnigmaBerryValid(void) const struct Berry *GetBerryInfo(u8 berry) { - if (berry == 0x2B && IsEnigmaBerryValid()) + // when getting the pointer to the berry info, enigma berries are handled differently. if your berry is an Enigma Berry and its checksum is valid, fetch the pointer to its information in the save block. + if (berry == GETBERRYID(ITEM_ENIGMA_BERRY) && IsEnigmaBerryValid()) return &gSaveBlock1.enigmaBerry.berry; else { - if (berry == 0 || berry > 0x2B) - berry = 1; + // invalid berries will be flattened into a cheri berry. Interestingly, if your berry was an enigma berry whos checksum failed, the game will use the Enigma Berry information for this: meaning if you see the Enigma Berry information, its actually because the checksum failed. + if (berry == BERRY_NONE || berry > GETBERRYID(LAST_BERRY)) + berry = GETBERRYID(FIRST_BERRY); return &gBerries[berry - 1]; } } -struct BerryTree *GetBerryTreeInfo(u8 id) +// the save file can handle up to a number of 128 berry trees as indicated by its definition in global.h. Interestingly, this function does not check that limit of 128. +static struct BerryTree *GetBerryTreeInfo(u8 id) { return &gSaveBlock1.berryTrees[id]; } +// this was called because the berry script was successful: meaning the player chose to water the tree. We need to check for the current tree stage and set the appropriate water flag to true. bool32 FieldObjectInteractionWaterBerryTree(void) { + // GetBerryTreeInfo does not sanitize the tree retrieved, but there are no known instances where this can cause problems. struct BerryTree *tree = GetBerryTreeInfo(FieldObjectGetBerryTreeId(gSelectedMapObject)); switch (tree->stage) { - case 1: + case BERRY_STAGE_PLANTED: tree->watered1 = TRUE; break; - case 2: + case BERRY_STAGE_SPROUTED: tree->watered2 = TRUE; break; - case 3: + case BERRY_STAGE_TALLER: tree->watered3 = TRUE; break; - case 4: + case BERRY_STAGE_FLOWERING: tree->watered4 = TRUE; break; default: @@ -1076,10 +1103,10 @@ bool32 FieldObjectInteractionWaterBerryTree(void) return TRUE; } -bool8 IsPlayerFacingPlantedBerryTree(void) +bool8 IsPlayerFacingUnplantedSoil(void) { - if (GetFieldObjectScriptPointerForComparison() == S_BerryTree - && GetStageByBerryTreeId(FieldObjectGetBerryTreeId(gSelectedMapObject)) == 0) + if (GetFieldObjectScriptPointerPlayerFacing() == S_BerryTree + && GetStageByBerryTreeId(FieldObjectGetBerryTreeId(gSelectedMapObject)) == BERRY_STAGE_NO_BERRY) return TRUE; else return FALSE; @@ -1087,7 +1114,7 @@ bool8 IsPlayerFacingPlantedBerryTree(void) bool8 TryToWaterBerryTree(void) { - if (GetFieldObjectScriptPointerForComparison() != S_BerryTree) + if (GetFieldObjectScriptPointerPlayerFacing() != S_BerryTree) return FALSE; else return FieldObjectInteractionWaterBerryTree(); @@ -1099,70 +1126,75 @@ void ClearBerryTrees(void) struct SaveBlock1 *saveBlock1 = &gSaveBlock1; struct BerryTree berryTree = gBlankBerryTree; - for (i = 0; i < (u8)ARRAY_COUNT(saveBlock1->berryTrees); i++) // casting to u8 fixes a mismatched signed compare. what + for (i = 0; i < MAX_BERRY_TREES; i++) saveBlock1->berryTrees[i] = berryTree; } -bool32 BerryTreeGrow(struct BerryTree *tree) +// when the player does not interact with the tree for a period of time, this is called to advance the grow state. +static bool32 BerryTreeGrow(struct BerryTree *tree) { - if (tree->growthSparkle) + if (tree->growthSparkle != FALSE) return FALSE; switch (tree->stage) { - case 0: + case BERRY_STAGE_NO_BERRY: return FALSE; - case 4: + case BERRY_STAGE_FLOWERING: tree->berryYield = CalcBerryYield(tree); - case 1: - case 2: - case 3: + case BERRY_STAGE_PLANTED: + case BERRY_STAGE_SPROUTED: + case BERRY_STAGE_TALLER: tree->stage++; break; - case 5: + case BERRY_STAGE_BERRIES: tree->watered1 = 0; tree->watered2 = 0; tree->watered3 = 0; tree->watered4 = 0; tree->berryYield = 0; - tree->stage = 2; - if (++tree->regrowthCount == 10) + tree->stage = BERRY_STAGE_SPROUTED; + if (++tree->regrowthCount == BERRY_REGROW_LIMIT) *tree = gBlankBerryTree; break; } return TRUE; } -void BerryTreeTimeUpdate(s32 minutes) +// totalMinutes is how long its been since the last berry tree update. +void BerryTreeTimeUpdate(s32 totalMinutes) { int i; struct BerryTree *tree; - for (i = 0; i < (u8)ARRAY_COUNT(gSaveBlock1.berryTrees); i++) + for (i = 0; i < MAX_BERRY_TREES; i++) { tree = &gSaveBlock1.berryTrees[i]; - if (tree->berry && tree->stage && !tree->growthSparkle) + if (tree->berry != BERRY_NONE && tree->stage != BERRY_STAGE_NO_BERRY && tree->growthSparkle == FALSE) { - if (minutes >= GetStageDurationByBerryType(tree->berry) * 71) + // the player has waited too long to water the berry. Reset the tree. This is because if the berry state is not in the unwatered state, the tree will grow anyway despite this check, which means BerryTreeGrow will handle the regrow process for this, removing the need for this check. This only handles the unwatered soil state. + if (totalMinutes >= GetStageDurationByBerryType(tree->berry) * 71) { *tree = gBlankBerryTree; } else { - s32 time = minutes; + // not sure why Game Freak thought a temporary variable was necessary. because time is altered below, perhaps they thought it was unsafe to change it, even though that is not how passed arguments behave. + s32 time = totalMinutes; while (time != 0) { if (tree->minutesUntilNextStage > time) { - tree->minutesUntilNextStage -= time; + tree->minutesUntilNextStage -= time; // its been X minutes since the last berry update, so update minutesUntilNextStage appropriately to match the time offset that has passed since the update. break; } + // perform the subtraction the other way around to get the number of minutes since the inferred stage update that occured, since minutesUntilNextStage is <= time. we may need this variable to simulate multiple berry cycles in the while loop. time -= tree->minutesUntilNextStage; - tree->minutesUntilNextStage = GetStageDurationByBerryType(tree->berry); - if (!BerryTreeGrow(tree)) + tree->minutesUntilNextStage = GetStageDurationByBerryType(tree->berry); // since the tree was inferred to update, set the new minutesUntilNextStage. + if (BerryTreeGrow(tree) == FALSE) break; - if (tree->stage == 5) + if (tree->stage == BERRY_STAGE_BERRIES) tree->minutesUntilNextStage *= 4; } } @@ -1170,7 +1202,7 @@ void BerryTreeTimeUpdate(s32 minutes) } } -void PlantBerryTree(u8 id, u8 berry, u8 stage, bool8 sparkle) +void PlantBerryTree(u8 id, u8 berry, u8 stage, bool8 noSparkle) { struct BerryTree *tree = GetBerryTreeInfo(id); @@ -1178,12 +1210,12 @@ void PlantBerryTree(u8 id, u8 berry, u8 stage, bool8 sparkle) tree->berry = berry; tree->minutesUntilNextStage = GetStageDurationByBerryType(berry); tree->stage = stage; - if (stage == 5) + if (stage == BERRY_STAGE_BERRIES) { tree->berryYield = CalcBerryYield(tree); tree->minutesUntilNextStage *= 4; } - if (!sparkle) + if (noSparkle == FALSE) { tree->growthSparkle = TRUE; } @@ -1209,19 +1241,19 @@ u8 ItemIdToBerryType(u16 item) u16 berry = item - FIRST_BERRY; if (berry > LAST_BERRY - FIRST_BERRY) - return 1; + return GETBERRYID(FIRST_BERRY); else - return item - FIRST_BERRY + 1; + return GETBERRYID(item); } -u16 BerryTypeToItemId(u16 berry) +static u16 BerryTypeToItemId(u16 berry) { u16 item = berry - 1; if (item > LAST_BERRY - FIRST_BERRY) return FIRST_BERRY; else - return berry + FIRST_BERRY - 1; + return GETITEMID(berry); } void GetBerryNameByBerryType(u8 berry, u8 *string) @@ -1232,10 +1264,10 @@ void GetBerryNameByBerryType(u8 berry, u8 *string) void ResetBerryTreeSparkleFlag(u8 id) { - GetBerryTreeInfo(id)->growthSparkle = 0; + GetBerryTreeInfo(id)->growthSparkle = FALSE; } -u8 BerryTreeGetNumStagesWatered(struct BerryTree *tree) +static u8 BerryTreeGetNumStagesWatered(struct BerryTree *tree) { u8 count = 0; @@ -1250,18 +1282,20 @@ u8 BerryTreeGetNumStagesWatered(struct BerryTree *tree) return count; } -u8 GetNumStagesWateredByBerryTreeId(u8 id) +static u8 GetNumStagesWateredByBerryTreeId(u8 id) { return BerryTreeGetNumStagesWatered(GetBerryTreeInfo(id)); } -u8 CalcBerryYieldInternal(u16 max, u16 min, u8 water) +static u8 CalcBerryYieldInternal(u16 max, u16 min, u8 water) { u32 randMin; u32 randMax; u32 rand; u32 extraYield; + // depending on if the player gave the tree plenty of water, berry yield will be affected proportionally. + if (water == 0) return min; else @@ -1270,7 +1304,7 @@ u8 CalcBerryYieldInternal(u16 max, u16 min, u8 water) randMax = (max - min) * (water); rand = randMin + Random() % (randMax - randMin + 1); - if ((rand & 3) > 1) + if ((rand % 4) > 1) extraYield = rand / 4 + 1; else extraYield = rand / 4; @@ -1278,7 +1312,7 @@ u8 CalcBerryYieldInternal(u16 max, u16 min, u8 water) } } -u8 CalcBerryYield(struct BerryTree *tree) +static u8 CalcBerryYield(struct BerryTree *tree) { const struct Berry *berry = GetBerryInfo(tree->berry); u8 min = berry->minYield; @@ -1287,12 +1321,12 @@ u8 CalcBerryYield(struct BerryTree *tree) return CalcBerryYieldInternal(max, min, BerryTreeGetNumStagesWatered(tree)); } -u8 GetBerryCountByBerryTreeId(u8 id) +static u8 GetBerryCountByBerryTreeId(u8 id) { return gSaveBlock1.berryTrees[id].berryYield; } -u16 GetStageDurationByBerryType(u8 berry) +static u16 GetStageDurationByBerryType(u8 berry) { return GetBerryInfo(berry)->stageDuration * 60; } @@ -1301,18 +1335,18 @@ void FieldObjectInteractionGetBerryTreeData(void) { u8 id; u8 berry; - u8 unk; + u8 localId; u8 group; u8 num; id = FieldObjectGetBerryTreeId(gSelectedMapObject); berry = GetBerryTypeByBerryTreeId(id); ResetBerryTreeSparkleFlag(id); - unk = gScriptLastTalked; + localId = gScriptLastTalked; num = gSaveBlock1.location.mapNum; group = gSaveBlock1.location.mapGroup; - if (sub_8060234(unk, num, group)) - gSpecialVar_0x8004 = 0xFF; + if (IsBerryTreeSparkling(localId, num, group)) + gSpecialVar_0x8004 = BERRY_STAGE_SPARKLING; // we cannot allow the player to grow/interact with the tree while the tree is undergoing the sparkling effect, so set the special var to the sparkling state and let the event script process the flag. else gSpecialVar_0x8004 = GetStageByBerryTreeId(id); gSpecialVar_0x8005 = GetNumStagesWateredByBerryTreeId(id); @@ -1320,7 +1354,7 @@ void FieldObjectInteractionGetBerryTreeData(void) GetBerryNameByBerryType(berry, gStringVar1); } -void sub_80B4EE4(void) +void Berry_FadeAndGoToBerryBagMenu(void) { SetMainCallback2(sub_80A68CC); } @@ -1347,11 +1381,12 @@ void FieldObjectInteractionRemoveBerryTree(void) sub_8060288(gScriptLastTalked, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup); } -u8 PlayerHasBerries(void) +bool8 PlayerHasBerries(void) { return IsBagPocketNonEmpty(BAG_BERRIES); } +// whenever the player is not within view of the berry tree during its sparkle state, the sparkle state will be reset. void ResetBerryTreeSparkleFlags(void) { s16 cam_left; @@ -1369,7 +1404,7 @@ void ResetBerryTreeSparkleFlags(void) bottom = top + 8; for (i = 0; i < (u8)ARRAY_COUNT(gSaveBlock1.mapObjects); i++) { - if (gMapObjects[i].active && gMapObjects[i].animPattern == 12) + if (gMapObjects[i].active && gMapObjects[i].animPattern == 12) // is the object an active berry tree? { cam_left = gMapObjects[i].coords2.x; cam_top = gMapObjects[i].coords2.y; diff --git a/src/field/field_control_avatar.c b/src/field/field_control_avatar.c index 65357ac83..397523b07 100644 --- a/src/field/field_control_avatar.c +++ b/src/field/field_control_avatar.c @@ -856,7 +856,8 @@ u8 sub_8068F18(void) return 0; } -u8 *GetFieldObjectScriptPointerForComparison(void) +// GetFieldObjectScriptPointerPlayerFacing +u8 *GetFieldObjectScriptPointerPlayerFacing(void) { u8 r4; struct MapPosition position; diff --git a/src/field/field_map_obj.c b/src/field/field_map_obj.c index 9d37d90ad..0e1ce2a31 100644 --- a/src/field/field_map_obj.c +++ b/src/field/field_map_obj.c @@ -5549,17 +5549,16 @@ static bool8 DoesObjectCollideWithObjectAt(struct MapObject *mapObject, s16 x, s return 0; } -bool8 sub_8060234(u8 localId, u8 mapNum, u8 mapGroup) +// this function is only used in berry.c, but its unknown whether its intended context is the berry tree check or if its checking for the flickering. +bool8 IsBerryTreeSparkling(u8 localId, u8 mapNum, u8 mapGroup) { u8 mapObjectId; + if (!TryGetFieldObjectIdByLocalIdAndMap(localId, mapNum, mapGroup, &mapObjectId)) - { if (gSprites[gMapObjects[mapObjectId].spriteId].data7 & 2) - { - return 1; - } - } - return 0; + return TRUE; + + return FALSE; } void sub_8060288(u8 localId, u8 mapNum, u8 mapGroup) diff --git a/src/field/field_special_scene.c b/src/field/field_special_scene.c index 255b1d42b..5758929b6 100644 --- a/src/field/field_special_scene.c +++ b/src/field/field_special_scene.c @@ -94,8 +94,7 @@ s16 GetTruckBoxMovement(int a1) // for the box movement? void Task_Truck1(u8 taskId) { s16 *data = gTasks[taskId].data; - s16 cameraYpan; - s16 cameraXpan = 0; + s16 cameraYpan, cameraXpan = 0; s16 box1, box2, box3; box1 = GetTruckBoxMovement(data[0] + 30) * 4; // top box. diff --git a/src/field/item_use.c b/src/field/item_use.c index 68da27fdb..14b13ca3b 100644 --- a/src/field/item_use.c +++ b/src/field/item_use.c @@ -780,7 +780,7 @@ void ItemUseOutOfBattle_SSTicket(u8 taskId) void sub_80C9C7C(u8 taskId) { - if (IsPlayerFacingPlantedBerryTree() == TRUE) + if (IsPlayerFacingUnplantedSoil() == TRUE) { gFieldItemUseCallback = sub_80C9D00; gFieldCallback = ExecuteItemUseFromBlackPalette; -- cgit v1.2.3 From e509322468b8b780fbfb81ed871de065ec3df8aa Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Mon, 23 Oct 2017 19:48:17 -0400 Subject: fixes --- src/field/berry.c | 3 +++ src/field/field_control_avatar.c | 1 - 2 files changed, 3 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/field/berry.c b/src/field/berry.c index 5127a3a4f..7482c3f4d 100644 --- a/src/field/berry.c +++ b/src/field/berry.c @@ -996,6 +996,9 @@ extern u16 gSpecialVar_0x8006; berries. */ +static u8 CalcBerryYield(struct BerryTree *tree); +static u16 GetStageDurationByBerryType(u8 berry); + // unused // this could be static, but making it so causes a compile-time warning. void ClearEnigmaBerries(void) diff --git a/src/field/field_control_avatar.c b/src/field/field_control_avatar.c index 397523b07..e9dd0e9a6 100644 --- a/src/field/field_control_avatar.c +++ b/src/field/field_control_avatar.c @@ -856,7 +856,6 @@ u8 sub_8068F18(void) return 0; } -// GetFieldObjectScriptPointerPlayerFacing u8 *GetFieldObjectScriptPointerPlayerFacing(void) { u8 r4; -- cgit v1.2.3 From 4f575c8dc4779d1756486322fc1e7bcf0875506e Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Mon, 23 Oct 2017 19:48:59 -0400 Subject: oops --- src/field/berry.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/field/berry.c b/src/field/berry.c index 7482c3f4d..64e2905a8 100644 --- a/src/field/berry.c +++ b/src/field/berry.c @@ -1136,7 +1136,7 @@ void ClearBerryTrees(void) // when the player does not interact with the tree for a period of time, this is called to advance the grow state. static bool32 BerryTreeGrow(struct BerryTree *tree) { - if (tree->growthSparkle != FALSE) + if (tree->growthSparkle) return FALSE; switch (tree->stage) { -- cgit v1.2.3 From cc7ee35fe3cb3cd4135c1c2fbd4e275018cff27a Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Mon, 23 Oct 2017 20:03:34 -0400 Subject: edit temp var comment. --- src/field/berry.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/field/berry.c b/src/field/berry.c index 64e2905a8..16a4d2762 100644 --- a/src/field/berry.c +++ b/src/field/berry.c @@ -1182,7 +1182,7 @@ void BerryTreeTimeUpdate(s32 totalMinutes) } else { - // not sure why Game Freak thought a temporary variable was necessary. because time is altered below, perhaps they thought it was unsafe to change it, even though that is not how passed arguments behave. + // because time is altered below, perhaps they thought it was unsafe to change it, even though that is not how passed arguments behave. s32 time = totalMinutes; while (time != 0) -- cgit v1.2.3 From e28049651fb7f9f5aa6cbb70961d18e54f9e1721 Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Mon, 23 Oct 2017 20:13:31 -0400 Subject: fix bad label --- src/engine/clock.c | 10 +++++----- src/field/berry.c | 7 +++---- 2 files changed, 8 insertions(+), 9 deletions(-) (limited to 'src') diff --git a/src/engine/clock.c b/src/engine/clock.c index 12b82018d..cb8af64a8 100644 --- a/src/engine/clock.c +++ b/src/engine/clock.c @@ -61,17 +61,17 @@ static void UpdatePerDay(struct Time *time) static void UpdatePerMinute(struct Time *time) { struct Time newTime; - s32 totalMinutes; + s32 minutesPassed; CalcTimeDifference(&newTime, &gSaveBlock2.lastBerryTreeUpdate, time); - totalMinutes = 1440 * newTime.days + 60 * newTime.hours + newTime.minutes; + minutesPassed = 1440 * newTime.days + 60 * newTime.hours + newTime.minutes; - if (totalMinutes == 0) // do not do the update for the first minute. + if (minutesPassed == 0) // do not do the update for the first minute. return; - if (totalMinutes > -1) // do not perform an update on invalid totalMinutes. + if (minutesPassed > -1) // do not perform an update on invalid minutesPassed. { - BerryTreeTimeUpdate(totalMinutes); + BerryTreeTimeUpdate(minutesPassed); gSaveBlock2.lastBerryTreeUpdate = *time; } } diff --git a/src/field/berry.c b/src/field/berry.c index 16a4d2762..bbb643b10 100644 --- a/src/field/berry.c +++ b/src/field/berry.c @@ -1163,8 +1163,7 @@ static bool32 BerryTreeGrow(struct BerryTree *tree) return TRUE; } -// totalMinutes is how long its been since the last berry tree update. -void BerryTreeTimeUpdate(s32 totalMinutes) +void BerryTreeTimeUpdate(s32 minutesPassed) { int i; struct BerryTree *tree; @@ -1176,14 +1175,14 @@ void BerryTreeTimeUpdate(s32 totalMinutes) if (tree->berry != BERRY_NONE && tree->stage != BERRY_STAGE_NO_BERRY && tree->growthSparkle == FALSE) { // the player has waited too long to water the berry. Reset the tree. This is because if the berry state is not in the unwatered state, the tree will grow anyway despite this check, which means BerryTreeGrow will handle the regrow process for this, removing the need for this check. This only handles the unwatered soil state. - if (totalMinutes >= GetStageDurationByBerryType(tree->berry) * 71) + if (minutesPassed >= GetStageDurationByBerryType(tree->berry) * 71) { *tree = gBlankBerryTree; } else { // because time is altered below, perhaps they thought it was unsafe to change it, even though that is not how passed arguments behave. - s32 time = totalMinutes; + s32 time = minutesPassed; while (time != 0) { -- cgit v1.2.3 From c5241d9e80582b746d050ac4424393ccc1636d4b Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Mon, 23 Oct 2017 20:25:57 -0400 Subject: format comments --- src/field/berry.c | 60 +++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 45 insertions(+), 15 deletions(-) (limited to 'src') diff --git a/src/field/berry.c b/src/field/berry.c index bbb643b10..cd1fc5c94 100644 --- a/src/field/berry.c +++ b/src/field/berry.c @@ -1015,7 +1015,9 @@ void SetEnigmaBerry(u8 *src) for (i = 0; i < sizeof(gSaveBlock1.enigmaBerry); i++) dest[i] = src[i]; - // at this point, the description pointer is not yet initialized. we need to initialize it since we dont know where in memory this is going to be. set the berry desc pointers to the EnigmaBerry struct's description arrays since these are where the descriptions are stored. + // at this point, the description pointer is not yet initialized. we need to initialize it since + // we dont know where in memory this is going to be. set the berry desc pointers to the + // EnigmaBerry struct's description arrays since these are where the descriptions are stored. gSaveBlock1.enigmaBerry.berry.description1 = gSaveBlock1.enigmaBerry.description1; gSaveBlock1.enigmaBerry.berry.description2 = gSaveBlock1.enigmaBerry.description2; } @@ -1028,7 +1030,9 @@ static u32 GetEnigmaBerryChecksum(struct EnigmaBerry *enigmaBerry) u32 checksum; u8 *dest; - // the description pointers could be pointing to anywhere in memory. we do not want these pointers to factor into the checksum as it will produce a different result every time: so back the pointers up and set them to null so the checksum is safe to calculate. + // the description pointers could be pointing to anywhere in memory. we do not want these + // pointers to factor into the checksum as it will produce a different result every time: so + // back the pointers up and set them to null so the checksum is safe to calculate. description1 = gSaveBlock1.enigmaBerry.berry.description1; description2 = gSaveBlock1.enigmaBerry.berry.description2; gSaveBlock1.enigmaBerry.berry.description1 = NULL; @@ -1048,7 +1052,8 @@ static u32 GetEnigmaBerryChecksum(struct EnigmaBerry *enigmaBerry) return checksum; } -// due to e-reader scans being particularly volatile to failure, it is a requirement to check for their integrity here due to scans possibly failing to produce the correct result. +// due to e-reader scans being particularly volatile to failure, it is a requirement to check for +// their integrity here due to scans possibly failing to produce the correct result. bool32 IsEnigmaBerryValid(void) { if (gSaveBlock1.enigmaBerry.berry.stageDuration == 0) @@ -1062,28 +1067,37 @@ bool32 IsEnigmaBerryValid(void) const struct Berry *GetBerryInfo(u8 berry) { - // when getting the pointer to the berry info, enigma berries are handled differently. if your berry is an Enigma Berry and its checksum is valid, fetch the pointer to its information in the save block. + // when getting the pointer to the berry info, enigma berries are handled differently. if your + // berry is an Enigma Berry and its checksum is valid, fetch the pointer to its information in + // the save block. if (berry == GETBERRYID(ITEM_ENIGMA_BERRY) && IsEnigmaBerryValid()) return &gSaveBlock1.enigmaBerry.berry; else { - // invalid berries will be flattened into a cheri berry. Interestingly, if your berry was an enigma berry whos checksum failed, the game will use the Enigma Berry information for this: meaning if you see the Enigma Berry information, its actually because the checksum failed. + // invalid berries will be flattened into a cheri berry. Interestingly, if your berry was + // an enigma berry whos checksum failed, the game will use the Enigma Berry information + // for this: meaning if you see the Enigma Berry information, its actually because the + // checksum failed. if (berry == BERRY_NONE || berry > GETBERRYID(LAST_BERRY)) berry = GETBERRYID(FIRST_BERRY); return &gBerries[berry - 1]; } } -// the save file can handle up to a number of 128 berry trees as indicated by its definition in global.h. Interestingly, this function does not check that limit of 128. +// the save file can handle up to a number of 128 berry trees as indicated by its definition +// in global.h. Interestingly, this function does not check that limit of 128. static struct BerryTree *GetBerryTreeInfo(u8 id) { return &gSaveBlock1.berryTrees[id]; } -// this was called because the berry script was successful: meaning the player chose to water the tree. We need to check for the current tree stage and set the appropriate water flag to true. +// this was called because the berry script was successful: meaning the player chose to +// water the tree. We need to check for the current tree stage and set the appropriate +// water flag to true. bool32 FieldObjectInteractionWaterBerryTree(void) { - // GetBerryTreeInfo does not sanitize the tree retrieved, but there are no known instances where this can cause problems. + // GetBerryTreeInfo does not sanitize the tree retrieved, but there are no known + // instances where this can cause problems. struct BerryTree *tree = GetBerryTreeInfo(FieldObjectGetBerryTreeId(gSelectedMapObject)); switch (tree->stage) @@ -1133,7 +1147,8 @@ void ClearBerryTrees(void) saveBlock1->berryTrees[i] = berryTree; } -// when the player does not interact with the tree for a period of time, this is called to advance the grow state. +// when the player does not interact with the tree for a period of time, this is called +// to advance the grow state. static bool32 BerryTreeGrow(struct BerryTree *tree) { if (tree->growthSparkle) @@ -1174,24 +1189,33 @@ void BerryTreeTimeUpdate(s32 minutesPassed) if (tree->berry != BERRY_NONE && tree->stage != BERRY_STAGE_NO_BERRY && tree->growthSparkle == FALSE) { - // the player has waited too long to water the berry. Reset the tree. This is because if the berry state is not in the unwatered state, the tree will grow anyway despite this check, which means BerryTreeGrow will handle the regrow process for this, removing the need for this check. This only handles the unwatered soil state. + // the player has waited too long to water the berry. Reset the tree. This is because + // if the berry state is not in the unwatered state, the tree will grow anyway despite this + // check, which means BerryTreeGrow will handle the regrow process for this, removing the + // need for this check. This only handles the unwatered soil state. if (minutesPassed >= GetStageDurationByBerryType(tree->berry) * 71) { *tree = gBlankBerryTree; } else { - // because time is altered below, perhaps they thought it was unsafe to change it, even though that is not how passed arguments behave. + // because time is altered below, perhaps they thought it was unsafe to change it, even + // though that is not how passed arguments behave. s32 time = minutesPassed; while (time != 0) { if (tree->minutesUntilNextStage > time) { - tree->minutesUntilNextStage -= time; // its been X minutes since the last berry update, so update minutesUntilNextStage appropriately to match the time offset that has passed since the update. + // its been X minutes since the last berry update, so update + // minutesUntilNextStage appropriately to match the time offset + // that has passed since the update. + tree->minutesUntilNextStage -= time; break; } - // perform the subtraction the other way around to get the number of minutes since the inferred stage update that occured, since minutesUntilNextStage is <= time. we may need this variable to simulate multiple berry cycles in the while loop. + // perform the subtraction the other way around to get the number of minutes since + // the inferred stage update that occured, since minutesUntilNextStage is <= time. + // we may need this variable to simulate multiple berry cycles in the while loop. time -= tree->minutesUntilNextStage; tree->minutesUntilNextStage = GetStageDurationByBerryType(tree->berry); // since the tree was inferred to update, set the new minutesUntilNextStage. if (BerryTreeGrow(tree) == FALSE) @@ -1348,7 +1372,12 @@ void FieldObjectInteractionGetBerryTreeData(void) num = gSaveBlock1.location.mapNum; group = gSaveBlock1.location.mapGroup; if (IsBerryTreeSparkling(localId, num, group)) - gSpecialVar_0x8004 = BERRY_STAGE_SPARKLING; // we cannot allow the player to grow/interact with the tree while the tree is undergoing the sparkling effect, so set the special var to the sparkling state and let the event script process the flag. + { + // we cannot allow the player to grow/interact with the tree while the tree + // is undergoing the sparkling effect, so set the special var to the sparkling + // state and let the event script process the flag. + gSpecialVar_0x8004 = BERRY_STAGE_SPARKLING; + } else gSpecialVar_0x8004 = GetStageByBerryTreeId(id); gSpecialVar_0x8005 = GetNumStagesWateredByBerryTreeId(id); @@ -1388,7 +1417,8 @@ bool8 PlayerHasBerries(void) return IsBagPocketNonEmpty(BAG_BERRIES); } -// whenever the player is not within view of the berry tree during its sparkle state, the sparkle state will be reset. +// whenever the player is not within view of the berry tree during its sparkle state, the +// sparkle state will be reset. void ResetBerryTreeSparkleFlags(void) { s16 cam_left; -- cgit v1.2.3 From f90bc99a49a3d4fa60e96cd6fbcb546f8e3a1da0 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Mon, 23 Oct 2017 17:45:02 -0700 Subject: Move all battle_tower data into src/ --- src/battle_tower.c | 152 +++- src/data/battle_tower/trainers.h | 1700 ++++++++++++++++++++------------------ 2 files changed, 1047 insertions(+), 805 deletions(-) (limited to 'src') diff --git a/src/battle_tower.c b/src/battle_tower.c index ec1d1f9ec..507d2be10 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -85,18 +85,160 @@ const u16 gBattleTowerHeldItems[] = { #include "data/battle_tower/level_50_mons.h" #include "data/battle_tower/level_100_mons.h" +const u8 gUnknown_08405E60[] = { + 4, + 7, + 8, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 23, + 29, + 32, + 34, + 36, + 38, + 39, + 41, + 43, + 45, + 46, + 47, + 53, + 56, + 64, + 66, + 72, + 73, +}; + +const u8 gUnknown_08405E7E[] = { + 3, + 6, + 9, + 10, + 11, + 12, + 22, + 30, + 33, + 35, + 40, + 42, + 44, + 48, + 49, + 50, + 51, + 65, + 67, + 71, +}; + +const u8 gUnknown_08405E92[] = { + MAP_OBJ_GFX_HIKER, + MAP_OBJ_GFX_TUBER_M, + MAP_OBJ_GFX_MAN_4, + MAP_OBJ_GFX_BOY_4, + MAP_OBJ_GFX_MANIAC, + MAP_OBJ_GFX_RUNNING_TRIATHLETE_M, + MAP_OBJ_GFX_BLACK_BELT, + MAP_OBJ_GFX_MAN_6, + MAP_OBJ_GFX_MAN_6, + MAP_OBJ_GFX_CAMPER, + MAP_OBJ_GFX_MANIAC, + MAP_OBJ_GFX_PSYCHIC_M, + MAP_OBJ_GFX_GENTLEMAN, + MAP_OBJ_GFX_SCHOOL_KID_M, + MAP_OBJ_GFX_MAN_3, + MAP_OBJ_GFX_OLD_MAN_1, + MAP_OBJ_GFX_YOUNGSTER, + MAP_OBJ_GFX_FISHERMAN, + MAP_OBJ_GFX_CYCLING_TRIATHLETE_M, + MAP_OBJ_GFX_RUNNING_TRIATHLETE_M, + MAP_OBJ_GFX_RUNNING_TRIATHLETE_M, + MAP_OBJ_GFX_MAN_4, + MAP_OBJ_GFX_MAN_6, + MAP_OBJ_GFX_LITTLE_BOY_1, + MAP_OBJ_GFX_SAILOR, + MAP_OBJ_GFX_MANIAC, + MAP_OBJ_GFX_MAN_5, + MAP_OBJ_GFX_CAMPER, + MAP_OBJ_GFX_BUG_CATCHER, + MAP_OBJ_GFX_HIKER, +}; + +const u8 gUnknown_08405EB0[] = { + MAP_OBJ_GFX_WOMAN_3, + MAP_OBJ_GFX_TUBER_F, + MAP_OBJ_GFX_WOMAN_7, + MAP_OBJ_GFX_WOMAN_1, + MAP_OBJ_GFX_WOMAN_3, + MAP_OBJ_GFX_BEAUTY, + MAP_OBJ_GFX_LASS, + MAP_OBJ_GFX_GIRL_3, + MAP_OBJ_GFX_WOMAN_2, + MAP_OBJ_GFX_OLD_WOMAN_1, + MAP_OBJ_GFX_CYCLING_TRIATHLETE_F, + MAP_OBJ_GFX_RUNNING_TRIATHLETE_F, + MAP_OBJ_GFX_RUNNING_TRIATHLETE_F, + MAP_OBJ_GFX_GIRL_3, + MAP_OBJ_GFX_WOMAN_7, + MAP_OBJ_GFX_RUNNING_TRIATHLETE_F, + MAP_OBJ_GFX_PICNICKER, + MAP_OBJ_GFX_WOMAN_3, + MAP_OBJ_GFX_PICNICKER, + MAP_OBJ_GFX_LASS, +}; + +const u16 gBattleTowerBanlist[] = { + SPECIES_MEW, + SPECIES_MEWTWO, + SPECIES_HO_OH, + SPECIES_LUGIA, + SPECIES_CELEBI, + SPECIES_KYOGRE, + SPECIES_GROUDON, + SPECIES_RAYQUAZA, + SPECIES_JIRACHI, + SPECIES_DEOXYS, + 0xFFFF, +}; + +const u16 gUnknown_08405EDA[] = { + ITEM_HP_UP, + ITEM_PROTEIN, + ITEM_IRON, + ITEM_CALCIUM, + ITEM_CARBOS, + ITEM_ZINC, +}; + +const u16 gUnknown_08405EE6[] = { + ITEM_BRIGHT_POWDER, + ITEM_WHITE_HERB, + ITEM_QUICK_CLAW, + ITEM_LEFTOVERS, + ITEM_MENTAL_HERB, + ITEM_KINGS_ROCK, + ITEM_FOCUS_BAND, + ITEM_SCOPE_LENS, + ITEM_CHOICE_BAND, +}; + extern u8 gUnknown_08400E23[]; extern u8 gUnknown_08400E29[]; extern u8 gUnknown_08400E2E[]; extern u8 gUnknown_08400E30[]; -extern u16 gBattleTowerBanlist[]; extern u8 gTrainerClassToPicIndex[]; extern u8 gTrainerClassToNameIndex[]; -extern u8 gUnknown_08405EB0[]; -extern u8 gUnknown_08405E7E[]; -extern u8 gUnknown_08405E92[]; -extern u8 gUnknown_08405E60[]; extern void sub_8135C44(void); extern void sub_813601C(void); diff --git a/src/data/battle_tower/trainers.h b/src/data/battle_tower/trainers.h index 857231e61..b5eb3da7a 100644 --- a/src/data/battle_tower/trainers.h +++ b/src/data/battle_tower/trainers.h @@ -4,1400 +4,1500 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = .trainerClass = TRAINER_CLASS_YOUNGSTER, .name = _("ALVIN"), .teamFlags = 0x01, - .padding = 0, - .easyChat = { - EC_WORD_ARE, - EC_WORD_YOU, - EC_WORD_READY, - EC_WORD_QUES, - EC_WORD_HERE_I_COME, - EC_WORD_EXCL, + .greeting = { + .easyChat = { + EC_WORD_ARE, + EC_WORD_YOU, + EC_WORD_READY, + EC_WORD_QUES, + EC_WORD_HERE_I_COME, + EC_WORD_EXCL, + }, }, }, { .trainerClass = TRAINER_CLASS_BIRD_KEEPER, .name = _("DIRK"), .teamFlags = 0x01, - .padding = 0, - .easyChat = { - EC_WORD_OKAY, - EC_WORD_I_AM, - EC_WORD_GOING, - EC_WORD_FOR, - EC_WORD_IT, - EC_WORD_EXCL, + .greeting = { + .easyChat = { + EC_WORD_OKAY, + EC_WORD_I_AM, + EC_WORD_GOING, + EC_WORD_FOR, + EC_WORD_IT, + EC_WORD_EXCL, + }, }, }, { .trainerClass = TRAINER_CLASS_LADY, .name = _("CYBIL"), .teamFlags = 0x02, - .padding = 0, - .easyChat = { - EC_WORD_YOU_RE, - EC_WORD_A, - EC_WORD_PUSHOVER, - EC_WORD_LET_S, - EC_WORD_GET, - EC_WORD_GOING, + .greeting = { + .easyChat = { + EC_WORD_YOU_RE, + EC_WORD_A, + EC_WORD_PUSHOVER, + EC_WORD_LET_S, + EC_WORD_GET, + EC_WORD_GOING, + }, }, }, { .trainerClass = TRAINER_CLASS_BLACK_BELT, .name = _("CHEN"), .teamFlags = 0x05, - .padding = 0, - .easyChat = { - EC_WORD_MY, - EC_WORD_SPIRIT, - EC_WORD_IS, - EC_WORD_ENOUGH, - EC_WORD_SNORT, - EC_WORD_ARRGH, + .greeting = { + .easyChat = { + EC_WORD_MY, + EC_WORD_SPIRIT, + EC_WORD_IS, + EC_WORD_ENOUGH, + EC_WORD_SNORT, + EC_WORD_ARRGH, + }, }, }, { .trainerClass = TRAINER_CLASS_NINJA_BOY, .name = _("YOSHI"), .teamFlags = 0x05, - .padding = 0, - .easyChat = { - EC_WORD_GO, - EC_WORD_MY, - EC_WORD_POKEMON, - EC_WORD_FIGHT, - EC_WORD_THE, - EC_WORD_BATTLE, + .greeting = { + .easyChat = { + EC_WORD_GO, + EC_WORD_MY, + EC_WORD_POKEMON, + EC_WORD_FIGHT, + EC_WORD_THE, + EC_WORD_BATTLE, + }, }, }, { .trainerClass = TRAINER_CLASS_SCHOOL_KID_F, .name = _("TINA"), .teamFlags = 0x0A, - .padding = 0, - .easyChat = { - EC_WORD_STUDY, - EC_WORD_IS, - EC_WORD_BORING, - EC_WORD_LET_S, - EC_WORD_BATTLE, - EC_WORD_NOW, + .greeting = { + .easyChat = { + EC_WORD_STUDY, + EC_WORD_IS, + EC_WORD_BORING, + EC_WORD_LET_S, + EC_WORD_BATTLE, + EC_WORD_NOW, + }, }, }, { .trainerClass = TRAINER_CLASS_BUG_MANIAC, .name = _("COREY"), .teamFlags = 0x41, - .padding = 0, - .easyChat = { - EC_WORD_HEY, - EC_WORD_I, - EC_WORD_WILL, - EC_MOVE2(TRANSFORM), - EC_WORD_FOR, - EC_MOVE(STRENGTH), + .greeting = { + .easyChat = { + EC_WORD_HEY, + EC_WORD_I, + EC_WORD_WILL, + EC_MOVE2(TRANSFORM), + EC_WORD_FOR, + EC_MOVE(STRENGTH), + }, }, }, { .trainerClass = TRAINER_CLASS_FISHERMAN, .name = _("GORDON"), .teamFlags = 0x01, - .padding = 0, - .easyChat = { - EC_WORD_I, - EC_WORD_NEED, - EC_WORD_A, - EC_WORD_VACATION, - EC_WORD_RIGHT, - EC_WORD_NOW, + .greeting = { + .easyChat = { + EC_WORD_I, + EC_WORD_NEED, + EC_WORD_A, + EC_WORD_VACATION, + EC_WORD_RIGHT, + EC_WORD_NOW, + }, }, }, { .trainerClass = TRAINER_CLASS_TUBER_F, .name = _("ANN"), .teamFlags = 0x02, - .padding = 0, - .easyChat = { - EC_WORD_WE, - EC_WORD_ALL, - EC_WORD_ADORE, - EC_WORD_POKEMON, - EC_WORD_ABSOLUTELY, - EC_WORD_TRULY, + .greeting = { + .easyChat = { + EC_WORD_WE, + EC_WORD_ALL, + EC_WORD_ADORE, + EC_WORD_POKEMON, + EC_WORD_ABSOLUTELY, + EC_WORD_TRULY, + }, }, }, { .trainerClass = TRAINER_CLASS_POKEFAN_F, .name = _("JULIA"), .teamFlags = 0x42, - .padding = 0, - .easyChat = { - EC_WORD_I_AM, - EC_WORD_A, - EC_WORD_CUTE, - EC_WORD_LADY, - EC_WORD_YES, - EC_WORD_I_AM, + .greeting = { + .easyChat = { + EC_WORD_I_AM, + EC_WORD_A, + EC_WORD_CUTE, + EC_WORD_LADY, + EC_WORD_YES, + EC_WORD_I_AM, + }, }, }, { .trainerClass = TRAINER_CLASS_GENTLEMAN, .name = _("GREGORY"), .teamFlags = 0x01, - .padding = 0, - .easyChat = { - EC_WORD_I, - EC_WORD_THINK, - EC_WORD_WE, - EC_WORD_SHOULD, - EC_WORD_START, - EC_WORD_TODAY, + .greeting = { + .easyChat = { + EC_WORD_I, + EC_WORD_THINK, + EC_WORD_WE, + EC_WORD_SHOULD, + EC_WORD_START, + EC_WORD_TODAY, + }, }, }, { .trainerClass = TRAINER_CLASS_CAMPER, .name = _("KEITH"), .teamFlags = 0x01, - .padding = 0, - .easyChat = { - EC_WORD_YOU_RE, - EC_WORD_MY, - EC_WORD_FRIEND, - EC_WORD_FROM, - EC_WORD_NOW, - EC_WORD_ON, + .greeting = { + .easyChat = { + EC_WORD_YOU_RE, + EC_WORD_MY, + EC_WORD_FRIEND, + EC_WORD_FROM, + EC_WORD_NOW, + EC_WORD_ON, + }, }, }, { .trainerClass = TRAINER_CLASS_RUNNING_TRIATHLETE_F, .name = _("KENDRA"), .teamFlags = 0x0A, - .padding = 0, - .easyChat = { - EC_WORD_I_AM, - EC_MOVE(SWIFT), - EC_WORD_HOW, - EC_WORD_ABOUT, - EC_WORD_YOU, - EC_WORD_QUES, + .greeting = { + .easyChat = { + EC_WORD_I_AM, + EC_MOVE(SWIFT), + EC_WORD_HOW, + EC_WORD_ABOUT, + EC_WORD_YOU, + EC_WORD_QUES, + }, }, }, { .trainerClass = TRAINER_CLASS_HIKER, .name = _("DEV"), .teamFlags = 0x01, - .padding = 0, - .easyChat = { - EC_WORD_WAHAHAHA, - EC_WORD_I_AM, - EC_WORD_FEELING, - EC_WORD_LIKE, - EC_WORD_IT_S, - EC_MOVE2(PAY_DAY), + .greeting = { + .easyChat = { + EC_WORD_WAHAHAHA, + EC_WORD_I_AM, + EC_WORD_FEELING, + EC_WORD_LIKE, + EC_WORD_IT_S, + EC_MOVE2(PAY_DAY), + }, }, }, { .trainerClass = TRAINER_CLASS_BATTLE_GIRL, .name = _("CASSIE"), .teamFlags = 0x0A, - .padding = 0, - .easyChat = { - EC_WORD_YOU_RE, - EC_WORD_STRONG, - EC_WORD_AREN_T, - 0xFFFF, - EC_WORD_YOU, - EC_WORD_QUES, + .greeting = { + .easyChat = { + EC_WORD_YOU_RE, + EC_WORD_STRONG, + EC_WORD_AREN_T, + 0xFFFF, + EC_WORD_YOU, + EC_WORD_QUES, + }, }, }, { .trainerClass = TRAINER_CLASS_PSYCHIC_M, .name = _("JULIAN"), .teamFlags = 0x05, - .padding = 0, - .easyChat = { - EC_WORD_FUFUFU, - 0xFFFF, - EC_WORD_YOU, - EC_WORD_CAN_T, - EC_WORD_WIN, - EC_WORD_KID, + .greeting = { + .easyChat = { + EC_WORD_FUFUFU, + 0xFFFF, + EC_WORD_YOU, + EC_WORD_CAN_T, + EC_WORD_WIN, + EC_WORD_KID, + }, }, }, { .trainerClass = TRAINER_CLASS_LASS, .name = _("JOYCE"), .teamFlags = 0x02, - .padding = 0, - .easyChat = { - EC_WORD_BE, - EC_WORD_KIND, - EC_WORD_TO, - EC_WORD_THE, - EC_WORD_DIGITAL, - EC_WORD_IDOL, + .greeting = { + .easyChat = { + EC_WORD_BE, + EC_WORD_KIND, + EC_WORD_TO, + EC_WORD_THE, + EC_WORD_DIGITAL, + EC_WORD_IDOL, + }, }, }, { .trainerClass = TRAINER_CLASS_GUITARIST, .name = _("LES"), .teamFlags = 0x01, - .padding = 0, - .easyChat = { - EC_WORD_I_AM, - EC_WORD_GREAT, - EC_WORD_YOU_RE, - EC_WORD_JUST, - EC_WORD_RATHER, - EC_WORD_OKAY, + .greeting = { + .easyChat = { + EC_WORD_I_AM, + EC_WORD_GREAT, + EC_WORD_YOU_RE, + EC_WORD_JUST, + EC_WORD_RATHER, + EC_WORD_OKAY, + }, }, }, { .trainerClass = TRAINER_CLASS_RICH_BOY, .name = _("CLINTON"), .teamFlags = 0x01, - .padding = 0, - .easyChat = { - EC_WORD_I, - EC_WORD_HAVE, - EC_WORD_ROUGH_SKIN, - EC_WORD_I, - EC_WORD_NEED, - EC_WORD_NATURAL_CURE, + .greeting = { + .easyChat = { + EC_WORD_I, + EC_WORD_HAVE, + EC_WORD_ROUGH_SKIN, + EC_WORD_I, + EC_WORD_NEED, + EC_WORD_NATURAL_CURE, + }, }, }, { .trainerClass = TRAINER_CLASS_BUG_CATCHER, .name = _("LEWIS"), .teamFlags = 0x01, - .padding = 0, - .easyChat = { - EC_WORD_THIS, - EC_WORD_IS, - EC_WORD_EXCITING, - EC_WORD_CAN, - EC_WORD_I, - EC_WORD_WIN, + .greeting = { + .easyChat = { + EC_WORD_THIS, + EC_WORD_IS, + EC_WORD_EXCITING, + EC_WORD_CAN, + EC_WORD_I, + EC_WORD_WIN, + }, }, }, { .trainerClass = TRAINER_CLASS_PICNICKER, .name = _("RACHAEL"), .teamFlags = 0x02, - .padding = 0, - .easyChat = { - EC_WORD_I, - EC_WORD_LIKE, - EC_WORD_WALKING, - EC_WORD_WITH, - EC_WORD_MY, - EC_WORD_POKEMON, + .greeting = { + .easyChat = { + EC_WORD_I, + EC_WORD_LIKE, + EC_WORD_WALKING, + EC_WORD_WITH, + EC_WORD_MY, + EC_WORD_POKEMON, + }, }, }, { .trainerClass = TRAINER_CLASS_COLLECTOR, .name = _("HAROLD"), .teamFlags = 0x09, - .padding = 0, - .easyChat = { - EC_WORD_HERE, - EC_WORD_THEY, - EC_WORD_COME, - EC_WORD_MY, - EC_MOVE2(SUPERPOWER), - EC_WORD_POKEMON, + .greeting = { + .easyChat = { + EC_WORD_HERE, + EC_WORD_THEY, + EC_WORD_COME, + EC_WORD_MY, + EC_MOVE2(SUPERPOWER), + EC_WORD_POKEMON, + }, }, }, { .trainerClass = TRAINER_CLASS_TUBER_M, .name = _("KIPP"), .teamFlags = 0x01, - .padding = 0, - .easyChat = { - EC_WORD_I_AM, - EC_WORD_A, - EC_WORD_GENIUS, - EC_WORD_I, - EC_WORD_SHOULD, - EC_WORD_WIN, + .greeting = { + .easyChat = { + EC_WORD_I_AM, + EC_WORD_A, + EC_WORD_GENIUS, + EC_WORD_I, + EC_WORD_SHOULD, + EC_WORD_WIN, + }, }, }, { .trainerClass = TRAINER_CLASS_KINDLER, .name = _("IRWIN"), .teamFlags = 0x05, - .padding = 0, - .easyChat = { - EC_WORD_YOU, - EC_WORD_WILL, - EC_WORD_BE, - EC_WORD_FEELING, - EC_WORD_MY, - EC_WORD_FIRE, + .greeting = { + .easyChat = { + EC_WORD_YOU, + EC_WORD_WILL, + EC_WORD_BE, + EC_WORD_FEELING, + EC_WORD_MY, + EC_WORD_FIRE, + }, }, }, { .trainerClass = TRAINER_CLASS_PSYCHIC_F, .name = _("EILEEN"), .teamFlags = 0x0A, - .padding = 0, - .easyChat = { - EC_WORD_I, - EC_WORD_WILL, - EC_MOVE(ASTONISH), - EC_WORD_YOU, - EC_WORD_IN, - EC_WORD_BATTLE, + .greeting = { + .easyChat = { + EC_WORD_I, + EC_WORD_WILL, + EC_MOVE(ASTONISH), + EC_WORD_YOU, + EC_WORD_IN, + EC_WORD_BATTLE, + }, }, }, { .trainerClass = TRAINER_CLASS_SWIMMER_F, .name = _("ANNE"), .teamFlags = 0x02, - .padding = 0, - .easyChat = { - EC_WORD_SORRY, - EC_WORD_BUT, - EC_WORD_YOU, - EC_WORD_WILL, - EC_WORD_NOT, - EC_WORD_WIN, + .greeting = { + .easyChat = { + EC_WORD_SORRY, + EC_WORD_BUT, + EC_WORD_YOU, + EC_WORD_WILL, + EC_WORD_NOT, + EC_WORD_WIN, + }, }, }, { .trainerClass = TRAINER_CLASS_CYCLING_TRIATHLETE_F, .name = _("RUTH"), .teamFlags = 0x06, - .padding = 0, - .easyChat = { - EC_WORD_A, - EC_WORD_STRONG, - EC_WORD_GIRL, - EC_WORD_WANTS, - EC_WORD_TOUGH, - EC_WORD_POKEMON, + .greeting = { + .easyChat = { + EC_WORD_A, + EC_WORD_STRONG, + EC_WORD_GIRL, + EC_WORD_WANTS, + EC_WORD_TOUGH, + EC_WORD_POKEMON, + }, }, }, { .trainerClass = TRAINER_CLASS_POKEMANIAC, .name = _("JEREMY"), .teamFlags = 0x40, - .padding = 0, - .easyChat = { - EC_WORD_MY, - EC_WORD_POKEMON, - EC_WORD_ARE, - EC_WORD_COOL, - EC_WORD_YOURS, - EC_WORD_CAN_T_WIN, + .greeting = { + .easyChat = { + EC_WORD_MY, + EC_WORD_POKEMON, + EC_WORD_ARE, + EC_WORD_COOL, + EC_WORD_YOURS, + EC_WORD_CAN_T_WIN, + }, }, }, { .trainerClass = TRAINER_CLASS_SAILOR, .name = _("TREVOR"), .teamFlags = 0x09, - .padding = 0, - .easyChat = { - EC_WORD_MY, - EC_WORD_OPPONENT, - EC_WORD_IS, - EC_WORD_FINALLY, - EC_WORD_HERE, - EC_WORD_EXCELLENT, + .greeting = { + .easyChat = { + EC_WORD_MY, + EC_WORD_OPPONENT, + EC_WORD_IS, + EC_WORD_FINALLY, + EC_WORD_HERE, + EC_WORD_EXCELLENT, + }, }, }, { .trainerClass = TRAINER_CLASS_POKEMON_BREEDER_F, .name = _("COLETTE"), .teamFlags = 0x06, - .padding = 0, - .easyChat = { - EC_WORD_I, - EC_WORD_AM, - EC_WORD_HUNGRY, - EC_MOVE2(POUND), - EC_WORD_MY, - EC_MOVE2(BELLY_DRUM), + .greeting = { + .easyChat = { + EC_WORD_I, + EC_WORD_AM, + EC_WORD_HUNGRY, + EC_MOVE2(POUND), + EC_WORD_MY, + EC_MOVE2(BELLY_DRUM), + }, }, }, { .trainerClass = TRAINER_CLASS_HEX_MANIAC, .name = _("PAULA"), .teamFlags = 0x42, - .padding = 0, - .easyChat = { - EC_WORD_IT_S, - EC_WORD_HARD, - EC_WORD_TO, - EC_WORD_TAKE, - EC_WORD_UGLY, - EC_MOVE(SPITE), + .greeting = { + .easyChat = { + EC_WORD_IT_S, + EC_WORD_HARD, + EC_WORD_TO, + EC_WORD_TAKE, + EC_WORD_UGLY, + EC_MOVE(SPITE), + }, }, }, { .trainerClass = TRAINER_CLASS_RUIN_MANIAC, .name = _("STANLY"), .teamFlags = 0x41, - .padding = 0, - .easyChat = { - EC_WORD_ADVENTURE, - EC_WORD_AND, - EC_WORD_BATTLE, - EC_WORD_ARE, - EC_WORD_MY, - EC_WORD_LIKES, + .greeting = { + .easyChat = { + EC_WORD_ADVENTURE, + EC_WORD_AND, + EC_WORD_BATTLE, + EC_WORD_ARE, + EC_WORD_MY, + EC_WORD_LIKES, + }, }, }, { .trainerClass = TRAINER_CLASS_SWIMMING_TRIATHLETE_M, .name = _("TROY"), .teamFlags = 0x09, - .padding = 0, - .easyChat = { - EC_WORD_YOU, - EC_WORD_CAN_T, - EC_WORD_LOSE, - EC_WORD_TO, - EC_WORD_A, - EC_WORD_KID, + .greeting = { + .easyChat = { + EC_WORD_YOU, + EC_WORD_CAN_T, + EC_WORD_LOSE, + EC_WORD_TO, + EC_WORD_A, + EC_WORD_KID, + }, }, }, { .trainerClass = TRAINER_CLASS_SCHOOL_KID_M, .name = _("ED"), .teamFlags = 0x08, - .padding = 0, - .easyChat = { - EC_WORD_POKEMON, - EC_WORD_DAILY, - EC_WORD_AT, - EC_WORD_SCHOOL, - EC_WORD_IT_S, - EC_WORD_AWESOME, + .greeting = { + .easyChat = { + EC_WORD_POKEMON, + EC_WORD_DAILY, + EC_WORD_AT, + EC_WORD_SCHOOL, + EC_WORD_IT_S, + EC_WORD_AWESOME, + }, }, }, { .trainerClass = TRAINER_CLASS_POKEMON_RANGER_F, .name = _("ELLEN"), .teamFlags = 0x04, - .padding = 0, - .easyChat = { - EC_WORD_ARE, - EC_WORD_YOU, - EC_WORD_KIND, - EC_WORD_TO, - EC_WORD_YOUR, - EC_WORD_POKEMON, + .greeting = { + .easyChat = { + EC_WORD_ARE, + EC_WORD_YOU, + EC_WORD_KIND, + EC_WORD_TO, + EC_WORD_YOUR, + EC_WORD_POKEMON, + }, }, }, { .trainerClass = TRAINER_CLASS_SWIMMER_M, .name = _("ARNIE"), .teamFlags = 0x09, - .padding = 0, - .easyChat = { - EC_WORD_I, - EC_WORD_BATTLE, - EC_WORD_SERIOUSLY, - EC_WORD_BEAUTIFUL, - EC_WORD_YOU, - EC_MOVE(DIG), + .greeting = { + .easyChat = { + EC_WORD_I, + EC_WORD_BATTLE, + EC_WORD_SERIOUSLY, + EC_WORD_BEAUTIFUL, + EC_WORD_YOU, + EC_MOVE(DIG), + }, }, }, { .trainerClass = TRAINER_CLASS_RUNNING_TRIATHLETE_M, .name = _("HAL"), .teamFlags = 0x09, - .padding = 0, - .easyChat = { - EC_WORD_BOY, - EC_WORD_I_AM, - EC_WORD_TIRED, - EC_WORD_READY, - EC_WORD_FOR, - EC_WORD_SLEEP, + .greeting = { + .easyChat = { + EC_WORD_BOY, + EC_WORD_I_AM, + EC_WORD_TIRED, + EC_WORD_READY, + EC_WORD_FOR, + EC_WORD_SLEEP, + }, }, }, { .trainerClass = TRAINER_CLASS_BEAUTY, .name = _("LAUREN"), .teamFlags = 0x06, - .padding = 0, - .easyChat = { - EC_WORD_A, - EC_WORD_TRAINER, - EC_WORD_LIKE, - EC_WORD_YOU, - EC_WORD_IS, - EC_WORD_EXCITING, + .greeting = { + .easyChat = { + EC_WORD_A, + EC_WORD_TRAINER, + EC_WORD_LIKE, + EC_WORD_YOU, + EC_WORD_IS, + EC_WORD_EXCITING, + }, }, }, { .trainerClass = TRAINER_CLASS_AROMA_LADY, .name = _("STACY"), .teamFlags = 0x06, - .padding = 0, - .easyChat = { - EC_WORD_HAVE, - EC_WORD_YOU, - EC_WORD_A, - EC_WORD_STENCH, - EC_WORD_OR, - EC_MOVE(SWEET_SCENT), + .greeting = { + .easyChat = { + EC_WORD_HAVE, + EC_WORD_YOU, + EC_WORD_A, + EC_WORD_STENCH, + EC_WORD_OR, + EC_MOVE(SWEET_SCENT), + }, }, }, { .trainerClass = TRAINER_CLASS_COLLECTOR, .name = _("DARYL"), .teamFlags = 0x81, - .padding = 0, - .easyChat = { - EC_WORD_YOUR, - EC_WORD_POKEMON, - EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS, - EC_WORD_I, - EC_WORD_WANT, - EC_WORD_IT, + .greeting = { + .easyChat = { + EC_WORD_YOUR, + EC_WORD_POKEMON, + EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS, + EC_WORD_I, + EC_WORD_WANT, + EC_WORD_IT, + }, }, }, { .trainerClass = TRAINER_CLASS_SWIMMING_TRIATHLETE_F, .name = _("KATHY"), .teamFlags = 0x04, - .padding = 0, - .easyChat = { - EC_WORD_I, - EC_WORD_WILL, - EC_WORD_TRY, - EC_WORD_MY, - EC_WORD_BEST, - EC_WORD_TODAY, + .greeting = { + .easyChat = { + EC_WORD_I, + EC_WORD_WILL, + EC_WORD_TRY, + EC_WORD_MY, + EC_WORD_BEST, + EC_WORD_TODAY, + }, }, }, { .trainerClass = TRAINER_CLASS_POKEMON_RANGER_M, .name = _("HARRIS"), .teamFlags = 0x0C, - .padding = 0, - .easyChat = { - EC_WORD_WAAAH, - EC_WORD_WAAAH, - EC_WORD_WAAAH, - EC_WORD_WAAAH, - EC_WORD_EHEHE, - EC_MOVE(FAKE_TEARS), + .greeting = { + .easyChat = { + EC_WORD_WAAAH, + EC_WORD_WAAAH, + EC_WORD_WAAAH, + EC_WORD_WAAAH, + EC_WORD_EHEHE, + EC_MOVE(FAKE_TEARS), + }, }, }, { .trainerClass = TRAINER_CLASS_POKEFAN_M, .name = _("GLENN"), .teamFlags = 0x80, - .padding = 0, - .easyChat = { - EC_WORD_LISTEN, - EC_WORD_TO, - EC_WORD_MY, - EC_WORD_LOUSY, - EC_WORD_ANIME, - EC_WORD_SONG, + .greeting = { + .easyChat = { + EC_WORD_LISTEN, + EC_WORD_TO, + EC_WORD_MY, + EC_WORD_LOUSY, + EC_WORD_ANIME, + EC_WORD_SONG, + }, }, }, { .trainerClass = TRAINER_CLASS_CYCLING_TRIATHLETE_M, .name = _("NICO"), .teamFlags = 0x04, - .padding = 0, - .easyChat = { - EC_WORD_DON_T, - EC_WORD_JUST, - EC_WORD_BATTLE, - EC_WORD_DO, - EC_WORD_SOMETHING, - EC_WORD_ELSE, + .greeting = { + .easyChat = { + EC_WORD_DON_T, + EC_WORD_JUST, + EC_WORD_BATTLE, + EC_WORD_DO, + EC_WORD_SOMETHING, + EC_WORD_ELSE, + }, }, }, { .trainerClass = TRAINER_CLASS_POKEMON_BREEDER_M, .name = _("BAILEY"), .teamFlags = 0x41, - .padding = 0, - .easyChat = { - EC_WORD_ARE, - EC_WORD_YOU, - EC_WORD_BUSY, - EC_WORD_GET, - EC_WORD_WITH, - EC_WORD_IT, + .greeting = { + .easyChat = { + EC_WORD_ARE, + EC_WORD_YOU, + EC_WORD_BUSY, + EC_WORD_GET, + EC_WORD_WITH, + EC_WORD_IT, + }, }, }, { .trainerClass = TRAINER_CLASS_PARASOL_LADY, .name = _("ABBIE"), .teamFlags = 0x08, - .padding = 0, - .easyChat = { - EC_WORD_THE, - EC_MOVE(MORNING_SUN), - EC_WORD_HAS, - EC_WORD_SO, - EC_WORD_MUCH, - EC_MOVE(COSMIC_POWER), + .greeting = { + .easyChat = { + EC_WORD_THE, + EC_MOVE(MORNING_SUN), + EC_WORD_HAS, + EC_WORD_SO, + EC_WORD_MUCH, + EC_MOVE(COSMIC_POWER), + }, }, }, { .trainerClass = TRAINER_CLASS_CAMPER, .name = _("AL"), .teamFlags = 0x0C, - .padding = 0, - .easyChat = { - EC_WORD_LET_S, - EC_WORD_HAVE, - EC_WORD_AN, - EC_WORD_EXCITING, - EC_WORD_BATTLE, - EC_WORD_YEEHAW_EXCL, + .greeting = { + .easyChat = { + EC_WORD_LET_S, + EC_WORD_HAVE, + EC_WORD_AN, + EC_WORD_EXCITING, + EC_WORD_BATTLE, + EC_WORD_YEEHAW_EXCL, + }, }, }, { .trainerClass = TRAINER_CLASS_SCHOOL_KID_F, .name = _("PEGGY"), .teamFlags = 0x42, - .padding = 0, - .easyChat = { - EC_WORD_I, - EC_WORD_WANT, - EC_WORD_TO, - EC_WORD_SEE, - EC_WORD_SOME, - EC_MOVE(GROWTH), + .greeting = { + .easyChat = { + EC_WORD_I, + EC_WORD_WANT, + EC_WORD_TO, + EC_WORD_SEE, + EC_WORD_SOME, + EC_MOVE(GROWTH), + }, }, }, { .trainerClass = TRAINER_CLASS_BEAUTY, .name = _("NAOMI"), .teamFlags = 0x04, - .padding = 0, - .easyChat = { - EC_WORD_IT, - EC_WORD_WAS, - EC_WORD_GREAT, - EC_WORD_TO, - EC_WORD_BE, - EC_WORD_YOUNG, + .greeting = { + .easyChat = { + EC_WORD_IT, + EC_WORD_WAS, + EC_WORD_GREAT, + EC_WORD_TO, + EC_WORD_BE, + EC_WORD_YOUNG, + }, }, }, { .trainerClass = TRAINER_CLASS_NINJA_BOY, .name = _("KENJI"), .teamFlags = 0x0C, - .padding = 0, - .easyChat = { - EC_WORD_PLEASE, - 0xFFFF, - EC_WORD_DON_T, - EC_WORD_BE, - EC_WORD_MEAN, - EC_WORD_TO_ME, + .greeting = { + .easyChat = { + EC_WORD_PLEASE, + 0xFFFF, + EC_WORD_DON_T, + EC_WORD_BE, + EC_WORD_MEAN, + EC_WORD_TO_ME, + }, }, }, { .trainerClass = TRAINER_CLASS_CYCLING_TRIATHLETE_M, .name = _("ROSS"), .teamFlags = 0x01, - .padding = 0, - .easyChat = { - EC_WORD_WAKE_UP, - EC_WORD_MY, - EC_MOVE2(HIDDEN_POWER), - EC_WORD_AND, - EC_MOVE(ASTONISH), - EC_WORD_ME, + .greeting = { + .easyChat = { + EC_WORD_WAKE_UP, + EC_WORD_MY, + EC_MOVE2(HIDDEN_POWER), + EC_WORD_AND, + EC_MOVE(ASTONISH), + EC_WORD_ME, + }, }, }, { .trainerClass = TRAINER_CLASS_POKEMON_RANGER_F, .name = _("EDNA"), .teamFlags = 0x02, - .padding = 0, - .easyChat = { - EC_WORD_BATTLE_TOWER, - EC_WORD_IS, - EC_WORD_SO, - EC_WORD_ENTERTAINING, - EC_WORD_IT_S, - EC_WORD_AWESOME, + .greeting = { + .easyChat = { + EC_WORD_BATTLE_TOWER, + EC_WORD_IS, + EC_WORD_SO, + EC_WORD_ENTERTAINING, + EC_WORD_IT_S, + EC_WORD_AWESOME, + }, }, }, { .trainerClass = TRAINER_CLASS_RUIN_MANIAC, .name = _("ANTON"), .teamFlags = 0x41, - .padding = 0, - .easyChat = { - EC_WORD_BLEND, - EC_WORD_THICK_FAT, - EC_WORD_AND, - EC_WORD_CHLOROPHYLL, - EC_WORD_IT_S, - EC_WORD_TASTY, + .greeting = { + .easyChat = { + EC_WORD_BLEND, + EC_WORD_THICK_FAT, + EC_WORD_AND, + EC_WORD_CHLOROPHYLL, + EC_WORD_IT_S, + EC_WORD_TASTY, + }, }, }, { .trainerClass = TRAINER_CLASS_SWIMMER_M, .name = _("MITCH"), .teamFlags = 0x81, - .padding = 0, - .easyChat = { - EC_WORD_NEXT, - EC_WORD_A, - EC_WORD_GIRL, - EC_WORD_WITH, - EC_WORD_A, - EC_MOVE(SCARY_FACE), + .greeting = { + .easyChat = { + EC_WORD_NEXT, + EC_WORD_A, + EC_WORD_GIRL, + EC_WORD_WITH, + EC_WORD_A, + EC_MOVE(SCARY_FACE), + }, }, }, { .trainerClass = TRAINER_CLASS_HEX_MANIAC, .name = _("ROD"), .teamFlags = 0x42, - .padding = 0, - .easyChat = { - EC_WORD_GIMME, - EC_WORD_A, - EC_WORD_TOUGH, - EC_WORD_BATTLE, - EC_WORD_NOT, - EC_WORD_WIMPY, + .greeting = { + .easyChat = { + EC_WORD_GIMME, + EC_WORD_A, + EC_WORD_TOUGH, + EC_WORD_BATTLE, + EC_WORD_NOT, + EC_WORD_WIMPY, + }, }, }, { .trainerClass = TRAINER_CLASS_RUNNING_TRIATHLETE_M, .name = _("RICH"), .teamFlags = 0x01, - .padding = 0, - .easyChat = { - EC_WORD_TASTY, - EC_WORD_WATER, - EC_WORD_IS, - EC_WORD_HIP_AND, - EC_WORD_HAPPENING, - EC_WORD_YES_SIR_EXCL, + .greeting = { + .easyChat = { + EC_WORD_TASTY, + EC_WORD_WATER, + EC_WORD_IS, + EC_WORD_HIP_AND, + EC_WORD_HAPPENING, + EC_WORD_YES_SIR_EXCL, + }, }, }, { .trainerClass = TRAINER_CLASS_POKEFAN_M, .name = _("DANIEL"), .teamFlags = 0x80, - .padding = 0, - .easyChat = { - EC_WORD_GO, - EC_WORD_FOR, - EC_WORD_IT, - EC_WORD_MY, - EC_WORD_LOVEY_DOVEY, - EC_WORD_POKEMON, + .greeting = { + .easyChat = { + EC_WORD_GO, + EC_WORD_FOR, + EC_WORD_IT, + EC_WORD_MY, + EC_WORD_LOVEY_DOVEY, + EC_WORD_POKEMON, + }, }, }, { .trainerClass = TRAINER_CLASS_PSYCHIC_F, .name = _("GLORIA"), .teamFlags = 0x82, - .padding = 0, - .easyChat = { - EC_WORD_LET_S, - EC_WORD_GET, - EC_WORD_THIS, - EC_WORD_FIERY, - EC_WORD_BATTLE, - EC_WORD_HAPPENING, + .greeting = { + .easyChat = { + EC_WORD_LET_S, + EC_WORD_GET, + EC_WORD_THIS, + EC_WORD_FIERY, + EC_WORD_BATTLE, + EC_WORD_HAPPENING, + }, }, }, { .trainerClass = TRAINER_CLASS_GUITARIST, .name = _("NELSON"), .teamFlags = 0x01, - .padding = 0, - .easyChat = { - EC_WORD_MUSIC, - EC_WORD_IS, - EC_WORD_MY, - EC_WORD_ALL, - EC_WORD_MY, - EC_WORD_DESTINY, + .greeting = { + .easyChat = { + EC_WORD_MUSIC, + EC_WORD_IS, + EC_WORD_MY, + EC_WORD_ALL, + EC_WORD_MY, + EC_WORD_DESTINY, + }, }, }, { .trainerClass = TRAINER_CLASS_KINDLER, .name = _("FERRIS"), .teamFlags = 0x41, - .padding = 0, - .easyChat = { - EC_WORD_GOOD, - EC_WORD_IT, - EC_WORD_IS, - EC_WORD_SO, - EC_WORD_VERY, - EC_WORD_GOOD, + .greeting = { + .easyChat = { + EC_WORD_GOOD, + EC_WORD_IT, + EC_WORD_IS, + EC_WORD_SO, + EC_WORD_VERY, + EC_WORD_GOOD, + }, }, }, { .trainerClass = TRAINER_CLASS_AROMA_LADY, .name = _("AMANDA"), .teamFlags = 0x82, - .padding = 0, - .easyChat = { - EC_WORD_WHAT, - EC_WORD_KIND, - EC_WORD_OF, - EC_WORD_TRAINER, - EC_WORD_ARE, - EC_WORD_YOU, + .greeting = { + .easyChat = { + EC_WORD_WHAT, + EC_WORD_KIND, + EC_WORD_OF, + EC_WORD_TRAINER, + EC_WORD_ARE, + EC_WORD_YOU, + }, }, }, { .trainerClass = TRAINER_CLASS_SWIMMING_TRIATHLETE_M, .name = _("MASON"), .teamFlags = 0x10, - .padding = 0, - .easyChat = { - EC_WORD_I, - EC_WORD_DON_T, - EC_WORD_KNOW, - EC_WORD_HOW, - EC_WORD_TO, - EC_WORD_LOSE, + .greeting = { + .easyChat = { + EC_WORD_I, + EC_WORD_DON_T, + EC_WORD_KNOW, + EC_WORD_HOW, + EC_WORD_TO, + EC_WORD_LOSE, + }, }, }, { .trainerClass = TRAINER_CLASS_DRAGON_TAMER, .name = _("NATE"), .teamFlags = 0x10, - .padding = 0, - .easyChat = { - EC_WORD_DRAGON, - EC_WORD_POKEMON, - EC_WORD_ARE, - EC_WORD_ALL, - EC_WORD_THE, - EC_MOVE(RAGE), + .greeting = { + .easyChat = { + EC_WORD_DRAGON, + EC_WORD_POKEMON, + EC_WORD_ARE, + EC_WORD_ALL, + EC_WORD_THE, + EC_MOVE(RAGE), + }, }, }, { .trainerClass = TRAINER_CLASS_LASS, .name = _("MIRIAM"), .teamFlags = 0x82, - .padding = 0, - .easyChat = { - EC_WORD_YOU_RE, - EC_WORD_TOO_STRONG, - EC_WORD_SERIOUSLY, - EC_WORD_IT_S, - EC_WORD_BAD, - EC_WORD_NEWS, + .greeting = { + .easyChat = { + EC_WORD_YOU_RE, + EC_WORD_TOO_STRONG, + EC_WORD_SERIOUSLY, + EC_WORD_IT_S, + EC_WORD_BAD, + EC_WORD_NEWS, + }, }, }, { .trainerClass = TRAINER_CLASS_POKEMANIAC, .name = _("THEO"), .teamFlags = 0x40, - .padding = 0, - .easyChat = { - EC_WORD_I, - EC_WORD_ADORE, - EC_WORD_MY, - EC_WORD_MEGA, - EC_WORD_CUTE, - EC_WORD_PLUSH_DOLL, + .greeting = { + .easyChat = { + EC_WORD_I, + EC_WORD_ADORE, + EC_WORD_MY, + EC_WORD_MEGA, + EC_WORD_CUTE, + EC_WORD_PLUSH_DOLL, + }, }, }, { .trainerClass = TRAINER_CLASS_SWIMMING_TRIATHLETE_F, .name = _("PAMELA"), .teamFlags = 0x10, - .padding = 0, - .easyChat = { - EC_WORD_HERE_I_COME, - EC_WORD_I_AM, - EC_WORD_THE, - EC_WORD_CUTE, - EC_MOVE2(WATER_SPORT), - EC_WORD_IDOL, + .greeting = { + .easyChat = { + EC_WORD_HERE_I_COME, + EC_WORD_I_AM, + EC_WORD_THE, + EC_WORD_CUTE, + EC_MOVE2(WATER_SPORT), + EC_WORD_IDOL, + }, }, }, { .trainerClass = TRAINER_CLASS_POKEFAN_F, .name = _("ALISSA"), .teamFlags = 0x20, - .padding = 0, - .easyChat = { - EC_WORD_IT_S, - EC_WORD_A, - EC_WORD_PREPOSTEROUS, - EC_WORD_MATCH, - EC_WORD_I_AM, - EC_WORD_SHOCKED, + .greeting = { + .easyChat = { + EC_WORD_IT_S, + EC_WORD_A, + EC_WORD_PREPOSTEROUS, + EC_WORD_MATCH, + EC_WORD_I_AM, + EC_WORD_SHOCKED, + }, }, }, { .trainerClass = TRAINER_CLASS_GENTLEMAN, .name = _("ARTHUR"), .teamFlags = 0x20, - .padding = 0, - .easyChat = { - EC_WORD_PLEASE, - EC_WORD_GIVE, - EC_WORD_ME, - EC_WORD_A, - EC_WORD_GOOD, - EC_WORD_BATTLE, + .greeting = { + .easyChat = { + EC_WORD_PLEASE, + EC_WORD_GIVE, + EC_WORD_ME, + EC_WORD_A, + EC_WORD_GOOD, + EC_WORD_BATTLE, + }, }, }, { .trainerClass = TRAINER_CLASS_SWIMMER_F, .name = _("MARCY"), .teamFlags = 0x82, - .padding = 0, - .easyChat = { - EC_WORD_I_AM, - EC_WORD_BEAUTIFUL, - EC_WORD_YOU, - EC_WORD_CAN_T, - EC_WORD_BEAT, - EC_WORD_ME, + .greeting = { + .easyChat = { + EC_WORD_I_AM, + EC_WORD_BEAUTIFUL, + EC_WORD_YOU, + EC_WORD_CAN_T, + EC_WORD_BEAT, + EC_WORD_ME, + }, }, }, { .trainerClass = TRAINER_CLASS_COOL_TRAINER_M, .name = _("MILLER"), .teamFlags = 0x10, - .padding = 0, - .easyChat = { - EC_WORD_I, - EC_WORD_BATTLE, - EC_WORD_DAILY, - EC_WORD_I, - EC_WORD_WON_T, - EC_WORD_LOSE, + .greeting = { + .easyChat = { + EC_WORD_I, + EC_WORD_BATTLE, + EC_WORD_DAILY, + EC_WORD_I, + EC_WORD_WON_T, + EC_WORD_LOSE, + }, }, }, { .trainerClass = TRAINER_CLASS_BIRD_KEEPER, .name = _("OLIVER"), .teamFlags = 0x11, - .padding = 0, - .easyChat = { - EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS, - EC_WORD_GIGGLE, - EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS, - 0xFFFF, - 0xFFFF, - 0xFFFF, + .greeting = { + .easyChat = { + EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS, + EC_WORD_GIGGLE, + EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS, + 0xFFFF, + 0xFFFF, + 0xFFFF, + }, }, }, { .trainerClass = TRAINER_CLASS_CYCLING_TRIATHLETE_F, .name = _("MOLLY"), .teamFlags = 0x12, - .padding = 0, - .easyChat = { - EC_WORD_HOW, - EC_WORD_ARE, - EC_WORD_YOU, - EC_WORD_ON, - EC_WORD_MONDAY, - EC_WORD_MORNING, + .greeting = { + .easyChat = { + EC_WORD_HOW, + EC_WORD_ARE, + EC_WORD_YOU, + EC_WORD_ON, + EC_WORD_MONDAY, + EC_WORD_MORNING, + }, }, }, { .trainerClass = TRAINER_CLASS_BUG_MANIAC, .name = _("JASON"), .teamFlags = 0x40, - .padding = 0, - .easyChat = { - EC_WORD_WATER, - EC_WORD_AND, - EC_WORD_BUG, - EC_WORD_POKEMON, - EC_WORD_ARE, - EC_WORD_GREAT, + .greeting = { + .easyChat = { + EC_WORD_WATER, + EC_WORD_AND, + EC_WORD_BUG, + EC_WORD_POKEMON, + EC_WORD_ARE, + EC_WORD_GREAT, + }, }, }, { .trainerClass = TRAINER_CLASS_BATTLE_GIRL, .name = _("AVA"), .teamFlags = 0x20, - .padding = 0, - .easyChat = { - EC_WORD_WHAT, - EC_WORD_IS, - EC_WORD_THIS, - EC_WORD_PRESSURE, - EC_WORD_ELLIPSIS, - EC_WORD_STATIC, + .greeting = { + .easyChat = { + EC_WORD_WHAT, + EC_WORD_IS, + EC_WORD_THIS, + EC_WORD_PRESSURE, + EC_WORD_ELLIPSIS, + EC_WORD_STATIC, + }, }, }, { .trainerClass = TRAINER_CLASS_FISHERMAN, .name = _("HANK"), .teamFlags = 0x10, - .padding = 0, - .easyChat = { - EC_WORD_YOU_RE, - EC_WORD_A, - EC_WORD_KID, - EC_WORD_YOU, - EC_WORD_CAN_T, - EC_WORD_WIN, + .greeting = { + .easyChat = { + EC_WORD_YOU_RE, + EC_WORD_A, + EC_WORD_KID, + EC_WORD_YOU, + EC_WORD_CAN_T, + EC_WORD_WIN, + }, }, }, { .trainerClass = TRAINER_CLASS_SAILOR, .name = _("PETER"), .teamFlags = 0x20, - .padding = 0, - .easyChat = { - EC_WORD_IT_S, - EC_WORD_SERIOUSLY, - EC_WORD_TERRIBLE, - EC_WORD_I, - EC_WORD_REALLY, - EC_WORD_THINK, + .greeting = { + .easyChat = { + EC_WORD_IT_S, + EC_WORD_SERIOUSLY, + EC_WORD_TERRIBLE, + EC_WORD_I, + EC_WORD_REALLY, + EC_WORD_THINK, + }, }, }, { .trainerClass = TRAINER_CLASS_EXPERT_F, .name = _("MINDY"), .teamFlags = 0x20, - .padding = 0, - .easyChat = { - EC_WORD_YOU, - EC_WORD_APPEAR, - EC_WORD_TO, - EC_WORD_TRAIN, - EC_WORD_VERY, - EC_WORD_WELL, + .greeting = { + .easyChat = { + EC_WORD_YOU, + EC_WORD_APPEAR, + EC_WORD_TO, + EC_WORD_TRAIN, + EC_WORD_VERY, + EC_WORD_WELL, + }, }, }, { .trainerClass = TRAINER_CLASS_BUG_MANIAC, .name = _("DWIGHT"), .teamFlags = 0x11, - .padding = 0, - .easyChat = { - EC_WORD_ARE, - EC_WORD_YOU, - EC_WORD_STRONG, - EC_WORD_YOU, - EC_WORD_ARE, - EC_WORD_SCARY, + .greeting = { + .easyChat = { + EC_WORD_ARE, + EC_WORD_YOU, + EC_WORD_STRONG, + EC_WORD_YOU, + EC_WORD_ARE, + EC_WORD_SCARY, + }, }, }, { .trainerClass = TRAINER_CLASS_POKEMON_BREEDER_F, .name = _("REENA"), .teamFlags = 0x12, - .padding = 0, - .easyChat = { - EC_WORD_I, - EC_WORD_ALWAYS, - EC_WORD_LOSE, - EC_WORD_MAYBE, - EC_WORD_TODAY, - EC_WORD_ELLIPSIS, + .greeting = { + .easyChat = { + EC_WORD_I, + EC_WORD_ALWAYS, + EC_WORD_LOSE, + EC_WORD_MAYBE, + EC_WORD_TODAY, + EC_WORD_ELLIPSIS, + }, }, }, { .trainerClass = TRAINER_CLASS_PARASOL_LADY, .name = _("MEGAN"), .teamFlags = 0x10, - .padding = 0, - .easyChat = { - EC_WORD_DON_T, - EC_WORD_MAKE, - EC_WORD_THAT, - EC_MOVE(SCARY_FACE), - EC_WORD_AT, - EC_WORD_ME, + .greeting = { + .easyChat = { + EC_WORD_DON_T, + EC_WORD_MAKE, + EC_WORD_THAT, + EC_MOVE(SCARY_FACE), + EC_WORD_AT, + EC_WORD_ME, + }, }, }, { .trainerClass = TRAINER_CLASS_RUNNING_TRIATHLETE_F, .name = _("SIERRA"), .teamFlags = 0x04, - .padding = 0, - .easyChat = { - EC_WORD_I_VE, - EC_WORD_RUN, - EC_WORD_A_LOT, - EC_WORD_SO, - EC_WORD_I_AM, - EC_WORD_HEALTHY, + .greeting = { + .easyChat = { + EC_WORD_I_VE, + EC_WORD_RUN, + EC_WORD_A_LOT, + EC_WORD_SO, + EC_WORD_I_AM, + EC_WORD_HEALTHY, + }, }, }, { .trainerClass = TRAINER_CLASS_POKEMON_RANGER_M, .name = _("ARNOLD"), .teamFlags = 0x08, - .padding = 0, - .easyChat = { - EC_WORD_I_AM, - EC_WORD_FEELING, - EC_WORD_AWESOME, - EC_WORD_MY, - EC_WORD_POKEMON, - EC_WORD_ROCK, + .greeting = { + .easyChat = { + EC_WORD_I_AM, + EC_WORD_FEELING, + EC_WORD_AWESOME, + EC_WORD_MY, + EC_WORD_POKEMON, + EC_WORD_ROCK, + }, }, }, { .trainerClass = TRAINER_CLASS_BLACK_BELT, .name = _("XIN"), .teamFlags = 0x04, - .padding = 0, - .easyChat = { - EC_WORD_HOO_HAH, - EC_WORD_ARE, - EC_WORD_YOU, - EC_WORD_READY, - EC_WORD_TO, - EC_WORD_ROCK, + .greeting = { + .easyChat = { + EC_WORD_HOO_HAH, + EC_WORD_ARE, + EC_WORD_YOU, + EC_WORD_READY, + EC_WORD_TO, + EC_WORD_ROCK, + }, }, }, { .trainerClass = TRAINER_CLASS_COOL_TRAINER_F, .name = _("KELLY"), .teamFlags = 0x02, - .padding = 0, - .easyChat = { - EC_WORD_YOU, - EC_WORD_COULDN_T, - EC_WORD_BEAT, - EC_WORD_ME, - EC_WORD_EVER, - EC_WORD_KID, + .greeting = { + .easyChat = { + EC_WORD_YOU, + EC_WORD_COULDN_T, + EC_WORD_BEAT, + EC_WORD_ME, + EC_WORD_EVER, + EC_WORD_KID, + }, }, }, { .trainerClass = TRAINER_CLASS_COLLECTOR, .name = _("VANCE"), .teamFlags = 0x80, - .padding = 0, - .easyChat = { - EC_WORD_POKEMON, - EC_WORD_ALL, - EC_WORD_OVER, - EC_WORD_THE, - EC_WORD_PLACE, - EC_WORD_WOWEE, + .greeting = { + .easyChat = { + EC_WORD_POKEMON, + EC_WORD_ALL, + EC_WORD_OVER, + EC_WORD_THE, + EC_WORD_PLACE, + EC_WORD_WOWEE, + }, }, }, { .trainerClass = TRAINER_CLASS_SWIMMING_TRIATHLETE_M, .name = _("TOBY"), .teamFlags = 0x01, - .padding = 0, - .easyChat = { - EC_WORD_THIS, - EC_WORD_ISN_T, - EC_WORD_SPORTS, - EC_WORD_IT_S, - EC_WORD_A, - EC_WORD_BATTLE, + .greeting = { + .easyChat = { + EC_WORD_THIS, + EC_WORD_ISN_T, + EC_WORD_SPORTS, + EC_WORD_IT_S, + EC_WORD_A, + EC_WORD_BATTLE, + }, }, }, { .trainerClass = TRAINER_CLASS_GENTLEMAN, .name = _("NORTON"), .teamFlags = 0x20, - .padding = 0, - .easyChat = { - EC_WORD_I, - EC_WORD_HAVE, - EC_WORD_TO, - EC_WORD_WIN, - EC_WORD_PLEASE, - EC_WORD_LOSE, + .greeting = { + .easyChat = { + EC_WORD_I, + EC_WORD_HAVE, + EC_WORD_TO, + EC_WORD_WIN, + EC_WORD_PLEASE, + EC_WORD_LOSE, + }, }, }, { .trainerClass = TRAINER_CLASS_BATTLE_GIRL, .name = _("ZOE"), .teamFlags = 0x02, - .padding = 0, - .easyChat = { - EC_WORD_THIS, - EC_WORD_IS, - EC_WORD_SCARY, - EC_WORD_PLEASE, - EC_WORD_BE, - EC_WORD_NICE, + .greeting = { + .easyChat = { + EC_WORD_THIS, + EC_WORD_IS, + EC_WORD_SCARY, + EC_WORD_PLEASE, + EC_WORD_BE, + EC_WORD_NICE, + }, }, }, { .trainerClass = TRAINER_CLASS_BEAUTY, .name = _("EMMA"), .teamFlags = 0x20, - .padding = 0, - .easyChat = { - EC_WORD_DON_T, - EC_WORD_YOU, - EC_MOVE(FLAIL), - EC_WORD_YOU, - EC_WORD_CAN_T, - EC_MOVE(WITHDRAW), + .greeting = { + .easyChat = { + EC_WORD_DON_T, + EC_WORD_YOU, + EC_MOVE(FLAIL), + EC_WORD_YOU, + EC_WORD_CAN_T, + EC_MOVE(WITHDRAW), + }, }, }, { .trainerClass = TRAINER_CLASS_HIKER, .name = _("VINCE"), .teamFlags = 0x04, - .padding = 0, - .easyChat = { - EC_WORD_YAHOO, - EC_WORD_YAHOO, - EC_WORD_ARE, - EC_WORD_YOU, - EC_WORD_LISTENING, - EC_WORD_QUES, + .greeting = { + .easyChat = { + EC_WORD_YAHOO, + EC_WORD_YAHOO, + EC_WORD_ARE, + EC_WORD_YOU, + EC_WORD_LISTENING, + EC_WORD_QUES, + }, }, }, { .trainerClass = TRAINER_CLASS_EXPERT_M, .name = _("MARV"), .teamFlags = 0x10, - .padding = 0, - .easyChat = { - EC_WORD_LEARN, - EC_WORD_TO, - EC_WORD_BATTLE, - EC_WORD_THE, - EC_WORD_CORRECT, - EC_WORD_WAY, + .greeting = { + .easyChat = { + EC_WORD_LEARN, + EC_WORD_TO, + EC_WORD_BATTLE, + EC_WORD_THE, + EC_WORD_CORRECT, + EC_WORD_WAY, + }, }, }, { .trainerClass = TRAINER_CLASS_POKEMON_BREEDER_M, .name = _("TODD"), .teamFlags = 0x40, - .padding = 0, - .easyChat = { - EC_WORD_THE, - EC_WORD_WAY, - EC_WORD_YOU, - EC_WORD_BATTLE, - EC_WORD_IT_S, - EC_WORD_CHILD_S_PLAY, + .greeting = { + .easyChat = { + EC_WORD_THE, + EC_WORD_WAY, + EC_WORD_YOU, + EC_WORD_BATTLE, + EC_WORD_IT_S, + EC_WORD_CHILD_S_PLAY, + }, }, }, { .trainerClass = TRAINER_CLASS_GUITARIST, .name = _("GAVIN"), .teamFlags = 0x01, - .padding = 0, - .easyChat = { - EC_WORD_BABY, - EC_WORD_BABY, - EC_WORD_BABY, - EC_WORD_ROCK, - EC_WORD_ME, - EC_WORD_HARD, + .greeting = { + .easyChat = { + EC_WORD_BABY, + EC_WORD_BABY, + EC_WORD_BABY, + EC_WORD_ROCK, + EC_WORD_ME, + EC_WORD_HARD, + }, }, }, { .trainerClass = TRAINER_CLASS_PSYCHIC_M, .name = _("QUINN"), .teamFlags = 0x08, - .padding = 0, - .easyChat = { - EC_WORD_I, - EC_WORD_HAVE, - EC_WORD_A, - EC_WORD_STICKY_HOLD, - EC_WORD_ON, - EC_WORD_YOU, + .greeting = { + .easyChat = { + EC_WORD_I, + EC_WORD_HAVE, + EC_WORD_A, + EC_WORD_STICKY_HOLD, + EC_WORD_ON, + EC_WORD_YOU, + }, }, }, { .trainerClass = TRAINER_CLASS_COOL_TRAINER_F, .name = _("JENN"), .teamFlags = 0x02, - .padding = 0, - .easyChat = { - EC_WORD_I_AM, - EC_WORD_ON, - EC_WORD_A, - EC_WORD_TOUGH, - EC_WORD_TRAINER, - EC_WORD_SEARCH, + .greeting = { + .easyChat = { + EC_WORD_I_AM, + EC_WORD_ON, + EC_WORD_A, + EC_WORD_TOUGH, + EC_WORD_TRAINER, + EC_WORD_SEARCH, + }, }, }, { .trainerClass = TRAINER_CLASS_EXPERT_M, .name = _("JOEL"), .teamFlags = 0x10, - .padding = 0, - .easyChat = { - EC_WORD_BELIEVE, - EC_WORD_IN, - EC_WORD_YOUR, - EC_WORD_POKEMON, - EC_WORD_AND, - EC_WORD_WIN, + .greeting = { + .easyChat = { + EC_WORD_BELIEVE, + EC_WORD_IN, + EC_WORD_YOUR, + EC_WORD_POKEMON, + EC_WORD_AND, + EC_WORD_WIN, + }, }, }, { .trainerClass = TRAINER_CLASS_DRAGON_TAMER, .name = _("KYLE"), .teamFlags = 0x0C, - .padding = 0, - .easyChat = { - EC_WORD_I, - EC_WORD_LIKE, - EC_WORD_A, - EC_WORD_GIRL, - EC_WORD_WITH, - EC_MOVE2(FORESIGHT), + .greeting = { + .easyChat = { + EC_WORD_I, + EC_WORD_LIKE, + EC_WORD_A, + EC_WORD_GIRL, + EC_WORD_WITH, + EC_MOVE2(FORESIGHT), + }, }, }, { .trainerClass = TRAINER_CLASS_COOL_TRAINER_M, .name = _("BRET"), .teamFlags = 0x01, - .padding = 0, - .easyChat = { - EC_WORD_TAKE, - EC_WORD_MY, - EC_WORD_OVERWHELMING, - EC_WORD_POWER, - EC_WORD_AND, - EC_WORD_DISAPPEAR, + .greeting = { + .easyChat = { + EC_WORD_TAKE, + EC_WORD_MY, + EC_WORD_OVERWHELMING, + EC_WORD_POWER, + EC_WORD_AND, + EC_WORD_DISAPPEAR, + }, }, }, { .trainerClass = TRAINER_CLASS_EXPERT_F, .name = _("CARRIE"), .teamFlags = 0x10, - .padding = 0, - .easyChat = { - EC_WORD_TRAINER, - EC_WORD_I, - EC_WORD_SEE, - EC_WORD_YOU, - EC_WORD_ARE, - EC_WORD_CAPABLE, + .greeting = { + .easyChat = { + EC_WORD_TRAINER, + EC_WORD_I, + EC_WORD_SEE, + EC_WORD_YOU, + EC_WORD_ARE, + EC_WORD_CAPABLE, + }, }, }, { .trainerClass = TRAINER_CLASS_LADY, .name = _("GILLIAN"), .teamFlags = 0x02, - .padding = 0, - .easyChat = { - EC_WORD_COME_ON, - EC_WORD_SHOW, - EC_WORD_ME, - EC_WORD_AN, - EC_WORD_EXCELLENT, - EC_WORD_TIME, + .greeting = { + .easyChat = { + EC_WORD_COME_ON, + EC_WORD_SHOW, + EC_WORD_ME, + EC_WORD_AN, + EC_WORD_EXCELLENT, + EC_WORD_TIME, + }, }, }, }; -- cgit v1.2.3 From c06b20715674f05c90c4c1579ee90c692998fc85 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Mon, 23 Oct 2017 20:21:58 -0500 Subject: port matching AbilityBattleEffects from Emerald --- src/battle/battle_3.c | 3430 +------------------------------------------------ 1 file changed, 36 insertions(+), 3394 deletions(-) (limited to 'src') diff --git a/src/battle/battle_3.c b/src/battle/battle_3.c index b59757f00..346ca6d79 100644 --- a/src/battle/battle_3.c +++ b/src/battle/battle_3.c @@ -1434,8 +1434,6 @@ u8 CastformDataTypeChange(u8 bank) return formChange; } -#ifdef NONMATCHING - struct Struct2017100 { u32 arr[4]; @@ -1475,13 +1473,11 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) if (!(gBattleTypeFlags & BATTLE_TYPE_SAFARI)) // why isn't that check done at the beginning? { - //_08018436 - int i; // r4 + u8 moveType; + s32 i; u16 move; - // Hmm... - #define moveType moveArg - //u16 moveType; u8 side; + u8 target1; if (special) gLastUsedAbility = special; @@ -1607,17 +1603,14 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) case ABILITY_AIR_LOCK: //_080187DC { - u8 i; - - for (i = 0; i < gNoOfAllBanks; i++) + // that's a weird choice for a variable, why not use i or bank? + for (target1 = 0; target1 < gNoOfAllBanks; target1++) { - // TODO: i should be in r6 here - //asm("":::"r4","r5"); - effect = CastformDataTypeChange(i); + effect = CastformDataTypeChange(target1); if (effect != 0) { b_push_move_exec(BattleScript_CastformChange); - BATTLE_STRUCT->scriptingActive = i; + BATTLE_STRUCT->scriptingActive = target1; BATTLE_STRUCT->castformToChangeInto = effect - 1; break; } @@ -1637,7 +1630,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) if (WEATHER_HAS_EFFECT && (gBattleWeather & WEATHER_RAIN_ANY) && gBattleMons[bank].maxHP > gBattleMons[bank].hp) { - gLastUsedAbility = ABILITY_RAIN_DISH; //why + gLastUsedAbility = ABILITY_RAIN_DISH; // why b_push_move_exec(BattleScript_RainDishActivates); gBattleMoveDamage = gBattleMons[bank].maxHP / 16; if (gBattleMoveDamage == 0) @@ -1660,7 +1653,8 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) if (gBattleMons[bank].status1 & STATUS_FREEZE) StringCopy(gBattleTextBuff1, gStatusConditionString_IceJpn); gBattleMons[bank].status1 = 0; - //gBattleMons[bank].status2 &= ~(STATUS2_NIGHTMARE); fixed in Emerald + // BUG: The nightmare status does not get cleared here. This was fixed in Emerald. + //gBattleMons[bank].status2 &= ~(STATUS2_NIGHTMARE); BATTLE_STRUCT->scriptingActive = gActiveBank = bank; b_push_move_exec(BattleScript_ShedSkinActivates); EmitSetAttributes(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[bank].status1); @@ -1759,9 +1753,9 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) if (gBattleMons[bank].maxHP == gBattleMons[bank].hp) { if ((gProtectStructs[gBankAttacker].notFirstStrike)) - gBattlescriptCurrInstr = BattleScript_MoveHPDrain; + gBattlescriptCurrInstr = BattleScript_MoveHPDrain_FullHP; else - gBattlescriptCurrInstr = BattleScript_MoveHPDrain_PPLoss; + gBattlescriptCurrInstr = BattleScript_MoveHPDrain_FullHP_PPLoss; } else { @@ -1910,27 +1904,26 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) case ABILITYEFFECT_IMMUNITY: // 5 //_08019448 { - #define i bank - for (i = 0; i < gNoOfAllBanks; i++) + for (bank = 0; bank < gNoOfAllBanks; bank++) { - switch (gBattleMons[i].ability) + switch (gBattleMons[bank].ability) { case ABILITY_IMMUNITY: - if (gBattleMons[i].status1 & (STATUS_POISON | STATUS_TOXIC_POISON | 0xF00)) // TODO: what is 0xF00? + if (gBattleMons[bank].status1 & (STATUS_POISON | STATUS_TOXIC_POISON | 0xF00)) // TODO: what is 0xF00? { StringCopy(gBattleTextBuff1, gStatusConditionString_PoisonJpn); effect = 1; } break; case ABILITY_OWN_TEMPO: - if (gBattleMons[i].status2 & STATUS2_CONFUSION) + if (gBattleMons[bank].status2 & STATUS2_CONFUSION) { StringCopy(gBattleTextBuff1, gStatusConditionString_ConfusionJpn); effect = 2; } break; case ABILITY_LIMBER: - if (gBattleMons[i].status1 & STATUS_PARALYSIS) + if (gBattleMons[bank].status1 & STATUS_PARALYSIS) { StringCopy(gBattleTextBuff1, gStatusConditionString_ParalysisJpn); effect = 1; @@ -1938,29 +1931,29 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) break; case ABILITY_INSOMNIA: case ABILITY_VITAL_SPIRIT: - if (gBattleMons[i].status1 & STATUS_SLEEP) + if (gBattleMons[bank].status1 & STATUS_SLEEP) { - gBattleMons[i].status2 &= ~(STATUS2_NIGHTMARE); + gBattleMons[bank].status2 &= ~(STATUS2_NIGHTMARE); StringCopy(gBattleTextBuff1, gStatusConditionString_SleepJpn); effect = 1; } break; case ABILITY_WATER_VEIL: - if (gBattleMons[i].status1 & STATUS_BURN) + if (gBattleMons[bank].status1 & STATUS_BURN) { StringCopy(gBattleTextBuff1, gStatusConditionString_BurnJpn); effect = 1; } break; case ABILITY_MAGMA_ARMOR: - if (gBattleMons[i].status1 & STATUS_FREEZE) + if (gBattleMons[bank].status1 & STATUS_FREEZE) { StringCopy(gBattleTextBuff1, gStatusConditionString_IceJpn); effect = 1; } break; case ABILITY_OBLIVIOUS: - if (gBattleMons[i].status2 & STATUS2_INFATUATION) + if (gBattleMons[bank].status2 & STATUS2_INFATUATION) { StringCopy(gBattleTextBuff1, gStatusConditionString_LoveJpn); effect = 3; @@ -1972,46 +1965,43 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) switch (effect) { case 1: // status cleared - gBattleMons[i].status1 = 0; + gBattleMons[bank].status1 = 0; break; case 2: // get rid of confusion - gBattleMons[i].status2 &= ~(STATUS2_CONFUSION); + gBattleMons[bank].status2 &= ~(STATUS2_CONFUSION); break; case 3: // get rid of infatuation - gBattleMons[i].status2 &= ~(STATUS2_INFATUATION); + gBattleMons[bank].status2 &= ~(STATUS2_INFATUATION); break; } b_movescr_stack_push_cursor(); gBattlescriptCurrInstr = gUnknown_081D9956; - BATTLE_STRUCT->scriptingActive = i; - gActiveBank = i; + BATTLE_STRUCT->scriptingActive = bank; + gActiveBank = bank; EmitSetAttributes(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gActiveBank].status1); MarkBufferBankForExecution(gActiveBank); return effect; } } - #undef i } break; case ABILITYEFFECT_FORECAST: // 6 //_080197B4 { - #define i bank - for (i = 0; i < gNoOfAllBanks; i++) + for (bank = 0; bank < gNoOfAllBanks; bank++) { - if (gBattleMons[i].ability == ABILITY_FORECAST) + if (gBattleMons[bank].ability == ABILITY_FORECAST) { - effect = CastformDataTypeChange(i); + effect = CastformDataTypeChange(bank); if (effect) { b_push_move_exec(BattleScript_CastformChange); - BATTLE_STRUCT->scriptingActive = i; + BATTLE_STRUCT->scriptingActive = bank; BATTLE_STRUCT->castformToChangeInto = effect - 1; return effect; } } } - #undef i } break; case ABILITYEFFECT_SYNCHRONIZE: // 7 @@ -2067,16 +2057,17 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) { if (gBattleMons[i].ability == ABILITY_TRACE && (gStatuses3[i] & STATUS3_TRACE)) { - u8 opposite = (GetBankIdentity(i) ^ 1) & 1; - u8 target1 = GetBankByPlayerAI(opposite); - u8 target2 = GetBankByPlayerAI(opposite + 2); + u8 target2; + side = (GetBankIdentity(i) ^ 1) & 1; + target1 = GetBankByPlayerAI(side); + target2 = GetBankByPlayerAI(side + 2); if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) { if (gBattleMons[target1].ability != 0 && gBattleMons[target1].hp != 0 && gBattleMons[target2].ability != 0 && gBattleMons[target2].hp != 0) { //_080199AE - gActiveBank = GetBankByPlayerAI(((Random() & 1) * 2) | opposite); + gActiveBank = GetBankByPlayerAI(((Random() & 1) * 2) | side); gBattleMons[i].ability = gBattleMons[gActiveBank].ability; gLastUsedAbility = gBattleMons[gActiveBank].ability; effect++; @@ -2266,3355 +2257,6 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) return effect; } -#else -__attribute__((naked)) -u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) -{ - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r10\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5-r7}\n\ - sub sp, 0x28\n\ - ldr r4, [sp, 0x48]\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - str r0, [sp, 0x4]\n\ - lsls r1, 24\n\ - lsrs r1, 24\n\ - mov r10, r1\n\ - lsls r2, 24\n\ - lsrs r6, r2, 24\n\ - lsls r3, 24\n\ - lsrs r3, 24\n\ - mov r8, r3\n\ - lsls r4, 16\n\ - lsrs r4, 16\n\ - movs r0, 0\n\ - mov r9, r0\n\ - ldr r5, _08018380 @ =gBankAttacker\n\ - ldr r1, _08018384 @ =gNoOfAllBanks\n\ - ldrb r0, [r5]\n\ - ldrb r1, [r1]\n\ - cmp r0, r1\n\ - bcc _08018360\n\ - mov r1, r10\n\ - strb r1, [r5]\n\ -_08018360:\n\ - ldrb r0, [r5]\n\ - bl GetBankSide\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - bne _08018390\n\ - ldr r1, _08018388 @ =gBattlePartyID\n\ - ldrb r0, [r5]\n\ - lsls r0, 1\n\ - adds r0, r1\n\ - ldrh r1, [r0]\n\ - movs r0, 0x64\n\ - muls r1, r0\n\ - ldr r0, _0801838C @ =gPlayerParty\n\ - b _080183A0\n\ - .align 2, 0\n\ -_08018380: .4byte gBankAttacker\n\ -_08018384: .4byte gNoOfAllBanks\n\ -_08018388: .4byte gBattlePartyID\n\ -_0801838C: .4byte gPlayerParty\n\ -_08018390:\n\ - ldr r1, _080183D0 @ =gBattlePartyID\n\ - ldrb r0, [r5]\n\ - lsls r0, 1\n\ - adds r0, r1\n\ - ldrh r1, [r0]\n\ - movs r0, 0x64\n\ - muls r1, r0\n\ - ldr r0, _080183D4 @ =gEnemyParty\n\ -_080183A0:\n\ - adds r7, r1, r0\n\ - ldr r5, _080183D8 @ =gBankTarget\n\ - ldr r1, _080183DC @ =gNoOfAllBanks\n\ - ldrb r0, [r5]\n\ - ldrb r1, [r1]\n\ - cmp r0, r1\n\ - bcc _080183B2\n\ - mov r2, r10\n\ - strb r2, [r5]\n\ -_080183B2:\n\ - ldrb r0, [r5]\n\ - bl GetBankSide\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - bne _080183E4\n\ - ldr r1, _080183D0 @ =gBattlePartyID\n\ - ldrb r0, [r5]\n\ - lsls r0, 1\n\ - adds r0, r1\n\ - ldrh r1, [r0]\n\ - movs r0, 0x64\n\ - muls r1, r0\n\ - ldr r0, _080183E0 @ =gPlayerParty\n\ - b _080183F4\n\ - .align 2, 0\n\ -_080183D0: .4byte gBattlePartyID\n\ -_080183D4: .4byte gEnemyParty\n\ -_080183D8: .4byte gBankTarget\n\ -_080183DC: .4byte gNoOfAllBanks\n\ -_080183E0: .4byte gPlayerParty\n\ -_080183E4:\n\ - ldr r1, _08018444 @ =gBattlePartyID\n\ - ldrb r0, [r5]\n\ - lsls r0, 1\n\ - adds r0, r1\n\ - ldrh r1, [r0]\n\ - movs r0, 0x64\n\ - muls r1, r0\n\ - ldr r0, _08018448 @ =gEnemyParty\n\ -_080183F4:\n\ - adds r5, r1, r0\n\ - adds r0, r7, 0\n\ - movs r1, 0xB\n\ - bl GetMonData\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - str r0, [sp, 0x8]\n\ - adds r0, r7, 0\n\ - movs r1, 0\n\ - bl GetMonData\n\ - str r0, [sp, 0x10]\n\ - adds r0, r5, 0\n\ - movs r1, 0xB\n\ - bl GetMonData\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - str r0, [sp, 0xC]\n\ - adds r0, r5, 0\n\ - movs r1, 0\n\ - bl GetMonData\n\ - str r0, [sp, 0x14]\n\ - ldr r0, _0801844C @ =gBattleTypeFlags\n\ - ldrh r1, [r0]\n\ - movs r0, 0x80\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _08018436\n\ - bl _08019F92\n\ -_08018436:\n\ - mov r3, r8\n\ - cmp r3, 0\n\ - beq _08018454\n\ - ldr r0, _08018450 @ =gLastUsedAbility\n\ - strb r3, [r0]\n\ - mov r8, r0\n\ - b _0801846A\n\ - .align 2, 0\n\ -_08018444: .4byte gBattlePartyID\n\ -_08018448: .4byte gEnemyParty\n\ -_0801844C: .4byte gBattleTypeFlags\n\ -_08018450: .4byte gLastUsedAbility\n\ -_08018454:\n\ - ldr r2, _08018474 @ =gLastUsedAbility\n\ - ldr r1, _08018478 @ =gBattleMons\n\ - movs r0, 0x58\n\ - mov r5, r10\n\ - muls r5, r0\n\ - adds r0, r5, 0\n\ - adds r0, r1\n\ - adds r0, 0x20\n\ - ldrb r0, [r0]\n\ - strb r0, [r2]\n\ - mov r8, r2\n\ -_0801846A:\n\ - cmp r4, 0\n\ - beq _0801847C\n\ - adds r3, r4, 0\n\ - b _08018480\n\ - .align 2, 0\n\ -_08018474: .4byte gLastUsedAbility\n\ -_08018478: .4byte gBattleMons\n\ -_0801847C:\n\ - ldr r0, _08018494 @ =gCurrentMove\n\ - ldrh r3, [r0]\n\ -_08018480:\n\ - ldr r1, _08018498 @ =0x02000000\n\ - ldr r2, _0801849C @ =0x0001601c\n\ - adds r0, r1, r2\n\ - ldrb r0, [r0]\n\ - adds r7, r1, 0\n\ - cmp r0, 0\n\ - beq _080184A0\n\ - movs r4, 0x3F\n\ - ands r4, r0\n\ - b _080184AC\n\ - .align 2, 0\n\ -_08018494: .4byte gCurrentMove\n\ -_08018498: .4byte 0x02000000\n\ -_0801849C: .4byte 0x0001601c\n\ -_080184A0:\n\ - ldr r1, _080184C0 @ =gBattleMoves\n\ - lsls r0, r3, 1\n\ - adds r0, r3\n\ - lsls r0, 2\n\ - adds r0, r1\n\ - ldrb r4, [r0, 0x2]\n\ -_080184AC:\n\ - ldr r5, [sp, 0x4]\n\ - cmp r5, 0x13\n\ - bls _080184B6\n\ - bl _08019F76\n\ -_080184B6:\n\ - lsls r0, r5, 2\n\ - ldr r1, _080184C4 @ =_080184C8\n\ - adds r0, r1\n\ - ldr r0, [r0]\n\ - mov pc, r0\n\ - .align 2, 0\n\ -_080184C0: .4byte gBattleMoves\n\ -_080184C4: .4byte _080184C8\n\ - .align 2, 0\n\ -_080184C8:\n\ - .4byte _08018518\n\ - .4byte _08018814\n\ - .4byte _08018A40\n\ - .4byte _08018AD8\n\ - .4byte _08018CF0\n\ - .4byte _08019448\n\ - .4byte _080197B4\n\ - .4byte _08019804\n\ - .4byte _08019880\n\ - .4byte _080198FC\n\ - .4byte _08019B1C\n\ - .4byte _08019940\n\ - .4byte _08019B60\n\ - .4byte _08019BBC\n\ - .4byte _08019C18\n\ - .4byte _08019D18\n\ - .4byte _08019D5C\n\ - .4byte _08019DB8\n\ - .4byte _08019F44\n\ - .4byte _08019CD4\n\ -_08018518:\n\ - ldr r2, _0801854C @ =gBankAttacker\n\ - ldr r0, _08018550 @ =gNoOfAllBanks\n\ - ldrb r1, [r2]\n\ - adds r5, r0, 0\n\ - ldrb r0, [r5]\n\ - cmp r1, r0\n\ - bcc _0801852A\n\ - mov r1, r10\n\ - strb r1, [r2]\n\ -_0801852A:\n\ - mov r2, r8\n\ - ldrb r0, [r2]\n\ - cmp r0, 0x2D\n\ - bne _08018534\n\ - b _080186B8\n\ -_08018534:\n\ - cmp r0, 0x2D\n\ - bgt _08018564\n\ - cmp r0, 0xD\n\ - bne _0801853E\n\ - b _080187DC\n\ -_0801853E:\n\ - cmp r0, 0xD\n\ - bgt _08018554\n\ - cmp r0, 0x2\n\ - bne _08018548\n\ - b _08018680\n\ -_08018548:\n\ - bl _08019F76\n\ - .align 2, 0\n\ -_0801854C: .4byte gBankAttacker\n\ -_08018550: .4byte gNoOfAllBanks\n\ -_08018554:\n\ - cmp r0, 0x16\n\ - bne _0801855A\n\ - b _08018728\n\ -_0801855A:\n\ - cmp r0, 0x24\n\ - bne _08018560\n\ - b _080187A0\n\ -_08018560:\n\ - bl _08019F76\n\ -_08018564:\n\ - cmp r0, 0x46\n\ - bne _0801856A\n\ - b _080186F0\n\ -_0801856A:\n\ - cmp r0, 0x46\n\ - bgt _08018578\n\ - cmp r0, 0x3B\n\ - bne _08018574\n\ - b _0801875C\n\ -_08018574:\n\ - bl _08019F76\n\ -_08018578:\n\ - cmp r0, 0x4D\n\ - bne _0801857E\n\ - b _080187DC\n\ -_0801857E:\n\ - cmp r0, 0xFF\n\ - beq _08018586\n\ - bl _08019F76\n\ -_08018586:\n\ - bl weather_get_current\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - subs r0, 0x3\n\ - cmp r0, 0xA\n\ - bhi _0801864C\n\ - lsls r0, 2\n\ - ldr r1, _080185A0 @ =_080185A4\n\ - adds r0, r1\n\ - ldr r0, [r0]\n\ - mov pc, r0\n\ - .align 2, 0\n\ -_080185A0: .4byte _080185A4\n\ - .align 2, 0\n\ -_080185A4:\n\ - .4byte _080185D0\n\ - .4byte _0801864C\n\ - .4byte _080185D0\n\ - .4byte _0801864C\n\ - .4byte _0801864C\n\ - .4byte _080185F8\n\ - .4byte _0801864C\n\ - .4byte _0801864C\n\ - .4byte _0801864C\n\ - .4byte _08018620\n\ - .4byte _080185D0\n\ -_080185D0:\n\ - ldr r2, _080185EC @ =gBattleWeather\n\ - ldrh r1, [r2]\n\ - movs r0, 0x7\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _0801864C\n\ - movs r0, 0x5\n\ - strh r0, [r2]\n\ - ldr r0, _080185F0 @ =0x02000000\n\ - ldr r3, _080185F4 @ =0x000160a4\n\ - adds r2, r0, r3\n\ - movs r1, 0xA\n\ - b _08018638\n\ - .align 2, 0\n\ -_080185EC: .4byte gBattleWeather\n\ -_080185F0: .4byte 0x02000000\n\ -_080185F4: .4byte 0x000160a4\n\ -_080185F8:\n\ - ldr r3, _08018614 @ =gBattleWeather\n\ - ldrh r1, [r3]\n\ - movs r2, 0x18\n\ - adds r0, r2, 0\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _0801864C\n\ - strh r2, [r3]\n\ - ldr r0, _08018618 @ =0x02000000\n\ - ldr r3, _0801861C @ =0x000160a4\n\ - adds r2, r0, r3\n\ - movs r1, 0xC\n\ - b _08018638\n\ - .align 2, 0\n\ -_08018614: .4byte gBattleWeather\n\ -_08018618: .4byte 0x02000000\n\ -_0801861C: .4byte 0x000160a4\n\ -_08018620:\n\ - ldr r3, _08018668 @ =gBattleWeather\n\ - ldrh r1, [r3]\n\ - movs r2, 0x60\n\ - adds r0, r2, 0\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _0801864C\n\ - strh r2, [r3]\n\ - ldr r0, _0801866C @ =0x02000000\n\ - ldr r3, _08018670 @ =0x000160a4\n\ - adds r2, r0, r3\n\ - movs r1, 0xB\n\ -_08018638:\n\ - strb r1, [r2]\n\ - ldr r5, _08018674 @ =0x00016003\n\ - adds r0, r5\n\ - mov r1, r10\n\ - strb r1, [r0]\n\ - mov r0, r9\n\ - adds r0, 0x1\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - mov r9, r0\n\ -_0801864C:\n\ - mov r2, r9\n\ - cmp r2, 0\n\ - bne _08018656\n\ - bl _08019F92\n\ -_08018656:\n\ - bl weather_get_current\n\ - ldr r1, _08018678 @ =gBattleCommunication\n\ - strb r0, [r1, 0x5]\n\ - ldr r0, _0801867C @ =gUnknown_081D901D\n\ - bl b_push_move_exec\n\ - bl _08019F76\n\ - .align 2, 0\n\ -_08018668: .4byte gBattleWeather\n\ -_0801866C: .4byte 0x02000000\n\ -_08018670: .4byte 0x000160a4\n\ -_08018674: .4byte 0x00016003\n\ -_08018678: .4byte gBattleCommunication\n\ -_0801867C: .4byte gUnknown_081D901D\n\ -_08018680:\n\ - ldr r2, _080186A8 @ =gBattleWeather\n\ - ldrh r1, [r2]\n\ - movs r0, 0x4\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _08018690\n\ - bl _08019F76\n\ -_08018690:\n\ - movs r0, 0x5\n\ - strh r0, [r2]\n\ - ldr r0, _080186AC @ =BattleScript_DrizzleActivates\n\ - bl b_push_move_exec\n\ - ldr r0, _080186B0 @ =0x02000000\n\ - ldr r3, _080186B4 @ =0x00016003\n\ - adds r0, r3\n\ - mov r5, r10\n\ - strb r5, [r0]\n\ - bl _08019F22\n\ - .align 2, 0\n\ -_080186A8: .4byte gBattleWeather\n\ -_080186AC: .4byte BattleScript_DrizzleActivates\n\ -_080186B0: .4byte 0x02000000\n\ -_080186B4: .4byte 0x00016003\n\ -_080186B8:\n\ - ldr r2, _080186E0 @ =gBattleWeather\n\ - ldrh r1, [r2]\n\ - movs r0, 0x10\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _080186C8\n\ - bl _08019F76\n\ -_080186C8:\n\ - movs r0, 0x18\n\ - strh r0, [r2]\n\ - ldr r0, _080186E4 @ =BattleScript_SandstreamActivates\n\ - bl b_push_move_exec\n\ - ldr r0, _080186E8 @ =0x02000000\n\ - ldr r1, _080186EC @ =0x00016003\n\ - adds r0, r1\n\ - mov r2, r10\n\ - strb r2, [r0]\n\ - bl _08019F22\n\ - .align 2, 0\n\ -_080186E0: .4byte gBattleWeather\n\ -_080186E4: .4byte BattleScript_SandstreamActivates\n\ -_080186E8: .4byte 0x02000000\n\ -_080186EC: .4byte 0x00016003\n\ -_080186F0:\n\ - ldr r2, _08018718 @ =gBattleWeather\n\ - ldrh r1, [r2]\n\ - movs r0, 0x40\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _08018700\n\ - bl _08019F76\n\ -_08018700:\n\ - movs r0, 0x60\n\ - strh r0, [r2]\n\ - ldr r0, _0801871C @ =BattleScript_DroughtActivates\n\ - bl b_push_move_exec\n\ - ldr r0, _08018720 @ =0x02000000\n\ - ldr r3, _08018724 @ =0x00016003\n\ - adds r0, r3\n\ - mov r5, r10\n\ - strb r5, [r0]\n\ - bl _08019F22\n\ - .align 2, 0\n\ -_08018718: .4byte gBattleWeather\n\ -_0801871C: .4byte BattleScript_DroughtActivates\n\ -_08018720: .4byte 0x02000000\n\ -_08018724: .4byte 0x00016003\n\ -_08018728:\n\ - ldr r0, _08018754 @ =gSpecialStatuses\n\ - mov r1, r10\n\ - lsls r2, r1, 2\n\ - adds r1, r2, r1\n\ - lsls r1, 2\n\ - adds r3, r1, r0\n\ - ldrb r0, [r3]\n\ - lsls r0, 28\n\ - cmp r0, 0\n\ - bge _08018740\n\ - bl _08019F76\n\ -_08018740:\n\ - ldr r1, _08018758 @ =gStatuses3\n\ - adds r1, r2, r1\n\ - ldr r0, [r1]\n\ - movs r2, 0x80\n\ - lsls r2, 12\n\ - orrs r0, r2\n\ - str r0, [r1]\n\ - ldrb r0, [r3]\n\ - movs r1, 0x8\n\ - b _080187CA\n\ - .align 2, 0\n\ -_08018754: .4byte gSpecialStatuses\n\ -_08018758: .4byte gStatuses3\n\ -_0801875C:\n\ - mov r0, r10\n\ - bl CastformDataTypeChange\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - mov r9, r0\n\ - cmp r0, 0\n\ - bne _08018770\n\ - bl _08019F92\n\ -_08018770:\n\ - ldr r0, _08018790 @ =BattleScript_CastformChange\n\ - bl b_push_move_exec\n\ - ldr r0, _08018794 @ =0x02000000\n\ - ldr r2, _08018798 @ =0x00016003\n\ - adds r1, r0, r2\n\ - mov r3, r10\n\ - strb r3, [r1]\n\ - mov r1, r9\n\ - subs r1, 0x1\n\ - ldr r5, _0801879C @ =0x0001609b\n\ - adds r0, r5\n\ - strb r1, [r0]\n\ - bl _08019F76\n\ - .align 2, 0\n\ -_08018790: .4byte BattleScript_CastformChange\n\ -_08018794: .4byte 0x02000000\n\ -_08018798: .4byte 0x00016003\n\ -_0801879C: .4byte 0x0001609b\n\ -_080187A0:\n\ - ldr r0, _080187D4 @ =gSpecialStatuses\n\ - mov r1, r10\n\ - lsls r2, r1, 2\n\ - adds r1, r2, r1\n\ - lsls r1, 2\n\ - adds r3, r1, r0\n\ - ldrb r0, [r3]\n\ - lsls r0, 27\n\ - cmp r0, 0\n\ - bge _080187B8\n\ - bl _08019F76\n\ -_080187B8:\n\ - ldr r1, _080187D8 @ =gStatuses3\n\ - adds r1, r2, r1\n\ - ldr r0, [r1]\n\ - movs r2, 0x80\n\ - lsls r2, 13\n\ - orrs r0, r2\n\ - str r0, [r1]\n\ - ldrb r0, [r3]\n\ - movs r1, 0x10\n\ -_080187CA:\n\ - orrs r0, r1\n\ - strb r0, [r3]\n\ - bl _08019F76\n\ - .align 2, 0\n\ -_080187D4: .4byte gSpecialStatuses\n\ -_080187D8: .4byte gStatuses3\n\ -_080187DC:\n\ - movs r6, 0\n\ - ldrb r5, [r5]\n\ - cmp r6, r5\n\ - bcc _080187E8\n\ - bl _08019F76\n\ -_080187E8:\n\ - adds r0, r6, 0\n\ - bl CastformDataTypeChange\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - mov r9, r0\n\ - cmp r0, 0\n\ - beq _080187FC\n\ - bl _08019E14\n\ -_080187FC:\n\ - adds r0, r6, 0x1\n\ - lsls r0, 24\n\ - lsrs r6, r0, 24\n\ - ldr r0, _08018810 @ =gNoOfAllBanks\n\ - ldrb r0, [r0]\n\ - cmp r6, r0\n\ - bcc _080187E8\n\ - bl _08019F76\n\ - .align 2, 0\n\ -_08018810: .4byte gNoOfAllBanks\n\ -_08018814:\n\ - ldr r2, _08018844 @ =gBattleMons\n\ - movs r0, 0x58\n\ - mov r1, r10\n\ - muls r1, r0\n\ - adds r4, r1, r2\n\ - ldrh r0, [r4, 0x28]\n\ - cmp r0, 0\n\ - bne _08018828\n\ - bl _08019F76\n\ -_08018828:\n\ - ldr r0, _08018848 @ =gBankAttacker\n\ - mov r3, r10\n\ - strb r3, [r0]\n\ - mov r3, r8\n\ - ldrb r5, [r3]\n\ - cmp r5, 0x2C\n\ - beq _0801885A\n\ - cmp r5, 0x2C\n\ - bgt _0801884C\n\ - cmp r5, 0x3\n\ - bne _08018840\n\ - b _080189B8\n\ -_08018840:\n\ - bl _08019F76\n\ - .align 2, 0\n\ -_08018844: .4byte gBattleMons\n\ -_08018848: .4byte gBankAttacker\n\ -_0801884C:\n\ - cmp r5, 0x36\n\ - bne _08018852\n\ - b _08018A18\n\ -_08018852:\n\ - cmp r5, 0x3D\n\ - beq _080188DC\n\ - bl _08019F76\n\ -_0801885A:\n\ - movs r0, 0\n\ - str r0, [sp]\n\ - movs r0, 0x13\n\ - movs r1, 0\n\ - movs r2, 0xD\n\ - movs r3, 0\n\ - bl AbilityBattleEffects\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - cmp r0, 0\n\ - beq _08018876\n\ - bl _08019F76\n\ -_08018876:\n\ - str r0, [sp]\n\ - movs r0, 0x13\n\ - movs r1, 0\n\ - movs r2, 0x4D\n\ - movs r3, 0\n\ - bl AbilityBattleEffects\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - beq _0801888E\n\ - bl _08019F76\n\ -_0801888E:\n\ - ldr r0, _080188D0 @ =gBattleWeather\n\ - ldrh r1, [r0]\n\ - movs r0, 0x7\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _0801889E\n\ - bl _08019F76\n\ -_0801889E:\n\ - ldrh r0, [r4, 0x2C]\n\ - ldrh r1, [r4, 0x28]\n\ - cmp r0, r1\n\ - bhi _080188AA\n\ - bl _08019F76\n\ -_080188AA:\n\ - mov r2, r8\n\ - strb r5, [r2]\n\ - ldr r0, _080188D4 @ =BattleScript_RainDishActivates\n\ - bl b_push_move_exec\n\ - ldr r1, _080188D8 @ =gBattleMoveDamage\n\ - ldrh r0, [r4, 0x2C]\n\ - lsrs r0, 4\n\ - str r0, [r1]\n\ - cmp r0, 0\n\ - bne _080188C4\n\ - movs r0, 0x1\n\ - str r0, [r1]\n\ -_080188C4:\n\ - ldr r0, [r1]\n\ - negs r0, r0\n\ - str r0, [r1]\n\ - bl _08019F22\n\ - .align 2, 0\n\ -_080188D0: .4byte gBattleWeather\n\ -_080188D4: .4byte BattleScript_RainDishActivates\n\ -_080188D8: .4byte gBattleMoveDamage\n\ -_080188DC:\n\ - adds r0, r2, 0\n\ - adds r0, 0x4C\n\ - adds r5, r1, r0\n\ - ldrb r0, [r5]\n\ - cmp r0, 0\n\ - bne _080188EC\n\ - bl _08019F76\n\ -_080188EC:\n\ - bl Random\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - movs r1, 0x3\n\ - bl __umodsi3\n\ - lsls r0, 16\n\ - lsrs r4, r0, 16\n\ - cmp r4, 0\n\ - beq _08018906\n\ - bl _08019F76\n\ -_08018906:\n\ - ldr r0, [r5]\n\ - movs r1, 0x88\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _08018918\n\ - ldr r0, _08018990 @ =gBattleTextBuff1\n\ - ldr r1, _08018994 @ =gStatusConditionString_PoisonJpn\n\ - bl StringCopy\n\ -_08018918:\n\ - ldr r0, [r5]\n\ - movs r1, 0x7\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _0801892A\n\ - ldr r0, _08018990 @ =gBattleTextBuff1\n\ - ldr r1, _08018998 @ =gStatusConditionString_SleepJpn\n\ - bl StringCopy\n\ -_0801892A:\n\ - ldr r0, [r5]\n\ - movs r1, 0x40\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _0801893C\n\ - ldr r0, _08018990 @ =gBattleTextBuff1\n\ - ldr r1, _0801899C @ =gStatusConditionString_ParalysisJpn\n\ - bl StringCopy\n\ -_0801893C:\n\ - ldr r0, [r5]\n\ - movs r1, 0x10\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _0801894E\n\ - ldr r0, _08018990 @ =gBattleTextBuff1\n\ - ldr r1, _080189A0 @ =gStatusConditionString_BurnJpn\n\ - bl StringCopy\n\ -_0801894E:\n\ - ldr r0, [r5]\n\ - movs r1, 0x20\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _08018960\n\ - ldr r0, _08018990 @ =gBattleTextBuff1\n\ - ldr r1, _080189A4 @ =gStatusConditionString_IceJpn\n\ - bl StringCopy\n\ -_08018960:\n\ - str r4, [r5]\n\ - ldr r0, _080189A8 @ =0x02000000\n\ - ldr r4, _080189AC @ =gActiveBank\n\ - mov r3, r10\n\ - strb r3, [r4]\n\ - ldr r1, _080189B0 @ =0x00016003\n\ - adds r0, r1\n\ - strb r3, [r0]\n\ - ldr r0, _080189B4 @ =BattleScript_ShedSkinActivates\n\ - bl b_push_move_exec\n\ - str r5, [sp]\n\ - movs r0, 0\n\ - movs r1, 0x28\n\ - movs r2, 0\n\ - movs r3, 0x4\n\ - bl EmitSetAttributes\n\ - ldrb r0, [r4]\n\ - bl MarkBufferBankForExecution\n\ - bl _08019F22\n\ - .align 2, 0\n\ -_08018990: .4byte gBattleTextBuff1\n\ -_08018994: .4byte gStatusConditionString_PoisonJpn\n\ -_08018998: .4byte gStatusConditionString_SleepJpn\n\ -_0801899C: .4byte gStatusConditionString_ParalysisJpn\n\ -_080189A0: .4byte gStatusConditionString_BurnJpn\n\ -_080189A4: .4byte gStatusConditionString_IceJpn\n\ -_080189A8: .4byte 0x02000000\n\ -_080189AC: .4byte gActiveBank\n\ -_080189B0: .4byte 0x00016003\n\ -_080189B4: .4byte BattleScript_ShedSkinActivates\n\ -_080189B8:\n\ - ldrb r2, [r4, 0x1B]\n\ - movs r0, 0x1B\n\ - ldrsb r0, [r4, r0]\n\ - cmp r0, 0xB\n\ - ble _080189C6\n\ - bl _08019F76\n\ -_080189C6:\n\ - ldr r0, _08018A04 @ =gDisableStructs\n\ - mov r3, r10\n\ - lsls r1, r3, 3\n\ - subs r1, r3\n\ - lsls r1, 2\n\ - adds r1, r0\n\ - ldrb r0, [r1, 0x16]\n\ - cmp r0, 0x2\n\ - bne _080189DC\n\ - bl _08019F76\n\ -_080189DC:\n\ - adds r0, r2, 0x1\n\ - movs r2, 0\n\ - strb r0, [r4, 0x1B]\n\ - ldr r5, _08018A08 @ =0x000160a4\n\ - adds r1, r7, r5\n\ - movs r0, 0x11\n\ - strb r0, [r1]\n\ - ldr r1, _08018A0C @ =0x000160a5\n\ - adds r0, r7, r1\n\ - strb r2, [r0]\n\ - ldr r0, _08018A10 @ =BattleScript_SpeedBoostActivates\n\ - bl b_push_move_exec\n\ - ldr r2, _08018A14 @ =0x00016003\n\ - adds r0, r7, r2\n\ - mov r3, r10\n\ - strb r3, [r0]\n\ - bl _08019F22\n\ - .align 2, 0\n\ -_08018A04: .4byte gDisableStructs\n\ -_08018A08: .4byte 0x000160a4\n\ -_08018A0C: .4byte 0x000160a5\n\ -_08018A10: .4byte BattleScript_SpeedBoostActivates\n\ -_08018A14: .4byte 0x00016003\n\ -_08018A18:\n\ - ldr r2, _08018A3C @ =gDisableStructs\n\ - ldrb r0, [r0]\n\ - lsls r1, r0, 3\n\ - subs r1, r0\n\ - lsls r1, 2\n\ - adds r1, r2\n\ - ldrb r3, [r1, 0x18]\n\ - lsls r0, r3, 31\n\ - lsrs r0, 31\n\ - movs r2, 0x1\n\ - eors r2, r0\n\ - movs r0, 0x2\n\ - negs r0, r0\n\ - ands r0, r3\n\ - orrs r0, r2\n\ - strb r0, [r1, 0x18]\n\ - bl _08019F76\n\ - .align 2, 0\n\ -_08018A3C: .4byte gDisableStructs\n\ -_08018A40:\n\ - mov r5, r8\n\ - ldrb r0, [r5]\n\ - cmp r0, 0x2B\n\ - beq _08018A4C\n\ - bl _08019F76\n\ -_08018A4C:\n\ - movs r4, 0\n\ - ldr r0, _08018ABC @ =gSoundMovesTable\n\ - ldrh r2, [r0]\n\ - ldr r5, _08018AC0 @ =0x0000ffff\n\ - adds r1, r0, 0\n\ - cmp r2, r5\n\ - bne _08018A5E\n\ - bl _08019F76\n\ -_08018A5E:\n\ - cmp r2, r3\n\ - beq _08018A76\n\ - adds r2, r1, 0\n\ -_08018A64:\n\ - adds r2, 0x2\n\ - adds r4, 0x1\n\ - ldrh r0, [r2]\n\ - cmp r0, r5\n\ - bne _08018A72\n\ - bl _08019F76\n\ -_08018A72:\n\ - cmp r0, r3\n\ - bne _08018A64\n\ -_08018A76:\n\ - lsls r0, r4, 1\n\ - adds r0, r1\n\ - ldrh r1, [r0]\n\ - ldr r0, _08018AC0 @ =0x0000ffff\n\ - cmp r1, r0\n\ - bne _08018A86\n\ - bl _08019F76\n\ -_08018A86:\n\ - ldr r1, _08018AC4 @ =gBattleMons\n\ - ldr r0, _08018AC8 @ =gBankAttacker\n\ - ldrb r2, [r0]\n\ - movs r0, 0x58\n\ - muls r0, r2\n\ - adds r1, 0x50\n\ - adds r0, r1\n\ - ldr r0, [r0]\n\ - movs r1, 0x80\n\ - lsls r1, 5\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _08018AAC\n\ - ldr r0, _08018ACC @ =gHitMarker\n\ - ldr r1, [r0]\n\ - movs r2, 0x80\n\ - lsls r2, 4\n\ - orrs r1, r2\n\ - str r1, [r0]\n\ -_08018AAC:\n\ - ldr r1, _08018AD0 @ =gBattlescriptCurrInstr\n\ - ldr r0, _08018AD4 @ =BattleScript_SoundproofProtected\n\ - str r0, [r1]\n\ - movs r0, 0x1\n\ - mov r9, r0\n\ - bl _08019F7C\n\ - .align 2, 0\n\ -_08018ABC: .4byte gSoundMovesTable\n\ -_08018AC0: .4byte 0x0000ffff\n\ -_08018AC4: .4byte gBattleMons\n\ -_08018AC8: .4byte gBankAttacker\n\ -_08018ACC: .4byte gHitMarker\n\ -_08018AD0: .4byte gBattlescriptCurrInstr\n\ -_08018AD4: .4byte BattleScript_SoundproofProtected\n\ -_08018AD8:\n\ - cmp r3, 0\n\ - bne _08018AE0\n\ - bl _08019F76\n\ -_08018AE0:\n\ - mov r1, r8\n\ - ldrb r0, [r1]\n\ - cmp r0, 0xB\n\ - beq _08018B50\n\ - cmp r0, 0xB\n\ - bgt _08018AF2\n\ - cmp r0, 0xA\n\ - beq _08018AF8\n\ - b _08018C6A\n\ -_08018AF2:\n\ - cmp r0, 0x12\n\ - beq _08018BA8\n\ - b _08018C6A\n\ -_08018AF8:\n\ - cmp r4, 0xD\n\ - beq _08018AFE\n\ - b _08018C6A\n\ -_08018AFE:\n\ - ldr r0, _08018B28 @ =gBattleMoves\n\ - lsls r1, r3, 1\n\ - adds r1, r3\n\ - lsls r1, 2\n\ - adds r1, r0\n\ - ldrb r0, [r1, 0x1]\n\ - cmp r0, 0\n\ - bne _08018B10\n\ - b _08018C6A\n\ -_08018B10:\n\ - ldr r1, _08018B2C @ =gProtectStructs\n\ - ldr r0, _08018B30 @ =gBankAttacker\n\ - ldrb r0, [r0]\n\ - lsls r0, 4\n\ - adds r0, r1\n\ - ldrb r0, [r0, 0x2]\n\ - lsls r0, 28\n\ - cmp r0, 0\n\ - bge _08018B3C\n\ - ldr r1, _08018B34 @ =gBattlescriptCurrInstr\n\ - ldr r0, _08018B38 @ =BattleScript_MoveHPDrain\n\ - b _08018B40\n\ - .align 2, 0\n\ -_08018B28: .4byte gBattleMoves\n\ -_08018B2C: .4byte gProtectStructs\n\ -_08018B30: .4byte gBankAttacker\n\ -_08018B34: .4byte gBattlescriptCurrInstr\n\ -_08018B38: .4byte BattleScript_MoveHPDrain\n\ -_08018B3C:\n\ - ldr r1, _08018B48 @ =gBattlescriptCurrInstr\n\ - ldr r0, _08018B4C @ =BattleScript_MoveHPDrain_PPLoss\n\ -_08018B40:\n\ - str r0, [r1]\n\ - movs r2, 0x1\n\ - b _08018C68\n\ - .align 2, 0\n\ -_08018B48: .4byte gBattlescriptCurrInstr\n\ -_08018B4C: .4byte BattleScript_MoveHPDrain_PPLoss\n\ -_08018B50:\n\ - cmp r4, 0xB\n\ - beq _08018B56\n\ - b _08018C6A\n\ -_08018B56:\n\ - ldr r0, _08018B80 @ =gBattleMoves\n\ - lsls r1, r3, 1\n\ - adds r1, r3\n\ - lsls r1, 2\n\ - adds r1, r0\n\ - ldrb r0, [r1, 0x1]\n\ - cmp r0, 0\n\ - bne _08018B68\n\ - b _08018C6A\n\ -_08018B68:\n\ - ldr r1, _08018B84 @ =gProtectStructs\n\ - ldr r0, _08018B88 @ =gBankAttacker\n\ - ldrb r0, [r0]\n\ - lsls r0, 4\n\ - adds r0, r1\n\ - ldrb r0, [r0, 0x2]\n\ - lsls r0, 28\n\ - cmp r0, 0\n\ - bge _08018B94\n\ - ldr r1, _08018B8C @ =gBattlescriptCurrInstr\n\ - ldr r0, _08018B90 @ =BattleScript_MoveHPDrain\n\ - b _08018B98\n\ - .align 2, 0\n\ -_08018B80: .4byte gBattleMoves\n\ -_08018B84: .4byte gProtectStructs\n\ -_08018B88: .4byte gBankAttacker\n\ -_08018B8C: .4byte gBattlescriptCurrInstr\n\ -_08018B90: .4byte BattleScript_MoveHPDrain\n\ -_08018B94:\n\ - ldr r1, _08018BA0 @ =gBattlescriptCurrInstr\n\ - ldr r0, _08018BA4 @ =BattleScript_MoveHPDrain_PPLoss\n\ -_08018B98:\n\ - str r0, [r1]\n\ - movs r3, 0x1\n\ - mov r9, r3\n\ - b _08018C6A\n\ - .align 2, 0\n\ -_08018BA0: .4byte gBattlescriptCurrInstr\n\ -_08018BA4: .4byte BattleScript_MoveHPDrain_PPLoss\n\ -_08018BA8:\n\ - cmp r4, 0xA\n\ - bne _08018C6A\n\ - ldr r1, _08018BF4 @ =gBattleMons\n\ - movs r0, 0x58\n\ - mov r5, r10\n\ - muls r5, r0\n\ - adds r0, r5, 0\n\ - adds r1, 0x4C\n\ - adds r0, r1\n\ - ldr r0, [r0]\n\ - movs r1, 0x20\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _08018C6A\n\ - ldr r2, _08018BF8 @ =0x02017100\n\ - mov r0, r10\n\ - lsls r1, r0, 2\n\ - adds r0, r1, r2\n\ - ldr r3, [r0]\n\ - movs r4, 0x1\n\ - ands r3, r4\n\ - adds r5, r1, 0\n\ - cmp r3, 0\n\ - bne _08018C30\n\ - ldr r0, _08018BFC @ =gBattleCommunication\n\ - strb r3, [r0, 0x5]\n\ - ldr r1, _08018C00 @ =gProtectStructs\n\ - ldr r0, _08018C04 @ =gBankAttacker\n\ - ldrb r0, [r0]\n\ - lsls r0, 4\n\ - adds r0, r1\n\ - ldrb r0, [r0, 0x2]\n\ - lsls r0, 28\n\ - cmp r0, 0\n\ - bge _08018C10\n\ - ldr r1, _08018C08 @ =gBattlescriptCurrInstr\n\ - ldr r0, _08018C0C @ =BattleScript_FlashFireBoost\n\ - b _08018C14\n\ - .align 2, 0\n\ -_08018BF4: .4byte gBattleMons\n\ -_08018BF8: .4byte 0x02017100\n\ -_08018BFC: .4byte gBattleCommunication\n\ -_08018C00: .4byte gProtectStructs\n\ -_08018C04: .4byte gBankAttacker\n\ -_08018C08: .4byte gBattlescriptCurrInstr\n\ -_08018C0C: .4byte BattleScript_FlashFireBoost\n\ -_08018C10:\n\ - ldr r1, _08018C28 @ =gBattlescriptCurrInstr\n\ - ldr r0, _08018C2C @ =BattleScript_FlashFireBoost_PPLoss\n\ -_08018C14:\n\ - str r0, [r1]\n\ - adds r0, r5, r2\n\ - ldr r1, [r0]\n\ - movs r2, 0x1\n\ - orrs r1, r2\n\ - str r1, [r0]\n\ - movs r1, 0x2\n\ - mov r9, r1\n\ - b _08018C6A\n\ - .align 2, 0\n\ -_08018C28: .4byte gBattlescriptCurrInstr\n\ -_08018C2C: .4byte BattleScript_FlashFireBoost_PPLoss\n\ -_08018C30:\n\ - ldr r0, _08018C4C @ =gBattleCommunication\n\ - strb r4, [r0, 0x5]\n\ - ldr r1, _08018C50 @ =gProtectStructs\n\ - ldr r0, _08018C54 @ =gBankAttacker\n\ - ldrb r0, [r0]\n\ - lsls r0, 4\n\ - adds r0, r1\n\ - ldrb r0, [r0, 0x2]\n\ - lsls r0, 28\n\ - cmp r0, 0\n\ - bge _08018C60\n\ - ldr r1, _08018C58 @ =gBattlescriptCurrInstr\n\ - ldr r0, _08018C5C @ =BattleScript_FlashFireBoost\n\ - b _08018C64\n\ - .align 2, 0\n\ -_08018C4C: .4byte gBattleCommunication\n\ -_08018C50: .4byte gProtectStructs\n\ -_08018C54: .4byte gBankAttacker\n\ -_08018C58: .4byte gBattlescriptCurrInstr\n\ -_08018C5C: .4byte BattleScript_FlashFireBoost\n\ -_08018C60:\n\ - ldr r1, _08018CA4 @ =gBattlescriptCurrInstr\n\ - ldr r0, _08018CA8 @ =BattleScript_FlashFireBoost_PPLoss\n\ -_08018C64:\n\ - str r0, [r1]\n\ - movs r2, 0x2\n\ -_08018C68:\n\ - mov r9, r2\n\ -_08018C6A:\n\ - mov r3, r9\n\ - cmp r3, 0x1\n\ - beq _08018C74\n\ - bl _08019F76\n\ -_08018C74:\n\ - ldr r1, _08018CAC @ =gBattleMons\n\ - movs r0, 0x58\n\ - mov r5, r10\n\ - muls r5, r0\n\ - adds r0, r5, 0\n\ - adds r1, r0, r1\n\ - ldrh r0, [r1, 0x2C]\n\ - ldrh r2, [r1, 0x28]\n\ - cmp r0, r2\n\ - bne _08018CD0\n\ - ldr r1, _08018CB0 @ =gProtectStructs\n\ - ldr r0, _08018CB4 @ =gBankAttacker\n\ - ldrb r0, [r0]\n\ - lsls r0, 4\n\ - adds r0, r1\n\ - ldrb r0, [r0, 0x2]\n\ - lsls r0, 28\n\ - cmp r0, 0\n\ - bge _08018CBC\n\ - ldr r1, _08018CA4 @ =gBattlescriptCurrInstr\n\ - ldr r0, _08018CB8 @ =BattleScript_MoveHPDrain_FullHP\n\ - str r0, [r1]\n\ - bl _08019F76\n\ - .align 2, 0\n\ -_08018CA4: .4byte gBattlescriptCurrInstr\n\ -_08018CA8: .4byte BattleScript_FlashFireBoost_PPLoss\n\ -_08018CAC: .4byte gBattleMons\n\ -_08018CB0: .4byte gProtectStructs\n\ -_08018CB4: .4byte gBankAttacker\n\ -_08018CB8: .4byte BattleScript_MoveHPDrain_FullHP\n\ -_08018CBC:\n\ - ldr r1, _08018CC8 @ =gBattlescriptCurrInstr\n\ - ldr r0, _08018CCC @ =BattleScript_MoveHPDrain_FullHP_PPLoss\n\ - str r0, [r1]\n\ - bl _08019F76\n\ - .align 2, 0\n\ -_08018CC8: .4byte gBattlescriptCurrInstr\n\ -_08018CCC: .4byte BattleScript_MoveHPDrain_FullHP_PPLoss\n\ -_08018CD0:\n\ - ldr r2, _08018CEC @ =gBattleMoveDamage\n\ - ldrh r0, [r1, 0x2C]\n\ - lsrs r0, 2\n\ - str r0, [r2]\n\ - cmp r0, 0\n\ - bne _08018CE0\n\ - mov r3, r9\n\ - str r3, [r2]\n\ -_08018CE0:\n\ - ldr r0, [r2]\n\ - negs r0, r0\n\ - str r0, [r2]\n\ - bl _08019F76\n\ - .align 2, 0\n\ -_08018CEC: .4byte gBattleMoveDamage\n\ -_08018CF0:\n\ - mov r5, r8\n\ - ldrb r0, [r5]\n\ - subs r0, 0x9\n\ - cmp r0, 0x2F\n\ - bls _08018CFE\n\ - bl _08019F76\n\ -_08018CFE:\n\ - lsls r0, 2\n\ - ldr r1, _08018D08 @ =_08018D0C\n\ - adds r0, r1\n\ - ldr r0, [r0]\n\ - mov pc, r0\n\ - .align 2, 0\n\ -_08018D08: .4byte _08018D0C\n\ - .align 2, 0\n\ -_08018D0C:\n\ - .4byte _08019128\n\ - .4byte _08019F76\n\ - .4byte _08019F76\n\ - .4byte _08019F76\n\ - .4byte _08019F76\n\ - .4byte _08019F76\n\ - .4byte _08019F76\n\ - .4byte _08018DCC\n\ - .4byte _08019F76\n\ - .4byte _08019F76\n\ - .4byte _08019F76\n\ - .4byte _08019F76\n\ - .4byte _08019F76\n\ - .4byte _08019F76\n\ - .4byte _08019F76\n\ - .4byte _08018E94\n\ - .4byte _08019F76\n\ - .4byte _08019F76\n\ - .4byte _08018F54\n\ - .4byte _08019F76\n\ - .4byte _08019F76\n\ - .4byte _08019F76\n\ - .4byte _08019F76\n\ - .4byte _08019F76\n\ - .4byte _08019F76\n\ - .4byte _08019F76\n\ - .4byte _08019F76\n\ - .4byte _08019F76\n\ - .4byte _08019F76\n\ - .4byte _0801904C\n\ - .4byte _08019F76\n\ - .4byte _08019F76\n\ - .4byte _08019F76\n\ - .4byte _08019F76\n\ - .4byte _08019F76\n\ - .4byte _08019F76\n\ - .4byte _08019F76\n\ - .4byte _08019F76\n\ - .4byte _08019F76\n\ - .4byte _08019F76\n\ - .4byte _08019204\n\ - .4byte _08019F76\n\ - .4byte _08019F76\n\ - .4byte _08019F76\n\ - .4byte _08019F76\n\ - .4byte _08019F76\n\ - .4byte _08019F76\n\ - .4byte _080192E0\n\ -_08018DCC:\n\ - ldr r0, _08018E74 @ =gBattleMoveFlags\n\ - ldrb r1, [r0]\n\ - movs r0, 0x29\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _08018DDC\n\ - bl _08019F76\n\ -_08018DDC:\n\ - cmp r3, 0xA5\n\ - bne _08018DE4\n\ - bl _08019F76\n\ -_08018DE4:\n\ - ldr r0, _08018E78 @ =gBattleMoves\n\ - lsls r1, r3, 1\n\ - adds r1, r3\n\ - lsls r1, 2\n\ - adds r1, r0\n\ - ldrb r0, [r1, 0x1]\n\ - cmp r0, 0\n\ - bne _08018DF8\n\ - bl _08019F76\n\ -_08018DF8:\n\ - ldr r2, _08018E7C @ =gSpecialStatuses\n\ - ldr r0, _08018E80 @ =gBankTarget\n\ - ldrb r1, [r0]\n\ - lsls r0, r1, 2\n\ - adds r0, r1\n\ - lsls r1, r0, 2\n\ - adds r0, r2, 0\n\ - adds r0, 0x8\n\ - adds r0, r1, r0\n\ - ldr r0, [r0]\n\ - cmp r0, 0\n\ - bne _08018E20\n\ - adds r0, r2, 0\n\ - adds r0, 0xC\n\ - adds r0, r1, r0\n\ - ldr r0, [r0]\n\ - cmp r0, 0\n\ - bne _08018E20\n\ - bl _08019F76\n\ -_08018E20:\n\ - ldr r1, _08018E84 @ =gBattleMons\n\ - movs r0, 0x58\n\ - mov r2, r10\n\ - muls r2, r0\n\ - adds r0, r2, 0\n\ - adds r1, r0, r1\n\ - adds r3, r1, 0\n\ - adds r3, 0x21\n\ - ldrb r0, [r3]\n\ - cmp r0, r4\n\ - bne _08018E3A\n\ - bl _08019F76\n\ -_08018E3A:\n\ - adds r2, r1, 0\n\ - adds r2, 0x22\n\ - ldrb r0, [r2]\n\ - cmp r0, r4\n\ - bne _08018E48\n\ - bl _08019F76\n\ -_08018E48:\n\ - ldrh r0, [r1, 0x28]\n\ - cmp r0, 0\n\ - bne _08018E52\n\ - bl _08019F76\n\ -_08018E52:\n\ - strb r4, [r3]\n\ - strb r4, [r2]\n\ - ldr r1, _08018E88 @ =gBattleTextBuff1\n\ - movs r0, 0xFD\n\ - strb r0, [r1]\n\ - movs r0, 0x3\n\ - strb r0, [r1, 0x1]\n\ - strb r4, [r1, 0x2]\n\ - movs r0, 0xFF\n\ - strb r0, [r1, 0x3]\n\ - bl b_movescr_stack_push_cursor\n\ - ldr r1, _08018E8C @ =gBattlescriptCurrInstr\n\ - ldr r0, _08018E90 @ =BattleScript_ColorChangeActivates\n\ - str r0, [r1]\n\ - bl _08019F22\n\ - .align 2, 0\n\ -_08018E74: .4byte gBattleMoveFlags\n\ -_08018E78: .4byte gBattleMoves\n\ -_08018E7C: .4byte gSpecialStatuses\n\ -_08018E80: .4byte gBankTarget\n\ -_08018E84: .4byte gBattleMons\n\ -_08018E88: .4byte gBattleTextBuff1\n\ -_08018E8C: .4byte gBattlescriptCurrInstr\n\ -_08018E90: .4byte BattleScript_ColorChangeActivates\n\ -_08018E94:\n\ - ldr r0, _08018F2C @ =gBattleMoveFlags\n\ - ldrb r1, [r0]\n\ - movs r0, 0x29\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _08018EA4\n\ - bl _08019F76\n\ -_08018EA4:\n\ - ldr r1, _08018F30 @ =gBattleMons\n\ - ldr r0, _08018F34 @ =gBankAttacker\n\ - ldrb r2, [r0]\n\ - movs r0, 0x58\n\ - muls r0, r2\n\ - adds r4, r0, r1\n\ - ldrh r0, [r4, 0x28]\n\ - cmp r0, 0\n\ - bne _08018EBA\n\ - bl _08019F76\n\ -_08018EBA:\n\ - ldr r0, _08018F38 @ =gProtectStructs\n\ - lsls r1, r2, 4\n\ - adds r1, r0\n\ - ldrb r0, [r1, 0x1]\n\ - lsls r0, 31\n\ - cmp r0, 0\n\ - beq _08018ECC\n\ - bl _08019F76\n\ -_08018ECC:\n\ - ldr r2, _08018F3C @ =gSpecialStatuses\n\ - ldr r0, _08018F40 @ =gBankTarget\n\ - ldrb r1, [r0]\n\ - lsls r0, r1, 2\n\ - adds r0, r1\n\ - lsls r1, r0, 2\n\ - adds r0, r2, 0\n\ - adds r0, 0x8\n\ - adds r0, r1, r0\n\ - ldr r0, [r0]\n\ - cmp r0, 0\n\ - bne _08018EF4\n\ - adds r0, r2, 0\n\ - adds r0, 0xC\n\ - adds r0, r1, r0\n\ - ldr r0, [r0]\n\ - cmp r0, 0\n\ - bne _08018EF4\n\ - bl _08019F76\n\ -_08018EF4:\n\ - ldr r1, _08018F44 @ =gBattleMoves\n\ - lsls r0, r3, 1\n\ - adds r0, r3\n\ - lsls r0, 2\n\ - adds r0, r1\n\ - ldrb r1, [r0, 0x8]\n\ - movs r2, 0x1\n\ - adds r0, r2, 0\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _08018F0E\n\ - bl _08019F76\n\ -_08018F0E:\n\ - ldr r1, _08018F48 @ =gBattleMoveDamage\n\ - ldrh r0, [r4, 0x2C]\n\ - lsrs r0, 4\n\ - str r0, [r1]\n\ - cmp r0, 0\n\ - bne _08018F1C\n\ - str r2, [r1]\n\ -_08018F1C:\n\ - bl b_movescr_stack_push_cursor\n\ - ldr r1, _08018F4C @ =gBattlescriptCurrInstr\n\ - ldr r0, _08018F50 @ =BattleScript_RoughSkinActivates\n\ - str r0, [r1]\n\ - bl _08019F22\n\ - .align 2, 0\n\ -_08018F2C: .4byte gBattleMoveFlags\n\ -_08018F30: .4byte gBattleMons\n\ -_08018F34: .4byte gBankAttacker\n\ -_08018F38: .4byte gProtectStructs\n\ -_08018F3C: .4byte gSpecialStatuses\n\ -_08018F40: .4byte gBankTarget\n\ -_08018F44: .4byte gBattleMoves\n\ -_08018F48: .4byte gBattleMoveDamage\n\ -_08018F4C: .4byte gBattlescriptCurrInstr\n\ -_08018F50: .4byte BattleScript_RoughSkinActivates\n\ -_08018F54:\n\ - ldr r0, _08019020 @ =gBattleMoveFlags\n\ - ldrb r1, [r0]\n\ - movs r0, 0x29\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _08018F64\n\ - bl _08019F76\n\ -_08018F64:\n\ - ldr r1, _08019024 @ =gBattleMons\n\ - ldr r0, _08019028 @ =gBankAttacker\n\ - ldrb r2, [r0]\n\ - movs r0, 0x58\n\ - muls r0, r2\n\ - adds r0, r1\n\ - ldrh r0, [r0, 0x28]\n\ - cmp r0, 0\n\ - bne _08018F7A\n\ - bl _08019F76\n\ -_08018F7A:\n\ - ldr r0, _0801902C @ =gProtectStructs\n\ - lsls r1, r2, 4\n\ - adds r1, r0\n\ - ldrb r0, [r1, 0x1]\n\ - lsls r0, 31\n\ - cmp r0, 0\n\ - beq _08018F8C\n\ - bl _08019F76\n\ -_08018F8C:\n\ - ldr r2, _08019030 @ =gSpecialStatuses\n\ - ldr r0, _08019034 @ =gBankTarget\n\ - ldrb r1, [r0]\n\ - lsls r0, r1, 2\n\ - adds r0, r1\n\ - lsls r1, r0, 2\n\ - adds r0, r2, 0\n\ - adds r0, 0x8\n\ - adds r0, r1, r0\n\ - ldr r0, [r0]\n\ - cmp r0, 0\n\ - bne _08018FB4\n\ - adds r0, r2, 0\n\ - adds r0, 0xC\n\ - adds r0, r1, r0\n\ - ldr r0, [r0]\n\ - cmp r0, 0\n\ - bne _08018FB4\n\ - bl _08019F76\n\ -_08018FB4:\n\ - ldr r1, _08019038 @ =gBattleMoves\n\ - lsls r0, r3, 1\n\ - adds r0, r3\n\ - lsls r0, 2\n\ - adds r0, r1\n\ - ldrb r1, [r0, 0x8]\n\ - movs r0, 0x1\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _08018FCC\n\ - bl _08019F76\n\ -_08018FCC:\n\ - bl Random\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - movs r1, 0xA\n\ - bl __umodsi3\n\ - lsls r0, 16\n\ - cmp r0, 0\n\ - beq _08018FE4\n\ - bl _08019F76\n\ -_08018FE4:\n\ - ldr r5, _0801903C @ =gBattleCommunication\n\ - movs r4, 0x3\n\ -_08018FE8:\n\ - bl Random\n\ - ands r0, r4\n\ - strb r0, [r5, 0x3]\n\ - cmp r0, 0\n\ - beq _08018FE8\n\ - ldr r1, _0801903C @ =gBattleCommunication\n\ - ldrb r0, [r1, 0x3]\n\ - cmp r0, 0x3\n\ - bne _08019000\n\ - adds r0, 0x2\n\ - strb r0, [r1, 0x3]\n\ -_08019000:\n\ - ldrb r0, [r1, 0x3]\n\ - adds r0, 0x40\n\ - strb r0, [r1, 0x3]\n\ - bl b_movescr_stack_push_cursor\n\ - ldr r1, _08019040 @ =gBattlescriptCurrInstr\n\ - ldr r0, _08019044 @ =BattleScript_ApplySecondaryEffect\n\ - str r0, [r1]\n\ - ldr r2, _08019048 @ =gHitMarker\n\ - ldr r0, [r2]\n\ - movs r1, 0x80\n\ - lsls r1, 6\n\ - orrs r0, r1\n\ - str r0, [r2]\n\ - bl _08019F22\n\ - .align 2, 0\n\ -_08019020: .4byte gBattleMoveFlags\n\ -_08019024: .4byte gBattleMons\n\ -_08019028: .4byte gBankAttacker\n\ -_0801902C: .4byte gProtectStructs\n\ -_08019030: .4byte gSpecialStatuses\n\ -_08019034: .4byte gBankTarget\n\ -_08019038: .4byte gBattleMoves\n\ -_0801903C: .4byte gBattleCommunication\n\ -_08019040: .4byte gBattlescriptCurrInstr\n\ -_08019044: .4byte BattleScript_ApplySecondaryEffect\n\ -_08019048: .4byte gHitMarker\n\ -_0801904C:\n\ - ldr r0, _080190FC @ =gBattleMoveFlags\n\ - ldrb r1, [r0]\n\ - movs r0, 0x29\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _0801905C\n\ - bl _08019F76\n\ -_0801905C:\n\ - ldr r1, _08019100 @ =gBattleMons\n\ - ldr r0, _08019104 @ =gBankAttacker\n\ - ldrb r2, [r0]\n\ - movs r0, 0x58\n\ - muls r0, r2\n\ - adds r0, r1\n\ - ldrh r0, [r0, 0x28]\n\ - cmp r0, 0\n\ - bne _08019072\n\ - bl _08019F76\n\ -_08019072:\n\ - ldr r0, _08019108 @ =gProtectStructs\n\ - lsls r1, r2, 4\n\ - adds r1, r0\n\ - ldrb r0, [r1, 0x1]\n\ - lsls r0, 31\n\ - cmp r0, 0\n\ - beq _08019084\n\ - bl _08019F76\n\ -_08019084:\n\ - ldr r2, _0801910C @ =gSpecialStatuses\n\ - ldr r0, _08019110 @ =gBankTarget\n\ - ldrb r1, [r0]\n\ - lsls r0, r1, 2\n\ - adds r0, r1\n\ - lsls r1, r0, 2\n\ - adds r0, r2, 0\n\ - adds r0, 0x8\n\ - adds r0, r1, r0\n\ - ldr r0, [r0]\n\ - cmp r0, 0\n\ - bne _080190AC\n\ - adds r0, r2, 0\n\ - adds r0, 0xC\n\ - adds r0, r1, r0\n\ - ldr r0, [r0]\n\ - cmp r0, 0\n\ - bne _080190AC\n\ - bl _08019F76\n\ -_080190AC:\n\ - ldr r1, _08019114 @ =gBattleMoves\n\ - lsls r0, r3, 1\n\ - adds r0, r3\n\ - lsls r0, 2\n\ - adds r0, r1\n\ - ldrb r1, [r0, 0x8]\n\ - movs r0, 0x1\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _080190C4\n\ - bl _08019F76\n\ -_080190C4:\n\ - bl Random\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - movs r1, 0x3\n\ - bl __umodsi3\n\ - lsls r0, 16\n\ - cmp r0, 0\n\ - beq _080190DC\n\ - bl _08019F76\n\ -_080190DC:\n\ - ldr r1, _08019118 @ =gBattleCommunication\n\ - movs r0, 0x42\n\ - strb r0, [r1, 0x3]\n\ - bl b_movescr_stack_push_cursor\n\ - ldr r1, _0801911C @ =gBattlescriptCurrInstr\n\ - ldr r0, _08019120 @ =BattleScript_ApplySecondaryEffect\n\ - str r0, [r1]\n\ - ldr r2, _08019124 @ =gHitMarker\n\ - ldr r0, [r2]\n\ - movs r1, 0x80\n\ - lsls r1, 6\n\ - orrs r0, r1\n\ - str r0, [r2]\n\ - bl _08019F22\n\ - .align 2, 0\n\ -_080190FC: .4byte gBattleMoveFlags\n\ -_08019100: .4byte gBattleMons\n\ -_08019104: .4byte gBankAttacker\n\ -_08019108: .4byte gProtectStructs\n\ -_0801910C: .4byte gSpecialStatuses\n\ -_08019110: .4byte gBankTarget\n\ -_08019114: .4byte gBattleMoves\n\ -_08019118: .4byte gBattleCommunication\n\ -_0801911C: .4byte gBattlescriptCurrInstr\n\ -_08019120: .4byte BattleScript_ApplySecondaryEffect\n\ -_08019124: .4byte gHitMarker\n\ -_08019128:\n\ - ldr r0, _080191D8 @ =gBattleMoveFlags\n\ - ldrb r1, [r0]\n\ - movs r0, 0x29\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _08019138\n\ - bl _08019F76\n\ -_08019138:\n\ - ldr r1, _080191DC @ =gBattleMons\n\ - ldr r0, _080191E0 @ =gBankAttacker\n\ - ldrb r2, [r0]\n\ - movs r0, 0x58\n\ - muls r0, r2\n\ - adds r0, r1\n\ - ldrh r0, [r0, 0x28]\n\ - cmp r0, 0\n\ - bne _0801914E\n\ - bl _08019F76\n\ -_0801914E:\n\ - ldr r0, _080191E4 @ =gProtectStructs\n\ - lsls r1, r2, 4\n\ - adds r1, r0\n\ - ldrb r0, [r1, 0x1]\n\ - lsls r0, 31\n\ - cmp r0, 0\n\ - beq _08019160\n\ - bl _08019F76\n\ -_08019160:\n\ - ldr r2, _080191E8 @ =gSpecialStatuses\n\ - ldr r0, _080191EC @ =gBankTarget\n\ - ldrb r1, [r0]\n\ - lsls r0, r1, 2\n\ - adds r0, r1\n\ - lsls r1, r0, 2\n\ - adds r0, r2, 0\n\ - adds r0, 0x8\n\ - adds r0, r1, r0\n\ - ldr r0, [r0]\n\ - cmp r0, 0\n\ - bne _08019188\n\ - adds r0, r2, 0\n\ - adds r0, 0xC\n\ - adds r0, r1, r0\n\ - ldr r0, [r0]\n\ - cmp r0, 0\n\ - bne _08019188\n\ - bl _08019F76\n\ -_08019188:\n\ - ldr r1, _080191F0 @ =gBattleMoves\n\ - lsls r0, r3, 1\n\ - adds r0, r3\n\ - lsls r0, 2\n\ - adds r0, r1\n\ - ldrb r1, [r0, 0x8]\n\ - movs r0, 0x1\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _080191A0\n\ - bl _08019F76\n\ -_080191A0:\n\ - bl Random\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - movs r1, 0x3\n\ - bl __umodsi3\n\ - lsls r0, 16\n\ - cmp r0, 0\n\ - beq _080191B8\n\ - bl _08019F76\n\ -_080191B8:\n\ - ldr r1, _080191F4 @ =gBattleCommunication\n\ - movs r0, 0x45\n\ - strb r0, [r1, 0x3]\n\ - bl b_movescr_stack_push_cursor\n\ - ldr r1, _080191F8 @ =gBattlescriptCurrInstr\n\ - ldr r0, _080191FC @ =BattleScript_ApplySecondaryEffect\n\ - str r0, [r1]\n\ - ldr r2, _08019200 @ =gHitMarker\n\ - ldr r0, [r2]\n\ - movs r1, 0x80\n\ - lsls r1, 6\n\ - orrs r0, r1\n\ - str r0, [r2]\n\ - bl _08019F22\n\ - .align 2, 0\n\ -_080191D8: .4byte gBattleMoveFlags\n\ -_080191DC: .4byte gBattleMons\n\ -_080191E0: .4byte gBankAttacker\n\ -_080191E4: .4byte gProtectStructs\n\ -_080191E8: .4byte gSpecialStatuses\n\ -_080191EC: .4byte gBankTarget\n\ -_080191F0: .4byte gBattleMoves\n\ -_080191F4: .4byte gBattleCommunication\n\ -_080191F8: .4byte gBattlescriptCurrInstr\n\ -_080191FC: .4byte BattleScript_ApplySecondaryEffect\n\ -_08019200: .4byte gHitMarker\n\ -_08019204:\n\ - ldr r0, _080192B4 @ =gBattleMoveFlags\n\ - ldrb r1, [r0]\n\ - movs r0, 0x29\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _08019214\n\ - bl _08019F76\n\ -_08019214:\n\ - ldr r1, _080192B8 @ =gBattleMons\n\ - ldr r0, _080192BC @ =gBankAttacker\n\ - ldrb r2, [r0]\n\ - movs r0, 0x58\n\ - muls r0, r2\n\ - adds r0, r1\n\ - ldrh r0, [r0, 0x28]\n\ - cmp r0, 0\n\ - bne _0801922A\n\ - bl _08019F76\n\ -_0801922A:\n\ - ldr r0, _080192C0 @ =gProtectStructs\n\ - lsls r1, r2, 4\n\ - adds r1, r0\n\ - ldrb r0, [r1, 0x1]\n\ - lsls r0, 31\n\ - cmp r0, 0\n\ - beq _0801923C\n\ - bl _08019F76\n\ -_0801923C:\n\ - ldr r1, _080192C4 @ =gBattleMoves\n\ - lsls r0, r3, 1\n\ - adds r0, r3\n\ - lsls r0, 2\n\ - adds r0, r1\n\ - ldrb r1, [r0, 0x8]\n\ - movs r0, 0x1\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _08019254\n\ - bl _08019F76\n\ -_08019254:\n\ - ldr r2, _080192C8 @ =gSpecialStatuses\n\ - ldr r0, _080192CC @ =gBankTarget\n\ - ldrb r1, [r0]\n\ - lsls r0, r1, 2\n\ - adds r0, r1\n\ - lsls r1, r0, 2\n\ - adds r0, r2, 0\n\ - adds r0, 0x8\n\ - adds r0, r1, r0\n\ - ldr r0, [r0]\n\ - cmp r0, 0\n\ - bne _0801927C\n\ - adds r0, r2, 0\n\ - adds r0, 0xC\n\ - adds r0, r1, r0\n\ - ldr r0, [r0]\n\ - cmp r0, 0\n\ - bne _0801927C\n\ - bl _08019F76\n\ -_0801927C:\n\ - bl Random\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - movs r1, 0x3\n\ - bl __umodsi3\n\ - lsls r0, 16\n\ - cmp r0, 0\n\ - beq _08019294\n\ - bl _08019F76\n\ -_08019294:\n\ - ldr r1, _080192D0 @ =gBattleCommunication\n\ - movs r0, 0x43\n\ - strb r0, [r1, 0x3]\n\ - bl b_movescr_stack_push_cursor\n\ - ldr r1, _080192D4 @ =gBattlescriptCurrInstr\n\ - ldr r0, _080192D8 @ =BattleScript_ApplySecondaryEffect\n\ - str r0, [r1]\n\ - ldr r2, _080192DC @ =gHitMarker\n\ - ldr r0, [r2]\n\ - movs r1, 0x80\n\ - lsls r1, 6\n\ - orrs r0, r1\n\ - str r0, [r2]\n\ - bl _08019F22\n\ - .align 2, 0\n\ -_080192B4: .4byte gBattleMoveFlags\n\ -_080192B8: .4byte gBattleMons\n\ -_080192BC: .4byte gBankAttacker\n\ -_080192C0: .4byte gProtectStructs\n\ -_080192C4: .4byte gBattleMoves\n\ -_080192C8: .4byte gSpecialStatuses\n\ -_080192CC: .4byte gBankTarget\n\ -_080192D0: .4byte gBattleCommunication\n\ -_080192D4: .4byte gBattlescriptCurrInstr\n\ -_080192D8: .4byte BattleScript_ApplySecondaryEffect\n\ -_080192DC: .4byte gHitMarker\n\ -_080192E0:\n\ - ldr r0, _08019420 @ =gBattleMoveFlags\n\ - ldrb r1, [r0]\n\ - movs r0, 0x29\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _080192F0\n\ - bl _08019F76\n\ -_080192F0:\n\ - ldr r5, _08019424 @ =gBattleMons\n\ - ldr r7, _08019428 @ =gBankAttacker\n\ - ldrb r1, [r7]\n\ - movs r6, 0x58\n\ - adds r0, r1, 0\n\ - muls r0, r6\n\ - adds r0, r5\n\ - ldrh r0, [r0, 0x28]\n\ - cmp r0, 0\n\ - bne _08019308\n\ - bl _08019F76\n\ -_08019308:\n\ - ldr r0, _0801942C @ =gProtectStructs\n\ - lsls r1, 4\n\ - adds r1, r0\n\ - ldrb r0, [r1, 0x1]\n\ - lsls r0, 31\n\ - cmp r0, 0\n\ - beq _0801931A\n\ - bl _08019F76\n\ -_0801931A:\n\ - ldr r1, _08019430 @ =gBattleMoves\n\ - lsls r0, r3, 1\n\ - adds r0, r3\n\ - lsls r0, 2\n\ - adds r0, r1\n\ - ldrb r1, [r0, 0x8]\n\ - movs r0, 0x1\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _08019332\n\ - bl _08019F76\n\ -_08019332:\n\ - ldr r3, _08019434 @ =gSpecialStatuses\n\ - ldr r0, _08019438 @ =gBankTarget\n\ - mov r8, r0\n\ - ldrb r1, [r0]\n\ - lsls r0, r1, 2\n\ - adds r0, r1\n\ - lsls r2, r0, 2\n\ - adds r0, r3, 0\n\ - adds r0, 0x8\n\ - adds r0, r2, r0\n\ - ldr r0, [r0]\n\ - cmp r0, 0\n\ - bne _0801935C\n\ - adds r0, r3, 0\n\ - adds r0, 0xC\n\ - adds r0, r2, r0\n\ - ldr r0, [r0]\n\ - cmp r0, 0\n\ - bne _0801935C\n\ - bl _08019F76\n\ -_0801935C:\n\ - adds r0, r1, 0\n\ - muls r0, r6\n\ - adds r0, r5\n\ - ldrh r0, [r0, 0x28]\n\ - cmp r0, 0\n\ - bne _0801936C\n\ - bl _08019F76\n\ -_0801936C:\n\ - bl Random\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - movs r1, 0x3\n\ - bl __umodsi3\n\ - lsls r0, 16\n\ - cmp r0, 0\n\ - beq _08019384\n\ - bl _08019F76\n\ -_08019384:\n\ - ldrb r0, [r7]\n\ - muls r0, r6\n\ - adds r0, r5\n\ - adds r0, 0x20\n\ - ldrb r0, [r0]\n\ - cmp r0, 0xC\n\ - bne _08019396\n\ - bl _08019F76\n\ -_08019396:\n\ - ldr r0, [sp, 0x8]\n\ - ldr r1, [sp, 0x10]\n\ - bl GetGenderFromSpeciesAndPersonality\n\ - adds r4, r0, 0\n\ - ldr r0, [sp, 0xC]\n\ - ldr r1, [sp, 0x14]\n\ - bl GetGenderFromSpeciesAndPersonality\n\ - lsls r4, 24\n\ - lsls r0, 24\n\ - cmp r4, r0\n\ - bne _080193B4\n\ - bl _08019F76\n\ -_080193B4:\n\ - ldrb r0, [r7]\n\ - muls r0, r6\n\ - adds r4, r5, 0\n\ - adds r4, 0x50\n\ - adds r0, r4\n\ - ldr r0, [r0]\n\ - movs r1, 0xF0\n\ - lsls r1, 12\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _080193CE\n\ - bl _08019F76\n\ -_080193CE:\n\ - ldr r0, [sp, 0x8]\n\ - ldr r1, [sp, 0x10]\n\ - bl GetGenderFromSpeciesAndPersonality\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - cmp r0, 0xFF\n\ - bne _080193E2\n\ - bl _08019F76\n\ -_080193E2:\n\ - ldr r0, [sp, 0xC]\n\ - ldr r1, [sp, 0x14]\n\ - bl GetGenderFromSpeciesAndPersonality\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - cmp r0, 0xFF\n\ - bne _080193F6\n\ - bl _08019F76\n\ -_080193F6:\n\ - ldrb r0, [r7]\n\ - adds r2, r0, 0\n\ - muls r2, r6\n\ - adds r2, r4\n\ - ldr r1, _0801943C @ =gBitTable\n\ - mov r3, r8\n\ - ldrb r0, [r3]\n\ - lsls r0, 2\n\ - adds r0, r1\n\ - ldr r1, [r0]\n\ - lsls r1, 16\n\ - ldr r0, [r2]\n\ - orrs r0, r1\n\ - str r0, [r2]\n\ - bl b_movescr_stack_push_cursor\n\ - ldr r1, _08019440 @ =gBattlescriptCurrInstr\n\ - ldr r0, _08019444 @ =BattleScript_CuteCharmActivates\n\ - str r0, [r1]\n\ - bl _08019F22\n\ - .align 2, 0\n\ -_08019420: .4byte gBattleMoveFlags\n\ -_08019424: .4byte gBattleMons\n\ -_08019428: .4byte gBankAttacker\n\ -_0801942C: .4byte gProtectStructs\n\ -_08019430: .4byte gBattleMoves\n\ -_08019434: .4byte gSpecialStatuses\n\ -_08019438: .4byte gBankTarget\n\ -_0801943C: .4byte gBitTable\n\ -_08019440: .4byte gBattlescriptCurrInstr\n\ -_08019444: .4byte BattleScript_CuteCharmActivates\n\ -_08019448:\n\ - movs r5, 0\n\ - mov r10, r5\n\ - ldr r0, _0801947C @ =gNoOfAllBanks\n\ - ldrb r0, [r0]\n\ - cmp r10, r0\n\ - bcc _08019458\n\ - bl _08019F76\n\ -_08019458:\n\ - ldr r1, _08019480 @ =gBattleMons\n\ - movs r0, 0x58\n\ - mov r2, r10\n\ - muls r2, r0\n\ - adds r0, r2, 0\n\ - adds r0, r1\n\ - adds r0, 0x20\n\ - ldrb r0, [r0]\n\ - subs r0, 0x7\n\ - adds r2, r1, 0\n\ - cmp r0, 0x41\n\ - bls _08019472\n\ - b _080196D6\n\ -_08019472:\n\ - lsls r0, 2\n\ - ldr r1, _08019484 @ =_08019488\n\ - adds r0, r1\n\ - ldr r0, [r0]\n\ - mov pc, r0\n\ - .align 2, 0\n\ -_0801947C: .4byte gNoOfAllBanks\n\ -_08019480: .4byte gBattleMons\n\ -_08019484: .4byte _08019488\n\ - .align 2, 0\n\ -_08019488:\n\ - .4byte _080195EC\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _080196B0\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _08019614\n\ - .4byte _080196D6\n\ - .4byte _08019590\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _080195BC\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _08019680\n\ - .4byte _08019650\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _080196D6\n\ - .4byte _08019614\n\ -_08019590:\n\ - movs r0, 0x58\n\ - mov r3, r10\n\ - muls r3, r0\n\ - adds r0, r3, 0\n\ - adds r1, r2, 0\n\ - adds r1, 0x4C\n\ - adds r0, r1\n\ - ldr r0, [r0]\n\ - ldr r1, _080195B0 @ =0x00000f88\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _080195AA\n\ - b _080196D6\n\ -_080195AA:\n\ - ldr r0, _080195B4 @ =gBattleTextBuff1\n\ - ldr r1, _080195B8 @ =gStatusConditionString_PoisonJpn\n\ - b _0801969C\n\ - .align 2, 0\n\ -_080195B0: .4byte 0x00000f88\n\ -_080195B4: .4byte gBattleTextBuff1\n\ -_080195B8: .4byte gStatusConditionString_PoisonJpn\n\ -_080195BC:\n\ - movs r0, 0x58\n\ - mov r1, r10\n\ - muls r1, r0\n\ - adds r0, r1, 0\n\ - adds r1, r2, 0\n\ - adds r1, 0x50\n\ - adds r0, r1\n\ - ldr r0, [r0]\n\ - movs r1, 0x7\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _080195D6\n\ - b _080196D6\n\ -_080195D6:\n\ - ldr r0, _080195E4 @ =gBattleTextBuff1\n\ - ldr r1, _080195E8 @ =gStatusConditionString_ConfusionJpn\n\ - bl StringCopy\n\ - movs r2, 0x2\n\ - mov r9, r2\n\ - b _080196DC\n\ - .align 2, 0\n\ -_080195E4: .4byte gBattleTextBuff1\n\ -_080195E8: .4byte gStatusConditionString_ConfusionJpn\n\ -_080195EC:\n\ - movs r0, 0x58\n\ - mov r3, r10\n\ - muls r3, r0\n\ - adds r0, r3, 0\n\ - adds r1, r2, 0\n\ - adds r1, 0x4C\n\ - adds r0, r1\n\ - ldr r0, [r0]\n\ - movs r1, 0x40\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _080196D6\n\ - ldr r0, _0801960C @ =gBattleTextBuff1\n\ - ldr r1, _08019610 @ =gStatusConditionString_ParalysisJpn\n\ - b _0801969C\n\ - .align 2, 0\n\ -_0801960C: .4byte gBattleTextBuff1\n\ -_08019610: .4byte gStatusConditionString_ParalysisJpn\n\ -_08019614:\n\ - movs r0, 0x58\n\ - mov r3, r10\n\ - muls r3, r0\n\ - adds r0, r2, 0\n\ - adds r0, 0x4C\n\ - adds r0, r3, r0\n\ - ldr r0, [r0]\n\ - movs r1, 0x7\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _080196D6\n\ - adds r2, 0x50\n\ - adds r2, r3, r2\n\ - ldr r0, [r2]\n\ - ldr r1, _08019644 @ =0xf7ffffff\n\ - ands r0, r1\n\ - str r0, [r2]\n\ - ldr r0, _08019648 @ =gBattleTextBuff1\n\ - ldr r1, _0801964C @ =gStatusConditionString_SleepJpn\n\ - bl StringCopy\n\ - movs r0, 0x1\n\ - mov r9, r0\n\ - b _080196DC\n\ - .align 2, 0\n\ -_08019644: .4byte 0xf7ffffff\n\ -_08019648: .4byte gBattleTextBuff1\n\ -_0801964C: .4byte gStatusConditionString_SleepJpn\n\ -_08019650:\n\ - movs r0, 0x58\n\ - mov r1, r10\n\ - muls r1, r0\n\ - adds r0, r1, 0\n\ - adds r1, r2, 0\n\ - adds r1, 0x4C\n\ - adds r0, r1\n\ - ldr r0, [r0]\n\ - movs r1, 0x10\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _080196D6\n\ - ldr r0, _08019678 @ =gBattleTextBuff1\n\ - ldr r1, _0801967C @ =gStatusConditionString_BurnJpn\n\ - bl StringCopy\n\ - movs r2, 0x1\n\ - mov r9, r2\n\ - b _080196DC\n\ - .align 2, 0\n\ -_08019678: .4byte gBattleTextBuff1\n\ -_0801967C: .4byte gStatusConditionString_BurnJpn\n\ -_08019680:\n\ - movs r0, 0x58\n\ - mov r3, r10\n\ - muls r3, r0\n\ - adds r0, r3, 0\n\ - adds r1, r2, 0\n\ - adds r1, 0x4C\n\ - adds r0, r1\n\ - ldr r0, [r0]\n\ - movs r1, 0x20\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _080196D6\n\ - ldr r0, _080196A8 @ =gBattleTextBuff1\n\ - ldr r1, _080196AC @ =gStatusConditionString_IceJpn\n\ -_0801969C:\n\ - bl StringCopy\n\ - movs r5, 0x1\n\ - mov r9, r5\n\ - b _080196DC\n\ - .align 2, 0\n\ -_080196A8: .4byte gBattleTextBuff1\n\ -_080196AC: .4byte gStatusConditionString_IceJpn\n\ -_080196B0:\n\ - movs r0, 0x58\n\ - mov r1, r10\n\ - muls r1, r0\n\ - adds r0, r1, 0\n\ - adds r1, r2, 0\n\ - adds r1, 0x50\n\ - adds r0, r1\n\ - ldr r0, [r0]\n\ - movs r1, 0xF0\n\ - lsls r1, 12\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _080196D6\n\ - ldr r0, _080196EC @ =gBattleTextBuff1\n\ - ldr r1, _080196F0 @ =gStatusConditionString_LoveJpn\n\ - bl StringCopy\n\ - movs r2, 0x3\n\ - mov r9, r2\n\ -_080196D6:\n\ - mov r3, r9\n\ - cmp r3, 0\n\ - beq _08019798\n\ -_080196DC:\n\ - mov r5, r9\n\ - cmp r5, 0x2\n\ - beq _08019710\n\ - cmp r5, 0x2\n\ - bgt _080196F4\n\ - cmp r5, 0x1\n\ - beq _080196FC\n\ - b _0801973C\n\ - .align 2, 0\n\ -_080196EC: .4byte gBattleTextBuff1\n\ -_080196F0: .4byte gStatusConditionString_LoveJpn\n\ -_080196F4:\n\ - mov r0, r9\n\ - cmp r0, 0x3\n\ - beq _08019728\n\ - b _0801973C\n\ -_080196FC:\n\ - ldr r1, _0801970C @ =gBattleMons\n\ - movs r0, 0x58\n\ - mov r2, r10\n\ - muls r2, r0\n\ - adds r1, 0x4C\n\ - adds r2, r1\n\ - movs r0, 0\n\ - b _0801973A\n\ - .align 2, 0\n\ -_0801970C: .4byte gBattleMons\n\ -_08019710:\n\ - ldr r1, _08019724 @ =gBattleMons\n\ - movs r0, 0x58\n\ - mov r2, r10\n\ - muls r2, r0\n\ - adds r1, 0x50\n\ - adds r2, r1\n\ - ldr r0, [r2]\n\ - movs r1, 0x8\n\ - negs r1, r1\n\ - b _08019738\n\ - .align 2, 0\n\ -_08019724: .4byte gBattleMons\n\ -_08019728:\n\ - ldr r1, _08019778 @ =gBattleMons\n\ - movs r0, 0x58\n\ - mov r2, r10\n\ - muls r2, r0\n\ - adds r1, 0x50\n\ - adds r2, r1\n\ - ldr r0, [r2]\n\ - ldr r1, _0801977C @ =0xfff0ffff\n\ -_08019738:\n\ - ands r0, r1\n\ -_0801973A:\n\ - str r0, [r2]\n\ -_0801973C:\n\ - bl b_movescr_stack_push_cursor\n\ - ldr r1, _08019780 @ =gBattlescriptCurrInstr\n\ - ldr r0, _08019784 @ =gUnknown_081D9956\n\ - str r0, [r1]\n\ - ldr r0, _08019788 @ =0x02000000\n\ - ldr r1, _0801978C @ =0x00016003\n\ - adds r0, r1\n\ - mov r2, r10\n\ - strb r2, [r0]\n\ - ldr r4, _08019790 @ =gActiveBank\n\ - strb r2, [r4]\n\ - ldrb r1, [r4]\n\ - movs r0, 0x58\n\ - muls r0, r1\n\ - ldr r1, _08019794 @ =gUnknown_02024ACC\n\ - adds r0, r1\n\ - str r0, [sp]\n\ - movs r0, 0\n\ - movs r1, 0x28\n\ - movs r2, 0\n\ - movs r3, 0x4\n\ - bl EmitSetAttributes\n\ - ldrb r0, [r4]\n\ - bl MarkBufferBankForExecution\n\ - bl _08019F92\n\ - .align 2, 0\n\ -_08019778: .4byte gBattleMons\n\ -_0801977C: .4byte 0xfff0ffff\n\ -_08019780: .4byte gBattlescriptCurrInstr\n\ -_08019784: .4byte gUnknown_081D9956\n\ -_08019788: .4byte 0x02000000\n\ -_0801978C: .4byte 0x00016003\n\ -_08019790: .4byte gActiveBank\n\ -_08019794: .4byte gUnknown_02024ACC\n\ -_08019798:\n\ - mov r0, r10\n\ - adds r0, 0x1\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - mov r10, r0\n\ - ldr r0, _080197B0 @ =gNoOfAllBanks\n\ - ldrb r0, [r0]\n\ - cmp r10, r0\n\ - bcs _080197AC\n\ - b _08019458\n\ -_080197AC:\n\ - bl _08019F76\n\ - .align 2, 0\n\ -_080197B0: .4byte gNoOfAllBanks\n\ -_080197B4:\n\ - movs r3, 0\n\ - mov r10, r3\n\ - ldr r0, _080197FC @ =gNoOfAllBanks\n\ - ldrb r0, [r0]\n\ - cmp r10, r0\n\ - bcc _080197C2\n\ - b _08019F76\n\ -_080197C2:\n\ - ldr r4, _08019800 @ =gBattleMons\n\ -_080197C4:\n\ - movs r0, 0x58\n\ - mov r5, r10\n\ - muls r5, r0\n\ - adds r0, r5, 0\n\ - adds r0, r4\n\ - adds r0, 0x20\n\ - ldrb r0, [r0]\n\ - cmp r0, 0x3B\n\ - bne _080197E8\n\ - mov r0, r10\n\ - bl CastformDataTypeChange\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - mov r9, r0\n\ - cmp r0, 0\n\ - beq _080197E8\n\ - b _08019E40\n\ -_080197E8:\n\ - mov r0, r10\n\ - adds r0, 0x1\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - mov r10, r0\n\ - ldr r0, _080197FC @ =gNoOfAllBanks\n\ - ldrb r0, [r0]\n\ - cmp r10, r0\n\ - bcc _080197C4\n\ - b _08019F76\n\ - .align 2, 0\n\ -_080197FC: .4byte gNoOfAllBanks\n\ -_08019800: .4byte gBattleMons\n\ -_08019804:\n\ - mov r1, r8\n\ - ldrb r0, [r1]\n\ - cmp r0, 0x1C\n\ - beq _0801980E\n\ - b _08019F76\n\ -_0801980E:\n\ - ldr r4, _08019860 @ =gHitMarker\n\ - ldr r1, [r4]\n\ - movs r0, 0x80\n\ - lsls r0, 7\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _0801981E\n\ - b _08019F76\n\ -_0801981E:\n\ - ldr r0, _08019864 @ =0xffffbfff\n\ - ands r1, r0\n\ - str r1, [r4]\n\ - ldr r3, _08019868 @ =0x000160ca\n\ - adds r2, r7, r3\n\ - ldrb r1, [r2]\n\ - movs r0, 0x3F\n\ - ands r0, r1\n\ - strb r0, [r2]\n\ - cmp r0, 0x6\n\ - bne _08019838\n\ - movs r0, 0x2\n\ - strb r0, [r2]\n\ -_08019838:\n\ - ldr r1, _0801986C @ =gBattleCommunication\n\ - ldrb r0, [r2]\n\ - adds r0, 0x40\n\ - strb r0, [r1, 0x3]\n\ - ldr r0, _08019870 @ =gBankTarget\n\ - ldrb r1, [r0]\n\ - ldr r5, _08019874 @ =0x00016003\n\ - adds r0, r7, r5\n\ - strb r1, [r0]\n\ - bl b_movescr_stack_push_cursor\n\ - ldr r1, _08019878 @ =gBattlescriptCurrInstr\n\ - ldr r0, _0801987C @ =BattleScript_SynchronizeActivates\n\ - str r0, [r1]\n\ - ldr r0, [r4]\n\ - movs r1, 0x80\n\ - lsls r1, 6\n\ - orrs r0, r1\n\ - str r0, [r4]\n\ - b _08019F22\n\ - .align 2, 0\n\ -_08019860: .4byte gHitMarker\n\ -_08019864: .4byte 0xffffbfff\n\ -_08019868: .4byte 0x000160ca\n\ -_0801986C: .4byte gBattleCommunication\n\ -_08019870: .4byte gBankTarget\n\ -_08019874: .4byte 0x00016003\n\ -_08019878: .4byte gBattlescriptCurrInstr\n\ -_0801987C: .4byte BattleScript_SynchronizeActivates\n\ -_08019880:\n\ - mov r1, r8\n\ - ldrb r0, [r1]\n\ - cmp r0, 0x1C\n\ - beq _0801988A\n\ - b _08019F76\n\ -_0801988A:\n\ - ldr r4, _080198DC @ =gHitMarker\n\ - ldr r1, [r4]\n\ - movs r0, 0x80\n\ - lsls r0, 7\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _0801989A\n\ - b _08019F76\n\ -_0801989A:\n\ - ldr r0, _080198E0 @ =0xffffbfff\n\ - ands r1, r0\n\ - str r1, [r4]\n\ - ldr r3, _080198E4 @ =0x000160ca\n\ - adds r2, r7, r3\n\ - ldrb r1, [r2]\n\ - movs r0, 0x3F\n\ - ands r0, r1\n\ - strb r0, [r2]\n\ - cmp r0, 0x6\n\ - bne _080198B4\n\ - movs r0, 0x2\n\ - strb r0, [r2]\n\ -_080198B4:\n\ - ldr r1, _080198E8 @ =gBattleCommunication\n\ - ldrb r0, [r2]\n\ - strb r0, [r1, 0x3]\n\ - ldr r0, _080198EC @ =gBankAttacker\n\ - ldrb r1, [r0]\n\ - ldr r5, _080198F0 @ =0x00016003\n\ - adds r0, r7, r5\n\ - strb r1, [r0]\n\ - bl b_movescr_stack_push_cursor\n\ - ldr r1, _080198F4 @ =gBattlescriptCurrInstr\n\ - ldr r0, _080198F8 @ =BattleScript_SynchronizeActivates\n\ - str r0, [r1]\n\ - ldr r0, [r4]\n\ - movs r1, 0x80\n\ - lsls r1, 6\n\ - orrs r0, r1\n\ - str r0, [r4]\n\ - b _08019F22\n\ - .align 2, 0\n\ -_080198DC: .4byte gHitMarker\n\ -_080198E0: .4byte 0xffffbfff\n\ -_080198E4: .4byte 0x000160ca\n\ -_080198E8: .4byte gBattleCommunication\n\ -_080198EC: .4byte gBankAttacker\n\ -_080198F0: .4byte 0x00016003\n\ -_080198F4: .4byte gBattlescriptCurrInstr\n\ -_080198F8: .4byte BattleScript_SynchronizeActivates\n\ -_080198FC:\n\ - movs r4, 0\n\ - ldr r0, _08019934 @ =gNoOfAllBanks\n\ - ldrb r1, [r0]\n\ - cmp r4, r1\n\ - blt _08019908\n\ - b _08019F76\n\ -_08019908:\n\ - ldr r0, _08019938 @ =gBattleMons\n\ - adds r5, r1, 0\n\ - ldr r2, _0801993C @ =gStatuses3\n\ - adds r3, r0, 0\n\ - adds r3, 0x20\n\ - movs r6, 0x80\n\ - lsls r6, 12\n\ -_08019916:\n\ - ldrb r1, [r3]\n\ - cmp r1, 0x16\n\ - bne _08019926\n\ - ldr r0, [r2]\n\ - ands r0, r6\n\ - cmp r0, 0\n\ - beq _08019926\n\ - b _08019E6C\n\ -_08019926:\n\ - adds r2, 0x4\n\ - adds r3, 0x58\n\ - adds r4, 0x1\n\ - cmp r4, r5\n\ - blt _08019916\n\ - b _08019F76\n\ - .align 2, 0\n\ -_08019934: .4byte gNoOfAllBanks\n\ -_08019938: .4byte gBattleMons\n\ -_0801993C: .4byte gStatuses3\n\ -_08019940:\n\ - movs r4, 0\n\ - ldr r0, _08019A1C @ =gNoOfAllBanks\n\ - ldrb r0, [r0]\n\ - cmp r4, r0\n\ - blt _0801994C\n\ - b _08019F76\n\ -_0801994C:\n\ - ldr r0, _08019A20 @ =gActiveBank\n\ - mov r8, r0\n\ - ldr r1, _08019A24 @ =gBattleMons\n\ - adds r1, 0x20\n\ - str r1, [sp, 0x1C]\n\ - movs r2, 0\n\ - str r2, [sp, 0x20]\n\ -_0801995A:\n\ - ldr r3, [sp, 0x1C]\n\ - ldrb r0, [r3]\n\ - cmp r0, 0x24\n\ - beq _08019964\n\ - b _08019AF6\n\ -_08019964:\n\ - ldr r0, _08019A28 @ =gStatuses3\n\ - ldr r5, [sp, 0x20]\n\ - adds r0, r5, r0\n\ - ldr r1, [r0]\n\ - movs r0, 0x80\n\ - lsls r0, 13\n\ - ands r1, r0\n\ - str r5, [sp, 0x18]\n\ - cmp r1, 0\n\ - bne _0801997A\n\ - b _08019AF6\n\ -_0801997A:\n\ - lsls r0, r4, 24\n\ - lsrs r0, 24\n\ - bl GetBankIdentity\n\ - movs r1, 0x1\n\ - adds r5, r0, 0\n\ - eors r5, r1\n\ - ands r5, r1\n\ - adds r0, r5, 0\n\ - bl GetBankByPlayerAI\n\ - lsls r0, 24\n\ - lsrs r6, r0, 24\n\ - adds r0, r5, 0x2\n\ - bl GetBankByPlayerAI\n\ - lsls r0, 24\n\ - lsrs r7, r0, 24\n\ - ldr r0, _08019A2C @ =gBattleTypeFlags\n\ - ldrh r1, [r0]\n\ - movs r2, 0x1\n\ - adds r0, r2, 0\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _080199AE\n\ - b _08019ABC\n\ -_080199AE:\n\ - movs r1, 0x58\n\ - adds r0, r6, 0\n\ - muls r0, r1\n\ - ldr r3, _08019A24 @ =gBattleMons\n\ - adds r1, r0, r3\n\ - adds r0, r1, 0\n\ - adds r0, 0x20\n\ - ldrb r0, [r0]\n\ - cmp r0, 0\n\ - beq _08019A78\n\ - ldrh r0, [r1, 0x28]\n\ - cmp r0, 0\n\ - beq _08019A34\n\ - movs r1, 0x58\n\ - adds r0, r7, 0\n\ - muls r0, r1\n\ - adds r1, r0, r3\n\ - adds r0, r1, 0\n\ - adds r0, 0x20\n\ - ldrb r0, [r0]\n\ - cmp r0, 0\n\ - beq _08019A34\n\ - ldrh r0, [r1, 0x28]\n\ - cmp r0, 0\n\ - beq _08019A34\n\ - str r2, [sp, 0x24]\n\ - bl Random\n\ - ldr r2, [sp, 0x24]\n\ - adds r1, r2, 0\n\ - ands r1, r0\n\ - lsls r1, 1\n\ - orrs r5, r1\n\ - adds r0, r5, 0\n\ - bl GetBankByPlayerAI\n\ - mov r2, r8\n\ - strb r0, [r2]\n\ - ldrb r0, [r2]\n\ - movs r3, 0x58\n\ - muls r0, r3\n\ - ldr r5, _08019A24 @ =gBattleMons\n\ - adds r0, r5\n\ - adds r0, 0x20\n\ - ldrb r0, [r0]\n\ - ldr r1, [sp, 0x1C]\n\ - strb r0, [r1]\n\ - ldrb r0, [r2]\n\ - muls r0, r3\n\ - adds r0, r5\n\ - adds r0, 0x20\n\ - ldrb r0, [r0]\n\ - ldr r2, _08019A30 @ =gLastUsedAbility\n\ - strb r0, [r2]\n\ - b _08019AE4\n\ - .align 2, 0\n\ -_08019A1C: .4byte gNoOfAllBanks\n\ -_08019A20: .4byte gActiveBank\n\ -_08019A24: .4byte gBattleMons\n\ -_08019A28: .4byte gStatuses3\n\ -_08019A2C: .4byte gBattleTypeFlags\n\ -_08019A30: .4byte gLastUsedAbility\n\ -_08019A34:\n\ - ldr r3, _08019A74 @ =gBattleMons\n\ - movs r2, 0x58\n\ - adds r0, r6, 0\n\ - muls r0, r2\n\ - adds r1, r0, r3\n\ - adds r0, r1, 0\n\ - adds r0, 0x20\n\ - ldrb r0, [r0]\n\ - cmp r0, 0\n\ - beq _08019A78\n\ - ldrh r0, [r1, 0x28]\n\ - cmp r0, 0\n\ - beq _08019A78\n\ - mov r5, r8\n\ - strb r6, [r5]\n\ - adds r1, r4, 0\n\ - muls r1, r2\n\ - adds r1, r3\n\ - ldrb r0, [r5]\n\ - muls r0, r2\n\ - adds r0, r3\n\ - adds r0, 0x20\n\ - ldrb r0, [r0]\n\ - adds r1, 0x20\n\ - strb r0, [r1]\n\ - ldrb r0, [r5]\n\ - muls r0, r2\n\ - adds r0, r3\n\ - adds r0, 0x20\n\ - ldrb r0, [r0]\n\ - b _08019AE0\n\ - .align 2, 0\n\ -_08019A74: .4byte gBattleMons\n\ -_08019A78:\n\ - ldr r3, _08019AB8 @ =gBattleMons\n\ - movs r2, 0x58\n\ - adds r0, r7, 0\n\ - muls r0, r2\n\ - adds r1, r0, r3\n\ - adds r0, r1, 0\n\ - adds r0, 0x20\n\ - ldrb r0, [r0]\n\ - cmp r0, 0\n\ - beq _08019AEE\n\ - ldrh r0, [r1, 0x28]\n\ - cmp r0, 0\n\ - beq _08019AEE\n\ - mov r5, r8\n\ - strb r7, [r5]\n\ - adds r1, r4, 0\n\ - muls r1, r2\n\ - adds r1, r3\n\ - ldrb r0, [r5]\n\ - muls r0, r2\n\ - adds r0, r3\n\ - adds r0, 0x20\n\ - ldrb r0, [r0]\n\ - adds r1, 0x20\n\ - strb r0, [r1]\n\ - ldrb r0, [r5]\n\ - muls r0, r2\n\ - adds r0, r3\n\ - adds r0, 0x20\n\ - ldrb r0, [r0]\n\ - b _08019AE0\n\ - .align 2, 0\n\ -_08019AB8: .4byte gBattleMons\n\ -_08019ABC:\n\ - mov r2, r8\n\ - strb r6, [r2]\n\ - movs r3, 0x58\n\ - adds r0, r6, 0\n\ - muls r0, r3\n\ - ldr r5, _08019B10 @ =gBattleMons\n\ - adds r0, r5\n\ - adds r2, r0, 0\n\ - adds r2, 0x20\n\ - ldrb r1, [r2]\n\ - cmp r1, 0\n\ - beq _08019AEE\n\ - ldrh r0, [r0, 0x28]\n\ - cmp r0, 0\n\ - beq _08019AEE\n\ - ldr r0, [sp, 0x1C]\n\ - strb r1, [r0]\n\ - ldrb r0, [r2]\n\ -_08019AE0:\n\ - ldr r1, _08019B14 @ =gLastUsedAbility\n\ - strb r0, [r1]\n\ -_08019AE4:\n\ - mov r0, r9\n\ - adds r0, 0x1\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - mov r9, r0\n\ -_08019AEE:\n\ - mov r2, r9\n\ - cmp r2, 0\n\ - beq _08019AF6\n\ - b _08019E88\n\ -_08019AF6:\n\ - ldr r3, [sp, 0x1C]\n\ - adds r3, 0x58\n\ - str r3, [sp, 0x1C]\n\ - ldr r5, [sp, 0x20]\n\ - adds r5, 0x4\n\ - str r5, [sp, 0x20]\n\ - adds r4, 0x1\n\ - ldr r0, _08019B18 @ =gNoOfAllBanks\n\ - ldrb r0, [r0]\n\ - cmp r4, r0\n\ - bge _08019B0E\n\ - b _0801995A\n\ -_08019B0E:\n\ - b _08019F76\n\ - .align 2, 0\n\ -_08019B10: .4byte gBattleMons\n\ -_08019B14: .4byte gLastUsedAbility\n\ -_08019B18: .4byte gNoOfAllBanks\n\ -_08019B1C:\n\ - movs r4, 0\n\ - ldr r0, _08019B54 @ =gNoOfAllBanks\n\ - ldrb r1, [r0]\n\ - cmp r4, r1\n\ - blt _08019B28\n\ - b _08019F76\n\ -_08019B28:\n\ - ldr r0, _08019B58 @ =gBattleMons\n\ - adds r5, r1, 0\n\ - ldr r2, _08019B5C @ =gStatuses3\n\ - adds r3, r0, 0\n\ - adds r3, 0x20\n\ - movs r6, 0x80\n\ - lsls r6, 12\n\ -_08019B36:\n\ - ldrb r1, [r3]\n\ - cmp r1, 0x16\n\ - bne _08019B46\n\ - ldr r0, [r2]\n\ - ands r0, r6\n\ - cmp r0, 0\n\ - beq _08019B46\n\ - b _08019F04\n\ -_08019B46:\n\ - adds r2, 0x4\n\ - adds r3, 0x58\n\ - adds r4, 0x1\n\ - cmp r4, r5\n\ - blt _08019B36\n\ - b _08019F76\n\ - .align 2, 0\n\ -_08019B54: .4byte gNoOfAllBanks\n\ -_08019B58: .4byte gBattleMons\n\ -_08019B5C: .4byte gStatuses3\n\ -_08019B60:\n\ - mov r0, r10\n\ - bl GetBankSide\n\ - lsls r0, 24\n\ - lsrs r5, r0, 24\n\ - movs r4, 0\n\ - ldr r0, _08019BB0 @ =gNoOfAllBanks\n\ - ldrb r0, [r0]\n\ - cmp r4, r0\n\ - blt _08019B76\n\ - b _08019F76\n\ -_08019B76:\n\ - ldr r7, _08019BB4 @ =gBattleMons\n\ -_08019B78:\n\ - lsls r0, r4, 24\n\ - lsrs r0, 24\n\ - bl GetBankSide\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - adds r3, r4, 0x1\n\ - cmp r0, r5\n\ - beq _08019BA2\n\ - movs r0, 0x58\n\ - muls r0, r4\n\ - adds r0, r7\n\ - adds r0, 0x20\n\ - ldrb r0, [r0]\n\ - cmp r0, r6\n\ - bne _08019BA2\n\ - ldr r0, _08019BB8 @ =gLastUsedAbility\n\ - strb r6, [r0]\n\ - lsls r0, r3, 24\n\ - lsrs r0, 24\n\ - mov r9, r0\n\ -_08019BA2:\n\ - adds r4, r3, 0\n\ - ldr r0, _08019BB0 @ =gNoOfAllBanks\n\ - ldrb r0, [r0]\n\ - cmp r4, r0\n\ - blt _08019B78\n\ - b _08019F76\n\ - .align 2, 0\n\ -_08019BB0: .4byte gNoOfAllBanks\n\ -_08019BB4: .4byte gBattleMons\n\ -_08019BB8: .4byte gLastUsedAbility\n\ -_08019BBC:\n\ - mov r0, r10\n\ - bl GetBankSide\n\ - lsls r0, 24\n\ - lsrs r5, r0, 24\n\ - movs r4, 0\n\ - ldr r0, _08019C0C @ =gNoOfAllBanks\n\ - ldrb r0, [r0]\n\ - cmp r4, r0\n\ - blt _08019BD2\n\ - b _08019F76\n\ -_08019BD2:\n\ - ldr r7, _08019C10 @ =gBattleMons\n\ -_08019BD4:\n\ - lsls r0, r4, 24\n\ - lsrs r0, 24\n\ - bl GetBankSide\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - adds r3, r4, 0x1\n\ - cmp r0, r5\n\ - bne _08019BFE\n\ - movs r0, 0x58\n\ - muls r0, r4\n\ - adds r0, r7\n\ - adds r0, 0x20\n\ - ldrb r0, [r0]\n\ - cmp r0, r6\n\ - bne _08019BFE\n\ - ldr r0, _08019C14 @ =gLastUsedAbility\n\ - strb r6, [r0]\n\ - lsls r0, r3, 24\n\ - lsrs r0, 24\n\ - mov r9, r0\n\ -_08019BFE:\n\ - adds r4, r3, 0\n\ - ldr r0, _08019C0C @ =gNoOfAllBanks\n\ - ldrb r0, [r0]\n\ - cmp r4, r0\n\ - blt _08019BD4\n\ - b _08019F76\n\ - .align 2, 0\n\ -_08019C0C: .4byte gNoOfAllBanks\n\ -_08019C10: .4byte gBattleMons\n\ -_08019C14: .4byte gLastUsedAbility\n\ -_08019C18:\n\ - mov r1, r8\n\ - ldrb r0, [r1]\n\ - cmp r0, 0xFD\n\ - beq _08019C40\n\ - cmp r0, 0xFE\n\ - beq _08019C78\n\ - movs r4, 0\n\ - ldr r0, _08019C38 @ =gNoOfAllBanks\n\ - adds r5, r0, 0\n\ - ldrb r2, [r5]\n\ - cmp r4, r2\n\ - blt _08019C32\n\ - b _08019F76\n\ -_08019C32:\n\ - ldr r2, _08019C3C @ =gBattleMons\n\ - b _08019CB0\n\ - .align 2, 0\n\ -_08019C38: .4byte gNoOfAllBanks\n\ -_08019C3C: .4byte gBattleMons\n\ -_08019C40:\n\ - movs r4, 0\n\ - ldr r0, _08019C70 @ =gNoOfAllBanks\n\ - ldrb r0, [r0]\n\ - cmp r4, r0\n\ - blt _08019C4C\n\ - b _08019F76\n\ -_08019C4C:\n\ - ldr r5, _08019C74 @ =gStatuses3\n\ - movs r2, 0x80\n\ - lsls r2, 9\n\ - adds r1, r0, 0\n\ -_08019C54:\n\ - lsls r0, r4, 2\n\ - adds r0, r5\n\ - ldr r0, [r0]\n\ - ands r0, r2\n\ - adds r3, r4, 0x1\n\ - cmp r0, 0\n\ - beq _08019C68\n\ - lsls r0, r3, 24\n\ - lsrs r0, 24\n\ - mov r9, r0\n\ -_08019C68:\n\ - adds r4, r3, 0\n\ - cmp r4, r1\n\ - blt _08019C54\n\ - b _08019F76\n\ - .align 2, 0\n\ -_08019C70: .4byte gNoOfAllBanks\n\ -_08019C74: .4byte gStatuses3\n\ -_08019C78:\n\ - movs r4, 0\n\ - ldr r0, _08019CA8 @ =gNoOfAllBanks\n\ - ldrb r0, [r0]\n\ - cmp r4, r0\n\ - blt _08019C84\n\ - b _08019F76\n\ -_08019C84:\n\ - ldr r5, _08019CAC @ =gStatuses3\n\ - movs r2, 0x80\n\ - lsls r2, 10\n\ - adds r1, r0, 0\n\ -_08019C8C:\n\ - lsls r0, r4, 2\n\ - adds r0, r5\n\ - ldr r0, [r0]\n\ - ands r0, r2\n\ - adds r3, r4, 0x1\n\ - cmp r0, 0\n\ - beq _08019CA0\n\ - lsls r0, r3, 24\n\ - lsrs r0, 24\n\ - mov r9, r0\n\ -_08019CA0:\n\ - adds r4, r3, 0\n\ - cmp r4, r1\n\ - blt _08019C8C\n\ - b _08019F76\n\ - .align 2, 0\n\ -_08019CA8: .4byte gNoOfAllBanks\n\ -_08019CAC: .4byte gStatuses3\n\ -_08019CB0:\n\ - movs r0, 0x58\n\ - muls r0, r4\n\ - adds r0, r2\n\ - adds r0, 0x20\n\ - ldrb r0, [r0]\n\ - adds r3, r4, 0x1\n\ - cmp r0, r6\n\ - bne _08019CCA\n\ - mov r0, r8\n\ - strb r6, [r0]\n\ - lsls r0, r3, 24\n\ - lsrs r0, 24\n\ - mov r9, r0\n\ -_08019CCA:\n\ - adds r4, r3, 0\n\ - ldrb r1, [r5]\n\ - cmp r4, r1\n\ - blt _08019CB0\n\ - b _08019F76\n\ -_08019CD4:\n\ - movs r4, 0\n\ - ldr r0, _08019D10 @ =gNoOfAllBanks\n\ - ldrb r0, [r0]\n\ - cmp r4, r0\n\ - blt _08019CE0\n\ - b _08019F76\n\ -_08019CE0:\n\ - ldr r7, _08019D14 @ =gBattleMons\n\ - adds r2, r0, 0\n\ - movs r5, 0x58\n\ -_08019CE6:\n\ - adds r0, r4, 0\n\ - muls r0, r5\n\ - adds r1, r0, r7\n\ - adds r0, r1, 0\n\ - adds r0, 0x20\n\ - ldrb r0, [r0]\n\ - adds r3, r4, 0x1\n\ - cmp r0, r6\n\ - bne _08019D08\n\ - ldrh r0, [r1, 0x28]\n\ - cmp r0, 0\n\ - beq _08019D08\n\ - mov r0, r8\n\ - strb r6, [r0]\n\ - lsls r0, r3, 24\n\ - lsrs r0, 24\n\ - mov r9, r0\n\ -_08019D08:\n\ - adds r4, r3, 0\n\ - cmp r4, r2\n\ - blt _08019CE6\n\ - b _08019F76\n\ - .align 2, 0\n\ -_08019D10: .4byte gNoOfAllBanks\n\ -_08019D14: .4byte gBattleMons\n\ -_08019D18:\n\ - movs r4, 0\n\ - ldr r0, _08019D50 @ =gNoOfAllBanks\n\ - ldrb r0, [r0]\n\ - cmp r4, r0\n\ - blt _08019D24\n\ - b _08019F76\n\ -_08019D24:\n\ - ldr r7, _08019D54 @ =gBattleMons\n\ - adds r1, r0, 0\n\ - movs r5, 0x58\n\ - ldr r2, _08019D58 @ =gLastUsedAbility\n\ -_08019D2C:\n\ - adds r0, r4, 0\n\ - muls r0, r5\n\ - adds r0, r7\n\ - adds r0, 0x20\n\ - ldrb r0, [r0]\n\ - adds r3, r4, 0x1\n\ - cmp r0, r6\n\ - bne _08019D48\n\ - cmp r4, r10\n\ - beq _08019D48\n\ - strb r6, [r2]\n\ - lsls r0, r3, 24\n\ - lsrs r0, 24\n\ - mov r9, r0\n\ -_08019D48:\n\ - adds r4, r3, 0\n\ - cmp r4, r1\n\ - blt _08019D2C\n\ - b _08019F76\n\ - .align 2, 0\n\ -_08019D50: .4byte gNoOfAllBanks\n\ -_08019D54: .4byte gBattleMons\n\ -_08019D58: .4byte gLastUsedAbility\n\ -_08019D5C:\n\ - mov r0, r10\n\ - bl GetBankSide\n\ - lsls r0, 24\n\ - lsrs r5, r0, 24\n\ - movs r4, 0\n\ - ldr r0, _08019DAC @ =gNoOfAllBanks\n\ - ldrb r0, [r0]\n\ - cmp r4, r0\n\ - blt _08019D72\n\ - b _08019F76\n\ -_08019D72:\n\ - ldr r7, _08019DB0 @ =gBattleMons\n\ -_08019D74:\n\ - lsls r0, r4, 24\n\ - lsrs r0, 24\n\ - bl GetBankSide\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - cmp r0, r5\n\ - beq _08019DA0\n\ - movs r0, 0x58\n\ - muls r0, r4\n\ - adds r0, r7\n\ - adds r0, 0x20\n\ - ldrb r0, [r0]\n\ - cmp r0, r6\n\ - bne _08019DA0\n\ - ldr r0, _08019DB4 @ =gLastUsedAbility\n\ - strb r6, [r0]\n\ - mov r0, r9\n\ - adds r0, 0x1\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - mov r9, r0\n\ -_08019DA0:\n\ - adds r4, 0x1\n\ - ldr r0, _08019DAC @ =gNoOfAllBanks\n\ - ldrb r0, [r0]\n\ - cmp r4, r0\n\ - blt _08019D74\n\ - b _08019F76\n\ - .align 2, 0\n\ -_08019DAC: .4byte gNoOfAllBanks\n\ -_08019DB0: .4byte gBattleMons\n\ -_08019DB4: .4byte gLastUsedAbility\n\ -_08019DB8:\n\ - mov r0, r10\n\ - bl GetBankSide\n\ - lsls r0, 24\n\ - lsrs r5, r0, 24\n\ - movs r4, 0\n\ - ldr r0, _08019E08 @ =gNoOfAllBanks\n\ - ldrb r0, [r0]\n\ - cmp r4, r0\n\ - blt _08019DCE\n\ - b _08019F76\n\ -_08019DCE:\n\ - ldr r7, _08019E0C @ =gBattleMons\n\ -_08019DD0:\n\ - lsls r0, r4, 24\n\ - lsrs r0, 24\n\ - bl GetBankSide\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - cmp r0, r5\n\ - bne _08019DFC\n\ - movs r0, 0x58\n\ - muls r0, r4\n\ - adds r0, r7\n\ - adds r0, 0x20\n\ - ldrb r0, [r0]\n\ - cmp r0, r6\n\ - bne _08019DFC\n\ - ldr r0, _08019E10 @ =gLastUsedAbility\n\ - strb r6, [r0]\n\ - mov r0, r9\n\ - adds r0, 0x1\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - mov r9, r0\n\ -_08019DFC:\n\ - adds r4, 0x1\n\ - ldr r0, _08019E08 @ =gNoOfAllBanks\n\ - ldrb r0, [r0]\n\ - cmp r4, r0\n\ - blt _08019DD0\n\ - b _08019F76\n\ - .align 2, 0\n\ -_08019E08: .4byte gNoOfAllBanks\n\ -_08019E0C: .4byte gBattleMons\n\ -_08019E10: .4byte gLastUsedAbility\n\ -_08019E14:\n\ - ldr r0, _08019E30 @ =BattleScript_CastformChange\n\ - bl b_push_move_exec\n\ - ldr r0, _08019E34 @ =0x02000000\n\ - ldr r2, _08019E38 @ =0x00016003\n\ - adds r1, r0, r2\n\ - strb r6, [r1]\n\ - mov r1, r9\n\ - subs r1, 0x1\n\ - ldr r3, _08019E3C @ =0x0001609b\n\ - adds r0, r3\n\ - strb r1, [r0]\n\ - b _08019F76\n\ - .align 2, 0\n\ -_08019E30: .4byte BattleScript_CastformChange\n\ -_08019E34: .4byte 0x02000000\n\ -_08019E38: .4byte 0x00016003\n\ -_08019E3C: .4byte 0x0001609b\n\ -_08019E40:\n\ - ldr r0, _08019E5C @ =BattleScript_CastformChange\n\ - bl b_push_move_exec\n\ - ldr r0, _08019E60 @ =0x02000000\n\ - ldr r5, _08019E64 @ =0x00016003\n\ - adds r1, r0, r5\n\ - mov r2, r10\n\ - strb r2, [r1]\n\ - mov r1, r9\n\ - subs r1, 0x1\n\ - ldr r3, _08019E68 @ =0x0001609b\n\ - adds r0, r3\n\ - strb r1, [r0]\n\ - b _08019F92\n\ - .align 2, 0\n\ -_08019E5C: .4byte BattleScript_CastformChange\n\ -_08019E60: .4byte 0x02000000\n\ -_08019E64: .4byte 0x00016003\n\ -_08019E68: .4byte 0x0001609b\n\ -_08019E6C:\n\ - mov r5, r8\n\ - strb r1, [r5]\n\ - ldr r0, [r2]\n\ - ldr r1, _08019E80 @ =0xfff7ffff\n\ - ands r0, r1\n\ - str r0, [r2]\n\ - ldr r0, _08019E84 @ =gUnknown_081D978C\n\ - bl b_push_move_exec\n\ - b _08019F1A\n\ - .align 2, 0\n\ -_08019E80: .4byte 0xfff7ffff\n\ -_08019E84: .4byte gUnknown_081D978C\n\ -_08019E88:\n\ - ldr r0, _08019EDC @ =BattleScript_TraceActivates\n\ - bl b_push_move_exec\n\ - ldr r1, _08019EE0 @ =gStatuses3\n\ - ldr r2, [sp, 0x18]\n\ - adds r1, r2, r1\n\ - ldr r0, [r1]\n\ - ldr r2, _08019EE4 @ =0xffefffff\n\ - ands r0, r2\n\ - str r0, [r1]\n\ - ldr r0, _08019EE8 @ =0x02000000\n\ - ldr r3, _08019EEC @ =0x00016003\n\ - adds r0, r3\n\ - strb r4, [r0]\n\ - ldr r1, _08019EF0 @ =gBattleTextBuff1\n\ - movs r4, 0xFD\n\ - strb r4, [r1]\n\ - movs r0, 0x4\n\ - strb r0, [r1, 0x1]\n\ - ldr r2, _08019EF4 @ =gActiveBank\n\ - ldrb r0, [r2]\n\ - strb r0, [r1, 0x2]\n\ - ldr r3, _08019EF8 @ =gBattlePartyID\n\ - ldrb r0, [r2]\n\ - lsls r0, 1\n\ - adds r0, r3\n\ - ldrh r0, [r0]\n\ - strb r0, [r1, 0x3]\n\ - movs r0, 0xFF\n\ - strb r0, [r1, 0x4]\n\ - ldr r1, _08019EFC @ =gBattleTextBuff2\n\ - strb r4, [r1]\n\ - movs r0, 0x9\n\ - strb r0, [r1, 0x1]\n\ - ldr r0, _08019F00 @ =gLastUsedAbility\n\ - ldrb r0, [r0]\n\ - strb r0, [r1, 0x2]\n\ - movs r0, 0x1\n\ - negs r0, r0\n\ - strb r0, [r1, 0x3]\n\ - b _08019F76\n\ - .align 2, 0\n\ -_08019EDC: .4byte BattleScript_TraceActivates\n\ -_08019EE0: .4byte gStatuses3\n\ -_08019EE4: .4byte 0xffefffff\n\ -_08019EE8: .4byte 0x02000000\n\ -_08019EEC: .4byte 0x00016003\n\ -_08019EF0: .4byte gBattleTextBuff1\n\ -_08019EF4: .4byte gActiveBank\n\ -_08019EF8: .4byte gBattlePartyID\n\ -_08019EFC: .4byte gBattleTextBuff2\n\ -_08019F00: .4byte gLastUsedAbility\n\ -_08019F04:\n\ - mov r5, r8\n\ - strb r1, [r5]\n\ - ldr r0, [r2]\n\ - ldr r1, _08019F30 @ =0xfff7ffff\n\ - ands r0, r1\n\ - str r0, [r2]\n\ - bl b_movescr_stack_push_cursor\n\ - ldr r1, _08019F34 @ =gBattlescriptCurrInstr\n\ - ldr r0, _08019F38 @ =gUnknown_081D9795\n\ - str r0, [r1]\n\ -_08019F1A:\n\ - ldr r0, _08019F3C @ =0x02000000\n\ - ldr r1, _08019F40 @ =0x000160dd\n\ - adds r0, r1\n\ - strb r4, [r0]\n\ -_08019F22:\n\ - mov r0, r9\n\ - adds r0, 0x1\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - mov r9, r0\n\ - b _08019F76\n\ - .align 2, 0\n\ -_08019F30: .4byte 0xfff7ffff\n\ -_08019F34: .4byte gBattlescriptCurrInstr\n\ -_08019F38: .4byte gUnknown_081D9795\n\ -_08019F3C: .4byte 0x02000000\n\ -_08019F40: .4byte 0x000160dd\n\ -_08019F44:\n\ - movs r4, 0\n\ - ldr r0, _08019FA4 @ =gNoOfAllBanks\n\ - ldrb r1, [r0]\n\ - cmp r4, r1\n\ - bge _08019F76\n\ - ldr r0, _08019FA8 @ =gBattleMons\n\ - adds r2, r1, 0\n\ - adds r1, r0, 0\n\ - adds r1, 0x20\n\ - ldr r3, _08019FAC @ =gLastUsedAbility\n\ -_08019F58:\n\ - ldrb r0, [r1]\n\ - cmp r0, r6\n\ - bne _08019F6E\n\ - cmp r4, r10\n\ - beq _08019F6E\n\ - strb r6, [r3]\n\ - mov r0, r9\n\ - adds r0, 0x1\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - mov r9, r0\n\ -_08019F6E:\n\ - adds r1, 0x58\n\ - adds r4, 0x1\n\ - cmp r4, r2\n\ - blt _08019F58\n\ -_08019F76:\n\ - mov r2, r9\n\ - cmp r2, 0\n\ - beq _08019F92\n\ -_08019F7C:\n\ - ldr r3, [sp, 0x4]\n\ - cmp r3, 0xB\n\ - bhi _08019F92\n\ - ldr r1, _08019FAC @ =gLastUsedAbility\n\ - ldrb r0, [r1]\n\ - cmp r0, 0xFF\n\ - beq _08019F92\n\ - adds r1, r0, 0\n\ - mov r0, r10\n\ - bl RecordAbilityBattle\n\ -_08019F92:\n\ - mov r0, r9\n\ - add sp, 0x28\n\ - pop {r3-r5}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - mov r10, r5\n\ - pop {r4-r7}\n\ - pop {r1}\n\ - bx r1\n\ - .align 2, 0\n\ -_08019FA4: .4byte gNoOfAllBanks\n\ -_08019FA8: .4byte gBattleMons\n\ -_08019FAC: .4byte gLastUsedAbility\n\ - .syntax divided"); -} - -#endif // NONMATCHING - void b_call_bc_move_exec(u8* BS_ptr) { gBattlescriptCurrInstr = BS_ptr; -- cgit v1.2.3 From fd69fc936729c288720a7e5251314efa121e9ac3 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Mon, 23 Oct 2017 20:34:28 -0500 Subject: use SPEED instead of SPD in mon data constants --- src/battle/battle_4.c | 10 +++++----- src/battle/battle_controller_linkopponent.c | 20 ++++++++++---------- src/battle/battle_controller_linkpartner.c | 20 ++++++++++---------- src/battle/battle_controller_opponent.c | 20 ++++++++++---------- src/battle/battle_controller_player.c | 20 ++++++++++---------- src/battle/battle_controller_wally.c | 20 ++++++++++---------- src/engine/trade.c | 2 +- src/field/daycare.c | 4 ++-- src/field/party_menu.c | 2 +- src/pokemon/pokemon_1.c | 16 ++++++++-------- src/pokemon/pokemon_2.c | 12 ++++++------ src/pokemon/pokemon_size_record.c | 2 +- 12 files changed, 74 insertions(+), 74 deletions(-) (limited to 'src') diff --git a/src/battle/battle_4.c b/src/battle/battle_4.c index e4a4895b5..a3b7ac41f 100644 --- a/src/battle/battle_4.c +++ b/src/battle/battle_4.c @@ -929,7 +929,7 @@ u8* const gMoveEffectBS_Ptrs[] = const u8 sUnreferencedBitMask1[] = {0, 1, 3, 7, 0xF, 0x1F, 0x3F}; -const u8 gLevelUpStatBoxStats[] = {MON_DATA_MAX_HP, MON_DATA_SPATK, MON_DATA_ATK, MON_DATA_SPDEF, MON_DATA_DEF, MON_DATA_SPD}; +const u8 gLevelUpStatBoxStats[] = {MON_DATA_MAX_HP, MON_DATA_SPATK, MON_DATA_ATK, MON_DATA_SPDEF, MON_DATA_DEF, MON_DATA_SPEED}; static const u16 sProtectSuccessRates[] = {0xFFFF, 0x7FFF, 0x3FFF, 0x1FFF}; @@ -5447,7 +5447,7 @@ static void atk23_getexp(void) BATTLE_STRUCT->beforeLvlUp[0] = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_MAX_HP); BATTLE_STRUCT->beforeLvlUp[1] = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_ATK); BATTLE_STRUCT->beforeLvlUp[2] = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_DEF); - BATTLE_STRUCT->beforeLvlUp[3] = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_SPD); + BATTLE_STRUCT->beforeLvlUp[3] = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_SPEED); BATTLE_STRUCT->beforeLvlUp[4] = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_SPATK); BATTLE_STRUCT->beforeLvlUp[5] = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_SPDEF); @@ -5496,7 +5496,7 @@ static void atk23_getexp(void) gBattleMons[0].maxHP = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_MAX_HP); gBattleMons[0].attack = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_ATK); gBattleMons[0].defense = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_DEF); - gBattleMons[0].speed = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_SPD); + gBattleMons[0].speed = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_SPEED); gBattleMons[0].spAttack = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_SPATK); gBattleMons[0].spDefense = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_SPDEF); } @@ -5509,8 +5509,8 @@ static void atk23_getexp(void) gBattleMons[2].attack = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_ATK); gBattleMons[2].defense = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_DEF); //There are no words...GF can't even copy&paste code properly - gBattleMons[2].speed = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_SPD); - gBattleMons[2].spAttack = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_SPD /*RIP*/); + gBattleMons[2].speed = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_SPEED); + gBattleMons[2].spAttack = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_SPEED /*RIP*/); gBattleMons[2].spDefense = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_SPATK); } BATTLE_STRUCT->atk23StateTracker = 5; diff --git a/src/battle/battle_controller_linkopponent.c b/src/battle/battle_controller_linkopponent.c index 0b6c3b6a1..83b690719 100644 --- a/src/battle/battle_controller_linkopponent.c +++ b/src/battle/battle_controller_linkopponent.c @@ -618,7 +618,7 @@ u32 dp01_getattr_by_ch1_for_player_pokemon__(u8 a, u8 *buffer) battlePokemon.hpIV = GetMonData(&gEnemyParty[a], MON_DATA_HP_IV); battlePokemon.attackIV = GetMonData(&gEnemyParty[a], MON_DATA_ATK_IV); battlePokemon.defenseIV = GetMonData(&gEnemyParty[a], MON_DATA_DEF_IV); - battlePokemon.speedIV = GetMonData(&gEnemyParty[a], MON_DATA_SPD_IV); + battlePokemon.speedIV = GetMonData(&gEnemyParty[a], MON_DATA_SPEED_IV); battlePokemon.spAttackIV = GetMonData(&gEnemyParty[a], MON_DATA_SPATK_IV); battlePokemon.spDefenseIV = GetMonData(&gEnemyParty[a], MON_DATA_SPDEF_IV); battlePokemon.personality = GetMonData(&gEnemyParty[a], MON_DATA_PERSONALITY); @@ -628,7 +628,7 @@ u32 dp01_getattr_by_ch1_for_player_pokemon__(u8 a, u8 *buffer) battlePokemon.maxHP = GetMonData(&gEnemyParty[a], MON_DATA_MAX_HP); battlePokemon.attack = GetMonData(&gEnemyParty[a], MON_DATA_ATK); battlePokemon.defense = GetMonData(&gEnemyParty[a], MON_DATA_DEF); - battlePokemon.speed = GetMonData(&gEnemyParty[a], MON_DATA_SPD); + battlePokemon.speed = GetMonData(&gEnemyParty[a], MON_DATA_SPEED); battlePokemon.spAttack = GetMonData(&gEnemyParty[a], MON_DATA_SPATK); battlePokemon.spDefense = GetMonData(&gEnemyParty[a], MON_DATA_SPDEF); battlePokemon.isEgg = GetMonData(&gEnemyParty[a], MON_DATA_IS_EGG); @@ -752,7 +752,7 @@ u32 dp01_getattr_by_ch1_for_player_pokemon__(u8 a, u8 *buffer) buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_HP_IV); buffer[1] = GetMonData(&gEnemyParty[a], MON_DATA_ATK_IV); buffer[2] = GetMonData(&gEnemyParty[a], MON_DATA_DEF_IV); - buffer[3] = GetMonData(&gEnemyParty[a], MON_DATA_SPD_IV); + buffer[3] = GetMonData(&gEnemyParty[a], MON_DATA_SPEED_IV); buffer[4] = GetMonData(&gEnemyParty[a], MON_DATA_SPATK_IV); buffer[5] = GetMonData(&gEnemyParty[a], MON_DATA_SPDEF_IV); size = 6; @@ -770,7 +770,7 @@ u32 dp01_getattr_by_ch1_for_player_pokemon__(u8 a, u8 *buffer) size = 1; break; case 35: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_SPD_IV); + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_SPEED_IV); size = 1; break; case 36: @@ -832,7 +832,7 @@ u32 dp01_getattr_by_ch1_for_player_pokemon__(u8 a, u8 *buffer) size = 2; break; case 46: - data16 = GetMonData(&gEnemyParty[a], MON_DATA_SPD); + data16 = GetMonData(&gEnemyParty[a], MON_DATA_SPEED); buffer[0] = data16; buffer[1] = data16 >> 8; size = 2; @@ -953,7 +953,7 @@ void sub_8038900(u8 a) iv = battlePokemon->defenseIV; SetMonData(&gEnemyParty[a], MON_DATA_DEF_IV, (u8 *)&iv); iv = battlePokemon->speedIV; - SetMonData(&gEnemyParty[a], MON_DATA_SPD_IV, (u8 *)&iv); + SetMonData(&gEnemyParty[a], MON_DATA_SPEED_IV, (u8 *)&iv); iv = battlePokemon->spAttackIV; SetMonData(&gEnemyParty[a], MON_DATA_SPATK_IV, (u8 *)&iv); iv = battlePokemon->spDefenseIV; @@ -965,7 +965,7 @@ void sub_8038900(u8 a) SetMonData(&gEnemyParty[a], MON_DATA_MAX_HP, (u8 *)&battlePokemon->maxHP); SetMonData(&gEnemyParty[a], MON_DATA_ATK, (u8 *)&battlePokemon->attack); SetMonData(&gEnemyParty[a], MON_DATA_DEF, (u8 *)&battlePokemon->defense); - SetMonData(&gEnemyParty[a], MON_DATA_SPD, (u8 *)&battlePokemon->speed); + SetMonData(&gEnemyParty[a], MON_DATA_SPEED, (u8 *)&battlePokemon->speed); SetMonData(&gEnemyParty[a], MON_DATA_SPATK, (u8 *)&battlePokemon->spAttack); SetMonData(&gEnemyParty[a], MON_DATA_SPDEF, (u8 *)&battlePokemon->spDefense); } @@ -1049,7 +1049,7 @@ void sub_8038900(u8 a) SetMonData(&gEnemyParty[a], MON_DATA_HP_IV, &gBattleBufferA[gActiveBank][3]); SetMonData(&gEnemyParty[a], MON_DATA_ATK_IV, &gBattleBufferA[gActiveBank][4]); SetMonData(&gEnemyParty[a], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBank][5]); - SetMonData(&gEnemyParty[a], MON_DATA_SPD_IV, &gBattleBufferA[gActiveBank][6]); + SetMonData(&gEnemyParty[a], MON_DATA_SPEED_IV, &gBattleBufferA[gActiveBank][6]); SetMonData(&gEnemyParty[a], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBank][7]); SetMonData(&gEnemyParty[a], MON_DATA_SPDEF_IV, &gBattleBufferA[gActiveBank][8]); break; @@ -1063,7 +1063,7 @@ void sub_8038900(u8 a) SetMonData(&gEnemyParty[a], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBank][3]); break; case 35: - SetMonData(&gEnemyParty[a], MON_DATA_SPD_IV, &gBattleBufferA[gActiveBank][3]); + SetMonData(&gEnemyParty[a], MON_DATA_SPEED_IV, &gBattleBufferA[gActiveBank][3]); break; case 36: SetMonData(&gEnemyParty[a], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBank][3]); @@ -1096,7 +1096,7 @@ void sub_8038900(u8 a) SetMonData(&gEnemyParty[a], MON_DATA_DEF, &gBattleBufferA[gActiveBank][3]); break; case 46: - SetMonData(&gEnemyParty[a], MON_DATA_SPD, &gBattleBufferA[gActiveBank][3]); + SetMonData(&gEnemyParty[a], MON_DATA_SPEED, &gBattleBufferA[gActiveBank][3]); break; case 47: SetMonData(&gEnemyParty[a], MON_DATA_SPATK, &gBattleBufferA[gActiveBank][3]); diff --git a/src/battle/battle_controller_linkpartner.c b/src/battle/battle_controller_linkpartner.c index 3e34b2e25..ca20f6262 100644 --- a/src/battle/battle_controller_linkpartner.c +++ b/src/battle/battle_controller_linkpartner.c @@ -574,7 +574,7 @@ u32 dp01_getattr_by_ch1_for_player_pokemon(u8 a, u8 *buffer) battlePokemon.hpIV = GetMonData(&gPlayerParty[a], MON_DATA_HP_IV); battlePokemon.attackIV = GetMonData(&gPlayerParty[a], MON_DATA_ATK_IV); battlePokemon.defenseIV = GetMonData(&gPlayerParty[a], MON_DATA_DEF_IV); - battlePokemon.speedIV = GetMonData(&gPlayerParty[a], MON_DATA_SPD_IV); + battlePokemon.speedIV = GetMonData(&gPlayerParty[a], MON_DATA_SPEED_IV); battlePokemon.spAttackIV = GetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV); battlePokemon.spDefenseIV = GetMonData(&gPlayerParty[a], MON_DATA_SPDEF_IV); battlePokemon.personality = GetMonData(&gPlayerParty[a], MON_DATA_PERSONALITY); @@ -584,7 +584,7 @@ u32 dp01_getattr_by_ch1_for_player_pokemon(u8 a, u8 *buffer) battlePokemon.maxHP = GetMonData(&gPlayerParty[a], MON_DATA_MAX_HP); battlePokemon.attack = GetMonData(&gPlayerParty[a], MON_DATA_ATK); battlePokemon.defense = GetMonData(&gPlayerParty[a], MON_DATA_DEF); - battlePokemon.speed = GetMonData(&gPlayerParty[a], MON_DATA_SPD); + battlePokemon.speed = GetMonData(&gPlayerParty[a], MON_DATA_SPEED); battlePokemon.spAttack = GetMonData(&gPlayerParty[a], MON_DATA_SPATK); battlePokemon.spDefense = GetMonData(&gPlayerParty[a], MON_DATA_SPDEF); battlePokemon.isEgg = GetMonData(&gPlayerParty[a], MON_DATA_IS_EGG); @@ -708,7 +708,7 @@ u32 dp01_getattr_by_ch1_for_player_pokemon(u8 a, u8 *buffer) buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_HP_IV); buffer[1] = GetMonData(&gPlayerParty[a], MON_DATA_ATK_IV); buffer[2] = GetMonData(&gPlayerParty[a], MON_DATA_DEF_IV); - buffer[3] = GetMonData(&gPlayerParty[a], MON_DATA_SPD_IV); + buffer[3] = GetMonData(&gPlayerParty[a], MON_DATA_SPEED_IV); buffer[4] = GetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV); buffer[5] = GetMonData(&gPlayerParty[a], MON_DATA_SPDEF_IV); size = 6; @@ -726,7 +726,7 @@ u32 dp01_getattr_by_ch1_for_player_pokemon(u8 a, u8 *buffer) size = 1; break; case 35: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SPD_IV); + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SPEED_IV); size = 1; break; case 36: @@ -788,7 +788,7 @@ u32 dp01_getattr_by_ch1_for_player_pokemon(u8 a, u8 *buffer) size = 2; break; case 46: - data16 = GetMonData(&gPlayerParty[a], MON_DATA_SPD); + data16 = GetMonData(&gPlayerParty[a], MON_DATA_SPEED); buffer[0] = data16; buffer[1] = data16 >> 8; size = 2; @@ -910,7 +910,7 @@ void sub_811EC68(u8 a) iv = battlePokemon->defenseIV; SetMonData(&gPlayerParty[a], MON_DATA_DEF_IV, (u8 *)&iv); iv = battlePokemon->speedIV; - SetMonData(&gPlayerParty[a], MON_DATA_SPD_IV, (u8 *)&iv); + SetMonData(&gPlayerParty[a], MON_DATA_SPEED_IV, (u8 *)&iv); iv = battlePokemon->spAttackIV; SetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV, (u8 *)&iv); iv = battlePokemon->spDefenseIV; @@ -922,7 +922,7 @@ void sub_811EC68(u8 a) SetMonData(&gPlayerParty[a], MON_DATA_MAX_HP, (u8 *)&battlePokemon->maxHP); SetMonData(&gPlayerParty[a], MON_DATA_ATK, (u8 *)&battlePokemon->attack); SetMonData(&gPlayerParty[a], MON_DATA_DEF, (u8 *)&battlePokemon->defense); - SetMonData(&gPlayerParty[a], MON_DATA_SPD, (u8 *)&battlePokemon->speed); + SetMonData(&gPlayerParty[a], MON_DATA_SPEED, (u8 *)&battlePokemon->speed); SetMonData(&gPlayerParty[a], MON_DATA_SPATK, (u8 *)&battlePokemon->spAttack); SetMonData(&gPlayerParty[a], MON_DATA_SPDEF, (u8 *)&battlePokemon->spDefense); } @@ -1006,7 +1006,7 @@ void sub_811EC68(u8 a) SetMonData(&gPlayerParty[a], MON_DATA_HP_IV, &gBattleBufferA[gActiveBank][3]); SetMonData(&gPlayerParty[a], MON_DATA_ATK_IV, &gBattleBufferA[gActiveBank][4]); SetMonData(&gPlayerParty[a], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBank][5]); - SetMonData(&gPlayerParty[a], MON_DATA_SPD_IV, &gBattleBufferA[gActiveBank][6]); + SetMonData(&gPlayerParty[a], MON_DATA_SPEED_IV, &gBattleBufferA[gActiveBank][6]); SetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBank][7]); SetMonData(&gPlayerParty[a], MON_DATA_SPDEF_IV, &gBattleBufferA[gActiveBank][8]); break; @@ -1020,7 +1020,7 @@ void sub_811EC68(u8 a) SetMonData(&gPlayerParty[a], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBank][3]); break; case 35: - SetMonData(&gPlayerParty[a], MON_DATA_SPD_IV, &gBattleBufferA[gActiveBank][3]); + SetMonData(&gPlayerParty[a], MON_DATA_SPEED_IV, &gBattleBufferA[gActiveBank][3]); break; case 36: SetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBank][3]); @@ -1053,7 +1053,7 @@ void sub_811EC68(u8 a) SetMonData(&gPlayerParty[a], MON_DATA_DEF, &gBattleBufferA[gActiveBank][3]); break; case 46: - SetMonData(&gPlayerParty[a], MON_DATA_SPD, &gBattleBufferA[gActiveBank][3]); + SetMonData(&gPlayerParty[a], MON_DATA_SPEED, &gBattleBufferA[gActiveBank][3]); break; case 47: SetMonData(&gPlayerParty[a], MON_DATA_SPATK, &gBattleBufferA[gActiveBank][3]); diff --git a/src/battle/battle_controller_opponent.c b/src/battle/battle_controller_opponent.c index 72b56b962..cf90d5817 100644 --- a/src/battle/battle_controller_opponent.c +++ b/src/battle/battle_controller_opponent.c @@ -582,7 +582,7 @@ u32 sub_8033598(u8 a, u8 *buffer) battlePokemon.hpIV = GetMonData(&gEnemyParty[a], MON_DATA_HP_IV); battlePokemon.attackIV = GetMonData(&gEnemyParty[a], MON_DATA_ATK_IV); battlePokemon.defenseIV = GetMonData(&gEnemyParty[a], MON_DATA_DEF_IV); - battlePokemon.speedIV = GetMonData(&gEnemyParty[a], MON_DATA_SPD_IV); + battlePokemon.speedIV = GetMonData(&gEnemyParty[a], MON_DATA_SPEED_IV); battlePokemon.spAttackIV = GetMonData(&gEnemyParty[a], MON_DATA_SPATK_IV); battlePokemon.spDefenseIV = GetMonData(&gEnemyParty[a], MON_DATA_SPDEF_IV); battlePokemon.personality = GetMonData(&gEnemyParty[a], MON_DATA_PERSONALITY); @@ -592,7 +592,7 @@ u32 sub_8033598(u8 a, u8 *buffer) battlePokemon.maxHP = GetMonData(&gEnemyParty[a], MON_DATA_MAX_HP); battlePokemon.attack = GetMonData(&gEnemyParty[a], MON_DATA_ATK); battlePokemon.defense = GetMonData(&gEnemyParty[a], MON_DATA_DEF); - battlePokemon.speed = GetMonData(&gEnemyParty[a], MON_DATA_SPD); + battlePokemon.speed = GetMonData(&gEnemyParty[a], MON_DATA_SPEED); battlePokemon.spAttack = GetMonData(&gEnemyParty[a], MON_DATA_SPATK); battlePokemon.spDefense = GetMonData(&gEnemyParty[a], MON_DATA_SPDEF); battlePokemon.isEgg = GetMonData(&gEnemyParty[a], MON_DATA_IS_EGG); @@ -716,7 +716,7 @@ u32 sub_8033598(u8 a, u8 *buffer) buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_HP_IV); buffer[1] = GetMonData(&gEnemyParty[a], MON_DATA_ATK_IV); buffer[2] = GetMonData(&gEnemyParty[a], MON_DATA_DEF_IV); - buffer[3] = GetMonData(&gEnemyParty[a], MON_DATA_SPD_IV); + buffer[3] = GetMonData(&gEnemyParty[a], MON_DATA_SPEED_IV); buffer[4] = GetMonData(&gEnemyParty[a], MON_DATA_SPATK_IV); buffer[5] = GetMonData(&gEnemyParty[a], MON_DATA_SPDEF_IV); size = 6; @@ -734,7 +734,7 @@ u32 sub_8033598(u8 a, u8 *buffer) size = 1; break; case 35: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_SPD_IV); + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_SPEED_IV); size = 1; break; case 36: @@ -796,7 +796,7 @@ u32 sub_8033598(u8 a, u8 *buffer) size = 2; break; case 46: - data16 = GetMonData(&gEnemyParty[a], MON_DATA_SPD); + data16 = GetMonData(&gEnemyParty[a], MON_DATA_SPEED); buffer[0] = data16; buffer[1] = data16 >> 8; size = 2; @@ -925,7 +925,7 @@ void sub_8033E24(u8 a) iv = battlePokemon->defenseIV; SetMonData(&gEnemyParty[a], MON_DATA_DEF_IV, (u8 *)&iv); iv = battlePokemon->speedIV; - SetMonData(&gEnemyParty[a], MON_DATA_SPD_IV, (u8 *)&iv); + SetMonData(&gEnemyParty[a], MON_DATA_SPEED_IV, (u8 *)&iv); iv = battlePokemon->spAttackIV; SetMonData(&gEnemyParty[a], MON_DATA_SPATK_IV, (u8 *)&iv); iv = battlePokemon->spDefenseIV; @@ -937,7 +937,7 @@ void sub_8033E24(u8 a) SetMonData(&gEnemyParty[a], MON_DATA_MAX_HP, (u8 *)&battlePokemon->maxHP); SetMonData(&gEnemyParty[a], MON_DATA_ATK, (u8 *)&battlePokemon->attack); SetMonData(&gEnemyParty[a], MON_DATA_DEF, (u8 *)&battlePokemon->defense); - SetMonData(&gEnemyParty[a], MON_DATA_SPD, (u8 *)&battlePokemon->speed); + SetMonData(&gEnemyParty[a], MON_DATA_SPEED, (u8 *)&battlePokemon->speed); SetMonData(&gEnemyParty[a], MON_DATA_SPATK, (u8 *)&battlePokemon->spAttack); SetMonData(&gEnemyParty[a], MON_DATA_SPDEF, (u8 *)&battlePokemon->spDefense); } @@ -1021,7 +1021,7 @@ void sub_8033E24(u8 a) SetMonData(&gEnemyParty[a], MON_DATA_HP_IV, &gBattleBufferA[gActiveBank][3]); SetMonData(&gEnemyParty[a], MON_DATA_ATK_IV, &gBattleBufferA[gActiveBank][4]); SetMonData(&gEnemyParty[a], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBank][5]); - SetMonData(&gEnemyParty[a], MON_DATA_SPD_IV, &gBattleBufferA[gActiveBank][6]); + SetMonData(&gEnemyParty[a], MON_DATA_SPEED_IV, &gBattleBufferA[gActiveBank][6]); SetMonData(&gEnemyParty[a], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBank][7]); SetMonData(&gEnemyParty[a], MON_DATA_SPDEF_IV, &gBattleBufferA[gActiveBank][8]); break; @@ -1035,7 +1035,7 @@ void sub_8033E24(u8 a) SetMonData(&gEnemyParty[a], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBank][3]); break; case 35: - SetMonData(&gEnemyParty[a], MON_DATA_SPD_IV, &gBattleBufferA[gActiveBank][3]); + SetMonData(&gEnemyParty[a], MON_DATA_SPEED_IV, &gBattleBufferA[gActiveBank][3]); break; case 36: SetMonData(&gEnemyParty[a], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBank][3]); @@ -1068,7 +1068,7 @@ void sub_8033E24(u8 a) SetMonData(&gEnemyParty[a], MON_DATA_DEF, &gBattleBufferA[gActiveBank][3]); break; case 46: - SetMonData(&gEnemyParty[a], MON_DATA_SPD, &gBattleBufferA[gActiveBank][3]); + SetMonData(&gEnemyParty[a], MON_DATA_SPEED, &gBattleBufferA[gActiveBank][3]); break; case 47: SetMonData(&gEnemyParty[a], MON_DATA_SPATK, &gBattleBufferA[gActiveBank][3]); diff --git a/src/battle/battle_controller_player.c b/src/battle/battle_controller_player.c index 53b596c5e..dd94b2f4b 100644 --- a/src/battle/battle_controller_player.c +++ b/src/battle/battle_controller_player.c @@ -1754,7 +1754,7 @@ u32 dp01_getattr_by_ch1_for_player_pokemon_(u8 a, u8 *buffer) battlePokemon.hpIV = GetMonData(&gPlayerParty[a], MON_DATA_HP_IV); battlePokemon.attackIV = GetMonData(&gPlayerParty[a], MON_DATA_ATK_IV); battlePokemon.defenseIV = GetMonData(&gPlayerParty[a], MON_DATA_DEF_IV); - battlePokemon.speedIV = GetMonData(&gPlayerParty[a], MON_DATA_SPD_IV); + battlePokemon.speedIV = GetMonData(&gPlayerParty[a], MON_DATA_SPEED_IV); battlePokemon.spAttackIV = GetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV); battlePokemon.spDefenseIV = GetMonData(&gPlayerParty[a], MON_DATA_SPDEF_IV); battlePokemon.personality = GetMonData(&gPlayerParty[a], MON_DATA_PERSONALITY); @@ -1764,7 +1764,7 @@ u32 dp01_getattr_by_ch1_for_player_pokemon_(u8 a, u8 *buffer) battlePokemon.maxHP = GetMonData(&gPlayerParty[a], MON_DATA_MAX_HP); battlePokemon.attack = GetMonData(&gPlayerParty[a], MON_DATA_ATK); battlePokemon.defense = GetMonData(&gPlayerParty[a], MON_DATA_DEF); - battlePokemon.speed = GetMonData(&gPlayerParty[a], MON_DATA_SPD); + battlePokemon.speed = GetMonData(&gPlayerParty[a], MON_DATA_SPEED); battlePokemon.spAttack = GetMonData(&gPlayerParty[a], MON_DATA_SPATK); battlePokemon.spDefense = GetMonData(&gPlayerParty[a], MON_DATA_SPDEF); battlePokemon.isEgg = GetMonData(&gPlayerParty[a], MON_DATA_IS_EGG); @@ -1888,7 +1888,7 @@ u32 dp01_getattr_by_ch1_for_player_pokemon_(u8 a, u8 *buffer) buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_HP_IV); buffer[1] = GetMonData(&gPlayerParty[a], MON_DATA_ATK_IV); buffer[2] = GetMonData(&gPlayerParty[a], MON_DATA_DEF_IV); - buffer[3] = GetMonData(&gPlayerParty[a], MON_DATA_SPD_IV); + buffer[3] = GetMonData(&gPlayerParty[a], MON_DATA_SPEED_IV); buffer[4] = GetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV); buffer[5] = GetMonData(&gPlayerParty[a], MON_DATA_SPDEF_IV); size = 6; @@ -1906,7 +1906,7 @@ u32 dp01_getattr_by_ch1_for_player_pokemon_(u8 a, u8 *buffer) size = 1; break; case 35: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SPD_IV); + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SPEED_IV); size = 1; break; case 36: @@ -1968,7 +1968,7 @@ u32 dp01_getattr_by_ch1_for_player_pokemon_(u8 a, u8 *buffer) size = 2; break; case 46: - data16 = GetMonData(&gPlayerParty[a], MON_DATA_SPD); + data16 = GetMonData(&gPlayerParty[a], MON_DATA_SPEED); buffer[0] = data16; buffer[1] = data16 >> 8; size = 2; @@ -2098,7 +2098,7 @@ void dp01_setattr_by_ch1_for_player_pokemon(u8 a) iv = battlePokemon->defenseIV; SetMonData(&gPlayerParty[a], MON_DATA_DEF_IV, (u8 *)&iv); iv = battlePokemon->speedIV; - SetMonData(&gPlayerParty[a], MON_DATA_SPD_IV, (u8 *)&iv); + SetMonData(&gPlayerParty[a], MON_DATA_SPEED_IV, (u8 *)&iv); iv = battlePokemon->spAttackIV; SetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV, (u8 *)&iv); iv = battlePokemon->spDefenseIV; @@ -2110,7 +2110,7 @@ void dp01_setattr_by_ch1_for_player_pokemon(u8 a) SetMonData(&gPlayerParty[a], MON_DATA_MAX_HP, (u8 *)&battlePokemon->maxHP); SetMonData(&gPlayerParty[a], MON_DATA_ATK, (u8 *)&battlePokemon->attack); SetMonData(&gPlayerParty[a], MON_DATA_DEF, (u8 *)&battlePokemon->defense); - SetMonData(&gPlayerParty[a], MON_DATA_SPD, (u8 *)&battlePokemon->speed); + SetMonData(&gPlayerParty[a], MON_DATA_SPEED, (u8 *)&battlePokemon->speed); SetMonData(&gPlayerParty[a], MON_DATA_SPATK, (u8 *)&battlePokemon->spAttack); SetMonData(&gPlayerParty[a], MON_DATA_SPDEF, (u8 *)&battlePokemon->spDefense); } @@ -2194,7 +2194,7 @@ void dp01_setattr_by_ch1_for_player_pokemon(u8 a) SetMonData(&gPlayerParty[a], MON_DATA_HP_IV, &gBattleBufferA[gActiveBank][3]); SetMonData(&gPlayerParty[a], MON_DATA_ATK_IV, &gBattleBufferA[gActiveBank][4]); SetMonData(&gPlayerParty[a], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBank][5]); - SetMonData(&gPlayerParty[a], MON_DATA_SPD_IV, &gBattleBufferA[gActiveBank][6]); + SetMonData(&gPlayerParty[a], MON_DATA_SPEED_IV, &gBattleBufferA[gActiveBank][6]); SetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBank][7]); SetMonData(&gPlayerParty[a], MON_DATA_SPDEF_IV, &gBattleBufferA[gActiveBank][8]); break; @@ -2208,7 +2208,7 @@ void dp01_setattr_by_ch1_for_player_pokemon(u8 a) SetMonData(&gPlayerParty[a], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBank][3]); break; case 35: - SetMonData(&gPlayerParty[a], MON_DATA_SPD_IV, &gBattleBufferA[gActiveBank][3]); + SetMonData(&gPlayerParty[a], MON_DATA_SPEED_IV, &gBattleBufferA[gActiveBank][3]); break; case 36: SetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBank][3]); @@ -2241,7 +2241,7 @@ void dp01_setattr_by_ch1_for_player_pokemon(u8 a) SetMonData(&gPlayerParty[a], MON_DATA_DEF, &gBattleBufferA[gActiveBank][3]); break; case 46: - SetMonData(&gPlayerParty[a], MON_DATA_SPD, &gBattleBufferA[gActiveBank][3]); + SetMonData(&gPlayerParty[a], MON_DATA_SPEED, &gBattleBufferA[gActiveBank][3]); break; case 47: SetMonData(&gPlayerParty[a], MON_DATA_SPATK, &gBattleBufferA[gActiveBank][3]); diff --git a/src/battle/battle_controller_wally.c b/src/battle/battle_controller_wally.c index bf6ef0892..97c78ecd8 100644 --- a/src/battle/battle_controller_wally.c +++ b/src/battle/battle_controller_wally.c @@ -550,7 +550,7 @@ u32 sub_8137A84(u8 a, u8 *buffer) battlePokemon.hpIV = GetMonData(&gPlayerParty[a], MON_DATA_HP_IV); battlePokemon.attackIV = GetMonData(&gPlayerParty[a], MON_DATA_ATK_IV); battlePokemon.defenseIV = GetMonData(&gPlayerParty[a], MON_DATA_DEF_IV); - battlePokemon.speedIV = GetMonData(&gPlayerParty[a], MON_DATA_SPD_IV); + battlePokemon.speedIV = GetMonData(&gPlayerParty[a], MON_DATA_SPEED_IV); battlePokemon.spAttackIV = GetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV); battlePokemon.spDefenseIV = GetMonData(&gPlayerParty[a], MON_DATA_SPDEF_IV); battlePokemon.personality = GetMonData(&gPlayerParty[a], MON_DATA_PERSONALITY); @@ -560,7 +560,7 @@ u32 sub_8137A84(u8 a, u8 *buffer) battlePokemon.maxHP = GetMonData(&gPlayerParty[a], MON_DATA_MAX_HP); battlePokemon.attack = GetMonData(&gPlayerParty[a], MON_DATA_ATK); battlePokemon.defense = GetMonData(&gPlayerParty[a], MON_DATA_DEF); - battlePokemon.speed = GetMonData(&gPlayerParty[a], MON_DATA_SPD); + battlePokemon.speed = GetMonData(&gPlayerParty[a], MON_DATA_SPEED); battlePokemon.spAttack = GetMonData(&gPlayerParty[a], MON_DATA_SPATK); battlePokemon.spDefense = GetMonData(&gPlayerParty[a], MON_DATA_SPDEF); battlePokemon.isEgg = GetMonData(&gPlayerParty[a], MON_DATA_IS_EGG); @@ -684,7 +684,7 @@ u32 sub_8137A84(u8 a, u8 *buffer) buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_HP_IV); buffer[1] = GetMonData(&gPlayerParty[a], MON_DATA_ATK_IV); buffer[2] = GetMonData(&gPlayerParty[a], MON_DATA_DEF_IV); - buffer[3] = GetMonData(&gPlayerParty[a], MON_DATA_SPD_IV); + buffer[3] = GetMonData(&gPlayerParty[a], MON_DATA_SPEED_IV); buffer[4] = GetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV); buffer[5] = GetMonData(&gPlayerParty[a], MON_DATA_SPDEF_IV); size = 6; @@ -702,7 +702,7 @@ u32 sub_8137A84(u8 a, u8 *buffer) size = 1; break; case 35: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SPD_IV); + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SPEED_IV); size = 1; break; case 36: @@ -764,7 +764,7 @@ u32 sub_8137A84(u8 a, u8 *buffer) size = 2; break; case 46: - data16 = GetMonData(&gPlayerParty[a], MON_DATA_SPD); + data16 = GetMonData(&gPlayerParty[a], MON_DATA_SPEED); buffer[0] = data16; buffer[1] = data16 >> 8; size = 2; @@ -885,7 +885,7 @@ void sub_8138294(u8 a) iv = battlePokemon->defenseIV; SetMonData(&gPlayerParty[a], MON_DATA_DEF_IV, (u8 *)&iv); iv = battlePokemon->speedIV; - SetMonData(&gPlayerParty[a], MON_DATA_SPD_IV, (u8 *)&iv); + SetMonData(&gPlayerParty[a], MON_DATA_SPEED_IV, (u8 *)&iv); iv = battlePokemon->spAttackIV; SetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV, (u8 *)&iv); iv = battlePokemon->spDefenseIV; @@ -897,7 +897,7 @@ void sub_8138294(u8 a) SetMonData(&gPlayerParty[a], MON_DATA_MAX_HP, (u8 *)&battlePokemon->maxHP); SetMonData(&gPlayerParty[a], MON_DATA_ATK, (u8 *)&battlePokemon->attack); SetMonData(&gPlayerParty[a], MON_DATA_DEF, (u8 *)&battlePokemon->defense); - SetMonData(&gPlayerParty[a], MON_DATA_SPD, (u8 *)&battlePokemon->speed); + SetMonData(&gPlayerParty[a], MON_DATA_SPEED, (u8 *)&battlePokemon->speed); SetMonData(&gPlayerParty[a], MON_DATA_SPATK, (u8 *)&battlePokemon->spAttack); SetMonData(&gPlayerParty[a], MON_DATA_SPDEF, (u8 *)&battlePokemon->spDefense); } @@ -981,7 +981,7 @@ void sub_8138294(u8 a) SetMonData(&gPlayerParty[a], MON_DATA_HP_IV, &gBattleBufferA[gActiveBank][3]); SetMonData(&gPlayerParty[a], MON_DATA_ATK_IV, &gBattleBufferA[gActiveBank][4]); SetMonData(&gPlayerParty[a], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBank][5]); - SetMonData(&gPlayerParty[a], MON_DATA_SPD_IV, &gBattleBufferA[gActiveBank][6]); + SetMonData(&gPlayerParty[a], MON_DATA_SPEED_IV, &gBattleBufferA[gActiveBank][6]); SetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBank][7]); SetMonData(&gPlayerParty[a], MON_DATA_SPDEF_IV, &gBattleBufferA[gActiveBank][8]); break; @@ -995,7 +995,7 @@ void sub_8138294(u8 a) SetMonData(&gPlayerParty[a], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBank][3]); break; case 35: - SetMonData(&gPlayerParty[a], MON_DATA_SPD_IV, &gBattleBufferA[gActiveBank][3]); + SetMonData(&gPlayerParty[a], MON_DATA_SPEED_IV, &gBattleBufferA[gActiveBank][3]); break; case 36: SetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBank][3]); @@ -1028,7 +1028,7 @@ void sub_8138294(u8 a) SetMonData(&gPlayerParty[a], MON_DATA_DEF, &gBattleBufferA[gActiveBank][3]); break; case 46: - SetMonData(&gPlayerParty[a], MON_DATA_SPD, &gBattleBufferA[gActiveBank][3]); + SetMonData(&gPlayerParty[a], MON_DATA_SPEED, &gBattleBufferA[gActiveBank][3]); break; case 47: SetMonData(&gPlayerParty[a], MON_DATA_SPATK, &gBattleBufferA[gActiveBank][3]); diff --git a/src/engine/trade.c b/src/engine/trade.c index 6e78ba3ce..905e9ff0c 100644 --- a/src/engine/trade.c +++ b/src/engine/trade.c @@ -5424,7 +5424,7 @@ static void sub_804D948(u8 whichPlayerMon, u8 whichInGameTrade) SetMonData(pokemon, MON_DATA_HP_IV, &inGameTrade->ivs[0]); SetMonData(pokemon, MON_DATA_ATK_IV, &inGameTrade->ivs[1]); SetMonData(pokemon, MON_DATA_DEF_IV, &inGameTrade->ivs[2]); - SetMonData(pokemon, MON_DATA_SPD_IV, &inGameTrade->ivs[3]); + SetMonData(pokemon, MON_DATA_SPEED_IV, &inGameTrade->ivs[3]); SetMonData(pokemon, MON_DATA_SPATK_IV, &inGameTrade->ivs[4]); SetMonData(pokemon, MON_DATA_SPDEF_IV, &inGameTrade->ivs[5]); SetMonData(pokemon, MON_DATA_NICKNAME, inGameTrade->name); diff --git a/src/field/daycare.c b/src/field/daycare.c index 60cc61e40..9c5808a0e 100644 --- a/src/field/daycare.c +++ b/src/field/daycare.c @@ -388,8 +388,8 @@ static void InheritIVs(struct Pokemon *egg, struct DayCareData *dayCareData) SetMonData(egg, MON_DATA_DEF_IV, &iv); break; case 3: - iv = GetBoxMonData(&dayCareData->mons[whichParent[i]], MON_DATA_SPD_IV); - SetMonData(egg, MON_DATA_SPD_IV, &iv); + iv = GetBoxMonData(&dayCareData->mons[whichParent[i]], MON_DATA_SPEED_IV); + SetMonData(egg, MON_DATA_SPEED_IV, &iv); break; case 4: iv = GetBoxMonData(&dayCareData->mons[whichParent[i]], MON_DATA_SPATK_IV); diff --git a/src/field/party_menu.c b/src/field/party_menu.c index 86ad9ecc9..a4c66d891 100644 --- a/src/field/party_menu.c +++ b/src/field/party_menu.c @@ -460,7 +460,7 @@ static const u8 StatDataTypes[] = { MON_DATA_DEF, MON_DATA_SPATK, MON_DATA_SPDEF, - MON_DATA_SPD, + MON_DATA_SPEED, }; struct Unk201C000 diff --git a/src/pokemon/pokemon_1.c b/src/pokemon/pokemon_1.c index 1d597cb17..345a9668b 100644 --- a/src/pokemon/pokemon_1.c +++ b/src/pokemon/pokemon_1.c @@ -45,7 +45,7 @@ void ZeroMonData(struct Pokemon *mon) SetMonData(mon, MON_DATA_MAX_HP, (u8 *)&arg); SetMonData(mon, MON_DATA_ATK, (u8 *)&arg); SetMonData(mon, MON_DATA_DEF, (u8 *)&arg); - SetMonData(mon, MON_DATA_SPD, (u8 *)&arg); + SetMonData(mon, MON_DATA_SPEED, (u8 *)&arg); SetMonData(mon, MON_DATA_SPATK, (u8 *)&arg); SetMonData(mon, MON_DATA_SPDEF, (u8 *)&arg); arg = 255; @@ -141,7 +141,7 @@ void CreateBoxMon(struct BoxPokemon *boxMon, u16 species, u8 level, u8 fixedIV, SetBoxMonData(boxMon, MON_DATA_HP_IV, &fixedIV); SetBoxMonData(boxMon, MON_DATA_ATK_IV, &fixedIV); SetBoxMonData(boxMon, MON_DATA_DEF_IV, &fixedIV); - SetBoxMonData(boxMon, MON_DATA_SPD_IV, &fixedIV); + SetBoxMonData(boxMon, MON_DATA_SPEED_IV, &fixedIV); SetBoxMonData(boxMon, MON_DATA_SPATK_IV, &fixedIV); SetBoxMonData(boxMon, MON_DATA_SPDEF_IV, &fixedIV); } @@ -160,7 +160,7 @@ void CreateBoxMon(struct BoxPokemon *boxMon, u16 species, u8 level, u8 fixedIV, value = Random(); iv = value & 0x1F; - SetBoxMonData(boxMon, MON_DATA_SPD_IV, (u8 *)&iv); + SetBoxMonData(boxMon, MON_DATA_SPEED_IV, (u8 *)&iv); iv = (value & 0x3E0) >> 5; SetBoxMonData(boxMon, MON_DATA_SPATK_IV, (u8 *)&iv); iv = (value & 0x7C00) >> 10; @@ -247,7 +247,7 @@ void CreateMonWithIVsOTID(struct Pokemon *mon, u16 species, u8 level, u8 *ivs, u SetMonData(mon, MON_DATA_HP_IV, &ivs[0]); SetMonData(mon, MON_DATA_ATK_IV, &ivs[1]); SetMonData(mon, MON_DATA_DEF_IV, &ivs[2]); - SetMonData(mon, MON_DATA_SPD_IV, &ivs[3]); + SetMonData(mon, MON_DATA_SPEED_IV, &ivs[3]); SetMonData(mon, MON_DATA_SPATK_IV, &ivs[4]); SetMonData(mon, MON_DATA_SPDEF_IV, &ivs[5]); CalculateMonStats(mon); @@ -326,7 +326,7 @@ void sub_803ADE8(struct Pokemon *mon, struct UnknownPokemonStruct *src) value = src->defenseIV; SetMonData(mon, MON_DATA_DEF_IV, &value); value = src->speedIV; - SetMonData(mon, MON_DATA_SPD_IV, &value); + SetMonData(mon, MON_DATA_SPEED_IV, &value); value = src->spAttackIV; SetMonData(mon, MON_DATA_SPATK_IV, &value); value = src->spDefenseIV; @@ -363,7 +363,7 @@ void sub_803AF78(struct Pokemon *mon, struct UnknownPokemonStruct *dest) dest->hpIV = GetMonData(mon, MON_DATA_HP_IV, NULL); dest->attackIV = GetMonData(mon, MON_DATA_ATK_IV, NULL); dest->defenseIV = GetMonData(mon, MON_DATA_DEF_IV, NULL); - dest->speedIV = GetMonData(mon, MON_DATA_SPD_IV, NULL); + dest->speedIV = GetMonData(mon, MON_DATA_SPEED_IV, NULL); dest->spAttackIV = GetMonData(mon, MON_DATA_SPATK_IV, NULL); dest->spDefenseIV = GetMonData(mon, MON_DATA_SPDEF_IV, NULL); dest->altAbility = GetMonData(mon, MON_DATA_ALT_ABILITY, NULL); @@ -414,7 +414,7 @@ void CalculateMonStats(struct Pokemon *mon) s32 attackEV = GetMonData(mon, MON_DATA_ATK_EV, NULL); s32 defenseIV = GetMonData(mon, MON_DATA_DEF_IV, NULL); s32 defenseEV = GetMonData(mon, MON_DATA_DEF_EV, NULL); - s32 speedIV = GetMonData(mon, MON_DATA_SPD_IV, NULL); + s32 speedIV = GetMonData(mon, MON_DATA_SPEED_IV, NULL); s32 speedEV = GetMonData(mon, MON_DATA_SPD_EV, NULL); s32 spAttackIV = GetMonData(mon, MON_DATA_SPATK_IV, NULL); s32 spAttackEV = GetMonData(mon, MON_DATA_SPATK_EV, NULL); @@ -444,7 +444,7 @@ void CalculateMonStats(struct Pokemon *mon) CALC_STAT(baseAttack, attackIV, attackEV, 1, MON_DATA_ATK) CALC_STAT(baseDefense, defenseIV, defenseEV, 2, MON_DATA_DEF) - CALC_STAT(baseSpeed, speedIV, speedEV, 3, MON_DATA_SPD) + CALC_STAT(baseSpeed, speedIV, speedEV, 3, MON_DATA_SPEED) CALC_STAT(baseSpAttack, spAttackIV, spAttackEV, 4, MON_DATA_SPATK) CALC_STAT(baseSpDefense, spDefenseIV, spDefenseEV, 5, MON_DATA_SPDEF) diff --git a/src/pokemon/pokemon_2.c b/src/pokemon/pokemon_2.c index f02ce6170..eaa0b86b8 100644 --- a/src/pokemon/pokemon_2.c +++ b/src/pokemon/pokemon_2.c @@ -278,7 +278,7 @@ u32 GetMonData(struct Pokemon *mon, s32 field, u8 *data) return mon->attack; case MON_DATA_DEF: return mon->defense; - case MON_DATA_SPD: + case MON_DATA_SPEED: return mon->speed; case MON_DATA_SPATK: return mon->spAttack; @@ -476,7 +476,7 @@ u32 GetBoxMonData(struct BoxPokemon *boxMon, s32 field, u8 *data) case MON_DATA_DEF_IV: retVal = substruct3->defenseIV; break; - case MON_DATA_SPD_IV: + case MON_DATA_SPEED_IV: retVal = substruct3->speedIV; break; case MON_DATA_SPATK_IV: @@ -653,7 +653,7 @@ void SetMonData(struct Pokemon *mon, s32 field, const u8 *data) case MON_DATA_DEF: SET16(mon->defense); break; - case MON_DATA_SPD: + case MON_DATA_SPEED: SET16(mon->speed); break; case MON_DATA_SPATK: @@ -844,7 +844,7 @@ void SetBoxMonData(struct BoxPokemon *boxMon, s32 field, const u8 *data) case MON_DATA_DEF_IV: SET8(substruct3->defenseIV); break; - case MON_DATA_SPD_IV: + case MON_DATA_SPEED_IV: SET8(substruct3->speedIV); break; case MON_DATA_SPATK_IV: @@ -1185,7 +1185,7 @@ void CopyPlayerPartyMonToBattleData(u8 battleIndex, u8 partyIndex) gBattleMons[battleIndex].hpIV = GetMonData(&gPlayerParty[partyIndex], MON_DATA_HP_IV, NULL); gBattleMons[battleIndex].attackIV = GetMonData(&gPlayerParty[partyIndex], MON_DATA_ATK_IV, NULL); gBattleMons[battleIndex].defenseIV = GetMonData(&gPlayerParty[partyIndex], MON_DATA_DEF_IV, NULL); - gBattleMons[battleIndex].speedIV = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPD_IV, NULL); + gBattleMons[battleIndex].speedIV = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPEED_IV, NULL); gBattleMons[battleIndex].spAttackIV = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPATK_IV, NULL); gBattleMons[battleIndex].spDefenseIV = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPDEF_IV, NULL); gBattleMons[battleIndex].personality = GetMonData(&gPlayerParty[partyIndex], MON_DATA_PERSONALITY, NULL); @@ -1195,7 +1195,7 @@ void CopyPlayerPartyMonToBattleData(u8 battleIndex, u8 partyIndex) gBattleMons[battleIndex].maxHP = GetMonData(&gPlayerParty[partyIndex], MON_DATA_MAX_HP, NULL); gBattleMons[battleIndex].attack = GetMonData(&gPlayerParty[partyIndex], MON_DATA_ATK, NULL); gBattleMons[battleIndex].defense = GetMonData(&gPlayerParty[partyIndex], MON_DATA_DEF, NULL); - gBattleMons[battleIndex].speed = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPD, NULL); + gBattleMons[battleIndex].speed = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPEED, NULL); gBattleMons[battleIndex].spAttack = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPATK, NULL); gBattleMons[battleIndex].spDefense = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPDEF, NULL); gBattleMons[battleIndex].isEgg = GetMonData(&gPlayerParty[partyIndex], MON_DATA_IS_EGG, NULL); diff --git a/src/pokemon/pokemon_size_record.c b/src/pokemon/pokemon_size_record.c index f2222bd3b..a71e6f1fd 100644 --- a/src/pokemon/pokemon_size_record.c +++ b/src/pokemon/pokemon_size_record.c @@ -46,7 +46,7 @@ static u32 GetMonSizeHash(struct Pokemon *pkmn) u16 hpIV = GetMonData(pkmn, MON_DATA_HP_IV) & 0xF; u16 attackIV = GetMonData(pkmn, MON_DATA_ATK_IV) & 0xF; u16 defenseIV = GetMonData(pkmn, MON_DATA_DEF_IV) & 0xF; - u16 speedIV = GetMonData(pkmn, MON_DATA_SPD_IV) & 0xF; + u16 speedIV = GetMonData(pkmn, MON_DATA_SPEED_IV) & 0xF; u16 spAtkIV = GetMonData(pkmn, MON_DATA_SPATK_IV) & 0xF; u16 spDefIV = GetMonData(pkmn, MON_DATA_SPDEF_IV) & 0xF; u32 hibyte = ((attackIV ^ defenseIV) * hpIV) ^ (personality & 0xFF); -- cgit v1.2.3 From 13bd14feabf17e16b180d176b488979708391927 Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Mon, 23 Oct 2017 23:33:13 -0400 Subject: recast fixes for SetMonData and SetBoxMonData. --- src/battle/battle_2.c | 8 +-- src/battle/battle_controller_linkopponent.c | 50 +++++++-------- src/battle/battle_controller_linkpartner.c | 50 +++++++-------- src/battle/battle_controller_opponent.c | 50 +++++++-------- src/battle/battle_controller_player.c | 60 +++++++++--------- src/battle/battle_controller_wally.c | 50 +++++++-------- src/engine/trade.c | 2 +- src/field/daycare.c | 10 +-- src/field/field_poison.c | 2 +- src/field/field_specials.c | 10 +-- src/field/party_menu.c | 4 +- src/field/roamer.c | 14 ++--- src/pokemon/pokemon_1.c | 96 ++++++++++++++--------------- src/pokemon/pokemon_2.c | 10 +-- src/pokemon/pokemon_3.c | 12 ++-- 15 files changed, 215 insertions(+), 213 deletions(-) (limited to 'src') diff --git a/src/battle/battle_2.c b/src/battle/battle_2.c index a447cf498..ecd0c677d 100644 --- a/src/battle/battle_2.c +++ b/src/battle/battle_2.c @@ -999,7 +999,7 @@ u8 CreateNPCTrainerParty(struct Pokemon *party, u16 trainerNum) for (j = 0; j < 4; j++) { - SetMonData(&party[i], MON_DATA_MOVE1 + j, (u8 *)&partyData[i].moves[j]); + SetMonData(&party[i], MON_DATA_MOVE1 + j, &partyData[i].moves[j]); SetMonData(&party[i], MON_DATA_PP1 + j, &gBattleMoves[partyData[i].moves[j]].pp); } break; @@ -1014,7 +1014,7 @@ u8 CreateNPCTrainerParty(struct Pokemon *party, u16 trainerNum) fixedIV = partyData[i].iv * 31 / 255; CreateMon(&party[i], partyData[i].species, partyData[i].level, fixedIV, TRUE, personalityValue, 2, 0); - SetMonData(&party[i], MON_DATA_HELD_ITEM, (u8 *)&partyData[i].heldItem); + SetMonData(&party[i], MON_DATA_HELD_ITEM, &partyData[i].heldItem); break; } case 3: @@ -1027,10 +1027,10 @@ u8 CreateNPCTrainerParty(struct Pokemon *party, u16 trainerNum) fixedIV = partyData[i].iv * 31 / 255; CreateMon(&party[i], partyData[i].species, partyData[i].level, fixedIV, TRUE, personalityValue, 2, 0); - SetMonData(&party[i], MON_DATA_HELD_ITEM, (u8 *)&partyData[i].heldItem); + SetMonData(&party[i], MON_DATA_HELD_ITEM, &partyData[i].heldItem); for (j = 0; j < 4; j++) { - SetMonData(&party[i], MON_DATA_MOVE1 + j, (u8 *)&partyData[i].moves[j]); + SetMonData(&party[i], MON_DATA_MOVE1 + j, &partyData[i].moves[j]); SetMonData(&party[i], MON_DATA_PP1 + j, &gBattleMoves[partyData[i].moves[j]].pp); } break; diff --git a/src/battle/battle_controller_linkopponent.c b/src/battle/battle_controller_linkopponent.c index 83b690719..f2b11ae3d 100644 --- a/src/battle/battle_controller_linkopponent.c +++ b/src/battle/battle_controller_linkopponent.c @@ -936,38 +936,38 @@ void sub_8038900(u8 a) { u8 iv; - SetMonData(&gEnemyParty[a], MON_DATA_SPECIES, (u8 *)&battlePokemon->species); - SetMonData(&gEnemyParty[a], MON_DATA_HELD_ITEM, (u8 *)&battlePokemon->item); + SetMonData(&gEnemyParty[a], MON_DATA_SPECIES, &battlePokemon->species); + SetMonData(&gEnemyParty[a], MON_DATA_HELD_ITEM, &battlePokemon->item); for (i = 0; i < 4; i++) { - SetMonData(&gEnemyParty[a], MON_DATA_MOVE1 + i, (u8 *)&battlePokemon->moves[i]); - SetMonData(&gEnemyParty[a], MON_DATA_PP1 + i, (u8 *)&battlePokemon->pp[i]); + SetMonData(&gEnemyParty[a], MON_DATA_MOVE1 + i, &battlePokemon->moves[i]); + SetMonData(&gEnemyParty[a], MON_DATA_PP1 + i, &battlePokemon->pp[i]); } - SetMonData(&gEnemyParty[a], MON_DATA_PP_BONUSES, (u8 *)&battlePokemon->ppBonuses); - SetMonData(&gEnemyParty[a], MON_DATA_FRIENDSHIP, (u8 *)&battlePokemon->friendship); - SetMonData(&gEnemyParty[a], MON_DATA_EXP, (u8 *)&battlePokemon->experience); + SetMonData(&gEnemyParty[a], MON_DATA_PP_BONUSES, &battlePokemon->ppBonuses); + SetMonData(&gEnemyParty[a], MON_DATA_FRIENDSHIP, &battlePokemon->friendship); + SetMonData(&gEnemyParty[a], MON_DATA_EXP, &battlePokemon->experience); iv = battlePokemon->hpIV; - SetMonData(&gEnemyParty[a], MON_DATA_HP_IV, (u8 *)&iv); + SetMonData(&gEnemyParty[a], MON_DATA_HP_IV, &iv); iv = battlePokemon->attackIV; - SetMonData(&gEnemyParty[a], MON_DATA_ATK_IV, (u8 *)&iv); + SetMonData(&gEnemyParty[a], MON_DATA_ATK_IV, &iv); iv = battlePokemon->defenseIV; - SetMonData(&gEnemyParty[a], MON_DATA_DEF_IV, (u8 *)&iv); + SetMonData(&gEnemyParty[a], MON_DATA_DEF_IV, &iv); iv = battlePokemon->speedIV; - SetMonData(&gEnemyParty[a], MON_DATA_SPEED_IV, (u8 *)&iv); + SetMonData(&gEnemyParty[a], MON_DATA_SPEED_IV, &iv); iv = battlePokemon->spAttackIV; - SetMonData(&gEnemyParty[a], MON_DATA_SPATK_IV, (u8 *)&iv); + SetMonData(&gEnemyParty[a], MON_DATA_SPATK_IV, &iv); iv = battlePokemon->spDefenseIV; - SetMonData(&gEnemyParty[a], MON_DATA_SPDEF_IV, (u8 *)&iv); - SetMonData(&gEnemyParty[a], MON_DATA_PERSONALITY, (u8 *)&battlePokemon->personality); - SetMonData(&gEnemyParty[a], MON_DATA_STATUS, (u8 *)&battlePokemon->status1); - SetMonData(&gEnemyParty[a], MON_DATA_LEVEL, (u8 *)&battlePokemon->level); - SetMonData(&gEnemyParty[a], MON_DATA_HP, (u8 *)&battlePokemon->hp); - SetMonData(&gEnemyParty[a], MON_DATA_MAX_HP, (u8 *)&battlePokemon->maxHP); - SetMonData(&gEnemyParty[a], MON_DATA_ATK, (u8 *)&battlePokemon->attack); - SetMonData(&gEnemyParty[a], MON_DATA_DEF, (u8 *)&battlePokemon->defense); - SetMonData(&gEnemyParty[a], MON_DATA_SPEED, (u8 *)&battlePokemon->speed); - SetMonData(&gEnemyParty[a], MON_DATA_SPATK, (u8 *)&battlePokemon->spAttack); - SetMonData(&gEnemyParty[a], MON_DATA_SPDEF, (u8 *)&battlePokemon->spDefense); + SetMonData(&gEnemyParty[a], MON_DATA_SPDEF_IV, &iv); + SetMonData(&gEnemyParty[a], MON_DATA_PERSONALITY, &battlePokemon->personality); + SetMonData(&gEnemyParty[a], MON_DATA_STATUS, &battlePokemon->status1); + SetMonData(&gEnemyParty[a], MON_DATA_LEVEL, &battlePokemon->level); + SetMonData(&gEnemyParty[a], MON_DATA_HP, &battlePokemon->hp); + SetMonData(&gEnemyParty[a], MON_DATA_MAX_HP, &battlePokemon->maxHP); + SetMonData(&gEnemyParty[a], MON_DATA_ATK, &battlePokemon->attack); + SetMonData(&gEnemyParty[a], MON_DATA_DEF, &battlePokemon->defense); + SetMonData(&gEnemyParty[a], MON_DATA_SPEED, &battlePokemon->speed); + SetMonData(&gEnemyParty[a], MON_DATA_SPATK, &battlePokemon->spAttack); + SetMonData(&gEnemyParty[a], MON_DATA_SPDEF, &battlePokemon->spDefense); } break; case 1: @@ -979,8 +979,8 @@ void sub_8038900(u8 a) case 3: for (i = 0; i < 4; i++) { - SetMonData(&gEnemyParty[a], MON_DATA_MOVE1 + i, (u8 *)&moveData->moves[i]); - SetMonData(&gEnemyParty[a], MON_DATA_PP1 + i, (u8 *)&moveData->pp[i]); + SetMonData(&gEnemyParty[a], MON_DATA_MOVE1 + i, &moveData->moves[i]); + SetMonData(&gEnemyParty[a], MON_DATA_PP1 + i, &moveData->pp[i]); } SetMonData(&gEnemyParty[a], MON_DATA_PP_BONUSES, &moveData->ppBonuses); break; diff --git a/src/battle/battle_controller_linkpartner.c b/src/battle/battle_controller_linkpartner.c index ca20f6262..60e9599f8 100644 --- a/src/battle/battle_controller_linkpartner.c +++ b/src/battle/battle_controller_linkpartner.c @@ -893,38 +893,38 @@ void sub_811EC68(u8 a) { u8 iv; - SetMonData(&gPlayerParty[a], MON_DATA_SPECIES, (u8 *)&battlePokemon->species); - SetMonData(&gPlayerParty[a], MON_DATA_HELD_ITEM, (u8 *)&battlePokemon->item); + SetMonData(&gPlayerParty[a], MON_DATA_SPECIES, &battlePokemon->species); + SetMonData(&gPlayerParty[a], MON_DATA_HELD_ITEM, &battlePokemon->item); for (i = 0; i < 4; i++) { - SetMonData(&gPlayerParty[a], MON_DATA_MOVE1 + i, (u8 *)&battlePokemon->moves[i]); - SetMonData(&gPlayerParty[a], MON_DATA_PP1 + i, (u8 *)&battlePokemon->pp[i]); + SetMonData(&gPlayerParty[a], MON_DATA_MOVE1 + i, &battlePokemon->moves[i]); + SetMonData(&gPlayerParty[a], MON_DATA_PP1 + i, &battlePokemon->pp[i]); } - SetMonData(&gPlayerParty[a], MON_DATA_PP_BONUSES, (u8 *)&battlePokemon->ppBonuses); - SetMonData(&gPlayerParty[a], MON_DATA_FRIENDSHIP, (u8 *)&battlePokemon->friendship); - SetMonData(&gPlayerParty[a], MON_DATA_EXP, (u8 *)&battlePokemon->experience); + SetMonData(&gPlayerParty[a], MON_DATA_PP_BONUSES, &battlePokemon->ppBonuses); + SetMonData(&gPlayerParty[a], MON_DATA_FRIENDSHIP, &battlePokemon->friendship); + SetMonData(&gPlayerParty[a], MON_DATA_EXP, &battlePokemon->experience); iv = battlePokemon->hpIV; - SetMonData(&gPlayerParty[a], MON_DATA_HP_IV, (u8 *)&iv); + SetMonData(&gPlayerParty[a], MON_DATA_HP_IV, &iv); iv = battlePokemon->attackIV; - SetMonData(&gPlayerParty[a], MON_DATA_ATK_IV, (u8 *)&iv); + SetMonData(&gPlayerParty[a], MON_DATA_ATK_IV, &iv); iv = battlePokemon->defenseIV; - SetMonData(&gPlayerParty[a], MON_DATA_DEF_IV, (u8 *)&iv); + SetMonData(&gPlayerParty[a], MON_DATA_DEF_IV, &iv); iv = battlePokemon->speedIV; - SetMonData(&gPlayerParty[a], MON_DATA_SPEED_IV, (u8 *)&iv); + SetMonData(&gPlayerParty[a], MON_DATA_SPEED_IV, &iv); iv = battlePokemon->spAttackIV; - SetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV, (u8 *)&iv); + SetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV, &iv); iv = battlePokemon->spDefenseIV; - SetMonData(&gPlayerParty[a], MON_DATA_SPDEF_IV, (u8 *)&iv); - SetMonData(&gPlayerParty[a], MON_DATA_PERSONALITY, (u8 *)&battlePokemon->personality); - SetMonData(&gPlayerParty[a], MON_DATA_STATUS, (u8 *)&battlePokemon->status1); - SetMonData(&gPlayerParty[a], MON_DATA_LEVEL, (u8 *)&battlePokemon->level); - SetMonData(&gPlayerParty[a], MON_DATA_HP, (u8 *)&battlePokemon->hp); - SetMonData(&gPlayerParty[a], MON_DATA_MAX_HP, (u8 *)&battlePokemon->maxHP); - SetMonData(&gPlayerParty[a], MON_DATA_ATK, (u8 *)&battlePokemon->attack); - SetMonData(&gPlayerParty[a], MON_DATA_DEF, (u8 *)&battlePokemon->defense); - SetMonData(&gPlayerParty[a], MON_DATA_SPEED, (u8 *)&battlePokemon->speed); - SetMonData(&gPlayerParty[a], MON_DATA_SPATK, (u8 *)&battlePokemon->spAttack); - SetMonData(&gPlayerParty[a], MON_DATA_SPDEF, (u8 *)&battlePokemon->spDefense); + SetMonData(&gPlayerParty[a], MON_DATA_SPDEF_IV, &iv); + SetMonData(&gPlayerParty[a], MON_DATA_PERSONALITY, &battlePokemon->personality); + SetMonData(&gPlayerParty[a], MON_DATA_STATUS, &battlePokemon->status1); + SetMonData(&gPlayerParty[a], MON_DATA_LEVEL, &battlePokemon->level); + SetMonData(&gPlayerParty[a], MON_DATA_HP, &battlePokemon->hp); + SetMonData(&gPlayerParty[a], MON_DATA_MAX_HP, &battlePokemon->maxHP); + SetMonData(&gPlayerParty[a], MON_DATA_ATK, &battlePokemon->attack); + SetMonData(&gPlayerParty[a], MON_DATA_DEF, &battlePokemon->defense); + SetMonData(&gPlayerParty[a], MON_DATA_SPEED, &battlePokemon->speed); + SetMonData(&gPlayerParty[a], MON_DATA_SPATK, &battlePokemon->spAttack); + SetMonData(&gPlayerParty[a], MON_DATA_SPDEF, &battlePokemon->spDefense); } break; case 1: @@ -936,8 +936,8 @@ void sub_811EC68(u8 a) case 3: for (i = 0; i < 4; i++) { - SetMonData(&gPlayerParty[a], MON_DATA_MOVE1 + i, (u8 *)&moveData->moves[i]); - SetMonData(&gPlayerParty[a], MON_DATA_PP1 + i, (u8 *)&moveData->pp[i]); + SetMonData(&gPlayerParty[a], MON_DATA_MOVE1 + i, &moveData->moves[i]); + SetMonData(&gPlayerParty[a], MON_DATA_PP1 + i, &moveData->pp[i]); } SetMonData(&gPlayerParty[a], MON_DATA_PP_BONUSES, &moveData->ppBonuses); break; diff --git a/src/battle/battle_controller_opponent.c b/src/battle/battle_controller_opponent.c index cf90d5817..85c0f4c52 100644 --- a/src/battle/battle_controller_opponent.c +++ b/src/battle/battle_controller_opponent.c @@ -908,38 +908,38 @@ void sub_8033E24(u8 a) { u8 iv; - SetMonData(&gEnemyParty[a], MON_DATA_SPECIES, (u8 *)&battlePokemon->species); - SetMonData(&gEnemyParty[a], MON_DATA_HELD_ITEM, (u8 *)&battlePokemon->item); + SetMonData(&gEnemyParty[a], MON_DATA_SPECIES, &battlePokemon->species); + SetMonData(&gEnemyParty[a], MON_DATA_HELD_ITEM, &battlePokemon->item); for (i = 0; i < 4; i++) { - SetMonData(&gEnemyParty[a], MON_DATA_MOVE1 + i, (u8 *)&battlePokemon->moves[i]); - SetMonData(&gEnemyParty[a], MON_DATA_PP1 + i, (u8 *)&battlePokemon->pp[i]); + SetMonData(&gEnemyParty[a], MON_DATA_MOVE1 + i, &battlePokemon->moves[i]); + SetMonData(&gEnemyParty[a], MON_DATA_PP1 + i, &battlePokemon->pp[i]); } - SetMonData(&gEnemyParty[a], MON_DATA_PP_BONUSES, (u8 *)&battlePokemon->ppBonuses); - SetMonData(&gEnemyParty[a], MON_DATA_FRIENDSHIP, (u8 *)&battlePokemon->friendship); - SetMonData(&gEnemyParty[a], MON_DATA_EXP, (u8 *)&battlePokemon->experience); + SetMonData(&gEnemyParty[a], MON_DATA_PP_BONUSES, &battlePokemon->ppBonuses); + SetMonData(&gEnemyParty[a], MON_DATA_FRIENDSHIP, &battlePokemon->friendship); + SetMonData(&gEnemyParty[a], MON_DATA_EXP, &battlePokemon->experience); iv = battlePokemon->hpIV; - SetMonData(&gEnemyParty[a], MON_DATA_HP_IV, (u8 *)&iv); + SetMonData(&gEnemyParty[a], MON_DATA_HP_IV, &iv); iv = battlePokemon->attackIV; - SetMonData(&gEnemyParty[a], MON_DATA_ATK_IV, (u8 *)&iv); + SetMonData(&gEnemyParty[a], MON_DATA_ATK_IV, &iv); iv = battlePokemon->defenseIV; - SetMonData(&gEnemyParty[a], MON_DATA_DEF_IV, (u8 *)&iv); + SetMonData(&gEnemyParty[a], MON_DATA_DEF_IV, &iv); iv = battlePokemon->speedIV; - SetMonData(&gEnemyParty[a], MON_DATA_SPEED_IV, (u8 *)&iv); + SetMonData(&gEnemyParty[a], MON_DATA_SPEED_IV, &iv); iv = battlePokemon->spAttackIV; - SetMonData(&gEnemyParty[a], MON_DATA_SPATK_IV, (u8 *)&iv); + SetMonData(&gEnemyParty[a], MON_DATA_SPATK_IV, &iv); iv = battlePokemon->spDefenseIV; - SetMonData(&gEnemyParty[a], MON_DATA_SPDEF_IV, (u8 *)&iv); - SetMonData(&gEnemyParty[a], MON_DATA_PERSONALITY, (u8 *)&battlePokemon->personality); - SetMonData(&gEnemyParty[a], MON_DATA_STATUS, (u8 *)&battlePokemon->status1); - SetMonData(&gEnemyParty[a], MON_DATA_LEVEL, (u8 *)&battlePokemon->level); - SetMonData(&gEnemyParty[a], MON_DATA_HP, (u8 *)&battlePokemon->hp); - SetMonData(&gEnemyParty[a], MON_DATA_MAX_HP, (u8 *)&battlePokemon->maxHP); - SetMonData(&gEnemyParty[a], MON_DATA_ATK, (u8 *)&battlePokemon->attack); - SetMonData(&gEnemyParty[a], MON_DATA_DEF, (u8 *)&battlePokemon->defense); - SetMonData(&gEnemyParty[a], MON_DATA_SPEED, (u8 *)&battlePokemon->speed); - SetMonData(&gEnemyParty[a], MON_DATA_SPATK, (u8 *)&battlePokemon->spAttack); - SetMonData(&gEnemyParty[a], MON_DATA_SPDEF, (u8 *)&battlePokemon->spDefense); + SetMonData(&gEnemyParty[a], MON_DATA_SPDEF_IV, &iv); + SetMonData(&gEnemyParty[a], MON_DATA_PERSONALITY, &battlePokemon->personality); + SetMonData(&gEnemyParty[a], MON_DATA_STATUS, &battlePokemon->status1); + SetMonData(&gEnemyParty[a], MON_DATA_LEVEL, &battlePokemon->level); + SetMonData(&gEnemyParty[a], MON_DATA_HP, &battlePokemon->hp); + SetMonData(&gEnemyParty[a], MON_DATA_MAX_HP, &battlePokemon->maxHP); + SetMonData(&gEnemyParty[a], MON_DATA_ATK, &battlePokemon->attack); + SetMonData(&gEnemyParty[a], MON_DATA_DEF, &battlePokemon->defense); + SetMonData(&gEnemyParty[a], MON_DATA_SPEED, &battlePokemon->speed); + SetMonData(&gEnemyParty[a], MON_DATA_SPATK, &battlePokemon->spAttack); + SetMonData(&gEnemyParty[a], MON_DATA_SPDEF, &battlePokemon->spDefense); } break; case 1: @@ -951,8 +951,8 @@ void sub_8033E24(u8 a) case 3: for (i = 0; i < 4; i++) { - SetMonData(&gEnemyParty[a], MON_DATA_MOVE1 + i, (u8 *)&moveData->moves[i]); - SetMonData(&gEnemyParty[a], MON_DATA_PP1 + i, (u8 *)&moveData->pp[i]); + SetMonData(&gEnemyParty[a], MON_DATA_MOVE1 + i, &moveData->moves[i]); + SetMonData(&gEnemyParty[a], MON_DATA_PP1 + i, &moveData->pp[i]); } SetMonData(&gEnemyParty[a], MON_DATA_PP_BONUSES, &moveData->ppBonuses); break; diff --git a/src/battle/battle_controller_player.c b/src/battle/battle_controller_player.c index dd94b2f4b..ad266d415 100644 --- a/src/battle/battle_controller_player.c +++ b/src/battle/battle_controller_player.c @@ -841,7 +841,7 @@ void sub_802CA60(void) for (i = 0; i < 4; i++) { - SetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_MOVE1 + i, (u8 *)&sp0.moves[i]); + SetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_MOVE1 + i, &sp0.moves[i]); SetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_PP1 + i, &sp0.pp[i]); } SetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_PP_BONUSES, &totalPPBonuses); @@ -1149,7 +1149,7 @@ void sub_802D924(u8 taskId) { u8 savedActiveBank; - SetMonData(pkmn, MON_DATA_EXP, (u8 *)&nextLvlExp); + SetMonData(pkmn, MON_DATA_EXP, &nextLvlExp); CalculateMonStats(pkmn); gainedExp -= nextLvlExp - currExp; savedActiveBank = gActiveBank; @@ -1166,7 +1166,7 @@ void sub_802D924(u8 taskId) else { currExp += gainedExp; - SetMonData(pkmn, MON_DATA_EXP, (u8 *)&currExp); + SetMonData(pkmn, MON_DATA_EXP, &currExp); gBattleBankFunc[bank] = sub_802D90C; DestroyTask(taskId); } @@ -1231,7 +1231,7 @@ void sub_802DB6C(u8 taskId) u8 r5; u32 asdf; - SetMonData(pkmn, MON_DATA_EXP, (u8 *)&sp0); + SetMonData(pkmn, MON_DATA_EXP, &sp0); CalculateMonStats(pkmn); //r10 -= sp0 - sp4; asdf = sp0 - sp4; @@ -1247,7 +1247,7 @@ void sub_802DB6C(u8 taskId) { //u32 asdf = sp4 + r10; sp4 += r10; - SetMonData(pkmn, MON_DATA_EXP, (u8 *)&sp4); + SetMonData(pkmn, MON_DATA_EXP, &sp4); gBattleBankFunc[r7] = sub_802D90C; DestroyTask(taskId); } @@ -2081,38 +2081,38 @@ void dp01_setattr_by_ch1_for_player_pokemon(u8 a) { u8 iv; - SetMonData(&gPlayerParty[a], MON_DATA_SPECIES, (u8 *)&battlePokemon->species); - SetMonData(&gPlayerParty[a], MON_DATA_HELD_ITEM, (u8 *)&battlePokemon->item); + SetMonData(&gPlayerParty[a], MON_DATA_SPECIES, &battlePokemon->species); + SetMonData(&gPlayerParty[a], MON_DATA_HELD_ITEM, &battlePokemon->item); for (i = 0; i < 4; i++) { - SetMonData(&gPlayerParty[a], MON_DATA_MOVE1 + i, (u8 *)&battlePokemon->moves[i]); - SetMonData(&gPlayerParty[a], MON_DATA_PP1 + i, (u8 *)&battlePokemon->pp[i]); + SetMonData(&gPlayerParty[a], MON_DATA_MOVE1 + i, &battlePokemon->moves[i]); + SetMonData(&gPlayerParty[a], MON_DATA_PP1 + i, &battlePokemon->pp[i]); } - SetMonData(&gPlayerParty[a], MON_DATA_PP_BONUSES, (u8 *)&battlePokemon->ppBonuses); - SetMonData(&gPlayerParty[a], MON_DATA_FRIENDSHIP, (u8 *)&battlePokemon->friendship); - SetMonData(&gPlayerParty[a], MON_DATA_EXP, (u8 *)&battlePokemon->experience); + SetMonData(&gPlayerParty[a], MON_DATA_PP_BONUSES, &battlePokemon->ppBonuses); + SetMonData(&gPlayerParty[a], MON_DATA_FRIENDSHIP, &battlePokemon->friendship); + SetMonData(&gPlayerParty[a], MON_DATA_EXP, &battlePokemon->experience); iv = battlePokemon->hpIV; - SetMonData(&gPlayerParty[a], MON_DATA_HP_IV, (u8 *)&iv); + SetMonData(&gPlayerParty[a], MON_DATA_HP_IV, &iv); iv = battlePokemon->attackIV; - SetMonData(&gPlayerParty[a], MON_DATA_ATK_IV, (u8 *)&iv); + SetMonData(&gPlayerParty[a], MON_DATA_ATK_IV, &iv); iv = battlePokemon->defenseIV; - SetMonData(&gPlayerParty[a], MON_DATA_DEF_IV, (u8 *)&iv); + SetMonData(&gPlayerParty[a], MON_DATA_DEF_IV, &iv); iv = battlePokemon->speedIV; - SetMonData(&gPlayerParty[a], MON_DATA_SPEED_IV, (u8 *)&iv); + SetMonData(&gPlayerParty[a], MON_DATA_SPEED_IV, &iv); iv = battlePokemon->spAttackIV; - SetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV, (u8 *)&iv); + SetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV, &iv); iv = battlePokemon->spDefenseIV; - SetMonData(&gPlayerParty[a], MON_DATA_SPDEF_IV, (u8 *)&iv); - SetMonData(&gPlayerParty[a], MON_DATA_PERSONALITY, (u8 *)&battlePokemon->personality); - SetMonData(&gPlayerParty[a], MON_DATA_STATUS, (u8 *)&battlePokemon->status1); - SetMonData(&gPlayerParty[a], MON_DATA_LEVEL, (u8 *)&battlePokemon->level); - SetMonData(&gPlayerParty[a], MON_DATA_HP, (u8 *)&battlePokemon->hp); - SetMonData(&gPlayerParty[a], MON_DATA_MAX_HP, (u8 *)&battlePokemon->maxHP); - SetMonData(&gPlayerParty[a], MON_DATA_ATK, (u8 *)&battlePokemon->attack); - SetMonData(&gPlayerParty[a], MON_DATA_DEF, (u8 *)&battlePokemon->defense); - SetMonData(&gPlayerParty[a], MON_DATA_SPEED, (u8 *)&battlePokemon->speed); - SetMonData(&gPlayerParty[a], MON_DATA_SPATK, (u8 *)&battlePokemon->spAttack); - SetMonData(&gPlayerParty[a], MON_DATA_SPDEF, (u8 *)&battlePokemon->spDefense); + SetMonData(&gPlayerParty[a], MON_DATA_SPDEF_IV, &iv); + SetMonData(&gPlayerParty[a], MON_DATA_PERSONALITY, &battlePokemon->personality); + SetMonData(&gPlayerParty[a], MON_DATA_STATUS, &battlePokemon->status1); + SetMonData(&gPlayerParty[a], MON_DATA_LEVEL, &battlePokemon->level); + SetMonData(&gPlayerParty[a], MON_DATA_HP, &battlePokemon->hp); + SetMonData(&gPlayerParty[a], MON_DATA_MAX_HP, &battlePokemon->maxHP); + SetMonData(&gPlayerParty[a], MON_DATA_ATK, &battlePokemon->attack); + SetMonData(&gPlayerParty[a], MON_DATA_DEF, &battlePokemon->defense); + SetMonData(&gPlayerParty[a], MON_DATA_SPEED, &battlePokemon->speed); + SetMonData(&gPlayerParty[a], MON_DATA_SPATK, &battlePokemon->spAttack); + SetMonData(&gPlayerParty[a], MON_DATA_SPDEF, &battlePokemon->spDefense); } break; case 1: @@ -2124,8 +2124,8 @@ void dp01_setattr_by_ch1_for_player_pokemon(u8 a) case 3: for (i = 0; i < 4; i++) { - SetMonData(&gPlayerParty[a], MON_DATA_MOVE1 + i, (u8 *)&moveData->moves[i]); - SetMonData(&gPlayerParty[a], MON_DATA_PP1 + i, (u8 *)&moveData->pp[i]); + SetMonData(&gPlayerParty[a], MON_DATA_MOVE1 + i, &moveData->moves[i]); + SetMonData(&gPlayerParty[a], MON_DATA_PP1 + i, &moveData->pp[i]); } SetMonData(&gPlayerParty[a], MON_DATA_PP_BONUSES, &moveData->ppBonuses); break; diff --git a/src/battle/battle_controller_wally.c b/src/battle/battle_controller_wally.c index 97c78ecd8..cd371bc6f 100644 --- a/src/battle/battle_controller_wally.c +++ b/src/battle/battle_controller_wally.c @@ -868,38 +868,38 @@ void sub_8138294(u8 a) { u8 iv; - SetMonData(&gPlayerParty[a], MON_DATA_SPECIES, (u8 *)&battlePokemon->species); - SetMonData(&gPlayerParty[a], MON_DATA_HELD_ITEM, (u8 *)&battlePokemon->item); + SetMonData(&gPlayerParty[a], MON_DATA_SPECIES, &battlePokemon->species); + SetMonData(&gPlayerParty[a], MON_DATA_HELD_ITEM, &battlePokemon->item); for (i = 0; i < 4; i++) { - SetMonData(&gPlayerParty[a], MON_DATA_MOVE1 + i, (u8 *)&battlePokemon->moves[i]); - SetMonData(&gPlayerParty[a], MON_DATA_PP1 + i, (u8 *)&battlePokemon->pp[i]); + SetMonData(&gPlayerParty[a], MON_DATA_MOVE1 + i, &battlePokemon->moves[i]); + SetMonData(&gPlayerParty[a], MON_DATA_PP1 + i, &battlePokemon->pp[i]); } - SetMonData(&gPlayerParty[a], MON_DATA_PP_BONUSES, (u8 *)&battlePokemon->ppBonuses); - SetMonData(&gPlayerParty[a], MON_DATA_FRIENDSHIP, (u8 *)&battlePokemon->friendship); - SetMonData(&gPlayerParty[a], MON_DATA_EXP, (u8 *)&battlePokemon->experience); + SetMonData(&gPlayerParty[a], MON_DATA_PP_BONUSES, &battlePokemon->ppBonuses); + SetMonData(&gPlayerParty[a], MON_DATA_FRIENDSHIP, &battlePokemon->friendship); + SetMonData(&gPlayerParty[a], MON_DATA_EXP, &battlePokemon->experience); iv = battlePokemon->hpIV; - SetMonData(&gPlayerParty[a], MON_DATA_HP_IV, (u8 *)&iv); + SetMonData(&gPlayerParty[a], MON_DATA_HP_IV, &iv); iv = battlePokemon->attackIV; - SetMonData(&gPlayerParty[a], MON_DATA_ATK_IV, (u8 *)&iv); + SetMonData(&gPlayerParty[a], MON_DATA_ATK_IV, &iv); iv = battlePokemon->defenseIV; - SetMonData(&gPlayerParty[a], MON_DATA_DEF_IV, (u8 *)&iv); + SetMonData(&gPlayerParty[a], MON_DATA_DEF_IV, &iv); iv = battlePokemon->speedIV; - SetMonData(&gPlayerParty[a], MON_DATA_SPEED_IV, (u8 *)&iv); + SetMonData(&gPlayerParty[a], MON_DATA_SPEED_IV, &iv); iv = battlePokemon->spAttackIV; - SetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV, (u8 *)&iv); + SetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV, &iv); iv = battlePokemon->spDefenseIV; - SetMonData(&gPlayerParty[a], MON_DATA_SPDEF_IV, (u8 *)&iv); - SetMonData(&gPlayerParty[a], MON_DATA_PERSONALITY, (u8 *)&battlePokemon->personality); - SetMonData(&gPlayerParty[a], MON_DATA_STATUS, (u8 *)&battlePokemon->status1); - SetMonData(&gPlayerParty[a], MON_DATA_LEVEL, (u8 *)&battlePokemon->level); - SetMonData(&gPlayerParty[a], MON_DATA_HP, (u8 *)&battlePokemon->hp); - SetMonData(&gPlayerParty[a], MON_DATA_MAX_HP, (u8 *)&battlePokemon->maxHP); - SetMonData(&gPlayerParty[a], MON_DATA_ATK, (u8 *)&battlePokemon->attack); - SetMonData(&gPlayerParty[a], MON_DATA_DEF, (u8 *)&battlePokemon->defense); - SetMonData(&gPlayerParty[a], MON_DATA_SPEED, (u8 *)&battlePokemon->speed); - SetMonData(&gPlayerParty[a], MON_DATA_SPATK, (u8 *)&battlePokemon->spAttack); - SetMonData(&gPlayerParty[a], MON_DATA_SPDEF, (u8 *)&battlePokemon->spDefense); + SetMonData(&gPlayerParty[a], MON_DATA_SPDEF_IV, &iv); + SetMonData(&gPlayerParty[a], MON_DATA_PERSONALITY, &battlePokemon->personality); + SetMonData(&gPlayerParty[a], MON_DATA_STATUS, &battlePokemon->status1); + SetMonData(&gPlayerParty[a], MON_DATA_LEVEL, &battlePokemon->level); + SetMonData(&gPlayerParty[a], MON_DATA_HP, &battlePokemon->hp); + SetMonData(&gPlayerParty[a], MON_DATA_MAX_HP, &battlePokemon->maxHP); + SetMonData(&gPlayerParty[a], MON_DATA_ATK, &battlePokemon->attack); + SetMonData(&gPlayerParty[a], MON_DATA_DEF, &battlePokemon->defense); + SetMonData(&gPlayerParty[a], MON_DATA_SPEED, &battlePokemon->speed); + SetMonData(&gPlayerParty[a], MON_DATA_SPATK, &battlePokemon->spAttack); + SetMonData(&gPlayerParty[a], MON_DATA_SPDEF, &battlePokemon->spDefense); } break; case 1: @@ -911,8 +911,8 @@ void sub_8138294(u8 a) case 3: for (i = 0; i < 4; i++) { - SetMonData(&gPlayerParty[a], MON_DATA_MOVE1 + i, (u8 *)&moveData->moves[i]); - SetMonData(&gPlayerParty[a], MON_DATA_PP1 + i, (u8 *)&moveData->pp[i]); + SetMonData(&gPlayerParty[a], MON_DATA_MOVE1 + i, &moveData->moves[i]); + SetMonData(&gPlayerParty[a], MON_DATA_PP1 + i, &moveData->pp[i]); } SetMonData(&gPlayerParty[a], MON_DATA_PP_BONUSES, &moveData->ppBonuses); break; diff --git a/src/engine/trade.c b/src/engine/trade.c index 905e9ff0c..fdc764e87 100644 --- a/src/engine/trade.c +++ b/src/engine/trade.c @@ -5447,7 +5447,7 @@ static void sub_804D948(u8 whichPlayerMon, u8 whichInGameTrade) sub_804DAD4(&mail, inGameTrade); gUnknown_02029700[0] = mail; SetMonData(pokemon, MON_DATA_MAIL, &isMail); - SetMonData(pokemon, MON_DATA_HELD_ITEM, (u8 *)&inGameTrade->heldItem); + SetMonData(pokemon, MON_DATA_HELD_ITEM, &inGameTrade->heldItem); } else { diff --git a/src/field/daycare.c b/src/field/daycare.c index 9c5808a0e..97765e676 100644 --- a/src/field/daycare.c +++ b/src/field/daycare.c @@ -188,7 +188,7 @@ static u16 sub_8041570(struct DayCareData * daycare_data, u8 slot) if (GetMonData(&pokemon, MON_DATA_LEVEL) != MAX_LEVEL) { experience = GetMonData(&pokemon, MON_DATA_EXP) + daycare_data->misc.countersEtc.steps[slot]; - SetMonData(&pokemon, MON_DATA_EXP, (u8 *)&experience); + SetMonData(&pokemon, MON_DATA_EXP, &experience); DayCare_LevelUpMoves(&pokemon); } gPlayerParty[PARTY_SIZE - 1] = pokemon; @@ -213,7 +213,7 @@ u16 sub_8041648() u8 Daycare_GetLevelAfterSteps(struct BoxPokemon * mon, u32 steps){ struct BoxPokemon temp = *mon; u32 new_exp = GetBoxMonData(mon, MON_DATA_EXP) + steps; - SetBoxMonData(&temp, MON_DATA_EXP, (u8 *) &new_exp); + SetBoxMonData(&temp, MON_DATA_EXP, &new_exp); return GetLevelFromBoxMonExp(&temp); } @@ -960,7 +960,7 @@ void sub_8042044(struct Pokemon *mon, u16 species, u8 overwriteMetLocation) // s metLevel = 0; ball = ITEM_POKE_BALL; language = LANGUAGE_JAPANESE; - SetMonData(mon, MON_DATA_POKEBALL, (u8 *)&ball); + SetMonData(mon, MON_DATA_POKEBALL, &ball); SetMonData(mon, MON_DATA_NICKNAME, gUnknown_08209AD4); SetMonData(mon, MON_DATA_FRIENDSHIP, &gBaseStats[species].eggCycles); SetMonData(mon, MON_DATA_MET_LEVEL, &metLevel); @@ -985,7 +985,7 @@ static void sub_80420FC(struct Pokemon *mon, u16 species, struct DayCareData *da metLevel = 0; ball = ITEM_POKE_BALL; language = LANGUAGE_JAPANESE; - SetMonData(mon, MON_DATA_POKEBALL, (u8 *)&ball); + SetMonData(mon, MON_DATA_POKEBALL, &ball); SetMonData(mon, MON_DATA_NICKNAME, gUnknown_08209AD4); SetMonData(mon, MON_DATA_FRIENDSHIP, &gBaseStats[species].eggCycles); SetMonData(mon, MON_DATA_MET_LEVEL, &metLevel); @@ -1030,7 +1030,7 @@ static bool8 sub_80421B0(struct DayCareData *dayCareData) return TRUE; } steps--; - SetMonData(&gPlayerParty[i], MON_DATA_FRIENDSHIP, (u8 *)&steps); + SetMonData(&gPlayerParty[i], MON_DATA_FRIENDSHIP, &steps); } } } diff --git a/src/field/field_poison.c b/src/field/field_poison.c index 1244b9c62..b6ff12ff9 100644 --- a/src/field/field_poison.c +++ b/src/field/field_poison.c @@ -128,7 +128,7 @@ s32 DoPoisonFieldEffect(void) hp--; if (hp == 0) numFainting++; //Pokemon will now faint due to poison - SetMonData(pkmn, MON_DATA_HP, (u8 *)&hp); + SetMonData(pkmn, MON_DATA_HP, &hp); numPoisoned++; } pkmn++; diff --git a/src/field/field_specials.c b/src/field/field_specials.c index 899905429..b328ecb1b 100644 --- a/src/field/field_specials.c +++ b/src/field/field_specials.c @@ -1905,13 +1905,13 @@ void PutZigzagoonInPlayerParty(void) u16 monData; CreateMon(&gPlayerParty[0], SPECIES_ZIGZAGOON, 7, 0x20, FALSE, 0, FALSE, 0); monData = TRUE; - SetMonData(&gPlayerParty[0], MON_DATA_ALT_ABILITY, (u8 *)&monData); + SetMonData(&gPlayerParty[0], MON_DATA_ALT_ABILITY, &monData); monData = MOVE_TACKLE; - SetMonData(&gPlayerParty[0], MON_DATA_MOVE1, (u8 *)&monData); + SetMonData(&gPlayerParty[0], MON_DATA_MOVE1, &monData); monData = MOVE_NONE; - SetMonData(&gPlayerParty[0], MON_DATA_MOVE2, (u8 *)&monData); - SetMonData(&gPlayerParty[0], MON_DATA_MOVE3, (u8 *)&monData); - SetMonData(&gPlayerParty[0], MON_DATA_MOVE4, (u8 *)&monData); + SetMonData(&gPlayerParty[0], MON_DATA_MOVE2, &monData); + SetMonData(&gPlayerParty[0], MON_DATA_MOVE3, &monData); + SetMonData(&gPlayerParty[0], MON_DATA_MOVE4, &monData); } bool8 IsStarterInParty(void) diff --git a/src/field/party_menu.c b/src/field/party_menu.c index a4c66d891..a8c57b86d 100644 --- a/src/field/party_menu.c +++ b/src/field/party_menu.c @@ -4457,7 +4457,7 @@ void sub_806F8AC(u8 taskId) ewram1B000.unk261 = 2; sub_806E834(gStringVar4, 1); sp14 += sp0.unk4; - SetMonData(ewram1C000.pokemon, MON_DATA_HP, (u8 *)&sp14); + SetMonData(ewram1C000.pokemon, MON_DATA_HP, &sp14); RemoveBagItem(ewram1C000.unk6, 1); sub_8032638(); gTasks[taskId].func = sub_806FB44; @@ -4478,7 +4478,7 @@ void sub_806FA18(u8 taskId) PlaySE(SE_KAIFUKU); ewram1C000.unkC = 0; gTasks[taskId].data[11] -= gTasks[taskId].data[12]; - SetMonData(ewram1C000.pokemon, MON_DATA_HP, (u8 *)&gTasks[taskId].data[11]); + SetMonData(ewram1C000.pokemon, MON_DATA_HP, &gTasks[taskId].data[11]); SetMonIconAnim(GetMonIconSpriteId(ewram1C000.unk4, ewram01000.unk1), ewram1C000.pokemon); ewram1C000.unk5 = gSprites[ewram01000.unk2].data0; ewram1C000.pokemon = &gPlayerParty[ewram1C000.unk5]; diff --git a/src/field/roamer.c b/src/field/roamer.c index 948828d5e..c45c87601 100644 --- a/src/field/roamer.c +++ b/src/field/roamer.c @@ -173,13 +173,13 @@ void CreateRoamerMonInstance(void) struct Pokemon *mon = &gEnemyParty[0]; struct Roamer *roamer = &gSaveBlock1.roamer; CreateMonWithIVsPersonality(mon, roamer->species, roamer->level, roamer->ivs, roamer->personality); - SetMonData(mon, MON_DATA_STATUS, (u8 *)&roamer->status); - SetMonData(mon, MON_DATA_HP, (u8 *)&roamer->hp); - SetMonData(mon, MON_DATA_COOL, (u8 *)&roamer->cool); - SetMonData(mon, MON_DATA_BEAUTY, (u8 *)&roamer->beauty); - SetMonData(mon, MON_DATA_CUTE, (u8 *)&roamer->cute); - SetMonData(mon, MON_DATA_SMART, (u8 *)&roamer->smart); - SetMonData(mon, MON_DATA_TOUGH, (u8 *)&roamer->tough); + SetMonData(mon, MON_DATA_STATUS, &roamer->status); + SetMonData(mon, MON_DATA_HP, &roamer->hp); + SetMonData(mon, MON_DATA_COOL, &roamer->cool); + SetMonData(mon, MON_DATA_BEAUTY, &roamer->beauty); + SetMonData(mon, MON_DATA_CUTE, &roamer->cute); + SetMonData(mon, MON_DATA_SMART, &roamer->smart); + SetMonData(mon, MON_DATA_TOUGH, &roamer->tough); } bool8 TryStartRoamerEncounter(void) diff --git a/src/pokemon/pokemon_1.c b/src/pokemon/pokemon_1.c index 345a9668b..a0e1d8801 100644 --- a/src/pokemon/pokemon_1.c +++ b/src/pokemon/pokemon_1.c @@ -39,17 +39,17 @@ void ZeroMonData(struct Pokemon *mon) u32 arg; ZeroBoxMonData(&mon->box); arg = 0; - SetMonData(mon, MON_DATA_STATUS, (u8 *)&arg); - SetMonData(mon, MON_DATA_LEVEL, (u8 *)&arg); - SetMonData(mon, MON_DATA_HP, (u8 *)&arg); - SetMonData(mon, MON_DATA_MAX_HP, (u8 *)&arg); - SetMonData(mon, MON_DATA_ATK, (u8 *)&arg); - SetMonData(mon, MON_DATA_DEF, (u8 *)&arg); - SetMonData(mon, MON_DATA_SPEED, (u8 *)&arg); - SetMonData(mon, MON_DATA_SPATK, (u8 *)&arg); - SetMonData(mon, MON_DATA_SPDEF, (u8 *)&arg); + SetMonData(mon, MON_DATA_STATUS, &arg); + SetMonData(mon, MON_DATA_LEVEL, &arg); + SetMonData(mon, MON_DATA_HP, &arg); + SetMonData(mon, MON_DATA_MAX_HP, &arg); + SetMonData(mon, MON_DATA_ATK, &arg); + SetMonData(mon, MON_DATA_DEF, &arg); + SetMonData(mon, MON_DATA_SPEED, &arg); + SetMonData(mon, MON_DATA_SPATK, &arg); + SetMonData(mon, MON_DATA_SPDEF, &arg); arg = 255; - SetMonData(mon, MON_DATA_MAIL, (u8 *)&arg); + SetMonData(mon, MON_DATA_MAIL, &arg); } void ZeroPlayerPartyMons(void) @@ -74,7 +74,7 @@ void CreateMon(struct Pokemon *mon, u16 species, u8 level, u8 fixedIV, u8 hasFix CreateBoxMon(&mon->box, species, level, fixedIV, hasFixedPersonality, fixedPersonality, otIdType, fixedOtId); SetMonData(mon, MON_DATA_LEVEL, &level); arg = 255; - SetMonData(mon, MON_DATA_MAIL, (u8 *)&arg); + SetMonData(mon, MON_DATA_MAIL, &arg); CalculateMonStats(mon); } @@ -92,7 +92,7 @@ void CreateBoxMon(struct BoxPokemon *boxMon, u16 species, u8 level, u8 fixedIV, else personality = Random32(); - SetBoxMonData(boxMon, MON_DATA_PERSONALITY, (u8 *)&personality); + SetBoxMonData(boxMon, MON_DATA_PERSONALITY, &personality); //Determine original trainer ID if (otIdType == 2) //Pokemon cannot be shiny @@ -116,24 +116,24 @@ void CreateBoxMon(struct BoxPokemon *boxMon, u16 species, u8 level, u8 fixedIV, | (gSaveBlock2.playerTrainerId[3] << 24); } - SetBoxMonData(boxMon, MON_DATA_OT_ID, (u8 *)&value); + SetBoxMonData(boxMon, MON_DATA_OT_ID, &value); checksum = CalculateBoxMonChecksum(boxMon); - SetBoxMonData(boxMon, MON_DATA_CHECKSUM, (u8 *)&checksum); + SetBoxMonData(boxMon, MON_DATA_CHECKSUM, &checksum); EncryptBoxMon(boxMon); GetSpeciesName(speciesName, species); SetBoxMonData(boxMon, MON_DATA_NICKNAME, speciesName); SetBoxMonData(boxMon, MON_DATA_LANGUAGE, &gGameLanguage); SetBoxMonData(boxMon, MON_DATA_OT_NAME, gSaveBlock2.playerName); - SetBoxMonData(boxMon, MON_DATA_SPECIES, (u8 *)&species); - SetBoxMonData(boxMon, MON_DATA_EXP, (u8 *)&gExperienceTables[gBaseStats[species].growthRate][level]); + SetBoxMonData(boxMon, MON_DATA_SPECIES, &species); + SetBoxMonData(boxMon, MON_DATA_EXP, &gExperienceTables[gBaseStats[species].growthRate][level]); SetBoxMonData(boxMon, MON_DATA_FRIENDSHIP, &gBaseStats[species].friendship); value = sav1_map_get_name(); - SetBoxMonData(boxMon, MON_DATA_MET_LOCATION, (u8 *)&value); + SetBoxMonData(boxMon, MON_DATA_MET_LOCATION, &value); SetBoxMonData(boxMon, MON_DATA_MET_LEVEL, &level); SetBoxMonData(boxMon, MON_DATA_MET_GAME, &gGameVersion); value = 4; - SetBoxMonData(boxMon, MON_DATA_POKEBALL, (u8 *)&value); + SetBoxMonData(boxMon, MON_DATA_POKEBALL, &value); SetBoxMonData(boxMon, MON_DATA_OT_GENDER, &gSaveBlock2.playerGender); if (fixedIV < 32) @@ -151,26 +151,26 @@ void CreateBoxMon(struct BoxPokemon *boxMon, u16 species, u8 level, u8 fixedIV, value = Random(); iv = value & 0x1F; - SetBoxMonData(boxMon, MON_DATA_HP_IV, (u8 *)&iv); + SetBoxMonData(boxMon, MON_DATA_HP_IV, &iv); iv = (value & 0x3E0) >> 5; - SetBoxMonData(boxMon, MON_DATA_ATK_IV, (u8 *)&iv); + SetBoxMonData(boxMon, MON_DATA_ATK_IV, &iv); iv = (value & 0x7C00) >> 10; - SetBoxMonData(boxMon, MON_DATA_DEF_IV, (u8 *)&iv); + SetBoxMonData(boxMon, MON_DATA_DEF_IV, &iv); value = Random(); iv = value & 0x1F; - SetBoxMonData(boxMon, MON_DATA_SPEED_IV, (u8 *)&iv); + SetBoxMonData(boxMon, MON_DATA_SPEED_IV, &iv); iv = (value & 0x3E0) >> 5; - SetBoxMonData(boxMon, MON_DATA_SPATK_IV, (u8 *)&iv); + SetBoxMonData(boxMon, MON_DATA_SPATK_IV, &iv); iv = (value & 0x7C00) >> 10; - SetBoxMonData(boxMon, MON_DATA_SPDEF_IV, (u8 *)&iv); + SetBoxMonData(boxMon, MON_DATA_SPDEF_IV, &iv); } if (gBaseStats[species].ability2) { value = personality & 1; - SetBoxMonData(boxMon, MON_DATA_ALT_ABILITY, (u8 *)&value); + SetBoxMonData(boxMon, MON_DATA_ALT_ABILITY, &value); } GiveBoxMonInitialMoveset(boxMon); @@ -237,7 +237,7 @@ void CreateMaleMon(struct Pokemon *mon, u16 species, u8 level) void CreateMonWithIVsPersonality(struct Pokemon *mon, u16 species, u8 level, u32 ivs, u32 personality) { CreateMon(mon, species, level, 0, 1, personality, 0, 0); - SetMonData(mon, MON_DATA_IVS, (u8 *)&ivs); + SetMonData(mon, MON_DATA_IVS, &ivs); CalculateMonStats(mon); } @@ -278,7 +278,7 @@ void CreateMonWithEVSpread(struct Pokemon *mon, u16 species, u8 level, u8 fixedI for (i = 0; i < 6; i++) { if (evSpread & temp) - SetMonData(mon, MON_DATA_HP_EV + i, (u8 *)&evAmount); + SetMonData(mon, MON_DATA_HP_EV + i, &evAmount); temp <<= 1; } @@ -297,8 +297,8 @@ void sub_803ADE8(struct Pokemon *mon, struct UnknownPokemonStruct *src) for (i = 0; i < 4; i++) SetMonMoveSlot(mon, src->moves[i], i); - SetMonData(mon, MON_DATA_PP_BONUSES, (u8 *)&src->ppBonuses); - SetMonData(mon, MON_DATA_HELD_ITEM, (u8 *)&src->heldItem); + SetMonData(mon, MON_DATA_PP_BONUSES, &src->ppBonuses); + SetMonData(mon, MON_DATA_HELD_ITEM, &src->heldItem); StringCopy(nickname, src->nickname); @@ -310,13 +310,13 @@ void sub_803ADE8(struct Pokemon *mon, struct UnknownPokemonStruct *src) SetMonData(mon, MON_DATA_LANGUAGE, &language); StripExtCtrlCodes(nickname); SetMonData(mon, MON_DATA_NICKNAME, nickname); - SetMonData(mon, MON_DATA_FRIENDSHIP, (u8 *)&src->friendship); - SetMonData(mon, MON_DATA_HP_EV, (u8 *)&src->hpEV); - SetMonData(mon, MON_DATA_ATK_EV, (u8 *)&src->attackEV); - SetMonData(mon, MON_DATA_DEF_EV, (u8 *)&src->defenseEV); - SetMonData(mon, MON_DATA_SPD_EV, (u8 *)&src->speedEV); - SetMonData(mon, MON_DATA_SPATK_EV, (u8 *)&src->spAttackEV); - SetMonData(mon, MON_DATA_SPDEF_EV, (u8 *)&src->spDefenseEV); + SetMonData(mon, MON_DATA_FRIENDSHIP, &src->friendship); + SetMonData(mon, MON_DATA_HP_EV, &src->hpEV); + SetMonData(mon, MON_DATA_ATK_EV, &src->attackEV); + SetMonData(mon, MON_DATA_DEF_EV, &src->defenseEV); + SetMonData(mon, MON_DATA_SPD_EV, &src->speedEV); + SetMonData(mon, MON_DATA_SPATK_EV, &src->spAttackEV); + SetMonData(mon, MON_DATA_SPDEF_EV, &src->spDefenseEV); value = src->altAbility; SetMonData(mon, MON_DATA_ALT_ABILITY, &value); value = src->hpIV; @@ -401,7 +401,7 @@ u16 CalculateBoxMonChecksum(struct BoxPokemon *boxMon) s32 n = (((2 * baseStat + iv + ev / 4) * level) / 100) + 5; \ u8 nature = GetNature(mon); \ n = nature_stat_mod(nature, n, statIndex); \ - SetMonData(mon, field, (u8 *)&n); \ + SetMonData(mon, field, &n); \ } void CalculateMonStats(struct Pokemon *mon) @@ -424,7 +424,7 @@ void CalculateMonStats(struct Pokemon *mon) s32 level = GetLevelFromMonExp(mon); s32 newMaxHP; - SetMonData(mon, MON_DATA_LEVEL, (u8 *)&level); + SetMonData(mon, MON_DATA_LEVEL, &level); if (species == SPECIES_SHEDINJA) { @@ -440,7 +440,7 @@ void CalculateMonStats(struct Pokemon *mon) if (unk_2000000[0x160FA] == 0) unk_2000000[0x160FA] = 1; - SetMonData(mon, MON_DATA_MAX_HP, (u8 *)&newMaxHP); + SetMonData(mon, MON_DATA_MAX_HP, &newMaxHP); CALC_STAT(baseAttack, attackIV, attackEV, 1, MON_DATA_ATK) CALC_STAT(baseDefense, defenseIV, defenseEV, 2, MON_DATA_DEF) @@ -465,18 +465,18 @@ void CalculateMonStats(struct Pokemon *mon) return; } - SetMonData(mon, MON_DATA_HP, (u8 *)¤tHP); + SetMonData(mon, MON_DATA_HP, ¤tHP); } void sub_803B4B4(const struct BoxPokemon *src, struct Pokemon *dest) { u32 value = 0; dest->box = *src; - SetMonData(dest, MON_DATA_STATUS, (u8 *)&value); - SetMonData(dest, MON_DATA_HP, (u8 *)&value); - SetMonData(dest, MON_DATA_MAX_HP, (u8 *)&value); + SetMonData(dest, MON_DATA_STATUS, &value); + SetMonData(dest, MON_DATA_HP, &value); + SetMonData(dest, MON_DATA_MAX_HP, &value); value = 255; - SetMonData(dest, MON_DATA_MAIL, (u8 *)&value); + SetMonData(dest, MON_DATA_MAIL, &value); CalculateMonStats(dest); } @@ -517,7 +517,7 @@ u16 GiveMoveToBoxMon(struct BoxPokemon *boxMon, u16 move) u16 existingMove = GetBoxMonData(boxMon, MON_DATA_MOVE1 + i, NULL); if (!existingMove) { - SetBoxMonData(boxMon, MON_DATA_MOVE1 + i, (u8 *)&move); + SetBoxMonData(boxMon, MON_DATA_MOVE1 + i, &move); SetBoxMonData(boxMon, MON_DATA_PP1 + i, &gBattleMoves[move].pp); return move; } @@ -546,7 +546,7 @@ u16 GiveMoveToBattleMon(struct BattlePokemon *mon, u16 move) void SetMonMoveSlot(struct Pokemon *mon, u16 move, u8 slot) { - SetMonData(mon, MON_DATA_MOVE1 + slot, (u8 *)&move); + SetMonData(mon, MON_DATA_MOVE1 + slot, &move); SetMonData(mon, MON_DATA_PP1 + slot, &gBattleMoves[move].pp); } @@ -636,7 +636,7 @@ void DeleteFirstMoveAndGiveMoveToMon(struct Pokemon *mon, u16 move) for (i = 0; i < 4; i++) { - SetMonData(mon, MON_DATA_MOVE1 + i, (u8 *)&moves[i]); + SetMonData(mon, MON_DATA_MOVE1 + i, &moves[i]); SetMonData(mon, MON_DATA_PP1 + i, &pp[i]); } @@ -663,7 +663,7 @@ void DeleteFirstMoveAndGiveMoveToBoxMon(struct BoxPokemon *boxMon, u16 move) for (i = 0; i < 4; i++) { - SetBoxMonData(boxMon, MON_DATA_MOVE1 + i, (u8 *)&moves[i]); + SetBoxMonData(boxMon, MON_DATA_MOVE1 + i, &moves[i]); SetBoxMonData(boxMon, MON_DATA_PP1 + i, &pp[i]); } diff --git a/src/pokemon/pokemon_2.c b/src/pokemon/pokemon_2.c index eaa0b86b8..285ecfe6e 100644 --- a/src/pokemon/pokemon_2.c +++ b/src/pokemon/pokemon_2.c @@ -631,8 +631,9 @@ u32 GetBoxMonData(struct BoxPokemon *boxMon, s32 field, u8 *data) #define SET16(lhs) (lhs) = data[0] + (data[1] << 8) #define SET32(lhs) (lhs) = data[0] + (data[1] << 8) + (data[2] << 16) + (data[3] << 24) -void SetMonData(struct Pokemon *mon, s32 field, const u8 *data) +void SetMonData(struct Pokemon *mon, s32 field, const void *dataArg) { + u8 *data = (u8 *)dataArg; switch (field) { case MON_DATA_STATUS: @@ -673,8 +674,9 @@ void SetMonData(struct Pokemon *mon, s32 field, const u8 *data) } } -void SetBoxMonData(struct BoxPokemon *boxMon, s32 field, const u8 *data) +void SetBoxMonData(struct BoxPokemon *boxMon, s32 field, const void *dataArg) { + u8 *data = (u8 *)dataArg; struct PokemonSubstruct0 *substruct0 = NULL; struct PokemonSubstruct1 *substruct1 = NULL; struct PokemonSubstruct2 *substruct2 = NULL; @@ -1077,14 +1079,14 @@ void CreateSecretBaseEnemyParty(struct SecretBaseRecord *secretBaseRecord) 2, 0); - SetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, (u8 *)&gSecretBaseRecord.partyHeldItems[i]); + SetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, &gSecretBaseRecord.partyHeldItems[i]); for (j = 0; j < 6; j++) SetMonData(&gEnemyParty[i], MON_DATA_HP_EV + j, &gSecretBaseRecord.partyEVs[i]); for (j = 0; j < 4; j++) { - SetMonData(&gEnemyParty[i], MON_DATA_MOVE1 + j, (u8 *)&gSecretBaseRecord.partyMoves[i * 4 + j]); + SetMonData(&gEnemyParty[i], MON_DATA_MOVE1 + j, &gSecretBaseRecord.partyMoves[i * 4 + j]); SetMonData(&gEnemyParty[i], MON_DATA_PP1 + j, &gBattleMoves[gSecretBaseRecord.partyMoves[i * 4 + j]].pp); } } diff --git a/src/pokemon/pokemon_3.c b/src/pokemon/pokemon_3.c index f3d0bee03..e9fb30415 100644 --- a/src/pokemon/pokemon_3.c +++ b/src/pokemon/pokemon_3.c @@ -68,7 +68,7 @@ bool8 HealStatusConditions(struct Pokemon *mon, u32 unused, u32 healMask, u8 bat if (status & healMask) { status &= ~healMask; - SetMonData(mon, MON_DATA_STATUS, (u8 *)&status); + SetMonData(mon, MON_DATA_STATUS, &status); if (gMain.inBattle && battleId != 4) gBattleMons[battleId].status1 &= ~healMask; return FALSE; @@ -355,7 +355,7 @@ u16 GetEvolutionTargetSpecies(struct Pokemon *mon, u8 type, u16 evolutionItem) if (gEvolutionTable[species].evolutions[i].param == heldItem) { heldItem = 0; - SetMonData(mon, MON_DATA_HELD_ITEM, (u8 *)&heldItem); + SetMonData(mon, MON_DATA_HELD_ITEM, &heldItem); targetSpecies = gEvolutionTable[species].evolutions[i].targetSpecies; } break; @@ -695,7 +695,7 @@ void AdjustFriendship(struct Pokemon *mon, u8 event) friendship = 0; if (friendship > 255) friendship = 255; - SetMonData(mon, MON_DATA_FRIENDSHIP, (u8 *)&friendship); + SetMonData(mon, MON_DATA_FRIENDSHIP, &friendship); } } } @@ -1299,16 +1299,16 @@ void SetWildMonHeldItem(void) u16 species = GetMonData(&gEnemyParty[0], MON_DATA_SPECIES, 0); if (gBaseStats[species].item1 == gBaseStats[species].item2) { - SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, (u8 *)&gBaseStats[species].item1); + SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, &gBaseStats[species].item1); return; } if (rnd > 44) { if (rnd <= 94) - SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, (u8 *)&gBaseStats[species].item1); + SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, &gBaseStats[species].item1); else - SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, (u8 *)&gBaseStats[species].item2); + SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, &gBaseStats[species].item2); } } } -- cgit v1.2.3 From 4fb48ddb53d9782538c447a795099d368d1b361d Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 24 Oct 2017 21:51:57 -0400 Subject: Fix data layout in gUnknown_083D1374 --- src/field/secret_base.c | 72 +++++++++++++++++-------------------------------- 1 file changed, 24 insertions(+), 48 deletions(-) (limited to 'src') diff --git a/src/field/secret_base.c b/src/field/secret_base.c index f2ed6adb6..d7c4f5917 100644 --- a/src/field/secret_base.c +++ b/src/field/secret_base.c @@ -72,54 +72,30 @@ const struct const u8 gUnknown_083D1374[] = { - MAP_ID_SECRET_BASE_RED_CAVE1, 0, - MAP_ID_SECRET_BASE_BROWN_CAVE1, 3, - MAP_ID_SECRET_BASE_RED_CAVE2, 0, - MAP_ID_SECRET_BASE_SHRUB1, 9, - MAP_ID_SECRET_BASE_RED_CAVE3, 0, - MAP_ID_SECRET_BASE_BROWN_CAVE1, 3, - MAP_ID_SECRET_BASE_RED_CAVE4, 0, - MAP_ID_SECRET_BASE_BROWN_CAVE2, 13, - MAP_ID_SECRET_BASE_BROWN_CAVE1, 0, - MAP_ID_SECRET_BASE_BLUE_CAVE1, 3, - MAP_ID_SECRET_BASE_BROWN_CAVE2, 0, - MAP_ID_SECRET_BASE_YELLOW_CAVE2, 2, - MAP_ID_SECRET_BASE_BROWN_CAVE3, 0, - MAP_ID_SECRET_BASE_BROWN_CAVE3, 4, - MAP_ID_SECRET_BASE_BROWN_CAVE4, 0, - MAP_ID_SECRET_BASE_BROWN_CAVE1, 2, - MAP_ID_SECRET_BASE_BLUE_CAVE1, 0, - MAP_ID_SECRET_BASE_BROWN_CAVE1, 3, - MAP_ID_SECRET_BASE_BLUE_CAVE2, 0, - MAP_ID_SECRET_BASE_BROWN_CAVE1, 2, - MAP_ID_SECRET_BASE_BLUE_CAVE3, 0, - MAP_ID_SECRET_BASE_YELLOW_CAVE1, 15, - MAP_ID_SECRET_BASE_BLUE_CAVE4, 0, - MAP_ID_SECRET_BASE_YELLOW_CAVE1, 14, - MAP_ID_SECRET_BASE_YELLOW_CAVE1, 0, - MAP_ID_SECRET_BASE_YELLOW_CAVE2, 3, - MAP_ID_SECRET_BASE_YELLOW_CAVE2, 0, - MAP_ID_SECRET_BASE_BLUE_CAVE2, 7, - MAP_ID_SECRET_BASE_YELLOW_CAVE3, 0, - MAP_ID_SECRET_BASE_YELLOW_CAVE1, 6, - MAP_ID_SECRET_BASE_YELLOW_CAVE4, 0, - MAP_ID_SECRET_BASE_SHRUB1, 9, - MAP_ID_SECRET_BASE_TREE1, 0, - MAP_ID_SECRET_BASE_BLUE_CAVE1, 3, - MAP_ID_SECRET_BASE_TREE2, 0, - MAP_ID_SECRET_BASE_SHRUB1, 6, - MAP_ID_SECRET_BASE_TREE3, 0, - MAP_ID_SECRET_BASE_YELLOW_CAVE3, 3, - MAP_ID_SECRET_BASE_TREE4, 0, - MAP_ID_SECRET_BASE_TREE1, 10, - MAP_ID_SECRET_BASE_SHRUB1, 0, - MAP_ID_SECRET_BASE_YELLOW_CAVE1, 3, - MAP_ID_SECRET_BASE_SHRUB2, 0, - MAP_ID_SECRET_BASE_BROWN_CAVE1, 2, - MAP_ID_SECRET_BASE_SHRUB3, 0, - MAP_ID_SECRET_BASE_BROWN_CAVE2, 8, - MAP_ID_SECRET_BASE_SHRUB4, 0, - MAP_ID_SECRET_BASE_YELLOW_CAVE2, 6 + MAP_ID_SECRET_BASE_RED_CAVE1, 0, 1, 3, + MAP_ID_SECRET_BASE_RED_CAVE2, 0, 5, 9, + MAP_ID_SECRET_BASE_RED_CAVE3, 0, 1, 3, + MAP_ID_SECRET_BASE_RED_CAVE4, 0, 7, 13, + MAP_ID_SECRET_BASE_BROWN_CAVE1, 0, 2, 3, + MAP_ID_SECRET_BASE_BROWN_CAVE2, 0, 9, 2, + MAP_ID_SECRET_BASE_BROWN_CAVE3, 0, 13, 4, + MAP_ID_SECRET_BASE_BROWN_CAVE4, 0, 1, 2, + MAP_ID_SECRET_BASE_BLUE_CAVE1, 0, 1, 3, + MAP_ID_SECRET_BASE_BLUE_CAVE2, 0, 1, 2, + MAP_ID_SECRET_BASE_BLUE_CAVE3, 0, 3, 15, + MAP_ID_SECRET_BASE_BLUE_CAVE4, 0, 3, 14, + MAP_ID_SECRET_BASE_YELLOW_CAVE1, 0, 9, 3, + MAP_ID_SECRET_BASE_YELLOW_CAVE2, 0, 8, 7, + MAP_ID_SECRET_BASE_YELLOW_CAVE3, 0, 3, 6, + MAP_ID_SECRET_BASE_YELLOW_CAVE4, 0, 5, 9, + MAP_ID_SECRET_BASE_TREE1, 0, 2, 3, + MAP_ID_SECRET_BASE_TREE2, 0, 5, 6, + MAP_ID_SECRET_BASE_TREE3, 0, 15, 3, + MAP_ID_SECRET_BASE_TREE4, 0, 4, 10, + MAP_ID_SECRET_BASE_SHRUB1, 0, 3, 3, + MAP_ID_SECRET_BASE_SHRUB2, 0, 1, 2, + MAP_ID_SECRET_BASE_SHRUB3, 0, 7, 8, + MAP_ID_SECRET_BASE_SHRUB4, 0, 9, 6 }; const struct MenuAction2 gUnknown_083D13D4[] = { -- cgit v1.2.3 From d411d3b4d4b9787dd510e746449dc838950d1720 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 24 Oct 2017 22:40:34 -0400 Subject: match sub_80BBDD0 --- src/field/secret_base.c | 281 +++++------------------------------------------- 1 file changed, 25 insertions(+), 256 deletions(-) (limited to 'src') diff --git a/src/field/secret_base.c b/src/field/secret_base.c index d7c4f5917..4c749c4c7 100644 --- a/src/field/secret_base.c +++ b/src/field/secret_base.c @@ -431,17 +431,15 @@ void sub_80BBCCC(u8 flagIn) } } -#ifdef NONMATCHING -// The only nonmatching property of this function is that the implicit variables &gSaveBlock1 and &roomdecor[decidx] -// are stored in the wrong registers. void sub_80BBDD0(void) { u8 *roomdecor; u8 *roomdecorpos; - u8 ndecor; u8 decidx; u8 objid = 0; u8 metatile; + u8 permission; + u8 ndecor; u16 curBase = VarGet(VAR_0x4054); if (!CurrentMapIsSecretBase()) { roomdecor = gSaveBlock1.playerRoomDecor; @@ -453,262 +451,33 @@ void sub_80BBDD0(void) ndecor = 16; } for (decidx=0; decidxmapObjectCount; objid++) { - if (gMapHeader.events->mapObjects[objid].flagId == gSpecialVar_0x8004 + 0xAE) - break; - } - if (objid == gMapHeader.events->mapObjectCount) - continue; - gSpecialVar_0x8006 = roomdecorpos[decidx] >> 4; - gSpecialVar_0x8007 = roomdecorpos[decidx] & 0xF; - metatile = MapGridGetMetatileBehaviorAt(gSpecialVar_0x8006 + 7, gSpecialVar_0x8007 + 7); - if (sub_80572D8(metatile) == TRUE || sub_80572EC(metatile) == TRUE) { - gScriptResult = gMapHeader.events->mapObjects[objid].graphicsId + VAR_0x3F20; - VarSet(gScriptResult, gDecorations[roomdecor[decidx]].tiles[0]); - gScriptResult = gMapHeader.events->mapObjects[objid].localId; - FlagClear(gSpecialVar_0x8004 + 0xAE); - show_sprite(gScriptResult, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup); - sub_805C0F8(gScriptResult, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, gSpecialVar_0x8006, gSpecialVar_0x8007); - sub_805C78C(gScriptResult, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup); - gSpecialVar_0x8004 ++; + if (roomdecor[decidx] != DECOR_NONE) { + permission = gDecorations[roomdecor[decidx]].permission; + if (permission == DECORPERM_SOLID_MAT) + { + for (objid=0; objidmapObjectCount; objid++) { + if (gMapHeader.events->mapObjects[objid].flagId == gSpecialVar_0x8004 + 0xAE) + break; + } + if (objid == gMapHeader.events->mapObjectCount) + continue; + gSpecialVar_0x8006 = roomdecorpos[decidx] >> 4; + gSpecialVar_0x8007 = roomdecorpos[decidx] & 0xF; + metatile = MapGridGetMetatileBehaviorAt(gSpecialVar_0x8006 + 7, gSpecialVar_0x8007 + 7); + if (sub_80572D8(metatile) == TRUE || sub_80572EC(metatile) == TRUE) { + gScriptResult = gMapHeader.events->mapObjects[objid].graphicsId + VAR_0x3F20; + VarSet(gScriptResult, gDecorations[roomdecor[decidx]].tiles[0]); + gScriptResult = gMapHeader.events->mapObjects[objid].localId; + FlagClear(gSpecialVar_0x8004 + 0xAE); + show_sprite(gScriptResult, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup); + sub_805C0F8(gScriptResult, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, gSpecialVar_0x8006, gSpecialVar_0x8007); + sub_805C78C(gScriptResult, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup); + gSpecialVar_0x8004 ++; + } } } } } -#else -__attribute__((naked)) -void sub_80BBDD0(void) -{ - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r10\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5-r7}\n\ - sub sp, 0x14\n\ - ldr r0, _080BBE00 @ =0x00004054\n\ - bl VarGet\n\ - lsls r0, 16\n\ - lsrs r4, r0, 16\n\ - bl CurrentMapIsSecretBase\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - bne _080BBE08\n\ - ldr r0, _080BBE04 @ =gSaveBlock1 + 0x2688\n\ - str r0, [sp, 0x4]\n\ - adds r0, 0xC\n\ - str r0, [sp, 0x8]\n\ - movs r1, 0xC\n\ - str r1, [sp, 0xC]\n\ - b _080BBE1E\n\ - .align 2, 0\n\ -_080BBE00: .4byte 0x00004054\n\ -_080BBE04: .4byte gSaveBlock1 + 0x2688\n\ -_080BBE08:\n\ - lsls r1, r4, 2\n\ - adds r1, r4\n\ - lsls r1, 5\n\ - ldr r0, _080BBF7C @ =gSaveBlock1 + 0x1A1A\n\ - adds r2, r1, r0\n\ - str r2, [sp, 0x4]\n\ - adds r0, 0x10\n\ - adds r1, r0\n\ - str r1, [sp, 0x8]\n\ - movs r3, 0x10\n\ - str r3, [sp, 0xC]\n\ -_080BBE1E:\n\ - movs r6, 0\n\ - ldr r4, [sp, 0xC]\n\ - cmp r6, r4\n\ - bcc _080BBE28\n\ - b _080BBF6C\n\ -_080BBE28:\n\ - ldr r5, _080BBF80 @ =gSaveBlock1\n\ - mov r10, r5\n\ -_080BBE2C:\n\ - ldr r1, [sp, 0x4]\n\ - adds r0, r1, r6\n\ - ldrb r1, [r0]\n\ - mov r9, r0\n\ - adds r2, r6, 0x1\n\ - str r2, [sp, 0x10]\n\ - cmp r1, 0\n\ - bne _080BBE3E\n\ - b _080BBF5E\n\ -_080BBE3E:\n\ - ldrb r0, [r0]\n\ - lsls r0, 5\n\ - ldr r3, _080BBF84 @ =gDecorations\n\ - adds r0, r3\n\ - ldrb r0, [r0, 0x11]\n\ - cmp r0, 0x4\n\ - beq _080BBE4E\n\ - b _080BBF5E\n\ -_080BBE4E:\n\ - movs r5, 0\n\ - ldr r0, _080BBF88 @ =gMapHeader\n\ - ldr r2, [r0, 0x4]\n\ - ldrb r3, [r2]\n\ - mov r8, r0\n\ - cmp r5, r3\n\ - bcs _080BBE8E\n\ - ldr r0, [r2, 0x4]\n\ - ldrh r1, [r0, 0x14]\n\ - ldr r4, _080BBF8C @ =gSpecialVar_0x8004\n\ - ldrh r0, [r4]\n\ - adds r0, 0xAE\n\ - adds r7, r4, 0\n\ - cmp r1, r0\n\ - beq _080BBE8E\n\ - adds r4, r2, 0\n\ - adds r2, r3, 0\n\ -_080BBE70:\n\ - adds r0, r5, 0x1\n\ - lsls r0, 24\n\ - lsrs r5, r0, 24\n\ - cmp r5, r2\n\ - bcs _080BBE8E\n\ - ldr r1, [r4, 0x4]\n\ - lsls r0, r5, 1\n\ - adds r0, r5\n\ - lsls r0, 3\n\ - adds r0, r1\n\ - ldrh r1, [r0, 0x14]\n\ - ldrh r0, [r7]\n\ - adds r0, 0xAE\n\ - cmp r1, r0\n\ - bne _080BBE70\n\ -_080BBE8E:\n\ - mov r1, r8\n\ - ldr r0, [r1, 0x4]\n\ - ldrb r0, [r0]\n\ - cmp r5, r0\n\ - beq _080BBF5E\n\ - ldr r7, _080BBF90 @ =gSpecialVar_0x8006\n\ - ldr r2, [sp, 0x8]\n\ - adds r1, r2, r6\n\ - ldrb r0, [r1]\n\ - lsrs r0, 4\n\ - strh r0, [r7]\n\ - ldr r6, _080BBF94 @ =gSpecialVar_0x8007\n\ - ldrb r1, [r1]\n\ - movs r0, 0xF\n\ - ands r0, r1\n\ - strh r0, [r6]\n\ - ldrh r0, [r7]\n\ - adds r0, 0x7\n\ - ldrh r1, [r6]\n\ - adds r1, 0x7\n\ - bl MapGridGetMetatileBehaviorAt\n\ - lsls r0, 24\n\ - lsrs r4, r0, 24\n\ - adds r0, r4, 0\n\ - bl sub_80572D8\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - cmp r0, 0x1\n\ - beq _080BBEDA\n\ - adds r0, r4, 0\n\ - bl sub_80572EC\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - cmp r0, 0x1\n\ - bne _080BBF5E\n\ -_080BBEDA:\n\ - mov r3, r8\n\ - ldr r0, [r3, 0x4]\n\ - ldr r1, [r0, 0x4]\n\ - lsls r4, r5, 1\n\ - adds r4, r5\n\ - lsls r4, 3\n\ - adds r1, r4, r1\n\ - ldr r5, _080BBF98 @ =0x00003f20\n\ - adds r0, r5, 0\n\ - ldrb r1, [r1, 0x1]\n\ - adds r0, r1\n\ - ldr r1, _080BBF9C @ =gScriptResult\n\ - strh r0, [r1]\n\ - ldrh r0, [r1]\n\ - mov r2, r9\n\ - ldrb r1, [r2]\n\ - lsls r1, 5\n\ - ldr r3, _080BBFA0 @ =gDecorations + 0x1C\n\ - adds r1, r3\n\ - ldr r1, [r1]\n\ - ldrh r1, [r1]\n\ - bl VarSet\n\ - mov r5, r8\n\ - ldr r0, [r5, 0x4]\n\ - ldr r0, [r0, 0x4]\n\ - adds r4, r0\n\ - ldrb r0, [r4]\n\ - ldr r1, _080BBF9C @ =gScriptResult\n\ - strh r0, [r1]\n\ - ldr r2, _080BBF8C @ =gSpecialVar_0x8004\n\ - ldrh r0, [r2]\n\ - adds r0, 0xAE\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - bl FlagClear\n\ - ldr r3, _080BBF9C @ =gScriptResult\n\ - ldrb r0, [r3]\n\ - mov r4, r10\n\ - ldrb r1, [r4, 0x5]\n\ - ldrb r2, [r4, 0x4]\n\ - bl show_sprite\n\ - ldr r5, _080BBF9C @ =gScriptResult\n\ - ldrb r0, [r5]\n\ - ldrb r1, [r4, 0x5]\n\ - ldrb r2, [r4, 0x4]\n\ - movs r4, 0\n\ - ldrsh r3, [r7, r4]\n\ - movs r5, 0\n\ - ldrsh r4, [r6, r5]\n\ - str r4, [sp]\n\ - bl sub_805C0F8\n\ - ldr r1, _080BBF9C @ =gScriptResult\n\ - ldrb r0, [r1]\n\ - mov r2, r10\n\ - ldrb r1, [r2, 0x5]\n\ - ldrb r2, [r2, 0x4]\n\ - bl sub_805C78C\n\ - ldr r3, _080BBF8C @ =gSpecialVar_0x8004\n\ - ldrh r0, [r3]\n\ - adds r0, 0x1\n\ - strh r0, [r3]\n\ -_080BBF5E:\n\ - ldr r4, [sp, 0x10]\n\ - lsls r0, r4, 24\n\ - lsrs r6, r0, 24\n\ - ldr r5, [sp, 0xC]\n\ - cmp r6, r5\n\ - bcs _080BBF6C\n\ - b _080BBE2C\n\ -_080BBF6C:\n\ - add sp, 0x14\n\ - pop {r3-r5}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - mov r10, r5\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_080BBF7C: .4byte gSaveBlock1 + 0x1A1A\n\ -_080BBF80: .4byte gSaveBlock1\n\ -_080BBF84: .4byte gDecorations\n\ -_080BBF88: .4byte gMapHeader\n\ -_080BBF8C: .4byte gSpecialVar_0x8004\n\ -_080BBF90: .4byte gSpecialVar_0x8006\n\ -_080BBF94: .4byte gSpecialVar_0x8007\n\ -_080BBF98: .4byte 0x00003f20\n\ -_080BBF9C: .4byte gScriptResult\n\ -_080BBFA0: .4byte gDecorations + 0x1C\n\ -.syntax divided\n"); -} -#endif void sub_80BBFA4(void) { -- cgit v1.2.3 From 91f6d8118788d18b258873a062da1318569eaf0f Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Thu, 26 Oct 2017 13:43:08 -0500 Subject: also fix ambiguous MON_DATA_SPD_EV and MON_DATA_SPD2 constants --- src/battle/battle_controller_linkopponent.c | 4 ++-- src/battle/battle_controller_linkpartner.c | 4 ++-- src/battle/battle_controller_opponent.c | 4 ++-- src/battle/battle_controller_player.c | 4 ++-- src/battle/battle_controller_wally.c | 4 ++-- src/field/secret_base.c | 2 +- src/pokemon/pokemon_1.c | 6 +++--- src/pokemon/pokemon_2.c | 4 ++-- src/pokemon/pokemon_data.c | 2 +- 9 files changed, 17 insertions(+), 17 deletions(-) (limited to 'src') diff --git a/src/battle/battle_controller_linkopponent.c b/src/battle/battle_controller_linkopponent.c index 83b690719..edfd7e675 100644 --- a/src/battle/battle_controller_linkopponent.c +++ b/src/battle/battle_controller_linkopponent.c @@ -713,7 +713,7 @@ u32 dp01_getattr_by_ch1_for_player_pokemon__(u8 a, u8 *buffer) size = 1; break; case 22: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_SPD_EV); + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_SPEED_EV); size = 1; break; case 23: @@ -1019,7 +1019,7 @@ void sub_8038900(u8 a) SetMonData(&gEnemyParty[a], MON_DATA_DEF_EV, &gBattleBufferA[gActiveBank][3]); break; case 22: - SetMonData(&gEnemyParty[a], MON_DATA_SPD_EV, &gBattleBufferA[gActiveBank][3]); + SetMonData(&gEnemyParty[a], MON_DATA_SPEED_EV, &gBattleBufferA[gActiveBank][3]); break; case 23: SetMonData(&gEnemyParty[a], MON_DATA_SPATK_EV, &gBattleBufferA[gActiveBank][3]); diff --git a/src/battle/battle_controller_linkpartner.c b/src/battle/battle_controller_linkpartner.c index ca20f6262..335ebcb12 100644 --- a/src/battle/battle_controller_linkpartner.c +++ b/src/battle/battle_controller_linkpartner.c @@ -669,7 +669,7 @@ u32 dp01_getattr_by_ch1_for_player_pokemon(u8 a, u8 *buffer) size = 1; break; case 22: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SPD_EV); + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SPEED_EV); size = 1; break; case 23: @@ -976,7 +976,7 @@ void sub_811EC68(u8 a) SetMonData(&gPlayerParty[a], MON_DATA_DEF_EV, &gBattleBufferA[gActiveBank][3]); break; case 22: - SetMonData(&gPlayerParty[a], MON_DATA_SPD_EV, &gBattleBufferA[gActiveBank][3]); + SetMonData(&gPlayerParty[a], MON_DATA_SPEED_EV, &gBattleBufferA[gActiveBank][3]); break; case 23: SetMonData(&gPlayerParty[a], MON_DATA_SPATK_EV, &gBattleBufferA[gActiveBank][3]); diff --git a/src/battle/battle_controller_opponent.c b/src/battle/battle_controller_opponent.c index cf90d5817..d03ef2967 100644 --- a/src/battle/battle_controller_opponent.c +++ b/src/battle/battle_controller_opponent.c @@ -677,7 +677,7 @@ u32 sub_8033598(u8 a, u8 *buffer) size = 1; break; case 22: - buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_SPD_EV); + buffer[0] = GetMonData(&gEnemyParty[a], MON_DATA_SPEED_EV); size = 1; break; case 23: @@ -991,7 +991,7 @@ void sub_8033E24(u8 a) SetMonData(&gEnemyParty[a], MON_DATA_DEF_EV, &gBattleBufferA[gActiveBank][3]); break; case 22: - SetMonData(&gEnemyParty[a], MON_DATA_SPD_EV, &gBattleBufferA[gActiveBank][3]); + SetMonData(&gEnemyParty[a], MON_DATA_SPEED_EV, &gBattleBufferA[gActiveBank][3]); break; case 23: SetMonData(&gEnemyParty[a], MON_DATA_SPATK_EV, &gBattleBufferA[gActiveBank][3]); diff --git a/src/battle/battle_controller_player.c b/src/battle/battle_controller_player.c index dd94b2f4b..7f5c6c490 100644 --- a/src/battle/battle_controller_player.c +++ b/src/battle/battle_controller_player.c @@ -1849,7 +1849,7 @@ u32 dp01_getattr_by_ch1_for_player_pokemon_(u8 a, u8 *buffer) size = 1; break; case 22: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SPD_EV); + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SPEED_EV); size = 1; break; case 23: @@ -2164,7 +2164,7 @@ void dp01_setattr_by_ch1_for_player_pokemon(u8 a) SetMonData(&gPlayerParty[a], MON_DATA_DEF_EV, &gBattleBufferA[gActiveBank][3]); break; case 22: - SetMonData(&gPlayerParty[a], MON_DATA_SPD_EV, &gBattleBufferA[gActiveBank][3]); + SetMonData(&gPlayerParty[a], MON_DATA_SPEED_EV, &gBattleBufferA[gActiveBank][3]); break; case 23: SetMonData(&gPlayerParty[a], MON_DATA_SPATK_EV, &gBattleBufferA[gActiveBank][3]); diff --git a/src/battle/battle_controller_wally.c b/src/battle/battle_controller_wally.c index 97c78ecd8..3531c1771 100644 --- a/src/battle/battle_controller_wally.c +++ b/src/battle/battle_controller_wally.c @@ -645,7 +645,7 @@ u32 sub_8137A84(u8 a, u8 *buffer) size = 1; break; case 22: - buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SPD_EV); + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SPEED_EV); size = 1; break; case 23: @@ -951,7 +951,7 @@ void sub_8138294(u8 a) SetMonData(&gPlayerParty[a], MON_DATA_DEF_EV, &gBattleBufferA[gActiveBank][3]); break; case 22: - SetMonData(&gPlayerParty[a], MON_DATA_SPD_EV, &gBattleBufferA[gActiveBank][3]); + SetMonData(&gPlayerParty[a], MON_DATA_SPEED_EV, &gBattleBufferA[gActiveBank][3]); break; case 23: SetMonData(&gPlayerParty[a], MON_DATA_SPATK_EV, &gBattleBufferA[gActiveBank][3]); diff --git a/src/field/secret_base.c b/src/field/secret_base.c index 4c749c4c7..2bc94f118 100644 --- a/src/field/secret_base.c +++ b/src/field/secret_base.c @@ -596,7 +596,7 @@ u8 sub_80BC298(struct Pokemon *mon) { // 80bc298 u16 evsum = GetMonData(mon, MON_DATA_HP_EV); evsum += GetMonData(mon, MON_DATA_ATK_EV); evsum += GetMonData(mon, MON_DATA_DEF_EV); - evsum += GetMonData(mon, MON_DATA_SPD_EV); + evsum += GetMonData(mon, MON_DATA_SPEED_EV); evsum += GetMonData(mon, MON_DATA_SPATK_EV); evsum += GetMonData(mon, MON_DATA_SPDEF_EV); return (u8)(evsum / 6); diff --git a/src/pokemon/pokemon_1.c b/src/pokemon/pokemon_1.c index 345a9668b..204baddbf 100644 --- a/src/pokemon/pokemon_1.c +++ b/src/pokemon/pokemon_1.c @@ -314,7 +314,7 @@ void sub_803ADE8(struct Pokemon *mon, struct UnknownPokemonStruct *src) SetMonData(mon, MON_DATA_HP_EV, (u8 *)&src->hpEV); SetMonData(mon, MON_DATA_ATK_EV, (u8 *)&src->attackEV); SetMonData(mon, MON_DATA_DEF_EV, (u8 *)&src->defenseEV); - SetMonData(mon, MON_DATA_SPD_EV, (u8 *)&src->speedEV); + SetMonData(mon, MON_DATA_SPEED_EV, (u8 *)&src->speedEV); SetMonData(mon, MON_DATA_SPATK_EV, (u8 *)&src->spAttackEV); SetMonData(mon, MON_DATA_SPDEF_EV, (u8 *)&src->spDefenseEV); value = src->altAbility; @@ -356,7 +356,7 @@ void sub_803AF78(struct Pokemon *mon, struct UnknownPokemonStruct *dest) dest->hpEV = GetMonData(mon, MON_DATA_HP_EV, NULL); dest->attackEV = GetMonData(mon, MON_DATA_ATK_EV, NULL); dest->defenseEV = GetMonData(mon, MON_DATA_DEF_EV, NULL); - dest->speedEV = GetMonData(mon, MON_DATA_SPD_EV, NULL); + dest->speedEV = GetMonData(mon, MON_DATA_SPEED_EV, NULL); dest->spAttackEV = GetMonData(mon, MON_DATA_SPATK_EV, NULL); dest->spDefenseEV = GetMonData(mon, MON_DATA_SPDEF_EV, NULL); dest->friendship = GetMonData(mon, MON_DATA_FRIENDSHIP, NULL); @@ -415,7 +415,7 @@ void CalculateMonStats(struct Pokemon *mon) s32 defenseIV = GetMonData(mon, MON_DATA_DEF_IV, NULL); s32 defenseEV = GetMonData(mon, MON_DATA_DEF_EV, NULL); s32 speedIV = GetMonData(mon, MON_DATA_SPEED_IV, NULL); - s32 speedEV = GetMonData(mon, MON_DATA_SPD_EV, NULL); + s32 speedEV = GetMonData(mon, MON_DATA_SPEED_EV, NULL); s32 spAttackIV = GetMonData(mon, MON_DATA_SPATK_IV, NULL); s32 spAttackEV = GetMonData(mon, MON_DATA_SPATK_EV, NULL); s32 spDefenseIV = GetMonData(mon, MON_DATA_SPDEF_IV, NULL); diff --git a/src/pokemon/pokemon_2.c b/src/pokemon/pokemon_2.c index eaa0b86b8..447d95768 100644 --- a/src/pokemon/pokemon_2.c +++ b/src/pokemon/pokemon_2.c @@ -422,7 +422,7 @@ u32 GetBoxMonData(struct BoxPokemon *boxMon, s32 field, u8 *data) case MON_DATA_DEF_EV: retVal = substruct2->defenseEV; break; - case MON_DATA_SPD_EV: + case MON_DATA_SPEED_EV: retVal = substruct2->speedEV; break; case MON_DATA_SPATK_EV: @@ -784,7 +784,7 @@ void SetBoxMonData(struct BoxPokemon *boxMon, s32 field, const u8 *data) case MON_DATA_DEF_EV: SET8(substruct2->defenseEV); break; - case MON_DATA_SPD_EV: + case MON_DATA_SPEED_EV: SET8(substruct2->speedEV); break; case MON_DATA_SPATK_EV: diff --git a/src/pokemon/pokemon_data.c b/src/pokemon/pokemon_data.c index 6414134fb..b74f8045a 100644 --- a/src/pokemon/pokemon_data.c +++ b/src/pokemon/pokemon_data.c @@ -93,7 +93,7 @@ const u8 gUnknown_082082F2[] = { MON_DATA_HP_EV, MON_DATA_ATK_EV, MON_DATA_DEF_EV, - MON_DATA_SPD_EV, + MON_DATA_SPEED_EV, MON_DATA_SPDEF_EV, MON_DATA_SPATK_EV }; -- cgit v1.2.3 From d783f420001b67c19f8d81bbc94d266af98e89ad Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Thu, 26 Oct 2017 14:34:50 -0500 Subject: put all C data headers in src/ --- src/data/field_map_obj/anim_func_ptrs.h | 1519 ++++ src/data/field_map_obj/base_oam.h | 56 + .../field_map_obj/berry_tree_graphics_tables.h | 573 ++ .../field_map_obj/callback_subroutine_pointers.h | 442 ++ .../field_effect_object_template_pointers.h | 84 + src/data/field_map_obj/field_effect_objects.h | 897 +++ src/data/field_map_obj/map_object_anims.h | 886 +++ src/data/field_map_obj/map_object_graphics_info.h | 227 + .../map_object_graphics_info_pointers.h | 448 ++ src/data/field_map_obj/map_object_pic_tables.h | 1879 +++++ src/data/field_map_obj/map_object_subsprites.h | 345 + src/data/pokemon/base_stats.h | 7823 ++++++++++++++++++++ src/data/pokemon/cry_ids.h | 146 + src/data/pokemon/dex_order.h | 15 + src/data/pokemon/egg_moves.h | 1318 ++++ src/data/pokemon/evolution.h | 608 ++ src/data/pokemon/experience_tables.h | 828 +++ src/data/pokemon/item_effects.h | 824 +++ src/data/pokemon/level_up_learnset_pointers.h | 423 ++ src/data/pokemon/level_up_learnsets.h | 5627 ++++++++++++++ src/data/pokemon/nature_stats.h | 37 + src/data/pokemon/spinda_spots.h | 15 + src/data/pokemon/tmhm_learnsets.h | 431 ++ src/data/pokemon/trainer_class_lookups.h | 168 + src/field/daycare.c | 3 +- src/field/field_map_obj.c | 22 +- src/pokemon/pokemon_data.c | 24 +- 27 files changed, 25644 insertions(+), 24 deletions(-) create mode 100644 src/data/field_map_obj/anim_func_ptrs.h create mode 100644 src/data/field_map_obj/base_oam.h create mode 100644 src/data/field_map_obj/berry_tree_graphics_tables.h create mode 100644 src/data/field_map_obj/callback_subroutine_pointers.h create mode 100644 src/data/field_map_obj/field_effect_object_template_pointers.h create mode 100644 src/data/field_map_obj/field_effect_objects.h create mode 100644 src/data/field_map_obj/map_object_anims.h create mode 100644 src/data/field_map_obj/map_object_graphics_info.h create mode 100644 src/data/field_map_obj/map_object_graphics_info_pointers.h create mode 100644 src/data/field_map_obj/map_object_pic_tables.h create mode 100644 src/data/field_map_obj/map_object_subsprites.h create mode 100644 src/data/pokemon/base_stats.h create mode 100644 src/data/pokemon/cry_ids.h create mode 100644 src/data/pokemon/dex_order.h create mode 100644 src/data/pokemon/egg_moves.h create mode 100644 src/data/pokemon/evolution.h create mode 100644 src/data/pokemon/experience_tables.h create mode 100644 src/data/pokemon/item_effects.h create mode 100644 src/data/pokemon/level_up_learnset_pointers.h create mode 100644 src/data/pokemon/level_up_learnsets.h create mode 100644 src/data/pokemon/nature_stats.h create mode 100644 src/data/pokemon/spinda_spots.h create mode 100644 src/data/pokemon/tmhm_learnsets.h create mode 100644 src/data/pokemon/trainer_class_lookups.h (limited to 'src') diff --git a/src/data/field_map_obj/anim_func_ptrs.h b/src/data/field_map_obj/anim_func_ptrs.h new file mode 100644 index 000000000..1d1fac71e --- /dev/null +++ b/src/data/field_map_obj/anim_func_ptrs.h @@ -0,0 +1,1519 @@ +// + +// + +#ifndef POKERUBY_ANIM_FUNC_PTRS_H +#define POKERUBY_ANIM_FUNC_PTRS_H + +u8 sub_8060CE0(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_8060CF0(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_8060D00(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_8060D10(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_8060F3C(struct MapObject *, struct Sprite *); +u8 sub_8060F5C(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_8060F7C(struct MapObject *, struct Sprite *); +u8 sub_8060F9C(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_8060FBC(struct MapObject *, struct Sprite *); +u8 sub_8060FDC(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_8060FFC(struct MapObject *, struct Sprite *); +u8 sub_806101C(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_806103C(struct MapObject *, struct Sprite *); +u8 sub_806105C(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_806107C(struct MapObject *, struct Sprite *); +u8 sub_806109C(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_80610BC(struct MapObject *, struct Sprite *); +u8 sub_80610DC(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_80610FC(struct MapObject *, struct Sprite *); +u8 sub_806111C(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_80613A8(struct MapObject *, struct Sprite *); +u8 sub_80613D4(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_8061400(struct MapObject *, struct Sprite *); +u8 sub_806142C(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_8061458(struct MapObject *, struct Sprite *); +u8 sub_8061484(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_80614B0(struct MapObject *, struct Sprite *); +u8 sub_80614DC(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_806152C(struct MapObject *, struct Sprite *); +u8 sub_8061510(struct MapObject *, struct Sprite *); +u8 sub_8063470(struct MapObject *, struct Sprite *); +u8 sub_806154C(struct MapObject *, struct Sprite *); +u8 sub_8061510(struct MapObject *, struct Sprite *); +u8 sub_8063470(struct MapObject *, struct Sprite *); +u8 sub_806156C(struct MapObject *, struct Sprite *); +u8 sub_8061510(struct MapObject *, struct Sprite *); +u8 sub_8063470(struct MapObject *, struct Sprite *); +u8 sub_806158C(struct MapObject *, struct Sprite *); +u8 sub_8061510(struct MapObject *, struct Sprite *); +u8 sub_8063470(struct MapObject *, struct Sprite *); +u8 sub_80615AC(struct MapObject *, struct Sprite *); +u8 sub_8061510(struct MapObject *, struct Sprite *); +u8 sub_8063470(struct MapObject *, struct Sprite *); +u8 sub_80615CC(struct MapObject *, struct Sprite *); +u8 sub_80615EC(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_806160C(struct MapObject *, struct Sprite *); +u8 sub_806162C(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_806164C(struct MapObject *, struct Sprite *); +u8 sub_806166C(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_806168C(struct MapObject *, struct Sprite *); +u8 sub_80616AC(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_8061778(struct MapObject *, struct Sprite *); +u8 sub_806173C(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_80617B0(struct MapObject *, struct Sprite *); +u8 sub_806173C(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_80617E8(struct MapObject *, struct Sprite *); +u8 sub_806173C(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_8061820(struct MapObject *, struct Sprite *); +u8 sub_806173C(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_8061858(struct MapObject *, struct Sprite *); +u8 sub_8061714(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_8061890(struct MapObject *, struct Sprite *); +u8 sub_8061714(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_80618C8(struct MapObject *, struct Sprite *); +u8 sub_8061714(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_8061900(struct MapObject *, struct Sprite *); +u8 sub_8061714(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_8061938(struct MapObject *, struct Sprite *); +u8 sub_8061714(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_8061970(struct MapObject *, struct Sprite *); +u8 sub_8061714(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_80619A8(struct MapObject *, struct Sprite *); +u8 sub_8061714(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_80619E0(struct MapObject *, struct Sprite *); +u8 sub_8061714(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_8061A18(struct MapObject *, struct Sprite *); +u8 sub_8061714(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_8061A50(struct MapObject *, struct Sprite *); +u8 sub_8061714(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_8061A88(struct MapObject *, struct Sprite *); +u8 sub_8061714(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_8061AC0(struct MapObject *, struct Sprite *); +u8 sub_8061714(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_8061AF8(struct MapObject *, struct Sprite *); +u8 sub_8061B18(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_8061B38(struct MapObject *, struct Sprite *); +u8 sub_8061B58(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_8061B78(struct MapObject *, struct Sprite *); +u8 sub_8061B98(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_8061BB8(struct MapObject *, struct Sprite *); +u8 sub_8061BD8(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_8061BF8(struct MapObject *, struct Sprite *); +u8 sub_8061C18(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_8061C38(struct MapObject *, struct Sprite *); +u8 sub_8061C58(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_8061C78(struct MapObject *, struct Sprite *); +u8 sub_8061C98(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_8061CB8(struct MapObject *, struct Sprite *); +u8 sub_8061CD8(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_8061CF8(struct MapObject *, struct Sprite *); +u8 sub_8061D18(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_8061D38(struct MapObject *, struct Sprite *); +u8 sub_8061D58(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_8061D78(struct MapObject *, struct Sprite *); +u8 sub_8061D98(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_8061DB8(struct MapObject *, struct Sprite *); +u8 sub_8061DD8(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 do_run_south_anim(struct MapObject *, struct Sprite *); +u8 sub_8061E18(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 do_run_north_anim(struct MapObject *, struct Sprite *); +u8 sub_8061E58(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 do_run_west_anim(struct MapObject *, struct Sprite *); +u8 sub_8061E98(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 do_run_east_anim(struct MapObject *, struct Sprite *); +u8 sub_8061ED8(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_8061F24(struct MapObject *, struct Sprite *); +u8 sub_8061F3C(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_8061F90(struct MapObject *, struct Sprite *); +u8 sub_8061FB0(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_8061FD8(struct MapObject *, struct Sprite *); +u8 sub_8061FF8(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_8062020(struct MapObject *, struct Sprite *); +u8 sub_8062040(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_8062068(struct MapObject *, struct Sprite *); +u8 sub_8062088(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_80620B0(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_806210C(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_8062170(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_8062180(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_8062190(struct MapObject *, struct Sprite *); +u8 sub_80621BC(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_80621E8(struct MapObject *, struct Sprite *); +u8 sub_8062214(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_8062240(struct MapObject *, struct Sprite *); +u8 sub_806226C(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_8062298(struct MapObject *, struct Sprite *); +u8 sub_80622C4(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_80622F0(struct MapObject *, struct Sprite *); +u8 sub_806231C(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_8062348(struct MapObject *, struct Sprite *); +u8 sub_8062374(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_80623A0(struct MapObject *, struct Sprite *); +u8 sub_80623CC(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_80623F8(struct MapObject *, struct Sprite *); +u8 sub_8062424(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_8062450(struct MapObject *, struct Sprite *); +u8 sub_806247C(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_80624A8(struct MapObject *, struct Sprite *); +u8 sub_80624D4(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_8062500(struct MapObject *, struct Sprite *); +u8 sub_806252C(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_8062558(struct MapObject *, struct Sprite *); +u8 sub_8062584(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_80625B0(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_80625C8(struct MapObject *, struct Sprite *); +u8 sub_8061F3C(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_80625D8(struct MapObject *, struct Sprite *); +u8 sub_8063470(struct MapObject *, struct Sprite *); +u8 sub_80625E8(struct MapObject *, struct Sprite *); +u8 sub_8063470(struct MapObject *, struct Sprite *); +u8 sub_80625F8(struct MapObject *, struct Sprite *); +u8 sub_8063470(struct MapObject *, struct Sprite *); +u8 sub_8062608(struct MapObject *, struct Sprite *); +u8 sub_8063470(struct MapObject *, struct Sprite *); +u8 sub_8062634(struct MapObject *, struct Sprite *); +u8 sub_8063470(struct MapObject *, struct Sprite *); +u8 sub_8062644(struct MapObject *, struct Sprite *); +u8 sub_8063470(struct MapObject *, struct Sprite *); +u8 do_exclamation_mark_bubble_1(struct MapObject *, struct Sprite *); +u8 sub_8063470(struct MapObject *, struct Sprite *); +u8 do_exclamation_mark_bubble_2(struct MapObject *, struct Sprite *); +u8 sub_8063470(struct MapObject *, struct Sprite *); +u8 do_heart_bubble(struct MapObject *, struct Sprite *); +u8 sub_8063470(struct MapObject *, struct Sprite *); +u8 sub_80626C0(struct MapObject *, struct Sprite *); +u8 sub_8062704(struct MapObject *, struct Sprite *); +u8 sub_8063470(struct MapObject *, struct Sprite *); +u8 sub_8062724(struct MapObject *, struct Sprite *); +u8 sub_8062740(struct MapObject *, struct Sprite *); +u8 sub_8062764(struct MapObject *, struct Sprite *); +u8 sub_8063470(struct MapObject *, struct Sprite *); +u8 sub_80627A0(struct MapObject *, struct Sprite *); +u8 sub_80627BC(struct MapObject *, struct Sprite *); +u8 sub_80627E0(struct MapObject *, struct Sprite *); +u8 sub_8063470(struct MapObject *, struct Sprite *); +u8 sub_806281C(struct MapObject *, struct Sprite *); +u8 sub_8063470(struct MapObject *, struct Sprite *); +u8 sub_806282C(struct MapObject *, struct Sprite *); +u8 sub_8063470(struct MapObject *, struct Sprite *); +u8 sub_806283C(struct MapObject *, struct Sprite *); +u8 sub_8063470(struct MapObject *, struct Sprite *); +u8 sub_806286C(struct MapObject *, struct Sprite *); +u8 sub_8063470(struct MapObject *, struct Sprite *); +u8 sub_806289C(struct MapObject *, struct Sprite *); +u8 sub_80628D0(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_80628FC(struct MapObject *, struct Sprite *); +u8 sub_8062930(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_806299C(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_80629AC(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_80629BC(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_80629CC(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_80629DC(struct MapObject *, struct Sprite *); +u8 sub_8061F3C(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_8062A00(struct MapObject *, struct Sprite *); +u8 sub_8061F3C(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_8062A24(struct MapObject *, struct Sprite *); +u8 sub_8061F3C(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_8062A48(struct MapObject *, struct Sprite *); +u8 sub_8061F3C(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_8062A6C(struct MapObject *, struct Sprite *); +u8 sub_8061F3C(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_8062A90(struct MapObject *, struct Sprite *); +u8 sub_8061F3C(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_8062AB4(struct MapObject *, struct Sprite *); +u8 sub_8061F3C(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_8062AD8(struct MapObject *, struct Sprite *); +u8 sub_8061F3C(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_8062AFC(struct MapObject *, struct Sprite *); +u8 sub_8061F3C(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_8062B20(struct MapObject *, struct Sprite *); +u8 sub_8061F3C(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_8062B44(struct MapObject *, struct Sprite *); +u8 sub_8061F3C(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_8062B68(struct MapObject *, struct Sprite *); +u8 sub_8061F3C(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_8062BD0(struct MapObject *, struct Sprite *); +u8 sub_8062BFC(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_8062C28(struct MapObject *, struct Sprite *); +u8 sub_8062C54(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_8062C80(struct MapObject *, struct Sprite *); +u8 sub_8062CAC(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_8062CD8(struct MapObject *, struct Sprite *); +u8 sub_8062D04(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_8062D30(struct MapObject *, struct Sprite *); +u8 sub_8062D5C(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_8062D88(struct MapObject *, struct Sprite *); +u8 sub_8062DB4(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_8062DE0(struct MapObject *, struct Sprite *); +u8 sub_8062E0C(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_8062E38(struct MapObject *, struct Sprite *); +u8 sub_8062E64(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_8062E90(struct MapObject *, struct Sprite *); +u8 sub_8062EBC(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_8062EE8(struct MapObject *, struct Sprite *); +u8 sub_8062F14(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_8062F40(struct MapObject *, struct Sprite *); +u8 sub_8062F6C(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_8062F98(struct MapObject *, struct Sprite *); +u8 sub_8062FC4(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_8062FF0(struct MapObject *, struct Sprite *); +u8 sub_8061714(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_8063028(struct MapObject *, struct Sprite *); +u8 sub_8061714(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_8063060(struct MapObject *, struct Sprite *); +u8 sub_8061714(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_8063098(struct MapObject *, struct Sprite *); +u8 sub_8061714(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_8063108(struct MapObject *, struct Sprite *); +u8 sub_8063128(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_8063148(struct MapObject *, struct Sprite *); +u8 sub_8063168(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_8063188(struct MapObject *, struct Sprite *); +u8 sub_80631A8(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_80631C8(struct MapObject *, struct Sprite *); +u8 sub_80631E8(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_8063238(struct MapObject *, struct Sprite *); +u8 sub_8063258(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_8063278(struct MapObject *, struct Sprite *); +u8 sub_8063298(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_80632B8(struct MapObject *, struct Sprite *); +u8 sub_80632D8(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_80632F8(struct MapObject *, struct Sprite *); +u8 sub_8063318(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_8063370(struct MapObject *, struct Sprite *); +u8 sub_8063390(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_80633B0(struct MapObject *, struct Sprite *); +u8 sub_80633D0(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_80633F0(struct MapObject *, struct Sprite *); +u8 sub_8063410(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); +u8 sub_8063430(struct MapObject *, struct Sprite *); +u8 sub_8063450(struct MapObject *, struct Sprite *); +u8 sub_8063474(struct MapObject *, struct Sprite *); + +u8 (*const Unknown_83759A0[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_83759A8[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_83759B0[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_83759B8[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_83759D4[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_83759E0[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_83759EC[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_83759F8[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375A04[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375A10[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375A1C[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375A28[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375A40[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375A4C[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375A58[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375A64[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375A70[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375A7C[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375A88[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375A94[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375AA0[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375AAC[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375AB8[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375AC4[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375AD0[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375ADC[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375AE8[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375AF4[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375B00[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375B0C[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375B18[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375B24[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375B30[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375B3C[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375B48[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375B54[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375B60[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375B6C[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375B78[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375B84[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375B90[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375B9C[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375BA8[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375BB4[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375BC0[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375BCC[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375BD8[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375BE4[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375BF0[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375BFC[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375C08[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375C14[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375C20[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375C2C[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375C38[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375C44[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375C50[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375C5C[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375C68[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375C74[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375C80[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375C8C[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375C98[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375CA0[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375CA8[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375CB0[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375CB8[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375CC4[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375CD0[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375CDC[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375CE8[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375CF4[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375D00[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375D0C[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375D18[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375D24[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375D30[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375D3C[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375D48[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375D50[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375D5C[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375D64[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375D6C[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375D74[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375D7C[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375D84[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375D8C[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375D94[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375D9C[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375DA4[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375DB0[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375DC0[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375DD0[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375DD8[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375DE0[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375DE8[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375DF0[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375DFC[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375E08[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375E10[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375E18[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375E20[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375E28[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375E34[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375E40[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375E4C[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375E58[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375E64[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375E70[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375E7C[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375EB8[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375EC4[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375ED0[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375EDC[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375EE8[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375EF4[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375F00[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375F0C[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375F18[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375F24[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375F30[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375F3C[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375F48[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375F54[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375F60[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375F6C[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375F78[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375F84[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375F90[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375F9C[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375FA8[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375FB4[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375FC0[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375FCC[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375FD8[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375FE4[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375FF0[])(struct MapObject *, struct Sprite *); +u8 (*const Unknown_8375FFC[])(struct MapObject *, struct Sprite *); + +u8 (*const *const gUnknown_08375778[])(struct MapObject *, struct Sprite *) = { + Unknown_83759A0, + Unknown_83759A8, + Unknown_83759B0, + Unknown_83759B8, + Unknown_83759D4, + Unknown_83759E0, + Unknown_83759EC, + Unknown_83759F8, + Unknown_8375A04, + Unknown_8375A10, + Unknown_8375A1C, + Unknown_8375A28, + Unknown_8375A40, + Unknown_8375A4C, + Unknown_8375A58, + Unknown_8375A64, + Unknown_8375A70, + Unknown_8375A7C, + Unknown_8375A88, + Unknown_8375A94, + Unknown_8375AA0, + Unknown_8375AAC, + Unknown_8375AB8, + Unknown_8375AC4, + Unknown_8375AD0, + Unknown_8375ADC, + Unknown_8375AE8, + Unknown_8375AF4, + Unknown_8375B00, + Unknown_8375B0C, + Unknown_8375B18, + Unknown_8375B24, + Unknown_8375B30, + Unknown_8375B3C, + Unknown_8375B48, + Unknown_8375B54, + Unknown_8375B60, + Unknown_8375B6C, + Unknown_8375B78, + Unknown_8375B84, + Unknown_8375B90, + Unknown_8375B9C, + Unknown_8375BA8, + Unknown_8375BB4, + Unknown_8375BC0, + Unknown_8375BCC, + Unknown_8375BD8, + Unknown_8375BE4, + Unknown_8375BF0, + Unknown_8375BFC, + Unknown_8375C08, + Unknown_8375C14, + Unknown_8375C20, + Unknown_8375C2C, + Unknown_8375C38, + Unknown_8375C44, + Unknown_8375C50, + Unknown_8375C5C, + Unknown_8375C68, + Unknown_8375C74, + Unknown_8375C80, + Unknown_8375C8C, + Unknown_8375C98, + Unknown_8375CA0, + Unknown_8375CA8, + Unknown_8375CB0, + Unknown_8375CB8, + Unknown_8375CC4, + Unknown_8375CD0, + Unknown_8375CDC, + Unknown_8375CE8, + Unknown_8375CF4, + Unknown_8375D00, + Unknown_8375D0C, + Unknown_8375D18, + Unknown_8375D24, + Unknown_8375D30, + Unknown_8375D3C, + Unknown_8375D48, + Unknown_8375D50, + Unknown_8375D5C, + Unknown_8375D64, + Unknown_8375D6C, + Unknown_8375D74, + Unknown_8375D7C, + Unknown_8375D84, + Unknown_8375D8C, + Unknown_8375D94, + Unknown_8375D9C, + Unknown_8375DA4, + Unknown_8375DB0, + Unknown_8375DC0, + Unknown_8375DD0, + Unknown_8375DD8, + Unknown_8375DE0, + Unknown_8375DE8, + Unknown_8375DF0, + Unknown_8375DFC, + Unknown_8375E08, + Unknown_8375E10, + Unknown_8375E18, + Unknown_8375E20, + Unknown_8375E28, + Unknown_8375E34, + Unknown_8375E40, + Unknown_8375E4C, + Unknown_8375E58, + Unknown_8375E64, + Unknown_8375E70, + Unknown_8375E7C, + Unknown_8375EB8, + Unknown_8375EC4, + Unknown_8375ED0, + Unknown_8375EDC, + Unknown_8375EE8, + Unknown_8375EF4, + Unknown_8375F00, + Unknown_8375F0C, + Unknown_8375F18, + Unknown_8375F24, + Unknown_8375F30, + Unknown_8375F3C, + Unknown_8375F48, + Unknown_8375F54, + Unknown_8375F60, + Unknown_8375F6C, + Unknown_8375F78, + Unknown_8375F84, + Unknown_8375F90, + Unknown_8375F9C, + Unknown_8375FA8, + Unknown_8375FB4, + Unknown_8375FC0, + Unknown_8375FCC, + Unknown_8375FD8, + Unknown_8375FE4, + Unknown_8375FF0, + Unknown_8375FFC +}; + + +u8 (*const Unknown_83759A0[])(struct MapObject *, struct Sprite *) = { + sub_8060CE0, + sub_8063474 +}; + +u8 (*const Unknown_83759A8[])(struct MapObject *, struct Sprite *) = { + sub_8060CF0, + sub_8063474 +}; + +u8 (*const Unknown_83759B0[])(struct MapObject *, struct Sprite *) = { + sub_8060D00, + sub_8063474 +}; + +u8 (*const Unknown_83759B8[])(struct MapObject *, struct Sprite *) = { + sub_8060D10, + sub_8063474 +}; + +u8 (*const gUnknown_083759C0[])(u8) = { + get_go_image_anim_num, + get_go_fast_image_anim_num, + get_go_fast_image_anim_num, + get_go_faster_image_anim_num, + sub_805FD78 +}; + +u8 (*const Unknown_83759D4[])(struct MapObject *, struct Sprite *) = { + sub_8060F3C, + sub_8060F5C, + sub_8063474 +}; + +u8 (*const Unknown_83759E0[])(struct MapObject *, struct Sprite *) = { + sub_8060F7C, + sub_8060F9C, + sub_8063474 +}; + +u8 (*const Unknown_83759EC[])(struct MapObject *, struct Sprite *) = { + sub_8060FBC, + sub_8060FDC, + sub_8063474 +}; + +u8 (*const Unknown_83759F8[])(struct MapObject *, struct Sprite *) = { + sub_8060FFC, + sub_806101C, + sub_8063474 +}; + +u8 (*const Unknown_8375A04[])(struct MapObject *, struct Sprite *) = { + sub_806103C, + sub_806105C, + sub_8063474 +}; + +u8 (*const Unknown_8375A10[])(struct MapObject *, struct Sprite *) = { + sub_806107C, + sub_806109C, + sub_8063474 +}; + +u8 (*const Unknown_8375A1C[])(struct MapObject *, struct Sprite *) = { + sub_80610BC, + sub_80610DC, + sub_8063474 +}; + +u8 (*const Unknown_8375A28[])(struct MapObject *, struct Sprite *) = { + sub_80610FC, + sub_806111C, + sub_8063474 +}; + +const s16 gUnknown_08375A34[] = {0, 1, 1}; +const s16 gUnknown_08375A3A[] = {0, 0, 1}; + +u8 (*const Unknown_8375A40[])(struct MapObject *, struct Sprite *) = { + sub_80613A8, + sub_80613D4, + sub_8063474 +}; + +u8 (*const Unknown_8375A4C[])(struct MapObject *, struct Sprite *) = { + sub_8061400, + sub_806142C, + sub_8063474 +}; + +u8 (*const Unknown_8375A58[])(struct MapObject *, struct Sprite *) = { + sub_8061458, + sub_8061484, + sub_8063474 +}; + +u8 (*const Unknown_8375A64[])(struct MapObject *, struct Sprite *) = { + sub_80614B0, + sub_80614DC, + sub_8063474 +}; + +u8 (*const Unknown_8375A70[])(struct MapObject *, struct Sprite *) = { + sub_806152C, + sub_8061510, + sub_8063470 +}; + +u8 (*const Unknown_8375A7C[])(struct MapObject *, struct Sprite *) = { + sub_806154C, + sub_8061510, + sub_8063470 +}; + +u8 (*const Unknown_8375A88[])(struct MapObject *, struct Sprite *) = { + sub_806156C, + sub_8061510, + sub_8063470 +}; + +u8 (*const Unknown_8375A94[])(struct MapObject *, struct Sprite *) = { + sub_806158C, + sub_8061510, + sub_8063470 +}; + +u8 (*const Unknown_8375AA0[])(struct MapObject *, struct Sprite *) = { + sub_80615AC, + sub_8061510, + sub_8063470 +}; + +u8 (*const Unknown_8375AAC[])(struct MapObject *, struct Sprite *) = { + sub_80615CC, + sub_80615EC, + sub_8063474 +}; + +u8 (*const Unknown_8375AB8[])(struct MapObject *, struct Sprite *) = { + sub_806160C, + sub_806162C, + sub_8063474 +}; + +u8 (*const Unknown_8375AC4[])(struct MapObject *, struct Sprite *) = { + sub_806164C, + sub_806166C, + sub_8063474 +}; + +u8 (*const Unknown_8375AD0[])(struct MapObject *, struct Sprite *) = { + sub_806168C, + sub_80616AC, + sub_8063474 +}; + +u8 (*const Unknown_8375ADC[])(struct MapObject *, struct Sprite *) = { + sub_8061778, + sub_806173C, + sub_8063474 +}; + +u8 (*const Unknown_8375AE8[])(struct MapObject *, struct Sprite *) = { + sub_80617B0, + sub_806173C, + sub_8063474 +}; + +u8 (*const Unknown_8375AF4[])(struct MapObject *, struct Sprite *) = { + sub_80617E8, + sub_806173C, + sub_8063474 +}; + +u8 (*const Unknown_8375B00[])(struct MapObject *, struct Sprite *) = { + sub_8061820, + sub_806173C, + sub_8063474 +}; + +u8 (*const Unknown_8375B0C[])(struct MapObject *, struct Sprite *) = { + sub_8061858, + sub_8061714, + sub_8063474 +}; + +u8 (*const Unknown_8375B18[])(struct MapObject *, struct Sprite *) = { + sub_8061890, + sub_8061714, + sub_8063474 +}; + +u8 (*const Unknown_8375B24[])(struct MapObject *, struct Sprite *) = { + sub_80618C8, + sub_8061714, + sub_8063474 +}; + +u8 (*const Unknown_8375B30[])(struct MapObject *, struct Sprite *) = { + sub_8061900, + sub_8061714, + sub_8063474 +}; + +u8 (*const Unknown_8375B3C[])(struct MapObject *, struct Sprite *) = { + sub_8061938, + sub_8061714, + sub_8063474 +}; + +u8 (*const Unknown_8375B48[])(struct MapObject *, struct Sprite *) = { + sub_8061970, + sub_8061714, + sub_8063474 +}; + +u8 (*const Unknown_8375B54[])(struct MapObject *, struct Sprite *) = { + sub_80619A8, + sub_8061714, + sub_8063474 +}; + +u8 (*const Unknown_8375B60[])(struct MapObject *, struct Sprite *) = { + sub_80619E0, + sub_8061714, + sub_8063474 +}; + +u8 (*const Unknown_8375B6C[])(struct MapObject *, struct Sprite *) = { + sub_8061A18, + sub_8061714, + sub_8063474 +}; + +u8 (*const Unknown_8375B78[])(struct MapObject *, struct Sprite *) = { + sub_8061A50, + sub_8061714, + sub_8063474 +}; + +u8 (*const Unknown_8375B84[])(struct MapObject *, struct Sprite *) = { + sub_8061A88, + sub_8061714, + sub_8063474 +}; + +u8 (*const Unknown_8375B90[])(struct MapObject *, struct Sprite *) = { + sub_8061AC0, + sub_8061714, + sub_8063474 +}; + +u8 (*const Unknown_8375B9C[])(struct MapObject *, struct Sprite *) = { + sub_8061AF8, + sub_8061B18, + sub_8063474 +}; + +u8 (*const Unknown_8375BA8[])(struct MapObject *, struct Sprite *) = { + sub_8061B38, + sub_8061B58, + sub_8063474 +}; + +u8 (*const Unknown_8375BB4[])(struct MapObject *, struct Sprite *) = { + sub_8061B78, + sub_8061B98, + sub_8063474 +}; + +u8 (*const Unknown_8375BC0[])(struct MapObject *, struct Sprite *) = { + sub_8061BB8, + sub_8061BD8, + sub_8063474 +}; + +u8 (*const Unknown_8375BCC[])(struct MapObject *, struct Sprite *) = { + sub_8061BF8, + sub_8061C18, + sub_8063474 +}; + +u8 (*const Unknown_8375BD8[])(struct MapObject *, struct Sprite *) = { + sub_8061C38, + sub_8061C58, + sub_8063474 +}; + +u8 (*const Unknown_8375BE4[])(struct MapObject *, struct Sprite *) = { + sub_8061C78, + sub_8061C98, + sub_8063474 +}; + +u8 (*const Unknown_8375BF0[])(struct MapObject *, struct Sprite *) = { + sub_8061CB8, + sub_8061CD8, + sub_8063474 +}; + +u8 (*const Unknown_8375BFC[])(struct MapObject *, struct Sprite *) = { + sub_8061CF8, + sub_8061D18, + sub_8063474 +}; + +u8 (*const Unknown_8375C08[])(struct MapObject *, struct Sprite *) = { + sub_8061D38, + sub_8061D58, + sub_8063474 +}; + +u8 (*const Unknown_8375C14[])(struct MapObject *, struct Sprite *) = { + sub_8061D78, + sub_8061D98, + sub_8063474 +}; + +u8 (*const Unknown_8375C20[])(struct MapObject *, struct Sprite *) = { + sub_8061DB8, + sub_8061DD8, + sub_8063474 +}; + +u8 (*const Unknown_8375C2C[])(struct MapObject *, struct Sprite *) = { + do_run_south_anim, + sub_8061E18, + sub_8063474 +}; + +u8 (*const Unknown_8375C38[])(struct MapObject *, struct Sprite *) = { + do_run_north_anim, + sub_8061E58, + sub_8063474 +}; + +u8 (*const Unknown_8375C44[])(struct MapObject *, struct Sprite *) = { + do_run_west_anim, + sub_8061E98, + sub_8063474 +}; + +u8 (*const Unknown_8375C50[])(struct MapObject *, struct Sprite *) = { + do_run_east_anim, + sub_8061ED8, + sub_8063474 +}; + +u8 (*const Unknown_8375C5C[])(struct MapObject *, struct Sprite *) = { + sub_8061F24, + sub_8061F3C, + sub_8063474 +}; + +u8 (*const Unknown_8375C68[])(struct MapObject *, struct Sprite *) = { + sub_8061F90, + sub_8061FB0, + sub_8063474 +}; + +u8 (*const Unknown_8375C74[])(struct MapObject *, struct Sprite *) = { + sub_8061FD8, + sub_8061FF8, + sub_8063474 +}; + +u8 (*const Unknown_8375C80[])(struct MapObject *, struct Sprite *) = { + sub_8062020, + sub_8062040, + sub_8063474 +}; + +u8 (*const Unknown_8375C8C[])(struct MapObject *, struct Sprite *) = { + sub_8062068, + sub_8062088, + sub_8063474 +}; + +u8 (*const Unknown_8375C98[])(struct MapObject *, struct Sprite *) = { + sub_80620B0, + sub_8063474 +}; + +u8 (*const Unknown_8375CA0[])(struct MapObject *, struct Sprite *) = { + sub_806210C, + sub_8063474 +}; + +u8 (*const Unknown_8375CA8[])(struct MapObject *, struct Sprite *) = { + sub_8062170, + sub_8063474 +}; + +u8 (*const Unknown_8375CB0[])(struct MapObject *, struct Sprite *) = { + sub_8062180, + sub_8063474 +}; + +u8 (*const Unknown_8375CB8[])(struct MapObject *, struct Sprite *) = { + sub_8062190, + sub_80621BC, + sub_8063474 +}; + +u8 (*const Unknown_8375CC4[])(struct MapObject *, struct Sprite *) = { + sub_80621E8, + sub_8062214, + sub_8063474 +}; + +u8 (*const Unknown_8375CD0[])(struct MapObject *, struct Sprite *) = { + sub_8062240, + sub_806226C, + sub_8063474 +}; + +u8 (*const Unknown_8375CDC[])(struct MapObject *, struct Sprite *) = { + sub_8062298, + sub_80622C4, + sub_8063474 +}; + +u8 (*const Unknown_8375CE8[])(struct MapObject *, struct Sprite *) = { + sub_80622F0, + sub_806231C, + sub_8063474 +}; + +u8 (*const Unknown_8375CF4[])(struct MapObject *, struct Sprite *) = { + sub_8062348, + sub_8062374, + sub_8063474 +}; + +u8 (*const Unknown_8375D00[])(struct MapObject *, struct Sprite *) = { + sub_80623A0, + sub_80623CC, + sub_8063474 +}; + +u8 (*const Unknown_8375D0C[])(struct MapObject *, struct Sprite *) = { + sub_80623F8, + sub_8062424, + sub_8063474 +}; + +u8 (*const Unknown_8375D18[])(struct MapObject *, struct Sprite *) = { + sub_8062450, + sub_806247C, + sub_8063474 +}; + +u8 (*const Unknown_8375D24[])(struct MapObject *, struct Sprite *) = { + sub_80624A8, + sub_80624D4, + sub_8063474 +}; + +u8 (*const Unknown_8375D30[])(struct MapObject *, struct Sprite *) = { + sub_8062500, + sub_806252C, + sub_8063474 +}; + +u8 (*const Unknown_8375D3C[])(struct MapObject *, struct Sprite *) = { + sub_8062558, + sub_8062584, + sub_8063474 +}; + +u8 (*const Unknown_8375D48[])(struct MapObject *, struct Sprite *) = { + sub_80625B0, + sub_8063474 +}; + +u8 (*const Unknown_8375D50[])(struct MapObject *, struct Sprite *) = { + sub_80625C8, + sub_8061F3C, + sub_8063474 +}; + +u8 (*const Unknown_8375D5C[])(struct MapObject *, struct Sprite *) = { + sub_80625D8, + sub_8063470 +}; + +u8 (*const Unknown_8375D64[])(struct MapObject *, struct Sprite *) = { + sub_80625E8, + sub_8063470 +}; + +u8 (*const Unknown_8375D6C[])(struct MapObject *, struct Sprite *) = { + sub_80625F8, + sub_8063470 +}; + +u8 (*const Unknown_8375D74[])(struct MapObject *, struct Sprite *) = { + sub_8062608, + sub_8063470 +}; + +u8 (*const Unknown_8375D7C[])(struct MapObject *, struct Sprite *) = { + sub_8062634, + sub_8063470 +}; + +u8 (*const Unknown_8375D84[])(struct MapObject *, struct Sprite *) = { + sub_8062644, + sub_8063470 +}; + +u8 (*const Unknown_8375D8C[])(struct MapObject *, struct Sprite *) = { + do_exclamation_mark_bubble_1, + sub_8063470 +}; + +u8 (*const Unknown_8375D94[])(struct MapObject *, struct Sprite *) = { + do_exclamation_mark_bubble_2, + sub_8063470 +}; + +u8 (*const Unknown_8375D9C[])(struct MapObject *, struct Sprite *) = { + do_heart_bubble, + sub_8063470 +}; + +u8 (*const Unknown_8375DA4[])(struct MapObject *, struct Sprite *) = { + sub_80626C0, + sub_8062704, + sub_8063470 +}; + +u8 (*const Unknown_8375DB0[])(struct MapObject *, struct Sprite *) = { + sub_8062724, + sub_8062740, + sub_8062764, + sub_8063470 +}; + +u8 (*const Unknown_8375DC0[])(struct MapObject *, struct Sprite *) = { + sub_80627A0, + sub_80627BC, + sub_80627E0, + sub_8063470 +}; + +u8 (*const Unknown_8375DD0[])(struct MapObject *, struct Sprite *) = { + sub_806281C, + sub_8063470 +}; + +u8 (*const Unknown_8375DD8[])(struct MapObject *, struct Sprite *) = { + sub_806282C, + sub_8063470 +}; + +u8 (*const Unknown_8375DE0[])(struct MapObject *, struct Sprite *) = { + sub_806283C, + sub_8063470 +}; + +u8 (*const Unknown_8375DE8[])(struct MapObject *, struct Sprite *) = { + sub_806286C, + sub_8063470 +}; + +u8 (*const Unknown_8375DF0[])(struct MapObject *, struct Sprite *) = { + sub_806289C, + sub_80628D0, + sub_8063474 +}; + +u8 (*const Unknown_8375DFC[])(struct MapObject *, struct Sprite *) = { + sub_80628FC, + sub_8062930, + sub_8063474 +}; + +u8 (*const Unknown_8375E08[])(struct MapObject *, struct Sprite *) = { + sub_806299C, + sub_8063474 +}; + +u8 (*const Unknown_8375E10[])(struct MapObject *, struct Sprite *) = { + sub_80629AC, + sub_8063474 +}; + +u8 (*const Unknown_8375E18[])(struct MapObject *, struct Sprite *) = { + sub_80629BC, + sub_8063474 +}; + +u8 (*const Unknown_8375E20[])(struct MapObject *, struct Sprite *) = { + sub_80629CC, + sub_8063474 +}; + +u8 (*const Unknown_8375E28[])(struct MapObject *, struct Sprite *) = { + sub_80629DC, + sub_8061F3C, + sub_8063474 +}; + +u8 (*const Unknown_8375E34[])(struct MapObject *, struct Sprite *) = { + sub_8062A00, + sub_8061F3C, + sub_8063474 +}; + +u8 (*const Unknown_8375E40[])(struct MapObject *, struct Sprite *) = { + sub_8062A24, + sub_8061F3C, + sub_8063474 +}; + +u8 (*const Unknown_8375E4C[])(struct MapObject *, struct Sprite *) = { + sub_8062A48, + sub_8061F3C, + sub_8063474 +}; + +u8 (*const Unknown_8375E58[])(struct MapObject *, struct Sprite *) = { + sub_8062A6C, + sub_8061F3C, + sub_8063474 +}; + +u8 (*const Unknown_8375E64[])(struct MapObject *, struct Sprite *) = { + sub_8062A90, + sub_8061F3C, + sub_8063474 +}; + +u8 (*const Unknown_8375E70[])(struct MapObject *, struct Sprite *) = { + sub_8062AB4, + sub_8061F3C, + sub_8063474 +}; + +u8 (*const Unknown_8375E7C[])(struct MapObject *, struct Sprite *) = { + sub_8062AD8, + sub_8061F3C, + sub_8063474, + sub_8062AFC, + sub_8061F3C, + sub_8063474, + sub_8062B20, + sub_8061F3C, + sub_8063474, + sub_8062B44, + sub_8061F3C, + sub_8063474, + sub_8062B68, + sub_8061F3C, + sub_8063474 +}; + +u8 (*const Unknown_8375EB8[])(struct MapObject *, struct Sprite *) = { + sub_8062BD0, + sub_8062BFC, + sub_8063474 +}; + +u8 (*const Unknown_8375EC4[])(struct MapObject *, struct Sprite *) = { + sub_8062C28, + sub_8062C54, + sub_8063474 +}; + +u8 (*const Unknown_8375ED0[])(struct MapObject *, struct Sprite *) = { + sub_8062C80, + sub_8062CAC, + sub_8063474 +}; + +u8 (*const Unknown_8375EDC[])(struct MapObject *, struct Sprite *) = { + sub_8062CD8, + sub_8062D04, + sub_8063474 +}; + +u8 (*const Unknown_8375EE8[])(struct MapObject *, struct Sprite *) = { + sub_8062D30, + sub_8062D5C, + sub_8063474 +}; + +u8 (*const Unknown_8375EF4[])(struct MapObject *, struct Sprite *) = { + sub_8062D88, + sub_8062DB4, + sub_8063474 +}; + +u8 (*const Unknown_8375F00[])(struct MapObject *, struct Sprite *) = { + sub_8062DE0, + sub_8062E0C, + sub_8063474 +}; + +u8 (*const Unknown_8375F0C[])(struct MapObject *, struct Sprite *) = { + sub_8062E38, + sub_8062E64, + sub_8063474 +}; + +u8 (*const Unknown_8375F18[])(struct MapObject *, struct Sprite *) = { + sub_8062E90, + sub_8062EBC, + sub_8063474 +}; + +u8 (*const Unknown_8375F24[])(struct MapObject *, struct Sprite *) = { + sub_8062EE8, + sub_8062F14, + sub_8063474 +}; + +u8 (*const Unknown_8375F30[])(struct MapObject *, struct Sprite *) = { + sub_8062F40, + sub_8062F6C, + sub_8063474 +}; + +u8 (*const Unknown_8375F3C[])(struct MapObject *, struct Sprite *) = { + sub_8062F98, + sub_8062FC4, + sub_8063474 +}; + +u8 (*const Unknown_8375F48[])(struct MapObject *, struct Sprite *) = { + sub_8062FF0, + sub_8061714, + sub_8063474 +}; + +u8 (*const Unknown_8375F54[])(struct MapObject *, struct Sprite *) = { + sub_8063028, + sub_8061714, + sub_8063474 +}; + +u8 (*const Unknown_8375F60[])(struct MapObject *, struct Sprite *) = { + sub_8063060, + sub_8061714, + sub_8063474 +}; + +u8 (*const Unknown_8375F6C[])(struct MapObject *, struct Sprite *) = { + sub_8063098, + sub_8061714, + sub_8063474 +}; + +u8 (*const Unknown_8375F78[])(struct MapObject *, struct Sprite *) = { + sub_8063108, + sub_8063128, + sub_8063474 +}; + +u8 (*const Unknown_8375F84[])(struct MapObject *, struct Sprite *) = { + sub_8063148, + sub_8063168, + sub_8063474 +}; + +u8 (*const Unknown_8375F90[])(struct MapObject *, struct Sprite *) = { + sub_8063188, + sub_80631A8, + sub_8063474 +}; + +u8 (*const Unknown_8375F9C[])(struct MapObject *, struct Sprite *) = { + sub_80631C8, + sub_80631E8, + sub_8063474 +}; + +u8 (*const Unknown_8375FA8[])(struct MapObject *, struct Sprite *) = { + sub_8063238, + sub_8063258, + sub_8063474 +}; + +u8 (*const Unknown_8375FB4[])(struct MapObject *, struct Sprite *) = { + sub_8063278, + sub_8063298, + sub_8063474 +}; + +u8 (*const Unknown_8375FC0[])(struct MapObject *, struct Sprite *) = { + sub_80632B8, + sub_80632D8, + sub_8063474 +}; + +u8 (*const Unknown_8375FCC[])(struct MapObject *, struct Sprite *) = { + sub_80632F8, + sub_8063318, + sub_8063474 +}; + +u8 (*const Unknown_8375FD8[])(struct MapObject *, struct Sprite *) = { + sub_8063370, + sub_8063390, + sub_8063474 +}; + +u8 (*const Unknown_8375FE4[])(struct MapObject *, struct Sprite *) = { + sub_80633B0, + sub_80633D0, + sub_8063474 +}; + +u8 (*const Unknown_8375FF0[])(struct MapObject *, struct Sprite *) = { + sub_80633F0, + sub_8063410, + sub_8063474 +}; + +u8 (*const Unknown_8375FFC[])(struct MapObject *, struct Sprite *) = { + sub_8063430, + sub_8063450, + sub_8063474 +}; + +#endif //POKERUBY_ANIM_FUNC_PTRS_H diff --git a/src/data/field_map_obj/base_oam.h b/src/data/field_map_obj/base_oam.h new file mode 100644 index 000000000..49c14e8c2 --- /dev/null +++ b/src/data/field_map_obj/base_oam.h @@ -0,0 +1,56 @@ +// + +// + +#ifndef POKERUBY_BASE_OAM_H +#define POKERUBY_BASE_OAM_H + +const struct OamData gFieldOamData_8x8 = { + .shape = 0, + .size = 0, + .priority = 2 +}; + +const struct OamData gFieldOamData_16x8 = { + .shape = 1, + .size = 0, + .priority = 2 +}; + +const struct OamData gFieldOamData_16x16 = { + .shape = 0, + .size = 1, + .priority = 2 +}; + +const struct OamData gFieldOamData_32x8 = { + .shape = 1, + .size = 1, + .priority = 2 +}; + +const struct OamData gFieldOamData_64x32 = { + .shape = 1, + .size = 3, + .priority = 2 +}; + +const struct OamData gFieldOamData_16x32 = { + .shape = 2, + .size = 2, + .priority = 2 +}; + +const struct OamData gFieldOamData_32x32 = { + .shape = 0, + .size = 2, + .priority = 2 +}; + +const struct OamData gFieldOamData_64x64 = { + .shape = 0, + .size = 3, + .priority = 2 +}; + +#endif //POKERUBY_BASE_OAM_H diff --git a/src/data/field_map_obj/berry_tree_graphics_tables.h b/src/data/field_map_obj/berry_tree_graphics_tables.h new file mode 100644 index 000000000..5b60fee6f --- /dev/null +++ b/src/data/field_map_obj/berry_tree_graphics_tables.h @@ -0,0 +1,573 @@ +// + +// + +#ifndef POKERUBY_BERRY_TREE_GRAPHICS_TABLES_H +#define POKERUBY_BERRY_TREE_GRAPHICS_TABLES_H + +const struct SpriteFrameImage gMapObjectPicTable_PechaBerryTree[] = { + obj_frame_tiles(gMapObjectPic_BerryTreeDirtPile), + obj_frame_tiles(gMapObjectPic_BerryTreeSprout_0), + obj_frame_tiles(gMapObjectPic_BerryTreeSprout_1), + obj_frame_tiles(gMapObjectPic_PechaBerryTree_0), + obj_frame_tiles(gMapObjectPic_PechaBerryTree_1), + obj_frame_tiles(gMapObjectPic_PechaBerryTree_2), + obj_frame_tiles(gMapObjectPic_PechaBerryTree_3), + obj_frame_tiles(gMapObjectPic_PechaBerryTree_4), + obj_frame_tiles(gMapObjectPic_PechaBerryTree_5) +}; + +const u8 gBerryTreePaletteSlotTable_Pecha[] = {3, 4, 4, 4, 4}; + +const struct SpriteFrameImage gMapObjectPicTable_KelpsyBerryTree[] = { + obj_frame_tiles(gMapObjectPic_BerryTreeDirtPile), + obj_frame_tiles(gMapObjectPic_BerryTreeSprout_0), + obj_frame_tiles(gMapObjectPic_BerryTreeSprout_1), + obj_frame_tiles(gMapObjectPic_KelpsyBerryTree_0), + obj_frame_tiles(gMapObjectPic_KelpsyBerryTree_1), + obj_frame_tiles(gMapObjectPic_KelpsyBerryTree_2), + obj_frame_tiles(gMapObjectPic_KelpsyBerryTree_3), + obj_frame_tiles(gMapObjectPic_KelpsyBerryTree_4), + obj_frame_tiles(gMapObjectPic_KelpsyBerryTree_5) +}; + +const u8 gBerryTreePaletteSlotTable_Kelpsy[] = {3, 4, 2, 2, 2}; + +const struct SpriteFrameImage gMapObjectPicTable_WepearBerryTree[] = { + obj_frame_tiles(gMapObjectPic_BerryTreeDirtPile), + obj_frame_tiles(gMapObjectPic_BerryTreeSprout_0), + obj_frame_tiles(gMapObjectPic_BerryTreeSprout_1), + obj_frame_tiles(gMapObjectPic_WepearBerryTree_0), + obj_frame_tiles(gMapObjectPic_WepearBerryTree_1), + obj_frame_tiles(gMapObjectPic_WepearBerryTree_2), + obj_frame_tiles(gMapObjectPic_WepearBerryTree_3), + obj_frame_tiles(gMapObjectPic_WepearBerryTree_4), + obj_frame_tiles(gMapObjectPic_WepearBerryTree_5) +}; + +const u8 gBerryTreePaletteSlotTable_Wepear[] = {3, 4, 2, 2, 2}; + +const struct SpriteFrameImage gMapObjectPicTable_IapapaBerryTree[] = { + obj_frame_tiles(gMapObjectPic_BerryTreeDirtPile), + obj_frame_tiles(gMapObjectPic_BerryTreeSprout_0), + obj_frame_tiles(gMapObjectPic_BerryTreeSprout_1), + obj_frame_tiles(gMapObjectPic_IapapaBerryTree_0), + obj_frame_tiles(gMapObjectPic_IapapaBerryTree_1), + obj_frame_tiles(gMapObjectPic_IapapaBerryTree_2), + obj_frame_tiles(gMapObjectPic_IapapaBerryTree_3), + obj_frame_tiles(gMapObjectPic_IapapaBerryTree_4), + obj_frame_tiles(gMapObjectPic_IapapaBerryTree_5) +}; + +const u8 gBerryTreePaletteSlotTable_Iapapa[] = {3, 4, 3, 3, 3}; + +const struct SpriteFrameImage gMapObjectPicTable_CheriBerryTree[] = { + obj_frame_tiles(gMapObjectPic_BerryTreeDirtPile), + obj_frame_tiles(gMapObjectPic_BerryTreeSprout_0), + obj_frame_tiles(gMapObjectPic_BerryTreeSprout_1), + obj_frame_tiles(gMapObjectPic_CheriBerryTree_0), + obj_frame_tiles(gMapObjectPic_CheriBerryTree_1), + obj_frame_tiles(gMapObjectPic_CheriBerryTree_2), + obj_frame_tiles(gMapObjectPic_CheriBerryTree_3), + obj_frame_tiles(gMapObjectPic_CheriBerryTree_4), + obj_frame_tiles(gMapObjectPic_CheriBerryTree_5) +}; + +const u8 gBerryTreePaletteSlotTable_Cheri[] = {3, 4, 4, 4, 4}; + +const struct SpriteFrameImage gMapObjectPicTable_FigyBerryTree[] = { + obj_frame_tiles(gMapObjectPic_BerryTreeDirtPile), + obj_frame_tiles(gMapObjectPic_BerryTreeSprout_0), + obj_frame_tiles(gMapObjectPic_BerryTreeSprout_1), + obj_frame_tiles(gMapObjectPic_FigyBerryTree_0), + obj_frame_tiles(gMapObjectPic_FigyBerryTree_1), + obj_frame_tiles(gMapObjectPic_FigyBerryTree_2), + obj_frame_tiles(gMapObjectPic_FigyBerryTree_3), + obj_frame_tiles(gMapObjectPic_FigyBerryTree_4), + obj_frame_tiles(gMapObjectPic_FigyBerryTree_5) +}; + +const u8 gBerryTreePaletteSlotTable_Figy[] = {3, 4, 3, 3, 3}; + +const struct SpriteFrameImage gMapObjectPicTable_MagoBerryTree[] = { + obj_frame_tiles(gMapObjectPic_BerryTreeDirtPile), + obj_frame_tiles(gMapObjectPic_BerryTreeSprout_0), + obj_frame_tiles(gMapObjectPic_BerryTreeSprout_1), + obj_frame_tiles(gMapObjectPic_MagoBerryTree_0), + obj_frame_tiles(gMapObjectPic_MagoBerryTree_1), + obj_frame_tiles(gMapObjectPic_MagoBerryTree_2), + obj_frame_tiles(gMapObjectPic_MagoBerryTree_3), + obj_frame_tiles(gMapObjectPic_MagoBerryTree_4), + obj_frame_tiles(gMapObjectPic_MagoBerryTree_5) +}; + +const u8 gBerryTreePaletteSlotTable_Mago[] = {3, 4, 3, 3, 3}; + +const struct SpriteFrameImage gMapObjectPicTable_LumBerryTree[] = { + obj_frame_tiles(gMapObjectPic_BerryTreeDirtPile), + obj_frame_tiles(gMapObjectPic_BerryTreeSprout_0), + obj_frame_tiles(gMapObjectPic_BerryTreeSprout_1), + obj_frame_tiles(gMapObjectPic_LumBerryTree_0), + obj_frame_tiles(gMapObjectPic_LumBerryTree_1), + obj_frame_tiles(gMapObjectPic_LumBerryTree_2), + obj_frame_tiles(gMapObjectPic_LumBerryTree_3), + obj_frame_tiles(gMapObjectPic_LumBerryTree_4), + obj_frame_tiles(gMapObjectPic_LumBerryTree_5) +}; + +const u8 gBerryTreePaletteSlotTable_Lum[] = {3, 4, 4, 4, 4}; + +const struct SpriteFrameImage gMapObjectPicTable_RazzBerryTree[] = { + obj_frame_tiles(gMapObjectPic_BerryTreeDirtPile), + obj_frame_tiles(gMapObjectPic_BerryTreeSprout_0), + obj_frame_tiles(gMapObjectPic_BerryTreeSprout_1), + obj_frame_tiles(gMapObjectPic_RazzBerryTree_0), + obj_frame_tiles(gMapObjectPic_RazzBerryTree_1), + obj_frame_tiles(gMapObjectPic_RazzBerryTree_2), + obj_frame_tiles(gMapObjectPic_RazzBerryTree_3), + obj_frame_tiles(gMapObjectPic_RazzBerryTree_4), + obj_frame_tiles(gMapObjectPic_RazzBerryTree_5) +}; + +const u8 gBerryTreePaletteSlotTable_Razz[] = {3, 4, 4, 4, 4}; + +const struct SpriteFrameImage gMapObjectPicTable_GrepaBerryTree[] = { + obj_frame_tiles(gMapObjectPic_BerryTreeDirtPile), + obj_frame_tiles(gMapObjectPic_BerryTreeSprout_0), + obj_frame_tiles(gMapObjectPic_BerryTreeSprout_1), + obj_frame_tiles(gMapObjectPic_GrepaBerryTree_0), + obj_frame_tiles(gMapObjectPic_GrepaBerryTree_1), + obj_frame_tiles(gMapObjectPic_GrepaBerryTree_2), + obj_frame_tiles(gMapObjectPic_GrepaBerryTree_3), + obj_frame_tiles(gMapObjectPic_GrepaBerryTree_4), + obj_frame_tiles(gMapObjectPic_GrepaBerryTree_5) +}; + +const u8 gBerryTreePaletteSlotTable_Grepa[] = {3, 4, 3, 3, 3}; + +const struct SpriteFrameImage gMapObjectPicTable_RabutaBerryTree[] = { + obj_frame_tiles(gMapObjectPic_BerryTreeDirtPile), + obj_frame_tiles(gMapObjectPic_BerryTreeSprout_0), + obj_frame_tiles(gMapObjectPic_BerryTreeSprout_1), + obj_frame_tiles(gMapObjectPic_RabutaBerryTree_0), + obj_frame_tiles(gMapObjectPic_RabutaBerryTree_1), + obj_frame_tiles(gMapObjectPic_RabutaBerryTree_2), + obj_frame_tiles(gMapObjectPic_RabutaBerryTree_3), + obj_frame_tiles(gMapObjectPic_RabutaBerryTree_4), + obj_frame_tiles(gMapObjectPic_RabutaBerryTree_5) +}; + +const u8 gBerryTreePaletteSlotTable_Rabuta[] = {3, 4, 4, 4, 4}; + +const struct SpriteFrameImage gMapObjectPicTable_NomelBerryTree[] = { + obj_frame_tiles(gMapObjectPic_BerryTreeDirtPile), + obj_frame_tiles(gMapObjectPic_BerryTreeSprout_0), + obj_frame_tiles(gMapObjectPic_BerryTreeSprout_1), + obj_frame_tiles(gMapObjectPic_NomelBerryTree_0), + obj_frame_tiles(gMapObjectPic_NomelBerryTree_1), + obj_frame_tiles(gMapObjectPic_NomelBerryTree_2), + obj_frame_tiles(gMapObjectPic_NomelBerryTree_3), + obj_frame_tiles(gMapObjectPic_NomelBerryTree_4), + obj_frame_tiles(gMapObjectPic_NomelBerryTree_5) +}; + +const u8 gBerryTreePaletteSlotTable_Nomel[] = {3, 4, 3, 3, 3}; + +const struct SpriteFrameImage gMapObjectPicTable_LeppaBerryTree[] = { + obj_frame_tiles(gMapObjectPic_BerryTreeDirtPile), + obj_frame_tiles(gMapObjectPic_BerryTreeSprout_0), + obj_frame_tiles(gMapObjectPic_BerryTreeSprout_1), + obj_frame_tiles(gMapObjectPic_LeppaBerryTree_0), + obj_frame_tiles(gMapObjectPic_LeppaBerryTree_1), + obj_frame_tiles(gMapObjectPic_LeppaBerryTree_2), + obj_frame_tiles(gMapObjectPic_LeppaBerryTree_3), + obj_frame_tiles(gMapObjectPic_LeppaBerryTree_4), + obj_frame_tiles(gMapObjectPic_LeppaBerryTree_5) +}; + +const u8 gBerryTreePaletteSlotTable_Leppa[] = {3, 4, 3, 3, 3}; + +const struct SpriteFrameImage gMapObjectPicTable_LiechiBerryTree[] = { + obj_frame_tiles(gMapObjectPic_BerryTreeDirtPile), + obj_frame_tiles(gMapObjectPic_BerryTreeSprout_0), + obj_frame_tiles(gMapObjectPic_BerryTreeSprout_1), + obj_frame_tiles(gMapObjectPic_LiechiBerryTree_0), + obj_frame_tiles(gMapObjectPic_LiechiBerryTree_1), + obj_frame_tiles(gMapObjectPic_LiechiBerryTree_2), + obj_frame_tiles(gMapObjectPic_LiechiBerryTree_3), + obj_frame_tiles(gMapObjectPic_LiechiBerryTree_4), + obj_frame_tiles(gMapObjectPic_LiechiBerryTree_5) +}; + +const u8 gBerryTreePaletteSlotTable_Liechi[] = {3, 4, 4, 4, 4}; + +const struct SpriteFrameImage gMapObjectPicTable_HondewBerryTree[] = { + obj_frame_tiles(gMapObjectPic_BerryTreeDirtPile), + obj_frame_tiles(gMapObjectPic_BerryTreeSprout_0), + obj_frame_tiles(gMapObjectPic_BerryTreeSprout_1), + obj_frame_tiles(gMapObjectPic_HondewBerryTree_0), + obj_frame_tiles(gMapObjectPic_HondewBerryTree_1), + obj_frame_tiles(gMapObjectPic_HondewBerryTree_2), + obj_frame_tiles(gMapObjectPic_HondewBerryTree_3), + obj_frame_tiles(gMapObjectPic_HondewBerryTree_4), + obj_frame_tiles(gMapObjectPic_HondewBerryTree_5) +}; + +const u8 gBerryTreePaletteSlotTable_Hondew[] = {3, 4, 5, 5, 5}; + +const struct SpriteFrameImage gMapObjectPicTable_AguavBerryTree[] = { + obj_frame_tiles(gMapObjectPic_BerryTreeDirtPile), + obj_frame_tiles(gMapObjectPic_BerryTreeSprout_0), + obj_frame_tiles(gMapObjectPic_BerryTreeSprout_1), + obj_frame_tiles(gMapObjectPic_AguavBerryTree_0), + obj_frame_tiles(gMapObjectPic_AguavBerryTree_1), + obj_frame_tiles(gMapObjectPic_AguavBerryTree_2), + obj_frame_tiles(gMapObjectPic_AguavBerryTree_3), + obj_frame_tiles(gMapObjectPic_AguavBerryTree_4), + obj_frame_tiles(gMapObjectPic_AguavBerryTree_5) +}; + +const u8 gBerryTreePaletteSlotTable_Aguav[] = {3, 4, 4, 4, 4}; + +const struct SpriteFrameImage gMapObjectPicTable_WikiBerryTree[] = { + obj_frame_tiles(gMapObjectPic_BerryTreeDirtPile), + obj_frame_tiles(gMapObjectPic_BerryTreeSprout_0), + obj_frame_tiles(gMapObjectPic_BerryTreeSprout_1), + obj_frame_tiles(gMapObjectPic_WikiBerryTree_0), + obj_frame_tiles(gMapObjectPic_WikiBerryTree_1), + obj_frame_tiles(gMapObjectPic_WikiBerryTree_2), + obj_frame_tiles(gMapObjectPic_WikiBerryTree_3), + obj_frame_tiles(gMapObjectPic_WikiBerryTree_4), + obj_frame_tiles(gMapObjectPic_WikiBerryTree_5) +}; + +const u8 gBerryTreePaletteSlotTable_Wiki[] = {3, 4, 3, 3, 3}; + +const struct SpriteFrameImage gMapObjectPicTable_PomegBerryTree[] = { + obj_frame_tiles(gMapObjectPic_BerryTreeDirtPile), + obj_frame_tiles(gMapObjectPic_BerryTreeSprout_0), + obj_frame_tiles(gMapObjectPic_BerryTreeSprout_1), + obj_frame_tiles(gMapObjectPic_PomegBerryTree_0), + obj_frame_tiles(gMapObjectPic_PomegBerryTree_1), + obj_frame_tiles(gMapObjectPic_PomegBerryTree_2), + obj_frame_tiles(gMapObjectPic_PomegBerryTree_3), + obj_frame_tiles(gMapObjectPic_PomegBerryTree_4), + obj_frame_tiles(gMapObjectPic_PomegBerryTree_5) +}; + +const u8 gBerryTreePaletteSlotTable_Pomeg[] = {3, 4, 3, 3, 3}; + +const struct SpriteFrameImage gMapObjectPicTable_RawstBerryTree[] = { + obj_frame_tiles(gMapObjectPic_BerryTreeDirtPile), + obj_frame_tiles(gMapObjectPic_BerryTreeSprout_0), + obj_frame_tiles(gMapObjectPic_BerryTreeSprout_1), + obj_frame_tiles(gMapObjectPic_RawstBerryTree_0), + obj_frame_tiles(gMapObjectPic_RawstBerryTree_1), + obj_frame_tiles(gMapObjectPic_RawstBerryTree_2), + obj_frame_tiles(gMapObjectPic_RawstBerryTree_3), + obj_frame_tiles(gMapObjectPic_RawstBerryTree_4), + obj_frame_tiles(gMapObjectPic_RawstBerryTree_5) +}; + +const u8 gBerryTreePaletteSlotTable_Rawst[] = {3, 4, 4, 4, 4}; + +const struct SpriteFrameImage gMapObjectPicTable_SpelonBerryTree[] = { + obj_frame_tiles(gMapObjectPic_BerryTreeDirtPile), + obj_frame_tiles(gMapObjectPic_BerryTreeSprout_0), + obj_frame_tiles(gMapObjectPic_BerryTreeSprout_1), + obj_frame_tiles(gMapObjectPic_SpelonBerryTree_0), + obj_frame_tiles(gMapObjectPic_SpelonBerryTree_1), + obj_frame_tiles(gMapObjectPic_SpelonBerryTree_2), + obj_frame_tiles(gMapObjectPic_SpelonBerryTree_3), + obj_frame_tiles(gMapObjectPic_SpelonBerryTree_4), + obj_frame_tiles(gMapObjectPic_SpelonBerryTree_5) +}; + +const u8 gBerryTreePaletteSlotTable_Spelon[] = {3, 4, 3, 3, 3}; + +const struct SpriteFrameImage gMapObjectPicTable_ChestoBerryTree[] = { + obj_frame_tiles(gMapObjectPic_BerryTreeDirtPile), + obj_frame_tiles(gMapObjectPic_BerryTreeSprout_0), + obj_frame_tiles(gMapObjectPic_BerryTreeSprout_1), + obj_frame_tiles(gMapObjectPic_ChestoBerryTree_0), + obj_frame_tiles(gMapObjectPic_ChestoBerryTree_1), + obj_frame_tiles(gMapObjectPic_ChestoBerryTree_2), + obj_frame_tiles(gMapObjectPic_ChestoBerryTree_3), + obj_frame_tiles(gMapObjectPic_ChestoBerryTree_4), + obj_frame_tiles(gMapObjectPic_ChestoBerryTree_5) +}; + +const u8 gBerryTreePaletteSlotTable_Chesto[] = {3, 4, 2, 2, 2}; + +const struct SpriteFrameImage gMapObjectPicTable_OranBerryTree[] = { + obj_frame_tiles(gMapObjectPic_BerryTreeDirtPile), + obj_frame_tiles(gMapObjectPic_BerryTreeSprout_0), + obj_frame_tiles(gMapObjectPic_BerryTreeSprout_1), + obj_frame_tiles(gMapObjectPic_OranBerryTree_0), + obj_frame_tiles(gMapObjectPic_OranBerryTree_1), + obj_frame_tiles(gMapObjectPic_OranBerryTree_2), + obj_frame_tiles(gMapObjectPic_OranBerryTree_3), + obj_frame_tiles(gMapObjectPic_OranBerryTree_4), + obj_frame_tiles(gMapObjectPic_OranBerryTree_5) +}; + +const u8 gBerryTreePaletteSlotTable_Oran[] = {3, 4, 2, 2, 2}; + +const struct SpriteFrameImage gMapObjectPicTable_PersimBerryTree[] = { + obj_frame_tiles(gMapObjectPic_BerryTreeDirtPile), + obj_frame_tiles(gMapObjectPic_BerryTreeSprout_0), + obj_frame_tiles(gMapObjectPic_BerryTreeSprout_1), + obj_frame_tiles(gMapObjectPic_PersimBerryTree_0), + obj_frame_tiles(gMapObjectPic_PersimBerryTree_1), + obj_frame_tiles(gMapObjectPic_PersimBerryTree_2), + obj_frame_tiles(gMapObjectPic_PersimBerryTree_3), + obj_frame_tiles(gMapObjectPic_PersimBerryTree_4), + obj_frame_tiles(gMapObjectPic_PersimBerryTree_5) +}; + +const u8 gBerryTreePaletteSlotTable_Persim[] = {3, 4, 2, 2, 2}; + +const struct SpriteFrameImage gMapObjectPicTable_SitrusBerryTree[] = { + obj_frame_tiles(gMapObjectPic_BerryTreeDirtPile), + obj_frame_tiles(gMapObjectPic_BerryTreeSprout_0), + obj_frame_tiles(gMapObjectPic_BerryTreeSprout_1), + obj_frame_tiles(gMapObjectPic_SitrusBerryTree_0), + obj_frame_tiles(gMapObjectPic_SitrusBerryTree_1), + obj_frame_tiles(gMapObjectPic_SitrusBerryTree_2), + obj_frame_tiles(gMapObjectPic_SitrusBerryTree_3), + obj_frame_tiles(gMapObjectPic_SitrusBerryTree_4), + obj_frame_tiles(gMapObjectPic_SitrusBerryTree_5) +}; + +const u8 gBerryTreePaletteSlotTable_Sitrus[] = {3, 4, 4, 4, 4}; + +const struct SpriteFrameImage gMapObjectPicTable_AspearBerryTree[] = { + obj_frame_tiles(gMapObjectPic_BerryTreeDirtPile), + obj_frame_tiles(gMapObjectPic_BerryTreeSprout_0), + obj_frame_tiles(gMapObjectPic_BerryTreeSprout_1), + obj_frame_tiles(gMapObjectPic_AspearBerryTree_0), + obj_frame_tiles(gMapObjectPic_AspearBerryTree_1), + obj_frame_tiles(gMapObjectPic_AspearBerryTree_2), + obj_frame_tiles(gMapObjectPic_AspearBerryTree_3), + obj_frame_tiles(gMapObjectPic_AspearBerryTree_4), + obj_frame_tiles(gMapObjectPic_AspearBerryTree_5) +}; + +const u8 gBerryTreePaletteSlotTable_Aspear[] = {3, 4, 3, 3, 3}; + +const struct SpriteFrameImage gMapObjectPicTable_PamtreBerryTree[] = { + obj_frame_tiles(gMapObjectPic_BerryTreeDirtPile), + obj_frame_tiles(gMapObjectPic_BerryTreeSprout_0), + obj_frame_tiles(gMapObjectPic_BerryTreeSprout_1), + obj_frame_tiles(gMapObjectPic_PamtreBerryTree_0), + obj_frame_tiles(gMapObjectPic_PamtreBerryTree_1), + obj_frame_tiles(gMapObjectPic_PamtreBerryTree_2), + obj_frame_tiles(gMapObjectPic_PamtreBerryTree_3), + obj_frame_tiles(gMapObjectPic_PamtreBerryTree_4), + obj_frame_tiles(gMapObjectPic_PamtreBerryTree_5) +}; + +const u8 gBerryTreePaletteSlotTable_Pamtre[] = {3, 4, 2, 2, 2}; + +const struct SpriteFrameImage gMapObjectPicTable_CornnBerryTree[] = { + obj_frame_tiles(gMapObjectPic_BerryTreeDirtPile), + obj_frame_tiles(gMapObjectPic_BerryTreeSprout_0), + obj_frame_tiles(gMapObjectPic_BerryTreeSprout_1), + obj_frame_tiles(gMapObjectPic_CornnBerryTree_0), + obj_frame_tiles(gMapObjectPic_CornnBerryTree_1), + obj_frame_tiles(gMapObjectPic_CornnBerryTree_2), + obj_frame_tiles(gMapObjectPic_CornnBerryTree_3), + obj_frame_tiles(gMapObjectPic_CornnBerryTree_4), + obj_frame_tiles(gMapObjectPic_CornnBerryTree_5) +}; + +const u8 gBerryTreePaletteSlotTable_Cornn[] = {3, 4, 2, 2, 2}; + +const struct SpriteFrameImage gMapObjectPicTable_LansatBerryTree[] = { + obj_frame_tiles(gMapObjectPic_BerryTreeDirtPile), + obj_frame_tiles(gMapObjectPic_BerryTreeSprout_0), + obj_frame_tiles(gMapObjectPic_BerryTreeSprout_1), + obj_frame_tiles(gMapObjectPic_LansatBerryTree_0), + obj_frame_tiles(gMapObjectPic_LansatBerryTree_1), + obj_frame_tiles(gMapObjectPic_LansatBerryTree_2), + obj_frame_tiles(gMapObjectPic_LansatBerryTree_3), + obj_frame_tiles(gMapObjectPic_LansatBerryTree_4), + obj_frame_tiles(gMapObjectPic_LansatBerryTree_5) +}; + +const u8 gBerryTreePaletteSlotTable_Lansat[] = {3, 4, 2, 2, 2}; + +const struct SpriteFrameImage gMapObjectPicTable_DurinBerryTree[] = { + obj_frame_tiles(gMapObjectPic_BerryTreeDirtPile), + obj_frame_tiles(gMapObjectPic_BerryTreeSprout_0), + obj_frame_tiles(gMapObjectPic_BerryTreeSprout_1), + obj_frame_tiles(gMapObjectPic_DurinBerryTree_0), + obj_frame_tiles(gMapObjectPic_DurinBerryTree_1), + obj_frame_tiles(gMapObjectPic_DurinBerryTree_2), + obj_frame_tiles(gMapObjectPic_DurinBerryTree_3), + obj_frame_tiles(gMapObjectPic_DurinBerryTree_4), + obj_frame_tiles(gMapObjectPic_DurinBerryTree_5) +}; + +const u8 gBerryTreePaletteSlotTable_Durin[] = {3, 4, 4, 4, 4}; + +const struct SpriteFrameImage gMapObjectPicTable_TamatoBerryTree[] = { + obj_frame_tiles(gMapObjectPic_BerryTreeDirtPile), + obj_frame_tiles(gMapObjectPic_BerryTreeSprout_0), + obj_frame_tiles(gMapObjectPic_BerryTreeSprout_1), + obj_frame_tiles(gMapObjectPic_TamatoBerryTree_0), + obj_frame_tiles(gMapObjectPic_TamatoBerryTree_1), + obj_frame_tiles(gMapObjectPic_TamatoBerryTree_2), + obj_frame_tiles(gMapObjectPic_TamatoBerryTree_3), + obj_frame_tiles(gMapObjectPic_TamatoBerryTree_4), + obj_frame_tiles(gMapObjectPic_TamatoBerryTree_5) +}; + +const u8 gBerryTreePaletteSlotTable_Tamato[] = {3, 4, 2, 2, 2}; + +const u8 gDeadBerryTreeGraphicsIdTable[] = {MAP_OBJ_GFX_BERRY_TREE_EARLY_STAGES, MAP_OBJ_GFX_BERRY_TREE_EARLY_STAGES, MAP_OBJ_GFX_BERRY_TREE_EARLY_STAGES, MAP_OBJ_GFX_BERRY_TREE_EARLY_STAGES, MAP_OBJ_GFX_BERRY_TREE_EARLY_STAGES}; + +const u8 gBerryTreeGraphicsIdTable[] = {MAP_OBJ_GFX_BERRY_TREE_EARLY_STAGES, MAP_OBJ_GFX_BERRY_TREE_EARLY_STAGES, MAP_OBJ_GFX_BERRY_TREE_LATE_STAGES, MAP_OBJ_GFX_BERRY_TREE_LATE_STAGES, MAP_OBJ_GFX_BERRY_TREE_LATE_STAGES}; + +const struct SpriteFrameImage *const gBerryTreePicTablePointers[] = { + gMapObjectPicTable_CheriBerryTree, + gMapObjectPicTable_ChestoBerryTree, + gMapObjectPicTable_PechaBerryTree, + gMapObjectPicTable_RawstBerryTree, + gMapObjectPicTable_AspearBerryTree, + gMapObjectPicTable_LeppaBerryTree, + gMapObjectPicTable_OranBerryTree, + gMapObjectPicTable_PersimBerryTree, + gMapObjectPicTable_LumBerryTree, + gMapObjectPicTable_SitrusBerryTree, + gMapObjectPicTable_FigyBerryTree, + gMapObjectPicTable_WikiBerryTree, + gMapObjectPicTable_MagoBerryTree, + gMapObjectPicTable_AguavBerryTree, + gMapObjectPicTable_IapapaBerryTree, + gMapObjectPicTable_RazzBerryTree, + gMapObjectPicTable_RazzBerryTree, + gMapObjectPicTable_MagoBerryTree, + gMapObjectPicTable_WepearBerryTree, + gMapObjectPicTable_IapapaBerryTree, + gMapObjectPicTable_PomegBerryTree, + gMapObjectPicTable_KelpsyBerryTree, + gMapObjectPicTable_WepearBerryTree, + gMapObjectPicTable_HondewBerryTree, + gMapObjectPicTable_GrepaBerryTree, + gMapObjectPicTable_TamatoBerryTree, + gMapObjectPicTable_CornnBerryTree, + gMapObjectPicTable_PomegBerryTree, + gMapObjectPicTable_RabutaBerryTree, + gMapObjectPicTable_NomelBerryTree, + gMapObjectPicTable_SpelonBerryTree, + gMapObjectPicTable_PamtreBerryTree, + gMapObjectPicTable_RabutaBerryTree, + gMapObjectPicTable_DurinBerryTree, + gMapObjectPicTable_HondewBerryTree, + gMapObjectPicTable_LiechiBerryTree, + gMapObjectPicTable_HondewBerryTree, + gMapObjectPicTable_AguavBerryTree, + gMapObjectPicTable_PomegBerryTree, + gMapObjectPicTable_GrepaBerryTree, + gMapObjectPicTable_LansatBerryTree, + gMapObjectPicTable_CornnBerryTree, + gMapObjectPicTable_DurinBerryTree +}; + +const u8 *const gBerryTreePaletteSlotTablePointers[] = { + gBerryTreePaletteSlotTable_Cheri, + gBerryTreePaletteSlotTable_Chesto, + gBerryTreePaletteSlotTable_Pecha, + gBerryTreePaletteSlotTable_Rawst, + gBerryTreePaletteSlotTable_Aspear, + gBerryTreePaletteSlotTable_Leppa, + gBerryTreePaletteSlotTable_Oran, + gBerryTreePaletteSlotTable_Persim, + gBerryTreePaletteSlotTable_Lum, + gBerryTreePaletteSlotTable_Sitrus, + gBerryTreePaletteSlotTable_Figy, + gBerryTreePaletteSlotTable_Wiki, + gBerryTreePaletteSlotTable_Mago, + gBerryTreePaletteSlotTable_Aguav, + gBerryTreePaletteSlotTable_Iapapa, + gBerryTreePaletteSlotTable_Razz, + gBerryTreePaletteSlotTable_Razz, + gBerryTreePaletteSlotTable_Mago, + gBerryTreePaletteSlotTable_Wepear, + gBerryTreePaletteSlotTable_Iapapa, + gBerryTreePaletteSlotTable_Pomeg, + gBerryTreePaletteSlotTable_Kelpsy, + gBerryTreePaletteSlotTable_Wepear, + gBerryTreePaletteSlotTable_Hondew, + gBerryTreePaletteSlotTable_Grepa, + gBerryTreePaletteSlotTable_Tamato, + gBerryTreePaletteSlotTable_Cornn, + gBerryTreePaletteSlotTable_Pomeg, + gBerryTreePaletteSlotTable_Rabuta, + gBerryTreePaletteSlotTable_Nomel, + gBerryTreePaletteSlotTable_Spelon, + gBerryTreePaletteSlotTable_Pamtre, + gBerryTreePaletteSlotTable_Rabuta, + gBerryTreePaletteSlotTable_Durin, + gBerryTreePaletteSlotTable_Hondew, + gBerryTreePaletteSlotTable_Liechi, + gBerryTreePaletteSlotTable_Hondew, + gBerryTreePaletteSlotTable_Aguav, + gBerryTreePaletteSlotTable_Pomeg, + gBerryTreePaletteSlotTable_Grepa, + gBerryTreePaletteSlotTable_Lansat, + gBerryTreePaletteSlotTable_Cornn, + gBerryTreePaletteSlotTable_Durin +}; + +const u8 *const gBerryTreeGraphicsIdTablePointers[] = { + gBerryTreeGraphicsIdTable, + gBerryTreeGraphicsIdTable, + gBerryTreeGraphicsIdTable, + gBerryTreeGraphicsIdTable, + gBerryTreeGraphicsIdTable, + gBerryTreeGraphicsIdTable, + gBerryTreeGraphicsIdTable, + gBerryTreeGraphicsIdTable, + gBerryTreeGraphicsIdTable, + gBerryTreeGraphicsIdTable, + gBerryTreeGraphicsIdTable, + gBerryTreeGraphicsIdTable, + gBerryTreeGraphicsIdTable, + gBerryTreeGraphicsIdTable, + gBerryTreeGraphicsIdTable, + gBerryTreeGraphicsIdTable, + gBerryTreeGraphicsIdTable, + gBerryTreeGraphicsIdTable, + gBerryTreeGraphicsIdTable, + gBerryTreeGraphicsIdTable, + gBerryTreeGraphicsIdTable, + gBerryTreeGraphicsIdTable, + gBerryTreeGraphicsIdTable, + gBerryTreeGraphicsIdTable, + gBerryTreeGraphicsIdTable, + gBerryTreeGraphicsIdTable, + gBerryTreeGraphicsIdTable, + gBerryTreeGraphicsIdTable, + gBerryTreeGraphicsIdTable, + gBerryTreeGraphicsIdTable, + gBerryTreeGraphicsIdTable, + gBerryTreeGraphicsIdTable, + gBerryTreeGraphicsIdTable, + gBerryTreeGraphicsIdTable, + gBerryTreeGraphicsIdTable, + gBerryTreeGraphicsIdTable, + gBerryTreeGraphicsIdTable, + gBerryTreeGraphicsIdTable, + gBerryTreeGraphicsIdTable, + gBerryTreeGraphicsIdTable, + gBerryTreeGraphicsIdTable, + gBerryTreeGraphicsIdTable, + gBerryTreeGraphicsIdTable, + gBerryTreeGraphicsIdTable, + gBerryTreeGraphicsIdTable, + gBerryTreeGraphicsIdTable +}; + +#endif //POKERUBY_BERRY_TREE_GRAPHICS_TABLES_H diff --git a/src/data/field_map_obj/callback_subroutine_pointers.h b/src/data/field_map_obj/callback_subroutine_pointers.h new file mode 100644 index 000000000..a324066b7 --- /dev/null +++ b/src/data/field_map_obj/callback_subroutine_pointers.h @@ -0,0 +1,442 @@ +// + +// + +#ifndef POKERUBY_CALLBACK_SUBROUTINE_POINTERS_H +#define POKERUBY_CALLBACK_SUBROUTINE_POINTERS_H + + +u8 (*const gUnknown_08375224[])(struct MapObject *, struct Sprite *) = { + sub_805C8F0, + sub_805C904, + sub_805C930, + sub_805C96C, + sub_805C98C, + sub_805C9D8, + sub_805CA08 +}; + +const u8 gUnknown_08375240[] = {DIR_SOUTH, DIR_NORTH, DIR_WEST, DIR_EAST}; + +u8 (*const gUnknown_08375244[])(s16, s16, s16, s16) = { + sub_805CAAC, + sub_805CADC, + sub_805CAEC, + sub_805CB00, + sub_805CB5C, + sub_805CBB8, + sub_805CC14, + sub_805CC70, + sub_805CCAC, + sub_805CCE8, + sub_805CD24 +}; + +u8 (*const gUnknown_08375270[])(struct MapObject *, struct Sprite *) = { + sub_805CE2C, + sub_805CE40, + sub_805CE6C, + sub_805CEB0, + sub_805CEE0 +}; + +u8 (*const gUnknown_08375284[])(struct MapObject *, struct Sprite *) = { + sub_805CF6C, + sub_805CF80, + sub_805CFAC, + sub_805CFE8, + sub_805D008, + sub_805D054, + sub_805D084 +}; + +const u8 gUnknown_083752A0[] = {DIR_SOUTH, DIR_NORTH}; + +u8 (*const gUnknown_083752A4[])(struct MapObject *, struct Sprite *) = { + sub_805D0F0, + sub_805D104, + sub_805D130, + sub_805D16C, + sub_805D18C, + sub_805D1D8, + sub_805D208 +}; + +const u8 gUnknown_083752C0[] = {DIR_WEST, DIR_EAST}; + +u8 (*const gUnknown_083752C4[])(struct MapObject *, struct Sprite *) = { + sub_805D274, + sub_805D2A0, + sub_805D2C0 +}; + +u8 (*const gUnknown_083752D0[])(struct MapObject *, struct Sprite *) = { + do_berry_tree_growth_sparkle_1, + sub_805D3EC, + do_berry_tree_growth_sparkle_2, + sub_805D458, + sub_805D4A8 +}; + +u8 (*const gUnknown_083752E4[])(struct MapObject *, struct Sprite *) = { + sub_805D538, + sub_805D54C, + sub_805D578, + sub_805D5BC, + sub_805D5EC +}; + +u8 (*const gUnknown_083752F8[])(struct MapObject *, struct Sprite *) = { + sub_805D678, + sub_805D68C, + sub_805D6B8, + sub_805D6FC, + sub_805D72C +}; + +u8 (*const gUnknown_0837530C[])(struct MapObject *, struct Sprite *) = { + sub_805D7B8, + sub_805D7CC, + sub_805D7F8, + sub_805D83C, + sub_805D86C +}; + +const u8 gUnknown_08375320[] = {DIR_NORTH, DIR_WEST}; + +u8 (*const gUnknown_08375324[])(struct MapObject *, struct Sprite *) = { + sub_805D8F8, + sub_805D90C, + sub_805D938, + sub_805D97C, + sub_805D9AC +}; + +const u8 gUnknown_08375338[] = {DIR_NORTH, DIR_EAST}; + +u8 (*const gUnknown_0837533C[])(struct MapObject *, struct Sprite *) = { + sub_805DA38, + sub_805DA4C, + sub_805DA78, + sub_805DABC, + sub_805DAEC +}; + +const u8 gUnknown_08375350[] = {DIR_SOUTH, DIR_WEST}; + +u8 (*const gUnknown_08375354[])(struct MapObject *, struct Sprite *) = { + sub_805DB78, + sub_805DB8C, + sub_805DBB8, + sub_805DBFC, + sub_805DC2C +}; + +const u8 gUnknown_08375368[] = {DIR_SOUTH, DIR_EAST}; + +u8 (*const gUnknown_0837536C[])(struct MapObject *, struct Sprite *) = { + sub_805DCB8, + sub_805DCCC, + sub_805DCF8, + sub_805DD3C, + sub_805DD6C +}; + +const u8 gUnknown_08375380[] = {DIR_NORTH, DIR_SOUTH, DIR_WEST, DIR_SOUTH}; + +u8 (*const gUnknown_08375384[])(struct MapObject *, struct Sprite *) = { + sub_805DDF8, + sub_805DE0C, + sub_805DE38, + sub_805DE7C, + sub_805DEAC +}; + +const u8 gUnknown_08375398[] = {DIR_SOUTH, DIR_NORTH, DIR_EAST, DIR_SOUTH}; + +u8 (*const gUnknown_0837539C[])(struct MapObject *, struct Sprite *) = { + sub_805DF38, + sub_805DF4C, + sub_805DF78, + sub_805DFBC, + sub_805DFEC +}; + +const u8 gUnknown_083753B0[] = {DIR_NORTH, DIR_WEST, DIR_EAST, DIR_NORTH}; + +u8 (*const gUnknown_083753B4[])(struct MapObject *, struct Sprite *) = { + sub_805E078, + sub_805E08C, + sub_805E0B8, + sub_805E0FC, + sub_805E12C +}; + +const u8 gUnknown_083753C8[] = {DIR_WEST, DIR_EAST, DIR_SOUTH, DIR_SOUTH}; + +u8 (*const gUnknown_083753CC[])(struct MapObject *, struct Sprite *) = { + sub_805E1B8, + sub_805E1E4, + sub_805E208, + sub_805E234 +}; + +const u8 gUnknown_083753DC[] = {DIR_SOUTH, DIR_EAST, DIR_WEST, DIR_SOUTH, DIR_NORTH}; + +u8 (*const gUnknown_083753E4[])(struct MapObject *, struct Sprite *) = { + sub_805E2BC, + sub_805E2E8, + sub_805E30C, + sub_805E338 +}; + +const u8 gUnknown_083753F4[] = {DIR_SOUTH, DIR_WEST, DIR_EAST, DIR_NORTH, DIR_SOUTH}; + +u8 (*const gUnknown_083753FC[])(struct MapObject *, struct Sprite *) = { + sub_805E3C0, + sub_805E3D4, + sub_805E40C, + sub_805E4C4 +}; + +u8 (*const gUnknown_0837540C[])(struct MapObject *, struct Sprite *) = { + sub_805E4EC, + sub_805E620, + sub_805E5B4 +}; + +const u8 gUnknown_08375418[] = {DIR_NORTH, DIR_EAST, DIR_WEST, DIR_SOUTH}; + +u8 (*const gUnknown_0837541C[])(struct MapObject *, struct Sprite *) = { + sub_805E4EC, + sub_805E6AC, + sub_805E5B4 +}; + +const u8 gUnknown_08375428[] = {DIR_EAST, DIR_WEST, DIR_SOUTH, DIR_NORTH}; +u8 (*const gUnknown_0837542C[])(struct MapObject *, struct Sprite *) = { + sub_805E4EC, + sub_805E738, + sub_805E5B4 +}; + +const u8 gUnknown_08375438[] = {DIR_SOUTH, DIR_NORTH, DIR_EAST, DIR_WEST}; + +u8 (*const gUnknown_0837543C[])(struct MapObject *, struct Sprite *) = { + sub_805E4EC, + sub_805E7C4, + sub_805E5B4 +}; + +const u8 gUnknown_08375448[] = {DIR_WEST, DIR_SOUTH, DIR_NORTH, DIR_EAST}; + +u8 (*const gUnknown_0837544C[])(struct MapObject *, struct Sprite *) = { + sub_805E4EC, + sub_805E850, + sub_805E5B4 +}; + +const u8 gUnknown_08375458[] = {DIR_NORTH, DIR_WEST, DIR_EAST, DIR_SOUTH}; + +u8 (*const gUnknown_0837545C[])(struct MapObject *, struct Sprite *) = { + sub_805E4EC, + sub_805E8DC, + sub_805E5B4 +}; + +const u8 gUnknown_08375468[] = {DIR_WEST, DIR_EAST, DIR_SOUTH, DIR_NORTH}; + +u8 (*const gUnknown_0837546C[])(struct MapObject *, struct Sprite *) = { + sub_805E4EC, + sub_805E968, + sub_805E5B4 +}; + +u8 (*const gUnknown_08375478[])(struct MapObject *, struct Sprite *) = { + sub_805E4EC, + sub_805E9F4, + sub_805E5B4 +}; + +const u8 gUnknown_08375484[] = {DIR_EAST, DIR_SOUTH, DIR_NORTH, DIR_WEST}; + +u8 (*const gUnknown_08375488[])(struct MapObject *, struct Sprite *) = { + sub_805E4EC, + sub_805EA80, + sub_805E5B4 +}; + +const u8 gUnknown_08375494[] = {DIR_WEST, DIR_NORTH, DIR_SOUTH, DIR_EAST}; + +u8 (*const gUnknown_08375498[])(struct MapObject *, struct Sprite *) = { + sub_805E4EC, + sub_805EB0C, + sub_805E5B4 +}; + +const u8 gUnknown_083754A4[] = {DIR_NORTH, DIR_SOUTH, DIR_EAST, DIR_WEST}; + +u8 (*const gUnknown_083754A8[])(struct MapObject *, struct Sprite *) = { + sub_805E4EC, + sub_805EB98, + sub_805E5B4 +}; + +const u8 gUnknown_083754B4[] = {DIR_EAST, DIR_WEST, DIR_NORTH, DIR_SOUTH}; + +u8 (*const gUnknown_083754B8[])(struct MapObject *, struct Sprite *) = { + sub_805E4EC, + sub_805EC24, + sub_805E5B4 +}; + +const u8 gUnknown_083754C4[] = {DIR_SOUTH, DIR_EAST, DIR_WEST, DIR_NORTH}; + +u8 (*const gUnknown_083754C8[])(struct MapObject *, struct Sprite *) = { + sub_805E4EC, + sub_805ECB0, + sub_805E5B4 +}; + +const u8 gUnknown_083754D4[] = {DIR_EAST, DIR_NORTH, DIR_SOUTH, DIR_WEST}; + +u8 (*const gUnknown_083754D8[])(struct MapObject *, struct Sprite *) = { + sub_805E4EC, + sub_805ED3C, + sub_805E5B4 +}; + +const u8 gUnknown_083754E4[] = {DIR_NORTH, DIR_SOUTH, DIR_WEST, DIR_EAST}; + +u8 (*const gUnknown_083754E8[])(struct MapObject *, struct Sprite *) = { + sub_805E4EC, + sub_805EDC8, + sub_805E5B4 +}; + +const u8 gUnknown_083754F4[] = {DIR_WEST, DIR_EAST, DIR_NORTH, DIR_SOUTH}; + +u8 (*const gUnknown_083754F8[])(struct MapObject *, struct Sprite *) = { + sub_805E4EC, + sub_805EE54, + sub_805E5B4 +}; + +const u8 gUnknown_08375504[] = {DIR_SOUTH, DIR_WEST, DIR_EAST, DIR_NORTH}; + +u8 (*const gUnknown_08375508[])(struct MapObject *, struct Sprite *) = { + sub_805E4EC, + sub_805EEE0, + sub_805E5B4 +}; + +const u8 gUnknown_08375514[] = {DIR_NORTH, DIR_WEST, DIR_SOUTH, DIR_EAST}; + +u8 (*const gUnknown_08375518[])(struct MapObject *, struct Sprite *) = { + sub_805E4EC, + sub_805EF6C, + sub_805E5B4 +}; + +const u8 gUnknown_08375524[] = {DIR_SOUTH, DIR_EAST, DIR_NORTH, DIR_WEST}; + +u8 (*const gUnknown_08375528[])(struct MapObject *, struct Sprite *) = { + sub_805E4EC, + sub_805EFF8, + sub_805E5B4 +}; + +const u8 gUnknown_08375534[] = {DIR_WEST, DIR_SOUTH, DIR_EAST, DIR_NORTH}; + +u8 (*const gUnknown_08375538[])(struct MapObject *, struct Sprite *) = { + sub_805E4EC, + sub_805F084, + sub_805E5B4 +}; + +const u8 gUnknown_08375544[] = {DIR_EAST, DIR_NORTH, DIR_WEST, DIR_SOUTH}; + +u8 (*const gUnknown_08375548[])(struct MapObject *, struct Sprite *) = { + sub_805E4EC, + sub_805F110, + sub_805E5B4 +}; + +const u8 gUnknown_08375554[] = {DIR_NORTH, DIR_EAST, DIR_SOUTH, DIR_WEST}; + +u8 (*const gUnknown_08375558[])(struct MapObject *, struct Sprite *) = { + sub_805E4EC, + sub_805F19C, + sub_805E5B4 +}; + +const u8 gUnknown_08375564[] = {DIR_SOUTH, DIR_WEST, DIR_NORTH, DIR_EAST}; + +u8 (*const gUnknown_08375568[])(struct MapObject *, struct Sprite *) = { + sub_805E4EC, + sub_805F228, + sub_805E5B4 +}; + +const u8 gUnknown_08375574[] = {DIR_WEST, DIR_NORTH, DIR_EAST, DIR_SOUTH}; + +u8 (*const gUnknown_08375578[])(struct MapObject *, struct Sprite *) = { + sub_805E4EC, + sub_805F2B4, + sub_805E5B4 +}; + +const u8 gUnknown_08375584[] = {DIR_EAST, DIR_SOUTH, DIR_WEST, DIR_NORTH}; + +u8 (*const gUnknown_08375588[])(struct MapObject *, struct Sprite *) = { + mss_npc_reset_oampriv3_1_unk2_unk3, + sub_805F364, + sub_805F3C4 +}; + +u8 (*const gUnknown_08375594[])(struct MapObject *, struct Sprite *, u8, bool8(u8)) = { + sub_805F3EC, + sub_805F3F0, + sub_805F438, + sub_805F4F0, + sub_805F5A8, + sub_805F660, + cph_IM_DIFFERENT, + sub_805F760, + oac_hopping, + sub_805F3EC, + sub_805F3EC +}; + +u8 (*const gUnknown_083755C0[])(struct MapObject *, struct Sprite *) = { + mss_npc_reset_oampriv3_1_unk2_unk3, + mss_08062EA4, + sub_805F3C4 +}; + +u8 (*const gUnknown_083755CC[])(struct MapObject *, struct Sprite *) = { + sub_805FAF8 +}; + +u8 (*const gUnknown_083755D0[])(struct MapObject *, struct Sprite *) = { + sub_805FB64, + sub_805FB04 +}; + +u8 (*const gUnknown_083755D8[])(struct MapObject *, struct Sprite *) = { + sub_805FBD4, + sub_805FB04 +}; + +u8 (*const gUnknown_083755E0[])(struct MapObject *, struct Sprite *) = { + sub_805FC44, + sub_805FB04 +}; + +u8 (*const gUnknown_083755E8[])(struct MapObject *, struct Sprite *) = { + sub_805FCB4, + sub_805FCE8, + sub_805FD08 +}; + +#endif //POKERUBY_CALLBACK_SUBROUTINE_POINTERS_H diff --git a/src/data/field_map_obj/field_effect_object_template_pointers.h b/src/data/field_map_obj/field_effect_object_template_pointers.h new file mode 100644 index 000000000..320af1ff8 --- /dev/null +++ b/src/data/field_map_obj/field_effect_object_template_pointers.h @@ -0,0 +1,84 @@ +// + +// + +#ifndef POKERUBY_FIELD_EFFECT_OBJECT_TEMPLATE_POINTERS_H +#define POKERUBY_FIELD_EFFECT_OBJECT_TEMPLATE_POINTERS_H + +const struct SpriteTemplate gFieldEffectSpriteTemplate_ShadowSmall; +const struct SpriteTemplate gFieldEffectSpriteTemplate_ShadowMedium; +const struct SpriteTemplate gFieldEffectSpriteTemplate_ShadowLarge; +const struct SpriteTemplate gFieldEffectSpriteTemplate_ShadowExtraLarge; +const struct SpriteTemplate gFieldEffectSpriteTemplate_TallGrass; +const struct SpriteTemplate gFieldEffectSpriteTemplate_Ripple; +const struct SpriteTemplate gFieldEffectSpriteTemplate_Ash; +const struct SpriteTemplate gFieldEffectSpriteTemplate_SurfBlob; +const struct SpriteTemplate gFieldEffectSpriteTemplate_Arrow; +const struct SpriteTemplate gFieldEffectSpriteTemplate_Dust; +const struct SpriteTemplate gFieldEffectSpriteTemplate_JumpTallGrass; +const struct SpriteTemplate gFieldEffectSpriteTemplate_SandFootprints; +const struct SpriteTemplate gFieldEffectSpriteTemplate_JumpBigSplash; +const struct SpriteTemplate gFieldEffectSpriteTemplate_Splash; +const struct SpriteTemplate gFieldEffectSpriteTemplate_JumpSmallSplash; +const struct SpriteTemplate gFieldEffectSpriteTemplate_LongGrass; +const struct SpriteTemplate gFieldEffectSpriteTemplate_JumpLongGrass; +const struct SpriteTemplate gFieldEffectSpriteTemplate_Unknown17; +const struct SpriteTemplate gFieldEffectSpriteTemplate_Unknown18; +const struct SpriteTemplate gFieldEffectSpriteTemplate_Unknown19; +const struct SpriteTemplate gFieldEffectSpriteTemplate_Unknown20; +const struct SpriteTemplate gFieldEffectSpriteTemplate_Unknown21; +const struct SpriteTemplate gFieldEffectSpriteTemplate_BerryTreeGrowthSparkle; +const struct SpriteTemplate gFieldEffectSpriteTemplate_DeepSandFootprints; +const struct SpriteTemplate gFieldEffectSpriteTemplate_TreeDisguise; +const struct SpriteTemplate gFieldEffectSpriteTemplate_MountainDisguise; +const struct SpriteTemplate gFieldEffectSpriteTemplate_Bird; +const struct SpriteTemplate gFieldEffectSpriteTemplate_BikeTireTracks; +const struct SpriteTemplate gFieldEffectSpriteTemplate_SandDisguise; +const struct SpriteTemplate gFieldEffectSpriteTemplate_SandPile; +const struct SpriteTemplate gFieldEffectSpriteTemplate_ShortGrass; +const struct SpriteTemplate gFieldEffectSpriteTemplate_HotSpringsWater; +const struct SpriteTemplate gFieldEffectSpriteTemplate_PopOutOfAsh; +const struct SpriteTemplate gFieldEffectSpriteTemplate_LavaridgeGymWarp; +const struct SpriteTemplate gFieldEffectSpriteTemplate_Bubbles; +const struct SpriteTemplate gFieldEffectSpriteTemplate_Sparkle; + +const struct SpriteTemplate *const gFieldEffectObjectTemplatePointers[] = { + &gFieldEffectSpriteTemplate_ShadowSmall, + &gFieldEffectSpriteTemplate_ShadowMedium, + &gFieldEffectSpriteTemplate_ShadowLarge, + &gFieldEffectSpriteTemplate_ShadowExtraLarge, + &gFieldEffectSpriteTemplate_TallGrass, + &gFieldEffectSpriteTemplate_Ripple, + &gFieldEffectSpriteTemplate_Ash, + &gFieldEffectSpriteTemplate_SurfBlob, + &gFieldEffectSpriteTemplate_Arrow, + &gFieldEffectSpriteTemplate_Dust, + &gFieldEffectSpriteTemplate_JumpTallGrass, + &gFieldEffectSpriteTemplate_SandFootprints, + &gFieldEffectSpriteTemplate_JumpBigSplash, + &gFieldEffectSpriteTemplate_Splash, + &gFieldEffectSpriteTemplate_JumpSmallSplash, + &gFieldEffectSpriteTemplate_LongGrass, + &gFieldEffectSpriteTemplate_JumpLongGrass, + &gFieldEffectSpriteTemplate_Unknown17, + &gFieldEffectSpriteTemplate_Unknown18, + &gFieldEffectSpriteTemplate_Unknown19, + &gFieldEffectSpriteTemplate_Unknown20, + &gFieldEffectSpriteTemplate_Unknown21, + &gFieldEffectSpriteTemplate_BerryTreeGrowthSparkle, + &gFieldEffectSpriteTemplate_DeepSandFootprints, + &gFieldEffectSpriteTemplate_TreeDisguise, + &gFieldEffectSpriteTemplate_MountainDisguise, + &gFieldEffectSpriteTemplate_Bird, + &gFieldEffectSpriteTemplate_BikeTireTracks, + &gFieldEffectSpriteTemplate_SandDisguise, + &gFieldEffectSpriteTemplate_SandPile, + &gFieldEffectSpriteTemplate_ShortGrass, + &gFieldEffectSpriteTemplate_HotSpringsWater, + &gFieldEffectSpriteTemplate_PopOutOfAsh, + &gFieldEffectSpriteTemplate_LavaridgeGymWarp, + &gFieldEffectSpriteTemplate_Bubbles, + &gFieldEffectSpriteTemplate_Sparkle +}; + +#endif //POKERUBY_FIELD_EFFECT_OBJECT_TEMPLATE_POINTERS_H diff --git a/src/data/field_map_obj/field_effect_objects.h b/src/data/field_map_obj/field_effect_objects.h new file mode 100644 index 000000000..9d3ae343d --- /dev/null +++ b/src/data/field_map_obj/field_effect_objects.h @@ -0,0 +1,897 @@ +// + +// + +#ifndef POKERUBY_FIELD_EFFECT_OBJECTS_H +#define POKERUBY_FIELD_EFFECT_OBJECTS_H + +const struct SpritePalette gFieldEffectObjectPaletteInfo0 = {gFieldEffectObjectPalette0, 0x1004}; + +const struct SpritePalette gFieldEffectObjectPaletteInfo1 = {gFieldEffectObjectPalette1, 0x1005}; + +const union AnimCmd gFieldEffectAnim_8374534[] = { + ANIMCMD_FRAME(0, 1), + ANIMCMD_END +}; + +const union AnimCmd *const gFieldEffectAnimTable_Shadow[] = { + gFieldEffectAnim_8374534 +}; + +const struct SpriteFrameImage gFieldEffectPicTable_ShadowSmall[] = { + obj_frame_tiles(gFieldEffectPic_ShadowSmall) +}; + +const struct SpriteFrameImage gFieldEffectPicTable_ShadowMedium[] = { + obj_frame_tiles(gFieldEffectPic_ShadowMedium) +}; + +const struct SpriteFrameImage gFieldEffectPicTable_ShadowLarge[] = { + obj_frame_tiles(gFieldEffectPic_ShadowLarge) +}; + +const struct SpriteFrameImage gFieldEffectPicTable_ShadowExtraLarge[] = { + obj_frame_tiles(gFieldEffectPic_ShadowExtraLarge) +}; + +const struct SpriteTemplate gFieldEffectSpriteTemplate_ShadowSmall = {0xFFFF, 0xFFFF, &gFieldOamData_8x8, gFieldEffectAnimTable_Shadow, gFieldEffectPicTable_ShadowSmall, gDummySpriteAffineAnimTable, oamc_shadow}; + +const struct SpriteTemplate gFieldEffectSpriteTemplate_ShadowMedium = {0xFFFF, 0xFFFF, &gFieldOamData_16x8, gFieldEffectAnimTable_Shadow, gFieldEffectPicTable_ShadowMedium, gDummySpriteAffineAnimTable, oamc_shadow}; + +const struct SpriteTemplate gFieldEffectSpriteTemplate_ShadowLarge = {0xFFFF, 0xFFFF, &gFieldOamData_32x8, gFieldEffectAnimTable_Shadow, gFieldEffectPicTable_ShadowLarge, gDummySpriteAffineAnimTable, oamc_shadow}; + +const struct SpriteTemplate gFieldEffectSpriteTemplate_ShadowExtraLarge = {0xFFFF, 0xFFFF, &gFieldOamData_64x32, gFieldEffectAnimTable_Shadow, gFieldEffectPicTable_ShadowExtraLarge, gDummySpriteAffineAnimTable, oamc_shadow}; + +const struct SpriteFrameImage gFieldEffectPicTable_TallGrass[] = { + obj_frame_tiles(gFieldEffectPic_TallGrass_0), + obj_frame_tiles(gFieldEffectPic_TallGrass_1), + obj_frame_tiles(gFieldEffectPic_TallGrass_2), + obj_frame_tiles(gFieldEffectPic_TallGrass_3), + obj_frame_tiles(gFieldEffectPic_TallGrass_4) +}; + +const union AnimCmd gFieldEffectAnim_83745E8[] = { + ANIMCMD_FRAME(1, 10), + ANIMCMD_FRAME(2, 10), + ANIMCMD_FRAME(3, 10), + ANIMCMD_FRAME(4, 10), + ANIMCMD_FRAME(0, 10), + ANIMCMD_END +}; + +const union AnimCmd *const gFieldEffectAnimTable_TallGrass[] = { + gFieldEffectAnim_83745E8 +}; + +const struct SpriteTemplate gFieldEffectSpriteTemplate_TallGrass = {0xFFFF, 0x1005, &gFieldOamData_16x16, gFieldEffectAnimTable_TallGrass, gFieldEffectPicTable_TallGrass, gDummySpriteAffineAnimTable, unc_grass_normal}; + +const struct SpriteFrameImage gFieldEffectPicTable_Ripple[] = { + obj_frame_tiles(gFieldEffectPic_Ripple_0), + obj_frame_tiles(gFieldEffectPic_Ripple_1), + obj_frame_tiles(gFieldEffectPic_Ripple_2), + obj_frame_tiles(gFieldEffectPic_Ripple_3), + obj_frame_tiles(gFieldEffectPic_Ripple_4) +}; + +const union AnimCmd gFieldEffectAnim_8374644[] = { + ANIMCMD_FRAME(0, 12), + ANIMCMD_FRAME(1, 9), + ANIMCMD_FRAME(2, 9), + ANIMCMD_FRAME(3, 9), + ANIMCMD_FRAME(0, 9), + ANIMCMD_FRAME(1, 9), + ANIMCMD_FRAME(2, 11), + ANIMCMD_FRAME(4, 11), + ANIMCMD_END +}; + +const union AnimCmd *const gFieldEffectAnimTable_Ripple[] = { + gFieldEffectAnim_8374644 +}; + +const struct SpriteTemplate gFieldEffectSpriteTemplate_Ripple = {0xFFFF, 0x1005, &gFieldOamData_16x16, gFieldEffectAnimTable_Ripple, gFieldEffectPicTable_Ripple, gDummySpriteAffineAnimTable, sub_8128800}; + +const struct SpriteFrameImage gFieldEffectPicTable_Ash[] = { + obj_frame_tiles(gFieldEffectPic_Ash_0), + obj_frame_tiles(gFieldEffectPic_Ash_1), + obj_frame_tiles(gFieldEffectPic_Ash_2), + obj_frame_tiles(gFieldEffectPic_Ash_3), + obj_frame_tiles(gFieldEffectPic_Ash_4) +}; + +const union AnimCmd gFieldEffectAnim_83746AC[] = { + ANIMCMD_FRAME(0, 12), + ANIMCMD_FRAME(1, 12), + ANIMCMD_FRAME(2, 8), + ANIMCMD_FRAME(3, 12), + ANIMCMD_FRAME(4, 12), + ANIMCMD_END +}; + +const union AnimCmd *const gFieldEffectAnimTable_Ash[] = { + gFieldEffectAnim_83746AC +}; + +const struct SpriteTemplate gFieldEffectSpriteTemplate_Ash = {0xFFFF, 0x1005, &gFieldOamData_16x16, gFieldEffectAnimTable_Ash, gFieldEffectPicTable_Ash, gDummySpriteAffineAnimTable, sub_8127D84}; + +const struct SpriteFrameImage gFieldEffectPicTable_SurfBlob[] = { + obj_frame_tiles(gFieldEffectPic_SurfBlob_0), + obj_frame_tiles(gFieldEffectPic_SurfBlob_1), + obj_frame_tiles(gFieldEffectPic_SurfBlob_2) +}; + +const union AnimCmd gFieldEffectAnim_83746F8[] = { + ANIMCMD_FRAME(0, 1), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd gFieldEffectAnim_8374700[] = { + ANIMCMD_FRAME(1, 1), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd gFieldEffectAnim_8374708[] = { + ANIMCMD_FRAME(2, 1), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd gFieldEffectAnim_8374710[] = { + ANIMCMD_FRAME(2, 1, .hFlip = TRUE), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd *const gFieldEffectAnimTable_SurfBlob[] = { + gFieldEffectAnim_83746F8, + gFieldEffectAnim_8374700, + gFieldEffectAnim_8374708, + gFieldEffectAnim_8374710 +}; + +const struct SpriteTemplate gFieldEffectSpriteTemplate_SurfBlob = {0xFFFF, 0xFFFF, &gFieldOamData_32x32, gFieldEffectAnimTable_SurfBlob, gFieldEffectPicTable_SurfBlob, gDummySpriteAffineAnimTable, sub_8127F7C}; + +const struct SpriteFrameImage gFieldEffectPicTable_Arrow[] = { + obj_frame_tiles(gFieldEffectPic_Arrow_0), + obj_frame_tiles(gFieldEffectPic_Arrow_1), + obj_frame_tiles(gFieldEffectPic_Arrow_2), + obj_frame_tiles(gFieldEffectPic_Arrow_3), + obj_frame_tiles(gFieldEffectPic_Arrow_4), + obj_frame_tiles(gFieldEffectPic_Arrow_5), + obj_frame_tiles(gFieldEffectPic_Arrow_6), + obj_frame_tiles(gFieldEffectPic_Arrow_7) +}; + +const union AnimCmd gFieldEffectAnim_8374780[] = { + ANIMCMD_FRAME(3, 32), + ANIMCMD_FRAME(7, 32), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd gFieldEffectAnim_837478C[] = { + ANIMCMD_FRAME(0, 32), + ANIMCMD_FRAME(4, 32), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd gFieldEffectAnim_8374798[] = { + ANIMCMD_FRAME(1, 32), + ANIMCMD_FRAME(5, 32), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd gFieldEffectAnim_83747A4[] = { + ANIMCMD_FRAME(2, 32), + ANIMCMD_FRAME(6, 32), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd *const gFieldEffectAnimTable_Arrow[] = { + gFieldEffectAnim_8374780, + gFieldEffectAnim_837478C, + gFieldEffectAnim_8374798, + gFieldEffectAnim_83747A4 +}; + +const struct SpriteTemplate gFieldEffectSpriteTemplate_Arrow = {0xFFFF, 0xFFFF, &gFieldOamData_16x16, gFieldEffectAnimTable_Arrow, gFieldEffectPicTable_Arrow, gDummySpriteAffineAnimTable, SpriteCallbackDummy}; + +const struct SpriteFrameImage gFieldEffectPicTable_Dust[] = { + obj_frame_tiles(gFieldEffectPic_Dust_0), + obj_frame_tiles(gFieldEffectPic_Dust_1), + obj_frame_tiles(gFieldEffectPic_Dust_2) +}; + +const union AnimCmd gFieldEffectAnim_83747F0[] = { + ANIMCMD_FRAME(0, 8), + ANIMCMD_FRAME(1, 8), + ANIMCMD_FRAME(2, 8), + ANIMCMD_END +}; + +const union AnimCmd *const gFieldEffectAnimTable_Dust[] = { + gFieldEffectAnim_83747F0 +}; + +const struct SpriteTemplate gFieldEffectSpriteTemplate_Dust = {0xFFFF, 0x1004, &gFieldOamData_16x8, gFieldEffectAnimTable_Dust, gFieldEffectPicTable_Dust, gDummySpriteAffineAnimTable, sub_81287C4}; + +const struct SpriteFrameImage gFieldEffectPicTable_JumpTallGrass[] = { + obj_frame_tiles(gFieldEffectPic_JumpTallGrass_0), + obj_frame_tiles(gFieldEffectPic_JumpTallGrass_1), + obj_frame_tiles(gFieldEffectPic_JumpTallGrass_2), + obj_frame_tiles(gFieldEffectPic_JumpTallGrass_3) +}; + +const union AnimCmd gFieldEffectAnim_837483C[] = { + ANIMCMD_FRAME(0, 8), + ANIMCMD_FRAME(1, 8), + ANIMCMD_FRAME(2, 8), + ANIMCMD_FRAME(3, 8), + ANIMCMD_END +}; + +const union AnimCmd *const gFieldEffectAnimTable_JumpTallGrass[] = { + gFieldEffectAnim_837483C +}; + +const struct SpriteTemplate gFieldEffectSpriteTemplate_JumpTallGrass = {0xFFFF, 0x1005, &gFieldOamData_16x8, gFieldEffectAnimTable_JumpTallGrass, gFieldEffectPicTable_JumpTallGrass, gDummySpriteAffineAnimTable, sub_81287C4}; + +const struct SpriteFrameImage gFieldEffectPicTable_SandFootprints[] = { + obj_frame_tiles(gFieldEffectPic_SandFootprints_0), + obj_frame_tiles(gFieldEffectPic_SandFootprints_1) +}; + +const union AnimCmd gFieldEffectAnim_837487C[] = { + ANIMCMD_FRAME(0, 1, .vFlip = TRUE), + ANIMCMD_END +}; + +const union AnimCmd gFieldEffectAnim_8374884[] = { + ANIMCMD_FRAME(0, 1), + ANIMCMD_END +}; + +const union AnimCmd gFieldEffectAnim_837488C[] = { + ANIMCMD_FRAME(1, 1), + ANIMCMD_END +}; + +const union AnimCmd gFieldEffectAnim_8374894[] = { + ANIMCMD_FRAME(1, 1, .hFlip = TRUE), + ANIMCMD_END +}; + +const union AnimCmd *const gFieldEffectAnimTable_SandFootprints[] = { + gFieldEffectAnim_837487C, + gFieldEffectAnim_837487C, + gFieldEffectAnim_8374884, + gFieldEffectAnim_837488C, + gFieldEffectAnim_8374894 +}; + +const struct SpriteTemplate gFieldEffectSpriteTemplate_SandFootprints = {0xFFFF, 0x1004, &gFieldOamData_16x16, gFieldEffectAnimTable_SandFootprints, gFieldEffectPicTable_SandFootprints, gDummySpriteAffineAnimTable, sub_8127584}; + +const struct SpriteFrameImage gFieldEffectPicTable_DeepSandFootprints[] = { + obj_frame_tiles(gFieldEffectPic_DeepSandFootprints_0), + obj_frame_tiles(gFieldEffectPic_DeepSandFootprints_1) +}; + +const union AnimCmd gFieldEffectAnim_83748D8[] = { + ANIMCMD_FRAME(0, 1, .vFlip = TRUE), + ANIMCMD_END +}; + +const union AnimCmd gFieldEffectAnim_83748E0[] = { + ANIMCMD_FRAME(0, 1), + ANIMCMD_END +}; + +const union AnimCmd gFieldEffectAnim_83748E8[] = { + ANIMCMD_FRAME(1, 1), + ANIMCMD_END +}; + +const union AnimCmd gFieldEffectAnim_83748F0[] = { + ANIMCMD_FRAME(1, 1, .hFlip = TRUE), + ANIMCMD_END +}; + +const union AnimCmd *const gFieldEffectAnimTable_DeepSandFootprints[] = { + gFieldEffectAnim_83748D8, + gFieldEffectAnim_83748D8, + gFieldEffectAnim_83748E0, + gFieldEffectAnim_83748E8, + gFieldEffectAnim_83748F0 +}; + +const struct SpriteTemplate gFieldEffectSpriteTemplate_DeepSandFootprints = {0xFFFF, 0x1004, &gFieldOamData_16x16, gFieldEffectAnimTable_DeepSandFootprints, gFieldEffectPicTable_DeepSandFootprints, gDummySpriteAffineAnimTable, sub_8127584}; + +const struct SpriteFrameImage gFieldEffectPicTable_BikeTireTracks[] = { + obj_frame_tiles(gFieldEffectPic_BikeTireTracks_0), + obj_frame_tiles(gFieldEffectPic_BikeTireTracks_1), + obj_frame_tiles(gFieldEffectPic_BikeTireTracks_2), + obj_frame_tiles(gFieldEffectPic_BikeTireTracks_3) +}; + +const union AnimCmd gFieldEffectAnim_8374944[] = { + ANIMCMD_FRAME(2, 1), + ANIMCMD_END +}; + +const union AnimCmd gFieldEffectAnim_837494C[] = { + ANIMCMD_FRAME(2, 1), + ANIMCMD_END +}; + +const union AnimCmd gFieldEffectAnim_8374954[] = { + ANIMCMD_FRAME(1, 1), + ANIMCMD_END +}; + +const union AnimCmd gFieldEffectAnim_837495C[] = { + ANIMCMD_FRAME(1, 1), + ANIMCMD_END +}; + +const union AnimCmd gFieldEffectAnim_8374964[] = { + ANIMCMD_FRAME(0, 1), + ANIMCMD_END +}; + +const union AnimCmd gFieldEffectAnim_837496C[] = { + ANIMCMD_FRAME(0, 1, .hFlip = TRUE), + ANIMCMD_END +}; + +const union AnimCmd gFieldEffectAnim_8374974[] = { + ANIMCMD_FRAME(3, 1, .hFlip = TRUE), + ANIMCMD_END +}; + +const union AnimCmd gFieldEffectAnim_837497C[] = { + ANIMCMD_FRAME(3, 1), + ANIMCMD_END +}; + +const union AnimCmd *const gFieldEffectAnimTable_BikeTireTracks[] = { + gFieldEffectAnim_8374944, + gFieldEffectAnim_8374944, + gFieldEffectAnim_837494C, + gFieldEffectAnim_8374954, + gFieldEffectAnim_837495C, + gFieldEffectAnim_8374964, + gFieldEffectAnim_837496C, + gFieldEffectAnim_8374974, + gFieldEffectAnim_837497C +}; + +const struct SpriteTemplate gFieldEffectSpriteTemplate_BikeTireTracks = {0xFFFF, 0x1004, &gFieldOamData_16x16, gFieldEffectAnimTable_BikeTireTracks, gFieldEffectPicTable_BikeTireTracks, gDummySpriteAffineAnimTable, sub_8127584}; + +const struct SpriteFrameImage gFieldEffectPicTable_JumpBigSplash[] = { + obj_frame_tiles(gFieldEffectPic_JumpBigSplash_0), + obj_frame_tiles(gFieldEffectPic_JumpBigSplash_1), + obj_frame_tiles(gFieldEffectPic_JumpBigSplash_2), + obj_frame_tiles(gFieldEffectPic_JumpBigSplash_3) +}; + +const union AnimCmd gFieldEffectAnim_83749E0[] = { + ANIMCMD_FRAME(0, 8), + ANIMCMD_FRAME(1, 8), + ANIMCMD_FRAME(2, 8), + ANIMCMD_FRAME(3, 8), + ANIMCMD_END +}; + +const union AnimCmd *const gFieldEffectAnimTable_JumpBigSplash[] = { + gFieldEffectAnim_83749E0 +}; + +const struct SpriteTemplate gFieldEffectSpriteTemplate_JumpBigSplash = {0xFFFF, 0x1004, &gFieldOamData_16x16, gFieldEffectAnimTable_JumpBigSplash, gFieldEffectPicTable_JumpBigSplash, gDummySpriteAffineAnimTable, sub_81287C4}; + +const struct SpriteFrameImage gFieldEffectPicTable_Splash[] = { + obj_frame_tiles(gFieldEffectPic_Splash_0), + obj_frame_tiles(gFieldEffectPic_Splash_1) +}; + +const union AnimCmd gFieldEffectAnim_8374A20[] = { + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(1, 4), + ANIMCMD_END +}; + +const union AnimCmd gFieldEffectAnim_8374A2C[] = { + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(1, 4), + ANIMCMD_FRAME(0, 6), + ANIMCMD_FRAME(1, 6), + ANIMCMD_FRAME(0, 8), + ANIMCMD_FRAME(1, 8), + ANIMCMD_FRAME(0, 6), + ANIMCMD_FRAME(1, 6), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd *const gFieldEffectAnimTable_Splash[] = { + gFieldEffectAnim_8374A20, + gFieldEffectAnim_8374A2C +}; + +const struct SpriteTemplate gFieldEffectSpriteTemplate_Splash = {0xFFFF, 0x1004, &gFieldOamData_16x8, gFieldEffectAnimTable_Splash, gFieldEffectPicTable_Splash, gDummySpriteAffineAnimTable, sub_81276B4}; + +const struct SpriteFrameImage gFieldEffectPicTable_JumpSmallSplash[] = { + obj_frame_tiles(gFieldEffectPic_JumpSmallSplash_0), + obj_frame_tiles(gFieldEffectPic_JumpSmallSplash_1), + obj_frame_tiles(gFieldEffectPic_JumpSmallSplash_2) +}; + +const union AnimCmd gFieldEffectAnim_8374A88[] = { + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(1, 4), + ANIMCMD_FRAME(2, 4), + ANIMCMD_END +}; + +const union AnimCmd *const gFieldEffectAnimTable_JumpSmallSplash[] = { + gFieldEffectAnim_8374A88 +}; + +const struct SpriteTemplate gFieldEffectSpriteTemplate_JumpSmallSplash = {0xFFFF, 0x1004, &gFieldOamData_16x8, gFieldEffectAnimTable_JumpSmallSplash, gFieldEffectPicTable_JumpSmallSplash, gDummySpriteAffineAnimTable, sub_81287C4}; + +const struct SpriteFrameImage gFieldEffectPicTable_LongGrass[] = { + obj_frame_tiles(gFieldEffectPic_LongGrass_0), + obj_frame_tiles(gFieldEffectPic_LongGrass_1), + obj_frame_tiles(gFieldEffectPic_LongGrass_2), + obj_frame_tiles(gFieldEffectPic_LongGrass_3) +}; + +const union AnimCmd gFieldEffectAnim_8374AD4[] = { + ANIMCMD_FRAME(1, 3), + ANIMCMD_FRAME(2, 3), + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(3, 4), + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(3, 4), + ANIMCMD_FRAME(0, 4), + ANIMCMD_END +}; + +const union AnimCmd *const gFieldEffectAnimTable_LongGrass[] = { + gFieldEffectAnim_8374AD4 +}; + +const struct SpriteTemplate gFieldEffectSpriteTemplate_LongGrass = {0xFFFF, 0x1005, &gFieldOamData_16x16, gFieldEffectAnimTable_LongGrass, gFieldEffectPicTable_LongGrass, gDummySpriteAffineAnimTable, unc_grass_tall}; + +const struct SpriteFrameImage gFieldEffectPicTable_JumpLongGrass[] = { + obj_frame_tiles(gFieldEffectPic_JumpLongGrass_0), + obj_frame_tiles(gFieldEffectPic_JumpLongGrass_1), + obj_frame_tiles(gFieldEffectPic_JumpLongGrass_2), + obj_frame_tiles(gFieldEffectPic_JumpLongGrass_3), + obj_frame_tiles(gFieldEffectPic_JumpLongGrass_4), + obj_frame_tiles(gFieldEffectPic_JumpLongGrass_5) +}; + +const union AnimCmd gFieldEffectAnim_8374B40[] = { + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(1, 4), + ANIMCMD_FRAME(2, 8), + ANIMCMD_FRAME(3, 8), + ANIMCMD_FRAME(4, 8), + ANIMCMD_FRAME(5, 8), + ANIMCMD_END +}; + +const union AnimCmd *const gFieldEffectAnimTable_JumpLongGrass[] = { + gFieldEffectAnim_8374B40 +}; + +const struct SpriteTemplate gFieldEffectSpriteTemplate_JumpLongGrass = {0xFFFF, 0x1005, &gFieldOamData_16x16, gFieldEffectAnimTable_JumpLongGrass, gFieldEffectPicTable_JumpLongGrass, gDummySpriteAffineAnimTable, sub_81287C4}; + +const struct SpriteFrameImage gFieldEffectPicTable_Unknown17[] = { + obj_frame_tiles(gFieldEffectPic_JumpLongGrass_5), + obj_frame_tiles(gFieldEffectPic_Unknown17_0), + obj_frame_tiles(gFieldEffectPic_Unknown17_1), + obj_frame_tiles(gFieldEffectPic_Unknown17_2), + obj_frame_tiles(gFieldEffectPic_Unknown17_3), + obj_frame_tiles(gFieldEffectPic_Unknown17_4), + obj_frame_tiles(gFieldEffectPic_Unknown17_5), + obj_frame_tiles(gFieldEffectPic_Unknown17_6), + obj_frame_tiles(gFieldEffectPic_Unknown17_7) +}; + +const union AnimCmd gFieldEffectAnim_8374BC0[] = { + ANIMCMD_FRAME(0, 10), + ANIMCMD_FRAME(1, 4), + ANIMCMD_FRAME(2, 4), + ANIMCMD_FRAME(3, 4), + ANIMCMD_FRAME(4, 4), + ANIMCMD_FRAME(5, 4), + ANIMCMD_FRAME(6, 4), + ANIMCMD_FRAME(7, 4), + ANIMCMD_FRAME(8, 4), + ANIMCMD_JUMP(7) +}; + +const union AnimCmd *const gFieldEffectAnimTable_Unknown17[] = { + gFieldEffectAnim_8374BC0 +}; + +const struct SpriteTemplate gFieldEffectSpriteTemplate_Unknown17 = {0xFFFF, 0x1005, &gFieldOamData_16x16, gFieldEffectAnimTable_Unknown17, gFieldEffectPicTable_Unknown17, gDummySpriteAffineAnimTable, sub_8128800}; + +const struct SpriteFrameImage gFieldEffectPicTable_Unknown18[] = { + obj_frame_tiles(gFieldEffectPic_Unknown18_0), + obj_frame_tiles(gFieldEffectPic_Unknown18_1), + obj_frame_tiles(gFieldEffectPic_Unknown18_2), + obj_frame_tiles(gFieldEffectPic_Unknown18_3) +}; + +const union AnimCmd gFieldEffectAnim_8374C24[] = { + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(1, 4), + ANIMCMD_FRAME(2, 4), + ANIMCMD_FRAME(3, 4), + ANIMCMD_FRAME(2, 4), + ANIMCMD_FRAME(1, 4), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd *const gFieldEffectAnimTable_Unknown18[] = { + gFieldEffectAnim_8374C24 +}; + +const struct SpriteTemplate gFieldEffectSpriteTemplate_Unknown18 = {0xFFFF, 0x1005, &gFieldOamData_16x16, gFieldEffectAnimTable_Unknown18, gFieldEffectPicTable_Unknown18, gDummySpriteAffineAnimTable, sub_8128800}; + +const struct SpriteFrameImage gFieldEffectPicTable_Unknown19[] = { + obj_frame_tiles(gFieldEffectPic_Unknown19_0), + obj_frame_tiles(gFieldEffectPic_Unknown19_1), + obj_frame_tiles(gFieldEffectPic_Unknown19_2), + obj_frame_tiles(gFieldEffectPic_Unknown19_3) +}; + +const union AnimCmd gFieldEffectAnim_8374C7C[] = { + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(1, 4), + ANIMCMD_FRAME(2, 4), + ANIMCMD_FRAME(3, 4), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd *const gFieldEffectAnimTable_Unknown19[] = { + gFieldEffectAnim_8374C7C +}; + +const struct SpriteTemplate gFieldEffectSpriteTemplate_Unknown19 = {0xFFFF, 0x1004, &gFieldOamData_16x16, gFieldEffectAnimTable_Unknown19, gFieldEffectPicTable_Unknown19, gDummySpriteAffineAnimTable, sub_8128800}; + +const struct SpriteFrameImage gFieldEffectPicTable_SandPile[] = { + obj_frame_tiles(gFieldEffectPic_SandPile_0), + obj_frame_tiles(gFieldEffectPic_SandPile_1), + obj_frame_tiles(gFieldEffectPic_SandPile_2) +}; + +const union AnimCmd gFieldEffectAnim_8374CC4[] = { + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(1, 4), + ANIMCMD_FRAME(2, 4), + ANIMCMD_END +}; + +const union AnimCmd *const gFieldEffectAnimTable_SandPile[] = { + gFieldEffectAnim_8374CC4 +}; + +const struct SpriteTemplate gFieldEffectSpriteTemplate_SandPile = {0xFFFF, 0x1004, &gFieldOamData_16x8, gFieldEffectAnimTable_SandPile, gFieldEffectPicTable_SandPile, gDummySpriteAffineAnimTable, sub_81282E0}; + +const struct SpriteFrameImage gFieldEffectPicTable_Unknown20[] = { + obj_frame_tiles(gFieldEffectPic_Unknown20_0), + obj_frame_tiles(gFieldEffectPic_Unknown20_1), + obj_frame_tiles(gFieldEffectPic_Unknown20_2), + obj_frame_tiles(gFieldEffectPic_Unknown20_3) +}; + +const union AnimCmd gFieldEffectAnim_8374D10[] = { + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(1, 4), + ANIMCMD_FRAME(2, 4), + ANIMCMD_FRAME(3, 4), + ANIMCMD_FRAME(2, 4), + ANIMCMD_FRAME(1, 4), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd *const gFieldEffectAnimTable_Unknown20[] = { + gFieldEffectAnim_8374D10 +}; + +const struct SpriteTemplate gFieldEffectSpriteTemplate_Unknown20 = {0xFFFF, 0x1004, &gFieldOamData_16x16, gFieldEffectAnimTable_Unknown20, gFieldEffectPicTable_Unknown20, gDummySpriteAffineAnimTable, sub_8128800}; + +const union AffineAnimCmd gFieldEffectAffineAnim_8374D48[] = { + AFFINEANIMCMD_FRAME(0xFF00, 0x100, -128, 0), + AFFINEANIMCMD_FRAME(0x1, 0x0, 0, 4), + AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 8), + AFFINEANIMCMD_FRAME(0xFFFF, 0x0, 0, 4), + AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 8), + AFFINEANIMCMD_FRAME(0xFFFF, 0x0, 0, 4), + AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 8), + AFFINEANIMCMD_FRAME(0x1, 0x0, 0, 4), + AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 8), + AFFINEANIMCMD_JUMP(1) +}; + +const union AffineAnimCmd gFieldEffectAffineAnim_8374D98[] = { + AFFINEANIMCMD_FRAME(0x100, 0x100, -128, 0), + AFFINEANIMCMD_FRAME(0xFFFF, 0x0, 0, 4), + AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 8), + AFFINEANIMCMD_FRAME(0x1, 0x0, 0, 4), + AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 8), + AFFINEANIMCMD_FRAME(0x1, 0x0, 0, 4), + AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 8), + AFFINEANIMCMD_FRAME(0xFFFF, 0x0, 0, 4), + AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 8), + AFFINEANIMCMD_JUMP(1) +}; + +const union AffineAnimCmd *const gFieldEffectAffineAnimTable_Unknown21[] = { + gFieldEffectAffineAnim_8374D48, + gFieldEffectAffineAnim_8374D98 +}; + +const struct SpriteTemplate gFieldEffectSpriteTemplate_Unknown21 = {0x0, 0xFFFF, &gDummyOamData, gDummySpriteAnimTable, NULL, gFieldEffectAffineAnimTable_Unknown21, SpriteCallbackDummy}; + +const struct SpriteFrameImage gFieldEffectPicTable_BerryTreeGrowthSparkle[] = { + obj_frame_tiles(gFieldEffectPic_BerryTreeGrowthSparkle_0), + obj_frame_tiles(gFieldEffectPic_BerryTreeGrowthSparkle_1), + obj_frame_tiles(gFieldEffectPic_BerryTreeGrowthSparkle_2), + obj_frame_tiles(gFieldEffectPic_BerryTreeGrowthSparkle_3), + obj_frame_tiles(gFieldEffectPic_BerryTreeGrowthSparkle_4), + obj_frame_tiles(gFieldEffectPic_BerryTreeGrowthSparkle_5) +}; + +const union AnimCmd gFieldEffectAnim_8374E38[] = { + ANIMCMD_FRAME(0, 8), + ANIMCMD_FRAME(1, 8), + ANIMCMD_FRAME(2, 8), + ANIMCMD_FRAME(3, 8), + ANIMCMD_FRAME(4, 8), + ANIMCMD_FRAME(5, 8), + ANIMCMD_LOOP(0), + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(1, 4), + ANIMCMD_FRAME(2, 4), + ANIMCMD_FRAME(3, 4), + ANIMCMD_FRAME(4, 4), + ANIMCMD_FRAME(5, 4), + ANIMCMD_LOOP(3), + ANIMCMD_FRAME(0, 8), + ANIMCMD_FRAME(1, 8), + ANIMCMD_FRAME(2, 8), + ANIMCMD_FRAME(3, 8), + ANIMCMD_FRAME(4, 8), + ANIMCMD_FRAME(5, 8), + ANIMCMD_END +}; + +const union AnimCmd *const gFieldEffectAnimTable_BerryTreeGrowthSparkle[] = { + gFieldEffectAnim_8374E38 +}; + +const struct SpriteTemplate gFieldEffectSpriteTemplate_BerryTreeGrowthSparkle = {0xFFFF, 0xFFFF, &gFieldOamData_16x16, gFieldEffectAnimTable_BerryTreeGrowthSparkle, gFieldEffectPicTable_BerryTreeGrowthSparkle, gDummySpriteAffineAnimTable, sub_8128800}; + +const struct SpriteFrameImage gFieldEffectPicTable_TreeDisguise[] = { + obj_frame_tiles(gFieldEffectPic_TreeDisguise_0), + obj_frame_tiles(gFieldEffectPic_TreeDisguise_1), + obj_frame_tiles(gFieldEffectPic_TreeDisguise_2), + obj_frame_tiles(gFieldEffectPic_TreeDisguise_3), + obj_frame_tiles(gFieldEffectPic_TreeDisguise_4), + obj_frame_tiles(gFieldEffectPic_TreeDisguise_5), + obj_frame_tiles(gFieldEffectPic_TreeDisguise_6) +}; + +const union AnimCmd gFieldEffectAnim_8374EE0[] = { + ANIMCMD_FRAME(0, 16), + ANIMCMD_END +}; + +const union AnimCmd gFieldEffectAnim_8374EE8[] = { + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(1, 4), + ANIMCMD_FRAME(2, 4), + ANIMCMD_FRAME(3, 4), + ANIMCMD_FRAME(4, 4), + ANIMCMD_FRAME(5, 4), + ANIMCMD_FRAME(6, 4), + ANIMCMD_END +}; + +const union AnimCmd *const gFieldEffectAnimTable_TreeDisguise[] = { + gFieldEffectAnim_8374EE0, + gFieldEffectAnim_8374EE8 +}; + +const struct SpriteTemplate gFieldEffectSpriteTemplate_TreeDisguise = {0xFFFF, 0xFFFF, &gFieldOamData_16x32, gFieldEffectAnimTable_TreeDisguise, gFieldEffectPicTable_TreeDisguise, gDummySpriteAffineAnimTable, sub_81285AC}; + +const struct SpriteFrameImage gFieldEffectPicTable_MountainDisguise[] = { + obj_frame_tiles(gFieldEffectPic_MountainDisguise_0), + obj_frame_tiles(gFieldEffectPic_MountainDisguise_1), + obj_frame_tiles(gFieldEffectPic_MountainDisguise_2), + obj_frame_tiles(gFieldEffectPic_MountainDisguise_3), + obj_frame_tiles(gFieldEffectPic_MountainDisguise_4), + obj_frame_tiles(gFieldEffectPic_MountainDisguise_5), + obj_frame_tiles(gFieldEffectPic_MountainDisguise_6) +}; + +const union AnimCmd gFieldEffectAnim_8374F60[] = { + ANIMCMD_FRAME(0, 16), + ANIMCMD_END +}; + +const union AnimCmd gFieldEffectAnim_8374F68[] = { + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(1, 4), + ANIMCMD_FRAME(2, 4), + ANIMCMD_FRAME(3, 4), + ANIMCMD_FRAME(4, 4), + ANIMCMD_FRAME(5, 4), + ANIMCMD_FRAME(6, 4), + ANIMCMD_END +}; + +const union AnimCmd *const gFieldEffectAnimTable_MountainDisguise[] = { + gFieldEffectAnim_8374F60, + gFieldEffectAnim_8374F68 +}; + +const struct SpriteTemplate gFieldEffectSpriteTemplate_MountainDisguise = {0xFFFF, 0xFFFF, &gFieldOamData_16x32, gFieldEffectAnimTable_MountainDisguise, gFieldEffectPicTable_MountainDisguise, gDummySpriteAffineAnimTable, sub_81285AC}; + +const struct SpriteFrameImage gFieldEffectPicTable_SandDisguise[] = { + obj_frame_tiles(gFieldEffectPic_SandDisguise_0), + obj_frame_tiles(gFieldEffectPic_SandDisguise_1), + obj_frame_tiles(gFieldEffectPic_SandDisguise_2), + obj_frame_tiles(gFieldEffectPic_SandDisguise_3), + obj_frame_tiles(gFieldEffectPic_SandDisguise_4), + obj_frame_tiles(gFieldEffectPic_SandDisguise_5), + obj_frame_tiles(gFieldEffectPic_SandDisguise_6) +}; + +const struct SpriteTemplate gFieldEffectSpriteTemplate_SandDisguise = {0xFFFF, 0xFFFF, &gFieldOamData_16x32, gFieldEffectAnimTable_TreeDisguise, gFieldEffectPicTable_SandDisguise, gDummySpriteAffineAnimTable, sub_81285AC}; + +const struct SpriteFrameImage gFieldEffectPicTable_Bird[] = { + obj_frame_tiles(gFieldEffectPic_Bird) +}; + +const union AnimCmd gFieldEffectAnim_8375000[] = { + ANIMCMD_FRAME(0, 1), + ANIMCMD_END +}; + +const union AnimCmd *const gFieldEffectAnimTable_Bird[] = { + gFieldEffectAnim_8375000 +}; + +const struct SpriteTemplate gFieldEffectSpriteTemplate_Bird = {0xFFFF, 0xFFFF, &gFieldOamData_32x32, gFieldEffectAnimTable_Bird, gFieldEffectPicTable_Bird, gDummySpriteAffineAnimTable, SpriteCallbackDummy}; + +const struct SpriteFrameImage gFieldEffectPicTable_ShortGrass[] = { + obj_frame_tiles(gFieldEffectPic_ShortGrass_0), + obj_frame_tiles(gFieldEffectPic_ShortGrass_1) +}; + +const union AnimCmd gFieldEffectAnim_8375034[] = { + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(1, 4), + ANIMCMD_END +}; + +const union AnimCmd *const gFieldEffectAnimTable_ShortGrass[] = { + gFieldEffectAnim_8375034 +}; + +const struct SpriteTemplate gFieldEffectSpriteTemplate_ShortGrass = {0xFFFF, 0x1005, &gFieldOamData_16x16, gFieldEffectAnimTable_ShortGrass, gFieldEffectPicTable_ShortGrass, gDummySpriteAffineAnimTable, sub_8127334}; + +const struct SpriteFrameImage gFieldEffectPicTable_HotSpringsWater[] = { + obj_frame_tiles(gFieldEffectPic_HotSpringsWater) +}; + +const union AnimCmd gFieldEffectAnim_8375064[] = { + ANIMCMD_FRAME(0, 4), + ANIMCMD_END +}; + +const union AnimCmd *const gFieldEffectAnimTable_HotSpringsWater[] = { + gFieldEffectAnim_8375064 +}; + +const struct SpriteTemplate gFieldEffectSpriteTemplate_HotSpringsWater = {0xFFFF, 0x1005, &gFieldOamData_16x16, gFieldEffectAnimTable_HotSpringsWater, gFieldEffectPicTable_HotSpringsWater, gDummySpriteAffineAnimTable, sub_8127A7C}; + +const struct SpriteFrameImage gFieldEffectPicTable_PopOutOfAsh[] = { + obj_frame_tiles(gFieldEffectPic_PopOutOfAsh_0), + obj_frame_tiles(gFieldEffectPic_PopOutOfAsh_1), + obj_frame_tiles(gFieldEffectPic_PopOutOfAsh_2), + obj_frame_tiles(gFieldEffectPic_PopOutOfAsh_3), + obj_frame_tiles(gFieldEffectPic_PopOutOfAsh_4) +}; + +const union AnimCmd gFieldEffectAnim_83750B0[] = { + ANIMCMD_FRAME(0, 6), + ANIMCMD_FRAME(1, 6), + ANIMCMD_FRAME(2, 6), + ANIMCMD_FRAME(3, 6), + ANIMCMD_FRAME(4, 6), + ANIMCMD_END +}; + +const union AnimCmd *const gFieldEffectAnimTable_PopOutOfAsh[] = { + gFieldEffectAnim_83750B0 +}; + +const struct SpriteTemplate gFieldEffectSpriteTemplate_PopOutOfAsh = {0xFFFF, 0x100D, &gFieldOamData_16x16, gFieldEffectAnimTable_PopOutOfAsh, gFieldEffectPicTable_PopOutOfAsh, gDummySpriteAffineAnimTable, sub_808788C}; + +const struct SpritePalette gFieldEffectObjectPaletteInfo2 = {gFieldEffectObjectPalette2, 0x100D}; + +const struct SpriteFrameImage gFieldEffectPicTable_LavaridgeGymWarp[] = { + obj_frame_tiles(gFieldEffectPic_LavaridgeGymWarp_0), + obj_frame_tiles(gFieldEffectPic_LavaridgeGymWarp_1), + obj_frame_tiles(gFieldEffectPic_LavaridgeGymWarp_2), + obj_frame_tiles(gFieldEffectPic_LavaridgeGymWarp_3), + obj_frame_tiles(gFieldEffectPic_LavaridgeGymWarp_4) +}; + +const union AnimCmd gFieldEffectAnim_8375114[] = { + ANIMCMD_FRAME(0, 6), + ANIMCMD_FRAME(1, 6), + ANIMCMD_FRAME(2, 6), + ANIMCMD_FRAME(3, 6), + ANIMCMD_FRAME(4, 6), + ANIMCMD_END +}; + +const union AnimCmd *const gFieldEffectAnimTable_LavaridgeGymWarp[] = { + gFieldEffectAnim_8375114 +}; + +const struct SpriteTemplate gFieldEffectSpriteTemplate_LavaridgeGymWarp = {0xFFFF, 0x100D, &gFieldOamData_16x16, gFieldEffectAnimTable_LavaridgeGymWarp, gFieldEffectPicTable_LavaridgeGymWarp, gDummySpriteAffineAnimTable, sub_8087638}; + +const struct SpriteFrameImage gFieldEffectPicTable_Bubbles[] = { + obj_frame_tiles(gFieldEffectPic_Bubbles_0), + obj_frame_tiles(gFieldEffectPic_Bubbles_1), + obj_frame_tiles(gFieldEffectPic_Bubbles_2), + obj_frame_tiles(gFieldEffectPic_Bubbles_3), + obj_frame_tiles(gFieldEffectPic_Bubbles_4), + obj_frame_tiles(gFieldEffectPic_Bubbles_5), + obj_frame_tiles(gFieldEffectPic_Bubbles_6), + obj_frame_tiles(gFieldEffectPic_Bubbles_7) +}; + +const union AnimCmd gFieldEffectAnim_8375188[] = { + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(1, 4), + ANIMCMD_FRAME(2, 4), + ANIMCMD_FRAME(3, 6), + ANIMCMD_FRAME(4, 6), + ANIMCMD_FRAME(5, 4), + ANIMCMD_FRAME(6, 4), + ANIMCMD_FRAME(7, 4), + ANIMCMD_END +}; + +const union AnimCmd *const gFieldEffectAnimTable_Bubbles[] = { + gFieldEffectAnim_8375188 +}; + +const struct SpriteTemplate gFieldEffectSpriteTemplate_Bubbles = {0xFFFF, 0x1004, &gFieldOamData_16x32, gFieldEffectAnimTable_Bubbles, gFieldEffectPicTable_Bubbles, gDummySpriteAffineAnimTable, sub_8128410}; + +const struct SpriteFrameImage gFieldEffectPicTable_Sparkle[] = { + obj_frame_tiles(gFieldEffectPic_Sparkle_0), + obj_frame_tiles(gFieldEffectPic_Sparkle_1) +}; + +const union AnimCmd gFieldEffectAnim_83751D8[] = { + ANIMCMD_FRAME(0, 3), + ANIMCMD_FRAME(1, 5), + ANIMCMD_FRAME(0, 5), + ANIMCMD_END +}; + +const union AnimCmd *const gFieldEffectAnimTable_Sparkle[] = { + gFieldEffectAnim_83751D8 +}; + +const struct SpriteTemplate gFieldEffectSpriteTemplate_Sparkle = {0xFFFF, 0x100F, &gFieldOamData_16x16, gFieldEffectAnimTable_Sparkle, gFieldEffectPicTable_Sparkle, gDummySpriteAffineAnimTable, sub_8128774}; + +const struct SpritePalette gFieldEffectObjectPaletteInfo3 = {gFieldEffectObjectPalette3, 0x100F}; + +#endif //POKERUBY_FIELD_EFFECT_OBJECTS_H diff --git a/src/data/field_map_obj/map_object_anims.h b/src/data/field_map_obj/map_object_anims.h new file mode 100644 index 000000000..0993f3efd --- /dev/null +++ b/src/data/field_map_obj/map_object_anims.h @@ -0,0 +1,886 @@ +// + +// + +#ifndef POKERUBY_MAP_OBJECT_ANIMS_H +#define POKERUBY_MAP_OBJECT_ANIMS_H + + +const union AnimCmd gMapObjectImageAnim_83708C8[] = { + ANIMCMD_FRAME(0, 8), + ANIMCMD_FRAME(0, 8), + ANIMCMD_FRAME(0, 8), + ANIMCMD_FRAME(0, 8), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd gMapObjectImageAnim_83708DC[] = { + ANIMCMD_FRAME(0, 16), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd gMapObjectImageAnim_83708E4[] = { + ANIMCMD_FRAME(1, 16), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd gMapObjectImageAnim_83708EC[] = { + ANIMCMD_FRAME(2, 16), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd gMapObjectImageAnim_83708F4[] = { + ANIMCMD_FRAME(2, 16, .hFlip = TRUE), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd gMapObjectImageAnim_83708FC[] = { + ANIMCMD_FRAME(3, 8), + ANIMCMD_FRAME(0, 8), + ANIMCMD_FRAME(3, 8, .hFlip = TRUE), + ANIMCMD_FRAME(0, 8), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd gMapObjectImageAnim_8370910[] = { + ANIMCMD_FRAME(4, 8), + ANIMCMD_FRAME(1, 8), + ANIMCMD_FRAME(4, 8, .hFlip = TRUE), + ANIMCMD_FRAME(1, 8), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd gMapObjectImageAnim_8370924[] = { + ANIMCMD_FRAME(5, 8), + ANIMCMD_FRAME(2, 8), + ANIMCMD_FRAME(6, 8), + ANIMCMD_FRAME(2, 8), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd gMapObjectImageAnim_8370938[] = { + ANIMCMD_FRAME(5, 8, .hFlip = TRUE), + ANIMCMD_FRAME(2, 8, .hFlip = TRUE), + ANIMCMD_FRAME(6, 8, .hFlip = TRUE), + ANIMCMD_FRAME(2, 8, .hFlip = TRUE), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd gMapObjectImageAnim_837094C[] = { + ANIMCMD_FRAME(3, 4), + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(3, 4, .hFlip = TRUE), + ANIMCMD_FRAME(0, 4), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd gMapObjectImageAnim_8370960[] = { + ANIMCMD_FRAME(4, 4), + ANIMCMD_FRAME(1, 4), + ANIMCMD_FRAME(4, 4, .hFlip = TRUE), + ANIMCMD_FRAME(1, 4), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd gMapObjectImageAnim_8370974[] = { + ANIMCMD_FRAME(5, 4), + ANIMCMD_FRAME(2, 4), + ANIMCMD_FRAME(6, 4), + ANIMCMD_FRAME(2, 4), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd gMapObjectImageAnim_8370988[] = { + ANIMCMD_FRAME(5, 4, .hFlip = TRUE), + ANIMCMD_FRAME(2, 4, .hFlip = TRUE), + ANIMCMD_FRAME(6, 4, .hFlip = TRUE), + ANIMCMD_FRAME(2, 4, .hFlip = TRUE), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd gMapObjectImageAnim_837099C[] = { + ANIMCMD_FRAME(3, 2), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(3, 2, .hFlip = TRUE), + ANIMCMD_FRAME(0, 2), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd gMapObjectImageAnim_83709B0[] = { + ANIMCMD_FRAME(4, 2), + ANIMCMD_FRAME(1, 2), + ANIMCMD_FRAME(4, 2, .hFlip = TRUE), + ANIMCMD_FRAME(1, 2), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd gMapObjectImageAnim_83709C4[] = { + ANIMCMD_FRAME(5, 2), + ANIMCMD_FRAME(2, 2), + ANIMCMD_FRAME(6, 2), + ANIMCMD_FRAME(2, 2), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd gMapObjectImageAnim_83709D8[] = { + ANIMCMD_FRAME(5, 2, .hFlip = TRUE), + ANIMCMD_FRAME(2, 2, .hFlip = TRUE), + ANIMCMD_FRAME(6, 2, .hFlip = TRUE), + ANIMCMD_FRAME(2, 2, .hFlip = TRUE), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd gMapObjectImageAnim_83709EC[] = { + ANIMCMD_FRAME(3, 1), + ANIMCMD_FRAME(0, 1), + ANIMCMD_FRAME(3, 1, .hFlip = TRUE), + ANIMCMD_FRAME(0, 1), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd gMapObjectImageAnim_8370A00[] = { + ANIMCMD_FRAME(4, 1), + ANIMCMD_FRAME(1, 1), + ANIMCMD_FRAME(4, 1, .hFlip = TRUE), + ANIMCMD_FRAME(1, 1), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd gMapObjectImageAnim_8370A14[] = { + ANIMCMD_FRAME(5, 1), + ANIMCMD_FRAME(2, 1), + ANIMCMD_FRAME(6, 1), + ANIMCMD_FRAME(2, 1), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd gMapObjectImageAnim_8370A28[] = { + ANIMCMD_FRAME(5, 1, .hFlip = TRUE), + ANIMCMD_FRAME(2, 1, .hFlip = TRUE), + ANIMCMD_FRAME(6, 1, .hFlip = TRUE), + ANIMCMD_FRAME(2, 1, .hFlip = TRUE), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd gMapObjectImageAnim_8370A3C[] = { + ANIMCMD_FRAME(0, 16), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd gMapObjectImageAnim_8370A44[] = { + ANIMCMD_FRAME(1, 16), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd gMapObjectImageAnim_8370A4C[] = { + ANIMCMD_FRAME(2, 16), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd gMapObjectImageAnim_8370A54[] = { + ANIMCMD_FRAME(2, 16, .hFlip = TRUE), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd gMapObjectImageAnim_8370A5C[] = { + ANIMCMD_FRAME(3, 8), + ANIMCMD_FRAME(0, 8), + ANIMCMD_FRAME(4, 8), + ANIMCMD_FRAME(0, 8), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd gMapObjectImageAnim_8370A70[] = { + ANIMCMD_FRAME(5, 8), + ANIMCMD_FRAME(1, 8), + ANIMCMD_FRAME(6, 8), + ANIMCMD_FRAME(1, 8), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd gMapObjectImageAnim_8370A84[] = { + ANIMCMD_FRAME(7, 8), + ANIMCMD_FRAME(2, 8), + ANIMCMD_FRAME(8, 8), + ANIMCMD_FRAME(2, 8), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd gMapObjectImageAnim_8370A98[] = { + ANIMCMD_FRAME(7, 8, .hFlip = TRUE), + ANIMCMD_FRAME(2, 8, .hFlip = TRUE), + ANIMCMD_FRAME(8, 8, .hFlip = TRUE), + ANIMCMD_FRAME(2, 8, .hFlip = TRUE), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd gMapObjectImageAnim_8370AAC[] = { + ANIMCMD_FRAME(3, 4), + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(4, 4), + ANIMCMD_FRAME(0, 4), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd gMapObjectImageAnim_8370AC0[] = { + ANIMCMD_FRAME(5, 4), + ANIMCMD_FRAME(1, 4), + ANIMCMD_FRAME(6, 4), + ANIMCMD_FRAME(1, 4), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd gMapObjectImageAnim_8370AD4[] = { + ANIMCMD_FRAME(7, 4), + ANIMCMD_FRAME(2, 4), + ANIMCMD_FRAME(8, 4), + ANIMCMD_FRAME(2, 4), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd gMapObjectImageAnim_8370AE8[] = { + ANIMCMD_FRAME(7, 4, .hFlip = TRUE), + ANIMCMD_FRAME(2, 4, .hFlip = TRUE), + ANIMCMD_FRAME(8, 4, .hFlip = TRUE), + ANIMCMD_FRAME(2, 4, .hFlip = TRUE), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd gMapObjectImageAnim_8370AFC[] = { + ANIMCMD_FRAME(3, 2), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(4, 2), + ANIMCMD_FRAME(0, 2), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd gMapObjectImageAnim_8370B10[] = { + ANIMCMD_FRAME(5, 2), + ANIMCMD_FRAME(1, 2), + ANIMCMD_FRAME(6, 2), + ANIMCMD_FRAME(1, 2), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd gMapObjectImageAnim_8370B24[] = { + ANIMCMD_FRAME(7, 2), + ANIMCMD_FRAME(2, 2), + ANIMCMD_FRAME(8, 2), + ANIMCMD_FRAME(2, 2), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd gMapObjectImageAnim_8370B38[] = { + ANIMCMD_FRAME(7, 2, .hFlip = TRUE), + ANIMCMD_FRAME(2, 2, .hFlip = TRUE), + ANIMCMD_FRAME(8, 2, .hFlip = TRUE), + ANIMCMD_FRAME(2, 2, .hFlip = TRUE), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd gMapObjectImageAnim_8370B4C[] = { + ANIMCMD_FRAME(3, 1), + ANIMCMD_FRAME(0, 1), + ANIMCMD_FRAME(4, 1), + ANIMCMD_FRAME(0, 1), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd gMapObjectImageAnim_8370B60[] = { + ANIMCMD_FRAME(5, 1), + ANIMCMD_FRAME(1, 1), + ANIMCMD_FRAME(6, 1), + ANIMCMD_FRAME(1, 1), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd gMapObjectImageAnim_8370B74[] = { + ANIMCMD_FRAME(7, 1), + ANIMCMD_FRAME(2, 1), + ANIMCMD_FRAME(8, 1), + ANIMCMD_FRAME(2, 1), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd gMapObjectImageAnim_8370B88[] = { + ANIMCMD_FRAME(7, 1, .hFlip = TRUE), + ANIMCMD_FRAME(2, 1, .hFlip = TRUE), + ANIMCMD_FRAME(8, 1, .hFlip = TRUE), + ANIMCMD_FRAME(2, 1, .hFlip = TRUE), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd gMapObjectImageAnim_8370B9C[] = { + ANIMCMD_FRAME(12, 5), + ANIMCMD_FRAME(9, 3), + ANIMCMD_FRAME(13, 5), + ANIMCMD_FRAME(9, 3), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd gMapObjectImageAnim_8370BB0[] = { + ANIMCMD_FRAME(14, 5), + ANIMCMD_FRAME(10, 3), + ANIMCMD_FRAME(15, 5), + ANIMCMD_FRAME(10, 3), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd gMapObjectImageAnim_8370BC4[] = { + ANIMCMD_FRAME(16, 5), + ANIMCMD_FRAME(11, 3), + ANIMCMD_FRAME(17, 5), + ANIMCMD_FRAME(11, 3), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd gMapObjectImageAnim_8370BD8[] = { + ANIMCMD_FRAME(16, 5, .hFlip = TRUE), + ANIMCMD_FRAME(11, 3, .hFlip = TRUE), + ANIMCMD_FRAME(17, 5, .hFlip = TRUE), + ANIMCMD_FRAME(11, 3, .hFlip = TRUE), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd gMapObjectImageAnim_8370BEC[] = { + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(1, 4), + ANIMCMD_FRAME(2, 4), + ANIMCMD_FRAME(3, 4), + ANIMCMD_FRAME(4, 8), + ANIMCMD_END +}; + +const union AnimCmd gMapObjectImageAnim_8370C04[] = { + ANIMCMD_FRAME(9, 32), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd gMapObjectImageAnim_8370C0C[] = { + ANIMCMD_FRAME(10, 32), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd gMapObjectImageAnim_8370C14[] = { + ANIMCMD_FRAME(11, 32), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd gMapObjectImageAnim_8370C1C[] = { + ANIMCMD_FRAME(11, 32, .hFlip = TRUE), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd gMapObjectImageAnim_8370C24[] = { + ANIMCMD_FRAME(9, 4), + ANIMCMD_FRAME(10, 4), + ANIMCMD_END +}; + +const union AnimCmd gMapObjectImageAnim_8370C30[] = { + ANIMCMD_FRAME(13, 4), + ANIMCMD_FRAME(14, 4), + ANIMCMD_END +}; + +const union AnimCmd gMapObjectImageAnim_8370C3C[] = { + ANIMCMD_FRAME(17, 4), + ANIMCMD_FRAME(18, 4), + ANIMCMD_END +}; + +const union AnimCmd gMapObjectImageAnim_8370C48[] = { + ANIMCMD_FRAME(17, 4, .hFlip = TRUE), + ANIMCMD_FRAME(18, 4, .hFlip = TRUE), + ANIMCMD_END +}; + +const union AnimCmd gMapObjectImageAnim_8370C54[] = { + ANIMCMD_FRAME(11, 4), + ANIMCMD_FRAME(12, 4), + ANIMCMD_END +}; + +const union AnimCmd gMapObjectImageAnim_8370C60[] = { + ANIMCMD_FRAME(15, 4), + ANIMCMD_FRAME(16, 4), + ANIMCMD_END +}; + +const union AnimCmd gMapObjectImageAnim_8370C6C[] = { + ANIMCMD_FRAME(19, 4), + ANIMCMD_FRAME(20, 4), + ANIMCMD_END +}; + +const union AnimCmd gMapObjectImageAnim_8370C78[] = { + ANIMCMD_FRAME(19, 4, .hFlip = TRUE), + ANIMCMD_FRAME(20, 4, .hFlip = TRUE), + ANIMCMD_END +}; + +const union AnimCmd gMapObjectImageAnim_8370C84[] = { + ANIMCMD_FRAME(9, 4), + ANIMCMD_FRAME(0, 4), + ANIMCMD_END +}; + +const union AnimCmd gMapObjectImageAnim_8370C90[] = { + ANIMCMD_FRAME(13, 4), + ANIMCMD_FRAME(1, 4), + ANIMCMD_END +}; + +const union AnimCmd gMapObjectImageAnim_8370C9C[] = { + ANIMCMD_FRAME(17, 4), + ANIMCMD_FRAME(2, 4), + ANIMCMD_END +}; + +const union AnimCmd gMapObjectImageAnim_8370CA8[] = { + ANIMCMD_FRAME(17, 4, .hFlip = TRUE), + ANIMCMD_FRAME(2, 4, .hFlip = TRUE), + ANIMCMD_END +}; + +const union AnimCmd gMapObjectImageAnim_8370CB4[] = { + ANIMCMD_FRAME(11, 4), + ANIMCMD_FRAME(0, 4), + ANIMCMD_END +}; + +const union AnimCmd gMapObjectImageAnim_8370CC0[] = { + ANIMCMD_FRAME(15, 4), + ANIMCMD_FRAME(1, 4), + ANIMCMD_END +}; + +const union AnimCmd gMapObjectImageAnim_8370CCC[] = { + ANIMCMD_FRAME(19, 4), + ANIMCMD_FRAME(2, 4), + ANIMCMD_END +}; + +const union AnimCmd gMapObjectImageAnim_8370CD8[] = { + ANIMCMD_FRAME(19, 4, .hFlip = TRUE), + ANIMCMD_FRAME(2, 4, .hFlip = TRUE), + ANIMCMD_END +}; + +const union AnimCmd gMapObjectImageAnim_8370CE4[] = { + ANIMCMD_FRAME(21, 4), + ANIMCMD_FRAME(10, 4), + ANIMCMD_FRAME(22, 4), + ANIMCMD_FRAME(10, 4), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd gMapObjectImageAnim_8370CF8[] = { + ANIMCMD_FRAME(23, 4), + ANIMCMD_FRAME(14, 4), + ANIMCMD_FRAME(24, 4), + ANIMCMD_FRAME(14, 4), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd gMapObjectImageAnim_8370D0C[] = { + ANIMCMD_FRAME(25, 4), + ANIMCMD_FRAME(18, 4), + ANIMCMD_FRAME(26, 4), + ANIMCMD_FRAME(18, 4), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd gMapObjectImageAnim_8370D20[] = { + ANIMCMD_FRAME(25, 4, .hFlip = TRUE), + ANIMCMD_FRAME(18, 4, .hFlip = TRUE), + ANIMCMD_FRAME(26, 4, .hFlip = TRUE), + ANIMCMD_FRAME(18, 4, .hFlip = TRUE), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd gMapObjectImageAnim_8370D34[] = { + ANIMCMD_FRAME(0, 32), + ANIMCMD_END +}; + +const union AnimCmd gMapObjectImageAnim_8370D3C[] = { + ANIMCMD_FRAME(1, 32), + ANIMCMD_FRAME(2, 32), + ANIMCMD_END +}; + +const union AnimCmd gMapObjectImageAnim_8370D48[] = { + ANIMCMD_FRAME(3, 48), + ANIMCMD_FRAME(4, 48), + ANIMCMD_END +}; + +const union AnimCmd gMapObjectImageAnim_8370D54[] = { + ANIMCMD_FRAME(5, 32), + ANIMCMD_FRAME(5, 32), + ANIMCMD_FRAME(6, 32), + ANIMCMD_FRAME(6, 32), + ANIMCMD_END +}; + +const union AnimCmd gMapObjectImageAnim_8370D68[] = { + ANIMCMD_FRAME(7, 48), + ANIMCMD_FRAME(7, 48), + ANIMCMD_FRAME(8, 48), + ANIMCMD_FRAME(8, 48), + ANIMCMD_END +}; + +const union AnimCmd gMapObjectImageAnim_8370D7C[] = { + ANIMCMD_FRAME(0, 8), + ANIMCMD_FRAME(9, 32), + ANIMCMD_FRAME(0, 8), + ANIMCMD_END +}; + +const union AnimCmd gMapObjectImageAnim_8370D8C[] = { + ANIMCMD_FRAME(0, 8), + ANIMCMD_FRAME(1, 8), + ANIMCMD_FRAME(2, 8), + ANIMCMD_FRAME(3, 8), + ANIMCMD_END +}; + +const union AnimCmd gMapObjectImageAnim_8370DA0[] = { + ANIMCMD_FRAME(0, 6), + ANIMCMD_FRAME(1, 6), + ANIMCMD_FRAME(2, 6), + ANIMCMD_FRAME(3, 6), + ANIMCMD_END +}; + +const union AnimCmd gMapObjectImageAnim_8370DB4[] = { + ANIMCMD_FRAME(8, 4), + ANIMCMD_FRAME(9, 4), + ANIMCMD_FRAME(10, 4), + ANIMCMD_FRAME(11, 4), + ANIMCMD_END +}; + +const union AnimCmd gMapObjectImageAnim_8370DC8[] = { + ANIMCMD_FRAME(4, 4), + ANIMCMD_FRAME(5, 4), + ANIMCMD_FRAME(6, 4), + ANIMCMD_FRAME(7, 4), + ANIMCMD_END +}; + +const union AnimCmd gMapObjectImageAnim_8370DDC[] = { + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(1, 4), + ANIMCMD_FRAME(2, 4), + ANIMCMD_FRAME(3, 4), + ANIMCMD_END +}; + +const union AnimCmd gMapObjectImageAnim_8370DF0[] = { + ANIMCMD_FRAME(0, 4, .hFlip = TRUE), + ANIMCMD_FRAME(1, 4, .hFlip = TRUE), + ANIMCMD_FRAME(2, 4, .hFlip = TRUE), + ANIMCMD_FRAME(3, 4, .hFlip = TRUE), + ANIMCMD_END +}; + +const union AnimCmd gMapObjectImageAnim_8370E04[] = { + ANIMCMD_FRAME(11, 4), + ANIMCMD_FRAME(10, 6), + ANIMCMD_FRAME(9, 6), + ANIMCMD_FRAME(8, 6), + ANIMCMD_END +}; + +const union AnimCmd gMapObjectImageAnim_8370E18[] = { + ANIMCMD_FRAME(7, 4), + ANIMCMD_FRAME(6, 6), + ANIMCMD_FRAME(5, 6), + ANIMCMD_FRAME(4, 6), + ANIMCMD_END +}; + +const union AnimCmd gMapObjectImageAnim_8370E2C[] = { + ANIMCMD_FRAME(3, 4), + ANIMCMD_FRAME(2, 4), + ANIMCMD_FRAME(1, 4), + ANIMCMD_FRAME(0, 4), + ANIMCMD_END +}; + +const union AnimCmd gMapObjectImageAnim_8370E40[] = { + ANIMCMD_FRAME(3, 4, .hFlip = TRUE), + ANIMCMD_FRAME(2, 4, .hFlip = TRUE), + ANIMCMD_FRAME(1, 4, .hFlip = TRUE), + ANIMCMD_FRAME(0, 4, .hFlip = TRUE), + ANIMCMD_END +}; + +const union AnimCmd gMapObjectImageAnim_8370E54[] = { + ANIMCMD_FRAME(10, 6), + ANIMCMD_FRAME(11, 6), + ANIMCMD_LOOP(1), + ANIMCMD_FRAME(11, 30), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd gMapObjectImageAnim_8370E68[] = { + ANIMCMD_FRAME(6, 6), + ANIMCMD_FRAME(7, 6), + ANIMCMD_LOOP(1), + ANIMCMD_FRAME(7, 30), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd gMapObjectImageAnim_8370E7C[] = { + ANIMCMD_FRAME(2, 6), + ANIMCMD_FRAME(3, 6), + ANIMCMD_LOOP(1), + ANIMCMD_FRAME(3, 30), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd gMapObjectImageAnim_8370E90[] = { + ANIMCMD_FRAME(2, 6, .hFlip = TRUE), + ANIMCMD_FRAME(3, 6, .hFlip = TRUE), + ANIMCMD_LOOP(1), + ANIMCMD_FRAME(3, 30, .hFlip = TRUE), + ANIMCMD_JUMP(0) +}; + +const union AffineAnimCmd gMapObjectRotScalAnim_8370EA4[] = { + AFFINEANIMCMD_FRAME(0x0, 0x0, 1, 1), + AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 1), + AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 1), + AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 1), + AFFINEANIMCMD_LOOP(7), + AFFINEANIMCMD_JUMP(0) +}; + +const union AffineAnimCmd gMapObjectRotScalAnim_8370ED4[] = { + AFFINEANIMCMD_FRAME(0x0, 0x0, -1, 1), + AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 1), + AFFINEANIMCMD_LOOP(15), + AFFINEANIMCMD_FRAME(0x0, 0x0, 1, 1), + AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 1), + AFFINEANIMCMD_LOOP(15), + AFFINEANIMCMD_JUMP(0) +}; + +const union AnimCmd *const gMapObjectImageAnimTable_Inanimate[] = { + gMapObjectImageAnim_83708C8 +}; + +const union AnimCmd *const gMapObjectImageAnimTable_QuintyPlump[] = { + gMapObjectImageAnim_83708DC, + gMapObjectImageAnim_83708E4, + gMapObjectImageAnim_83708EC, + gMapObjectImageAnim_83708F4, + gMapObjectImageAnim_83708FC, + gMapObjectImageAnim_8370910, + gMapObjectImageAnim_8370924, + gMapObjectImageAnim_8370938, + gMapObjectImageAnim_837094C, + gMapObjectImageAnim_8370960, + gMapObjectImageAnim_8370974, + gMapObjectImageAnim_8370988, + gMapObjectImageAnim_837099C, + gMapObjectImageAnim_83709B0, + gMapObjectImageAnim_83709C4, + gMapObjectImageAnim_83709D8, + gMapObjectImageAnim_83709EC, + gMapObjectImageAnim_8370A00, + gMapObjectImageAnim_8370A14, + gMapObjectImageAnim_8370A28 +}; + +const union AnimCmd *const gMapObjectImageAnimTable_Standard[] = { + gMapObjectImageAnim_8370A3C, + gMapObjectImageAnim_8370A44, + gMapObjectImageAnim_8370A4C, + gMapObjectImageAnim_8370A54, + gMapObjectImageAnim_8370A5C, + gMapObjectImageAnim_8370A70, + gMapObjectImageAnim_8370A84, + gMapObjectImageAnim_8370A98, + gMapObjectImageAnim_8370AAC, + gMapObjectImageAnim_8370AC0, + gMapObjectImageAnim_8370AD4, + gMapObjectImageAnim_8370AE8, + gMapObjectImageAnim_8370AFC, + gMapObjectImageAnim_8370B10, + gMapObjectImageAnim_8370B24, + gMapObjectImageAnim_8370B38, + gMapObjectImageAnim_8370B4C, + gMapObjectImageAnim_8370B60, + gMapObjectImageAnim_8370B74, + gMapObjectImageAnim_8370B88 +}; + +const union AnimCmd *const gMapObjectImageAnimTable_BrendanMayNormal[] = { + gMapObjectImageAnim_8370A3C, + gMapObjectImageAnim_8370A44, + gMapObjectImageAnim_8370A4C, + gMapObjectImageAnim_8370A54, + gMapObjectImageAnim_8370A5C, + gMapObjectImageAnim_8370A70, + gMapObjectImageAnim_8370A84, + gMapObjectImageAnim_8370A98, + gMapObjectImageAnim_8370AAC, + gMapObjectImageAnim_8370AC0, + gMapObjectImageAnim_8370AD4, + gMapObjectImageAnim_8370AE8, + gMapObjectImageAnim_8370AFC, + gMapObjectImageAnim_8370B10, + gMapObjectImageAnim_8370B24, + gMapObjectImageAnim_8370B38, + gMapObjectImageAnim_8370B4C, + gMapObjectImageAnim_8370B60, + gMapObjectImageAnim_8370B74, + gMapObjectImageAnim_8370B88, + gMapObjectImageAnim_8370B9C, + gMapObjectImageAnim_8370BB0, + gMapObjectImageAnim_8370BC4, + gMapObjectImageAnim_8370BD8 +}; + +const union AnimCmd *const gMapObjectImageAnimTable_AcroBike[] = { + gMapObjectImageAnim_8370A3C, + gMapObjectImageAnim_8370A44, + gMapObjectImageAnim_8370A4C, + gMapObjectImageAnim_8370A54, + gMapObjectImageAnim_8370A5C, + gMapObjectImageAnim_8370A70, + gMapObjectImageAnim_8370A84, + gMapObjectImageAnim_8370A98, + gMapObjectImageAnim_8370AAC, + gMapObjectImageAnim_8370AC0, + gMapObjectImageAnim_8370AD4, + gMapObjectImageAnim_8370AE8, + gMapObjectImageAnim_8370AFC, + gMapObjectImageAnim_8370B10, + gMapObjectImageAnim_8370B24, + gMapObjectImageAnim_8370B38, + gMapObjectImageAnim_8370B4C, + gMapObjectImageAnim_8370B60, + gMapObjectImageAnim_8370B74, + gMapObjectImageAnim_8370B88, + gMapObjectImageAnim_8370C24, + gMapObjectImageAnim_8370C30, + gMapObjectImageAnim_8370C3C, + gMapObjectImageAnim_8370C48, + gMapObjectImageAnim_8370C54, + gMapObjectImageAnim_8370C60, + gMapObjectImageAnim_8370C6C, + gMapObjectImageAnim_8370C78, + gMapObjectImageAnim_8370C84, + gMapObjectImageAnim_8370C90, + gMapObjectImageAnim_8370C9C, + gMapObjectImageAnim_8370CA8, + gMapObjectImageAnim_8370CB4, + gMapObjectImageAnim_8370CC0, + gMapObjectImageAnim_8370CCC, + gMapObjectImageAnim_8370CD8, + gMapObjectImageAnim_8370CE4, + gMapObjectImageAnim_8370CF8, + gMapObjectImageAnim_8370D0C, + gMapObjectImageAnim_8370D20 +}; + +const union AnimCmd *const gMapObjectImageAnimTable_Surfing[] = { + gMapObjectImageAnim_8370A3C, + gMapObjectImageAnim_8370A44, + gMapObjectImageAnim_8370A4C, + gMapObjectImageAnim_8370A54, + gMapObjectImageAnim_8370A5C, + gMapObjectImageAnim_8370A70, + gMapObjectImageAnim_8370A84, + gMapObjectImageAnim_8370A98, + gMapObjectImageAnim_8370AAC, + gMapObjectImageAnim_8370AC0, + gMapObjectImageAnim_8370AD4, + gMapObjectImageAnim_8370AE8, + gMapObjectImageAnim_8370AFC, + gMapObjectImageAnim_8370B10, + gMapObjectImageAnim_8370B24, + gMapObjectImageAnim_8370B38, + gMapObjectImageAnim_8370B4C, + gMapObjectImageAnim_8370B60, + gMapObjectImageAnim_8370B74, + gMapObjectImageAnim_8370B88, + gMapObjectImageAnim_8370C04, + gMapObjectImageAnim_8370C0C, + gMapObjectImageAnim_8370C14, + gMapObjectImageAnim_8370C1C +}; + +const union AnimCmd *const gMapObjectImageAnimTable_Nurse[] = { + gMapObjectImageAnim_8370A3C, + gMapObjectImageAnim_8370A44, + gMapObjectImageAnim_8370A4C, + gMapObjectImageAnim_8370A54, + gMapObjectImageAnim_8370A5C, + gMapObjectImageAnim_8370A70, + gMapObjectImageAnim_8370A84, + gMapObjectImageAnim_8370A98, + gMapObjectImageAnim_8370AAC, + gMapObjectImageAnim_8370AC0, + gMapObjectImageAnim_8370AD4, + gMapObjectImageAnim_8370AE8, + gMapObjectImageAnim_8370AFC, + gMapObjectImageAnim_8370B10, + gMapObjectImageAnim_8370B24, + gMapObjectImageAnim_8370B38, + gMapObjectImageAnim_8370B4C, + gMapObjectImageAnim_8370B60, + gMapObjectImageAnim_8370B74, + gMapObjectImageAnim_8370B88, + gMapObjectImageAnim_8370D7C +}; + +const union AnimCmd *const gMapObjectImageAnimTable_FieldMove[] = { + gMapObjectImageAnim_8370BEC +}; + +const union AnimCmd *const gMapObjectImageAnimTable_BerryTree[] = { + gMapObjectImageAnim_8370D34, + gMapObjectImageAnim_8370D3C, + gMapObjectImageAnim_8370D48, + gMapObjectImageAnim_8370D54, + gMapObjectImageAnim_8370D68 +}; + +const union AnimCmd *const gMapObjectImageAnimTable_BreakableRock[] = { + gMapObjectImageAnim_83708C8, + gMapObjectImageAnim_8370D8C +}; + +const union AnimCmd *const gMapObjectImageAnimTable_CuttableTree[] = { + gMapObjectImageAnim_83708C8, + gMapObjectImageAnim_8370DA0 +}; + +const union AnimCmd *const gMapObjectImageAnimTable_Fishing[] = { + gMapObjectImageAnim_8370DB4, + gMapObjectImageAnim_8370DC8, + gMapObjectImageAnim_8370DDC, + gMapObjectImageAnim_8370DF0, + gMapObjectImageAnim_8370E04, + gMapObjectImageAnim_8370E18, + gMapObjectImageAnim_8370E2C, + gMapObjectImageAnim_8370E40, + gMapObjectImageAnim_8370E54, + gMapObjectImageAnim_8370E68, + gMapObjectImageAnim_8370E7C, + gMapObjectImageAnim_8370E90 +}; + +const union AffineAnimCmd *const gMapObjectRotScalAnimTable_KyogreGroudon[] = { + gMapObjectRotScalAnim_8370EA4, + gMapObjectRotScalAnim_8370ED4 +}; + +#endif //POKERUBY_MAP_OBJECT_ANIMS_H diff --git a/src/data/field_map_obj/map_object_graphics_info.h b/src/data/field_map_obj/map_object_graphics_info.h new file mode 100644 index 000000000..7b021b66d --- /dev/null +++ b/src/data/field_map_obj/map_object_graphics_info.h @@ -0,0 +1,227 @@ +// + +// + +#ifndef POKERUBY_MAP_OBJECT_GRAPHICS_INFO_H +#define POKERUBY_MAP_OBJECT_GRAPHICS_INFO_H + +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_BrendanNormal = {0xffff, 0x1100, 0x1102, 512, 16, 32, 0, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_BrendanMayNormal, gMapObjectPicTable_BrendanNormal, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_BrendanMachBike = {0xffff, 0x1100, 0x1102, 512, 32, 32, 0, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_BIKE_TIRE, &gFieldOamData_32x32, gMapObjectSubspriteTables_32x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_BrendanMachBike, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_BrendanAcroBike = {0xffff, 0x1100, 0x1102, 512, 32, 32, 0, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_BIKE_TIRE, &gFieldOamData_32x32, gMapObjectSubspriteTables_32x32, gMapObjectImageAnimTable_AcroBike, gMapObjectPicTable_BrendanAcroBike, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_BrendanSurfing = {0xffff, 0x1100, 0x11ff, 512, 32, 32, 0, SHADOW_SIZE_M, FALSE, TRUE, TRACKS_FOOT, &gFieldOamData_32x32, gMapObjectSubspriteTables_32x32, gMapObjectImageAnimTable_Surfing, gMapObjectPicTable_BrendanSurfing, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_BrendanFieldMove = {0xffff, 0x1100, 0x1102, 512, 32, 32, 0, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_32x32, gMapObjectSubspriteTables_32x32, gMapObjectImageAnimTable_FieldMove, gMapObjectPicTable_BrendanFieldMove, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_QuintyPlump = {0xffff, 0x110b, 0x11ff, 512, 32, 32, 10, SHADOW_SIZE_L, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_32x32, gMapObjectSubspriteTables_32x32, gMapObjectImageAnimTable_QuintyPlump, gMapObjectPicTable_QuintyPlump, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_LittleBoy1 = {0xffff, 0x1103, 0x11ff, 128, 16, 16, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x16, gMapObjectSubspriteTables_16x16, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_LittleBoy1, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_LittleGirl1 = {0xffff, 0x1104, 0x11ff, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_LittleGirl1, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Boy1 = {0xffff, 0x1105, 0x11ff, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_Boy1, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Girl1 = {0xffff, 0x1104, 0x11ff, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_Girl1, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Boy2 = {0xffff, 0x1103, 0x11ff, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_Boy2, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Girl2 = {0xffff, 0x1105, 0x11ff, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_Girl2, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_LittleBoy2 = {0xffff, 0x1106, 0x11ff, 128, 16, 16, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x16, gMapObjectSubspriteTables_16x16, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_LittleBoy2, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_LittleGirl2 = {0xffff, 0x1104, 0x11ff, 128, 16, 16, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x16, gMapObjectSubspriteTables_16x16, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_LittleGirl2, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Boy3 = {0xffff, 0x1106, 0x11ff, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_Boy3, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Girl3 = {0xffff, 0x1104, 0x11ff, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_Girl3, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Boy4 = {0xffff, 0x1105, 0x11ff, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_Boy4, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Woman1 = {0xffff, 0x1103, 0x11ff, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_Woman1, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_FatMan = {0xffff, 0x1103, 0x11ff, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_FatMan, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Woman2 = {0xffff, 0x1104, 0x11ff, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_Woman2, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Man1 = {0xffff, 0x1105, 0x11ff, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_Man1, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Woman3 = {0xffff, 0x1105, 0x11ff, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_Woman3, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_OldMan1 = {0xffff, 0x1106, 0x11ff, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_OldMan1, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_OldWoman1 = {0xffff, 0x1106, 0x11ff, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_OldWoman1, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Man2 = {0xffff, 0x1105, 0x11ff, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_Man2, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Woman4 = {0xffff, 0x1104, 0x11ff, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_Woman4, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Man3 = {0xffff, 0x1104, 0x11ff, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_Man3, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Woman5 = {0xffff, 0x1103, 0x11ff, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_Woman5, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Cook = {0xffff, 0x1105, 0x11ff, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_Cook, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Woman6 = {0xffff, 0x1105, 0x11ff, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_Woman6, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_OldMan2 = {0xffff, 0x1106, 0x11ff, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_OldMan2, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_OldWoman2 = {0xffff, 0x1105, 0x11ff, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_OldWoman2, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Camper = {0xffff, 0x1105, 0x11ff, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_Camper, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Picnicker = {0xffff, 0x1105, 0x11ff, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_Picnicker, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Man4 = {0xffff, 0x1104, 0x11ff, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_Man4, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Woman7 = {0xffff, 0x1104, 0x11ff, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_Woman7, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Youngster = {0xffff, 0x1103, 0x11ff, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_Youngster, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_BugCatcher = {0xffff, 0x1103, 0x11ff, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_BugCatcher, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_PsychicM = {0xffff, 0x1106, 0x11ff, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_PsychicM, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_SchoolKidM = {0xffff, 0x1103, 0x11ff, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_SchoolKidM, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Maniac = {0xffff, 0x1106, 0x11ff, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_Maniac, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_HexManiac = {0xffff, 0x1106, 0x11ff, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_HexManiac, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Woman8 = {0xffff, 0x1105, 0x11ff, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_Woman8, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_SwimmerM = {0xffff, 0x1103, 0x11ff, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_SwimmerM, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_SwimmerF = {0xffff, 0x1104, 0x11ff, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_SwimmerF, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_BlackBelt = {0xffff, 0x1105, 0x11ff, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_BlackBelt, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Beauty = {0xffff, 0x1105, 0x11ff, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_Beauty, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Scientist1 = {0xffff, 0x1105, 0x11ff, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_Scientist1, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Lass = {0xffff, 0x1106, 0x11ff, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_Lass, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Gentleman = {0xffff, 0x1105, 0x11ff, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_Gentleman, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Sailor = {0xffff, 0x1103, 0x11ff, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_Sailor, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Fisherman = {0xffff, 0x1104, 0x11ff, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_Fisherman, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_RunningTriathleteM = {0xffff, 0x1106, 0x11ff, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_RunningTriathleteM, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_RunningTriathleteF = {0xffff, 0x1104, 0x11ff, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_RunningTriathleteF, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_TuberF = {0xffff, 0x1103, 0x11ff, 128, 16, 16, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x16, gMapObjectSubspriteTables_16x16, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_TuberF, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_TuberM = {0xffff, 0x1104, 0x11ff, 128, 16, 16, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x16, gMapObjectSubspriteTables_16x16, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_TuberM, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Hiker = {0xffff, 0x1103, 0x11ff, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_Hiker, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_CyclingTriathleteM = {0xffff, 0x1105, 0x11ff, 512, 32, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_BIKE_TIRE, &gFieldOamData_32x32, gMapObjectSubspriteTables_32x32, gMapObjectImageAnimTable_AcroBike, gMapObjectPicTable_CyclingTriathleteM, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_CyclingTriathleteF = {0xffff, 0x1103, 0x11ff, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_BIKE_TIRE, &gFieldOamData_32x32, gMapObjectSubspriteTables_32x32, gMapObjectImageAnimTable_AcroBike, gMapObjectPicTable_CyclingTriathleteF, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Nurse = {0xffff, 0x1103, 0x11ff, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_Nurse, gMapObjectPicTable_Nurse, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_ItemBall = {0xffff, 0x1105, 0x11ff, 128, 16, 16, 4, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gFieldOamData_16x16, gMapObjectSubspriteTables_16x16, gMapObjectImageAnimTable_Inanimate, gMapObjectPicTable_ItemBall, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_BerryTree = {0xffff, 0x1103, 0x11ff, 256, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gFieldOamData_16x16, NULL, gMapObjectImageAnimTable_BerryTree, gMapObjectPicTable_PechaBerryTree, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_BerryTreeEarlyStages = {0xffff, 0x1103, 0x11ff, 256, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gFieldOamData_16x16, gMapObjectSubspriteTables_16x16, gMapObjectImageAnimTable_BerryTree, gMapObjectPicTable_PechaBerryTree, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_BerryTreeLateStages = {0xffff, 0x1103, 0x11ff, 256, 16, 32, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_BerryTree, gMapObjectPicTable_PechaBerryTree, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_ProfBirch = {0xffff, 0x1105, 0x11ff, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_ProfBirch, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Man5 = {0xffff, 0x1106, 0x11ff, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_Man5, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Man6 = {0xffff, 0x1104, 0x11ff, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_Man6, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_ReporterM = {0xffff, 0x1106, 0x11ff, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_ReporterM, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_ReporterF = {0xffff, 0x1106, 0x11ff, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_ReporterF, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Bard = {0xffff, 0x1103, 0x11ff, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_MauvilleOldMan1, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Hipster = {0xffff, 0x1104, 0x11ff, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_MauvilleOldMan1, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Trader = {0xffff, 0x1105, 0x11ff, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_MauvilleOldMan1, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Storyteller = {0xffff, 0x1103, 0x11ff, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_MauvilleOldMan2, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Giddy = {0xffff, 0x1104, 0x11ff, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_MauvilleOldMan2, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_UnusedMauvilleOldMan1 = {0xffff, 0x1105, 0x11ff, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_MauvilleOldMan2, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_UnusedMauvilleOldMan2 = {0xffff, 0x1106, 0x11ff, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_MauvilleOldMan2, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_UnusedNatuDoll = {0xffff, 0x1105, 0x11ff, 128, 16, 16, 4, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gFieldOamData_16x16, gMapObjectSubspriteTables_16x16, gMapObjectImageAnimTable_Inanimate, gMapObjectPicTable_UnusedNatuDoll, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_UnusedMagnemiteDoll = {0xffff, 0x1105, 0x11ff, 128, 16, 16, 4, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gFieldOamData_16x16, gMapObjectSubspriteTables_16x16, gMapObjectImageAnimTable_Inanimate, gMapObjectPicTable_UnusedMagnemiteDoll, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_UnusedSquirtleDoll = {0xffff, 0x1103, 0x11ff, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gFieldOamData_16x16, gMapObjectSubspriteTables_16x16, gMapObjectImageAnimTable_Inanimate, gMapObjectPicTable_UnusedSquirtleDoll, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_UnusedWooperDoll = {0xffff, 0x1105, 0x11ff, 128, 16, 16, 4, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gFieldOamData_16x16, gMapObjectSubspriteTables_16x16, gMapObjectImageAnimTable_Inanimate, gMapObjectPicTable_UnusedWooperDoll, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_UnusedPikachuDoll = {0xffff, 0x1104, 0x11ff, 128, 16, 16, 3, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gFieldOamData_16x16, gMapObjectSubspriteTables_16x16, gMapObjectImageAnimTable_Inanimate, gMapObjectPicTable_UnusedPikachuDoll, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_UnusedPorygon2Doll = {0xffff, 0x1103, 0x11ff, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gFieldOamData_16x16, gMapObjectSubspriteTables_16x16, gMapObjectImageAnimTable_Inanimate, gMapObjectPicTable_UnusedPorygon2Doll, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_CuttableTree = {0xffff, 0x1105, 0x11ff, 128, 16, 16, 4, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gFieldOamData_16x16, gMapObjectSubspriteTables_16x16, gMapObjectImageAnimTable_CuttableTree, gMapObjectPicTable_CuttableTree, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_MartEmployee = {0xffff, 0x1103, 0x11ff, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_MartEmployee, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_RooftopSaleWoman = {0xffff, 0x1103, 0x11ff, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_RooftopSaleWoman, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Teala = {0xffff, 0x1103, 0x11ff, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_Teala, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_BreakableRock = {0xffff, 0x1103, 0x11ff, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gFieldOamData_16x16, gMapObjectSubspriteTables_16x16, gMapObjectImageAnimTable_BreakableRock, gMapObjectPicTable_BreakableRock, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_PushableBoulder = {0xffff, 0x1103, 0x11ff, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gFieldOamData_16x16, gMapObjectSubspriteTables_16x16, gMapObjectImageAnimTable_Inanimate, gMapObjectPicTable_PushableBoulder, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_MrBrineysBoat = {0xffff, 0x1105, 0x11ff, 512, 32, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gFieldOamData_32x32, gMapObjectSubspriteTables_32x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_MrBrineysBoat, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_MayNormal = {0xffff, 0x1110, 0x1102, 512, 16, 32, 0, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_BrendanMayNormal, gMapObjectPicTable_MayNormal, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_MayMachBike = {0xffff, 0x1110, 0x1102, 512, 32, 32, 0, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_BIKE_TIRE, &gFieldOamData_32x32, gMapObjectSubspriteTables_32x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_MayMachBike, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_MayAcroBike = {0xffff, 0x1110, 0x1102, 512, 32, 32, 0, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_BIKE_TIRE, &gFieldOamData_32x32, gMapObjectSubspriteTables_32x32, gMapObjectImageAnimTable_AcroBike, gMapObjectPicTable_MayAcroBike, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_MaySurfing = {0xffff, 0x1110, 0x11ff, 512, 32, 32, 0, SHADOW_SIZE_M, FALSE, TRUE, TRACKS_FOOT, &gFieldOamData_32x32, gMapObjectSubspriteTables_32x32, gMapObjectImageAnimTable_Surfing, gMapObjectPicTable_MaySurfing, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_MayFieldMove = {0xffff, 0x1110, 0x1102, 512, 32, 32, 0, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_32x32, gMapObjectSubspriteTables_32x32, gMapObjectImageAnimTable_FieldMove, gMapObjectPicTable_MayFieldMove, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Truck = {0xffff, 0x110d, 0x11ff, 1152, 48, 48, 10, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_NONE, &gFieldOamData_32x32, gMapObjectSubspriteTables_Truck, gMapObjectImageAnimTable_Inanimate, gMapObjectPicTable_Truck, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_MachokeCarryingBox = {0xffff, 0x110e, 0x11ff, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_32x32, gMapObjectSubspriteTables_32x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_MachokeCarryingBox, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_MachokeFacingAway = {0xffff, 0x110e, 0x11ff, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_32x32, gMapObjectSubspriteTables_32x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_MachokeFacingAway, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_BirchsBag = {0xffff, 0x1104, 0x11ff, 128, 16, 16, 3, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gFieldOamData_16x16, gMapObjectSubspriteTables_16x16, gMapObjectImageAnimTable_Inanimate, gMapObjectPicTable_BirchsBag, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Poochyena = {0xffff, 0x110f, 0x11ff, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_32x32, gMapObjectSubspriteTables_32x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_Poochyena, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Artist = {0xffff, 0x1106, 0x11ff, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_Artist, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_RivalBrendanNormal = {0xffff, 0x1100, 0x1102, 256, 16, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_BrendanMayNormal, gMapObjectPicTable_BrendanNormal, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_RivalBrendanMachBike = {0xffff, 0x1100, 0x1102, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_BIKE_TIRE, &gFieldOamData_32x32, gMapObjectSubspriteTables_32x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_BrendanMachBike, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_RivalBrendanAcroBike = {0xffff, 0x1100, 0x1102, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_BIKE_TIRE, &gFieldOamData_32x32, gMapObjectSubspriteTables_32x32, gMapObjectImageAnimTable_AcroBike, gMapObjectPicTable_BrendanAcroBike, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_RivalBrendanSurfing = {0xffff, 0x1100, 0x11ff, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, TRUE, TRACKS_FOOT, &gFieldOamData_32x32, gMapObjectSubspriteTables_32x32, gMapObjectImageAnimTable_Surfing, gMapObjectPicTable_BrendanSurfing, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_RivalBrendanFieldMove = {0xffff, 0x1100, 0x1102, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_32x32, gMapObjectSubspriteTables_32x32, gMapObjectImageAnimTable_FieldMove, gMapObjectPicTable_BrendanFieldMove, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_RivalMayNormal = {0xffff, 0x1110, 0x1102, 256, 16, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_BrendanMayNormal, gMapObjectPicTable_MayNormal, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_RivalMayMachBike = {0xffff, 0x1110, 0x1102, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_BIKE_TIRE, &gFieldOamData_32x32, gMapObjectSubspriteTables_32x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_MayMachBike, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_RivalMayAcroBike = {0xffff, 0x1110, 0x1102, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_BIKE_TIRE, &gFieldOamData_32x32, gMapObjectSubspriteTables_32x32, gMapObjectImageAnimTable_AcroBike, gMapObjectPicTable_MayAcroBike, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_RivalMaySurfing = {0xffff, 0x1110, 0x11ff, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, TRUE, TRACKS_FOOT, &gFieldOamData_32x32, gMapObjectSubspriteTables_32x32, gMapObjectImageAnimTable_Surfing, gMapObjectPicTable_MaySurfing, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_RivalMayFieldMove = {0xffff, 0x1110, 0x1102, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_32x32, gMapObjectSubspriteTables_32x32, gMapObjectImageAnimTable_FieldMove, gMapObjectPicTable_MayFieldMove, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Cameraman = {0xffff, 0x1106, 0x11ff, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_Cameraman, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_BrendanUnderwater = {0xffff, 0x1115, 0x11ff, 512, 32, 32, 0, SHADOW_SIZE_M, FALSE, TRUE, TRACKS_FOOT, &gFieldOamData_32x32, gMapObjectSubspriteTables_32x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_BrendanUnderwater, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_MayUnderwater = {0xffff, 0x1115, 0x11ff, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, TRUE, TRACKS_FOOT, &gFieldOamData_32x32, gMapObjectSubspriteTables_32x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_MayUnderwater, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_MovingBox = {0xffff, 0x1112, 0x11ff, 128, 16, 16, 10, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gFieldOamData_16x16, gMapObjectSubspriteTables_16x16, gMapObjectImageAnimTable_Inanimate, gMapObjectPicTable_MovingBox, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_CableCar = {0xffff, 0x1113, 0x11ff, 2048, 64, 64, 10, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_NONE, &gFieldOamData_64x64, gMapObjectSubspriteTables_CableCar, gMapObjectImageAnimTable_Inanimate, gMapObjectPicTable_CableCar, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Scientist2 = {0xffff, 0x1103, 0x11ff, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_Scientist2, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Man7 = {0xffff, 0x1104, 0x11ff, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_Man7, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_AquaMemberM = {0xffff, 0x1106, 0x11ff, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_AquaMemberM, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_AquaMemberF = {0xffff, 0x1106, 0x11ff, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_AquaMemberF, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_MagmaMemberM = {0xffff, 0x1104, 0x11ff, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_MagmaMemberM, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_MagmaMemberF = {0xffff, 0x1104, 0x11ff, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_MagmaMemberF, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Sidney = {0xffff, 0x1104, 0x11ff, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_Sidney, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Phoebe = {0xffff, 0x1103, 0x11ff, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_Phoebe, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Glacia = {0xffff, 0x1104, 0x11ff, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_Glacia, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Drake = {0xffff, 0x1105, 0x11ff, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_Drake, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Roxanne = {0xffff, 0x1103, 0x11ff, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_Roxanne, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Brawly = {0xffff, 0x1105, 0x11ff, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_Brawly, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Wattson = {0xffff, 0x1104, 0x11ff, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_Wattson, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Flannery = {0xffff, 0x1103, 0x11ff, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_Flannery, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Norman = {0xffff, 0x1106, 0x11ff, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_Norman, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Winona = {0xffff, 0x1106, 0x11ff, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_Winona, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Liza = {0xffff, 0x1103, 0x11ff, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_Liza, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Tate = {0xffff, 0x1103, 0x11ff, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_Tate, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Wallace = {0xffff, 0x1106, 0x11ff, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_Wallace, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Steven = {0xffff, 0x1106, 0x11ff, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_Steven, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Wally = {0xffff, 0x1103, 0x11ff, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_Wally, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_LittleBoy3 = {0xffff, 0x1103, 0x11ff, 128, 16, 16, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x16, gMapObjectSubspriteTables_16x16, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_LittleBoy3, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_BrendanFishing = {0xffff, 0x1100, 0x1102, 512, 32, 32, 0, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_32x32, gMapObjectSubspriteTables_32x32, gMapObjectImageAnimTable_Fishing, gMapObjectPicTable_BrendanFishing, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_MayFishing = {0xffff, 0x1110, 0x1102, 512, 32, 32, 0, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_32x32, gMapObjectSubspriteTables_32x32, gMapObjectImageAnimTable_Fishing, gMapObjectPicTable_MayFishing, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_HotSpringsOldWoman = {0xffff, 0x1106, 0x11ff, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_HotSpringsOldWoman, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_SSTidal = {0xffff, 0x1114, 0x11ff, 1920, 96, 40, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gFieldOamData_8x8, gMapObjectSubspriteTables_SSTidal, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_SSTidal, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_SubmarineShadow = {0xffff, 0x111a, 0x11ff, 1408, 88, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gFieldOamData_8x8, gMapObjectSubspriteTables_SubmarineShadow, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_SubmarineShadow, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_PichuDoll = {0xffff, 0x1104, 0x11ff, 128, 16, 16, 3, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gFieldOamData_16x16, gMapObjectSubspriteTables_16x16, gMapObjectImageAnimTable_Inanimate, gMapObjectPicTable_PichuDoll, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_PikachuDoll = {0xffff, 0x1104, 0x11ff, 128, 16, 16, 3, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gFieldOamData_16x16, gMapObjectSubspriteTables_16x16, gMapObjectImageAnimTable_Inanimate, gMapObjectPicTable_PikachuDoll, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_MarillDoll = {0xffff, 0x1103, 0x11ff, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gFieldOamData_16x16, gMapObjectSubspriteTables_16x16, gMapObjectImageAnimTable_Inanimate, gMapObjectPicTable_MarillDoll, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_TogepiDoll = {0xffff, 0x1105, 0x11ff, 128, 16, 16, 4, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gFieldOamData_16x16, gMapObjectSubspriteTables_16x16, gMapObjectImageAnimTable_Inanimate, gMapObjectPicTable_TogepiDoll, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_CyndaquilDoll = {0xffff, 0x1106, 0x11ff, 128, 16, 16, 5, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gFieldOamData_16x16, gMapObjectSubspriteTables_16x16, gMapObjectImageAnimTable_Inanimate, gMapObjectPicTable_CyndaquilDoll, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_ChikoritaDoll = {0xffff, 0x1105, 0x11ff, 128, 16, 16, 4, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gFieldOamData_16x16, gMapObjectSubspriteTables_16x16, gMapObjectImageAnimTable_Inanimate, gMapObjectPicTable_ChikoritaDoll, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_TotodileDoll = {0xffff, 0x1103, 0x11ff, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gFieldOamData_16x16, gMapObjectSubspriteTables_16x16, gMapObjectImageAnimTable_Inanimate, gMapObjectPicTable_TotodileDoll, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_JigglypuffDoll = {0xffff, 0x1103, 0x11ff, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gFieldOamData_16x16, gMapObjectSubspriteTables_16x16, gMapObjectImageAnimTable_Inanimate, gMapObjectPicTable_JigglypuffDoll, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_MeowthDoll = {0xffff, 0x1104, 0x11ff, 128, 16, 16, 3, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gFieldOamData_16x16, gMapObjectSubspriteTables_16x16, gMapObjectImageAnimTable_Inanimate, gMapObjectPicTable_MeowthDoll, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_ClefairyDoll = {0xffff, 0x1103, 0x11ff, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gFieldOamData_16x16, gMapObjectSubspriteTables_16x16, gMapObjectImageAnimTable_Inanimate, gMapObjectPicTable_ClefairyDoll, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_DittoDoll = {0xffff, 0x1106, 0x11ff, 128, 16, 16, 5, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gFieldOamData_16x16, gMapObjectSubspriteTables_16x16, gMapObjectImageAnimTable_Inanimate, gMapObjectPicTable_DittoDoll, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_SmoochumDoll = {0xffff, 0x1106, 0x11ff, 128, 16, 16, 5, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gFieldOamData_16x16, gMapObjectSubspriteTables_16x16, gMapObjectImageAnimTable_Inanimate, gMapObjectPicTable_SmoochumDoll, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_TreeckoDoll = {0xffff, 0x1105, 0x11ff, 128, 16, 16, 4, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gFieldOamData_16x16, gMapObjectSubspriteTables_16x16, gMapObjectImageAnimTable_Inanimate, gMapObjectPicTable_TreeckoDoll, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_TorchicDoll = {0xffff, 0x1104, 0x11ff, 128, 16, 16, 3, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gFieldOamData_16x16, gMapObjectSubspriteTables_16x16, gMapObjectImageAnimTable_Inanimate, gMapObjectPicTable_TorchicDoll, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_MudkipDoll = {0xffff, 0x1103, 0x11ff, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gFieldOamData_16x16, gMapObjectSubspriteTables_16x16, gMapObjectImageAnimTable_Inanimate, gMapObjectPicTable_MudkipDoll, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_DuskullDoll = {0xffff, 0x1106, 0x11ff, 128, 16, 16, 5, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gFieldOamData_16x16, gMapObjectSubspriteTables_16x16, gMapObjectImageAnimTable_Inanimate, gMapObjectPicTable_DuskullDoll, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_WynautDoll = {0xffff, 0x1103, 0x11ff, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gFieldOamData_16x16, gMapObjectSubspriteTables_16x16, gMapObjectImageAnimTable_Inanimate, gMapObjectPicTable_WynautDoll, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_BaltoyDoll = {0xffff, 0x1103, 0x11ff, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gFieldOamData_16x16, gMapObjectSubspriteTables_16x16, gMapObjectImageAnimTable_Inanimate, gMapObjectPicTable_BaltoyDoll, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_KecleonDoll = {0xffff, 0x1105, 0x11ff, 128, 16, 16, 4, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gFieldOamData_16x16, gMapObjectSubspriteTables_16x16, gMapObjectImageAnimTable_Inanimate, gMapObjectPicTable_KecleonDoll, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_AzurillDoll = {0xffff, 0x1103, 0x11ff, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gFieldOamData_16x16, gMapObjectSubspriteTables_16x16, gMapObjectImageAnimTable_Inanimate, gMapObjectPicTable_AzurillDoll, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_SkittyDoll = {0xffff, 0x1103, 0x11ff, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gFieldOamData_16x16, gMapObjectSubspriteTables_16x16, gMapObjectImageAnimTable_Inanimate, gMapObjectPicTable_SkittyDoll, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_SwabluDoll = {0xffff, 0x1103, 0x11ff, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gFieldOamData_16x16, gMapObjectSubspriteTables_16x16, gMapObjectImageAnimTable_Inanimate, gMapObjectPicTable_SwabluDoll, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_GulpinDoll = {0xffff, 0x1105, 0x11ff, 128, 16, 16, 4, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gFieldOamData_16x16, gMapObjectSubspriteTables_16x16, gMapObjectImageAnimTable_Inanimate, gMapObjectPicTable_GulpinDoll, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_LotadDoll = {0xffff, 0x1105, 0x11ff, 128, 16, 16, 4, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gFieldOamData_16x16, gMapObjectSubspriteTables_16x16, gMapObjectImageAnimTable_Inanimate, gMapObjectPicTable_LotadDoll, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_SeedotDoll = {0xffff, 0x1105, 0x11ff, 128, 16, 16, 4, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gFieldOamData_16x16, gMapObjectSubspriteTables_16x16, gMapObjectImageAnimTable_Inanimate, gMapObjectPicTable_SeedotDoll, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_PikaCushion = {0xffff, 0x1104, 0x11ff, 128, 16, 16, 3, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gFieldOamData_16x16, gMapObjectSubspriteTables_16x16, gMapObjectImageAnimTable_Inanimate, gMapObjectPicTable_PikaCushion, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_RoundCushion = {0xffff, 0x1103, 0x11ff, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gFieldOamData_16x16, gMapObjectSubspriteTables_16x16, gMapObjectImageAnimTable_Inanimate, gMapObjectPicTable_RoundCushion, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_KissCushion = {0xffff, 0x1106, 0x11ff, 128, 16, 16, 5, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gFieldOamData_16x16, gMapObjectSubspriteTables_16x16, gMapObjectImageAnimTable_Inanimate, gMapObjectPicTable_KissCushion, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_ZigzagCushion = {0xffff, 0x1103, 0x11ff, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gFieldOamData_16x16, gMapObjectSubspriteTables_16x16, gMapObjectImageAnimTable_Inanimate, gMapObjectPicTable_ZigzagCushion, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_SpinCushion = {0xffff, 0x1103, 0x11ff, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gFieldOamData_16x16, gMapObjectSubspriteTables_16x16, gMapObjectImageAnimTable_Inanimate, gMapObjectPicTable_SpinCushion, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_DiamondCushion = {0xffff, 0x1106, 0x11ff, 128, 16, 16, 5, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gFieldOamData_16x16, gMapObjectSubspriteTables_16x16, gMapObjectImageAnimTable_Inanimate, gMapObjectPicTable_DiamondCushion, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_BallCushion = {0xffff, 0x1105, 0x11ff, 128, 16, 16, 4, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gFieldOamData_16x16, gMapObjectSubspriteTables_16x16, gMapObjectImageAnimTable_Inanimate, gMapObjectPicTable_BallCushion, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_GrassCushion = {0xffff, 0x1105, 0x11ff, 128, 16, 16, 4, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gFieldOamData_16x16, gMapObjectSubspriteTables_16x16, gMapObjectImageAnimTable_Inanimate, gMapObjectPicTable_GrassCushion, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_FireCushion = {0xffff, 0x1104, 0x11ff, 128, 16, 16, 3, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gFieldOamData_16x16, gMapObjectSubspriteTables_16x16, gMapObjectImageAnimTable_Inanimate, gMapObjectPicTable_FireCushion, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_WaterCushion = {0xffff, 0x1103, 0x11ff, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gFieldOamData_16x16, gMapObjectSubspriteTables_16x16, gMapObjectImageAnimTable_Inanimate, gMapObjectPicTable_WaterCushion, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_BigSnorlaxDoll = {0xffff, 0x1106, 0x11ff, 512, 32, 32, 5, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_NONE, &gFieldOamData_32x32, gMapObjectSubspriteTables_32x32, gMapObjectImageAnimTable_Inanimate, gMapObjectPicTable_BigSnorlaxDoll, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_BigRhydonDoll = {0xffff, 0x1106, 0x11ff, 512, 32, 32, 5, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_NONE, &gFieldOamData_32x32, gMapObjectSubspriteTables_32x32, gMapObjectImageAnimTable_Inanimate, gMapObjectPicTable_BigRhydonDoll, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_BigLaprasDoll = {0xffff, 0x1103, 0x11ff, 512, 32, 32, 2, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_NONE, &gFieldOamData_32x32, gMapObjectSubspriteTables_32x32, gMapObjectImageAnimTable_Inanimate, gMapObjectPicTable_BigLaprasDoll, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_BigVenusaurDoll = {0xffff, 0x1105, 0x11ff, 512, 32, 32, 4, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_NONE, &gFieldOamData_32x32, gMapObjectSubspriteTables_32x32, gMapObjectImageAnimTable_Inanimate, gMapObjectPicTable_BigVenusaurDoll, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_BigCharizardDoll = {0xffff, 0x1104, 0x11ff, 512, 32, 32, 3, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_NONE, &gFieldOamData_32x32, gMapObjectSubspriteTables_32x32, gMapObjectImageAnimTable_Inanimate, gMapObjectPicTable_BigCharizardDoll, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_BigBlastoiseDoll = {0xffff, 0x1103, 0x11ff, 512, 32, 32, 2, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_NONE, &gFieldOamData_32x32, gMapObjectSubspriteTables_32x32, gMapObjectImageAnimTable_Inanimate, gMapObjectPicTable_BigBlastoiseDoll, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_BigWailmerDoll = {0xffff, 0x1106, 0x11ff, 512, 32, 32, 5, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_NONE, &gFieldOamData_32x32, gMapObjectSubspriteTables_32x32, gMapObjectImageAnimTable_Inanimate, gMapObjectPicTable_BigWailmerDoll, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_BigRegirockDoll = {0xffff, 0x1103, 0x11ff, 512, 32, 32, 2, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_NONE, &gFieldOamData_32x32, gMapObjectSubspriteTables_32x32, gMapObjectImageAnimTable_Inanimate, gMapObjectPicTable_BigRegirockDoll, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_BigRegiceDoll = {0xffff, 0x1105, 0x11ff, 512, 32, 32, 4, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_NONE, &gFieldOamData_32x32, gMapObjectSubspriteTables_32x32, gMapObjectImageAnimTable_Inanimate, gMapObjectPicTable_BigRegiceDoll, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_BigRegisteelDoll = {0xffff, 0x1106, 0x11ff, 512, 32, 32, 5, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_NONE, &gFieldOamData_32x32, gMapObjectSubspriteTables_32x32, gMapObjectImageAnimTable_Inanimate, gMapObjectPicTable_BigRegisteelDoll, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Latias = {0xffff, 0x1104, 0x11ff, 512, 32, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gFieldOamData_32x32, gMapObjectSubspriteTables_32x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_LatiasLatios, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Latios = {0xffff, 0x1103, 0x11ff, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gFieldOamData_32x32, gMapObjectSubspriteTables_32x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_LatiasLatios, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Boy5 = {0xffff, 0x1105, 0x11ff, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_Boy5, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_ContestJudge = {0xffff, 0x1105, 0x11ff, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_ContestJudge, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_BrendanWatering = {0xffff, 0x1100, 0x1102, 512, 32, 32, 0, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_32x32, gMapObjectSubspriteTables_32x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_BrendanWatering, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_MayWatering = {0xffff, 0x1110, 0x1102, 512, 32, 32, 0, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_32x32, gMapObjectSubspriteTables_32x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_MayWatering, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_BrendanDecorating = {0xffff, 0x1100, 0x1102, 256, 16, 32, 10, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_Inanimate, gMapObjectPicTable_BrendanDecorating, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_MayDecorating = {0xffff, 0x1110, 0x1102, 256, 16, 32, 10, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_Inanimate, gMapObjectPicTable_MayDecorating, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Archie = {0xffff, 0x1103, 0x11ff, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_Archie, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Maxie = {0xffff, 0x1104, 0x11ff, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_Maxie, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Kyogre1 = {0xffff, 0x1106, 0x11ff, 512, 32, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_32x32, gMapObjectSubspriteTables_32x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_Kyogre, gMapObjectRotScalAnimTable_KyogreGroudon}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Groudon1 = {0xffff, 0x1105, 0x11ff, 512, 32, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_32x32, gMapObjectSubspriteTables_32x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_Groudon, gMapObjectRotScalAnimTable_KyogreGroudon}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Fossil = {0xffff, 0x1103, 0x11ff, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gFieldOamData_16x16, gMapObjectSubspriteTables_16x16, gMapObjectImageAnimTable_Inanimate, gMapObjectPicTable_Fossil, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Regirock = {0xffff, 0x1104, 0x11ff, 512, 32, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_32x32, gMapObjectSubspriteTables_32x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_Regi, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Regice = {0xffff, 0x1105, 0x11ff, 512, 32, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_32x32, gMapObjectSubspriteTables_32x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_Regi, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Registeel = {0xffff, 0x1106, 0x11ff, 512, 32, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_32x32, gMapObjectSubspriteTables_32x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_Regi, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Skitty = {0xffff, 0x1103, 0x11ff, 128, 16, 16, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x16, gMapObjectSubspriteTables_16x16, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_Skitty, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Kecleon1 = {0xffff, 0x1105, 0x11ff, 128, 16, 16, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x16, gMapObjectSubspriteTables_16x16, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_Kecleon, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Kyogre2 = {0xffff, 0x1116, 0x11ff, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_32x32, gMapObjectSubspriteTables_32x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_Kyogre, gMapObjectRotScalAnimTable_KyogreGroudon}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Groudon2 = {0xffff, 0x1118, 0x11ff, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_32x32, gMapObjectSubspriteTables_32x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_Groudon, gMapObjectRotScalAnimTable_KyogreGroudon}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Rayquaza = {0xffff, 0x1105, 0x11ff, 512, 32, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_32x32, gMapObjectSubspriteTables_32x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_Rayquaza, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Zigzagoon = {0xffff, 0x1103, 0x11ff, 128, 16, 16, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x16, gMapObjectSubspriteTables_16x16, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_Zigzagoon, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Pikachu = {0xffff, 0x1104, 0x11ff, 128, 16, 16, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x16, gMapObjectSubspriteTables_16x16, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_Pikachu, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Azumarill = {0xffff, 0x1103, 0x11ff, 128, 16, 16, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x16, gMapObjectSubspriteTables_16x16, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_Azumarill, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Wingull = {0xffff, 0x1103, 0x11ff, 128, 16, 16, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x16, gMapObjectSubspriteTables_16x16, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_Wingull, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Kecleon2 = {0xffff, 0x1105, 0x1102, 128, 16, 16, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x16, gMapObjectSubspriteTables_16x16, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_Kecleon, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_TuberMSwimming = {0xffff, 0x1104, 0x11ff, 128, 16, 16, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x16, gMapObjectSubspriteTables_16x16, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_TuberMSwimming, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Azurill = {0xffff, 0x1103, 0x11ff, 128, 16, 16, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x16, gMapObjectSubspriteTables_16x16, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_Azurill, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Mom = {0xffff, 0x1106, 0x11ff, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_Standard, gMapObjectPicTable_Mom, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_LinkBrendan = {0xffff, 0x1110, 0x1102, 256, 16, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_BrendanMayNormal, gMapObjectPicTable_BrendanNormal, gDummySpriteAffineAnimTable}; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_LinkMay = {0xffff, 0x1110, 0x1102, 256, 16, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gMapObjectSubspriteTables_16x32, gMapObjectImageAnimTable_BrendanMayNormal, gMapObjectPicTable_MayNormal, gDummySpriteAffineAnimTable}; + +#endif //POKERUBY_MAP_OBJECT_GRAPHICS_INFO_H diff --git a/src/data/field_map_obj/map_object_graphics_info_pointers.h b/src/data/field_map_obj/map_object_graphics_info_pointers.h new file mode 100644 index 000000000..22a052b0d --- /dev/null +++ b/src/data/field_map_obj/map_object_graphics_info_pointers.h @@ -0,0 +1,448 @@ +// + +// + +#ifndef POKERUBY_MAP_OBJECT_GRAPHICS_INFO_POINTERS_H +#define POKERUBY_MAP_OBJECT_GRAPHICS_INFO_POINTERS_H + +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_BrendanNormal; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_BrendanMachBike; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_BrendanSurfing; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_BrendanFieldMove; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_QuintyPlump; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_LittleBoy1; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_LittleGirl1; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Boy1; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Girl1; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Boy2; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Girl2; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_LittleBoy2; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_LittleGirl2; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Boy3; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Girl3; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Boy4; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Woman1; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_FatMan; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Woman2; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Man1; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Woman3; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_OldMan1; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_OldWoman1; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Man2; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Woman4; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Man3; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Woman5; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Cook; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Woman6; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_OldMan2; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_OldWoman2; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Camper; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Picnicker; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Man4; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Woman7; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Youngster; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_BugCatcher; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_PsychicM; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_SchoolKidM; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Maniac; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_HexManiac; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Woman8; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_SwimmerM; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_SwimmerF; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_BlackBelt; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Beauty; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Scientist1; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Lass; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Gentleman; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Sailor; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Fisherman; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_RunningTriathleteM; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_RunningTriathleteF; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_TuberF; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_TuberM; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Hiker; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_CyclingTriathleteM; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_CyclingTriathleteF; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Nurse; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_ItemBall; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_BerryTree; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_BerryTreeEarlyStages; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_BerryTreeLateStages; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_BrendanAcroBike; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_ProfBirch; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Man5; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Man6; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_ReporterM; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_ReporterF; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Bard; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Hipster; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Trader; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Storyteller; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Giddy; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_UnusedMauvilleOldMan1; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_UnusedMauvilleOldMan2; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_UnusedNatuDoll; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_UnusedMagnemiteDoll; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_UnusedSquirtleDoll; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_UnusedWooperDoll; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_UnusedPikachuDoll; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_UnusedPorygon2Doll; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_CuttableTree; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_MartEmployee; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_RooftopSaleWoman; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Teala; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_BreakableRock; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_PushableBoulder; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_MrBrineysBoat; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_MayNormal; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_MayMachBike; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_MayAcroBike; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_MaySurfing; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_MayFieldMove; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Truck; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_MachokeCarryingBox; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_MachokeFacingAway; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_BirchsBag; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Poochyena; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Artist; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_RivalBrendanNormal; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_RivalBrendanMachBike; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_RivalBrendanAcroBike; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_RivalBrendanSurfing; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_RivalBrendanFieldMove; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_RivalMayNormal; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_RivalMayMachBike; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_RivalMayAcroBike; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_RivalMaySurfing; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_RivalMayFieldMove; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Cameraman; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_BrendanUnderwater; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_MayUnderwater; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_MovingBox; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_CableCar; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Scientist2; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Man7; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_AquaMemberM; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_AquaMemberF; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_MagmaMemberM; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_MagmaMemberF; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Sidney; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Phoebe; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Glacia; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Drake; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Roxanne; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Brawly; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Wattson; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Flannery; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Norman; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Winona; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Liza; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Tate; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Wallace; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Steven; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Wally; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_LittleBoy3; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_BrendanFishing; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_MayFishing; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_HotSpringsOldWoman; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_SSTidal; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_SubmarineShadow; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_PichuDoll; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_PikachuDoll; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_MarillDoll; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_TogepiDoll; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_CyndaquilDoll; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_ChikoritaDoll; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_TotodileDoll; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_JigglypuffDoll; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_MeowthDoll; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_ClefairyDoll; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_DittoDoll; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_SmoochumDoll; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_TreeckoDoll; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_TorchicDoll; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_MudkipDoll; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_DuskullDoll; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_WynautDoll; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_BaltoyDoll; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_KecleonDoll; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_AzurillDoll; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_SkittyDoll; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_SwabluDoll; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_GulpinDoll; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_LotadDoll; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_SeedotDoll; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_PikaCushion; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_RoundCushion; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_KissCushion; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_ZigzagCushion; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_SpinCushion; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_DiamondCushion; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_BallCushion; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_GrassCushion; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_FireCushion; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_WaterCushion; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_BigSnorlaxDoll; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_BigRhydonDoll; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_BigLaprasDoll; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_BigVenusaurDoll; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_BigCharizardDoll; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_BigBlastoiseDoll; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_BigWailmerDoll; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_BigRegirockDoll; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_BigRegiceDoll; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_BigRegisteelDoll; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Latias; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Latios; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Boy5; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_ContestJudge; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_BrendanWatering; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_MayWatering; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_BrendanDecorating; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_MayDecorating; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Archie; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Maxie; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Kyogre1; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Groudon1; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Fossil; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Regirock; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Regice; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Registeel; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Skitty; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Kecleon1; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Kyogre2; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Groudon2; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Rayquaza; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Zigzagoon; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Pikachu; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Azumarill; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Wingull; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Kecleon2; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_TuberMSwimming; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Azurill; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_Mom; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_LinkBrendan; +const struct MapObjectGraphicsInfo gMapObjectGraphicsInfo_LinkMay; + +const struct MapObjectGraphicsInfo *const gMapObjectGraphicsInfoPointers[] = { + &gMapObjectGraphicsInfo_BrendanNormal, + &gMapObjectGraphicsInfo_BrendanMachBike, + &gMapObjectGraphicsInfo_BrendanSurfing, + &gMapObjectGraphicsInfo_BrendanFieldMove, + &gMapObjectGraphicsInfo_QuintyPlump, + &gMapObjectGraphicsInfo_LittleBoy1, + &gMapObjectGraphicsInfo_LittleGirl1, + &gMapObjectGraphicsInfo_Boy1, + &gMapObjectGraphicsInfo_Girl1, + &gMapObjectGraphicsInfo_Boy2, + &gMapObjectGraphicsInfo_Girl2, + &gMapObjectGraphicsInfo_LittleBoy2, + &gMapObjectGraphicsInfo_LittleGirl2, + &gMapObjectGraphicsInfo_Boy3, + &gMapObjectGraphicsInfo_Girl3, + &gMapObjectGraphicsInfo_Boy4, + &gMapObjectGraphicsInfo_Woman1, + &gMapObjectGraphicsInfo_FatMan, + &gMapObjectGraphicsInfo_Woman2, + &gMapObjectGraphicsInfo_Man1, + &gMapObjectGraphicsInfo_Woman3, + &gMapObjectGraphicsInfo_OldMan1, + &gMapObjectGraphicsInfo_OldWoman1, + &gMapObjectGraphicsInfo_Man2, + &gMapObjectGraphicsInfo_Woman4, + &gMapObjectGraphicsInfo_Man3, + &gMapObjectGraphicsInfo_Woman5, + &gMapObjectGraphicsInfo_Cook, + &gMapObjectGraphicsInfo_Woman6, + &gMapObjectGraphicsInfo_OldMan2, + &gMapObjectGraphicsInfo_OldWoman2, + &gMapObjectGraphicsInfo_Camper, + &gMapObjectGraphicsInfo_Picnicker, + &gMapObjectGraphicsInfo_Man4, + &gMapObjectGraphicsInfo_Woman7, + &gMapObjectGraphicsInfo_Youngster, + &gMapObjectGraphicsInfo_BugCatcher, + &gMapObjectGraphicsInfo_PsychicM, + &gMapObjectGraphicsInfo_SchoolKidM, + &gMapObjectGraphicsInfo_Maniac, + &gMapObjectGraphicsInfo_HexManiac, + &gMapObjectGraphicsInfo_Woman8, + &gMapObjectGraphicsInfo_SwimmerM, + &gMapObjectGraphicsInfo_SwimmerF, + &gMapObjectGraphicsInfo_BlackBelt, + &gMapObjectGraphicsInfo_Beauty, + &gMapObjectGraphicsInfo_Scientist1, + &gMapObjectGraphicsInfo_Lass, + &gMapObjectGraphicsInfo_Gentleman, + &gMapObjectGraphicsInfo_Sailor, + &gMapObjectGraphicsInfo_Fisherman, + &gMapObjectGraphicsInfo_RunningTriathleteM, + &gMapObjectGraphicsInfo_RunningTriathleteF, + &gMapObjectGraphicsInfo_TuberF, + &gMapObjectGraphicsInfo_TuberM, + &gMapObjectGraphicsInfo_Hiker, + &gMapObjectGraphicsInfo_CyclingTriathleteM, + &gMapObjectGraphicsInfo_CyclingTriathleteF, + &gMapObjectGraphicsInfo_Nurse, + &gMapObjectGraphicsInfo_ItemBall, + &gMapObjectGraphicsInfo_BerryTree, + &gMapObjectGraphicsInfo_BerryTreeEarlyStages, + &gMapObjectGraphicsInfo_BerryTreeLateStages, + &gMapObjectGraphicsInfo_BrendanAcroBike, + &gMapObjectGraphicsInfo_ProfBirch, + &gMapObjectGraphicsInfo_Man5, + &gMapObjectGraphicsInfo_Man6, + &gMapObjectGraphicsInfo_ReporterM, + &gMapObjectGraphicsInfo_ReporterF, + &gMapObjectGraphicsInfo_Bard, + &gMapObjectGraphicsInfo_Hipster, + &gMapObjectGraphicsInfo_Trader, + &gMapObjectGraphicsInfo_Storyteller, + &gMapObjectGraphicsInfo_Giddy, + &gMapObjectGraphicsInfo_UnusedMauvilleOldMan1, + &gMapObjectGraphicsInfo_UnusedMauvilleOldMan2, + &gMapObjectGraphicsInfo_UnusedNatuDoll, + &gMapObjectGraphicsInfo_UnusedMagnemiteDoll, + &gMapObjectGraphicsInfo_UnusedSquirtleDoll, + &gMapObjectGraphicsInfo_UnusedWooperDoll, + &gMapObjectGraphicsInfo_UnusedPikachuDoll, + &gMapObjectGraphicsInfo_UnusedPorygon2Doll, + &gMapObjectGraphicsInfo_CuttableTree, + &gMapObjectGraphicsInfo_MartEmployee, + &gMapObjectGraphicsInfo_RooftopSaleWoman, + &gMapObjectGraphicsInfo_Teala, + &gMapObjectGraphicsInfo_BreakableRock, + &gMapObjectGraphicsInfo_PushableBoulder, + &gMapObjectGraphicsInfo_MrBrineysBoat, + &gMapObjectGraphicsInfo_MayNormal, + &gMapObjectGraphicsInfo_MayMachBike, + &gMapObjectGraphicsInfo_MayAcroBike, + &gMapObjectGraphicsInfo_MaySurfing, + &gMapObjectGraphicsInfo_MayFieldMove, + &gMapObjectGraphicsInfo_Truck, + &gMapObjectGraphicsInfo_MachokeCarryingBox, + &gMapObjectGraphicsInfo_MachokeFacingAway, + &gMapObjectGraphicsInfo_BirchsBag, + &gMapObjectGraphicsInfo_Poochyena, + &gMapObjectGraphicsInfo_Artist, + &gMapObjectGraphicsInfo_RivalBrendanNormal, + &gMapObjectGraphicsInfo_RivalBrendanMachBike, + &gMapObjectGraphicsInfo_RivalBrendanAcroBike, + &gMapObjectGraphicsInfo_RivalBrendanSurfing, + &gMapObjectGraphicsInfo_RivalBrendanFieldMove, + &gMapObjectGraphicsInfo_RivalMayNormal, + &gMapObjectGraphicsInfo_RivalMayMachBike, + &gMapObjectGraphicsInfo_RivalMayAcroBike, + &gMapObjectGraphicsInfo_RivalMaySurfing, + &gMapObjectGraphicsInfo_RivalMayFieldMove, + &gMapObjectGraphicsInfo_Cameraman, + &gMapObjectGraphicsInfo_BrendanUnderwater, + &gMapObjectGraphicsInfo_MayUnderwater, + &gMapObjectGraphicsInfo_MovingBox, + &gMapObjectGraphicsInfo_CableCar, + &gMapObjectGraphicsInfo_Scientist2, + &gMapObjectGraphicsInfo_Man7, + &gMapObjectGraphicsInfo_AquaMemberM, + &gMapObjectGraphicsInfo_AquaMemberF, + &gMapObjectGraphicsInfo_MagmaMemberM, + &gMapObjectGraphicsInfo_MagmaMemberF, + &gMapObjectGraphicsInfo_Sidney, + &gMapObjectGraphicsInfo_Phoebe, + &gMapObjectGraphicsInfo_Glacia, + &gMapObjectGraphicsInfo_Drake, + &gMapObjectGraphicsInfo_Roxanne, + &gMapObjectGraphicsInfo_Brawly, + &gMapObjectGraphicsInfo_Wattson, + &gMapObjectGraphicsInfo_Flannery, + &gMapObjectGraphicsInfo_Norman, + &gMapObjectGraphicsInfo_Winona, + &gMapObjectGraphicsInfo_Liza, + &gMapObjectGraphicsInfo_Tate, + &gMapObjectGraphicsInfo_Wallace, + &gMapObjectGraphicsInfo_Steven, + &gMapObjectGraphicsInfo_Wally, + &gMapObjectGraphicsInfo_LittleBoy3, + &gMapObjectGraphicsInfo_BrendanFishing, + &gMapObjectGraphicsInfo_MayFishing, + &gMapObjectGraphicsInfo_HotSpringsOldWoman, + &gMapObjectGraphicsInfo_SSTidal, + &gMapObjectGraphicsInfo_SubmarineShadow, + &gMapObjectGraphicsInfo_PichuDoll, + &gMapObjectGraphicsInfo_PikachuDoll, + &gMapObjectGraphicsInfo_MarillDoll, + &gMapObjectGraphicsInfo_TogepiDoll, + &gMapObjectGraphicsInfo_CyndaquilDoll, + &gMapObjectGraphicsInfo_ChikoritaDoll, + &gMapObjectGraphicsInfo_TotodileDoll, + &gMapObjectGraphicsInfo_JigglypuffDoll, + &gMapObjectGraphicsInfo_MeowthDoll, + &gMapObjectGraphicsInfo_ClefairyDoll, + &gMapObjectGraphicsInfo_DittoDoll, + &gMapObjectGraphicsInfo_SmoochumDoll, + &gMapObjectGraphicsInfo_TreeckoDoll, + &gMapObjectGraphicsInfo_TorchicDoll, + &gMapObjectGraphicsInfo_MudkipDoll, + &gMapObjectGraphicsInfo_DuskullDoll, + &gMapObjectGraphicsInfo_WynautDoll, + &gMapObjectGraphicsInfo_BaltoyDoll, + &gMapObjectGraphicsInfo_KecleonDoll, + &gMapObjectGraphicsInfo_AzurillDoll, + &gMapObjectGraphicsInfo_SkittyDoll, + &gMapObjectGraphicsInfo_SwabluDoll, + &gMapObjectGraphicsInfo_GulpinDoll, + &gMapObjectGraphicsInfo_LotadDoll, + &gMapObjectGraphicsInfo_SeedotDoll, + &gMapObjectGraphicsInfo_PikaCushion, + &gMapObjectGraphicsInfo_RoundCushion, + &gMapObjectGraphicsInfo_KissCushion, + &gMapObjectGraphicsInfo_ZigzagCushion, + &gMapObjectGraphicsInfo_SpinCushion, + &gMapObjectGraphicsInfo_DiamondCushion, + &gMapObjectGraphicsInfo_BallCushion, + &gMapObjectGraphicsInfo_GrassCushion, + &gMapObjectGraphicsInfo_FireCushion, + &gMapObjectGraphicsInfo_WaterCushion, + &gMapObjectGraphicsInfo_BigSnorlaxDoll, + &gMapObjectGraphicsInfo_BigRhydonDoll, + &gMapObjectGraphicsInfo_BigLaprasDoll, + &gMapObjectGraphicsInfo_BigVenusaurDoll, + &gMapObjectGraphicsInfo_BigCharizardDoll, + &gMapObjectGraphicsInfo_BigBlastoiseDoll, + &gMapObjectGraphicsInfo_BigWailmerDoll, + &gMapObjectGraphicsInfo_BigRegirockDoll, + &gMapObjectGraphicsInfo_BigRegiceDoll, + &gMapObjectGraphicsInfo_BigRegisteelDoll, + &gMapObjectGraphicsInfo_Latias, + &gMapObjectGraphicsInfo_Latios, + &gMapObjectGraphicsInfo_Boy5, + &gMapObjectGraphicsInfo_ContestJudge, + &gMapObjectGraphicsInfo_BrendanWatering, + &gMapObjectGraphicsInfo_MayWatering, + &gMapObjectGraphicsInfo_BrendanDecorating, + &gMapObjectGraphicsInfo_MayDecorating, + &gMapObjectGraphicsInfo_Archie, + &gMapObjectGraphicsInfo_Maxie, + &gMapObjectGraphicsInfo_Kyogre1, + &gMapObjectGraphicsInfo_Groudon1, + &gMapObjectGraphicsInfo_Fossil, + &gMapObjectGraphicsInfo_Regirock, + &gMapObjectGraphicsInfo_Regice, + &gMapObjectGraphicsInfo_Registeel, + &gMapObjectGraphicsInfo_Skitty, + &gMapObjectGraphicsInfo_Kecleon1, + &gMapObjectGraphicsInfo_Kyogre2, + &gMapObjectGraphicsInfo_Groudon2, + &gMapObjectGraphicsInfo_Rayquaza, + &gMapObjectGraphicsInfo_Zigzagoon, + &gMapObjectGraphicsInfo_Pikachu, + &gMapObjectGraphicsInfo_Azumarill, + &gMapObjectGraphicsInfo_Wingull, + &gMapObjectGraphicsInfo_Kecleon2, + &gMapObjectGraphicsInfo_TuberMSwimming, + &gMapObjectGraphicsInfo_Azurill, + &gMapObjectGraphicsInfo_Mom, + &gMapObjectGraphicsInfo_LinkBrendan, + &gMapObjectGraphicsInfo_LinkMay +}; + +#endif //POKERUBY_MAP_OBJECT_GRAPHICS_INFO_POINTERS_H diff --git a/src/data/field_map_obj/map_object_pic_tables.h b/src/data/field_map_obj/map_object_pic_tables.h new file mode 100644 index 000000000..ecb5c8836 --- /dev/null +++ b/src/data/field_map_obj/map_object_pic_tables.h @@ -0,0 +1,1879 @@ +// + +// + +#ifndef POKERUBY_MAP_OBJECT_PIC_TABLES_H +#define POKERUBY_MAP_OBJECT_PIC_TABLES_H + +const struct SpriteFrameImage gMapObjectPicTable_BrendanNormal[] = { + obj_frame_tiles(gMapObjectPic_BrendanNormal_0), + obj_frame_tiles(gMapObjectPic_BrendanNormal_1), + obj_frame_tiles(gMapObjectPic_BrendanNormal_2), + obj_frame_tiles(gMapObjectPic_BrendanNormal_3), + obj_frame_tiles(gMapObjectPic_BrendanNormal_4), + obj_frame_tiles(gMapObjectPic_BrendanNormal_5), + obj_frame_tiles(gMapObjectPic_BrendanNormal_6), + obj_frame_tiles(gMapObjectPic_BrendanNormal_7), + obj_frame_tiles(gMapObjectPic_BrendanNormal_8), + obj_frame_tiles(gMapObjectPic_BrendanNormal_9), + obj_frame_tiles(gMapObjectPic_BrendanNormal_10), + obj_frame_tiles(gMapObjectPic_BrendanNormal_11), + obj_frame_tiles(gMapObjectPic_BrendanNormal_12), + obj_frame_tiles(gMapObjectPic_BrendanNormal_13), + obj_frame_tiles(gMapObjectPic_BrendanNormal_14), + obj_frame_tiles(gMapObjectPic_BrendanNormal_15), + obj_frame_tiles(gMapObjectPic_BrendanNormal_16), + obj_frame_tiles(gMapObjectPic_BrendanNormal_17) +}; + +const struct SpriteFrameImage gMapObjectPicTable_BrendanMachBike[] = { + obj_frame_tiles(gMapObjectPic_BrendanMachBike_0), + obj_frame_tiles(gMapObjectPic_BrendanMachBike_1), + obj_frame_tiles(gMapObjectPic_BrendanMachBike_2), + obj_frame_tiles(gMapObjectPic_BrendanMachBike_3), + obj_frame_tiles(gMapObjectPic_BrendanMachBike_4), + obj_frame_tiles(gMapObjectPic_BrendanMachBike_5), + obj_frame_tiles(gMapObjectPic_BrendanMachBike_6), + obj_frame_tiles(gMapObjectPic_BrendanMachBike_7), + obj_frame_tiles(gMapObjectPic_BrendanMachBike_8) +}; + +const struct SpriteFrameImage gMapObjectPicTable_BrendanAcroBike[] = { + obj_frame_tiles(gMapObjectPic_BrendanAcroBike_0), + obj_frame_tiles(gMapObjectPic_BrendanAcroBike_1), + obj_frame_tiles(gMapObjectPic_BrendanAcroBike_2), + obj_frame_tiles(gMapObjectPic_BrendanAcroBike_3), + obj_frame_tiles(gMapObjectPic_BrendanAcroBike_4), + obj_frame_tiles(gMapObjectPic_BrendanAcroBike_5), + obj_frame_tiles(gMapObjectPic_BrendanAcroBike_6), + obj_frame_tiles(gMapObjectPic_BrendanAcroBike_7), + obj_frame_tiles(gMapObjectPic_BrendanAcroBike_8), + obj_frame_tiles(gMapObjectPic_BrendanAcroBike_9), + obj_frame_tiles(gMapObjectPic_BrendanAcroBike_10), + obj_frame_tiles(gMapObjectPic_BrendanAcroBike_11), + obj_frame_tiles(gMapObjectPic_BrendanAcroBike_12), + obj_frame_tiles(gMapObjectPic_BrendanAcroBike_13), + obj_frame_tiles(gMapObjectPic_BrendanAcroBike_14), + obj_frame_tiles(gMapObjectPic_BrendanAcroBike_15), + obj_frame_tiles(gMapObjectPic_BrendanAcroBike_16), + obj_frame_tiles(gMapObjectPic_BrendanAcroBike_17), + obj_frame_tiles(gMapObjectPic_BrendanAcroBike_18), + obj_frame_tiles(gMapObjectPic_BrendanAcroBike_19), + obj_frame_tiles(gMapObjectPic_BrendanAcroBike_20), + obj_frame_tiles(gMapObjectPic_BrendanAcroBike_21), + obj_frame_tiles(gMapObjectPic_BrendanAcroBike_22), + obj_frame_tiles(gMapObjectPic_BrendanAcroBike_23), + obj_frame_tiles(gMapObjectPic_BrendanAcroBike_24), + obj_frame_tiles(gMapObjectPic_BrendanAcroBike_25), + obj_frame_tiles(gMapObjectPic_BrendanAcroBike_26) +}; + +const struct SpriteFrameImage gMapObjectPicTable_BrendanSurfing[] = { + obj_frame_tiles(gMapObjectPic_BrendanSurfing_0), + obj_frame_tiles(gMapObjectPic_BrendanSurfing_1), + obj_frame_tiles(gMapObjectPic_BrendanSurfing_2), + obj_frame_tiles(gMapObjectPic_BrendanSurfing_0), + obj_frame_tiles(gMapObjectPic_BrendanSurfing_0), + obj_frame_tiles(gMapObjectPic_BrendanSurfing_1), + obj_frame_tiles(gMapObjectPic_BrendanSurfing_1), + obj_frame_tiles(gMapObjectPic_BrendanSurfing_2), + obj_frame_tiles(gMapObjectPic_BrendanSurfing_2), + obj_frame_tiles(gMapObjectPic_BrendanSurfing_3), + obj_frame_tiles(gMapObjectPic_BrendanSurfing_4), + obj_frame_tiles(gMapObjectPic_BrendanSurfing_5) +}; + +const struct SpriteFrameImage gMapObjectPicTable_BrendanUnderwater[] = { + obj_frame_tiles(gMapObjectPic_BrendanUnderwater_0), + obj_frame_tiles(gMapObjectPic_BrendanUnderwater_1), + obj_frame_tiles(gMapObjectPic_BrendanUnderwater_2), + obj_frame_tiles(gMapObjectPic_BrendanUnderwater_0), + obj_frame_tiles(gMapObjectPic_BrendanUnderwater_0), + obj_frame_tiles(gMapObjectPic_BrendanUnderwater_1), + obj_frame_tiles(gMapObjectPic_BrendanUnderwater_1), + obj_frame_tiles(gMapObjectPic_BrendanUnderwater_2), + obj_frame_tiles(gMapObjectPic_BrendanUnderwater_2) +}; + +const struct SpriteFrameImage gMapObjectPicTable_BrendanFieldMove[] = { + obj_frame_tiles(gMapObjectPic_BrendanFieldMove_0), + obj_frame_tiles(gMapObjectPic_BrendanFieldMove_1), + obj_frame_tiles(gMapObjectPic_BrendanFieldMove_2), + obj_frame_tiles(gMapObjectPic_BrendanFieldMove_3), + obj_frame_tiles(gMapObjectPic_BrendanFieldMove_4) +}; + +const struct SpriteFrameImage gMapObjectPicTable_QuintyPlump[] = { + obj_frame_tiles(gMapObjectPic_QuintyPlump_0), + obj_frame_tiles(gMapObjectPic_QuintyPlump_1), + obj_frame_tiles(gMapObjectPic_QuintyPlump_2), + obj_frame_tiles(gMapObjectPic_QuintyPlump_3), + obj_frame_tiles(gMapObjectPic_QuintyPlump_4), + obj_frame_tiles(gMapObjectPic_QuintyPlump_5), + obj_frame_tiles(gMapObjectPic_QuintyPlump_6) +}; + +const struct SpriteFrameImage gMapObjectPicTable_LittleBoy1[] = { + obj_frame_tiles(gMapObjectPic_LittleBoy1_0), + obj_frame_tiles(gMapObjectPic_LittleBoy1_1), + obj_frame_tiles(gMapObjectPic_LittleBoy1_2), + obj_frame_tiles(gMapObjectPic_LittleBoy1_3), + obj_frame_tiles(gMapObjectPic_LittleBoy1_4), + obj_frame_tiles(gMapObjectPic_LittleBoy1_5), + obj_frame_tiles(gMapObjectPic_LittleBoy1_6), + obj_frame_tiles(gMapObjectPic_LittleBoy1_7), + obj_frame_tiles(gMapObjectPic_LittleBoy1_8) +}; + +const struct SpriteFrameImage gMapObjectPicTable_LittleGirl1[] = { + obj_frame_tiles(gMapObjectPic_LittleGirl1_0), + obj_frame_tiles(gMapObjectPic_LittleGirl1_1), + obj_frame_tiles(gMapObjectPic_LittleGirl1_2), + obj_frame_tiles(gMapObjectPic_LittleGirl1_3), + obj_frame_tiles(gMapObjectPic_LittleGirl1_4), + obj_frame_tiles(gMapObjectPic_LittleGirl1_5), + obj_frame_tiles(gMapObjectPic_LittleGirl1_6), + obj_frame_tiles(gMapObjectPic_LittleGirl1_7), + obj_frame_tiles(gMapObjectPic_LittleGirl1_8) +}; + +const struct SpriteFrameImage gMapObjectPicTable_Boy1[] = { + obj_frame_tiles(gMapObjectPic_Boy1_0), + obj_frame_tiles(gMapObjectPic_Boy1_1), + obj_frame_tiles(gMapObjectPic_Boy1_2), + obj_frame_tiles(gMapObjectPic_Boy1_3), + obj_frame_tiles(gMapObjectPic_Boy1_4), + obj_frame_tiles(gMapObjectPic_Boy1_5), + obj_frame_tiles(gMapObjectPic_Boy1_6), + obj_frame_tiles(gMapObjectPic_Boy1_7), + obj_frame_tiles(gMapObjectPic_Boy1_8) +}; + +const struct SpriteFrameImage gMapObjectPicTable_Girl1[] = { + obj_frame_tiles(gMapObjectPic_Girl1_0), + obj_frame_tiles(gMapObjectPic_Girl1_1), + obj_frame_tiles(gMapObjectPic_Girl1_2), + obj_frame_tiles(gMapObjectPic_Girl1_3), + obj_frame_tiles(gMapObjectPic_Girl1_4), + obj_frame_tiles(gMapObjectPic_Girl1_5), + obj_frame_tiles(gMapObjectPic_Girl1_6), + obj_frame_tiles(gMapObjectPic_Girl1_7), + obj_frame_tiles(gMapObjectPic_Girl1_8) +}; + +const struct SpriteFrameImage gMapObjectPicTable_Boy2[] = { + obj_frame_tiles(gMapObjectPic_Boy2_0), + obj_frame_tiles(gMapObjectPic_Boy2_1), + obj_frame_tiles(gMapObjectPic_Boy2_2), + obj_frame_tiles(gMapObjectPic_Boy2_3), + obj_frame_tiles(gMapObjectPic_Boy2_4), + obj_frame_tiles(gMapObjectPic_Boy2_5), + obj_frame_tiles(gMapObjectPic_Boy2_6), + obj_frame_tiles(gMapObjectPic_Boy2_7), + obj_frame_tiles(gMapObjectPic_Boy2_8) +}; + +const struct SpriteFrameImage gMapObjectPicTable_Girl2[] = { + obj_frame_tiles(gMapObjectPic_Girl2_0), + obj_frame_tiles(gMapObjectPic_Girl2_1), + obj_frame_tiles(gMapObjectPic_Girl2_2), + obj_frame_tiles(gMapObjectPic_Girl2_3), + obj_frame_tiles(gMapObjectPic_Girl2_4), + obj_frame_tiles(gMapObjectPic_Girl2_5), + obj_frame_tiles(gMapObjectPic_Girl2_6), + obj_frame_tiles(gMapObjectPic_Girl2_7), + obj_frame_tiles(gMapObjectPic_Girl2_8) +}; + +const struct SpriteFrameImage gMapObjectPicTable_LittleBoy2[] = { + obj_frame_tiles(gMapObjectPic_LittleBoy2_0), + obj_frame_tiles(gMapObjectPic_LittleBoy2_1), + obj_frame_tiles(gMapObjectPic_LittleBoy2_2), + obj_frame_tiles(gMapObjectPic_LittleBoy2_3), + obj_frame_tiles(gMapObjectPic_LittleBoy2_4), + obj_frame_tiles(gMapObjectPic_LittleBoy2_5), + obj_frame_tiles(gMapObjectPic_LittleBoy2_6), + obj_frame_tiles(gMapObjectPic_LittleBoy2_7), + obj_frame_tiles(gMapObjectPic_LittleBoy2_8) +}; + +const struct SpriteFrameImage gMapObjectPicTable_LittleGirl2[] = { + obj_frame_tiles(gMapObjectPic_LittleGirl2_0), + obj_frame_tiles(gMapObjectPic_LittleGirl2_1), + obj_frame_tiles(gMapObjectPic_LittleGirl2_2), + obj_frame_tiles(gMapObjectPic_LittleGirl2_3), + obj_frame_tiles(gMapObjectPic_LittleGirl2_4), + obj_frame_tiles(gMapObjectPic_LittleGirl2_5), + obj_frame_tiles(gMapObjectPic_LittleGirl2_6), + obj_frame_tiles(gMapObjectPic_LittleGirl2_7), + obj_frame_tiles(gMapObjectPic_LittleGirl2_8) +}; + +const struct SpriteFrameImage gMapObjectPicTable_Boy3[] = { + obj_frame_tiles(gMapObjectPic_Boy3_0), + obj_frame_tiles(gMapObjectPic_Boy3_1), + obj_frame_tiles(gMapObjectPic_Boy3_2), + obj_frame_tiles(gMapObjectPic_Boy3_3), + obj_frame_tiles(gMapObjectPic_Boy3_4), + obj_frame_tiles(gMapObjectPic_Boy3_5), + obj_frame_tiles(gMapObjectPic_Boy3_6), + obj_frame_tiles(gMapObjectPic_Boy3_7), + obj_frame_tiles(gMapObjectPic_Boy3_8) +}; + +const struct SpriteFrameImage gMapObjectPicTable_Girl3[] = { + obj_frame_tiles(gMapObjectPic_Girl3_0), + obj_frame_tiles(gMapObjectPic_Girl3_1), + obj_frame_tiles(gMapObjectPic_Girl3_2), + obj_frame_tiles(gMapObjectPic_Girl3_3), + obj_frame_tiles(gMapObjectPic_Girl3_4), + obj_frame_tiles(gMapObjectPic_Girl3_5), + obj_frame_tiles(gMapObjectPic_Girl3_6), + obj_frame_tiles(gMapObjectPic_Girl3_7), + obj_frame_tiles(gMapObjectPic_Girl3_8) +}; + +const struct SpriteFrameImage gMapObjectPicTable_Boy4[] = { + obj_frame_tiles(gMapObjectPic_Boy4_0), + obj_frame_tiles(gMapObjectPic_Boy4_1), + obj_frame_tiles(gMapObjectPic_Boy4_2), + obj_frame_tiles(gMapObjectPic_Boy4_3), + obj_frame_tiles(gMapObjectPic_Boy4_4), + obj_frame_tiles(gMapObjectPic_Boy4_5), + obj_frame_tiles(gMapObjectPic_Boy4_6), + obj_frame_tiles(gMapObjectPic_Boy4_7), + obj_frame_tiles(gMapObjectPic_Boy4_8) +}; + +const struct SpriteFrameImage gMapObjectPicTable_Woman1[] = { + obj_frame_tiles(gMapObjectPic_Woman1_0), + obj_frame_tiles(gMapObjectPic_Woman1_1), + obj_frame_tiles(gMapObjectPic_Woman1_2), + obj_frame_tiles(gMapObjectPic_Woman1_3), + obj_frame_tiles(gMapObjectPic_Woman1_4), + obj_frame_tiles(gMapObjectPic_Woman1_5), + obj_frame_tiles(gMapObjectPic_Woman1_6), + obj_frame_tiles(gMapObjectPic_Woman1_7), + obj_frame_tiles(gMapObjectPic_Woman1_8) +}; + +const struct SpriteFrameImage gMapObjectPicTable_FatMan[] = { + obj_frame_tiles(gMapObjectPic_FatMan_0), + obj_frame_tiles(gMapObjectPic_FatMan_1), + obj_frame_tiles(gMapObjectPic_FatMan_2), + obj_frame_tiles(gMapObjectPic_FatMan_3), + obj_frame_tiles(gMapObjectPic_FatMan_4), + obj_frame_tiles(gMapObjectPic_FatMan_5), + obj_frame_tiles(gMapObjectPic_FatMan_6), + obj_frame_tiles(gMapObjectPic_FatMan_7), + obj_frame_tiles(gMapObjectPic_FatMan_8) +}; + +const struct SpriteFrameImage gMapObjectPicTable_Woman2[] = { + obj_frame_tiles(gMapObjectPic_Woman2_0), + obj_frame_tiles(gMapObjectPic_Woman2_1), + obj_frame_tiles(gMapObjectPic_Woman2_2), + obj_frame_tiles(gMapObjectPic_Woman2_3), + obj_frame_tiles(gMapObjectPic_Woman2_4), + obj_frame_tiles(gMapObjectPic_Woman2_5), + obj_frame_tiles(gMapObjectPic_Woman2_6), + obj_frame_tiles(gMapObjectPic_Woman2_7), + obj_frame_tiles(gMapObjectPic_Woman2_8) +}; + +const struct SpriteFrameImage gMapObjectPicTable_Man1[] = { + obj_frame_tiles(gMapObjectPic_Man1_0), + obj_frame_tiles(gMapObjectPic_Man1_1), + obj_frame_tiles(gMapObjectPic_Man1_2), + obj_frame_tiles(gMapObjectPic_Man1_3), + obj_frame_tiles(gMapObjectPic_Man1_4), + obj_frame_tiles(gMapObjectPic_Man1_5), + obj_frame_tiles(gMapObjectPic_Man1_6), + obj_frame_tiles(gMapObjectPic_Man1_7), + obj_frame_tiles(gMapObjectPic_Man1_8) +}; + +const struct SpriteFrameImage gMapObjectPicTable_Woman3[] = { + obj_frame_tiles(gMapObjectPic_Woman3_0), + obj_frame_tiles(gMapObjectPic_Woman3_1), + obj_frame_tiles(gMapObjectPic_Woman3_2), + obj_frame_tiles(gMapObjectPic_Woman3_3), + obj_frame_tiles(gMapObjectPic_Woman3_4), + obj_frame_tiles(gMapObjectPic_Woman3_5), + obj_frame_tiles(gMapObjectPic_Woman3_6), + obj_frame_tiles(gMapObjectPic_Woman3_7), + obj_frame_tiles(gMapObjectPic_Woman3_8) +}; + +const struct SpriteFrameImage gMapObjectPicTable_OldMan1[] = { + obj_frame_tiles(gMapObjectPic_OldMan1_0), + obj_frame_tiles(gMapObjectPic_OldMan1_1), + obj_frame_tiles(gMapObjectPic_OldMan1_2), + obj_frame_tiles(gMapObjectPic_OldMan1_3), + obj_frame_tiles(gMapObjectPic_OldMan1_4), + obj_frame_tiles(gMapObjectPic_OldMan1_5), + obj_frame_tiles(gMapObjectPic_OldMan1_6), + obj_frame_tiles(gMapObjectPic_OldMan1_7), + obj_frame_tiles(gMapObjectPic_OldMan1_8) +}; + +const struct SpriteFrameImage gMapObjectPicTable_OldWoman1[] = { + obj_frame_tiles(gMapObjectPic_OldWoman1_0), + obj_frame_tiles(gMapObjectPic_OldWoman1_1), + obj_frame_tiles(gMapObjectPic_OldWoman1_2), + obj_frame_tiles(gMapObjectPic_OldWoman1_3), + obj_frame_tiles(gMapObjectPic_OldWoman1_4), + obj_frame_tiles(gMapObjectPic_OldWoman1_5), + obj_frame_tiles(gMapObjectPic_OldWoman1_6), + obj_frame_tiles(gMapObjectPic_OldWoman1_7), + obj_frame_tiles(gMapObjectPic_OldWoman1_8) +}; + +const struct SpriteFrameImage gMapObjectPicTable_Man2[] = { + obj_frame_tiles(gMapObjectPic_Man2_0), + obj_frame_tiles(gMapObjectPic_Man2_1), + obj_frame_tiles(gMapObjectPic_Man2_2), + obj_frame_tiles(gMapObjectPic_Man2_3), + obj_frame_tiles(gMapObjectPic_Man2_4), + obj_frame_tiles(gMapObjectPic_Man2_5), + obj_frame_tiles(gMapObjectPic_Man2_6), + obj_frame_tiles(gMapObjectPic_Man2_7), + obj_frame_tiles(gMapObjectPic_Man2_8) +}; + +const struct SpriteFrameImage gMapObjectPicTable_Woman4[] = { + obj_frame_tiles(gMapObjectPic_Woman4_0), + obj_frame_tiles(gMapObjectPic_Woman4_1), + obj_frame_tiles(gMapObjectPic_Woman4_2), + obj_frame_tiles(gMapObjectPic_Woman4_3), + obj_frame_tiles(gMapObjectPic_Woman4_4), + obj_frame_tiles(gMapObjectPic_Woman4_5), + obj_frame_tiles(gMapObjectPic_Woman4_6), + obj_frame_tiles(gMapObjectPic_Woman4_7), + obj_frame_tiles(gMapObjectPic_Woman4_8) +}; + +const struct SpriteFrameImage gMapObjectPicTable_Man3[] = { + obj_frame_tiles(gMapObjectPic_Man3_0), + obj_frame_tiles(gMapObjectPic_Man3_1), + obj_frame_tiles(gMapObjectPic_Man3_2), + obj_frame_tiles(gMapObjectPic_Man3_3), + obj_frame_tiles(gMapObjectPic_Man3_4), + obj_frame_tiles(gMapObjectPic_Man3_5), + obj_frame_tiles(gMapObjectPic_Man3_6), + obj_frame_tiles(gMapObjectPic_Man3_7), + obj_frame_tiles(gMapObjectPic_Man3_8) +}; + +const struct SpriteFrameImage gMapObjectPicTable_Woman5[] = { + obj_frame_tiles(gMapObjectPic_Woman5_0), + obj_frame_tiles(gMapObjectPic_Woman5_1), + obj_frame_tiles(gMapObjectPic_Woman5_2), + obj_frame_tiles(gMapObjectPic_Woman5_3), + obj_frame_tiles(gMapObjectPic_Woman5_4), + obj_frame_tiles(gMapObjectPic_Woman5_5), + obj_frame_tiles(gMapObjectPic_Woman5_6), + obj_frame_tiles(gMapObjectPic_Woman5_7), + obj_frame_tiles(gMapObjectPic_Woman5_8) +}; + +const struct SpriteFrameImage gMapObjectPicTable_Cook[] = { + obj_frame_tiles(gMapObjectPic_Cook_0), + obj_frame_tiles(gMapObjectPic_Cook_1), + obj_frame_tiles(gMapObjectPic_Cook_2), + obj_frame_tiles(gMapObjectPic_Cook_0), + obj_frame_tiles(gMapObjectPic_Cook_0), + obj_frame_tiles(gMapObjectPic_Cook_1), + obj_frame_tiles(gMapObjectPic_Cook_1), + obj_frame_tiles(gMapObjectPic_Cook_2), + obj_frame_tiles(gMapObjectPic_Cook_2) +}; + +const struct SpriteFrameImage gMapObjectPicTable_Woman6[] = { + obj_frame_tiles(gMapObjectPic_Woman6_0), + obj_frame_tiles(gMapObjectPic_Woman6_1), + obj_frame_tiles(gMapObjectPic_Woman6_2), + obj_frame_tiles(gMapObjectPic_Woman6_3), + obj_frame_tiles(gMapObjectPic_Woman6_4), + obj_frame_tiles(gMapObjectPic_Woman6_5), + obj_frame_tiles(gMapObjectPic_Woman6_6), + obj_frame_tiles(gMapObjectPic_Woman6_7), + obj_frame_tiles(gMapObjectPic_Woman6_8) +}; + +const struct SpriteFrameImage gMapObjectPicTable_OldMan2[] = { + obj_frame_tiles(gMapObjectPic_OldMan2_0), + obj_frame_tiles(gMapObjectPic_OldMan2_1), + obj_frame_tiles(gMapObjectPic_OldMan2_2), + obj_frame_tiles(gMapObjectPic_OldMan2_0), + obj_frame_tiles(gMapObjectPic_OldMan2_0), + obj_frame_tiles(gMapObjectPic_OldMan2_1), + obj_frame_tiles(gMapObjectPic_OldMan2_1), + obj_frame_tiles(gMapObjectPic_OldMan2_2), + obj_frame_tiles(gMapObjectPic_OldMan2_2) +}; + +const struct SpriteFrameImage gMapObjectPicTable_OldWoman2[] = { + obj_frame_tiles(gMapObjectPic_OldWoman2_0), + obj_frame_tiles(gMapObjectPic_OldWoman2_1), + obj_frame_tiles(gMapObjectPic_OldWoman2_2), + obj_frame_tiles(gMapObjectPic_OldWoman2_0), + obj_frame_tiles(gMapObjectPic_OldWoman2_0), + obj_frame_tiles(gMapObjectPic_OldWoman2_1), + obj_frame_tiles(gMapObjectPic_OldWoman2_1), + obj_frame_tiles(gMapObjectPic_OldWoman2_2), + obj_frame_tiles(gMapObjectPic_OldWoman2_2) +}; + +const struct SpriteFrameImage gMapObjectPicTable_Camper[] = { + obj_frame_tiles(gMapObjectPic_Camper_0), + obj_frame_tiles(gMapObjectPic_Camper_1), + obj_frame_tiles(gMapObjectPic_Camper_2), + obj_frame_tiles(gMapObjectPic_Camper_3), + obj_frame_tiles(gMapObjectPic_Camper_4), + obj_frame_tiles(gMapObjectPic_Camper_5), + obj_frame_tiles(gMapObjectPic_Camper_6), + obj_frame_tiles(gMapObjectPic_Camper_7), + obj_frame_tiles(gMapObjectPic_Camper_8) +}; + +const struct SpriteFrameImage gMapObjectPicTable_Picnicker[] = { + obj_frame_tiles(gMapObjectPic_Picnicker_0), + obj_frame_tiles(gMapObjectPic_Picnicker_1), + obj_frame_tiles(gMapObjectPic_Picnicker_2), + obj_frame_tiles(gMapObjectPic_Picnicker_3), + obj_frame_tiles(gMapObjectPic_Picnicker_4), + obj_frame_tiles(gMapObjectPic_Picnicker_5), + obj_frame_tiles(gMapObjectPic_Picnicker_6), + obj_frame_tiles(gMapObjectPic_Picnicker_7), + obj_frame_tiles(gMapObjectPic_Picnicker_8) +}; + +const struct SpriteFrameImage gMapObjectPicTable_Man4[] = { + obj_frame_tiles(gMapObjectPic_Man4_0), + obj_frame_tiles(gMapObjectPic_Man4_1), + obj_frame_tiles(gMapObjectPic_Man4_2), + obj_frame_tiles(gMapObjectPic_Man4_3), + obj_frame_tiles(gMapObjectPic_Man4_4), + obj_frame_tiles(gMapObjectPic_Man4_5), + obj_frame_tiles(gMapObjectPic_Man4_6), + obj_frame_tiles(gMapObjectPic_Man4_7), + obj_frame_tiles(gMapObjectPic_Man4_8) +}; + +const struct SpriteFrameImage gMapObjectPicTable_Woman7[] = { + obj_frame_tiles(gMapObjectPic_Woman7_0), + obj_frame_tiles(gMapObjectPic_Woman7_1), + obj_frame_tiles(gMapObjectPic_Woman7_2), + obj_frame_tiles(gMapObjectPic_Woman7_3), + obj_frame_tiles(gMapObjectPic_Woman7_4), + obj_frame_tiles(gMapObjectPic_Woman7_5), + obj_frame_tiles(gMapObjectPic_Woman7_6), + obj_frame_tiles(gMapObjectPic_Woman7_7), + obj_frame_tiles(gMapObjectPic_Woman7_8) +}; + +const struct SpriteFrameImage gMapObjectPicTable_Youngster[] = { + obj_frame_tiles(gMapObjectPic_Youngster_0), + obj_frame_tiles(gMapObjectPic_Youngster_1), + obj_frame_tiles(gMapObjectPic_Youngster_2), + obj_frame_tiles(gMapObjectPic_Youngster_3), + obj_frame_tiles(gMapObjectPic_Youngster_4), + obj_frame_tiles(gMapObjectPic_Youngster_5), + obj_frame_tiles(gMapObjectPic_Youngster_6), + obj_frame_tiles(gMapObjectPic_Youngster_7), + obj_frame_tiles(gMapObjectPic_Youngster_8) +}; + +const struct SpriteFrameImage gMapObjectPicTable_BugCatcher[] = { + obj_frame_tiles(gMapObjectPic_BugCatcher_0), + obj_frame_tiles(gMapObjectPic_BugCatcher_1), + obj_frame_tiles(gMapObjectPic_BugCatcher_2), + obj_frame_tiles(gMapObjectPic_BugCatcher_3), + obj_frame_tiles(gMapObjectPic_BugCatcher_4), + obj_frame_tiles(gMapObjectPic_BugCatcher_5), + obj_frame_tiles(gMapObjectPic_BugCatcher_6), + obj_frame_tiles(gMapObjectPic_BugCatcher_7), + obj_frame_tiles(gMapObjectPic_BugCatcher_8) +}; + +const struct SpriteFrameImage gMapObjectPicTable_PsychicM[] = { + obj_frame_tiles(gMapObjectPic_PsychicM_0), + obj_frame_tiles(gMapObjectPic_PsychicM_1), + obj_frame_tiles(gMapObjectPic_PsychicM_2), + obj_frame_tiles(gMapObjectPic_PsychicM_3), + obj_frame_tiles(gMapObjectPic_PsychicM_4), + obj_frame_tiles(gMapObjectPic_PsychicM_5), + obj_frame_tiles(gMapObjectPic_PsychicM_6), + obj_frame_tiles(gMapObjectPic_PsychicM_7), + obj_frame_tiles(gMapObjectPic_PsychicM_8) +}; + +const struct SpriteFrameImage gMapObjectPicTable_SchoolKidM[] = { + obj_frame_tiles(gMapObjectPic_SchoolKidM_0), + obj_frame_tiles(gMapObjectPic_SchoolKidM_1), + obj_frame_tiles(gMapObjectPic_SchoolKidM_2), + obj_frame_tiles(gMapObjectPic_SchoolKidM_3), + obj_frame_tiles(gMapObjectPic_SchoolKidM_4), + obj_frame_tiles(gMapObjectPic_SchoolKidM_5), + obj_frame_tiles(gMapObjectPic_SchoolKidM_6), + obj_frame_tiles(gMapObjectPic_SchoolKidM_7), + obj_frame_tiles(gMapObjectPic_SchoolKidM_8) +}; + +const struct SpriteFrameImage gMapObjectPicTable_Maniac[] = { + obj_frame_tiles(gMapObjectPic_Maniac_0), + obj_frame_tiles(gMapObjectPic_Maniac_1), + obj_frame_tiles(gMapObjectPic_Maniac_2), + obj_frame_tiles(gMapObjectPic_Maniac_3), + obj_frame_tiles(gMapObjectPic_Maniac_4), + obj_frame_tiles(gMapObjectPic_Maniac_5), + obj_frame_tiles(gMapObjectPic_Maniac_6), + obj_frame_tiles(gMapObjectPic_Maniac_7), + obj_frame_tiles(gMapObjectPic_Maniac_8) +}; + +const struct SpriteFrameImage gMapObjectPicTable_HexManiac[] = { + obj_frame_tiles(gMapObjectPic_HexManiac_0), + obj_frame_tiles(gMapObjectPic_HexManiac_1), + obj_frame_tiles(gMapObjectPic_HexManiac_2), + obj_frame_tiles(gMapObjectPic_HexManiac_3), + obj_frame_tiles(gMapObjectPic_HexManiac_4), + obj_frame_tiles(gMapObjectPic_HexManiac_5), + obj_frame_tiles(gMapObjectPic_HexManiac_6), + obj_frame_tiles(gMapObjectPic_HexManiac_7), + obj_frame_tiles(gMapObjectPic_HexManiac_8) +}; + +const struct SpriteFrameImage gMapObjectPicTable_Woman8[] = { + obj_frame_tiles(gMapObjectPic_Woman8_0), + obj_frame_tiles(gMapObjectPic_Woman8_1), + obj_frame_tiles(gMapObjectPic_Woman8_2), + obj_frame_tiles(gMapObjectPic_Woman8_3), + obj_frame_tiles(gMapObjectPic_Woman8_4), + obj_frame_tiles(gMapObjectPic_Woman8_5), + obj_frame_tiles(gMapObjectPic_Woman8_6), + obj_frame_tiles(gMapObjectPic_Woman8_7), + obj_frame_tiles(gMapObjectPic_Woman8_8) +}; + +const struct SpriteFrameImage gMapObjectPicTable_SwimmerM[] = { + obj_frame_tiles(gMapObjectPic_SwimmerM_0), + obj_frame_tiles(gMapObjectPic_SwimmerM_1), + obj_frame_tiles(gMapObjectPic_SwimmerM_2), + obj_frame_tiles(gMapObjectPic_SwimmerM_3), + obj_frame_tiles(gMapObjectPic_SwimmerM_4), + obj_frame_tiles(gMapObjectPic_SwimmerM_5), + obj_frame_tiles(gMapObjectPic_SwimmerM_6), + obj_frame_tiles(gMapObjectPic_SwimmerM_7), + obj_frame_tiles(gMapObjectPic_SwimmerM_8) +}; + +const struct SpriteFrameImage gMapObjectPicTable_SwimmerF[] = { + obj_frame_tiles(gMapObjectPic_SwimmerF_0), + obj_frame_tiles(gMapObjectPic_SwimmerF_1), + obj_frame_tiles(gMapObjectPic_SwimmerF_2), + obj_frame_tiles(gMapObjectPic_SwimmerF_3), + obj_frame_tiles(gMapObjectPic_SwimmerF_4), + obj_frame_tiles(gMapObjectPic_SwimmerF_5), + obj_frame_tiles(gMapObjectPic_SwimmerF_6), + obj_frame_tiles(gMapObjectPic_SwimmerF_7), + obj_frame_tiles(gMapObjectPic_SwimmerF_8) +}; + +const struct SpriteFrameImage gMapObjectPicTable_BlackBelt[] = { + obj_frame_tiles(gMapObjectPic_BlackBelt_0), + obj_frame_tiles(gMapObjectPic_BlackBelt_1), + obj_frame_tiles(gMapObjectPic_BlackBelt_2), + obj_frame_tiles(gMapObjectPic_BlackBelt_3), + obj_frame_tiles(gMapObjectPic_BlackBelt_4), + obj_frame_tiles(gMapObjectPic_BlackBelt_5), + obj_frame_tiles(gMapObjectPic_BlackBelt_6), + obj_frame_tiles(gMapObjectPic_BlackBelt_7), + obj_frame_tiles(gMapObjectPic_BlackBelt_8) +}; + +const struct SpriteFrameImage gMapObjectPicTable_Beauty[] = { + obj_frame_tiles(gMapObjectPic_Beauty_0), + obj_frame_tiles(gMapObjectPic_Beauty_1), + obj_frame_tiles(gMapObjectPic_Beauty_2), + obj_frame_tiles(gMapObjectPic_Beauty_3), + obj_frame_tiles(gMapObjectPic_Beauty_4), + obj_frame_tiles(gMapObjectPic_Beauty_5), + obj_frame_tiles(gMapObjectPic_Beauty_6), + obj_frame_tiles(gMapObjectPic_Beauty_7), + obj_frame_tiles(gMapObjectPic_Beauty_8) +}; + +const struct SpriteFrameImage gMapObjectPicTable_Scientist1[] = { + obj_frame_tiles(gMapObjectPic_Scientist1_0), + obj_frame_tiles(gMapObjectPic_Scientist1_1), + obj_frame_tiles(gMapObjectPic_Scientist1_2), + obj_frame_tiles(gMapObjectPic_Scientist1_3), + obj_frame_tiles(gMapObjectPic_Scientist1_4), + obj_frame_tiles(gMapObjectPic_Scientist1_5), + obj_frame_tiles(gMapObjectPic_Scientist1_6), + obj_frame_tiles(gMapObjectPic_Scientist1_7), + obj_frame_tiles(gMapObjectPic_Scientist1_8) +}; + +const struct SpriteFrameImage gMapObjectPicTable_Lass[] = { + obj_frame_tiles(gMapObjectPic_Lass_0), + obj_frame_tiles(gMapObjectPic_Lass_1), + obj_frame_tiles(gMapObjectPic_Lass_2), + obj_frame_tiles(gMapObjectPic_Lass_3), + obj_frame_tiles(gMapObjectPic_Lass_4), + obj_frame_tiles(gMapObjectPic_Lass_5), + obj_frame_tiles(gMapObjectPic_Lass_6), + obj_frame_tiles(gMapObjectPic_Lass_7), + obj_frame_tiles(gMapObjectPic_Lass_8) +}; + +const struct SpriteFrameImage gMapObjectPicTable_Gentleman[] = { + obj_frame_tiles(gMapObjectPic_Gentleman_0), + obj_frame_tiles(gMapObjectPic_Gentleman_1), + obj_frame_tiles(gMapObjectPic_Gentleman_2), + obj_frame_tiles(gMapObjectPic_Gentleman_3), + obj_frame_tiles(gMapObjectPic_Gentleman_4), + obj_frame_tiles(gMapObjectPic_Gentleman_5), + obj_frame_tiles(gMapObjectPic_Gentleman_6), + obj_frame_tiles(gMapObjectPic_Gentleman_7), + obj_frame_tiles(gMapObjectPic_Gentleman_8) +}; + +const struct SpriteFrameImage gMapObjectPicTable_Sailor[] = { + obj_frame_tiles(gMapObjectPic_Sailor_0), + obj_frame_tiles(gMapObjectPic_Sailor_1), + obj_frame_tiles(gMapObjectPic_Sailor_2), + obj_frame_tiles(gMapObjectPic_Sailor_3), + obj_frame_tiles(gMapObjectPic_Sailor_4), + obj_frame_tiles(gMapObjectPic_Sailor_5), + obj_frame_tiles(gMapObjectPic_Sailor_6), + obj_frame_tiles(gMapObjectPic_Sailor_7), + obj_frame_tiles(gMapObjectPic_Sailor_8) +}; + +const struct SpriteFrameImage gMapObjectPicTable_Fisherman[] = { + obj_frame_tiles(gMapObjectPic_Fisherman_0), + obj_frame_tiles(gMapObjectPic_Fisherman_1), + obj_frame_tiles(gMapObjectPic_Fisherman_2), + obj_frame_tiles(gMapObjectPic_Fisherman_3), + obj_frame_tiles(gMapObjectPic_Fisherman_4), + obj_frame_tiles(gMapObjectPic_Fisherman_5), + obj_frame_tiles(gMapObjectPic_Fisherman_6), + obj_frame_tiles(gMapObjectPic_Fisherman_7), + obj_frame_tiles(gMapObjectPic_Fisherman_8) +}; + +const struct SpriteFrameImage gMapObjectPicTable_RunningTriathleteM[] = { + obj_frame_tiles(gMapObjectPic_RunningTriathleteM_0), + obj_frame_tiles(gMapObjectPic_RunningTriathleteM_1), + obj_frame_tiles(gMapObjectPic_RunningTriathleteM_2), + obj_frame_tiles(gMapObjectPic_RunningTriathleteM_3), + obj_frame_tiles(gMapObjectPic_RunningTriathleteM_4), + obj_frame_tiles(gMapObjectPic_RunningTriathleteM_5), + obj_frame_tiles(gMapObjectPic_RunningTriathleteM_6), + obj_frame_tiles(gMapObjectPic_RunningTriathleteM_7), + obj_frame_tiles(gMapObjectPic_RunningTriathleteM_8) +}; + +const struct SpriteFrameImage gMapObjectPicTable_RunningTriathleteF[] = { + obj_frame_tiles(gMapObjectPic_RunningTriathleteF_0), + obj_frame_tiles(gMapObjectPic_RunningTriathleteF_1), + obj_frame_tiles(gMapObjectPic_RunningTriathleteF_2), + obj_frame_tiles(gMapObjectPic_RunningTriathleteF_3), + obj_frame_tiles(gMapObjectPic_RunningTriathleteF_4), + obj_frame_tiles(gMapObjectPic_RunningTriathleteF_5), + obj_frame_tiles(gMapObjectPic_RunningTriathleteF_6), + obj_frame_tiles(gMapObjectPic_RunningTriathleteF_7), + obj_frame_tiles(gMapObjectPic_RunningTriathleteF_8) +}; + +const struct SpriteFrameImage gMapObjectPicTable_TuberF[] = { + obj_frame_tiles(gMapObjectPic_TuberF_0), + obj_frame_tiles(gMapObjectPic_TuberF_1), + obj_frame_tiles(gMapObjectPic_TuberF_2), + obj_frame_tiles(gMapObjectPic_TuberF_3), + obj_frame_tiles(gMapObjectPic_TuberF_4), + obj_frame_tiles(gMapObjectPic_TuberF_5), + obj_frame_tiles(gMapObjectPic_TuberF_6), + obj_frame_tiles(gMapObjectPic_TuberF_7), + obj_frame_tiles(gMapObjectPic_TuberF_8) +}; + +const struct SpriteFrameImage gMapObjectPicTable_TuberM[] = { + obj_frame_tiles(gMapObjectPic_TuberM_0), + obj_frame_tiles(gMapObjectPic_TuberM_1), + obj_frame_tiles(gMapObjectPic_TuberM_2), + obj_frame_tiles(gMapObjectPic_TuberM_3), + obj_frame_tiles(gMapObjectPic_TuberM_4), + obj_frame_tiles(gMapObjectPic_TuberM_5), + obj_frame_tiles(gMapObjectPic_TuberM_6), + obj_frame_tiles(gMapObjectPic_TuberM_7), + obj_frame_tiles(gMapObjectPic_TuberM_8) +}; + +const struct SpriteFrameImage gMapObjectPicTable_Hiker[] = { + obj_frame_tiles(gMapObjectPic_Hiker_0), + obj_frame_tiles(gMapObjectPic_Hiker_1), + obj_frame_tiles(gMapObjectPic_Hiker_2), + obj_frame_tiles(gMapObjectPic_Hiker_3), + obj_frame_tiles(gMapObjectPic_Hiker_4), + obj_frame_tiles(gMapObjectPic_Hiker_5), + obj_frame_tiles(gMapObjectPic_Hiker_6), + obj_frame_tiles(gMapObjectPic_Hiker_7), + obj_frame_tiles(gMapObjectPic_Hiker_8) +}; + +const struct SpriteFrameImage gMapObjectPicTable_CyclingTriathleteM[] = { + obj_frame_tiles(gMapObjectPic_CyclingTriathleteM_0), + obj_frame_tiles(gMapObjectPic_CyclingTriathleteM_1), + obj_frame_tiles(gMapObjectPic_CyclingTriathleteM_2), + obj_frame_tiles(gMapObjectPic_CyclingTriathleteM_3), + obj_frame_tiles(gMapObjectPic_CyclingTriathleteM_4), + obj_frame_tiles(gMapObjectPic_CyclingTriathleteM_5), + obj_frame_tiles(gMapObjectPic_CyclingTriathleteM_6), + obj_frame_tiles(gMapObjectPic_CyclingTriathleteM_7), + obj_frame_tiles(gMapObjectPic_CyclingTriathleteM_8) +}; + +const struct SpriteFrameImage gMapObjectPicTable_CyclingTriathleteF[] = { + obj_frame_tiles(gMapObjectPic_CyclingTriathleteF_0), + obj_frame_tiles(gMapObjectPic_CyclingTriathleteF_1), + obj_frame_tiles(gMapObjectPic_CyclingTriathleteF_2), + obj_frame_tiles(gMapObjectPic_CyclingTriathleteF_3), + obj_frame_tiles(gMapObjectPic_CyclingTriathleteF_4), + obj_frame_tiles(gMapObjectPic_CyclingTriathleteF_5), + obj_frame_tiles(gMapObjectPic_CyclingTriathleteF_6), + obj_frame_tiles(gMapObjectPic_CyclingTriathleteF_7), + obj_frame_tiles(gMapObjectPic_CyclingTriathleteF_8) +}; + +const struct SpriteFrameImage gMapObjectPicTable_Nurse[] = { + obj_frame_tiles(gMapObjectPic_Nurse_0), + obj_frame_tiles(gMapObjectPic_Nurse_1), + obj_frame_tiles(gMapObjectPic_Nurse_2), + obj_frame_tiles(gMapObjectPic_Nurse_3), + obj_frame_tiles(gMapObjectPic_Nurse_4), + obj_frame_tiles(gMapObjectPic_Nurse_5), + obj_frame_tiles(gMapObjectPic_Nurse_6), + obj_frame_tiles(gMapObjectPic_Nurse_7), + obj_frame_tiles(gMapObjectPic_Nurse_8), + obj_frame_tiles(gMapObjectPic_Nurse_9) +}; + +const struct SpriteFrameImage gMapObjectPicTable_ItemBall[] = { + obj_frame_tiles(gMapObjectPic_ItemBall) +}; + +const struct SpriteFrameImage gMapObjectPicTable_ProfBirch[] = { + obj_frame_tiles(gMapObjectPic_ProfBirch_0), + obj_frame_tiles(gMapObjectPic_ProfBirch_1), + obj_frame_tiles(gMapObjectPic_ProfBirch_2), + obj_frame_tiles(gMapObjectPic_ProfBirch_3), + obj_frame_tiles(gMapObjectPic_ProfBirch_4), + obj_frame_tiles(gMapObjectPic_ProfBirch_5), + obj_frame_tiles(gMapObjectPic_ProfBirch_6), + obj_frame_tiles(gMapObjectPic_ProfBirch_7), + obj_frame_tiles(gMapObjectPic_ProfBirch_8) +}; + +const struct SpriteFrameImage gMapObjectPicTable_Man5[] = { + obj_frame_tiles(gMapObjectPic_Man5_0), + obj_frame_tiles(gMapObjectPic_Man5_1), + obj_frame_tiles(gMapObjectPic_Man5_2), + obj_frame_tiles(gMapObjectPic_Man5_3), + obj_frame_tiles(gMapObjectPic_Man5_4), + obj_frame_tiles(gMapObjectPic_Man5_5), + obj_frame_tiles(gMapObjectPic_Man5_6), + obj_frame_tiles(gMapObjectPic_Man5_7), + obj_frame_tiles(gMapObjectPic_Man5_8) +}; + +const struct SpriteFrameImage gMapObjectPicTable_Man6[] = { + obj_frame_tiles(gMapObjectPic_Man6_0), + obj_frame_tiles(gMapObjectPic_Man6_1), + obj_frame_tiles(gMapObjectPic_Man6_2), + obj_frame_tiles(gMapObjectPic_Man6_3), + obj_frame_tiles(gMapObjectPic_Man6_4), + obj_frame_tiles(gMapObjectPic_Man6_5), + obj_frame_tiles(gMapObjectPic_Man6_6), + obj_frame_tiles(gMapObjectPic_Man6_7), + obj_frame_tiles(gMapObjectPic_Man6_8) +}; + +const struct SpriteFrameImage gMapObjectPicTable_ReporterM[] = { + obj_frame_tiles(gMapObjectPic_ReporterM_0), + obj_frame_tiles(gMapObjectPic_ReporterM_1), + obj_frame_tiles(gMapObjectPic_ReporterM_2), + obj_frame_tiles(gMapObjectPic_ReporterM_3), + obj_frame_tiles(gMapObjectPic_ReporterM_4), + obj_frame_tiles(gMapObjectPic_ReporterM_5), + obj_frame_tiles(gMapObjectPic_ReporterM_6), + obj_frame_tiles(gMapObjectPic_ReporterM_7), + obj_frame_tiles(gMapObjectPic_ReporterM_8) +}; + +const struct SpriteFrameImage gMapObjectPicTable_ReporterF[] = { + obj_frame_tiles(gMapObjectPic_ReporterF_0), + obj_frame_tiles(gMapObjectPic_ReporterF_1), + obj_frame_tiles(gMapObjectPic_ReporterF_2), + obj_frame_tiles(gMapObjectPic_ReporterF_3), + obj_frame_tiles(gMapObjectPic_ReporterF_4), + obj_frame_tiles(gMapObjectPic_ReporterF_5), + obj_frame_tiles(gMapObjectPic_ReporterF_6), + obj_frame_tiles(gMapObjectPic_ReporterF_7), + obj_frame_tiles(gMapObjectPic_ReporterF_8) +}; + +const struct SpriteFrameImage gMapObjectPicTable_MauvilleOldMan1[] = { + obj_frame_tiles(gMapObjectPic_MauvilleOldMan1_0), + obj_frame_tiles(gMapObjectPic_MauvilleOldMan1_1), + obj_frame_tiles(gMapObjectPic_MauvilleOldMan1_2), + obj_frame_tiles(gMapObjectPic_MauvilleOldMan1_3), + obj_frame_tiles(gMapObjectPic_MauvilleOldMan1_4), + obj_frame_tiles(gMapObjectPic_MauvilleOldMan1_5), + obj_frame_tiles(gMapObjectPic_MauvilleOldMan1_6), + obj_frame_tiles(gMapObjectPic_MauvilleOldMan1_7), + obj_frame_tiles(gMapObjectPic_MauvilleOldMan1_8) +}; + +const struct SpriteFrameImage gMapObjectPicTable_MauvilleOldMan2[] = { + obj_frame_tiles(gMapObjectPic_MauvilleOldMan2_0), + obj_frame_tiles(gMapObjectPic_MauvilleOldMan2_1), + obj_frame_tiles(gMapObjectPic_MauvilleOldMan2_2), + obj_frame_tiles(gMapObjectPic_MauvilleOldMan2_3), + obj_frame_tiles(gMapObjectPic_MauvilleOldMan2_4), + obj_frame_tiles(gMapObjectPic_MauvilleOldMan2_5), + obj_frame_tiles(gMapObjectPic_MauvilleOldMan2_6), + obj_frame_tiles(gMapObjectPic_MauvilleOldMan2_7), + obj_frame_tiles(gMapObjectPic_MauvilleOldMan2_8) +}; + +const struct SpriteFrameImage gMapObjectPicTable_UnusedNatuDoll[] = { + obj_frame_tiles(gMapObjectPic_UnusedNatuDoll) +}; + +const struct SpriteFrameImage gMapObjectPicTable_UnusedMagnemiteDoll[] = { + obj_frame_tiles(gMapObjectPic_UnusedMagnemiteDoll) +}; + +const struct SpriteFrameImage gMapObjectPicTable_UnusedSquirtleDoll[] = { + obj_frame_tiles(gMapObjectPic_UnusedSquirtleDoll) +}; + +const struct SpriteFrameImage gMapObjectPicTable_UnusedWooperDoll[] = { + obj_frame_tiles(gMapObjectPic_UnusedWooperDoll) +}; + +const struct SpriteFrameImage gMapObjectPicTable_UnusedPikachuDoll[] = { + obj_frame_tiles(gMapObjectPic_UnusedPikachuDoll) +}; + +const struct SpriteFrameImage gMapObjectPicTable_UnusedPorygon2Doll[] = { + obj_frame_tiles(gMapObjectPic_UnusedPorygon2Doll) +}; + +const struct SpriteFrameImage gMapObjectPicTable_CuttableTree[] = { + obj_frame_tiles(gMapObjectPic_CuttableTree_0), + obj_frame_tiles(gMapObjectPic_CuttableTree_1), + obj_frame_tiles(gMapObjectPic_CuttableTree_2), + obj_frame_tiles(gMapObjectPic_CuttableTree_3) +}; + +const struct SpriteFrameImage gMapObjectPicTable_MartEmployee[] = { + obj_frame_tiles(gMapObjectPic_MartEmployee_0), + obj_frame_tiles(gMapObjectPic_MartEmployee_1), + obj_frame_tiles(gMapObjectPic_MartEmployee_2), + obj_frame_tiles(gMapObjectPic_MartEmployee_3), + obj_frame_tiles(gMapObjectPic_MartEmployee_4), + obj_frame_tiles(gMapObjectPic_MartEmployee_5), + obj_frame_tiles(gMapObjectPic_MartEmployee_6), + obj_frame_tiles(gMapObjectPic_MartEmployee_7), + obj_frame_tiles(gMapObjectPic_MartEmployee_8) +}; + +const struct SpriteFrameImage gMapObjectPicTable_RooftopSaleWoman[] = { + obj_frame_tiles(gMapObjectPic_RooftopSaleWoman_0), + obj_frame_tiles(gMapObjectPic_RooftopSaleWoman_1), + obj_frame_tiles(gMapObjectPic_RooftopSaleWoman_2), + obj_frame_tiles(gMapObjectPic_RooftopSaleWoman_3), + obj_frame_tiles(gMapObjectPic_RooftopSaleWoman_4), + obj_frame_tiles(gMapObjectPic_RooftopSaleWoman_5), + obj_frame_tiles(gMapObjectPic_RooftopSaleWoman_6), + obj_frame_tiles(gMapObjectPic_RooftopSaleWoman_7), + obj_frame_tiles(gMapObjectPic_RooftopSaleWoman_8) +}; + +const struct SpriteFrameImage gMapObjectPicTable_Teala[] = { + obj_frame_tiles(gMapObjectPic_Teala_0), + obj_frame_tiles(gMapObjectPic_Teala_1), + obj_frame_tiles(gMapObjectPic_Teala_2), + obj_frame_tiles(gMapObjectPic_Teala_3), + obj_frame_tiles(gMapObjectPic_Teala_4), + obj_frame_tiles(gMapObjectPic_Teala_5), + obj_frame_tiles(gMapObjectPic_Teala_6), + obj_frame_tiles(gMapObjectPic_Teala_7), + obj_frame_tiles(gMapObjectPic_Teala_8) +}; + +const struct SpriteFrameImage gMapObjectPicTable_BreakableRock[] = { + obj_frame_tiles(gMapObjectPic_BreakableRock_0), + obj_frame_tiles(gMapObjectPic_BreakableRock_1), + obj_frame_tiles(gMapObjectPic_BreakableRock_2), + obj_frame_tiles(gMapObjectPic_BreakableRock_3) +}; + +const struct SpriteFrameImage gMapObjectPicTable_PushableBoulder[] = { + obj_frame_tiles(gMapObjectPic_PushableBoulder) +}; + +const struct SpriteFrameImage gMapObjectPicTable_MrBrineysBoat[] = { + obj_frame_tiles(gMapObjectPic_MrBrineysBoat_0), + obj_frame_tiles(gMapObjectPic_MrBrineysBoat_1), + obj_frame_tiles(gMapObjectPic_MrBrineysBoat_2), + obj_frame_tiles(gMapObjectPic_MrBrineysBoat_0), + obj_frame_tiles(gMapObjectPic_MrBrineysBoat_0), + obj_frame_tiles(gMapObjectPic_MrBrineysBoat_1), + obj_frame_tiles(gMapObjectPic_MrBrineysBoat_1), + obj_frame_tiles(gMapObjectPic_MrBrineysBoat_2), + obj_frame_tiles(gMapObjectPic_MrBrineysBoat_2) +}; + +const struct SpriteFrameImage gMapObjectPicTable_Truck[] = { + obj_frame_tiles(gMapObjectPic_Truck) +}; + +const struct SpriteFrameImage gMapObjectPicTable_MachokeCarryingBox[] = { + obj_frame_tiles(gMapObjectPic_MachokeCarryingBox_0), + obj_frame_tiles(gMapObjectPic_MachokeCarryingBox_0), + obj_frame_tiles(gMapObjectPic_MachokeCarryingBox_0), + obj_frame_tiles(gMapObjectPic_MachokeCarryingBox_1), + obj_frame_tiles(gMapObjectPic_MachokeCarryingBox_2), + obj_frame_tiles(gMapObjectPic_MachokeCarryingBox_1), + obj_frame_tiles(gMapObjectPic_MachokeCarryingBox_2), + obj_frame_tiles(gMapObjectPic_MachokeCarryingBox_1), + obj_frame_tiles(gMapObjectPic_MachokeCarryingBox_2) +}; + +const struct SpriteFrameImage gMapObjectPicTable_MachokeFacingAway[] = { + obj_frame_tiles(gMapObjectPic_MachokeFacingAway_0), + obj_frame_tiles(gMapObjectPic_MachokeFacingAway_0), + obj_frame_tiles(gMapObjectPic_MachokeFacingAway_0), + obj_frame_tiles(gMapObjectPic_MachokeFacingAway_1), + obj_frame_tiles(gMapObjectPic_MachokeFacingAway_1), + obj_frame_tiles(gMapObjectPic_MachokeFacingAway_1), + obj_frame_tiles(gMapObjectPic_MachokeFacingAway_1), + obj_frame_tiles(gMapObjectPic_MachokeFacingAway_1), + obj_frame_tiles(gMapObjectPic_MachokeFacingAway_1) +}; + +const struct SpriteFrameImage gMapObjectPicTable_BirchsBag[] = { + obj_frame_tiles(gMapObjectPic_BirchsBag) +}; + +const struct SpriteFrameImage gMapObjectPicTable_Poochyena[] = { + obj_frame_tiles(gMapObjectPic_Poochyena_0), + obj_frame_tiles(gMapObjectPic_Poochyena_1), + obj_frame_tiles(gMapObjectPic_Poochyena_2), + obj_frame_tiles(gMapObjectPic_Poochyena_3), + obj_frame_tiles(gMapObjectPic_Poochyena_4), + obj_frame_tiles(gMapObjectPic_Poochyena_5), + obj_frame_tiles(gMapObjectPic_Poochyena_6), + obj_frame_tiles(gMapObjectPic_Poochyena_7), + obj_frame_tiles(gMapObjectPic_Poochyena_8) +}; + +const struct SpriteFrameImage gMapObjectPicTable_Artist[] = { + obj_frame_tiles(gMapObjectPic_Artist_0), + obj_frame_tiles(gMapObjectPic_Artist_1), + obj_frame_tiles(gMapObjectPic_Artist_2), + obj_frame_tiles(gMapObjectPic_Artist_3), + obj_frame_tiles(gMapObjectPic_Artist_4), + obj_frame_tiles(gMapObjectPic_Artist_5), + obj_frame_tiles(gMapObjectPic_Artist_6), + obj_frame_tiles(gMapObjectPic_Artist_7), + obj_frame_tiles(gMapObjectPic_Artist_8) +}; + +const struct SpriteFrameImage gMapObjectPicTable_MayNormal[] = { + obj_frame_tiles(gMapObjectPic_MayNormal_0), + obj_frame_tiles(gMapObjectPic_MayNormal_1), + obj_frame_tiles(gMapObjectPic_MayNormal_2), + obj_frame_tiles(gMapObjectPic_MayNormal_3), + obj_frame_tiles(gMapObjectPic_MayNormal_4), + obj_frame_tiles(gMapObjectPic_MayNormal_5), + obj_frame_tiles(gMapObjectPic_MayNormal_6), + obj_frame_tiles(gMapObjectPic_MayNormal_7), + obj_frame_tiles(gMapObjectPic_MayNormal_8), + obj_frame_tiles(gMapObjectPic_MayNormal_9), + obj_frame_tiles(gMapObjectPic_MayNormal_10), + obj_frame_tiles(gMapObjectPic_MayNormal_11), + obj_frame_tiles(gMapObjectPic_MayNormal_12), + obj_frame_tiles(gMapObjectPic_MayNormal_13), + obj_frame_tiles(gMapObjectPic_MayNormal_14), + obj_frame_tiles(gMapObjectPic_MayNormal_15), + obj_frame_tiles(gMapObjectPic_MayNormal_16), + obj_frame_tiles(gMapObjectPic_MayNormal_17) +}; + +const struct SpriteFrameImage gMapObjectPicTable_MayMachBike[] = { + obj_frame_tiles(gMapObjectPic_MayMachBike_0), + obj_frame_tiles(gMapObjectPic_MayMachBike_1), + obj_frame_tiles(gMapObjectPic_MayMachBike_2), + obj_frame_tiles(gMapObjectPic_MayMachBike_3), + obj_frame_tiles(gMapObjectPic_MayMachBike_4), + obj_frame_tiles(gMapObjectPic_MayMachBike_5), + obj_frame_tiles(gMapObjectPic_MayMachBike_6), + obj_frame_tiles(gMapObjectPic_MayMachBike_7), + obj_frame_tiles(gMapObjectPic_MayMachBike_8) +}; + +const struct SpriteFrameImage gMapObjectPicTable_MayAcroBike[] = { + obj_frame_tiles(gMapObjectPic_MayAcroBike_0), + obj_frame_tiles(gMapObjectPic_MayAcroBike_1), + obj_frame_tiles(gMapObjectPic_MayAcroBike_2), + obj_frame_tiles(gMapObjectPic_MayAcroBike_3), + obj_frame_tiles(gMapObjectPic_MayAcroBike_4), + obj_frame_tiles(gMapObjectPic_MayAcroBike_5), + obj_frame_tiles(gMapObjectPic_MayAcroBike_6), + obj_frame_tiles(gMapObjectPic_MayAcroBike_7), + obj_frame_tiles(gMapObjectPic_MayAcroBike_8), + obj_frame_tiles(gMapObjectPic_MayAcroBike_9), + obj_frame_tiles(gMapObjectPic_MayAcroBike_10), + obj_frame_tiles(gMapObjectPic_MayAcroBike_11), + obj_frame_tiles(gMapObjectPic_MayAcroBike_12), + obj_frame_tiles(gMapObjectPic_MayAcroBike_13), + obj_frame_tiles(gMapObjectPic_MayAcroBike_14), + obj_frame_tiles(gMapObjectPic_MayAcroBike_15), + obj_frame_tiles(gMapObjectPic_MayAcroBike_16), + obj_frame_tiles(gMapObjectPic_MayAcroBike_17), + obj_frame_tiles(gMapObjectPic_MayAcroBike_18), + obj_frame_tiles(gMapObjectPic_MayAcroBike_19), + obj_frame_tiles(gMapObjectPic_MayAcroBike_20), + obj_frame_tiles(gMapObjectPic_MayAcroBike_21), + obj_frame_tiles(gMapObjectPic_MayAcroBike_22), + obj_frame_tiles(gMapObjectPic_MayAcroBike_23), + obj_frame_tiles(gMapObjectPic_MayAcroBike_24), + obj_frame_tiles(gMapObjectPic_MayAcroBike_25), + obj_frame_tiles(gMapObjectPic_MayAcroBike_26) +}; + +const struct SpriteFrameImage gMapObjectPicTable_MaySurfing[] = { + obj_frame_tiles(gMapObjectPic_MaySurfing_0), + obj_frame_tiles(gMapObjectPic_MaySurfing_1), + obj_frame_tiles(gMapObjectPic_MaySurfing_2), + obj_frame_tiles(gMapObjectPic_MaySurfing_0), + obj_frame_tiles(gMapObjectPic_MaySurfing_0), + obj_frame_tiles(gMapObjectPic_MaySurfing_1), + obj_frame_tiles(gMapObjectPic_MaySurfing_1), + obj_frame_tiles(gMapObjectPic_MaySurfing_2), + obj_frame_tiles(gMapObjectPic_MaySurfing_2), + obj_frame_tiles(gMapObjectPic_MaySurfing_3), + obj_frame_tiles(gMapObjectPic_MaySurfing_4), + obj_frame_tiles(gMapObjectPic_MaySurfing_5) +}; + +const struct SpriteFrameImage gMapObjectPicTable_MayUnderwater[] = { + obj_frame_tiles(gMapObjectPic_MayUnderwater_0), + obj_frame_tiles(gMapObjectPic_MayUnderwater_1), + obj_frame_tiles(gMapObjectPic_MayUnderwater_2), + obj_frame_tiles(gMapObjectPic_MayUnderwater_0), + obj_frame_tiles(gMapObjectPic_MayUnderwater_0), + obj_frame_tiles(gMapObjectPic_MayUnderwater_1), + obj_frame_tiles(gMapObjectPic_MayUnderwater_1), + obj_frame_tiles(gMapObjectPic_MayUnderwater_2), + obj_frame_tiles(gMapObjectPic_MayUnderwater_2) +}; + +const struct SpriteFrameImage gMapObjectPicTable_MayFieldMove[] = { + obj_frame_tiles(gMapObjectPic_MayFieldMove_0), + obj_frame_tiles(gMapObjectPic_MayFieldMove_1), + obj_frame_tiles(gMapObjectPic_MayFieldMove_2), + obj_frame_tiles(gMapObjectPic_MayFieldMove_3), + obj_frame_tiles(gMapObjectPic_MayFieldMove_4) +}; + +const struct SpriteFrameImage gMapObjectPicTable_Cameraman[] = { + obj_frame_tiles(gMapObjectPic_Cameraman_0), + obj_frame_tiles(gMapObjectPic_Cameraman_1), + obj_frame_tiles(gMapObjectPic_Cameraman_2), + obj_frame_tiles(gMapObjectPic_Cameraman_3), + obj_frame_tiles(gMapObjectPic_Cameraman_4), + obj_frame_tiles(gMapObjectPic_Cameraman_5), + obj_frame_tiles(gMapObjectPic_Cameraman_6), + obj_frame_tiles(gMapObjectPic_Cameraman_7), + obj_frame_tiles(gMapObjectPic_Cameraman_8) +}; + +const struct SpriteFrameImage gMapObjectPicTable_MovingBox[] = { + obj_frame_tiles(gMapObjectPic_MovingBox) +}; + +const struct SpriteFrameImage gMapObjectPicTable_CableCar[] = { + obj_frame_tiles(gMapObjectPic_CableCar) +}; + +const struct SpriteFrameImage gMapObjectPicTable_Scientist2[] = { + obj_frame_tiles(gMapObjectPic_Scientist2_0), + obj_frame_tiles(gMapObjectPic_Scientist2_1), + obj_frame_tiles(gMapObjectPic_Scientist2_2), + obj_frame_tiles(gMapObjectPic_Scientist2_3), + obj_frame_tiles(gMapObjectPic_Scientist2_4), + obj_frame_tiles(gMapObjectPic_Scientist2_5), + obj_frame_tiles(gMapObjectPic_Scientist2_6), + obj_frame_tiles(gMapObjectPic_Scientist2_7), + obj_frame_tiles(gMapObjectPic_Scientist2_8) +}; + +const struct SpriteFrameImage gMapObjectPicTable_Man7[] = { + obj_frame_tiles(gMapObjectPic_Man7_0), + obj_frame_tiles(gMapObjectPic_Man7_1), + obj_frame_tiles(gMapObjectPic_Man7_2), + obj_frame_tiles(gMapObjectPic_Man7_3), + obj_frame_tiles(gMapObjectPic_Man7_4), + obj_frame_tiles(gMapObjectPic_Man7_5), + obj_frame_tiles(gMapObjectPic_Man7_6), + obj_frame_tiles(gMapObjectPic_Man7_7), + obj_frame_tiles(gMapObjectPic_Man7_8) +}; + +const struct SpriteFrameImage gMapObjectPicTable_AquaMemberM[] = { + obj_frame_tiles(gMapObjectPic_AquaMemberM_0), + obj_frame_tiles(gMapObjectPic_AquaMemberM_1), + obj_frame_tiles(gMapObjectPic_AquaMemberM_2), + obj_frame_tiles(gMapObjectPic_AquaMemberM_3), + obj_frame_tiles(gMapObjectPic_AquaMemberM_4), + obj_frame_tiles(gMapObjectPic_AquaMemberM_5), + obj_frame_tiles(gMapObjectPic_AquaMemberM_6), + obj_frame_tiles(gMapObjectPic_AquaMemberM_7), + obj_frame_tiles(gMapObjectPic_AquaMemberM_8) +}; + +const struct SpriteFrameImage gMapObjectPicTable_AquaMemberF[] = { + obj_frame_tiles(gMapObjectPic_AquaMemberF_0), + obj_frame_tiles(gMapObjectPic_AquaMemberF_1), + obj_frame_tiles(gMapObjectPic_AquaMemberF_2), + obj_frame_tiles(gMapObjectPic_AquaMemberF_3), + obj_frame_tiles(gMapObjectPic_AquaMemberF_4), + obj_frame_tiles(gMapObjectPic_AquaMemberF_5), + obj_frame_tiles(gMapObjectPic_AquaMemberF_6), + obj_frame_tiles(gMapObjectPic_AquaMemberF_7), + obj_frame_tiles(gMapObjectPic_AquaMemberF_8) +}; + +const struct SpriteFrameImage gMapObjectPicTable_MagmaMemberM[] = { + obj_frame_tiles(gMapObjectPic_MagmaMemberM_0), + obj_frame_tiles(gMapObjectPic_MagmaMemberM_1), + obj_frame_tiles(gMapObjectPic_MagmaMemberM_2), + obj_frame_tiles(gMapObjectPic_MagmaMemberM_3), + obj_frame_tiles(gMapObjectPic_MagmaMemberM_4), + obj_frame_tiles(gMapObjectPic_MagmaMemberM_5), + obj_frame_tiles(gMapObjectPic_MagmaMemberM_6), + obj_frame_tiles(gMapObjectPic_MagmaMemberM_7), + obj_frame_tiles(gMapObjectPic_MagmaMemberM_8) +}; + +const struct SpriteFrameImage gMapObjectPicTable_MagmaMemberF[] = { + obj_frame_tiles(gMapObjectPic_MagmaMemberF_0), + obj_frame_tiles(gMapObjectPic_MagmaMemberF_1), + obj_frame_tiles(gMapObjectPic_MagmaMemberF_2), + obj_frame_tiles(gMapObjectPic_MagmaMemberF_3), + obj_frame_tiles(gMapObjectPic_MagmaMemberF_4), + obj_frame_tiles(gMapObjectPic_MagmaMemberF_5), + obj_frame_tiles(gMapObjectPic_MagmaMemberF_6), + obj_frame_tiles(gMapObjectPic_MagmaMemberF_7), + obj_frame_tiles(gMapObjectPic_MagmaMemberF_8) +}; + +const struct SpriteFrameImage gMapObjectPicTable_Sidney[] = { + obj_frame_tiles(gMapObjectPic_Sidney_0), + obj_frame_tiles(gMapObjectPic_Sidney_1), + obj_frame_tiles(gMapObjectPic_Sidney_2), + obj_frame_tiles(gMapObjectPic_Sidney_0), + obj_frame_tiles(gMapObjectPic_Sidney_0), + obj_frame_tiles(gMapObjectPic_Sidney_1), + obj_frame_tiles(gMapObjectPic_Sidney_1), + obj_frame_tiles(gMapObjectPic_Sidney_2), + obj_frame_tiles(gMapObjectPic_Sidney_2) +}; + +const struct SpriteFrameImage gMapObjectPicTable_Phoebe[] = { + obj_frame_tiles(gMapObjectPic_Phoebe_0), + obj_frame_tiles(gMapObjectPic_Phoebe_1), + obj_frame_tiles(gMapObjectPic_Phoebe_2), + obj_frame_tiles(gMapObjectPic_Phoebe_0), + obj_frame_tiles(gMapObjectPic_Phoebe_0), + obj_frame_tiles(gMapObjectPic_Phoebe_1), + obj_frame_tiles(gMapObjectPic_Phoebe_1), + obj_frame_tiles(gMapObjectPic_Phoebe_2), + obj_frame_tiles(gMapObjectPic_Phoebe_2) +}; + +const struct SpriteFrameImage gMapObjectPicTable_Glacia[] = { + obj_frame_tiles(gMapObjectPic_Glacia_0), + obj_frame_tiles(gMapObjectPic_Glacia_1), + obj_frame_tiles(gMapObjectPic_Glacia_2), + obj_frame_tiles(gMapObjectPic_Glacia_0), + obj_frame_tiles(gMapObjectPic_Glacia_0), + obj_frame_tiles(gMapObjectPic_Glacia_1), + obj_frame_tiles(gMapObjectPic_Glacia_1), + obj_frame_tiles(gMapObjectPic_Glacia_2), + obj_frame_tiles(gMapObjectPic_Glacia_2) +}; + +const struct SpriteFrameImage gMapObjectPicTable_Drake[] = { + obj_frame_tiles(gMapObjectPic_Drake_0), + obj_frame_tiles(gMapObjectPic_Drake_1), + obj_frame_tiles(gMapObjectPic_Drake_2), + obj_frame_tiles(gMapObjectPic_Drake_0), + obj_frame_tiles(gMapObjectPic_Drake_0), + obj_frame_tiles(gMapObjectPic_Drake_1), + obj_frame_tiles(gMapObjectPic_Drake_1), + obj_frame_tiles(gMapObjectPic_Drake_2), + obj_frame_tiles(gMapObjectPic_Drake_2) +}; + +const struct SpriteFrameImage gMapObjectPicTable_Roxanne[] = { + obj_frame_tiles(gMapObjectPic_Roxanne_0), + obj_frame_tiles(gMapObjectPic_Roxanne_1), + obj_frame_tiles(gMapObjectPic_Roxanne_2), + obj_frame_tiles(gMapObjectPic_Roxanne_0), + obj_frame_tiles(gMapObjectPic_Roxanne_0), + obj_frame_tiles(gMapObjectPic_Roxanne_1), + obj_frame_tiles(gMapObjectPic_Roxanne_1), + obj_frame_tiles(gMapObjectPic_Roxanne_2), + obj_frame_tiles(gMapObjectPic_Roxanne_2) +}; + +const struct SpriteFrameImage gMapObjectPicTable_Brawly[] = { + obj_frame_tiles(gMapObjectPic_Brawly_0), + obj_frame_tiles(gMapObjectPic_Brawly_1), + obj_frame_tiles(gMapObjectPic_Brawly_2), + obj_frame_tiles(gMapObjectPic_Brawly_0), + obj_frame_tiles(gMapObjectPic_Brawly_0), + obj_frame_tiles(gMapObjectPic_Brawly_1), + obj_frame_tiles(gMapObjectPic_Brawly_1), + obj_frame_tiles(gMapObjectPic_Brawly_2), + obj_frame_tiles(gMapObjectPic_Brawly_2) +}; + +const struct SpriteFrameImage gMapObjectPicTable_Wattson[] = { + obj_frame_tiles(gMapObjectPic_Wattson_0), + obj_frame_tiles(gMapObjectPic_Wattson_1), + obj_frame_tiles(gMapObjectPic_Wattson_2), + obj_frame_tiles(gMapObjectPic_Wattson_0), + obj_frame_tiles(gMapObjectPic_Wattson_0), + obj_frame_tiles(gMapObjectPic_Wattson_1), + obj_frame_tiles(gMapObjectPic_Wattson_1), + obj_frame_tiles(gMapObjectPic_Wattson_2), + obj_frame_tiles(gMapObjectPic_Wattson_2) +}; + +const struct SpriteFrameImage gMapObjectPicTable_Flannery[] = { + obj_frame_tiles(gMapObjectPic_Flannery_0), + obj_frame_tiles(gMapObjectPic_Flannery_1), + obj_frame_tiles(gMapObjectPic_Flannery_2), + obj_frame_tiles(gMapObjectPic_Flannery_0), + obj_frame_tiles(gMapObjectPic_Flannery_0), + obj_frame_tiles(gMapObjectPic_Flannery_1), + obj_frame_tiles(gMapObjectPic_Flannery_1), + obj_frame_tiles(gMapObjectPic_Flannery_2), + obj_frame_tiles(gMapObjectPic_Flannery_2) +}; + +const struct SpriteFrameImage gMapObjectPicTable_Norman[] = { + obj_frame_tiles(gMapObjectPic_Norman_0), + obj_frame_tiles(gMapObjectPic_Norman_1), + obj_frame_tiles(gMapObjectPic_Norman_2), + obj_frame_tiles(gMapObjectPic_Norman_3), + obj_frame_tiles(gMapObjectPic_Norman_4), + obj_frame_tiles(gMapObjectPic_Norman_5), + obj_frame_tiles(gMapObjectPic_Norman_6), + obj_frame_tiles(gMapObjectPic_Norman_7), + obj_frame_tiles(gMapObjectPic_Norman_8) +}; + +const struct SpriteFrameImage gMapObjectPicTable_Winona[] = { + obj_frame_tiles(gMapObjectPic_Winona_0), + obj_frame_tiles(gMapObjectPic_Winona_1), + obj_frame_tiles(gMapObjectPic_Winona_2), + obj_frame_tiles(gMapObjectPic_Winona_0), + obj_frame_tiles(gMapObjectPic_Winona_0), + obj_frame_tiles(gMapObjectPic_Winona_1), + obj_frame_tiles(gMapObjectPic_Winona_1), + obj_frame_tiles(gMapObjectPic_Winona_2), + obj_frame_tiles(gMapObjectPic_Winona_2) +}; + +const struct SpriteFrameImage gMapObjectPicTable_Liza[] = { + obj_frame_tiles(gMapObjectPic_Liza_0), + obj_frame_tiles(gMapObjectPic_Liza_1), + obj_frame_tiles(gMapObjectPic_Liza_2), + obj_frame_tiles(gMapObjectPic_Liza_0), + obj_frame_tiles(gMapObjectPic_Liza_0), + obj_frame_tiles(gMapObjectPic_Liza_1), + obj_frame_tiles(gMapObjectPic_Liza_1), + obj_frame_tiles(gMapObjectPic_Liza_2), + obj_frame_tiles(gMapObjectPic_Liza_2) +}; + +const struct SpriteFrameImage gMapObjectPicTable_Tate[] = { + obj_frame_tiles(gMapObjectPic_Tate_0), + obj_frame_tiles(gMapObjectPic_Tate_1), + obj_frame_tiles(gMapObjectPic_Tate_2), + obj_frame_tiles(gMapObjectPic_Tate_0), + obj_frame_tiles(gMapObjectPic_Tate_0), + obj_frame_tiles(gMapObjectPic_Tate_1), + obj_frame_tiles(gMapObjectPic_Tate_1), + obj_frame_tiles(gMapObjectPic_Tate_2), + obj_frame_tiles(gMapObjectPic_Tate_2) +}; + +const struct SpriteFrameImage gMapObjectPicTable_Wallace[] = { + obj_frame_tiles(gMapObjectPic_Wallace_0), + obj_frame_tiles(gMapObjectPic_Wallace_1), + obj_frame_tiles(gMapObjectPic_Wallace_2), + obj_frame_tiles(gMapObjectPic_Wallace_3), + obj_frame_tiles(gMapObjectPic_Wallace_4), + obj_frame_tiles(gMapObjectPic_Wallace_5), + obj_frame_tiles(gMapObjectPic_Wallace_6), + obj_frame_tiles(gMapObjectPic_Wallace_7), + obj_frame_tiles(gMapObjectPic_Wallace_8) +}; + +const struct SpriteFrameImage gMapObjectPicTable_Steven[] = { + obj_frame_tiles(gMapObjectPic_Steven_0), + obj_frame_tiles(gMapObjectPic_Steven_1), + obj_frame_tiles(gMapObjectPic_Steven_2), + obj_frame_tiles(gMapObjectPic_Steven_3), + obj_frame_tiles(gMapObjectPic_Steven_4), + obj_frame_tiles(gMapObjectPic_Steven_5), + obj_frame_tiles(gMapObjectPic_Steven_6), + obj_frame_tiles(gMapObjectPic_Steven_7), + obj_frame_tiles(gMapObjectPic_Steven_8) +}; + +const struct SpriteFrameImage gMapObjectPicTable_Wally[] = { + obj_frame_tiles(gMapObjectPic_Wally_0), + obj_frame_tiles(gMapObjectPic_Wally_1), + obj_frame_tiles(gMapObjectPic_Wally_2), + obj_frame_tiles(gMapObjectPic_Wally_3), + obj_frame_tiles(gMapObjectPic_Wally_4), + obj_frame_tiles(gMapObjectPic_Wally_5), + obj_frame_tiles(gMapObjectPic_Wally_6), + obj_frame_tiles(gMapObjectPic_Wally_7), + obj_frame_tiles(gMapObjectPic_Wally_8) +}; + +const struct SpriteFrameImage gMapObjectPicTable_LittleBoy3[] = { + obj_frame_tiles(gMapObjectPic_LittleBoy3_0), + obj_frame_tiles(gMapObjectPic_LittleBoy3_1), + obj_frame_tiles(gMapObjectPic_LittleBoy3_2), + obj_frame_tiles(gMapObjectPic_LittleBoy3_3), + obj_frame_tiles(gMapObjectPic_LittleBoy3_4), + obj_frame_tiles(gMapObjectPic_LittleBoy3_5), + obj_frame_tiles(gMapObjectPic_LittleBoy3_6), + obj_frame_tiles(gMapObjectPic_LittleBoy3_7), + obj_frame_tiles(gMapObjectPic_LittleBoy3_8) +}; + +const struct SpriteFrameImage gMapObjectPicTable_BrendanFishing[] = { + obj_frame_tiles(gMapObjectPic_BrendanFishing_0), + obj_frame_tiles(gMapObjectPic_BrendanFishing_1), + obj_frame_tiles(gMapObjectPic_BrendanFishing_2), + obj_frame_tiles(gMapObjectPic_BrendanFishing_3), + obj_frame_tiles(gMapObjectPic_BrendanFishing_4), + obj_frame_tiles(gMapObjectPic_BrendanFishing_5), + obj_frame_tiles(gMapObjectPic_BrendanFishing_6), + obj_frame_tiles(gMapObjectPic_BrendanFishing_7), + obj_frame_tiles(gMapObjectPic_BrendanFishing_8), + obj_frame_tiles(gMapObjectPic_BrendanFishing_9), + obj_frame_tiles(gMapObjectPic_BrendanFishing_10), + obj_frame_tiles(gMapObjectPic_BrendanFishing_11) +}; + +const struct SpriteFrameImage gMapObjectPicTable_MayFishing[] = { + obj_frame_tiles(gMapObjectPic_MayFishing_0), + obj_frame_tiles(gMapObjectPic_MayFishing_1), + obj_frame_tiles(gMapObjectPic_MayFishing_2), + obj_frame_tiles(gMapObjectPic_MayFishing_3), + obj_frame_tiles(gMapObjectPic_MayFishing_4), + obj_frame_tiles(gMapObjectPic_MayFishing_5), + obj_frame_tiles(gMapObjectPic_MayFishing_6), + obj_frame_tiles(gMapObjectPic_MayFishing_7), + obj_frame_tiles(gMapObjectPic_MayFishing_8), + obj_frame_tiles(gMapObjectPic_MayFishing_9), + obj_frame_tiles(gMapObjectPic_MayFishing_10), + obj_frame_tiles(gMapObjectPic_MayFishing_11) +}; + +const struct SpriteFrameImage gMapObjectPicTable_HotSpringsOldWoman[] = { + obj_frame_tiles(gMapObjectPic_HotSpringsOldWoman_0), + obj_frame_tiles(gMapObjectPic_HotSpringsOldWoman_1), + obj_frame_tiles(gMapObjectPic_HotSpringsOldWoman_2), + obj_frame_tiles(gMapObjectPic_HotSpringsOldWoman_3), + obj_frame_tiles(gMapObjectPic_HotSpringsOldWoman_4), + obj_frame_tiles(gMapObjectPic_HotSpringsOldWoman_5), + obj_frame_tiles(gMapObjectPic_HotSpringsOldWoman_6), + obj_frame_tiles(gMapObjectPic_HotSpringsOldWoman_7), + obj_frame_tiles(gMapObjectPic_HotSpringsOldWoman_8) +}; + +const struct SpriteFrameImage gMapObjectPicTable_SSTidal[] = { + obj_frame_tiles(gMapObjectPic_SSTidal), + obj_frame_tiles(gMapObjectPic_SSTidal), + obj_frame_tiles(gMapObjectPic_SSTidal), + obj_frame_tiles(gMapObjectPic_SSTidal), + obj_frame_tiles(gMapObjectPic_SSTidal), + obj_frame_tiles(gMapObjectPic_SSTidal), + obj_frame_tiles(gMapObjectPic_SSTidal), + obj_frame_tiles(gMapObjectPic_SSTidal), + obj_frame_tiles(gMapObjectPic_SSTidal) +}; + +const struct SpriteFrameImage gMapObjectPicTable_SubmarineShadow[] = { + obj_frame_tiles(gMapObjectPic_SubmarineShadow), + obj_frame_tiles(gMapObjectPic_SubmarineShadow), + obj_frame_tiles(gMapObjectPic_SubmarineShadow), + obj_frame_tiles(gMapObjectPic_SubmarineShadow), + obj_frame_tiles(gMapObjectPic_SubmarineShadow), + obj_frame_tiles(gMapObjectPic_SubmarineShadow), + obj_frame_tiles(gMapObjectPic_SubmarineShadow), + obj_frame_tiles(gMapObjectPic_SubmarineShadow), + obj_frame_tiles(gMapObjectPic_SubmarineShadow) +}; + +const struct SpriteFrameImage gMapObjectPicTable_PichuDoll[] = { + obj_frame_tiles(gMapObjectPic_PichuDoll) +}; + +const struct SpriteFrameImage gMapObjectPicTable_PikachuDoll[] = { + obj_frame_tiles(gMapObjectPic_PikachuDoll) +}; + +const struct SpriteFrameImage gMapObjectPicTable_MarillDoll[] = { + obj_frame_tiles(gMapObjectPic_MarillDoll) +}; + +const struct SpriteFrameImage gMapObjectPicTable_TogepiDoll[] = { + obj_frame_tiles(gMapObjectPic_TogepiDoll) +}; + +const struct SpriteFrameImage gMapObjectPicTable_CyndaquilDoll[] = { + obj_frame_tiles(gMapObjectPic_CyndaquilDoll) +}; + +const struct SpriteFrameImage gMapObjectPicTable_ChikoritaDoll[] = { + obj_frame_tiles(gMapObjectPic_ChikoritaDoll) +}; + +const struct SpriteFrameImage gMapObjectPicTable_TotodileDoll[] = { + obj_frame_tiles(gMapObjectPic_TotodileDoll) +}; + +const struct SpriteFrameImage gMapObjectPicTable_JigglypuffDoll[] = { + obj_frame_tiles(gMapObjectPic_JigglypuffDoll) +}; + +const struct SpriteFrameImage gMapObjectPicTable_MeowthDoll[] = { + obj_frame_tiles(gMapObjectPic_MeowthDoll) +}; + +const struct SpriteFrameImage gMapObjectPicTable_ClefairyDoll[] = { + obj_frame_tiles(gMapObjectPic_ClefairyDoll) +}; + +const struct SpriteFrameImage gMapObjectPicTable_DittoDoll[] = { + obj_frame_tiles(gMapObjectPic_DittoDoll) +}; + +const struct SpriteFrameImage gMapObjectPicTable_SmoochumDoll[] = { + obj_frame_tiles(gMapObjectPic_SmoochumDoll) +}; + +const struct SpriteFrameImage gMapObjectPicTable_TreeckoDoll[] = { + obj_frame_tiles(gMapObjectPic_TreeckoDoll) +}; + +const struct SpriteFrameImage gMapObjectPicTable_TorchicDoll[] = { + obj_frame_tiles(gMapObjectPic_TorchicDoll) +}; + +const struct SpriteFrameImage gMapObjectPicTable_MudkipDoll[] = { + obj_frame_tiles(gMapObjectPic_MudkipDoll) +}; + +const struct SpriteFrameImage gMapObjectPicTable_DuskullDoll[] = { + obj_frame_tiles(gMapObjectPic_DuskullDoll) +}; + +const struct SpriteFrameImage gMapObjectPicTable_WynautDoll[] = { + obj_frame_tiles(gMapObjectPic_WynautDoll) +}; + +const struct SpriteFrameImage gMapObjectPicTable_BaltoyDoll[] = { + obj_frame_tiles(gMapObjectPic_BaltoyDoll) +}; + +const struct SpriteFrameImage gMapObjectPicTable_KecleonDoll[] = { + obj_frame_tiles(gMapObjectPic_KecleonDoll) +}; + +const struct SpriteFrameImage gMapObjectPicTable_AzurillDoll[] = { + obj_frame_tiles(gMapObjectPic_AzurillDoll) +}; + +const struct SpriteFrameImage gMapObjectPicTable_SkittyDoll[] = { + obj_frame_tiles(gMapObjectPic_SkittyDoll) +}; + +const struct SpriteFrameImage gMapObjectPicTable_SwabluDoll[] = { + obj_frame_tiles(gMapObjectPic_SwabluDoll) +}; + +const struct SpriteFrameImage gMapObjectPicTable_GulpinDoll[] = { + obj_frame_tiles(gMapObjectPic_GulpinDoll) +}; + +const struct SpriteFrameImage gMapObjectPicTable_LotadDoll[] = { + obj_frame_tiles(gMapObjectPic_LotadDoll) +}; + +const struct SpriteFrameImage gMapObjectPicTable_SeedotDoll[] = { + obj_frame_tiles(gMapObjectPic_SeedotDoll) +}; + +const struct SpriteFrameImage gMapObjectPicTable_PikaCushion[] = { + obj_frame_tiles(gMapObjectPic_PikaCushion) +}; + +const struct SpriteFrameImage gMapObjectPicTable_RoundCushion[] = { + obj_frame_tiles(gMapObjectPic_RoundCushion) +}; + +const struct SpriteFrameImage gMapObjectPicTable_KissCushion[] = { + obj_frame_tiles(gMapObjectPic_KissCushion) +}; + +const struct SpriteFrameImage gMapObjectPicTable_ZigzagCushion[] = { + obj_frame_tiles(gMapObjectPic_ZigzagCushion) +}; + +const struct SpriteFrameImage gMapObjectPicTable_SpinCushion[] = { + obj_frame_tiles(gMapObjectPic_SpinCushion) +}; + +const struct SpriteFrameImage gMapObjectPicTable_DiamondCushion[] = { + obj_frame_tiles(gMapObjectPic_DiamondCushion) +}; + +const struct SpriteFrameImage gMapObjectPicTable_BallCushion[] = { + obj_frame_tiles(gMapObjectPic_BallCushion) +}; + +const struct SpriteFrameImage gMapObjectPicTable_GrassCushion[] = { + obj_frame_tiles(gMapObjectPic_GrassCushion) +}; + +const struct SpriteFrameImage gMapObjectPicTable_FireCushion[] = { + obj_frame_tiles(gMapObjectPic_FireCushion) +}; + +const struct SpriteFrameImage gMapObjectPicTable_WaterCushion[] = { + obj_frame_tiles(gMapObjectPic_WaterCushion) +}; + +const struct SpriteFrameImage gMapObjectPicTable_BigSnorlaxDoll[] = { + obj_frame_tiles(gMapObjectPic_BigSnorlaxDoll) +}; + +const struct SpriteFrameImage gMapObjectPicTable_BigRhydonDoll[] = { + obj_frame_tiles(gMapObjectPic_BigRhydonDoll) +}; + +const struct SpriteFrameImage gMapObjectPicTable_BigLaprasDoll[] = { + obj_frame_tiles(gMapObjectPic_BigLaprasDoll) +}; + +const struct SpriteFrameImage gMapObjectPicTable_BigVenusaurDoll[] = { + obj_frame_tiles(gMapObjectPic_BigVenusaurDoll) +}; + +const struct SpriteFrameImage gMapObjectPicTable_BigCharizardDoll[] = { + obj_frame_tiles(gMapObjectPic_BigCharizardDoll) +}; + +const struct SpriteFrameImage gMapObjectPicTable_BigBlastoiseDoll[] = { + obj_frame_tiles(gMapObjectPic_BigBlastoiseDoll) +}; + +const struct SpriteFrameImage gMapObjectPicTable_BigWailmerDoll[] = { + obj_frame_tiles(gMapObjectPic_BigWailmerDoll) +}; + +const struct SpriteFrameImage gMapObjectPicTable_BigRegirockDoll[] = { + obj_frame_tiles(gMapObjectPic_BigRegirockDoll) +}; + +const struct SpriteFrameImage gMapObjectPicTable_BigRegiceDoll[] = { + obj_frame_tiles(gMapObjectPic_BigRegiceDoll) +}; + +const struct SpriteFrameImage gMapObjectPicTable_BigRegisteelDoll[] = { + obj_frame_tiles(gMapObjectPic_BigRegisteelDoll) +}; + +const struct SpriteFrameImage gMapObjectPicTable_LatiasLatios[] = { + obj_frame_tiles(gMapObjectPic_LatiasLatios_0), + obj_frame_tiles(gMapObjectPic_LatiasLatios_0), + obj_frame_tiles(gMapObjectPic_LatiasLatios_0), + obj_frame_tiles(gMapObjectPic_LatiasLatios_1), + obj_frame_tiles(gMapObjectPic_LatiasLatios_2), + obj_frame_tiles(gMapObjectPic_LatiasLatios_1), + obj_frame_tiles(gMapObjectPic_LatiasLatios_2), + obj_frame_tiles(gMapObjectPic_LatiasLatios_1), + obj_frame_tiles(gMapObjectPic_LatiasLatios_2) +}; + +const struct SpriteFrameImage gMapObjectPicTable_Boy5[] = { + obj_frame_tiles(gMapObjectPic_Boy5_0), + obj_frame_tiles(gMapObjectPic_Boy5_1), + obj_frame_tiles(gMapObjectPic_Boy5_2), + obj_frame_tiles(gMapObjectPic_Boy5_0), + obj_frame_tiles(gMapObjectPic_Boy5_0), + obj_frame_tiles(gMapObjectPic_Boy5_1), + obj_frame_tiles(gMapObjectPic_Boy5_1), + obj_frame_tiles(gMapObjectPic_Boy5_2), + obj_frame_tiles(gMapObjectPic_Boy5_2) +}; + +const struct SpriteFrameImage gMapObjectPicTable_ContestJudge[] = { + obj_frame_tiles(gMapObjectPic_ContestJudge_0), + obj_frame_tiles(gMapObjectPic_ContestJudge_1), + obj_frame_tiles(gMapObjectPic_ContestJudge_2), + obj_frame_tiles(gMapObjectPic_ContestJudge_3), + obj_frame_tiles(gMapObjectPic_ContestJudge_4), + obj_frame_tiles(gMapObjectPic_ContestJudge_5), + obj_frame_tiles(gMapObjectPic_ContestJudge_6), + obj_frame_tiles(gMapObjectPic_ContestJudge_7), + obj_frame_tiles(gMapObjectPic_ContestJudge_8) +}; + +const struct SpriteFrameImage gMapObjectPicTable_BrendanWatering[] = { + obj_frame_tiles(gMapObjectPic_BrendanWatering_0), + obj_frame_tiles(gMapObjectPic_BrendanWatering_1), + obj_frame_tiles(gMapObjectPic_BrendanWatering_2), + obj_frame_tiles(gMapObjectPic_BrendanWatering_3), + obj_frame_tiles(gMapObjectPic_BrendanWatering_3), + obj_frame_tiles(gMapObjectPic_BrendanWatering_4), + obj_frame_tiles(gMapObjectPic_BrendanWatering_4), + obj_frame_tiles(gMapObjectPic_BrendanWatering_5), + obj_frame_tiles(gMapObjectPic_BrendanWatering_5) +}; + +const struct SpriteFrameImage gMapObjectPicTable_MayWatering[] = { + obj_frame_tiles(gMapObjectPic_MayWatering_0), + obj_frame_tiles(gMapObjectPic_MayWatering_1), + obj_frame_tiles(gMapObjectPic_MayWatering_2), + obj_frame_tiles(gMapObjectPic_MayWatering_3), + obj_frame_tiles(gMapObjectPic_MayWatering_3), + obj_frame_tiles(gMapObjectPic_MayWatering_4), + obj_frame_tiles(gMapObjectPic_MayWatering_4), + obj_frame_tiles(gMapObjectPic_MayWatering_5), + obj_frame_tiles(gMapObjectPic_MayWatering_5) +}; + +const struct SpriteFrameImage gMapObjectPicTable_BrendanDecorating[] = { + obj_frame_tiles(gMapObjectPic_BrendanDecorating) +}; + +const struct SpriteFrameImage gMapObjectPicTable_MayDecorating[] = { + obj_frame_tiles(gMapObjectPic_MayDecorating) +}; + +const struct SpriteFrameImage gMapObjectPicTable_Archie[] = { + obj_frame_tiles(gMapObjectPic_Archie_0), + obj_frame_tiles(gMapObjectPic_Archie_1), + obj_frame_tiles(gMapObjectPic_Archie_2), + obj_frame_tiles(gMapObjectPic_Archie_3), + obj_frame_tiles(gMapObjectPic_Archie_4), + obj_frame_tiles(gMapObjectPic_Archie_5), + obj_frame_tiles(gMapObjectPic_Archie_6), + obj_frame_tiles(gMapObjectPic_Archie_7), + obj_frame_tiles(gMapObjectPic_Archie_8) +}; + +const struct SpriteFrameImage gMapObjectPicTable_Maxie[] = { + obj_frame_tiles(gMapObjectPic_Maxie_0), + obj_frame_tiles(gMapObjectPic_Maxie_1), + obj_frame_tiles(gMapObjectPic_Maxie_2), + obj_frame_tiles(gMapObjectPic_Maxie_3), + obj_frame_tiles(gMapObjectPic_Maxie_4), + obj_frame_tiles(gMapObjectPic_Maxie_5), + obj_frame_tiles(gMapObjectPic_Maxie_6), + obj_frame_tiles(gMapObjectPic_Maxie_7), + obj_frame_tiles(gMapObjectPic_Maxie_8) +}; + +const struct SpriteFrameImage gMapObjectPicTable_Kyogre[] = { + obj_frame_tiles(gMapObjectPic_Kyogre_0), + obj_frame_tiles(gMapObjectPic_Kyogre_0), + obj_frame_tiles(gMapObjectPic_Kyogre_0), + obj_frame_tiles(gMapObjectPic_Kyogre_1), + obj_frame_tiles(gMapObjectPic_Kyogre_1), + obj_frame_tiles(gMapObjectPic_Kyogre_1), + obj_frame_tiles(gMapObjectPic_Kyogre_1), + obj_frame_tiles(gMapObjectPic_Kyogre_1), + obj_frame_tiles(gMapObjectPic_Kyogre_1) +}; + +const struct SpriteFrameImage gMapObjectPicTable_Groudon[] = { + obj_frame_tiles(gMapObjectPic_Groudon_0), + obj_frame_tiles(gMapObjectPic_Groudon_0), + obj_frame_tiles(gMapObjectPic_Groudon_0), + obj_frame_tiles(gMapObjectPic_Groudon_1), + obj_frame_tiles(gMapObjectPic_Groudon_1), + obj_frame_tiles(gMapObjectPic_Groudon_1), + obj_frame_tiles(gMapObjectPic_Groudon_1), + obj_frame_tiles(gMapObjectPic_Groudon_1), + obj_frame_tiles(gMapObjectPic_Groudon_1) +}; + +const struct SpriteFrameImage gMapObjectPicTable_Fossil[] = { + obj_frame_tiles(gMapObjectPic_Fossil) +}; + +const struct SpriteFrameImage gMapObjectPicTable_Regi[] = { + obj_frame_tiles(gMapObjectPic_Regi), + obj_frame_tiles(gMapObjectPic_Regi), + obj_frame_tiles(gMapObjectPic_Regi), + obj_frame_tiles(gMapObjectPic_Regi), + obj_frame_tiles(gMapObjectPic_Regi), + obj_frame_tiles(gMapObjectPic_Regi), + obj_frame_tiles(gMapObjectPic_Regi), + obj_frame_tiles(gMapObjectPic_Regi), + obj_frame_tiles(gMapObjectPic_Regi) +}; + +const struct SpriteFrameImage gMapObjectPicTable_Skitty[] = { + obj_frame_tiles(gMapObjectPic_Skitty_0), + obj_frame_tiles(gMapObjectPic_Skitty_1), + obj_frame_tiles(gMapObjectPic_Skitty_2), + obj_frame_tiles(gMapObjectPic_Skitty_0), + obj_frame_tiles(gMapObjectPic_Skitty_0), + obj_frame_tiles(gMapObjectPic_Skitty_1), + obj_frame_tiles(gMapObjectPic_Skitty_1), + obj_frame_tiles(gMapObjectPic_Skitty_2), + obj_frame_tiles(gMapObjectPic_Skitty_2) +}; + +const struct SpriteFrameImage gMapObjectPicTable_Kecleon[] = { + obj_frame_tiles(gMapObjectPic_Kecleon_0), + obj_frame_tiles(gMapObjectPic_Kecleon_1), + obj_frame_tiles(gMapObjectPic_Kecleon_2), + obj_frame_tiles(gMapObjectPic_Kecleon_0), + obj_frame_tiles(gMapObjectPic_Kecleon_0), + obj_frame_tiles(gMapObjectPic_Kecleon_1), + obj_frame_tiles(gMapObjectPic_Kecleon_1), + obj_frame_tiles(gMapObjectPic_Kecleon_2), + obj_frame_tiles(gMapObjectPic_Kecleon_2) +}; + +const struct SpriteFrameImage gMapObjectPicTable_Rayquaza[] = { + obj_frame_tiles(gMapObjectPic_Rayquaza_0), + obj_frame_tiles(gMapObjectPic_Rayquaza_0), + obj_frame_tiles(gMapObjectPic_Rayquaza_0), + obj_frame_tiles(gMapObjectPic_Rayquaza_1), + obj_frame_tiles(gMapObjectPic_Rayquaza_1), + obj_frame_tiles(gMapObjectPic_Rayquaza_1), + obj_frame_tiles(gMapObjectPic_Rayquaza_1), + obj_frame_tiles(gMapObjectPic_Rayquaza_1), + obj_frame_tiles(gMapObjectPic_Rayquaza_1) +}; + +const struct SpriteFrameImage gMapObjectPicTable_Zigzagoon[] = { + obj_frame_tiles(gMapObjectPic_Zigzagoon_0), + obj_frame_tiles(gMapObjectPic_Zigzagoon_1), + obj_frame_tiles(gMapObjectPic_Zigzagoon_2), + obj_frame_tiles(gMapObjectPic_Zigzagoon_0), + obj_frame_tiles(gMapObjectPic_Zigzagoon_0), + obj_frame_tiles(gMapObjectPic_Zigzagoon_1), + obj_frame_tiles(gMapObjectPic_Zigzagoon_1), + obj_frame_tiles(gMapObjectPic_Zigzagoon_2), + obj_frame_tiles(gMapObjectPic_Zigzagoon_2) +}; + +const struct SpriteFrameImage gMapObjectPicTable_Pikachu[] = { + obj_frame_tiles(gMapObjectPic_Pikachu_0), + obj_frame_tiles(gMapObjectPic_Pikachu_1), + obj_frame_tiles(gMapObjectPic_Pikachu_2), + obj_frame_tiles(gMapObjectPic_Pikachu_0), + obj_frame_tiles(gMapObjectPic_Pikachu_0), + obj_frame_tiles(gMapObjectPic_Pikachu_1), + obj_frame_tiles(gMapObjectPic_Pikachu_1), + obj_frame_tiles(gMapObjectPic_Pikachu_2), + obj_frame_tiles(gMapObjectPic_Pikachu_2) +}; + +const struct SpriteFrameImage gMapObjectPicTable_Azumarill[] = { + obj_frame_tiles(gMapObjectPic_Azumarill_0), + obj_frame_tiles(gMapObjectPic_Azumarill_1), + obj_frame_tiles(gMapObjectPic_Azumarill_2), + obj_frame_tiles(gMapObjectPic_Azumarill_0), + obj_frame_tiles(gMapObjectPic_Azumarill_0), + obj_frame_tiles(gMapObjectPic_Azumarill_1), + obj_frame_tiles(gMapObjectPic_Azumarill_1), + obj_frame_tiles(gMapObjectPic_Azumarill_2), + obj_frame_tiles(gMapObjectPic_Azumarill_2) +}; + +const struct SpriteFrameImage gMapObjectPicTable_Wingull[] = { + obj_frame_tiles(gMapObjectPic_Wingull_0), + obj_frame_tiles(gMapObjectPic_Wingull_1), + obj_frame_tiles(gMapObjectPic_Wingull_2), + obj_frame_tiles(gMapObjectPic_Wingull_3), + obj_frame_tiles(gMapObjectPic_Wingull_3), + obj_frame_tiles(gMapObjectPic_Wingull_4), + obj_frame_tiles(gMapObjectPic_Wingull_4), + obj_frame_tiles(gMapObjectPic_Wingull_5), + obj_frame_tiles(gMapObjectPic_Wingull_5) +}; + +const struct SpriteFrameImage gMapObjectPicTable_TuberMSwimming[] = { + obj_frame_tiles(gMapObjectPic_TuberMSwimming_0), + obj_frame_tiles(gMapObjectPic_TuberMSwimming_1), + obj_frame_tiles(gMapObjectPic_TuberMSwimming_2), + obj_frame_tiles(gMapObjectPic_TuberMSwimming_3), + obj_frame_tiles(gMapObjectPic_TuberMSwimming_4), + obj_frame_tiles(gMapObjectPic_TuberMSwimming_5), + obj_frame_tiles(gMapObjectPic_TuberMSwimming_6), + obj_frame_tiles(gMapObjectPic_TuberMSwimming_7), + obj_frame_tiles(gMapObjectPic_TuberMSwimming_8) +}; + +const struct SpriteFrameImage gMapObjectPicTable_Azurill[] = { + obj_frame_tiles(gMapObjectPic_Azurill_0), + obj_frame_tiles(gMapObjectPic_Azurill_1), + obj_frame_tiles(gMapObjectPic_Azurill_2), + obj_frame_tiles(gMapObjectPic_Azurill_0), + obj_frame_tiles(gMapObjectPic_Azurill_0), + obj_frame_tiles(gMapObjectPic_Azurill_1), + obj_frame_tiles(gMapObjectPic_Azurill_1), + obj_frame_tiles(gMapObjectPic_Azurill_2), + obj_frame_tiles(gMapObjectPic_Azurill_2) +}; + +const struct SpriteFrameImage gMapObjectPicTable_Mom[] = { + obj_frame_tiles(gMapObjectPic_Mom_0), + obj_frame_tiles(gMapObjectPic_Mom_1), + obj_frame_tiles(gMapObjectPic_Mom_2), + obj_frame_tiles(gMapObjectPic_Mom_3), + obj_frame_tiles(gMapObjectPic_Mom_4), + obj_frame_tiles(gMapObjectPic_Mom_5), + obj_frame_tiles(gMapObjectPic_Mom_6), + obj_frame_tiles(gMapObjectPic_Mom_7), + obj_frame_tiles(gMapObjectPic_Mom_8), +}; + +#endif //POKERUBY_MAP_OBJECT_PIC_TABLES_H diff --git a/src/data/field_map_obj/map_object_subsprites.h b/src/data/field_map_obj/map_object_subsprites.h new file mode 100644 index 000000000..951d71e99 --- /dev/null +++ b/src/data/field_map_obj/map_object_subsprites.h @@ -0,0 +1,345 @@ +// + +// + +#ifndef POKERUBY_MAP_OBJECT_SUBSPRITES_H +#define POKERUBY_MAP_OBJECT_SUBSPRITES_H + +const struct Subsprite gMapObjectSubspriteTable_16x16_0[] = { + { -8, -8, 0, 1, 0, 2} +}; + +const struct Subsprite gMapObjectSubspriteTable_16x16_1[] = { + { -8, -8, 0, 1, 0, 1} +}; + +const struct Subsprite gMapObjectSubspriteTable_16x16_2[] = { + { -8, -8, 1, 0, 0, 2}, + { -8, 0, 1, 0, 2, 3} +}; + +const struct Subsprite gMapObjectSubspriteTable_16x16_3[] = { + { -8, -8, 0, 1, 0, 2}, + { -8, -8, 0, 1, 0, 3} +}; + +const struct Subsprite gMapObjectSubspriteTable_16x16_4[] = { + { -8, -8, 0, 1, 0, 1}, + { -8, -8, 0, 1, 0, 3} +}; + +const struct SubspriteTable gMapObjectSubspriteTables_16x16[] = { + {0, NULL}, + {1, gMapObjectSubspriteTable_16x16_0}, + {1, gMapObjectSubspriteTable_16x16_1}, + {2, gMapObjectSubspriteTable_16x16_2}, + {2, gMapObjectSubspriteTable_16x16_3}, + {2, gMapObjectSubspriteTable_16x16_4} +}; + +const struct Subsprite gMapObjectSubspriteTable_16x32_0[] = { + { -8, -16, 2, 2, 0, 2} +}; + +const struct Subsprite gMapObjectSubspriteTable_16x32_1[] = { + { -8, -16, 2, 2, 0, 1} +}; + +const struct Subsprite gMapObjectSubspriteTable_16x32_2[] = { + { -8, -16, 0, 1, 0, 2}, + { -8, 0, 1, 0, 4, 2}, + { -8, 8, 1, 0, 6, 3} +}; + +const struct Subsprite gMapObjectSubspriteTable_16x32_3[] = { + { -8, -16, 0, 1, 0, 2}, + { -8, 0, 0, 1, 4, 3} +}; + +const struct Subsprite gMapObjectSubspriteTable_16x32_4[] = { + { -8, -16, 0, 1, 0, 1}, + { -8, 0, 0, 1, 4, 3} +}; + +const struct SubspriteTable gMapObjectSubspriteTables_16x32[] = { + {0, NULL}, + {1, gMapObjectSubspriteTable_16x32_0}, + {1, gMapObjectSubspriteTable_16x32_1}, + {3, gMapObjectSubspriteTable_16x32_2}, + {2, gMapObjectSubspriteTable_16x32_3}, + {2, gMapObjectSubspriteTable_16x32_4} +}; + +const struct Subsprite gMapObjectSubspriteTable_32x32_0[] = { + {-16, -16, 0, 2, 0, 2} +}; + +const struct Subsprite gMapObjectSubspriteTable_32x32_1[] = { + {-16, -16, 0, 2, 0, 1} +}; + +const struct Subsprite gMapObjectSubspriteTable_32x32_2[] = { + {-16, -16, 1, 2, 0, 2}, + {-16, 0, 1, 1, 8, 2}, + {-16, 8, 1, 1, 12, 3} +}; + +const struct Subsprite gMapObjectSubspriteTable_32x32_3[] = { + {-16, -16, 1, 2, 0, 2}, + {-16, 0, 1, 2, 8, 3} +}; + +const struct Subsprite gMapObjectSubspriteTable_32x32_4[] = { + {-16, -16, 1, 2, 0, 1}, + {-16, 0, 1, 2, 8, 3} +}; + +const struct SubspriteTable gMapObjectSubspriteTables_32x32[] = { + {0, NULL}, + {1, gMapObjectSubspriteTable_32x32_0}, + {1, gMapObjectSubspriteTable_32x32_1}, + {3, gMapObjectSubspriteTable_32x32_2}, + {2, gMapObjectSubspriteTable_32x32_3}, + {2, gMapObjectSubspriteTable_32x32_4} +}; + +const struct Subsprite gMapObjectSubspriteTable_Truck_0[] = { + {-24, -24, 1, 1, 0, 2}, + { 8, -24, 1, 0, 4, 2}, + {-24, -16, 1, 1, 6, 2}, + { 8, -16, 1, 0, 10, 2}, + {-24, -8, 1, 1, 12, 2}, + { 8, -8, 1, 0, 16, 2}, + {-24, 0, 1, 1, 18, 2}, + { 8, 0, 1, 0, 22, 2}, + {-24, 8, 1, 1, 24, 2}, + { 8, 8, 1, 0, 28, 2}, + {-24, 16, 1, 1, 30, 2}, + { 8, 16, 1, 0, 34, 2} +}; + +const struct SubspriteTable gMapObjectSubspriteTables_Truck[] = { + {12, gMapObjectSubspriteTable_Truck_0}, + {12, gMapObjectSubspriteTable_Truck_0}, + {12, gMapObjectSubspriteTable_Truck_0}, + {12, gMapObjectSubspriteTable_Truck_0}, + {12, gMapObjectSubspriteTable_Truck_0}, + {12, gMapObjectSubspriteTable_Truck_0} +}; + +const struct Subsprite gMapObjectSubspriteTable_Unused_0[] = { + {-32, -16, 1, 3, 0, 2} +}; + +const struct Subsprite gMapObjectSubspriteTable_Unused_1[] = { + {-32, -16, 1, 3, 0, 1} +}; + +const struct Subsprite gMapObjectSubspriteTable_Unused_2[] = { + {-32, -16, 1, 3, 0, 2} +}; + +const struct Subsprite gMapObjectSubspriteTable_Unused_3[] = { + {-32, -16, 1, 3, 0, 2} +}; + +const struct SubspriteTable gMapObjectSubspriteTables_Unused[] = { + {0, NULL}, + {1, gMapObjectSubspriteTable_Unused_0}, + {1, gMapObjectSubspriteTable_Unused_1}, + {1, gMapObjectSubspriteTable_Unused_2}, + {1, gMapObjectSubspriteTable_Unused_3}, + {1, gMapObjectSubspriteTable_Unused_3} +}; + +const struct Subsprite gMapObjectSubspriteTable_CableCar_0[] = { + {-32, -32, 0, 3, 0, 2} +}; + +const struct Subsprite gMapObjectSubspriteTable_CableCar_1[] = { + {-32, -32, 0, 3, 0, 1} +}; + +const struct Subsprite gMapObjectSubspriteTable_CableCar_2[] = { + {-32, -32, 0, 3, 0, 2} +}; + +const struct Subsprite gMapObjectSubspriteTable_CableCar_3[] = { + {-32, -32, 0, 3, 0, 2} +}; + +const struct SubspriteTable gMapObjectSubspriteTables_CableCar[] = { + {0, NULL}, + {1, gMapObjectSubspriteTable_CableCar_0}, + {1, gMapObjectSubspriteTable_CableCar_1}, + {1, gMapObjectSubspriteTable_CableCar_2}, + {1, gMapObjectSubspriteTable_CableCar_3}, + {1, gMapObjectSubspriteTable_CableCar_3} +}; + +const struct Subsprite gMapObjectSubspriteTable_SSTidal_0[] = { + {-48, -20, 1, 1, 0, 2}, + {-16, -20, 1, 1, 4, 2}, + { 16, -20, 1, 1, 8, 2}, + {-48, -12, 1, 1, 12, 2}, + {-16, -12, 1, 1, 16, 2}, + { 16, -12, 1, 1, 20, 2}, + {-48, -4, 1, 1, 24, 2}, + {-16, -4, 1, 1, 28, 2}, + { 16, -4, 1, 1, 32, 2}, + {-48, 4, 1, 1, 36, 2}, + {-16, 4, 1, 1, 40, 2}, + { 16, 4, 1, 1, 44, 2}, + {-48, 12, 1, 1, 48, 2}, + {-16, 12, 1, 1, 52, 2}, + { 16, 12, 1, 1, 56, 2} +}; + +const struct Subsprite gMapObjectSubspriteTable_SSTidal_1[] = { + {-48, -20, 1, 1, 0, 1}, + {-16, -20, 1, 1, 4, 1}, + { 16, -20, 1, 1, 8, 1}, + {-48, -12, 1, 1, 12, 1}, + {-16, -12, 1, 1, 16, 1}, + { 16, -12, 1, 1, 20, 1}, + {-48, -4, 1, 1, 24, 1}, + {-16, -4, 1, 1, 28, 1}, + { 16, -4, 1, 1, 32, 1}, + {-48, 4, 1, 1, 36, 1}, + {-16, 4, 1, 1, 40, 1}, + { 16, 4, 1, 1, 44, 1}, + {-48, 12, 1, 1, 48, 1}, + {-16, 12, 1, 1, 52, 1}, + { 16, 12, 1, 1, 56, 1} +}; + +const struct Subsprite gMapObjectSubspriteTable_SSTidal_2[] = { + {-48, -20, 1, 1, 0, 2}, + {-16, -20, 1, 1, 4, 2}, + { 16, -20, 1, 1, 8, 2}, + {-48, -12, 1, 1, 12, 2}, + {-16, -12, 1, 1, 16, 2}, + { 16, -12, 1, 1, 20, 2}, + {-48, -4, 1, 1, 24, 2}, + {-16, -4, 1, 1, 28, 2}, + { 16, -4, 1, 1, 32, 2}, + {-48, 4, 1, 1, 36, 2}, + {-16, 4, 1, 1, 40, 2}, + { 16, 4, 1, 1, 44, 2}, + {-48, 12, 1, 1, 48, 2}, + {-16, 12, 1, 1, 52, 2}, + { 16, 12, 1, 1, 56, 2} +}; + +const struct Subsprite gMapObjectSubspriteTable_SSTidal_3[] = { + {-48, -20, 1, 1, 0, 1}, + {-16, -20, 1, 1, 4, 1}, + { 16, -20, 1, 1, 8, 1}, + {-48, -12, 1, 1, 12, 1}, + {-16, -12, 1, 1, 16, 1}, + { 16, -12, 1, 1, 20, 1}, + {-48, -4, 1, 1, 24, 2}, + {-16, -4, 1, 1, 28, 2}, + { 16, -4, 1, 1, 32, 2}, + {-48, 4, 1, 1, 36, 2}, + {-16, 4, 1, 1, 40, 2}, + { 16, 4, 1, 1, 44, 2}, + {-48, 12, 1, 1, 48, 2}, + {-16, 12, 1, 1, 52, 2}, + { 16, 12, 1, 1, 56, 2} +}; + +const struct SubspriteTable gMapObjectSubspriteTables_SSTidal[] = { + {15, gMapObjectSubspriteTable_SSTidal_0}, + {15, gMapObjectSubspriteTable_SSTidal_0}, + {15, gMapObjectSubspriteTable_SSTidal_1}, + {15, gMapObjectSubspriteTable_SSTidal_2}, + {15, gMapObjectSubspriteTable_SSTidal_3}, + {15, gMapObjectSubspriteTable_SSTidal_3} +}; + +const struct Subsprite gMapObjectSubspriteTable_SubmarineShadow_0[] = { + {-48, -20, 1, 1, 0, 2}, + {-16, -20, 1, 1, 4, 2}, + { 16, -20, 1, 0, 8, 2}, + { 32, -20, 0, 0, 10, 2}, + {-48, -12, 1, 1, 11, 2}, + {-16, -12, 1, 1, 15, 2}, + { 16, -12, 1, 0, 19, 2}, + { 32, -12, 0, 0, 21, 2}, + {-48, -4, 1, 1, 22, 2}, + {-16, -4, 1, 1, 26, 2}, + { 16, -4, 1, 0, 30, 2}, + { 32, -4, 0, 0, 32, 2}, + {-48, 4, 1, 1, 33, 2}, + {-16, 4, 1, 1, 37, 2}, + { 16, 4, 1, 0, 41, 2}, + { 32, 4, 0, 0, 43, 2} +}; + +const struct Subsprite gMapObjectSubspriteTable_SubmarineShadow_1[] = { + {-48, -20, 1, 1, 0, 1}, + {-16, -20, 1, 1, 4, 1}, + { 16, -20, 1, 0, 8, 1}, + { 32, -20, 0, 0, 10, 1}, + {-48, -12, 1, 1, 11, 1}, + {-16, -12, 1, 1, 15, 1}, + { 16, -12, 1, 0, 19, 1}, + { 32, -12, 0, 0, 21, 1}, + {-48, -4, 1, 1, 22, 1}, + {-16, -4, 1, 1, 26, 1}, + { 16, -4, 1, 0, 30, 1}, + { 32, -4, 0, 0, 32, 1}, + {-48, 4, 1, 1, 33, 1}, + {-16, 4, 1, 1, 37, 1}, + { 16, 4, 1, 0, 41, 1}, + { 32, 4, 0, 0, 43, 1} +}; + +const struct Subsprite gMapObjectSubspriteTable_SubmarineShadow_2[] = { + {-48, -20, 1, 1, 0, 2}, + {-16, -20, 1, 1, 4, 2}, + { 16, -20, 1, 0, 8, 2}, + { 32, -20, 0, 0, 10, 2}, + {-48, -12, 1, 1, 11, 2}, + {-16, -12, 1, 1, 15, 2}, + { 16, -12, 1, 0, 19, 2}, + { 32, -12, 0, 0, 21, 2}, + {-48, -4, 1, 1, 22, 2}, + {-16, -4, 1, 1, 26, 2}, + { 16, -4, 1, 0, 30, 2}, + { 32, -4, 0, 0, 32, 2}, + {-48, 4, 1, 1, 33, 2}, + {-16, 4, 1, 1, 37, 2}, + { 16, 4, 1, 0, 41, 2}, + { 32, 4, 0, 0, 43, 2} +}; + +const struct Subsprite gMapObjectSubspriteTable_SubmarineShadow_3[] = { + {-48, -20, 1, 1, 0, 1}, + {-16, -20, 1, 1, 4, 1}, + { 16, -20, 1, 0, 8, 1}, + { 32, -20, 0, 0, 10, 1}, + {-48, -12, 1, 1, 11, 1}, + {-16, -12, 1, 1, 15, 1}, + { 16, -12, 1, 0, 19, 1}, + { 32, -12, 0, 0, 21, 1}, + {-48, -4, 1, 1, 22, 2}, + {-16, -4, 1, 1, 26, 2}, + { 16, -4, 1, 0, 30, 2}, + { 32, -4, 0, 0, 32, 2}, + {-48, 4, 1, 1, 33, 2}, + {-16, 4, 1, 1, 37, 2}, + { 16, 4, 1, 0, 41, 2}, + { 32, 4, 0, 0, 43, 2} +}; + +const struct SubspriteTable gMapObjectSubspriteTables_SubmarineShadow[] = { + {16, gMapObjectSubspriteTable_SubmarineShadow_0}, + {16, gMapObjectSubspriteTable_SubmarineShadow_0}, + {16, gMapObjectSubspriteTable_SubmarineShadow_1}, + {16, gMapObjectSubspriteTable_SubmarineShadow_2}, + {16, gMapObjectSubspriteTable_SubmarineShadow_3}, + {16, gMapObjectSubspriteTable_SubmarineShadow_3} +}; +#endif //POKERUBY_MAP_OBJECT_SUBSPRITES_H diff --git a/src/data/pokemon/base_stats.h b/src/data/pokemon/base_stats.h new file mode 100644 index 000000000..37f59e1c6 --- /dev/null +++ b/src/data/pokemon/base_stats.h @@ -0,0 +1,7823 @@ +// + +// + +#ifndef POKERUBY_BASE_STATS_H +#define POKERUBY_BASE_STATS_H + +const struct BaseStats gBaseStats[] = { + { // ?????????? + }, { + // Bulbasaur + 45, 49, 49, 45, 65, 65, + TYPE_GRASS, + TYPE_POISON, + 45, // catch rate + 64, // base exp. yield + 0, 0, 0, 0, 1, 0, + ITEM_NONE, + ITEM_NONE, + 31, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_SLOW, + EGG_GROUP_MONSTER, + EGG_GROUP_GRASS, + ABILITY_OVERGROW, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_GREEN + }, { // Ivysaur + 60, 62, 63, 60, 80, 80, + TYPE_GRASS, + TYPE_POISON, + 45, // catch rate + 141, // base exp. yield + 0, 0, 0, 0, 1, 1, + ITEM_NONE, + ITEM_NONE, + 31, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_SLOW, + EGG_GROUP_MONSTER, + EGG_GROUP_GRASS, + ABILITY_OVERGROW, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_GREEN + }, { // Venusaur + 80, 82, 83, 80, 100, 100, + TYPE_GRASS, + TYPE_POISON, + 45, // catch rate + 208, // base exp. yield + 0, 0, 0, 0, 2, 1, + ITEM_NONE, + ITEM_NONE, + 31, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_SLOW, + EGG_GROUP_MONSTER, + EGG_GROUP_GRASS, + ABILITY_OVERGROW, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_GREEN + }, { // Charmander + 39, 52, 43, 65, 60, 50, + TYPE_FIRE, + TYPE_FIRE, + 45, // catch rate + 65, // base exp. yield + 0, 0, 0, 1, 0, 0, + ITEM_NONE, + ITEM_NONE, + 31, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_SLOW, + EGG_GROUP_MONSTER, + EGG_GROUP_DRAGON, + ABILITY_BLAZE, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_RED + }, { // Charmeleon + 58, 64, 58, 80, 80, 65, + TYPE_FIRE, + TYPE_FIRE, + 45, // catch rate + 142, // base exp. yield + 0, 0, 0, 1, 1, 0, + ITEM_NONE, + ITEM_NONE, + 31, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_SLOW, + EGG_GROUP_MONSTER, + EGG_GROUP_DRAGON, + ABILITY_BLAZE, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_RED + }, { // Charizard + 78, 84, 78, 100, 109, 85, + TYPE_FIRE, + TYPE_FLYING, + 45, // catch rate + 209, // base exp. yield + 0, 0, 0, 0, 3, 0, + ITEM_NONE, + ITEM_NONE, + 31, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_SLOW, + EGG_GROUP_MONSTER, + EGG_GROUP_DRAGON, + ABILITY_BLAZE, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_RED + }, { // Squirtle + 44, 48, 65, 43, 50, 64, + TYPE_WATER, + TYPE_WATER, + 45, // catch rate + 66, // base exp. yield + 0, 0, 1, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 31, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_SLOW, + EGG_GROUP_MONSTER, + EGG_GROUP_WATER_1, + ABILITY_TORRENT, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BLUE + }, { // Wartortle + 59, 63, 80, 58, 65, 80, + TYPE_WATER, + TYPE_WATER, + 45, // catch rate + 143, // base exp. yield + 0, 0, 1, 0, 0, 1, + ITEM_NONE, + ITEM_NONE, + 31, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_SLOW, + EGG_GROUP_MONSTER, + EGG_GROUP_WATER_1, + ABILITY_TORRENT, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BLUE + }, { // Blastoise + 79, 83, 100, 78, 85, 105, + TYPE_WATER, + TYPE_WATER, + 45, // catch rate + 210, // base exp. yield + 0, 0, 0, 0, 0, 3, + ITEM_NONE, + ITEM_NONE, + 31, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_SLOW, + EGG_GROUP_MONSTER, + EGG_GROUP_WATER_1, + ABILITY_TORRENT, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BLUE + }, { // Caterpie + 45, 30, 35, 45, 20, 20, + TYPE_BUG, + TYPE_BUG, + 255, // catch rate + 53, // base exp. yield + 1, 0, 0, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 15, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_BUG, + EGG_GROUP_BUG, + ABILITY_SHIELD_DUST, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_GREEN + }, { // Metapod + 50, 20, 55, 30, 25, 25, + TYPE_BUG, + TYPE_BUG, + 120, // catch rate + 72, // base exp. yield + 0, 0, 2, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 15, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_BUG, + EGG_GROUP_BUG, + ABILITY_SHED_SKIN, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_GREEN + }, { // Butterfree + 60, 45, 50, 70, 80, 80, + TYPE_BUG, + TYPE_FLYING, + 45, // catch rate + 160, // base exp. yield + 0, 0, 0, 0, 2, 1, + ITEM_NONE, + ITEM_SILVER_POWDER, + 127, // gender + 15, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_BUG, + EGG_GROUP_BUG, + ABILITY_COMPOUND_EYES, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_WHITE + }, { // Weedle + 40, 35, 30, 50, 20, 20, + TYPE_BUG, + TYPE_POISON, + 255, // catch rate + 52, // base exp. yield + 0, 0, 0, 1, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 15, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_BUG, + EGG_GROUP_BUG, + ABILITY_SHIELD_DUST, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BROWN + }, { // Kakuna + 45, 25, 50, 35, 25, 25, + TYPE_BUG, + TYPE_POISON, + 120, // catch rate + 71, // base exp. yield + 0, 0, 2, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 15, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_BUG, + EGG_GROUP_BUG, + ABILITY_SHED_SKIN, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_YELLOW + }, { // Beedrill + 65, 80, 40, 75, 45, 80, + TYPE_BUG, + TYPE_POISON, + 45, // catch rate + 159, // base exp. yield + 0, 2, 0, 0, 0, 1, + ITEM_NONE, + ITEM_POISON_BARB, + 127, // gender + 15, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_BUG, + EGG_GROUP_BUG, + ABILITY_SWARM, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_YELLOW + }, { // Pidgey + 40, 45, 40, 56, 35, 35, + TYPE_NORMAL, + TYPE_FLYING, + 255, // catch rate + 55, // base exp. yield + 0, 0, 0, 1, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 15, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_SLOW, + EGG_GROUP_FLYING, + EGG_GROUP_FLYING, + ABILITY_KEEN_EYE, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BROWN + }, { // Pidgeotto + 63, 60, 55, 71, 50, 50, + TYPE_NORMAL, + TYPE_FLYING, + 120, // catch rate + 113, // base exp. yield + 0, 0, 0, 2, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 15, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_SLOW, + EGG_GROUP_FLYING, + EGG_GROUP_FLYING, + ABILITY_KEEN_EYE, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BROWN + }, { // Pidgeot + 83, 80, 75, 91, 70, 70, + TYPE_NORMAL, + TYPE_FLYING, + 45, // catch rate + 172, // base exp. yield + 0, 0, 0, 3, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 15, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_SLOW, + EGG_GROUP_FLYING, + EGG_GROUP_FLYING, + ABILITY_KEEN_EYE, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BROWN + }, { // Rattata + 30, 56, 35, 72, 25, 35, + TYPE_NORMAL, + TYPE_NORMAL, + 255, // catch rate + 57, // base exp. yield + 0, 0, 0, 1, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 15, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_FIELD, + EGG_GROUP_FIELD, + ABILITY_RUN_AWAY, + ABILITY_GUTS, + 0, // Safari Zone flee rate + BODY_COLOR_PURPLE + }, { // Raticate + 55, 81, 60, 97, 50, 70, + TYPE_NORMAL, + TYPE_NORMAL, + 127, // catch rate + 116, // base exp. yield + 0, 0, 0, 2, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 15, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_FIELD, + EGG_GROUP_FIELD, + ABILITY_RUN_AWAY, + ABILITY_GUTS, + 0, // Safari Zone flee rate + BODY_COLOR_BROWN + }, { // Spearow + 40, 60, 30, 70, 31, 31, + TYPE_NORMAL, + TYPE_FLYING, + 255, // catch rate + 58, // base exp. yield + 0, 0, 0, 1, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 15, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_FLYING, + EGG_GROUP_FLYING, + ABILITY_KEEN_EYE, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BROWN + }, { // Fearow + 65, 90, 65, 100, 61, 61, + TYPE_NORMAL, + TYPE_FLYING, + 90, // catch rate + 162, // base exp. yield + 0, 0, 0, 2, 0, 0, + ITEM_NONE, + ITEM_SHARP_BEAK, + 127, // gender + 15, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_FLYING, + EGG_GROUP_FLYING, + ABILITY_KEEN_EYE, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BROWN + }, { // Ekans + 35, 60, 44, 55, 40, 54, + TYPE_POISON, + TYPE_POISON, + 255, // catch rate + 62, // base exp. yield + 0, 1, 0, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_FIELD, + EGG_GROUP_DRAGON, + ABILITY_INTIMIDATE, + ABILITY_SHED_SKIN, + 0, // Safari Zone flee rate + BODY_COLOR_PURPLE + }, { // Arbok + 60, 85, 69, 80, 65, 79, + TYPE_POISON, + TYPE_POISON, + 90, // catch rate + 147, // base exp. yield + 0, 2, 0, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_FIELD, + EGG_GROUP_DRAGON, + ABILITY_INTIMIDATE, + ABILITY_SHED_SKIN, + 0, // Safari Zone flee rate + BODY_COLOR_PURPLE + }, { // Pikachu + 35, 55, 30, 90, 50, 40, + TYPE_ELECTRIC, + TYPE_ELECTRIC, + 190, // catch rate + 82, // base exp. yield + 0, 0, 0, 2, 0, 0, + ITEM_ORAN_BERRY, + ITEM_LIGHT_BALL, + 127, // gender + 10, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_FIELD, + EGG_GROUP_FAIRY, + ABILITY_STATIC, + ABILITY_NONE, + 6, // Safari Zone flee rate + BODY_COLOR_YELLOW + }, { // Raichu + 60, 90, 55, 100, 90, 80, + TYPE_ELECTRIC, + TYPE_ELECTRIC, + 75, // catch rate + 122, // base exp. yield + 0, 0, 0, 3, 0, 0, + ITEM_NONE, + ITEM_ORAN_BERRY, + 127, // gender + 10, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_FIELD, + EGG_GROUP_FAIRY, + ABILITY_STATIC, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_YELLOW + }, { // Sandshrew + 50, 75, 85, 40, 20, 30, + TYPE_GROUND, + TYPE_GROUND, + 255, // catch rate + 93, // base exp. yield + 0, 0, 1, 0, 0, 0, + ITEM_NONE, + ITEM_QUICK_CLAW, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_FIELD, + EGG_GROUP_FIELD, + ABILITY_SAND_VEIL, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_YELLOW + }, { // Sandslash + 75, 100, 110, 65, 45, 55, + TYPE_GROUND, + TYPE_GROUND, + 90, // catch rate + 163, // base exp. yield + 0, 0, 2, 0, 0, 0, + ITEM_NONE, + ITEM_QUICK_CLAW, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_FIELD, + EGG_GROUP_FIELD, + ABILITY_SAND_VEIL, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_YELLOW + }, { // Nidoran♀ + 55, 47, 52, 41, 40, 40, + TYPE_POISON, + TYPE_POISON, + 235, // catch rate + 59, // base exp. yield + 1, 0, 0, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 254, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_SLOW, + EGG_GROUP_MONSTER, + EGG_GROUP_FIELD, + ABILITY_POISON_POINT, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BLUE + }, { // Nidorina + 70, 62, 67, 56, 55, 55, + TYPE_POISON, + TYPE_POISON, + 120, // catch rate + 117, // base exp. yield + 2, 0, 0, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 254, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_SLOW, + EGG_GROUP_UNDISCOVERED, + EGG_GROUP_UNDISCOVERED, + ABILITY_POISON_POINT, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BLUE + }, { // Nidoqueen + 90, 82, 87, 76, 75, 85, + TYPE_POISON, + TYPE_GROUND, + 45, // catch rate + 194, // base exp. yield + 3, 0, 0, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 254, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_SLOW, + EGG_GROUP_UNDISCOVERED, + EGG_GROUP_UNDISCOVERED, + ABILITY_POISON_POINT, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BLUE + }, { // Nidoran♂ + 46, 57, 40, 50, 40, 40, + TYPE_POISON, + TYPE_POISON, + 235, // catch rate + 60, // base exp. yield + 0, 1, 0, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 0, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_SLOW, + EGG_GROUP_MONSTER, + EGG_GROUP_FIELD, + ABILITY_POISON_POINT, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_PURPLE + }, { // Nidorino + 61, 72, 57, 65, 55, 55, + TYPE_POISON, + TYPE_POISON, + 120, // catch rate + 118, // base exp. yield + 0, 2, 0, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 0, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_SLOW, + EGG_GROUP_MONSTER, + EGG_GROUP_FIELD, + ABILITY_POISON_POINT, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_PURPLE + }, { // Nidoking + 81, 92, 77, 85, 85, 75, + TYPE_POISON, + TYPE_GROUND, + 45, // catch rate + 195, // base exp. yield + 0, 3, 0, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 0, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_SLOW, + EGG_GROUP_MONSTER, + EGG_GROUP_FIELD, + ABILITY_POISON_POINT, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_PURPLE + }, { // Clefairy + 70, 45, 48, 35, 60, 65, + TYPE_NORMAL, + TYPE_NORMAL, + 150, // catch rate + 68, // base exp. yield + 2, 0, 0, 0, 0, 0, + ITEM_LEPPA_BERRY, + ITEM_MOON_STONE, + 191, // gender + 10, // egg cycles + 140, // base friendship + GROWTH_FAST, + EGG_GROUP_FAIRY, + EGG_GROUP_FAIRY, + ABILITY_CUTE_CHARM, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_PINK + }, { // Clefable + 95, 70, 73, 60, 85, 90, + TYPE_NORMAL, + TYPE_NORMAL, + 25, // catch rate + 129, // base exp. yield + 3, 0, 0, 0, 0, 0, + ITEM_LEPPA_BERRY, + ITEM_MOON_STONE, + 191, // gender + 10, // egg cycles + 140, // base friendship + GROWTH_FAST, + EGG_GROUP_FAIRY, + EGG_GROUP_FAIRY, + ABILITY_CUTE_CHARM, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_PINK + }, { // Vulpix + 38, 41, 40, 65, 50, 65, + TYPE_FIRE, + TYPE_FIRE, + 190, // catch rate + 63, // base exp. yield + 0, 0, 0, 1, 0, 0, + ITEM_RAWST_BERRY, + ITEM_RAWST_BERRY, + 191, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_FIELD, + EGG_GROUP_FIELD, + ABILITY_FLASH_FIRE, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BROWN + }, { // Ninetales + 73, 76, 75, 100, 81, 100, + TYPE_FIRE, + TYPE_FIRE, + 75, // catch rate + 178, // base exp. yield + 0, 0, 0, 1, 0, 1, + ITEM_RAWST_BERRY, + ITEM_RAWST_BERRY, + 191, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_FIELD, + EGG_GROUP_FIELD, + ABILITY_FLASH_FIRE, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_YELLOW + }, { // Jigglypuff + 115, 45, 20, 20, 45, 25, + TYPE_NORMAL, + TYPE_NORMAL, + 170, // catch rate + 76, // base exp. yield + 2, 0, 0, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 191, // gender + 10, // egg cycles + 70, // base friendship + GROWTH_FAST, + EGG_GROUP_FAIRY, + EGG_GROUP_FAIRY, + ABILITY_CUTE_CHARM, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_PINK + }, { // Wigglytuff + 140, 70, 45, 45, 75, 50, + TYPE_NORMAL, + TYPE_NORMAL, + 50, // catch rate + 109, // base exp. yield + 3, 0, 0, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 191, // gender + 10, // egg cycles + 70, // base friendship + GROWTH_FAST, + EGG_GROUP_FAIRY, + EGG_GROUP_FAIRY, + ABILITY_CUTE_CHARM, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_PINK + }, { // Zubat + 40, 45, 35, 55, 30, 40, + TYPE_POISON, + TYPE_FLYING, + 255, // catch rate + 54, // base exp. yield + 0, 0, 0, 1, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 15, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_FLYING, + EGG_GROUP_FLYING, + ABILITY_INNER_FOCUS, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_PURPLE + }, { // Golbat + 75, 80, 70, 90, 65, 75, + TYPE_POISON, + TYPE_FLYING, + 90, // catch rate + 171, // base exp. yield + 0, 0, 0, 2, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 15, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_FLYING, + EGG_GROUP_FLYING, + ABILITY_INNER_FOCUS, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_PURPLE + }, { // Oddish + 45, 50, 55, 30, 75, 65, + TYPE_GRASS, + TYPE_POISON, + 255, // catch rate + 78, // base exp. yield + 0, 0, 0, 0, 1, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_SLOW, + EGG_GROUP_GRASS, + EGG_GROUP_GRASS, + ABILITY_CHLOROPHYLL, + ABILITY_NONE, + 4, // Safari Zone flee rate + BODY_COLOR_BLUE + }, { // Gloom + 60, 65, 70, 40, 85, 75, + TYPE_GRASS, + TYPE_POISON, + 120, // catch rate + 132, // base exp. yield + 0, 0, 0, 0, 2, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_SLOW, + EGG_GROUP_GRASS, + EGG_GROUP_GRASS, + ABILITY_CHLOROPHYLL, + ABILITY_NONE, + 6, // Safari Zone flee rate + BODY_COLOR_BLUE + }, { // Vileplume + 75, 80, 85, 50, 100, 90, + TYPE_GRASS, + TYPE_POISON, + 45, // catch rate + 184, // base exp. yield + 0, 0, 0, 0, 3, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_SLOW, + EGG_GROUP_GRASS, + EGG_GROUP_GRASS, + ABILITY_CHLOROPHYLL, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_RED + }, { // Paras + 35, 70, 55, 25, 45, 55, + TYPE_BUG, + TYPE_GRASS, + 190, // catch rate + 70, // base exp. yield + 0, 1, 0, 0, 0, 0, + ITEM_TINY_MUSHROOM, + ITEM_BIG_MUSHROOM, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_BUG, + EGG_GROUP_GRASS, + ABILITY_EFFECT_SPORE, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_RED + }, { // Parasect + 60, 95, 80, 30, 60, 80, + TYPE_BUG, + TYPE_GRASS, + 75, // catch rate + 128, // base exp. yield + 0, 2, 1, 0, 0, 0, + ITEM_TINY_MUSHROOM, + ITEM_BIG_MUSHROOM, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_BUG, + EGG_GROUP_GRASS, + ABILITY_EFFECT_SPORE, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_RED + }, { // Venonat + 60, 55, 50, 45, 40, 55, + TYPE_BUG, + TYPE_POISON, + 190, // catch rate + 75, // base exp. yield + 0, 0, 0, 0, 0, 1, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_BUG, + EGG_GROUP_BUG, + ABILITY_COMPOUND_EYES, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_PURPLE + }, { // Venomoth + 70, 65, 60, 90, 90, 75, + TYPE_BUG, + TYPE_POISON, + 75, // catch rate + 138, // base exp. yield + 0, 0, 0, 1, 1, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_BUG, + EGG_GROUP_BUG, + ABILITY_SHIELD_DUST, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_PURPLE + }, { // Diglett + 10, 55, 25, 95, 35, 45, + TYPE_GROUND, + TYPE_GROUND, + 255, // catch rate + 81, // base exp. yield + 0, 0, 0, 1, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_FIELD, + EGG_GROUP_FIELD, + ABILITY_SAND_VEIL, + ABILITY_ARENA_TRAP, + 0, // Safari Zone flee rate + BODY_COLOR_BROWN + }, { // Dugtrio + 35, 80, 50, 120, 50, 70, + TYPE_GROUND, + TYPE_GROUND, + 50, // catch rate + 153, // base exp. yield + 0, 0, 0, 2, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_FIELD, + EGG_GROUP_FIELD, + ABILITY_SAND_VEIL, + ABILITY_ARENA_TRAP, + 0, // Safari Zone flee rate + BODY_COLOR_BROWN + }, { // Meowth + 40, 45, 35, 90, 40, 40, + TYPE_NORMAL, + TYPE_NORMAL, + 255, // catch rate + 69, // base exp. yield + 0, 0, 0, 1, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_FIELD, + EGG_GROUP_FIELD, + ABILITY_PICKUP, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_YELLOW + }, { // Persian + 65, 70, 60, 115, 65, 65, + TYPE_NORMAL, + TYPE_NORMAL, + 90, // catch rate + 148, // base exp. yield + 0, 0, 0, 2, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_FIELD, + EGG_GROUP_FIELD, + ABILITY_LIMBER, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_YELLOW + }, { // Psyduck + 50, 52, 48, 55, 65, 50, + TYPE_WATER, + TYPE_WATER, + 190, // catch rate + 80, // base exp. yield + 0, 0, 0, 0, 1, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_WATER_1, + EGG_GROUP_FIELD, + ABILITY_DAMP, + ABILITY_CLOUD_NINE, + 6, // Safari Zone flee rate + BODY_COLOR_YELLOW + }, { // Golduck + 80, 82, 78, 85, 95, 80, + TYPE_WATER, + TYPE_WATER, + 75, // catch rate + 174, // base exp. yield + 0, 0, 0, 0, 2, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_WATER_1, + EGG_GROUP_FIELD, + ABILITY_DAMP, + ABILITY_CLOUD_NINE, + 8, // Safari Zone flee rate + BODY_COLOR_BLUE + }, { // Mankey + 40, 80, 35, 70, 35, 45, + TYPE_FIGHTING, + TYPE_FIGHTING, + 190, // catch rate + 74, // base exp. yield + 0, 1, 0, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_FIELD, + EGG_GROUP_FIELD, + ABILITY_VITAL_SPIRIT, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BROWN + }, { // Primeape + 65, 105, 60, 95, 60, 70, + TYPE_FIGHTING, + TYPE_FIGHTING, + 75, // catch rate + 149, // base exp. yield + 0, 2, 0, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_FIELD, + EGG_GROUP_FIELD, + ABILITY_VITAL_SPIRIT, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BROWN + }, { // Growlithe + 55, 70, 45, 60, 70, 50, + TYPE_FIRE, + TYPE_FIRE, + 190, // catch rate + 91, // base exp. yield + 0, 1, 0, 0, 0, 0, + ITEM_RAWST_BERRY, + ITEM_RAWST_BERRY, + 63, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_SLOW, + EGG_GROUP_FIELD, + EGG_GROUP_FIELD, + ABILITY_INTIMIDATE, + ABILITY_FLASH_FIRE, + 0, // Safari Zone flee rate + BODY_COLOR_BROWN + }, { // Arcanine + 90, 110, 80, 95, 100, 80, + TYPE_FIRE, + TYPE_FIRE, + 75, // catch rate + 213, // base exp. yield + 0, 2, 0, 0, 0, 0, + ITEM_RAWST_BERRY, + ITEM_RAWST_BERRY, + 63, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_SLOW, + EGG_GROUP_FIELD, + EGG_GROUP_FIELD, + ABILITY_INTIMIDATE, + ABILITY_FLASH_FIRE, + 0, // Safari Zone flee rate + BODY_COLOR_BROWN + }, { // Poliwag + 40, 50, 40, 90, 40, 40, + TYPE_WATER, + TYPE_WATER, + 255, // catch rate + 77, // base exp. yield + 0, 0, 0, 1, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_SLOW, + EGG_GROUP_WATER_1, + EGG_GROUP_WATER_1, + ABILITY_WATER_ABSORB, + ABILITY_DAMP, + 0, // Safari Zone flee rate + BODY_COLOR_BLUE, TRUE + }, { // Poliwhirl + 65, 65, 65, 90, 50, 50, + TYPE_WATER, + TYPE_WATER, + 120, // catch rate + 131, // base exp. yield + 0, 0, 0, 2, 0, 0, + ITEM_NONE, + ITEM_KINGS_ROCK, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_SLOW, + EGG_GROUP_WATER_1, + EGG_GROUP_WATER_1, + ABILITY_WATER_ABSORB, + ABILITY_DAMP, + 0, // Safari Zone flee rate + BODY_COLOR_BLUE, TRUE + }, { // Poliwrath + 90, 85, 95, 70, 70, 90, + TYPE_WATER, + TYPE_FIGHTING, + 45, // catch rate + 185, // base exp. yield + 0, 0, 3, 0, 0, 0, + ITEM_NONE, + ITEM_KINGS_ROCK, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_SLOW, + EGG_GROUP_WATER_1, + EGG_GROUP_WATER_1, + ABILITY_WATER_ABSORB, + ABILITY_DAMP, + 0, // Safari Zone flee rate + BODY_COLOR_BLUE, TRUE + }, { // Abra + 25, 20, 15, 90, 105, 55, + TYPE_PSYCHIC, + TYPE_PSYCHIC, + 200, // catch rate + 73, // base exp. yield + 0, 0, 0, 0, 1, 0, + ITEM_NONE, + ITEM_TWISTED_SPOON, + 63, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_SLOW, + EGG_GROUP_HUMAN_LIKE, + EGG_GROUP_HUMAN_LIKE, + ABILITY_SYNCHRONIZE, + ABILITY_INNER_FOCUS, + 0, // Safari Zone flee rate + BODY_COLOR_BROWN + }, { // Kadabra + 40, 35, 30, 105, 120, 70, + TYPE_PSYCHIC, + TYPE_PSYCHIC, + 100, // catch rate + 145, // base exp. yield + 0, 0, 0, 0, 2, 0, + ITEM_NONE, + ITEM_TWISTED_SPOON, + 63, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_SLOW, + EGG_GROUP_HUMAN_LIKE, + EGG_GROUP_HUMAN_LIKE, + ABILITY_SYNCHRONIZE, + ABILITY_INNER_FOCUS, + 0, // Safari Zone flee rate + BODY_COLOR_BROWN + }, { // Alakazam + 55, 50, 45, 120, 135, 85, + TYPE_PSYCHIC, + TYPE_PSYCHIC, + 50, // catch rate + 186, // base exp. yield + 0, 0, 0, 0, 3, 0, + ITEM_NONE, + ITEM_TWISTED_SPOON, + 63, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_SLOW, + EGG_GROUP_HUMAN_LIKE, + EGG_GROUP_HUMAN_LIKE, + ABILITY_SYNCHRONIZE, + ABILITY_INNER_FOCUS, + 0, // Safari Zone flee rate + BODY_COLOR_BROWN + }, { // Machop + 70, 80, 50, 35, 35, 35, + TYPE_FIGHTING, + TYPE_FIGHTING, + 180, // catch rate + 88, // base exp. yield + 0, 1, 0, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 63, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_SLOW, + EGG_GROUP_HUMAN_LIKE, + EGG_GROUP_HUMAN_LIKE, + ABILITY_GUTS, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_GRAY + }, { // Machoke + 80, 100, 70, 45, 50, 60, + TYPE_FIGHTING, + TYPE_FIGHTING, + 90, // catch rate + 146, // base exp. yield + 0, 2, 0, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 63, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_SLOW, + EGG_GROUP_HUMAN_LIKE, + EGG_GROUP_HUMAN_LIKE, + ABILITY_GUTS, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_GRAY + }, { // Machamp + 90, 130, 80, 55, 65, 85, + TYPE_FIGHTING, + TYPE_FIGHTING, + 45, // catch rate + 193, // base exp. yield + 0, 3, 0, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 63, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_SLOW, + EGG_GROUP_HUMAN_LIKE, + EGG_GROUP_HUMAN_LIKE, + ABILITY_GUTS, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_GRAY + }, { // Bellsprout + 50, 75, 35, 40, 70, 30, + TYPE_GRASS, + TYPE_POISON, + 255, // catch rate + 84, // base exp. yield + 0, 1, 0, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_SLOW, + EGG_GROUP_GRASS, + EGG_GROUP_GRASS, + ABILITY_CHLOROPHYLL, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_GREEN + }, { // Weepinbell + 65, 90, 50, 55, 85, 45, + TYPE_GRASS, + TYPE_POISON, + 120, // catch rate + 151, // base exp. yield + 0, 2, 0, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_SLOW, + EGG_GROUP_GRASS, + EGG_GROUP_GRASS, + ABILITY_CHLOROPHYLL, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_GREEN + }, { // Victreebel + 80, 105, 65, 70, 100, 60, + TYPE_GRASS, + TYPE_POISON, + 45, // catch rate + 191, // base exp. yield + 0, 3, 0, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_SLOW, + EGG_GROUP_GRASS, + EGG_GROUP_GRASS, + ABILITY_CHLOROPHYLL, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_GREEN + }, { // Tentacool + 40, 40, 35, 70, 50, 100, + TYPE_WATER, + TYPE_POISON, + 190, // catch rate + 105, // base exp. yield + 0, 0, 0, 0, 0, 1, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_SLOW, + EGG_GROUP_WATER_3, + EGG_GROUP_WATER_3, + ABILITY_CLEAR_BODY, + ABILITY_LIQUID_OOZE, + 0, // Safari Zone flee rate + BODY_COLOR_BLUE + }, { // Tentacruel + 80, 70, 65, 100, 80, 120, + TYPE_WATER, + TYPE_POISON, + 60, // catch rate + 205, // base exp. yield + 0, 0, 0, 0, 0, 2, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_SLOW, + EGG_GROUP_WATER_3, + EGG_GROUP_WATER_3, + ABILITY_CLEAR_BODY, + ABILITY_LIQUID_OOZE, + 0, // Safari Zone flee rate + BODY_COLOR_BLUE + }, { // Geodude + 40, 80, 100, 20, 30, 30, + TYPE_ROCK, + TYPE_GROUND, + 255, // catch rate + 86, // base exp. yield + 0, 0, 1, 0, 0, 0, + ITEM_NONE, + ITEM_EVERSTONE, + 127, // gender + 15, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_SLOW, + EGG_GROUP_MINERAL, + EGG_GROUP_MINERAL, + ABILITY_ROCK_HEAD, + ABILITY_STURDY, + 4, // Safari Zone flee rate + BODY_COLOR_BROWN + }, { // Graveler + 55, 95, 115, 35, 45, 45, + TYPE_ROCK, + TYPE_GROUND, + 120, // catch rate + 134, // base exp. yield + 0, 0, 2, 0, 0, 0, + ITEM_NONE, + ITEM_EVERSTONE, + 127, // gender + 15, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_SLOW, + EGG_GROUP_MINERAL, + EGG_GROUP_MINERAL, + ABILITY_ROCK_HEAD, + ABILITY_STURDY, + 0, // Safari Zone flee rate + BODY_COLOR_BROWN + }, { // Golem + 80, 110, 130, 45, 55, 65, + TYPE_ROCK, + TYPE_GROUND, + 45, // catch rate + 177, // base exp. yield + 0, 0, 3, 0, 0, 0, + ITEM_NONE, + ITEM_EVERSTONE, + 127, // gender + 15, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_SLOW, + EGG_GROUP_MINERAL, + EGG_GROUP_MINERAL, + ABILITY_ROCK_HEAD, + ABILITY_STURDY, + 0, // Safari Zone flee rate + BODY_COLOR_BROWN + }, { // Ponyta + 50, 85, 55, 90, 65, 65, + TYPE_FIRE, + TYPE_FIRE, + 190, // catch rate + 152, // base exp. yield + 0, 0, 0, 1, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_FIELD, + EGG_GROUP_FIELD, + ABILITY_RUN_AWAY, + ABILITY_FLASH_FIRE, + 0, // Safari Zone flee rate + BODY_COLOR_YELLOW + }, { // Rapidash + 65, 100, 70, 105, 80, 80, + TYPE_FIRE, + TYPE_FIRE, + 60, // catch rate + 192, // base exp. yield + 0, 0, 0, 2, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_FIELD, + EGG_GROUP_FIELD, + ABILITY_RUN_AWAY, + ABILITY_FLASH_FIRE, + 0, // Safari Zone flee rate + BODY_COLOR_YELLOW + }, { // Slowpoke + 90, 65, 65, 15, 40, 40, + TYPE_WATER, + TYPE_PSYCHIC, + 190, // catch rate + 99, // base exp. yield + 1, 0, 0, 0, 0, 0, + ITEM_NONE, + ITEM_KINGS_ROCK, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_MONSTER, + EGG_GROUP_WATER_1, + ABILITY_OBLIVIOUS, + ABILITY_OWN_TEMPO, + 0, // Safari Zone flee rate + BODY_COLOR_PINK + }, { // Slowbro + 95, 75, 110, 30, 100, 80, + TYPE_WATER, + TYPE_PSYCHIC, + 75, // catch rate + 164, // base exp. yield + 0, 0, 2, 0, 0, 0, + ITEM_NONE, + ITEM_KINGS_ROCK, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_MONSTER, + EGG_GROUP_WATER_1, + ABILITY_OBLIVIOUS, + ABILITY_OWN_TEMPO, + 0, // Safari Zone flee rate + BODY_COLOR_PINK + }, { // Magnemite + 25, 35, 70, 45, 95, 55, + TYPE_ELECTRIC, + TYPE_STEEL, + 190, // catch rate + 89, // base exp. yield + 0, 0, 0, 0, 1, 0, + ITEM_NONE, + ITEM_METAL_COAT, + 255, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_MINERAL, + EGG_GROUP_MINERAL, + ABILITY_MAGNET_PULL, + ABILITY_STURDY, + 0, // Safari Zone flee rate + BODY_COLOR_GRAY + }, { // Magneton + 50, 60, 95, 70, 120, 70, + TYPE_ELECTRIC, + TYPE_STEEL, + 60, // catch rate + 161, // base exp. yield + 0, 0, 0, 0, 2, 0, + ITEM_NONE, + ITEM_METAL_COAT, + 255, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_MINERAL, + EGG_GROUP_MINERAL, + ABILITY_MAGNET_PULL, + ABILITY_STURDY, + 0, // Safari Zone flee rate + BODY_COLOR_GRAY + }, { // Farfetch'd + 52, 65, 55, 60, 58, 62, + TYPE_NORMAL, + TYPE_FLYING, + 45, // catch rate + 94, // base exp. yield + 0, 1, 0, 0, 0, 0, + ITEM_NONE, + ITEM_STICK, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_FLYING, + EGG_GROUP_FIELD, + ABILITY_KEEN_EYE, + ABILITY_INNER_FOCUS, + 0, // Safari Zone flee rate + BODY_COLOR_BROWN + }, { // Doduo + 35, 85, 45, 75, 35, 35, + TYPE_NORMAL, + TYPE_FLYING, + 190, // catch rate + 96, // base exp. yield + 0, 1, 0, 0, 0, 0, + ITEM_NONE, + ITEM_SHARP_BEAK, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_FLYING, + EGG_GROUP_FLYING, + ABILITY_RUN_AWAY, + ABILITY_EARLY_BIRD, + 8, // Safari Zone flee rate + BODY_COLOR_BROWN + }, { // Dodrio + 60, 110, 70, 100, 60, 60, + TYPE_NORMAL, + TYPE_FLYING, + 45, // catch rate + 158, // base exp. yield + 0, 2, 0, 0, 0, 0, + ITEM_NONE, + ITEM_SHARP_BEAK, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_FLYING, + EGG_GROUP_FLYING, + ABILITY_RUN_AWAY, + ABILITY_EARLY_BIRD, + 10, // Safari Zone flee rate + BODY_COLOR_BROWN + }, { // Seel + 65, 45, 55, 45, 45, 70, + TYPE_WATER, + TYPE_WATER, + 190, // catch rate + 100, // base exp. yield + 0, 0, 0, 0, 0, 1, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_WATER_1, + EGG_GROUP_FIELD, + ABILITY_THICK_FAT, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_WHITE + }, { // Dewgong + 90, 70, 80, 70, 70, 95, + TYPE_WATER, + TYPE_ICE, + 75, // catch rate + 176, // base exp. yield + 0, 0, 0, 0, 0, 2, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_WATER_1, + EGG_GROUP_FIELD, + ABILITY_THICK_FAT, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_WHITE + }, { // Grimer + 80, 80, 50, 25, 40, 50, + TYPE_POISON, + TYPE_POISON, + 190, // catch rate + 90, // base exp. yield + 1, 0, 0, 0, 0, 0, + ITEM_NONE, + ITEM_NUGGET, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_AMORPHOUS, + EGG_GROUP_AMORPHOUS, + ABILITY_STENCH, + ABILITY_STICKY_HOLD, + 0, // Safari Zone flee rate + BODY_COLOR_PURPLE + }, { // Muk + 105, 105, 75, 50, 65, 100, + TYPE_POISON, + TYPE_POISON, + 75, // catch rate + 157, // base exp. yield + 1, 1, 0, 0, 0, 0, + ITEM_NONE, + ITEM_NUGGET, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_AMORPHOUS, + EGG_GROUP_AMORPHOUS, + ABILITY_STENCH, + ABILITY_STICKY_HOLD, + 0, // Safari Zone flee rate + BODY_COLOR_PURPLE + }, { // Shellder + 30, 65, 100, 40, 45, 25, + TYPE_WATER, + TYPE_WATER, + 190, // catch rate + 97, // base exp. yield + 0, 0, 1, 0, 0, 0, + ITEM_PEARL, + ITEM_BIG_PEARL, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_SLOW, + EGG_GROUP_WATER_3, + EGG_GROUP_WATER_3, + ABILITY_SHELL_ARMOR, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_PURPLE + }, { // Cloyster + 50, 95, 180, 70, 85, 45, + TYPE_WATER, + TYPE_ICE, + 60, // catch rate + 203, // base exp. yield + 0, 0, 2, 0, 0, 0, + ITEM_PEARL, + ITEM_BIG_PEARL, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_SLOW, + EGG_GROUP_WATER_3, + EGG_GROUP_WATER_3, + ABILITY_SHELL_ARMOR, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_PURPLE + }, { // Gastly + 30, 35, 30, 80, 100, 35, + TYPE_GHOST, + TYPE_POISON, + 190, // catch rate + 95, // base exp. yield + 0, 0, 0, 0, 1, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_SLOW, + EGG_GROUP_AMORPHOUS, + EGG_GROUP_AMORPHOUS, + ABILITY_LEVITATE, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_PURPLE + }, { // Haunter + 45, 50, 45, 95, 115, 55, + TYPE_GHOST, + TYPE_POISON, + 90, // catch rate + 126, // base exp. yield + 0, 0, 0, 0, 2, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_SLOW, + EGG_GROUP_AMORPHOUS, + EGG_GROUP_AMORPHOUS, + ABILITY_LEVITATE, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_PURPLE + }, { // Gengar + 60, 65, 60, 110, 130, 75, + TYPE_GHOST, + TYPE_POISON, + 45, // catch rate + 190, // base exp. yield + 0, 0, 0, 0, 3, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_SLOW, + EGG_GROUP_AMORPHOUS, + EGG_GROUP_AMORPHOUS, + ABILITY_LEVITATE, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_PURPLE + }, { // Onix + 35, 45, 160, 70, 30, 45, + TYPE_ROCK, + TYPE_GROUND, + 45, // catch rate + 108, // base exp. yield + 0, 0, 1, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 25, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_MINERAL, + EGG_GROUP_MINERAL, + ABILITY_ROCK_HEAD, + ABILITY_STURDY, + 0, // Safari Zone flee rate + BODY_COLOR_GRAY + }, { // Drowzee + 60, 48, 45, 42, 43, 90, + TYPE_PSYCHIC, + TYPE_PSYCHIC, + 190, // catch rate + 102, // base exp. yield + 0, 0, 0, 0, 0, 1, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_HUMAN_LIKE, + EGG_GROUP_HUMAN_LIKE, + ABILITY_INSOMNIA, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_YELLOW + }, { // Hypno + 85, 73, 70, 67, 73, 115, + TYPE_PSYCHIC, + TYPE_PSYCHIC, + 75, // catch rate + 165, // base exp. yield + 0, 0, 0, 0, 0, 2, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_HUMAN_LIKE, + EGG_GROUP_HUMAN_LIKE, + ABILITY_INSOMNIA, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_YELLOW + }, { // Krabby + 30, 105, 90, 50, 25, 25, + TYPE_WATER, + TYPE_WATER, + 225, // catch rate + 115, // base exp. yield + 0, 1, 0, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_WATER_3, + EGG_GROUP_WATER_3, + ABILITY_HYPER_CUTTER, + ABILITY_SHELL_ARMOR, + 0, // Safari Zone flee rate + BODY_COLOR_RED + }, { // Kingler + 55, 130, 115, 75, 50, 50, + TYPE_WATER, + TYPE_WATER, + 60, // catch rate + 206, // base exp. yield + 0, 2, 0, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_WATER_3, + EGG_GROUP_WATER_3, + ABILITY_HYPER_CUTTER, + ABILITY_SHELL_ARMOR, + 0, // Safari Zone flee rate + BODY_COLOR_RED, TRUE + }, { // Voltorb + 40, 30, 50, 100, 55, 55, + TYPE_ELECTRIC, + TYPE_ELECTRIC, + 190, // catch rate + 103, // base exp. yield + 0, 0, 0, 1, 0, 0, + ITEM_NONE, + ITEM_NONE, + 255, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_MINERAL, + EGG_GROUP_MINERAL, + ABILITY_SOUNDPROOF, + ABILITY_STATIC, + 0, // Safari Zone flee rate + BODY_COLOR_RED + }, { // Electrode + 60, 50, 70, 140, 80, 80, + TYPE_ELECTRIC, + TYPE_ELECTRIC, + 60, // catch rate + 150, // base exp. yield + 0, 0, 0, 2, 0, 0, + ITEM_NONE, + ITEM_NONE, + 255, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_MINERAL, + EGG_GROUP_MINERAL, + ABILITY_SOUNDPROOF, + ABILITY_STATIC, + 0, // Safari Zone flee rate + BODY_COLOR_RED + }, { // Exeggcute + 60, 40, 80, 40, 60, 45, + TYPE_GRASS, + TYPE_PSYCHIC, + 90, // catch rate + 98, // base exp. yield + 0, 0, 1, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_SLOW, + EGG_GROUP_GRASS, + EGG_GROUP_GRASS, + ABILITY_CHLOROPHYLL, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_PINK + }, { // Exeggutor + 95, 95, 85, 55, 125, 65, + TYPE_GRASS, + TYPE_PSYCHIC, + 45, // catch rate + 212, // base exp. yield + 0, 0, 0, 0, 2, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_SLOW, + EGG_GROUP_GRASS, + EGG_GROUP_GRASS, + ABILITY_CHLOROPHYLL, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_YELLOW + }, { // Cubone + 50, 50, 95, 35, 40, 50, + TYPE_GROUND, + TYPE_GROUND, + 190, // catch rate + 87, // base exp. yield + 0, 0, 1, 0, 0, 0, + ITEM_NONE, + ITEM_THICK_CLUB, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_MONSTER, + EGG_GROUP_MONSTER, + ABILITY_ROCK_HEAD, + ABILITY_LIGHTNING_ROD, + 0, // Safari Zone flee rate + BODY_COLOR_BROWN + }, { // Marowak + 60, 80, 110, 45, 50, 80, + TYPE_GROUND, + TYPE_GROUND, + 75, // catch rate + 124, // base exp. yield + 0, 0, 2, 0, 0, 0, + ITEM_NONE, + ITEM_THICK_CLUB, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_MONSTER, + EGG_GROUP_MONSTER, + ABILITY_ROCK_HEAD, + ABILITY_LIGHTNING_ROD, + 0, // Safari Zone flee rate + BODY_COLOR_BROWN + }, { // Hitmonlee + 50, 120, 53, 87, 35, 110, + TYPE_FIGHTING, + TYPE_FIGHTING, + 45, // catch rate + 139, // base exp. yield + 0, 2, 0, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 0, // gender + 25, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_HUMAN_LIKE, + EGG_GROUP_HUMAN_LIKE, + ABILITY_LIMBER, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BROWN + }, { // Hitmonchan + 50, 105, 79, 76, 35, 110, + TYPE_FIGHTING, + TYPE_FIGHTING, + 45, // catch rate + 140, // base exp. yield + 0, 0, 0, 0, 0, 2, + ITEM_NONE, + ITEM_NONE, + 0, // gender + 25, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_HUMAN_LIKE, + EGG_GROUP_HUMAN_LIKE, + ABILITY_KEEN_EYE, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BROWN + }, { // Lickitung + 90, 55, 75, 30, 60, 75, + TYPE_NORMAL, + TYPE_NORMAL, + 45, // catch rate + 127, // base exp. yield + 2, 0, 0, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_MONSTER, + EGG_GROUP_MONSTER, + ABILITY_OWN_TEMPO, + ABILITY_OBLIVIOUS, + 0, // Safari Zone flee rate + BODY_COLOR_PINK + }, { // Koffing + 40, 65, 95, 35, 60, 45, + TYPE_POISON, + TYPE_POISON, + 190, // catch rate + 114, // base exp. yield + 0, 0, 1, 0, 0, 0, + ITEM_NONE, + ITEM_SMOKE_BALL, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_AMORPHOUS, + EGG_GROUP_AMORPHOUS, + ABILITY_LEVITATE, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_PURPLE + }, { // Weezing + 65, 90, 120, 60, 85, 70, + TYPE_POISON, + TYPE_POISON, + 60, // catch rate + 173, // base exp. yield + 0, 0, 2, 0, 0, 0, + ITEM_NONE, + ITEM_SMOKE_BALL, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_AMORPHOUS, + EGG_GROUP_AMORPHOUS, + ABILITY_LEVITATE, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_PURPLE + }, { // Rhyhorn + 80, 85, 95, 25, 30, 30, + TYPE_GROUND, + TYPE_ROCK, + 120, // catch rate + 135, // base exp. yield + 0, 0, 1, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_SLOW, + EGG_GROUP_MONSTER, + EGG_GROUP_FIELD, + ABILITY_LIGHTNING_ROD, + ABILITY_ROCK_HEAD, + 4, // Safari Zone flee rate + BODY_COLOR_GRAY + }, { // Rhydon + 105, 130, 120, 40, 45, 45, + TYPE_GROUND, + TYPE_ROCK, + 60, // catch rate + 204, // base exp. yield + 0, 2, 0, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_SLOW, + EGG_GROUP_MONSTER, + EGG_GROUP_FIELD, + ABILITY_LIGHTNING_ROD, + ABILITY_ROCK_HEAD, + 0, // Safari Zone flee rate + BODY_COLOR_GRAY + }, { // Chansey + 250, 5, 5, 50, 35, 105, + TYPE_NORMAL, + TYPE_NORMAL, + 30, // catch rate + 255, // base exp. yield + 2, 0, 0, 0, 0, 0, + ITEM_NONE, + ITEM_LUCKY_EGG, + 254, // gender + 40, // egg cycles + 140, // base friendship + GROWTH_FAST, + EGG_GROUP_FAIRY, + EGG_GROUP_FAIRY, + ABILITY_NATURAL_CURE, + ABILITY_SERENE_GRACE, + 0, // Safari Zone flee rate + BODY_COLOR_PINK + }, { // Tangela + 65, 55, 115, 60, 100, 40, + TYPE_GRASS, + TYPE_GRASS, + 45, // catch rate + 166, // base exp. yield + 0, 0, 1, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_GRASS, + EGG_GROUP_GRASS, + ABILITY_CHLOROPHYLL, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BLUE + }, { // Kangaskhan + 105, 95, 80, 90, 40, 80, + TYPE_NORMAL, + TYPE_NORMAL, + 45, // catch rate + 175, // base exp. yield + 2, 0, 0, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 254, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_MONSTER, + EGG_GROUP_MONSTER, + ABILITY_EARLY_BIRD, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BROWN + }, { // Horsea + 30, 40, 70, 60, 70, 25, + TYPE_WATER, + TYPE_WATER, + 225, // catch rate + 83, // base exp. yield + 0, 0, 0, 0, 1, 0, + ITEM_NONE, + ITEM_DRAGON_SCALE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_WATER_1, + EGG_GROUP_DRAGON, + ABILITY_SWIFT_SWIM, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BLUE + }, { // Seadra + 55, 65, 95, 85, 95, 45, + TYPE_WATER, + TYPE_WATER, + 75, // catch rate + 155, // base exp. yield + 0, 0, 1, 0, 1, 0, + ITEM_NONE, + ITEM_DRAGON_SCALE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_WATER_1, + EGG_GROUP_DRAGON, + ABILITY_POISON_POINT, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BLUE + }, { // Goldeen + 45, 67, 60, 63, 35, 50, + TYPE_WATER, + TYPE_WATER, + 225, // catch rate + 111, // base exp. yield + 0, 1, 0, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_WATER_2, + EGG_GROUP_WATER_2, + ABILITY_SWIFT_SWIM, + ABILITY_WATER_VEIL, + 4, // Safari Zone flee rate + BODY_COLOR_RED + }, { // Seaking + 80, 92, 65, 68, 65, 80, + TYPE_WATER, + TYPE_WATER, + 60, // catch rate + 170, // base exp. yield + 0, 2, 0, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_WATER_2, + EGG_GROUP_WATER_2, + ABILITY_SWIFT_SWIM, + ABILITY_WATER_VEIL, + 6, // Safari Zone flee rate + BODY_COLOR_RED + }, { // Staryu + 30, 45, 55, 85, 70, 55, + TYPE_WATER, + TYPE_WATER, + 225, // catch rate + 106, // base exp. yield + 0, 0, 0, 1, 0, 0, + ITEM_STARDUST, + ITEM_STAR_PIECE, + 255, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_SLOW, + EGG_GROUP_WATER_3, + EGG_GROUP_WATER_3, + ABILITY_ILLUMINATE, + ABILITY_NATURAL_CURE, + 0, // Safari Zone flee rate + BODY_COLOR_BROWN + }, { // Starmie + 60, 75, 85, 115, 100, 85, + TYPE_WATER, + TYPE_PSYCHIC, + 60, // catch rate + 207, // base exp. yield + 0, 0, 0, 2, 0, 0, + ITEM_STARDUST, + ITEM_STAR_PIECE, + 255, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_SLOW, + EGG_GROUP_WATER_3, + EGG_GROUP_WATER_3, + ABILITY_ILLUMINATE, + ABILITY_NATURAL_CURE, + 0, // Safari Zone flee rate + BODY_COLOR_PURPLE + }, { // Mr. mime + 40, 45, 65, 90, 100, 120, + TYPE_PSYCHIC, + TYPE_PSYCHIC, + 45, // catch rate + 136, // base exp. yield + 0, 0, 0, 0, 0, 2, + ITEM_NONE, + ITEM_LEPPA_BERRY, + 127, // gender + 25, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_HUMAN_LIKE, + EGG_GROUP_HUMAN_LIKE, + ABILITY_SOUNDPROOF, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_PINK + }, { // Scyther + 70, 110, 80, 105, 55, 80, + TYPE_BUG, + TYPE_FLYING, + 45, // catch rate + 187, // base exp. yield + 0, 1, 0, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 25, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_BUG, + EGG_GROUP_BUG, + ABILITY_SWARM, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_GREEN + }, { // Jynx + 65, 50, 35, 95, 115, 95, + TYPE_ICE, + TYPE_PSYCHIC, + 45, // catch rate + 137, // base exp. yield + 0, 0, 0, 0, 2, 0, + ITEM_ASPEAR_BERRY, + ITEM_ASPEAR_BERRY, + 254, // gender + 25, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_HUMAN_LIKE, + EGG_GROUP_HUMAN_LIKE, + ABILITY_OBLIVIOUS, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_RED + }, { // Electabuzz + 65, 83, 57, 105, 95, 85, + TYPE_ELECTRIC, + TYPE_ELECTRIC, + 45, // catch rate + 156, // base exp. yield + 0, 0, 0, 2, 0, 0, + ITEM_NONE, + ITEM_NONE, + 63, // gender + 25, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_HUMAN_LIKE, + EGG_GROUP_HUMAN_LIKE, + ABILITY_STATIC, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_YELLOW, TRUE + }, { // Magmar + 65, 95, 57, 93, 100, 85, + TYPE_FIRE, + TYPE_FIRE, + 45, // catch rate + 167, // base exp. yield + 0, 0, 0, 0, 2, 0, + ITEM_RAWST_BERRY, + ITEM_RAWST_BERRY, + 63, // gender + 25, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_HUMAN_LIKE, + EGG_GROUP_HUMAN_LIKE, + ABILITY_FLAME_BODY, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_RED + }, { // Pinsir + 65, 125, 100, 85, 55, 70, + TYPE_BUG, + TYPE_BUG, + 45, // catch rate + 200, // base exp. yield + 0, 2, 0, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 25, // egg cycles + 70, // base friendship + GROWTH_SLOW, + EGG_GROUP_BUG, + EGG_GROUP_BUG, + ABILITY_HYPER_CUTTER, + ABILITY_NONE, + 8, // Safari Zone flee rate + BODY_COLOR_BROWN + }, { // Tauros + 75, 100, 95, 110, 40, 70, + TYPE_NORMAL, + TYPE_NORMAL, + 45, // catch rate + 211, // base exp. yield + 0, 1, 0, 1, 0, 0, + ITEM_NONE, + ITEM_NONE, + 0, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_SLOW, + EGG_GROUP_FIELD, + EGG_GROUP_FIELD, + ABILITY_INTIMIDATE, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BROWN + }, { // Magikarp + 20, 10, 55, 80, 15, 20, + TYPE_WATER, + TYPE_WATER, + 255, // catch rate + 20, // base exp. yield + 0, 0, 0, 1, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 5, // egg cycles + 70, // base friendship + GROWTH_SLOW, + EGG_GROUP_WATER_2, + EGG_GROUP_DRAGON, + ABILITY_SWIFT_SWIM, + ABILITY_NONE, + 4, // Safari Zone flee rate + BODY_COLOR_RED + }, { // Gyarados + 95, 125, 79, 81, 60, 100, + TYPE_WATER, + TYPE_FLYING, + 45, // catch rate + 214, // base exp. yield + 0, 2, 0, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 5, // egg cycles + 70, // base friendship + GROWTH_SLOW, + EGG_GROUP_WATER_2, + EGG_GROUP_DRAGON, + ABILITY_INTIMIDATE, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BLUE + }, { // Lapras + 130, 85, 80, 60, 85, 95, + TYPE_WATER, + TYPE_ICE, + 45, // catch rate + 219, // base exp. yield + 2, 0, 0, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 40, // egg cycles + 70, // base friendship + GROWTH_SLOW, + EGG_GROUP_MONSTER, + EGG_GROUP_WATER_1, + ABILITY_WATER_ABSORB, + ABILITY_SHELL_ARMOR, + 0, // Safari Zone flee rate + BODY_COLOR_BLUE + }, { // Ditto + 48, 48, 48, 48, 48, 48, + TYPE_NORMAL, + TYPE_NORMAL, + 35, // catch rate + 61, // base exp. yield + 1, 0, 0, 0, 0, 0, + ITEM_NONE, + ITEM_METAL_POWDER, + 255, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_DITTO, + EGG_GROUP_DITTO, + ABILITY_LIMBER, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_PURPLE + }, { // Eevee + 55, 55, 50, 55, 45, 65, + TYPE_NORMAL, + TYPE_NORMAL, + 45, // catch rate + 92, // base exp. yield + 0, 0, 0, 0, 0, 1, + ITEM_NONE, + ITEM_NONE, + 31, // gender + 35, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_FIELD, + EGG_GROUP_FIELD, + ABILITY_RUN_AWAY, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BROWN + }, { // Vaporeon + 130, 65, 60, 65, 110, 95, + TYPE_WATER, + TYPE_WATER, + 45, // catch rate + 196, // base exp. yield + 2, 0, 0, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 31, // gender + 35, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_FIELD, + EGG_GROUP_FIELD, + ABILITY_WATER_ABSORB, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BLUE + }, { // Jolteon + 65, 65, 60, 130, 110, 95, + TYPE_ELECTRIC, + TYPE_ELECTRIC, + 45, // catch rate + 197, // base exp. yield + 0, 0, 0, 2, 0, 0, + ITEM_NONE, + ITEM_NONE, + 31, // gender + 35, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_FIELD, + EGG_GROUP_FIELD, + ABILITY_VOLT_ABSORB, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_YELLOW + }, { // Flareon + 65, 130, 60, 65, 95, 110, + TYPE_FIRE, + TYPE_FIRE, + 45, // catch rate + 198, // base exp. yield + 0, 2, 0, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 31, // gender + 35, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_FIELD, + EGG_GROUP_FIELD, + ABILITY_FLASH_FIRE, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_RED + }, { // Porygon + 65, 60, 70, 40, 85, 75, + TYPE_NORMAL, + TYPE_NORMAL, + 45, // catch rate + 130, // base exp. yield + 0, 0, 0, 0, 1, 0, + ITEM_NONE, + ITEM_NONE, + 255, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_MINERAL, + EGG_GROUP_MINERAL, + ABILITY_TRACE, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_PINK + }, { // Omanyte + 35, 40, 100, 35, 90, 55, + TYPE_ROCK, + TYPE_WATER, + 45, // catch rate + 120, // base exp. yield + 0, 0, 1, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 31, // gender + 30, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_WATER_1, + EGG_GROUP_WATER_3, + ABILITY_SWIFT_SWIM, + ABILITY_SHELL_ARMOR, + 0, // Safari Zone flee rate + BODY_COLOR_BLUE + }, { // Omastar + 70, 60, 125, 55, 115, 70, + TYPE_ROCK, + TYPE_WATER, + 45, // catch rate + 199, // base exp. yield + 0, 0, 2, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 31, // gender + 30, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_WATER_1, + EGG_GROUP_WATER_3, + ABILITY_SWIFT_SWIM, + ABILITY_SHELL_ARMOR, + 0, // Safari Zone flee rate + BODY_COLOR_BLUE + }, { // Kabuto + 30, 80, 90, 55, 55, 45, + TYPE_ROCK, + TYPE_WATER, + 45, // catch rate + 119, // base exp. yield + 0, 0, 1, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 31, // gender + 30, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_WATER_1, + EGG_GROUP_WATER_3, + ABILITY_SWIFT_SWIM, + ABILITY_BATTLE_ARMOR, + 0, // Safari Zone flee rate + BODY_COLOR_BROWN + }, { // Kabutops + 60, 115, 105, 80, 65, 70, + TYPE_ROCK, + TYPE_WATER, + 45, // catch rate + 201, // base exp. yield + 0, 2, 0, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 31, // gender + 30, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_WATER_1, + EGG_GROUP_WATER_3, + ABILITY_SWIFT_SWIM, + ABILITY_BATTLE_ARMOR, + 0, // Safari Zone flee rate + BODY_COLOR_BROWN + }, { // Aerodactyl + 80, 105, 65, 130, 60, 75, + TYPE_ROCK, + TYPE_FLYING, + 45, // catch rate + 202, // base exp. yield + 0, 0, 0, 2, 0, 0, + ITEM_NONE, + ITEM_NONE, + 31, // gender + 35, // egg cycles + 70, // base friendship + GROWTH_SLOW, + EGG_GROUP_FLYING, + EGG_GROUP_FLYING, + ABILITY_ROCK_HEAD, + ABILITY_PRESSURE, + 0, // Safari Zone flee rate + BODY_COLOR_PURPLE + }, { // Snorlax + 160, 110, 65, 30, 65, 110, + TYPE_NORMAL, + TYPE_NORMAL, + 25, // catch rate + 154, // base exp. yield + 2, 0, 0, 0, 0, 0, + ITEM_LEFTOVERS, + ITEM_LEFTOVERS, + 31, // gender + 40, // egg cycles + 70, // base friendship + GROWTH_SLOW, + EGG_GROUP_MONSTER, + EGG_GROUP_MONSTER, + ABILITY_IMMUNITY, + ABILITY_THICK_FAT, + 0, // Safari Zone flee rate + BODY_COLOR_BLACK + }, { // Articuno + 90, 85, 100, 85, 95, 125, + TYPE_ICE, + TYPE_FLYING, + 3, // catch rate + 215, // base exp. yield + 0, 0, 0, 0, 0, 3, + ITEM_NONE, + ITEM_NONE, + 255, // gender + 80, // egg cycles + 35, // base friendship + GROWTH_SLOW, + EGG_GROUP_UNDISCOVERED, + EGG_GROUP_UNDISCOVERED, + ABILITY_PRESSURE, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BLUE + }, { // Zapdos + 90, 90, 85, 100, 125, 90, + TYPE_ELECTRIC, + TYPE_FLYING, + 3, // catch rate + 216, // base exp. yield + 0, 0, 0, 0, 3, 0, + ITEM_NONE, + ITEM_NONE, + 255, // gender + 80, // egg cycles + 35, // base friendship + GROWTH_SLOW, + EGG_GROUP_UNDISCOVERED, + EGG_GROUP_UNDISCOVERED, + ABILITY_PRESSURE, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_YELLOW + }, { // Moltres + 90, 100, 90, 90, 125, 85, + TYPE_FIRE, + TYPE_FLYING, + 3, // catch rate + 217, // base exp. yield + 0, 0, 0, 0, 3, 0, + ITEM_NONE, + ITEM_NONE, + 255, // gender + 80, // egg cycles + 35, // base friendship + GROWTH_SLOW, + EGG_GROUP_UNDISCOVERED, + EGG_GROUP_UNDISCOVERED, + ABILITY_PRESSURE, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_YELLOW + }, { // Dratini + 41, 64, 45, 50, 50, 50, + TYPE_DRAGON, + TYPE_DRAGON, + 45, // catch rate + 67, // base exp. yield + 0, 1, 0, 0, 0, 0, + ITEM_NONE, + ITEM_DRAGON_SCALE, + 127, // gender + 40, // egg cycles + 35, // base friendship + GROWTH_SLOW, + EGG_GROUP_WATER_1, + EGG_GROUP_DRAGON, + ABILITY_SHED_SKIN, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BLUE + }, { // Dragonair + 61, 84, 65, 70, 70, 70, + TYPE_DRAGON, + TYPE_DRAGON, + 45, // catch rate + 144, // base exp. yield + 0, 2, 0, 0, 0, 0, + ITEM_NONE, + ITEM_DRAGON_SCALE, + 127, // gender + 40, // egg cycles + 35, // base friendship + GROWTH_SLOW, + EGG_GROUP_WATER_1, + EGG_GROUP_DRAGON, + ABILITY_SHED_SKIN, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BLUE + }, { // Dragonite + 91, 134, 95, 80, 100, 100, + TYPE_DRAGON, + TYPE_FLYING, + 45, // catch rate + 218, // base exp. yield + 0, 3, 0, 0, 0, 0, + ITEM_NONE, + ITEM_DRAGON_SCALE, + 127, // gender + 40, // egg cycles + 35, // base friendship + GROWTH_SLOW, + EGG_GROUP_WATER_1, + EGG_GROUP_DRAGON, + ABILITY_INNER_FOCUS, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BROWN + }, { // Mewtwo + 106, 110, 90, 130, 154, 90, + TYPE_PSYCHIC, + TYPE_PSYCHIC, + 3, // catch rate + 220, // base exp. yield + 0, 0, 0, 0, 3, 0, + ITEM_NONE, + ITEM_NONE, + 255, // gender + 120, // egg cycles + 0, // base friendship + GROWTH_SLOW, + EGG_GROUP_UNDISCOVERED, + EGG_GROUP_UNDISCOVERED, + ABILITY_PRESSURE, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_PURPLE + }, { // Mew + 100, 100, 100, 100, 100, 100, + TYPE_PSYCHIC, + TYPE_PSYCHIC, + 45, // catch rate + 64, // base exp. yield + 3, 0, 0, 0, 0, 0, + ITEM_LUM_BERRY, + ITEM_LUM_BERRY, + 255, // gender + 120, // egg cycles + 100, // base friendship + GROWTH_MEDIUM_SLOW, + EGG_GROUP_UNDISCOVERED, + EGG_GROUP_UNDISCOVERED, + ABILITY_SYNCHRONIZE, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_PINK + }, { // Chikorita + 45, 49, 65, 45, 49, 65, + TYPE_GRASS, + TYPE_GRASS, + 45, // catch rate + 64, // base exp. yield + 0, 0, 0, 0, 0, 1, + ITEM_NONE, + ITEM_NONE, + 31, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_SLOW, + EGG_GROUP_MONSTER, + EGG_GROUP_GRASS, + ABILITY_OVERGROW, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_GREEN + }, { // Bayleef + 60, 62, 80, 60, 63, 80, + TYPE_GRASS, + TYPE_GRASS, + 45, // catch rate + 141, // base exp. yield + 0, 0, 1, 0, 0, 1, + ITEM_NONE, + ITEM_NONE, + 31, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_SLOW, + EGG_GROUP_MONSTER, + EGG_GROUP_GRASS, + ABILITY_OVERGROW, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_GREEN + }, { // Meganium + 80, 82, 100, 80, 83, 100, + TYPE_GRASS, + TYPE_GRASS, + 45, // catch rate + 208, // base exp. yield + 0, 0, 1, 0, 0, 2, + ITEM_NONE, + ITEM_NONE, + 31, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_SLOW, + EGG_GROUP_MONSTER, + EGG_GROUP_GRASS, + ABILITY_OVERGROW, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_GREEN + }, { // Cyndaquil + 39, 52, 43, 65, 60, 50, + TYPE_FIRE, + TYPE_FIRE, + 45, // catch rate + 65, // base exp. yield + 0, 0, 0, 1, 0, 0, + ITEM_NONE, + ITEM_NONE, + 31, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_SLOW, + EGG_GROUP_FIELD, + EGG_GROUP_FIELD, + ABILITY_BLAZE, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_YELLOW + }, { // Quilava + 58, 64, 58, 80, 80, 65, + TYPE_FIRE, + TYPE_FIRE, + 45, // catch rate + 142, // base exp. yield + 0, 0, 0, 1, 1, 0, + ITEM_NONE, + ITEM_NONE, + 31, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_SLOW, + EGG_GROUP_FIELD, + EGG_GROUP_FIELD, + ABILITY_BLAZE, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_YELLOW + }, { // Typhlosion + 78, 84, 78, 100, 109, 85, + TYPE_FIRE, + TYPE_FIRE, + 45, // catch rate + 209, // base exp. yield + 0, 0, 0, 0, 3, 0, + ITEM_NONE, + ITEM_NONE, + 31, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_SLOW, + EGG_GROUP_FIELD, + EGG_GROUP_FIELD, + ABILITY_BLAZE, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_YELLOW + }, { // Totodile + 50, 65, 64, 43, 44, 48, + TYPE_WATER, + TYPE_WATER, + 45, // catch rate + 66, // base exp. yield + 0, 1, 0, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 31, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_SLOW, + EGG_GROUP_MONSTER, + EGG_GROUP_WATER_1, + ABILITY_TORRENT, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BLUE + }, { // Croconaw + 65, 80, 80, 58, 59, 63, + TYPE_WATER, + TYPE_WATER, + 45, // catch rate + 143, // base exp. yield + 0, 1, 1, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 31, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_SLOW, + EGG_GROUP_MONSTER, + EGG_GROUP_WATER_1, + ABILITY_TORRENT, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BLUE, TRUE + }, { // Feraligatr + 85, 105, 100, 78, 79, 83, + TYPE_WATER, + TYPE_WATER, + 45, // catch rate + 210, // base exp. yield + 0, 2, 1, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 31, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_SLOW, + EGG_GROUP_MONSTER, + EGG_GROUP_WATER_1, + ABILITY_TORRENT, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BLUE + }, { // Sentret + 35, 46, 34, 20, 35, 45, + TYPE_NORMAL, + TYPE_NORMAL, + 255, // catch rate + 57, // base exp. yield + 0, 1, 0, 0, 0, 0, + ITEM_NONE, + ITEM_ORAN_BERRY, + 127, // gender + 15, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_FIELD, + EGG_GROUP_FIELD, + ABILITY_RUN_AWAY, + ABILITY_KEEN_EYE, + 0, // Safari Zone flee rate + BODY_COLOR_BROWN + }, { // Furret + 85, 76, 64, 90, 45, 55, + TYPE_NORMAL, + TYPE_NORMAL, + 90, // catch rate + 116, // base exp. yield + 0, 0, 0, 2, 0, 0, + ITEM_ORAN_BERRY, + ITEM_SITRUS_BERRY, + 127, // gender + 15, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_FIELD, + EGG_GROUP_FIELD, + ABILITY_RUN_AWAY, + ABILITY_KEEN_EYE, + 0, // Safari Zone flee rate + BODY_COLOR_BROWN + }, { // Hoothoot + 60, 30, 30, 50, 36, 56, + TYPE_NORMAL, + TYPE_FLYING, + 255, // catch rate + 58, // base exp. yield + 1, 0, 0, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 15, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_FLYING, + EGG_GROUP_FLYING, + ABILITY_INSOMNIA, + ABILITY_KEEN_EYE, + 0, // Safari Zone flee rate + BODY_COLOR_BROWN + }, { // Noctowl + 100, 50, 50, 70, 76, 96, + TYPE_NORMAL, + TYPE_FLYING, + 90, // catch rate + 162, // base exp. yield + 2, 0, 0, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 15, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_FLYING, + EGG_GROUP_FLYING, + ABILITY_INSOMNIA, + ABILITY_KEEN_EYE, + 0, // Safari Zone flee rate + BODY_COLOR_BROWN + }, { // Ledyba + 40, 20, 30, 55, 40, 80, + TYPE_BUG, + TYPE_FLYING, + 255, // catch rate + 54, // base exp. yield + 0, 0, 0, 0, 0, 1, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 15, // egg cycles + 70, // base friendship + GROWTH_FAST, + EGG_GROUP_BUG, + EGG_GROUP_BUG, + ABILITY_SWARM, + ABILITY_EARLY_BIRD, + 0, // Safari Zone flee rate + BODY_COLOR_RED + }, { // Ledian + 55, 35, 50, 85, 55, 110, + TYPE_BUG, + TYPE_FLYING, + 90, // catch rate + 134, // base exp. yield + 0, 0, 0, 0, 0, 2, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 15, // egg cycles + 70, // base friendship + GROWTH_FAST, + EGG_GROUP_BUG, + EGG_GROUP_BUG, + ABILITY_SWARM, + ABILITY_EARLY_BIRD, + 0, // Safari Zone flee rate + BODY_COLOR_RED + }, { // Spinarak + 40, 60, 40, 30, 40, 40, + TYPE_BUG, + TYPE_POISON, + 255, // catch rate + 54, // base exp. yield + 0, 1, 0, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 15, // egg cycles + 70, // base friendship + GROWTH_FAST, + EGG_GROUP_BUG, + EGG_GROUP_BUG, + ABILITY_SWARM, + ABILITY_INSOMNIA, + 0, // Safari Zone flee rate + BODY_COLOR_GREEN + }, { // Ariados + 70, 90, 70, 40, 60, 60, + TYPE_BUG, + TYPE_POISON, + 90, // catch rate + 134, // base exp. yield + 0, 2, 0, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 15, // egg cycles + 70, // base friendship + GROWTH_FAST, + EGG_GROUP_BUG, + EGG_GROUP_BUG, + ABILITY_SWARM, + ABILITY_INSOMNIA, + 0, // Safari Zone flee rate + BODY_COLOR_RED + }, { // Crobat + 85, 90, 80, 130, 70, 80, + TYPE_POISON, + TYPE_FLYING, + 90, // catch rate + 204, // base exp. yield + 0, 0, 0, 3, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 15, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_FLYING, + EGG_GROUP_FLYING, + ABILITY_INNER_FOCUS, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_PURPLE + }, { // Chinchou + 75, 38, 38, 67, 56, 56, + TYPE_WATER, + TYPE_ELECTRIC, + 190, // catch rate + 90, // base exp. yield + 1, 0, 0, 0, 0, 0, + ITEM_NONE, + ITEM_YELLOW_SHARD, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_SLOW, + EGG_GROUP_WATER_2, + EGG_GROUP_WATER_2, + ABILITY_VOLT_ABSORB, + ABILITY_ILLUMINATE, + 0, // Safari Zone flee rate + BODY_COLOR_BLUE + }, { // Lanturn + 125, 58, 58, 67, 76, 76, + TYPE_WATER, + TYPE_ELECTRIC, + 75, // catch rate + 156, // base exp. yield + 2, 0, 0, 0, 0, 0, + ITEM_NONE, + ITEM_YELLOW_SHARD, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_SLOW, + EGG_GROUP_WATER_2, + EGG_GROUP_WATER_2, + ABILITY_VOLT_ABSORB, + ABILITY_ILLUMINATE, + 0, // Safari Zone flee rate + BODY_COLOR_BLUE + }, { // Pichu + 20, 40, 15, 60, 35, 35, + TYPE_ELECTRIC, + TYPE_ELECTRIC, + 190, // catch rate + 42, // base exp. yield + 0, 0, 0, 1, 0, 0, + ITEM_NONE, + ITEM_ORAN_BERRY, + 127, // gender + 10, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_UNDISCOVERED, + EGG_GROUP_UNDISCOVERED, + ABILITY_STATIC, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_YELLOW + }, { // Cleffa + 50, 25, 28, 15, 45, 55, + TYPE_NORMAL, + TYPE_NORMAL, + 150, // catch rate + 37, // base exp. yield + 0, 0, 0, 0, 0, 1, + ITEM_LEPPA_BERRY, + ITEM_MOON_STONE, + 191, // gender + 10, // egg cycles + 140, // base friendship + GROWTH_FAST, + EGG_GROUP_UNDISCOVERED, + EGG_GROUP_UNDISCOVERED, + ABILITY_CUTE_CHARM, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_PINK + }, { // Igglybuff + 90, 30, 15, 15, 40, 20, + TYPE_NORMAL, + TYPE_NORMAL, + 170, // catch rate + 39, // base exp. yield + 1, 0, 0, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 191, // gender + 10, // egg cycles + 70, // base friendship + GROWTH_FAST, + EGG_GROUP_UNDISCOVERED, + EGG_GROUP_UNDISCOVERED, + ABILITY_CUTE_CHARM, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_PINK, TRUE + }, { // Togepi + 35, 20, 65, 20, 40, 65, + TYPE_NORMAL, + TYPE_NORMAL, + 190, // catch rate + 74, // base exp. yield + 0, 0, 0, 0, 0, 1, + ITEM_NONE, + ITEM_NONE, + 31, // gender + 10, // egg cycles + 70, // base friendship + GROWTH_FAST, + EGG_GROUP_UNDISCOVERED, + EGG_GROUP_UNDISCOVERED, + ABILITY_HUSTLE, + ABILITY_SERENE_GRACE, + 0, // Safari Zone flee rate + BODY_COLOR_WHITE + }, { // Togetic + 55, 40, 85, 40, 80, 105, + TYPE_NORMAL, + TYPE_FLYING, + 75, // catch rate + 114, // base exp. yield + 0, 0, 0, 0, 0, 2, + ITEM_NONE, + ITEM_NONE, + 31, // gender + 10, // egg cycles + 70, // base friendship + GROWTH_FAST, + EGG_GROUP_FLYING, + EGG_GROUP_FAIRY, + ABILITY_HUSTLE, + ABILITY_SERENE_GRACE, + 0, // Safari Zone flee rate + BODY_COLOR_WHITE + }, { // Natu + 40, 50, 45, 70, 70, 45, + TYPE_PSYCHIC, + TYPE_FLYING, + 190, // catch rate + 73, // base exp. yield + 0, 0, 0, 0, 1, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_FLYING, + EGG_GROUP_FLYING, + ABILITY_SYNCHRONIZE, + ABILITY_EARLY_BIRD, + 6, // Safari Zone flee rate + BODY_COLOR_GREEN + }, { // Xatu + 65, 75, 70, 95, 95, 70, + TYPE_PSYCHIC, + TYPE_FLYING, + 75, // catch rate + 171, // base exp. yield + 0, 0, 0, 1, 1, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_FLYING, + EGG_GROUP_FLYING, + ABILITY_SYNCHRONIZE, + ABILITY_EARLY_BIRD, + 8, // Safari Zone flee rate + BODY_COLOR_GREEN + }, { // Mareep + 55, 40, 40, 35, 65, 45, + TYPE_ELECTRIC, + TYPE_ELECTRIC, + 235, // catch rate + 59, // base exp. yield + 0, 0, 0, 0, 1, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_SLOW, + EGG_GROUP_MONSTER, + EGG_GROUP_FIELD, + ABILITY_STATIC, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_WHITE + }, { // Flaaffy + 70, 55, 55, 45, 80, 60, + TYPE_ELECTRIC, + TYPE_ELECTRIC, + 120, // catch rate + 117, // base exp. yield + 0, 0, 0, 0, 2, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_SLOW, + EGG_GROUP_MONSTER, + EGG_GROUP_FIELD, + ABILITY_STATIC, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_PINK + }, { // Ampharos + 90, 75, 75, 55, 115, 90, + TYPE_ELECTRIC, + TYPE_ELECTRIC, + 45, // catch rate + 194, // base exp. yield + 0, 0, 0, 0, 3, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_SLOW, + EGG_GROUP_MONSTER, + EGG_GROUP_FIELD, + ABILITY_STATIC, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_YELLOW + }, { // Bellossom + 75, 80, 85, 50, 90, 100, + TYPE_GRASS, + TYPE_GRASS, + 45, // catch rate + 184, // base exp. yield + 0, 0, 0, 0, 0, 3, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_SLOW, + EGG_GROUP_GRASS, + EGG_GROUP_GRASS, + ABILITY_CHLOROPHYLL, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_GREEN + }, { // Marill + 70, 20, 50, 40, 20, 50, + TYPE_WATER, + TYPE_WATER, + 190, // catch rate + 58, // base exp. yield + 2, 0, 0, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 10, // egg cycles + 70, // base friendship + GROWTH_FAST, + EGG_GROUP_WATER_1, + EGG_GROUP_FAIRY, + ABILITY_THICK_FAT, + ABILITY_HUGE_POWER, + 0, // Safari Zone flee rate + BODY_COLOR_BLUE + }, { // Azumarill + 100, 50, 80, 50, 50, 80, + TYPE_WATER, + TYPE_WATER, + 75, // catch rate + 153, // base exp. yield + 3, 0, 0, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 10, // egg cycles + 70, // base friendship + GROWTH_FAST, + EGG_GROUP_WATER_1, + EGG_GROUP_FAIRY, + ABILITY_THICK_FAT, + ABILITY_HUGE_POWER, + 0, // Safari Zone flee rate + BODY_COLOR_BLUE + }, { // Sudowoodo + 70, 100, 115, 30, 30, 65, + TYPE_ROCK, + TYPE_ROCK, + 65, // catch rate + 135, // base exp. yield + 0, 0, 2, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_MINERAL, + EGG_GROUP_MINERAL, + ABILITY_STURDY, + ABILITY_ROCK_HEAD, + 0, // Safari Zone flee rate + BODY_COLOR_BROWN + }, { // Politoed + 90, 75, 75, 70, 90, 100, + TYPE_WATER, + TYPE_WATER, + 45, // catch rate + 185, // base exp. yield + 0, 0, 0, 0, 0, 3, + ITEM_NONE, + ITEM_KINGS_ROCK, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_SLOW, + EGG_GROUP_WATER_1, + EGG_GROUP_WATER_1, + ABILITY_WATER_ABSORB, + ABILITY_DAMP, + 0, // Safari Zone flee rate + BODY_COLOR_GREEN, TRUE + }, { // Hoppip + 35, 35, 40, 50, 35, 55, + TYPE_GRASS, + TYPE_FLYING, + 255, // catch rate + 74, // base exp. yield + 0, 0, 0, 0, 0, 1, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_SLOW, + EGG_GROUP_FAIRY, + EGG_GROUP_GRASS, + ABILITY_CHLOROPHYLL, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_PINK + }, { // Skiploom + 55, 45, 50, 80, 45, 65, + TYPE_GRASS, + TYPE_FLYING, + 120, // catch rate + 136, // base exp. yield + 0, 0, 0, 2, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_SLOW, + EGG_GROUP_FAIRY, + EGG_GROUP_GRASS, + ABILITY_CHLOROPHYLL, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_GREEN + }, { // Jumpluff + 75, 55, 70, 110, 55, 85, + TYPE_GRASS, + TYPE_FLYING, + 45, // catch rate + 176, // base exp. yield + 0, 0, 0, 3, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_SLOW, + EGG_GROUP_FAIRY, + EGG_GROUP_GRASS, + ABILITY_CHLOROPHYLL, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BLUE + }, { // Aipom + 55, 70, 55, 85, 40, 55, + TYPE_NORMAL, + TYPE_NORMAL, + 45, // catch rate + 94, // base exp. yield + 0, 0, 0, 1, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_FAST, + EGG_GROUP_FIELD, + EGG_GROUP_FIELD, + ABILITY_RUN_AWAY, + ABILITY_PICKUP, + 0, // Safari Zone flee rate + BODY_COLOR_PURPLE + }, { // Sunkern + 30, 30, 30, 30, 30, 30, + TYPE_GRASS, + TYPE_GRASS, + 235, // catch rate + 52, // base exp. yield + 0, 0, 0, 0, 1, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_SLOW, + EGG_GROUP_GRASS, + EGG_GROUP_GRASS, + ABILITY_CHLOROPHYLL, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_YELLOW + }, { // Sunflora + 75, 75, 55, 30, 105, 85, + TYPE_GRASS, + TYPE_GRASS, + 120, // catch rate + 146, // base exp. yield + 0, 0, 0, 0, 2, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_SLOW, + EGG_GROUP_GRASS, + EGG_GROUP_GRASS, + ABILITY_CHLOROPHYLL, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_YELLOW + }, { // Yanma + 65, 65, 45, 95, 75, 45, + TYPE_BUG, + TYPE_FLYING, + 75, // catch rate + 147, // base exp. yield + 0, 0, 0, 2, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_BUG, + EGG_GROUP_BUG, + ABILITY_SPEED_BOOST, + ABILITY_COMPOUND_EYES, + 0, // Safari Zone flee rate + BODY_COLOR_RED + }, { // Wooper + 55, 45, 45, 15, 25, 25, + TYPE_WATER, + TYPE_GROUND, + 255, // catch rate + 52, // base exp. yield + 1, 0, 0, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_WATER_1, + EGG_GROUP_FIELD, + ABILITY_DAMP, + ABILITY_WATER_ABSORB, + 0, // Safari Zone flee rate + BODY_COLOR_BLUE + }, { // Quagsire + 95, 85, 85, 35, 65, 65, + TYPE_WATER, + TYPE_GROUND, + 90, // catch rate + 137, // base exp. yield + 2, 0, 0, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_WATER_1, + EGG_GROUP_FIELD, + ABILITY_DAMP, + ABILITY_WATER_ABSORB, + 0, // Safari Zone flee rate + BODY_COLOR_BLUE + }, { // Espeon + 65, 65, 60, 110, 130, 95, + TYPE_PSYCHIC, + TYPE_PSYCHIC, + 45, // catch rate + 197, // base exp. yield + 0, 0, 0, 0, 2, 0, + ITEM_NONE, + ITEM_NONE, + 31, // gender + 35, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_FIELD, + EGG_GROUP_FIELD, + ABILITY_SYNCHRONIZE, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_PURPLE + }, { // Umbreon + 95, 65, 110, 65, 60, 130, + TYPE_DARK, + TYPE_DARK, + 45, // catch rate + 197, // base exp. yield + 0, 0, 0, 0, 0, 2, + ITEM_NONE, + ITEM_NONE, + 31, // gender + 35, // egg cycles + 35, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_FIELD, + EGG_GROUP_FIELD, + ABILITY_SYNCHRONIZE, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BLACK + }, { // Murkrow + 60, 85, 42, 91, 85, 42, + TYPE_DARK, + TYPE_FLYING, + 30, // catch rate + 107, // base exp. yield + 0, 0, 0, 1, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 35, // base friendship + GROWTH_MEDIUM_SLOW, + EGG_GROUP_FLYING, + EGG_GROUP_FLYING, + ABILITY_INSOMNIA, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BLACK + }, { // Slowking + 95, 75, 80, 30, 100, 110, + TYPE_WATER, + TYPE_PSYCHIC, + 70, // catch rate + 164, // base exp. yield + 0, 0, 0, 0, 0, 3, + ITEM_NONE, + ITEM_KINGS_ROCK, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_MONSTER, + EGG_GROUP_WATER_1, + ABILITY_OBLIVIOUS, + ABILITY_OWN_TEMPO, + 0, // Safari Zone flee rate + BODY_COLOR_PINK + }, { // Misdreavus + 60, 60, 60, 85, 85, 85, + TYPE_GHOST, + TYPE_GHOST, + 45, // catch rate + 147, // base exp. yield + 0, 0, 0, 0, 1, 1, + ITEM_NONE, + ITEM_SPELL_TAG, + 127, // gender + 25, // egg cycles + 35, // base friendship + GROWTH_FAST, + EGG_GROUP_AMORPHOUS, + EGG_GROUP_AMORPHOUS, + ABILITY_LEVITATE, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_GRAY + }, { // Unown + 48, 72, 48, 48, 72, 48, + TYPE_PSYCHIC, + TYPE_PSYCHIC, + 225, // catch rate + 61, // base exp. yield + 0, 1, 0, 0, 1, 0, + ITEM_NONE, + ITEM_NONE, + 255, // gender + 40, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_UNDISCOVERED, + EGG_GROUP_UNDISCOVERED, + ABILITY_LEVITATE, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BLACK, TRUE + }, { // Wobbuffet + 190, 33, 58, 33, 33, 58, + TYPE_PSYCHIC, + TYPE_PSYCHIC, + 45, // catch rate + 177, // base exp. yield + 2, 0, 0, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_AMORPHOUS, + EGG_GROUP_AMORPHOUS, + ABILITY_SHADOW_TAG, + ABILITY_NONE, + 4, // Safari Zone flee rate + BODY_COLOR_BLUE + }, { // Girafarig + 70, 80, 65, 85, 90, 65, + TYPE_NORMAL, + TYPE_PSYCHIC, + 60, // catch rate + 149, // base exp. yield + 0, 0, 0, 0, 2, 0, + ITEM_NONE, + ITEM_PERSIM_BERRY, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_FIELD, + EGG_GROUP_FIELD, + ABILITY_INNER_FOCUS, + ABILITY_EARLY_BIRD, + 4, // Safari Zone flee rate + BODY_COLOR_YELLOW + }, { // Pineco + 50, 65, 90, 15, 35, 35, + TYPE_BUG, + TYPE_BUG, + 190, // catch rate + 60, // base exp. yield + 0, 0, 1, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_BUG, + EGG_GROUP_BUG, + ABILITY_STURDY, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_GRAY + }, { // Forretress + 75, 90, 140, 40, 60, 60, + TYPE_BUG, + TYPE_STEEL, + 75, // catch rate + 118, // base exp. yield + 0, 0, 2, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_BUG, + EGG_GROUP_BUG, + ABILITY_STURDY, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_PURPLE + }, { // Dunsparce + 100, 70, 70, 45, 65, 65, + TYPE_NORMAL, + TYPE_NORMAL, + 190, // catch rate + 75, // base exp. yield + 1, 0, 0, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_FIELD, + EGG_GROUP_FIELD, + ABILITY_SERENE_GRACE, + ABILITY_RUN_AWAY, + 0, // Safari Zone flee rate + BODY_COLOR_YELLOW + }, { // Gligar + 65, 75, 105, 85, 35, 65, + TYPE_GROUND, + TYPE_FLYING, + 60, // catch rate + 108, // base exp. yield + 0, 0, 1, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_SLOW, + EGG_GROUP_BUG, + EGG_GROUP_BUG, + ABILITY_HYPER_CUTTER, + ABILITY_SAND_VEIL, + 0, // Safari Zone flee rate + BODY_COLOR_PURPLE + }, { // Steelix + 75, 85, 200, 30, 55, 65, + TYPE_STEEL, + TYPE_GROUND, + 25, // catch rate + 196, // base exp. yield + 0, 0, 2, 0, 0, 0, + ITEM_NONE, + ITEM_METAL_COAT, + 127, // gender + 25, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_MINERAL, + EGG_GROUP_MINERAL, + ABILITY_ROCK_HEAD, + ABILITY_STURDY, + 0, // Safari Zone flee rate + BODY_COLOR_GRAY + }, { // Snubbull + 60, 80, 50, 30, 40, 40, + TYPE_NORMAL, + TYPE_NORMAL, + 190, // catch rate + 63, // base exp. yield + 0, 1, 0, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 191, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_FAST, + EGG_GROUP_FIELD, + EGG_GROUP_FAIRY, + ABILITY_INTIMIDATE, + ABILITY_RUN_AWAY, + 0, // Safari Zone flee rate + BODY_COLOR_PINK + }, { // Granbull + 90, 120, 75, 45, 60, 60, + TYPE_NORMAL, + TYPE_NORMAL, + 75, // catch rate + 178, // base exp. yield + 0, 2, 0, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 191, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_FAST, + EGG_GROUP_FIELD, + EGG_GROUP_FAIRY, + ABILITY_INTIMIDATE, + ABILITY_INTIMIDATE, + 0, // Safari Zone flee rate + BODY_COLOR_PURPLE + }, { // Qwilfish + 65, 95, 75, 85, 55, 55, + TYPE_WATER, + TYPE_POISON, + 45, // catch rate + 100, // base exp. yield + 0, 1, 0, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_WATER_2, + EGG_GROUP_WATER_2, + ABILITY_POISON_POINT, + ABILITY_SWIFT_SWIM, + 0, // Safari Zone flee rate + BODY_COLOR_GRAY + }, { // Scizor + 70, 130, 100, 65, 55, 80, + TYPE_BUG, + TYPE_STEEL, + 25, // catch rate + 200, // base exp. yield + 0, 2, 0, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 25, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_BUG, + EGG_GROUP_BUG, + ABILITY_SWARM, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_RED + }, { // Shuckle + 20, 10, 230, 5, 10, 230, + TYPE_BUG, + TYPE_ROCK, + 190, // catch rate + 80, // base exp. yield + 0, 0, 1, 0, 0, 1, + ITEM_ORAN_BERRY, + ITEM_ORAN_BERRY, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_SLOW, + EGG_GROUP_BUG, + EGG_GROUP_BUG, + ABILITY_STURDY, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_YELLOW + }, { // Heracross + 80, 125, 75, 85, 40, 95, + TYPE_BUG, + TYPE_FIGHTING, + 45, // catch rate + 200, // base exp. yield + 0, 2, 0, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 25, // egg cycles + 70, // base friendship + GROWTH_SLOW, + EGG_GROUP_BUG, + EGG_GROUP_BUG, + ABILITY_SWARM, + ABILITY_GUTS, + 8, // Safari Zone flee rate + BODY_COLOR_BLUE + }, { // Sneasel + 55, 95, 55, 115, 35, 75, + TYPE_DARK, + TYPE_ICE, + 60, // catch rate + 132, // base exp. yield + 0, 0, 0, 1, 0, 0, + ITEM_NONE, + ITEM_QUICK_CLAW, + 127, // gender + 20, // egg cycles + 35, // base friendship + GROWTH_MEDIUM_SLOW, + EGG_GROUP_FIELD, + EGG_GROUP_FIELD, + ABILITY_INNER_FOCUS, + ABILITY_KEEN_EYE, + 0, // Safari Zone flee rate + BODY_COLOR_BLACK, TRUE + }, { // Teddiursa + 60, 80, 50, 40, 50, 50, + TYPE_NORMAL, + TYPE_NORMAL, + 120, // catch rate + 124, // base exp. yield + 0, 1, 0, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_FIELD, + EGG_GROUP_FIELD, + ABILITY_PICKUP, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BROWN, TRUE + }, { // Ursaring + 90, 130, 75, 55, 75, 75, + TYPE_NORMAL, + TYPE_NORMAL, + 60, // catch rate + 189, // base exp. yield + 0, 2, 0, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_FIELD, + EGG_GROUP_FIELD, + ABILITY_GUTS, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BROWN + }, { // Slugma + 40, 40, 40, 20, 70, 40, + TYPE_FIRE, + TYPE_FIRE, + 190, // catch rate + 78, // base exp. yield + 0, 0, 0, 0, 1, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_AMORPHOUS, + EGG_GROUP_AMORPHOUS, + ABILITY_MAGMA_ARMOR, + ABILITY_FLAME_BODY, + 0, // Safari Zone flee rate + BODY_COLOR_RED + }, { // Magcargo + 50, 50, 120, 30, 80, 80, + TYPE_FIRE, + TYPE_ROCK, + 75, // catch rate + 154, // base exp. yield + 0, 0, 2, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_AMORPHOUS, + EGG_GROUP_AMORPHOUS, + ABILITY_MAGMA_ARMOR, + ABILITY_FLAME_BODY, + 0, // Safari Zone flee rate + BODY_COLOR_RED + }, { // Swinub + 50, 50, 40, 50, 30, 30, + TYPE_ICE, + TYPE_GROUND, + 225, // catch rate + 78, // base exp. yield + 0, 1, 0, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_SLOW, + EGG_GROUP_FIELD, + EGG_GROUP_FIELD, + ABILITY_OBLIVIOUS, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BROWN + }, { // Piloswine + 100, 100, 80, 50, 60, 60, + TYPE_ICE, + TYPE_GROUND, + 75, // catch rate + 160, // base exp. yield + 1, 1, 0, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_SLOW, + EGG_GROUP_FIELD, + EGG_GROUP_FIELD, + ABILITY_OBLIVIOUS, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BROWN + }, { // Corsola + 55, 55, 85, 35, 65, 85, + TYPE_WATER, + TYPE_ROCK, + 60, // catch rate + 113, // base exp. yield + 0, 0, 1, 0, 0, 1, + ITEM_NONE, + ITEM_RED_SHARD, + 191, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_FAST, + EGG_GROUP_WATER_1, + EGG_GROUP_WATER_3, + ABILITY_HUSTLE, + ABILITY_NATURAL_CURE, + 0, // Safari Zone flee rate + BODY_COLOR_PINK + }, { // Remoraid + 35, 65, 35, 65, 65, 35, + TYPE_WATER, + TYPE_WATER, + 190, // catch rate + 78, // base exp. yield + 0, 0, 0, 0, 1, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_WATER_1, + EGG_GROUP_WATER_2, + ABILITY_HUSTLE, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_GRAY + }, { // Octillery + 75, 105, 75, 45, 105, 75, + TYPE_WATER, + TYPE_WATER, + 75, // catch rate + 164, // base exp. yield + 0, 1, 0, 0, 1, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_WATER_1, + EGG_GROUP_WATER_2, + ABILITY_SUCTION_CUPS, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_RED + }, { // Delibird + 45, 55, 45, 75, 65, 45, + TYPE_ICE, + TYPE_FLYING, + 45, // catch rate + 183, // base exp. yield + 0, 0, 0, 1, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_FAST, + EGG_GROUP_WATER_1, + EGG_GROUP_FIELD, + ABILITY_VITAL_SPIRIT, + ABILITY_HUSTLE, + 0, // Safari Zone flee rate + BODY_COLOR_RED + }, { // Mantine + 65, 40, 70, 70, 80, 140, + TYPE_WATER, + TYPE_FLYING, + 25, // catch rate + 168, // base exp. yield + 0, 0, 0, 0, 0, 2, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 25, // egg cycles + 70, // base friendship + GROWTH_SLOW, + EGG_GROUP_WATER_1, + EGG_GROUP_WATER_1, + ABILITY_SWIFT_SWIM, + ABILITY_WATER_ABSORB, + 0, // Safari Zone flee rate + BODY_COLOR_PURPLE + }, { // Skarmory + 65, 80, 140, 70, 40, 70, + TYPE_STEEL, + TYPE_FLYING, + 25, // catch rate + 168, // base exp. yield + 0, 0, 2, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 25, // egg cycles + 70, // base friendship + GROWTH_SLOW, + EGG_GROUP_FLYING, + EGG_GROUP_FLYING, + ABILITY_KEEN_EYE, + ABILITY_STURDY, + 0, // Safari Zone flee rate + BODY_COLOR_GRAY + }, { // Houndour + 45, 60, 30, 65, 80, 50, + TYPE_DARK, + TYPE_FIRE, + 120, // catch rate + 114, // base exp. yield + 0, 0, 0, 0, 1, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 35, // base friendship + GROWTH_SLOW, + EGG_GROUP_FIELD, + EGG_GROUP_FIELD, + ABILITY_EARLY_BIRD, + ABILITY_FLASH_FIRE, + 0, // Safari Zone flee rate + BODY_COLOR_BLACK + }, { // Houndoom + 75, 90, 50, 95, 110, 80, + TYPE_DARK, + TYPE_FIRE, + 45, // catch rate + 204, // base exp. yield + 0, 0, 0, 0, 2, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 35, // base friendship + GROWTH_SLOW, + EGG_GROUP_FIELD, + EGG_GROUP_FIELD, + ABILITY_EARLY_BIRD, + ABILITY_FLASH_FIRE, + 0, // Safari Zone flee rate + BODY_COLOR_BLACK + }, { // Kingdra + 75, 95, 95, 85, 95, 95, + TYPE_WATER, + TYPE_DRAGON, + 45, // catch rate + 207, // base exp. yield + 0, 1, 0, 0, 1, 1, + ITEM_NONE, + ITEM_DRAGON_SCALE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_WATER_1, + EGG_GROUP_DRAGON, + ABILITY_SWIFT_SWIM, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BLUE + }, { // Phanpy + 90, 60, 60, 40, 40, 40, + TYPE_GROUND, + TYPE_GROUND, + 120, // catch rate + 124, // base exp. yield + 1, 0, 0, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_FIELD, + EGG_GROUP_FIELD, + ABILITY_PICKUP, + ABILITY_NONE, + 10, // Safari Zone flee rate + BODY_COLOR_BLUE + }, { // Donphan + 90, 120, 120, 50, 60, 60, + TYPE_GROUND, + TYPE_GROUND, + 60, // catch rate + 189, // base exp. yield + 0, 1, 1, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_FIELD, + EGG_GROUP_FIELD, + ABILITY_STURDY, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_GRAY + }, { // Porygon2 + 85, 80, 90, 60, 105, 95, + TYPE_NORMAL, + TYPE_NORMAL, + 45, // catch rate + 180, // base exp. yield + 0, 0, 0, 0, 2, 0, + ITEM_NONE, + ITEM_NONE, + 255, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_MINERAL, + EGG_GROUP_MINERAL, + ABILITY_TRACE, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_RED + }, { // Stantler + 73, 95, 62, 85, 85, 65, + TYPE_NORMAL, + TYPE_NORMAL, + 45, // catch rate + 165, // base exp. yield + 0, 1, 0, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_SLOW, + EGG_GROUP_FIELD, + EGG_GROUP_FIELD, + ABILITY_INTIMIDATE, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BROWN + }, { // Smeargle + 55, 20, 35, 75, 20, 45, + TYPE_NORMAL, + TYPE_NORMAL, + 45, // catch rate + 106, // base exp. yield + 0, 0, 0, 1, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_FAST, + EGG_GROUP_FIELD, + EGG_GROUP_FIELD, + ABILITY_OWN_TEMPO, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_WHITE + }, { // Tyrogue + 35, 35, 35, 35, 35, 35, + TYPE_FIGHTING, + TYPE_FIGHTING, + 75, // catch rate + 91, // base exp. yield + 0, 1, 0, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 0, // gender + 25, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_UNDISCOVERED, + EGG_GROUP_UNDISCOVERED, + ABILITY_GUTS, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_PURPLE + }, { // Hitmontop + 50, 95, 95, 70, 35, 110, + TYPE_FIGHTING, + TYPE_FIGHTING, + 45, // catch rate + 138, // base exp. yield + 0, 0, 0, 0, 0, 2, + ITEM_NONE, + ITEM_NONE, + 0, // gender + 25, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_HUMAN_LIKE, + EGG_GROUP_HUMAN_LIKE, + ABILITY_INTIMIDATE, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BROWN + }, { // Smoochum + 45, 30, 15, 65, 85, 65, + TYPE_ICE, + TYPE_PSYCHIC, + 45, // catch rate + 87, // base exp. yield + 0, 0, 0, 0, 1, 0, + ITEM_ASPEAR_BERRY, + ITEM_ASPEAR_BERRY, + 254, // gender + 25, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_UNDISCOVERED, + EGG_GROUP_UNDISCOVERED, + ABILITY_OBLIVIOUS, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_PINK + }, { // Elekid + 45, 63, 37, 95, 65, 55, + TYPE_ELECTRIC, + TYPE_ELECTRIC, + 45, // catch rate + 106, // base exp. yield + 0, 0, 0, 1, 0, 0, + ITEM_NONE, + ITEM_NONE, + 63, // gender + 25, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_UNDISCOVERED, + EGG_GROUP_UNDISCOVERED, + ABILITY_STATIC, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_YELLOW, TRUE + }, { // Magby + 45, 75, 37, 83, 70, 55, + TYPE_FIRE, + TYPE_FIRE, + 45, // catch rate + 117, // base exp. yield + 0, 0, 0, 1, 0, 0, + ITEM_RAWST_BERRY, + ITEM_RAWST_BERRY, + 63, // gender + 25, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_UNDISCOVERED, + EGG_GROUP_UNDISCOVERED, + ABILITY_FLAME_BODY, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_RED + }, { // Miltank + 95, 80, 105, 100, 40, 70, + TYPE_NORMAL, + TYPE_NORMAL, + 45, // catch rate + 200, // base exp. yield + 0, 0, 2, 0, 0, 0, + ITEM_MOOMOO_MILK, + ITEM_MOOMOO_MILK, + 254, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_SLOW, + EGG_GROUP_FIELD, + EGG_GROUP_FIELD, + ABILITY_THICK_FAT, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_PINK + }, { // Blissey + 255, 10, 10, 55, 75, 135, + TYPE_NORMAL, + TYPE_NORMAL, + 30, // catch rate + 255, // base exp. yield + 2, 0, 0, 0, 0, 0, + ITEM_NONE, + ITEM_LUCKY_EGG, + 254, // gender + 40, // egg cycles + 140, // base friendship + GROWTH_FAST, + EGG_GROUP_FAIRY, + EGG_GROUP_FAIRY, + ABILITY_NATURAL_CURE, + ABILITY_SERENE_GRACE, + 0, // Safari Zone flee rate + BODY_COLOR_PINK + }, { // Raikou + 90, 85, 75, 115, 115, 100, + TYPE_ELECTRIC, + TYPE_ELECTRIC, + 3, // catch rate + 216, // base exp. yield + 0, 0, 0, 2, 1, 0, + ITEM_NONE, + ITEM_NONE, + 255, // gender + 80, // egg cycles + 35, // base friendship + GROWTH_SLOW, + EGG_GROUP_UNDISCOVERED, + EGG_GROUP_UNDISCOVERED, + ABILITY_PRESSURE, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_YELLOW + }, { // Entei + 115, 115, 85, 100, 90, 75, + TYPE_FIRE, + TYPE_FIRE, + 3, // catch rate + 217, // base exp. yield + 1, 2, 0, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 255, // gender + 80, // egg cycles + 35, // base friendship + GROWTH_SLOW, + EGG_GROUP_UNDISCOVERED, + EGG_GROUP_UNDISCOVERED, + ABILITY_PRESSURE, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BROWN + }, { // Suicune + 100, 75, 115, 85, 90, 115, + TYPE_WATER, + TYPE_WATER, + 3, // catch rate + 215, // base exp. yield + 0, 0, 1, 0, 0, 2, + ITEM_NONE, + ITEM_NONE, + 255, // gender + 80, // egg cycles + 35, // base friendship + GROWTH_SLOW, + EGG_GROUP_UNDISCOVERED, + EGG_GROUP_UNDISCOVERED, + ABILITY_PRESSURE, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BLUE + }, { // Larvitar + 50, 64, 50, 41, 45, 50, + TYPE_ROCK, + TYPE_GROUND, + 45, // catch rate + 67, // base exp. yield + 0, 1, 0, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 40, // egg cycles + 35, // base friendship + GROWTH_SLOW, + EGG_GROUP_MONSTER, + EGG_GROUP_MONSTER, + ABILITY_GUTS, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_GREEN + }, { // Pupitar + 70, 84, 70, 51, 65, 70, + TYPE_ROCK, + TYPE_GROUND, + 45, // catch rate + 144, // base exp. yield + 0, 2, 0, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 40, // egg cycles + 35, // base friendship + GROWTH_SLOW, + EGG_GROUP_MONSTER, + EGG_GROUP_MONSTER, + ABILITY_SHED_SKIN, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_GRAY + }, { // Tyranitar + 100, 134, 110, 61, 95, 100, + TYPE_ROCK, + TYPE_DARK, + 45, // catch rate + 218, // base exp. yield + 0, 3, 0, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 40, // egg cycles + 35, // base friendship + GROWTH_SLOW, + EGG_GROUP_MONSTER, + EGG_GROUP_MONSTER, + ABILITY_SAND_STREAM, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_GREEN + }, { // Lugia + 106, 90, 130, 110, 90, 154, + TYPE_PSYCHIC, + TYPE_FLYING, + 3, // catch rate + 220, // base exp. yield + 0, 0, 0, 0, 0, 3, + ITEM_NONE, + ITEM_NONE, + 255, // gender + 120, // egg cycles + 0, // base friendship + GROWTH_SLOW, + EGG_GROUP_UNDISCOVERED, + EGG_GROUP_UNDISCOVERED, + ABILITY_PRESSURE, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_WHITE + }, { // Ho-Oh + 106, 130, 90, 90, 110, 154, + TYPE_FIRE, + TYPE_FLYING, + 3, // catch rate + 220, // base exp. yield + 0, 0, 0, 0, 0, 3, + ITEM_SACRED_ASH, + ITEM_SACRED_ASH, + 255, // gender + 120, // egg cycles + 0, // base friendship + GROWTH_SLOW, + EGG_GROUP_UNDISCOVERED, + EGG_GROUP_UNDISCOVERED, + ABILITY_PRESSURE, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_RED + }, { // Celebi + 100, 100, 100, 100, 100, 100, + TYPE_PSYCHIC, + TYPE_GRASS, + 45, // catch rate + 64, // base exp. yield + 3, 0, 0, 0, 0, 0, + ITEM_LUM_BERRY, + ITEM_LUM_BERRY, + 255, // gender + 120, // egg cycles + 100, // base friendship + GROWTH_MEDIUM_SLOW, + EGG_GROUP_UNDISCOVERED, + EGG_GROUP_UNDISCOVERED, + ABILITY_NATURAL_CURE, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_GREEN + }, { // ? + 50, 150, 50, 150, 150, 50, + TYPE_NORMAL, + TYPE_NORMAL, + 3, // catch rate + 1, // base exp. yield + 2, 2, 2, 2, 2, 2, + ITEM_NONE, + ITEM_NONE, + 255, // gender + 120, // egg cycles + 0, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_UNDISCOVERED, + EGG_GROUP_UNDISCOVERED, + ABILITY_NONE, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BLACK + }, { // ? + 50, 150, 50, 150, 150, 50, + TYPE_NORMAL, + TYPE_NORMAL, + 3, // catch rate + 1, // base exp. yield + 2, 2, 2, 2, 2, 2, + ITEM_NONE, + ITEM_NONE, + 255, // gender + 120, // egg cycles + 0, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_UNDISCOVERED, + EGG_GROUP_UNDISCOVERED, + ABILITY_NONE, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BLACK + }, { // ? + 50, 150, 50, 150, 150, 50, + TYPE_NORMAL, + TYPE_NORMAL, + 3, // catch rate + 1, // base exp. yield + 2, 2, 2, 2, 2, 2, + ITEM_NONE, + ITEM_NONE, + 255, // gender + 120, // egg cycles + 0, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_UNDISCOVERED, + EGG_GROUP_UNDISCOVERED, + ABILITY_NONE, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BLACK + }, { // ? + 50, 150, 50, 150, 150, 50, + TYPE_NORMAL, + TYPE_NORMAL, + 3, // catch rate + 1, // base exp. yield + 2, 2, 2, 2, 2, 2, + ITEM_NONE, + ITEM_NONE, + 255, // gender + 120, // egg cycles + 0, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_UNDISCOVERED, + EGG_GROUP_UNDISCOVERED, + ABILITY_NONE, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BLACK + }, { // ? + 50, 150, 50, 150, 150, 50, + TYPE_NORMAL, + TYPE_NORMAL, + 3, // catch rate + 1, // base exp. yield + 2, 2, 2, 2, 2, 2, + ITEM_NONE, + ITEM_NONE, + 255, // gender + 120, // egg cycles + 0, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_UNDISCOVERED, + EGG_GROUP_UNDISCOVERED, + ABILITY_NONE, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BLACK + }, { // ? + 50, 150, 50, 150, 150, 50, + TYPE_NORMAL, + TYPE_NORMAL, + 3, // catch rate + 1, // base exp. yield + 2, 2, 2, 2, 2, 2, + ITEM_NONE, + ITEM_NONE, + 255, // gender + 120, // egg cycles + 0, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_UNDISCOVERED, + EGG_GROUP_UNDISCOVERED, + ABILITY_NONE, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BLACK + }, { // ? + 50, 150, 50, 150, 150, 50, + TYPE_NORMAL, + TYPE_NORMAL, + 3, // catch rate + 1, // base exp. yield + 2, 2, 2, 2, 2, 2, + ITEM_NONE, + ITEM_NONE, + 255, // gender + 120, // egg cycles + 0, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_UNDISCOVERED, + EGG_GROUP_UNDISCOVERED, + ABILITY_NONE, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BLACK + }, { // ? + 50, 150, 50, 150, 150, 50, + TYPE_NORMAL, + TYPE_NORMAL, + 3, // catch rate + 1, // base exp. yield + 2, 2, 2, 2, 2, 2, + ITEM_NONE, + ITEM_NONE, + 255, // gender + 120, // egg cycles + 0, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_UNDISCOVERED, + EGG_GROUP_UNDISCOVERED, + ABILITY_NONE, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BLACK + }, { // ? + 50, 150, 50, 150, 150, 50, + TYPE_NORMAL, + TYPE_NORMAL, + 3, // catch rate + 1, // base exp. yield + 2, 2, 2, 2, 2, 2, + ITEM_NONE, + ITEM_NONE, + 255, // gender + 120, // egg cycles + 0, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_UNDISCOVERED, + EGG_GROUP_UNDISCOVERED, + ABILITY_NONE, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BLACK + }, { // ? + 50, 150, 50, 150, 150, 50, + TYPE_NORMAL, + TYPE_NORMAL, + 3, // catch rate + 1, // base exp. yield + 2, 2, 2, 2, 2, 2, + ITEM_NONE, + ITEM_NONE, + 255, // gender + 120, // egg cycles + 0, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_UNDISCOVERED, + EGG_GROUP_UNDISCOVERED, + ABILITY_NONE, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BLACK + }, { // ? + 50, 150, 50, 150, 150, 50, + TYPE_NORMAL, + TYPE_NORMAL, + 3, // catch rate + 1, // base exp. yield + 2, 2, 2, 2, 2, 2, + ITEM_NONE, + ITEM_NONE, + 255, // gender + 120, // egg cycles + 0, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_UNDISCOVERED, + EGG_GROUP_UNDISCOVERED, + ABILITY_NONE, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BLACK + }, { // ? + 50, 150, 50, 150, 150, 50, + TYPE_NORMAL, + TYPE_NORMAL, + 3, // catch rate + 1, // base exp. yield + 2, 2, 2, 2, 2, 2, + ITEM_NONE, + ITEM_NONE, + 255, // gender + 120, // egg cycles + 0, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_UNDISCOVERED, + EGG_GROUP_UNDISCOVERED, + ABILITY_NONE, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BLACK + }, { // ? + 50, 150, 50, 150, 150, 50, + TYPE_NORMAL, + TYPE_NORMAL, + 3, // catch rate + 1, // base exp. yield + 2, 2, 2, 2, 2, 2, + ITEM_NONE, + ITEM_NONE, + 255, // gender + 120, // egg cycles + 0, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_UNDISCOVERED, + EGG_GROUP_UNDISCOVERED, + ABILITY_NONE, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BLACK + }, { // ? + 50, 150, 50, 150, 150, 50, + TYPE_NORMAL, + TYPE_NORMAL, + 3, // catch rate + 1, // base exp. yield + 2, 2, 2, 2, 2, 2, + ITEM_NONE, + ITEM_NONE, + 255, // gender + 120, // egg cycles + 0, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_UNDISCOVERED, + EGG_GROUP_UNDISCOVERED, + ABILITY_NONE, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BLACK + }, { // ? + 50, 150, 50, 150, 150, 50, + TYPE_NORMAL, + TYPE_NORMAL, + 3, // catch rate + 1, // base exp. yield + 2, 2, 2, 2, 2, 2, + ITEM_NONE, + ITEM_NONE, + 255, // gender + 120, // egg cycles + 0, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_UNDISCOVERED, + EGG_GROUP_UNDISCOVERED, + ABILITY_NONE, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BLACK + }, { // ? + 50, 150, 50, 150, 150, 50, + TYPE_NORMAL, + TYPE_NORMAL, + 3, // catch rate + 1, // base exp. yield + 2, 2, 2, 2, 2, 2, + ITEM_NONE, + ITEM_NONE, + 255, // gender + 120, // egg cycles + 0, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_UNDISCOVERED, + EGG_GROUP_UNDISCOVERED, + ABILITY_NONE, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BLACK + }, { // ? + 50, 150, 50, 150, 150, 50, + TYPE_NORMAL, + TYPE_NORMAL, + 3, // catch rate + 1, // base exp. yield + 2, 2, 2, 2, 2, 2, + ITEM_NONE, + ITEM_NONE, + 255, // gender + 120, // egg cycles + 0, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_UNDISCOVERED, + EGG_GROUP_UNDISCOVERED, + ABILITY_NONE, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BLACK + }, { // ? + 50, 150, 50, 150, 150, 50, + TYPE_NORMAL, + TYPE_NORMAL, + 3, // catch rate + 1, // base exp. yield + 2, 2, 2, 2, 2, 2, + ITEM_NONE, + ITEM_NONE, + 255, // gender + 120, // egg cycles + 0, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_UNDISCOVERED, + EGG_GROUP_UNDISCOVERED, + ABILITY_NONE, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BLACK + }, { // ? + 50, 150, 50, 150, 150, 50, + TYPE_NORMAL, + TYPE_NORMAL, + 3, // catch rate + 1, // base exp. yield + 2, 2, 2, 2, 2, 2, + ITEM_NONE, + ITEM_NONE, + 255, // gender + 120, // egg cycles + 0, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_UNDISCOVERED, + EGG_GROUP_UNDISCOVERED, + ABILITY_NONE, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BLACK + }, { // ? + 50, 150, 50, 150, 150, 50, + TYPE_NORMAL, + TYPE_NORMAL, + 3, // catch rate + 1, // base exp. yield + 2, 2, 2, 2, 2, 2, + ITEM_NONE, + ITEM_NONE, + 255, // gender + 120, // egg cycles + 0, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_UNDISCOVERED, + EGG_GROUP_UNDISCOVERED, + ABILITY_NONE, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BLACK + }, { // ? + 50, 150, 50, 150, 150, 50, + TYPE_NORMAL, + TYPE_NORMAL, + 3, // catch rate + 1, // base exp. yield + 2, 2, 2, 2, 2, 2, + ITEM_NONE, + ITEM_NONE, + 255, // gender + 120, // egg cycles + 0, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_UNDISCOVERED, + EGG_GROUP_UNDISCOVERED, + ABILITY_NONE, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BLACK + }, { // ? + 50, 150, 50, 150, 150, 50, + TYPE_NORMAL, + TYPE_NORMAL, + 3, // catch rate + 1, // base exp. yield + 2, 2, 2, 2, 2, 2, + ITEM_NONE, + ITEM_NONE, + 255, // gender + 120, // egg cycles + 0, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_UNDISCOVERED, + EGG_GROUP_UNDISCOVERED, + ABILITY_NONE, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BLACK + }, { // ? + 50, 150, 50, 150, 150, 50, + TYPE_NORMAL, + TYPE_NORMAL, + 3, // catch rate + 1, // base exp. yield + 2, 2, 2, 2, 2, 2, + ITEM_NONE, + ITEM_NONE, + 255, // gender + 120, // egg cycles + 0, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_UNDISCOVERED, + EGG_GROUP_UNDISCOVERED, + ABILITY_NONE, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BLACK + }, { // ? + 50, 150, 50, 150, 150, 50, + TYPE_NORMAL, + TYPE_NORMAL, + 3, // catch rate + 1, // base exp. yield + 2, 2, 2, 2, 2, 2, + ITEM_NONE, + ITEM_NONE, + 255, // gender + 120, // egg cycles + 0, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_UNDISCOVERED, + EGG_GROUP_UNDISCOVERED, + ABILITY_NONE, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BLACK + }, { // ? + 50, 150, 50, 150, 150, 50, + TYPE_NORMAL, + TYPE_NORMAL, + 3, // catch rate + 1, // base exp. yield + 2, 2, 2, 2, 2, 2, + ITEM_NONE, + ITEM_NONE, + 255, // gender + 120, // egg cycles + 0, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_UNDISCOVERED, + EGG_GROUP_UNDISCOVERED, + ABILITY_NONE, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BLACK + }, { // Treecko + 40, 45, 35, 70, 65, 55, + TYPE_GRASS, + TYPE_GRASS, + 45, // catch rate + 65, // base exp. yield + 0, 0, 0, 1, 0, 0, + ITEM_NONE, + ITEM_NONE, + 31, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_SLOW, + EGG_GROUP_MONSTER, + EGG_GROUP_DRAGON, + ABILITY_OVERGROW, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_GREEN + }, { // Grovyle + 50, 65, 45, 95, 85, 65, + TYPE_GRASS, + TYPE_GRASS, + 45, // catch rate + 141, // base exp. yield + 0, 0, 0, 2, 0, 0, + ITEM_NONE, + ITEM_NONE, + 31, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_SLOW, + EGG_GROUP_MONSTER, + EGG_GROUP_DRAGON, + ABILITY_OVERGROW, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_GREEN + }, { // Sceptile + 70, 85, 65, 120, 105, 85, + TYPE_GRASS, + TYPE_GRASS, + 45, // catch rate + 208, // base exp. yield + 0, 0, 0, 3, 0, 0, + ITEM_NONE, + ITEM_NONE, + 31, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_SLOW, + EGG_GROUP_MONSTER, + EGG_GROUP_DRAGON, + ABILITY_OVERGROW, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_GREEN + }, { // Torchic + 45, 60, 40, 45, 70, 50, + TYPE_FIRE, + TYPE_FIRE, + 45, // catch rate + 65, // base exp. yield + 0, 0, 0, 0, 1, 0, + ITEM_NONE, + ITEM_NONE, + 31, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_SLOW, + EGG_GROUP_FIELD, + EGG_GROUP_FIELD, + ABILITY_BLAZE, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_RED + }, { // Combusken + 60, 85, 60, 55, 85, 60, + TYPE_FIRE, + TYPE_FIGHTING, + 45, // catch rate + 142, // base exp. yield + 0, 1, 0, 0, 1, 0, + ITEM_NONE, + ITEM_NONE, + 31, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_SLOW, + EGG_GROUP_FIELD, + EGG_GROUP_FIELD, + ABILITY_BLAZE, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_RED + }, { // Blaziken + 80, 120, 70, 80, 110, 70, + TYPE_FIRE, + TYPE_FIGHTING, + 45, // catch rate + 209, // base exp. yield + 0, 3, 0, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 31, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_SLOW, + EGG_GROUP_FIELD, + EGG_GROUP_FIELD, + ABILITY_BLAZE, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_RED + }, { // Mudkip + 50, 70, 50, 40, 50, 50, + TYPE_WATER, + TYPE_WATER, + 45, // catch rate + 65, // base exp. yield + 0, 1, 0, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 31, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_SLOW, + EGG_GROUP_MONSTER, + EGG_GROUP_WATER_1, + ABILITY_TORRENT, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BLUE + }, { // Marshtomp + 70, 85, 70, 50, 60, 70, + TYPE_WATER, + TYPE_GROUND, + 45, // catch rate + 143, // base exp. yield + 0, 2, 0, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 31, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_SLOW, + EGG_GROUP_MONSTER, + EGG_GROUP_WATER_1, + ABILITY_TORRENT, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BLUE + }, { // Swampert + 100, 110, 90, 60, 85, 90, + TYPE_WATER, + TYPE_GROUND, + 45, // catch rate + 210, // base exp. yield + 0, 3, 0, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 31, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_SLOW, + EGG_GROUP_MONSTER, + EGG_GROUP_WATER_1, + ABILITY_TORRENT, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BLUE + }, { // Poochyena + 35, 55, 35, 35, 30, 30, + TYPE_DARK, + TYPE_DARK, + 255, // catch rate + 55, // base exp. yield + 0, 1, 0, 0, 0, 0, + ITEM_NONE, + ITEM_PECHA_BERRY, + 127, // gender + 15, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_FIELD, + EGG_GROUP_FIELD, + ABILITY_RUN_AWAY, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_GRAY + }, { // Mightyena + 70, 90, 70, 70, 60, 60, + TYPE_DARK, + TYPE_DARK, + 127, // catch rate + 128, // base exp. yield + 0, 2, 0, 0, 0, 0, + ITEM_NONE, + ITEM_PECHA_BERRY, + 127, // gender + 15, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_FIELD, + EGG_GROUP_FIELD, + ABILITY_INTIMIDATE, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_GRAY + }, { // Zigzagoon + 38, 30, 41, 60, 30, 41, + TYPE_NORMAL, + TYPE_NORMAL, + 255, // catch rate + 60, // base exp. yield + 0, 0, 0, 1, 0, 0, + ITEM_NONE, + ITEM_ORAN_BERRY, + 127, // gender + 15, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_FIELD, + EGG_GROUP_FIELD, + ABILITY_PICKUP, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BROWN + }, { // Linoone + 78, 70, 61, 100, 50, 61, + TYPE_NORMAL, + TYPE_NORMAL, + 90, // catch rate + 128, // base exp. yield + 0, 0, 0, 2, 0, 0, + ITEM_ORAN_BERRY, + ITEM_SITRUS_BERRY, + 127, // gender + 15, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_FIELD, + EGG_GROUP_FIELD, + ABILITY_PICKUP, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_WHITE + }, { // Wurmple + 45, 45, 35, 20, 20, 30, + TYPE_BUG, + TYPE_BUG, + 255, // catch rate + 54, // base exp. yield + 1, 0, 0, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 15, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_BUG, + EGG_GROUP_BUG, + ABILITY_SHIELD_DUST, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_RED + }, { // Silcoon + 50, 35, 55, 15, 25, 25, + TYPE_BUG, + TYPE_BUG, + 120, // catch rate + 71, // base exp. yield + 0, 0, 2, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 15, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_BUG, + EGG_GROUP_BUG, + ABILITY_SHED_SKIN, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_WHITE + }, { // Beautifly + 60, 70, 50, 65, 90, 50, + TYPE_BUG, + TYPE_FLYING, + 45, // catch rate + 161, // base exp. yield + 0, 0, 0, 0, 3, 0, + ITEM_NONE, + ITEM_SILVER_POWDER, + 127, // gender + 15, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_BUG, + EGG_GROUP_BUG, + ABILITY_SWARM, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_YELLOW + }, { // Cascoon + 50, 35, 55, 15, 25, 25, + TYPE_BUG, + TYPE_BUG, + 120, // catch rate + 72, // base exp. yield + 0, 0, 2, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 15, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_BUG, + EGG_GROUP_BUG, + ABILITY_SHED_SKIN, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_PURPLE + }, { // Dustox + 60, 50, 70, 65, 50, 90, + TYPE_BUG, + TYPE_POISON, + 45, // catch rate + 160, // base exp. yield + 0, 0, 0, 0, 0, 3, + ITEM_NONE, + ITEM_SILVER_POWDER, + 127, // gender + 15, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_BUG, + EGG_GROUP_BUG, + ABILITY_SHIELD_DUST, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_GREEN + }, { // Lotad + 40, 30, 30, 30, 40, 50, + TYPE_WATER, + TYPE_GRASS, + 255, // catch rate + 74, // base exp. yield + 0, 0, 0, 0, 0, 1, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 15, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_SLOW, + EGG_GROUP_WATER_1, + EGG_GROUP_GRASS, + ABILITY_SWIFT_SWIM, + ABILITY_RAIN_DISH, + 0, // Safari Zone flee rate + BODY_COLOR_GREEN + }, { // Lombre + 60, 50, 50, 50, 60, 70, + TYPE_WATER, + TYPE_GRASS, + 120, // catch rate + 141, // base exp. yield + 0, 0, 0, 0, 0, 2, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 15, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_SLOW, + EGG_GROUP_WATER_1, + EGG_GROUP_GRASS, + ABILITY_SWIFT_SWIM, + ABILITY_RAIN_DISH, + 0, // Safari Zone flee rate + BODY_COLOR_GREEN + }, { // Ludicolo + 80, 70, 70, 70, 90, 100, + TYPE_WATER, + TYPE_GRASS, + 45, // catch rate + 181, // base exp. yield + 0, 0, 0, 0, 0, 3, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 15, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_SLOW, + EGG_GROUP_WATER_1, + EGG_GROUP_GRASS, + ABILITY_SWIFT_SWIM, + ABILITY_RAIN_DISH, + 0, // Safari Zone flee rate + BODY_COLOR_GREEN + }, { // Seedot + 40, 40, 50, 30, 30, 30, + TYPE_GRASS, + TYPE_GRASS, + 255, // catch rate + 74, // base exp. yield + 0, 0, 1, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 15, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_SLOW, + EGG_GROUP_FIELD, + EGG_GROUP_GRASS, + ABILITY_CHLOROPHYLL, + ABILITY_EARLY_BIRD, + 0, // Safari Zone flee rate + BODY_COLOR_BROWN + }, { // Nuzleaf + 70, 70, 40, 60, 60, 40, + TYPE_GRASS, + TYPE_DARK, + 120, // catch rate + 141, // base exp. yield + 0, 2, 0, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 15, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_SLOW, + EGG_GROUP_FIELD, + EGG_GROUP_GRASS, + ABILITY_CHLOROPHYLL, + ABILITY_EARLY_BIRD, + 0, // Safari Zone flee rate + BODY_COLOR_BROWN + }, { // Shiftry + 90, 100, 60, 80, 90, 60, + TYPE_GRASS, + TYPE_DARK, + 45, // catch rate + 181, // base exp. yield + 0, 3, 0, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 15, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_SLOW, + EGG_GROUP_FIELD, + EGG_GROUP_GRASS, + ABILITY_CHLOROPHYLL, + ABILITY_EARLY_BIRD, + 0, // Safari Zone flee rate + BODY_COLOR_BROWN + }, { // Nincada + 31, 45, 90, 40, 30, 30, + TYPE_BUG, + TYPE_GROUND, + 255, // catch rate + 65, // base exp. yield + 0, 0, 1, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 15, // egg cycles + 70, // base friendship + GROWTH_ERRATIC, + EGG_GROUP_BUG, + EGG_GROUP_BUG, + ABILITY_COMPOUND_EYES, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_GRAY + }, { // Ninjask + 61, 90, 45, 160, 50, 50, + TYPE_BUG, + TYPE_FLYING, + 120, // catch rate + 155, // base exp. yield + 0, 0, 0, 2, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 15, // egg cycles + 70, // base friendship + GROWTH_ERRATIC, + EGG_GROUP_BUG, + EGG_GROUP_BUG, + ABILITY_SPEED_BOOST, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_YELLOW + }, { // Shedinja + 1, 90, 45, 40, 30, 30, + TYPE_BUG, + TYPE_GHOST, + 45, // catch rate + 95, // base exp. yield + 2, 0, 0, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 255, // gender + 15, // egg cycles + 70, // base friendship + GROWTH_ERRATIC, + EGG_GROUP_MINERAL, + EGG_GROUP_MINERAL, + ABILITY_WONDER_GUARD, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BROWN + }, { // Taillow + 40, 55, 30, 85, 30, 30, + TYPE_NORMAL, + TYPE_FLYING, + 200, // catch rate + 59, // base exp. yield + 0, 0, 0, 1, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 15, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_SLOW, + EGG_GROUP_FLYING, + EGG_GROUP_FLYING, + ABILITY_GUTS, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BLUE + }, { // Swellow + 60, 85, 60, 125, 50, 50, + TYPE_NORMAL, + TYPE_FLYING, + 45, // catch rate + 162, // base exp. yield + 0, 0, 0, 2, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 15, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_SLOW, + EGG_GROUP_FLYING, + EGG_GROUP_FLYING, + ABILITY_GUTS, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BLUE + }, { // Shroomish + 60, 40, 60, 35, 40, 60, + TYPE_GRASS, + TYPE_GRASS, + 255, // catch rate + 65, // base exp. yield + 1, 0, 0, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 15, // egg cycles + 70, // base friendship + GROWTH_FLUCTUATING, + EGG_GROUP_FAIRY, + EGG_GROUP_GRASS, + ABILITY_EFFECT_SPORE, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BROWN + }, { // Breloom + 60, 130, 80, 70, 60, 60, + TYPE_GRASS, + TYPE_FIGHTING, + 90, // catch rate + 165, // base exp. yield + 0, 2, 0, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 15, // egg cycles + 70, // base friendship + GROWTH_FLUCTUATING, + EGG_GROUP_FAIRY, + EGG_GROUP_GRASS, + ABILITY_EFFECT_SPORE, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_GREEN + }, { // Spinda + 60, 60, 60, 60, 60, 60, + TYPE_NORMAL, + TYPE_NORMAL, + 255, // catch rate + 85, // base exp. yield + 0, 0, 0, 0, 1, 0, + ITEM_NONE, + ITEM_CHESTO_BERRY, + 127, // gender + 15, // egg cycles + 70, // base friendship + GROWTH_FAST, + EGG_GROUP_FIELD, + EGG_GROUP_HUMAN_LIKE, + ABILITY_OWN_TEMPO, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BROWN, TRUE + }, { // Wingull + 40, 30, 30, 85, 55, 30, + TYPE_WATER, + TYPE_FLYING, + 190, // catch rate + 64, // base exp. yield + 0, 0, 0, 1, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_WATER_1, + EGG_GROUP_FLYING, + ABILITY_KEEN_EYE, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_WHITE + }, { // Pelipper + 60, 50, 100, 65, 85, 70, + TYPE_WATER, + TYPE_FLYING, + 45, // catch rate + 164, // base exp. yield + 0, 0, 2, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_WATER_1, + EGG_GROUP_FLYING, + ABILITY_KEEN_EYE, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_YELLOW + }, { // Surskit + 40, 30, 32, 65, 50, 52, + TYPE_BUG, + TYPE_WATER, + 200, // catch rate + 63, // base exp. yield + 0, 0, 0, 1, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 15, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_WATER_1, + EGG_GROUP_BUG, + ABILITY_SWIFT_SWIM, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BLUE + }, { // Masquerain + 70, 60, 62, 60, 80, 82, + TYPE_BUG, + TYPE_FLYING, + 75, // catch rate + 128, // base exp. yield + 0, 0, 0, 0, 1, 1, + ITEM_NONE, + ITEM_SILVER_POWDER, + 127, // gender + 15, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_WATER_1, + EGG_GROUP_BUG, + ABILITY_INTIMIDATE, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BLUE + }, { // Wailmer + 130, 70, 35, 60, 70, 35, + TYPE_WATER, + TYPE_WATER, + 125, // catch rate + 137, // base exp. yield + 1, 0, 0, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 40, // egg cycles + 70, // base friendship + GROWTH_FLUCTUATING, + EGG_GROUP_FIELD, + EGG_GROUP_WATER_2, + ABILITY_WATER_VEIL, + ABILITY_OBLIVIOUS, + 0, // Safari Zone flee rate + BODY_COLOR_BLUE + }, { // Wailord + 170, 90, 45, 60, 90, 45, + TYPE_WATER, + TYPE_WATER, + 60, // catch rate + 206, // base exp. yield + 2, 0, 0, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 40, // egg cycles + 70, // base friendship + GROWTH_FLUCTUATING, + EGG_GROUP_FIELD, + EGG_GROUP_WATER_2, + ABILITY_WATER_VEIL, + ABILITY_OBLIVIOUS, + 0, // Safari Zone flee rate + BODY_COLOR_BLUE + }, { // Skitty + 50, 45, 45, 50, 35, 35, + TYPE_NORMAL, + TYPE_NORMAL, + 255, // catch rate + 65, // base exp. yield + 0, 0, 0, 1, 0, 0, + ITEM_NONE, + ITEM_LEPPA_BERRY, + 191, // gender + 15, // egg cycles + 70, // base friendship + GROWTH_FAST, + EGG_GROUP_FIELD, + EGG_GROUP_FAIRY, + ABILITY_CUTE_CHARM, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_PINK + }, { // Delcatty + 70, 65, 65, 70, 55, 55, + TYPE_NORMAL, + TYPE_NORMAL, + 60, // catch rate + 138, // base exp. yield + 1, 0, 0, 1, 0, 0, + ITEM_NONE, + ITEM_LEPPA_BERRY, + 191, // gender + 15, // egg cycles + 70, // base friendship + GROWTH_FAST, + EGG_GROUP_FIELD, + EGG_GROUP_FAIRY, + ABILITY_CUTE_CHARM, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_PURPLE + }, { // Kecleon + 60, 90, 70, 40, 60, 120, + TYPE_NORMAL, + TYPE_NORMAL, + 200, // catch rate + 132, // base exp. yield + 0, 0, 0, 0, 0, 1, + ITEM_NONE, + ITEM_PERSIM_BERRY, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_SLOW, + EGG_GROUP_FIELD, + EGG_GROUP_FIELD, + ABILITY_COLOR_CHANGE, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_GREEN + }, { // Baltoy + 40, 40, 55, 55, 40, 70, + TYPE_GROUND, + TYPE_PSYCHIC, + 255, // catch rate + 58, // base exp. yield + 0, 0, 0, 0, 0, 1, + ITEM_NONE, + ITEM_NONE, + 255, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_MINERAL, + EGG_GROUP_MINERAL, + ABILITY_LEVITATE, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BROWN + }, { // Claydol + 60, 70, 105, 75, 70, 120, + TYPE_GROUND, + TYPE_PSYCHIC, + 90, // catch rate + 189, // base exp. yield + 0, 0, 0, 0, 0, 2, + ITEM_NONE, + ITEM_NONE, + 255, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_MINERAL, + EGG_GROUP_MINERAL, + ABILITY_LEVITATE, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BLACK + }, { // Nosepass + 30, 45, 135, 30, 45, 90, + TYPE_ROCK, + TYPE_ROCK, + 255, // catch rate + 108, // base exp. yield + 0, 0, 1, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_MINERAL, + EGG_GROUP_MINERAL, + ABILITY_STURDY, + ABILITY_MAGNET_PULL, + 0, // Safari Zone flee rate + BODY_COLOR_GRAY + }, { // Torkoal + 70, 85, 140, 20, 85, 70, + TYPE_FIRE, + TYPE_FIRE, + 90, // catch rate + 161, // base exp. yield + 0, 0, 2, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_FIELD, + EGG_GROUP_FIELD, + ABILITY_WHITE_SMOKE, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BROWN + }, { // Sableye + 50, 75, 75, 50, 65, 65, + TYPE_DARK, + TYPE_GHOST, + 45, // catch rate + 98, // base exp. yield + 0, 1, 1, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 25, // egg cycles + 35, // base friendship + GROWTH_MEDIUM_SLOW, + EGG_GROUP_HUMAN_LIKE, + EGG_GROUP_HUMAN_LIKE, + ABILITY_KEEN_EYE, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_PURPLE + }, { // Barboach + 50, 48, 43, 60, 46, 41, + TYPE_WATER, + TYPE_GROUND, + 190, // catch rate + 92, // base exp. yield + 1, 0, 0, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_WATER_2, + EGG_GROUP_WATER_2, + ABILITY_OBLIVIOUS, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_GRAY + }, { // Whiscash + 110, 78, 73, 60, 76, 71, + TYPE_WATER, + TYPE_GROUND, + 75, // catch rate + 158, // base exp. yield + 2, 0, 0, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_WATER_2, + EGG_GROUP_WATER_2, + ABILITY_OBLIVIOUS, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BLUE + }, { // Luvdisc + 43, 30, 55, 97, 40, 65, + TYPE_WATER, + TYPE_WATER, + 225, // catch rate + 110, // base exp. yield + 0, 0, 0, 1, 0, 0, + ITEM_HEART_SCALE, + ITEM_NONE, + 191, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_FAST, + EGG_GROUP_WATER_2, + EGG_GROUP_WATER_2, + ABILITY_SWIFT_SWIM, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_PINK + }, { // Corphish + 43, 80, 65, 35, 50, 35, + TYPE_WATER, + TYPE_WATER, + 205, // catch rate + 111, // base exp. yield + 0, 1, 0, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 15, // egg cycles + 70, // base friendship + GROWTH_FLUCTUATING, + EGG_GROUP_WATER_1, + EGG_GROUP_WATER_3, + ABILITY_HYPER_CUTTER, + ABILITY_SHELL_ARMOR, + 0, // Safari Zone flee rate + BODY_COLOR_RED + }, { // Crawdaunt + 63, 120, 85, 55, 90, 55, + TYPE_WATER, + TYPE_DARK, + 155, // catch rate + 161, // base exp. yield + 0, 2, 0, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 15, // egg cycles + 70, // base friendship + GROWTH_FLUCTUATING, + EGG_GROUP_WATER_1, + EGG_GROUP_WATER_3, + ABILITY_HYPER_CUTTER, + ABILITY_SHELL_ARMOR, + 0, // Safari Zone flee rate + BODY_COLOR_RED + }, { // Feebas + 20, 15, 20, 80, 10, 55, + TYPE_WATER, + TYPE_WATER, + 255, // catch rate + 61, // base exp. yield + 0, 0, 0, 1, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_ERRATIC, + EGG_GROUP_WATER_1, + EGG_GROUP_DRAGON, + ABILITY_SWIFT_SWIM, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BROWN + }, { // Milotic + 95, 60, 79, 81, 100, 125, + TYPE_WATER, + TYPE_WATER, + 60, // catch rate + 213, // base exp. yield + 0, 0, 0, 0, 0, 2, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_ERRATIC, + EGG_GROUP_WATER_1, + EGG_GROUP_DRAGON, + ABILITY_MARVEL_SCALE, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_PINK + }, { // Carvanha + 45, 90, 20, 65, 65, 20, + TYPE_WATER, + TYPE_DARK, + 225, // catch rate + 88, // base exp. yield + 0, 1, 0, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 35, // base friendship + GROWTH_SLOW, + EGG_GROUP_WATER_2, + EGG_GROUP_WATER_2, + ABILITY_ROUGH_SKIN, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_RED + }, { // Sharpedo + 70, 120, 40, 95, 95, 40, + TYPE_WATER, + TYPE_DARK, + 60, // catch rate + 175, // base exp. yield + 0, 2, 0, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 35, // base friendship + GROWTH_SLOW, + EGG_GROUP_WATER_2, + EGG_GROUP_WATER_2, + ABILITY_ROUGH_SKIN, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BLUE + }, { // Trapinch + 45, 100, 45, 10, 45, 45, + TYPE_GROUND, + TYPE_GROUND, + 255, // catch rate + 73, // base exp. yield + 0, 1, 0, 0, 0, 0, + ITEM_NONE, + ITEM_SOFT_SAND, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_SLOW, + EGG_GROUP_BUG, + EGG_GROUP_BUG, + ABILITY_HYPER_CUTTER, + ABILITY_ARENA_TRAP, + 0, // Safari Zone flee rate + BODY_COLOR_BROWN + }, { // Vibrava + 50, 70, 50, 70, 50, 50, + TYPE_GROUND, + TYPE_DRAGON, + 120, // catch rate + 126, // base exp. yield + 0, 1, 0, 1, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_SLOW, + EGG_GROUP_BUG, + EGG_GROUP_BUG, + ABILITY_LEVITATE, + ABILITY_LEVITATE, + 0, // Safari Zone flee rate + BODY_COLOR_GREEN + }, { // Flygon + 80, 100, 80, 100, 80, 80, + TYPE_GROUND, + TYPE_DRAGON, + 45, // catch rate + 197, // base exp. yield + 0, 1, 0, 2, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_SLOW, + EGG_GROUP_BUG, + EGG_GROUP_BUG, + ABILITY_LEVITATE, + ABILITY_LEVITATE, + 0, // Safari Zone flee rate + BODY_COLOR_GREEN + }, { // Makuhita + 72, 60, 30, 25, 20, 30, + TYPE_FIGHTING, + TYPE_FIGHTING, + 180, // catch rate + 87, // base exp. yield + 1, 0, 0, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 63, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_FLUCTUATING, + EGG_GROUP_HUMAN_LIKE, + EGG_GROUP_HUMAN_LIKE, + ABILITY_THICK_FAT, + ABILITY_GUTS, + 0, // Safari Zone flee rate + BODY_COLOR_YELLOW + }, { // Hariyama + 144, 120, 60, 50, 40, 60, + TYPE_FIGHTING, + TYPE_FIGHTING, + 200, // catch rate + 184, // base exp. yield + 2, 0, 0, 0, 0, 0, + ITEM_NONE, + ITEM_KINGS_ROCK, + 63, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_FLUCTUATING, + EGG_GROUP_HUMAN_LIKE, + EGG_GROUP_HUMAN_LIKE, + ABILITY_THICK_FAT, + ABILITY_GUTS, + 0, // Safari Zone flee rate + BODY_COLOR_BROWN + }, { // Electrike + 40, 45, 40, 65, 65, 40, + TYPE_ELECTRIC, + TYPE_ELECTRIC, + 120, // catch rate + 104, // base exp. yield + 0, 0, 0, 1, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_SLOW, + EGG_GROUP_FIELD, + EGG_GROUP_FIELD, + ABILITY_STATIC, + ABILITY_LIGHTNING_ROD, + 0, // Safari Zone flee rate + BODY_COLOR_GREEN + }, { // Manectric + 70, 75, 60, 105, 105, 60, + TYPE_ELECTRIC, + TYPE_ELECTRIC, + 45, // catch rate + 168, // base exp. yield + 0, 0, 0, 2, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_SLOW, + EGG_GROUP_FIELD, + EGG_GROUP_FIELD, + ABILITY_STATIC, + ABILITY_LIGHTNING_ROD, + 0, // Safari Zone flee rate + BODY_COLOR_YELLOW + }, { // Numel + 60, 60, 40, 35, 65, 45, + TYPE_FIRE, + TYPE_GROUND, + 255, // catch rate + 88, // base exp. yield + 0, 0, 0, 0, 1, 0, + ITEM_RAWST_BERRY, + ITEM_RAWST_BERRY, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_FIELD, + EGG_GROUP_FIELD, + ABILITY_OBLIVIOUS, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_YELLOW + }, { // Camerupt + 70, 100, 70, 40, 105, 75, + TYPE_FIRE, + TYPE_GROUND, + 150, // catch rate + 175, // base exp. yield + 0, 1, 0, 0, 1, 0, + ITEM_RAWST_BERRY, + ITEM_RAWST_BERRY, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_FIELD, + EGG_GROUP_FIELD, + ABILITY_MAGMA_ARMOR, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_RED + }, { // Spheal + 70, 40, 50, 25, 55, 50, + TYPE_ICE, + TYPE_WATER, + 255, // catch rate + 75, // base exp. yield + 1, 0, 0, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_SLOW, + EGG_GROUP_WATER_1, + EGG_GROUP_FIELD, + ABILITY_THICK_FAT, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BLUE + }, { // Sealeo + 90, 60, 70, 45, 75, 70, + TYPE_ICE, + TYPE_WATER, + 120, // catch rate + 128, // base exp. yield + 2, 0, 0, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_SLOW, + EGG_GROUP_WATER_1, + EGG_GROUP_FIELD, + ABILITY_THICK_FAT, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BLUE + }, { // Walrein + 110, 80, 90, 65, 95, 90, + TYPE_ICE, + TYPE_WATER, + 45, // catch rate + 192, // base exp. yield + 3, 0, 0, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_SLOW, + EGG_GROUP_WATER_1, + EGG_GROUP_FIELD, + ABILITY_THICK_FAT, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BLUE + }, { // Cacnea + 50, 85, 40, 35, 85, 40, + TYPE_GRASS, + TYPE_GRASS, + 190, // catch rate + 97, // base exp. yield + 0, 0, 0, 0, 1, 0, + ITEM_NONE, + ITEM_POISON_BARB, + 127, // gender + 20, // egg cycles + 35, // base friendship + GROWTH_MEDIUM_SLOW, + EGG_GROUP_GRASS, + EGG_GROUP_HUMAN_LIKE, + ABILITY_SAND_VEIL, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_GREEN + }, { // Cacturne + 70, 115, 60, 55, 115, 60, + TYPE_GRASS, + TYPE_DARK, + 60, // catch rate + 177, // base exp. yield + 0, 1, 0, 0, 1, 0, + ITEM_NONE, + ITEM_POISON_BARB, + 127, // gender + 20, // egg cycles + 35, // base friendship + GROWTH_MEDIUM_SLOW, + EGG_GROUP_GRASS, + EGG_GROUP_HUMAN_LIKE, + ABILITY_SAND_VEIL, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_GREEN + }, { // Snorunt + 50, 50, 50, 50, 50, 50, + TYPE_ICE, + TYPE_ICE, + 190, // catch rate + 74, // base exp. yield + 1, 0, 0, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_FAIRY, + EGG_GROUP_MINERAL, + ABILITY_INNER_FOCUS, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_GRAY + }, { // Glalie + 80, 80, 80, 80, 80, 80, + TYPE_ICE, + TYPE_ICE, + 75, // catch rate + 187, // base exp. yield + 2, 0, 0, 0, 0, 0, + ITEM_NONE, + ITEM_NEVER_MELT_ICE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_FAIRY, + EGG_GROUP_MINERAL, + ABILITY_INNER_FOCUS, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_GRAY + }, { // Lunatone + 70, 55, 65, 70, 95, 85, + TYPE_ROCK, + TYPE_PSYCHIC, + 45, // catch rate + 150, // base exp. yield + 0, 0, 0, 0, 2, 0, + ITEM_NONE, + ITEM_MOON_STONE, + 255, // gender + 25, // egg cycles + 70, // base friendship + GROWTH_FAST, + EGG_GROUP_MINERAL, + EGG_GROUP_MINERAL, + ABILITY_LEVITATE, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_YELLOW + }, { // Solrock + 70, 95, 85, 70, 55, 65, + TYPE_ROCK, + TYPE_PSYCHIC, + 45, // catch rate + 150, // base exp. yield + 0, 2, 0, 0, 0, 0, + ITEM_NONE, + ITEM_SUN_STONE, + 255, // gender + 25, // egg cycles + 70, // base friendship + GROWTH_FAST, + EGG_GROUP_MINERAL, + EGG_GROUP_MINERAL, + ABILITY_LEVITATE, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_RED + }, { // Azurill + 50, 20, 40, 20, 20, 40, + TYPE_NORMAL, + TYPE_NORMAL, + 150, // catch rate + 33, // base exp. yield + 1, 0, 0, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 191, // gender + 10, // egg cycles + 70, // base friendship + GROWTH_FAST, + EGG_GROUP_UNDISCOVERED, + EGG_GROUP_UNDISCOVERED, + ABILITY_THICK_FAT, + ABILITY_HUGE_POWER, + 0, // Safari Zone flee rate + BODY_COLOR_BLUE + }, { // Spoink + 60, 25, 35, 60, 70, 80, + TYPE_PSYCHIC, + TYPE_PSYCHIC, + 255, // catch rate + 89, // base exp. yield + 0, 0, 0, 0, 0, 1, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_FAST, + EGG_GROUP_FIELD, + EGG_GROUP_FIELD, + ABILITY_THICK_FAT, + ABILITY_OWN_TEMPO, + 0, // Safari Zone flee rate + BODY_COLOR_BLACK + }, { // Grumpig + 80, 45, 65, 80, 90, 110, + TYPE_PSYCHIC, + TYPE_PSYCHIC, + 60, // catch rate + 164, // base exp. yield + 0, 0, 0, 0, 0, 2, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_FAST, + EGG_GROUP_FIELD, + EGG_GROUP_FIELD, + ABILITY_THICK_FAT, + ABILITY_OWN_TEMPO, + 0, // Safari Zone flee rate + BODY_COLOR_PURPLE + }, { // Plusle + 60, 50, 40, 95, 85, 75, + TYPE_ELECTRIC, + TYPE_ELECTRIC, + 200, // catch rate + 120, // base exp. yield + 0, 0, 0, 1, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_FAIRY, + EGG_GROUP_FAIRY, + ABILITY_PLUS, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_YELLOW + }, { // Minun + 60, 40, 50, 95, 75, 85, + TYPE_ELECTRIC, + TYPE_ELECTRIC, + 200, // catch rate + 120, // base exp. yield + 0, 0, 0, 1, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_FAIRY, + EGG_GROUP_FAIRY, + ABILITY_MINUS, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_YELLOW + }, { // Mawile + 50, 85, 85, 50, 55, 55, + TYPE_STEEL, + TYPE_STEEL, + 45, // catch rate + 98, // base exp. yield + 0, 1, 1, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_FAST, + EGG_GROUP_FIELD, + EGG_GROUP_FAIRY, + ABILITY_HYPER_CUTTER, + ABILITY_INTIMIDATE, + 0, // Safari Zone flee rate + BODY_COLOR_BLACK + }, { // Meditite + 30, 40, 55, 60, 40, 55, + TYPE_FIGHTING, + TYPE_PSYCHIC, + 180, // catch rate + 91, // base exp. yield + 0, 0, 0, 1, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_HUMAN_LIKE, + EGG_GROUP_HUMAN_LIKE, + ABILITY_PURE_POWER, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BLUE + }, { // Medicham + 60, 60, 75, 80, 60, 75, + TYPE_FIGHTING, + TYPE_PSYCHIC, + 90, // catch rate + 153, // base exp. yield + 0, 0, 0, 2, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_HUMAN_LIKE, + EGG_GROUP_HUMAN_LIKE, + ABILITY_PURE_POWER, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_RED + }, { // Swablu + 45, 40, 60, 50, 40, 75, + TYPE_NORMAL, + TYPE_FLYING, + 255, // catch rate + 74, // base exp. yield + 0, 0, 0, 0, 0, 1, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_ERRATIC, + EGG_GROUP_FLYING, + EGG_GROUP_DRAGON, + ABILITY_NATURAL_CURE, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BLUE + }, { // Altaria + 75, 70, 90, 80, 70, 105, + TYPE_DRAGON, + TYPE_FLYING, + 45, // catch rate + 188, // base exp. yield + 0, 0, 0, 0, 0, 2, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_ERRATIC, + EGG_GROUP_FLYING, + EGG_GROUP_DRAGON, + ABILITY_NATURAL_CURE, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BLUE + }, { // Wynaut + 95, 23, 48, 23, 23, 48, + TYPE_PSYCHIC, + TYPE_PSYCHIC, + 125, // catch rate + 44, // base exp. yield + 1, 0, 0, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_UNDISCOVERED, + EGG_GROUP_UNDISCOVERED, + ABILITY_SHADOW_TAG, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BLUE + }, { // Duskull + 20, 40, 90, 25, 30, 90, + TYPE_GHOST, + TYPE_GHOST, + 190, // catch rate + 97, // base exp. yield + 0, 0, 1, 0, 0, 1, + ITEM_NONE, + ITEM_SPELL_TAG, + 127, // gender + 25, // egg cycles + 35, // base friendship + GROWTH_FAST, + EGG_GROUP_AMORPHOUS, + EGG_GROUP_AMORPHOUS, + ABILITY_LEVITATE, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BLACK + }, { // Dusclops + 40, 70, 130, 25, 60, 130, + TYPE_GHOST, + TYPE_GHOST, + 90, // catch rate + 179, // base exp. yield + 0, 0, 1, 0, 0, 2, + ITEM_NONE, + ITEM_SPELL_TAG, + 127, // gender + 25, // egg cycles + 35, // base friendship + GROWTH_FAST, + EGG_GROUP_AMORPHOUS, + EGG_GROUP_AMORPHOUS, + ABILITY_PRESSURE, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BLACK + }, { // Roselia + 50, 60, 45, 65, 100, 80, + TYPE_GRASS, + TYPE_POISON, + 150, // catch rate + 152, // base exp. yield + 0, 0, 0, 0, 1, 0, + ITEM_NONE, + ITEM_POISON_BARB, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_SLOW, + EGG_GROUP_FAIRY, + EGG_GROUP_GRASS, + ABILITY_NATURAL_CURE, + ABILITY_POISON_POINT, + 0, // Safari Zone flee rate + BODY_COLOR_GREEN, TRUE + }, { // Slakoth + 60, 60, 60, 30, 35, 35, + TYPE_NORMAL, + TYPE_NORMAL, + 255, // catch rate + 83, // base exp. yield + 1, 0, 0, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 15, // egg cycles + 70, // base friendship + GROWTH_SLOW, + EGG_GROUP_FIELD, + EGG_GROUP_FIELD, + ABILITY_TRUANT, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BROWN + }, { // Vigoroth + 80, 80, 80, 90, 55, 55, + TYPE_NORMAL, + TYPE_NORMAL, + 120, // catch rate + 126, // base exp. yield + 0, 0, 0, 2, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 15, // egg cycles + 70, // base friendship + GROWTH_SLOW, + EGG_GROUP_FIELD, + EGG_GROUP_FIELD, + ABILITY_VITAL_SPIRIT, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_WHITE + }, { // Slaking + 150, 160, 100, 100, 95, 65, + TYPE_NORMAL, + TYPE_NORMAL, + 45, // catch rate + 210, // base exp. yield + 3, 0, 0, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 15, // egg cycles + 70, // base friendship + GROWTH_SLOW, + EGG_GROUP_FIELD, + EGG_GROUP_FIELD, + ABILITY_TRUANT, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BROWN + }, { // Gulpin + 70, 43, 53, 40, 43, 53, + TYPE_POISON, + TYPE_POISON, + 225, // catch rate + 75, // base exp. yield + 1, 0, 0, 0, 0, 0, + ITEM_NONE, + ITEM_BIG_PEARL, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_FLUCTUATING, + EGG_GROUP_AMORPHOUS, + EGG_GROUP_AMORPHOUS, + ABILITY_LIQUID_OOZE, + ABILITY_STICKY_HOLD, + 0, // Safari Zone flee rate + BODY_COLOR_GREEN + }, { // Swalot + 100, 73, 83, 55, 73, 83, + TYPE_POISON, + TYPE_POISON, + 75, // catch rate + 168, // base exp. yield + 2, 0, 0, 0, 0, 0, + ITEM_NONE, + ITEM_BIG_PEARL, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_FLUCTUATING, + EGG_GROUP_AMORPHOUS, + EGG_GROUP_AMORPHOUS, + ABILITY_LIQUID_OOZE, + ABILITY_STICKY_HOLD, + 0, // Safari Zone flee rate + BODY_COLOR_PURPLE + }, { // Tropius + 99, 68, 83, 51, 72, 87, + TYPE_GRASS, + TYPE_FLYING, + 200, // catch rate + 169, // base exp. yield + 2, 0, 0, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 25, // egg cycles + 70, // base friendship + GROWTH_SLOW, + EGG_GROUP_MONSTER, + EGG_GROUP_GRASS, + ABILITY_CHLOROPHYLL, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_GREEN + }, { // Whismur + 64, 51, 23, 28, 51, 23, + TYPE_NORMAL, + TYPE_NORMAL, + 190, // catch rate + 68, // base exp. yield + 1, 0, 0, 0, 0, 0, + ITEM_NONE, + ITEM_CHESTO_BERRY, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_SLOW, + EGG_GROUP_MONSTER, + EGG_GROUP_FIELD, + ABILITY_SOUNDPROOF, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_PINK + }, { // Loudred + 84, 71, 43, 48, 71, 43, + TYPE_NORMAL, + TYPE_NORMAL, + 120, // catch rate + 126, // base exp. yield + 2, 0, 0, 0, 0, 0, + ITEM_NONE, + ITEM_CHESTO_BERRY, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_SLOW, + EGG_GROUP_MONSTER, + EGG_GROUP_FIELD, + ABILITY_SOUNDPROOF, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BLUE + }, { // Exploud + 104, 91, 63, 68, 91, 63, + TYPE_NORMAL, + TYPE_NORMAL, + 45, // catch rate + 184, // base exp. yield + 3, 0, 0, 0, 0, 0, + ITEM_NONE, + ITEM_CHESTO_BERRY, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_SLOW, + EGG_GROUP_MONSTER, + EGG_GROUP_FIELD, + ABILITY_SOUNDPROOF, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BLUE + }, { // Clamperl + 35, 64, 85, 32, 74, 55, + TYPE_WATER, + TYPE_WATER, + 255, // catch rate + 142, // base exp. yield + 0, 0, 1, 0, 0, 0, + ITEM_NONE, + ITEM_BLUE_SHARD, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_ERRATIC, + EGG_GROUP_WATER_1, + EGG_GROUP_WATER_1, + ABILITY_SHELL_ARMOR, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BLUE + }, { // Huntail + 55, 104, 105, 52, 94, 75, + TYPE_WATER, + TYPE_WATER, + 60, // catch rate + 178, // base exp. yield + 0, 1, 1, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_ERRATIC, + EGG_GROUP_WATER_1, + EGG_GROUP_WATER_1, + ABILITY_SWIFT_SWIM, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BLUE + }, { // Gorebyss + 55, 84, 105, 52, 114, 75, + TYPE_WATER, + TYPE_WATER, + 60, // catch rate + 178, // base exp. yield + 0, 0, 0, 0, 2, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_ERRATIC, + EGG_GROUP_WATER_1, + EGG_GROUP_WATER_1, + ABILITY_SWIFT_SWIM, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_PINK + }, { // Absol + 65, 130, 60, 75, 75, 60, + TYPE_DARK, + TYPE_DARK, + 30, // catch rate + 174, // base exp. yield + 0, 2, 0, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 25, // egg cycles + 35, // base friendship + GROWTH_MEDIUM_SLOW, + EGG_GROUP_FIELD, + EGG_GROUP_FIELD, + ABILITY_PRESSURE, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_WHITE, TRUE + }, { // Shuppet + 44, 75, 35, 45, 63, 33, + TYPE_GHOST, + TYPE_GHOST, + 225, // catch rate + 97, // base exp. yield + 0, 1, 0, 0, 0, 0, + ITEM_NONE, + ITEM_SPELL_TAG, + 127, // gender + 25, // egg cycles + 35, // base friendship + GROWTH_FAST, + EGG_GROUP_AMORPHOUS, + EGG_GROUP_AMORPHOUS, + ABILITY_INSOMNIA, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BLACK + }, { // Banette + 64, 115, 65, 65, 83, 63, + TYPE_GHOST, + TYPE_GHOST, + 45, // catch rate + 179, // base exp. yield + 0, 2, 0, 0, 0, 0, + ITEM_NONE, + ITEM_SPELL_TAG, + 127, // gender + 25, // egg cycles + 35, // base friendship + GROWTH_FAST, + EGG_GROUP_AMORPHOUS, + EGG_GROUP_AMORPHOUS, + ABILITY_INSOMNIA, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BLACK + }, { // Seviper + 73, 100, 60, 65, 100, 60, + TYPE_POISON, + TYPE_POISON, + 90, // catch rate + 165, // base exp. yield + 0, 1, 0, 0, 1, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_FLUCTUATING, + EGG_GROUP_FIELD, + EGG_GROUP_DRAGON, + ABILITY_SHED_SKIN, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BLACK, TRUE + }, { // Zangoose + 73, 115, 60, 90, 60, 60, + TYPE_NORMAL, + TYPE_NORMAL, + 90, // catch rate + 165, // base exp. yield + 0, 2, 0, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 70, // base friendship + GROWTH_ERRATIC, + EGG_GROUP_FIELD, + EGG_GROUP_FIELD, + ABILITY_IMMUNITY, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_WHITE, TRUE + }, { // Relicanth + 100, 90, 130, 55, 45, 65, + TYPE_WATER, + TYPE_ROCK, + 25, // catch rate + 198, // base exp. yield + 1, 0, 1, 0, 0, 0, + ITEM_NONE, + ITEM_GREEN_SHARD, + 31, // gender + 40, // egg cycles + 70, // base friendship + GROWTH_SLOW, + EGG_GROUP_WATER_1, + EGG_GROUP_WATER_2, + ABILITY_SWIFT_SWIM, + ABILITY_ROCK_HEAD, + 0, // Safari Zone flee rate + BODY_COLOR_GRAY + }, { // Aron + 50, 70, 100, 30, 40, 40, + TYPE_STEEL, + TYPE_ROCK, + 180, // catch rate + 96, // base exp. yield + 0, 0, 1, 0, 0, 0, + ITEM_NONE, + ITEM_HARD_STONE, + 127, // gender + 35, // egg cycles + 35, // base friendship + GROWTH_SLOW, + EGG_GROUP_MONSTER, + EGG_GROUP_MONSTER, + ABILITY_STURDY, + ABILITY_ROCK_HEAD, + 0, // Safari Zone flee rate + BODY_COLOR_GRAY + }, { // Lairon + 60, 90, 140, 40, 50, 50, + TYPE_STEEL, + TYPE_ROCK, + 90, // catch rate + 152, // base exp. yield + 0, 0, 2, 0, 0, 0, + ITEM_NONE, + ITEM_HARD_STONE, + 127, // gender + 35, // egg cycles + 35, // base friendship + GROWTH_SLOW, + EGG_GROUP_MONSTER, + EGG_GROUP_MONSTER, + ABILITY_STURDY, + ABILITY_ROCK_HEAD, + 0, // Safari Zone flee rate + BODY_COLOR_GRAY + }, { // Aggron + 70, 110, 180, 50, 60, 60, + TYPE_STEEL, + TYPE_ROCK, + 45, // catch rate + 205, // base exp. yield + 0, 0, 3, 0, 0, 0, + ITEM_NONE, + ITEM_HARD_STONE, + 127, // gender + 35, // egg cycles + 35, // base friendship + GROWTH_SLOW, + EGG_GROUP_MONSTER, + EGG_GROUP_MONSTER, + ABILITY_STURDY, + ABILITY_ROCK_HEAD, + 0, // Safari Zone flee rate + BODY_COLOR_GRAY + }, { // Castform + 70, 70, 70, 70, 70, 70, + TYPE_NORMAL, + TYPE_NORMAL, + 45, // catch rate + 145, // base exp. yield + 1, 0, 0, 0, 0, 0, + ITEM_MYSTIC_WATER, + ITEM_MYSTIC_WATER, + 127, // gender + 25, // egg cycles + 70, // base friendship + GROWTH_MEDIUM_FAST, + EGG_GROUP_FAIRY, + EGG_GROUP_AMORPHOUS, + ABILITY_FORECAST, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_WHITE + }, { // Volbeat + 65, 73, 55, 85, 47, 75, + TYPE_BUG, + TYPE_BUG, + 150, // catch rate + 146, // base exp. yield + 0, 0, 0, 1, 0, 0, + ITEM_NONE, + ITEM_NONE, + 0, // gender + 15, // egg cycles + 70, // base friendship + GROWTH_ERRATIC, + EGG_GROUP_BUG, + EGG_GROUP_HUMAN_LIKE, + ABILITY_ILLUMINATE, + ABILITY_SWARM, + 0, // Safari Zone flee rate + BODY_COLOR_GRAY + }, { // Illumise + 65, 47, 55, 85, 73, 75, + TYPE_BUG, + TYPE_BUG, + 150, // catch rate + 146, // base exp. yield + 0, 0, 0, 1, 0, 0, + ITEM_NONE, + ITEM_NONE, + 254, // gender + 15, // egg cycles + 70, // base friendship + GROWTH_FLUCTUATING, + EGG_GROUP_BUG, + EGG_GROUP_HUMAN_LIKE, + ABILITY_OBLIVIOUS, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_PURPLE + }, { // Lileep + 66, 41, 77, 23, 61, 87, + TYPE_ROCK, + TYPE_GRASS, + 45, // catch rate + 121, // base exp. yield + 0, 0, 0, 0, 0, 1, + ITEM_NONE, + ITEM_NONE, + 31, // gender + 30, // egg cycles + 70, // base friendship + GROWTH_ERRATIC, + EGG_GROUP_WATER_3, + EGG_GROUP_WATER_3, + ABILITY_SUCTION_CUPS, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_PURPLE + }, { // Cradily + 86, 81, 97, 43, 81, 107, + TYPE_ROCK, + TYPE_GRASS, + 45, // catch rate + 201, // base exp. yield + 0, 0, 0, 0, 0, 2, + ITEM_NONE, + ITEM_NONE, + 31, // gender + 30, // egg cycles + 70, // base friendship + GROWTH_ERRATIC, + EGG_GROUP_WATER_3, + EGG_GROUP_WATER_3, + ABILITY_SUCTION_CUPS, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_GREEN + }, { // Anorith + 45, 95, 50, 75, 40, 50, + TYPE_ROCK, + TYPE_BUG, + 45, // catch rate + 119, // base exp. yield + 0, 1, 0, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 31, // gender + 30, // egg cycles + 70, // base friendship + GROWTH_ERRATIC, + EGG_GROUP_WATER_3, + EGG_GROUP_WATER_3, + ABILITY_BATTLE_ARMOR, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_GRAY + }, { // Armaldo + 75, 125, 100, 45, 70, 80, + TYPE_ROCK, + TYPE_BUG, + 45, // catch rate + 200, // base exp. yield + 0, 2, 0, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 31, // gender + 30, // egg cycles + 70, // base friendship + GROWTH_ERRATIC, + EGG_GROUP_WATER_3, + EGG_GROUP_WATER_3, + ABILITY_BATTLE_ARMOR, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_GRAY + }, { // Ralts + 28, 25, 25, 40, 45, 35, + TYPE_PSYCHIC, + TYPE_PSYCHIC, + 235, // catch rate + 70, // base exp. yield + 0, 0, 0, 0, 1, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 35, // base friendship + GROWTH_SLOW, + EGG_GROUP_AMORPHOUS, + EGG_GROUP_AMORPHOUS, + ABILITY_SYNCHRONIZE, + ABILITY_TRACE, + 0, // Safari Zone flee rate + BODY_COLOR_WHITE + }, { // Kirlia + 38, 35, 35, 50, 65, 55, + TYPE_PSYCHIC, + TYPE_PSYCHIC, + 120, // catch rate + 140, // base exp. yield + 0, 0, 0, 0, 2, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 35, // base friendship + GROWTH_SLOW, + EGG_GROUP_AMORPHOUS, + EGG_GROUP_AMORPHOUS, + ABILITY_SYNCHRONIZE, + ABILITY_TRACE, + 0, // Safari Zone flee rate + BODY_COLOR_WHITE + }, { // Gardevoir + 68, 65, 65, 80, 125, 115, + TYPE_PSYCHIC, + TYPE_PSYCHIC, + 45, // catch rate + 208, // base exp. yield + 0, 0, 0, 0, 3, 0, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 20, // egg cycles + 35, // base friendship + GROWTH_SLOW, + EGG_GROUP_AMORPHOUS, + EGG_GROUP_AMORPHOUS, + ABILITY_SYNCHRONIZE, + ABILITY_TRACE, + 0, // Safari Zone flee rate + BODY_COLOR_WHITE + }, { // Bagon + 45, 75, 60, 50, 40, 30, + TYPE_DRAGON, + TYPE_DRAGON, + 45, // catch rate + 89, // base exp. yield + 0, 1, 0, 0, 0, 0, + ITEM_NONE, + ITEM_DRAGON_SCALE, + 127, // gender + 40, // egg cycles + 35, // base friendship + GROWTH_SLOW, + EGG_GROUP_DRAGON, + EGG_GROUP_DRAGON, + ABILITY_ROCK_HEAD, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BLUE + }, { // Shelgon + 65, 95, 100, 50, 60, 50, + TYPE_DRAGON, + TYPE_DRAGON, + 45, // catch rate + 144, // base exp. yield + 0, 0, 2, 0, 0, 0, + ITEM_NONE, + ITEM_DRAGON_SCALE, + 127, // gender + 40, // egg cycles + 35, // base friendship + GROWTH_SLOW, + EGG_GROUP_DRAGON, + EGG_GROUP_DRAGON, + ABILITY_ROCK_HEAD, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_WHITE + }, { // Salamence + 95, 135, 80, 100, 110, 80, + TYPE_DRAGON, + TYPE_FLYING, + 45, // catch rate + 218, // base exp. yield + 0, 3, 0, 0, 0, 0, + ITEM_NONE, + ITEM_DRAGON_SCALE, + 127, // gender + 40, // egg cycles + 35, // base friendship + GROWTH_SLOW, + EGG_GROUP_DRAGON, + EGG_GROUP_DRAGON, + ABILITY_INTIMIDATE, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BLUE + }, { // Beldum + 40, 55, 80, 30, 35, 60, + TYPE_STEEL, + TYPE_PSYCHIC, + 3, // catch rate + 103, // base exp. yield + 0, 0, 1, 0, 0, 0, + ITEM_NONE, + ITEM_METAL_COAT, + 255, // gender + 40, // egg cycles + 35, // base friendship + GROWTH_SLOW, + EGG_GROUP_MINERAL, + EGG_GROUP_MINERAL, + ABILITY_CLEAR_BODY, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BLUE + }, { // Metang + 60, 75, 100, 50, 55, 80, + TYPE_STEEL, + TYPE_PSYCHIC, + 3, // catch rate + 153, // base exp. yield + 0, 0, 2, 0, 0, 0, + ITEM_NONE, + ITEM_METAL_COAT, + 255, // gender + 40, // egg cycles + 35, // base friendship + GROWTH_SLOW, + EGG_GROUP_MINERAL, + EGG_GROUP_MINERAL, + ABILITY_CLEAR_BODY, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BLUE + }, { // Metagross + 80, 135, 130, 70, 95, 90, + TYPE_STEEL, + TYPE_PSYCHIC, + 3, // catch rate + 210, // base exp. yield + 0, 0, 3, 0, 0, 0, + ITEM_NONE, + ITEM_METAL_COAT, + 255, // gender + 40, // egg cycles + 35, // base friendship + GROWTH_SLOW, + EGG_GROUP_MINERAL, + EGG_GROUP_MINERAL, + ABILITY_CLEAR_BODY, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BLUE + }, { // Regirock + 80, 100, 200, 50, 50, 100, + TYPE_ROCK, + TYPE_ROCK, + 3, // catch rate + 217, // base exp. yield + 0, 0, 3, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 255, // gender + 80, // egg cycles + 35, // base friendship + GROWTH_SLOW, + EGG_GROUP_UNDISCOVERED, + EGG_GROUP_UNDISCOVERED, + ABILITY_CLEAR_BODY, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BROWN + }, { // Regice + 80, 50, 100, 50, 100, 200, + TYPE_ICE, + TYPE_ICE, + 3, // catch rate + 216, // base exp. yield + 0, 0, 0, 0, 0, 3, + ITEM_NONE, + ITEM_NONE, + 255, // gender + 80, // egg cycles + 35, // base friendship + GROWTH_SLOW, + EGG_GROUP_UNDISCOVERED, + EGG_GROUP_UNDISCOVERED, + ABILITY_CLEAR_BODY, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BLUE + }, { // Registeel + 80, 75, 150, 50, 75, 150, + TYPE_STEEL, + TYPE_STEEL, + 3, // catch rate + 215, // base exp. yield + 0, 0, 2, 0, 0, 1, + ITEM_NONE, + ITEM_NONE, + 255, // gender + 80, // egg cycles + 35, // base friendship + GROWTH_SLOW, + EGG_GROUP_UNDISCOVERED, + EGG_GROUP_UNDISCOVERED, + ABILITY_CLEAR_BODY, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_GRAY + }, { // Kyogre + 100, 100, 90, 90, 150, 140, + TYPE_WATER, + TYPE_WATER, + 5, // catch rate + 218, // base exp. yield + 0, 0, 0, 0, 3, 0, + ITEM_NONE, + ITEM_NONE, + 255, // gender + 120, // egg cycles + 0, // base friendship + GROWTH_SLOW, + EGG_GROUP_UNDISCOVERED, + EGG_GROUP_UNDISCOVERED, + ABILITY_DRIZZLE, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BLUE + }, { // Groudon + 100, 150, 140, 90, 100, 90, + TYPE_GROUND, + TYPE_GROUND, + 5, // catch rate + 218, // base exp. yield + 0, 3, 0, 0, 0, 0, + ITEM_NONE, + ITEM_NONE, + 255, // gender + 120, // egg cycles + 0, // base friendship + GROWTH_SLOW, + EGG_GROUP_UNDISCOVERED, + EGG_GROUP_UNDISCOVERED, + ABILITY_DROUGHT, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_RED + }, { // Rayquaza + 105, 150, 90, 95, 150, 90, + TYPE_DRAGON, + TYPE_FLYING, + 3, // catch rate + 220, // base exp. yield + 0, 2, 0, 0, 1, 0, + ITEM_NONE, + ITEM_NONE, + 255, // gender + 120, // egg cycles + 0, // base friendship + GROWTH_SLOW, + EGG_GROUP_UNDISCOVERED, + EGG_GROUP_UNDISCOVERED, + ABILITY_AIR_LOCK, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_GREEN + }, { // Latias + 80, 80, 90, 110, 110, 130, + TYPE_DRAGON, + TYPE_PSYCHIC, + 3, // catch rate + 211, // base exp. yield + 0, 0, 0, 0, 0, 3, + ITEM_NONE, + ITEM_NONE, + 254, // gender + 120, // egg cycles + 90, // base friendship + GROWTH_SLOW, + EGG_GROUP_UNDISCOVERED, + EGG_GROUP_UNDISCOVERED, + ABILITY_LEVITATE, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_RED + }, { // Latios + 80, 90, 80, 110, 130, 110, + TYPE_DRAGON, + TYPE_PSYCHIC, + 3, // catch rate + 211, // base exp. yield + 0, 0, 0, 0, 3, 0, + ITEM_NONE, + ITEM_NONE, + 0, // gender + 120, // egg cycles + 90, // base friendship + GROWTH_SLOW, + EGG_GROUP_UNDISCOVERED, + EGG_GROUP_UNDISCOVERED, + ABILITY_LEVITATE, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BLUE + }, { // Jirachi + 100, 100, 100, 100, 100, 100, + TYPE_STEEL, + TYPE_PSYCHIC, + 3, // catch rate + 215, // base exp. yield + 3, 0, 0, 0, 0, 0, + ITEM_STAR_PIECE, + ITEM_STAR_PIECE, + 255, // gender + 120, // egg cycles + 100, // base friendship + GROWTH_SLOW, + EGG_GROUP_UNDISCOVERED, + EGG_GROUP_UNDISCOVERED, + ABILITY_SERENE_GRACE, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_YELLOW + }, { // Deoxys + 50, 150, 50, 150, 150, 50, + TYPE_PSYCHIC, + TYPE_PSYCHIC, + 3, // catch rate + 215, // base exp. yield + 0, 1, 0, 1, 1, 0, + ITEM_NONE, + ITEM_NONE, + 255, // gender + 120, // egg cycles + 0, // base friendship + GROWTH_SLOW, + EGG_GROUP_UNDISCOVERED, + EGG_GROUP_UNDISCOVERED, + ABILITY_PRESSURE, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_RED, TRUE + }, { // Chimecho + 65, 50, 70, 65, 95, 80, + TYPE_PSYCHIC, + TYPE_PSYCHIC, + 45, // catch rate + 147, // base exp. yield + 0, 0, 0, 0, 1, 1, + ITEM_NONE, + ITEM_NONE, + 127, // gender + 25, // egg cycles + 70, // base friendship + GROWTH_FAST, + EGG_GROUP_AMORPHOUS, + EGG_GROUP_AMORPHOUS, + ABILITY_LEVITATE, + ABILITY_NONE, + 0, // Safari Zone flee rate + BODY_COLOR_BLUE + } +}; + +#endif //POKERUBY_BASE_STATS_H diff --git a/src/data/pokemon/cry_ids.h b/src/data/pokemon/cry_ids.h new file mode 100644 index 000000000..6207a92f0 --- /dev/null +++ b/src/data/pokemon/cry_ids.h @@ -0,0 +1,146 @@ +// + +// + +#ifndef POKERUBY_CRY_IDS_H +#define POKERUBY_CRY_IDS_H + +const u16 gSpeciesIdToCryId[] = { + 273, // TREECKO + 274, // GROVYLE + 275, // SCEPTILE + 270, // TORCHIC + 271, // COMBUSKEN + 272, // BLAZIKEN + 276, // MUDKIP + 277, // MARSHTOMP + 278, // SWAMPERT + 359, // POOCHYENA + 360, // MIGHTYENA + 378, // ZIGZAGOON + 375, // LINOONE + 290, // WURMPLE + 291, // SILCOON + 292, // BEAUTIFLY + 293, // CASCOON + 294, // DUSTOX + 283, // LOTAD + 284, // LOMBRE + 285, // LUDICOLO + 286, // SEEDOT + 287, // NUZLEAF + 288, // SHIFTRY + 301, // NINCADA + 302, // NINJASK + 303, // SHEDINJA + 266, // TAILLOW + 267, // SWELLOW + 374, // SHROOMISH + 373, // BRELOOM + 269, // SPINDA + 280, // WINGULL + 279, // PELIPPER + 310, // SURSKIT + 311, // MASQUERAIN + 377, // WAILMER + 381, // WAILORD + 312, // SKITTY + 313, // DELCATTY + 251, // KECLEON + 329, // BALTOY + 330, // CLAYDOL + 306, // NOSEPASS + 253, // TORKOAL + 362, // SABLEYE + 318, // BARBOACH + 319, // WHISCASH + 368, // LUVDISC + 320, // CORPHISH + 321, // CRAWDAUNT + 333, // FEEBAS + 334, // MILOTIC + 289, // CARVANHA + 260, // SHARPEDO + 324, // TRAPINCH + 325, // VIBRAVA + 326, // FLYGON + 304, // MAKUHITA + 305, // HARIYAMA + 254, // ELECTRIKE + 255, // MANECTRIC + 316, // NUMEL + 317, // CAMERUPT + 338, // SPHEAL + 339, // SEALEO + 340, // WALREIN + 327, // CACNEA + 328, // CACTURNE + 383, // SNORUNT + 307, // GLALIE + 331, // LUNATONE + 332, // SOLROCK + 262, // AZURILL + 322, // SPOINK + 323, // GRUMPIG + 308, // PLUSLE + 309, // MINUN + 363, // MAWILE + 336, // MEDITITE + 337, // MEDICHAM + 263, // SWABLU + 264, // ALTARIA + 258, // WYNAUT + 256, // DUSKULL + 361, // DUSCLOPS + 252, // ROSELIA + 298, // SLAKOTH + 299, // VIGOROTH + 300, // SLAKING + 314, // GULPIN + 315, // SWALOT + 376, // TROPIUS + 382, // WHISMUR + 380, // LOUDRED + 379, // EXPLOUD + 341, // CLAMPERL + 342, // HUNTAIL + 343, // GOREBYSS + 335, // ABSOL + 282, // SHUPPET + 281, // BANETTE + 259, // SEVIPER + 261, // ZANGOOSE + 367, // RELICANTH + 364, // ARON + 365, // LAIRON + 366, // AGGRON + 356, // CASTFORM + 357, // VOLBEAT + 358, // ILLUMISE + 344, // LILEEP + 345, // CRADILY + 346, // ANORITH + 347, // ARMALDO + 295, // RALTS + 296, // KIRLIA + 297, // GARDEVOIR + 351, // BAGON + 352, // SHELGON + 372, // SALAMENCE + 348, // BELDUM + 349, // METANG + 350, // METAGROSS + 353, // REGIROCK + 354, // REGICE + 355, // REGISTEEL + 370, // KYOGRE + 369, // GROUDON + 371, // RAYQUAZA + 257, // LATIAS + 384, // LATIOS + 385, // JIRACHI + 386, // DEOXYS + 387 // CHIMECHO +}; + +#endif //POKERUBY_CRY_IDS_H diff --git a/src/data/pokemon/dex_order.h b/src/data/pokemon/dex_order.h new file mode 100644 index 000000000..cbb7182ed --- /dev/null +++ b/src/data/pokemon/dex_order.h @@ -0,0 +1,15 @@ +// + +// + +#ifndef POKERUBY_DEX_ORDER_H +#define POKERUBY_DEX_ORDER_H + +const u16 gSpeciesToHoennPokedexNum[] = {203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 156, 157, 112, 113, 227, 228, 229, 230, 231, 232, 233, 234, 153, 154, 138, 139, 63, 64, 88, 89, 90, 235, 236, 237, 238, 239, 240, 241, 242, 158, 159, 243, 244, 245, 246, 247, 248, 249, 39, 40, 41, 73, 74, 75, 250, 251, 252, 66, 67, 57, 58, 59, 253, 254, 255, 256, 82, 83, 257, 92, 93, 258, 259, 106, 107, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 84, 85, 270, 271, 272, 273, 274, 275, 276, 108, 109, 169, 170, 277, 278, 279, 184, 185, 50, 51, 143, 144, 280, 281, 282, 283, 284, 167, 285, 52, 53, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 65, 181, 182, 155, 324, 137, 325, 326, 162, 163, 327, 328, 329, 91, 55, 56, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 161, 164, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 168, 357, 358, 359, 103, 104, 360, 361, 180, 362, 363, 364, 365, 115, 366, 367, 186, 165, 166, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 42, 43, 44, 25, 26, 34, 35, 114, 27, 28, 32, 33, 99, 100, 61, 62, 145, 131, 132, 60, 105, 68, 127, 128, 183, 129, 130, 140, 141, 97, 98, 116, 117, 118, 48, 49, 78, 79, 101, 102, 173, 174, 175, 119, 120, 171, 172, 125, 126, 54, 110, 111, 80, 81, 69, 76, 77, 121, 122, 160, 148, 149, 94, 36, 37, 38, 95, 96, 150, 45, 46, 47, 176, 177, 178, 152, 146, 147, 124, 123, 179, 70, 71, 72, 142, 86, 87, 133, 134, 135, 136, 29, 30, 31, 187, 188, 189, 190, 191, 192, 193, 194, 195, 198, 199, 200, 196, 197, 201, 202, 151 +}; + +const u16 gSpeciesToNationalPokedexNum[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 290, 291, 292, 276, 277, 285, 286, 327, 278, 279, 283, 284, 320, 321, 300, 301, 352, 343, 344, 299, 324, 302, 339, 340, 370, 341, 342, 349, 350, 318, 319, 328, 329, 330, 296, 297, 309, 310, 322, 323, 363, 364, 365, 331, 332, 361, 362, 337, 338, 298, 325, 326, 311, 312, 303, 307, 308, 333, 334, 360, 355, 356, 315, 287, 288, 289, 316, 317, 357, 293, 294, 295, 366, 367, 368, 359, 353, 354, 336, 335, 369, 304, 305, 306, 351, 313, 314, 345, 346, 347, 348, 280, 281, 282, 371, 372, 373, 374, 375, 376, 377, 378, 379, 382, 383, 384, 380, 381, 385, 386, 358}; + +const u16 gHoennToNationalOrder[] = {252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 63, 64, 65, 290, 291, 292, 293, 294, 295, 296, 297, 118, 119, 129, 130, 298, 183, 184, 74, 75, 76, 299, 300, 301, 41, 42, 169, 72, 73, 302, 303, 304, 305, 306, 66, 67, 68, 307, 308, 309, 310, 311, 312, 81, 82, 100, 101, 313, 314, 43, 44, 45, 182, 84, 85, 315, 316, 317, 318, 319, 320, 321, 322, 323, 218, 219, 324, 88, 89, 109, 110, 325, 326, 27, 28, 327, 227, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 174, 39, 40, 349, 350, 351, 120, 121, 352, 353, 354, 355, 356, 357, 358, 359, 37, 38, 172, 25, 26, 54, 55, 360, 202, 177, 178, 203, 231, 232, 127, 214, 111, 112, 361, 362, 363, 364, 365, 366, 367, 368, 369, 222, 170, 171, 370, 116, 117, 230, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 29, 30, 31, 32, 33, 34, 35, 36, 46, 47, 48, 49, 50, 51, 52, 53, 56, 57, 58, 59, 60, 61, 62, 69, 70, 71, 77, 78, 79, 80, 83, 86, 87, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 102, 103, 104, 105, 106, 107, 108, 113, 114, 115, 122, 123, 124, 125, 126, 128, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 173, 175, 176, 179, 180, 181, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 215, 216, 217, 220, 221, 223, 224, 225, 226, 228, 229, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411}; + +#endif //POKERUBY_DEX_ORDER_H diff --git a/src/data/pokemon/egg_moves.h b/src/data/pokemon/egg_moves.h new file mode 100644 index 000000000..ab1b1dd33 --- /dev/null +++ b/src/data/pokemon/egg_moves.h @@ -0,0 +1,1318 @@ +// + +// + +#ifndef POKERUBY_DAYCARE_H +#define POKERUBY_DAYCARE_H + +#define EGG_MOVES_SPECIES_OFFSET 20000 +#define egg_moves(species, moves...) (SPECIES_##species + EGG_MOVES_SPECIES_OFFSET), moves + +#endif //POKERUBY_DAYCARE_H + +const u16 gEggMoves[] = { + egg_moves(BULBASAUR, + MOVE_LIGHT_SCREEN, + MOVE_SKULL_BASH, + MOVE_SAFEGUARD, + MOVE_CHARM, + MOVE_PETAL_DANCE, + MOVE_MAGICAL_LEAF, + MOVE_GRASS_WHISTLE, + MOVE_CURSE), + + egg_moves(CHARMANDER, + MOVE_BELLY_DRUM, + MOVE_ANCIENT_POWER, + MOVE_ROCK_SLIDE, + MOVE_BITE, + MOVE_OUTRAGE, + MOVE_BEAT_UP, + MOVE_SWORDS_DANCE, + MOVE_DRAGON_DANCE), + + egg_moves(SQUIRTLE, + MOVE_MIRROR_COAT, + MOVE_HAZE, + MOVE_MIST, + MOVE_FORESIGHT, + MOVE_FLAIL, + MOVE_REFRESH, + MOVE_MUD_SPORT, + MOVE_YAWN), + + egg_moves(PIDGEY, + MOVE_PURSUIT, + MOVE_FAINT_ATTACK, + MOVE_FORESIGHT, + MOVE_STEEL_WING, + MOVE_AIR_CUTTER), + + egg_moves(RATTATA, + MOVE_SCREECH, + MOVE_FLAME_WHEEL, + MOVE_FURY_SWIPES, + MOVE_BITE, + MOVE_COUNTER, + MOVE_REVERSAL, + MOVE_UPROAR, + MOVE_SWAGGER), + + egg_moves(SPEAROW, + MOVE_FAINT_ATTACK, + MOVE_FALSE_SWIPE, + MOVE_SCARY_FACE, + MOVE_QUICK_ATTACK, + MOVE_TRI_ATTACK, + MOVE_ASTONISH, + MOVE_SKY_ATTACK), + + egg_moves(EKANS, + MOVE_PURSUIT, + MOVE_SLAM, + MOVE_SPITE, + MOVE_BEAT_UP, + MOVE_POISON_FANG), + + egg_moves(SANDSHREW, + MOVE_FLAIL, + MOVE_SAFEGUARD, + MOVE_COUNTER, + MOVE_RAPID_SPIN, + MOVE_ROCK_SLIDE, + MOVE_METAL_CLAW, + MOVE_SWORDS_DANCE, + MOVE_CRUSH_CLAW), + + egg_moves(NIDORAN_F, + MOVE_SUPERSONIC, + MOVE_DISABLE, + MOVE_TAKE_DOWN, + MOVE_FOCUS_ENERGY, + MOVE_CHARM, + MOVE_COUNTER, + MOVE_BEAT_UP), + + egg_moves(NIDORAN_M, + MOVE_COUNTER, + MOVE_DISABLE, + MOVE_SUPERSONIC, + MOVE_TAKE_DOWN, + MOVE_AMNESIA, + MOVE_CONFUSION, + MOVE_BEAT_UP), + + egg_moves(VULPIX, + MOVE_FAINT_ATTACK, + MOVE_HYPNOSIS, + MOVE_FLAIL, + MOVE_SPITE, + MOVE_DISABLE, + MOVE_HOWL, + MOVE_PSYCH_UP, + MOVE_HEAT_WAVE), + + egg_moves(ZUBAT, + MOVE_QUICK_ATTACK, + MOVE_PURSUIT, + MOVE_FAINT_ATTACK, + MOVE_GUST, + MOVE_WHIRLWIND, + MOVE_CURSE), + + egg_moves(ODDISH, + MOVE_SWORDS_DANCE, + MOVE_RAZOR_LEAF, + MOVE_FLAIL, + MOVE_SYNTHESIS, + MOVE_CHARM, + MOVE_INGRAIN), + + egg_moves(PARAS, + MOVE_FALSE_SWIPE, + MOVE_SCREECH, + MOVE_COUNTER, + MOVE_PSYBEAM, + MOVE_FLAIL, + MOVE_SWEET_SCENT, + MOVE_LIGHT_SCREEN, + MOVE_PURSUIT), + + egg_moves(VENONAT, + MOVE_BATON_PASS, + MOVE_SCREECH, + MOVE_GIGA_DRAIN, + MOVE_SIGNAL_BEAM), + + egg_moves(DIGLETT, + MOVE_FAINT_ATTACK, + MOVE_SCREECH, + MOVE_ANCIENT_POWER, + MOVE_PURSUIT, + MOVE_BEAT_UP, + MOVE_UPROAR, + MOVE_ROCK_SLIDE), + + egg_moves(MEOWTH, + MOVE_SPITE, + MOVE_CHARM, + MOVE_HYPNOSIS, + MOVE_AMNESIA, + MOVE_PSYCH_UP, + MOVE_ASSIST), + + egg_moves(PSYDUCK, + MOVE_HYPNOSIS, + MOVE_PSYBEAM, + MOVE_FORESIGHT, + MOVE_LIGHT_SCREEN, + MOVE_FUTURE_SIGHT, + MOVE_PSYCHIC, + MOVE_CROSS_CHOP, + MOVE_REFRESH), + + egg_moves(MANKEY, + MOVE_ROCK_SLIDE, + MOVE_FORESIGHT, + MOVE_MEDITATE, + MOVE_COUNTER, + MOVE_REVERSAL, + MOVE_BEAT_UP, + MOVE_REVENGE, + MOVE_SMELLING_SALT), + + egg_moves(GROWLITHE, + MOVE_BODY_SLAM, + MOVE_SAFEGUARD, + MOVE_CRUNCH, + MOVE_THRASH, + MOVE_FIRE_SPIN, + MOVE_HOWL, + MOVE_HEAT_WAVE), + + egg_moves(POLIWAG, + MOVE_MIST, + MOVE_SPLASH, + MOVE_BUBBLE_BEAM, + MOVE_HAZE, + MOVE_MIND_READER, + MOVE_WATER_SPORT, + MOVE_ICE_BALL), + + egg_moves(ABRA, + MOVE_ENCORE, + MOVE_BARRIER, + MOVE_KNOCK_OFF, + MOVE_FIRE_PUNCH, + MOVE_THUNDER_PUNCH, + MOVE_ICE_PUNCH), + + egg_moves(MACHOP, + MOVE_LIGHT_SCREEN, + MOVE_MEDITATE, + MOVE_ROLLING_KICK, + MOVE_ENCORE, + MOVE_SMELLING_SALT, + MOVE_COUNTER, + MOVE_ROCK_SLIDE), + + egg_moves(BELLSPROUT, + MOVE_SWORDS_DANCE, + MOVE_ENCORE, + MOVE_REFLECT, + MOVE_SYNTHESIS, + MOVE_LEECH_LIFE, + MOVE_INGRAIN, + MOVE_MAGICAL_LEAF), + + egg_moves(TENTACOOL, + MOVE_AURORA_BEAM, + MOVE_MIRROR_COAT, + MOVE_RAPID_SPIN, + MOVE_HAZE, + MOVE_SAFEGUARD, + MOVE_CONFUSE_RAY), + + egg_moves(GEODUDE, + MOVE_MEGA_PUNCH, + MOVE_ROCK_SLIDE, + MOVE_BLOCK), + + egg_moves(PONYTA, + MOVE_FLAME_WHEEL, + MOVE_THRASH, + MOVE_DOUBLE_KICK, + MOVE_HYPNOSIS, + MOVE_CHARM, + MOVE_DOUBLE_EDGE), + + egg_moves(SLOWPOKE, + MOVE_SAFEGUARD, + MOVE_BELLY_DRUM, + MOVE_FUTURE_SIGHT, + MOVE_STOMP, + MOVE_MUD_SPORT, + MOVE_SLEEP_TALK, + MOVE_SNORE), + + egg_moves(FARFETCHD, + MOVE_STEEL_WING, + MOVE_FORESIGHT, + MOVE_MIRROR_MOVE, + MOVE_GUST, + MOVE_QUICK_ATTACK, + MOVE_FLAIL, + MOVE_FEATHER_DANCE, + MOVE_CURSE), + + egg_moves(DODUO, + MOVE_QUICK_ATTACK, + MOVE_SUPERSONIC, + MOVE_HAZE, + MOVE_FAINT_ATTACK, + MOVE_FLAIL, + MOVE_ENDEAVOR), + + egg_moves(SEEL, + MOVE_LICK, + MOVE_PERISH_SONG, + MOVE_DISABLE, + MOVE_HORN_DRILL, + MOVE_SLAM, + MOVE_ENCORE, + MOVE_FAKE_OUT, + MOVE_ICICLE_SPEAR), + + egg_moves(GRIMER, + MOVE_HAZE, + MOVE_MEAN_LOOK, + MOVE_LICK, + MOVE_IMPRISON, + MOVE_CURSE, + MOVE_SHADOW_PUNCH, + MOVE_EXPLOSION), + + egg_moves(SHELLDER, + MOVE_BUBBLE_BEAM, + MOVE_TAKE_DOWN, + MOVE_BARRIER, + MOVE_RAPID_SPIN, + MOVE_SCREECH, + MOVE_ICICLE_SPEAR), + + egg_moves(GASTLY, + MOVE_PSYWAVE, + MOVE_PERISH_SONG, + MOVE_HAZE, + MOVE_ASTONISH, + MOVE_WILL_O_WISP, + MOVE_GRUDGE, + MOVE_EXPLOSION), + + egg_moves(ONIX, + MOVE_ROCK_SLIDE, + MOVE_FLAIL, + MOVE_EXPLOSION, + MOVE_BLOCK), + + egg_moves(DROWZEE, + MOVE_BARRIER, + MOVE_ASSIST, + MOVE_ROLE_PLAY, + MOVE_FIRE_PUNCH, + MOVE_THUNDER_PUNCH, + MOVE_ICE_PUNCH), + + egg_moves(KRABBY, + MOVE_DIG, + MOVE_HAZE, + MOVE_AMNESIA, + MOVE_FLAIL, + MOVE_SLAM, + MOVE_KNOCK_OFF, + MOVE_SWORDS_DANCE), + + egg_moves(EXEGGCUTE, + MOVE_SYNTHESIS, + MOVE_MOONLIGHT, + MOVE_REFLECT, + MOVE_ANCIENT_POWER, + MOVE_PSYCH_UP, + MOVE_INGRAIN, + MOVE_CURSE), + + egg_moves(CUBONE, + MOVE_ROCK_SLIDE, + MOVE_ANCIENT_POWER, + MOVE_BELLY_DRUM, + MOVE_SCREECH, + MOVE_SKULL_BASH, + MOVE_PERISH_SONG, + MOVE_SWORDS_DANCE), + + egg_moves(LICKITUNG, + MOVE_BELLY_DRUM, + MOVE_MAGNITUDE, + MOVE_BODY_SLAM, + MOVE_CURSE, + MOVE_SMELLING_SALT, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SUBSTITUTE), + + egg_moves(KOFFING, + MOVE_SCREECH, + MOVE_PSYWAVE, + MOVE_PSYBEAM, + MOVE_DESTINY_BOND, + MOVE_PAIN_SPLIT, + MOVE_WILL_O_WISP), + + egg_moves(RHYHORN, + MOVE_CRUNCH, + MOVE_REVERSAL, + MOVE_ROCK_SLIDE, + MOVE_COUNTER, + MOVE_MAGNITUDE, + MOVE_SWORDS_DANCE, + MOVE_CURSE, + MOVE_CRUSH_CLAW), + + egg_moves(CHANSEY, + MOVE_PRESENT, + MOVE_METRONOME, + MOVE_HEAL_BELL, + MOVE_AROMATHERAPY, + MOVE_SUBSTITUTE), + + egg_moves(TANGELA, + MOVE_FLAIL, + MOVE_CONFUSION, + MOVE_MEGA_DRAIN, + MOVE_REFLECT, + MOVE_AMNESIA, + MOVE_LEECH_SEED, + MOVE_NATURE_POWER), + + egg_moves(KANGASKHAN, + MOVE_STOMP, + MOVE_FORESIGHT, + MOVE_FOCUS_ENERGY, + MOVE_SAFEGUARD, + MOVE_DISABLE, + MOVE_COUNTER, + MOVE_CRUSH_CLAW, + MOVE_SUBSTITUTE), + + egg_moves(HORSEA, + MOVE_FLAIL, + MOVE_AURORA_BEAM, + MOVE_OCTAZOOKA, + MOVE_DISABLE, + MOVE_SPLASH, + MOVE_DRAGON_RAGE, + MOVE_DRAGON_BREATH), + + egg_moves(GOLDEEN, + MOVE_PSYBEAM, + MOVE_HAZE, + MOVE_HYDRO_PUMP, + MOVE_SLEEP_TALK, + MOVE_MUD_SPORT), + + egg_moves(MR_MIME, + MOVE_FUTURE_SIGHT, + MOVE_HYPNOSIS, + MOVE_MIMIC, + MOVE_PSYCH_UP, + MOVE_FAKE_OUT, + MOVE_TRICK), + + egg_moves(SCYTHER, + MOVE_COUNTER, + MOVE_SAFEGUARD, + MOVE_BATON_PASS, + MOVE_RAZOR_WIND, + MOVE_REVERSAL, + MOVE_LIGHT_SCREEN, + MOVE_ENDURE, + MOVE_SILVER_WIND), + + egg_moves(PINSIR, + MOVE_FURY_ATTACK, + MOVE_FLAIL, + MOVE_FALSE_SWIPE, + MOVE_FAINT_ATTACK), + + egg_moves(LAPRAS, + MOVE_FORESIGHT, + MOVE_SUBSTITUTE, + MOVE_TICKLE, + MOVE_REFRESH, + MOVE_DRAGON_DANCE, + MOVE_CURSE, + MOVE_SLEEP_TALK, + MOVE_HORN_DRILL), + + egg_moves(EEVEE, + MOVE_CHARM, + MOVE_FLAIL, + MOVE_ENDURE, + MOVE_CURSE, + MOVE_TICKLE, + MOVE_WISH), + + egg_moves(OMANYTE, + MOVE_BUBBLE_BEAM, + MOVE_AURORA_BEAM, + MOVE_SLAM, + MOVE_SUPERSONIC, + MOVE_HAZE, + MOVE_ROCK_SLIDE, + MOVE_SPIKES), + + egg_moves(KABUTO, + MOVE_BUBBLE_BEAM, + MOVE_AURORA_BEAM, + MOVE_RAPID_SPIN, + MOVE_DIG, + MOVE_FLAIL, + MOVE_KNOCK_OFF, + MOVE_CONFUSE_RAY), + + egg_moves(AERODACTYL, + MOVE_WHIRLWIND, + MOVE_PURSUIT, + MOVE_FORESIGHT, + MOVE_STEEL_WING, + MOVE_DRAGON_BREATH, + MOVE_CURSE), + + egg_moves(SNORLAX, + MOVE_LICK, + MOVE_CHARM, + MOVE_DOUBLE_EDGE, + MOVE_CURSE, + MOVE_FISSURE, + MOVE_SUBSTITUTE), + + egg_moves(DRATINI, + MOVE_LIGHT_SCREEN, + MOVE_MIST, + MOVE_HAZE, + MOVE_SUPERSONIC, + MOVE_DRAGON_BREATH, + MOVE_DRAGON_DANCE), + + egg_moves(CHIKORITA, + MOVE_VINE_WHIP, + MOVE_LEECH_SEED, + MOVE_COUNTER, + MOVE_ANCIENT_POWER, + MOVE_FLAIL, + MOVE_NATURE_POWER, + MOVE_INGRAIN, + MOVE_GRASS_WHISTLE), + + egg_moves(CYNDAQUIL, + MOVE_FURY_SWIPES, + MOVE_QUICK_ATTACK, + MOVE_REVERSAL, + MOVE_THRASH, + MOVE_FORESIGHT, + MOVE_COVET, + MOVE_HOWL, + MOVE_CRUSH_CLAW), + + egg_moves(TOTODILE, + MOVE_CRUNCH, + MOVE_THRASH, + MOVE_HYDRO_PUMP, + MOVE_ANCIENT_POWER, + MOVE_ROCK_SLIDE, + MOVE_MUD_SPORT, + MOVE_WATER_SPORT, + MOVE_DRAGON_CLAW), + + egg_moves(SENTRET, + MOVE_DOUBLE_EDGE, + MOVE_PURSUIT, + MOVE_SLASH, + MOVE_FOCUS_ENERGY, + MOVE_REVERSAL, + MOVE_SUBSTITUTE, + MOVE_TRICK, + MOVE_ASSIST), + + egg_moves(HOOTHOOT, + MOVE_MIRROR_MOVE, + MOVE_SUPERSONIC, + MOVE_FAINT_ATTACK, + MOVE_WING_ATTACK, + MOVE_WHIRLWIND, + MOVE_SKY_ATTACK, + MOVE_FEATHER_DANCE), + + egg_moves(LEDYBA, + MOVE_PSYBEAM, + MOVE_BIDE, + MOVE_SILVER_WIND), + + egg_moves(SPINARAK, + MOVE_PSYBEAM, + MOVE_DISABLE, + MOVE_SONIC_BOOM, + MOVE_BATON_PASS, + MOVE_PURSUIT, + MOVE_SIGNAL_BEAM), + + egg_moves(CHINCHOU, + MOVE_FLAIL, + MOVE_SCREECH, + MOVE_AMNESIA), + + egg_moves(PICHU, + MOVE_REVERSAL, + MOVE_BIDE, + MOVE_PRESENT, + MOVE_ENCORE, + MOVE_DOUBLE_SLAP, + MOVE_WISH, + MOVE_CHARGE), + + egg_moves(CLEFFA, + MOVE_PRESENT, + MOVE_METRONOME, + MOVE_AMNESIA, + MOVE_BELLY_DRUM, + MOVE_SPLASH, + MOVE_MIMIC, + MOVE_WISH, + MOVE_SUBSTITUTE), + + egg_moves(IGGLYBUFF, + MOVE_PERISH_SONG, + MOVE_PRESENT, + MOVE_FAINT_ATTACK, + MOVE_WISH, + MOVE_FAKE_TEARS), + + egg_moves(TOGEPI, + MOVE_PRESENT, + MOVE_MIRROR_MOVE, + MOVE_PECK, + MOVE_FORESIGHT, + MOVE_FUTURE_SIGHT, + MOVE_SUBSTITUTE, + MOVE_PSYCH_UP), + + egg_moves(NATU, + MOVE_HAZE, + MOVE_DRILL_PECK, + MOVE_QUICK_ATTACK, + MOVE_FAINT_ATTACK, + MOVE_STEEL_WING, + MOVE_PSYCH_UP, + MOVE_FEATHER_DANCE, + MOVE_REFRESH), + + egg_moves(MAREEP, + MOVE_TAKE_DOWN, + MOVE_BODY_SLAM, + MOVE_SAFEGUARD, + MOVE_SCREECH, + MOVE_REFLECT, + MOVE_ODOR_SLEUTH, + MOVE_CHARGE), + + egg_moves(MARILL, + MOVE_LIGHT_SCREEN, + MOVE_PRESENT, + MOVE_AMNESIA, + MOVE_FUTURE_SIGHT, + MOVE_BELLY_DRUM, + MOVE_PERISH_SONG, + MOVE_SUPERSONIC, + MOVE_SUBSTITUTE), + + egg_moves(SUDOWOODO, + MOVE_SELF_DESTRUCT), + + egg_moves(HOPPIP, + MOVE_CONFUSION, + MOVE_ENCORE, + MOVE_DOUBLE_EDGE, + MOVE_REFLECT, + MOVE_AMNESIA, + MOVE_HELPING_HAND, + MOVE_PSYCH_UP), + + egg_moves(AIPOM, + MOVE_COUNTER, + MOVE_SCREECH, + MOVE_PURSUIT, + MOVE_AGILITY, + MOVE_SPITE, + MOVE_SLAM, + MOVE_DOUBLE_SLAP, + MOVE_BEAT_UP), + + egg_moves(SUNKERN, + MOVE_GRASS_WHISTLE, + MOVE_ENCORE, + MOVE_LEECH_SEED, + MOVE_NATURE_POWER, + MOVE_CURSE, + MOVE_HELPING_HAND), + + egg_moves(YANMA, + MOVE_WHIRLWIND, + MOVE_REVERSAL, + MOVE_LEECH_LIFE, + MOVE_SIGNAL_BEAM, + MOVE_SILVER_WIND), + + egg_moves(WOOPER, + MOVE_BODY_SLAM, + MOVE_ANCIENT_POWER, + MOVE_SAFEGUARD, + MOVE_CURSE, + MOVE_MUD_SPORT, + MOVE_STOCKPILE, + MOVE_SWALLOW, + MOVE_SPIT_UP), + + egg_moves(MURKROW, + MOVE_WHIRLWIND, + MOVE_DRILL_PECK, + MOVE_MIRROR_MOVE, + MOVE_WING_ATTACK, + MOVE_SKY_ATTACK, + MOVE_CONFUSE_RAY, + MOVE_FEATHER_DANCE, + MOVE_PERISH_SONG), + + egg_moves(MISDREAVUS, + MOVE_SCREECH, + MOVE_DESTINY_BOND, + MOVE_PSYCH_UP, + MOVE_IMPRISON), + + egg_moves(GIRAFARIG, + MOVE_TAKE_DOWN, + MOVE_AMNESIA, + MOVE_FORESIGHT, + MOVE_FUTURE_SIGHT, + MOVE_BEAT_UP, + MOVE_PSYCH_UP, + MOVE_WISH, + MOVE_MAGIC_COAT), + + egg_moves(PINECO, + MOVE_REFLECT, + MOVE_PIN_MISSILE, + MOVE_FLAIL, + MOVE_SWIFT, + MOVE_COUNTER, + MOVE_SAND_TOMB), + + egg_moves(DUNSPARCE, + MOVE_BIDE, + MOVE_ANCIENT_POWER, + MOVE_ROCK_SLIDE, + MOVE_BITE, + MOVE_HEADBUTT, + MOVE_ASTONISH, + MOVE_CURSE), + + egg_moves(GLIGAR, + MOVE_METAL_CLAW, + MOVE_WING_ATTACK, + MOVE_RAZOR_WIND, + MOVE_COUNTER, + MOVE_SAND_TOMB), + + egg_moves(SNUBBULL, + MOVE_METRONOME, + MOVE_FAINT_ATTACK, + MOVE_REFLECT, + MOVE_PRESENT, + MOVE_CRUNCH, + MOVE_HEAL_BELL, + MOVE_SNORE, + MOVE_SMELLING_SALT), + + egg_moves(QWILFISH, + MOVE_FLAIL, + MOVE_HAZE, + MOVE_BUBBLE_BEAM, + MOVE_SUPERSONIC, + MOVE_ASTONISH), + + egg_moves(SHUCKLE, + MOVE_SWEET_SCENT), + + egg_moves(HERACROSS, + MOVE_HARDEN, + MOVE_BIDE, + MOVE_FLAIL, + MOVE_FALSE_SWIPE), + + egg_moves(SNEASEL, + MOVE_COUNTER, + MOVE_SPITE, + MOVE_FORESIGHT, + MOVE_REFLECT, + MOVE_BITE, + MOVE_CRUSH_CLAW, + MOVE_FAKE_OUT), + + egg_moves(TEDDIURSA, + MOVE_CRUNCH, + MOVE_TAKE_DOWN, + MOVE_SEISMIC_TOSS, + MOVE_COUNTER, + MOVE_METAL_CLAW, + MOVE_FAKE_TEARS, + MOVE_YAWN, + MOVE_SLEEP_TALK), + + egg_moves(SLUGMA, + MOVE_ACID_ARMOR, + MOVE_HEAT_WAVE), + + egg_moves(SWINUB, + MOVE_TAKE_DOWN, + MOVE_BITE, + MOVE_BODY_SLAM, + MOVE_ROCK_SLIDE, + MOVE_ANCIENT_POWER, + MOVE_MUD_SHOT, + MOVE_ICICLE_SPEAR, + MOVE_DOUBLE_EDGE), + + egg_moves(CORSOLA, + MOVE_ROCK_SLIDE, + MOVE_SCREECH, + MOVE_MIST, + MOVE_AMNESIA, + MOVE_BARRIER, + MOVE_INGRAIN, + MOVE_CONFUSE_RAY, + MOVE_ICICLE_SPEAR), + + egg_moves(REMORAID, + MOVE_AURORA_BEAM, + MOVE_OCTAZOOKA, + MOVE_SUPERSONIC, + MOVE_HAZE, + MOVE_SCREECH, + MOVE_THUNDER_WAVE, + MOVE_ROCK_BLAST), + + egg_moves(DELIBIRD, + MOVE_AURORA_BEAM, + MOVE_QUICK_ATTACK, + MOVE_FUTURE_SIGHT, + MOVE_SPLASH, + MOVE_RAPID_SPIN, + MOVE_ICE_BALL), + + egg_moves(MANTINE, + MOVE_TWISTER, + MOVE_HYDRO_PUMP, + MOVE_HAZE, + MOVE_SLAM, + MOVE_MUD_SPORT, + MOVE_ROCK_SLIDE), + + egg_moves(SKARMORY, + MOVE_DRILL_PECK, + MOVE_PURSUIT, + MOVE_WHIRLWIND, + MOVE_SKY_ATTACK, + MOVE_CURSE), + + egg_moves(HOUNDOUR, + MOVE_FIRE_SPIN, + MOVE_RAGE, + MOVE_PURSUIT, + MOVE_COUNTER, + MOVE_SPITE, + MOVE_REVERSAL, + MOVE_BEAT_UP, + MOVE_WILL_O_WISP), + + egg_moves(PHANPY, + MOVE_FOCUS_ENERGY, + MOVE_BODY_SLAM, + MOVE_ANCIENT_POWER, + MOVE_SNORE, + MOVE_COUNTER, + MOVE_FISSURE), + + egg_moves(STANTLER, + MOVE_SPITE, + MOVE_DISABLE, + MOVE_BITE, + MOVE_SWAGGER, + MOVE_PSYCH_UP, + MOVE_EXTRASENSORY), + + egg_moves(TYROGUE, + MOVE_RAPID_SPIN, + MOVE_HI_JUMP_KICK, + MOVE_MACH_PUNCH, + MOVE_MIND_READER, + MOVE_HELPING_HAND), + + egg_moves(SMOOCHUM, + MOVE_MEDITATE, + MOVE_PSYCH_UP, + MOVE_FAKE_OUT, + MOVE_WISH, + MOVE_ICE_PUNCH), + + egg_moves(ELEKID, + MOVE_KARATE_CHOP, + MOVE_BARRIER, + MOVE_ROLLING_KICK, + MOVE_MEDITATE, + MOVE_CROSS_CHOP, + MOVE_FIRE_PUNCH, + MOVE_ICE_PUNCH), + + egg_moves(MAGBY, + MOVE_KARATE_CHOP, + MOVE_MEGA_PUNCH, + MOVE_BARRIER, + MOVE_SCREECH, + MOVE_CROSS_CHOP, + MOVE_THUNDER_PUNCH), + + egg_moves(MILTANK, + MOVE_PRESENT, + MOVE_REVERSAL, + MOVE_SEISMIC_TOSS, + MOVE_ENDURE, + MOVE_PSYCH_UP, + MOVE_CURSE, + MOVE_HELPING_HAND, + MOVE_SLEEP_TALK), + + egg_moves(LARVITAR, + MOVE_PURSUIT, + MOVE_STOMP, + MOVE_OUTRAGE, + MOVE_FOCUS_ENERGY, + MOVE_ANCIENT_POWER, + MOVE_DRAGON_DANCE, + MOVE_CURSE), + + egg_moves(TREECKO, + MOVE_CRUNCH, + MOVE_MUD_SPORT, + MOVE_ENDEAVOR, + MOVE_LEECH_SEED, + MOVE_DRAGON_BREATH, + MOVE_CRUSH_CLAW), + + egg_moves(TORCHIC, + MOVE_COUNTER, + MOVE_REVERSAL, + MOVE_ENDURE, + MOVE_SWAGGER, + MOVE_ROCK_SLIDE, + MOVE_SMELLING_SALT), + + egg_moves(MUDKIP, + MOVE_REFRESH, + MOVE_UPROAR, + MOVE_CURSE, + MOVE_STOMP, + MOVE_ICE_BALL, + MOVE_MIRROR_COAT), + + egg_moves(POOCHYENA, + MOVE_ASTONISH, + MOVE_POISON_FANG, + MOVE_COVET, + MOVE_LEER, + MOVE_YAWN), + + egg_moves(ZIGZAGOON, + MOVE_CHARM, + MOVE_PURSUIT, + MOVE_SUBSTITUTE, + MOVE_TICKLE, + MOVE_TRICK), + + egg_moves(LOTAD, + MOVE_SYNTHESIS, + MOVE_RAZOR_LEAF, + MOVE_SWEET_SCENT, + MOVE_LEECH_SEED, + MOVE_FLAIL, + MOVE_WATER_GUN), + + egg_moves(SEEDOT, + MOVE_LEECH_SEED, + MOVE_AMNESIA, + MOVE_QUICK_ATTACK, + MOVE_RAZOR_WIND, + MOVE_TAKE_DOWN, + MOVE_FALSE_SWIPE), + + egg_moves(NINCADA, + MOVE_ENDURE, + MOVE_FAINT_ATTACK, + MOVE_GUST, + MOVE_SILVER_WIND), + + egg_moves(TAILLOW, + MOVE_PURSUIT, + MOVE_SUPERSONIC, + MOVE_REFRESH, + MOVE_MIRROR_MOVE, + MOVE_RAGE, + MOVE_SKY_ATTACK), + + egg_moves(SHROOMISH, + MOVE_FAKE_TEARS, + MOVE_SWAGGER, + MOVE_CHARM, + MOVE_FALSE_SWIPE, + MOVE_HELPING_HAND), + + egg_moves(SPINDA, + MOVE_ENCORE, + MOVE_ROCK_SLIDE, + MOVE_ASSIST, + MOVE_DISABLE, + MOVE_BATON_PASS, + MOVE_WISH, + MOVE_TRICK, + MOVE_SMELLING_SALT), + + egg_moves(WINGULL, + MOVE_MIST, + MOVE_TWISTER, + MOVE_AGILITY, + MOVE_GUST, + MOVE_WATER_SPORT), + + egg_moves(SURSKIT, + MOVE_FORESIGHT, + MOVE_MUD_SHOT, + MOVE_PSYBEAM, + MOVE_HYDRO_PUMP, + MOVE_MIND_READER), + + egg_moves(WAILMER, + MOVE_DOUBLE_EDGE, + MOVE_THRASH, + MOVE_SWAGGER, + MOVE_SNORE, + MOVE_SLEEP_TALK, + MOVE_CURSE, + MOVE_FISSURE, + MOVE_TICKLE), + + egg_moves(SKITTY, + MOVE_HELPING_HAND, + MOVE_PSYCH_UP, + MOVE_UPROAR, + MOVE_FAKE_TEARS, + MOVE_WISH, + MOVE_BATON_PASS, + MOVE_SUBSTITUTE, + MOVE_TICKLE), + + egg_moves(KECLEON, + MOVE_DISABLE, + MOVE_MAGIC_COAT, + MOVE_TRICK), + + egg_moves(NOSEPASS, + MOVE_MAGNITUDE, + MOVE_ROLLOUT, + MOVE_EXPLOSION), + + egg_moves(TORKOAL, + MOVE_ERUPTION, + MOVE_ENDURE, + MOVE_SLEEP_TALK, + MOVE_YAWN), + + egg_moves(SABLEYE, + MOVE_PSYCH_UP, + MOVE_RECOVER, + MOVE_MOONLIGHT), + + egg_moves(BARBOACH, + MOVE_THRASH, + MOVE_WHIRLPOOL, + MOVE_SPARK), + + egg_moves(LUVDISC, + MOVE_SPLASH, + MOVE_SUPERSONIC, + MOVE_WATER_SPORT, + MOVE_MUD_SPORT), + + egg_moves(CORPHISH, + MOVE_MUD_SPORT, + MOVE_ENDEAVOR, + MOVE_BODY_SLAM, + MOVE_ANCIENT_POWER), + + egg_moves(FEEBAS, + MOVE_MIRROR_COAT, + MOVE_DRAGON_BREATH, + MOVE_MUD_SPORT, + MOVE_HYPNOSIS, + MOVE_LIGHT_SCREEN, + MOVE_CONFUSE_RAY), + + egg_moves(CARVANHA, + MOVE_HYDRO_PUMP, + MOVE_DOUBLE_EDGE, + MOVE_THRASH), + + egg_moves(TRAPINCH, + MOVE_FOCUS_ENERGY, + MOVE_QUICK_ATTACK, + MOVE_GUST), + + egg_moves(MAKUHITA, + MOVE_FAINT_ATTACK, + MOVE_DETECT, + MOVE_FORESIGHT, + MOVE_HELPING_HAND, + MOVE_CROSS_CHOP, + MOVE_REVENGE, + MOVE_DYNAMIC_PUNCH, + MOVE_COUNTER), + + egg_moves(ELECTRIKE, + MOVE_CRUNCH, + MOVE_HEADBUTT, + MOVE_UPROAR, + MOVE_CURSE, + MOVE_SWIFT), + + egg_moves(NUMEL, + MOVE_HOWL, + MOVE_SCARY_FACE, + MOVE_BODY_SLAM, + MOVE_ROLLOUT, + MOVE_DEFENSE_CURL, + MOVE_STOMP), + + egg_moves(SPHEAL, + MOVE_WATER_SPORT, + MOVE_STOCKPILE, + MOVE_SWALLOW, + MOVE_SPIT_UP, + MOVE_YAWN, + MOVE_ROCK_SLIDE, + MOVE_CURSE, + MOVE_FISSURE), + + egg_moves(CACNEA, + MOVE_GRASS_WHISTLE, + MOVE_ACID, + MOVE_TEETER_DANCE, + MOVE_DYNAMIC_PUNCH, + MOVE_COUNTER), + + egg_moves(SNORUNT, + MOVE_BLOCK, + MOVE_SPIKES), + + egg_moves(AZURILL, + MOVE_ENCORE, + MOVE_SING, + MOVE_REFRESH, + MOVE_SLAM, + MOVE_TICKLE), + + egg_moves(SPOINK, + MOVE_FUTURE_SIGHT, + MOVE_EXTRASENSORY, + MOVE_SUBSTITUTE, + MOVE_TRICK), + + egg_moves(PLUSLE, + MOVE_SUBSTITUTE, + MOVE_WISH), + + egg_moves(MINUN, + MOVE_SUBSTITUTE, + MOVE_WISH), + + egg_moves(MAWILE, + MOVE_SWORDS_DANCE, + MOVE_FALSE_SWIPE, + MOVE_POISON_FANG, + MOVE_PSYCH_UP, + MOVE_ANCIENT_POWER, + MOVE_TICKLE), + + egg_moves(MEDITITE, + MOVE_FIRE_PUNCH, + MOVE_THUNDER_PUNCH, + MOVE_ICE_PUNCH, + MOVE_FORESIGHT, + MOVE_FAKE_OUT, + MOVE_BATON_PASS, + MOVE_DYNAMIC_PUNCH), + + egg_moves(SWABLU, + MOVE_AGILITY, + MOVE_HAZE, + MOVE_PURSUIT, + MOVE_RAGE), + + egg_moves(DUSKULL, + MOVE_IMPRISON, + MOVE_DESTINY_BOND, + MOVE_PAIN_SPLIT, + MOVE_GRUDGE, + MOVE_MEMENTO, + MOVE_FAINT_ATTACK), + + egg_moves(ROSELIA, + MOVE_SPIKES, + MOVE_SYNTHESIS, + MOVE_PIN_MISSILE, + MOVE_COTTON_SPORE), + + egg_moves(SLAKOTH, + MOVE_PURSUIT, + MOVE_SLASH, + MOVE_BODY_SLAM, + MOVE_SNORE, + MOVE_CRUSH_CLAW, + MOVE_CURSE, + MOVE_SLEEP_TALK), + + egg_moves(GULPIN, + MOVE_DREAM_EATER, + MOVE_ACID_ARMOR, + MOVE_SMOG, + MOVE_PAIN_SPLIT), + + egg_moves(TROPIUS, + MOVE_HEADBUTT, + MOVE_SLAM, + MOVE_RAZOR_WIND, + MOVE_LEECH_SEED, + MOVE_NATURE_POWER), + + egg_moves(WHISMUR, + MOVE_TAKE_DOWN, + MOVE_SNORE, + MOVE_SWAGGER, + MOVE_EXTRASENSORY, + MOVE_SMELLING_SALT), + + egg_moves(CLAMPERL, + MOVE_REFRESH, + MOVE_MUD_SPORT, + MOVE_BODY_SLAM, + MOVE_SUPERSONIC, + MOVE_BARRIER, + MOVE_CONFUSE_RAY), + + egg_moves(ABSOL, + MOVE_BATON_PASS, + MOVE_FAINT_ATTACK, + MOVE_DOUBLE_EDGE, + MOVE_MAGIC_COAT, + MOVE_CURSE, + MOVE_SUBSTITUTE), + + egg_moves(SHUPPET, + MOVE_DISABLE, + MOVE_DESTINY_BOND, + MOVE_FORESIGHT, + MOVE_ASTONISH, + MOVE_IMPRISON), + + egg_moves(SEVIPER, + MOVE_STOCKPILE, + MOVE_SWALLOW, + MOVE_SPIT_UP, + MOVE_BODY_SLAM), + + egg_moves(ZANGOOSE, + MOVE_FLAIL, + MOVE_DOUBLE_KICK, + MOVE_RAZOR_WIND, + MOVE_COUNTER, + MOVE_ROAR, + MOVE_CURSE), + + egg_moves(RELICANTH, + MOVE_MAGNITUDE, + MOVE_SKULL_BASH, + MOVE_WATER_SPORT, + MOVE_AMNESIA, + MOVE_SLEEP_TALK, + MOVE_ROCK_SLIDE), + + egg_moves(ARON, + MOVE_ENDEAVOR, + MOVE_BODY_SLAM, + MOVE_STOMP, + MOVE_SMELLING_SALT), + + egg_moves(CASTFORM, + MOVE_FUTURE_SIGHT, + MOVE_PSYCH_UP), + + egg_moves(VOLBEAT, + MOVE_BATON_PASS, + MOVE_SILVER_WIND, + MOVE_TRICK), + + egg_moves(ILLUMISE, + MOVE_BATON_PASS, + MOVE_SILVER_WIND, + MOVE_GROWTH), + + egg_moves(LILEEP, + MOVE_BARRIER, + MOVE_RECOVER, + MOVE_MIRROR_COAT, + MOVE_ROCK_SLIDE), + + egg_moves(ANORITH, + MOVE_RAPID_SPIN, + MOVE_KNOCK_OFF, + MOVE_SWORDS_DANCE, + MOVE_ROCK_SLIDE), + + egg_moves(RALTS, + MOVE_DISABLE, + MOVE_WILL_O_WISP, + MOVE_MEAN_LOOK, + MOVE_MEMENTO, + MOVE_DESTINY_BOND), + + egg_moves(BAGON, + MOVE_HYDRO_PUMP, + MOVE_THRASH, + MOVE_DRAGON_RAGE, + MOVE_TWISTER, + MOVE_DRAGON_DANCE), + + egg_moves(CHIMECHO, + MOVE_DISABLE, + MOVE_CURSE, + MOVE_HYPNOSIS, + MOVE_DREAM_EATER), + + 0xFFFF +}; diff --git a/src/data/pokemon/evolution.h b/src/data/pokemon/evolution.h new file mode 100644 index 000000000..919416fee --- /dev/null +++ b/src/data/pokemon/evolution.h @@ -0,0 +1,608 @@ +// + +// + +#ifndef POKERUBY_EVOLUTION_H +#define POKERUBY_EVOLUTION_H + +const struct EvolutionData gEvolutionTable[] = { + {{ // ?????????? + }}, {{ // Bulbasaur + {EVO_LEVEL, 16, SPECIES_IVYSAUR}, + }}, {{ // Ivysaur + {EVO_LEVEL, 32, SPECIES_VENUSAUR}, + }}, {{ // Venusaur + }}, {{ // Charmander + {EVO_LEVEL, 16, SPECIES_CHARMELEON}, + }}, {{ // Charmeleon + {EVO_LEVEL, 36, SPECIES_CHARIZARD}, + }}, {{ // Charizard + }}, {{ // Squirtle + {EVO_LEVEL, 16, SPECIES_WARTORTLE}, + }}, {{ // Wartortle + {EVO_LEVEL, 36, SPECIES_BLASTOISE}, + }}, {{ // Blastoise + }}, {{ // Caterpie + {EVO_LEVEL, 7, SPECIES_METAPOD}, + }}, {{ // Metapod + {EVO_LEVEL, 10, SPECIES_BUTTERFREE}, + }}, {{ // Butterfree + }}, {{ // Weedle + {EVO_LEVEL, 7, SPECIES_KAKUNA}, + }}, {{ // Kakuna + {EVO_LEVEL, 10, SPECIES_BEEDRILL}, + }}, {{ // Beedrill + }}, {{ // Pidgey + {EVO_LEVEL, 18, SPECIES_PIDGEOTTO}, + }}, {{ // Pidgeotto + {EVO_LEVEL, 36, SPECIES_PIDGEOT}, + }}, {{ // Pidgeot + }}, {{ // Rattata + {EVO_LEVEL, 20, SPECIES_RATICATE}, + }}, {{ // Raticate + }}, {{ // Spearow + {EVO_LEVEL, 20, SPECIES_FEAROW}, + }}, {{ // Fearow + }}, {{ // Ekans + {EVO_LEVEL, 22, SPECIES_ARBOK}, + }}, {{ // Arbok + }}, {{ // Pikachu + {EVO_ITEM, ITEM_THUNDER_STONE, SPECIES_RAICHU}, + }}, {{ // Raichu + }}, {{ // Sandshrew + {EVO_LEVEL, 22, SPECIES_SANDSLASH}, + }}, {{ // Sandslash + }}, {{ // Nidoran♀ + {EVO_LEVEL, 16, SPECIES_NIDORINA}, + }}, {{ // Nidorina + {EVO_ITEM, ITEM_MOON_STONE, SPECIES_NIDOQUEEN}, + }}, {{ // Nidoqueen + }}, {{ // Nidoran♂ + {EVO_LEVEL, 16, SPECIES_NIDORINO}, + }}, {{ // Nidorino + {EVO_ITEM, ITEM_MOON_STONE, SPECIES_NIDOKING}, + }}, {{ // Nidoking + }}, {{ // Clefairy + {EVO_ITEM, ITEM_MOON_STONE, SPECIES_CLEFABLE}, + }}, {{ // Clefable + }}, {{ // Vulpix + {EVO_ITEM, ITEM_FIRE_STONE, SPECIES_NINETALES}, + }}, {{ // Ninetales + }}, {{ // Jigglypuff + {EVO_ITEM, ITEM_MOON_STONE, SPECIES_WIGGLYTUFF}, + }}, {{ // Wigglytuff + }}, {{ // Zubat + {EVO_LEVEL, 22, SPECIES_GOLBAT}, + }}, {{ // Golbat + {EVO_FRIENDSHIP, 0, SPECIES_CROBAT}, + }}, {{ // Oddish + {EVO_LEVEL, 21, SPECIES_GLOOM}, + }}, {{ // Gloom + {EVO_ITEM, ITEM_LEAF_STONE, SPECIES_VILEPLUME}, + {EVO_ITEM, ITEM_SUN_STONE, SPECIES_BELLOSSOM}, + }}, {{ // Vileplume + }}, {{ // Paras + {EVO_LEVEL, 24, SPECIES_PARASECT}, + }}, {{ // Parasect + }}, {{ // Venonat + {EVO_LEVEL, 31, SPECIES_VENOMOTH}, + }}, {{ // Venomoth + }}, {{ // Diglett + {EVO_LEVEL, 26, SPECIES_DUGTRIO}, + }}, {{ // Dugtrio + }}, {{ // Meowth + {EVO_LEVEL, 28, SPECIES_PERSIAN}, + }}, {{ // Persian + }}, {{ // Psyduck + {EVO_LEVEL, 33, SPECIES_GOLDUCK}, + }}, {{ // Golduck + }}, {{ // Mankey + {EVO_LEVEL, 28, SPECIES_PRIMEAPE}, + }}, {{ // Primeape + }}, {{ // Growlithe + {EVO_ITEM, ITEM_FIRE_STONE, SPECIES_ARCANINE}, + }}, {{ // Arcanine + }}, {{ // Poliwag + {EVO_LEVEL, 25, SPECIES_POLIWHIRL}, + }}, {{ // Poliwhirl + {EVO_ITEM, ITEM_WATER_STONE, SPECIES_POLIWRATH}, + {EVO_TRADE_ITEM, ITEM_KINGS_ROCK, SPECIES_POLITOED}, + }}, {{ // Poliwrath + }}, {{ // Abra + {EVO_LEVEL, 16, SPECIES_KADABRA}, + }}, {{ // Kadabra + {EVO_TRADE, 0, SPECIES_ALAKAZAM}, + }}, {{ // Alakazam + }}, {{ // Machop + {EVO_LEVEL, 28, SPECIES_MACHOKE}, + }}, {{ // Machoke + {EVO_TRADE, 0, SPECIES_MACHAMP}, + }}, {{ // Machamp + }}, {{ // Bellsprout + {EVO_LEVEL, 21, SPECIES_WEEPINBELL}, + }}, {{ // Weepinbell + {EVO_ITEM, ITEM_LEAF_STONE, SPECIES_VICTREEBEL}, + }}, {{ // Victreebel + }}, {{ // Tentacool + {EVO_LEVEL, 30, SPECIES_TENTACRUEL}, + }}, {{ // Tentacruel + }}, {{ // Geodude + {EVO_LEVEL, 25, SPECIES_GRAVELER}, + }}, {{ // Graveler + {EVO_TRADE, 0, SPECIES_GOLEM}, + }}, {{ // Golem + }}, {{ // Ponyta + {EVO_LEVEL, 40, SPECIES_RAPIDASH}, + }}, {{ // Rapidash + }}, {{ // Slowpoke + {EVO_LEVEL, 37, SPECIES_SLOWBRO}, + {EVO_TRADE_ITEM, ITEM_KINGS_ROCK, SPECIES_SLOWKING}, + }}, {{ // Slowbro + }}, {{ // Magnemite + {EVO_LEVEL, 30, SPECIES_MAGNETON}, + }}, {{ // Magneton + }}, {{ // Farfetch'd + }}, {{ // Doduo + {EVO_LEVEL, 31, SPECIES_DODRIO}, + }}, {{ // Dodrio + }}, {{ // Seel + {EVO_LEVEL, 34, SPECIES_DEWGONG}, + }}, {{ // Dewgong + }}, {{ // Grimer + {EVO_LEVEL, 38, SPECIES_MUK}, + }}, {{ // Muk + }}, {{ // Shellder + {EVO_ITEM, ITEM_WATER_STONE, SPECIES_CLOYSTER}, + }}, {{ // Cloyster + }}, {{ // Gastly + {EVO_LEVEL, 25, SPECIES_HAUNTER}, + }}, {{ // Haunter + {EVO_TRADE, 0, SPECIES_GENGAR}, + }}, {{ // Gengar + }}, {{ // Onix + {EVO_TRADE_ITEM, ITEM_METAL_COAT, SPECIES_STEELIX}, + }}, {{ // Drowzee + {EVO_LEVEL, 26, SPECIES_HYPNO}, + }}, {{ // Hypno + }}, {{ // Krabby + {EVO_LEVEL, 28, SPECIES_KINGLER}, + }}, {{ // Kingler + }}, {{ // Voltorb + {EVO_LEVEL, 30, SPECIES_ELECTRODE}, + }}, {{ // Electrode + }}, {{ // Exeggcute + {EVO_ITEM, ITEM_LEAF_STONE, SPECIES_EXEGGUTOR}, + }}, {{ // Exeggutor + }}, {{ // Cubone + {EVO_LEVEL, 28, SPECIES_MAROWAK}, + }}, {{ // Marowak + }}, {{ // Hitmonlee + }}, {{ // Hitmonchan + }}, {{ // Lickitung + }}, {{ // Koffing + {EVO_LEVEL, 35, SPECIES_WEEZING}, + }}, {{ // Weezing + }}, {{ // Rhyhorn + {EVO_LEVEL, 42, SPECIES_RHYDON}, + }}, {{ // Rhydon + }}, {{ // Chansey + {EVO_FRIENDSHIP, 0, SPECIES_BLISSEY}, + }}, {{ // Tangela + }}, {{ // Kangaskhan + }}, {{ // Horsea + {EVO_LEVEL, 32, SPECIES_SEADRA}, + }}, {{ // Seadra + {EVO_TRADE_ITEM, ITEM_DRAGON_SCALE, SPECIES_KINGDRA}, + }}, {{ // Goldeen + {EVO_LEVEL, 33, SPECIES_SEAKING}, + }}, {{ // Seaking + }}, {{ // Staryu + {EVO_ITEM, ITEM_WATER_STONE, SPECIES_STARMIE}, + }}, {{ // Starmie + }}, {{ // Mr. mime + }}, {{ // Scyther + {EVO_TRADE_ITEM, ITEM_METAL_COAT, SPECIES_SCIZOR}, + }}, {{ // Jynx + }}, {{ // Electabuzz + }}, {{ // Magmar + }}, {{ // Pinsir + }}, {{ // Tauros + }}, {{ // Magikarp + {EVO_LEVEL, 20, SPECIES_GYARADOS}, + }}, {{ // Gyarados + }}, {{ // Lapras + }}, {{ // Ditto + }}, {{ // Eevee + {EVO_ITEM, ITEM_THUNDER_STONE, SPECIES_JOLTEON}, + {EVO_ITEM, ITEM_WATER_STONE, SPECIES_VAPOREON}, + {EVO_ITEM, ITEM_FIRE_STONE, SPECIES_FLAREON}, + {EVO_FRIENDSHIP_DAY, 0, SPECIES_ESPEON}, + {EVO_FRIENDSHIP_NIGHT, 0, SPECIES_UMBREON}, + }}, {{ // Vaporeon + }}, {{ // Jolteon + }}, {{ // Flareon + }}, {{ // Porygon + {EVO_TRADE_ITEM, ITEM_UP_GRADE, SPECIES_PORYGON2}, + }}, {{ // Omanyte + {EVO_LEVEL, 40, SPECIES_OMASTAR}, + }}, {{ // Omastar + }}, {{ // Kabuto + {EVO_LEVEL, 40, SPECIES_KABUTOPS}, + }}, {{ // Kabutops + }}, {{ // Aerodactyl + }}, {{ // Snorlax + }}, {{ // Articuno + }}, {{ // Zapdos + }}, {{ // Moltres + }}, {{ // Dratini + {EVO_LEVEL, 30, SPECIES_DRAGONAIR}, + }}, {{ // Dragonair + {EVO_LEVEL, 55, SPECIES_DRAGONITE}, + }}, {{ // Dragonite + }}, {{ // Mewtwo + }}, {{ // Mew + }}, {{ // Chikorita + {EVO_LEVEL, 16, SPECIES_BAYLEEF}, + }}, {{ // Bayleef + {EVO_LEVEL, 32, SPECIES_MEGANIUM}, + }}, {{ // Meganium + }}, {{ // Cyndaquil + {EVO_LEVEL, 14, SPECIES_QUILAVA}, + }}, {{ // Quilava + {EVO_LEVEL, 36, SPECIES_TYPHLOSION}, + }}, {{ // Typhlosion + }}, {{ // Totodile + {EVO_LEVEL, 18, SPECIES_CROCONAW}, + }}, {{ // Croconaw + {EVO_LEVEL, 30, SPECIES_FERALIGATR}, + }}, {{ // Feraligatr + }}, {{ // Sentret + {EVO_LEVEL, 15, SPECIES_FURRET}, + }}, {{ // Furret + }}, {{ // Hoothoot + {EVO_LEVEL, 20, SPECIES_NOCTOWL}, + }}, {{ // Noctowl + }}, {{ // Ledyba + {EVO_LEVEL, 18, SPECIES_LEDIAN}, + }}, {{ // Ledian + }}, {{ // Spinarak + {EVO_LEVEL, 22, SPECIES_ARIADOS}, + }}, {{ // Ariados + }}, {{ // Crobat + }}, {{ // Chinchou + {EVO_LEVEL, 27, SPECIES_LANTURN}, + }}, {{ // Lanturn + }}, {{ // Pichu + {EVO_FRIENDSHIP, 0, SPECIES_PIKACHU}, + }}, {{ // Cleffa + {EVO_FRIENDSHIP, 0, SPECIES_CLEFAIRY}, + }}, {{ // Igglybuff + {EVO_FRIENDSHIP, 0, SPECIES_JIGGLYPUFF}, + }}, {{ // Togepi + {EVO_FRIENDSHIP, 0, SPECIES_TOGETIC}, + }}, {{ // Togetic + }}, {{ // Natu + {EVO_LEVEL, 25, SPECIES_XATU}, + }}, {{ // Xatu + }}, {{ // Mareep + {EVO_LEVEL, 15, SPECIES_FLAAFFY}, + }}, {{ // Flaaffy + {EVO_LEVEL, 30, SPECIES_AMPHAROS}, + }}, {{ // Ampharos + }}, {{ // Bellossom + }}, {{ // Marill + {EVO_LEVEL, 18, SPECIES_AZUMARILL}, + }}, {{ // Azumarill + }}, {{ // Sudowoodo + }}, {{ // Politoed + }}, {{ // Hoppip + {EVO_LEVEL, 18, SPECIES_SKIPLOOM}, + }}, {{ // Skiploom + {EVO_LEVEL, 27, SPECIES_JUMPLUFF}, + }}, {{ // Jumpluff + }}, {{ // Aipom + }}, {{ // Sunkern + {EVO_ITEM, ITEM_SUN_STONE, SPECIES_SUNFLORA}, + }}, {{ // Sunflora + }}, {{ // Yanma + }}, {{ // Wooper + {EVO_LEVEL, 20, SPECIES_QUAGSIRE}, + }}, {{ // Quagsire + }}, {{ // Espeon + }}, {{ // Umbreon + }}, {{ // Murkrow + }}, {{ // Slowking + }}, {{ // Misdreavus + }}, {{ // Unown + }}, {{ // Wobbuffet + }}, {{ // Girafarig + }}, {{ // Pineco + {EVO_LEVEL, 31, SPECIES_FORRETRESS}, + }}, {{ // Forretress + }}, {{ // Dunsparce + }}, {{ // Gligar + }}, {{ // Steelix + }}, {{ // Snubbull + {EVO_LEVEL, 23, SPECIES_GRANBULL}, + }}, {{ // Granbull + }}, {{ // Qwilfish + }}, {{ // Scizor + }}, {{ // Shuckle + }}, {{ // Heracross + }}, {{ // Sneasel + }}, {{ // Teddiursa + {EVO_LEVEL, 30, SPECIES_URSARING}, + }}, {{ // Ursaring + }}, {{ // Slugma + {EVO_LEVEL, 38, SPECIES_MAGCARGO}, + }}, {{ // Magcargo + }}, {{ // Swinub + {EVO_LEVEL, 33, SPECIES_PILOSWINE}, + }}, {{ // Piloswine + }}, {{ // Corsola + }}, {{ // Remoraid + {EVO_LEVEL, 25, SPECIES_OCTILLERY}, + }}, {{ // Octillery + }}, {{ // Delibird + }}, {{ // Mantine + }}, {{ // Skarmory + }}, {{ // Houndour + {EVO_LEVEL, 24, SPECIES_HOUNDOOM}, + }}, {{ // Houndoom + }}, {{ // Kingdra + }}, {{ // Phanpy + {EVO_LEVEL, 25, SPECIES_DONPHAN}, + }}, {{ // Donphan + }}, {{ // Porygon2 + }}, {{ // Stantler + }}, {{ // Smeargle + }}, {{ // Tyrogue + {EVO_LEVEL_ATK_LT_DEF, 20, SPECIES_HITMONCHAN}, + {EVO_LEVEL_ATK_GT_DEF, 20, SPECIES_HITMONLEE}, + {EVO_LEVEL_ATK_EQ_DEF, 20, SPECIES_HITMONTOP}, + }}, {{ // Hitmontop + }}, {{ // Smoochum + {EVO_LEVEL, 30, SPECIES_JYNX}, + }}, {{ // Elekid + {EVO_LEVEL, 30, SPECIES_ELECTABUZZ}, + }}, {{ // Magby + {EVO_LEVEL, 30, SPECIES_MAGMAR}, + }}, {{ // Miltank + }}, {{ // Blissey + }}, {{ // Raikou + }}, {{ // Entei + }}, {{ // Suicune + }}, {{ // Larvitar + {EVO_LEVEL, 30, SPECIES_PUPITAR}, + }}, {{ // Pupitar + {EVO_LEVEL, 55, SPECIES_TYRANITAR}, + }}, {{ // Tyranitar + }}, {{ // Lugia + }}, {{ // Ho-Oh + }}, {{ // Celebi + }}, {{ // ? + }}, {{ // ? + }}, {{ // ? + }}, {{ // ? + }}, {{ // ? + }}, {{ // ? + }}, {{ // ? + }}, {{ // ? + }}, {{ // ? + }}, {{ // ? + }}, {{ // ? + }}, {{ // ? + }}, {{ // ? + }}, {{ // ? + }}, {{ // ? + }}, {{ // ? + }}, {{ // ? + }}, {{ // ? + }}, {{ // ? + }}, {{ // ? + }}, {{ // ? + }}, {{ // ? + }}, {{ // ? + }}, {{ // ? + }}, {{ // ? + }}, {{ // Treecko + {EVO_LEVEL, 16, SPECIES_GROVYLE}, + }}, {{ // Grovyle + {EVO_LEVEL, 36, SPECIES_SCEPTILE}, + }}, {{ // Sceptile + }}, {{ // Torchic + {EVO_LEVEL, 16, SPECIES_COMBUSKEN}, + }}, {{ // Combusken + {EVO_LEVEL, 36, SPECIES_BLAZIKEN}, + }}, {{ // Blaziken + }}, {{ // Mudkip + {EVO_LEVEL, 16, SPECIES_MARSHTOMP}, + }}, {{ // Marshtomp + {EVO_LEVEL, 36, SPECIES_SWAMPERT}, + }}, {{ // Swampert + }}, {{ // Poochyena + {EVO_LEVEL, 18, SPECIES_MIGHTYENA}, + }}, {{ // Mightyena + }}, {{ // Zigzagoon + {EVO_LEVEL, 20, SPECIES_LINOONE}, + }}, {{ // Linoone + }}, {{ // Wurmple + {EVO_LEVEL_SILCOON, 7, SPECIES_SILCOON}, + {EVO_LEVEL_CASCOON, 7, SPECIES_CASCOON}, + }}, {{ // Silcoon + {EVO_LEVEL, 10, SPECIES_BEAUTIFLY}, + }}, {{ // Beautifly + }}, {{ // Cascoon + {EVO_LEVEL, 10, SPECIES_DUSTOX}, + }}, {{ // Dustox + }}, {{ // Lotad + {EVO_LEVEL, 14, SPECIES_LOMBRE}, + }}, {{ // Lombre + {EVO_ITEM, ITEM_WATER_STONE, SPECIES_LUDICOLO}, + }}, {{ // Ludicolo + }}, {{ // Seedot + {EVO_LEVEL, 14, SPECIES_NUZLEAF}, + }}, {{ // Nuzleaf + {EVO_ITEM, ITEM_LEAF_STONE, SPECIES_SHIFTRY}, + }}, {{ // Shiftry + }}, {{ // Nincada + {EVO_LEVEL_NINJASK, 20, SPECIES_NINJASK}, + {EVO_LEVEL_SHEDINJA, 20, SPECIES_SHEDINJA}, + }}, {{ // Ninjask + }}, {{ // Shedinja + }}, {{ // Taillow + {EVO_LEVEL, 22, SPECIES_SWELLOW}, + }}, {{ // Swellow + }}, {{ // Shroomish + {EVO_LEVEL, 23, SPECIES_BRELOOM}, + }}, {{ // Breloom + }}, {{ // Spinda + }}, {{ // Wingull + {EVO_LEVEL, 25, SPECIES_PELIPPER}, + }}, {{ // Pelipper + }}, {{ // Surskit + {EVO_LEVEL, 22, SPECIES_MASQUERAIN}, + }}, {{ // Masquerain + }}, {{ // Wailmer + {EVO_LEVEL, 40, SPECIES_WAILORD}, + }}, {{ // Wailord + }}, {{ // Skitty + {EVO_ITEM, ITEM_MOON_STONE, SPECIES_DELCATTY}, + }}, {{ // Delcatty + }}, {{ // Kecleon + }}, {{ // Baltoy + {EVO_LEVEL, 36, SPECIES_CLAYDOL}, + }}, {{ // Claydol + }}, {{ // Nosepass + }}, {{ // Torkoal + }}, {{ // Sableye + }}, {{ // Barboach + {EVO_LEVEL, 30, SPECIES_WHISCASH}, + }}, {{ // Whiscash + }}, {{ // Luvdisc + }}, {{ // Corphish + {EVO_LEVEL, 30, SPECIES_CRAWDAUNT}, + }}, {{ // Crawdaunt + }}, {{ // Feebas + {EVO_BEAUTY, 170, SPECIES_MILOTIC}, + }}, {{ // Milotic + }}, {{ // Carvanha + {EVO_LEVEL, 30, SPECIES_SHARPEDO}, + }}, {{ // Sharpedo + }}, {{ // Trapinch + {EVO_LEVEL, 35, SPECIES_VIBRAVA}, + }}, {{ // Vibrava + {EVO_LEVEL, 45, SPECIES_FLYGON}, + }}, {{ // Flygon + }}, {{ // Makuhita + {EVO_LEVEL, 24, SPECIES_HARIYAMA}, + }}, {{ // Hariyama + }}, {{ // Electrike + {EVO_LEVEL, 26, SPECIES_MANECTRIC}, + }}, {{ // Manectric + }}, {{ // Numel + {EVO_LEVEL, 33, SPECIES_CAMERUPT}, + }}, {{ // Camerupt + }}, {{ // Spheal + {EVO_LEVEL, 32, SPECIES_SEALEO}, + }}, {{ // Sealeo + {EVO_LEVEL, 44, SPECIES_WALREIN}, + }}, {{ // Walrein + }}, {{ // Cacnea + {EVO_LEVEL, 32, SPECIES_CACTURNE}, + }}, {{ // Cacturne + }}, {{ // Snorunt + {EVO_LEVEL, 42, SPECIES_GLALIE}, + }}, {{ // Glalie + }}, {{ // Lunatone + }}, {{ // Solrock + }}, {{ // Azurill + {EVO_FRIENDSHIP, 0, SPECIES_MARILL}, + }}, {{ // Spoink + {EVO_LEVEL, 32, SPECIES_GRUMPIG}, + }}, {{ // Grumpig + }}, {{ // Plusle + }}, {{ // Minun + }}, {{ // Mawile + }}, {{ // Meditite + {EVO_LEVEL, 37, SPECIES_MEDICHAM}, + }}, {{ // Medicham + }}, {{ // Swablu + {EVO_LEVEL, 35, SPECIES_ALTARIA}, + }}, {{ // Altaria + }}, {{ // Wynaut + {EVO_LEVEL, 15, SPECIES_WOBBUFFET}, + }}, {{ // Duskull + {EVO_LEVEL, 37, SPECIES_DUSCLOPS}, + }}, {{ // Dusclops + }}, {{ // Roselia + }}, {{ // Slakoth + {EVO_LEVEL, 18, SPECIES_VIGOROTH}, + }}, {{ // Vigoroth + {EVO_LEVEL, 36, SPECIES_SLAKING}, + }}, {{ // Slaking + }}, {{ // Gulpin + {EVO_LEVEL, 26, SPECIES_SWALOT}, + }}, {{ // Swalot + }}, {{ // Tropius + }}, {{ // Whismur + {EVO_LEVEL, 20, SPECIES_LOUDRED}, + }}, {{ // Loudred + {EVO_LEVEL, 40, SPECIES_EXPLOUD}, + }}, {{ // Exploud + }}, {{ // Clamperl + {EVO_TRADE_ITEM, ITEM_DEEP_SEA_TOOTH, SPECIES_HUNTAIL}, + {EVO_TRADE_ITEM, ITEM_DEEP_SEA_SCALE, SPECIES_GOREBYSS}, + }}, {{ // Huntail + }}, {{ // Gorebyss + }}, {{ // Absol + }}, {{ // Shuppet + {EVO_LEVEL, 37, SPECIES_BANETTE}, + }}, {{ // Banette + }}, {{ // Seviper + }}, {{ // Zangoose + }}, {{ // Relicanth + }}, {{ // Aron + {EVO_LEVEL, 32, SPECIES_LAIRON}, + }}, {{ // Lairon + {EVO_LEVEL, 42, SPECIES_AGGRON}, + }}, {{ // Aggron + }}, {{ // Castform + }}, {{ // Volbeat + }}, {{ // Illumise + }}, {{ // Lileep + {EVO_LEVEL, 40, SPECIES_CRADILY}, + }}, {{ // Cradily + }}, {{ // Anorith + {EVO_LEVEL, 40, SPECIES_ARMALDO}, + }}, {{ // Armaldo + }}, {{ // Ralts + {EVO_LEVEL, 20, SPECIES_KIRLIA}, + }}, {{ // Kirlia + {EVO_LEVEL, 30, SPECIES_GARDEVOIR}, + }}, {{ // Gardevoir + }}, {{ // Bagon + {EVO_LEVEL, 30, SPECIES_SHELGON}, + }}, {{ // Shelgon + {EVO_LEVEL, 50, SPECIES_SALAMENCE}, + }}, {{ // Salamence + }}, {{ // Beldum + {EVO_LEVEL, 20, SPECIES_METANG}, + }}, {{ // Metang + {EVO_LEVEL, 45, SPECIES_METAGROSS}, + }}, {{ // Metagross + }}, {{ // Regirock + }}, {{ // Regice + }}, {{ // Registeel + }}, {{ // Kyogre + }}, {{ // Groudon + }}, {{ // Rayquaza + }}, {{ // Latias + }}, {{ // Latios + }}, {{ // Jirachi + }}, {{ // Deoxys + }}, {{ // Chimecho + }} +}; + +#endif //POKERUBY_EVOLUTION_H diff --git a/src/data/pokemon/experience_tables.h b/src/data/pokemon/experience_tables.h new file mode 100644 index 000000000..2fb416fe9 --- /dev/null +++ b/src/data/pokemon/experience_tables.h @@ -0,0 +1,828 @@ +// + +// + +#ifndef POKERUBY_EXPERIENCE_TABLES_H +#define POKERUBY_EXPERIENCE_TABLES_H + +const u32 gExperienceTables[][101] = { + { // Medium Fast + 0, // 0 + 1, // 1 + 8, // 2 + 27, // 3 + 64, // 4 + 125, // 5 + 216, // 6 + 343, // 7 + 512, // 8 + 729, // 9 + 1000, // 10 + 1331, // 11 + 1728, // 12 + 2197, // 13 + 2744, // 14 + 3375, // 15 + 4096, // 16 + 4913, // 17 + 5832, // 18 + 6859, // 19 + 8000, // 20 + 9261, // 21 + 10648, // 22 + 12167, // 23 + 13824, // 24 + 15625, // 25 + 17576, // 26 + 19683, // 27 + 21952, // 28 + 24389, // 29 + 27000, // 30 + 29791, // 31 + 32768, // 32 + 35937, // 33 + 39304, // 34 + 42875, // 35 + 46656, // 36 + 50653, // 37 + 54872, // 38 + 59319, // 39 + 64000, // 40 + 68921, // 41 + 74088, // 42 + 79507, // 43 + 85184, // 44 + 91125, // 45 + 97336, // 46 + 103823, // 47 + 110592, // 48 + 117649, // 49 + 125000, // 50 + 132651, // 51 + 140608, // 52 + 148877, // 53 + 157464, // 54 + 166375, // 55 + 175616, // 56 + 185193, // 57 + 195112, // 58 + 205379, // 59 + 216000, // 60 + 226981, // 61 + 238328, // 62 + 250047, // 63 + 262144, // 64 + 274625, // 65 + 287496, // 66 + 300763, // 67 + 314432, // 68 + 328509, // 69 + 343000, // 70 + 357911, // 71 + 373248, // 72 + 389017, // 73 + 405224, // 74 + 421875, // 75 + 438976, // 76 + 456533, // 77 + 474552, // 78 + 493039, // 79 + 512000, // 80 + 531441, // 81 + 551368, // 82 + 571787, // 83 + 592704, // 84 + 614125, // 85 + 636056, // 86 + 658503, // 87 + 681472, // 88 + 704969, // 89 + 729000, // 90 + 753571, // 91 + 778688, // 92 + 804357, // 93 + 830584, // 94 + 857375, // 95 + 884736, // 96 + 912673, // 97 + 941192, // 98 + 970299, // 99 + 1000000 // 100 + }, { // Erratic + 0, // 0 + 1, // 1 + 15, // 2 + 52, // 3 + 122, // 4 + 237, // 5 + 406, // 6 + 637, // 7 + 942, // 8 + 1326, // 9 + 1800, // 10 + 2369, // 11 + 3041, // 12 + 3822, // 13 + 4719, // 14 + 5737, // 15 + 6881, // 16 + 8155, // 17 + 9564, // 18 + 11111, // 19 + 12800, // 20 + 14632, // 21 + 16610, // 22 + 18737, // 23 + 21012, // 24 + 23437, // 25 + 26012, // 26 + 28737, // 27 + 31610, // 28 + 34632, // 29 + 37800, // 30 + 41111, // 31 + 44564, // 32 + 48155, // 33 + 51881, // 34 + 55737, // 35 + 59719, // 36 + 63822, // 37 + 68041, // 38 + 72369, // 39 + 76800, // 40 + 81326, // 41 + 85942, // 42 + 90637, // 43 + 95406, // 44 + 100237, // 45 + 105122, // 46 + 110052, // 47 + 115015, // 48 + 120001, // 49 + 125000, // 50 + 131324, // 51 + 137795, // 52 + 144410, // 53 + 151165, // 54 + 158056, // 55 + 165079, // 56 + 172229, // 57 + 179503, // 58 + 186894, // 59 + 194400, // 60 + 202013, // 61 + 209728, // 62 + 217540, // 63 + 225443, // 64 + 233431, // 65 + 241496, // 66 + 249633, // 67 + 257834, // 68 + 267406, // 69 + 276458, // 70 + 286328, // 71 + 296358, // 72 + 305767, // 73 + 316074, // 74 + 326531, // 75 + 336255, // 76 + 346965, // 77 + 357812, // 78 + 367807, // 79 + 378880, // 80 + 390077, // 81 + 400293, // 82 + 411686, // 83 + 423190, // 84 + 433572, // 85 + 445239, // 86 + 457001, // 87 + 467489, // 88 + 479378, // 89 + 491346, // 90 + 501878, // 91 + 513934, // 92 + 526049, // 93 + 536557, // 94 + 548720, // 95 + 560922, // 96 + 571333, // 97 + 583539, // 98 + 591882, // 99 + 600000 // 100 + }, { // Fluctuating + 0, // 0 + 1, // 1 + 4, // 2 + 13, // 3 + 32, // 4 + 65, // 5 + 112, // 6 + 178, // 7 + 276, // 8 + 393, // 9 + 540, // 10 + 745, // 11 + 967, // 12 + 1230, // 13 + 1591, // 14 + 1957, // 15 + 2457, // 16 + 3046, // 17 + 3732, // 18 + 4526, // 19 + 5440, // 20 + 6482, // 21 + 7666, // 22 + 9003, // 23 + 10506, // 24 + 12187, // 25 + 14060, // 26 + 16140, // 27 + 18439, // 28 + 20974, // 29 + 23760, // 30 + 26811, // 31 + 30146, // 32 + 33780, // 33 + 37731, // 34 + 42017, // 35 + 46656, // 36 + 50653, // 37 + 55969, // 38 + 60505, // 39 + 66560, // 40 + 71677, // 41 + 78533, // 42 + 84277, // 43 + 91998, // 44 + 98415, // 45 + 107069, // 46 + 114205, // 47 + 123863, // 48 + 131766, // 49 + 142500, // 50 + 151222, // 51 + 163105, // 52 + 172697, // 53 + 185807, // 54 + 196322, // 55 + 210739, // 56 + 222231, // 57 + 238036, // 58 + 250562, // 59 + 267840, // 60 + 281456, // 61 + 300293, // 62 + 315059, // 63 + 335544, // 64 + 351520, // 65 + 373744, // 66 + 390991, // 67 + 415050, // 68 + 433631, // 69 + 459620, // 70 + 479600, // 71 + 507617, // 72 + 529063, // 73 + 559209, // 74 + 582187, // 75 + 614566, // 76 + 639146, // 77 + 673863, // 78 + 700115, // 79 + 737280, // 80 + 765275, // 81 + 804997, // 82 + 834809, // 83 + 877201, // 84 + 908905, // 85 + 954084, // 86 + 987754, // 87 + 1035837, // 88 + 1071552, // 89 + 1122660, // 90 + 1160499, // 91 + 1214753, // 92 + 1254796, // 93 + 1312322, // 94 + 1354652, // 95 + 1415577, // 96 + 1460276, // 97 + 1524731, // 98 + 1571884, // 99 + 1640000 // 100 + }, { // Medium Slow + 0, // 0 + 1, // 1 + 9, // 2 + 57, // 3 + 96, // 4 + 135, // 5 + 179, // 6 + 236, // 7 + 314, // 8 + 419, // 9 + 560, // 10 + 742, // 11 + 973, // 12 + 1261, // 13 + 1612, // 14 + 2035, // 15 + 2535, // 16 + 3120, // 17 + 3798, // 18 + 4575, // 19 + 5460, // 20 + 6458, // 21 + 7577, // 22 + 8825, // 23 + 10208, // 24 + 11735, // 25 + 13411, // 26 + 15244, // 27 + 17242, // 28 + 19411, // 29 + 21760, // 30 + 24294, // 31 + 27021, // 32 + 29949, // 33 + 33084, // 34 + 36435, // 35 + 40007, // 36 + 43808, // 37 + 47846, // 38 + 52127, // 39 + 56660, // 40 + 61450, // 41 + 66505, // 42 + 71833, // 43 + 77440, // 44 + 83335, // 45 + 89523, // 46 + 96012, // 47 + 102810, // 48 + 109923, // 49 + 117360, // 50 + 125126, // 51 + 133229, // 52 + 141677, // 53 + 150476, // 54 + 159635, // 55 + 169159, // 56 + 179056, // 57 + 189334, // 58 + 199999, // 59 + 211060, // 60 + 222522, // 61 + 234393, // 62 + 246681, // 63 + 259392, // 64 + 272535, // 65 + 286115, // 66 + 300140, // 67 + 314618, // 68 + 329555, // 69 + 344960, // 70 + 360838, // 71 + 377197, // 72 + 394045, // 73 + 411388, // 74 + 429235, // 75 + 447591, // 76 + 466464, // 77 + 485862, // 78 + 505791, // 79 + 526260, // 80 + 547274, // 81 + 568841, // 82 + 590969, // 83 + 613664, // 84 + 636935, // 85 + 660787, // 86 + 685228, // 87 + 710266, // 88 + 735907, // 89 + 762160, // 90 + 789030, // 91 + 816525, // 92 + 844653, // 93 + 873420, // 94 + 902835, // 95 + 932903, // 96 + 963632, // 97 + 995030, // 98 + 1027103, // 99 + 1059860 // 100 + }, { // Fast + 0, // 0 + 1, // 1 + 6, // 2 + 21, // 3 + 51, // 4 + 100, // 5 + 172, // 6 + 274, // 7 + 409, // 8 + 583, // 9 + 800, // 10 + 1064, // 11 + 1382, // 12 + 1757, // 13 + 2195, // 14 + 2700, // 15 + 3276, // 16 + 3930, // 17 + 4665, // 18 + 5487, // 19 + 6400, // 20 + 7408, // 21 + 8518, // 22 + 9733, // 23 + 11059, // 24 + 12500, // 25 + 14060, // 26 + 15746, // 27 + 17561, // 28 + 19511, // 29 + 21600, // 30 + 23832, // 31 + 26214, // 32 + 28749, // 33 + 31443, // 34 + 34300, // 35 + 37324, // 36 + 40522, // 37 + 43897, // 38 + 47455, // 39 + 51200, // 40 + 55136, // 41 + 59270, // 42 + 63605, // 43 + 68147, // 44 + 72900, // 45 + 77868, // 46 + 83058, // 47 + 88473, // 48 + 94119, // 49 + 100000, // 50 + 106120, // 51 + 112486, // 52 + 119101, // 53 + 125971, // 54 + 133100, // 55 + 140492, // 56 + 148154, // 57 + 156089, // 58 + 164303, // 59 + 172800, // 60 + 181584, // 61 + 190662, // 62 + 200037, // 63 + 209715, // 64 + 219700, // 65 + 229996, // 66 + 240610, // 67 + 251545, // 68 + 262807, // 69 + 274400, // 70 + 286328, // 71 + 298598, // 72 + 311213, // 73 + 324179, // 74 + 337500, // 75 + 351180, // 76 + 365226, // 77 + 379641, // 78 + 394431, // 79 + 409600, // 80 + 425152, // 81 + 441094, // 82 + 457429, // 83 + 474163, // 84 + 491300, // 85 + 508844, // 86 + 526802, // 87 + 545177, // 88 + 563975, // 89 + 583200, // 90 + 602856, // 91 + 622950, // 92 + 643485, // 93 + 664467, // 94 + 685900, // 95 + 707788, // 96 + 730138, // 97 + 752953, // 98 + 776239, // 99 + 800000 // 100 + }, { // Slow + 0, // 0 + 1, // 1 + 10, // 2 + 33, // 3 + 80, // 4 + 156, // 5 + 270, // 6 + 428, // 7 + 640, // 8 + 911, // 9 + 1250, // 10 + 1663, // 11 + 2160, // 12 + 2746, // 13 + 3430, // 14 + 4218, // 15 + 5120, // 16 + 6141, // 17 + 7290, // 18 + 8573, // 19 + 10000, // 20 + 11576, // 21 + 13310, // 22 + 15208, // 23 + 17280, // 24 + 19531, // 25 + 21970, // 26 + 24603, // 27 + 27440, // 28 + 30486, // 29 + 33750, // 30 + 37238, // 31 + 40960, // 32 + 44921, // 33 + 49130, // 34 + 53593, // 35 + 58320, // 36 + 63316, // 37 + 68590, // 38 + 74148, // 39 + 80000, // 40 + 86151, // 41 + 92610, // 42 + 99383, // 43 + 106480, // 44 + 113906, // 45 + 121670, // 46 + 129778, // 47 + 138240, // 48 + 147061, // 49 + 156250, // 50 + 165813, // 51 + 175760, // 52 + 186096, // 53 + 196830, // 54 + 207968, // 55 + 219520, // 56 + 231491, // 57 + 243890, // 58 + 256723, // 59 + 270000, // 60 + 283726, // 61 + 297910, // 62 + 312558, // 63 + 327680, // 64 + 343281, // 65 + 359370, // 66 + 375953, // 67 + 393040, // 68 + 410636, // 69 + 428750, // 70 + 447388, // 71 + 466560, // 72 + 486271, // 73 + 506530, // 74 + 527343, // 75 + 548720, // 76 + 570666, // 77 + 593190, // 78 + 616298, // 79 + 640000, // 80 + 664301, // 81 + 689210, // 82 + 714733, // 83 + 740880, // 84 + 767656, // 85 + 795070, // 86 + 823128, // 87 + 851840, // 88 + 881211, // 89 + 911250, // 90 + 941963, // 91 + 973360, // 92 + 1005446, // 93 + 1038230, // 94 + 1071718, // 95 + 1105920, // 96 + 1140841, // 97 + 1176490, // 98 + 1212873, // 99 + 1250000 // 100 + }, { // Medium Fast copy 2 (unused? to-do: investigate) + 0, // 0 + 1, // 1 + 8, // 2 + 27, // 3 + 64, // 4 + 125, // 5 + 216, // 6 + 343, // 7 + 512, // 8 + 729, // 9 + 1000, // 10 + 1331, // 11 + 1728, // 12 + 2197, // 13 + 2744, // 14 + 3375, // 15 + 4096, // 16 + 4913, // 17 + 5832, // 18 + 6859, // 19 + 8000, // 20 + 9261, // 21 + 10648, // 22 + 12167, // 23 + 13824, // 24 + 15625, // 25 + 17576, // 26 + 19683, // 27 + 21952, // 28 + 24389, // 29 + 27000, // 30 + 29791, // 31 + 32768, // 32 + 35937, // 33 + 39304, // 34 + 42875, // 35 + 46656, // 36 + 50653, // 37 + 54872, // 38 + 59319, // 39 + 64000, // 40 + 68921, // 41 + 74088, // 42 + 79507, // 43 + 85184, // 44 + 91125, // 45 + 97336, // 46 + 103823, // 47 + 110592, // 48 + 117649, // 49 + 125000, // 50 + 132651, // 51 + 140608, // 52 + 148877, // 53 + 157464, // 54 + 166375, // 55 + 175616, // 56 + 185193, // 57 + 195112, // 58 + 205379, // 59 + 216000, // 60 + 226981, // 61 + 238328, // 62 + 250047, // 63 + 262144, // 64 + 274625, // 65 + 287496, // 66 + 300763, // 67 + 314432, // 68 + 328509, // 69 + 343000, // 70 + 357911, // 71 + 373248, // 72 + 389017, // 73 + 405224, // 74 + 421875, // 75 + 438976, // 76 + 456533, // 77 + 474552, // 78 + 493039, // 79 + 512000, // 80 + 531441, // 81 + 551368, // 82 + 571787, // 83 + 592704, // 84 + 614125, // 85 + 636056, // 86 + 658503, // 87 + 681472, // 88 + 704969, // 89 + 729000, // 90 + 753571, // 91 + 778688, // 92 + 804357, // 93 + 830584, // 94 + 857375, // 95 + 884736, // 96 + 912673, // 97 + 941192, // 98 + 970299, // 99 + 1000000 // 100 + }, { // Medium Fast copy 3 (unused? to-do: investigate) + 0, // 0 + 1, // 1 + 8, // 2 + 27, // 3 + 64, // 4 + 125, // 5 + 216, // 6 + 343, // 7 + 512, // 8 + 729, // 9 + 1000, // 10 + 1331, // 11 + 1728, // 12 + 2197, // 13 + 2744, // 14 + 3375, // 15 + 4096, // 16 + 4913, // 17 + 5832, // 18 + 6859, // 19 + 8000, // 20 + 9261, // 21 + 10648, // 22 + 12167, // 23 + 13824, // 24 + 15625, // 25 + 17576, // 26 + 19683, // 27 + 21952, // 28 + 24389, // 29 + 27000, // 30 + 29791, // 31 + 32768, // 32 + 35937, // 33 + 39304, // 34 + 42875, // 35 + 46656, // 36 + 50653, // 37 + 54872, // 38 + 59319, // 39 + 64000, // 40 + 68921, // 41 + 74088, // 42 + 79507, // 43 + 85184, // 44 + 91125, // 45 + 97336, // 46 + 103823, // 47 + 110592, // 48 + 117649, // 49 + 125000, // 50 + 132651, // 51 + 140608, // 52 + 148877, // 53 + 157464, // 54 + 166375, // 55 + 175616, // 56 + 185193, // 57 + 195112, // 58 + 205379, // 59 + 216000, // 60 + 226981, // 61 + 238328, // 62 + 250047, // 63 + 262144, // 64 + 274625, // 65 + 287496, // 66 + 300763, // 67 + 314432, // 68 + 328509, // 69 + 343000, // 70 + 357911, // 71 + 373248, // 72 + 389017, // 73 + 405224, // 74 + 421875, // 75 + 438976, // 76 + 456533, // 77 + 474552, // 78 + 493039, // 79 + 512000, // 80 + 531441, // 81 + 551368, // 82 + 571787, // 83 + 592704, // 84 + 614125, // 85 + 636056, // 86 + 658503, // 87 + 681472, // 88 + 704969, // 89 + 729000, // 90 + 753571, // 91 + 778688, // 92 + 804357, // 93 + 830584, // 94 + 857375, // 95 + 884736, // 96 + 912673, // 97 + 941192, // 98 + 970299, // 99 + 1000000 // 100 + } +}; + +#endif //POKERUBY_EXPERIENCE_TABLES_H diff --git a/src/data/pokemon/item_effects.h b/src/data/pokemon/item_effects.h new file mode 100644 index 000000000..cd06228dd --- /dev/null +++ b/src/data/pokemon/item_effects.h @@ -0,0 +1,824 @@ +// + +// + +#ifndef POKERUBY_ITEM_EFFECTS_H +#define POKERUBY_ITEM_EFFECTS_H + +const u8 gItemEffect_Potion[] = { + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 20 +}; + +const u8 gItemEffect_Antidote[] = { + 0x00, + 0x00, + 0x00, + 0x10, + 0x00, + 0x00 +}; + +const u8 gItemEffect_BurnHeal[] = { + 0x00, + 0x00, + 0x00, + 0x08, + 0x00, + 0x00 +}; + +const u8 gItemEffect_IceHeal[] = { + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0x00 +}; + +const u8 gItemEffect_Awakening[] = { + 0x00, + 0x00, + 0x00, + 0x20, + 0x00, + 0x00 +}; + +const u8 gItemEffect_ParalyzeHeal[] = { + 0x00, + 0x00, + 0x00, + 0x02, + 0x00, + 0x00 +}; + +const u8 gItemEffect_FullRestore[] = { + 0x00, + 0x00, + 0x00, + 0x3f, + 0x04, + 0x00, + 0xff +}; + +const u8 gItemEffect_MaxPotion[] = { + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0xff +}; + +const u8 gItemEffect_HyperPotion[] = { + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 200 +}; + +const u8 gItemEffect_SuperPotion[] = { + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 50 +}; + +const u8 gItemEffect_FullHeal[] = { + 0x00, + 0x00, + 0x00, + 0x3f, + 0x00, + 0x00 +}; + +const u8 gItemEffect_Revive[] = { + 0x00, + 0x00, + 0x00, + 0x00, + 0x44, + 0x00, + 0xfe +}; + +const u8 gItemEffect_MaxRevive[] = { + 0x00, + 0x00, + 0x00, + 0x00, + 0x44, + 0x00, + 0xff +}; + +const u8 gItemEffect_FreshWater[] = { + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 50 +}; + +const u8 gItemEffect_SodaPop[] = { + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 60 +}; + +const u8 gItemEffect_Lemonade[] = { + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 80 +}; + +const u8 gItemEffect_MoomooMilk[] = { + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 100 +}; + +const u8 gItemEffect_EnergyPowder[] = { + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xe0, + 50, + 0xfb, + 0xfb, + 0xf6 +}; + +const u8 gItemEffect_EnergyRoot[] = { + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xe0, + 200, + 0xf6, + 0xf6, + 0xf1 +}; + +const u8 gItemEffect_HealPowder[] = { + 0x00, + 0x00, + 0x00, + 0x3f, + 0x00, + 0xe0, + 0xfb, + 0xfb, + 0xf6 +}; + +const u8 gItemEffect_RevivalHerb[] = { + 0x00, + 0x00, + 0x00, + 0x00, + 0x44, + 0xe0, + 0xfe, + 0xf1, + 0xf1, + 0xec +}; + +const u8 gItemEffect_Ether[] = { + 0x00, + 0x00, + 0x00, + 0x00, + 0x18, + 0x00, + 0x0a +}; + +const u8 gItemEffect_MaxEther[] = { + 0x00, + 0x00, + 0x00, + 0x00, + 0x18, + 0x00, + 0x7f +}; + +const u8 gItemEffect_Elixir[] = { + 0x00, + 0x00, + 0x00, + 0x00, + 0x08, + 0x00, + 0x0a +}; + +const u8 gItemEffect_MaxElixir[] = { + 0x00, + 0x00, + 0x00, + 0x00, + 0x08, + 0x00, + 0x7f +}; + +const u8 gItemEffect_LavaCookie[] = { + 0x00, + 0x00, + 0x00, + 0x3f, + 0x00, + 0x00 +}; + +const u8 gItemEffect_BlueFlute[] = { + 0x00, + 0x00, + 0x00, + 0x20, + 0x00, + 0x00 +}; + +const u8 gItemEffect_YellowFlute[] = { + 0x00, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00 +}; + +const u8 gItemEffect_RedFlute[] = { + 0x80, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00 +}; + +const u8 gItemEffect_BerryJuice[] = { + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 20 +}; + +const u8 gItemEffect_SacredAsh[] = { + 0x40, + 0x00, + 0x00, + 0x00, + 0x44, + 0x00, + 0xff +}; + +const u8 gItemEffect_HPUp[] = { + 0x00, + 0x00, + 0x00, + 0x00, + 0x01, + 0xe0, + 0x0a, + 0x05, + 0x03, + 0x02 +}; + +const u8 gItemEffect_Protein[] = { + 0x00, + 0x00, + 0x00, + 0x00, + 0x02, + 0xe0, + 0x0a, + 0x05, + 0x03, + 0x02 +}; + +const u8 gItemEffect_Iron[] = { + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xe1, + 0x0a, + 0x05, + 0x03, + 0x02 +}; + +const u8 gItemEffect_Carbos[] = { + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xe2, + 0x0a, + 0x05, + 0x03, + 0x02 +}; + +const u8 gItemEffect_Calcium[] = { + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xe8, + 0x0a, + 0x05, + 0x03, + 0x02 +}; + +const u8 gItemEffect_RareCandy[] = { + 0x00, + 0x00, + 0x00, + 0x40, + 0x44, + 0xe0, + 253, + 0x05, + 0x03, + 0x02 +}; + +const u8 gItemEffect_PPUp[] = { + 0x00, + 0x00, + 0x00, + 0x00, + 0x20, + 0xe0, + 0x05, + 0x03, + 0x02 +}; + +const u8 gItemEffect_Zinc[] = { + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xe4, + 0x0a, + 0x05, + 0x03, + 0x02 +}; + +const u8 gItemEffect_PPMax[] = { + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xf0, + 0x05, + 0x03, + 0x02 +}; + +const u8 gItemEffect_GuardSpec[] = { + 0x00, + 0x00, + 0x00, + 0x80, + 0x00, + 0x60, + 0x01, + 0x01 +}; + +const u8 gItemEffect_DireHit[] = { + 0x20, + 0x00, + 0x00, + 0x00, + 0x00, + 0x60, + 0x01, + 0x01 +}; + +const u8 gItemEffect_XAttack[] = { + 0x01, + 0x00, + 0x00, + 0x00, + 0x00, + 0x60, + 0x01, + 0x01 +}; + +const u8 gItemEffect_XDefend[] = { + 0x00, + 0x10, + 0x00, + 0x00, + 0x00, + 0x60, + 0x01, + 0x01 +}; + +const u8 gItemEffect_XSpeed[] = { + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, + 0x60, + 0x01, + 0x01 +}; + +const u8 gItemEffect_XAccuracy[] = { + 0x00, + 0x00, + 0x10, + 0x00, + 0x00, + 0x60, + 0x01, + 0x01 +}; + +const u8 gItemEffect_XSpecial[] = { + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x60, + 0x01, + 0x01 +}; + +const u8 gItemEffect_SunStone[] = { + 0x00, + 0x00, + 0x00, + 0x00, + 0x80, + 0x00 +}; + +const u8 gItemEffect_MoonStone[] = { + 0x00, + 0x00, + 0x00, + 0x00, + 0x80, + 0x00 +}; + +const u8 gItemEffect_FireStone[] = { + 0x00, + 0x00, + 0x00, + 0x00, + 0x80, + 0x00 +}; + +const u8 gItemEffect_ThunderStone[] = { + 0x00, + 0x00, + 0x00, + 0x00, + 0x80, + 0x00 +}; + +const u8 gItemEffect_WaterStone[] = { + 0x00, + 0x00, + 0x00, + 0x00, + 0x80, + 0x00 +}; + +const u8 gItemEffect_LeafStone[] = { + 0x00, + 0x00, + 0x00, + 0x00, + 0x80, + 0x00 +}; + +const u8 gItemEffect_CheriBerry[] = { + 0x00, + 0x00, + 0x00, + 0x02, + 0x00, + 0x00 +}; + +const u8 gItemEffect_ChestoBerry[] = { + 0x00, + 0x00, + 0x00, + 0x20, + 0x00, + 0x00 +}; + +const u8 gItemEffect_PechaBerry[] = { + 0x00, + 0x00, + 0x00, + 0x10, + 0x00, + 0x00 +}; + +const u8 gItemEffect_RawstBerry[] = { + 0x00, + 0x00, + 0x00, + 0x08, + 0x00, + 0x00 +}; + +const u8 gItemEffect_AspearBerry[] = { + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0x00 +}; + +const u8 gItemEffect_LeppaBerry[] = { + 0x00, + 0x00, + 0x00, + 0x00, + 0x18, + 0x00, + 0x0a +}; + +const u8 gItemEffect_OranBerry[] = { + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 10 +}; + +const u8 gItemEffect_PersimBerry[] = { + 0x00, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00 +}; + +const u8 gItemEffect_LumBerry[] = { + 0x00, + 0x00, + 0x00, + 0x3f, + 0x00, + 0x00 +}; + +const u8 gItemEffect_SitrusBerry[] = { + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 30 +}; + +const u8 *const gItemEffectTable[] = { + gItemEffect_Potion, + gItemEffect_Antidote, + gItemEffect_BurnHeal, + gItemEffect_IceHeal, + gItemEffect_Awakening, + gItemEffect_ParalyzeHeal, + gItemEffect_FullRestore, + gItemEffect_MaxPotion, + gItemEffect_HyperPotion, + gItemEffect_SuperPotion, + gItemEffect_FullHeal, + gItemEffect_Revive, + gItemEffect_MaxRevive, + gItemEffect_FreshWater, + gItemEffect_SodaPop, + gItemEffect_Lemonade, + gItemEffect_MoomooMilk, + gItemEffect_EnergyPowder, + gItemEffect_EnergyRoot, + gItemEffect_HealPowder, + gItemEffect_RevivalHerb, + gItemEffect_Ether, + gItemEffect_MaxEther, + gItemEffect_Elixir, + gItemEffect_MaxElixir, + gItemEffect_LavaCookie, + gItemEffect_BlueFlute, + gItemEffect_YellowFlute, + gItemEffect_RedFlute, + NULL, + NULL, + gItemEffect_BerryJuice, + gItemEffect_SacredAsh, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + gItemEffect_HPUp, + gItemEffect_Protein, + gItemEffect_Iron, + gItemEffect_Carbos, + gItemEffect_Calcium, + gItemEffect_RareCandy, + gItemEffect_PPUp, + gItemEffect_Zinc, + gItemEffect_PPMax, + NULL, + gItemEffect_GuardSpec, + gItemEffect_DireHit, + gItemEffect_XAttack, + gItemEffect_XDefend, + gItemEffect_XSpeed, + gItemEffect_XAccuracy, + gItemEffect_XSpecial, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + gItemEffect_SunStone, + gItemEffect_MoonStone, + gItemEffect_FireStone, + gItemEffect_ThunderStone, + gItemEffect_WaterStone, + gItemEffect_LeafStone, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + gItemEffect_CheriBerry, + gItemEffect_ChestoBerry, + gItemEffect_PechaBerry, + gItemEffect_RawstBerry, + gItemEffect_AspearBerry, + gItemEffect_LeppaBerry, + gItemEffect_OranBerry, + gItemEffect_PersimBerry, + gItemEffect_LumBerry, + gItemEffect_SitrusBerry, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL +}; + +#endif //POKERUBY_ITEM_EFFECTS_H diff --git a/src/data/pokemon/level_up_learnset_pointers.h b/src/data/pokemon/level_up_learnset_pointers.h new file mode 100644 index 000000000..19761c996 --- /dev/null +++ b/src/data/pokemon/level_up_learnset_pointers.h @@ -0,0 +1,423 @@ +// + +// + +#ifndef POKERUBY_LEVEL_UP_LEARNSET_POINTERS_H +#define POKERUBY_LEVEL_UP_LEARNSET_POINTERS_H + +const u16 *const gLevelUpLearnsets[] = { + gBulbasaurLevelUpLearnset, + gBulbasaurLevelUpLearnset, + gIvysaurLevelUpLearnset, + gVenusaurLevelUpLearnset, + gCharmanderLevelUpLearnset, + gCharmeleonLevelUpLearnset, + gCharizardLevelUpLearnset, + gSquirtleLevelUpLearnset, + gWartortleLevelUpLearnset, + gBlastoiseLevelUpLearnset, + gCaterpieLevelUpLearnset, + gMetapodLevelUpLearnset, + gButterfreeLevelUpLearnset, + gWeedleLevelUpLearnset, + gKakunaLevelUpLearnset, + gBeedrillLevelUpLearnset, + gPidgeyLevelUpLearnset, + gPidgeottoLevelUpLearnset, + gPidgeotLevelUpLearnset, + gRattataLevelUpLearnset, + gRaticateLevelUpLearnset, + gSpearowLevelUpLearnset, + gFearowLevelUpLearnset, + gEkansLevelUpLearnset, + gArbokLevelUpLearnset, + gPikachuLevelUpLearnset, + gRaichuLevelUpLearnset, + gSandshrewLevelUpLearnset, + gSandslashLevelUpLearnset, + gNidoranFLevelUpLearnset, + gNidorinaLevelUpLearnset, + gNidoqueenLevelUpLearnset, + gNidoranMLevelUpLearnset, + gNidorinoLevelUpLearnset, + gNidokingLevelUpLearnset, + gClefairyLevelUpLearnset, + gClefableLevelUpLearnset, + gVulpixLevelUpLearnset, + gNinetalesLevelUpLearnset, + gJigglypuffLevelUpLearnset, + gWigglytuffLevelUpLearnset, + gZubatLevelUpLearnset, + gGolbatLevelUpLearnset, + gOddishLevelUpLearnset, + gGloomLevelUpLearnset, + gVileplumeLevelUpLearnset, + gParasLevelUpLearnset, + gParasectLevelUpLearnset, + gVenonatLevelUpLearnset, + gVenomothLevelUpLearnset, + gDiglettLevelUpLearnset, + gDugtrioLevelUpLearnset, + gMeowthLevelUpLearnset, + gPersianLevelUpLearnset, + gPsyduckLevelUpLearnset, + gGolduckLevelUpLearnset, + gMankeyLevelUpLearnset, + gPrimeapeLevelUpLearnset, + gGrowlitheLevelUpLearnset, + gArcanineLevelUpLearnset, + gPoliwagLevelUpLearnset, + gPoliwhirlLevelUpLearnset, + gPoliwrathLevelUpLearnset, + gAbraLevelUpLearnset, + gKadabraLevelUpLearnset, + gAlakazamLevelUpLearnset, + gMachopLevelUpLearnset, + gMachokeLevelUpLearnset, + gMachampLevelUpLearnset, + gBellsproutLevelUpLearnset, + gWeepinbellLevelUpLearnset, + gVictreebelLevelUpLearnset, + gTentacoolLevelUpLearnset, + gTentacruelLevelUpLearnset, + gGeodudeLevelUpLearnset, + gGravelerLevelUpLearnset, + gGolemLevelUpLearnset, + gPonytaLevelUpLearnset, + gRapidashLevelUpLearnset, + gSlowpokeLevelUpLearnset, + gSlowbroLevelUpLearnset, + gMagnemiteLevelUpLearnset, + gMagnetonLevelUpLearnset, + gFarfetchdLevelUpLearnset, + gDoduoLevelUpLearnset, + gDodrioLevelUpLearnset, + gSeelLevelUpLearnset, + gDewgongLevelUpLearnset, + gGrimerLevelUpLearnset, + gMukLevelUpLearnset, + gShellderLevelUpLearnset, + gCloysterLevelUpLearnset, + gGastlyLevelUpLearnset, + gHaunterLevelUpLearnset, + gGengarLevelUpLearnset, + gOnixLevelUpLearnset, + gDrowzeeLevelUpLearnset, + gHypnoLevelUpLearnset, + gKrabbyLevelUpLearnset, + gKinglerLevelUpLearnset, + gVoltorbLevelUpLearnset, + gElectrodeLevelUpLearnset, + gExeggcuteLevelUpLearnset, + gExeggutorLevelUpLearnset, + gCuboneLevelUpLearnset, + gMarowakLevelUpLearnset, + gHitmonleeLevelUpLearnset, + gHitmonchanLevelUpLearnset, + gLickitungLevelUpLearnset, + gKoffingLevelUpLearnset, + gWeezingLevelUpLearnset, + gRhyhornLevelUpLearnset, + gRhydonLevelUpLearnset, + gChanseyLevelUpLearnset, + gTangelaLevelUpLearnset, + gKangaskhanLevelUpLearnset, + gHorseaLevelUpLearnset, + gSeadraLevelUpLearnset, + gGoldeenLevelUpLearnset, + gSeakingLevelUpLearnset, + gStaryuLevelUpLearnset, + gStarmieLevelUpLearnset, + gMrmimeLevelUpLearnset, + gScytherLevelUpLearnset, + gJynxLevelUpLearnset, + gElectabuzzLevelUpLearnset, + gMagmarLevelUpLearnset, + gPinsirLevelUpLearnset, + gTaurosLevelUpLearnset, + gMagikarpLevelUpLearnset, + gGyaradosLevelUpLearnset, + gLaprasLevelUpLearnset, + gDittoLevelUpLearnset, + gEeveeLevelUpLearnset, + gVaporeonLevelUpLearnset, + gJolteonLevelUpLearnset, + gFlareonLevelUpLearnset, + gPorygonLevelUpLearnset, + gOmanyteLevelUpLearnset, + gOmastarLevelUpLearnset, + gKabutoLevelUpLearnset, + gKabutopsLevelUpLearnset, + gAerodactylLevelUpLearnset, + gSnorlaxLevelUpLearnset, + gArticunoLevelUpLearnset, + gZapdosLevelUpLearnset, + gMoltresLevelUpLearnset, + gDratiniLevelUpLearnset, + gDragonairLevelUpLearnset, + gDragoniteLevelUpLearnset, + gMewtwoLevelUpLearnset, + gMewLevelUpLearnset, + gChikoritaLevelUpLearnset, + gBayleefLevelUpLearnset, + gMeganiumLevelUpLearnset, + gCyndaquilLevelUpLearnset, + gQuilavaLevelUpLearnset, + gTyphlosionLevelUpLearnset, + gTotodileLevelUpLearnset, + gCroconawLevelUpLearnset, + gFeraligatrLevelUpLearnset, + gSentretLevelUpLearnset, + gFurretLevelUpLearnset, + gHoothootLevelUpLearnset, + gNoctowlLevelUpLearnset, + gLedybaLevelUpLearnset, + gLedianLevelUpLearnset, + gSpinarakLevelUpLearnset, + gAriadosLevelUpLearnset, + gCrobatLevelUpLearnset, + gChinchouLevelUpLearnset, + gLanturnLevelUpLearnset, + gPichuLevelUpLearnset, + gCleffaLevelUpLearnset, + gIgglybuffLevelUpLearnset, + gTogepiLevelUpLearnset, + gTogeticLevelUpLearnset, + gNatuLevelUpLearnset, + gXatuLevelUpLearnset, + gMareepLevelUpLearnset, + gFlaaffyLevelUpLearnset, + gAmpharosLevelUpLearnset, + gBellossomLevelUpLearnset, + gMarillLevelUpLearnset, + gAzumarillLevelUpLearnset, + gSudowoodoLevelUpLearnset, + gPolitoedLevelUpLearnset, + gHoppipLevelUpLearnset, + gSkiploomLevelUpLearnset, + gJumpluffLevelUpLearnset, + gAipomLevelUpLearnset, + gSunkernLevelUpLearnset, + gSunfloraLevelUpLearnset, + gYanmaLevelUpLearnset, + gWooperLevelUpLearnset, + gQuagsireLevelUpLearnset, + gEspeonLevelUpLearnset, + gUmbreonLevelUpLearnset, + gMurkrowLevelUpLearnset, + gSlowkingLevelUpLearnset, + gMisdreavusLevelUpLearnset, + gUnownLevelUpLearnset, + gWobbuffetLevelUpLearnset, + gGirafarigLevelUpLearnset, + gPinecoLevelUpLearnset, + gForretressLevelUpLearnset, + gDunsparceLevelUpLearnset, + gGligarLevelUpLearnset, + gSteelixLevelUpLearnset, + gSnubbullLevelUpLearnset, + gGranbullLevelUpLearnset, + gQwilfishLevelUpLearnset, + gScizorLevelUpLearnset, + gShuckleLevelUpLearnset, + gHeracrossLevelUpLearnset, + gSneaselLevelUpLearnset, + gTeddiursaLevelUpLearnset, + gUrsaringLevelUpLearnset, + gSlugmaLevelUpLearnset, + gMagcargoLevelUpLearnset, + gSwinubLevelUpLearnset, + gPiloswineLevelUpLearnset, + gCorsolaLevelUpLearnset, + gRemoraidLevelUpLearnset, + gOctilleryLevelUpLearnset, + gDelibirdLevelUpLearnset, + gMantineLevelUpLearnset, + gSkarmoryLevelUpLearnset, + gHoundourLevelUpLearnset, + gHoundoomLevelUpLearnset, + gKingdraLevelUpLearnset, + gPhanpyLevelUpLearnset, + gDonphanLevelUpLearnset, + gPorygon2LevelUpLearnset, + gStantlerLevelUpLearnset, + gSmeargleLevelUpLearnset, + gTyrogueLevelUpLearnset, + gHitmontopLevelUpLearnset, + gSmoochumLevelUpLearnset, + gElekidLevelUpLearnset, + gMagbyLevelUpLearnset, + gMiltankLevelUpLearnset, + gBlisseyLevelUpLearnset, + gRaikouLevelUpLearnset, + gEnteiLevelUpLearnset, + gSuicuneLevelUpLearnset, + gLarvitarLevelUpLearnset, + gPupitarLevelUpLearnset, + gTyranitarLevelUpLearnset, + gLugiaLevelUpLearnset, + gHoOhLevelUpLearnset, + gCelebiLevelUpLearnset, + gSpecies252LevelUpLearnset, + gSpecies253LevelUpLearnset, + gSpecies254LevelUpLearnset, + gSpecies255LevelUpLearnset, + gSpecies256LevelUpLearnset, + gSpecies257LevelUpLearnset, + gSpecies258LevelUpLearnset, + gSpecies259LevelUpLearnset, + gSpecies260LevelUpLearnset, + gSpecies261LevelUpLearnset, + gSpecies262LevelUpLearnset, + gSpecies263LevelUpLearnset, + gSpecies264LevelUpLearnset, + gSpecies265LevelUpLearnset, + gSpecies266LevelUpLearnset, + gSpecies267LevelUpLearnset, + gSpecies268LevelUpLearnset, + gSpecies269LevelUpLearnset, + gSpecies270LevelUpLearnset, + gSpecies271LevelUpLearnset, + gSpecies272LevelUpLearnset, + gSpecies273LevelUpLearnset, + gSpecies274LevelUpLearnset, + gSpecies275LevelUpLearnset, + gSpecies276LevelUpLearnset, + gTreeckoLevelUpLearnset, + gGrovyleLevelUpLearnset, + gSceptileLevelUpLearnset, + gTorchicLevelUpLearnset, + gCombuskenLevelUpLearnset, + gBlazikenLevelUpLearnset, + gMudkipLevelUpLearnset, + gMarshtompLevelUpLearnset, + gSwampertLevelUpLearnset, + gPoochyenaLevelUpLearnset, + gMightyenaLevelUpLearnset, + gZigzagoonLevelUpLearnset, + gLinooneLevelUpLearnset, + gWurmpleLevelUpLearnset, + gSilcoonLevelUpLearnset, + gBeautiflyLevelUpLearnset, + gCascoonLevelUpLearnset, + gDustoxLevelUpLearnset, + gLotadLevelUpLearnset, + gLombreLevelUpLearnset, + gLudicoloLevelUpLearnset, + gSeedotLevelUpLearnset, + gNuzleafLevelUpLearnset, + gShiftryLevelUpLearnset, + gNincadaLevelUpLearnset, + gNinjaskLevelUpLearnset, + gShedinjaLevelUpLearnset, + gTaillowLevelUpLearnset, + gSwellowLevelUpLearnset, + gShroomishLevelUpLearnset, + gBreloomLevelUpLearnset, + gSpindaLevelUpLearnset, + gWingullLevelUpLearnset, + gPelipperLevelUpLearnset, + gSurskitLevelUpLearnset, + gMasquerainLevelUpLearnset, + gWailmerLevelUpLearnset, + gWailordLevelUpLearnset, + gSkittyLevelUpLearnset, + gDelcattyLevelUpLearnset, + gKecleonLevelUpLearnset, + gBaltoyLevelUpLearnset, + gClaydolLevelUpLearnset, + gNosepassLevelUpLearnset, + gTorkoalLevelUpLearnset, + gSableyeLevelUpLearnset, + gBarboachLevelUpLearnset, + gWhiscashLevelUpLearnset, + gLuvdiscLevelUpLearnset, + gCorphishLevelUpLearnset, + gCrawdauntLevelUpLearnset, + gFeebasLevelUpLearnset, + gMiloticLevelUpLearnset, + gCarvanhaLevelUpLearnset, + gSharpedoLevelUpLearnset, + gTrapinchLevelUpLearnset, + gVibravaLevelUpLearnset, + gFlygonLevelUpLearnset, + gMakuhitaLevelUpLearnset, + gHariyamaLevelUpLearnset, + gElectrikeLevelUpLearnset, + gManectricLevelUpLearnset, + gNumelLevelUpLearnset, + gCameruptLevelUpLearnset, + gSphealLevelUpLearnset, + gSealeoLevelUpLearnset, + gWalreinLevelUpLearnset, + gCacneaLevelUpLearnset, + gCacturneLevelUpLearnset, + gSnoruntLevelUpLearnset, + gGlalieLevelUpLearnset, + gLunatoneLevelUpLearnset, + gSolrockLevelUpLearnset, + gAzurillLevelUpLearnset, + gSpoinkLevelUpLearnset, + gGrumpigLevelUpLearnset, + gPlusleLevelUpLearnset, + gMinunLevelUpLearnset, + gMawileLevelUpLearnset, + gMedititeLevelUpLearnset, + gMedichamLevelUpLearnset, + gSwabluLevelUpLearnset, + gAltariaLevelUpLearnset, + gWynautLevelUpLearnset, + gDuskullLevelUpLearnset, + gDusclopsLevelUpLearnset, + gRoseliaLevelUpLearnset, + gSlakothLevelUpLearnset, + gVigorothLevelUpLearnset, + gSlakingLevelUpLearnset, + gGulpinLevelUpLearnset, + gSwalotLevelUpLearnset, + gTropiusLevelUpLearnset, + gWhismurLevelUpLearnset, + gLoudredLevelUpLearnset, + gExploudLevelUpLearnset, + gClamperlLevelUpLearnset, + gHuntailLevelUpLearnset, + gGorebyssLevelUpLearnset, + gAbsolLevelUpLearnset, + gShuppetLevelUpLearnset, + gBanetteLevelUpLearnset, + gSeviperLevelUpLearnset, + gZangooseLevelUpLearnset, + gRelicanthLevelUpLearnset, + gAronLevelUpLearnset, + gLaironLevelUpLearnset, + gAggronLevelUpLearnset, + gCastformLevelUpLearnset, + gVolbeatLevelUpLearnset, + gIllumiseLevelUpLearnset, + gLileepLevelUpLearnset, + gCradilyLevelUpLearnset, + gAnorithLevelUpLearnset, + gArmaldoLevelUpLearnset, + gRaltsLevelUpLearnset, + gKirliaLevelUpLearnset, + gGardevoirLevelUpLearnset, + gBagonLevelUpLearnset, + gShelgonLevelUpLearnset, + gSalamenceLevelUpLearnset, + gBeldumLevelUpLearnset, + gMetangLevelUpLearnset, + gMetagrossLevelUpLearnset, + gRegirockLevelUpLearnset, + gRegiceLevelUpLearnset, + gRegisteelLevelUpLearnset, + gKyogreLevelUpLearnset, + gGroudonLevelUpLearnset, + gRayquazaLevelUpLearnset, + gLatiasLevelUpLearnset, + gLatiosLevelUpLearnset, + gJirachiLevelUpLearnset, + gDeoxysLevelUpLearnset, + gChimechoLevelUpLearnset +}; + +#endif //POKERUBY_LEVEL_UP_LEARNSET_POINTERS_H diff --git a/src/data/pokemon/level_up_learnsets.h b/src/data/pokemon/level_up_learnsets.h new file mode 100644 index 000000000..bc1de82de --- /dev/null +++ b/src/data/pokemon/level_up_learnsets.h @@ -0,0 +1,5627 @@ +// + +// + +#ifndef POKERUBY_LEVEL_UP_LEARNSETS_H +#define POKERUBY_LEVEL_UP_LEARNSETS_H + +#define LEVEL_UP_MOVE(lvl, move) ((lvl << 9) | move) +#define LEVEL_UP_END 0xffff + +const u16 gBulbasaurLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 4, MOVE_GROWL), + LEVEL_UP_MOVE( 7, MOVE_LEECH_SEED), + LEVEL_UP_MOVE(10, MOVE_VINE_WHIP), + LEVEL_UP_MOVE(15, MOVE_POISON_POWDER), + LEVEL_UP_MOVE(15, MOVE_SLEEP_POWDER), + LEVEL_UP_MOVE(20, MOVE_RAZOR_LEAF), + LEVEL_UP_MOVE(25, MOVE_SWEET_SCENT), + LEVEL_UP_MOVE(32, MOVE_GROWTH), + LEVEL_UP_MOVE(39, MOVE_SYNTHESIS), + LEVEL_UP_MOVE(46, MOVE_SOLAR_BEAM), + LEVEL_UP_END +}; + +const u16 gIvysaurLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_GROWL), + LEVEL_UP_MOVE( 1, MOVE_LEECH_SEED), + LEVEL_UP_MOVE( 4, MOVE_GROWL), + LEVEL_UP_MOVE( 7, MOVE_LEECH_SEED), + LEVEL_UP_MOVE(10, MOVE_VINE_WHIP), + LEVEL_UP_MOVE(15, MOVE_POISON_POWDER), + LEVEL_UP_MOVE(15, MOVE_SLEEP_POWDER), + LEVEL_UP_MOVE(22, MOVE_RAZOR_LEAF), + LEVEL_UP_MOVE(29, MOVE_SWEET_SCENT), + LEVEL_UP_MOVE(38, MOVE_GROWTH), + LEVEL_UP_MOVE(47, MOVE_SYNTHESIS), + LEVEL_UP_MOVE(56, MOVE_SOLAR_BEAM), + LEVEL_UP_END +}; + +const u16 gVenusaurLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_GROWL), + LEVEL_UP_MOVE( 1, MOVE_LEECH_SEED), + LEVEL_UP_MOVE( 1, MOVE_VINE_WHIP), + LEVEL_UP_MOVE( 4, MOVE_GROWL), + LEVEL_UP_MOVE( 7, MOVE_LEECH_SEED), + LEVEL_UP_MOVE(10, MOVE_VINE_WHIP), + LEVEL_UP_MOVE(15, MOVE_POISON_POWDER), + LEVEL_UP_MOVE(15, MOVE_SLEEP_POWDER), + LEVEL_UP_MOVE(22, MOVE_RAZOR_LEAF), + LEVEL_UP_MOVE(29, MOVE_SWEET_SCENT), + LEVEL_UP_MOVE(41, MOVE_GROWTH), + LEVEL_UP_MOVE(53, MOVE_SYNTHESIS), + LEVEL_UP_MOVE(65, MOVE_SOLAR_BEAM), + LEVEL_UP_END +}; + +const u16 gCharmanderLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SCRATCH), + LEVEL_UP_MOVE( 1, MOVE_GROWL), + LEVEL_UP_MOVE( 7, MOVE_EMBER), + LEVEL_UP_MOVE(13, MOVE_SMOKESCREEN), + LEVEL_UP_MOVE(19, MOVE_RAGE), + LEVEL_UP_MOVE(25, MOVE_SCARY_FACE), + LEVEL_UP_MOVE(31, MOVE_FLAMETHROWER), + LEVEL_UP_MOVE(37, MOVE_SLASH), + LEVEL_UP_MOVE(43, MOVE_DRAGON_RAGE), + LEVEL_UP_MOVE(49, MOVE_FIRE_SPIN), + LEVEL_UP_END +}; + +const u16 gCharmeleonLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SCRATCH), + LEVEL_UP_MOVE( 1, MOVE_GROWL), + LEVEL_UP_MOVE( 1, MOVE_EMBER), + LEVEL_UP_MOVE( 7, MOVE_EMBER), + LEVEL_UP_MOVE(13, MOVE_SMOKESCREEN), + LEVEL_UP_MOVE(20, MOVE_RAGE), + LEVEL_UP_MOVE(27, MOVE_SCARY_FACE), + LEVEL_UP_MOVE(34, MOVE_FLAMETHROWER), + LEVEL_UP_MOVE(41, MOVE_SLASH), + LEVEL_UP_MOVE(48, MOVE_DRAGON_RAGE), + LEVEL_UP_MOVE(55, MOVE_FIRE_SPIN), + LEVEL_UP_END +}; + +const u16 gCharizardLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SCRATCH), + LEVEL_UP_MOVE( 1, MOVE_GROWL), + LEVEL_UP_MOVE( 1, MOVE_EMBER), + LEVEL_UP_MOVE( 1, MOVE_SMOKESCREEN), + LEVEL_UP_MOVE( 7, MOVE_EMBER), + LEVEL_UP_MOVE(13, MOVE_SMOKESCREEN), + LEVEL_UP_MOVE(20, MOVE_RAGE), + LEVEL_UP_MOVE(27, MOVE_SCARY_FACE), + LEVEL_UP_MOVE(34, MOVE_FLAMETHROWER), + LEVEL_UP_MOVE(36, MOVE_WING_ATTACK), + LEVEL_UP_MOVE(44, MOVE_SLASH), + LEVEL_UP_MOVE(54, MOVE_DRAGON_RAGE), + LEVEL_UP_MOVE(64, MOVE_FIRE_SPIN), + LEVEL_UP_END +}; + +const u16 gSquirtleLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 4, MOVE_TAIL_WHIP), + LEVEL_UP_MOVE( 7, MOVE_BUBBLE), + LEVEL_UP_MOVE(10, MOVE_WITHDRAW), + LEVEL_UP_MOVE(13, MOVE_WATER_GUN), + LEVEL_UP_MOVE(18, MOVE_BITE), + LEVEL_UP_MOVE(23, MOVE_RAPID_SPIN), + LEVEL_UP_MOVE(28, MOVE_PROTECT), + LEVEL_UP_MOVE(33, MOVE_RAIN_DANCE), + LEVEL_UP_MOVE(40, MOVE_SKULL_BASH), + LEVEL_UP_MOVE(47, MOVE_HYDRO_PUMP), + LEVEL_UP_END +}; + +const u16 gWartortleLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), + LEVEL_UP_MOVE( 1, MOVE_BUBBLE), + LEVEL_UP_MOVE( 4, MOVE_TAIL_WHIP), + LEVEL_UP_MOVE( 7, MOVE_BUBBLE), + LEVEL_UP_MOVE(10, MOVE_WITHDRAW), + LEVEL_UP_MOVE(13, MOVE_WATER_GUN), + LEVEL_UP_MOVE(19, MOVE_BITE), + LEVEL_UP_MOVE(25, MOVE_RAPID_SPIN), + LEVEL_UP_MOVE(31, MOVE_PROTECT), + LEVEL_UP_MOVE(37, MOVE_RAIN_DANCE), + LEVEL_UP_MOVE(45, MOVE_SKULL_BASH), + LEVEL_UP_MOVE(53, MOVE_HYDRO_PUMP), + LEVEL_UP_END +}; + +const u16 gBlastoiseLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), + LEVEL_UP_MOVE( 1, MOVE_BUBBLE), + LEVEL_UP_MOVE( 1, MOVE_WITHDRAW), + LEVEL_UP_MOVE( 4, MOVE_TAIL_WHIP), + LEVEL_UP_MOVE( 7, MOVE_BUBBLE), + LEVEL_UP_MOVE(10, MOVE_WITHDRAW), + LEVEL_UP_MOVE(13, MOVE_WATER_GUN), + LEVEL_UP_MOVE(19, MOVE_BITE), + LEVEL_UP_MOVE(25, MOVE_RAPID_SPIN), + LEVEL_UP_MOVE(31, MOVE_PROTECT), + LEVEL_UP_MOVE(42, MOVE_RAIN_DANCE), + LEVEL_UP_MOVE(55, MOVE_SKULL_BASH), + LEVEL_UP_MOVE(68, MOVE_HYDRO_PUMP), + LEVEL_UP_END +}; + +const u16 gCaterpieLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_STRING_SHOT), + LEVEL_UP_END +}; + +const u16 gMetapodLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_HARDEN), + LEVEL_UP_MOVE( 7, MOVE_HARDEN), + LEVEL_UP_END +}; + +const u16 gButterfreeLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_CONFUSION), + LEVEL_UP_MOVE(10, MOVE_CONFUSION), + LEVEL_UP_MOVE(13, MOVE_POISON_POWDER), + LEVEL_UP_MOVE(14, MOVE_STUN_SPORE), + LEVEL_UP_MOVE(15, MOVE_SLEEP_POWDER), + LEVEL_UP_MOVE(18, MOVE_SUPERSONIC), + LEVEL_UP_MOVE(23, MOVE_WHIRLWIND), + LEVEL_UP_MOVE(28, MOVE_GUST), + LEVEL_UP_MOVE(34, MOVE_PSYBEAM), + LEVEL_UP_MOVE(40, MOVE_SAFEGUARD), + LEVEL_UP_MOVE(47, MOVE_SILVER_WIND), + LEVEL_UP_END +}; + +const u16 gWeedleLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_POISON_STING), + LEVEL_UP_MOVE( 1, MOVE_STRING_SHOT), + LEVEL_UP_END +}; + +const u16 gKakunaLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_HARDEN), + LEVEL_UP_MOVE( 7, MOVE_HARDEN), + LEVEL_UP_END +}; + +const u16 gBeedrillLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_FURY_ATTACK), + LEVEL_UP_MOVE(10, MOVE_FURY_ATTACK), + LEVEL_UP_MOVE(15, MOVE_FOCUS_ENERGY), + LEVEL_UP_MOVE(20, MOVE_TWINEEDLE), + LEVEL_UP_MOVE(25, MOVE_RAGE), + LEVEL_UP_MOVE(30, MOVE_PURSUIT), + LEVEL_UP_MOVE(35, MOVE_PIN_MISSILE), + LEVEL_UP_MOVE(40, MOVE_AGILITY), + LEVEL_UP_MOVE(45, MOVE_ENDEAVOR), + LEVEL_UP_END +}; + +const u16 gPidgeyLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 5, MOVE_SAND_ATTACK), + LEVEL_UP_MOVE( 9, MOVE_GUST), + LEVEL_UP_MOVE(13, MOVE_QUICK_ATTACK), + LEVEL_UP_MOVE(19, MOVE_WHIRLWIND), + LEVEL_UP_MOVE(25, MOVE_WING_ATTACK), + LEVEL_UP_MOVE(31, MOVE_FEATHER_DANCE), + LEVEL_UP_MOVE(39, MOVE_AGILITY), + LEVEL_UP_MOVE(47, MOVE_MIRROR_MOVE), + LEVEL_UP_END +}; + +const u16 gPidgeottoLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_SAND_ATTACK), + LEVEL_UP_MOVE( 1, MOVE_GUST), + LEVEL_UP_MOVE( 5, MOVE_SAND_ATTACK), + LEVEL_UP_MOVE( 9, MOVE_GUST), + LEVEL_UP_MOVE(13, MOVE_QUICK_ATTACK), + LEVEL_UP_MOVE(20, MOVE_WHIRLWIND), + LEVEL_UP_MOVE(27, MOVE_WING_ATTACK), + LEVEL_UP_MOVE(34, MOVE_FEATHER_DANCE), + LEVEL_UP_MOVE(43, MOVE_AGILITY), + LEVEL_UP_MOVE(52, MOVE_MIRROR_MOVE), + LEVEL_UP_END +}; + +const u16 gPidgeotLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_SAND_ATTACK), + LEVEL_UP_MOVE( 1, MOVE_GUST), + LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), + LEVEL_UP_MOVE( 5, MOVE_SAND_ATTACK), + LEVEL_UP_MOVE( 9, MOVE_GUST), + LEVEL_UP_MOVE(13, MOVE_QUICK_ATTACK), + LEVEL_UP_MOVE(20, MOVE_WHIRLWIND), + LEVEL_UP_MOVE(27, MOVE_WING_ATTACK), + LEVEL_UP_MOVE(34, MOVE_FEATHER_DANCE), + LEVEL_UP_MOVE(48, MOVE_AGILITY), + LEVEL_UP_MOVE(62, MOVE_MIRROR_MOVE), + LEVEL_UP_END +}; + +const u16 gRattataLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), + LEVEL_UP_MOVE( 7, MOVE_QUICK_ATTACK), + LEVEL_UP_MOVE(13, MOVE_HYPER_FANG), + LEVEL_UP_MOVE(20, MOVE_FOCUS_ENERGY), + LEVEL_UP_MOVE(27, MOVE_PURSUIT), + LEVEL_UP_MOVE(34, MOVE_SUPER_FANG), + LEVEL_UP_MOVE(41, MOVE_ENDEAVOR), + LEVEL_UP_END +}; + +const u16 gRaticateLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), + LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), + LEVEL_UP_MOVE( 7, MOVE_QUICK_ATTACK), + LEVEL_UP_MOVE(13, MOVE_HYPER_FANG), + LEVEL_UP_MOVE(20, MOVE_SCARY_FACE), + LEVEL_UP_MOVE(30, MOVE_PURSUIT), + LEVEL_UP_MOVE(40, MOVE_SUPER_FANG), + LEVEL_UP_MOVE(50, MOVE_ENDEAVOR), + LEVEL_UP_END +}; + +const u16 gSpearowLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_PECK), + LEVEL_UP_MOVE( 1, MOVE_GROWL), + LEVEL_UP_MOVE( 7, MOVE_LEER), + LEVEL_UP_MOVE(13, MOVE_FURY_ATTACK), + LEVEL_UP_MOVE(19, MOVE_PURSUIT), + LEVEL_UP_MOVE(25, MOVE_AERIAL_ACE), + LEVEL_UP_MOVE(31, MOVE_MIRROR_MOVE), + LEVEL_UP_MOVE(37, MOVE_DRILL_PECK), + LEVEL_UP_MOVE(43, MOVE_AGILITY), + LEVEL_UP_END +}; + +const u16 gFearowLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_PECK), + LEVEL_UP_MOVE( 1, MOVE_GROWL), + LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 1, MOVE_FURY_ATTACK), + LEVEL_UP_MOVE( 7, MOVE_LEER), + LEVEL_UP_MOVE(13, MOVE_FURY_ATTACK), + LEVEL_UP_MOVE(26, MOVE_PURSUIT), + LEVEL_UP_MOVE(32, MOVE_MIRROR_MOVE), + LEVEL_UP_MOVE(40, MOVE_DRILL_PECK), + LEVEL_UP_MOVE(47, MOVE_AGILITY), + LEVEL_UP_END +}; + +const u16 gEkansLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_WRAP), + LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 8, MOVE_POISON_STING), + LEVEL_UP_MOVE(13, MOVE_BITE), + LEVEL_UP_MOVE(20, MOVE_GLARE), + LEVEL_UP_MOVE(25, MOVE_SCREECH), + LEVEL_UP_MOVE(32, MOVE_ACID), + LEVEL_UP_MOVE(37, MOVE_STOCKPILE), + LEVEL_UP_MOVE(37, MOVE_SWALLOW), + LEVEL_UP_MOVE(37, MOVE_SPIT_UP), + LEVEL_UP_MOVE(44, MOVE_HAZE), + LEVEL_UP_END +}; + +const u16 gArbokLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_WRAP), + LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 1, MOVE_POISON_STING), + LEVEL_UP_MOVE( 1, MOVE_BITE), + LEVEL_UP_MOVE( 8, MOVE_POISON_STING), + LEVEL_UP_MOVE(13, MOVE_BITE), + LEVEL_UP_MOVE(20, MOVE_GLARE), + LEVEL_UP_MOVE(28, MOVE_SCREECH), + LEVEL_UP_MOVE(38, MOVE_ACID), + LEVEL_UP_MOVE(46, MOVE_STOCKPILE), + LEVEL_UP_MOVE(46, MOVE_SWALLOW), + LEVEL_UP_MOVE(46, MOVE_SPIT_UP), + LEVEL_UP_MOVE(56, MOVE_HAZE), + LEVEL_UP_END +}; + +const u16 gPikachuLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_THUNDER_SHOCK), + LEVEL_UP_MOVE( 1, MOVE_GROWL), + LEVEL_UP_MOVE( 6, MOVE_TAIL_WHIP), + LEVEL_UP_MOVE( 8, MOVE_THUNDER_WAVE), + LEVEL_UP_MOVE(11, MOVE_QUICK_ATTACK), + LEVEL_UP_MOVE(15, MOVE_DOUBLE_TEAM), + LEVEL_UP_MOVE(20, MOVE_SLAM), + LEVEL_UP_MOVE(26, MOVE_THUNDERBOLT), + LEVEL_UP_MOVE(33, MOVE_AGILITY), + LEVEL_UP_MOVE(41, MOVE_THUNDER), + LEVEL_UP_MOVE(50, MOVE_LIGHT_SCREEN), + LEVEL_UP_END +}; + +const u16 gRaichuLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_THUNDER_SHOCK), + LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), + LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), + LEVEL_UP_MOVE( 1, MOVE_THUNDERBOLT), + LEVEL_UP_END +}; + +const u16 gSandshrewLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SCRATCH), + LEVEL_UP_MOVE( 6, MOVE_DEFENSE_CURL), + LEVEL_UP_MOVE(11, MOVE_SAND_ATTACK), + LEVEL_UP_MOVE(17, MOVE_POISON_STING), + LEVEL_UP_MOVE(23, MOVE_SLASH), + LEVEL_UP_MOVE(30, MOVE_SWIFT), + LEVEL_UP_MOVE(37, MOVE_FURY_SWIPES), + LEVEL_UP_MOVE(45, MOVE_SAND_TOMB), + LEVEL_UP_MOVE(53, MOVE_SANDSTORM), + LEVEL_UP_END +}; + +const u16 gSandslashLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SCRATCH), + LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL), + LEVEL_UP_MOVE( 1, MOVE_SAND_ATTACK), + LEVEL_UP_MOVE( 6, MOVE_DEFENSE_CURL), + LEVEL_UP_MOVE(11, MOVE_SAND_ATTACK), + LEVEL_UP_MOVE(17, MOVE_POISON_STING), + LEVEL_UP_MOVE(24, MOVE_SLASH), + LEVEL_UP_MOVE(33, MOVE_SWIFT), + LEVEL_UP_MOVE(42, MOVE_FURY_SWIPES), + LEVEL_UP_MOVE(52, MOVE_SAND_TOMB), + LEVEL_UP_MOVE(62, MOVE_SANDSTORM), + LEVEL_UP_END +}; + +const u16 gNidoranFLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_GROWL), + LEVEL_UP_MOVE( 1, MOVE_SCRATCH), + LEVEL_UP_MOVE( 8, MOVE_TAIL_WHIP), + LEVEL_UP_MOVE(12, MOVE_DOUBLE_KICK), + LEVEL_UP_MOVE(17, MOVE_POISON_STING), + LEVEL_UP_MOVE(20, MOVE_BITE), + LEVEL_UP_MOVE(23, MOVE_HELPING_HAND), + LEVEL_UP_MOVE(30, MOVE_FURY_SWIPES), + LEVEL_UP_MOVE(38, MOVE_FLATTER), + LEVEL_UP_MOVE(47, MOVE_CRUNCH), + LEVEL_UP_END +}; + +const u16 gNidorinaLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_GROWL), + LEVEL_UP_MOVE( 1, MOVE_SCRATCH), + LEVEL_UP_MOVE( 8, MOVE_TAIL_WHIP), + LEVEL_UP_MOVE(12, MOVE_DOUBLE_KICK), + LEVEL_UP_MOVE(18, MOVE_POISON_STING), + LEVEL_UP_MOVE(22, MOVE_BITE), + LEVEL_UP_MOVE(26, MOVE_HELPING_HAND), + LEVEL_UP_MOVE(34, MOVE_FURY_SWIPES), + LEVEL_UP_MOVE(43, MOVE_FLATTER), + LEVEL_UP_MOVE(53, MOVE_CRUNCH), + LEVEL_UP_END +}; + +const u16 gNidoqueenLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SCRATCH), + LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), + LEVEL_UP_MOVE( 1, MOVE_DOUBLE_KICK), + LEVEL_UP_MOVE( 1, MOVE_POISON_STING), + LEVEL_UP_MOVE(23, MOVE_BODY_SLAM), + LEVEL_UP_END +}; + +const u16 gNidoranMLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 1, MOVE_PECK), + LEVEL_UP_MOVE( 8, MOVE_FOCUS_ENERGY), + LEVEL_UP_MOVE(12, MOVE_DOUBLE_KICK), + LEVEL_UP_MOVE(17, MOVE_POISON_STING), + LEVEL_UP_MOVE(20, MOVE_HORN_ATTACK), + LEVEL_UP_MOVE(23, MOVE_HELPING_HAND), + LEVEL_UP_MOVE(30, MOVE_FURY_ATTACK), + LEVEL_UP_MOVE(38, MOVE_FLATTER), + LEVEL_UP_MOVE(47, MOVE_HORN_DRILL), + LEVEL_UP_END +}; + +const u16 gNidorinoLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 1, MOVE_PECK), + LEVEL_UP_MOVE( 8, MOVE_FOCUS_ENERGY), + LEVEL_UP_MOVE(12, MOVE_DOUBLE_KICK), + LEVEL_UP_MOVE(18, MOVE_POISON_STING), + LEVEL_UP_MOVE(22, MOVE_HORN_ATTACK), + LEVEL_UP_MOVE(26, MOVE_HELPING_HAND), + LEVEL_UP_MOVE(34, MOVE_FURY_ATTACK), + LEVEL_UP_MOVE(43, MOVE_FLATTER), + LEVEL_UP_MOVE(53, MOVE_HORN_DRILL), + LEVEL_UP_END +}; + +const u16 gNidokingLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_PECK), + LEVEL_UP_MOVE( 1, MOVE_FOCUS_ENERGY), + LEVEL_UP_MOVE( 1, MOVE_DOUBLE_KICK), + LEVEL_UP_MOVE( 1, MOVE_POISON_STING), + LEVEL_UP_MOVE(23, MOVE_THRASH), + LEVEL_UP_END +}; + +const u16 gClefairyLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_POUND), + LEVEL_UP_MOVE( 1, MOVE_GROWL), + LEVEL_UP_MOVE( 5, MOVE_ENCORE), + LEVEL_UP_MOVE( 9, MOVE_SING), + LEVEL_UP_MOVE(13, MOVE_DOUBLE_SLAP), + LEVEL_UP_MOVE(17, MOVE_FOLLOW_ME), + LEVEL_UP_MOVE(21, MOVE_MINIMIZE), + LEVEL_UP_MOVE(25, MOVE_DEFENSE_CURL), + LEVEL_UP_MOVE(29, MOVE_METRONOME), + LEVEL_UP_MOVE(33, MOVE_COSMIC_POWER), + LEVEL_UP_MOVE(37, MOVE_MOONLIGHT), + LEVEL_UP_MOVE(41, MOVE_LIGHT_SCREEN), + LEVEL_UP_MOVE(45, MOVE_METEOR_MASH), + LEVEL_UP_END +}; + +const u16 gClefableLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SING), + LEVEL_UP_MOVE( 1, MOVE_DOUBLE_SLAP), + LEVEL_UP_MOVE( 1, MOVE_MINIMIZE), + LEVEL_UP_MOVE( 1, MOVE_METRONOME), + LEVEL_UP_END +}; + +const u16 gVulpixLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_EMBER), + LEVEL_UP_MOVE( 5, MOVE_TAIL_WHIP), + LEVEL_UP_MOVE( 9, MOVE_ROAR), + LEVEL_UP_MOVE(13, MOVE_QUICK_ATTACK), + LEVEL_UP_MOVE(17, MOVE_WILL_O_WISP), + LEVEL_UP_MOVE(21, MOVE_CONFUSE_RAY), + LEVEL_UP_MOVE(25, MOVE_IMPRISON), + LEVEL_UP_MOVE(29, MOVE_FLAMETHROWER), + LEVEL_UP_MOVE(33, MOVE_SAFEGUARD), + LEVEL_UP_MOVE(37, MOVE_GRUDGE), + LEVEL_UP_MOVE(41, MOVE_FIRE_SPIN), + LEVEL_UP_END +}; + +const u16 gNinetalesLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_EMBER), + LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), + LEVEL_UP_MOVE( 1, MOVE_CONFUSE_RAY), + LEVEL_UP_MOVE( 1, MOVE_SAFEGUARD), + LEVEL_UP_MOVE(45, MOVE_FIRE_SPIN), + LEVEL_UP_END +}; + +const u16 gJigglypuffLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SING), + LEVEL_UP_MOVE( 4, MOVE_DEFENSE_CURL), + LEVEL_UP_MOVE( 9, MOVE_POUND), + LEVEL_UP_MOVE(14, MOVE_DISABLE), + LEVEL_UP_MOVE(19, MOVE_ROLLOUT), + LEVEL_UP_MOVE(24, MOVE_DOUBLE_SLAP), + LEVEL_UP_MOVE(29, MOVE_REST), + LEVEL_UP_MOVE(34, MOVE_BODY_SLAM), + LEVEL_UP_MOVE(39, MOVE_MIMIC), + LEVEL_UP_MOVE(44, MOVE_HYPER_VOICE), + LEVEL_UP_MOVE(49, MOVE_DOUBLE_EDGE), + LEVEL_UP_END +}; + +const u16 gWigglytuffLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SING), + LEVEL_UP_MOVE( 1, MOVE_DISABLE), + LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL), + LEVEL_UP_MOVE( 1, MOVE_DOUBLE_SLAP), + LEVEL_UP_END +}; + +const u16 gZubatLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_LEECH_LIFE), + LEVEL_UP_MOVE( 6, MOVE_SUPERSONIC), + LEVEL_UP_MOVE(11, MOVE_ASTONISH), + LEVEL_UP_MOVE(16, MOVE_BITE), + LEVEL_UP_MOVE(21, MOVE_WING_ATTACK), + LEVEL_UP_MOVE(26, MOVE_CONFUSE_RAY), + LEVEL_UP_MOVE(31, MOVE_AIR_CUTTER), + LEVEL_UP_MOVE(36, MOVE_MEAN_LOOK), + LEVEL_UP_MOVE(41, MOVE_POISON_FANG), + LEVEL_UP_MOVE(46, MOVE_HAZE), + LEVEL_UP_END +}; + +const u16 gGolbatLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SCREECH), + LEVEL_UP_MOVE( 1, MOVE_LEECH_LIFE), + LEVEL_UP_MOVE( 1, MOVE_SUPERSONIC), + LEVEL_UP_MOVE( 1, MOVE_ASTONISH), + LEVEL_UP_MOVE( 6, MOVE_SUPERSONIC), + LEVEL_UP_MOVE(11, MOVE_ASTONISH), + LEVEL_UP_MOVE(16, MOVE_BITE), + LEVEL_UP_MOVE(21, MOVE_WING_ATTACK), + LEVEL_UP_MOVE(28, MOVE_CONFUSE_RAY), + LEVEL_UP_MOVE(35, MOVE_AIR_CUTTER), + LEVEL_UP_MOVE(42, MOVE_MEAN_LOOK), + LEVEL_UP_MOVE(49, MOVE_POISON_FANG), + LEVEL_UP_MOVE(56, MOVE_HAZE), + LEVEL_UP_END +}; + +const u16 gOddishLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_ABSORB), + LEVEL_UP_MOVE( 7, MOVE_SWEET_SCENT), + LEVEL_UP_MOVE(14, MOVE_POISON_POWDER), + LEVEL_UP_MOVE(16, MOVE_STUN_SPORE), + LEVEL_UP_MOVE(18, MOVE_SLEEP_POWDER), + LEVEL_UP_MOVE(23, MOVE_ACID), + LEVEL_UP_MOVE(32, MOVE_MOONLIGHT), + LEVEL_UP_MOVE(39, MOVE_PETAL_DANCE), + LEVEL_UP_END +}; + +const u16 gGloomLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_ABSORB), + LEVEL_UP_MOVE( 1, MOVE_SWEET_SCENT), + LEVEL_UP_MOVE( 1, MOVE_POISON_POWDER), + LEVEL_UP_MOVE( 7, MOVE_SWEET_SCENT), + LEVEL_UP_MOVE(14, MOVE_POISON_POWDER), + LEVEL_UP_MOVE(16, MOVE_STUN_SPORE), + LEVEL_UP_MOVE(18, MOVE_SLEEP_POWDER), + LEVEL_UP_MOVE(24, MOVE_ACID), + LEVEL_UP_MOVE(35, MOVE_MOONLIGHT), + LEVEL_UP_MOVE(44, MOVE_PETAL_DANCE), + LEVEL_UP_END +}; + +const u16 gVileplumeLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_ABSORB), + LEVEL_UP_MOVE( 1, MOVE_AROMATHERAPY), + LEVEL_UP_MOVE( 1, MOVE_STUN_SPORE), + LEVEL_UP_MOVE( 1, MOVE_MEGA_DRAIN), + LEVEL_UP_MOVE(44, MOVE_PETAL_DANCE), + LEVEL_UP_END +}; + +const u16 gParasLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SCRATCH), + LEVEL_UP_MOVE( 7, MOVE_STUN_SPORE), + LEVEL_UP_MOVE(13, MOVE_POISON_POWDER), + LEVEL_UP_MOVE(19, MOVE_LEECH_LIFE), + LEVEL_UP_MOVE(25, MOVE_SPORE), + LEVEL_UP_MOVE(31, MOVE_SLASH), + LEVEL_UP_MOVE(37, MOVE_GROWTH), + LEVEL_UP_MOVE(43, MOVE_GIGA_DRAIN), + LEVEL_UP_MOVE(49, MOVE_AROMATHERAPY), + LEVEL_UP_END +}; + +const u16 gParasectLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SCRATCH), + LEVEL_UP_MOVE( 1, MOVE_STUN_SPORE), + LEVEL_UP_MOVE( 1, MOVE_POISON_POWDER), + LEVEL_UP_MOVE( 7, MOVE_STUN_SPORE), + LEVEL_UP_MOVE(13, MOVE_POISON_POWDER), + LEVEL_UP_MOVE(19, MOVE_LEECH_LIFE), + LEVEL_UP_MOVE(27, MOVE_SPORE), + LEVEL_UP_MOVE(35, MOVE_SLASH), + LEVEL_UP_MOVE(43, MOVE_GROWTH), + LEVEL_UP_MOVE(51, MOVE_GIGA_DRAIN), + LEVEL_UP_MOVE(59, MOVE_AROMATHERAPY), + LEVEL_UP_END +}; + +const u16 gVenonatLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_DISABLE), + LEVEL_UP_MOVE( 1, MOVE_FORESIGHT), + LEVEL_UP_MOVE( 9, MOVE_SUPERSONIC), + LEVEL_UP_MOVE(17, MOVE_CONFUSION), + LEVEL_UP_MOVE(20, MOVE_POISON_POWDER), + LEVEL_UP_MOVE(25, MOVE_LEECH_LIFE), + LEVEL_UP_MOVE(28, MOVE_STUN_SPORE), + LEVEL_UP_MOVE(33, MOVE_PSYBEAM), + LEVEL_UP_MOVE(36, MOVE_SLEEP_POWDER), + LEVEL_UP_MOVE(41, MOVE_PSYCHIC), + LEVEL_UP_END +}; + +const u16 gVenomothLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SILVER_WIND), + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_DISABLE), + LEVEL_UP_MOVE( 1, MOVE_FORESIGHT), + LEVEL_UP_MOVE( 1, MOVE_SUPERSONIC), + LEVEL_UP_MOVE( 9, MOVE_SUPERSONIC), + LEVEL_UP_MOVE(17, MOVE_CONFUSION), + LEVEL_UP_MOVE(20, MOVE_POISON_POWDER), + LEVEL_UP_MOVE(25, MOVE_LEECH_LIFE), + LEVEL_UP_MOVE(28, MOVE_STUN_SPORE), + LEVEL_UP_MOVE(31, MOVE_GUST), + LEVEL_UP_MOVE(36, MOVE_PSYBEAM), + LEVEL_UP_MOVE(42, MOVE_SLEEP_POWDER), + LEVEL_UP_MOVE(52, MOVE_PSYCHIC), + LEVEL_UP_END +}; + +const u16 gDiglettLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SCRATCH), + LEVEL_UP_MOVE( 1, MOVE_SAND_ATTACK), + LEVEL_UP_MOVE( 5, MOVE_GROWL), + LEVEL_UP_MOVE( 9, MOVE_MAGNITUDE), + LEVEL_UP_MOVE(17, MOVE_DIG), + LEVEL_UP_MOVE(25, MOVE_MUD_SLAP), + LEVEL_UP_MOVE(33, MOVE_SLASH), + LEVEL_UP_MOVE(41, MOVE_EARTHQUAKE), + LEVEL_UP_MOVE(49, MOVE_FISSURE), + LEVEL_UP_END +}; + +const u16 gDugtrioLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TRI_ATTACK), + LEVEL_UP_MOVE( 1, MOVE_SCRATCH), + LEVEL_UP_MOVE( 1, MOVE_SAND_ATTACK), + LEVEL_UP_MOVE( 1, MOVE_GROWL), + LEVEL_UP_MOVE( 5, MOVE_GROWL), + LEVEL_UP_MOVE( 9, MOVE_MAGNITUDE), + LEVEL_UP_MOVE(17, MOVE_DIG), + LEVEL_UP_MOVE(25, MOVE_MUD_SLAP), + LEVEL_UP_MOVE(26, MOVE_SAND_TOMB), + LEVEL_UP_MOVE(38, MOVE_SLASH), + LEVEL_UP_MOVE(51, MOVE_EARTHQUAKE), + LEVEL_UP_MOVE(64, MOVE_FISSURE), + LEVEL_UP_END +}; + +const u16 gMeowthLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SCRATCH), + LEVEL_UP_MOVE( 1, MOVE_GROWL), + LEVEL_UP_MOVE(11, MOVE_BITE), + LEVEL_UP_MOVE(20, MOVE_PAY_DAY), + LEVEL_UP_MOVE(28, MOVE_FAINT_ATTACK), + LEVEL_UP_MOVE(35, MOVE_SCREECH), + LEVEL_UP_MOVE(41, MOVE_FURY_SWIPES), + LEVEL_UP_MOVE(46, MOVE_SLASH), + LEVEL_UP_MOVE(50, MOVE_FAKE_OUT), + LEVEL_UP_END +}; + +const u16 gPersianLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SCRATCH), + LEVEL_UP_MOVE( 1, MOVE_GROWL), + LEVEL_UP_MOVE( 1, MOVE_BITE), + LEVEL_UP_MOVE(11, MOVE_BITE), + LEVEL_UP_MOVE(20, MOVE_PAY_DAY), + LEVEL_UP_MOVE(29, MOVE_FAINT_ATTACK), + LEVEL_UP_MOVE(38, MOVE_SCREECH), + LEVEL_UP_MOVE(46, MOVE_FURY_SWIPES), + LEVEL_UP_MOVE(53, MOVE_SLASH), + LEVEL_UP_MOVE(59, MOVE_FAKE_OUT), + LEVEL_UP_END +}; + +const u16 gPsyduckLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_WATER_SPORT), + LEVEL_UP_MOVE( 1, MOVE_SCRATCH), + LEVEL_UP_MOVE( 5, MOVE_TAIL_WHIP), + LEVEL_UP_MOVE(10, MOVE_DISABLE), + LEVEL_UP_MOVE(16, MOVE_CONFUSION), + LEVEL_UP_MOVE(23, MOVE_SCREECH), + LEVEL_UP_MOVE(31, MOVE_PSYCH_UP), + LEVEL_UP_MOVE(40, MOVE_FURY_SWIPES), + LEVEL_UP_MOVE(50, MOVE_HYDRO_PUMP), + LEVEL_UP_END +}; + +const u16 gGolduckLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_WATER_SPORT), + LEVEL_UP_MOVE( 1, MOVE_SCRATCH), + LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), + LEVEL_UP_MOVE( 1, MOVE_DISABLE), + LEVEL_UP_MOVE( 5, MOVE_TAIL_WHIP), + LEVEL_UP_MOVE(10, MOVE_DISABLE), + LEVEL_UP_MOVE(16, MOVE_CONFUSION), + LEVEL_UP_MOVE(23, MOVE_SCREECH), + LEVEL_UP_MOVE(31, MOVE_PSYCH_UP), + LEVEL_UP_MOVE(44, MOVE_FURY_SWIPES), + LEVEL_UP_MOVE(58, MOVE_HYDRO_PUMP), + LEVEL_UP_END +}; + +const u16 gMankeyLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SCRATCH), + LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 9, MOVE_LOW_KICK), + LEVEL_UP_MOVE(15, MOVE_KARATE_CHOP), + LEVEL_UP_MOVE(21, MOVE_FURY_SWIPES), + LEVEL_UP_MOVE(27, MOVE_FOCUS_ENERGY), + LEVEL_UP_MOVE(33, MOVE_SEISMIC_TOSS), + LEVEL_UP_MOVE(39, MOVE_CROSS_CHOP), + LEVEL_UP_MOVE(45, MOVE_SCREECH), + LEVEL_UP_MOVE(51, MOVE_THRASH), + LEVEL_UP_END +}; + +const u16 gPrimeapeLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SCRATCH), + LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 1, MOVE_LOW_KICK), + LEVEL_UP_MOVE( 1, MOVE_RAGE), + LEVEL_UP_MOVE( 9, MOVE_LOW_KICK), + LEVEL_UP_MOVE(15, MOVE_KARATE_CHOP), + LEVEL_UP_MOVE(21, MOVE_FURY_SWIPES), + LEVEL_UP_MOVE(27, MOVE_FOCUS_ENERGY), + LEVEL_UP_MOVE(28, MOVE_RAGE), + LEVEL_UP_MOVE(36, MOVE_SEISMIC_TOSS), + LEVEL_UP_MOVE(45, MOVE_CROSS_CHOP), + LEVEL_UP_MOVE(54, MOVE_SCREECH), + LEVEL_UP_MOVE(63, MOVE_THRASH), + LEVEL_UP_END +}; + +const u16 gGrowlitheLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_BITE), + LEVEL_UP_MOVE( 1, MOVE_ROAR), + LEVEL_UP_MOVE( 7, MOVE_EMBER), + LEVEL_UP_MOVE(13, MOVE_LEER), + LEVEL_UP_MOVE(19, MOVE_ODOR_SLEUTH), + LEVEL_UP_MOVE(25, MOVE_TAKE_DOWN), + LEVEL_UP_MOVE(31, MOVE_FLAME_WHEEL), + LEVEL_UP_MOVE(37, MOVE_HELPING_HAND), + LEVEL_UP_MOVE(43, MOVE_AGILITY), + LEVEL_UP_MOVE(49, MOVE_FLAMETHROWER), + LEVEL_UP_END +}; + +const u16 gArcanineLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_BITE), + LEVEL_UP_MOVE( 1, MOVE_ROAR), + LEVEL_UP_MOVE( 1, MOVE_EMBER), + LEVEL_UP_MOVE( 1, MOVE_ODOR_SLEUTH), + LEVEL_UP_MOVE(49, MOVE_EXTREME_SPEED), + LEVEL_UP_END +}; + +const u16 gPoliwagLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_BUBBLE), + LEVEL_UP_MOVE( 7, MOVE_HYPNOSIS), + LEVEL_UP_MOVE(13, MOVE_WATER_GUN), + LEVEL_UP_MOVE(19, MOVE_DOUBLE_SLAP), + LEVEL_UP_MOVE(25, MOVE_RAIN_DANCE), + LEVEL_UP_MOVE(31, MOVE_BODY_SLAM), + LEVEL_UP_MOVE(37, MOVE_BELLY_DRUM), + LEVEL_UP_MOVE(43, MOVE_HYDRO_PUMP), + LEVEL_UP_END +}; + +const u16 gPoliwhirlLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_BUBBLE), + LEVEL_UP_MOVE( 1, MOVE_HYPNOSIS), + LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), + LEVEL_UP_MOVE( 7, MOVE_HYPNOSIS), + LEVEL_UP_MOVE(13, MOVE_WATER_GUN), + LEVEL_UP_MOVE(19, MOVE_DOUBLE_SLAP), + LEVEL_UP_MOVE(27, MOVE_RAIN_DANCE), + LEVEL_UP_MOVE(35, MOVE_BODY_SLAM), + LEVEL_UP_MOVE(43, MOVE_BELLY_DRUM), + LEVEL_UP_MOVE(51, MOVE_HYDRO_PUMP), + LEVEL_UP_END +}; + +const u16 gPoliwrathLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), + LEVEL_UP_MOVE( 1, MOVE_HYPNOSIS), + LEVEL_UP_MOVE( 1, MOVE_DOUBLE_SLAP), + LEVEL_UP_MOVE( 1, MOVE_SUBMISSION), + LEVEL_UP_MOVE(35, MOVE_SUBMISSION), + LEVEL_UP_MOVE(51, MOVE_MIND_READER), + LEVEL_UP_END +}; + +const u16 gAbraLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TELEPORT), + LEVEL_UP_END +}; + +const u16 gKadabraLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TELEPORT), + LEVEL_UP_MOVE( 1, MOVE_KINESIS), + LEVEL_UP_MOVE( 1, MOVE_CONFUSION), + LEVEL_UP_MOVE(16, MOVE_CONFUSION), + LEVEL_UP_MOVE(18, MOVE_DISABLE), + LEVEL_UP_MOVE(21, MOVE_PSYBEAM), + LEVEL_UP_MOVE(23, MOVE_REFLECT), + LEVEL_UP_MOVE(25, MOVE_RECOVER), + LEVEL_UP_MOVE(30, MOVE_FUTURE_SIGHT), + LEVEL_UP_MOVE(33, MOVE_ROLE_PLAY), + LEVEL_UP_MOVE(36, MOVE_PSYCHIC), + LEVEL_UP_MOVE(43, MOVE_TRICK), + LEVEL_UP_END +}; + +const u16 gAlakazamLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TELEPORT), + LEVEL_UP_MOVE( 1, MOVE_KINESIS), + LEVEL_UP_MOVE( 1, MOVE_CONFUSION), + LEVEL_UP_MOVE(16, MOVE_CONFUSION), + LEVEL_UP_MOVE(18, MOVE_DISABLE), + LEVEL_UP_MOVE(21, MOVE_PSYBEAM), + LEVEL_UP_MOVE(23, MOVE_REFLECT), + LEVEL_UP_MOVE(25, MOVE_RECOVER), + LEVEL_UP_MOVE(30, MOVE_FUTURE_SIGHT), + LEVEL_UP_MOVE(33, MOVE_CALM_MIND), + LEVEL_UP_MOVE(36, MOVE_PSYCHIC), + LEVEL_UP_MOVE(43, MOVE_TRICK), + LEVEL_UP_END +}; + +const u16 gMachopLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_LOW_KICK), + LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 7, MOVE_FOCUS_ENERGY), + LEVEL_UP_MOVE(13, MOVE_KARATE_CHOP), + LEVEL_UP_MOVE(19, MOVE_SEISMIC_TOSS), + LEVEL_UP_MOVE(22, MOVE_FORESIGHT), + LEVEL_UP_MOVE(25, MOVE_REVENGE), + LEVEL_UP_MOVE(31, MOVE_VITAL_THROW), + LEVEL_UP_MOVE(37, MOVE_SUBMISSION), + LEVEL_UP_MOVE(40, MOVE_CROSS_CHOP), + LEVEL_UP_MOVE(43, MOVE_SCARY_FACE), + LEVEL_UP_MOVE(49, MOVE_DYNAMIC_PUNCH), + LEVEL_UP_END +}; + +const u16 gMachokeLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_LOW_KICK), + LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 1, MOVE_FOCUS_ENERGY), + LEVEL_UP_MOVE( 7, MOVE_FOCUS_ENERGY), + LEVEL_UP_MOVE(13, MOVE_KARATE_CHOP), + LEVEL_UP_MOVE(19, MOVE_SEISMIC_TOSS), + LEVEL_UP_MOVE(22, MOVE_FORESIGHT), + LEVEL_UP_MOVE(25, MOVE_REVENGE), + LEVEL_UP_MOVE(33, MOVE_VITAL_THROW), + LEVEL_UP_MOVE(41, MOVE_SUBMISSION), + LEVEL_UP_MOVE(46, MOVE_CROSS_CHOP), + LEVEL_UP_MOVE(51, MOVE_SCARY_FACE), + LEVEL_UP_MOVE(59, MOVE_DYNAMIC_PUNCH), + LEVEL_UP_END +}; + +const u16 gMachampLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_LOW_KICK), + LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 1, MOVE_FOCUS_ENERGY), + LEVEL_UP_MOVE( 7, MOVE_FOCUS_ENERGY), + LEVEL_UP_MOVE(13, MOVE_KARATE_CHOP), + LEVEL_UP_MOVE(19, MOVE_SEISMIC_TOSS), + LEVEL_UP_MOVE(22, MOVE_FORESIGHT), + LEVEL_UP_MOVE(25, MOVE_REVENGE), + LEVEL_UP_MOVE(33, MOVE_VITAL_THROW), + LEVEL_UP_MOVE(41, MOVE_SUBMISSION), + LEVEL_UP_MOVE(46, MOVE_CROSS_CHOP), + LEVEL_UP_MOVE(51, MOVE_SCARY_FACE), + LEVEL_UP_MOVE(59, MOVE_DYNAMIC_PUNCH), + LEVEL_UP_END +}; + +const u16 gBellsproutLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_VINE_WHIP), + LEVEL_UP_MOVE( 6, MOVE_GROWTH), + LEVEL_UP_MOVE(11, MOVE_WRAP), + LEVEL_UP_MOVE(15, MOVE_SLEEP_POWDER), + LEVEL_UP_MOVE(17, MOVE_POISON_POWDER), + LEVEL_UP_MOVE(19, MOVE_STUN_SPORE), + LEVEL_UP_MOVE(23, MOVE_ACID), + LEVEL_UP_MOVE(30, MOVE_SWEET_SCENT), + LEVEL_UP_MOVE(37, MOVE_RAZOR_LEAF), + LEVEL_UP_MOVE(45, MOVE_SLAM), + LEVEL_UP_END +}; + +const u16 gWeepinbellLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_VINE_WHIP), + LEVEL_UP_MOVE( 1, MOVE_GROWTH), + LEVEL_UP_MOVE( 1, MOVE_WRAP), + LEVEL_UP_MOVE( 6, MOVE_GROWTH), + LEVEL_UP_MOVE(11, MOVE_WRAP), + LEVEL_UP_MOVE(15, MOVE_SLEEP_POWDER), + LEVEL_UP_MOVE(17, MOVE_POISON_POWDER), + LEVEL_UP_MOVE(19, MOVE_STUN_SPORE), + LEVEL_UP_MOVE(24, MOVE_ACID), + LEVEL_UP_MOVE(33, MOVE_SWEET_SCENT), + LEVEL_UP_MOVE(42, MOVE_RAZOR_LEAF), + LEVEL_UP_MOVE(54, MOVE_SLAM), + LEVEL_UP_END +}; + +const u16 gVictreebelLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_VINE_WHIP), + LEVEL_UP_MOVE( 1, MOVE_SLEEP_POWDER), + LEVEL_UP_MOVE( 1, MOVE_SWEET_SCENT), + LEVEL_UP_MOVE( 1, MOVE_RAZOR_LEAF), + LEVEL_UP_END +}; + +const u16 gTentacoolLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_POISON_STING), + LEVEL_UP_MOVE( 6, MOVE_SUPERSONIC), + LEVEL_UP_MOVE(12, MOVE_CONSTRICT), + LEVEL_UP_MOVE(19, MOVE_ACID), + LEVEL_UP_MOVE(25, MOVE_BUBBLE_BEAM), + LEVEL_UP_MOVE(30, MOVE_WRAP), + LEVEL_UP_MOVE(36, MOVE_BARRIER), + LEVEL_UP_MOVE(43, MOVE_SCREECH), + LEVEL_UP_MOVE(49, MOVE_HYDRO_PUMP), + LEVEL_UP_END +}; + +const u16 gTentacruelLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_POISON_STING), + LEVEL_UP_MOVE( 1, MOVE_SUPERSONIC), + LEVEL_UP_MOVE( 1, MOVE_CONSTRICT), + LEVEL_UP_MOVE( 6, MOVE_SUPERSONIC), + LEVEL_UP_MOVE(12, MOVE_CONSTRICT), + LEVEL_UP_MOVE(19, MOVE_ACID), + LEVEL_UP_MOVE(25, MOVE_BUBBLE_BEAM), + LEVEL_UP_MOVE(30, MOVE_WRAP), + LEVEL_UP_MOVE(38, MOVE_BARRIER), + LEVEL_UP_MOVE(47, MOVE_SCREECH), + LEVEL_UP_MOVE(55, MOVE_HYDRO_PUMP), + LEVEL_UP_END +}; + +const u16 gGeodudeLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL), + LEVEL_UP_MOVE( 6, MOVE_MUD_SPORT), + LEVEL_UP_MOVE(11, MOVE_ROCK_THROW), + LEVEL_UP_MOVE(16, MOVE_MAGNITUDE), + LEVEL_UP_MOVE(21, MOVE_SELF_DESTRUCT), + LEVEL_UP_MOVE(26, MOVE_ROLLOUT), + LEVEL_UP_MOVE(31, MOVE_ROCK_BLAST), + LEVEL_UP_MOVE(36, MOVE_EARTHQUAKE), + LEVEL_UP_MOVE(41, MOVE_EXPLOSION), + LEVEL_UP_MOVE(46, MOVE_DOUBLE_EDGE), + LEVEL_UP_END +}; + +const u16 gGravelerLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL), + LEVEL_UP_MOVE( 1, MOVE_MUD_SPORT), + LEVEL_UP_MOVE( 1, MOVE_ROCK_THROW), + LEVEL_UP_MOVE( 6, MOVE_MUD_SPORT), + LEVEL_UP_MOVE(11, MOVE_ROCK_THROW), + LEVEL_UP_MOVE(16, MOVE_MAGNITUDE), + LEVEL_UP_MOVE(21, MOVE_SELF_DESTRUCT), + LEVEL_UP_MOVE(29, MOVE_ROLLOUT), + LEVEL_UP_MOVE(37, MOVE_ROCK_BLAST), + LEVEL_UP_MOVE(45, MOVE_EARTHQUAKE), + LEVEL_UP_MOVE(53, MOVE_EXPLOSION), + LEVEL_UP_MOVE(62, MOVE_DOUBLE_EDGE), + LEVEL_UP_END +}; + +const u16 gGolemLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL), + LEVEL_UP_MOVE( 1, MOVE_MUD_SPORT), + LEVEL_UP_MOVE( 1, MOVE_ROCK_THROW), + LEVEL_UP_MOVE( 6, MOVE_MUD_SPORT), + LEVEL_UP_MOVE(11, MOVE_ROCK_THROW), + LEVEL_UP_MOVE(16, MOVE_MAGNITUDE), + LEVEL_UP_MOVE(21, MOVE_SELF_DESTRUCT), + LEVEL_UP_MOVE(29, MOVE_ROLLOUT), + LEVEL_UP_MOVE(37, MOVE_ROCK_BLAST), + LEVEL_UP_MOVE(45, MOVE_EARTHQUAKE), + LEVEL_UP_MOVE(53, MOVE_EXPLOSION), + LEVEL_UP_MOVE(62, MOVE_DOUBLE_EDGE), + LEVEL_UP_END +}; + +const u16 gPonytaLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 5, MOVE_GROWL), + LEVEL_UP_MOVE( 9, MOVE_TAIL_WHIP), + LEVEL_UP_MOVE(14, MOVE_EMBER), + LEVEL_UP_MOVE(19, MOVE_STOMP), + LEVEL_UP_MOVE(25, MOVE_FIRE_SPIN), + LEVEL_UP_MOVE(31, MOVE_TAKE_DOWN), + LEVEL_UP_MOVE(38, MOVE_AGILITY), + LEVEL_UP_MOVE(45, MOVE_BOUNCE), + LEVEL_UP_MOVE(53, MOVE_FIRE_BLAST), + LEVEL_UP_END +}; + +const u16 gRapidashLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_GROWL), + LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), + LEVEL_UP_MOVE( 1, MOVE_EMBER), + LEVEL_UP_MOVE( 5, MOVE_GROWL), + LEVEL_UP_MOVE( 9, MOVE_TAIL_WHIP), + LEVEL_UP_MOVE(14, MOVE_EMBER), + LEVEL_UP_MOVE(19, MOVE_STOMP), + LEVEL_UP_MOVE(25, MOVE_FIRE_SPIN), + LEVEL_UP_MOVE(31, MOVE_TAKE_DOWN), + LEVEL_UP_MOVE(38, MOVE_AGILITY), + LEVEL_UP_MOVE(40, MOVE_FURY_ATTACK), + LEVEL_UP_MOVE(50, MOVE_BOUNCE), + LEVEL_UP_MOVE(63, MOVE_FIRE_BLAST), + LEVEL_UP_END +}; + +const u16 gSlowpokeLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_CURSE), + LEVEL_UP_MOVE( 1, MOVE_YAWN), + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 6, MOVE_GROWL), + LEVEL_UP_MOVE(15, MOVE_WATER_GUN), + LEVEL_UP_MOVE(20, MOVE_CONFUSION), + LEVEL_UP_MOVE(29, MOVE_DISABLE), + LEVEL_UP_MOVE(34, MOVE_HEADBUTT), + LEVEL_UP_MOVE(43, MOVE_AMNESIA), + LEVEL_UP_MOVE(48, MOVE_PSYCHIC), + LEVEL_UP_END +}; + +const u16 gSlowbroLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_CURSE), + LEVEL_UP_MOVE( 1, MOVE_YAWN), + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_GROWL), + LEVEL_UP_MOVE( 6, MOVE_GROWL), + LEVEL_UP_MOVE(15, MOVE_WATER_GUN), + LEVEL_UP_MOVE(20, MOVE_CONFUSION), + LEVEL_UP_MOVE(29, MOVE_DISABLE), + LEVEL_UP_MOVE(34, MOVE_HEADBUTT), + LEVEL_UP_MOVE(37, MOVE_WITHDRAW), + LEVEL_UP_MOVE(46, MOVE_AMNESIA), + LEVEL_UP_MOVE(54, MOVE_PSYCHIC), + LEVEL_UP_END +}; + +const u16 gMagnemiteLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_METAL_SOUND), + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 6, MOVE_THUNDER_SHOCK), + LEVEL_UP_MOVE(11, MOVE_SUPERSONIC), + LEVEL_UP_MOVE(16, MOVE_SONIC_BOOM), + LEVEL_UP_MOVE(21, MOVE_THUNDER_WAVE), + LEVEL_UP_MOVE(26, MOVE_SPARK), + LEVEL_UP_MOVE(32, MOVE_LOCK_ON), + LEVEL_UP_MOVE(38, MOVE_SWIFT), + LEVEL_UP_MOVE(44, MOVE_SCREECH), + LEVEL_UP_MOVE(50, MOVE_ZAP_CANNON), + LEVEL_UP_END +}; + +const u16 gMagnetonLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_METAL_SOUND), + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_THUNDER_SHOCK), + LEVEL_UP_MOVE( 1, MOVE_SUPERSONIC), + LEVEL_UP_MOVE( 6, MOVE_THUNDER_SHOCK), + LEVEL_UP_MOVE(11, MOVE_SUPERSONIC), + LEVEL_UP_MOVE(16, MOVE_SONIC_BOOM), + LEVEL_UP_MOVE(21, MOVE_THUNDER_WAVE), + LEVEL_UP_MOVE(26, MOVE_SPARK), + LEVEL_UP_MOVE(35, MOVE_LOCK_ON), + LEVEL_UP_MOVE(44, MOVE_TRI_ATTACK), + LEVEL_UP_MOVE(53, MOVE_SCREECH), + LEVEL_UP_MOVE(62, MOVE_ZAP_CANNON), + LEVEL_UP_END +}; + +const u16 gFarfetchdLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_PECK), + LEVEL_UP_MOVE( 6, MOVE_SAND_ATTACK), + LEVEL_UP_MOVE(11, MOVE_LEER), + LEVEL_UP_MOVE(16, MOVE_FURY_ATTACK), + LEVEL_UP_MOVE(21, MOVE_KNOCK_OFF), + LEVEL_UP_MOVE(26, MOVE_FURY_CUTTER), + LEVEL_UP_MOVE(31, MOVE_SWORDS_DANCE), + LEVEL_UP_MOVE(36, MOVE_AGILITY), + LEVEL_UP_MOVE(41, MOVE_SLASH), + LEVEL_UP_MOVE(46, MOVE_FALSE_SWIPE), + LEVEL_UP_END +}; + +const u16 gDoduoLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_PECK), + LEVEL_UP_MOVE( 1, MOVE_GROWL), + LEVEL_UP_MOVE( 9, MOVE_PURSUIT), + LEVEL_UP_MOVE(13, MOVE_FURY_ATTACK), + LEVEL_UP_MOVE(21, MOVE_TRI_ATTACK), + LEVEL_UP_MOVE(25, MOVE_RAGE), + LEVEL_UP_MOVE(33, MOVE_UPROAR), + LEVEL_UP_MOVE(37, MOVE_DRILL_PECK), + LEVEL_UP_MOVE(45, MOVE_AGILITY), + LEVEL_UP_END +}; + +const u16 gDodrioLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_PECK), + LEVEL_UP_MOVE( 1, MOVE_GROWL), + LEVEL_UP_MOVE( 1, MOVE_PURSUIT), + LEVEL_UP_MOVE( 1, MOVE_FURY_ATTACK), + LEVEL_UP_MOVE( 9, MOVE_PURSUIT), + LEVEL_UP_MOVE(13, MOVE_FURY_ATTACK), + LEVEL_UP_MOVE(21, MOVE_TRI_ATTACK), + LEVEL_UP_MOVE(25, MOVE_RAGE), + LEVEL_UP_MOVE(38, MOVE_UPROAR), + LEVEL_UP_MOVE(47, MOVE_DRILL_PECK), + LEVEL_UP_MOVE(60, MOVE_AGILITY), + LEVEL_UP_END +}; + +const u16 gSeelLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_HEADBUTT), + LEVEL_UP_MOVE( 9, MOVE_GROWL), + LEVEL_UP_MOVE(17, MOVE_ICY_WIND), + LEVEL_UP_MOVE(21, MOVE_AURORA_BEAM), + LEVEL_UP_MOVE(29, MOVE_REST), + LEVEL_UP_MOVE(37, MOVE_TAKE_DOWN), + LEVEL_UP_MOVE(41, MOVE_ICE_BEAM), + LEVEL_UP_MOVE(49, MOVE_SAFEGUARD), + LEVEL_UP_END +}; + +const u16 gDewgongLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_HEADBUTT), + LEVEL_UP_MOVE( 1, MOVE_GROWL), + LEVEL_UP_MOVE( 1, MOVE_ICY_WIND), + LEVEL_UP_MOVE( 1, MOVE_AURORA_BEAM), + LEVEL_UP_MOVE( 9, MOVE_GROWL), + LEVEL_UP_MOVE(17, MOVE_ICY_WIND), + LEVEL_UP_MOVE(21, MOVE_AURORA_BEAM), + LEVEL_UP_MOVE(29, MOVE_REST), + LEVEL_UP_MOVE(34, MOVE_SHEER_COLD), + LEVEL_UP_MOVE(42, MOVE_TAKE_DOWN), + LEVEL_UP_MOVE(51, MOVE_ICE_BEAM), + LEVEL_UP_MOVE(64, MOVE_SAFEGUARD), + LEVEL_UP_END +}; + +const u16 gGrimerLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_POISON_GAS), + LEVEL_UP_MOVE( 1, MOVE_POUND), + LEVEL_UP_MOVE( 4, MOVE_HARDEN), + LEVEL_UP_MOVE( 8, MOVE_DISABLE), + LEVEL_UP_MOVE(13, MOVE_SLUDGE), + LEVEL_UP_MOVE(19, MOVE_MINIMIZE), + LEVEL_UP_MOVE(26, MOVE_SCREECH), + LEVEL_UP_MOVE(34, MOVE_ACID_ARMOR), + LEVEL_UP_MOVE(43, MOVE_SLUDGE_BOMB), + LEVEL_UP_MOVE(53, MOVE_MEMENTO), + LEVEL_UP_END +}; + +const u16 gMukLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_POISON_GAS), + LEVEL_UP_MOVE( 1, MOVE_POUND), + LEVEL_UP_MOVE( 1, MOVE_HARDEN), + LEVEL_UP_MOVE( 4, MOVE_HARDEN), + LEVEL_UP_MOVE( 8, MOVE_DISABLE), + LEVEL_UP_MOVE(13, MOVE_SLUDGE), + LEVEL_UP_MOVE(19, MOVE_MINIMIZE), + LEVEL_UP_MOVE(26, MOVE_SCREECH), + LEVEL_UP_MOVE(34, MOVE_ACID_ARMOR), + LEVEL_UP_MOVE(47, MOVE_SLUDGE_BOMB), + LEVEL_UP_MOVE(61, MOVE_MEMENTO), + LEVEL_UP_END +}; + +const u16 gShellderLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_WITHDRAW), + LEVEL_UP_MOVE( 9, MOVE_SUPERSONIC), + LEVEL_UP_MOVE(17, MOVE_AURORA_BEAM), + LEVEL_UP_MOVE(25, MOVE_PROTECT), + LEVEL_UP_MOVE(33, MOVE_LEER), + LEVEL_UP_MOVE(41, MOVE_CLAMP), + LEVEL_UP_MOVE(49, MOVE_ICE_BEAM), + LEVEL_UP_END +}; + +const u16 gCloysterLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_WITHDRAW), + LEVEL_UP_MOVE( 1, MOVE_SUPERSONIC), + LEVEL_UP_MOVE( 1, MOVE_AURORA_BEAM), + LEVEL_UP_MOVE( 1, MOVE_PROTECT), + LEVEL_UP_MOVE(33, MOVE_SPIKES), + LEVEL_UP_MOVE(41, MOVE_SPIKE_CANNON), + LEVEL_UP_END +}; + +const u16 gGastlyLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_HYPNOSIS), + LEVEL_UP_MOVE( 1, MOVE_LICK), + LEVEL_UP_MOVE( 8, MOVE_SPITE), + LEVEL_UP_MOVE(13, MOVE_MEAN_LOOK), + LEVEL_UP_MOVE(16, MOVE_CURSE), + LEVEL_UP_MOVE(21, MOVE_NIGHT_SHADE), + LEVEL_UP_MOVE(28, MOVE_CONFUSE_RAY), + LEVEL_UP_MOVE(33, MOVE_DREAM_EATER), + LEVEL_UP_MOVE(36, MOVE_DESTINY_BOND), + LEVEL_UP_END +}; + +const u16 gHaunterLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_HYPNOSIS), + LEVEL_UP_MOVE( 1, MOVE_LICK), + LEVEL_UP_MOVE( 1, MOVE_SPITE), + LEVEL_UP_MOVE( 8, MOVE_SPITE), + LEVEL_UP_MOVE(13, MOVE_MEAN_LOOK), + LEVEL_UP_MOVE(16, MOVE_CURSE), + LEVEL_UP_MOVE(21, MOVE_NIGHT_SHADE), + LEVEL_UP_MOVE(25, MOVE_SHADOW_PUNCH), + LEVEL_UP_MOVE(31, MOVE_CONFUSE_RAY), + LEVEL_UP_MOVE(39, MOVE_DREAM_EATER), + LEVEL_UP_MOVE(48, MOVE_DESTINY_BOND), + LEVEL_UP_END +}; + +const u16 gGengarLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_HYPNOSIS), + LEVEL_UP_MOVE( 1, MOVE_LICK), + LEVEL_UP_MOVE( 1, MOVE_SPITE), + LEVEL_UP_MOVE( 8, MOVE_SPITE), + LEVEL_UP_MOVE(13, MOVE_MEAN_LOOK), + LEVEL_UP_MOVE(16, MOVE_CURSE), + LEVEL_UP_MOVE(21, MOVE_NIGHT_SHADE), + LEVEL_UP_MOVE(25, MOVE_SHADOW_PUNCH), + LEVEL_UP_MOVE(31, MOVE_CONFUSE_RAY), + LEVEL_UP_MOVE(39, MOVE_DREAM_EATER), + LEVEL_UP_MOVE(48, MOVE_DESTINY_BOND), + LEVEL_UP_END +}; + +const u16 gOnixLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_SCREECH), + LEVEL_UP_MOVE( 9, MOVE_BIND), + LEVEL_UP_MOVE(13, MOVE_ROCK_THROW), + LEVEL_UP_MOVE(21, MOVE_HARDEN), + LEVEL_UP_MOVE(25, MOVE_RAGE), + LEVEL_UP_MOVE(33, MOVE_SANDSTORM), + LEVEL_UP_MOVE(37, MOVE_SLAM), + LEVEL_UP_MOVE(45, MOVE_IRON_TAIL), + LEVEL_UP_MOVE(49, MOVE_SAND_TOMB), + LEVEL_UP_MOVE(57, MOVE_DOUBLE_EDGE), + LEVEL_UP_END +}; + +const u16 gDrowzeeLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_POUND), + LEVEL_UP_MOVE( 1, MOVE_HYPNOSIS), + LEVEL_UP_MOVE(10, MOVE_DISABLE), + LEVEL_UP_MOVE(18, MOVE_CONFUSION), + LEVEL_UP_MOVE(25, MOVE_HEADBUTT), + LEVEL_UP_MOVE(31, MOVE_POISON_GAS), + LEVEL_UP_MOVE(36, MOVE_MEDITATE), + LEVEL_UP_MOVE(40, MOVE_PSYCHIC), + LEVEL_UP_MOVE(43, MOVE_PSYCH_UP), + LEVEL_UP_MOVE(45, MOVE_FUTURE_SIGHT), + LEVEL_UP_END +}; + +const u16 gHypnoLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_POUND), + LEVEL_UP_MOVE( 1, MOVE_HYPNOSIS), + LEVEL_UP_MOVE( 1, MOVE_DISABLE), + LEVEL_UP_MOVE( 1, MOVE_CONFUSION), + LEVEL_UP_MOVE(10, MOVE_DISABLE), + LEVEL_UP_MOVE(18, MOVE_CONFUSION), + LEVEL_UP_MOVE(25, MOVE_HEADBUTT), + LEVEL_UP_MOVE(33, MOVE_POISON_GAS), + LEVEL_UP_MOVE(40, MOVE_MEDITATE), + LEVEL_UP_MOVE(49, MOVE_PSYCHIC), + LEVEL_UP_MOVE(55, MOVE_PSYCH_UP), + LEVEL_UP_MOVE(60, MOVE_FUTURE_SIGHT), + LEVEL_UP_END +}; + +const u16 gKrabbyLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_BUBBLE), + LEVEL_UP_MOVE( 5, MOVE_LEER), + LEVEL_UP_MOVE(12, MOVE_VICE_GRIP), + LEVEL_UP_MOVE(16, MOVE_HARDEN), + LEVEL_UP_MOVE(23, MOVE_MUD_SHOT), + LEVEL_UP_MOVE(27, MOVE_STOMP), + LEVEL_UP_MOVE(34, MOVE_GUILLOTINE), + LEVEL_UP_MOVE(41, MOVE_PROTECT), + LEVEL_UP_MOVE(45, MOVE_CRABHAMMER), + LEVEL_UP_END +}; + +const u16 gKinglerLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_BUBBLE), + LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 1, MOVE_VICE_GRIP), + LEVEL_UP_MOVE( 5, MOVE_LEER), + LEVEL_UP_MOVE(12, MOVE_VICE_GRIP), + LEVEL_UP_MOVE(16, MOVE_HARDEN), + LEVEL_UP_MOVE(23, MOVE_MUD_SHOT), + LEVEL_UP_MOVE(27, MOVE_STOMP), + LEVEL_UP_MOVE(38, MOVE_GUILLOTINE), + LEVEL_UP_MOVE(49, MOVE_PROTECT), + LEVEL_UP_MOVE(57, MOVE_CRABHAMMER), + LEVEL_UP_END +}; + +const u16 gVoltorbLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_CHARGE), + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 8, MOVE_SCREECH), + LEVEL_UP_MOVE(15, MOVE_SONIC_BOOM), + LEVEL_UP_MOVE(21, MOVE_SPARK), + LEVEL_UP_MOVE(27, MOVE_SELF_DESTRUCT), + LEVEL_UP_MOVE(32, MOVE_ROLLOUT), + LEVEL_UP_MOVE(37, MOVE_LIGHT_SCREEN), + LEVEL_UP_MOVE(42, MOVE_SWIFT), + LEVEL_UP_MOVE(46, MOVE_EXPLOSION), + LEVEL_UP_MOVE(49, MOVE_MIRROR_COAT), + LEVEL_UP_END +}; + +const u16 gElectrodeLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_CHARGE), + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_SCREECH), + LEVEL_UP_MOVE( 1, MOVE_SONIC_BOOM), + LEVEL_UP_MOVE( 8, MOVE_SCREECH), + LEVEL_UP_MOVE(15, MOVE_SONIC_BOOM), + LEVEL_UP_MOVE(21, MOVE_SPARK), + LEVEL_UP_MOVE(27, MOVE_SELF_DESTRUCT), + LEVEL_UP_MOVE(34, MOVE_ROLLOUT), + LEVEL_UP_MOVE(41, MOVE_LIGHT_SCREEN), + LEVEL_UP_MOVE(48, MOVE_SWIFT), + LEVEL_UP_MOVE(54, MOVE_EXPLOSION), + LEVEL_UP_MOVE(59, MOVE_MIRROR_COAT), + LEVEL_UP_END +}; + +const u16 gExeggcuteLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_BARRAGE), + LEVEL_UP_MOVE( 1, MOVE_UPROAR), + LEVEL_UP_MOVE( 1, MOVE_HYPNOSIS), + LEVEL_UP_MOVE( 7, MOVE_REFLECT), + LEVEL_UP_MOVE(13, MOVE_LEECH_SEED), + LEVEL_UP_MOVE(19, MOVE_CONFUSION), + LEVEL_UP_MOVE(25, MOVE_STUN_SPORE), + LEVEL_UP_MOVE(31, MOVE_POISON_POWDER), + LEVEL_UP_MOVE(37, MOVE_SLEEP_POWDER), + LEVEL_UP_MOVE(43, MOVE_SOLAR_BEAM), + LEVEL_UP_END +}; + +const u16 gExeggutorLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_BARRAGE), + LEVEL_UP_MOVE( 1, MOVE_HYPNOSIS), + LEVEL_UP_MOVE( 1, MOVE_CONFUSION), + LEVEL_UP_MOVE(19, MOVE_STOMP), + LEVEL_UP_MOVE(31, MOVE_EGG_BOMB), + LEVEL_UP_END +}; + +const u16 gCuboneLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_GROWL), + LEVEL_UP_MOVE( 5, MOVE_TAIL_WHIP), + LEVEL_UP_MOVE( 9, MOVE_BONE_CLUB), + LEVEL_UP_MOVE(13, MOVE_HEADBUTT), + LEVEL_UP_MOVE(17, MOVE_LEER), + LEVEL_UP_MOVE(21, MOVE_FOCUS_ENERGY), + LEVEL_UP_MOVE(25, MOVE_BONEMERANG), + LEVEL_UP_MOVE(29, MOVE_RAGE), + LEVEL_UP_MOVE(33, MOVE_FALSE_SWIPE), + LEVEL_UP_MOVE(37, MOVE_THRASH), + LEVEL_UP_MOVE(41, MOVE_BONE_RUSH), + LEVEL_UP_MOVE(45, MOVE_DOUBLE_EDGE), + LEVEL_UP_END +}; + +const u16 gMarowakLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_GROWL), + LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), + LEVEL_UP_MOVE( 1, MOVE_BONE_CLUB), + LEVEL_UP_MOVE( 1, MOVE_HEADBUTT), + LEVEL_UP_MOVE( 5, MOVE_TAIL_WHIP), + LEVEL_UP_MOVE( 9, MOVE_BONE_CLUB), + LEVEL_UP_MOVE(13, MOVE_HEADBUTT), + LEVEL_UP_MOVE(17, MOVE_LEER), + LEVEL_UP_MOVE(21, MOVE_FOCUS_ENERGY), + LEVEL_UP_MOVE(25, MOVE_BONEMERANG), + LEVEL_UP_MOVE(32, MOVE_RAGE), + LEVEL_UP_MOVE(39, MOVE_FALSE_SWIPE), + LEVEL_UP_MOVE(46, MOVE_THRASH), + LEVEL_UP_MOVE(53, MOVE_BONE_RUSH), + LEVEL_UP_MOVE(61, MOVE_DOUBLE_EDGE), + LEVEL_UP_END +}; + +const u16 gHitmonleeLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_REVENGE), + LEVEL_UP_MOVE( 1, MOVE_DOUBLE_KICK), + LEVEL_UP_MOVE( 6, MOVE_MEDITATE), + LEVEL_UP_MOVE(11, MOVE_ROLLING_KICK), + LEVEL_UP_MOVE(16, MOVE_JUMP_KICK), + LEVEL_UP_MOVE(20, MOVE_BRICK_BREAK), + LEVEL_UP_MOVE(21, MOVE_FOCUS_ENERGY), + LEVEL_UP_MOVE(26, MOVE_HI_JUMP_KICK), + LEVEL_UP_MOVE(31, MOVE_MIND_READER), + LEVEL_UP_MOVE(36, MOVE_FORESIGHT), + LEVEL_UP_MOVE(41, MOVE_ENDURE), + LEVEL_UP_MOVE(46, MOVE_MEGA_KICK), + LEVEL_UP_MOVE(51, MOVE_REVERSAL), + LEVEL_UP_END +}; + +const u16 gHitmonchanLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_REVENGE), + LEVEL_UP_MOVE( 1, MOVE_COMET_PUNCH), + LEVEL_UP_MOVE( 7, MOVE_AGILITY), + LEVEL_UP_MOVE(13, MOVE_PURSUIT), + LEVEL_UP_MOVE(20, MOVE_MACH_PUNCH), + LEVEL_UP_MOVE(26, MOVE_THUNDER_PUNCH), + LEVEL_UP_MOVE(26, MOVE_ICE_PUNCH), + LEVEL_UP_MOVE(26, MOVE_FIRE_PUNCH), + LEVEL_UP_MOVE(32, MOVE_SKY_UPPERCUT), + LEVEL_UP_MOVE(38, MOVE_MEGA_PUNCH), + LEVEL_UP_MOVE(44, MOVE_DETECT), + LEVEL_UP_MOVE(50, MOVE_COUNTER), + LEVEL_UP_END +}; + +const u16 gLickitungLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_LICK), + LEVEL_UP_MOVE( 7, MOVE_SUPERSONIC), + LEVEL_UP_MOVE(12, MOVE_DEFENSE_CURL), + LEVEL_UP_MOVE(18, MOVE_KNOCK_OFF), + LEVEL_UP_MOVE(23, MOVE_STOMP), + LEVEL_UP_MOVE(29, MOVE_WRAP), + LEVEL_UP_MOVE(34, MOVE_DISABLE), + LEVEL_UP_MOVE(40, MOVE_SLAM), + LEVEL_UP_MOVE(45, MOVE_SCREECH), + LEVEL_UP_MOVE(51, MOVE_REFRESH), + LEVEL_UP_END +}; + +const u16 gKoffingLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_POISON_GAS), + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 9, MOVE_SMOG), + LEVEL_UP_MOVE(17, MOVE_SELF_DESTRUCT), + LEVEL_UP_MOVE(21, MOVE_SLUDGE), + LEVEL_UP_MOVE(25, MOVE_SMOKESCREEN), + LEVEL_UP_MOVE(33, MOVE_HAZE), + LEVEL_UP_MOVE(41, MOVE_EXPLOSION), + LEVEL_UP_MOVE(45, MOVE_DESTINY_BOND), + LEVEL_UP_MOVE(49, MOVE_MEMENTO), + LEVEL_UP_END +}; + +const u16 gWeezingLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_POISON_GAS), + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_SMOG), + LEVEL_UP_MOVE( 1, MOVE_SELF_DESTRUCT), + LEVEL_UP_MOVE( 9, MOVE_SMOG), + LEVEL_UP_MOVE(17, MOVE_SELF_DESTRUCT), + LEVEL_UP_MOVE(21, MOVE_SLUDGE), + LEVEL_UP_MOVE(25, MOVE_SMOKESCREEN), + LEVEL_UP_MOVE(33, MOVE_HAZE), + LEVEL_UP_MOVE(44, MOVE_EXPLOSION), + LEVEL_UP_MOVE(51, MOVE_DESTINY_BOND), + LEVEL_UP_MOVE(58, MOVE_MEMENTO), + LEVEL_UP_END +}; + +const u16 gRhyhornLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_HORN_ATTACK), + LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), + LEVEL_UP_MOVE(10, MOVE_STOMP), + LEVEL_UP_MOVE(15, MOVE_FURY_ATTACK), + LEVEL_UP_MOVE(24, MOVE_SCARY_FACE), + LEVEL_UP_MOVE(29, MOVE_ROCK_BLAST), + LEVEL_UP_MOVE(38, MOVE_HORN_DRILL), + LEVEL_UP_MOVE(43, MOVE_TAKE_DOWN), + LEVEL_UP_MOVE(52, MOVE_EARTHQUAKE), + LEVEL_UP_MOVE(57, MOVE_MEGAHORN), + LEVEL_UP_END +}; + +const u16 gRhydonLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_HORN_ATTACK), + LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), + LEVEL_UP_MOVE( 1, MOVE_STOMP), + LEVEL_UP_MOVE( 1, MOVE_FURY_ATTACK), + LEVEL_UP_MOVE(10, MOVE_STOMP), + LEVEL_UP_MOVE(15, MOVE_FURY_ATTACK), + LEVEL_UP_MOVE(24, MOVE_SCARY_FACE), + LEVEL_UP_MOVE(29, MOVE_ROCK_BLAST), + LEVEL_UP_MOVE(38, MOVE_HORN_DRILL), + LEVEL_UP_MOVE(46, MOVE_TAKE_DOWN), + LEVEL_UP_MOVE(58, MOVE_EARTHQUAKE), + LEVEL_UP_MOVE(66, MOVE_MEGAHORN), + LEVEL_UP_END +}; + +const u16 gChanseyLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_POUND), + LEVEL_UP_MOVE( 1, MOVE_GROWL), + LEVEL_UP_MOVE( 5, MOVE_TAIL_WHIP), + LEVEL_UP_MOVE( 9, MOVE_REFRESH), + LEVEL_UP_MOVE(13, MOVE_SOFT_BOILED), + LEVEL_UP_MOVE(17, MOVE_DOUBLE_SLAP), + LEVEL_UP_MOVE(23, MOVE_MINIMIZE), + LEVEL_UP_MOVE(29, MOVE_SING), + LEVEL_UP_MOVE(35, MOVE_EGG_BOMB), + LEVEL_UP_MOVE(41, MOVE_DEFENSE_CURL), + LEVEL_UP_MOVE(49, MOVE_LIGHT_SCREEN), + LEVEL_UP_MOVE(57, MOVE_DOUBLE_EDGE), + LEVEL_UP_END +}; + +const u16 gTangelaLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_INGRAIN), + LEVEL_UP_MOVE( 1, MOVE_CONSTRICT), + LEVEL_UP_MOVE( 4, MOVE_SLEEP_POWDER), + LEVEL_UP_MOVE(10, MOVE_ABSORB), + LEVEL_UP_MOVE(13, MOVE_GROWTH), + LEVEL_UP_MOVE(19, MOVE_POISON_POWDER), + LEVEL_UP_MOVE(22, MOVE_VINE_WHIP), + LEVEL_UP_MOVE(28, MOVE_BIND), + LEVEL_UP_MOVE(31, MOVE_MEGA_DRAIN), + LEVEL_UP_MOVE(37, MOVE_STUN_SPORE), + LEVEL_UP_MOVE(40, MOVE_SLAM), + LEVEL_UP_MOVE(46, MOVE_TICKLE), + LEVEL_UP_END +}; + +const u16 gKangaskhanLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_COMET_PUNCH), + LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 7, MOVE_BITE), + LEVEL_UP_MOVE(13, MOVE_TAIL_WHIP), + LEVEL_UP_MOVE(19, MOVE_FAKE_OUT), + LEVEL_UP_MOVE(25, MOVE_MEGA_PUNCH), + LEVEL_UP_MOVE(31, MOVE_RAGE), + LEVEL_UP_MOVE(37, MOVE_ENDURE), + LEVEL_UP_MOVE(43, MOVE_DIZZY_PUNCH), + LEVEL_UP_MOVE(49, MOVE_REVERSAL), + LEVEL_UP_END +}; + +const u16 gHorseaLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_BUBBLE), + LEVEL_UP_MOVE( 8, MOVE_SMOKESCREEN), + LEVEL_UP_MOVE(15, MOVE_LEER), + LEVEL_UP_MOVE(22, MOVE_WATER_GUN), + LEVEL_UP_MOVE(29, MOVE_TWISTER), + LEVEL_UP_MOVE(36, MOVE_AGILITY), + LEVEL_UP_MOVE(43, MOVE_HYDRO_PUMP), + LEVEL_UP_MOVE(50, MOVE_DRAGON_DANCE), + LEVEL_UP_END +}; + +const u16 gSeadraLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_BUBBLE), + LEVEL_UP_MOVE( 1, MOVE_SMOKESCREEN), + LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), + LEVEL_UP_MOVE( 8, MOVE_SMOKESCREEN), + LEVEL_UP_MOVE(15, MOVE_LEER), + LEVEL_UP_MOVE(22, MOVE_WATER_GUN), + LEVEL_UP_MOVE(29, MOVE_TWISTER), + LEVEL_UP_MOVE(40, MOVE_AGILITY), + LEVEL_UP_MOVE(51, MOVE_HYDRO_PUMP), + LEVEL_UP_MOVE(62, MOVE_DRAGON_DANCE), + LEVEL_UP_END +}; + +const u16 gGoldeenLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_PECK), + LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), + LEVEL_UP_MOVE( 1, MOVE_WATER_SPORT), + LEVEL_UP_MOVE(10, MOVE_SUPERSONIC), + LEVEL_UP_MOVE(15, MOVE_HORN_ATTACK), + LEVEL_UP_MOVE(24, MOVE_FLAIL), + LEVEL_UP_MOVE(29, MOVE_FURY_ATTACK), + LEVEL_UP_MOVE(38, MOVE_WATERFALL), + LEVEL_UP_MOVE(43, MOVE_HORN_DRILL), + LEVEL_UP_MOVE(52, MOVE_AGILITY), + LEVEL_UP_END +}; + +const u16 gSeakingLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_PECK), + LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), + LEVEL_UP_MOVE( 1, MOVE_WATER_SPORT), + LEVEL_UP_MOVE( 1, MOVE_SUPERSONIC), + LEVEL_UP_MOVE(10, MOVE_SUPERSONIC), + LEVEL_UP_MOVE(15, MOVE_HORN_ATTACK), + LEVEL_UP_MOVE(24, MOVE_FLAIL), + LEVEL_UP_MOVE(29, MOVE_FURY_ATTACK), + LEVEL_UP_MOVE(41, MOVE_WATERFALL), + LEVEL_UP_MOVE(49, MOVE_HORN_DRILL), + LEVEL_UP_MOVE(61, MOVE_AGILITY), + LEVEL_UP_END +}; + +const u16 gStaryuLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_HARDEN), + LEVEL_UP_MOVE( 6, MOVE_WATER_GUN), + LEVEL_UP_MOVE(10, MOVE_RAPID_SPIN), + LEVEL_UP_MOVE(15, MOVE_RECOVER), + LEVEL_UP_MOVE(19, MOVE_CAMOUFLAGE), + LEVEL_UP_MOVE(24, MOVE_SWIFT), + LEVEL_UP_MOVE(28, MOVE_BUBBLE_BEAM), + LEVEL_UP_MOVE(33, MOVE_MINIMIZE), + LEVEL_UP_MOVE(37, MOVE_LIGHT_SCREEN), + LEVEL_UP_MOVE(42, MOVE_COSMIC_POWER), + LEVEL_UP_MOVE(46, MOVE_HYDRO_PUMP), + LEVEL_UP_END +}; + +const u16 gStarmieLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), + LEVEL_UP_MOVE( 1, MOVE_RAPID_SPIN), + LEVEL_UP_MOVE( 1, MOVE_RECOVER), + LEVEL_UP_MOVE( 1, MOVE_SWIFT), + LEVEL_UP_MOVE(33, MOVE_CONFUSE_RAY), + LEVEL_UP_END +}; + +const u16 gMrmimeLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_BARRIER), + LEVEL_UP_MOVE( 5, MOVE_CONFUSION), + LEVEL_UP_MOVE( 9, MOVE_SUBSTITUTE), + LEVEL_UP_MOVE(13, MOVE_MEDITATE), + LEVEL_UP_MOVE(17, MOVE_DOUBLE_SLAP), + LEVEL_UP_MOVE(21, MOVE_LIGHT_SCREEN), + LEVEL_UP_MOVE(21, MOVE_REFLECT), + LEVEL_UP_MOVE(25, MOVE_ENCORE), + LEVEL_UP_MOVE(29, MOVE_PSYBEAM), + LEVEL_UP_MOVE(33, MOVE_RECYCLE), + LEVEL_UP_MOVE(37, MOVE_TRICK), + LEVEL_UP_MOVE(41, MOVE_ROLE_PLAY), + LEVEL_UP_MOVE(45, MOVE_PSYCHIC), + LEVEL_UP_MOVE(49, MOVE_BATON_PASS), + LEVEL_UP_MOVE(53, MOVE_SAFEGUARD), + LEVEL_UP_END +}; + +const u16 gScytherLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), + LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 6, MOVE_FOCUS_ENERGY), + LEVEL_UP_MOVE(11, MOVE_PURSUIT), + LEVEL_UP_MOVE(16, MOVE_FALSE_SWIPE), + LEVEL_UP_MOVE(21, MOVE_AGILITY), + LEVEL_UP_MOVE(26, MOVE_WING_ATTACK), + LEVEL_UP_MOVE(31, MOVE_SLASH), + LEVEL_UP_MOVE(36, MOVE_SWORDS_DANCE), + LEVEL_UP_MOVE(41, MOVE_DOUBLE_TEAM), + LEVEL_UP_MOVE(46, MOVE_FURY_CUTTER), + LEVEL_UP_END +}; + +const u16 gJynxLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_POUND), + LEVEL_UP_MOVE( 1, MOVE_LICK), + LEVEL_UP_MOVE( 1, MOVE_LOVELY_KISS), + LEVEL_UP_MOVE( 1, MOVE_POWDER_SNOW), + LEVEL_UP_MOVE( 9, MOVE_LOVELY_KISS), + LEVEL_UP_MOVE(13, MOVE_POWDER_SNOW), + LEVEL_UP_MOVE(21, MOVE_DOUBLE_SLAP), + LEVEL_UP_MOVE(25, MOVE_ICE_PUNCH), + LEVEL_UP_MOVE(35, MOVE_MEAN_LOOK), + LEVEL_UP_MOVE(41, MOVE_FAKE_TEARS), + LEVEL_UP_MOVE(51, MOVE_BODY_SLAM), + LEVEL_UP_MOVE(57, MOVE_PERISH_SONG), + LEVEL_UP_MOVE(67, MOVE_BLIZZARD), + LEVEL_UP_END +}; + +const u16 gElectabuzzLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), + LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 1, MOVE_THUNDER_PUNCH), + LEVEL_UP_MOVE( 9, MOVE_THUNDER_PUNCH), + LEVEL_UP_MOVE(17, MOVE_LIGHT_SCREEN), + LEVEL_UP_MOVE(25, MOVE_SWIFT), + LEVEL_UP_MOVE(36, MOVE_SCREECH), + LEVEL_UP_MOVE(47, MOVE_THUNDERBOLT), + LEVEL_UP_MOVE(58, MOVE_THUNDER), + LEVEL_UP_END +}; + +const u16 gMagmarLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_EMBER), + LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 1, MOVE_SMOG), + LEVEL_UP_MOVE( 1, MOVE_FIRE_PUNCH), + LEVEL_UP_MOVE( 7, MOVE_LEER), + LEVEL_UP_MOVE(13, MOVE_SMOG), + LEVEL_UP_MOVE(19, MOVE_FIRE_PUNCH), + LEVEL_UP_MOVE(25, MOVE_SMOKESCREEN), + LEVEL_UP_MOVE(33, MOVE_SUNNY_DAY), + LEVEL_UP_MOVE(41, MOVE_FLAMETHROWER), + LEVEL_UP_MOVE(49, MOVE_CONFUSE_RAY), + LEVEL_UP_MOVE(57, MOVE_FIRE_BLAST), + LEVEL_UP_END +}; + +const u16 gPinsirLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_VICE_GRIP), + LEVEL_UP_MOVE( 1, MOVE_FOCUS_ENERGY), + LEVEL_UP_MOVE( 7, MOVE_BIND), + LEVEL_UP_MOVE(13, MOVE_SEISMIC_TOSS), + LEVEL_UP_MOVE(19, MOVE_HARDEN), + LEVEL_UP_MOVE(25, MOVE_REVENGE), + LEVEL_UP_MOVE(31, MOVE_BRICK_BREAK), + LEVEL_UP_MOVE(37, MOVE_GUILLOTINE), + LEVEL_UP_MOVE(43, MOVE_SUBMISSION), + LEVEL_UP_MOVE(49, MOVE_SWORDS_DANCE), + LEVEL_UP_END +}; + +const u16 gTaurosLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 4, MOVE_TAIL_WHIP), + LEVEL_UP_MOVE( 8, MOVE_RAGE), + LEVEL_UP_MOVE(13, MOVE_HORN_ATTACK), + LEVEL_UP_MOVE(19, MOVE_SCARY_FACE), + LEVEL_UP_MOVE(26, MOVE_PURSUIT), + LEVEL_UP_MOVE(34, MOVE_REST), + LEVEL_UP_MOVE(43, MOVE_THRASH), + LEVEL_UP_MOVE(53, MOVE_TAKE_DOWN), + LEVEL_UP_END +}; + +const u16 gMagikarpLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SPLASH), + LEVEL_UP_MOVE(15, MOVE_TACKLE), + LEVEL_UP_MOVE(30, MOVE_FLAIL), + LEVEL_UP_END +}; + +const u16 gGyaradosLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_THRASH), + LEVEL_UP_MOVE(20, MOVE_BITE), + LEVEL_UP_MOVE(25, MOVE_DRAGON_RAGE), + LEVEL_UP_MOVE(30, MOVE_LEER), + LEVEL_UP_MOVE(35, MOVE_TWISTER), + LEVEL_UP_MOVE(40, MOVE_HYDRO_PUMP), + LEVEL_UP_MOVE(45, MOVE_RAIN_DANCE), + LEVEL_UP_MOVE(50, MOVE_DRAGON_DANCE), + LEVEL_UP_MOVE(55, MOVE_HYPER_BEAM), + LEVEL_UP_END +}; + +const u16 gLaprasLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), + LEVEL_UP_MOVE( 1, MOVE_GROWL), + LEVEL_UP_MOVE( 1, MOVE_SING), + LEVEL_UP_MOVE( 7, MOVE_MIST), + LEVEL_UP_MOVE(13, MOVE_BODY_SLAM), + LEVEL_UP_MOVE(19, MOVE_CONFUSE_RAY), + LEVEL_UP_MOVE(25, MOVE_PERISH_SONG), + LEVEL_UP_MOVE(31, MOVE_ICE_BEAM), + LEVEL_UP_MOVE(37, MOVE_RAIN_DANCE), + LEVEL_UP_MOVE(43, MOVE_SAFEGUARD), + LEVEL_UP_MOVE(49, MOVE_HYDRO_PUMP), + LEVEL_UP_MOVE(55, MOVE_SHEER_COLD), + LEVEL_UP_END +}; + +const u16 gDittoLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TRANSFORM), + LEVEL_UP_END +}; + +const u16 gEeveeLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), + LEVEL_UP_MOVE( 1, MOVE_HELPING_HAND), + LEVEL_UP_MOVE( 8, MOVE_SAND_ATTACK), + LEVEL_UP_MOVE(16, MOVE_GROWL), + LEVEL_UP_MOVE(23, MOVE_QUICK_ATTACK), + LEVEL_UP_MOVE(30, MOVE_BITE), + LEVEL_UP_MOVE(36, MOVE_BATON_PASS), + LEVEL_UP_MOVE(42, MOVE_TAKE_DOWN), + LEVEL_UP_END +}; + +const u16 gVaporeonLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), + LEVEL_UP_MOVE( 1, MOVE_HELPING_HAND), + LEVEL_UP_MOVE( 8, MOVE_SAND_ATTACK), + LEVEL_UP_MOVE(16, MOVE_WATER_GUN), + LEVEL_UP_MOVE(23, MOVE_QUICK_ATTACK), + LEVEL_UP_MOVE(30, MOVE_BITE), + LEVEL_UP_MOVE(36, MOVE_AURORA_BEAM), + LEVEL_UP_MOVE(42, MOVE_HAZE), + LEVEL_UP_MOVE(47, MOVE_ACID_ARMOR), + LEVEL_UP_MOVE(52, MOVE_HYDRO_PUMP), + LEVEL_UP_END +}; + +const u16 gJolteonLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), + LEVEL_UP_MOVE( 1, MOVE_HELPING_HAND), + LEVEL_UP_MOVE( 8, MOVE_SAND_ATTACK), + LEVEL_UP_MOVE(16, MOVE_THUNDER_SHOCK), + LEVEL_UP_MOVE(23, MOVE_QUICK_ATTACK), + LEVEL_UP_MOVE(30, MOVE_DOUBLE_KICK), + LEVEL_UP_MOVE(36, MOVE_PIN_MISSILE), + LEVEL_UP_MOVE(42, MOVE_THUNDER_WAVE), + LEVEL_UP_MOVE(47, MOVE_AGILITY), + LEVEL_UP_MOVE(52, MOVE_THUNDER), + LEVEL_UP_END +}; + +const u16 gFlareonLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), + LEVEL_UP_MOVE( 1, MOVE_HELPING_HAND), + LEVEL_UP_MOVE( 8, MOVE_SAND_ATTACK), + LEVEL_UP_MOVE(16, MOVE_EMBER), + LEVEL_UP_MOVE(23, MOVE_QUICK_ATTACK), + LEVEL_UP_MOVE(30, MOVE_BITE), + LEVEL_UP_MOVE(36, MOVE_FIRE_SPIN), + LEVEL_UP_MOVE(42, MOVE_SMOG), + LEVEL_UP_MOVE(47, MOVE_LEER), + LEVEL_UP_MOVE(52, MOVE_FLAMETHROWER), + LEVEL_UP_END +}; + +const u16 gPorygonLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_CONVERSION_2), + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_CONVERSION), + LEVEL_UP_MOVE( 9, MOVE_AGILITY), + LEVEL_UP_MOVE(12, MOVE_PSYBEAM), + LEVEL_UP_MOVE(20, MOVE_RECOVER), + LEVEL_UP_MOVE(24, MOVE_SHARPEN), + LEVEL_UP_MOVE(32, MOVE_LOCK_ON), + LEVEL_UP_MOVE(36, MOVE_TRI_ATTACK), + LEVEL_UP_MOVE(44, MOVE_RECYCLE), + LEVEL_UP_MOVE(48, MOVE_ZAP_CANNON), + LEVEL_UP_END +}; + +const u16 gOmanyteLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_CONSTRICT), + LEVEL_UP_MOVE( 1, MOVE_WITHDRAW), + LEVEL_UP_MOVE(13, MOVE_BITE), + LEVEL_UP_MOVE(19, MOVE_WATER_GUN), + LEVEL_UP_MOVE(25, MOVE_MUD_SHOT), + LEVEL_UP_MOVE(31, MOVE_LEER), + LEVEL_UP_MOVE(37, MOVE_PROTECT), + LEVEL_UP_MOVE(43, MOVE_TICKLE), + LEVEL_UP_MOVE(49, MOVE_ANCIENT_POWER), + LEVEL_UP_MOVE(55, MOVE_HYDRO_PUMP), + LEVEL_UP_END +}; + +const u16 gOmastarLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_CONSTRICT), + LEVEL_UP_MOVE( 1, MOVE_WITHDRAW), + LEVEL_UP_MOVE( 1, MOVE_BITE), + LEVEL_UP_MOVE(13, MOVE_BITE), + LEVEL_UP_MOVE(19, MOVE_WATER_GUN), + LEVEL_UP_MOVE(25, MOVE_MUD_SHOT), + LEVEL_UP_MOVE(31, MOVE_LEER), + LEVEL_UP_MOVE(37, MOVE_PROTECT), + LEVEL_UP_MOVE(40, MOVE_SPIKE_CANNON), + LEVEL_UP_MOVE(46, MOVE_TICKLE), + LEVEL_UP_MOVE(55, MOVE_ANCIENT_POWER), + LEVEL_UP_MOVE(65, MOVE_HYDRO_PUMP), + LEVEL_UP_END +}; + +const u16 gKabutoLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SCRATCH), + LEVEL_UP_MOVE( 1, MOVE_HARDEN), + LEVEL_UP_MOVE(13, MOVE_ABSORB), + LEVEL_UP_MOVE(19, MOVE_LEER), + LEVEL_UP_MOVE(25, MOVE_MUD_SHOT), + LEVEL_UP_MOVE(31, MOVE_SAND_ATTACK), + LEVEL_UP_MOVE(37, MOVE_ENDURE), + LEVEL_UP_MOVE(43, MOVE_METAL_SOUND), + LEVEL_UP_MOVE(49, MOVE_MEGA_DRAIN), + LEVEL_UP_MOVE(55, MOVE_ANCIENT_POWER), + LEVEL_UP_END +}; + +const u16 gKabutopsLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SCRATCH), + LEVEL_UP_MOVE( 1, MOVE_HARDEN), + LEVEL_UP_MOVE( 1, MOVE_ABSORB), + LEVEL_UP_MOVE(13, MOVE_ABSORB), + LEVEL_UP_MOVE(19, MOVE_LEER), + LEVEL_UP_MOVE(25, MOVE_MUD_SHOT), + LEVEL_UP_MOVE(31, MOVE_SAND_ATTACK), + LEVEL_UP_MOVE(37, MOVE_ENDURE), + LEVEL_UP_MOVE(40, MOVE_SLASH), + LEVEL_UP_MOVE(46, MOVE_METAL_SOUND), + LEVEL_UP_MOVE(55, MOVE_MEGA_DRAIN), + LEVEL_UP_MOVE(65, MOVE_ANCIENT_POWER), + LEVEL_UP_END +}; + +const u16 gAerodactylLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_WING_ATTACK), + LEVEL_UP_MOVE( 8, MOVE_AGILITY), + LEVEL_UP_MOVE(15, MOVE_BITE), + LEVEL_UP_MOVE(22, MOVE_SUPERSONIC), + LEVEL_UP_MOVE(29, MOVE_ANCIENT_POWER), + LEVEL_UP_MOVE(36, MOVE_SCARY_FACE), + LEVEL_UP_MOVE(43, MOVE_TAKE_DOWN), + LEVEL_UP_MOVE(50, MOVE_HYPER_BEAM), + LEVEL_UP_END +}; + +const u16 gSnorlaxLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 6, MOVE_AMNESIA), + LEVEL_UP_MOVE(10, MOVE_DEFENSE_CURL), + LEVEL_UP_MOVE(15, MOVE_BELLY_DRUM), + LEVEL_UP_MOVE(19, MOVE_HEADBUTT), + LEVEL_UP_MOVE(24, MOVE_YAWN), + LEVEL_UP_MOVE(28, MOVE_REST), + LEVEL_UP_MOVE(28, MOVE_SNORE), + LEVEL_UP_MOVE(33, MOVE_BODY_SLAM), + LEVEL_UP_MOVE(37, MOVE_BLOCK), + LEVEL_UP_MOVE(42, MOVE_COVET), + LEVEL_UP_MOVE(46, MOVE_ROLLOUT), + LEVEL_UP_MOVE(51, MOVE_HYPER_BEAM), + LEVEL_UP_END +}; + +const u16 gArticunoLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_GUST), + LEVEL_UP_MOVE( 1, MOVE_POWDER_SNOW), + LEVEL_UP_MOVE(13, MOVE_MIST), + LEVEL_UP_MOVE(25, MOVE_AGILITY), + LEVEL_UP_MOVE(37, MOVE_MIND_READER), + LEVEL_UP_MOVE(49, MOVE_ICE_BEAM), + LEVEL_UP_MOVE(61, MOVE_REFLECT), + LEVEL_UP_MOVE(73, MOVE_BLIZZARD), + LEVEL_UP_MOVE(85, MOVE_SHEER_COLD), + LEVEL_UP_END +}; + +const u16 gZapdosLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_PECK), + LEVEL_UP_MOVE( 1, MOVE_THUNDER_SHOCK), + LEVEL_UP_MOVE(13, MOVE_THUNDER_WAVE), + LEVEL_UP_MOVE(25, MOVE_AGILITY), + LEVEL_UP_MOVE(37, MOVE_DETECT), + LEVEL_UP_MOVE(49, MOVE_DRILL_PECK), + LEVEL_UP_MOVE(61, MOVE_CHARGE), + LEVEL_UP_MOVE(73, MOVE_LIGHT_SCREEN), + LEVEL_UP_MOVE(85, MOVE_THUNDER), + LEVEL_UP_END +}; + +const u16 gMoltresLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_WING_ATTACK), + LEVEL_UP_MOVE( 1, MOVE_EMBER), + LEVEL_UP_MOVE(13, MOVE_FIRE_SPIN), + LEVEL_UP_MOVE(25, MOVE_AGILITY), + LEVEL_UP_MOVE(37, MOVE_ENDURE), + LEVEL_UP_MOVE(49, MOVE_FLAMETHROWER), + LEVEL_UP_MOVE(61, MOVE_SAFEGUARD), + LEVEL_UP_MOVE(73, MOVE_HEAT_WAVE), + LEVEL_UP_MOVE(85, MOVE_SKY_ATTACK), + LEVEL_UP_END +}; + +const u16 gDratiniLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_WRAP), + LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 8, MOVE_THUNDER_WAVE), + LEVEL_UP_MOVE(15, MOVE_TWISTER), + LEVEL_UP_MOVE(22, MOVE_DRAGON_RAGE), + LEVEL_UP_MOVE(29, MOVE_SLAM), + LEVEL_UP_MOVE(36, MOVE_AGILITY), + LEVEL_UP_MOVE(43, MOVE_SAFEGUARD), + LEVEL_UP_MOVE(50, MOVE_OUTRAGE), + LEVEL_UP_MOVE(57, MOVE_HYPER_BEAM), + LEVEL_UP_END +}; + +const u16 gDragonairLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_WRAP), + LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 1, MOVE_THUNDER_WAVE), + LEVEL_UP_MOVE( 1, MOVE_TWISTER), + LEVEL_UP_MOVE( 8, MOVE_THUNDER_WAVE), + LEVEL_UP_MOVE(15, MOVE_TWISTER), + LEVEL_UP_MOVE(22, MOVE_DRAGON_RAGE), + LEVEL_UP_MOVE(29, MOVE_SLAM), + LEVEL_UP_MOVE(38, MOVE_AGILITY), + LEVEL_UP_MOVE(47, MOVE_SAFEGUARD), + LEVEL_UP_MOVE(56, MOVE_OUTRAGE), + LEVEL_UP_MOVE(65, MOVE_HYPER_BEAM), + LEVEL_UP_END +}; + +const u16 gDragoniteLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_WRAP), + LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 1, MOVE_THUNDER_WAVE), + LEVEL_UP_MOVE( 1, MOVE_TWISTER), + LEVEL_UP_MOVE( 8, MOVE_THUNDER_WAVE), + LEVEL_UP_MOVE(15, MOVE_TWISTER), + LEVEL_UP_MOVE(22, MOVE_DRAGON_RAGE), + LEVEL_UP_MOVE(29, MOVE_SLAM), + LEVEL_UP_MOVE(38, MOVE_AGILITY), + LEVEL_UP_MOVE(47, MOVE_SAFEGUARD), + LEVEL_UP_MOVE(55, MOVE_WING_ATTACK), + LEVEL_UP_MOVE(61, MOVE_OUTRAGE), + LEVEL_UP_MOVE(75, MOVE_HYPER_BEAM), + LEVEL_UP_END +}; + +const u16 gMewtwoLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_CONFUSION), + LEVEL_UP_MOVE( 1, MOVE_DISABLE), + LEVEL_UP_MOVE(11, MOVE_BARRIER), + LEVEL_UP_MOVE(22, MOVE_SWIFT), + LEVEL_UP_MOVE(33, MOVE_PSYCH_UP), + LEVEL_UP_MOVE(44, MOVE_FUTURE_SIGHT), + LEVEL_UP_MOVE(55, MOVE_MIST), + LEVEL_UP_MOVE(66, MOVE_PSYCHIC), + LEVEL_UP_MOVE(77, MOVE_AMNESIA), + LEVEL_UP_MOVE(88, MOVE_RECOVER), + LEVEL_UP_MOVE(99, MOVE_SAFEGUARD), + LEVEL_UP_END +}; + +const u16 gMewLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_POUND), + LEVEL_UP_MOVE(10, MOVE_TRANSFORM), + LEVEL_UP_MOVE(20, MOVE_MEGA_PUNCH), + LEVEL_UP_MOVE(30, MOVE_METRONOME), + LEVEL_UP_MOVE(40, MOVE_PSYCHIC), + LEVEL_UP_MOVE(50, MOVE_ANCIENT_POWER), + LEVEL_UP_END +}; + +const u16 gChikoritaLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_GROWL), + LEVEL_UP_MOVE( 8, MOVE_RAZOR_LEAF), + LEVEL_UP_MOVE(12, MOVE_REFLECT), + LEVEL_UP_MOVE(15, MOVE_POISON_POWDER), + LEVEL_UP_MOVE(22, MOVE_SYNTHESIS), + LEVEL_UP_MOVE(29, MOVE_BODY_SLAM), + LEVEL_UP_MOVE(36, MOVE_LIGHT_SCREEN), + LEVEL_UP_MOVE(43, MOVE_SAFEGUARD), + LEVEL_UP_MOVE(50, MOVE_SOLAR_BEAM), + LEVEL_UP_END +}; + +const u16 gBayleefLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_GROWL), + LEVEL_UP_MOVE( 1, MOVE_RAZOR_LEAF), + LEVEL_UP_MOVE( 1, MOVE_REFLECT), + LEVEL_UP_MOVE( 8, MOVE_RAZOR_LEAF), + LEVEL_UP_MOVE(12, MOVE_REFLECT), + LEVEL_UP_MOVE(15, MOVE_POISON_POWDER), + LEVEL_UP_MOVE(23, MOVE_SYNTHESIS), + LEVEL_UP_MOVE(31, MOVE_BODY_SLAM), + LEVEL_UP_MOVE(39, MOVE_LIGHT_SCREEN), + LEVEL_UP_MOVE(47, MOVE_SAFEGUARD), + LEVEL_UP_MOVE(55, MOVE_SOLAR_BEAM), + LEVEL_UP_END +}; + +const u16 gMeganiumLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_GROWL), + LEVEL_UP_MOVE( 1, MOVE_RAZOR_LEAF), + LEVEL_UP_MOVE( 1, MOVE_REFLECT), + LEVEL_UP_MOVE( 8, MOVE_RAZOR_LEAF), + LEVEL_UP_MOVE(12, MOVE_REFLECT), + LEVEL_UP_MOVE(15, MOVE_POISON_POWDER), + LEVEL_UP_MOVE(23, MOVE_SYNTHESIS), + LEVEL_UP_MOVE(31, MOVE_BODY_SLAM), + LEVEL_UP_MOVE(41, MOVE_LIGHT_SCREEN), + LEVEL_UP_MOVE(51, MOVE_SAFEGUARD), + LEVEL_UP_MOVE(61, MOVE_SOLAR_BEAM), + LEVEL_UP_END +}; + +const u16 gCyndaquilLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 6, MOVE_SMOKESCREEN), + LEVEL_UP_MOVE(12, MOVE_EMBER), + LEVEL_UP_MOVE(19, MOVE_QUICK_ATTACK), + LEVEL_UP_MOVE(27, MOVE_FLAME_WHEEL), + LEVEL_UP_MOVE(36, MOVE_SWIFT), + LEVEL_UP_MOVE(46, MOVE_FLAMETHROWER), + LEVEL_UP_END +}; + +const u16 gQuilavaLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 1, MOVE_SMOKESCREEN), + LEVEL_UP_MOVE( 6, MOVE_SMOKESCREEN), + LEVEL_UP_MOVE(12, MOVE_EMBER), + LEVEL_UP_MOVE(21, MOVE_QUICK_ATTACK), + LEVEL_UP_MOVE(31, MOVE_FLAME_WHEEL), + LEVEL_UP_MOVE(42, MOVE_SWIFT), + LEVEL_UP_MOVE(54, MOVE_FLAMETHROWER), + LEVEL_UP_END +}; + +const u16 gTyphlosionLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 1, MOVE_SMOKESCREEN), + LEVEL_UP_MOVE( 1, MOVE_EMBER), + LEVEL_UP_MOVE( 6, MOVE_SMOKESCREEN), + LEVEL_UP_MOVE(12, MOVE_EMBER), + LEVEL_UP_MOVE(21, MOVE_QUICK_ATTACK), + LEVEL_UP_MOVE(31, MOVE_FLAME_WHEEL), + LEVEL_UP_MOVE(45, MOVE_SWIFT), + LEVEL_UP_MOVE(60, MOVE_FLAMETHROWER), + LEVEL_UP_END +}; + +const u16 gTotodileLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SCRATCH), + LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 7, MOVE_RAGE), + LEVEL_UP_MOVE(13, MOVE_WATER_GUN), + LEVEL_UP_MOVE(20, MOVE_BITE), + LEVEL_UP_MOVE(27, MOVE_SCARY_FACE), + LEVEL_UP_MOVE(35, MOVE_SLASH), + LEVEL_UP_MOVE(43, MOVE_SCREECH), + LEVEL_UP_MOVE(52, MOVE_HYDRO_PUMP), + LEVEL_UP_END +}; + +const u16 gCroconawLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SCRATCH), + LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 1, MOVE_RAGE), + LEVEL_UP_MOVE( 7, MOVE_RAGE), + LEVEL_UP_MOVE(13, MOVE_WATER_GUN), + LEVEL_UP_MOVE(21, MOVE_BITE), + LEVEL_UP_MOVE(28, MOVE_SCARY_FACE), + LEVEL_UP_MOVE(37, MOVE_SLASH), + LEVEL_UP_MOVE(45, MOVE_SCREECH), + LEVEL_UP_MOVE(55, MOVE_HYDRO_PUMP), + LEVEL_UP_END +}; + +const u16 gFeraligatrLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SCRATCH), + LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 1, MOVE_RAGE), + LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), + LEVEL_UP_MOVE( 7, MOVE_RAGE), + LEVEL_UP_MOVE(13, MOVE_WATER_GUN), + LEVEL_UP_MOVE(21, MOVE_BITE), + LEVEL_UP_MOVE(28, MOVE_SCARY_FACE), + LEVEL_UP_MOVE(38, MOVE_SLASH), + LEVEL_UP_MOVE(47, MOVE_SCREECH), + LEVEL_UP_MOVE(58, MOVE_HYDRO_PUMP), + LEVEL_UP_END +}; + +const u16 gSentretLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SCRATCH), + LEVEL_UP_MOVE( 4, MOVE_DEFENSE_CURL), + LEVEL_UP_MOVE( 7, MOVE_QUICK_ATTACK), + LEVEL_UP_MOVE(12, MOVE_FURY_SWIPES), + LEVEL_UP_MOVE(17, MOVE_HELPING_HAND), + LEVEL_UP_MOVE(24, MOVE_SLAM), + LEVEL_UP_MOVE(31, MOVE_FOLLOW_ME), + LEVEL_UP_MOVE(40, MOVE_REST), + LEVEL_UP_MOVE(49, MOVE_AMNESIA), + LEVEL_UP_END +}; + +const u16 gFurretLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SCRATCH), + LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL), + LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), + LEVEL_UP_MOVE( 4, MOVE_DEFENSE_CURL), + LEVEL_UP_MOVE( 7, MOVE_QUICK_ATTACK), + LEVEL_UP_MOVE(12, MOVE_FURY_SWIPES), + LEVEL_UP_MOVE(19, MOVE_HELPING_HAND), + LEVEL_UP_MOVE(28, MOVE_SLAM), + LEVEL_UP_MOVE(37, MOVE_FOLLOW_ME), + LEVEL_UP_MOVE(48, MOVE_REST), + LEVEL_UP_MOVE(59, MOVE_AMNESIA), + LEVEL_UP_END +}; + +const u16 gHoothootLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_GROWL), + LEVEL_UP_MOVE( 6, MOVE_FORESIGHT), + LEVEL_UP_MOVE(11, MOVE_PECK), + LEVEL_UP_MOVE(16, MOVE_HYPNOSIS), + LEVEL_UP_MOVE(22, MOVE_REFLECT), + LEVEL_UP_MOVE(28, MOVE_TAKE_DOWN), + LEVEL_UP_MOVE(34, MOVE_CONFUSION), + LEVEL_UP_MOVE(48, MOVE_DREAM_EATER), + LEVEL_UP_END +}; + +const u16 gNoctowlLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_GROWL), + LEVEL_UP_MOVE( 1, MOVE_FORESIGHT), + LEVEL_UP_MOVE( 1, MOVE_PECK), + LEVEL_UP_MOVE( 6, MOVE_FORESIGHT), + LEVEL_UP_MOVE(11, MOVE_PECK), + LEVEL_UP_MOVE(16, MOVE_HYPNOSIS), + LEVEL_UP_MOVE(25, MOVE_REFLECT), + LEVEL_UP_MOVE(33, MOVE_TAKE_DOWN), + LEVEL_UP_MOVE(41, MOVE_CONFUSION), + LEVEL_UP_MOVE(57, MOVE_DREAM_EATER), + LEVEL_UP_END +}; + +const u16 gLedybaLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 8, MOVE_SUPERSONIC), + LEVEL_UP_MOVE(15, MOVE_COMET_PUNCH), + LEVEL_UP_MOVE(22, MOVE_LIGHT_SCREEN), + LEVEL_UP_MOVE(22, MOVE_REFLECT), + LEVEL_UP_MOVE(22, MOVE_SAFEGUARD), + LEVEL_UP_MOVE(29, MOVE_BATON_PASS), + LEVEL_UP_MOVE(36, MOVE_SWIFT), + LEVEL_UP_MOVE(43, MOVE_AGILITY), + LEVEL_UP_MOVE(50, MOVE_DOUBLE_EDGE), + LEVEL_UP_END +}; + +const u16 gLedianLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_SUPERSONIC), + LEVEL_UP_MOVE( 8, MOVE_SUPERSONIC), + LEVEL_UP_MOVE(15, MOVE_COMET_PUNCH), + LEVEL_UP_MOVE(24, MOVE_LIGHT_SCREEN), + LEVEL_UP_MOVE(24, MOVE_REFLECT), + LEVEL_UP_MOVE(24, MOVE_SAFEGUARD), + LEVEL_UP_MOVE(33, MOVE_BATON_PASS), + LEVEL_UP_MOVE(42, MOVE_SWIFT), + LEVEL_UP_MOVE(51, MOVE_AGILITY), + LEVEL_UP_MOVE(60, MOVE_DOUBLE_EDGE), + LEVEL_UP_END +}; + +const u16 gSpinarakLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_POISON_STING), + LEVEL_UP_MOVE( 1, MOVE_STRING_SHOT), + LEVEL_UP_MOVE( 6, MOVE_SCARY_FACE), + LEVEL_UP_MOVE(11, MOVE_CONSTRICT), + LEVEL_UP_MOVE(17, MOVE_NIGHT_SHADE), + LEVEL_UP_MOVE(23, MOVE_LEECH_LIFE), + LEVEL_UP_MOVE(30, MOVE_FURY_SWIPES), + LEVEL_UP_MOVE(37, MOVE_SPIDER_WEB), + LEVEL_UP_MOVE(45, MOVE_AGILITY), + LEVEL_UP_MOVE(53, MOVE_PSYCHIC), + LEVEL_UP_END +}; + +const u16 gAriadosLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_POISON_STING), + LEVEL_UP_MOVE( 1, MOVE_STRING_SHOT), + LEVEL_UP_MOVE( 1, MOVE_SCARY_FACE), + LEVEL_UP_MOVE( 1, MOVE_CONSTRICT), + LEVEL_UP_MOVE( 6, MOVE_SCARY_FACE), + LEVEL_UP_MOVE(11, MOVE_CONSTRICT), + LEVEL_UP_MOVE(17, MOVE_NIGHT_SHADE), + LEVEL_UP_MOVE(25, MOVE_LEECH_LIFE), + LEVEL_UP_MOVE(34, MOVE_FURY_SWIPES), + LEVEL_UP_MOVE(43, MOVE_SPIDER_WEB), + LEVEL_UP_MOVE(53, MOVE_AGILITY), + LEVEL_UP_MOVE(63, MOVE_PSYCHIC), + LEVEL_UP_END +}; + +const u16 gCrobatLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SCREECH), + LEVEL_UP_MOVE( 1, MOVE_LEECH_LIFE), + LEVEL_UP_MOVE( 1, MOVE_SUPERSONIC), + LEVEL_UP_MOVE( 1, MOVE_ASTONISH), + LEVEL_UP_MOVE( 6, MOVE_SUPERSONIC), + LEVEL_UP_MOVE(11, MOVE_ASTONISH), + LEVEL_UP_MOVE(16, MOVE_BITE), + LEVEL_UP_MOVE(21, MOVE_WING_ATTACK), + LEVEL_UP_MOVE(28, MOVE_CONFUSE_RAY), + LEVEL_UP_MOVE(35, MOVE_AIR_CUTTER), + LEVEL_UP_MOVE(42, MOVE_MEAN_LOOK), + LEVEL_UP_MOVE(49, MOVE_POISON_FANG), + LEVEL_UP_MOVE(56, MOVE_HAZE), + LEVEL_UP_END +}; + +const u16 gChinchouLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_BUBBLE), + LEVEL_UP_MOVE( 1, MOVE_THUNDER_WAVE), + LEVEL_UP_MOVE( 5, MOVE_SUPERSONIC), + LEVEL_UP_MOVE(13, MOVE_FLAIL), + LEVEL_UP_MOVE(17, MOVE_WATER_GUN), + LEVEL_UP_MOVE(25, MOVE_SPARK), + LEVEL_UP_MOVE(29, MOVE_CONFUSE_RAY), + LEVEL_UP_MOVE(37, MOVE_TAKE_DOWN), + LEVEL_UP_MOVE(41, MOVE_HYDRO_PUMP), + LEVEL_UP_MOVE(49, MOVE_CHARGE), + LEVEL_UP_END +}; + +const u16 gLanturnLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_BUBBLE), + LEVEL_UP_MOVE( 1, MOVE_THUNDER_WAVE), + LEVEL_UP_MOVE( 1, MOVE_SUPERSONIC), + LEVEL_UP_MOVE( 5, MOVE_SUPERSONIC), + LEVEL_UP_MOVE(13, MOVE_FLAIL), + LEVEL_UP_MOVE(17, MOVE_WATER_GUN), + LEVEL_UP_MOVE(25, MOVE_SPARK), + LEVEL_UP_MOVE(32, MOVE_CONFUSE_RAY), + LEVEL_UP_MOVE(43, MOVE_TAKE_DOWN), + LEVEL_UP_MOVE(50, MOVE_HYDRO_PUMP), + LEVEL_UP_MOVE(61, MOVE_CHARGE), + LEVEL_UP_END +}; + +const u16 gPichuLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_THUNDER_SHOCK), + LEVEL_UP_MOVE( 1, MOVE_CHARM), + LEVEL_UP_MOVE( 6, MOVE_TAIL_WHIP), + LEVEL_UP_MOVE( 8, MOVE_THUNDER_WAVE), + LEVEL_UP_MOVE(11, MOVE_SWEET_KISS), + LEVEL_UP_END +}; + +const u16 gCleffaLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_POUND), + LEVEL_UP_MOVE( 1, MOVE_CHARM), + LEVEL_UP_MOVE( 4, MOVE_ENCORE), + LEVEL_UP_MOVE( 8, MOVE_SING), + LEVEL_UP_MOVE(13, MOVE_SWEET_KISS), + LEVEL_UP_END +}; + +const u16 gIgglybuffLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SING), + LEVEL_UP_MOVE( 1, MOVE_CHARM), + LEVEL_UP_MOVE( 4, MOVE_DEFENSE_CURL), + LEVEL_UP_MOVE( 9, MOVE_POUND), + LEVEL_UP_MOVE(14, MOVE_SWEET_KISS), + LEVEL_UP_END +}; + +const u16 gTogepiLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_GROWL), + LEVEL_UP_MOVE( 1, MOVE_CHARM), + LEVEL_UP_MOVE( 6, MOVE_METRONOME), + LEVEL_UP_MOVE(11, MOVE_SWEET_KISS), + LEVEL_UP_MOVE(16, MOVE_YAWN), + LEVEL_UP_MOVE(21, MOVE_ENCORE), + LEVEL_UP_MOVE(26, MOVE_FOLLOW_ME), + LEVEL_UP_MOVE(31, MOVE_WISH), + LEVEL_UP_MOVE(36, MOVE_SAFEGUARD), + LEVEL_UP_MOVE(41, MOVE_DOUBLE_EDGE), + LEVEL_UP_END +}; + +const u16 gTogeticLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_GROWL), + LEVEL_UP_MOVE( 1, MOVE_CHARM), + LEVEL_UP_MOVE( 6, MOVE_METRONOME), + LEVEL_UP_MOVE(11, MOVE_SWEET_KISS), + LEVEL_UP_MOVE(16, MOVE_YAWN), + LEVEL_UP_MOVE(21, MOVE_ENCORE), + LEVEL_UP_MOVE(26, MOVE_FOLLOW_ME), + LEVEL_UP_MOVE(31, MOVE_WISH), + LEVEL_UP_MOVE(36, MOVE_SAFEGUARD), + LEVEL_UP_MOVE(41, MOVE_DOUBLE_EDGE), + LEVEL_UP_END +}; + +const u16 gNatuLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_PECK), + LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE(10, MOVE_NIGHT_SHADE), + LEVEL_UP_MOVE(20, MOVE_TELEPORT), + LEVEL_UP_MOVE(30, MOVE_WISH), + LEVEL_UP_MOVE(30, MOVE_FUTURE_SIGHT), + LEVEL_UP_MOVE(40, MOVE_CONFUSE_RAY), + LEVEL_UP_MOVE(50, MOVE_PSYCHIC), + LEVEL_UP_END +}; + +const u16 gXatuLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_PECK), + LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE(10, MOVE_NIGHT_SHADE), + LEVEL_UP_MOVE(20, MOVE_TELEPORT), + LEVEL_UP_MOVE(35, MOVE_WISH), + LEVEL_UP_MOVE(35, MOVE_FUTURE_SIGHT), + LEVEL_UP_MOVE(50, MOVE_CONFUSE_RAY), + LEVEL_UP_MOVE(65, MOVE_PSYCHIC), + LEVEL_UP_END +}; + +const u16 gMareepLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_GROWL), + LEVEL_UP_MOVE( 9, MOVE_THUNDER_SHOCK), + LEVEL_UP_MOVE(16, MOVE_THUNDER_WAVE), + LEVEL_UP_MOVE(23, MOVE_COTTON_SPORE), + LEVEL_UP_MOVE(30, MOVE_LIGHT_SCREEN), + LEVEL_UP_MOVE(37, MOVE_THUNDER), + LEVEL_UP_END +}; + +const u16 gFlaaffyLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_GROWL), + LEVEL_UP_MOVE( 1, MOVE_THUNDER_SHOCK), + LEVEL_UP_MOVE( 9, MOVE_THUNDER_SHOCK), + LEVEL_UP_MOVE(18, MOVE_THUNDER_WAVE), + LEVEL_UP_MOVE(27, MOVE_COTTON_SPORE), + LEVEL_UP_MOVE(36, MOVE_LIGHT_SCREEN), + LEVEL_UP_MOVE(45, MOVE_THUNDER), + LEVEL_UP_END +}; + +const u16 gAmpharosLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_GROWL), + LEVEL_UP_MOVE( 1, MOVE_THUNDER_SHOCK), + LEVEL_UP_MOVE( 1, MOVE_THUNDER_WAVE), + LEVEL_UP_MOVE( 9, MOVE_THUNDER_SHOCK), + LEVEL_UP_MOVE(18, MOVE_THUNDER_WAVE), + LEVEL_UP_MOVE(27, MOVE_COTTON_SPORE), + LEVEL_UP_MOVE(30, MOVE_THUNDER_PUNCH), + LEVEL_UP_MOVE(42, MOVE_LIGHT_SCREEN), + LEVEL_UP_MOVE(57, MOVE_THUNDER), + LEVEL_UP_END +}; + +const u16 gBellossomLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_ABSORB), + LEVEL_UP_MOVE( 1, MOVE_SWEET_SCENT), + LEVEL_UP_MOVE( 1, MOVE_STUN_SPORE), + LEVEL_UP_MOVE( 1, MOVE_MAGICAL_LEAF), + LEVEL_UP_MOVE(44, MOVE_PETAL_DANCE), + LEVEL_UP_MOVE(55, MOVE_SOLAR_BEAM), + LEVEL_UP_END +}; + +const u16 gMarillLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 3, MOVE_DEFENSE_CURL), + LEVEL_UP_MOVE( 6, MOVE_TAIL_WHIP), + LEVEL_UP_MOVE(10, MOVE_WATER_GUN), + LEVEL_UP_MOVE(15, MOVE_ROLLOUT), + LEVEL_UP_MOVE(21, MOVE_BUBBLE_BEAM), + LEVEL_UP_MOVE(28, MOVE_DOUBLE_EDGE), + LEVEL_UP_MOVE(36, MOVE_RAIN_DANCE), + LEVEL_UP_MOVE(45, MOVE_HYDRO_PUMP), + LEVEL_UP_END +}; + +const u16 gAzumarillLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL), + LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), + LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), + LEVEL_UP_MOVE( 3, MOVE_DEFENSE_CURL), + LEVEL_UP_MOVE( 6, MOVE_TAIL_WHIP), + LEVEL_UP_MOVE(10, MOVE_WATER_GUN), + LEVEL_UP_MOVE(15, MOVE_ROLLOUT), + LEVEL_UP_MOVE(24, MOVE_BUBBLE_BEAM), + LEVEL_UP_MOVE(34, MOVE_DOUBLE_EDGE), + LEVEL_UP_MOVE(45, MOVE_RAIN_DANCE), + LEVEL_UP_MOVE(57, MOVE_HYDRO_PUMP), + LEVEL_UP_END +}; + +const u16 gSudowoodoLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_ROCK_THROW), + LEVEL_UP_MOVE( 1, MOVE_MIMIC), + LEVEL_UP_MOVE( 9, MOVE_FLAIL), + LEVEL_UP_MOVE(17, MOVE_LOW_KICK), + LEVEL_UP_MOVE(25, MOVE_ROCK_SLIDE), + LEVEL_UP_MOVE(33, MOVE_BLOCK), + LEVEL_UP_MOVE(41, MOVE_FAINT_ATTACK), + LEVEL_UP_MOVE(49, MOVE_SLAM), + LEVEL_UP_MOVE(57, MOVE_DOUBLE_EDGE), + LEVEL_UP_END +}; + +const u16 gPolitoedLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), + LEVEL_UP_MOVE( 1, MOVE_HYPNOSIS), + LEVEL_UP_MOVE( 1, MOVE_DOUBLE_SLAP), + LEVEL_UP_MOVE( 1, MOVE_PERISH_SONG), + LEVEL_UP_MOVE(35, MOVE_PERISH_SONG), + LEVEL_UP_MOVE(51, MOVE_SWAGGER), + LEVEL_UP_END +}; + +const u16 gHoppipLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SPLASH), + LEVEL_UP_MOVE( 5, MOVE_SYNTHESIS), + LEVEL_UP_MOVE( 5, MOVE_TAIL_WHIP), + LEVEL_UP_MOVE(10, MOVE_TACKLE), + LEVEL_UP_MOVE(13, MOVE_POISON_POWDER), + LEVEL_UP_MOVE(15, MOVE_STUN_SPORE), + LEVEL_UP_MOVE(17, MOVE_SLEEP_POWDER), + LEVEL_UP_MOVE(20, MOVE_LEECH_SEED), + LEVEL_UP_MOVE(25, MOVE_COTTON_SPORE), + LEVEL_UP_MOVE(30, MOVE_MEGA_DRAIN), + LEVEL_UP_END +}; + +const u16 gSkiploomLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SPLASH), + LEVEL_UP_MOVE( 1, MOVE_SYNTHESIS), + LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 5, MOVE_SYNTHESIS), + LEVEL_UP_MOVE( 5, MOVE_TAIL_WHIP), + LEVEL_UP_MOVE(10, MOVE_TACKLE), + LEVEL_UP_MOVE(13, MOVE_POISON_POWDER), + LEVEL_UP_MOVE(15, MOVE_STUN_SPORE), + LEVEL_UP_MOVE(17, MOVE_SLEEP_POWDER), + LEVEL_UP_MOVE(22, MOVE_LEECH_SEED), + LEVEL_UP_MOVE(29, MOVE_COTTON_SPORE), + LEVEL_UP_MOVE(36, MOVE_MEGA_DRAIN), + LEVEL_UP_END +}; + +const u16 gJumpluffLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SPLASH), + LEVEL_UP_MOVE( 1, MOVE_SYNTHESIS), + LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 5, MOVE_SYNTHESIS), + LEVEL_UP_MOVE( 5, MOVE_TAIL_WHIP), + LEVEL_UP_MOVE(10, MOVE_TACKLE), + LEVEL_UP_MOVE(13, MOVE_POISON_POWDER), + LEVEL_UP_MOVE(15, MOVE_STUN_SPORE), + LEVEL_UP_MOVE(17, MOVE_SLEEP_POWDER), + LEVEL_UP_MOVE(22, MOVE_LEECH_SEED), + LEVEL_UP_MOVE(33, MOVE_COTTON_SPORE), + LEVEL_UP_MOVE(44, MOVE_MEGA_DRAIN), + LEVEL_UP_END +}; + +const u16 gAipomLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SCRATCH), + LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), + LEVEL_UP_MOVE( 6, MOVE_SAND_ATTACK), + LEVEL_UP_MOVE(13, MOVE_ASTONISH), + LEVEL_UP_MOVE(18, MOVE_BATON_PASS), + LEVEL_UP_MOVE(25, MOVE_TICKLE), + LEVEL_UP_MOVE(31, MOVE_FURY_SWIPES), + LEVEL_UP_MOVE(38, MOVE_SWIFT), + LEVEL_UP_MOVE(43, MOVE_SCREECH), + LEVEL_UP_MOVE(50, MOVE_AGILITY), + LEVEL_UP_END +}; + +const u16 gSunkernLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_ABSORB), + LEVEL_UP_MOVE( 6, MOVE_GROWTH), + LEVEL_UP_MOVE(13, MOVE_MEGA_DRAIN), + LEVEL_UP_MOVE(18, MOVE_INGRAIN), + LEVEL_UP_MOVE(25, MOVE_ENDEAVOR), + LEVEL_UP_MOVE(30, MOVE_SUNNY_DAY), + LEVEL_UP_MOVE(37, MOVE_SYNTHESIS), + LEVEL_UP_MOVE(42, MOVE_GIGA_DRAIN), + LEVEL_UP_END +}; + +const u16 gSunfloraLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_ABSORB), + LEVEL_UP_MOVE( 1, MOVE_POUND), + LEVEL_UP_MOVE( 6, MOVE_GROWTH), + LEVEL_UP_MOVE(13, MOVE_RAZOR_LEAF), + LEVEL_UP_MOVE(18, MOVE_INGRAIN), + LEVEL_UP_MOVE(25, MOVE_BULLET_SEED), + LEVEL_UP_MOVE(30, MOVE_SUNNY_DAY), + LEVEL_UP_MOVE(37, MOVE_PETAL_DANCE), + LEVEL_UP_MOVE(42, MOVE_SOLAR_BEAM), + LEVEL_UP_END +}; + +const u16 gYanmaLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_FORESIGHT), + LEVEL_UP_MOVE( 7, MOVE_QUICK_ATTACK), + LEVEL_UP_MOVE(13, MOVE_DOUBLE_TEAM), + LEVEL_UP_MOVE(19, MOVE_SONIC_BOOM), + LEVEL_UP_MOVE(25, MOVE_DETECT), + LEVEL_UP_MOVE(31, MOVE_SUPERSONIC), + LEVEL_UP_MOVE(37, MOVE_UPROAR), + LEVEL_UP_MOVE(43, MOVE_WING_ATTACK), + LEVEL_UP_MOVE(49, MOVE_SCREECH), + LEVEL_UP_END +}; + +const u16 gWooperLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), + LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), + LEVEL_UP_MOVE(11, MOVE_SLAM), + LEVEL_UP_MOVE(16, MOVE_MUD_SHOT), + LEVEL_UP_MOVE(21, MOVE_AMNESIA), + LEVEL_UP_MOVE(31, MOVE_YAWN), + LEVEL_UP_MOVE(36, MOVE_EARTHQUAKE), + LEVEL_UP_MOVE(41, MOVE_RAIN_DANCE), + LEVEL_UP_MOVE(51, MOVE_MIST), + LEVEL_UP_MOVE(51, MOVE_HAZE), + LEVEL_UP_END +}; + +const u16 gQuagsireLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), + LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), + LEVEL_UP_MOVE(11, MOVE_SLAM), + LEVEL_UP_MOVE(16, MOVE_MUD_SHOT), + LEVEL_UP_MOVE(23, MOVE_AMNESIA), + LEVEL_UP_MOVE(35, MOVE_YAWN), + LEVEL_UP_MOVE(42, MOVE_EARTHQUAKE), + LEVEL_UP_MOVE(49, MOVE_RAIN_DANCE), + LEVEL_UP_MOVE(61, MOVE_MIST), + LEVEL_UP_MOVE(61, MOVE_HAZE), + LEVEL_UP_END +}; + +const u16 gEspeonLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), + LEVEL_UP_MOVE( 1, MOVE_HELPING_HAND), + LEVEL_UP_MOVE( 8, MOVE_SAND_ATTACK), + LEVEL_UP_MOVE(16, MOVE_CONFUSION), + LEVEL_UP_MOVE(23, MOVE_QUICK_ATTACK), + LEVEL_UP_MOVE(30, MOVE_SWIFT), + LEVEL_UP_MOVE(36, MOVE_PSYBEAM), + LEVEL_UP_MOVE(42, MOVE_PSYCH_UP), + LEVEL_UP_MOVE(47, MOVE_PSYCHIC), + LEVEL_UP_MOVE(52, MOVE_MORNING_SUN), + LEVEL_UP_END +}; + +const u16 gUmbreonLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), + LEVEL_UP_MOVE( 1, MOVE_HELPING_HAND), + LEVEL_UP_MOVE( 8, MOVE_SAND_ATTACK), + LEVEL_UP_MOVE(16, MOVE_PURSUIT), + LEVEL_UP_MOVE(23, MOVE_QUICK_ATTACK), + LEVEL_UP_MOVE(30, MOVE_CONFUSE_RAY), + LEVEL_UP_MOVE(36, MOVE_FAINT_ATTACK), + LEVEL_UP_MOVE(42, MOVE_MEAN_LOOK), + LEVEL_UP_MOVE(47, MOVE_SCREECH), + LEVEL_UP_MOVE(52, MOVE_MOONLIGHT), + LEVEL_UP_END +}; + +const u16 gMurkrowLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_PECK), + LEVEL_UP_MOVE( 9, MOVE_ASTONISH), + LEVEL_UP_MOVE(14, MOVE_PURSUIT), + LEVEL_UP_MOVE(22, MOVE_HAZE), + LEVEL_UP_MOVE(27, MOVE_NIGHT_SHADE), + LEVEL_UP_MOVE(35, MOVE_FAINT_ATTACK), + LEVEL_UP_MOVE(40, MOVE_TAUNT), + LEVEL_UP_MOVE(48, MOVE_MEAN_LOOK), + LEVEL_UP_END +}; + +const u16 gSlowkingLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_CURSE), + LEVEL_UP_MOVE( 1, MOVE_YAWN), + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 6, MOVE_GROWL), + LEVEL_UP_MOVE(15, MOVE_WATER_GUN), + LEVEL_UP_MOVE(20, MOVE_CONFUSION), + LEVEL_UP_MOVE(29, MOVE_DISABLE), + LEVEL_UP_MOVE(34, MOVE_HEADBUTT), + LEVEL_UP_MOVE(43, MOVE_SWAGGER), + LEVEL_UP_MOVE(48, MOVE_PSYCHIC), + LEVEL_UP_END +}; + +const u16 gMisdreavusLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_GROWL), + LEVEL_UP_MOVE( 1, MOVE_PSYWAVE), + LEVEL_UP_MOVE( 6, MOVE_SPITE), + LEVEL_UP_MOVE(11, MOVE_ASTONISH), + LEVEL_UP_MOVE(17, MOVE_CONFUSE_RAY), + LEVEL_UP_MOVE(23, MOVE_MEAN_LOOK), + LEVEL_UP_MOVE(30, MOVE_PSYBEAM), + LEVEL_UP_MOVE(37, MOVE_PAIN_SPLIT), + LEVEL_UP_MOVE(45, MOVE_PERISH_SONG), + LEVEL_UP_MOVE(53, MOVE_GRUDGE), + LEVEL_UP_END +}; + +const u16 gUnownLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_HIDDEN_POWER), + LEVEL_UP_END +}; + +const u16 gWobbuffetLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_COUNTER), + LEVEL_UP_MOVE( 1, MOVE_MIRROR_COAT), + LEVEL_UP_MOVE( 1, MOVE_SAFEGUARD), + LEVEL_UP_MOVE( 1, MOVE_DESTINY_BOND), + LEVEL_UP_END +}; + +const u16 gGirafarigLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_GROWL), + LEVEL_UP_MOVE( 7, MOVE_ASTONISH), + LEVEL_UP_MOVE(13, MOVE_CONFUSION), + LEVEL_UP_MOVE(19, MOVE_STOMP), + LEVEL_UP_MOVE(25, MOVE_ODOR_SLEUTH), + LEVEL_UP_MOVE(31, MOVE_AGILITY), + LEVEL_UP_MOVE(37, MOVE_BATON_PASS), + LEVEL_UP_MOVE(43, MOVE_PSYBEAM), + LEVEL_UP_MOVE(49, MOVE_CRUNCH), + LEVEL_UP_END +}; + +const u16 gPinecoLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_PROTECT), + LEVEL_UP_MOVE( 8, MOVE_SELF_DESTRUCT), + LEVEL_UP_MOVE(15, MOVE_TAKE_DOWN), + LEVEL_UP_MOVE(22, MOVE_RAPID_SPIN), + LEVEL_UP_MOVE(29, MOVE_BIDE), + LEVEL_UP_MOVE(36, MOVE_EXPLOSION), + LEVEL_UP_MOVE(43, MOVE_SPIKES), + LEVEL_UP_MOVE(50, MOVE_DOUBLE_EDGE), + LEVEL_UP_END +}; + +const u16 gForretressLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_PROTECT), + LEVEL_UP_MOVE( 1, MOVE_SELF_DESTRUCT), + LEVEL_UP_MOVE( 8, MOVE_SELF_DESTRUCT), + LEVEL_UP_MOVE(15, MOVE_TAKE_DOWN), + LEVEL_UP_MOVE(22, MOVE_RAPID_SPIN), + LEVEL_UP_MOVE(29, MOVE_BIDE), + LEVEL_UP_MOVE(39, MOVE_EXPLOSION), + LEVEL_UP_MOVE(49, MOVE_SPIKES), + LEVEL_UP_MOVE(59, MOVE_DOUBLE_EDGE), + LEVEL_UP_END +}; + +const u16 gDunsparceLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_RAGE), + LEVEL_UP_MOVE( 4, MOVE_DEFENSE_CURL), + LEVEL_UP_MOVE(11, MOVE_YAWN), + LEVEL_UP_MOVE(14, MOVE_GLARE), + LEVEL_UP_MOVE(21, MOVE_SPITE), + LEVEL_UP_MOVE(24, MOVE_PURSUIT), + LEVEL_UP_MOVE(31, MOVE_SCREECH), + LEVEL_UP_MOVE(34, MOVE_TAKE_DOWN), + LEVEL_UP_MOVE(41, MOVE_ENDEAVOR), + LEVEL_UP_END +}; + +const u16 gGligarLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_POISON_STING), + LEVEL_UP_MOVE( 6, MOVE_SAND_ATTACK), + LEVEL_UP_MOVE(13, MOVE_HARDEN), + LEVEL_UP_MOVE(20, MOVE_QUICK_ATTACK), + LEVEL_UP_MOVE(28, MOVE_FAINT_ATTACK), + LEVEL_UP_MOVE(36, MOVE_SLASH), + LEVEL_UP_MOVE(44, MOVE_SCREECH), + LEVEL_UP_MOVE(52, MOVE_GUILLOTINE), + LEVEL_UP_END +}; + +const u16 gSteelixLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_SCREECH), + LEVEL_UP_MOVE( 9, MOVE_BIND), + LEVEL_UP_MOVE(13, MOVE_ROCK_THROW), + LEVEL_UP_MOVE(21, MOVE_HARDEN), + LEVEL_UP_MOVE(25, MOVE_RAGE), + LEVEL_UP_MOVE(33, MOVE_SANDSTORM), + LEVEL_UP_MOVE(37, MOVE_SLAM), + LEVEL_UP_MOVE(45, MOVE_IRON_TAIL), + LEVEL_UP_MOVE(49, MOVE_CRUNCH), + LEVEL_UP_MOVE(57, MOVE_DOUBLE_EDGE), + LEVEL_UP_END +}; + +const u16 gSnubbullLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_SCARY_FACE), + LEVEL_UP_MOVE( 4, MOVE_TAIL_WHIP), + LEVEL_UP_MOVE( 8, MOVE_CHARM), + LEVEL_UP_MOVE(13, MOVE_BITE), + LEVEL_UP_MOVE(19, MOVE_LICK), + LEVEL_UP_MOVE(26, MOVE_ROAR), + LEVEL_UP_MOVE(34, MOVE_RAGE), + LEVEL_UP_MOVE(43, MOVE_TAKE_DOWN), + LEVEL_UP_MOVE(53, MOVE_CRUNCH), + LEVEL_UP_END +}; + +const u16 gGranbullLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_SCARY_FACE), + LEVEL_UP_MOVE( 4, MOVE_TAIL_WHIP), + LEVEL_UP_MOVE( 8, MOVE_CHARM), + LEVEL_UP_MOVE(13, MOVE_BITE), + LEVEL_UP_MOVE(19, MOVE_LICK), + LEVEL_UP_MOVE(28, MOVE_ROAR), + LEVEL_UP_MOVE(38, MOVE_RAGE), + LEVEL_UP_MOVE(49, MOVE_TAKE_DOWN), + LEVEL_UP_MOVE(61, MOVE_CRUNCH), + LEVEL_UP_END +}; + +const u16 gQwilfishLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SPIKES), + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_POISON_STING), + LEVEL_UP_MOVE(10, MOVE_HARDEN), + LEVEL_UP_MOVE(10, MOVE_MINIMIZE), + LEVEL_UP_MOVE(19, MOVE_WATER_GUN), + LEVEL_UP_MOVE(28, MOVE_PIN_MISSILE), + LEVEL_UP_MOVE(37, MOVE_TAKE_DOWN), + LEVEL_UP_MOVE(46, MOVE_HYDRO_PUMP), + LEVEL_UP_END +}; + +const u16 gScizorLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), + LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 6, MOVE_FOCUS_ENERGY), + LEVEL_UP_MOVE(11, MOVE_PURSUIT), + LEVEL_UP_MOVE(16, MOVE_FALSE_SWIPE), + LEVEL_UP_MOVE(21, MOVE_AGILITY), + LEVEL_UP_MOVE(26, MOVE_METAL_CLAW), + LEVEL_UP_MOVE(31, MOVE_SLASH), + LEVEL_UP_MOVE(36, MOVE_SWORDS_DANCE), + LEVEL_UP_MOVE(41, MOVE_DOUBLE_TEAM), + LEVEL_UP_MOVE(46, MOVE_FURY_CUTTER), + LEVEL_UP_END +}; + +const u16 gShuckleLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_CONSTRICT), + LEVEL_UP_MOVE( 1, MOVE_WITHDRAW), + LEVEL_UP_MOVE( 9, MOVE_WRAP), + LEVEL_UP_MOVE(14, MOVE_ENCORE), + LEVEL_UP_MOVE(23, MOVE_SAFEGUARD), + LEVEL_UP_MOVE(28, MOVE_BIDE), + LEVEL_UP_MOVE(37, MOVE_REST), + LEVEL_UP_END +}; + +const u16 gHeracrossLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 6, MOVE_HORN_ATTACK), + LEVEL_UP_MOVE(11, MOVE_ENDURE), + LEVEL_UP_MOVE(17, MOVE_FURY_ATTACK), + LEVEL_UP_MOVE(23, MOVE_BRICK_BREAK), + LEVEL_UP_MOVE(30, MOVE_COUNTER), + LEVEL_UP_MOVE(37, MOVE_TAKE_DOWN), + LEVEL_UP_MOVE(45, MOVE_REVERSAL), + LEVEL_UP_MOVE(53, MOVE_MEGAHORN), + LEVEL_UP_END +}; + +const u16 gSneaselLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SCRATCH), + LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 1, MOVE_TAUNT), + LEVEL_UP_MOVE( 8, MOVE_QUICK_ATTACK), + LEVEL_UP_MOVE(15, MOVE_SCREECH), + LEVEL_UP_MOVE(22, MOVE_FAINT_ATTACK), + LEVEL_UP_MOVE(29, MOVE_FURY_SWIPES), + LEVEL_UP_MOVE(36, MOVE_AGILITY), + LEVEL_UP_MOVE(43, MOVE_ICY_WIND), + LEVEL_UP_MOVE(50, MOVE_SLASH), + LEVEL_UP_MOVE(57, MOVE_BEAT_UP), + LEVEL_UP_MOVE(64, MOVE_METAL_CLAW), + LEVEL_UP_END +}; + +const u16 gTeddiursaLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SCRATCH), + LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 7, MOVE_LICK), + LEVEL_UP_MOVE(13, MOVE_FURY_SWIPES), + LEVEL_UP_MOVE(19, MOVE_FAKE_TEARS), + LEVEL_UP_MOVE(25, MOVE_FAINT_ATTACK), + LEVEL_UP_MOVE(31, MOVE_REST), + LEVEL_UP_MOVE(37, MOVE_SLASH), + LEVEL_UP_MOVE(43, MOVE_SNORE), + LEVEL_UP_MOVE(49, MOVE_THRASH), + LEVEL_UP_END +}; + +const u16 gUrsaringLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SCRATCH), + LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 1, MOVE_LICK), + LEVEL_UP_MOVE( 1, MOVE_FURY_SWIPES), + LEVEL_UP_MOVE( 7, MOVE_LICK), + LEVEL_UP_MOVE(13, MOVE_FURY_SWIPES), + LEVEL_UP_MOVE(19, MOVE_FAKE_TEARS), + LEVEL_UP_MOVE(25, MOVE_FAINT_ATTACK), + LEVEL_UP_MOVE(31, MOVE_REST), + LEVEL_UP_MOVE(37, MOVE_SLASH), + LEVEL_UP_MOVE(43, MOVE_SNORE), + LEVEL_UP_MOVE(49, MOVE_THRASH), + LEVEL_UP_END +}; + +const u16 gSlugmaLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_YAWN), + LEVEL_UP_MOVE( 1, MOVE_SMOG), + LEVEL_UP_MOVE( 8, MOVE_EMBER), + LEVEL_UP_MOVE(15, MOVE_ROCK_THROW), + LEVEL_UP_MOVE(22, MOVE_HARDEN), + LEVEL_UP_MOVE(29, MOVE_AMNESIA), + LEVEL_UP_MOVE(36, MOVE_FLAMETHROWER), + LEVEL_UP_MOVE(43, MOVE_ROCK_SLIDE), + LEVEL_UP_MOVE(50, MOVE_BODY_SLAM), + LEVEL_UP_END +}; + +const u16 gMagcargoLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_YAWN), + LEVEL_UP_MOVE( 1, MOVE_SMOG), + LEVEL_UP_MOVE( 1, MOVE_EMBER), + LEVEL_UP_MOVE( 1, MOVE_ROCK_THROW), + LEVEL_UP_MOVE( 8, MOVE_EMBER), + LEVEL_UP_MOVE(15, MOVE_ROCK_THROW), + LEVEL_UP_MOVE(22, MOVE_HARDEN), + LEVEL_UP_MOVE(29, MOVE_AMNESIA), + LEVEL_UP_MOVE(36, MOVE_FLAMETHROWER), + LEVEL_UP_MOVE(48, MOVE_ROCK_SLIDE), + LEVEL_UP_MOVE(60, MOVE_BODY_SLAM), + LEVEL_UP_END +}; + +const u16 gSwinubLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_ODOR_SLEUTH), + LEVEL_UP_MOVE(10, MOVE_POWDER_SNOW), + LEVEL_UP_MOVE(19, MOVE_ENDURE), + LEVEL_UP_MOVE(28, MOVE_TAKE_DOWN), + LEVEL_UP_MOVE(37, MOVE_MIST), + LEVEL_UP_MOVE(46, MOVE_BLIZZARD), + LEVEL_UP_MOVE(55, MOVE_AMNESIA), + LEVEL_UP_END +}; + +const u16 gPiloswineLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_HORN_ATTACK), + LEVEL_UP_MOVE( 1, MOVE_ODOR_SLEUTH), + LEVEL_UP_MOVE( 1, MOVE_POWDER_SNOW), + LEVEL_UP_MOVE( 1, MOVE_ENDURE), + LEVEL_UP_MOVE(10, MOVE_POWDER_SNOW), + LEVEL_UP_MOVE(19, MOVE_ENDURE), + LEVEL_UP_MOVE(28, MOVE_TAKE_DOWN), + LEVEL_UP_MOVE(33, MOVE_FURY_ATTACK), + LEVEL_UP_MOVE(42, MOVE_MIST), + LEVEL_UP_MOVE(56, MOVE_BLIZZARD), + LEVEL_UP_MOVE(70, MOVE_AMNESIA), + LEVEL_UP_END +}; + +const u16 gCorsolaLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 6, MOVE_HARDEN), + LEVEL_UP_MOVE(12, MOVE_BUBBLE), + LEVEL_UP_MOVE(17, MOVE_RECOVER), + LEVEL_UP_MOVE(17, MOVE_REFRESH), + LEVEL_UP_MOVE(23, MOVE_BUBBLE_BEAM), + LEVEL_UP_MOVE(28, MOVE_SPIKE_CANNON), + LEVEL_UP_MOVE(34, MOVE_ROCK_BLAST), + LEVEL_UP_MOVE(39, MOVE_MIRROR_COAT), + LEVEL_UP_MOVE(45, MOVE_ANCIENT_POWER), + LEVEL_UP_END +}; + +const u16 gRemoraidLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), + LEVEL_UP_MOVE(11, MOVE_LOCK_ON), + LEVEL_UP_MOVE(22, MOVE_PSYBEAM), + LEVEL_UP_MOVE(22, MOVE_AURORA_BEAM), + LEVEL_UP_MOVE(22, MOVE_BUBBLE_BEAM), + LEVEL_UP_MOVE(33, MOVE_FOCUS_ENERGY), + LEVEL_UP_MOVE(44, MOVE_ICE_BEAM), + LEVEL_UP_MOVE(55, MOVE_HYPER_BEAM), + LEVEL_UP_END +}; + +const u16 gOctilleryLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), + LEVEL_UP_MOVE(11, MOVE_CONSTRICT), + LEVEL_UP_MOVE(22, MOVE_PSYBEAM), + LEVEL_UP_MOVE(22, MOVE_AURORA_BEAM), + LEVEL_UP_MOVE(22, MOVE_BUBBLE_BEAM), + LEVEL_UP_MOVE(25, MOVE_OCTAZOOKA), + LEVEL_UP_MOVE(38, MOVE_FOCUS_ENERGY), + LEVEL_UP_MOVE(54, MOVE_ICE_BEAM), + LEVEL_UP_MOVE(70, MOVE_HYPER_BEAM), + LEVEL_UP_END +}; + +const u16 gDelibirdLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_PRESENT), + LEVEL_UP_END +}; + +const u16 gMantineLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_BUBBLE), + LEVEL_UP_MOVE( 8, MOVE_SUPERSONIC), + LEVEL_UP_MOVE(15, MOVE_BUBBLE_BEAM), + LEVEL_UP_MOVE(22, MOVE_TAKE_DOWN), + LEVEL_UP_MOVE(29, MOVE_AGILITY), + LEVEL_UP_MOVE(36, MOVE_WING_ATTACK), + LEVEL_UP_MOVE(43, MOVE_WATER_PULSE), + LEVEL_UP_MOVE(50, MOVE_CONFUSE_RAY), + LEVEL_UP_END +}; + +const u16 gSkarmoryLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 1, MOVE_PECK), + LEVEL_UP_MOVE(10, MOVE_SAND_ATTACK), + LEVEL_UP_MOVE(13, MOVE_SWIFT), + LEVEL_UP_MOVE(16, MOVE_AGILITY), + LEVEL_UP_MOVE(26, MOVE_FURY_ATTACK), + LEVEL_UP_MOVE(29, MOVE_AIR_CUTTER), + LEVEL_UP_MOVE(32, MOVE_STEEL_WING), + LEVEL_UP_MOVE(42, MOVE_SPIKES), + LEVEL_UP_MOVE(45, MOVE_METAL_SOUND), + LEVEL_UP_END +}; + +const u16 gHoundourLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 1, MOVE_EMBER), + LEVEL_UP_MOVE( 7, MOVE_HOWL), + LEVEL_UP_MOVE(13, MOVE_SMOG), + LEVEL_UP_MOVE(19, MOVE_ROAR), + LEVEL_UP_MOVE(25, MOVE_BITE), + LEVEL_UP_MOVE(31, MOVE_ODOR_SLEUTH), + LEVEL_UP_MOVE(37, MOVE_FAINT_ATTACK), + LEVEL_UP_MOVE(43, MOVE_FLAMETHROWER), + LEVEL_UP_MOVE(49, MOVE_CRUNCH), + LEVEL_UP_END +}; + +const u16 gHoundoomLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 1, MOVE_EMBER), + LEVEL_UP_MOVE( 1, MOVE_HOWL), + LEVEL_UP_MOVE( 7, MOVE_HOWL), + LEVEL_UP_MOVE(13, MOVE_SMOG), + LEVEL_UP_MOVE(19, MOVE_ROAR), + LEVEL_UP_MOVE(27, MOVE_BITE), + LEVEL_UP_MOVE(35, MOVE_ODOR_SLEUTH), + LEVEL_UP_MOVE(43, MOVE_FAINT_ATTACK), + LEVEL_UP_MOVE(51, MOVE_FLAMETHROWER), + LEVEL_UP_MOVE(59, MOVE_CRUNCH), + LEVEL_UP_END +}; + +const u16 gKingdraLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_BUBBLE), + LEVEL_UP_MOVE( 1, MOVE_SMOKESCREEN), + LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), + LEVEL_UP_MOVE( 8, MOVE_SMOKESCREEN), + LEVEL_UP_MOVE(15, MOVE_LEER), + LEVEL_UP_MOVE(22, MOVE_WATER_GUN), + LEVEL_UP_MOVE(29, MOVE_TWISTER), + LEVEL_UP_MOVE(40, MOVE_AGILITY), + LEVEL_UP_MOVE(51, MOVE_HYDRO_PUMP), + LEVEL_UP_MOVE(62, MOVE_DRAGON_DANCE), + LEVEL_UP_END +}; + +const u16 gPhanpyLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_ODOR_SLEUTH), + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_GROWL), + LEVEL_UP_MOVE( 9, MOVE_DEFENSE_CURL), + LEVEL_UP_MOVE(17, MOVE_FLAIL), + LEVEL_UP_MOVE(25, MOVE_TAKE_DOWN), + LEVEL_UP_MOVE(33, MOVE_ROLLOUT), + LEVEL_UP_MOVE(41, MOVE_ENDURE), + LEVEL_UP_MOVE(49, MOVE_DOUBLE_EDGE), + LEVEL_UP_END +}; + +const u16 gDonphanLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_ODOR_SLEUTH), + LEVEL_UP_MOVE( 1, MOVE_HORN_ATTACK), + LEVEL_UP_MOVE( 1, MOVE_GROWL), + LEVEL_UP_MOVE( 9, MOVE_DEFENSE_CURL), + LEVEL_UP_MOVE(17, MOVE_FLAIL), + LEVEL_UP_MOVE(25, MOVE_FURY_ATTACK), + LEVEL_UP_MOVE(33, MOVE_ROLLOUT), + LEVEL_UP_MOVE(41, MOVE_RAPID_SPIN), + LEVEL_UP_MOVE(49, MOVE_EARTHQUAKE), + LEVEL_UP_END +}; + +const u16 gPorygon2LevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_CONVERSION_2), + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_CONVERSION), + LEVEL_UP_MOVE( 9, MOVE_AGILITY), + LEVEL_UP_MOVE(12, MOVE_PSYBEAM), + LEVEL_UP_MOVE(20, MOVE_RECOVER), + LEVEL_UP_MOVE(24, MOVE_DEFENSE_CURL), + LEVEL_UP_MOVE(32, MOVE_LOCK_ON), + LEVEL_UP_MOVE(36, MOVE_TRI_ATTACK), + LEVEL_UP_MOVE(44, MOVE_RECYCLE), + LEVEL_UP_MOVE(48, MOVE_ZAP_CANNON), + LEVEL_UP_END +}; + +const u16 gStantlerLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 7, MOVE_LEER), + LEVEL_UP_MOVE(13, MOVE_ASTONISH), + LEVEL_UP_MOVE(19, MOVE_HYPNOSIS), + LEVEL_UP_MOVE(25, MOVE_STOMP), + LEVEL_UP_MOVE(31, MOVE_SAND_ATTACK), + LEVEL_UP_MOVE(37, MOVE_TAKE_DOWN), + LEVEL_UP_MOVE(43, MOVE_CONFUSE_RAY), + LEVEL_UP_MOVE(49, MOVE_CALM_MIND), + LEVEL_UP_END +}; + +const u16 gSmeargleLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SKETCH), + LEVEL_UP_MOVE(11, MOVE_SKETCH), + LEVEL_UP_MOVE(21, MOVE_SKETCH), + LEVEL_UP_MOVE(31, MOVE_SKETCH), + LEVEL_UP_MOVE(41, MOVE_SKETCH), + LEVEL_UP_MOVE(51, MOVE_SKETCH), + LEVEL_UP_MOVE(61, MOVE_SKETCH), + LEVEL_UP_MOVE(71, MOVE_SKETCH), + LEVEL_UP_MOVE(81, MOVE_SKETCH), + LEVEL_UP_MOVE(91, MOVE_SKETCH), + LEVEL_UP_END +}; + +const u16 gTyrogueLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_END +}; + +const u16 gHitmontopLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_REVENGE), + LEVEL_UP_MOVE( 1, MOVE_ROLLING_KICK), + LEVEL_UP_MOVE( 7, MOVE_FOCUS_ENERGY), + LEVEL_UP_MOVE(13, MOVE_PURSUIT), + LEVEL_UP_MOVE(19, MOVE_QUICK_ATTACK), + LEVEL_UP_MOVE(20, MOVE_TRIPLE_KICK), + LEVEL_UP_MOVE(25, MOVE_RAPID_SPIN), + LEVEL_UP_MOVE(31, MOVE_COUNTER), + LEVEL_UP_MOVE(37, MOVE_AGILITY), + LEVEL_UP_MOVE(43, MOVE_DETECT), + LEVEL_UP_MOVE(49, MOVE_ENDEAVOR), + LEVEL_UP_END +}; + +const u16 gSmoochumLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_POUND), + LEVEL_UP_MOVE( 1, MOVE_LICK), + LEVEL_UP_MOVE( 9, MOVE_SWEET_KISS), + LEVEL_UP_MOVE(13, MOVE_POWDER_SNOW), + LEVEL_UP_MOVE(21, MOVE_CONFUSION), + LEVEL_UP_MOVE(25, MOVE_SING), + LEVEL_UP_MOVE(33, MOVE_MEAN_LOOK), + LEVEL_UP_MOVE(37, MOVE_FAKE_TEARS), + LEVEL_UP_MOVE(45, MOVE_PSYCHIC), + LEVEL_UP_MOVE(49, MOVE_PERISH_SONG), + LEVEL_UP_MOVE(57, MOVE_BLIZZARD), + LEVEL_UP_END +}; + +const u16 gElekidLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), + LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 9, MOVE_THUNDER_PUNCH), + LEVEL_UP_MOVE(17, MOVE_LIGHT_SCREEN), + LEVEL_UP_MOVE(25, MOVE_SWIFT), + LEVEL_UP_MOVE(33, MOVE_SCREECH), + LEVEL_UP_MOVE(41, MOVE_THUNDERBOLT), + LEVEL_UP_MOVE(49, MOVE_THUNDER), + LEVEL_UP_END +}; + +const u16 gMagbyLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_EMBER), + LEVEL_UP_MOVE( 7, MOVE_LEER), + LEVEL_UP_MOVE(13, MOVE_SMOG), + LEVEL_UP_MOVE(19, MOVE_FIRE_PUNCH), + LEVEL_UP_MOVE(25, MOVE_SMOKESCREEN), + LEVEL_UP_MOVE(31, MOVE_SUNNY_DAY), + LEVEL_UP_MOVE(37, MOVE_FLAMETHROWER), + LEVEL_UP_MOVE(43, MOVE_CONFUSE_RAY), + LEVEL_UP_MOVE(49, MOVE_FIRE_BLAST), + LEVEL_UP_END +}; + +const u16 gMiltankLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 4, MOVE_GROWL), + LEVEL_UP_MOVE( 8, MOVE_DEFENSE_CURL), + LEVEL_UP_MOVE(13, MOVE_STOMP), + LEVEL_UP_MOVE(19, MOVE_MILK_DRINK), + LEVEL_UP_MOVE(26, MOVE_BIDE), + LEVEL_UP_MOVE(34, MOVE_ROLLOUT), + LEVEL_UP_MOVE(43, MOVE_BODY_SLAM), + LEVEL_UP_MOVE(53, MOVE_HEAL_BELL), + LEVEL_UP_END +}; + +const u16 gBlisseyLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_POUND), + LEVEL_UP_MOVE( 1, MOVE_GROWL), + LEVEL_UP_MOVE( 4, MOVE_TAIL_WHIP), + LEVEL_UP_MOVE( 7, MOVE_REFRESH), + LEVEL_UP_MOVE(10, MOVE_SOFT_BOILED), + LEVEL_UP_MOVE(13, MOVE_DOUBLE_SLAP), + LEVEL_UP_MOVE(18, MOVE_MINIMIZE), + LEVEL_UP_MOVE(23, MOVE_SING), + LEVEL_UP_MOVE(28, MOVE_EGG_BOMB), + LEVEL_UP_MOVE(33, MOVE_DEFENSE_CURL), + LEVEL_UP_MOVE(40, MOVE_LIGHT_SCREEN), + LEVEL_UP_MOVE(47, MOVE_DOUBLE_EDGE), + LEVEL_UP_END +}; + +const u16 gRaikouLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_BITE), + LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE(11, MOVE_THUNDER_SHOCK), + LEVEL_UP_MOVE(21, MOVE_ROAR), + LEVEL_UP_MOVE(31, MOVE_QUICK_ATTACK), + LEVEL_UP_MOVE(41, MOVE_SPARK), + LEVEL_UP_MOVE(51, MOVE_REFLECT), + LEVEL_UP_MOVE(61, MOVE_CRUNCH), + LEVEL_UP_MOVE(71, MOVE_THUNDER), + LEVEL_UP_MOVE(81, MOVE_CALM_MIND), + LEVEL_UP_END +}; + +const u16 gEnteiLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_BITE), + LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE(11, MOVE_EMBER), + LEVEL_UP_MOVE(21, MOVE_ROAR), + LEVEL_UP_MOVE(31, MOVE_FIRE_SPIN), + LEVEL_UP_MOVE(41, MOVE_STOMP), + LEVEL_UP_MOVE(51, MOVE_FLAMETHROWER), + LEVEL_UP_MOVE(61, MOVE_SWAGGER), + LEVEL_UP_MOVE(71, MOVE_FIRE_BLAST), + LEVEL_UP_MOVE(81, MOVE_CALM_MIND), + LEVEL_UP_END +}; + +const u16 gSuicuneLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_BITE), + LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE(11, MOVE_BUBBLE_BEAM), + LEVEL_UP_MOVE(21, MOVE_RAIN_DANCE), + LEVEL_UP_MOVE(31, MOVE_GUST), + LEVEL_UP_MOVE(41, MOVE_AURORA_BEAM), + LEVEL_UP_MOVE(51, MOVE_MIST), + LEVEL_UP_MOVE(61, MOVE_MIRROR_COAT), + LEVEL_UP_MOVE(71, MOVE_HYDRO_PUMP), + LEVEL_UP_MOVE(81, MOVE_CALM_MIND), + LEVEL_UP_END +}; + +const u16 gLarvitarLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_BITE), + LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 8, MOVE_SANDSTORM), + LEVEL_UP_MOVE(15, MOVE_SCREECH), + LEVEL_UP_MOVE(22, MOVE_ROCK_SLIDE), + LEVEL_UP_MOVE(29, MOVE_THRASH), + LEVEL_UP_MOVE(36, MOVE_SCARY_FACE), + LEVEL_UP_MOVE(43, MOVE_CRUNCH), + LEVEL_UP_MOVE(50, MOVE_EARTHQUAKE), + LEVEL_UP_MOVE(57, MOVE_HYPER_BEAM), + LEVEL_UP_END +}; + +const u16 gPupitarLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_BITE), + LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 1, MOVE_SANDSTORM), + LEVEL_UP_MOVE( 1, MOVE_SCREECH), + LEVEL_UP_MOVE( 8, MOVE_SANDSTORM), + LEVEL_UP_MOVE(15, MOVE_SCREECH), + LEVEL_UP_MOVE(22, MOVE_ROCK_SLIDE), + LEVEL_UP_MOVE(29, MOVE_THRASH), + LEVEL_UP_MOVE(38, MOVE_SCARY_FACE), + LEVEL_UP_MOVE(47, MOVE_CRUNCH), + LEVEL_UP_MOVE(56, MOVE_EARTHQUAKE), + LEVEL_UP_MOVE(65, MOVE_HYPER_BEAM), + LEVEL_UP_END +}; + +const u16 gTyranitarLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_BITE), + LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 1, MOVE_SANDSTORM), + LEVEL_UP_MOVE( 1, MOVE_SCREECH), + LEVEL_UP_MOVE( 8, MOVE_SANDSTORM), + LEVEL_UP_MOVE(15, MOVE_SCREECH), + LEVEL_UP_MOVE(22, MOVE_ROCK_SLIDE), + LEVEL_UP_MOVE(29, MOVE_THRASH), + LEVEL_UP_MOVE(38, MOVE_SCARY_FACE), + LEVEL_UP_MOVE(47, MOVE_CRUNCH), + LEVEL_UP_MOVE(61, MOVE_EARTHQUAKE), + LEVEL_UP_MOVE(75, MOVE_HYPER_BEAM), + LEVEL_UP_END +}; + +const u16 gLugiaLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_WHIRLWIND), + LEVEL_UP_MOVE(11, MOVE_SAFEGUARD), + LEVEL_UP_MOVE(22, MOVE_GUST), + LEVEL_UP_MOVE(33, MOVE_RECOVER), + LEVEL_UP_MOVE(44, MOVE_HYDRO_PUMP), + LEVEL_UP_MOVE(55, MOVE_RAIN_DANCE), + LEVEL_UP_MOVE(66, MOVE_SWIFT), + LEVEL_UP_MOVE(77, MOVE_AEROBLAST), + LEVEL_UP_MOVE(88, MOVE_ANCIENT_POWER), + LEVEL_UP_MOVE(99, MOVE_FUTURE_SIGHT), + LEVEL_UP_END +}; + +const u16 gHoOhLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_WHIRLWIND), + LEVEL_UP_MOVE(11, MOVE_SAFEGUARD), + LEVEL_UP_MOVE(22, MOVE_GUST), + LEVEL_UP_MOVE(33, MOVE_RECOVER), + LEVEL_UP_MOVE(44, MOVE_FIRE_BLAST), + LEVEL_UP_MOVE(55, MOVE_SUNNY_DAY), + LEVEL_UP_MOVE(66, MOVE_SWIFT), + LEVEL_UP_MOVE(77, MOVE_SACRED_FIRE), + LEVEL_UP_MOVE(88, MOVE_ANCIENT_POWER), + LEVEL_UP_MOVE(99, MOVE_FUTURE_SIGHT), + LEVEL_UP_END +}; + +const u16 gCelebiLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_LEECH_SEED), + LEVEL_UP_MOVE( 1, MOVE_CONFUSION), + LEVEL_UP_MOVE( 1, MOVE_RECOVER), + LEVEL_UP_MOVE( 1, MOVE_HEAL_BELL), + LEVEL_UP_MOVE(10, MOVE_SAFEGUARD), + LEVEL_UP_MOVE(20, MOVE_ANCIENT_POWER), + LEVEL_UP_MOVE(30, MOVE_FUTURE_SIGHT), + LEVEL_UP_MOVE(40, MOVE_BATON_PASS), + LEVEL_UP_MOVE(50, MOVE_PERISH_SONG), + LEVEL_UP_END +}; + +const u16 gSpecies252LevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_END +}; + +const u16 gSpecies253LevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_END +}; + +const u16 gSpecies254LevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_END +}; + +const u16 gSpecies255LevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_END +}; + +const u16 gSpecies256LevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_END +}; + +const u16 gSpecies257LevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_END +}; + +const u16 gSpecies258LevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_END +}; + +const u16 gSpecies259LevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_END +}; + +const u16 gSpecies260LevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_END +}; + +const u16 gSpecies261LevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_END +}; + +const u16 gSpecies262LevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_END +}; + +const u16 gSpecies263LevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_END +}; + +const u16 gSpecies264LevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_END +}; + +const u16 gSpecies265LevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_END +}; + +const u16 gSpecies266LevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_END +}; + +const u16 gSpecies267LevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_END +}; + +const u16 gSpecies268LevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_END +}; + +const u16 gSpecies269LevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_END +}; + +const u16 gSpecies270LevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_END +}; + +const u16 gSpecies271LevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_END +}; + +const u16 gSpecies272LevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_END +}; + +const u16 gSpecies273LevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_END +}; + +const u16 gSpecies274LevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_END +}; + +const u16 gSpecies275LevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_END +}; + +const u16 gSpecies276LevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_END +}; + +const u16 gTreeckoLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_POUND), + LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 6, MOVE_ABSORB), + LEVEL_UP_MOVE(11, MOVE_QUICK_ATTACK), + LEVEL_UP_MOVE(16, MOVE_PURSUIT), + LEVEL_UP_MOVE(21, MOVE_SCREECH), + LEVEL_UP_MOVE(26, MOVE_MEGA_DRAIN), + LEVEL_UP_MOVE(31, MOVE_AGILITY), + LEVEL_UP_MOVE(36, MOVE_SLAM), + LEVEL_UP_MOVE(41, MOVE_DETECT), + LEVEL_UP_MOVE(46, MOVE_GIGA_DRAIN), + LEVEL_UP_END +}; + +const u16 gGrovyleLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_POUND), + LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 1, MOVE_ABSORB), + LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), + LEVEL_UP_MOVE( 6, MOVE_ABSORB), + LEVEL_UP_MOVE(11, MOVE_QUICK_ATTACK), + LEVEL_UP_MOVE(16, MOVE_FURY_CUTTER), + LEVEL_UP_MOVE(17, MOVE_PURSUIT), + LEVEL_UP_MOVE(23, MOVE_SCREECH), + LEVEL_UP_MOVE(29, MOVE_LEAF_BLADE), + LEVEL_UP_MOVE(35, MOVE_AGILITY), + LEVEL_UP_MOVE(41, MOVE_SLAM), + LEVEL_UP_MOVE(47, MOVE_DETECT), + LEVEL_UP_MOVE(53, MOVE_FALSE_SWIPE), + LEVEL_UP_END +}; + +const u16 gSceptileLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_POUND), + LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 1, MOVE_ABSORB), + LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), + LEVEL_UP_MOVE( 6, MOVE_ABSORB), + LEVEL_UP_MOVE(11, MOVE_QUICK_ATTACK), + LEVEL_UP_MOVE(16, MOVE_FURY_CUTTER), + LEVEL_UP_MOVE(17, MOVE_PURSUIT), + LEVEL_UP_MOVE(23, MOVE_SCREECH), + LEVEL_UP_MOVE(29, MOVE_LEAF_BLADE), + LEVEL_UP_MOVE(35, MOVE_AGILITY), + LEVEL_UP_MOVE(43, MOVE_SLAM), + LEVEL_UP_MOVE(51, MOVE_DETECT), + LEVEL_UP_MOVE(59, MOVE_FALSE_SWIPE), + LEVEL_UP_END +}; + +const u16 gTorchicLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SCRATCH), + LEVEL_UP_MOVE( 1, MOVE_GROWL), + LEVEL_UP_MOVE( 7, MOVE_FOCUS_ENERGY), + LEVEL_UP_MOVE(10, MOVE_EMBER), + LEVEL_UP_MOVE(16, MOVE_PECK), + LEVEL_UP_MOVE(19, MOVE_SAND_ATTACK), + LEVEL_UP_MOVE(25, MOVE_FIRE_SPIN), + LEVEL_UP_MOVE(28, MOVE_QUICK_ATTACK), + LEVEL_UP_MOVE(34, MOVE_SLASH), + LEVEL_UP_MOVE(37, MOVE_MIRROR_MOVE), + LEVEL_UP_MOVE(43, MOVE_FLAMETHROWER), + LEVEL_UP_END +}; + +const u16 gCombuskenLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SCRATCH), + LEVEL_UP_MOVE( 1, MOVE_GROWL), + LEVEL_UP_MOVE( 1, MOVE_FOCUS_ENERGY), + LEVEL_UP_MOVE( 1, MOVE_EMBER), + LEVEL_UP_MOVE( 7, MOVE_FOCUS_ENERGY), + LEVEL_UP_MOVE(13, MOVE_EMBER), + LEVEL_UP_MOVE(16, MOVE_DOUBLE_KICK), + LEVEL_UP_MOVE(17, MOVE_PECK), + LEVEL_UP_MOVE(21, MOVE_SAND_ATTACK), + LEVEL_UP_MOVE(28, MOVE_BULK_UP), + LEVEL_UP_MOVE(32, MOVE_QUICK_ATTACK), + LEVEL_UP_MOVE(39, MOVE_SLASH), + LEVEL_UP_MOVE(43, MOVE_MIRROR_MOVE), + LEVEL_UP_MOVE(50, MOVE_SKY_UPPERCUT), + LEVEL_UP_END +}; + +const u16 gBlazikenLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_FIRE_PUNCH), + LEVEL_UP_MOVE( 1, MOVE_SCRATCH), + LEVEL_UP_MOVE( 1, MOVE_GROWL), + LEVEL_UP_MOVE( 1, MOVE_FOCUS_ENERGY), + LEVEL_UP_MOVE( 1, MOVE_EMBER), + LEVEL_UP_MOVE( 7, MOVE_FOCUS_ENERGY), + LEVEL_UP_MOVE(13, MOVE_EMBER), + LEVEL_UP_MOVE(16, MOVE_DOUBLE_KICK), + LEVEL_UP_MOVE(17, MOVE_PECK), + LEVEL_UP_MOVE(21, MOVE_SAND_ATTACK), + LEVEL_UP_MOVE(28, MOVE_BULK_UP), + LEVEL_UP_MOVE(32, MOVE_QUICK_ATTACK), + LEVEL_UP_MOVE(36, MOVE_BLAZE_KICK), + LEVEL_UP_MOVE(42, MOVE_SLASH), + LEVEL_UP_MOVE(49, MOVE_MIRROR_MOVE), + LEVEL_UP_MOVE(59, MOVE_SKY_UPPERCUT), + LEVEL_UP_END +}; + +const u16 gMudkipLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_GROWL), + LEVEL_UP_MOVE( 6, MOVE_MUD_SLAP), + LEVEL_UP_MOVE(10, MOVE_WATER_GUN), + LEVEL_UP_MOVE(15, MOVE_BIDE), + LEVEL_UP_MOVE(19, MOVE_FORESIGHT), + LEVEL_UP_MOVE(24, MOVE_MUD_SPORT), + LEVEL_UP_MOVE(28, MOVE_TAKE_DOWN), + LEVEL_UP_MOVE(33, MOVE_WHIRLPOOL), + LEVEL_UP_MOVE(37, MOVE_PROTECT), + LEVEL_UP_MOVE(42, MOVE_HYDRO_PUMP), + LEVEL_UP_MOVE(46, MOVE_ENDEAVOR), + LEVEL_UP_END +}; + +const u16 gMarshtompLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_GROWL), + LEVEL_UP_MOVE( 1, MOVE_MUD_SLAP), + LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), + LEVEL_UP_MOVE( 6, MOVE_MUD_SLAP), + LEVEL_UP_MOVE(10, MOVE_WATER_GUN), + LEVEL_UP_MOVE(15, MOVE_BIDE), + LEVEL_UP_MOVE(16, MOVE_MUD_SHOT), + LEVEL_UP_MOVE(20, MOVE_FORESIGHT), + LEVEL_UP_MOVE(25, MOVE_MUD_SPORT), + LEVEL_UP_MOVE(31, MOVE_TAKE_DOWN), + LEVEL_UP_MOVE(37, MOVE_MUDDY_WATER), + LEVEL_UP_MOVE(42, MOVE_PROTECT), + LEVEL_UP_MOVE(46, MOVE_EARTHQUAKE), + LEVEL_UP_MOVE(53, MOVE_ENDEAVOR), + LEVEL_UP_END +}; + +const u16 gSwampertLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_GROWL), + LEVEL_UP_MOVE( 1, MOVE_MUD_SLAP), + LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), + LEVEL_UP_MOVE( 6, MOVE_MUD_SLAP), + LEVEL_UP_MOVE(10, MOVE_WATER_GUN), + LEVEL_UP_MOVE(15, MOVE_BIDE), + LEVEL_UP_MOVE(16, MOVE_MUD_SHOT), + LEVEL_UP_MOVE(20, MOVE_FORESIGHT), + LEVEL_UP_MOVE(25, MOVE_MUD_SPORT), + LEVEL_UP_MOVE(31, MOVE_TAKE_DOWN), + LEVEL_UP_MOVE(39, MOVE_MUDDY_WATER), + LEVEL_UP_MOVE(46, MOVE_PROTECT), + LEVEL_UP_MOVE(52, MOVE_EARTHQUAKE), + LEVEL_UP_MOVE(61, MOVE_ENDEAVOR), + LEVEL_UP_END +}; + +const u16 gPoochyenaLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 5, MOVE_HOWL), + LEVEL_UP_MOVE( 9, MOVE_SAND_ATTACK), + LEVEL_UP_MOVE(13, MOVE_BITE), + LEVEL_UP_MOVE(17, MOVE_ODOR_SLEUTH), + LEVEL_UP_MOVE(21, MOVE_ROAR), + LEVEL_UP_MOVE(25, MOVE_SWAGGER), + LEVEL_UP_MOVE(29, MOVE_SCARY_FACE), + LEVEL_UP_MOVE(33, MOVE_TAKE_DOWN), + LEVEL_UP_MOVE(37, MOVE_TAUNT), + LEVEL_UP_MOVE(41, MOVE_CRUNCH), + LEVEL_UP_MOVE(45, MOVE_THIEF), + LEVEL_UP_END +}; + +const u16 gMightyenaLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_HOWL), + LEVEL_UP_MOVE( 1, MOVE_SAND_ATTACK), + LEVEL_UP_MOVE( 1, MOVE_BITE), + LEVEL_UP_MOVE( 5, MOVE_HOWL), + LEVEL_UP_MOVE( 9, MOVE_SAND_ATTACK), + LEVEL_UP_MOVE(13, MOVE_BITE), + LEVEL_UP_MOVE(17, MOVE_ODOR_SLEUTH), + LEVEL_UP_MOVE(22, MOVE_ROAR), + LEVEL_UP_MOVE(27, MOVE_SWAGGER), + LEVEL_UP_MOVE(32, MOVE_SCARY_FACE), + LEVEL_UP_MOVE(37, MOVE_TAKE_DOWN), + LEVEL_UP_MOVE(42, MOVE_TAUNT), + LEVEL_UP_MOVE(47, MOVE_CRUNCH), + LEVEL_UP_MOVE(52, MOVE_THIEF), + LEVEL_UP_END +}; + +const u16 gZigzagoonLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_GROWL), + LEVEL_UP_MOVE( 5, MOVE_TAIL_WHIP), + LEVEL_UP_MOVE( 9, MOVE_HEADBUTT), + LEVEL_UP_MOVE(13, MOVE_SAND_ATTACK), + LEVEL_UP_MOVE(17, MOVE_ODOR_SLEUTH), + LEVEL_UP_MOVE(21, MOVE_MUD_SPORT), + LEVEL_UP_MOVE(25, MOVE_PIN_MISSILE), + LEVEL_UP_MOVE(29, MOVE_COVET), + LEVEL_UP_MOVE(33, MOVE_FLAIL), + LEVEL_UP_MOVE(37, MOVE_REST), + LEVEL_UP_MOVE(41, MOVE_BELLY_DRUM), + LEVEL_UP_END +}; + +const u16 gLinooneLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_GROWL), + LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), + LEVEL_UP_MOVE( 1, MOVE_HEADBUTT), + LEVEL_UP_MOVE( 5, MOVE_TAIL_WHIP), + LEVEL_UP_MOVE( 9, MOVE_HEADBUTT), + LEVEL_UP_MOVE(13, MOVE_SAND_ATTACK), + LEVEL_UP_MOVE(17, MOVE_ODOR_SLEUTH), + LEVEL_UP_MOVE(23, MOVE_MUD_SPORT), + LEVEL_UP_MOVE(29, MOVE_FURY_SWIPES), + LEVEL_UP_MOVE(35, MOVE_COVET), + LEVEL_UP_MOVE(41, MOVE_SLASH), + LEVEL_UP_MOVE(47, MOVE_REST), + LEVEL_UP_MOVE(53, MOVE_BELLY_DRUM), + LEVEL_UP_END +}; + +const u16 gWurmpleLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_STRING_SHOT), + LEVEL_UP_MOVE( 5, MOVE_POISON_STING), + LEVEL_UP_END +}; + +const u16 gSilcoonLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_HARDEN), + LEVEL_UP_MOVE( 7, MOVE_HARDEN), + LEVEL_UP_END +}; + +const u16 gBeautiflyLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_ABSORB), + LEVEL_UP_MOVE(10, MOVE_ABSORB), + LEVEL_UP_MOVE(13, MOVE_GUST), + LEVEL_UP_MOVE(17, MOVE_STUN_SPORE), + LEVEL_UP_MOVE(20, MOVE_MORNING_SUN), + LEVEL_UP_MOVE(24, MOVE_MEGA_DRAIN), + LEVEL_UP_MOVE(27, MOVE_WHIRLWIND), + LEVEL_UP_MOVE(31, MOVE_ATTRACT), + LEVEL_UP_MOVE(34, MOVE_SILVER_WIND), + LEVEL_UP_MOVE(38, MOVE_GIGA_DRAIN), + LEVEL_UP_END +}; + +const u16 gCascoonLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_HARDEN), + LEVEL_UP_MOVE( 7, MOVE_HARDEN), + LEVEL_UP_END +}; + +const u16 gDustoxLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_CONFUSION), + LEVEL_UP_MOVE(10, MOVE_CONFUSION), + LEVEL_UP_MOVE(13, MOVE_GUST), + LEVEL_UP_MOVE(17, MOVE_PROTECT), + LEVEL_UP_MOVE(20, MOVE_MOONLIGHT), + LEVEL_UP_MOVE(24, MOVE_PSYBEAM), + LEVEL_UP_MOVE(27, MOVE_WHIRLWIND), + LEVEL_UP_MOVE(31, MOVE_LIGHT_SCREEN), + LEVEL_UP_MOVE(34, MOVE_SILVER_WIND), + LEVEL_UP_MOVE(38, MOVE_TOXIC), + LEVEL_UP_END +}; + +const u16 gLotadLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_ASTONISH), + LEVEL_UP_MOVE( 3, MOVE_GROWL), + LEVEL_UP_MOVE( 7, MOVE_ABSORB), + LEVEL_UP_MOVE(13, MOVE_NATURE_POWER), + LEVEL_UP_MOVE(21, MOVE_MIST), + LEVEL_UP_MOVE(31, MOVE_RAIN_DANCE), + LEVEL_UP_MOVE(43, MOVE_MEGA_DRAIN), + LEVEL_UP_END +}; + +const u16 gLombreLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_ASTONISH), + LEVEL_UP_MOVE( 3, MOVE_GROWL), + LEVEL_UP_MOVE( 7, MOVE_ABSORB), + LEVEL_UP_MOVE(13, MOVE_NATURE_POWER), + LEVEL_UP_MOVE(19, MOVE_FAKE_OUT), + LEVEL_UP_MOVE(25, MOVE_FURY_SWIPES), + LEVEL_UP_MOVE(31, MOVE_WATER_SPORT), + LEVEL_UP_MOVE(37, MOVE_THIEF), + LEVEL_UP_MOVE(43, MOVE_UPROAR), + LEVEL_UP_MOVE(49, MOVE_HYDRO_PUMP), + LEVEL_UP_END +}; + +const u16 gLudicoloLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_ASTONISH), + LEVEL_UP_MOVE( 1, MOVE_GROWL), + LEVEL_UP_MOVE( 1, MOVE_ABSORB), + LEVEL_UP_MOVE( 1, MOVE_NATURE_POWER), + LEVEL_UP_END +}; + +const u16 gSeedotLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_BIDE), + LEVEL_UP_MOVE( 3, MOVE_HARDEN), + LEVEL_UP_MOVE( 7, MOVE_GROWTH), + LEVEL_UP_MOVE(13, MOVE_NATURE_POWER), + LEVEL_UP_MOVE(21, MOVE_SYNTHESIS), + LEVEL_UP_MOVE(31, MOVE_SUNNY_DAY), + LEVEL_UP_MOVE(43, MOVE_EXPLOSION), + LEVEL_UP_END +}; + +const u16 gNuzleafLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_POUND), + LEVEL_UP_MOVE( 3, MOVE_HARDEN), + LEVEL_UP_MOVE( 7, MOVE_GROWTH), + LEVEL_UP_MOVE(13, MOVE_NATURE_POWER), + LEVEL_UP_MOVE(19, MOVE_FAKE_OUT), + LEVEL_UP_MOVE(25, MOVE_TORMENT), + LEVEL_UP_MOVE(31, MOVE_FAINT_ATTACK), + LEVEL_UP_MOVE(37, MOVE_RAZOR_WIND), + LEVEL_UP_MOVE(43, MOVE_SWAGGER), + LEVEL_UP_MOVE(49, MOVE_EXTRASENSORY), + LEVEL_UP_END +}; + +const u16 gShiftryLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_POUND), + LEVEL_UP_MOVE( 1, MOVE_HARDEN), + LEVEL_UP_MOVE( 1, MOVE_GROWTH), + LEVEL_UP_MOVE( 1, MOVE_NATURE_POWER), + LEVEL_UP_END +}; + +const u16 gNincadaLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SCRATCH), + LEVEL_UP_MOVE( 1, MOVE_HARDEN), + LEVEL_UP_MOVE( 5, MOVE_LEECH_LIFE), + LEVEL_UP_MOVE( 9, MOVE_SAND_ATTACK), + LEVEL_UP_MOVE(14, MOVE_FURY_SWIPES), + LEVEL_UP_MOVE(19, MOVE_MIND_READER), + LEVEL_UP_MOVE(25, MOVE_FALSE_SWIPE), + LEVEL_UP_MOVE(31, MOVE_MUD_SLAP), + LEVEL_UP_MOVE(38, MOVE_METAL_CLAW), + LEVEL_UP_MOVE(45, MOVE_DIG), + LEVEL_UP_END +}; + +const u16 gNinjaskLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SCRATCH), + LEVEL_UP_MOVE( 1, MOVE_HARDEN), + LEVEL_UP_MOVE( 1, MOVE_LEECH_LIFE), + LEVEL_UP_MOVE( 1, MOVE_SAND_ATTACK), + LEVEL_UP_MOVE( 5, MOVE_LEECH_LIFE), + LEVEL_UP_MOVE( 9, MOVE_SAND_ATTACK), + LEVEL_UP_MOVE(14, MOVE_FURY_SWIPES), + LEVEL_UP_MOVE(19, MOVE_MIND_READER), + LEVEL_UP_MOVE(20, MOVE_DOUBLE_TEAM), + LEVEL_UP_MOVE(20, MOVE_FURY_CUTTER), + LEVEL_UP_MOVE(20, MOVE_SCREECH), + LEVEL_UP_MOVE(25, MOVE_SWORDS_DANCE), + LEVEL_UP_MOVE(31, MOVE_SLASH), + LEVEL_UP_MOVE(38, MOVE_AGILITY), + LEVEL_UP_MOVE(45, MOVE_BATON_PASS), + LEVEL_UP_END +}; + +const u16 gShedinjaLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SCRATCH), + LEVEL_UP_MOVE( 1, MOVE_HARDEN), + LEVEL_UP_MOVE( 5, MOVE_LEECH_LIFE), + LEVEL_UP_MOVE( 9, MOVE_SAND_ATTACK), + LEVEL_UP_MOVE(14, MOVE_FURY_SWIPES), + LEVEL_UP_MOVE(19, MOVE_MIND_READER), + LEVEL_UP_MOVE(25, MOVE_SPITE), + LEVEL_UP_MOVE(31, MOVE_CONFUSE_RAY), + LEVEL_UP_MOVE(38, MOVE_SHADOW_BALL), + LEVEL_UP_MOVE(45, MOVE_GRUDGE), + LEVEL_UP_END +}; + +const u16 gTaillowLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_PECK), + LEVEL_UP_MOVE( 1, MOVE_GROWL), + LEVEL_UP_MOVE( 4, MOVE_FOCUS_ENERGY), + LEVEL_UP_MOVE( 8, MOVE_QUICK_ATTACK), + LEVEL_UP_MOVE(13, MOVE_WING_ATTACK), + LEVEL_UP_MOVE(19, MOVE_DOUBLE_TEAM), + LEVEL_UP_MOVE(26, MOVE_ENDEAVOR), + LEVEL_UP_MOVE(34, MOVE_AERIAL_ACE), + LEVEL_UP_MOVE(43, MOVE_AGILITY), + LEVEL_UP_END +}; + +const u16 gSwellowLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_PECK), + LEVEL_UP_MOVE( 1, MOVE_GROWL), + LEVEL_UP_MOVE( 1, MOVE_FOCUS_ENERGY), + LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), + LEVEL_UP_MOVE( 4, MOVE_FOCUS_ENERGY), + LEVEL_UP_MOVE( 8, MOVE_QUICK_ATTACK), + LEVEL_UP_MOVE(13, MOVE_WING_ATTACK), + LEVEL_UP_MOVE(19, MOVE_DOUBLE_TEAM), + LEVEL_UP_MOVE(28, MOVE_ENDEAVOR), + LEVEL_UP_MOVE(38, MOVE_AERIAL_ACE), + LEVEL_UP_MOVE(49, MOVE_AGILITY), + LEVEL_UP_END +}; + +const u16 gShroomishLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_ABSORB), + LEVEL_UP_MOVE( 4, MOVE_TACKLE), + LEVEL_UP_MOVE( 7, MOVE_STUN_SPORE), + LEVEL_UP_MOVE(10, MOVE_LEECH_SEED), + LEVEL_UP_MOVE(16, MOVE_MEGA_DRAIN), + LEVEL_UP_MOVE(22, MOVE_HEADBUTT), + LEVEL_UP_MOVE(28, MOVE_POISON_POWDER), + LEVEL_UP_MOVE(36, MOVE_GROWTH), + LEVEL_UP_MOVE(45, MOVE_GIGA_DRAIN), + LEVEL_UP_MOVE(54, MOVE_SPORE), + LEVEL_UP_END +}; + +const u16 gBreloomLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_ABSORB), + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_STUN_SPORE), + LEVEL_UP_MOVE( 1, MOVE_LEECH_SEED), + LEVEL_UP_MOVE( 4, MOVE_TACKLE), + LEVEL_UP_MOVE( 7, MOVE_STUN_SPORE), + LEVEL_UP_MOVE(10, MOVE_LEECH_SEED), + LEVEL_UP_MOVE(16, MOVE_MEGA_DRAIN), + LEVEL_UP_MOVE(22, MOVE_HEADBUTT), + LEVEL_UP_MOVE(23, MOVE_MACH_PUNCH), + LEVEL_UP_MOVE(28, MOVE_COUNTER), + LEVEL_UP_MOVE(36, MOVE_SKY_UPPERCUT), + LEVEL_UP_MOVE(45, MOVE_MIND_READER), + LEVEL_UP_MOVE(54, MOVE_DYNAMIC_PUNCH), + LEVEL_UP_END +}; + +const u16 gSpindaLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 5, MOVE_UPROAR), + LEVEL_UP_MOVE(12, MOVE_FAINT_ATTACK), + LEVEL_UP_MOVE(16, MOVE_PSYBEAM), + LEVEL_UP_MOVE(23, MOVE_HYPNOSIS), + LEVEL_UP_MOVE(27, MOVE_DIZZY_PUNCH), + LEVEL_UP_MOVE(34, MOVE_TEETER_DANCE), + LEVEL_UP_MOVE(38, MOVE_PSYCH_UP), + LEVEL_UP_MOVE(45, MOVE_DOUBLE_EDGE), + LEVEL_UP_MOVE(49, MOVE_FLAIL), + LEVEL_UP_MOVE(56, MOVE_THRASH), + LEVEL_UP_END +}; + +const u16 gWingullLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_GROWL), + LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), + LEVEL_UP_MOVE( 7, MOVE_SUPERSONIC), + LEVEL_UP_MOVE(13, MOVE_WING_ATTACK), + LEVEL_UP_MOVE(21, MOVE_MIST), + LEVEL_UP_MOVE(31, MOVE_QUICK_ATTACK), + LEVEL_UP_MOVE(43, MOVE_PURSUIT), + LEVEL_UP_MOVE(55, MOVE_AGILITY), + LEVEL_UP_END +}; + +const u16 gPelipperLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_GROWL), + LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), + LEVEL_UP_MOVE( 1, MOVE_WATER_SPORT), + LEVEL_UP_MOVE( 1, MOVE_WING_ATTACK), + LEVEL_UP_MOVE( 3, MOVE_WATER_GUN), + LEVEL_UP_MOVE( 7, MOVE_SUPERSONIC), + LEVEL_UP_MOVE(13, MOVE_WING_ATTACK), + LEVEL_UP_MOVE(21, MOVE_MIST), + LEVEL_UP_MOVE(25, MOVE_PROTECT), + LEVEL_UP_MOVE(33, MOVE_STOCKPILE), + LEVEL_UP_MOVE(33, MOVE_SWALLOW), + LEVEL_UP_MOVE(47, MOVE_SPIT_UP), + LEVEL_UP_MOVE(61, MOVE_HYDRO_PUMP), + LEVEL_UP_END +}; + +const u16 gSurskitLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_BUBBLE), + LEVEL_UP_MOVE( 7, MOVE_QUICK_ATTACK), + LEVEL_UP_MOVE(13, MOVE_SWEET_SCENT), + LEVEL_UP_MOVE(19, MOVE_WATER_SPORT), + LEVEL_UP_MOVE(25, MOVE_BUBBLE_BEAM), + LEVEL_UP_MOVE(31, MOVE_AGILITY), + LEVEL_UP_MOVE(37, MOVE_MIST), + LEVEL_UP_MOVE(37, MOVE_HAZE), + LEVEL_UP_END +}; + +const u16 gMasquerainLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_BUBBLE), + LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK), + LEVEL_UP_MOVE( 1, MOVE_SWEET_SCENT), + LEVEL_UP_MOVE( 1, MOVE_WATER_SPORT), + LEVEL_UP_MOVE( 7, MOVE_QUICK_ATTACK), + LEVEL_UP_MOVE(13, MOVE_SWEET_SCENT), + LEVEL_UP_MOVE(19, MOVE_WATER_SPORT), + LEVEL_UP_MOVE(26, MOVE_GUST), + LEVEL_UP_MOVE(33, MOVE_SCARY_FACE), + LEVEL_UP_MOVE(40, MOVE_STUN_SPORE), + LEVEL_UP_MOVE(47, MOVE_SILVER_WIND), + LEVEL_UP_MOVE(53, MOVE_WHIRLWIND), + LEVEL_UP_END +}; + +const u16 gWailmerLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SPLASH), + LEVEL_UP_MOVE( 5, MOVE_GROWL), + LEVEL_UP_MOVE(10, MOVE_WATER_GUN), + LEVEL_UP_MOVE(14, MOVE_ROLLOUT), + LEVEL_UP_MOVE(19, MOVE_WHIRLPOOL), + LEVEL_UP_MOVE(23, MOVE_ASTONISH), + LEVEL_UP_MOVE(28, MOVE_WATER_PULSE), + LEVEL_UP_MOVE(32, MOVE_MIST), + LEVEL_UP_MOVE(37, MOVE_REST), + LEVEL_UP_MOVE(41, MOVE_WATER_SPOUT), + LEVEL_UP_MOVE(46, MOVE_AMNESIA), + LEVEL_UP_MOVE(50, MOVE_HYDRO_PUMP), + LEVEL_UP_END +}; + +const u16 gWailordLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SPLASH), + LEVEL_UP_MOVE( 1, MOVE_GROWL), + LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), + LEVEL_UP_MOVE( 1, MOVE_ROLLOUT), + LEVEL_UP_MOVE( 5, MOVE_GROWL), + LEVEL_UP_MOVE(10, MOVE_WATER_GUN), + LEVEL_UP_MOVE(14, MOVE_ROLLOUT), + LEVEL_UP_MOVE(19, MOVE_WHIRLPOOL), + LEVEL_UP_MOVE(23, MOVE_ASTONISH), + LEVEL_UP_MOVE(28, MOVE_WATER_PULSE), + LEVEL_UP_MOVE(32, MOVE_MIST), + LEVEL_UP_MOVE(37, MOVE_REST), + LEVEL_UP_MOVE(44, MOVE_WATER_SPOUT), + LEVEL_UP_MOVE(52, MOVE_AMNESIA), + LEVEL_UP_MOVE(59, MOVE_HYDRO_PUMP), + LEVEL_UP_END +}; + +const u16 gSkittyLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_GROWL), + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 3, MOVE_TAIL_WHIP), + LEVEL_UP_MOVE( 7, MOVE_ATTRACT), + LEVEL_UP_MOVE(13, MOVE_SING), + LEVEL_UP_MOVE(15, MOVE_DOUBLE_SLAP), + LEVEL_UP_MOVE(19, MOVE_ASSIST), + LEVEL_UP_MOVE(25, MOVE_CHARM), + LEVEL_UP_MOVE(27, MOVE_FAINT_ATTACK), + LEVEL_UP_MOVE(31, MOVE_COVET), + LEVEL_UP_MOVE(37, MOVE_HEAL_BELL), + LEVEL_UP_MOVE(39, MOVE_DOUBLE_EDGE), + LEVEL_UP_END +}; + +const u16 gDelcattyLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_GROWL), + LEVEL_UP_MOVE( 1, MOVE_ATTRACT), + LEVEL_UP_MOVE( 1, MOVE_SING), + LEVEL_UP_MOVE( 1, MOVE_DOUBLE_SLAP), + LEVEL_UP_END +}; + +const u16 gKecleonLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_THIEF), + LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP), + LEVEL_UP_MOVE( 1, MOVE_ASTONISH), + LEVEL_UP_MOVE( 1, MOVE_LICK), + LEVEL_UP_MOVE( 1, MOVE_SCRATCH), + LEVEL_UP_MOVE( 4, MOVE_BIND), + LEVEL_UP_MOVE( 7, MOVE_FAINT_ATTACK), + LEVEL_UP_MOVE(12, MOVE_FURY_SWIPES), + LEVEL_UP_MOVE(17, MOVE_PSYBEAM), + LEVEL_UP_MOVE(24, MOVE_SCREECH), + LEVEL_UP_MOVE(31, MOVE_SLASH), + LEVEL_UP_MOVE(40, MOVE_SUBSTITUTE), + LEVEL_UP_MOVE(49, MOVE_ANCIENT_POWER), + LEVEL_UP_END +}; + +const u16 gBaltoyLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_CONFUSION), + LEVEL_UP_MOVE( 3, MOVE_HARDEN), + LEVEL_UP_MOVE( 5, MOVE_RAPID_SPIN), + LEVEL_UP_MOVE( 7, MOVE_MUD_SLAP), + LEVEL_UP_MOVE(11, MOVE_PSYBEAM), + LEVEL_UP_MOVE(15, MOVE_ROCK_TOMB), + LEVEL_UP_MOVE(19, MOVE_SELF_DESTRUCT), + LEVEL_UP_MOVE(25, MOVE_ANCIENT_POWER), + LEVEL_UP_MOVE(31, MOVE_SANDSTORM), + LEVEL_UP_MOVE(37, MOVE_COSMIC_POWER), + LEVEL_UP_MOVE(45, MOVE_EXPLOSION), + LEVEL_UP_END +}; + +const u16 gClaydolLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TELEPORT), + LEVEL_UP_MOVE( 1, MOVE_CONFUSION), + LEVEL_UP_MOVE( 1, MOVE_HARDEN), + LEVEL_UP_MOVE( 1, MOVE_RAPID_SPIN), + LEVEL_UP_MOVE( 3, MOVE_HARDEN), + LEVEL_UP_MOVE( 5, MOVE_RAPID_SPIN), + LEVEL_UP_MOVE( 7, MOVE_MUD_SLAP), + LEVEL_UP_MOVE(11, MOVE_PSYBEAM), + LEVEL_UP_MOVE(15, MOVE_ROCK_TOMB), + LEVEL_UP_MOVE(19, MOVE_SELF_DESTRUCT), + LEVEL_UP_MOVE(25, MOVE_ANCIENT_POWER), + LEVEL_UP_MOVE(31, MOVE_SANDSTORM), + LEVEL_UP_MOVE(36, MOVE_HYPER_BEAM), + LEVEL_UP_MOVE(42, MOVE_COSMIC_POWER), + LEVEL_UP_MOVE(55, MOVE_EXPLOSION), + LEVEL_UP_END +}; + +const u16 gNosepassLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 7, MOVE_HARDEN), + LEVEL_UP_MOVE(13, MOVE_ROCK_THROW), + LEVEL_UP_MOVE(16, MOVE_BLOCK), + LEVEL_UP_MOVE(22, MOVE_THUNDER_WAVE), + LEVEL_UP_MOVE(28, MOVE_ROCK_SLIDE), + LEVEL_UP_MOVE(31, MOVE_SANDSTORM), + LEVEL_UP_MOVE(37, MOVE_REST), + LEVEL_UP_MOVE(43, MOVE_ZAP_CANNON), + LEVEL_UP_MOVE(46, MOVE_LOCK_ON), + LEVEL_UP_END +}; + +const u16 gTorkoalLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_EMBER), + LEVEL_UP_MOVE( 4, MOVE_SMOG), + LEVEL_UP_MOVE( 7, MOVE_CURSE), + LEVEL_UP_MOVE(14, MOVE_SMOKESCREEN), + LEVEL_UP_MOVE(17, MOVE_FIRE_SPIN), + LEVEL_UP_MOVE(20, MOVE_BODY_SLAM), + LEVEL_UP_MOVE(27, MOVE_PROTECT), + LEVEL_UP_MOVE(30, MOVE_FLAMETHROWER), + LEVEL_UP_MOVE(33, MOVE_IRON_DEFENSE), + LEVEL_UP_MOVE(40, MOVE_AMNESIA), + LEVEL_UP_MOVE(43, MOVE_FLAIL), + LEVEL_UP_MOVE(46, MOVE_HEAT_WAVE), + LEVEL_UP_END +}; + +const u16 gSableyeLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 1, MOVE_SCRATCH), + LEVEL_UP_MOVE( 5, MOVE_FORESIGHT), + LEVEL_UP_MOVE( 9, MOVE_NIGHT_SHADE), + LEVEL_UP_MOVE(13, MOVE_ASTONISH), + LEVEL_UP_MOVE(17, MOVE_FURY_SWIPES), + LEVEL_UP_MOVE(21, MOVE_FAKE_OUT), + LEVEL_UP_MOVE(25, MOVE_DETECT), + LEVEL_UP_MOVE(29, MOVE_FAINT_ATTACK), + LEVEL_UP_MOVE(33, MOVE_KNOCK_OFF), + LEVEL_UP_MOVE(37, MOVE_CONFUSE_RAY), + LEVEL_UP_MOVE(41, MOVE_SHADOW_BALL), + LEVEL_UP_MOVE(45, MOVE_MEAN_LOOK), + LEVEL_UP_END +}; + +const u16 gBarboachLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_MUD_SLAP), + LEVEL_UP_MOVE( 6, MOVE_MUD_SPORT), + LEVEL_UP_MOVE( 6, MOVE_WATER_SPORT), + LEVEL_UP_MOVE(11, MOVE_WATER_GUN), + LEVEL_UP_MOVE(16, MOVE_MAGNITUDE), + LEVEL_UP_MOVE(21, MOVE_AMNESIA), + LEVEL_UP_MOVE(26, MOVE_REST), + LEVEL_UP_MOVE(26, MOVE_SNORE), + LEVEL_UP_MOVE(31, MOVE_EARTHQUAKE), + LEVEL_UP_MOVE(36, MOVE_FUTURE_SIGHT), + LEVEL_UP_MOVE(41, MOVE_FISSURE), + LEVEL_UP_END +}; + +const u16 gWhiscashLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TICKLE), + LEVEL_UP_MOVE( 1, MOVE_MUD_SLAP), + LEVEL_UP_MOVE( 1, MOVE_MUD_SPORT), + LEVEL_UP_MOVE( 1, MOVE_WATER_SPORT), + LEVEL_UP_MOVE( 6, MOVE_MUD_SPORT), + LEVEL_UP_MOVE( 6, MOVE_WATER_SPORT), + LEVEL_UP_MOVE(11, MOVE_WATER_GUN), + LEVEL_UP_MOVE(16, MOVE_MAGNITUDE), + LEVEL_UP_MOVE(21, MOVE_AMNESIA), + LEVEL_UP_MOVE(26, MOVE_REST), + LEVEL_UP_MOVE(26, MOVE_SNORE), + LEVEL_UP_MOVE(36, MOVE_EARTHQUAKE), + LEVEL_UP_MOVE(46, MOVE_FUTURE_SIGHT), + LEVEL_UP_MOVE(56, MOVE_FISSURE), + LEVEL_UP_END +}; + +const u16 gLuvdiscLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 4, MOVE_CHARM), + LEVEL_UP_MOVE(12, MOVE_WATER_GUN), + LEVEL_UP_MOVE(16, MOVE_AGILITY), + LEVEL_UP_MOVE(24, MOVE_TAKE_DOWN), + LEVEL_UP_MOVE(28, MOVE_ATTRACT), + LEVEL_UP_MOVE(36, MOVE_SWEET_KISS), + LEVEL_UP_MOVE(40, MOVE_FLAIL), + LEVEL_UP_MOVE(48, MOVE_SAFEGUARD), + LEVEL_UP_END +}; + +const u16 gCorphishLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_BUBBLE), + LEVEL_UP_MOVE( 7, MOVE_HARDEN), + LEVEL_UP_MOVE(10, MOVE_VICE_GRIP), + LEVEL_UP_MOVE(13, MOVE_LEER), + LEVEL_UP_MOVE(20, MOVE_BUBBLE_BEAM), + LEVEL_UP_MOVE(23, MOVE_PROTECT), + LEVEL_UP_MOVE(26, MOVE_KNOCK_OFF), + LEVEL_UP_MOVE(32, MOVE_TAUNT), + LEVEL_UP_MOVE(35, MOVE_CRABHAMMER), + LEVEL_UP_MOVE(38, MOVE_SWORDS_DANCE), + LEVEL_UP_MOVE(44, MOVE_GUILLOTINE), + LEVEL_UP_END +}; + +const u16 gCrawdauntLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_BUBBLE), + LEVEL_UP_MOVE( 1, MOVE_HARDEN), + LEVEL_UP_MOVE( 1, MOVE_VICE_GRIP), + LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 7, MOVE_HARDEN), + LEVEL_UP_MOVE(10, MOVE_VICE_GRIP), + LEVEL_UP_MOVE(13, MOVE_LEER), + LEVEL_UP_MOVE(20, MOVE_BUBBLE_BEAM), + LEVEL_UP_MOVE(23, MOVE_PROTECT), + LEVEL_UP_MOVE(26, MOVE_KNOCK_OFF), + LEVEL_UP_MOVE(34, MOVE_TAUNT), + LEVEL_UP_MOVE(39, MOVE_CRABHAMMER), + LEVEL_UP_MOVE(44, MOVE_SWORDS_DANCE), + LEVEL_UP_MOVE(52, MOVE_GUILLOTINE), + LEVEL_UP_END +}; + +const u16 gFeebasLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SPLASH), + LEVEL_UP_MOVE(15, MOVE_TACKLE), + LEVEL_UP_MOVE(30, MOVE_FLAIL), + LEVEL_UP_END +}; + +const u16 gMiloticLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), + LEVEL_UP_MOVE( 5, MOVE_WRAP), + LEVEL_UP_MOVE(10, MOVE_WATER_SPORT), + LEVEL_UP_MOVE(15, MOVE_REFRESH), + LEVEL_UP_MOVE(20, MOVE_WATER_PULSE), + LEVEL_UP_MOVE(25, MOVE_TWISTER), + LEVEL_UP_MOVE(30, MOVE_RECOVER), + LEVEL_UP_MOVE(35, MOVE_RAIN_DANCE), + LEVEL_UP_MOVE(40, MOVE_HYDRO_PUMP), + LEVEL_UP_MOVE(45, MOVE_ATTRACT), + LEVEL_UP_MOVE(50, MOVE_SAFEGUARD), + LEVEL_UP_END +}; + +const u16 gCarvanhaLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 1, MOVE_BITE), + LEVEL_UP_MOVE( 7, MOVE_RAGE), + LEVEL_UP_MOVE(13, MOVE_FOCUS_ENERGY), + LEVEL_UP_MOVE(16, MOVE_SCARY_FACE), + LEVEL_UP_MOVE(22, MOVE_CRUNCH), + LEVEL_UP_MOVE(28, MOVE_SCREECH), + LEVEL_UP_MOVE(31, MOVE_TAKE_DOWN), + LEVEL_UP_MOVE(37, MOVE_SWAGGER), + LEVEL_UP_MOVE(43, MOVE_AGILITY), + LEVEL_UP_END +}; + +const u16 gSharpedoLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 1, MOVE_BITE), + LEVEL_UP_MOVE( 1, MOVE_RAGE), + LEVEL_UP_MOVE( 1, MOVE_FOCUS_ENERGY), + LEVEL_UP_MOVE( 7, MOVE_RAGE), + LEVEL_UP_MOVE(13, MOVE_FOCUS_ENERGY), + LEVEL_UP_MOVE(16, MOVE_SCARY_FACE), + LEVEL_UP_MOVE(22, MOVE_CRUNCH), + LEVEL_UP_MOVE(28, MOVE_SCREECH), + LEVEL_UP_MOVE(33, MOVE_SLASH), + LEVEL_UP_MOVE(38, MOVE_TAUNT), + LEVEL_UP_MOVE(43, MOVE_SWAGGER), + LEVEL_UP_MOVE(48, MOVE_SKULL_BASH), + LEVEL_UP_MOVE(53, MOVE_AGILITY), + LEVEL_UP_END +}; + +const u16 gTrapinchLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_BITE), + LEVEL_UP_MOVE( 9, MOVE_SAND_ATTACK), + LEVEL_UP_MOVE(17, MOVE_FAINT_ATTACK), + LEVEL_UP_MOVE(25, MOVE_SAND_TOMB), + LEVEL_UP_MOVE(33, MOVE_CRUNCH), + LEVEL_UP_MOVE(41, MOVE_DIG), + LEVEL_UP_MOVE(49, MOVE_SANDSTORM), + LEVEL_UP_MOVE(57, MOVE_HYPER_BEAM), + LEVEL_UP_END +}; + +const u16 gVibravaLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_BITE), + LEVEL_UP_MOVE( 1, MOVE_SAND_ATTACK), + LEVEL_UP_MOVE( 1, MOVE_FAINT_ATTACK), + LEVEL_UP_MOVE( 1, MOVE_SAND_TOMB), + LEVEL_UP_MOVE( 9, MOVE_SAND_ATTACK), + LEVEL_UP_MOVE(17, MOVE_FAINT_ATTACK), + LEVEL_UP_MOVE(25, MOVE_SAND_TOMB), + LEVEL_UP_MOVE(33, MOVE_CRUNCH), + LEVEL_UP_MOVE(35, MOVE_DRAGON_BREATH), + LEVEL_UP_MOVE(41, MOVE_SCREECH), + LEVEL_UP_MOVE(49, MOVE_SANDSTORM), + LEVEL_UP_MOVE(57, MOVE_HYPER_BEAM), + LEVEL_UP_END +}; + +const u16 gFlygonLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_BITE), + LEVEL_UP_MOVE( 1, MOVE_SAND_ATTACK), + LEVEL_UP_MOVE( 1, MOVE_FAINT_ATTACK), + LEVEL_UP_MOVE( 1, MOVE_SAND_TOMB), + LEVEL_UP_MOVE( 9, MOVE_SAND_ATTACK), + LEVEL_UP_MOVE(17, MOVE_FAINT_ATTACK), + LEVEL_UP_MOVE(25, MOVE_SAND_TOMB), + LEVEL_UP_MOVE(33, MOVE_CRUNCH), + LEVEL_UP_MOVE(35, MOVE_DRAGON_BREATH), + LEVEL_UP_MOVE(41, MOVE_SCREECH), + LEVEL_UP_MOVE(53, MOVE_SANDSTORM), + LEVEL_UP_MOVE(65, MOVE_HYPER_BEAM), + LEVEL_UP_END +}; + +const u16 gMakuhitaLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_FOCUS_ENERGY), + LEVEL_UP_MOVE( 4, MOVE_SAND_ATTACK), + LEVEL_UP_MOVE(10, MOVE_ARM_THRUST), + LEVEL_UP_MOVE(13, MOVE_VITAL_THROW), + LEVEL_UP_MOVE(19, MOVE_FAKE_OUT), + LEVEL_UP_MOVE(22, MOVE_WHIRLWIND), + LEVEL_UP_MOVE(28, MOVE_KNOCK_OFF), + LEVEL_UP_MOVE(31, MOVE_SMELLING_SALT), + LEVEL_UP_MOVE(37, MOVE_BELLY_DRUM), + LEVEL_UP_MOVE(40, MOVE_ENDURE), + LEVEL_UP_MOVE(46, MOVE_SEISMIC_TOSS), + LEVEL_UP_MOVE(49, MOVE_REVERSAL), + LEVEL_UP_END +}; + +const u16 gHariyamaLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_FOCUS_ENERGY), + LEVEL_UP_MOVE( 1, MOVE_SAND_ATTACK), + LEVEL_UP_MOVE( 1, MOVE_ARM_THRUST), + LEVEL_UP_MOVE( 4, MOVE_SAND_ATTACK), + LEVEL_UP_MOVE(10, MOVE_ARM_THRUST), + LEVEL_UP_MOVE(13, MOVE_VITAL_THROW), + LEVEL_UP_MOVE(19, MOVE_FAKE_OUT), + LEVEL_UP_MOVE(22, MOVE_WHIRLWIND), + LEVEL_UP_MOVE(29, MOVE_KNOCK_OFF), + LEVEL_UP_MOVE(33, MOVE_SMELLING_SALT), + LEVEL_UP_MOVE(40, MOVE_BELLY_DRUM), + LEVEL_UP_MOVE(44, MOVE_ENDURE), + LEVEL_UP_MOVE(51, MOVE_SEISMIC_TOSS), + LEVEL_UP_MOVE(55, MOVE_REVERSAL), + LEVEL_UP_END +}; + +const u16 gElectrikeLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 4, MOVE_THUNDER_WAVE), + LEVEL_UP_MOVE( 9, MOVE_LEER), + LEVEL_UP_MOVE(12, MOVE_HOWL), + LEVEL_UP_MOVE(17, MOVE_QUICK_ATTACK), + LEVEL_UP_MOVE(20, MOVE_SPARK), + LEVEL_UP_MOVE(25, MOVE_ODOR_SLEUTH), + LEVEL_UP_MOVE(28, MOVE_ROAR), + LEVEL_UP_MOVE(33, MOVE_BITE), + LEVEL_UP_MOVE(36, MOVE_THUNDER), + LEVEL_UP_MOVE(41, MOVE_CHARGE), + LEVEL_UP_END +}; + +const u16 gManectricLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_THUNDER_WAVE), + LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 1, MOVE_HOWL), + LEVEL_UP_MOVE( 4, MOVE_THUNDER_WAVE), + LEVEL_UP_MOVE( 9, MOVE_LEER), + LEVEL_UP_MOVE(12, MOVE_HOWL), + LEVEL_UP_MOVE(17, MOVE_QUICK_ATTACK), + LEVEL_UP_MOVE(20, MOVE_SPARK), + LEVEL_UP_MOVE(25, MOVE_ODOR_SLEUTH), + LEVEL_UP_MOVE(31, MOVE_ROAR), + LEVEL_UP_MOVE(39, MOVE_BITE), + LEVEL_UP_MOVE(45, MOVE_THUNDER), + LEVEL_UP_MOVE(53, MOVE_CHARGE), + LEVEL_UP_END +}; + +const u16 gNumelLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_GROWL), + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE(11, MOVE_EMBER), + LEVEL_UP_MOVE(19, MOVE_MAGNITUDE), + LEVEL_UP_MOVE(25, MOVE_FOCUS_ENERGY), + LEVEL_UP_MOVE(29, MOVE_TAKE_DOWN), + LEVEL_UP_MOVE(31, MOVE_AMNESIA), + LEVEL_UP_MOVE(35, MOVE_EARTHQUAKE), + LEVEL_UP_MOVE(41, MOVE_FLAMETHROWER), + LEVEL_UP_MOVE(49, MOVE_DOUBLE_EDGE), + LEVEL_UP_END +}; + +const u16 gCameruptLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_GROWL), + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_EMBER), + LEVEL_UP_MOVE( 1, MOVE_MAGNITUDE), + LEVEL_UP_MOVE(11, MOVE_EMBER), + LEVEL_UP_MOVE(19, MOVE_MAGNITUDE), + LEVEL_UP_MOVE(25, MOVE_FOCUS_ENERGY), + LEVEL_UP_MOVE(29, MOVE_TAKE_DOWN), + LEVEL_UP_MOVE(31, MOVE_AMNESIA), + LEVEL_UP_MOVE(33, MOVE_ROCK_SLIDE), + LEVEL_UP_MOVE(37, MOVE_EARTHQUAKE), + LEVEL_UP_MOVE(45, MOVE_ERUPTION), + LEVEL_UP_MOVE(55, MOVE_FISSURE), + LEVEL_UP_END +}; + +const u16 gSphealLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_POWDER_SNOW), + LEVEL_UP_MOVE( 1, MOVE_GROWL), + LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), + LEVEL_UP_MOVE( 7, MOVE_ENCORE), + LEVEL_UP_MOVE(13, MOVE_ICE_BALL), + LEVEL_UP_MOVE(19, MOVE_BODY_SLAM), + LEVEL_UP_MOVE(25, MOVE_AURORA_BEAM), + LEVEL_UP_MOVE(31, MOVE_HAIL), + LEVEL_UP_MOVE(37, MOVE_REST), + LEVEL_UP_MOVE(37, MOVE_SNORE), + LEVEL_UP_MOVE(43, MOVE_BLIZZARD), + LEVEL_UP_MOVE(49, MOVE_SHEER_COLD), + LEVEL_UP_END +}; + +const u16 gSealeoLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_POWDER_SNOW), + LEVEL_UP_MOVE( 1, MOVE_GROWL), + LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), + LEVEL_UP_MOVE( 1, MOVE_ENCORE), + LEVEL_UP_MOVE( 7, MOVE_ENCORE), + LEVEL_UP_MOVE(13, MOVE_ICE_BALL), + LEVEL_UP_MOVE(19, MOVE_BODY_SLAM), + LEVEL_UP_MOVE(25, MOVE_AURORA_BEAM), + LEVEL_UP_MOVE(31, MOVE_HAIL), + LEVEL_UP_MOVE(39, MOVE_REST), + LEVEL_UP_MOVE(39, MOVE_SNORE), + LEVEL_UP_MOVE(47, MOVE_BLIZZARD), + LEVEL_UP_MOVE(55, MOVE_SHEER_COLD), + LEVEL_UP_END +}; + +const u16 gWalreinLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_POWDER_SNOW), + LEVEL_UP_MOVE( 1, MOVE_GROWL), + LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), + LEVEL_UP_MOVE( 1, MOVE_ENCORE), + LEVEL_UP_MOVE( 7, MOVE_ENCORE), + LEVEL_UP_MOVE(13, MOVE_ICE_BALL), + LEVEL_UP_MOVE(19, MOVE_BODY_SLAM), + LEVEL_UP_MOVE(25, MOVE_AURORA_BEAM), + LEVEL_UP_MOVE(31, MOVE_HAIL), + LEVEL_UP_MOVE(39, MOVE_REST), + LEVEL_UP_MOVE(39, MOVE_SNORE), + LEVEL_UP_MOVE(50, MOVE_BLIZZARD), + LEVEL_UP_MOVE(61, MOVE_SHEER_COLD), + LEVEL_UP_END +}; + +const u16 gCacneaLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_POISON_STING), + LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 5, MOVE_ABSORB), + LEVEL_UP_MOVE( 9, MOVE_GROWTH), + LEVEL_UP_MOVE(13, MOVE_LEECH_SEED), + LEVEL_UP_MOVE(17, MOVE_SAND_ATTACK), + LEVEL_UP_MOVE(21, MOVE_PIN_MISSILE), + LEVEL_UP_MOVE(25, MOVE_INGRAIN), + LEVEL_UP_MOVE(29, MOVE_FAINT_ATTACK), + LEVEL_UP_MOVE(33, MOVE_SPIKES), + LEVEL_UP_MOVE(37, MOVE_NEEDLE_ARM), + LEVEL_UP_MOVE(41, MOVE_COTTON_SPORE), + LEVEL_UP_MOVE(45, MOVE_SANDSTORM), + LEVEL_UP_END +}; + +const u16 gCacturneLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_POISON_STING), + LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 1, MOVE_ABSORB), + LEVEL_UP_MOVE( 1, MOVE_GROWTH), + LEVEL_UP_MOVE( 5, MOVE_ABSORB), + LEVEL_UP_MOVE( 9, MOVE_GROWTH), + LEVEL_UP_MOVE(13, MOVE_LEECH_SEED), + LEVEL_UP_MOVE(17, MOVE_SAND_ATTACK), + LEVEL_UP_MOVE(21, MOVE_PIN_MISSILE), + LEVEL_UP_MOVE(25, MOVE_INGRAIN), + LEVEL_UP_MOVE(29, MOVE_FAINT_ATTACK), + LEVEL_UP_MOVE(35, MOVE_SPIKES), + LEVEL_UP_MOVE(41, MOVE_NEEDLE_ARM), + LEVEL_UP_MOVE(47, MOVE_COTTON_SPORE), + LEVEL_UP_MOVE(53, MOVE_SANDSTORM), + LEVEL_UP_END +}; + +const u16 gSnoruntLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_POWDER_SNOW), + LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 7, MOVE_DOUBLE_TEAM), + LEVEL_UP_MOVE(10, MOVE_BITE), + LEVEL_UP_MOVE(16, MOVE_ICY_WIND), + LEVEL_UP_MOVE(19, MOVE_HEADBUTT), + LEVEL_UP_MOVE(25, MOVE_PROTECT), + LEVEL_UP_MOVE(28, MOVE_CRUNCH), + LEVEL_UP_MOVE(34, MOVE_ICE_BEAM), + LEVEL_UP_MOVE(37, MOVE_HAIL), + LEVEL_UP_MOVE(43, MOVE_BLIZZARD), + LEVEL_UP_END +}; + +const u16 gGlalieLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_POWDER_SNOW), + LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 1, MOVE_DOUBLE_TEAM), + LEVEL_UP_MOVE( 1, MOVE_BITE), + LEVEL_UP_MOVE( 7, MOVE_DOUBLE_TEAM), + LEVEL_UP_MOVE(10, MOVE_BITE), + LEVEL_UP_MOVE(16, MOVE_ICY_WIND), + LEVEL_UP_MOVE(19, MOVE_HEADBUTT), + LEVEL_UP_MOVE(25, MOVE_PROTECT), + LEVEL_UP_MOVE(28, MOVE_CRUNCH), + LEVEL_UP_MOVE(34, MOVE_ICE_BEAM), + LEVEL_UP_MOVE(42, MOVE_HAIL), + LEVEL_UP_MOVE(53, MOVE_BLIZZARD), + LEVEL_UP_MOVE(61, MOVE_SHEER_COLD), + LEVEL_UP_END +}; + +const u16 gLunatoneLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_HARDEN), + LEVEL_UP_MOVE( 7, MOVE_CONFUSION), + LEVEL_UP_MOVE(13, MOVE_ROCK_THROW), + LEVEL_UP_MOVE(19, MOVE_HYPNOSIS), + LEVEL_UP_MOVE(25, MOVE_PSYWAVE), + LEVEL_UP_MOVE(31, MOVE_COSMIC_POWER), + LEVEL_UP_MOVE(37, MOVE_PSYCHIC), + LEVEL_UP_MOVE(43, MOVE_FUTURE_SIGHT), + LEVEL_UP_MOVE(49, MOVE_EXPLOSION), + LEVEL_UP_END +}; + +const u16 gSolrockLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_HARDEN), + LEVEL_UP_MOVE( 7, MOVE_CONFUSION), + LEVEL_UP_MOVE(13, MOVE_ROCK_THROW), + LEVEL_UP_MOVE(19, MOVE_FIRE_SPIN), + LEVEL_UP_MOVE(25, MOVE_PSYWAVE), + LEVEL_UP_MOVE(31, MOVE_COSMIC_POWER), + LEVEL_UP_MOVE(37, MOVE_ROCK_SLIDE), + LEVEL_UP_MOVE(43, MOVE_SOLAR_BEAM), + LEVEL_UP_MOVE(49, MOVE_EXPLOSION), + LEVEL_UP_END +}; + +const u16 gAzurillLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SPLASH), + LEVEL_UP_MOVE( 3, MOVE_CHARM), + LEVEL_UP_MOVE( 6, MOVE_TAIL_WHIP), + LEVEL_UP_MOVE(10, MOVE_BUBBLE), + LEVEL_UP_MOVE(15, MOVE_SLAM), + LEVEL_UP_MOVE(21, MOVE_WATER_GUN), + LEVEL_UP_END +}; + +const u16 gSpoinkLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SPLASH), + LEVEL_UP_MOVE( 7, MOVE_PSYWAVE), + LEVEL_UP_MOVE(10, MOVE_ODOR_SLEUTH), + LEVEL_UP_MOVE(16, MOVE_PSYBEAM), + LEVEL_UP_MOVE(19, MOVE_PSYCH_UP), + LEVEL_UP_MOVE(25, MOVE_CONFUSE_RAY), + LEVEL_UP_MOVE(28, MOVE_MAGIC_COAT), + LEVEL_UP_MOVE(34, MOVE_PSYCHIC), + LEVEL_UP_MOVE(37, MOVE_REST), + LEVEL_UP_MOVE(37, MOVE_SNORE), + LEVEL_UP_MOVE(43, MOVE_BOUNCE), + LEVEL_UP_END +}; + +const u16 gGrumpigLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SPLASH), + LEVEL_UP_MOVE( 1, MOVE_PSYWAVE), + LEVEL_UP_MOVE( 1, MOVE_ODOR_SLEUTH), + LEVEL_UP_MOVE( 1, MOVE_PSYBEAM), + LEVEL_UP_MOVE( 7, MOVE_PSYWAVE), + LEVEL_UP_MOVE(10, MOVE_ODOR_SLEUTH), + LEVEL_UP_MOVE(16, MOVE_PSYBEAM), + LEVEL_UP_MOVE(19, MOVE_PSYCH_UP), + LEVEL_UP_MOVE(25, MOVE_CONFUSE_RAY), + LEVEL_UP_MOVE(28, MOVE_MAGIC_COAT), + LEVEL_UP_MOVE(37, MOVE_PSYCHIC), + LEVEL_UP_MOVE(43, MOVE_REST), + LEVEL_UP_MOVE(43, MOVE_SNORE), + LEVEL_UP_MOVE(55, MOVE_BOUNCE), + LEVEL_UP_END +}; + +const u16 gPlusleLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_GROWL), + LEVEL_UP_MOVE( 4, MOVE_THUNDER_WAVE), + LEVEL_UP_MOVE(10, MOVE_QUICK_ATTACK), + LEVEL_UP_MOVE(13, MOVE_HELPING_HAND), + LEVEL_UP_MOVE(19, MOVE_SPARK), + LEVEL_UP_MOVE(22, MOVE_ENCORE), + LEVEL_UP_MOVE(28, MOVE_FAKE_TEARS), + LEVEL_UP_MOVE(31, MOVE_CHARGE), + LEVEL_UP_MOVE(37, MOVE_THUNDER), + LEVEL_UP_MOVE(40, MOVE_BATON_PASS), + LEVEL_UP_MOVE(47, MOVE_AGILITY), + LEVEL_UP_END +}; + +const u16 gMinunLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_GROWL), + LEVEL_UP_MOVE( 4, MOVE_THUNDER_WAVE), + LEVEL_UP_MOVE(10, MOVE_QUICK_ATTACK), + LEVEL_UP_MOVE(13, MOVE_HELPING_HAND), + LEVEL_UP_MOVE(19, MOVE_SPARK), + LEVEL_UP_MOVE(22, MOVE_ENCORE), + LEVEL_UP_MOVE(28, MOVE_CHARM), + LEVEL_UP_MOVE(31, MOVE_CHARGE), + LEVEL_UP_MOVE(37, MOVE_THUNDER), + LEVEL_UP_MOVE(40, MOVE_BATON_PASS), + LEVEL_UP_MOVE(47, MOVE_AGILITY), + LEVEL_UP_END +}; + +const u16 gMawileLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_ASTONISH), + LEVEL_UP_MOVE( 6, MOVE_FAKE_TEARS), + LEVEL_UP_MOVE(11, MOVE_BITE), + LEVEL_UP_MOVE(16, MOVE_SWEET_SCENT), + LEVEL_UP_MOVE(21, MOVE_VICE_GRIP), + LEVEL_UP_MOVE(26, MOVE_FAINT_ATTACK), + LEVEL_UP_MOVE(31, MOVE_BATON_PASS), + LEVEL_UP_MOVE(36, MOVE_CRUNCH), + LEVEL_UP_MOVE(41, MOVE_IRON_DEFENSE), + LEVEL_UP_MOVE(46, MOVE_STOCKPILE), + LEVEL_UP_MOVE(46, MOVE_SWALLOW), + LEVEL_UP_MOVE(46, MOVE_SPIT_UP), + LEVEL_UP_END +}; + +const u16 gMedititeLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_BIDE), + LEVEL_UP_MOVE( 4, MOVE_MEDITATE), + LEVEL_UP_MOVE( 9, MOVE_CONFUSION), + LEVEL_UP_MOVE(12, MOVE_DETECT), + LEVEL_UP_MOVE(18, MOVE_HIDDEN_POWER), + LEVEL_UP_MOVE(22, MOVE_MIND_READER), + LEVEL_UP_MOVE(28, MOVE_CALM_MIND), + LEVEL_UP_MOVE(32, MOVE_HI_JUMP_KICK), + LEVEL_UP_MOVE(38, MOVE_PSYCH_UP), + LEVEL_UP_MOVE(42, MOVE_REVERSAL), + LEVEL_UP_MOVE(48, MOVE_RECOVER), + LEVEL_UP_END +}; + +const u16 gMedichamLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_FIRE_PUNCH), + LEVEL_UP_MOVE( 1, MOVE_THUNDER_PUNCH), + LEVEL_UP_MOVE( 1, MOVE_ICE_PUNCH), + LEVEL_UP_MOVE( 1, MOVE_BIDE), + LEVEL_UP_MOVE( 1, MOVE_MEDITATE), + LEVEL_UP_MOVE( 1, MOVE_CONFUSION), + LEVEL_UP_MOVE( 1, MOVE_DETECT), + LEVEL_UP_MOVE( 4, MOVE_MEDITATE), + LEVEL_UP_MOVE( 9, MOVE_CONFUSION), + LEVEL_UP_MOVE(12, MOVE_DETECT), + LEVEL_UP_MOVE(18, MOVE_HIDDEN_POWER), + LEVEL_UP_MOVE(22, MOVE_MIND_READER), + LEVEL_UP_MOVE(28, MOVE_CALM_MIND), + LEVEL_UP_MOVE(32, MOVE_HI_JUMP_KICK), + LEVEL_UP_MOVE(40, MOVE_PSYCH_UP), + LEVEL_UP_MOVE(46, MOVE_REVERSAL), + LEVEL_UP_MOVE(54, MOVE_RECOVER), + LEVEL_UP_END +}; + +const u16 gSwabluLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_PECK), + LEVEL_UP_MOVE( 1, MOVE_GROWL), + LEVEL_UP_MOVE( 8, MOVE_ASTONISH), + LEVEL_UP_MOVE(11, MOVE_SING), + LEVEL_UP_MOVE(18, MOVE_FURY_ATTACK), + LEVEL_UP_MOVE(21, MOVE_SAFEGUARD), + LEVEL_UP_MOVE(28, MOVE_MIST), + LEVEL_UP_MOVE(31, MOVE_TAKE_DOWN), + LEVEL_UP_MOVE(38, MOVE_MIRROR_MOVE), + LEVEL_UP_MOVE(41, MOVE_REFRESH), + LEVEL_UP_MOVE(48, MOVE_PERISH_SONG), + LEVEL_UP_END +}; + +const u16 gAltariaLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_PECK), + LEVEL_UP_MOVE( 1, MOVE_GROWL), + LEVEL_UP_MOVE( 1, MOVE_ASTONISH), + LEVEL_UP_MOVE( 1, MOVE_SING), + LEVEL_UP_MOVE( 8, MOVE_ASTONISH), + LEVEL_UP_MOVE(11, MOVE_SING), + LEVEL_UP_MOVE(18, MOVE_FURY_ATTACK), + LEVEL_UP_MOVE(21, MOVE_SAFEGUARD), + LEVEL_UP_MOVE(28, MOVE_MIST), + LEVEL_UP_MOVE(31, MOVE_TAKE_DOWN), + LEVEL_UP_MOVE(35, MOVE_DRAGON_BREATH), + LEVEL_UP_MOVE(40, MOVE_DRAGON_DANCE), + LEVEL_UP_MOVE(45, MOVE_REFRESH), + LEVEL_UP_MOVE(54, MOVE_PERISH_SONG), + LEVEL_UP_MOVE(59, MOVE_SKY_ATTACK), + LEVEL_UP_END +}; + +const u16 gWynautLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SPLASH), + LEVEL_UP_MOVE( 1, MOVE_CHARM), + LEVEL_UP_MOVE( 1, MOVE_ENCORE), + LEVEL_UP_MOVE(15, MOVE_COUNTER), + LEVEL_UP_MOVE(15, MOVE_MIRROR_COAT), + LEVEL_UP_MOVE(15, MOVE_SAFEGUARD), + LEVEL_UP_MOVE(15, MOVE_DESTINY_BOND), + LEVEL_UP_END +}; + +const u16 gDuskullLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 1, MOVE_NIGHT_SHADE), + LEVEL_UP_MOVE( 5, MOVE_DISABLE), + LEVEL_UP_MOVE(12, MOVE_FORESIGHT), + LEVEL_UP_MOVE(16, MOVE_ASTONISH), + LEVEL_UP_MOVE(23, MOVE_CONFUSE_RAY), + LEVEL_UP_MOVE(27, MOVE_PURSUIT), + LEVEL_UP_MOVE(34, MOVE_CURSE), + LEVEL_UP_MOVE(38, MOVE_WILL_O_WISP), + LEVEL_UP_MOVE(45, MOVE_MEAN_LOOK), + LEVEL_UP_MOVE(49, MOVE_FUTURE_SIGHT), + LEVEL_UP_END +}; + +const u16 gDusclopsLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_BIND), + LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 1, MOVE_NIGHT_SHADE), + LEVEL_UP_MOVE( 1, MOVE_DISABLE), + LEVEL_UP_MOVE( 5, MOVE_DISABLE), + LEVEL_UP_MOVE(12, MOVE_FORESIGHT), + LEVEL_UP_MOVE(16, MOVE_ASTONISH), + LEVEL_UP_MOVE(23, MOVE_CONFUSE_RAY), + LEVEL_UP_MOVE(27, MOVE_PURSUIT), + LEVEL_UP_MOVE(34, MOVE_CURSE), + LEVEL_UP_MOVE(37, MOVE_SHADOW_PUNCH), + LEVEL_UP_MOVE(41, MOVE_WILL_O_WISP), + LEVEL_UP_MOVE(51, MOVE_MEAN_LOOK), + LEVEL_UP_MOVE(58, MOVE_FUTURE_SIGHT), + LEVEL_UP_END +}; + +const u16 gRoseliaLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_ABSORB), + LEVEL_UP_MOVE( 5, MOVE_GROWTH), + LEVEL_UP_MOVE( 9, MOVE_POISON_STING), + LEVEL_UP_MOVE(13, MOVE_STUN_SPORE), + LEVEL_UP_MOVE(17, MOVE_MEGA_DRAIN), + LEVEL_UP_MOVE(21, MOVE_LEECH_SEED), + LEVEL_UP_MOVE(25, MOVE_MAGICAL_LEAF), + LEVEL_UP_MOVE(29, MOVE_GRASS_WHISTLE), + LEVEL_UP_MOVE(33, MOVE_GIGA_DRAIN), + LEVEL_UP_MOVE(37, MOVE_SWEET_SCENT), + LEVEL_UP_MOVE(41, MOVE_INGRAIN), + LEVEL_UP_MOVE(45, MOVE_TOXIC), + LEVEL_UP_MOVE(49, MOVE_PETAL_DANCE), + LEVEL_UP_MOVE(53, MOVE_AROMATHERAPY), + LEVEL_UP_MOVE(57, MOVE_SYNTHESIS), + LEVEL_UP_END +}; + +const u16 gSlakothLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SCRATCH), + LEVEL_UP_MOVE( 1, MOVE_YAWN), + LEVEL_UP_MOVE( 7, MOVE_ENCORE), + LEVEL_UP_MOVE(13, MOVE_SLACK_OFF), + LEVEL_UP_MOVE(19, MOVE_FAINT_ATTACK), + LEVEL_UP_MOVE(25, MOVE_AMNESIA), + LEVEL_UP_MOVE(31, MOVE_COVET), + LEVEL_UP_MOVE(37, MOVE_COUNTER), + LEVEL_UP_MOVE(43, MOVE_FLAIL), + LEVEL_UP_END +}; + +const u16 gVigorothLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SCRATCH), + LEVEL_UP_MOVE( 1, MOVE_FOCUS_ENERGY), + LEVEL_UP_MOVE( 1, MOVE_ENCORE), + LEVEL_UP_MOVE( 1, MOVE_UPROAR), + LEVEL_UP_MOVE( 7, MOVE_ENCORE), + LEVEL_UP_MOVE(13, MOVE_UPROAR), + LEVEL_UP_MOVE(19, MOVE_FURY_SWIPES), + LEVEL_UP_MOVE(25, MOVE_ENDURE), + LEVEL_UP_MOVE(31, MOVE_SLASH), + LEVEL_UP_MOVE(37, MOVE_COUNTER), + LEVEL_UP_MOVE(43, MOVE_FOCUS_PUNCH), + LEVEL_UP_MOVE(49, MOVE_REVERSAL), + LEVEL_UP_END +}; + +const u16 gSlakingLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SCRATCH), + LEVEL_UP_MOVE( 1, MOVE_YAWN), + LEVEL_UP_MOVE( 1, MOVE_ENCORE), + LEVEL_UP_MOVE( 1, MOVE_SLACK_OFF), + LEVEL_UP_MOVE( 7, MOVE_ENCORE), + LEVEL_UP_MOVE(13, MOVE_SLACK_OFF), + LEVEL_UP_MOVE(19, MOVE_FAINT_ATTACK), + LEVEL_UP_MOVE(25, MOVE_AMNESIA), + LEVEL_UP_MOVE(31, MOVE_COVET), + LEVEL_UP_MOVE(36, MOVE_SWAGGER), + LEVEL_UP_MOVE(37, MOVE_COUNTER), + LEVEL_UP_MOVE(43, MOVE_FLAIL), + LEVEL_UP_END +}; + +const u16 gGulpinLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_POUND), + LEVEL_UP_MOVE( 6, MOVE_YAWN), + LEVEL_UP_MOVE( 9, MOVE_POISON_GAS), + LEVEL_UP_MOVE(14, MOVE_SLUDGE), + LEVEL_UP_MOVE(17, MOVE_AMNESIA), + LEVEL_UP_MOVE(23, MOVE_ENCORE), + LEVEL_UP_MOVE(28, MOVE_TOXIC), + LEVEL_UP_MOVE(34, MOVE_STOCKPILE), + LEVEL_UP_MOVE(34, MOVE_SPIT_UP), + LEVEL_UP_MOVE(34, MOVE_SWALLOW), + LEVEL_UP_MOVE(39, MOVE_SLUDGE_BOMB), + LEVEL_UP_END +}; + +const u16 gSwalotLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_POUND), + LEVEL_UP_MOVE( 1, MOVE_YAWN), + LEVEL_UP_MOVE( 1, MOVE_POISON_GAS), + LEVEL_UP_MOVE( 1, MOVE_SLUDGE), + LEVEL_UP_MOVE( 6, MOVE_YAWN), + LEVEL_UP_MOVE( 9, MOVE_POISON_GAS), + LEVEL_UP_MOVE(14, MOVE_SLUDGE), + LEVEL_UP_MOVE(17, MOVE_AMNESIA), + LEVEL_UP_MOVE(23, MOVE_ENCORE), + LEVEL_UP_MOVE(26, MOVE_BODY_SLAM), + LEVEL_UP_MOVE(31, MOVE_TOXIC), + LEVEL_UP_MOVE(40, MOVE_STOCKPILE), + LEVEL_UP_MOVE(40, MOVE_SPIT_UP), + LEVEL_UP_MOVE(40, MOVE_SWALLOW), + LEVEL_UP_MOVE(48, MOVE_SLUDGE_BOMB), + LEVEL_UP_END +}; + +const u16 gTropiusLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 1, MOVE_GUST), + LEVEL_UP_MOVE( 7, MOVE_GROWTH), + LEVEL_UP_MOVE(11, MOVE_RAZOR_LEAF), + LEVEL_UP_MOVE(17, MOVE_STOMP), + LEVEL_UP_MOVE(21, MOVE_SWEET_SCENT), + LEVEL_UP_MOVE(27, MOVE_WHIRLWIND), + LEVEL_UP_MOVE(31, MOVE_MAGICAL_LEAF), + LEVEL_UP_MOVE(37, MOVE_BODY_SLAM), + LEVEL_UP_MOVE(41, MOVE_SOLAR_BEAM), + LEVEL_UP_MOVE(47, MOVE_SYNTHESIS), + LEVEL_UP_END +}; + +const u16 gWhismurLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_POUND), + LEVEL_UP_MOVE( 5, MOVE_UPROAR), + LEVEL_UP_MOVE(11, MOVE_ASTONISH), + LEVEL_UP_MOVE(15, MOVE_HOWL), + LEVEL_UP_MOVE(21, MOVE_SUPERSONIC), + LEVEL_UP_MOVE(25, MOVE_STOMP), + LEVEL_UP_MOVE(31, MOVE_SCREECH), + LEVEL_UP_MOVE(35, MOVE_ROAR), + LEVEL_UP_MOVE(41, MOVE_REST), + LEVEL_UP_MOVE(41, MOVE_SLEEP_TALK), + LEVEL_UP_MOVE(45, MOVE_HYPER_VOICE), + LEVEL_UP_END +}; + +const u16 gLoudredLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_POUND), + LEVEL_UP_MOVE( 1, MOVE_UPROAR), + LEVEL_UP_MOVE( 1, MOVE_ASTONISH), + LEVEL_UP_MOVE( 1, MOVE_HOWL), + LEVEL_UP_MOVE( 5, MOVE_UPROAR), + LEVEL_UP_MOVE(11, MOVE_ASTONISH), + LEVEL_UP_MOVE(15, MOVE_HOWL), + LEVEL_UP_MOVE(23, MOVE_SUPERSONIC), + LEVEL_UP_MOVE(29, MOVE_STOMP), + LEVEL_UP_MOVE(37, MOVE_SCREECH), + LEVEL_UP_MOVE(43, MOVE_ROAR), + LEVEL_UP_MOVE(51, MOVE_REST), + LEVEL_UP_MOVE(51, MOVE_SLEEP_TALK), + LEVEL_UP_MOVE(57, MOVE_HYPER_VOICE), + LEVEL_UP_END +}; + +const u16 gExploudLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_POUND), + LEVEL_UP_MOVE( 1, MOVE_UPROAR), + LEVEL_UP_MOVE( 1, MOVE_ASTONISH), + LEVEL_UP_MOVE( 1, MOVE_HOWL), + LEVEL_UP_MOVE( 5, MOVE_UPROAR), + LEVEL_UP_MOVE(11, MOVE_ASTONISH), + LEVEL_UP_MOVE(15, MOVE_HOWL), + LEVEL_UP_MOVE(23, MOVE_SUPERSONIC), + LEVEL_UP_MOVE(29, MOVE_STOMP), + LEVEL_UP_MOVE(37, MOVE_SCREECH), + LEVEL_UP_MOVE(40, MOVE_HYPER_BEAM), + LEVEL_UP_MOVE(45, MOVE_ROAR), + LEVEL_UP_MOVE(55, MOVE_REST), + LEVEL_UP_MOVE(55, MOVE_SLEEP_TALK), + LEVEL_UP_MOVE(63, MOVE_HYPER_VOICE), + LEVEL_UP_END +}; + +const u16 gClamperlLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_CLAMP), + LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), + LEVEL_UP_MOVE( 1, MOVE_WHIRLPOOL), + LEVEL_UP_MOVE( 1, MOVE_IRON_DEFENSE), + LEVEL_UP_END +}; + +const u16 gHuntailLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_WHIRLPOOL), + LEVEL_UP_MOVE( 8, MOVE_BITE), + LEVEL_UP_MOVE(15, MOVE_SCREECH), + LEVEL_UP_MOVE(22, MOVE_WATER_PULSE), + LEVEL_UP_MOVE(29, MOVE_SCARY_FACE), + LEVEL_UP_MOVE(36, MOVE_CRUNCH), + LEVEL_UP_MOVE(43, MOVE_BATON_PASS), + LEVEL_UP_MOVE(50, MOVE_HYDRO_PUMP), + LEVEL_UP_END +}; + +const u16 gGorebyssLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_WHIRLPOOL), + LEVEL_UP_MOVE( 8, MOVE_CONFUSION), + LEVEL_UP_MOVE(15, MOVE_AGILITY), + LEVEL_UP_MOVE(22, MOVE_WATER_PULSE), + LEVEL_UP_MOVE(29, MOVE_AMNESIA), + LEVEL_UP_MOVE(36, MOVE_PSYCHIC), + LEVEL_UP_MOVE(43, MOVE_BATON_PASS), + LEVEL_UP_MOVE(50, MOVE_HYDRO_PUMP), + LEVEL_UP_END +}; + +const u16 gAbsolLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SCRATCH), + LEVEL_UP_MOVE( 5, MOVE_LEER), + LEVEL_UP_MOVE( 9, MOVE_TAUNT), + LEVEL_UP_MOVE(13, MOVE_QUICK_ATTACK), + LEVEL_UP_MOVE(17, MOVE_RAZOR_WIND), + LEVEL_UP_MOVE(21, MOVE_BITE), + LEVEL_UP_MOVE(26, MOVE_SWORDS_DANCE), + LEVEL_UP_MOVE(31, MOVE_DOUBLE_TEAM), + LEVEL_UP_MOVE(36, MOVE_SLASH), + LEVEL_UP_MOVE(41, MOVE_FUTURE_SIGHT), + LEVEL_UP_MOVE(46, MOVE_PERISH_SONG), + LEVEL_UP_END +}; + +const u16 gShuppetLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_KNOCK_OFF), + LEVEL_UP_MOVE( 8, MOVE_SCREECH), + LEVEL_UP_MOVE(13, MOVE_NIGHT_SHADE), + LEVEL_UP_MOVE(20, MOVE_CURSE), + LEVEL_UP_MOVE(25, MOVE_SPITE), + LEVEL_UP_MOVE(32, MOVE_WILL_O_WISP), + LEVEL_UP_MOVE(37, MOVE_FAINT_ATTACK), + LEVEL_UP_MOVE(44, MOVE_SHADOW_BALL), + LEVEL_UP_MOVE(49, MOVE_SNATCH), + LEVEL_UP_MOVE(56, MOVE_GRUDGE), + LEVEL_UP_END +}; + +const u16 gBanetteLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_KNOCK_OFF), + LEVEL_UP_MOVE( 1, MOVE_SCREECH), + LEVEL_UP_MOVE( 1, MOVE_NIGHT_SHADE), + LEVEL_UP_MOVE( 1, MOVE_CURSE), + LEVEL_UP_MOVE( 8, MOVE_SCREECH), + LEVEL_UP_MOVE(13, MOVE_NIGHT_SHADE), + LEVEL_UP_MOVE(20, MOVE_CURSE), + LEVEL_UP_MOVE(25, MOVE_SPITE), + LEVEL_UP_MOVE(32, MOVE_WILL_O_WISP), + LEVEL_UP_MOVE(39, MOVE_FAINT_ATTACK), + LEVEL_UP_MOVE(48, MOVE_SHADOW_BALL), + LEVEL_UP_MOVE(55, MOVE_SNATCH), + LEVEL_UP_MOVE(64, MOVE_GRUDGE), + LEVEL_UP_END +}; + +const u16 gSeviperLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_WRAP), + LEVEL_UP_MOVE( 7, MOVE_LICK), + LEVEL_UP_MOVE(10, MOVE_BITE), + LEVEL_UP_MOVE(16, MOVE_POISON_TAIL), + LEVEL_UP_MOVE(19, MOVE_SCREECH), + LEVEL_UP_MOVE(25, MOVE_GLARE), + LEVEL_UP_MOVE(28, MOVE_CRUNCH), + LEVEL_UP_MOVE(34, MOVE_POISON_FANG), + LEVEL_UP_MOVE(37, MOVE_SWAGGER), + LEVEL_UP_MOVE(43, MOVE_HAZE), + LEVEL_UP_END +}; + +const u16 gZangooseLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SCRATCH), + LEVEL_UP_MOVE( 4, MOVE_LEER), + LEVEL_UP_MOVE( 7, MOVE_QUICK_ATTACK), + LEVEL_UP_MOVE(10, MOVE_SWORDS_DANCE), + LEVEL_UP_MOVE(13, MOVE_FURY_CUTTER), + LEVEL_UP_MOVE(19, MOVE_SLASH), + LEVEL_UP_MOVE(25, MOVE_PURSUIT), + LEVEL_UP_MOVE(31, MOVE_CRUSH_CLAW), + LEVEL_UP_MOVE(37, MOVE_TAUNT), + LEVEL_UP_MOVE(46, MOVE_DETECT), + LEVEL_UP_MOVE(55, MOVE_FALSE_SWIPE), + LEVEL_UP_END +}; + +const u16 gRelicanthLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_HARDEN), + LEVEL_UP_MOVE( 8, MOVE_WATER_GUN), + LEVEL_UP_MOVE(15, MOVE_ROCK_TOMB), + LEVEL_UP_MOVE(22, MOVE_YAWN), + LEVEL_UP_MOVE(29, MOVE_TAKE_DOWN), + LEVEL_UP_MOVE(36, MOVE_MUD_SPORT), + LEVEL_UP_MOVE(43, MOVE_ANCIENT_POWER), + LEVEL_UP_MOVE(50, MOVE_REST), + LEVEL_UP_MOVE(57, MOVE_DOUBLE_EDGE), + LEVEL_UP_MOVE(64, MOVE_HYDRO_PUMP), + LEVEL_UP_END +}; + +const u16 gAronLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 4, MOVE_HARDEN), + LEVEL_UP_MOVE( 7, MOVE_MUD_SLAP), + LEVEL_UP_MOVE(10, MOVE_HEADBUTT), + LEVEL_UP_MOVE(13, MOVE_METAL_CLAW), + LEVEL_UP_MOVE(17, MOVE_IRON_DEFENSE), + LEVEL_UP_MOVE(21, MOVE_ROAR), + LEVEL_UP_MOVE(25, MOVE_TAKE_DOWN), + LEVEL_UP_MOVE(29, MOVE_IRON_TAIL), + LEVEL_UP_MOVE(34, MOVE_PROTECT), + LEVEL_UP_MOVE(39, MOVE_METAL_SOUND), + LEVEL_UP_MOVE(44, MOVE_DOUBLE_EDGE), + LEVEL_UP_END +}; + +const u16 gLaironLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_HARDEN), + LEVEL_UP_MOVE( 1, MOVE_MUD_SLAP), + LEVEL_UP_MOVE( 1, MOVE_HEADBUTT), + LEVEL_UP_MOVE( 4, MOVE_HARDEN), + LEVEL_UP_MOVE( 7, MOVE_MUD_SLAP), + LEVEL_UP_MOVE(10, MOVE_HEADBUTT), + LEVEL_UP_MOVE(13, MOVE_METAL_CLAW), + LEVEL_UP_MOVE(17, MOVE_IRON_DEFENSE), + LEVEL_UP_MOVE(21, MOVE_ROAR), + LEVEL_UP_MOVE(25, MOVE_TAKE_DOWN), + LEVEL_UP_MOVE(29, MOVE_IRON_TAIL), + LEVEL_UP_MOVE(37, MOVE_PROTECT), + LEVEL_UP_MOVE(45, MOVE_METAL_SOUND), + LEVEL_UP_MOVE(53, MOVE_DOUBLE_EDGE), + LEVEL_UP_END +}; + +const u16 gAggronLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 1, MOVE_HARDEN), + LEVEL_UP_MOVE( 1, MOVE_MUD_SLAP), + LEVEL_UP_MOVE( 1, MOVE_HEADBUTT), + LEVEL_UP_MOVE( 4, MOVE_HARDEN), + LEVEL_UP_MOVE( 7, MOVE_MUD_SLAP), + LEVEL_UP_MOVE(10, MOVE_HEADBUTT), + LEVEL_UP_MOVE(13, MOVE_METAL_CLAW), + LEVEL_UP_MOVE(17, MOVE_IRON_DEFENSE), + LEVEL_UP_MOVE(21, MOVE_ROAR), + LEVEL_UP_MOVE(25, MOVE_TAKE_DOWN), + LEVEL_UP_MOVE(29, MOVE_IRON_TAIL), + LEVEL_UP_MOVE(37, MOVE_PROTECT), + LEVEL_UP_MOVE(50, MOVE_METAL_SOUND), + LEVEL_UP_MOVE(63, MOVE_DOUBLE_EDGE), + LEVEL_UP_END +}; + +const u16 gCastformLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE(10, MOVE_WATER_GUN), + LEVEL_UP_MOVE(10, MOVE_EMBER), + LEVEL_UP_MOVE(10, MOVE_POWDER_SNOW), + LEVEL_UP_MOVE(20, MOVE_RAIN_DANCE), + LEVEL_UP_MOVE(20, MOVE_SUNNY_DAY), + LEVEL_UP_MOVE(20, MOVE_HAIL), + LEVEL_UP_MOVE(30, MOVE_WEATHER_BALL), + LEVEL_UP_END +}; + +const u16 gVolbeatLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 5, MOVE_CONFUSE_RAY), + LEVEL_UP_MOVE( 9, MOVE_DOUBLE_TEAM), + LEVEL_UP_MOVE(13, MOVE_MOONLIGHT), + LEVEL_UP_MOVE(17, MOVE_QUICK_ATTACK), + LEVEL_UP_MOVE(21, MOVE_TAIL_GLOW), + LEVEL_UP_MOVE(25, MOVE_SIGNAL_BEAM), + LEVEL_UP_MOVE(29, MOVE_PROTECT), + LEVEL_UP_MOVE(33, MOVE_HELPING_HAND), + LEVEL_UP_MOVE(37, MOVE_DOUBLE_EDGE), + LEVEL_UP_END +}; + +const u16 gIllumiseLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 5, MOVE_SWEET_SCENT), + LEVEL_UP_MOVE( 9, MOVE_CHARM), + LEVEL_UP_MOVE(13, MOVE_MOONLIGHT), + LEVEL_UP_MOVE(17, MOVE_QUICK_ATTACK), + LEVEL_UP_MOVE(21, MOVE_WISH), + LEVEL_UP_MOVE(25, MOVE_ENCORE), + LEVEL_UP_MOVE(29, MOVE_FLATTER), + LEVEL_UP_MOVE(33, MOVE_HELPING_HAND), + LEVEL_UP_MOVE(37, MOVE_COVET), + LEVEL_UP_END +}; + +const u16 gLileepLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_ASTONISH), + LEVEL_UP_MOVE( 8, MOVE_CONSTRICT), + LEVEL_UP_MOVE(15, MOVE_ACID), + LEVEL_UP_MOVE(22, MOVE_INGRAIN), + LEVEL_UP_MOVE(29, MOVE_CONFUSE_RAY), + LEVEL_UP_MOVE(36, MOVE_AMNESIA), + LEVEL_UP_MOVE(43, MOVE_ANCIENT_POWER), + LEVEL_UP_MOVE(50, MOVE_STOCKPILE), + LEVEL_UP_MOVE(50, MOVE_SPIT_UP), + LEVEL_UP_MOVE(50, MOVE_SWALLOW), + LEVEL_UP_END +}; + +const u16 gCradilyLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_ASTONISH), + LEVEL_UP_MOVE( 1, MOVE_CONSTRICT), + LEVEL_UP_MOVE( 1, MOVE_ACID), + LEVEL_UP_MOVE( 1, MOVE_INGRAIN), + LEVEL_UP_MOVE( 8, MOVE_CONSTRICT), + LEVEL_UP_MOVE(15, MOVE_ACID), + LEVEL_UP_MOVE(22, MOVE_INGRAIN), + LEVEL_UP_MOVE(29, MOVE_CONFUSE_RAY), + LEVEL_UP_MOVE(36, MOVE_AMNESIA), + LEVEL_UP_MOVE(48, MOVE_ANCIENT_POWER), + LEVEL_UP_MOVE(60, MOVE_STOCKPILE), + LEVEL_UP_MOVE(60, MOVE_SPIT_UP), + LEVEL_UP_MOVE(60, MOVE_SWALLOW), + LEVEL_UP_END +}; + +const u16 gAnorithLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SCRATCH), + LEVEL_UP_MOVE( 7, MOVE_HARDEN), + LEVEL_UP_MOVE(13, MOVE_MUD_SPORT), + LEVEL_UP_MOVE(19, MOVE_WATER_GUN), + LEVEL_UP_MOVE(25, MOVE_METAL_CLAW), + LEVEL_UP_MOVE(31, MOVE_PROTECT), + LEVEL_UP_MOVE(37, MOVE_ANCIENT_POWER), + LEVEL_UP_MOVE(43, MOVE_FURY_CUTTER), + LEVEL_UP_MOVE(49, MOVE_SLASH), + LEVEL_UP_MOVE(55, MOVE_ROCK_BLAST), + LEVEL_UP_END +}; + +const u16 gArmaldoLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SCRATCH), + LEVEL_UP_MOVE( 1, MOVE_HARDEN), + LEVEL_UP_MOVE( 1, MOVE_MUD_SPORT), + LEVEL_UP_MOVE( 1, MOVE_WATER_GUN), + LEVEL_UP_MOVE( 7, MOVE_HARDEN), + LEVEL_UP_MOVE(13, MOVE_MUD_SPORT), + LEVEL_UP_MOVE(19, MOVE_WATER_GUN), + LEVEL_UP_MOVE(25, MOVE_METAL_CLAW), + LEVEL_UP_MOVE(31, MOVE_PROTECT), + LEVEL_UP_MOVE(37, MOVE_ANCIENT_POWER), + LEVEL_UP_MOVE(46, MOVE_FURY_CUTTER), + LEVEL_UP_MOVE(55, MOVE_SLASH), + LEVEL_UP_MOVE(64, MOVE_ROCK_BLAST), + LEVEL_UP_END +}; + +const u16 gRaltsLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_GROWL), + LEVEL_UP_MOVE( 6, MOVE_CONFUSION), + LEVEL_UP_MOVE(11, MOVE_DOUBLE_TEAM), + LEVEL_UP_MOVE(16, MOVE_TELEPORT), + LEVEL_UP_MOVE(21, MOVE_CALM_MIND), + LEVEL_UP_MOVE(26, MOVE_PSYCHIC), + LEVEL_UP_MOVE(31, MOVE_IMPRISON), + LEVEL_UP_MOVE(36, MOVE_FUTURE_SIGHT), + LEVEL_UP_MOVE(41, MOVE_HYPNOSIS), + LEVEL_UP_MOVE(46, MOVE_DREAM_EATER), + LEVEL_UP_END +}; + +const u16 gKirliaLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_GROWL), + LEVEL_UP_MOVE( 1, MOVE_CONFUSION), + LEVEL_UP_MOVE( 1, MOVE_DOUBLE_TEAM), + LEVEL_UP_MOVE( 1, MOVE_TELEPORT), + LEVEL_UP_MOVE( 6, MOVE_CONFUSION), + LEVEL_UP_MOVE(11, MOVE_DOUBLE_TEAM), + LEVEL_UP_MOVE(16, MOVE_TELEPORT), + LEVEL_UP_MOVE(21, MOVE_CALM_MIND), + LEVEL_UP_MOVE(26, MOVE_PSYCHIC), + LEVEL_UP_MOVE(33, MOVE_IMPRISON), + LEVEL_UP_MOVE(40, MOVE_FUTURE_SIGHT), + LEVEL_UP_MOVE(47, MOVE_HYPNOSIS), + LEVEL_UP_MOVE(54, MOVE_DREAM_EATER), + LEVEL_UP_END +}; + +const u16 gGardevoirLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_GROWL), + LEVEL_UP_MOVE( 1, MOVE_CONFUSION), + LEVEL_UP_MOVE( 1, MOVE_DOUBLE_TEAM), + LEVEL_UP_MOVE( 1, MOVE_TELEPORT), + LEVEL_UP_MOVE( 6, MOVE_CONFUSION), + LEVEL_UP_MOVE(11, MOVE_DOUBLE_TEAM), + LEVEL_UP_MOVE(16, MOVE_TELEPORT), + LEVEL_UP_MOVE(21, MOVE_CALM_MIND), + LEVEL_UP_MOVE(26, MOVE_PSYCHIC), + LEVEL_UP_MOVE(33, MOVE_IMPRISON), + LEVEL_UP_MOVE(42, MOVE_FUTURE_SIGHT), + LEVEL_UP_MOVE(51, MOVE_HYPNOSIS), + LEVEL_UP_MOVE(60, MOVE_DREAM_EATER), + LEVEL_UP_END +}; + +const u16 gBagonLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_RAGE), + LEVEL_UP_MOVE( 5, MOVE_BITE), + LEVEL_UP_MOVE( 9, MOVE_LEER), + LEVEL_UP_MOVE(17, MOVE_HEADBUTT), + LEVEL_UP_MOVE(21, MOVE_FOCUS_ENERGY), + LEVEL_UP_MOVE(25, MOVE_EMBER), + LEVEL_UP_MOVE(33, MOVE_DRAGON_BREATH), + LEVEL_UP_MOVE(37, MOVE_SCARY_FACE), + LEVEL_UP_MOVE(41, MOVE_CRUNCH), + LEVEL_UP_MOVE(49, MOVE_DRAGON_CLAW), + LEVEL_UP_MOVE(53, MOVE_DOUBLE_EDGE), + LEVEL_UP_END +}; + +const u16 gShelgonLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_RAGE), + LEVEL_UP_MOVE( 1, MOVE_BITE), + LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 1, MOVE_HEADBUTT), + LEVEL_UP_MOVE( 5, MOVE_BITE), + LEVEL_UP_MOVE( 9, MOVE_LEER), + LEVEL_UP_MOVE(17, MOVE_HEADBUTT), + LEVEL_UP_MOVE(21, MOVE_FOCUS_ENERGY), + LEVEL_UP_MOVE(25, MOVE_EMBER), + LEVEL_UP_MOVE(30, MOVE_PROTECT), + LEVEL_UP_MOVE(38, MOVE_DRAGON_BREATH), + LEVEL_UP_MOVE(47, MOVE_SCARY_FACE), + LEVEL_UP_MOVE(56, MOVE_CRUNCH), + LEVEL_UP_MOVE(69, MOVE_DRAGON_CLAW), + LEVEL_UP_MOVE(78, MOVE_DOUBLE_EDGE), + LEVEL_UP_END +}; + +const u16 gSalamenceLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_RAGE), + LEVEL_UP_MOVE( 1, MOVE_BITE), + LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 1, MOVE_HEADBUTT), + LEVEL_UP_MOVE( 5, MOVE_BITE), + LEVEL_UP_MOVE( 9, MOVE_LEER), + LEVEL_UP_MOVE(17, MOVE_HEADBUTT), + LEVEL_UP_MOVE(21, MOVE_FOCUS_ENERGY), + LEVEL_UP_MOVE(25, MOVE_EMBER), + LEVEL_UP_MOVE(30, MOVE_PROTECT), + LEVEL_UP_MOVE(38, MOVE_DRAGON_BREATH), + LEVEL_UP_MOVE(47, MOVE_SCARY_FACE), + LEVEL_UP_MOVE(50, MOVE_FLY), + LEVEL_UP_MOVE(61, MOVE_CRUNCH), + LEVEL_UP_MOVE(79, MOVE_DRAGON_CLAW), + LEVEL_UP_MOVE(93, MOVE_DOUBLE_EDGE), + LEVEL_UP_END +}; + +const u16 gBeldumLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TAKE_DOWN), + LEVEL_UP_END +}; + +const u16 gMetangLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TAKE_DOWN), + LEVEL_UP_MOVE(20, MOVE_CONFUSION), + LEVEL_UP_MOVE(20, MOVE_METAL_CLAW), + LEVEL_UP_MOVE(26, MOVE_SCARY_FACE), + LEVEL_UP_MOVE(32, MOVE_PURSUIT), + LEVEL_UP_MOVE(38, MOVE_PSYCHIC), + LEVEL_UP_MOVE(44, MOVE_IRON_DEFENSE), + LEVEL_UP_MOVE(50, MOVE_METEOR_MASH), + LEVEL_UP_MOVE(56, MOVE_AGILITY), + LEVEL_UP_MOVE(62, MOVE_HYPER_BEAM), + LEVEL_UP_END +}; + +const u16 gMetagrossLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TAKE_DOWN), + LEVEL_UP_MOVE( 1, MOVE_CONFUSION), + LEVEL_UP_MOVE( 1, MOVE_METAL_CLAW), + LEVEL_UP_MOVE( 1, MOVE_SCARY_FACE), + LEVEL_UP_MOVE(20, MOVE_CONFUSION), + LEVEL_UP_MOVE(20, MOVE_METAL_CLAW), + LEVEL_UP_MOVE(26, MOVE_SCARY_FACE), + LEVEL_UP_MOVE(32, MOVE_PURSUIT), + LEVEL_UP_MOVE(38, MOVE_PSYCHIC), + LEVEL_UP_MOVE(44, MOVE_IRON_DEFENSE), + LEVEL_UP_MOVE(55, MOVE_METEOR_MASH), + LEVEL_UP_MOVE(66, MOVE_AGILITY), + LEVEL_UP_MOVE(77, MOVE_HYPER_BEAM), + LEVEL_UP_END +}; + +const u16 gRegirockLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_EXPLOSION), + LEVEL_UP_MOVE( 9, MOVE_ROCK_THROW), + LEVEL_UP_MOVE(17, MOVE_CURSE), + LEVEL_UP_MOVE(25, MOVE_SUPERPOWER), + LEVEL_UP_MOVE(33, MOVE_ANCIENT_POWER), + LEVEL_UP_MOVE(41, MOVE_IRON_DEFENSE), + LEVEL_UP_MOVE(49, MOVE_ZAP_CANNON), + LEVEL_UP_MOVE(57, MOVE_LOCK_ON), + LEVEL_UP_MOVE(65, MOVE_HYPER_BEAM), + LEVEL_UP_END +}; + +const u16 gRegiceLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_EXPLOSION), + LEVEL_UP_MOVE( 9, MOVE_ICY_WIND), + LEVEL_UP_MOVE(17, MOVE_CURSE), + LEVEL_UP_MOVE(25, MOVE_SUPERPOWER), + LEVEL_UP_MOVE(33, MOVE_ANCIENT_POWER), + LEVEL_UP_MOVE(41, MOVE_AMNESIA), + LEVEL_UP_MOVE(49, MOVE_ZAP_CANNON), + LEVEL_UP_MOVE(57, MOVE_LOCK_ON), + LEVEL_UP_MOVE(65, MOVE_HYPER_BEAM), + LEVEL_UP_END +}; + +const u16 gRegisteelLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_EXPLOSION), + LEVEL_UP_MOVE( 9, MOVE_METAL_CLAW), + LEVEL_UP_MOVE(17, MOVE_CURSE), + LEVEL_UP_MOVE(25, MOVE_SUPERPOWER), + LEVEL_UP_MOVE(33, MOVE_ANCIENT_POWER), + LEVEL_UP_MOVE(41, MOVE_IRON_DEFENSE), + LEVEL_UP_MOVE(41, MOVE_AMNESIA), + LEVEL_UP_MOVE(49, MOVE_ZAP_CANNON), + LEVEL_UP_MOVE(57, MOVE_LOCK_ON), + LEVEL_UP_MOVE(65, MOVE_HYPER_BEAM), + LEVEL_UP_END +}; + +const u16 gKyogreLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_WATER_PULSE), + LEVEL_UP_MOVE( 5, MOVE_SCARY_FACE), + LEVEL_UP_MOVE(15, MOVE_ANCIENT_POWER), + LEVEL_UP_MOVE(20, MOVE_BODY_SLAM), + LEVEL_UP_MOVE(30, MOVE_CALM_MIND), + LEVEL_UP_MOVE(35, MOVE_ICE_BEAM), + LEVEL_UP_MOVE(45, MOVE_HYDRO_PUMP), + LEVEL_UP_MOVE(50, MOVE_REST), + LEVEL_UP_MOVE(60, MOVE_SHEER_COLD), + LEVEL_UP_MOVE(65, MOVE_DOUBLE_EDGE), + LEVEL_UP_MOVE(75, MOVE_WATER_SPOUT), + LEVEL_UP_END +}; + +const u16 gGroudonLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_MUD_SHOT), + LEVEL_UP_MOVE( 5, MOVE_SCARY_FACE), + LEVEL_UP_MOVE(15, MOVE_ANCIENT_POWER), + LEVEL_UP_MOVE(20, MOVE_SLASH), + LEVEL_UP_MOVE(30, MOVE_BULK_UP), + LEVEL_UP_MOVE(35, MOVE_EARTHQUAKE), + LEVEL_UP_MOVE(45, MOVE_FIRE_BLAST), + LEVEL_UP_MOVE(50, MOVE_REST), + LEVEL_UP_MOVE(60, MOVE_FISSURE), + LEVEL_UP_MOVE(65, MOVE_SOLAR_BEAM), + LEVEL_UP_MOVE(75, MOVE_ERUPTION), + LEVEL_UP_END +}; + +const u16 gRayquazaLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TWISTER), + LEVEL_UP_MOVE( 5, MOVE_SCARY_FACE), + LEVEL_UP_MOVE(15, MOVE_ANCIENT_POWER), + LEVEL_UP_MOVE(20, MOVE_DRAGON_CLAW), + LEVEL_UP_MOVE(30, MOVE_DRAGON_DANCE), + LEVEL_UP_MOVE(35, MOVE_CRUNCH), + LEVEL_UP_MOVE(45, MOVE_FLY), + LEVEL_UP_MOVE(50, MOVE_REST), + LEVEL_UP_MOVE(60, MOVE_EXTREME_SPEED), + LEVEL_UP_MOVE(65, MOVE_OUTRAGE), + LEVEL_UP_MOVE(75, MOVE_HYPER_BEAM), + LEVEL_UP_END +}; + +const u16 gLatiasLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_PSYWAVE), + LEVEL_UP_MOVE( 5, MOVE_WISH), + LEVEL_UP_MOVE(10, MOVE_HELPING_HAND), + LEVEL_UP_MOVE(15, MOVE_SAFEGUARD), + LEVEL_UP_MOVE(20, MOVE_DRAGON_BREATH), + LEVEL_UP_MOVE(25, MOVE_WATER_SPORT), + LEVEL_UP_MOVE(30, MOVE_REFRESH), + LEVEL_UP_MOVE(35, MOVE_MIST_BALL), + LEVEL_UP_MOVE(40, MOVE_PSYCHIC), + LEVEL_UP_MOVE(45, MOVE_RECOVER), + LEVEL_UP_MOVE(50, MOVE_CHARM), + LEVEL_UP_END +}; + +const u16 gLatiosLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_PSYWAVE), + LEVEL_UP_MOVE( 5, MOVE_MEMENTO), + LEVEL_UP_MOVE(10, MOVE_HELPING_HAND), + LEVEL_UP_MOVE(15, MOVE_SAFEGUARD), + LEVEL_UP_MOVE(20, MOVE_DRAGON_BREATH), + LEVEL_UP_MOVE(25, MOVE_PROTECT), + LEVEL_UP_MOVE(30, MOVE_REFRESH), + LEVEL_UP_MOVE(35, MOVE_LUSTER_PURGE), + LEVEL_UP_MOVE(40, MOVE_PSYCHIC), + LEVEL_UP_MOVE(45, MOVE_RECOVER), + LEVEL_UP_MOVE(50, MOVE_DRAGON_DANCE), + LEVEL_UP_END +}; + +const u16 gJirachiLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_WISH), + LEVEL_UP_MOVE( 1, MOVE_CONFUSION), + LEVEL_UP_MOVE( 5, MOVE_REST), + LEVEL_UP_MOVE(10, MOVE_SWIFT), + LEVEL_UP_MOVE(15, MOVE_HELPING_HAND), + LEVEL_UP_MOVE(20, MOVE_PSYCHIC), + LEVEL_UP_MOVE(25, MOVE_REFRESH), + LEVEL_UP_MOVE(30, MOVE_REST), + LEVEL_UP_MOVE(35, MOVE_DOUBLE_EDGE), + LEVEL_UP_MOVE(40, MOVE_FUTURE_SIGHT), + LEVEL_UP_MOVE(45, MOVE_COSMIC_POWER), + LEVEL_UP_MOVE(50, MOVE_DOOM_DESIRE), + LEVEL_UP_END +}; + +const u16 gDeoxysLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_LEER), + LEVEL_UP_MOVE( 1, MOVE_WRAP), + LEVEL_UP_MOVE( 5, MOVE_NIGHT_SHADE), + LEVEL_UP_MOVE(10, MOVE_TELEPORT), + LEVEL_UP_MOVE(15, MOVE_KNOCK_OFF), + LEVEL_UP_MOVE(20, MOVE_PURSUIT), + LEVEL_UP_MOVE(25, MOVE_PSYCHIC), + LEVEL_UP_MOVE(30, MOVE_SNATCH), + LEVEL_UP_MOVE(35, MOVE_COSMIC_POWER), + LEVEL_UP_MOVE(40, MOVE_RECOVER), + LEVEL_UP_MOVE(45, MOVE_PSYCHO_BOOST), + LEVEL_UP_MOVE(50, MOVE_HYPER_BEAM), + LEVEL_UP_END +}; + +const u16 gChimechoLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_WRAP), + LEVEL_UP_MOVE( 6, MOVE_GROWL), + LEVEL_UP_MOVE( 9, MOVE_ASTONISH), + LEVEL_UP_MOVE(14, MOVE_CONFUSION), + LEVEL_UP_MOVE(17, MOVE_TAKE_DOWN), + LEVEL_UP_MOVE(22, MOVE_UPROAR), + LEVEL_UP_MOVE(25, MOVE_YAWN), + LEVEL_UP_MOVE(30, MOVE_PSYWAVE), + LEVEL_UP_MOVE(33, MOVE_DOUBLE_EDGE), + LEVEL_UP_MOVE(38, MOVE_HEAL_BELL), + LEVEL_UP_MOVE(41, MOVE_SAFEGUARD), + LEVEL_UP_MOVE(46, MOVE_PSYCHIC), + LEVEL_UP_END +}; + +#endif //POKERUBY_LEVEL_UP_LEARNSETS_H diff --git a/src/data/pokemon/nature_stats.h b/src/data/pokemon/nature_stats.h new file mode 100644 index 000000000..fcef2a0ac --- /dev/null +++ b/src/data/pokemon/nature_stats.h @@ -0,0 +1,37 @@ +// + +// + +#ifndef POKERUBY_NATURE_STATS_H +#define POKERUBY_NATURE_STATS_H + +const s8 gNatureStatTable[][5] = { + // Atk Def Spd Sp.Atk Sp.Def + { 0, 0, 0, 0, 0}, // Hardy + { 1, -1, 0, 0, 0}, // Lonely + { 1, 0, -1, 0, 0}, // Brave + { 1, 0, 0, -1, 0}, // Adamant + { 1, 0, 0, 0, -1}, // Naughty + { -1, 1, 0, 0, 0}, // Bold + { 0, 0, 0, 0, 0}, // Docile + { 0, 1, -1, 0, 0}, // Relaxed + { 0, 1, 0, -1, 0}, // Impish + { 0, 1, 0, 0, -1}, // Lax + { -1, 0, 1, 0, 0}, // Timid + { 0, -1, 1, 0, 0}, // Hasty + { 0, 0, 0, 0, 0}, // Serious + { 0, 0, 1, -1, 0}, // Jolly + { 0, 0, 1, 0, -1}, // Naive + { -1, 0, 0, 1, 0}, // Modest + { 0, -1, 0, 1, 0}, // Mild + { 0, 0, -1, 1, 0}, // Quiet + { 0, 0, 0, 0, 0}, // Bashful + { 0, 0, 0, 1, -1}, // Rash + { -1, 0, 0, 0, 1}, // Calm + { 0, -1, 0, 0, 1}, // Gentle + { 0, 0, -1, 0, 1}, // Sassy + { 0, 0, 0, -1, 1}, // Careful + { 0, 0, 0, 0, 0} // Quirky +}; + +#endif //POKERUBY_NATURE_STATS_H diff --git a/src/data/pokemon/spinda_spots.h b/src/data/pokemon/spinda_spots.h new file mode 100644 index 000000000..d045e0734 --- /dev/null +++ b/src/data/pokemon/spinda_spots.h @@ -0,0 +1,15 @@ +// + +// + +#ifndef POKERUBY_SPINDA_SPOTS_H +#define POKERUBY_SPINDA_SPOTS_H + +const struct SpindaSpot gSpindaSpotGraphics[] = { + {16, 14, INCBIN_U16("graphics/spinda_spots/spot_0.bin")}, + {40, 15, INCBIN_U16("graphics/spinda_spots/spot_1.bin")}, + {22, 32, INCBIN_U16("graphics/spinda_spots/spot_2.bin")}, + {34, 33, INCBIN_U16("graphics/spinda_spots/spot_3.bin")} +}; + +#endif //POKERUBY_SPINDA_SPOTS_H diff --git a/src/data/pokemon/tmhm_learnsets.h b/src/data/pokemon/tmhm_learnsets.h new file mode 100644 index 000000000..02cd22d56 --- /dev/null +++ b/src/data/pokemon/tmhm_learnsets.h @@ -0,0 +1,431 @@ +// + +// + +#ifndef POKERUBY_TMHM_LEARNSETS_H +#define POKERUBY_TMHM_LEARNSETS_H + +// TO-DO: Rewrite this declaration to allow assignment of TM/HM learns by name. +// These are 58-bit numbers aligned to 64 bits. The least significant bit represents TM01, +// while the most significant bit represents HM08. + +asm( + ".align 2\n" + ".global gTMHMLearnsets\n" + "gTMHMLearnsets:\n" + + ".8byte 0b0000000000000000000000000000000000000000000000000000000000\n" // ?????????? + ".8byte 0b0011100100000111100000100010000100001101010000011100100000\n" // Bulbasaur + ".8byte 0b0011100100000111100000100010000100001101010000011100100000\n" // Ivysaur + ".8byte 0b0011100100000111100000100010000110001101010100011100110000\n" // Venusaur + ".8byte 0b0010100110000111101010010011001100010100010000011000100011\n" // Charmander + ".8byte 0b0010100110000111101010010011001100010100010000011000100011\n" // Charmeleon + ".8byte 0b0010101110010111101010010011001110010100010100011000110011\n" // Charizard + ".8byte 0b1110110000000111100000000011001100010100110011001001100101\n" // Squirtle + ".8byte 0b1110110000000111100000000011001100010100110011001001100101\n" // Wartortle + ".8byte 0b1110110000000111100000000011001110010100110111001001110101\n" // Blastoise + ".8byte 0b0000000000000000000000000000000000000000000000000000000000\n" // Caterpie + ".8byte 0b0000000000000000000000000000000000000000000000000000000000\n" // Metapod + ".8byte 0b0001000000101111101000000010110100001111110100011000100000\n" // Butterfree + ".8byte 0b0000000000000000000000000000000000000000000000000000000000\n" // Weedle + ".8byte 0b0000000000000000000000000000000000000000000000000000000000\n" // Kakuna + ".8byte 0b0010000100001111101000100011000100001101010100011000100000\n" // Beedrill + ".8byte 0b0000001000011111101000000010000100000100110000011000100000\n" // Pidgey + ".8byte 0b0000001000011111101000000010000100000100110000011000100000\n" // Pidgeotto + ".8byte 0b0000001000011111101000000010000100000100110100011000100000\n" // Pidgeot + ".8byte 0b0010000100001111100000001010101101110100110011111000100000\n" // Rattata + ".8byte 0b0010100100001111100000001010101101110100110111111000110000\n" // Raticate + ".8byte 0b0000001000011111101000000010000100000100110000011000100000\n" // Spearow + ".8byte 0b0000001000011111101000000010000100000100110100011000100000\n" // Fearow + ".8byte 0b0000100001001111110000100010001110010101110000011000100000\n" // Ekans + ".8byte 0b0000100001001111110000100010001110010101110100011000100000\n" // Arbok + ".8byte 0b0011100000000111100000001011001101110100111000001000100001\n" // Pikachu + ".8byte 0b0011100000001111100000001011001101110100111100001000100001\n" // Raichu + ".8byte 0b0010100100001111101101000011001110010100010000011000100001\n" // Sandshrew + ".8byte 0b0010100100001111101101000011001110010100010100011000100001\n" // Sandslash + ".8byte 0b0010100100001111101000101010001101110100110011011000100100\n" // Nidoran♀ + ".8byte 0b0010100100001111101000101010001101110100110011011000100100\n" // Nidorina + ".8byte 0b0010110100001111111111111011101111110100110111111000110101\n" // Nidoqueen + ".8byte 0b0010100100001111100000101010001101110100110011011000100100\n" // Nidoran♂ + ".8byte 0b0010100100001111100000101010001101110100110011011000100100\n" // Nidorino + ".8byte 0b0010110100001111110111111011101111110100110111111000110101\n" // Nidoking + ".8byte 0b0001100001000111100010011111111101111110111011011000101101\n" // Clefairy + ".8byte 0b0001100001000111100010011111111101111110111111011000101101\n" // Clefable + ".8byte 0b0000000010000111100010010010001100010110010000011000110000\n" // Vulpix + ".8byte 0b0000000010000111100010010010001100010110010100011000110000\n" // Ninetales + ".8byte 0b0001100001000111100010011111111101101110111011011000100101\n" // Jigglypuff + ".8byte 0b0001100001000111100010011111111101101110111111011000100101\n" // Wigglytuff + ".8byte 0b0000000001011111111000100010100100000101110000111000100000\n" // Zubat + ".8byte 0b0000000001011111111000100010100100000101110100111000100000\n" // Golbat + ".8byte 0b0001000100000111100000100010000100001101010000011100100000\n" // Oddish + ".8byte 0b0001000100000111100000100010000100001101010000011100100000\n" // Gloom + ".8byte 0b0001000100000111100000100010000100001101010100011100100000\n" // Vileplume + ".8byte 0b0011000100001111101000100010001100001101010000011100100000\n" // Paras + ".8byte 0b0011000100001111101000100010001100001101010100011100100000\n" // Parasect + ".8byte 0b0001000000101111100000100010010100001101010000011000100000\n" // Venonat + ".8byte 0b0001000000101111101000100010010100001101010100011000100000\n" // Venomoth + ".8byte 0b0010000100001111101100100010001110000100010000011000100000\n" // Diglett + ".8byte 0b0010000100001111101100100010001110000100010100011000100000\n" // Dugtrio + ".8byte 0b0001000101001111111000001010101101110100110000111000100100\n" // Meowth + ".8byte 0b0001000101001111111000001010101101110100110100111000110100\n" // Persian + ".8byte 0b1111110000000111101000000011001100010100110011001001101101\n" // Psyduck + ".8byte 0b1111110000000111101000000011001100010100110111001001101101\n" // Golduck + ".8byte 0b0010100010001111101100000011001111110100110000111010100001\n" // Mankey + ".8byte 0b0010100010001111101100000011001111110100110100111010100001\n" // Primeape + ".8byte 0b0010100010001111101010010010001100010100010000011000110000\n" // Growlithe + ".8byte 0b0010100010001111101010010010001100010100010100011000110000\n" // Arcanine + ".8byte 0b1100010000001111100000000010011100000100110011001001100100\n" // Poliwag + ".8byte 0b1110110000001111100000000011011110000100110011001001100101\n" // Poliwhirl + ".8byte 0b1110110000001111100100000011011110000100110111001011100101\n" // Poliwrath + ".8byte 0b0001000001101111110000001110110100010110111000111000101001\n" // Abra + ".8byte 0b0001000001101111110000001110110100010110111000111000101001\n" // Kadabra + ".8byte 0b0001000001101111110000001110110100010110111100111000101001\n" // Alakazam + ".8byte 0b0010100000001111100110010011001110000100110000011010100001\n" // Machop + ".8byte 0b0010100000001111100110010011001110000100110000011010100001\n" // Machoke + ".8byte 0b0010100000001111100110010011001110000100110100011010100001\n" // Machamp + ".8byte 0b0001000100001111100000100010000100001101010000011100100000\n" // Bellsprout + ".8byte 0b0001000100001111100000100010000100001101010000011100100000\n" // Weepinbell + ".8byte 0b0001000100001111100000100010000100001101010100011100100000\n" // Victreebel + ".8byte 0b1100010100001111100000100010000100000101110011001001100100\n" // Tentacool + ".8byte 0b1100010100001111100000100010000100000101110111001001100100\n" // Tentacruel + ".8byte 0b0010100000000111100111010011001110000100010000011000100001\n" // Geodude + ".8byte 0b0010100000000111100111010011001110000100010000011000100001\n" // Graveler + ".8byte 0b0010100000000111100111010011001110000100010100011000110001\n" // Golem + ".8byte 0b0000100010000111100010010010000100011100010000011000100000\n" // Ponyta + ".8byte 0b0000100010000111100010010010000100011100010100011000100000\n" // Rapidash + ".8byte 0b1001110000100111100010010010111110010110110011011001101100\n" // Slowpoke + ".8byte 0b1011110000100111100010010011111110010110110111011001101101\n" // Slowbro + ".8byte 0b0001000000000011100000001110000101100100110000011000100000\n" // Magnemite + ".8byte 0b0001000000000011100000001110000101100100110100011000100000\n" // Magneton + ".8byte 0b0000001100011111101000000010000100010100010000011000100000\n" // Farfetch'd + ".8byte 0b0000001000011111101000000010000100000100010000011000100000\n" // Doduo + ".8byte 0b0000001000011111111000000010000100000100010100111000100000\n" // Dodrio + ".8byte 0b1100010000001111100000000010000100000110110011001001100100\n" // Seel + ".8byte 0b1100010000001111100000000010000100000110110111001001100100\n" // Dewgong + ".8byte 0b0000000000001111110110111010001101100101110000111000100000\n" // Grimer + ".8byte 0b0010100000001111110110111011001101100101110100111000100001\n" // Muk + ".8byte 0b1000010000000111100000000010000100000100110011001001100100\n" // Shellder + ".8byte 0b1000010000000111110000000010000100000100110111001001100100\n" // Cloyster + ".8byte 0b0000000001101111110000100010110100100101110000111000100000\n" // Gastly + ".8byte 0b0000000001101111110000100010110100100101110000111000100000\n" // Haunter + ".8byte 0b0010100001101111110000100011110101100101110100111000100001\n" // Gengar + ".8byte 0b0010100000000111110101000010001110010100010000111000110000\n" // Onix + ".8byte 0b0001000001101111110000000111110100000110111000111000101001\n" // Drowzee + ".8byte 0b0001000001101111110000000111110100000110111100111000101001\n" // Hypno + ".8byte 0b1010110100001111100100000010001100000100110011001001100100\n" // Krabby + ".8byte 0b1010110100001111100100000010001100000100110111001001100100\n" // Kingler + ".8byte 0b0001000000001011110000001010000101100100111000101000100000\n" // Voltorb + ".8byte 0b0001000000001011110000001010000101100100111100101000100000\n" // Electrode + ".8byte 0b0001100000101111100000100110010100001101011000011100100000\n" // Exeggcute + ".8byte 0b0001100000101111100000100110010100001101011100011100100000\n" // Exeggutor + ".8byte 0b0010100000001111101111010011001110010100010011011000100001\n" // Cubone + ".8byte 0b0010100000001111101111010011001110010100010111011000100001\n" // Marowak + ".8byte 0b0010100000001111100100000011000110000100110000011010100001\n" // Hitmonlee + ".8byte 0b0010100000001111100100000011000110000100110000011010100001\n" // Hitmonchan + ".8byte 0b0010110100001111100111011011101111111100110111011000100101\n" // Lickitung + ".8byte 0b0001000000001111110010111010100101100100110000111000100000\n" // Koffing + ".8byte 0b0001000000001111110010111010100101100100110100111000100000\n" // Weezing + ".8byte 0b0010100000001111100111011010001111110100110011011000110000\n" // Rhyhorn + ".8byte 0b0010110100001111100111011011001111110100110111011000110001\n" // Rhydon + ".8byte 0b0011100001100111100111011011110111111110111111011001101101\n" // Chansey + ".8byte 0b0011000100001111100000100010000100001101010100011100100000\n" // Tangela + ".8byte 0b0010110100001111101111011011101111111100110111011001110101\n" // Kangaskhan + ".8byte 0b1100010000000111100000000010000100000100110011001001100100\n" // Horsea + ".8byte 0b1100010000000111100000000010000100000100110111001001100100\n" // Seadra + ".8byte 0b1100010000000111100000000010000100000100110011001001100100\n" // Goldeen + ".8byte 0b1100010000000111100000000010000100000100110111001001100100\n" // Seaking + ".8byte 0b1101010000000011100000000110010101100100111011001001100100\n" // Staryu + ".8byte 0b1101010000100011100000000110010101100100111111001001100100\n" // Starmie + ".8byte 0b0001000001101111110000001111110101101110111100111000101001\n" // Mr. mime + ".8byte 0b0010000100011111101000000010000100000100110100011000100000\n" // Scyther + ".8byte 0b0001000000101111110000000111110100000100111111101001101101\n" // Jynx + ".8byte 0b0011100000001111100000001011010101110100111100001000100001\n" // Electabuzz + ".8byte 0b0010100000001111100010010011010100010100010100011000100001\n" // Magmar + ".8byte 0b0010100100001111100100000011001110000100110100011010100001\n" // Pinsir + ".8byte 0b0010110000000111100111011010000111111100110111011000100100\n" // Tauros + ".8byte 0b0000000000000000000000000000000000000000000000000000000000\n" // Magikarp + ".8byte 0b1110110000000111110011010010000111100100110111101001110100\n" // Gyarados + ".8byte 0b1110110000000111100000001010010101110110110111001001110100\n" // Lapras + ".8byte 0b0000000000000000000000000000000000000000000000000000000000\n" // Ditto + ".8byte 0b0000000000000111100000000010101100010100110000011000100000\n" // Eevee + ".8byte 0b1100010000000111100000000010101100010100110111011001110100\n" // Vaporeon + ".8byte 0b0001000000000111100000001010101101110100110100011000110000\n" // Jolteon + ".8byte 0b0000000010000111100010010010101100010100110100011000110000\n" // Flareon + ".8byte 0b0001000000001011101000001010110101111100110111011000100000\n" // Porygon + ".8byte 0b1110010000001111100101000010000100000100110011001001100100\n" // Omanyte + ".8byte 0b1110010000001111100101000010000100000100110111001001100100\n" // Omastar + ".8byte 0b0110010000001111101101000010001100000101110011001001100100\n" // Kabuto + ".8byte 0b1110010100001111101101000011001100000101110111001001100100\n" // Kabutops + ".8byte 0b0010101000011111111111010010000110010100110100111000110010\n" // Aerodactyl + ".8byte 0b0000110000000111100111011011110111101100110111011000100101\n" // Snorlax + ".8byte 0b0010001000010011101001000110000100000100110111011001110100\n" // Articuno + ".8byte 0b0011001000010011101001001010000101100100111100011000110000\n" // Zapdos + ".8byte 0b0010001010010011101011010010000100000110110100011000110000\n" // Moltres + ".8byte 0b0100010000000111100010011010000101110110110111011001100100\n" // Dratini + ".8byte 0b0100010000000111100010011010000101110110110111011001100100\n" // Dragonair + ".8byte 0b1110111100010111101111011011000111110110110111011001110111\n" // Dragonite + ".8byte 0b0011100001100011111111011111110111111110111111111011101101\n" // Mewtwo + ".8byte 0b1111111111111111111111111111111111111111111111111111111111\n" // Mew + ".8byte 0b0001000100000111100000000110000100011111011000011100100000\n" // Chikorita + ".8byte 0b0011100100000111100000000110000100011111011000011100100000\n" // Bayleef + ".8byte 0b0011100100000111100000000110000110011111011100011100100000\n" // Meganium + ".8byte 0b0000000110000111101010010010001100000100010000011000100000\n" // Cyndaquil + ".8byte 0b0010100110000111101010010011001100000100010000011000110001\n" // Quilava + ".8byte 0b0010100110000111101010010011001110000100010100011000110001\n" // Typhlosion + ".8byte 0b1100010100000111101000000011001100010100110011001001100101\n" // Totodile + ".8byte 0b1110110100000111101000000011001100010100110011001001110101\n" // Croconaw + ".8byte 0b1110110100000111101000000011001110010100110111001001110111\n" // Feraligatr + ".8byte 0b0000010100001111100000011011101100111100110001011000100101\n" // Sentret + ".8byte 0b0010110100001111100000011011101101111100110111011000100101\n" // Furret + ".8byte 0b0001001000011111101000000110110100000100110000011000100000\n" // Hoothoot + ".8byte 0b0001001000011111101000000110110100000100110100011000100000\n" // Noctowl + ".8byte 0b0001000000001111101000000111001100001111011000011000100001\n" // Ledyba + ".8byte 0b0001000000001111101000000111001100001111011100011000100001\n" // Ledian + ".8byte 0b0001000000001111100000100010011100001101010000011000100000\n" // Spinarak + ".8byte 0b0001000000001111100000100010011100001101010100011000100000\n" // Ariados + ".8byte 0b0000001001011111111000100010100100000101110100111000100000\n" // Crobat + ".8byte 0b1101010000000111100000001010000101100100110011001001100100\n" // Chinchou + ".8byte 0b1101010000000111100000001010000101100100110111001001100100\n" // Lanturn + ".8byte 0b0001000000000111100000001010000101110100111000001000100000\n" // Pichu + ".8byte 0b0001000000000111100010011110111100011110111000011000100100\n" // Cleffa + ".8byte 0b0001000000000111100010011110111100001110111000011000100100\n" // Igglybuff + ".8byte 0b0011000000000111100010011110110100001110111000011000100100\n" // Togepi + ".8byte 0b0011001000010111101010011111110100001110111100011000100101\n" // Togetic + ".8byte 0b0001000000111111101000000110110100001101111000011000101000\n" // Natu + ".8byte 0b0001001000111111101000000110110100001101111100011000101000\n" // Xatu + ".8byte 0b0001000000000111100000001010000101110100111000001000100000\n" // Mareep + ".8byte 0b0011100000000111100000001011000101110100111000001000100001\n" // Flaaffy + ".8byte 0b0011100000000111100000001011000101110100111100001000100001\n" // Ampharos + ".8byte 0b0001000100000111100000100010000100001111010100011100100000\n" // Bellossom + ".8byte 0b1110110000000111100000000011001100010100110011001001100101\n" // Marill + ".8byte 0b1110110000000111100000000011001100010100110111001001100101\n" // Azumarill + ".8byte 0b0010100000001111100101000011001110000100010000111000101001\n" // Sudowoodo + ".8byte 0b1110110000001111100000000011011110000100110111001001100101\n" // Politoed + ".8byte 0b0001000000000111101000000010000100001101010000011100100000\n" // Hoppip + ".8byte 0b0001000000000111101000000010000100001101010000011100100000\n" // Skiploom + ".8byte 0b0001000000000111101000000010000100001101010100011100100000\n" // Jumpluff + ".8byte 0b0010100101001111101000001011101101111100110000111000100101\n" // Aipom + ".8byte 0b0001000100000111100000100010000100001111011000011100100000\n" // Sunkern + ".8byte 0b0001000100000111100000100010000100001111011100011100100000\n" // Sunflora + ".8byte 0b0001000000011111101000000010110100001101010000011000100000\n" // Yanma + ".8byte 0b1111010000000111100001100010001110010100110011001001100100\n" // Wooper + ".8byte 0b1111110000000111100101100011001110010100110111001001100101\n" // Quagsire + ".8byte 0b0001000100100111100000000110111100010100111100011000101000\n" // Espeon + ".8byte 0b0001000101000111110000000010111100010100110100111000100000\n" // Umbreon + ".8byte 0b0000001001011111111000000010100100000100110000111000101000\n" // Murkrow + ".8byte 0b1011110000100111100010010011111110010110110111011001101101\n" // Slowking + ".8byte 0b0001000001101111111000001010110101100100110000111000101000\n" // Misdreavus + ".8byte 0b0000000000000000000000000000000000000000000000000000000000\n" // Unown + ".8byte 0b0000000000000000000000000000000000000000000000000000000000\n" // Wobbuffet + ".8byte 0b0011100000101111100000001110110111110100111000011000101000\n" // Girafarig + ".8byte 0b0010100000000111100001000110001110001101011000011000100000\n" // Pineco + ".8byte 0b0010100000000111100001000110001110001101011100011000100000\n" // Forretress + ".8byte 0b0010100000001111100110011010101111111100110011011000101100\n" // Dunsparce + ".8byte 0b0010100100011111101101100010001110010100110000011000100000\n" // Gligar + ".8byte 0b0010100100000111110101000010001110010100010100111000110000\n" // Steelix + ".8byte 0b0010100010001111110010111011101111101100110000111010110101\n" // Snubbull + ".8byte 0b0010100010001111110110111011101111111100110100111010110101\n" // Granbull + ".8byte 0b1100010000000111100000101010100100000100110011001001100100\n" // Qwilfish + ".8byte 0b0010100100011111101001000010000100000100110100011000100000\n" // Scizor + ".8byte 0b0011100000000111100101100010001110000110010000011000100000\n" // Shuckle + ".8byte 0b0010100100001111100100000011001110000100110100011010100001\n" // Heracross + ".8byte 0b0010110101001111111000000011101100010100110011111001101001\n" // Sneasel + ".8byte 0b0010100100001111111000000011001110000100110000111010110001\n" // Teddiursa + ".8byte 0b0010100100001111111100000011001110000100110100111010110001\n" // Ursaring + ".8byte 0b0010000010000111100010010110000100000100011000011000100000\n" // Slugma + ".8byte 0b0010100010000111100111010110000110000100011100011000100000\n" // Magcargo + ".8byte 0b0010100000000111100101000110001110000100111011001001110000\n" // Swinub + ".8byte 0b0010100000000111100101000110001110000100111111001001110000\n" // Piloswine + ".8byte 0b0010110000000111100101000110111110000110111011011001101100\n" // Corsola + ".8byte 0b1100010000001111100010010010010100000100110111011000100100\n" // Remoraid + ".8byte 0b1100010000001111100010110010010100000100110111011100100100\n" // Octillery + ".8byte 0b0000001000001111101000000010000100000100110011001001100101\n" // Delibird + ".8byte 0b1100010000000111101000000010000110000100110011001001100100\n" // Mantine + ".8byte 0b0010001100011111111001000010000100000100010000111000110000\n" // Skarmory + ".8byte 0b0010000011001111110010110010100100011100010000111000110000\n" // Houndour + ".8byte 0b0010100011001111110010110010100100011100010100111000110000\n" // Houndoom + ".8byte 0b1100010000000111100000000010000100000100110111001001100100\n" // Kingdra + ".8byte 0b0010100000000111100101000010000110010100010000011000110000\n" // Phanpy + ".8byte 0b0010100000000111100101000010000110010100010100011000110000\n" // Donphan + ".8byte 0b0001000000001011101000001010110101111100110111011000100000\n" // Porygon2 + ".8byte 0b0001000000101111100000001110110111111100111000011000111000\n" // Stantler + ".8byte 0b0000000000000000000000000000000000000000000000000000000000\n" // Smeargle + ".8byte 0b0010100000001111100000000011000110000100110000011010100000\n" // Tyrogue + ".8byte 0b0010100000001111100001000011001110000100110000011010100000\n" // Hitmontop + ".8byte 0b0001000000101111100000000110110100000100111011001001101100\n" // Smoochum + ".8byte 0b0011000000001111100000001011010101100100111000001000100001\n" // Elekid + ".8byte 0b0010000000001111100010010011010100010100010000011000100001\n" // Magby + ".8byte 0b0010110000000111100101001011100111111100110111011000100101\n" // Miltank + ".8byte 0b0011100001100111100111011011110111111110111111011001101101\n" // Blissey + ".8byte 0b0011100100000011100001001110001101110100110100011000111000\n" // Raikou + ".8byte 0b0011100100000011100011010110001100011100110100011000111000\n" // Entei + ".8byte 0b1110010100000011100001000110001100010100110111011001111100\n" // Suicune + ".8byte 0b0010000000000111110001000011001110000100110100111000100000\n" // Larvitar + ".8byte 0b0010000000000111110001000011001110000100110100111000100000\n" // Pupitar + ".8byte 0b0010110100000111111111011011001111110100110111111000110111\n" // Tyranitar + ".8byte 0b1110111000110011101001001110110111110111111111011001111100\n" // Lugia + ".8byte 0b0011101010010011101011011110110111101111111100011000111000\n" // Ho-Oh + ".8byte 0b0001000100100011101001001110110100001111111100011000101100\n" // Celebi + ".8byte 0b0000000000000000000000000000000000000000000000000000000000\n" // ? + ".8byte 0b0000000000000000000000000000000000000000000000000000000000\n" // ? + ".8byte 0b0000000000000000000000000000000000000000000000000000000000\n" // ? + ".8byte 0b0000000000000000000000000000000000000000000000000000000000\n" // ? + ".8byte 0b0000000000000000000000000000000000000000000000000000000000\n" // ? + ".8byte 0b0000000000000000000000000000000000000000000000000000000000\n" // ? + ".8byte 0b0000000000000000000000000000000000000000000000000000000000\n" // ? + ".8byte 0b0000000000000000000000000000000000000000000000000000000000\n" // ? + ".8byte 0b0000000000000000000000000000000000000000000000000000000000\n" // ? + ".8byte 0b0000000000000000000000000000000000000000000000000000000000\n" // ? + ".8byte 0b0000000000000000000000000000000000000000000000000000000000\n" // ? + ".8byte 0b0000000000000000000000000000000000000000000000000000000000\n" // ? + ".8byte 0b0000000000000000000000000000000000000000000000000000000000\n" // ? + ".8byte 0b0000000000000000000000000000000000000000000000000000000000\n" // ? + ".8byte 0b0000000000000000000000000000000000000000000000000000000000\n" // ? + ".8byte 0b0000000000000000000000000000000000000000000000000000000000\n" // ? + ".8byte 0b0000000000000000000000000000000000000000000000000000000000\n" // ? + ".8byte 0b0000000000000000000000000000000000000000000000000000000000\n" // ? + ".8byte 0b0000000000000000000000000000000000000000000000000000000000\n" // ? + ".8byte 0b0000000000000000000000000000000000000000000000000000000000\n" // ? + ".8byte 0b0000000000000000000000000000000000000000000000000000000000\n" // ? + ".8byte 0b0000000000000000000000000000000000000000000000000000000000\n" // ? + ".8byte 0b0000000000000000000000000000000000000000000000000000000000\n" // ? + ".8byte 0b0000000000000000000000000000000000000000000000000000000000\n" // ? + ".8byte 0b0000000000000000000000000000000000000000000000000000000000\n" // ? + ".8byte 0b0011100100000111101100000011001100011111010000011100100001\n" // Treecko + ".8byte 0b0011100100000111101100000011001100011111010000011100100001\n" // Grovyle + ".8byte 0b0011100100000111101100000011001110011111010100011100110011\n" // Sceptile + ".8byte 0b0010100110000111101110010010001100000100010000011000100000\n" // Torchic + ".8byte 0b0010100110000111101110010011001100000100010000011010100001\n" // Combusken + ".8byte 0b0010100110000111101110010011001110000100010100011010110001\n" // Blaziken + ".8byte 0b1110110000000111100100000010001100010100110011001001100100\n" // Mudkip + ".8byte 0b1110110000000111100100000010001110010100110011001001100100\n" // Marshtomp + ".8byte 0b1110110000000111100100000011001110010100110111001001110101\n" // Swampert + ".8byte 0b0010000001001111110000000010101100010100110000111000110000\n" // Poochyena + ".8byte 0b0010100001001111110000000010101100010100110100111000110000\n" // Mightyena + ".8byte 0b0010010100001111100000001010101101110100110011011000100100\n" // Zigzagoon + ".8byte 0b0010110100001111100000001010101101110100110111011000110100\n" // Linoone + ".8byte 0b0000000000000000000000000000000000000000000000000000000000\n" // Wurmple + ".8byte 0b0000000000000000000000000000000000000000000000000000000000\n" // Silcoon + ".8byte 0b0001000000001111101000000010110100001111010100011000100000\n" // Beautifly + ".8byte 0b0000000000000000000000000000000000000000000000000000000000\n" // Cascoon + ".8byte 0b0001000000001111101000100010110100001101011100011000100000\n" // Dustox + ".8byte 0b0001010000001111100000000010000100001101110011011101100100\n" // Lotad + ".8byte 0b1111110000001111100000000011000100001101110011011101100100\n" // Lombre + ".8byte 0b1111110000001111100000000011000100001101110111011101100101\n" // Ludicolo + ".8byte 0b0011000000000111100000000010101100001101010000011100100000\n" // Seedot + ".8byte 0b0011100100001111110100000011101100001101010100011100100000\n" // Nuzleaf + ".8byte 0b0011100100001111111100000011101100001101010100011100100000\n" // Shiftry + ".8byte 0b0001000100000011101001000010101100001101010000011000100000\n" // Nincada + ".8byte 0b0001000100001111101001000010101100001101010100011000100000\n" // Ninjask + ".8byte 0b0001000100001011101001000010101100001101010100011000100000\n" // Shedinja + ".8byte 0b0000001000011111101000000010000100000100110000011000100000\n" // Taillow + ".8byte 0b0000001000011111101000000010000100000100110100011000100000\n" // Swellow + ".8byte 0b0001000001000111100000100010000100001111010000011100100000\n" // Shroomish + ".8byte 0b0011100101000111100000100011000100011111010100011110100001\n" // Breloom + ".8byte 0b0011100001101111100100001011111100000110110000011000101101\n" // Spinda + ".8byte 0b0000001000011111101000001010000100000100110011001001100100\n" // Wingull + ".8byte 0b0000011000011111101000001010000100000100110111001001100100\n" // Pelipper + ".8byte 0b0001000000001111100000000010100100001101110011011000100100\n" // Surskit + ".8byte 0b0001000000001111101000000010100100001101110111011000100100\n" // Masquerain + ".8byte 0b1110110000000111100100000010000110000100110011001001110100\n" // Wailmer + ".8byte 0b1110110000000111100100000010000110000100110111001001110100\n" // Wailord + ".8byte 0b0001000000000111100000001010101101111110110011011000101100\n" // Skitty + ".8byte 0b0011100000000111100000001010101101111110110111011000101100\n" // Delcatty + ".8byte 0b0011100101101111101110011011101101111100110011011000100101\n" // Kecleon + ".8byte 0b0001000000100011100101000110111110001100111001011000100000\n" // Baltoy + ".8byte 0b0011100000100011100101000110111110001100111101011000100000\n" // Claydol + ".8byte 0b0010100000000111110101001010000111100100010000111000100000\n" // Nosepass + ".8byte 0b0010100010000111100010110010000100010100010000011000100000\n" // Torkoal + ".8byte 0b0011000101001111111100001011111100000100110000111000101101\n" // Sableye + ".8byte 0b1100010000000111100101000010000110000100110011001001100100\n" // Barboach + ".8byte 0b1110110000000111100101000010000110000100110111001001100100\n" // Whiscash + ".8byte 0b1100010000000111100000000010000100000110110011001001100100\n" // Luvdisc + ".8byte 0b0110110100000111101100100011001100000100110011101001100100\n" // Corphish + ".8byte 0b1110110100000111101100100011001100000100110111101001100100\n" // Crawdaunt + ".8byte 0b1100010000000111100000000010000100000100110011001001100100\n" // Feebas + ".8byte 0b1100010000000111100000000010000100010110110111001001100100\n" // Milotic + ".8byte 0b1100010000001111110000000010000100000100110011101001100100\n" // Carvanha + ".8byte 0b1110110000001111110100000010000110000100110111101001110100\n" // Sharpedo + ".8byte 0b0010100000000111100101000010001110001101010100011000100000\n" // Trapinch + ".8byte 0b0010101000010111100101000010001110001101010100011000100000\n" // Vibrava + ".8byte 0b0010101000010111100111010010001110011101010100011000100010\n" // Flygon + ".8byte 0b0010110000000111100100000011001110000100110000011010100001\n" // Makuhita + ".8byte 0b0010110000000111100100000011001110000100110100011010100001\n" // Hariyama + ".8byte 0b0001100000001111100000001010000101110100110000001000110000\n" // Electrike + ".8byte 0b0001100000001111100000001010000101110100110100001000110000\n" // Manectric + ".8byte 0b0010100010000111100111010010001110000100010000011000100000\n" // Numel + ".8byte 0b0010100010000111100111010010001110000100010100011000110000\n" // Camerupt + ".8byte 0b1110110000000111100100000010000110010100110011001001100100\n" // Spheal + ".8byte 0b1110110000000111100100000010000110010100110011001001110100\n" // Sealeo + ".8byte 0b1110110000000111100100000010000110010100110111001001110100\n" // Walrein + ".8byte 0b0001000100000111100001000010000100001101010000011100100001\n" // Cacnea + ".8byte 0b0001100100000111100001000010000100001101010100011100100001\n" // Cacturne + ".8byte 0b0001000000000111100000000010100100000110111011001001100100\n" // Snorunt + ".8byte 0b0001000000000111110000000010100110000110111111101001100100\n" // Glalie + ".8byte 0b0001000000100011100101000110110110000110111101001000101000\n" // Lunatone + ".8byte 0b0001000010100011100111010110110110001110011100011000101000\n" // Solrock + ".8byte 0b0100010000000111100000000010000100010100110011001001100100\n" // Azurill + ".8byte 0b0001000001101111110000001110110100010100111000111000101000\n" // Spoink + ".8byte 0b0001000001101111110000001110110100010100111100111000101001\n" // Grumpig + ".8byte 0b0001000000000111100000001010000101110100111000001000100000\n" // Plusle + ".8byte 0b0001000000000111100000001010000101110100111000001000100000\n" // Minun + ".8byte 0b0010100000000111110111110011000100001100110101111000100001\n" // Mawile + ".8byte 0b0011100000000111100100000111110100000100111000011010101001\n" // Meditite + ".8byte 0b0011100000000111100100000111110100000100111100011010101001\n" // Medicham + ".8byte 0b0000001000011111101000000010000100001110110001011000100000\n" // Swablu + ".8byte 0b0010001000011111101010010010000110011110110101011000110010\n" // Altaria + ".8byte 0b0000000000000000000000000000000000000000000000000000000000\n" // Wynaut + ".8byte 0b0001000001101111110000000010110100000100110011111000101000\n" // Duskull + ".8byte 0b0011100001101111110100000010110110000100110111111000101001\n" // Dusclops + ".8byte 0b0001000100000111100000100010100100001101010000011100100000\n" // Roselia + ".8byte 0b0010100100000111101010011011100101101100110011011010100101\n" // Slakoth + ".8byte 0b0010100100000111101010011011100111101100110011111010110101\n" // Vigoroth + ".8byte 0b0010100100000111101010011011100111101100110111111010110101\n" // Slaking + ".8byte 0b0010100001000111100000101010100100001101110001011100100100\n" // Gulpin + ".8byte 0b0010100001000111100000101010100100001101110101011100100100\n" // Swalot + ".8byte 0b0011101100010111101000000010000110001111010100011100110000\n" // Tropius + ".8byte 0b0000000000000111100010011010100100001100110011011000110100\n" // Whismur + ".8byte 0b0010100010000111110010011011100110001100110011111000110100\n" // Loudred + ".8byte 0b0010100010000111110010011011100110001100110111111000110100\n" // Exploud + ".8byte 0b1100010000000111100000000010000100000100110011001001100100\n" // Clamperl + ".8byte 0b1100010001000111100100000010000100000100110111001001100100\n" // Huntail + ".8byte 0b1100010000000111100000000010110100000110110111001001100100\n" // Gorebyss + ".8byte 0b0011100101001111111011011010100101110100110111111001101100\n" // Absol + ".8byte 0b0001000001101111110000001010110101100100110000111000101000\n" // Shuppet + ".8byte 0b0001000001101111110000001010110101100100110100111000101000\n" // Banette + ".8byte 0b0010100001001111100000110010001110010101110000111000100000\n" // Seviper + ".8byte 0b0010100000001111101010011011101101111101110011111000110101\n" // Zangoose + ".8byte 0b1110010000000111100101000010000110000110110111001001101100\n" // Relicanth + ".8byte 0b0010100100000111101101001010001110010100110000011000110100\n" // Aron + ".8byte 0b0010100100000111101101001010001110010100110000011000110100\n" // Lairon + ".8byte 0b0010110100000111101111011011001111111100110111111000110111\n" // Aggron + ".8byte 0b0001000000001111100011011010100101101100110011011001100100\n" // Castform + ".8byte 0b0001000000001111101000001011100101101101111000011000100101\n" // Volbeat + ".8byte 0b0001000000001111101000001011100101101101111000011000100101\n" // Illumise + ".8byte 0b0000000000000111100001100010000100001101010000011100100000\n" // Lileep + ".8byte 0b0010100000000111100101100010000110001101010100011100100000\n" // Cradily + ".8byte 0b0010000100000111101101000011001100000100010000011000100100\n" // Anorith + ".8byte 0b0010100100000111101101000011001110010100010100011000100100\n" // Armaldo + ".8byte 0b0001000001101111110000001110110100100110111000111000101000\n" // Ralts + ".8byte 0b0001000001101111110000001110110100100110111000111000101000\n" // Kirlia + ".8byte 0b0001000001101111110000001110110100100110111100111000101000\n" // Gardevoir + ".8byte 0b0010100100000111101110010011000100000100110000011000110010\n" // Bagon + ".8byte 0b0010100100000111101110010011000100000100110000011000110010\n" // Shelgon + ".8byte 0b0010101100010111101110010011000110010100110100011000110010\n" // Salamence + ".8byte 0b0000000000000000000000000000000000000000000000000000000000\n" // Beldum + ".8byte 0b0011100100000011101101100111110110000100111100011000100000\n" // Metang + ".8byte 0b0011100100000011101101100111110110000100111100011000100000\n" // Metagross + ".8byte 0b0010100000000011100101001011001111100110010100011000100001\n" // Regirock + ".8byte 0b0010100000000011100000001011000111100110110111001001100001\n" // Regice + ".8byte 0b0010100000000011101101001011000111100110110100011000100001\n" // Registeel + ".8byte 0b1110110000000011100100001011000111100110110111001001111100\n" // Kyogre + ".8byte 0b0010100110000011101111011011001111111110010100011010110010\n" // Groudon + ".8byte 0b1110111010000011101011011011000111111100110111011010110110\n" // Rayquaza + ".8byte 0b1101011100010111101001001110110111101110111101011000111110\n" // Latias + ".8byte 0b1101011100010111101001001110110111101110111101011000111110\n" // Latios + ".8byte 0b0001000000100011101001001110110101100110111100011000101100\n" // Jirachi + ".8byte 0b0011100101100011111100001111110101101110111101111000101101\n" // Deoxys + ".8byte 0b0001000001100111110000001110110100000110111000111000101000\n" // Chimecho +); + +#endif //POKERUBY_TMHM_LEARNSETS_H diff --git a/src/data/pokemon/trainer_class_lookups.h b/src/data/pokemon/trainer_class_lookups.h new file mode 100644 index 000000000..c86e795c4 --- /dev/null +++ b/src/data/pokemon/trainer_class_lookups.h @@ -0,0 +1,168 @@ +// + +// + +#ifndef POKERUBY_TRAINER_CLASS_LOOKUPS_H +#define POKERUBY_TRAINER_CLASS_LOOKUPS_H + +const u8 gTrainerClassToPicIndex[] = { + TRAINER_PIC_ARCHIE, // AQUA_LEADER + TRAINER_PIC_AQUA_GRUNT_M, // TEAM_AQUA_M + TRAINER_PIC_AQUA_GRUNT_F, // TEAM_AQUA_F + TRAINER_PIC_AROMA_LADY, // AROMA_LADY + TRAINER_PIC_RUIN_MANIAC, // RUIN_MANIAC + TRAINER_PIC_INTERVIEWER, // INTERVIEWER + TRAINER_PIC_TUBER_F, // TUBER_F + TRAINER_PIC_TUBER_M, // TUBER_M + TRAINER_PIC_COOL_TRAINER_M, // COOL_TRAINER_M + TRAINER_PIC_COOL_TRAINER_F, // COOL_TRAINER_F + TRAINER_PIC_HEX_MANIAC, // HEX_MANIAC + TRAINER_PIC_LADY, // LADY + TRAINER_PIC_BEAUTY, // BEAUTY + TRAINER_PIC_RICH_BOY, // RICH_BOY + TRAINER_PIC_POKEMANIAC, // POKEMANIAC + TRAINER_PIC_SWIMMER_M, // SWIMMER_M + TRAINER_PIC_BLACK_BELT, // BLACK_BELT + TRAINER_PIC_GUITARIST, // GUITARIST + TRAINER_PIC_KINDLER, // KINDLER + TRAINER_PIC_CAMPER, // CAMPER + TRAINER_PIC_BUG_MANIAC, // BUG_MANIAC + TRAINER_PIC_PSYCHIC_M, // PSYCHIC_M + TRAINER_PIC_PSYCHIC_F, // PSYCHIC_F + TRAINER_PIC_GENTLEMAN, // GENTLEMAN + TRAINER_PIC_SIDNEY, // ELITE_FOUR_M + TRAINER_PIC_PHOEBE, // ELITE_FOUR_F + TRAINER_PIC_ROXANNE, // LEADER_F + TRAINER_PIC_BRAWLY, // LEADER_M + TRAINER_PIC_TATE_AND_LIZA, // LEADER_MF + TRAINER_PIC_SCHOOL_KID_M, // SCHOOL_KID_M + TRAINER_PIC_SCHOOL_KID_F, // SCHOOL_KID_F + TRAINER_PIC_SR_AND_JR, // SR_AND_JR + TRAINER_PIC_POKEFAN_M, // POKEFAN_M + TRAINER_PIC_POKEFAN_F, // POKEFAN_F + TRAINER_PIC_EXPERT_M, // EXPERT_M + TRAINER_PIC_EXPERT_F, // EXPERT_F + TRAINER_PIC_YOUNGSTER, // YOUNGSTER + TRAINER_PIC_STEVEN, // CHAMPION + TRAINER_PIC_FISHERMAN, // FISHERMAN + TRAINER_PIC_CYCLING_TRIATHLETE_M, // CYCLING_TRIATHLETE_M + TRAINER_PIC_CYCLING_TRIATHLETE_F, // CYCLING_TRIATHLETE_F + TRAINER_PIC_RUNNING_TRIATHLETE_M, // RUNNING_TRIATHLETE_M + TRAINER_PIC_RUNNING_TRIATHLETE_F, // RUNNING_TRIATHLETE_F + TRAINER_PIC_SWIMMING_TRIATHLETE_M, // SWIMMING_TRIATHLETE_M + TRAINER_PIC_SWIMMING_TRIATHLETE_F, // SWIMMING_TRIATHLETE_F + TRAINER_PIC_DRAGON_TAMER, // DRAGON_TAMER + TRAINER_PIC_BIRD_KEEPER, // BIRD_KEEPER + TRAINER_PIC_NINJA_BOY, // NINJA_BOY + TRAINER_PIC_BATTLE_GIRL, // BATTLE_GIRL + TRAINER_PIC_PARASOL_LADY, // PARASOL_LADY + TRAINER_PIC_SWIMMER_F, // SWIMMER_F + TRAINER_PIC_PICNICKER, // PICNICKER + TRAINER_PIC_TWINS, // TWINS + TRAINER_PIC_SAILOR, // SAILOR + TRAINER_PIC_YOUNGSTER, // BOARDER_1 + TRAINER_PIC_YOUNGSTER, // BOARDER_2 + TRAINER_PIC_COLLECTOR, // COLLECTOR + TRAINER_PIC_WALLY, // WALLY + TRAINER_PIC_BRENDAN, // BRENDAN_1 + TRAINER_PIC_BRENDAN, // BRENDAN_2 + TRAINER_PIC_BRENDAN, // BRENDAN_3 + TRAINER_PIC_MAY, // MAY_1 + TRAINER_PIC_MAY, // MAY_2 + TRAINER_PIC_MAY, // MAY_3 + TRAINER_PIC_POKEMON_BREEDER_M, // POKEMON_BREEDER_M + TRAINER_PIC_POKEMON_BREEDER_F, // POKEMON_BREEDER_F + TRAINER_PIC_POKEMON_RANGER_M, // POKEMON_RANGER_M + TRAINER_PIC_POKEMON_RANGER_F, // POKEMON_RANGER_F + TRAINER_PIC_MAXIE, // MAGMA_LEADER + TRAINER_PIC_MAGMA_GRUNT_M, // TEAM_MAGMA_M + TRAINER_PIC_MAGMA_GRUNT_F, // TEAM_MAGMA_F + TRAINER_PIC_LASS, // LASS + TRAINER_PIC_BUG_CATCHER, // BUG_CATCHER + TRAINER_PIC_HIKER, // HIKER + TRAINER_PIC_YOUNG_COUPLE, // YOUNG_COUPLE + TRAINER_PIC_OLD_COUPLE, // OLD_COUPLE + TRAINER_PIC_SIS_AND_BRO // SIS_AND_BRO +}; + +const u8 gTrainerClassToNameIndex[] = { + TRAINER_CLASS_NAME_AQUA_LEADER, // AQUA_LEADER + TRAINER_CLASS_NAME_TEAM_AQUA, // TEAM_AQUA_M + TRAINER_CLASS_NAME_TEAM_AQUA, // TEAM_AQUA_F + TRAINER_CLASS_NAME_AROMA_LADY, // AROMA_LADY + TRAINER_CLASS_NAME_RUIN_MANIAC, // RUIN_MANIAC + TRAINER_CLASS_NAME_INTERVIEWER, // INTERVIEWER + TRAINER_CLASS_NAME_TUBER_F, // TUBER_F + TRAINER_CLASS_NAME_TUBER_M, // TUBER_M + TRAINER_CLASS_NAME_COOL_TRAINER, // COOL_TRAINER_M + TRAINER_CLASS_NAME_COOL_TRAINER, // COOL_TRAINER_F + TRAINER_CLASS_NAME_HEX_MANIAC, // HEX_MANIAC + TRAINER_CLASS_NAME_LADY, // LADY + TRAINER_CLASS_NAME_BEAUTY, // BEAUTY + TRAINER_CLASS_NAME_RICH_BOY, // RICH_BOY + TRAINER_CLASS_NAME_POKEMANIAC, // POKEMANIAC + TRAINER_CLASS_NAME_SWIMMER_M, // SWIMMER_M + TRAINER_CLASS_NAME_BLACK_BELT, // BLACK_BELT + TRAINER_CLASS_NAME_GUITARIST, // GUITARIST + TRAINER_CLASS_NAME_KINDLER, // KINDLER + TRAINER_CLASS_NAME_CAMPER, // CAMPER + TRAINER_CLASS_NAME_BUG_MANIAC, // BUG_MANIAC + TRAINER_CLASS_NAME_PSYCHIC, // PSYCHIC_M + TRAINER_CLASS_NAME_PSYCHIC, // PSYCHIC_F + TRAINER_CLASS_NAME_GENTLEMAN, // GENTLEMAN + TRAINER_CLASS_NAME_ELITE_FOUR, // ELITE_FOUR_M + TRAINER_CLASS_NAME_ELITE_FOUR, // ELITE_FOUR_F + TRAINER_CLASS_NAME_LEADER, // LEADER_F + TRAINER_CLASS_NAME_LEADER, // LEADER_M + TRAINER_CLASS_NAME_LEADER, // LEADER_MF + TRAINER_CLASS_NAME_SCHOOL_KID, // SCHOOL_KID_M + TRAINER_CLASS_NAME_SCHOOL_KID, // SCHOOL_KID_F + TRAINER_CLASS_NAME_SR_AND_JR, // SR_AND_JR + TRAINER_CLASS_NAME_POKEFAN, // POKEFAN_M + TRAINER_CLASS_NAME_POKEFAN, // POKEFAN_F + TRAINER_CLASS_NAME_EXPERT, // EXPERT_M + TRAINER_CLASS_NAME_EXPERT, // EXPERT_F + TRAINER_CLASS_NAME_YOUNGSTER, // YOUNGSTER + TRAINER_CLASS_NAME_CHAMPION, // CHAMPION + TRAINER_CLASS_NAME_FISHERMAN, // FISHERMAN + TRAINER_CLASS_NAME_TRIATHLETE, // CYCLING_TRIATHLETE_M + TRAINER_CLASS_NAME_TRIATHLETE, // CYCLING_TRIATHLETE_F + TRAINER_CLASS_NAME_TRIATHLETE, // RUNNING_TRIATHLETE_M + TRAINER_CLASS_NAME_TRIATHLETE, // RUNNING_TRIATHLETE_F + TRAINER_CLASS_NAME_TRIATHLETE, // SWIMMING_TRIATHLETE_M + TRAINER_CLASS_NAME_TRIATHLETE, // SWIMMING_TRIATHLETE_F + TRAINER_CLASS_NAME_DRAGON_TAMER, // DRAGON_TAMER + TRAINER_CLASS_NAME_BIRD_KEEPER, // BIRD_KEEPER + TRAINER_CLASS_NAME_NINJA_BOY, // NINJA_BOY + TRAINER_CLASS_NAME_BATTLE_GIRL, // BATTLE_GIRL + TRAINER_CLASS_NAME_PARASOL_LADY, // PARASOL_LADY + TRAINER_CLASS_NAME_SWIMMER_F, // SWIMMER_F + TRAINER_CLASS_NAME_PICNICKER, // PICNICKER + TRAINER_CLASS_NAME_TWINS, // TWINS + TRAINER_CLASS_NAME_SAILOR, // SAILOR + TRAINER_CLASS_NAME_BOARDER, // BOARDER_1 + TRAINER_CLASS_NAME_BOARDER, // BOARDER_2 + TRAINER_CLASS_NAME_COLLECTOR, // COLLECTOR + TRAINER_CLASS_NAME_POKEMON_TRAINER_3, // WALLY + TRAINER_CLASS_NAME_POKEMON_TRAINER_3, // BRENDAN_1 + TRAINER_CLASS_NAME_POKEMON_TRAINER_3, // BRENDAN_2 + TRAINER_CLASS_NAME_POKEMON_TRAINER_3, // BRENDAN_3 + TRAINER_CLASS_NAME_POKEMON_TRAINER_3, // MAY_1 + TRAINER_CLASS_NAME_POKEMON_TRAINER_3, // MAY_2 + TRAINER_CLASS_NAME_POKEMON_TRAINER_3, // MAY_3 + TRAINER_CLASS_NAME_POKEMON_BREEDER, // POKEMON_BREEDER_M + TRAINER_CLASS_NAME_POKEMON_BREEDER, // POKEMON_BREEDER_F + TRAINER_CLASS_NAME_POKEMON_RANGER, // POKEMON_RANGER_M + TRAINER_CLASS_NAME_POKEMON_RANGER, // POKEMON_RANGER_F + TRAINER_CLASS_NAME_MAGMA_LEADER, // MAGMA_LEADER + TRAINER_CLASS_NAME_TEAM_MAGMA, // TEAM_MAGMA_M + TRAINER_CLASS_NAME_TEAM_MAGMA, // TEAM_MAGMA_F + TRAINER_CLASS_NAME_LASS, // LASS + TRAINER_CLASS_NAME_BUG_CATCHER, // BUG_CATCHER + TRAINER_CLASS_NAME_HIKER, // HIKER + TRAINER_CLASS_NAME_YOUNG_COUPLE, // YOUNG_COUPLE + TRAINER_CLASS_NAME_OLD_COUPLE, // OLD_COUPLE + TRAINER_CLASS_NAME_SIS_AND_BRO // SIS_AND_BRO +}; + +#endif //POKERUBY_TRAINER_CLASS_LOOKUPS_H diff --git a/src/field/daycare.c b/src/field/daycare.c index 9c5808a0e..d182e121b 100644 --- a/src/field/daycare.c +++ b/src/field/daycare.c @@ -13,7 +13,6 @@ #include "moves.h" #include "trade.h" #include "strings2.h" -#include "data/pokemon/egg_moves.h" #include "party_menu.h" #include "field_effect.h" #include "main.h" @@ -33,6 +32,8 @@ static void sub_80417F4(struct DayCareMail *); static void sub_80420FC(struct Pokemon *, u16, struct DayCareData *); static u8 daycare_relationship_score(struct DayCareData *); +#include "../data/pokemon/egg_moves.h" + const u8 *const gUnknown_08209AC4[] = { DaycareText_GetAlongVeryWell, DaycareText_GetAlong, diff --git a/src/field/field_map_obj.c b/src/field/field_map_obj.c index 0e1ce2a31..094e70107 100644 --- a/src/field/field_map_obj.c +++ b/src/field/field_map_obj.c @@ -1578,13 +1578,13 @@ void (*const gUnknown_0836DA88[])(struct Sprite *) = const u8 gUnknown_0836DBBC[] = {0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; const u8 gUnknown_0836DC09[] = {DIR_SOUTH, DIR_SOUTH, DIR_SOUTH, DIR_NORTH, DIR_SOUTH, DIR_WEST, DIR_EAST, DIR_NORTH, DIR_SOUTH, DIR_WEST, DIR_EAST, DIR_SOUTH, DIR_SOUTH, DIR_SOUTH, DIR_WEST, DIR_NORTH, DIR_NORTH, DIR_SOUTH, DIR_SOUTH, DIR_SOUTH, DIR_SOUTH, DIR_NORTH, DIR_SOUTH, DIR_SOUTH, DIR_SOUTH, DIR_NORTH, DIR_SOUTH, DIR_WEST, DIR_EAST, DIR_NORTH, DIR_EAST, DIR_SOUTH, DIR_WEST, DIR_NORTH, DIR_WEST, DIR_SOUTH, DIR_EAST, DIR_WEST, DIR_NORTH, DIR_EAST, DIR_SOUTH, DIR_EAST, DIR_NORTH, DIR_WEST, DIR_SOUTH, DIR_NORTH, DIR_SOUTH, DIR_WEST, DIR_EAST, DIR_NORTH, DIR_SOUTH, DIR_WEST, DIR_EAST, DIR_NORTH, DIR_SOUTH, DIR_WEST, DIR_EAST, DIR_SOUTH, DIR_SOUTH, DIR_NORTH, DIR_SOUTH, DIR_WEST, DIR_EAST, DIR_SOUTH, DIR_SOUTH, DIR_NORTH, DIR_WEST, DIR_EAST, DIR_SOUTH, DIR_NORTH, DIR_WEST, DIR_EAST, DIR_SOUTH, DIR_NORTH, DIR_WEST, DIR_EAST, DIR_SOUTH}; -#include "data/field_map_obj/map_object_graphics_info_pointers.h" -#include "data/field_map_obj/field_effect_object_template_pointers.h" -#include "data/field_map_obj/map_object_pic_tables.h" -#include "data/field_map_obj/map_object_anims.h" -#include "data/field_map_obj/base_oam.h" -#include "data/field_map_obj/map_object_subsprites.h" -#include "data/field_map_obj/map_object_graphics_info.h" +#include "../data/field_map_obj/map_object_graphics_info_pointers.h" +#include "../data/field_map_obj/field_effect_object_template_pointers.h" +#include "../data/field_map_obj/map_object_pic_tables.h" +#include "../data/field_map_obj/map_object_anims.h" +#include "../data/field_map_obj/base_oam.h" +#include "../data/field_map_obj/map_object_subsprites.h" +#include "../data/field_map_obj/map_object_graphics_info.h" const struct SpritePalette gUnknown_0837377C[] = { {gMapObjectPalette0, 0x1103}, @@ -1790,14 +1790,14 @@ const u16 *const gUnknown_0837399C[] = { Unknown_8373988 }; -#include "data/field_map_obj/berry_tree_graphics_tables.h" -#include "data/field_map_obj/field_effect_objects.h" +#include "../data/field_map_obj/berry_tree_graphics_tables.h" +#include "../data/field_map_obj/field_effect_objects.h" const s16 gUnknown_0837520C[] = {0x20, 0x40, 0x60, 0x80}; const s16 gUnknown_08375204[] = {0x20, 0x40, 0x80, 0xc0}; const s16 gUnknown_0837521C[] = {0x20, 0x30, 0x40, 0x50}; -#include "data/field_map_obj/callback_subroutine_pointers.h" +#include "../data/field_map_obj/callback_subroutine_pointers.h" const u8 gUnknown_083755F4[] = {0x00, 0x00, 0x01, 0x02, 0x03, 0x00, 0x00, 0x01, 0x01}; const u8 gUnknown_083755FD[] = {0x04, 0x04, 0x05, 0x06, 0x07, 0x04, 0x04, 0x05, 0x05}; @@ -1886,7 +1886,7 @@ const u8 gUnknown_08375767[][4] = { {3, 4, 2, 1} }; -#include "data/field_map_obj/anim_func_ptrs.h" +#include "../data/field_map_obj/anim_func_ptrs.h" // text diff --git a/src/pokemon/pokemon_data.c b/src/pokemon/pokemon_data.c index b74f8045a..3d13a3390 100644 --- a/src/pokemon/pokemon_data.c +++ b/src/pokemon/pokemon_data.c @@ -9,18 +9,18 @@ #include "sprite.h" #include "data2.h" -#include "data/pokemon/dex_order.h" -#include "data/pokemon/spinda_spots.h" -#include "data/pokemon/item_effects.h" -#include "data/pokemon/nature_stats.h" -#include "data/pokemon/tmhm_learnsets.h" -#include "data/pokemon/trainer_class_lookups.h" -#include "data/pokemon/cry_ids.h" -#include "data/pokemon/experience_tables.h" -#include "data/pokemon/base_stats.h" -#include "data/pokemon/level_up_learnsets.h" -#include "data/pokemon/evolution.h" -#include "data/pokemon/level_up_learnset_pointers.h" +#include "../data/pokemon/dex_order.h" +#include "../data/pokemon/spinda_spots.h" +#include "../data/pokemon/item_effects.h" +#include "../data/pokemon/nature_stats.h" +#include "../data/pokemon/tmhm_learnsets.h" +#include "../data/pokemon/trainer_class_lookups.h" +#include "../data/pokemon/cry_ids.h" +#include "../data/pokemon/experience_tables.h" +#include "../data/pokemon/base_stats.h" +#include "../data/pokemon/level_up_learnsets.h" +#include "../data/pokemon/evolution.h" +#include "../data/pokemon/level_up_learnset_pointers.h" const u8 gUnknown_08208238[] = { // Masks for getting PP Up count, also PP Max values 0x03, 0x0c, 0x30, 0xc0 -- cgit v1.2.3 From e27be38588bc1d2d3e26e10c87d5de91a5cbab21 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Mon, 23 Oct 2017 19:32:10 -0700 Subject: More decomp of battle_tower --- src/battle_tower.c | 508 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 508 insertions(+) (limited to 'src') diff --git a/src/battle_tower.c b/src/battle_tower.c index 507d2be10..519a6f71e 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -1,15 +1,21 @@ #include "global.h" +#include "battle.h" +#include "battle_setup.h" #include "battle_tower.h" +#include "battle_transition.h" #include "data2.h" #include "easy_chat.h" #include "event_data.h" #include "items.h" +#include "main.h" #include "map_object_constants.h" #include "moves.h" +#include "overworld.h" #include "pokedex.h" #include "rng.h" #include "species.h" #include "string_util.h" +#include "task.h" #include "text.h" #include "trainer.h" #include "vars.h" @@ -232,6 +238,8 @@ const u16 gUnknown_08405EE6[] = { ITEM_CHOICE_BAND, }; +extern void sub_81360D0(void); +extern u16 gSpecialVar_0x8004; extern u8 gUnknown_08400E23[]; extern u8 gUnknown_08400E29[]; extern u8 gUnknown_08400E2E[]; @@ -239,10 +247,17 @@ extern u8 gUnknown_08400E30[]; extern u8 gTrainerClassToPicIndex[]; extern u8 gTrainerClassToNameIndex[]; +extern u16 gTrainerBattleOpponent; +extern u16 gBattleTypeFlags; +extern u8 gSelectedOrderFromParty[]; extern void sub_8135C44(void); extern void sub_813601C(void); extern void sub_81349FC(u8); +extern void sub_81360AC(struct BattleTowerEReaderTrainer *); +extern void sub_8135A3C(void); + +#define ewram160FB (ewram[0x160FB]) void sub_8134548(void) @@ -1787,3 +1802,496 @@ u8 AppendBattleTowerBannedSpeciesName(u16 species, u8 curIndexToAppend, s32 numT return curIndexToAppend; } + +__attribute__((naked)) +void CheckMonBattleTowerBanlist() +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + ldr r2, [sp, 0x20]\n\ + ldr r4, [sp, 0x24]\n\ + mov r9, r4\n\ + ldr r4, [sp, 0x28]\n\ + mov r10, r4\n\ + ldr r7, [sp, 0x2C]\n\ + lsls r0, 16\n\ + lsrs r4, r0, 16\n\ + lsls r1, 16\n\ + lsrs r6, r1, 16\n\ + lsls r3, 24\n\ + lsrs r3, 24\n\ + mov r12, r3\n\ + lsls r2, 24\n\ + lsrs r2, 24\n\ + mov r8, r2\n\ + movs r2, 0\n\ + movs r0, 0xCE\n\ + lsls r0, 1\n\ + cmp r4, r0\n\ + beq _081352CE\n\ + cmp r4, 0\n\ + beq _081352CE\n\ + ldr r0, _081352DC @ =gBattleTowerBanlist\n\ + ldrh r1, [r0]\n\ + ldr r5, _081352E0 @ =0x0000ffff\n\ + adds r3, r0, 0\n\ + cmp r1, r5\n\ + beq _08135264\n\ + cmp r1, r4\n\ + beq _08135258\n\ + adds r1, r3, 0\n\ +_0813524A:\n\ + adds r1, 0x2\n\ + adds r2, 0x1\n\ + ldrh r0, [r1]\n\ + cmp r0, r5\n\ + beq _08135264\n\ + cmp r0, r4\n\ + bne _0813524A\n\ +_08135258:\n\ + lsls r0, r2, 1\n\ + adds r0, r3\n\ + ldrh r1, [r0]\n\ + ldr r0, _081352E0 @ =0x0000ffff\n\ + cmp r1, r0\n\ + bne _081352CE\n\ +_08135264:\n\ + mov r0, r12\n\ + cmp r0, 0\n\ + bne _08135270\n\ + mov r1, r8\n\ + cmp r1, 0x32\n\ + bhi _081352CE\n\ +_08135270:\n\ + movs r2, 0\n\ + ldrb r3, [r7]\n\ + cmp r2, r3\n\ + bge _08135290\n\ + mov r1, r9\n\ + ldrh r0, [r1]\n\ + cmp r0, r4\n\ + beq _08135290\n\ + adds r5, r3, 0\n\ +_08135282:\n\ + adds r1, 0x2\n\ + adds r2, 0x1\n\ + cmp r2, r5\n\ + bge _08135290\n\ + ldrh r0, [r1]\n\ + cmp r0, r4\n\ + bne _08135282\n\ +_08135290:\n\ + cmp r2, r3\n\ + bne _081352CE\n\ + cmp r6, 0\n\ + beq _081352BA\n\ + movs r2, 0\n\ + cmp r2, r3\n\ + bge _081352B6\n\ + mov r1, r10\n\ + ldrh r0, [r1]\n\ + cmp r0, r6\n\ + beq _081352B6\n\ + adds r5, r3, 0\n\ +_081352A8:\n\ + adds r1, 0x2\n\ + adds r2, 0x1\n\ + cmp r2, r5\n\ + bge _081352B6\n\ + ldrh r0, [r1]\n\ + cmp r0, r6\n\ + bne _081352A8\n\ +_081352B6:\n\ + cmp r2, r3\n\ + bne _081352CE\n\ +_081352BA:\n\ + lsls r0, r3, 1\n\ + add r0, r9\n\ + strh r4, [r0]\n\ + ldrb r0, [r7]\n\ + lsls r0, 1\n\ + add r0, r10\n\ + strh r6, [r0]\n\ + ldrb r0, [r7]\n\ + adds r0, 0x1\n\ + strb r0, [r7]\n\ +_081352CE:\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_081352DC: .4byte gBattleTowerBanlist\n\ +_081352E0: .4byte 0x0000ffff\n\ +.syntax divided\n"); +} + +__attribute__((naked)) +void CheckPartyBattleTowerBanlist() +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, 0x2C\n\ + add r1, sp, 0x28\n\ + movs r0, 0\n\ + strb r0, [r1]\n\ + movs r7, 0\n\ + mov r9, r1\n\ + add r0, sp, 0x1C\n\ + mov r10, r0\n\ +_081352FE:\n\ + movs r0, 0x64\n\ + adds r5, r7, 0\n\ + muls r5, r0\n\ + ldr r0, _081353C4 @ =gPlayerParty\n\ + adds r5, r0\n\ + adds r0, r5, 0\n\ + movs r1, 0x41\n\ + bl GetMonData\n\ + mov r8, r0\n\ + mov r1, r8\n\ + lsls r1, 16\n\ + lsrs r1, 16\n\ + mov r8, r1\n\ + adds r0, r5, 0\n\ + movs r1, 0xC\n\ + bl GetMonData\n\ + adds r6, r0, 0\n\ + lsls r6, 16\n\ + lsrs r6, 16\n\ + adds r0, r5, 0\n\ + movs r1, 0x38\n\ + bl GetMonData\n\ + adds r4, r0, 0\n\ + lsls r4, 24\n\ + lsrs r4, 24\n\ + adds r0, r5, 0\n\ + movs r1, 0x39\n\ + bl GetMonData\n\ + adds r2, r0, 0\n\ + lsls r2, 16\n\ + lsrs r2, 16\n\ + ldr r5, _081353C8 @ =gScriptResult\n\ + ldrb r3, [r5]\n\ + str r4, [sp]\n\ + add r0, sp, 0x10\n\ + str r0, [sp, 0x4]\n\ + mov r1, r10\n\ + str r1, [sp, 0x8]\n\ + mov r0, r9\n\ + str r0, [sp, 0xC]\n\ + mov r0, r8\n\ + adds r1, r6, 0\n\ + bl CheckMonBattleTowerBanlist\n\ + adds r7, 0x1\n\ + cmp r7, 0x5\n\ + ble _081352FE\n\ + mov r1, r9\n\ + ldrb r0, [r1]\n\ + cmp r0, 0x2\n\ + bhi _08135420\n\ + ldr r1, _081353CC @ =gStringVar1\n\ + movs r0, 0xFF\n\ + strb r0, [r1]\n\ + ldr r1, _081353D0 @ =gSpecialVar_0x8004\n\ + movs r0, 0x1\n\ + strh r0, [r1]\n\ + movs r0, 0\n\ + mov r1, r9\n\ + strb r0, [r1]\n\ + bl CountBattleTowerBanlistCaught\n\ + adds r6, r0, 0\n\ + ldr r2, _081353D4 @ =gBattleTowerBanlist\n\ + ldrh r0, [r2]\n\ + ldr r1, _081353D8 @ =0x0000ffff\n\ + cmp r0, r1\n\ + beq _081353A8\n\ + mov r5, r9\n\ + adds r7, r1, 0\n\ + adds r4, r2, 0\n\ +_08135394:\n\ + ldrh r0, [r4]\n\ + ldrb r1, [r5]\n\ + adds r2, r6, 0\n\ + bl AppendBattleTowerBannedSpeciesName\n\ + strb r0, [r5]\n\ + adds r4, 0x2\n\ + ldrh r0, [r4]\n\ + cmp r0, r7\n\ + bne _08135394\n\ +_081353A8:\n\ + mov r0, r9\n\ + ldrb r1, [r0]\n\ + cmp r1, 0\n\ + bne _081353E4\n\ + ldr r4, _081353CC @ =gStringVar1\n\ + ldr r1, _081353DC @ =gUnknown_08400E2C\n\ + adds r0, r4, 0\n\ + bl StringAppend\n\ + ldr r1, _081353E0 @ =gUnknown_08400E32\n\ + adds r0, r4, 0\n\ + bl StringAppend\n\ + b _0813543E\n\ + .align 2, 0\n\ +_081353C4: .4byte gPlayerParty\n\ +_081353C8: .4byte gScriptResult\n\ +_081353CC: .4byte gStringVar1\n\ +_081353D0: .4byte gSpecialVar_0x8004\n\ +_081353D4: .4byte gBattleTowerBanlist\n\ +_081353D8: .4byte 0x0000ffff\n\ +_081353DC: .4byte gUnknown_08400E2C\n\ +_081353E0: .4byte gUnknown_08400E32\n\ +_081353E4:\n\ + movs r0, 0x1\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _08135400\n\ + ldr r0, _081353F8 @ =gStringVar1\n\ + ldr r1, _081353FC @ =gUnknown_08400E2E\n\ + bl StringAppend\n\ + b _08135408\n\ + .align 2, 0\n\ +_081353F8: .4byte gStringVar1\n\ +_081353FC: .4byte gUnknown_08400E2E\n\ +_08135400:\n\ + ldr r0, _08135414 @ =gStringVar1\n\ + ldr r1, _08135418 @ =gUnknown_08400E2C\n\ + bl StringAppend\n\ +_08135408:\n\ + ldr r0, _08135414 @ =gStringVar1\n\ + ldr r1, _0813541C @ =gUnknown_08400E36\n\ + bl StringAppend\n\ + b _0813543E\n\ + .align 2, 0\n\ +_08135414: .4byte gStringVar1\n\ +_08135418: .4byte gUnknown_08400E2C\n\ +_0813541C: .4byte gUnknown_08400E36\n\ +_08135420:\n\ + ldr r1, _08135450 @ =gSpecialVar_0x8004\n\ + movs r0, 0\n\ + strh r0, [r1]\n\ + ldr r2, _08135454 @ =gSaveBlock2\n\ + ldrb r0, [r5]\n\ + ldr r1, _08135458 @ =0x00000554\n\ + adds r2, r1\n\ + movs r1, 0x1\n\ + ands r1, r0\n\ + ldrb r3, [r2]\n\ + movs r0, 0x2\n\ + negs r0, r0\n\ + ands r0, r3\n\ + orrs r0, r1\n\ + strb r0, [r2]\n\ +_0813543E:\n\ + add sp, 0x2C\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_08135450: .4byte gSpecialVar_0x8004\n\ +_08135454: .4byte gSaveBlock2\n\ +_08135458: .4byte 0x00000554\n\ +.syntax divided\n"); +} + +void sub_813545C(u16 *easyChat) +{ + sub_80EB544(gStringVar4, easyChat, 2, 3); +} + +void sub_8135474(void) +{ + if (gSaveBlock2.filler_A8.battleTowerTrainerId == 200) + { + sub_813545C(gSaveBlock2.filler_A8.ereaderTrainer.greeting.easyChat); + } + else if (gSaveBlock2.filler_A8.battleTowerTrainerId < 100) + { + sub_813545C((u16 *)gBattleTowerTrainers[gSaveBlock2.filler_A8.battleTowerTrainerId].greeting.easyChat); + } + else + { + sub_813545C(gSaveBlock2.filler_A8.var_14C[gSaveBlock2.filler_A8.battleTowerTrainerId - 100].greeting.easyChat); + } +} + +void sub_81354CC(void) +{ + s32 i; + u16 heldItem; + + switch (gSpecialVar_0x8004) + { + case 0: + break; + case 1: + for (i = 0; i < PARTY_SIZE; i++) + { + heldItem = GetMonData(&gSaveBlock1.playerParty[i], MON_DATA_HELD_ITEM); + SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, (u8 *)&heldItem); + } + break; + case 2: + sub_81360D0(); + break; + } + + SetMainCallback2(c2_exit_to_overworld_1_continue_scripts_restart_music); +} + +void sub_8135534(u8 taskId) +{ + if (IsBattleTransitionDone() == TRUE) + { + gMain.savedCallback = sub_81354CC; + SetMainCallback2(sub_800E7C4); + DestroyTask(taskId); + } +} + +void sub_813556C(void) +{ + s32 i; + u16 heldItem; + u8 transition; + + switch (gSpecialVar_0x8004) + { + case 0: + gBattleTypeFlags = (BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_TRAINER); + gTrainerBattleOpponent = 0; + + sub_8134DD4(); + + CreateTask(sub_8135534, 1); + current_map_music_set__default_for_battle(0); + transition = BattleSetup_GetBattleTowerBattleTransition(); + BattleTransition_StartOnField(transition); + break; + case 1: + for (i = 0; i < PARTY_SIZE; i++) + { + heldItem = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM); + SetMonData(&gSaveBlock1.playerParty[i], MON_DATA_HELD_ITEM, (u8 *)&heldItem); + } + + CreateTask(sub_8135534, 1); + current_map_music_set__default_for_battle(0); + transition = BattleSetup_GetBattleTowerBattleTransition(); + BattleTransition_StartOnField(transition); + break; + case 2: + ZeroEnemyPartyMons(); + + for (i = 0; i < 3; i++) + { + sub_803ADE8(&gEnemyParty[i], &gSaveBlock2.filler_A8.ereaderTrainer.party[i]); + } + + gBattleTypeFlags = (BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_TRAINER); + gTrainerBattleOpponent = 0; + + CreateTask(sub_8135534, 1); + current_map_music_set__default_for_battle(0); + transition = BattleSetup_GetBattleTowerBattleTransition(); + BattleTransition_StartOnField(transition); + break; + } +} + +void sub_8135668(void) +{ + s32 i; + u8 battleTowerLevelType = gSaveBlock2.filler_A8.battleTowerLevelType; + + switch (gSpecialVar_0x8004) + { + case 0: + ewram160FB = gSaveBlock2.filler_A8.var_4AE[battleTowerLevelType]; + gSaveBlock2.filler_A8.var_4AE[battleTowerLevelType] = gSpecialVar_0x8005; + break; + case 1: + gSaveBlock2.filler_A8.battleTowerLevelType = gSpecialVar_0x8005; + break; + case 2: + gSaveBlock2.filler_A8.var_4B0[battleTowerLevelType] = gSpecialVar_0x8005; + break; + case 3: + gSaveBlock2.filler_A8.var_4B4[battleTowerLevelType] = gSpecialVar_0x8005; + break; + case 4: + gSaveBlock2.filler_A8.battleTowerTrainerId = gSpecialVar_0x8005; + break; + case 5: + for (i = 0; i < 3; i++) + { + gSaveBlock2.filler_A8.var_4BD[i] = gSelectedOrderFromParty[i]; + } + break; + case 6: + if (gSaveBlock2.filler_A8.battleTowerTrainerId == 200) + { + sub_81360AC(&gSaveBlock2.filler_A8.ereaderTrainer); + } + + if (gSaveBlock2.filler_A8.totalBattleTowerWins < 9999) + { + gSaveBlock2.filler_A8.totalBattleTowerWins++; + } + + gSaveBlock2.filler_A8.var_4B0[battleTowerLevelType]++; + sub_8135A3C(); + gScriptResult = gSaveBlock2.filler_A8.var_4B0[battleTowerLevelType]; + + gStringVar1[0] = gSaveBlock2.filler_A8.var_4B0[battleTowerLevelType] + 0xA1; + gStringVar1[1] = 0xFF; + break; + case 7: + if (gSaveBlock2.filler_A8.var_4B4[battleTowerLevelType] < 1430) + { + gSaveBlock2.filler_A8.var_4B4[battleTowerLevelType]++; + } + + sub_8135A3C(); + gScriptResult = gSaveBlock2.filler_A8.var_4B4[battleTowerLevelType]; + break; + case 8: + gSaveBlock2.filler_A8.unk_554 = gSpecialVar_0x8005; + break; + case 9: + break; + case 10: + SetGameStat(GAME_STAT_BATTLE_TOWER_BEST_STREAK, gSaveBlock2.filler_A8.bestBattleTowerWinStreak); + break; + case 11: + if (gSaveBlock2.filler_A8.var_4AE[battleTowerLevelType] != 3) + { + sub_813461C(battleTowerLevelType); + } + break; + case 12: + gSaveBlock2.filler_A8.var_4AE[battleTowerLevelType] = ewram160FB; + break; + case 13: + gSaveBlock2.filler_A8.currentWinStreaks[battleTowerLevelType] = sub_8135D3C(battleTowerLevelType); + break; + case 14: + gSaveBlock2.filler_A8.lastStreakLevelType = gSaveBlock2.filler_A8.battleTowerLevelType; + break; + } +} -- cgit v1.2.3 From 1c2a815d7b31bc9f43c26e4ea0bf346487b958ac Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 27 Oct 2017 20:36:43 -0400 Subject: Match sub_80BD1FC --- src/field/secret_base.c | 105 +++++++----------------------------------------- 1 file changed, 14 insertions(+), 91 deletions(-) (limited to 'src') diff --git a/src/field/secret_base.c b/src/field/secret_base.c index 4c749c4c7..708bd7fe1 100644 --- a/src/field/secret_base.c +++ b/src/field/secret_base.c @@ -1402,44 +1402,41 @@ u8 sub_80BD1B0(void) return 0; } -#ifdef NONMATCHING u8 sub_80BD1FC(struct SecretBaseRecord *secretBase) { s16 secretBaseIndex; - if (!secretBase->secretBaseId) + if (secretBase->secretBaseId == 0) { return 0; } secretBaseIndex = sub_80BD12C(secretBase->secretBaseId); - if (secretBaseIndex) + if (secretBaseIndex != 0) { if (secretBaseIndex != -1) { - if (gSaveBlock1.secretBases[secretBaseIndex].sbr_field_1_0 != 1) + if (gSaveBlock1.secretBases[secretBaseIndex].sbr_field_1_0 == 1) { - if (gSaveBlock1.secretBases[secretBaseIndex].sbr_field_1_6 != 2 + return 0; + } + if (gSaveBlock1.secretBases[secretBaseIndex].sbr_field_1_6 != 2 || secretBase->sbr_field_1_0 == 1) - { - sub_80BD034(secretBaseIndex, secretBase); - return secretBaseIndex; - } + { + sub_80BD034(secretBaseIndex, secretBase); + return secretBaseIndex; } } else { secretBaseIndex = sub_80BD170(); - if (secretBaseIndex == 0) + if (secretBaseIndex != 0) { - secretBaseIndex = sub_80BD1B0(); - if (secretBaseIndex) - { - sub_80BD034(secretBaseIndex, secretBase); - return secretBaseIndex; - } + sub_80BD034(secretBaseIndex, secretBase); + return secretBaseIndex; } - else + secretBaseIndex = sub_80BD1B0(); + if (secretBaseIndex) { sub_80BD034(secretBaseIndex, secretBase); return secretBaseIndex; @@ -1449,80 +1446,6 @@ u8 sub_80BD1FC(struct SecretBaseRecord *secretBase) return 0; } -#else -__attribute__((naked)) -u8 sub_80BD1FC(struct SecretBaseRecord *secretBase) -{ - asm(".syntax unified\n\ - push {r4,r5,lr}\n\ - adds r5, r0, 0\n\ - ldrb r0, [r5]\n\ - cmp r0, 0\n\ - beq _080BD278\n\ - ldrb r0, [r5]\n\ - bl sub_80BD12C\n\ - lsls r0, 16\n\ - lsrs r4, r0, 16\n\ - asrs r2, r0, 16\n\ - cmp r2, 0\n\ - beq _080BD278\n\ - movs r0, 0x1\n\ - negs r0, r0\n\ - cmp r2, r0\n\ - beq _080BD254\n\ - ldr r0, _080BD24C @ =gSaveBlock1\n\ - lsls r1, r2, 2\n\ - adds r1, r2\n\ - lsls r1, 5\n\ - adds r1, r0\n\ - ldr r0, _080BD250 @ =0x00001a09\n\ - adds r1, r0\n\ - ldrb r1, [r1]\n\ - lsls r0, r1, 28\n\ - lsrs r0, 28\n\ - cmp r0, 0x1\n\ - beq _080BD278\n\ - lsrs r0, r1, 6\n\ - cmp r0, 0x2\n\ - bne _080BD246\n\ - ldrb r1, [r5, 0x1]\n\ - movs r0, 0xF\n\ - ands r0, r1\n\ - cmp r0, 0x1\n\ - bne _080BD278\n\ -_080BD246:\n\ - lsls r4, 24\n\ - lsrs r4, 24\n\ - b _080BD26C\n\ - .align 2, 0\n\ -_080BD24C: .4byte gSaveBlock1\n\ -_080BD250: .4byte 0x00001a09\n\ -_080BD254:\n\ - bl sub_80BD170\n\ - lsls r0, 24\n\ - lsrs r4, r0, 24\n\ - cmp r4, 0\n\ - bne _080BD26C\n\ - bl sub_80BD1B0\n\ - lsls r0, 24\n\ - lsrs r4, r0, 24\n\ - cmp r4, 0\n\ - beq _080BD278\n\ -_080BD26C:\n\ - adds r0, r4, 0\n\ - adds r1, r5, 0\n\ - bl sub_80BD034\n\ - adds r0, r4, 0\n\ - b _080BD27A\n\ -_080BD278:\n\ - movs r0, 0\n\ -_080BD27A:\n\ - pop {r4,r5}\n\ - pop {r1}\n\ - bx r1\n\ -.syntax divided\n"); -} -#endif void sub_80BD280(void) { -- cgit v1.2.3 From 978ca50dad8de72a3940b5423fd5c3b87c13eb46 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Sat, 28 Oct 2017 17:35:37 -0700 Subject: Even more battle tower decompilation --- src/battle_tower.c | 470 +++++++++++++++++++++++++++++++++++++++++++++- src/engine/trainer_card.c | 2 +- src/field/easy_chat.c | 10 +- src/field/tv.c | 2 +- 4 files changed, 473 insertions(+), 11 deletions(-) (limited to 'src') diff --git a/src/battle_tower.c b/src/battle_tower.c index 519a6f71e..2513322cc 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -6,13 +6,17 @@ #include "data2.h" #include "easy_chat.h" #include "event_data.h" +#include "item.h" #include "items.h" #include "main.h" #include "map_object_constants.h" #include "moves.h" +#include "new_game.h" #include "overworld.h" #include "pokedex.h" #include "rng.h" +#include "save.h" +#include "script_pokemon_80C4.h" #include "species.h" #include "string_util.h" #include "task.h" @@ -217,7 +221,8 @@ const u16 gBattleTowerBanlist[] = { 0xFFFF, }; -const u16 gUnknown_08405EDA[] = { +// Item prizes for battle tower streaks of 5 or fewer sets. +const u16 ShortStreakPrizes[] = { ITEM_HP_UP, ITEM_PROTEIN, ITEM_IRON, @@ -226,7 +231,8 @@ const u16 gUnknown_08405EDA[] = { ITEM_ZINC, }; -const u16 gUnknown_08405EE6[] = { +// Item prizes for battle tower streaks of greater than 5 sets. +const u16 LongStreakPrizes[] = { ITEM_BRIGHT_POWDER, ITEM_WHITE_HERB, ITEM_QUICK_CLAW, @@ -250,12 +256,18 @@ extern u8 gTrainerClassToNameIndex[]; extern u16 gTrainerBattleOpponent; extern u16 gBattleTypeFlags; extern u8 gSelectedOrderFromParty[]; +extern struct Pokemon gUnknown_030042FC[]; +extern u8 gBattleOutcome; +extern struct BattlePokemon gBattleMons[]; -extern void sub_8135C44(void); +extern void ValidateBattleTowerRecordChecksums(void); extern void sub_813601C(void); extern void sub_81349FC(u8); extern void sub_81360AC(struct BattleTowerEReaderTrainer *); extern void sub_8135A3C(void); +extern void sub_8135CFC(void); +static void SetBattleTowerRecordChecksum(struct BattleTowerRecord *); +static void ClearBattleTowerRecord(struct BattleTowerRecord *); #define ewram160FB (ewram[0x160FB]) @@ -306,7 +318,7 @@ void sub_8134548(void) VarSet(VAR_0x4000, 5); } - sub_8135C44(); + ValidateBattleTowerRecordChecksums(); } void sub_813461C(u8 levelType) @@ -2295,3 +2307,453 @@ void sub_8135668(void) break; } } + +void sub_81358A4(void) +{ + u8 battleTowerLevelType = gSaveBlock2.filler_A8.battleTowerLevelType; + + switch (gSpecialVar_0x8004) + { + case 0: + gScriptResult = gSaveBlock2.filler_A8.var_4AE[battleTowerLevelType]; + break; + case 1: + gScriptResult = gSaveBlock2.filler_A8.battleTowerLevelType; + break; + case 2: + gScriptResult = gSaveBlock2.filler_A8.var_4B0[battleTowerLevelType]; + break; + case 3: + gScriptResult = gSaveBlock2.filler_A8.var_4B4[battleTowerLevelType]; + break; + case 4: + gScriptResult = gSaveBlock2.filler_A8.battleTowerTrainerId; + break; + case 5: + case 6: + case 7: + break; + case 8: + gScriptResult = gSaveBlock2.filler_A8.unk_554; + break; + case 9: + gScriptResult = sub_8135D3C(battleTowerLevelType); + break; + case 10: + SetGameStat(GAME_STAT_BATTLE_TOWER_BEST_STREAK, gSaveBlock2.filler_A8.bestBattleTowerWinStreak); + break; + case 11: + sub_813461C(battleTowerLevelType); + break; + case 12: + gSaveBlock2.filler_A8.var_4AE[battleTowerLevelType] = ewram160FB; + break; + case 13: + gSaveBlock2.filler_A8.currentWinStreaks[battleTowerLevelType] = sub_8135D3C(battleTowerLevelType); + break; + case 14: + gSaveBlock2.filler_A8.lastStreakLevelType = gSaveBlock2.filler_A8.battleTowerLevelType; + break; + } +} + +void sub_8135A14(void) +{ + s32 i; + + for (i = 0; i < 3; i++) + { + gSelectedOrderFromParty[i] = gSaveBlock2.filler_A8.var_4BD[i]; + } + + ReducePlayerPartyToThree(); +} + +#ifdef NONMATCHING +void sub_8135A3C(void) +{ + u8 battleTowerLevelType = gSaveBlock2.filler_A8.battleTowerLevelType; + u16 winStreak = sub_8135D3C(battleTowerLevelType); + if (gSaveBlock2.filler_A8.recordWinStreaks[battleTowerLevelType] < winStreak) + { + gSaveBlock2.filler_A8.recordWinStreaks[battleTowerLevelType] = winStreak; + } + + if (gSaveBlock2.filler_A8.recordWinStreaks[0] > gSaveBlock2.filler_A8.recordWinStreaks[1]) + { + SetGameStat(GAME_STAT_BATTLE_TOWER_BEST_STREAK, gSaveBlock2.filler_A8.recordWinStreaks[0]); + if (gSaveBlock2.filler_A8.recordWinStreaks[0] > 9999) + { + gSaveBlock2.filler_A8.bestBattleTowerWinStreak = 9999; + } + else + { + gSaveBlock2.filler_A8.bestBattleTowerWinStreak = gSaveBlock2.filler_A8.recordWinStreaks[0]; + } + } + else + { + SetGameStat(GAME_STAT_BATTLE_TOWER_BEST_STREAK, gSaveBlock2.filler_A8.recordWinStreaks[1]); + if (gSaveBlock2.filler_A8.recordWinStreaks[1] > 9999) + { + gSaveBlock2.filler_A8.bestBattleTowerWinStreak = 9999; + } + else + { + gSaveBlock2.filler_A8.bestBattleTowerWinStreak = gSaveBlock2.filler_A8.recordWinStreaks[1]; + } + } +} +#else +__attribute__((naked)) +void sub_8135A3C(void) +{ + asm(".syntax unified\n\ + push {r4-r6,lr}\n\ + ldr r6, _08135A84 @ =gSaveBlock2\n\ + ldr r1, _08135A88 @ =0x00000554\n\ + adds r0, r6, r1\n\ + ldrb r4, [r0]\n\ + lsls r4, 31\n\ + lsrs r4, 31\n\ + adds r0, r4, 0\n\ + bl sub_8135D3C\n\ + lsls r0, 16\n\ + lsrs r5, r0, 16\n\ + lsls r4, 1\n\ + movs r3, 0xAC\n\ + lsls r3, 3\n\ + adds r2, r6, r3\n\ + adds r4, r2\n\ + ldrh r0, [r4]\n\ + cmp r0, r5\n\ + bcs _08135A66\n\ + strh r5, [r4]\n\ +_08135A66:\n\ + ldr r0, _08135A8C @ =0x00000562\n\ + adds r1, r6, r0\n\ + ldrh r0, [r2]\n\ + ldrh r3, [r1]\n\ + cmp r0, r3\n\ + bls _08135A94\n\ + adds r5, r0, 0\n\ + movs r0, 0x20\n\ + adds r1, r5, 0\n\ + bl SetGameStat\n\ + ldr r1, _08135A90 @ =0x0000270f\n\ + cmp r5, r1\n\ + bhi _08135AA4\n\ + b _08135AB4\n\ + .align 2, 0\n\ +_08135A84: .4byte gSaveBlock2\n\ +_08135A88: .4byte 0x00000554\n\ +_08135A8C: .4byte 0x00000562\n\ +_08135A90: .4byte 0x0000270f\n\ +_08135A94:\n\ + ldrh r5, [r1]\n\ + movs r0, 0x20\n\ + adds r1, r5, 0\n\ + bl SetGameStat\n\ + ldr r1, _08135AAC @ =0x0000270f\n\ + cmp r5, r1\n\ + bls _08135AB4\n\ +_08135AA4:\n\ + ldr r2, _08135AB0 @ =0x00000572\n\ + adds r0, r6, r2\n\ + strh r1, [r0]\n\ + b _08135ABA\n\ + .align 2, 0\n\ +_08135AAC: .4byte 0x0000270f\n\ +_08135AB0: .4byte 0x00000572\n\ +_08135AB4:\n\ + ldr r3, _08135AC0 @ =0x00000572\n\ + adds r0, r6, r3\n\ + strh r5, [r0]\n\ +_08135ABA:\n\ + pop {r4-r6}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_08135AC0: .4byte 0x00000572\n\ + .syntax divided\n"); +} +#endif // NONMATCHING + +void sub_8135AC4(void) +{ + s32 i; + u8 trainerClass; + struct BattleTowerRecord *playerRecord = &gSaveBlock2.filler_A8.var_A8; + u8 battleTowerLevelType = gSaveBlock2.filler_A8.battleTowerLevelType; + + if (gSaveBlock2.playerGender != 0) + { + trainerClass = gUnknown_08405E7E[(gSaveBlock2.playerTrainerId[0] + gSaveBlock2.playerTrainerId[1] + + gSaveBlock2.playerTrainerId[2] + gSaveBlock2.playerTrainerId[3]) % 20u]; + } + else + { + trainerClass = gUnknown_08405E60[(gSaveBlock2.playerTrainerId[0] + gSaveBlock2.playerTrainerId[1] + + gSaveBlock2.playerTrainerId[2] + gSaveBlock2.playerTrainerId[3]) % 30u]; + } + + playerRecord->var_0 = battleTowerLevelType; + playerRecord->trainerClass = trainerClass; + + copy_word_to_mem(playerRecord->trainerId, gSaveBlock2.playerTrainerId); + StringCopy8(playerRecord->name, gSaveBlock2.playerName); + + playerRecord->var_2 = sub_8135D3C(battleTowerLevelType); + + for (i = 0; i < 6; i++) + { + playerRecord->greeting.easyChat[i] = gSaveBlock1.easyChats.unk2B28[i]; + } + + for (i = 0; i < 3; i++) + { + sub_803AF78(&gUnknown_030042FC[gSaveBlock2.filler_A8.var_4BD[i]], &playerRecord->party[i]); + } + + SetBattleTowerRecordChecksum(&gSaveBlock2.filler_A8.var_A8); + sub_8135A3C(); +} + +void sub_8135BA0(void) +{ + u8 battleTowerLevelType = gSaveBlock2.filler_A8.battleTowerLevelType; + + if (gSpecialVar_0x8004 == 3 || gSpecialVar_0x8004 == 0) + { + if (gSaveBlock2.filler_A8.var_4B4[battleTowerLevelType] > 1 + || gSaveBlock2.filler_A8.var_4B0[battleTowerLevelType] > 1) + { + sub_8135AC4(); + } + } + + sub_8135CFC(); + + gSaveBlock2.filler_A8.var_4AD = gBattleOutcome; + + if (gSpecialVar_0x8004 != 3) + { + gSaveBlock2.filler_A8.var_4AE[battleTowerLevelType] = gSpecialVar_0x8004; + } + + VarSet(VAR_0x4000, 0); + gSaveBlock2.filler_A8.unk_554 = 1; + TrySavingData(EREADER_SAVE); +} + +void sub_8135C38(void) +{ + DoSoftReset(); +} + +void ValidateBattleTowerRecordChecksums(void) +{ + u32 i; + s32 recordIndex; + struct BattleTowerRecord *record; + u32 checksum; + + checksum = 0; + for (i = 0; i < (sizeof(struct BattleTowerRecord) / sizeof(u32)) - 1; i++) + { + checksum += ((u32 *)&gSaveBlock2.filler_A8.var_A8)[i]; + } + + if (gSaveBlock2.filler_A8.var_A8.checksum != checksum) + { + ClearBattleTowerRecord(&gSaveBlock2.filler_A8.var_A8); + } + + for (recordIndex = 0; recordIndex < 5; recordIndex++) + { + record = &gSaveBlock2.filler_A8.var_14C[recordIndex]; + checksum = 0; + for (i = 0; i < (sizeof(struct BattleTowerRecord) / sizeof(u32)) - 1; i++) + { + checksum += ((u32 *)record)[i]; + } + + if (gSaveBlock2.filler_A8.var_14C[recordIndex].checksum != checksum) + { + ClearBattleTowerRecord(&gSaveBlock2.filler_A8.var_14C[recordIndex]); + } + } +} + +void SetBattleTowerRecordChecksum(struct BattleTowerRecord *record) +{ + u32 i; + + record->checksum = 0; + for (i = 0; i < (sizeof(struct BattleTowerRecord) / sizeof(u32)) - 1; i++) + { + record->checksum += ((u32 *)record)[i]; + } +} + +void ClearBattleTowerRecord(struct BattleTowerRecord *record) +{ + u32 i; + + for (i = 0; i < sizeof(struct BattleTowerRecord) / sizeof(u32); i++) + { + ((u32 *)record)[i] = 0; + } +} + +void sub_8135CFC(void) +{ + s32 i; + + get_trainer_name(gSaveBlock2.filler_A8.defeatedByTrainerName); + gSaveBlock2.filler_A8.defeatedBySpecies = gBattleMons[1].species; + gSaveBlock2.filler_A8.firstMonSpecies = gBattleMons[0].species; + + for (i = 0; i < POKEMON_NAME_LENGTH; i++) + { + gSaveBlock2.filler_A8.firstMonNickname[i] = gBattleMons[0].nickname[i]; + } +} + +u16 sub_8135D3C(u8 battleTowerLevelType) +{ + u16 var2 = ((gSaveBlock2.filler_A8.var_4B4[battleTowerLevelType] - 1) * 7 - 1) + gSaveBlock2.filler_A8.var_4B0[battleTowerLevelType]; + + if (var2 > 9999) + { + return 9999; + } + + return var2; +} + +#ifdef NONMATCHING +void sub_8135D84(void) +{ + u16 prizeItem; + struct SaveBlock2 *saveBlock = &gSaveBlock2; + u8 battleTowerLevelType = saveBlock->filler_A8.battleTowerLevelType; + + if (saveBlock->filler_A8.var_4B4[battleTowerLevelType] - 1 > 5) + { + prizeItem = LongStreakPrizes[Random() % 9]; + } + else + { + prizeItem = ShortStreakPrizes[Random() % 6]; + } + + saveBlock->filler_A8.prizeItem = prizeItem; +} +#else +__attribute__((naked)) +void sub_8135D84(void) +{ + asm(".syntax unified\n\ + push {r4,r5,lr}\n\ + ldr r5, _08135DB0 @ =gSaveBlock2\n\ + ldr r1, _08135DB4 @ =0x00000554\n\ + adds r0, r5, r1\n\ + ldrb r0, [r0]\n\ + lsls r0, 31\n\ + lsrs r0, 31\n\ + lsls r0, 1\n\ + ldr r2, _08135DB8 @ =0x0000055c\n\ + adds r1, r5, r2\n\ + adds r0, r1\n\ + ldrh r0, [r0]\n\ + subs r0, 0x1\n\ + cmp r0, 0x5\n\ + ble _08135DC0\n\ + bl Random\n\ + ldr r4, _08135DBC @ =LongStreakPrizes\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + movs r1, 0x9\n\ + b _08135DCC\n\ + .align 2, 0\n\ +_08135DB0: .4byte gSaveBlock2\n\ +_08135DB4: .4byte 0x00000554\n\ +_08135DB8: .4byte 0x0000055c\n\ +_08135DBC: .4byte LongStreakPrizes\n\ +_08135DC0:\n\ + bl Random\n\ + ldr r4, _08135DE8 @ =ShortStreakPrizes\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + movs r1, 0x6\n\ +_08135DCC:\n\ + bl __umodsi3\n\ + lsls r0, 16\n\ + lsrs r0, 15\n\ + adds r0, r4\n\ + ldrh r1, [r0]\n\ + movs r2, 0xAD\n\ + lsls r2, 3\n\ + adds r0, r5, r2\n\ + strh r1, [r0]\n\ + pop {r4,r5}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_08135DE8: .4byte ShortStreakPrizes\n\ + .syntax divided\n"); +} +#endif // NONMATCHING + +void sub_8135DEC(void) +{ + u8 battleTowerLevelType = gSaveBlock2.filler_A8.battleTowerLevelType; + + if (AddBagItem(gSaveBlock2.filler_A8.prizeItem, 1) == TRUE) + { + CopyItemName(gSaveBlock2.filler_A8.prizeItem, gStringVar1); + gScriptResult = 1; + } + else + { + gScriptResult = 0; + gSaveBlock2.filler_A8.var_4AE[battleTowerLevelType] = 6; + } +} + +void sub_8135E50() +{ + s32 i; + u32 partyIndex; + struct Pokemon *pokemon; + u8 ribbonType; + u8 battleTowerLevelType = gSaveBlock2.filler_A8.battleTowerLevelType; + + ribbonType = MON_DATA_WINNING_RIBBON; + if (battleTowerLevelType != 0) + { + ribbonType = MON_DATA_VICTORY_RIBBON; + } + + gScriptResult = 0; + + if (sub_8135D3C(battleTowerLevelType) > 55) + { + for (i = 0; i < 3; i++) + { + partyIndex = gSaveBlock2.filler_A8.var_4BD[i] - 1; + pokemon = &gPlayerParty[partyIndex]; + if (!GetMonData(pokemon, ribbonType)) + { + gScriptResult = 1; + SetMonData(pokemon, ribbonType, (u8 *)&gScriptResult); + } + } + } + + if (gScriptResult != 0) + { + IncrementGameStat(GAME_STAT_RECEIVED_RIBBONS); + } +} diff --git a/src/engine/trainer_card.c b/src/engine/trainer_card.c index c8847b258..11baa65d5 100644 --- a/src/engine/trainer_card.c +++ b/src/engine/trainer_card.c @@ -374,7 +374,7 @@ void sub_8093390(struct TrainerCard *trainerCard) for (i = 0; i < 4; i++) { - trainerCard->var_28[i] = gSaveBlock1.unk2B1C[i]; + trainerCard->var_28[i] = gSaveBlock1.easyChats.unk2B1C[i]; } for (i = 0; i < 8; i++) diff --git a/src/field/easy_chat.c b/src/field/easy_chat.c index 6014b3d14..2668b57dd 100644 --- a/src/field/easy_chat.c +++ b/src/field/easy_chat.c @@ -278,13 +278,13 @@ void sub_80EB7C4(void) switch (gSpecialVar_0x8004) { case 0: - words = gSaveBlock1.unk2B1C; + words = gSaveBlock1.easyChats.unk2B1C; arg1 = 2; arg2 = 2; break; case 1: - words = gSaveBlock1.unk2B28; - if (sub_80EB680(gSaveBlock1.unk2B28, 3, 2, 20)) + words = gSaveBlock1.easyChats.unk2B28; + if (sub_80EB680(gSaveBlock1.easyChats.unk2B28, 3, 2, 20)) { arg1 = 2; arg2 = 3; @@ -296,12 +296,12 @@ void sub_80EB7C4(void) } break; case 2: - words = gSaveBlock1.unk2B34; + words = gSaveBlock1.easyChats.unk2B34; arg1 = 3; arg2 = 2; break; case 3: - words = gSaveBlock1.unk2B40; + words = gSaveBlock1.easyChats.unk2B40; arg1 = 3; arg2 = 2; break; diff --git a/src/field/tv.c b/src/field/tv.c index 89e978d00..1e38e79e0 100644 --- a/src/field/tv.c +++ b/src/field/tv.c @@ -674,7 +674,7 @@ void sub_80BE320(void) bravoTrainerTower->var00 = TVSHOW_BRAVO_TRAINER_BATTLE_TOWER_PROFILE; bravoTrainerTower->var01 = 1; StringCopy(bravoTrainerTower->trainerName, gSaveBlock2.playerName); - StringCopy(bravoTrainerTower->pokemonName, gSaveBlock2.filler_A8.filler_3DC); + StringCopy(bravoTrainerTower->pokemonName, gSaveBlock2.filler_A8.defeatedByTrainerName); bravoTrainerTower->species = gSaveBlock2.filler_A8.firstMonSpecies; bravoTrainerTower->defeatedSpecies = gSaveBlock2.filler_A8.defeatedBySpecies; bravoTrainerTower->var16 = sub_8135D3C(gSaveBlock2.filler_A8.lastStreakLevelType); -- cgit v1.2.3 From c677029e155aa5f0ef61de708588a36085fd36b4 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Sat, 28 Oct 2017 22:18:48 -0700 Subject: More battle_tower decomp --- src/battle/battle_controller_opponent.c | 2 +- src/battle/battle_message.c | 4 +- src/battle_tower.c | 285 +++++++++++++++++++++++++++++++- src/de_rom_8040FE0.c | 2 +- src/engine/mystery_event_script.c | 2 +- 5 files changed, 287 insertions(+), 8 deletions(-) (limited to 'src') diff --git a/src/battle/battle_controller_opponent.c b/src/battle/battle_controller_opponent.c index 72b56b962..b6ada3b7b 100644 --- a/src/battle/battle_controller_opponent.c +++ b/src/battle/battle_controller_opponent.c @@ -4,6 +4,7 @@ #include "data2.h" #include "battle_811DA74.h" #include "battle_anim_813F0F4.h" +#include "battle_tower.h" #include "link.h" #include "m4a.h" #include "main.h" @@ -76,7 +77,6 @@ extern u8 sub_8046400(); extern void sub_8032A08(); extern void sub_8043DB0(); extern void sub_8033160(void); -extern u8 sub_8135FBC(void); extern u8 get_trainer_class_pic_index(void); extern void sub_80313A0(struct Sprite *); extern void sub_8032B4C(void); diff --git a/src/battle/battle_message.c b/src/battle/battle_message.c index a3cc320ad..9df153e0a 100644 --- a/src/battle/battle_message.c +++ b/src/battle/battle_message.c @@ -1,6 +1,7 @@ #include "global.h" -#include "battle_message.h" #include "battle.h" +#include "battle_message.h" +#include "battle_tower.h" #include "item.h" #include "items.h" #include "pokemon.h" @@ -127,7 +128,6 @@ u8 GetBankSide(u8 bank); s32 sub_803FC34(u16); void get_trainer_name(u8* dst); u8 get_trainer_class_name_index(void); -u8 sub_8135FD8(void); u8 GetMultiplayerId(void); u8 GetBankByPlayerAI(u8 ID); u8 GetBankSide(u8 bank); diff --git a/src/battle_tower.c b/src/battle_tower.c index 2513322cc..1ed893fdf 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -22,6 +22,7 @@ #include "task.h" #include "text.h" #include "trainer.h" +#include "tv.h" #include "vars.h" #include "data/battle_tower/trainers.h" @@ -261,11 +262,11 @@ extern u8 gBattleOutcome; extern struct BattlePokemon gBattleMons[]; extern void ValidateBattleTowerRecordChecksums(void); -extern void sub_813601C(void); extern void sub_81349FC(u8); -extern void sub_81360AC(struct BattleTowerEReaderTrainer *); extern void sub_8135A3C(void); extern void sub_8135CFC(void); +static void ClearEReaderTrainer(struct BattleTowerEReaderTrainer *); +//static void SetEReaderTrainerChecksum(struct BattleTowerEReaderTrainer *ereaderTrainer); static void SetBattleTowerRecordChecksum(struct BattleTowerRecord *); static void ClearBattleTowerRecord(struct BattleTowerRecord *); @@ -2258,7 +2259,7 @@ void sub_8135668(void) case 6: if (gSaveBlock2.filler_A8.battleTowerTrainerId == 200) { - sub_81360AC(&gSaveBlock2.filler_A8.ereaderTrainer); + ClearEReaderTrainer(&gSaveBlock2.filler_A8.ereaderTrainer); } if (gSaveBlock2.filler_A8.totalBattleTowerWins < 9999) @@ -2757,3 +2758,281 @@ void sub_8135E50() IncrementGameStat(GAME_STAT_RECEIVED_RIBBONS); } } + +__attribute__((naked)) +void unref_sub_8135EE8() +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + ldr r7, _08135F0C @ =gSaveBlock2 + 0x498\n\ + ldr r0, _08135F10 @ =0xfffffb68\n\ + adds r2, r7, r0\n\ + ldrb r0, [r2, 0x8]\n\ + cmp r0, 0\n\ + beq _08135F18\n\ + ldr r4, _08135F14 @ =gUnknown_08405E7E\n\ + ldrb r0, [r2, 0xA]\n\ + ldrb r1, [r2, 0xB]\n\ + adds r0, r1\n\ + ldrb r1, [r2, 0xC]\n\ + adds r0, r1\n\ + ldrb r1, [r2, 0xD]\n\ + adds r0, r1\n\ + movs r1, 0x14\n\ + b _08135F2A\n\ + .align 2, 0\n\ +_08135F0C: .4byte gSaveBlock2 + 0x498\n\ +_08135F10: .4byte 0xfffffb68\n\ +_08135F14: .4byte gUnknown_08405E7E\n\ +_08135F18:\n\ + ldr r4, _08135FA8 @ =gUnknown_08405E60\n\ + ldrb r0, [r2, 0xA]\n\ + ldrb r1, [r2, 0xB]\n\ + adds r0, r1\n\ + ldrb r1, [r2, 0xC]\n\ + adds r0, r1\n\ + ldrb r1, [r2, 0xD]\n\ + adds r0, r1\n\ + movs r1, 0x1E\n\ +_08135F2A:\n\ + bl __umodsi3\n\ + adds r0, r4\n\ + ldrb r0, [r0]\n\ + strb r0, [r7, 0x1]\n\ + adds r0, r7, 0\n\ + adds r0, 0xC\n\ + ldr r4, _08135FAC @ =gSaveBlock2 + 0xA\n\ + adds r1, r4, 0\n\ + bl copy_word_to_mem\n\ + adds r0, r7, 0x4\n\ + subs r4, 0xA\n\ + adds r1, r4, 0\n\ + bl StringCopy8\n\ + movs r0, 0x1\n\ + strh r0, [r7, 0x2]\n\ + movs r5, 0x7\n\ + movs r4, 0\n\ + ldr r0, _08135FB0 @ =gSaveBlock1\n\ + ldr r1, _08135FB4 @ =0x00002b28\n\ + adds r6, r0, r1\n\ + adds r3, r7, 0\n\ + adds r3, 0x10\n\ + adds r2, r7, 0\n\ + adds r2, 0x28\n\ + adds r1, r7, 0\n\ + adds r1, 0x1C\n\ +_08135F64:\n\ + ldrh r0, [r6]\n\ + strh r0, [r3]\n\ + strh r5, [r1]\n\ + adds r0, r5, 0x6\n\ + strh r0, [r2]\n\ + adds r5, 0x1\n\ + adds r6, 0x2\n\ + adds r3, 0x2\n\ + adds r2, 0x2\n\ + adds r1, 0x2\n\ + adds r4, 0x1\n\ + cmp r4, 0x5\n\ + ble _08135F64\n\ + movs r4, 0\n\ +_08135F80:\n\ + movs r0, 0x64\n\ + muls r0, r4\n\ + ldr r1, _08135FB8 @ =gPlayerParty\n\ + adds r0, r1\n\ + movs r1, 0x2C\n\ + muls r1, r4\n\ + adds r1, 0x34\n\ + adds r1, r7, r1\n\ + bl sub_803AF78\n\ + adds r4, 0x1\n\ + cmp r4, 0x2\n\ + ble _08135F80\n\ + adds r0, r7, 0\n\ + bl SetEReaderTrainerChecksum\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_08135FA8: .4byte gUnknown_08405E60\n\ +_08135FAC: .4byte gSaveBlock2 + 0xA\n\ +_08135FB0: .4byte gSaveBlock1\n\ +_08135FB4: .4byte 0x00002b28\n\ +_08135FB8: .4byte gPlayerParty\n\ +.syntax divided\n"); +} + +u8 sub_8135FBC(void) +{ + return gTrainerClassToPicIndex[gSaveBlock2.filler_A8.ereaderTrainer.trainerClass]; +} + +u8 sub_8135FD8(void) +{ + return gTrainerClassToNameIndex[gSaveBlock2.filler_A8.ereaderTrainer.trainerClass]; +} + +void sub_8135FF4(u8 *text) +{ + s32 i; + + for (i = 0; i < 7; i++) + { + text[i] = gSaveBlock2.filler_A8.ereaderTrainer.name[i]; + } + + text[i] = 0xFF; +} + +void sub_813601C(void) +{ + u32 i; + u32 checksum; + struct BattleTowerEReaderTrainer *ereaderTrainer; + + gScriptResult = 0; + ereaderTrainer = &gSaveBlock2.filler_A8.ereaderTrainer; + + checksum = 0; + for (i = 0; i < sizeof(struct BattleTowerEReaderTrainer) / sizeof(u32) - 1; i++) + { + checksum |= ((u32 *)ereaderTrainer)[i]; + } + + if (checksum == 0) + { + gScriptResult = 1; + return; + } + + checksum = 0; + for (i = 0; i < sizeof(struct BattleTowerEReaderTrainer) / sizeof(u32) - 1; i++) + { + checksum += ((u32 *)ereaderTrainer)[i]; + } + + if (gSaveBlock2.filler_A8.ereaderTrainer.checksum != checksum) + { + ClearEReaderTrainer(&gSaveBlock2.filler_A8.ereaderTrainer); + gScriptResult = 1; + } +} + +void SetEReaderTrainerChecksum(struct BattleTowerEReaderTrainer *ereaderTrainer) +{ + s32 i; + + ereaderTrainer->checksum = 0; + for (i = 0; i < sizeof(struct BattleTowerEReaderTrainer) / sizeof(u32) - 1; i++) + { + ereaderTrainer->checksum += ((u32 *)ereaderTrainer)[i]; + } +} + +void ClearEReaderTrainer(struct BattleTowerEReaderTrainer *ereaderTrainer) +{ + u32 i; + + for (i = 0; i < sizeof(struct BattleTowerEReaderTrainer) / sizeof(u32); i++) + { + ((u32 *)ereaderTrainer)[i] = 0; + } +} + +void sub_81360C0(void) +{ + sub_813545C(gSaveBlock2.filler_A8.ereaderTrainer.greeting.easyChat); +} + +void sub_81360D0(void) +{ + if (gBattleOutcome == BATTLE_DREW) + { + gStringVar4[0] = 0xFF; + } + else if (gBattleOutcome == BATTLE_WON) + { + sub_813545C(gSaveBlock2.filler_A8.ereaderTrainer.farewellPlayerWon.easyChat); + } + else + { + sub_813545C(gSaveBlock2.filler_A8.ereaderTrainer.farewellPlayerLost.easyChat); + } +} + +void sub_813610C(void) +{ + s32 i; + + for (i = 0; i < 2; i++) + { + if (gSaveBlock2.filler_A8.var_4AE[i] == 1) + { + sub_80BFD20(); + } + } +} + + +#if GERMAN +__attribute__((naked)) +u8 de_sub_81364AC(void) +{ + asm(".syntax unified\n\ + push {lr}\n\ + ldr r2, _DE_081364C0 @ =gSaveBlock2\n\ + ldr r0, _DE_081364C4 @ =0x00000564\n\ + adds r1, r2, r0\n\ + ldrb r0, [r1]\n\ + cmp r0, 0xC8\n\ + bne _DE_081364CC\n\ + ldr r1, _DE_081364C8 @ =0x00000499\n\ + adds r0, r2, r1\n\ + b _DE_081364F2\n\ + .align 2, 0\n\ +_DE_081364C0: .4byte gSaveBlock2\n\ +_DE_081364C4: .4byte 0x00000564\n\ +_DE_081364C8: .4byte 0x00000499\n\ +_DE_081364CC:\n\ + cmp r0, 0x63\n\ + bhi _DE_081364E4\n\ + ldr r2, _DE_081364E0 @ =gBattleTowerTrainers\n\ + ldrb r1, [r1]\n\ + lsls r0, r1, 1\n\ + adds r0, r1\n\ + lsls r0, 3\n\ + adds r0, r2\n\ + b _DE_081364F2\n\ + .align 2, 0\n\ +_DE_081364E0: .4byte gBattleTowerTrainers\n\ +_DE_081364E4:\n\ + ldrb r0, [r1]\n\ + subs r0, 0x64\n\ + movs r1, 0xA4\n\ + muls r0, r1\n\ + adds r0, r2\n\ + adds r1, 0xA9\n\ + adds r0, r1\n\ +_DE_081364F2:\n\ + ldrb r0, [r0]\n\ + pop {r1}\n\ + bx r1\n\ +.syntax divided\n"); +} + +__attribute__((naked)) +u8 de_sub_81364F8(void) +{ + asm(".syntax unified\n\ + ldr r0, _DE_08136504 @ =gSaveBlock2\n\ + ldr r1, _DE_08136508 @ =0x00000499\n\ + adds r0, r1\n\ + ldrb r0, [r0]\n\ + bx lr\n\ + .align 2, 0\n\ +_DE_08136504: .4byte gSaveBlock2\n\ +_DE_08136508: .4byte 0x00000499\n\ +.syntax divided\n"); +} +#endif diff --git a/src/de_rom_8040FE0.c b/src/de_rom_8040FE0.c index eebcc1437..953871c8b 100644 --- a/src/de_rom_8040FE0.c +++ b/src/de_rom_8040FE0.c @@ -1,5 +1,6 @@ #include "global.h" #include "battle.h" +#include "battle_tower.h" #if GERMAN @@ -59,7 +60,6 @@ u8 *de_sub_804100C(u8 gender) { u8 de_sub_81364AC(void); u8 get_trainer_class_name_index(void); u8 de_sub_81364F8(void); -u8 sub_8135FD8(void); u8 *de_sub_8041024(s32 arg0, u32 arg1) { u8 nameIndex, trainerClass, gender; diff --git a/src/engine/mystery_event_script.c b/src/engine/mystery_event_script.c index 38ada0685..c07a23262 100644 --- a/src/engine/mystery_event_script.c +++ b/src/engine/mystery_event_script.c @@ -1,5 +1,6 @@ #include "global.h" #include "berry.h" +#include "battle_tower.h" #include "easy_chat.h" #include "event_data.h" #include "mail_data.h" @@ -27,7 +28,6 @@ #endif extern void party_compaction(void); -extern void sub_813601C(void); extern ScrCmdFunc gMysteryEventScriptCmdTable[]; extern ScrCmdFunc gMysteryEventScriptCmdTableEnd[]; -- cgit v1.2.3 From b9252e4f2803fe14bd7dd8385da595931b82c8d6 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Sat, 28 Oct 2017 22:59:19 -0700 Subject: Give more descriptive names for battle tower structs --- src/battle/battle_records.c | 17 ++- src/battle_tower.c | 307 +++++++++++++++++++------------------- src/debug/unknown_debug_menu.c | 12 +- src/engine/mystery_event_script.c | 2 +- src/engine/record_mixing.c | 4 +- src/engine/trainer_card.c | 4 +- src/field/choose_party.c | 2 +- src/field/tv.c | 12 +- src/scene/new_game.c | 6 +- 9 files changed, 183 insertions(+), 183 deletions(-) (limited to 'src') diff --git a/src/battle/battle_records.c b/src/battle/battle_records.c index 59da6ba73..fd1f528ac 100644 --- a/src/battle/battle_records.c +++ b/src/battle/battle_records.c @@ -260,9 +260,9 @@ void ShowLinkBattleRecords(void) { static bool32 sub_8110494(u8 level) { - struct SaveBlock2_Sub *sb2sub = &gSaveBlock2.filler_A8; + struct BattleTowerData *battleTower = &gSaveBlock2.battleTower; - switch (sb2sub->var_4AE[level]) + switch (battleTower->var_4AE[level]) { case 0: return FALSE; @@ -294,17 +294,18 @@ static void PrintWinStreak(const u8 *str, u16 streak, u8 left, u8 top) static void PrintRecordWinStreak(u8 level, u8 left, u8 top) { - struct SaveBlock2_Sub *sb2sub = &gSaveBlock2.filler_A8; - u16 winStreak = sb2sub->recordWinStreaks[level]; + struct BattleTowerData *battleTower = &gSaveBlock2.battleTower; + u16 winStreak = battleTower->recordWinStreaks[level]; PrintWinStreak(gOtherText_Record, winStreak, left, top); } static u16 GetLastWinStreak(u8 level) { - u16 result = gSaveBlock2.filler_A8.currentWinStreaks[level]; - if (result > 9999) - result = 9999; - return result; + u16 winStreak = gSaveBlock2.battleTower.currentWinStreaks[level]; + if (winStreak > 9999) + winStreak = 9999; + + return winStreak; } static void PrintLastWinStreak(u8 level, u8 left, u8 top) diff --git a/src/battle_tower.c b/src/battle_tower.c index 1ed893fdf..f799168f6 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -280,7 +280,7 @@ void sub_8134548(void) for (levelType = 0; levelType < 2; levelType++) { - switch (gSaveBlock2.filler_A8.var_4AE[levelType]) + switch (gSaveBlock2.battleTower.var_4AE[levelType]) { case 0: default: @@ -313,8 +313,8 @@ void sub_8134548(void) } } - if ((gSaveBlock2.filler_A8.var_4AE[0] == 3 || gSaveBlock2.filler_A8.var_4AE[0] == 6) - && (gSaveBlock2.filler_A8.var_4AE[1] == 3 || gSaveBlock2.filler_A8.var_4AE[1] == 6)) + if ((gSaveBlock2.battleTower.var_4AE[0] == 3 || gSaveBlock2.battleTower.var_4AE[0] == 6) + && (gSaveBlock2.battleTower.var_4AE[1] == 3 || gSaveBlock2.battleTower.var_4AE[1] == 6)) { VarSet(VAR_0x4000, 5); } @@ -324,9 +324,9 @@ void sub_8134548(void) void sub_813461C(u8 levelType) { - gSaveBlock2.filler_A8.var_4AE[levelType] = 0; - gSaveBlock2.filler_A8.var_4B0[levelType] = 1; - gSaveBlock2.filler_A8.var_4B4[levelType] = 1; + gSaveBlock2.battleTower.var_4AE[levelType] = 0; + gSaveBlock2.battleTower.curChallengeWins[levelType] = 1; + gSaveBlock2.battleTower.curStreakChallengesCompleted[levelType] = 1; } // u8 sub_8134650(u8 levelType, u16 b) @@ -337,7 +337,7 @@ void sub_813461C(u8 levelType) // sub_813601C(); -// if (gScriptResult || gSaveBlock2.filler_A8.ereaderTrainer.unk2 != b) +// if (gScriptResult || gSaveBlock2.battleTower.ereaderTrainer.unk2 != b) // { // return 0; // } @@ -350,12 +350,12 @@ void sub_813461C(u8 levelType) // for (i = 0; i < 3; i++) // { -// if (!gSaveBlock2.filler_A8.ereaderTrainer.party[i].level != trainerTeamLevel) +// if (!gSaveBlock2.battleTower.ereaderTrainer.party[i].level != trainerTeamLevel) // { // return 0; // } -// CheckMonBattleTowerBanlist(gSaveBlock2.filler_A8.ereaderTrainer.party[i].unk0, gSaveBlock2.filler_A8.ereaderTrainer.party[i].unk2, 1, levelType, &numValid); +// CheckMonBattleTowerBanlist(gSaveBlock2.battleTower.ereaderTrainer.party[i].unk0, gSaveBlock2.battleTower.ereaderTrainer.party[i].unk2, 1, levelType, &numValid); // } // return numValid == 3; @@ -456,11 +456,11 @@ _081346F0: .4byte 0x000004cc\n\ // s32 i; // u32 j; // u32 arr[4]; -// u16 var2 = sub_8135D3C(gSaveBlock2.filler_A8.battleTowerLevelType); +// u16 var2 = sub_8135D3C(gSaveBlock2.battleTower.battleTowerLevelType); -// if (sub_8134650(gSaveBlock2.filler_A8.battleTowerLevelType)) +// if (sub_8134650(gSaveBlock2.battleTower.battleTowerLevelType)) // { -// gSaveBlock2.filler_A8.battleTowerTrainerId = 0xC8; +// gSaveBlock2.battleTower.battleTowerTrainerId = 0xC8; // return TRUE; // } @@ -470,8 +470,8 @@ _081346F0: .4byte 0x000004cc\n\ // u32 var_add = 0; // for (j = 0; j < 40; j++) // { -// var_or |= gSaveBlock2.filler_A8.var_0A4[i][j]; -// var_add += gSaveBlock2.filler_A8.var_0A4[i][j]; +// var_or |= gSaveBlock2.battleTower.var_0A4[i][j]; +// var_add += gSaveBlock2.battleTower.var_0A4[i][j]; // } @@ -614,27 +614,27 @@ _081347F4: .4byte 0x00000564\n\ // void sub_81347F8(void) // { -// bool8 levelType = gSaveBlock2.filler_A8.battleTowerLevelType; +// bool8 levelType = gSaveBlock2.battleTower.battleTowerLevelType; // if (sub_81346F4()) // { -// sub_81349FC(gSaveBlock2.filler_A8.battleTowerTrainerId); -// gSaveBlock2.filler_A8.var_4C1[gSaveBlock2.filler_A8.var_4B0[levelType]] = gSaveBlock2.filler_A8.battleTowerTrainerId; +// sub_81349FC(gSaveBlock2.battleTower.battleTowerTrainerId); +// gSaveBlock2.battleTower.var_4C1[gSaveBlock2.battleTower.curChallengeWins[levelType]] = gSaveBlock2.battleTower.battleTowerTrainerId; // } // else // { // u16 var1; -// if (gSaveBlock2.filler_A8.var_4B4[levelType] > 7) +// if (gSaveBlock2.battleTower.curStreakChallengesCompleted[levelType] > 7) // { // while (1) // { // s32 i; // u32 temp = ((Random() & 0xFF) * 30) >> 8; // var1 = temp + 70; -// for (i = 0; i < gSaveBlock2.filler_A8.var_4B0[levelType] - 1 && var1 != gSaveBlock2.filler_A8.var_4C1[i]; i++) // TODO: [i + 1]??? +// for (i = 0; i < gSaveBlock2.battleTower.curChallengeWins[levelType] - 1 && var1 != gSaveBlock2.battleTower.var_4C1[i]; i++) // TODO: [i + 1]??? // { } -// if (i == gSaveBlock2.filler_A8.var_4B0[levelType] - 1) +// if (i == gSaveBlock2.battleTower.curChallengeWins[levelType] - 1) // { // break; // } @@ -642,18 +642,18 @@ _081347F4: .4byte 0x00000564\n\ // } // else // { -// if (gSaveBlock2.filler_A8.var_4B0[levelType] == 7) +// if (gSaveBlock2.battleTower.curChallengeWins[levelType] == 7) // { // while (1) // { // s32 i; // u32 temp = ((Random() & 0xFF) * 5); -// u32 temp2 = (((gSaveBlock2.filler_A8.var_4B4[levelType] - 1) * 10) + 20); +// u32 temp2 = (((gSaveBlock2.battleTower.curStreakChallengesCompleted[levelType] - 1) * 10) + 20); // var1 = temp / 128 + temp2; -// for (i = 0; i < gSaveBlock2.filler_A8.var_4B0[levelType] - 1 && gSaveBlock2.filler_A8.var_4C1[i] != var1; i++) // TODO: [i + 1]???? +// for (i = 0; i < gSaveBlock2.battleTower.curChallengeWins[levelType] - 1 && gSaveBlock2.battleTower.var_4C1[i] != var1; i++) // TODO: [i + 1]???? // { } -// if (i == gSaveBlock2.filler_A8.var_4B0[levelType] - 1) +// if (i == gSaveBlock2.battleTower.curChallengeWins[levelType] - 1) // { // break; // } @@ -665,12 +665,12 @@ _081347F4: .4byte 0x00000564\n\ // { // s32 i; // u32 temp = ((Random() & 0xFF) * 320); -// u32 temp2 = ((gSaveBlock2.filler_A8.var_4B4[levelType] - 1) * 10); +// u32 temp2 = ((gSaveBlock2.battleTower.curStreakChallengesCompleted[levelType] - 1) * 10); // var1 = temp + temp2; -// for (i = 0; i < gSaveBlock2.filler_A8.var_4B0[levelType] - 1 && gSaveBlock2.filler_A8.var_4C1[i] != var1; i++) +// for (i = 0; i < gSaveBlock2.battleTower.curChallengeWins[levelType] - 1 && gSaveBlock2.battleTower.var_4C1[i] != var1; i++) // { } -// if (i == gSaveBlock2.filler_A8.var_4B0[levelType] - 1) +// if (i == gSaveBlock2.battleTower.curChallengeWins[levelType] - 1) // { // break; // } @@ -678,12 +678,12 @@ _081347F4: .4byte 0x00000564\n\ // } // } -// gSaveBlock2.filler_A8.battleTowerTrainerId = var1; -// sub_81349FC(gSaveBlock2.filler_A8.battleTowerTrainerId); +// gSaveBlock2.battleTower.battleTowerTrainerId = var1; +// sub_81349FC(gSaveBlock2.battleTower.battleTowerTrainerId); -// if (gSaveBlock2.filler_A8.var_4B0[levelType] < 7) +// if (gSaveBlock2.battleTower.curChallengeWins[levelType] < 7) // { -// gSaveBlock2.filler_A8.var_4C1[gSaveBlock2.filler_A8.var_4B0[levelType]] = gSaveBlock2.filler_A8.battleTowerTrainerId; +// gSaveBlock2.battleTower.var_4C1[gSaveBlock2.battleTower.curChallengeWins[levelType]] = gSaveBlock2.battleTower.battleTowerTrainerId; // } // } // } @@ -963,11 +963,11 @@ void sub_81349FC(u8 trainerIndex) } else if (trainerIndex < 200) { - trainerClass = gSaveBlock2.filler_A8.var_14C[trainerIndex - 100].trainerClass; + trainerClass = gSaveBlock2.battleTower.records[trainerIndex - 100].trainerClass; } else { - trainerClass = gSaveBlock2.filler_A8.ereaderTrainer.trainerClass; + trainerClass = gSaveBlock2.battleTower.ereaderTrainer.trainerClass; } for (i = 0; i < 30 && gUnknown_08405E60[i] != trainerClass; i++); @@ -1004,10 +1004,10 @@ void sub_8134AB4() // for (i = 0; i < 5; i++) // { // k = 0; -// for (j = 0; j < 4 && gSaveBlock2.filler_A8.var_14C[i].var_C[i] != record->var_C[j]; j++); +// for (j = 0; j < 4 && gSaveBlock2.battleTower.records[i].var_C[i] != record->var_C[j]; j++); // if (j == 4) // { -// for (k = 0; k < 7 && gSaveBlock2.filler_A8.var_14C[i].var_8 == record->var_8; k++) +// for (k = 0; k < 7 && gSaveBlock2.battleTower.records[i].var_8 == record->var_8; k++) // { // if (record->var_8 == 0xFF) // { @@ -1025,40 +1025,40 @@ void sub_8134AB4() // if (i < 5) // { -// gSaveBlock2.filler_A8.var_14C[i] = *record; +// gSaveBlock2.battleTower.records[i] = *record; // return; // } // i = 0; // while (i < 5) // { -// if (gSaveBlock2.filler_A8.var_14C[i].var_2 == 0) +// if (gSaveBlock2.battleTower.records[i].var_2 == 0) // { // if (i > 4) // { // break; // } -// gSaveBlock2.filler_A8.var_14C[i] = *record; +// gSaveBlock2.battleTower.records[i] = *record; // return; // } // i++; // } -// var1[0] = gSaveBlock2.filler_A8.var_14C[0].var_2; +// var1[0] = gSaveBlock2.battleTower.records[0].var_2; // var2[0] = 0; // l++; // for (i = 1; i < 5; i++) // { -// for (j = 0; gSaveBlock2.filler_A8.var_14C[i].var_2 <= var1[0] && j < l; j++) +// for (j = 0; gSaveBlock2.battleTower.records[i].var_2 <= var1[0] && j < l; j++) // { -// if (gSaveBlock2.filler_A8.var_14C[i].var_2 < var1[0]) +// if (gSaveBlock2.battleTower.records[i].var_2 < var1[0]) // { // j = 0; // l = 1; -// var1[0] = gSaveBlock2.filler_A8.var_14C[i].var_2; +// var1[0] = gSaveBlock2.battleTower.records[i].var_2; // var2[0] = i; // break; // } @@ -1066,13 +1066,13 @@ void sub_8134AB4() // if (j == l) // { -// var1[l] = gSaveBlock2.filler_A8.var_14C[i].var_2; +// var1[l] = gSaveBlock2.battleTower.records[i].var_2; // var2[l] = i; // l++; // } // } -// gSaveBlock2.filler_A8.var_14C[var2[(Random() % l)]] = *record; +// gSaveBlock2.battleTower.records[var2[(Random() % l)]] = *record; // } __attribute__((naked)) @@ -1313,33 +1313,33 @@ _08134C70: .4byte gSaveBlock2\n\ u8 get_trainer_class_pic_index(void) { - if (gSaveBlock2.filler_A8.battleTowerTrainerId == 200) + if (gSaveBlock2.battleTower.battleTowerTrainerId == 200) { - return gTrainerClassToPicIndex[gSaveBlock2.filler_A8.ereaderTrainer.trainerClass]; + return gTrainerClassToPicIndex[gSaveBlock2.battleTower.ereaderTrainer.trainerClass]; } - else if (gSaveBlock2.filler_A8.battleTowerTrainerId < 100) + else if (gSaveBlock2.battleTower.battleTowerTrainerId < 100) { - return gTrainerClassToPicIndex[gBattleTowerTrainers[gSaveBlock2.filler_A8.battleTowerTrainerId].trainerClass]; + return gTrainerClassToPicIndex[gBattleTowerTrainers[gSaveBlock2.battleTower.battleTowerTrainerId].trainerClass]; } else { - return gTrainerClassToPicIndex[gSaveBlock2.filler_A8.var_14C[gSaveBlock2.filler_A8.battleTowerTrainerId - 100].trainerClass]; + return gTrainerClassToPicIndex[gSaveBlock2.battleTower.records[gSaveBlock2.battleTower.battleTowerTrainerId - 100].trainerClass]; } } u8 get_trainer_class_name_index(void) { - if (gSaveBlock2.filler_A8.battleTowerTrainerId == 200) + if (gSaveBlock2.battleTower.battleTowerTrainerId == 200) { - return gTrainerClassToNameIndex[gSaveBlock2.filler_A8.ereaderTrainer.trainerClass]; + return gTrainerClassToNameIndex[gSaveBlock2.battleTower.ereaderTrainer.trainerClass]; } - else if (gSaveBlock2.filler_A8.battleTowerTrainerId >= 100) + else if (gSaveBlock2.battleTower.battleTowerTrainerId >= 100) { - return gTrainerClassToNameIndex[gSaveBlock2.filler_A8.var_14C[gSaveBlock2.filler_A8.battleTowerTrainerId - 100].trainerClass]; + return gTrainerClassToNameIndex[gSaveBlock2.battleTower.records[gSaveBlock2.battleTower.battleTowerTrainerId - 100].trainerClass]; } else { - return gTrainerClassToNameIndex[gBattleTowerTrainers[gSaveBlock2.filler_A8.battleTowerTrainerId].trainerClass]; + return gTrainerClassToNameIndex[gBattleTowerTrainers[gSaveBlock2.battleTower.battleTowerTrainerId].trainerClass]; } } @@ -1347,25 +1347,25 @@ void get_trainer_name(u8* dest) { s32 i; - if (gSaveBlock2.filler_A8.battleTowerTrainerId == 200) + if (gSaveBlock2.battleTower.battleTowerTrainerId == 200) { for (i = 0; i < 7; i++) { - dest[i] = gSaveBlock2.filler_A8.ereaderTrainer.name[i]; + dest[i] = gSaveBlock2.battleTower.ereaderTrainer.name[i]; } } - else if (gSaveBlock2.filler_A8.battleTowerTrainerId < 100) + else if (gSaveBlock2.battleTower.battleTowerTrainerId < 100) { for (i = 0; i < 7; i++) { - dest[i] = gBattleTowerTrainers[gSaveBlock2.filler_A8.battleTowerTrainerId].name[i]; + dest[i] = gBattleTowerTrainers[gSaveBlock2.battleTower.battleTowerTrainerId].name[i]; } } else { for (i = 0; i < 7; i++) { - dest[i] = gSaveBlock2.filler_A8.var_14C[gSaveBlock2.filler_A8.battleTowerTrainerId - 100].name[i]; + dest[i] = gSaveBlock2.battleTower.records[gSaveBlock2.battleTower.battleTowerTrainerId - 100].name[i]; } } @@ -2129,17 +2129,17 @@ void sub_813545C(u16 *easyChat) void sub_8135474(void) { - if (gSaveBlock2.filler_A8.battleTowerTrainerId == 200) + if (gSaveBlock2.battleTower.battleTowerTrainerId == 200) { - sub_813545C(gSaveBlock2.filler_A8.ereaderTrainer.greeting.easyChat); + sub_813545C(gSaveBlock2.battleTower.ereaderTrainer.greeting.easyChat); } - else if (gSaveBlock2.filler_A8.battleTowerTrainerId < 100) + else if (gSaveBlock2.battleTower.battleTowerTrainerId < 100) { - sub_813545C((u16 *)gBattleTowerTrainers[gSaveBlock2.filler_A8.battleTowerTrainerId].greeting.easyChat); + sub_813545C((u16 *)gBattleTowerTrainers[gSaveBlock2.battleTower.battleTowerTrainerId].greeting.easyChat); } else { - sub_813545C(gSaveBlock2.filler_A8.var_14C[gSaveBlock2.filler_A8.battleTowerTrainerId - 100].greeting.easyChat); + sub_813545C(gSaveBlock2.battleTower.records[gSaveBlock2.battleTower.battleTowerTrainerId - 100].greeting.easyChat); } } @@ -2213,7 +2213,7 @@ void sub_813556C(void) for (i = 0; i < 3; i++) { - sub_803ADE8(&gEnemyParty[i], &gSaveBlock2.filler_A8.ereaderTrainer.party[i]); + sub_803ADE8(&gEnemyParty[i], &gSaveBlock2.battleTower.ereaderTrainer.party[i]); } gBattleTypeFlags = (BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_TRAINER); @@ -2230,130 +2230,130 @@ void sub_813556C(void) void sub_8135668(void) { s32 i; - u8 battleTowerLevelType = gSaveBlock2.filler_A8.battleTowerLevelType; + u8 battleTowerLevelType = gSaveBlock2.battleTower.battleTowerLevelType; switch (gSpecialVar_0x8004) { case 0: - ewram160FB = gSaveBlock2.filler_A8.var_4AE[battleTowerLevelType]; - gSaveBlock2.filler_A8.var_4AE[battleTowerLevelType] = gSpecialVar_0x8005; + ewram160FB = gSaveBlock2.battleTower.var_4AE[battleTowerLevelType]; + gSaveBlock2.battleTower.var_4AE[battleTowerLevelType] = gSpecialVar_0x8005; break; case 1: - gSaveBlock2.filler_A8.battleTowerLevelType = gSpecialVar_0x8005; + gSaveBlock2.battleTower.battleTowerLevelType = gSpecialVar_0x8005; break; case 2: - gSaveBlock2.filler_A8.var_4B0[battleTowerLevelType] = gSpecialVar_0x8005; + gSaveBlock2.battleTower.curChallengeWins[battleTowerLevelType] = gSpecialVar_0x8005; break; case 3: - gSaveBlock2.filler_A8.var_4B4[battleTowerLevelType] = gSpecialVar_0x8005; + gSaveBlock2.battleTower.curStreakChallengesCompleted[battleTowerLevelType] = gSpecialVar_0x8005; break; case 4: - gSaveBlock2.filler_A8.battleTowerTrainerId = gSpecialVar_0x8005; + gSaveBlock2.battleTower.battleTowerTrainerId = gSpecialVar_0x8005; break; case 5: for (i = 0; i < 3; i++) { - gSaveBlock2.filler_A8.var_4BD[i] = gSelectedOrderFromParty[i]; + gSaveBlock2.battleTower.selectedPartyMons[i] = gSelectedOrderFromParty[i]; } break; case 6: - if (gSaveBlock2.filler_A8.battleTowerTrainerId == 200) + if (gSaveBlock2.battleTower.battleTowerTrainerId == 200) { - ClearEReaderTrainer(&gSaveBlock2.filler_A8.ereaderTrainer); + ClearEReaderTrainer(&gSaveBlock2.battleTower.ereaderTrainer); } - if (gSaveBlock2.filler_A8.totalBattleTowerWins < 9999) + if (gSaveBlock2.battleTower.totalBattleTowerWins < 9999) { - gSaveBlock2.filler_A8.totalBattleTowerWins++; + gSaveBlock2.battleTower.totalBattleTowerWins++; } - gSaveBlock2.filler_A8.var_4B0[battleTowerLevelType]++; + gSaveBlock2.battleTower.curChallengeWins[battleTowerLevelType]++; sub_8135A3C(); - gScriptResult = gSaveBlock2.filler_A8.var_4B0[battleTowerLevelType]; + gScriptResult = gSaveBlock2.battleTower.curChallengeWins[battleTowerLevelType]; - gStringVar1[0] = gSaveBlock2.filler_A8.var_4B0[battleTowerLevelType] + 0xA1; + gStringVar1[0] = gSaveBlock2.battleTower.curChallengeWins[battleTowerLevelType] + 0xA1; gStringVar1[1] = 0xFF; break; case 7: - if (gSaveBlock2.filler_A8.var_4B4[battleTowerLevelType] < 1430) + if (gSaveBlock2.battleTower.curStreakChallengesCompleted[battleTowerLevelType] < 1430) { - gSaveBlock2.filler_A8.var_4B4[battleTowerLevelType]++; + gSaveBlock2.battleTower.curStreakChallengesCompleted[battleTowerLevelType]++; } sub_8135A3C(); - gScriptResult = gSaveBlock2.filler_A8.var_4B4[battleTowerLevelType]; + gScriptResult = gSaveBlock2.battleTower.curStreakChallengesCompleted[battleTowerLevelType]; break; case 8: - gSaveBlock2.filler_A8.unk_554 = gSpecialVar_0x8005; + gSaveBlock2.battleTower.unk_554 = gSpecialVar_0x8005; break; case 9: break; case 10: - SetGameStat(GAME_STAT_BATTLE_TOWER_BEST_STREAK, gSaveBlock2.filler_A8.bestBattleTowerWinStreak); + SetGameStat(GAME_STAT_BATTLE_TOWER_BEST_STREAK, gSaveBlock2.battleTower.bestBattleTowerWinStreak); break; case 11: - if (gSaveBlock2.filler_A8.var_4AE[battleTowerLevelType] != 3) + if (gSaveBlock2.battleTower.var_4AE[battleTowerLevelType] != 3) { sub_813461C(battleTowerLevelType); } break; case 12: - gSaveBlock2.filler_A8.var_4AE[battleTowerLevelType] = ewram160FB; + gSaveBlock2.battleTower.var_4AE[battleTowerLevelType] = ewram160FB; break; case 13: - gSaveBlock2.filler_A8.currentWinStreaks[battleTowerLevelType] = sub_8135D3C(battleTowerLevelType); + gSaveBlock2.battleTower.currentWinStreaks[battleTowerLevelType] = sub_8135D3C(battleTowerLevelType); break; case 14: - gSaveBlock2.filler_A8.lastStreakLevelType = gSaveBlock2.filler_A8.battleTowerLevelType; + gSaveBlock2.battleTower.lastStreakLevelType = gSaveBlock2.battleTower.battleTowerLevelType; break; } } void sub_81358A4(void) { - u8 battleTowerLevelType = gSaveBlock2.filler_A8.battleTowerLevelType; + u8 battleTowerLevelType = gSaveBlock2.battleTower.battleTowerLevelType; switch (gSpecialVar_0x8004) { case 0: - gScriptResult = gSaveBlock2.filler_A8.var_4AE[battleTowerLevelType]; + gScriptResult = gSaveBlock2.battleTower.var_4AE[battleTowerLevelType]; break; case 1: - gScriptResult = gSaveBlock2.filler_A8.battleTowerLevelType; + gScriptResult = gSaveBlock2.battleTower.battleTowerLevelType; break; case 2: - gScriptResult = gSaveBlock2.filler_A8.var_4B0[battleTowerLevelType]; + gScriptResult = gSaveBlock2.battleTower.curChallengeWins[battleTowerLevelType]; break; case 3: - gScriptResult = gSaveBlock2.filler_A8.var_4B4[battleTowerLevelType]; + gScriptResult = gSaveBlock2.battleTower.curStreakChallengesCompleted[battleTowerLevelType]; break; case 4: - gScriptResult = gSaveBlock2.filler_A8.battleTowerTrainerId; + gScriptResult = gSaveBlock2.battleTower.battleTowerTrainerId; break; case 5: case 6: case 7: break; case 8: - gScriptResult = gSaveBlock2.filler_A8.unk_554; + gScriptResult = gSaveBlock2.battleTower.unk_554; break; case 9: gScriptResult = sub_8135D3C(battleTowerLevelType); break; case 10: - SetGameStat(GAME_STAT_BATTLE_TOWER_BEST_STREAK, gSaveBlock2.filler_A8.bestBattleTowerWinStreak); + SetGameStat(GAME_STAT_BATTLE_TOWER_BEST_STREAK, gSaveBlock2.battleTower.bestBattleTowerWinStreak); break; case 11: sub_813461C(battleTowerLevelType); break; case 12: - gSaveBlock2.filler_A8.var_4AE[battleTowerLevelType] = ewram160FB; + gSaveBlock2.battleTower.var_4AE[battleTowerLevelType] = ewram160FB; break; case 13: - gSaveBlock2.filler_A8.currentWinStreaks[battleTowerLevelType] = sub_8135D3C(battleTowerLevelType); + gSaveBlock2.battleTower.currentWinStreaks[battleTowerLevelType] = sub_8135D3C(battleTowerLevelType); break; case 14: - gSaveBlock2.filler_A8.lastStreakLevelType = gSaveBlock2.filler_A8.battleTowerLevelType; + gSaveBlock2.battleTower.lastStreakLevelType = gSaveBlock2.battleTower.battleTowerLevelType; break; } } @@ -2364,7 +2364,7 @@ void sub_8135A14(void) for (i = 0; i < 3; i++) { - gSelectedOrderFromParty[i] = gSaveBlock2.filler_A8.var_4BD[i]; + gSelectedOrderFromParty[i] = gSaveBlock2.battleTower.selectedPartyMons[i]; } ReducePlayerPartyToThree(); @@ -2373,35 +2373,35 @@ void sub_8135A14(void) #ifdef NONMATCHING void sub_8135A3C(void) { - u8 battleTowerLevelType = gSaveBlock2.filler_A8.battleTowerLevelType; + u8 battleTowerLevelType = gSaveBlock2.battleTower.battleTowerLevelType; u16 winStreak = sub_8135D3C(battleTowerLevelType); - if (gSaveBlock2.filler_A8.recordWinStreaks[battleTowerLevelType] < winStreak) + if (gSaveBlock2.battleTower.recordWinStreaks[battleTowerLevelType] < winStreak) { - gSaveBlock2.filler_A8.recordWinStreaks[battleTowerLevelType] = winStreak; + gSaveBlock2.battleTower.recordWinStreaks[battleTowerLevelType] = winStreak; } - if (gSaveBlock2.filler_A8.recordWinStreaks[0] > gSaveBlock2.filler_A8.recordWinStreaks[1]) + if (gSaveBlock2.battleTower.recordWinStreaks[0] > gSaveBlock2.battleTower.recordWinStreaks[1]) { - SetGameStat(GAME_STAT_BATTLE_TOWER_BEST_STREAK, gSaveBlock2.filler_A8.recordWinStreaks[0]); - if (gSaveBlock2.filler_A8.recordWinStreaks[0] > 9999) + SetGameStat(GAME_STAT_BATTLE_TOWER_BEST_STREAK, gSaveBlock2.battleTower.recordWinStreaks[0]); + if (gSaveBlock2.battleTower.recordWinStreaks[0] > 9999) { - gSaveBlock2.filler_A8.bestBattleTowerWinStreak = 9999; + gSaveBlock2.battleTower.bestBattleTowerWinStreak = 9999; } else { - gSaveBlock2.filler_A8.bestBattleTowerWinStreak = gSaveBlock2.filler_A8.recordWinStreaks[0]; + gSaveBlock2.battleTower.bestBattleTowerWinStreak = gSaveBlock2.battleTower.recordWinStreaks[0]; } } else { - SetGameStat(GAME_STAT_BATTLE_TOWER_BEST_STREAK, gSaveBlock2.filler_A8.recordWinStreaks[1]); - if (gSaveBlock2.filler_A8.recordWinStreaks[1] > 9999) + SetGameStat(GAME_STAT_BATTLE_TOWER_BEST_STREAK, gSaveBlock2.battleTower.recordWinStreaks[1]); + if (gSaveBlock2.battleTower.recordWinStreaks[1] > 9999) { - gSaveBlock2.filler_A8.bestBattleTowerWinStreak = 9999; + gSaveBlock2.battleTower.bestBattleTowerWinStreak = 9999; } else { - gSaveBlock2.filler_A8.bestBattleTowerWinStreak = gSaveBlock2.filler_A8.recordWinStreaks[1]; + gSaveBlock2.battleTower.bestBattleTowerWinStreak = gSaveBlock2.battleTower.recordWinStreaks[1]; } } } @@ -2484,8 +2484,8 @@ void sub_8135AC4(void) { s32 i; u8 trainerClass; - struct BattleTowerRecord *playerRecord = &gSaveBlock2.filler_A8.var_A8; - u8 battleTowerLevelType = gSaveBlock2.filler_A8.battleTowerLevelType; + struct BattleTowerRecord *playerRecord = &gSaveBlock2.battleTower.playerRecord; + u8 battleTowerLevelType = gSaveBlock2.battleTower.battleTowerLevelType; if (gSaveBlock2.playerGender != 0) { @@ -2513,21 +2513,21 @@ void sub_8135AC4(void) for (i = 0; i < 3; i++) { - sub_803AF78(&gUnknown_030042FC[gSaveBlock2.filler_A8.var_4BD[i]], &playerRecord->party[i]); + sub_803AF78(&gUnknown_030042FC[gSaveBlock2.battleTower.selectedPartyMons[i]], &playerRecord->party[i]); } - SetBattleTowerRecordChecksum(&gSaveBlock2.filler_A8.var_A8); + SetBattleTowerRecordChecksum(&gSaveBlock2.battleTower.playerRecord); sub_8135A3C(); } void sub_8135BA0(void) { - u8 battleTowerLevelType = gSaveBlock2.filler_A8.battleTowerLevelType; + u8 battleTowerLevelType = gSaveBlock2.battleTower.battleTowerLevelType; if (gSpecialVar_0x8004 == 3 || gSpecialVar_0x8004 == 0) { - if (gSaveBlock2.filler_A8.var_4B4[battleTowerLevelType] > 1 - || gSaveBlock2.filler_A8.var_4B0[battleTowerLevelType] > 1) + if (gSaveBlock2.battleTower.curStreakChallengesCompleted[battleTowerLevelType] > 1 + || gSaveBlock2.battleTower.curChallengeWins[battleTowerLevelType] > 1) { sub_8135AC4(); } @@ -2535,15 +2535,15 @@ void sub_8135BA0(void) sub_8135CFC(); - gSaveBlock2.filler_A8.var_4AD = gBattleOutcome; + gSaveBlock2.battleTower.battleOutcome = gBattleOutcome; if (gSpecialVar_0x8004 != 3) { - gSaveBlock2.filler_A8.var_4AE[battleTowerLevelType] = gSpecialVar_0x8004; + gSaveBlock2.battleTower.var_4AE[battleTowerLevelType] = gSpecialVar_0x8004; } VarSet(VAR_0x4000, 0); - gSaveBlock2.filler_A8.unk_554 = 1; + gSaveBlock2.battleTower.unk_554 = 1; TrySavingData(EREADER_SAVE); } @@ -2562,26 +2562,26 @@ void ValidateBattleTowerRecordChecksums(void) checksum = 0; for (i = 0; i < (sizeof(struct BattleTowerRecord) / sizeof(u32)) - 1; i++) { - checksum += ((u32 *)&gSaveBlock2.filler_A8.var_A8)[i]; + checksum += ((u32 *)&gSaveBlock2.battleTower.playerRecord)[i]; } - if (gSaveBlock2.filler_A8.var_A8.checksum != checksum) + if (gSaveBlock2.battleTower.playerRecord.checksum != checksum) { - ClearBattleTowerRecord(&gSaveBlock2.filler_A8.var_A8); + ClearBattleTowerRecord(&gSaveBlock2.battleTower.playerRecord); } for (recordIndex = 0; recordIndex < 5; recordIndex++) { - record = &gSaveBlock2.filler_A8.var_14C[recordIndex]; + record = &gSaveBlock2.battleTower.records[recordIndex]; checksum = 0; for (i = 0; i < (sizeof(struct BattleTowerRecord) / sizeof(u32)) - 1; i++) { checksum += ((u32 *)record)[i]; } - if (gSaveBlock2.filler_A8.var_14C[recordIndex].checksum != checksum) + if (gSaveBlock2.battleTower.records[recordIndex].checksum != checksum) { - ClearBattleTowerRecord(&gSaveBlock2.filler_A8.var_14C[recordIndex]); + ClearBattleTowerRecord(&gSaveBlock2.battleTower.records[recordIndex]); } } } @@ -2611,19 +2611,19 @@ void sub_8135CFC(void) { s32 i; - get_trainer_name(gSaveBlock2.filler_A8.defeatedByTrainerName); - gSaveBlock2.filler_A8.defeatedBySpecies = gBattleMons[1].species; - gSaveBlock2.filler_A8.firstMonSpecies = gBattleMons[0].species; + get_trainer_name(gSaveBlock2.battleTower.defeatedByTrainerName); + gSaveBlock2.battleTower.defeatedBySpecies = gBattleMons[1].species; + gSaveBlock2.battleTower.firstMonSpecies = gBattleMons[0].species; for (i = 0; i < POKEMON_NAME_LENGTH; i++) { - gSaveBlock2.filler_A8.firstMonNickname[i] = gBattleMons[0].nickname[i]; + gSaveBlock2.battleTower.firstMonNickname[i] = gBattleMons[0].nickname[i]; } } u16 sub_8135D3C(u8 battleTowerLevelType) { - u16 var2 = ((gSaveBlock2.filler_A8.var_4B4[battleTowerLevelType] - 1) * 7 - 1) + gSaveBlock2.filler_A8.var_4B0[battleTowerLevelType]; + u16 var2 = ((gSaveBlock2.battleTower.curStreakChallengesCompleted[battleTowerLevelType] - 1) * 7 - 1) + gSaveBlock2.battleTower.curChallengeWins[battleTowerLevelType]; if (var2 > 9999) { @@ -2638,9 +2638,9 @@ void sub_8135D84(void) { u16 prizeItem; struct SaveBlock2 *saveBlock = &gSaveBlock2; - u8 battleTowerLevelType = saveBlock->filler_A8.battleTowerLevelType; + u8 battleTowerLevelType = saveBlock->battleTower.battleTowerLevelType; - if (saveBlock->filler_A8.var_4B4[battleTowerLevelType] - 1 > 5) + if (saveBlock->battleTower.curStreakChallengesCompleted[battleTowerLevelType] - 1 > 5) { prizeItem = LongStreakPrizes[Random() % 9]; } @@ -2649,7 +2649,7 @@ void sub_8135D84(void) prizeItem = ShortStreakPrizes[Random() % 6]; } - saveBlock->filler_A8.prizeItem = prizeItem; + saveBlock->battleTower.prizeItem = prizeItem; } #else __attribute__((naked)) @@ -2709,17 +2709,17 @@ _08135DE8: .4byte ShortStreakPrizes\n\ void sub_8135DEC(void) { - u8 battleTowerLevelType = gSaveBlock2.filler_A8.battleTowerLevelType; + u8 battleTowerLevelType = gSaveBlock2.battleTower.battleTowerLevelType; - if (AddBagItem(gSaveBlock2.filler_A8.prizeItem, 1) == TRUE) + if (AddBagItem(gSaveBlock2.battleTower.prizeItem, 1) == TRUE) { - CopyItemName(gSaveBlock2.filler_A8.prizeItem, gStringVar1); + CopyItemName(gSaveBlock2.battleTower.prizeItem, gStringVar1); gScriptResult = 1; } else { gScriptResult = 0; - gSaveBlock2.filler_A8.var_4AE[battleTowerLevelType] = 6; + gSaveBlock2.battleTower.var_4AE[battleTowerLevelType] = 6; } } @@ -2729,7 +2729,7 @@ void sub_8135E50() u32 partyIndex; struct Pokemon *pokemon; u8 ribbonType; - u8 battleTowerLevelType = gSaveBlock2.filler_A8.battleTowerLevelType; + u8 battleTowerLevelType = gSaveBlock2.battleTower.battleTowerLevelType; ribbonType = MON_DATA_WINNING_RIBBON; if (battleTowerLevelType != 0) @@ -2743,7 +2743,7 @@ void sub_8135E50() { for (i = 0; i < 3; i++) { - partyIndex = gSaveBlock2.filler_A8.var_4BD[i] - 1; + partyIndex = gSaveBlock2.battleTower.selectedPartyMons[i] - 1; pokemon = &gPlayerParty[partyIndex]; if (!GetMonData(pokemon, ribbonType)) { @@ -2865,12 +2865,12 @@ _08135FB8: .4byte gPlayerParty\n\ u8 sub_8135FBC(void) { - return gTrainerClassToPicIndex[gSaveBlock2.filler_A8.ereaderTrainer.trainerClass]; + return gTrainerClassToPicIndex[gSaveBlock2.battleTower.ereaderTrainer.trainerClass]; } u8 sub_8135FD8(void) { - return gTrainerClassToNameIndex[gSaveBlock2.filler_A8.ereaderTrainer.trainerClass]; + return gTrainerClassToNameIndex[gSaveBlock2.battleTower.ereaderTrainer.trainerClass]; } void sub_8135FF4(u8 *text) @@ -2879,7 +2879,7 @@ void sub_8135FF4(u8 *text) for (i = 0; i < 7; i++) { - text[i] = gSaveBlock2.filler_A8.ereaderTrainer.name[i]; + text[i] = gSaveBlock2.battleTower.ereaderTrainer.name[i]; } text[i] = 0xFF; @@ -2892,7 +2892,7 @@ void sub_813601C(void) struct BattleTowerEReaderTrainer *ereaderTrainer; gScriptResult = 0; - ereaderTrainer = &gSaveBlock2.filler_A8.ereaderTrainer; + ereaderTrainer = &gSaveBlock2.battleTower.ereaderTrainer; checksum = 0; for (i = 0; i < sizeof(struct BattleTowerEReaderTrainer) / sizeof(u32) - 1; i++) @@ -2912,9 +2912,9 @@ void sub_813601C(void) checksum += ((u32 *)ereaderTrainer)[i]; } - if (gSaveBlock2.filler_A8.ereaderTrainer.checksum != checksum) + if (gSaveBlock2.battleTower.ereaderTrainer.checksum != checksum) { - ClearEReaderTrainer(&gSaveBlock2.filler_A8.ereaderTrainer); + ClearEReaderTrainer(&gSaveBlock2.battleTower.ereaderTrainer); gScriptResult = 1; } } @@ -2942,7 +2942,7 @@ void ClearEReaderTrainer(struct BattleTowerEReaderTrainer *ereaderTrainer) void sub_81360C0(void) { - sub_813545C(gSaveBlock2.filler_A8.ereaderTrainer.greeting.easyChat); + sub_813545C(gSaveBlock2.battleTower.ereaderTrainer.greeting.easyChat); } void sub_81360D0(void) @@ -2953,11 +2953,11 @@ void sub_81360D0(void) } else if (gBattleOutcome == BATTLE_WON) { - sub_813545C(gSaveBlock2.filler_A8.ereaderTrainer.farewellPlayerWon.easyChat); + sub_813545C(gSaveBlock2.battleTower.ereaderTrainer.farewellPlayerWon.easyChat); } else { - sub_813545C(gSaveBlock2.filler_A8.ereaderTrainer.farewellPlayerLost.easyChat); + sub_813545C(gSaveBlock2.battleTower.ereaderTrainer.farewellPlayerLost.easyChat); } } @@ -2967,14 +2967,13 @@ void sub_813610C(void) for (i = 0; i < 2; i++) { - if (gSaveBlock2.filler_A8.var_4AE[i] == 1) + if (gSaveBlock2.battleTower.var_4AE[i] == 1) { sub_80BFD20(); } } } - #if GERMAN __attribute__((naked)) u8 de_sub_81364AC(void) diff --git a/src/debug/unknown_debug_menu.c b/src/debug/unknown_debug_menu.c index 995fb38fc..9cc24fc62 100644 --- a/src/debug/unknown_debug_menu.c +++ b/src/debug/unknown_debug_menu.c @@ -42,12 +42,12 @@ static u8 sub_814A464(void) u8 sub_814A4B8(void) { - gSaveBlock2.filler_A8.var_4AE[0] = 3; - gSaveBlock2.filler_A8.var_4AE[1] = 3; - gSaveBlock2.filler_A8.var_4B4[0] = gBattleCommunication[0] + 1; - gSaveBlock2.filler_A8.var_4B4[1] = gBattleCommunication[0] + 1; - gSaveBlock2.filler_A8.var_4B0[0] = 1; - gSaveBlock2.filler_A8.var_4B0[1] = 1; + gSaveBlock2.battleTower.var_4AE[0] = 3; + gSaveBlock2.battleTower.var_4AE[1] = 3; + gSaveBlock2.battleTower.curStreakChallengesCompleted[0] = gBattleCommunication[0] + 1; + gSaveBlock2.battleTower.curStreakChallengesCompleted[1] = gBattleCommunication[0] + 1; + gSaveBlock2.battleTower.curChallengeWins[0] = 1; + gSaveBlock2.battleTower.curChallengeWins[1] = 1; CloseMenu(); return 1; } diff --git a/src/engine/mystery_event_script.c b/src/engine/mystery_event_script.c index c07a23262..0fb3a21cd 100644 --- a/src/engine/mystery_event_script.c +++ b/src/engine/mystery_event_script.c @@ -420,7 +420,7 @@ bool8 MEScrCmd_givepokemon(struct ScriptContext *ctx) bool8 MEScrCmd_addtrainer(struct ScriptContext *ctx) { u32 data = ScriptReadWord(ctx) - ctx->data[1] + ctx->data[0]; - memcpy(&gSaveBlock2.filler_A8.ereaderTrainer, (void *)data, sizeof(gSaveBlock2.filler_A8.ereaderTrainer)); + memcpy(&gSaveBlock2.battleTower.ereaderTrainer, (void *)data, sizeof(gSaveBlock2.battleTower.ereaderTrainer)); sub_813601C(); StringExpandPlaceholders(gStringVar4, gOtherText_NewTrainerInHoenn); ctx->data[2] = 2; diff --git a/src/engine/record_mixing.c b/src/engine/record_mixing.c index 000bafa4e..87fc6a81d 100644 --- a/src/engine/record_mixing.c +++ b/src/engine/record_mixing.c @@ -43,7 +43,7 @@ void *gUnknown_083D0274 = &gSaveBlock1.unknown_2ABC; void *gUnknown_083D0278 = &gSaveBlock1.mauvilleMan; void *recordMixingEasyChatPairs = &gSaveBlock1.easyChatPairs; struct RecordMixingDayCareMail *gUnknown_083D0280 = &gUnknown_02038738; -void *gUnknown_083D0284 = &gSaveBlock2.filler_A8; +void *gBattleTowerPlayerRecord = &gSaveBlock2.battleTower.playerRecord; #define BUFFER_CHUNK_SIZE 200 @@ -78,7 +78,7 @@ void RecordMixing_PrepareExchangePacket(void) gUnknown_02038738.mail[1] = gSaveBlock1.daycareData.misc.mail[1]; sub_8041324(gSaveBlock1.daycareData.mons, &gUnknown_02038738); memcpy(&unk_2018000.filler10AC, gUnknown_083D0280, sizeof(struct RecordMixingDayCareMail)); - memcpy(&unk_2018000.battleTowerRecord, gUnknown_083D0284, sizeof(struct BattleTowerRecord)); + memcpy(&unk_2018000.battleTowerRecord, gBattleTowerPlayerRecord, sizeof(struct BattleTowerRecord)); if (GetMultiplayerId() == 0) unk_2018000.filler11C8[0] = GetRecordMixingGift(); diff --git a/src/engine/trainer_card.c b/src/engine/trainer_card.c index 11baa65d5..3e9dadbda 100644 --- a/src/engine/trainer_card.c +++ b/src/engine/trainer_card.c @@ -352,8 +352,8 @@ void sub_8093390(struct TrainerCard *trainerCard) trainerCard->pokemonTrades = sav12_xor_get_clamped_above(GAME_STAT_POKEMON_TRADES, 0xFFFF); // Battle Tower - trainerCard->battleTowerWins = gSaveBlock2.filler_A8.totalBattleTowerWins; - trainerCard->battleTowerLosses = gSaveBlock2.filler_A8.bestBattleTowerWinStreak; + trainerCard->battleTowerWins = gSaveBlock2.battleTower.totalBattleTowerWins; + trainerCard->battleTowerLosses = gSaveBlock2.battleTower.bestBattleTowerWinStreak; if (trainerCard->battleTowerWins > 9999) { trainerCard->battleTowerWins = 9999; diff --git a/src/field/choose_party.c b/src/field/choose_party.c index 879139aa4..fd90a9199 100644 --- a/src/field/choose_party.c +++ b/src/field/choose_party.c @@ -176,7 +176,7 @@ static bool8 IsMonAllowedInBattleTower(struct Pokemon *pkmn) return TRUE; } - if ((gSaveBlock2.filler_A8.battleTowerLevelType) == 0 + if ((gSaveBlock2.battleTower.battleTowerLevelType) == 0 && GetMonData(pkmn, MON_DATA_LEVEL) > 50) return FALSE; diff --git a/src/field/tv.c b/src/field/tv.c index 1e38e79e0..fcbd734a9 100644 --- a/src/field/tv.c +++ b/src/field/tv.c @@ -674,12 +674,12 @@ void sub_80BE320(void) bravoTrainerTower->var00 = TVSHOW_BRAVO_TRAINER_BATTLE_TOWER_PROFILE; bravoTrainerTower->var01 = 1; StringCopy(bravoTrainerTower->trainerName, gSaveBlock2.playerName); - StringCopy(bravoTrainerTower->pokemonName, gSaveBlock2.filler_A8.defeatedByTrainerName); - bravoTrainerTower->species = gSaveBlock2.filler_A8.firstMonSpecies; - bravoTrainerTower->defeatedSpecies = gSaveBlock2.filler_A8.defeatedBySpecies; - bravoTrainerTower->var16 = sub_8135D3C(gSaveBlock2.filler_A8.lastStreakLevelType); - bravoTrainerTower->var1c = gSaveBlock2.filler_A8.var_4AD; - if (gSaveBlock2.filler_A8.lastStreakLevelType == 0) + StringCopy(bravoTrainerTower->pokemonName, gSaveBlock2.battleTower.defeatedByTrainerName); + bravoTrainerTower->species = gSaveBlock2.battleTower.firstMonSpecies; + bravoTrainerTower->defeatedSpecies = gSaveBlock2.battleTower.defeatedBySpecies; + bravoTrainerTower->var16 = sub_8135D3C(gSaveBlock2.battleTower.lastStreakLevelType); + bravoTrainerTower->var1c = gSaveBlock2.battleTower.battleOutcome; + if (gSaveBlock2.battleTower.lastStreakLevelType == 0) bravoTrainerTower->btLevel = 50; else bravoTrainerTower->btLevel = 100; diff --git a/src/scene/new_game.c b/src/scene/new_game.c index 6ab21c544..b15282960 100644 --- a/src/scene/new_game.c +++ b/src/scene/new_game.c @@ -92,9 +92,9 @@ void sub_8052DA8(void) gSaveBlock1.sbStruct.unkSB1.sb1_2EFC_struct[i] = gUnknown_08216604; } -void sub_8052DE4(void) +void ZeroBattleTowerData(void) { - CpuFill32(0, &gSaveBlock2.filler_A8, sizeof(gSaveBlock2.filler_A8)); + CpuFill32(0, &gSaveBlock2.battleTower, sizeof(gSaveBlock2.battleTower)); } void WarpToTruck(void) @@ -127,7 +127,7 @@ void NewGameInitData(void) ZeroPlayerPartyMons(); ZeroEnemyPartyMons(); ResetPokedex(); - sub_8052DE4(); + ZeroBattleTowerData(); memset(&gSaveBlock1, 0, sizeof(gSaveBlock1)); ClearMailData(); gSaveBlock2.specialSaveWarp = 0; -- cgit v1.2.3 From f9282b737e5ac72ad9e946e6bf5441852abad0f8 Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Sun, 29 Oct 2017 02:06:11 -0400 Subject: use BAD_MEMSET macro for battle files. --- src/battle/battle_2.c | 36 ++++++++--------------------- src/battle/battle_ai.c | 21 +++++++++-------- src/battle/battle_controller_linkopponent.c | 15 +++++------- src/battle/battle_controller_linkpartner.c | 14 ++++------- src/battle/battle_controller_opponent.c | 21 +++++++---------- src/battle/battle_controller_player.c | 24 ++++++++----------- src/battle/battle_controller_wally.c | 8 ++----- 7 files changed, 52 insertions(+), 87 deletions(-) (limited to 'src') diff --git a/src/battle/battle_2.c b/src/battle/battle_2.c index ecd0c677d..e6bad0d6b 100644 --- a/src/battle/battle_2.c +++ b/src/battle/battle_2.c @@ -1375,6 +1375,7 @@ void sub_8010384(struct Sprite *sprite) void sub_8010494(struct Sprite *sprite) { s32 i; + u8 *dst; sprite->data4--; if (sprite->data4 == 0) @@ -1389,8 +1390,8 @@ void sub_8010494(struct Sprite *sprite) } else { - u8 *dst = (u8 *)gUnknown_081FAF4C[GetBankIdentity(sprite->data0)] + (gBattleMonForms[sprite->data0] << 11) + (sprite->data3 << 8); - + // this should use a BAD_MEMSET, but *(dst++) wont match with it. + dst = (u8 *)gUnknown_081FAF4C[GetBankIdentity(sprite->data0)] + (gBattleMonForms[sprite->data0] << 11) + (sprite->data3 << 8); for (i = 0; i < 0x100; i++) *(dst++) = 0; StartSpriteAnim(sprite, gBattleMonForms[sprite->data0]); @@ -1567,10 +1568,7 @@ void sub_8010874(void) { gStatuses3[i] = 0; - r4 = (u8 *)&gDisableStructs[i]; - for (j = 0; j < (u32)0x1C; j++) - r4[j] = 0; - + BAD_MEMSET(&gDisableStructs[i], 0, 0x1C, j, r4) gDisableStructs[i].isFirstTurn= 2; gUnknown_02024C70[i] = 0; gLastUsedMove[i] = 0; @@ -1586,19 +1584,14 @@ void sub_8010874(void) for (i = 0; i < 2; i++) { gSideAffecting[i] = 0; - - r4 = (u8 *)&gSideTimer[i]; - for (j = 0; j < 12; j++) - r4[j] = 0; + BAD_MEMSET(&gSideTimer[i], 0, 12, j, r4) } gBankAttacker = 0; gBankTarget = 0; gBattleWeather = 0; - r4 = (u8 *)&gWishFutureKnock; - for (i = 0; i < (u32)0x2C; i++) - r4[i] = 0; + BAD_MEMSET(&gWishFutureKnock, 0, 0x2C, i, r4) gHitMarker = 0; if ((gBattleTypeFlags & BATTLE_TYPE_LINK) == 0 && gSaveBlock2.optionsBattleSceneOff == TRUE) @@ -1721,9 +1714,7 @@ void SwitchInClearStructs(void) gActionSelectionCursor[gActiveBank] = 0; gMoveSelectionCursor[gActiveBank] = 0; - ptr = (u8 *)&gDisableStructs[gActiveBank]; - for (i = 0; i < (u32)0x1C; i++) - ptr[i] = 0; + BAD_MEMSET(&gDisableStructs[gActiveBank], 0, 0x1C, i, ptr) if (gBattleMoves[gCurrentMove].effect == EFFECT_BATON_PASS) { @@ -1778,9 +1769,7 @@ void UndoEffectsAfterFainting(void) gActionSelectionCursor[gActiveBank] = 0; gMoveSelectionCursor[gActiveBank] = 0; - ptr = (u8 *)&gDisableStructs[gActiveBank]; - for (i = 0; i < (u32)0x1C; i++) - ptr[i] = 0; + BAD_MEMSET(&gDisableStructs[gActiveBank], 0, 0x1C, i, ptr) gProtectStructs[gActiveBank].protected = 0; gProtectStructs[gActiveBank].endured = 0; gProtectStructs[gActiveBank].onlyStruggle = 0; @@ -1873,18 +1862,13 @@ void sub_8011384(void) if ((gBattleTypeFlags & BATTLE_TYPE_SAFARI) && GetBankSide(gActiveBank) == 0) { - ptr = (u8 *)&gBattleMons[gActiveBank]; - for (i = 0; i < (u32)0x58; i++) - ptr[i] = 0; + BAD_MEMSET(&gBattleMons[gActiveBank], 0, 0x58, i, ptr) } else { u8 r0; - ptr = (u8 *)&gBattleMons[gActiveBank]; - for (i = 0; i < (u32)0x58; i++) - ptr[i] = gBattleBufferB[gActiveBank][4 + i]; - + BAD_MEMSET(&gBattleMons[gActiveBank], gBattleBufferB[gActiveBank][4 + i], 0x58, i, ptr) gBattleMons[gActiveBank].type1 = gBaseStats[gBattleMons[gActiveBank].species].type1; gBattleMons[gActiveBank].type2 = gBaseStats[gBattleMons[gActiveBank].species].type2; gBattleMons[gActiveBank].ability = GetAbilityBySpecies(gBattleMons[gActiveBank].species, gBattleMons[gActiveBank].altAbility); diff --git a/src/battle/battle_ai.c b/src/battle/battle_ai.c index 1869bbe36..a8bd7aa19 100644 --- a/src/battle/battle_ai.c +++ b/src/battle/battle_ai.c @@ -267,10 +267,9 @@ const u16 sDiscouragedPowerfulMoveEffects[] = void BattleAI_HandleItemUseBeforeAISetup(void) { s32 i; - u8 *data = (u8 *)UNK_2016A00_STRUCT; + u8 *data; - for (i = 0; (u32)i < sizeof(struct UnkBattleStruct1); i++) - data[i] = 0; + BAD_MEMSET(UNK_2016A00_STRUCT, 0, sizeof(struct UnkBattleStruct1), i, data) if ((gBattleTypeFlags & BATTLE_TYPE_TRAINER) && gTrainerBattleOpponent != 0x400 @@ -292,21 +291,23 @@ void BattleAI_HandleItemUseBeforeAISetup(void) void BattleAI_SetupAIData(void) { s32 i; - u8 *data = (u8 *)AI_THINKING_STRUCT; - u8 r7; + u8 limitations; + u8 *data; // clear AI data and set default move score to 100. strange that they didn't use memset here. - for (i = 0; (u32)i < sizeof(struct AI_ThinkingStruct); i++) - data[i] = 0; + BAD_MEMSET(AI_THINKING_STRUCT, 0, sizeof(struct AI_ThinkingStruct), i, data) + for (i = 0; i < MAX_MON_MOVES; i++) AI_THINKING_STRUCT->score[i] = 100; - r7 = CheckMoveLimitations(gActiveBank, 0, 0xFF); + limitations = CheckMoveLimitations(gActiveBank, 0, 0xFF); - // probably sets up the moves to consider and ignores non-valid moves such as NO_MOVE or glitch moves. + // do not consider moves the AI cannot select + // also, roll simulated RNG for moves that have a degree of + // randomness. for (i = 0; i < MAX_MON_MOVES; i++) { - if (gBitTable[i] & r7) + if (gBitTable[i] & limitations) AI_THINKING_STRUCT->score[i] = 0; AI_THINKING_STRUCT->simulatedRNG[i] = 100 - (Random() % 16); diff --git a/src/battle/battle_controller_linkopponent.c b/src/battle/battle_controller_linkopponent.c index f2b11ae3d..4845988e8 100644 --- a/src/battle/battle_controller_linkopponent.c +++ b/src/battle/battle_controller_linkopponent.c @@ -637,9 +637,8 @@ u32 dp01_getattr_by_ch1_for_player_pokemon__(u8 a, u8 *buffer) GetMonData(&gEnemyParty[a], MON_DATA_NICKNAME, nickname); StringCopy10(battlePokemon.nickname, nickname); GetMonData(&gEnemyParty[a], MON_DATA_OT_NAME, battlePokemon.otName); - src = (u8 *)&battlePokemon; - for (size = 0; size < sizeof(battlePokemon); size++) - buffer[size] = src[size]; + + BAD_MEMSET_REVERSE(&battlePokemon, buffer, sizeof(battlePokemon), size, src) break; case 1: data16 = GetMonData(&gEnemyParty[a], MON_DATA_SPECIES); @@ -660,9 +659,7 @@ u32 dp01_getattr_by_ch1_for_player_pokemon__(u8 a, u8 *buffer) moveData.pp[size] = GetMonData(&gEnemyParty[a], MON_DATA_PP1 + size); } moveData.ppBonuses = GetMonData(&gEnemyParty[a], MON_DATA_PP_BONUSES); - src = (u8 *)&moveData; - for (size = 0; size < sizeof(moveData); size++) - buffer[size] = src[size]; + BAD_MEMSET_REVERSE(&moveData, buffer, sizeof(moveData), size, src) break; case 4: case 5: @@ -1145,9 +1142,9 @@ void LinkOpponentHandlecmd3(void) u8 *dst; u8 i; - dst = (u8 *)&gEnemyParty[gBattlePartyID[gActiveBank]] + gBattleBufferA[gActiveBank][1]; - for (i = 0; i < gBattleBufferA[gActiveBank][2]; i++) - dst[i] = gBattleBufferA[gActiveBank][3 + i]; + BAD_MEMSET(&gEnemyParty[gBattlePartyID[gActiveBank]] + gBattleBufferA[gActiveBank][1], + gBattleBufferA[gActiveBank][3 + i], gBattleBufferA[gActiveBank][2], i, dst) + LinkOpponentBufferExecCompleted(); } diff --git a/src/battle/battle_controller_linkpartner.c b/src/battle/battle_controller_linkpartner.c index 60e9599f8..6d7c3115f 100644 --- a/src/battle/battle_controller_linkpartner.c +++ b/src/battle/battle_controller_linkpartner.c @@ -593,9 +593,7 @@ u32 dp01_getattr_by_ch1_for_player_pokemon(u8 a, u8 *buffer) GetMonData(&gPlayerParty[a], MON_DATA_NICKNAME, nickname); StringCopy10(battlePokemon.nickname, nickname); GetMonData(&gPlayerParty[a], MON_DATA_OT_NAME, battlePokemon.otName); - src = (u8 *)&battlePokemon; - for (size = 0; size < sizeof(battlePokemon); size++) - buffer[size] = src[size]; + BAD_MEMSET_REVERSE(&battlePokemon, buffer, sizeof(battlePokemon), size, src) break; case 1: data16 = GetMonData(&gPlayerParty[a], MON_DATA_SPECIES); @@ -616,9 +614,7 @@ u32 dp01_getattr_by_ch1_for_player_pokemon(u8 a, u8 *buffer) moveData.pp[size] = GetMonData(&gPlayerParty[a], MON_DATA_PP1 + size); } moveData.ppBonuses = GetMonData(&gPlayerParty[a], MON_DATA_PP_BONUSES); - src = (u8 *)&moveData; - for (size = 0; size < sizeof(moveData); size++) - buffer[size] = src[size]; + BAD_MEMSET_REVERSE(&moveData, buffer, sizeof(moveData), size, src) break; case 4: case 5: @@ -1103,9 +1099,9 @@ void LinkPartnerHandlecmd3(void) u8 *dst; u8 i; - dst = (u8 *)&gPlayerParty[gBattlePartyID[gActiveBank]] + gBattleBufferA[gActiveBank][1]; - for (i = 0; i < gBattleBufferA[gActiveBank][2]; i++) - dst[i] = gBattleBufferA[gActiveBank][3 + i]; + BAD_MEMSET(&gPlayerParty[gBattlePartyID[gActiveBank]] + gBattleBufferA[gActiveBank][1], + gBattleBufferA[gActiveBank][3 + i], gBattleBufferA[gActiveBank][2], i, dst) + LinkPartnerBufferExecCompleted(); } diff --git a/src/battle/battle_controller_opponent.c b/src/battle/battle_controller_opponent.c index 85c0f4c52..8ad4075e5 100644 --- a/src/battle/battle_controller_opponent.c +++ b/src/battle/battle_controller_opponent.c @@ -601,9 +601,7 @@ u32 sub_8033598(u8 a, u8 *buffer) GetMonData(&gEnemyParty[a], MON_DATA_NICKNAME, nickname); StringCopy10(battlePokemon.nickname, nickname); GetMonData(&gEnemyParty[a], MON_DATA_OT_NAME, battlePokemon.otName); - src = (u8 *)&battlePokemon; - for (size = 0; size < sizeof(battlePokemon); size++) - buffer[size] = src[size]; + BAD_MEMSET_REVERSE(&battlePokemon, buffer, sizeof(battlePokemon), size, src) break; case 1: data16 = GetMonData(&gEnemyParty[a], MON_DATA_SPECIES); @@ -624,9 +622,7 @@ u32 sub_8033598(u8 a, u8 *buffer) moveData.pp[size] = GetMonData(&gEnemyParty[a], MON_DATA_PP1 + size); } moveData.ppBonuses = GetMonData(&gEnemyParty[a], MON_DATA_PP_BONUSES); - src = (u8 *)&moveData; - for (size = 0; size < sizeof(moveData); size++) - buffer[size] = src[size]; + BAD_MEMSET_REVERSE(&moveData, buffer, sizeof(moveData), size, src) break; case 4: case 5: @@ -864,12 +860,12 @@ u32 sub_8033598(u8 a, u8 *buffer) void OpponentHandlecmd1(void) { struct BattlePokemon buffer; - u8 *src = (u8 *)&gEnemyParty[gBattlePartyID[gActiveBank]] + gBattleBufferA[gActiveBank][1]; - u8 *dst = (u8 *)&buffer + gBattleBufferA[gActiveBank][1]; u8 i; + // TODO: Maybe fix this. Integrating this into BAD_MEMSET is too hard. + u8 *src = (u8 *)&gEnemyParty[gBattlePartyID[gActiveBank]] + gBattleBufferA[gActiveBank][1]; + u8 *dst; - for (i = 0; i < gBattleBufferA[gActiveBank][2]; i++) - dst[i] = src[i]; + BAD_MEMSET(&buffer + gBattleBufferA[gActiveBank][1], src[i], gBattleBufferA[gActiveBank][2], i, dst) Emitcmd29(1, gBattleBufferA[gActiveBank][2], dst); OpponentBufferExecCompleted(); } @@ -1117,9 +1113,8 @@ void OpponentHandlecmd3(void) u8 *dst; u8 i; - dst = (u8 *)&gEnemyParty[gBattlePartyID[gActiveBank]] + gBattleBufferA[gActiveBank][1]; - for (i = 0; i < gBattleBufferA[gActiveBank][2]; i++) - dst[i] = gBattleBufferA[gActiveBank][3 + i]; + BAD_MEMSET(&gEnemyParty[gBattlePartyID[gActiveBank]] + gBattleBufferA[gActiveBank][1], gBattleBufferA[gActiveBank][3 + i], + gBattleBufferA[gActiveBank][2], i, dst) OpponentBufferExecCompleted(); } diff --git a/src/battle/battle_controller_player.c b/src/battle/battle_controller_player.c index ad266d415..423d036df 100644 --- a/src/battle/battle_controller_player.c +++ b/src/battle/battle_controller_player.c @@ -1773,9 +1773,7 @@ u32 dp01_getattr_by_ch1_for_player_pokemon_(u8 a, u8 *buffer) GetMonData(&gPlayerParty[a], MON_DATA_NICKNAME, nickname); StringCopy10(battlePokemon.nickname, nickname); GetMonData(&gPlayerParty[a], MON_DATA_OT_NAME, battlePokemon.otName); - src = (u8 *)&battlePokemon; - for (size = 0; size < sizeof(battlePokemon); size++) - buffer[size] = src[size]; + BAD_MEMSET_REVERSE(&battlePokemon, buffer, sizeof(battlePokemon), size, src) break; case 1: data16 = GetMonData(&gPlayerParty[a], MON_DATA_SPECIES); @@ -1796,9 +1794,7 @@ u32 dp01_getattr_by_ch1_for_player_pokemon_(u8 a, u8 *buffer) moveData.pp[size] = GetMonData(&gPlayerParty[a], MON_DATA_PP1 + size); } moveData.ppBonuses = GetMonData(&gPlayerParty[a], MON_DATA_PP_BONUSES); - src = (u8 *)&moveData; - for (size = 0; size < sizeof(moveData); size++) - buffer[size] = src[size]; + BAD_MEMSET_REVERSE(&moveData, buffer, sizeof(moveData), size, src) break; case 4: case 5: @@ -2035,13 +2031,13 @@ u32 dp01_getattr_by_ch1_for_player_pokemon_(u8 a, u8 *buffer) void PlayerHandlecmd1(void) { - struct BattlePokemon battleMon; // I think this is a BattlePokemon - u8 *src = (u8 *)&gPlayerParty[gBattlePartyID[gActiveBank]] + gBattleBufferA[gActiveBank][1]; - u8 *dst = (u8 *)&battleMon + gBattleBufferA[gActiveBank][1]; + struct BattlePokemon battleMon; u8 i; + // TODO: Maybe fix this. Integrating this into BAD_MEMSET is too hard. + u8 *src = (u8 *)&gPlayerParty[gBattlePartyID[gActiveBank]] + gBattleBufferA[gActiveBank][1]; + u8 *dst; - for (i = 0; i < gBattleBufferA[gActiveBank][2]; i++) - dst[i] = src[i]; + BAD_MEMSET(&battleMon + gBattleBufferA[gActiveBank][1], src[i], gBattleBufferA[gActiveBank][2], i, dst) Emitcmd29(1, gBattleBufferA[gActiveBank][2], dst); PlayerBufferExecCompleted(); } @@ -2288,11 +2284,11 @@ void dp01_setattr_by_ch1_for_player_pokemon(u8 a) void PlayerHandlecmd3(void) { - u8 *dst = (u8 *)&gPlayerParty[gBattlePartyID[gActiveBank]] + gBattleBufferA[gActiveBank][1]; u8 i; + u8 *dst; - for (i = 0; i < gBattleBufferA[gActiveBank][2]; i++) - dst[i] = gBattleBufferA[gActiveBank][3 + i]; + BAD_MEMSET(&gPlayerParty[gBattlePartyID[gActiveBank]] + gBattleBufferA[gActiveBank][1], gBattleBufferA[gActiveBank][3 + i], + gBattleBufferA[gActiveBank][2], i, dst) PlayerBufferExecCompleted(); } diff --git a/src/battle/battle_controller_wally.c b/src/battle/battle_controller_wally.c index cd371bc6f..838e99c83 100644 --- a/src/battle/battle_controller_wally.c +++ b/src/battle/battle_controller_wally.c @@ -569,9 +569,7 @@ u32 sub_8137A84(u8 a, u8 *buffer) GetMonData(&gPlayerParty[a], MON_DATA_NICKNAME, nickname); StringCopy10(battlePokemon.nickname, nickname); GetMonData(&gPlayerParty[a], MON_DATA_OT_NAME, battlePokemon.otName); - src = (u8 *)&battlePokemon; - for (size = 0; size < sizeof(battlePokemon); size++) - buffer[size] = src[size]; + BAD_MEMSET_REVERSE(&battlePokemon, buffer, sizeof(battlePokemon), size, src) break; case 1: data16 = GetMonData(&gPlayerParty[a], MON_DATA_SPECIES); @@ -592,9 +590,7 @@ u32 sub_8137A84(u8 a, u8 *buffer) moveData.pp[size] = GetMonData(&gPlayerParty[a], MON_DATA_PP1 + size); } moveData.ppBonuses = GetMonData(&gPlayerParty[a], MON_DATA_PP_BONUSES); - src = (u8 *)&moveData; - for (size = 0; size < sizeof(moveData); size++) - buffer[size] = src[size]; + BAD_MEMSET_REVERSE(&moveData, buffer, sizeof(moveData), size, src) break; case 4: case 5: -- cgit v1.2.3 From e08f3e4398d6c1dc21437e7b6462521ecfd299a6 Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Sun, 29 Oct 2017 02:22:10 -0400 Subject: change SetMonData and SetBoxMonData prototypes --- src/pokemon/pokemon_2.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/pokemon/pokemon_2.c b/src/pokemon/pokemon_2.c index 72d41c7a6..d3bdf3a13 100644 --- a/src/pokemon/pokemon_2.c +++ b/src/pokemon/pokemon_2.c @@ -631,9 +631,8 @@ u32 GetBoxMonData(struct BoxPokemon *boxMon, s32 field, u8 *data) #define SET16(lhs) (lhs) = data[0] + (data[1] << 8) #define SET32(lhs) (lhs) = data[0] + (data[1] << 8) + (data[2] << 16) + (data[3] << 24) -void SetMonData(struct Pokemon *mon, s32 field, const void *dataArg) +void SetMonData(struct Pokemon *mon, s32 field, const u8 *data) { - u8 *data = (u8 *)dataArg; switch (field) { case MON_DATA_STATUS: @@ -674,9 +673,8 @@ void SetMonData(struct Pokemon *mon, s32 field, const void *dataArg) } } -void SetBoxMonData(struct BoxPokemon *boxMon, s32 field, const void *dataArg) +void SetBoxMonData(struct BoxPokemon *boxMon, s32 field, const u8 *data) { - u8 *data = (u8 *)dataArg; struct PokemonSubstruct0 *substruct0 = NULL; struct PokemonSubstruct1 *substruct1 = NULL; struct PokemonSubstruct2 *substruct2 = NULL; @@ -1079,14 +1077,15 @@ void CreateSecretBaseEnemyParty(struct SecretBaseRecord *secretBaseRecord) 2, 0); - SetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, &gSecretBaseRecord.partyHeldItems[i]); + // these two SetMonData calls require the (u8 *) cast since SetMonData is declared in this function. + SetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, (u8 *)&gSecretBaseRecord.partyHeldItems[i]); for (j = 0; j < 6; j++) SetMonData(&gEnemyParty[i], MON_DATA_HP_EV + j, &gSecretBaseRecord.partyEVs[i]); for (j = 0; j < 4; j++) { - SetMonData(&gEnemyParty[i], MON_DATA_MOVE1 + j, &gSecretBaseRecord.partyMoves[i * 4 + j]); + SetMonData(&gEnemyParty[i], MON_DATA_MOVE1 + j, (u8 *)&gSecretBaseRecord.partyMoves[i * 4 + j]); SetMonData(&gEnemyParty[i], MON_DATA_PP1 + j, &gBattleMoves[gSecretBaseRecord.partyMoves[i * 4 + j]].pp); } } -- cgit v1.2.3 From fc786f80fd10732d23759e7c647f15406a5162d0 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Sun, 29 Oct 2017 16:51:25 -0700 Subject: Decompile a few nonmatchings in battle_tower --- src/battle_tower.c | 758 +++++++++++++---------------------------------------- 1 file changed, 187 insertions(+), 571 deletions(-) (limited to 'src') diff --git a/src/battle_tower.c b/src/battle_tower.c index f799168f6..d1c62d21e 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -245,6 +245,9 @@ const u16 LongStreakPrizes[] = { ITEM_CHOICE_BAND, }; +extern const u8 gUnknown_08400E2C[]; +extern const u8 gUnknown_08400E32[]; +extern const u8 gUnknown_08400E36[]; extern void sub_81360D0(void); extern u16 gSpecialVar_0x8004; extern u8 gUnknown_08400E23[]; @@ -265,6 +268,7 @@ extern void ValidateBattleTowerRecordChecksums(void); extern void sub_81349FC(u8); extern void sub_8135A3C(void); extern void sub_8135CFC(void); +extern void CheckMonBattleTowerBanlist(u16, u16, u16, u8, u8, u16 *, u16 *, u8 *); static void ClearEReaderTrainer(struct BattleTowerEReaderTrainer *); //static void SetEReaderTrainerChecksum(struct BattleTowerEReaderTrainer *ereaderTrainer); static void SetBattleTowerRecordChecksum(struct BattleTowerRecord *); @@ -329,287 +333,105 @@ void sub_813461C(u8 levelType) gSaveBlock2.battleTower.curStreakChallengesCompleted[levelType] = 1; } -// u8 sub_8134650(u8 levelType, u16 b) -// { -// u8 trainerTeamLevel; -// s32 i; -// u32 numValid = 0; +u8 sub_8134650(u8 levelType, u16 b) +{ + u8 trainerTeamLevel; + u8 monLevel; + s32 i; + u16 validPartySpecies[6]; + u16 validPartyHeldItems[6]; + u8 numValid; -// sub_813601C(); + numValid = 0; -// if (gScriptResult || gSaveBlock2.battleTower.ereaderTrainer.unk2 != b) -// { -// return 0; -// } + sub_813601C(); -// trainerTeamLevel = 50; -// if (levelType != 0) -// { -// trainerTeamLevel = 100; -// } + if (gScriptResult != 0 || gSaveBlock2.battleTower.ereaderTrainer.var_2 != b) + { + return 0; + } -// for (i = 0; i < 3; i++) -// { -// if (!gSaveBlock2.battleTower.ereaderTrainer.party[i].level != trainerTeamLevel) -// { -// return 0; -// } + trainerTeamLevel = 50; + if (levelType != 0) + { + trainerTeamLevel = 100; + } -// CheckMonBattleTowerBanlist(gSaveBlock2.battleTower.ereaderTrainer.party[i].unk0, gSaveBlock2.battleTower.ereaderTrainer.party[i].unk2, 1, levelType, &numValid); -// } + for (i = 0; i < 3; i++) + { + monLevel = gSaveBlock2.battleTower.ereaderTrainer.party[i].level; + if (gSaveBlock2.battleTower.ereaderTrainer.party[i].level != trainerTeamLevel) + { + return 0; + } -// return numValid == 3; -// } + CheckMonBattleTowerBanlist( + gSaveBlock2.battleTower.ereaderTrainer.party[i].species, + gSaveBlock2.battleTower.ereaderTrainer.party[i].heldItem, + 1, + levelType, + monLevel, + validPartySpecies, + validPartyHeldItems, + &numValid); + } -__attribute__((naked)) -u8 sub_8134650(u8 levelType, u16 b) -{ - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r8\n\ - push {r7}\n\ - sub sp, 0x2C\n\ - lsls r0, 24\n\ - lsrs r5, r0, 24\n\ - lsls r1, 16\n\ - lsrs r6, r1, 16\n\ - add r4, sp, 0x28\n\ - movs r0, 0\n\ - strb r0, [r4]\n\ - bl sub_813601C\n\ - ldr r0, _08134684 @ =gScriptResult\n\ - ldrh r0, [r0]\n\ - adds r7, r4, 0\n\ - cmp r0, 0\n\ - bne _08134680\n\ - ldr r1, _08134688 @ =gSaveBlock2\n\ - ldr r2, _0813468C @ =0x0000049a\n\ - adds r0, r1, r2\n\ - ldrh r0, [r0]\n\ - cmp r0, r6\n\ - beq _08134690\n\ -_08134680:\n\ - movs r0, 0\n\ - b _081346E2\n\ - .align 2, 0\n\ -_08134684: .4byte gScriptResult\n\ -_08134688: .4byte gSaveBlock2\n\ -_0813468C: .4byte 0x0000049a\n\ -_08134690:\n\ - movs r6, 0x32\n\ - cmp r5, 0\n\ - beq _08134698\n\ - movs r6, 0x64\n\ -_08134698:\n\ - movs r4, 0\n\ - mov r8, r1\n\ -_0813469C:\n\ - movs r0, 0x2C\n\ - muls r0, r4\n\ - mov r3, r8\n\ - adds r1, r0, r3\n\ - movs r2, 0x9B\n\ - lsls r2, 3\n\ - adds r0, r1, r2\n\ - ldrb r2, [r0]\n\ - cmp r2, r6\n\ - bne _08134680\n\ - ldr r3, _081346F0 @ =0x000004cc\n\ - adds r0, r1, r3\n\ - ldrh r0, [r0]\n\ - adds r3, 0x2\n\ - adds r1, r3\n\ - ldrh r1, [r1]\n\ - str r2, [sp]\n\ - add r2, sp, 0x10\n\ - str r2, [sp, 0x4]\n\ - add r2, sp, 0x1C\n\ - str r2, [sp, 0x8]\n\ - str r7, [sp, 0xC]\n\ - movs r2, 0x1\n\ - adds r3, r5, 0\n\ - bl CheckMonBattleTowerBanlist\n\ - adds r4, 0x1\n\ - cmp r4, 0x2\n\ - ble _0813469C\n\ - movs r1, 0\n\ - ldrb r0, [r7]\n\ - cmp r0, 0x3\n\ - bne _081346E0\n\ - movs r1, 0x1\n\ -_081346E0:\n\ - adds r0, r1, 0\n\ -_081346E2:\n\ - add sp, 0x2C\n\ - pop {r3}\n\ - mov r8, r3\n\ - pop {r4-r7}\n\ - pop {r1}\n\ - bx r1\n\ - .align 2, 0\n\ -_081346F0: .4byte 0x000004cc\n\ -.syntax divided\n"); + return numValid == 3; } -// bool8 sub_81346F4(void) -// { -// s32 i; -// u32 j; -// u32 arr[4]; -// u16 var2 = sub_8135D3C(gSaveBlock2.battleTower.battleTowerLevelType); - -// if (sub_8134650(gSaveBlock2.battleTower.battleTowerLevelType)) -// { -// gSaveBlock2.battleTower.battleTowerTrainerId = 0xC8; -// return TRUE; -// } +bool8 sub_81346F4(void) +{ + s32 recordIndex, j; + u8 battleTowerLevelType; + u16 winStreak; + bool8 retVal; + s32 numCandidates; + u32 trainerIds[5]; + + numCandidates = 0; + battleTowerLevelType = gSaveBlock2.battleTower.battleTowerLevelType; + + winStreak = sub_8135D3C(battleTowerLevelType); + if (sub_8134650(battleTowerLevelType, winStreak)) + { + gSaveBlock2.battleTower.battleTowerTrainerId = 0xC8; + retVal = TRUE; + } + else + { + for (recordIndex = 0; recordIndex < 5; recordIndex++) + { + struct BattleTowerRecord *record = &gSaveBlock2.battleTower.records[recordIndex]; + u32 recordHasData = 0; + u32 checksum = 0; + for (j = 0; j < sizeof(struct BattleTowerRecord) / sizeof(u32) - 1; j++) + { + recordHasData |= ((u32 *)record)[j]; + checksum += ((u32 *)record)[j]; + } -// for (i = 0; i < 5; i++) -// { -// u32 var_or = 0; -// u32 var_add = 0; -// for (j = 0; j < 40; j++) -// { -// var_or |= gSaveBlock2.battleTower.var_0A4[i][j]; -// var_add += gSaveBlock2.battleTower.var_0A4[i][j]; -// } + if (gSaveBlock2.battleTower.records[recordIndex].var_2 == winStreak + && gSaveBlock2.battleTower.records[recordIndex].var_0 == battleTowerLevelType + && recordHasData + && gSaveBlock2.battleTower.records[recordIndex].checksum == checksum) + { + trainerIds[numCandidates] = recordIndex; + numCandidates++; + } + } - -// } -// } + if (numCandidates == 0) + { + retVal = FALSE; + } + else + { + gSaveBlock2.battleTower.battleTowerTrainerId = trainerIds[Random() % numCandidates] + 100; + retVal = TRUE; + } + } -__attribute__((naked)) -bool8 sub_81346F4(void) -{ - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r10\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5-r7}\n\ - sub sp, 0x18\n\ - movs r0, 0\n\ - mov r9, r0\n\ - ldr r4, _08134738 @ =gSaveBlock2\n\ - ldr r1, _0813473C @ =0x00000554\n\ - adds r0, r4, r1\n\ - ldrb r0, [r0]\n\ - lsls r0, 31\n\ - lsrs r7, r0, 31\n\ - adds r0, r7, 0\n\ - bl sub_8135D3C\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - mov r8, r0\n\ - adds r0, r7, 0\n\ - mov r1, r8\n\ - bl sub_8134650\n\ - lsls r0, 24\n\ - adds r1, r4, 0\n\ - cmp r0, 0\n\ - beq _08134744\n\ - ldr r2, _08134740 @ =0x00000564\n\ - adds r1, r2\n\ - movs r0, 0xC8\n\ - strb r0, [r1]\n\ - b _081347DE\n\ - .align 2, 0\n\ -_08134738: .4byte gSaveBlock2\n\ -_0813473C: .4byte 0x00000554\n\ -_08134740: .4byte 0x00000564\n\ -_08134744:\n\ - movs r5, 0\n\ - movs r3, 0xA4\n\ - mov r12, r3\n\ - mov r10, sp\n\ -_0813474C:\n\ - mov r0, r12\n\ - muls r0, r5\n\ - movs r4, 0\n\ - movs r1, 0\n\ - movs r2, 0\n\ - adds r6, r5, 0x1\n\ - str r6, [sp, 0x14]\n\ - ldr r6, _081347B4 @ =gSaveBlock2 + 0x14C\n\ - adds r3, r0, r6\n\ -_0813475E:\n\ - ldm r3!, {r0}\n\ - orrs r4, r0\n\ - adds r1, r0\n\ - adds r2, 0x1\n\ - cmp r2, 0x27\n\ - bls _0813475E\n\ - mov r3, r12\n\ - muls r3, r5\n\ - ldr r0, _081347B8 @ =gSaveBlock2\n\ - adds r2, r3, r0\n\ - movs r6, 0xA7\n\ - lsls r6, 1\n\ - adds r0, r2, r6\n\ - ldrh r0, [r0]\n\ - cmp r0, r8\n\ - bne _081347A4\n\ - subs r6, 0x2\n\ - adds r0, r2, r6\n\ - ldrb r0, [r0]\n\ - cmp r0, r7\n\ - bne _081347A4\n\ - cmp r4, 0\n\ - beq _081347A4\n\ - ldr r2, _081347BC @ =gSaveBlock2 + 0x1EC\n\ - adds r0, r3, r2\n\ - ldr r0, [r0]\n\ - cmp r0, r1\n\ - bne _081347A4\n\ - mov r3, r10\n\ - adds r3, 0x4\n\ - mov r10, r3\n\ - subs r3, 0x4\n\ - stm r3!, {r5}\n\ - movs r6, 0x1\n\ - add r9, r6\n\ -_081347A4:\n\ - ldr r5, [sp, 0x14]\n\ - cmp r5, 0x4\n\ - ble _0813474C\n\ - mov r0, r9\n\ - cmp r0, 0\n\ - bne _081347C0\n\ - movs r0, 0\n\ - b _081347E0\n\ - .align 2, 0\n\ -_081347B4: .4byte gSaveBlock2 + 0x14C\n\ -_081347B8: .4byte gSaveBlock2\n\ -_081347BC: .4byte gSaveBlock2 + 0x1EC\n\ -_081347C0:\n\ - bl Random\n\ - ldr r4, _081347F0 @ =gSaveBlock2\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - mov r1, r9\n\ - bl __modsi3\n\ - lsls r0, 2\n\ - add r0, sp\n\ - ldr r0, [r0]\n\ - adds r0, 0x64\n\ - ldr r1, _081347F4 @ =0x00000564\n\ - adds r4, r1\n\ - strb r0, [r4]\n\ -_081347DE:\n\ - movs r0, 0x1\n\ -_081347E0:\n\ - add sp, 0x18\n\ - pop {r3-r5}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - mov r10, r5\n\ - pop {r4-r7}\n\ - pop {r1}\n\ - bx r1\n\ - .align 2, 0\n\ -_081347F0: .4byte gSaveBlock2\n\ -_081347F4: .4byte 0x00000564\n\ -.syntax divided\n"); + return retVal; } // void sub_81347F8(void) @@ -1816,310 +1638,104 @@ u8 AppendBattleTowerBannedSpeciesName(u16 species, u8 curIndexToAppend, s32 numT return curIndexToAppend; } -__attribute__((naked)) -void CheckMonBattleTowerBanlist() +void CheckMonBattleTowerBanlist(u16 species, u16 heldItem, u16 hp, u8 battleTowerLevelType, u8 monLevel, u16 *validPartySpecies, u16 *validPartyHeldItems, u8 *numValid) { - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r10\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5-r7}\n\ - ldr r2, [sp, 0x20]\n\ - ldr r4, [sp, 0x24]\n\ - mov r9, r4\n\ - ldr r4, [sp, 0x28]\n\ - mov r10, r4\n\ - ldr r7, [sp, 0x2C]\n\ - lsls r0, 16\n\ - lsrs r4, r0, 16\n\ - lsls r1, 16\n\ - lsrs r6, r1, 16\n\ - lsls r3, 24\n\ - lsrs r3, 24\n\ - mov r12, r3\n\ - lsls r2, 24\n\ - lsrs r2, 24\n\ - mov r8, r2\n\ - movs r2, 0\n\ - movs r0, 0xCE\n\ - lsls r0, 1\n\ - cmp r4, r0\n\ - beq _081352CE\n\ - cmp r4, 0\n\ - beq _081352CE\n\ - ldr r0, _081352DC @ =gBattleTowerBanlist\n\ - ldrh r1, [r0]\n\ - ldr r5, _081352E0 @ =0x0000ffff\n\ - adds r3, r0, 0\n\ - cmp r1, r5\n\ - beq _08135264\n\ - cmp r1, r4\n\ - beq _08135258\n\ - adds r1, r3, 0\n\ -_0813524A:\n\ - adds r1, 0x2\n\ - adds r2, 0x1\n\ - ldrh r0, [r1]\n\ - cmp r0, r5\n\ - beq _08135264\n\ - cmp r0, r4\n\ - bne _0813524A\n\ -_08135258:\n\ - lsls r0, r2, 1\n\ - adds r0, r3\n\ - ldrh r1, [r0]\n\ - ldr r0, _081352E0 @ =0x0000ffff\n\ - cmp r1, r0\n\ - bne _081352CE\n\ -_08135264:\n\ - mov r0, r12\n\ - cmp r0, 0\n\ - bne _08135270\n\ - mov r1, r8\n\ - cmp r1, 0x32\n\ - bhi _081352CE\n\ -_08135270:\n\ - movs r2, 0\n\ - ldrb r3, [r7]\n\ - cmp r2, r3\n\ - bge _08135290\n\ - mov r1, r9\n\ - ldrh r0, [r1]\n\ - cmp r0, r4\n\ - beq _08135290\n\ - adds r5, r3, 0\n\ -_08135282:\n\ - adds r1, 0x2\n\ - adds r2, 0x1\n\ - cmp r2, r5\n\ - bge _08135290\n\ - ldrh r0, [r1]\n\ - cmp r0, r4\n\ - bne _08135282\n\ -_08135290:\n\ - cmp r2, r3\n\ - bne _081352CE\n\ - cmp r6, 0\n\ - beq _081352BA\n\ - movs r2, 0\n\ - cmp r2, r3\n\ - bge _081352B6\n\ - mov r1, r10\n\ - ldrh r0, [r1]\n\ - cmp r0, r6\n\ - beq _081352B6\n\ - adds r5, r3, 0\n\ -_081352A8:\n\ - adds r1, 0x2\n\ - adds r2, 0x1\n\ - cmp r2, r5\n\ - bge _081352B6\n\ - ldrh r0, [r1]\n\ - cmp r0, r6\n\ - bne _081352A8\n\ -_081352B6:\n\ - cmp r2, r3\n\ - bne _081352CE\n\ -_081352BA:\n\ - lsls r0, r3, 1\n\ - add r0, r9\n\ - strh r4, [r0]\n\ - ldrb r0, [r7]\n\ - lsls r0, 1\n\ - add r0, r10\n\ - strh r6, [r0]\n\ - ldrb r0, [r7]\n\ - adds r0, 0x1\n\ - strb r0, [r7]\n\ -_081352CE:\n\ - pop {r3-r5}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - mov r10, r5\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_081352DC: .4byte gBattleTowerBanlist\n\ -_081352E0: .4byte 0x0000ffff\n\ -.syntax divided\n"); + s32 i; + u32 counter = 0; + + if (species == SPECIES_EGG || species == SPECIES_NONE) + return; + + while (1) + { + if (gBattleTowerBanlist[counter] == 0xFFFF) + goto EXIT2; + + if (gBattleTowerBanlist[counter] == species) + break; + + counter++; + } + + if (gBattleTowerBanlist[counter] != 0xFFFF) + return; + + EXIT2: + if (battleTowerLevelType == 0 && monLevel > 50) + return; + + for (i = 0; i < *numValid && validPartySpecies[i] != species ; i++); + if (i != *numValid) + return; + + if (heldItem != 0) + { + for (i = 0; i < *numValid && validPartyHeldItems[i] != heldItem ; i++); + if (i != *numValid) + return; + } + + validPartySpecies[*numValid] = species; + validPartyHeldItems[*numValid] = heldItem; + *numValid = *numValid + 1; } -__attribute__((naked)) -void CheckPartyBattleTowerBanlist() +void CheckPartyBattleTowerBanlist(void) { - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r10\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5-r7}\n\ - sub sp, 0x2C\n\ - add r1, sp, 0x28\n\ - movs r0, 0\n\ - strb r0, [r1]\n\ - movs r7, 0\n\ - mov r9, r1\n\ - add r0, sp, 0x1C\n\ - mov r10, r0\n\ -_081352FE:\n\ - movs r0, 0x64\n\ - adds r5, r7, 0\n\ - muls r5, r0\n\ - ldr r0, _081353C4 @ =gPlayerParty\n\ - adds r5, r0\n\ - adds r0, r5, 0\n\ - movs r1, 0x41\n\ - bl GetMonData\n\ - mov r8, r0\n\ - mov r1, r8\n\ - lsls r1, 16\n\ - lsrs r1, 16\n\ - mov r8, r1\n\ - adds r0, r5, 0\n\ - movs r1, 0xC\n\ - bl GetMonData\n\ - adds r6, r0, 0\n\ - lsls r6, 16\n\ - lsrs r6, 16\n\ - adds r0, r5, 0\n\ - movs r1, 0x38\n\ - bl GetMonData\n\ - adds r4, r0, 0\n\ - lsls r4, 24\n\ - lsrs r4, 24\n\ - adds r0, r5, 0\n\ - movs r1, 0x39\n\ - bl GetMonData\n\ - adds r2, r0, 0\n\ - lsls r2, 16\n\ - lsrs r2, 16\n\ - ldr r5, _081353C8 @ =gScriptResult\n\ - ldrb r3, [r5]\n\ - str r4, [sp]\n\ - add r0, sp, 0x10\n\ - str r0, [sp, 0x4]\n\ - mov r1, r10\n\ - str r1, [sp, 0x8]\n\ - mov r0, r9\n\ - str r0, [sp, 0xC]\n\ - mov r0, r8\n\ - adds r1, r6, 0\n\ - bl CheckMonBattleTowerBanlist\n\ - adds r7, 0x1\n\ - cmp r7, 0x5\n\ - ble _081352FE\n\ - mov r1, r9\n\ - ldrb r0, [r1]\n\ - cmp r0, 0x2\n\ - bhi _08135420\n\ - ldr r1, _081353CC @ =gStringVar1\n\ - movs r0, 0xFF\n\ - strb r0, [r1]\n\ - ldr r1, _081353D0 @ =gSpecialVar_0x8004\n\ - movs r0, 0x1\n\ - strh r0, [r1]\n\ - movs r0, 0\n\ - mov r1, r9\n\ - strb r0, [r1]\n\ - bl CountBattleTowerBanlistCaught\n\ - adds r6, r0, 0\n\ - ldr r2, _081353D4 @ =gBattleTowerBanlist\n\ - ldrh r0, [r2]\n\ - ldr r1, _081353D8 @ =0x0000ffff\n\ - cmp r0, r1\n\ - beq _081353A8\n\ - mov r5, r9\n\ - adds r7, r1, 0\n\ - adds r4, r2, 0\n\ -_08135394:\n\ - ldrh r0, [r4]\n\ - ldrb r1, [r5]\n\ - adds r2, r6, 0\n\ - bl AppendBattleTowerBannedSpeciesName\n\ - strb r0, [r5]\n\ - adds r4, 0x2\n\ - ldrh r0, [r4]\n\ - cmp r0, r7\n\ - bne _08135394\n\ -_081353A8:\n\ - mov r0, r9\n\ - ldrb r1, [r0]\n\ - cmp r1, 0\n\ - bne _081353E4\n\ - ldr r4, _081353CC @ =gStringVar1\n\ - ldr r1, _081353DC @ =gUnknown_08400E2C\n\ - adds r0, r4, 0\n\ - bl StringAppend\n\ - ldr r1, _081353E0 @ =gUnknown_08400E32\n\ - adds r0, r4, 0\n\ - bl StringAppend\n\ - b _0813543E\n\ - .align 2, 0\n\ -_081353C4: .4byte gPlayerParty\n\ -_081353C8: .4byte gScriptResult\n\ -_081353CC: .4byte gStringVar1\n\ -_081353D0: .4byte gSpecialVar_0x8004\n\ -_081353D4: .4byte gBattleTowerBanlist\n\ -_081353D8: .4byte 0x0000ffff\n\ -_081353DC: .4byte gUnknown_08400E2C\n\ -_081353E0: .4byte gUnknown_08400E32\n\ -_081353E4:\n\ - movs r0, 0x1\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _08135400\n\ - ldr r0, _081353F8 @ =gStringVar1\n\ - ldr r1, _081353FC @ =gUnknown_08400E2E\n\ - bl StringAppend\n\ - b _08135408\n\ - .align 2, 0\n\ -_081353F8: .4byte gStringVar1\n\ -_081353FC: .4byte gUnknown_08400E2E\n\ -_08135400:\n\ - ldr r0, _08135414 @ =gStringVar1\n\ - ldr r1, _08135418 @ =gUnknown_08400E2C\n\ - bl StringAppend\n\ -_08135408:\n\ - ldr r0, _08135414 @ =gStringVar1\n\ - ldr r1, _0813541C @ =gUnknown_08400E36\n\ - bl StringAppend\n\ - b _0813543E\n\ - .align 2, 0\n\ -_08135414: .4byte gStringVar1\n\ -_08135418: .4byte gUnknown_08400E2C\n\ -_0813541C: .4byte gUnknown_08400E36\n\ -_08135420:\n\ - ldr r1, _08135450 @ =gSpecialVar_0x8004\n\ - movs r0, 0\n\ - strh r0, [r1]\n\ - ldr r2, _08135454 @ =gSaveBlock2\n\ - ldrb r0, [r5]\n\ - ldr r1, _08135458 @ =0x00000554\n\ - adds r2, r1\n\ - movs r1, 0x1\n\ - ands r1, r0\n\ - ldrb r3, [r2]\n\ - movs r0, 0x2\n\ - negs r0, r0\n\ - ands r0, r3\n\ - orrs r0, r1\n\ - strb r0, [r2]\n\ -_0813543E:\n\ - add sp, 0x2C\n\ - pop {r3-r5}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - mov r10, r5\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_08135450: .4byte gSpecialVar_0x8004\n\ -_08135454: .4byte gSaveBlock2\n\ -_08135458: .4byte 0x00000554\n\ -.syntax divided\n"); + s32 i; + u16 species2; + u16 heldItem; + u8 level; + u16 hp; + u32 numBanlistCaught; + u16 validPartySpecies[6]; + u16 validPartyHeldItems[6]; + u8 counter; + + counter = 0; + + for (i = 0; i < PARTY_SIZE; i++) + { + species2 = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2); + heldItem = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM); + level = GetMonData(&gPlayerParty[i], MON_DATA_LEVEL); + hp = GetMonData(&gPlayerParty[i], MON_DATA_HP); + + CheckMonBattleTowerBanlist(species2, heldItem, hp, gScriptResult, level, validPartySpecies, validPartyHeldItems, &counter); + } + + if (counter < 3) + { + gStringVar1[0] = 0xFF; + gSpecialVar_0x8004 = 1; + counter = 0; + + numBanlistCaught = CountBattleTowerBanlistCaught(); + + for (i = 0; gBattleTowerBanlist[i] != 0xFFFF; i++) + { + counter = AppendBattleTowerBannedSpeciesName(gBattleTowerBanlist[i], counter, numBanlistCaught); + } + + if (counter == 0) + { + StringAppend(gStringVar1, gUnknown_08400E2C); + StringAppend(gStringVar1, gUnknown_08400E32); + return; + } + + if (1 & counter) + StringAppend(gStringVar1, gUnknown_08400E2E); + else + StringAppend(gStringVar1, gUnknown_08400E2C); + + StringAppend(gStringVar1, gUnknown_08400E36); + } + else + { + gSpecialVar_0x8004 = 0; + gSaveBlock2.battleTower.battleTowerLevelType = gScriptResult; + } } void sub_813545C(u16 *easyChat) @@ -2642,11 +2258,11 @@ void sub_8135D84(void) if (saveBlock->battleTower.curStreakChallengesCompleted[battleTowerLevelType] - 1 > 5) { - prizeItem = LongStreakPrizes[Random() % 9]; + prizeItem = LongStreakPrizes[Random() % ARRAY_COUNT(LongStreakPrizes)]; } else { - prizeItem = ShortStreakPrizes[Random() % 6]; + prizeItem = ShortStreakPrizes[Random() % ARRAY_COUNT(ShortStreakPrizes)]; } saveBlock->battleTower.prizeItem = prizeItem; -- cgit v1.2.3 From 87c0040c1adca9b41a779a89a1aaedc63849f0df Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Tue, 31 Oct 2017 23:38:46 -0700 Subject: Decompile FillBattleTowerTrainerParty() --- src/battle_tower.c | 696 ++++++++++++++++++++--------------------------------- 1 file changed, 255 insertions(+), 441 deletions(-) (limited to 'src') diff --git a/src/battle_tower.c b/src/battle_tower.c index d1c62d21e..5a335ddfa 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -816,91 +816,96 @@ void sub_8134AB4() sub_81349FC(200); } -// void sub_8134AC0(struct BattleTowerRecord *record) -// { -// u16 var1[5]; -// u16 var2[5]; -// s32 i, j, k; -// s16 l = 0; - -// for (i = 0; i < 5; i++) -// { -// k = 0; -// for (j = 0; j < 4 && gSaveBlock2.battleTower.records[i].var_C[i] != record->var_C[j]; j++); -// if (j == 4) -// { -// for (k = 0; k < 7 && gSaveBlock2.battleTower.records[i].var_8 == record->var_8; k++) -// { -// if (record->var_8 == 0xFF) -// { -// k = 7; -// break; -// } -// } -// } +#ifdef NONMATCHING +void sub_8134AC0(struct BattleTowerRecord *record) +{ + u16 var1[6]; + u16 var2[6]; + s32 i, j, k; + s16 l = 0; -// if (k == 7) -// { -// break; -// } -// } + for (i = 0; i < 5; i++) + { + k = 0; + for (j = 0; j < 4 && gSaveBlock2.battleTower.records[i].trainerId[j] == record->trainerId[j]; j++); + if (j == 4) + { + for (; k < 7 && gSaveBlock2.battleTower.records[i].name[4] == record->name[4]; k++) + { + if (record->name[4] == 0xFF) + { + k = 7; + break; + } + } + } -// if (i < 5) -// { -// gSaveBlock2.battleTower.records[i] = *record; -// return; -// } + if (k == 7) + { + break; + } + } -// i = 0; -// while (i < 5) -// { -// if (gSaveBlock2.battleTower.records[i].var_2 == 0) -// { -// if (i > 4) -// { -// break; -// } + if (i < 5) + { + gSaveBlock2.battleTower.records[i] = *record; + return; + } -// gSaveBlock2.battleTower.records[i] = *record; -// return; -// } + i = 0; + while (i < 5) + { + if (gSaveBlock2.battleTower.records[i].var_2 == 0) + { + if (i > 4) + { + break; + } -// i++; -// } + gSaveBlock2.battleTower.records[i] = *record; + return; + } -// var1[0] = gSaveBlock2.battleTower.records[0].var_2; -// var2[0] = 0; -// l++; + i++; + } -// for (i = 1; i < 5; i++) -// { -// for (j = 0; gSaveBlock2.battleTower.records[i].var_2 <= var1[0] && j < l; j++) -// { -// if (gSaveBlock2.battleTower.records[i].var_2 < var1[0]) -// { -// j = 0; -// l = 1; -// var1[0] = gSaveBlock2.battleTower.records[i].var_2; -// var2[0] = i; -// break; -// } -// } + var1[0] = gSaveBlock2.battleTower.records[0].var_2; + var2[0] = 0; + l++; -// if (j == l) -// { -// var1[l] = gSaveBlock2.battleTower.records[i].var_2; -// var2[l] = i; -// l++; -// } -// } + for (i = 1; i < 5; i++) + { + j = 0; + if (j < l) + { + for (; gSaveBlock2.battleTower.records[i].var_2 <= var1[j]; j++) + { + if (gSaveBlock2.battleTower.records[i].var_2 < var1[j]) + { + j = 0; + l = 1; + var1[0] = gSaveBlock2.battleTower.records[i].var_2; + var2[0] = i; + break; + } + } + } -// gSaveBlock2.battleTower.records[var2[(Random() % l)]] = *record; -// } + if (j == l) + { + var1[l] = gSaveBlock2.battleTower.records[i].var_2; + var2[l] = i; + l++; + } + } + gSaveBlock2.battleTower.records[var2[(Random() % l)]] = *record; +} +#else __attribute__((naked)) void sub_8134AC0(struct BattleTowerRecord *record) { - asm(".syntax unified\n\ + asm(".syntax unified\n\ push {r4-r7,lr}\n\ mov r7, r10\n\ mov r6, r9\n\ @@ -1047,7 +1052,7 @@ _08134BC6:\n\ adds r0, r5, 0x1\n\ mov r12, r0\n\ cmp r3, r7\n\ - bge _08134C0A\n\ + bge _08134C0A @ j < l\n\ movs r1, 0xA4\n\ adds r0, r5, 0\n\ muls r0, r1\n\ @@ -1130,8 +1135,9 @@ _08134C5E:\n\ bx r0\n\ .align 2, 0\n\ _08134C70: .4byte gSaveBlock2\n\ -.syntax divided\n"); + .syntax divided\n"); } +#endif // NONMATCHING u8 get_trainer_class_pic_index(void) { @@ -1194,373 +1200,181 @@ void get_trainer_name(u8* dest) dest[i] = 0xFF; } -__attribute__((naked)) -void sub_8134DD4(void) +void FillBattleTowerTrainerParty(void) { - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r10\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5-r7}\n\ - sub sp, 0x28\n\ - movs r0, 0\n\ - str r0, [sp, 0x18]\n\ - movs r1, 0x3C\n\ - str r1, [sp, 0x1C]\n\ - add r4, sp, 0xC\n\ - movs r0, 0xFF\n\ - strb r0, [r4]\n\ - bl ZeroEnemyPartyMons\n\ - ldr r1, _08134E04 @ =gSaveBlock2\n\ - ldr r2, _08134E08 @ =0x00000564\n\ - adds r0, r1, r2\n\ - ldrb r0, [r0]\n\ - cmp r0, 0x13\n\ - bhi _08134E0C\n\ - movs r3, 0x6\n\ - str r3, [sp, 0x14]\n\ - b _08134ED8\n\ - .align 2, 0\n\ -_08134E04: .4byte gSaveBlock2\n\ -_08134E08: .4byte 0x00000564\n\ -_08134E0C:\n\ - cmp r0, 0x1D\n\ - bhi _08134E1A\n\ - movs r0, 0x9\n\ - str r0, [sp, 0x14]\n\ - movs r1, 0x1E\n\ - str r1, [sp, 0x18]\n\ - b _08134ED8\n\ -_08134E1A:\n\ - cmp r0, 0x27\n\ - bhi _08134E28\n\ - movs r2, 0xC\n\ - str r2, [sp, 0x14]\n\ - movs r3, 0x3C\n\ - str r3, [sp, 0x18]\n\ - b _08134ED8\n\ -_08134E28:\n\ - cmp r0, 0x31\n\ - bhi _08134E36\n\ - movs r0, 0xF\n\ - str r0, [sp, 0x14]\n\ - movs r1, 0x5A\n\ - str r1, [sp, 0x18]\n\ - b _08134ED8\n\ -_08134E36:\n\ - cmp r0, 0x3B\n\ - bhi _08134E44\n\ - movs r2, 0x12\n\ - str r2, [sp, 0x14]\n\ - movs r3, 0x78\n\ - str r3, [sp, 0x18]\n\ - b _08134ED8\n\ -_08134E44:\n\ - cmp r0, 0x45\n\ - bhi _08134E52\n\ - movs r0, 0x15\n\ - str r0, [sp, 0x14]\n\ - movs r1, 0x96\n\ - str r1, [sp, 0x18]\n\ - b _08134ED8\n\ -_08134E52:\n\ - cmp r0, 0x4F\n\ - bhi _08134E60\n\ - movs r2, 0x1F\n\ - str r2, [sp, 0x14]\n\ - movs r3, 0xB4\n\ - str r3, [sp, 0x18]\n\ - b _08134ED8\n\ -_08134E60:\n\ - cmp r0, 0x63\n\ - bhi _08134E72\n\ - movs r0, 0x1F\n\ - str r0, [sp, 0x14]\n\ - movs r1, 0xC8\n\ - str r1, [sp, 0x18]\n\ - movs r2, 0x64\n\ - str r2, [sp, 0x1C]\n\ - b _08134ED8\n\ -_08134E72:\n\ - cmp r0, 0xC8\n\ - bne _08134E9C\n\ - movs r6, 0\n\ -_08134E78:\n\ - movs r0, 0x64\n\ - muls r0, r6\n\ - ldr r1, _08134E94 @ =gEnemyParty\n\ - adds r0, r1\n\ - movs r1, 0x2C\n\ - muls r1, r6\n\ - ldr r2, _08134E98 @ =gSaveBlock2 + 0x4CC\n\ - adds r1, r2\n\ - bl sub_803ADE8\n\ - adds r6, 0x1\n\ - cmp r6, 0x2\n\ - ble _08134E78\n\ - b _08135082\n\ - .align 2, 0\n\ -_08134E94: .4byte gEnemyParty\n\ -_08134E98: .4byte gSaveBlock2 + 0x4CC\n\ -_08134E9C:\n\ - movs r6, 0\n\ - adds r4, r1, 0\n\ - ldr r3, _08134ECC @ =0xffffc158\n\ - adds r5, r4, r3\n\ -_08134EA4:\n\ - movs r0, 0x64\n\ - muls r0, r6\n\ - ldr r1, _08134ED0 @ =gEnemyParty\n\ - adds r0, r1\n\ - ldr r2, _08134ED4 @ =0x00000564\n\ - adds r1, r4, r2\n\ - ldrb r2, [r1]\n\ - movs r1, 0xA4\n\ - muls r1, r2\n\ - adds r1, r5\n\ - movs r2, 0x2C\n\ - muls r2, r6\n\ - adds r1, r2\n\ - bl sub_803ADE8\n\ - adds r6, 0x1\n\ - cmp r6, 0x2\n\ - ble _08134EA4\n\ - b _08135082\n\ - .align 2, 0\n\ -_08134ECC: .4byte 0xffffc158\n\ -_08134ED0: .4byte gEnemyParty\n\ -_08134ED4: .4byte 0x00000564\n\ -_08134ED8:\n\ - ldr r2, _08134EF4 @ =gSaveBlock2\n\ - ldr r3, _08134EF8 @ =0x00000554\n\ - adds r0, r2, r3\n\ - ldrb r1, [r0]\n\ - movs r0, 0x1\n\ - ands r0, r1\n\ - adds r1, r2, 0\n\ - cmp r0, 0\n\ - beq _08134F00\n\ - ldr r0, _08134EFC @ =gBattleTowerLevel100Mons\n\ - mov r10, r0\n\ - movs r2, 0x64\n\ - str r2, [sp, 0x10]\n\ - b _08134F08\n\ - .align 2, 0\n\ -_08134EF4: .4byte gSaveBlock2\n\ -_08134EF8: .4byte 0x00000554\n\ -_08134EFC: .4byte gBattleTowerLevel100Mons\n\ -_08134F00:\n\ - ldr r3, _08134F54 @ =gBattleTowerLevel50Mons\n\ - mov r10, r3\n\ - movs r0, 0x32\n\ - str r0, [sp, 0x10]\n\ -_08134F08:\n\ - ldr r2, _08134F58 @ =gBattleTowerTrainers\n\ - ldr r3, _08134F5C @ =0x00000564\n\ - adds r0, r1, r3\n\ - ldrb r1, [r0]\n\ - lsls r0, r1, 1\n\ - adds r0, r1\n\ - lsls r0, 3\n\ - adds r0, r2\n\ - ldrb r0, [r0, 0x9]\n\ - str r0, [sp, 0x20]\n\ - movs r6, 0\n\ -_08134F1E:\n\ - bl Random\n\ - movs r1, 0xFF\n\ - ands r1, r0\n\ - ldr r2, [sp, 0x1C]\n\ - adds r0, r1, 0\n\ - muls r0, r2\n\ - asrs r0, 8\n\ - ldr r3, [sp, 0x18]\n\ - adds r7, r0, r3\n\ - ldr r0, [sp, 0x20]\n\ - cmp r0, 0\n\ - beq _08134F48\n\ - lsls r0, r7, 4\n\ - add r0, r10\n\ - ldrb r0, [r0, 0x3]\n\ - ldr r1, [sp, 0x20]\n\ - ands r0, r1\n\ - cmp r0, r1\n\ - beq _08134F48\n\ - b _0813507C\n\ -_08134F48:\n\ - movs r5, 0\n\ - lsls r0, r7, 4\n\ - mov r2, r10\n\ - adds r3, r0, r2\n\ - movs r4, 0\n\ - b _08134F64\n\ - .align 2, 0\n\ -_08134F54: .4byte gBattleTowerLevel50Mons\n\ -_08134F58: .4byte gBattleTowerTrainers\n\ -_08134F5C: .4byte 0x00000564\n\ -_08134F60:\n\ - adds r4, 0x64\n\ - adds r5, 0x1\n\ -_08134F64:\n\ - cmp r5, r6\n\ - bge _08134F7E\n\ - ldr r1, _08135094 @ =gEnemyParty\n\ - adds r0, r4, r1\n\ - movs r1, 0xB\n\ - movs r2, 0\n\ - str r3, [sp, 0x24]\n\ - bl GetMonData\n\ - ldr r3, [sp, 0x24]\n\ - ldrh r2, [r3]\n\ - cmp r0, r2\n\ - bne _08134F60\n\ -_08134F7E:\n\ - cmp r5, r6\n\ - bne _0813507C\n\ - movs r5, 0\n\ - cmp r5, r6\n\ - bge _08134FCC\n\ - ldr r3, _08135098 @ =gBattleTowerHeldItems\n\ - mov r9, r3\n\ - lsls r0, r7, 4\n\ - add r0, r10\n\ - mov r8, r0\n\ - movs r3, 0\n\ -_08134F94:\n\ - ldr r0, _08135094 @ =gEnemyParty\n\ - adds r4, r3, r0\n\ - adds r0, r4, 0\n\ - movs r1, 0xC\n\ - movs r2, 0\n\ - str r3, [sp, 0x24]\n\ - bl GetMonData\n\ - ldr r3, [sp, 0x24]\n\ - cmp r0, 0\n\ - beq _08134FC4\n\ - adds r0, r4, 0\n\ - movs r1, 0xC\n\ - movs r2, 0\n\ - bl GetMonData\n\ - mov r2, r8\n\ - ldrb r1, [r2, 0x2]\n\ - lsls r1, 1\n\ - add r1, r9\n\ - ldr r3, [sp, 0x24]\n\ - ldrh r1, [r1]\n\ - cmp r0, r1\n\ - beq _08134FCC\n\ -_08134FC4:\n\ - adds r3, 0x64\n\ - adds r5, 0x1\n\ - cmp r5, r6\n\ - blt _08134F94\n\ -_08134FCC:\n\ - cmp r5, r6\n\ - bne _0813507C\n\ - movs r5, 0\n\ - cmp r5, r6\n\ - bge _08134FEE\n\ - add r0, sp, 0x4\n\ - ldrh r0, [r0]\n\ - cmp r0, r7\n\ - beq _08134FEE\n\ - add r1, sp, 0x4\n\ -_08134FE0:\n\ - adds r1, 0x2\n\ - adds r5, 0x1\n\ - cmp r5, r6\n\ - bge _08134FEE\n\ - ldrh r0, [r1]\n\ - cmp r0, r7\n\ - bne _08134FE0\n\ -_08134FEE:\n\ - cmp r5, r6\n\ - bne _0813507C\n\ - lsls r0, r6, 1\n\ - add r0, sp\n\ - adds r0, 0x4\n\ - strh r7, [r0]\n\ - movs r3, 0x64\n\ - adds r0, r6, 0\n\ - muls r0, r3\n\ - ldr r1, _08135094 @ =gEnemyParty\n\ - adds r0, r1\n\ - lsls r4, r7, 4\n\ - mov r3, r10\n\ - adds r2, r4, r3\n\ - ldrh r1, [r2]\n\ - ldrb r2, [r2, 0xC]\n\ - str r2, [sp]\n\ - ldr r2, [sp, 0x10]\n\ - ldr r3, [sp, 0x14]\n\ - bl CreateMonWithEVSpread\n\ - movs r5, 0\n\ - adds r0, r6, 0x1\n\ - mov r9, r0\n\ - mov r8, r4\n\ - movs r0, 0x64\n\ - adds r7, r6, 0\n\ - muls r7, r0\n\ - mov r0, r10\n\ - adds r0, 0x4\n\ - adds r4, r0\n\ - ldr r3, _08135094 @ =gEnemyParty\n\ -_0813502E:\n\ - ldrh r1, [r4]\n\ - lsls r2, r5, 24\n\ - lsrs r2, 24\n\ - adds r0, r7, r3\n\ - str r3, [sp, 0x24]\n\ - bl SetMonMoveSlot\n\ - ldrh r0, [r4]\n\ - ldr r3, [sp, 0x24]\n\ - cmp r0, 0xDA\n\ - bne _0813504A\n\ - movs r0, 0\n\ - mov r1, sp\n\ - strb r0, [r1, 0xC]\n\ -_0813504A:\n\ - adds r4, 0x2\n\ - adds r5, 0x1\n\ - cmp r5, 0x3\n\ - ble _0813502E\n\ - movs r2, 0x64\n\ - adds r4, r6, 0\n\ - muls r4, r2\n\ - ldr r3, _08135094 @ =gEnemyParty\n\ - adds r4, r3\n\ - adds r0, r4, 0\n\ - movs r1, 0x20\n\ - add r2, sp, 0xC\n\ - bl SetMonData\n\ - mov r0, r8\n\ - add r0, r10\n\ - ldrb r2, [r0, 0x2]\n\ - lsls r2, 1\n\ - ldr r0, _08135098 @ =gBattleTowerHeldItems\n\ - adds r2, r0\n\ - adds r0, r4, 0\n\ - movs r1, 0xC\n\ - bl SetMonData\n\ - mov r6, r9\n\ -_0813507C:\n\ - cmp r6, 0x3\n\ - beq _08135082\n\ - b _08134F1E\n\ -_08135082:\n\ - add sp, 0x28\n\ - pop {r3-r5}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - mov r10, r5\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_08135094: .4byte gEnemyParty\n\ -_08135098: .4byte gBattleTowerHeldItems\n\ -.syntax divided\n"); + s32 partyIndex, i; + u16 chosenMonIndices[3]; + u8 friendship; + u8 level; + u8 fixedIV; + u8 battleMonsOffset; + u8 monPoolSize; + u8 teamFlags; + const struct BattleTowerPokemon *battleTowerMons; + + battleMonsOffset = 0; + monPoolSize = 60; + friendship = 255; + + ZeroEnemyPartyMons(); + + // Different trainers have access to different sets of pokemon to use in battle. + // The pokemon later in gBattleTowerLevel100Mons or gBattleTowerLevel50Mons are + // stronger. Additionally, the later trainers' pokemon are granted higher IVs. + if (gSaveBlock2.battleTower.battleTowerTrainerId < 20) + { + fixedIV = 6; + } + else if (gSaveBlock2.battleTower.battleTowerTrainerId < 30) + { + fixedIV = 9; + battleMonsOffset = 30; + } + else if (gSaveBlock2.battleTower.battleTowerTrainerId < 40) + { + fixedIV = 12; + battleMonsOffset = 60; + } + else if (gSaveBlock2.battleTower.battleTowerTrainerId < 50) + { + fixedIV = 15; + battleMonsOffset = 90; + } + else if (gSaveBlock2.battleTower.battleTowerTrainerId < 60) + { + fixedIV = 18; + battleMonsOffset = 120; + } + else if (gSaveBlock2.battleTower.battleTowerTrainerId < 70) + { + fixedIV = 21; + battleMonsOffset = 150; + } + else if (gSaveBlock2.battleTower.battleTowerTrainerId < 80) + { + fixedIV = 31; + battleMonsOffset = 180; + } + else if (gSaveBlock2.battleTower.battleTowerTrainerId < 100) + { + fixedIV = 31; + battleMonsOffset = 200; + monPoolSize = 100; + } + else if (gSaveBlock2.battleTower.battleTowerTrainerId == 200) + { + // Load E-Reader trainer's party. + for (partyIndex = 0; partyIndex < 3; partyIndex++) + { + sub_803ADE8(&gEnemyParty[partyIndex], &gSaveBlock2.battleTower.ereaderTrainer.party[partyIndex]); + } + + return; + } + else + { + // Load a battle tower record's party. (From record mixing) + for (partyIndex = 0; partyIndex < 3; partyIndex++) + { + sub_803ADE8( + &gEnemyParty[partyIndex], + &gSaveBlock2.battleTower.records[gSaveBlock2.battleTower.battleTowerTrainerId - 100].party[partyIndex]); + } + + return; + } + + // Use the appropriate list of pokemon and level depending on the + // current challenge type. (level 50 or level 100 challenge) + if (gSaveBlock2.battleTower.battleTowerLevelType != 0) + { + battleTowerMons = gBattleTowerLevel100Mons; + level = 100; + } + else + { + battleTowerMons = gBattleTowerLevel50Mons; + level = 50; + } + + teamFlags = gBattleTowerTrainers[gSaveBlock2.battleTower.battleTowerTrainerId].teamFlags; + + // Attempt to fill the trainer's party with random Pokemon until 3 have been + // successfully chosen. The trainer's party may not have duplicate pokemon species + // or duplicate held items. Each pokemon must have all of the trainer's team flags + // set, as well. If any of those conditions are not met, then the loop starts over + // and another pokemon is chosen at random. + partyIndex = 0; + while (partyIndex != 3) + { + // Pick a random pokemon index based on the number of pokemon available to choose from + // and the starting offset in the battle tower pokemon array. + s32 battleMonIndex = ((Random() & 0xFF) * monPoolSize) / 256 + battleMonsOffset; + + // Ensure the chosen pokemon has compatible team flags with the trainer. + if (teamFlags == 0 || (battleTowerMons[battleMonIndex].teamFlags & teamFlags) == teamFlags) + { + // Ensure this pokemon species isn't a duplicate. + for (i = 0; i < partyIndex; i++) + { + if (GetMonData(&gEnemyParty[i], MON_DATA_SPECIES, NULL) == battleTowerMons[battleMonIndex].species) + break; + } + + if (i != partyIndex) + continue; + + // Ensure this pokemon's held item isn't a duplicate. + for (i = 0; i < partyIndex; i++) + { + if (GetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, NULL) != 0 + && GetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, NULL) == gBattleTowerHeldItems[battleTowerMons[battleMonIndex].item]) + { + break; + } + } + + if (i != partyIndex) + continue; + + // Ensure this exact pokemon index isn't a duplicate. This check doesn't seem necessary + // because the species and held items were already checked directly above. Perhaps this + // is leftover code before the logic for duplicate species and held items was added. + for (i = 0; i < partyIndex && chosenMonIndices[i] != battleMonIndex; i++); + + if (i != partyIndex) + continue; + + chosenMonIndices[partyIndex] = battleMonIndex; + + // Place the chosen pokemon into the trainer's party. + CreateMonWithEVSpread( + &gEnemyParty[partyIndex], + battleTowerMons[battleMonIndex].species, + level, + fixedIV, + battleTowerMons[battleMonIndex].evSpread); + + // Give the chosen pokemon its specified moves. + for (i = 0; i < 4; i++) + { + SetMonMoveSlot(&gEnemyParty[partyIndex], battleTowerMons[battleMonIndex].moves[i], i); + if (battleTowerMons[battleMonIndex].moves[i] == MOVE_FRUSTRATION) + { + // MOVE_FRUSTRATION is more powerful the lower the pokemon's friendship is. + friendship = 0; + } + } + + SetMonData(&gEnemyParty[partyIndex], MON_DATA_FRIENDSHIP, &friendship); + SetMonData(&gEnemyParty[partyIndex], MON_DATA_HELD_ITEM, (u8 *)&gBattleTowerHeldItems[battleTowerMons[battleMonIndex].item]); + + // The pokemon was successfully added to the trainer's party, so it's safe to move on to + // the next party slot. + partyIndex++; + } + } + } u32 CountBattleTowerBanlistCaught() @@ -1805,7 +1619,7 @@ void sub_813556C(void) gBattleTypeFlags = (BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_TRAINER); gTrainerBattleOpponent = 0; - sub_8134DD4(); + FillBattleTowerTrainerParty(); CreateTask(sub_8135534, 1); current_map_music_set__default_for_battle(0); -- cgit v1.2.3 From fea6c54f45a22493768d57c16fb9b916cfdeadde Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Wed, 1 Nov 2017 21:33:03 -0700 Subject: Decompile Debug_FillEReaderTrainerWithPlayerData --- src/battle_tower.c | 160 +++++++++++++++++------------------------------------ 1 file changed, 51 insertions(+), 109 deletions(-) (limited to 'src') diff --git a/src/battle_tower.c b/src/battle_tower.c index 5a335ddfa..5a1b241df 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -270,7 +270,7 @@ extern void sub_8135A3C(void); extern void sub_8135CFC(void); extern void CheckMonBattleTowerBanlist(u16, u16, u16, u8, u8, u16 *, u16 *, u8 *); static void ClearEReaderTrainer(struct BattleTowerEReaderTrainer *); -//static void SetEReaderTrainerChecksum(struct BattleTowerEReaderTrainer *ereaderTrainer); +static void SetEReaderTrainerChecksum(struct BattleTowerEReaderTrainer *ereaderTrainer); static void SetBattleTowerRecordChecksum(struct BattleTowerRecord *); static void ClearBattleTowerRecord(struct BattleTowerRecord *); @@ -1805,6 +1805,7 @@ void sub_8135A3C(void) { u8 battleTowerLevelType = gSaveBlock2.battleTower.battleTowerLevelType; u16 winStreak = sub_8135D3C(battleTowerLevelType); + if (gSaveBlock2.battleTower.recordWinStreaks[battleTowerLevelType] < winStreak) { gSaveBlock2.battleTower.recordWinStreaks[battleTowerLevelType] = winStreak; @@ -1812,26 +1813,28 @@ void sub_8135A3C(void) if (gSaveBlock2.battleTower.recordWinStreaks[0] > gSaveBlock2.battleTower.recordWinStreaks[1]) { - SetGameStat(GAME_STAT_BATTLE_TOWER_BEST_STREAK, gSaveBlock2.battleTower.recordWinStreaks[0]); - if (gSaveBlock2.battleTower.recordWinStreaks[0] > 9999) + u16 streak = gSaveBlock2.battleTower.recordWinStreaks[0]; + SetGameStat(GAME_STAT_BATTLE_TOWER_BEST_STREAK, streak); + if (streak > 9999) { gSaveBlock2.battleTower.bestBattleTowerWinStreak = 9999; } else { - gSaveBlock2.battleTower.bestBattleTowerWinStreak = gSaveBlock2.battleTower.recordWinStreaks[0]; + gSaveBlock2.battleTower.bestBattleTowerWinStreak = streak; } } else { - SetGameStat(GAME_STAT_BATTLE_TOWER_BEST_STREAK, gSaveBlock2.battleTower.recordWinStreaks[1]); - if (gSaveBlock2.battleTower.recordWinStreaks[1] > 9999) + u16 streak = gSaveBlock2.battleTower.recordWinStreaks[1]; + SetGameStat(GAME_STAT_BATTLE_TOWER_BEST_STREAK, streak); + if (streak > 9999) { gSaveBlock2.battleTower.bestBattleTowerWinStreak = 9999; } else { - gSaveBlock2.battleTower.bestBattleTowerWinStreak = gSaveBlock2.battleTower.recordWinStreaks[1]; + gSaveBlock2.battleTower.bestBattleTowerWinStreak = streak; } } } @@ -1917,7 +1920,7 @@ void sub_8135AC4(void) struct BattleTowerRecord *playerRecord = &gSaveBlock2.battleTower.playerRecord; u8 battleTowerLevelType = gSaveBlock2.battleTower.battleTowerLevelType; - if (gSaveBlock2.playerGender != 0) + if (gSaveBlock2.playerGender != MALE) { trainerClass = gUnknown_08405E7E[(gSaveBlock2.playerTrainerId[0] + gSaveBlock2.playerTrainerId[1] + gSaveBlock2.playerTrainerId[2] + gSaveBlock2.playerTrainerId[3]) % 20u]; @@ -2189,108 +2192,47 @@ void sub_8135E50() } } -__attribute__((naked)) -void unref_sub_8135EE8() +// This is a leftover debugging function that is used to populate the E-Reader +// trainer with the player's current data. +void Debug_FillEReaderTrainerWithPlayerData(void) { - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - ldr r7, _08135F0C @ =gSaveBlock2 + 0x498\n\ - ldr r0, _08135F10 @ =0xfffffb68\n\ - adds r2, r7, r0\n\ - ldrb r0, [r2, 0x8]\n\ - cmp r0, 0\n\ - beq _08135F18\n\ - ldr r4, _08135F14 @ =gUnknown_08405E7E\n\ - ldrb r0, [r2, 0xA]\n\ - ldrb r1, [r2, 0xB]\n\ - adds r0, r1\n\ - ldrb r1, [r2, 0xC]\n\ - adds r0, r1\n\ - ldrb r1, [r2, 0xD]\n\ - adds r0, r1\n\ - movs r1, 0x14\n\ - b _08135F2A\n\ - .align 2, 0\n\ -_08135F0C: .4byte gSaveBlock2 + 0x498\n\ -_08135F10: .4byte 0xfffffb68\n\ -_08135F14: .4byte gUnknown_08405E7E\n\ -_08135F18:\n\ - ldr r4, _08135FA8 @ =gUnknown_08405E60\n\ - ldrb r0, [r2, 0xA]\n\ - ldrb r1, [r2, 0xB]\n\ - adds r0, r1\n\ - ldrb r1, [r2, 0xC]\n\ - adds r0, r1\n\ - ldrb r1, [r2, 0xD]\n\ - adds r0, r1\n\ - movs r1, 0x1E\n\ -_08135F2A:\n\ - bl __umodsi3\n\ - adds r0, r4\n\ - ldrb r0, [r0]\n\ - strb r0, [r7, 0x1]\n\ - adds r0, r7, 0\n\ - adds r0, 0xC\n\ - ldr r4, _08135FAC @ =gSaveBlock2 + 0xA\n\ - adds r1, r4, 0\n\ - bl copy_word_to_mem\n\ - adds r0, r7, 0x4\n\ - subs r4, 0xA\n\ - adds r1, r4, 0\n\ - bl StringCopy8\n\ - movs r0, 0x1\n\ - strh r0, [r7, 0x2]\n\ - movs r5, 0x7\n\ - movs r4, 0\n\ - ldr r0, _08135FB0 @ =gSaveBlock1\n\ - ldr r1, _08135FB4 @ =0x00002b28\n\ - adds r6, r0, r1\n\ - adds r3, r7, 0\n\ - adds r3, 0x10\n\ - adds r2, r7, 0\n\ - adds r2, 0x28\n\ - adds r1, r7, 0\n\ - adds r1, 0x1C\n\ -_08135F64:\n\ - ldrh r0, [r6]\n\ - strh r0, [r3]\n\ - strh r5, [r1]\n\ - adds r0, r5, 0x6\n\ - strh r0, [r2]\n\ - adds r5, 0x1\n\ - adds r6, 0x2\n\ - adds r3, 0x2\n\ - adds r2, 0x2\n\ - adds r1, 0x2\n\ - adds r4, 0x1\n\ - cmp r4, 0x5\n\ - ble _08135F64\n\ - movs r4, 0\n\ -_08135F80:\n\ - movs r0, 0x64\n\ - muls r0, r4\n\ - ldr r1, _08135FB8 @ =gPlayerParty\n\ - adds r0, r1\n\ - movs r1, 0x2C\n\ - muls r1, r4\n\ - adds r1, 0x34\n\ - adds r1, r7, r1\n\ - bl sub_803AF78\n\ - adds r4, 0x1\n\ - cmp r4, 0x2\n\ - ble _08135F80\n\ - adds r0, r7, 0\n\ - bl SetEReaderTrainerChecksum\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_08135FA8: .4byte gUnknown_08405E60\n\ -_08135FAC: .4byte gSaveBlock2 + 0xA\n\ -_08135FB0: .4byte gSaveBlock1\n\ -_08135FB4: .4byte 0x00002b28\n\ -_08135FB8: .4byte gPlayerParty\n\ -.syntax divided\n"); + struct BattleTowerEReaderTrainer *ereaderTrainer; + s32 i; + s32 j; + + ereaderTrainer = &gSaveBlock2.battleTower.ereaderTrainer; + + if (gSaveBlock2.playerGender != MALE) + { + ereaderTrainer->trainerClass = gUnknown_08405E7E[(gSaveBlock2.playerTrainerId[0] + gSaveBlock2.playerTrainerId[1] + + gSaveBlock2.playerTrainerId[2] + gSaveBlock2.playerTrainerId[3]) % 20u]; + } + else + { + ereaderTrainer->trainerClass = gUnknown_08405E60[(gSaveBlock2.playerTrainerId[0] + gSaveBlock2.playerTrainerId[1] + + gSaveBlock2.playerTrainerId[2] + gSaveBlock2.playerTrainerId[3]) % 30u]; + } + + copy_word_to_mem(ereaderTrainer->trainerId, gSaveBlock2.playerTrainerId); + StringCopy8(ereaderTrainer->name, gSaveBlock2.playerName); + + ereaderTrainer->var_2 = 1; + + j = 7; + for (i = 0; i < 6; i++) + { + ereaderTrainer->greeting.easyChat[i] = gSaveBlock1.easyChats.unk2B28[i]; + ereaderTrainer->farewellPlayerLost.easyChat[i] = j; + ereaderTrainer->farewellPlayerWon.easyChat[i] = j + 6; + j++; + } + + for (i = 0; i < 3; i++) + { + sub_803AF78(&gPlayerParty[i], &ereaderTrainer->party[i]); + } + + SetEReaderTrainerChecksum(ereaderTrainer); } u8 sub_8135FBC(void) -- cgit v1.2.3 From c2f014a9238e500eaddc17b27352a03488ba82dd Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Wed, 1 Nov 2017 21:50:04 -0700 Subject: Move german battle tower trainers into src/data/battle_tower --- src/battle_tower.c | 4 + src/data/battle_tower/trainers_de.h | 1503 +++++++++++++++++++++++++++++++++++ 2 files changed, 1507 insertions(+) create mode 100644 src/data/battle_tower/trainers_de.h (limited to 'src') diff --git a/src/battle_tower.c b/src/battle_tower.c index 5a1b241df..a577e1402 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -25,7 +25,11 @@ #include "tv.h" #include "vars.h" +#if ENGLISH #include "data/battle_tower/trainers.h" +#elif GERMAN +#include "data/battle_tower/trainers_de.h" +#endif const u16 gBattleTowerHeldItems[] = { ITEM_NONE, diff --git a/src/data/battle_tower/trainers_de.h b/src/data/battle_tower/trainers_de.h new file mode 100644 index 000000000..86182da9d --- /dev/null +++ b/src/data/battle_tower/trainers_de.h @@ -0,0 +1,1503 @@ +const struct BattleTowerTrainer gBattleTowerTrainers[] = +{ + { + .trainerClass = TRAINER_CLASS_YOUNGSTER, + .name = _("ALWIN"), + .teamFlags = 0x01, + .greeting = { + .easyChat = { + EC_WORD_ARE, + EC_WORD_YOU, + EC_WORD_READY, + EC_WORD_QUES, + EC_WORD_HERE_I_COME, + EC_WORD_EXCL, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_BIRD_KEEPER, + .name = _("DIRK"), + .teamFlags = 0x01, + .greeting = { + .easyChat = { + EC_WORD_OH_KAY, + EC_WORD_I_AM, + EC_WORD_READY, + EC_WORD_EXCL, + 0xFFFF, + 0xFFFF, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_LADY, + .name = _("SIBILLE"), + .teamFlags = 0x02, + .greeting = { + .easyChat = { + EC_WORD_THAT, + EC_WORD_BECOMES, + EC_WORD_A, + EC_WORD_CHILD_S_PLAY, + EC_WORD_GO, + 0xFFFF, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_BLACK_BELT, + .name = _("OLAF"), + .teamFlags = 0x05, + .greeting = { + .easyChat = { + EC_WORD_MY, + EC_WORD_GHOST, + EC_WORD_IS, + EC_WORD_FULL, + EC_WORD_TOUGHNESS, + EC_WORD_SNORT, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_NINJA_BOY, + .name = _("JOST"), + .teamFlags = 0x05, + .greeting = { + .easyChat = { + EC_WORD_GO, + EC_WORD_WHO_WAS, + EC_WORD_POKEMON, + EC_WORD_FIGHT, + EC_WORD_FIGHT, + EC_WORD_FIGHT, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_SCHOOL_KID_F, + .name = _("TINA"), + .teamFlags = 0x0A, + .greeting = { + .easyChat = { + EC_WORD_STUDY, + EC_WORD_IS, + EC_WORD_BORING, + EC_WORD_LET_S, + EC_WORD_BETTER, + EC_WORD_FIGHT, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_BUG_MANIAC, + .name = _("HAJO"), + .teamFlags = 0x41, + .greeting = { + .easyChat = { + EC_WORD_TOUGHNESS, + EC_WORD_AND, + EC_MOVE2(TRANSFORM), + EC_WORD_WILL, + EC_WORD_BABE, + EC_WORD_FAINT, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_FISHERMAN, + .name = _("GEORG"), + .teamFlags = 0x01, + .greeting = { + .easyChat = { + EC_WORD_IT, + EC_WORD_GOES, + EC_WORD_NOTHING, + EC_WORD_OVER, + EC_WORD_FISHING, + 0xFFFF, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_TUBER_F, + .name = _("ANNE"), + .teamFlags = 0x02, + .greeting = { + .easyChat = { + EC_WORD_POKEMON, + EC_WORD_MUST_BE, + EC_WORD_MAN, + EC_WORD_SIMPLE, + EC_WORD_ADORE, + 0xFFFF, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_POKEFAN_F, + .name = _("JULIA"), + .teamFlags = 0x42, + .greeting = { + .easyChat = { + EC_WORD_I_AM, + EC_WORD_CUTE, + EC_WORD_I_AM, + EC_WORD_QUITE, + EC_WORD_AN, + EC_WORD_LADY, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_GENTLEMAN, + .name = _("JOHANN"), + .teamFlags = 0x01, + .greeting = { + .easyChat = { + EC_WORD_THE, + EC_WORD_DAY, + EC_WORD_IS, + EC_WORD_PERFECT, + EC_WORD_FOR, + EC_WORD_BATTLE, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_CAMPER, + .name = _("KARL"), + .teamFlags = 0x01, + .greeting = { + .easyChat = { + EC_WORD_NOW, + EC_WORD_ARE, + EC_WORD_YOU, + EC_WORD_MY, + EC_WORD_FRIEND, + 0xFFFF, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_RUNNING_TRIATHLETE_F, + .name = _("KENDRA"), + .teamFlags = 0x0A, + .greeting = { + .easyChat = { + EC_WORD_I_AM, + EC_WORD_SMART, + EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS, + EC_WORD_AND, + EC_WORD_YOU, + EC_WORD_QUES, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_HIKER, + .name = _("DAVID"), + .teamFlags = 0x01, + .greeting = { + .easyChat = { + EC_WORD_WAHAHAHA, + EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS, + EC_WORD_TODAY, + EC_WORD_IS, + EC_MOVE2(PAY_DAY), + 0xFFFF, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_BATTLE_GIRL, + .name = _("KEA"), + .teamFlags = 0x0A, + .greeting = { + .easyChat = { + EC_WORD_YOU_RE, + EC_WORD_TOUGH, + EC_WORD_OR, + EC_WORD_QUES, + 0xFFFF, + 0xFFFF, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_PSYCHIC_M, + .name = _("JULIAN"), + .teamFlags = 0x05, + .greeting = { + .easyChat = { + EC_WORD_FUFUFU, + EC_WORD_YOU, + EC_WORD_CAN_T, + EC_WORD_DON_T, + EC_WORD_WINS, + EC_WORD_KID, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_LASS, + .name = _("JOSI"), + .teamFlags = 0x02, + .greeting = { + .easyChat = { + EC_WORD_BE, + EC_WORD_KIND, + EC_WORD_TO, + EC_WORD_GIRL, + 0xFFFF, + 0xFFFF, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_GUITARIST, + .name = _("LEIF"), + .teamFlags = 0x01, + .greeting = { + .easyChat = { + EC_WORD_I_AM, + EC_WORD_GREAT, + EC_WORD_YOU_RE, + EC_WORD_RATHER, + EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS, + EC_WORD_OKAY, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_RICH_BOY, + .name = _("INGO"), + .teamFlags = 0x01, + .greeting = { + .easyChat = { + EC_WORD_I, + EC_WORD_HAVE, + EC_WORD_ROUGH_SKIN, + EC_WORD_NATURAL_CURE, + EC_WORD_IS, + EC_WORD_ALL_RIGHT, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_BUG_CATCHER, + .name = _("LUDWIG"), + .teamFlags = 0x01, + .greeting = { + .easyChat = { + EC_WORD_IF_I_WIN, + EC_WORD_IS, + EC_WORD_THAT, + EC_WORD_EXCITING, + 0xFFFF, + 0xFFFF, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_PICNICKER, + .name = _("RAJA"), + .teamFlags = 0x02, + .greeting = { + .easyChat = { + EC_WORD_WITH, + EC_WORD_POKEMON, + EC_WORD_TO, + EC_WORD_WALKING, + EC_WORD_IS, + EC_WORD_GREAT, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_COLLECTOR, + .name = _("HARALD"), + .teamFlags = 0x09, + .greeting = { + .easyChat = { + EC_WORD_HERE_GOES, + EC_WORD_MY, + EC_WORD_HUGE_POWER, + 0xFFFF, + EC_WORD_POKEMON, + 0xFFFF, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_TUBER_M, + .name = _("KIM"), + .teamFlags = 0x01, + .greeting = { + .easyChat = { + EC_WORD_I_AM, + EC_WORD_A, + EC_WORD_GENIUS, + EC_WORD_WE, + EC_WORD_WILL, + EC_WORD_WINS, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_KINDLER, + .name = _("ERWIN"), + .teamFlags = 0x05, + .greeting = { + .easyChat = { + EC_WORD_MY, + EC_WORD_FIRE, + EC_WORD_IS, + EC_WORD_VERY, + EC_WORD_HOT, + 0xFFFF, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_PSYCHIC_F, + .name = _("EIKA"), + .teamFlags = 0x0A, + .greeting = { + .easyChat = { + EC_WORD_FIGHTING, + EC_MOVE(ASTONISH), + EC_WORD_AND, + EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS, + 0xFFFF, + 0xFFFF, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_SWIMMER_F, + .name = _("ANNINA"), + .teamFlags = 0x02, + .greeting = { + .easyChat = { + EC_WORD_SORRY, + EC_WORD_YOURS, + EC_WORD_POKEMON, + EC_WORD_WILL, + EC_WORD_DON_T, + EC_WORD_WINS, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_CYCLING_TRIATHLETE_F, + .name = _("RUTH"), + .teamFlags = 0x06, + .greeting = { + .easyChat = { + EC_WORD_I_AM, + EC_WORD_TOUGH, + EC_WORD_WHO_WAS, + EC_WORD_POKEMON, + EC_WORD_TOO, + EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_POKEMANIAC, + .name = _("JENS"), + .teamFlags = 0x40, + .greeting = { + .easyChat = { + EC_WORD_WHO_WAS, + EC_WORD_POKEMON, + EC_WORD_THOSE, + EC_WORD_COOL, + EC_WORD_YOURS, + EC_WORD_LOSE, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_SAILOR, + .name = _("TITUS"), + .teamFlags = 0x09, + .greeting = { + .easyChat = { + EC_WORD_MY, + EC_WORD_FOE, + EC_WORD_IS, + EC_WORD_FINALLY, + EC_WORD_HERE, + EC_WORD_EXCELLENT, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_POKEMON_BREEDER_F, + .name = _("NICOLA"), + .teamFlags = 0x06, + .greeting = { + .easyChat = { + EC_WORD_I_AM, + EC_WORD_VORACIOUS, + EC_MOVE2(POUND), + EC_WORD_AND, + EC_MOVE2(BELLY_DRUM), + 0xFFFF, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_HEX_MANIAC, + .name = _("PAULA"), + .teamFlags = 0x42, + .greeting = { + .easyChat = { + EC_WORD_IS_IT_QUES, + EC_WORD_THOSE_ARE, + EC_WORD_UGLY, + EC_MOVE(SPITE), + EC_WORD_TO, + EC_WORD_TAKE, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_RUIN_MANIAC, + .name = _("SÖREN"), + .teamFlags = 0x41, + .greeting = { + .easyChat = { + EC_WORD_ADVENTURE, + EC_WORD_AND, + EC_WORD_BATTLE, + EC_WORD_THOSE, + EC_WORD_WHO_WAS, + EC_WORD_LIKES, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_SWIMMING_TRIATHLETE_M, + .name = _("RAINER"), + .teamFlags = 0x09, + .greeting = { + .easyChat = { + EC_WORD_WE, + EC_WORD_CAN, + EC_WORD_VERSUS, + EC_WORD_CHILDREN, + EC_WORD_DON_T, + EC_WORD_LOSE, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_SCHOOL_KID_M, + .name = _("FABIAN"), + .teamFlags = 0x08, + .greeting = { + .easyChat = { + EC_WORD_DAILY, + EC_WORD_POKEMON, + EC_WORD_IN, + EC_WORD_THE, + EC_WORD_SCHOOL, + EC_WORD_AWESOME, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_POKEMON_RANGER_F, + .name = _("ELLEN"), + .teamFlags = 0x04, + .greeting = { + .easyChat = { + EC_WORD_ARE, + EC_WORD_YOU, + EC_WORD_ALL_RIGHT, + EC_WORD_TO, + EC_WORD_POKEMON, + EC_WORD_QUES, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_SWIMMER_M, + .name = _("ARNIE"), + .teamFlags = 0x09, + .greeting = { + .easyChat = { + EC_WORD_MY, + EC_WORD_FIGHTING, + EC_WORD_IS, + EC_WORD_PERFECTION, + EC_WORD_YOUR, + EC_WORD_USELESS, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_RUNNING_TRIATHLETE_M, + .name = _("HARDI"), + .teamFlags = 0x09, + .greeting = { + .easyChat = { + EC_WORD_BOY, + EC_WORD_I_AM, + EC_WORD_MAYBE, + EC_WORD_TIRED, + EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS, + 0xFFFF, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_BEAUTY, + .name = _("LINA"), + .teamFlags = 0x06, + .greeting = { + .easyChat = { + EC_WORD_A, + EC_WORD_TRAINER, + EC_WORD_HOW_DO, + EC_WORD_YOU, + EC_WORD_IS, + EC_WORD_EXCITING, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_AROMA_LADY, + .name = _("SELINA"), + .teamFlags = 0x06, + .greeting = { + .easyChat = { + EC_WORD_YOU_VE, + EC_WORD_STENCH, + EC_WORD_OR, + EC_MOVE(SWEET_SCENT), + EC_WORD_QUES, + 0xFFFF, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_COLLECTOR, + .name = _("DANTE"), + .teamFlags = 0x81, + .greeting = { + .easyChat = { + EC_WORD_YOURS, + EC_WORD_POKEMON, + EC_WORD_I, + EC_WORD_WANTS, + EC_WORD_SHE, + EC_WORD_EXCL_EXCL, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_SWIMMING_TRIATHLETE_F, + .name = _("KATJA"), + .teamFlags = 0x04, + .greeting = { + .easyChat = { + EC_WORD_TODAY, + EC_WORD_WANTS, + EC_WORD_I, + EC_WORD_MY, + EC_WORD_BEST, + EC_WORD_GIVE, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_POKEMON_RANGER_M, + .name = _("HORST"), + .teamFlags = 0x0C, + .greeting = { + .easyChat = { + EC_WORD_WAAAH, + EC_WORD_WAAAH, + EC_WORD_WAAAH, + EC_WORD_WAAAH, + EC_WORD_EHEHE, + EC_MOVE(FAKE_TEARS), + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_POKEFAN_M, + .name = _("GERRIT"), + .teamFlags = 0x80, + .greeting = { + .easyChat = { + EC_WORD_MY, + EC_WORD_ANIME, + EC_WORD_SONG, + EC_WORD_IS, + EC_WORD_DON_T, + EC_WORD_LOUSY, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_CYCLING_TRIATHLETE_M, + .name = _("NIKO"), + .teamFlags = 0x04, + .greeting = { + .easyChat = { + EC_WORD_BATTLE, + EC_WORD_DON_T, + EC_WORD_JUST, + EC_WORD_DO, + EC_WORD_SOMETHING, + EC_WORD_ELSE, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_POKEMON_BREEDER_M, + .name = _("BALDO"), + .teamFlags = 0x41, + .greeting = { + .easyChat = { + EC_WORD_ARE, + EC_WORD_YOU, + EC_WORD_BUSY, + EC_WORD_HAS, + EC_WORD_THAT, + EC_WORD_TIME, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_PARASOL_LADY, + .name = _("ALMA"), + .teamFlags = 0x08, + .greeting = { + .easyChat = { + EC_WORD_THAT, + EC_MOVE(MORNING_SUN), + EC_WORD_HAS, + EC_WORD_SO, + EC_WORD_A_LOT, + EC_MOVE(COSMIC_POWER), + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_CAMPER, + .name = _("ADAM"), + .teamFlags = 0x0C, + .greeting = { + .easyChat = { + EC_WORD_EXCITING, + EC_WORD_BATTLE, + EC_WORD_THOSE, + EC_WORD_GREAT, + EC_WORD_YEEHAW_EXCL, + 0xFFFF, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_SCHOOL_KID_F, + .name = _("GRETE"), + .teamFlags = 0x42, + .greeting = { + .easyChat = { + EC_WORD_I, + EC_WORD_WANTS, + EC_WORD_SOMETHING, + EC_MOVE(GROWTH), + EC_WORD_WORKS, + 0xFFFF, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_BEAUTY, + .name = _("NAOMI"), + .teamFlags = 0x04, + .greeting = { + .easyChat = { + EC_WORD_IT, + EC_WORD_WAS, + EC_WORD_GREAT, + EC_WORD_YOUNG, + EC_WORD_TO, + EC_WORD_HIS, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_NINJA_BOY, + .name = _("KENO"), + .teamFlags = 0x0C, + .greeting = { + .easyChat = { + EC_WORD_PLEASE, + EC_WORD_BE, + EC_WORD_DON_T, + EC_WORD_SO, + EC_WORD_MEAN, + EC_WORD_TO_ME, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_CYCLING_TRIATHLETE_M, + .name = _("REMUS"), + .teamFlags = 0x01, + .greeting = { + .easyChat = { + EC_WORD_WAKES_UP, + EC_MOVE2(HIDDEN_POWER), + EC_WORD_AND, + EC_MOVE(ASTONISH), + 0xFFFF, + 0xFFFF, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_POKEMON_RANGER_F, + .name = _("EDITH"), + .teamFlags = 0x02, + .greeting = { + .easyChat = { + EC_WORD_THE, + EC_WORD_BATTLE_TOWER, + EC_WORD_IS, + EC_WORD_SO, + EC_WORD_ENTERTAINING, + EC_WORD_AWESOME, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_RUIN_MANIAC, + .name = _("ANTON"), + .teamFlags = 0x41, + .greeting = { + .easyChat = { + EC_WORD_THICK_FAT, + EC_WORD_AND, + EC_WORD_CHLOROPHYLL, + EC_WORD_BLEND, + EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS, + EC_WORD_TASTY, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_SWIMMER_M, + .name = _("MALTE"), + .teamFlags = 0x81, + .greeting = { + .easyChat = { + EC_WORD_AN, + EC_MOVE(SCARY_FACE), + EC_WORD_IS, + EC_WORD_DON_T, + EC_WORD_QUITE, + EC_WORD_TERRIBLE, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_HEX_MANIAC, + .name = _("RAOUL"), + .teamFlags = 0x42, + .greeting = { + .easyChat = { + EC_WORD_RUN_AWAY, + EC_WORD_GIVE_ME, + EC_WORD_SON, + EC_WORD_BEST, + 0xFFFF, + 0xFFFF, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_RUNNING_TRIATHLETE_M, + .name = _("RICK"), + .teamFlags = 0x01, + .greeting = { + .easyChat = { + EC_WORD_WATER, + EC_WORD_IS, + EC_WORD_TASTY, + EC_WORD_HIP_AND, + EC_WORD_REFRESHING, + EC_WORD_YES_SIR_EXCL, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_POKEFAN_M, + .name = _("DENNIS"), + .teamFlags = 0x80, + .greeting = { + .easyChat = { + EC_WORD_GO, + EC_WORD_WHO_WAS, + EC_WORD_POKEMON, + EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS, + 0xFFFF, + 0xFFFF, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_PSYCHIC_F, + .name = _("GLORIA"), + .teamFlags = 0x82, + .greeting = { + .easyChat = { + EC_WORD_THE, + EC_WORD_FIGHTING, + EC_WORD_MUST_BE, + EC_WORD_HOT, + EC_WORD_HIS, + EC_WORD_FIERY, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_GUITARIST, + .name = _("NINO"), + .teamFlags = 0x01, + .greeting = { + .easyChat = { + EC_WORD_MUSIC, + EC_WORD_IS, + EC_WORD_MY, + EC_WORD_EVERY, + EC_WORD_MY, + EC_WORD_DESTINY, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_KINDLER, + .name = _("FIETE"), + .teamFlags = 0x41, + .greeting = { + .easyChat = { + EC_WORD_IT_S, + EC_WORD_ALL_RIGHT, + EC_WORD_VERY, + EC_WORD_ALL_RIGHT, + 0xFFFF, + 0xFFFF, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_AROMA_LADY, + .name = _("AMANDA"), + .teamFlags = 0x82, + .greeting = { + .easyChat = { + EC_WORD_WHAT, + EC_WORD_FOR, + EC_WORD_A, + EC_WORD_TRAINER, + EC_WORD_ARE, + EC_WORD_YOU, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_SWIMMING_TRIATHLETE_M, + .name = _("MAREK"), + .teamFlags = 0x10, + .greeting = { + .easyChat = { + EC_WORD_WE_VE, + EC_WORD_UNTIL, + EC_WORD_NOW, + EC_WORD_TOTALLY, + EC_WORD_NEVER, + EC_WORD_LOST, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_DRAGON_TAMER, + .name = _("NATHAN"), + .teamFlags = 0x10, + .greeting = { + .easyChat = { + EC_WORD_DRAGON, + 0xFFFF, + EC_WORD_POKEMON, + EC_WORD_THOSE, + EC_WORD_FANTASTIC, + 0xFFFF, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_LASS, + .name = _("MIRIAM"), + .teamFlags = 0x82, + .greeting = { + .easyChat = { + EC_WORD_YOU_RE, + EC_WORD_QUITE, + EC_WORD_TOO_STRONG, + EC_WORD_AM, + EC_WORD_BAD, + EC_WORD_NEWS, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_POKEMANIAC, + .name = _("THEO"), + .teamFlags = 0x40, + .greeting = { + .easyChat = { + EC_WORD_PLUSH_DOLL, + EC_WORD_MUST_BE, + EC_WORD_MAN, + EC_WORD_SIMPLE, + EC_WORD_ADORE, + 0xFFFF, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_SWIMMING_TRIATHLETE_F, + .name = _("PIA"), + .teamFlags = 0x10, + .greeting = { + .easyChat = { + EC_WORD_HERE_I_COME, + EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS, + EC_WORD_CUTE, + EC_WORD_A, + EC_WORD_CHANNEL, + EC_WORD_IDOL, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_POKEFAN_F, + .name = _("ALISSA"), + .teamFlags = 0x20, + .greeting = { + .easyChat = { + EC_WORD_YOURS, + EC_WORD_POKEMON, + EC_WORD_THOSE, + EC_WORD_PREPOSTEROUS, + EC_WORD_I_AM, + EC_WORD_SHOCKED, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_GENTLEMAN, + .name = _("ARTUR"), + .teamFlags = 0x20, + .greeting = { + .easyChat = { + EC_WORD_PLEASE, + EC_WORD_ALL, + EC_WORD_BATTLE, + EC_WORD_WEREN_T, + EC_WORD_GREAT, + EC_WORD_HIS, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_SWIMMER_F, + .name = _("MAJA"), + .teamFlags = 0x82, + .greeting = { + .easyChat = { + EC_WORD_I_AM, + EC_WORD_PRETTY, + EC_WORD_YOU, + EC_WORD_CAN_T, + EC_WORD_DON_T, + EC_WORD_WINS, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_COOL_TRAINER_M, + .name = _("MARIUS"), + .teamFlags = 0x10, + .greeting = { + .easyChat = { + EC_WORD_I, + EC_WORD_BATTLE, + EC_WORD_DAILY, + EC_WORD_I, + EC_WORD_WON_T, + EC_WORD_LOSE, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_BIRD_KEEPER, + .name = _("OLIVER"), + .teamFlags = 0x11, + .greeting = { + .easyChat = { + EC_WORD_GIGGLE, + EC_WORD_GIGGLE, + EC_WORD_SNORT, + EC_WORD_HAPPILY, + EC_WORD_GIGGLE, + EC_WORD_MUFUFU, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_CYCLING_TRIATHLETE_F, + .name = _("MOLLY"), + .teamFlags = 0x12, + .greeting = { + .easyChat = { + EC_WORD_IS, + EC_WORD_TODAY, + EC_WORD_MONDAY, + EC_WORD_QUES, + 0xFFFF, + 0xFFFF, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_BUG_MANIAC, + .name = _("JÖRG"), + .teamFlags = 0x40, + .greeting = { + .easyChat = { + EC_WORD_WATER, + 0xFFFF, + EC_WORD_AND, + EC_WORD_BUG, + 0xFFFF, + EC_WORD_POKEMON, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_BATTLE_GIRL, + .name = _("ANKE"), + .teamFlags = 0x20, + .greeting = { + .easyChat = { + EC_WORD_WHAT, + EC_WORD_IS, + EC_WORD_PRESSURE, + EC_WORD_STATIC, + EC_WORD_IS, + EC_WORD_SUPER, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_FISHERMAN, + .name = _("HANS"), + .teamFlags = 0x10, + .greeting = { + .easyChat = { + EC_WORD_KID, + EC_WORD_YOU, + EC_WORD_CAN_T, + EC_WORD_DON_T, + EC_WORD_WINS, + 0xFFFF, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_SAILOR, + .name = _("PETER"), + .teamFlags = 0x20, + .greeting = { + .easyChat = { + EC_WORD_IT_S, + EC_WORD_QUITE, + EC_WORD_TERRIBLE, + EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS, + EC_WORD_MODE, + EC_WORD_I, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_EXPERT_F, + .name = _("MARA"), + .teamFlags = 0x20, + .greeting = { + .easyChat = { + EC_WORD_YOU_RE, + EC_WORD_VERY, + EC_WORD_ALL_RIGHT, + EC_WORD_TRAINS, + EC_WORD_OR, + EC_WORD_QUES, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_BUG_MANIAC, + .name = _("DARIUS"), + .teamFlags = 0x11, + .greeting = { + .easyChat = { + EC_WORD_ARE, + EC_WORD_YOU, + EC_WORD_TOUGH, + EC_WORD_ARE, + EC_WORD_YOU, + EC_WORD_SCARY, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_POKEMON_BREEDER_F, + .name = _("REGINA"), + .teamFlags = 0x12, + .greeting = { + .easyChat = { + EC_WORD_TODAY, + EC_WORD_WIN, + EC_WORD_I, + EC_WORD_MAYBE, + EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS, + 0xFFFF, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_PARASOL_LADY, + .name = _("MAIKE"), + .teamFlags = 0x10, + .greeting = { + .easyChat = { + EC_WORD_SO, + EC_WORD_AN, + EC_MOVE(SCARY_FACE), + EC_WORD_IS, + EC_WORD_NOT_VERY, + EC_WORD_KIND, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_RUNNING_TRIATHLETE_F, + .name = _("SANDRA"), + .teamFlags = 0x04, + .greeting = { + .easyChat = { + EC_WORD_SPORTS, + EC_WORD_IS, + EC_WORD_HEALTHY, + EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS, + EC_WORD_SPIRALING, + 0xFFFF, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_POKEMON_RANGER_M, + .name = _("ARNOLD"), + .teamFlags = 0x08, + .greeting = { + .easyChat = { + EC_WORD_AWESOME, + EC_WORD_WHO_WAS, + EC_WORD_POKEMON, + EC_WORD_THOSE, + EC_WORD_ROCK_SOLID, + 0xFFFF, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_BLACK_BELT, + .name = _("XENO"), + .teamFlags = 0x04, + .greeting = { + .easyChat = { + EC_WORD_HOO_HAH, + EC_WORD_ARE, + EC_WORD_YOU, + EC_WORD_READY, + EC_WORD_FOR, + EC_WORD_SHADY, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_COOL_TRAINER_F, + .name = _("KARLA"), + .teamFlags = 0x02, + .greeting = { + .easyChat = { + EC_WORD_YOU, + EC_WORD_CAN_T, + EC_WORD_ME, + EC_WORD_NEVER, + EC_WORD_SMITE, + EC_WORD_KID, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_COLLECTOR, + .name = _("VOLKER"), + .teamFlags = 0x80, + .greeting = { + .easyChat = { + EC_WORD_FROM, + EC_WORD_PLACE, + EC_WORD_TO, + EC_WORD_PLACE, + EC_WORD_POKEMON, + EC_WORD_WOWEE, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_SWIMMING_TRIATHLETE_M, + .name = _("TOBIAS"), + .teamFlags = 0x01, + .greeting = { + .easyChat = { + EC_WORD_THAT, + EC_WORD_ISN_T, + EC_WORD_SPORTS, + EC_WORD_IT_S, + EC_WORD_A, + EC_WORD_FIGHTING, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_GENTLEMAN, + .name = _("NORBERT"), + .teamFlags = 0x20, + .greeting = { + .easyChat = { + EC_WORD_I, + EC_WORD_MUST_BE, + EC_WORD_WINS, + EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS, + EC_WORD_PLEASE, + EC_WORD_PLEASE, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_BATTLE_GIRL, + .name = _("ZITA"), + .teamFlags = 0x02, + .greeting = { + .easyChat = { + EC_WORD_THAT, + EC_WORD_IS, + EC_WORD_SCARY, + EC_WORD_PLEASE, + EC_WORD_BE, + EC_WORD_NICE, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_BEAUTY, + .name = _("ELKE"), + .teamFlags = 0x20, + .greeting = { + .easyChat = { + EC_WORD_WITHOUT, + EC_MOVE(FLAIL), + EC_WORD_NONE, + EC_MOVE(WITHDRAW), + EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS, + 0xFFFF, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_HIKER, + .name = _("VITUS"), + .teamFlags = 0x04, + .greeting = { + .easyChat = { + EC_WORD_YAHOO, + EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS, + EC_WORD_LISTENS, + EC_WORD_HER, + EC_WORD_TO, + EC_WORD_QUES, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_EXPERT_M, + .name = _("MALTE"), + .teamFlags = 0x10, + .greeting = { + .easyChat = { + EC_WORD_LEARN, + EC_WORD_CORRECT, + EC_WORD_TO, + EC_WORD_FIGHT, + 0xFFFF, + 0xFFFF, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_POKEMON_BREEDER_M, + .name = _("TIM"), + .teamFlags = 0x40, + .greeting = { + .easyChat = { + EC_WORD_IT_S, + EC_WORD_A, + EC_WORD_FIGHTING, + EC_WORD_NONE, + EC_WORD_CHILD_S_PLAY, + EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_GUITARIST, + .name = _("GAVIN"), + .teamFlags = 0x01, + .greeting = { + .easyChat = { + EC_WORD_SHADY, + EC_WORD_BABY, + EC_WORD_BABY, + EC_WORD_BABY, + 0xFFFF, + 0xFFFF, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_PSYCHIC_M, + .name = _("RALF"), + .teamFlags = 0x08, + .greeting = { + .easyChat = { + EC_WORD_STICKY_HOLD, + EC_WORD_THOSE, + EC_WORD_IMPORTANT, + EC_WORD_ISN_T_IT_QUES, + 0xFFFF, + 0xFFFF, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_COOL_TRAINER_F, + .name = _("JENNY"), + .teamFlags = 0x02, + .greeting = { + .easyChat = { + EC_WORD_I, + EC_WORD_SEARCH, + EC_WORD_TRAINER, + EC_WORD_ABSOLUTELY, + EC_WORD_TOUGH, + EC_WORD_THOSE, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_EXPERT_M, + .name = _("JOEL"), + .teamFlags = 0x10, + .greeting = { + .easyChat = { + EC_WORD_BELIEVE, + EC_WORD_ON, + EC_WORD_YOURS, + EC_WORD_POKEMON, + EC_WORD_AND, + EC_WORD_WIN, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_DRAGON_TAMER, + .name = _("KOLJA"), + .teamFlags = 0x0C, + .greeting = { + .easyChat = { + EC_WORD_GIRL, + EC_WORD_WITH, + EC_MOVE2(FORESIGHT), + EC_WORD_THOSE, + EC_WORD_NICE, + 0xFFFF, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_COOL_TRAINER_M, + .name = _("BILL"), + .teamFlags = 0x01, + .greeting = { + .easyChat = { + EC_WORD_WHO_WAS, + EC_WORD_POWER, + EC_WORD_IS, + EC_WORD_OVERWHELMING, + EC_WORD_DISAPPEAR, + EC_WORD_BETTER, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_EXPERT_F, + .name = _("CALLA"), + .teamFlags = 0x10, + .greeting = { + .easyChat = { + EC_WORD_TRAINER, + EC_WORD_YOU, + EC_WORD_ARE, + EC_WORD_SEEMS, + EC_WORD_CAPABLE, + EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_LADY, + .name = _("GESA"), + .teamFlags = 0x02, + .greeting = { + .easyChat = { + EC_WORD_COME_ON, + EC_WORD_ABSOLUTELY, + EC_WORD_TIME, + EC_WORD_BECOMES, + EC_WORD_EXCELLENT, + 0xFFFF, + }, + }, + }, +}; -- cgit v1.2.3 From 979f8be280dfdabbfb166b25c10e0be03e06bcc2 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Wed, 1 Nov 2017 22:15:37 -0700 Subject: Decompile german functions in battle_tower --- src/battle_tower.c | 216 +++++++++++++++++++++-------------------------------- 1 file changed, 87 insertions(+), 129 deletions(-) (limited to 'src') diff --git a/src/battle_tower.c b/src/battle_tower.c index a577e1402..ce928e33f 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -820,92 +820,90 @@ void sub_8134AB4() sub_81349FC(200); } -#ifdef NONMATCHING -void sub_8134AC0(struct BattleTowerRecord *record) -{ - u16 var1[6]; - u16 var2[6]; - s32 i, j, k; - s16 l = 0; +// void sub_8134AC0(struct BattleTowerRecord *record) +// { +// u16 var1[6]; +// u16 var2[6]; +// s32 i, j, k; +// s16 l = 0; - for (i = 0; i < 5; i++) - { - k = 0; - for (j = 0; j < 4 && gSaveBlock2.battleTower.records[i].trainerId[j] == record->trainerId[j]; j++); - if (j == 4) - { - for (; k < 7 && gSaveBlock2.battleTower.records[i].name[4] == record->name[4]; k++) - { - if (record->name[4] == 0xFF) - { - k = 7; - break; - } - } - } +// for (i = 0; i < 5; i++) +// { +// k = 0; +// for (j = 0; j < 4 && gSaveBlock2.battleTower.records[i].trainerId[j] == record->trainerId[j]; j++); +// if (j == 4) +// { +// for (; k < 7 && gSaveBlock2.battleTower.records[i].name[4] == record->name[4]; k++) +// { +// if (record->name[4] == 0xFF) +// { +// k = 7; +// break; +// } +// } +// } - if (k == 7) - { - break; - } - } +// if (k == 7) +// { +// break; +// } +// } - if (i < 5) - { - gSaveBlock2.battleTower.records[i] = *record; - return; - } +// if (i < 5) +// { +// gSaveBlock2.battleTower.records[i] = *record; +// return; +// } - i = 0; - while (i < 5) - { - if (gSaveBlock2.battleTower.records[i].var_2 == 0) - { - if (i > 4) - { - break; - } +// i = 0; +// while (i < 5) +// { +// if (gSaveBlock2.battleTower.records[i].var_2 == 0) +// { +// if (i > 4) +// { +// break; +// } - gSaveBlock2.battleTower.records[i] = *record; - return; - } +// gSaveBlock2.battleTower.records[i] = *record; +// return; +// } - i++; - } +// i++; +// } - var1[0] = gSaveBlock2.battleTower.records[0].var_2; - var2[0] = 0; - l++; +// var1[0] = gSaveBlock2.battleTower.records[0].var_2; +// var2[0] = 0; +// l++; - for (i = 1; i < 5; i++) - { - j = 0; - if (j < l) - { - for (; gSaveBlock2.battleTower.records[i].var_2 <= var1[j]; j++) - { - if (gSaveBlock2.battleTower.records[i].var_2 < var1[j]) - { - j = 0; - l = 1; - var1[0] = gSaveBlock2.battleTower.records[i].var_2; - var2[0] = i; - break; - } - } - } +// for (i = 1; i < 5; i++) +// { +// j = 0; +// if (j < l) +// { +// for (; gSaveBlock2.battleTower.records[i].var_2 <= var1[j]; j++) +// { +// if (gSaveBlock2.battleTower.records[i].var_2 < var1[j]) +// { +// j = 0; +// l = 1; +// var1[0] = gSaveBlock2.battleTower.records[i].var_2; +// var2[0] = i; +// break; +// } +// } +// } - if (j == l) - { - var1[l] = gSaveBlock2.battleTower.records[i].var_2; - var2[l] = i; - l++; - } - } +// if (j == l) +// { +// var1[l] = gSaveBlock2.battleTower.records[i].var_2; +// var2[l] = i; +// l++; +// } +// } - gSaveBlock2.battleTower.records[var2[(Random() % l)]] = *record; -} -#else +// gSaveBlock2.battleTower.records[var2[(Random() % l)]] = *record; +// } __attribute__((naked)) void sub_8134AC0(struct BattleTowerRecord *record) { @@ -1141,7 +1139,6 @@ _08134C5E:\n\ _08134C70: .4byte gSaveBlock2\n\ .syntax divided\n"); } -#endif // NONMATCHING u8 get_trainer_class_pic_index(void) { @@ -2351,63 +2348,24 @@ void sub_813610C(void) } #if GERMAN -__attribute__((naked)) u8 de_sub_81364AC(void) { - asm(".syntax unified\n\ - push {lr}\n\ - ldr r2, _DE_081364C0 @ =gSaveBlock2\n\ - ldr r0, _DE_081364C4 @ =0x00000564\n\ - adds r1, r2, r0\n\ - ldrb r0, [r1]\n\ - cmp r0, 0xC8\n\ - bne _DE_081364CC\n\ - ldr r1, _DE_081364C8 @ =0x00000499\n\ - adds r0, r2, r1\n\ - b _DE_081364F2\n\ - .align 2, 0\n\ -_DE_081364C0: .4byte gSaveBlock2\n\ -_DE_081364C4: .4byte 0x00000564\n\ -_DE_081364C8: .4byte 0x00000499\n\ -_DE_081364CC:\n\ - cmp r0, 0x63\n\ - bhi _DE_081364E4\n\ - ldr r2, _DE_081364E0 @ =gBattleTowerTrainers\n\ - ldrb r1, [r1]\n\ - lsls r0, r1, 1\n\ - adds r0, r1\n\ - lsls r0, 3\n\ - adds r0, r2\n\ - b _DE_081364F2\n\ - .align 2, 0\n\ -_DE_081364E0: .4byte gBattleTowerTrainers\n\ -_DE_081364E4:\n\ - ldrb r0, [r1]\n\ - subs r0, 0x64\n\ - movs r1, 0xA4\n\ - muls r0, r1\n\ - adds r0, r2\n\ - adds r1, 0xA9\n\ - adds r0, r1\n\ -_DE_081364F2:\n\ - ldrb r0, [r0]\n\ - pop {r1}\n\ - bx r1\n\ -.syntax divided\n"); + if (gSaveBlock2.battleTower.battleTowerTrainerId == 200) + { + return gSaveBlock2.battleTower.ereaderTrainer.trainerClass; + } + else if (gSaveBlock2.battleTower.battleTowerTrainerId >= 100) + { + return gSaveBlock2.battleTower.records[gSaveBlock2.battleTower.battleTowerTrainerId - 100].trainerClass; + } + else + { + return gBattleTowerTrainers[gSaveBlock2.battleTower.battleTowerTrainerId].trainerClass; + } } -__attribute__((naked)) u8 de_sub_81364F8(void) { - asm(".syntax unified\n\ - ldr r0, _DE_08136504 @ =gSaveBlock2\n\ - ldr r1, _DE_08136508 @ =0x00000499\n\ - adds r0, r1\n\ - ldrb r0, [r0]\n\ - bx lr\n\ - .align 2, 0\n\ -_DE_08136504: .4byte gSaveBlock2\n\ -_DE_08136508: .4byte 0x00000499\n\ -.syntax divided\n"); + return gSaveBlock2.battleTower.ereaderTrainer.trainerClass; } #endif -- cgit v1.2.3 From c5cda9f16442780794852af54635f6526c4c031a Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Wed, 1 Nov 2017 23:52:26 -0700 Subject: Use descriptive variable and function names for battle_tower code --- src/battle/battle_controller_opponent.c | 4 +- src/battle/battle_message.c | 4 +- src/battle_tower.c | 391 ++++++++++----------- src/data/battle_tower/level_100_mons.h | 600 ++++++++++++++++---------------- src/data/battle_tower/level_50_mons.h | 600 ++++++++++++++++---------------- src/de_rom_8040FE0.c | 4 +- src/debug/unknown_debug_menu.c | 8 +- src/engine/mystery_event_script.c | 2 +- src/field/choose_party.c | 6 +- src/field/field_specials.c | 2 +- src/field/tv.c | 3 +- 11 files changed, 813 insertions(+), 811 deletions(-) (limited to 'src') diff --git a/src/battle/battle_controller_opponent.c b/src/battle/battle_controller_opponent.c index b6ada3b7b..09b6bf812 100644 --- a/src/battle/battle_controller_opponent.c +++ b/src/battle/battle_controller_opponent.c @@ -1222,7 +1222,7 @@ void OpponentHandleTrainerThrow(void) else if (gBattleTypeFlags & BATTLE_TYPE_BATTLE_TOWER) trainerPicIndex = get_trainer_class_pic_index(); else if (gBattleTypeFlags & BATTLE_TYPE_EREADER_TRAINER) - trainerPicIndex = sub_8135FBC(); + trainerPicIndex = GetEReaderTrainerPicIndex(); else trainerPicIndex = gTrainers[gTrainerBattleOpponent].trainerPic; @@ -1252,7 +1252,7 @@ void OpponentHandleTrainerSlide(void) else if (gBattleTypeFlags & BATTLE_TYPE_BATTLE_TOWER) trainerPicIndex = get_trainer_class_pic_index(); else if (gBattleTypeFlags & BATTLE_TYPE_EREADER_TRAINER) - trainerPicIndex = sub_8135FBC(); + trainerPicIndex = GetEReaderTrainerPicIndex(); else trainerPicIndex = gTrainers[gTrainerBattleOpponent].trainerPic; diff --git a/src/battle/battle_message.c b/src/battle/battle_message.c index 9df153e0a..79855a614 100644 --- a/src/battle/battle_message.c +++ b/src/battle/battle_message.c @@ -632,7 +632,7 @@ u32 StrCpyDecodeBattle(const u8* src, u8* dst) else if (gBattleTypeFlags & BATTLE_TYPE_BATTLE_TOWER) toCpy = gTrainerClassNames[get_trainer_class_name_index()]; else if (gBattleTypeFlags & BATTLE_TYPE_EREADER_TRAINER) - toCpy = gTrainerClassNames[sub_8135FD8()]; + toCpy = gTrainerClassNames[GetEReaderTrainerClassNameIndex()]; else toCpy = gTrainerClassNames[gTrainers[gTrainerBattleOpponent].trainerClass]; break; @@ -661,7 +661,7 @@ u32 StrCpyDecodeBattle(const u8* src, u8* dst) } else if (gBattleTypeFlags & BATTLE_TYPE_EREADER_TRAINER) { - sub_8135FF4(text); + SetEReaderTrainerName(text); toCpy = text; } else diff --git a/src/battle_tower.c b/src/battle_tower.c index ce928e33f..91e223216 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -31,7 +31,7 @@ #include "data/battle_tower/trainers_de.h" #endif -const u16 gBattleTowerHeldItems[] = { +static const u16 sBattleTowerHeldItems[] = { ITEM_NONE, ITEM_KINGS_ROCK, ITEM_SITRUS_BERRY, @@ -100,63 +100,63 @@ const u16 gBattleTowerHeldItems[] = { #include "data/battle_tower/level_50_mons.h" #include "data/battle_tower/level_100_mons.h" -const u8 gUnknown_08405E60[] = { - 4, - 7, - 8, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 23, - 29, - 32, - 34, - 36, - 38, - 39, - 41, - 43, - 45, - 46, - 47, - 53, - 56, - 64, - 66, - 72, - 73, +static const u8 sMaleTrainerClasses[] = { + TRAINER_CLASS_RUIN_MANIAC, + TRAINER_CLASS_TUBER_M, + TRAINER_CLASS_COOL_TRAINER_M, + TRAINER_CLASS_RICH_BOY, + TRAINER_CLASS_POKEMANIAC, + TRAINER_CLASS_SWIMMER_M, + TRAINER_CLASS_BLACK_BELT, + TRAINER_CLASS_GUITARIST, + TRAINER_CLASS_KINDLER, + TRAINER_CLASS_CAMPER, + TRAINER_CLASS_BUG_MANIAC, + TRAINER_CLASS_PSYCHIC_M, + TRAINER_CLASS_GENTLEMAN, + TRAINER_CLASS_SCHOOL_KID_M, + TRAINER_CLASS_POKEFAN_M, + TRAINER_CLASS_EXPERT_M, + TRAINER_CLASS_YOUNGSTER, + TRAINER_CLASS_FISHERMAN, + TRAINER_CLASS_CYCLING_TRIATHLETE_M, + TRAINER_CLASS_RUNNING_TRIATHLETE_M, + TRAINER_CLASS_SWIMMING_TRIATHLETE_M, + TRAINER_CLASS_DRAGON_TAMER, + TRAINER_CLASS_BIRD_KEEPER, + TRAINER_CLASS_NINJA_BOY, + TRAINER_CLASS_SAILOR, + TRAINER_CLASS_COLLECTOR, + TRAINER_CLASS_POKEMON_BREEDER_M, + TRAINER_CLASS_POKEMON_RANGER_M, + TRAINER_CLASS_BUG_CATCHER, + TRAINER_CLASS_HIKER, }; -const u8 gUnknown_08405E7E[] = { - 3, - 6, - 9, - 10, - 11, - 12, - 22, - 30, - 33, - 35, - 40, - 42, - 44, - 48, - 49, - 50, - 51, - 65, - 67, - 71, +static const u8 sFemaleTrainerClasses[] = { + TRAINER_CLASS_AROMA_LADY, + TRAINER_CLASS_TUBER_F, + TRAINER_CLASS_COOL_TRAINER_F, + TRAINER_CLASS_HEX_MANIAC, + TRAINER_CLASS_LADY, + TRAINER_CLASS_BEAUTY, + TRAINER_CLASS_PSYCHIC_F, + TRAINER_CLASS_SCHOOL_KID_F, + TRAINER_CLASS_POKEFAN_F, + TRAINER_CLASS_EXPERT_F, + TRAINER_CLASS_CYCLING_TRIATHLETE_F, + TRAINER_CLASS_RUNNING_TRIATHLETE_F, + TRAINER_CLASS_SWIMMING_TRIATHLETE_F, + TRAINER_CLASS_BATTLE_GIRL, + TRAINER_CLASS_PARASOL_LADY, + TRAINER_CLASS_SWIMMER_F, + TRAINER_CLASS_PICNICKER, + TRAINER_CLASS_POKEMON_BREEDER_F, + TRAINER_CLASS_POKEMON_RANGER_F, + TRAINER_CLASS_LASS, }; -const u8 gUnknown_08405E92[] = { +static const u8 sMaleTrainerGfxIds[] = { MAP_OBJ_GFX_HIKER, MAP_OBJ_GFX_TUBER_M, MAP_OBJ_GFX_MAN_4, @@ -189,7 +189,7 @@ const u8 gUnknown_08405E92[] = { MAP_OBJ_GFX_HIKER, }; -const u8 gUnknown_08405EB0[] = { +static const u8 sFemaleTrainerGfxIds[] = { MAP_OBJ_GFX_WOMAN_3, MAP_OBJ_GFX_TUBER_F, MAP_OBJ_GFX_WOMAN_7, @@ -212,7 +212,7 @@ const u8 gUnknown_08405EB0[] = { MAP_OBJ_GFX_LASS, }; -const u16 gBattleTowerBanlist[] = { +const u16 gBattleTowerBannedSpecies[] = { SPECIES_MEW, SPECIES_MEWTWO, SPECIES_HO_OH, @@ -227,7 +227,7 @@ const u16 gBattleTowerBanlist[] = { }; // Item prizes for battle tower streaks of 5 or fewer sets. -const u16 ShortStreakPrizes[] = { +/*static*/ const u16 sShortStreakPrizes[] = { ITEM_HP_UP, ITEM_PROTEIN, ITEM_IRON, @@ -237,7 +237,7 @@ const u16 ShortStreakPrizes[] = { }; // Item prizes for battle tower streaks of greater than 5 sets. -const u16 LongStreakPrizes[] = { +/*static*/ const u16 sLongStreakPrizes[] = { ITEM_BRIGHT_POWDER, ITEM_WHITE_HERB, ITEM_QUICK_CLAW, @@ -249,35 +249,35 @@ const u16 LongStreakPrizes[] = { ITEM_CHOICE_BAND, }; +static void ResetBattleTowerStreak(u8 levelType); +static void ValidateBattleTowerRecordChecksums(void); +static void PrintEReaderTrainerFarewellMessage(void); +extern void SetBattleTowerTrainerGfxId(u8); +extern void sub_8135A3C(void); +static void sub_8135CFC(void); +static void CheckMonBattleTowerBanlist(u16, u16, u16, u8, u8, u16 *, u16 *, u8 *); +static void ClearEReaderTrainer(struct BattleTowerEReaderTrainer *); +static void SetEReaderTrainerChecksum(struct BattleTowerEReaderTrainer *ereaderTrainer); +static void SetBattleTowerRecordChecksum(struct BattleTowerRecord *); +static void ClearBattleTowerRecord(struct BattleTowerRecord *); + +extern const u8 gUnknown_08400E23[]; +extern const u8 gUnknown_08400E29[]; extern const u8 gUnknown_08400E2C[]; +extern const u8 gUnknown_08400E2E[]; +extern const u8 gUnknown_08400E30[]; extern const u8 gUnknown_08400E32[]; extern const u8 gUnknown_08400E36[]; -extern void sub_81360D0(void); extern u16 gSpecialVar_0x8004; -extern u8 gUnknown_08400E23[]; -extern u8 gUnknown_08400E29[]; -extern u8 gUnknown_08400E2E[]; -extern u8 gUnknown_08400E30[]; - extern u8 gTrainerClassToPicIndex[]; extern u8 gTrainerClassToNameIndex[]; extern u16 gTrainerBattleOpponent; extern u16 gBattleTypeFlags; extern u8 gSelectedOrderFromParty[]; -extern struct Pokemon gUnknown_030042FC[]; extern u8 gBattleOutcome; +extern struct Pokemon gUnknown_030042FC[]; extern struct BattlePokemon gBattleMons[]; -extern void ValidateBattleTowerRecordChecksums(void); -extern void sub_81349FC(u8); -extern void sub_8135A3C(void); -extern void sub_8135CFC(void); -extern void CheckMonBattleTowerBanlist(u16, u16, u16, u8, u8, u16 *, u16 *, u8 *); -static void ClearEReaderTrainer(struct BattleTowerEReaderTrainer *); -static void SetEReaderTrainerChecksum(struct BattleTowerEReaderTrainer *ereaderTrainer); -static void SetBattleTowerRecordChecksum(struct BattleTowerRecord *); -static void ClearBattleTowerRecord(struct BattleTowerRecord *); - #define ewram160FB (ewram[0x160FB]) @@ -292,14 +292,14 @@ void sub_8134548(void) { case 0: default: - sub_813461C(levelType); + ResetBattleTowerStreak(levelType); if (!var1) { VarSet(VAR_0x4000, 5); } break; case 1: - sub_813461C(levelType); + ResetBattleTowerStreak(levelType); VarSet(VAR_0x4000, 1); var1++; break; @@ -330,14 +330,15 @@ void sub_8134548(void) ValidateBattleTowerRecordChecksums(); } -void sub_813461C(u8 levelType) +void ResetBattleTowerStreak(u8 levelType) { gSaveBlock2.battleTower.var_4AE[levelType] = 0; - gSaveBlock2.battleTower.curChallengeWins[levelType] = 1; - gSaveBlock2.battleTower.curStreakChallengesCompleted[levelType] = 1; + gSaveBlock2.battleTower.curChallengeBattleNum[levelType] = 1; + gSaveBlock2.battleTower.curStreakChallengesNum[levelType] = 1; } -u8 sub_8134650(u8 levelType, u16 b) +// Checks if the next trainer in Battle Tower should be the E-Reader trainer. +bool8 ShouldBattleEReaderTrainer(u8 levelType, u16 winStreak) { u8 trainerTeamLevel; u8 monLevel; @@ -348,11 +349,11 @@ u8 sub_8134650(u8 levelType, u16 b) numValid = 0; - sub_813601C(); + ValidateEReaderTrainer(); - if (gScriptResult != 0 || gSaveBlock2.battleTower.ereaderTrainer.var_2 != b) + if (gScriptResult != 0 || gSaveBlock2.battleTower.ereaderTrainer.winStreak != winStreak) { - return 0; + return FALSE; } trainerTeamLevel = 50; @@ -366,7 +367,7 @@ u8 sub_8134650(u8 levelType, u16 b) monLevel = gSaveBlock2.battleTower.ereaderTrainer.party[i].level; if (gSaveBlock2.battleTower.ereaderTrainer.party[i].level != trainerTeamLevel) { - return 0; + return FALSE; } CheckMonBattleTowerBanlist( @@ -385,7 +386,7 @@ u8 sub_8134650(u8 levelType, u16 b) bool8 sub_81346F4(void) { - s32 recordIndex, j; + s32 recordIndex, i; u8 battleTowerLevelType; u16 winStreak; bool8 retVal; @@ -395,27 +396,28 @@ bool8 sub_81346F4(void) numCandidates = 0; battleTowerLevelType = gSaveBlock2.battleTower.battleTowerLevelType; - winStreak = sub_8135D3C(battleTowerLevelType); - if (sub_8134650(battleTowerLevelType, winStreak)) + winStreak = GetCurrentBattleTowerWinStreak(battleTowerLevelType); + if (ShouldBattleEReaderTrainer(battleTowerLevelType, winStreak)) { - gSaveBlock2.battleTower.battleTowerTrainerId = 0xC8; + gSaveBlock2.battleTower.battleTowerTrainerId = 200; retVal = TRUE; } else { + // Check if one of the battle tower trainers from record mixing should be the next trainer. for (recordIndex = 0; recordIndex < 5; recordIndex++) { struct BattleTowerRecord *record = &gSaveBlock2.battleTower.records[recordIndex]; u32 recordHasData = 0; u32 checksum = 0; - for (j = 0; j < sizeof(struct BattleTowerRecord) / sizeof(u32) - 1; j++) + for (i = 0; i < sizeof(struct BattleTowerRecord) / sizeof(u32) - 1; i++) { - recordHasData |= ((u32 *)record)[j]; - checksum += ((u32 *)record)[j]; + recordHasData |= ((u32 *)record)[i]; + checksum += ((u32 *)record)[i]; } - if (gSaveBlock2.battleTower.records[recordIndex].var_2 == winStreak - && gSaveBlock2.battleTower.records[recordIndex].var_0 == battleTowerLevelType + if (gSaveBlock2.battleTower.records[recordIndex].winStreak == winStreak + && gSaveBlock2.battleTower.records[recordIndex].battleTowerLevelType == battleTowerLevelType && recordHasData && gSaveBlock2.battleTower.records[recordIndex].checksum == checksum) { @@ -443,24 +445,24 @@ bool8 sub_81346F4(void) // bool8 levelType = gSaveBlock2.battleTower.battleTowerLevelType; // if (sub_81346F4()) // { -// sub_81349FC(gSaveBlock2.battleTower.battleTowerTrainerId); -// gSaveBlock2.battleTower.var_4C1[gSaveBlock2.battleTower.curChallengeWins[levelType]] = gSaveBlock2.battleTower.battleTowerTrainerId; +// SetBattleTowerTrainerGfxId(gSaveBlock2.battleTower.battleTowerTrainerId); +// gSaveBlock2.battleTower.var_4C1[gSaveBlock2.battleTower.curChallengeBattleNum[levelType]] = gSaveBlock2.battleTower.battleTowerTrainerId; // } // else // { // u16 var1; -// if (gSaveBlock2.battleTower.curStreakChallengesCompleted[levelType] > 7) +// if (gSaveBlock2.battleTower.curStreakChallengesNum[levelType] > 7) // { // while (1) // { // s32 i; // u32 temp = ((Random() & 0xFF) * 30) >> 8; // var1 = temp + 70; -// for (i = 0; i < gSaveBlock2.battleTower.curChallengeWins[levelType] - 1 && var1 != gSaveBlock2.battleTower.var_4C1[i]; i++) // TODO: [i + 1]??? +// for (i = 0; i < gSaveBlock2.battleTower.curChallengeBattleNum[levelType] - 1 && var1 != gSaveBlock2.battleTower.var_4C1[i]; i++) // TODO: [i + 1]??? // { } -// if (i == gSaveBlock2.battleTower.curChallengeWins[levelType] - 1) +// if (i == gSaveBlock2.battleTower.curChallengeBattleNum[levelType] - 1) // { // break; // } @@ -468,18 +470,18 @@ bool8 sub_81346F4(void) // } // else // { -// if (gSaveBlock2.battleTower.curChallengeWins[levelType] == 7) +// if (gSaveBlock2.battleTower.curChallengeBattleNum[levelType] == 7) // { // while (1) // { // s32 i; // u32 temp = ((Random() & 0xFF) * 5); -// u32 temp2 = (((gSaveBlock2.battleTower.curStreakChallengesCompleted[levelType] - 1) * 10) + 20); +// u32 temp2 = (((gSaveBlock2.battleTower.curStreakChallengesNum[levelType] - 1) * 10) + 20); // var1 = temp / 128 + temp2; -// for (i = 0; i < gSaveBlock2.battleTower.curChallengeWins[levelType] - 1 && gSaveBlock2.battleTower.var_4C1[i] != var1; i++) // TODO: [i + 1]???? +// for (i = 0; i < gSaveBlock2.battleTower.curChallengeBattleNum[levelType] - 1 && gSaveBlock2.battleTower.var_4C1[i] != var1; i++) // TODO: [i + 1]???? // { } -// if (i == gSaveBlock2.battleTower.curChallengeWins[levelType] - 1) +// if (i == gSaveBlock2.battleTower.curChallengeBattleNum[levelType] - 1) // { // break; // } @@ -491,12 +493,12 @@ bool8 sub_81346F4(void) // { // s32 i; // u32 temp = ((Random() & 0xFF) * 320); -// u32 temp2 = ((gSaveBlock2.battleTower.curStreakChallengesCompleted[levelType] - 1) * 10); +// u32 temp2 = ((gSaveBlock2.battleTower.curStreakChallengesNum[levelType] - 1) * 10); // var1 = temp + temp2; -// for (i = 0; i < gSaveBlock2.battleTower.curChallengeWins[levelType] - 1 && gSaveBlock2.battleTower.var_4C1[i] != var1; i++) +// for (i = 0; i < gSaveBlock2.battleTower.curChallengeBattleNum[levelType] - 1 && gSaveBlock2.battleTower.var_4C1[i] != var1; i++) // { } -// if (i == gSaveBlock2.battleTower.curChallengeWins[levelType] - 1) +// if (i == gSaveBlock2.battleTower.curChallengeBattleNum[levelType] - 1) // { // break; // } @@ -505,11 +507,11 @@ bool8 sub_81346F4(void) // } // gSaveBlock2.battleTower.battleTowerTrainerId = var1; -// sub_81349FC(gSaveBlock2.battleTower.battleTowerTrainerId); +// SetBattleTowerTrainerGfxId(gSaveBlock2.battleTower.battleTowerTrainerId); -// if (gSaveBlock2.battleTower.curChallengeWins[levelType] < 7) +// if (gSaveBlock2.battleTower.curChallengeBattleNum[levelType] < 7) // { -// gSaveBlock2.battleTower.var_4C1[gSaveBlock2.battleTower.curChallengeWins[levelType]] = gSaveBlock2.battleTower.battleTowerTrainerId; +// gSaveBlock2.battleTower.var_4C1[gSaveBlock2.battleTower.curChallengeBattleNum[levelType]] = gSaveBlock2.battleTower.battleTowerTrainerId; // } // } // } @@ -536,7 +538,7 @@ void sub_81347F8(void) ldr r2, _08134840 @ =0x00000564\n\ adds r4, r5, r2\n\ ldrb r0, [r4]\n\ - bl sub_81349FC\n\ + bl SetBattleTowerTrainerGfxId\n\ lsls r0, r6, 1\n\ movs r3, 0xAB\n\ lsls r3, 3\n\ @@ -748,7 +750,7 @@ _081349B6:\n\ ldr r2, _081349F4 @ =0x00000564\n\ adds r5, r4, r2\n\ ldrb r0, [r5]\n\ - bl sub_81349FC\n\ + bl SetBattleTowerTrainerGfxId\n\ movs r3, 0xAB\n\ lsls r3, 3\n\ adds r0, r4, r3\n\ @@ -778,7 +780,7 @@ _081349F8: .4byte 0x00000569\n\ .syntax divided\n"); } -void sub_81349FC(u8 trainerIndex) +void SetBattleTowerTrainerGfxId(u8 trainerIndex) { u32 i; u8 trainerClass; @@ -796,18 +798,18 @@ void sub_81349FC(u8 trainerIndex) trainerClass = gSaveBlock2.battleTower.ereaderTrainer.trainerClass; } - for (i = 0; i < 30 && gUnknown_08405E60[i] != trainerClass; i++); + for (i = 0; i < 30 && sMaleTrainerClasses[i] != trainerClass; i++); if (i != 30) { - u8 trainerObjectGfxId = gUnknown_08405E92[i]; + u8 trainerObjectGfxId = sMaleTrainerGfxIds[i]; VarSet(0x4010, trainerObjectGfxId); return; } - for (i = 0; i < 20 && gUnknown_08405E7E[i] != trainerClass; i++); + for (i = 0; i < 20 && sFemaleTrainerClasses[i] != trainerClass; i++); if (i != 20) { - u8 trainerObjectGfxId = gUnknown_08405EB0[i]; + u8 trainerObjectGfxId = sFemaleTrainerGfxIds[i]; VarSet(0x4010, trainerObjectGfxId); return; } @@ -815,9 +817,9 @@ void sub_81349FC(u8 trainerIndex) VarSet(0x4010, MAP_OBJ_GFX_BOY_1); } -void sub_8134AB4() +void SetEReaderTrainerGfxId() { - sub_81349FC(200); + SetBattleTowerTrainerGfxId(200); } // void sub_8134AC0(struct BattleTowerRecord *record) @@ -858,7 +860,7 @@ void sub_8134AB4() // i = 0; // while (i < 5) // { -// if (gSaveBlock2.battleTower.records[i].var_2 == 0) +// if (gSaveBlock2.battleTower.records[i].winStreak == 0) // { // if (i > 4) // { @@ -872,7 +874,7 @@ void sub_8134AB4() // i++; // } -// var1[0] = gSaveBlock2.battleTower.records[0].var_2; +// var1[0] = gSaveBlock2.battleTower.records[0].winStreak; // var2[0] = 0; // l++; @@ -881,13 +883,13 @@ void sub_8134AB4() // j = 0; // if (j < l) // { -// for (; gSaveBlock2.battleTower.records[i].var_2 <= var1[j]; j++) +// for (; gSaveBlock2.battleTower.records[i].winStreak <= var1[j]; j++) // { -// if (gSaveBlock2.battleTower.records[i].var_2 < var1[j]) +// if (gSaveBlock2.battleTower.records[i].winStreak < var1[j]) // { // j = 0; // l = 1; -// var1[0] = gSaveBlock2.battleTower.records[i].var_2; +// var1[0] = gSaveBlock2.battleTower.records[i].winStreak; // var2[0] = i; // break; // } @@ -896,7 +898,7 @@ void sub_8134AB4() // if (j == l) // { -// var1[l] = gSaveBlock2.battleTower.records[i].var_2; +// var1[l] = gSaveBlock2.battleTower.records[i].winStreak; // var2[l] = i; // l++; // } @@ -1329,7 +1331,7 @@ void FillBattleTowerTrainerParty(void) for (i = 0; i < partyIndex; i++) { if (GetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, NULL) != 0 - && GetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, NULL) == gBattleTowerHeldItems[battleTowerMons[battleMonIndex].item]) + && GetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, NULL) == sBattleTowerHeldItems[battleTowerMons[battleMonIndex].heldItem]) { break; } @@ -1368,7 +1370,7 @@ void FillBattleTowerTrainerParty(void) } SetMonData(&gEnemyParty[partyIndex], MON_DATA_FRIENDSHIP, &friendship); - SetMonData(&gEnemyParty[partyIndex], MON_DATA_HELD_ITEM, (u8 *)&gBattleTowerHeldItems[battleTowerMons[battleMonIndex].item]); + SetMonData(&gEnemyParty[partyIndex], MON_DATA_HELD_ITEM, (u8 *)&sBattleTowerHeldItems[battleTowerMons[battleMonIndex].heldItem]); // The pokemon was successfully added to the trainer's party, so it's safe to move on to // the next party slot. @@ -1383,9 +1385,9 @@ u32 CountBattleTowerBanlistCaught() s32 i; u32 numCaught = 0; - for (i = 0; gBattleTowerBanlist[i] != 0xFFFF; i++) + for (i = 0; gBattleTowerBannedSpecies[i] != 0xFFFF; i++) { - if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(gBattleTowerBanlist[i]), FLAG_GET_CAUGHT)) + if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(gBattleTowerBannedSpecies[i]), FLAG_GET_CAUGHT)) { numCaught++; } @@ -1463,16 +1465,16 @@ void CheckMonBattleTowerBanlist(u16 species, u16 heldItem, u16 hp, u8 battleTowe while (1) { - if (gBattleTowerBanlist[counter] == 0xFFFF) - goto EXIT2; + if (gBattleTowerBannedSpecies[counter] == 0xFFFF) + goto EXIT2; // Couldn't get the code to match without this GOTO - if (gBattleTowerBanlist[counter] == species) + if (gBattleTowerBannedSpecies[counter] == species) break; counter++; } - if (gBattleTowerBanlist[counter] != 0xFFFF) + if (gBattleTowerBannedSpecies[counter] != 0xFFFF) return; EXIT2: @@ -1527,9 +1529,9 @@ void CheckPartyBattleTowerBanlist(void) numBanlistCaught = CountBattleTowerBanlistCaught(); - for (i = 0; gBattleTowerBanlist[i] != 0xFFFF; i++) + for (i = 0; gBattleTowerBannedSpecies[i] != 0xFFFF; i++) { - counter = AppendBattleTowerBannedSpeciesName(gBattleTowerBanlist[i], counter, numBanlistCaught); + counter = AppendBattleTowerBannedSpeciesName(gBattleTowerBannedSpecies[i], counter, numBanlistCaught); } if (counter == 0) @@ -1553,24 +1555,24 @@ void CheckPartyBattleTowerBanlist(void) } } -void sub_813545C(u16 *easyChat) +void PrintBattleTowerTrainerMessage(u16 *easyChat) { sub_80EB544(gStringVar4, easyChat, 2, 3); } -void sub_8135474(void) +void PrintBattleTowerTrainerGreeting(void) { if (gSaveBlock2.battleTower.battleTowerTrainerId == 200) { - sub_813545C(gSaveBlock2.battleTower.ereaderTrainer.greeting.easyChat); + PrintBattleTowerTrainerMessage(gSaveBlock2.battleTower.ereaderTrainer.greeting.easyChat); } else if (gSaveBlock2.battleTower.battleTowerTrainerId < 100) { - sub_813545C((u16 *)gBattleTowerTrainers[gSaveBlock2.battleTower.battleTowerTrainerId].greeting.easyChat); + PrintBattleTowerTrainerMessage((u16 *)gBattleTowerTrainers[gSaveBlock2.battleTower.battleTowerTrainerId].greeting.easyChat); } else { - sub_813545C(gSaveBlock2.battleTower.records[gSaveBlock2.battleTower.battleTowerTrainerId - 100].greeting.easyChat); + PrintBattleTowerTrainerMessage(gSaveBlock2.battleTower.records[gSaveBlock2.battleTower.battleTowerTrainerId - 100].greeting.easyChat); } } @@ -1591,7 +1593,7 @@ void sub_81354CC(void) } break; case 2: - sub_81360D0(); + PrintEReaderTrainerFarewellMessage(); break; } @@ -1673,10 +1675,10 @@ void sub_8135668(void) gSaveBlock2.battleTower.battleTowerLevelType = gSpecialVar_0x8005; break; case 2: - gSaveBlock2.battleTower.curChallengeWins[battleTowerLevelType] = gSpecialVar_0x8005; + gSaveBlock2.battleTower.curChallengeBattleNum[battleTowerLevelType] = gSpecialVar_0x8005; break; case 3: - gSaveBlock2.battleTower.curStreakChallengesCompleted[battleTowerLevelType] = gSpecialVar_0x8005; + gSaveBlock2.battleTower.curStreakChallengesNum[battleTowerLevelType] = gSpecialVar_0x8005; break; case 4: gSaveBlock2.battleTower.battleTowerTrainerId = gSpecialVar_0x8005; @@ -1698,21 +1700,21 @@ void sub_8135668(void) gSaveBlock2.battleTower.totalBattleTowerWins++; } - gSaveBlock2.battleTower.curChallengeWins[battleTowerLevelType]++; + gSaveBlock2.battleTower.curChallengeBattleNum[battleTowerLevelType]++; sub_8135A3C(); - gScriptResult = gSaveBlock2.battleTower.curChallengeWins[battleTowerLevelType]; + gScriptResult = gSaveBlock2.battleTower.curChallengeBattleNum[battleTowerLevelType]; - gStringVar1[0] = gSaveBlock2.battleTower.curChallengeWins[battleTowerLevelType] + 0xA1; + gStringVar1[0] = gSaveBlock2.battleTower.curChallengeBattleNum[battleTowerLevelType] + 0xA1; gStringVar1[1] = 0xFF; break; case 7: - if (gSaveBlock2.battleTower.curStreakChallengesCompleted[battleTowerLevelType] < 1430) + if (gSaveBlock2.battleTower.curStreakChallengesNum[battleTowerLevelType] < 1430) { - gSaveBlock2.battleTower.curStreakChallengesCompleted[battleTowerLevelType]++; + gSaveBlock2.battleTower.curStreakChallengesNum[battleTowerLevelType]++; } sub_8135A3C(); - gScriptResult = gSaveBlock2.battleTower.curStreakChallengesCompleted[battleTowerLevelType]; + gScriptResult = gSaveBlock2.battleTower.curStreakChallengesNum[battleTowerLevelType]; break; case 8: gSaveBlock2.battleTower.unk_554 = gSpecialVar_0x8005; @@ -1725,14 +1727,14 @@ void sub_8135668(void) case 11: if (gSaveBlock2.battleTower.var_4AE[battleTowerLevelType] != 3) { - sub_813461C(battleTowerLevelType); + ResetBattleTowerStreak(battleTowerLevelType); } break; case 12: gSaveBlock2.battleTower.var_4AE[battleTowerLevelType] = ewram160FB; break; case 13: - gSaveBlock2.battleTower.currentWinStreaks[battleTowerLevelType] = sub_8135D3C(battleTowerLevelType); + gSaveBlock2.battleTower.currentWinStreaks[battleTowerLevelType] = GetCurrentBattleTowerWinStreak(battleTowerLevelType); break; case 14: gSaveBlock2.battleTower.lastStreakLevelType = gSaveBlock2.battleTower.battleTowerLevelType; @@ -1753,10 +1755,10 @@ void sub_81358A4(void) gScriptResult = gSaveBlock2.battleTower.battleTowerLevelType; break; case 2: - gScriptResult = gSaveBlock2.battleTower.curChallengeWins[battleTowerLevelType]; + gScriptResult = gSaveBlock2.battleTower.curChallengeBattleNum[battleTowerLevelType]; break; case 3: - gScriptResult = gSaveBlock2.battleTower.curStreakChallengesCompleted[battleTowerLevelType]; + gScriptResult = gSaveBlock2.battleTower.curStreakChallengesNum[battleTowerLevelType]; break; case 4: gScriptResult = gSaveBlock2.battleTower.battleTowerTrainerId; @@ -1769,19 +1771,19 @@ void sub_81358A4(void) gScriptResult = gSaveBlock2.battleTower.unk_554; break; case 9: - gScriptResult = sub_8135D3C(battleTowerLevelType); + gScriptResult = GetCurrentBattleTowerWinStreak(battleTowerLevelType); break; case 10: SetGameStat(GAME_STAT_BATTLE_TOWER_BEST_STREAK, gSaveBlock2.battleTower.bestBattleTowerWinStreak); break; case 11: - sub_813461C(battleTowerLevelType); + ResetBattleTowerStreak(battleTowerLevelType); break; case 12: gSaveBlock2.battleTower.var_4AE[battleTowerLevelType] = ewram160FB; break; case 13: - gSaveBlock2.battleTower.currentWinStreaks[battleTowerLevelType] = sub_8135D3C(battleTowerLevelType); + gSaveBlock2.battleTower.currentWinStreaks[battleTowerLevelType] = GetCurrentBattleTowerWinStreak(battleTowerLevelType); break; case 14: gSaveBlock2.battleTower.lastStreakLevelType = gSaveBlock2.battleTower.battleTowerLevelType; @@ -1805,7 +1807,7 @@ void sub_8135A14(void) void sub_8135A3C(void) { u8 battleTowerLevelType = gSaveBlock2.battleTower.battleTowerLevelType; - u16 winStreak = sub_8135D3C(battleTowerLevelType); + u16 winStreak = GetCurrentBattleTowerWinStreak(battleTowerLevelType); if (gSaveBlock2.battleTower.recordWinStreaks[battleTowerLevelType] < winStreak) { @@ -1852,7 +1854,7 @@ void sub_8135A3C(void) lsls r4, 31\n\ lsrs r4, 31\n\ adds r0, r4, 0\n\ - bl sub_8135D3C\n\ + bl GetCurrentBattleTowerWinStreak\n\ lsls r0, 16\n\ lsrs r5, r0, 16\n\ lsls r4, 1\n\ @@ -1923,22 +1925,22 @@ void sub_8135AC4(void) if (gSaveBlock2.playerGender != MALE) { - trainerClass = gUnknown_08405E7E[(gSaveBlock2.playerTrainerId[0] + gSaveBlock2.playerTrainerId[1] + trainerClass = sFemaleTrainerClasses[(gSaveBlock2.playerTrainerId[0] + gSaveBlock2.playerTrainerId[1] + gSaveBlock2.playerTrainerId[2] + gSaveBlock2.playerTrainerId[3]) % 20u]; } else { - trainerClass = gUnknown_08405E60[(gSaveBlock2.playerTrainerId[0] + gSaveBlock2.playerTrainerId[1] + trainerClass = sMaleTrainerClasses[(gSaveBlock2.playerTrainerId[0] + gSaveBlock2.playerTrainerId[1] + gSaveBlock2.playerTrainerId[2] + gSaveBlock2.playerTrainerId[3]) % 30u]; } - playerRecord->var_0 = battleTowerLevelType; + playerRecord->battleTowerLevelType = battleTowerLevelType; playerRecord->trainerClass = trainerClass; copy_word_to_mem(playerRecord->trainerId, gSaveBlock2.playerTrainerId); StringCopy8(playerRecord->name, gSaveBlock2.playerName); - playerRecord->var_2 = sub_8135D3C(battleTowerLevelType); + playerRecord->winStreak = GetCurrentBattleTowerWinStreak(battleTowerLevelType); for (i = 0; i < 6; i++) { @@ -1960,8 +1962,8 @@ void sub_8135BA0(void) if (gSpecialVar_0x8004 == 3 || gSpecialVar_0x8004 == 0) { - if (gSaveBlock2.battleTower.curStreakChallengesCompleted[battleTowerLevelType] > 1 - || gSaveBlock2.battleTower.curChallengeWins[battleTowerLevelType] > 1) + if (gSaveBlock2.battleTower.curStreakChallengesNum[battleTowerLevelType] > 1 + || gSaveBlock2.battleTower.curChallengeBattleNum[battleTowerLevelType] > 1) { sub_8135AC4(); } @@ -1981,7 +1983,7 @@ void sub_8135BA0(void) TrySavingData(EREADER_SAVE); } -void sub_8135C38(void) +void BattleTower_SoftReset(void) { DoSoftReset(); } @@ -2055,39 +2057,39 @@ void sub_8135CFC(void) } } -u16 sub_8135D3C(u8 battleTowerLevelType) +u16 GetCurrentBattleTowerWinStreak(u8 battleTowerLevelType) { - u16 var2 = ((gSaveBlock2.battleTower.curStreakChallengesCompleted[battleTowerLevelType] - 1) * 7 - 1) + gSaveBlock2.battleTower.curChallengeWins[battleTowerLevelType]; + u16 winStreak = ((gSaveBlock2.battleTower.curStreakChallengesNum[battleTowerLevelType] - 1) * 7 - 1) + gSaveBlock2.battleTower.curChallengeBattleNum[battleTowerLevelType]; - if (var2 > 9999) + if (winStreak > 9999) { return 9999; } - return var2; + return winStreak; } #ifdef NONMATCHING -void sub_8135D84(void) +void DetermineBattleTowerPrize(void) { u16 prizeItem; struct SaveBlock2 *saveBlock = &gSaveBlock2; u8 battleTowerLevelType = saveBlock->battleTower.battleTowerLevelType; - if (saveBlock->battleTower.curStreakChallengesCompleted[battleTowerLevelType] - 1 > 5) + if (saveBlock->battleTower.curStreakChallengesNum[battleTowerLevelType] - 1 > 5) { - prizeItem = LongStreakPrizes[Random() % ARRAY_COUNT(LongStreakPrizes)]; + prizeItem = sLongStreakPrizes[Random() % ARRAY_COUNT(sLongStreakPrizes)]; } else { - prizeItem = ShortStreakPrizes[Random() % ARRAY_COUNT(ShortStreakPrizes)]; + prizeItem = sShortStreakPrizes[Random() % ARRAY_COUNT(sShortStreakPrizes)]; } saveBlock->battleTower.prizeItem = prizeItem; } #else __attribute__((naked)) -void sub_8135D84(void) +void DetermineBattleTowerPrize(void) { asm(".syntax unified\n\ push {r4,r5,lr}\n\ @@ -2106,7 +2108,7 @@ void sub_8135D84(void) cmp r0, 0x5\n\ ble _08135DC0\n\ bl Random\n\ - ldr r4, _08135DBC @ =LongStreakPrizes\n\ + ldr r4, _08135DBC @ =sLongStreakPrizes\n\ lsls r0, 16\n\ lsrs r0, 16\n\ movs r1, 0x9\n\ @@ -2115,10 +2117,10 @@ void sub_8135D84(void) _08135DB0: .4byte gSaveBlock2\n\ _08135DB4: .4byte 0x00000554\n\ _08135DB8: .4byte 0x0000055c\n\ -_08135DBC: .4byte LongStreakPrizes\n\ +_08135DBC: .4byte sLongStreakPrizes\n\ _08135DC0:\n\ bl Random\n\ - ldr r4, _08135DE8 @ =ShortStreakPrizes\n\ + ldr r4, _08135DE8 @ =sShortStreakPrizes\n\ lsls r0, 16\n\ lsrs r0, 16\n\ movs r1, 0x6\n\ @@ -2136,12 +2138,12 @@ _08135DCC:\n\ pop {r0}\n\ bx r0\n\ .align 2, 0\n\ -_08135DE8: .4byte ShortStreakPrizes\n\ +_08135DE8: .4byte sShortStreakPrizes\n\ .syntax divided\n"); } #endif // NONMATCHING -void sub_8135DEC(void) +void GiveBattleTowerPrize(void) { u8 battleTowerLevelType = gSaveBlock2.battleTower.battleTowerLevelType; @@ -2157,7 +2159,7 @@ void sub_8135DEC(void) } } -void sub_8135E50() +void AwardBattleTowerRibbons() { s32 i; u32 partyIndex; @@ -2173,7 +2175,7 @@ void sub_8135E50() gScriptResult = 0; - if (sub_8135D3C(battleTowerLevelType) > 55) + if (GetCurrentBattleTowerWinStreak(battleTowerLevelType) > 55) { for (i = 0; i < 3; i++) { @@ -2205,19 +2207,19 @@ void Debug_FillEReaderTrainerWithPlayerData(void) if (gSaveBlock2.playerGender != MALE) { - ereaderTrainer->trainerClass = gUnknown_08405E7E[(gSaveBlock2.playerTrainerId[0] + gSaveBlock2.playerTrainerId[1] + ereaderTrainer->trainerClass = sFemaleTrainerClasses[(gSaveBlock2.playerTrainerId[0] + gSaveBlock2.playerTrainerId[1] + gSaveBlock2.playerTrainerId[2] + gSaveBlock2.playerTrainerId[3]) % 20u]; } else { - ereaderTrainer->trainerClass = gUnknown_08405E60[(gSaveBlock2.playerTrainerId[0] + gSaveBlock2.playerTrainerId[1] + ereaderTrainer->trainerClass = sMaleTrainerClasses[(gSaveBlock2.playerTrainerId[0] + gSaveBlock2.playerTrainerId[1] + gSaveBlock2.playerTrainerId[2] + gSaveBlock2.playerTrainerId[3]) % 30u]; } copy_word_to_mem(ereaderTrainer->trainerId, gSaveBlock2.playerTrainerId); StringCopy8(ereaderTrainer->name, gSaveBlock2.playerName); - ereaderTrainer->var_2 = 1; + ereaderTrainer->winStreak = 1; j = 7; for (i = 0; i < 6; i++) @@ -2236,29 +2238,30 @@ void Debug_FillEReaderTrainerWithPlayerData(void) SetEReaderTrainerChecksum(ereaderTrainer); } -u8 sub_8135FBC(void) +u8 GetEReaderTrainerPicIndex(void) { return gTrainerClassToPicIndex[gSaveBlock2.battleTower.ereaderTrainer.trainerClass]; } -u8 sub_8135FD8(void) +u8 GetEReaderTrainerClassNameIndex(void) { return gTrainerClassToNameIndex[gSaveBlock2.battleTower.ereaderTrainer.trainerClass]; } -void sub_8135FF4(u8 *text) +void SetEReaderTrainerName(u8 *trainerName) { s32 i; for (i = 0; i < 7; i++) { - text[i] = gSaveBlock2.battleTower.ereaderTrainer.name[i]; + trainerName[i] = gSaveBlock2.battleTower.ereaderTrainer.name[i]; } - text[i] = 0xFF; + trainerName[i] = 0xFF; } -void sub_813601C(void) +// Checks if the saved E-Reader trainer is valid. +void ValidateEReaderTrainer(void) { u32 i; u32 checksum; @@ -2313,12 +2316,12 @@ void ClearEReaderTrainer(struct BattleTowerEReaderTrainer *ereaderTrainer) } } -void sub_81360C0(void) +void PrintEReaderTrainerGreeting(void) { - sub_813545C(gSaveBlock2.battleTower.ereaderTrainer.greeting.easyChat); + PrintBattleTowerTrainerMessage(gSaveBlock2.battleTower.ereaderTrainer.greeting.easyChat); } -void sub_81360D0(void) +void PrintEReaderTrainerFarewellMessage(void) { if (gBattleOutcome == BATTLE_DREW) { @@ -2326,11 +2329,11 @@ void sub_81360D0(void) } else if (gBattleOutcome == BATTLE_WON) { - sub_813545C(gSaveBlock2.battleTower.ereaderTrainer.farewellPlayerWon.easyChat); + PrintBattleTowerTrainerMessage(gSaveBlock2.battleTower.ereaderTrainer.farewellPlayerWon.easyChat); } else { - sub_813545C(gSaveBlock2.battleTower.ereaderTrainer.farewellPlayerLost.easyChat); + PrintBattleTowerTrainerMessage(gSaveBlock2.battleTower.ereaderTrainer.farewellPlayerLost.easyChat); } } diff --git a/src/data/battle_tower/level_100_mons.h b/src/data/battle_tower/level_100_mons.h index fff34ff1f..4f2b711ee 100644 --- a/src/data/battle_tower/level_100_mons.h +++ b/src/data/battle_tower/level_100_mons.h @@ -2,7 +2,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = { { .species = SPECIES_LINOONE, - .item = BATTLE_TOWER_ITEM_RAWST_BERRY, + .heldItem = BATTLE_TOWER_ITEM_RAWST_BERRY, .teamFlags = 0x42, .moves = { MOVE_SLASH, @@ -15,7 +15,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_MIGHTYENA, - .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SITRUS_BERRY, .teamFlags = 0x41, .moves = { MOVE_BITE, @@ -28,7 +28,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_BEAUTIFLY, - .item = BATTLE_TOWER_ITEM_PERSIM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_PERSIM_BERRY, .teamFlags = 0x41, .moves = { MOVE_GIGA_DRAIN, @@ -41,7 +41,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_DUSTOX, - .item = BATTLE_TOWER_ITEM_PECHA_BERRY, + .heldItem = BATTLE_TOWER_ITEM_PECHA_BERRY, .teamFlags = 0x41, .moves = { MOVE_PSYBEAM, @@ -54,7 +54,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_LOMBRE, - .item = BATTLE_TOWER_ITEM_CHESTO_BERRY, + .heldItem = BATTLE_TOWER_ITEM_CHESTO_BERRY, .teamFlags = 0x03, .moves = { MOVE_ASTONISH, @@ -67,7 +67,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_NUZLEAF, - .item = BATTLE_TOWER_ITEM_WHITE_HERB, + .heldItem = BATTLE_TOWER_ITEM_WHITE_HERB, .teamFlags = 0x01, .moves = { MOVE_BULLET_SEED, @@ -80,7 +80,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SWELLOW, - .item = BATTLE_TOWER_ITEM_SHARP_BEAK, + .heldItem = BATTLE_TOWER_ITEM_SHARP_BEAK, .teamFlags = 0x42, .moves = { MOVE_AERIAL_ACE, @@ -93,7 +93,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_PELIPPER, - .item = BATTLE_TOWER_ITEM_MYSTIC_WATER, + .heldItem = BATTLE_TOWER_ITEM_MYSTIC_WATER, .teamFlags = 0x02, .moves = { MOVE_SURF, @@ -106,7 +106,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_BRELOOM, - .item = BATTLE_TOWER_ITEM_KINGS_ROCK, + .heldItem = BATTLE_TOWER_ITEM_KINGS_ROCK, .teamFlags = 0x42, .moves = { MOVE_MACH_PUNCH, @@ -119,7 +119,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_NINJASK, - .item = BATTLE_TOWER_ITEM_RAWST_BERRY, + .heldItem = BATTLE_TOWER_ITEM_RAWST_BERRY, .teamFlags = 0x41, .moves = { MOVE_SCRATCH, @@ -132,7 +132,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_CROBAT, - .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SITRUS_BERRY, .teamFlags = 0x01, .moves = { MOVE_BITE, @@ -145,7 +145,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_MAWILE, - .item = BATTLE_TOWER_ITEM_METAL_COAT, + .heldItem = BATTLE_TOWER_ITEM_METAL_COAT, .teamFlags = 0x03, .moves = { MOVE_VICE_GRIP, @@ -158,7 +158,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_NOSEPASS, - .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SITRUS_BERRY, .teamFlags = 0x01, .moves = { MOVE_ROCK_THROW, @@ -171,7 +171,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_DELCATTY, - .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SITRUS_BERRY, .teamFlags = 0x42, .moves = { MOVE_DOUBLE_SLAP, @@ -184,7 +184,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_CAMERUPT, - .item = BATTLE_TOWER_ITEM_CHARCOAL, + .heldItem = BATTLE_TOWER_ITEM_CHARCOAL, .teamFlags = 0x01, .moves = { MOVE_EMBER, @@ -197,7 +197,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_MUK, - .item = BATTLE_TOWER_ITEM_ORAN_BERRY, + .heldItem = BATTLE_TOWER_ITEM_ORAN_BERRY, .teamFlags = 0x01, .moves = { MOVE_POISON_GAS, @@ -210,7 +210,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SANDSLASH, - .item = BATTLE_TOWER_ITEM_SOFT_SAND, + .heldItem = BATTLE_TOWER_ITEM_SOFT_SAND, .teamFlags = 0x03, .moves = { MOVE_SLASH, @@ -223,7 +223,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SPINDA, - .item = BATTLE_TOWER_ITEM_SILK_SCARF, + .heldItem = BATTLE_TOWER_ITEM_SILK_SCARF, .teamFlags = 0x42, .moves = { MOVE_UPROAR, @@ -236,7 +236,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_WHISCASH, - .item = BATTLE_TOWER_ITEM_CHESTO_BERRY, + .heldItem = BATTLE_TOWER_ITEM_CHESTO_BERRY, .teamFlags = 0x01, .moves = { MOVE_TICKLE, @@ -249,7 +249,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_CACTURNE, - .item = BATTLE_TOWER_ITEM_POISON_BARB, + .heldItem = BATTLE_TOWER_ITEM_POISON_BARB, .teamFlags = 0x01, .moves = { MOVE_POISON_STING, @@ -262,7 +262,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_JIGGLYPUFF, - .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .heldItem = BATTLE_TOWER_ITEM_BRIGHT_POWDER, .teamFlags = 0x42, .moves = { MOVE_SING, @@ -275,7 +275,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_MARILL, - .item = BATTLE_TOWER_ITEM_MYSTIC_WATER, + .heldItem = BATTLE_TOWER_ITEM_MYSTIC_WATER, .teamFlags = 0x42, .moves = { MOVE_BUBBLE_BEAM, @@ -288,7 +288,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_MAGNETON, - .item = BATTLE_TOWER_ITEM_RAWST_BERRY, + .heldItem = BATTLE_TOWER_ITEM_RAWST_BERRY, .teamFlags = 0x01, .moves = { MOVE_THUNDER_SHOCK, @@ -301,7 +301,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_CARVANHA, - .item = BATTLE_TOWER_ITEM_KINGS_ROCK, + .heldItem = BATTLE_TOWER_ITEM_KINGS_ROCK, .teamFlags = 0x01, .moves = { MOVE_BITE, @@ -314,7 +314,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_KECLEON, - .item = BATTLE_TOWER_ITEM_PERSIM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_PERSIM_BERRY, .teamFlags = 0x03, .moves = { MOVE_THIEF, @@ -327,7 +327,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_NINETALES, - .item = BATTLE_TOWER_ITEM_CHARCOAL, + .heldItem = BATTLE_TOWER_ITEM_CHARCOAL, .teamFlags = 0x02, .moves = { MOVE_EMBER, @@ -340,7 +340,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_RAICHU, - .item = BATTLE_TOWER_ITEM_PERSIM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_PERSIM_BERRY, .teamFlags = 0x42, .moves = { MOVE_SHOCK_WAVE, @@ -353,7 +353,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SEALEO, - .item = BATTLE_TOWER_ITEM_NEVER_MELT_ICE, + .heldItem = BATTLE_TOWER_ITEM_NEVER_MELT_ICE, .teamFlags = 0x01, .moves = { MOVE_ICE_BALL, @@ -366,7 +366,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_GRAVELER, - .item = BATTLE_TOWER_ITEM_HARD_STONE, + .heldItem = BATTLE_TOWER_ITEM_HARD_STONE, .teamFlags = 0x01, .moves = { MOVE_ROCK_THROW, @@ -379,7 +379,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SHUPPET, - .item = BATTLE_TOWER_ITEM_SPELL_TAG, + .heldItem = BATTLE_TOWER_ITEM_SPELL_TAG, .teamFlags = 0x03, .moves = { MOVE_NIGHT_SHADE, @@ -392,7 +392,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_LUVDISC, - .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SITRUS_BERRY, .teamFlags = 0x0A, .moves = { MOVE_ATTRACT, @@ -405,7 +405,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_LANTURN, - .item = BATTLE_TOWER_ITEM_CHERI_BERRY, + .heldItem = BATTLE_TOWER_ITEM_CHERI_BERRY, .teamFlags = 0x0A, .moves = { MOVE_THUNDER_WAVE, @@ -418,7 +418,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_CORSOLA, - .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SITRUS_BERRY, .teamFlags = 0x0A, .moves = { MOVE_MIRROR_COAT, @@ -431,7 +431,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_WAILMER, - .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SITRUS_BERRY, .teamFlags = 0x05, .moves = { MOVE_SURF, @@ -444,7 +444,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_RHYDON, - .item = BATTLE_TOWER_ITEM_FOCUS_BAND, + .heldItem = BATTLE_TOWER_ITEM_FOCUS_BAND, .teamFlags = 0x05, .moves = { MOVE_TAKE_DOWN, @@ -457,7 +457,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_DODRIO, - .item = BATTLE_TOWER_ITEM_SHARP_BEAK, + .heldItem = BATTLE_TOWER_ITEM_SHARP_BEAK, .teamFlags = 0x05, .moves = { MOVE_FURY_ATTACK, @@ -470,7 +470,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_GOLDUCK, - .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .heldItem = BATTLE_TOWER_ITEM_QUICK_CLAW, .teamFlags = 0x05, .moves = { MOVE_FURY_SWIPES, @@ -483,7 +483,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_BELLOSSOM, - .item = BATTLE_TOWER_ITEM_MIRACLE_SEED, + .heldItem = BATTLE_TOWER_ITEM_MIRACLE_SEED, .teamFlags = 0x0A, .moves = { MOVE_GIGA_DRAIN, @@ -496,7 +496,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_TROPIUS, - .item = BATTLE_TOWER_ITEM_KINGS_ROCK, + .heldItem = BATTLE_TOWER_ITEM_KINGS_ROCK, .teamFlags = 0x05, .moves = { MOVE_STOMP, @@ -509,7 +509,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SABLEYE, - .item = BATTLE_TOWER_ITEM_SPELL_TAG, + .heldItem = BATTLE_TOWER_ITEM_SPELL_TAG, .teamFlags = 0x0A, .moves = { MOVE_NIGHT_SHADE, @@ -522,7 +522,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_ELECTRODE, - .item = BATTLE_TOWER_ITEM_FOCUS_BAND, + .heldItem = BATTLE_TOWER_ITEM_FOCUS_BAND, .teamFlags = 0x03, .moves = { MOVE_SONIC_BOOM, @@ -535,7 +535,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_TENTACRUEL, - .item = BATTLE_TOWER_ITEM_POISON_BARB, + .heldItem = BATTLE_TOWER_ITEM_POISON_BARB, .teamFlags = 0x01, .moves = { MOVE_ACID, @@ -548,7 +548,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_CLAYDOL, - .item = BATTLE_TOWER_ITEM_SOFT_SAND, + .heldItem = BATTLE_TOWER_ITEM_SOFT_SAND, .teamFlags = 0x05, .moves = { MOVE_ANCIENT_POWER, @@ -561,7 +561,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_GRUMPIG, - .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SITRUS_BERRY, .teamFlags = 0x0A, .moves = { MOVE_PSYBEAM, @@ -574,7 +574,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_CRAWDAUNT, - .item = BATTLE_TOWER_ITEM_MENTAL_HERB, + .heldItem = BATTLE_TOWER_ITEM_MENTAL_HERB, .teamFlags = 0x05, .moves = { MOVE_CRABHAMMER, @@ -587,7 +587,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SEVIPER, - .item = BATTLE_TOWER_ITEM_POISON_BARB, + .heldItem = BATTLE_TOWER_ITEM_POISON_BARB, .teamFlags = 0x01, .moves = { MOVE_POISON_TAIL, @@ -600,7 +600,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_ZANGOOSE, - .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SITRUS_BERRY, .teamFlags = 0x05, .moves = { MOVE_FURY_CUTTER, @@ -613,7 +613,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_ALTARIA, - .item = BATTLE_TOWER_ITEM_DRAGON_FANG, + .heldItem = BATTLE_TOWER_ITEM_DRAGON_FANG, .teamFlags = 0x03, .moves = { MOVE_DRAGON_BREATH, @@ -626,7 +626,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_ROSELIA, - .item = BATTLE_TOWER_ITEM_CHESTO_BERRY, + .heldItem = BATTLE_TOWER_ITEM_CHESTO_BERRY, .teamFlags = 0x0A, .moves = { MOVE_LEECH_SEED, @@ -639,7 +639,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_VOLBEAT, - .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .heldItem = BATTLE_TOWER_ITEM_BRIGHT_POWDER, .teamFlags = 0x09, .moves = { MOVE_SIGNAL_BEAM, @@ -652,7 +652,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_ILLUMISE, - .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SITRUS_BERRY, .teamFlags = 0x09, .moves = { MOVE_CHARM, @@ -665,7 +665,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_MANECTRIC, - .item = BATTLE_TOWER_ITEM_MAGNET, + .heldItem = BATTLE_TOWER_ITEM_MAGNET, .teamFlags = 0x03, .moves = { MOVE_BITE, @@ -678,7 +678,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_MAWILE, - .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SITRUS_BERRY, .teamFlags = 0x0A, .moves = { MOVE_CRUNCH, @@ -691,7 +691,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_HARIYAMA, - .item = BATTLE_TOWER_ITEM_KINGS_ROCK, + .heldItem = BATTLE_TOWER_ITEM_KINGS_ROCK, .teamFlags = 0x05, .moves = { MOVE_ARM_THRUST, @@ -704,7 +704,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SKARMORY, - .item = BATTLE_TOWER_ITEM_METAL_COAT, + .heldItem = BATTLE_TOWER_ITEM_METAL_COAT, .teamFlags = 0x01, .moves = { MOVE_STEEL_WING, @@ -717,7 +717,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_TORKOAL, - .item = BATTLE_TOWER_ITEM_PECHA_BERRY, + .heldItem = BATTLE_TOWER_ITEM_PECHA_BERRY, .teamFlags = 0x03, .moves = { MOVE_FIRE_SPIN, @@ -730,7 +730,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_GYARADOS, - .item = BATTLE_TOWER_ITEM_PERSIM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_PERSIM_BERRY, .teamFlags = 0x05, .moves = { MOVE_THRASH, @@ -743,7 +743,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_MIGHTYENA, - .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SITRUS_BERRY, .teamFlags = 0x05, .moves = { MOVE_CRUNCH, @@ -756,7 +756,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_LINOONE, - .item = BATTLE_TOWER_ITEM_CHERI_BERRY, + .heldItem = BATTLE_TOWER_ITEM_CHERI_BERRY, .teamFlags = 0x06, .moves = { MOVE_SLASH, @@ -769,7 +769,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_MASQUERAIN, - .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SITRUS_BERRY, .teamFlags = 0x0A, .moves = { MOVE_TOXIC, @@ -782,7 +782,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SCEPTILE, - .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LUM_BERRY, .teamFlags = 0x06, .moves = { MOVE_BULLET_SEED, @@ -795,7 +795,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_BLAZIKEN, - .item = BATTLE_TOWER_ITEM_KINGS_ROCK, + .heldItem = BATTLE_TOWER_ITEM_KINGS_ROCK, .teamFlags = 0x06, .moves = { MOVE_DOUBLE_KICK, @@ -808,7 +808,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SWAMPERT, - .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SITRUS_BERRY, .teamFlags = 0x49, .moves = { MOVE_SURF, @@ -821,7 +821,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SALAMENCE, - .item = BATTLE_TOWER_ITEM_DRAGON_FANG, + .heldItem = BATTLE_TOWER_ITEM_DRAGON_FANG, .teamFlags = 0x49, .moves = { MOVE_DRAGON_BREATH, @@ -834,7 +834,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_KINGDRA, - .item = BATTLE_TOWER_ITEM_PERSIM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_PERSIM_BERRY, .teamFlags = 0x49, .moves = { MOVE_SURF, @@ -847,7 +847,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_CORSOLA, - .item = BATTLE_TOWER_ITEM_PERSIM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_PERSIM_BERRY, .teamFlags = 0x03, .moves = { MOVE_ANCIENT_POWER, @@ -860,7 +860,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_RHYDON, - .item = BATTLE_TOWER_ITEM_FOCUS_BAND, + .heldItem = BATTLE_TOWER_ITEM_FOCUS_BAND, .teamFlags = 0x41, .moves = { MOVE_EARTHQUAKE, @@ -873,7 +873,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_HERACROSS, - .item = BATTLE_TOWER_ITEM_KINGS_ROCK, + .heldItem = BATTLE_TOWER_ITEM_KINGS_ROCK, .teamFlags = 0x06, .moves = { MOVE_MEGAHORN, @@ -886,7 +886,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_GIRAFARIG, - .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LUM_BERRY, .teamFlags = 0x09, .moves = { MOVE_PSYCHIC, @@ -899,7 +899,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_XATU, - .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LUM_BERRY, .teamFlags = 0x09, .moves = { MOVE_PSYCHIC, @@ -912,7 +912,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_DODRIO, - .item = BATTLE_TOWER_ITEM_SHARP_BEAK, + .heldItem = BATTLE_TOWER_ITEM_SHARP_BEAK, .teamFlags = 0x03, .moves = { MOVE_DRILL_PECK, @@ -925,7 +925,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_VILEPLUME, - .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SITRUS_BERRY, .teamFlags = 0x89, .moves = { MOVE_POISON_POWDER, @@ -938,7 +938,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_MEDICHAM, - .item = BATTLE_TOWER_ITEM_TWISTED_SPOON, + .heldItem = BATTLE_TOWER_ITEM_TWISTED_SPOON, .teamFlags = 0x06, .moves = { MOVE_FOCUS_PUNCH, @@ -951,7 +951,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_ABSOL, - .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SITRUS_BERRY, .teamFlags = 0x06, .moves = { MOVE_SLASH, @@ -964,7 +964,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_DUSCLOPS, - .item = BATTLE_TOWER_ITEM_SPELL_TAG, + .heldItem = BATTLE_TOWER_ITEM_SPELL_TAG, .teamFlags = 0x4B, .moves = { MOVE_CONFUSE_RAY, @@ -977,7 +977,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SHUPPET, - .item = BATTLE_TOWER_ITEM_SPELL_TAG, + .heldItem = BATTLE_TOWER_ITEM_SPELL_TAG, .teamFlags = 0x43, .moves = { MOVE_GRUDGE, @@ -990,7 +990,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_CASTFORM, - .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LUM_BERRY, .teamFlags = 0x82, .moves = { MOVE_WEATHER_BALL, @@ -1003,7 +1003,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_MILOTIC, - .item = BATTLE_TOWER_ITEM_DRAGON_FANG, + .heldItem = BATTLE_TOWER_ITEM_DRAGON_FANG, .teamFlags = 0x02, .moves = { MOVE_SURF, @@ -1016,7 +1016,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SHARPEDO, - .item = BATTLE_TOWER_ITEM_PERSIM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_PERSIM_BERRY, .teamFlags = 0x01, .moves = { MOVE_CRUNCH, @@ -1029,7 +1029,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_FLYGON, - .item = BATTLE_TOWER_ITEM_CHERI_BERRY, + .heldItem = BATTLE_TOWER_ITEM_CHERI_BERRY, .teamFlags = 0x06, .moves = { MOVE_EARTHQUAKE, @@ -1042,7 +1042,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_TRAPINCH, - .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SITRUS_BERRY, .teamFlags = 0x09, .moves = { MOVE_TOXIC, @@ -1055,7 +1055,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_LUNATONE, - .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .heldItem = BATTLE_TOWER_ITEM_BRIGHT_POWDER, .teamFlags = 0x43, .moves = { MOVE_PSYCHIC, @@ -1068,7 +1068,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SOLROCK, - .item = BATTLE_TOWER_ITEM_PECHA_BERRY, + .heldItem = BATTLE_TOWER_ITEM_PECHA_BERRY, .teamFlags = 0x43, .moves = { MOVE_SOLAR_BEAM, @@ -1081,7 +1081,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_BALTOY, - .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SITRUS_BERRY, .teamFlags = 0x43, .moves = { MOVE_PSYCHIC, @@ -1094,7 +1094,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_CRAWDAUNT, - .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .heldItem = BATTLE_TOWER_ITEM_QUICK_CLAW, .teamFlags = 0x06, .moves = { MOVE_CRABHAMMER, @@ -1107,7 +1107,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_WHISCASH, - .item = BATTLE_TOWER_ITEM_ASPEAR_BERRY, + .heldItem = BATTLE_TOWER_ITEM_ASPEAR_BERRY, .teamFlags = 0x06, .moves = { MOVE_EARTHQUAKE, @@ -1120,7 +1120,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SEVIPER, - .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SITRUS_BERRY, .teamFlags = 0x09, .moves = { MOVE_POISON_TAIL, @@ -1133,7 +1133,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_MAGCARGO, - .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .heldItem = BATTLE_TOWER_ITEM_BRIGHT_POWDER, .teamFlags = 0x89, .moves = { MOVE_FLAMETHROWER, @@ -1146,7 +1146,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_MACHAMP, - .item = BATTLE_TOWER_ITEM_BLACK_BELT, + .heldItem = BATTLE_TOWER_ITEM_BLACK_BELT, .teamFlags = 0x09, .moves = { MOVE_KARATE_CHOP, @@ -1159,7 +1159,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SWALOT, - .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SITRUS_BERRY, .teamFlags = 0x86, .moves = { MOVE_YAWN, @@ -1172,7 +1172,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SCEPTILE, - .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SITRUS_BERRY, .teamFlags = 0x0C, .moves = { MOVE_LEAF_BLADE, @@ -1185,7 +1185,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_BLAZIKEN, - .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .heldItem = BATTLE_TOWER_ITEM_SCOPE_LENS, .teamFlags = 0x0C, .moves = { MOVE_BLAZE_KICK, @@ -1198,7 +1198,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SWAMPERT, - .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .heldItem = BATTLE_TOWER_ITEM_BRIGHT_POWDER, .teamFlags = 0x4C, .moves = { MOVE_SURF, @@ -1211,7 +1211,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_MIGHTYENA, - .item = BATTLE_TOWER_ITEM_BLACK_GLASSES, + .heldItem = BATTLE_TOWER_ITEM_BLACK_GLASSES, .teamFlags = 0x04, .moves = { MOVE_CRUNCH, @@ -1224,7 +1224,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_LINOONE, - .item = BATTLE_TOWER_ITEM_CHESTO_BERRY, + .heldItem = BATTLE_TOWER_ITEM_CHESTO_BERRY, .teamFlags = 0x04, .moves = { MOVE_SLASH, @@ -1237,7 +1237,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_BEAUTIFLY, - .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LUM_BERRY, .teamFlags = 0x08, .moves = { MOVE_GIGA_DRAIN, @@ -1250,7 +1250,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_DUSTOX, - .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SITRUS_BERRY, .teamFlags = 0x08, .moves = { MOVE_PSYCHIC, @@ -1263,7 +1263,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_LUDICOLO, - .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LUM_BERRY, .teamFlags = 0x0C, .moves = { MOVE_FAKE_OUT, @@ -1276,7 +1276,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SHIFTRY, - .item = BATTLE_TOWER_ITEM_PERSIM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_PERSIM_BERRY, .teamFlags = 0x0C, .moves = { MOVE_FRUSTRATION, @@ -1289,7 +1289,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SWELLOW, - .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LUM_BERRY, .teamFlags = 0x88, .moves = { MOVE_FLY, @@ -1302,7 +1302,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_GARDEVOIR, - .item = BATTLE_TOWER_ITEM_BLACK_GLASSES, + .heldItem = BATTLE_TOWER_ITEM_BLACK_GLASSES, .teamFlags = 0x4A, .moves = { MOVE_HYPNOSIS, @@ -1315,7 +1315,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_BRELOOM, - .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .heldItem = BATTLE_TOWER_ITEM_BRIGHT_POWDER, .teamFlags = 0x0C, .moves = { MOVE_DYNAMIC_PUNCH, @@ -1328,7 +1328,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_VIGOROTH, - .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .heldItem = BATTLE_TOWER_ITEM_QUICK_CLAW, .teamFlags = 0x04, .moves = { MOVE_SLASH, @@ -1341,7 +1341,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_NINJASK, - .item = BATTLE_TOWER_ITEM_SILVER_POWDER, + .heldItem = BATTLE_TOWER_ITEM_SILVER_POWDER, .teamFlags = 0x04, .moves = { MOVE_FURY_CUTTER, @@ -1354,7 +1354,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SHEDINJA, - .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .heldItem = BATTLE_TOWER_ITEM_QUICK_CLAW, .teamFlags = 0xCA, .moves = { MOVE_CONFUSE_RAY, @@ -1367,7 +1367,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_LOUDRED, - .item = BATTLE_TOWER_ITEM_PECHA_BERRY, + .heldItem = BATTLE_TOWER_ITEM_PECHA_BERRY, .teamFlags = 0x04, .moves = { MOVE_HYPER_VOICE, @@ -1380,7 +1380,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_HARIYAMA, - .item = BATTLE_TOWER_ITEM_KINGS_ROCK, + .heldItem = BATTLE_TOWER_ITEM_KINGS_ROCK, .teamFlags = 0x04, .moves = { MOVE_ARM_THRUST, @@ -1393,7 +1393,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_ALAKAZAM, - .item = BATTLE_TOWER_ITEM_TWISTED_SPOON, + .heldItem = BATTLE_TOWER_ITEM_TWISTED_SPOON, .teamFlags = 0x88, .moves = { MOVE_PSYCHIC, @@ -1406,7 +1406,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_CROBAT, - .item = BATTLE_TOWER_ITEM_CHERI_BERRY, + .heldItem = BATTLE_TOWER_ITEM_CHERI_BERRY, .teamFlags = 0x88, .moves = { MOVE_CONFUSE_RAY, @@ -1419,7 +1419,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_MAWILE, - .item = BATTLE_TOWER_ITEM_METAL_COAT, + .heldItem = BATTLE_TOWER_ITEM_METAL_COAT, .teamFlags = 0x04, .moves = { MOVE_CRUNCH, @@ -1432,7 +1432,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_AGGRON, - .item = BATTLE_TOWER_ITEM_METAL_COAT, + .heldItem = BATTLE_TOWER_ITEM_METAL_COAT, .teamFlags = 0x45, .moves = { MOVE_METAL_CLAW, @@ -1445,7 +1445,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_GOLEM, - .item = BATTLE_TOWER_ITEM_SOFT_SAND, + .heldItem = BATTLE_TOWER_ITEM_SOFT_SAND, .teamFlags = 0xC5, .moves = { MOVE_ROLLOUT, @@ -1458,7 +1458,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_MANECTRIC, - .item = BATTLE_TOWER_ITEM_MAGNET, + .heldItem = BATTLE_TOWER_ITEM_MAGNET, .teamFlags = 0x04, .moves = { MOVE_THUNDER, @@ -1471,7 +1471,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_VOLBEAT, - .item = BATTLE_TOWER_ITEM_SILVER_POWDER, + .heldItem = BATTLE_TOWER_ITEM_SILVER_POWDER, .teamFlags = 0x08, .moves = { MOVE_CONFUSE_RAY, @@ -1484,7 +1484,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_ILLUMISE, - .item = BATTLE_TOWER_ITEM_SILVER_POWDER, + .heldItem = BATTLE_TOWER_ITEM_SILVER_POWDER, .teamFlags = 0x08, .moves = { MOVE_THUNDERBOLT, @@ -1497,7 +1497,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_MASQUERAIN, - .item = BATTLE_TOWER_ITEM_PERSIM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_PERSIM_BERRY, .teamFlags = 0x88, .moves = { MOVE_GIGA_DRAIN, @@ -1510,7 +1510,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_ROSELIA, - .item = BATTLE_TOWER_ITEM_MIRACLE_SEED, + .heldItem = BATTLE_TOWER_ITEM_MIRACLE_SEED, .teamFlags = 0x08, .moves = { MOVE_PETAL_DANCE, @@ -1523,7 +1523,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_DELCATTY, - .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SITRUS_BERRY, .teamFlags = 0x08, .moves = { MOVE_SING, @@ -1536,7 +1536,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SEAKING, - .item = BATTLE_TOWER_ITEM_MYSTIC_WATER, + .heldItem = BATTLE_TOWER_ITEM_MYSTIC_WATER, .teamFlags = 0x88, .moves = { MOVE_RAIN_DANCE, @@ -1549,7 +1549,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_GYARADOS, - .item = BATTLE_TOWER_ITEM_DRAGON_FANG, + .heldItem = BATTLE_TOWER_ITEM_DRAGON_FANG, .teamFlags = 0x8C, .moves = { MOVE_HYDRO_PUMP, @@ -1562,7 +1562,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SWALOT, - .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .heldItem = BATTLE_TOWER_ITEM_LEFTOVERS, .teamFlags = 0x42, .moves = { MOVE_STOCKPILE, @@ -1575,7 +1575,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_MAGCARGO, - .item = BATTLE_TOWER_ITEM_ASPEAR_BERRY, + .heldItem = BATTLE_TOWER_ITEM_ASPEAR_BERRY, .teamFlags = 0x41, .moves = { MOVE_ROCK_SLIDE, @@ -1588,7 +1588,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_MUK, - .item = BATTLE_TOWER_ITEM_POISON_BARB, + .heldItem = BATTLE_TOWER_ITEM_POISON_BARB, .teamFlags = 0xC3, .moves = { MOVE_SLUDGE_BOMB, @@ -1601,7 +1601,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SPINDA, - .item = BATTLE_TOWER_ITEM_SILK_SCARF, + .heldItem = BATTLE_TOWER_ITEM_SILK_SCARF, .teamFlags = 0x42, .moves = { MOVE_DIZZY_PUNCH, @@ -1614,7 +1614,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_ALTARIA, - .item = BATTLE_TOWER_ITEM_DRAGON_FANG, + .heldItem = BATTLE_TOWER_ITEM_DRAGON_FANG, .teamFlags = 0x03, .moves = { MOVE_DRAGON_CLAW, @@ -1627,7 +1627,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_ZANGOOSE, - .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SITRUS_BERRY, .teamFlags = 0x03, .moves = { MOVE_CRUSH_CLAW, @@ -1640,7 +1640,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SEVIPER, - .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LUM_BERRY, .teamFlags = 0x41, .moves = { MOVE_SWAGGER, @@ -1653,7 +1653,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_GRUMPIG, - .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SITRUS_BERRY, .teamFlags = 0x42, .moves = { MOVE_TOXIC, @@ -1666,7 +1666,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_CACTURNE, - .item = BATTLE_TOWER_ITEM_MIRACLE_SEED, + .heldItem = BATTLE_TOWER_ITEM_MIRACLE_SEED, .teamFlags = 0x41, .moves = { MOVE_NEEDLE_ARM, @@ -1679,7 +1679,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_CLAYDOL, - .item = BATTLE_TOWER_ITEM_CHESTO_BERRY, + .heldItem = BATTLE_TOWER_ITEM_CHESTO_BERRY, .teamFlags = 0x03, .moves = { MOVE_EARTHQUAKE, @@ -1692,7 +1692,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_TENTACRUEL, - .item = BATTLE_TOWER_ITEM_MENTAL_HERB, + .heldItem = BATTLE_TOWER_ITEM_MENTAL_HERB, .teamFlags = 0xC1, .moves = { MOVE_SLUDGE_BOMB, @@ -1705,7 +1705,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_WIGGLYTUFF, - .item = BATTLE_TOWER_ITEM_RAWST_BERRY, + .heldItem = BATTLE_TOWER_ITEM_RAWST_BERRY, .teamFlags = 0xC3, .moves = { MOVE_SING, @@ -1718,7 +1718,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_AZUMARILL, - .item = BATTLE_TOWER_ITEM_CHERI_BERRY, + .heldItem = BATTLE_TOWER_ITEM_CHERI_BERRY, .teamFlags = 0xC2, .moves = { MOVE_SURF, @@ -1731,7 +1731,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_ELECTRODE, - .item = BATTLE_TOWER_ITEM_CHERI_BERRY, + .heldItem = BATTLE_TOWER_ITEM_CHERI_BERRY, .teamFlags = 0xC3, .moves = { MOVE_THUNDERBOLT, @@ -1744,7 +1744,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_MILOTIC, - .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .heldItem = BATTLE_TOWER_ITEM_BRIGHT_POWDER, .teamFlags = 0x42, .moves = { MOVE_HYDRO_PUMP, @@ -1757,7 +1757,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_KECLEON, - .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SITRUS_BERRY, .teamFlags = 0x43, .moves = { MOVE_SKILL_SWAP, @@ -1770,7 +1770,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_DUSCLOPS, - .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .heldItem = BATTLE_TOWER_ITEM_LEFTOVERS, .teamFlags = 0x43, .moves = { MOVE_CONFUSE_RAY, @@ -1783,7 +1783,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_ABSOL, - .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LUM_BERRY, .teamFlags = 0x41, .moves = { MOVE_SLASH, @@ -1796,7 +1796,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_NINETALES, - .item = BATTLE_TOWER_ITEM_APICOT_BERRY, + .heldItem = BATTLE_TOWER_ITEM_APICOT_BERRY, .teamFlags = 0xC2, .moves = { MOVE_FLAMETHROWER, @@ -1809,7 +1809,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_PIKACHU, - .item = BATTLE_TOWER_ITEM_LIGHT_BALL, + .heldItem = BATTLE_TOWER_ITEM_LIGHT_BALL, .teamFlags = 0xC2, .moves = { MOVE_THUNDER_WAVE, @@ -1822,7 +1822,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_VILEPLUME, - .item = BATTLE_TOWER_ITEM_ASPEAR_BERRY, + .heldItem = BATTLE_TOWER_ITEM_ASPEAR_BERRY, .teamFlags = 0xC3, .moves = { MOVE_GIGA_DRAIN, @@ -1835,7 +1835,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_DONPHAN, - .item = BATTLE_TOWER_ITEM_PERSIM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_PERSIM_BERRY, .teamFlags = 0x41, .moves = { MOVE_EARTHQUAKE, @@ -1848,7 +1848,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_STARMIE, - .item = BATTLE_TOWER_ITEM_CHERI_BERRY, + .heldItem = BATTLE_TOWER_ITEM_CHERI_BERRY, .teamFlags = 0xC3, .moves = { MOVE_CONFUSE_RAY, @@ -1861,7 +1861,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_WALREIN, - .item = BATTLE_TOWER_ITEM_NEVER_MELT_ICE, + .heldItem = BATTLE_TOWER_ITEM_NEVER_MELT_ICE, .teamFlags = 0x43, .moves = { MOVE_ICE_BEAM, @@ -1874,7 +1874,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_RELICANTH, - .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .heldItem = BATTLE_TOWER_ITEM_LEFTOVERS, .teamFlags = 0x41, .moves = { MOVE_YAWN, @@ -1887,7 +1887,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_KINGDRA, - .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .heldItem = BATTLE_TOWER_ITEM_BRIGHT_POWDER, .teamFlags = 0x43, .moves = { MOVE_RAIN_DANCE, @@ -1900,7 +1900,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_CRADILY, - .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .heldItem = BATTLE_TOWER_ITEM_LEFTOVERS, .teamFlags = 0x43, .moves = { MOVE_CONFUSE_RAY, @@ -1913,7 +1913,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_ARMALDO, - .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SITRUS_BERRY, .teamFlags = 0x43, .moves = { MOVE_SLASH, @@ -1926,7 +1926,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_METAGROSS, - .item = BATTLE_TOWER_ITEM_METAL_COAT, + .heldItem = BATTLE_TOWER_ITEM_METAL_COAT, .teamFlags = 0x41, .moves = { MOVE_METAL_CLAW, @@ -1939,7 +1939,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SALAMENCE, - .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LUM_BERRY, .teamFlags = 0x42, .moves = { MOVE_DRAGON_BREATH, @@ -1952,7 +1952,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_MIGHTYENA, - .item = BATTLE_TOWER_ITEM_LIECHI_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LIECHI_BERRY, .teamFlags = 0x01, .moves = { MOVE_CRUNCH, @@ -1965,7 +1965,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_LINOONE, - .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SALAC_BERRY, .teamFlags = 0x02, .moves = { MOVE_HYPER_BEAM, @@ -1978,7 +1978,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_LUDICOLO, - .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LUM_BERRY, .teamFlags = 0x03, .moves = { MOVE_SURF, @@ -1991,7 +1991,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_EXPLOUD, - .item = BATTLE_TOWER_ITEM_LIECHI_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LIECHI_BERRY, .teamFlags = 0x01, .moves = { MOVE_UPROAR, @@ -2004,7 +2004,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SWELLOW, - .item = BATTLE_TOWER_ITEM_LANSAT_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LANSAT_BERRY, .teamFlags = 0x02, .moves = { MOVE_FACADE, @@ -2017,7 +2017,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_PELIPPER, - .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .heldItem = BATTLE_TOWER_ITEM_QUICK_CLAW, .teamFlags = 0x82, .moves = { MOVE_STOCKPILE, @@ -2030,7 +2030,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_BRELOOM, - .item = BATTLE_TOWER_ITEM_FOCUS_BAND, + .heldItem = BATTLE_TOWER_ITEM_FOCUS_BAND, .teamFlags = 0x01, .moves = { MOVE_DYNAMIC_PUNCH, @@ -2043,7 +2043,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SHEDINJA, - .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LUM_BERRY, .teamFlags = 0x01, .moves = { MOVE_RETURN, @@ -2056,7 +2056,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_EXPLOUD, - .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SITRUS_BERRY, .teamFlags = 0x01, .moves = { MOVE_HYPER_BEAM, @@ -2069,7 +2069,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_HARIYAMA, - .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .heldItem = BATTLE_TOWER_ITEM_SCOPE_LENS, .teamFlags = 0x01, .moves = { MOVE_CROSS_CHOP, @@ -2082,7 +2082,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_ALAKAZAM, - .item = BATTLE_TOWER_ITEM_PETAYA_BERRY, + .heldItem = BATTLE_TOWER_ITEM_PETAYA_BERRY, .teamFlags = 0x83, .moves = { MOVE_PSYCHIC, @@ -2095,7 +2095,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_CROBAT, - .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .heldItem = BATTLE_TOWER_ITEM_SCOPE_LENS, .teamFlags = 0x81, .moves = { MOVE_CONFUSE_RAY, @@ -2108,7 +2108,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SABLEYE, - .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .heldItem = BATTLE_TOWER_ITEM_LEFTOVERS, .teamFlags = 0x83, .moves = { MOVE_TOXIC, @@ -2121,7 +2121,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_MAWILE, - .item = BATTLE_TOWER_ITEM_CHESTO_BERRY, + .heldItem = BATTLE_TOWER_ITEM_CHESTO_BERRY, .teamFlags = 0x02, .moves = { MOVE_CRUNCH, @@ -2134,7 +2134,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_AGGRON, - .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SITRUS_BERRY, .teamFlags = 0x01, .moves = { MOVE_DOUBLE_EDGE, @@ -2147,7 +2147,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_GOLEM, - .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SALAC_BERRY, .teamFlags = 0x01, .moves = { MOVE_EARTHQUAKE, @@ -2160,7 +2160,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_NOSEPASS, - .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SITRUS_BERRY, .teamFlags = 0x81, .moves = { MOVE_THUNDER_WAVE, @@ -2173,7 +2173,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_MANECTRIC, - .item = BATTLE_TOWER_ITEM_PETAYA_BERRY, + .heldItem = BATTLE_TOWER_ITEM_PETAYA_BERRY, .teamFlags = 0x02, .moves = { MOVE_THUNDER, @@ -2186,7 +2186,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_ROSELIA, - .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .heldItem = BATTLE_TOWER_ITEM_LEFTOVERS, .teamFlags = 0x82, .moves = { MOVE_GRASS_WHISTLE, @@ -2199,7 +2199,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_DELCATTY, - .item = BATTLE_TOWER_ITEM_STARF_BERRY, + .heldItem = BATTLE_TOWER_ITEM_STARF_BERRY, .teamFlags = 0x02, .moves = { MOVE_ASSIST, @@ -2212,7 +2212,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_TROPIUS, - .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .heldItem = BATTLE_TOWER_ITEM_SCOPE_LENS, .teamFlags = 0xC2, .moves = { MOVE_RAZOR_LEAF, @@ -2225,7 +2225,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SWALOT, - .item = BATTLE_TOWER_ITEM_LIECHI_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LIECHI_BERRY, .teamFlags = 0x03, .moves = { MOVE_YAWN, @@ -2238,7 +2238,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_MACHAMP, - .item = BATTLE_TOWER_ITEM_BLACK_BELT, + .heldItem = BATTLE_TOWER_ITEM_BLACK_BELT, .teamFlags = 0x01, .moves = { MOVE_CROSS_CHOP, @@ -2251,7 +2251,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_CAMERUPT, - .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SITRUS_BERRY, .teamFlags = 0x40, .moves = { MOVE_ERUPTION, @@ -2264,7 +2264,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_MAGCARGO, - .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .heldItem = BATTLE_TOWER_ITEM_BRIGHT_POWDER, .teamFlags = 0x03, .moves = { MOVE_FLAMETHROWER, @@ -2277,7 +2277,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_WEEZING, - .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SALAC_BERRY, .teamFlags = 0x81, .moves = { MOVE_WILL_O_WISP, @@ -2290,7 +2290,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SPINDA, - .item = BATTLE_TOWER_ITEM_CHOICE_BAND, + .heldItem = BATTLE_TOWER_ITEM_CHOICE_BAND, .teamFlags = 0x82, .moves = { MOVE_TRICK, @@ -2303,7 +2303,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SKARMORY, - .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SALAC_BERRY, .teamFlags = 0x01, .moves = { MOVE_DRILL_PECK, @@ -2316,7 +2316,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_ALTARIA, - .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .heldItem = BATTLE_TOWER_ITEM_QUICK_CLAW, .teamFlags = 0x02, .moves = { MOVE_SING, @@ -2329,7 +2329,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_GRUMPIG, - .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LUM_BERRY, .teamFlags = 0x82, .moves = { MOVE_PSYCHIC, @@ -2342,7 +2342,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SHIFTRY, - .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .heldItem = BATTLE_TOWER_ITEM_QUICK_CLAW, .teamFlags = 0x20, .moves = { MOVE_SWAGGER, @@ -2355,7 +2355,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_CLAYDOL, - .item = BATTLE_TOWER_ITEM_LIECHI_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LIECHI_BERRY, .teamFlags = 0x20, .moves = { MOVE_COSMIC_POWER, @@ -2368,7 +2368,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_HARIYAMA, - .item = BATTLE_TOWER_ITEM_CHESTO_BERRY, + .heldItem = BATTLE_TOWER_ITEM_CHESTO_BERRY, .teamFlags = 0x33, .moves = { MOVE_EARTHQUAKE, @@ -2381,7 +2381,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_NOSEPASS, - .item = BATTLE_TOWER_ITEM_LIECHI_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LIECHI_BERRY, .teamFlags = 0x20, .moves = { MOVE_ROCK_SLIDE, @@ -2394,7 +2394,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_DUSCLOPS, - .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SALAC_BERRY, .teamFlags = 0x33, .moves = { MOVE_SHADOW_PUNCH, @@ -2407,7 +2407,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SEAKING, - .item = BATTLE_TOWER_ITEM_LEPPA_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LEPPA_BERRY, .teamFlags = 0x20, .moves = { MOVE_HORN_DRILL, @@ -2420,7 +2420,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_CAMERUPT, - .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .heldItem = BATTLE_TOWER_ITEM_BRIGHT_POWDER, .teamFlags = 0x73, .moves = { MOVE_EARTHQUAKE, @@ -2433,7 +2433,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_LANTURN, - .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LUM_BERRY, .teamFlags = 0x13, .moves = { MOVE_THUNDERBOLT, @@ -2446,7 +2446,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_WEEZING, - .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SALAC_BERRY, .teamFlags = 0x33, .moves = { MOVE_SLUDGE_BOMB, @@ -2459,7 +2459,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_WHISCASH, - .item = BATTLE_TOWER_ITEM_LEPPA_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LEPPA_BERRY, .teamFlags = 0x20, .moves = { MOVE_EARTHQUAKE, @@ -2472,7 +2472,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_AGGRON, - .item = BATTLE_TOWER_ITEM_LIECHI_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LIECHI_BERRY, .teamFlags = 0x51, .moves = { MOVE_DOUBLE_EDGE, @@ -2485,7 +2485,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_KECLEON, - .item = BATTLE_TOWER_ITEM_CHOICE_BAND, + .heldItem = BATTLE_TOWER_ITEM_CHOICE_BAND, .teamFlags = 0x12, .moves = { MOVE_TRICK, @@ -2498,7 +2498,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SHARPEDO, - .item = BATTLE_TOWER_ITEM_KINGS_ROCK, + .heldItem = BATTLE_TOWER_ITEM_KINGS_ROCK, .teamFlags = 0x11, .moves = { MOVE_CRUNCH, @@ -2511,7 +2511,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_ABSOL, - .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SALAC_BERRY, .teamFlags = 0x12, .moves = { MOVE_DOUBLE_EDGE, @@ -2524,7 +2524,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_WAILORD, - .item = BATTLE_TOWER_ITEM_LEPPA_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LEPPA_BERRY, .teamFlags = 0x72, .moves = { MOVE_HYDRO_PUMP, @@ -2537,7 +2537,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_TENTACRUEL, - .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .heldItem = BATTLE_TOWER_ITEM_LEFTOVERS, .teamFlags = 0x20, .moves = { MOVE_HYDRO_PUMP, @@ -2550,7 +2550,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SABLEYE, - .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .heldItem = BATTLE_TOWER_ITEM_LEFTOVERS, .teamFlags = 0x32, .moves = { MOVE_SHADOW_BALL, @@ -2563,7 +2563,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_WOBBUFFET, - .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .heldItem = BATTLE_TOWER_ITEM_LEFTOVERS, .teamFlags = 0x20, .moves = { MOVE_ENCORE, @@ -2576,7 +2576,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_RHYDON, - .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .heldItem = BATTLE_TOWER_ITEM_QUICK_CLAW, .teamFlags = 0x71, .moves = { MOVE_EARTHQUAKE, @@ -2589,7 +2589,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_GLALIE, - .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SALAC_BERRY, .teamFlags = 0x31, .moves = { MOVE_CRUNCH, @@ -2602,7 +2602,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SCEPTILE, - .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .heldItem = BATTLE_TOWER_ITEM_SCOPE_LENS, .teamFlags = 0x8C, .moves = { MOVE_LEAF_BLADE, @@ -2615,7 +2615,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_BLAZIKEN, - .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SALAC_BERRY, .teamFlags = 0x8C, .moves = { MOVE_BLAZE_KICK, @@ -2628,7 +2628,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SWAMPERT, - .item = BATTLE_TOWER_ITEM_SHELL_BELL, + .heldItem = BATTLE_TOWER_ITEM_SHELL_BELL, .teamFlags = 0x8C, .moves = { MOVE_SURF, @@ -2641,7 +2641,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_GARDEVOIR, - .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SALAC_BERRY, .teamFlags = 0x1A, .moves = { MOVE_PSYCHIC, @@ -2654,7 +2654,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_BRELOOM, - .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LUM_BERRY, .teamFlags = 0x15, .moves = { MOVE_SPORE, @@ -2667,7 +2667,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_ALAKAZAM, - .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .heldItem = BATTLE_TOWER_ITEM_BRIGHT_POWDER, .teamFlags = 0x58, .moves = { MOVE_PSYCHIC, @@ -2680,7 +2680,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_HARIYAMA, - .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .heldItem = BATTLE_TOWER_ITEM_SCOPE_LENS, .teamFlags = 0x15, .moves = { MOVE_CROSS_CHOP, @@ -2693,7 +2693,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_GYARADOS, - .item = BATTLE_TOWER_ITEM_SHELL_BELL, + .heldItem = BATTLE_TOWER_ITEM_SHELL_BELL, .teamFlags = 0x55, .moves = { MOVE_HYPER_BEAM, @@ -2706,7 +2706,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_CROBAT, - .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .heldItem = BATTLE_TOWER_ITEM_BRIGHT_POWDER, .teamFlags = 0x58, .moves = { MOVE_SLUDGE_BOMB, @@ -2719,7 +2719,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_MACHAMP, - .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .heldItem = BATTLE_TOWER_ITEM_SCOPE_LENS, .teamFlags = 0x5D, .moves = { MOVE_CROSS_CHOP, @@ -2732,7 +2732,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_MANECTRIC, - .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LUM_BERRY, .teamFlags = 0x1A, .moves = { MOVE_THUNDERBOLT, @@ -2745,7 +2745,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_ELECTRODE, - .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LUM_BERRY, .teamFlags = 0x60, .moves = { MOVE_THUNDERBOLT, @@ -2758,7 +2758,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_MUK, - .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .heldItem = BATTLE_TOWER_ITEM_QUICK_CLAW, .teamFlags = 0x64, .moves = { MOVE_SLUDGE_BOMB, @@ -2771,7 +2771,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_FLYGON, - .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LUM_BERRY, .teamFlags = 0x1C, .moves = { MOVE_DRAGON_CLAW, @@ -2784,7 +2784,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_STARMIE, - .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LUM_BERRY, .teamFlags = 0x5C, .moves = { MOVE_SURF, @@ -2797,7 +2797,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_NINETALES, - .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LUM_BERRY, .teamFlags = 0x4A, .moves = { MOVE_CONFUSE_RAY, @@ -2810,7 +2810,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_RAICHU, - .item = BATTLE_TOWER_ITEM_FOCUS_BAND, + .heldItem = BATTLE_TOWER_ITEM_FOCUS_BAND, .teamFlags = 0x5A, .moves = { MOVE_THUNDERBOLT, @@ -2823,7 +2823,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_GOLDUCK, - .item = BATTLE_TOWER_ITEM_LIECHI_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LIECHI_BERRY, .teamFlags = 0x55, .moves = { MOVE_SURF, @@ -2836,7 +2836,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_HERACROSS, - .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SALAC_BERRY, .teamFlags = 0x5D, .moves = { MOVE_MEGAHORN, @@ -2849,7 +2849,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_WALREIN, - .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .heldItem = BATTLE_TOWER_ITEM_QUICK_CLAW, .teamFlags = 0x26, .moves = { MOVE_SURF, @@ -2862,7 +2862,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_KINGDRA, - .item = BATTLE_TOWER_ITEM_CHESTO_BERRY, + .heldItem = BATTLE_TOWER_ITEM_CHESTO_BERRY, .teamFlags = 0x5B, .moves = { MOVE_SURF, @@ -2875,7 +2875,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SALAMENCE, - .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LUM_BERRY, .teamFlags = 0x0D, .moves = { MOVE_DRAGON_CLAW, @@ -2888,7 +2888,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_METAGROSS, - .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SALAC_BERRY, .teamFlags = 0x3D, .moves = { MOVE_METEOR_MASH, @@ -2901,7 +2901,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_REGIROCK, - .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .heldItem = BATTLE_TOWER_ITEM_BRIGHT_POWDER, .teamFlags = 0x3C, .moves = { MOVE_EARTHQUAKE, @@ -2914,7 +2914,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_REGICE, - .item = BATTLE_TOWER_ITEM_LAX_INCENSE, + .heldItem = BATTLE_TOWER_ITEM_LAX_INCENSE, .teamFlags = 0x3C, .moves = { MOVE_ICE_BEAM, @@ -2927,7 +2927,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_REGISTEEL, - .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .heldItem = BATTLE_TOWER_ITEM_QUICK_CLAW, .teamFlags = 0x3C, .moves = { MOVE_METAL_CLAW, @@ -2940,7 +2940,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_LATIAS, - .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LUM_BERRY, .teamFlags = 0x0E, .moves = { MOVE_MIST_BALL, @@ -2953,7 +2953,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_LATIOS, - .item = BATTLE_TOWER_ITEM_PETAYA_BERRY, + .heldItem = BATTLE_TOWER_ITEM_PETAYA_BERRY, .teamFlags = 0x0D, .moves = { MOVE_LUSTER_PURGE, @@ -2966,7 +2966,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_MILOTIC, - .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .heldItem = BATTLE_TOWER_ITEM_LEFTOVERS, .teamFlags = 0x1A, .moves = { MOVE_SURF, @@ -2979,7 +2979,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SLAKING, - .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LUM_BERRY, .teamFlags = 0x15, .moves = { MOVE_YAWN, @@ -2992,7 +2992,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SCEPTILE, - .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .heldItem = BATTLE_TOWER_ITEM_LEFTOVERS, .teamFlags = 0x8C, .moves = { MOVE_GIGA_DRAIN, @@ -3005,7 +3005,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_BLAZIKEN, - .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .heldItem = BATTLE_TOWER_ITEM_SCOPE_LENS, .teamFlags = 0x8C, .moves = { MOVE_BLAZE_KICK, @@ -3018,7 +3018,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SWAMPERT, - .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .heldItem = BATTLE_TOWER_ITEM_LEFTOVERS, .teamFlags = 0x8C, .moves = { MOVE_MUDDY_WATER, @@ -3031,7 +3031,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_GARDEVOIR, - .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SALAC_BERRY, .teamFlags = 0x0A, .moves = { MOVE_PSYCHIC, @@ -3044,7 +3044,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_BRELOOM, - .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SALAC_BERRY, .teamFlags = 0x05, .moves = { MOVE_SPORE, @@ -3057,7 +3057,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_ALAKAZAM, - .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .heldItem = BATTLE_TOWER_ITEM_BRIGHT_POWDER, .teamFlags = 0x58, .moves = { MOVE_PSYCHIC, @@ -3070,7 +3070,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_HARIYAMA, - .item = BATTLE_TOWER_ITEM_FOCUS_BAND, + .heldItem = BATTLE_TOWER_ITEM_FOCUS_BAND, .teamFlags = 0x04, .moves = { MOVE_CROSS_CHOP, @@ -3083,7 +3083,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_GYARADOS, - .item = BATTLE_TOWER_ITEM_SHELL_BELL, + .heldItem = BATTLE_TOWER_ITEM_SHELL_BELL, .teamFlags = 0x44, .moves = { MOVE_HYPER_BEAM, @@ -3096,7 +3096,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_CROBAT, - .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .heldItem = BATTLE_TOWER_ITEM_BRIGHT_POWDER, .teamFlags = 0x48, .moves = { MOVE_TOXIC, @@ -3109,7 +3109,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_MACHAMP, - .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .heldItem = BATTLE_TOWER_ITEM_SCOPE_LENS, .teamFlags = 0x5D, .moves = { MOVE_CROSS_CHOP, @@ -3122,7 +3122,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_MANECTRIC, - .item = BATTLE_TOWER_ITEM_PETAYA_BERRY, + .heldItem = BATTLE_TOWER_ITEM_PETAYA_BERRY, .teamFlags = 0x0A, .moves = { MOVE_THUNDER, @@ -3135,7 +3135,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_ELECTRODE, - .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SALAC_BERRY, .teamFlags = 0x60, .moves = { MOVE_THUNDERBOLT, @@ -3148,7 +3148,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_MUK, - .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .heldItem = BATTLE_TOWER_ITEM_QUICK_CLAW, .teamFlags = 0x64, .moves = { MOVE_SLUDGE_BOMB, @@ -3161,7 +3161,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_FLYGON, - .item = BATTLE_TOWER_ITEM_SHELL_BELL, + .heldItem = BATTLE_TOWER_ITEM_SHELL_BELL, .teamFlags = 0x1C, .moves = { MOVE_DRAGON_CLAW, @@ -3174,7 +3174,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_STARMIE, - .item = BATTLE_TOWER_ITEM_APICOT_BERRY, + .heldItem = BATTLE_TOWER_ITEM_APICOT_BERRY, .teamFlags = 0x5C, .moves = { MOVE_BLIZZARD, @@ -3187,7 +3187,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_DODRIO, - .item = BATTLE_TOWER_ITEM_LIECHI_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LIECHI_BERRY, .teamFlags = 0x5A, .moves = { MOVE_DRILL_PECK, @@ -3200,7 +3200,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_RAICHU, - .item = BATTLE_TOWER_ITEM_PETAYA_BERRY, + .heldItem = BATTLE_TOWER_ITEM_PETAYA_BERRY, .teamFlags = 0x4A, .moves = { MOVE_THUNDERBOLT, @@ -3213,7 +3213,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_GOLDUCK, - .item = BATTLE_TOWER_ITEM_PETAYA_BERRY, + .heldItem = BATTLE_TOWER_ITEM_PETAYA_BERRY, .teamFlags = 0x45, .moves = { MOVE_HYDRO_PUMP, @@ -3226,7 +3226,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_HERACROSS, - .item = BATTLE_TOWER_ITEM_LIECHI_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LIECHI_BERRY, .teamFlags = 0x5D, .moves = { MOVE_MEGAHORN, @@ -3239,7 +3239,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_WALREIN, - .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .heldItem = BATTLE_TOWER_ITEM_LEFTOVERS, .teamFlags = 0x26, .moves = { MOVE_SURF, @@ -3252,7 +3252,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_KINGDRA, - .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .heldItem = BATTLE_TOWER_ITEM_LEFTOVERS, .teamFlags = 0x5C, .moves = { MOVE_HYDRO_PUMP, @@ -3265,7 +3265,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SALAMENCE, - .item = BATTLE_TOWER_ITEM_KINGS_ROCK, + .heldItem = BATTLE_TOWER_ITEM_KINGS_ROCK, .teamFlags = 0x1D, .moves = { MOVE_DRAGON_CLAW, @@ -3278,7 +3278,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_METAGROSS, - .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .heldItem = BATTLE_TOWER_ITEM_QUICK_CLAW, .teamFlags = 0x3D, .moves = { MOVE_METEOR_MASH, @@ -3291,7 +3291,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_REGIROCK, - .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .heldItem = BATTLE_TOWER_ITEM_QUICK_CLAW, .teamFlags = 0x3C, .moves = { MOVE_EARTHQUAKE, @@ -3304,7 +3304,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_REGICE, - .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .heldItem = BATTLE_TOWER_ITEM_BRIGHT_POWDER, .teamFlags = 0x3C, .moves = { MOVE_ICE_BEAM, @@ -3317,7 +3317,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_REGISTEEL, - .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SALAC_BERRY, .teamFlags = 0x3C, .moves = { MOVE_METAL_CLAW, @@ -3330,7 +3330,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_LATIAS, - .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .heldItem = BATTLE_TOWER_ITEM_BRIGHT_POWDER, .teamFlags = 0x1E, .moves = { MOVE_MIST_BALL, @@ -3343,7 +3343,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_LATIOS, - .item = BATTLE_TOWER_ITEM_LAX_INCENSE, + .heldItem = BATTLE_TOWER_ITEM_LAX_INCENSE, .teamFlags = 0x1D, .moves = { MOVE_LUSTER_PURGE, @@ -3356,7 +3356,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_MILOTIC, - .item = BATTLE_TOWER_ITEM_PETAYA_BERRY, + .heldItem = BATTLE_TOWER_ITEM_PETAYA_BERRY, .teamFlags = 0x1A, .moves = { MOVE_HYDRO_PUMP, @@ -3369,7 +3369,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SLAKING, - .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LUM_BERRY, .teamFlags = 0x15, .moves = { MOVE_YAWN, @@ -3382,7 +3382,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SCEPTILE, - .item = BATTLE_TOWER_ITEM_PETAYA_BERRY, + .heldItem = BATTLE_TOWER_ITEM_PETAYA_BERRY, .teamFlags = 0x8C, .moves = { MOVE_LEAF_BLADE, @@ -3395,7 +3395,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_BLAZIKEN, - .item = BATTLE_TOWER_ITEM_GANLON_BERRY, + .heldItem = BATTLE_TOWER_ITEM_GANLON_BERRY, .teamFlags = 0x8C, .moves = { MOVE_FOCUS_PUNCH, @@ -3408,7 +3408,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SWAMPERT, - .item = BATTLE_TOWER_ITEM_SHELL_BELL, + .heldItem = BATTLE_TOWER_ITEM_SHELL_BELL, .teamFlags = 0x8C, .moves = { MOVE_SURF, @@ -3421,7 +3421,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_GARDEVOIR, - .item = BATTLE_TOWER_ITEM_LAX_INCENSE, + .heldItem = BATTLE_TOWER_ITEM_LAX_INCENSE, .teamFlags = 0x0A, .moves = { MOVE_PSYCHIC, @@ -3434,7 +3434,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_BRELOOM, - .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LUM_BERRY, .teamFlags = 0x05, .moves = { MOVE_SPORE, @@ -3447,7 +3447,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_ALAKAZAM, - .item = BATTLE_TOWER_ITEM_CHOICE_BAND, + .heldItem = BATTLE_TOWER_ITEM_CHOICE_BAND, .teamFlags = 0x58, .moves = { MOVE_PSYCHIC, @@ -3460,7 +3460,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_HARIYAMA, - .item = BATTLE_TOWER_ITEM_FOCUS_BAND, + .heldItem = BATTLE_TOWER_ITEM_FOCUS_BAND, .teamFlags = 0x05, .moves = { MOVE_REVENGE, @@ -3473,7 +3473,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_LUDICOLO, - .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .heldItem = BATTLE_TOWER_ITEM_LEFTOVERS, .teamFlags = 0x0A, .moves = { MOVE_RAIN_DANCE, @@ -3486,7 +3486,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_CROBAT, - .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .heldItem = BATTLE_TOWER_ITEM_BRIGHT_POWDER, .teamFlags = 0x48, .moves = { MOVE_SLUDGE_BOMB, @@ -3499,7 +3499,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_MACHAMP, - .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .heldItem = BATTLE_TOWER_ITEM_SCOPE_LENS, .teamFlags = 0x5D, .moves = { MOVE_CROSS_CHOP, @@ -3512,7 +3512,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_MANECTRIC, - .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LUM_BERRY, .teamFlags = 0x08, .moves = { MOVE_THUNDERBOLT, @@ -3525,7 +3525,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_ELECTRODE, - .item = BATTLE_TOWER_ITEM_LIECHI_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LIECHI_BERRY, .teamFlags = 0x60, .moves = { MOVE_THUNDER, @@ -3538,7 +3538,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_MUK, - .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SALAC_BERRY, .teamFlags = 0x64, .moves = { MOVE_SLUDGE_BOMB, @@ -3551,7 +3551,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_FLYGON, - .item = BATTLE_TOWER_ITEM_LAX_INCENSE, + .heldItem = BATTLE_TOWER_ITEM_LAX_INCENSE, .teamFlags = 0x0C, .moves = { MOVE_DRAGON_CLAW, @@ -3564,7 +3564,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_STARMIE, - .item = BATTLE_TOWER_ITEM_PETAYA_BERRY, + .heldItem = BATTLE_TOWER_ITEM_PETAYA_BERRY, .teamFlags = 0x4C, .moves = { MOVE_SURF, @@ -3577,7 +3577,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_LUDICOLO, - .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .heldItem = BATTLE_TOWER_ITEM_LEFTOVERS, .teamFlags = 0x4A, .moves = { MOVE_LEECH_SEED, @@ -3590,7 +3590,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SKARMORY, - .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .heldItem = BATTLE_TOWER_ITEM_LEFTOVERS, .teamFlags = 0x4B, .moves = { MOVE_DRILL_PECK, @@ -3603,7 +3603,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_GOLDUCK, - .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .heldItem = BATTLE_TOWER_ITEM_SCOPE_LENS, .teamFlags = 0x49, .moves = { MOVE_SURF, @@ -3616,7 +3616,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_HERACROSS, - .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .heldItem = BATTLE_TOWER_ITEM_QUICK_CLAW, .teamFlags = 0x5D, .moves = { MOVE_MEGAHORN, @@ -3629,7 +3629,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_WALREIN, - .item = BATTLE_TOWER_ITEM_LEPPA_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LEPPA_BERRY, .teamFlags = 0x26, .moves = { MOVE_SURF, @@ -3642,7 +3642,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_KINGDRA, - .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SALAC_BERRY, .teamFlags = 0x5C, .moves = { MOVE_SURF, @@ -3655,7 +3655,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SALAMENCE, - .item = BATTLE_TOWER_ITEM_PETAYA_BERRY, + .heldItem = BATTLE_TOWER_ITEM_PETAYA_BERRY, .teamFlags = 0x1D, .moves = { MOVE_DRAGON_CLAW, @@ -3668,7 +3668,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_METAGROSS, - .item = BATTLE_TOWER_ITEM_LIECHI_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LIECHI_BERRY, .teamFlags = 0x3D, .moves = { MOVE_METEOR_MASH, @@ -3681,7 +3681,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_REGIROCK, - .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SALAC_BERRY, .teamFlags = 0x3C, .moves = { MOVE_EARTHQUAKE, @@ -3694,7 +3694,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_REGICE, - .item = BATTLE_TOWER_ITEM_LAX_INCENSE, + .heldItem = BATTLE_TOWER_ITEM_LAX_INCENSE, .teamFlags = 0x3C, .moves = { MOVE_ICE_BEAM, @@ -3707,7 +3707,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_REGISTEEL, - .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .heldItem = BATTLE_TOWER_ITEM_LEFTOVERS, .teamFlags = 0x3C, .moves = { MOVE_METAL_CLAW, @@ -3720,7 +3720,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_LATIAS, - .item = BATTLE_TOWER_ITEM_APICOT_BERRY, + .heldItem = BATTLE_TOWER_ITEM_APICOT_BERRY, .teamFlags = 0x1E, .moves = { MOVE_MIST_BALL, @@ -3733,7 +3733,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_LATIOS, - .item = BATTLE_TOWER_ITEM_GANLON_BERRY, + .heldItem = BATTLE_TOWER_ITEM_GANLON_BERRY, .teamFlags = 0x1D, .moves = { MOVE_LUSTER_PURGE, @@ -3746,7 +3746,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_MILOTIC, - .item = BATTLE_TOWER_ITEM_APICOT_BERRY, + .heldItem = BATTLE_TOWER_ITEM_APICOT_BERRY, .teamFlags = 0x1A, .moves = { MOVE_SURF, @@ -3759,7 +3759,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_ALTARIA, - .item = BATTLE_TOWER_ITEM_GANLON_BERRY, + .heldItem = BATTLE_TOWER_ITEM_GANLON_BERRY, .teamFlags = 0x0A, .moves = { MOVE_DRAGON_CLAW, @@ -3772,7 +3772,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SCEPTILE, - .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .heldItem = BATTLE_TOWER_ITEM_BRIGHT_POWDER, .teamFlags = 0x9C, .moves = { MOVE_LEAF_BLADE, @@ -3785,7 +3785,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_BLAZIKEN, - .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SALAC_BERRY, .teamFlags = 0x9C, .moves = { MOVE_BLAZE_KICK, @@ -3798,7 +3798,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SWAMPERT, - .item = BATTLE_TOWER_ITEM_PETAYA_BERRY, + .heldItem = BATTLE_TOWER_ITEM_PETAYA_BERRY, .teamFlags = 0x9C, .moves = { MOVE_SURF, @@ -3811,7 +3811,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SHEDINJA, - .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .heldItem = BATTLE_TOWER_ITEM_BRIGHT_POWDER, .teamFlags = 0x20, .moves = { MOVE_CONFUSE_RAY, @@ -3824,7 +3824,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_METAGROSS, - .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .heldItem = BATTLE_TOWER_ITEM_LEFTOVERS, .teamFlags = 0x1D, .moves = { MOVE_METEOR_MASH, @@ -3837,7 +3837,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_ALAKAZAM, - .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .heldItem = BATTLE_TOWER_ITEM_LEFTOVERS, .teamFlags = 0x58, .moves = { MOVE_PSYCHIC, @@ -3850,7 +3850,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_LATIAS, - .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .heldItem = BATTLE_TOWER_ITEM_LEFTOVERS, .teamFlags = 0x1E, .moves = { MOVE_MIST_BALL, @@ -3863,7 +3863,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_LATIOS, - .item = BATTLE_TOWER_ITEM_SHELL_BELL, + .heldItem = BATTLE_TOWER_ITEM_SHELL_BELL, .teamFlags = 0x1D, .moves = { MOVE_LUSTER_PURGE, @@ -3876,7 +3876,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SALAMENCE, - .item = BATTLE_TOWER_ITEM_SHELL_BELL, + .heldItem = BATTLE_TOWER_ITEM_SHELL_BELL, .teamFlags = 0x1D, .moves = { MOVE_DRAGON_CLAW, @@ -3889,7 +3889,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_MACHAMP, - .item = BATTLE_TOWER_ITEM_LIECHI_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LIECHI_BERRY, .teamFlags = 0x5D, .moves = { MOVE_CROSS_CHOP, diff --git a/src/data/battle_tower/level_50_mons.h b/src/data/battle_tower/level_50_mons.h index 8e1463a86..c61f840af 100644 --- a/src/data/battle_tower/level_50_mons.h +++ b/src/data/battle_tower/level_50_mons.h @@ -2,7 +2,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = { { .species = SPECIES_PIKACHU, - .item = BATTLE_TOWER_ITEM_ORAN_BERRY, + .heldItem = BATTLE_TOWER_ITEM_ORAN_BERRY, .teamFlags = 0x42, .moves = { MOVE_QUICK_ATTACK, @@ -15,7 +15,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_BEAUTIFLY, - .item = BATTLE_TOWER_ITEM_MIRACLE_SEED, + .heldItem = BATTLE_TOWER_ITEM_MIRACLE_SEED, .teamFlags = 0x41, .moves = { MOVE_ABSORB, @@ -28,7 +28,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_SWELLOW, - .item = BATTLE_TOWER_ITEM_SHARP_BEAK, + .heldItem = BATTLE_TOWER_ITEM_SHARP_BEAK, .teamFlags = 0x07, .moves = { MOVE_PECK, @@ -41,7 +41,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_WALREIN, - .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .heldItem = BATTLE_TOWER_ITEM_SCOPE_LENS, .teamFlags = 0x0B, .moves = { MOVE_HAIL, @@ -54,7 +54,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_SEAKING, - .item = BATTLE_TOWER_ITEM_MYSTIC_WATER, + .heldItem = BATTLE_TOWER_ITEM_MYSTIC_WATER, .teamFlags = 0x07, .moves = { MOVE_PECK, @@ -67,7 +67,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_TORCHIC, - .item = BATTLE_TOWER_ITEM_KINGS_ROCK, + .heldItem = BATTLE_TOWER_ITEM_KINGS_ROCK, .teamFlags = 0x42, .moves = { MOVE_FIRE_SPIN, @@ -80,7 +80,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_MASQUERAIN, - .item = BATTLE_TOWER_ITEM_WHITE_HERB, + .heldItem = BATTLE_TOWER_ITEM_WHITE_HERB, .teamFlags = 0x41, .moves = { MOVE_STUN_SPORE, @@ -93,7 +93,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_ILLUMISE, - .item = BATTLE_TOWER_ITEM_NONE, + .heldItem = BATTLE_TOWER_ITEM_NONE, .teamFlags = 0x41, .moves = { MOVE_FLATTER, @@ -106,7 +106,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_DELCATTY, - .item = BATTLE_TOWER_ITEM_SILK_SCARF, + .heldItem = BATTLE_TOWER_ITEM_SILK_SCARF, .teamFlags = 0x42, .moves = { MOVE_ATTRACT, @@ -119,7 +119,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_KECLEON, - .item = BATTLE_TOWER_ITEM_PERSIM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_PERSIM_BERRY, .teamFlags = 0x0B, .moves = { MOVE_TAIL_WHIP, @@ -132,7 +132,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_MIGHTYENA, - .item = BATTLE_TOWER_ITEM_PECHA_BERRY, + .heldItem = BATTLE_TOWER_ITEM_PECHA_BERRY, .teamFlags = 0x05, .moves = { MOVE_BITE, @@ -145,7 +145,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_SLAKING, - .item = BATTLE_TOWER_ITEM_BLACK_GLASSES, + .heldItem = BATTLE_TOWER_ITEM_BLACK_GLASSES, .teamFlags = 0x05, .moves = { MOVE_FAINT_ATTACK, @@ -158,7 +158,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_MACHOKE, - .item = BATTLE_TOWER_ITEM_CHESTO_BERRY, + .heldItem = BATTLE_TOWER_ITEM_CHESTO_BERRY, .teamFlags = 0x05, .moves = { MOVE_LEER, @@ -171,7 +171,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_RHYDON, - .item = BATTLE_TOWER_ITEM_PERSIM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_PERSIM_BERRY, .teamFlags = 0x05, .moves = { MOVE_STRENGTH, @@ -184,7 +184,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_CACTURNE, - .item = BATTLE_TOWER_ITEM_POISON_BARB, + .heldItem = BATTLE_TOWER_ITEM_POISON_BARB, .teamFlags = 0x0B, .moves = { MOVE_POISON_STING, @@ -197,7 +197,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_ZIGZAGOON, - .item = BATTLE_TOWER_ITEM_KINGS_ROCK, + .heldItem = BATTLE_TOWER_ITEM_KINGS_ROCK, .teamFlags = 0x0A, .moves = { MOVE_FLAIL, @@ -210,7 +210,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_DODRIO, - .item = BATTLE_TOWER_ITEM_SHARP_BEAK, + .heldItem = BATTLE_TOWER_ITEM_SHARP_BEAK, .teamFlags = 0x03, .moves = { MOVE_PURSUIT, @@ -223,7 +223,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_WHISCASH, - .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .heldItem = BATTLE_TOWER_ITEM_QUICK_CLAW, .teamFlags = 0x0B, .moves = { MOVE_WATER_GUN, @@ -236,7 +236,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_NINJASK, - .item = BATTLE_TOWER_ITEM_SILVER_POWDER, + .heldItem = BATTLE_TOWER_ITEM_SILVER_POWDER, .teamFlags = 0x41, .moves = { MOVE_SAND_ATTACK, @@ -249,7 +249,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_DUSCLOPS, - .item = BATTLE_TOWER_ITEM_PECHA_BERRY, + .heldItem = BATTLE_TOWER_ITEM_PECHA_BERRY, .teamFlags = 0x01, .moves = { MOVE_PROTECT, @@ -262,7 +262,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_CAMERUPT, - .item = BATTLE_TOWER_ITEM_CHARCOAL, + .heldItem = BATTLE_TOWER_ITEM_CHARCOAL, .teamFlags = 0x07, .moves = { MOVE_DIG, @@ -275,7 +275,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_SPINDA, - .item = BATTLE_TOWER_ITEM_CHERI_BERRY, + .heldItem = BATTLE_TOWER_ITEM_CHERI_BERRY, .teamFlags = 0x4A, .moves = { MOVE_TEETER_DANCE, @@ -288,7 +288,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_SEVIPER, - .item = BATTLE_TOWER_ITEM_POISON_BARB, + .heldItem = BATTLE_TOWER_ITEM_POISON_BARB, .teamFlags = 0x09, .moves = { MOVE_SCREECH, @@ -301,7 +301,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_FLYGON, - .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .heldItem = BATTLE_TOWER_ITEM_QUICK_CLAW, .teamFlags = 0x49, .moves = { MOVE_SAND_ATTACK, @@ -314,7 +314,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_AZUMARILL, - .item = BATTLE_TOWER_ITEM_WHITE_HERB, + .heldItem = BATTLE_TOWER_ITEM_WHITE_HERB, .teamFlags = 0x42, .moves = { MOVE_BUBBLE_BEAM, @@ -327,7 +327,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_ZANGOOSE, - .item = BATTLE_TOWER_ITEM_MENTAL_HERB, + .heldItem = BATTLE_TOWER_ITEM_MENTAL_HERB, .teamFlags = 0x07, .moves = { MOVE_STRENGTH, @@ -340,7 +340,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_MEDICHAM, - .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .heldItem = BATTLE_TOWER_ITEM_SCOPE_LENS, .teamFlags = 0x07, .moves = { MOVE_REVERSAL, @@ -353,7 +353,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_ROSELIA, - .item = BATTLE_TOWER_ITEM_MIRACLE_SEED, + .heldItem = BATTLE_TOWER_ITEM_MIRACLE_SEED, .teamFlags = 0x0A, .moves = { MOVE_GROWTH, @@ -366,7 +366,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_SWALOT, - .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LUM_BERRY, .teamFlags = 0x0B, .moves = { MOVE_STOCKPILE, @@ -379,7 +379,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_MAGNETON, - .item = BATTLE_TOWER_ITEM_MAGNET, + .heldItem = BATTLE_TOWER_ITEM_MAGNET, .teamFlags = 0x0B, .moves = { MOVE_SUPERSONIC, @@ -392,7 +392,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_GARDEVOIR, - .item = BATTLE_TOWER_ITEM_TWISTED_SPOON, + .heldItem = BATTLE_TOWER_ITEM_TWISTED_SPOON, .teamFlags = 0x09, .moves = { MOVE_CONFUSION, @@ -405,7 +405,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_RELICANTH, - .item = BATTLE_TOWER_ITEM_MYSTIC_WATER, + .heldItem = BATTLE_TOWER_ITEM_MYSTIC_WATER, .teamFlags = 0x01, .moves = { MOVE_SURF, @@ -418,7 +418,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_NINETALES, - .item = BATTLE_TOWER_ITEM_RAWST_BERRY, + .heldItem = BATTLE_TOWER_ITEM_RAWST_BERRY, .teamFlags = 0x03, .moves = { MOVE_CONFUSE_RAY, @@ -431,7 +431,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_SHARPEDO, - .item = BATTLE_TOWER_ITEM_BLACK_GLASSES, + .heldItem = BATTLE_TOWER_ITEM_BLACK_GLASSES, .teamFlags = 0x05, .moves = { MOVE_BITE, @@ -444,7 +444,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_GIRAFARIG, - .item = BATTLE_TOWER_ITEM_KINGS_ROCK, + .heldItem = BATTLE_TOWER_ITEM_KINGS_ROCK, .teamFlags = 0x03, .moves = { MOVE_STRENGTH, @@ -457,7 +457,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_PELIPPER, - .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SITRUS_BERRY, .teamFlags = 0x0B, .moves = { MOVE_MIST, @@ -470,7 +470,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_SABLEYE, - .item = BATTLE_TOWER_ITEM_CHERI_BERRY, + .heldItem = BATTLE_TOWER_ITEM_CHERI_BERRY, .teamFlags = 0x09, .moves = { MOVE_SHADOW_BALL, @@ -483,7 +483,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_LUNATONE, - .item = BATTLE_TOWER_ITEM_HARD_STONE, + .heldItem = BATTLE_TOWER_ITEM_HARD_STONE, .teamFlags = 0x0B, .moves = { MOVE_COSMIC_POWER, @@ -496,7 +496,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_LUDICOLO, - .item = BATTLE_TOWER_ITEM_NONE, + .heldItem = BATTLE_TOWER_ITEM_NONE, .teamFlags = 0x0B, .moves = { MOVE_THIEF, @@ -509,7 +509,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_GRUMPIG, - .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SALAC_BERRY, .teamFlags = 0x0B, .moves = { MOVE_ODOR_SLEUTH, @@ -522,7 +522,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_BRELOOM, - .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .heldItem = BATTLE_TOWER_ITEM_QUICK_CLAW, .teamFlags = 0x0B, .moves = { MOVE_CUT, @@ -535,7 +535,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_WAILORD, - .item = BATTLE_TOWER_ITEM_MYSTIC_WATER, + .heldItem = BATTLE_TOWER_ITEM_MYSTIC_WATER, .teamFlags = 0x03, .moves = { MOVE_WATER_SPOUT, @@ -548,7 +548,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_WEEZING, - .item = BATTLE_TOWER_ITEM_POISON_BARB, + .heldItem = BATTLE_TOWER_ITEM_POISON_BARB, .teamFlags = 0x05, .moves = { MOVE_SMOG, @@ -561,7 +561,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_KADABRA, - .item = BATTLE_TOWER_ITEM_LEPPA_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LEPPA_BERRY, .teamFlags = 0x0B, .moves = { MOVE_FUTURE_SIGHT, @@ -574,7 +574,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_MANECTRIC, - .item = BATTLE_TOWER_ITEM_MAGNET, + .heldItem = BATTLE_TOWER_ITEM_MAGNET, .teamFlags = 0x07, .moves = { MOVE_THUNDER_WAVE, @@ -587,7 +587,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_RAICHU, - .item = BATTLE_TOWER_ITEM_ASPEAR_BERRY, + .heldItem = BATTLE_TOWER_ITEM_ASPEAR_BERRY, .teamFlags = 0x03, .moves = { MOVE_QUICK_ATTACK, @@ -600,7 +600,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_XATU, - .item = BATTLE_TOWER_ITEM_TWISTED_SPOON, + .heldItem = BATTLE_TOWER_ITEM_TWISTED_SPOON, .teamFlags = 0x03, .moves = { MOVE_NIGHT_SHADE, @@ -613,7 +613,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_LOUDRED, - .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SITRUS_BERRY, .teamFlags = 0x05, .moves = { MOVE_UPROAR, @@ -626,7 +626,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_SOLROCK, - .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .heldItem = BATTLE_TOWER_ITEM_LEFTOVERS, .teamFlags = 0x03, .moves = { MOVE_ROCK_THROW, @@ -639,7 +639,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_CLAYDOL, - .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .heldItem = BATTLE_TOWER_ITEM_BRIGHT_POWDER, .teamFlags = 0x03, .moves = { MOVE_SANDSTORM, @@ -652,7 +652,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_CRAWDAUNT, - .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .heldItem = BATTLE_TOWER_ITEM_SCOPE_LENS, .teamFlags = 0x03, .moves = { MOVE_WATER_PULSE, @@ -665,7 +665,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_GOLBAT, - .item = BATTLE_TOWER_ITEM_WHITE_HERB, + .heldItem = BATTLE_TOWER_ITEM_WHITE_HERB, .teamFlags = 0x09, .moves = { MOVE_CONFUSE_RAY, @@ -678,7 +678,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_BELLOSSOM, - .item = BATTLE_TOWER_ITEM_MIRACLE_SEED, + .heldItem = BATTLE_TOWER_ITEM_MIRACLE_SEED, .teamFlags = 0x0A, .moves = { MOVE_SOLAR_BEAM, @@ -691,7 +691,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_DONPHAN, - .item = BATTLE_TOWER_ITEM_KINGS_ROCK, + .heldItem = BATTLE_TOWER_ITEM_KINGS_ROCK, .teamFlags = 0x05, .moves = { MOVE_ROCK_SMASH, @@ -704,7 +704,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_NOSEPASS, - .item = BATTLE_TOWER_ITEM_PERSIM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_PERSIM_BERRY, .teamFlags = 0x0B, .moves = { MOVE_SANDSTORM, @@ -717,7 +717,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_PINSIR, - .item = BATTLE_TOWER_ITEM_CHESTO_BERRY, + .heldItem = BATTLE_TOWER_ITEM_CHESTO_BERRY, .teamFlags = 0x05, .moves = { MOVE_SWORDS_DANCE, @@ -730,7 +730,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_GOLDUCK, - .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .heldItem = BATTLE_TOWER_ITEM_BRIGHT_POWDER, .teamFlags = 0x0B, .moves = { MOVE_DISABLE, @@ -743,7 +743,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_SHIFTRY, - .item = BATTLE_TOWER_ITEM_MENTAL_HERB, + .heldItem = BATTLE_TOWER_ITEM_MENTAL_HERB, .teamFlags = 0x07, .moves = { MOVE_TORMENT, @@ -756,7 +756,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_DUSTOX, - .item = BATTLE_TOWER_ITEM_SILVER_POWDER, + .heldItem = BATTLE_TOWER_ITEM_SILVER_POWDER, .teamFlags = 0x01, .moves = { MOVE_CONFUSION, @@ -769,7 +769,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_SHUPPET, - .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .heldItem = BATTLE_TOWER_ITEM_SCOPE_LENS, .teamFlags = 0x03, .moves = { MOVE_WILL_O_WISP, @@ -782,7 +782,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_SEAKING, - .item = BATTLE_TOWER_ITEM_MYSTIC_WATER, + .heldItem = BATTLE_TOWER_ITEM_MYSTIC_WATER, .teamFlags = 0x07, .moves = { MOVE_RAIN_DANCE, @@ -795,7 +795,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_SKARMORY, - .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SITRUS_BERRY, .teamFlags = 0x07, .moves = { MOVE_STEEL_WING, @@ -808,7 +808,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_TORKOAL, - .item = BATTLE_TOWER_ITEM_FOCUS_BAND, + .heldItem = BATTLE_TOWER_ITEM_FOCUS_BAND, .teamFlags = 0x43, .moves = { MOVE_FLAMETHROWER, @@ -821,7 +821,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_GOLEM, - .item = BATTLE_TOWER_ITEM_SOFT_SAND, + .heldItem = BATTLE_TOWER_ITEM_SOFT_SAND, .teamFlags = 0x05, .moves = { MOVE_MAGNITUDE, @@ -834,7 +834,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_GARDEVOIR, - .item = BATTLE_TOWER_ITEM_TWISTED_SPOON, + .heldItem = BATTLE_TOWER_ITEM_TWISTED_SPOON, .teamFlags = 0x41, .moves = { MOVE_REFLECT, @@ -847,7 +847,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_SANDSLASH, - .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .heldItem = BATTLE_TOWER_ITEM_BRIGHT_POWDER, .teamFlags = 0x07, .moves = { MOVE_SANDSTORM, @@ -860,7 +860,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_WOBBUFFET, - .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SALAC_BERRY, .teamFlags = 0x0B, .moves = { MOVE_COUNTER, @@ -873,7 +873,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_TENTACRUEL, - .item = BATTLE_TOWER_ITEM_CHERI_BERRY, + .heldItem = BATTLE_TOWER_ITEM_CHERI_BERRY, .teamFlags = 0x05, .moves = { MOVE_CONSTRICT, @@ -886,7 +886,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_TROPIUS, - .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .heldItem = BATTLE_TOWER_ITEM_LEFTOVERS, .teamFlags = 0x05, .moves = { MOVE_SUNNY_DAY, @@ -899,7 +899,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_MAWILE, - .item = BATTLE_TOWER_ITEM_METAL_COAT, + .heldItem = BATTLE_TOWER_ITEM_METAL_COAT, .teamFlags = 0x43, .moves = { MOVE_IRON_DEFENSE, @@ -912,7 +912,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_MUK, - .item = BATTLE_TOWER_ITEM_RAWST_BERRY, + .heldItem = BATTLE_TOWER_ITEM_RAWST_BERRY, .teamFlags = 0x09, .moves = { MOVE_SLUDGE, @@ -925,7 +925,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_MAGCARGO, - .item = BATTLE_TOWER_ITEM_CHARCOAL, + .heldItem = BATTLE_TOWER_ITEM_CHARCOAL, .teamFlags = 0x0D, .moves = { MOVE_FLAMETHROWER, @@ -938,7 +938,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_LINOONE, - .item = BATTLE_TOWER_ITEM_PECHA_BERRY, + .heldItem = BATTLE_TOWER_ITEM_PECHA_BERRY, .teamFlags = 0x07, .moves = { MOVE_HEADBUTT, @@ -951,7 +951,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_ELECTRODE, - .item = BATTLE_TOWER_ITEM_ASPEAR_BERRY, + .heldItem = BATTLE_TOWER_ITEM_ASPEAR_BERRY, .teamFlags = 0x05, .moves = { MOVE_LIGHT_SCREEN, @@ -964,7 +964,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_DUSCLOPS, - .item = BATTLE_TOWER_ITEM_SPELL_TAG, + .heldItem = BATTLE_TOWER_ITEM_SPELL_TAG, .teamFlags = 0x09, .moves = { MOVE_MEAN_LOOK, @@ -977,7 +977,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_VILEPLUME, - .item = BATTLE_TOWER_ITEM_MIRACLE_SEED, + .heldItem = BATTLE_TOWER_ITEM_MIRACLE_SEED, .teamFlags = 0x0A, .moves = { MOVE_TOXIC, @@ -990,7 +990,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_CROBAT, - .item = BATTLE_TOWER_ITEM_LEPPA_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LEPPA_BERRY, .teamFlags = 0x05, .moves = { MOVE_BITE, @@ -1003,7 +1003,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_CORSOLA, - .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .heldItem = BATTLE_TOWER_ITEM_SCOPE_LENS, .teamFlags = 0x0A, .moves = { MOVE_RECOVER, @@ -1016,7 +1016,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_STARMIE, - .item = BATTLE_TOWER_ITEM_MYSTIC_WATER, + .heldItem = BATTLE_TOWER_ITEM_MYSTIC_WATER, .teamFlags = 0x0B, .moves = { MOVE_RAPID_SPIN, @@ -1029,7 +1029,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_EXPLOUD, - .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .heldItem = BATTLE_TOWER_ITEM_LEFTOVERS, .teamFlags = 0x41, .moves = { MOVE_HYPER_BEAM, @@ -1042,7 +1042,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_ALAKAZAM, - .item = BATTLE_TOWER_ITEM_TWISTED_SPOON, + .heldItem = BATTLE_TOWER_ITEM_TWISTED_SPOON, .teamFlags = 0x0B, .moves = { MOVE_PSYBEAM, @@ -1055,7 +1055,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_HERACROSS, - .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .heldItem = BATTLE_TOWER_ITEM_QUICK_CLAW, .teamFlags = 0x05, .moves = { MOVE_HORN_ATTACK, @@ -1068,7 +1068,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_CASTFORM, - .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SITRUS_BERRY, .teamFlags = 0x0B, .moves = { MOVE_WEATHER_BALL, @@ -1081,7 +1081,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_VIGOROTH, - .item = BATTLE_TOWER_ITEM_FOCUS_BAND, + .heldItem = BATTLE_TOWER_ITEM_FOCUS_BAND, .teamFlags = 0x05, .moves = { MOVE_FOCUS_PUNCH, @@ -1094,7 +1094,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_DUSKULL, - .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .heldItem = BATTLE_TOWER_ITEM_BRIGHT_POWDER, .teamFlags = 0x09, .moves = { MOVE_TOXIC, @@ -1107,7 +1107,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_LANTURN, - .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .heldItem = BATTLE_TOWER_ITEM_QUICK_CLAW, .teamFlags = 0x07, .moves = { MOVE_FLAIL, @@ -1120,7 +1120,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_HARIYAMA, - .item = BATTLE_TOWER_ITEM_KINGS_ROCK, + .heldItem = BATTLE_TOWER_ITEM_KINGS_ROCK, .teamFlags = 0x05, .moves = { MOVE_STRENGTH, @@ -1133,7 +1133,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_KINGDRA, - .item = BATTLE_TOWER_ITEM_MYSTIC_WATER, + .heldItem = BATTLE_TOWER_ITEM_MYSTIC_WATER, .teamFlags = 0x43, .moves = { MOVE_AGILITY, @@ -1146,7 +1146,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_GYARADOS, - .item = BATTLE_TOWER_ITEM_DRAGON_FANG, + .heldItem = BATTLE_TOWER_ITEM_DRAGON_FANG, .teamFlags = 0x41, .moves = { MOVE_RAIN_DANCE, @@ -1159,7 +1159,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_AGGRON, - .item = BATTLE_TOWER_ITEM_METAL_COAT, + .heldItem = BATTLE_TOWER_ITEM_METAL_COAT, .teamFlags = 0x45, .moves = { MOVE_EARTHQUAKE, @@ -1172,7 +1172,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_ABSOL, - .item = BATTLE_TOWER_ITEM_KINGS_ROCK, + .heldItem = BATTLE_TOWER_ITEM_KINGS_ROCK, .teamFlags = 0xC7, .moves = { MOVE_SWORDS_DANCE, @@ -1185,7 +1185,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_SWELLOW, - .item = BATTLE_TOWER_ITEM_SHARP_BEAK, + .heldItem = BATTLE_TOWER_ITEM_SHARP_BEAK, .teamFlags = 0x0F, .moves = { MOVE_DOUBLE_TEAM, @@ -1198,7 +1198,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_MACHAMP, - .item = BATTLE_TOWER_ITEM_BLACK_BELT, + .heldItem = BATTLE_TOWER_ITEM_BLACK_BELT, .teamFlags = 0x05, .moves = { MOVE_STRENGTH, @@ -1211,7 +1211,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_SWAMPERT, - .item = BATTLE_TOWER_ITEM_NEVER_MELT_ICE, + .heldItem = BATTLE_TOWER_ITEM_NEVER_MELT_ICE, .teamFlags = 0x41, .moves = { MOVE_PROTECT, @@ -1224,7 +1224,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_SCEPTILE, - .item = BATTLE_TOWER_ITEM_MIRACLE_SEED, + .heldItem = BATTLE_TOWER_ITEM_MIRACLE_SEED, .teamFlags = 0x41, .moves = { MOVE_LEAF_BLADE, @@ -1237,7 +1237,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_BLAZIKEN, - .item = BATTLE_TOWER_ITEM_CHARCOAL, + .heldItem = BATTLE_TOWER_ITEM_CHARCOAL, .teamFlags = 0x41, .moves = { MOVE_BLAZE_KICK, @@ -1250,7 +1250,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_ALTARIA, - .item = BATTLE_TOWER_ITEM_DRAGON_FANG, + .heldItem = BATTLE_TOWER_ITEM_DRAGON_FANG, .teamFlags = 0x43, .moves = { MOVE_DRAGON_CLAW, @@ -1263,7 +1263,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_LUDICOLO, - .item = BATTLE_TOWER_ITEM_BLACK_BELT, + .heldItem = BATTLE_TOWER_ITEM_BLACK_BELT, .teamFlags = 0x43, .moves = { MOVE_BRICK_BREAK, @@ -1276,7 +1276,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_SABLEYE, - .item = BATTLE_TOWER_ITEM_SPELL_TAG, + .heldItem = BATTLE_TOWER_ITEM_SPELL_TAG, .teamFlags = 0x49, .moves = { MOVE_SHADOW_BALL, @@ -1289,7 +1289,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_ZANGOOSE, - .item = BATTLE_TOWER_ITEM_BLACK_GLASSES, + .heldItem = BATTLE_TOWER_ITEM_BLACK_GLASSES, .teamFlags = 0x0F, .moves = { MOVE_FACADE, @@ -1302,7 +1302,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_LINOONE, - .item = BATTLE_TOWER_ITEM_CHESTO_BERRY, + .heldItem = BATTLE_TOWER_ITEM_CHESTO_BERRY, .teamFlags = 0x0F, .moves = { MOVE_IRON_TAIL, @@ -1315,7 +1315,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_WHISCASH, - .item = BATTLE_TOWER_ITEM_SOFT_SAND, + .heldItem = BATTLE_TOWER_ITEM_SOFT_SAND, .teamFlags = 0x07, .moves = { MOVE_MUD_SLAP, @@ -1328,7 +1328,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_SOLROCK, - .item = BATTLE_TOWER_ITEM_HARD_STONE, + .heldItem = BATTLE_TOWER_ITEM_HARD_STONE, .teamFlags = 0x43, .moves = { MOVE_EARTHQUAKE, @@ -1341,7 +1341,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_STARMIE, - .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .heldItem = BATTLE_TOWER_ITEM_BRIGHT_POWDER, .teamFlags = 0x03, .moves = { MOVE_RECOVER, @@ -1354,7 +1354,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_CACTURNE, - .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .heldItem = BATTLE_TOWER_ITEM_LEFTOVERS, .teamFlags = 0x0F, .moves = { MOVE_INGRAIN, @@ -1367,7 +1367,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_SHIFTRY, - .item = BATTLE_TOWER_ITEM_FOCUS_BAND, + .heldItem = BATTLE_TOWER_ITEM_FOCUS_BAND, .teamFlags = 0x05, .moves = { MOVE_FRUSTRATION, @@ -1380,7 +1380,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_MANECTRIC, - .item = BATTLE_TOWER_ITEM_MAGNET, + .heldItem = BATTLE_TOWER_ITEM_MAGNET, .teamFlags = 0x0F, .moves = { MOVE_THUNDER, @@ -1393,7 +1393,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_KECLEON, - .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .heldItem = BATTLE_TOWER_ITEM_BRIGHT_POWDER, .teamFlags = 0xC3, .moves = { MOVE_THUNDERBOLT, @@ -1406,7 +1406,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_PINSIR, - .item = BATTLE_TOWER_ITEM_SOFT_SAND, + .heldItem = BATTLE_TOWER_ITEM_SOFT_SAND, .teamFlags = 0x8D, .moves = { MOVE_GUILLOTINE, @@ -1419,7 +1419,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_METANG, - .item = BATTLE_TOWER_ITEM_METAL_COAT, + .heldItem = BATTLE_TOWER_ITEM_METAL_COAT, .teamFlags = 0x05, .moves = { MOVE_EARTHQUAKE, @@ -1432,7 +1432,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_CLAYDOL, - .item = BATTLE_TOWER_ITEM_PECHA_BERRY, + .heldItem = BATTLE_TOWER_ITEM_PECHA_BERRY, .teamFlags = 0x43, .moves = { MOVE_EARTHQUAKE, @@ -1445,7 +1445,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_MASQUERAIN, - .item = BATTLE_TOWER_ITEM_PERSIM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_PERSIM_BERRY, .teamFlags = 0x0A, .moves = { MOVE_TOXIC, @@ -1458,7 +1458,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_RELICANTH, - .item = BATTLE_TOWER_ITEM_LIECHI_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LIECHI_BERRY, .teamFlags = 0xC5, .moves = { MOVE_ROCK_TOMB, @@ -1471,7 +1471,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_WALREIN, - .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SALAC_BERRY, .teamFlags = 0x0D, .moves = { MOVE_SURF, @@ -1484,7 +1484,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_WAILORD, - .item = BATTLE_TOWER_ITEM_APICOT_BERRY, + .heldItem = BATTLE_TOWER_ITEM_APICOT_BERRY, .teamFlags = 0x0B, .moves = { MOVE_WATER_SPOUT, @@ -1497,7 +1497,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_GIRAFARIG, - .item = BATTLE_TOWER_ITEM_GANLON_BERRY, + .heldItem = BATTLE_TOWER_ITEM_GANLON_BERRY, .teamFlags = 0x4F, .moves = { MOVE_DOUBLE_TEAM, @@ -1510,7 +1510,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_MEDICHAM, - .item = BATTLE_TOWER_ITEM_APICOT_BERRY, + .heldItem = BATTLE_TOWER_ITEM_APICOT_BERRY, .teamFlags = 0x4B, .moves = { MOVE_CALM_MIND, @@ -1523,7 +1523,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_TROPIUS, - .item = BATTLE_TOWER_ITEM_MENTAL_HERB, + .heldItem = BATTLE_TOWER_ITEM_MENTAL_HERB, .teamFlags = 0xC7, .moves = { MOVE_EARTHQUAKE, @@ -1536,7 +1536,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_NINJASK, - .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .heldItem = BATTLE_TOWER_ITEM_SCOPE_LENS, .teamFlags = 0x05, .moves = { MOVE_DOUBLE_TEAM, @@ -1549,7 +1549,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_CAMERUPT, - .item = BATTLE_TOWER_ITEM_CHARCOAL, + .heldItem = BATTLE_TOWER_ITEM_CHARCOAL, .teamFlags = 0x0D, .moves = { MOVE_EARTHQUAKE, @@ -1562,7 +1562,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_SHARPEDO, - .item = BATTLE_TOWER_ITEM_KINGS_ROCK, + .heldItem = BATTLE_TOWER_ITEM_KINGS_ROCK, .teamFlags = 0x05, .moves = { MOVE_CRUNCH, @@ -1575,7 +1575,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_WIGGLYTUFF, - .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SALAC_BERRY, .teamFlags = 0x0E, .moves = { MOVE_PROTECT, @@ -1588,7 +1588,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_SEVIPER, - .item = BATTLE_TOWER_ITEM_POISON_BARB, + .heldItem = BATTLE_TOWER_ITEM_POISON_BARB, .teamFlags = 0x05, .moves = { MOVE_SLUDGE_BOMB, @@ -1601,7 +1601,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_CRADILY, - .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .heldItem = BATTLE_TOWER_ITEM_LEFTOVERS, .teamFlags = 0xC1, .moves = { MOVE_ROCK_TOMB, @@ -1614,7 +1614,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_ARMALDO, - .item = BATTLE_TOWER_ITEM_RAWST_BERRY, + .heldItem = BATTLE_TOWER_ITEM_RAWST_BERRY, .teamFlags = 0xC1, .moves = { MOVE_EARTHQUAKE, @@ -1627,7 +1627,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_MAGNETON, - .item = BATTLE_TOWER_ITEM_PERSIM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_PERSIM_BERRY, .teamFlags = 0x0D, .moves = { MOVE_ZAP_CANNON, @@ -1640,7 +1640,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_LANTURN, - .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .heldItem = BATTLE_TOWER_ITEM_QUICK_CLAW, .teamFlags = 0x06, .moves = { MOVE_THUNDER, @@ -1653,7 +1653,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_SWALOT, - .item = BATTLE_TOWER_ITEM_CHERI_BERRY, + .heldItem = BATTLE_TOWER_ITEM_CHERI_BERRY, .teamFlags = 0x8B, .moves = { MOVE_SLUDGE_BOMB, @@ -1666,7 +1666,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_SKARMORY, - .item = BATTLE_TOWER_ITEM_METAL_COAT, + .heldItem = BATTLE_TOWER_ITEM_METAL_COAT, .teamFlags = 0x81, .moves = { MOVE_STEEL_WING, @@ -1679,7 +1679,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_DONPHAN, - .item = BATTLE_TOWER_ITEM_WHITE_HERB, + .heldItem = BATTLE_TOWER_ITEM_WHITE_HERB, .teamFlags = 0x0D, .moves = { MOVE_EARTHQUAKE, @@ -1692,7 +1692,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_HERACROSS, - .item = BATTLE_TOWER_ITEM_FOCUS_BAND, + .heldItem = BATTLE_TOWER_ITEM_FOCUS_BAND, .teamFlags = 0x41, .moves = { MOVE_FACADE, @@ -1705,7 +1705,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_BANETTE, - .item = BATTLE_TOWER_ITEM_PETAYA_BERRY, + .heldItem = BATTLE_TOWER_ITEM_PETAYA_BERRY, .teamFlags = 0x83, .moves = { MOVE_SHADOW_BALL, @@ -1718,7 +1718,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_SANDSLASH, - .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .heldItem = BATTLE_TOWER_ITEM_BRIGHT_POWDER, .teamFlags = 0x0F, .moves = { MOVE_SANDSTORM, @@ -1731,7 +1731,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_CRAWDAUNT, - .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .heldItem = BATTLE_TOWER_ITEM_SCOPE_LENS, .teamFlags = 0x05, .moves = { MOVE_GUILLOTINE, @@ -1744,7 +1744,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_GRUMPIG, - .item = BATTLE_TOWER_ITEM_TWISTED_SPOON, + .heldItem = BATTLE_TOWER_ITEM_TWISTED_SPOON, .teamFlags = 0x8B, .moves = { MOVE_MAGIC_COAT, @@ -1757,7 +1757,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_RHYDON, - .item = BATTLE_TOWER_ITEM_CHOICE_BAND, + .heldItem = BATTLE_TOWER_ITEM_CHOICE_BAND, .teamFlags = 0x45, .moves = { MOVE_IRON_TAIL, @@ -1770,7 +1770,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_ALAKAZAM, - .item = BATTLE_TOWER_ITEM_PETAYA_BERRY, + .heldItem = BATTLE_TOWER_ITEM_PETAYA_BERRY, .teamFlags = 0x8B, .moves = { MOVE_PSYCHIC, @@ -1783,7 +1783,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_DUSCLOPS, - .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SITRUS_BERRY, .teamFlags = 0x41, .moves = { MOVE_SHADOW_BALL, @@ -1796,7 +1796,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_TORKOAL, - .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .heldItem = BATTLE_TOWER_ITEM_LEFTOVERS, .teamFlags = 0x09, .moves = { MOVE_FLAMETHROWER, @@ -1809,7 +1809,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_ELECTRODE, - .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LUM_BERRY, .teamFlags = 0x09, .moves = { MOVE_SCREECH, @@ -1822,7 +1822,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_BRELOOM, - .item = BATTLE_TOWER_ITEM_LIECHI_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LIECHI_BERRY, .teamFlags = 0x0B, .moves = { MOVE_IRON_TAIL, @@ -1835,7 +1835,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_MUK, - .item = BATTLE_TOWER_ITEM_POISON_BARB, + .heldItem = BATTLE_TOWER_ITEM_POISON_BARB, .teamFlags = 0x05, .moves = { MOVE_SLUDGE_BOMB, @@ -1848,7 +1848,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_WEEZING, - .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .heldItem = BATTLE_TOWER_ITEM_QUICK_CLAW, .teamFlags = 0x05, .moves = { MOVE_EXPLOSION, @@ -1861,7 +1861,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_RAICHU, - .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .heldItem = BATTLE_TOWER_ITEM_SCOPE_LENS, .teamFlags = 0x4E, .moves = { MOVE_THUNDERBOLT, @@ -1874,7 +1874,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_TENTACRUEL, - .item = BATTLE_TOWER_ITEM_MYSTIC_WATER, + .heldItem = BATTLE_TOWER_ITEM_MYSTIC_WATER, .teamFlags = 0x09, .moves = { MOVE_DOUBLE_TEAM, @@ -1887,7 +1887,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_EXPLOUD, - .item = BATTLE_TOWER_ITEM_CHOICE_BAND, + .heldItem = BATTLE_TOWER_ITEM_CHOICE_BAND, .teamFlags = 0x05, .moves = { MOVE_BLIZZARD, @@ -1900,7 +1900,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_XATU, - .item = BATTLE_TOWER_ITEM_WHITE_HERB, + .heldItem = BATTLE_TOWER_ITEM_WHITE_HERB, .teamFlags = 0x43, .moves = { MOVE_PSYCHIC, @@ -1913,7 +1913,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_GOLEM, - .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SALAC_BERRY, .teamFlags = 0x05, .moves = { MOVE_EXPLOSION, @@ -1926,7 +1926,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_GOLDUCK, - .item = BATTLE_TOWER_ITEM_PECHA_BERRY, + .heldItem = BATTLE_TOWER_ITEM_PECHA_BERRY, .teamFlags = 0x83, .moves = { MOVE_SURF, @@ -1939,7 +1939,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_NINETALES, - .item = BATTLE_TOWER_ITEM_CHARCOAL, + .heldItem = BATTLE_TOWER_ITEM_CHARCOAL, .teamFlags = 0x4A, .moves = { MOVE_FLAMETHROWER, @@ -1952,7 +1952,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_KINGDRA, - .item = BATTLE_TOWER_ITEM_CHESTO_BERRY, + .heldItem = BATTLE_TOWER_ITEM_CHESTO_BERRY, .teamFlags = 0x13, .moves = { MOVE_DOUBLE_TEAM, @@ -1965,7 +1965,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_SLAKING, - .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .heldItem = BATTLE_TOWER_ITEM_LEFTOVERS, .teamFlags = 0x03, .moves = { MOVE_CURSE, @@ -1978,7 +1978,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_GYARADOS, - .item = BATTLE_TOWER_ITEM_CHERI_BERRY, + .heldItem = BATTLE_TOWER_ITEM_CHERI_BERRY, .teamFlags = 0x03, .moves = { MOVE_THUNDER, @@ -1991,7 +1991,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_HARIYAMA, - .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SALAC_BERRY, .teamFlags = 0x21, .moves = { MOVE_BELLY_DRUM, @@ -2004,7 +2004,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_ABSOL, - .item = BATTLE_TOWER_ITEM_KINGS_ROCK, + .heldItem = BATTLE_TOWER_ITEM_KINGS_ROCK, .teamFlags = 0xC3, .moves = { MOVE_FAINT_ATTACK, @@ -2017,7 +2017,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_ALTARIA, - .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SITRUS_BERRY, .teamFlags = 0x83, .moves = { MOVE_DRAGON_DANCE, @@ -2030,7 +2030,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_MACHAMP, - .item = BATTLE_TOWER_ITEM_BLACK_BELT, + .heldItem = BATTLE_TOWER_ITEM_BLACK_BELT, .teamFlags = 0x11, .moves = { MOVE_CROSS_CHOP, @@ -2043,7 +2043,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_FLYGON, - .item = BATTLE_TOWER_ITEM_DRAGON_FANG, + .heldItem = BATTLE_TOWER_ITEM_DRAGON_FANG, .teamFlags = 0x43, .moves = { MOVE_CRUNCH, @@ -2056,7 +2056,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_BLAZIKEN, - .item = BATTLE_TOWER_ITEM_PETAYA_BERRY, + .heldItem = BATTLE_TOWER_ITEM_PETAYA_BERRY, .teamFlags = 0x33, .moves = { MOVE_COUNTER, @@ -2069,7 +2069,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_GLALIE, - .item = BATTLE_TOWER_ITEM_NEVER_MELT_ICE, + .heldItem = BATTLE_TOWER_ITEM_NEVER_MELT_ICE, .teamFlags = 0x81, .moves = { MOVE_BLIZZARD, @@ -2082,7 +2082,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_HUNTAIL, - .item = BATTLE_TOWER_ITEM_MYSTIC_WATER, + .heldItem = BATTLE_TOWER_ITEM_MYSTIC_WATER, .teamFlags = 0xA1, .moves = { MOVE_RAIN_DANCE, @@ -2095,7 +2095,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_MILOTIC, - .item = BATTLE_TOWER_ITEM_GANLON_BERRY, + .heldItem = BATTLE_TOWER_ITEM_GANLON_BERRY, .teamFlags = 0xD3, .moves = { MOVE_SURF, @@ -2108,7 +2108,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_GOREBYSS, - .item = BATTLE_TOWER_ITEM_PECHA_BERRY, + .heldItem = BATTLE_TOWER_ITEM_PECHA_BERRY, .teamFlags = 0x83, .moves = { MOVE_PSYCHIC, @@ -2121,7 +2121,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_SCEPTILE, - .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .heldItem = BATTLE_TOWER_ITEM_SCOPE_LENS, .teamFlags = 0x53, .moves = { MOVE_LEAF_BLADE, @@ -2134,7 +2134,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_SWAMPERT, - .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .heldItem = BATTLE_TOWER_ITEM_LEFTOVERS, .teamFlags = 0x53, .moves = { MOVE_EARTHQUAKE, @@ -2147,7 +2147,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_AGGRON, - .item = BATTLE_TOWER_ITEM_MENTAL_HERB, + .heldItem = BATTLE_TOWER_ITEM_MENTAL_HERB, .teamFlags = 0x41, .moves = { MOVE_DOUBLE_EDGE, @@ -2160,7 +2160,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_CRADILY, - .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .heldItem = BATTLE_TOWER_ITEM_BRIGHT_POWDER, .teamFlags = 0xE1, .moves = { MOVE_STOCKPILE, @@ -2173,7 +2173,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_ARMALDO, - .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .heldItem = BATTLE_TOWER_ITEM_QUICK_CLAW, .teamFlags = 0xC1, .moves = { MOVE_EARTHQUAKE, @@ -2186,7 +2186,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_BRELOOM, - .item = BATTLE_TOWER_ITEM_SHELL_BELL, + .heldItem = BATTLE_TOWER_ITEM_SHELL_BELL, .teamFlags = 0x82, .moves = { MOVE_FOCUS_PUNCH, @@ -2199,7 +2199,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_LUDICOLO, - .item = BATTLE_TOWER_ITEM_PETAYA_BERRY, + .heldItem = BATTLE_TOWER_ITEM_PETAYA_BERRY, .teamFlags = 0x83, .moves = { MOVE_RAIN_DANCE, @@ -2212,7 +2212,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_SHIFTRY, - .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .heldItem = BATTLE_TOWER_ITEM_SCOPE_LENS, .teamFlags = 0x03, .moves = { MOVE_TORMENT, @@ -2225,7 +2225,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_TROPIUS, - .item = BATTLE_TOWER_ITEM_APICOT_BERRY, + .heldItem = BATTLE_TOWER_ITEM_APICOT_BERRY, .teamFlags = 0xC3, .moves = { MOVE_SUNNY_DAY, @@ -2238,7 +2238,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_GRUMPIG, - .item = BATTLE_TOWER_ITEM_MACHO_BRACE, + .heldItem = BATTLE_TOWER_ITEM_MACHO_BRACE, .teamFlags = 0x23, .moves = { MOVE_TRICK, @@ -2251,7 +2251,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_TORKOAL, - .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LUM_BERRY, .teamFlags = 0x81, .moves = { MOVE_IRON_DEFENSE, @@ -2264,7 +2264,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_MANECTRIC, - .item = BATTLE_TOWER_ITEM_NONE, + .heldItem = BATTLE_TOWER_ITEM_NONE, .teamFlags = 0x03, .moves = { MOVE_THUNDERBOLT, @@ -2277,7 +2277,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_PINSIR, - .item = BATTLE_TOWER_ITEM_LEPPA_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LEPPA_BERRY, .teamFlags = 0x61, .moves = { MOVE_GUILLOTINE, @@ -2290,7 +2290,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_STARMIE, - .item = BATTLE_TOWER_ITEM_CHESTO_BERRY, + .heldItem = BATTLE_TOWER_ITEM_CHESTO_BERRY, .teamFlags = 0x93, .moves = { MOVE_LIGHT_SCREEN, @@ -2303,7 +2303,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_HERACROSS, - .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SALAC_BERRY, .teamFlags = 0x51, .moves = { MOVE_MEGAHORN, @@ -2316,7 +2316,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_WALREIN, - .item = BATTLE_TOWER_ITEM_NEVER_MELT_ICE, + .heldItem = BATTLE_TOWER_ITEM_NEVER_MELT_ICE, .teamFlags = 0x83, .moves = { MOVE_BLIZZARD, @@ -2329,7 +2329,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_ALAKAZAM, - .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SITRUS_BERRY, .teamFlags = 0x13, .moves = { MOVE_PSYCHIC, @@ -2342,7 +2342,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_MILOTIC, - .item = BATTLE_TOWER_ITEM_APICOT_BERRY, + .heldItem = BATTLE_TOWER_ITEM_APICOT_BERRY, .teamFlags = 0x93, .moves = { MOVE_SURF, @@ -2355,7 +2355,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_REGICE, - .item = BATTLE_TOWER_ITEM_CHESTO_BERRY, + .heldItem = BATTLE_TOWER_ITEM_CHESTO_BERRY, .teamFlags = 0x11, .moves = { MOVE_REST, @@ -2368,7 +2368,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_REGISTEEL, - .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LUM_BERRY, .teamFlags = 0x11, .moves = { MOVE_REST, @@ -2381,7 +2381,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_REGIROCK, - .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .heldItem = BATTLE_TOWER_ITEM_QUICK_CLAW, .teamFlags = 0x91, .moves = { MOVE_ROCK_TOMB, @@ -2394,7 +2394,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_DUSCLOPS, - .item = BATTLE_TOWER_ITEM_SPELL_TAG, + .heldItem = BATTLE_TOWER_ITEM_SPELL_TAG, .teamFlags = 0x20, .moves = { MOVE_SHADOW_BALL, @@ -2407,7 +2407,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_SEAKING, - .item = BATTLE_TOWER_ITEM_LEPPA_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LEPPA_BERRY, .teamFlags = 0xB2, .moves = { MOVE_HORN_DRILL, @@ -2420,7 +2420,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_CAMERUPT, - .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .heldItem = BATTLE_TOWER_ITEM_BRIGHT_POWDER, .teamFlags = 0x00, .moves = { MOVE_EARTHQUAKE, @@ -2433,7 +2433,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_LANTURN, - .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SALAC_BERRY, .teamFlags = 0x82, .moves = { MOVE_THUNDERBOLT, @@ -2446,7 +2446,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_WEEZING, - .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SALAC_BERRY, .teamFlags = 0x20, .moves = { MOVE_SLUDGE_BOMB, @@ -2459,7 +2459,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_WHISCASH, - .item = BATTLE_TOWER_ITEM_PETAYA_BERRY, + .heldItem = BATTLE_TOWER_ITEM_PETAYA_BERRY, .teamFlags = 0x41, .moves = { MOVE_EARTHQUAKE, @@ -2472,7 +2472,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_AGGRON, - .item = BATTLE_TOWER_ITEM_LIECHI_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LIECHI_BERRY, .teamFlags = 0x11, .moves = { MOVE_DOUBLE_EDGE, @@ -2485,7 +2485,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_CACTURNE, - .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .heldItem = BATTLE_TOWER_ITEM_SCOPE_LENS, .teamFlags = 0x63, .moves = { MOVE_DYNAMIC_PUNCH, @@ -2498,7 +2498,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_SHARPEDO, - .item = BATTLE_TOWER_ITEM_KINGS_ROCK, + .heldItem = BATTLE_TOWER_ITEM_KINGS_ROCK, .teamFlags = 0x01, .moves = { MOVE_CRUNCH, @@ -2511,7 +2511,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_ABSOL, - .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SALAC_BERRY, .teamFlags = 0x82, .moves = { MOVE_DOUBLE_EDGE, @@ -2524,7 +2524,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_WAILORD, - .item = BATTLE_TOWER_ITEM_LEPPA_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LEPPA_BERRY, .teamFlags = 0x23, .moves = { MOVE_HYDRO_PUMP, @@ -2537,7 +2537,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_TENTACRUEL, - .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SITRUS_BERRY, .teamFlags = 0x21, .moves = { MOVE_HYDRO_PUMP, @@ -2550,7 +2550,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_LUDICOLO, - .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .heldItem = BATTLE_TOWER_ITEM_LEFTOVERS, .teamFlags = 0xA2, .moves = { MOVE_RAIN_DANCE, @@ -2563,7 +2563,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_WOBBUFFET, - .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .heldItem = BATTLE_TOWER_ITEM_LEFTOVERS, .teamFlags = 0x23, .moves = { MOVE_ENCORE, @@ -2576,7 +2576,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_RHYDON, - .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .heldItem = BATTLE_TOWER_ITEM_QUICK_CLAW, .teamFlags = 0x21, .moves = { MOVE_EARTHQUAKE, @@ -2589,7 +2589,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_GLALIE, - .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SALAC_BERRY, .teamFlags = 0x21, .moves = { MOVE_CRUNCH, @@ -2602,7 +2602,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_SCEPTILE, - .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .heldItem = BATTLE_TOWER_ITEM_SCOPE_LENS, .teamFlags = 0x13, .moves = { MOVE_LEAF_BLADE, @@ -2615,7 +2615,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_BLAZIKEN, - .item = BATTLE_TOWER_ITEM_LIECHI_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LIECHI_BERRY, .teamFlags = 0x17, .moves = { MOVE_BLAZE_KICK, @@ -2628,7 +2628,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_SWAMPERT, - .item = BATTLE_TOWER_ITEM_SHELL_BELL, + .heldItem = BATTLE_TOWER_ITEM_SHELL_BELL, .teamFlags = 0x17, .moves = { MOVE_SURF, @@ -2641,7 +2641,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_GARDEVOIR, - .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SALAC_BERRY, .teamFlags = 0x19, .moves = { MOVE_PSYCHIC, @@ -2654,7 +2654,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_BRELOOM, - .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SALAC_BERRY, .teamFlags = 0xF6, .moves = { MOVE_SPORE, @@ -2667,7 +2667,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_ALAKAZAM, - .item = BATTLE_TOWER_ITEM_GANLON_BERRY, + .heldItem = BATTLE_TOWER_ITEM_GANLON_BERRY, .teamFlags = 0x1B, .moves = { MOVE_PSYCHIC, @@ -2680,7 +2680,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_SHIFTRY, - .item = BATTLE_TOWER_ITEM_CHESTO_BERRY, + .heldItem = BATTLE_TOWER_ITEM_CHESTO_BERRY, .teamFlags = 0x89, .moves = { MOVE_FAINT_ATTACK, @@ -2693,7 +2693,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_HARIYAMA, - .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .heldItem = BATTLE_TOWER_ITEM_SCOPE_LENS, .teamFlags = 0x85, .moves = { MOVE_CROSS_CHOP, @@ -2706,7 +2706,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_CROBAT, - .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .heldItem = BATTLE_TOWER_ITEM_BRIGHT_POWDER, .teamFlags = 0x49, .moves = { MOVE_ATTRACT, @@ -2719,7 +2719,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_MACHAMP, - .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .heldItem = BATTLE_TOWER_ITEM_SCOPE_LENS, .teamFlags = 0x15, .moves = { MOVE_CROSS_CHOP, @@ -2732,7 +2732,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_MANECTRIC, - .item = BATTLE_TOWER_ITEM_PETAYA_BERRY, + .heldItem = BATTLE_TOWER_ITEM_PETAYA_BERRY, .teamFlags = 0x0B, .moves = { MOVE_THUNDERBOLT, @@ -2745,7 +2745,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_ELECTRODE, - .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LUM_BERRY, .teamFlags = 0x27, .moves = { MOVE_THUNDERBOLT, @@ -2758,7 +2758,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_MUK, - .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .heldItem = BATTLE_TOWER_ITEM_QUICK_CLAW, .teamFlags = 0x05, .moves = { MOVE_SLUDGE_BOMB, @@ -2771,7 +2771,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_FLYGON, - .item = BATTLE_TOWER_ITEM_PETAYA_BERRY, + .heldItem = BATTLE_TOWER_ITEM_PETAYA_BERRY, .teamFlags = 0x4D, .moves = { MOVE_DRAGON_CLAW, @@ -2784,7 +2784,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_STARMIE, - .item = BATTLE_TOWER_ITEM_APICOT_BERRY, + .heldItem = BATTLE_TOWER_ITEM_APICOT_BERRY, .teamFlags = 0x1B, .moves = { MOVE_SURF, @@ -2797,7 +2797,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_DODRIO, - .item = BATTLE_TOWER_ITEM_LIECHI_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LIECHI_BERRY, .teamFlags = 0x2B, .moves = { MOVE_DRILL_PECK, @@ -2810,7 +2810,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_RAICHU, - .item = BATTLE_TOWER_ITEM_FOCUS_BAND, + .heldItem = BATTLE_TOWER_ITEM_FOCUS_BAND, .teamFlags = 0x0A, .moves = { MOVE_THUNDERBOLT, @@ -2823,7 +2823,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_GOLDUCK, - .item = BATTLE_TOWER_ITEM_LIECHI_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LIECHI_BERRY, .teamFlags = 0x0A, .moves = { MOVE_SURF, @@ -2836,7 +2836,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_HERACROSS, - .item = BATTLE_TOWER_ITEM_LIECHI_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LIECHI_BERRY, .teamFlags = 0x54, .moves = { MOVE_MEGAHORN, @@ -2849,7 +2849,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_WALREIN, - .item = BATTLE_TOWER_ITEM_CHESTO_BERRY, + .heldItem = BATTLE_TOWER_ITEM_CHESTO_BERRY, .teamFlags = 0x06, .moves = { MOVE_SURF, @@ -2862,7 +2862,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_KINGDRA, - .item = BATTLE_TOWER_ITEM_CHESTO_BERRY, + .heldItem = BATTLE_TOWER_ITEM_CHESTO_BERRY, .teamFlags = 0x1D, .moves = { MOVE_SURF, @@ -2875,7 +2875,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_SALAMENCE, - .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LUM_BERRY, .teamFlags = 0x9C, .moves = { MOVE_DRAGON_CLAW, @@ -2888,7 +2888,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_METAGROSS, - .item = BATTLE_TOWER_ITEM_SHELL_BELL, + .heldItem = BATTLE_TOWER_ITEM_SHELL_BELL, .teamFlags = 0x15, .moves = { MOVE_METEOR_MASH, @@ -2901,7 +2901,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_REGIROCK, - .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .heldItem = BATTLE_TOWER_ITEM_BRIGHT_POWDER, .teamFlags = 0xB5, .moves = { MOVE_EARTHQUAKE, @@ -2914,7 +2914,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_REGICE, - .item = BATTLE_TOWER_ITEM_CHESTO_BERRY, + .heldItem = BATTLE_TOWER_ITEM_CHESTO_BERRY, .teamFlags = 0x96, .moves = { MOVE_ICE_BEAM, @@ -2927,7 +2927,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_REGISTEEL, - .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .heldItem = BATTLE_TOWER_ITEM_QUICK_CLAW, .teamFlags = 0x94, .moves = { MOVE_METAL_CLAW, @@ -2940,7 +2940,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_LATIAS, - .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LUM_BERRY, .teamFlags = 0x96, .moves = { MOVE_MIST_BALL, @@ -2953,7 +2953,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_LATIOS, - .item = BATTLE_TOWER_ITEM_APICOT_BERRY, + .heldItem = BATTLE_TOWER_ITEM_APICOT_BERRY, .teamFlags = 0x95, .moves = { MOVE_LUSTER_PURGE, @@ -2966,7 +2966,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_MILOTIC, - .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .heldItem = BATTLE_TOWER_ITEM_LEFTOVERS, .teamFlags = 0x96, .moves = { MOVE_SURF, @@ -2979,7 +2979,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_SLAKING, - .item = BATTLE_TOWER_ITEM_CHOICE_BAND, + .heldItem = BATTLE_TOWER_ITEM_CHOICE_BAND, .teamFlags = 0x05, .moves = { MOVE_HYPER_BEAM, @@ -2992,7 +2992,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_SCEPTILE, - .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .heldItem = BATTLE_TOWER_ITEM_LEFTOVERS, .teamFlags = 0x1F, .moves = { MOVE_GIGA_DRAIN, @@ -3005,7 +3005,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_BLAZIKEN, - .item = BATTLE_TOWER_ITEM_CHESTO_BERRY, + .heldItem = BATTLE_TOWER_ITEM_CHESTO_BERRY, .teamFlags = 0x17, .moves = { MOVE_BLAZE_KICK, @@ -3018,7 +3018,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_SWAMPERT, - .item = BATTLE_TOWER_ITEM_SHELL_BELL, + .heldItem = BATTLE_TOWER_ITEM_SHELL_BELL, .teamFlags = 0x17, .moves = { MOVE_MUDDY_WATER, @@ -3031,7 +3031,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_GARDEVOIR, - .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SALAC_BERRY, .teamFlags = 0x7B, .moves = { MOVE_PSYCHIC, @@ -3044,7 +3044,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_BRELOOM, - .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SALAC_BERRY, .teamFlags = 0x56, .moves = { MOVE_SPORE, @@ -3057,7 +3057,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_ALAKAZAM, - .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .heldItem = BATTLE_TOWER_ITEM_BRIGHT_POWDER, .teamFlags = 0x0A, .moves = { MOVE_PSYCHIC, @@ -3070,7 +3070,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_HARIYAMA, - .item = BATTLE_TOWER_ITEM_FOCUS_BAND, + .heldItem = BATTLE_TOWER_ITEM_FOCUS_BAND, .teamFlags = 0x05, .moves = { MOVE_CROSS_CHOP, @@ -3083,7 +3083,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_GYARADOS, - .item = BATTLE_TOWER_ITEM_SHELL_BELL, + .heldItem = BATTLE_TOWER_ITEM_SHELL_BELL, .teamFlags = 0x0C, .moves = { MOVE_HYPER_BEAM, @@ -3096,7 +3096,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_CROBAT, - .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .heldItem = BATTLE_TOWER_ITEM_BRIGHT_POWDER, .teamFlags = 0x49, .moves = { MOVE_TOXIC, @@ -3109,7 +3109,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_MACHAMP, - .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .heldItem = BATTLE_TOWER_ITEM_SCOPE_LENS, .teamFlags = 0x15, .moves = { MOVE_CROSS_CHOP, @@ -3122,7 +3122,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_MANECTRIC, - .item = BATTLE_TOWER_ITEM_CHESTO_BERRY, + .heldItem = BATTLE_TOWER_ITEM_CHESTO_BERRY, .teamFlags = 0x63, .moves = { MOVE_THUNDER, @@ -3135,7 +3135,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_ELECTRODE, - .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SALAC_BERRY, .teamFlags = 0x07, .moves = { MOVE_THUNDERBOLT, @@ -3148,7 +3148,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_MUK, - .item = BATTLE_TOWER_ITEM_LIECHI_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LIECHI_BERRY, .teamFlags = 0x45, .moves = { MOVE_SLUDGE_BOMB, @@ -3161,7 +3161,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_FLYGON, - .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LUM_BERRY, .teamFlags = 0x4D, .moves = { MOVE_DRAGON_CLAW, @@ -3174,7 +3174,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_STARMIE, - .item = BATTLE_TOWER_ITEM_CHESTO_BERRY, + .heldItem = BATTLE_TOWER_ITEM_CHESTO_BERRY, .teamFlags = 0x1B, .moves = { MOVE_LIGHT_SCREEN, @@ -3187,7 +3187,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_NINETALES, - .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SITRUS_BERRY, .teamFlags = 0x0A, .moves = { MOVE_CONFUSE_RAY, @@ -3200,7 +3200,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_GOLEM, - .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SALAC_BERRY, .teamFlags = 0x25, .moves = { MOVE_EARTHQUAKE, @@ -3213,7 +3213,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_GOLDUCK, - .item = BATTLE_TOWER_ITEM_PETAYA_BERRY, + .heldItem = BATTLE_TOWER_ITEM_PETAYA_BERRY, .teamFlags = 0x27, .moves = { MOVE_HYDRO_PUMP, @@ -3226,7 +3226,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_HERACROSS, - .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SALAC_BERRY, .teamFlags = 0x55, .moves = { MOVE_MEGAHORN, @@ -3239,7 +3239,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_WALREIN, - .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SALAC_BERRY, .teamFlags = 0x36, .moves = { MOVE_SURF, @@ -3252,7 +3252,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_KINGDRA, - .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .heldItem = BATTLE_TOWER_ITEM_LEFTOVERS, .teamFlags = 0x5C, .moves = { MOVE_HYDRO_PUMP, @@ -3265,7 +3265,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_SALAMENCE, - .item = BATTLE_TOWER_ITEM_KINGS_ROCK, + .heldItem = BATTLE_TOWER_ITEM_KINGS_ROCK, .teamFlags = 0x9D, .moves = { MOVE_DRAGON_CLAW, @@ -3278,7 +3278,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_METAGROSS, - .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .heldItem = BATTLE_TOWER_ITEM_QUICK_CLAW, .teamFlags = 0x15, .moves = { MOVE_METEOR_MASH, @@ -3291,7 +3291,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_REGIROCK, - .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .heldItem = BATTLE_TOWER_ITEM_QUICK_CLAW, .teamFlags = 0x95, .moves = { MOVE_EARTHQUAKE, @@ -3304,7 +3304,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_REGICE, - .item = BATTLE_TOWER_ITEM_SHELL_BELL, + .heldItem = BATTLE_TOWER_ITEM_SHELL_BELL, .teamFlags = 0x96, .moves = { MOVE_BLIZZARD, @@ -3317,7 +3317,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_REGISTEEL, - .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .heldItem = BATTLE_TOWER_ITEM_QUICK_CLAW, .teamFlags = 0x94, .moves = { MOVE_METAL_CLAW, @@ -3330,7 +3330,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_LATIAS, - .item = BATTLE_TOWER_ITEM_APICOT_BERRY, + .heldItem = BATTLE_TOWER_ITEM_APICOT_BERRY, .teamFlags = 0x96, .moves = { MOVE_MIST_BALL, @@ -3343,7 +3343,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_LATIOS, - .item = BATTLE_TOWER_ITEM_SHELL_BELL, + .heldItem = BATTLE_TOWER_ITEM_SHELL_BELL, .teamFlags = 0x95, .moves = { MOVE_LUSTER_PURGE, @@ -3356,7 +3356,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_MILOTIC, - .item = BATTLE_TOWER_ITEM_APICOT_BERRY, + .heldItem = BATTLE_TOWER_ITEM_APICOT_BERRY, .teamFlags = 0xD6, .moves = { MOVE_SURF, @@ -3369,7 +3369,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_KECLEON, - .item = BATTLE_TOWER_ITEM_CHOICE_BAND, + .heldItem = BATTLE_TOWER_ITEM_CHOICE_BAND, .teamFlags = 0x69, .moves = { MOVE_TRICK, @@ -3382,7 +3382,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_SCEPTILE, - .item = BATTLE_TOWER_ITEM_CHESTO_BERRY, + .heldItem = BATTLE_TOWER_ITEM_CHESTO_BERRY, .teamFlags = 0x5F, .moves = { MOVE_LEAF_BLADE, @@ -3395,7 +3395,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_BLAZIKEN, - .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LUM_BERRY, .teamFlags = 0x7F, .moves = { MOVE_FOCUS_PUNCH, @@ -3408,7 +3408,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_SWAMPERT, - .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LUM_BERRY, .teamFlags = 0x57, .moves = { MOVE_IRON_TAIL, @@ -3421,7 +3421,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_GARDEVOIR, - .item = BATTLE_TOWER_ITEM_CHESTO_BERRY, + .heldItem = BATTLE_TOWER_ITEM_CHESTO_BERRY, .teamFlags = 0x3B, .moves = { MOVE_SHADOW_BALL, @@ -3434,7 +3434,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_BRELOOM, - .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SALAC_BERRY, .teamFlags = 0x56, .moves = { MOVE_SPORE, @@ -3447,7 +3447,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_ALAKAZAM, - .item = BATTLE_TOWER_ITEM_CHOICE_BAND, + .heldItem = BATTLE_TOWER_ITEM_CHOICE_BAND, .teamFlags = 0x1A, .moves = { MOVE_PSYCHIC, @@ -3460,7 +3460,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_HARIYAMA, - .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SALAC_BERRY, .teamFlags = 0x65, .moves = { MOVE_REVENGE, @@ -3473,7 +3473,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_LUDICOLO, - .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .heldItem = BATTLE_TOWER_ITEM_LEFTOVERS, .teamFlags = 0x54, .moves = { MOVE_RAIN_DANCE, @@ -3486,7 +3486,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_CROBAT, - .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .heldItem = BATTLE_TOWER_ITEM_BRIGHT_POWDER, .teamFlags = 0x4B, .moves = { MOVE_SLUDGE_BOMB, @@ -3499,7 +3499,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_MACHAMP, - .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .heldItem = BATTLE_TOWER_ITEM_SCOPE_LENS, .teamFlags = 0x75, .moves = { MOVE_CROSS_CHOP, @@ -3512,7 +3512,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_MANECTRIC, - .item = BATTLE_TOWER_ITEM_PETAYA_BERRY, + .heldItem = BATTLE_TOWER_ITEM_PETAYA_BERRY, .teamFlags = 0x0A, .moves = { MOVE_THUNDERBOLT, @@ -3525,7 +3525,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_ELECTRODE, - .item = BATTLE_TOWER_ITEM_LIECHI_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LIECHI_BERRY, .teamFlags = 0x64, .moves = { MOVE_THUNDER, @@ -3538,7 +3538,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_MUK, - .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SALAC_BERRY, .teamFlags = 0x49, .moves = { MOVE_SLUDGE_BOMB, @@ -3551,7 +3551,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_FLYGON, - .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .heldItem = BATTLE_TOWER_ITEM_BRIGHT_POWDER, .teamFlags = 0xCD, .moves = { MOVE_PROTECT, @@ -3564,7 +3564,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_STARMIE, - .item = BATTLE_TOWER_ITEM_KINGS_ROCK, + .heldItem = BATTLE_TOWER_ITEM_KINGS_ROCK, .teamFlags = 0x5B, .moves = { MOVE_SURF, @@ -3577,7 +3577,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_LUDICOLO, - .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .heldItem = BATTLE_TOWER_ITEM_LEFTOVERS, .teamFlags = 0x1A, .moves = { MOVE_RAIN_DANCE, @@ -3590,7 +3590,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_RAICHU, - .item = BATTLE_TOWER_ITEM_LIECHI_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LIECHI_BERRY, .teamFlags = 0x4A, .moves = { MOVE_THUNDER, @@ -3603,7 +3603,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_GOLDUCK, - .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SALAC_BERRY, .teamFlags = 0x0A, .moves = { MOVE_SURF, @@ -3616,7 +3616,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_HERACROSS, - .item = BATTLE_TOWER_ITEM_LIECHI_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LIECHI_BERRY, .teamFlags = 0x15, .moves = { MOVE_MEGAHORN, @@ -3629,7 +3629,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_WALREIN, - .item = BATTLE_TOWER_ITEM_LEPPA_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LEPPA_BERRY, .teamFlags = 0x26, .moves = { MOVE_SURF, @@ -3642,7 +3642,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_KINGDRA, - .item = BATTLE_TOWER_ITEM_SHELL_BELL, + .heldItem = BATTLE_TOWER_ITEM_SHELL_BELL, .teamFlags = 0x4D, .moves = { MOVE_HYDRO_PUMP, @@ -3655,7 +3655,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_SALAMENCE, - .item = BATTLE_TOWER_ITEM_PETAYA_BERRY, + .heldItem = BATTLE_TOWER_ITEM_PETAYA_BERRY, .teamFlags = 0x9C, .moves = { MOVE_DRAGON_CLAW, @@ -3668,7 +3668,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_METAGROSS, - .item = BATTLE_TOWER_ITEM_LIECHI_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LIECHI_BERRY, .teamFlags = 0xB5, .moves = { MOVE_METEOR_MASH, @@ -3681,7 +3681,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_REGIROCK, - .item = BATTLE_TOWER_ITEM_APICOT_BERRY, + .heldItem = BATTLE_TOWER_ITEM_APICOT_BERRY, .teamFlags = 0x95, .moves = { MOVE_EARTHQUAKE, @@ -3694,7 +3694,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_REGICE, - .item = BATTLE_TOWER_ITEM_LAX_INCENSE, + .heldItem = BATTLE_TOWER_ITEM_LAX_INCENSE, .teamFlags = 0x96, .moves = { MOVE_ICE_BEAM, @@ -3707,7 +3707,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_REGISTEEL, - .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .heldItem = BATTLE_TOWER_ITEM_LEFTOVERS, .teamFlags = 0xB4, .moves = { MOVE_CURSE, @@ -3720,7 +3720,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_LATIAS, - .item = BATTLE_TOWER_ITEM_SHELL_BELL, + .heldItem = BATTLE_TOWER_ITEM_SHELL_BELL, .teamFlags = 0x92, .moves = { MOVE_MIST_BALL, @@ -3733,7 +3733,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_LATIOS, - .item = BATTLE_TOWER_ITEM_SHELL_BELL, + .heldItem = BATTLE_TOWER_ITEM_SHELL_BELL, .teamFlags = 0x91, .moves = { MOVE_LUSTER_PURGE, @@ -3746,7 +3746,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_MILOTIC, - .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .heldItem = BATTLE_TOWER_ITEM_BRIGHT_POWDER, .teamFlags = 0xB2, .moves = { MOVE_SURF, @@ -3759,7 +3759,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_SLAKING, - .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SALAC_BERRY, .teamFlags = 0x65, .moves = { MOVE_YAWN, @@ -3772,7 +3772,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_SCEPTILE, - .item = BATTLE_TOWER_ITEM_SHELL_BELL, + .heldItem = BATTLE_TOWER_ITEM_SHELL_BELL, .teamFlags = 0xDF, .moves = { MOVE_LEAF_BLADE, @@ -3785,7 +3785,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_BLAZIKEN, - .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SALAC_BERRY, .teamFlags = 0xD7, .moves = { MOVE_BLAZE_KICK, @@ -3798,7 +3798,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_SWAMPERT, - .item = BATTLE_TOWER_ITEM_PETAYA_BERRY, + .heldItem = BATTLE_TOWER_ITEM_PETAYA_BERRY, .teamFlags = 0x5F, .moves = { MOVE_SURF, @@ -3811,7 +3811,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_SHEDINJA, - .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .heldItem = BATTLE_TOWER_ITEM_BRIGHT_POWDER, .teamFlags = 0xDB, .moves = { MOVE_CONFUSE_RAY, @@ -3824,7 +3824,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_METAGROSS, - .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .heldItem = BATTLE_TOWER_ITEM_QUICK_CLAW, .teamFlags = 0x94, .moves = { MOVE_METEOR_MASH, @@ -3837,7 +3837,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_GRUMPIG, - .item = BATTLE_TOWER_ITEM_MACHO_BRACE, + .heldItem = BATTLE_TOWER_ITEM_MACHO_BRACE, .teamFlags = 0x4B, .moves = { MOVE_PSYCHIC, @@ -3850,7 +3850,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_LATIAS, - .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LUM_BERRY, .teamFlags = 0x92, .moves = { MOVE_MIST_BALL, @@ -3863,7 +3863,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_LATIOS, - .item = BATTLE_TOWER_ITEM_KINGS_ROCK, + .heldItem = BATTLE_TOWER_ITEM_KINGS_ROCK, .teamFlags = 0x91, .moves = { MOVE_LUSTER_PURGE, @@ -3876,7 +3876,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_STARMIE, - .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LUM_BERRY, .teamFlags = 0x1A, .moves = { MOVE_SURF, @@ -3889,7 +3889,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_MACHAMP, - .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .heldItem = BATTLE_TOWER_ITEM_SCOPE_LENS, .teamFlags = 0x14, .moves = { MOVE_CROSS_CHOP, diff --git a/src/de_rom_8040FE0.c b/src/de_rom_8040FE0.c index 953871c8b..5acdc3859 100644 --- a/src/de_rom_8040FE0.c +++ b/src/de_rom_8040FE0.c @@ -94,7 +94,7 @@ u8 *de_sub_8041024(s32 arg0, u32 arg1) { case 0x800: trainerClass = de_sub_81364F8(); - nameIndex = sub_8135FD8(); + nameIndex = GetEReaderTrainerNameIndex(); if (trainerClass == TRAINER_CLASS_SCHOOL_KID_F) { return de_sub_8040FE0(FEMALE); @@ -196,7 +196,7 @@ _08041086:\n\ bl de_sub_81364F8\n\ lsls r0, 24\n\ lsrs r4, r0, 24\n\ - bl sub_8135FD8\n\ + bl GetEReaderTrainerNameIndex\n\ b _08041070\n\ _08041094:\n\ movs r0, 0x1\n\ diff --git a/src/debug/unknown_debug_menu.c b/src/debug/unknown_debug_menu.c index 9cc24fc62..429f43766 100644 --- a/src/debug/unknown_debug_menu.c +++ b/src/debug/unknown_debug_menu.c @@ -44,10 +44,10 @@ u8 sub_814A4B8(void) { gSaveBlock2.battleTower.var_4AE[0] = 3; gSaveBlock2.battleTower.var_4AE[1] = 3; - gSaveBlock2.battleTower.curStreakChallengesCompleted[0] = gBattleCommunication[0] + 1; - gSaveBlock2.battleTower.curStreakChallengesCompleted[1] = gBattleCommunication[0] + 1; - gSaveBlock2.battleTower.curChallengeWins[0] = 1; - gSaveBlock2.battleTower.curChallengeWins[1] = 1; + gSaveBlock2.battleTower.curStreakChallengesNum[0] = gBattleCommunication[0] + 1; + gSaveBlock2.battleTower.curStreakChallengesNum[1] = gBattleCommunication[0] + 1; + gSaveBlock2.battleTower.curChallengeBattleNum[0] = 1; + gSaveBlock2.battleTower.curChallengeBattleNum[1] = 1; CloseMenu(); return 1; } diff --git a/src/engine/mystery_event_script.c b/src/engine/mystery_event_script.c index 0fb3a21cd..69434710f 100644 --- a/src/engine/mystery_event_script.c +++ b/src/engine/mystery_event_script.c @@ -421,7 +421,7 @@ bool8 MEScrCmd_addtrainer(struct ScriptContext *ctx) { u32 data = ScriptReadWord(ctx) - ctx->data[1] + ctx->data[0]; memcpy(&gSaveBlock2.battleTower.ereaderTrainer, (void *)data, sizeof(gSaveBlock2.battleTower.ereaderTrainer)); - sub_813601C(); + ValidateEReaderTrainer(); StringExpandPlaceholders(gStringVar4, gOtherText_NewTrainerInHoenn); ctx->data[2] = 2; return FALSE; diff --git a/src/field/choose_party.c b/src/field/choose_party.c index fd90a9199..adb210e7b 100644 --- a/src/field/choose_party.c +++ b/src/field/choose_party.c @@ -24,7 +24,7 @@ extern u8 gUnknown_020384F0; extern struct UnknownPokemonStruct2 gUnknown_02023A00[]; extern u8 gUnknown_0202E8F6; extern struct Pokemon gUnknown_030042FC[]; -extern const u16 gBattleTowerBanlist[]; +extern const u16 gBattleTowerBannedSpecies[]; EWRAM_DATA u8 gSelectedOrderFromParty[3] = {0}; @@ -182,9 +182,9 @@ static bool8 IsMonAllowedInBattleTower(struct Pokemon *pkmn) // Check if the pkmn is in the ban list species = GetMonData(pkmn, MON_DATA_SPECIES); - while (gBattleTowerBanlist[i] != 0xFFFF) + while (gBattleTowerBannedSpecies[i] != 0xFFFF) { - if (gBattleTowerBanlist[i] == species) + if (gBattleTowerBannedSpecies[i] == species) return FALSE; i++; } diff --git a/src/field/field_specials.c b/src/field/field_specials.c index 36362d098..ea0c2bd6a 100644 --- a/src/field/field_specials.c +++ b/src/field/field_specials.c @@ -1789,7 +1789,7 @@ u16 sub_810F404(void) void sub_810F414(void) { - sub_8135FF4(gStringVar1); + SetEReaderTrainerName(gStringVar1); } const u8 gUnknown_083F83E0[] = {12, 2, 4, 5, 1, 8, 7, 11, 3, 10, 9, 6}; diff --git a/src/field/tv.c b/src/field/tv.c index fcbd734a9..87fc03065 100644 --- a/src/field/tv.c +++ b/src/field/tv.c @@ -123,7 +123,6 @@ void ClearTVShowData(void) bool8 sub_80BF1B4(u8); void sub_80BF20C(void); -extern u16 sub_8135D3C(u8); extern u8 gScriptContestCategory; extern u8 gScriptContestRank; extern u8 gUnknown_03004316[11]; @@ -677,7 +676,7 @@ void sub_80BE320(void) StringCopy(bravoTrainerTower->pokemonName, gSaveBlock2.battleTower.defeatedByTrainerName); bravoTrainerTower->species = gSaveBlock2.battleTower.firstMonSpecies; bravoTrainerTower->defeatedSpecies = gSaveBlock2.battleTower.defeatedBySpecies; - bravoTrainerTower->var16 = sub_8135D3C(gSaveBlock2.battleTower.lastStreakLevelType); + bravoTrainerTower->var16 = GetCurrentBattleTowerWinStreak(gSaveBlock2.battleTower.lastStreakLevelType); bravoTrainerTower->var1c = gSaveBlock2.battleTower.battleOutcome; if (gSaveBlock2.battleTower.lastStreakLevelType == 0) bravoTrainerTower->btLevel = 50; -- cgit v1.2.3 From 2a682aec81c9de708d19e0ade1efef0a4f9db245 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Thu, 2 Nov 2017 17:55:40 -0700 Subject: Define constants for special battle_tower trainer ids --- src/battle_tower.c | 53 +++++++++++++++++++++++++++-------------------------- 1 file changed, 27 insertions(+), 26 deletions(-) (limited to 'src') diff --git a/src/battle_tower.c b/src/battle_tower.c index 91e223216..c85e1b8f5 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -399,7 +399,7 @@ bool8 sub_81346F4(void) winStreak = GetCurrentBattleTowerWinStreak(battleTowerLevelType); if (ShouldBattleEReaderTrainer(battleTowerLevelType, winStreak)) { - gSaveBlock2.battleTower.battleTowerTrainerId = 200; + gSaveBlock2.battleTower.battleTowerTrainerId = BATTLE_TOWER_EREADER_TRAINER_ID; retVal = TRUE; } else @@ -432,7 +432,7 @@ bool8 sub_81346F4(void) } else { - gSaveBlock2.battleTower.battleTowerTrainerId = trainerIds[Random() % numCandidates] + 100; + gSaveBlock2.battleTower.battleTowerTrainerId = trainerIds[Random() % numCandidates] + BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID; retVal = TRUE; } } @@ -785,13 +785,13 @@ void SetBattleTowerTrainerGfxId(u8 trainerIndex) u32 i; u8 trainerClass; - if (trainerIndex < 100) + if (trainerIndex < BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID) { trainerClass = gBattleTowerTrainers[trainerIndex].trainerClass; } - else if (trainerIndex < 200) + else if (trainerIndex < BATTLE_TOWER_EREADER_TRAINER_ID) { - trainerClass = gSaveBlock2.battleTower.records[trainerIndex - 100].trainerClass; + trainerClass = gSaveBlock2.battleTower.records[trainerIndex - BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID].trainerClass; } else { @@ -819,7 +819,7 @@ void SetBattleTowerTrainerGfxId(u8 trainerIndex) void SetEReaderTrainerGfxId() { - SetBattleTowerTrainerGfxId(200); + SetBattleTowerTrainerGfxId(BATTLE_TOWER_EREADER_TRAINER_ID); } // void sub_8134AC0(struct BattleTowerRecord *record) @@ -1144,29 +1144,29 @@ _08134C70: .4byte gSaveBlock2\n\ u8 get_trainer_class_pic_index(void) { - if (gSaveBlock2.battleTower.battleTowerTrainerId == 200) + if (gSaveBlock2.battleTower.battleTowerTrainerId == BATTLE_TOWER_EREADER_TRAINER_ID) { return gTrainerClassToPicIndex[gSaveBlock2.battleTower.ereaderTrainer.trainerClass]; } - else if (gSaveBlock2.battleTower.battleTowerTrainerId < 100) + else if (gSaveBlock2.battleTower.battleTowerTrainerId < BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID) { return gTrainerClassToPicIndex[gBattleTowerTrainers[gSaveBlock2.battleTower.battleTowerTrainerId].trainerClass]; } else { - return gTrainerClassToPicIndex[gSaveBlock2.battleTower.records[gSaveBlock2.battleTower.battleTowerTrainerId - 100].trainerClass]; + return gTrainerClassToPicIndex[gSaveBlock2.battleTower.records[gSaveBlock2.battleTower.battleTowerTrainerId - BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID].trainerClass]; } } u8 get_trainer_class_name_index(void) { - if (gSaveBlock2.battleTower.battleTowerTrainerId == 200) + if (gSaveBlock2.battleTower.battleTowerTrainerId == BATTLE_TOWER_EREADER_TRAINER_ID) { return gTrainerClassToNameIndex[gSaveBlock2.battleTower.ereaderTrainer.trainerClass]; } - else if (gSaveBlock2.battleTower.battleTowerTrainerId >= 100) + else if (gSaveBlock2.battleTower.battleTowerTrainerId >= BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID) { - return gTrainerClassToNameIndex[gSaveBlock2.battleTower.records[gSaveBlock2.battleTower.battleTowerTrainerId - 100].trainerClass]; + return gTrainerClassToNameIndex[gSaveBlock2.battleTower.records[gSaveBlock2.battleTower.battleTowerTrainerId - BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID].trainerClass]; } else { @@ -1178,14 +1178,14 @@ void get_trainer_name(u8* dest) { s32 i; - if (gSaveBlock2.battleTower.battleTowerTrainerId == 200) + if (gSaveBlock2.battleTower.battleTowerTrainerId == BATTLE_TOWER_EREADER_TRAINER_ID) { for (i = 0; i < 7; i++) { dest[i] = gSaveBlock2.battleTower.ereaderTrainer.name[i]; } } - else if (gSaveBlock2.battleTower.battleTowerTrainerId < 100) + else if (gSaveBlock2.battleTower.battleTowerTrainerId < BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID) { for (i = 0; i < 7; i++) { @@ -1196,7 +1196,7 @@ void get_trainer_name(u8* dest) { for (i = 0; i < 7; i++) { - dest[i] = gSaveBlock2.battleTower.records[gSaveBlock2.battleTower.battleTowerTrainerId - 100].name[i]; + dest[i] = gSaveBlock2.battleTower.records[gSaveBlock2.battleTower.battleTowerTrainerId - BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID].name[i]; } } @@ -1258,13 +1258,13 @@ void FillBattleTowerTrainerParty(void) fixedIV = 31; battleMonsOffset = 180; } - else if (gSaveBlock2.battleTower.battleTowerTrainerId < 100) + else if (gSaveBlock2.battleTower.battleTowerTrainerId < BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID) { fixedIV = 31; battleMonsOffset = 200; monPoolSize = 100; } - else if (gSaveBlock2.battleTower.battleTowerTrainerId == 200) + else if (gSaveBlock2.battleTower.battleTowerTrainerId == BATTLE_TOWER_EREADER_TRAINER_ID) { // Load E-Reader trainer's party. for (partyIndex = 0; partyIndex < 3; partyIndex++) @@ -1281,7 +1281,7 @@ void FillBattleTowerTrainerParty(void) { sub_803ADE8( &gEnemyParty[partyIndex], - &gSaveBlock2.battleTower.records[gSaveBlock2.battleTower.battleTowerTrainerId - 100].party[partyIndex]); + &gSaveBlock2.battleTower.records[gSaveBlock2.battleTower.battleTowerTrainerId - BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID].party[partyIndex]); } return; @@ -1562,17 +1562,17 @@ void PrintBattleTowerTrainerMessage(u16 *easyChat) void PrintBattleTowerTrainerGreeting(void) { - if (gSaveBlock2.battleTower.battleTowerTrainerId == 200) + if (gSaveBlock2.battleTower.battleTowerTrainerId == BATTLE_TOWER_EREADER_TRAINER_ID) { PrintBattleTowerTrainerMessage(gSaveBlock2.battleTower.ereaderTrainer.greeting.easyChat); } - else if (gSaveBlock2.battleTower.battleTowerTrainerId < 100) + else if (gSaveBlock2.battleTower.battleTowerTrainerId < BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID) { PrintBattleTowerTrainerMessage((u16 *)gBattleTowerTrainers[gSaveBlock2.battleTower.battleTowerTrainerId].greeting.easyChat); } else { - PrintBattleTowerTrainerMessage(gSaveBlock2.battleTower.records[gSaveBlock2.battleTower.battleTowerTrainerId - 100].greeting.easyChat); + PrintBattleTowerTrainerMessage(gSaveBlock2.battleTower.records[gSaveBlock2.battleTower.battleTowerTrainerId - BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID].greeting.easyChat); } } @@ -1690,7 +1690,7 @@ void sub_8135668(void) } break; case 6: - if (gSaveBlock2.battleTower.battleTowerTrainerId == 200) + if (gSaveBlock2.battleTower.battleTowerTrainerId == BATTLE_TOWER_EREADER_TRAINER_ID) { ClearEReaderTrainer(&gSaveBlock2.battleTower.ereaderTrainer); } @@ -2059,7 +2059,8 @@ void sub_8135CFC(void) u16 GetCurrentBattleTowerWinStreak(u8 battleTowerLevelType) { - u16 winStreak = ((gSaveBlock2.battleTower.curStreakChallengesNum[battleTowerLevelType] - 1) * 7 - 1) + gSaveBlock2.battleTower.curChallengeBattleNum[battleTowerLevelType]; + u16 winStreak = ((gSaveBlock2.battleTower.curStreakChallengesNum[battleTowerLevelType] - 1) * 7 - 1) + + gSaveBlock2.battleTower.curChallengeBattleNum[battleTowerLevelType]; if (winStreak > 9999) { @@ -2353,13 +2354,13 @@ void sub_813610C(void) #if GERMAN u8 de_sub_81364AC(void) { - if (gSaveBlock2.battleTower.battleTowerTrainerId == 200) + if (gSaveBlock2.battleTower.battleTowerTrainerId == BATTLE_TOWER_EREADER_TRAINER_ID) { return gSaveBlock2.battleTower.ereaderTrainer.trainerClass; } - else if (gSaveBlock2.battleTower.battleTowerTrainerId >= 100) + else if (gSaveBlock2.battleTower.battleTowerTrainerId >= BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID) { - return gSaveBlock2.battleTower.records[gSaveBlock2.battleTower.battleTowerTrainerId - 100].trainerClass; + return gSaveBlock2.battleTower.records[gSaveBlock2.battleTower.battleTowerTrainerId - BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID].trainerClass; } else { -- cgit v1.2.3 From 5b8afc1ed70969fc93bce6aa43ded9929e5a2636 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Thu, 2 Nov 2017 18:02:40 -0700 Subject: Move battle_tower.c to src/field/ --- src/battle_tower.c | 2375 ---------------------------------------------- src/field/battle_tower.c | 2375 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 2375 insertions(+), 2375 deletions(-) delete mode 100644 src/battle_tower.c create mode 100644 src/field/battle_tower.c (limited to 'src') diff --git a/src/battle_tower.c b/src/battle_tower.c deleted file mode 100644 index c85e1b8f5..000000000 --- a/src/battle_tower.c +++ /dev/null @@ -1,2375 +0,0 @@ -#include "global.h" -#include "battle.h" -#include "battle_setup.h" -#include "battle_tower.h" -#include "battle_transition.h" -#include "data2.h" -#include "easy_chat.h" -#include "event_data.h" -#include "item.h" -#include "items.h" -#include "main.h" -#include "map_object_constants.h" -#include "moves.h" -#include "new_game.h" -#include "overworld.h" -#include "pokedex.h" -#include "rng.h" -#include "save.h" -#include "script_pokemon_80C4.h" -#include "species.h" -#include "string_util.h" -#include "task.h" -#include "text.h" -#include "trainer.h" -#include "tv.h" -#include "vars.h" - -#if ENGLISH -#include "data/battle_tower/trainers.h" -#elif GERMAN -#include "data/battle_tower/trainers_de.h" -#endif - -static const u16 sBattleTowerHeldItems[] = { - ITEM_NONE, - ITEM_KINGS_ROCK, - ITEM_SITRUS_BERRY, - ITEM_ORAN_BERRY, - ITEM_CHESTO_BERRY, - ITEM_HARD_STONE, - ITEM_FOCUS_BAND, - ITEM_PERSIM_BERRY, - ITEM_MIRACLE_SEED, - ITEM_BERRY_JUICE, - ITEM_MACHO_BRACE, - ITEM_SILVER_POWDER, - ITEM_CHERI_BERRY, - ITEM_BLACK_GLASSES, - ITEM_BLACK_BELT, - ITEM_SOUL_DEW, - ITEM_CHOICE_BAND, - ITEM_MAGNET, - ITEM_SILK_SCARF, - ITEM_WHITE_HERB, - ITEM_DEEP_SEA_SCALE, - ITEM_DEEP_SEA_TOOTH, - ITEM_MYSTIC_WATER, - ITEM_SHARP_BEAK, - ITEM_QUICK_CLAW, - ITEM_LEFTOVERS, - ITEM_RAWST_BERRY, - ITEM_LIGHT_BALL, - ITEM_POISON_BARB, - ITEM_NEVER_MELT_ICE, - ITEM_ASPEAR_BERRY, - ITEM_SPELL_TAG, - ITEM_BRIGHT_POWDER, - ITEM_LEPPA_BERRY, - ITEM_SCOPE_LENS, - ITEM_TWISTED_SPOON, - ITEM_METAL_COAT, - ITEM_MENTAL_HERB, - ITEM_CHARCOAL, - ITEM_PECHA_BERRY, - ITEM_SOFT_SAND, - ITEM_LUM_BERRY, - ITEM_DRAGON_SCALE, - ITEM_DRAGON_FANG, - ITEM_IAPAPA_BERRY, - ITEM_WIKI_BERRY, - ITEM_SEA_INCENSE, - ITEM_SHELL_BELL, - ITEM_SALAC_BERRY, - ITEM_LANSAT_BERRY, - ITEM_APICOT_BERRY, - ITEM_STARF_BERRY, - ITEM_LIECHI_BERRY, - ITEM_STICK, - ITEM_LAX_INCENSE, - ITEM_AGUAV_BERRY, - ITEM_FIGY_BERRY, - ITEM_THICK_CLUB, - ITEM_MAGO_BERRY, - ITEM_METAL_POWDER, - ITEM_PETAYA_BERRY, - ITEM_LUCKY_PUNCH, - ITEM_GANLON_BERRY, -}; - -#include "data/battle_tower/level_50_mons.h" -#include "data/battle_tower/level_100_mons.h" - -static const u8 sMaleTrainerClasses[] = { - TRAINER_CLASS_RUIN_MANIAC, - TRAINER_CLASS_TUBER_M, - TRAINER_CLASS_COOL_TRAINER_M, - TRAINER_CLASS_RICH_BOY, - TRAINER_CLASS_POKEMANIAC, - TRAINER_CLASS_SWIMMER_M, - TRAINER_CLASS_BLACK_BELT, - TRAINER_CLASS_GUITARIST, - TRAINER_CLASS_KINDLER, - TRAINER_CLASS_CAMPER, - TRAINER_CLASS_BUG_MANIAC, - TRAINER_CLASS_PSYCHIC_M, - TRAINER_CLASS_GENTLEMAN, - TRAINER_CLASS_SCHOOL_KID_M, - TRAINER_CLASS_POKEFAN_M, - TRAINER_CLASS_EXPERT_M, - TRAINER_CLASS_YOUNGSTER, - TRAINER_CLASS_FISHERMAN, - TRAINER_CLASS_CYCLING_TRIATHLETE_M, - TRAINER_CLASS_RUNNING_TRIATHLETE_M, - TRAINER_CLASS_SWIMMING_TRIATHLETE_M, - TRAINER_CLASS_DRAGON_TAMER, - TRAINER_CLASS_BIRD_KEEPER, - TRAINER_CLASS_NINJA_BOY, - TRAINER_CLASS_SAILOR, - TRAINER_CLASS_COLLECTOR, - TRAINER_CLASS_POKEMON_BREEDER_M, - TRAINER_CLASS_POKEMON_RANGER_M, - TRAINER_CLASS_BUG_CATCHER, - TRAINER_CLASS_HIKER, -}; - -static const u8 sFemaleTrainerClasses[] = { - TRAINER_CLASS_AROMA_LADY, - TRAINER_CLASS_TUBER_F, - TRAINER_CLASS_COOL_TRAINER_F, - TRAINER_CLASS_HEX_MANIAC, - TRAINER_CLASS_LADY, - TRAINER_CLASS_BEAUTY, - TRAINER_CLASS_PSYCHIC_F, - TRAINER_CLASS_SCHOOL_KID_F, - TRAINER_CLASS_POKEFAN_F, - TRAINER_CLASS_EXPERT_F, - TRAINER_CLASS_CYCLING_TRIATHLETE_F, - TRAINER_CLASS_RUNNING_TRIATHLETE_F, - TRAINER_CLASS_SWIMMING_TRIATHLETE_F, - TRAINER_CLASS_BATTLE_GIRL, - TRAINER_CLASS_PARASOL_LADY, - TRAINER_CLASS_SWIMMER_F, - TRAINER_CLASS_PICNICKER, - TRAINER_CLASS_POKEMON_BREEDER_F, - TRAINER_CLASS_POKEMON_RANGER_F, - TRAINER_CLASS_LASS, -}; - -static const u8 sMaleTrainerGfxIds[] = { - MAP_OBJ_GFX_HIKER, - MAP_OBJ_GFX_TUBER_M, - MAP_OBJ_GFX_MAN_4, - MAP_OBJ_GFX_BOY_4, - MAP_OBJ_GFX_MANIAC, - MAP_OBJ_GFX_RUNNING_TRIATHLETE_M, - MAP_OBJ_GFX_BLACK_BELT, - MAP_OBJ_GFX_MAN_6, - MAP_OBJ_GFX_MAN_6, - MAP_OBJ_GFX_CAMPER, - MAP_OBJ_GFX_MANIAC, - MAP_OBJ_GFX_PSYCHIC_M, - MAP_OBJ_GFX_GENTLEMAN, - MAP_OBJ_GFX_SCHOOL_KID_M, - MAP_OBJ_GFX_MAN_3, - MAP_OBJ_GFX_OLD_MAN_1, - MAP_OBJ_GFX_YOUNGSTER, - MAP_OBJ_GFX_FISHERMAN, - MAP_OBJ_GFX_CYCLING_TRIATHLETE_M, - MAP_OBJ_GFX_RUNNING_TRIATHLETE_M, - MAP_OBJ_GFX_RUNNING_TRIATHLETE_M, - MAP_OBJ_GFX_MAN_4, - MAP_OBJ_GFX_MAN_6, - MAP_OBJ_GFX_LITTLE_BOY_1, - MAP_OBJ_GFX_SAILOR, - MAP_OBJ_GFX_MANIAC, - MAP_OBJ_GFX_MAN_5, - MAP_OBJ_GFX_CAMPER, - MAP_OBJ_GFX_BUG_CATCHER, - MAP_OBJ_GFX_HIKER, -}; - -static const u8 sFemaleTrainerGfxIds[] = { - MAP_OBJ_GFX_WOMAN_3, - MAP_OBJ_GFX_TUBER_F, - MAP_OBJ_GFX_WOMAN_7, - MAP_OBJ_GFX_WOMAN_1, - MAP_OBJ_GFX_WOMAN_3, - MAP_OBJ_GFX_BEAUTY, - MAP_OBJ_GFX_LASS, - MAP_OBJ_GFX_GIRL_3, - MAP_OBJ_GFX_WOMAN_2, - MAP_OBJ_GFX_OLD_WOMAN_1, - MAP_OBJ_GFX_CYCLING_TRIATHLETE_F, - MAP_OBJ_GFX_RUNNING_TRIATHLETE_F, - MAP_OBJ_GFX_RUNNING_TRIATHLETE_F, - MAP_OBJ_GFX_GIRL_3, - MAP_OBJ_GFX_WOMAN_7, - MAP_OBJ_GFX_RUNNING_TRIATHLETE_F, - MAP_OBJ_GFX_PICNICKER, - MAP_OBJ_GFX_WOMAN_3, - MAP_OBJ_GFX_PICNICKER, - MAP_OBJ_GFX_LASS, -}; - -const u16 gBattleTowerBannedSpecies[] = { - SPECIES_MEW, - SPECIES_MEWTWO, - SPECIES_HO_OH, - SPECIES_LUGIA, - SPECIES_CELEBI, - SPECIES_KYOGRE, - SPECIES_GROUDON, - SPECIES_RAYQUAZA, - SPECIES_JIRACHI, - SPECIES_DEOXYS, - 0xFFFF, -}; - -// Item prizes for battle tower streaks of 5 or fewer sets. -/*static*/ const u16 sShortStreakPrizes[] = { - ITEM_HP_UP, - ITEM_PROTEIN, - ITEM_IRON, - ITEM_CALCIUM, - ITEM_CARBOS, - ITEM_ZINC, -}; - -// Item prizes for battle tower streaks of greater than 5 sets. -/*static*/ const u16 sLongStreakPrizes[] = { - ITEM_BRIGHT_POWDER, - ITEM_WHITE_HERB, - ITEM_QUICK_CLAW, - ITEM_LEFTOVERS, - ITEM_MENTAL_HERB, - ITEM_KINGS_ROCK, - ITEM_FOCUS_BAND, - ITEM_SCOPE_LENS, - ITEM_CHOICE_BAND, -}; - -static void ResetBattleTowerStreak(u8 levelType); -static void ValidateBattleTowerRecordChecksums(void); -static void PrintEReaderTrainerFarewellMessage(void); -extern void SetBattleTowerTrainerGfxId(u8); -extern void sub_8135A3C(void); -static void sub_8135CFC(void); -static void CheckMonBattleTowerBanlist(u16, u16, u16, u8, u8, u16 *, u16 *, u8 *); -static void ClearEReaderTrainer(struct BattleTowerEReaderTrainer *); -static void SetEReaderTrainerChecksum(struct BattleTowerEReaderTrainer *ereaderTrainer); -static void SetBattleTowerRecordChecksum(struct BattleTowerRecord *); -static void ClearBattleTowerRecord(struct BattleTowerRecord *); - -extern const u8 gUnknown_08400E23[]; -extern const u8 gUnknown_08400E29[]; -extern const u8 gUnknown_08400E2C[]; -extern const u8 gUnknown_08400E2E[]; -extern const u8 gUnknown_08400E30[]; -extern const u8 gUnknown_08400E32[]; -extern const u8 gUnknown_08400E36[]; -extern u16 gSpecialVar_0x8004; -extern u8 gTrainerClassToPicIndex[]; -extern u8 gTrainerClassToNameIndex[]; -extern u16 gTrainerBattleOpponent; -extern u16 gBattleTypeFlags; -extern u8 gSelectedOrderFromParty[]; -extern u8 gBattleOutcome; -extern struct Pokemon gUnknown_030042FC[]; -extern struct BattlePokemon gBattleMons[]; - -#define ewram160FB (ewram[0x160FB]) - - -void sub_8134548(void) -{ - u8 var1 = 0; - s32 levelType; - - for (levelType = 0; levelType < 2; levelType++) - { - switch (gSaveBlock2.battleTower.var_4AE[levelType]) - { - case 0: - default: - ResetBattleTowerStreak(levelType); - if (!var1) - { - VarSet(VAR_0x4000, 5); - } - break; - case 1: - ResetBattleTowerStreak(levelType); - VarSet(VAR_0x4000, 1); - var1++; - break; - case 4: - VarSet(VAR_0x4000, 2); - var1++; - break; - case 5: - VarSet(VAR_0x4000, 3); - var1++; - break; - case 2: - VarSet(VAR_0x4000, 4); - var1++; - break; - case 3: - case 6: - break; - } - } - - if ((gSaveBlock2.battleTower.var_4AE[0] == 3 || gSaveBlock2.battleTower.var_4AE[0] == 6) - && (gSaveBlock2.battleTower.var_4AE[1] == 3 || gSaveBlock2.battleTower.var_4AE[1] == 6)) - { - VarSet(VAR_0x4000, 5); - } - - ValidateBattleTowerRecordChecksums(); -} - -void ResetBattleTowerStreak(u8 levelType) -{ - gSaveBlock2.battleTower.var_4AE[levelType] = 0; - gSaveBlock2.battleTower.curChallengeBattleNum[levelType] = 1; - gSaveBlock2.battleTower.curStreakChallengesNum[levelType] = 1; -} - -// Checks if the next trainer in Battle Tower should be the E-Reader trainer. -bool8 ShouldBattleEReaderTrainer(u8 levelType, u16 winStreak) -{ - u8 trainerTeamLevel; - u8 monLevel; - s32 i; - u16 validPartySpecies[6]; - u16 validPartyHeldItems[6]; - u8 numValid; - - numValid = 0; - - ValidateEReaderTrainer(); - - if (gScriptResult != 0 || gSaveBlock2.battleTower.ereaderTrainer.winStreak != winStreak) - { - return FALSE; - } - - trainerTeamLevel = 50; - if (levelType != 0) - { - trainerTeamLevel = 100; - } - - for (i = 0; i < 3; i++) - { - monLevel = gSaveBlock2.battleTower.ereaderTrainer.party[i].level; - if (gSaveBlock2.battleTower.ereaderTrainer.party[i].level != trainerTeamLevel) - { - return FALSE; - } - - CheckMonBattleTowerBanlist( - gSaveBlock2.battleTower.ereaderTrainer.party[i].species, - gSaveBlock2.battleTower.ereaderTrainer.party[i].heldItem, - 1, - levelType, - monLevel, - validPartySpecies, - validPartyHeldItems, - &numValid); - } - - return numValid == 3; -} - -bool8 sub_81346F4(void) -{ - s32 recordIndex, i; - u8 battleTowerLevelType; - u16 winStreak; - bool8 retVal; - s32 numCandidates; - u32 trainerIds[5]; - - numCandidates = 0; - battleTowerLevelType = gSaveBlock2.battleTower.battleTowerLevelType; - - winStreak = GetCurrentBattleTowerWinStreak(battleTowerLevelType); - if (ShouldBattleEReaderTrainer(battleTowerLevelType, winStreak)) - { - gSaveBlock2.battleTower.battleTowerTrainerId = BATTLE_TOWER_EREADER_TRAINER_ID; - retVal = TRUE; - } - else - { - // Check if one of the battle tower trainers from record mixing should be the next trainer. - for (recordIndex = 0; recordIndex < 5; recordIndex++) - { - struct BattleTowerRecord *record = &gSaveBlock2.battleTower.records[recordIndex]; - u32 recordHasData = 0; - u32 checksum = 0; - for (i = 0; i < sizeof(struct BattleTowerRecord) / sizeof(u32) - 1; i++) - { - recordHasData |= ((u32 *)record)[i]; - checksum += ((u32 *)record)[i]; - } - - if (gSaveBlock2.battleTower.records[recordIndex].winStreak == winStreak - && gSaveBlock2.battleTower.records[recordIndex].battleTowerLevelType == battleTowerLevelType - && recordHasData - && gSaveBlock2.battleTower.records[recordIndex].checksum == checksum) - { - trainerIds[numCandidates] = recordIndex; - numCandidates++; - } - } - - if (numCandidates == 0) - { - retVal = FALSE; - } - else - { - gSaveBlock2.battleTower.battleTowerTrainerId = trainerIds[Random() % numCandidates] + BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID; - retVal = TRUE; - } - } - - return retVal; -} - -// void sub_81347F8(void) -// { -// bool8 levelType = gSaveBlock2.battleTower.battleTowerLevelType; -// if (sub_81346F4()) -// { -// SetBattleTowerTrainerGfxId(gSaveBlock2.battleTower.battleTowerTrainerId); -// gSaveBlock2.battleTower.var_4C1[gSaveBlock2.battleTower.curChallengeBattleNum[levelType]] = gSaveBlock2.battleTower.battleTowerTrainerId; -// } -// else -// { -// u16 var1; - -// if (gSaveBlock2.battleTower.curStreakChallengesNum[levelType] > 7) -// { -// while (1) -// { -// s32 i; -// u32 temp = ((Random() & 0xFF) * 30) >> 8; -// var1 = temp + 70; -// for (i = 0; i < gSaveBlock2.battleTower.curChallengeBattleNum[levelType] - 1 && var1 != gSaveBlock2.battleTower.var_4C1[i]; i++) // TODO: [i + 1]??? -// { } - -// if (i == gSaveBlock2.battleTower.curChallengeBattleNum[levelType] - 1) -// { -// break; -// } -// } -// } -// else -// { -// if (gSaveBlock2.battleTower.curChallengeBattleNum[levelType] == 7) -// { -// while (1) -// { -// s32 i; -// u32 temp = ((Random() & 0xFF) * 5); -// u32 temp2 = (((gSaveBlock2.battleTower.curStreakChallengesNum[levelType] - 1) * 10) + 20); -// var1 = temp / 128 + temp2; -// for (i = 0; i < gSaveBlock2.battleTower.curChallengeBattleNum[levelType] - 1 && gSaveBlock2.battleTower.var_4C1[i] != var1; i++) // TODO: [i + 1]???? -// { } - -// if (i == gSaveBlock2.battleTower.curChallengeBattleNum[levelType] - 1) -// { -// break; -// } -// } -// } -// else -// { -// while (1) -// { -// s32 i; -// u32 temp = ((Random() & 0xFF) * 320); -// u32 temp2 = ((gSaveBlock2.battleTower.curStreakChallengesNum[levelType] - 1) * 10); -// var1 = temp + temp2; -// for (i = 0; i < gSaveBlock2.battleTower.curChallengeBattleNum[levelType] - 1 && gSaveBlock2.battleTower.var_4C1[i] != var1; i++) -// { } - -// if (i == gSaveBlock2.battleTower.curChallengeBattleNum[levelType] - 1) -// { -// break; -// } -// } -// } -// } - -// gSaveBlock2.battleTower.battleTowerTrainerId = var1; -// SetBattleTowerTrainerGfxId(gSaveBlock2.battleTower.battleTowerTrainerId); - -// if (gSaveBlock2.battleTower.curChallengeBattleNum[levelType] < 7) -// { -// gSaveBlock2.battleTower.var_4C1[gSaveBlock2.battleTower.curChallengeBattleNum[levelType]] = gSaveBlock2.battleTower.battleTowerTrainerId; -// } -// } -// } - -__attribute__((naked)) -void sub_81347F8(void) -{ - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r10\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5-r7}\n\ - ldr r5, _08134838 @ =gSaveBlock2\n\ - ldr r1, _0813483C @ =0x00000554\n\ - adds r0, r5, r1\n\ - ldrb r0, [r0]\n\ - lsls r0, 31\n\ - lsrs r6, r0, 31\n\ - bl sub_81346F4\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - beq _08134848\n\ - ldr r2, _08134840 @ =0x00000564\n\ - adds r4, r5, r2\n\ - ldrb r0, [r4]\n\ - bl SetBattleTowerTrainerGfxId\n\ - lsls r0, r6, 1\n\ - movs r3, 0xAB\n\ - lsls r3, 3\n\ - adds r1, r5, r3\n\ - adds r0, r1\n\ - ldrh r0, [r0]\n\ - adds r0, r5, r0\n\ - ldr r1, _08134844 @ =0x00000569\n\ - adds r0, r1\n\ - ldrb r1, [r4]\n\ - b _081349DC\n\ - .align 2, 0\n\ -_08134838: .4byte gSaveBlock2\n\ -_0813483C: .4byte 0x00000554\n\ -_08134840: .4byte 0x00000564\n\ -_08134844: .4byte 0x00000569\n\ -_08134848:\n\ - lsls r0, r6, 1\n\ - ldr r2, _081348D8 @ =0x0000055c\n\ - adds r1, r5, r2\n\ - adds r1, r0, r1\n\ - ldrh r1, [r1]\n\ - adds r7, r0, 0\n\ - cmp r1, 0x7\n\ - bls _0813485A\n\ - b _0813495C\n\ -_0813485A:\n\ - movs r3, 0xAB\n\ - lsls r3, 3\n\ - adds r0, r5, r3\n\ - adds r1, r7, r0\n\ - ldrh r0, [r1]\n\ - cmp r0, 0x7\n\ - bne _081348E4\n\ - adds r6, r5, 0\n\ - mov r9, r7\n\ - adds r5, r1, 0\n\ - ldr r0, _081348DC @ =0x0000056a\n\ - adds r0, r6\n\ - mov r10, r0\n\ - mov r8, r5\n\ -_08134876:\n\ - bl Random\n\ - movs r1, 0xFF\n\ - ands r1, r0\n\ - lsls r2, r1, 2\n\ - adds r2, r1\n\ - ldr r1, _081348D8 @ =0x0000055c\n\ - adds r4, r6, r1\n\ - mov r3, r9\n\ - adds r0, r3, r4\n\ - ldrh r1, [r0]\n\ - subs r1, 0x1\n\ - lsls r0, r1, 2\n\ - adds r0, r1\n\ - lsls r0, 1\n\ - adds r0, 0x14\n\ - lsrs r2, 7\n\ - adds r2, r0\n\ - lsls r2, 16\n\ - lsrs r2, 16\n\ - movs r1, 0\n\ - ldrh r0, [r5]\n\ - subs r0, 0x1\n\ - cmp r1, r0\n\ - bge _081348C8\n\ - mov r3, r10\n\ - ldrb r0, [r3]\n\ - cmp r0, r2\n\ - beq _081348C8\n\ - subs r0, r4, 0x4\n\ - adds r0, r7, r0\n\ - ldrh r0, [r0]\n\ - subs r3, r0, 0x1\n\ - adds r4, 0xE\n\ -_081348BA:\n\ - adds r1, 0x1\n\ - cmp r1, r3\n\ - bge _081348C8\n\ - adds r0, r1, r4\n\ - ldrb r0, [r0]\n\ - cmp r0, r2\n\ - bne _081348BA\n\ -_081348C8:\n\ - mov r3, r8\n\ - ldrh r0, [r3]\n\ - subs r0, 0x1\n\ - ldr r4, _081348E0 @ =gSaveBlock2\n\ - cmp r1, r0\n\ - bne _08134876\n\ - b _081349B6\n\ - .align 2, 0\n\ -_081348D8: .4byte 0x0000055c\n\ -_081348DC: .4byte 0x0000056a\n\ -_081348E0: .4byte gSaveBlock2\n\ -_081348E4:\n\ - adds r6, r5, 0\n\ - mov r9, r7\n\ - adds r5, r1, 0\n\ - ldr r2, _08134950 @ =0x0000056a\n\ - adds r2, r6\n\ - mov r10, r2\n\ - mov r8, r5\n\ -_081348F2:\n\ - bl Random\n\ - movs r1, 0xFF\n\ - ands r1, r0\n\ - lsls r0, r1, 2\n\ - adds r0, r1\n\ - lsrs r2, r0, 6\n\ - ldr r3, _08134954 @ =0x0000055c\n\ - adds r4, r6, r3\n\ - mov r1, r9\n\ - adds r0, r1, r4\n\ - ldrh r1, [r0]\n\ - subs r1, 0x1\n\ - lsls r0, r1, 2\n\ - adds r0, r1\n\ - lsls r0, 1\n\ - adds r0, r2, r0\n\ - lsls r0, 16\n\ - lsrs r2, r0, 16\n\ - movs r1, 0\n\ - ldrh r0, [r5]\n\ - subs r0, 0x1\n\ - cmp r1, r0\n\ - bge _08134942\n\ - mov r3, r10\n\ - ldrb r0, [r3]\n\ - cmp r0, r2\n\ - beq _08134942\n\ - subs r0, r4, 0x4\n\ - adds r0, r7, r0\n\ - ldrh r0, [r0]\n\ - subs r3, r0, 0x1\n\ - adds r4, 0xE\n\ -_08134934:\n\ - adds r1, 0x1\n\ - cmp r1, r3\n\ - bge _08134942\n\ - adds r0, r1, r4\n\ - ldrb r0, [r0]\n\ - cmp r0, r2\n\ - bne _08134934\n\ -_08134942:\n\ - mov r3, r8\n\ - ldrh r0, [r3]\n\ - subs r0, 0x1\n\ - ldr r4, _08134958 @ =gSaveBlock2\n\ - cmp r1, r0\n\ - bne _081348F2\n\ - b _081349B6\n\ - .align 2, 0\n\ -_08134950: .4byte 0x0000056a\n\ -_08134954: .4byte 0x0000055c\n\ -_08134958: .4byte gSaveBlock2\n\ -_0813495C:\n\ - movs r2, 0xAB\n\ - lsls r2, 3\n\ - adds r0, r5, r2\n\ - adds r6, r7, r0\n\ - ldr r3, _081349EC @ =0x0000056a\n\ - adds r3, r5\n\ - mov r8, r3\n\ - adds r5, r6, 0\n\ -_0813496C:\n\ - bl Random\n\ - movs r1, 0xFF\n\ - ands r1, r0\n\ - lsls r0, r1, 4\n\ - subs r0, r1\n\ - lsls r0, 1\n\ - asrs r0, 8\n\ - adds r0, 0x46\n\ - lsls r0, 16\n\ - lsrs r2, r0, 16\n\ - movs r1, 0\n\ - ldrh r0, [r6]\n\ - subs r0, 0x1\n\ - cmp r1, r0\n\ - bge _081349AC\n\ - mov r3, r8\n\ - ldrb r0, [r3]\n\ - ldr r4, _081349F0 @ =gSaveBlock2\n\ - cmp r0, r2\n\ - beq _081349AC\n\ - ldrh r0, [r5]\n\ - subs r3, r0, 0x1\n\ - ldr r0, _081349EC @ =0x0000056a\n\ - adds r4, r0\n\ -_0813499E:\n\ - adds r1, 0x1\n\ - cmp r1, r3\n\ - bge _081349AC\n\ - adds r0, r1, r4\n\ - ldrb r0, [r0]\n\ - cmp r0, r2\n\ - bne _0813499E\n\ -_081349AC:\n\ - ldrh r0, [r6]\n\ - subs r0, 0x1\n\ - ldr r4, _081349F0 @ =gSaveBlock2\n\ - cmp r1, r0\n\ - bne _0813496C\n\ -_081349B6:\n\ - ldr r1, _081349F4 @ =0x00000564\n\ - adds r0, r4, r1\n\ - strb r2, [r0]\n\ - ldr r2, _081349F4 @ =0x00000564\n\ - adds r5, r4, r2\n\ - ldrb r0, [r5]\n\ - bl SetBattleTowerTrainerGfxId\n\ - movs r3, 0xAB\n\ - lsls r3, 3\n\ - adds r0, r4, r3\n\ - adds r1, r7, r0\n\ - ldrh r0, [r1]\n\ - cmp r0, 0x6\n\ - bhi _081349DE\n\ - adds r0, r4, r0\n\ - ldr r1, _081349F8 @ =0x00000569\n\ - adds r0, r1\n\ - ldrb r1, [r5]\n\ -_081349DC:\n\ - strb r1, [r0]\n\ -_081349DE:\n\ - pop {r3-r5}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - mov r10, r5\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_081349EC: .4byte 0x0000056a\n\ -_081349F0: .4byte gSaveBlock2\n\ -_081349F4: .4byte 0x00000564\n\ -_081349F8: .4byte 0x00000569\n\ -.syntax divided\n"); -} - -void SetBattleTowerTrainerGfxId(u8 trainerIndex) -{ - u32 i; - u8 trainerClass; - - if (trainerIndex < BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID) - { - trainerClass = gBattleTowerTrainers[trainerIndex].trainerClass; - } - else if (trainerIndex < BATTLE_TOWER_EREADER_TRAINER_ID) - { - trainerClass = gSaveBlock2.battleTower.records[trainerIndex - BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID].trainerClass; - } - else - { - trainerClass = gSaveBlock2.battleTower.ereaderTrainer.trainerClass; - } - - for (i = 0; i < 30 && sMaleTrainerClasses[i] != trainerClass; i++); - if (i != 30) - { - u8 trainerObjectGfxId = sMaleTrainerGfxIds[i]; - VarSet(0x4010, trainerObjectGfxId); - return; - } - - for (i = 0; i < 20 && sFemaleTrainerClasses[i] != trainerClass; i++); - if (i != 20) - { - u8 trainerObjectGfxId = sFemaleTrainerGfxIds[i]; - VarSet(0x4010, trainerObjectGfxId); - return; - } - - VarSet(0x4010, MAP_OBJ_GFX_BOY_1); -} - -void SetEReaderTrainerGfxId() -{ - SetBattleTowerTrainerGfxId(BATTLE_TOWER_EREADER_TRAINER_ID); -} - -// void sub_8134AC0(struct BattleTowerRecord *record) -// { -// u16 var1[6]; -// u16 var2[6]; -// s32 i, j, k; -// s16 l = 0; - -// for (i = 0; i < 5; i++) -// { -// k = 0; -// for (j = 0; j < 4 && gSaveBlock2.battleTower.records[i].trainerId[j] == record->trainerId[j]; j++); -// if (j == 4) -// { -// for (; k < 7 && gSaveBlock2.battleTower.records[i].name[4] == record->name[4]; k++) -// { -// if (record->name[4] == 0xFF) -// { -// k = 7; -// break; -// } -// } -// } - -// if (k == 7) -// { -// break; -// } -// } - -// if (i < 5) -// { -// gSaveBlock2.battleTower.records[i] = *record; -// return; -// } - -// i = 0; -// while (i < 5) -// { -// if (gSaveBlock2.battleTower.records[i].winStreak == 0) -// { -// if (i > 4) -// { -// break; -// } - -// gSaveBlock2.battleTower.records[i] = *record; -// return; -// } - -// i++; -// } - -// var1[0] = gSaveBlock2.battleTower.records[0].winStreak; -// var2[0] = 0; -// l++; - -// for (i = 1; i < 5; i++) -// { -// j = 0; -// if (j < l) -// { -// for (; gSaveBlock2.battleTower.records[i].winStreak <= var1[j]; j++) -// { -// if (gSaveBlock2.battleTower.records[i].winStreak < var1[j]) -// { -// j = 0; -// l = 1; -// var1[0] = gSaveBlock2.battleTower.records[i].winStreak; -// var2[0] = i; -// break; -// } -// } -// } - -// if (j == l) -// { -// var1[l] = gSaveBlock2.battleTower.records[i].winStreak; -// var2[l] = i; -// l++; -// } -// } - -// gSaveBlock2.battleTower.records[var2[(Random() % l)]] = *record; -// } -__attribute__((naked)) -void sub_8134AC0(struct BattleTowerRecord *record) -{ - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r10\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5-r7}\n\ - sub sp, 0x1C\n\ - movs r7, 0\n\ - mov r8, r0\n\ - movs r5, 0\n\ - ldr r0, _08134B3C @ =gSaveBlock2\n\ - mov r12, r0\n\ - mov r1, r8\n\ - ldrb r1, [r1, 0xC]\n\ - str r1, [sp, 0x18]\n\ - movs r2, 0xAA\n\ - lsls r2, 1\n\ - add r2, r12\n\ - mov r10, r2\n\ - mov r9, r5\n\ -_08134AE6:\n\ - movs r6, 0\n\ - movs r3, 0\n\ - ldr r0, _08134B40 @ =gSaveBlock2 + 0x158\n\ - add r0, r9\n\ - ldrb r0, [r0]\n\ - ldr r1, [sp, 0x18]\n\ - cmp r0, r1\n\ - bne _08134B14\n\ - movs r0, 0xA4\n\ - muls r0, r5\n\ - ldr r1, _08134B40 @ =gSaveBlock2 + 0x158\n\ - adds r2, r0, r1\n\ - mov r4, r8\n\ - adds r4, 0xC\n\ -_08134B02:\n\ - adds r2, 0x1\n\ - adds r3, 0x1\n\ - cmp r3, 0x3\n\ - bgt _08134B14\n\ - adds r1, r4, r3\n\ - ldrb r0, [r2]\n\ - ldrb r1, [r1]\n\ - cmp r0, r1\n\ - beq _08134B02\n\ -_08134B14:\n\ - cmp r3, 0x4\n\ - bne _08134B54\n\ - movs r6, 0\n\ - mov r2, r10\n\ - ldrb r0, [r2]\n\ - mov r3, r8\n\ - ldrb r3, [r3, 0x8]\n\ - cmp r0, r3\n\ - bne _08134B54\n\ - adds r1, r0, 0\n\ - movs r0, 0xA4\n\ - muls r0, r5\n\ - adds r0, 0x4\n\ - ldr r3, _08134B44 @ =gSaveBlock2 + 0x150\n\ - adds r2, r0, r3\n\ -_08134B32:\n\ - cmp r1, 0xFF\n\ - bne _08134B48\n\ - movs r6, 0x7\n\ - b _08134B54\n\ - .align 2, 0\n\ -_08134B3C: .4byte gSaveBlock2\n\ -_08134B40: .4byte gSaveBlock2 + 0x158\n\ -_08134B44: .4byte gSaveBlock2 + 0x150\n\ -_08134B48:\n\ - adds r6, 0x1\n\ - cmp r6, 0x6\n\ - bgt _08134B54\n\ - ldrb r0, [r2]\n\ - cmp r0, r1\n\ - beq _08134B32\n\ -_08134B54:\n\ - cmp r6, 0x7\n\ - beq _08134B64\n\ - movs r0, 0xA4\n\ - add r10, r0\n\ - add r9, r0\n\ - adds r5, 0x1\n\ - cmp r5, 0x4\n\ - ble _08134AE6\n\ -\n\ -_08134B64:\n\ - cmp r5, 0x4\n\ - bgt _08134B76\n\ - movs r0, 0xA4\n\ - muls r0, r5\n\ - add r0, r12\n\ - movs r1, 0xA6\n\ - lsls r1, 1\n\ - adds r0, r1\n\ - b _08134B9E\n\ -_08134B76:\n\ - movs r5, 0\n\ - movs r1, 0xA7\n\ - lsls r1, 1\n\ - add r1, r12\n\ - b _08134B88\n\ -_08134B80:\n\ - adds r1, 0xA4\n\ - adds r5, 0x1\n\ - cmp r5, 0x4\n\ - bgt _08134BA8\n\ -_08134B88:\n\ - ldrh r0, [r1]\n\ - cmp r0, 0\n\ - bne _08134B80\n\ - cmp r5, 0x4\n\ - bgt _08134BA8\n\ - movs r0, 0xA4\n\ - muls r0, r5\n\ - add r0, r12\n\ - movs r2, 0xA6\n\ - lsls r2, 1\n\ - adds r0, r2\n\ -_08134B9E:\n\ - mov r1, r8\n\ - movs r2, 0xA4\n\ - bl memcpy\n\ - b _08134C5E\n\ -\n\ -_08134BA8:\n\ - mov r2, sp\n\ - movs r3, 0xA7\n\ - lsls r3, 1\n\ - mov r1, r12\n\ - adds r0, r1, r3\n\ - ldrh r0, [r0]\n\ - movs r1, 0\n\ - strh r0, [r2]\n\ - add r0, sp, 0xC\n\ - strh r1, [r0]\n\ - adds r7, 0x1\n\ - movs r5, 0x1\n\ - add r2, sp, 0xC @var2 = r2\n\ - mov r9, r2\n\ - mov r10, r3\n\ -_08134BC6:\n\ - movs r3, 0\n\ - adds r0, r5, 0x1\n\ - mov r12, r0\n\ - cmp r3, r7\n\ - bge _08134C0A @ j < l\n\ - movs r1, 0xA4\n\ - adds r0, r5, 0\n\ - muls r0, r1\n\ - ldr r2, _08134BFC @ =gSaveBlock2\n\ - adds r0, r2\n\ - mov r1, r10\n\ - adds r4, r0, r1\n\ - mov r6, sp\n\ -_08134BE0:\n\ - lsls r0, r3, 1\n\ - add r0, sp\n\ - ldrh r2, [r4]\n\ - adds r1, r2, 0\n\ - ldrh r0, [r0]\n\ - cmp r1, r0\n\ - bcs _08134C00\n\ - movs r3, 0\n\ - movs r7, 0x1\n\ - strh r2, [r6]\n\ - mov r2, r9\n\ - strh r5, [r2]\n\ - b _08134C0A\n\ - .align 2, 0\n\ -_08134BFC: .4byte gSaveBlock2\n\ -_08134C00:\n\ - cmp r1, r0\n\ - bhi _08134C0A\n\ - adds r3, 0x1\n\ - cmp r3, r7\n\ - blt _08134BE0\n\ -_08134C0A:\n\ - cmp r3, r7\n\ - bne _08134C2A\n\ - lsls r1, r7, 1\n\ - mov r3, sp\n\ - adds r2, r3, r1\n\ - movs r3, 0xA4\n\ - adds r0, r5, 0\n\ - muls r0, r3\n\ - ldr r3, _08134C70 @ =gSaveBlock2\n\ - adds r0, r3\n\ - add r0, r10\n\ - ldrh r0, [r0]\n\ - strh r0, [r2]\n\ - add r1, r9\n\ - strh r5, [r1]\n\ - adds r7, 0x1\n\ -_08134C2A:\n\ - mov r5, r12\n\ - cmp r5, 0x4\n\ - ble _08134BC6\n\ - bl Random\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - adds r1, r7, 0\n\ - bl __modsi3\n\ - adds r5, r0, 0\n\ - ldr r2, _08134C70 @ =gSaveBlock2\n\ - lsls r0, r5, 1\n\ - add r0, sp\n\ - adds r0, 0xC\n\ - ldrh r1, [r0]\n\ - movs r0, 0xA4\n\ - muls r0, r1\n\ - adds r0, r2\n\ - movs r1, 0xA6\n\ - lsls r1, 1\n\ - adds r0, r1\n\ - mov r1, r8\n\ - movs r2, 0xA4\n\ - bl memcpy\n\ -_08134C5E:\n\ - add sp, 0x1C\n\ - pop {r3-r5}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - mov r10, r5\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_08134C70: .4byte gSaveBlock2\n\ - .syntax divided\n"); -} - -u8 get_trainer_class_pic_index(void) -{ - if (gSaveBlock2.battleTower.battleTowerTrainerId == BATTLE_TOWER_EREADER_TRAINER_ID) - { - return gTrainerClassToPicIndex[gSaveBlock2.battleTower.ereaderTrainer.trainerClass]; - } - else if (gSaveBlock2.battleTower.battleTowerTrainerId < BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID) - { - return gTrainerClassToPicIndex[gBattleTowerTrainers[gSaveBlock2.battleTower.battleTowerTrainerId].trainerClass]; - } - else - { - return gTrainerClassToPicIndex[gSaveBlock2.battleTower.records[gSaveBlock2.battleTower.battleTowerTrainerId - BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID].trainerClass]; - } -} - -u8 get_trainer_class_name_index(void) -{ - if (gSaveBlock2.battleTower.battleTowerTrainerId == BATTLE_TOWER_EREADER_TRAINER_ID) - { - return gTrainerClassToNameIndex[gSaveBlock2.battleTower.ereaderTrainer.trainerClass]; - } - else if (gSaveBlock2.battleTower.battleTowerTrainerId >= BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID) - { - return gTrainerClassToNameIndex[gSaveBlock2.battleTower.records[gSaveBlock2.battleTower.battleTowerTrainerId - BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID].trainerClass]; - } - else - { - return gTrainerClassToNameIndex[gBattleTowerTrainers[gSaveBlock2.battleTower.battleTowerTrainerId].trainerClass]; - } -} - -void get_trainer_name(u8* dest) -{ - s32 i; - - if (gSaveBlock2.battleTower.battleTowerTrainerId == BATTLE_TOWER_EREADER_TRAINER_ID) - { - for (i = 0; i < 7; i++) - { - dest[i] = gSaveBlock2.battleTower.ereaderTrainer.name[i]; - } - } - else if (gSaveBlock2.battleTower.battleTowerTrainerId < BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID) - { - for (i = 0; i < 7; i++) - { - dest[i] = gBattleTowerTrainers[gSaveBlock2.battleTower.battleTowerTrainerId].name[i]; - } - } - else - { - for (i = 0; i < 7; i++) - { - dest[i] = gSaveBlock2.battleTower.records[gSaveBlock2.battleTower.battleTowerTrainerId - BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID].name[i]; - } - } - - dest[i] = 0xFF; -} - -void FillBattleTowerTrainerParty(void) -{ - s32 partyIndex, i; - u16 chosenMonIndices[3]; - u8 friendship; - u8 level; - u8 fixedIV; - u8 battleMonsOffset; - u8 monPoolSize; - u8 teamFlags; - const struct BattleTowerPokemon *battleTowerMons; - - battleMonsOffset = 0; - monPoolSize = 60; - friendship = 255; - - ZeroEnemyPartyMons(); - - // Different trainers have access to different sets of pokemon to use in battle. - // The pokemon later in gBattleTowerLevel100Mons or gBattleTowerLevel50Mons are - // stronger. Additionally, the later trainers' pokemon are granted higher IVs. - if (gSaveBlock2.battleTower.battleTowerTrainerId < 20) - { - fixedIV = 6; - } - else if (gSaveBlock2.battleTower.battleTowerTrainerId < 30) - { - fixedIV = 9; - battleMonsOffset = 30; - } - else if (gSaveBlock2.battleTower.battleTowerTrainerId < 40) - { - fixedIV = 12; - battleMonsOffset = 60; - } - else if (gSaveBlock2.battleTower.battleTowerTrainerId < 50) - { - fixedIV = 15; - battleMonsOffset = 90; - } - else if (gSaveBlock2.battleTower.battleTowerTrainerId < 60) - { - fixedIV = 18; - battleMonsOffset = 120; - } - else if (gSaveBlock2.battleTower.battleTowerTrainerId < 70) - { - fixedIV = 21; - battleMonsOffset = 150; - } - else if (gSaveBlock2.battleTower.battleTowerTrainerId < 80) - { - fixedIV = 31; - battleMonsOffset = 180; - } - else if (gSaveBlock2.battleTower.battleTowerTrainerId < BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID) - { - fixedIV = 31; - battleMonsOffset = 200; - monPoolSize = 100; - } - else if (gSaveBlock2.battleTower.battleTowerTrainerId == BATTLE_TOWER_EREADER_TRAINER_ID) - { - // Load E-Reader trainer's party. - for (partyIndex = 0; partyIndex < 3; partyIndex++) - { - sub_803ADE8(&gEnemyParty[partyIndex], &gSaveBlock2.battleTower.ereaderTrainer.party[partyIndex]); - } - - return; - } - else - { - // Load a battle tower record's party. (From record mixing) - for (partyIndex = 0; partyIndex < 3; partyIndex++) - { - sub_803ADE8( - &gEnemyParty[partyIndex], - &gSaveBlock2.battleTower.records[gSaveBlock2.battleTower.battleTowerTrainerId - BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID].party[partyIndex]); - } - - return; - } - - // Use the appropriate list of pokemon and level depending on the - // current challenge type. (level 50 or level 100 challenge) - if (gSaveBlock2.battleTower.battleTowerLevelType != 0) - { - battleTowerMons = gBattleTowerLevel100Mons; - level = 100; - } - else - { - battleTowerMons = gBattleTowerLevel50Mons; - level = 50; - } - - teamFlags = gBattleTowerTrainers[gSaveBlock2.battleTower.battleTowerTrainerId].teamFlags; - - // Attempt to fill the trainer's party with random Pokemon until 3 have been - // successfully chosen. The trainer's party may not have duplicate pokemon species - // or duplicate held items. Each pokemon must have all of the trainer's team flags - // set, as well. If any of those conditions are not met, then the loop starts over - // and another pokemon is chosen at random. - partyIndex = 0; - while (partyIndex != 3) - { - // Pick a random pokemon index based on the number of pokemon available to choose from - // and the starting offset in the battle tower pokemon array. - s32 battleMonIndex = ((Random() & 0xFF) * monPoolSize) / 256 + battleMonsOffset; - - // Ensure the chosen pokemon has compatible team flags with the trainer. - if (teamFlags == 0 || (battleTowerMons[battleMonIndex].teamFlags & teamFlags) == teamFlags) - { - // Ensure this pokemon species isn't a duplicate. - for (i = 0; i < partyIndex; i++) - { - if (GetMonData(&gEnemyParty[i], MON_DATA_SPECIES, NULL) == battleTowerMons[battleMonIndex].species) - break; - } - - if (i != partyIndex) - continue; - - // Ensure this pokemon's held item isn't a duplicate. - for (i = 0; i < partyIndex; i++) - { - if (GetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, NULL) != 0 - && GetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, NULL) == sBattleTowerHeldItems[battleTowerMons[battleMonIndex].heldItem]) - { - break; - } - } - - if (i != partyIndex) - continue; - - // Ensure this exact pokemon index isn't a duplicate. This check doesn't seem necessary - // because the species and held items were already checked directly above. Perhaps this - // is leftover code before the logic for duplicate species and held items was added. - for (i = 0; i < partyIndex && chosenMonIndices[i] != battleMonIndex; i++); - - if (i != partyIndex) - continue; - - chosenMonIndices[partyIndex] = battleMonIndex; - - // Place the chosen pokemon into the trainer's party. - CreateMonWithEVSpread( - &gEnemyParty[partyIndex], - battleTowerMons[battleMonIndex].species, - level, - fixedIV, - battleTowerMons[battleMonIndex].evSpread); - - // Give the chosen pokemon its specified moves. - for (i = 0; i < 4; i++) - { - SetMonMoveSlot(&gEnemyParty[partyIndex], battleTowerMons[battleMonIndex].moves[i], i); - if (battleTowerMons[battleMonIndex].moves[i] == MOVE_FRUSTRATION) - { - // MOVE_FRUSTRATION is more powerful the lower the pokemon's friendship is. - friendship = 0; - } - } - - SetMonData(&gEnemyParty[partyIndex], MON_DATA_FRIENDSHIP, &friendship); - SetMonData(&gEnemyParty[partyIndex], MON_DATA_HELD_ITEM, (u8 *)&sBattleTowerHeldItems[battleTowerMons[battleMonIndex].heldItem]); - - // The pokemon was successfully added to the trainer's party, so it's safe to move on to - // the next party slot. - partyIndex++; - } - } - -} - -u32 CountBattleTowerBanlistCaught() -{ - s32 i; - u32 numCaught = 0; - - for (i = 0; gBattleTowerBannedSpecies[i] != 0xFFFF; i++) - { - if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(gBattleTowerBannedSpecies[i]), FLAG_GET_CAUGHT)) - { - numCaught++; - } - } - - return numCaught; -} - -u8 AppendBattleTowerBannedSpeciesName(u16 species, u8 curIndexToAppend, s32 numToAppend) -{ - if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(species), FLAG_GET_CAUGHT)) - { - curIndexToAppend++; - - switch (curIndexToAppend - 1) - { - case 0: - case 2: - case 4: - case 6: - case 8: - case 10: - if (numToAppend == curIndexToAppend) - { - StringAppend(gStringVar1, gUnknown_08400E23); - } - else if (numToAppend > curIndexToAppend) - { - StringAppend(gStringVar1, gUnknown_08400E29); - } - break; - case 1: - if (curIndexToAppend == numToAppend) - { - StringAppend(gStringVar1, gUnknown_08400E23); - } - else - { - StringAppend(gStringVar1, gUnknown_08400E29); - } - - StringAppend(gStringVar1, gUnknown_08400E30); - break; - case 3: - case 5: - case 7: - case 9: - default: - if (curIndexToAppend == numToAppend) - { - StringAppend(gStringVar1, gUnknown_08400E23); - } - else - { - StringAppend(gStringVar1, gUnknown_08400E29); - } - - StringAppend(gStringVar1, gUnknown_08400E2E); - break; - } - - StringAppend(gStringVar1, gSpeciesNames[species]); - } - - return curIndexToAppend; -} - -void CheckMonBattleTowerBanlist(u16 species, u16 heldItem, u16 hp, u8 battleTowerLevelType, u8 monLevel, u16 *validPartySpecies, u16 *validPartyHeldItems, u8 *numValid) -{ - s32 i; - u32 counter = 0; - - if (species == SPECIES_EGG || species == SPECIES_NONE) - return; - - while (1) - { - if (gBattleTowerBannedSpecies[counter] == 0xFFFF) - goto EXIT2; // Couldn't get the code to match without this GOTO - - if (gBattleTowerBannedSpecies[counter] == species) - break; - - counter++; - } - - if (gBattleTowerBannedSpecies[counter] != 0xFFFF) - return; - - EXIT2: - if (battleTowerLevelType == 0 && monLevel > 50) - return; - - for (i = 0; i < *numValid && validPartySpecies[i] != species ; i++); - if (i != *numValid) - return; - - if (heldItem != 0) - { - for (i = 0; i < *numValid && validPartyHeldItems[i] != heldItem ; i++); - if (i != *numValid) - return; - } - - validPartySpecies[*numValid] = species; - validPartyHeldItems[*numValid] = heldItem; - *numValid = *numValid + 1; -} - -void CheckPartyBattleTowerBanlist(void) -{ - s32 i; - u16 species2; - u16 heldItem; - u8 level; - u16 hp; - u32 numBanlistCaught; - u16 validPartySpecies[6]; - u16 validPartyHeldItems[6]; - u8 counter; - - counter = 0; - - for (i = 0; i < PARTY_SIZE; i++) - { - species2 = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2); - heldItem = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM); - level = GetMonData(&gPlayerParty[i], MON_DATA_LEVEL); - hp = GetMonData(&gPlayerParty[i], MON_DATA_HP); - - CheckMonBattleTowerBanlist(species2, heldItem, hp, gScriptResult, level, validPartySpecies, validPartyHeldItems, &counter); - } - - if (counter < 3) - { - gStringVar1[0] = 0xFF; - gSpecialVar_0x8004 = 1; - counter = 0; - - numBanlistCaught = CountBattleTowerBanlistCaught(); - - for (i = 0; gBattleTowerBannedSpecies[i] != 0xFFFF; i++) - { - counter = AppendBattleTowerBannedSpeciesName(gBattleTowerBannedSpecies[i], counter, numBanlistCaught); - } - - if (counter == 0) - { - StringAppend(gStringVar1, gUnknown_08400E2C); - StringAppend(gStringVar1, gUnknown_08400E32); - return; - } - - if (1 & counter) - StringAppend(gStringVar1, gUnknown_08400E2E); - else - StringAppend(gStringVar1, gUnknown_08400E2C); - - StringAppend(gStringVar1, gUnknown_08400E36); - } - else - { - gSpecialVar_0x8004 = 0; - gSaveBlock2.battleTower.battleTowerLevelType = gScriptResult; - } -} - -void PrintBattleTowerTrainerMessage(u16 *easyChat) -{ - sub_80EB544(gStringVar4, easyChat, 2, 3); -} - -void PrintBattleTowerTrainerGreeting(void) -{ - if (gSaveBlock2.battleTower.battleTowerTrainerId == BATTLE_TOWER_EREADER_TRAINER_ID) - { - PrintBattleTowerTrainerMessage(gSaveBlock2.battleTower.ereaderTrainer.greeting.easyChat); - } - else if (gSaveBlock2.battleTower.battleTowerTrainerId < BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID) - { - PrintBattleTowerTrainerMessage((u16 *)gBattleTowerTrainers[gSaveBlock2.battleTower.battleTowerTrainerId].greeting.easyChat); - } - else - { - PrintBattleTowerTrainerMessage(gSaveBlock2.battleTower.records[gSaveBlock2.battleTower.battleTowerTrainerId - BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID].greeting.easyChat); - } -} - -void sub_81354CC(void) -{ - s32 i; - u16 heldItem; - - switch (gSpecialVar_0x8004) - { - case 0: - break; - case 1: - for (i = 0; i < PARTY_SIZE; i++) - { - heldItem = GetMonData(&gSaveBlock1.playerParty[i], MON_DATA_HELD_ITEM); - SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, (u8 *)&heldItem); - } - break; - case 2: - PrintEReaderTrainerFarewellMessage(); - break; - } - - SetMainCallback2(c2_exit_to_overworld_1_continue_scripts_restart_music); -} - -void sub_8135534(u8 taskId) -{ - if (IsBattleTransitionDone() == TRUE) - { - gMain.savedCallback = sub_81354CC; - SetMainCallback2(sub_800E7C4); - DestroyTask(taskId); - } -} - -void sub_813556C(void) -{ - s32 i; - u16 heldItem; - u8 transition; - - switch (gSpecialVar_0x8004) - { - case 0: - gBattleTypeFlags = (BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_TRAINER); - gTrainerBattleOpponent = 0; - - FillBattleTowerTrainerParty(); - - CreateTask(sub_8135534, 1); - current_map_music_set__default_for_battle(0); - transition = BattleSetup_GetBattleTowerBattleTransition(); - BattleTransition_StartOnField(transition); - break; - case 1: - for (i = 0; i < PARTY_SIZE; i++) - { - heldItem = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM); - SetMonData(&gSaveBlock1.playerParty[i], MON_DATA_HELD_ITEM, (u8 *)&heldItem); - } - - CreateTask(sub_8135534, 1); - current_map_music_set__default_for_battle(0); - transition = BattleSetup_GetBattleTowerBattleTransition(); - BattleTransition_StartOnField(transition); - break; - case 2: - ZeroEnemyPartyMons(); - - for (i = 0; i < 3; i++) - { - sub_803ADE8(&gEnemyParty[i], &gSaveBlock2.battleTower.ereaderTrainer.party[i]); - } - - gBattleTypeFlags = (BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_TRAINER); - gTrainerBattleOpponent = 0; - - CreateTask(sub_8135534, 1); - current_map_music_set__default_for_battle(0); - transition = BattleSetup_GetBattleTowerBattleTransition(); - BattleTransition_StartOnField(transition); - break; - } -} - -void sub_8135668(void) -{ - s32 i; - u8 battleTowerLevelType = gSaveBlock2.battleTower.battleTowerLevelType; - - switch (gSpecialVar_0x8004) - { - case 0: - ewram160FB = gSaveBlock2.battleTower.var_4AE[battleTowerLevelType]; - gSaveBlock2.battleTower.var_4AE[battleTowerLevelType] = gSpecialVar_0x8005; - break; - case 1: - gSaveBlock2.battleTower.battleTowerLevelType = gSpecialVar_0x8005; - break; - case 2: - gSaveBlock2.battleTower.curChallengeBattleNum[battleTowerLevelType] = gSpecialVar_0x8005; - break; - case 3: - gSaveBlock2.battleTower.curStreakChallengesNum[battleTowerLevelType] = gSpecialVar_0x8005; - break; - case 4: - gSaveBlock2.battleTower.battleTowerTrainerId = gSpecialVar_0x8005; - break; - case 5: - for (i = 0; i < 3; i++) - { - gSaveBlock2.battleTower.selectedPartyMons[i] = gSelectedOrderFromParty[i]; - } - break; - case 6: - if (gSaveBlock2.battleTower.battleTowerTrainerId == BATTLE_TOWER_EREADER_TRAINER_ID) - { - ClearEReaderTrainer(&gSaveBlock2.battleTower.ereaderTrainer); - } - - if (gSaveBlock2.battleTower.totalBattleTowerWins < 9999) - { - gSaveBlock2.battleTower.totalBattleTowerWins++; - } - - gSaveBlock2.battleTower.curChallengeBattleNum[battleTowerLevelType]++; - sub_8135A3C(); - gScriptResult = gSaveBlock2.battleTower.curChallengeBattleNum[battleTowerLevelType]; - - gStringVar1[0] = gSaveBlock2.battleTower.curChallengeBattleNum[battleTowerLevelType] + 0xA1; - gStringVar1[1] = 0xFF; - break; - case 7: - if (gSaveBlock2.battleTower.curStreakChallengesNum[battleTowerLevelType] < 1430) - { - gSaveBlock2.battleTower.curStreakChallengesNum[battleTowerLevelType]++; - } - - sub_8135A3C(); - gScriptResult = gSaveBlock2.battleTower.curStreakChallengesNum[battleTowerLevelType]; - break; - case 8: - gSaveBlock2.battleTower.unk_554 = gSpecialVar_0x8005; - break; - case 9: - break; - case 10: - SetGameStat(GAME_STAT_BATTLE_TOWER_BEST_STREAK, gSaveBlock2.battleTower.bestBattleTowerWinStreak); - break; - case 11: - if (gSaveBlock2.battleTower.var_4AE[battleTowerLevelType] != 3) - { - ResetBattleTowerStreak(battleTowerLevelType); - } - break; - case 12: - gSaveBlock2.battleTower.var_4AE[battleTowerLevelType] = ewram160FB; - break; - case 13: - gSaveBlock2.battleTower.currentWinStreaks[battleTowerLevelType] = GetCurrentBattleTowerWinStreak(battleTowerLevelType); - break; - case 14: - gSaveBlock2.battleTower.lastStreakLevelType = gSaveBlock2.battleTower.battleTowerLevelType; - break; - } -} - -void sub_81358A4(void) -{ - u8 battleTowerLevelType = gSaveBlock2.battleTower.battleTowerLevelType; - - switch (gSpecialVar_0x8004) - { - case 0: - gScriptResult = gSaveBlock2.battleTower.var_4AE[battleTowerLevelType]; - break; - case 1: - gScriptResult = gSaveBlock2.battleTower.battleTowerLevelType; - break; - case 2: - gScriptResult = gSaveBlock2.battleTower.curChallengeBattleNum[battleTowerLevelType]; - break; - case 3: - gScriptResult = gSaveBlock2.battleTower.curStreakChallengesNum[battleTowerLevelType]; - break; - case 4: - gScriptResult = gSaveBlock2.battleTower.battleTowerTrainerId; - break; - case 5: - case 6: - case 7: - break; - case 8: - gScriptResult = gSaveBlock2.battleTower.unk_554; - break; - case 9: - gScriptResult = GetCurrentBattleTowerWinStreak(battleTowerLevelType); - break; - case 10: - SetGameStat(GAME_STAT_BATTLE_TOWER_BEST_STREAK, gSaveBlock2.battleTower.bestBattleTowerWinStreak); - break; - case 11: - ResetBattleTowerStreak(battleTowerLevelType); - break; - case 12: - gSaveBlock2.battleTower.var_4AE[battleTowerLevelType] = ewram160FB; - break; - case 13: - gSaveBlock2.battleTower.currentWinStreaks[battleTowerLevelType] = GetCurrentBattleTowerWinStreak(battleTowerLevelType); - break; - case 14: - gSaveBlock2.battleTower.lastStreakLevelType = gSaveBlock2.battleTower.battleTowerLevelType; - break; - } -} - -void sub_8135A14(void) -{ - s32 i; - - for (i = 0; i < 3; i++) - { - gSelectedOrderFromParty[i] = gSaveBlock2.battleTower.selectedPartyMons[i]; - } - - ReducePlayerPartyToThree(); -} - -#ifdef NONMATCHING -void sub_8135A3C(void) -{ - u8 battleTowerLevelType = gSaveBlock2.battleTower.battleTowerLevelType; - u16 winStreak = GetCurrentBattleTowerWinStreak(battleTowerLevelType); - - if (gSaveBlock2.battleTower.recordWinStreaks[battleTowerLevelType] < winStreak) - { - gSaveBlock2.battleTower.recordWinStreaks[battleTowerLevelType] = winStreak; - } - - if (gSaveBlock2.battleTower.recordWinStreaks[0] > gSaveBlock2.battleTower.recordWinStreaks[1]) - { - u16 streak = gSaveBlock2.battleTower.recordWinStreaks[0]; - SetGameStat(GAME_STAT_BATTLE_TOWER_BEST_STREAK, streak); - if (streak > 9999) - { - gSaveBlock2.battleTower.bestBattleTowerWinStreak = 9999; - } - else - { - gSaveBlock2.battleTower.bestBattleTowerWinStreak = streak; - } - } - else - { - u16 streak = gSaveBlock2.battleTower.recordWinStreaks[1]; - SetGameStat(GAME_STAT_BATTLE_TOWER_BEST_STREAK, streak); - if (streak > 9999) - { - gSaveBlock2.battleTower.bestBattleTowerWinStreak = 9999; - } - else - { - gSaveBlock2.battleTower.bestBattleTowerWinStreak = streak; - } - } -} -#else -__attribute__((naked)) -void sub_8135A3C(void) -{ - asm(".syntax unified\n\ - push {r4-r6,lr}\n\ - ldr r6, _08135A84 @ =gSaveBlock2\n\ - ldr r1, _08135A88 @ =0x00000554\n\ - adds r0, r6, r1\n\ - ldrb r4, [r0]\n\ - lsls r4, 31\n\ - lsrs r4, 31\n\ - adds r0, r4, 0\n\ - bl GetCurrentBattleTowerWinStreak\n\ - lsls r0, 16\n\ - lsrs r5, r0, 16\n\ - lsls r4, 1\n\ - movs r3, 0xAC\n\ - lsls r3, 3\n\ - adds r2, r6, r3\n\ - adds r4, r2\n\ - ldrh r0, [r4]\n\ - cmp r0, r5\n\ - bcs _08135A66\n\ - strh r5, [r4]\n\ -_08135A66:\n\ - ldr r0, _08135A8C @ =0x00000562\n\ - adds r1, r6, r0\n\ - ldrh r0, [r2]\n\ - ldrh r3, [r1]\n\ - cmp r0, r3\n\ - bls _08135A94\n\ - adds r5, r0, 0\n\ - movs r0, 0x20\n\ - adds r1, r5, 0\n\ - bl SetGameStat\n\ - ldr r1, _08135A90 @ =0x0000270f\n\ - cmp r5, r1\n\ - bhi _08135AA4\n\ - b _08135AB4\n\ - .align 2, 0\n\ -_08135A84: .4byte gSaveBlock2\n\ -_08135A88: .4byte 0x00000554\n\ -_08135A8C: .4byte 0x00000562\n\ -_08135A90: .4byte 0x0000270f\n\ -_08135A94:\n\ - ldrh r5, [r1]\n\ - movs r0, 0x20\n\ - adds r1, r5, 0\n\ - bl SetGameStat\n\ - ldr r1, _08135AAC @ =0x0000270f\n\ - cmp r5, r1\n\ - bls _08135AB4\n\ -_08135AA4:\n\ - ldr r2, _08135AB0 @ =0x00000572\n\ - adds r0, r6, r2\n\ - strh r1, [r0]\n\ - b _08135ABA\n\ - .align 2, 0\n\ -_08135AAC: .4byte 0x0000270f\n\ -_08135AB0: .4byte 0x00000572\n\ -_08135AB4:\n\ - ldr r3, _08135AC0 @ =0x00000572\n\ - adds r0, r6, r3\n\ - strh r5, [r0]\n\ -_08135ABA:\n\ - pop {r4-r6}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_08135AC0: .4byte 0x00000572\n\ - .syntax divided\n"); -} -#endif // NONMATCHING - -void sub_8135AC4(void) -{ - s32 i; - u8 trainerClass; - struct BattleTowerRecord *playerRecord = &gSaveBlock2.battleTower.playerRecord; - u8 battleTowerLevelType = gSaveBlock2.battleTower.battleTowerLevelType; - - if (gSaveBlock2.playerGender != MALE) - { - trainerClass = sFemaleTrainerClasses[(gSaveBlock2.playerTrainerId[0] + gSaveBlock2.playerTrainerId[1] - + gSaveBlock2.playerTrainerId[2] + gSaveBlock2.playerTrainerId[3]) % 20u]; - } - else - { - trainerClass = sMaleTrainerClasses[(gSaveBlock2.playerTrainerId[0] + gSaveBlock2.playerTrainerId[1] - + gSaveBlock2.playerTrainerId[2] + gSaveBlock2.playerTrainerId[3]) % 30u]; - } - - playerRecord->battleTowerLevelType = battleTowerLevelType; - playerRecord->trainerClass = trainerClass; - - copy_word_to_mem(playerRecord->trainerId, gSaveBlock2.playerTrainerId); - StringCopy8(playerRecord->name, gSaveBlock2.playerName); - - playerRecord->winStreak = GetCurrentBattleTowerWinStreak(battleTowerLevelType); - - for (i = 0; i < 6; i++) - { - playerRecord->greeting.easyChat[i] = gSaveBlock1.easyChats.unk2B28[i]; - } - - for (i = 0; i < 3; i++) - { - sub_803AF78(&gUnknown_030042FC[gSaveBlock2.battleTower.selectedPartyMons[i]], &playerRecord->party[i]); - } - - SetBattleTowerRecordChecksum(&gSaveBlock2.battleTower.playerRecord); - sub_8135A3C(); -} - -void sub_8135BA0(void) -{ - u8 battleTowerLevelType = gSaveBlock2.battleTower.battleTowerLevelType; - - if (gSpecialVar_0x8004 == 3 || gSpecialVar_0x8004 == 0) - { - if (gSaveBlock2.battleTower.curStreakChallengesNum[battleTowerLevelType] > 1 - || gSaveBlock2.battleTower.curChallengeBattleNum[battleTowerLevelType] > 1) - { - sub_8135AC4(); - } - } - - sub_8135CFC(); - - gSaveBlock2.battleTower.battleOutcome = gBattleOutcome; - - if (gSpecialVar_0x8004 != 3) - { - gSaveBlock2.battleTower.var_4AE[battleTowerLevelType] = gSpecialVar_0x8004; - } - - VarSet(VAR_0x4000, 0); - gSaveBlock2.battleTower.unk_554 = 1; - TrySavingData(EREADER_SAVE); -} - -void BattleTower_SoftReset(void) -{ - DoSoftReset(); -} - -void ValidateBattleTowerRecordChecksums(void) -{ - u32 i; - s32 recordIndex; - struct BattleTowerRecord *record; - u32 checksum; - - checksum = 0; - for (i = 0; i < (sizeof(struct BattleTowerRecord) / sizeof(u32)) - 1; i++) - { - checksum += ((u32 *)&gSaveBlock2.battleTower.playerRecord)[i]; - } - - if (gSaveBlock2.battleTower.playerRecord.checksum != checksum) - { - ClearBattleTowerRecord(&gSaveBlock2.battleTower.playerRecord); - } - - for (recordIndex = 0; recordIndex < 5; recordIndex++) - { - record = &gSaveBlock2.battleTower.records[recordIndex]; - checksum = 0; - for (i = 0; i < (sizeof(struct BattleTowerRecord) / sizeof(u32)) - 1; i++) - { - checksum += ((u32 *)record)[i]; - } - - if (gSaveBlock2.battleTower.records[recordIndex].checksum != checksum) - { - ClearBattleTowerRecord(&gSaveBlock2.battleTower.records[recordIndex]); - } - } -} - -void SetBattleTowerRecordChecksum(struct BattleTowerRecord *record) -{ - u32 i; - - record->checksum = 0; - for (i = 0; i < (sizeof(struct BattleTowerRecord) / sizeof(u32)) - 1; i++) - { - record->checksum += ((u32 *)record)[i]; - } -} - -void ClearBattleTowerRecord(struct BattleTowerRecord *record) -{ - u32 i; - - for (i = 0; i < sizeof(struct BattleTowerRecord) / sizeof(u32); i++) - { - ((u32 *)record)[i] = 0; - } -} - -void sub_8135CFC(void) -{ - s32 i; - - get_trainer_name(gSaveBlock2.battleTower.defeatedByTrainerName); - gSaveBlock2.battleTower.defeatedBySpecies = gBattleMons[1].species; - gSaveBlock2.battleTower.firstMonSpecies = gBattleMons[0].species; - - for (i = 0; i < POKEMON_NAME_LENGTH; i++) - { - gSaveBlock2.battleTower.firstMonNickname[i] = gBattleMons[0].nickname[i]; - } -} - -u16 GetCurrentBattleTowerWinStreak(u8 battleTowerLevelType) -{ - u16 winStreak = ((gSaveBlock2.battleTower.curStreakChallengesNum[battleTowerLevelType] - 1) * 7 - 1) - + gSaveBlock2.battleTower.curChallengeBattleNum[battleTowerLevelType]; - - if (winStreak > 9999) - { - return 9999; - } - - return winStreak; -} - -#ifdef NONMATCHING -void DetermineBattleTowerPrize(void) -{ - u16 prizeItem; - struct SaveBlock2 *saveBlock = &gSaveBlock2; - u8 battleTowerLevelType = saveBlock->battleTower.battleTowerLevelType; - - if (saveBlock->battleTower.curStreakChallengesNum[battleTowerLevelType] - 1 > 5) - { - prizeItem = sLongStreakPrizes[Random() % ARRAY_COUNT(sLongStreakPrizes)]; - } - else - { - prizeItem = sShortStreakPrizes[Random() % ARRAY_COUNT(sShortStreakPrizes)]; - } - - saveBlock->battleTower.prizeItem = prizeItem; -} -#else -__attribute__((naked)) -void DetermineBattleTowerPrize(void) -{ - asm(".syntax unified\n\ - push {r4,r5,lr}\n\ - ldr r5, _08135DB0 @ =gSaveBlock2\n\ - ldr r1, _08135DB4 @ =0x00000554\n\ - adds r0, r5, r1\n\ - ldrb r0, [r0]\n\ - lsls r0, 31\n\ - lsrs r0, 31\n\ - lsls r0, 1\n\ - ldr r2, _08135DB8 @ =0x0000055c\n\ - adds r1, r5, r2\n\ - adds r0, r1\n\ - ldrh r0, [r0]\n\ - subs r0, 0x1\n\ - cmp r0, 0x5\n\ - ble _08135DC0\n\ - bl Random\n\ - ldr r4, _08135DBC @ =sLongStreakPrizes\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - movs r1, 0x9\n\ - b _08135DCC\n\ - .align 2, 0\n\ -_08135DB0: .4byte gSaveBlock2\n\ -_08135DB4: .4byte 0x00000554\n\ -_08135DB8: .4byte 0x0000055c\n\ -_08135DBC: .4byte sLongStreakPrizes\n\ -_08135DC0:\n\ - bl Random\n\ - ldr r4, _08135DE8 @ =sShortStreakPrizes\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - movs r1, 0x6\n\ -_08135DCC:\n\ - bl __umodsi3\n\ - lsls r0, 16\n\ - lsrs r0, 15\n\ - adds r0, r4\n\ - ldrh r1, [r0]\n\ - movs r2, 0xAD\n\ - lsls r2, 3\n\ - adds r0, r5, r2\n\ - strh r1, [r0]\n\ - pop {r4,r5}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_08135DE8: .4byte sShortStreakPrizes\n\ - .syntax divided\n"); -} -#endif // NONMATCHING - -void GiveBattleTowerPrize(void) -{ - u8 battleTowerLevelType = gSaveBlock2.battleTower.battleTowerLevelType; - - if (AddBagItem(gSaveBlock2.battleTower.prizeItem, 1) == TRUE) - { - CopyItemName(gSaveBlock2.battleTower.prizeItem, gStringVar1); - gScriptResult = 1; - } - else - { - gScriptResult = 0; - gSaveBlock2.battleTower.var_4AE[battleTowerLevelType] = 6; - } -} - -void AwardBattleTowerRibbons() -{ - s32 i; - u32 partyIndex; - struct Pokemon *pokemon; - u8 ribbonType; - u8 battleTowerLevelType = gSaveBlock2.battleTower.battleTowerLevelType; - - ribbonType = MON_DATA_WINNING_RIBBON; - if (battleTowerLevelType != 0) - { - ribbonType = MON_DATA_VICTORY_RIBBON; - } - - gScriptResult = 0; - - if (GetCurrentBattleTowerWinStreak(battleTowerLevelType) > 55) - { - for (i = 0; i < 3; i++) - { - partyIndex = gSaveBlock2.battleTower.selectedPartyMons[i] - 1; - pokemon = &gPlayerParty[partyIndex]; - if (!GetMonData(pokemon, ribbonType)) - { - gScriptResult = 1; - SetMonData(pokemon, ribbonType, (u8 *)&gScriptResult); - } - } - } - - if (gScriptResult != 0) - { - IncrementGameStat(GAME_STAT_RECEIVED_RIBBONS); - } -} - -// This is a leftover debugging function that is used to populate the E-Reader -// trainer with the player's current data. -void Debug_FillEReaderTrainerWithPlayerData(void) -{ - struct BattleTowerEReaderTrainer *ereaderTrainer; - s32 i; - s32 j; - - ereaderTrainer = &gSaveBlock2.battleTower.ereaderTrainer; - - if (gSaveBlock2.playerGender != MALE) - { - ereaderTrainer->trainerClass = sFemaleTrainerClasses[(gSaveBlock2.playerTrainerId[0] + gSaveBlock2.playerTrainerId[1] - + gSaveBlock2.playerTrainerId[2] + gSaveBlock2.playerTrainerId[3]) % 20u]; - } - else - { - ereaderTrainer->trainerClass = sMaleTrainerClasses[(gSaveBlock2.playerTrainerId[0] + gSaveBlock2.playerTrainerId[1] - + gSaveBlock2.playerTrainerId[2] + gSaveBlock2.playerTrainerId[3]) % 30u]; - } - - copy_word_to_mem(ereaderTrainer->trainerId, gSaveBlock2.playerTrainerId); - StringCopy8(ereaderTrainer->name, gSaveBlock2.playerName); - - ereaderTrainer->winStreak = 1; - - j = 7; - for (i = 0; i < 6; i++) - { - ereaderTrainer->greeting.easyChat[i] = gSaveBlock1.easyChats.unk2B28[i]; - ereaderTrainer->farewellPlayerLost.easyChat[i] = j; - ereaderTrainer->farewellPlayerWon.easyChat[i] = j + 6; - j++; - } - - for (i = 0; i < 3; i++) - { - sub_803AF78(&gPlayerParty[i], &ereaderTrainer->party[i]); - } - - SetEReaderTrainerChecksum(ereaderTrainer); -} - -u8 GetEReaderTrainerPicIndex(void) -{ - return gTrainerClassToPicIndex[gSaveBlock2.battleTower.ereaderTrainer.trainerClass]; -} - -u8 GetEReaderTrainerClassNameIndex(void) -{ - return gTrainerClassToNameIndex[gSaveBlock2.battleTower.ereaderTrainer.trainerClass]; -} - -void SetEReaderTrainerName(u8 *trainerName) -{ - s32 i; - - for (i = 0; i < 7; i++) - { - trainerName[i] = gSaveBlock2.battleTower.ereaderTrainer.name[i]; - } - - trainerName[i] = 0xFF; -} - -// Checks if the saved E-Reader trainer is valid. -void ValidateEReaderTrainer(void) -{ - u32 i; - u32 checksum; - struct BattleTowerEReaderTrainer *ereaderTrainer; - - gScriptResult = 0; - ereaderTrainer = &gSaveBlock2.battleTower.ereaderTrainer; - - checksum = 0; - for (i = 0; i < sizeof(struct BattleTowerEReaderTrainer) / sizeof(u32) - 1; i++) - { - checksum |= ((u32 *)ereaderTrainer)[i]; - } - - if (checksum == 0) - { - gScriptResult = 1; - return; - } - - checksum = 0; - for (i = 0; i < sizeof(struct BattleTowerEReaderTrainer) / sizeof(u32) - 1; i++) - { - checksum += ((u32 *)ereaderTrainer)[i]; - } - - if (gSaveBlock2.battleTower.ereaderTrainer.checksum != checksum) - { - ClearEReaderTrainer(&gSaveBlock2.battleTower.ereaderTrainer); - gScriptResult = 1; - } -} - -void SetEReaderTrainerChecksum(struct BattleTowerEReaderTrainer *ereaderTrainer) -{ - s32 i; - - ereaderTrainer->checksum = 0; - for (i = 0; i < sizeof(struct BattleTowerEReaderTrainer) / sizeof(u32) - 1; i++) - { - ereaderTrainer->checksum += ((u32 *)ereaderTrainer)[i]; - } -} - -void ClearEReaderTrainer(struct BattleTowerEReaderTrainer *ereaderTrainer) -{ - u32 i; - - for (i = 0; i < sizeof(struct BattleTowerEReaderTrainer) / sizeof(u32); i++) - { - ((u32 *)ereaderTrainer)[i] = 0; - } -} - -void PrintEReaderTrainerGreeting(void) -{ - PrintBattleTowerTrainerMessage(gSaveBlock2.battleTower.ereaderTrainer.greeting.easyChat); -} - -void PrintEReaderTrainerFarewellMessage(void) -{ - if (gBattleOutcome == BATTLE_DREW) - { - gStringVar4[0] = 0xFF; - } - else if (gBattleOutcome == BATTLE_WON) - { - PrintBattleTowerTrainerMessage(gSaveBlock2.battleTower.ereaderTrainer.farewellPlayerWon.easyChat); - } - else - { - PrintBattleTowerTrainerMessage(gSaveBlock2.battleTower.ereaderTrainer.farewellPlayerLost.easyChat); - } -} - -void sub_813610C(void) -{ - s32 i; - - for (i = 0; i < 2; i++) - { - if (gSaveBlock2.battleTower.var_4AE[i] == 1) - { - sub_80BFD20(); - } - } -} - -#if GERMAN -u8 de_sub_81364AC(void) -{ - if (gSaveBlock2.battleTower.battleTowerTrainerId == BATTLE_TOWER_EREADER_TRAINER_ID) - { - return gSaveBlock2.battleTower.ereaderTrainer.trainerClass; - } - else if (gSaveBlock2.battleTower.battleTowerTrainerId >= BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID) - { - return gSaveBlock2.battleTower.records[gSaveBlock2.battleTower.battleTowerTrainerId - BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID].trainerClass; - } - else - { - return gBattleTowerTrainers[gSaveBlock2.battleTower.battleTowerTrainerId].trainerClass; - } -} - -u8 de_sub_81364F8(void) -{ - return gSaveBlock2.battleTower.ereaderTrainer.trainerClass; -} -#endif diff --git a/src/field/battle_tower.c b/src/field/battle_tower.c new file mode 100644 index 000000000..90ecc457a --- /dev/null +++ b/src/field/battle_tower.c @@ -0,0 +1,2375 @@ +#include "global.h" +#include "battle.h" +#include "battle_setup.h" +#include "battle_tower.h" +#include "battle_transition.h" +#include "data2.h" +#include "easy_chat.h" +#include "event_data.h" +#include "item.h" +#include "items.h" +#include "main.h" +#include "map_object_constants.h" +#include "moves.h" +#include "new_game.h" +#include "overworld.h" +#include "pokedex.h" +#include "rng.h" +#include "save.h" +#include "script_pokemon_80C4.h" +#include "species.h" +#include "string_util.h" +#include "task.h" +#include "text.h" +#include "trainer.h" +#include "tv.h" +#include "vars.h" + +#if ENGLISH +#include "../data/battle_tower/trainers.h" +#elif GERMAN +#include "../data/battle_tower/trainers_de.h" +#endif + +static const u16 sBattleTowerHeldItems[] = { + ITEM_NONE, + ITEM_KINGS_ROCK, + ITEM_SITRUS_BERRY, + ITEM_ORAN_BERRY, + ITEM_CHESTO_BERRY, + ITEM_HARD_STONE, + ITEM_FOCUS_BAND, + ITEM_PERSIM_BERRY, + ITEM_MIRACLE_SEED, + ITEM_BERRY_JUICE, + ITEM_MACHO_BRACE, + ITEM_SILVER_POWDER, + ITEM_CHERI_BERRY, + ITEM_BLACK_GLASSES, + ITEM_BLACK_BELT, + ITEM_SOUL_DEW, + ITEM_CHOICE_BAND, + ITEM_MAGNET, + ITEM_SILK_SCARF, + ITEM_WHITE_HERB, + ITEM_DEEP_SEA_SCALE, + ITEM_DEEP_SEA_TOOTH, + ITEM_MYSTIC_WATER, + ITEM_SHARP_BEAK, + ITEM_QUICK_CLAW, + ITEM_LEFTOVERS, + ITEM_RAWST_BERRY, + ITEM_LIGHT_BALL, + ITEM_POISON_BARB, + ITEM_NEVER_MELT_ICE, + ITEM_ASPEAR_BERRY, + ITEM_SPELL_TAG, + ITEM_BRIGHT_POWDER, + ITEM_LEPPA_BERRY, + ITEM_SCOPE_LENS, + ITEM_TWISTED_SPOON, + ITEM_METAL_COAT, + ITEM_MENTAL_HERB, + ITEM_CHARCOAL, + ITEM_PECHA_BERRY, + ITEM_SOFT_SAND, + ITEM_LUM_BERRY, + ITEM_DRAGON_SCALE, + ITEM_DRAGON_FANG, + ITEM_IAPAPA_BERRY, + ITEM_WIKI_BERRY, + ITEM_SEA_INCENSE, + ITEM_SHELL_BELL, + ITEM_SALAC_BERRY, + ITEM_LANSAT_BERRY, + ITEM_APICOT_BERRY, + ITEM_STARF_BERRY, + ITEM_LIECHI_BERRY, + ITEM_STICK, + ITEM_LAX_INCENSE, + ITEM_AGUAV_BERRY, + ITEM_FIGY_BERRY, + ITEM_THICK_CLUB, + ITEM_MAGO_BERRY, + ITEM_METAL_POWDER, + ITEM_PETAYA_BERRY, + ITEM_LUCKY_PUNCH, + ITEM_GANLON_BERRY, +}; + +#include "../data/battle_tower/level_50_mons.h" +#include "../data/battle_tower/level_100_mons.h" + +static const u8 sMaleTrainerClasses[] = { + TRAINER_CLASS_RUIN_MANIAC, + TRAINER_CLASS_TUBER_M, + TRAINER_CLASS_COOL_TRAINER_M, + TRAINER_CLASS_RICH_BOY, + TRAINER_CLASS_POKEMANIAC, + TRAINER_CLASS_SWIMMER_M, + TRAINER_CLASS_BLACK_BELT, + TRAINER_CLASS_GUITARIST, + TRAINER_CLASS_KINDLER, + TRAINER_CLASS_CAMPER, + TRAINER_CLASS_BUG_MANIAC, + TRAINER_CLASS_PSYCHIC_M, + TRAINER_CLASS_GENTLEMAN, + TRAINER_CLASS_SCHOOL_KID_M, + TRAINER_CLASS_POKEFAN_M, + TRAINER_CLASS_EXPERT_M, + TRAINER_CLASS_YOUNGSTER, + TRAINER_CLASS_FISHERMAN, + TRAINER_CLASS_CYCLING_TRIATHLETE_M, + TRAINER_CLASS_RUNNING_TRIATHLETE_M, + TRAINER_CLASS_SWIMMING_TRIATHLETE_M, + TRAINER_CLASS_DRAGON_TAMER, + TRAINER_CLASS_BIRD_KEEPER, + TRAINER_CLASS_NINJA_BOY, + TRAINER_CLASS_SAILOR, + TRAINER_CLASS_COLLECTOR, + TRAINER_CLASS_POKEMON_BREEDER_M, + TRAINER_CLASS_POKEMON_RANGER_M, + TRAINER_CLASS_BUG_CATCHER, + TRAINER_CLASS_HIKER, +}; + +static const u8 sFemaleTrainerClasses[] = { + TRAINER_CLASS_AROMA_LADY, + TRAINER_CLASS_TUBER_F, + TRAINER_CLASS_COOL_TRAINER_F, + TRAINER_CLASS_HEX_MANIAC, + TRAINER_CLASS_LADY, + TRAINER_CLASS_BEAUTY, + TRAINER_CLASS_PSYCHIC_F, + TRAINER_CLASS_SCHOOL_KID_F, + TRAINER_CLASS_POKEFAN_F, + TRAINER_CLASS_EXPERT_F, + TRAINER_CLASS_CYCLING_TRIATHLETE_F, + TRAINER_CLASS_RUNNING_TRIATHLETE_F, + TRAINER_CLASS_SWIMMING_TRIATHLETE_F, + TRAINER_CLASS_BATTLE_GIRL, + TRAINER_CLASS_PARASOL_LADY, + TRAINER_CLASS_SWIMMER_F, + TRAINER_CLASS_PICNICKER, + TRAINER_CLASS_POKEMON_BREEDER_F, + TRAINER_CLASS_POKEMON_RANGER_F, + TRAINER_CLASS_LASS, +}; + +static const u8 sMaleTrainerGfxIds[] = { + MAP_OBJ_GFX_HIKER, + MAP_OBJ_GFX_TUBER_M, + MAP_OBJ_GFX_MAN_4, + MAP_OBJ_GFX_BOY_4, + MAP_OBJ_GFX_MANIAC, + MAP_OBJ_GFX_RUNNING_TRIATHLETE_M, + MAP_OBJ_GFX_BLACK_BELT, + MAP_OBJ_GFX_MAN_6, + MAP_OBJ_GFX_MAN_6, + MAP_OBJ_GFX_CAMPER, + MAP_OBJ_GFX_MANIAC, + MAP_OBJ_GFX_PSYCHIC_M, + MAP_OBJ_GFX_GENTLEMAN, + MAP_OBJ_GFX_SCHOOL_KID_M, + MAP_OBJ_GFX_MAN_3, + MAP_OBJ_GFX_OLD_MAN_1, + MAP_OBJ_GFX_YOUNGSTER, + MAP_OBJ_GFX_FISHERMAN, + MAP_OBJ_GFX_CYCLING_TRIATHLETE_M, + MAP_OBJ_GFX_RUNNING_TRIATHLETE_M, + MAP_OBJ_GFX_RUNNING_TRIATHLETE_M, + MAP_OBJ_GFX_MAN_4, + MAP_OBJ_GFX_MAN_6, + MAP_OBJ_GFX_LITTLE_BOY_1, + MAP_OBJ_GFX_SAILOR, + MAP_OBJ_GFX_MANIAC, + MAP_OBJ_GFX_MAN_5, + MAP_OBJ_GFX_CAMPER, + MAP_OBJ_GFX_BUG_CATCHER, + MAP_OBJ_GFX_HIKER, +}; + +static const u8 sFemaleTrainerGfxIds[] = { + MAP_OBJ_GFX_WOMAN_3, + MAP_OBJ_GFX_TUBER_F, + MAP_OBJ_GFX_WOMAN_7, + MAP_OBJ_GFX_WOMAN_1, + MAP_OBJ_GFX_WOMAN_3, + MAP_OBJ_GFX_BEAUTY, + MAP_OBJ_GFX_LASS, + MAP_OBJ_GFX_GIRL_3, + MAP_OBJ_GFX_WOMAN_2, + MAP_OBJ_GFX_OLD_WOMAN_1, + MAP_OBJ_GFX_CYCLING_TRIATHLETE_F, + MAP_OBJ_GFX_RUNNING_TRIATHLETE_F, + MAP_OBJ_GFX_RUNNING_TRIATHLETE_F, + MAP_OBJ_GFX_GIRL_3, + MAP_OBJ_GFX_WOMAN_7, + MAP_OBJ_GFX_RUNNING_TRIATHLETE_F, + MAP_OBJ_GFX_PICNICKER, + MAP_OBJ_GFX_WOMAN_3, + MAP_OBJ_GFX_PICNICKER, + MAP_OBJ_GFX_LASS, +}; + +const u16 gBattleTowerBannedSpecies[] = { + SPECIES_MEW, + SPECIES_MEWTWO, + SPECIES_HO_OH, + SPECIES_LUGIA, + SPECIES_CELEBI, + SPECIES_KYOGRE, + SPECIES_GROUDON, + SPECIES_RAYQUAZA, + SPECIES_JIRACHI, + SPECIES_DEOXYS, + 0xFFFF, +}; + +// Item prizes for battle tower streaks of 5 or fewer sets. +/*static*/ const u16 sShortStreakPrizes[] = { + ITEM_HP_UP, + ITEM_PROTEIN, + ITEM_IRON, + ITEM_CALCIUM, + ITEM_CARBOS, + ITEM_ZINC, +}; + +// Item prizes for battle tower streaks of greater than 5 sets. +/*static*/ const u16 sLongStreakPrizes[] = { + ITEM_BRIGHT_POWDER, + ITEM_WHITE_HERB, + ITEM_QUICK_CLAW, + ITEM_LEFTOVERS, + ITEM_MENTAL_HERB, + ITEM_KINGS_ROCK, + ITEM_FOCUS_BAND, + ITEM_SCOPE_LENS, + ITEM_CHOICE_BAND, +}; + +static void ResetBattleTowerStreak(u8 levelType); +static void ValidateBattleTowerRecordChecksums(void); +static void PrintEReaderTrainerFarewellMessage(void); +extern void SetBattleTowerTrainerGfxId(u8); +extern void sub_8135A3C(void); +static void sub_8135CFC(void); +static void CheckMonBattleTowerBanlist(u16, u16, u16, u8, u8, u16 *, u16 *, u8 *); +static void ClearEReaderTrainer(struct BattleTowerEReaderTrainer *); +static void SetEReaderTrainerChecksum(struct BattleTowerEReaderTrainer *ereaderTrainer); +static void SetBattleTowerRecordChecksum(struct BattleTowerRecord *); +static void ClearBattleTowerRecord(struct BattleTowerRecord *); + +extern const u8 gUnknown_08400E23[]; +extern const u8 gUnknown_08400E29[]; +extern const u8 gUnknown_08400E2C[]; +extern const u8 gUnknown_08400E2E[]; +extern const u8 gUnknown_08400E30[]; +extern const u8 gUnknown_08400E32[]; +extern const u8 gUnknown_08400E36[]; +extern u16 gSpecialVar_0x8004; +extern u8 gTrainerClassToPicIndex[]; +extern u8 gTrainerClassToNameIndex[]; +extern u16 gTrainerBattleOpponent; +extern u16 gBattleTypeFlags; +extern u8 gSelectedOrderFromParty[]; +extern u8 gBattleOutcome; +extern struct Pokemon gUnknown_030042FC[]; +extern struct BattlePokemon gBattleMons[]; + +#define ewram160FB (ewram[0x160FB]) + + +void sub_8134548(void) +{ + u8 var1 = 0; + s32 levelType; + + for (levelType = 0; levelType < 2; levelType++) + { + switch (gSaveBlock2.battleTower.var_4AE[levelType]) + { + case 0: + default: + ResetBattleTowerStreak(levelType); + if (!var1) + { + VarSet(VAR_0x4000, 5); + } + break; + case 1: + ResetBattleTowerStreak(levelType); + VarSet(VAR_0x4000, 1); + var1++; + break; + case 4: + VarSet(VAR_0x4000, 2); + var1++; + break; + case 5: + VarSet(VAR_0x4000, 3); + var1++; + break; + case 2: + VarSet(VAR_0x4000, 4); + var1++; + break; + case 3: + case 6: + break; + } + } + + if ((gSaveBlock2.battleTower.var_4AE[0] == 3 || gSaveBlock2.battleTower.var_4AE[0] == 6) + && (gSaveBlock2.battleTower.var_4AE[1] == 3 || gSaveBlock2.battleTower.var_4AE[1] == 6)) + { + VarSet(VAR_0x4000, 5); + } + + ValidateBattleTowerRecordChecksums(); +} + +void ResetBattleTowerStreak(u8 levelType) +{ + gSaveBlock2.battleTower.var_4AE[levelType] = 0; + gSaveBlock2.battleTower.curChallengeBattleNum[levelType] = 1; + gSaveBlock2.battleTower.curStreakChallengesNum[levelType] = 1; +} + +// Checks if the next trainer in Battle Tower should be the E-Reader trainer. +bool8 ShouldBattleEReaderTrainer(u8 levelType, u16 winStreak) +{ + u8 trainerTeamLevel; + u8 monLevel; + s32 i; + u16 validPartySpecies[6]; + u16 validPartyHeldItems[6]; + u8 numValid; + + numValid = 0; + + ValidateEReaderTrainer(); + + if (gScriptResult != 0 || gSaveBlock2.battleTower.ereaderTrainer.winStreak != winStreak) + { + return FALSE; + } + + trainerTeamLevel = 50; + if (levelType != 0) + { + trainerTeamLevel = 100; + } + + for (i = 0; i < 3; i++) + { + monLevel = gSaveBlock2.battleTower.ereaderTrainer.party[i].level; + if (gSaveBlock2.battleTower.ereaderTrainer.party[i].level != trainerTeamLevel) + { + return FALSE; + } + + CheckMonBattleTowerBanlist( + gSaveBlock2.battleTower.ereaderTrainer.party[i].species, + gSaveBlock2.battleTower.ereaderTrainer.party[i].heldItem, + 1, + levelType, + monLevel, + validPartySpecies, + validPartyHeldItems, + &numValid); + } + + return numValid == 3; +} + +bool8 sub_81346F4(void) +{ + s32 recordIndex, i; + u8 battleTowerLevelType; + u16 winStreak; + bool8 retVal; + s32 numCandidates; + u32 trainerIds[5]; + + numCandidates = 0; + battleTowerLevelType = gSaveBlock2.battleTower.battleTowerLevelType; + + winStreak = GetCurrentBattleTowerWinStreak(battleTowerLevelType); + if (ShouldBattleEReaderTrainer(battleTowerLevelType, winStreak)) + { + gSaveBlock2.battleTower.battleTowerTrainerId = BATTLE_TOWER_EREADER_TRAINER_ID; + retVal = TRUE; + } + else + { + // Check if one of the battle tower trainers from record mixing should be the next trainer. + for (recordIndex = 0; recordIndex < 5; recordIndex++) + { + struct BattleTowerRecord *record = &gSaveBlock2.battleTower.records[recordIndex]; + u32 recordHasData = 0; + u32 checksum = 0; + for (i = 0; i < sizeof(struct BattleTowerRecord) / sizeof(u32) - 1; i++) + { + recordHasData |= ((u32 *)record)[i]; + checksum += ((u32 *)record)[i]; + } + + if (gSaveBlock2.battleTower.records[recordIndex].winStreak == winStreak + && gSaveBlock2.battleTower.records[recordIndex].battleTowerLevelType == battleTowerLevelType + && recordHasData + && gSaveBlock2.battleTower.records[recordIndex].checksum == checksum) + { + trainerIds[numCandidates] = recordIndex; + numCandidates++; + } + } + + if (numCandidates == 0) + { + retVal = FALSE; + } + else + { + gSaveBlock2.battleTower.battleTowerTrainerId = trainerIds[Random() % numCandidates] + BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID; + retVal = TRUE; + } + } + + return retVal; +} + +// void sub_81347F8(void) +// { +// bool8 levelType = gSaveBlock2.battleTower.battleTowerLevelType; +// if (sub_81346F4()) +// { +// SetBattleTowerTrainerGfxId(gSaveBlock2.battleTower.battleTowerTrainerId); +// gSaveBlock2.battleTower.var_4C1[gSaveBlock2.battleTower.curChallengeBattleNum[levelType]] = gSaveBlock2.battleTower.battleTowerTrainerId; +// } +// else +// { +// u16 var1; + +// if (gSaveBlock2.battleTower.curStreakChallengesNum[levelType] > 7) +// { +// while (1) +// { +// s32 i; +// u32 temp = ((Random() & 0xFF) * 30) >> 8; +// var1 = temp + 70; +// for (i = 0; i < gSaveBlock2.battleTower.curChallengeBattleNum[levelType] - 1 && var1 != gSaveBlock2.battleTower.var_4C1[i]; i++) // TODO: [i + 1]??? +// { } + +// if (i == gSaveBlock2.battleTower.curChallengeBattleNum[levelType] - 1) +// { +// break; +// } +// } +// } +// else +// { +// if (gSaveBlock2.battleTower.curChallengeBattleNum[levelType] == 7) +// { +// while (1) +// { +// s32 i; +// u32 temp = ((Random() & 0xFF) * 5); +// u32 temp2 = (((gSaveBlock2.battleTower.curStreakChallengesNum[levelType] - 1) * 10) + 20); +// var1 = temp / 128 + temp2; +// for (i = 0; i < gSaveBlock2.battleTower.curChallengeBattleNum[levelType] - 1 && gSaveBlock2.battleTower.var_4C1[i] != var1; i++) // TODO: [i + 1]???? +// { } + +// if (i == gSaveBlock2.battleTower.curChallengeBattleNum[levelType] - 1) +// { +// break; +// } +// } +// } +// else +// { +// while (1) +// { +// s32 i; +// u32 temp = ((Random() & 0xFF) * 320); +// u32 temp2 = ((gSaveBlock2.battleTower.curStreakChallengesNum[levelType] - 1) * 10); +// var1 = temp + temp2; +// for (i = 0; i < gSaveBlock2.battleTower.curChallengeBattleNum[levelType] - 1 && gSaveBlock2.battleTower.var_4C1[i] != var1; i++) +// { } + +// if (i == gSaveBlock2.battleTower.curChallengeBattleNum[levelType] - 1) +// { +// break; +// } +// } +// } +// } + +// gSaveBlock2.battleTower.battleTowerTrainerId = var1; +// SetBattleTowerTrainerGfxId(gSaveBlock2.battleTower.battleTowerTrainerId); + +// if (gSaveBlock2.battleTower.curChallengeBattleNum[levelType] < 7) +// { +// gSaveBlock2.battleTower.var_4C1[gSaveBlock2.battleTower.curChallengeBattleNum[levelType]] = gSaveBlock2.battleTower.battleTowerTrainerId; +// } +// } +// } + +__attribute__((naked)) +void sub_81347F8(void) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + ldr r5, _08134838 @ =gSaveBlock2\n\ + ldr r1, _0813483C @ =0x00000554\n\ + adds r0, r5, r1\n\ + ldrb r0, [r0]\n\ + lsls r0, 31\n\ + lsrs r6, r0, 31\n\ + bl sub_81346F4\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _08134848\n\ + ldr r2, _08134840 @ =0x00000564\n\ + adds r4, r5, r2\n\ + ldrb r0, [r4]\n\ + bl SetBattleTowerTrainerGfxId\n\ + lsls r0, r6, 1\n\ + movs r3, 0xAB\n\ + lsls r3, 3\n\ + adds r1, r5, r3\n\ + adds r0, r1\n\ + ldrh r0, [r0]\n\ + adds r0, r5, r0\n\ + ldr r1, _08134844 @ =0x00000569\n\ + adds r0, r1\n\ + ldrb r1, [r4]\n\ + b _081349DC\n\ + .align 2, 0\n\ +_08134838: .4byte gSaveBlock2\n\ +_0813483C: .4byte 0x00000554\n\ +_08134840: .4byte 0x00000564\n\ +_08134844: .4byte 0x00000569\n\ +_08134848:\n\ + lsls r0, r6, 1\n\ + ldr r2, _081348D8 @ =0x0000055c\n\ + adds r1, r5, r2\n\ + adds r1, r0, r1\n\ + ldrh r1, [r1]\n\ + adds r7, r0, 0\n\ + cmp r1, 0x7\n\ + bls _0813485A\n\ + b _0813495C\n\ +_0813485A:\n\ + movs r3, 0xAB\n\ + lsls r3, 3\n\ + adds r0, r5, r3\n\ + adds r1, r7, r0\n\ + ldrh r0, [r1]\n\ + cmp r0, 0x7\n\ + bne _081348E4\n\ + adds r6, r5, 0\n\ + mov r9, r7\n\ + adds r5, r1, 0\n\ + ldr r0, _081348DC @ =0x0000056a\n\ + adds r0, r6\n\ + mov r10, r0\n\ + mov r8, r5\n\ +_08134876:\n\ + bl Random\n\ + movs r1, 0xFF\n\ + ands r1, r0\n\ + lsls r2, r1, 2\n\ + adds r2, r1\n\ + ldr r1, _081348D8 @ =0x0000055c\n\ + adds r4, r6, r1\n\ + mov r3, r9\n\ + adds r0, r3, r4\n\ + ldrh r1, [r0]\n\ + subs r1, 0x1\n\ + lsls r0, r1, 2\n\ + adds r0, r1\n\ + lsls r0, 1\n\ + adds r0, 0x14\n\ + lsrs r2, 7\n\ + adds r2, r0\n\ + lsls r2, 16\n\ + lsrs r2, 16\n\ + movs r1, 0\n\ + ldrh r0, [r5]\n\ + subs r0, 0x1\n\ + cmp r1, r0\n\ + bge _081348C8\n\ + mov r3, r10\n\ + ldrb r0, [r3]\n\ + cmp r0, r2\n\ + beq _081348C8\n\ + subs r0, r4, 0x4\n\ + adds r0, r7, r0\n\ + ldrh r0, [r0]\n\ + subs r3, r0, 0x1\n\ + adds r4, 0xE\n\ +_081348BA:\n\ + adds r1, 0x1\n\ + cmp r1, r3\n\ + bge _081348C8\n\ + adds r0, r1, r4\n\ + ldrb r0, [r0]\n\ + cmp r0, r2\n\ + bne _081348BA\n\ +_081348C8:\n\ + mov r3, r8\n\ + ldrh r0, [r3]\n\ + subs r0, 0x1\n\ + ldr r4, _081348E0 @ =gSaveBlock2\n\ + cmp r1, r0\n\ + bne _08134876\n\ + b _081349B6\n\ + .align 2, 0\n\ +_081348D8: .4byte 0x0000055c\n\ +_081348DC: .4byte 0x0000056a\n\ +_081348E0: .4byte gSaveBlock2\n\ +_081348E4:\n\ + adds r6, r5, 0\n\ + mov r9, r7\n\ + adds r5, r1, 0\n\ + ldr r2, _08134950 @ =0x0000056a\n\ + adds r2, r6\n\ + mov r10, r2\n\ + mov r8, r5\n\ +_081348F2:\n\ + bl Random\n\ + movs r1, 0xFF\n\ + ands r1, r0\n\ + lsls r0, r1, 2\n\ + adds r0, r1\n\ + lsrs r2, r0, 6\n\ + ldr r3, _08134954 @ =0x0000055c\n\ + adds r4, r6, r3\n\ + mov r1, r9\n\ + adds r0, r1, r4\n\ + ldrh r1, [r0]\n\ + subs r1, 0x1\n\ + lsls r0, r1, 2\n\ + adds r0, r1\n\ + lsls r0, 1\n\ + adds r0, r2, r0\n\ + lsls r0, 16\n\ + lsrs r2, r0, 16\n\ + movs r1, 0\n\ + ldrh r0, [r5]\n\ + subs r0, 0x1\n\ + cmp r1, r0\n\ + bge _08134942\n\ + mov r3, r10\n\ + ldrb r0, [r3]\n\ + cmp r0, r2\n\ + beq _08134942\n\ + subs r0, r4, 0x4\n\ + adds r0, r7, r0\n\ + ldrh r0, [r0]\n\ + subs r3, r0, 0x1\n\ + adds r4, 0xE\n\ +_08134934:\n\ + adds r1, 0x1\n\ + cmp r1, r3\n\ + bge _08134942\n\ + adds r0, r1, r4\n\ + ldrb r0, [r0]\n\ + cmp r0, r2\n\ + bne _08134934\n\ +_08134942:\n\ + mov r3, r8\n\ + ldrh r0, [r3]\n\ + subs r0, 0x1\n\ + ldr r4, _08134958 @ =gSaveBlock2\n\ + cmp r1, r0\n\ + bne _081348F2\n\ + b _081349B6\n\ + .align 2, 0\n\ +_08134950: .4byte 0x0000056a\n\ +_08134954: .4byte 0x0000055c\n\ +_08134958: .4byte gSaveBlock2\n\ +_0813495C:\n\ + movs r2, 0xAB\n\ + lsls r2, 3\n\ + adds r0, r5, r2\n\ + adds r6, r7, r0\n\ + ldr r3, _081349EC @ =0x0000056a\n\ + adds r3, r5\n\ + mov r8, r3\n\ + adds r5, r6, 0\n\ +_0813496C:\n\ + bl Random\n\ + movs r1, 0xFF\n\ + ands r1, r0\n\ + lsls r0, r1, 4\n\ + subs r0, r1\n\ + lsls r0, 1\n\ + asrs r0, 8\n\ + adds r0, 0x46\n\ + lsls r0, 16\n\ + lsrs r2, r0, 16\n\ + movs r1, 0\n\ + ldrh r0, [r6]\n\ + subs r0, 0x1\n\ + cmp r1, r0\n\ + bge _081349AC\n\ + mov r3, r8\n\ + ldrb r0, [r3]\n\ + ldr r4, _081349F0 @ =gSaveBlock2\n\ + cmp r0, r2\n\ + beq _081349AC\n\ + ldrh r0, [r5]\n\ + subs r3, r0, 0x1\n\ + ldr r0, _081349EC @ =0x0000056a\n\ + adds r4, r0\n\ +_0813499E:\n\ + adds r1, 0x1\n\ + cmp r1, r3\n\ + bge _081349AC\n\ + adds r0, r1, r4\n\ + ldrb r0, [r0]\n\ + cmp r0, r2\n\ + bne _0813499E\n\ +_081349AC:\n\ + ldrh r0, [r6]\n\ + subs r0, 0x1\n\ + ldr r4, _081349F0 @ =gSaveBlock2\n\ + cmp r1, r0\n\ + bne _0813496C\n\ +_081349B6:\n\ + ldr r1, _081349F4 @ =0x00000564\n\ + adds r0, r4, r1\n\ + strb r2, [r0]\n\ + ldr r2, _081349F4 @ =0x00000564\n\ + adds r5, r4, r2\n\ + ldrb r0, [r5]\n\ + bl SetBattleTowerTrainerGfxId\n\ + movs r3, 0xAB\n\ + lsls r3, 3\n\ + adds r0, r4, r3\n\ + adds r1, r7, r0\n\ + ldrh r0, [r1]\n\ + cmp r0, 0x6\n\ + bhi _081349DE\n\ + adds r0, r4, r0\n\ + ldr r1, _081349F8 @ =0x00000569\n\ + adds r0, r1\n\ + ldrb r1, [r5]\n\ +_081349DC:\n\ + strb r1, [r0]\n\ +_081349DE:\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_081349EC: .4byte 0x0000056a\n\ +_081349F0: .4byte gSaveBlock2\n\ +_081349F4: .4byte 0x00000564\n\ +_081349F8: .4byte 0x00000569\n\ +.syntax divided\n"); +} + +void SetBattleTowerTrainerGfxId(u8 trainerIndex) +{ + u32 i; + u8 trainerClass; + + if (trainerIndex < BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID) + { + trainerClass = gBattleTowerTrainers[trainerIndex].trainerClass; + } + else if (trainerIndex < BATTLE_TOWER_EREADER_TRAINER_ID) + { + trainerClass = gSaveBlock2.battleTower.records[trainerIndex - BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID].trainerClass; + } + else + { + trainerClass = gSaveBlock2.battleTower.ereaderTrainer.trainerClass; + } + + for (i = 0; i < 30 && sMaleTrainerClasses[i] != trainerClass; i++); + if (i != 30) + { + u8 trainerObjectGfxId = sMaleTrainerGfxIds[i]; + VarSet(0x4010, trainerObjectGfxId); + return; + } + + for (i = 0; i < 20 && sFemaleTrainerClasses[i] != trainerClass; i++); + if (i != 20) + { + u8 trainerObjectGfxId = sFemaleTrainerGfxIds[i]; + VarSet(0x4010, trainerObjectGfxId); + return; + } + + VarSet(0x4010, MAP_OBJ_GFX_BOY_1); +} + +void SetEReaderTrainerGfxId() +{ + SetBattleTowerTrainerGfxId(BATTLE_TOWER_EREADER_TRAINER_ID); +} + +// void sub_8134AC0(struct BattleTowerRecord *record) +// { +// u16 var1[6]; +// u16 var2[6]; +// s32 i, j, k; +// s16 l = 0; + +// for (i = 0; i < 5; i++) +// { +// k = 0; +// for (j = 0; j < 4 && gSaveBlock2.battleTower.records[i].trainerId[j] == record->trainerId[j]; j++); +// if (j == 4) +// { +// for (; k < 7 && gSaveBlock2.battleTower.records[i].name[4] == record->name[4]; k++) +// { +// if (record->name[4] == 0xFF) +// { +// k = 7; +// break; +// } +// } +// } + +// if (k == 7) +// { +// break; +// } +// } + +// if (i < 5) +// { +// gSaveBlock2.battleTower.records[i] = *record; +// return; +// } + +// i = 0; +// while (i < 5) +// { +// if (gSaveBlock2.battleTower.records[i].winStreak == 0) +// { +// if (i > 4) +// { +// break; +// } + +// gSaveBlock2.battleTower.records[i] = *record; +// return; +// } + +// i++; +// } + +// var1[0] = gSaveBlock2.battleTower.records[0].winStreak; +// var2[0] = 0; +// l++; + +// for (i = 1; i < 5; i++) +// { +// j = 0; +// if (j < l) +// { +// for (; gSaveBlock2.battleTower.records[i].winStreak <= var1[j]; j++) +// { +// if (gSaveBlock2.battleTower.records[i].winStreak < var1[j]) +// { +// j = 0; +// l = 1; +// var1[0] = gSaveBlock2.battleTower.records[i].winStreak; +// var2[0] = i; +// break; +// } +// } +// } + +// if (j == l) +// { +// var1[l] = gSaveBlock2.battleTower.records[i].winStreak; +// var2[l] = i; +// l++; +// } +// } + +// gSaveBlock2.battleTower.records[var2[(Random() % l)]] = *record; +// } +__attribute__((naked)) +void sub_8134AC0(struct BattleTowerRecord *record) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, 0x1C\n\ + movs r7, 0\n\ + mov r8, r0\n\ + movs r5, 0\n\ + ldr r0, _08134B3C @ =gSaveBlock2\n\ + mov r12, r0\n\ + mov r1, r8\n\ + ldrb r1, [r1, 0xC]\n\ + str r1, [sp, 0x18]\n\ + movs r2, 0xAA\n\ + lsls r2, 1\n\ + add r2, r12\n\ + mov r10, r2\n\ + mov r9, r5\n\ +_08134AE6:\n\ + movs r6, 0\n\ + movs r3, 0\n\ + ldr r0, _08134B40 @ =gSaveBlock2 + 0x158\n\ + add r0, r9\n\ + ldrb r0, [r0]\n\ + ldr r1, [sp, 0x18]\n\ + cmp r0, r1\n\ + bne _08134B14\n\ + movs r0, 0xA4\n\ + muls r0, r5\n\ + ldr r1, _08134B40 @ =gSaveBlock2 + 0x158\n\ + adds r2, r0, r1\n\ + mov r4, r8\n\ + adds r4, 0xC\n\ +_08134B02:\n\ + adds r2, 0x1\n\ + adds r3, 0x1\n\ + cmp r3, 0x3\n\ + bgt _08134B14\n\ + adds r1, r4, r3\n\ + ldrb r0, [r2]\n\ + ldrb r1, [r1]\n\ + cmp r0, r1\n\ + beq _08134B02\n\ +_08134B14:\n\ + cmp r3, 0x4\n\ + bne _08134B54\n\ + movs r6, 0\n\ + mov r2, r10\n\ + ldrb r0, [r2]\n\ + mov r3, r8\n\ + ldrb r3, [r3, 0x8]\n\ + cmp r0, r3\n\ + bne _08134B54\n\ + adds r1, r0, 0\n\ + movs r0, 0xA4\n\ + muls r0, r5\n\ + adds r0, 0x4\n\ + ldr r3, _08134B44 @ =gSaveBlock2 + 0x150\n\ + adds r2, r0, r3\n\ +_08134B32:\n\ + cmp r1, 0xFF\n\ + bne _08134B48\n\ + movs r6, 0x7\n\ + b _08134B54\n\ + .align 2, 0\n\ +_08134B3C: .4byte gSaveBlock2\n\ +_08134B40: .4byte gSaveBlock2 + 0x158\n\ +_08134B44: .4byte gSaveBlock2 + 0x150\n\ +_08134B48:\n\ + adds r6, 0x1\n\ + cmp r6, 0x6\n\ + bgt _08134B54\n\ + ldrb r0, [r2]\n\ + cmp r0, r1\n\ + beq _08134B32\n\ +_08134B54:\n\ + cmp r6, 0x7\n\ + beq _08134B64\n\ + movs r0, 0xA4\n\ + add r10, r0\n\ + add r9, r0\n\ + adds r5, 0x1\n\ + cmp r5, 0x4\n\ + ble _08134AE6\n\ +\n\ +_08134B64:\n\ + cmp r5, 0x4\n\ + bgt _08134B76\n\ + movs r0, 0xA4\n\ + muls r0, r5\n\ + add r0, r12\n\ + movs r1, 0xA6\n\ + lsls r1, 1\n\ + adds r0, r1\n\ + b _08134B9E\n\ +_08134B76:\n\ + movs r5, 0\n\ + movs r1, 0xA7\n\ + lsls r1, 1\n\ + add r1, r12\n\ + b _08134B88\n\ +_08134B80:\n\ + adds r1, 0xA4\n\ + adds r5, 0x1\n\ + cmp r5, 0x4\n\ + bgt _08134BA8\n\ +_08134B88:\n\ + ldrh r0, [r1]\n\ + cmp r0, 0\n\ + bne _08134B80\n\ + cmp r5, 0x4\n\ + bgt _08134BA8\n\ + movs r0, 0xA4\n\ + muls r0, r5\n\ + add r0, r12\n\ + movs r2, 0xA6\n\ + lsls r2, 1\n\ + adds r0, r2\n\ +_08134B9E:\n\ + mov r1, r8\n\ + movs r2, 0xA4\n\ + bl memcpy\n\ + b _08134C5E\n\ +\n\ +_08134BA8:\n\ + mov r2, sp\n\ + movs r3, 0xA7\n\ + lsls r3, 1\n\ + mov r1, r12\n\ + adds r0, r1, r3\n\ + ldrh r0, [r0]\n\ + movs r1, 0\n\ + strh r0, [r2]\n\ + add r0, sp, 0xC\n\ + strh r1, [r0]\n\ + adds r7, 0x1\n\ + movs r5, 0x1\n\ + add r2, sp, 0xC @var2 = r2\n\ + mov r9, r2\n\ + mov r10, r3\n\ +_08134BC6:\n\ + movs r3, 0\n\ + adds r0, r5, 0x1\n\ + mov r12, r0\n\ + cmp r3, r7\n\ + bge _08134C0A @ j < l\n\ + movs r1, 0xA4\n\ + adds r0, r5, 0\n\ + muls r0, r1\n\ + ldr r2, _08134BFC @ =gSaveBlock2\n\ + adds r0, r2\n\ + mov r1, r10\n\ + adds r4, r0, r1\n\ + mov r6, sp\n\ +_08134BE0:\n\ + lsls r0, r3, 1\n\ + add r0, sp\n\ + ldrh r2, [r4]\n\ + adds r1, r2, 0\n\ + ldrh r0, [r0]\n\ + cmp r1, r0\n\ + bcs _08134C00\n\ + movs r3, 0\n\ + movs r7, 0x1\n\ + strh r2, [r6]\n\ + mov r2, r9\n\ + strh r5, [r2]\n\ + b _08134C0A\n\ + .align 2, 0\n\ +_08134BFC: .4byte gSaveBlock2\n\ +_08134C00:\n\ + cmp r1, r0\n\ + bhi _08134C0A\n\ + adds r3, 0x1\n\ + cmp r3, r7\n\ + blt _08134BE0\n\ +_08134C0A:\n\ + cmp r3, r7\n\ + bne _08134C2A\n\ + lsls r1, r7, 1\n\ + mov r3, sp\n\ + adds r2, r3, r1\n\ + movs r3, 0xA4\n\ + adds r0, r5, 0\n\ + muls r0, r3\n\ + ldr r3, _08134C70 @ =gSaveBlock2\n\ + adds r0, r3\n\ + add r0, r10\n\ + ldrh r0, [r0]\n\ + strh r0, [r2]\n\ + add r1, r9\n\ + strh r5, [r1]\n\ + adds r7, 0x1\n\ +_08134C2A:\n\ + mov r5, r12\n\ + cmp r5, 0x4\n\ + ble _08134BC6\n\ + bl Random\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + adds r1, r7, 0\n\ + bl __modsi3\n\ + adds r5, r0, 0\n\ + ldr r2, _08134C70 @ =gSaveBlock2\n\ + lsls r0, r5, 1\n\ + add r0, sp\n\ + adds r0, 0xC\n\ + ldrh r1, [r0]\n\ + movs r0, 0xA4\n\ + muls r0, r1\n\ + adds r0, r2\n\ + movs r1, 0xA6\n\ + lsls r1, 1\n\ + adds r0, r1\n\ + mov r1, r8\n\ + movs r2, 0xA4\n\ + bl memcpy\n\ +_08134C5E:\n\ + add sp, 0x1C\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_08134C70: .4byte gSaveBlock2\n\ + .syntax divided\n"); +} + +u8 get_trainer_class_pic_index(void) +{ + if (gSaveBlock2.battleTower.battleTowerTrainerId == BATTLE_TOWER_EREADER_TRAINER_ID) + { + return gTrainerClassToPicIndex[gSaveBlock2.battleTower.ereaderTrainer.trainerClass]; + } + else if (gSaveBlock2.battleTower.battleTowerTrainerId < BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID) + { + return gTrainerClassToPicIndex[gBattleTowerTrainers[gSaveBlock2.battleTower.battleTowerTrainerId].trainerClass]; + } + else + { + return gTrainerClassToPicIndex[gSaveBlock2.battleTower.records[gSaveBlock2.battleTower.battleTowerTrainerId - BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID].trainerClass]; + } +} + +u8 get_trainer_class_name_index(void) +{ + if (gSaveBlock2.battleTower.battleTowerTrainerId == BATTLE_TOWER_EREADER_TRAINER_ID) + { + return gTrainerClassToNameIndex[gSaveBlock2.battleTower.ereaderTrainer.trainerClass]; + } + else if (gSaveBlock2.battleTower.battleTowerTrainerId >= BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID) + { + return gTrainerClassToNameIndex[gSaveBlock2.battleTower.records[gSaveBlock2.battleTower.battleTowerTrainerId - BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID].trainerClass]; + } + else + { + return gTrainerClassToNameIndex[gBattleTowerTrainers[gSaveBlock2.battleTower.battleTowerTrainerId].trainerClass]; + } +} + +void get_trainer_name(u8* dest) +{ + s32 i; + + if (gSaveBlock2.battleTower.battleTowerTrainerId == BATTLE_TOWER_EREADER_TRAINER_ID) + { + for (i = 0; i < 7; i++) + { + dest[i] = gSaveBlock2.battleTower.ereaderTrainer.name[i]; + } + } + else if (gSaveBlock2.battleTower.battleTowerTrainerId < BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID) + { + for (i = 0; i < 7; i++) + { + dest[i] = gBattleTowerTrainers[gSaveBlock2.battleTower.battleTowerTrainerId].name[i]; + } + } + else + { + for (i = 0; i < 7; i++) + { + dest[i] = gSaveBlock2.battleTower.records[gSaveBlock2.battleTower.battleTowerTrainerId - BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID].name[i]; + } + } + + dest[i] = 0xFF; +} + +void FillBattleTowerTrainerParty(void) +{ + s32 partyIndex, i; + u16 chosenMonIndices[3]; + u8 friendship; + u8 level; + u8 fixedIV; + u8 battleMonsOffset; + u8 monPoolSize; + u8 teamFlags; + const struct BattleTowerPokemon *battleTowerMons; + + battleMonsOffset = 0; + monPoolSize = 60; + friendship = 255; + + ZeroEnemyPartyMons(); + + // Different trainers have access to different sets of pokemon to use in battle. + // The pokemon later in gBattleTowerLevel100Mons or gBattleTowerLevel50Mons are + // stronger. Additionally, the later trainers' pokemon are granted higher IVs. + if (gSaveBlock2.battleTower.battleTowerTrainerId < 20) + { + fixedIV = 6; + } + else if (gSaveBlock2.battleTower.battleTowerTrainerId < 30) + { + fixedIV = 9; + battleMonsOffset = 30; + } + else if (gSaveBlock2.battleTower.battleTowerTrainerId < 40) + { + fixedIV = 12; + battleMonsOffset = 60; + } + else if (gSaveBlock2.battleTower.battleTowerTrainerId < 50) + { + fixedIV = 15; + battleMonsOffset = 90; + } + else if (gSaveBlock2.battleTower.battleTowerTrainerId < 60) + { + fixedIV = 18; + battleMonsOffset = 120; + } + else if (gSaveBlock2.battleTower.battleTowerTrainerId < 70) + { + fixedIV = 21; + battleMonsOffset = 150; + } + else if (gSaveBlock2.battleTower.battleTowerTrainerId < 80) + { + fixedIV = 31; + battleMonsOffset = 180; + } + else if (gSaveBlock2.battleTower.battleTowerTrainerId < BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID) + { + fixedIV = 31; + battleMonsOffset = 200; + monPoolSize = 100; + } + else if (gSaveBlock2.battleTower.battleTowerTrainerId == BATTLE_TOWER_EREADER_TRAINER_ID) + { + // Load E-Reader trainer's party. + for (partyIndex = 0; partyIndex < 3; partyIndex++) + { + sub_803ADE8(&gEnemyParty[partyIndex], &gSaveBlock2.battleTower.ereaderTrainer.party[partyIndex]); + } + + return; + } + else + { + // Load a battle tower record's party. (From record mixing) + for (partyIndex = 0; partyIndex < 3; partyIndex++) + { + sub_803ADE8( + &gEnemyParty[partyIndex], + &gSaveBlock2.battleTower.records[gSaveBlock2.battleTower.battleTowerTrainerId - BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID].party[partyIndex]); + } + + return; + } + + // Use the appropriate list of pokemon and level depending on the + // current challenge type. (level 50 or level 100 challenge) + if (gSaveBlock2.battleTower.battleTowerLevelType != 0) + { + battleTowerMons = gBattleTowerLevel100Mons; + level = 100; + } + else + { + battleTowerMons = gBattleTowerLevel50Mons; + level = 50; + } + + teamFlags = gBattleTowerTrainers[gSaveBlock2.battleTower.battleTowerTrainerId].teamFlags; + + // Attempt to fill the trainer's party with random Pokemon until 3 have been + // successfully chosen. The trainer's party may not have duplicate pokemon species + // or duplicate held items. Each pokemon must have all of the trainer's team flags + // set, as well. If any of those conditions are not met, then the loop starts over + // and another pokemon is chosen at random. + partyIndex = 0; + while (partyIndex != 3) + { + // Pick a random pokemon index based on the number of pokemon available to choose from + // and the starting offset in the battle tower pokemon array. + s32 battleMonIndex = ((Random() & 0xFF) * monPoolSize) / 256 + battleMonsOffset; + + // Ensure the chosen pokemon has compatible team flags with the trainer. + if (teamFlags == 0 || (battleTowerMons[battleMonIndex].teamFlags & teamFlags) == teamFlags) + { + // Ensure this pokemon species isn't a duplicate. + for (i = 0; i < partyIndex; i++) + { + if (GetMonData(&gEnemyParty[i], MON_DATA_SPECIES, NULL) == battleTowerMons[battleMonIndex].species) + break; + } + + if (i != partyIndex) + continue; + + // Ensure this pokemon's held item isn't a duplicate. + for (i = 0; i < partyIndex; i++) + { + if (GetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, NULL) != 0 + && GetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, NULL) == sBattleTowerHeldItems[battleTowerMons[battleMonIndex].heldItem]) + { + break; + } + } + + if (i != partyIndex) + continue; + + // Ensure this exact pokemon index isn't a duplicate. This check doesn't seem necessary + // because the species and held items were already checked directly above. Perhaps this + // is leftover code before the logic for duplicate species and held items was added. + for (i = 0; i < partyIndex && chosenMonIndices[i] != battleMonIndex; i++); + + if (i != partyIndex) + continue; + + chosenMonIndices[partyIndex] = battleMonIndex; + + // Place the chosen pokemon into the trainer's party. + CreateMonWithEVSpread( + &gEnemyParty[partyIndex], + battleTowerMons[battleMonIndex].species, + level, + fixedIV, + battleTowerMons[battleMonIndex].evSpread); + + // Give the chosen pokemon its specified moves. + for (i = 0; i < 4; i++) + { + SetMonMoveSlot(&gEnemyParty[partyIndex], battleTowerMons[battleMonIndex].moves[i], i); + if (battleTowerMons[battleMonIndex].moves[i] == MOVE_FRUSTRATION) + { + // MOVE_FRUSTRATION is more powerful the lower the pokemon's friendship is. + friendship = 0; + } + } + + SetMonData(&gEnemyParty[partyIndex], MON_DATA_FRIENDSHIP, &friendship); + SetMonData(&gEnemyParty[partyIndex], MON_DATA_HELD_ITEM, (u8 *)&sBattleTowerHeldItems[battleTowerMons[battleMonIndex].heldItem]); + + // The pokemon was successfully added to the trainer's party, so it's safe to move on to + // the next party slot. + partyIndex++; + } + } + +} + +u32 CountBattleTowerBanlistCaught() +{ + s32 i; + u32 numCaught = 0; + + for (i = 0; gBattleTowerBannedSpecies[i] != 0xFFFF; i++) + { + if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(gBattleTowerBannedSpecies[i]), FLAG_GET_CAUGHT)) + { + numCaught++; + } + } + + return numCaught; +} + +u8 AppendBattleTowerBannedSpeciesName(u16 species, u8 curIndexToAppend, s32 numToAppend) +{ + if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(species), FLAG_GET_CAUGHT)) + { + curIndexToAppend++; + + switch (curIndexToAppend - 1) + { + case 0: + case 2: + case 4: + case 6: + case 8: + case 10: + if (numToAppend == curIndexToAppend) + { + StringAppend(gStringVar1, gUnknown_08400E23); + } + else if (numToAppend > curIndexToAppend) + { + StringAppend(gStringVar1, gUnknown_08400E29); + } + break; + case 1: + if (curIndexToAppend == numToAppend) + { + StringAppend(gStringVar1, gUnknown_08400E23); + } + else + { + StringAppend(gStringVar1, gUnknown_08400E29); + } + + StringAppend(gStringVar1, gUnknown_08400E30); + break; + case 3: + case 5: + case 7: + case 9: + default: + if (curIndexToAppend == numToAppend) + { + StringAppend(gStringVar1, gUnknown_08400E23); + } + else + { + StringAppend(gStringVar1, gUnknown_08400E29); + } + + StringAppend(gStringVar1, gUnknown_08400E2E); + break; + } + + StringAppend(gStringVar1, gSpeciesNames[species]); + } + + return curIndexToAppend; +} + +void CheckMonBattleTowerBanlist(u16 species, u16 heldItem, u16 hp, u8 battleTowerLevelType, u8 monLevel, u16 *validPartySpecies, u16 *validPartyHeldItems, u8 *numValid) +{ + s32 i; + u32 counter = 0; + + if (species == SPECIES_EGG || species == SPECIES_NONE) + return; + + while (1) + { + if (gBattleTowerBannedSpecies[counter] == 0xFFFF) + goto EXIT2; // Couldn't get the code to match without this GOTO + + if (gBattleTowerBannedSpecies[counter] == species) + break; + + counter++; + } + + if (gBattleTowerBannedSpecies[counter] != 0xFFFF) + return; + + EXIT2: + if (battleTowerLevelType == 0 && monLevel > 50) + return; + + for (i = 0; i < *numValid && validPartySpecies[i] != species ; i++); + if (i != *numValid) + return; + + if (heldItem != 0) + { + for (i = 0; i < *numValid && validPartyHeldItems[i] != heldItem ; i++); + if (i != *numValid) + return; + } + + validPartySpecies[*numValid] = species; + validPartyHeldItems[*numValid] = heldItem; + *numValid = *numValid + 1; +} + +void CheckPartyBattleTowerBanlist(void) +{ + s32 i; + u16 species2; + u16 heldItem; + u8 level; + u16 hp; + u32 numBanlistCaught; + u16 validPartySpecies[6]; + u16 validPartyHeldItems[6]; + u8 counter; + + counter = 0; + + for (i = 0; i < PARTY_SIZE; i++) + { + species2 = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2); + heldItem = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM); + level = GetMonData(&gPlayerParty[i], MON_DATA_LEVEL); + hp = GetMonData(&gPlayerParty[i], MON_DATA_HP); + + CheckMonBattleTowerBanlist(species2, heldItem, hp, gScriptResult, level, validPartySpecies, validPartyHeldItems, &counter); + } + + if (counter < 3) + { + gStringVar1[0] = 0xFF; + gSpecialVar_0x8004 = 1; + counter = 0; + + numBanlistCaught = CountBattleTowerBanlistCaught(); + + for (i = 0; gBattleTowerBannedSpecies[i] != 0xFFFF; i++) + { + counter = AppendBattleTowerBannedSpeciesName(gBattleTowerBannedSpecies[i], counter, numBanlistCaught); + } + + if (counter == 0) + { + StringAppend(gStringVar1, gUnknown_08400E2C); + StringAppend(gStringVar1, gUnknown_08400E32); + return; + } + + if (1 & counter) + StringAppend(gStringVar1, gUnknown_08400E2E); + else + StringAppend(gStringVar1, gUnknown_08400E2C); + + StringAppend(gStringVar1, gUnknown_08400E36); + } + else + { + gSpecialVar_0x8004 = 0; + gSaveBlock2.battleTower.battleTowerLevelType = gScriptResult; + } +} + +void PrintBattleTowerTrainerMessage(u16 *easyChat) +{ + sub_80EB544(gStringVar4, easyChat, 2, 3); +} + +void PrintBattleTowerTrainerGreeting(void) +{ + if (gSaveBlock2.battleTower.battleTowerTrainerId == BATTLE_TOWER_EREADER_TRAINER_ID) + { + PrintBattleTowerTrainerMessage(gSaveBlock2.battleTower.ereaderTrainer.greeting.easyChat); + } + else if (gSaveBlock2.battleTower.battleTowerTrainerId < BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID) + { + PrintBattleTowerTrainerMessage((u16 *)gBattleTowerTrainers[gSaveBlock2.battleTower.battleTowerTrainerId].greeting.easyChat); + } + else + { + PrintBattleTowerTrainerMessage(gSaveBlock2.battleTower.records[gSaveBlock2.battleTower.battleTowerTrainerId - BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID].greeting.easyChat); + } +} + +void sub_81354CC(void) +{ + s32 i; + u16 heldItem; + + switch (gSpecialVar_0x8004) + { + case 0: + break; + case 1: + for (i = 0; i < PARTY_SIZE; i++) + { + heldItem = GetMonData(&gSaveBlock1.playerParty[i], MON_DATA_HELD_ITEM); + SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, (u8 *)&heldItem); + } + break; + case 2: + PrintEReaderTrainerFarewellMessage(); + break; + } + + SetMainCallback2(c2_exit_to_overworld_1_continue_scripts_restart_music); +} + +void sub_8135534(u8 taskId) +{ + if (IsBattleTransitionDone() == TRUE) + { + gMain.savedCallback = sub_81354CC; + SetMainCallback2(sub_800E7C4); + DestroyTask(taskId); + } +} + +void sub_813556C(void) +{ + s32 i; + u16 heldItem; + u8 transition; + + switch (gSpecialVar_0x8004) + { + case 0: + gBattleTypeFlags = (BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_TRAINER); + gTrainerBattleOpponent = 0; + + FillBattleTowerTrainerParty(); + + CreateTask(sub_8135534, 1); + current_map_music_set__default_for_battle(0); + transition = BattleSetup_GetBattleTowerBattleTransition(); + BattleTransition_StartOnField(transition); + break; + case 1: + for (i = 0; i < PARTY_SIZE; i++) + { + heldItem = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM); + SetMonData(&gSaveBlock1.playerParty[i], MON_DATA_HELD_ITEM, (u8 *)&heldItem); + } + + CreateTask(sub_8135534, 1); + current_map_music_set__default_for_battle(0); + transition = BattleSetup_GetBattleTowerBattleTransition(); + BattleTransition_StartOnField(transition); + break; + case 2: + ZeroEnemyPartyMons(); + + for (i = 0; i < 3; i++) + { + sub_803ADE8(&gEnemyParty[i], &gSaveBlock2.battleTower.ereaderTrainer.party[i]); + } + + gBattleTypeFlags = (BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_TRAINER); + gTrainerBattleOpponent = 0; + + CreateTask(sub_8135534, 1); + current_map_music_set__default_for_battle(0); + transition = BattleSetup_GetBattleTowerBattleTransition(); + BattleTransition_StartOnField(transition); + break; + } +} + +void sub_8135668(void) +{ + s32 i; + u8 battleTowerLevelType = gSaveBlock2.battleTower.battleTowerLevelType; + + switch (gSpecialVar_0x8004) + { + case 0: + ewram160FB = gSaveBlock2.battleTower.var_4AE[battleTowerLevelType]; + gSaveBlock2.battleTower.var_4AE[battleTowerLevelType] = gSpecialVar_0x8005; + break; + case 1: + gSaveBlock2.battleTower.battleTowerLevelType = gSpecialVar_0x8005; + break; + case 2: + gSaveBlock2.battleTower.curChallengeBattleNum[battleTowerLevelType] = gSpecialVar_0x8005; + break; + case 3: + gSaveBlock2.battleTower.curStreakChallengesNum[battleTowerLevelType] = gSpecialVar_0x8005; + break; + case 4: + gSaveBlock2.battleTower.battleTowerTrainerId = gSpecialVar_0x8005; + break; + case 5: + for (i = 0; i < 3; i++) + { + gSaveBlock2.battleTower.selectedPartyMons[i] = gSelectedOrderFromParty[i]; + } + break; + case 6: + if (gSaveBlock2.battleTower.battleTowerTrainerId == BATTLE_TOWER_EREADER_TRAINER_ID) + { + ClearEReaderTrainer(&gSaveBlock2.battleTower.ereaderTrainer); + } + + if (gSaveBlock2.battleTower.totalBattleTowerWins < 9999) + { + gSaveBlock2.battleTower.totalBattleTowerWins++; + } + + gSaveBlock2.battleTower.curChallengeBattleNum[battleTowerLevelType]++; + sub_8135A3C(); + gScriptResult = gSaveBlock2.battleTower.curChallengeBattleNum[battleTowerLevelType]; + + gStringVar1[0] = gSaveBlock2.battleTower.curChallengeBattleNum[battleTowerLevelType] + 0xA1; + gStringVar1[1] = 0xFF; + break; + case 7: + if (gSaveBlock2.battleTower.curStreakChallengesNum[battleTowerLevelType] < 1430) + { + gSaveBlock2.battleTower.curStreakChallengesNum[battleTowerLevelType]++; + } + + sub_8135A3C(); + gScriptResult = gSaveBlock2.battleTower.curStreakChallengesNum[battleTowerLevelType]; + break; + case 8: + gSaveBlock2.battleTower.unk_554 = gSpecialVar_0x8005; + break; + case 9: + break; + case 10: + SetGameStat(GAME_STAT_BATTLE_TOWER_BEST_STREAK, gSaveBlock2.battleTower.bestBattleTowerWinStreak); + break; + case 11: + if (gSaveBlock2.battleTower.var_4AE[battleTowerLevelType] != 3) + { + ResetBattleTowerStreak(battleTowerLevelType); + } + break; + case 12: + gSaveBlock2.battleTower.var_4AE[battleTowerLevelType] = ewram160FB; + break; + case 13: + gSaveBlock2.battleTower.currentWinStreaks[battleTowerLevelType] = GetCurrentBattleTowerWinStreak(battleTowerLevelType); + break; + case 14: + gSaveBlock2.battleTower.lastStreakLevelType = gSaveBlock2.battleTower.battleTowerLevelType; + break; + } +} + +void sub_81358A4(void) +{ + u8 battleTowerLevelType = gSaveBlock2.battleTower.battleTowerLevelType; + + switch (gSpecialVar_0x8004) + { + case 0: + gScriptResult = gSaveBlock2.battleTower.var_4AE[battleTowerLevelType]; + break; + case 1: + gScriptResult = gSaveBlock2.battleTower.battleTowerLevelType; + break; + case 2: + gScriptResult = gSaveBlock2.battleTower.curChallengeBattleNum[battleTowerLevelType]; + break; + case 3: + gScriptResult = gSaveBlock2.battleTower.curStreakChallengesNum[battleTowerLevelType]; + break; + case 4: + gScriptResult = gSaveBlock2.battleTower.battleTowerTrainerId; + break; + case 5: + case 6: + case 7: + break; + case 8: + gScriptResult = gSaveBlock2.battleTower.unk_554; + break; + case 9: + gScriptResult = GetCurrentBattleTowerWinStreak(battleTowerLevelType); + break; + case 10: + SetGameStat(GAME_STAT_BATTLE_TOWER_BEST_STREAK, gSaveBlock2.battleTower.bestBattleTowerWinStreak); + break; + case 11: + ResetBattleTowerStreak(battleTowerLevelType); + break; + case 12: + gSaveBlock2.battleTower.var_4AE[battleTowerLevelType] = ewram160FB; + break; + case 13: + gSaveBlock2.battleTower.currentWinStreaks[battleTowerLevelType] = GetCurrentBattleTowerWinStreak(battleTowerLevelType); + break; + case 14: + gSaveBlock2.battleTower.lastStreakLevelType = gSaveBlock2.battleTower.battleTowerLevelType; + break; + } +} + +void sub_8135A14(void) +{ + s32 i; + + for (i = 0; i < 3; i++) + { + gSelectedOrderFromParty[i] = gSaveBlock2.battleTower.selectedPartyMons[i]; + } + + ReducePlayerPartyToThree(); +} + +#ifdef NONMATCHING +void sub_8135A3C(void) +{ + u8 battleTowerLevelType = gSaveBlock2.battleTower.battleTowerLevelType; + u16 winStreak = GetCurrentBattleTowerWinStreak(battleTowerLevelType); + + if (gSaveBlock2.battleTower.recordWinStreaks[battleTowerLevelType] < winStreak) + { + gSaveBlock2.battleTower.recordWinStreaks[battleTowerLevelType] = winStreak; + } + + if (gSaveBlock2.battleTower.recordWinStreaks[0] > gSaveBlock2.battleTower.recordWinStreaks[1]) + { + u16 streak = gSaveBlock2.battleTower.recordWinStreaks[0]; + SetGameStat(GAME_STAT_BATTLE_TOWER_BEST_STREAK, streak); + if (streak > 9999) + { + gSaveBlock2.battleTower.bestBattleTowerWinStreak = 9999; + } + else + { + gSaveBlock2.battleTower.bestBattleTowerWinStreak = streak; + } + } + else + { + u16 streak = gSaveBlock2.battleTower.recordWinStreaks[1]; + SetGameStat(GAME_STAT_BATTLE_TOWER_BEST_STREAK, streak); + if (streak > 9999) + { + gSaveBlock2.battleTower.bestBattleTowerWinStreak = 9999; + } + else + { + gSaveBlock2.battleTower.bestBattleTowerWinStreak = streak; + } + } +} +#else +__attribute__((naked)) +void sub_8135A3C(void) +{ + asm(".syntax unified\n\ + push {r4-r6,lr}\n\ + ldr r6, _08135A84 @ =gSaveBlock2\n\ + ldr r1, _08135A88 @ =0x00000554\n\ + adds r0, r6, r1\n\ + ldrb r4, [r0]\n\ + lsls r4, 31\n\ + lsrs r4, 31\n\ + adds r0, r4, 0\n\ + bl GetCurrentBattleTowerWinStreak\n\ + lsls r0, 16\n\ + lsrs r5, r0, 16\n\ + lsls r4, 1\n\ + movs r3, 0xAC\n\ + lsls r3, 3\n\ + adds r2, r6, r3\n\ + adds r4, r2\n\ + ldrh r0, [r4]\n\ + cmp r0, r5\n\ + bcs _08135A66\n\ + strh r5, [r4]\n\ +_08135A66:\n\ + ldr r0, _08135A8C @ =0x00000562\n\ + adds r1, r6, r0\n\ + ldrh r0, [r2]\n\ + ldrh r3, [r1]\n\ + cmp r0, r3\n\ + bls _08135A94\n\ + adds r5, r0, 0\n\ + movs r0, 0x20\n\ + adds r1, r5, 0\n\ + bl SetGameStat\n\ + ldr r1, _08135A90 @ =0x0000270f\n\ + cmp r5, r1\n\ + bhi _08135AA4\n\ + b _08135AB4\n\ + .align 2, 0\n\ +_08135A84: .4byte gSaveBlock2\n\ +_08135A88: .4byte 0x00000554\n\ +_08135A8C: .4byte 0x00000562\n\ +_08135A90: .4byte 0x0000270f\n\ +_08135A94:\n\ + ldrh r5, [r1]\n\ + movs r0, 0x20\n\ + adds r1, r5, 0\n\ + bl SetGameStat\n\ + ldr r1, _08135AAC @ =0x0000270f\n\ + cmp r5, r1\n\ + bls _08135AB4\n\ +_08135AA4:\n\ + ldr r2, _08135AB0 @ =0x00000572\n\ + adds r0, r6, r2\n\ + strh r1, [r0]\n\ + b _08135ABA\n\ + .align 2, 0\n\ +_08135AAC: .4byte 0x0000270f\n\ +_08135AB0: .4byte 0x00000572\n\ +_08135AB4:\n\ + ldr r3, _08135AC0 @ =0x00000572\n\ + adds r0, r6, r3\n\ + strh r5, [r0]\n\ +_08135ABA:\n\ + pop {r4-r6}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_08135AC0: .4byte 0x00000572\n\ + .syntax divided\n"); +} +#endif // NONMATCHING + +void sub_8135AC4(void) +{ + s32 i; + u8 trainerClass; + struct BattleTowerRecord *playerRecord = &gSaveBlock2.battleTower.playerRecord; + u8 battleTowerLevelType = gSaveBlock2.battleTower.battleTowerLevelType; + + if (gSaveBlock2.playerGender != MALE) + { + trainerClass = sFemaleTrainerClasses[(gSaveBlock2.playerTrainerId[0] + gSaveBlock2.playerTrainerId[1] + + gSaveBlock2.playerTrainerId[2] + gSaveBlock2.playerTrainerId[3]) % 20u]; + } + else + { + trainerClass = sMaleTrainerClasses[(gSaveBlock2.playerTrainerId[0] + gSaveBlock2.playerTrainerId[1] + + gSaveBlock2.playerTrainerId[2] + gSaveBlock2.playerTrainerId[3]) % 30u]; + } + + playerRecord->battleTowerLevelType = battleTowerLevelType; + playerRecord->trainerClass = trainerClass; + + copy_word_to_mem(playerRecord->trainerId, gSaveBlock2.playerTrainerId); + StringCopy8(playerRecord->name, gSaveBlock2.playerName); + + playerRecord->winStreak = GetCurrentBattleTowerWinStreak(battleTowerLevelType); + + for (i = 0; i < 6; i++) + { + playerRecord->greeting.easyChat[i] = gSaveBlock1.easyChats.unk2B28[i]; + } + + for (i = 0; i < 3; i++) + { + sub_803AF78(&gUnknown_030042FC[gSaveBlock2.battleTower.selectedPartyMons[i]], &playerRecord->party[i]); + } + + SetBattleTowerRecordChecksum(&gSaveBlock2.battleTower.playerRecord); + sub_8135A3C(); +} + +void sub_8135BA0(void) +{ + u8 battleTowerLevelType = gSaveBlock2.battleTower.battleTowerLevelType; + + if (gSpecialVar_0x8004 == 3 || gSpecialVar_0x8004 == 0) + { + if (gSaveBlock2.battleTower.curStreakChallengesNum[battleTowerLevelType] > 1 + || gSaveBlock2.battleTower.curChallengeBattleNum[battleTowerLevelType] > 1) + { + sub_8135AC4(); + } + } + + sub_8135CFC(); + + gSaveBlock2.battleTower.battleOutcome = gBattleOutcome; + + if (gSpecialVar_0x8004 != 3) + { + gSaveBlock2.battleTower.var_4AE[battleTowerLevelType] = gSpecialVar_0x8004; + } + + VarSet(VAR_0x4000, 0); + gSaveBlock2.battleTower.unk_554 = 1; + TrySavingData(EREADER_SAVE); +} + +void BattleTower_SoftReset(void) +{ + DoSoftReset(); +} + +void ValidateBattleTowerRecordChecksums(void) +{ + u32 i; + s32 recordIndex; + struct BattleTowerRecord *record; + u32 checksum; + + checksum = 0; + for (i = 0; i < (sizeof(struct BattleTowerRecord) / sizeof(u32)) - 1; i++) + { + checksum += ((u32 *)&gSaveBlock2.battleTower.playerRecord)[i]; + } + + if (gSaveBlock2.battleTower.playerRecord.checksum != checksum) + { + ClearBattleTowerRecord(&gSaveBlock2.battleTower.playerRecord); + } + + for (recordIndex = 0; recordIndex < 5; recordIndex++) + { + record = &gSaveBlock2.battleTower.records[recordIndex]; + checksum = 0; + for (i = 0; i < (sizeof(struct BattleTowerRecord) / sizeof(u32)) - 1; i++) + { + checksum += ((u32 *)record)[i]; + } + + if (gSaveBlock2.battleTower.records[recordIndex].checksum != checksum) + { + ClearBattleTowerRecord(&gSaveBlock2.battleTower.records[recordIndex]); + } + } +} + +void SetBattleTowerRecordChecksum(struct BattleTowerRecord *record) +{ + u32 i; + + record->checksum = 0; + for (i = 0; i < (sizeof(struct BattleTowerRecord) / sizeof(u32)) - 1; i++) + { + record->checksum += ((u32 *)record)[i]; + } +} + +void ClearBattleTowerRecord(struct BattleTowerRecord *record) +{ + u32 i; + + for (i = 0; i < sizeof(struct BattleTowerRecord) / sizeof(u32); i++) + { + ((u32 *)record)[i] = 0; + } +} + +void sub_8135CFC(void) +{ + s32 i; + + get_trainer_name(gSaveBlock2.battleTower.defeatedByTrainerName); + gSaveBlock2.battleTower.defeatedBySpecies = gBattleMons[1].species; + gSaveBlock2.battleTower.firstMonSpecies = gBattleMons[0].species; + + for (i = 0; i < POKEMON_NAME_LENGTH; i++) + { + gSaveBlock2.battleTower.firstMonNickname[i] = gBattleMons[0].nickname[i]; + } +} + +u16 GetCurrentBattleTowerWinStreak(u8 battleTowerLevelType) +{ + u16 winStreak = ((gSaveBlock2.battleTower.curStreakChallengesNum[battleTowerLevelType] - 1) * 7 - 1) + + gSaveBlock2.battleTower.curChallengeBattleNum[battleTowerLevelType]; + + if (winStreak > 9999) + { + return 9999; + } + + return winStreak; +} + +#ifdef NONMATCHING +void DetermineBattleTowerPrize(void) +{ + u16 prizeItem; + struct SaveBlock2 *saveBlock = &gSaveBlock2; + u8 battleTowerLevelType = saveBlock->battleTower.battleTowerLevelType; + + if (saveBlock->battleTower.curStreakChallengesNum[battleTowerLevelType] - 1 > 5) + { + prizeItem = sLongStreakPrizes[Random() % ARRAY_COUNT(sLongStreakPrizes)]; + } + else + { + prizeItem = sShortStreakPrizes[Random() % ARRAY_COUNT(sShortStreakPrizes)]; + } + + saveBlock->battleTower.prizeItem = prizeItem; +} +#else +__attribute__((naked)) +void DetermineBattleTowerPrize(void) +{ + asm(".syntax unified\n\ + push {r4,r5,lr}\n\ + ldr r5, _08135DB0 @ =gSaveBlock2\n\ + ldr r1, _08135DB4 @ =0x00000554\n\ + adds r0, r5, r1\n\ + ldrb r0, [r0]\n\ + lsls r0, 31\n\ + lsrs r0, 31\n\ + lsls r0, 1\n\ + ldr r2, _08135DB8 @ =0x0000055c\n\ + adds r1, r5, r2\n\ + adds r0, r1\n\ + ldrh r0, [r0]\n\ + subs r0, 0x1\n\ + cmp r0, 0x5\n\ + ble _08135DC0\n\ + bl Random\n\ + ldr r4, _08135DBC @ =sLongStreakPrizes\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + movs r1, 0x9\n\ + b _08135DCC\n\ + .align 2, 0\n\ +_08135DB0: .4byte gSaveBlock2\n\ +_08135DB4: .4byte 0x00000554\n\ +_08135DB8: .4byte 0x0000055c\n\ +_08135DBC: .4byte sLongStreakPrizes\n\ +_08135DC0:\n\ + bl Random\n\ + ldr r4, _08135DE8 @ =sShortStreakPrizes\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + movs r1, 0x6\n\ +_08135DCC:\n\ + bl __umodsi3\n\ + lsls r0, 16\n\ + lsrs r0, 15\n\ + adds r0, r4\n\ + ldrh r1, [r0]\n\ + movs r2, 0xAD\n\ + lsls r2, 3\n\ + adds r0, r5, r2\n\ + strh r1, [r0]\n\ + pop {r4,r5}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_08135DE8: .4byte sShortStreakPrizes\n\ + .syntax divided\n"); +} +#endif // NONMATCHING + +void GiveBattleTowerPrize(void) +{ + u8 battleTowerLevelType = gSaveBlock2.battleTower.battleTowerLevelType; + + if (AddBagItem(gSaveBlock2.battleTower.prizeItem, 1) == TRUE) + { + CopyItemName(gSaveBlock2.battleTower.prizeItem, gStringVar1); + gScriptResult = 1; + } + else + { + gScriptResult = 0; + gSaveBlock2.battleTower.var_4AE[battleTowerLevelType] = 6; + } +} + +void AwardBattleTowerRibbons() +{ + s32 i; + u32 partyIndex; + struct Pokemon *pokemon; + u8 ribbonType; + u8 battleTowerLevelType = gSaveBlock2.battleTower.battleTowerLevelType; + + ribbonType = MON_DATA_WINNING_RIBBON; + if (battleTowerLevelType != 0) + { + ribbonType = MON_DATA_VICTORY_RIBBON; + } + + gScriptResult = 0; + + if (GetCurrentBattleTowerWinStreak(battleTowerLevelType) > 55) + { + for (i = 0; i < 3; i++) + { + partyIndex = gSaveBlock2.battleTower.selectedPartyMons[i] - 1; + pokemon = &gPlayerParty[partyIndex]; + if (!GetMonData(pokemon, ribbonType)) + { + gScriptResult = 1; + SetMonData(pokemon, ribbonType, (u8 *)&gScriptResult); + } + } + } + + if (gScriptResult != 0) + { + IncrementGameStat(GAME_STAT_RECEIVED_RIBBONS); + } +} + +// This is a leftover debugging function that is used to populate the E-Reader +// trainer with the player's current data. +void Debug_FillEReaderTrainerWithPlayerData(void) +{ + struct BattleTowerEReaderTrainer *ereaderTrainer; + s32 i; + s32 j; + + ereaderTrainer = &gSaveBlock2.battleTower.ereaderTrainer; + + if (gSaveBlock2.playerGender != MALE) + { + ereaderTrainer->trainerClass = sFemaleTrainerClasses[(gSaveBlock2.playerTrainerId[0] + gSaveBlock2.playerTrainerId[1] + + gSaveBlock2.playerTrainerId[2] + gSaveBlock2.playerTrainerId[3]) % 20u]; + } + else + { + ereaderTrainer->trainerClass = sMaleTrainerClasses[(gSaveBlock2.playerTrainerId[0] + gSaveBlock2.playerTrainerId[1] + + gSaveBlock2.playerTrainerId[2] + gSaveBlock2.playerTrainerId[3]) % 30u]; + } + + copy_word_to_mem(ereaderTrainer->trainerId, gSaveBlock2.playerTrainerId); + StringCopy8(ereaderTrainer->name, gSaveBlock2.playerName); + + ereaderTrainer->winStreak = 1; + + j = 7; + for (i = 0; i < 6; i++) + { + ereaderTrainer->greeting.easyChat[i] = gSaveBlock1.easyChats.unk2B28[i]; + ereaderTrainer->farewellPlayerLost.easyChat[i] = j; + ereaderTrainer->farewellPlayerWon.easyChat[i] = j + 6; + j++; + } + + for (i = 0; i < 3; i++) + { + sub_803AF78(&gPlayerParty[i], &ereaderTrainer->party[i]); + } + + SetEReaderTrainerChecksum(ereaderTrainer); +} + +u8 GetEReaderTrainerPicIndex(void) +{ + return gTrainerClassToPicIndex[gSaveBlock2.battleTower.ereaderTrainer.trainerClass]; +} + +u8 GetEReaderTrainerClassNameIndex(void) +{ + return gTrainerClassToNameIndex[gSaveBlock2.battleTower.ereaderTrainer.trainerClass]; +} + +void SetEReaderTrainerName(u8 *trainerName) +{ + s32 i; + + for (i = 0; i < 7; i++) + { + trainerName[i] = gSaveBlock2.battleTower.ereaderTrainer.name[i]; + } + + trainerName[i] = 0xFF; +} + +// Checks if the saved E-Reader trainer is valid. +void ValidateEReaderTrainer(void) +{ + u32 i; + u32 checksum; + struct BattleTowerEReaderTrainer *ereaderTrainer; + + gScriptResult = 0; + ereaderTrainer = &gSaveBlock2.battleTower.ereaderTrainer; + + checksum = 0; + for (i = 0; i < sizeof(struct BattleTowerEReaderTrainer) / sizeof(u32) - 1; i++) + { + checksum |= ((u32 *)ereaderTrainer)[i]; + } + + if (checksum == 0) + { + gScriptResult = 1; + return; + } + + checksum = 0; + for (i = 0; i < sizeof(struct BattleTowerEReaderTrainer) / sizeof(u32) - 1; i++) + { + checksum += ((u32 *)ereaderTrainer)[i]; + } + + if (gSaveBlock2.battleTower.ereaderTrainer.checksum != checksum) + { + ClearEReaderTrainer(&gSaveBlock2.battleTower.ereaderTrainer); + gScriptResult = 1; + } +} + +void SetEReaderTrainerChecksum(struct BattleTowerEReaderTrainer *ereaderTrainer) +{ + s32 i; + + ereaderTrainer->checksum = 0; + for (i = 0; i < sizeof(struct BattleTowerEReaderTrainer) / sizeof(u32) - 1; i++) + { + ereaderTrainer->checksum += ((u32 *)ereaderTrainer)[i]; + } +} + +void ClearEReaderTrainer(struct BattleTowerEReaderTrainer *ereaderTrainer) +{ + u32 i; + + for (i = 0; i < sizeof(struct BattleTowerEReaderTrainer) / sizeof(u32); i++) + { + ((u32 *)ereaderTrainer)[i] = 0; + } +} + +void PrintEReaderTrainerGreeting(void) +{ + PrintBattleTowerTrainerMessage(gSaveBlock2.battleTower.ereaderTrainer.greeting.easyChat); +} + +void PrintEReaderTrainerFarewellMessage(void) +{ + if (gBattleOutcome == BATTLE_DREW) + { + gStringVar4[0] = 0xFF; + } + else if (gBattleOutcome == BATTLE_WON) + { + PrintBattleTowerTrainerMessage(gSaveBlock2.battleTower.ereaderTrainer.farewellPlayerWon.easyChat); + } + else + { + PrintBattleTowerTrainerMessage(gSaveBlock2.battleTower.ereaderTrainer.farewellPlayerLost.easyChat); + } +} + +void sub_813610C(void) +{ + s32 i; + + for (i = 0; i < 2; i++) + { + if (gSaveBlock2.battleTower.var_4AE[i] == 1) + { + sub_80BFD20(); + } + } +} + +#if GERMAN +u8 de_sub_81364AC(void) +{ + if (gSaveBlock2.battleTower.battleTowerTrainerId == BATTLE_TOWER_EREADER_TRAINER_ID) + { + return gSaveBlock2.battleTower.ereaderTrainer.trainerClass; + } + else if (gSaveBlock2.battleTower.battleTowerTrainerId >= BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID) + { + return gSaveBlock2.battleTower.records[gSaveBlock2.battleTower.battleTowerTrainerId - BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID].trainerClass; + } + else + { + return gBattleTowerTrainers[gSaveBlock2.battleTower.battleTowerTrainerId].trainerClass; + } +} + +u8 de_sub_81364F8(void) +{ + return gSaveBlock2.battleTower.ereaderTrainer.trainerClass; +} +#endif -- cgit v1.2.3 From 8082038e62f72be7b741eade0a3be200fb50827a Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Thu, 2 Nov 2017 18:23:34 -0700 Subject: Fix german build --- src/de_rom_8040FE0.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/de_rom_8040FE0.c b/src/de_rom_8040FE0.c index 5acdc3859..8cf510d6f 100644 --- a/src/de_rom_8040FE0.c +++ b/src/de_rom_8040FE0.c @@ -94,7 +94,7 @@ u8 *de_sub_8041024(s32 arg0, u32 arg1) { case 0x800: trainerClass = de_sub_81364F8(); - nameIndex = GetEReaderTrainerNameIndex(); + nameIndex = GetEReaderTrainerClassNameIndex(); if (trainerClass == TRAINER_CLASS_SCHOOL_KID_F) { return de_sub_8040FE0(FEMALE); @@ -196,7 +196,7 @@ _08041086:\n\ bl de_sub_81364F8\n\ lsls r0, 24\n\ lsrs r4, r0, 24\n\ - bl GetEReaderTrainerNameIndex\n\ + bl GetEReaderTrainerClassNameIndex\n\ b _08041070\n\ _08041094:\n\ movs r0, 0x1\n\ -- cgit v1.2.3 From 24b1dee67f5d91272f432cd2aee4ee92125fcbcb Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Thu, 2 Nov 2017 19:42:01 -0700 Subject: Use void for functions that have no args --- src/field/battle_tower.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/field/battle_tower.c b/src/field/battle_tower.c index 90ecc457a..06d692eae 100644 --- a/src/field/battle_tower.c +++ b/src/field/battle_tower.c @@ -817,7 +817,7 @@ void SetBattleTowerTrainerGfxId(u8 trainerIndex) VarSet(0x4010, MAP_OBJ_GFX_BOY_1); } -void SetEReaderTrainerGfxId() +void SetEReaderTrainerGfxId(void) { SetBattleTowerTrainerGfxId(BATTLE_TOWER_EREADER_TRAINER_ID); } @@ -1380,7 +1380,7 @@ void FillBattleTowerTrainerParty(void) } -u32 CountBattleTowerBanlistCaught() +u32 CountBattleTowerBanlistCaught(void) { s32 i; u32 numCaught = 0; @@ -2160,7 +2160,7 @@ void GiveBattleTowerPrize(void) } } -void AwardBattleTowerRibbons() +void AwardBattleTowerRibbons(void) { s32 i; u32 partyIndex; -- cgit v1.2.3 From 2f99edc6fd21d0af1bb05fae55302a46c744ffa6 Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Fri, 3 Nov 2017 02:43:41 -0400 Subject: NotInBattle --- src/battle/battle_7.c | 10 ++-- src/battle/battle_anim.c | 71 ++++++++++++++--------------- src/battle/battle_anim_807B69C.c | 2 +- src/battle/battle_anim_80A7E7C.c | 4 +- src/battle/battle_controller_linkopponent.c | 4 +- src/battle/battle_controller_linkpartner.c | 4 +- src/battle/battle_controller_opponent.c | 4 +- src/battle/battle_controller_player.c | 4 +- src/battle/battle_controller_wally.c | 4 +- src/rom_8077ABC.c | 54 +++++++++++----------- 10 files changed, 80 insertions(+), 81 deletions(-) (limited to 'src') diff --git a/src/battle/battle_7.c b/src/battle/battle_7.c index ad96510cf..1d68386aa 100644 --- a/src/battle/battle_7.c +++ b/src/battle/battle_7.c @@ -637,7 +637,7 @@ void sub_8031FC4(u8 a, u8 b, bool8 c) const void *src; void *dst; - if (IsContest()) + if (NotInBattle()) { r10 = 0; species = ewram19348.unk2; @@ -702,7 +702,7 @@ void sub_8031FC4(u8 a, u8 b, bool8 c) } BlendPalette(paletteOffset, 16, 6, 0x7FFF); CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, 32); - if (!IsContest()) + if (!NotInBattle()) { ewram17800[a].transformedSpecies = species; gBattleMonForms[a] = gBattleMonForms[b]; @@ -722,11 +722,11 @@ void BattleLoadSubstituteSprite(u8 a, u8 b) if (b == 0) { - if (IsContest()) + if (NotInBattle()) r4 = 0; else r4 = GetBankIdentity(a); - if (IsContest()) + if (NotInBattle()) LZDecompressVram(gSubstituteDollTilemap, gUnknown_081FAF4C[r4]); else if (GetBankSide(a) != 0) LZDecompressVram(gSubstituteDollGfx, gUnknown_081FAF4C[r4]); @@ -742,7 +742,7 @@ void BattleLoadSubstituteSprite(u8 a, u8 b) } else { - if (!IsContest()) + if (!NotInBattle()) { if (GetBankSide(a) != 0) BattleLoadOpponentMonSprite(&gEnemyParty[gBattlePartyID[a]], a); diff --git a/src/battle/battle_anim.c b/src/battle/battle_anim.c index 111d72813..5790cffe4 100644 --- a/src/battle/battle_anim.c +++ b/src/battle/battle_anim.c @@ -217,7 +217,7 @@ void DoMoveAnim(const u8 *const moveAnims[], u16 move, u8 c) { s32 i; - if (IsContest() == 0) + if (NotInBattle() == 0) { sub_8079E24(); sub_8043EB4(0); @@ -654,7 +654,7 @@ static void ScriptCmd_end(void) if (continuousAnim == FALSE) // may have been used for debug? { m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 256); - if (IsContest() == 0) + if (NotInBattle() == 0) { sub_8079E24(); sub_8043EB4(1); @@ -693,7 +693,7 @@ static void ScriptCmd_monbg(void) { r0 = GetBankIdentity(r5); r0 += 0xFF; - if (r0 <= 1 || IsContest() != 0) + if (r0 <= 1 || NotInBattle() != 0) r7 = 0; else r7 = 1; @@ -723,7 +723,7 @@ static void ScriptCmd_monbg(void) { r0 = GetBankIdentity(r5); r0 += 0xFF; - if (r0 <= 1 || IsContest() != 0) + if (r0 <= 1 || NotInBattle() != 0) r7 = 0; else r7 = 1; @@ -753,7 +753,7 @@ static void ScriptCmd_monbg(void) #ifdef NONMATCHING bool8 IsAnimBankSpriteVisible(u8 a) { - if (IsContest()) + if (NotInBattle()) { if (a == gBattleAnimBankAttacker) return TRUE; @@ -762,7 +762,7 @@ bool8 IsAnimBankSpriteVisible(u8 a) } if (!AnimBankSpriteExists(a)) return FALSE; - if (IsContest()) + if (NotInBattle()) return TRUE; // this line wont ever be reached. if (!(EWRAM_17800[a].unk0 & 1)) return TRUE; @@ -779,7 +779,7 @@ bool8 IsAnimBankSpriteVisible(u8 a) lsls r0, 24\n\ lsrs r4, r0, 24\n\ adds r5, r4, 0\n\ - bl IsContest\n\ + bl NotInBattle\n\ lsls r0, 24\n\ cmp r0, 0\n\ beq _08075FDC\n\ @@ -796,7 +796,7 @@ _08075FDC:\n\ lsls r0, 24\n\ cmp r0, 0\n\ beq _0807602C\n\ - bl IsContest\n\ + bl NotInBattle\n\ lsls r0, 24\n\ cmp r0, 0\n\ bne _0807601C\n\ @@ -877,7 +877,7 @@ void sub_8076034(u8 a, u8 b) spriteId = gObjectBankIDs[a]; gUnknown_030042C0 = -(gSprites[spriteId].pos1.x + gSprites[spriteId].pos2.x) + 32; - if (IsContest() != 0 && sub_80AEB1C(EWRAM_19348) != 0) + if (NotInBattle() != 0 && sub_80AEB1C(EWRAM_19348) != 0) gUnknown_030042C0--; gUnknown_030041B4 = -(gSprites[spriteId].pos1.y + gSprites[spriteId].pos2.y) + 32; gSprites[gObjectBankIDs[a]].invisible = TRUE; @@ -889,12 +889,12 @@ void sub_8076034(u8 a, u8 b) addr3 = (u16 *)PLTT + s.unk8 * 16; DmaCopy32(3, gPlttBufferUnfaded + 0x100 + a * 16, addr3, 32); - if (IsContest() != 0) + if (NotInBattle() != 0) r2 = 0; else r2 = GetBankIdentity(a); sub_80E4EF8(0, 0, r2, s.unk8, (u32)s.unk0, (((s32)s.unk4 - VRAM) / 2048), REG_BG1CNT_BITFIELD.charBaseBlock); - if (IsContest() != 0) + if (NotInBattle() != 0) sub_8076380(); } else @@ -996,7 +996,7 @@ void sub_8076464(u8 a) struct UnknownStruct2 s; sub_8078914(&s); - if (a == 0 || IsContest() != 0) + if (a == 0 || NotInBattle() != 0) { u16 *addr2; @@ -1121,7 +1121,7 @@ static void sub_807672C(u8 taskId) { var = GetBankIdentity(gTasks[taskId].data[2]); var += 0xFF; - if (var <= 1 || IsContest() != 0) + if (var <= 1 || NotInBattle() != 0) r4 = 0; else r4 = 1; @@ -1162,7 +1162,7 @@ static void ScriptCmd_monbg_22(void) { r0 = GetBankIdentity(r4); r0 += 0xFF; - if (r0 <= 1 || IsContest() != 0) + if (r0 <= 1 || NotInBattle() != 0) r1 = 0; else r1 = 1; @@ -1174,7 +1174,7 @@ static void ScriptCmd_monbg_22(void) { r0 = GetBankIdentity(r4); r0 += 0xFF; - if (r0 <= 1 || IsContest() != 0) + if (r0 <= 1 || NotInBattle() != 0) r1 = 0; else r1 = 1; @@ -1224,7 +1224,7 @@ static void sub_80769A4(u8 taskId) r4 = gTasks[taskId].data[2]; r0 = GetBankIdentity(r4); r0 += 0xFF; - if (r0 <= 1 || IsContest() != 0) + if (r0 <= 1 || NotInBattle() != 0) r5 = 0; else r5 = 1; @@ -1334,8 +1334,7 @@ static void ScriptCmd_jump(void) gBattleAnimScriptPtr = (u8 *)addr; } -// Uses of this function that rely on a TRUE return are expecting inBattle to not be ticked as defined in contest behavior. As a result, if misused, this function cannot reliably discern between field and contest status and could result in undefined behavior. -bool8 IsContest(void) +bool8 NotInBattle(void) { if (!gMain.inBattle) return TRUE; @@ -1369,7 +1368,7 @@ static void ScriptCmd_fadetobg_25(void) r6 = gBattleAnimScriptPtr[2]; gBattleAnimScriptPtr += 3; taskId = CreateTask(task_p5_load_battle_screen_elements, 5); - if (IsContest() != 0) + if (NotInBattle() != 0) gTasks[taskId].data[0] = r6; else if (GetBankSide(gBattleAnimBankTarget) == 0) gTasks[taskId].data[0] = r7; @@ -1416,15 +1415,15 @@ static void task_p5_load_battle_screen_elements(u8 taskId) static void sub_8076DB8(u16 a) { - if (IsContest()) + if (NotInBattle()) { void *tilemap = gBattleAnimBackgroundTable[a].tilemap; void *dmaSrc; void *dmaDest; - LZDecompressWram(tilemap, IsContest() ? EWRAM_14800 : EWRAM_18000); - sub_80763FC(sub_80789BC(), IsContest() ? EWRAM_14800 : EWRAM_18000, 0x100, 0); - dmaSrc = IsContest() ? EWRAM_14800 : EWRAM_18000; + LZDecompressWram(tilemap, NotInBattle() ? EWRAM_14800 : EWRAM_18000); + sub_80763FC(sub_80789BC(), NotInBattle() ? EWRAM_14800 : EWRAM_18000, 0x100, 0); + dmaSrc = NotInBattle() ? EWRAM_14800 : EWRAM_18000; dmaDest = (void *)(VRAM + 0xD000); DmaCopy32(3, dmaSrc, dmaDest, 0x800); LZDecompressVram(gBattleAnimBackgroundTable[a].image, (void *)(VRAM + 0x2000)); @@ -1440,7 +1439,7 @@ static void sub_8076DB8(u16 a) static void dp01t_11_3_message_for_player_only(void) { - if (IsContest()) + if (NotInBattle()) sub_80AB2AC(); else sub_800D7B8(); @@ -1493,14 +1492,14 @@ static void ScriptCmd_changebg(void) /* s8 sub_8076F98(s8 a) { - if (!IsContest() && (EWRAM_17810[gBattleAnimBankAttacker].unk0 & 0x10)) + if (!NotInBattle() && (EWRAM_17810[gBattleAnimBankAttacker].unk0 & 0x10)) { a = GetBankSide(gBattleAnimBankAttacker) ? 0xC0 : 0x3F; } //_08076FDC else { - if (IsContest()) + if (NotInBattle()) { if (gBattleAnimBankAttacker == gBattleAnimBankTarget && gBattleAnimBankAttacker == 2 && a == 0x3F) @@ -1536,7 +1535,7 @@ s8 sub_8076F98(s8 a) push {r4,lr}\n\ lsls r0, 24\n\ lsrs r4, r0, 24\n\ - bl IsContest\n\ + bl NotInBattle\n\ lsls r0, 24\n\ cmp r0, 0\n\ bne _08076FDC\n\ @@ -1564,7 +1563,7 @@ s8 sub_8076F98(s8 a) _08076FD4: .4byte gBattleAnimBankAttacker\n\ _08076FD8: .4byte 0x02017810\n\ _08076FDC:\n\ - bl IsContest\n\ + bl NotInBattle\n\ lsls r0, 24\n\ cmp r0, 0\n\ beq _08077004\n\ @@ -1661,7 +1660,7 @@ _08077088:\n\ s8 sub_8077094(s8 a) { - if (!IsContest() && (EWRAM_17810[gBattleAnimBankAttacker].unk0 & 0x10)) + if (!NotInBattle() && (EWRAM_17810[gBattleAnimBankAttacker].unk0 & 0x10)) { if (GetBankSide(gBattleAnimBankAttacker) != 0) a = 0x3F; @@ -1670,7 +1669,7 @@ s8 sub_8077094(s8 a) } else { - if (GetBankSide(gBattleAnimBankAttacker) != 0 || IsContest() != 0) + if (GetBankSide(gBattleAnimBankAttacker) != 0 || NotInBattle() != 0) a = -a; } return a; @@ -2108,7 +2107,7 @@ static void ScriptCmd_jumpunkcond(void) u8 *addr; gBattleAnimScriptPtr++; - if (IsContest()) + if (NotInBattle()) { addr = (u8 *)SCRIPT_READ_32(gBattleAnimScriptPtr); gBattleAnimScriptPtr = addr; @@ -2132,7 +2131,7 @@ static void ScriptCmd_monbgprio_28(void) else r0 = gBattleAnimBankAttacker; r4 = GetBankIdentity(r0); - if (!IsContest() && (r4 == 0 || r4 == 3)) + if (!NotInBattle() && (r4 == 0 || r4 == 3)) { REG_BG1CNT_BITFIELD.priority = 1; REG_BG2CNT_BITFIELD.priority = 2; @@ -2142,7 +2141,7 @@ static void ScriptCmd_monbgprio_28(void) static void ScriptCmd_monbgprio_29(void) { gBattleAnimScriptPtr++; - if (!IsContest()) + if (!NotInBattle()) { REG_BG1CNT_BITFIELD.priority = 1; REG_BG2CNT_BITFIELD.priority = 2; @@ -2164,7 +2163,7 @@ static void ScriptCmd_monbgprio_2A(void) else r0 = gBattleAnimBankAttacker; r4 = GetBankIdentity(r0); - if (!IsContest() && (r4 == 0 || r4 == 3)) + if (!NotInBattle() && (r4 == 0 || r4 == 3)) { REG_BG1CNT_BITFIELD.priority = 1; REG_BG2CNT_BITFIELD.priority = 2; @@ -2208,7 +2207,7 @@ static void ScriptCmd_doublebattle_2D(void) r7 = SCRIPT_READ_8(gBattleAnimScriptPtr + 1); gBattleAnimScriptPtr += 2; - if (!IsContest() && IsDoubleBattle() + if (!NotInBattle() && IsDoubleBattle() && GetBankSide(gBattleAnimBankAttacker) == GetBankSide(gBattleAnimBankTarget)) { if (r7 == 0) @@ -2242,7 +2241,7 @@ static void ScriptCmd_doublebattle_2E(void) r7 = SCRIPT_READ_8(gBattleAnimScriptPtr + 1); gBattleAnimScriptPtr += 2; - if (!IsContest() && IsDoubleBattle() + if (!NotInBattle() && IsDoubleBattle() && GetBankSide(gBattleAnimBankAttacker) == GetBankSide(gBattleAnimBankTarget)) { if (r7 == 0) diff --git a/src/battle/battle_anim_807B69C.c b/src/battle/battle_anim_807B69C.c index bf3eb7ef1..9acc7bd46 100644 --- a/src/battle/battle_anim_807B69C.c +++ b/src/battle/battle_anim_807B69C.c @@ -183,7 +183,7 @@ void sub_807B920(u8 taskId) s16 y = sub_8077ABC(gBattleAnimBankTarget, 3) - 36; u8 spriteId; - if (IsContest()) + if (NotInBattle()) x -= 6; REG_BLDCNT = 0x3F40; REG_BLDALPHA = 0x1000; diff --git a/src/battle/battle_anim_80A7E7C.c b/src/battle/battle_anim_80A7E7C.c index e0c79dc8e..19ac7143e 100644 --- a/src/battle/battle_anim_80A7E7C.c +++ b/src/battle/battle_anim_80A7E7C.c @@ -769,7 +769,7 @@ void sub_80A8E04(u8 taskId) TASK.data[4] = gBattleAnimArgs[1]; TASK.data[5] = spriteId; TASK.data[6] = gBattleAnimArgs[3]; - if (IsContest()) + if (NotInBattle()) { TASK.data[7] = 1; } @@ -786,7 +786,7 @@ void sub_80A8E04(u8 taskId) } if (TASK.data[7]) { - if (!IsContest()) + if (!NotInBattle()) { TASK.data[3] *= -1; TASK.data[4] *= -1; diff --git a/src/battle/battle_controller_linkopponent.c b/src/battle/battle_controller_linkopponent.c index 7b7c7ed82..70cd636bd 100644 --- a/src/battle/battle_controller_linkopponent.c +++ b/src/battle/battle_controller_linkopponent.c @@ -638,7 +638,7 @@ u32 dp01_getattr_by_ch1_for_player_pokemon__(u8 a, u8 *buffer) StringCopy10(battlePokemon.nickname, nickname); GetMonData(&gEnemyParty[a], MON_DATA_OT_NAME, battlePokemon.otName); - BAD_MEMSET_REVERSE(&battlePokemon, buffer, sizeof(battlePokemon), size, src) + BAD_MEMCPY(&battlePokemon, buffer, sizeof(battlePokemon), size, src) break; case 1: data16 = GetMonData(&gEnemyParty[a], MON_DATA_SPECIES); @@ -659,7 +659,7 @@ u32 dp01_getattr_by_ch1_for_player_pokemon__(u8 a, u8 *buffer) moveData.pp[size] = GetMonData(&gEnemyParty[a], MON_DATA_PP1 + size); } moveData.ppBonuses = GetMonData(&gEnemyParty[a], MON_DATA_PP_BONUSES); - BAD_MEMSET_REVERSE(&moveData, buffer, sizeof(moveData), size, src) + BAD_MEMCPY(&moveData, buffer, sizeof(moveData), size, src) break; case 4: case 5: diff --git a/src/battle/battle_controller_linkpartner.c b/src/battle/battle_controller_linkpartner.c index 7f3cf9d37..718afa6bd 100644 --- a/src/battle/battle_controller_linkpartner.c +++ b/src/battle/battle_controller_linkpartner.c @@ -593,7 +593,7 @@ u32 dp01_getattr_by_ch1_for_player_pokemon(u8 a, u8 *buffer) GetMonData(&gPlayerParty[a], MON_DATA_NICKNAME, nickname); StringCopy10(battlePokemon.nickname, nickname); GetMonData(&gPlayerParty[a], MON_DATA_OT_NAME, battlePokemon.otName); - BAD_MEMSET_REVERSE(&battlePokemon, buffer, sizeof(battlePokemon), size, src) + BAD_MEMCPY(&battlePokemon, buffer, sizeof(battlePokemon), size, src) break; case 1: data16 = GetMonData(&gPlayerParty[a], MON_DATA_SPECIES); @@ -614,7 +614,7 @@ u32 dp01_getattr_by_ch1_for_player_pokemon(u8 a, u8 *buffer) moveData.pp[size] = GetMonData(&gPlayerParty[a], MON_DATA_PP1 + size); } moveData.ppBonuses = GetMonData(&gPlayerParty[a], MON_DATA_PP_BONUSES); - BAD_MEMSET_REVERSE(&moveData, buffer, sizeof(moveData), size, src) + BAD_MEMCPY(&moveData, buffer, sizeof(moveData), size, src) break; case 4: case 5: diff --git a/src/battle/battle_controller_opponent.c b/src/battle/battle_controller_opponent.c index d9f24e6c2..c36f5fd82 100644 --- a/src/battle/battle_controller_opponent.c +++ b/src/battle/battle_controller_opponent.c @@ -601,7 +601,7 @@ u32 sub_8033598(u8 a, u8 *buffer) GetMonData(&gEnemyParty[a], MON_DATA_NICKNAME, nickname); StringCopy10(battlePokemon.nickname, nickname); GetMonData(&gEnemyParty[a], MON_DATA_OT_NAME, battlePokemon.otName); - BAD_MEMSET_REVERSE(&battlePokemon, buffer, sizeof(battlePokemon), size, src) + BAD_MEMCPY(&battlePokemon, buffer, sizeof(battlePokemon), size, src) break; case 1: data16 = GetMonData(&gEnemyParty[a], MON_DATA_SPECIES); @@ -622,7 +622,7 @@ u32 sub_8033598(u8 a, u8 *buffer) moveData.pp[size] = GetMonData(&gEnemyParty[a], MON_DATA_PP1 + size); } moveData.ppBonuses = GetMonData(&gEnemyParty[a], MON_DATA_PP_BONUSES); - BAD_MEMSET_REVERSE(&moveData, buffer, sizeof(moveData), size, src) + BAD_MEMCPY(&moveData, buffer, sizeof(moveData), size, src) break; case 4: case 5: diff --git a/src/battle/battle_controller_player.c b/src/battle/battle_controller_player.c index 62da661f0..70eeed5f7 100644 --- a/src/battle/battle_controller_player.c +++ b/src/battle/battle_controller_player.c @@ -1773,7 +1773,7 @@ u32 dp01_getattr_by_ch1_for_player_pokemon_(u8 a, u8 *buffer) GetMonData(&gPlayerParty[a], MON_DATA_NICKNAME, nickname); StringCopy10(battlePokemon.nickname, nickname); GetMonData(&gPlayerParty[a], MON_DATA_OT_NAME, battlePokemon.otName); - BAD_MEMSET_REVERSE(&battlePokemon, buffer, sizeof(battlePokemon), size, src) + BAD_MEMCPY(&battlePokemon, buffer, sizeof(battlePokemon), size, src) break; case 1: data16 = GetMonData(&gPlayerParty[a], MON_DATA_SPECIES); @@ -1794,7 +1794,7 @@ u32 dp01_getattr_by_ch1_for_player_pokemon_(u8 a, u8 *buffer) moveData.pp[size] = GetMonData(&gPlayerParty[a], MON_DATA_PP1 + size); } moveData.ppBonuses = GetMonData(&gPlayerParty[a], MON_DATA_PP_BONUSES); - BAD_MEMSET_REVERSE(&moveData, buffer, sizeof(moveData), size, src) + BAD_MEMCPY(&moveData, buffer, sizeof(moveData), size, src) break; case 4: case 5: diff --git a/src/battle/battle_controller_wally.c b/src/battle/battle_controller_wally.c index d2baa293b..eefdc5e50 100644 --- a/src/battle/battle_controller_wally.c +++ b/src/battle/battle_controller_wally.c @@ -569,7 +569,7 @@ u32 sub_8137A84(u8 a, u8 *buffer) GetMonData(&gPlayerParty[a], MON_DATA_NICKNAME, nickname); StringCopy10(battlePokemon.nickname, nickname); GetMonData(&gPlayerParty[a], MON_DATA_OT_NAME, battlePokemon.otName); - BAD_MEMSET_REVERSE(&battlePokemon, buffer, sizeof(battlePokemon), size, src) + BAD_MEMCPY(&battlePokemon, buffer, sizeof(battlePokemon), size, src) break; case 1: data16 = GetMonData(&gPlayerParty[a], MON_DATA_SPECIES); @@ -590,7 +590,7 @@ u32 sub_8137A84(u8 a, u8 *buffer) moveData.pp[size] = GetMonData(&gPlayerParty[a], MON_DATA_PP1 + size); } moveData.ppBonuses = GetMonData(&gPlayerParty[a], MON_DATA_PP_BONUSES); - BAD_MEMSET_REVERSE(&moveData, buffer, sizeof(moveData), size, src) + BAD_MEMCPY(&moveData, buffer, sizeof(moveData), size, src) break; case 4: case 5: diff --git a/src/rom_8077ABC.c b/src/rom_8077ABC.c index ef9eb36a8..285c992ca 100644 --- a/src/rom_8077ABC.c +++ b/src/rom_8077ABC.c @@ -187,7 +187,7 @@ u8 sub_8077ABC(u8 slot, u8 a2) { u16 species; struct TransformStatus *transform; - if (IsContest()) { + if (NotInBattle()) { if (a2 == 3 && slot == 3) { a2 = 1; } @@ -203,7 +203,7 @@ u8 sub_8077ABC(u8 slot, u8 a2) { case 3: case 4: default: - if (IsContest()) { + if (NotInBattle()) { if (unk_2019348.field_4 & 1) { species = unk_2019348.field_2; } else { @@ -243,9 +243,9 @@ u8 sub_8077BFC(u8 slot, u16 species) { u8 ret; u16 var; - if (!GetBankSide(slot) || IsContest()) { + if (!GetBankSide(slot) || NotInBattle()) { if (species == SPECIES_UNOWN) { - if (IsContest()) { + if (NotInBattle()) { if (unk_2019348.field_4 & 1) { personality = unk_2019348.field_10; } else { @@ -302,7 +302,7 @@ u8 sub_8077BFC(u8 slot, u16 species) { u8 sub_8077DD8(u8 slot, u16 species) { u8 ret = 0; if (GetBankSide(slot) == 1) { - if (!IsContest()) { + if (!NotInBattle()) { if (species == SPECIES_CASTFORM) { ret = gCastformElevations[gBattleMonForms[slot]]; } else if (species > NUM_SPECIES) { @@ -318,7 +318,7 @@ u8 sub_8077DD8(u8 slot, u16 species) { u8 sub_8077E44(u8 slot, u16 species, u8 a3) { u16 offset; u8 y; - if (GetBankSide(slot) == 0 || IsContest()) { + if (GetBankSide(slot) == 0 || NotInBattle()) { offset = sub_8077BFC(slot, species); } else { offset = sub_8077BFC(slot, species); @@ -338,7 +338,7 @@ u8 sub_8077EE4(u8 slot, u8 a2) { u16 species; struct TransformStatus *transform; if (a2 == 3 || a2 == 4) { - if (IsContest()) { + if (NotInBattle()) { if (unk_2019348.field_4 & 1) { species = unk_2019348.field_2; } else { @@ -381,7 +381,7 @@ u8 sub_8077FC0(u8 slot) { u8 r6; struct TransformStatus *transform; r6 = sub_8077ABC(slot, 1); - if (!IsContest()) { + if (!NotInBattle()) { if (GetBankSide(slot)) { transform = &gTransformStatuses[slot]; if (!transform->species) { @@ -752,7 +752,7 @@ u8 GetBankByPlayerAI(u8 slot) { } bool8 AnimBankSpriteExists(u8 slot) { - if (IsContest()) { + if (NotInBattle()) { if (gBattleAnimBankAttacker == slot) { return TRUE; } @@ -782,7 +782,7 @@ bool8 IsDoubleBattle() { } void sub_8078914(struct Struct_sub_8078914 *unk) { - if (IsContest()) { + if (NotInBattle()) { unk->field_0 = (u8 *)0x6008000; unk->field_4 = (u8 *)0x600f000; unk->field_8 = 0xe; @@ -794,7 +794,7 @@ void sub_8078914(struct Struct_sub_8078914 *unk) { } void sub_8078954(struct Struct_sub_8078914 *unk) { - if (IsContest()) { + if (NotInBattle()) { unk->field_0 = (u8 *)0x6008000; unk->field_4 = (u8 *)0x600f000; unk->field_8 = 0xe; @@ -810,7 +810,7 @@ void sub_8078954(struct Struct_sub_8078914 *unk) { } u8 sub_80789BC() { - if (IsContest()) { + if (NotInBattle()) { return 1; } return 2; @@ -820,7 +820,7 @@ void sub_80789D4(bool8 a1) { if (!a1) { BG3CNT.size = 0; BG3CNT.overflow = 1; - } else if (IsContest()) { + } else if (NotInBattle()) { BG3CNT.size = 0; BG3CNT.overflow = 1; } else { @@ -1025,7 +1025,7 @@ void obj_id_set_rotscale(u8 sprite, s16 xScale, s16 yScale, u16 rotation) { } bool8 sub_8078E38() { - if (IsContest()) { + if (NotInBattle()) { if (gSprites[GetAnimBankSpriteId(0)].data2 == 0xc9 /* XXX SPECIES_UNOWN? */) { return FALSE; } @@ -1037,12 +1037,12 @@ bool8 sub_8078E38() { void sub_8078E70(u8 sprite, u8 a2) { struct Struct_2017810 *unk; u8 r7 = gSprites[sprite].data0; - if (IsContest() || IsAnimBankSpriteVisible(r7)) { + if (NotInBattle() || IsAnimBankSpriteVisible(r7)) { gSprites[sprite].invisible = FALSE; } gSprites[sprite].oam.objMode = a2; gSprites[sprite].affineAnimPaused = TRUE; - if (!IsContest() && !gSprites[sprite].oam.affineMode) { + if (!NotInBattle() && !gSprites[sprite].oam.affineMode) { unk = &unk_2017810[r7]; gSprites[sprite].oam.matrixNum = unk->field_6; } @@ -1135,7 +1135,7 @@ u32 sub_80791A8(u8 a1, u8 a2, u8 a3, u8 a4, u8 a5, u8 a6, u8 a7) { u32 var = 0; u32 shift; if (a1) { - if (!IsContest()) { + if (!NotInBattle()) { var = 0xe; } else { var = 1 << sub_80789BC(); @@ -1162,14 +1162,14 @@ u32 sub_80791A8(u8 a1, u8 a2, u8 a3, u8 a4, u8 a5, u8 a6, u8 a7) { } } if (a6) { - if (!IsContest()) { + if (!NotInBattle()) { var |= 0x100; } else { var |= 0x4000; } } if (a7) { - if (!IsContest()) { + if (!NotInBattle()) { var |= 0x200; } } @@ -1179,7 +1179,7 @@ u32 sub_80791A8(u8 a1, u8 a2, u8 a3, u8 a4, u8 a5, u8 a6, u8 a7) { u32 sub_80792C0(u8 a1, u8 a2, u8 a3, u8 a4) { u32 var = 0; u32 shift; - if (IsContest()) { + if (NotInBattle()) { if (a1) { var |= 1 << 18; return var; @@ -1540,7 +1540,7 @@ u16 sub_8079B10(u8 sprite) { u16 i; for (i = 0; i < (sizeof(gBattleMonSprites) / sizeof(u8)); i++) { if (gBattleMonSprites[i] == sprite) { - if (IsContest()) { + if (NotInBattle()) { species = unk_2019348.field_0; return gMonBackPicCoords[species].y_offset; } else { @@ -1653,7 +1653,7 @@ void sub_8079E24() { u8 sub_8079E90(u8 slot) { u8 status; u8 ret; - if (IsContest()) { + if (NotInBattle()) { if (slot == 2) { return 30; } else { @@ -1676,7 +1676,7 @@ u8 sub_8079E90(u8 slot) { u8 sub_8079ED4(u8 slot) { u8 status = GetBankIdentity(slot); - if (IsContest()) { + if (NotInBattle()) { return 2; } if (status == 0 || status == 3) { @@ -1688,7 +1688,7 @@ u8 sub_8079ED4(u8 slot) { u8 GetBankIdentity_permutated(u8 slot) { u8 status; - if (!IsContest()) { + if (!NotInBattle()) { status = GetBankIdentity(slot); if (status == 0 || status == 3) { return 2; @@ -1744,7 +1744,7 @@ u8 sub_8079F44(u16 species, u8 isBackpic, u8 a3, s16 a4, s16 a5, u8 a6, u32 a7, } else { sprite = CreateSprite(&gSpriteTemplate_837F5B0[a3], a4, a5 + gMonBackPicCoords[species].y_offset, a6); } - if (IsContest()) { + if (NotInBattle()) { gSprites[sprite].affineAnims = &gSpriteAffineAnimTable_81E7C18; StartSpriteAffineAnim(&gSprites[sprite], 0); } @@ -1763,7 +1763,7 @@ int sub_807A100(u8 slot, u8 a2) { int ret; const struct MonCoords *coords; struct TransformStatus *transform; - if (IsContest()) { + if (NotInBattle()) { if (unk_2019348.field_4 & 1) { species = unk_2019348.field_2; personality = unk_2019348.field_10; @@ -1870,7 +1870,7 @@ void sub_807A3FC(u8 slot, u8 a2, s16 *a3, s16 *a4) { } v3 = sub_8077ABC(slot, v1); v4 = sub_8077ABC(slot, v2); - if (IsDoubleBattle() && !IsContest()) { + if (IsDoubleBattle() && !NotInBattle()) { v5 = sub_8077ABC(slot ^ 2, v1); v6 = sub_8077ABC(slot ^ 2, v2); } else { -- cgit v1.2.3 From 67ea254871134d850e013ee72bd4275b40e8091b Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Fri, 3 Nov 2017 19:09:40 -0400 Subject: BG_CHAR_ADDR and BG_SCREEN_ADDR recast fixes --- src/battle/battle_2.c | 34 +-- src/battle/battle_4.c | 520 ++++++++++++++++------------------ src/battle/battle_ai.c | 174 ++++++------ src/battle/battle_anim.c | 139 +++++---- src/battle/battle_controller_player.c | 2 +- src/battle/battle_controller_safari.c | 2 +- src/battle/battle_records.c | 2 +- src/battle/battle_setup.c | 23 +- src/engine/link.c | 2 +- src/engine/text.c | 226 +++++++-------- src/engine/trade.c | 52 ++-- src/field/pokeblock.c | 2 +- src/field/slot_machine.c | 10 +- src/pokemon/pokedex_cry_screen.c | 2 +- src/rom3.c | 4 +- 15 files changed, 582 insertions(+), 612 deletions(-) (limited to 'src') diff --git a/src/battle/battle_2.c b/src/battle/battle_2.c index e6bad0d6b..32ffc57d4 100644 --- a/src/battle/battle_2.c +++ b/src/battle/battle_2.c @@ -1927,11 +1927,7 @@ void bc_801333C(void) if (gBattleExecBuffer == 0) { - struct - { - u16 hp; - u32 status; - } sp0[6]; + struct HpAndStatus hpStatus[6]; if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) { @@ -1940,17 +1936,17 @@ void bc_801333C(void) if (GetMonData(&gEnemyParty[i], MON_DATA_SPECIES2) == 0 || GetMonData(&gEnemyParty[i], MON_DATA_SPECIES2) == SPECIES_EGG) { - sp0[i].hp = 0xFFFF; - sp0[i].status = 0; + hpStatus[i].hp = 0xFFFF; + hpStatus[i].status = 0; } else { - sp0[i].hp = GetMonData(&gEnemyParty[i], MON_DATA_HP); - sp0[i].status = GetMonData(&gEnemyParty[i], MON_DATA_STATUS); + hpStatus[i].hp = GetMonData(&gEnemyParty[i], MON_DATA_HP); + hpStatus[i].status = GetMonData(&gEnemyParty[i], MON_DATA_STATUS); } } gActiveBank = GetBankByPlayerAI(1); - Emitcmd48(0, (u8 *)sp0, 0x80); + EmitDrawPartyStatusSummary(0, hpStatus, 0x80); MarkBufferBankForExecution(gActiveBank); for (i = 0; i < 6; i++) @@ -1958,17 +1954,17 @@ void bc_801333C(void) if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2) == 0 || GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2) == SPECIES_EGG) { - sp0[i].hp = 0xFFFF; - sp0[i].status = 0; + hpStatus[i].hp = 0xFFFF; + hpStatus[i].status = 0; } else { - sp0[i].hp = GetMonData(&gPlayerParty[i], MON_DATA_HP); - sp0[i].status = GetMonData(&gPlayerParty[i], MON_DATA_STATUS); + hpStatus[i].hp = GetMonData(&gPlayerParty[i], MON_DATA_HP); + hpStatus[i].status = GetMonData(&gPlayerParty[i], MON_DATA_STATUS); } } gActiveBank = GetBankByPlayerAI(0); - Emitcmd48(0, (u8 *)sp0, 0x80); + EmitDrawPartyStatusSummary(0, hpStatus, 0x80); MarkBufferBankForExecution(gActiveBank); gBattleMainFunc = bc_battle_begin_message; @@ -1983,13 +1979,13 @@ void bc_801333C(void) if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2) == 0 || GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2) == SPECIES_EGG) { - sp0[i].hp = 0xFFFF; - sp0[i].status = 0; + hpStatus[i].hp = 0xFFFF; + hpStatus[i].status = 0; } else { - sp0[i].hp = GetMonData(&gPlayerParty[i], MON_DATA_HP); - sp0[i].status = GetMonData(&gPlayerParty[i], MON_DATA_STATUS); + hpStatus[i].hp = GetMonData(&gPlayerParty[i], MON_DATA_HP); + hpStatus[i].status = GetMonData(&gPlayerParty[i], MON_DATA_STATUS); } } diff --git a/src/battle/battle_4.c b/src/battle/battle_4.c index a3b7ac41f..9a44a1242 100644 --- a/src/battle/battle_4.c +++ b/src/battle/battle_4.c @@ -220,18 +220,6 @@ extern u8 gUnknown_081D8C65[]; extern u8 gUnknown_081D9156[]; extern u8 gUnknown_081D9468[]; - -//useful macros -//read via orr -#define BSScriptRead32(ptr) ((ptr)[0] | (ptr)[1] << 8 | (ptr)[2] << 16 | (ptr)[3] << 24) -#define BSScriptRead8(ptr) (((u8)((ptr)[0]))) -#define BSScriptReadPtr(ptr) ((void *)BSScriptRead32(ptr)) - -//read via add -#define BS2ScriptRead32(ptr) ((ptr)[0] + ((ptr)[1] << 8) + ((ptr)[2] << 16) + ((ptr)[3] << 24)) -#define BS2ScriptRead16(ptr) ((ptr)[0] + ((ptr)[1] << 8)) -#define BS2ScriptReadPtr(ptr) ((void *)BS2ScriptRead32(ptr)) - #define TargetProtectAffected ((gProtectStructs[gBankTarget].protected && gBattleMoves[gCurrentMove].flags & FLAG_PROTECT_AFFECTED)) //array entries for battle communication @@ -1119,7 +1107,7 @@ static void JumpIfMoveFailed(u8 adder, u16 move) { gMoveHitWith[gBankTarget] = 0; gUnknown_02024C44[gBankTarget] = 0; - to_store = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + to_store = T1_READ_PTR(gBattlescriptCurrInstr + 1); } else { @@ -1200,13 +1188,13 @@ static bool8 AccuracyCalcHelper(u16 move) static void atk01_accuracycheck(void) { - u16 move = BS2ScriptRead16(gBattlescriptCurrInstr + 5); + u16 move = T2_READ_16(gBattlescriptCurrInstr + 5); if (move == 0xFFFE || move == 0xFFFF) { if (gStatuses3[gBankTarget] & STATUS3_ALWAYS_HITS && move == 0xFFFF && gDisableStructs[gBankTarget].bankWithSureHit == gBankAttacker) gBattlescriptCurrInstr += 7; else if (gStatuses3[gBankTarget] & (STATUS3_ON_AIR | STATUS3_UNDERGROUND | STATUS3_UNDERWATER)) - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); else if (!JumpIfMoveAffectedByProtect(0)) gBattlescriptCurrInstr += 7; } @@ -1891,7 +1879,7 @@ static void atk0B_healthbarupdate(void) if (gBattleMoveFlags & MOVESTATUS_NOEFFECT) goto END; - gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + gActiveBank = GetBattleBank(T2_READ_8(gBattlescriptCurrInstr + 1)); if (gBattleMons[gActiveBank].status2 & STATUS2_SUBSTITUTE && gDisableStructs[gActiveBank].substituteHP && !(gHitMarker & HITMARKER_IGNORE_SUBSTITUTE)) { @@ -1930,7 +1918,7 @@ static void atk0C_datahpupdate(void) if (!(gBattleMoveFlags & MOVESTATUS_NOEFFECT)) { - gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + gActiveBank = GetBattleBank(T2_READ_8(gBattlescriptCurrInstr + 1)); if (gBattleMons[gActiveBank].status2 & STATUS2_SUBSTITUTE && gDisableStructs[gActiveBank].substituteHP && !(gHitMarker & HITMARKER_IGNORE_SUBSTITUTE)) { if (gDisableStructs[gActiveBank].substituteHP >= gBattleMoveDamage) @@ -1975,7 +1963,7 @@ static void atk0C_datahpupdate(void) else { gTakenDmg[gActiveBank] += gBattleMoveDamage; - if (BSScriptRead8(gBattlescriptCurrInstr + 1) == 0) + if (T2_READ_8(gBattlescriptCurrInstr + 1) == 0) gTakenDmgBanks[gActiveBank] = gBankAttacker; else gTakenDmgBanks[gActiveBank] = gBankTarget; @@ -1999,7 +1987,7 @@ static void atk0C_datahpupdate(void) { gProtectStructs[gActiveBank].physicalDmg = gHP_dealt; gSpecialStatuses[gActiveBank].moveturnLostHP_physical = gHP_dealt; - if (BSScriptRead8(gBattlescriptCurrInstr + 1) == 0) + if (T2_READ_8(gBattlescriptCurrInstr + 1) == 0) { gProtectStructs[gActiveBank].physicalBank = gBankAttacker; gSpecialStatuses[gActiveBank].moveturnPhysicalBank = gBankAttacker; @@ -2014,7 +2002,7 @@ static void atk0C_datahpupdate(void) { gProtectStructs[gActiveBank].specialDmg = gHP_dealt; gSpecialStatuses[gActiveBank].moveturnLostHP_special = gHP_dealt; - if (BSScriptRead8(gBattlescriptCurrInstr + 1) == 0) + if (T2_READ_8(gBattlescriptCurrInstr + 1) == 0) { gProtectStructs[gActiveBank].specialBank = gBankAttacker; gSpecialStatuses[gActiveBank].moveturnSpecialBank = gBankAttacker; @@ -2033,7 +2021,7 @@ static void atk0C_datahpupdate(void) } else { - gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + gActiveBank = GetBattleBank(T2_READ_8(gBattlescriptCurrInstr + 1)); if (gSpecialStatuses[gActiveBank].moveturnLostHP == 0) gSpecialStatuses[gActiveBank].moveturnLostHP = 0xFFFF; } @@ -2188,7 +2176,7 @@ static void atk10_printstring(void) { if (gBattleExecBuffer == 0) { - u16 var = BS2ScriptRead16(gBattlescriptCurrInstr + 1); + u16 var = T2_READ_16(gBattlescriptCurrInstr + 1); PrepareStringBattle(var, gBankAttacker); gBattlescriptCurrInstr += 3; gBattleCommunication[MSG_DISPLAY] = 1; @@ -2198,7 +2186,7 @@ static void atk10_printstring(void) static void atk11_printstring_playeronly(void) { gActiveBank = gBankAttacker; - EmitPrintStringPlayerOnly(0, BS2ScriptRead16(gBattlescriptCurrInstr + 1)); + EmitPrintStringPlayerOnly(0, T2_READ_16(gBattlescriptCurrInstr + 1)); MarkBufferBankForExecution(gActiveBank); gBattlescriptCurrInstr += 3; gBattleCommunication[MSG_DISPLAY] = 1; @@ -2214,7 +2202,7 @@ static void atk12_waitmessage(void) } else { - u16 to_wait = BS2ScriptRead16(gBattlescriptCurrInstr + 1); + u16 to_wait = T2_READ_16(gBattlescriptCurrInstr + 1); if (++gPauseCounterBattle >= to_wait) { gPauseCounterBattle = 0; @@ -2229,7 +2217,7 @@ static void atk13_printfromtable(void) { if (gBattleExecBuffer == 0) { - u16 *ptr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + u16 *ptr = (u16 *)T1_READ_PTR(gBattlescriptCurrInstr + 1); ptr += gBattleCommunication[MULTISTRING_CHOOSER]; PrepareStringBattle(*(u16*)ptr, gBankAttacker); gBattlescriptCurrInstr += 5; @@ -2241,7 +2229,7 @@ static void atk14_printfromtable_playeronly(void) { if (gBattleExecBuffer == 0) { - u16 *ptr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + u16 *ptr = (u16 *)T1_READ_PTR(gBattlescriptCurrInstr + 1); // FIXME ptr += gBattleCommunication[MULTISTRING_CHOOSER]; gActiveBank = gBankAttacker; EmitPrintStringPlayerOnly(0, *(u16*)ptr); @@ -4961,7 +4949,7 @@ static void atk17_seteffectsecondary(void) static void atk18_status_effect_clear(void) { - gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + gActiveBank = GetBattleBank(T2_READ_8(gBattlescriptCurrInstr + 1)); if (gBattleCommunication[MOVE_EFFECT_BYTE] <= 6) gBattleMons[gActiveBank].status1 &= (~gStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]]); else @@ -4981,7 +4969,7 @@ static void atk19_faint_pokemon(void) gActiveBank = GetBattleBank(gBattlescriptCurrInstr[1]); if (gHitMarker & HITMARKER_FAINTED(gActiveBank)) { - r4 = BSScriptReadPtr(gBattlescriptCurrInstr + 3); + r4 = T1_READ_PTR(gBattlescriptCurrInstr + 3); b_movescr_stack_pop_cursor(); gBattlescriptCurrInstr = r4; @@ -5079,7 +5067,7 @@ static void atk1A_faint_animation(void) { if (gBattleExecBuffer == 0) { - gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + gActiveBank = GetBattleBank(T2_READ_8(gBattlescriptCurrInstr + 1)); Emitcmd10(0); MarkBufferBankForExecution(gActiveBank); gBattlescriptCurrInstr += 2; @@ -5091,7 +5079,7 @@ static void atk1B_faint_effects_clear(void) //Clears things like attraction or trapping to other banks if (gBattleExecBuffer == 0) { - gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + gActiveBank = GetBattleBank(T2_READ_8(gBattlescriptCurrInstr + 1)); gBattleMons[gActiveBank].status1 = 0; EmitSetAttributes(0, REQUEST_STATUS_BATTLE, 0, 0x4, &gBattleMons[gActiveBank].status1); MarkBufferBankForExecution(gActiveBank); @@ -5102,9 +5090,9 @@ static void atk1B_faint_effects_clear(void) static void atk1C_jumpifstatus(void) { - u8 bank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); - u32 flags = BS2ScriptRead32(gBattlescriptCurrInstr + 2); - void* jump_loc = BS2ScriptReadPtr(gBattlescriptCurrInstr + 6); + u8 bank = GetBattleBank(T2_READ_8(gBattlescriptCurrInstr + 1)); + u32 flags = T2_READ_32(gBattlescriptCurrInstr + 2); + void* jump_loc = T2_READ_PTR(gBattlescriptCurrInstr + 6); if (gBattleMons[bank].status1 & flags && gBattleMons[bank].hp) gBattlescriptCurrInstr = jump_loc; else @@ -5113,9 +5101,9 @@ static void atk1C_jumpifstatus(void) static void atk1D_jumpifstatus2(void) { - u8 bank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); - u32 flags = BS2ScriptRead32(gBattlescriptCurrInstr + 2); - void* jump_loc = BS2ScriptReadPtr(gBattlescriptCurrInstr + 6); + u8 bank = GetBattleBank(T2_READ_8(gBattlescriptCurrInstr + 1)); + u32 flags = T2_READ_32(gBattlescriptCurrInstr + 2); + void* jump_loc = T2_READ_PTR(gBattlescriptCurrInstr + 6); if (gBattleMons[bank].status2 & flags && gBattleMons[bank].hp) gBattlescriptCurrInstr = jump_loc; else @@ -5125,9 +5113,9 @@ static void atk1D_jumpifstatus2(void) static void atk1E_jumpifability(void) { u8 bank; - u8 ability = BSScriptRead8(gBattlescriptCurrInstr + 2); - void* jump_loc = BS2ScriptReadPtr(gBattlescriptCurrInstr + 3); - if (BSScriptRead8(gBattlescriptCurrInstr + 1) == 8) + u8 ability = T2_READ_8(gBattlescriptCurrInstr + 2); + void* jump_loc = T2_READ_PTR(gBattlescriptCurrInstr + 3); + if (T2_READ_8(gBattlescriptCurrInstr + 1) == 8) { bank = AbilityBattleEffects(ABILITYEFFECT_CHECK_BANK_SIDE, gBankAttacker, ability, 0, 0); if (bank) @@ -5140,7 +5128,7 @@ static void atk1E_jumpifability(void) else gBattlescriptCurrInstr += 7; } - else if (BSScriptRead8(gBattlescriptCurrInstr + 1) == 9) + else if (T2_READ_8(gBattlescriptCurrInstr + 1) == 9) { bank = AbilityBattleEffects(ABILITYEFFECT_CHECK_OTHER_SIDE, gBankAttacker, ability, 0, 0); if (bank) @@ -5155,7 +5143,7 @@ static void atk1E_jumpifability(void) } else { - bank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + bank = GetBattleBank(T2_READ_8(gBattlescriptCurrInstr + 1)); if (gBattleMons[bank].ability == ability) { gLastUsedAbility = ability; @@ -5173,13 +5161,13 @@ static void atk1F_jumpifsideaffecting(void) u8 side; u16 flags; void* jump_loc; - if (BSScriptRead8(gBattlescriptCurrInstr + 1) == 1) + if (T2_READ_8(gBattlescriptCurrInstr + 1) == 1) side = GetBankIdentity(gBankAttacker) & 1; else side = GetBankIdentity(gBankTarget) & 1; - flags = BS2ScriptRead16(gBattlescriptCurrInstr + 2); - jump_loc = BS2ScriptReadPtr(gBattlescriptCurrInstr + 4); + flags = T2_READ_16(gBattlescriptCurrInstr + 2); + jump_loc = T2_READ_PTR(gBattlescriptCurrInstr + 4); if (gSideAffecting[side] & flags) gBattlescriptCurrInstr = jump_loc; @@ -5190,37 +5178,37 @@ static void atk1F_jumpifsideaffecting(void) static void atk20_jumpifstat(void) { u8 ret = 0; - u8 bank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); - u8 value = gBattleMons[bank].statStages[BSScriptRead8(gBattlescriptCurrInstr + 3)]; - switch (BSScriptRead8(gBattlescriptCurrInstr + 2)) + u8 bank = GetBattleBank(T2_READ_8(gBattlescriptCurrInstr + 1)); + u8 value = gBattleMons[bank].statStages[T2_READ_8(gBattlescriptCurrInstr + 3)]; + switch (T2_READ_8(gBattlescriptCurrInstr + 2)) { case CMP_EQUAL: - if (value == BSScriptRead8(gBattlescriptCurrInstr + 4)) + if (value == T2_READ_8(gBattlescriptCurrInstr + 4)) ret++; break; case CMP_NOT_EQUAL: - if (value != BSScriptRead8(gBattlescriptCurrInstr + 4)) + if (value != T2_READ_8(gBattlescriptCurrInstr + 4)) ret++; break; case CMP_GREATER_THAN: - if (value > BSScriptRead8(gBattlescriptCurrInstr + 4)) + if (value > T2_READ_8(gBattlescriptCurrInstr + 4)) ret++; break; case CMP_LESS_THAN: - if (value < BSScriptRead8(gBattlescriptCurrInstr + 4)) + if (value < T2_READ_8(gBattlescriptCurrInstr + 4)) ret++; break; case CMP_COMMON_BITS: - if (value & BSScriptRead8(gBattlescriptCurrInstr + 4)) + if (value & T2_READ_8(gBattlescriptCurrInstr + 4)) ret++; break; case CMP_NO_COMMON_BITS: - if (!(value & BSScriptRead8(gBattlescriptCurrInstr + 4))) + if (!(value & T2_READ_8(gBattlescriptCurrInstr + 4))) ret++; break; } if (ret) - gBattlescriptCurrInstr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 5); + gBattlescriptCurrInstr = T2_READ_PTR(gBattlescriptCurrInstr + 5); else gBattlescriptCurrInstr += 9; } @@ -5230,10 +5218,10 @@ static void atk21_jumpifstatus3(void) u32 flags; void* jump_loc; - gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); - flags = BS2ScriptRead32(gBattlescriptCurrInstr + 2); - jump_loc = BS2ScriptReadPtr(gBattlescriptCurrInstr + 7); - if (BSScriptRead8(gBattlescriptCurrInstr + 6)) + gActiveBank = GetBattleBank(T2_READ_8(gBattlescriptCurrInstr + 1)); + flags = T2_READ_32(gBattlescriptCurrInstr + 2); + jump_loc = T2_READ_PTR(gBattlescriptCurrInstr + 7); + if (T2_READ_8(gBattlescriptCurrInstr + 6)) { if ((gStatuses3[gActiveBank] & flags) != 0) gBattlescriptCurrInstr += 11; @@ -5251,9 +5239,9 @@ static void atk21_jumpifstatus3(void) static void atk22_jumpiftype(void) //u8 bank, u8 type, *ptr { - u8 bank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); - u8 type = BSScriptRead8(gBattlescriptCurrInstr + 2); - void* jump_loc = BS2ScriptReadPtr(gBattlescriptCurrInstr + 3); + u8 bank = GetBattleBank(T2_READ_8(gBattlescriptCurrInstr + 1)); + u8 type = T2_READ_8(gBattlescriptCurrInstr + 2); + void* jump_loc = T2_READ_PTR(gBattlescriptCurrInstr + 3); if (gBattleMons[bank].type1 == type || gBattleMons[bank].type2 == type) gBattlescriptCurrInstr = jump_loc; @@ -5268,7 +5256,7 @@ static void atk23_getexp(void) u8 hold_effect; int via_expshare = 0, sent_in; u16* exp = &BATTLE_STRUCT->exp; - gBank1 = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + gBank1 = GetBattleBank(T2_READ_8(gBattlescriptCurrInstr + 1)); sent_in = gSentPokesToOpponent[(gBank1 & 2) >> 1]; switch (BATTLE_STRUCT->atk23StateTracker) { @@ -6724,14 +6712,14 @@ static void atk24(void) if (gBattleTypeFlags & BATTLE_TYPE_MULTI) { if (found2 + found1 > 1) - gBattlescriptCurrInstr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T2_READ_PTR(gBattlescriptCurrInstr + 1); else gBattlescriptCurrInstr += 5; } else { if (found2 != 0 && found1 != 0) - gBattlescriptCurrInstr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T2_READ_PTR(gBattlescriptCurrInstr + 1); else gBattlescriptCurrInstr += 5; } @@ -6979,7 +6967,7 @@ static void atk25_move_values_cleanup(void) static void atk26_set_multihit(void) { - gMultiHitCounter = BSScriptRead8(gBattlescriptCurrInstr + 1); + gMultiHitCounter = T2_READ_8(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr += 2; } @@ -6988,20 +6976,20 @@ static void atk27_decrement_multihit(void) if (--gMultiHitCounter == 0) gBattlescriptCurrInstr += 5; else - gBattlescriptCurrInstr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T2_READ_PTR(gBattlescriptCurrInstr + 1); } static void atk28_goto(void) { - gBattlescriptCurrInstr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T2_READ_PTR(gBattlescriptCurrInstr + 1); } static void atk29_jumpifbyte(void) { - u8 caseID = BSScriptRead8(gBattlescriptCurrInstr + 1); - u8* ptr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 2); - u8 value = BSScriptRead8(gBattlescriptCurrInstr + 6); - u8* jump_loc = BS2ScriptReadPtr(gBattlescriptCurrInstr + 7); + u8 caseID = T2_READ_8(gBattlescriptCurrInstr + 1); + u8* ptr = T2_READ_PTR(gBattlescriptCurrInstr + 2); + u8 value = T2_READ_8(gBattlescriptCurrInstr + 6); + u8* jump_loc = T2_READ_PTR(gBattlescriptCurrInstr + 7); gBattlescriptCurrInstr += 11; switch (caseID) { @@ -7034,10 +7022,10 @@ static void atk29_jumpifbyte(void) static void atk2A_jumpifhalfword(void) { - u8 caseID = BSScriptRead8(gBattlescriptCurrInstr + 1); - u16* ptr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 2); - u16 value = BS2ScriptRead16(gBattlescriptCurrInstr + 6); - u8* jump_loc = BS2ScriptReadPtr(gBattlescriptCurrInstr + 8); + u8 caseID = T2_READ_8(gBattlescriptCurrInstr + 1); + u16* ptr = T2_READ_PTR(gBattlescriptCurrInstr + 2); + u16 value = T2_READ_16(gBattlescriptCurrInstr + 6); + u8* jump_loc = T2_READ_PTR(gBattlescriptCurrInstr + 8); gBattlescriptCurrInstr += 12; switch (caseID) { @@ -7070,10 +7058,10 @@ static void atk2A_jumpifhalfword(void) static void atk2B_jumpifword(void) { - u8 caseID = BSScriptRead8(gBattlescriptCurrInstr + 1); - u32* ptr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 2); - u32 value = BSScriptRead32(gBattlescriptCurrInstr + 6); - u8* jump_loc = BS2ScriptReadPtr(gBattlescriptCurrInstr + 10); + u8 caseID = T2_READ_8(gBattlescriptCurrInstr + 1); + u32* ptr = T2_READ_PTR(gBattlescriptCurrInstr + 2); + u32 value = T1_READ_32(gBattlescriptCurrInstr + 6); + u8* jump_loc = T2_READ_PTR(gBattlescriptCurrInstr + 10); gBattlescriptCurrInstr += 14; switch (caseID) { @@ -7107,10 +7095,10 @@ static void atk2B_jumpifword(void) static void atk2C_jumpifarrayequal(void) { //Mem1, Mem2, Size, Jump Loc - u8* mem1 = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1); - u8* mem2 = BS2ScriptReadPtr(gBattlescriptCurrInstr + 5); - u32 size = BSScriptRead8(gBattlescriptCurrInstr + 9); - u8* jump_loc = BS2ScriptReadPtr(gBattlescriptCurrInstr + 10); + u8* mem1 = T2_READ_PTR(gBattlescriptCurrInstr + 1); + u8* mem2 = T2_READ_PTR(gBattlescriptCurrInstr + 5); + u32 size = T2_READ_8(gBattlescriptCurrInstr + 9); + u8* jump_loc = T2_READ_PTR(gBattlescriptCurrInstr + 10); u8 i; for (i = 0; i < size; i++) @@ -7131,10 +7119,10 @@ static void atk2D_jumpifarraynotequal(void) { //Mem1, Mem2, Size, Jump Loc u8 equal_bytes = 0; - u8* mem1 = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1); - u8* mem2 = BS2ScriptReadPtr(gBattlescriptCurrInstr + 5); - u32 size = BSScriptRead8(gBattlescriptCurrInstr + 9); - u8* jump_loc = BS2ScriptReadPtr(gBattlescriptCurrInstr + 10); + u8* mem1 = T2_READ_PTR(gBattlescriptCurrInstr + 1); + u8* mem2 = T2_READ_PTR(gBattlescriptCurrInstr + 5); + u32 size = T2_READ_8(gBattlescriptCurrInstr + 9); + u8* jump_loc = T2_READ_PTR(gBattlescriptCurrInstr + 10); u8 i; for (i = 0; i < size; i++) @@ -7154,30 +7142,30 @@ static void atk2D_jumpifarraynotequal(void) static void atk2E_setbyte(void) { - u8* mem = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1); - *mem = BSScriptRead8(gBattlescriptCurrInstr + 5); + u8* mem = T2_READ_PTR(gBattlescriptCurrInstr + 1); + *mem = T2_READ_8(gBattlescriptCurrInstr + 5); gBattlescriptCurrInstr += 6; } static void atk2F_addbyte(void) { - u8* mem = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1); - *mem += BSScriptRead8(gBattlescriptCurrInstr + 5); + u8* mem = T2_READ_PTR(gBattlescriptCurrInstr + 1); + *mem += T2_READ_8(gBattlescriptCurrInstr + 5); gBattlescriptCurrInstr += 6; } static void atk30_subbyte(void) { - u8* mem = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1); - *mem -= BSScriptRead8(gBattlescriptCurrInstr + 5); + u8* mem = T2_READ_PTR(gBattlescriptCurrInstr + 1); + *mem -= T2_READ_8(gBattlescriptCurrInstr + 5); gBattlescriptCurrInstr += 6; } static void atk31_copyarray(void) { - u8* mem1 = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1); - u8* mem2 = BS2ScriptReadPtr(gBattlescriptCurrInstr + 5); - s32 size = BSScriptRead8(gBattlescriptCurrInstr + 9); + u8* mem1 = T2_READ_PTR(gBattlescriptCurrInstr + 1); + u8* mem2 = T2_READ_PTR(gBattlescriptCurrInstr + 5); + s32 size = T2_READ_8(gBattlescriptCurrInstr + 9); s32 i; for (i = 0; i < size; i++) @@ -7190,10 +7178,10 @@ static void atk31_copyarray(void) static void atk32_copyarray_withindex(void) { - u8* mem1 = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1); - u8* mem2 = BS2ScriptReadPtr(gBattlescriptCurrInstr + 5); - u8* index = BS2ScriptReadPtr(gBattlescriptCurrInstr + 9); - s32 size = BSScriptRead8(gBattlescriptCurrInstr + 13); + u8* mem1 = T2_READ_PTR(gBattlescriptCurrInstr + 1); + u8* mem2 = T2_READ_PTR(gBattlescriptCurrInstr + 5); + u8* index = T2_READ_PTR(gBattlescriptCurrInstr + 9); + s32 size = T2_READ_8(gBattlescriptCurrInstr + 13); s32 i; for (i = 0; i < size; i++) @@ -7206,15 +7194,15 @@ static void atk32_copyarray_withindex(void) static void atk33_orbyte(void) { - u8* mem = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1); - *mem |= BSScriptRead8(gBattlescriptCurrInstr + 5); + u8* mem = T2_READ_PTR(gBattlescriptCurrInstr + 1); + *mem |= T2_READ_8(gBattlescriptCurrInstr + 5); gBattlescriptCurrInstr += 6; } static void atk34_orhalfword(void) { - u16* mem = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1); - u16 val = BS2ScriptRead16(gBattlescriptCurrInstr + 5); + u16* mem = T2_READ_PTR(gBattlescriptCurrInstr + 1); + u16 val = T2_READ_16(gBattlescriptCurrInstr + 5); *mem |= val; gBattlescriptCurrInstr += 7; @@ -7222,8 +7210,8 @@ static void atk34_orhalfword(void) static void atk35_orword(void) { - u32* mem = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1); - u32 val = BS2ScriptRead32(gBattlescriptCurrInstr + 5); + u32* mem = T2_READ_PTR(gBattlescriptCurrInstr + 1); + u32 val = T2_READ_32(gBattlescriptCurrInstr + 5); *mem |= val; gBattlescriptCurrInstr += 9; @@ -7231,15 +7219,15 @@ static void atk35_orword(void) static void atk36_bicbyte(void) { - u8* mem = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1); - *mem &= ~(BSScriptRead8(gBattlescriptCurrInstr + 5)); + u8* mem = T2_READ_PTR(gBattlescriptCurrInstr + 1); + *mem &= ~(T2_READ_8(gBattlescriptCurrInstr + 5)); gBattlescriptCurrInstr += 6; } static void atk37_bichalfword(void) { - u16* mem = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1); - u16 val = BS2ScriptRead16(gBattlescriptCurrInstr + 5); + u16* mem = T2_READ_PTR(gBattlescriptCurrInstr + 1); + u16 val = T2_READ_16(gBattlescriptCurrInstr + 5); *mem &= ~val; gBattlescriptCurrInstr += 7; @@ -7247,8 +7235,8 @@ static void atk37_bichalfword(void) static void atk38_bicword(void) { - u32* mem = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1); - u32 val = BS2ScriptRead32(gBattlescriptCurrInstr + 5); + u32* mem = T2_READ_PTR(gBattlescriptCurrInstr + 1); + u32 val = T2_READ_32(gBattlescriptCurrInstr + 5); *mem &= ~val; gBattlescriptCurrInstr += 9; @@ -7258,7 +7246,7 @@ static void atk39_pause(void) { if (gBattleExecBuffer == 0) { - u16 value = BS2ScriptRead16(gBattlescriptCurrInstr + 1); + u16 value = T2_READ_16(gBattlescriptCurrInstr + 1); if (++gPauseCounterBattle >= value) { gPauseCounterBattle = 0; @@ -7275,7 +7263,7 @@ static void atk3A_waitstate(void) static void atk3B_healthbar_update(void) { - if (!BSScriptRead8(gBattlescriptCurrInstr + 1)) + if (!T2_READ_8(gBattlescriptCurrInstr + 1)) gActiveBank = gBankTarget; else gActiveBank = gBankAttacker; @@ -7315,23 +7303,23 @@ static void atk3F_end3(void) //pops the main function stack static void atk41_call(void) { b_movescr_stack_push(gBattlescriptCurrInstr + 5); - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } static void atk42_jumpiftype2(void) //u8 bank, u8 type, *ptr { - u8 bank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + u8 bank = GetBattleBank(T2_READ_8(gBattlescriptCurrInstr + 1)); - if (BSScriptRead8(gBattlescriptCurrInstr + 2) == gBattleMons[bank].type1 || BSScriptRead8(gBattlescriptCurrInstr + 2) == gBattleMons[bank].type2) - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 3); + if (T2_READ_8(gBattlescriptCurrInstr + 2) == gBattleMons[bank].type1 || T2_READ_8(gBattlescriptCurrInstr + 2) == gBattleMons[bank].type2) + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); else gBattlescriptCurrInstr += 7; } static void atk43_jumpifabilitypresent(void) { - if (AbilityBattleEffects(ABILITYEFFECT_CHECK_ON_FIELD, 0, BSScriptRead8(gBattlescriptCurrInstr + 1), 0, 0)) - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 2); + if (AbilityBattleEffects(ABILITYEFFECT_CHECK_ON_FIELD, 0, T2_READ_8(gBattlescriptCurrInstr + 1), 0, 0)) + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2); else gBattlescriptCurrInstr += 6; } @@ -7345,9 +7333,9 @@ static void atk44(void) static void atk45_playanimation(void) { - #define ANIMATION_ID BSScriptRead8(gBattlescriptCurrInstr + 2) - #define ARGUMENT (u16*) BS2ScriptReadPtr(gBattlescriptCurrInstr + 3) - gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + #define ANIMATION_ID T2_READ_8(gBattlescriptCurrInstr + 2) + #define ARGUMENT (u16*) T2_READ_PTR(gBattlescriptCurrInstr + 3) + gActiveBank = GetBattleBank(T2_READ_8(gBattlescriptCurrInstr + 1)); if ( ANIMATION_ID == 1 || ANIMATION_ID == 0x11 || ANIMATION_ID == 2) { EmitBattleAnimation(0, ANIMATION_ID, *argument); @@ -7477,10 +7465,10 @@ static void atk46_playanimation2(void) u16* arg3; u32 something; - arg1 = BSScriptRead8(gBattlescriptCurrInstr + 1); + arg1 = T2_READ_8(gBattlescriptCurrInstr + 1); gActiveBank = GetBattleBank(arg1); - arg2 = BS2ScriptReadPtr(gBattlescriptCurrInstr + 2); - arg3 = BS2ScriptReadPtr(gBattlescriptCurrInstr + 6); + arg2 = T2_READ_PTR(gBattlescriptCurrInstr + 2); + arg3 = T2_READ_PTR(gBattlescriptCurrInstr + 6); if (*arg2 == 1 || *arg2 == 0x11 || *arg2 == 2) { @@ -7645,9 +7633,9 @@ static void atk48_playstatchangeanimation(void) u32 stats_to_check; u8 arg3; - gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); - stats_to_check = BSScriptRead8(gBattlescriptCurrInstr + 2); - arg3 = BSScriptRead8(gBattlescriptCurrInstr + 3); + gActiveBank = GetBattleBank(T2_READ_8(gBattlescriptCurrInstr + 1)); + stats_to_check = T2_READ_8(gBattlescriptCurrInstr + 2); + arg3 = T2_READ_8(gBattlescriptCurrInstr + 3); if (arg3 & 1) { u16 r1 = 0x15; @@ -7657,7 +7645,7 @@ static void atk48_playstatchangeanimation(void) { if (!(stats_to_check & 1)) continue; - if (!(BSScriptRead8(gBattlescriptCurrInstr + 3))) + if (!(T2_READ_8(gBattlescriptCurrInstr + 3))) { u8 ability; if (gSideTimer[GetBankIdentity(gActiveBank) & 1].mistTimer) @@ -7676,7 +7664,7 @@ static void atk48_playstatchangeanimation(void) r1 += 1; curr_stat++; } - if (changeable_stats > 1 && BSScriptRead8(gBattlescriptCurrInstr + 3) & 2) + if (changeable_stats > 1 && T2_READ_8(gBattlescriptCurrInstr + 3) & 2) stat_animID = 0x39; else stat_animID = 0x3A; @@ -7700,19 +7688,19 @@ static void atk48_playstatchangeanimation(void) r1 += 1; curr_stat++; } - if (changeable_stats > 1 && BSScriptRead8(gBattlescriptCurrInstr + 3) & 2) + if (changeable_stats > 1 && T2_READ_8(gBattlescriptCurrInstr + 3) & 2) stat_animID = 0x37; else stat_animID = 0x38; } - if ((BSScriptRead8(gBattlescriptCurrInstr + 3) & 2 && changeable_stats <= 1) + if ((T2_READ_8(gBattlescriptCurrInstr + 3) & 2 && changeable_stats <= 1) || changeable_stats == 0 || BATTLE_STRUCT->filler2[0] != 0) gBattlescriptCurrInstr += 4; else { EmitBattleAnimation(0, 1, stat_animID); MarkBufferBankForExecution(gActiveBank); - if ((BSScriptRead8(gBattlescriptCurrInstr + 3) & 4) && changeable_stats > 1) + if ((T2_READ_8(gBattlescriptCurrInstr + 3) & 4) && changeable_stats > 1) BATTLE_STRUCT->filler2[0] = 1; gBattlescriptCurrInstr += 4; } @@ -7998,8 +7986,8 @@ static void atk49_moveendturn(void) if (gLastUsedMove != 0xFFFF) last_move = gLastUsedMove; - arg1 = BSScriptRead8(gBattlescriptCurrInstr + 1); - arg2 = BSScriptRead8(gBattlescriptCurrInstr + 2); + arg1 = T2_READ_8(gBattlescriptCurrInstr + 1); + arg2 = T2_READ_8(gBattlescriptCurrInstr + 2); if (gBattleMons[gBankTarget].item == ITEM_ENIGMA_BERRY) hold_effect_atk = gEnigmaBerries[gBankAttacker].holdEffect; else @@ -9531,7 +9519,7 @@ static void atk4C_copy_poke_data(void) if (gBattleExecBuffer) return; - gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + gActiveBank = GetBattleBank(T2_READ_8(gBattlescriptCurrInstr + 1)); gBattlePartyID[gActiveBank] = unk_2000000[0x16068 + gActiveBank]; @@ -9558,7 +9546,7 @@ static void atk4D_switch_data_update(void) if (gBattleExecBuffer) return; - gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + gActiveBank = GetBattleBank(T2_READ_8(gBattlescriptCurrInstr + 1)); OldData = gBattleMons[gActiveBank]; monData = (u8*)(&gBattleMons[gActiveBank]); for (i = 0; i < sizeof(struct BattlePokemon); i++) @@ -9599,13 +9587,13 @@ static void atk4E_switchin_anim(void) if (gBattleExecBuffer) return; - gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + gActiveBank = GetBattleBank(T2_READ_8(gBattlescriptCurrInstr + 1)); if (GetBankSide(gActiveBank) == 1 && !(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_BATTLE_TOWER))) { GetSetPokedexFlag(SpeciesToNationalPokedexNum(gBattleMons[gActiveBank].species), 2); } gAbsentBankFlags &= ~(gBitTable[gActiveBank]); - EmitSendOutPoke(0, gBattlePartyID[gActiveBank], BSScriptRead8(gBattlescriptCurrInstr + 2)); + EmitSendOutPoke(0, gBattlePartyID[gActiveBank], T2_READ_8(gBattlescriptCurrInstr + 2)); MarkBufferBankForExecution(gActiveBank); gBattlescriptCurrInstr += 3; } @@ -9616,12 +9604,12 @@ static void atk4F_jump_if_cannot_switch(void) register struct Pokemon *party; u8 r7; //0x80 byte is used as a way of telling the function whether to not check status2/status3 - gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1) & 0x7F); - if (!(BSScriptRead8(gBattlescriptCurrInstr + 1) & 0x80) + gActiveBank = GetBattleBank(T2_READ_8(gBattlescriptCurrInstr + 1) & 0x7F); + if (!(T2_READ_8(gBattlescriptCurrInstr + 1) & 0x80) && ((gBattleMons[gActiveBank].status2 & (STATUS2_WRAPPED | STATUS2_ESCAPE_PREVENTION)) || (gStatuses3[gActiveBank] & STATUS3_ROOTED))) { - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 2); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2); return; } if (gBattleTypeFlags & BATTLE_TYPE_MULTI) @@ -9642,7 +9630,7 @@ static void atk4F_jump_if_cannot_switch(void) break; } if (val == to_cmp) - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 2); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2); else gBattlescriptCurrInstr += 6; } @@ -9675,7 +9663,7 @@ static void atk4F_jump_if_cannot_switch(void) break; } if (val == 6) - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 2); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2); else gBattlescriptCurrInstr += 6; } @@ -9694,9 +9682,9 @@ static void atk50_openpartyscreen(void) { int i = 0; int r9 = 0; - u8* fail_loc = BSScriptReadPtr(gBattlescriptCurrInstr + 2); + u8* fail_loc = T1_READ_PTR(gBattlescriptCurrInstr + 2); - if (BSScriptRead8(gBattlescriptCurrInstr + 1) == 5) + if (T2_READ_8(gBattlescriptCurrInstr + 1) == 5) { if ((gBattleTypeFlags & (BATTLE_TYPE_DOUBLE | BATTLE_TYPE_MULTI)) != BATTLE_TYPE_DOUBLE) { @@ -10765,8 +10753,8 @@ static void atk51_switch_handle_order(void) if (gBattleExecBuffer) return; - gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); - switch (BSScriptRead8(gBattlescriptCurrInstr + 2)) + gActiveBank = GetBattleBank(T2_READ_8(gBattlescriptCurrInstr + 1)); + switch (T2_READ_8(gBattlescriptCurrInstr + 2)) { case 0: for (i = 0; i < gNoOfAllBanks; i++) @@ -10816,7 +10804,7 @@ static void atk52_switch_in_effects(void) { int i; - gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + gActiveBank = GetBattleBank(T2_READ_8(gBattlescriptCurrInstr + 1)); sub_80157C4(gActiveBank); gHitMarker &= ~(HITMARKER_FAINTED(gActiveBank)); gSpecialStatuses[gActiveBank].flag40 = 0; @@ -10836,9 +10824,9 @@ static void atk52_switch_in_effects(void) BATTLE_STRUCT->scriptingActive = gActiveBank; b_movescr_stack_push_cursor(); - if (BSScriptRead8(gBattlescriptCurrInstr + 1) == 0) + if (T2_READ_8(gBattlescriptCurrInstr + 1) == 0) gBattlescriptCurrInstr = gUnknown_081D919F; - else if (BSScriptRead8(gBattlescriptCurrInstr + 1) == 1) + else if (T2_READ_8(gBattlescriptCurrInstr + 1) == 1) gBattlescriptCurrInstr = gUnknown_081D9171; else gBattlescriptCurrInstr = gUnknown_081D91CD; @@ -10865,7 +10853,7 @@ static void atk52_switch_in_effects(void) *(HP_ON_SWITCHOUT + GetBankSide(i)) = gBattleMons[i].hp; } - if (BSScriptRead8(gBattlescriptCurrInstr + 1) == 5) + if (T2_READ_8(gBattlescriptCurrInstr + 1) == 5) { u32 hitmark = gHitMarker >> 0x1C; gBank1++; @@ -10885,7 +10873,7 @@ static void atk52_switch_in_effects(void) static void atk53_trainer_slide(void) { - if (!BSScriptRead8(gBattlescriptCurrInstr + 1)) + if (!T2_READ_8(gBattlescriptCurrInstr + 1)) gActiveBank = GetBankByPlayerAI(0); else gActiveBank = GetBankByPlayerAI(1); @@ -10898,7 +10886,7 @@ static void atk53_trainer_slide(void) static void atk54_effectiveness_sound(void) { gActiveBank = gBankAttacker; - EmitEffectivenessSound(0, BS2ScriptRead16(gBattlescriptCurrInstr + 1)); + EmitEffectivenessSound(0, T2_READ_16(gBattlescriptCurrInstr + 1)); MarkBufferBankForExecution(gActiveBank); gBattlescriptCurrInstr += 3; } @@ -10906,14 +10894,14 @@ static void atk54_effectiveness_sound(void) static void atk55_play_sound(void) { gActiveBank = gBankAttacker; - Emitcmd44(0, BS2ScriptRead16(gBattlescriptCurrInstr + 1)); + Emitcmd44(0, T2_READ_16(gBattlescriptCurrInstr + 1)); MarkBufferBankForExecution(gActiveBank); gBattlescriptCurrInstr += 3; } static void atk56_fainting_cry(void) { - gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + gActiveBank = GetBattleBank(T2_READ_8(gBattlescriptCurrInstr + 1)); EmitFaintingCry(0); MarkBufferBankForExecution(gActiveBank); gBattlescriptCurrInstr += 2; @@ -10929,7 +10917,7 @@ static void atk57(void) static void atk58_return_to_ball(void) { - gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + gActiveBank = GetBattleBank(T2_READ_8(gBattlescriptCurrInstr + 1)); EmitReturnPokeToBall(0, 1); MarkBufferBankForExecution(gActiveBank); gBattlescriptCurrInstr += 2; @@ -10937,10 +10925,10 @@ static void atk58_return_to_ball(void) void atk59_learnmove_inbattle(void) { - u8* loc1 = BSScriptReadPtr(gBattlescriptCurrInstr + 1); - u8* loc2 = BSScriptReadPtr(gBattlescriptCurrInstr + 5); + u8* loc1 = T1_READ_PTR(gBattlescriptCurrInstr + 1); + u8* loc2 = T1_READ_PTR(gBattlescriptCurrInstr + 5); - u16 ret = MonTryLearningNewMove(&gPlayerParty[BATTLE_STRUCT->expGetterID], BSScriptRead8(gBattlescriptCurrInstr + 9)); + u16 ret = MonTryLearningNewMove(&gPlayerParty[BATTLE_STRUCT->expGetterID], T2_READ_8(gBattlescriptCurrInstr + 9)); while (ret == 0xFFFE) ret = MonTryLearningNewMove(&gPlayerParty[BATTLE_STRUCT->expGetterID], 0); @@ -11053,7 +11041,7 @@ static void atk5A(void) { u8 *ptr; - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); ptr = gBattleTextBuff2; { ptr[0] = 0xFD; @@ -11123,7 +11111,7 @@ static void atk5B_80256E0(void) { PlaySE(SE_SELECT); if (gBattleCommunication[1] != 0) - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); else gBattlescriptCurrInstr += 5; sub_8023AD8(); @@ -11131,7 +11119,7 @@ static void atk5B_80256E0(void) else if (gMain.newKeys & B_BUTTON) { PlaySE(SE_SELECT); - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); sub_8023AD8(); } } @@ -11139,7 +11127,7 @@ static void atk5B_80256E0(void) static void atk5C_hitanimation(void) { - gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + gActiveBank = GetBattleBank(T2_READ_8(gBattlescriptCurrInstr + 1)); if (gBattleMoveFlags & MOVESTATUS_NOEFFECT) gBattlescriptCurrInstr += 2; else if (!(gHitMarker & HITMARKER_IGNORE_SUBSTITUTE) || !(gBattleMons[gActiveBank].status2 & STATUS2_SUBSTITUTE) || gDisableStructs[gActiveBank].substituteHP == 0) @@ -11412,7 +11400,7 @@ _08024190: .4byte gBattlescriptCurrInstr\n\ static void atk5E_8025A70(void) { - gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + gActiveBank = GetBattleBank(T2_READ_8(gBattlescriptCurrInstr + 1)); switch (gBattleCommunication[0]) { case 0: @@ -11453,26 +11441,20 @@ static void atk60_increment_gamestat(void) { if (GetBankSide(gBankAttacker) == 0) { - IncrementGameStat(BSScriptRead8(gBattlescriptCurrInstr + 1)); + IncrementGameStat(T2_READ_8(gBattlescriptCurrInstr + 1)); } gBattlescriptCurrInstr += 2; } -struct hp_status -{ - u16 hp; - u32 status; -}; - static void atk61_8025BA4(void) { int i; struct Pokemon* party; - struct hp_status hpStatus[6]; + struct HpAndStatus hpStatus[6]; if (gBattleExecBuffer) return; - gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + gActiveBank = GetBattleBank(T2_READ_8(gBattlescriptCurrInstr + 1)); if (GetBankSide(gActiveBank) == 0) party = gPlayerParty; else @@ -11491,14 +11473,14 @@ static void atk61_8025BA4(void) hpStatus[i].status = GetMonData(&party[i], MON_DATA_STATUS); } } - Emitcmd48(0, (u8*)(hpStatus), 1); + EmitDrawPartyStatusSummary(0, hpStatus, 1); MarkBufferBankForExecution(gActiveBank); gBattlescriptCurrInstr += 2; } static void atk62_08025C6C(void) { - gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + gActiveBank = GetBattleBank(T2_READ_8(gBattlescriptCurrInstr + 1)); Emitcmd49(0); MarkBufferBankForExecution(gActiveBank); gBattlescriptCurrInstr += 2; @@ -11506,7 +11488,7 @@ static void atk62_08025C6C(void) static void atk63_jumptorandomattack(void) { - if (BSScriptRead8(gBattlescriptCurrInstr + 1)) + if (T2_READ_8(gBattlescriptCurrInstr + 1)) gCurrentMove = gRandomMove; else gUnknown_02024BE8 = gCurrentMove = gRandomMove; @@ -11517,7 +11499,7 @@ static void atk64_statusanimation(void) { if (gBattleExecBuffer == 0) { - gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + gActiveBank = GetBattleBank(T2_READ_8(gBattlescriptCurrInstr + 1)); if (!(gStatuses3[gActiveBank] & STATUS3_SEMI_INVULNERABLE) && gDisableStructs[gActiveBank].substituteHP == 0 && !(gHitMarker & HITMARKER_NO_ANIMATIONS)) { EmitStatusAnimation(0, 0, gBattleMons[gActiveBank].status1); @@ -11532,8 +11514,8 @@ static void atk65_status2animation(void) if (gBattleExecBuffer == 0) { u32 possible_to_anim; - gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); - possible_to_anim = BSScriptRead32(gBattlescriptCurrInstr + 2); + gActiveBank = GetBattleBank(T2_READ_8(gBattlescriptCurrInstr + 1)); + possible_to_anim = T1_READ_32(gBattlescriptCurrInstr + 2); if (!(gStatuses3[gActiveBank] & STATUS3_SEMI_INVULNERABLE) && gDisableStructs[gActiveBank].substituteHP == 0 && !(gHitMarker & HITMARKER_NO_ANIMATIONS)) { EmitStatusAnimation(0, 1, gBattleMons[gActiveBank].status2 & possible_to_anim); @@ -11548,11 +11530,11 @@ static void atk66_chosenstatusanimation(void) if (gBattleExecBuffer == 0) { u32 status; - gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); - status = BSScriptRead32(gBattlescriptCurrInstr + 3); + gActiveBank = GetBattleBank(T2_READ_8(gBattlescriptCurrInstr + 1)); + status = T1_READ_32(gBattlescriptCurrInstr + 3); if (!(gStatuses3[gActiveBank] & STATUS3_SEMI_INVULNERABLE) && gDisableStructs[gActiveBank].substituteHP == 0 && !(gHitMarker & HITMARKER_NO_ANIMATIONS)) { - EmitStatusAnimation(0, BSScriptRead8(gBattlescriptCurrInstr + 2), status); + EmitStatusAnimation(0, T2_READ_8(gBattlescriptCurrInstr + 2), status); MarkBufferBankForExecution(gActiveBank); } gBattlescriptCurrInstr += 7; @@ -11656,7 +11638,7 @@ static void atk69_dmg_adjustment2(void) //literally a copy of atk07 except there void atk6A_removeitem(void) { - gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + gActiveBank = GetBattleBank(T2_READ_8(gBattlescriptCurrInstr + 1)); #define USED_HELD_ITEMS(bank) (*(u16 *)&ewram[0x160CC + 2 * (bank)]) USED_HELD_ITEMS(gActiveBank) = gBattleMons[gActiveBank].item; @@ -12116,7 +12098,7 @@ static void atk6E_set_atk_to_player0(void) static void atk6F_set_visible(void) { - gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + gActiveBank = GetBattleBank(T2_READ_8(gBattlescriptCurrInstr + 1)); EmitSpriteInvisibility(0, 0); MarkBufferBankForExecution(gActiveBank); gBattlescriptCurrInstr += 2; @@ -12124,7 +12106,7 @@ static void atk6F_set_visible(void) static void atk70_record_ability(void) { - gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + gActiveBank = GetBattleBank(T2_READ_8(gBattlescriptCurrInstr + 1)); RecordAbilityBattle(gActiveBank, gLastUsedAbility); gBattlescriptCurrInstr += 1; //buggy, should be += 2, one byte for command, one byte for argument... } @@ -12147,7 +12129,7 @@ static void atk71_buffer_move_to_learn(void) static void atk72_jump_if_can_run_frombattle(void) { if (sub_8014AB8(gBank1)) - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); else gBattlescriptCurrInstr += 5; } @@ -12158,7 +12140,7 @@ static void atk73_hp_thresholds(void) s32 result; if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) { - gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + gActiveBank = GetBattleBank(T2_READ_8(gBattlescriptCurrInstr + 1)); opposing_bank = gActiveBank ^ 1; result = gBattleMons[opposing_bank].hp * 100 / gBattleMons[opposing_bank].maxHP; @@ -12185,7 +12167,7 @@ static void atk74_hp_thresholds2(void) s32 result; if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) { - gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + gActiveBank = GetBattleBank(T2_READ_8(gBattlescriptCurrInstr + 1)); opposing_bank = gActiveBank ^ 1; hp_switchout = ewram[2 * GetBankSide(opposing_bank) + 0x160bc]; //BATTLE_STRUCT->HP_OnSwitchout[GetBankSide(opposing_bank)]; result = (hp_switchout - gBattleMons[opposing_bank].hp) * 100 / hp_switchout; @@ -12212,8 +12194,8 @@ static void atk75_8026A58(void) static void atk76_various(void) { - gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); - switch (BSScriptRead8(gBattlescriptCurrInstr + 2)) + gActiveBank = GetBattleBank(T2_READ_8(gBattlescriptCurrInstr + 1)); + switch (T2_READ_8(gBattlescriptCurrInstr + 2)) { case 0: CancelMultiTurnMoves(gActiveBank); @@ -12360,7 +12342,7 @@ static void atk79_setatkhptozero(void) static void atk7A_jumpwhiletargetvalid(void) //used by intimidate to loop through all targets { - u8* jump_loc = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + u8* jump_loc = T1_READ_PTR(gBattlescriptCurrInstr + 1); if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) { @@ -12383,9 +12365,9 @@ static void atk7A_jumpwhiletargetvalid(void) //used by intimidate to loop throug static void atk7B_healhalfHP_if_possible(void) { - u8* fail_loc = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + u8* fail_loc = T1_READ_PTR(gBattlescriptCurrInstr + 1); - if (BSScriptRead8(gBattlescriptCurrInstr + 5) == 1) + if (T2_READ_8(gBattlescriptCurrInstr + 5) == 1) gBankTarget = gBankAttacker; gBattleMoveDamage = gBattleMons[gBankTarget].maxHP / 2; @@ -12502,7 +12484,7 @@ static void atk7F_setseeded(void) static void atk80_manipulatedamage(void) { - switch (BSScriptRead8(gBattlescriptCurrInstr + 1)) + switch (T2_READ_8(gBattlescriptCurrInstr + 1)) { case 0: gBattleMoveDamage *= -1; @@ -12524,7 +12506,7 @@ static void atk80_manipulatedamage(void) static void atk81_setrest(void) { - u8* fail_loc = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + u8* fail_loc = T1_READ_PTR(gBattlescriptCurrInstr + 1); gActiveBank = gBankTarget = gBankAttacker; gBattleMoveDamage = gBattleMons[gBankTarget].maxHP * (-1); if (gBattleMons[gBankTarget].hp == gBattleMons[gBankTarget].maxHP) @@ -12545,7 +12527,7 @@ static void atk81_setrest(void) static void atk82_jumpifnotfirstturn(void) { - u8* jump_loc = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + u8* jump_loc = T1_READ_PTR(gBattlescriptCurrInstr + 1); if (gDisableStructs[gBankAttacker].isFirstTurn) gBattlescriptCurrInstr += 5; @@ -12582,7 +12564,7 @@ bool8 UproarWakeUpCheck(u8 bank) static void atk84_jump_if_cant_sleep(void) { - u8* jump_loc = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + u8* jump_loc = T1_READ_PTR(gBattlescriptCurrInstr + 1); if (UproarWakeUpCheck(gBankTarget)) gBattlescriptCurrInstr = jump_loc; else if (gBattleMons[gBankTarget].ability == ABILITY_INSOMNIA || gBattleMons[gBankTarget].ability == ABILITY_VITAL_SPIRIT) @@ -12621,7 +12603,7 @@ static void atk85_stockpile(void) static void atk86_stockpiletobasedamage(void) { - u8* jump_loc = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + u8* jump_loc = T1_READ_PTR(gBattlescriptCurrInstr + 1); if (gDisableStructs[gBankAttacker].stockpileCounter == 0) { gBattlescriptCurrInstr = jump_loc; @@ -12646,7 +12628,7 @@ static void atk86_stockpiletobasedamage(void) static void atk87_stockpiletohpheal(void) { - u8* jump_loc = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + u8* jump_loc = T1_READ_PTR(gBattlescriptCurrInstr + 1); if (gDisableStructs[gBankAttacker].stockpileCounter == 0) { gBattlescriptCurrInstr = jump_loc; @@ -13433,8 +13415,8 @@ _080262C0: .4byte gBattleMoveFlags\n\ static void atk89_statbuffchange(void) { - u8* jump_loc = BSScriptReadPtr(gBattlescriptCurrInstr + 2); - if (ChangeStatBuffs(BATTLE_STRUCT->statChanger & 0xF0, BATTLE_STRUCT->statChanger & 0xF, BSScriptRead8(gBattlescriptCurrInstr + 1), jump_loc) == 0) + u8* jump_loc = T1_READ_PTR(gBattlescriptCurrInstr + 2); + if (ChangeStatBuffs(BATTLE_STRUCT->statChanger & 0xF0, BATTLE_STRUCT->statChanger & 0xF, T2_READ_8(gBattlescriptCurrInstr + 1), jump_loc) == 0) gBattlescriptCurrInstr += 6; } @@ -13469,8 +13451,8 @@ static void atk8C_confuseifrepeatingattackends(void) static void atk8D_setmultihit_counter(void) { - if (BSScriptRead8(gBattlescriptCurrInstr + 1)) - gMultiHitCounter = BSScriptRead8(gBattlescriptCurrInstr + 1); + if (T2_READ_8(gBattlescriptCurrInstr + 1)) + gMultiHitCounter = T2_READ_8(gBattlescriptCurrInstr + 1); else { gMultiHitCounter = Random() & 3; @@ -13504,7 +13486,7 @@ static bool8 sub_80264C0(void) u16 random = Random() & 0xFF; if ((u32)((random * (gBattleMons[gBankAttacker].level + gBattleMons[gBankTarget].level) >> 8) + 1) <= (gBattleMons[gBankTarget].level / 4)) { - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); return 0; } ewram[gBankTarget + 0x16064] = gBattlePartyID[gBankTarget]; @@ -13555,7 +13537,7 @@ static void atk8F_forcerandomswitch(void) if ((valid < 2 && (gBattleTypeFlags & (BATTLE_TYPE_DOUBLE | BATTLE_TYPE_MULTI)) != BATTLE_TYPE_DOUBLE) || (valid < 3 && (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && !(gBattleTypeFlags & BATTLE_TYPE_MULTI))) { - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } else if (sub_80264C0()) { @@ -13631,7 +13613,7 @@ static void atk90_conversion_type_change(void) if (checked_move == valid_moves) { - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } else { @@ -13750,7 +13732,7 @@ MOVESTATUS_MISSED_LABEL: gBattleCommunication[MULTISTRING_CHOOSER] = 1; else gBattleCommunication[MULTISTRING_CHOOSER] = 0; - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } #else @@ -14205,7 +14187,7 @@ static void atk97_try_infatuation(void) || gStatuses3[gBankTarget] & STATUS3_SEMI_INVULNERABLE || gBattleMons[gBankTarget].status2 & STATUS2_INFATUATION || GetGenderFromSpeciesAndPersonality(atk_species, atk_pid) == 0xFF || GetGenderFromSpeciesAndPersonality(def_species, def_pid) == 0xFF) { - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } else { @@ -14220,9 +14202,9 @@ static void atk98_status_icon_update(void) if (gBattleExecBuffer) return; - if (BSScriptRead8(gBattlescriptCurrInstr + 1) != 4) + if (T2_READ_8(gBattlescriptCurrInstr + 1) != 4) { - gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + gActiveBank = GetBattleBank(T2_READ_8(gBattlescriptCurrInstr + 1)); EmitStatusIconUpdate(0, gBattleMons[gActiveBank].status1, gBattleMons[gActiveBank].status2); MarkBufferBankForExecution(gActiveBank); gBattlescriptCurrInstr += 2; @@ -14362,7 +14344,7 @@ static void atk9D_copyattack(void) if (IsMoveUncopyable(gLastUsedMove[gBankTarget]) || gBattleMons[gBankAttacker].status2 & STATUS2_TRANSFORMED || gLastUsedMove[gBankTarget] == 0 || gLastUsedMove[gBankTarget] == 0xFFFF) { - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } else { @@ -14390,7 +14372,7 @@ static void atk9D_copyattack(void) gBattlescriptCurrInstr += 5; } else - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } } @@ -14527,7 +14509,7 @@ static void atkA1_counterdamagecalculator(void) else { gSpecialStatuses[gBankAttacker].flag20 = 1; - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } } @@ -14547,7 +14529,7 @@ static void atkA2_mirrorcoatdamagecalculator(void) //a copy of atkA1 with the ph else { gSpecialStatuses[gBankAttacker].flag20 = 1; - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } } @@ -14574,7 +14556,7 @@ static void atkA3_disablelastusedattack(void) } else { - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } } @@ -14598,7 +14580,7 @@ static void atkA4_setencore(void) } else { - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } } @@ -14619,14 +14601,14 @@ static void atkA5_painsplitdmgcalc(void) gBattlescriptCurrInstr += 5; } else - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } #ifdef NONMATCHING static void atkA6_settypetorandomresistance(void) { if (gMoveHitWith[gBankAttacker] == 0 || gMoveHitWith[gBankAttacker] == 0xFFFF || (IsTwoTurnsMove(gMoveHitWith[gBankAttacker]) && !gProtectStructs[gBankAttacker].physicalDmg && !gProtectStructs[gBankAttacker].specialDmg)) - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); else { int type = 0, rands = 0; @@ -14668,7 +14650,7 @@ static void atkA6_settypetorandomresistance(void) type += 3, rands += 3; } while (rands < 336); - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } } @@ -14957,7 +14939,7 @@ static void atkA8_copymovepermanently(void) break; } if (i != 4) //sketch fail - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); else //sketch worked { struct move_pp moves_data; @@ -14981,7 +14963,7 @@ static void atkA8_copymovepermanently(void) } } else //sketch fail - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } static bool8 IsTwoTurnsMove(u16 move) @@ -15042,7 +15024,7 @@ static void atkA9_sleeptalk_choose_move(void) gCurrMovePos = random_pos; gHitMarker &= ~(HITMARKER_ATTACKSTRING_PRINTED); gBankTarget = GetMoveTarget(gRandomMove, 0); - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } } @@ -15122,7 +15104,7 @@ static void atkAD_spite_ppreduce(void) return; } } - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } static void atkAE_heal_party_status(void) @@ -15206,7 +15188,7 @@ static void atkAF_cursetarget(void) { if (gBattleMons[gBankTarget].status2 & STATUS2_CURSED || gStatuses3[gBankTarget] & STATUS3_SEMI_INVULNERABLE) { - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } else { @@ -15224,7 +15206,7 @@ static void atkB0_set_spikes(void) if (gSideTimer[side].spikesAmount == 3) { gSpecialStatuses[gBankAttacker].flag20 = 1; - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } else { @@ -15258,7 +15240,7 @@ static void atkB2_setperishsong(void) sub_80153D0(gBankAttacker); if (not_affected_pokes == gNoOfAllBanks) - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); else gBattlescriptCurrInstr += 5; } @@ -15296,8 +15278,8 @@ static void atkB3_rolloutdamagecalculation(void) static void atkB4_jumpifconfusedandstatmaxed(void) { - if (gBattleMons[gBankTarget].status2 & STATUS2_CONFUSION && gBattleMons[gBankTarget].statStages[BSScriptRead8(gBattlescriptCurrInstr + 1)] == 0xC) - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 2); + if (gBattleMons[gBankTarget].status2 & STATUS2_CONFUSION && gBattleMons[gBankTarget].statStages[T2_READ_8(gBattlescriptCurrInstr + 1)] == 0xC) + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2); else gBattlescriptCurrInstr += 6; } @@ -15464,7 +15446,7 @@ static void atkBA_jumpifnopursuitswitchdmg(void) gHitMarker &= ~(HITMARKER_ATTACKSTRING_PRINTED); } else - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } static void atkBB_setsunny(void) @@ -15499,7 +15481,7 @@ static void atkBC_maxattackhalvehp(void) //belly drum } else { - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } } @@ -15569,7 +15551,7 @@ static void atkC0_recoverbasedonsunlight(void) } else { - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } } @@ -15738,7 +15720,7 @@ static void atkC3_setfutureattack(void) { if (gWishFutureKnock.futureSightCounter[gBankTarget] != 0) { - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } else { @@ -15771,7 +15753,7 @@ static void atkC4_beat_up(void) party = gEnemyParty; if (gBattleMons[gBankTarget].hp == 0) - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); else { while (gBattleCommunication[0] < 6) @@ -15801,9 +15783,9 @@ static void atkC4_beat_up(void) gBattleCommunication[0]++; } else if (gBattleCommunication[0] != 0) - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); else - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 5); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 5); } } #else @@ -16125,7 +16107,7 @@ static void atkC9_jumpifattackandspecialattackcannotfall(void) //memento if (gBattleMons[gBankTarget].statStages[STAT_STAGE_ATK] == 0 && gBattleMons[gBankTarget].statStages[STAT_STAGE_SPATK] == 0 && gBattleCommunication[6] != 1) - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); else { gActiveBank = gBankAttacker; @@ -16171,13 +16153,13 @@ static void atkCD_cureifburnedparalysedorpoisoned(void) //refresh MarkBufferBankForExecution(gActiveBank); } else - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } static void atkCE_settorment(void) { if (gBattleMons[gBankTarget].status2 & STATUS2_TORMENT) - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); else { gBattleMons[gBankTarget].status2 |= STATUS2_TORMENT; @@ -16190,7 +16172,7 @@ static void atkCF_jumpifnodamage(void) if (gProtectStructs[gBankAttacker].physicalDmg || gProtectStructs[gBankAttacker].specialDmg) gBattlescriptCurrInstr += 5; else - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } static void atkD0_settaunt(void) @@ -16202,7 +16184,7 @@ static void atkD0_settaunt(void) gBattlescriptCurrInstr += 5; } else - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } static void atkD1_set_helpinghand(void) @@ -16215,7 +16197,7 @@ static void atkD1_set_helpinghand(void) gBattlescriptCurrInstr += 5; } else - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } #ifdef NONMATCHING @@ -16227,7 +16209,7 @@ static void atkD2_swap_items(void) if (gBattleTypeFlags) } - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } #else @@ -16560,12 +16542,12 @@ static void atkD3_copy_ability(void) //role play gBattlescriptCurrInstr += 5; } else - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } static void atkD4_wish_effect(void) { - switch (BSScriptRead8(gBattlescriptCurrInstr + 1)) + switch (T2_READ_8(gBattlescriptCurrInstr + 1)) { case 0: //use wish if (gWishFutureKnock.wishCounter[gBankAttacker] == 0) @@ -16575,7 +16557,7 @@ static void atkD4_wish_effect(void) gBattlescriptCurrInstr += 6; } else - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 2); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2); break; case 1: //heal effect gBattleTextBuff1[0] = 0xFD; @@ -16588,7 +16570,7 @@ static void atkD4_wish_effect(void) gBattleMoveDamage = 1; gBattleMoveDamage *= -1; if (gBattleMons[gBankTarget].hp == gBattleMons[gBankTarget].maxHP) - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 2); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2); else gBattlescriptCurrInstr += 6; break; @@ -16598,7 +16580,7 @@ static void atkD4_wish_effect(void) static void atkD5_setroots(void) //ingrain { if (gStatuses3[gBankAttacker] & STATUS3_ROOTED) - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); else { gStatuses3[gBankAttacker] |= STATUS3_ROOTED; @@ -16617,7 +16599,7 @@ static void atkD6_doubledamagedealtifdamaged(void) static void atkD7_setyawn(void) { if (gStatuses3[gBankTarget] & STATUS3_YAWN || (u8) gBattleMons[gBankTarget].status1) - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); else { gStatuses3[gBankTarget] |= 0x1000; @@ -16629,7 +16611,7 @@ static void atkD8_setdamagetohealthdifference(void) { if (gBattleMons[gBankTarget].hp <= gBattleMons[gBankAttacker].hp) { - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } else { @@ -16655,7 +16637,7 @@ static void atkDA_abilityswap(void) if ((gBattleMons[gBankAttacker].ability == 0 && gBattleMons[gBankTarget].ability == 0) || gBattleMons[gBankAttacker].ability == ABILITY_WONDER_GUARD || gBattleMons[gBankTarget].ability == ABILITY_WONDER_GUARD || gBattleMoveFlags & MOVESTATUS_NOEFFECT) - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); else { u8 atk_ability = gBattleMons[gBankAttacker].ability; @@ -16670,7 +16652,7 @@ static void atkDB_imprisoneffect(void) u8 r8 = 0; if ((gStatuses3[gBankAttacker] & STATUS3_IMPRISIONED)) { - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } else { @@ -16701,14 +16683,14 @@ static void atkDB_imprisoneffect(void) } } if (bank == gNoOfAllBanks) - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } } static void atkDC_setgrudge(void) { if (gStatuses3[gBankAttacker] & STATUS3_GRUDGE) - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); else { gStatuses3[gBankAttacker] |= STATUS3_GRUDGE; @@ -16782,7 +16764,7 @@ static void atkDE_asistattackselect(void) gBattlescriptCurrInstr += 5; } else - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } #else @@ -16978,7 +16960,7 @@ static void atkDF_setmagiccoat(void) gBankTarget = gBankAttacker; gSpecialStatuses[gBankAttacker].flag20 = 1; if (gCurrentMoveTurn == gNoOfAllBanks - 1) //last turn - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); else { gProtectStructs[gBankAttacker].bounceMove = 1; @@ -16990,7 +16972,7 @@ static void atkE0_setstealstatchange(void) { gSpecialStatuses[gBankAttacker].flag20 = 1; if (gCurrentMoveTurn == gNoOfAllBanks - 1) //last turn - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); else { gProtectStructs[gBankAttacker].stealMove = 1; @@ -17018,14 +17000,14 @@ static void atkE1_intimidate_string_loader(void) } if (gBankTarget >= gNoOfAllBanks) - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); else gBattlescriptCurrInstr += 5; } static void atkE2_switchout_abilities(void) { - gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + gActiveBank = GetBattleBank(T2_READ_8(gBattlescriptCurrInstr + 1)); switch (gBattleMons[gActiveBank].ability) { case ABILITY_NATURAL_CURE: @@ -17039,9 +17021,9 @@ static void atkE2_switchout_abilities(void) static void atkE3_jumpiffainted(void) { - gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1)); + gActiveBank = GetBattleBank(T2_READ_8(gBattlescriptCurrInstr + 1)); if (gBattleMons[gActiveBank].hp == 0) - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 2); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2); else gBattlescriptCurrInstr += 6; } @@ -17155,7 +17137,7 @@ static void atkE8_settypebasedhalvers(void) //water/mud sport if (worked) gBattlescriptCurrInstr += 5; else - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } static void atkE9_setweatherballtype(void) @@ -17193,7 +17175,7 @@ static void atkEA_recycleitem(void) gBattlescriptCurrInstr += 5; } else - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } static void atkEB_settypetoterrain(void) @@ -17209,7 +17191,7 @@ static void atkEB_settypetoterrain(void) gBattlescriptCurrInstr += 5; } else - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } static void atkEC_pursuit_sth(void) @@ -17225,7 +17207,7 @@ static void atkEC_pursuit_sth(void) gBankAttacker = gActiveBank; } else - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } static void atkED_802B4B4(void) @@ -17401,7 +17383,7 @@ static void atkF0_copy_caught_poke(void) static void atkF1_setpoke_as_caught(void) { if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(gBattleMons[gBankTarget].species), 1)) - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); else { GetSetPokedexFlag(SpeciesToNationalPokedexNum(gBattleMons[gBankTarget].species), 3); @@ -17605,14 +17587,14 @@ static void atkF3_nickname_caught_poke(void) if (gMain.callback2 == sub_800F808 && !gPaletteFade.active ) { SetMonData(&gEnemyParty[gBattlePartyID[gBankAttacker ^ 1]], MON_DATA_NICKNAME, BATTLE_STRUCT->caughtNick); - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } break; case 4: if (CalculatePlayerPartyCount() == 6) gBattlescriptCurrInstr += 5; else - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); break; } } diff --git a/src/battle/battle_ai.c b/src/battle/battle_ai.c index a8bd7aa19..3a5fb3d0d 100644 --- a/src/battle/battle_ai.c +++ b/src/battle/battle_ai.c @@ -412,7 +412,7 @@ void BattleAI_DoAIProcessing(void) break; case AIState_Processing: if (AI_THINKING_STRUCT->moveConsidered != MOVE_NONE) - sBattleAICmdTable[*(u8 *)gAIScriptPtr](); // run AI command. + sBattleAICmdTable[*gAIScriptPtr](); // run AI command. else { AI_THINKING_STRUCT->score[AI_THINKING_STRUCT->movesetIndex] = 0; // definitely do not consider any move that has 0 PP. @@ -470,7 +470,7 @@ void RecordItemBattle(u8 a, u8 b) static void BattleAICmd_if_random_less_than(void) { if (Random() % 256 < gAIScriptPtr[1]) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); else gAIScriptPtr += 6; } @@ -478,7 +478,7 @@ static void BattleAICmd_if_random_less_than(void) static void BattleAICmd_if_random_greater_than(void) { if (Random() % 256 > gAIScriptPtr[1]) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); else gAIScriptPtr += 6; } @@ -486,7 +486,7 @@ static void BattleAICmd_if_random_greater_than(void) static void BattleAICmd_if_random_equal(void) { if (Random() % 256 == gAIScriptPtr[1]) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); else gAIScriptPtr += 6; } @@ -494,7 +494,7 @@ static void BattleAICmd_if_random_equal(void) static void BattleAICmd_if_random_not_equal(void) { if (Random() % 256 != gAIScriptPtr[1]) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); else gAIScriptPtr += 6; } @@ -519,7 +519,7 @@ static void BattleAICmd_if_hp_less_than(void) index = gBankTarget; if ((u32)(100 * gBattleMons[index].hp / gBattleMons[index].maxHP) < gAIScriptPtr[2]) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3); else gAIScriptPtr += 7; } @@ -534,7 +534,7 @@ static void BattleAICmd_if_hp_more_than(void) index = gBankTarget; if ((u32)(100 * gBattleMons[index].hp / gBattleMons[index].maxHP) > gAIScriptPtr[2]) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3); else gAIScriptPtr += 7; } @@ -549,7 +549,7 @@ static void BattleAICmd_if_hp_equal(void) index = gBankTarget; if ((u32)(100 * gBattleMons[index].hp / gBattleMons[index].maxHP) == gAIScriptPtr[2]) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3); else gAIScriptPtr += 7; } @@ -564,7 +564,7 @@ static void BattleAICmd_if_hp_not_equal(void) index = gBankTarget; if ((u32)(100 * gBattleMons[index].hp / gBattleMons[index].maxHP) != gAIScriptPtr[2]) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3); else gAIScriptPtr += 7; } @@ -579,10 +579,10 @@ static void BattleAICmd_if_status(void) else index = gBankTarget; - arg = AIScriptRead32(gAIScriptPtr + 2); + arg = T1_READ_32(gAIScriptPtr + 2); if ((gBattleMons[index].status1 & arg) != 0) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 6); else gAIScriptPtr += 10; } @@ -597,10 +597,10 @@ static void BattleAICmd_if_not_status(void) else index = gBankTarget; - arg = AIScriptRead32(gAIScriptPtr + 2); + arg = T1_READ_32(gAIScriptPtr + 2); if ((gBattleMons[index].status1 & arg) == 0) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 6); else gAIScriptPtr += 10; } @@ -615,10 +615,10 @@ static void BattleAICmd_if_status2(void) else index = gBankTarget; - arg = AIScriptRead32(gAIScriptPtr + 2); + arg = T1_READ_32(gAIScriptPtr + 2); if ((gBattleMons[index].status2 & arg) != 0) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 6); else gAIScriptPtr += 10; } @@ -633,10 +633,10 @@ static void BattleAICmd_if_not_status2(void) else index = gBankTarget; - arg = AIScriptRead32(gAIScriptPtr + 2); + arg = T1_READ_32(gAIScriptPtr + 2); if ((gBattleMons[index].status2 & arg) == 0) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 6); else gAIScriptPtr += 10; } @@ -651,10 +651,10 @@ static void BattleAICmd_if_status3(void) else index = gBankTarget; - arg = AIScriptRead32(gAIScriptPtr + 2); + arg = T1_READ_32(gAIScriptPtr + 2); if ((gStatuses3[index] & arg) != 0) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 6); else gAIScriptPtr += 10; } @@ -669,10 +669,10 @@ static void BattleAICmd_if_not_status3(void) else index = gBankTarget; - arg = AIScriptRead32(gAIScriptPtr + 2); + arg = T1_READ_32(gAIScriptPtr + 2); if ((gStatuses3[index] & arg) == 0) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 6); else gAIScriptPtr += 10; } @@ -688,10 +688,10 @@ static void BattleAICmd_if_status4(void) index = gBankTarget; arg1 = GetBankIdentity(index) & 1; - arg2 = AIScriptRead32(gAIScriptPtr + 2); + arg2 = T1_READ_32(gAIScriptPtr + 2); if ((gSideAffecting[arg1] & arg2) != 0) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 6); else gAIScriptPtr += 10; } @@ -707,10 +707,10 @@ static void BattleAICmd_if_not_status4(void) index = gBankTarget; arg1 = GetBankIdentity(index) & 1; - arg2 = AIScriptRead32(gAIScriptPtr + 2); + arg2 = T1_READ_32(gAIScriptPtr + 2); if ((gSideAffecting[arg1] & arg2) == 0) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 6); else gAIScriptPtr += 10; } @@ -718,7 +718,7 @@ static void BattleAICmd_if_not_status4(void) static void BattleAICmd_if_less_than(void) { if (AI_THINKING_STRUCT->funcResult < gAIScriptPtr[1]) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); else gAIScriptPtr += 6; } @@ -726,7 +726,7 @@ static void BattleAICmd_if_less_than(void) static void BattleAICmd_if_more_than(void) { if (AI_THINKING_STRUCT->funcResult > gAIScriptPtr[1]) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); else gAIScriptPtr += 6; } @@ -734,7 +734,7 @@ static void BattleAICmd_if_more_than(void) static void BattleAICmd_if_equal(void) { if (AI_THINKING_STRUCT->funcResult == gAIScriptPtr[1]) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); else gAIScriptPtr += 6; } @@ -742,80 +742,80 @@ static void BattleAICmd_if_equal(void) static void BattleAICmd_if_not_equal(void) { if (AI_THINKING_STRUCT->funcResult != gAIScriptPtr[1]) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); else gAIScriptPtr += 6; } static void BattleAICmd_if_less_than_32(void) { - u8 *temp = AIScriptReadPtr(gAIScriptPtr + 1); + u8 *temp = T1_READ_PTR(gAIScriptPtr + 1); if (AI_THINKING_STRUCT->funcResult < *temp) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 5); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 5); else gAIScriptPtr += 9; } static void BattleAICmd_if_more_than_32(void) { - u8 *temp = AIScriptReadPtr(gAIScriptPtr + 1); + u8 *temp = T1_READ_PTR(gAIScriptPtr + 1); if (AI_THINKING_STRUCT->funcResult > *temp) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 5); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 5); else gAIScriptPtr += 9; } static void BattleAICmd_if_equal_32(void) { - u8 *temp = AIScriptReadPtr(gAIScriptPtr + 1); + u8 *temp = T1_READ_PTR(gAIScriptPtr + 1); if (AI_THINKING_STRUCT->funcResult == *temp) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 5); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 5); else gAIScriptPtr += 9; } static void BattleAICmd_if_not_equal_32(void) { - u8 *temp = AIScriptReadPtr(gAIScriptPtr + 1); + u8 *temp = T1_READ_PTR(gAIScriptPtr + 1); if (AI_THINKING_STRUCT->funcResult != *temp) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 5); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 5); else gAIScriptPtr += 9; } static void BattleAICmd_if_move(void) { - u16 move = AIScriptRead16(gAIScriptPtr + 1); + u16 move = T1_READ_16(gAIScriptPtr + 1); if (AI_THINKING_STRUCT->moveConsidered == move) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3); else gAIScriptPtr += 7; } static void BattleAICmd_if_not_move(void) { - u16 move = AIScriptRead16(gAIScriptPtr + 1); + u16 move = T1_READ_16(gAIScriptPtr + 1); if (AI_THINKING_STRUCT->moveConsidered != move) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3); else gAIScriptPtr += 7; } static void BattleAICmd_if_in_bytes(void) { - u8 *ptr = AIScriptReadPtr(gAIScriptPtr + 1); + u8 *ptr = T1_READ_PTR(gAIScriptPtr + 1); while (*ptr != 0xFF) { if (AI_THINKING_STRUCT->funcResult == *ptr) { - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 5); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 5); return; } ptr++; @@ -825,7 +825,7 @@ static void BattleAICmd_if_in_bytes(void) static void BattleAICmd_if_not_in_bytes(void) { - u8 *ptr = AIScriptReadPtr(gAIScriptPtr + 1); + u8 *ptr = T1_READ_PTR(gAIScriptPtr + 1); while (*ptr != 0xFF) { @@ -836,18 +836,18 @@ static void BattleAICmd_if_not_in_bytes(void) } ptr++; } - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 5); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 5); } static void BattleAICmd_if_in_words(void) { - u16 *ptr = (u16 *)AIScriptReadPtr(gAIScriptPtr + 1); + u16 *ptr = (u16 *)T1_READ_PTR(gAIScriptPtr + 1); while (*ptr != 0xFFFF) { if (AI_THINKING_STRUCT->funcResult == *ptr) { - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 5); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 5); return; } ptr++; @@ -857,7 +857,7 @@ static void BattleAICmd_if_in_words(void) static void BattleAICmd_if_not_in_words(void) { - u16 *ptr = (u16 *)AIScriptReadPtr(gAIScriptPtr + 1); + u16 *ptr = (u16 *)T1_READ_PTR(gAIScriptPtr + 1); while (*ptr != 0xFFFF) { @@ -868,7 +868,7 @@ static void BattleAICmd_if_not_in_words(void) } ptr++; } - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 5); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 5); } static void BattleAICmd_if_user_can_damage(void) @@ -884,7 +884,7 @@ static void BattleAICmd_if_user_can_damage(void) if (i == MAX_MON_MOVES) gAIScriptPtr += 5; else - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 1); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); } static void BattleAICmd_if_user_cant_damage(void) @@ -900,7 +900,7 @@ static void BattleAICmd_if_user_cant_damage(void) if (i != MAX_MON_MOVES) gAIScriptPtr += 5; else - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 1); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); } static void BattleAICmd_get_turn_count(void) @@ -1259,7 +1259,7 @@ static void BattleAICmd_get_move(void) static void BattleAICmd_if_arg_equal(void) { if (gAIScriptPtr[1] == AI_THINKING_STRUCT->funcResult) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); else gAIScriptPtr += 6; } @@ -1267,7 +1267,7 @@ static void BattleAICmd_if_arg_equal(void) static void BattleAICmd_if_arg_not_equal(void) { if (gAIScriptPtr[1] != AI_THINKING_STRUCT->funcResult) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); else gAIScriptPtr += 6; } @@ -1275,7 +1275,7 @@ static void BattleAICmd_if_arg_not_equal(void) static void BattleAICmd_if_would_go_first(void) { if (GetWhoStrikesFirst(gBankAttacker, gBankTarget, 1) == gAIScriptPtr[1]) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); else gAIScriptPtr += 6; } @@ -1283,7 +1283,7 @@ static void BattleAICmd_if_would_go_first(void) static void BattleAICmd_if_would_not_go_first(void) { if (GetWhoStrikesFirst(gBankAttacker, gBankTarget, 1) != gAIScriptPtr[1]) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); else gAIScriptPtr += 6; } @@ -1487,7 +1487,7 @@ static void BattleAICmd_if_damage_bonus(void) damageVar = gBattleMoveDamage; if (damageVar == gAIScriptPtr[1]) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); else gAIScriptPtr += 6; } @@ -1518,7 +1518,7 @@ static void BattleAICmd_if_status_in_party(void) break; } - statusToCompareTo = AIScriptRead32(gAIScriptPtr + 2); + statusToCompareTo = T1_READ_32(gAIScriptPtr + 2); for (i = 0; i < 6; i++) { @@ -1528,7 +1528,7 @@ static void BattleAICmd_if_status_in_party(void) if (species != SPECIES_NONE && species != SPECIES_EGG && hp != 0 && status == statusToCompareTo) { - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6); // WHAT. why is this being merged into the above switch + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 6); // WHAT. why is this being merged into the above switch return; } } @@ -1554,7 +1554,7 @@ static void BattleAICmd_if_status_not_in_party(void) break; } - statusToCompareTo = AIScriptRead32(gAIScriptPtr + 2); + statusToCompareTo = T1_READ_32(gAIScriptPtr + 2); for (i = 0; i < 6; i++) { @@ -1566,7 +1566,7 @@ static void BattleAICmd_if_status_not_in_party(void) if (species != SPECIES_NONE && species != SPECIES_EGG && hp != 0 && status == statusToCompareTo) gAIScriptPtr += 10; // doesnt return? } - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 6); } static void BattleAICmd_get_weather(void) @@ -1586,7 +1586,7 @@ static void BattleAICmd_get_weather(void) static void BattleAICmd_if_effect(void) { if (gBattleMoves[AI_THINKING_STRUCT->moveConsidered].effect == gAIScriptPtr[1]) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); else gAIScriptPtr += 6; } @@ -1594,7 +1594,7 @@ static void BattleAICmd_if_effect(void) static void BattleAICmd_if_not_effect(void) { if (gBattleMoves[AI_THINKING_STRUCT->moveConsidered].effect != gAIScriptPtr[1]) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); else gAIScriptPtr += 6; } @@ -1609,7 +1609,7 @@ static void BattleAICmd_if_stat_level_less_than(void) party = gBankTarget; if (gBattleMons[party].statStages[gAIScriptPtr[2]] < gAIScriptPtr[3]) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 4); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4); else gAIScriptPtr += 8; } @@ -1624,7 +1624,7 @@ static void BattleAICmd_if_stat_level_more_than(void) party = gBankTarget; if (gBattleMons[party].statStages[gAIScriptPtr[2]] > gAIScriptPtr[3]) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 4); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4); else gAIScriptPtr += 8; } @@ -1639,7 +1639,7 @@ static void BattleAICmd_if_stat_level_equal(void) party = gBankTarget; if (gBattleMons[party].statStages[gAIScriptPtr[2]] == gAIScriptPtr[3]) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 4); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4); else gAIScriptPtr += 8; } @@ -1654,7 +1654,7 @@ static void BattleAICmd_if_stat_level_not_equal(void) party = gBankTarget; if (gBattleMons[party].statStages[gAIScriptPtr[2]] != gAIScriptPtr[3]) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 4); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4); else gAIScriptPtr += 8; } @@ -1683,7 +1683,7 @@ static void BattleAICmd_if_can_faint(void) gBattleMoveDamage = 1; if (gBattleMons[gBankTarget].hp <= gBattleMoveDamage) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 1); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); else gAIScriptPtr += 5; } @@ -1710,7 +1710,7 @@ static void BattleAICmd_if_cant_faint(void) // this macro is missing the damage 0 = 1 assumption. if (gBattleMons[gBankTarget].hp > gBattleMoveDamage) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 1); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); else gAIScriptPtr += 5; } @@ -1732,7 +1732,7 @@ static void BattleAICmd_if_has_move(void) if (i == MAX_MON_MOVES) gAIScriptPtr += 8; else - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 4); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4); break; case 0: case 2: @@ -1744,7 +1744,7 @@ static void BattleAICmd_if_has_move(void) if (i == 8) gAIScriptPtr += 8; else - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 4); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4); break; } } @@ -1766,7 +1766,7 @@ static void BattleAICmd_if_dont_have_move(void) if (i != MAX_MON_MOVES) gAIScriptPtr += 8; else - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 4); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4); break; case 0: case 2: @@ -1778,7 +1778,7 @@ static void BattleAICmd_if_dont_have_move(void) if (i != 8) gAIScriptPtr += 8; else - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 4); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4); break; } } @@ -1797,7 +1797,7 @@ static void BattleAICmd_if_move_effect(void) break; } if (i != MAX_MON_MOVES) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3); else gAIScriptPtr += 7; break; @@ -1808,7 +1808,7 @@ static void BattleAICmd_if_move_effect(void) if (gBattleMons[gBankAttacker].moves[i] != 0 && gBattleMoves[UNK_2016A00_STRUCT->movesUsed[gBankTarget >> 1][i]].effect == gAIScriptPtr[2]) break; } - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3); } } @@ -1828,7 +1828,7 @@ static void BattleAICmd_if_not_move_effect(void) if (i != MAX_MON_MOVES) gAIScriptPtr += 7; else - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3); break; case 0: case 2: @@ -1857,7 +1857,7 @@ static void BattleAICmd_if_last_move_did_damage(void) gAIScriptPtr += 7; return; } - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3); return; } else if (gAIScriptPtr[2] != 1) // ignore the macro if its not 0 or 1. @@ -1867,7 +1867,7 @@ static void BattleAICmd_if_last_move_did_damage(void) } else if (gDisableStructs[index].encoredMove != 0) { - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3); return; } gAIScriptPtr += 7; @@ -1880,7 +1880,7 @@ static void BattleAICmd_if_encored(void) case 0: // _08109348 if (gDisableStructs[gActiveBank].disabledMove == AI_THINKING_STRUCT->moveConsidered) { - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); return; } gAIScriptPtr += 6; @@ -1888,7 +1888,7 @@ static void BattleAICmd_if_encored(void) case 1: // _08109370 if (gDisableStructs[gActiveBank].encoredMove == AI_THINKING_STRUCT->moveConsidered) { - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); return; } gAIScriptPtr += 6; @@ -1909,7 +1909,7 @@ static void BattleAICmd_if_random_100(void) u8 safariFleeRate = BATTLE_STRUCT->safariFleeRate * 5; // safari flee rate, from 0-20 if ((u8)(Random() % 100) < safariFleeRate) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 1); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); else gAIScriptPtr += 5; } @@ -2066,12 +2066,12 @@ static void BattleAICmd_nullsub_57(void) static void BattleAICmd_call(void) { AIStackPushVar(gAIScriptPtr + 5); - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 1); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); } static void BattleAICmd_jump(void) { - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 1); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); } static void BattleAICmd_end(void) @@ -2087,7 +2087,7 @@ static void BattleAICmd_if_level_compare(void) case 0: // greater than if (gBattleMons[gBankAttacker].level > gBattleMons[gBankTarget].level) { - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); return; } gAIScriptPtr += 6; @@ -2095,7 +2095,7 @@ static void BattleAICmd_if_level_compare(void) case 1: // less than if (gBattleMons[gBankAttacker].level < gBattleMons[gBankTarget].level) { - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); return; } gAIScriptPtr += 6; @@ -2103,7 +2103,7 @@ static void BattleAICmd_if_level_compare(void) case 2: // equal if (gBattleMons[gBankAttacker].level == gBattleMons[gBankTarget].level) { - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); return; } gAIScriptPtr += 6; @@ -2114,7 +2114,7 @@ static void BattleAICmd_if_level_compare(void) static void BattleAICmd_if_taunted(void) { if (gDisableStructs[gBankTarget].tauntTimer1 != 0) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 1); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); else gAIScriptPtr += 5; } @@ -2122,7 +2122,7 @@ static void BattleAICmd_if_taunted(void) static void BattleAICmd_if_not_taunted(void) { if (gDisableStructs[gBankTarget].tauntTimer1 == 0) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 1); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); else gAIScriptPtr += 5; } diff --git a/src/battle/battle_anim.c b/src/battle/battle_anim.c index 5790cffe4..eac16ee18 100644 --- a/src/battle/battle_anim.c +++ b/src/battle/battle_anim.c @@ -335,7 +335,7 @@ static void RunAnimScriptCommand(void) { do { - sScriptCmdTable[SCRIPT_READ_8(gBattleAnimScriptPtr)](); + sScriptCmdTable[T1_READ_8(gBattleAnimScriptPtr)](); } while (gAnimFramesToWait == 0 && gAnimScriptActive != FALSE); } @@ -344,7 +344,7 @@ static void ScriptCmd_loadsprite(void) u16 index; gBattleAnimScriptPtr++; - index = SCRIPT_READ_16(gBattleAnimScriptPtr); + index = T1_READ_16(gBattleAnimScriptPtr); LoadCompressedObjectPic(&gBattleAnimPicTable[GET_TRUE_SPRITE_INDEX(index)]); LoadCompressedObjectPalette(&gBattleAnimPaletteTable[GET_TRUE_SPRITE_INDEX(index)]); gBattleAnimScriptPtr += 2; @@ -358,7 +358,7 @@ static void ScriptCmd_unloadsprite(void) u16 index; gBattleAnimScriptPtr++; - index = SCRIPT_READ_16(gBattleAnimScriptPtr); + index = T1_READ_16(gBattleAnimScriptPtr); FreeSpriteTilesByTag(gBattleAnimPicTable[GET_TRUE_SPRITE_INDEX(index)].tag); FreeSpritePaletteByTag(gBattleAnimPicTable[GET_TRUE_SPRITE_INDEX(index)].tag); gBattleAnimScriptPtr += 2; @@ -378,15 +378,15 @@ static void ScriptCmd_sprite(void) s8 r1; gBattleAnimScriptPtr++; - r7 = (struct SpriteTemplate *)(SCRIPT_READ_32(gBattleAnimScriptPtr)); + r7 = (struct SpriteTemplate *)(T2_READ_32(gBattleAnimScriptPtr)); gBattleAnimScriptPtr += 4; - r4 = SCRIPT_READ_8(gBattleAnimScriptPtr); + r4 = T1_READ_8(gBattleAnimScriptPtr); gBattleAnimScriptPtr++; - r0 = SCRIPT_READ_8(gBattleAnimScriptPtr); + r0 = T1_READ_8(gBattleAnimScriptPtr); gBattleAnimScriptPtr++; for (i = 0; i < r0; i++) { - gBattleAnimArgs[i] = SCRIPT_READ_16(gBattleAnimScriptPtr); + gBattleAnimArgs[i] = T1_READ_16(gBattleAnimScriptPtr); gBattleAnimScriptPtr += 2; } if (r4 & 0x80) @@ -559,16 +559,16 @@ static void ScriptCmd_createtask(void) s32 i; gBattleAnimScriptPtr++; - taskFunc = (TaskFunc)SCRIPT_READ_32(gBattleAnimScriptPtr); + taskFunc = (TaskFunc)T2_READ_32(gBattleAnimScriptPtr); gBattleAnimScriptPtr += 4; - taskPriority = SCRIPT_READ_8(gBattleAnimScriptPtr); + taskPriority = T1_READ_8(gBattleAnimScriptPtr); gBattleAnimScriptPtr++; - numArgs = SCRIPT_READ_8(gBattleAnimScriptPtr); + numArgs = T1_READ_8(gBattleAnimScriptPtr); gBattleAnimScriptPtr++; for (i = 0; i < numArgs; i++) { - gBattleAnimArgs[i] = SCRIPT_READ_16(gBattleAnimScriptPtr); + gBattleAnimArgs[i] = T1_READ_16(gBattleAnimScriptPtr); gBattleAnimScriptPtr += 2; } @@ -580,7 +580,7 @@ static void ScriptCmd_createtask(void) static void ScriptCmd_delay(void) { gBattleAnimScriptPtr++; - gAnimFramesToWait = SCRIPT_READ_8(gBattleAnimScriptPtr); + gAnimFramesToWait = T1_READ_8(gBattleAnimScriptPtr); if (gAnimFramesToWait == 0) gAnimFramesToWait = -1; gBattleAnimScriptPtr++; @@ -666,7 +666,7 @@ static void ScriptCmd_end(void) static void ScriptCmd_playse(void) { gBattleAnimScriptPtr++; - PlaySE(SCRIPT_READ_16(gBattleAnimScriptPtr)); + PlaySE(T1_READ_16(gBattleAnimScriptPtr)); gBattleAnimScriptPtr += 2; } @@ -680,7 +680,7 @@ static void ScriptCmd_monbg(void) u8 taskId; gBattleAnimScriptPtr++; - r6 = SCRIPT_READ_8(gBattleAnimScriptPtr); + r6 = T1_READ_8(gBattleAnimScriptPtr); if (r6 == 0) r6 = 2; else if (r6 == 1) @@ -1090,7 +1090,7 @@ static void ScriptCmd_clearmonbg(void) u8 taskId; gBattleAnimScriptPtr++; - r4 = SCRIPT_READ_8(gBattleAnimScriptPtr); + r4 = T1_READ_8(gBattleAnimScriptPtr); if (r4 == 0) r4 = 2; else if (r4 == 1) @@ -1149,7 +1149,7 @@ static void ScriptCmd_monbg_22(void) u8 r1; gBattleAnimScriptPtr++; - r5 = SCRIPT_READ_8(gBattleAnimScriptPtr); + r5 = T1_READ_8(gBattleAnimScriptPtr); if (r5 == 0) r5 = 2; else if (r5 == 1) @@ -1191,7 +1191,7 @@ static void ScriptCmd_clearmonbg_23(void) u8 taskId; gBattleAnimScriptPtr++; - r5 = SCRIPT_READ_8(gBattleAnimScriptPtr); + r5 = T1_READ_8(gBattleAnimScriptPtr); if (r5 == 0) r5 = 2; else if (r5 == 1) @@ -1268,12 +1268,9 @@ static void ScriptCmd_blendoff(void) static void ScriptCmd_call(void) { - u32 addr; - gBattleAnimScriptPtr++; gBattleAnimScriptRetAddr = gBattleAnimScriptPtr + 4; - addr = SCRIPT_READ_32(gBattleAnimScriptPtr); - gBattleAnimScriptPtr = (u8 *)addr; + gBattleAnimScriptPtr = T2_READ_PTR(gBattleAnimScriptPtr); } static void ScriptCmd_return(void) @@ -1288,36 +1285,31 @@ static void ScriptCmd_setvar(void) u8 r2; gBattleAnimScriptPtr++; - r2 = SCRIPT_READ_8(gBattleAnimScriptPtr); + r2 = T1_READ_8(gBattleAnimScriptPtr); gBattleAnimScriptPtr++; - r4 = SCRIPT_READ_16(gBattleAnimScriptPtr); + r4 = T1_READ_16(gBattleAnimScriptPtr); gBattleAnimScriptPtr = addr + 4; gBattleAnimArgs[r2] = r4; } static void ScriptCmd_ifelse(void) { - u32 addr; - gBattleAnimScriptPtr++; if (gUnknown_0202F7C4 & 1) gBattleAnimScriptPtr += 4; - addr = SCRIPT_READ_32(gBattleAnimScriptPtr); - gBattleAnimScriptPtr = (u8 *)addr; + gBattleAnimScriptPtr = T2_READ_PTR(gBattleAnimScriptPtr); } static void ScriptCmd_jumpif(void) { u8 r1; - u32 addr; gBattleAnimScriptPtr++; - r1 = SCRIPT_READ_8(gBattleAnimScriptPtr); + r1 = T1_READ_8(gBattleAnimScriptPtr); gBattleAnimScriptPtr++; if (r1 == gUnknown_0202F7C4) { - addr = SCRIPT_READ_32(gBattleAnimScriptPtr); - gBattleAnimScriptPtr = (u8 *)addr; + gBattleAnimScriptPtr = T2_READ_PTR(gBattleAnimScriptPtr); } else { @@ -1327,11 +1319,8 @@ static void ScriptCmd_jumpif(void) static void ScriptCmd_jump(void) { - u32 addr; - gBattleAnimScriptPtr++; - addr = SCRIPT_READ_32(gBattleAnimScriptPtr); - gBattleAnimScriptPtr = (u8 *)addr; + gBattleAnimScriptPtr = T2_READ_PTR(gBattleAnimScriptPtr); } bool8 NotInBattle(void) @@ -1348,7 +1337,7 @@ static void ScriptCmd_fadetobg(void) u8 taskId; gBattleAnimScriptPtr++; - r4 = SCRIPT_READ_8(gBattleAnimScriptPtr); + r4 = T1_READ_8(gBattleAnimScriptPtr); gBattleAnimScriptPtr++; taskId = CreateTask(task_p5_load_battle_screen_elements, 5); gTasks[taskId].data[0] = r4; @@ -1484,7 +1473,7 @@ static void ScriptCmd_waitbgfadein(void) static void ScriptCmd_changebg(void) { gBattleAnimScriptPtr++; - sub_8076DB8(SCRIPT_READ_8(gBattleAnimScriptPtr)); + sub_8076DB8(T1_READ_8(gBattleAnimScriptPtr)); gBattleAnimScriptPtr++; } @@ -1705,8 +1694,8 @@ static void ScriptCmd_panse_19(void) s8 r0; gBattleAnimScriptPtr++; - r4 = SCRIPT_READ_16(gBattleAnimScriptPtr); - r0 = SCRIPT_READ_8(gBattleAnimScriptPtr + 2); + r4 = T1_READ_16(gBattleAnimScriptPtr); + r0 = T1_READ_8(gBattleAnimScriptPtr + 2); PlaySE12WithPanning(r4, sub_8076F98(r0)); gBattleAnimScriptPtr += 3; } @@ -1716,7 +1705,7 @@ static void ScriptCmd_setpan(void) s8 r0; gBattleAnimScriptPtr++; - r0 = SCRIPT_READ_8(gBattleAnimScriptPtr); + r0 = T1_READ_8(gBattleAnimScriptPtr); SE12PanpotControl(sub_8076F98(r0)); gBattleAnimScriptPtr++; } @@ -1733,11 +1722,11 @@ static void ScriptCmd_panse_1B(void) u8 taskId; gBattleAnimScriptPtr++; - songNum = SCRIPT_READ_16(gBattleAnimScriptPtr); - r0 = SCRIPT_READ_8(gBattleAnimScriptPtr + 2); - r4 = SCRIPT_READ_8(gBattleAnimScriptPtr + 3); - r6 = SCRIPT_READ_8(gBattleAnimScriptPtr + 4); - r7 = SCRIPT_READ_8(gBattleAnimScriptPtr + 5); + songNum = T1_READ_16(gBattleAnimScriptPtr); + r0 = T1_READ_8(gBattleAnimScriptPtr + 2); + r4 = T1_READ_8(gBattleAnimScriptPtr + 3); + r6 = T1_READ_8(gBattleAnimScriptPtr + 4); + r7 = T1_READ_8(gBattleAnimScriptPtr + 5); panning = sub_8076F98(r0); r8 = sub_8076F98(r4); r4 = sub_807712C(panning, r8, r6); @@ -1898,11 +1887,11 @@ static void ScriptCmd_panse_26(void) u8 taskId; gBattleAnimScriptPtr++; - r8 = SCRIPT_READ_16(gBattleAnimScriptPtr); - r4 = SCRIPT_READ_8(gBattleAnimScriptPtr + 2); - r5 = SCRIPT_READ_8(gBattleAnimScriptPtr + 3); - r6 = SCRIPT_READ_8(gBattleAnimScriptPtr + 4); - r10 = SCRIPT_READ_8(gBattleAnimScriptPtr + 5); + r8 = T1_READ_16(gBattleAnimScriptPtr); + r4 = T1_READ_8(gBattleAnimScriptPtr + 2); + r5 = T1_READ_8(gBattleAnimScriptPtr + 3); + r6 = T1_READ_8(gBattleAnimScriptPtr + 4); + r10 = T1_READ_8(gBattleAnimScriptPtr + 5); taskId = CreateTask(c3_08073CEC, 1); gTasks[taskId].data[0] = r4; gTasks[taskId].data[1] = r5; @@ -1927,11 +1916,11 @@ static void ScriptCmd_panse_27(void) u8 taskId; gBattleAnimScriptPtr++; - r9 = SCRIPT_READ_16(gBattleAnimScriptPtr); - r0 = SCRIPT_READ_8(gBattleAnimScriptPtr + 2); - r4 = SCRIPT_READ_8(gBattleAnimScriptPtr + 3); - r8 = SCRIPT_READ_8(gBattleAnimScriptPtr + 4); - r7 = SCRIPT_READ_8(gBattleAnimScriptPtr + 5); + r9 = T1_READ_16(gBattleAnimScriptPtr); + r0 = T1_READ_8(gBattleAnimScriptPtr + 2); + r4 = T1_READ_8(gBattleAnimScriptPtr + 3); + r8 = T1_READ_8(gBattleAnimScriptPtr + 4); + r7 = T1_READ_8(gBattleAnimScriptPtr + 5); r6 = sub_8077094(r0); r5 = sub_8077094(r4); r4_2 = sub_8077094(r8); @@ -1956,10 +1945,10 @@ static void ScriptCmd_panse_1C(void) u8 taskId; gBattleAnimScriptPtr++; - r5 = SCRIPT_READ_16(gBattleAnimScriptPtr); - r0 = SCRIPT_READ_8(gBattleAnimScriptPtr + 2); - r8 = SCRIPT_READ_8(gBattleAnimScriptPtr + 3); - r9 = SCRIPT_READ_8(gBattleAnimScriptPtr + 4); + r5 = T1_READ_16(gBattleAnimScriptPtr); + r0 = T1_READ_8(gBattleAnimScriptPtr + 2); + r8 = T1_READ_8(gBattleAnimScriptPtr + 3); + r9 = T1_READ_8(gBattleAnimScriptPtr + 4); r4 = sub_8076F98(r0); taskId = CreateTask(sub_80774FC, 1); gTasks[taskId].data[0] = r5; @@ -2006,9 +1995,9 @@ static void ScriptCmd_panse_1D(void) u8 taskId; gBattleAnimScriptPtr++; - r5 = SCRIPT_READ_16(gBattleAnimScriptPtr); - r0 = SCRIPT_READ_8(gBattleAnimScriptPtr + 2); - r8 = SCRIPT_READ_8(gBattleAnimScriptPtr + 3); + r5 = T1_READ_16(gBattleAnimScriptPtr); + r0 = T1_READ_8(gBattleAnimScriptPtr + 2); + r8 = T1_READ_8(gBattleAnimScriptPtr + 3); r4 = sub_8076F98(r0); taskId = CreateTask(sub_80775CC, 1); gTasks[taskId].data[0] = r5; @@ -2040,13 +2029,13 @@ static void ScriptCmd_createtask_1F(void) u8 taskId; gBattleAnimScriptPtr++; - func = (TaskFunc)SCRIPT_READ_32(gBattleAnimScriptPtr); + func = (TaskFunc)T2_READ_32(gBattleAnimScriptPtr); gBattleAnimScriptPtr += 4; - numArgs = SCRIPT_READ_8(gBattleAnimScriptPtr); + numArgs = T1_READ_8(gBattleAnimScriptPtr); gBattleAnimScriptPtr++; for (i = 0; i < numArgs; i++) { - gBattleAnimArgs[i] = SCRIPT_READ_16(gBattleAnimScriptPtr); + gBattleAnimArgs[i] = T1_READ_16(gBattleAnimScriptPtr); gBattleAnimScriptPtr += 2; } taskId = CreateTask(func, 1); @@ -2089,11 +2078,11 @@ static void ScriptCmd_jumpvareq(void) u8 *addr; gBattleAnimScriptPtr++; - r2 = SCRIPT_READ_8(gBattleAnimScriptPtr); - r1 = SCRIPT_READ_16(gBattleAnimScriptPtr + 1); + r2 = T1_READ_8(gBattleAnimScriptPtr); + r1 = T1_READ_16(gBattleAnimScriptPtr + 1); if (r1 == gBattleAnimArgs[r2]) { - addr = (u8 *)SCRIPT_READ_32(gBattleAnimScriptPtr + 3); + addr = T2_READ_PTR(gBattleAnimScriptPtr + 3); gBattleAnimScriptPtr = addr; } else @@ -2109,7 +2098,7 @@ static void ScriptCmd_jumpunkcond(void) gBattleAnimScriptPtr++; if (NotInBattle()) { - addr = (u8 *)SCRIPT_READ_32(gBattleAnimScriptPtr); + addr = T2_READ_PTR(gBattleAnimScriptPtr); gBattleAnimScriptPtr = addr; } else @@ -2124,7 +2113,7 @@ static void ScriptCmd_monbgprio_28(void) u8 r0; u8 r4; - r2 = SCRIPT_READ_8(gBattleAnimScriptPtr + 1); + r2 = T1_READ_8(gBattleAnimScriptPtr + 1); gBattleAnimScriptPtr += 2; if (r2 != 0) r0 = gBattleAnimBankTarget; @@ -2154,7 +2143,7 @@ static void ScriptCmd_monbgprio_2A(void) u8 r4; u8 r0; - r6 = SCRIPT_READ_8(gBattleAnimScriptPtr + 1); + r6 = T1_READ_8(gBattleAnimScriptPtr + 1); gBattleAnimScriptPtr += 2; if (GetBankSide(gBattleAnimBankAttacker) != GetBankSide(gBattleAnimBankTarget)) { @@ -2176,7 +2165,7 @@ static void ScriptCmd_invisible(void) u8 r0; u8 spriteId; - r0 = SCRIPT_READ_8(gBattleAnimScriptPtr + 1); + r0 = T1_READ_8(gBattleAnimScriptPtr + 1); spriteId = GetAnimBankSpriteId(r0); if (spriteId != 0xFF) { @@ -2190,7 +2179,7 @@ static void ScriptCmd_visible(void) u8 r0; u8 spriteId; - r0 = SCRIPT_READ_8(gBattleAnimScriptPtr + 1); + r0 = T1_READ_8(gBattleAnimScriptPtr + 1); spriteId = GetAnimBankSpriteId(r0); if (spriteId != 0xFF) { @@ -2205,7 +2194,7 @@ static void ScriptCmd_doublebattle_2D(void) u8 r4; u8 spriteId; - r7 = SCRIPT_READ_8(gBattleAnimScriptPtr + 1); + r7 = T1_READ_8(gBattleAnimScriptPtr + 1); gBattleAnimScriptPtr += 2; if (!NotInBattle() && IsDoubleBattle() && GetBankSide(gBattleAnimBankAttacker) == GetBankSide(gBattleAnimBankTarget)) @@ -2239,7 +2228,7 @@ static void ScriptCmd_doublebattle_2E(void) u8 r4; u8 spriteId; - r7 = SCRIPT_READ_8(gBattleAnimScriptPtr + 1); + r7 = T1_READ_8(gBattleAnimScriptPtr + 1); gBattleAnimScriptPtr += 2; if (!NotInBattle() && IsDoubleBattle() && GetBankSide(gBattleAnimBankAttacker) == GetBankSide(gBattleAnimBankTarget)) diff --git a/src/battle/battle_controller_player.c b/src/battle/battle_controller_player.c index 70eeed5f7..8f63cd1ee 100644 --- a/src/battle/battle_controller_player.c +++ b/src/battle/battle_controller_player.c @@ -2595,7 +2595,7 @@ void PlayerHandlecmd18(void) sub_802E3E4(gActionSelectionCursor[gActiveBank], 0); - StrCpyDecodeToDisplayedStringBattle((u8 *) gUnknown_08400CA8); + StrCpyDecodeToDisplayedStringBattle(gUnknown_08400CA8); InitWindow(&gUnknown_03004210, gDisplayedStringBattle, SUB_803037C_TILE_DATA_OFFSET, 2, 35); sub_8002F44(&gUnknown_03004210); } diff --git a/src/battle/battle_controller_safari.c b/src/battle/battle_controller_safari.c index e05578c31..2fcdf7548 100644 --- a/src/battle/battle_controller_safari.c +++ b/src/battle/battle_controller_safari.c @@ -483,7 +483,7 @@ void SafariHandlecmd18(void) nullsub_8(i); sub_802E3E4(gActionSelectionCursor[gActiveBank], 0); - StrCpyDecodeToDisplayedStringBattle((u8 *) gUnknown_08400CBB); + StrCpyDecodeToDisplayedStringBattle(gUnknown_08400CBB); InitWindow(&gUnknown_03004210, gDisplayedStringBattle, SUB_812BB10_TILE_DATA_OFFSET, 2, 35); sub_8002F44(&gUnknown_03004210); diff --git a/src/battle/battle_records.c b/src/battle/battle_records.c index fd1f528ac..54697593b 100644 --- a/src/battle/battle_records.c +++ b/src/battle/battle_records.c @@ -243,7 +243,7 @@ static void PrintLinkBattleRecord(struct LinkBattleRecord *record, u8 y) void ShowLinkBattleRecords(void) { s32 i; MenuDrawTextWindow(1, 0, 28, 18); - sub_8072BD8((u8 *) gOtherText_BattleResults, 0, 1, 240); + sub_8072BD8(gOtherText_BattleResults, 0, 1, 240); PrintLinkBattleWinsLossesDraws(gSaveBlock1.linkBattleRecords); #if ENGLISH diff --git a/src/battle/battle_setup.c b/src/battle/battle_setup.c index 91a0667d9..8327ed59d 100644 --- a/src/battle/battle_setup.c +++ b/src/battle/battle_setup.c @@ -880,19 +880,20 @@ static void CB2_EndFirstBattle(void) SetMainCallback2(c2_exit_to_overworld_1_continue_scripts_restart_music); } +// why not just use the macros? maybe its because they didnt want to uncast const every time? static u32 TrainerBattleLoadArg32(const u8 *ptr) { - return ptr[0] | (ptr[1] << 8) | (ptr[2] << 16) | (ptr[3] << 24); + return T1_READ_32(ptr); } static u16 TrainerBattleLoadArg16(const u8 *ptr) { - return ptr[0] | (ptr[1] << 8); + return T1_READ_16(ptr); } static u8 TrainerBattleLoadArg8(const u8 *ptr) { - return ptr[0]; + return T1_READ_8(ptr); } static u16 CurrentOpponentTrainerFlag(void) @@ -1123,8 +1124,8 @@ void ScrSpecial_StartTrainerEyeRematch(void) ScriptContext1_Stop(); } -static u8 *GetTrainerIntroSpeech(void); -static u8 *GetTrainerNonBattlingSpeech(void); +static const u8 *GetTrainerIntroSpeech(void); +static const u8 *GetTrainerNonBattlingSpeech(void); void ScrSpecial_ShowTrainerIntroSpeech(void) { @@ -1207,15 +1208,15 @@ void PlayTrainerEncounterMusic(void) } //Returns an empty string if a null pointer was passed, otherwise returns str -static u8 *SanitizeString(const u8 *str) +static const u8 *SanitizeString(const u8 *str) { if (str) - return (u8 *) str; + return str; else - return (u8 *) gOtherText_CancelWithTerminator; + return gOtherText_CancelWithTerminator; } -static u8 *GetTrainerIntroSpeech(void) +static const u8 *GetTrainerIntroSpeech(void) { return SanitizeString(sTrainerIntroSpeech); } @@ -1233,12 +1234,12 @@ u8 *sub_8082830(void) return gStringVar4; } -u8 *unref_sub_808286C(void) +const u8 *unref_sub_808286C(void) { return SanitizeString(sTrainerVictorySpeech); } -static u8 *GetTrainerNonBattlingSpeech(void) +static const u8 *GetTrainerNonBattlingSpeech(void) { return SanitizeString(sTrainerCannotBattleSpeech); } diff --git a/src/engine/link.c b/src/engine/link.c index 850201ccb..7f7e48083 100644 --- a/src/engine/link.c +++ b/src/engine/link.c @@ -954,7 +954,7 @@ static u16 LinkTestCalcBlockChecksum(void *data, u16 size) static void PrintHexDigit(u8 tileNum, u8 x, u8 y) { - u16 *tilemap = (u16 *)BG_SCREEN_ADDR(gLinkTestBGInfo.screenBaseBlock); + u16 *tilemap = BG_SCREEN_ADDR(gLinkTestBGInfo.screenBaseBlock); tilemap[(32 * y) + x] = (gLinkTestBGInfo.paletteNum << 12) | (tileNum + 1); } diff --git a/src/engine/text.c b/src/engine/text.c index 87903608f..9bb33f3c2 100644 --- a/src/engine/text.c +++ b/src/engine/text.c @@ -396,6 +396,8 @@ extern const u32 gFont4LatinGlyphs[]; extern const u32 gFont3JapaneseGlyphs[]; extern const u32 gFont4JapaneseGlyphs[]; +// Getting rid of the u8 recasting will make the ROM no longer match due to +// a const being required to pass the elements directly to the rodata structs. static const struct Font sFonts[] = { // Japanese fonts @@ -405,15 +407,15 @@ static const struct Font sFonts[] = { 4, (u8 *)gFont3JapaneseGlyphs, 64, 512 }, { 1, (u8 *)gFont4JapaneseGlyphs, 32, 0 }, { 2, (u8 *)gFont4JapaneseGlyphs, 32, 0 }, - { 3, (u8 *)sBrailleGlyphs, 8, 0 }, + { 3, (u8 *)sBrailleGlyphs, 8, 0 }, // Latin - { 0, (u8 *)sFont0LatinGlyphs, 16, 8 }, - { 1, (u8 *)sFont1LatinGlyphs, 8, 0 }, - { 2, (u8 *)sFont1LatinGlyphs, 8, 0 }, - { 0, (u8 *)gFont3LatinGlyphs, 64, 32 }, - { 1, (u8 *)gFont4LatinGlyphs, 32, 0 }, - { 2, (u8 *)gFont4LatinGlyphs, 32, 0 }, - { 3, (u8 *)sBrailleGlyphs, 8, 0 }, + { 0, (u8 *)sFont0LatinGlyphs, 16, 8 }, + { 1, (u8 *)sFont1LatinGlyphs, 8, 0 }, + { 2, (u8 *)sFont1LatinGlyphs, 8, 0 }, + { 0, (u8 *)gFont3LatinGlyphs, 64, 32 }, + { 1, (u8 *)gFont4LatinGlyphs, 32, 0 }, + { 2, (u8 *)gFont4LatinGlyphs, 32, 0 }, + { 3, (u8 *)sBrailleGlyphs, 8, 0 }, }; static const u8 sTextSpeedDelays[] = { 6, 3, 1 }; // slow, mid, fast @@ -492,8 +494,8 @@ const struct WindowConfig gWindowConfig_81E6C3C = 0, // tilemap top coordinate 30, // width 20, // height - (u8 *)BG_CHAR_ADDR(2), // tile data - (u16 *)BG_SCREEN_ADDR(31), // tilemap + BG_CHAR_ADDR(2), // tile data + BG_SCREEN_ADDR(31), // tilemap }; const struct WindowConfig gWindowConfig_81E6C58 = @@ -513,8 +515,8 @@ const struct WindowConfig gWindowConfig_81E6C58 = 0, // tilemap top coordinate 26, // width 20, // height - (u8 *)BG_CHAR_ADDR(0), // tile data - (u16 *)BG_SCREEN_ADDR(24), // tilemap + BG_CHAR_ADDR(0), // tile data + BG_SCREEN_ADDR(24), // tilemap }; const struct WindowConfig gWindowConfig_81E6C74 = @@ -555,8 +557,8 @@ const struct WindowConfig gWindowConfig_81E6C90 = 0, // tilemap top coordinate 30, // width 20, // height - (u8 *)BG_CHAR_ADDR(1), // tile data - (u16 *)BG_SCREEN_ADDR(30), // tilemap + BG_CHAR_ADDR(1), // tile data + BG_SCREEN_ADDR(30), // tilemap }; const struct WindowConfig gWindowConfig_81E6CAC = @@ -597,8 +599,8 @@ const struct WindowConfig gWindowConfig_81E6CC8 = 0, // tilemap top coordinate 30, // width 20, // height - (u8 *)BG_CHAR_ADDR(2), // tile data - (u16 *)BG_SCREEN_ADDR(15), // tilemap + BG_CHAR_ADDR(2), // tile data + BG_SCREEN_ADDR(15), // tilemap }; const struct WindowConfig gWindowConfig_81E6CE4 = @@ -618,8 +620,8 @@ const struct WindowConfig gWindowConfig_81E6CE4 = 0, // tilemap top coordinate 30, // width 20, // height - (u8 *)BG_CHAR_ADDR(2), // tile data - (u16 *)BG_SCREEN_ADDR(31), // tilemap + BG_CHAR_ADDR(2), // tile data + BG_SCREEN_ADDR(31), // tilemap }; const struct WindowConfig gWindowConfig_81E6D00 = @@ -639,8 +641,8 @@ const struct WindowConfig gWindowConfig_81E6D00 = 0, // tilemap top coordinate 30, // width 20, // height - (u8 *)BG_CHAR_ADDR(0), // tile data - (u16 *)BG_SCREEN_ADDR(31), // tilemap + BG_CHAR_ADDR(0), // tile data + BG_SCREEN_ADDR(31), // tilemap }; const struct WindowConfig gWindowConfig_81E6D1C = @@ -660,8 +662,8 @@ const struct WindowConfig gWindowConfig_81E6D1C = 0, // tilemap top coordinate 30, // width 20, // height - (u8 *)BG_CHAR_ADDR(0), // tile data - (u16 *)BG_SCREEN_ADDR(31), // tilemap + BG_CHAR_ADDR(0), // tile data + BG_SCREEN_ADDR(31), // tilemap }; const struct WindowConfig gWindowConfig_81E6D38 = @@ -702,8 +704,8 @@ const struct WindowConfig gWindowConfig_81E6D54 = 0, // tilemap top coordinate 30, // width 20, // height - (u8 *)BG_CHAR_ADDR(3), // tile data - (u16 *)BG_SCREEN_ADDR(15), // tilemap + BG_CHAR_ADDR(3), // tile data + BG_SCREEN_ADDR(15), // tilemap }; const struct WindowConfig gWindowConfig_81E6D70 = @@ -723,8 +725,8 @@ const struct WindowConfig gWindowConfig_81E6D70 = 0, // tilemap top coordinate 30, // width 20, // height - (u8 *)BG_CHAR_ADDR(3), // tile data - (u16 *)BG_SCREEN_ADDR(15), // tilemap + BG_CHAR_ADDR(3), // tile data + BG_SCREEN_ADDR(15), // tilemap }; const struct WindowConfig gWindowConfig_81E6D8C = @@ -744,8 +746,8 @@ const struct WindowConfig gWindowConfig_81E6D8C = 0, // tilemap top coordinate 30, // width 20, // height - (u8 *)BG_CHAR_ADDR(0), // tile data - (u16 *)BG_SCREEN_ADDR(14), // tilemap + BG_CHAR_ADDR(0), // tile data + BG_SCREEN_ADDR(14), // tilemap }; const struct WindowConfig gWindowConfig_81E6DA8 = @@ -765,8 +767,8 @@ const struct WindowConfig gWindowConfig_81E6DA8 = 0, // tilemap top coordinate 30, // width 20, // height - (u8 *)BG_CHAR_ADDR(0), // tile data - (u16 *)BG_SCREEN_ADDR(11), // tilemap + BG_CHAR_ADDR(0), // tile data + BG_SCREEN_ADDR(11), // tilemap }; const struct WindowConfig WindowConfig_TrainerCard_Back_Values = @@ -786,8 +788,8 @@ const struct WindowConfig WindowConfig_TrainerCard_Back_Values = 0, // tilemap top coordinate 30, // width 20, // height - (u8 *)BG_CHAR_ADDR(2), // tile data - (u16 *)BG_SCREEN_ADDR(30), // tilemap + BG_CHAR_ADDR(2), // tile data + BG_SCREEN_ADDR(30), // tilemap }; const struct WindowConfig WindowConfig_TrainerCard_Back_Labels = @@ -807,8 +809,8 @@ const struct WindowConfig WindowConfig_TrainerCard_Back_Labels = 0, // tilemap top coordinate 30, // width 20, // height - (u8 *)BG_CHAR_ADDR(2), // tile data - (u16 *)BG_SCREEN_ADDR(30), // tilemap + BG_CHAR_ADDR(2), // tile data + BG_SCREEN_ADDR(30), // tilemap }; const struct WindowConfig gWindowConfig_81E6DFC = @@ -828,8 +830,8 @@ const struct WindowConfig gWindowConfig_81E6DFC = 0, // tilemap top coordinate 30, // width 20, // height - (u8 *)BG_CHAR_ADDR(2), // tile data - (u16 *)BG_SCREEN_ADDR(31), // tilemap + BG_CHAR_ADDR(2), // tile data + BG_SCREEN_ADDR(31), // tilemap }; const struct WindowConfig gWindowConfig_81E6E18 = @@ -849,8 +851,8 @@ const struct WindowConfig gWindowConfig_81E6E18 = 0, // tilemap top coordinate 30, // width 20, // height - (u8 *)BG_CHAR_ADDR(2), // tile data - (u16 *)BG_SCREEN_ADDR(31), // tilemap + BG_CHAR_ADDR(2), // tile data + BG_SCREEN_ADDR(31), // tilemap }; const struct WindowConfig gWindowConfig_81E6E34 = @@ -870,8 +872,8 @@ const struct WindowConfig gWindowConfig_81E6E34 = 0, // tilemap top coordinate 30, // width 20, // height - (u8 *)BG_CHAR_ADDR(0), // tile data - (u16 *)BG_SCREEN_ADDR(31), // tilemap + BG_CHAR_ADDR(0), // tile data + BG_SCREEN_ADDR(31), // tilemap }; const struct WindowConfig gWindowConfig_81E6E50 = @@ -891,8 +893,8 @@ const struct WindowConfig gWindowConfig_81E6E50 = 0, // tilemap top coordinate 30, // width 20, // height - (u8 *)BG_CHAR_ADDR(2), // tile data - (u16 *)BG_SCREEN_ADDR(28), // tilemap + BG_CHAR_ADDR(2), // tile data + BG_SCREEN_ADDR(28), // tilemap }; const struct WindowConfig gWindowConfig_81E6E6C = @@ -912,8 +914,8 @@ const struct WindowConfig gWindowConfig_81E6E6C = 0, // tilemap top coordinate 30, // width 20, // height - (u8 *)BG_CHAR_ADDR(2), // tile data - (u16 *)BG_SCREEN_ADDR(30), // tilemap + BG_CHAR_ADDR(2), // tile data + BG_SCREEN_ADDR(30), // tilemap }; const struct WindowConfig gWindowConfig_81E6E88 = @@ -933,8 +935,8 @@ const struct WindowConfig gWindowConfig_81E6E88 = 0, // tilemap top coordinate 30, // width 20, // height - (u8 *)BG_CHAR_ADDR(0), // tile data - (u16 *)BG_SCREEN_ADDR(31), // tilemap + BG_CHAR_ADDR(0), // tile data + BG_SCREEN_ADDR(31), // tilemap }; const struct WindowConfig gWindowConfig_81E6EA4 = @@ -954,8 +956,8 @@ const struct WindowConfig gWindowConfig_81E6EA4 = 0, // tilemap top coordinate 30, // width 20, // height - (u8 *)BG_CHAR_ADDR(0), // tile data - (u16 *)BG_SCREEN_ADDR(28), // tilemap + BG_CHAR_ADDR(0), // tile data + BG_SCREEN_ADDR(28), // tilemap }; const struct WindowConfig gWindowConfig_81E6EC0 = @@ -975,8 +977,8 @@ const struct WindowConfig gWindowConfig_81E6EC0 = 0, // tilemap top coordinate 30, // width 20, // height - (u8 *)BG_CHAR_ADDR(2), // tile data - (u16 *)BG_SCREEN_ADDR(29), // tilemap + BG_CHAR_ADDR(2), // tile data + BG_SCREEN_ADDR(29), // tilemap }; const struct WindowConfig gWindowConfig_81E6EDC = @@ -996,8 +998,8 @@ const struct WindowConfig gWindowConfig_81E6EDC = 0, // tilemap top coordinate 30, // width 20, // height - (u8 *)BG_CHAR_ADDR(0), // tile data - (u16 *)BG_SCREEN_ADDR(28), // tilemap + BG_CHAR_ADDR(0), // tile data + BG_SCREEN_ADDR(28), // tilemap }; const struct WindowConfig gWindowConfig_81E6EF8 = @@ -1017,8 +1019,8 @@ const struct WindowConfig gWindowConfig_81E6EF8 = 0, // tilemap top coordinate 30, // width 20, // height - (u8 *)BG_CHAR_ADDR(2), // tile data - (u16 *)BG_SCREEN_ADDR(29), // tilemap + BG_CHAR_ADDR(2), // tile data + BG_SCREEN_ADDR(29), // tilemap }; const struct WindowConfig gWindowConfig_81E6F14 = @@ -1038,8 +1040,8 @@ const struct WindowConfig gWindowConfig_81E6F14 = 0, // tilemap top coordinate 30, // width 20, // height - (u8 *)BG_CHAR_ADDR(0), // tile data - (u16 *)BG_SCREEN_ADDR(28), // tilemap + BG_CHAR_ADDR(0), // tile data + BG_SCREEN_ADDR(28), // tilemap }; const struct WindowConfig gWindowConfig_81E6F30 = @@ -1059,8 +1061,8 @@ const struct WindowConfig gWindowConfig_81E6F30 = 0, // tilemap top coordinate 30, // width 20, // height - (u8 *)BG_CHAR_ADDR(2), // tile data - (u16 *)BG_SCREEN_ADDR(29), // tilemap + BG_CHAR_ADDR(2), // tile data + BG_SCREEN_ADDR(29), // tilemap }; const struct WindowConfig gWindowConfig_81E6F4C = @@ -1080,8 +1082,8 @@ const struct WindowConfig gWindowConfig_81E6F4C = 0, // tilemap top coordinate 30, // width 20, // height - (u8 *)BG_CHAR_ADDR(0), // tile data - (u16 *)BG_SCREEN_ADDR(30), // tilemap + BG_CHAR_ADDR(0), // tile data + BG_SCREEN_ADDR(30), // tilemap }; const struct WindowConfig gWindowConfig_81E6F68 = @@ -1101,8 +1103,8 @@ const struct WindowConfig gWindowConfig_81E6F68 = 0, // tilemap top coordinate 30, // width 20, // height - (u8 *)BG_CHAR_ADDR(2), // tile data - (u16 *)BG_SCREEN_ADDR(13), // tilemap + BG_CHAR_ADDR(2), // tile data + BG_SCREEN_ADDR(13), // tilemap }; const struct WindowConfig gWindowConfig_81E6F84 = @@ -1122,8 +1124,8 @@ const struct WindowConfig gWindowConfig_81E6F84 = 0, // tilemap top coordinate 30, // width 20, // height - (u8 *)BG_CHAR_ADDR(2), // tile data - (u16 *)BG_SCREEN_ADDR(31), // tilemap + BG_CHAR_ADDR(2), // tile data + BG_SCREEN_ADDR(31), // tilemap }; const struct WindowConfig gWindowConfig_81E6FA0 = @@ -1143,8 +1145,8 @@ const struct WindowConfig gWindowConfig_81E6FA0 = 0, // tilemap top coordinate 30, // width 20, // height - (u8 *)BG_CHAR_ADDR(0), // tile data - (u16 *)BG_SCREEN_ADDR(24), // tilemap + BG_CHAR_ADDR(0), // tile data + BG_SCREEN_ADDR(24), // tilemap }; const struct WindowConfig gWindowConfig_81E6FBC = @@ -1164,8 +1166,8 @@ const struct WindowConfig gWindowConfig_81E6FBC = 0, // tilemap top coordinate 30, // width 20, // height - (u8 *)BG_CHAR_ADDR(0), // tile data - (u16 *)BG_SCREEN_ADDR(30), // tilemap + BG_CHAR_ADDR(0), // tile data + BG_SCREEN_ADDR(30), // tilemap }; const struct WindowConfig gWindowConfig_81E6FD8 = @@ -1185,8 +1187,8 @@ const struct WindowConfig gWindowConfig_81E6FD8 = 0, // tilemap top coordinate 30, // width 20, // height - (u8 *)BG_CHAR_ADDR(0), // tile data - (u16 *)BG_SCREEN_ADDR(24), // tilemap + BG_CHAR_ADDR(0), // tile data + BG_SCREEN_ADDR(24), // tilemap }; const struct WindowConfig gWindowConfig_81E6FF4 = @@ -1206,8 +1208,8 @@ const struct WindowConfig gWindowConfig_81E6FF4 = 0, // tilemap top coordinate 30, // width 20, // height - (u8 *)BG_CHAR_ADDR(0), // tile data - (u16 *)BG_SCREEN_ADDR(24), // tilemap + BG_CHAR_ADDR(0), // tile data + BG_SCREEN_ADDR(24), // tilemap }; const struct WindowConfig gWindowConfig_81E7010 = @@ -1227,8 +1229,8 @@ const struct WindowConfig gWindowConfig_81E7010 = 0, // tilemap top coordinate 30, // width 20, // height - (u8 *)BG_CHAR_ADDR(0), // tile data - (u16 *)BG_SCREEN_ADDR(30), // tilemap + BG_CHAR_ADDR(0), // tile data + BG_SCREEN_ADDR(30), // tilemap }; const struct WindowConfig gWindowConfig_81E702C = @@ -1248,8 +1250,8 @@ const struct WindowConfig gWindowConfig_81E702C = 0, // tilemap top coordinate 30, // width 20, // height - (u8 *)BG_CHAR_ADDR(2), // tile data - (u16 *)BG_SCREEN_ADDR(15), // tilemap + BG_CHAR_ADDR(2), // tile data + BG_SCREEN_ADDR(15), // tilemap }; const struct WindowConfig gWindowConfig_81E7048 = @@ -1269,8 +1271,8 @@ const struct WindowConfig gWindowConfig_81E7048 = 0, // tilemap top coordinate 16, // width 32, // height - (u8 *)BG_CHAR_ADDR(2), // tile data - (u16 *)BG_SCREEN_ADDR(14), // tilemap + BG_CHAR_ADDR(2), // tile data + BG_SCREEN_ADDR(14), // tilemap }; const struct WindowConfig gWindowConfig_81E7064 = @@ -1290,8 +1292,8 @@ const struct WindowConfig gWindowConfig_81E7064 = 0, // tilemap top coordinate 30, // width 20, // height - (u8 *)BG_CHAR_ADDR(2), // tile data - (u16 *)BG_SCREEN_ADDR(14), // tilemap + BG_CHAR_ADDR(2), // tile data + BG_SCREEN_ADDR(14), // tilemap }; const struct WindowConfig gWindowConfig_81E7080 = @@ -1311,8 +1313,8 @@ const struct WindowConfig gWindowConfig_81E7080 = 0, // tilemap top coordinate 30, // width 20, // height - (u8 *)BG_CHAR_ADDR(0), // tile data - (u16 *)BG_SCREEN_ADDR(30), // tilemap + BG_CHAR_ADDR(0), // tile data + BG_SCREEN_ADDR(30), // tilemap }; const struct WindowConfig gWindowConfig_81E709C = @@ -1332,8 +1334,8 @@ const struct WindowConfig gWindowConfig_81E709C = 0, // tilemap top coordinate 30, // width 20, // height - (u8 *)BG_CHAR_ADDR(0), // tile data - (u16 *)BG_SCREEN_ADDR(31), // tilemap + BG_CHAR_ADDR(0), // tile data + BG_SCREEN_ADDR(31), // tilemap }; const struct WindowConfig gWindowConfig_81E70B8 = @@ -1353,8 +1355,8 @@ const struct WindowConfig gWindowConfig_81E70B8 = 0, // tilemap top coordinate 30, // width 20, // height - (u8 *)BG_CHAR_ADDR(0), // tile data - (u16 *)BG_SCREEN_ADDR(30), // tilemap + BG_CHAR_ADDR(0), // tile data + BG_SCREEN_ADDR(30), // tilemap }; const struct WindowConfig gWindowConfig_81E70D4 = @@ -1374,8 +1376,8 @@ const struct WindowConfig gWindowConfig_81E70D4 = 0, // tilemap top coordinate 30, // width 20, // height - (u8 *)BG_CHAR_ADDR(0), // tile data - (u16 *)BG_SCREEN_ADDR(30), // tilemap + BG_CHAR_ADDR(0), // tile data + BG_SCREEN_ADDR(30), // tilemap }; const struct WindowConfig gWindowConfig_81E70F0 = @@ -1416,8 +1418,8 @@ const struct WindowConfig gWindowConfig_81E710C = 0, // tilemap top coordinate 30, // width 20, // height - (u8 *)BG_CHAR_ADDR(0), // tile data - (u16 *)BG_SCREEN_ADDR(31), // tilemap + BG_CHAR_ADDR(0), // tile data + BG_SCREEN_ADDR(31), // tilemap }; const struct WindowConfig gWindowConfig_81E7128 = @@ -1437,8 +1439,8 @@ const struct WindowConfig gWindowConfig_81E7128 = 0, // tilemap top coordinate 30, // width 20, // height - (u8 *)BG_CHAR_ADDR(2), // tile data - (u16 *)BG_SCREEN_ADDR(31), // tilemap + BG_CHAR_ADDR(2), // tile data + BG_SCREEN_ADDR(31), // tilemap }; const struct WindowConfig gWindowConfig_81E7144 = @@ -1458,8 +1460,8 @@ const struct WindowConfig gWindowConfig_81E7144 = 0, // tilemap top coordinate 30, // width 20, // height - (u8 *)BG_CHAR_ADDR(2), // tile data - (u16 *)BG_SCREEN_ADDR(31), // tilemap + BG_CHAR_ADDR(2), // tile data + BG_SCREEN_ADDR(31), // tilemap }; const struct WindowConfig gWindowConfig_81E7160 = @@ -1479,8 +1481,8 @@ const struct WindowConfig gWindowConfig_81E7160 = 0, // tilemap top coordinate 30, // width 20, // height - (u8 *)BG_CHAR_ADDR(1), // tile data - (u16 *)BG_SCREEN_ADDR(10), // tilemap + BG_CHAR_ADDR(1), // tile data + BG_SCREEN_ADDR(10), // tilemap }; const struct WindowConfig gWindowConfig_81E717C = @@ -1500,8 +1502,8 @@ const struct WindowConfig gWindowConfig_81E717C = 0, // tilemap top coordinate 30, // width 20, // height - (u8 *)BG_CHAR_ADDR(3), // tile data - (u16 *)BG_SCREEN_ADDR(31), // tilemap + BG_CHAR_ADDR(3), // tile data + BG_SCREEN_ADDR(31), // tilemap }; const struct WindowConfig gWindowConfig_81E7198 = @@ -1521,8 +1523,8 @@ const struct WindowConfig gWindowConfig_81E7198 = 0, // tilemap top coordinate 30, // width 20, // height - (u8 *)BG_CHAR_ADDR(2), // tile data - (u16 *)BG_SCREEN_ADDR(15), // tilemap + BG_CHAR_ADDR(2), // tile data + BG_SCREEN_ADDR(15), // tilemap }; const struct WindowConfig gWindowConfig_81E71B4 = @@ -1542,8 +1544,8 @@ const struct WindowConfig gWindowConfig_81E71B4 = 0, // tilemap top coordinate 30, // width 20, // height - (u8 *)BG_CHAR_ADDR(2), // tile data - (u16 *)BG_SCREEN_ADDR(15), // tilemap + BG_CHAR_ADDR(2), // tile data + BG_SCREEN_ADDR(15), // tilemap }; const struct WindowConfig gWindowConfig_81E71D0 = @@ -1563,8 +1565,8 @@ const struct WindowConfig gWindowConfig_81E71D0 = 0, // tilemap top coordinate 30, // width 20, // height - (u8 *)BG_CHAR_ADDR(1), // tile data - (u16 *)BG_SCREEN_ADDR(28), // tilemap + BG_CHAR_ADDR(1), // tile data + BG_SCREEN_ADDR(28), // tilemap }; const struct WindowConfig gWindowConfig_81E71EC = @@ -1584,8 +1586,8 @@ const struct WindowConfig gWindowConfig_81E71EC = 0, // tilemap top coordinate 30, // width 20, // height - (u8 *)BG_CHAR_ADDR(1), // tile data - (u16 *)BG_SCREEN_ADDR(30), // tilemap + BG_CHAR_ADDR(1), // tile data + BG_SCREEN_ADDR(30), // tilemap }; const struct WindowConfig gWindowConfig_81E7208 = @@ -1605,8 +1607,8 @@ const struct WindowConfig gWindowConfig_81E7208 = 0, // tilemap top coordinate 30, // width 20, // height - (u8 *)BG_CHAR_ADDR(2), // tile data - (u16 *)BG_SCREEN_ADDR(28), // tilemap + BG_CHAR_ADDR(2), // tile data + BG_SCREEN_ADDR(28), // tilemap }; const struct WindowConfig gWindowConfig_81E7224 = @@ -1626,8 +1628,8 @@ const struct WindowConfig gWindowConfig_81E7224 = 0, // tilemap top coordinate 30, // width 20, // height - (u8 *)BG_CHAR_ADDR(0), // tile data - (u16 *)BG_SCREEN_ADDR(31), // tilemap + BG_CHAR_ADDR(0), // tile data + BG_SCREEN_ADDR(31), // tilemap }; const struct WindowConfig gWindowConfig_81E7240 = @@ -1647,8 +1649,8 @@ const struct WindowConfig gWindowConfig_81E7240 = 0, // tilemap top coordinate 30, // width 20, // height - (u8 *)BG_CHAR_ADDR(2), // tile data - (u16 *)BG_SCREEN_ADDR(30), // tilemap + BG_CHAR_ADDR(2), // tile data + BG_SCREEN_ADDR(30), // tilemap }; const struct WindowConfig gWindowConfig_81E725C = diff --git a/src/engine/trade.c b/src/engine/trade.c index fdc764e87..8bc293b95 100644 --- a/src/engine/trade.c +++ b/src/engine/trade.c @@ -1088,7 +1088,7 @@ static void sub_8047EC0(void) ResetSpriteData(); FreeAllSpritePalettes(); ResetTasks(); - sub_804A964(&gUnknown_03004824->unk_00c8, (void *)BG_SCREEN_ADDR(5)); + sub_804A964(&gUnknown_03004824->unk_00c8, BG_SCREEN_ADDR(5)); SetVBlankCallback(sub_80489F4); InitMenuWindow(&gWindowConfig_81E6CE4); SetUpWindowConfig(&gWindowConfig_81E6F84); @@ -1268,7 +1268,7 @@ static void sub_80484F4(void) ResetSpriteData(); FreeAllSpritePalettes(); ResetTasks(); - sub_804A964(&gUnknown_03004824->unk_00c8, (void *)BG_SCREEN_ADDR(5)); + sub_804A964(&gUnknown_03004824->unk_00c8, BG_SCREEN_ADDR(5)); SetVBlankCallback(sub_80489F4); InitMenuWindow(&gWindowConfig_81E6CE4); SetUpWindowConfig(&gWindowConfig_81E6F84); @@ -1484,12 +1484,12 @@ static void sub_8048B0C(u8 a0) } for (i = 0; i < 0x400; i ++) gUnknown_03004824->unk_00c8.unk_12[i] = gUnknown_08EA15C8[i]; - dest = (u16 *)BG_SCREEN_ADDR(6); + dest = BG_SCREEN_ADDR(6); DmaCopy16(3, gTradeStripesBG2Tilemap, dest, 0x800); break; case 1: src = gTradeStripesBG3Tilemap; - dest = (u16 *)BG_SCREEN_ADDR(7); + dest = BG_SCREEN_ADDR(7); DmaCopy16(3, src, dest, 0x800); sub_804A6DC(0); sub_804A6DC(1); @@ -1853,7 +1853,7 @@ static void sub_8049088(void) { u8 string[28]; StringCopy(string, gTradeText_TradeOkayPrompt); - sub_804ACD8(string, (u8 *)BG_CHAR_ADDR(4) + gUnknown_03004824->unk_007e * 32, 20); + sub_804ACD8(string, BG_CHAR_ADDR(4) + gUnknown_03004824->unk_007e * 32, 20); } static void sub_80490BC(u8 mpId, u8 a1) @@ -2111,7 +2111,7 @@ static void sub_8049680(void) DrawTextWindow(&gUnknown_03004824->window, 24, 14, 29, 19); InitYesNoMenu(24, 14, 4); gUnknown_03004824->unk_007b = 4; - sub_804ACD8(gUnknown_0820C14C[4], (u8 *)(BG_CHAR_ADDR(4) + 32 * gUnknown_03004824->unk_007e), 20); + sub_804ACD8(gUnknown_0820C14C[4], BG_CHAR_ADDR(4) + 32 * gUnknown_03004824->unk_007e, 20); } } if (gMain.newKeys & R_BUTTON) @@ -2130,7 +2130,7 @@ static void sub_8049804(void) sub_804A80C(); gUnknown_03004824->unk_007b = 0; gSprites[gUnknown_03004824->tradeMenuCursorSpriteIdx].invisible = FALSE; - sub_804ACD8(gUnknown_0820C14C[1], (u8 *)(BG_CHAR_ADDR(4) + 32 * gUnknown_03004824->unk_007e), 20); + sub_804ACD8(gUnknown_0820C14C[1], BG_CHAR_ADDR(4) + 32 * gUnknown_03004824->unk_007e, 20); } static void sub_8049860(void) @@ -2498,7 +2498,7 @@ static void sub_8049ED4(u8 a0) gUnknown_03004824->unk_0080[a0] ++; break; case 4: - sub_804ACD8(gUnknown_0820C14C[5], (u8 *)(BG_CHAR_ADDR(4) + 32 * gUnknown_03004824->unk_007e), 20); + sub_804ACD8(gUnknown_0820C14C[5], BG_CHAR_ADDR(4) + 32 * gUnknown_03004824->unk_007e, 20); sub_804A51C(a0, whichPokemon, gUnknown_0820C3D1[a0][0] + 4, gUnknown_0820C3D1[a0][1] + 1, gUnknown_0820C3D1[a0][0], gUnknown_0820C3D1[a0][1]); gUnknown_03004824->unk_0080[a0] ++; break; @@ -3362,7 +3362,7 @@ static void sub_804A840(u8 whichParty) sub_804A740(1); sub_804A938(&gUnknown_03004824->unk_00c8); } - sub_804ACD8(gUnknown_0820C14C[1], (u8 *)(BG_CHAR_ADDR(4) + 32 * gUnknown_03004824->unk_007e), 20); + sub_804ACD8(gUnknown_0820C14C[1], BG_CHAR_ADDR(4) + 32 * gUnknown_03004824->unk_007e, 20); gUnknown_03004824->unk_0080[whichParty] = 0; } @@ -4037,7 +4037,7 @@ static void sub_804B41C(void) gMain.state ++; LZDecompressVram(gUnknown_08D00000, (void *)VRAM); CpuCopy16(gUnknown_08D00524, ewram, 0x1000); - DmaCopy16Defvars(3, ewram, (void *)BG_SCREEN_ADDR(5), 0x500); + DmaCopy16Defvars(3, ewram, BG_SCREEN_ADDR(5), 0x500); LoadCompressedPalette(gUnknown_08D004E0, 0, 32); gUnknown_03004828->unk_00b6 = 0; gUnknown_03004828->unk_00c4 = 0; @@ -4678,8 +4678,8 @@ static void sub_804BBE8(u8 a0) { case 0: LoadPalette(gUnknown_0820C9F8, 0x10, 0xa0); - DmaCopyLarge16(3, gUnknown_0820CA98, (void *)BG_CHAR_ADDR(1), 0x1300, 0x1000); - DmaCopy16Defvars(3, gUnknown_0820F798, (void *)BG_SCREEN_ADDR(18), 0x1000); + DmaCopyLarge16(3, gUnknown_0820CA98, BG_CHAR_ADDR(1), 0x1300, 0x1000); + DmaCopy16Defvars(3, gUnknown_0820F798, BG_SCREEN_ADDR(18), 0x1000); gUnknown_03004828->bg2vofs = 0; gUnknown_03004828->bg2hofs = 0xb4; REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG1_ON | DISPCNT_BG2_ON | DISPCNT_OBJ_ON; @@ -4691,15 +4691,15 @@ static void sub_804BBE8(u8 a0) REG_BG1VOFS = 0x15c; REG_BG1CNT = BGCNT_PRIORITY(2) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(5) | BGCNT_TXT256x512; - DmaCopy16Defvars(3, gUnknown_08210798, (void *)BG_SCREEN_ADDR(5), 0x1000); - DmaCopyLarge16(3, gUnknown_0820CA98, (void *)BG_CHAR_ADDR(0), 0x1300, 0x1000); + DmaCopy16Defvars(3, gUnknown_08210798, BG_SCREEN_ADDR(5), 0x1000); + DmaCopyLarge16(3, gUnknown_0820CA98, BG_CHAR_ADDR(0), 0x1300, 0x1000); REG_DISPCNT = DISPCNT_MODE_1 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG1_ON | DISPCNT_OBJ_ON; break; case 2: gUnknown_03004828->bg1vofs = 0; gUnknown_03004828->bg1hofs = 0; REG_DISPCNT = DISPCNT_MODE_1 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG1_ON | DISPCNT_OBJ_ON; - DmaCopy16Defvars(3, gUnknown_08211798, (void *)BG_SCREEN_ADDR(5), 0x800); + DmaCopy16Defvars(3, gUnknown_08211798, BG_SCREEN_ADDR(5), 0x800); break; case 3: REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG1_ON | DISPCNT_OBJ_ON; @@ -4708,8 +4708,8 @@ static void sub_804BBE8(u8 a0) gUnknown_03004828->unk_010c = 0x78; gUnknown_03004828->unk_010e = -0x46; gUnknown_03004828->unk_011c = 0; - DmaCopyLarge16(3, gUnknown_0820DD98, (void *)BG_CHAR_ADDR(1), 0x1a00, 0x1000); - DmaCopy16Defvars(3, gUnknown_08211F98, (void *)BG_SCREEN_ADDR(18), 0x100); + DmaCopyLarge16(3, gUnknown_0820DD98, BG_CHAR_ADDR(1), 0x1a00, 0x1000); + DmaCopy16Defvars(3, gUnknown_08211F98, BG_SCREEN_ADDR(18), 0x100); break; case 4: REG_DISPCNT = DISPCNT_MODE_1 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG2_ON | DISPCNT_OBJ_ON; @@ -4719,20 +4719,20 @@ static void sub_804BBE8(u8 a0) gUnknown_03004828->unk_0118 = 0x20; gUnknown_03004828->unk_011a = 0x400; gUnknown_03004828->unk_011c = 0; - DmaCopyLarge16(3, gUnknown_08213738, (void *)BG_CHAR_ADDR(1), 0x2040, 0x1000); - DmaCopy16Defvars(3, gUnknown_08215778, (void *)BG_SCREEN_ADDR(18), 0x100); + DmaCopyLarge16(3, gUnknown_08213738, BG_CHAR_ADDR(1), 0x2040, 0x1000); + DmaCopy16Defvars(3, gUnknown_08215778, BG_SCREEN_ADDR(18), 0x100); break; case 5: gUnknown_03004828->bg1vofs = 0; gUnknown_03004828->bg1hofs = 0; REG_BG1CNT = BGCNT_PRIORITY(2) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(5); - LZDecompressVram(gUnknown_08D00000, (void *)BG_CHAR_ADDR(0)); + LZDecompressVram(gUnknown_08D00000, BG_CHAR_ADDR(0)); CpuCopy16(gUnknown_08D00524, buffer = (u16 *)ewram, 0x1000); LoadCompressedPalette(gUnknown_08D004E0, 0x70, 0x20); FillPalette(0, 0, 2); for (i = 0; i < 0x280; i ++) buffer[i] |= 0x7000; - DmaCopy16Defvars(3, ewram, (void *)BG_SCREEN_ADDR(5), 0x500); + DmaCopy16Defvars(3, ewram, BG_SCREEN_ADDR(5), 0x500); MenuZeroFillWindowRect(2, 15, 27, 18); break; case 6: @@ -4745,16 +4745,16 @@ static void sub_804BBE8(u8 a0) gUnknown_03004828->unk_010c = 0x78; gUnknown_03004828->unk_010e = 0x50; gUnknown_03004828->unk_011c = 0; - DmaCopyLarge16(3, gUnknown_08213738, (void *)BG_CHAR_ADDR(1), 0x2040, 0x1000); - DmaCopy16Defvars(3, gUnknown_08215778, (void *)BG_SCREEN_ADDR(18), 0x100); + DmaCopyLarge16(3, gUnknown_08213738, BG_CHAR_ADDR(1), 0x2040, 0x1000); + DmaCopy16Defvars(3, gUnknown_08215778, BG_SCREEN_ADDR(18), 0x100); break; case 7: gUnknown_03004828->bg2vofs = 0; gUnknown_03004828->bg2hofs = 0; REG_BG2CNT = BGCNT_PRIORITY(2) | BGCNT_CHARBASE(1) | BGCNT_SCREENBASE(18) | BGCNT_TXT512x256; LoadPalette(gUnknown_0820C9F8, 0x10, 0xa0); - DmaCopyLarge16(3, gUnknown_0820CA98, (void *)BG_CHAR_ADDR(1), 0x1300, 0x1000); - DmaCopy16Defvars(3, gUnknown_0820F798, (void *)BG_SCREEN_ADDR(18), 0x1000); + DmaCopyLarge16(3, gUnknown_0820CA98, BG_CHAR_ADDR(1), 0x1300, 0x1000); + DmaCopy16Defvars(3, gUnknown_0820F798, BG_SCREEN_ADDR(18), 0x1000); break; } } @@ -5708,7 +5708,7 @@ void sub_804E22C(void) LZDecompressVram(gUnknown_08D00000, (u8 *)VRAM); CpuCopy16(gUnknown_08D00524, ewram, 0x1000); src = (const u16 *)ewram; - dest = (u16 *)(BG_SCREEN_ADDR(5)); + dest = BG_SCREEN_ADDR(5); DmaCopy16(3, src, dest, 0x500) LoadCompressedPalette(gUnknown_08D004E0, 0, 32); REG_BG1CNT = BGCNT_PRIORITY(2) | BGCNT_SCREENBASE(5); diff --git a/src/field/pokeblock.c b/src/field/pokeblock.c index 34f4ffa35..2ee1a23ae 100644 --- a/src/field/pokeblock.c +++ b/src/field/pokeblock.c @@ -374,7 +374,7 @@ static bool8 sub_810B998(void) switch (ewram[0x1ffff]) { case 0: - LZDecompressVram(gMenuPokeblock_Gfx, (u8 *)BG_CHAR_ADDR(2)); + LZDecompressVram(gMenuPokeblock_Gfx, BG_CHAR_ADDR(2)); ewram[0x1ffff]++; break; case 1: diff --git a/src/field/slot_machine.c b/src/field/slot_machine.c index e8e4f271b..153970337 100644 --- a/src/field/slot_machine.c +++ b/src/field/slot_machine.c @@ -94,7 +94,7 @@ void sub_8106448(void) { } void sub_81064B8(void) { - CpuCopy16(gUnknown_08E95AB8, (void *) BG_SCREEN_ADDR(29), 20 * 32 * 2); + CpuCopy16(gUnknown_08E95AB8, BG_SCREEN_ADDR(29), 20 * 32 * 2); LoadSlotMachineWheelOverlay(); } @@ -102,7 +102,7 @@ static void LoadSlotMachineWheelOverlay(void) { s16 x, y, dx; u16 *screen; - screen = (u16 *) BG_SCREEN_ADDR(30); + screen = BG_SCREEN_ADDR(30); for (x = 4; x < 18; x += 5) { @@ -125,7 +125,7 @@ static void LoadSlotMachineWheelOverlay(void) { } void sub_81065A8(s16 arg0, u16 arg1, u16 arg2, u16 arg3, u16 arg4) { - u16 *vram = (u16 *) BG_SCREEN_ADDR(29); + u16 *vram = BG_SCREEN_ADDR(29); vram[15 * 32 + arg0] = arg1; vram[15 * 32 + 1 + arg0] = arg2; @@ -137,9 +137,9 @@ void sub_81065DC(void) { s16 y, x; u16 *screen; - CpuCopy16(gUnknown_08E95FB8, (void *) BG_SCREEN_ADDR(29), 20 * 32 * 2); + CpuCopy16(gUnknown_08E95FB8, BG_SCREEN_ADDR(29), 20 * 32 * 2); - screen = (u16 *) BG_SCREEN_ADDR(30); + screen = BG_SCREEN_ADDR(30); for (y = 0; y < 20; y++) { for (x = 0; x < 30; x++) diff --git a/src/pokemon/pokedex_cry_screen.c b/src/pokemon/pokedex_cry_screen.c index 92fd832fc..ad7029f59 100644 --- a/src/pokemon/pokedex_cry_screen.c +++ b/src/pokemon/pokedex_cry_screen.c @@ -49,7 +49,7 @@ u8 ShowPokedexCryScreen(struct CryRelatedStruct *cry, u8 arg1) { u32 r12; int x, y; - vram = (void *) BG_SCREEN_ADDR(cry->unk2); + vram = BG_SCREEN_ADDR(cry->unk2); r12 = (u32) (cry->unk0 << 18) >> 23; diff --git a/src/rom3.c b/src/rom3.c index 3f4860ecc..a3afcd6b7 100644 --- a/src/rom3.c +++ b/src/rom3.c @@ -1097,7 +1097,7 @@ void EmitTrainerBallThrow(u8 a) PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4); } -void Emitcmd48(u8 a, u8 *b, u8 c) +void EmitDrawPartyStatusSummary(u8 a, struct HpAndStatus *hpAndStatus, u8 c) { int i; @@ -1106,7 +1106,7 @@ void Emitcmd48(u8 a, u8 *b, u8 c) gBattleBuffersTransferData[2] = (c & 0x80) >> 7; gBattleBuffersTransferData[3] = 48; for (i = 0; i < 48; i++) - gBattleBuffersTransferData[4 + i] = b[i]; + gBattleBuffersTransferData[4 + i] = *(i + (u8*)(hpAndStatus)); PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 52); } -- cgit v1.2.3 From 34fad4a4556cddf8a6416ab11cd18927ebdb3228 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Fri, 3 Nov 2017 19:21:20 -0700 Subject: Cleanup pokenav decomp --- src/pokenav_before.c | 450 ++++++++++++++++++++++++--------------------------- 1 file changed, 214 insertions(+), 236 deletions(-) (limited to 'src') diff --git a/src/pokenav_before.c b/src/pokenav_before.c index 1aef99bdc..783d42326 100644 --- a/src/pokenav_before.c +++ b/src/pokenav_before.c @@ -17,7 +17,7 @@ extern u8 ewram[]; struct UnknownPokenav0 { - /* 0x0000 */ u8 fill0000[0x0300]; + /* 0x0000 */ u8 var0[0x0300]; /* 0x0300 */ void (*var300)(void); /* 0x0304 */ u16 var304; /* 0x0306 */ u16 var306; @@ -60,7 +60,7 @@ struct UnknownPokenav0 { /* 0x87DA */ s16 var87DA; /* 0x87DC */ s16 var87DC; /* 0x87DE */ u8 fill87DE[0x4a]; - /* 0x8828 */ u8 var8828; + /* 0x8828 */ u8 playerPartyCount; /* 0x8829 */ u8 fill8829[0x07bf]; /* 0x8FE8 */ s8 var8fe8; /* 0x8FE9 */ u8 fill8FE9[0x16]; @@ -85,7 +85,139 @@ struct UnknownPokenav0_1 { #define ewram0_1 (*(struct UnknownPokenav0_1*)(ewram + 0)) +IWRAM_DATA void (*gUnknown_03000744)(void); + +extern const u8 gPokenavHoennMapMisc_Gfx[]; +extern const u8 gUnknown_08E99FB0[]; +extern const u16 gPokenavHoennMap1_Pal[]; + +static void sub_80EBCA8(); +static void sub_80EEE20(); +static bool8 sub_80EEE54(); +static void sub_80EEE08(); +static void sub_80EED2C(u8); +static void sub_80EC268(); +static void sub_80EED1C(); +static void sub_80EE9C0(u8, u8, u8); +static bool8 sub_80EEA0C(); +static bool8 sub_80EEC10(); +static void sub_80EED9C(); +static void sub_80EDB88(); +static void sub_80EC4A0(); +static void sub_80EC81C(); +static void sub_80EE96C(); +static void sub_80EE3D8(); +static bool8 sub_80EEF34(); +static void sub_80EED0C(); +static void sub_80EC67C(); +static void sub_80EC86C(); +static bool8 sub_80EEC90(); +static void sub_80ED620(); +static void sub_80EC960(); +static void sub_80ED01C(); +static void sub_80ECC08(); +static void sub_80ED31C(); +static void sub_80ED4D8(); +static void sub_80ED858(); +static void sub_80EDDBC(); +static void sub_80EDE70(); +static void sub_80EDEE4(); +static void sub_80EE06C(); +static void sub_80EE294(); +static void sub_80EE58C(); +static void sub_80EE658(); +static void sub_80EE8F4(); +static void sub_80EEDC4(); + +extern void sub_80EF58C(u32); +extern void sub_80F6FFC(); +extern void sub_80F3294(); +extern void sub_80F0B24(); +extern bool8 sub_80F0B44(); +extern void sub_80F0F64(); +extern bool8 sub_80F0FEC(); +extern void sub_80F6FB8(); +extern void sub_80F6DB8(); +extern void sub_80F0CD8(); +extern bool8 sub_80F6E9C(); +extern bool8 sub_80F0D5C(); +extern bool8 sub_80F6ED4(); +extern bool8 sub_80F0EF4(); +extern void sub_80F2FB0(); +extern void sub_80F0FA0(); +extern void sub_80F0C28(); +extern bool8 sub_80F0C48(); +extern bool8 sub_80F70FC(); +extern void sub_80F708C(u32); +extern void sub_80F4394(); +extern void sub_80F0EC0(); +extern void sub_80F700C(); +extern void sub_80F42C4(); +extern void sub_80F0FFC(); +extern void sub_80F6F10(); +extern void sub_80F3C2C(); +extern void sub_80F15A8(); +extern void sub_80F6A4C(); +extern bool8 sub_80F6AF0(); +extern void sub_80F3B00(); +extern bool8 sub_80F3B58(); +extern void sub_80F1494(); +extern u8 sub_80F68E8(); +extern void sub_80F3B94(); +extern bool8 sub_80F3BD4(); +extern void sub_80F66E0(); +extern bool8 sub_80F1080(); +extern void sub_80EEFBC(); +extern void sub_80F38B8(); +extern bool8 sub_80F38EC(); +extern void sub_80F638C(); +extern bool8 sub_80F63D0(); +extern void sub_80F4CF0(); +extern void sub_80EFF34(); +extern bool8 sub_80EFF68(); +extern void sub_80F35B4(); +extern void sub_80F6134(); +extern u8 sub_80F5DD4(); +extern void ShowMapNamePopUpWindow(); +extern bool8 sub_80F0718(); +extern bool8 sub_80F3264(); +extern void sub_80F4D44(); +extern bool8 sub_80F4D88(); +extern void sub_80F0264(); +extern bool8 sub_80F02A0(); +extern void sub_80F3008(); +extern void sub_80F3130(); +extern void sub_80F2D6C(u32); +extern bool8 sub_80F1E6C(); +extern void sub_80EF9F8(); +extern bool8 sub_80EFBDC(u32); +extern void sub_80EFBB0(); +extern void sub_80F2DF4(); +extern void sub_80F1E84(); +extern bool8 sub_80F1F10(); +extern void sub_80EEFBC(u32); +extern void sub_80F2620(); +extern void sub_80EF814(); +extern void sub_80EF840(); +extern bool8 sub_80EF874(); +extern void sub_80F2DD8(); +extern bool8 sub_80F6250(); +extern void sub_80F6208(); +extern void sub_80F208C(); +extern void sub_80F6C20(); +extern void sub_80F3FF0(); +extern bool8 sub_80F4024(); +extern void sub_80F2598(); +extern void sub_80EF248(); +extern bool8 sub_80EF284(); +extern void sub_80F1B8C(); +extern bool8 sub_80F1BC8(u32 unk); +extern void sub_80F1DF0(); +extern bool8 sub_80F1E50(); +extern void sub_80EF428(); +extern bool8 sub_80EEF78(); extern void sub_80F1A90(); +extern void sub_80F2D04(u32); extern bool8 sub_80F1AC4(); extern void sub_80F36F0(); extern bool8 sub_80F3724(); @@ -102,9 +234,11 @@ extern void sub_80FB260(); extern void sub_80EFE7C(); extern void sub_80F5BF0(); extern void sub_80F6F64(); -extern void _call_via_r0(void (*func)(void)); extern void sub_80F19FC(); +extern u16 gKeyRepeatStartDelay; + + void sub_80EBA5C() { switch (gMain.state) { default: @@ -146,20 +280,20 @@ void sub_80EBA5C() { sub_80F2688(); gMain.state++; - case 0xA: + case 10: if (sub_80F26BC()) return; break; - case 0xB: + case 11: sub_80F36F0(); gMain.state++; - case 0xC: + case 12: if (sub_80F3724()) return; break; - case 0xD: + case 13: sub_80EBC10(); sub_80EBDBC(&sub_80EBDD8); break; - case 0xE: + case 14: ewram0.var6dab = 1; PlaySE(SE_PN_ON); SetMainCallback2(&sub_80EBD90); @@ -167,6 +301,7 @@ void sub_80EBA5C() { sub_80F1A74(); break; } + gMain.state++; } @@ -181,24 +316,24 @@ void sub_80EBBE8() { } } -u16 gKeyRepeatStartDelay; -void sub_80EBCA8(); - void sub_80EBC10() { u16 i; u16 *var1; + gKeyRepeatStartDelay = 0x14; - ewram0.var8828 = CalculatePlayerPartyCount(); + ewram0.playerPartyCount = CalculatePlayerPartyCount(); ewram0.var6ddc = 0; ewram0.var9344 = 0; ewram0.var8768 = 0; ewram0.varCED0 = 0; - for (i = 0; i <= 4; ++i) { + + for (i = 0; i < 5; ++i) { ewram0.var8fff[i] = 0; - var1 = (u16 *)ewram; + var1 = (u16 *)ewram0.var0; var1[i*2 + 0x4820] = 0x9B; var1[i*2 + 0x4821] = 0x5B; } + ewram0.var6e95 = 0; sub_80EBCA8(); } @@ -207,12 +342,14 @@ void sub_80EBCA8() { ewram0.var6db2[0] = 1; ewram0.var6db2[1] = 2; ewram0.var6db2[2] = 3; + if (FlagGet(SYS_RIBBON_GET)) { ewram0.var6db2[3] = 4; } else { ewram0.var6db2[3] = 0; } + ewram0.var6db2[4] = 5; } @@ -252,7 +389,7 @@ void sub_80EBD80() { } void sub_80EBD90() { - _call_via_r0(ewram0.var300); + ewram0.var300(); AnimateSprites(); BuildOamBuffer(); RunTasks(); @@ -265,22 +402,6 @@ void sub_80EBDBC(void (*func)(void)) { ewram0.var304 = 0; } -void sub_80F3FF0(); -bool8 sub_80F4024(); -void sub_80F2598(); -void sub_80EEE20(); -bool8 sub_80EEE54(); -void sub_80EEE08(); -void sub_80EF248(); -bool8 sub_80EF284(); -void sub_80F1B8C(); -bool8 sub_80F1BC8(u32 unk); -void sub_80EED2C(u8); -void sub_80F1DF0(); -bool8 sub_80F1E50(); -void sub_80EF428(); -void sub_80EC268(); - void sub_80EBDD8() { switch (ewram0.var304) { case 0: @@ -361,9 +482,6 @@ void sub_80EBDD8() { } -bool8 sub_80EEF78(); -void sub_80EED1C(); - void sub_80EC00C() { switch (ewram0.var304) { case 0: @@ -429,35 +547,19 @@ void sub_80EC00C() { } } -void sub_80F2D04(u32); -void sub_80EE9C0(u8, u8, u8); -bool8 sub_80EEA0C(); - void sub_80EC210() { switch (ewram0.var304) { - case 0: - sub_80F2D04(1); - sub_80EE9C0(0, ewram0.var6ddc, 0); - ewram0.var304++; - break; - case 1: - if (sub_80EEA0C()) return; - sub_80EBDBC(&sub_80EC268); + case 0: + sub_80F2D04(1); + sub_80EE9C0(0, ewram0.var6ddc, 0); + ewram0.var304++; + break; + case 1: + if (sub_80EEA0C()) return; + sub_80EBDBC(&sub_80EC268); } } -bool8 sub_80EEC10(); -bool8 sub_80F6250(); -void sub_80EED9C(); -void sub_80F6208(); -void sub_80EDB88(); -void sub_80EC4A0(); -void sub_80EC81C(); -void sub_80F208C(); -void sub_80EE96C(); -void sub_80F6C20(); -void sub_80EE3D8(); - void sub_80EC268() { u8 var1; switch (ewram0.var304) { @@ -549,18 +651,6 @@ void sub_80EC268() { } } -void sub_80F1E84(); -bool8 sub_80F1F10(); -void sub_80EEFBC(u32); -bool8 sub_80EEF34(); -void sub_80EED0C(); -void sub_80F2620(); -void sub_80EF814(); -void sub_80EF840(); -bool8 sub_80EF874(); -void sub_80F2DD8(); -void sub_80EC67C(); - void sub_80EC4A0() { u32 var1; u32 var2; @@ -637,12 +727,6 @@ void sub_80EC4A0() { } } -void sub_80EF9F8(); -void sub_80EED9C(); -bool8 sub_80EFBDC(u32); -void sub_80EFBB0(); -void sub_80F2DF4(); - void sub_80EC67C() { u32 var1; u32 var2; @@ -702,8 +786,6 @@ void sub_80EC67C() { } } -void sub_80EC86C(); - void sub_80EC81C() { switch (ewram0.var304) { case 0: @@ -717,11 +799,6 @@ void sub_80EC81C() { } } -bool8 sub_80EEC90(); -void sub_80ED620(); -void sub_80EC960(); -bool8 sub_80F1E6C(); - void sub_80EC86C() { switch (ewram0.var304) { case 0: @@ -761,8 +838,6 @@ void sub_80EC86C() { } } -void sub_80ECC08(); - void sub_80EC960() { switch (ewram0.var304) { case 0: @@ -854,17 +929,16 @@ void sub_80ECA10() { } } -void sub_80ED01C(); - void sub_80ECC08() { switch (ewram0.var304) { case 0: if (sub_80EEC90()) { PlaySE(0x5); - sub_80EF428(2, ewram0.var6dad); + sub_80EF428(2, ewram0.var6dad); sub_80EED9C(); break; } + if (gMain.newKeys & A_BUTTON) { PlaySE(0x5); switch ((s8)ewram0.var6dad) { @@ -887,6 +961,7 @@ void sub_80ECC08() { sub_80EBDBC(&sub_80EC9A8); return; } + ewram0.var6dfc = ewram0.var6dad; ewram0.var76aa = 1; sub_80EBDBC(&sub_80ED01C); @@ -896,7 +971,7 @@ void sub_80ECC08() { ewram0.var6dad = 0x5; ewram0.var304++; } - break; + break; case 1: if (sub_80F1E6C()) return;; sub_80EBDBC(&sub_80EC9A8); @@ -904,9 +979,6 @@ void sub_80ECC08() { } } -void sub_80F3130(); -void sub_80F2D6C(u32); - void sub_80ECD80() { u16 var1; switch (ewram0.var304) { @@ -952,61 +1024,54 @@ void sub_80ECD80() { case 9: sub_80F1B8C(0x2); ewram0.var304++; - case 0xA: + case 10: if (sub_80F1BC8(0x2)) return; ewram0.var304++; break; - case 0xB: + case 11: if (sub_8055870()) return; ewram0.var304++; break; - case 0xC: + case 12: BeginNormalPaletteFade(ewram0.var308, -1, 0x10, 0, 0); SetVBlankCallback(&sub_80EBD18); ewram0.var304++; break; - case 0xD: + case 13: sub_80EED2C(0); ewram0.var304++; break; - case 0xE: + case 14: sub_80F2598(); ewram0.var304++; break; - case 0xF: + case 15: if (gPaletteFade.active) return; ewram0.var304++; break; - case 0x10: + case 16: sub_80F2C80(0x1); ewram0.var304++; - case 0x11: + case 17: if ((var1 = sub_80F2CBC(0x1))) return; ewram0.var306 = var1; ewram0.var304++; break; - case 0x12: + case 18: sub_80F2C80(0x5); ewram0.var304++; - case 0x13: + case 19: if (sub_80F2CBC(0x5)) return; sub_80F1DF0(); ewram0.var304++; break; - case 0x14: + case 20: if (sub_80F1E50()) return; sub_80EF428(2, ewram0.var6dad); sub_80EBDBC(&sub_80ECC08); } } -void sub_80F4D44(); -bool8 sub_80F4D88(); -void sub_80F0264(); -bool8 sub_80F02A0(); -void sub_80F3008(); -void sub_80ED31C(); - void sub_80ED01C() { u16 var1; u16 var3; @@ -1059,56 +1124,50 @@ void sub_80ED01C() { case 9: sub_80F0264(0); ewram0.var304++; - case 0xA: + case 10: if (sub_80F02A0()) return; ewram0.var304++; break; - case 0xB: + case 11: sub_80F3008(0); ewram0.var304++; break; - case 0xC: + case 12: if (sub_8055870()) return; ewram0.var304++; break; - case 0xD: + case 13: BeginNormalPaletteFade(ewram0.var308, -1, 0x10, 0, 0); SetVBlankCallback(&sub_80EBD18); ewram0.var304++; break; - case 0xE: + case 14: sub_80EED2C(0x4); ewram0.var304++; break; - case 0xF: + case 15: if (gPaletteFade.active) return; ewram0.var306 = (u8)(gPaletteFade.active << 24); ewram0.var304++; break; - case 0x10: + case 16: sub_80F2C80(0x1); ewram0.var304++; - case 0x11: + case 17: if ((var3 = sub_80F2CBC(0x1))) return; ewram0.var306 = var3; ewram0.var304++; break; - case 0x12: + case 18: sub_80F2C80(ewram0.var6dfc + 7); ewram0.var304++; - case 0x13: + case 19: if (sub_80F2CBC(ewram0.var6dfc + 7)) return; sub_80EBDBC(&sub_80ED31C); break; } } -u8 sub_80F5DD4(); -void ShowMapNamePopUpWindow(); -void sub_80ED4D8(); -bool8 sub_80F0718(); -bool8 sub_80F3264(); - void sub_80ED31C() { switch (ewram0.var304) { case 0: @@ -1146,8 +1205,6 @@ void sub_80ED31C() { } } -void sub_80F6134(); - void sub_80ED3D0() { switch (ewram0.var304) { case 0: @@ -1190,12 +1247,6 @@ void sub_80ED3D0() { } } -void sub_80F4CF0(); -void sub_80EFF34(); -bool8 sub_80EFF68(); -void sub_80F35B4(); -void sub_80ED858(); - void sub_80ED4D8() { switch (ewram0.var304) { case 0: @@ -1293,36 +1344,35 @@ void sub_80ED620() { if (sub_8055870()) return; ewram0.var304++; break; - case 0xA: + case 10: sub_80F33A8(); BeginNormalPaletteFade(ewram0.var308, -1, 0x10, 0, 0); SetVBlankCallback(&sub_80EBD4C); ewram0.var304++; break; - case 0xB: + case 11: sub_80EED2C(0x2); ewram0.var304++; break; - case 0xC: + case 12: if (gPaletteFade.active) return; ewram0.var304++; break; - case 0xD: + case 13: sub_80F2C80(0x1); ewram0.var304++; - case 0xE: + case 14: if (sub_80F2CBC(0x1)) return; ewram0.var304++; break; - case 0xF: + case 15: sub_80F2C80(0x6); ewram0.var304++; - case 0x10: + case 16: if (sub_80F2CBC(0x6)) return; sub_80EBDBC(&sub_80ED858); break; } - } #if 0 @@ -1866,10 +1916,6 @@ _080EDB84: .4byte sub_80ED3D0\n"); } #endif -void sub_80F638C(); -bool8 sub_80F63D0(); -void sub_80EDDBC(); - void sub_80EDB88() { u8 var1; switch (ewram0.var304) { @@ -1921,44 +1967,41 @@ void sub_80EDB88() { case 9: sub_80F0264(0x1); ewram0.var304++; - case 0xA: + case 10: if (sub_80F02A0()) return; ewram0.var304++; break; - case 0xB: + case 11: sub_80F2C80(0x2); ewram0.var304++; - case 0xC: + case 12: if (sub_80F2CBC(0x2)) return; ewram0.var304++; break; - case 0xD: + case 13: sub_80F3008(0x1); ewram0.var304++; break; - case 0xE: + case 14: if (sub_8055870()) return; ewram0.var304++; break; - case 0xF: + case 15: BeginNormalPaletteFade(ewram0.var308, -1, 0x10, 0, 0); SetVBlankCallback(&sub_80EBD18); ewram0.var304++; break; - case 0x10: + case 16: sub_80EED2C(0x4); ewram0.var304++; break; - case 0x11: + case 17: if (gPaletteFade.active) return; sub_80EBDBC(&sub_80EDDBC); break; } } -void sub_80EDE70(); -void sub_80EDEE4(); - void sub_80EDDBC() { switch (ewram0.var304) { case 0: @@ -2016,13 +2059,6 @@ void sub_80EDE70() { } -void sub_80F66E0(); -bool8 sub_80F1080(); -void sub_80EEFBC(); -void sub_80F38B8(); -bool8 sub_80F38EC(); -void sub_80EE06C(); - void sub_80EDEE4() { switch (ewram0.var304) { case 0: @@ -2070,24 +2106,13 @@ void sub_80EDEE4() { if (gPaletteFade.active) return; ewram0.var304++; break; - case 0xA: + case 10: if (sub_80F170C()) return; sub_80EBDBC(&sub_80EE06C); break; } } -void sub_80F15A8(); -void sub_80F6A4C(); -bool8 sub_80F6AF0(); -void sub_80F3B00(); -bool8 sub_80F3B58(); -void sub_80F1494(); -u8 sub_80F68E8(); -void sub_80F3B94(); -bool8 sub_80F3BD4(); -void sub_80EE294(); - void sub_80EE06C() { u32 var1; u16 var2; @@ -2178,8 +2203,6 @@ label2: } } -void sub_80F3C2C(); - void sub_80EE294() { switch (ewram0.var304) { case 0: @@ -2227,9 +2250,6 @@ void sub_80EE294() { } } -void sub_80F6F10(); -void sub_80EE58C(); - void sub_80EE3D8() { u8 var1; switch (ewram0.var304) { @@ -2279,31 +2299,27 @@ void sub_80EE3D8() { sub_80F3008(0x2); ewram0.var304++; break; - case 0xA: + case 10: if (sub_8055870()) return; ewram0.var304++; break; - case 0xB: + case 11: sub_80F6F10(); BeginNormalPaletteFade(ewram0.var308, -1, 0x10, 0, 0); SetVBlankCallback(&sub_80EBD68); ewram0.var304++; break; - case 0xC: + case 12: sub_80EED2C(0x5); ewram0.var304++; break; - case 0xD: + case 13: if (gPaletteFade.active) return; sub_80EBDBC(&sub_80EE58C); break; } } -void sub_80F0FFC(); -void sub_80EE658(); -void sub_80EE8F4(); - void sub_80EE58C() { switch (ewram0.var304) { case 0: @@ -2341,29 +2357,6 @@ void sub_80EE58C() { } } -void sub_80F3294(); -void sub_80F0B24(); -bool8 sub_80F0B44(); -void sub_80F0F64(); -bool8 sub_80F0FEC(); -void sub_80F6FB8(); -void sub_80F6DB8(); -void sub_80F0CD8(); -bool8 sub_80F6E9C(); -bool8 sub_80F0D5C(); -bool8 sub_80F6ED4(); -bool8 sub_80F0EF4(); -void sub_80F2FB0(); -void sub_80F0FA0(); -void sub_80F0C28(); -bool8 sub_80F0C48(); -bool8 sub_80F70FC(); -void sub_80F708C(u32); -void sub_80F4394(); -void sub_80F0EC0(); -void sub_80F700C(); -void sub_80F42C4(); - void sub_80EE658() { switch (ewram0.var304) { case 0: @@ -2439,45 +2432,43 @@ label2: sub_80F2FB0(); ewram0.var304++; break; - case 0xA: + case 10: sub_80F6134(); ewram0.var304++; break; - case 0xB: + case 11: sub_80F0FA0(); ewram0.var304++; break; - case 0xC: + case 12: if (sub_80F0FEC()) return; ewram0.var304++; break; - case 0xD: + case 13: sub_80F0C28(); ewram0.var304++; break; - case 0xE: + case 14: if (sub_80F0C48()) return; ewram0.var304++; break; - case 0xF: + case 15: sub_80EEFBC(0x9); sub_80F3294(0); sub_80EBDBC(&sub_80EE58C); sub_80EED9C(); break; - case 0x10: + case 16: if (sub_80F70FC()) return; ewram0.var304++; break; - case 0x11: + case 17: if (sub_8055870()) return; ewram0.var304 = 0x8; break; } } -void sub_80F6FFC(); - void sub_80EE8F4() { switch (ewram0.var304) { case 0: @@ -2857,14 +2848,10 @@ void sub_80EED2C(u8 param1) { } } -IWRAM_DATA void (*gUnknown_03000744)(void); -void _call_via_r1(); -void sub_80EEDC4(); - void sub_80EED9C() { gUnknown_03000744 = ewram0.var300; ewram0.var300 = &sub_80EEDC4; - _call_via_r1(); + ewram0.var300(); } void sub_80EEDC4() { @@ -2883,26 +2870,17 @@ void sub_80EEDE8() { } void sub_80EEE08() { - // Here i've used .h struct instead of .c struct gUnknown_083DFEC4->unkD160 = 0; } void sub_80EEE20() { - // Here i've used .h struct instead of .c struct gUnknown_083DFEC4->unkD160 = 0; if (!gUnknown_083DFEC4->unk6DAC) { while (sub_80EEE54()); } } -extern const u8 gPokenavHoennMapMisc_Gfx[]; -extern const u8 gUnknown_08E99FB0[]; -extern const u16 gPokenavHoennMap1_Pal[]; - -void sub_80EF58C(u32); - bool8 sub_80EEE54() { - // Here i've used .h struct instead of .c struct switch (gUnknown_083DFEC4->unkD160) { case 0: LZ77UnCompVram(gPokenavHoennMapMisc_Gfx, (void *)VRAM + 0xC000); -- cgit v1.2.3 From a5754b95e8a1803c87641e5bc485a3690fbcaef7 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Fri, 3 Nov 2017 22:35:38 -0700 Subject: Fix non-matching sub_80EEF34 and start more decomp --- src/field/use_pokeblock.c | 2 +- src/pokenav_before.c | 91 +++++++++++++++++------------------------------ 2 files changed, 34 insertions(+), 59 deletions(-) (limited to 'src') diff --git a/src/field/use_pokeblock.c b/src/field/use_pokeblock.c index e946a9cfc..bac231856 100644 --- a/src/field/use_pokeblock.c +++ b/src/field/use_pokeblock.c @@ -244,7 +244,7 @@ static void sub_8136294(void) case 6: gUnknown_083DFEC4->unk76AA = 0; gUnknown_083DFEC4->unk87E0 = NULL; - gUnknown_083DFEC4->unk030C = 0x20; + gUnknown_083DFEC4->unk030C.val = 0x20; gUnknown_02039304->unk50++; break; case 7: diff --git a/src/pokenav_before.c b/src/pokenav_before.c index 783d42326..dfac1328b 100644 --- a/src/pokenav_before.c +++ b/src/pokenav_before.c @@ -2897,7 +2897,7 @@ bool8 sub_80EEE54() { sub_80EF58C(2); break; case 4: - gUnknown_083DFEC4->unk030C = 0; + gUnknown_083DFEC4->unk030C.unk030C.unk0 = 0; REG_BG1HOFS = 0; REG_BG1VOFS = 0; REG_BG1CNT = 0x1B0C; @@ -2909,66 +2909,41 @@ bool8 sub_80EEE54() { return 1; } -#if 0 -// not matches because of register differences bool8 sub_80EEF34() { - bool8 ret = 0x1; - if ((s8)gUnknown_083DFEC4->unk030C == 0x20) { - return 0; + bool8 retVal = TRUE; + + if (gUnknown_083DFEC4->unk030C.unk030C.unk0 == 32) + { + return FALSE; } - else { - gUnknown_083DFEC4->unk030C += 2; - if (gUnknown_083DFEC4->unk030C > 0x1F) { - gUnknown_083DFEC4->unk030C = 0x20; - ret = 0; - } - REG_BG1VOFS = gUnknown_083DFEC4->unk030C; - return ret; + + gUnknown_083DFEC4->unk030C.unk030C.unk0 += 2; + if (gUnknown_083DFEC4->unk030C.unk030C.unk0 > 31) + { + gUnknown_083DFEC4->unk030C.unk030C.unk0 = 32; + retVal = FALSE; } + + REG_BG1VOFS = gUnknown_083DFEC4->unk030C.unk030C.unk0; + return retVal; } -#else -__attribute__((naked)) -bool8 sub_80EEF34() { - asm(".text\n" - ".include \"constants/gba_constants.inc\""); - asm_unified( - "push {r4,lr}\n\ - movs r3, 0x1\n\ - ldr r0, _080EEF50 @ =gUnknown_083DFEC4\n\ - ldr r0, [r0]\n\ - movs r1, 0xC3\n\ - lsls r1, 2\n\ - adds r2, r0, r1\n\ - ldrh r1, [r2]\n\ - movs r4, 0\n\ - ldrsh r0, [r2, r4]\n\ - cmp r0, 0x20\n\ - bne _080EEF54\n\ - movs r0, 0\n\ - b _080EEF6E\n\ - .align 2, 0\n\ -_080EEF50: .4byte gUnknown_083DFEC4\n\ -_080EEF54:\n\ - adds r0, r1, 0x2\n\ - strh r0, [r2]\n\ - lsls r0, 16\n\ - asrs r0, 16\n\ - cmp r0, 0x1F\n\ - ble _080EEF66\n\ - movs r0, 0x20\n\ - strh r0, [r2]\n\ - movs r3, 0\n\ -_080EEF66:\n\ - ldr r1, _080EEF74 @ =REG_BG1VOFS\n\ - ldrh r0, [r2]\n\ - strh r0, [r1]\n\ - adds r0, r3, 0\n\ -_080EEF6E:\n\ - pop {r4}\n\ - pop {r1}\n\ - bx r1\n\ - .align 2, 0\n\ -_080EEF74: .4byte REG_BG1VOFS"); +bool8 sub_80EEF78(void) +{ + bool8 retVal = TRUE; + + if (gUnknown_083DFEC4->unk030C.unk030C.unk0 == 0) + { + return FALSE; + } + + gUnknown_083DFEC4->unk030C.unk030C.unk0 -= 2; + if (gUnknown_083DFEC4->unk030C.unk030C.unk0 <= 0) + { + gUnknown_083DFEC4->unk030C.unk030C.unk0 = 0; + retVal = FALSE; + } + + REG_BG1VOFS = gUnknown_083DFEC4->unk030C.unk030C.unk0; + return retVal; } -#endif -- cgit v1.2.3 From 67b49fe4b0545d9fd455caee95c003e8e030e247 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Sat, 4 Nov 2017 14:06:29 -0700 Subject: Decompile some pokenav functions --- src/pokenav_before.c | 243 ++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 231 insertions(+), 12 deletions(-) (limited to 'src') diff --git a/src/pokenav_before.c b/src/pokenav_before.c index dfac1328b..67578f9a1 100644 --- a/src/pokenav_before.c +++ b/src/pokenav_before.c @@ -4,10 +4,12 @@ #include "battle.h" #include "data2.h" #include "de_rom_8040FE0.h" +#include "menu.h" #include "overworld.h" #include "string_util.h" #include "palette.h" #include "task.h" +#include "text.h" #include "unknown_task.h" #include "sound.h" #include "region_map.h" @@ -87,8 +89,21 @@ struct UnknownPokenav0_1 { IWRAM_DATA void (*gUnknown_03000744)(void); +extern const u8 *const gUnknown_083E31B0[]; +extern const u8 *const gUnknown_083E31CC[]; +extern const u8 *const gUnknown_083E31D8[]; +extern u8 *gUnknown_083DFEC8; +extern const u8 gUnknown_083DFEEC[]; +extern const u8 gUnknown_083E005C[]; +extern const u8 gUnknown_083E007C[]; +extern const u8 gPokenavOutlineTilemap[]; +extern const u8 gPokenavOutlineTiles[]; +extern const u8 gPokenavOutlinePalette[]; +extern const u8 gUnknown_083DFECC[]; +extern const u8 gUnknown_083DFF8C[]; extern const u8 gPokenavHoennMapMisc_Gfx[]; extern const u8 gUnknown_08E99FB0[]; +extern const u8 gUnknown_08E9A100[]; extern const u16 gPokenavHoennMap1_Pal[]; static void sub_80EBCA8(); @@ -129,6 +144,9 @@ static void sub_80EE658(); static void sub_80EE8F4(); static void sub_80EEDC4(); +extern void sub_80EF7D4(void); +extern void sub_80EF54C(u8); +extern void sub_809D104(u16 *, u16, u16, const u8 *, u16, u16, u16, u16); extern void sub_80EF58C(u32); extern void sub_80F6FFC(); extern void sub_80F3294(); @@ -167,7 +185,6 @@ extern void sub_80F3B94(); extern bool8 sub_80F3BD4(); extern void sub_80F66E0(); extern bool8 sub_80F1080(); -extern void sub_80EEFBC(); extern void sub_80F38B8(); extern bool8 sub_80F38EC(); extern void sub_80F638C(); @@ -195,7 +212,7 @@ extern void sub_80EFBB0(); extern void sub_80F2DF4(); extern void sub_80F1E84(); extern bool8 sub_80F1F10(); -extern void sub_80EEFBC(u32); +extern void sub_80EEFBC(u8); extern void sub_80F2620(); extern void sub_80EF814(); extern void sub_80EF840(); @@ -208,13 +225,13 @@ extern void sub_80F6C20(); extern void sub_80F3FF0(); extern bool8 sub_80F4024(); extern void sub_80F2598(); -extern void sub_80EF248(); -extern bool8 sub_80EF284(); +extern void sub_80EF248(u8); +extern bool8 sub_80EF284(u8); extern void sub_80F1B8C(); extern bool8 sub_80F1BC8(u32 unk); extern void sub_80F1DF0(); extern bool8 sub_80F1E50(); -extern void sub_80EF428(); +extern void sub_80EF428(u8, u8); extern bool8 sub_80EEF78(); extern void sub_80F1A90(); extern void sub_80F2D04(u32); @@ -2848,19 +2865,19 @@ void sub_80EED2C(u8 param1) { } } -void sub_80EED9C() { +void sub_80EED9C(void) { gUnknown_03000744 = ewram0.var300; ewram0.var300 = &sub_80EEDC4; ewram0.var300(); } -void sub_80EEDC4() { +void sub_80EEDC4(void) { if (sub_8055870() != 0x1) { ewram0.var300 = gUnknown_03000744; } } -void sub_80EEDE8() { +void sub_80EEDE8(void) { REG_BG0HOFS = 0; REG_BG0VOFS = 0; REG_BG2VOFS = 0; @@ -2869,18 +2886,18 @@ void sub_80EEDE8() { REG_BG3VOFS = 0; } -void sub_80EEE08() { +void sub_80EEE08(void) { gUnknown_083DFEC4->unkD160 = 0; } -void sub_80EEE20() { +void sub_80EEE20(void) { gUnknown_083DFEC4->unkD160 = 0; if (!gUnknown_083DFEC4->unk6DAC) { while (sub_80EEE54()); } } -bool8 sub_80EEE54() { +bool8 sub_80EEE54(void) { switch (gUnknown_083DFEC4->unkD160) { case 0: LZ77UnCompVram(gPokenavHoennMapMisc_Gfx, (void *)VRAM + 0xC000); @@ -2909,7 +2926,7 @@ bool8 sub_80EEE54() { return 1; } -bool8 sub_80EEF34() { +bool8 sub_80EEF34(void) { bool8 retVal = TRUE; if (gUnknown_083DFEC4->unk030C.unk030C.unk0 == 32) @@ -2947,3 +2964,205 @@ bool8 sub_80EEF78(void) REG_BG1VOFS = gUnknown_083DFEC4->unk030C.unk030C.unk0; return retVal; } + +void sub_80EEFBC(u8 a) +{ + u8 var1; + + sub_809D104((void *)VRAM + 0xD800, 0, 22, gUnknown_08E9A100, 0, 0, 17, 2); + + switch (a) + { + case 0: + sub_809D104((void *)VRAM + 0xD800, 0, 22, gUnknown_08E9A100, 17, 0, 10, 2); + sub_809D104((void *)VRAM + 0xD800, 10, 22, gUnknown_08E9A100, 0, 6, 7, 2); + break; + case 11: + sub_809D104((void *)VRAM + 0xD800, 8, 22, gUnknown_08E9A100, 0, 6, 7, 2); + break; + case 2: + var1 = gUnknown_083DFEC4->unk6DAC; + if (!var1) + { + sub_809D104((void *)VRAM + 0xD800, 0, 22, gUnknown_08E9A100, 10, 2, 10, 2); + sub_809D104((void *)VRAM + 0xD800, 10, 22, gUnknown_08E9A100, var1, 6, 7, 2); + } + else + { + sub_809D104((void *)VRAM + 0xD800, 10, 22, gUnknown_08E9A100, 0, 6, 7, 2); + } + break; + case 3: + sub_809D104((void *)VRAM + 0xD800, 0, 22, gUnknown_08E9A100, 0, 4, 10, 2); + sub_809D104((void *)VRAM + 0xD800, 10, 22, gUnknown_08E9A100, 0, 6, 7, 2); + break; + case 4: + sub_809D104((void *)VRAM + 0xD800, 0, 22, gUnknown_08E9A100, 20, 2, 10, 2); + sub_809D104((void *)VRAM + 0xD800, 10, 22, gUnknown_08E9A100, 0, 6, 7, 2); + break; + case 7: + sub_809D104((void *)VRAM + 0xD800, 0, 22, gUnknown_08E9A100, 10, 4, 10, 2); + sub_809D104((void *)VRAM + 0xD800, 7, 22, gUnknown_08E9A100, 0, 6, 7, 2); + break; + case 8: + sub_809D104((void *)VRAM + 0xD800, 0, 22, gUnknown_08E9A100, 20, 4, 10, 2); + sub_809D104((void *)VRAM + 0xD800, 7, 22, gUnknown_08E9A100, 0, 6, 7, 2); + break; + case 5: + case 9: + sub_809D104((void *)VRAM + 0xD800, 0, 22, gUnknown_08E9A100, 0, 2, 10, 2); + sub_809D104((void *)VRAM + 0xD800, 8, 22, gUnknown_08E9A100, 0, 6, 7, 2); + break; + case 10: + sub_809D104((void *)VRAM + 0xD800, 8, 22, gUnknown_08E9A100, 0, 6, 7, 2); + break; + } +} + +void sub_80EF248(u8 a) +{ + gUnknown_083DFEC4->unkD160 = 0; + + if (!gUnknown_083DFEC4->unk6DAC) + { + while (sub_80EF284(a)); + } +} + +bool8 sub_80EF284(u8 a) +{ + switch (gUnknown_083DFEC4->unkD160) + { + case 0: + sub_80EEDE8(); + break; + case 1: + SetUpWindowConfig(&gWindowConfig_81E7224); + break; + case 2: + MultistepInitMenuWindowBegin(&gWindowConfig_81E7224); + break; + case 3: + if (!MultistepInitMenuWindowContinue()) + { + return TRUE; + } + break; + case 4: + DmaCopy16Defvars(3, gUnknown_083DFEEC, (void *)VRAM + 0x5000, 0xA0); + break; + case 5: + LZ77UnCompVram(gUnknown_083DFF8C, (void *)VRAM + 0xF800); + break; + case 6: + DmaCopy16Defvars(3, gUnknown_083E005C, (void *)VRAM + 0x8000, 0x20); + break; + case 7: + LZ77UnCompVram(gUnknown_083E007C, (void *)VRAM + 0xE000); + break; + case 8: + LZ77UnCompVram(gPokenavOutlineTilemap, (void *)VRAM + 0xE800); + break; + case 9: + LZ77UnCompVram(gPokenavOutlineTiles, (void *)VRAM + 0x8020); + break; + case 10: + sub_80EF54C(a); + LoadPalette(gUnknown_083DFECC, 0xF0, 0x20); + LoadPalette(gPokenavOutlinePalette, 0x40, 0x20); + sub_80EF7D4(); + break; + case 11: + REG_BG0CNT = 0x1F01; + REG_BG2CNT = 0x1D0A; + REG_BG3CNT = 0x1C0B; + REG_BLDCNT = 0; + + gUnknown_083DFEC4->unkD160++; + return FALSE; + default: + return FALSE; + } + + gUnknown_083DFEC4->unkD160++; + return TRUE; +} + +void sub_80EF428(u8 a, u8 b) +{ + u8 *tileBuffer; + const u8 *pcText = 0; + + switch (a) + { + case 0: + pcText = gUnknown_083E31B0[b]; + break; + case 1: + pcText = gUnknown_083E31CC[b]; + break; + case 2: + pcText = gUnknown_083E31D8[b]; + break; + } + + tileBuffer = gUnknown_083DFEC8; + sub_8072C74(&tileBuffer[0x800], pcText, 0xC0, 2); + MenuPrint(&tileBuffer[0x800], 3, 17); +} + +void sub_80EF490(u8 a) +{ + u16 var1, var2; + + if (a == 2) + { + a = 1; + } + + gUnknown_083DFEC4->unkCE4E = a * 30; + var1 = gUnknown_083DFEC4->unkCE4C; + var2 = a * 30; + if (var1 < var2) + { + gUnknown_083DFEC4->unkCE50 = 2; + } + else if (var1 > var2) + { + gUnknown_083DFEC4->unkCE50 = -2; + } + else + { + gUnknown_083DFEC4->unkCE50 = 0; + } +} + +bool8 sub_80EF4F8(void) +{ + u16 *palettes; + + if (gUnknown_083DFEC4->unkCE4C == gUnknown_083DFEC4->unkCE4E) + { + return FALSE; + } + else + { + gUnknown_083DFEC4->unkCE4C = gUnknown_083DFEC4->unkCE50 + gUnknown_083DFEC4->unkCE4C; + + palettes = gUnknown_083DFEC4->palettesCE52; + LoadPalette(&palettes[gUnknown_083DFEC4->unkCE4C], 0x31, 4); + return TRUE; + } + +} + +void sub_80EF54C(u8 a) +{ + if (a == 2) + { + a = 1; + } + + gUnknown_083DFEC4->unkCE4C = a * 30; + LoadPalette(&gUnknown_083DFEC4->palettesCE52[gUnknown_083DFEC4->unkCE4C], 0x31, 4); +} -- cgit v1.2.3 From 581bab1360d5544101b52c0b7616e7fb16ed8a5d Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Sat, 4 Nov 2017 20:24:50 -0400 Subject: more fixes --- src/battle/battle_interface.c | 38 +++++++++++++++++----------------- src/debug/matsuda_debug_menu.c | 8 +++---- src/engine/save.c | 6 +++--- src/engine/save_failed_screen.c | 4 ++-- src/engine/sprite.c | 11 +++++----- src/engine/string_util.c | 34 +++++++++++++++--------------- src/engine/text.c | 4 ++-- src/engine/tileset_anim.c | 46 ++++++++++++++++++++--------------------- src/engine/trade.c | 34 +++++++++++++++--------------- src/field/party_menu.c | 10 ++++----- src/field/use_pokeblock.c | 6 +++--- src/libs/agb_flash.c | 12 +++++------ src/libs/agb_flash_mx.c | 2 +- src/pokemon/pokemon_icon.c | 7 +++++-- src/rom3.c | 10 ++++----- 15 files changed, 118 insertions(+), 114 deletions(-) (limited to 'src') diff --git a/src/battle/battle_interface.c b/src/battle/battle_interface.c index 8bfeedd4d..10962c025 100644 --- a/src/battle/battle_interface.c +++ b/src/battle/battle_interface.c @@ -482,7 +482,7 @@ u8 battle_make_oam_normal_battle(u8 a) SetSubspriteTables(sprite, &gSubspriteTables_820A684[GetBankSide(a)]); sprite->subspriteMode = 2; sprite->oam.priority = 1; - CpuCopy32(sub_8043CDC(1), (void *)(OBJ_VRAM0 + sprite->oam.tileNum * 32), 64); + CpuCopy32(sub_8043CDC(1), OBJ_VRAM0 + sprite->oam.tileNum * 32, 64); gSprites[spriteId1].data5 = spriteId3; gSprites[spriteId1].data6 = a; @@ -940,7 +940,7 @@ static void sub_8044210(u8 a, s16 b, u8 c) sub_8003504(ptr, b, 0xF, 1); if (GetBankSide(r4) == 0) { - CpuCopy32(sub_8043CDC(0x74), (void *)(OBJ_VRAM0 + (gSprites[a].oam.tileNum + 0x34) * 32), 32); + CpuCopy32(sub_8043CDC(0x74), OBJ_VRAM0 + (gSprites[a].oam.tileNum + 0x34) * 32, 32); } } r4 = gSprites[a].data5; @@ -1309,7 +1309,7 @@ void sub_804454C(void) { spriteId = gSprites[gHealthboxIDs[i]].data5; - CpuFill32(0, (void *)(OBJ_VRAM0 + gSprites[spriteId].oam.tileNum * 32), 0x100); + CpuFill32(0, OBJ_VRAM0 + gSprites[spriteId].oam.tileNum * 32, 0x100); sub_8044210(gHealthboxIDs[i], GetMonData(&gPlayerParty[gBattlePartyID[i]], MON_DATA_HP), 0); sub_8044210(gHealthboxIDs[i], GetMonData(&gPlayerParty[gBattlePartyID[i]], MON_DATA_MAX_HP), 1); } @@ -1317,7 +1317,7 @@ void sub_804454C(void) { draw_status_ailment_maybe(gHealthboxIDs[i]); sub_8045A5C(gHealthboxIDs[i], &gPlayerParty[gBattlePartyID[i]], 5); - CpuCopy32(sub_8043CDC(0x75), (void *)(OBJ_VRAM0 + 0x680 + gSprites[gHealthboxIDs[i]].oam.tileNum * 32), 32); + CpuCopy32(sub_8043CDC(0x75), OBJ_VRAM0 + 0x680 + gSprites[gHealthboxIDs[i]].oam.tileNum * 32, 32); } } else @@ -1332,7 +1332,7 @@ void sub_804454C(void) { spriteId = gSprites[gHealthboxIDs[i]].data5; - CpuFill32(0, (void *)(OBJ_VRAM0 + gSprites[spriteId].oam.tileNum * 32), 0x100); + CpuFill32(0, OBJ_VRAM0 + gSprites[spriteId].oam.tileNum * 32, 0x100); sub_8044210(gHealthboxIDs[i], GetMonData(&gEnemyParty[gBattlePartyID[i]], MON_DATA_HP), 0); sub_8044210(gHealthboxIDs[i], GetMonData(&gEnemyParty[gBattlePartyID[i]], MON_DATA_MAX_HP), 1); } @@ -2505,9 +2505,9 @@ static void sub_8045458(u8 a, u8 b) { r4 = gSprites[a].data5; if (b != 0) - CpuCopy32(sub_8043CDC(0x46), (void *)(OBJ_VRAM0 + (gSprites[r4].oam.tileNum + 8) * 32), 32); + CpuCopy32(sub_8043CDC(0x46), OBJ_VRAM0 + (gSprites[r4].oam.tileNum + 8) * 32, 32); else - CpuFill32(0, (void *)(OBJ_VRAM0 + (gSprites[r4].oam.tileNum + 8) * 32), 32); + CpuFill32(0, OBJ_VRAM0 + (gSprites[r4].oam.tileNum + 8) * 32, 32); } } } @@ -2568,10 +2568,10 @@ static void draw_status_ailment_maybe(u8 a) r6 = sub_8043CDC(0x27); for (i = 0; i < 3; i++) - CpuCopy32(r6, (void *)(OBJ_VRAM0 + (gSprites[a].oam.tileNum + r8 + i) * 32), 32); + CpuCopy32(r6, OBJ_VRAM0 + (gSprites[a].oam.tileNum + r8 + i) * 32, 32); if (!ewram17800[r7].unk0_4) - CpuCopy32(sub_8043CDC(1), (void *)(OBJ_VRAM0 + gSprites[r10].oam.tileNum * 32), 64); + CpuCopy32(sub_8043CDC(1), OBJ_VRAM0 + gSprites[r10].oam.tileNum * 32, 64); sub_8045458(a, 1); return; @@ -2582,13 +2582,13 @@ static void draw_status_ailment_maybe(u8 a) // I don't like writing the array index like this, but I can't get it to match otherwise. FillPalette(r0[gBattleInterfaceStatusIcons_DynPal], r4_2 + 0x100, 2); CpuCopy16(gPlttBufferUnfaded + 0x100 + r4_2, (void *)(OBJ_PLTT + r4_2 * 2), 2); - CpuCopy32(r6, (void *)(OBJ_VRAM0 + (gSprites[a].oam.tileNum + r8) * 32), 96); + CpuCopy32(r6, OBJ_VRAM0 + (gSprites[a].oam.tileNum + r8) * 32, 96); if (IsDoubleBattle() == TRUE || GetBankSide(r7) == TRUE) { if (!ewram17800[r7].unk0_4) { - CpuCopy32(sub_8043CDC(0), (void *)(OBJ_VRAM0 + gSprites[r10].oam.tileNum * 32), 32); - CpuCopy32(sub_8043CDC(0x41), (void *)(OBJ_VRAM0 + (gSprites[r10].oam.tileNum + 1) * 32), 32); + CpuCopy32(sub_8043CDC(0), OBJ_VRAM0 + gSprites[r10].oam.tileNum * 32, 32); + CpuCopy32(sub_8043CDC(0x41), OBJ_VRAM0 + (gSprites[r10].oam.tileNum + 1) * 32, 32); } } sub_8045458(a, 0); @@ -2669,11 +2669,11 @@ static void sub_80458B0(u8 a) CpuCopy32(sub_8043CDC(0x2B), r6 + i * 64, 32); for (r7 = 3; r7 < 3 + r8; r7++) { - addr = (void *)(OBJ_VRAM0 + (gSprites[a].oam.tileNum + MACRO1(r7)) * 32); + addr = OBJ_VRAM0 + (gSprites[a].oam.tileNum + MACRO1(r7)) * 32; CpuCopy32(r6, addr, 32); r6 += 32; - addr = (void *)(OBJ_VRAM0 + (8 + gSprites[a].oam.tileNum + MACRO1(r7)) * 32); + addr = OBJ_VRAM0 + (8 + gSprites[a].oam.tileNum + MACRO1(r7)) * 32; CpuCopy32(r6, addr, 32); r6 += 32; } @@ -2697,7 +2697,7 @@ static void sub_8045998(u8 a) r7 = (u8 *)0x02000520 + status * 0x180 + 32; for (i = 6; i < 6 + r6; i++) { - CpuCopy32(r7, (void *)(OBJ_VRAM0 + (gSprites[a].oam.tileNum + 0x18 + MACRO1(i)) * 32), 32); + CpuCopy32(r7, OBJ_VRAM0 + (gSprites[a].oam.tileNum + 0x18 + MACRO1(i)) * 32, 32); r7 += 64; } } @@ -2821,9 +2821,9 @@ static void sub_8045D58(u8 a, u8 b) { u8 r4 = gSprites[ewram17850[a].unk0].data5; if (i < 2) - CpuCopy32(sub_8043CDC(r8) + sp8[i] * 32, (void *)(OBJ_VRAM0 + (gSprites[r4].oam.tileNum + 2 + i) * 32), 32); + CpuCopy32(sub_8043CDC(r8) + sp8[i] * 32, OBJ_VRAM0 + (gSprites[r4].oam.tileNum + 2 + i) * 32, 32); else - CpuCopy32(sub_8043CDC(r8) + sp8[i] * 32, (void *)(OBJ_VRAM0 + 64 + (i + gSprites[r4].oam.tileNum) * 32), 32); + CpuCopy32(sub_8043CDC(r8) + sp8[i] * 32, OBJ_VRAM0 + 64 + (i + gSprites[r4].oam.tileNum) * 32, 32); } break; case 1: @@ -2837,9 +2837,9 @@ static void sub_8045D58(u8 a, u8 b) for (i = 0; i < 8; i++) { if (i < 4) - CpuCopy32(sub_8043CDC(0xC) + sp8[i] * 32, (void *)(OBJ_VRAM0 + (gSprites[ewram17850[a].unk0].oam.tileNum + 0x24 + i) * 32), 32); + CpuCopy32(sub_8043CDC(0xC) + sp8[i] * 32, OBJ_VRAM0 + (gSprites[ewram17850[a].unk0].oam.tileNum + 0x24 + i) * 32, 32); else - CpuCopy32(sub_8043CDC(0xC) + sp8[i] * 32, (void *)(OBJ_VRAM0 + 0xB80 + (i + gSprites[ewram17850[a].unk0].oam.tileNum) * 32), 32); + CpuCopy32(sub_8043CDC(0xC) + sp8[i] * 32, OBJ_VRAM0 + 0xB80 + (i + gSprites[ewram17850[a].unk0].oam.tileNum) * 32, 32); } break; } diff --git a/src/debug/matsuda_debug_menu.c b/src/debug/matsuda_debug_menu.c index c7d81f502..d0c0f95f7 100644 --- a/src/debug/matsuda_debug_menu.c +++ b/src/debug/matsuda_debug_menu.c @@ -516,10 +516,10 @@ void SetDebugMonForContest(void) SetMonData(&gPlayerParty[0], MON_DATA_SMART, &gContestMons[gContestPlayerMonIndex].smart); SetMonData(&gPlayerParty[0], MON_DATA_TOUGH, &gContestMons[gContestPlayerMonIndex].tough); SetMonData(&gPlayerParty[0], MON_DATA_SHEEN, &gContestMons[gContestPlayerMonIndex].sheen); - SetMonData(&gPlayerParty[0], MON_DATA_MOVE1, (const u8 *) &gContestMons[gContestPlayerMonIndex].moves[0]); - SetMonData(&gPlayerParty[0], MON_DATA_MOVE2, (const u8 *) &gContestMons[gContestPlayerMonIndex].moves[1]); - SetMonData(&gPlayerParty[0], MON_DATA_MOVE3, (const u8 *) &gContestMons[gContestPlayerMonIndex].moves[2]); - SetMonData(&gPlayerParty[0], MON_DATA_MOVE4, (const u8 *) &gContestMons[gContestPlayerMonIndex].moves[3]); + SetMonData(&gPlayerParty[0], MON_DATA_MOVE1, &gContestMons[gContestPlayerMonIndex].moves[0]); + SetMonData(&gPlayerParty[0], MON_DATA_MOVE2, &gContestMons[gContestPlayerMonIndex].moves[1]); + SetMonData(&gPlayerParty[0], MON_DATA_MOVE3, &gContestMons[gContestPlayerMonIndex].moves[2]); + SetMonData(&gPlayerParty[0], MON_DATA_MOVE4, &gContestMons[gContestPlayerMonIndex].moves[3]); } void sub_80AA754(struct Sprite *sprite) diff --git a/src/engine/save.c b/src/engine/save.c index eae3f4470..5ea949cae 100644 --- a/src/engine/save.c +++ b/src/engine/save.c @@ -282,7 +282,7 @@ u8 sub_81255B8(u16 a1, const struct SaveSectionLocation *location) for (i = 0; i < sizeof(struct UnkSaveSection); i++) { - if (ProgramFlashByte(sector, i, ((u8 *)gFastSaveSection)[i])) + if (ProgramFlashByte(sector, i, gFastSaveSection->data[i])) { status = 0xFF; break; @@ -402,7 +402,7 @@ u8 sub_81258BC(u16 a1, const struct SaveSectionLocation *location) { u16 j; for (j = 0; j < location[id].size; j++) - ((u8 *)location[id].data)[j] = gFastSaveSection->data[j]; + location[id].data[j] = gFastSaveSection->data[j]; } } @@ -774,7 +774,7 @@ u8 unref_sub_8125FF0(u8 *data, u16 size) for (i = 0; i < size; i++) section->data[i] = data[i]; - gLastSaveSectorStatus = ProgramFlashSectorAndVerifyNBytes(gFlashSectors[0], (u8 *)section, sizeof(struct SaveSection)); + gLastSaveSectorStatus = ProgramFlashSectorAndVerifyNBytes(gFlashSectors[0], section, sizeof(struct SaveSection)); if (gLastSaveSectorStatus) return 0xFF; diff --git a/src/engine/save_failed_screen.c b/src/engine/save_failed_screen.c index b91e8b5bf..17bda237e 100644 --- a/src/engine/save_failed_screen.c +++ b/src/engine/save_failed_screen.c @@ -267,10 +267,10 @@ static void VBlankCB_UpdateClockGraphics(void) static bool8 VerifySectorWipe(u16 sector) { - u32 *ptr = (u32 *)unk_2000000; + u32 *ptr = (u32 *)&unk_2000000; u16 i; - ReadFlash(sector, 0, (u8 *)ptr, 4096); + ReadFlash(sector, 0, ptr, 4096); for (i = 0; i < 0x400; i++, ptr++) if (*ptr) diff --git a/src/engine/sprite.c b/src/engine/sprite.c index 5d394502a..34ca3802d 100644 --- a/src/engine/sprite.c +++ b/src/engine/sprite.c @@ -833,13 +833,13 @@ static void RequestSpriteFrameImageCopy(u16 index, u16 tileNum, const struct Spr if (gSpriteCopyRequestCount < MAX_SPRITE_COPY_REQUESTS) { gSpriteCopyRequests[gSpriteCopyRequestCount].src = images[index].data; - gSpriteCopyRequests[gSpriteCopyRequestCount].dest = (u8 *)OBJ_VRAM0 + TILE_SIZE_4BPP * tileNum; + gSpriteCopyRequests[gSpriteCopyRequestCount].dest = OBJ_VRAM0 + TILE_SIZE_4BPP * tileNum; gSpriteCopyRequests[gSpriteCopyRequestCount].size = images[index].size; gSpriteCopyRequestCount++; } } -void RequestSpriteCopy(const u8 *src, u8 *dest, u16 size) +void RequestSpriteCopy(const void *src, u8 *dest, u16 size) { if (gSpriteCopyRequestCount < MAX_SPRITE_COPY_REQUESTS) { @@ -850,6 +850,7 @@ void RequestSpriteCopy(const u8 *src, u8 *dest, u16 size) } } +// these two functions are unused. void CopyFromSprites(u8 *dest) { u32 i; @@ -1479,7 +1480,7 @@ u16 LoadSpriteSheet(const struct SpriteSheet *sheet) else { AllocSpriteTileRange(sheet->tag, (u16)tileStart, sheet->size / TILE_SIZE_4BPP); - CpuCopy16(sheet->data, (u8 *)OBJ_VRAM0 + TILE_SIZE_4BPP * tileStart, sheet->size); + CpuCopy16(sheet->data, OBJ_VRAM0 + TILE_SIZE_4BPP * tileStart, sheet->size); return (u16)tileStart; } } @@ -1517,7 +1518,7 @@ void LoadTilesForSpriteSheet(const struct SpriteSheet *sheet) { const u8 *data = sheet->data; u16 tileStart = GetSpriteTileStartByTag(sheet->tag); - CpuCopy16(data, (u8 *)OBJ_VRAM0 + TILE_SIZE_4BPP * tileStart, sheet->size); + CpuCopy16(data, OBJ_VRAM0 + TILE_SIZE_4BPP * tileStart, sheet->size); } void LoadTilesForSpriteSheets(struct SpriteSheet *sheets) @@ -1603,7 +1604,7 @@ void RequestSpriteSheetCopy(const struct SpriteSheet *sheet) { const u8 *data = sheet->data; u16 tileStart = GetSpriteTileStartByTag(sheet->tag); - RequestSpriteCopy(data, (u8 *)OBJ_VRAM0 + tileStart * TILE_SIZE_4BPP, sheet->size); + RequestSpriteCopy(data, OBJ_VRAM0 + tileStart * TILE_SIZE_4BPP, sheet->size); } u16 LoadSpriteSheetDeferred(const struct SpriteSheet *sheet) diff --git a/src/engine/string_util.c b/src/engine/string_util.c index 9686256a1..7316f533a 100644 --- a/src/engine/string_util.c +++ b/src/engine/string_util.c @@ -376,7 +376,7 @@ u8 *StringExpandPlaceholders(u8 *dest, const u8 *src) { u8 c = *src++; u8 placeholderId; - u8 *expandedString; + const u8 *expandedString; u8 length; switch (c) @@ -432,45 +432,45 @@ u8 *StringBraille(u8 *dest, const u8 *src) } } -static u8 *ExpandPlaceholder_UnknownStringVar(void) +static const u8 *ExpandPlaceholder_UnknownStringVar(void) { return gUnknownStringVar; } -static u8 *ExpandPlaceholder_PlayerName(void) +static const u8 *ExpandPlaceholder_PlayerName(void) { return gSaveBlock2.playerName; } -static u8 *ExpandPlaceholder_StringVar1(void) +static const u8 *ExpandPlaceholder_StringVar1(void) { return gStringVar1; } -static u8 *ExpandPlaceholder_StringVar2(void) +static const u8 *ExpandPlaceholder_StringVar2(void) { return gStringVar2; } -static u8 *ExpandPlaceholder_StringVar3(void) +static const u8 *ExpandPlaceholder_StringVar3(void) { return gStringVar3; } -static u8 *ExpandPlaceholder_KunChan(void) +static const u8 *ExpandPlaceholder_KunChan(void) { if (gSaveBlock2.playerGender == MALE) - return (u8 *) gExpandedPlaceholder_Kun; + return gExpandedPlaceholder_Kun; else - return (u8 *) gExpandedPlaceholder_Chan; + return gExpandedPlaceholder_Chan; } -static u8 *ExpandPlaceholder_RivalName(void) +static const u8 *ExpandPlaceholder_RivalName(void) { if (gSaveBlock2.playerGender == MALE) - return (u8 *) gExpandedPlaceholder_May; + return gExpandedPlaceholder_May; else - return (u8 *) gExpandedPlaceholder_Brendan; + return gExpandedPlaceholder_Brendan; } #define VERSION_DEPENDENT_PLACEHOLDER_LIST \ @@ -484,19 +484,19 @@ static u8 *ExpandPlaceholder_RivalName(void) #ifdef SAPPHIRE #define X(ph, r, s) \ -static u8 *ExpandPlaceholder_##ph(void) { return (u8 *) gExpandedPlaceholder_##s; } +static const u8 *ExpandPlaceholder_##ph(void) { return gExpandedPlaceholder_##s; } VERSION_DEPENDENT_PLACEHOLDER_LIST #else #define X(ph, r, s) \ -static u8 *ExpandPlaceholder_##ph(void) { return (u8 *) gExpandedPlaceholder_##r; } +static const u8 *ExpandPlaceholder_##ph(void) { return gExpandedPlaceholder_##r; } VERSION_DEPENDENT_PLACEHOLDER_LIST #endif #undef X -u8 *GetExpandedPlaceholder(u32 id) +const u8 *GetExpandedPlaceholder(u32 id) { - typedef u8 *(*ExpandPlaceholderFunc)(void); + typedef const u8 *(*ExpandPlaceholderFunc)(void); static const ExpandPlaceholderFunc funcs[] = { @@ -517,7 +517,7 @@ u8 *GetExpandedPlaceholder(u32 id) }; if (id >= ARRAY_COUNT(funcs)) - return (u8 *) gExpandedPlaceholder_Empty; + return gExpandedPlaceholder_Empty; else return funcs[id](); } diff --git a/src/engine/text.c b/src/engine/text.c index 9bb33f3c2..1d1d31383 100644 --- a/src/engine/text.c +++ b/src/engine/text.c @@ -536,7 +536,7 @@ const struct WindowConfig gWindowConfig_81E6C74 = 0, // tilemap top coordinate 30, // width 20, // height - (u8 *)OBJ_VRAM0, // tile data + OBJ_VRAM0, // tile data NULL, // tilemap }; @@ -1670,7 +1670,7 @@ const struct WindowConfig gWindowConfig_81E725C = 0, // tilemap top coordinate 30, // width 20, // height - (u8 *)OBJ_VRAM0, // tile data + OBJ_VRAM0, // tile data NULL, // tilemap }; diff --git a/src/engine/tileset_anim.c b/src/engine/tileset_anim.c index 34685381d..f892e5e9a 100644 --- a/src/engine/tileset_anim.c +++ b/src/engine/tileset_anim.c @@ -32,8 +32,8 @@ extern u8 *gTilesetAnimTable_BikeShop[]; struct Dma { - u8 *src; - u8 *dest; + void *src; + void *dest; u16 size; }; @@ -95,7 +95,7 @@ static void ClearTilesetAnimDmas(void) CpuFill32(0, &gTilesetAnimDmas, sizeof(gTilesetAnimDmas)); } -static void QueueTilesetAnimDma(u8 *src, u8 *dest, u16 size) +static void QueueTilesetAnimDma(void *src, void *dest, u16 size) { if (gNumTilesetAnimDmas < 20) { @@ -217,28 +217,28 @@ static void sub_8073070(u16 a1) { int v1; v1 = a1 % 4; - QueueTilesetAnimDma(gTilesetAnimTable_General_0[v1], (u8 *)(BG_VRAM + 0x3f80), 0x80); + QueueTilesetAnimDma(gTilesetAnimTable_General_0[v1], BG_TILE_ADDR(127), 0x80); } static void sub_8073098(u16 a1) { u8 v1; v1 = a1 % 8; - QueueTilesetAnimDma(gTilesetAnimTable_General_1[v1], (u8 *)(BG_VRAM + 0x3600), 0x3c0); + QueueTilesetAnimDma(gTilesetAnimTable_General_1[v1], BG_TILE_ADDR(108), 0x3c0); } static void sub_80730C0(u16 a1) { int v1; v1 = a1 % 8; - QueueTilesetAnimDma(gTilesetAnimTable_General_2[v1], (u8 *)(BG_VRAM + 0x3a00), 0x140); + QueueTilesetAnimDma(gTilesetAnimTable_General_2[v1], BG_TILE_ADDR(116), 0x140); } static void sub_80730E8(u16 a1) { int v1; v1 = a1 % 4; - QueueTilesetAnimDma(gTilesetAnimTable_General_3[v1], (u8 *)(BG_VRAM + 0x3e00), 0xc0); + QueueTilesetAnimDma(gTilesetAnimTable_General_3[v1], BG_TILE_ADDR(124), 0xc0); } void TilesetCB_Petalburg(void) @@ -454,37 +454,37 @@ static void sub_807361C(u16 a1) { int v1; v1 = a1 % 4; - QueueTilesetAnimDma(gTilesetAnimTable_General_4[v1], (u8 *)(BG_VRAM + 0x3c00), 0x140); + QueueTilesetAnimDma(gTilesetAnimTable_General_4[v1], BG_TILE_ADDR(120), 0x140); } static void sub_8073644(u8 a1) { u8 v1; v1 = a1 % 4; - QueueTilesetAnimDma(gTilesetAnimTable_Lavaridge[v1], (u8 *)(BG_VRAM + 0x6400), 0x80); + QueueTilesetAnimDma(gTilesetAnimTable_Lavaridge[v1], BG_TILE_ADDR(200), 0x80); v1 = (a1 + 2) % 4; - QueueTilesetAnimDma(gTilesetAnimTable_Lavaridge[v1], (u8 *)(BG_VRAM + 0x6480), 0x80); + QueueTilesetAnimDma(gTilesetAnimTable_Lavaridge[v1], BG_TILE_ADDR(201), 0x80); } static void sub_807368C(u8 a1) { int v1; v1 = a1 % 4; - QueueTilesetAnimDma(gTilesetAnimTable_Pacifidlog_0[v1], (u8 *)(BG_VRAM + 0x7a00), 0x3c0); + QueueTilesetAnimDma(gTilesetAnimTable_Pacifidlog_0[v1], BG_TILE_ADDR(244), 0x3c0); } static void sub_80736B4(u8 a1) { int v1; v1 = a1 % 4; - QueueTilesetAnimDma(gTilesetAnimTable_Underwater[v1], (u8 *)(BG_VRAM + 0x7e00), 0x80); + QueueTilesetAnimDma(gTilesetAnimTable_Underwater[v1], BG_TILE_ADDR(252), 0x80); } static void sub_80736DC(u8 a1) { int v1; v1 = a1 % 8; - QueueTilesetAnimDma(gTilesetAnimTable_Pacifidlog_1[v1], (u8 *)(BG_VRAM + 0x7e00), 0x100); + QueueTilesetAnimDma(gTilesetAnimTable_Pacifidlog_1[v1], BG_TILE_ADDR(252), 0x100); } static void sub_8073704(u16 a1, u8 a2) @@ -521,14 +521,14 @@ static void sub_80737E0(u16 a1) { int v1; v1 = a1 % 2; - QueueTilesetAnimDma(gTilesetAnimTable_Rustboro_1[v1], (u8 *)(BG_VRAM + 0x7800), 0x80); + QueueTilesetAnimDma(gTilesetAnimTable_Rustboro_1[v1], BG_TILE_ADDR(240), 0x80); } static void sub_8073808(u16 a1) { int v1; v1 = a1 % 4; - QueueTilesetAnimDma(gTilesetAnimTable_Cave[v1], (u8 *)(BG_VRAM + 0x5400), 0x80); + QueueTilesetAnimDma(gTilesetAnimTable_Cave[v1], BG_TILE_ADDR(168), 0x80); } static void sub_8073830(u16 a1, u8 a2) @@ -543,7 +543,7 @@ static void sub_8073868(u16 a1) { int v1; v1 = a1 % 4; - QueueTilesetAnimDma(gTilesetAnimTable_Cave[v1], (u8 *)(BG_VRAM + 0x7400), 0x80); + QueueTilesetAnimDma(gTilesetAnimTable_Cave[v1], BG_TILE_ADDR(232), 0x80); } static void sub_8073890(u16 a1) @@ -590,41 +590,41 @@ static void sub_8073904(u16 a1) { int v1; v1 = a1 % 2; - QueueTilesetAnimDma(gTilesetAnimTable_Building[v1], (u8 *)(BG_VRAM + 0x3e00), 0x80); + QueueTilesetAnimDma(gTilesetAnimTable_Building[v1], BG_TILE_ADDR(124), 0x80); } static void sub_807392C(u16 a1) { int v1; v1 = a1 % 3; - QueueTilesetAnimDma(gTilesetAnimTable_SootopolisGym_0[v1], (u8 *)(BG_VRAM + 0x7e00), 0x180); - QueueTilesetAnimDma(gTilesetAnimTable_SootopolisGym_1[v1], (u8 *)(BG_VRAM + 0x7a00), 0x280); + QueueTilesetAnimDma(gTilesetAnimTable_SootopolisGym_0[v1], BG_TILE_ADDR(252), 0x180); + QueueTilesetAnimDma(gTilesetAnimTable_SootopolisGym_1[v1], BG_TILE_ADDR(244), 0x280); } static void sub_8073974(u16 a1) { int v1; v1 = a1 % 4; - QueueTilesetAnimDma(gTilesetAnimTable_EliteFour_0[v1], (u8 *)(BG_VRAM + 0x7f00), 0x20); + QueueTilesetAnimDma(gTilesetAnimTable_EliteFour_0[v1], BG_TILE_ADDR(254), 0x20); } static void sub_807399C(u16 a1) { int v1; v1 = a1 % 2; - QueueTilesetAnimDma(gTilesetAnimTable_EliteFour_1[v1], (u8 *)(BG_VRAM + 0x7c00), 0x80); + QueueTilesetAnimDma(gTilesetAnimTable_EliteFour_1[v1], BG_TILE_ADDR(248), 0x80); } static void sub_80739C4(u16 a1) { int v1; v1 = a1 % 2; - QueueTilesetAnimDma(gTilesetAnimTable_MauvilleGym[v1], (u8 *)(BG_VRAM + 0x5200), 0x200); + QueueTilesetAnimDma(gTilesetAnimTable_MauvilleGym[v1], BG_TILE_ADDR(164), 0x200); } static void sub_80739EC(u16 a1) { int v1; v1 = a1 % 2; - QueueTilesetAnimDma(gTilesetAnimTable_BikeShop[v1], (u8 *)(BG_VRAM + 0x7e00), 0x120); + QueueTilesetAnimDma(gTilesetAnimTable_BikeShop[v1], BG_TILE_ADDR(252), 0x120); } diff --git a/src/engine/trade.c b/src/engine/trade.c index 8bc293b95..8fad94be8 100644 --- a/src/engine/trade.c +++ b/src/engine/trade.c @@ -112,7 +112,6 @@ struct TradeEwramSubstruct { /*0x0087*/ u8 unk_0087; /*0x0088*/ u8 filler_0088[2]; /*0x008a*/ u8 unk_008a; - /*0x008b*/ u8 unk_008b; /*0x008c*/ u16 linkData[20]; /*0x00b4*/ u8 unk_00b4; /*0x00b5*/ u8 unk_00b5[11]; @@ -1706,8 +1705,11 @@ static void sub_8048C70(void) static void nullsub_5(u8 a0, u8 a1) {} -static void sub_8048D24(u8 *dest, const u8 *src, u32 size) +// why not just use memcpy? +static void Trade_Memcpy(void *dataDest, void *dataSrc, u32 size) { + u8 *dest = dataDest; + u8 *src = dataSrc; int i; for (i = 0; i < size; i ++) dest[i] = src[i]; } @@ -1724,7 +1726,7 @@ static bool8 sub_8048D44(void) switch (gUnknown_03004824->unk_0075) { case 0: - sub_8048D24(gBlockSendBuffer, (const u8 *)&gPlayerParty[0], 2 * sizeof(struct Pokemon)); + Trade_Memcpy(gBlockSendBuffer, &gPlayerParty[0], 2 * sizeof(struct Pokemon)); gUnknown_03004824->unk_0075 ++; break; case 1: @@ -1751,13 +1753,13 @@ static bool8 sub_8048D44(void) case 3: if (GetBlockReceivedStatus() == 3) { - sub_8048D24((u8 *)&gEnemyParty[0], (const u8 *)gBlockRecvBuffer[mpId ^ 1], 2 * sizeof(struct Pokemon)); + Trade_Memcpy(&gEnemyParty[0], gBlockRecvBuffer[mpId ^ 1], 2 * sizeof(struct Pokemon)); ResetBlockReceivedFlags(); gUnknown_03004824->unk_0075 ++; } break; case 4: - sub_8048D24(gBlockSendBuffer, (const u8 *)&gPlayerParty[2], 2 * sizeof(struct Pokemon)); + Trade_Memcpy(gBlockSendBuffer, &gPlayerParty[2], 2 * sizeof(struct Pokemon)); gUnknown_03004824->unk_0075 ++; break; case 5: @@ -1770,13 +1772,13 @@ static bool8 sub_8048D44(void) case 6: if (GetBlockReceivedStatus() == 3) { - sub_8048D24((u8 *)&gEnemyParty[2], (const u8 *)gBlockRecvBuffer[mpId ^ 1], 2 * sizeof(struct Pokemon)); + Trade_Memcpy(&gEnemyParty[2], gBlockRecvBuffer[mpId ^ 1], 2 * sizeof(struct Pokemon)); ResetBlockReceivedFlags(); gUnknown_03004824->unk_0075 ++; } break; case 7: - sub_8048D24(gBlockSendBuffer, (const u8 *)&gPlayerParty[4], 2 * sizeof(struct Pokemon)); + Trade_Memcpy(gBlockSendBuffer, &gPlayerParty[4], 2 * sizeof(struct Pokemon)); gUnknown_03004824->unk_0075 ++; break; case 8: @@ -1789,13 +1791,13 @@ static bool8 sub_8048D44(void) case 9: if (GetBlockReceivedStatus() == 3) { - sub_8048D24((u8 *)&gEnemyParty[4], (const u8 *)gBlockRecvBuffer[mpId ^ 1], 2 * sizeof(struct Pokemon)); + Trade_Memcpy(&gEnemyParty[4], gBlockRecvBuffer[mpId ^ 1], 2 * sizeof(struct Pokemon)); ResetBlockReceivedFlags(); gUnknown_03004824->unk_0075 ++; } break; case 10: - sub_8048D24(gBlockSendBuffer, (const u8 *)&gSaveBlock1.mail[0], 6 * sizeof(struct MailStruct) + 4); + Trade_Memcpy(gBlockSendBuffer, &gSaveBlock1.mail[0], 6 * sizeof(struct MailStruct) + 4); gUnknown_03004824->unk_0075 ++; break; case 11: @@ -1808,13 +1810,13 @@ static bool8 sub_8048D44(void) case 12: if (GetBlockReceivedStatus() == 3) { - sub_8048D24((u8 *)&gUnknown_02029700[0], (const u8 *)gBlockRecvBuffer[mpId ^ 1], 6 * sizeof(struct MailStruct)); + Trade_Memcpy(&gUnknown_02029700[0], gBlockRecvBuffer[mpId ^ 1], 6 * sizeof(struct MailStruct)); ResetBlockReceivedFlags(); gUnknown_03004824->unk_0075 ++; } break; case 13: - sub_8048D24(gBlockSendBuffer, (const u8 *)gSaveBlock1.giftRibbons, 11); + Trade_Memcpy(gBlockSendBuffer, gSaveBlock1.giftRibbons, 11); gUnknown_03004824->unk_0075 ++; break; case 14: @@ -1827,7 +1829,7 @@ static bool8 sub_8048D44(void) case 15: if (GetBlockReceivedStatus() == 3) { - sub_8048D24((u8 *)gUnknown_03004824->unk_00b5, (const u8 *)gBlockRecvBuffer[mpId ^ 1], 11); + Trade_Memcpy(gUnknown_03004824->unk_00b5, gBlockRecvBuffer[mpId ^ 1], 11); ResetBlockReceivedFlags(); gUnknown_03004824->unk_0075 ++; } @@ -1915,7 +1917,7 @@ static void sub_80491E4(u8 mpId, u8 status) gUnknown_03004824->unk_007b = 8; break; case 0xdddd: - gUnknown_03004824->unk_008a = ((u8 *)gBlockRecvBuffer[0])[1 * sizeof(u16)] + 6; + gUnknown_03004824->unk_008a = gBlockRecvBuffer[0][1] + 6; sub_8049E9C(gUnknown_03004824->tradeMenuCursorPosition); sub_8049E9C(gUnknown_03004824->unk_008a); gUnknown_03004824->unk_007b = 7; @@ -5416,7 +5418,6 @@ static void sub_804D948(u8 whichPlayerMon, u8 whichInGameTrade) struct MailStruct mail; u8 metLocation = 0xFE; u8 isMail; - u8 *item; struct Pokemon *pokemon = &gEnemyParty[0]; CreateMon(pokemon, inGameTrade->species, level, 32, TRUE, inGameTrade->personality, TRUE, inGameTrade->otId); @@ -5451,8 +5452,7 @@ static void sub_804D948(u8 whichPlayerMon, u8 whichInGameTrade) } else { - item = (u8 *)&inGameTrade->heldItem; - SetMonData(pokemon, MON_DATA_HELD_ITEM, item); + SetMonData(pokemon, MON_DATA_HELD_ITEM, &inGameTrade->heldItem); } } CalculateMonStats(&gEnemyParty[0]); @@ -5705,7 +5705,7 @@ void sub_804E22C(void) { const u16 *src; u16 *dest; - LZDecompressVram(gUnknown_08D00000, (u8 *)VRAM); + LZDecompressVram(gUnknown_08D00000, (void *)VRAM); CpuCopy16(gUnknown_08D00524, ewram, 0x1000); src = (const u16 *)ewram; dest = BG_SCREEN_ADDR(5); diff --git a/src/field/party_menu.c b/src/field/party_menu.c index a8c57b86d..7a519d737 100644 --- a/src/field/party_menu.c +++ b/src/field/party_menu.c @@ -2855,7 +2855,7 @@ void sub_806D5B8(u8 monIndex) ZeroFillWindowRect(&gUnknown_03004210, left, top, right, bottom); var1 = 0; - CpuFastSet(&var1, (void *)(OBJ_VRAM1 + monIndex * 0x400), 0x1000100); + CpuFastSet(&var1, OBJ_VRAM1 + monIndex * 0x400, 0x1000100); } void sub_806D668(u8 monIndex) @@ -2869,7 +2869,7 @@ void sub_806D668(u8 monIndex) ZeroFillWindowRect(&gUnknown_03004210, left, top, right, bottom); var1 = 0; - CpuFastSet(&var1, (void *)(OBJ_VRAM1 + 0x300 + monIndex * 0x400), 0x1000040); + CpuFastSet(&var1, OBJ_VRAM1 + 0x300 + monIndex * 0x400, 0x1000040); } bool8 LoadPartyMenuGraphics(u8 a) @@ -3460,7 +3460,7 @@ void PartyMenuDoPrintMonNickname(u8 monIndex, int b, const u8 *nameBuffer) u32 var1 = 0; CpuFastSet(&var1, gTileBuffer, 0x1000100); sub_8004E3C((struct WindowConfig *)&gWindowConfig_81E6CAC, gTileBuffer, nameBuffer); - CpuFastSet(gTileBuffer, (void *)(OBJ_VRAM1 + (monIndex * 0x400)), 128); + CpuFastSet(gTileBuffer, OBJ_VRAM1 + (monIndex * 0x400), 128); } void PrintPartyMenuMonNickname(u8 monIndex, u8 b, struct Pokemon *pokemon) @@ -3570,7 +3570,7 @@ void PartyMenuDoPrintLevel(u8 monIndex, u8 menuLayout, u8 level) var1 = 0; CpuFastSet(&var1, gUnknown_02039460, 0x1000020); sub_8004E3C((struct WindowConfig *)&gWindowConfig_81E6CAC, gUnknown_02039460 - 0x100 /*gTileBuffer*/, gStringVar1); - CpuFastSet(gUnknown_02039460, (void *)(OBJ_VRAM1 + 0x200 + (monIndex * 0x400)), 32); + CpuFastSet(gUnknown_02039460, OBJ_VRAM1 + 0x200 + (monIndex * 0x400), 32); } void PartyMenuPrintLevel(u8 monIndex, u8 menuLayout, struct Pokemon *pokemon) @@ -3664,7 +3664,7 @@ void PartyMenuDoPrintHP(u8 monIndex, u8 b, u16 currentHP, u16 maxHP) CpuFastSet(&var, gUnknown_02039460, 0x1000040); sub_8004E3C((struct WindowConfig *)&gWindowConfig_81E6CAC, gUnknown_02039460 - 0x100 /*gTileBuffer*/, gStringVar1); - CpuFastSet(gUnknown_02039460, (void *)(OBJ_VRAM1 + 0x300 + (monIndex * 0x400)), 64); + CpuFastSet(gUnknown_02039460, OBJ_VRAM1 + 0x300 + (monIndex * 0x400), 64); } void PartyMenuPrintHP(u8 monIndex, u8 b, struct Pokemon *pokemon) diff --git a/src/field/use_pokeblock.c b/src/field/use_pokeblock.c index e946a9cfc..5fbecec0d 100644 --- a/src/field/use_pokeblock.c +++ b/src/field/use_pokeblock.c @@ -22,10 +22,10 @@ #ifdef GERMAN extern const u16 ConditionUpDownPalette[16]; -extern const u32 ConditionUpDownTiles[0x80]; +extern const u8 ConditionUpDownTiles[0x200]; #else const u16 ConditionUpDownPalette[] = INCBIN_U16("graphics/misc/condition_up_down.gbapal"); -const u32 ConditionUpDownTiles[] = INCBIN_U32("graphics/misc/condition_up_down.4bpp"); +const u8 ConditionUpDownTiles[] = INCBIN_U8("graphics/misc/condition_up_down.4bpp"); #endif static const u32 sContestStatsMonData[] = { @@ -49,7 +49,7 @@ static const u8 *const sContextStatNames[] = { }; static const struct SpriteSheet gSpriteSheet_ConditionUpDown = { - (u8 *)ConditionUpDownTiles, + ConditionUpDownTiles, sizeof ConditionUpDownTiles, GFX_TAG_CONDITIONUPDOWN }; diff --git a/src/libs/agb_flash.c b/src/libs/agb_flash.c index 340d469a7..5b171abcb 100644 --- a/src/libs/agb_flash.c +++ b/src/libs/agb_flash.c @@ -9,7 +9,7 @@ static u16 sSavedIme; u8 gFlashTimeoutFlag; u8 (*PollFlashStatus)(u8 *); u16 (*WaitForFlashWrite)(u8 phase, u8 *addr, u8 lastData); -u16 (*ProgramFlashSector)(u16 sectorNum, u8 *src); +u16 (*ProgramFlashSector)(u16 sectorNum, void *src); const struct FlashType *gFlash; u16 (*ProgramFlashByte)(u16 sectorNum, u32 offset, u8 data); u16 gFlashNumRemainingBytes; @@ -135,7 +135,7 @@ void ReadFlash_Core(u8 *src, u8 *dest, u32 size) } } -void ReadFlash(u16 sectorNum, u32 offset, u8 *dest, u32 size) +void ReadFlash(u16 sectorNum, u32 offset, void *dest, u32 size) { u8 *src; u16 i; @@ -256,7 +256,7 @@ u32 VerifyFlashSectorNBytes(u16 sectorNum, u8 *src, u32 n) return verifyFlashSector_Core(src, tgt, n); } -u32 ProgramFlashSectorAndVerify(u16 sectorNum, u8 *src) // 3rd is unused +u32 ProgramFlashSectorAndVerify(u16 sectorNum, u8 *src) { u8 i; u32 result; @@ -275,18 +275,18 @@ u32 ProgramFlashSectorAndVerify(u16 sectorNum, u8 *src) // 3rd is unused return result; // return 0 if verified and programmed. } -u32 ProgramFlashSectorAndVerifyNBytes(u16 sectorNum, u8 *src, u32 n) +u32 ProgramFlashSectorAndVerifyNBytes(u16 sectorNum, void *dataSrc, u32 n) { u8 i; u32 result; for (i = 0; i < 3; i++) { - result = ProgramFlashSector(sectorNum, src); + result = ProgramFlashSector(sectorNum, dataSrc); if (result != 0) continue; - result = VerifyFlashSectorNBytes(sectorNum, src, n); + result = VerifyFlashSectorNBytes(sectorNum, dataSrc, n); if (result == 0) break; } diff --git a/src/libs/agb_flash_mx.c b/src/libs/agb_flash_mx.c index 67348901f..b4f710f36 100644 --- a/src/libs/agb_flash_mx.c +++ b/src/libs/agb_flash_mx.c @@ -157,7 +157,7 @@ static u16 ProgramByte(u8 *src, u8 *dest) return WaitForFlashWrite(1, dest, *src); } -u16 ProgramFlashSector_MX(u16 sectorNum, u8 *src) +u16 ProgramFlashSector_MX(u16 sectorNum, void *src) { u16 result; u8 *dest; diff --git a/src/pokemon/pokemon_icon.c b/src/pokemon/pokemon_icon.c index 9bb3386e1..e83f912ec 100644 --- a/src/pokemon/pokemon_icon.c +++ b/src/pokemon/pokemon_icon.c @@ -1215,8 +1215,11 @@ u8 UpdateMonIconFrame(struct Sprite *sprite) break; default: RequestSpriteCopy( - (u8 *)sprite->images + sSpriteImageSizes[sprite->oam.shape][sprite->oam.size] * frame, - (u8 *)OBJ_VRAM0 + sprite->oam.tileNum * TILE_SIZE_4BPP, + // pointer arithmetic is needed to get the correct pointer to perform the sprite copy on. + // because sprite->images is a struct def, it has to be casted to (u8 *) before any + // arithmetic can be performed. + (u8 *)sprite->images + (sSpriteImageSizes[sprite->oam.shape][sprite->oam.size] * frame), + OBJ_VRAM0 + sprite->oam.tileNum * TILE_SIZE_4BPP, sSpriteImageSizes[sprite->oam.shape][sprite->oam.size]); { register u8 duration asm("r0") = sprite->anims[sprite->animNum][sprite->animCmdIndex].frame.duration; diff --git a/src/rom3.c b/src/rom3.c index a3afcd6b7..75dfdf2a2 100644 --- a/src/rom3.c +++ b/src/rom3.c @@ -92,7 +92,7 @@ void setup_poochyena_battle(void) ZeroEnemyPartyMons(); CreateMon(&gEnemyParty[0], SPECIES_POOCHYENA, 2, 32, 0, 0, 0, 0); i = ITEM_NONE; - SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, (u8 *)&i); + SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, &i); } gUnknown_020239FC = 0; gUnknown_02024C78 = 0; @@ -489,7 +489,7 @@ void sub_800C35C(void) u8 i; //r4 s32 j; //r2 u16 r6; //r6 - u8 *recvBuffer; //r3 + u16 *recvBuffer; //r3 u8 *dest; //r5 u8 *src; //r4 @@ -500,10 +500,10 @@ void sub_800C35C(void) if (GetBlockReceivedStatus() & gBitTable[i]) { ResetBlockReceivedFlag(i); - recvBuffer = (u8 *)&gBlockRecvBuffer[i]; + recvBuffer = gBlockRecvBuffer[i]; #ifndef NONMATCHING asm(""); - recvBuffer = (u8 *)&gBlockRecvBuffer[i]; + recvBuffer = gBlockRecvBuffer[i]; #endif r6 = gBlockRecvBuffer[i][2]; if (gTasks[gUnknown_020238C5].data[14] + 9 + r6 > 0x1000) @@ -513,7 +513,7 @@ void sub_800C35C(void) } //_0800C402 dest = EWRAM_15000 + gTasks[gUnknown_020238C5].data[14]; - src = recvBuffer; + src = (u8 *)recvBuffer; for (j = 0; j < r6 + 8; j++) dest[j] = src[j]; gTasks[gUnknown_020238C5].data[14] = gTasks[gUnknown_020238C5].data[14] + r6 + 8; -- cgit v1.2.3 From 003d16e7a178e440c41f2bca365bf8f8f2a60b0e Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Sat, 4 Nov 2017 21:44:50 -0400 Subject: finish first wave of fixes --- src/field/battle_tower.c | 8 ++++---- src/field/decoration.c | 2 +- src/field/decoration_inventory.c | 2 +- src/field/easy_chat.c | 2 +- src/field/field_effect.c | 4 ++-- src/field/field_ground_effect.c | 38 +++++++------------------------------- src/field/field_map_obj.c | 18 +++++++++--------- src/field/field_map_obj_helpers.c | 2 +- src/field/player_pc.c | 8 ++++---- src/field/trainer_see.c | 2 +- src/pokemon/pokemon_3.c | 4 ++-- 11 files changed, 33 insertions(+), 57 deletions(-) (limited to 'src') diff --git a/src/field/battle_tower.c b/src/field/battle_tower.c index 06d692eae..1b5759f49 100644 --- a/src/field/battle_tower.c +++ b/src/field/battle_tower.c @@ -1370,7 +1370,7 @@ void FillBattleTowerTrainerParty(void) } SetMonData(&gEnemyParty[partyIndex], MON_DATA_FRIENDSHIP, &friendship); - SetMonData(&gEnemyParty[partyIndex], MON_DATA_HELD_ITEM, (u8 *)&sBattleTowerHeldItems[battleTowerMons[battleMonIndex].heldItem]); + SetMonData(&gEnemyParty[partyIndex], MON_DATA_HELD_ITEM, &sBattleTowerHeldItems[battleTowerMons[battleMonIndex].heldItem]); // The pokemon was successfully added to the trainer's party, so it's safe to move on to // the next party slot. @@ -1589,7 +1589,7 @@ void sub_81354CC(void) for (i = 0; i < PARTY_SIZE; i++) { heldItem = GetMonData(&gSaveBlock1.playerParty[i], MON_DATA_HELD_ITEM); - SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, (u8 *)&heldItem); + SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, &heldItem); } break; case 2: @@ -1633,7 +1633,7 @@ void sub_813556C(void) for (i = 0; i < PARTY_SIZE; i++) { heldItem = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM); - SetMonData(&gSaveBlock1.playerParty[i], MON_DATA_HELD_ITEM, (u8 *)&heldItem); + SetMonData(&gSaveBlock1.playerParty[i], MON_DATA_HELD_ITEM, &heldItem); } CreateTask(sub_8135534, 1); @@ -2185,7 +2185,7 @@ void AwardBattleTowerRibbons(void) if (!GetMonData(pokemon, ribbonType)) { gScriptResult = 1; - SetMonData(pokemon, ribbonType, (u8 *)&gScriptResult); + SetMonData(pokemon, ribbonType, &gScriptResult); } } } diff --git a/src/field/decoration.c b/src/field/decoration.c index e067191e9..59c19c20a 100644 --- a/src/field/decoration.c +++ b/src/field/decoration.c @@ -1494,7 +1494,7 @@ const union AnimCmd *const gSpriteAnimTable_83EC930[] = { }; const struct SpriteFrameImage gSpriteImageTable_83EC934[] = { - {.data = (u8 *)&gUnknown_02038900.image, .size = sizeof gUnknown_02038900.image} + {.data = gUnknown_02038900.image, .size = sizeof(gUnknown_02038900.image)} }; const struct SpriteTemplate gSpriteTemplate_83EC93C = { diff --git a/src/field/decoration_inventory.c b/src/field/decoration_inventory.c index 083cb260c..687589373 100644 --- a/src/field/decoration_inventory.c +++ b/src/field/decoration_inventory.c @@ -8,7 +8,7 @@ #include "decoration.h" #include "decoration_inventory.h" -#define DECOR_INV(ptr) {.items = (u8 *)&ptr, .size = sizeof ptr} +#define DECOR_INV(ptr) {.items = ptr, .size = sizeof ptr} struct DecorationInventory const gDecorationInventories[] = { DECOR_INV(gSaveBlock1.decorDesk), diff --git a/src/field/easy_chat.c b/src/field/easy_chat.c index 2668b57dd..8e7413516 100644 --- a/src/field/easy_chat.c +++ b/src/field/easy_chat.c @@ -161,7 +161,7 @@ u16 unref_sub_80EB5E0(u16 arg0) { case EC_GROUP_POKEMON: // 0 case EC_GROUP_POKEMON_2: // 21 - chars = (u8 *) gSpeciesNames[word]; + chars = gSpeciesNames[word]; break; case EC_GROUP_MOVE_1: // 18 case EC_GROUP_MOVE_2: // 19 diff --git a/src/field/field_effect.c b/src/field/field_effect.c index d86d6e5cd..bd78fb632 100644 --- a/src/field/field_effect.c +++ b/src/field/field_effect.c @@ -37,7 +37,7 @@ const u16 gFieldEffectObjectPalette4[16] = INCBIN_U16("graphics/field_effect_obj const u32 gSpriteImage_839E474[] = INCBIN_U32("graphics/misc/pokecenter_monitor/0.4bpp"); const u32 gSpriteImage_839E534[] = INCBIN_U32("graphics/misc/pokecenter_monitor/1.4bpp"); const u32 gSpriteImage_839E5F4[] = INCBIN_U32("graphics/misc/big_hof_monitor.4bpp"); -const u32 gSpriteImage_839E7F4[] = INCBIN_U32("graphics/misc/small_hof_monitor.4bpp"); +const u8 gSpriteImage_839E7F4[] = INCBIN_U8("graphics/misc/small_hof_monitor.4bpp"); const u16 gFieldEffectObjectPalette5[16] = INCBIN_U16("graphics/field_effect_objects/palettes/05.gbapal"); // Graphics for the lights streaking past your Pokemon when it uses a field move. @@ -110,7 +110,7 @@ const struct SpriteFrameImage gSpriteImageTable_839F170[] = { }; const struct SpriteFrameImage gSpriteImageTable_839F178[] = { - {.data = (u8 *)gSpriteImage_839E7F4, .size = 0x200} // the macro breaks down here + {.data = gSpriteImage_839E7F4, .size = 0x200} // the macro breaks down here }; const struct Subsprite Unknown_39F180[] = { diff --git a/src/field/field_ground_effect.c b/src/field/field_ground_effect.c index 5af8ea3e3..25b678ff9 100644 --- a/src/field/field_ground_effect.c +++ b/src/field/field_ground_effect.c @@ -458,76 +458,52 @@ bool8 AreZCoordsCompatible(u8 a, u8 b) void GroundEffect_SpawnOnTallGrass(struct MapObject *mapObj, struct Sprite *sprite) { - u8 *ptr; - gFieldEffectArguments[0] = mapObj->coords2.x; gFieldEffectArguments[1] = mapObj->coords2.y; gFieldEffectArguments[2] = mapObj->elevation; gFieldEffectArguments[3] = 2; - gFieldEffectArguments[4] = (mapObj->localId << 8) | mapObj->mapNum; + gFieldEffectArguments[4] = mapObj->localId << 8 | mapObj->mapNum; gFieldEffectArguments[5] = mapObj->mapGroup; - - ptr = (u8 *)&gSaveBlock1; - gFieldEffectArguments[6] = ((u8)gSaveBlock1.location.mapNum << 8) - | (u8)gSaveBlock1.location.mapGroup; - + gFieldEffectArguments[6] = (u8)gSaveBlock1.location.mapNum << 8 | (u8)gSaveBlock1.location.mapGroup; gFieldEffectArguments[7] = 1; FieldEffectStart(FLDEFF_TALL_GRASS); } void sub_8063E94(struct MapObject *mapObj, struct Sprite *sprite) { - u8 *ptr; - gFieldEffectArguments[0] = mapObj->coords2.x; gFieldEffectArguments[1] = mapObj->coords2.y; gFieldEffectArguments[2] = mapObj->elevation; gFieldEffectArguments[3] = 2; - gFieldEffectArguments[4] = (mapObj->localId << 8) | mapObj->mapNum; + gFieldEffectArguments[4] = mapObj->localId << 8 | mapObj->mapNum; gFieldEffectArguments[5] = mapObj->mapGroup; - - ptr = (u8 *)&gSaveBlock1; - gFieldEffectArguments[6] = ((u8)gSaveBlock1.location.mapNum << 8) - | (u8)gSaveBlock1.location.mapGroup; - + gFieldEffectArguments[6] = (u8)gSaveBlock1.location.mapNum << 8 | (u8)gSaveBlock1.location.mapGroup; gFieldEffectArguments[7] = 0; FieldEffectStart(FLDEFF_TALL_GRASS); } void sub_8063EE0(struct MapObject *mapObj, struct Sprite *sprite) { - u8 *ptr; - gFieldEffectArguments[0] = mapObj->coords2.x; gFieldEffectArguments[1] = mapObj->coords2.y; gFieldEffectArguments[2] = mapObj->elevation; gFieldEffectArguments[3] = 2; - gFieldEffectArguments[4] = (mapObj->localId << 8) | mapObj->mapNum; + gFieldEffectArguments[4] = mapObj->localId << 8 | mapObj->mapNum; gFieldEffectArguments[5] = mapObj->mapGroup; - - ptr = (u8 *)&gSaveBlock1; - gFieldEffectArguments[6] = ((u8)gSaveBlock1.location.mapNum << 8) - | (u8)gSaveBlock1.location.mapGroup; - + gFieldEffectArguments[6] = (u8)gSaveBlock1.location.mapNum << 8 | (u8)gSaveBlock1.location.mapGroup; gFieldEffectArguments[7] = 1; FieldEffectStart(FLDEFF_LONG_GRASS); } void sub_8063F2C(struct MapObject *mapObj, struct Sprite *sprite) { - u8 *ptr; - gFieldEffectArguments[0] = mapObj->coords2.x; gFieldEffectArguments[1] = mapObj->coords2.y; gFieldEffectArguments[2] = mapObj->elevation; gFieldEffectArguments[3] = 2; gFieldEffectArguments[4] = (mapObj->localId << 8) | mapObj->mapNum; gFieldEffectArguments[5] = mapObj->mapGroup; - - ptr = (u8 *)&gSaveBlock1; - gFieldEffectArguments[6] = ((u8)gSaveBlock1.location.mapNum << 8) - | (u8)gSaveBlock1.location.mapGroup; - + gFieldEffectArguments[6] = (u8)gSaveBlock1.location.mapNum << 8 | (u8)gSaveBlock1.location.mapGroup; gFieldEffectArguments[7] = 0; FieldEffectStart(FLDEFF_LONG_GRASS); } diff --git a/src/field/field_map_obj.c b/src/field/field_map_obj.c index 094e70107..74ef3b7fe 100644 --- a/src/field/field_map_obj.c +++ b/src/field/field_map_obj.c @@ -2775,11 +2775,11 @@ void npc_by_local_id_and_map_set_field_1_bit_x20(u8 localId, u8 mapNum, u8 mapGr gMapObjects[mapObjectId].mapobj_bit_13 = d; } -void FieldObjectGetLocalIdAndMap(struct MapObject *mapObject, u8 *localId, u8 *mapNum, u8 *mapGroup) +void FieldObjectGetLocalIdAndMap(struct MapObject *mapObject, void *localId, void *mapNum, void *mapGroup) { - *localId = mapObject->localId; - *mapNum = mapObject->mapNum; - *mapGroup = mapObject->mapGroup; + *(u8 *)localId = mapObject->localId; + *(u8 *)mapNum = mapObject->mapNum; + *(u8 *)mapGroup = mapObject->mapGroup; } void sub_805BCC0(s16 x, s16 y) @@ -5187,7 +5187,7 @@ void FieldObjectCB_TreeDisguise(struct Sprite *sprite) mapObject = &gMapObjects[sprite->data0]; if (mapObject->mapobj_unk_21 == 0 || (mapObject->mapobj_unk_21 == 1 && sprite->data7 == 0)) { - FieldObjectGetLocalIdAndMap(mapObject, (u8 *)&gFieldEffectArguments[0], (u8 *)&gFieldEffectArguments[1], (u8 *)&gFieldEffectArguments[2]); + FieldObjectGetLocalIdAndMap(mapObject, &gFieldEffectArguments[0], &gFieldEffectArguments[1], &gFieldEffectArguments[2]); mapObject->mapobj_unk_1A = FieldEffectStart(FLDEFF_TREE_DISGUISE); mapObject->mapobj_unk_21 = 1; sprite->data7 ++; @@ -5207,7 +5207,7 @@ void FieldObjectCB_MountainDisguise(struct Sprite *sprite) mapObject = &gMapObjects[sprite->data0]; if (mapObject->mapobj_unk_21 == 0 || (mapObject->mapobj_unk_21 == 1 && sprite->data7 == 0)) { - FieldObjectGetLocalIdAndMap(mapObject, (u8 *)&gFieldEffectArguments[0], (u8 *)&gFieldEffectArguments[1], (u8 *)&gFieldEffectArguments[2]); + FieldObjectGetLocalIdAndMap(mapObject, &gFieldEffectArguments[0], &gFieldEffectArguments[1], &gFieldEffectArguments[2]); mapObject->mapobj_unk_1A = FieldEffectStart(FLDEFF_MOUNTAIN_DISGUISE); mapObject->mapobj_unk_21 = 1; sprite->data7 ++; @@ -7371,7 +7371,7 @@ bool8 sub_8062644(struct MapObject *mapObject, struct Sprite *sprite) bool8 do_exclamation_mark_bubble_1(struct MapObject *mapObject, struct Sprite *sprite) { - FieldObjectGetLocalIdAndMap(mapObject, (u8 *)&gFieldEffectArguments[0], (u8 *)&gFieldEffectArguments[1], (u8 *)&gFieldEffectArguments[2]); + FieldObjectGetLocalIdAndMap(mapObject, &gFieldEffectArguments[0], &gFieldEffectArguments[1], &gFieldEffectArguments[2]); FieldEffectStart(FLDEFF_EXCLAMATION_MARK_ICON_1); sprite->data2 = 1; return TRUE; @@ -7379,7 +7379,7 @@ bool8 do_exclamation_mark_bubble_1(struct MapObject *mapObject, struct Sprite *s bool8 do_exclamation_mark_bubble_2(struct MapObject *mapObject, struct Sprite *sprite) { - FieldObjectGetLocalIdAndMap(mapObject, (u8 *)&gFieldEffectArguments[0], (u8 *)&gFieldEffectArguments[1], (u8 *)&gFieldEffectArguments[2]); + FieldObjectGetLocalIdAndMap(mapObject, &gFieldEffectArguments[0], &gFieldEffectArguments[1], &gFieldEffectArguments[2]); FieldEffectStart(FLDEFF_EXCLAMATION_MARK_ICON_2); sprite->data2 = 1; return TRUE; @@ -7387,7 +7387,7 @@ bool8 do_exclamation_mark_bubble_2(struct MapObject *mapObject, struct Sprite *s bool8 do_heart_bubble(struct MapObject *mapObject, struct Sprite *sprite) { - FieldObjectGetLocalIdAndMap(mapObject, (u8 *)&gFieldEffectArguments[0], (u8 *)&gFieldEffectArguments[1], (u8 *)&gFieldEffectArguments[2]); + FieldObjectGetLocalIdAndMap(mapObject, &gFieldEffectArguments[0], &gFieldEffectArguments[1], &gFieldEffectArguments[2]); FieldEffectStart(FLDEFF_HEART_ICON); sprite->data2 = 1; return TRUE; diff --git a/src/field/field_map_obj_helpers.c b/src/field/field_map_obj_helpers.c index b453d3794..59e857aae 100644 --- a/src/field/field_map_obj_helpers.c +++ b/src/field/field_map_obj_helpers.c @@ -294,7 +294,7 @@ void sub_8064990(u8 a1, u8 dir) u32 oe_exec_and_other_stuff(u8 fieldEffectId, struct MapObject *mapObject) { - FieldObjectGetLocalIdAndMap(mapObject, (u8 *)&gFieldEffectArguments[0], (u8 *)&gFieldEffectArguments[1], (u8 *)&gFieldEffectArguments[2]); + FieldObjectGetLocalIdAndMap(mapObject, &gFieldEffectArguments[0], &gFieldEffectArguments[1], &gFieldEffectArguments[2]); return FieldEffectStart(fieldEffectId); } diff --git a/src/field/player_pc.c b/src/field/player_pc.c index 83e6dd221..d01829266 100644 --- a/src/field/player_pc.c +++ b/src/field/player_pc.c @@ -32,7 +32,7 @@ extern u8 sub_807D770(void); extern void sub_808B020(void); extern void sub_80F944C(void); -static EWRAM_DATA u8 *gPcItemMenuOptionOrder = NULL; +static EWRAM_DATA const u8 *gPcItemMenuOptionOrder = NULL; static u8 gPcItemMenuOptionsNum; @@ -211,14 +211,14 @@ void NewGameInitPCItems(void) void BedroomPC(void) { - gPcItemMenuOptionOrder = (u8 *)gBedroomPC_OptionOrder; + gPcItemMenuOptionOrder = gBedroomPC_OptionOrder; gPcItemMenuOptionsNum = 4; DisplayItemMessageOnField(CreateTask(TaskDummy, 0), gOtherText_WhatWillYouDo, InitPlayerPCMenu, 0); } void PlayerPC(void) { - gPcItemMenuOptionOrder = (u8 *)gPlayerPC_OptionOrder; + gPcItemMenuOptionOrder = gPlayerPC_OptionOrder; gPcItemMenuOptionsNum = 3; DisplayItemMessageOnField(CreateTask(TaskDummy, 0), gOtherText_WhatWillYouDo, InitPlayerPCMenu, 0); } @@ -1064,7 +1064,7 @@ static void Mailbox_DrawMailList(u8 taskId) // taskId is unused if(i != mailbox->count) { - StringCopy(gStringVar1, (u8 *)gSaveBlock1.mail[i + 6].playerName); + StringCopy(gStringVar1, gSaveBlock1.mail[i + 6].playerName); SanitizeNameString(gStringVar1); MenuPrint(gStringVar1, 0x15, yCoord + 2); } diff --git a/src/field/trainer_see.c b/src/field/trainer_see.c index 5a8ebbafc..85bd7ad0b 100644 --- a/src/field/trainer_see.c +++ b/src/field/trainer_see.c @@ -257,7 +257,7 @@ static bool8 sub_8084398(u8 taskId, struct Task *task, struct MapObject *trainer { u8 direction; - FieldObjectGetLocalIdAndMap(trainerObj, (u8 *)&gFieldEffectArguments[0], (u8 *)&gFieldEffectArguments[1], (u8 *)&gFieldEffectArguments[2]); + FieldObjectGetLocalIdAndMap(trainerObj, &gFieldEffectArguments[0], &gFieldEffectArguments[1], &gFieldEffectArguments[2]); FieldEffectStart(FLDEFF_EXCLAMATION_MARK_ICON_1); direction = GetFaceDirectionAnimId(trainerObj->mapobj_unk_18); FieldObjectSetSpecialAnim(trainerObj, direction); diff --git a/src/pokemon/pokemon_3.c b/src/pokemon/pokemon_3.c index e9fb30415..9c2cb4730 100644 --- a/src/pokemon/pokemon_3.c +++ b/src/pokemon/pokemon_3.c @@ -203,7 +203,7 @@ void sub_803F324(int stat) u8 *sub_803F378(u16 itemId) { int i; - u8 *itemEffect; + const u8 *itemEffect; if (itemId == ITEM_ENIGMA_BERRY) { @@ -218,7 +218,7 @@ u8 *sub_803F378(u16 itemId) } else { - itemEffect = (u8 *) gItemEffectTable[itemId - 13]; + itemEffect = gItemEffectTable[itemId - 13]; } gStringBank = gBankInMenu; -- cgit v1.2.3 From eb802f60a26d72e23c5e381bc06de2a7f3bfc7c0 Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Sat, 4 Nov 2017 22:03:17 -0400 Subject: add semicolons to BAD_MEMSET and BAD_MEMCPY --- src/battle/battle_2.c | 14 +++++++------- src/battle/battle_ai.c | 4 ++-- src/battle/battle_controller_linkopponent.c | 6 +++--- src/battle/battle_controller_linkpartner.c | 6 +++--- src/battle/battle_controller_opponent.c | 8 ++++---- src/battle/battle_controller_player.c | 8 ++++---- src/battle/battle_controller_wally.c | 4 ++-- 7 files changed, 25 insertions(+), 25 deletions(-) (limited to 'src') diff --git a/src/battle/battle_2.c b/src/battle/battle_2.c index 32ffc57d4..6404efcf1 100644 --- a/src/battle/battle_2.c +++ b/src/battle/battle_2.c @@ -1568,7 +1568,7 @@ void sub_8010874(void) { gStatuses3[i] = 0; - BAD_MEMSET(&gDisableStructs[i], 0, 0x1C, j, r4) + BAD_MEMSET(&gDisableStructs[i], 0, 0x1C, j, r4); gDisableStructs[i].isFirstTurn= 2; gUnknown_02024C70[i] = 0; gLastUsedMove[i] = 0; @@ -1584,14 +1584,14 @@ void sub_8010874(void) for (i = 0; i < 2; i++) { gSideAffecting[i] = 0; - BAD_MEMSET(&gSideTimer[i], 0, 12, j, r4) + BAD_MEMSET(&gSideTimer[i], 0, 12, j, r4); } gBankAttacker = 0; gBankTarget = 0; gBattleWeather = 0; - BAD_MEMSET(&gWishFutureKnock, 0, 0x2C, i, r4) + BAD_MEMSET(&gWishFutureKnock, 0, 0x2C, i, r4); gHitMarker = 0; if ((gBattleTypeFlags & BATTLE_TYPE_LINK) == 0 && gSaveBlock2.optionsBattleSceneOff == TRUE) @@ -1714,7 +1714,7 @@ void SwitchInClearStructs(void) gActionSelectionCursor[gActiveBank] = 0; gMoveSelectionCursor[gActiveBank] = 0; - BAD_MEMSET(&gDisableStructs[gActiveBank], 0, 0x1C, i, ptr) + BAD_MEMSET(&gDisableStructs[gActiveBank], 0, 0x1C, i, ptr); if (gBattleMoves[gCurrentMove].effect == EFFECT_BATON_PASS) { @@ -1769,7 +1769,7 @@ void UndoEffectsAfterFainting(void) gActionSelectionCursor[gActiveBank] = 0; gMoveSelectionCursor[gActiveBank] = 0; - BAD_MEMSET(&gDisableStructs[gActiveBank], 0, 0x1C, i, ptr) + BAD_MEMSET(&gDisableStructs[gActiveBank], 0, 0x1C, i, ptr); gProtectStructs[gActiveBank].protected = 0; gProtectStructs[gActiveBank].endured = 0; gProtectStructs[gActiveBank].onlyStruggle = 0; @@ -1862,13 +1862,13 @@ void sub_8011384(void) if ((gBattleTypeFlags & BATTLE_TYPE_SAFARI) && GetBankSide(gActiveBank) == 0) { - BAD_MEMSET(&gBattleMons[gActiveBank], 0, 0x58, i, ptr) + BAD_MEMSET(&gBattleMons[gActiveBank], 0, 0x58, i, ptr); } else { u8 r0; - BAD_MEMSET(&gBattleMons[gActiveBank], gBattleBufferB[gActiveBank][4 + i], 0x58, i, ptr) + BAD_MEMSET(&gBattleMons[gActiveBank], gBattleBufferB[gActiveBank][4 + i], 0x58, i, ptr); gBattleMons[gActiveBank].type1 = gBaseStats[gBattleMons[gActiveBank].species].type1; gBattleMons[gActiveBank].type2 = gBaseStats[gBattleMons[gActiveBank].species].type2; gBattleMons[gActiveBank].ability = GetAbilityBySpecies(gBattleMons[gActiveBank].species, gBattleMons[gActiveBank].altAbility); diff --git a/src/battle/battle_ai.c b/src/battle/battle_ai.c index 3a5fb3d0d..5cf0a7ca6 100644 --- a/src/battle/battle_ai.c +++ b/src/battle/battle_ai.c @@ -269,7 +269,7 @@ void BattleAI_HandleItemUseBeforeAISetup(void) s32 i; u8 *data; - BAD_MEMSET(UNK_2016A00_STRUCT, 0, sizeof(struct UnkBattleStruct1), i, data) + BAD_MEMSET(UNK_2016A00_STRUCT, 0, sizeof(struct UnkBattleStruct1), i, data); if ((gBattleTypeFlags & BATTLE_TYPE_TRAINER) && gTrainerBattleOpponent != 0x400 @@ -295,7 +295,7 @@ void BattleAI_SetupAIData(void) u8 *data; // clear AI data and set default move score to 100. strange that they didn't use memset here. - BAD_MEMSET(AI_THINKING_STRUCT, 0, sizeof(struct AI_ThinkingStruct), i, data) + BAD_MEMSET(AI_THINKING_STRUCT, 0, sizeof(struct AI_ThinkingStruct), i, data); for (i = 0; i < MAX_MON_MOVES; i++) AI_THINKING_STRUCT->score[i] = 100; diff --git a/src/battle/battle_controller_linkopponent.c b/src/battle/battle_controller_linkopponent.c index 70cd636bd..c51e1a7f2 100644 --- a/src/battle/battle_controller_linkopponent.c +++ b/src/battle/battle_controller_linkopponent.c @@ -638,7 +638,7 @@ u32 dp01_getattr_by_ch1_for_player_pokemon__(u8 a, u8 *buffer) StringCopy10(battlePokemon.nickname, nickname); GetMonData(&gEnemyParty[a], MON_DATA_OT_NAME, battlePokemon.otName); - BAD_MEMCPY(&battlePokemon, buffer, sizeof(battlePokemon), size, src) + BAD_MEMCPY(&battlePokemon, buffer, sizeof(battlePokemon), size, src); break; case 1: data16 = GetMonData(&gEnemyParty[a], MON_DATA_SPECIES); @@ -659,7 +659,7 @@ u32 dp01_getattr_by_ch1_for_player_pokemon__(u8 a, u8 *buffer) moveData.pp[size] = GetMonData(&gEnemyParty[a], MON_DATA_PP1 + size); } moveData.ppBonuses = GetMonData(&gEnemyParty[a], MON_DATA_PP_BONUSES); - BAD_MEMCPY(&moveData, buffer, sizeof(moveData), size, src) + BAD_MEMCPY(&moveData, buffer, sizeof(moveData), size, src); break; case 4: case 5: @@ -1143,7 +1143,7 @@ void LinkOpponentHandlecmd3(void) u8 i; BAD_MEMSET(&gEnemyParty[gBattlePartyID[gActiveBank]] + gBattleBufferA[gActiveBank][1], - gBattleBufferA[gActiveBank][3 + i], gBattleBufferA[gActiveBank][2], i, dst) + gBattleBufferA[gActiveBank][3 + i], gBattleBufferA[gActiveBank][2], i, dst); LinkOpponentBufferExecCompleted(); } diff --git a/src/battle/battle_controller_linkpartner.c b/src/battle/battle_controller_linkpartner.c index 718afa6bd..5500d5d0c 100644 --- a/src/battle/battle_controller_linkpartner.c +++ b/src/battle/battle_controller_linkpartner.c @@ -593,7 +593,7 @@ u32 dp01_getattr_by_ch1_for_player_pokemon(u8 a, u8 *buffer) GetMonData(&gPlayerParty[a], MON_DATA_NICKNAME, nickname); StringCopy10(battlePokemon.nickname, nickname); GetMonData(&gPlayerParty[a], MON_DATA_OT_NAME, battlePokemon.otName); - BAD_MEMCPY(&battlePokemon, buffer, sizeof(battlePokemon), size, src) + BAD_MEMCPY(&battlePokemon, buffer, sizeof(battlePokemon), size, src); break; case 1: data16 = GetMonData(&gPlayerParty[a], MON_DATA_SPECIES); @@ -614,7 +614,7 @@ u32 dp01_getattr_by_ch1_for_player_pokemon(u8 a, u8 *buffer) moveData.pp[size] = GetMonData(&gPlayerParty[a], MON_DATA_PP1 + size); } moveData.ppBonuses = GetMonData(&gPlayerParty[a], MON_DATA_PP_BONUSES); - BAD_MEMCPY(&moveData, buffer, sizeof(moveData), size, src) + BAD_MEMCPY(&moveData, buffer, sizeof(moveData), size, src); break; case 4: case 5: @@ -1100,7 +1100,7 @@ void LinkPartnerHandlecmd3(void) u8 i; BAD_MEMSET(&gPlayerParty[gBattlePartyID[gActiveBank]] + gBattleBufferA[gActiveBank][1], - gBattleBufferA[gActiveBank][3 + i], gBattleBufferA[gActiveBank][2], i, dst) + gBattleBufferA[gActiveBank][3 + i], gBattleBufferA[gActiveBank][2], i, dst); LinkPartnerBufferExecCompleted(); } diff --git a/src/battle/battle_controller_opponent.c b/src/battle/battle_controller_opponent.c index c36f5fd82..e2eed8308 100644 --- a/src/battle/battle_controller_opponent.c +++ b/src/battle/battle_controller_opponent.c @@ -601,7 +601,7 @@ u32 sub_8033598(u8 a, u8 *buffer) GetMonData(&gEnemyParty[a], MON_DATA_NICKNAME, nickname); StringCopy10(battlePokemon.nickname, nickname); GetMonData(&gEnemyParty[a], MON_DATA_OT_NAME, battlePokemon.otName); - BAD_MEMCPY(&battlePokemon, buffer, sizeof(battlePokemon), size, src) + BAD_MEMCPY(&battlePokemon, buffer, sizeof(battlePokemon), size, src); break; case 1: data16 = GetMonData(&gEnemyParty[a], MON_DATA_SPECIES); @@ -622,7 +622,7 @@ u32 sub_8033598(u8 a, u8 *buffer) moveData.pp[size] = GetMonData(&gEnemyParty[a], MON_DATA_PP1 + size); } moveData.ppBonuses = GetMonData(&gEnemyParty[a], MON_DATA_PP_BONUSES); - BAD_MEMCPY(&moveData, buffer, sizeof(moveData), size, src) + BAD_MEMCPY(&moveData, buffer, sizeof(moveData), size, src); break; case 4: case 5: @@ -865,7 +865,7 @@ void OpponentHandlecmd1(void) u8 *src = (u8 *)&gEnemyParty[gBattlePartyID[gActiveBank]] + gBattleBufferA[gActiveBank][1]; u8 *dst; - BAD_MEMSET(&buffer + gBattleBufferA[gActiveBank][1], src[i], gBattleBufferA[gActiveBank][2], i, dst) + BAD_MEMSET(&buffer + gBattleBufferA[gActiveBank][1], src[i], gBattleBufferA[gActiveBank][2], i, dst); Emitcmd29(1, gBattleBufferA[gActiveBank][2], dst); OpponentBufferExecCompleted(); } @@ -1114,7 +1114,7 @@ void OpponentHandlecmd3(void) u8 i; BAD_MEMSET(&gEnemyParty[gBattlePartyID[gActiveBank]] + gBattleBufferA[gActiveBank][1], gBattleBufferA[gActiveBank][3 + i], - gBattleBufferA[gActiveBank][2], i, dst) + gBattleBufferA[gActiveBank][2], i, dst); OpponentBufferExecCompleted(); } diff --git a/src/battle/battle_controller_player.c b/src/battle/battle_controller_player.c index 8f63cd1ee..214f15ed7 100644 --- a/src/battle/battle_controller_player.c +++ b/src/battle/battle_controller_player.c @@ -1773,7 +1773,7 @@ u32 dp01_getattr_by_ch1_for_player_pokemon_(u8 a, u8 *buffer) GetMonData(&gPlayerParty[a], MON_DATA_NICKNAME, nickname); StringCopy10(battlePokemon.nickname, nickname); GetMonData(&gPlayerParty[a], MON_DATA_OT_NAME, battlePokemon.otName); - BAD_MEMCPY(&battlePokemon, buffer, sizeof(battlePokemon), size, src) + BAD_MEMCPY(&battlePokemon, buffer, sizeof(battlePokemon), size, src); break; case 1: data16 = GetMonData(&gPlayerParty[a], MON_DATA_SPECIES); @@ -1794,7 +1794,7 @@ u32 dp01_getattr_by_ch1_for_player_pokemon_(u8 a, u8 *buffer) moveData.pp[size] = GetMonData(&gPlayerParty[a], MON_DATA_PP1 + size); } moveData.ppBonuses = GetMonData(&gPlayerParty[a], MON_DATA_PP_BONUSES); - BAD_MEMCPY(&moveData, buffer, sizeof(moveData), size, src) + BAD_MEMCPY(&moveData, buffer, sizeof(moveData), size, src); break; case 4: case 5: @@ -2037,7 +2037,7 @@ void PlayerHandlecmd1(void) u8 *src = (u8 *)&gPlayerParty[gBattlePartyID[gActiveBank]] + gBattleBufferA[gActiveBank][1]; u8 *dst; - BAD_MEMSET(&battleMon + gBattleBufferA[gActiveBank][1], src[i], gBattleBufferA[gActiveBank][2], i, dst) + BAD_MEMSET(&battleMon + gBattleBufferA[gActiveBank][1], src[i], gBattleBufferA[gActiveBank][2], i, dst); Emitcmd29(1, gBattleBufferA[gActiveBank][2], dst); PlayerBufferExecCompleted(); } @@ -2288,7 +2288,7 @@ void PlayerHandlecmd3(void) u8 *dst; BAD_MEMSET(&gPlayerParty[gBattlePartyID[gActiveBank]] + gBattleBufferA[gActiveBank][1], gBattleBufferA[gActiveBank][3 + i], - gBattleBufferA[gActiveBank][2], i, dst) + gBattleBufferA[gActiveBank][2], i, dst); PlayerBufferExecCompleted(); } diff --git a/src/battle/battle_controller_wally.c b/src/battle/battle_controller_wally.c index eefdc5e50..7f41d5b52 100644 --- a/src/battle/battle_controller_wally.c +++ b/src/battle/battle_controller_wally.c @@ -569,7 +569,7 @@ u32 sub_8137A84(u8 a, u8 *buffer) GetMonData(&gPlayerParty[a], MON_DATA_NICKNAME, nickname); StringCopy10(battlePokemon.nickname, nickname); GetMonData(&gPlayerParty[a], MON_DATA_OT_NAME, battlePokemon.otName); - BAD_MEMCPY(&battlePokemon, buffer, sizeof(battlePokemon), size, src) + BAD_MEMCPY(&battlePokemon, buffer, sizeof(battlePokemon), size, src); break; case 1: data16 = GetMonData(&gPlayerParty[a], MON_DATA_SPECIES); @@ -590,7 +590,7 @@ u32 sub_8137A84(u8 a, u8 *buffer) moveData.pp[size] = GetMonData(&gPlayerParty[a], MON_DATA_PP1 + size); } moveData.ppBonuses = GetMonData(&gPlayerParty[a], MON_DATA_PP_BONUSES); - BAD_MEMCPY(&moveData, buffer, sizeof(moveData), size, src) + BAD_MEMCPY(&moveData, buffer, sizeof(moveData), size, src); break; case 4: case 5: -- cgit v1.2.3 From b4c6e0560a7b1310cc08b93ea04935d4fbb7c3de Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Sat, 4 Nov 2017 22:42:28 -0400 Subject: BAD_MEM macros to MEM_ALT --- src/battle/battle_2.c | 16 ++++++++-------- src/battle/battle_4.c | 11 ++++++----- src/battle/battle_ai.c | 4 ++-- src/battle/battle_controller_linkopponent.c | 6 +++--- src/battle/battle_controller_linkpartner.c | 6 +++--- src/battle/battle_controller_opponent.c | 10 +++++----- src/battle/battle_controller_player.c | 10 +++++----- src/battle/battle_controller_wally.c | 4 ++-- 8 files changed, 34 insertions(+), 33 deletions(-) (limited to 'src') diff --git a/src/battle/battle_2.c b/src/battle/battle_2.c index 6404efcf1..1aec075db 100644 --- a/src/battle/battle_2.c +++ b/src/battle/battle_2.c @@ -1390,7 +1390,7 @@ void sub_8010494(struct Sprite *sprite) } else { - // this should use a BAD_MEMSET, but *(dst++) wont match with it. + // this should use a MEMSET_ALT, but *(dst++) wont match with it. dst = (u8 *)gUnknown_081FAF4C[GetBankIdentity(sprite->data0)] + (gBattleMonForms[sprite->data0] << 11) + (sprite->data3 << 8); for (i = 0; i < 0x100; i++) *(dst++) = 0; @@ -1568,7 +1568,7 @@ void sub_8010874(void) { gStatuses3[i] = 0; - BAD_MEMSET(&gDisableStructs[i], 0, 0x1C, j, r4); + MEMSET_ALT(&gDisableStructs[i], 0, 0x1C, j, r4); gDisableStructs[i].isFirstTurn= 2; gUnknown_02024C70[i] = 0; gLastUsedMove[i] = 0; @@ -1584,14 +1584,14 @@ void sub_8010874(void) for (i = 0; i < 2; i++) { gSideAffecting[i] = 0; - BAD_MEMSET(&gSideTimer[i], 0, 12, j, r4); + MEMSET_ALT(&gSideTimer[i], 0, 12, j, r4); } gBankAttacker = 0; gBankTarget = 0; gBattleWeather = 0; - BAD_MEMSET(&gWishFutureKnock, 0, 0x2C, i, r4); + MEMSET_ALT(&gWishFutureKnock, 0, 0x2C, i, r4); gHitMarker = 0; if ((gBattleTypeFlags & BATTLE_TYPE_LINK) == 0 && gSaveBlock2.optionsBattleSceneOff == TRUE) @@ -1714,7 +1714,7 @@ void SwitchInClearStructs(void) gActionSelectionCursor[gActiveBank] = 0; gMoveSelectionCursor[gActiveBank] = 0; - BAD_MEMSET(&gDisableStructs[gActiveBank], 0, 0x1C, i, ptr); + MEMSET_ALT(&gDisableStructs[gActiveBank], 0, 0x1C, i, ptr); if (gBattleMoves[gCurrentMove].effect == EFFECT_BATON_PASS) { @@ -1769,7 +1769,7 @@ void UndoEffectsAfterFainting(void) gActionSelectionCursor[gActiveBank] = 0; gMoveSelectionCursor[gActiveBank] = 0; - BAD_MEMSET(&gDisableStructs[gActiveBank], 0, 0x1C, i, ptr); + MEMSET_ALT(&gDisableStructs[gActiveBank], 0, 0x1C, i, ptr); gProtectStructs[gActiveBank].protected = 0; gProtectStructs[gActiveBank].endured = 0; gProtectStructs[gActiveBank].onlyStruggle = 0; @@ -1862,13 +1862,13 @@ void sub_8011384(void) if ((gBattleTypeFlags & BATTLE_TYPE_SAFARI) && GetBankSide(gActiveBank) == 0) { - BAD_MEMSET(&gBattleMons[gActiveBank], 0, 0x58, i, ptr); + MEMSET_ALT(&gBattleMons[gActiveBank], 0, 0x58, i, ptr); } else { u8 r0; - BAD_MEMSET(&gBattleMons[gActiveBank], gBattleBufferB[gActiveBank][4 + i], 0x58, i, ptr); + MEMSET_ALT(&gBattleMons[gActiveBank], gBattleBufferB[gActiveBank][4 + i], 0x58, i, ptr); gBattleMons[gActiveBank].type1 = gBaseStats[gBattleMons[gActiveBank].species].type1; gBattleMons[gActiveBank].type2 = gBaseStats[gBattleMons[gActiveBank].species].type2; gBattleMons[gActiveBank].ability = GetAbilityBySpecies(gBattleMons[gActiveBank].species, gBattleMons[gActiveBank].altAbility); diff --git a/src/battle/battle_4.c b/src/battle/battle_4.c index 9a44a1242..65e0458a2 100644 --- a/src/battle/battle_4.c +++ b/src/battle/battle_4.c @@ -7056,6 +7056,7 @@ static void atk2A_jumpifhalfword(void) } } +// Strange that there's an instance of T1_READ_32 in what seems to be a T2 function. see global.h for the distinction. static void atk2B_jumpifword(void) { u8 caseID = T2_READ_8(gBattlescriptCurrInstr + 1); @@ -7308,9 +7309,9 @@ static void atk41_call(void) static void atk42_jumpiftype2(void) //u8 bank, u8 type, *ptr { - u8 bank = GetBattleBank(T2_READ_8(gBattlescriptCurrInstr + 1)); + u8 bank = GetBattleBank(T1_READ_8(gBattlescriptCurrInstr + 1)); - if (T2_READ_8(gBattlescriptCurrInstr + 2) == gBattleMons[bank].type1 || T2_READ_8(gBattlescriptCurrInstr + 2) == gBattleMons[bank].type2) + if (T1_READ_8(gBattlescriptCurrInstr + 2) == gBattleMons[bank].type1 || T1_READ_8(gBattlescriptCurrInstr + 2) == gBattleMons[bank].type2) gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); else gBattlescriptCurrInstr += 7; @@ -11514,7 +11515,7 @@ static void atk65_status2animation(void) if (gBattleExecBuffer == 0) { u32 possible_to_anim; - gActiveBank = GetBattleBank(T2_READ_8(gBattlescriptCurrInstr + 1)); + gActiveBank = GetBattleBank(T1_READ_8(gBattlescriptCurrInstr + 1)); possible_to_anim = T1_READ_32(gBattlescriptCurrInstr + 2); if (!(gStatuses3[gActiveBank] & STATUS3_SEMI_INVULNERABLE) && gDisableStructs[gActiveBank].substituteHP == 0 && !(gHitMarker & HITMARKER_NO_ANIMATIONS)) { @@ -11530,11 +11531,11 @@ static void atk66_chosenstatusanimation(void) if (gBattleExecBuffer == 0) { u32 status; - gActiveBank = GetBattleBank(T2_READ_8(gBattlescriptCurrInstr + 1)); + gActiveBank = GetBattleBank(T1_READ_8(gBattlescriptCurrInstr + 1)); status = T1_READ_32(gBattlescriptCurrInstr + 3); if (!(gStatuses3[gActiveBank] & STATUS3_SEMI_INVULNERABLE) && gDisableStructs[gActiveBank].substituteHP == 0 && !(gHitMarker & HITMARKER_NO_ANIMATIONS)) { - EmitStatusAnimation(0, T2_READ_8(gBattlescriptCurrInstr + 2), status); + EmitStatusAnimation(0, T1_READ_8(gBattlescriptCurrInstr + 2), status); MarkBufferBankForExecution(gActiveBank); } gBattlescriptCurrInstr += 7; diff --git a/src/battle/battle_ai.c b/src/battle/battle_ai.c index 5cf0a7ca6..9c6d2bec4 100644 --- a/src/battle/battle_ai.c +++ b/src/battle/battle_ai.c @@ -269,7 +269,7 @@ void BattleAI_HandleItemUseBeforeAISetup(void) s32 i; u8 *data; - BAD_MEMSET(UNK_2016A00_STRUCT, 0, sizeof(struct UnkBattleStruct1), i, data); + MEMSET_ALT(UNK_2016A00_STRUCT, 0, sizeof(struct UnkBattleStruct1), i, data); if ((gBattleTypeFlags & BATTLE_TYPE_TRAINER) && gTrainerBattleOpponent != 0x400 @@ -295,7 +295,7 @@ void BattleAI_SetupAIData(void) u8 *data; // clear AI data and set default move score to 100. strange that they didn't use memset here. - BAD_MEMSET(AI_THINKING_STRUCT, 0, sizeof(struct AI_ThinkingStruct), i, data); + MEMSET_ALT(AI_THINKING_STRUCT, 0, sizeof(struct AI_ThinkingStruct), i, data); for (i = 0; i < MAX_MON_MOVES; i++) AI_THINKING_STRUCT->score[i] = 100; diff --git a/src/battle/battle_controller_linkopponent.c b/src/battle/battle_controller_linkopponent.c index c51e1a7f2..ff4df81e4 100644 --- a/src/battle/battle_controller_linkopponent.c +++ b/src/battle/battle_controller_linkopponent.c @@ -638,7 +638,7 @@ u32 dp01_getattr_by_ch1_for_player_pokemon__(u8 a, u8 *buffer) StringCopy10(battlePokemon.nickname, nickname); GetMonData(&gEnemyParty[a], MON_DATA_OT_NAME, battlePokemon.otName); - BAD_MEMCPY(&battlePokemon, buffer, sizeof(battlePokemon), size, src); + MEMCPY_ALT(&battlePokemon, buffer, sizeof(battlePokemon), size, src); break; case 1: data16 = GetMonData(&gEnemyParty[a], MON_DATA_SPECIES); @@ -659,7 +659,7 @@ u32 dp01_getattr_by_ch1_for_player_pokemon__(u8 a, u8 *buffer) moveData.pp[size] = GetMonData(&gEnemyParty[a], MON_DATA_PP1 + size); } moveData.ppBonuses = GetMonData(&gEnemyParty[a], MON_DATA_PP_BONUSES); - BAD_MEMCPY(&moveData, buffer, sizeof(moveData), size, src); + MEMCPY_ALT(&moveData, buffer, sizeof(moveData), size, src); break; case 4: case 5: @@ -1142,7 +1142,7 @@ void LinkOpponentHandlecmd3(void) u8 *dst; u8 i; - BAD_MEMSET(&gEnemyParty[gBattlePartyID[gActiveBank]] + gBattleBufferA[gActiveBank][1], + MEMSET_ALT(&gEnemyParty[gBattlePartyID[gActiveBank]] + gBattleBufferA[gActiveBank][1], gBattleBufferA[gActiveBank][3 + i], gBattleBufferA[gActiveBank][2], i, dst); LinkOpponentBufferExecCompleted(); diff --git a/src/battle/battle_controller_linkpartner.c b/src/battle/battle_controller_linkpartner.c index 5500d5d0c..a874190aa 100644 --- a/src/battle/battle_controller_linkpartner.c +++ b/src/battle/battle_controller_linkpartner.c @@ -593,7 +593,7 @@ u32 dp01_getattr_by_ch1_for_player_pokemon(u8 a, u8 *buffer) GetMonData(&gPlayerParty[a], MON_DATA_NICKNAME, nickname); StringCopy10(battlePokemon.nickname, nickname); GetMonData(&gPlayerParty[a], MON_DATA_OT_NAME, battlePokemon.otName); - BAD_MEMCPY(&battlePokemon, buffer, sizeof(battlePokemon), size, src); + MEMCPY_ALT(&battlePokemon, buffer, sizeof(battlePokemon), size, src); break; case 1: data16 = GetMonData(&gPlayerParty[a], MON_DATA_SPECIES); @@ -614,7 +614,7 @@ u32 dp01_getattr_by_ch1_for_player_pokemon(u8 a, u8 *buffer) moveData.pp[size] = GetMonData(&gPlayerParty[a], MON_DATA_PP1 + size); } moveData.ppBonuses = GetMonData(&gPlayerParty[a], MON_DATA_PP_BONUSES); - BAD_MEMCPY(&moveData, buffer, sizeof(moveData), size, src); + MEMCPY_ALT(&moveData, buffer, sizeof(moveData), size, src); break; case 4: case 5: @@ -1099,7 +1099,7 @@ void LinkPartnerHandlecmd3(void) u8 *dst; u8 i; - BAD_MEMSET(&gPlayerParty[gBattlePartyID[gActiveBank]] + gBattleBufferA[gActiveBank][1], + MEMSET_ALT(&gPlayerParty[gBattlePartyID[gActiveBank]] + gBattleBufferA[gActiveBank][1], gBattleBufferA[gActiveBank][3 + i], gBattleBufferA[gActiveBank][2], i, dst); LinkPartnerBufferExecCompleted(); diff --git a/src/battle/battle_controller_opponent.c b/src/battle/battle_controller_opponent.c index e2eed8308..392e80f08 100644 --- a/src/battle/battle_controller_opponent.c +++ b/src/battle/battle_controller_opponent.c @@ -601,7 +601,7 @@ u32 sub_8033598(u8 a, u8 *buffer) GetMonData(&gEnemyParty[a], MON_DATA_NICKNAME, nickname); StringCopy10(battlePokemon.nickname, nickname); GetMonData(&gEnemyParty[a], MON_DATA_OT_NAME, battlePokemon.otName); - BAD_MEMCPY(&battlePokemon, buffer, sizeof(battlePokemon), size, src); + MEMCPY_ALT(&battlePokemon, buffer, sizeof(battlePokemon), size, src); break; case 1: data16 = GetMonData(&gEnemyParty[a], MON_DATA_SPECIES); @@ -622,7 +622,7 @@ u32 sub_8033598(u8 a, u8 *buffer) moveData.pp[size] = GetMonData(&gEnemyParty[a], MON_DATA_PP1 + size); } moveData.ppBonuses = GetMonData(&gEnemyParty[a], MON_DATA_PP_BONUSES); - BAD_MEMCPY(&moveData, buffer, sizeof(moveData), size, src); + MEMCPY_ALT(&moveData, buffer, sizeof(moveData), size, src); break; case 4: case 5: @@ -861,11 +861,11 @@ void OpponentHandlecmd1(void) { struct BattlePokemon buffer; u8 i; - // TODO: Maybe fix this. Integrating this into BAD_MEMSET is too hard. + // TODO: Maybe fix this. Integrating this into MEMSET_ALT is too hard. u8 *src = (u8 *)&gEnemyParty[gBattlePartyID[gActiveBank]] + gBattleBufferA[gActiveBank][1]; u8 *dst; - BAD_MEMSET(&buffer + gBattleBufferA[gActiveBank][1], src[i], gBattleBufferA[gActiveBank][2], i, dst); + MEMSET_ALT(&buffer + gBattleBufferA[gActiveBank][1], src[i], gBattleBufferA[gActiveBank][2], i, dst); Emitcmd29(1, gBattleBufferA[gActiveBank][2], dst); OpponentBufferExecCompleted(); } @@ -1113,7 +1113,7 @@ void OpponentHandlecmd3(void) u8 *dst; u8 i; - BAD_MEMSET(&gEnemyParty[gBattlePartyID[gActiveBank]] + gBattleBufferA[gActiveBank][1], gBattleBufferA[gActiveBank][3 + i], + MEMSET_ALT(&gEnemyParty[gBattlePartyID[gActiveBank]] + gBattleBufferA[gActiveBank][1], gBattleBufferA[gActiveBank][3 + i], gBattleBufferA[gActiveBank][2], i, dst); OpponentBufferExecCompleted(); } diff --git a/src/battle/battle_controller_player.c b/src/battle/battle_controller_player.c index 214f15ed7..136c31841 100644 --- a/src/battle/battle_controller_player.c +++ b/src/battle/battle_controller_player.c @@ -1773,7 +1773,7 @@ u32 dp01_getattr_by_ch1_for_player_pokemon_(u8 a, u8 *buffer) GetMonData(&gPlayerParty[a], MON_DATA_NICKNAME, nickname); StringCopy10(battlePokemon.nickname, nickname); GetMonData(&gPlayerParty[a], MON_DATA_OT_NAME, battlePokemon.otName); - BAD_MEMCPY(&battlePokemon, buffer, sizeof(battlePokemon), size, src); + MEMCPY_ALT(&battlePokemon, buffer, sizeof(battlePokemon), size, src); break; case 1: data16 = GetMonData(&gPlayerParty[a], MON_DATA_SPECIES); @@ -1794,7 +1794,7 @@ u32 dp01_getattr_by_ch1_for_player_pokemon_(u8 a, u8 *buffer) moveData.pp[size] = GetMonData(&gPlayerParty[a], MON_DATA_PP1 + size); } moveData.ppBonuses = GetMonData(&gPlayerParty[a], MON_DATA_PP_BONUSES); - BAD_MEMCPY(&moveData, buffer, sizeof(moveData), size, src); + MEMCPY_ALT(&moveData, buffer, sizeof(moveData), size, src); break; case 4: case 5: @@ -2033,11 +2033,11 @@ void PlayerHandlecmd1(void) { struct BattlePokemon battleMon; u8 i; - // TODO: Maybe fix this. Integrating this into BAD_MEMSET is too hard. + // TODO: Maybe fix this. Integrating this into MEMSET_ALT is too hard. u8 *src = (u8 *)&gPlayerParty[gBattlePartyID[gActiveBank]] + gBattleBufferA[gActiveBank][1]; u8 *dst; - BAD_MEMSET(&battleMon + gBattleBufferA[gActiveBank][1], src[i], gBattleBufferA[gActiveBank][2], i, dst); + MEMSET_ALT(&battleMon + gBattleBufferA[gActiveBank][1], src[i], gBattleBufferA[gActiveBank][2], i, dst); Emitcmd29(1, gBattleBufferA[gActiveBank][2], dst); PlayerBufferExecCompleted(); } @@ -2287,7 +2287,7 @@ void PlayerHandlecmd3(void) u8 i; u8 *dst; - BAD_MEMSET(&gPlayerParty[gBattlePartyID[gActiveBank]] + gBattleBufferA[gActiveBank][1], gBattleBufferA[gActiveBank][3 + i], + MEMSET_ALT(&gPlayerParty[gBattlePartyID[gActiveBank]] + gBattleBufferA[gActiveBank][1], gBattleBufferA[gActiveBank][3 + i], gBattleBufferA[gActiveBank][2], i, dst); PlayerBufferExecCompleted(); } diff --git a/src/battle/battle_controller_wally.c b/src/battle/battle_controller_wally.c index 7f41d5b52..9d70ca557 100644 --- a/src/battle/battle_controller_wally.c +++ b/src/battle/battle_controller_wally.c @@ -569,7 +569,7 @@ u32 sub_8137A84(u8 a, u8 *buffer) GetMonData(&gPlayerParty[a], MON_DATA_NICKNAME, nickname); StringCopy10(battlePokemon.nickname, nickname); GetMonData(&gPlayerParty[a], MON_DATA_OT_NAME, battlePokemon.otName); - BAD_MEMCPY(&battlePokemon, buffer, sizeof(battlePokemon), size, src); + MEMCPY_ALT(&battlePokemon, buffer, sizeof(battlePokemon), size, src); break; case 1: data16 = GetMonData(&gPlayerParty[a], MON_DATA_SPECIES); @@ -590,7 +590,7 @@ u32 sub_8137A84(u8 a, u8 *buffer) moveData.pp[size] = GetMonData(&gPlayerParty[a], MON_DATA_PP1 + size); } moveData.ppBonuses = GetMonData(&gPlayerParty[a], MON_DATA_PP_BONUSES); - BAD_MEMCPY(&moveData, buffer, sizeof(moveData), size, src); + MEMCPY_ALT(&moveData, buffer, sizeof(moveData), size, src); break; case 4: case 5: -- cgit v1.2.3 From 4cf701c5871a17f0bc580019e8d294bc1c84ebf3 Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Sun, 5 Nov 2017 01:34:52 -0400 Subject: move ewram defines to ewram.h. --- src/battle/battle_2.c | 43 +------ src/battle/battle_3.c | 9 +- src/battle/battle_4.c | 15 +-- src/battle/battle_7.c | 3 +- src/battle/battle_anim.c | 1 - src/battle/battle_interface.c | 7 +- src/battle/battle_party_menu.c | 4 +- src/battle/battle_transition.c | 3 +- src/battle/reshow_battle_screen.c | 4 +- src/debug/matsuda_debug_menu.c | 2 +- src/engine/link.c | 3 +- src/engine/naming_screen.c | 5 +- src/engine/record_mixing.c | 5 +- src/engine/trade.c | 3 - src/engine/trainer_card.c | 230 +++++++++++++++++------------------ src/field/battle_tower.c | 4 +- src/field/dewford_trend.c | 2 +- src/field/field_region_map.c | 4 +- src/field/field_tasks.c | 4 - src/field/fldeff_softboiled.c | 7 +- src/field/item_menu.c | 8 +- src/field/party_menu.c | 6 +- src/field/pokeblock.c | 4 +- src/field/region_map.c | 51 ++++---- src/field/shop.c | 7 +- src/field/tv.c | 4 +- src/pokemon/mail.c | 112 +++++++++-------- src/pokemon/pokeblock_feed.c | 15 +-- src/pokemon/pokemon_storage_system.c | 8 +- src/rom3.c | 50 ++++---- src/scene/credits.c | 9 +- src/scene/evolution_scene.c | 3 +- src/script_pokemon_util_80F99CC.c | 2 +- 33 files changed, 255 insertions(+), 382 deletions(-) (limited to 'src') diff --git a/src/battle/battle_2.c b/src/battle/battle_2.c index 1aec075db..5a37a6169 100644 --- a/src/battle/battle_2.c +++ b/src/battle/battle_2.c @@ -29,6 +29,7 @@ #include "items.h" #include "hold_effects.h" #include "battle_move_effects.h" +#include "ewram.h" struct UnknownStruct6 { @@ -62,48 +63,6 @@ struct UnknownStruct12 extern const u16 gUnknown_08D004E0[]; extern const struct MonCoords gCastformFrontSpriteCoords[]; -extern u8 ewram[]; -#define ewram0 (*(struct UnknownStruct7 *)(ewram + 0x0)) -#define ewram4 (*(struct UnknownStruct8 *)(ewram + 0x4)) -#define ewram16000 (ewram[0x16000]) -#define ewram16001 (ewram[0x16001]) -#define ewram16002 (ewram[0x16002]) -#define ewram16003 (ewram[0x16003]) -#define ewram1600C (ewram[0x1600C]) -#define ewram1600E (ewram[0x1600E]) -#define ewram1601B (ewram[0x1601B]) -#define ewram16020 ((u8 *)(ewram + 0x16020)) -#define ewram16056 (ewram[0x16056]) -#define ewram16058 (ewram[0x16058]) -#define ewram16059 (ewram[0x16059]) -#define ewram16078 (ewram[0x16078]) -#define ewram16084 (ewram[0x16084]) -#define ewram16086 (ewram[0x16086]) -#define ewram16087 (ewram[0x16087]) -#define ewram16088 (ewram[0x16088]) -#define ewram16089 (ewram[0x16089]) -#define ewram160A1 (ewram[0x160A1]) -#define ewram160A6 (ewram[0x160A6]) -#define ewram160AC ((u8 *)(ewram + 0x160AC)) -#define ewram160BC ((u16 *)(ewram + 0x160BC)) // hp -#define ewram160C8 (ewram[0x160C8]) -#define ewram160C9 (ewram[0x160C9]) -#define ewram160CB (ewram[0x160CB]) -#define ewram160CC ((u8 *)(ewram + 0x160CC)) -#define ewram160E6 (ewram[0x160E6]) -#define ewram160E8 ((u8 *)(ewram + 0x160E8)) -#define ewram160F0 ((u8 *)(ewram + 0x160F0)) -#define ewram160F9 (ewram[0x160F9]) -#define ewram16100 ((u8 *)(ewram + 0x16100)) -#define ewram16108 ((u8 *)(ewram + 0x16108)) -#define ewram16110 (ewram[0x16110]) -#define ewram16111 (ewram[0x16111]) -#define ewram16113 (ewram[0x16113]) -#define ewram17100 ((u32 *)(ewram + 0x17100)) -#define ewram17130 (ewram[0x17130]) -#define ewram17160 (ewram[0x17160]) -#define ewram1D000 ((struct Pokemon *)(ewram + 0x1D000)) - extern struct UnknownPokemonStruct2 gUnknown_02023A00[]; extern u8 gBattleBufferB[][0x200]; extern u8 gActiveBank; diff --git a/src/battle/battle_3.c b/src/battle/battle_3.c index 346ca6d79..e8819781d 100644 --- a/src/battle/battle_3.c +++ b/src/battle/battle_3.c @@ -13,6 +13,7 @@ #include "battle_move_effects.h" #include "string_util.h" #include "flags.h" +#include "ewram.h" extern u8* gBattlescriptCurrInstr; extern u8 gActiveBank; @@ -198,8 +199,6 @@ extern u8 gUnknown_081D996F[]; //disobedient, uses a random move extern u8 gUnknown_081D9989[]; //disobedient, went to sleep extern u8 gUnknown_081D99A0[]; //disobedient, hits itself -#define CHOICED_MOVE(bank)(((u16*)(&ewram[bank * 2 + 0x160e8]))) - //array entries for battle communication #define MOVE_EFFECT_BYTE 0x3 #define MULTISTRING_CHOOSER 0x5 @@ -1439,8 +1438,6 @@ struct Struct2017100 u32 arr[4]; }; -#define ewram17100 (*(struct Struct2017100 *)(ewram + 0x17100)) - u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) { u8 effect = 0; @@ -1726,14 +1723,14 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) case ABILITY_FLASH_FIRE: if (moveType == TYPE_FIRE && !(gBattleMons[bank].status1 & STATUS_FREEZE)) { - if (!(ewram17100.arr[bank] & 1)) + if (!(ewram17100_2.arr[bank] & 1)) { gBattleCommunication[MULTISTRING_CHOOSER] = 0; if (gProtectStructs[gBankAttacker].notFirstStrike) gBattlescriptCurrInstr = BattleScript_FlashFireBoost; else gBattlescriptCurrInstr = BattleScript_FlashFireBoost_PPLoss; - ewram17100.arr[bank] |= 1; + ewram17100_2.arr[bank] |= 1; effect = 2; } else diff --git a/src/battle/battle_4.c b/src/battle/battle_4.c index 65e0458a2..3fee71a5f 100644 --- a/src/battle/battle_4.c +++ b/src/battle/battle_4.c @@ -259,8 +259,6 @@ extern u8 gUnknown_081D9468[]; #define sBYTE2_32(value)(( (u8) (((s32)(value) & (0x00FF0000)) >> 0x10))) #define sBYTE3_32(value)(( (u8) (((s32)(value) & (0xFF000000)) >> 0x18))) -#define USED_HELD_ITEM(bank)((((u16*)(&unk_2000000[bank * 2 + 0x160cc])))) - #define RecordAbilitySetField6(ability, fieldValue) \ (gLastUsedAbility = ability, gBattleCommunication[6] = fieldValue, RecordAbilityBattle(gBankTarget, ability)) @@ -2640,7 +2638,7 @@ void SetMoveEffect(bool8 primary, u8 certainArg) {gBattlescriptCurrInstr++; return;} gLastUsedItem = gBattleMons[gBankTarget].item; - unk_2000000[gBankAttacker * 2 + 0x160cc] = gLastUsedItem; + ewram[gBankAttacker * 2 + 0x160cc] = gLastUsedItem; gBattleMons[gBankTarget].item = 0; gActiveBank = gBankAttacker; @@ -5123,7 +5121,7 @@ static void atk1E_jumpifability(void) gLastUsedAbility = ability; gBattlescriptCurrInstr = jump_loc; RecordAbilityBattle(bank -1, gLastUsedAbility); - unk_2000000[0x160f8] = bank - 1; + ewram[0x160f8] = bank - 1; } else gBattlescriptCurrInstr += 7; @@ -5136,7 +5134,7 @@ static void atk1E_jumpifability(void) gLastUsedAbility = ability; gBattlescriptCurrInstr = jump_loc; RecordAbilityBattle(bank - 1, gLastUsedAbility); - unk_2000000[0x160f8] = bank - 1; + ewram[0x160f8] = bank - 1; } else gBattlescriptCurrInstr += 7; @@ -5149,7 +5147,7 @@ static void atk1E_jumpifability(void) gLastUsedAbility = ability; gBattlescriptCurrInstr = jump_loc; RecordAbilityBattle(bank, gLastUsedAbility); - unk_2000000[0x160f8] = bank; + ewram[0x160f8] = bank; } else gBattlescriptCurrInstr += 7; @@ -7327,7 +7325,7 @@ static void atk43_jumpifabilitypresent(void) static void atk44(void) { - unk_2000000[gBankAttacker + 0x16060] = 1; + ewram[gBankAttacker + 0x16060] = 1; } #ifdef NONMATCHING @@ -9522,7 +9520,7 @@ static void atk4C_copy_poke_data(void) gActiveBank = GetBattleBank(T2_READ_8(gBattlescriptCurrInstr + 1)); - gBattlePartyID[gActiveBank] = unk_2000000[0x16068 + gActiveBank]; + gBattlePartyID[gActiveBank] = ewram[0x16068 + gActiveBank]; EmitGetAttributes(0, 0, gBitTable[gBattlePartyID[gActiveBank]]); MarkBufferBankForExecution(gActiveBank); @@ -11640,7 +11638,6 @@ static void atk69_dmg_adjustment2(void) //literally a copy of atk07 except there void atk6A_removeitem(void) { gActiveBank = GetBattleBank(T2_READ_8(gBattlescriptCurrInstr + 1)); - #define USED_HELD_ITEMS(bank) (*(u16 *)&ewram[0x160CC + 2 * (bank)]) USED_HELD_ITEMS(gActiveBank) = gBattleMons[gActiveBank].item; gBattleMons[gActiveBank].item = 0; diff --git a/src/battle/battle_7.c b/src/battle/battle_7.c index 1d68386aa..6c0a4489c 100644 --- a/src/battle/battle_7.c +++ b/src/battle/battle_7.c @@ -18,6 +18,7 @@ #include "task.h" #include "text.h" #include "gba/m4a_internal.h" +#include "ewram.h" struct Struct2019348 { @@ -71,8 +72,6 @@ extern const struct CompressedSpriteSheet gUnknown_0820A4B4[]; extern const struct SpritePalette gUnknown_0820A4D4[]; extern const u8 gUnknown_08D09C48[]; -#define ewram19348 (*(struct Struct2019348 *)(ewram + 0x19348)) - extern void c3_0802FDF4(u8); extern void sub_80440EC(); extern void sub_804777C(); diff --git a/src/battle/battle_anim.c b/src/battle/battle_anim.c index eac16ee18..0c04ff9b8 100644 --- a/src/battle/battle_anim.c +++ b/src/battle/battle_anim.c @@ -16,7 +16,6 @@ // sprites start at 10000 and thus must be subtracted of 10000 to account for the true index. #define GET_TRUE_SPRITE_INDEX(i) (i - 10000) -extern u8 unk_2000000[]; extern u16 gBattlePartyID[4]; extern u8 gObjectBankIDs[]; extern u8 gBankAttacker; diff --git a/src/battle/battle_interface.c b/src/battle/battle_interface.c index 10962c025..831839d9b 100644 --- a/src/battle/battle_interface.c +++ b/src/battle/battle_interface.c @@ -13,6 +13,7 @@ #include "string_util.h" #include "task.h" #include "text.h" +#include "ewram.h" struct UnknownStruct5 { @@ -28,12 +29,6 @@ struct UnknownStruct7 u8 filler0[0x180]; }; -extern u8 ewram[]; -#define ewram520 ((struct UnknownStruct7 *)(ewram + 0x00520)) -#define ewram16088 (*(u8 *) (ewram + 0x16088)) -#define ewram16089 (*(u8 *) (ewram + 0x16089)) -#define ewram17850 ((struct UnknownStruct5 *)(ewram + 0x17850)) - extern u8 gDisplayedStringBattle[]; extern u8 gNoOfAllBanks; extern u16 gBattlePartyID[]; diff --git a/src/battle/battle_party_menu.c b/src/battle/battle_party_menu.c index 2f6dc6816..ab8b7a694 100644 --- a/src/battle/battle_party_menu.c +++ b/src/battle/battle_party_menu.c @@ -18,9 +18,7 @@ #include "strings.h" #include "task.h" #include "text.h" - -extern u8 ewram[]; -#define UNK_201606C_ARRAY (ewram + 0x1606C) // lazy define but whatever. +#include "ewram.h" extern u8 sub_806BD58(u8, u8); extern void PartyMenuPrintMonsLevelOrStatus(void); diff --git a/src/battle/battle_transition.c b/src/battle/battle_transition.c index 53d32d03a..5562da462 100644 --- a/src/battle/battle_transition.c +++ b/src/battle/battle_transition.c @@ -12,11 +12,11 @@ #include "songs.h" #include "trainer.h" #include "field_camera.h" +#include "ewram.h" void sub_807DE10(void); void dp12_8087EA4(void); -extern u8 ewram[]; extern u16 gUnknown_03005560[]; extern u16 gUnknown_03004DE0[][0x3C0]; @@ -45,7 +45,6 @@ struct TransitionData s16 data[11]; }; -#define TRANSITION_STRUCT (*(struct TransitionData *) (ewram + 0xC000)) typedef bool8 (*TransitionState)(struct Task* task); typedef bool8 (*TransitionSpriteCallback)(struct Sprite* sprite); diff --git a/src/battle/reshow_battle_screen.c b/src/battle/reshow_battle_screen.c index 343c8f183..396c4435e 100644 --- a/src/battle/reshow_battle_screen.c +++ b/src/battle/reshow_battle_screen.c @@ -7,6 +7,7 @@ #include "text.h" #include "rom_8077ABC.h" #include "data2.h" +#include "ewram.h" extern struct SpriteTemplate gUnknown_02024E8C; extern struct Window gUnknown_03004210; @@ -55,9 +56,6 @@ static void sub_807B184(u8 bank); static void sub_807B508(u8 bank); static void sub_807B06C(void); -#define gReshowState ewram[0x1FFFF] -#define gHelperState ewram[0x1FFFE] - void nullsub_14(void) { diff --git a/src/debug/matsuda_debug_menu.c b/src/debug/matsuda_debug_menu.c index d0c0f95f7..0a495c37a 100644 --- a/src/debug/matsuda_debug_menu.c +++ b/src/debug/matsuda_debug_menu.c @@ -45,7 +45,7 @@ extern u8 gUnknown_083C9282[]; extern const u8 gUnknown_083C928E[][2]; extern u8 gUnknown_083C9296[]; extern u8 gUnknown_083C92A8[]; -extern u8 unk_2000000[]; +extern u8 unk_2000000[]; // TODO: use ewram extern u8 gMatsudaDebugMenu_GoBackText[]; extern u8 gMatsudaDebugMenu_BattlePointsText[]; extern u8 gMatsudaDebugMenu_StartText[]; diff --git a/src/engine/link.c b/src/engine/link.c index 7f7e48083..86413cfbf 100644 --- a/src/engine/link.c +++ b/src/engine/link.c @@ -35,7 +35,6 @@ struct LinkTestBGInfo u32 dummy_C; }; -extern u8 unk_2000000[]; extern u8 unk_2004000[]; extern u16 gBattleTypeFlags; @@ -507,7 +506,7 @@ static void ProcessRecvCmds(u8 unusedParam) case 0x8888: if (sBlockRecv[i].size > BLOCK_BUFFER_SIZE) { - u16 *buffer = (u16 *)unk_2000000; + u16 *buffer = (u16 *)ewram; u16 j; for (j = 0; j < CMD_LENGTH - 1; j++) buffer[(sBlockRecv[i].pos / 2) + j] = gRecvCmds[j + 1][i]; diff --git a/src/engine/naming_screen.c b/src/engine/naming_screen.c index a20a15569..92a61eb8f 100644 --- a/src/engine/naming_screen.c +++ b/src/engine/naming_screen.c @@ -17,6 +17,7 @@ #include "text.h" #include "trig.h" #include "util.h" +#include "ewram.h" #ifdef ENGLISH #define COLUMN_COUNT 9 @@ -26,10 +27,6 @@ extern u16 gKeyRepeatStartDelay; -extern u8 unk_2000000[]; - -#define namingScreenData (*(struct NamingScreenData *)(unk_2000000)) - extern u8 CreateMonIcon(u16 species, void (*callback)(struct Sprite *), s16 x, s16 y, u8 subpriority, u32 personality); const u32 gSpriteImage_83CE094[] = INCBIN_U32("graphics/naming_screen/pc_icon/0.4bpp"); diff --git a/src/engine/record_mixing.c b/src/engine/record_mixing.c index 87fc6a81d..27992bf1f 100644 --- a/src/engine/record_mixing.c +++ b/src/engine/record_mixing.c @@ -24,10 +24,7 @@ #include "strings2.h" #include "task.h" #include "tv.h" - -extern u8 ewram[]; -#define unk_2018000 (*(struct PlayerRecords *)(ewram + 0x18000)) -#define unk_2008000 (*(struct PlayerRecords *)(ewram + 0x08000)) +#include "ewram.h" extern struct RecordMixingDayCareMail gUnknown_02038738; extern u16 gSpecialVar_0x8005; diff --git a/src/engine/trade.c b/src/engine/trade.c index 8fad94be8..b11b7e448 100644 --- a/src/engine/trade.c +++ b/src/engine/trade.c @@ -217,9 +217,6 @@ extern u8 *gUnknown_020296CC[13]; extern struct TradeEwramSubstruct *gUnknown_03004824; extern struct MailStruct gUnknown_02029700[16]; -#define ewram_2010000 (*(struct TradeEwramStruct *)(ewram + 0x10000)) - - const u32 unref_data_820ABD4[] = { 0x00000890, 0x00003AC0, diff --git a/src/engine/trainer_card.c b/src/engine/trainer_card.c index 3e9dadbda..ef960c162 100644 --- a/src/engine/trainer_card.c +++ b/src/engine/trainer_card.c @@ -20,6 +20,7 @@ #include "task.h" #include "unknown_task.h" #include "util.h" +#include "ewram.h" typedef void (*Callback)(void); @@ -47,9 +48,6 @@ struct Struct2000000 /*0x9C*/ u8 language; // 0x9C }; -extern u8 ewram[]; -#define ewram0 (*(struct Struct2000000 *)(ewram)) - extern struct LinkPlayerMapObject gLinkPlayerMapObjects[]; EWRAM_DATA struct TrainerCard gTrainerCards[4] = {0}; @@ -189,14 +187,14 @@ void sub_8093110(Callback arg1) { sub_80932AC(arg1); SetMainCallback2(sub_8093174); - ewram0.language = GAME_LANGUAGE; + ewram0_2.language = GAME_LANGUAGE; } void sub_8093130(u8 playerIndex, Callback arg2) { sub_80932E4(playerIndex, arg2); SetMainCallback2(sub_8093174); - ewram0.language = gLinkPlayers[gLinkPlayerMapObjects[playerIndex].linkPlayerId].language; + ewram0_2.language = gLinkPlayers[gLinkPlayerMapObjects[playerIndex].linkPlayerId].language; } static void sub_8093174(void) @@ -258,13 +256,13 @@ static void sub_8093254(void) LoadOam(); ProcessSpriteCopyRequests(); TransferPlttBuffer(); - ewram0.var_6++; - if (ewram0.var_6 >= 60) + ewram0_2.var_6++; + if (ewram0_2.var_6 >= 60) { - ewram0.var_6 = 0; - ewram0.var_5 ^= 1; + ewram0_2.var_6 = 0; + ewram0_2.var_5 ^= 1; } - if (ewram0.var_4) + if (ewram0_2.var_4) DmaCopy16(3, gUnknown_03004DE0.filler0, gUnknown_03004DE0.unk780, sizeof(gUnknown_03004DE0.unk780)); } @@ -290,20 +288,20 @@ void sub_8093324(void) { u8 taskId = FindTaskIdByFunc(nullsub_60); struct Task *task = &gTasks[taskId]; - ewram0.var_1 = task->data[TD_0]; + ewram0_2.var_1 = task->data[TD_0]; - LoadWordFromTwoHalfwords((u16 *)&task->data[TD_CALLBACK], (u32 *)&ewram0.var_60); + LoadWordFromTwoHalfwords((u16 *)&task->data[TD_CALLBACK], (u32 *)&ewram0_2.var_60); - if (ewram0.var_1) + if (ewram0_2.var_1) { struct TrainerCard(*trainerCards)[4] = &gTrainerCards; s16 var = task->data[TD_1]; struct TrainerCard *dest = &(*trainerCards)[var]; - memcpy(&ewram0.var_64, dest, sizeof(struct TrainerCard)); + memcpy(&ewram0_2.var_64, dest, sizeof(struct TrainerCard)); } else { - sub_8093390(&ewram0.var_64); + sub_8093390(&ewram0_2.var_64); } } @@ -502,52 +500,52 @@ static void sub_8093688(void) u8 i; sub_8093324(); - ewram0.var_0 = 0; - ewram0.var_3 = 0; - ewram0.var_4 = FALSE; - ewram0.var_2 = ewram0.var_64.stars; - ewram0.var_5 = 0; - ewram0.var_6 = 0; + ewram0_2.var_0 = 0; + ewram0_2.var_3 = 0; + ewram0_2.var_4 = FALSE; + ewram0_2.var_2 = ewram0_2.var_64.stars; + ewram0_2.var_5 = 0; + ewram0_2.var_6 = 0; for (i = 0; i < 4; i++) - EasyChat_GetWordText(ewram0.var_20[i], ewram0.var_64.var_28[i]); + EasyChat_GetWordText(ewram0_2.var_20[i], ewram0_2.var_64.var_28[i]); sub_80936D4(); } void sub_80936D4(void) { - ewram0.var_7 = 0; - ewram0.var_8 = 0; - ewram0.var_9 = 0; - ewram0.var_a = 0; - ewram0.var_b = 0; - ewram0.var_c = 0; - ewram0.var_d = 0; - memset(ewram0.var_e, 0, sizeof(ewram0.var_e)); + ewram0_2.var_7 = 0; + ewram0_2.var_8 = 0; + ewram0_2.var_9 = 0; + ewram0_2.var_a = 0; + ewram0_2.var_b = 0; + ewram0_2.var_c = 0; + ewram0_2.var_d = 0; + memset(ewram0_2.var_e, 0, sizeof(ewram0_2.var_e)); - if (ewram0.var_64.hasPokedex) - ewram0.var_7++; + if (ewram0_2.var_64.hasPokedex) + ewram0_2.var_7++; - if (ewram0.var_64.firstHallOfFameA != 0 - || ewram0.var_64.firstHallOfFameB != 0 - || ewram0.var_64.firstHallOfFameC != 0) - ewram0.var_8++; + if (ewram0_2.var_64.firstHallOfFameA != 0 + || ewram0_2.var_64.firstHallOfFameB != 0 + || ewram0_2.var_64.firstHallOfFameC != 0) + ewram0_2.var_8++; - if (ewram0.var_64.linkBattleWins != 0 || ewram0.var_64.linkBattleLosses != 0) - ewram0.var_9++; + if (ewram0_2.var_64.linkBattleWins != 0 || ewram0_2.var_64.linkBattleLosses != 0) + ewram0_2.var_9++; - if (ewram0.var_64.battleTowerWins != 0 || ewram0.var_64.battleTowerLosses != 0) - ewram0.var_a++; + if (ewram0_2.var_64.battleTowerWins != 0 || ewram0_2.var_64.battleTowerLosses != 0) + ewram0_2.var_a++; - if (ewram0.var_64.contestsWithFriends != 0) - ewram0.var_b++; + if (ewram0_2.var_64.contestsWithFriends != 0) + ewram0_2.var_b++; - if (ewram0.var_64.pokeblocksWithFriends != 0) - ewram0.var_c++; + if (ewram0_2.var_64.pokeblocksWithFriends != 0) + ewram0_2.var_c++; - if (ewram0.var_64.pokemonTrades != 0) - ewram0.var_d++; + if (ewram0_2.var_64.pokemonTrades != 0) + ewram0_2.var_d++; - if (!ewram0.var_1) + if (!ewram0_2.var_1) { u32 badgeFlag; int i = 0; @@ -556,7 +554,7 @@ void sub_80936D4(void) while (1) { if (FlagGet(badgeFlag)) - ewram0.var_e[i]++; + ewram0_2.var_e[i]++; badgeFlag++; i++; if (badgeFlag > BADGE08_GET) @@ -613,24 +611,24 @@ static void sub_809380C() static void sub_809382C(u8 taskId) { - while (gUnknown_083B5EBC[ewram0.var_0](&gTasks[taskId]) != 0) + while (gUnknown_083B5EBC[ewram0_2.var_0](&gTasks[taskId]) != 0) ; } bool8 sub_8093864(struct Task *task) { - ewram0.var_5 = gSaveBlock2.playTimeSeconds & 1; - ewram0.var_6 = gSaveBlock2.playTimeVBlanks; + ewram0_2.var_5 = gSaveBlock2.playTimeSeconds & 1; + ewram0_2.var_6 = gSaveBlock2.playTimeVBlanks; sub_80939A4(); BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0); - ewram0.var_0++; + ewram0_2.var_0++; return FALSE; } bool8 sub_80938A8(struct Task *task) { if (!gPaletteFade.active) - ewram0.var_0++; + ewram0_2.var_0++; return FALSE; } @@ -638,19 +636,19 @@ bool8 sub_80938CC(struct Task *task) { if (gMain.newKeys & B_BUTTON) { - ewram0.var_0 = 5; + ewram0_2.var_0 = 5; return TRUE; } else if (gMain.newKeys & A_BUTTON) { - if (ewram0.var_3 != 0) + if (ewram0_2.var_3 != 0) { - ewram0.var_0 = 5; + ewram0_2.var_0 = 5; } else { - ewram0.var_3 ^= 1; - ewram0.var_0 = 3; + ewram0_2.var_3 ^= 1; + ewram0_2.var_0 = 3; } return TRUE; } @@ -661,14 +659,14 @@ bool8 sub_8093918(struct Task *task) { sub_8093A28(); PlaySE(SE_CARD); - ewram0.var_0++; + ewram0_2.var_0++; return FALSE; } bool8 sub_8093938(struct Task *task) { if (sub_8093A48()) - ewram0.var_0 = 2; + ewram0_2.var_0 = 2; return FALSE; } @@ -676,14 +674,14 @@ bool8 sub_8093954(struct Task *task) { sub_80939C0(); BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); - ewram0.var_0++; + ewram0_2.var_0++; return FALSE; } bool8 sub_8093980(struct Task *task) { if (!gPaletteFade.active) - SetMainCallback2((MainCallback)ewram0.var_60); + SetMainCallback2((MainCallback)ewram0_2.var_60); return FALSE; } @@ -706,9 +704,9 @@ static void sub_80939DC(u8 taskId) u8 buffer[32]; struct Task *task = &gTasks[taskId]; - if (ewram0.var_5 != task->data[TD_1]) + if (ewram0_2.var_5 != task->data[TD_1]) { - task->data[TD_1] = ewram0.var_5; + task->data[TD_1] = ewram0_2.var_5; task->data[TD_0] ^= TRUE; } TrainerCard_Front_PrintPlayTime(buffer, task->data[TD_0]); @@ -741,12 +739,12 @@ bool8 sub_8093AA0(struct Task *task) { s32 i; - ewram0.var_4 = FALSE; + ewram0_2.var_4 = FALSE; dp12_8087EA4(); for (i = 0; i < ARRAY_COUNT(gUnknown_03004DE0.unk780); i++) gUnknown_03004DE0.unk780[i] = -4; SetHBlankCallback(sub_8093D7C); - ewram0.var_4 = TRUE; + ewram0_2.var_4 = TRUE; task->data[0]++; return FALSE; } @@ -763,7 +761,7 @@ bool8 sub_8093AF0(struct Task *task) u32 sp0; s16 i; - ewram0.var_4 = 0; + ewram0_2.var_4 = 0; task->data[1] += 3; if (task->data[1] > 79) task->data[1] = 79; @@ -792,7 +790,7 @@ bool8 sub_8093AF0(struct Task *task) } for (; i < 160; i++) gUnknown_03004DE0.filler0[i] = -4 + (u16)(r10 >> 16); - ewram0.var_4 = 1; + ewram0_2.var_4 = 1; if (task->data[1] > 0x4A) task->data[0]++; return FALSE; @@ -955,7 +953,7 @@ bool8 sub_8093C0C(struct Task *task) { sub_80939C0(); sub_8093DAC(); - if (!ewram0.var_3) + if (!ewram0_2.var_3) sub_80939A4(); task->data[0]++; return TRUE; @@ -1115,7 +1113,7 @@ bool8 sub_8093D50(struct Task *task) { u8 taskId; - ewram0.var_4 = FALSE; + ewram0_2.var_4 = FALSE; SetHBlankCallback(NULL); sub_8093E04(); taskId = FindTaskIdByFunc(sub_8093A68); @@ -1134,7 +1132,7 @@ void sub_8093D7C(void) static void sub_8093DAC(void) { - if (ewram0.var_3) + if (ewram0_2.var_3) sub_8093DEC(); else sub_8093DC8(); @@ -1203,23 +1201,23 @@ extern const u16 *const gUnknown_083B5EF8[]; void sub_8093EA0(void) { - LoadPalette(gUnknown_083B5EF8[ewram0.var_2], 0, 48 * 2); + LoadPalette(gUnknown_083B5EF8[ewram0_2.var_2], 0, 48 * 2); LoadPalette(gBadgesPalette, 48, 16 * 2); LoadPalette(gUnknown_083B5F4C, 64, 16 * 2); - if (ewram0.var_64.gender != MALE) + if (ewram0_2.var_64.gender != MALE) LoadPalette(gUnknown_083B5F0C, 16, 16 * 2); } static void sub_8093EF8(void) { - LoadTrainerGfx_TrainerCard(ewram0.var_64.gender, 80, (void *)(VRAM + 0x1880)); + LoadTrainerGfx_TrainerCard(ewram0_2.var_64.gender, 80, (void *)(VRAM + 0x1880)); } static void sub_8093F14(void) { const void *arr[] = {gUnknown_08E8CAC0, gUnknown_08E8D4C0}; - CpuFastSet(arr[ewram0.var_1], (void *)(VRAM + 0x4800), 0x140); + CpuFastSet(arr[ewram0_2.var_1], (void *)(VRAM + 0x4800), 0x140); } // I don't really know where to put the data. It's in such a weird order. @@ -1269,7 +1267,7 @@ static void sub_8093FD0(void) { u16 *ptr = (u16 *)(VRAM + 0x4000); s16 i = 15; - s16 var = 15 + ewram0.var_2; + s16 var = 15 + ewram0_2.var_2; while (i < var) { @@ -1285,7 +1283,7 @@ static void sub_8093FD0(void) static void sub_8094038(void) { - if (ewram0.var_1 == 0) + if (ewram0_2.var_1 == 0) { u16 *ptr = (u16 *)(VRAM + 0x4000); s16 i; @@ -1293,7 +1291,7 @@ static void sub_8094038(void) for (i = 0, r2 = 4; i < 8; i++, r2 += 3) { - if (ewram0.var_e[i] != 0) + if (ewram0_2.var_e[i] != 0) { ptr[15 * 32 + r2 + 0] = gUnknown_083B5F8C[i][0] | 0x3000; ptr[15 * 32 + r2 + 1] = gUnknown_083B5F8C[i][1] | 0x3000; @@ -1332,8 +1330,8 @@ static void sub_8094140(void) BasicInitMenuWindow(&WindowConfig_TrainerCard_Back_Values); buffer = gStringVar1; - StringCopy(buffer, ewram0.var_64.playerName); - ConvertInternationalString(buffer, ewram0.language); + StringCopy(buffer, ewram0_2.var_64.playerName); + ConvertInternationalString(buffer, ewram0_2.language); MenuPrint(buffer, 7, 5); TrainerCard_Front_PrintTrainerID(); @@ -1366,26 +1364,26 @@ static void TrainerCard_Front_PrintTrainerID(void) { u8 buffer[8]; - ConvertIntToDecimalStringN(buffer, ewram0.var_64.trainerId, STR_CONV_MODE_LEADING_ZEROS, 5); + ConvertIntToDecimalStringN(buffer, ewram0_2.var_64.trainerId, STR_CONV_MODE_LEADING_ZEROS, 5); MenuPrint(buffer, 20, 2); } static void TrainerCard_Front_PrintMoney(void) { - sub_80B7AEC(ewram0.var_64.money, 16, 8); + sub_80B7AEC(ewram0_2.var_64.money, 16, 8); } static void TrainerCard_Front_PrintPokedexCount(void) { u8 buffer[16]; - if (ewram0.var_7 == FALSE) + if (ewram0_2.var_7 == FALSE) { sub_8094110(); } else { - ConvertIntToDecimalStringN(buffer, ewram0.var_64.pokedexSeen, STR_CONV_MODE_LEFT_ALIGN, 3); + ConvertIntToDecimalStringN(buffer, ewram0_2.var_64.pokedexSeen, STR_CONV_MODE_LEFT_ALIGN, 3); MenuPrint_RightAligned(buffer, 16, 10); } } @@ -1398,10 +1396,10 @@ static void TrainerCard_Front_PrintPlayTime(u8 *arg1, s16 colon) playTimeHours = gSaveBlock2.playTimeHours; playTimeMinutes = gSaveBlock2.playTimeMinutes; - if (ewram0.var_1 != 0) + if (ewram0_2.var_1 != 0) { - playTimeHours = ewram0.var_64.playTimeHours; - playTimeMinutes = ewram0.var_64.playTimeMinutes; + playTimeHours = ewram0_2.var_64.playTimeHours; + playTimeMinutes = ewram0_2.var_64.playTimeMinutes; } FormatPlayTime(buffer, playTimeHours, playTimeMinutes, colon); sub_8072C74(arg1, buffer, 48, 1); @@ -1411,20 +1409,20 @@ static void sub_809429C(void) { u8 *str; - if (ewram0.var_1 != 0) + if (ewram0_2.var_1 != 0) { str = gStringVar1; - str = StringCopy(str, ewram0.var_20[0]); + str = StringCopy(str, ewram0_2.var_20[0]); str[0] = 00; str++; - str = StringCopy(str, ewram0.var_20[1]); + str = StringCopy(str, ewram0_2.var_20[1]); MenuPrint(gStringVar1, 2, 14); str = gStringVar1; - str = StringCopy(str, ewram0.var_20[2]); + str = StringCopy(str, ewram0_2.var_20[2]); str[0] = 00; str++; - str = StringCopy(str, ewram0.var_20[3]); + str = StringCopy(str, ewram0_2.var_20[3]); MenuPrint(gStringVar1, 2, 16); } } @@ -1434,8 +1432,8 @@ static void TrainerCard_Back_PrintName(void) u8 *str; str = gStringVar1; - StringCopy(str, ewram0.var_64.playerName); - ConvertInternationalString(str, ewram0.language); + StringCopy(str, ewram0_2.var_64.playerName); + ConvertInternationalString(str, ewram0_2.language); #if ENGLISH StringAppend(str, gOtherText_TrainersTrainerCard); @@ -1448,7 +1446,7 @@ static void TrainerCard_Back_PrintName(void) static void TrainerCard_Back_PrintHallOfFameTime_Label(void) { - if (ewram0.var_8 != 0) + if (ewram0_2.var_8 != 0) MenuPrint(gOtherText_FirstHOF, 3, 5); } @@ -1456,21 +1454,21 @@ static void TrainerCard_Back_PrintHallOfFameTime(void) { u8 *str; - if (ewram0.var_8 != 0) + if (ewram0_2.var_8 != 0) { str = gStringVar1; - str = ConvertIntToDecimalStringN(str, ewram0.var_64.firstHallOfFameA, STR_CONV_MODE_RIGHT_ALIGN, 3); + str = ConvertIntToDecimalStringN(str, ewram0_2.var_64.firstHallOfFameA, STR_CONV_MODE_RIGHT_ALIGN, 3); str = StringCopy(str, gUnknown_083B5EF4); - str = ConvertIntToDecimalStringN(str, ewram0.var_64.firstHallOfFameB, STR_CONV_MODE_LEADING_ZEROS, 2); + str = ConvertIntToDecimalStringN(str, ewram0_2.var_64.firstHallOfFameB, STR_CONV_MODE_LEADING_ZEROS, 2); str = StringCopy(str, gUnknown_083B5EF4); - str = ConvertIntToDecimalStringN(str, ewram0.var_64.firstHallOfFameC, STR_CONV_MODE_LEADING_ZEROS, 2); + str = ConvertIntToDecimalStringN(str, ewram0_2.var_64.firstHallOfFameC, STR_CONV_MODE_LEADING_ZEROS, 2); MenuPrint_RightAligned(gStringVar1, 28, 5); } } static void TrainerCard_Back_PrintLinkBattlesLabel(void) { - if (ewram0.var_9 != 0) + if (ewram0_2.var_9 != 0) MenuPrint(gOtherText_LinkCableBattles, 3, 7); } @@ -1478,19 +1476,19 @@ static void TrainerCard_Back_PrintLinkBattles(void) { u8 buffer[16]; - if (ewram0.var_9 != 0) + if (ewram0_2.var_9 != 0) { - ConvertIntToDecimalString(buffer, ewram0.var_64.linkBattleWins); + ConvertIntToDecimalString(buffer, ewram0_2.var_64.linkBattleWins); MenuPrint_RightAligned(buffer, 22, 7); - ConvertIntToDecimalString(buffer, ewram0.var_64.linkBattleLosses); + ConvertIntToDecimalString(buffer, ewram0_2.var_64.linkBattleLosses); MenuPrint_RightAligned(buffer, 28, 7); } } static void TrainerCard_Back_PrintBattleTower_Label(void) { - if (ewram0.var_a != 0) + if (ewram0_2.var_a != 0) MenuPrint(gOtherText_BattleTowerWinRecord, 3, 15); } @@ -1498,19 +1496,19 @@ static void TrainerCard_Back_PrintBattleTower(void) { u8 buffer[16]; - if (ewram0.var_a != 0) + if (ewram0_2.var_a != 0) { - sub_8072C44(buffer, ewram0.var_64.battleTowerWins, 24, 1); + sub_8072C44(buffer, ewram0_2.var_64.battleTowerWins, 24, 1); MenuPrint_PixelCoords(buffer, 112, 120, 0); - sub_8072C44(buffer, ewram0.var_64.battleTowerLosses, 24, 1); + sub_8072C44(buffer, ewram0_2.var_64.battleTowerLosses, 24, 1); MenuPrint_PixelCoords(buffer, 149, 120, 0); } } static void TrainerCard_Back_PrintLinkContests_Label(void) { - if (ewram0.var_b != 0) + if (ewram0_2.var_b != 0) MenuPrint(gOtherText_ContestRecord, 3, 13); } @@ -1518,16 +1516,16 @@ static void TrainerCard_Back_PrintLinkContests(void) { u8 buffer[8]; - if (ewram0.var_b != 0) + if (ewram0_2.var_b != 0) { - ConvertIntToDecimalStringN(buffer, ewram0.var_64.contestsWithFriends, STR_CONV_MODE_RIGHT_ALIGN, 3); + ConvertIntToDecimalStringN(buffer, ewram0_2.var_64.contestsWithFriends, STR_CONV_MODE_RIGHT_ALIGN, 3); MenuPrint_RightAligned(buffer, 28, 13); } } static void TrainerCard_Back_PrintLinkPokeblocks_Label(void) { - if (ewram0.var_c != 0) + if (ewram0_2.var_c != 0) MenuPrint(gOtherText_MixingRecord, 3, 11); } @@ -1535,16 +1533,16 @@ static void TrainerCard_Back_PrintLinkPokeblocks(void) { u8 buffer[8]; - if (ewram0.var_c != 0) + if (ewram0_2.var_c != 0) { - ConvertIntToDecimalStringN(buffer, ewram0.var_64.pokeblocksWithFriends, STR_CONV_MODE_RIGHT_ALIGN, 5); + ConvertIntToDecimalStringN(buffer, ewram0_2.var_64.pokeblocksWithFriends, STR_CONV_MODE_RIGHT_ALIGN, 5); MenuPrint_RightAligned(buffer, 28, 11); } } static void TrainerCard_Back_PrintPokemonTrades_Label(void) { - if (ewram0.var_d != 0) + if (ewram0_2.var_d != 0) MenuPrint(gOtherText_TradeRecord, 3, 9); } @@ -1552,9 +1550,9 @@ static void TrainerCard_Back_PrintPokemonTrades(void) { u8 buffer[8]; - if (ewram0.var_d != 0) + if (ewram0_2.var_d != 0) { - ConvertIntToDecimalStringN(buffer, ewram0.var_64.pokemonTrades, STR_CONV_MODE_RIGHT_ALIGN, 5); + ConvertIntToDecimalStringN(buffer, ewram0_2.var_64.pokemonTrades, STR_CONV_MODE_RIGHT_ALIGN, 5); MenuPrint_RightAligned(buffer, 28, 9); } } diff --git a/src/field/battle_tower.c b/src/field/battle_tower.c index 1b5759f49..3e60d3a9a 100644 --- a/src/field/battle_tower.c +++ b/src/field/battle_tower.c @@ -24,6 +24,7 @@ #include "trainer.h" #include "tv.h" #include "vars.h" +#include "ewram.h" #if ENGLISH #include "../data/battle_tower/trainers.h" @@ -278,9 +279,6 @@ extern u8 gBattleOutcome; extern struct Pokemon gUnknown_030042FC[]; extern struct BattlePokemon gBattleMons[]; -#define ewram160FB (ewram[0x160FB]) - - void sub_8134548(void) { u8 var1 = 0; diff --git a/src/field/dewford_trend.c b/src/field/dewford_trend.c index aaf4dd66a..f47dbba08 100644 --- a/src/field/dewford_trend.c +++ b/src/field/dewford_trend.c @@ -6,7 +6,7 @@ #include "rng.h" #include "text.h" -extern u8 unk_2000000[]; +extern u8 ewram[]; extern u16 gScriptResult; extern u16 gSpecialVar_0x8004; diff --git a/src/field/field_region_map.c b/src/field/field_region_map.c index 7cb22e5df..e189fcf2c 100644 --- a/src/field/field_region_map.c +++ b/src/field/field_region_map.c @@ -7,6 +7,7 @@ #include "sprite.h" #include "strings2.h" #include "text.h" +#include "ewram.h" struct RegionMapStruct { @@ -24,9 +25,6 @@ struct UnkStruct u16 unk888; }; -extern u8 ewram[]; -#define unk_2000000 (*(struct UnkStruct *)(ewram)) - void FieldInitRegionMap(MainCallback callback) { SetVBlankCallback(NULL); diff --git a/src/field/field_tasks.c b/src/field/field_tasks.c index da6f162c2..767753da2 100644 --- a/src/field/field_tasks.c +++ b/src/field/field_tasks.c @@ -1,7 +1,3 @@ -// - -// - #include "global.h" #include "task.h" #include "main.h" diff --git a/src/field/fldeff_softboiled.c b/src/field/fldeff_softboiled.c index 22f9c13f5..b2c3d9bd1 100644 --- a/src/field/fldeff_softboiled.c +++ b/src/field/fldeff_softboiled.c @@ -9,6 +9,7 @@ #include "sprite.h" #include "strings.h" #include "task.h" +#include "ewram.h" struct Struct2001000 { u8 unk0; @@ -38,15 +39,9 @@ struct Struct201C000 { #define WINDOW_RIGHT 29 #endif -#define EWRAM_1000 (*(struct Struct2001000 *)(unk_2000000 + 0x1000)) -#define EWRAM_1B000_2 (*(struct Struct201B000 *)(unk_2000000 + 0x1B000)) -#define EWRAM_1C000 (*(struct Struct201C000 *)(unk_2000000 + 0x1C000)) - // extern extern u8 gUnknown_0202E8F6; extern u8 gLastFieldPokeMenuOpened; - -extern u8 unk_2000000[]; extern u8 gUnknown_0202E8F4; // Static diff --git a/src/field/item_menu.c b/src/field/item_menu.c index c508bcacf..09542cc6d 100644 --- a/src/field/item_menu.c +++ b/src/field/item_menu.c @@ -34,9 +34,9 @@ #include "task.h" #include "text.h" #include "unknown_task.h" +#include "ewram.h" // External stuff -extern u8 ewram[]; extern void gpu_pal_allocator_reset__manage_upper_four(void); extern void sub_80F9020(void); extern void sub_80F9988(); @@ -158,12 +158,6 @@ extern struct PocketScrollState gBagPocketScrollStates[]; extern struct ItemSlot *gCurrentBagPocketItemSlots; // selected pocket item slots extern const u8 Event_NoRegisteredItem[]; -#define ewramBerryPic (ewram + 0) -#define ewramBerryPicTemp (ewram + 0x1000) -#define ewramSavedItemsPocket ((struct ItemSlot *)(ewram + 0x1E000)) // saved items pocket (for Wally battle) -#define ewramSavedPokeballsPocket ((struct ItemSlot *)(ewram + 0x1F000)) // saved Pokeballs pocket (for Wally battle) -#define ewramBagSetupStep (ewram[0x1FFFF]) - extern const struct CompressedSpriteSheet sMaleBagSpriteSheet; extern const struct CompressedSpriteSheet sFemaleBagSpriteSheet; extern const struct CompressedSpritePalette sBagSpritePalette; diff --git a/src/field/party_menu.c b/src/field/party_menu.c index 7a519d737..25fd63463 100644 --- a/src/field/party_menu.c +++ b/src/field/party_menu.c @@ -25,7 +25,6 @@ #include "pokemon_summary_screen.h" #include "rom_8077ABC.h" #include "rom_8094928.h" -#include "script_pokemon_80F9.h" #include "songs.h" #include "sound.h" #include "species.h" @@ -35,6 +34,8 @@ #include "task.h" #include "unknown_task.h" #include "util.h" +#include "script_pokemon_80F9.h" +#include "ewram.h" struct Coords8 { @@ -483,9 +484,6 @@ struct Unk201FE00 u8 unkE02; }; -#define ewram1C000 (*(struct Unk201C000 *)(ewram + 0x1C000)) -#define ewram1FE00 (*(struct Unk201FE00 *)(ewram + 0x1FE00)) - extern u16 gBattleTypeFlags; extern u8 gTileBuffer[]; extern u8 gUnknown_0202E8F4; diff --git a/src/field/pokeblock.c b/src/field/pokeblock.c index 2ee1a23ae..e5084da18 100644 --- a/src/field/pokeblock.c +++ b/src/field/pokeblock.c @@ -27,6 +27,7 @@ #include "safari_zone.h" #include "event_data.h" #include "pokeblock.h" +#include "ewram.h" struct UnkPokeblockStruct { @@ -36,9 +37,6 @@ struct UnkPokeblockStruct u8 unk3; }; -extern u8 ewram[]; - - static EWRAM_DATA u8 gUnknown_02039244 = 0; static EWRAM_DATA struct UnkPokeblockStruct gUnknown_02039248 = {0}; static EWRAM_DATA u8 gUnknown_0203924C = 0; diff --git a/src/field/region_map.c b/src/field/region_map.c index bfd2729c2..b5a3de563 100644 --- a/src/field/region_map.c +++ b/src/field/region_map.c @@ -17,6 +17,7 @@ #include "string_util.h" #include "text.h" #include "trig.h" +#include "ewram.h" // Map Section IDs #define MAPSEC_LITTLEROOT_TOWN 0 @@ -1350,12 +1351,6 @@ struct UnknownStruct3 struct RegionMap regionMap; }; -extern u8 ewram[]; -#define ewram0 (*(struct UnknownStruct3 *)(ewram + 0)) -#define ewram888 (ewram + 0x888) -#define ewramA6E (ewram[0xA6E]) -#define ewramBlankMapName (ewram + 0xA48) - static const u16 sFlyRegionMapFrame_Pal[] = INCBIN_U16("graphics/pokenav/map_frame.gbapal"); static const u8 sFlyRegionMapFrame_ImageLZ[] = INCBIN_U8("graphics/pokenav/map_frame.4bpp.lz"); static const u8 sFlyRegionMapFrame_TilemapLZ[] = INCBIN_U8("graphics/pokenav/map_frame.bin.lz"); @@ -1552,10 +1547,10 @@ void CB2_InitFlyRegionMap(void) MenuZeroFillScreen(); break; case 3: - InitRegionMap(&ewram0.regionMap, 0); + InitRegionMap(&ewram0_3.regionMap, 0); CreateRegionMapCursor(0, 0); CreateRegionMapPlayerIcon(1, 1); - ewram0.unk6 = ewram0.regionMap.mapSecId; + ewram0_3.unk6 = ewram0_3.regionMap.mapSecId; StringFill(ewramBlankMapName, CHAR_SPACE, 12); PrintFlyTargetName(); break; @@ -1598,20 +1593,20 @@ static void VBlankCB_FlyRegionMap(void) static void CB2_FlyRegionMap(void) { - ewram0.unk0(); + ewram0_3.unk0(); AnimateSprites(); BuildOamBuffer(); } static void sub_80FC244(void (*func)(void)) { - ewram0.unk0 = func; - ewram0.unk4 = 0; + ewram0_3.unk0 = func; + ewram0_3.unk4 = 0; } static void PrintFlyTargetName(void) { - if (ewram0.regionMap.unk16 == 2 || ewram0.regionMap.unk16 == 4) + if (ewram0_3.regionMap.unk16 == 2 || ewram0_3.regionMap.unk16 == 4) { u16 i = 0; int zero; @@ -1620,13 +1615,13 @@ static void PrintFlyTargetName(void) { const struct UnknownStruct4 *r4 = &sUnknown_083E79C0[i]; - if (ewram0.regionMap.mapSecId == r4->mapSecId) + if (ewram0_3.regionMap.mapSecId == r4->mapSecId) { if (FlagGet(r4->flag)) { MenuDrawTextWindow(16, 14, 29, 19); - MenuPrint(ewram0.regionMap.mapSecName, 17, 15); - MenuPrint_RightAligned(r4->unk0[ewram0.regionMap.everGrandeCityArea], 29, 17); + MenuPrint(ewram0_3.regionMap.mapSecName, 17, 15); + MenuPrint_RightAligned(r4->unk0[ewram0_3.regionMap.everGrandeCityArea], 29, 17); return; } break; @@ -1637,7 +1632,7 @@ static void PrintFlyTargetName(void) if (zero == 0) { MenuDrawTextWindow(16, 16, 29, 19); - MenuPrint(ewram0.regionMap.mapSecName, 17, 17); + MenuPrint(ewram0_3.regionMap.mapSecName, 17, 17); MenuZeroFillWindowRect(16, 14, 29, 15); } } @@ -1738,7 +1733,7 @@ static void CreateSpecialAreaFlyTargetIcons(void) static void SpriteCB_FlyTargetIcons(struct Sprite *sprite) { // Blink if our mapSecId is the one selected on the map - if (ewram0.regionMap.mapSecId == sprite->data0) + if (ewram0_3.regionMap.mapSecId == sprite->data0) { // Toggle visibility every 16 frames sprite->data1++; @@ -1757,11 +1752,11 @@ static void SpriteCB_FlyTargetIcons(struct Sprite *sprite) static void sub_80FC5B4(void) { - switch (ewram0.unk4) + switch (ewram0_3.unk4) { case 0: BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0); - ewram0.unk4++; + ewram0_3.unk4++; break; case 1: if (UpdatePaletteFade() != 0) @@ -1773,7 +1768,7 @@ static void sub_80FC5B4(void) static void sub_80FC600(void) { - if (ewram0.unk4 == 0) + if (ewram0_3.unk4 == 0) { switch (sub_80FAB60()) { @@ -1785,7 +1780,7 @@ static void sub_80FC600(void) PrintFlyTargetName(); break; case INPUT_EVENT_A_BUTTON: - if (ewram0.regionMap.unk16 == 2 || ewram0.regionMap.unk16 == 4) + if (ewram0_3.regionMap.unk16 == 2 || ewram0_3.regionMap.unk16 == 4) { m4aSongNumStart(SE_SELECT); ewramA6E = 1; @@ -1803,11 +1798,11 @@ static void sub_80FC600(void) static void sub_80FC69C(void) { - switch (ewram0.unk4) + switch (ewram0_3.unk4) { case 0: BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); - ewram0.unk4++; + ewram0_3.unk4++; break; case 1: if (UpdatePaletteFade() != 0) @@ -1815,7 +1810,7 @@ static void sub_80FC69C(void) FreeRegionMapIconResources(); if (ewramA6E != 0) { - switch (ewram0.regionMap.mapSecId) + switch (ewram0_3.regionMap.mapSecId) { case MAPSEC_SOUTHERN_ISLAND: sub_8053538(22); @@ -1827,13 +1822,13 @@ static void sub_80FC69C(void) sub_8053538((gSaveBlock2.playerGender == MALE) ? 12 : 13); break; case MAPSEC_EVER_GRANDE_CITY: - sub_8053538((FlagGet(0x854) && ewram0.regionMap.everGrandeCityArea == 0) ? 20 : 11); + sub_8053538((FlagGet(0x854) && ewram0_3.regionMap.everGrandeCityArea == 0) ? 20 : 11); break; default: - if (sUnknown_083E7920[ewram0.regionMap.mapSecId][2] != 0) - sub_8053538(sUnknown_083E7920[ewram0.regionMap.mapSecId][2]); + if (sUnknown_083E7920[ewram0_3.regionMap.mapSecId][2] != 0) + sub_8053538(sUnknown_083E7920[ewram0_3.regionMap.mapSecId][2]); else - warp1_set_2(sUnknown_083E7920[ewram0.regionMap.mapSecId][0], sUnknown_083E7920[ewram0.regionMap.mapSecId][1], -1); + warp1_set_2(sUnknown_083E7920[ewram0_3.regionMap.mapSecId][0], sUnknown_083E7920[ewram0_3.regionMap.mapSecId][1], -1); break; } sub_80865BC(); diff --git a/src/field/shop.c b/src/field/shop.c index 375205935..67e9b006e 100644 --- a/src/field/shop.c +++ b/src/field/shop.c @@ -26,13 +26,10 @@ #include "overworld.h" #include "decoration_inventory.h" #include "field_camera.h" - -#define ewram18000 ((u16 *)(ewram + 0x18000)) -#define ewram18300 ((u16 *)(ewram + 0x18300)) +#include "ewram.h" extern bool8 sub_80A52C4(u8, u8); -extern u8 ewram[]; extern u8 gBuyMenuFrame_Gfx[]; extern u16 gBuyMenuFrame_Tilemap[]; extern u16 gMenuMoneyPal[16]; @@ -54,7 +51,7 @@ static struct MartInfo gMartInfo; // ewram EWRAM_DATA u32 gMartTotalCost = 0; -EWRAM_DATA s16 gUnknown_020386A4[16][4] = {0}; // game freak barely uses 2d arrays wtf? +EWRAM_DATA s16 gUnknown_020386A4[16][4] = {0}; EWRAM_DATA struct ItemSlot gUnknown_02038724[3] = {0}; // tv.c uses this, so it cant be static EWRAM_DATA u8 gUnknown_02038730 = 0; EWRAM_DATA u8 gUnknown_02038731 = 0; diff --git a/src/field/tv.c b/src/field/tv.c index 87fc03065..a0287e7df 100644 --- a/src/field/tv.c +++ b/src/field/tv.c @@ -38,6 +38,7 @@ #include "string_util.h" #include "strings.h" #include "text.h" +#include "ewram.h" struct UnkTvStruct { @@ -95,9 +96,6 @@ extern u8 gBattleOutcome; extern u16 gLastUsedItem; -extern u8 ewram[]; -#define gUnknown_02007000 (*(ewramStruct_02007000 *)(ewram + 0x7000)) - static EWRAM_DATA u16 gUnknown_020387E0 = 0; static EWRAM_DATA u16 gUnknown_020387E2 = 0; static EWRAM_DATA u8 gUnknown_020387E4 = 0; diff --git a/src/pokemon/mail.c b/src/pokemon/mail.c index c5dd119e3..13129bf7f 100644 --- a/src/pokemon/mail.c +++ b/src/pokemon/mail.c @@ -15,6 +15,7 @@ #include "task.h" #include "text.h" #include "unknown_task.h" +#include "ewram.h" struct UnkMailStruct { @@ -66,9 +67,6 @@ struct MailGraphics u16 color12; }; -extern u8 ewram[]; -#define ewram0 (*(struct Unk2000000 *)(ewram)) - extern struct MailGraphics gMailGraphicsTable[]; extern u16 gUnknown_083E562C[][2]; @@ -90,61 +88,61 @@ void HandleReadMail(struct MailStruct *arg0, MainCallback arg1, bool8 arg2) u16 mailDesign; u16 buffer[2]; - ewram0.varFF = GAME_LANGUAGE; - ewram0.var100 = 1; - ewram0.var104 = (MainCallback)EasyChat_GetWordText; - ewram0.var108 = (MainCallback)ConvertEasyChatWordsToString; + ewram0_4.varFF = GAME_LANGUAGE; + ewram0_4.var100 = 1; + ewram0_4.var104 = (MainCallback)EasyChat_GetWordText; + ewram0_4.var108 = (MainCallback)ConvertEasyChatWordsToString; mailDesign = arg0->itemId - ITEM_ORANGE_MAIL; if (mailDesign <= 11) { - ewram0.varFA = arg0->itemId - ITEM_ORANGE_MAIL; + ewram0_4.varFA = arg0->itemId - ITEM_ORANGE_MAIL; } else { - ewram0.varFA = 0; + ewram0_4.varFA = 0; arg2 = FALSE; } - switch (ewram0.var100) + switch (ewram0_4.var100) { case 0: default: - ewram0.var10C = &gUnknown_083E5730[ewram0.varFA]; + ewram0_4.var10C = &gUnknown_083E5730[ewram0_4.varFA]; break; case 1: - ewram0.var10C = &gUnknown_083E57A4[ewram0.varFA]; + ewram0_4.var10C = &gUnknown_083E57A4[ewram0_4.varFA]; break; } if (((MailSpeciesToSpecies(arg0->species, buffer) << 16) + 0xFFFF0000) <= (410 << 16)) { - switch (ewram0.varFA) + switch (ewram0_4.varFA) { case 6: - ewram0.varFB = 1; + ewram0_4.varFB = 1; break; case 9: - ewram0.varFB = 2; + ewram0_4.varFB = 2; break; default: - ewram0.varFB = 0; + ewram0_4.varFB = 0; break; } } else { - ewram0.varFB = 0; + ewram0_4.varFB = 0; } - ewram0.varF4 = arg0; - ewram0.varEC = arg1; - ewram0.varF8 = arg2; + ewram0_4.varF4 = arg0; + ewram0_4.varEC = arg1; + ewram0_4.varF8 = arg2; SetMainCallback2(sub_80F8D50); } @@ -214,31 +212,31 @@ static u8 sub_80F8A28(void) RETURN_UP_STATE; case 11: - LoadPalette(gMailGraphicsTable[ewram0.varFA].palette, 0, 16 * 2); + LoadPalette(gMailGraphicsTable[ewram0_4.varFA].palette, 0, 16 * 2); RETURN_UP_STATE; case 12: - LZ77UnCompVram(gMailGraphicsTable[ewram0.varFA].tileMap, (void *)(VRAM + 0x4000)); + LZ77UnCompVram(gMailGraphicsTable[ewram0_4.varFA].tileMap, (void *)(VRAM + 0x4000)); RETURN_UP_STATE; case 13: - LZ77UnCompVram(gMailGraphicsTable[ewram0.varFA].tiles, (void *)(VRAM)); + LZ77UnCompVram(gMailGraphicsTable[ewram0_4.varFA].tiles, (void *)(VRAM)); - gPlttBufferUnfaded[241] = gMailGraphicsTable[ewram0.varFA].color10; - gPlttBufferUnfaded[248] = gMailGraphicsTable[ewram0.varFA].color12; + gPlttBufferUnfaded[241] = gMailGraphicsTable[ewram0_4.varFA].color10; + gPlttBufferUnfaded[248] = gMailGraphicsTable[ewram0_4.varFA].color12; gPlttBufferUnfaded[10] = gUnknown_083E562C[gSaveBlock2.playerGender][0]; gPlttBufferUnfaded[11] = gUnknown_083E562C[gSaveBlock2.playerGender][1]; RETURN_UP_STATE; case 14: - if (ewram0.varF8 != 0) + if (ewram0_4.varF8 != 0) { sub_80F8DA0(); } RETURN_UP_STATE; case 15: - if (ewram0.varF8 != 0) + if (ewram0_4.varF8 != 0) { sub_80F8E80(); } @@ -251,18 +249,18 @@ static u8 sub_80F8A28(void) { u16 local1; - local1 = sub_809D4A8(ewram0.varF4->species); + local1 = sub_809D4A8(ewram0_4.varF4->species); - switch (ewram0.varFB) + switch (ewram0_4.varFB) { case 1: sub_809D580(local1); - ewram0.varFC = sub_809D3A4(local1, SpriteCallbackDummy, 96, 128, 0); + ewram0_4.varFC = sub_809D3A4(local1, SpriteCallbackDummy, 96, 128, 0); break; case 2: sub_809D580(local1); - ewram0.varFC = sub_809D3A4(local1, SpriteCallbackDummy, 40, 128, 0); + ewram0_4.varFC = sub_809D3A4(local1, SpriteCallbackDummy, 40, 128, 0); break; } RETURN_UP_STATE; @@ -283,7 +281,7 @@ static u8 sub_80F8A28(void) REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG1_ON | DISPCNT_BG2_ON | DISPCNT_OBJ_ON; BeginNormalPaletteFade(-1, 0, 16, 0, 0); gPaletteFade.bufferTransferDisabled = 0; - ewram0.varF0 = sub_80F8F58; + ewram0_4.varF0 = sub_80F8F58; return TRUE; default: @@ -325,24 +323,24 @@ static void sub_80F8DA0(void) u8 *ptr; r6 = 0; - for (i = 0; i < ewram0.var10C->var0; i++) + for (i = 0; i < ewram0_4.var10C->var0; i++) { - ConvertEasyChatWordsToString(ewram0.words[i], &ewram0.varF4->words[r6], ewram0.var10C->var4[i].unk_0_2, 1); - r6 += ewram0.var10C->var4[i].unk_0_2; + ConvertEasyChatWordsToString(ewram0_4.words[i], &ewram0_4.varF4->words[r6], ewram0_4.var10C->var4[i].unk_0_2, 1); + r6 += ewram0_4.var10C->var4[i].unk_0_2; } - ptr = ewram0.varD8; - if (ewram0.var100 == 0) + ptr = ewram0_4.varD8; + if (ewram0_4.var100 == 0) { - ptr = sub_80F8D7C(ptr, ewram0.varF4->playerName); + ptr = sub_80F8D7C(ptr, ewram0_4.varF4->playerName); StringCopy(ptr, gOtherText_From); - ewram0.varF9 = ewram0.var10C->var2 - StringLength(ewram0.varD8); + ewram0_4.varF9 = ewram0_4.var10C->var2 - StringLength(ewram0_4.varD8); } else { ptr = StringCopy(ptr, gOtherText_From); - sub_80F8D7C(ptr, ewram0.varF4->playerName); - ewram0.varF9 = ewram0.var10C->var2; + sub_80F8D7C(ptr, ewram0_4.varF4->playerName); + ewram0_4.varF9 = ewram0_4.var10C->var2; } } @@ -352,25 +350,25 @@ static void sub_80F8E80(void) u8 x; u8 y = 0; - for (pos = 0; pos < ewram0.var10C->var0; pos++) + for (pos = 0; pos < ewram0_4.var10C->var0; pos++) { - if (ewram0.words[pos][0] == 0xFF) + if (ewram0_4.words[pos][0] == 0xFF) { continue; } - if (ewram0.words[pos][0] == 0x00) + if (ewram0_4.words[pos][0] == 0x00) { continue; } - x = ewram0.var10C->var4[pos].unk_0_4; - y += ewram0.var10C->var4[pos].unk_0_0; - MenuPrint(ewram0.words[pos], ewram0.var10C->var3_4 + x, ewram0.var10C->var3_0 + y); + x = ewram0_4.var10C->var4[pos].unk_0_4; + y += ewram0_4.var10C->var4[pos].unk_0_0; + MenuPrint(ewram0_4.words[pos], ewram0_4.var10C->var3_4 + x, ewram0_4.var10C->var3_0 + y); y += 2; } - MenuPrint(ewram0.varD8, ewram0.varF9, ewram0.var10C->var1); + MenuPrint(ewram0_4.varD8, ewram0_4.varF9, ewram0_4.var10C->var1); } static void sub_80F8F18(void) @@ -382,13 +380,13 @@ static void sub_80F8F18(void) static void sub_80F8F2C(void) { - if (ewram0.varFB != 0) + if (ewram0_4.varFB != 0) { AnimateSprites(); BuildOamBuffer(); } - ewram0.varF0(); + ewram0_4.varF0(); } static void sub_80F8F58(void) @@ -398,7 +396,7 @@ static void sub_80F8F58(void) local0 = UpdatePaletteFade(); if (local0 == 0) { - ewram0.varF0 = sub_80F8F78; + ewram0_4.varF0 = sub_80F8F78; } } @@ -407,7 +405,7 @@ static void sub_80F8F78(void) if (gMain.newKeys & (A_BUTTON | B_BUTTON)) { BeginNormalPaletteFade(-1, 0, 0, 16, 0); - ewram0.varF0 = sub_80F8FB4; + ewram0_4.varF0 = sub_80F8FB4; } } @@ -420,18 +418,18 @@ static void sub_80F8FB4(void) return; } - SetMainCallback2(ewram0.varEC); - switch (ewram0.varFB) + SetMainCallback2(ewram0_4.varEC); + switch (ewram0_4.varFB) { case 2: case 1: - local1 = sub_809D4A8(ewram0.varF4->species); + local1 = sub_809D4A8(ewram0_4.varF4->species); sub_809D608(local1); - sub_809D510(&gSprites[ewram0.varFC]); + sub_809D510(&gSprites[ewram0_4.varFC]); break; } - memset(&ewram0, 0, 0x110); + memset(&ewram0_4, 0, 0x110); ResetPaletteFade(); } diff --git a/src/pokemon/pokeblock_feed.c b/src/pokemon/pokeblock_feed.c index 5d6b215cd..b0b710803 100644 --- a/src/pokemon/pokeblock_feed.c +++ b/src/pokemon/pokeblock_feed.c @@ -19,8 +19,8 @@ #include "field_effect.h" #include "sound.h" #include "trig.h" +#include "ewram.h" -extern u8 ewram[]; extern struct MusicPlayerInfo gMPlay_BGM; extern u8 gPokeblockMonID; extern s16 gPokeblockGain; @@ -928,14 +928,11 @@ static bool8 sub_8148540(void) } } -#define ewram1D000 ((u16 *)(ewram + 0x1D000)) -#define ewram1D400 ((u16 *)(ewram + 0x1D400)) - static bool8 sub_81485CC(void) { u16 var = gUnknown_03005FA0[12] - gUnknown_03005FA0[4]; - gPokeblockFeedPokeSprite->pos2.x = ewram1D000[var]; + gPokeblockFeedPokeSprite->pos2.x = ewram1D000_2[var]; gPokeblockFeedPokeSprite->pos2.y = ewram1D400[var]; if (--gUnknown_03005FA0[4] == 0) @@ -960,7 +957,7 @@ static void sub_814862C(void) for (i = 0; i < r7 - 1; i++) { - s16* r3 = &ewram1D000[r8 + i]; + s16* r3 = &ewram1D000_2[r8 + i]; s16 r1 = *r3 - (var3); s16* r5 = &ewram1D400[r8 + i]; @@ -970,7 +967,7 @@ static void sub_814862C(void) *r5 -= r4 * (i + 1) / r7; } - ewram1D000[(r8 + r7) - 1] = var3; + ewram1D000_2[(r8 + r7) - 1] = var3; ewram1D400[(r8 + r7) - 1] = r9; } @@ -999,12 +996,12 @@ void sub_8148710(void) if (!var_24) { - ewram1D000[r4] = Sin(gUnknown_03005FA0[0], gUnknown_03005FA0[2] + r5 / 256) + r8; + ewram1D000_2[r4] = Sin(gUnknown_03005FA0[0], gUnknown_03005FA0[2] + r5 / 256) + r8; ewram1D400[r4] = Cos(gUnknown_03005FA0[0], gUnknown_03005FA0[3] + r5 / 256) + r7; } else { - ewram1D000[r4] = Sin(gUnknown_03005FA0[0], gUnknown_03005FA0[2] - r5 / 256) + r8; + ewram1D000_2[r4] = Sin(gUnknown_03005FA0[0], gUnknown_03005FA0[2] - r5 / 256) + r8; ewram1D400[r4] = Cos(gUnknown_03005FA0[0], gUnknown_03005FA0[3] - r5 / 256) + r7; } diff --git a/src/pokemon/pokemon_storage_system.c b/src/pokemon/pokemon_storage_system.c index 5e97523e2..4a68b846a 100644 --- a/src/pokemon/pokemon_storage_system.c +++ b/src/pokemon/pokemon_storage_system.c @@ -2,6 +2,7 @@ #include "pokemon_storage_system.h" #include "menu.h" #include "string_util.h" +#include "ewram.h" struct StorageAction { u8 *text; @@ -10,15 +11,8 @@ struct StorageAction { extern const struct StorageAction gUnknown_083B6DF4[]; -extern const u8 unk_2000000[]; - EWRAM_DATA struct PokemonStorage gPokemonStorage = {0}; -#define gUnk2002694 (u8 *)(&unk_2000000[0x2694]) -#define gUnk20026A6 (u8 *)(&unk_2000000[0x26a6]) -#define gUnk20011fa (u8 *)(&unk_2000000[0x11fa]) -#define gUnk20026e4 (u8 *)(&unk_2000000[0x26e4]) - void sub_8098898(u8 index) { u8 *ptr; diff --git a/src/rom3.c b/src/rom3.c index 75dfdf2a2..0cd73c44a 100644 --- a/src/rom3.c +++ b/src/rom3.c @@ -16,11 +16,7 @@ #include "util.h" #include "battle_message.h" #include "data2.h" - -extern u8 unk_2000000[]; - -#define EWRAM_14000 ((u8 *)(unk_2000000 + 0x14000)) -#define EWRAM_15000 ((u8 *)(unk_2000000 + 0x15000)) +#include "ewram.h" extern u16 gBattleTypeFlags; extern u16 gBattleWeather; @@ -403,16 +399,16 @@ void PrepareBufferDataTransferLink(u8 a, u16 size, u8 *data) gTasks[gUnknown_020238C4].data[12] = gTasks[gUnknown_020238C4].data[14]; gTasks[gUnknown_020238C4].data[14] = 0; } - unk_2000000[gTasks[gUnknown_020238C4].data[14] + 0x14000] = a; - unk_2000000[gTasks[gUnknown_020238C4].data[14] + 0x14001] = gActiveBank; - unk_2000000[gTasks[gUnknown_020238C4].data[14] + 0x14002] = gBankAttacker; - unk_2000000[gTasks[gUnknown_020238C4].data[14] + 0x14003] = gBankTarget; - unk_2000000[gTasks[gUnknown_020238C4].data[14] + 0x14004] = r9; - unk_2000000[gTasks[gUnknown_020238C4].data[14] + 0x14005] = (r9 & 0x0000FF00) >> 8; - unk_2000000[gTasks[gUnknown_020238C4].data[14] + 0x14006] = gAbsentBankFlags; - unk_2000000[gTasks[gUnknown_020238C4].data[14] + 0x14007] = gEffectBank; + ewram[gTasks[gUnknown_020238C4].data[14] + 0x14000] = a; + ewram[gTasks[gUnknown_020238C4].data[14] + 0x14001] = gActiveBank; + ewram[gTasks[gUnknown_020238C4].data[14] + 0x14002] = gBankAttacker; + ewram[gTasks[gUnknown_020238C4].data[14] + 0x14003] = gBankTarget; + ewram[gTasks[gUnknown_020238C4].data[14] + 0x14004] = r9; + ewram[gTasks[gUnknown_020238C4].data[14] + 0x14005] = (r9 & 0x0000FF00) >> 8; + ewram[gTasks[gUnknown_020238C4].data[14] + 0x14006] = gAbsentBankFlags; + ewram[gTasks[gUnknown_020238C4].data[14] + 0x14007] = gEffectBank; for (i = 0; i < size; i++) - unk_2000000[gTasks[gUnknown_020238C4].data[14] + 0x14008 + i] = data[i]; + ewram[gTasks[gUnknown_020238C4].data[14] + 0x14008 + i] = data[i]; gTasks[gUnknown_020238C4].data[14] = gTasks[gUnknown_020238C4].data[14] + r9 + 8; } @@ -452,8 +448,8 @@ void sub_800C1A8(u8 taskId) gTasks[taskId].data[12] = 0; gTasks[taskId].data[15] = 0; } - var = (unk_2000000[gTasks[taskId].data[15] + 0x14004] | (unk_2000000[gTasks[taskId].data[15] + 0x14005] << 8)) + 8; - SendBlock(bitmask_all_link_players_but_self(), &unk_2000000[gTasks[taskId].data[15] + 0x14000], var); + var = (ewram[gTasks[taskId].data[15] + 0x14004] | (ewram[gTasks[taskId].data[15] + 0x14005] << 8)) + 8; + SendBlock(bitmask_all_link_players_but_self(), &ewram[gTasks[taskId].data[15] + 0x14000], var); gTasks[taskId].data[11]++; } else @@ -466,7 +462,7 @@ void sub_800C1A8(u8 taskId) case 4: if (sub_8007ECC()) { - var = unk_2000000[gTasks[taskId].data[15] + 0x14004] | (unk_2000000[gTasks[taskId].data[15] + 0x14005] << 8); + var = ewram[gTasks[taskId].data[15] + 0x14004] | (ewram[gTasks[taskId].data[15] + 0x14005] << 8); gTasks[taskId].data[13] = 1; gTasks[taskId].data[15] = gTasks[taskId].data[15] + var + 8; gTasks[taskId].data[11] = 3; @@ -537,28 +533,28 @@ void sub_800C47C(u8 taskId) gTasks[taskId].data[12] = 0; gTasks[taskId].data[15] = 0; } - r4 = unk_2000000[0x15000 + gTasks[taskId].data[15] + 1]; - r7 = unk_2000000[0x15000 + gTasks[taskId].data[15] + 4] | (unk_2000000[0x15000 + gTasks[taskId].data[15] + 5] << 8); - switch (unk_2000000[0x15000 + gTasks[taskId].data[15] + 0]) + r4 = ewram[0x15000 + gTasks[taskId].data[15] + 1]; + r7 = ewram[0x15000 + gTasks[taskId].data[15] + 4] | (ewram[0x15000 + gTasks[taskId].data[15] + 5] << 8); + switch (ewram[0x15000 + gTasks[taskId].data[15] + 0]) { case 0: if (gBattleExecBuffer & gBitTable[r4]) return; - memcpy(gBattleBufferA[r4], &unk_2000000[0x15000 + gTasks[taskId].data[15] + 8], r7); + memcpy(gBattleBufferA[r4], &ewram[0x15000 + gTasks[taskId].data[15] + 8], r7); sub_80155A4(r4); if (!(gBattleTypeFlags & BATTLE_TYPE_WILD)) { - gBankAttacker = unk_2000000[0x15000 + gTasks[taskId].data[15] + 2]; - gBankTarget = unk_2000000[0x15000 + gTasks[taskId].data[15] + 3]; - gAbsentBankFlags = unk_2000000[0x15000 + gTasks[taskId].data[15] + 6]; - gEffectBank = unk_2000000[0x15000 + gTasks[taskId].data[15] + 7]; + gBankAttacker = ewram[0x15000 + gTasks[taskId].data[15] + 2]; + gBankTarget = ewram[0x15000 + gTasks[taskId].data[15] + 3]; + gAbsentBankFlags = ewram[0x15000 + gTasks[taskId].data[15] + 6]; + gEffectBank = ewram[0x15000 + gTasks[taskId].data[15] + 7]; } break; case 1: - memcpy(gBattleBufferB[r4], &unk_2000000[0x15000 + gTasks[taskId].data[15] + 8], r7); + memcpy(gBattleBufferB[r4], &ewram[0x15000 + gTasks[taskId].data[15] + 8], r7); break; case 2: - r2 = unk_2000000[0x15000 + gTasks[taskId].data[15] + 8]; + r2 = ewram[0x15000 + gTasks[taskId].data[15] + 8]; gBattleExecBuffer &= ~(gBitTable[r4] << (r2 * 4)); break; } diff --git a/src/scene/credits.c b/src/scene/credits.c index cf10137c1..882dc557f 100644 --- a/src/scene/credits.c +++ b/src/scene/credits.c @@ -16,6 +16,7 @@ #include "starter_choose.h" #include "task.h" #include "trig.h" +#include "ewram.h" asm(".set REG_BASE, 0x4000000"); asm(".set OFFSET_REG_BLDCNT, 0x50"); @@ -162,14 +163,6 @@ struct CreditsEntry u8 *text; }; -extern u8 ewram[]; - -#define EWRAM_1F800 ((u16 *)(ewram + 0x1F800)) -#define HALL_OF_FAME_SHEET_0 ((u8 *)(ewram + 0x1E000)) -#define HALL_OF_FAME_SHEET_1 ((u8 *)(ewram + 0x1E800)) -#define HALL_OF_FAME_SHEET_2 ((u8 *)(ewram + 0x1F000)) -#define ewram1c000 (*(struct Unk201C000 *)(ewram + 0x1C000)) - extern struct HallOfFame gHallOfFame; extern u8 unk_201e800[0x800]; extern u8 unk_201f000[0x800]; diff --git a/src/scene/evolution_scene.c b/src/scene/evolution_scene.c index 24168dc56..73cb7e5e7 100644 --- a/src/scene/evolution_scene.c +++ b/src/scene/evolution_scene.c @@ -24,6 +24,7 @@ #include "pokemon_summary_screen.h" #include "menu_cursor.h" #include "strings2.h" +#include "ewram.h" struct EvoInfo { @@ -55,8 +56,6 @@ struct EvoInfo u8 unkA0C4; // 0x201E8C4 }; -#define sEvoInfo ((*(struct EvoInfo*)(ewram + 0x14800))) - void EvolutionRenameMon(struct Pokemon *mon, u16 oldSpecies, u16 newSpecies); void sub_8024CEC(void); void sub_8023A80(void); diff --git a/src/script_pokemon_util_80F99CC.c b/src/script_pokemon_util_80F99CC.c index e303d5173..b9c84b9e7 100644 --- a/src/script_pokemon_util_80F99CC.c +++ b/src/script_pokemon_util_80F99CC.c @@ -272,7 +272,7 @@ void HandleMoveTutorPartyMenu(u8 var) void sub_80F9EEC(void) { sub_809D9F0(&gPlayerParty[0], gSpecialVar_0x8004, gPlayerPartyCount - 1, c2_exit_to_overworld_2_switch, 0); - unk_2018000.unk8 = 3; + UNK_2018000_STRUCT.unk8 = 3; gFieldCallback = sub_8080990; } -- cgit v1.2.3 From 5fc9a151463ade7d260ce5f105674908d6e4449d Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Sun, 5 Nov 2017 12:55:45 -0500 Subject: move ewram.h includes in include/ to src files. --- src/battle/battle_2.c | 22 ++++++++++------------ src/battle/battle_3.c | 9 ++------- src/battle/battle_4.c | 1 + src/battle/battle_ai.c | 1 + src/battle/battle_anim.c | 1 + src/battle/battle_anim_807B69C.c | 1 + src/battle/battle_controller_linkopponent.c | 1 + src/battle/battle_controller_linkpartner.c | 1 + src/battle/battle_controller_opponent.c | 1 + src/battle/battle_controller_player.c | 1 + src/battle/battle_controller_safari.c | 1 + src/battle/battle_controller_wally.c | 1 + src/battle/battle_message.c | 1 + src/battle/pokeball.c | 1 + src/engine/link.c | 1 + src/engine/trade.c | 1 + src/field/choose_party.c | 3 ++- src/field/decoration.c | 1 + src/field/dewford_trend.c | 1 + src/field/field_region_map.c | 22 +++++++++++----------- src/pokemon/pokemon_3.c | 1 + src/pokemon/pokemon_menu.c | 1 + src/rom_800D42C.c | 1 + src/script_pokemon_util_80C4BF0.c | 1 + src/script_pokemon_util_80F99CC.c | 1 + 25 files changed, 46 insertions(+), 31 deletions(-) (limited to 'src') diff --git a/src/battle/battle_2.c b/src/battle/battle_2.c index 5a37a6169..26433b055 100644 --- a/src/battle/battle_2.c +++ b/src/battle/battle_2.c @@ -253,8 +253,8 @@ void sub_800E9EC(void) if (species != SPECIES_EGG && hp == 0) r6 |= 3 << i * 2; } - ewram0.unk2 = r6; - ewram0.unk3 = r6 >> 8; + BATTLE_STRUCT->unk2 = r6; + BATTLE_STRUCT->unk3 = r6 >> 8; } void sub_800EAAC(void) @@ -350,11 +350,11 @@ void sub_800EC9C(void) { if (gReceivedRemoteLinkPlayers != 0 && sub_8007ECC()) { - ewram0.unk0 = 1; - ewram0.unk1 = 1; + BATTLE_STRUCT->unk0 = 1; + BATTLE_STRUCT->unk1 = 1; sub_800E9EC(); sub_800EAAC(); - SendBlock(bitmask_all_link_players_but_self(), &ewram0, 32); + SendBlock(bitmask_all_link_players_but_self(), BATTLE_STRUCT, 32); gBattleCommunication[0] = 1; } } @@ -410,7 +410,7 @@ void sub_800EC9C(void) gTasks[taskId].data[1] = 0x10E; gTasks[taskId].data[2] = 0x5A; gTasks[taskId].data[5] = 0; - gTasks[taskId].data[3] = ewram0.unk2 | (ewram0.unk3 << 8); + gTasks[taskId].data[3] = BATTLE_STRUCT->unk2 | (BATTLE_STRUCT->unk3 << 8); gTasks[taskId].data[4] = gBlockRecvBuffer[enemyId][1]; gBattleCommunication[0]++; } @@ -593,8 +593,8 @@ void sub_800F298(void) case 0: if (gReceivedRemoteLinkPlayers != 0 && sub_8007ECC()) { - ewram0.unk0 = 1; - ewram0.unk1 = 1; + BATTLE_STRUCT->unk0 = 1; + BATTLE_STRUCT->unk1 = 1; sub_800E9EC(); sub_800EAAC(); SendBlock(bitmask_all_link_players_but_self(), ewram, 0x20); @@ -1537,7 +1537,7 @@ void sub_8010874(void) gUnknown_02024C5C[i] = 0xFF; gLockedMove[i] = 0; gUnknown_02024C2C[i] = 0; - ewram17100[i] = 0; + ewram17100.arr[i] = 0; } for (i = 0; i < 2; i++) @@ -1621,7 +1621,6 @@ void SwitchInClearStructs(void) struct DisableStruct sp0 = gDisableStructs[gActiveBank]; s32 i; u8 *ptr; - u32 *ptr2; if (gBattleMoves[gCurrentMove].effect != EFFECT_BATON_PASS) { @@ -1700,8 +1699,7 @@ void SwitchInClearStructs(void) ewram[0x160E8 + gActiveBank * 2 + 0] = 0; ewram[0x160E8 + gActiveBank * 2 + 1] = 0; - ptr2 = (u32 *)(ewram + 0x17100); - ptr2[gActiveBank] = 0; + ewram17100.arr[gActiveBank] = 0; gCurrentMove = 0; } diff --git a/src/battle/battle_3.c b/src/battle/battle_3.c index e8819781d..3f2b8d9e5 100644 --- a/src/battle/battle_3.c +++ b/src/battle/battle_3.c @@ -1433,11 +1433,6 @@ u8 CastformDataTypeChange(u8 bank) return formChange; } -struct Struct2017100 -{ - u32 arr[4]; -}; - u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) { u8 effect = 0; @@ -1723,14 +1718,14 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) case ABILITY_FLASH_FIRE: if (moveType == TYPE_FIRE && !(gBattleMons[bank].status1 & STATUS_FREEZE)) { - if (!(ewram17100_2.arr[bank] & 1)) + if (!(ewram17100.arr[bank] & 1)) { gBattleCommunication[MULTISTRING_CHOOSER] = 0; if (gProtectStructs[gBankAttacker].notFirstStrike) gBattlescriptCurrInstr = BattleScript_FlashFireBoost; else gBattlescriptCurrInstr = BattleScript_FlashFireBoost_PPLoss; - ewram17100_2.arr[bank] |= 1; + ewram17100.arr[bank] |= 1; effect = 2; } else diff --git a/src/battle/battle_4.c b/src/battle/battle_4.c index 3fee71a5f..5daadd4b5 100644 --- a/src/battle/battle_4.c +++ b/src/battle/battle_4.c @@ -19,6 +19,7 @@ #include "task.h" #include "decompress.h" #include "naming_screen.h" +#include "ewram.h" //extern needed variables extern u8 gCritMultiplier; diff --git a/src/battle/battle_ai.c b/src/battle/battle_ai.c index 9c6d2bec4..aeac41750 100644 --- a/src/battle/battle_ai.c +++ b/src/battle/battle_ai.c @@ -11,6 +11,7 @@ #include "rom_8077ABC.h" #include "species.h" #include "util.h" +#include "ewram.h" extern u16 gBattleTypeFlags; extern u16 gBattleWeather; diff --git a/src/battle/battle_anim.c b/src/battle/battle_anim.c index 0c04ff9b8..408a21f86 100644 --- a/src/battle/battle_anim.c +++ b/src/battle/battle_anim.c @@ -12,6 +12,7 @@ #include "sound.h" #include "sprite.h" #include "task.h" +#include "ewram.h" // sprites start at 10000 and thus must be subtracted of 10000 to account for the true index. #define GET_TRUE_SPRITE_INDEX(i) (i - 10000) diff --git a/src/battle/battle_anim_807B69C.c b/src/battle/battle_anim_807B69C.c index 9acc7bd46..7fcd1e23f 100644 --- a/src/battle/battle_anim_807B69C.c +++ b/src/battle/battle_anim_807B69C.c @@ -7,6 +7,7 @@ #include "sprite.h" #include "task.h" #include "trig.h" +#include "ewram.h" extern u8 gBattleAnimBankAttacker; extern u8 gBattleAnimBankTarget; diff --git a/src/battle/battle_controller_linkopponent.c b/src/battle/battle_controller_linkopponent.c index ff4df81e4..107c374a0 100644 --- a/src/battle/battle_controller_linkopponent.c +++ b/src/battle/battle_controller_linkopponent.c @@ -15,6 +15,7 @@ #include "task.h" #include "text.h" #include "util.h" +#include "ewram.h" struct UnknownStruct3 { diff --git a/src/battle/battle_controller_linkpartner.c b/src/battle/battle_controller_linkpartner.c index a874190aa..25deebf78 100644 --- a/src/battle/battle_controller_linkpartner.c +++ b/src/battle/battle_controller_linkpartner.c @@ -19,6 +19,7 @@ #include "task.h" #include "text.h" #include "util.h" +#include "ewram.h" struct UnknownStruct1 { diff --git a/src/battle/battle_controller_opponent.c b/src/battle/battle_controller_opponent.c index 392e80f08..94ae43461 100644 --- a/src/battle/battle_controller_opponent.c +++ b/src/battle/battle_controller_opponent.c @@ -20,6 +20,7 @@ #include "task.h" #include "text.h" #include "util.h" +#include "ewram.h" struct UnknownStruct3 { diff --git a/src/battle/battle_controller_player.c b/src/battle/battle_controller_player.c index 136c31841..f2fa16593 100644 --- a/src/battle/battle_controller_player.c +++ b/src/battle/battle_controller_player.c @@ -19,6 +19,7 @@ #include "task.h" #include "text.h" #include "util.h" +#include "ewram.h" //Possibly PokemonSubstruct1 struct UnknownStruct3 diff --git a/src/battle/battle_controller_safari.c b/src/battle/battle_controller_safari.c index 2fcdf7548..5b89cf9ba 100644 --- a/src/battle/battle_controller_safari.c +++ b/src/battle/battle_controller_safari.c @@ -12,6 +12,7 @@ #include "sound.h" #include "text.h" #include "util.h" +#include "ewram.h" extern struct Window gUnknown_03004210; extern u8 gDisplayedStringBattle[]; diff --git a/src/battle/battle_controller_wally.c b/src/battle/battle_controller_wally.c index 9d70ca557..be065e071 100644 --- a/src/battle/battle_controller_wally.c +++ b/src/battle/battle_controller_wally.c @@ -17,6 +17,7 @@ #include "task.h" #include "text.h" #include "util.h" +#include "ewram.h" //Possibly PokemonSubstruct1 struct UnknownStruct3 diff --git a/src/battle/battle_message.c b/src/battle/battle_message.c index 79855a614..f98c065b0 100644 --- a/src/battle/battle_message.c +++ b/src/battle/battle_message.c @@ -12,6 +12,7 @@ #include "battle_setup.h" #include "battle_tower.h" #include "flags.h" +#include "ewram.h" #define BATTLESTRING_TO_SUB 12 #define BATTLESTRINGS_NO 351 diff --git a/src/battle/pokeball.c b/src/battle/pokeball.c index ee3b95678..afdf47979 100644 --- a/src/battle/pokeball.c +++ b/src/battle/pokeball.c @@ -14,6 +14,7 @@ #include "task.h" #include "trig.h" #include "util.h" +#include "ewram.h" extern struct MusicPlayerInfo gMPlay_BGM; extern u16 gBattleTypeFlags; diff --git a/src/engine/link.c b/src/engine/link.c index 86413cfbf..504b828a1 100644 --- a/src/engine/link.c +++ b/src/engine/link.c @@ -15,6 +15,7 @@ #include "strings2.h" #include "task.h" #include "text.h" +#include "ewram.h" #define SIO_MULTI_CNT ((struct SioMultiCnt *)REG_ADDR_SIOCNT) diff --git a/src/engine/trade.c b/src/engine/trade.c index b11b7e448..63571ecac 100644 --- a/src/engine/trade.c +++ b/src/engine/trade.c @@ -39,6 +39,7 @@ #include "util.h" #include "battle_interface.h" #include "trade.h" +#include "ewram.h" #ifdef ENGLISH #define sub_804A96C_alt sub_804A96C diff --git a/src/field/choose_party.c b/src/field/choose_party.c index adb210e7b..891ee48b8 100644 --- a/src/field/choose_party.c +++ b/src/field/choose_party.c @@ -17,6 +17,7 @@ #include "string_util.h" #include "task.h" #include "text.h" +#include "ewram.h" extern u8 gPlayerPartyCount; extern u8 gLastFieldPokeMenuOpened; @@ -34,7 +35,7 @@ extern void sub_806BC3C(u8, u8); extern void ShowPokemonSummaryScreen(struct Pokemon *, u8, u8, void (*)(void), int); extern u8 GetMonStatusAndPokerus(); extern void PartyMenuPrintHP(); -extern bool8 sub_80F9344(void); +extern bool8 sub_80F9344(void); static void ClearPartySelection(void); static bool8 IsMonAllowedInBattleTower(struct Pokemon *); diff --git a/src/field/decoration.c b/src/field/decoration.c index 59c19c20a..924c94b59 100644 --- a/src/field/decoration.c +++ b/src/field/decoration.c @@ -18,6 +18,7 @@ #include "event_data.h" #include "field_weather.h" #include "decoration.h" +#include "ewram.h" EWRAM_DATA u8 *gUnknown_020388D0 = NULL; EWRAM_DATA u8 gUnknown_020388D4 = 0; diff --git a/src/field/dewford_trend.c b/src/field/dewford_trend.c index f47dbba08..5f4d5abfe 100644 --- a/src/field/dewford_trend.c +++ b/src/field/dewford_trend.c @@ -5,6 +5,7 @@ #include "link.h" #include "rng.h" #include "text.h" +#include "ewram.h" extern u8 ewram[]; diff --git a/src/field/field_region_map.c b/src/field/field_region_map.c index e189fcf2c..73e101d8f 100644 --- a/src/field/field_region_map.c +++ b/src/field/field_region_map.c @@ -28,8 +28,8 @@ struct UnkStruct void FieldInitRegionMap(MainCallback callback) { SetVBlankCallback(NULL); - unk_2000000.unk888 = 0; - unk_2000000.callback = callback; + ewram0_5.unk888 = 0; + ewram0_5.callback = callback; SetMainCallback2(CB2_FieldInitRegionMap); } @@ -47,7 +47,7 @@ void CB2_FieldInitRegionMap(void) ResetSpriteData(); FreeAllSpritePalettes(); // TODO: remove this cast - InitRegionMap((void *)&unk_2000000.unk8, 0); + InitRegionMap((void *)&ewram0_5.unk8, 0); CreateRegionMapPlayerIcon(0, 0); CreateRegionMapCursor(1, 1); SetUpWindowConfig(&gWindowConfig_81E709C); @@ -80,15 +80,15 @@ void CB2_FieldRegionMap(void) void sub_813EFDC(void) { - switch (unk_2000000.unk888) + switch (ewram0_5.unk888) { case 0: REG_DISPCNT = DISPCNT_MODE_1 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG2_ON | DISPCNT_OBJ_ON; - unk_2000000.unk888++; + ewram0_5.unk888++; break; case 1: if (!gPaletteFade.active) - unk_2000000.unk888++; + ewram0_5.unk888++; break; case 2: switch (sub_80FAB60()) @@ -98,18 +98,18 @@ void sub_813EFDC(void) break; case 4: case 5: - unk_2000000.unk888++; + ewram0_5.unk888++; } break; case 3: BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, 0); - unk_2000000.unk888++; + ewram0_5.unk888++; break; case 4: if (!gPaletteFade.active) { FreeRegionMapIconResources(); - SetMainCallback2(unk_2000000.callback); + SetMainCallback2(ewram0_5.callback); } break; } @@ -118,6 +118,6 @@ void sub_813EFDC(void) void sub_813F0C8(void) { MenuFillWindowRectWithBlankTile(17, 17, 28, 18); - if (unk_2000000.unk8.unk16) - MenuPrint(unk_2000000.unk8.str, 17, 17); + if (ewram0_5.unk8.unk16) + MenuPrint(ewram0_5.unk8.str, 17, 17); } diff --git a/src/pokemon/pokemon_3.c b/src/pokemon/pokemon_3.c index 9c2cb4730..19786e506 100644 --- a/src/pokemon/pokemon_3.c +++ b/src/pokemon/pokemon_3.c @@ -22,6 +22,7 @@ #include "string_util.h" #include "text.h" #include "util.h" +#include "ewram.h" extern u8 gPlayerPartyCount; extern u8 gEnemyPartyCount; diff --git a/src/pokemon/pokemon_menu.c b/src/pokemon/pokemon_menu.c index 7d70e7708..93a3dd797 100644 --- a/src/pokemon/pokemon_menu.c +++ b/src/pokemon/pokemon_menu.c @@ -29,6 +29,7 @@ #include "fieldmap.h" #include "item_menu.h" #include "player_pc.h" +#include "ewram.h" /* Pokemon menu: diff --git a/src/rom_800D42C.c b/src/rom_800D42C.c index f51779e65..bf6d03fb7 100644 --- a/src/rom_800D42C.c +++ b/src/rom_800D42C.c @@ -2,6 +2,7 @@ #include "battle.h" #include "link.h" #include "text.h" +#include "ewram.h" extern u16 gBattleTypeFlags; extern u8 gBattleOutcome; diff --git a/src/script_pokemon_util_80C4BF0.c b/src/script_pokemon_util_80C4BF0.c index f98293a90..011978a0c 100644 --- a/src/script_pokemon_util_80C4BF0.c +++ b/src/script_pokemon_util_80C4BF0.c @@ -22,6 +22,7 @@ #include "script_pokemon_80C4.h" #include "species.h" #include "task.h" +#include "ewram.h" #define CONTEST_ENTRY_PIC_LEFT 10 #define CONTEST_ENTRY_PIC_TOP 3 diff --git a/src/script_pokemon_util_80F99CC.c b/src/script_pokemon_util_80F99CC.c index b9c84b9e7..21ff220d2 100644 --- a/src/script_pokemon_util_80F99CC.c +++ b/src/script_pokemon_util_80F99CC.c @@ -17,6 +17,7 @@ #include "string_util.h" #include "task.h" #include "text.h" +#include "ewram.h" extern u8 gPlayerPartyCount; extern u16 gSpecialVar_0x8004; -- cgit v1.2.3 From 618240c62639bc4da73d400965b6df67b2c3619e Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Sun, 5 Nov 2017 23:07:39 -0500 Subject: move src/engine/ direct ewram calls to ewram.h. --- src/battle/battle_2.c | 72 ++++++++++++------------- src/battle/battle_3.c | 16 +++--- src/battle/battle_4.c | 96 ++++++++++++++++----------------- src/battle/battle_ai.c | 7 ++- src/battle/battle_controller_opponent.c | 10 ++-- src/battle/battle_controller_player.c | 6 +-- src/battle/battle_controller_wally.c | 56 +++++++++---------- src/battle/battle_interface.c | 4 +- src/battle/battle_message.c | 2 +- src/battle/battle_transition.c | 4 +- src/debug/matsuda_debug_menu.c | 40 +++++++------- src/engine/main_menu.c | 6 +-- src/engine/mystery_event_menu.c | 6 +-- src/engine/save.c | 16 +++--- src/engine/save_failed_screen.c | 4 +- src/field/berry_tag_screen.c | 22 ++++---- src/field/slot_machine.c | 4 +- src/pokemon/pokemon_1.c | 8 +-- src/scene/contest_painting.c | 8 +-- src/scene/intro.c | 10 ++-- 20 files changed, 194 insertions(+), 203 deletions(-) (limited to 'src') diff --git a/src/battle/battle_2.c b/src/battle/battle_2.c index 26433b055..38c60dee1 100644 --- a/src/battle/battle_2.c +++ b/src/battle/battle_2.c @@ -522,8 +522,8 @@ void sub_800F104(void) playerId = GetMultiplayerId(); ewram160CB = playerId; // Seriously, Game Freak? - pSavedCallback = (MainCallback *)(ewram + 0x160C4); - pSavedBattleTypeFlags = (u16 *)(ewram + 0x160C2); + pSavedCallback = ewram160C4_Callback; + pSavedBattleTypeFlags = ewram160C2_Flags; RunTasks(); AnimateSprites(); BuildOamBuffer(); @@ -1581,12 +1581,12 @@ void sub_8010874(void) for (i = 0; i < 8; i++) { - ewram[i + 0x160AC] = 0; - ewram[i + 0x160CC] = 0; - ewram[i + 0x160E8] = 0; - ewram[i + 0x160F0] = 0; - ewram[i + 0x16100] = 0; - ewram[i + 0x16108] = 0; + ewram160ACarr(i) = 0; + ewram160CCarr(i) = 0; + ewram160E8arr(i) = 0; + ewram160F0arr(i) = 0; + ewram16100arr(i) = 0; + ewram16108arr(i) = 0; } ewram160C8 = 6; @@ -1665,7 +1665,7 @@ void SwitchInClearStructs(void) { if (gUnknown_02024AD0[i].unk0 & (gBitTable[gActiveBank] << 16)) gUnknown_02024AD0[i].unk0 &= ~(gBitTable[gActiveBank] << 16); - if ((gUnknown_02024AD0[i].unk0 & 0xE000) && ewram[0x16020 + i] == gActiveBank) + if ((gUnknown_02024AD0[i].unk0 & 0xE000) && ewram16020arr(i) == gActiveBank) gUnknown_02024AD0[i].unk0 &= ~0xE000; } @@ -1690,14 +1690,14 @@ void SwitchInClearStructs(void) gUnknown_02024C2C[gActiveBank] = 0; gUnknown_02024C5C[gActiveBank] = 0xFF; - ewram[0x160AC + gActiveBank * 2 + 0] = 0; - ewram[0x160AC + gActiveBank * 2 + 1] = 0; - ewram[0x16100 + gActiveBank * 4 + 0] = 0; - ewram[0x16100 + gActiveBank * 4 + 1] = 0; - ewram[0x16100 + gActiveBank * 4 + 2] = 0; - ewram[0x16100 + gActiveBank * 4 + 3] = 0; - ewram[0x160E8 + gActiveBank * 2 + 0] = 0; - ewram[0x160E8 + gActiveBank * 2 + 1] = 0; + ewram160ACarr2(0, gActiveBank) = 0; + ewram160ACarr2(1, gActiveBank) = 0; + ewram16100arr2(0, gActiveBank) = 0; + ewram16100arr2(1, gActiveBank) = 0; + ewram16100arr2(2, gActiveBank) = 0; + ewram16100arr2(3, gActiveBank) = 0; + ewram160E8arr2(0, gActiveBank) = 0; + ewram160E8arr2(1, gActiveBank) = 0; ewram17100.arr[gActiveBank] = 0; @@ -1708,7 +1708,6 @@ void UndoEffectsAfterFainting(void) { s32 i; u8 *ptr; - u32 *ptr2; for (i = 0; i < 8; i++) gBattleMons[gActiveBank].statStages[i] = 6; @@ -1720,7 +1719,7 @@ void UndoEffectsAfterFainting(void) gBattleMons[i].status2 &= ~STATUS2_ESCAPE_PREVENTION; if (gBattleMons[i].status2 & (gBitTable[gActiveBank] << 16)) gBattleMons[i].status2 &= ~(gBitTable[gActiveBank] << 16); - if ((gBattleMons[i].status2 & STATUS2_WRAPPED) && ewram[0x16020 + i] == gActiveBank) + if ((gBattleMons[i].status2 & STATUS2_WRAPPED) && ewram16020arr(i) == gActiveBank) gBattleMons[i].status2 &= ~STATUS2_WRAPPED; } gActionSelectionCursor[gActiveBank] = 0; @@ -1755,17 +1754,16 @@ void UndoEffectsAfterFainting(void) gUnknown_02024C2C[gActiveBank] = 0; gUnknown_02024C5C[gActiveBank] = 0xFF; - ewram[0x160E8 + gActiveBank * 2 + 0] = 0; - ewram[0x160E8 + gActiveBank * 2 + 1] = 0; - ewram[0x160AC + gActiveBank * 2 + 0] = 0; - ewram[0x160AC + gActiveBank * 2 + 1] = 0; - ewram[0x16100 + gActiveBank * 4 + 0] = 0; - ewram[0x16100 + gActiveBank * 4 + 1] = 0; - ewram[0x16100 + gActiveBank * 4 + 2] = 0; - ewram[0x16100 + gActiveBank * 4 + 3] = 0; + ewram160E8arr2(0, gActiveBank) = 0; + ewram160E8arr2(1, gActiveBank) = 0; + ewram160ACarr2(0, gActiveBank) = 0; + ewram160ACarr2(1, gActiveBank) = 0; + ewram16100arr2(0, gActiveBank) = 0; + ewram16100arr2(1, gActiveBank) = 0; + ewram16100arr2(2, gActiveBank) = 0; + ewram16100arr2(3, gActiveBank) = 0; - ptr2 = (u32 *)(ewram + 0x17100); - ptr2[gActiveBank] = 0; + ewram17100.arr[gActiveBank] = 0; gBattleMons[gActiveBank].type1 = gBaseStats[gBattleMons[gActiveBank].species].type1; gBattleMons[gActiveBank].type2 = gBaseStats[gBattleMons[gActiveBank].species].type2; @@ -2126,7 +2124,7 @@ void BattleBeginFirstTurn(void) ; for (i = 0; i < 4; i++) { - ewram[0x16068 + i] = 6; + ewram16068arr(i) = 6; gActionForBanks[i] = 0xFF; gChosenMovesByBanks[i] = 0; } @@ -2218,7 +2216,7 @@ void BattleTurnPassed(void) gChosenMovesByBanks[i] = 0; } for (i = 0; i < 4; i++) - ewram[0x16068 + i] = 6; + ewram16068arr(i) = 6; ewram160A6 = gAbsentBankFlags; gBattleMainFunc = sub_8012324; gRandomTurnNumber = Random(); @@ -2292,23 +2290,23 @@ void sub_8012258(u8 a) u8 r1; for (i = 0; i < 3; i++) - gUnknown_02038470[i] = ewram[0x1606C + i + a * 3]; + gUnknown_02038470[i] = ewram1606Carr(i, a, 3); r4 = pokemon_order_func(gBattlePartyID[a]); - r1 = pokemon_order_func(ewram[0x16068 + a]); + r1 = pokemon_order_func(ewram16068arr(a)); sub_8094C98(r4, r1); if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) { for (i = 0; i < 3; i++) { - ewram[0x1606C + i + a * 3] = gUnknown_02038470[i]; - ewram[0x1606C + i + (a ^ 2) * 3] = gUnknown_02038470[i]; + ewram1606Carr(i, a, 3) = gUnknown_02038470[i]; + ewram1606Carr(i, (a ^ 2), 3) = gUnknown_02038470[i]; } } else { for (i = 0; i < 3; i++) { - ewram[0x1606C + i + a * 3] = gUnknown_02038470[i]; + ewram1606Carr(i, a, 3) = gUnknown_02038470[i]; } } } @@ -2327,7 +2325,7 @@ void sub_8012324(void) switch (gBattleCommunication[gActiveBank]) { case 0: - ewram[0x016068 + gActiveBank] = 6; + ewram16068arr(gActiveBank) = 6; if (!(gBattleTypeFlags & 0x40) && (r5 & 2) && !(ewram160A6 & gBitTable[GetBankByPlayerAI(r5 ^ 2)]) diff --git a/src/battle/battle_3.c b/src/battle/battle_3.c index 3f2b8d9e5..1d6784297 100644 --- a/src/battle/battle_3.c +++ b/src/battle/battle_3.c @@ -721,12 +721,12 @@ u8 TurnBasedEffects(void) gBattleMons[gActiveBank].status2 -= 0x2000; if (gBattleMons[gActiveBank].status2 & STATUS2_WRAPPED) // damaged by wrap { - BATTLE_STRUCT->animArg1 = ewram[gActiveBank * 2 + 0x16004]; - BATTLE_STRUCT->animArg2 = ewram[gActiveBank * 2 + 0x16005]; + BATTLE_STRUCT->animArg1 = ewram16004arr(0, gActiveBank); + BATTLE_STRUCT->animArg2 = ewram16004arr(1, gActiveBank); gBattleTextBuff1[0] = 0xFD; gBattleTextBuff1[1] = 2; - gBattleTextBuff1[2] = ewram[gActiveBank * 2 + 0x16004]; - gBattleTextBuff1[3] = ewram[gActiveBank * 2 + 0x16005]; + gBattleTextBuff1[2] = ewram16004arr(0, gActiveBank); + gBattleTextBuff1[3] = ewram16004arr(1, gActiveBank); gBattleTextBuff1[4] = EOS; gBattlescriptCurrInstr = BattleScript_WrapTurnDmg; gBattleMoveDamage = gBattleMons[gActiveBank].maxHP / 16; @@ -737,8 +737,8 @@ u8 TurnBasedEffects(void) { gBattleTextBuff1[0] = 0xFD; gBattleTextBuff1[1] = 2; - gBattleTextBuff1[2] = ewram[gActiveBank * 2 + 0x16004]; - gBattleTextBuff1[3] = ewram[gActiveBank * 2 + 0x16005]; + gBattleTextBuff1[2] = ewram16004arr(0, gActiveBank); + gBattleTextBuff1[3] = ewram16004arr(1, gActiveBank); gBattleTextBuff1[4] = EOS; gBattlescriptCurrInstr = BattleScript_WrapEnds; } @@ -1377,7 +1377,7 @@ bool8 sub_8018018(u8 bank, u8 r1, u8 r2) r2 = gBattlePartyID[r6]; for (i = 0; i < 6; i++) { - if (GetMonData(&party[i], MON_DATA_HP) && GetMonData(&party[i], MON_DATA_SPECIES2) && GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_EGG && i != r1 && i != r2 && i != ewram[r7 + 0x16068] && i != ewram[r6 + 0x16068]) + if (GetMonData(&party[i], MON_DATA_HP) && GetMonData(&party[i], MON_DATA_SPECIES2) && GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_EGG && i != r1 && i != r2 && i != ewram16068arr(r7) && i != ewram16068arr(r6)) break; } return (i == 6); @@ -3123,7 +3123,7 @@ u8 GetMoveTarget(u16 move, u8 useMoveTarget) //get move target targetBank = gBankAttacker; break; } - ewram[gBankAttacker + 0x16010] = targetBank; + ewram16010arr(gBankAttacker) = targetBank; return targetBank; } diff --git a/src/battle/battle_4.c b/src/battle/battle_4.c index 5daadd4b5..5c028d86b 100644 --- a/src/battle/battle_4.c +++ b/src/battle/battle_4.c @@ -2639,7 +2639,7 @@ void SetMoveEffect(bool8 primary, u8 certainArg) {gBattlescriptCurrInstr++; return;} gLastUsedItem = gBattleMons[gBankTarget].item; - ewram[gBankAttacker * 2 + 0x160cc] = gLastUsedItem; + USED_HELD_ITEM(bank) = gLastUsedItem; gBattleMons[gBankTarget].item = 0; gActiveBank = gBankAttacker; @@ -2653,8 +2653,7 @@ void SetMoveEffect(bool8 primary, u8 certainArg) b_movescr_stack_push(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = BattleScript_ItemSteal; - ewram[gBankTarget * 2 + 0x160e8] = 0; - //STORE_CHOICEMOVE(gBankTarget, 0); + CHOICED_MOVE(gBankTarget) = 0; } break; case 32: //escape prevention @@ -2729,8 +2728,7 @@ void SetMoveEffect(bool8 primary, u8 certainArg) b_movescr_stack_push(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = BattleScript_KnockedOff; - ewram[gEffectBank * 2 + 0x160e8] = 0; - //STORE_CHOICEMOVE(gEffectBank, 0); + CHOICED_MOVE(gEffectBank) = 0; } break; case 59: //overheat @@ -4998,12 +4996,12 @@ static void atk19_faint_pokemon(void) if (!(gAbsentBankFlags & gBitTable[gActiveBank]) && gBattleMons[gActiveBank].hp == 0) { - ewram[0x160AC + bank * 2 + 0] = 0; - ewram[0x160AC + bank * 2 + 1] = 0; - ewram[0x16100 + bank * 4 + 0] = 0; - ewram[0x16100 + bank * 4 + 1] = 0; - ewram[0x16100 + bank * 4 + 2] = 0; - ewram[0x16100 + bank * 4 + 3] = 0; + ewram160ACarr2(0, bank) = 0; + ewram160ACarr2(1, bank) = 0; + ewram16100arr2(0, bank) = 0; + ewram16100arr2(1, bank) = 0; + ewram16100arr2(2, bank) = 0; + ewram16100arr2(3, bank) = 0; gHitMarker |= HITMARKER_FAINTED(gActiveBank); b_movescr_stack_push(gBattlescriptCurrInstr + 7); @@ -5039,7 +5037,7 @@ static void atk19_faint_pokemon(void) && gBattleMons[gBankAttacker].hp != 0 && gCurrentMove != MOVE_STRUGGLE) { - u8 moveIndex = ewram[0x1608C + gBankAttacker]; + u8 moveIndex = ewram1608Carr(gBankAttacker); gBattleMons[gBankAttacker].pp[moveIndex] = 0; b_movescr_stack_push(gBattlescriptCurrInstr); @@ -5122,7 +5120,7 @@ static void atk1E_jumpifability(void) gLastUsedAbility = ability; gBattlescriptCurrInstr = jump_loc; RecordAbilityBattle(bank -1, gLastUsedAbility); - ewram[0x160f8] = bank - 1; + ewram160F8 = bank - 1; } else gBattlescriptCurrInstr += 7; @@ -5135,7 +5133,7 @@ static void atk1E_jumpifability(void) gLastUsedAbility = ability; gBattlescriptCurrInstr = jump_loc; RecordAbilityBattle(bank - 1, gLastUsedAbility); - ewram[0x160f8] = bank - 1; + ewram160F8 = bank - 1; } else gBattlescriptCurrInstr += 7; @@ -5148,7 +5146,7 @@ static void atk1E_jumpifability(void) gLastUsedAbility = ability; gBattlescriptCurrInstr = jump_loc; RecordAbilityBattle(bank, gLastUsedAbility); - ewram[0x160f8] = bank; + ewram160F8 = bank; } else gBattlescriptCurrInstr += 7; @@ -7326,11 +7324,10 @@ static void atk43_jumpifabilitypresent(void) static void atk44(void) { - ewram[gBankAttacker + 0x16060] = 1; + ewram16060(gBankAttacker) = 1; } #ifdef NONMATCHING - static void atk45_playanimation(void) { #define ANIMATION_ID T2_READ_8(gBattlescriptCurrInstr + 2) @@ -9521,7 +9518,7 @@ static void atk4C_copy_poke_data(void) gActiveBank = GetBattleBank(T2_READ_8(gBattlescriptCurrInstr + 1)); - gBattlePartyID[gActiveBank] = ewram[0x16068 + gActiveBank]; + gBattlePartyID[gActiveBank] = ewram16068arr(gActiveBank); EmitGetAttributes(0, 0, gBitTable[gBattlePartyID[gActiveBank]]); MarkBufferBankForExecution(gActiveBank); @@ -9671,8 +9668,7 @@ static void atk4F_jump_if_cannot_switch(void) void sub_8022A3C(u8 unkown) { - //BATTLE_STRUCT->unk16064[gActiveBank] = gBattlePartyID[gActiveBank]; - ewram[gActiveBank + 0x16064] = gBattlePartyID[gActiveBank]; + BATTLE_PARTY_ID(gActiveBank) = gBattlePartyID[gActiveBank]; EmitChoosePokemon(0, 1, unkown, 0, BATTLE_STRUCT->unk1606C[gActiveBank]); MarkBufferBankForExecution(gActiveBank); } @@ -10760,7 +10756,7 @@ static void atk51_switch_handle_order(void) for (i = 0; i < gNoOfAllBanks; i++) { if (gBattleBufferB[i][0] == 0x22) - ewram[i + 0x16068] = gBattleBufferB[i][1]; + ewram16068arr(i) = gBattleBufferB[i][1]; } break; case 1: @@ -10769,17 +10765,15 @@ static void atk51_switch_handle_order(void) break; case 2: gBattleCommunication[0] = gBattleBufferB[gActiveBank][1]; - ewram[gActiveBank + 0x16068] = gBattleBufferB[gActiveBank][1]; + ewram16068arr(gActiveBank) = gBattleBufferB[gActiveBank][1]; if (gBattleTypeFlags & BATTLE_TYPE_MULTI) { - - ewram[(gActiveBank) * 3 + (0x1606C + 0)] &= 0xF; - ewram[(gActiveBank) * 3 + (0x1606C + 0)] |= (gBattleBufferB[gActiveBank][2] & 0xF0); - ewram[(gActiveBank) * 3 + (0x1606C + 1)] = gBattleBufferB[gActiveBank][3]; - - ewram[(gActiveBank ^ 2) * 3 + (0x1606C + 0)] &= (0xF0); - ewram[(gActiveBank ^ 2) * 3 + (0x1606C + 0)] |= (gBattleBufferB[gActiveBank][2] & 0xF0) >> 4; - ewram[(gActiveBank ^ 2) * 3 + (0x1606C + 2)] = gBattleBufferB[gActiveBank][3]; + ewram1606Carr(0, gActiveBank, 3) &= 0xF; + ewram1606Carr(0, gActiveBank, 3) |= (gBattleBufferB[gActiveBank][2] & 0xF0); + ewram1606Carr(1, gActiveBank, 3) = gBattleBufferB[gActiveBank][3]; + ewram1606Carr(0, (gActiveBank ^ 2), 3) &= (0xF0); + ewram1606Carr(0, (gActiveBank ^ 2), 3) |= (gBattleBufferB[gActiveBank][2] & 0xF0) >> 4; + ewram1606Carr(2, (gActiveBank ^ 2), 3) = gBattleBufferB[gActiveBank][3]; } else sub_8012258(gActiveBank); @@ -12168,7 +12162,7 @@ static void atk74_hp_thresholds2(void) { gActiveBank = GetBattleBank(T2_READ_8(gBattlescriptCurrInstr + 1)); opposing_bank = gActiveBank ^ 1; - hp_switchout = ewram[2 * GetBankSide(opposing_bank) + 0x160bc]; //BATTLE_STRUCT->HP_OnSwitchout[GetBankSide(opposing_bank)]; + hp_switchout = ewram160BCarr(GetBankSide(opposing_bank)); //BATTLE_STRUCT->HP_OnSwitchout[GetBankSide(opposing_bank)]; result = (hp_switchout - gBattleMons[opposing_bank].hp) * 100 / hp_switchout; if (gBattleMons[opposing_bank].hp >= hp_switchout) @@ -12242,7 +12236,7 @@ static void atk76_various(void) else gActiveBank = 2; - choiced_move = (u16*)(&ewram[gActiveBank * 2 + 0x160e8]); + choiced_move = CHOICED_MOVE(gActiveBank); for (i = 0; i < 4; i++) { if (gBattleMons[gActiveBank].moves[i] == *choiced_move) @@ -12382,11 +12376,11 @@ static void atk7B_healhalfHP_if_possible(void) static void atk7C_8025508(void) { - u16 r7 = ewram[gBankAttacker * 2 + 0x160ac] | (ewram[gBankAttacker * 2 + 0x160ad] << 8); - u16 r6 = ewram[gBankAttacker * 4 + 0x16100] | (ewram[gBankAttacker * 4 + 0x16101] << 8); - u16 r5 = ewram[gBankAttacker * 4 + 0x16102] | (ewram[gBankAttacker * 4 + 0x16103] << 8); + u16 r7 = ewram160ACarr2(0, gBankAttacker) | (ewram160ACarr2(1, gBankAttacker) << 8); + u16 r6 = ewram16100arr2(0, gBankAttacker) | (ewram16100arr2(1, gBankAttacker) << 8); + u16 r5 = ewram16100arr2(2, gBankAttacker) | (ewram16100arr2(3, gBankAttacker) << 8); - if (r7 !=0 && r7 != 0xFFFF) + if (r7 != 0 && r7 != 0xFFFF) { gHitMarker &= ~(HITMARKER_ATTACKSTRING_PRINTED); gCurrentMove = r7; @@ -13465,12 +13459,12 @@ static void atk8D_setmultihit_counter(void) static void atk8E_prepare_multihit(void) { - ewram[0x160e0] = 0xFD; - ewram[0x160e1] = 1; - ewram[0x160e2] = 1; - ewram[0x160e3] = 1; - ewram[0x160e4] = 0; - ewram[0x160e5] = 0xFF; + ewram160E0(0) = 0xFD; + ewram160E0(1) = 1; + ewram160E0(2) = 1; + ewram160E0(3) = 1; + ewram160E0(4) = 0; + ewram160E0(5) = 0xFF; gBattlescriptCurrInstr++; } @@ -13478,7 +13472,7 @@ static bool8 sub_80264C0(void) { if (gBattleMons[gBankAttacker].level >= gBattleMons[gBankTarget].level) { - ewram[gBankTarget + 0x16064] = gBattlePartyID[gBankTarget]; + ewram16064arr(gBankTarget) = gBattlePartyID[gBankTarget]; } else { @@ -13488,7 +13482,7 @@ static bool8 sub_80264C0(void) gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); return 0; } - ewram[gBankTarget + 0x16064] = gBattlePartyID[gBankTarget]; + ewram16064arr(gBankTarget) = gBattlePartyID[gBankTarget]; } gBattlescriptCurrInstr = gUnknown_081D90FC; return 1; @@ -13569,7 +13563,7 @@ static void atk8F_forcerandomswitch(void) } while (i == gBattlePartyID[gBankTarget] || !MON_CAN_BATTLE(&party[i])); } } - ewram[gBankTarget + 0x16068] = i; + ewram16068arr(gBankTarget) = i; if (!IsLinkDoubleBattle()) sub_8012258(gBankTarget); sub_8094B6C(gBankTarget, i, 0); @@ -15430,7 +15424,7 @@ static void atkBA_jumpifnopursuitswitchdmg(void) gBankTarget = GetBankByPlayerAI(2); } - if (gActionForBanks[gBankTarget] == 0 && gBankAttacker == ewram[gBankTarget + 0x16010] && !(gBattleMons[gBankTarget].status1 & (STATUS_SLEEP | STATUS_FREEZE)) + if (gActionForBanks[gBankTarget] == 0 && gBankAttacker == ewram16010arr(gBankTarget) && !(gBattleMons[gBankTarget].status1 & (STATUS_SLEEP | STATUS_FREEZE)) && gBattleMons[gBankAttacker].hp && !gDisableStructs[gBankTarget].truantCounter && gChosenMovesByBanks[gBankTarget] == MOVE_PURSUIT) { int i; @@ -15499,11 +15493,11 @@ static void atkBE_breakfree(void) //rapid spin if (gBattleMons[gBankAttacker].status2 & STATUS2_WRAPPED) { gBattleMons[gBankAttacker].status2 &= ~(STATUS2_WRAPPED); - gBankTarget = ewram[gBankAttacker + 0x16020]; + gBankTarget = ewram16020arr(gBankAttacker); gBattleTextBuff1[0] = 0xFD; gBattleTextBuff1[1] = 2; - gBattleTextBuff1[2] = ewram[gBankAttacker * 2 + 0x16004]; - gBattleTextBuff1[3] = ewram[gBankAttacker * 2 + 0x16005]; + gBattleTextBuff1[2] = ewram16004arr(0, gBankAttacker); + gBattleTextBuff1[3] = ewram16004arr(1, gBankAttacker); gBattleTextBuff1[4] = 0xFF; b_movescr_stack_push_cursor(); gBattlescriptCurrInstr = BattleScript_WrapFree; @@ -16983,7 +16977,7 @@ static void atkE1_intimidate_string_loader(void) { u8 side; - BATTLE_STRUCT->scriptingActive = ewram[0x160dd]; + BATTLE_STRUCT->scriptingActive = ewram160DD; side = GetBankSide(BATTLE_STRUCT->scriptingActive); gBattleTextBuff1[0] = 0xFD; gBattleTextBuff1[1] = 9; @@ -17011,7 +17005,7 @@ static void atkE2_switchout_abilities(void) { case ABILITY_NATURAL_CURE: gBattleMons[gActiveBank].status1 = 0; - EmitSetAttributes(0, REQUEST_STATUS_BATTLE, gBitTable[ewram[gActiveBank + 0x16064]], 4, &gBattleMons[gActiveBank].status1); + EmitSetAttributes(0, REQUEST_STATUS_BATTLE, gBitTable[ewram16064arr(gActiveBank)], 4, &gBattleMons[gActiveBank].status1); MarkBufferBankForExecution(gActiveBank); break; } diff --git a/src/battle/battle_ai.c b/src/battle/battle_ai.c index aeac41750..5145d4980 100644 --- a/src/battle/battle_ai.c +++ b/src/battle/battle_ai.c @@ -953,8 +953,8 @@ static void BattleAICmd_is_most_powerful_move(void) && sDiscouragedPowerfulMoveEffects[i] == 0xFFFF) { gDynamicBasePower = 0; - ewram[0x1601C] = 0; // why is this a manual array? - ewram[0x1601F] = 1; + eDynamicMoveType = 0; + eDmgMultiplier = 1; gBattleMoveFlags = 0; gCritMultiplier = 1; @@ -1999,8 +1999,7 @@ static void BattleAICmd_get_used_item(void) else index = gBankTarget; - // this hack and a half matches. whatever. i dont care. someone else fix this mess later. PS: still cant fix this. - AI_THINKING_STRUCT->funcResult = ewram[MULTI_DIM_ARR(index, B_16, 0x160CC)]; + AI_THINKING_STRUCT->funcResult = AI_ARRAY_160CC(index); gAIScriptPtr += 2; } diff --git a/src/battle/battle_controller_opponent.c b/src/battle/battle_controller_opponent.c index 94ae43461..823d6702a 100644 --- a/src/battle/battle_controller_opponent.c +++ b/src/battle/battle_controller_opponent.c @@ -1674,7 +1674,7 @@ _0803558A:\n\ void OpponentHandleOpenBag(void) { // What is this? - Emitcmd35(1, ewram[0x160D4 + gActiveBank / 2 * 2]); + Emitcmd35(1, ewram160D4(gActiveBank)); OpponentBufferExecCompleted(); } @@ -1682,7 +1682,7 @@ void OpponentHandlecmd22(void) { s32 r4; - if (ewram[0x160C8 + GetBankIdentity(gActiveBank) / 2] == 6) + if (ewram160C8arr(GetBankIdentity(gActiveBank)) == 6) { u8 r6; u8 r5; @@ -1711,10 +1711,10 @@ void OpponentHandlecmd22(void) } else { - r4 = ewram[0x160C8 + GetBankIdentity(gActiveBank) / 2]; - ewram[0x160C8 + GetBankIdentity(gActiveBank) / 2] = 6; + r4 = ewram160C8arr(GetBankIdentity(gActiveBank)); + ewram160C8arr(GetBankIdentity(gActiveBank)) = 6; } - ewram[0x16068 + gActiveBank] = r4; + ewram16068arr(gActiveBank) = r4; Emitcmd34(1, r4, 0); OpponentBufferExecCompleted(); } diff --git a/src/battle/battle_controller_player.c b/src/battle/battle_controller_player.c index f2fa16593..1aa73e90c 100644 --- a/src/battle/battle_controller_player.c +++ b/src/battle/battle_controller_player.c @@ -2645,9 +2645,9 @@ void PlayerHandlecmd22(void) gUnknown_0300434C[gActiveBank] = CreateTask(TaskDummy, 0xFF); gTasks[gUnknown_0300434C[gActiveBank]].data[0] = gBattleBufferA[gActiveBank][1] & 0xF; - ewram[0x16054] = gBattleBufferA[gActiveBank][1] >> 4; - ewram[0x1609D] = gBattleBufferA[gActiveBank][2]; - ewram[0x160C0] = gBattleBufferA[gActiveBank][3]; + ewram16054 = gBattleBufferA[gActiveBank][1] >> 4; + EWRAM_1609D = gBattleBufferA[gActiveBank][2]; + ewram160C0 = gBattleBufferA[gActiveBank][3]; for (i = 0; i < 3; i++) gUnknown_02038470[i] = gBattleBufferA[gActiveBank][4 + i]; BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); diff --git a/src/battle/battle_controller_wally.c b/src/battle/battle_controller_wally.c index be065e071..9392832d7 100644 --- a/src/battle/battle_controller_wally.c +++ b/src/battle/battle_controller_wally.c @@ -240,10 +240,10 @@ void unref_sub_8137220(void) void SetBankFuncToWallyBufferRunCommand(void) { gBattleBankFunc[gActiveBank] = WallyBufferRunCommand; - ewram[0x160A8] = 0; - ewram[0x160A9] = 0; - ewram[0x160AA] = 0; - ewram[0x160AB] = 0; + ewram160A8 = 0; + ewram160A9 = 0; + ewram160AA = 0; + ewram160AB = 0; } void WallyBufferRunCommand(void) @@ -261,59 +261,59 @@ void sub_81372BC(void) { u8 r4; - switch (ewram[0x160A8]) + switch (ewram160A8) { case 0: - ewram[0x160AA] = 64; - ewram[0x160A8]++; + ewram160AA = 64; + ewram160A8++; // fall through case 1: - r4 = --ewram[0x160AA]; + r4 = --ewram160AA; if (r4 == 0) { PlaySE(SE_SELECT); Emitcmd33(1, 0, 0); WallyBufferExecCompleted(); - ewram[0x160A8]++; - ewram[0x160A9] = r4; - ewram[0x160AA] = 64; + ewram160A8++; + ewram160A9 = r4; + ewram160AA = 64; } break; case 2: - r4 = --ewram[0x160AA]; + r4 = --ewram160AA; if (r4 == 0) { PlaySE(SE_SELECT); Emitcmd33(1, 0, 0); WallyBufferExecCompleted(); - ewram[0x160A8]++; - ewram[0x160A9] = r4; - ewram[0x160AA] = 64; + ewram160A8++; + ewram160A9 = r4; + ewram160AA = 64; } break; case 3: - r4 = --ewram[0x160AA]; + r4 = --ewram160AA; if (r4 == 0) { Emitcmd33(1, 9, 0); WallyBufferExecCompleted(); - ewram[0x160A8]++; - ewram[0x160A9] = r4; - ewram[0x160AA] = 64; + ewram160A8++; + ewram160A9 = r4; + ewram160AA = 64; } break; case 4: - if (--ewram[0x160AA] == 0) + if (--ewram160AA == 0) { PlaySE(SE_SELECT); nullsub_8(0); sub_802E3E4(1, 0); - ewram[0x160AA] = 64; - ewram[0x160A8]++; + ewram160AA = 64; + ewram160A8++; } break; case 5: - if (--ewram[0x160AA] == 0) + if (--ewram160AA == 0) { PlaySE(SE_SELECT); DestroyMenuCursor(); @@ -1291,16 +1291,16 @@ void WallyHandlecmd19(void) void WallyHandlecmd20(void) { - switch (ewram[0x160A9]) + switch (ewram160A9) { case 0: sub_80304A8(); - ewram[0x160A9]++; - ewram[0x160AB] = 80; + ewram160A9++; + ewram160AB = 80; // fall through case 1: - ewram[0x160AB]--; - if (ewram[0x160AB] == 0) + ewram160AB--; + if (ewram160AB == 0) { DestroyMenuCursor(); PlaySE(SE_SELECT); diff --git a/src/battle/battle_interface.c b/src/battle/battle_interface.c index 831839d9b..09837bfee 100644 --- a/src/battle/battle_interface.c +++ b/src/battle/battle_interface.c @@ -995,8 +995,8 @@ void sub_8044338(u8 a, struct Pokemon *pkmn) } //_08044486 r5 = gSprites[a].data5; - ConvertIntToDecimalStringN(str + 6, ewram[0x16089], 1, 2); - ConvertIntToDecimalStringN(str + 9, ewram[0x16088], 1, 2); + ConvertIntToDecimalStringN(str + 6, ewram16089, 1, 2); + ConvertIntToDecimalStringN(str + 9, ewram16088, 1, 2); str[5] = 0; str[8] = 0xBA; sub_80034D4((u8 *)0x02000000, str); diff --git a/src/battle/battle_message.c b/src/battle/battle_message.c index f98c065b0..4e8067a49 100644 --- a/src/battle/battle_message.c +++ b/src/battle/battle_message.c @@ -652,7 +652,7 @@ u32 StrCpyDecodeBattle(const u8* src, u8* dst) if (gTrainerBattleOpponent == 0x400) { memset(text, 0xFF, 8); - memcpy(text, &ewram[0x17002], 7); + memcpy(text, ewram17002, 7); toCpy = text; } else if (gBattleTypeFlags & BATTLE_TYPE_BATTLE_TOWER) diff --git a/src/battle/battle_transition.c b/src/battle/battle_transition.c index 5562da462..d0a9bfb92 100644 --- a/src/battle/battle_transition.c +++ b/src/battle/battle_transition.c @@ -1733,8 +1733,8 @@ static void Mugshots_CreateOpponentPlayerSprites(struct Task* task) task->tMugshotOpponentID = CreateTrainerSprite(sMugshotsTrainerPicIDsTable[mugshotID], sMugshotsOpponentCoords[mugshotID][0] - 32, sMugshotsOpponentCoords[mugshotID][1] + 42, - 0, &ewram[0xC03C]); - task->tMugshotPlayerID = CreateTrainerSprite(gSaveBlock2.playerGender, 272, 106, 0, &ewram[0xC03C]); + 0, ewramC03C); + task->tMugshotPlayerID = CreateTrainerSprite(gSaveBlock2.playerGender, 272, 106, 0, ewramC03C); opponentSprite = &gSprites[task->tMugshotOpponentID]; playerSprite = &gSprites[task->tMugshotPlayerID]; diff --git a/src/debug/matsuda_debug_menu.c b/src/debug/matsuda_debug_menu.c index 0a495c37a..765ec1f26 100644 --- a/src/debug/matsuda_debug_menu.c +++ b/src/debug/matsuda_debug_menu.c @@ -45,7 +45,7 @@ extern u8 gUnknown_083C9282[]; extern const u8 gUnknown_083C928E[][2]; extern u8 gUnknown_083C9296[]; extern u8 gUnknown_083C92A8[]; -extern u8 unk_2000000[]; // TODO: use ewram +extern u8 ewram[]; extern u8 gMatsudaDebugMenu_GoBackText[]; extern u8 gMatsudaDebugMenu_BattlePointsText[]; extern u8 gMatsudaDebugMenu_StartText[]; @@ -414,14 +414,14 @@ void sub_80AA280(u8 var) // no? u8 i; FillWindowRect_DefaultPalette(&gMenuWindow, 0, 0, 0, 0x1E, 3); - StringCopy(unk_2000000, gMatsudaDebugMenu_StartText); - StringAppend(unk_2000000, &gUnknown_0203857D[var][0]); + StringCopy(ewram, gMatsudaDebugMenu_StartText); + StringAppend(ewram, &gUnknown_0203857D[var][0]); for (i = 0; i < 4; i++) { if (var == i) { - sub_8003460(&gMenuWindow, unk_2000000, (10 * i + 2), gUnknown_083C926E[i][0], gUnknown_083C926E[i][1]); + sub_8003460(&gMenuWindow, ewram, (10 * i + 2), gUnknown_083C926E[i][0], gUnknown_083C926E[i][1]); } else { @@ -433,38 +433,38 @@ void sub_80AA280(u8 var) // no? static void sub_80AA340(u8 var) { - ConvertIntToDecimalStringN(unk_2000000, gContestMons[var].cool, STR_CONV_MODE_RIGHT_ALIGN, 3); - sub_8003460(&gMenuWindow, unk_2000000, 0x66, gUnknown_083C9282[0], gUnknown_083C9282[1]); + ConvertIntToDecimalStringN(ewram, gContestMons[var].cool, STR_CONV_MODE_RIGHT_ALIGN, 3); + sub_8003460(&gMenuWindow, ewram, 0x66, gUnknown_083C9282[0], gUnknown_083C9282[1]); } static void sub_80AA388(u8 var) { - ConvertIntToDecimalStringN(unk_2000000, gContestMons[var].cute, STR_CONV_MODE_RIGHT_ALIGN, 3); - sub_8003460(&gMenuWindow, unk_2000000, 0x6C, gUnknown_083C9282[2], gUnknown_083C9282[3]); + ConvertIntToDecimalStringN(ewram, gContestMons[var].cute, STR_CONV_MODE_RIGHT_ALIGN, 3); + sub_8003460(&gMenuWindow, ewram, 0x6C, gUnknown_083C9282[2], gUnknown_083C9282[3]); } static void sub_80AA3D0(u8 var) { - ConvertIntToDecimalStringN(unk_2000000, gContestMons[var].beauty, STR_CONV_MODE_RIGHT_ALIGN, 3); - sub_8003460(&gMenuWindow, unk_2000000, 0x72, gUnknown_083C9282[4], gUnknown_083C9282[5]); + ConvertIntToDecimalStringN(ewram, gContestMons[var].beauty, STR_CONV_MODE_RIGHT_ALIGN, 3); + sub_8003460(&gMenuWindow, ewram, 0x72, gUnknown_083C9282[4], gUnknown_083C9282[5]); } static void sub_80AA418(u8 var) { - ConvertIntToDecimalStringN(unk_2000000, gContestMons[var].smart, STR_CONV_MODE_RIGHT_ALIGN, 3); - sub_8003460(&gMenuWindow, unk_2000000, 0x78, gUnknown_083C9282[6], gUnknown_083C9282[7]); + ConvertIntToDecimalStringN(ewram, gContestMons[var].smart, STR_CONV_MODE_RIGHT_ALIGN, 3); + sub_8003460(&gMenuWindow, ewram, 0x78, gUnknown_083C9282[6], gUnknown_083C9282[7]); } static void sub_80AA460(u8 var) { - ConvertIntToDecimalStringN(unk_2000000, gContestMons[var].tough, STR_CONV_MODE_RIGHT_ALIGN, 3); - sub_8003460(&gMenuWindow, unk_2000000, 0x7E, gUnknown_083C9282[8], gUnknown_083C9282[9]); + ConvertIntToDecimalStringN(ewram, gContestMons[var].tough, STR_CONV_MODE_RIGHT_ALIGN, 3); + sub_8003460(&gMenuWindow, ewram, 0x7E, gUnknown_083C9282[8], gUnknown_083C9282[9]); } static void sub_80AA4A8(u8 var) { - ConvertIntToDecimalStringN(unk_2000000, gContestMons[var].sheen, STR_CONV_MODE_RIGHT_ALIGN, 3); - sub_8003460(&gMenuWindow, unk_2000000, 0x84, gUnknown_083C9282[10], gUnknown_083C9282[11]); + ConvertIntToDecimalStringN(ewram, gContestMons[var].sheen, STR_CONV_MODE_RIGHT_ALIGN, 3); + sub_8003460(&gMenuWindow, ewram, 0x84, gUnknown_083C9282[10], gUnknown_083C9282[11]); } static void sub_80AA4F0(u8 var1, u8 var2) @@ -489,8 +489,8 @@ static void sub_80AA614(u8 var1, u8 var2) { u16 var = sub_80AE770(var1, var2); - ConvertIntToDecimalStringN(unk_2000000, var, STR_CONV_MODE_RIGHT_ALIGN, 3); - sub_8003460(&gMenuWindow, unk_2000000, 0xE2, 3, 0xC); + ConvertIntToDecimalStringN(ewram, var, STR_CONV_MODE_RIGHT_ALIGN, 3); + sub_8003460(&gMenuWindow, ewram, 0xE2, 3, 0xC); } void sub_80AA658(u8 var) @@ -739,7 +739,7 @@ void sub_80AACC4(void) { SetDebugMonForContest(); if (!(gIsLinkContest & 1)) - sub_80AE82C(unk_2000000[0]); + sub_80AE82C(ewram[0]); SetMainCallback2(sub_80AB47C); } } @@ -748,7 +748,7 @@ void sub_80AAD08(struct Sprite *sprite, s8 var2) { if (var2 == 1) { - unk_2000000[0] = sprite->data3; + ewram[0] = sprite->data3; SetMainCallback2(sub_80AACC4); BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, 0); } diff --git a/src/engine/main_menu.c b/src/engine/main_menu.c index e0af86f3d..3a343a0de 100644 --- a/src/engine/main_menu.c +++ b/src/engine/main_menu.c @@ -54,7 +54,7 @@ extern const u8 gUnknown_081E796C[]; extern const union AffineAnimCmd *const gSpriteAffineAnimTable_81E79AC[]; -extern u8 unk_2000000[]; +extern u8 ewram[]; //Menu layouts enum @@ -1419,14 +1419,14 @@ void AddBirchSpeechObjects(u8 taskId) gTasks[taskId].tAzurillSpriteId = spriteId; //Create Brendan sprite - spriteId = CreateTrainerSprite(0, 120, 60, 0, unk_2000000); + spriteId = CreateTrainerSprite(0, 120, 60, 0, ewram); gSprites[spriteId].callback = nullsub_34; gSprites[spriteId].invisible = 1; gSprites[spriteId].oam.priority = 0; gTasks[taskId].tBrendanSpriteId = spriteId; //Create May sprite - spriteId = CreateTrainerSprite(1, 120, 60, 0, unk_2000000 + 0x800); + spriteId = CreateTrainerSprite(1, 120, 60, 0, ewram + 0x800); gSprites[spriteId].callback = nullsub_34; gSprites[spriteId].invisible = 1; gSprites[spriteId].oam.priority = 0; diff --git a/src/engine/mystery_event_menu.c b/src/engine/mystery_event_menu.c index 0e48dc177..d70414da4 100644 --- a/src/engine/mystery_event_menu.c +++ b/src/engine/mystery_event_menu.c @@ -14,7 +14,7 @@ #include "task.h" #include "text.h" -extern u8 unk_2000000[]; +extern u8 ewram[]; static EWRAM_DATA u8 gUnknown_02039338 = 0; @@ -287,8 +287,8 @@ static void CB2_MysteryEventMenu(void) case 11: if (gReceivedRemoteLinkPlayers) break; - unkVal = RunMysteryEventScript(unk_2000000); - CpuFill32(0, unk_2000000, 0x7D4); + unkVal = RunMysteryEventScript(ewram); + CpuFill32(0, ewram, 0x7D4); if (!GetEventLoadMessage(gStringVar4, unkVal)) TrySavingData(NORMAL_SAVE); gMain.state++; diff --git a/src/engine/save.c b/src/engine/save.c index 5ea949cae..57678dd8f 100644 --- a/src/engine/save.c +++ b/src/engine/save.c @@ -11,7 +11,7 @@ #define GETBLOCKOFFSET(n) (0xF80 * (n - 1)) #define TOTALNUMSECTORS ((ARRAY_COUNT(gSaveSectionLocations) * 2) + (ARRAY_COUNT(gHallOfFameSaveSectionLocations) * 2)) // there are 2 slots, so double each array count and get the sum. -extern struct SaveSection unk_2000000; // slow save RAM +extern struct SaveSection ewram; // slow save RAM u16 gLastWrittenSector; u32 gLastSaveCounter; @@ -95,7 +95,7 @@ u8 save_write_to_flash(u16 a1, const struct SaveSectionLocation *location) u32 retVal; u16 i; - gFastSaveSection = &unk_2000000; + gFastSaveSection = &ewram; if (a1 != 0xFFFF) // for link { @@ -156,7 +156,7 @@ u8 HandleWriteSector(u16 a1, const struct SaveSectionLocation *location) u8 HandleWriteSectorNBytes(u8 sector, u8 *data, u16 size) { u16 i; - struct SaveSection *section = &unk_2000000; + struct SaveSection *section = &ewram; for (i = 0; i < sizeof(struct SaveSection); i++) ((char *)section)[i] = 0; @@ -186,7 +186,7 @@ u8 TryWriteSector(u8 sector, u8 *data) u32 RestoreSaveBackupVarsAndIncrement(const struct SaveSectionLocation *location) // location is unused { - gFastSaveSection = &unk_2000000; + gFastSaveSection = &ewram; gLastKnownGoodSector = gLastWrittenSector; gLastSaveCounter = gSaveCounter; gLastWrittenSector++; @@ -199,7 +199,7 @@ u32 RestoreSaveBackupVarsAndIncrement(const struct SaveSectionLocation *location u32 RestoreSaveBackupVars(const struct SaveSectionLocation *location) // only ever called once, and gSaveBlock2 is passed to this function. location is unused { - gFastSaveSection = &unk_2000000; + gFastSaveSection = &ewram; gLastKnownGoodSector = gLastWrittenSector; gLastSaveCounter = gSaveCounter; gUnknown_03005EB4 = 0; @@ -369,7 +369,7 @@ u8 sub_81257F0(u16 a1, const struct SaveSectionLocation *location) u8 sub_812587C(u16 a1, const struct SaveSectionLocation *location) { u8 retVal; - gFastSaveSection = &unk_2000000; + gFastSaveSection = &ewram; if (a1 != 0xFFFF) { retVal = 0xFF; @@ -537,7 +537,7 @@ u8 GetSaveValidStatus(const struct SaveSectionLocation *location) u8 sub_8125B88(u8 a1, u8 *data, u16 size) { u16 i; - struct SaveSection *section = &unk_2000000; + struct SaveSection *section = &ewram; DoReadFlashWholeSection(a1, section); if (section->security == UNKNOWN_CHECK_VALUE) { @@ -764,7 +764,7 @@ u8 unref_sub_8125FA0(void) u8 unref_sub_8125FF0(u8 *data, u16 size) { u16 i; - struct UnkSaveSection *section = (struct UnkSaveSection *)&unk_2000000; + struct UnkSaveSection *section = (struct UnkSaveSection *)&ewram; for (i = 0; i < sizeof(struct SaveSection); i++) ((char *)section)[i] = 0; diff --git a/src/engine/save_failed_screen.c b/src/engine/save_failed_screen.c index 17bda237e..d194c1625 100644 --- a/src/engine/save_failed_screen.c +++ b/src/engine/save_failed_screen.c @@ -22,7 +22,7 @@ #define CLOCK_WIN_TOP (MSG_WIN_TOP - 4) -extern u8 unk_2000000[]; +extern u8 ewram[]; static EWRAM_DATA u16 gSaveFailedType = 0; static EWRAM_DATA u16 gSaveFailedClockInfo[9] = {0}; @@ -267,7 +267,7 @@ static void VBlankCB_UpdateClockGraphics(void) static bool8 VerifySectorWipe(u16 sector) { - u32 *ptr = (u32 *)&unk_2000000; + u32 *ptr = (u32 *)&ewram; u16 i; ReadFlash(sector, 0, ptr, 4096); diff --git a/src/field/berry_tag_screen.c b/src/field/berry_tag_screen.c index 1413a02ca..8241fe657 100644 --- a/src/field/berry_tag_screen.c +++ b/src/field/berry_tag_screen.c @@ -28,7 +28,7 @@ struct Struct2000000 /*0x1FFFF*/ u8 var_1FFFF; }; -extern struct Struct2000000 unk_2000000; +extern struct Struct2000000 ewram; extern u16 gUnknown_030041B4; static EWRAM_DATA u8 gUnknown_0203932C = 0; @@ -119,13 +119,13 @@ static bool8 sub_8146058(void) case 5: if (!MultistepInitMenuWindowContinue()) break; - unk_2000000.var_1FFFF = 0; + ewram.var_1FFFF = 0; gMain.state += 1; break; case 6: if (!sub_81462B8()) break; - unk_2000000.var_1FFFF = 0; + ewram.var_1FFFF = 0; gMain.state += 1; break; case 7: @@ -191,19 +191,19 @@ bool8 sub_81462B8(void) u16 i; void *addr; - switch (unk_2000000.var_1FFFF) + switch (ewram.var_1FFFF) { case 0: LZDecompressVram(gBerryCheck_Gfx, (void *)VRAM); - unk_2000000.var_1FFFF += 1; + ewram.var_1FFFF += 1; break; case 1: LZDecompressVram(gUnknown_08E788E4, (void *)VRAM + 0x2800); - unk_2000000.var_1FFFF += 1; + ewram.var_1FFFF += 1; break; case 2: LZDecompressVram(gUnknown_08E78A84, (void *)VRAM + 0x3000); - unk_2000000.var_1FFFF += 1; + ewram.var_1FFFF += 1; break; case 3: for (i = 0; i < 0x400; i++) @@ -215,19 +215,19 @@ bool8 sub_81462B8(void) } addr = (void *)(VRAM + 0x3800); DmaCopy16(3, gBGTilemapBuffers[2], addr, 0x800); - unk_2000000.var_1FFFF += 1; + ewram.var_1FFFF += 1; break; case 4: LoadCompressedPalette(gBerryCheck_Pal, 0, 96 * 2); - unk_2000000.var_1FFFF += 1; + ewram.var_1FFFF += 1; break; case 5: LoadCompressedObjectPic(&gUnknown_083C1F74); - unk_2000000.var_1FFFF += 1; + ewram.var_1FFFF += 1; break; case 6: LoadCompressedObjectPalette(&gUnknown_083C1F7C); - unk_2000000.var_1FFFF = 0; + ewram.var_1FFFF = 0; return TRUE; } diff --git a/src/field/slot_machine.c b/src/field/slot_machine.c index 153970337..4d97ccb51 100644 --- a/src/field/slot_machine.c +++ b/src/field/slot_machine.c @@ -15,7 +15,7 @@ struct UnkStruct1 { /*0x02*/ s16 unk02; }; -extern struct UnkStruct2000000 unk_2000000; +extern struct UnkStruct2000000 ewram; extern struct UnkStruct1 *gUnknown_083ED048[]; extern const u16 gPalette_83EDE24[]; @@ -40,7 +40,7 @@ void sub_8104CAC(u8 arg0) { sub_8104DA4(); - task = &gTasks[unk_2000000.unk3D]; + task = &gTasks[ewram.unk3D]; task->data[1] = arg0; i = 0; diff --git a/src/pokemon/pokemon_1.c b/src/pokemon/pokemon_1.c index 0c0d14d7a..9a92f379d 100644 --- a/src/pokemon/pokemon_1.c +++ b/src/pokemon/pokemon_1.c @@ -16,7 +16,7 @@ //Extracts the lower 16 bits of a 32-bit number #define LOHALF(n) ((n) & 0xFFFF) -extern u8 unk_2000000[]; +extern u8 ewram[]; extern u16 gMoveToLearn; static EWRAM_DATA u8 sLearningMoveTableID = 0; @@ -436,9 +436,9 @@ void CalculateMonStats(struct Pokemon *mon) newMaxHP = (((n + hpEV / 4) * level) / 100) + level + 10; } - unk_2000000[0x160FA] = newMaxHP - oldMaxHP; - if (unk_2000000[0x160FA] == 0) - unk_2000000[0x160FA] = 1; + ewram[0x160FA] = newMaxHP - oldMaxHP; + if (ewram[0x160FA] == 0) + ewram[0x160FA] = 1; SetMonData(mon, MON_DATA_MAX_HP, &newMaxHP); diff --git a/src/scene/contest_painting.c b/src/scene/contest_painting.c index 3662efdec..928b59760 100644 --- a/src/scene/contest_painting.c +++ b/src/scene/contest_painting.c @@ -13,7 +13,7 @@ #include "text.h" #include "unknown_task.h" -extern u8 unk_2000000[]; +extern u8 ewram[]; static u8 gUnknown_03000750; static u16 gUnknown_03000752; @@ -184,15 +184,15 @@ static void ShowContestPainting(void) case 2: SeedRng(gMain.vblankCounter1); InitKeys(); - ContestPaintingInitWindow(unk_2000000[0x15DDF]); + ContestPaintingInitWindow(ewram[0x15DDF]); gMain.state++; break; case 3: - sub_8107090(unk_2000000[0x15DDE], unk_2000000[0x15DDF]); + sub_8107090(ewram[0x15DDE], ewram[0x15DDF]); gMain.state++; break; case 4: - ContestPaintingPrintCaption(unk_2000000[0x15DDE], unk_2000000[0x15DDF]); + ContestPaintingPrintCaption(ewram[0x15DDE], ewram[0x15DDF]); LoadPalette(gUnknown_083F6140, 0, 1 * 2); DmaClear32(3, PLTT, 0x400); BeginFastPaletteFade(2); diff --git a/src/scene/intro.c b/src/scene/intro.c index a6dd23c92..af9b565a3 100644 --- a/src/scene/intro.c +++ b/src/scene/intro.c @@ -1207,7 +1207,7 @@ static void Task_IntroWaitToSetupPart3DoubleFight(u8 taskId) gTasks[taskId].func = Task_IntroLoadPart3Streaks; } -extern u8 unk_2000000[][32]; +extern u8 ewram[][32]; static void Task_IntroLoadPart3Streaks(u8 taskId) { @@ -1217,12 +1217,12 @@ static void Task_IntroLoadPart3Streaks(u8 taskId) intro_reset_and_hide_bgs(); for (i = 0; i < 32; i++) { - unk_2000000[0][i] = 0; - unk_2000000[1][i] = 17; - unk_2000000[2][i] = 34; + ewram[0][i] = 0; + ewram[1][i] = 17; + ewram[2][i] = 34; } vram = (void *)VRAM; - DmaCopy16(3, unk_2000000, vram, 0x60); + DmaCopy16(3, ewram, vram, 0x60); for (i = 0; i < 0x280; i++) ((u16 *)(VRAM + 0x3000))[i] = 0xF001; for (i = 0; i < 0x80; i++) -- cgit v1.2.3 From 5711615c6067e49c3254f9568be55dc6ed3d5c2f Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Mon, 6 Nov 2017 03:46:09 -0500 Subject: finish refactoring ewram defines into ewram.h. --- src/battle/battle_2.c | 8 ++-- src/battle/battle_4.c | 12 ++--- src/battle/battle_7.c | 12 ++--- src/battle/battle_party_menu.c | 2 +- src/debug/matsuda_debug_menu.c | 6 +-- src/engine/main_menu.c | 7 ++- src/engine/mystery_event_menu.c | 3 +- src/engine/save_failed_screen.c | 3 +- src/field/dewford_trend.c | 2 - src/field/pokeblock.c | 18 +++---- src/pokemon/learn_move.c | 6 +-- src/pokemon/pokeblock_feed.c | 32 ++++++------- src/pokemon/pokemon_1.c | 8 ++-- src/pokemon/pokemon_menu.c | 1 - src/rom3.c | 46 +++++++++--------- src/scene/berry_blender.c | 22 ++++----- src/scene/contest_painting.c | 9 ++-- src/scene/egg_hatch.c | 10 ++-- src/scene/hall_of_fame.c | 102 ++++++++++++++++++++-------------------- src/scene/intro.c | 1 + 20 files changed, 153 insertions(+), 157 deletions(-) (limited to 'src') diff --git a/src/battle/battle_2.c b/src/battle/battle_2.c index 38c60dee1..8d27750bd 100644 --- a/src/battle/battle_2.c +++ b/src/battle/battle_2.c @@ -2290,7 +2290,7 @@ void sub_8012258(u8 a) u8 r1; for (i = 0; i < 3; i++) - gUnknown_02038470[i] = ewram1606Carr(i, a, 3); + gUnknown_02038470[i] = ewram1606Carr(i, a); r4 = pokemon_order_func(gBattlePartyID[a]); r1 = pokemon_order_func(ewram16068arr(a)); sub_8094C98(r4, r1); @@ -2298,15 +2298,15 @@ void sub_8012258(u8 a) { for (i = 0; i < 3; i++) { - ewram1606Carr(i, a, 3) = gUnknown_02038470[i]; - ewram1606Carr(i, (a ^ 2), 3) = gUnknown_02038470[i]; + ewram1606Carr(i, a) = gUnknown_02038470[i]; + ewram1606Carr(i, (a ^ 2)) = gUnknown_02038470[i]; } } else { for (i = 0; i < 3; i++) { - ewram1606Carr(i, a, 3) = gUnknown_02038470[i]; + ewram1606Carr(i, a) = gUnknown_02038470[i]; } } } diff --git a/src/battle/battle_4.c b/src/battle/battle_4.c index 5c028d86b..d7ca298c3 100644 --- a/src/battle/battle_4.c +++ b/src/battle/battle_4.c @@ -10768,12 +10768,12 @@ static void atk51_switch_handle_order(void) ewram16068arr(gActiveBank) = gBattleBufferB[gActiveBank][1]; if (gBattleTypeFlags & BATTLE_TYPE_MULTI) { - ewram1606Carr(0, gActiveBank, 3) &= 0xF; - ewram1606Carr(0, gActiveBank, 3) |= (gBattleBufferB[gActiveBank][2] & 0xF0); - ewram1606Carr(1, gActiveBank, 3) = gBattleBufferB[gActiveBank][3]; - ewram1606Carr(0, (gActiveBank ^ 2), 3) &= (0xF0); - ewram1606Carr(0, (gActiveBank ^ 2), 3) |= (gBattleBufferB[gActiveBank][2] & 0xF0) >> 4; - ewram1606Carr(2, (gActiveBank ^ 2), 3) = gBattleBufferB[gActiveBank][3]; + ewram1606Carr(0, gActiveBank) &= 0xF; + ewram1606Carr(0, gActiveBank) |= (gBattleBufferB[gActiveBank][2] & 0xF0); + ewram1606Carr(1, gActiveBank) = gBattleBufferB[gActiveBank][3]; + ewram1606Carr(0, (gActiveBank ^ 2)) &= (0xF0); + ewram1606Carr(0, (gActiveBank ^ 2)) |= (gBattleBufferB[gActiveBank][2] & 0xF0) >> 4; + ewram1606Carr(2, (gActiveBank ^ 2)) = gBattleBufferB[gActiveBank][3]; } else sub_8012258(gActiveBank); diff --git a/src/battle/battle_7.c b/src/battle/battle_7.c index 6c0a4489c..4ca1baa53 100644 --- a/src/battle/battle_7.c +++ b/src/battle/battle_7.c @@ -309,8 +309,8 @@ void BattleLoadOpponentMonSprite(struct Pokemon *pkmn, u8 b) if (species == SPECIES_CASTFORM) { paletteOffset = 0x100 + b * 16; - LZDecompressWram(lzPaletteData, ewram + 0x16400); - LoadPalette(ewram + 0x16400 + gBattleMonForms[b] * 32, paletteOffset, 0x20); + LZDecompressWram(lzPaletteData, ewram16400); + LoadPalette(ewram16400 + gBattleMonForms[b] * 32, paletteOffset, 0x20); } if (ewram17800[b].transformedSpecies != 0) { @@ -361,8 +361,8 @@ void BattleLoadPlayerMonSprite(struct Pokemon *pkmn, u8 b) if (species == SPECIES_CASTFORM) { paletteOffset = 0x100 + b * 16; - LZDecompressWram(lzPaletteData, ewram + 0x16400); - LoadPalette(ewram + 0x16400 + gBattleMonForms[b] * 32, paletteOffset, 0x20); + LZDecompressWram(lzPaletteData, ewram16400); + LoadPalette(ewram16400 + gBattleMonForms[b] * 32, paletteOffset, 0x20); } if (ewram17800[b].transformedSpecies != 0) { @@ -622,7 +622,7 @@ void sub_8031FC4(u8 a, u8 b, bool8 c) { StartSpriteAnim(&gSprites[gObjectBankIDs[a]], ewram17840.unk0); paletteOffset = 0x100 + a * 16; - LoadPalette(ewram + 0x16400 + ewram17840.unk0 * 32, paletteOffset, 32); + LoadPalette(ewram16400 + ewram17840.unk0 * 32, paletteOffset, 32); gBattleMonForms[a] = ewram17840.unk0; if (ewram17800[a].transformedSpecies != 0) { @@ -694,7 +694,7 @@ void sub_8031FC4(u8 a, u8 b, bool8 c) LoadPalette(ewram, paletteOffset, 32); if (species == SPECIES_CASTFORM) { - u16 *paletteSrc = (u16 *)(ewram + 0x16400); + u16 *paletteSrc = (u16 *)ewram16400; // TODO: avoid casting? LZDecompressWram(lzPaletteData, paletteSrc); LoadPalette(paletteSrc + gBattleMonForms[b] * 16, paletteOffset, 32); diff --git a/src/battle/battle_party_menu.c b/src/battle/battle_party_menu.c index ab8b7a694..97e9dc0fc 100644 --- a/src/battle/battle_party_menu.c +++ b/src/battle/battle_party_menu.c @@ -204,7 +204,7 @@ void sub_8094B6C(u8 a, u8 b, u8 c) if (IsLinkDoubleBattle()) { - u8 *arr = ewram + 0x1606C + a * 3; + u8 *arr = &ewram1606Carr(0, a); for (i = 0, j = 0; i < 3; i++) { diff --git a/src/debug/matsuda_debug_menu.c b/src/debug/matsuda_debug_menu.c index 765ec1f26..ab96ada23 100644 --- a/src/debug/matsuda_debug_menu.c +++ b/src/debug/matsuda_debug_menu.c @@ -15,6 +15,7 @@ #include "task.h" #include "text.h" #include "unknown_task.h" +#include "ewram.h" extern u8 gUnknown_0203856C; extern u8 gUnknown_0203857D[][64]; @@ -45,7 +46,6 @@ extern u8 gUnknown_083C9282[]; extern const u8 gUnknown_083C928E[][2]; extern u8 gUnknown_083C9296[]; extern u8 gUnknown_083C92A8[]; -extern u8 ewram[]; extern u8 gMatsudaDebugMenu_GoBackText[]; extern u8 gMatsudaDebugMenu_BattlePointsText[]; extern u8 gMatsudaDebugMenu_StartText[]; @@ -739,7 +739,7 @@ void sub_80AACC4(void) { SetDebugMonForContest(); if (!(gIsLinkContest & 1)) - sub_80AE82C(ewram[0]); + sub_80AE82C(eMatsudaDebugVar); SetMainCallback2(sub_80AB47C); } } @@ -748,7 +748,7 @@ void sub_80AAD08(struct Sprite *sprite, s8 var2) { if (var2 == 1) { - ewram[0] = sprite->data3; + eMatsudaDebugVar = sprite->data3; SetMainCallback2(sub_80AACC4); BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, 0); } diff --git a/src/engine/main_menu.c b/src/engine/main_menu.c index 3a343a0de..bfbf0dcd6 100644 --- a/src/engine/main_menu.c +++ b/src/engine/main_menu.c @@ -22,6 +22,7 @@ #include "text.h" #include "title_screen.h" #include "unknown_task.h" +#include "ewram.h" #define BirchSpeechUpdateWindowText() ((u8)MenuUpdateWindowText_OverrideLineLength(24)) @@ -54,8 +55,6 @@ extern const u8 gUnknown_081E796C[]; extern const union AffineAnimCmd *const gSpriteAffineAnimTable_81E79AC[]; -extern u8 ewram[]; - //Menu layouts enum { @@ -1419,14 +1418,14 @@ void AddBirchSpeechObjects(u8 taskId) gTasks[taskId].tAzurillSpriteId = spriteId; //Create Brendan sprite - spriteId = CreateTrainerSprite(0, 120, 60, 0, ewram); + spriteId = CreateTrainerSprite(0, 120, 60, 0, eBrendanSprite); gSprites[spriteId].callback = nullsub_34; gSprites[spriteId].invisible = 1; gSprites[spriteId].oam.priority = 0; gTasks[taskId].tBrendanSpriteId = spriteId; //Create May sprite - spriteId = CreateTrainerSprite(1, 120, 60, 0, ewram + 0x800); + spriteId = CreateTrainerSprite(1, 120, 60, 0, eMaySprite); gSprites[spriteId].callback = nullsub_34; gSprites[spriteId].invisible = 1; gSprites[spriteId].oam.priority = 0; diff --git a/src/engine/mystery_event_menu.c b/src/engine/mystery_event_menu.c index d70414da4..38912be86 100644 --- a/src/engine/mystery_event_menu.c +++ b/src/engine/mystery_event_menu.c @@ -13,8 +13,7 @@ #include "strings2.h" #include "task.h" #include "text.h" - -extern u8 ewram[]; +#include "ewram.h" static EWRAM_DATA u8 gUnknown_02039338 = 0; diff --git a/src/engine/save_failed_screen.c b/src/engine/save_failed_screen.c index d194c1625..06505c0c2 100644 --- a/src/engine/save_failed_screen.c +++ b/src/engine/save_failed_screen.c @@ -11,6 +11,7 @@ #include "strings.h" #include "task.h" #include "text.h" +#include "ewram.h" // In English 1.0, the text window is too small, causing text to overflow. @@ -22,8 +23,6 @@ #define CLOCK_WIN_TOP (MSG_WIN_TOP - 4) -extern u8 ewram[]; - static EWRAM_DATA u16 gSaveFailedType = 0; static EWRAM_DATA u16 gSaveFailedClockInfo[9] = {0}; diff --git a/src/field/dewford_trend.c b/src/field/dewford_trend.c index 5f4d5abfe..102784066 100644 --- a/src/field/dewford_trend.c +++ b/src/field/dewford_trend.c @@ -7,8 +7,6 @@ #include "text.h" #include "ewram.h" -extern u8 ewram[]; - extern u16 gScriptResult; extern u16 gSpecialVar_0x8004; diff --git a/src/field/pokeblock.c b/src/field/pokeblock.c index e5084da18..a4497295f 100644 --- a/src/field/pokeblock.c +++ b/src/field/pokeblock.c @@ -299,7 +299,7 @@ static bool8 sub_810B6C0(void) case 10: if (MultistepInitMenuWindowContinue()) { - ewram[0x1ffff] = 0; + ewram1FFFF = 0; gMain.state++; } break; @@ -317,7 +317,7 @@ static bool8 sub_810B6C0(void) gMain.state++; break; case 13: - ewram[0x1fffe] = sub_810BA50(0x38, 0x40, 0); + ewram1FFFE = sub_810BA50(0x38, 0x40, 0); gMain.state++; break; case 14: @@ -369,27 +369,27 @@ void sub_810B96C(void) static bool8 sub_810B998(void) { - switch (ewram[0x1ffff]) + switch (ewram1FFFF) { case 0: LZDecompressVram(gMenuPokeblock_Gfx, BG_CHAR_ADDR(2)); - ewram[0x1ffff]++; + ewram1FFFF++; break; case 1: LZDecompressWram(gMenuPokeblock_Tilemap, gBGTilemapBuffers[2]); - ewram[0x1ffff]++; + ewram1FFFF++; break; case 2: LoadCompressedPalette(gMenuPokeblock_Pal, 0, 0xc0); - ewram[0x1ffff]++; + ewram1FFFF++; break; case 3: LoadCompressedObjectPic(&gUnknown_083F7F74); - ewram[0x1ffff]++; + ewram1FFFF++; break; case 4: LoadCompressedObjectPalette(&gUnknown_083F7F7C); - ewram[0x1ffff] = 0; + ewram1FFFF = 0; return TRUE; } return FALSE; @@ -611,7 +611,7 @@ static void sub_810BDAC(bool8 flag) static void sub_810BF38(bool8 flag) { PlaySE(SE_SELECT); - gSprites[ewram[0x1fffe]].callback = sub_810C8D4; + gSprites[ewram1FFFE].callback = sub_810C8D4; sub_810BDAC(flag); } diff --git a/src/pokemon/learn_move.c b/src/pokemon/learn_move.c index 33252c66b..a47896ea5 100644 --- a/src/pokemon/learn_move.c +++ b/src/pokemon/learn_move.c @@ -16,8 +16,8 @@ #include "strings2.h" #include "task.h" #include "trig.h" +#include "ewram.h" -extern u8 ewram[]; extern u16 gSpecialVar_0x8004; extern u16 gSpecialVar_0x8005; extern u8 gTileBuffer[]; @@ -277,7 +277,7 @@ void CB2_InitLearnMove(void) ResetSpriteData(); FreeAllSpritePalettes(); ResetTasks(); - sLearnMoveStruct = (struct LearnMoveStruct *)(ewram + 0x17000); + sLearnMoveStruct = eLearnMoveStruct; ClearLearnMoveVars(); sLearnMoveStruct->partyMon = gSpecialVar_0x8004; sub_8133558(); @@ -312,7 +312,7 @@ void sub_81327A4(void) ResetSpriteData(); FreeAllSpritePalettes(); ResetTasks(); - sLearnMoveStruct = (struct LearnMoveStruct *)(ewram + 0x17000); + sLearnMoveStruct = eLearnMoveStruct; sub_8133558(); sLearnMoveStruct->unk2C6 = gSpecialVar_0x8005; SetVBlankCallback(VBlankCB_LearnMove); diff --git a/src/pokemon/pokeblock_feed.c b/src/pokemon/pokeblock_feed.c index b0b710803..5f218a6f6 100644 --- a/src/pokemon/pokeblock_feed.c +++ b/src/pokemon/pokeblock_feed.c @@ -540,7 +540,7 @@ static bool8 TransitionToPokeblockFeedScene(void) case 6: if (MultistepInitMenuWindowContinue()) { - ewram[0x1FFFF] = 0; + ewram1FFFF = 0; gMain.state++; } break; @@ -551,11 +551,11 @@ static bool8 TransitionToPokeblockFeedScene(void) } break; case 8: - ewram[0x1FFFD] = sub_81480B4(); + ewram1FFFD = sub_81480B4(); gMain.state++; break; case 9: - ewram[0x1FFFE] = PokeblockFeed_CreatePokeSprite(&gPlayerParty[gPokeblockMonID]); + ewram1FFFE = PokeblockFeed_CreatePokeSprite(&gPlayerParty[gPokeblockMonID]); gMain.state++; break; case 10: @@ -611,13 +611,13 @@ static bool8 sub_8147B20(struct Pokemon* mon) { u16 species; u32 PiD, TiD; - switch (ewram[0x1FFFF]) + switch (ewram1FFFF) { case 0: species = GetMonData(mon, MON_DATA_SPECIES2); PiD = GetMonData(mon, MON_DATA_PERSONALITY); HandleLoadSpecialPokePic(&gMonFrontPicTable[species], gMonFrontPicCoords[species].coords, gMonFrontPicCoords[species].y_offset, 0x2000000, gUnknown_081FAF4C[1], species, PiD); - ewram[0x1FFFF]++; + ewram1FFFF++; break; case 1: { @@ -629,37 +629,37 @@ static bool8 sub_8147B20(struct Pokemon* mon) palette = GetMonSpritePalStructFromOtIdPersonality(species, TiD, PiD); LoadCompressedObjectPalette(palette); GetMonSpriteTemplate_803C56C(palette->tag, 1); - ewram[0x1FFFF]++; + ewram1FFFF++; } break; case 2: LoadCompressedObjectPic(&gUnknown_083F7F74); - ewram[0x1FFFF]++; + ewram1FFFF++; break; case 3: LoadCompressedObjectPalette(&gUnknown_083F7F7C); - ewram[0x1FFFF]++; + ewram1FFFF++; break; case 4: LoadCompressedObjectPic(&sUnknown_084121DC); - ewram[0x1FFFF]++; + ewram1FFFF++; break; case 5: SetPokeblockFeedSpritePal(gScriptItemId); LoadCompressedObjectPalette(&sPokeblockFeedSpritePal); - ewram[0x1FFFF]++; + ewram1FFFF++; break; case 6: LZDecompressVram(gBattleTerrainTiles_Building, (void*)(VRAM)); - ewram[0x1FFFF]++; + ewram1FFFF++; break; case 7: LZDecompressVram(gUnknown_08E782FC, (void*)(VRAM + 0xE800)); - ewram[0x1FFFF]++; + ewram1FFFF++; break; case 8: LoadCompressedPalette(gBattleTerrainPalette_BattleTower, 0x20, 0x60); - ewram[0x1FFFF] = 0; + ewram1FFFF = 0; return TRUE; } return FALSE; @@ -684,13 +684,13 @@ static void sub_8147CC8(u8 taskID) sub_81481DC(); break; case 255: - sub_8148108(ewram[0x1FFFD], gTasks[taskID].data[1]); + sub_8148108(ewram1FFFD, gTasks[taskID].data[1]); break; case 269: - ewram[0x1FFFC] = CreatePokeblockSprite(); + ewram1FFFC = CreatePokeblockSprite(); break; case 281: - sub_8148044(ewram[0x1FFFE]); + sub_8148044(ewram1FFFE); break; case 297: gTasks[taskID].func = Task_PrintAtePokeblockText; diff --git a/src/pokemon/pokemon_1.c b/src/pokemon/pokemon_1.c index 9a92f379d..750a9892a 100644 --- a/src/pokemon/pokemon_1.c +++ b/src/pokemon/pokemon_1.c @@ -9,6 +9,7 @@ #include "sprite.h" #include "string_util.h" #include "text.h" +#include "ewram.h" //Extracts the upper 16 bits of a 32-bit number #define HIHALF(n) (((n) & 0xFFFF0000) >> 16) @@ -16,7 +17,6 @@ //Extracts the lower 16 bits of a 32-bit number #define LOHALF(n) ((n) & 0xFFFF) -extern u8 ewram[]; extern u16 gMoveToLearn; static EWRAM_DATA u8 sLearningMoveTableID = 0; @@ -436,9 +436,9 @@ void CalculateMonStats(struct Pokemon *mon) newMaxHP = (((n + hpEV / 4) * level) / 100) + level + 10; } - ewram[0x160FA] = newMaxHP - oldMaxHP; - if (ewram[0x160FA] == 0) - ewram[0x160FA] = 1; + eStatHp = newMaxHP - oldMaxHP; + if (eStatHp == 0) + eStatHp = 1; SetMonData(mon, MON_DATA_MAX_HP, &newMaxHP); diff --git a/src/pokemon/pokemon_menu.c b/src/pokemon/pokemon_menu.c index 93a3dd797..3a2c12db5 100644 --- a/src/pokemon/pokemon_menu.c +++ b/src/pokemon/pokemon_menu.c @@ -50,7 +50,6 @@ extern u8 gUnknown_0202E8F5; extern u8 gUnknown_0202E8F6; extern u8 gUnknown_02038561; extern u16 gUnknown_0202E8F8; -extern u8 ewram[]; extern void (*gUnknown_03004AE4)(u8 taskID, u16 itemID, TaskFunc func); extern TaskFunc gUnknown_03005CF0; diff --git a/src/rom3.c b/src/rom3.c index 0cd73c44a..ceb7785ac 100644 --- a/src/rom3.c +++ b/src/rom3.c @@ -399,16 +399,18 @@ void PrepareBufferDataTransferLink(u8 a, u16 size, u8 *data) gTasks[gUnknown_020238C4].data[12] = gTasks[gUnknown_020238C4].data[14]; gTasks[gUnknown_020238C4].data[14] = 0; } - ewram[gTasks[gUnknown_020238C4].data[14] + 0x14000] = a; - ewram[gTasks[gUnknown_020238C4].data[14] + 0x14001] = gActiveBank; - ewram[gTasks[gUnknown_020238C4].data[14] + 0x14002] = gBankAttacker; - ewram[gTasks[gUnknown_020238C4].data[14] + 0x14003] = gBankTarget; - ewram[gTasks[gUnknown_020238C4].data[14] + 0x14004] = r9; - ewram[gTasks[gUnknown_020238C4].data[14] + 0x14005] = (r9 & 0x0000FF00) >> 8; - ewram[gTasks[gUnknown_020238C4].data[14] + 0x14006] = gAbsentBankFlags; - ewram[gTasks[gUnknown_020238C4].data[14] + 0x14007] = gEffectBank; + + ewram14000arr(0, gTasks[gUnknown_020238C4].data[14]) = a; + ewram14000arr(1, gTasks[gUnknown_020238C4].data[14]) = gActiveBank; + ewram14000arr(2, gTasks[gUnknown_020238C4].data[14]) = gBankAttacker; + ewram14000arr(3, gTasks[gUnknown_020238C4].data[14]) = gBankTarget; + ewram14000arr(4, gTasks[gUnknown_020238C4].data[14]) = r9; + ewram14000arr(5, gTasks[gUnknown_020238C4].data[14]) = (r9 & 0x0000FF00) >> 8; + ewram14000arr(6, gTasks[gUnknown_020238C4].data[14]) = gAbsentBankFlags; + ewram14000arr(7, gTasks[gUnknown_020238C4].data[14]) = gEffectBank; + for (i = 0; i < size; i++) - ewram[gTasks[gUnknown_020238C4].data[14] + 0x14008 + i] = data[i]; + ewram14008arr(i, gTasks[gUnknown_020238C4].data[14]) = data[i]; gTasks[gUnknown_020238C4].data[14] = gTasks[gUnknown_020238C4].data[14] + r9 + 8; } @@ -448,8 +450,8 @@ void sub_800C1A8(u8 taskId) gTasks[taskId].data[12] = 0; gTasks[taskId].data[15] = 0; } - var = (ewram[gTasks[taskId].data[15] + 0x14004] | (ewram[gTasks[taskId].data[15] + 0x14005] << 8)) + 8; - SendBlock(bitmask_all_link_players_but_self(), &ewram[gTasks[taskId].data[15] + 0x14000], var); + var = (ewram14004arr(0, gTasks[taskId].data[15]) | (ewram14004arr(1, gTasks[taskId].data[15]) << 8)) + 8; + SendBlock(bitmask_all_link_players_but_self(), &ewram14000arr(0, gTasks[taskId].data[15]), var); gTasks[taskId].data[11]++; } else @@ -462,7 +464,7 @@ void sub_800C1A8(u8 taskId) case 4: if (sub_8007ECC()) { - var = ewram[gTasks[taskId].data[15] + 0x14004] | (ewram[gTasks[taskId].data[15] + 0x14005] << 8); + var = (ewram14004arr(0, gTasks[taskId].data[15]) | (ewram14004arr(1, gTasks[taskId].data[15]) << 8)); gTasks[taskId].data[13] = 1; gTasks[taskId].data[15] = gTasks[taskId].data[15] + var + 8; gTasks[taskId].data[11] = 3; @@ -533,28 +535,28 @@ void sub_800C47C(u8 taskId) gTasks[taskId].data[12] = 0; gTasks[taskId].data[15] = 0; } - r4 = ewram[0x15000 + gTasks[taskId].data[15] + 1]; - r7 = ewram[0x15000 + gTasks[taskId].data[15] + 4] | (ewram[0x15000 + gTasks[taskId].data[15] + 5] << 8); - switch (ewram[0x15000 + gTasks[taskId].data[15] + 0]) + r4 = ewram15000arr(1, gTasks[taskId].data[15]); + r7 = ewram15000arr(4, gTasks[taskId].data[15]) | (ewram15000arr(5, gTasks[taskId].data[15]) << 8); + switch (ewram15000arr(0, gTasks[taskId].data[15])) { case 0: if (gBattleExecBuffer & gBitTable[r4]) return; - memcpy(gBattleBufferA[r4], &ewram[0x15000 + gTasks[taskId].data[15] + 8], r7); + memcpy(gBattleBufferA[r4], &ewram15000arr(8, gTasks[taskId].data[15]), r7); sub_80155A4(r4); if (!(gBattleTypeFlags & BATTLE_TYPE_WILD)) { - gBankAttacker = ewram[0x15000 + gTasks[taskId].data[15] + 2]; - gBankTarget = ewram[0x15000 + gTasks[taskId].data[15] + 3]; - gAbsentBankFlags = ewram[0x15000 + gTasks[taskId].data[15] + 6]; - gEffectBank = ewram[0x15000 + gTasks[taskId].data[15] + 7]; + gBankAttacker = ewram15000arr(2, gTasks[taskId].data[15]); + gBankTarget = ewram15000arr(3, gTasks[taskId].data[15]); + gAbsentBankFlags = ewram15000arr(6, gTasks[taskId].data[15]); + gEffectBank = ewram15000arr(7, gTasks[taskId].data[15]); } break; case 1: - memcpy(gBattleBufferB[r4], &ewram[0x15000 + gTasks[taskId].data[15] + 8], r7); + memcpy(gBattleBufferB[r4], &ewram15000arr(8, gTasks[taskId].data[15]), r7); break; case 2: - r2 = ewram[0x15000 + gTasks[taskId].data[15] + 8]; + r2 = ewram15000arr(8, gTasks[taskId].data[15]); gBattleExecBuffer &= ~(gBitTable[r4] << (r2 * 4)); break; } diff --git a/src/scene/berry_blender.c b/src/scene/berry_blender.c index 7ffcc5185..b5d36ad1e 100644 --- a/src/scene/berry_blender.c +++ b/src/scene/berry_blender.c @@ -20,6 +20,7 @@ #include "menu_cursor.h" #include "trig.h" #include "pokeblock.h" +#include "ewram.h" //needed to match Blender_ControlHitPitch struct MusicPlayerInfo @@ -207,7 +208,6 @@ extern void de_sub_8073110(); extern struct MusicPlayerInfo gMPlay_SE2; extern struct MusicPlayerInfo gMPlay_BGM; -extern u8 ewram[]; extern u16 gScriptItemId; extern u8 gUnknown_020297ED; extern u8 byte_3002A68; @@ -828,7 +828,7 @@ static bool8 sub_804E2EC(void) switch (gBerryBlenderData->field_1) { case 0: - LZDecompressWram(gUnknown_08E6C100, &ewram[0x10000]); + LZDecompressWram(gUnknown_08E6C100, ewram10000); gBerryBlenderData->field_1++; break; case 1: @@ -843,7 +843,7 @@ static bool8 sub_804E2EC(void) break; case 2: { - void* offsetRead = &ewram[0x10000]; + void* offsetRead = ewram10000; void* offsetWrite = (void*)(VRAM); u32 size = 0x2000; while (TRUE) @@ -862,16 +862,16 @@ static bool8 sub_804E2EC(void) } break; case 3: - LZDecompressWram(gUnknown_08E6C920, &ewram[0x10000]); + LZDecompressWram(gUnknown_08E6C920, ewram10000); gBerryBlenderData->field_1++; break; case 4: - LZDecompressWram(gUnknown_08E6D354, &ewram[0x13000]); + LZDecompressWram(gUnknown_08E6D354, ewram13000); gBerryBlenderData->field_1++; break; case 5: { - void* offsetRead = &ewram[0x10000]; + void* offsetRead = ewram10000; void* offsetWrite = (void*)(VRAM + 0xE000); DmaCopy16(3, offsetRead, offsetWrite, 0x1000); @@ -880,7 +880,7 @@ static bool8 sub_804E2EC(void) break; case 6: { - void* offsetRead = &ewram[0x11000]; + void* offsetRead = ewram11000; void* offsetWrite = (void*)(VRAM + 0xF000); DmaCopy16(3, offsetRead, offsetWrite, 0x1000); @@ -890,7 +890,7 @@ static bool8 sub_804E2EC(void) case 7: { u16 i; - u16* palStore = (u16*)(&ewram[0x13000]); + u16* palStore = (u16*)(ewram13000); void* offsetRead; void* offsetWrite; @@ -898,7 +898,7 @@ static bool8 sub_804E2EC(void) { *(palStore + i) |= 0x100; } - offsetRead = &ewram[0x13000]; + offsetRead = ewram13000; offsetWrite = (void*)(VRAM + 0x6000); DmaCopy16(3, offsetRead, offsetWrite, 0x500); LoadPalette(sBlenderOuterPal, 0x80, 0x20); @@ -937,7 +937,7 @@ void sub_804E538(void) { u8* field6F; //this temp value is needed to match - gBerryBlenderData = (struct BerryBlenderData*)(&ewram[0x18000]); + gBerryBlenderData = eBerryBlenderData; field6F = &gBerryBlenderData->field_6F; gBerryBlenderData->field_0 = 0; @@ -1111,7 +1111,7 @@ void sub_804E990(void) s32 i; REG_DISPCNT = 0; - gBerryBlenderData = (struct BerryBlenderData*)(&ewram[0x18000]); + gBerryBlenderData = eBerryBlenderData; gBerryBlenderData->field_0 = 0; gBerryBlenderData->field_134 = 0; for (i = 0; i < BLENDER_MAX_PLAYERS; i++) diff --git a/src/scene/contest_painting.c b/src/scene/contest_painting.c index 928b59760..9df2d56da 100644 --- a/src/scene/contest_painting.c +++ b/src/scene/contest_painting.c @@ -12,8 +12,7 @@ #include "strings.h" #include "text.h" #include "unknown_task.h" - -extern u8 ewram[]; +#include "ewram.h" static u8 gUnknown_03000750; static u16 gUnknown_03000752; @@ -184,15 +183,15 @@ static void ShowContestPainting(void) case 2: SeedRng(gMain.vblankCounter1); InitKeys(); - ContestPaintingInitWindow(ewram[0x15DDF]); + ContestPaintingInitWindow(ewram15DDF); gMain.state++; break; case 3: - sub_8107090(ewram[0x15DDE], ewram[0x15DDF]); + sub_8107090(ewram15DDE, ewram15DDF); gMain.state++; break; case 4: - ContestPaintingPrintCaption(ewram[0x15DDE], ewram[0x15DDF]); + ContestPaintingPrintCaption(ewram15DDE, ewram15DDF); LoadPalette(gUnknown_083F6140, 0, 1 * 2); DmaClear32(3, PLTT, 0x400); BeginFastPaletteFade(2); diff --git a/src/scene/egg_hatch.c b/src/scene/egg_hatch.c index 032dcd284..d363e4bcd 100644 --- a/src/scene/egg_hatch.c +++ b/src/scene/egg_hatch.c @@ -20,8 +20,8 @@ #include "trig.h" #include "rng.h" #include "trade.h" +#include "ewram.h" -extern u8 ewram[]; extern struct SpriteTemplate gUnknown_02024E8C; struct EggHatchData @@ -416,7 +416,7 @@ static u8 EggHatchCreateMonSprite(u8 a0, u8 switchID, u8 pokeID) { u16 species = GetMonData(mon, MON_DATA_SPECIES); u32 pid = GetMonData(mon, MON_DATA_PERSONALITY); - HandleLoadSpecialPokePic(&gMonFrontPicTable[species], gMonFrontPicCoords[species].coords, gMonFrontPicCoords[species].y_offset,(u32)(&ewram[0]), gUnknown_081FAF4C[2 * a0 + 1], species, pid); + HandleLoadSpecialPokePic(&gMonFrontPicTable[species], gMonFrontPicCoords[species].coords, gMonFrontPicCoords[species].y_offset, ewram0_6, gUnknown_081FAF4C[2 * a0 + 1], species, pid); LoadCompressedObjectPalette(GetMonSpritePalStruct(mon)); } break; @@ -460,7 +460,7 @@ static void CB2_EggHatch_0(void) { case 0: REG_DISPCNT = 0; - gEggHatchData = (struct EggHatchData*)(&ewram[0x18000]); + gEggHatchData = eEggHatchData; gEggHatchData->eggPartyID = gSpecialVar_0x8004; gEggHatchData->eggShardVelocityID = 0; ResetTasks(); @@ -479,8 +479,8 @@ static void CB2_EggHatch_0(void) break; case 2: LZDecompressVram(&gUnknown_08D00000, (void*)(VRAM)); - CpuSet(&gUnknown_08D00524, &ewram[0], 0x800); - DmaCopy16(3, &ewram[0], (void*)(VRAM + 0x2800), 0x500); + CpuSet(&gUnknown_08D00524, ewram0_7, 0x800); + DmaCopy16(3, ewram0_7, (void*)(VRAM + 0x2800), 0x500); LoadCompressedPalette(&gUnknown_08D004E0, 0, 0x20); gMain.state++; break; diff --git a/src/scene/hall_of_fame.c b/src/scene/hall_of_fame.c index 6f7df576b..72bd051da 100644 --- a/src/scene/hall_of_fame.c +++ b/src/scene/hall_of_fame.c @@ -17,10 +17,10 @@ #include "decompress.h" #include "rng.h" #include "trig.h" +#include "ewram.h" static EWRAM_DATA u32 sUnknown_0203931C = 0; -extern u8 ewram[]; extern bool8 gUnknown_02039324; // has hall of fame records extern void (*gGameContinueCallback)(void); extern struct MusicPlayerInfo gMPlay_BGM; @@ -156,69 +156,69 @@ static const struct OamData sOamData_840B598 = void* const gUnknown_0840B5A0[] = { - &ewram[0x08000], - &ewram[0x0A000], - &ewram[0x0C000], - &ewram[0x0E000], - &ewram[0x10000], - &ewram[0x14000], - &ewram[0x18000] + ewram8000, + ewramA000, + ewramC000, + ewramE000, + ewram10000, + ewram14000, + ewram18000_2 }; static const struct SpriteFrameImage sSpriteImageTable_840B5BC[] = { - {&ewram[0x8000], 0x800}, - {&ewram[0x8800], 0x800}, - {&ewram[0x9000], 0x800}, - {&ewram[0x9800], 0x800} + {ewram8000, 0x800}, + {ewram8800, 0x800}, + {ewram9000, 0x800}, + {ewram9800, 0x800} }; static const struct SpriteFrameImage sSpriteImageTable_840B5DC[] = { - {&ewram[0xA000], 0x800}, - {&ewram[0xA800], 0x800}, - {&ewram[0xB000], 0x800}, - {&ewram[0xB800], 0x800} + {ewramA000, 0x800}, + {ewramA800, 0x800}, + {ewramB000, 0x800}, + {ewramB800, 0x800} }; static const struct SpriteFrameImage sSpriteImageTable_840B5FC[] = { - {&ewram[0xC000], 0x800}, - {&ewram[0xC800], 0x800}, - {&ewram[0xD000], 0x800}, - {&ewram[0xD800], 0x800} + {ewramC000, 0x800}, + {ewramC800, 0x800}, + {ewramD000, 0x800}, + {ewramD800, 0x800} }; static const struct SpriteFrameImage sSpriteImageTable_840B61C[] = { - {&ewram[0xE000], 0x800}, - {&ewram[0xE800], 0x800}, - {&ewram[0xF000], 0x800}, - {&ewram[0xF800], 0x800} + {ewramE000, 0x800}, + {ewramE800, 0x800}, + {ewramF000, 0x800}, + {ewramF800, 0x800} }; static const struct SpriteFrameImage sSpriteImageTable_840B63C[] = { - {&ewram[0x10000], 0x800}, - {&ewram[0x10800], 0x800}, - {&ewram[0x11000], 0x800}, - {&ewram[0x11800], 0x800} + {ewram10000, 0x800}, + {ewram10800, 0x800}, + {ewram11000, 0x800}, + {ewram11800, 0x800} }; static const struct SpriteFrameImage sSpriteImageTable_840B65C[] = { - {&ewram[0x14000], 0x800}, - {&ewram[0x14800], 0x800}, - {&ewram[0x15000], 0x800}, - {&ewram[0x15800], 0x800} + {ewram14000, 0x800}, + {ewram14800, 0x800}, + {ewram15000, 0x800}, + {ewram15800, 0x800} }; static const struct SpriteFrameImage sSpriteImageTable_840B67C[] = { - {&ewram[0x18000], 0x800}, - {&ewram[0x18800], 0x800}, - {&ewram[0x19000], 0x800}, - {&ewram[0x19800], 0x800} + {ewram18000_2, 0x800}, + {ewram18800, 0x800}, + {ewram19000, 0x800}, + {ewram19800, 0x800} }; static const struct SpriteFrameImage* const sUnknown_0840B69C[7] = @@ -486,7 +486,7 @@ static void sub_8141FC4(void) static void sub_8141FF8(u8 taskID) { u16 i, j; - struct HallofFameMons* fameMons = (struct HallofFameMons*)(&ewram[0x1C000]); + struct HallofFameMons* fameMons = eHallOfFameMons1; gTasks[taskID].tPokesNumber = 0; // valid pokes for (i = 0; i < 6; i++) @@ -530,13 +530,13 @@ static void sub_8141FF8(u8 taskID) static void sub_814217C(u8 taskID) { u16 i; - struct HallofFameMons* fameMons = (struct HallofFameMons*)(&ewram[0x1C000]); - struct HallofFameMons* lastSavedTeam = (struct HallofFameMons*)(&ewram[0x1E000]); + struct HallofFameMons* fameMons = eHallOfFameMons1; + struct HallofFameMons* lastSavedTeam = eHallOfFameMons2; if (gUnknown_02039324 == FALSE) { for (i = 0; i < 0x2000; i++) - ewram[i + 0x1E000] = 0; + ewram1E000(i) = 0; } else sub_8125EC8(3); @@ -548,8 +548,8 @@ static void sub_814217C(u8 taskID) } if (i >= HALL_OF_FAME_MAX_TEAMS) { - struct HallofFameMons* r5 = (struct HallofFameMons*)(&ewram[0x1E000]); - struct HallofFameMons* r6 = (struct HallofFameMons*)(&ewram[0x1E000]); + struct HallofFameMons* r5 = eHallOfFameMons2; + struct HallofFameMons* r6 = eHallOfFameMons2; r5++; for (i = 0; i < HALL_OF_FAME_MAX_TEAMS - 1; i++, r6++, r5++) { @@ -592,7 +592,7 @@ static void sub_8142320(u8 taskID) u8 spriteID; s16 xPos, yPos, field4, field6; - struct HallofFameMons* fameMons = (struct HallofFameMons*)(&ewram[0x1C000]); + struct HallofFameMons* fameMons = eHallOfFameMons1; u16 currPokeID = gTasks[taskID].tDisplayedPoke; struct HallofFameMon* currMon = &fameMons->mons[currPokeID]; @@ -623,7 +623,7 @@ static void sub_8142320(u8 taskID) static void sub_8142404(u8 taskID) { - struct HallofFameMons* fameMons = (struct HallofFameMons*)(&ewram[0x1C000]); + struct HallofFameMons* fameMons = eHallOfFameMons1; u16 currPokeID = gTasks[taskID].tDisplayedPoke; struct HallofFameMon* currMon = &fameMons->mons[currPokeID]; @@ -639,7 +639,7 @@ static void sub_8142404(u8 taskID) static void sub_8142484(u8 taskID) { - struct HallofFameMons* fameMons = (struct HallofFameMons*)(&ewram[0x1C000]); + struct HallofFameMons* fameMons = eHallOfFameMons1; u16 currPokeID = gTasks[taskID].tDisplayedPoke; struct HallofFameMon* currMon = &fameMons->mons[currPokeID]; @@ -808,7 +808,7 @@ void sub_81428CC(void) REG_BLDY = 0; sub_81435B8(); - fameMons = (struct HallofFameMons*)(&ewram[0x1C000]); + fameMons = eHallOfFameMons1; fameMons->mons[0] = sDummyFameMon; sub_80C5CD4(fameMons); @@ -847,7 +847,7 @@ static void sub_8142A28(u8 taskID) u16 *vram1, *vram2; u16 i; - struct HallofFameMons* savedTeams = (struct HallofFameMons*)(&ewram[0x1E000]); + struct HallofFameMons* savedTeams = eHallOfFameMons2; for (i = 0; i < HALL_OF_FAME_MAX_TEAMS; i++, savedTeams++) { if (savedTeams->mons[0].species == 0) @@ -872,7 +872,7 @@ static void sub_8142A28(u8 taskID) static void sub_8142B04(u8 taskID) { - struct HallofFameMons* savedTeams = (struct HallofFameMons*)(&ewram[0x1E000]); + struct HallofFameMons* savedTeams = eHallOfFameMons2; struct HallofFameMon* currMon; u16 i; u8* stringPtr; @@ -937,7 +937,7 @@ static void sub_8142B04(u8 taskID) static void sub_8142CC8(u8 taskID) { - struct HallofFameMons* savedTeams = (struct HallofFameMons*)(&ewram[0x1E000]); + struct HallofFameMons* savedTeams = eHallOfFameMons2; struct HallofFameMon* currMon; u16 i; u16 currMonID; @@ -1025,7 +1025,7 @@ static void sub_8142F78(u8 taskID) struct HallofFameMons* fameMons; CpuSet(gPlttBufferFaded, gPlttBufferUnfaded, 0x200); - fameMons = (struct HallofFameMons*)(&ewram[0x1C000]); + fameMons = eHallOfFameMons1; fameMons->mons[0] = sDummyFameMon; sub_80C5E38(fameMons); gTasks[taskID].func = sub_8142FCC; @@ -1258,7 +1258,7 @@ static void sub_81433E0(void) *((u16*)(VRAM + 0x3000) + i) = 2; } - offsetWrite4 = (u32)(&ewram[0]); + offsetWrite4 = ewram0_6; size4 = 0x4000; while (TRUE) { diff --git a/src/scene/intro.c b/src/scene/intro.c index af9b565a3..04173b86a 100644 --- a/src/scene/intro.c +++ b/src/scene/intro.c @@ -1207,6 +1207,7 @@ static void Task_IntroWaitToSetupPart3DoubleFight(u8 taskId) gTasks[taskId].func = Task_IntroLoadPart3Streaks; } +// TODO: use ewram define instead extern u8 ewram[][32]; static void Task_IntroLoadPart3Streaks(u8 taskId) -- cgit v1.2.3 From 5dd8964999ef207e84c41c834b596dbc31e10474 Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Mon, 6 Nov 2017 03:47:53 -0500 Subject: formatting --- src/rom3.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/rom3.c b/src/rom3.c index ceb7785ac..16e605390 100644 --- a/src/rom3.c +++ b/src/rom3.c @@ -400,7 +400,7 @@ void PrepareBufferDataTransferLink(u8 a, u16 size, u8 *data) gTasks[gUnknown_020238C4].data[14] = 0; } - ewram14000arr(0, gTasks[gUnknown_020238C4].data[14]) = a; + ewram14000arr(0, gTasks[gUnknown_020238C4].data[14]) = a; ewram14000arr(1, gTasks[gUnknown_020238C4].data[14]) = gActiveBank; ewram14000arr(2, gTasks[gUnknown_020238C4].data[14]) = gBankAttacker; ewram14000arr(3, gTasks[gUnknown_020238C4].data[14]) = gBankTarget; -- cgit v1.2.3 From eecafbaec17ba0721d091d1a12ac20fa71da352a Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Thu, 9 Nov 2017 03:13:09 -0500 Subject: depreciate use of shared_syms --- src/battle/battle_2.c | 6 ++-- src/battle/battle_3.c | 4 +-- src/battle/battle_7.c | 10 ------ src/battle/calculate_base_damage.c | 4 +-- src/de_rom_8040FE0.c | 5 ++- src/engine/link.c | 3 +- src/engine/record_mixing.c | 36 ++++++++++---------- src/engine/save.c | 22 ++++++------ src/field/fldeff_cut.c | 11 +++--- src/field/player_pc.c | 65 ++++++++++++++++++------------------ src/pokemon/pokedex_cry_screen.c | 5 +-- src/pokemon/pokemon_2.c | 28 ++++++++-------- src/pokemon/pokemon_summary_screen.c | 5 ++- src/rom_8077ABC.c | 59 ++++++++++++++++---------------- src/scene/contest_painting.c | 9 ++--- src/scene/credits.c | 2 -- src/scene/evolution_scene.c | 11 +++--- 17 files changed, 130 insertions(+), 155 deletions(-) (limited to 'src') diff --git a/src/battle/battle_2.c b/src/battle/battle_2.c index 8d27750bd..4b75818b6 100644 --- a/src/battle/battle_2.c +++ b/src/battle/battle_2.c @@ -1537,7 +1537,7 @@ void sub_8010874(void) gUnknown_02024C5C[i] = 0xFF; gLockedMove[i] = 0; gUnknown_02024C2C[i] = 0; - ewram17100.arr[i] = 0; + eFlashFireArr.arr[i] = 0; } for (i = 0; i < 2; i++) @@ -1699,7 +1699,7 @@ void SwitchInClearStructs(void) ewram160E8arr2(0, gActiveBank) = 0; ewram160E8arr2(1, gActiveBank) = 0; - ewram17100.arr[gActiveBank] = 0; + eFlashFireArr.arr[gActiveBank] = 0; gCurrentMove = 0; } @@ -1763,7 +1763,7 @@ void UndoEffectsAfterFainting(void) ewram16100arr2(2, gActiveBank) = 0; ewram16100arr2(3, gActiveBank) = 0; - ewram17100.arr[gActiveBank] = 0; + eFlashFireArr.arr[gActiveBank] = 0; gBattleMons[gActiveBank].type1 = gBaseStats[gBattleMons[gActiveBank].species].type1; gBattleMons[gActiveBank].type2 = gBaseStats[gBattleMons[gActiveBank].species].type2; diff --git a/src/battle/battle_3.c b/src/battle/battle_3.c index 1d6784297..f37111af5 100644 --- a/src/battle/battle_3.c +++ b/src/battle/battle_3.c @@ -1718,14 +1718,14 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) case ABILITY_FLASH_FIRE: if (moveType == TYPE_FIRE && !(gBattleMons[bank].status1 & STATUS_FREEZE)) { - if (!(ewram17100.arr[bank] & 1)) + if (!(eFlashFireArr.arr[bank] & 1)) { gBattleCommunication[MULTISTRING_CHOOSER] = 0; if (gProtectStructs[gBankAttacker].notFirstStrike) gBattlescriptCurrInstr = BattleScript_FlashFireBoost; else gBattlescriptCurrInstr = BattleScript_FlashFireBoost_PPLoss; - ewram17100.arr[bank] |= 1; + eFlashFireArr.arr[bank] |= 1; effect = 2; } else diff --git a/src/battle/battle_7.c b/src/battle/battle_7.c index 4ca1baa53..2a335ea63 100644 --- a/src/battle/battle_7.c +++ b/src/battle/battle_7.c @@ -20,16 +20,6 @@ #include "gba/m4a_internal.h" #include "ewram.h" -struct Struct2019348 -{ - u8 filler0[2]; - u16 unk2; - u8 filler4[4]; - u32 unk8; - u32 unkC; - u32 unk10; -}; - extern u8 gBattleBufferA[][0x200]; extern u8 gActiveBank; extern u8 gNoOfAllBanks; diff --git a/src/battle/calculate_base_damage.c b/src/battle/calculate_base_damage.c index f5c679876..42c26dee0 100644 --- a/src/battle/calculate_base_damage.c +++ b/src/battle/calculate_base_damage.c @@ -11,8 +11,8 @@ #include "species.h" #include "moves.h" #include "battle_move_effects.h" +#include "ewram.h" -extern u32 dword_2017100[]; extern u16 gBattleTypeFlags; extern struct BattlePokemon gBattleMons[4]; extern u16 gCurrentMove; @@ -301,7 +301,7 @@ s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *de } // flash fire triggered - if ((dword_2017100[bankAtk] & 1) && type == TYPE_FIRE) + if ((eFlashFireArr.arr[bankAtk] & 1) && type == TYPE_FIRE) damage = (15 * damage) / 10; } diff --git a/src/de_rom_8040FE0.c b/src/de_rom_8040FE0.c index 8cf510d6f..8adad3245 100644 --- a/src/de_rom_8040FE0.c +++ b/src/de_rom_8040FE0.c @@ -1,6 +1,7 @@ #include "global.h" #include "battle.h" #include "battle_tower.h" +#include "ewram.h" #if GERMAN @@ -21,8 +22,6 @@ enum { TRAINER_CLASS_MAY_3 = 63, }; -extern struct SecretBaseRecord gSecretBaseRecord; - extern u8 gTrainerClassNames[][13]; extern struct Trainer gTrainers[]; @@ -70,7 +69,7 @@ u8 *de_sub_8041024(s32 arg0, u32 arg1) { { case 0x400: nameIndex = GetSecretBaseTrainerNameIndex(); - gender = gSecretBaseRecord.gender; + gender = eSecretBaseRecord.gender; if (nameIndex == TRAINER_CLASS_NAME_SCHOOL_KID) { return de_sub_8040FE0(gender); diff --git a/src/engine/link.c b/src/engine/link.c index 504b828a1..c526baec7 100644 --- a/src/engine/link.c +++ b/src/engine/link.c @@ -36,7 +36,6 @@ struct LinkTestBGInfo u32 dummy_C; }; -extern u8 unk_2004000[]; extern u16 gBattleTypeFlags; extern u16 word_3004858; @@ -404,7 +403,7 @@ static void LinkTestProcessKeyInput(void) if (gMain.newKeys & A_BUTTON) gShouldAdvanceLinkState = 1; if (gMain.heldKeys & B_BUTTON) - InitBlockSend(unk_2004000, 0x2004); + InitBlockSend(ewram4000, 0x2004); if (gMain.newKeys & L_BUTTON) BeginNormalPaletteFade(-1, 0, 0x10, 0, 2); if (gMain.newKeys & START_BUTTON) diff --git a/src/engine/record_mixing.c b/src/engine/record_mixing.c index 27992bf1f..3ae0c4ea3 100644 --- a/src/engine/record_mixing.c +++ b/src/engine/record_mixing.c @@ -66,31 +66,31 @@ void RecordMixing_PrepareExchangePacket(void) sub_80BC300(); sub_80C045C(); - memcpy(unk_2018000.secretBases, recordMixingSecretBases, sizeof(unk_2018000.secretBases)); - memcpy(unk_2018000.tvShows, recordMixingTvShows, sizeof(unk_2018000.tvShows)); - memcpy(unk_2018000.filler1004, gUnknown_083D0274, sizeof(unk_2008000.filler1004)); - memcpy(unk_2018000.filler1044, gUnknown_083D0278, sizeof(unk_2008000.filler1044)); - memcpy(unk_2018000.easyChatPairs, recordMixingEasyChatPairs, sizeof(unk_2018000.easyChatPairs)); + memcpy(ewram_2018000.secretBases, recordMixingSecretBases, sizeof(ewram_2018000.secretBases)); + memcpy(ewram_2018000.tvShows, recordMixingTvShows, sizeof(ewram_2018000.tvShows)); + memcpy(ewram_2018000.filler1004, gUnknown_083D0274, sizeof(ewram_2008000.filler1004)); + memcpy(ewram_2018000.filler1044, gUnknown_083D0278, sizeof(ewram_2008000.filler1044)); + memcpy(ewram_2018000.easyChatPairs, recordMixingEasyChatPairs, sizeof(ewram_2018000.easyChatPairs)); gUnknown_02038738.mail[0] = gSaveBlock1.daycareData.misc.mail[0]; gUnknown_02038738.mail[1] = gSaveBlock1.daycareData.misc.mail[1]; sub_8041324(gSaveBlock1.daycareData.mons, &gUnknown_02038738); - memcpy(&unk_2018000.filler10AC, gUnknown_083D0280, sizeof(struct RecordMixingDayCareMail)); - memcpy(&unk_2018000.battleTowerRecord, gBattleTowerPlayerRecord, sizeof(struct BattleTowerRecord)); + memcpy(&ewram_2018000.filler10AC, gUnknown_083D0280, sizeof(struct RecordMixingDayCareMail)); + memcpy(&ewram_2018000.battleTowerRecord, gBattleTowerPlayerRecord, sizeof(struct BattleTowerRecord)); if (GetMultiplayerId() == 0) - unk_2018000.filler11C8[0] = GetRecordMixingGift(); + ewram_2018000.filler11C8[0] = GetRecordMixingGift(); } void RecordMixing_ReceiveExchangePacket(u32 a) { - sub_80BD674(unk_2008000.secretBases, sizeof(struct PlayerRecords), a); - sub_80BFD44((u8 *)unk_2008000.tvShows, sizeof(struct PlayerRecords), a); - sub_80C0514(unk_2008000.filler1004, sizeof(struct PlayerRecords), a); - sub_80B9B1C(unk_2008000.filler1044, sizeof(struct PlayerRecords), a); - sub_80FA4E4(unk_2008000.easyChatPairs, sizeof(struct PlayerRecords), a); - sub_80B9C6C((u8 *)&unk_2008000.filler10AC, sizeof(struct PlayerRecords), a, unk_2008000.tvShows); - sub_80B9B70(&unk_2008000.battleTowerRecord, sizeof(struct PlayerRecords), a); - sub_80B9F3C(unk_2008000.filler11C8, a); + sub_80BD674(ewram_2008000.secretBases, sizeof(struct PlayerRecords), a); + sub_80BFD44((u8 *)ewram_2008000.tvShows, sizeof(struct PlayerRecords), a); + sub_80C0514(ewram_2008000.filler1004, sizeof(struct PlayerRecords), a); + sub_80B9B1C(ewram_2008000.filler1044, sizeof(struct PlayerRecords), a); + sub_80FA4E4(ewram_2008000.easyChatPairs, sizeof(struct PlayerRecords), a); + sub_80B9C6C((u8 *)&ewram_2008000.filler10AC, sizeof(struct PlayerRecords), a, ewram_2008000.tvShows); + sub_80B9B70(&ewram_2008000.battleTowerRecord, sizeof(struct PlayerRecords), a); + sub_80B9F3C(ewram_2008000.filler11C8, a); } #define tCounter data[0] @@ -247,11 +247,11 @@ void sub_80B95F0(u8 taskId) task->tState = 0; task->data[5] = GetMultiplayerId_(); task->func = Task_RecordMixing_SendPacket; - StorePtrInTaskData(&unk_2018000, &task->data[2]); + StorePtrInTaskData(&ewram_2018000, &task->data[2]); subTaskId = CreateTask(Task_RecordMixing_CopyReceiveBuffer, 0x50); task->data[10] = subTaskId; gTasks[subTaskId].data[0] = taskId; - StorePtrInTaskData((u8 *)&unk_2008000, &gTasks[subTaskId].data[5]); + StorePtrInTaskData((u8 *)&ewram_2008000, &gTasks[subTaskId].data[5]); } break; case 5: // wait 60 frames diff --git a/src/engine/save.c b/src/engine/save.c index 57678dd8f..d5de2e408 100644 --- a/src/engine/save.c +++ b/src/engine/save.c @@ -5,14 +5,13 @@ #include "load_save.h" #include "overworld.h" #include "save_failed_screen.h" +#include "ewram.h" #define GETVALIDSTATUSBITFIELD ((1 << ARRAY_COUNT(gSaveSectionLocations)) - 1) #define GETCHUNKSIZE(chunk, n) ((sizeof(chunk) - (0xF80 * (n - 1))) >= 0xF80 ? 0xF80 : (sizeof(chunk) - (0xF80 * (n - 1)))) #define GETBLOCKOFFSET(n) (0xF80 * (n - 1)) #define TOTALNUMSECTORS ((ARRAY_COUNT(gSaveSectionLocations) * 2) + (ARRAY_COUNT(gHallOfFameSaveSectionLocations) * 2)) // there are 2 slots, so double each array count and get the sum. -extern struct SaveSection ewram; // slow save RAM - u16 gLastWrittenSector; u32 gLastSaveCounter; u16 gLastKnownGoodSector; @@ -24,7 +23,6 @@ u16 gSaveFileStatus; u32 gGameContinueCallback; extern struct PokemonStorage gPokemonStorage; -extern struct HallOfFame gHallOfFame; static EWRAM_DATA u32 gLastSaveSectorStatus = 0; // used but in an unferenced function, so unused @@ -48,8 +46,8 @@ const struct SaveSectionLocation gSaveSectionLocations[] = const struct SaveSectionLocation gHallOfFameSaveSectionLocations[] = { - {((u8 *) &gHallOfFame) + GETBLOCKOFFSET(1), GETCHUNKSIZE(struct HallOfFame, 1)}, // gHallOfFame is not a proper sym, so the struct must be used. - {((u8 *) &gHallOfFame) + GETBLOCKOFFSET(2), GETCHUNKSIZE(struct HallOfFame, 2)} + {((u8 *) eHallOfFame) + GETBLOCKOFFSET(1), GETCHUNKSIZE(struct HallOfFame, 1)}, // eHallOfFame is not a proper sym, so the struct must be used. + {((u8 *) eHallOfFame) + GETBLOCKOFFSET(2), GETCHUNKSIZE(struct HallOfFame, 2)} }; const u8 gFlashSectors[] = { 0x1E, 0x1F }; @@ -95,7 +93,7 @@ u8 save_write_to_flash(u16 a1, const struct SaveSectionLocation *location) u32 retVal; u16 i; - gFastSaveSection = &ewram; + gFastSaveSection = eSaveSection; if (a1 != 0xFFFF) // for link { @@ -156,7 +154,7 @@ u8 HandleWriteSector(u16 a1, const struct SaveSectionLocation *location) u8 HandleWriteSectorNBytes(u8 sector, u8 *data, u16 size) { u16 i; - struct SaveSection *section = &ewram; + struct SaveSection *section = eSaveSection; for (i = 0; i < sizeof(struct SaveSection); i++) ((char *)section)[i] = 0; @@ -186,7 +184,7 @@ u8 TryWriteSector(u8 sector, u8 *data) u32 RestoreSaveBackupVarsAndIncrement(const struct SaveSectionLocation *location) // location is unused { - gFastSaveSection = &ewram; + gFastSaveSection = eSaveSection; gLastKnownGoodSector = gLastWrittenSector; gLastSaveCounter = gSaveCounter; gLastWrittenSector++; @@ -199,7 +197,7 @@ u32 RestoreSaveBackupVarsAndIncrement(const struct SaveSectionLocation *location u32 RestoreSaveBackupVars(const struct SaveSectionLocation *location) // only ever called once, and gSaveBlock2 is passed to this function. location is unused { - gFastSaveSection = &ewram; + gFastSaveSection = eSaveSection; gLastKnownGoodSector = gLastWrittenSector; gLastSaveCounter = gSaveCounter; gUnknown_03005EB4 = 0; @@ -369,7 +367,7 @@ u8 sub_81257F0(u16 a1, const struct SaveSectionLocation *location) u8 sub_812587C(u16 a1, const struct SaveSectionLocation *location) { u8 retVal; - gFastSaveSection = &ewram; + gFastSaveSection = eSaveSection; if (a1 != 0xFFFF) { retVal = 0xFF; @@ -537,7 +535,7 @@ u8 GetSaveValidStatus(const struct SaveSectionLocation *location) u8 sub_8125B88(u8 a1, u8 *data, u16 size) { u16 i; - struct SaveSection *section = &ewram; + struct SaveSection *section = eSaveSection; DoReadFlashWholeSection(a1, section); if (section->security == UNKNOWN_CHECK_VALUE) { @@ -764,7 +762,7 @@ u8 unref_sub_8125FA0(void) u8 unref_sub_8125FF0(u8 *data, u16 size) { u16 i; - struct UnkSaveSection *section = (struct UnkSaveSection *)&ewram; + struct UnkSaveSection *section = (struct UnkSaveSection *)eSaveSection; for (i = 0; i < sizeof(struct SaveSection); i++) ((char *)section)[i] = 0; diff --git a/src/field/fldeff_cut.c b/src/field/fldeff_cut.c index 00643a979..00cabe5c0 100644 --- a/src/field/fldeff_cut.c +++ b/src/field/fldeff_cut.c @@ -16,8 +16,7 @@ #include "sprite.h" #include "task.h" #include "trig.h" - -extern u8 gCutGrassSpriteArray[8]; // seems to be an array of 8 sprite IDs +#include "ewram.h" extern void (*gFieldCallback)(void); extern void (*gUnknown_03005CE4)(void); @@ -135,9 +134,9 @@ bool8 FldEff_CutGrass(void) // populate sprite ID array for(i = 0; i < 8; i++) { - gCutGrassSpriteArray[i] = CreateSprite((struct SpriteTemplate *)&gSpriteTemplate_CutGrass, + eCutGrassSpriteArray[i] = CreateSprite((struct SpriteTemplate *)&gSpriteTemplate_CutGrass, gSprites[gPlayerAvatar.spriteId].oam.x + 8, gSprites[gPlayerAvatar.spriteId].oam.y + 20, 0); - gSprites[gCutGrassSpriteArray[i]].data2 = 32 * i; + gSprites[eCutGrassSpriteArray[i]].data2 = 32 * i; } return 0; } @@ -273,8 +272,8 @@ void sub_80A2AB8(void) u8 i; for (i = 1; i < 8; i++) - DestroySprite(&gSprites[gCutGrassSpriteArray[i]]); - FieldEffectStop(&gSprites[gCutGrassSpriteArray[0]], FLDEFF_CUT_GRASS); + DestroySprite(&gSprites[eCutGrassSpriteArray[i]]); + FieldEffectStop(&gSprites[eCutGrassSpriteArray[0]], FLDEFF_CUT_GRASS); sub_8064E2C(); ScriptContext2_Disable(); } diff --git a/src/field/player_pc.c b/src/field/player_pc.c index d01829266..ce78a88d8 100644 --- a/src/field/player_pc.c +++ b/src/field/player_pc.c @@ -20,6 +20,7 @@ #include "mail.h" #include "overworld.h" #include "player_pc.h" +#include "ewram.h" extern void DisplayItemMessageOnField(u8, const u8*, TaskFunc, u16); extern void DoPlayerPCDecoration(u8); @@ -271,14 +272,14 @@ static void PlayerPC_ItemStorage(u8 taskId) static void PlayerPC_Mailbox(u8 taskId) { MenuZeroFillWindowRect(0, 0, 10, 9); - gMailboxInfo.count = GetMailboxMailCount(); + eMailboxInfo.count = GetMailboxMailCount(); - if (gMailboxInfo.count == 0) + if (eMailboxInfo.count == 0) DisplayItemMessageOnField(taskId, gOtherText_NoMailHere, ReshowPlayerPC, 0); else { - gMailboxInfo.cursorPos = 0; - gMailboxInfo.itemsAbove = 0; + eMailboxInfo.cursorPos = 0; + eMailboxInfo.itemsAbove = 0; Mailbox_UpdateMailList(); ItemStorage_SetItemAndMailCount(taskId); Mailbox_DrawMailboxMenu(taskId); @@ -442,10 +443,10 @@ static void ItemStorage_SetItemAndMailCount(u8 taskId) else NUM_PAGE_ITEMS = NUM_ITEMS + 1; // there are not enough items to fill a full page; take the # of items and add 1 for the cancel button. - if (gMailboxInfo.count > 7) - gMailboxInfo.pageItems = 8; + if (eMailboxInfo.count > 7) + eMailboxInfo.pageItems = 8; else - gMailboxInfo.pageItems = gMailboxInfo.count + 1; + eMailboxInfo.pageItems = eMailboxInfo.count + 1; } static void ItemStorage_ProcessInput(u8 taskId) @@ -1048,8 +1049,8 @@ static void Mailbox_UpdateMailList(void) static void Mailbox_DrawMailList(u8 taskId) // taskId is unused { u16 yCoord = 0; - u16 i = gMailboxInfo.itemsAbove; - register struct MailboxStruct *tempMailbox asm("r1") = &gMailboxInfo; + u16 i = eMailboxInfo.itemsAbove; + register struct MailboxStruct *tempMailbox asm("r1") = &eMailboxInfo; register struct MailboxStruct *mailbox asm("r6"); if(i < i + tempMailbox->pageItems) @@ -1076,10 +1077,10 @@ static void Mailbox_DrawMailList(u8 taskId) // taskId is unused } beforeLabel: - if(i - gMailboxInfo.itemsAbove != 8) + if(i - eMailboxInfo.itemsAbove != 8) MenuFillWindowRectWithBlankTile(0x15, yCoord + 4, 0x1C, 0x12); - switch(gMailboxInfo.itemsAbove) + switch(eMailboxInfo.itemsAbove) { default: CreateVerticalScrollIndicators(0, 0xC8, 8); @@ -1092,7 +1093,7 @@ weirdCase: break; } - if(gMailboxInfo.itemsAbove + gMailboxInfo.pageItems <= gMailboxInfo.count) + if(eMailboxInfo.itemsAbove + eMailboxInfo.pageItems <= eMailboxInfo.count) CreateVerticalScrollIndicators(1, 0xC8, 0x98); else DestroyVerticalScrollIndicator(1); @@ -1107,7 +1108,7 @@ static void Mailbox_DrawMailboxMenu(u8 taskId) MenuPrint(gPCText_Mailbox, 1, 1); MenuDrawTextWindow(0x14, 0, 0x1D, 0x13); Mailbox_DrawMailList(taskId); - InitMenu(0, 0x15, 2, gMailboxInfo.pageItems, gMailboxInfo.cursorPos, 8); + InitMenu(0, 0x15, 2, eMailboxInfo.pageItems, eMailboxInfo.cursorPos, 8); } // Mailbox_ProcessInput @@ -1117,29 +1118,29 @@ static void Mailbox_ProcessInput(u8 taskId) { if(gMain.newAndRepeatedKeys & DPAD_UP) { - if(gMailboxInfo.cursorPos != 0) + if(eMailboxInfo.cursorPos != 0) { PlaySE(SE_SELECT); - gMailboxInfo.cursorPos = MoveMenuCursor(-1); + eMailboxInfo.cursorPos = MoveMenuCursor(-1); } - else if(gMailboxInfo.itemsAbove != 0) + else if(eMailboxInfo.itemsAbove != 0) { PlaySE(SE_SELECT); - gMailboxInfo.itemsAbove--; + eMailboxInfo.itemsAbove--; Mailbox_DrawMailList(taskId); } } else if(gMain.newAndRepeatedKeys & DPAD_DOWN) { - if(gMailboxInfo.cursorPos != gMailboxInfo.pageItems - 1) + if(eMailboxInfo.cursorPos != eMailboxInfo.pageItems - 1) { PlaySE(SE_SELECT); - gMailboxInfo.cursorPos = MoveMenuCursor(1); + eMailboxInfo.cursorPos = MoveMenuCursor(1); } - else if(gMailboxInfo.itemsAbove + gMailboxInfo.cursorPos != gMailboxInfo.count) + else if(eMailboxInfo.itemsAbove + eMailboxInfo.cursorPos != eMailboxInfo.count) { PlaySE(SE_SELECT); - gMailboxInfo.itemsAbove++; + eMailboxInfo.itemsAbove++; Mailbox_DrawMailList(taskId); } } @@ -1148,7 +1149,7 @@ static void Mailbox_ProcessInput(u8 taskId) HandleDestroyMenuCursors(); PlaySE(SE_SELECT); - if(gMailboxInfo.itemsAbove + gMailboxInfo.cursorPos == gMailboxInfo.count) + if(eMailboxInfo.itemsAbove + eMailboxInfo.cursorPos == eMailboxInfo.count) { Mailbox_TurnOff(taskId); } @@ -1177,7 +1178,7 @@ static void Mailbox_CloseScrollIndicators(void) static void Mailbox_PrintWhatToDoWithPlayerMailText(u8 taskId) { MenuZeroFillWindowRect(0, 0, 0x1D, 0x13); - StringCopy(gStringVar1, gSaveBlock1.mail[gMailboxInfo.itemsAbove + 6 + gMailboxInfo.cursorPos].playerName); + StringCopy(gStringVar1, gSaveBlock1.mail[eMailboxInfo.itemsAbove + 6 + eMailboxInfo.cursorPos].playerName); SanitizeNameString(gStringVar1); StringExpandPlaceholders(gStringVar4, gOtherText_WhatWillYouDoMail); DisplayItemMessageOnField(taskId, gStringVar4, Mailbox_PrintMailOptions, 0); @@ -1237,7 +1238,7 @@ static void Mailbox_FadeAndReadMail(u8 taskId) { if(!gPaletteFade.active) { - HandleReadMail(&gSaveBlock1.mail[gMailboxInfo.itemsAbove + 6 + gMailboxInfo.cursorPos], Mailbox_ReturnToFieldFromReadMail, 1); + HandleReadMail(&gSaveBlock1.mail[eMailboxInfo.itemsAbove + 6 + eMailboxInfo.cursorPos], Mailbox_ReturnToFieldFromReadMail, 1); DestroyTask(taskId); } } @@ -1276,7 +1277,7 @@ static void Mailbox_DrawYesNoBeforeMove(u8 taskId) static void Mailbox_DoMailMoveToBag(u8 taskId) { - struct MailStruct *mail = &gSaveBlock1.mail[gMailboxInfo.itemsAbove + 6 + gMailboxInfo.cursorPos]; + struct MailStruct *mail = &gSaveBlock1.mail[eMailboxInfo.itemsAbove + 6 + eMailboxInfo.cursorPos]; MenuZeroFillWindowRect(0x14, 8, 0x1A, 0xD); @@ -1290,10 +1291,10 @@ static void Mailbox_DoMailMoveToBag(u8 taskId) ClearMailStruct(mail); Mailbox_UpdateMailList(); - gMailboxInfo.count--; + eMailboxInfo.count--; - if(gMailboxInfo.count < gMailboxInfo.pageItems + gMailboxInfo.itemsAbove && gMailboxInfo.itemsAbove != 0) - gMailboxInfo.itemsAbove--; + if(eMailboxInfo.count < eMailboxInfo.pageItems + eMailboxInfo.itemsAbove && eMailboxInfo.itemsAbove != 0) + eMailboxInfo.itemsAbove--; ItemStorage_SetItemAndMailCount(taskId); } @@ -1329,13 +1330,13 @@ static void Mailbox_DoGiveMailPokeMenu(u8 taskId) // Mailbox_DoGiveMailPokeMenu static void Mailbox_UpdateMailListAfterDeposit(void) { u8 taskId = CreateTask(Mailbox_HandleReturnToProcessInput, 0); - u8 oldCount = gMailboxInfo.count; + u8 oldCount = eMailboxInfo.count; - gMailboxInfo.count = GetMailboxMailCount(); + eMailboxInfo.count = GetMailboxMailCount(); Mailbox_UpdateMailList(); - if(oldCount != gMailboxInfo.count && gMailboxInfo.count < gMailboxInfo.pageItems + gMailboxInfo.itemsAbove && gMailboxInfo.itemsAbove != 0) // did the count update? - gMailboxInfo.itemsAbove--; + if(oldCount != eMailboxInfo.count && eMailboxInfo.count < eMailboxInfo.pageItems + eMailboxInfo.itemsAbove && eMailboxInfo.itemsAbove != 0) // did the count update? + eMailboxInfo.itemsAbove--; ItemStorage_SetItemAndMailCount(taskId); Mailbox_DrawMailboxMenu(taskId); diff --git a/src/pokemon/pokedex_cry_screen.c b/src/pokemon/pokedex_cry_screen.c index ad7029f59..912b9aabd 100644 --- a/src/pokemon/pokedex_cry_screen.c +++ b/src/pokemon/pokedex_cry_screen.c @@ -2,6 +2,7 @@ #include "pokedex_cry_screen.h" #include "palette.h" #include "sprite.h" +#include "ewram.h" struct Unk201C800 { u8 unk_0; @@ -11,10 +12,6 @@ struct Unk201C800 { u16 unk_4; }; -#define EWRAM_1C800 (*(struct Unk201C800 *)(unk_201C000 + 0x800)) - -extern u8 unk_201C000[]; - extern u8 gUnknown_03005E98; // data/pokedex_cry_screen.o diff --git a/src/pokemon/pokemon_2.c b/src/pokemon/pokemon_2.c index d3bdf3a13..68923a16e 100644 --- a/src/pokemon/pokemon_2.c +++ b/src/pokemon/pokemon_2.c @@ -12,13 +12,11 @@ #include "strings2.h" #include "text.h" #include "util.h" +#include "ewram.h" extern u8 gPlayerPartyCount; extern u8 gEnemyPartyCount; -extern u16 unk_20160BC[]; -extern struct SecretBaseRecord gSecretBaseRecord; -extern u32 dword_2017100[]; extern u16 gBattleTypeFlags; extern u8 gActiveBank; extern struct BattlePokemon gBattleMons[4]; @@ -1062,31 +1060,31 @@ void CreateSecretBaseEnemyParty(struct SecretBaseRecord *secretBaseRecord) s32 i, j; ZeroEnemyPartyMons(); - memcpy(&gSecretBaseRecord, secretBaseRecord, sizeof(*secretBaseRecord)); + memcpy(eSecretBaseRecord, secretBaseRecord, sizeof(*secretBaseRecord)); for (i = 0; i < 6; i++) { - if (gSecretBaseRecord.partySpecies[i]) + if (eSecretBaseRecord->partySpecies[i]) { CreateMon(&gEnemyParty[i], - gSecretBaseRecord.partySpecies[i], - gSecretBaseRecord.partyLevels[i], + eSecretBaseRecord->partySpecies[i], + eSecretBaseRecord->partyLevels[i], 15, 1, - gSecretBaseRecord.partyPersonality[i], + eSecretBaseRecord->partyPersonality[i], 2, 0); // these two SetMonData calls require the (u8 *) cast since SetMonData is declared in this function. - SetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, (u8 *)&gSecretBaseRecord.partyHeldItems[i]); + SetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, (u8 *)&eSecretBaseRecord->partyHeldItems[i]); for (j = 0; j < 6; j++) - SetMonData(&gEnemyParty[i], MON_DATA_HP_EV + j, &gSecretBaseRecord.partyEVs[i]); + SetMonData(&gEnemyParty[i], MON_DATA_HP_EV + j, &eSecretBaseRecord->partyEVs[i]); for (j = 0; j < 4; j++) { - SetMonData(&gEnemyParty[i], MON_DATA_MOVE1 + j, (u8 *)&gSecretBaseRecord.partyMoves[i * 4 + j]); - SetMonData(&gEnemyParty[i], MON_DATA_PP1 + j, &gBattleMoves[gSecretBaseRecord.partyMoves[i * 4 + j]].pp); + SetMonData(&gEnemyParty[i], MON_DATA_MOVE1 + j, (u8 *)&eSecretBaseRecord->partyMoves[i * 4 + j]); + SetMonData(&gEnemyParty[i], MON_DATA_PP1 + j, &gBattleMoves[eSecretBaseRecord->partyMoves[i * 4 + j]].pp); } } } @@ -1097,13 +1095,13 @@ void CreateSecretBaseEnemyParty(struct SecretBaseRecord *secretBaseRecord) u8 GetSecretBaseTrainerPicIndex(void) { - u8 trainerClass = gSecretBaseTrainerClasses[gSecretBaseRecord.gender][gSecretBaseRecord.trainerId[0] % 5]; + u8 trainerClass = gSecretBaseTrainerClasses[eSecretBaseRecord->gender][eSecretBaseRecord->trainerId[0] % 5]; return gTrainerClassToPicIndex[trainerClass]; } u8 GetSecretBaseTrainerNameIndex(void) { - u8 trainerClass = gSecretBaseTrainerClasses[gSecretBaseRecord.gender][gSecretBaseRecord.trainerId[0] % 5]; + u8 trainerClass = gSecretBaseTrainerClasses[eSecretBaseRecord->gender][eSecretBaseRecord->trainerId[0] % 5]; return gTrainerClassToNameIndex[trainerClass]; } @@ -1208,7 +1206,7 @@ void CopyPlayerPartyMonToBattleData(u8 battleIndex, u8 partyIndex) GetMonData(&gPlayerParty[partyIndex], MON_DATA_NICKNAME, nickname); StringCopy10(gBattleMons[battleIndex].nickname, nickname); GetMonData(&gPlayerParty[partyIndex], MON_DATA_OT_NAME, gBattleMons[battleIndex].otName); - *(unk_20160BC + GetBankSide(battleIndex)) = gBattleMons[battleIndex].hp; + ewram160BC[GetBankSide(battleIndex)] = gBattleMons[battleIndex].hp; for (i = 0; i < 8; i++) gBattleMons[battleIndex].statStages[i] = 6; diff --git a/src/pokemon/pokemon_summary_screen.c b/src/pokemon/pokemon_summary_screen.c index 00a0bea29..d1d226b80 100644 --- a/src/pokemon/pokemon_summary_screen.c +++ b/src/pokemon/pokemon_summary_screen.c @@ -7,14 +7,13 @@ #include "string_util.h" #include "strings2.h" #include "tv.h" - -extern struct Pokemon *unk_2018000; +#include "ewram.h" bool8 PokemonSummaryScreen_CheckOT(struct Pokemon *mon) { u32 trainerId; - if (unk_2018000 == gEnemyParty) + if (ewram18000_3 == gEnemyParty) { u8 enemyId = GetMultiplayerId() ^ 1; trainerId = gLinkPlayers[enemyId].trainerId & 0xFFFF; diff --git a/src/rom_8077ABC.c b/src/rom_8077ABC.c index 285c992ca..10d58dcb5 100644 --- a/src/rom_8077ABC.c +++ b/src/rom_8077ABC.c @@ -12,6 +12,7 @@ #include "task.h" #include "trig.h" #include "util.h" +#include "ewram.h" #define GET_UNOWN_LETTER(personality) ((\ (((personality & 0x03000000) >> 24) << 6) \ @@ -94,8 +95,6 @@ extern struct OamData gOamData_837DF9C[]; extern const union AnimCmd *const gDummySpriteAnimTable[]; extern const union AffineAnimCmd *const gDummySpriteAffineAnimTable[]; -extern struct Struct_unk_2019348 unk_2019348; -extern struct TransformStatus gTransformStatuses[]; extern u16 gBattleMonPartyPositions[]; extern u16 gBattleTypeFlags; extern u32 gTransformPersonalities[NUM_BATTLE_SLOTS]; @@ -204,21 +203,21 @@ u8 sub_8077ABC(u8 slot, u8 a2) { case 4: default: if (NotInBattle()) { - if (unk_2019348.field_4 & 1) { - species = unk_2019348.field_2; + if (ewram19348.unk4 & 1) { + species = ewram19348.unk2; } else { - species = unk_2019348.field_0; + species = ewram19348.unk0; } } else { if (GetBankSide(slot)) { - transform = &gTransformStatuses[slot]; + transform = &eTransformStatuses[slot]; if (!transform->species) { species = GetMonData(&gEnemyParty[gBattleMonPartyPositions[slot]], MON_DATA_SPECIES); } else { species = transform->species; } } else { - transform = &gTransformStatuses[slot]; + transform = &eTransformStatuses[slot]; if (!transform->species) { species = GetMonData(&gPlayerParty[gBattleMonPartyPositions[slot]], MON_DATA_SPECIES); } else { @@ -246,13 +245,13 @@ u8 sub_8077BFC(u8 slot, u16 species) { if (!GetBankSide(slot) || NotInBattle()) { if (species == SPECIES_UNOWN) { if (NotInBattle()) { - if (unk_2019348.field_4 & 1) { - personality = unk_2019348.field_10; + if (ewram19348.unk4 & 1) { + personality = ewram19348.unk10; } else { - personality = unk_2019348.field_8; + personality = ewram19348.unk8; } } else { - transform = &gTransformStatuses[slot]; + transform = &eTransformStatuses[slot]; if (!transform->species) { personality = GetMonData(&gPlayerParty[gBattleMonPartyPositions[slot]], MON_DATA_PERSONALITY); } else { @@ -275,7 +274,7 @@ u8 sub_8077BFC(u8 slot, u16 species) { } } else { if (species == SPECIES_UNOWN) { - transform = &gTransformStatuses[slot]; + transform = &eTransformStatuses[slot]; if (!transform->species) { personality = GetMonData(&gEnemyParty[gBattleMonPartyPositions[slot]], MON_DATA_PERSONALITY); } else { @@ -339,13 +338,13 @@ u8 sub_8077EE4(u8 slot, u8 a2) { struct TransformStatus *transform; if (a2 == 3 || a2 == 4) { if (NotInBattle()) { - if (unk_2019348.field_4 & 1) { - species = unk_2019348.field_2; + if (ewram19348.unk4 & 1) { + species = ewram19348.unk2; } else { - species = unk_2019348.field_0; + species = ewram19348.unk0; } } else { - transform = &gTransformStatuses[slot]; + transform = &eTransformStatuses[slot]; if (!transform->species) { species = gUnknown_0202F7CA[slot]; } else { @@ -383,14 +382,14 @@ u8 sub_8077FC0(u8 slot) { r6 = sub_8077ABC(slot, 1); if (!NotInBattle()) { if (GetBankSide(slot)) { - transform = &gTransformStatuses[slot]; + transform = &eTransformStatuses[slot]; if (!transform->species) { var = GetMonData(&gEnemyParty[gBattleMonPartyPositions[slot]], MON_DATA_SPECIES); } else { var = transform->species; } } else { - transform = &gTransformStatuses[slot]; + transform = &eTransformStatuses[slot]; if (!transform->species) { var = GetMonData(&gPlayerParty[gBattleMonPartyPositions[slot]], MON_DATA_SPECIES); } else { @@ -1035,7 +1034,6 @@ bool8 sub_8078E38() { } void sub_8078E70(u8 sprite, u8 a2) { - struct Struct_2017810 *unk; u8 r7 = gSprites[sprite].data0; if (NotInBattle() || IsAnimBankSpriteVisible(r7)) { gSprites[sprite].invisible = FALSE; @@ -1043,8 +1041,7 @@ void sub_8078E70(u8 sprite, u8 a2) { gSprites[sprite].oam.objMode = a2; gSprites[sprite].affineAnimPaused = TRUE; if (!NotInBattle() && !gSprites[sprite].oam.affineMode) { - unk = &unk_2017810[r7]; - gSprites[sprite].oam.matrixNum = unk->field_6; + gSprites[sprite].oam.matrixNum = ewram17810[r7].unk6; } gSprites[sprite].oam.affineMode = 3; CalcCenterToCornerVec(&gSprites[sprite], gSprites[sprite].oam.shape, gSprites[sprite].oam.size, gSprites[sprite].oam.affineMode); @@ -1541,11 +1538,11 @@ u16 sub_8079B10(u8 sprite) { for (i = 0; i < (sizeof(gBattleMonSprites) / sizeof(u8)); i++) { if (gBattleMonSprites[i] == sprite) { if (NotInBattle()) { - species = unk_2019348.field_0; + species = ewram19348.unk0; return gMonBackPicCoords[species].y_offset; } else { if (!GetBankSide(i)) { - transform = &gTransformStatuses[slot]; + transform = &eTransformStatuses[slot]; if (!transform->species) { species = GetMonData(&gPlayerParty[gBattleMonPartyPositions[i]], MON_DATA_SPECIES); } else { @@ -1553,7 +1550,7 @@ u16 sub_8079B10(u8 sprite) { } return gMonBackPicCoords[species].y_offset; } else { - transform = &gTransformStatuses[slot]; + transform = &eTransformStatuses[slot]; if (!transform->species) { species = GetMonData(&gEnemyParty[gBattleMonPartyPositions[i]], MON_DATA_SPECIES); } else { @@ -1764,12 +1761,12 @@ int sub_807A100(u8 slot, u8 a2) { const struct MonCoords *coords; struct TransformStatus *transform; if (NotInBattle()) { - if (unk_2019348.field_4 & 1) { - species = unk_2019348.field_2; - personality = unk_2019348.field_10; + if (ewram19348.unk4 & 1) { + species = ewram19348.unk2; + personality = ewram19348.unk10; } else { - species = unk_2019348.field_0; - personality = unk_2019348.field_8; + species = ewram19348.unk0; + personality = ewram19348.unk8; } if (species == SPECIES_UNOWN) { letter = GET_UNOWN_LETTER(personality); @@ -1788,7 +1785,7 @@ int sub_807A100(u8 slot, u8 a2) { } } else { if (!GetBankSide(slot)) { - transform = &gTransformStatuses[slot]; + transform = &eTransformStatuses[slot]; if (!transform->species) { species = GetMonData(&gPlayerParty[gBattleMonPartyPositions[slot]], MON_DATA_SPECIES); personality = GetMonData(&gPlayerParty[gBattleMonPartyPositions[slot]], MON_DATA_PERSONALITY); @@ -1810,7 +1807,7 @@ int sub_807A100(u8 slot, u8 a2) { coords = &gMonBackPicCoords[species]; } } else { - transform = &gTransformStatuses[slot]; + transform = &eTransformStatuses[slot]; if (!transform->species) { species = GetMonData(&gEnemyParty[gBattleMonPartyPositions[slot]], MON_DATA_SPECIES); personality = GetMonData(&gEnemyParty[gBattleMonPartyPositions[slot]], MON_DATA_PERSONALITY); diff --git a/src/scene/contest_painting.c b/src/scene/contest_painting.c index 9df2d56da..0f745b391 100644 --- a/src/scene/contest_painting.c +++ b/src/scene/contest_painting.c @@ -25,9 +25,6 @@ u8 gUnknown_03005E40[0x4C]; struct ContestEntry *gUnknown_03005E8C; u16 (*gUnknown_03005E90)[]; -extern struct ContestEntry unk_2015de0; -extern struct Unk2015E00 unk_2015e00; - static const u16 gPictureFramePalettes[][16] = { INCBIN_U16("graphics/picture_frame/bg0.gbapal"), @@ -152,7 +149,7 @@ static void ShowContestPainting(void) case 0: remove_some_task(); SetVBlankCallback(NULL); - gUnknown_03005E8C = &unk_2015de0; + gUnknown_03005E8C = &ewram15DE0; ContestPaintingInitVars(TRUE); ContestPaintingInitBG(); gMain.state++; @@ -752,8 +749,8 @@ static u8 sub_8106EE0(u8 arg0) static void sub_8106F4C(void) { - gUnknown_03005E90 = &unk_2015e00.unk2017e00; - gUnknown_03005E10 = &unk_2015e00.unk2015e00; + gUnknown_03005E90 = &ewram15E00.unk2017e00; + gUnknown_03005E10 = &ewram15E00.unk2015e00; } static void sub_8106F6C(u8 arg0) diff --git a/src/scene/credits.c b/src/scene/credits.c index 882dc557f..d9e97c570 100644 --- a/src/scene/credits.c +++ b/src/scene/credits.c @@ -163,10 +163,8 @@ struct CreditsEntry u8 *text; }; -extern struct HallOfFame gHallOfFame; extern u8 unk_201e800[0x800]; extern u8 unk_201f000[0x800]; -extern u16 unk_201f800[]; extern struct SpriteTemplate gUnknown_02024E8C; diff --git a/src/scene/evolution_scene.c b/src/scene/evolution_scene.c index 73cb7e5e7..c68acafc4 100644 --- a/src/scene/evolution_scene.c +++ b/src/scene/evolution_scene.c @@ -77,7 +77,6 @@ extern u8 gBattleTerrain; extern u8 gReservedSpritePaletteCount; extern u16 gMoveToLearn; extern struct SpriteTemplate gUnknown_02024E8C; -extern u8 gUnk_2009000[]; // won't match if I 'ewram' it extern bool8 gAffineAnimsDisabled; extern u8 gDisplayedStringBattle[]; extern u8 gBattleTextBuff2[]; @@ -179,6 +178,10 @@ void BeginEvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, bool8 canStop SetMainCallback2(CB2_BeginEvolutionScene); } +struct Struct2009000 { + u16 pal[0x30]; +}; + void EvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, bool8 canStopEvo, u8 partyID) { u8 name[20]; @@ -275,7 +278,7 @@ void EvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, bool8 canStopEvo, gTasks[ID].tEvoWasStopped = FALSE; gTasks[ID].tPartyID = partyID; - memcpy(gUnk_2009000, &gPlttBufferUnfaded[0x20], 0x60); + memcpy(ewram9000_hack, &gPlttBufferUnfaded[0x20], 0x60); REG_DISPCNT = DISPCNT_OBJ_ON | DISPCNT_BG_ALL_ON | DISPCNT_OBJ_1D_MAP; SetHBlankCallback(EvoDummyFunc); @@ -638,7 +641,7 @@ static void Task_EvolutionScene(u8 taskID) { m4aMPlayAllStop(); PlayCry1(gTasks[taskID].tPostEvoSpecies, 0); - memcpy(&gPlttBufferUnfaded[0x20], gUnk_2009000, 0x60); + memcpy(&gPlttBufferUnfaded[0x20], ewram9000_hack, 0x60); BeginNormalPaletteFade(0x1C, 0, 0x10, 0, 0); gTasks[taskID].tState++; } @@ -980,7 +983,7 @@ static void Task_TradeEvolutionScene(u8 taskID) if (IsSEPlaying()) { PlayCry1(gTasks[taskID].tPostEvoSpecies, 0); - memcpy(&gPlttBufferUnfaded[0x20], gUnk_2009000, 0x60); + memcpy(&gPlttBufferUnfaded[0x20], ewram9000_hack, 0x60); BeginNormalPaletteFade(1, 0, 0x10, 0, 0); gTasks[taskID].tState++; } -- cgit v1.2.3 From 7ab0460e9c04100dcc0ebb824a870069348030df Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Thu, 9 Nov 2017 03:29:54 -0500 Subject: formatting --- src/scene/evolution_scene.c | 4 ---- 1 file changed, 4 deletions(-) (limited to 'src') diff --git a/src/scene/evolution_scene.c b/src/scene/evolution_scene.c index c68acafc4..742f663f6 100644 --- a/src/scene/evolution_scene.c +++ b/src/scene/evolution_scene.c @@ -178,10 +178,6 @@ void BeginEvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, bool8 canStop SetMainCallback2(CB2_BeginEvolutionScene); } -struct Struct2009000 { - u16 pal[0x30]; -}; - void EvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, bool8 canStopEvo, u8 partyID) { u8 name[20]; -- cgit v1.2.3 From 0343a1bcd728d813a38fc3486535e962e681c094 Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Thu, 9 Nov 2017 20:54:49 -0500 Subject: remove shared_syms --- src/battle/battle_2.c | 8 ++++---- src/battle/battle_7.c | 16 ++++++++-------- src/debug/matsuda_debug_menu.c | 34 +++++++++++++++++----------------- src/engine/link.c | 2 +- src/engine/main.c | 1 + src/engine/mystery_event_menu.c | 4 ++-- src/engine/save_failed_screen.c | 2 +- src/engine/trade.c | 10 +++++----- src/engine/trainer_card.c | 2 +- src/field/berry_tag_screen.c | 22 +++++++++++----------- src/field/decoration.c | 2 +- src/field/region_map.c | 2 +- src/field/slot_machine.c | 4 ++-- src/scene/berry_blender.c | 4 ++-- src/scene/intro.c | 10 +++++----- 15 files changed, 62 insertions(+), 61 deletions(-) (limited to 'src') diff --git a/src/battle/battle_2.c b/src/battle/battle_2.c index 4b75818b6..14afc1537 100644 --- a/src/battle/battle_2.c +++ b/src/battle/battle_2.c @@ -510,7 +510,7 @@ void sub_800F02C(void) if (gUnknown_02023A00[i].language != 1) PadNameString(nickname, 0); } - memcpy(ewram, gUnknown_02023A00, 0x60); + memcpy(gSharedMem, gUnknown_02023A00, 0x60); } void sub_800F104(void) @@ -534,7 +534,7 @@ void sub_800F104(void) if (gReceivedRemoteLinkPlayers != 0 && sub_8007ECC()) { sub_800F02C(); - SendBlock(bitmask_all_link_players_but_self(), ewram, 0x60); + SendBlock(bitmask_all_link_players_but_self(), gSharedMem, 0x60); gBattleCommunication[0]++; } break; @@ -597,7 +597,7 @@ void sub_800F298(void) BATTLE_STRUCT->unk1 = 1; sub_800E9EC(); sub_800EAAC(); - SendBlock(bitmask_all_link_players_but_self(), ewram, 0x20); + SendBlock(bitmask_all_link_players_but_self(), gSharedMem, 0x20); gBattleCommunication[0]++; } break; @@ -863,7 +863,7 @@ void sub_800F828(struct Sprite *sprite) void sub_800F838(struct Sprite *sprite) { - u16 *arr = (u16 *)ewram; + u16 *arr = (u16 *)gSharedMem; switch (sprite->data0) { diff --git a/src/battle/battle_7.c b/src/battle/battle_7.c index 2a335ea63..ceac8ff24 100644 --- a/src/battle/battle_7.c +++ b/src/battle/battle_7.c @@ -293,9 +293,9 @@ void BattleLoadOpponentMonSprite(struct Pokemon *pkmn, u8 b) lzPaletteData = GetMonSpritePal(pkmn); else lzPaletteData = GetMonSpritePalFromOtIdPersonality(species, otId, personalityValue); - LZDecompressWram(lzPaletteData, ewram); - LoadPalette(ewram, paletteOffset, 0x20); - LoadPalette(ewram, 0x80 + b * 16, 0x20); + LZDecompressWram(lzPaletteData, gSharedMem); + LoadPalette(gSharedMem, paletteOffset, 0x20); + LoadPalette(gSharedMem, 0x80 + b * 16, 0x20); if (species == SPECIES_CASTFORM) { paletteOffset = 0x100 + b * 16; @@ -345,9 +345,9 @@ void BattleLoadPlayerMonSprite(struct Pokemon *pkmn, u8 b) lzPaletteData = GetMonSpritePal(pkmn); else lzPaletteData = GetMonSpritePalFromOtIdPersonality(species, otId, personalityValue); - LZDecompressWram(lzPaletteData, ewram); - LoadPalette(ewram, paletteOffset, 0x20); - LoadPalette(ewram, 0x80 + b * 16, 0x20); + LZDecompressWram(lzPaletteData, gSharedMem); + LoadPalette(gSharedMem, paletteOffset, 0x20); + LoadPalette(gSharedMem, 0x80 + b * 16, 0x20); if (species == SPECIES_CASTFORM) { paletteOffset = 0x100 + b * 16; @@ -680,8 +680,8 @@ void sub_8031FC4(u8 a, u8 b, bool8 c) DmaCopy32(3, src, dst, 0x800); paletteOffset = 0x100 + a * 16; lzPaletteData = GetMonSpritePalFromOtIdPersonality(species, otId, personalityValue); - LZDecompressWram(lzPaletteData, ewram); - LoadPalette(ewram, paletteOffset, 32); + LZDecompressWram(lzPaletteData, gSharedMem); + LoadPalette(gSharedMem, paletteOffset, 32); if (species == SPECIES_CASTFORM) { u16 *paletteSrc = (u16 *)ewram16400; // TODO: avoid casting? diff --git a/src/debug/matsuda_debug_menu.c b/src/debug/matsuda_debug_menu.c index ab96ada23..3378e4e0a 100644 --- a/src/debug/matsuda_debug_menu.c +++ b/src/debug/matsuda_debug_menu.c @@ -414,14 +414,14 @@ void sub_80AA280(u8 var) // no? u8 i; FillWindowRect_DefaultPalette(&gMenuWindow, 0, 0, 0, 0x1E, 3); - StringCopy(ewram, gMatsudaDebugMenu_StartText); - StringAppend(ewram, &gUnknown_0203857D[var][0]); + StringCopy(gSharedMem, gMatsudaDebugMenu_StartText); + StringAppend(gSharedMem, &gUnknown_0203857D[var][0]); for (i = 0; i < 4; i++) { if (var == i) { - sub_8003460(&gMenuWindow, ewram, (10 * i + 2), gUnknown_083C926E[i][0], gUnknown_083C926E[i][1]); + sub_8003460(&gMenuWindow, gSharedMem, (10 * i + 2), gUnknown_083C926E[i][0], gUnknown_083C926E[i][1]); } else { @@ -433,38 +433,38 @@ void sub_80AA280(u8 var) // no? static void sub_80AA340(u8 var) { - ConvertIntToDecimalStringN(ewram, gContestMons[var].cool, STR_CONV_MODE_RIGHT_ALIGN, 3); - sub_8003460(&gMenuWindow, ewram, 0x66, gUnknown_083C9282[0], gUnknown_083C9282[1]); + ConvertIntToDecimalStringN(gSharedMem, gContestMons[var].cool, STR_CONV_MODE_RIGHT_ALIGN, 3); + sub_8003460(&gMenuWindow, gSharedMem, 0x66, gUnknown_083C9282[0], gUnknown_083C9282[1]); } static void sub_80AA388(u8 var) { - ConvertIntToDecimalStringN(ewram, gContestMons[var].cute, STR_CONV_MODE_RIGHT_ALIGN, 3); - sub_8003460(&gMenuWindow, ewram, 0x6C, gUnknown_083C9282[2], gUnknown_083C9282[3]); + ConvertIntToDecimalStringN(gSharedMem, gContestMons[var].cute, STR_CONV_MODE_RIGHT_ALIGN, 3); + sub_8003460(&gMenuWindow, gSharedMem, 0x6C, gUnknown_083C9282[2], gUnknown_083C9282[3]); } static void sub_80AA3D0(u8 var) { - ConvertIntToDecimalStringN(ewram, gContestMons[var].beauty, STR_CONV_MODE_RIGHT_ALIGN, 3); - sub_8003460(&gMenuWindow, ewram, 0x72, gUnknown_083C9282[4], gUnknown_083C9282[5]); + ConvertIntToDecimalStringN(gSharedMem, gContestMons[var].beauty, STR_CONV_MODE_RIGHT_ALIGN, 3); + sub_8003460(&gMenuWindow, gSharedMem, 0x72, gUnknown_083C9282[4], gUnknown_083C9282[5]); } static void sub_80AA418(u8 var) { - ConvertIntToDecimalStringN(ewram, gContestMons[var].smart, STR_CONV_MODE_RIGHT_ALIGN, 3); - sub_8003460(&gMenuWindow, ewram, 0x78, gUnknown_083C9282[6], gUnknown_083C9282[7]); + ConvertIntToDecimalStringN(gSharedMem, gContestMons[var].smart, STR_CONV_MODE_RIGHT_ALIGN, 3); + sub_8003460(&gMenuWindow, gSharedMem, 0x78, gUnknown_083C9282[6], gUnknown_083C9282[7]); } static void sub_80AA460(u8 var) { - ConvertIntToDecimalStringN(ewram, gContestMons[var].tough, STR_CONV_MODE_RIGHT_ALIGN, 3); - sub_8003460(&gMenuWindow, ewram, 0x7E, gUnknown_083C9282[8], gUnknown_083C9282[9]); + ConvertIntToDecimalStringN(gSharedMem, gContestMons[var].tough, STR_CONV_MODE_RIGHT_ALIGN, 3); + sub_8003460(&gMenuWindow, gSharedMem, 0x7E, gUnknown_083C9282[8], gUnknown_083C9282[9]); } static void sub_80AA4A8(u8 var) { - ConvertIntToDecimalStringN(ewram, gContestMons[var].sheen, STR_CONV_MODE_RIGHT_ALIGN, 3); - sub_8003460(&gMenuWindow, ewram, 0x84, gUnknown_083C9282[10], gUnknown_083C9282[11]); + ConvertIntToDecimalStringN(gSharedMem, gContestMons[var].sheen, STR_CONV_MODE_RIGHT_ALIGN, 3); + sub_8003460(&gMenuWindow, gSharedMem, 0x84, gUnknown_083C9282[10], gUnknown_083C9282[11]); } static void sub_80AA4F0(u8 var1, u8 var2) @@ -489,8 +489,8 @@ static void sub_80AA614(u8 var1, u8 var2) { u16 var = sub_80AE770(var1, var2); - ConvertIntToDecimalStringN(ewram, var, STR_CONV_MODE_RIGHT_ALIGN, 3); - sub_8003460(&gMenuWindow, ewram, 0xE2, 3, 0xC); + ConvertIntToDecimalStringN(gSharedMem, var, STR_CONV_MODE_RIGHT_ALIGN, 3); + sub_8003460(&gMenuWindow, gSharedMem, 0xE2, 3, 0xC); } void sub_80AA658(u8 var) diff --git a/src/engine/link.c b/src/engine/link.c index c526baec7..002d397d2 100644 --- a/src/engine/link.c +++ b/src/engine/link.c @@ -506,7 +506,7 @@ static void ProcessRecvCmds(u8 unusedParam) case 0x8888: if (sBlockRecv[i].size > BLOCK_BUFFER_SIZE) { - u16 *buffer = (u16 *)ewram; + u16 *buffer = (u16 *)gSharedMem; u16 j; for (j = 0; j < CMD_LENGTH - 1; j++) buffer[(sBlockRecv[i].pos / 2) + j] = gRecvCmds[j + 1][i]; diff --git a/src/engine/main.c b/src/engine/main.c index d7c11b6c8..ea381cb31 100644 --- a/src/engine/main.c +++ b/src/engine/main.c @@ -70,6 +70,7 @@ bool8 gLinkVSyncDisabled; u32 IntrMain_Buffer[0x200]; u8 gPcmDmaCounter; +EWRAM_DATA u8 gSharedMem[0x20000] = {0}; EWRAM_DATA void (**gFlashTimerIntrFunc)(void) = NULL; static void UpdateLinkAndCallCallbacks(void); diff --git a/src/engine/mystery_event_menu.c b/src/engine/mystery_event_menu.c index 38912be86..a472eea3b 100644 --- a/src/engine/mystery_event_menu.c +++ b/src/engine/mystery_event_menu.c @@ -286,8 +286,8 @@ static void CB2_MysteryEventMenu(void) case 11: if (gReceivedRemoteLinkPlayers) break; - unkVal = RunMysteryEventScript(ewram); - CpuFill32(0, ewram, 0x7D4); + unkVal = RunMysteryEventScript(gSharedMem); + CpuFill32(0, gSharedMem, 0x7D4); if (!GetEventLoadMessage(gStringVar4, unkVal)) TrySavingData(NORMAL_SAVE); gMain.state++; diff --git a/src/engine/save_failed_screen.c b/src/engine/save_failed_screen.c index 06505c0c2..ba2d46546 100644 --- a/src/engine/save_failed_screen.c +++ b/src/engine/save_failed_screen.c @@ -266,7 +266,7 @@ static void VBlankCB_UpdateClockGraphics(void) static bool8 VerifySectorWipe(u16 sector) { - u32 *ptr = (u32 *)&ewram; + u32 *ptr = (u32 *)&gSharedMem; u16 i; ReadFlash(sector, 0, ptr, 4096); diff --git a/src/engine/trade.c b/src/engine/trade.c index 63571ecac..7477b05ac 100644 --- a/src/engine/trade.c +++ b/src/engine/trade.c @@ -4000,7 +4000,7 @@ static void sub_804B2D0(u8 whichParty, u8 a1) case 0: species = GetMonData(pokemon, MON_DATA_SPECIES2); personality = GetMonData(pokemon, MON_DATA_PERSONALITY); - HandleLoadSpecialPokePic(&gMonFrontPicTable[species], gMonFrontPicCoords[species].coords, gMonFrontPicCoords[species].y_offset, (u32)ewram, gUnknown_081FAF4C[whichParty * 2 + 1], species, personality); + HandleLoadSpecialPokePic(&gMonFrontPicTable[species], gMonFrontPicCoords[species].coords, gMonFrontPicCoords[species].y_offset, (u32)gSharedMem, gUnknown_081FAF4C[whichParty * 2 + 1], species, personality); LoadCompressedObjectPalette(GetMonSpritePalStruct(pokemon)); gUnknown_03004828->tradeSpecies[whichParty] = species; break; @@ -4727,12 +4727,12 @@ static void sub_804BBE8(u8 a0) gUnknown_03004828->bg1hofs = 0; REG_BG1CNT = BGCNT_PRIORITY(2) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(5); LZDecompressVram(gUnknown_08D00000, BG_CHAR_ADDR(0)); - CpuCopy16(gUnknown_08D00524, buffer = (u16 *)ewram, 0x1000); + CpuCopy16(gUnknown_08D00524, buffer = (u16 *)gSharedMem, 0x1000); LoadCompressedPalette(gUnknown_08D004E0, 0x70, 0x20); FillPalette(0, 0, 2); for (i = 0; i < 0x280; i ++) buffer[i] |= 0x7000; - DmaCopy16Defvars(3, ewram, BG_SCREEN_ADDR(5), 0x500); + DmaCopy16Defvars(3, gSharedMem, BG_SCREEN_ADDR(5), 0x500); MenuZeroFillWindowRect(2, 15, 27, 18); break; case 6: @@ -5704,8 +5704,8 @@ void sub_804E22C(void) const u16 *src; u16 *dest; LZDecompressVram(gUnknown_08D00000, (void *)VRAM); - CpuCopy16(gUnknown_08D00524, ewram, 0x1000); - src = (const u16 *)ewram; + CpuCopy16(gUnknown_08D00524, gSharedMem, 0x1000); + src = (const u16 *)gSharedMem; dest = BG_SCREEN_ADDR(5); DmaCopy16(3, src, dest, 0x500) LoadCompressedPalette(gUnknown_08D004E0, 0, 32); diff --git a/src/engine/trainer_card.c b/src/engine/trainer_card.c index ef960c162..025d19ffc 100644 --- a/src/engine/trainer_card.c +++ b/src/engine/trainer_card.c @@ -68,7 +68,7 @@ extern const u16 gUnknown_083B5F8C[][4]; const u8 gBadgesTiles[] = INCBIN_U8("graphics/trainer_card/badges.4bpp"); // XXX: what is this? -u8 *const ewram_ = ewram; +u8 *const ewram_ = gSharedMem; bool8 sub_8093864(struct Task *); bool8 sub_80938A8(struct Task *); diff --git a/src/field/berry_tag_screen.c b/src/field/berry_tag_screen.c index 8241fe657..55405138d 100644 --- a/src/field/berry_tag_screen.c +++ b/src/field/berry_tag_screen.c @@ -28,7 +28,7 @@ struct Struct2000000 /*0x1FFFF*/ u8 var_1FFFF; }; -extern struct Struct2000000 ewram; +extern struct Struct2000000 gSharedMem; extern u16 gUnknown_030041B4; static EWRAM_DATA u8 gUnknown_0203932C = 0; @@ -119,13 +119,13 @@ static bool8 sub_8146058(void) case 5: if (!MultistepInitMenuWindowContinue()) break; - ewram.var_1FFFF = 0; + gSharedMem.var_1FFFF = 0; gMain.state += 1; break; case 6: if (!sub_81462B8()) break; - ewram.var_1FFFF = 0; + gSharedMem.var_1FFFF = 0; gMain.state += 1; break; case 7: @@ -191,19 +191,19 @@ bool8 sub_81462B8(void) u16 i; void *addr; - switch (ewram.var_1FFFF) + switch (gSharedMem.var_1FFFF) { case 0: LZDecompressVram(gBerryCheck_Gfx, (void *)VRAM); - ewram.var_1FFFF += 1; + gSharedMem.var_1FFFF += 1; break; case 1: LZDecompressVram(gUnknown_08E788E4, (void *)VRAM + 0x2800); - ewram.var_1FFFF += 1; + gSharedMem.var_1FFFF += 1; break; case 2: LZDecompressVram(gUnknown_08E78A84, (void *)VRAM + 0x3000); - ewram.var_1FFFF += 1; + gSharedMem.var_1FFFF += 1; break; case 3: for (i = 0; i < 0x400; i++) @@ -215,19 +215,19 @@ bool8 sub_81462B8(void) } addr = (void *)(VRAM + 0x3800); DmaCopy16(3, gBGTilemapBuffers[2], addr, 0x800); - ewram.var_1FFFF += 1; + gSharedMem.var_1FFFF += 1; break; case 4: LoadCompressedPalette(gBerryCheck_Pal, 0, 96 * 2); - ewram.var_1FFFF += 1; + gSharedMem.var_1FFFF += 1; break; case 5: LoadCompressedObjectPic(&gUnknown_083C1F74); - ewram.var_1FFFF += 1; + gSharedMem.var_1FFFF += 1; break; case 6: LoadCompressedObjectPalette(&gUnknown_083C1F7C); - ewram.var_1FFFF = 0; + gSharedMem.var_1FFFF = 0; return TRUE; } diff --git a/src/field/decoration.c b/src/field/decoration.c index 924c94b59..bdeaaf91d 100644 --- a/src/field/decoration.c +++ b/src/field/decoration.c @@ -1556,7 +1556,7 @@ const struct SpriteTemplate gSpriteTemplate_83ECA88 = { const struct YesNoFuncTable gUnknown_083ECAA0 = {.yesFunc = sub_8101848, .noFunc = sub_80FED3C}; -u8 *const unref_label_083ECAA8[] = {ewram}; +u8 *const unref_label_083ECAA8[] = {gSharedMem}; // text diff --git a/src/field/region_map.c b/src/field/region_map.c index b5a3de563..d643c373d 100644 --- a/src/field/region_map.c +++ b/src/field/region_map.c @@ -1426,7 +1426,7 @@ static const struct UnknownStruct4 sUnknown_083E79C0[1] = }; // XXX: what is this? -static u8 *const ewram_ = ewram; +static u8 *const ewram_ = gSharedMem; static const struct SpritePalette sFlyTargetIconSpritePalette = {sFlyTargetIcons_Pal, 2}; diff --git a/src/field/slot_machine.c b/src/field/slot_machine.c index 4d97ccb51..d6b20feaa 100644 --- a/src/field/slot_machine.c +++ b/src/field/slot_machine.c @@ -15,7 +15,7 @@ struct UnkStruct1 { /*0x02*/ s16 unk02; }; -extern struct UnkStruct2000000 ewram; +extern struct UnkStruct2000000 gSharedMem; extern struct UnkStruct1 *gUnknown_083ED048[]; extern const u16 gPalette_83EDE24[]; @@ -40,7 +40,7 @@ void sub_8104CAC(u8 arg0) { sub_8104DA4(); - task = &gTasks[ewram.unk3D]; + task = &gTasks[gSharedMem.unk3D]; task->data[1] = arg0; i = 0; diff --git a/src/scene/berry_blender.c b/src/scene/berry_blender.c index b5d36ad1e..398f62833 100644 --- a/src/scene/berry_blender.c +++ b/src/scene/berry_blender.c @@ -3710,7 +3710,7 @@ static void sub_80527BC(void) gUnknown_020297E0 = 0; gUnknown_020297DC = 2; for (i = 0; i < 200; i++) - ewram[i] = 0; + gSharedMem[i] = 0; gUnknown_020297E8 = 0; } for (i = 0; i < 100; i++) @@ -3719,7 +3719,7 @@ static void sub_80527BC(void) gUnknown_020297E0++; else { - u16* ewramPtr = ((u16*)(ewram)); + u16* ewramPtr = ((u16*)(gSharedMem)); ewramPtr[gUnknown_020297E4] = gUnknown_020297E0; gUnknown_020297E4++; gUnknown_020297E0 = 0; diff --git a/src/scene/intro.c b/src/scene/intro.c index 04173b86a..c4bb1f9ea 100644 --- a/src/scene/intro.c +++ b/src/scene/intro.c @@ -1208,7 +1208,7 @@ static void Task_IntroWaitToSetupPart3DoubleFight(u8 taskId) } // TODO: use ewram define instead -extern u8 ewram[][32]; +extern u8 gSharedMem[][32]; static void Task_IntroLoadPart3Streaks(u8 taskId) { @@ -1218,12 +1218,12 @@ static void Task_IntroLoadPart3Streaks(u8 taskId) intro_reset_and_hide_bgs(); for (i = 0; i < 32; i++) { - ewram[0][i] = 0; - ewram[1][i] = 17; - ewram[2][i] = 34; + gSharedMem[0][i] = 0; + gSharedMem[1][i] = 17; + gSharedMem[2][i] = 34; } vram = (void *)VRAM; - DmaCopy16(3, ewram, vram, 0x60); + DmaCopy16(3, gSharedMem, vram, 0x60); for (i = 0; i < 0x280; i++) ((u16 *)(VRAM + 0x3000))[i] = 0xF001; for (i = 0; i < 0x80; i++) -- cgit v1.2.3 From bd0f0777aa718d47e89bfbddb4aa53b12f508a03 Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Fri, 10 Nov 2017 22:09:54 -0500 Subject: move credits data to C file (todo, german) --- src/data/credits_en.h | 654 ++++++++++++++++++++++++++++++++++++++++++++++++++ src/scene/credits.c | 222 +++++++++++++++-- 2 files changed, 860 insertions(+), 16 deletions(-) create mode 100755 src/data/credits_en.h (limited to 'src') diff --git a/src/data/credits_en.h b/src/data/credits_en.h new file mode 100755 index 000000000..fd00dd94b --- /dev/null +++ b/src/data/credits_en.h @@ -0,0 +1,654 @@ +const u8 Category_Credits[] = _("{PALETTE 9}Credits"); +const u8 Category_ExecutiveDirector[] = _("{PALETTE 9}Executive Director"); +const u8 Category_Director[] = _("{PALETTE 9}Director"); +const u8 Category_ArtDirector[] = _("{PALETTE 9}Art Director"); +const u8 Category_BattleDirector[] = _("{PALETTE 9}Battle Director"); +const u8 Category_MainProgrammer[] = _("{PALETTE 9}Main Programmer"); +const u8 Category_BattleSystemProgrammer[] = _("{PALETTE 9}Battle System Programmer"); +const u8 Category_FieldSystemProgrammer[] = _("{PALETTE 9}Field System Programmer"); +const u8 Category_Programmers[] = _("{PALETTE 9}Programmers"); +const u8 Category_MainGraphicDesigner[] = _("{PALETTE 9}Main Graphic Designer"); +const u8 Category_POKeMONGraphicDesigners[] = _("{PALETTE 9}POKéMON & Graphic Designers"); +const u8 Category_POKeMONDesigners[] = _("{PALETTE 9}POKéMON Designers"); +const u8 Category_MusicComposition[] = _("{PALETTE 9}Music Composition"); +const u8 Category_SoundEffectsPOKeMONVoices[] = _("{PALETTE 9}Sound Effects & POKéMON Voices"); +const u8 Category_GameDesigners[] = _("{PALETTE 9}Game Designers"); +const u8 Category_PlotScenario[] = _("{PALETTE 9}Plot Scenario"); +const u8 Category_GameScenario[] = _("{PALETTE 9}Game Scenario"); +const u8 Category_ScriptDesigners[] = _("{PALETTE 9}Script Designers"); +const u8 Category_MapDesigners[] = _("{PALETTE 9}Map Designers"); +const u8 Category_MapDataDesigners[] = _("{PALETTE 9}Map Data Designers"); +const u8 Category_ParametricDesigners[] = _("{PALETTE 9}Parametric Designers"); +const u8 Category_POKeDEXText[] = _("{PALETTE 9}POKéDEX Text"); +const u8 Category_EnvironmentToolProgrammers[] = _("{PALETTE 9}Environment & Tool Programmers"); +const u8 Category_ProductTesting[] = _("{PALETTE 9}Product Testing"); +const u8 Category_SpecialThanks[] = _("{PALETTE 9}Special Thanks"); +const u8 Category_Coordinators[] = _("{PALETTE 9}Coordinators"); +const u8 Category_Producers[] = _("{PALETTE 9}Producers"); +const u8 Category_ExecutiveProducers[] = _("{PALETTE 9}Executive Producers"); +const u8 Category_InformationSupervisors[] = _("{PALETTE 9}Information Supervisors"); +const u8 Category_TaskManagers[] = _("{PALETTE 9}Task Managers"); +const u8 Category_BrailleCodeCheck[] = _("{PALETTE 9}Braille Code Check"); +const u8 Category_EnglishVersionCoordinators[] = _("{PALETTE 9}English Version Coordinators"); +const u8 Category_Translator[] = _("{PALETTE 9}Translator"); +const u8 Category_ProductSupport[] = _("{PALETTE 9}Product Support"); +const u8 Category_Artwork[] = _("{PALETTE 9}Artwork"); +const u8 Category_TextEditor[] = _("{PALETTE 9}Text Editor"); +const u8 Category_NOAProductTesting[] = _("{PALETTE 9}NOA Product Testing"); +const u8 Category_GraphicDesigners[] = _("{PALETTE 9}Graphic Designers"); +const u8 Text_SatoshiTajiri[] = _("Satoshi Tajiri"); +const u8 Text_Masuda[] = _("Junichi Masuda"); +const u8 Text_Sugimori[] = _("Ken Sugimori"); +const u8 Text_Morimoto[] = _("Shigeki Morimoto"); +const u8 Text_TetsuyaWatanabe[] = _("Tetsuya Watanabe"); +const u8 Text_Sogabe[] = _("Hisashi Sogabe"); +const u8 Text_Tamada[] = _("Sousuke Tamada"); +const u8 Text_Mori[] = _("Akito Mori"); +const u8 Text_Kagaya[] = _("Keita Kagaya"); +const u8 Text_Matsuda[] = _("Yoshinori Matsuda"); +const u8 Text_HiroyukiNakamura[] = _("Hiroyuki Nakamura"); +const u8 Text_Taya[] = _("Masao Taya"); +const u8 Text_Nohara[] = _("Satoshi Nohara"); +const u8 Text_TomomichiOhta[] = _("Tomomichi Ohta"); +const u8 Text_Iwasawa[] = _("Miyuki Iwasawa"); +const u8 Text_TakenoriOhta[] = _("Takenori Ohta"); +const u8 Text_Yoshida[] = _("Hironobu Yoshida"); +const u8 Text_Fujiwara[] = _("Motofumi Fujiwara"); +const u8 Text_SatoshiOhta[] = _("Satoshi Ohta"); +const u8 Text_Iwashita[] = _("Asuka Iwashita"); +const u8 Text_Tomita[] = _("Aimi Tomita"); +const u8 Text_Unno[] = _("Takao Unno"); +const u8 Text_Eo[] = _("Kanako Eo"); +const u8 Text_Okutani[] = _("Jun Okutani"); +const u8 Text_Nishida[] = _("Atsuko Nishida"); +const u8 Text_Saito[] = _("Muneo Saito"); +const u8 Text_Yoshikawa[] = _("Rena Yoshikawa"); +const u8 Text_Ichinose[] = _("Go Ichinose"); +const u8 Text_Aoki[] = _("Morikazu Aoki"); +const u8 Text_Nishino[] = _("Koji Nishino"); +const u8 Text_Matsushima[] = _("Kenji Matsushima"); +const u8 Text_TetsujiOhta[] = _("Tetsuji Ohta"); +const u8 Text_Sato[] = _("Hitomi Sato"); +const u8 Text_Kawachimaru[] = _("Takeshi Kawachimaru"); +const u8 Text_Shimoyamada[] = _("Teruyuki Shimoyamada"); +const u8 Text_Ohmori[] = _("Shigeru Ohmori"); +const u8 Text_Takahashi[] = _("Tadashi Takahashi"); +const u8 Text_ToshinobuMatsumiya[] = _("Toshinobu Matsumiya"); +const u8 Text_Tomisawa[] = _("Akihito Tomisawa"); +const u8 Text_Enomoto[] = _("Hiroki Enomoto"); +const u8 Text_Terada[] = _("Kazuyuki Terada"); +const u8 Text_Sakurai[] = _("Yuri Sakurai"); +const u8 Text_Sagawa[] = _("Hiromi Sagawa"); +const u8 Text_Tominaga[] = _("Kenji Tominaga"); +const u8 Text_YoshioTajiri[] = _("Yoshio Tajiri"); +const u8 Text_Sasaki[] = _("Teiko Sasaki"); +const u8 Text_Hamano[] = _("Sachiko Hamano"); +const u8 Text_ChieMatsumiya[] = _("Chie Matsumiya"); +const u8 Text_Shinozaki[] = _("Akiko Shinozaki"); +const u8 Text_Fujii[] = _("Atsuko Fujii"); +const u8 Text_SuperMarioClub[] = _("NCL Super Mario Club"); +const u8 Text_Tada[] = _("Atsushi Tada"); +const u8 Text_Ohnishi[] = _("Takahiro Ohnishi"); +const u8 Text_Okamura[] = _("Norihide Okamura"); +const u8 Text_HiroNakamura[] = _("Hiro Nakamura"); +const u8 Text_Uesugi[] = _("Hiroyuki Uesugi"); +const u8 Text_Murakawa[] = _("Teruki Murakawa"); +const u8 Text_Kinashi[] = _("Akira Kinashi"); +const u8 Text_Takizawa[] = _("Michiko Takizawa"); +const u8 Text_Takada[] = _("Makiko Takada"); +const u8 Text_Kondo[] = _("Takanao Kondo"); +const u8 Text_Mashima[] = _("Ai Mashima"); +const u8 Text_Nomoto[] = _("Gakuji Nomoto"); +const u8 Text_Izushi[] = _("Takehiro Izushi"); +const u8 Text_Yamagami[] = _("Hitoshi Yamagami"); +const u8 Text_KyokoWatanabe[] = _("Kyoko Watanabe"); +const u8 Text_Nakano[] = _("Takao Nakano"); +const u8 Text_Jinnai[] = _("Hiroyuki Jinnai"); +const u8 Text_Tsuru[] = _("Hiroaki Tsuru"); +const u8 Text_Ishihara[] = _("Tsunekaz Ishihara"); +const u8 Text_Iwata[] = _("Satoru Iwata"); +const u8 Text_Suyama[] = _("Kazuya Suyama"); +const u8 Text_Mitsuhara[] = _("Satoshi Mitsuhara"); +const u8 Text_JapanBrailleLibrary[] = _("Japan Braille Library"); +const u8 Text_Komura[] = _("Tomotaka Komura"); +const u8 Text_Ohashi[] = _("Mikiko Ohashi"); +const u8 Text_McMahill[] = _("Seth McMahill"); +const u8 Text_Ogasawara[] = _("Nob Ogasawara"); +const u8 Text_Yamamoto[] = _("Souichi Yamamoto"); +const u8 Text_Funakoshi[] = _("Masanori Funakoshi"); +const u8 Text_Fujihara[] = _("Kazuhiro Fujihara"); +const u8 Text_Nakamichi[] = _("Kimiko Nakamichi"); +const u8 Text_Hara[] = _("Daisuke Hara"); +const u8 Text_Okada[] = _("Atsushi Okada"); +const u8 Text_Lillygren[] = _("Teresa Lillygren"); +const u8 Text_Hertzog[] = _("Thomas Hertzog"); +const u8 Text_Ridgeway[] = _("Ed Ridgeway"); +const u8 Text_NFotB[] = _("National Federation of the Blind"); +const u8 Text_Maurer[] = _("Patricia A. Maurer"); +const u8 Text_Ford[] = _("Sayoko Blodgett-Ford"); +const u8 Text_Barlow[] = _("Nicola Pratt-Barlow"); +const u8 Text_Uyama[] = _("Koji Uyama"); +const u8 Text_Howitt[] = _("Anthony Howitt"); +const u8 Text_Tilden[] = _("Gail Tilden"); +const u8 Text_EBU[] = _("European Blind Union"); +const u8 Text_ABA[] = _("Australian Braille Authority"); +const u8 Text_RNZFotB[] = _("Royal New Zealand Federation for the Blind"); +const u8 Text_CreditsTerminator[] = _(""); +#ifdef SAPPHIRE +const u8 Text_Version[] = _("{PALETTE 9}POKéMON SAPPHIRE VERSION"); +#else +const u8 Text_Version[] = _("{PALETTE 9}POKéMON RUBY VERSION"); +#endif + +const struct CreditsEntry CreditsTerminator[] = {0, Text_CreditsTerminator}; +#ifdef SAPPHIRE +const struct CreditsEntry CreditsVersion[] = {7, Text_Version}; +#else +const struct CreditsEntry CreditsVersion[] = {8, Text_Version}; +#endif +const struct CreditsEntry CreditsCredits[] = {11, Category_Credits}; +const struct CreditsEntry CreditsExecutiveDirector[] = {8, Category_ExecutiveDirector}; +const struct CreditsEntry CreditsDirector[] = {12, Category_Director}; +const struct CreditsEntry CreditsArtDirector[] = {10, Category_ArtDirector}; +const struct CreditsEntry CreditsBattleDirector[] = {10, Category_BattleDirector}; +const struct CreditsEntry CreditsMainProgrammer[] = {10, Category_MainProgrammer}; +const struct CreditsEntry CreditsBattleSystemProgrammer[] = {8, Category_BattleSystemProgrammer}; +const struct CreditsEntry CreditsFieldSystemProgrammer[] = {7, Category_FieldSystemProgrammer}; +const struct CreditsEntry CreditsProgrammers[] = {12, Category_Programmers}; +const struct CreditsEntry CreditsMainGraphicDesigner[] = {7, Category_MainGraphicDesigner}; +const struct CreditsEntry CreditsPOKeMONGraphicDesigners[] = {6, Category_POKeMONGraphicDesigners}; +const struct CreditsEntry CreditsPOKeMONDesigners[] = {10, Category_POKeMONDesigners}; +const struct CreditsEntry CreditsMusicComposition[] = {13, Category_MusicComposition}; +const struct CreditsEntry CreditsSoundEffectsPOKeMONVoices[] = {4, Category_SoundEffectsPOKeMONVoices}; +const struct CreditsEntry CreditsGameDesigners[] = {11, Category_GameDesigners}; +const struct CreditsEntry CreditsPlotScenario[] = {11, Category_PlotScenario}; +const struct CreditsEntry CreditsGameScenario[] = {13, Category_GameScenario}; +const struct CreditsEntry CreditsScriptDesigners[] = {10, Category_ScriptDesigners}; +const struct CreditsEntry CreditsMapDesigners[] = {11, Category_MapDesigners}; +const struct CreditsEntry CreditsMapDataDesigners[] = {9, Category_MapDataDesigners}; +const struct CreditsEntry CreditsParametricDesigners[] = {9, Category_ParametricDesigners}; +const struct CreditsEntry CreditsPOKeDEXText[] = {11, Category_POKeDEXText}; +const struct CreditsEntry CreditsEnvironmentToolProgrammers[] = {6, Category_EnvironmentToolProgrammers}; +const struct CreditsEntry CreditsProductTesting[] = {11, Category_ProductTesting}; +const struct CreditsEntry CreditsSpecialThanks[] = {10, Category_SpecialThanks}; +const struct CreditsEntry CreditsCoordinators[] = {11, Category_Coordinators}; +const struct CreditsEntry CreditsProducers[] = {11, Category_Producers}; +const struct CreditsEntry CreditsExecutiveProducers[] = {7, Category_ExecutiveProducers}; +const struct CreditsEntry CreditsInformationSupervisors[] = {10, Category_InformationSupervisors}; +const struct CreditsEntry CreditsTaskManagers[] = {8, Category_TaskManagers}; +const struct CreditsEntry CreditsBrailleCodeCheck[] = {10, Category_BrailleCodeCheck}; +const struct CreditsEntry CreditsSatoshiTajiri[] = {11, Text_SatoshiTajiri}; +const struct CreditsEntry CreditsMasuda[] = {11, Text_Masuda}; +const struct CreditsEntry CreditsSugimori[] = {11, Text_Sugimori}; +const struct CreditsEntry CreditsMorimoto[] = {11, Text_Morimoto}; +const struct CreditsEntry CreditsTetsuyaWatanabe[] = {11, Text_TetsuyaWatanabe}; +const struct CreditsEntry CreditsSogabe[] = {11, Text_Sogabe}; +const struct CreditsEntry CreditsTamada[] = {11, Text_Tamada}; +const struct CreditsEntry CreditsMori[] = {11, Text_Mori}; +const struct CreditsEntry CreditsKagaya[] = {11, Text_Kagaya}; +const struct CreditsEntry CreditsMatsuda[] = {11, Text_Matsuda}; +const struct CreditsEntry CreditsHiroyukiNakamura[] = {11, Text_HiroyukiNakamura}; +const struct CreditsEntry CreditsTaya[] = {11, Text_Taya}; +const struct CreditsEntry CreditsNohara[] = {11, Text_Nohara}; +const struct CreditsEntry CreditsTomomichiOhta[] = {11, Text_TomomichiOhta}; +const struct CreditsEntry CreditsIwasawa[] = {11, Text_Iwasawa}; +const struct CreditsEntry CreditsTakenoriOhta[] = {11, Text_TakenoriOhta}; +const struct CreditsEntry CreditsYoshida[] = {11, Text_Yoshida}; +const struct CreditsEntry CreditsFujiwara[] = {11, Text_Fujiwara}; +const struct CreditsEntry CreditsSatoshiOhta[] = {11, Text_SatoshiOhta}; +const struct CreditsEntry CreditsIwashita[] = {11, Text_Iwashita}; +const struct CreditsEntry CreditsTomita[] = {11, Text_Tomita}; +const struct CreditsEntry CreditsUnno[] = {11, Text_Unno}; +const struct CreditsEntry CreditsEo[] = {11, Text_Eo}; +const struct CreditsEntry CreditsOkutani[] = {11, Text_Okutani}; +const struct CreditsEntry CreditsNishida[] = {11, Text_Nishida}; +const struct CreditsEntry CreditsSaito[] = {11, Text_Saito}; +const struct CreditsEntry CreditsYoshikawa[] = {11, Text_Yoshikawa}; +const struct CreditsEntry CreditsIchinose[] = {11, Text_Ichinose}; +const struct CreditsEntry CreditsAoki[] = {11, Text_Aoki}; +const struct CreditsEntry CreditsNishino[] = {11, Text_Nishino}; +const struct CreditsEntry CreditsMatsushima[] = {11, Text_Matsushima}; +const struct CreditsEntry CreditsTetsujiOhta[] = {11, Text_TetsujiOhta}; +const struct CreditsEntry CreditsSato[] = {11, Text_Sato}; +const struct CreditsEntry CreditsKawachimaru[] = {11, Text_Kawachimaru}; +const struct CreditsEntry CreditsShimoyamada[] = {11, Text_Shimoyamada}; +const struct CreditsEntry CreditsOhmori[] = {11, Text_Ohmori}; +const struct CreditsEntry CreditsTakahashi[] = {11, Text_Takahashi}; +const struct CreditsEntry CreditsToshinobuMatsumiya[] = {11, Text_ToshinobuMatsumiya}; +const struct CreditsEntry CreditsTomisawa[] = {11, Text_Tomisawa}; +const struct CreditsEntry CreditsEnomoto[] = {11, Text_Enomoto}; +const struct CreditsEntry CreditsTerada[] = {11, Text_Terada}; +const struct CreditsEntry CreditsSakurai[] = {11, Text_Sakurai}; +const struct CreditsEntry CreditsSagawa[] = {11, Text_Sagawa}; +const struct CreditsEntry CreditsTominaga[] = {11, Text_Tominaga}; +const struct CreditsEntry CreditsYoshiroTajiri[] = {11, Text_YoshioTajiri}; +const struct CreditsEntry CreditsSasaki[] = {11, Text_Sasaki}; +const struct CreditsEntry CreditsHamano[] = {11, Text_Hamano}; +const struct CreditsEntry CreditsChieMatsumiya[] = {11, Text_ChieMatsumiya}; +const struct CreditsEntry CreditsShinozaki[] = {11, Text_Shinozaki}; +const struct CreditsEntry CreditsFujii[] = {11, Text_Fujii}; +const struct CreditsEntry CreditsSuperMarioClub[] = {11, Text_SuperMarioClub}; +const struct CreditsEntry CreditsTada[] = {11, Text_Tada}; +const struct CreditsEntry CreditsOhnishi[] = {11, Text_Ohnishi}; +const struct CreditsEntry CreditsOkamura[] = {11, Text_Okamura}; +const struct CreditsEntry CreditsHiroNakamura[] = {11, Text_HiroNakamura}; +const struct CreditsEntry CreditsUesugi[] = {11, Text_Uesugi}; +const struct CreditsEntry CreditsMurakawa[] = {11, Text_Murakawa}; +const struct CreditsEntry CreditsKinashi[] = {11, Text_Kinashi}; +const struct CreditsEntry CreditsTakizawa[] = {11, Text_Takizawa}; +const struct CreditsEntry CreditsTakada[] = {11, Text_Takada}; +const struct CreditsEntry CreditsKondo[] = {11, Text_Kondo}; +const struct CreditsEntry CreditsMashima[] = {11, Text_Mashima}; +const struct CreditsEntry CreditsNomoto[] = {11, Text_Nomoto}; +const struct CreditsEntry CreditsIzushi[] = {11, Text_Izushi}; +const struct CreditsEntry CreditsYamagami[] = {11, Text_Yamagami}; +const struct CreditsEntry CreditsKyokoWatanabe[] = {11, Text_KyokoWatanabe}; +const struct CreditsEntry CreditsNakano[] = {11, Text_Nakano}; +const struct CreditsEntry CreditsJinnai[] = {11, Text_Jinnai}; +const struct CreditsEntry CreditsTsuru[] = {11, Text_Tsuru}; +const struct CreditsEntry CreditsIshihara[] = {11, Text_Ishihara}; +const struct CreditsEntry CreditsIwata[] = {11, Text_Iwata}; +const struct CreditsEntry CreditsSuyama[] = {11, Text_Suyama}; +const struct CreditsEntry CreditsMitsuhara[] = {11, Text_Mitsuhara}; +const struct CreditsEntry CreditsJapanBrailleLibrary[] = {9, Text_JapanBrailleLibrary}; +const struct CreditsEntry CreditsKomura[] = {11, Text_Komura}; +const struct CreditsEntry CreditsOhashi[] = {11, Text_Ohashi}; +const struct CreditsEntry CreditsEnglishVersionCoordinators[] = {0, Category_EnglishVersionCoordinators}; +const struct CreditsEntry CreditsTranslator[] = {0, Category_Translator}; +const struct CreditsEntry CreditsProductSupport[] = {0, Category_ProductSupport}; +const struct CreditsEntry CreditsArtwork[] = {0, Category_Artwork}; +const struct CreditsEntry CreditsTextEditor[] = {0, Category_TextEditor}; +const struct CreditsEntry CreditsNOAProductTesting[] = {0, Category_NOAProductTesting}; +const struct CreditsEntry CreditsGraphicDesigners[] = {0, Category_GraphicDesigners}; +const struct CreditsEntry CreditsMcMahill[] = {0, Text_McMahill}; +const struct CreditsEntry CreditsOgasawara[] = {0, Text_Ogasawara}; +const struct CreditsEntry CreditsYamamoto[] = {0, Text_Yamamoto}; +const struct CreditsEntry CreditsFunakoshi[] = {0, Text_Funakoshi}; +const struct CreditsEntry CreditsFujihara[] = {0, Text_Fujihara}; +const struct CreditsEntry CreditsNakamichi[] = {0, Text_Nakamichi}; +const struct CreditsEntry CreditsHara[] = {0, Text_Hara}; +const struct CreditsEntry CreditsOkada[] = {0, Text_Okada}; +const struct CreditsEntry CreditsLillygren[] = {0, Text_Lillygren}; +const struct CreditsEntry CreditsHertzog[] = {0, Text_Hertzog}; +const struct CreditsEntry CreditsRidgeway[] = {0, Text_Ridgeway}; +const struct CreditsEntry CreditsNFotB[] = {0, Text_NFotB}; +const struct CreditsEntry CreditsMaurer[] = {0, Text_Maurer}; +const struct CreditsEntry CreditsFord[] = {0, Text_Ford}; +const struct CreditsEntry CreditsBarlow[] = {0, Text_Barlow}; +const struct CreditsEntry CreditsUyama[] = {0, Text_Uyama}; +const struct CreditsEntry CreditsHowitt[] = {0, Text_Howitt}; +const struct CreditsEntry CreditsTilden[] = {0, Text_Tilden}; +const struct CreditsEntry CreditsEBU[] = {0, Text_EBU}; +const struct CreditsEntry CreditsABA[] = {0, Text_ABA}; +const struct CreditsEntry CreditsRNZFotB[] = {0, Text_RNZFotB}; + +#define LINES_PER_PAGE 5 +#define _ CreditsTerminator +const struct CreditsEntry *const gCreditsEntryPointerTable[][LINES_PER_PAGE] = +{ + { + _, + CreditsVersion, + CreditsCredits, + _, + _ + }, + { + _, + CreditsDirector, + CreditsMasuda, + _, + _, + }, + { + _, + CreditsArtDirector, + CreditsSugimori, + _, + _, + }, + { + _, + CreditsBattleDirector, + CreditsMorimoto, + _, + _, + }, + { + _, + CreditsMainProgrammer, + CreditsTetsuyaWatanabe, + _, + _, + }, + { + CreditsBattleSystemProgrammer, + CreditsSogabe, + CreditsFieldSystemProgrammer, + CreditsTamada, + _, + }, + { + CreditsProgrammers, + CreditsMori, + CreditsKagaya, + CreditsMatsuda, + _, + }, + { + CreditsProgrammers, + CreditsHiroyukiNakamura, + CreditsTaya, + CreditsNohara, + _, + }, + { + CreditsProgrammers, + CreditsTomomichiOhta, + CreditsIwasawa, + CreditsTakenoriOhta, + _, + }, + { + _, + CreditsMainGraphicDesigner, + CreditsYoshida, + _, + _, + }, + { + CreditsPOKeMONGraphicDesigners, + CreditsSugimori, + CreditsYoshida, + _, + _, + }, + { + CreditsPOKeMONGraphicDesigners, + CreditsFujiwara, + CreditsSatoshiOhta, + CreditsIwashita, + _, + }, + { + CreditsPOKeMONGraphicDesigners, + CreditsTomita, + CreditsUnno, + CreditsEo, + _, + }, + { + CreditsPOKeMONDesigners, + CreditsMorimoto, + CreditsOkutani, + CreditsNishida, + _, + }, + { + CreditsPOKeMONDesigners, + CreditsSaito, + CreditsYoshikawa, + _, + _, + }, + { + CreditsMusicComposition, + CreditsIchinose, + CreditsAoki, + CreditsMasuda, + _, + }, + { + _, + CreditsSoundEffectsPOKeMONVoices, + CreditsAoki, + _, + _, + }, + { + CreditsGameDesigners, + CreditsMasuda, + CreditsMorimoto, + CreditsNishino, + _, + }, + { + CreditsGameDesigners, + CreditsMatsushima, + CreditsTetsujiOhta, + CreditsSato, + CreditsKawachimaru, + }, + { + CreditsGameDesigners, + CreditsShimoyamada, + CreditsOhmori, + CreditsTakahashi, + _, + }, + { + CreditsPlotScenario, + CreditsMasuda, + CreditsTomisawa, + CreditsNishino, + _, + }, + { + CreditsGameScenario, + CreditsToshinobuMatsumiya, + CreditsTomisawa, + _, + _, + }, + { + CreditsScriptDesigners, + CreditsNohara, + CreditsTetsujiOhta, + CreditsTomomichiOhta, + _, + }, + { + CreditsMapDesigners, + CreditsOhmori, + CreditsTetsujiOhta, + CreditsNishino, + _, + }, + { + CreditsMapDataDesigners, + CreditsTetsujiOhta, + CreditsTakahashi, + _, + _, + }, + { + CreditsParametricDesigners, + CreditsNishino, + CreditsMorimoto, + CreditsTetsujiOhta, + CreditsShimoyamada, + }, + { + _, + CreditsPOKeDEXText, + CreditsMatsushima, + _, + _, + }, + { + CreditsEnvironmentToolProgrammers, + CreditsSogabe, + CreditsTamada, + CreditsHiroyukiNakamura, + CreditsMori, + }, + { + CreditsProductTesting, + CreditsSuperMarioClub, + CreditsTada, + CreditsOhnishi, + CreditsOkamura, + }, + { + CreditsSpecialThanks, + CreditsTominaga, + CreditsYoshiroTajiri, + CreditsSasaki, + _, + }, + { + CreditsSpecialThanks, + CreditsHamano, + CreditsChieMatsumiya, + CreditsShinozaki, + CreditsFujii, + }, + { + CreditsSpecialThanks, + CreditsSuyama, + CreditsMitsuhara, + CreditsKomura, + CreditsOhashi, + }, + { + CreditsSpecialThanks, + CreditsTakizawa, + CreditsTakada, + CreditsKondo, + CreditsMashima, + }, + { + CreditsInformationSupervisors, + CreditsEnomoto, + CreditsTerada, + CreditsSakurai, + CreditsSagawa, + }, + { + CreditsCoordinators, + CreditsKyokoWatanabe, + CreditsNakano, + _, + _, + }, + { + CreditsTaskManagers, + CreditsYamagami, + CreditsNomoto, + _, + _, + }, + { + CreditsProducers, + CreditsJinnai, + CreditsIzushi, + CreditsTsuru, + _, + }, + { + _, + CreditsExecutiveDirector, + CreditsSatoshiTajiri, + _, + _, + }, + { + _, + CreditsExecutiveProducers, + CreditsIwata, + _, + _, + }, + { + _, + CreditsExecutiveProducers, + CreditsIshihara, + _, + _, + }, + { + CreditsEnglishVersionCoordinators, + CreditsHiroNakamura, + CreditsMcMahill, + _, + _, + }, + { + _, + CreditsTranslator, + CreditsOgasawara, + _, + _, + }, + { + CreditsProgrammers, + CreditsMurakawa, + CreditsYamamoto, + CreditsFunakoshi, + CreditsKinashi, + }, + { + CreditsGraphicDesigners, + CreditsYamamoto, + CreditsKinashi, + _, + _, + }, + { + CreditsProductSupport, + CreditsNakamichi, + CreditsHara, + _, + _, + }, + { + _, + CreditsArtwork, + CreditsOkada, + _, + _, + }, + { + _, + CreditsTextEditor, + CreditsLillygren, + _, + _, + }, + { + CreditsNOAProductTesting, + CreditsHertzog, + CreditsRidgeway, + _, + _, + }, + { + CreditsBrailleCodeCheck, + CreditsNFotB, + CreditsMaurer, + CreditsJapanBrailleLibrary, + CreditsEBU, + }, + { + CreditsBrailleCodeCheck, + CreditsABA, + CreditsRNZFotB, + _, + _, + }, + { + CreditsSpecialThanks, + CreditsFord, + CreditsBarlow, + CreditsUesugi, + CreditsUyama, + }, + { + CreditsSpecialThanks, + CreditsHowitt, + CreditsTilden, + CreditsFujihara, + _, + }, +}; +#undef _ diff --git a/src/scene/credits.c b/src/scene/credits.c index d9e97c570..84b3b5faa 100644 --- a/src/scene/credits.c +++ b/src/scene/credits.c @@ -160,7 +160,7 @@ struct Unk201C000 struct CreditsEntry { u8 var_0; - u8 *text; + const u8 *text; }; extern u8 unk_201e800[0x800]; @@ -185,18 +185,208 @@ extern void *gUnknown_0840B5A0[]; // data/credits const u16 gUnknown_0840B7BC[] = INCBIN_U16("graphics/credits/palette_1.gbapal"); const u8 gUnknown_0840B7FC[] = INCBIN_U8("graphics/credits/ampersand.4bpp"); -extern u8 gUnknown_0840B83C[]; -extern u8 gUnknown_0840B84B[]; -extern u8 gUnknown_0840B85A[]; -extern u8 gUnknown_0840B869[]; -extern u8 gUnknown_0840B878[]; -extern struct CreditsEntry *gCreditsEntryPointerTable[][5]; -extern u8 gUnknown_0840CA00[][2]; -extern struct SpriteSheet gUnknown_0840CAA0; -extern struct SpritePalette gUnknown_0840CAB0; -extern const union AnimCmd *const gSpriteAnimTable_0840CA54[]; -extern const union AnimCmd *const gSpriteAnimTable_0840CA94[]; -extern struct SpriteTemplate gSpriteTemplate_840CAEC; + +void spritecb_814580C(struct Sprite *sprite); + +const u8 gUnknown_0840B83C[] = +{ + 0, 1, 0, + 0xFF, 1, 0xFF, + 0xFF, 1, 0xFF, + 0xFF, 1, 0xFF, + 0xFF, 1, 0xFF, +}; + +const u8 gUnknown_0840B84B[] = +{ + 1, 0xFF, 1, + 1, 0xFF, 1, + 1, 2, 1, + 1, 0xFF, 1, + 1, 0xFF, 1, +}; + +const u8 gUnknown_0840B85A[] = +{ + 1, 0, 0, + 1, 0xFF, 0xFF, + 1, 2, 2, + 1, 0xFF, 0xFF, + 1, 0x80, 0x80, +}; + +const u8 gUnknown_0840B869[] = +{ + 1, 3, 1, + 1, 4, 1, + 1, 5, 1, + 1, 0xC4, 1, + 1, 0xC3, 1, +}; + +const u8 gUnknown_0840B878[] = +{ + 1, 6, 7, + 1, 8, 9, + 1, 0xFF, 1, + 1, 0x88, 0x89, + 1, 0x86, 0x87, +#ifdef GERMAN + 1, 0, 0, + 1, 0xFF, 0xFF, + 1, 0x80, 0x8A, + 1, 0xFF, 0xFF, + 1, 0xFF, 0xFF, + 0, 1, 0, + 0xFF, 1, 0xFF, + 0xFF, 1, 0xFF, + 0xFF, 1, 0xFF, + 0x80, 1, 0x80, +#endif +}; + +#ifdef GERMAN +#include "../data/credits_en.h" // TODO, german credits +#else +#include "../data/credits_en.h" +#endif + +const u8 gUnknown_0840CA00[][2] = +{ + {104, 36}, + {120, 36}, + {136, 36}, +}; + +static const union AnimCmd gSpriteAnim_840CA08[] = +{ + ANIMCMD_FRAME(0, 8), + ANIMCMD_FRAME(64, 8), + ANIMCMD_FRAME(128, 8), + ANIMCMD_FRAME(192, 8), + ANIMCMD_JUMP(0), +}; + +static const union AnimCmd gSpriteAnim_840CA1C[] = +{ + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(64, 4), + ANIMCMD_FRAME(128, 4), + ANIMCMD_FRAME(192, 4), + ANIMCMD_JUMP(0), +}; + +static const union AnimCmd gSpriteAnim_840CA30[] = +{ + ANIMCMD_FRAME(256, 4), + ANIMCMD_FRAME(320, 4), + ANIMCMD_FRAME(384, 4), + ANIMCMD_END, +}; + +static const union AnimCmd gSpriteAnim_840CA40[] = +{ + ANIMCMD_FRAME(384, 30), + ANIMCMD_FRAME(320, 30), + ANIMCMD_FRAME(256, 30), + ANIMCMD_FRAME(256, 30), + ANIMCMD_END, +}; + +static const union AnimCmd *const gSpriteAnimTable_0840CA54[] = +{ + gSpriteAnim_840CA08, + gSpriteAnim_840CA1C, + gSpriteAnim_840CA30, + gSpriteAnim_840CA40, +}; + +static const union AnimCmd gSpriteAnim_840CA64[] = +{ + ANIMCMD_FRAME(0, 8), + ANIMCMD_FRAME(64, 8), + ANIMCMD_FRAME(128, 8), + ANIMCMD_FRAME(192, 8), + ANIMCMD_JUMP(0), +}; + +static const union AnimCmd gSpriteAnim_840CA78[] = +{ + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(64, 4), + ANIMCMD_FRAME(128, 4), + ANIMCMD_FRAME(192, 4), + ANIMCMD_JUMP(0), +}; + +static const union AnimCmd gSpriteAnim_840CA8C[] = +{ + ANIMCMD_FRAME(0, 4), + ANIMCMD_END, +}; + +static const union AnimCmd *const gSpriteAnimTable_0840CA94[] = +{ + gSpriteAnim_840CA64, + gSpriteAnim_840CA78, + gSpriteAnim_840CA8C, +}; + +static const struct SpriteSheet gUnknown_0840CAA0[] = {{ewram1E000_2, 6144, 1001}, {0}}; +static const struct SpritePalette gUnknown_0840CAB0[] = {{ewram_1F800_2, 1001}, {0}}; + +static const struct OamData gOamData_840CAC0 = +{ + .y = 160, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 1, + .paletteNum = 0, + .affineParam = 0, +}; + +static const union AnimCmd gSpriteAnim_840CAC8[] = +{ + ANIMCMD_FRAME(0, 8), + ANIMCMD_END, +}; + +static const union AnimCmd gSpriteAnim_840CAD0[] = +{ + ANIMCMD_FRAME(64, 8), + ANIMCMD_END, +}; + +static const union AnimCmd gSpriteAnim_840CAD8[] = +{ + ANIMCMD_FRAME(128, 8), + ANIMCMD_END, +}; + +static const union AnimCmd *const gSpriteAnimTable_840CAE0[] = +{ + gSpriteAnim_840CAC8, + gSpriteAnim_840CAD0, + gSpriteAnim_840CAD8, +}; + +static const struct SpriteTemplate gSpriteTemplate_840CAEC = +{ + .tileTag = 1001, + .paletteTag = 1001, + .oam = &gOamData_840CAC0, + .anims = gSpriteAnimTable_840CAE0, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = spritecb_814580C, +}; // graphics extern u8 gCreditsCopyrightEnd_Gfx[]; @@ -432,8 +622,8 @@ void task_a_8143D04(u8 taskIdA) EWRAM_1F800[2] = 0x529F; // light red EWRAM_1F800[3] = 0x7E94; // light blue - LoadSpriteSheet(&gUnknown_0840CAA0); - LoadSpritePalette(&gUnknown_0840CAB0); + LoadSpriteSheet(gUnknown_0840CAA0); + LoadSpritePalette(gUnknown_0840CAB0); gMain.state += 1; break; @@ -1151,7 +1341,7 @@ u16 sub_8145208(u8 arg0) return out; } -void sub_814524C(u8 arg0[], u8 baseX, u8 baseY, u16 arg3, u16 palette) +void sub_814524C(const u8 arg0[], u8 baseX, u8 baseY, u16 arg3, u16 palette) { u8 y, x; const u16 tileOffset = (palette / 16) << 12; -- cgit v1.2.3 From 608d293def9e943cef9e1ce25e014ce5306eb519 Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Fri, 10 Nov 2017 22:27:32 -0500 Subject: fix german --- src/data/credits_de.h | 624 +++++++++++++++++++++++++++++++++++++++++++ src/data/credits_en.h | 726 +++++++++++++++++++++++++------------------------- src/scene/credits.c | 2 +- 3 files changed, 988 insertions(+), 364 deletions(-) create mode 100755 src/data/credits_de.h (limited to 'src') diff --git a/src/data/credits_de.h b/src/data/credits_de.h new file mode 100755 index 000000000..570c0d4c5 --- /dev/null +++ b/src/data/credits_de.h @@ -0,0 +1,624 @@ +static const u8 Text_Version_Ruby[] = _("POKéMON RUBIN-EDITION"); +static const u8 Text_Version_Sapphire[] = _("POKéMON SAPHIR-EDITION"); +static const u8 Category_Credits[] = _("{PALETTE 9}Credits"); +static const u8 Category_ExecutiveDirector[] = _("{PALETTE 9}Executive Director"); +static const u8 Category_Director[] = _("{PALETTE 9}Director"); +static const u8 Category_ArtDirector[] = _("{PALETTE 9}Art Director"); +static const u8 Category_BattleDirector[] = _("{PALETTE 9}Battle Director"); +static const u8 Category_MainProgrammer[] = _("{PALETTE 9}Main Programmer"); +static const u8 Category_BattleSystemProgrammer[] = _("{PALETTE 9}Battle System Programmer"); +static const u8 Category_FieldSystemProgrammer[] = _("{PALETTE 9}Field System Programmer"); +static const u8 Category_Programmers[] = _("{PALETTE 9}Programmers"); +static const u8 Category_MainGraphicDesigner[] = _("{PALETTE 9}Main Graphic Designer"); +static const u8 Category_POKeMONGraphicDesigners[] = _("{PALETTE 9}POKéMON & Graphic Designers"); +static const u8 Category_POKeMONDesigners[] = _("{PALETTE 9}POKéMON Designers"); +static const u8 Category_MusicComposition[] = _("{PALETTE 9}Music Composition"); +static const u8 Category_SoundEffectsPOKeMONVoices[] = _("{PALETTE 9}Sound Effects & POKéMON Voices"); +static const u8 Category_GameDesigners[] = _("{PALETTE 9}Game Designers"); +static const u8 Category_PlotScenario[] = _("{PALETTE 9}Plot Scenario"); +static const u8 Category_GameScenario[] = _("{PALETTE 9}Game Scenario"); +static const u8 Category_ScriptDesigners[] = _("{PALETTE 9}Script Designers"); +static const u8 Category_MapDesigners[] = _("{PALETTE 9}Map Designers"); +static const u8 Category_MapDataDesigners[] = _("{PALETTE 9}Map Data Designers"); +static const u8 Category_ParametricDesigners[] = _("{PALETTE 9}Parametric Designers"); +static const u8 Category_POKeDEXText[] = _("{PALETTE 9}POKéDEX Text"); +static const u8 Category_EnvironmentToolProgrammers[] = _("{PALETTE 9}Environment & Tool Programmers"); +static const u8 Category_ProductTesting[] = _("{PALETTE 9}Product Testing"); +static const u8 Category_SpecialThanks[] = _("{PALETTE 9}Special Thanks"); +static const u8 Category_Coordinators[] = _("{PALETTE 9}Coordinators"); +static const u8 Category_Producers[] = _("{PALETTE 9}Producers"); +static const u8 Category_ExecutiveProducers[] = _("{PALETTE 9}Executive Producers"); +static const u8 Category_InformationSupervisors[] = _("{PALETTE 9}Information Supervisors"); +static const u8 Category_TaskManagers[] = _("{PALETTE 9}Task Managers"); +static const u8 Category_BrailleCodeCheck[] = _("{PALETTE 9}Braille Code Check"); +static const u8 Category_GermanVersionCoordinators[] = _("{PALETTE 9}German Version Coordinators"); +static const u8 Category_Translators[] = _("{PALETTE 9}Translators"); +static const u8 Category_ProductSupport[] = _("{PALETTE 9}Product Support"); +static const u8 Category_Artwork[] = _("{PALETTE 9}Artwork"); +static const u8 Category_TextEditor[] = _("{PALETTE 9}Text Editor"); +static const u8 Category_NOEProductTesting[] = _("{PALETTE 9}NOE Product Testing"); +static const u8 Category_GraphicDesigners[] = _("{PALETTE 9}Graphic Designers"); +static const u8 Text_SatoshiTajiri[] = _("Satoshi Tajiri"); +static const u8 Text_Masuda[] = _("Junichi Masuda"); +static const u8 Text_Sugimori[] = _("Ken Sugimori"); +static const u8 Text_Morimoto[] = _("Shigeki Morimoto"); +static const u8 Text_TetsuyaWatanabe[] = _("Tetsuya Watanabe"); +static const u8 Text_Sogabe[] = _("Hisashi Sogabe"); +static const u8 Text_Tamada[] = _("Sousuke Tamada"); +static const u8 Text_Mori[] = _("Akito Mori"); +static const u8 Text_Kagaya[] = _("Keita Kagaya"); +static const u8 Text_Matsuda[] = _("Yoshinori Matsuda"); +static const u8 Text_HiroyukiNakamura[] = _("Hiroyuki Nakamura"); +static const u8 Text_Taya[] = _("Masao Taya"); +static const u8 Text_Nohara[] = _("Satoshi Nohara"); +static const u8 Text_TomomichiOhta[] = _("Tomomichi Ohta"); +static const u8 Text_Iwasawa[] = _("Miyuki Iwasawa"); +static const u8 Text_TakenoriOhta[] = _("Takenori Ohta"); +static const u8 Text_Yoshida[] = _("Hironobu Yoshida"); +static const u8 Text_Fujiwara[] = _("Motofumi Fujiwara"); +static const u8 Text_SatoshiOhta[] = _("Satoshi Ohta"); +static const u8 Text_Iwashita[] = _("Asuka Iwashita"); +static const u8 Text_Tomita[] = _("Aimi Tomita"); +static const u8 Text_Unno[] = _("Takao Unno"); +static const u8 Text_Eo[] = _("Kanako Eo"); +static const u8 Text_Okutani[] = _("Jun Okutani"); +static const u8 Text_Nishida[] = _("Atsuko Nishida"); +static const u8 Text_Saito[] = _("Muneo Saito"); +static const u8 Text_Yoshikawa[] = _("Rena Yoshikawa"); +static const u8 Text_Ichinose[] = _("Go Ichinose"); +static const u8 Text_Aoki[] = _("Morikazu Aoki"); +static const u8 Text_Nishino[] = _("Koji Nishino"); +static const u8 Text_Matsushima[] = _("Kenji Matsushima"); +static const u8 Text_TetsujiOhta[] = _("Tetsuji Ohta"); +static const u8 Text_Sato[] = _("Hitomi Sato"); +static const u8 Text_Kawachimaru[] = _("Takeshi Kawachimaru"); +static const u8 Text_Shimoyamada[] = _("Teruyuki Shimoyamada"); +static const u8 Text_Ohmori[] = _("Shigeru Ohmori"); +static const u8 Text_Takahashi[] = _("Tadashi Takahashi"); +static const u8 Text_ToshinobuMatsumiya[] = _("Toshinobu Matsumiya"); +static const u8 Text_Tomisawa[] = _("Akihito Tomisawa"); +static const u8 Text_Enomoto[] = _("Hiroki Enomoto"); +static const u8 Text_Terada[] = _("Kazuyuki Terada"); +static const u8 Text_Sakurai[] = _("Yuri Sakurai"); +static const u8 Text_Sagawa[] = _("Hiromi Sagawa"); +static const u8 Text_Tominaga[] = _("Kenji Tominaga"); +static const u8 Text_YoshioTajiri[] = _("Yoshio Tajiri"); +static const u8 Text_Sasaki[] = _("Teiko Sasaki"); +static const u8 Text_Hamano[] = _("Sachiko Hamano"); +static const u8 Text_ChieMatsumiya[] = _("Chie Matsumiya"); +static const u8 Text_Shinozaki[] = _("Akiko Shinozaki"); +static const u8 Text_Fujii[] = _("Atsuko Fujii"); +static const u8 Text_SuperMarioClub[] = _("NCL Super Mario Club"); +static const u8 Text_Tada[] = _("Atsushi Tada"); +static const u8 Text_Ohnishi[] = _("Takahiro Ohnishi"); +static const u8 Text_Okamura[] = _("Norihide Okamura"); +static const u8 Text_HiroNakamura[] = _("Hiro Nakamura"); +static const u8 Text_Uesugi[] = _("Hiroyuki Uesugi"); +static const u8 Text_Murakawa[] = _("Teruki Murakawa"); +static const u8 Text_Kinashi[] = _("Akira Kinashi"); +static const u8 Text_Takizawa[] = _("Michiko Takizawa"); +static const u8 Text_Takada[] = _("Makiko Takada"); +static const u8 Text_Kondo[] = _("Takanao Kondo"); +static const u8 Text_Mashima[] = _("Ai Mashima"); +static const u8 Text_Nomoto[] = _("Gakuji Nomoto"); +static const u8 Text_Izushi[] = _("Takehiro Izushi"); +static const u8 Text_Yamagami[] = _("Hitoshi Yamagami"); +static const u8 Text_KyokoWatanabe[] = _("Kyoko Watanabe"); +static const u8 Text_Nakano[] = _("Takao Nakano"); +static const u8 Text_Jinnai[] = _("Hiroyuki Jinnai"); +static const u8 Text_Tsuru[] = _("Hiroaki Tsuru"); +static const u8 Text_Ishihara[] = _("Tsunekaz Ishihara"); +static const u8 Text_Iwata[] = _("Satoru Iwata"); +static const u8 Text_Suyama[] = _("Kazuya Suyama"); +static const u8 Text_Mitsuhara[] = _("Satoshi Mitsuhara"); +static const u8 Text_JapanBrailleLibrary[] = _("Japan Braille Library"); +static const u8 Text_Komura[] = _("Tomotaka Komura"); +static const u8 Text_Ohashi[] = _("Mikiko Ohashi"); +static const u8 Text_Yamamoto[] = _("Souichi Yamamoto"); +static const u8 Text_Funakoshi[] = _("Masanori Funakoshi"); +static const u8 Text_Nakamichi[] = _("Kimiko Nakamichi"); +static const u8 Text_Hara[] = _("Daisuke Hara"); +static const u8 Text_Ford[] = _("Sayoko Blodgett-Ford"); +static const u8 Text_Barlow[] = _("Nicola Pratt-Barlow"); +static const u8 Text_Uyama[] = _("Koji Uyama"); +static const u8 Text_EBU[] = _("European Blind Union"); +static const u8 Text_Saeki[] = _("Naoko Saeki"); +static const u8 Text_Sadahisa[] = _("Kayo Sadahisa"); +static const u8 Text_Schafer[] = _("Daniel Schäfers"); +static const u8 Text_Deimel[] = _("Martina Deimel"); +static const u8 Text_Jahn[] = _("Andrea Jähn"); +static const u8 Text_Victoria[] = _("Ángel Victoria"); +static const u8 Text_Mawer[] = _("Matthew Mawer"); +static const u8 Text_Danieli[] = _("Alessio Danieli"); +static const u8 Text_Schnitzer[] = _("Rudi Schnitzer"); +static const u8 Text_Pujos[] = _("Gabriera Pujós"); +static const u8 Text_CreditsTerminator[] = _(""); + +static const struct CreditsEntry CreditsTerminator[] = {0, Text_CreditsTerminator}; +static const struct CreditsEntry CreditsCredits[] = {11, Category_Credits}; +static const struct CreditsEntry CreditsExecutiveDirector[] = {8, Category_ExecutiveDirector}; +static const struct CreditsEntry CreditsDirector[] = {12, Category_Director}; +static const struct CreditsEntry CreditsArtDirector[] = {10, Category_ArtDirector}; +static const struct CreditsEntry CreditsBattleDirector[] = {10, Category_BattleDirector}; +static const struct CreditsEntry CreditsMainProgrammer[] = {10, Category_MainProgrammer}; +static const struct CreditsEntry CreditsBattleSystemProgrammer[] = {8, Category_BattleSystemProgrammer}; +static const struct CreditsEntry CreditsFieldSystemProgrammer[] = {7, Category_FieldSystemProgrammer}; +static const struct CreditsEntry CreditsProgrammers[] = {12, Category_Programmers}; +static const struct CreditsEntry CreditsMainGraphicDesigner[] = {7, Category_MainGraphicDesigner}; +static const struct CreditsEntry CreditsPOKeMONGraphicDesigners[] = {6, Category_POKeMONGraphicDesigners}; +static const struct CreditsEntry CreditsPOKeMONDesigners[] = {10, Category_POKeMONDesigners}; +static const struct CreditsEntry CreditsMusicComposition[] = {13, Category_MusicComposition}; +static const struct CreditsEntry CreditsSoundEffectsPOKeMONVoices[] = {4, Category_SoundEffectsPOKeMONVoices}; +static const struct CreditsEntry CreditsGameDesigners[] = {11, Category_GameDesigners}; +static const struct CreditsEntry CreditsPlotScenario[] = {11, Category_PlotScenario}; +static const struct CreditsEntry CreditsGameScenario[] = {13, Category_GameScenario}; +static const struct CreditsEntry CreditsScriptDesigners[] = {10, Category_ScriptDesigners}; +static const struct CreditsEntry CreditsMapDesigners[] = {11, Category_MapDesigners}; +static const struct CreditsEntry CreditsMapDataDesigners[] = {9, Category_MapDataDesigners}; +static const struct CreditsEntry CreditsParametricDesigners[] = {9, Category_ParametricDesigners}; +static const struct CreditsEntry CreditsPOKeDEXText[] = {11, Category_POKeDEXText}; +static const struct CreditsEntry CreditsEnvironmentToolProgrammers[] = {6, Category_EnvironmentToolProgrammers}; +static const struct CreditsEntry CreditsProductTesting[] = {11, Category_ProductTesting}; +static const struct CreditsEntry CreditsSpecialThanks[] = {10, Category_SpecialThanks}; +static const struct CreditsEntry CreditsCoordinators[] = {11, Category_Coordinators}; +static const struct CreditsEntry CreditsProducers[] = {11, Category_Producers}; +static const struct CreditsEntry CreditsExecutiveProducers[] = {7, Category_ExecutiveProducers}; +static const struct CreditsEntry CreditsInformationSupervisors[] = {10, Category_InformationSupervisors}; +static const struct CreditsEntry CreditsTaskManagers[] = {8, Category_TaskManagers}; +static const struct CreditsEntry CreditsBrailleCodeCheck[] = {10, Category_BrailleCodeCheck}; +static const struct CreditsEntry CreditsSatoshiTajiri[] = {11, Text_SatoshiTajiri}; +static const struct CreditsEntry CreditsMasuda[] = {11, Text_Masuda}; +static const struct CreditsEntry CreditsSugimori[] = {11, Text_Sugimori}; +static const struct CreditsEntry CreditsMorimoto[] = {11, Text_Morimoto}; +static const struct CreditsEntry CreditsTetsuyaWatanabe[] = {11, Text_TetsuyaWatanabe}; +static const struct CreditsEntry CreditsSogabe[] = {11, Text_Sogabe}; +static const struct CreditsEntry CreditsTamada[] = {11, Text_Tamada}; +static const struct CreditsEntry CreditsMori[] = {11, Text_Mori}; +static const struct CreditsEntry CreditsKagaya[] = {11, Text_Kagaya}; +static const struct CreditsEntry CreditsMatsuda[] = {11, Text_Matsuda}; +static const struct CreditsEntry CreditsHiroyukiNakamura[] = {11, Text_HiroyukiNakamura}; +static const struct CreditsEntry CreditsTaya[] = {11, Text_Taya}; +static const struct CreditsEntry CreditsNohara[] = {11, Text_Nohara}; +static const struct CreditsEntry CreditsTomomichiOhta[] = {11, Text_TomomichiOhta}; +static const struct CreditsEntry CreditsIwasawa[] = {11, Text_Iwasawa}; +static const struct CreditsEntry CreditsTakenoriOhta[] = {11, Text_TakenoriOhta}; +static const struct CreditsEntry CreditsYoshida[] = {11, Text_Yoshida}; +static const struct CreditsEntry CreditsFujiwara[] = {11, Text_Fujiwara}; +static const struct CreditsEntry CreditsSatoshiOhta[] = {11, Text_SatoshiOhta}; +static const struct CreditsEntry CreditsIwashita[] = {11, Text_Iwashita}; +static const struct CreditsEntry CreditsTomita[] = {11, Text_Tomita}; +static const struct CreditsEntry CreditsUnno[] = {11, Text_Unno}; +static const struct CreditsEntry CreditsEo[] = {11, Text_Eo}; +static const struct CreditsEntry CreditsOkutani[] = {11, Text_Okutani}; +static const struct CreditsEntry CreditsNishida[] = {11, Text_Nishida}; +static const struct CreditsEntry CreditsSaito[] = {11, Text_Saito}; +static const struct CreditsEntry CreditsYoshikawa[] = {11, Text_Yoshikawa}; +static const struct CreditsEntry CreditsIchinose[] = {11, Text_Ichinose}; +static const struct CreditsEntry CreditsAoki[] = {11, Text_Aoki}; +static const struct CreditsEntry CreditsNishino[] = {11, Text_Nishino}; +static const struct CreditsEntry CreditsMatsushima[] = {11, Text_Matsushima}; +static const struct CreditsEntry CreditsTetsujiOhta[] = {11, Text_TetsujiOhta}; +static const struct CreditsEntry CreditsSato[] = {11, Text_Sato}; +static const struct CreditsEntry CreditsKawachimaru[] = {11, Text_Kawachimaru}; +static const struct CreditsEntry CreditsShimoyamada[] = {11, Text_Shimoyamada}; +static const struct CreditsEntry CreditsOhmori[] = {11, Text_Ohmori}; +static const struct CreditsEntry CreditsTakahashi[] = {11, Text_Takahashi}; +static const struct CreditsEntry CreditsToshinobuMatsumiya[] = {11, Text_ToshinobuMatsumiya}; +static const struct CreditsEntry CreditsTomisawa[] = {11, Text_Tomisawa}; +static const struct CreditsEntry CreditsEnomoto[] = {11, Text_Enomoto}; +static const struct CreditsEntry CreditsTerada[] = {11, Text_Terada}; +static const struct CreditsEntry CreditsSakurai[] = {11, Text_Sakurai}; +static const struct CreditsEntry CreditsSagawa[] = {11, Text_Sagawa}; +static const struct CreditsEntry CreditsTominaga[] = {11, Text_Tominaga}; +static const struct CreditsEntry CreditsYoshioTajiri[] = {11, Text_YoshioTajiri}; +static const struct CreditsEntry CreditsSasaki[] = {11, Text_Sasaki}; +static const struct CreditsEntry CreditsHamano[] = {11, Text_Hamano}; +static const struct CreditsEntry CreditsChieMatsumiya[] = {11, Text_ChieMatsumiya}; +static const struct CreditsEntry CreditsShinozaki[] = {11, Text_Shinozaki}; +static const struct CreditsEntry CreditsFujii[] = {11, Text_Fujii}; +static const struct CreditsEntry CreditsSuperMarioClub[] = {11, Text_SuperMarioClub}; +static const struct CreditsEntry CreditsTada[] = {11, Text_Tada}; +static const struct CreditsEntry CreditsOhnishi[] = {11, Text_Ohnishi}; +static const struct CreditsEntry CreditsOkamura[] = {11, Text_Okamura}; +static const struct CreditsEntry CreditsHiroNakamura[] = {11, Text_HiroNakamura}; +static const struct CreditsEntry CreditsUesugi[] = {11, Text_Uesugi}; +static const struct CreditsEntry CreditsMurakawa[] = {11, Text_Murakawa}; +static const struct CreditsEntry CreditsKinashi[] = {11, Text_Kinashi}; +static const struct CreditsEntry CreditsTakizawa[] = {11, Text_Takizawa}; +static const struct CreditsEntry CreditsTakada[] = {11, Text_Takada}; +static const struct CreditsEntry CreditsKondo[] = {11, Text_Kondo}; +static const struct CreditsEntry CreditsMashima[] = {11, Text_Mashima}; +static const struct CreditsEntry CreditsNomoto[] = {11, Text_Nomoto}; +static const struct CreditsEntry CreditsIzushi[] = {11, Text_Izushi}; +static const struct CreditsEntry CreditsYamagami[] = {11, Text_Yamagami}; +static const struct CreditsEntry CreditsKyokoWatanabe[] = {11, Text_KyokoWatanabe}; +static const struct CreditsEntry CreditsNakano[] = {11, Text_Nakano}; +static const struct CreditsEntry CreditsJinnai[] = {11, Text_Jinnai}; +static const struct CreditsEntry CreditsTsuru[] = {11, Text_Tsuru}; +static const struct CreditsEntry CreditsIshihara[] = {11, Text_Ishihara}; +static const struct CreditsEntry CreditsIwata[] = {11, Text_Iwata}; +static const struct CreditsEntry CreditsSuyama[] = {11, Text_Suyama}; +static const struct CreditsEntry CreditsMitsuhara[] = {11, Text_Mitsuhara}; +static const struct CreditsEntry CreditsJapanBrailleLibrary[] = {9, Text_JapanBrailleLibrary}; +static const struct CreditsEntry CreditsKomura[] = {11, Text_Komura}; +static const struct CreditsEntry CreditsOhashi[] = {11, Text_Ohashi}; +static const struct CreditsEntry CreditsTranslators[] = {0, Category_Translators}; +static const struct CreditsEntry CreditsProductSupport[] = {0, Category_ProductSupport}; +static const struct CreditsEntry CreditsArtwork[] = {0, Category_Artwork}; +static const struct CreditsEntry CreditsTextEditor[] = {0, Category_TextEditor}; +static const struct CreditsEntry CreditsGraphicDesigners[] = {0, Category_GraphicDesigners}; +static const struct CreditsEntry CreditsYamamoto[] = {0, Text_Yamamoto}; +static const struct CreditsEntry CreditsFunakoshi[] = {0, Text_Funakoshi}; +static const struct CreditsEntry CreditsNakamichi[] = {0, Text_Nakamichi}; +static const struct CreditsEntry CreditsHara[] = {0, Text_Hara}; +static const struct CreditsEntry CreditsFord[] = {0, Text_Ford}; +static const struct CreditsEntry CreditsBarlow[] = {0, Text_Barlow}; +static const struct CreditsEntry CreditsUyama[] = {0, Text_Uyama}; +static const struct CreditsEntry CreditsEBU[] = {0, Text_EBU}; +#ifdef SAPPHIRE +static const struct CreditsEntry CreditsVersion[] = {0, Text_Version_Sapphire}; +#else +static const struct CreditsEntry CreditsVersion[] = {0, Text_Version_Ruby}; +#endif +static const struct CreditsEntry CreditsNOEProductTesting[] = {0, Category_NOEProductTesting}; +static const struct CreditsEntry CreditsSaeki[] = {0, Text_Saeki}; +static const struct CreditsEntry CreditsSadahisa[] = {0, Text_Sadahisa}; +static const struct CreditsEntry CreditsGermanVersionCoordinators[] = {0, Category_GermanVersionCoordinators}; +static const struct CreditsEntry CreditsSchafer[] = {0, Text_Schafer}; +static const struct CreditsEntry CreditsDeimel[] = {0, Text_Deimel}; +static const struct CreditsEntry CreditsJahn[] = {0, Text_Jahn}; +static const struct CreditsEntry CreditsVictoria[] = {0, Text_Victoria}; +static const struct CreditsEntry CreditsMawer[] = {0, Text_Mawer}; +static const struct CreditsEntry CreditsDanieli[] = {0, Text_Danieli}; +static const struct CreditsEntry CreditsSchnitzer[] = {0, Text_Schnitzer}; +static const struct CreditsEntry CreditsPujos[] = {0, Text_Pujos}; + +#define LINES_PER_PAGE 5 +#define _ CreditsTerminator +const struct CreditsEntry *const gCreditsEntryPointerTable[][LINES_PER_PAGE] = +{ + { + _, + CreditsVersion, + CreditsCredits, + _, + _ + }, + { + _, + CreditsDirector, + CreditsMasuda, + _, + _ + }, + { + _, + CreditsArtDirector, + CreditsSugimori, + _, + _ + }, + { + _, + CreditsBattleDirector, + CreditsMorimoto, + _, + _ + }, + { + _, + CreditsMainProgrammer, + CreditsTetsuyaWatanabe, + _, + _ + }, + { + CreditsBattleSystemProgrammer, + CreditsSogabe, + CreditsFieldSystemProgrammer, + CreditsTamada, + _ + }, + { + CreditsProgrammers, + CreditsMori, + CreditsKagaya, + CreditsMatsuda, + _ + }, + { + CreditsProgrammers, + CreditsHiroyukiNakamura, + CreditsTaya, + CreditsNohara, + _ + }, + { + CreditsProgrammers, + CreditsTomomichiOhta, + CreditsIwasawa, + CreditsTakenoriOhta, + _ + }, + { + _, + CreditsMainGraphicDesigner, + CreditsYoshida, + _, + _ + }, + { + CreditsPOKeMONGraphicDesigners, + CreditsSugimori, + CreditsYoshida, + _, + _ + }, + { + CreditsPOKeMONGraphicDesigners, + CreditsFujiwara, + CreditsSatoshiOhta, + CreditsIwashita, + _ + }, + { + CreditsPOKeMONGraphicDesigners, + CreditsTomita, + CreditsUnno, + CreditsEo, + _ + }, + { + CreditsPOKeMONDesigners, + CreditsMorimoto, + CreditsOkutani, + CreditsNishida, + _ + }, + { + CreditsPOKeMONDesigners, + CreditsSaito, + CreditsYoshikawa, + _, + _ + }, + { + CreditsMusicComposition, + CreditsIchinose, + CreditsAoki, + CreditsMasuda, + _ + }, + { + _, + CreditsSoundEffectsPOKeMONVoices, + CreditsAoki, + _, + _ + }, + { + CreditsGameDesigners, + CreditsMasuda, + CreditsMorimoto, + CreditsNishino, + _ + }, + { + CreditsGameDesigners, + CreditsMatsushima, + CreditsTetsujiOhta, + CreditsSato, + CreditsKawachimaru + }, + { + CreditsGameDesigners, + CreditsShimoyamada, + CreditsOhmori, + CreditsTakahashi, + _ + }, + { + CreditsPlotScenario, + CreditsMasuda, + CreditsTomisawa, + CreditsNishino, + _ + }, + { + CreditsGameScenario, + CreditsToshinobuMatsumiya, + CreditsTomisawa, + _, + _ + }, + { + CreditsScriptDesigners, + CreditsNohara, + CreditsTetsujiOhta, + CreditsTomomichiOhta, + _ + }, + { + CreditsMapDesigners, + CreditsOhmori, + CreditsTetsujiOhta, + CreditsNishino, + _ + }, + { + CreditsMapDataDesigners, + CreditsTetsujiOhta, + CreditsTakahashi, + _, + _ + }, + { + CreditsParametricDesigners, + CreditsNishino, + CreditsMorimoto, + CreditsTetsujiOhta, + CreditsShimoyamada + }, + { + _, + CreditsPOKeDEXText, + CreditsMatsushima, + _, + _ + }, + { + CreditsEnvironmentToolProgrammers, + CreditsSogabe, + CreditsTamada, + CreditsHiroyukiNakamura, + CreditsMori + }, + { + CreditsProductTesting, + CreditsSuperMarioClub, + CreditsTada, + CreditsOhnishi, + CreditsOkamura + }, + { + CreditsSpecialThanks, + CreditsTominaga, + CreditsYoshioTajiri, + CreditsSasaki, + _ + }, + { + CreditsSpecialThanks, + CreditsHamano, + CreditsChieMatsumiya, + CreditsShinozaki, + CreditsFujii + }, + { + CreditsSpecialThanks, + CreditsSuyama, + CreditsMitsuhara, + CreditsKomura, + CreditsOhashi + }, + { + CreditsSpecialThanks, + CreditsTakizawa, + CreditsTakada, + CreditsKondo, + CreditsMashima + }, + { + CreditsInformationSupervisors, + CreditsEnomoto, + CreditsTerada, + CreditsSakurai, + CreditsSagawa + }, + { + CreditsCoordinators, + CreditsKyokoWatanabe, + CreditsNakano, + _, + _ + }, + { + CreditsTaskManagers, + CreditsYamagami, + CreditsNomoto, + _, + _ + }, + { + CreditsProducers, + CreditsJinnai, + CreditsIzushi, + CreditsTsuru, + _ + }, + { + _, + CreditsExecutiveDirector, + CreditsSatoshiTajiri, + _, + _ + }, + { + _, + CreditsExecutiveProducers, + CreditsIwata, + _, + _ + }, + { + _, + CreditsExecutiveProducers, + CreditsIshihara, + _, + _ + }, + { + CreditsGermanVersionCoordinators, + CreditsUesugi, + CreditsSadahisa, + _, + _ + }, + { + CreditsTranslators, + CreditsSchafer, + CreditsDeimel, + CreditsJahn, + _ + }, + { + CreditsProgrammers, + CreditsMurakawa, + CreditsYamamoto, + CreditsKinashi, + _ + }, + { + CreditsGraphicDesigners, + CreditsYamamoto, + CreditsKinashi, + _, + _ + }, + { + CreditsProductSupport, + CreditsNakamichi, + CreditsSaeki, + CreditsHara, + _ + }, + { + CreditsNOEProductTesting, + CreditsVictoria, + CreditsMawer, + CreditsDanieli, + CreditsSchnitzer + }, + { + _, + CreditsBrailleCodeCheck, + CreditsEBU, + _, + _ + }, + { + CreditsSpecialThanks, + CreditsHiroNakamura, + CreditsFord, + CreditsBarlow, + _ + }, + { + CreditsSpecialThanks, + CreditsUyama, + CreditsPujos, + _, + _ + }, +}; +#undef _ diff --git a/src/data/credits_en.h b/src/data/credits_en.h index fd00dd94b..8ce0bad03 100755 --- a/src/data/credits_en.h +++ b/src/data/credits_en.h @@ -286,369 +286,369 @@ const struct CreditsEntry CreditsRNZFotB[] = {0, Text_RNZFotB}; #define _ CreditsTerminator const struct CreditsEntry *const gCreditsEntryPointerTable[][LINES_PER_PAGE] = { - { - _, - CreditsVersion, - CreditsCredits, - _, + { + _, + CreditsVersion, + CreditsCredits, + _, _ - }, - { - _, - CreditsDirector, - CreditsMasuda, - _, - _, - }, - { - _, - CreditsArtDirector, - CreditsSugimori, - _, - _, - }, - { - _, - CreditsBattleDirector, - CreditsMorimoto, - _, - _, - }, - { - _, - CreditsMainProgrammer, - CreditsTetsuyaWatanabe, - _, - _, - }, - { - CreditsBattleSystemProgrammer, - CreditsSogabe, - CreditsFieldSystemProgrammer, - CreditsTamada, - _, - }, - { - CreditsProgrammers, - CreditsMori, - CreditsKagaya, - CreditsMatsuda, - _, - }, - { - CreditsProgrammers, - CreditsHiroyukiNakamura, - CreditsTaya, - CreditsNohara, - _, - }, - { - CreditsProgrammers, - CreditsTomomichiOhta, - CreditsIwasawa, - CreditsTakenoriOhta, - _, - }, - { - _, - CreditsMainGraphicDesigner, - CreditsYoshida, - _, - _, - }, - { - CreditsPOKeMONGraphicDesigners, - CreditsSugimori, - CreditsYoshida, - _, - _, - }, - { - CreditsPOKeMONGraphicDesigners, - CreditsFujiwara, - CreditsSatoshiOhta, - CreditsIwashita, - _, - }, - { - CreditsPOKeMONGraphicDesigners, - CreditsTomita, - CreditsUnno, - CreditsEo, - _, - }, - { - CreditsPOKeMONDesigners, - CreditsMorimoto, - CreditsOkutani, - CreditsNishida, - _, - }, - { - CreditsPOKeMONDesigners, - CreditsSaito, - CreditsYoshikawa, - _, - _, - }, - { - CreditsMusicComposition, - CreditsIchinose, - CreditsAoki, - CreditsMasuda, - _, - }, - { - _, - CreditsSoundEffectsPOKeMONVoices, - CreditsAoki, - _, - _, - }, - { - CreditsGameDesigners, - CreditsMasuda, - CreditsMorimoto, - CreditsNishino, - _, - }, - { - CreditsGameDesigners, - CreditsMatsushima, - CreditsTetsujiOhta, - CreditsSato, - CreditsKawachimaru, - }, - { - CreditsGameDesigners, - CreditsShimoyamada, - CreditsOhmori, - CreditsTakahashi, - _, - }, - { - CreditsPlotScenario, - CreditsMasuda, - CreditsTomisawa, - CreditsNishino, - _, - }, - { - CreditsGameScenario, - CreditsToshinobuMatsumiya, - CreditsTomisawa, - _, - _, - }, - { - CreditsScriptDesigners, - CreditsNohara, - CreditsTetsujiOhta, - CreditsTomomichiOhta, - _, - }, - { - CreditsMapDesigners, - CreditsOhmori, - CreditsTetsujiOhta, - CreditsNishino, - _, - }, - { - CreditsMapDataDesigners, - CreditsTetsujiOhta, - CreditsTakahashi, - _, - _, - }, - { - CreditsParametricDesigners, - CreditsNishino, - CreditsMorimoto, - CreditsTetsujiOhta, - CreditsShimoyamada, - }, - { - _, - CreditsPOKeDEXText, - CreditsMatsushima, - _, - _, - }, - { - CreditsEnvironmentToolProgrammers, - CreditsSogabe, - CreditsTamada, - CreditsHiroyukiNakamura, - CreditsMori, - }, - { - CreditsProductTesting, - CreditsSuperMarioClub, - CreditsTada, - CreditsOhnishi, - CreditsOkamura, - }, - { - CreditsSpecialThanks, - CreditsTominaga, - CreditsYoshiroTajiri, - CreditsSasaki, - _, - }, - { - CreditsSpecialThanks, - CreditsHamano, - CreditsChieMatsumiya, - CreditsShinozaki, - CreditsFujii, - }, - { - CreditsSpecialThanks, - CreditsSuyama, - CreditsMitsuhara, - CreditsKomura, - CreditsOhashi, - }, - { - CreditsSpecialThanks, - CreditsTakizawa, - CreditsTakada, - CreditsKondo, - CreditsMashima, - }, - { - CreditsInformationSupervisors, - CreditsEnomoto, - CreditsTerada, - CreditsSakurai, - CreditsSagawa, - }, - { - CreditsCoordinators, - CreditsKyokoWatanabe, - CreditsNakano, - _, - _, - }, - { - CreditsTaskManagers, - CreditsYamagami, - CreditsNomoto, - _, - _, - }, - { - CreditsProducers, - CreditsJinnai, - CreditsIzushi, - CreditsTsuru, - _, - }, - { - _, - CreditsExecutiveDirector, - CreditsSatoshiTajiri, - _, - _, - }, - { - _, - CreditsExecutiveProducers, - CreditsIwata, - _, - _, - }, - { - _, - CreditsExecutiveProducers, - CreditsIshihara, - _, - _, - }, - { - CreditsEnglishVersionCoordinators, - CreditsHiroNakamura, - CreditsMcMahill, - _, - _, - }, - { - _, - CreditsTranslator, - CreditsOgasawara, - _, - _, - }, - { - CreditsProgrammers, - CreditsMurakawa, - CreditsYamamoto, - CreditsFunakoshi, - CreditsKinashi, - }, - { - CreditsGraphicDesigners, - CreditsYamamoto, - CreditsKinashi, - _, - _, - }, - { - CreditsProductSupport, - CreditsNakamichi, - CreditsHara, - _, - _, - }, - { - _, - CreditsArtwork, - CreditsOkada, - _, - _, - }, - { - _, - CreditsTextEditor, - CreditsLillygren, - _, - _, - }, - { - CreditsNOAProductTesting, - CreditsHertzog, - CreditsRidgeway, - _, - _, - }, - { - CreditsBrailleCodeCheck, - CreditsNFotB, - CreditsMaurer, - CreditsJapanBrailleLibrary, - CreditsEBU, - }, - { - CreditsBrailleCodeCheck, - CreditsABA, - CreditsRNZFotB, - _, - _, - }, - { - CreditsSpecialThanks, - CreditsFord, - CreditsBarlow, - CreditsUesugi, - CreditsUyama, - }, - { - CreditsSpecialThanks, - CreditsHowitt, - CreditsTilden, - CreditsFujihara, - _, - }, + }, + { + _, + CreditsDirector, + CreditsMasuda, + _, + _, + }, + { + _, + CreditsArtDirector, + CreditsSugimori, + _, + _, + }, + { + _, + CreditsBattleDirector, + CreditsMorimoto, + _, + _, + }, + { + _, + CreditsMainProgrammer, + CreditsTetsuyaWatanabe, + _, + _, + }, + { + CreditsBattleSystemProgrammer, + CreditsSogabe, + CreditsFieldSystemProgrammer, + CreditsTamada, + _, + }, + { + CreditsProgrammers, + CreditsMori, + CreditsKagaya, + CreditsMatsuda, + _, + }, + { + CreditsProgrammers, + CreditsHiroyukiNakamura, + CreditsTaya, + CreditsNohara, + _, + }, + { + CreditsProgrammers, + CreditsTomomichiOhta, + CreditsIwasawa, + CreditsTakenoriOhta, + _, + }, + { + _, + CreditsMainGraphicDesigner, + CreditsYoshida, + _, + _, + }, + { + CreditsPOKeMONGraphicDesigners, + CreditsSugimori, + CreditsYoshida, + _, + _, + }, + { + CreditsPOKeMONGraphicDesigners, + CreditsFujiwara, + CreditsSatoshiOhta, + CreditsIwashita, + _, + }, + { + CreditsPOKeMONGraphicDesigners, + CreditsTomita, + CreditsUnno, + CreditsEo, + _, + }, + { + CreditsPOKeMONDesigners, + CreditsMorimoto, + CreditsOkutani, + CreditsNishida, + _, + }, + { + CreditsPOKeMONDesigners, + CreditsSaito, + CreditsYoshikawa, + _, + _, + }, + { + CreditsMusicComposition, + CreditsIchinose, + CreditsAoki, + CreditsMasuda, + _, + }, + { + _, + CreditsSoundEffectsPOKeMONVoices, + CreditsAoki, + _, + _, + }, + { + CreditsGameDesigners, + CreditsMasuda, + CreditsMorimoto, + CreditsNishino, + _, + }, + { + CreditsGameDesigners, + CreditsMatsushima, + CreditsTetsujiOhta, + CreditsSato, + CreditsKawachimaru, + }, + { + CreditsGameDesigners, + CreditsShimoyamada, + CreditsOhmori, + CreditsTakahashi, + _, + }, + { + CreditsPlotScenario, + CreditsMasuda, + CreditsTomisawa, + CreditsNishino, + _, + }, + { + CreditsGameScenario, + CreditsToshinobuMatsumiya, + CreditsTomisawa, + _, + _, + }, + { + CreditsScriptDesigners, + CreditsNohara, + CreditsTetsujiOhta, + CreditsTomomichiOhta, + _, + }, + { + CreditsMapDesigners, + CreditsOhmori, + CreditsTetsujiOhta, + CreditsNishino, + _, + }, + { + CreditsMapDataDesigners, + CreditsTetsujiOhta, + CreditsTakahashi, + _, + _, + }, + { + CreditsParametricDesigners, + CreditsNishino, + CreditsMorimoto, + CreditsTetsujiOhta, + CreditsShimoyamada, + }, + { + _, + CreditsPOKeDEXText, + CreditsMatsushima, + _, + _, + }, + { + CreditsEnvironmentToolProgrammers, + CreditsSogabe, + CreditsTamada, + CreditsHiroyukiNakamura, + CreditsMori, + }, + { + CreditsProductTesting, + CreditsSuperMarioClub, + CreditsTada, + CreditsOhnishi, + CreditsOkamura, + }, + { + CreditsSpecialThanks, + CreditsTominaga, + CreditsYoshiroTajiri, + CreditsSasaki, + _, + }, + { + CreditsSpecialThanks, + CreditsHamano, + CreditsChieMatsumiya, + CreditsShinozaki, + CreditsFujii, + }, + { + CreditsSpecialThanks, + CreditsSuyama, + CreditsMitsuhara, + CreditsKomura, + CreditsOhashi, + }, + { + CreditsSpecialThanks, + CreditsTakizawa, + CreditsTakada, + CreditsKondo, + CreditsMashima, + }, + { + CreditsInformationSupervisors, + CreditsEnomoto, + CreditsTerada, + CreditsSakurai, + CreditsSagawa, + }, + { + CreditsCoordinators, + CreditsKyokoWatanabe, + CreditsNakano, + _, + _, + }, + { + CreditsTaskManagers, + CreditsYamagami, + CreditsNomoto, + _, + _, + }, + { + CreditsProducers, + CreditsJinnai, + CreditsIzushi, + CreditsTsuru, + _, + }, + { + _, + CreditsExecutiveDirector, + CreditsSatoshiTajiri, + _, + _, + }, + { + _, + CreditsExecutiveProducers, + CreditsIwata, + _, + _, + }, + { + _, + CreditsExecutiveProducers, + CreditsIshihara, + _, + _, + }, + { + CreditsEnglishVersionCoordinators, + CreditsHiroNakamura, + CreditsMcMahill, + _, + _, + }, + { + _, + CreditsTranslator, + CreditsOgasawara, + _, + _, + }, + { + CreditsProgrammers, + CreditsMurakawa, + CreditsYamamoto, + CreditsFunakoshi, + CreditsKinashi, + }, + { + CreditsGraphicDesigners, + CreditsYamamoto, + CreditsKinashi, + _, + _, + }, + { + CreditsProductSupport, + CreditsNakamichi, + CreditsHara, + _, + _, + }, + { + _, + CreditsArtwork, + CreditsOkada, + _, + _, + }, + { + _, + CreditsTextEditor, + CreditsLillygren, + _, + _, + }, + { + CreditsNOAProductTesting, + CreditsHertzog, + CreditsRidgeway, + _, + _, + }, + { + CreditsBrailleCodeCheck, + CreditsNFotB, + CreditsMaurer, + CreditsJapanBrailleLibrary, + CreditsEBU, + }, + { + CreditsBrailleCodeCheck, + CreditsABA, + CreditsRNZFotB, + _, + _, + }, + { + CreditsSpecialThanks, + CreditsFord, + CreditsBarlow, + CreditsUesugi, + CreditsUyama, + }, + { + CreditsSpecialThanks, + CreditsHowitt, + CreditsTilden, + CreditsFujihara, + _, + }, }; #undef _ diff --git a/src/scene/credits.c b/src/scene/credits.c index 84b3b5faa..3e7247d39 100644 --- a/src/scene/credits.c +++ b/src/scene/credits.c @@ -246,7 +246,7 @@ const u8 gUnknown_0840B878[] = }; #ifdef GERMAN -#include "../data/credits_en.h" // TODO, german credits +#include "../data/credits_de.h" // TODO, german credits #else #include "../data/credits_en.h" #endif -- cgit v1.2.3 From 531c8d8fd17b1927e9764d230458878b9eff3d52 Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Sat, 11 Nov 2017 01:01:03 -0500 Subject: eliminate remaining RAM pointers in asm/ --- src/scene/credits.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/scene/credits.c b/src/scene/credits.c index 3e7247d39..077fc5e0d 100644 --- a/src/scene/credits.c +++ b/src/scene/credits.c @@ -246,7 +246,7 @@ const u8 gUnknown_0840B878[] = }; #ifdef GERMAN -#include "../data/credits_de.h" // TODO, german credits +#include "../data/credits_de.h" #else #include "../data/credits_en.h" #endif -- cgit v1.2.3 From 955c5a8e90c9afba35114c583628f74f849a0da4 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Mon, 6 Nov 2017 22:30:13 -0800 Subject: More pokenav decomp --- src/field/region_map.c | 168 ++--- src/pokenav_before.c | 1857 +++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 1932 insertions(+), 93 deletions(-) (limited to 'src') diff --git a/src/field/region_map.c b/src/field/region_map.c index bfd2729c2..daf0501f7 100644 --- a/src/field/region_map.c +++ b/src/field/region_map.c @@ -336,9 +336,9 @@ bool8 sub_80FA940(void) InitializeCursorPosition(); gRegionMap->unk74 = gRegionMap->cursorPosX; gRegionMap->unk76 = gRegionMap->cursorPosY; - gRegionMap->unk16 = sub_80FB758(gRegionMap->mapSecId); - gRegionMap->mapSecId = sub_80FB9C0(gRegionMap->mapSecId); - GetMapSectionName(gRegionMap->mapSecName, gRegionMap->mapSecId, 16); + gRegionMap->unk16 = sub_80FB758(gRegionMap->mapSectionId); + gRegionMap->mapSectionId = sub_80FB9C0(gRegionMap->mapSectionId); + GetMapSectionName(gRegionMap->mapSectionName, gRegionMap->mapSectionId, 16); break; case 6: if (gRegionMap->zoomed == FALSE) @@ -433,7 +433,7 @@ static u8 sub_80FAB78(void) static u8 _swiopen(void) { - u16 mapSecId; + u16 mapSectionId; if (gRegionMap->unk7A != 0) return INPUT_EVENT_2; @@ -450,12 +450,12 @@ static u8 _swiopen(void) if (gRegionMap->cursorDeltaY < 0) gRegionMap->cursorPosY--; - mapSecId = GetRegionMapSectionAt(gRegionMap->cursorPosX, gRegionMap->cursorPosY); - gRegionMap->unk16 = sub_80FB758(mapSecId); - if (mapSecId != gRegionMap->mapSecId) + mapSectionId = GetRegionMapSectionAt(gRegionMap->cursorPosX, gRegionMap->cursorPosY); + gRegionMap->unk16 = sub_80FB758(mapSectionId); + if (mapSectionId != gRegionMap->mapSectionId) { - gRegionMap->mapSecId = mapSecId; - GetMapSectionName(gRegionMap->mapSecName, gRegionMap->mapSecId, 16); + gRegionMap->mapSectionId = mapSectionId; + GetMapSectionName(gRegionMap->mapSectionName, gRegionMap->mapSectionId, 16); } sub_80FBA18(); gRegionMap->inputCallback = sub_80FAB78; @@ -515,16 +515,16 @@ static u8 sub_80FADE4(void) if (r3 != gRegionMap->unk64 || r1 != gRegionMap->unk66) { - u16 mapSecId; + u16 mapSectionId; gRegionMap->unk64 = r3; gRegionMap->unk66 = r1; - mapSecId = GetRegionMapSectionAt(r3, r1); - gRegionMap->unk16 = sub_80FB758(mapSecId); - if (mapSecId != gRegionMap->mapSecId) + mapSectionId = GetRegionMapSectionAt(r3, r1); + gRegionMap->unk16 = sub_80FB758(mapSectionId); + if (mapSectionId != gRegionMap->mapSectionId) { - gRegionMap->mapSecId = mapSecId; - GetMapSectionName(gRegionMap->mapSecName, gRegionMap->mapSecId, 16); + gRegionMap->mapSectionId = mapSectionId; + GetMapSectionName(gRegionMap->mapSectionName, gRegionMap->mapSectionId, 16); } sub_80FBA18(); } @@ -722,19 +722,19 @@ static void InitializeCursorPosition(void) case 2: case 4: case 5: - gRegionMap->mapSecId = gMapHeader.regionMapSectionId; + gRegionMap->mapSectionId = gMapHeader.regionMapSectionId; gRegionMap->playerIsInCave = FALSE; mapWidth = gMapHeader.mapData->width; mapHeight = gMapHeader.mapData->height; x = gSaveBlock1.pos.x; y = gSaveBlock1.pos.y; - if (gRegionMap->mapSecId == MAPSEC_UNDERWATER6) + if (gRegionMap->mapSectionId == MAPSEC_UNDERWATER6) gRegionMap->playerIsInCave = TRUE; break; case 3: case 6: mapHeader = Overworld_GetMapHeaderByGroupAndId(gSaveBlock1.warp4.mapGroup, gSaveBlock1.warp4.mapNum); - gRegionMap->mapSecId = mapHeader->regionMapSectionId; + gRegionMap->mapSectionId = mapHeader->regionMapSectionId; gRegionMap->playerIsInCave = TRUE; mapWidth = mapHeader->mapData->width; mapHeight = mapHeader->mapData->height; @@ -743,7 +743,7 @@ static void InitializeCursorPosition(void) break; case 8: mapHeader = Overworld_GetMapHeaderByGroupAndId(gSaveBlock1.warp2.mapGroup, gSaveBlock1.warp2.mapNum); - gRegionMap->mapSecId = mapHeader->regionMapSectionId; + gRegionMap->mapSectionId = mapHeader->regionMapSectionId; gRegionMap->playerIsInCave = TRUE; mapWidth = mapHeader->mapData->width; mapHeight = mapHeader->mapData->height; @@ -754,8 +754,8 @@ static void InitializeCursorPosition(void) { struct WarpData *r4; - gRegionMap->mapSecId = gMapHeader.regionMapSectionId; - if (gRegionMap->mapSecId != MAPSEC_UNK_0x57) + gRegionMap->mapSectionId = gMapHeader.regionMapSectionId; + if (gRegionMap->mapSectionId != MAPSEC_UNK_0x57) { r4 = &gSaveBlock1.warp4; mapHeader = Overworld_GetMapHeaderByGroupAndId(r4->mapGroup, r4->mapNum); @@ -764,7 +764,7 @@ static void InitializeCursorPosition(void) { r4 = &gSaveBlock1.warp2; mapHeader = Overworld_GetMapHeaderByGroupAndId(r4->mapGroup, r4->mapNum); - gRegionMap->mapSecId = mapHeader->regionMapSectionId; + gRegionMap->mapSectionId = mapHeader->regionMapSectionId; } gRegionMap->playerIsInCave = FALSE; mapWidth = mapHeader->mapData->width; @@ -777,21 +777,21 @@ static void InitializeCursorPosition(void) r9 = x; - r1 = mapWidth / gRegionMapLocations[gRegionMap->mapSecId].width; + r1 = mapWidth / gRegionMapLocations[gRegionMap->mapSectionId].width; if (r1 == 0) r1 = 1; x /= r1; - if (x >= gRegionMapLocations[gRegionMap->mapSecId].width) - x = gRegionMapLocations[gRegionMap->mapSecId].width - 1; + if (x >= gRegionMapLocations[gRegionMap->mapSectionId].width) + x = gRegionMapLocations[gRegionMap->mapSectionId].width - 1; - r1 = mapHeight / gRegionMapLocations[gRegionMap->mapSecId].height; + r1 = mapHeight / gRegionMapLocations[gRegionMap->mapSectionId].height; if (r1 == 0) r1 = 1; y /= r1; - if (y >= gRegionMapLocations[gRegionMap->mapSecId].height) - y = gRegionMapLocations[gRegionMap->mapSecId].height - 1; + if (y >= gRegionMapLocations[gRegionMap->mapSectionId].height) + y = gRegionMapLocations[gRegionMap->mapSectionId].height - 1; - switch (gRegionMap->mapSecId) + switch (gRegionMap->mapSectionId) { case MAPSEC_ROUTE_114: if (y != 0) @@ -820,8 +820,8 @@ static void InitializeCursorPosition(void) x++; break; } - gRegionMap->cursorPosX = gRegionMapLocations[gRegionMap->mapSecId].x + x + MAPCURSOR_X_MIN; - gRegionMap->cursorPosY = gRegionMapLocations[gRegionMap->mapSecId].y + y + MAPCURSOR_Y_MIN; + gRegionMap->cursorPosX = gRegionMapLocations[gRegionMap->mapSectionId].x + x + MAPCURSOR_X_MIN; + gRegionMap->cursorPosY = gRegionMapLocations[gRegionMap->mapSectionId].y + y + MAPCURSOR_Y_MIN; } static void sub_80FB600(void) @@ -836,16 +836,16 @@ static void sub_80FB600(void) switch (GetSSTidalLocation(&mapGroup, &mapNum, &sp2, &sp4)) { case 1: - gRegionMap->mapSecId = MAPSEC_SLATEPORT_CITY; + gRegionMap->mapSectionId = MAPSEC_SLATEPORT_CITY; break; case 2: - gRegionMap->mapSecId = MAPSEC_LILYCOVE_CITY; + gRegionMap->mapSectionId = MAPSEC_LILYCOVE_CITY; break; case 3: - gRegionMap->mapSecId = MAPSEC_ROUTE_124; + gRegionMap->mapSectionId = MAPSEC_ROUTE_124; break; case 4: - gRegionMap->mapSecId = MAPSEC_ROUTE_131; + gRegionMap->mapSectionId = MAPSEC_ROUTE_131; break; default: case 0: @@ -853,31 +853,31 @@ static void sub_80FB600(void) struct MapHeader *mapHeader = Overworld_GetMapHeaderByGroupAndId(mapGroup, mapNum); u16 r1; - gRegionMap->mapSecId = mapHeader->regionMapSectionId; - r1 = mapHeader->mapData->width / gRegionMapLocations[gRegionMap->mapSecId].width; + gRegionMap->mapSectionId = mapHeader->regionMapSectionId; + r1 = mapHeader->mapData->width / gRegionMapLocations[gRegionMap->mapSectionId].width; if (r1 == 0) r1 = 1; x = sp2 / r1; - if (x >= gRegionMapLocations[gRegionMap->mapSecId].width) - x = gRegionMapLocations[gRegionMap->mapSecId].width - 1; + if (x >= gRegionMapLocations[gRegionMap->mapSectionId].width) + x = gRegionMapLocations[gRegionMap->mapSectionId].width - 1; - r1 = mapHeader->mapData->height / gRegionMapLocations[gRegionMap->mapSecId].height; + r1 = mapHeader->mapData->height / gRegionMapLocations[gRegionMap->mapSectionId].height; if (r1 == 0) r1 = 1; y = sp4 / r1; - if (y >= gRegionMapLocations[gRegionMap->mapSecId].height) - y = gRegionMapLocations[gRegionMap->mapSecId].height - 1; + if (y >= gRegionMapLocations[gRegionMap->mapSectionId].height) + y = gRegionMapLocations[gRegionMap->mapSectionId].height - 1; } break; } gRegionMap->playerIsInCave = FALSE; - gRegionMap->cursorPosX = gRegionMapLocations[gRegionMap->mapSecId].x + x + MAPCURSOR_X_MIN; - gRegionMap->cursorPosY = gRegionMapLocations[gRegionMap->mapSecId].y + y + MAPCURSOR_Y_MIN; + gRegionMap->cursorPosX = gRegionMapLocations[gRegionMap->mapSectionId].x + x + MAPCURSOR_X_MIN; + gRegionMap->cursorPosY = gRegionMapLocations[gRegionMap->mapSectionId].y + y + MAPCURSOR_Y_MIN; } -static u16 sub_80FB758(u16 mapSecId) +static u16 sub_80FB758(u16 mapSectionId) { - switch (mapSecId) + switch (mapSectionId) { case MAPSEC_NONE: return 0; @@ -928,21 +928,21 @@ u16 GetRegionMapSectionAt_(u16 x, u16 y) return GetRegionMapSectionAt(x, y); } -static u16 sub_80FB9C0(u16 mapSecId) +static u16 sub_80FB9C0(u16 mapSectionId) { u16 i; for (i = 0; gUnknown_083E7684[i][0] != MAPSEC_NONE; i++) { - if (gUnknown_083E7684[i][0] == mapSecId) + if (gUnknown_083E7684[i][0] == mapSectionId) return gUnknown_083E7684[i][1]; } - return mapSecId; + return mapSectionId; } -u16 sub_80FBA04(u16 mapSecId) +u16 sub_80FBA04(u16 mapSectionId) { - return sub_80FB9C0(mapSecId); + return sub_80FB9C0(mapSectionId); } static void sub_80FBA18(void) @@ -951,7 +951,7 @@ static void sub_80FBA18(void) u16 y; u16 i; - if (gRegionMap->mapSecId == MAPSEC_NONE) + if (gRegionMap->mapSectionId == MAPSEC_NONE) { gRegionMap->everGrandeCityArea = 0; return; @@ -986,7 +986,7 @@ static void sub_80FBA18(void) else { x--; - if (GetRegionMapSectionAt(x, y) == gRegionMap->mapSecId) + if (GetRegionMapSectionAt(x, y) == gRegionMap->mapSectionId) i++; } } @@ -1005,7 +1005,7 @@ static bool8 sub_80FBAA0(u16 a) for (x = MAPCURSOR_X_MIN; x <= MAPCURSOR_X_MAX; x++) { - if (GetRegionMapSectionAt(x, y) == gRegionMap->mapSecId) + if (GetRegionMapSectionAt(x, y) == gRegionMap->mapSectionId) return TRUE; } return FALSE; @@ -1302,44 +1302,44 @@ void sub_80FBF94(void) gRegionMap->blinkPlayerIcon = TRUE; } -const u8 *GetMapSectionName(u8 *dest, u16 mapSecId, u16 length) +const u8 *GetMapSectionName(u8 *dest, u16 mapSectionId, u16 length) { - if (mapSecId == MAPSEC_SECRET_BASE) + if (mapSectionId == MAPSEC_SECRET_BASE) return GetSecretBaseMapName(dest); - if (mapSecId < MAPSEC_NONE) - return StringCopy(dest, gRegionMapLocations[mapSecId].regionMapSectionId); + if (mapSectionId < MAPSEC_NONE) + return StringCopy(dest, gRegionMapLocations[mapSectionId].regionMapSectionId); if (length == 0) length = 18; return StringFill(dest, CHAR_SPACE, length); } -const u8 *CopyMapName(u8 *dest, u16 mapSecId) +const u8 *CopyMapName(u8 *dest, u16 mapSectionId) { - switch (mapSecId) + switch (mapSectionId) { case MAPSEC_UNK_0x57: return StringCopy(dest, gOtherText_Ferry); case MAPSEC_SECRET_BASE: return StringCopy(dest, gOtherText_SecretBase); default: - return GetMapSectionName(dest, mapSecId, 0); + return GetMapSectionName(dest, mapSectionId, 0); } } -const u8 *CopyLocationName(u8 *dest, u16 mapSecId) +const u8 *CopyLocationName(u8 *dest, u16 mapSectionId) { - if (mapSecId == MAPSEC_EVIL_TEAM_HIDEOUT) + if (mapSectionId == MAPSEC_EVIL_TEAM_HIDEOUT) return StringCopy(dest, gOtherText_Hideout); else - return CopyMapName(dest, mapSecId); + return CopyMapName(dest, mapSectionId); } -static void GetRegionMapLocationPosition(u16 mapSecId, u16 *x, u16 *y, u16 *width, u16 *height) +static void GetRegionMapLocationPosition(u16 mapSectionId, u16 *x, u16 *y, u16 *width, u16 *height) { - *x = gRegionMapLocations[mapSecId].x; - *y = gRegionMapLocations[mapSecId].y; - *width = gRegionMapLocations[mapSecId].width; - *height = gRegionMapLocations[mapSecId].height; + *x = gRegionMapLocations[mapSectionId].x; + *y = gRegionMapLocations[mapSectionId].y; + *width = gRegionMapLocations[mapSectionId].width; + *height = gRegionMapLocations[mapSectionId].height; } struct UnknownStruct3 @@ -1419,7 +1419,7 @@ static const u8 sUnknown_083E7920[][3] = struct UnknownStruct4 { const u8 *const *unk0; - u16 mapSecId; + u16 mapSectionId; u16 flag; }; @@ -1438,7 +1438,7 @@ static const struct SpritePalette sFlyTargetIconSpritePalette = {sFlyTargetIcons // Fly targets that are not cities or towns static const u16 sSpecialFlyAreas[][2] = { - // flag, mapSecId + // flag, mapSectionId {0x848, MAPSEC_BATTLE_TOWER}, {0xFFFF, MAPSEC_NONE}, }; @@ -1555,7 +1555,7 @@ void CB2_InitFlyRegionMap(void) InitRegionMap(&ewram0.regionMap, 0); CreateRegionMapCursor(0, 0); CreateRegionMapPlayerIcon(1, 1); - ewram0.unk6 = ewram0.regionMap.mapSecId; + ewram0.unk6 = ewram0.regionMap.mapSectionId; StringFill(ewramBlankMapName, CHAR_SPACE, 12); PrintFlyTargetName(); break; @@ -1620,12 +1620,12 @@ static void PrintFlyTargetName(void) { const struct UnknownStruct4 *r4 = &sUnknown_083E79C0[i]; - if (ewram0.regionMap.mapSecId == r4->mapSecId) + if (ewram0.regionMap.mapSectionId == r4->mapSectionId) { if (FlagGet(r4->flag)) { MenuDrawTextWindow(16, 14, 29, 19); - MenuPrint(ewram0.regionMap.mapSecName, 17, 15); + MenuPrint(ewram0.regionMap.mapSectionName, 17, 15); MenuPrint_RightAligned(r4->unk0[ewram0.regionMap.everGrandeCityArea], 29, 17); return; } @@ -1637,7 +1637,7 @@ static void PrintFlyTargetName(void) if (zero == 0) { MenuDrawTextWindow(16, 16, 29, 19); - MenuPrint(ewram0.regionMap.mapSecName, 17, 17); + MenuPrint(ewram0.regionMap.mapSectionName, 17, 17); MenuZeroFillWindowRect(16, 14, 29, 15); } } @@ -1717,10 +1717,10 @@ static void CreateSpecialAreaFlyTargetIcons(void) if (FlagGet(sSpecialFlyAreas[i][0])) { - u16 mapSecId = sSpecialFlyAreas[i][1]; + u16 mapSectionId = sSpecialFlyAreas[i][1]; u8 spriteId; - GetRegionMapLocationPosition(mapSecId, &x, &y, &width, &height); + GetRegionMapLocationPosition(mapSectionId, &x, &y, &width, &height); x = (x + 1) * 8; y = (y + 2) * 8; spriteId = CreateSprite(&gFlyTargetSpriteTemplate, x, y, 10); @@ -1729,7 +1729,7 @@ static void CreateSpecialAreaFlyTargetIcons(void) gSprites[spriteId].oam.size = 1; gSprites[spriteId].callback = SpriteCB_FlyTargetIcons; StartSpriteAnim(&gSprites[spriteId], 6); - gSprites[spriteId].data0 = mapSecId; + gSprites[spriteId].data0 = mapSectionId; } } } @@ -1737,8 +1737,8 @@ static void CreateSpecialAreaFlyTargetIcons(void) static void SpriteCB_FlyTargetIcons(struct Sprite *sprite) { - // Blink if our mapSecId is the one selected on the map - if (ewram0.regionMap.mapSecId == sprite->data0) + // Blink if our mapSectionId is the one selected on the map + if (ewram0.regionMap.mapSectionId == sprite->data0) { // Toggle visibility every 16 frames sprite->data1++; @@ -1815,7 +1815,7 @@ static void sub_80FC69C(void) FreeRegionMapIconResources(); if (ewramA6E != 0) { - switch (ewram0.regionMap.mapSecId) + switch (ewram0.regionMap.mapSectionId) { case MAPSEC_SOUTHERN_ISLAND: sub_8053538(22); @@ -1830,10 +1830,10 @@ static void sub_80FC69C(void) sub_8053538((FlagGet(0x854) && ewram0.regionMap.everGrandeCityArea == 0) ? 20 : 11); break; default: - if (sUnknown_083E7920[ewram0.regionMap.mapSecId][2] != 0) - sub_8053538(sUnknown_083E7920[ewram0.regionMap.mapSecId][2]); + if (sUnknown_083E7920[ewram0.regionMap.mapSectionId][2] != 0) + sub_8053538(sUnknown_083E7920[ewram0.regionMap.mapSectionId][2]); else - warp1_set_2(sUnknown_083E7920[ewram0.regionMap.mapSecId][0], sUnknown_083E7920[ewram0.regionMap.mapSecId][1], -1); + warp1_set_2(sUnknown_083E7920[ewram0.regionMap.mapSectionId][0], sUnknown_083E7920[ewram0.regionMap.mapSectionId][1], -1); break; } sub_80865BC(); diff --git a/src/pokenav_before.c b/src/pokenav_before.c index 67578f9a1..db9de522a 100644 --- a/src/pokenav_before.c +++ b/src/pokenav_before.c @@ -4,6 +4,8 @@ #include "battle.h" #include "data2.h" #include "de_rom_8040FE0.h" +#include "landmark.h" +#include "link.h" #include "menu.h" #include "overworld.h" #include "string_util.h" @@ -89,6 +91,31 @@ struct UnknownPokenav0_1 { IWRAM_DATA void (*gUnknown_03000744)(void); +extern const u8 gUnknown_083E0314[]; +extern const u16 gUnknown_08E9F9E8[]; +extern const u16 gUnknown_083E0274[]; +extern const u8 gUnknown_08E9FC64[]; +extern const u8 gUnknown_083E0354[]; +extern const u8 gUnknown_08E9FD64[]; +extern const u8 gUnknown_08E9FE54[]; +extern const u8 gUnknown_08E9FD1C[]; +extern const u16 gPokenavConditionSearch2_Pal[]; +extern const u8 gUnknown_083E0334[]; +extern const u16 gUnknown_083E02B4[]; +extern const u8 gPokenavConditionSearch2_Gfx[]; +extern const u8 gUnknownPalette_81E6692[]; +extern const u8 gUnknown_083E0254[]; +extern const u8 gUnknown_08E9FEB4[]; +extern const u8 gUnknown_083E01AC[]; +extern const u8 gUnknown_08E9AC4C[]; +extern const u8 gPokenavConditionMenu2_Pal[]; +extern const u8 gPokenavConditionView_Gfx[]; +extern const u8 gUnknown_08E9ABB4[]; +extern const u8 gUnknown_08E9AC2C[]; +extern const u8 *const gPokenavCityMaps[][2]; +extern const u8 gPokenavHoennMapSquares_Pal[]; +extern const u8 gPokenavHoennMapSquares_Gfx[]; +extern const u16 gUnknown_083E003C[]; extern const u8 *const gUnknown_083E31B0[]; extern const u8 *const gUnknown_083E31CC[]; extern const u8 *const gUnknown_083E31D8[]; @@ -144,10 +171,26 @@ static void sub_80EE658(); static void sub_80EE8F4(); static void sub_80EEDC4(); +extern bool8 sub_80F0944(void); +extern void sub_80F081C(); +extern void sub_80F0900(void); +extern void sub_80F443C(u8 *, u16); +extern bool8 sub_80F162C(u8); +extern void sub_80F01E0(u16); +extern void sub_80F01A4(void); +extern void sub_80F1614(void); +extern void sub_80EFD3C(void); +extern void sub_8095C8C(); +extern void sub_80EFDA0(void); +extern void sub_80EFD74(void); +extern void sub_80F1A80(void); +extern bool8 sub_80EFC64(void); +extern void sub_80EFC3C(void); +extern void sub_80EF624(const u16 *, const u16 *, u8, u8, u16 *); extern void sub_80EF7D4(void); extern void sub_80EF54C(u8); extern void sub_809D104(u16 *, u16, u16, const u8 *, u16, u16, u16, u16); -extern void sub_80EF58C(u32); +extern void sub_80EF58C(u8); extern void sub_80F6FFC(); extern void sub_80F3294(); extern void sub_80F0B24(); @@ -200,23 +243,23 @@ extern bool8 sub_80F0718(); extern bool8 sub_80F3264(); extern void sub_80F4D44(); extern bool8 sub_80F4D88(); -extern void sub_80F0264(); +extern void sub_80F0264(u8); extern bool8 sub_80F02A0(); extern void sub_80F3008(); extern void sub_80F3130(); extern void sub_80F2D6C(u32); extern bool8 sub_80F1E6C(); -extern void sub_80EF9F8(); -extern bool8 sub_80EFBDC(u32); -extern void sub_80EFBB0(); +extern void sub_80EF9F8(void); +extern bool8 sub_80EFBDC(bool8); +extern void sub_80EFBB0(void); extern void sub_80F2DF4(); extern void sub_80F1E84(); extern bool8 sub_80F1F10(); extern void sub_80EEFBC(u8); extern void sub_80F2620(); -extern void sub_80EF814(); -extern void sub_80EF840(); -extern bool8 sub_80EF874(); +extern void sub_80EF814(void); +extern void sub_80EF840(void); +extern bool8 sub_80EF874(void); extern void sub_80F2DD8(); extern bool8 sub_80F6250(); extern void sub_80F6208(); @@ -248,7 +291,7 @@ extern void sub_80EBD18(); extern void sub_80F1A74(); extern void sub_80F1FF0(); extern void sub_80FB260(); -extern void sub_80EFE7C(); +extern void sub_80EFE7C(void); extern void sub_80F5BF0(); extern void sub_80F6F64(); extern void sub_80F19FC(); @@ -3166,3 +3209,1799 @@ void sub_80EF54C(u8 a) gUnknown_083DFEC4->unkCE4C = a * 30; LoadPalette(&gUnknown_083DFEC4->palettesCE52[gUnknown_083DFEC4->unkCE4C], 0x31, 4); } + +void sub_80EF58C(u8 a) +{ + u16 i; + u16 * palettes; + const u16 *var1; + + switch (a) + { + case 0: + for (i = 0; i < 62; i++) + { + gUnknown_083DFEC4->palettesCE52[i] = 0; + } + break; + case 1: + palettes = gUnknown_083DFEC4->palettesCE52; + var1 = gUnknown_083E003C; + sub_80EF624(&var1[1], &var1[3], 16, 2, palettes); + break; + case 2: + palettes = gUnknown_083DFEC4->palettesCE8E; + var1 = gUnknown_083E003C; + sub_80EF624(&var1[3], &var1[7], 16, 2, palettes); + break; + } +} + +#ifdef NONMATCHING +void sub_80EF624(const u16 *a, const u16 *b, u8 c, u8 d, u16 *palettes) +{ + u16 red1, green1, blue1; + u16 red2, green2, blue2; + s32 redDiv, greenDiv, blueDiv; + u16 *palettes2; + u16 i, j; + + i = 0; + while (i < d) + { + red1 = (*a & 0x1F) << 8; + green1 = ((*a >> 5) & 0x1F) << 8; + blue1 = ((*a >> 10) & 0x1F) << 8; + + red2 = (*b & 0x1F) << 8; + green2 = ((*b >> 5) & 0x1F) << 8; + blue2 = ((*b >> 10) & 0x1F) << 8; + + redDiv = (red2 - red1) / c; + greenDiv = (green2 - green1) / c; + blueDiv = (blue2 - blue1) / c; + + palettes2 = palettes; + for (j = 0; j < c - 1; j++) + { + *palettes2 = (((blue1 << 8) >> 16) << 10) | (((green1 << 8) >> 16) << 5) | ((red1 << 8) >> 16); + palettes2 += d; + red1 += redDiv; + green1 += greenDiv; + blue1 += blueDiv; + } + + *palettes2 = (red2 >> 8) | (blue2 << 2) | (green2 >> 3); + palettes++; + + a++; + b++; + i++; + } +} +#else +__attribute__((naked)) +void sub_80EF624(const u16 *a, const u16 *b, u8 c, u8 d, u16 *palettes) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, 0x38\n\ + str r0, [sp]\n\ + str r1, [sp, 0x4]\n\ + ldr r4, [sp, 0x58]\n\ + lsls r2, 24\n\ + lsrs r2, 24\n\ + str r2, [sp, 0x8]\n\ + lsls r3, 24\n\ + lsrs r3, 24\n\ + str r3, [sp, 0xC]\n\ + movs r0, 0\n\ + str r0, [sp, 0x10]\n\ + lsls r0, r3, 16\n\ + ldr r1, [sp, 0x10]\n\ + cmp r1, r3\n\ + bcs _080EF72E\n\ + subs r2, 0x1\n\ + str r2, [sp, 0x20]\n\ + str r0, [sp, 0x2C]\n\ +_080EF654:\n\ + ldr r2, [sp]\n\ + ldrh r1, [r2]\n\ + movs r0, 0x1F\n\ + ands r0, r1\n\ + lsls r7, r0, 8\n\ + lsls r1, 16\n\ + lsrs r0, r1, 21\n\ + movs r2, 0x1F\n\ + ands r0, r2\n\ + lsls r6, r0, 8\n\ + lsrs r1, 26\n\ + ands r1, r2\n\ + lsls r5, r1, 8\n\ + ldr r0, [sp, 0x4]\n\ + ldrh r1, [r0]\n\ + movs r0, 0x1F\n\ + ands r0, r1\n\ + lsls r0, 8\n\ + str r0, [sp, 0x14]\n\ + lsls r1, 16\n\ + lsrs r0, r1, 21\n\ + ands r0, r2\n\ + lsls r0, 8\n\ + str r0, [sp, 0x18]\n\ + lsrs r1, 26\n\ + ands r1, r2\n\ + lsls r1, 8\n\ + str r1, [sp, 0x1C]\n\ + ldr r1, [sp, 0x14]\n\ + subs r0, r1, r7\n\ + ldr r1, [sp, 0x8]\n\ + bl __divsi3\n\ + mov r10, r0\n\ + ldr r2, [sp, 0x18]\n\ + subs r0, r2, r6\n\ + ldr r1, [sp, 0x8]\n\ + bl __divsi3\n\ + mov r9, r0\n\ + ldr r1, [sp, 0x1C]\n\ + subs r0, r1, r5\n\ + ldr r1, [sp, 0x8]\n\ + bl __divsi3\n\ + mov r8, r0\n\ + adds r3, r4, 0\n\ + movs r4, 0\n\ + ldr r2, [sp]\n\ + adds r2, 0x2\n\ + str r2, [sp, 0x30]\n\ + ldr r0, [sp, 0x4]\n\ + adds r0, 0x2\n\ + str r0, [sp, 0x34]\n\ + adds r1, r3, 0x2\n\ + str r1, [sp, 0x24]\n\ + ldr r2, [sp, 0x10]\n\ + adds r2, 0x1\n\ + str r2, [sp, 0x28]\n\ + ldr r0, [sp, 0x20]\n\ + cmp r4, r0\n\ + bge _080EF700\n\ + ldr r1, [sp, 0xC]\n\ + lsls r1, 1\n\ + mov r12, r1\n\ +_080EF6D6:\n\ + lsls r0, r7, 8\n\ + lsrs r2, r0, 16\n\ + lsls r0, r6, 8\n\ + lsrs r1, r0, 16\n\ + lsls r0, r5, 8\n\ + lsrs r0, 16\n\ + lsls r0, 10\n\ + lsls r1, 5\n\ + orrs r0, r1\n\ + orrs r2, r0\n\ + strh r2, [r3]\n\ + add r3, r12\n\ + add r7, r10\n\ + add r6, r9\n\ + add r5, r8\n\ + adds r0, r4, 0x1\n\ + lsls r0, 16\n\ + lsrs r4, r0, 16\n\ + ldr r2, [sp, 0x20]\n\ + cmp r4, r2\n\ + blt _080EF6D6\n\ +_080EF700:\n\ + ldr r4, [sp, 0x14]\n\ + lsrs r2, r4, 8\n\ + ldr r1, [sp, 0x1C]\n\ + lsls r0, r1, 2\n\ + ldr r4, [sp, 0x18]\n\ + lsrs r1, r4, 3\n\ + orrs r0, r1\n\ + orrs r2, r0\n\ + strh r2, [r3]\n\ + ldr r0, [sp, 0x30]\n\ + str r0, [sp]\n\ + ldr r1, [sp, 0x34]\n\ + str r1, [sp, 0x4]\n\ + ldr r4, [sp, 0x24]\n\ + ldr r2, [sp, 0x28]\n\ + lsls r0, r2, 16\n\ + lsrs r0, 16\n\ + str r0, [sp, 0x10]\n\ + ldr r1, [sp, 0x2C]\n\ + lsrs r0, r1, 16\n\ + ldr r2, [sp, 0x10]\n\ + cmp r2, r0\n\ + bcc _080EF654\n\ +_080EF72E:\n\ + add sp, 0x38\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .syntax divided\n"); +} +#endif // NONMATCHING + +void sub_80EF740(void) +{ + gUnknown_083DFEC4->unk6DA0 = (gUnknown_083DFEC4->unk6DA0 + 1) & 1; + if (gUnknown_083DFEC4->unk6DA0) + { + gUnknown_083DFEC4->unk6DA2++; + } + + REG_BG3HOFS = gUnknown_083DFEC4->unk6DA2; +} + +void sub_80EF780(u8 taskId) +{ + if (gTasks[taskId].data[0] == 0 || (gUnknown_083DFEC4->unk6DA2 & 0x7) != 0) + { + sub_80EF740(); + } + else + { + u16 value = gUnknown_083DFEC4->unk6DA2 & 0x7; + gUnknown_083DFEC4->unk6DA2 = value; + gUnknown_083DFEC4->unk6DA0 = value; + REG_BG3HOFS = value; + } +} + +void sub_80EF7D4(void) +{ + gUnknown_083DFEC4->unk6DA2 = 0; + gUnknown_083DFEC4->unk6DA0 = 0; + gUnknown_083DFEC4->taskId6DA4 = CreateTask(sub_80EF780, 80); +} + +void sub_80EF814(void) +{ + if (FuncIsActiveTask(sub_80EF780)) + { + DestroyTask(gUnknown_083DFEC4->taskId6DA4); + } +} + +void sub_80EF840(void) +{ + gUnknown_083DFEC4->unkD160 = 0; + + if (gUnknown_083DFEC4->unk6DAC == 0) + { + while (sub_80EF874() != 0); + } +} + +// The only non-matching part is the gSaveBlock2.regionMapZoom access. +#ifdef NONMATCHING +bool8 sub_80EF874(void) +{ + switch (gUnknown_083DFEC4->unkD160) + { + case 0: + sub_80EEDE8(); + break; + case 1: + SetUpWindowConfig(&gWindowConfig_81E7224); + break; + case 2: + MultistepInitMenuWindowBegin(&gWindowConfig_81E7224); + break; + case 3: + if (!MultistepInitMenuWindowContinue()) + { + return TRUE; + } + break; + case 4: + MenuZeroFillScreen(); + break; + case 5: + sub_80FA904(&gUnknown_083DFEC4->regionMap, gSaveBlock2.regionMapZoom); + break; + case 6: + if (sub_80FA940()) + { + return TRUE; + } + break; + case 7: + LZ77UnCompVram(gPokenavHoennMapSquares_Gfx, (void *)VRAM + 0x5000); + break; + case 8: + LoadPalette(gPokenavHoennMapSquares_Pal, 0x30, 0x20); + sub_80EFC3C(); + break; + case 9: + if (sub_80EFC64()) + { + return TRUE; + } + break; + case 10: + MenuDrawTextWindow(13, 3, 29, 17); + sub_80EF9F8(); + break; + case 11: + if (!gUnknown_083DFEC4->regionMap.zoomed) + { + gUnknown_083DFEC4->unk7698 = 160; + REG_BG0VOFS = 160; + } + else + { + gUnknown_083DFEC4->unk7698 = 256; + REG_BG0VOFS = 0; + } + + REG_BG0CNT = REG_BG0CNT; + REG_BG0CNT |= 1; + REG_BLDCNT = 0; + break; + default: + return FALSE; + } + + gUnknown_083DFEC4->unkD160++; + return TRUE; +} +#else +asm(".include \"constants/gba_constants.inc\"\n"); + +__attribute__((naked)) +bool8 sub_80EF874(void) +{ + asm(".syntax unified\n\ + push {lr}\n\ + ldr r0, _080EF890 @ =gUnknown_083DFEC4\n\ + ldr r0, [r0]\n\ + ldr r1, _080EF894 @ =0x0000d160\n\ + adds r0, r1\n\ + ldrh r0, [r0]\n\ + cmp r0, 0xB\n\ + bls _080EF886\n\ + b _080EF9D8\n\ +_080EF886:\n\ + lsls r0, 2\n\ + ldr r1, _080EF898 @ =_080EF89C\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + mov pc, r0\n\ + .align 2, 0\n\ +_080EF890: .4byte gUnknown_083DFEC4\n\ +_080EF894: .4byte 0x0000d160\n\ +_080EF898: .4byte _080EF89C\n\ + .align 2, 0\n\ +_080EF89C:\n\ + .4byte _080EF8CC\n\ + .4byte _080EF8D2\n\ + .4byte _080EF8E0\n\ + .4byte _080EF8EC\n\ + .4byte _080EF8F6\n\ + .4byte _080EF8FC\n\ + .4byte _080EF920\n\ + .4byte _080EF92C\n\ + .4byte _080EF940\n\ + .4byte _080EF954\n\ + .4byte _080EF960\n\ + .4byte _080EF972\n\ +_080EF8CC:\n\ + bl sub_80EEDE8\n\ + b _080EF9DC\n\ +_080EF8D2:\n\ + ldr r0, _080EF8DC @ =gWindowConfig_81E7224\n\ + bl SetUpWindowConfig\n\ + b _080EF9DC\n\ + .align 2, 0\n\ +_080EF8DC: .4byte gWindowConfig_81E7224\n\ +_080EF8E0:\n\ + ldr r0, _080EF8E8 @ =gWindowConfig_81E7224\n\ + bl MultistepInitMenuWindowBegin\n\ + b _080EF9DC\n\ + .align 2, 0\n\ +_080EF8E8: .4byte gWindowConfig_81E7224\n\ +_080EF8EC:\n\ + bl MultistepInitMenuWindowContinue\n\ + cmp r0, 0\n\ + bne _080EF9DC\n\ + b _080EF9EA\n\ +_080EF8F6:\n\ + bl MenuZeroFillScreen\n\ + b _080EF9DC\n\ +_080EF8FC:\n\ + ldr r0, _080EF914 @ =gUnknown_083DFEC4\n\ + ldr r0, [r0]\n\ + ldr r2, _080EF918 @ =0x00006e18\n\ + adds r0, r2\n\ + ldr r1, _080EF91C @ =gSaveBlock2\n\ + ldrb r1, [r1, 0x15]\n\ + lsrs r1, 3\n\ + movs r2, 0x1\n\ + ands r1, r2\n\ + bl sub_80FA904\n\ + b _080EF9DC\n\ + .align 2, 0\n\ +_080EF914: .4byte gUnknown_083DFEC4\n\ +_080EF918: .4byte 0x00006e18\n\ +_080EF91C: .4byte gSaveBlock2\n\ +_080EF920:\n\ + bl sub_80FA940\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _080EF9DC\n\ + b _080EF9EA\n\ +_080EF92C:\n\ + ldr r0, _080EF938 @ =gPokenavHoennMapSquares_Gfx\n\ + ldr r1, _080EF93C @ =0x06005000\n\ + bl LZ77UnCompVram\n\ + b _080EF9DC\n\ + .align 2, 0\n\ +_080EF938: .4byte gPokenavHoennMapSquares_Gfx\n\ +_080EF93C: .4byte 0x06005000\n\ +_080EF940:\n\ + ldr r0, _080EF950 @ =gPokenavHoennMapSquares_Pal\n\ + movs r1, 0x30\n\ + movs r2, 0x20\n\ + bl LoadPalette\n\ + bl sub_80EFC3C\n\ + b _080EF9DC\n\ + .align 2, 0\n\ +_080EF950: .4byte gPokenavHoennMapSquares_Pal\n\ +_080EF954:\n\ + bl sub_80EFC64\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _080EF9DC\n\ + b _080EF9EA\n\ +_080EF960:\n\ + movs r0, 0xD\n\ + movs r1, 0x3\n\ + movs r2, 0x1D\n\ + movs r3, 0x11\n\ + bl MenuDrawTextWindow\n\ + bl sub_80EF9F8\n\ + b _080EF9DC\n\ +_080EF972:\n\ + ldr r0, _080EF990 @ =gUnknown_083DFEC4\n\ + ldr r1, [r0]\n\ + ldr r2, _080EF994 @ =0x00006e90\n\ + adds r0, r1, r2\n\ + ldrb r0, [r0]\n\ + cmp r0, 0\n\ + bne _080EF9A0\n\ + ldr r2, _080EF998 @ =0x00007698\n\ + adds r0, r1, r2\n\ + movs r1, 0xA0\n\ + strh r1, [r0]\n\ + ldr r0, _080EF99C @ =REG_BG0VOFS\n\ + strh r1, [r0]\n\ + b _080EF9B0\n\ + .align 2, 0\n\ +_080EF990: .4byte gUnknown_083DFEC4\n\ +_080EF994: .4byte 0x00006e90\n\ +_080EF998: .4byte 0x00007698\n\ +_080EF99C: .4byte REG_BG0VOFS\n\ +_080EF9A0:\n\ + ldr r0, _080EF9C8 @ =0x00007698\n\ + adds r1, r0\n\ + movs r2, 0\n\ + movs r0, 0x80\n\ + lsls r0, 1\n\ + strh r0, [r1]\n\ + ldr r0, _080EF9CC @ =REG_BG0VOFS\n\ + strh r2, [r0]\n\ +_080EF9B0:\n\ + ldr r2, _080EF9D0 @ =REG_BG0CNT\n\ + ldrh r0, [r2]\n\ + strh r0, [r2]\n\ + ldrh r0, [r2]\n\ + movs r1, 0x1\n\ + orrs r0, r1\n\ + strh r0, [r2]\n\ + ldr r1, _080EF9D4 @ =REG_BLDCNT\n\ + movs r0, 0\n\ + strh r0, [r1]\n\ + b _080EF9DC\n\ + .align 2, 0\n\ +_080EF9C8: .4byte 0x00007698\n\ +_080EF9CC: .4byte REG_BG0VOFS\n\ +_080EF9D0: .4byte REG_BG0CNT\n\ +_080EF9D4: .4byte REG_BLDCNT\n\ +_080EF9D8:\n\ + movs r0, 0\n\ + b _080EF9EC\n\ +_080EF9DC:\n\ + ldr r0, _080EF9F0 @ =gUnknown_083DFEC4\n\ + ldr r1, [r0]\n\ + ldr r2, _080EF9F4 @ =0x0000d160\n\ + adds r1, r2\n\ + ldrh r0, [r1]\n\ + adds r0, 0x1\n\ + strh r0, [r1]\n\ +_080EF9EA:\n\ + movs r0, 0x1\n\ +_080EF9EC:\n\ + pop {r1}\n\ + bx r1\n\ + .align 2, 0\n\ +_080EF9F0: .4byte gUnknown_083DFEC4\n\ +_080EF9F4: .4byte 0x0000d160\n\ + .syntax divided\n"); +} +#endif // NONMATCHING + +#ifdef NONMATCHING +void sub_80EF9F8(void) +{ + s32 zero; + u16 i; + u8 *mapSectionName; + u32 offset; + u16 mapSectionId; + u8 b; + u8 **pointer; + u16 var1 = 4; + + + switch (gUnknown_083DFEC4->regionMap.unk16) + { + case 1: + case 4: + sub_8072A18(gUnknown_083DFEC4->regionMap.mapSectionName, 0x70, var1 * 8, 0x78, 1); + var1 += 2; + + if (gLinkOpen == TRUE) + { + sub_80F1A80(); + } + else + { + i = 0; + while (i < 4 && (mapSectionName = GetLandmarkName(gUnknown_083DFEC4->regionMap.mapSectionId, gUnknown_083DFEC4->regionMap.everGrandeCityArea, i)) != NULL) + { + sub_8072A18(mapSectionName, 0x70, var1 * 8, 0x78, 1); + var1 += 2; + i++; + } + + // This check is always true, but somehow the compiler still performed it. + asm("mov %0, #0\n":"=r"(zero)); // zero = 0 + if (!zero && var1 < 16) + { + MenuFillWindowRectWithBlankTile(14, var1, 28, 15); + } + } + break; + case 2: + sub_8072A18(gUnknown_083DFEC4->regionMap.mapSectionName, 0x70, var1 * 8, 0x78, 1); + var1 += 2; + + mapSectionId = gUnknown_083DFEC4->regionMap.mapSectionId; + b = gUnknown_083DFEC4->regionMap.everGrandeCityArea; + offset = (b << 2) + (mapSectionId << 3); + pointer = (u8 **)((u8 *)&gUnknown_083DFEC4->unkCDCC + offset); + if (*pointer != NULL) + { + MenuFillWindowRectWithBlankTile(14, var1, 15, 15); + MenuFillWindowRectWithBlankTile(26, var1, 28, 15); + + sub_8095C8C((void *)VRAM + 0xF800, 16, 6, *pointer, 0, 0, 10, 10, 10); + + var1 += 11; + } + + // This check is always true, but somehow the compiler still performed it. + asm("mov %0, #0\n":"=r"(zero)); // zero = 0 + if (!zero && var1 < 16) + { + MenuFillWindowRectWithBlankTile(14, var1, 28, 15); + } + break; + case 3: + sub_8072A18(gUnknown_083DFEC4->regionMap.mapSectionName, 0x70, var1 * 8, 0x78, 1); + var1 += 2; + + // This check is always true, but somehow the compiler still performed it. + asm("mov %0, #0\n":"=r"(zero)); // zero = 0 + if (!zero && var1 < 16) + { + MenuFillWindowRectWithBlankTile(14, var1, 28, 15); + } + break; + case 0: + default: + // This check is always true, but somehow the compiler still performed it. + asm("mov %0, #0\n":"=r"(zero)); // zero = 0 + if (!zero && var1 < 16) + { + MenuFillWindowRectWithBlankTile(14, var1, 28, 15); + } + break; + } + + if (gUnknown_083DFEC4->regionMap.unk16 == 2) + { + sub_80EFD74(); + } + else + { + sub_80EFDA0(); + } +} +#else +__attribute__((naked)) +void sub_80EF9F8(void) +{ + asm(".syntax unified\n\ + push {r4-r6,lr}\n\ + sub sp, 0x14\n\ + movs r5, 0x4\n\ + ldr r0, _080EFA18 @ =gUnknown_083DFEC4\n\ + ldr r0, [r0]\n\ + ldr r1, _080EFA1C @ =0x00006e2e\n\ + adds r0, r1\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x4\n\ + bls _080EFA0E\n\ + b _080EFB6A\n\ +_080EFA0E:\n\ + lsls r0, 2\n\ + ldr r1, _080EFA20 @ =_080EFA24\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + mov pc, r0\n\ + .align 2, 0\n\ +_080EFA18: .4byte gUnknown_083DFEC4\n\ +_080EFA1C: .4byte 0x00006e2e\n\ +_080EFA20: .4byte _080EFA24\n\ + .align 2, 0\n\ +_080EFA24:\n\ + .4byte _080EFB6A\n\ + .4byte _080EFA38\n\ + .4byte _080EFAC0\n\ + .4byte _080EFB4C\n\ + .4byte _080EFA38\n\ +_080EFA38:\n\ + ldr r0, _080EFA64 @ =gUnknown_083DFEC4\n\ + ldr r0, [r0]\n\ + ldr r2, _080EFA68 @ =0x00006e18\n\ + adds r0, r2\n\ + lsls r2, r5, 19\n\ + lsrs r2, 16\n\ + movs r1, 0x1\n\ + str r1, [sp]\n\ + movs r1, 0x70\n\ + movs r3, 0x78\n\ + bl sub_8072A18\n\ + adds r0, r5, 0x2\n\ + lsls r0, 16\n\ + lsrs r5, r0, 16\n\ + ldr r0, _080EFA6C @ =gLinkOpen\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x1\n\ + bne _080EFA70\n\ + bl sub_80F1A80\n\ + b _080EFB82\n\ + .align 2, 0\n\ +_080EFA64: .4byte gUnknown_083DFEC4\n\ +_080EFA68: .4byte 0x00006e18\n\ +_080EFA6C: .4byte gLinkOpen\n\ +_080EFA70:\n\ + movs r4, 0\n\ + b _080EFA92\n\ +_080EFA74:\n\ + lsls r2, r5, 19\n\ + lsrs r2, 16\n\ + movs r0, 0x1\n\ + str r0, [sp]\n\ + adds r0, r1, 0\n\ + movs r1, 0x70\n\ + movs r3, 0x78\n\ + bl sub_8072A18\n\ + adds r0, r5, 0x2\n\ + lsls r0, 16\n\ + lsrs r5, r0, 16\n\ + adds r0, r4, 0x1\n\ + lsls r0, 16\n\ + lsrs r4, r0, 16\n\ +_080EFA92:\n\ + cmp r4, 0x3\n\ + bhi _080EFB6A\n\ + ldr r0, _080EFAB8 @ =gUnknown_083DFEC4\n\ + ldr r1, [r0]\n\ + ldr r2, _080EFABC @ =0x00006e2c\n\ + adds r0, r1, r2\n\ + ldrb r0, [r0]\n\ + adds r2, 0x3\n\ + adds r1, r2\n\ + ldrb r1, [r1]\n\ + lsls r2, r4, 24\n\ + lsrs r2, 24\n\ + bl GetLandmarkName\n\ + adds r1, r0, 0\n\ + cmp r1, 0\n\ + bne _080EFA74\n\ + b _080EFB6A\n\ + .align 2, 0\n\ +_080EFAB8: .4byte gUnknown_083DFEC4\n\ +_080EFABC: .4byte 0x00006e2c\n\ +_080EFAC0:\n\ + ldr r0, _080EFB38 @ =gUnknown_083DFEC4\n\ + ldr r4, [r0]\n\ + ldr r1, _080EFB3C @ =0x00006e18\n\ + adds r0, r4, r1\n\ + lsls r2, r5, 19\n\ + lsrs r2, 16\n\ + movs r1, 0x1\n\ + str r1, [sp]\n\ + movs r1, 0x70\n\ + movs r3, 0x78\n\ + bl sub_8072A18\n\ + adds r0, r5, 0x2\n\ + lsls r0, 16\n\ + lsrs r5, r0, 16\n\ + ldr r2, _080EFB40 @ =0x00006e2c\n\ + adds r0, r4, r2\n\ + ldrh r1, [r0]\n\ + adds r2, 0x3\n\ + adds r0, r4, r2\n\ + ldrb r0, [r0]\n\ + lsls r0, 2\n\ + lsls r1, 3\n\ + adds r0, r1\n\ + ldr r1, _080EFB44 @ =0x0000cdcc\n\ + adds r4, r1\n\ + adds r6, r4, r0\n\ + ldr r0, [r6]\n\ + cmp r0, 0\n\ + beq _080EFB6A\n\ + lsls r4, r5, 24\n\ + lsrs r4, 24\n\ + movs r0, 0xE\n\ + adds r1, r4, 0\n\ + movs r2, 0xF\n\ + movs r3, 0xF\n\ + bl MenuFillWindowRectWithBlankTile\n\ + movs r0, 0x1A\n\ + adds r1, r4, 0\n\ + movs r2, 0x1C\n\ + movs r3, 0xF\n\ + bl MenuFillWindowRectWithBlankTile\n\ + ldr r0, _080EFB48 @ =0x0600f800\n\ + ldr r3, [r6]\n\ + movs r1, 0\n\ + str r1, [sp]\n\ + str r1, [sp, 0x4]\n\ + movs r1, 0xA\n\ + str r1, [sp, 0x8]\n\ + str r1, [sp, 0xC]\n\ + str r1, [sp, 0x10]\n\ + movs r1, 0x10\n\ + movs r2, 0x6\n\ + bl sub_8095C8C\n\ + adds r0, r5, 0\n\ + adds r0, 0xB\n\ + b _080EFB66\n\ + .align 2, 0\n\ +_080EFB38: .4byte gUnknown_083DFEC4\n\ +_080EFB3C: .4byte 0x00006e18\n\ +_080EFB40: .4byte 0x00006e2c\n\ +_080EFB44: .4byte 0x0000cdcc\n\ +_080EFB48: .4byte 0x0600f800\n\ +_080EFB4C:\n\ + ldr r0, _080EFB98 @ =gUnknown_083DFEC4\n\ + ldr r0, [r0]\n\ + ldr r2, _080EFB9C @ =0x00006e18\n\ + adds r0, r2\n\ + lsls r2, r5, 19\n\ + lsrs r2, 16\n\ + movs r1, 0x1\n\ + str r1, [sp]\n\ + movs r1, 0x70\n\ + movs r3, 0x78\n\ + bl sub_8072A18\n\ + adds r0, r5, 0x2\n\ +_080EFB66:\n\ + lsls r0, 16\n\ + lsrs r5, r0, 16\n\ +_080EFB6A:\n\ + movs r0, 0\n\ + cmp r0, 0\n\ + bne _080EFB82\n\ + cmp r5, 0xF\n\ + bhi _080EFB82\n\ + lsls r1, r5, 24\n\ + lsrs r1, 24\n\ + movs r0, 0xE\n\ + movs r2, 0x1C\n\ + movs r3, 0xF\n\ + bl MenuFillWindowRectWithBlankTile\n\ +_080EFB82:\n\ + ldr r0, _080EFB98 @ =gUnknown_083DFEC4\n\ + ldr r0, [r0]\n\ + ldr r1, _080EFBA0 @ =0x00006e2e\n\ + adds r0, r1\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x2\n\ + bne _080EFBA4\n\ + bl sub_80EFD74\n\ + b _080EFBA8\n\ + .align 2, 0\n\ +_080EFB98: .4byte gUnknown_083DFEC4\n\ +_080EFB9C: .4byte 0x00006e18\n\ +_080EFBA0: .4byte 0x00006e2e\n\ +_080EFBA4:\n\ + bl sub_80EFDA0\n\ +_080EFBA8:\n\ + add sp, 0x14\n\ + pop {r4-r6}\n\ + pop {r0}\n\ + bx r0\n\ + .syntax divided\n"); +} +#endif // NONMATCHING + +void sub_80EFBB0(void) +{ + if (!gUnknown_083DFEC4->regionMap.zoomed) + { + sub_80EEFBC(8); + } + else + { + sub_80EEFBC(7); + } +} + +bool8 sub_80EFBDC(bool8 a) +{ + bool8 retVal = TRUE; + u16 var1 = gUnknown_083DFEC4->unk7698; + + if (a) + { + if (var1 > 168) + { + var1 = var1 - 8; + } + else + { + var1 = 160; + retVal = FALSE; + } + } + else + { + if (var1 < 248) + { + var1 = var1 + 8; + } + else + { + var1 = 256; + retVal = FALSE; + } + } + + gUnknown_083DFEC4->unk7698 = var1; + REG_BG0VOFS = var1 & 0xFF; + + return retVal; +} + +void sub_80EFC3C(void) +{ + gUnknown_083DFEC4->unkBC9A = 0; + gUnknown_083DFEC4->unkBC9B = 0; + sub_80EFD3C(); +} + +#ifdef NONMATCHING // "var1 = gUnknown_083DFEC4->unkBC9A;" is the only thing that doesnt' match. +bool8 sub_80EFC64(void) +{ + u16 i; + u16 var1; + u16 var2; + + if (gUnknown_083DFEC4->unkBC9A < 16) + { + var1 = gUnknown_083DFEC4->unkBC9A; + var2 = gUnknown_083DFEC4->unkBC9B; + for (i = 0; i < 2; i++) + { + if (gPokenavCityMaps[var1][i] != 0) + { + LZ77UnCompVram(gPokenavCityMaps[var1][i], gUnknown_083DFEC4->unkBC9C[var2]); + gUnknown_083DFEC4->unkCDCC[var1][i] = gUnknown_083DFEC4->unkBC9C[var2]; + var2++; + } + else + { + gUnknown_083DFEC4->unkCDCC[var1][i] = NULL; + } + } + + gUnknown_083DFEC4->unkBC9A++; + if (gUnknown_083DFEC4->unkBC9A < 16) + { + gUnknown_083DFEC4->unkBC9B = var2; + return TRUE; + } + } + + return FALSE; +} +#else +__attribute__((naked)) +bool8 sub_80EFC64(void) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r9\n\ + mov r6, r8\n\ + push {r6,r7}\n\ + sub sp, 0x8\n\ + ldr r4, _080EFCD0 @ =gUnknown_083DFEC4\n\ + ldr r2, [r4]\n\ + ldr r0, _080EFCD4 @ =0x0000bc9a\n\ + adds r1, r2, r0\n\ + ldrb r0, [r1]\n\ + cmp r0, 0xF\n\ + bhi _080EFD2C\n\ + ldrb r1, [r1]\n\ + mov r8, r1\n\ + ldr r1, _080EFCD8 @ =0x0000bc9b\n\ + adds r0, r2, r1\n\ + ldrb r7, [r0]\n\ + movs r2, 0\n\ + ldr r0, _080EFCDC @ =gPokenavCityMaps\n\ + mov r9, r0\n\ + adds r3, r4, 0\n\ +_080EFC8E:\n\ + lsls r0, r2, 2\n\ + mov r4, r8\n\ + lsls r1, r4, 3\n\ + adds r6, r0, r1\n\ + mov r1, r9\n\ + adds r0, r6, r1\n\ + ldr r1, [r0]\n\ + cmp r1, 0\n\ + beq _080EFCE8\n\ + movs r0, 0xC8\n\ + adds r5, r7, 0\n\ + muls r5, r0\n\ + ldr r4, _080EFCE0 @ =0x0000bc9c\n\ + adds r5, r4\n\ + ldr r4, [r3]\n\ + adds r5, r4, r5\n\ + adds r0, r1, 0\n\ + adds r1, r5, 0\n\ + str r2, [sp]\n\ + str r3, [sp, 0x4]\n\ + bl LZ77UnCompVram\n\ + ldr r0, _080EFCE4 @ =0x0000cdcc\n\ + adds r4, r0\n\ + adds r4, r6\n\ + str r5, [r4]\n\ + adds r0, r7, 0x1\n\ + lsls r0, 16\n\ + lsrs r7, r0, 16\n\ + ldr r2, [sp]\n\ + ldr r3, [sp, 0x4]\n\ + b _080EFCF2\n\ + .align 2, 0\n\ +_080EFCD0: .4byte gUnknown_083DFEC4\n\ +_080EFCD4: .4byte 0x0000bc9a\n\ +_080EFCD8: .4byte 0x0000bc9b\n\ +_080EFCDC: .4byte gPokenavCityMaps\n\ +_080EFCE0: .4byte 0x0000bc9c\n\ +_080EFCE4: .4byte 0x0000cdcc\n\ +_080EFCE8:\n\ + ldr r0, [r3]\n\ + ldr r4, _080EFD1C @ =0x0000cdcc\n\ + adds r0, r4\n\ + adds r0, r6\n\ + str r1, [r0]\n\ +_080EFCF2:\n\ + adds r0, r2, 0x1\n\ + lsls r0, 16\n\ + lsrs r2, r0, 16\n\ + cmp r2, 0x1\n\ + bls _080EFC8E\n\ + ldr r0, _080EFD20 @ =gUnknown_083DFEC4\n\ + ldr r2, [r0]\n\ + ldr r0, _080EFD24 @ =0x0000bc9a\n\ + adds r1, r2, r0\n\ + ldrb r0, [r1]\n\ + adds r0, 0x1\n\ + strb r0, [r1]\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0xF\n\ + bhi _080EFD2C\n\ + ldr r1, _080EFD28 @ =0x0000bc9b\n\ + adds r0, r2, r1\n\ + strb r7, [r0]\n\ + movs r0, 0x1\n\ + b _080EFD2E\n\ + .align 2, 0\n\ +_080EFD1C: .4byte 0x0000cdcc\n\ +_080EFD20: .4byte gUnknown_083DFEC4\n\ +_080EFD24: .4byte 0x0000bc9a\n\ +_080EFD28: .4byte 0x0000bc9b\n\ +_080EFD2C:\n\ + movs r0, 0\n\ +_080EFD2E:\n\ + add sp, 0x8\n\ + pop {r3,r4}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + pop {r4-r7}\n\ + pop {r1}\n\ + bx r1\n\ + .syntax divided\n"); +} +#endif // NONMATCHING + +void sub_80EFD3C(void) +{ + gUnknown_083DFEC4->unk769E = 0; + gUnknown_083DFEC4->unk769C = 47; + gUnknown_083DFEC4->unk769D = 0; + gUnknown_083DFEC4->unk769A = 0; +} + +void sub_80EFD74(void) +{ + gUnknown_083DFEC4->unk769E = 1; + + if (gUnknown_083DFEC4->unk769D == 1) + { + gUnknown_083DFEC4->unk769D = 2; + } +} + +void sub_80EFDA0(void) +{ + sub_8095C8C((void *)VRAM + 0xF800, 14, 16, gUnknown_08E9AC2C, 0, 0, 15, 1, 15); + gUnknown_083DFEC4->unk769E = 0; +} + +void sub_80EFDE4(u8 param0) +{ + u16 var1 = 60 - gUnknown_083DFEC4->unk769C; + + if (var1 > 15) + { + var1 = 15; + } + + if (gUnknown_083DFEC4->unk769E != 0) + { + sub_8095C8C((void *)VRAM + 0xF800, 14, 16, gUnknown_08E9ABB4, gUnknown_083DFEC4->unk769C, 0, var1, 1, 60); + + if (var1 < 15) + { + u16 var2 = var1 + 14; + + sub_8095C8C((void *)VRAM + 0xF800, var2, 16, gUnknown_08E9ABB4, 0, 0, (u16)(15 - var1), 1, 60); + } + } +} + +void sub_80EFE7C(void) +{ + u16 var1; + u8 var2 = gUnknown_083DFEC4->unk769D; + + switch (var2) + { + case 0: + var1 = ++gUnknown_083DFEC4->unk769C; + + if (var1 > 59) + { + gUnknown_083DFEC4->unk769C = var2; + } + + sub_80EFDE4(gUnknown_083DFEC4->unk769E); + + switch (gUnknown_083DFEC4->unk769C) + { + case 0: + case 15: + case 30: + case 45: + gUnknown_083DFEC4->unk769D = 1; + gUnknown_083DFEC4->unk769A = 0; + break; + } + break; + case 1: + var1 = ++gUnknown_083DFEC4->unk769A; + if (var1 > 120) + { + gUnknown_083DFEC4->unk769A = 0; + gUnknown_083DFEC4->unk769D = 0; + } + break; + case 2: + sub_80EFDE4(1); + gUnknown_083DFEC4->unk769D = 1; + break; + } +} + +void sub_80EFF34(void) +{ + gUnknown_083DFEC4->unkD160 = 0; + + if (gUnknown_083DFEC4->unk6DAC == 0) + { + while (sub_80EFF68()); + } +} + +bool8 sub_80EFF68(void) +{ + switch (gUnknown_083DFEC4->unkD160) + { + case 0: + sub_80EEDE8(); + gUnknown_083DFEC4->unkD162[0] = 11; + break; + case 1: + SetUpWindowConfig(&gWindowConfig_81E7080); + break; + case 2: + MultistepInitMenuWindowBegin(&gWindowConfig_81E7080); + break; + case 3: + if (!MultistepInitMenuWindowContinue()) + { + return TRUE; + } + break; + case 4: + MenuZeroFillScreen(); + break; + case 5: + sub_80F1614(); + break; + case 6: + if (sub_80F162C(0)) + { + return TRUE; + } + break; + case 7: + LZ77UnCompVram(gPokenavConditionView_Gfx, (void *)VRAM + 0x5000); + break; + case 8: + LZ77UnCompVram(gUnknown_08E9AC4C, (void *)VRAM + 0xF000); + LoadPalette(gPokenavConditionMenu2_Pal, 0x20, 0x20); + break; + case 9: + if (gUnknown_083DFEC4->unk76AA == 1) + { + sub_8095C8C((void *)VRAM + 0xF000, 0, 5, gUnknown_083E01AC, 0, 0, 9, 4, 9); + } + break; + case 10: + LZ77UnCompVram(gUnknown_08E9FEB4, (void *)VRAM + 0xB800); + break; + case 11: + LoadPalette(gUnknown_083E0254, 0x30, 0x20); + LoadPalette(gUnknownPalette_81E6692, 0xB0, 0x20); + LoadPalette(&gPokenavConditionMenu2_Pal[2], 0xB1, 0x2); + LoadPalette(&gPokenavConditionMenu2_Pal[16], 0xB5, 0x2); + LoadPalette(&gPokenavConditionMenu2_Pal[30], 0xBF, 0x2); + sub_80F01A4(); + break; + case 12: + sub_80F01E0((u16)gUnknown_083DFEC4->unk8fe9); + break; + case 13: + REG_BG3CNT = 0x1E03; + REG_BG2CNT = 0x1702; + REG_BLDCNT = 0x844; + REG_BLDALPHA = 0x40B; + break; + default: + return FALSE; + } + + gUnknown_083DFEC4->unkD160++; + return TRUE; +} + +void sub_80F0174(bool8 a) +{ + if (a) + { + REG_DISPCNT |= DISPCNT_BG2_ON; + } + else + { + REG_DISPCNT &= ~DISPCNT_BG2_ON; + } +} + +void sub_80F01A4(void) +{ + REG_WIN0H = WIN_RANGE(0, 240); + REG_WIN1H = WIN_RANGE(0, 155); + REG_WIN0V = WIN_RANGE(56, 121); + REG_WIN1V = WIN_RANGE(56, 121); + REG_WININ = 0x3F3F; + REG_WINOUT = 0x001B; +} + +void sub_80F01E0(u16 a) +{ + MenuPrint(gUnknown_083DFEC4->unk8829[a], 13, 1); + + if (gUnknown_083DFEC4->unk76AA == 1) + { + MenuPrint(gUnknown_083DFEC4->unk88E9[a], 13, 3); + sub_80F443C(gUnknown_083DFEC4->unk8788, gUnknown_083DFEC4->unk893c[gUnknown_083DFEC4->unk87DC].unk2); + MenuPrint(gUnknown_083DFEC4->unk8788, 1, 6); + } +} + +void sub_80F0264(u8 a) +{ + gUnknown_083DFEC4->unk306 = 0; + gUnknown_083DFEC4->unk87CA = a; + + if (gUnknown_083DFEC4->unk6DAC == 0) + { + while (sub_80F02A0()); + } +} + +#ifdef NONMATCHING // small nonmatching part is in the third else clause in case 7. +bool8 sub_80F02A0(void) +{ + const u16 *pointer; + + switch (gUnknown_083DFEC4->unk306) + { + case 0: + sub_80EEDE8(); + + gUnknown_083DFEC4->unk87C8 = gUnknown_083DFEC4->unk87CA == 1; + gUnknown_083DFEC4->unkD162[0] = 11; + break; + case 1: + SetUpWindowConfig(&gWindowConfig_81E70D4); + break; + case 2: + MultistepInitMenuWindowBegin(&gWindowConfig_81E70D4); + break; + case 3: + if (!MultistepInitMenuWindowContinue()) + { + return TRUE; + } + break; + case 4: + MenuZeroFillScreen(); + break; + case 5: + LZ77UnCompVram(gUnknown_08E9FC64, (void *)VRAM + 0xE800); + break; + case 6: + LZ77UnCompVram(gPokenavConditionSearch2_Gfx, (void *)VRAM + 0x8000); + break; + case 7: + LoadPalette(gUnknown_083E02B4, 0xB0, 0x20); + LoadPalette(gUnknown_083E02B4, 0xF0, 0x20); + LoadPalette(gUnknown_083E0334, 0x40, 0x20); + + if (gUnknown_083DFEC4->unk87CA == 0) + { + LoadPalette(gPokenavConditionSearch2_Pal, 0x30, 0x20); + gPlttBufferUnfaded[0] = gPokenavConditionSearch2_Pal[5]; + LoadPalette(gUnknownPalette_81E6692, 0xB0, 0x20); + LoadPalette(&gUnknown_083E02B4[1], 0xB1, 0x2); + LoadPalette(&gUnknown_083E02B4[8], 0xB5, 0x2); + LoadPalette(&gPokenavConditionSearch2_Pal[5], 0xBF, 0x2); + } + else if (gUnknown_083DFEC4->unk87CA == 1) + { + LoadPalette(gUnknown_083E0274, 0x30, 0x20); + gPlttBufferUnfaded[0] = gUnknown_083E0274[5]; + LoadPalette(gUnknownPalette_81E6692, 0xB0, 0x20); + LoadPalette(&gUnknown_083E02B4[1], 0xB1, 0x2); + LoadPalette(&gUnknown_083E02B4[8], 0xB5, 0x2); + LoadPalette(&gUnknown_083E0274[5], 0xBF, 0x2); + } + else + { + LoadPalette(gUnknown_08E9F9E8, 0x30, 0x20); + pointer = &gUnknown_08E9F9E8[5]; + gPlttBufferUnfaded[0] = gUnknown_08E9F9E8[5]; + LoadPalette(gUnknown_083E0314, 0x50, 0x20); + LoadPalette(&gUnknown_083E02B4[1], 0xB1, 0x2); + LoadPalette(&gUnknown_083E02B4[8], 0xB5, 0x2); + LoadPalette(pointer, 0xBF, 0x2); + LoadPalette(pointer, 0x5F, 0x2); + } + break; + case 8: + if (gUnknown_083DFEC4->unk87CA != 2) + { + sub_8095C8C((void *)VRAM + 0xE800, 0, 5, gUnknown_08E9FD1C, 0, 0, 9, 4, 9); + } + else + { + sub_8095C8C((void *)VRAM + 0xE800, 0, 4, gUnknown_08E9FE54, 0, 0, 12, 10, 12); + sub_8095C8C((void *)VRAM + 0xE800, 0, 8, gUnknown_08E9FD64, 0, 0, 12, 10, 12); + } + break; + case 9: + LZ77UnCompVram(gUnknown_083E0354, (void *)VRAM + 0x5000); + break; + case 10: + DmaClear16(3, (void *)VRAM + 0xF800, 0x800); + break; + case 11: + sub_80F0900(); + break; + case 12: + if (sub_80F0944()) + { + return TRUE; + } + break; + case 13: + if (gUnknown_083DFEC4->unk87CA != 2) + { + ShowMapNamePopUpWindow(); + } + else + { + sub_80F081C(0); + sub_80F0FFC(gUnknown_083DFEC4->unk876E); + } + break; + case 14: + REG_BG2CNT = 0x1D0A; + REG_BG3CNT = 0x1E03; + REG_BG0CNT = 0x1F01; + REG_BG3VOFS = 0xF8; + + gUnknown_083DFEC4->unk8776 = 0xF8; + gUnknown_083DFEC4->unk8778 = 0; + + REG_BLDCNT = 0; + gUnknown_083DFEC4->unkD160++; + return FALSE; + default: + return FALSE; + } + + gUnknown_083DFEC4->unk306++; + return TRUE; +} +#else +__attribute__((naked)) +bool8 sub_80F02A0(void) +{ + asm(".syntax unified\n\ + push {r4-r6,lr}\n\ + mov r6, r8\n\ + push {r6}\n\ + sub sp, 0x18\n\ + ldr r1, _080F02C4 @ =gUnknown_083DFEC4\n\ + ldr r0, [r1]\n\ + ldr r2, _080F02C8 @ =0x00000306\n\ + adds r0, r2\n\ + ldrh r0, [r0]\n\ + adds r2, r1, 0\n\ + cmp r0, 0xE\n\ + bls _080F02BA\n\ + b _080F05FA\n\ +_080F02BA:\n\ + lsls r0, 2\n\ + ldr r1, _080F02CC @ =_080F02D0\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + mov pc, r0\n\ + .align 2, 0\n\ +_080F02C4: .4byte gUnknown_083DFEC4\n\ +_080F02C8: .4byte 0x00000306\n\ +_080F02CC: .4byte _080F02D0\n\ + .align 2, 0\n\ +_080F02D0:\n\ + .4byte _080F030C\n\ + .4byte _080F0344\n\ + .4byte _080F0350\n\ + .4byte _080F035C\n\ + .4byte _080F0368\n\ + .4byte _080F036E\n\ + .4byte _080F0380\n\ + .4byte _080F0394\n\ + .4byte _080F04BC\n\ + .4byte _080F053C\n\ + .4byte _080F0550\n\ + .4byte _080F0574\n\ + .4byte _080F057A\n\ + .4byte _080F0586\n\ + .4byte _080F05BC\n\ +_080F030C:\n\ + bl sub_80EEDE8\n\ + ldr r0, _080F0334 @ =gUnknown_083DFEC4\n\ + ldr r1, [r0]\n\ + movs r2, 0\n\ + ldr r3, _080F0338 @ =0x000087ca\n\ + adds r0, r1, r3\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x1\n\ + bne _080F0322\n\ + movs r2, 0x1\n\ +_080F0322:\n\ + ldr r3, _080F033C @ =0x000087c8\n\ + adds r0, r1, r3\n\ + strb r2, [r0]\n\ + ldr r0, _080F0340 @ =0x0000d162\n\ + adds r1, r0\n\ + movs r0, 0xB\n\ + strb r0, [r1]\n\ + b _080F0618\n\ + .align 2, 0\n\ +_080F0334: .4byte gUnknown_083DFEC4\n\ +_080F0338: .4byte 0x000087ca\n\ +_080F033C: .4byte 0x000087c8\n\ +_080F0340: .4byte 0x0000d162\n\ +_080F0344:\n\ + ldr r0, _080F034C @ =gWindowConfig_81E70D4\n\ + bl SetUpWindowConfig\n\ + b _080F0618\n\ + .align 2, 0\n\ +_080F034C: .4byte gWindowConfig_81E70D4\n\ +_080F0350:\n\ + ldr r0, _080F0358 @ =gWindowConfig_81E70D4\n\ + bl MultistepInitMenuWindowBegin\n\ + b _080F0618\n\ + .align 2, 0\n\ +_080F0358: .4byte gWindowConfig_81E70D4\n\ +_080F035C:\n\ + bl MultistepInitMenuWindowContinue\n\ + cmp r0, 0\n\ + beq _080F0366\n\ + b _080F0618\n\ +_080F0366:\n\ + b _080F0626\n\ +_080F0368:\n\ + bl MenuZeroFillScreen\n\ + b _080F0618\n\ +_080F036E:\n\ + ldr r0, _080F0378 @ =gUnknown_08E9FC64\n\ + ldr r1, _080F037C @ =0x0600e800\n\ + bl LZ77UnCompVram\n\ + b _080F0618\n\ + .align 2, 0\n\ +_080F0378: .4byte gUnknown_08E9FC64\n\ +_080F037C: .4byte 0x0600e800\n\ +_080F0380:\n\ + ldr r0, _080F038C @ =gPokenavConditionSearch2_Gfx\n\ + ldr r1, _080F0390 @ =0x06008000\n\ + bl LZ77UnCompVram\n\ + b _080F0618\n\ + .align 2, 0\n\ +_080F038C: .4byte gPokenavConditionSearch2_Gfx\n\ +_080F0390: .4byte 0x06008000\n\ +_080F0394:\n\ + ldr r6, _080F03FC @ =gUnknown_083E02B4\n\ + adds r0, r6, 0\n\ + movs r1, 0xB0\n\ + movs r2, 0x20\n\ + bl LoadPalette\n\ + adds r0, r6, 0\n\ + movs r1, 0xF0\n\ + movs r2, 0x20\n\ + bl LoadPalette\n\ + ldr r0, _080F0400 @ =gUnknown_083E0334\n\ + movs r1, 0x40\n\ + movs r2, 0x20\n\ + bl LoadPalette\n\ + ldr r0, _080F0404 @ =gUnknown_083DFEC4\n\ + ldr r0, [r0]\n\ + ldr r1, _080F0408 @ =0x000087ca\n\ + adds r0, r1\n\ + ldrb r0, [r0]\n\ + cmp r0, 0\n\ + bne _080F0418\n\ + ldr r4, _080F040C @ =gPokenavConditionSearch2_Pal\n\ + adds r0, r4, 0\n\ + movs r1, 0x30\n\ + movs r2, 0x20\n\ + bl LoadPalette\n\ + ldr r1, _080F0410 @ =gPlttBufferUnfaded\n\ + ldrh r0, [r4, 0xA]\n\ + strh r0, [r1]\n\ + ldr r0, _080F0414 @ =gUnknownPalette_81E6692\n\ + movs r1, 0xB0\n\ + movs r2, 0x20\n\ + bl LoadPalette\n\ + adds r0, r6, 0x2\n\ + movs r1, 0xB1\n\ + movs r2, 0x2\n\ + bl LoadPalette\n\ + adds r0, r6, 0\n\ + adds r0, 0x10\n\ + movs r1, 0xB5\n\ + movs r2, 0x2\n\ + bl LoadPalette\n\ + adds r4, 0xA\n\ + adds r0, r4, 0\n\ + movs r1, 0xBF\n\ + b _080F04A8\n\ + .align 2, 0\n\ +_080F03FC: .4byte gUnknown_083E02B4\n\ +_080F0400: .4byte gUnknown_083E0334\n\ +_080F0404: .4byte gUnknown_083DFEC4\n\ +_080F0408: .4byte 0x000087ca\n\ +_080F040C: .4byte gPokenavConditionSearch2_Pal\n\ +_080F0410: .4byte gPlttBufferUnfaded\n\ +_080F0414: .4byte gUnknownPalette_81E6692\n\ +_080F0418:\n\ + cmp r0, 0x1\n\ + bne _080F0464\n\ + ldr r4, _080F0458 @ =gUnknown_083E0274\n\ + adds r0, r4, 0\n\ + movs r1, 0x30\n\ + movs r2, 0x20\n\ + bl LoadPalette\n\ + ldr r1, _080F045C @ =gPlttBufferUnfaded\n\ + ldrh r0, [r4, 0xA]\n\ + strh r0, [r1]\n\ + ldr r0, _080F0460 @ =gUnknownPalette_81E6692\n\ + movs r1, 0xB0\n\ + movs r2, 0x20\n\ + bl LoadPalette\n\ + adds r0, r6, 0x2\n\ + movs r1, 0xB1\n\ + movs r2, 0x2\n\ + bl LoadPalette\n\ + adds r0, r6, 0\n\ + adds r0, 0x10\n\ + movs r1, 0xB5\n\ + movs r2, 0x2\n\ + bl LoadPalette\n\ + adds r4, 0xA\n\ + adds r0, r4, 0\n\ + movs r1, 0xBF\n\ + b _080F04A8\n\ + .align 2, 0\n\ +_080F0458: .4byte gUnknown_083E0274\n\ +_080F045C: .4byte gPlttBufferUnfaded\n\ +_080F0460: .4byte gUnknownPalette_81E6692\n\ +_080F0464:\n\ + ldr r4, _080F04B0 @ =gUnknown_08E9F9E8\n\ + adds r0, r4, 0\n\ + movs r1, 0x30\n\ + movs r2, 0x20\n\ + bl LoadPalette\n\ + ldr r1, _080F04B4 @ =gPlttBufferUnfaded\n\ + adds r5, r4, 0\n\ + adds r5, 0xA\n\ + ldrh r0, [r4, 0xA]\n\ + strh r0, [r1]\n\ + ldr r0, _080F04B8 @ =gUnknown_083E0314\n\ + movs r1, 0x50\n\ + movs r2, 0x20\n\ + bl LoadPalette\n\ + adds r0, r6, 0x2\n\ + movs r1, 0xB1\n\ + movs r2, 0x2\n\ + bl LoadPalette\n\ + adds r0, r6, 0\n\ + adds r0, 0x10\n\ + movs r1, 0xB5\n\ + movs r2, 0x2\n\ + bl LoadPalette\n\ + adds r0, r5, 0\n\ + movs r1, 0xBF\n\ + movs r2, 0x2\n\ + bl LoadPalette\n\ + adds r0, r5, 0\n\ + movs r1, 0x5F\n\ +_080F04A8:\n\ + movs r2, 0x2\n\ + bl LoadPalette\n\ + b _080F0618\n\ + .align 2, 0\n\ +_080F04B0: .4byte gUnknown_08E9F9E8\n\ +_080F04B4: .4byte gPlttBufferUnfaded\n\ +_080F04B8: .4byte gUnknown_083E0314\n\ +_080F04BC:\n\ + ldr r0, _080F04E8 @ =gUnknown_083DFEC4\n\ + ldr r0, [r0]\n\ + ldr r2, _080F04EC @ =0x000087ca\n\ + adds r0, r2\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x2\n\ + beq _080F04F8\n\ + ldr r0, _080F04F0 @ =0x0600e800\n\ + ldr r3, _080F04F4 @ =gUnknown_08E9FD1C\n\ + movs r1, 0\n\ + str r1, [sp]\n\ + str r1, [sp, 0x4]\n\ + movs r2, 0x9\n\ + str r2, [sp, 0x8]\n\ + movs r1, 0x4\n\ + str r1, [sp, 0xC]\n\ + str r2, [sp, 0x10]\n\ + movs r1, 0\n\ + movs r2, 0x5\n\ + bl sub_8095C8C\n\ + b _080F0618\n\ + .align 2, 0\n\ +_080F04E8: .4byte gUnknown_083DFEC4\n\ +_080F04EC: .4byte 0x000087ca\n\ +_080F04F0: .4byte 0x0600e800\n\ +_080F04F4: .4byte gUnknown_08E9FD1C\n\ +_080F04F8:\n\ + ldr r3, _080F0530 @ =0x0600e800\n\ + mov r8, r3\n\ + ldr r3, _080F0534 @ =gUnknown_08E9FE54\n\ + movs r4, 0\n\ + str r4, [sp]\n\ + str r4, [sp, 0x4]\n\ + movs r5, 0xC\n\ + str r5, [sp, 0x8]\n\ + movs r6, 0xA\n\ + str r6, [sp, 0xC]\n\ + str r5, [sp, 0x10]\n\ + mov r0, r8\n\ + movs r1, 0\n\ + movs r2, 0x4\n\ + bl sub_8095C8C\n\ + ldr r3, _080F0538 @ =gUnknown_08E9FD64\n\ + str r4, [sp]\n\ + str r4, [sp, 0x4]\n\ + str r5, [sp, 0x8]\n\ + str r6, [sp, 0xC]\n\ + str r5, [sp, 0x10]\n\ + mov r0, r8\n\ + movs r1, 0\n\ + movs r2, 0x8\n\ + bl sub_8095C8C\n\ + b _080F0618\n\ + .align 2, 0\n\ +_080F0530: .4byte 0x0600e800\n\ +_080F0534: .4byte gUnknown_08E9FE54\n\ +_080F0538: .4byte gUnknown_08E9FD64\n\ +_080F053C:\n\ + ldr r0, _080F0548 @ =gUnknown_083E0354\n\ + ldr r1, _080F054C @ =0x06005000\n\ + bl LZ77UnCompVram\n\ + b _080F0618\n\ + .align 2, 0\n\ +_080F0548: .4byte gUnknown_083E0354\n\ +_080F054C: .4byte 0x06005000\n\ +_080F0550:\n\ + ldr r2, _080F0568 @ =0x0600f800\n\ + add r1, sp, 0x14\n\ + movs r0, 0\n\ + strh r0, [r1]\n\ + ldr r0, _080F056C @ =0x040000d4\n\ + str r1, [r0]\n\ + str r2, [r0, 0x4]\n\ + ldr r1, _080F0570 @ =0x81000400\n\ + str r1, [r0, 0x8]\n\ + ldr r0, [r0, 0x8]\n\ + b _080F0618\n\ + .align 2, 0\n\ +_080F0568: .4byte 0x0600f800\n\ +_080F056C: .4byte 0x040000d4\n\ +_080F0570: .4byte 0x81000400\n\ +_080F0574:\n\ + bl sub_80F0900\n\ + b _080F0618\n\ +_080F057A:\n\ + bl sub_80F0944\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _080F0618\n\ + b _080F0626\n\ +_080F0586:\n\ + ldr r0, _080F059C @ =gUnknown_083DFEC4\n\ + ldr r4, [r0]\n\ + ldr r1, _080F05A0 @ =0x000087ca\n\ + adds r0, r4, r1\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x2\n\ + beq _080F05A4\n\ + bl ShowMapNamePopUpWindow\n\ + b _080F0618\n\ + .align 2, 0\n\ +_080F059C: .4byte gUnknown_083DFEC4\n\ +_080F05A0: .4byte 0x000087ca\n\ +_080F05A4:\n\ + movs r0, 0\n\ + bl sub_80F081C\n\ + ldr r2, _080F05B8 @ =0x0000876e\n\ + adds r0, r4, r2\n\ + ldrb r0, [r0]\n\ + bl sub_80F0FFC\n\ + b _080F0618\n\ + .align 2, 0\n\ +_080F05B8: .4byte 0x0000876e\n\ +_080F05BC:\n\ + ldr r1, _080F0600 @ =REG_BG2CNT\n\ + ldr r3, _080F0604 @ =0x00001d0a\n\ + adds r0, r3, 0\n\ + strh r0, [r1]\n\ + adds r1, 0x2\n\ + adds r3, 0xF9\n\ + adds r0, r3, 0\n\ + strh r0, [r1]\n\ + subs r1, 0x6\n\ + adds r3, 0xFE\n\ + adds r0, r3, 0\n\ + strh r0, [r1]\n\ + adds r1, 0x16\n\ + movs r0, 0xF8\n\ + strh r0, [r1]\n\ + ldr r1, [r2]\n\ + ldr r0, _080F0608 @ =0x00008776\n\ + adds r2, r1, r0\n\ + movs r3, 0\n\ + movs r0, 0xF8\n\ + strh r0, [r2]\n\ + ldr r2, _080F060C @ =0x00008778\n\ + adds r0, r1, r2\n\ + strh r3, [r0]\n\ + ldr r0, _080F0610 @ =REG_BLDCNT\n\ + strh r3, [r0]\n\ + ldr r3, _080F0614 @ =0x0000d160\n\ + adds r1, r3\n\ + ldrh r0, [r1]\n\ + adds r0, 0x1\n\ + strh r0, [r1]\n\ +_080F05FA:\n\ + movs r0, 0\n\ + b _080F0628\n\ + .align 2, 0\n\ +_080F0600: .4byte REG_BG2CNT\n\ +_080F0604: .4byte 0x00001d0a\n\ +_080F0608: .4byte 0x00008776\n\ +_080F060C: .4byte 0x00008778\n\ +_080F0610: .4byte REG_BLDCNT\n\ +_080F0614: .4byte 0x0000d160\n\ +_080F0618:\n\ + ldr r0, _080F0634 @ =gUnknown_083DFEC4\n\ + ldr r1, [r0]\n\ + ldr r0, _080F0638 @ =0x00000306\n\ + adds r1, r0\n\ + ldrh r0, [r1]\n\ + adds r0, 0x1\n\ + strh r0, [r1]\n\ +_080F0626:\n\ + movs r0, 0x1\n\ +_080F0628:\n\ + add sp, 0x18\n\ + pop {r3}\n\ + mov r8, r3\n\ + pop {r4-r6}\n\ + pop {r1}\n\ + bx r1\n\ + .align 2, 0\n\ +_080F0634: .4byte gUnknown_083DFEC4\n\ +_080F0638: .4byte 0x00000306\n\ + .syntax divided\n"); +} +#endif // NONMATCHING -- cgit v1.2.3 From 9974fd77611d0321ebe51750427e1ec273c1c7af Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Sat, 11 Nov 2017 15:32:38 -0500 Subject: eliminate remaining RAM pointers in src/ --- src/battle/battle_4.c | 282 +++++++++++++++++++++--------------------- src/battle/battle_7.c | 16 +-- src/battle/battle_ai.c | 10 +- src/battle/battle_anim.c | 8 +- src/battle/battle_interface.c | 44 +++---- src/de_rom_8040FE0.c | 4 +- src/engine/decompress.c | 3 +- src/engine/trade.c | 4 +- src/engine/trainer_card.c | 12 +- src/field/party_menu.c | 16 +-- src/field/shop.c | 2 +- src/field/slot_machine.c | 9 +- src/pokemon/pokedex.c | 159 ++++++++++++------------ src/scene/contest_painting.c | 4 +- src/scene/evolution_scene.c | 224 ++++++++++++++++----------------- src/scene/intro.c | 16 ++- 16 files changed, 409 insertions(+), 404 deletions(-) (limited to 'src') diff --git a/src/battle/battle_4.c b/src/battle/battle_4.c index d7ca298c3..6f3be7804 100644 --- a/src/battle/battle_4.c +++ b/src/battle/battle_4.c @@ -265,7 +265,7 @@ extern u8 gUnknown_081D9468[]; #define TARGET_TURN_DAMAGED (((gSpecialStatuses[gBankTarget].moveturnLostHP_physical || gSpecialStatuses[gBankTarget].moveturnLostHP_physical.moveturnLostHP_special))) -#define HP_ON_SWITCHOUT (((u16*)(0x020160bc))) +#define HP_ON_SWITCHOUT (((u16*)(ewram_addr + 0x160BC))) static void atk00_attackcanceler(void); static void atk01_accuracycheck(void); @@ -2773,21 +2773,21 @@ void SetMoveEffect(bool8 primary, u8 certainArg) ands r0, r3\n\ strb r0, [r7, 0x3]\n\ movs r6, 0x40\n\ - ldr r0, _0801E43C @ =0x02000000\n\ + ldr r0, _0801E43C @ =gSharedMem\n\ ldr r1, _0801E440 @ =gBankTarget\n\ b _0801E450\n\ .align 2, 0\n\ _0801E430: .4byte gBattleCommunication\n\ _0801E434: .4byte gEffectBank\n\ _0801E438: .4byte gBankAttacker\n\ -_0801E43C: .4byte 0x02000000\n\ +_0801E43C: .4byte gSharedMem\n\ _0801E440: .4byte gBankTarget\n\ _0801E444:\n\ ldr r2, _0801E538 @ =gEffectBank\n\ ldr r0, _0801E53C @ =gBankTarget\n\ ldrb r0, [r0]\n\ strb r0, [r2]\n\ - ldr r0, _0801E540 @ =0x02000000\n\ + ldr r0, _0801E540 @ =gSharedMem\n\ ldr r1, _0801E544 @ =gBankAttacker\n\ _0801E450:\n\ ldrb r1, [r1]\n\ @@ -2911,7 +2911,7 @@ _0801E536:\n\ .align 2, 0\n\ _0801E538: .4byte gEffectBank\n\ _0801E53C: .4byte gBankTarget\n\ -_0801E540: .4byte 0x02000000\n\ +_0801E540: .4byte gSharedMem\n\ _0801E544: .4byte gBankAttacker\n\ _0801E548: .4byte 0x00016003\n\ _0801E54C: .4byte gBattleMons\n\ @@ -3654,7 +3654,7 @@ _0801EAFA:\n\ beq _0801EB14\n\ bl _0801F5FA\n\ _0801EB14:\n\ - ldr r0, _0801EB30 @ =0x02000000\n\ + ldr r0, _0801EB30 @ =gSharedMem\n\ ldrb r1, [r7, 0x3]\n\ ldr r2, _0801EB34 @ =0x000160ca\n\ adds r0, r2\n\ @@ -3666,7 +3666,7 @@ _0801EB14:\n\ bl _0801F4F2\n\ .align 2, 0\n\ _0801EB2C: .4byte gBattleCommunication\n\ -_0801EB30: .4byte 0x02000000\n\ +_0801EB30: .4byte gSharedMem\n\ _0801EB34: .4byte 0x000160ca\n\ _0801EB38: .4byte gHitMarker\n\ _0801EB3C:\n\ @@ -4075,7 +4075,7 @@ _0801EEE8:\n\ ldr r0, [r2]\n\ orrs r0, r1\n\ str r0, [r2]\n\ - ldr r2, _0801EF80 @ =0x02000000\n\ + ldr r2, _0801EF80 @ =gSharedMem\n\ mov r3, r8\n\ ldrb r0, [r3]\n\ lsls r0, 1\n\ @@ -4140,7 +4140,7 @@ _0801EF70:\n\ bne _0801EF60\n\ b _0801F5FA\n\ .align 2, 0\n\ -_0801EF80: .4byte 0x02000000\n\ +_0801EF80: .4byte gSharedMem\n\ _0801EF84: .4byte 0x00016004\n\ _0801EF88: .4byte gCurrentMove\n\ _0801EF8C: .4byte 0x00016005\n\ @@ -4197,7 +4197,7 @@ _0801EFEC:\n\ beq _0801F008\n\ b _0801F5DC\n\ _0801F008:\n\ - ldr r2, _0801F02C @ =0x02000000\n\ + ldr r2, _0801F02C @ =gSharedMem\n\ ldrb r1, [r7, 0x3]\n\ movs r0, 0x3F\n\ ands r0, r1\n\ @@ -4214,7 +4214,7 @@ _0801F008:\n\ ldr r0, _0801F03C @ =BattleScript_StatUp\n\ b _0801F5F8\n\ .align 2, 0\n\ -_0801F02C: .4byte 0x02000000\n\ +_0801F02C: .4byte gSharedMem\n\ _0801F030: .4byte 0x000160a4\n\ _0801F034: .4byte 0x000160a5\n\ _0801F038: .4byte gBattlescriptCurrInstr\n\ @@ -4235,7 +4235,7 @@ _0801F040:\n\ beq _0801F05E\n\ b _0801F5DC\n\ _0801F05E:\n\ - ldr r2, _0801F080 @ =0x02000000\n\ + ldr r2, _0801F080 @ =gSharedMem\n\ ldrb r1, [r7, 0x3]\n\ movs r0, 0x3F\n\ ands r0, r1\n\ @@ -4252,7 +4252,7 @@ _0801F05E:\n\ ldr r0, _0801F090 @ =BattleScript_StatDown\n\ b _0801F5F8\n\ .align 2, 0\n\ -_0801F080: .4byte 0x02000000\n\ +_0801F080: .4byte gSharedMem\n\ _0801F084: .4byte 0x000160a4\n\ _0801F088: .4byte 0x000160a5\n\ _0801F08C: .4byte gBattlescriptCurrInstr\n\ @@ -4272,7 +4272,7 @@ _0801F094:\n\ beq _0801F0B0\n\ b _0801F5DC\n\ _0801F0B0:\n\ - ldr r2, _0801F0D4 @ =0x02000000\n\ + ldr r2, _0801F0D4 @ =gSharedMem\n\ ldrb r1, [r7, 0x3]\n\ movs r0, 0x3F\n\ ands r0, r1\n\ @@ -4289,7 +4289,7 @@ _0801F0B0:\n\ ldr r0, _0801F0E4 @ =BattleScript_StatUp\n\ b _0801F5F8\n\ .align 2, 0\n\ -_0801F0D4: .4byte 0x02000000\n\ +_0801F0D4: .4byte gSharedMem\n\ _0801F0D8: .4byte 0x000160a4\n\ _0801F0DC: .4byte 0x000160a5\n\ _0801F0E0: .4byte gBattlescriptCurrInstr\n\ @@ -4310,7 +4310,7 @@ _0801F0E8:\n\ beq _0801F106\n\ b _0801F5DC\n\ _0801F106:\n\ - ldr r2, _0801F128 @ =0x02000000\n\ + ldr r2, _0801F128 @ =gSharedMem\n\ ldrb r1, [r7, 0x3]\n\ movs r0, 0x3F\n\ ands r0, r1\n\ @@ -4327,7 +4327,7 @@ _0801F106:\n\ ldr r0, _0801F138 @ =BattleScript_StatDown\n\ b _0801F5F8\n\ .align 2, 0\n\ -_0801F128: .4byte 0x02000000\n\ +_0801F128: .4byte gSharedMem\n\ _0801F12C: .4byte 0x000160a4\n\ _0801F130: .4byte 0x000160a5\n\ _0801F134: .4byte gBattlescriptCurrInstr\n\ @@ -4515,7 +4515,7 @@ _0801F2B0:\n\ b _0801F5DC\n\ _0801F2B6:\n\ lsls r0, r1, 1\n\ - ldr r5, _0801F344 @ =0x020160f0\n\ + ldr r5, _0801F344 @ =gSharedMem + 0x160F0\n\ adds r0, r5\n\ ldr r1, _0801F348 @ =gLastUsedItem\n\ strh r2, [r0]\n\ @@ -4580,7 +4580,7 @@ _0801F2B6:\n\ b _0801F5FA\n\ .align 2, 0\n\ _0801F340: .4byte gBankAttacker\n\ -_0801F344: .4byte 0x020160f0\n\ +_0801F344: .4byte gSharedMem + 0x160F0\n\ _0801F348: .4byte gLastUsedItem\n\ _0801F34C: .4byte gActiveBank\n\ _0801F350: .4byte gBattlescriptCurrInstr\n\ @@ -4851,7 +4851,7 @@ _0801F540:\n\ bl b_movescr_stack_push\n\ ldr r0, _0801F5CC @ =BattleScript_KnockedOff\n\ str r0, [r4]\n\ - ldr r1, _0801F5D0 @ =0x02000000\n\ + ldr r1, _0801F5D0 @ =gSharedMem\n\ mov r2, r8\n\ ldrb r0, [r2]\n\ lsls r0, 1\n\ @@ -4873,7 +4873,7 @@ _0801F5C0: .4byte gBitTable\n\ _0801F5C4: .4byte gBattlePartyID\n\ _0801F5C8: .4byte gBattlescriptCurrInstr\n\ _0801F5CC: .4byte BattleScript_KnockedOff\n\ -_0801F5D0: .4byte 0x02000000\n\ +_0801F5D0: .4byte gSharedMem\n\ _0801F5D4: .4byte 0x000160e8\n\ _0801F5D8: .4byte 0x000160e9\n\ _0801F5DC:\n\ @@ -5540,7 +5540,7 @@ static void atk23_getexp(void) mov r5, r8\n\ push {r5-r7}\n\ movs r6, 0\n\ - ldr r0, _0802004C @ =0x0201605c\n\ + ldr r0, _0802004C @ =gSharedMem + 0x1605C\n\ mov r10, r0\n\ ldr r0, _08020050 @ =gBattlescriptCurrInstr\n\ ldr r0, [r0]\n\ @@ -5569,7 +5569,7 @@ _08020040:\n\ ldr r0, [r0]\n\ mov pc, r0\n\ .align 2, 0\n\ -_0802004C: .4byte 0x0201605c\n\ +_0802004C: .4byte gSharedMem + 0x1605C\n\ _08020050: .4byte gBattlescriptCurrInstr\n\ _08020054: .4byte gBank1\n\ _08020058: .4byte gSentPokesToOpponent\n\ @@ -5598,7 +5598,7 @@ _0802007C:\n\ cmp r0, 0\n\ beq _080200BC\n\ _08020098:\n\ - ldr r0, _080200B4 @ =0x02000000\n\ + ldr r0, _080200B4 @ =gSharedMem\n\ ldr r1, _080200B8 @ =0x0001600f\n\ adds r0, r1\n\ movs r1, 0x6\n\ @@ -5608,10 +5608,10 @@ _08020098:\n\ _080200A8: .4byte gBank1\n\ _080200AC: .4byte gBattleTypeFlags\n\ _080200B0: .4byte 0x00000982\n\ -_080200B4: .4byte 0x02000000\n\ +_080200B4: .4byte gSharedMem\n\ _080200B8: .4byte 0x0001600f\n\ _080200BC:\n\ - ldr r2, _080200E8 @ =0x02000000\n\ + ldr r2, _080200E8 @ =gSharedMem\n\ ldr r3, _080200EC @ =0x0001600f\n\ adds r1, r2, r3\n\ ldrb r0, [r1]\n\ @@ -5633,7 +5633,7 @@ _080200BC:\n\ strb r0, [r2]\n\ bl _08020996\n\ .align 2, 0\n\ -_080200E8: .4byte 0x02000000\n\ +_080200E8: .4byte gSharedMem\n\ _080200EC: .4byte 0x0001600f\n\ _080200F0: .4byte 0x00016113\n\ _080200F4: .4byte gBitTable\n\ @@ -5760,7 +5760,7 @@ _080201F6:\n\ ldr r0, _08020248 @ =gExpShareExp\n\ strh r6, [r0]\n\ _080201FA:\n\ - ldr r1, _0802024C @ =0x02000000\n\ + ldr r1, _0802024C @ =gSharedMem\n\ ldr r3, _08020250 @ =0x0001600f\n\ adds r2, r1, r3\n\ ldrb r0, [r2]\n\ @@ -5781,7 +5781,7 @@ _08020216:\n\ beq _08020220\n\ b _08020996\n\ _08020220:\n\ - ldr r0, _0802024C @ =0x02000000\n\ + ldr r0, _0802024C @ =gSharedMem\n\ ldr r1, _08020254 @ =0x00016018\n\ adds r0, r1\n\ ldrb r1, [r0]\n\ @@ -5802,7 +5802,7 @@ _08020220:\n\ b _08020274\n\ .align 2, 0\n\ _08020248: .4byte gExpShareExp\n\ -_0802024C: .4byte 0x02000000\n\ +_0802024C: .4byte gSharedMem\n\ _08020250: .4byte 0x0001600f\n\ _08020254: .4byte 0x00016018\n\ _08020258: .4byte 0x0001605f\n\ @@ -5815,7 +5815,7 @@ _0802026C:\n\ lsls r0, 24\n\ lsrs r4, r0, 24\n\ _08020274:\n\ - ldr r5, _08020294 @ =0x02000000\n\ + ldr r5, _08020294 @ =gSharedMem\n\ cmp r4, 0x19\n\ beq _080202A0\n\ ldr r3, _08020298 @ =0x0001605f\n\ @@ -5831,7 +5831,7 @@ _08020274:\n\ adds r1, r5, r0\n\ b _080202C8\n\ .align 2, 0\n\ -_08020294: .4byte 0x02000000\n\ +_08020294: .4byte gSharedMem\n\ _08020298: .4byte 0x0001605f\n\ _0802029C: .4byte 0x0001600f\n\ _080202A0:\n\ @@ -5889,7 +5889,7 @@ _080202E8:\n\ adds r0, 0x1\n\ strb r0, [r5]\n\ _08020316:\n\ - ldr r5, _0802035C @ =0x02000000\n\ + ldr r5, _0802035C @ =gSharedMem\n\ ldr r1, _08020360 @ =0x00016018\n\ adds r0, r5, r1\n\ ldrb r1, [r0]\n\ @@ -5921,7 +5921,7 @@ _0802034C: .4byte gBattleTypeFlags\n\ _08020350: .4byte gBattleMons\n\ _08020354: .4byte 0x0001601b\n\ _08020358: .4byte 0x00000161\n\ -_0802035C: .4byte 0x02000000\n\ +_0802035C: .4byte gSharedMem\n\ _08020360: .4byte 0x00016018\n\ _08020364: .4byte gPlayerParty\n\ _08020368: .4byte 0x0001605f\n\ @@ -5965,7 +5965,7 @@ _0802039C:\n\ bl __divsi3\n\ str r0, [r4]\n\ _080203B8:\n\ - ldr r0, _080203F8 @ =0x02000000\n\ + ldr r0, _080203F8 @ =gSharedMem\n\ ldr r2, _080203FC @ =0x00016018\n\ adds r0, r2\n\ ldrb r1, [r0]\n\ @@ -5992,7 +5992,7 @@ _080203B8:\n\ _080203EC: .4byte gBattleMoveDamage\n\ _080203F0: .4byte gExpShareExp\n\ _080203F4: .4byte gBattleTypeFlags\n\ -_080203F8: .4byte 0x02000000\n\ +_080203F8: .4byte gSharedMem\n\ _080203FC: .4byte 0x00016018\n\ _08020400: .4byte gPlayerParty\n\ _08020404:\n\ @@ -6007,7 +6007,7 @@ _0802040A:\n\ cmp r1, 0\n\ beq _08020488\n\ ldr r1, _08020448 @ =gBattlePartyID\n\ - ldr r0, _0802044C @ =0x02000000\n\ + ldr r0, _0802044C @ =gSharedMem\n\ ldr r3, _08020450 @ =0x00016018\n\ adds r2, r0, r3\n\ ldrh r1, [r1, 0x4]\n\ @@ -6030,7 +6030,7 @@ _0802043C: .4byte 0x00000149\n\ _08020440: .4byte gBattleMoveDamage\n\ _08020444: .4byte gBattleTypeFlags\n\ _08020448: .4byte gBattlePartyID\n\ -_0802044C: .4byte 0x02000000\n\ +_0802044C: .4byte gSharedMem\n\ _08020450: .4byte 0x00016018\n\ _08020454: .4byte gBitTable\n\ _08020458: .4byte gAbsentBankFlags\n\ @@ -6057,7 +6057,7 @@ _0802047C:\n\ .align 2, 0\n\ _08020484: .4byte 0x000160a2\n\ _08020488:\n\ - ldr r0, _08020530 @ =0x02000000\n\ + ldr r0, _08020530 @ =gSharedMem\n\ ldr r3, _08020534 @ =0x000160a2\n\ adds r0, r3\n\ strb r1, [r0]\n\ @@ -6068,7 +6068,7 @@ _08020490:\n\ strb r2, [r1]\n\ movs r5, 0x4\n\ strb r5, [r1, 0x1]\n\ - ldr r4, _08020530 @ =0x02000000\n\ + ldr r4, _08020530 @ =gSharedMem\n\ ldr r0, _08020534 @ =0x000160a2\n\ adds r6, r4, r0\n\ ldrb r0, [r6]\n\ @@ -6132,7 +6132,7 @@ _08020490:\n\ ldrh r1, [r1]\n\ bl MonGainEVs\n\ _0802051E:\n\ - ldr r1, _08020530 @ =0x02000000\n\ + ldr r1, _08020530 @ =gSharedMem\n\ ldr r3, _08020554 @ =0x0001605f\n\ adds r2, r1, r3\n\ ldrb r0, [r2]\n\ @@ -6142,7 +6142,7 @@ _0802051E:\n\ adds r1, r0\n\ b _08020618\n\ .align 2, 0\n\ -_08020530: .4byte 0x02000000\n\ +_08020530: .4byte gSharedMem\n\ _08020534: .4byte 0x000160a2\n\ _08020538: .4byte gBattleTextBuff1\n\ _0802053C: .4byte 0x00016018\n\ @@ -6161,7 +6161,7 @@ _0802055C:\n\ b _08020996\n\ _08020566:\n\ ldr r1, _08020624 @ =gBattleBufferB\n\ - ldr r4, _08020628 @ =0x02000000\n\ + ldr r4, _08020628 @ =gSharedMem\n\ ldr r3, _0802062C @ =0x000160a2\n\ adds r3, r4\n\ mov r8, r3\n\ @@ -6237,7 +6237,7 @@ _08020566:\n\ ldrb r0, [r4]\n\ bl MarkBufferBankForExecution\n\ _08020612:\n\ - ldr r1, _08020628 @ =0x02000000\n\ + ldr r1, _08020628 @ =gSharedMem\n\ ldr r3, _08020644 @ =0x0001600f\n\ adds r1, r3\n\ _08020618:\n\ @@ -6248,7 +6248,7 @@ _08020618:\n\ .align 2, 0\n\ _08020620: .4byte gBattleExecBuffer\n\ _08020624: .4byte gBattleBufferB\n\ -_08020628: .4byte 0x02000000\n\ +_08020628: .4byte gSharedMem\n\ _0802062C: .4byte 0x000160a2\n\ _08020630: .4byte 0x00016018\n\ _08020634: .4byte gPlayerParty\n\ @@ -6264,7 +6264,7 @@ _08020648:\n\ b _08020996\n\ _08020652:\n\ ldr r1, _080208B0 @ =gActiveBank\n\ - ldr r4, _080208B4 @ =0x02000000\n\ + ldr r4, _080208B4 @ =gSharedMem\n\ ldr r2, _080208B8 @ =0x000160a2\n\ adds r0, r4, r2\n\ ldrb r0, [r0]\n\ @@ -6316,7 +6316,7 @@ _080206A8:\n\ ldr r5, _080208B0 @ =gActiveBank\n\ ldrb r0, [r5]\n\ strb r0, [r1, 0x2]\n\ - ldr r0, _080208B4 @ =0x02000000\n\ + ldr r0, _080208B4 @ =gSharedMem\n\ ldr r3, _080208C8 @ =0x00016018\n\ adds r6, r0, r3\n\ ldrb r0, [r6]\n\ @@ -6460,7 +6460,7 @@ _080206A8:\n\ strh r0, [r4, 0xA]\n\ _080207EC:\n\ ldr r0, _080208C4 @ =gBattlePartyID\n\ - ldr r1, _080208B4 @ =0x02000000\n\ + ldr r1, _080208B4 @ =gSharedMem\n\ ldr r3, _080208C8 @ =0x00016018\n\ adds r7, r1, r3\n\ ldrb r2, [r7]\n\ @@ -6549,7 +6549,7 @@ _080207EC:\n\ .align 2, 0\n\ _080208AC: .4byte gBattleExecBuffer\n\ _080208B0: .4byte gActiveBank\n\ -_080208B4: .4byte 0x02000000\n\ +_080208B4: .4byte gSharedMem\n\ _080208B8: .4byte 0x000160a2\n\ _080208BC: .4byte gBattleBufferB\n\ _080208C0: .4byte gBattleTypeFlags\n\ @@ -6569,7 +6569,7 @@ _080208F0:\n\ movs r0, 0\n\ str r0, [r1]\n\ _080208F6:\n\ - ldr r0, _08020908 @ =0x02000000\n\ + ldr r0, _08020908 @ =gSharedMem\n\ ldr r1, _0802090C @ =0x0001600f\n\ adds r0, r1\n\ movs r1, 0x5\n\ @@ -6577,14 +6577,14 @@ _080208F6:\n\ b _08020996\n\ .align 2, 0\n\ _08020904: .4byte gBattleMoveDamage\n\ -_08020908: .4byte 0x02000000\n\ +_08020908: .4byte gSharedMem\n\ _0802090C: .4byte 0x0001600f\n\ _08020910:\n\ ldr r0, _08020924 @ =gBattleMoveDamage\n\ ldr r0, [r0]\n\ cmp r0, 0\n\ beq _08020930\n\ - ldr r0, _08020928 @ =0x02000000\n\ + ldr r0, _08020928 @ =gSharedMem\n\ ldr r2, _0802092C @ =0x0001600f\n\ adds r0, r2\n\ movs r1, 0x3\n\ @@ -6592,10 +6592,10 @@ _08020910:\n\ b _08020996\n\ .align 2, 0\n\ _08020924: .4byte gBattleMoveDamage\n\ -_08020928: .4byte 0x02000000\n\ +_08020928: .4byte gSharedMem\n\ _0802092C: .4byte 0x0001600f\n\ _08020930:\n\ - ldr r2, _08020950 @ =0x02000000\n\ + ldr r2, _08020950 @ =gSharedMem\n\ ldr r3, _08020954 @ =0x00016018\n\ adds r1, r2, r3\n\ ldrb r0, [r1]\n\ @@ -6611,7 +6611,7 @@ _08020930:\n\ strb r0, [r1]\n\ b _08020996\n\ .align 2, 0\n\ -_08020950: .4byte 0x02000000\n\ +_08020950: .4byte gSharedMem\n\ _08020954: .4byte 0x00016018\n\ _08020958: .4byte 0x0001600f\n\ _0802095C:\n\ @@ -7919,7 +7919,7 @@ _0802178C: .4byte gUnknown_02024A98\n\ _08021790:\n\ cmp r3, 0\n\ beq _080217E0\n\ - ldr r0, _080217D0 @ =0x02000000\n\ + ldr r0, _080217D0 @ =gSharedMem\n\ ldr r1, _080217D4 @ =0x000160dc\n\ adds r4, r0, r1\n\ ldrb r0, [r4]\n\ @@ -7949,7 +7949,7 @@ _080217CC:\n\ ldr r1, _080217DC @ =gBattlescriptCurrInstr\n\ b _080217E2\n\ .align 2, 0\n\ -_080217D0: .4byte 0x02000000\n\ +_080217D0: .4byte gSharedMem\n\ _080217D4: .4byte 0x000160dc\n\ _080217D8: .4byte gActiveBank\n\ _080217DC: .4byte gBattlescriptCurrInstr\n\ @@ -7990,7 +7990,7 @@ static void atk49_moveendturn(void) else hold_effect_atk = ItemId_GetHoldEffect(gBattleMons[gBankTarget].item); - choiced_move_atk = (u16*)(gBankAttacker * 0x020160e8); + choiced_move_atk = (u16*)(gBankAttacker * (ewram_addr + 0x160E8)); if (BATTLE_STRUCT->dynamicMoveType) move_type = BATTLE_STRUCT->dynamicMoveType & 0x3F; else @@ -8066,7 +8066,7 @@ static void atk49_moveendturn(void) case 7: //changed held items for (i = 0; i < gNoOfAllBanks; i++) { - #define CHANGED_ITEM (((*u16)(0x020160f0))) + #define CHANGED_ITEM (((*u16)(gSharedMem + 0x160F0))) if (CHANGED_ITEM(i)) gBattleMons[i].item = CHANGED_ITEM(i); } @@ -8162,7 +8162,7 @@ _0802184E:\n\ ldr r0, _0802186C @ =gBankAttacker\n\ ldrb r1, [r0]\n\ lsls r1, 1\n\ - ldr r0, _08021870 @ =0x020160e8\n\ + ldr r0, _08021870 @ =gSharedMem + 0x160E8\n\ adds r1, r0\n\ str r1, [sp, 0xC]\n\ subs r0, 0xCC\n\ @@ -8175,13 +8175,13 @@ _0802184E:\n\ b _080218D2\n\ .align 2, 0\n\ _0802186C: .4byte gBankAttacker\n\ -_08021870: .4byte 0x020160e8\n\ +_08021870: .4byte gSharedMem + 0x160E8\n\ _08021874:\n\ strb r2, [r7]\n\ ldr r0, [r5]\n\ orrs r0, r6\n\ str r0, [r5]\n\ - ldr r0, _080218AC @ =0x02000000\n\ + ldr r0, _080218AC @ =gSharedMem\n\ ldr r3, _080218B0 @ =0x0001600c\n\ adds r0, r3\n\ strb r4, [r0]\n\ @@ -8202,7 +8202,7 @@ _08021874:\n\ ldr r0, _080218BC @ =gUnknown_081D9B2D\n\ bl _0802229C\n\ .align 2, 0\n\ -_080218AC: .4byte 0x02000000\n\ +_080218AC: .4byte gSharedMem\n\ _080218B0: .4byte 0x0001600c\n\ _080218B4: .4byte gBattleScriptsEffectsTable\n\ _080218B8: .4byte gBattlescriptCurrInstr\n\ @@ -8218,13 +8218,13 @@ _080218C0:\n\ ldrb r0, [r0, 0x2]\n\ str r0, [sp, 0x4]\n\ _080218D2:\n\ - ldr r5, _080218E0 @ =0x02000000\n\ + ldr r5, _080218E0 @ =gSharedMem\n\ mov r12, r5\n\ b _080218EE\n\ .align 2, 0\n\ _080218D8: .4byte gBattleMoves\n\ _080218DC: .4byte gCurrentMove\n\ -_080218E0: .4byte 0x02000000\n\ +_080218E0: .4byte gSharedMem\n\ _080218E4:\n\ mov r0, r10\n\ cmp r0, 0\n\ @@ -8349,7 +8349,7 @@ _080219C8:\n\ movs r5, 0x1\n\ mov r10, r5\n\ _080219FE:\n\ - ldr r2, _08021A2C @ =0x02000000\n\ + ldr r2, _08021A2C @ =gSharedMem\n\ ldr r0, _08021A30 @ =0x0001600c\n\ adds r1, r2, r0\n\ b _08021E00\n\ @@ -8363,7 +8363,7 @@ _08021A1C: .4byte gBattleMoves\n\ _08021A20: .4byte gCurrentMove\n\ _08021A24: .4byte gBattlescriptCurrInstr\n\ _08021A28: .4byte gUnknown_081D9132\n\ -_08021A2C: .4byte 0x02000000\n\ +_08021A2C: .4byte gSharedMem\n\ _08021A30: .4byte 0x0001600c\n\ _08021A34:\n\ ldr r2, _08021AD0 @ =gBattleMons\n\ @@ -8471,13 +8471,13 @@ _08021AF0:\n\ movs r4, 0x1\n\ mov r10, r4\n\ _08021B0C:\n\ - ldr r2, _08021B18 @ =0x02000000\n\ + ldr r2, _08021B18 @ =gSharedMem\n\ ldr r5, _08021B1C @ =0x0001600c\n\ adds r1, r2, r5\n\ b _08021E00\n\ .align 2, 0\n\ _08021B14: .4byte gBankTarget\n\ -_08021B18: .4byte 0x02000000\n\ +_08021B18: .4byte gSharedMem\n\ _08021B1C: .4byte 0x0001600c\n\ _08021B20:\n\ ldr r0, _08021B40 @ =gBankTarget\n\ @@ -8511,18 +8511,18 @@ _08021B44:\n\ beq _08021B68\n\ movs r4, 0x1\n\ mov r10, r4\n\ - ldr r5, _08021B64 @ =0x02000000\n\ + ldr r5, _08021B64 @ =gSharedMem\n\ mov r12, r5\n\ b _0802224E\n\ .align 2, 0\n\ -_08021B64: .4byte 0x02000000\n\ +_08021B64: .4byte gSharedMem\n\ _08021B68:\n\ - ldr r2, _08021B70 @ =0x02000000\n\ + ldr r2, _08021B70 @ =gSharedMem\n\ ldr r0, _08021B74 @ =0x0001600c\n\ adds r1, r2, r0\n\ b _08021E00\n\ .align 2, 0\n\ -_08021B70: .4byte 0x02000000\n\ +_08021B70: .4byte gSharedMem\n\ _08021B74: .4byte 0x0001600c\n\ _08021B78:\n\ ldr r0, _08021B98 @ =gBankAttacker\n\ @@ -8636,7 +8636,7 @@ _08021C40:\n\ b _08022244\n\ _08021C4C:\n\ movs r5, 0\n\ - ldr r2, _08021C70 @ =0x020160f0\n\ + ldr r2, _08021C70 @ =gSharedMem + 0x160F0\n\ ldr r3, _08021C74 @ =gBattleMons\n\ _08021C52:\n\ ldrh r1, [r2]\n\ @@ -8654,7 +8654,7 @@ _08021C5C:\n\ b _08022244\n\ .align 2, 0\n\ _08021C6C: .4byte gNoOfAllBanks\n\ -_08021C70: .4byte 0x020160f0\n\ +_08021C70: .4byte gSharedMem + 0x160F0\n\ _08021C74: .4byte gBattleMons\n\ _08021C78:\n\ movs r0, 0x3\n\ @@ -8666,18 +8666,18 @@ _08021C78:\n\ beq _08021C98\n\ movs r2, 0x1\n\ mov r10, r2\n\ - ldr r3, _08021C94 @ =0x02000000\n\ + ldr r3, _08021C94 @ =gSharedMem\n\ mov r12, r3\n\ b _0802224E\n\ .align 2, 0\n\ -_08021C94: .4byte 0x02000000\n\ +_08021C94: .4byte gSharedMem\n\ _08021C98:\n\ - ldr r2, _08021CA0 @ =0x02000000\n\ + ldr r2, _08021CA0 @ =gSharedMem\n\ ldr r4, _08021CA4 @ =0x0001600c\n\ adds r1, r2, r4\n\ b _08021E00\n\ .align 2, 0\n\ -_08021CA0: .4byte 0x02000000\n\ +_08021CA0: .4byte gSharedMem\n\ _08021CA4: .4byte 0x0001600c\n\ _08021CA8:\n\ movs r0, 0x4\n\ @@ -8690,12 +8690,12 @@ _08021CA8:\n\ movs r5, 0x1\n\ mov r10, r5\n\ _08021CBC:\n\ - ldr r2, _08021CC4 @ =0x02000000\n\ + ldr r2, _08021CC4 @ =gSharedMem\n\ ldr r0, _08021CC8 @ =0x0001600c\n\ adds r1, r2, r0\n\ b _08021E00\n\ .align 2, 0\n\ -_08021CC4: .4byte 0x02000000\n\ +_08021CC4: .4byte gSharedMem\n\ _08021CC8: .4byte 0x0001600c\n\ _08021CCC:\n\ ldr r1, _08021D04 @ =gStatuses3\n\ @@ -8783,7 +8783,7 @@ _08021D44:\n\ orrs r1, r2\n\ strb r1, [r0]\n\ _08021D7E:\n\ - ldr r2, _08021DA4 @ =0x02000000\n\ + ldr r2, _08021DA4 @ =gSharedMem\n\ ldr r4, _08021DA8 @ =0x0001600c\n\ adds r1, r2, r4\n\ b _08021E00\n\ @@ -8795,7 +8795,7 @@ _08021D94: .4byte 0x000400c0\n\ _08021D98: .4byte gActiveBank\n\ _08021D9C: .4byte 0xfffbff3f\n\ _08021DA0: .4byte gSpecialStatuses\n\ -_08021DA4: .4byte 0x02000000\n\ +_08021DA4: .4byte gSharedMem\n\ _08021DA8: .4byte 0x0001600c\n\ _08021DAC:\n\ ldr r2, _08021E0C @ =gSpecialStatuses\n\ @@ -8836,7 +8836,7 @@ _08021DAC:\n\ ands r0, r1\n\ str r0, [r2]\n\ _08021DFA:\n\ - ldr r2, _08021E28 @ =0x02000000\n\ + ldr r2, _08021E28 @ =gSharedMem\n\ ldr r3, _08021E2C @ =0x0001600c\n\ adds r1, r2, r3\n\ _08021E00:\n\ @@ -8853,7 +8853,7 @@ _08021E18: .4byte gStatuses3\n\ _08021E1C: .4byte 0x000400c0\n\ _08021E20: .4byte gActiveBank\n\ _08021E24: .4byte 0xfffbff3f\n\ -_08021E28: .4byte 0x02000000\n\ +_08021E28: .4byte gSharedMem\n\ _08021E2C: .4byte 0x0001600c\n\ _08021E30:\n\ movs r4, 0\n\ @@ -9347,7 +9347,7 @@ _0802223A:\n\ ldr r0, [r5]\n\ orrs r0, r6\n\ str r0, [r5]\n\ - ldr r2, _080222D0 @ =0x02000000\n\ + ldr r2, _080222D0 @ =gSharedMem\n\ mov r12, r2\n\ _08022244:\n\ ldr r1, _080222D4 @ =0x0001600c\n\ @@ -9417,7 +9417,7 @@ _080222C0: .4byte gBattleMoves\n\ _080222C4: .4byte gCurrentMove\n\ _080222C8: .4byte gBankTarget\n\ _080222CC: .4byte gBattleMons\n\ -_080222D0: .4byte 0x02000000\n\ +_080222D0: .4byte gSharedMem\n\ _080222D4: .4byte 0x0001600c\n\ _080222D8: .4byte gBattlescriptCurrInstr\n\ .syntax divided" @@ -9930,7 +9930,7 @@ _08022C2C:\n\ lsls r0, 25\n\ cmp r0, 0\n\ blt _08022C6C\n\ - ldr r0, _08022C64 @ =0x02000000\n\ + ldr r0, _08022C64 @ =gSharedMem\n\ ldr r1, _08022C68 @ =0x0001606a\n\ adds r0, r1\n\ ldrb r0, [r0]\n\ @@ -9947,7 +9947,7 @@ _08022C2C:\n\ b _08022C7E\n\ .align 2, 0\n\ _08022C60: .4byte gSpecialStatuses\n\ -_08022C64: .4byte 0x02000000\n\ +_08022C64: .4byte gSharedMem\n\ _08022C68: .4byte 0x0001606a\n\ _08022C6C:\n\ movs r0, 0\n\ @@ -10015,7 +10015,7 @@ _08022CE8:\n\ lsls r0, 25\n\ cmp r0, 0\n\ blt _08022D28\n\ - ldr r0, _08022D20 @ =0x02000000\n\ + ldr r0, _08022D20 @ =gSharedMem\n\ ldr r1, _08022D24 @ =0x00016068\n\ adds r0, r1\n\ ldrb r0, [r0]\n\ @@ -10032,7 +10032,7 @@ _08022CE8:\n\ b _08022D40\n\ .align 2, 0\n\ _08022D1C: .4byte gSpecialStatuses\n\ -_08022D20: .4byte 0x02000000\n\ +_08022D20: .4byte gSharedMem\n\ _08022D24: .4byte 0x00016068\n\ _08022D28:\n\ movs r0, 0x1\n\ @@ -10099,7 +10099,7 @@ _08022DA0:\n\ lsls r0, 25\n\ cmp r0, 0\n\ blt _08022DE0\n\ - ldr r0, _08022DD8 @ =0x02000000\n\ + ldr r0, _08022DD8 @ =gSharedMem\n\ ldr r1, _08022DDC @ =0x0001606b\n\ adds r0, r1\n\ ldrb r0, [r0]\n\ @@ -10116,7 +10116,7 @@ _08022DA0:\n\ b _08022DF6\n\ .align 2, 0\n\ _08022DD4: .4byte gSpecialStatuses\n\ -_08022DD8: .4byte 0x02000000\n\ +_08022DD8: .4byte gSharedMem\n\ _08022DDC: .4byte 0x0001606b\n\ _08022DE0:\n\ movs r0, 0\n\ @@ -10186,7 +10186,7 @@ _08022E60:\n\ lsls r0, 25\n\ cmp r0, 0\n\ blt _08022EA0\n\ - ldr r0, _08022E98 @ =0x02000000\n\ + ldr r0, _08022E98 @ =gSharedMem\n\ ldr r1, _08022E9C @ =0x00016069\n\ adds r0, r1\n\ ldrb r0, [r0]\n\ @@ -10203,7 +10203,7 @@ _08022E60:\n\ b _08022EB8\n\ .align 2, 0\n\ _08022E94: .4byte gSpecialStatuses\n\ -_08022E98: .4byte 0x02000000\n\ +_08022E98: .4byte gSharedMem\n\ _08022E9C: .4byte 0x00016069\n\ _08022EA0:\n\ movs r0, 0x2\n\ @@ -10386,7 +10386,7 @@ _08023008:\n\ lsls r0, 25\n\ cmp r0, 0\n\ blt _0802303A\n\ - ldr r0, _0802309C @ =0x02000000\n\ + ldr r0, _0802309C @ =gSharedMem\n\ ldr r1, _080230A0 @ =0x00016068\n\ adds r0, r1\n\ ldrb r0, [r0]\n\ @@ -10447,7 +10447,7 @@ _0802303A:\n\ b _080230EE\n\ .align 2, 0\n\ _08023098: .4byte gSpecialStatuses\n\ -_0802309C: .4byte 0x02000000\n\ +_0802309C: .4byte gSharedMem\n\ _080230A0: .4byte 0x00016068\n\ _080230A4: .4byte gBitTable\n\ _080230A8: .4byte gActiveBank\n\ @@ -10466,7 +10466,7 @@ _080230BC:\n\ lsls r0, 25\n\ cmp r0, 0\n\ blt _080230EE\n\ - ldr r0, _08023100 @ =0x02000000\n\ + ldr r0, _08023100 @ =gSharedMem\n\ ldr r1, _08023104 @ =0x00016069\n\ adds r0, r1\n\ ldrb r0, [r0]\n\ @@ -10489,7 +10489,7 @@ _080230EE:\n\ b _08023110\n\ .align 2, 0\n\ _080230FC: .4byte gSpecialStatuses\n\ -_08023100: .4byte 0x02000000\n\ +_08023100: .4byte gSharedMem\n\ _08023104: .4byte 0x00016069\n\ _08023108: .4byte gBattlescriptCurrInstr\n\ _0802310C:\n\ @@ -10610,7 +10610,7 @@ _080231F4: .4byte gHitMarker\n\ _080231F8:\n\ ldr r4, _080232A0 @ =gActiveBank\n\ strb r7, [r4]\n\ - ldr r3, _080232A4 @ =0x02000000\n\ + ldr r3, _080232A4 @ =gSharedMem\n\ ldrb r0, [r4]\n\ ldr r2, _080232A8 @ =0x00016064\n\ adds r1, r0, r2\n\ @@ -10691,7 +10691,7 @@ _0802328A:\n\ b _08023302\n\ .align 2, 0\n\ _080232A0: .4byte gActiveBank\n\ -_080232A4: .4byte 0x02000000\n\ +_080232A4: .4byte gSharedMem\n\ _080232A8: .4byte 0x00016064\n\ _080232AC: .4byte gBattlePartyID\n\ _080232B0: .4byte 0x00016068\n\ @@ -11134,7 +11134,7 @@ static void atk5C_hitanimation(void) gBattlescriptCurrInstr += 2; } -#define MONEY_UNKNOWN ((*(u8*)(0x02017000 + 0x94))) +#define MONEY_UNKNOWN ((*(u8*)(ewram_addr + 0x17000 + 0x94))) #ifdef NONMATCHING static void atk5D_getmoneyreward(void) @@ -11208,7 +11208,7 @@ static void atk5D_getmoneyreward(void) lsls r1, 3\n\ cmp r2, r1\n\ bne _08024058\n\ - ldr r0, _0802404C @ =0x02017000\n\ + ldr r0, _0802404C @ =gSharedMem + 0x17000\n\ adds r1, r0, 0\n\ adds r1, 0x94\n\ ldrb r2, [r1]\n\ @@ -11225,7 +11225,7 @@ static void atk5D_getmoneyreward(void) b _08024140\n\ .align 2, 0\n\ _08024048: .4byte gTrainerBattleOpponent\n\ -_0802404C: .4byte 0x02017000\n\ +_0802404C: .4byte gSharedMem + 0x17000\n\ _08024050: .4byte 0xfffff056\n\ _08024054: .4byte gSaveBlock1 + 0x490\n\ _08024058:\n\ @@ -11295,7 +11295,7 @@ _080240C4:\n\ ldrb r1, [r3]\n\ mov r12, r0\n\ lsls r4, r5, 2\n\ - ldr r5, _08024124 @ =0x02000000\n\ + ldr r5, _08024124 @ =gSharedMem\n\ ldr r7, _08024128 @ =gBattleTypeFlags\n\ ldr r0, _0802412C @ =gSaveBlock1 + 0x490\n\ mov r8, r0\n\ @@ -11339,7 +11339,7 @@ _080240FE:\n\ b _08024140\n\ .align 2, 0\n\ _08024120: .4byte gTrainerMoney\n\ -_08024124: .4byte 0x02000000\n\ +_08024124: .4byte gSharedMem\n\ _08024128: .4byte gBattleTypeFlags\n\ _0802412C: .4byte gSaveBlock1 + 0x490\n\ _08024130: .4byte gTrainers\n\ @@ -11678,7 +11678,7 @@ static void atk6C_lvlbox_display(void) sub sp, 0x4\n\ movs r1, 0\n\ movs r7, 0\n\ - ldr r0, _08024928 @ =0x02000000\n\ + ldr r0, _08024928 @ =gSharedMem\n\ mov r10, r0\n\ ldr r4, _0802492C @ =0x0001609c\n\ add r4, r10\n\ @@ -11693,7 +11693,7 @@ _0802491C:\n\ beq _0802493E\n\ b _08024C38\n\ .align 2, 0\n\ -_08024928: .4byte 0x02000000\n\ +_08024928: .4byte gSharedMem\n\ _0802492C: .4byte 0x0001609c\n\ _08024930:\n\ cmp r0, 0x2\n\ @@ -11729,7 +11729,7 @@ _0802495A:\n\ adds r0, r5, 0\n\ bl StringAppend\n\ adds r5, r0, 0\n\ - ldr r0, _080249A8 @ =0x02000000\n\ + ldr r0, _080249A8 @ =gSharedMem\n\ ldr r2, _080249AC @ =0x00016018\n\ adds r0, r2\n\ ldrb r1, [r0]\n\ @@ -11754,7 +11754,7 @@ _0802495A:\n\ _0802499C: .4byte gStringVar4\n\ _080249A0: .4byte gUnknown_08400D9F\n\ _080249A4: .4byte gUnknown_0840165C\n\ -_080249A8: .4byte 0x02000000\n\ +_080249A8: .4byte gSharedMem\n\ _080249AC: .4byte 0x00016018\n\ _080249B0: .4byte gPlayerParty\n\ _080249B4: .4byte gLevelUpStatBoxStats\n\ @@ -11768,37 +11768,37 @@ _080249BC:\n\ .4byte _08024A04\n\ .4byte _08024A10\n\ _080249D4:\n\ - ldr r0, _080249DC @ =0x02017180\n\ + ldr r0, _080249DC @ =gSharedMem + 0x17180\n\ ldrh r0, [r0]\n\ b _08024A14\n\ .align 2, 0\n\ -_080249DC: .4byte 0x02017180\n\ +_080249DC: .4byte gSharedMem + 0x17180\n\ _080249E0:\n\ - ldr r0, _080249E8 @ =0x02017180\n\ + ldr r0, _080249E8 @ =gSharedMem + 0x17180\n\ ldrh r0, [r0, 0x8]\n\ b _08024A14\n\ .align 2, 0\n\ -_080249E8: .4byte 0x02017180\n\ +_080249E8: .4byte gSharedMem + 0x17180\n\ _080249EC:\n\ - ldr r0, _080249F4 @ =0x02017180\n\ + ldr r0, _080249F4 @ =gSharedMem + 0x17180\n\ ldrh r0, [r0, 0x2]\n\ b _08024A14\n\ .align 2, 0\n\ -_080249F4: .4byte 0x02017180\n\ +_080249F4: .4byte gSharedMem + 0x17180\n\ _080249F8:\n\ - ldr r0, _08024A00 @ =0x02017180\n\ + ldr r0, _08024A00 @ =gSharedMem + 0x17180\n\ ldrh r0, [r0, 0xA]\n\ b _08024A14\n\ .align 2, 0\n\ -_08024A00: .4byte 0x02017180\n\ +_08024A00: .4byte gSharedMem + 0x17180\n\ _08024A04:\n\ - ldr r0, _08024A0C @ =0x02017180\n\ + ldr r0, _08024A0C @ =gSharedMem + 0x17180\n\ ldrh r0, [r0, 0x4]\n\ b _08024A14\n\ .align 2, 0\n\ -_08024A0C: .4byte 0x02017180\n\ +_08024A0C: .4byte gSharedMem + 0x17180\n\ _08024A10:\n\ - ldr r0, _08024A54 @ =0x02017180\n\ + ldr r0, _08024A54 @ =gSharedMem + 0x17180\n\ ldrh r0, [r0, 0x6]\n\ _08024A14:\n\ subs r0, r1, r0\n\ @@ -11835,7 +11835,7 @@ _08024A2C:\n\ ldr r1, _08024A58 @ =gUnknown_08400DAC\n\ b _08024A5E\n\ .align 2, 0\n\ -_08024A54: .4byte 0x02017180\n\ +_08024A54: .4byte gSharedMem + 0x17180\n\ _08024A58: .4byte gUnknown_08400DAC\n\ _08024A5C:\n\ ldr r1, _08024AA4 @ =gUnknown_08400DAA\n\ @@ -11902,14 +11902,14 @@ _08024AC4:\n\ bl InitWindow\n\ adds r0, r4, 0\n\ bl sub_8002F44\n\ - ldr r1, _08024AEC @ =0x02000000\n\ + ldr r1, _08024AEC @ =gSharedMem\n\ ldr r2, _08024AF0 @ =0x0001609c\n\ adds r1, r2\n\ b _08024BEA\n\ .align 2, 0\n\ _08024AE4: .4byte gUnknown_03004210\n\ _08024AE8: .4byte gStringVar4\n\ -_08024AEC: .4byte 0x02000000\n\ +_08024AEC: .4byte gSharedMem\n\ _08024AF0: .4byte 0x0001609c\n\ _08024AF4:\n\ ldr r0, _08024B94 @ =gMain\n\ @@ -12023,7 +12023,7 @@ _08024BC0:\n\ bl InitWindow\n\ adds r0, r4, 0\n\ bl sub_8002F44\n\ - ldr r1, _08024BFC @ =0x02000000\n\ + ldr r1, _08024BFC @ =gSharedMem\n\ ldr r0, _08024C00 @ =0x0001609c\n\ adds r1, r0\n\ _08024BEA:\n\ @@ -12034,7 +12034,7 @@ _08024BEA:\n\ .align 2, 0\n\ _08024BF4: .4byte gUnknown_03004210\n\ _08024BF8: .4byte gStringVar4\n\ -_08024BFC: .4byte 0x02000000\n\ +_08024BFC: .4byte gSharedMem\n\ _08024C00: .4byte 0x0001609c\n\ _08024C04:\n\ ldr r0, _08024C2C @ =gMain\n\ @@ -12954,7 +12954,7 @@ _08025F10: .4byte gBattlescriptCurrInstr\n\ _08025F14:\n\ mov r0, r8\n\ bl b_movescr_stack_push\n\ - ldr r0, _08025F40 @ =0x02000000\n\ + ldr r0, _08025F40 @ =gSharedMem\n\ ldr r6, _08025F44 @ =gActiveBank\n\ ldrb r1, [r6]\n\ ldr r2, _08025F48 @ =0x00016003\n\ @@ -12974,7 +12974,7 @@ _08025F14:\n\ strb r1, [r0]\n\ b _08025F74\n\ .align 2, 0\n\ -_08025F40: .4byte 0x02000000\n\ +_08025F40: .4byte gSharedMem\n\ _08025F44: .4byte gActiveBank\n\ _08025F48: .4byte 0x00016003\n\ _08025F4C: .4byte gBattlescriptCurrInstr\n\ @@ -13049,7 +13049,7 @@ _08025FDC: .4byte gBattlescriptCurrInstr\n\ _08025FE0:\n\ mov r0, r8\n\ bl b_movescr_stack_push\n\ - ldr r0, _08026028 @ =0x02000000\n\ + ldr r0, _08026028 @ =gSharedMem\n\ ldr r2, _0802602C @ =gActiveBank\n\ ldrb r1, [r2]\n\ ldr r3, _08026030 @ =0x00016003\n\ @@ -13081,7 +13081,7 @@ _08025FE0:\n\ strb r1, [r0]\n\ b _08025F74\n\ .align 2, 0\n\ -_08026028: .4byte 0x02000000\n\ +_08026028: .4byte gSharedMem\n\ _0802602C: .4byte gActiveBank\n\ _08026030: .4byte 0x00016003\n\ _08026034: .4byte gBattlescriptCurrInstr\n\ @@ -13106,7 +13106,7 @@ _08026040:\n\ bne _08025F74\n\ mov r0, r8\n\ bl b_movescr_stack_push\n\ - ldr r0, _08026094 @ =0x02000000\n\ + ldr r0, _08026094 @ =gSharedMem\n\ ldr r3, _08026090 @ =gActiveBank\n\ ldrb r1, [r3]\n\ ldr r6, _08026098 @ =0x00016003\n\ @@ -13128,7 +13128,7 @@ _08026040:\n\ b _08025F74\n\ .align 2, 0\n\ _08026090: .4byte gActiveBank\n\ -_08026094: .4byte 0x02000000\n\ +_08026094: .4byte gSharedMem\n\ _08026098: .4byte 0x00016003\n\ _0802609C: .4byte gBattlescriptCurrInstr\n\ _080260A0: .4byte BattleScript_AbilityNoSpecificStatLoss\n\ @@ -13154,7 +13154,7 @@ _080260A8:\n\ _080260CA:\n\ mov r0, r8\n\ bl b_movescr_stack_push\n\ - ldr r0, _08026100 @ =0x02000000\n\ + ldr r0, _08026100 @ =gSharedMem\n\ ldr r3, _080260FC @ =gActiveBank\n\ ldrb r1, [r3]\n\ ldr r6, _08026104 @ =0x00016003\n\ @@ -13176,7 +13176,7 @@ _080260CA:\n\ b _08025F74\n\ .align 2, 0\n\ _080260FC: .4byte gActiveBank\n\ -_08026100: .4byte 0x02000000\n\ +_08026100: .4byte gSharedMem\n\ _08026104: .4byte 0x00016003\n\ _08026108: .4byte gBattlescriptCurrInstr\n\ _0802610C: .4byte BattleScript_AbilityNoSpecificStatLoss\n\ @@ -15656,7 +15656,7 @@ push {r4-r7,lr}\n\ bl __divsi3\n\ adds r0, 0x1E\n\ strh r0, [r5]\n\ - ldr r5, _080298A0 @ =0x02000000\n\ + ldr r5, _080298A0 @ =gSharedMem\n\ lsls r0, r4, 4\n\ subs r0, r4\n\ movs r1, 0x3F\n\ @@ -15691,7 +15691,7 @@ _08029876:\n\ _08029894: .4byte gBattleMons\n\ _08029898: .4byte gBankAttacker\n\ _0802989C: .4byte gDynamicBasePower\n\ -_080298A0: .4byte 0x02000000\n\ +_080298A0: .4byte gSharedMem\n\ _080298A4: .4byte 0x0001601c\n\ _080298A8: .4byte gBattlescriptCurrInstr\n\ .syntax divided"); @@ -16372,7 +16372,7 @@ _0802A364: .4byte BattleScript_NoItemSteal\n\ _0802A368: .4byte gLastUsedAbility\n\ _0802A36C:\n\ lsls r0, r4, 1\n\ - ldr r4, _0802A458 @ =0x020160f0\n\ + ldr r4, _0802A458 @ =gSharedMem + 0x160F0\n\ adds r6, r0, r4\n\ ldrh r5, [r5, 0x2E]\n\ mov r10, r5\n\ @@ -16486,7 +16486,7 @@ _0802A36C:\n\ movs r0, 0x2\n\ b _0802A498\n\ .align 2, 0\n\ -_0802A458: .4byte 0x020160f0\n\ +_0802A458: .4byte gSharedMem + 0x160F0\n\ _0802A45C: .4byte gBankAttacker\n\ _0802A460: .4byte gActiveBank\n\ _0802A464: .4byte 0xfffe9f10\n\ @@ -16820,7 +16820,7 @@ _0802AAAE:\n\ mov r9, r6\n\ mov r1, r10\n\ lsls r0, r1, 1\n\ - ldr r1, _0802ABB0 @ =0x02016024\n\ + ldr r1, _0802ABB0 @ =gSharedMem + 0x16024\n\ adds r6, r0, r1\n\ _0802AAF8:\n\ movs r7, 0\n\ @@ -16891,7 +16891,7 @@ _0802AB54:\n\ muls r0, r1\n\ asrs r0, 8\n\ lsls r0, 1\n\ - ldr r1, _0802ABB0 @ =0x02016024\n\ + ldr r1, _0802ABB0 @ =gSharedMem + 0x16024\n\ adds r0, r1\n\ ldrh r0, [r0]\n\ strh r0, [r4]\n\ @@ -16911,7 +16911,7 @@ _0802ABA0: .4byte gPlayerParty\n\ _0802ABA4: .4byte gEnemyParty\n\ _0802ABA8: .4byte gBattlePartyID\n\ _0802ABAC: .4byte 0x0000ffff\n\ -_0802ABB0: .4byte 0x02016024\n\ +_0802ABB0: .4byte gSharedMem + 0x16024\n\ _0802ABB4: .4byte sUnknown_081FACFE\n\ _0802ABB8: .4byte gHitMarker\n\ _0802ABBC: .4byte 0xfffffbff\n\ diff --git a/src/battle/battle_7.c b/src/battle/battle_7.c index ceac8ff24..fe1d0b159 100644 --- a/src/battle/battle_7.c +++ b/src/battle/battle_7.c @@ -284,7 +284,7 @@ void BattleLoadOpponentMonSprite(struct Pokemon *pkmn, u8 b) &gMonFrontPicTable[species], gMonFrontPicCoords[species].coords, gMonFrontPicCoords[species].y_offset, - 0x02000000, + eVoidSharedArr2, gUnknown_081FAF4C[var], species, r7); @@ -336,7 +336,7 @@ void BattleLoadPlayerMonSprite(struct Pokemon *pkmn, u8 b) &gMonBackPicTable[species], gMonBackPicCoords[species].coords, gMonBackPicCoords[species].y_offset, - 0x02000000, + eVoidSharedArr2, gUnknown_081FAF4C[var], species, r7); @@ -379,7 +379,7 @@ void sub_8031A6C(u16 a, u8 b) &gTrainerFrontPicTable[a], gTrainerFrontPicCoords[a].coords, gTrainerFrontPicCoords[a].y_offset, - (void *)0x02000000, + eVoidSharedArr, gUnknown_081FAF4C[status], 0); spriteSheet.data = gUnknown_081FAF4C[status]; @@ -398,7 +398,7 @@ void LoadPlayerTrainerBankSprite(u16 a, u8 b) &gTrainerBackPicTable[a], gTrainerBackPicCoords[a].coords, gTrainerBackPicCoords[a].y_offset, - (void *)0x02000000, + eVoidSharedArr, gUnknown_081FAF4C[status], 0); LoadCompressedPalette(gTrainerBackPicPaletteTable[a].data, 0x100 + b * 16, 32); @@ -495,7 +495,7 @@ bool8 sub_8031C30(u8 a) void load_gfxc_health_bar(void) { - LZDecompressWram(gUnknown_08D09C48, (void *)0x02000000); + LZDecompressWram(gUnknown_08D09C48, eVoidSharedArr); } u8 battle_load_something(u8 *pState, u8 *b) @@ -636,7 +636,7 @@ void sub_8031FC4(u8 a, u8 b, bool8 c) &gMonBackPicTable[species], gMonBackPicCoords[species].coords, gMonBackPicCoords[species].y_offset, - 0x02000000, + eVoidSharedArr2, gUnknown_081FAF4C[0], species, ewram19348.unk10); @@ -656,7 +656,7 @@ void sub_8031FC4(u8 a, u8 b, bool8 c) &gMonBackPicTable[species], gMonBackPicCoords[species].coords, gMonBackPicCoords[species].y_offset, - 0x02000000, + eVoidSharedArr2, gUnknown_081FAF4C[r10], species, gPID_perBank[a]); @@ -669,7 +669,7 @@ void sub_8031FC4(u8 a, u8 b, bool8 c) &gMonFrontPicTable[species], gMonFrontPicCoords[species].coords, gMonFrontPicCoords[species].y_offset, - 0x02000000, + eVoidSharedArr2, gUnknown_081FAF4C[r10], species, gPID_perBank[a]); diff --git a/src/battle/battle_ai.c b/src/battle/battle_ai.c index 5145d4980..cb6c10676 100644 --- a/src/battle/battle_ai.c +++ b/src/battle/battle_ai.c @@ -1017,7 +1017,7 @@ static void BattleAICmd_is_most_powerful_move(void) ldrh r1, [r0]\n\ ldr r4, _0810832C @ =0x0000ffff\n\ ldr r6, _08108330 @ =gBattleMoves\n\ - ldr r5, _08108334 @ =0x02016800\n\ + ldr r5, _08108334 @ =gSharedMem + 0x16800\n\ cmp r1, r4\n\ beq _0810822E\n\ ldrh r1, [r5, 0x2]\n\ @@ -1150,7 +1150,7 @@ _081082BA:\n\ mov r4, sp\n\ add r4, r8\n\ ldr r2, _08108358 @ =gBattleMoveDamage\n\ - ldr r0, _08108334 @ =0x02016800\n\ + ldr r0, _08108334 @ =gSharedMem + 0x16800\n\ adds r0, 0x18\n\ adds r0, r6, r0\n\ ldrb r1, [r0]\n\ @@ -1168,7 +1168,7 @@ _081082BA:\n\ _08108328: .4byte sDiscouragedPowerfulMoveEffects\n\ _0810832C: .4byte 0x0000ffff\n\ _08108330: .4byte gBattleMoves\n\ -_08108334: .4byte 0x02016800\n\ +_08108334: .4byte gSharedMem + 0x16800\n\ _08108338: .4byte gDynamicBasePower\n\ _0810833C: .4byte 0xfffff81c\n\ _08108340: .4byte gBattleMoveFlags\n\ @@ -1188,7 +1188,7 @@ _08108364:\n\ cmp r6, 0x3\n\ ble _08108276\n\ movs r6, 0\n\ - ldr r1, _081083A4 @ =0x02016800\n\ + ldr r1, _081083A4 @ =gSharedMem + 0x16800\n\ ldrb r0, [r1, 0x1]\n\ lsls r0, 2\n\ add r0, sp\n\ @@ -1219,7 +1219,7 @@ _0810839A:\n\ str r0, [r5, 0x8]\n\ b _081083B8\n\ .align 2, 0\n\ -_081083A4: .4byte 0x02016800\n\ +_081083A4: .4byte gSharedMem + 0x16800\n\ _081083A8: .4byte gAIScriptPtr\n\ _081083AC:\n\ movs r0, 0x1\n\ diff --git a/src/battle/battle_anim.c b/src/battle/battle_anim.c index 408a21f86..1a78b2863 100644 --- a/src/battle/battle_anim.c +++ b/src/battle/battle_anim.c @@ -801,7 +801,7 @@ _08075FDC:\n\ cmp r0, 0\n\ bne _0807601C\n\ lsls r0, r5, 2\n\ - ldr r1, _08076020 @ =0x02017800\n\ + ldr r1, _08076020 @ =gSharedMem + 0x17800\n\ adds r0, r1\n\ ldrb r1, [r0]\n\ movs r0, 0x1\n\ @@ -825,7 +825,7 @@ _0807601C:\n\ movs r0, 0x1\n\ b _0807602E\n\ .align 2, 0\n\ -_08076020: .4byte 0x02017800\n\ +_08076020: .4byte gSharedMem + 0x17800\n\ _08076024: .4byte gSprites\n\ _08076028: .4byte gObjectBankIDs\n\ _0807602C:\n\ @@ -1533,7 +1533,7 @@ s8 sub_8076F98(s8 a) lsls r0, r2, 1\n\ adds r0, r2\n\ lsls r0, 2\n\ - ldr r1, _08076FD8 @ =0x02017810\n\ + ldr r1, _08076FD8 @ =gSharedMem + 0x17810\n\ adds r0, r1\n\ ldrb r1, [r0]\n\ movs r0, 0x10\n\ @@ -1550,7 +1550,7 @@ s8 sub_8076F98(s8 a) b _0807706E\n\ .align 2, 0\n\ _08076FD4: .4byte gBattleAnimBankAttacker\n\ -_08076FD8: .4byte 0x02017810\n\ +_08076FD8: .4byte gSharedMem + 0x17810\n\ _08076FDC:\n\ bl NotInBattle\n\ lsls r0, 24\n\ diff --git a/src/battle/battle_interface.c b/src/battle/battle_interface.c index 09837bfee..0bd2e882f 100644 --- a/src/battle/battle_interface.c +++ b/src/battle/battle_interface.c @@ -700,11 +700,11 @@ static void sub_8043FC0(u8 a, u8 b) *(ptr++) = 0x13; *(ptr++) = 0xF; *(ptr++) = EOS; - sub_80034D4((u8 *)0x02000000, str); + sub_80034D4(ewram0_9(0), str); two = 2; for (i = 0; i < two; i++) - CpuCopy32((void *)(0x02000020 + i * 64), r7[i] + gSprites[a].oam.tileNum * 32, 32); + CpuCopy32((void *)(ewram0_9(1) + i * 64), r7[i] + gSprites[a].oam.tileNum * 32, 32); } #ifdef NONMATCHING @@ -738,7 +738,7 @@ void sub_80440EC(u8 a, s16 b, u8 c) ptr = sub_8003504(ptr, b, 0x13, 1); *(ptr++) = 0xBA; *(ptr++) = 0xFF; - sub_80034D4((u8 *)0x02000000, str); + sub_80034D4(ewram0_9(0), str); } else { @@ -748,14 +748,14 @@ void sub_80440EC(u8 a, s16 b, u8 c) r4 = gUnknown_0820A85C; c = 2; sub_8003504(ptr, b, 0xF, 1); - sub_80034D4((u8 *)0x02000000, str); + sub_80034D4(ewram0_9(0), str); } //asm(""::"r"(a)); //_080441B6 for (i = 0; i < c; i++) // _080440BC { void *temp = r4[i] + gSprites[a].oam.tileNum * 32; - CpuCopy32((void *)(0x02000020 + i * 0x40), temp, 0x20); + CpuCopy32((void *)(ewram0_9(1) + i * 0x40), temp, 0x20); } } #else @@ -873,7 +873,7 @@ _080441B6:\n\ lsls r0, 2\n\ adds r6, r0, r1\n\ adds r7, r4, 0\n\ - ldr r5, _08044208 @ =0x02000020\n\ + ldr r5, _08044208 @ =gSharedMem + 0x20\n\ mov r4, r8\n\ _080441D6:\n\ ldrh r0, [r6, 0x4]\n\ @@ -899,7 +899,7 @@ _080441F0:\n\ _080441FC: .4byte gUnknown_0820A85C\n\ _08044200: .4byte gUnknown_0820A854\n\ _08044204: .4byte gSprites\n\ -_08044208: .4byte 0x02000020\n\ +_08044208: .4byte gSharedMem + 0x20\n\ _0804420C: .4byte 0x04000008\n\ .syntax divided\n"); } @@ -939,10 +939,10 @@ static void sub_8044210(u8 a, s16 b, u8 c) } } r4 = gSprites[a].data5; - sub_80034D4((u8 *)0x02000000, str); + sub_80034D4(ewram0_9(0), str); for (i = 0; i < r10; i++) { - CpuCopy32((void *)(0x02000020 + i * 0x40), r7[i] + gSprites[r4].oam.tileNum * 32, 0x20); + CpuCopy32((void *)(ewram0_9(1) + i * 0x40), r7[i] + gSprites[r4].oam.tileNum * 32, 0x20); } } @@ -999,19 +999,19 @@ void sub_8044338(u8 a, struct Pokemon *pkmn) ConvertIntToDecimalStringN(str + 9, ewram16088, 1, 2); str[5] = 0; str[8] = 0xBA; - sub_80034D4((u8 *)0x02000000, str); + sub_80034D4(ewram0_9(0), str); for (r7 = 0; r7 < 5; r7++) { if (r7 <= 1) { int foo = (gSprites[r5].oam.tileNum + 2 + r7); - CpuCopy32((u8 *)0x02000020 + r7 * 0x40, (u8 *)0x06010000 + foo * 32, 32); + CpuCopy32(ewram0_9(1) + r7 * 0x40, (u8 *)0x06010000 + foo * 32, 32); } else { int foo = (r7 + gSprites[r5].oam.tileNum); - CpuCopy32((u8 *)0x02000020 + r7 * 0x40, (u8 *)0x060100C0 + foo * 32, 32); + CpuCopy32(ewram0_9(1) + r7 * 0x40, (u8 *)0x060100C0 + foo * 32, 32); } } } @@ -1049,7 +1049,7 @@ void sub_8044338(u8 a, struct Pokemon *pkmn) lsls r1, r0, 1\n\ adds r1, r0\n\ lsls r1, 7\n\ - ldr r3, _080443D4 @ =0x02000520\n\ + ldr r3, _080443D4 @ =gSharedMem + 0x520\n\ adds r6, r1, r3\n\ movs r0, 0x5\n\ mov r8, r0\n\ @@ -1094,7 +1094,7 @@ _080443C8:\n\ .align 2, 0\n\ _080443CC: .4byte gUnknown_0820A864\n\ _080443D0: .4byte gSprites\n\ -_080443D4: .4byte 0x02000520\n\ +_080443D4: .4byte gSharedMem + 0x520\n\ _080443D8: .4byte gNatureNames\n\ _080443DC:\n\ adds r0, r1, 0\n\ @@ -1193,7 +1193,7 @@ _08044486:\n\ ldrh r5, [r0, 0x38]\n\ lsls r5, 24\n\ lsrs r5, 24\n\ - ldr r4, _08044504 @ =0x02000000\n\ + ldr r4, _08044504 @ =gSharedMem\n\ ldr r2, _08044508 @ =0x00016089\n\ adds r0, r4, r2\n\ ldrb r1, [r0]\n\ @@ -1222,7 +1222,7 @@ _08044486:\n\ adds r0, r5\n\ lsls r0, 2\n\ adds r5, r0, r6\n\ - ldr r4, _08044510 @ =0x02000020\n\ + ldr r4, _08044510 @ =gSharedMem + 0x20\n\ _080444DA:\n\ cmp r7, 0x1\n\ bgt _08044514\n\ @@ -1242,10 +1242,10 @@ _080444DA:\n\ _080444F8: .4byte 0x04000008\n\ _080444FC: .4byte gSprites\n\ _08044500: .4byte 0x06010000\n\ -_08044504: .4byte 0x02000000\n\ +_08044504: .4byte gSharedMem\n\ _08044508: .4byte 0x00016089\n\ _0804450C: .4byte 0x00016088\n\ -_08044510: .4byte 0x02000020\n\ +_08044510: .4byte gSharedMem + 0x20\n\ _08044514:\n\ ldrh r1, [r5, 0x4]\n\ lsls r1, 22\n\ @@ -2409,7 +2409,7 @@ static void sub_80451A0(u8 a, struct Pokemon *pkmn) ptr[1] = 0x13; ptr[2] = 0x37; ptr[3] = EOS; - ptr = (u8 *)0x02000520 + GetBankIdentity(gSprites[a].data6) * 0x180; + ptr = ewram520_2 + GetBankIdentity(gSprites[a].data6) * 0x180; sub_80034D4(ptr, gDisplayedStringBattle); i = 0; @@ -2657,7 +2657,7 @@ static void sub_80458B0(u8 a) s32 r7; u8 *addr; - r6 = (u8 *)0x02000520 + GetBankIdentity(gSprites[a].data6) * 0x180; + r6 = ewram520_2 + GetBankIdentity(gSprites[a].data6) * 0x180; r8 = 7; sub_80034D4(r6, BattleText_SafariBalls); for (i = 0; i < r8; i++) @@ -2686,10 +2686,10 @@ static void sub_8045998(u8 a) r7 = sub_8003504(r7, gNumSafariBalls, 10, 1); StringAppend(r7, BattleText_HighlightRed); status = GetBankIdentity(gSprites[a].data6); - r7 = (u8 *)0x02000520 + status * 0x180; + r7 = ewram520_2 + status * 0x180; r6 = 5; sub_80034D4(r7, gDisplayedStringBattle); - r7 = (u8 *)0x02000520 + status * 0x180 + 32; + r7 = ewram520_2 + status * 0x180 + 32; for (i = 6; i < 6 + r6; i++) { CpuCopy32(r7, OBJ_VRAM0 + (gSprites[a].oam.tileNum + 0x18 + MACRO1(i)) * 32, 32); diff --git a/src/de_rom_8040FE0.c b/src/de_rom_8040FE0.c index 8adad3245..53ad4a806 100644 --- a/src/de_rom_8040FE0.c +++ b/src/de_rom_8040FE0.c @@ -165,7 +165,7 @@ _0804104A:\n\ bl GetSecretBaseTrainerNameIndex\n\ lsls r0, 24\n\ lsrs r5, r0, 24\n\ - ldr r0, _08041060 @ =0x02017000\n\ + ldr r0, _08041060 @ =gSharedMem + 0x17000\n\ ldrb r0, [r0, 0x1]\n\ lsls r0, 27\n\ lsrs r2, r0, 31\n\ @@ -173,7 +173,7 @@ _0804104A:\n\ beq _080410B8\n\ b _080410F8\n\ .align 2, 0\n\ -_08041060: .4byte 0x02017000\n\ +_08041060: .4byte gSharedMem + 0x17000\n\ _08041064:\n\ bl de_sub_81364AC\n\ lsls r0, 24\n\ diff --git a/src/engine/decompress.c b/src/engine/decompress.c index 3e5993118..0893a8492 100644 --- a/src/engine/decompress.c +++ b/src/engine/decompress.c @@ -3,8 +3,9 @@ #include "data2.h" #include "species.h" #include "text.h" +#include "ewram.h" -#define WRAM 0x02000000 +#define WRAM ewram_addr // using gSharedMem doesn't match void LZDecompressWram(const void *src, void *dest) { diff --git a/src/engine/trade.c b/src/engine/trade.c index 7477b05ac..41146a22c 100644 --- a/src/engine/trade.c +++ b/src/engine/trade.c @@ -4175,7 +4175,7 @@ static __attribute__((naked)) void sub_804B41C(void) "\tbl ResetTasks\n" "\tbl CloseLink\n" "\tldr r6, _0804B570 @ =gUnknown_03004828\n" - "\tldr r5, _0804B574 @ =0x0201f000\n" + "\tldr r5, _0804B574 @ =gSharedMem + 0x1F000\n" "\tstr r5, [r6]\n" "\tbl ResetSpriteData\n" "\tbl FreeAllSpritePalettes\n" @@ -4277,7 +4277,7 @@ static __attribute__((naked)) void sub_804B41C(void) "\tb _0804B76E_break\n" "\t.align 2, 0\n" "_0804B570: .4byte gUnknown_03004828\n" - "_0804B574: .4byte 0x0201f000\n" + "_0804B574: .4byte gSharedMem + 0x1F000\n" "_0804B578: .4byte sub_804B210\n" "_0804B57C: .4byte gWindowConfig_81E6F84\n" "_0804B580: .4byte gLinkType\n" diff --git a/src/engine/trainer_card.c b/src/engine/trainer_card.c index 025d19ffc..6d105f512 100644 --- a/src/engine/trainer_card.c +++ b/src/engine/trainer_card.c @@ -808,7 +808,7 @@ bool8 sub_8093AF0(struct Task *task) push {r5-r7}\n\ sub sp, 0x4\n\ mov r8, r0\n\ - ldr r1, _08093BFC @ =0x02000000\n\ + ldr r1, _08093BFC @ =gSharedMem\n\ movs r0, 0\n\ strb r0, [r1, 0x4]\n\ mov r2, r8\n\ @@ -921,7 +921,7 @@ _08093BBE:\n\ ble _08093BBE\n\ _08093BD4:\n\ movs r0, 0x1\n\ - ldr r1, _08093BFC @ =0x02000000\n\ + ldr r1, _08093BFC @ =gSharedMem\n\ strb r0, [r1, 0x4]\n\ mov r2, r8\n\ movs r4, 0xA\n\ @@ -942,7 +942,7 @@ _08093BEA:\n\ pop {r1}\n\ bx r1\n\ .align 2, 0\n\ -_08093BFC: .4byte 0x02000000\n\ +_08093BFC: .4byte gSharedMem\n\ _08093C00: .4byte 0xffff0000\n\ _08093C04: .4byte gUnknown_03004DE0\n\ _08093C08: .4byte 0x0000fffc\n\ @@ -970,7 +970,7 @@ bool8 sub_8093C38(struct Task *task) push {r5-r7}\n\ sub sp, 0x4\n\ mov r8, r0\n\ - ldr r1, _08093D40 @ =0x02000000\n\ + ldr r1, _08093D40 @ =gSharedMem\n\ movs r2, 0\n\ strb r2, [r1, 0x4]\n\ ldrh r0, [r0, 0xA]\n\ @@ -1081,7 +1081,7 @@ _08093D02:\n\ ble _08093D02\n\ _08093D18:\n\ movs r0, 0x1\n\ - ldr r1, _08093D40 @ =0x02000000\n\ + ldr r1, _08093D40 @ =gSharedMem\n\ strb r0, [r1, 0x4]\n\ mov r2, r8\n\ movs r3, 0xA\n\ @@ -1102,7 +1102,7 @@ _08093D2E:\n\ pop {r1}\n\ bx r1\n\ .align 2, 0\n\ -_08093D40: .4byte 0x02000000\n\ +_08093D40: .4byte gSharedMem\n\ _08093D44: .4byte 0xffff0000\n\ _08093D48: .4byte gUnknown_03004DE0\n\ _08093D4C: .4byte 0x0000fffc\n\ diff --git a/src/field/party_menu.c b/src/field/party_menu.c index 25fd63463..42bb66f6f 100644 --- a/src/field/party_menu.c +++ b/src/field/party_menu.c @@ -1109,7 +1109,7 @@ _0806B980:\n\ movs r3, 0x3\n\ bl sub_806BA94\n\ _0806B98C:\n\ - ldr r0, _0806B99C @ =0x0201b000\n\ + ldr r0, _0806B99C @ =gSharedMem + 0x1B000\n\ ldr r1, _0806B9A0 @ =0x00000261\n\ adds r0, r1\n\ movs r1, 0x2\n\ @@ -1118,7 +1118,7 @@ _0806B98C:\n\ pop {r0}\n\ bx r0\n\ .align 2, 0\n\ -_0806B99C: .4byte 0x0201b000\n\ +_0806B99C: .4byte gSharedMem + 0x1B000\n\ _0806B9A0: .4byte 0x00000261\n\ .syntax divided\n"); } @@ -2548,7 +2548,7 @@ void sub_806CF04(void) { asm(".syntax unified\n\ push {r4,r5,lr}\n\ - ldr r4, _0806CF94 @ =0x02001000\n\ + ldr r4, _0806CF94 @ =gSharedMem + 0x1000\n\ ldrb r1, [r4, 0x3]\n\ lsls r0, r1, 4\n\ adds r0, r1\n\ @@ -2616,7 +2616,7 @@ void sub_806CF04(void) pop {r0}\n\ bx r0\n\ .align 2, 0\n\ -_0806CF94: .4byte 0x02001000\n\ +_0806CF94: .4byte gSharedMem + 0x1000\n\ _0806CF98: .4byte gSprites + 0x20\n\ _0806CF9C: .4byte SpriteCB_sub_806D37C\n\ .syntax divided\n"); @@ -5033,7 +5033,7 @@ void PrintStatGrowthsInLevelUpWindow(u8 taskId) { movs r2, 0x13\n\ mov r8, r2\n\ _0807086C:\n\ - ldr r1, _08070930 @ =0x0201c000\n\ + ldr r1, _08070930 @ =gSharedMem + 0x1C000\n\ ldr r0, [r1]\n\ ldr r1, _08070934 @ =StatDataTypes\n\ adds r1, r7, r1\n\ @@ -5041,7 +5041,7 @@ _0807086C:\n\ bl GetMonData\n\ adds r1, r7, 0x6\n\ lsls r1, 1\n\ - ldr r2, _08070938 @ =0x0201b264\n\ + ldr r2, _08070938 @ =gSharedMem + 0x1B264\n\ adds r1, r2, r1\n\ strh r0, [r1]\n\ lsls r6, r7, 1\n\ @@ -5123,9 +5123,9 @@ _0807086C:\n\ bx r0\n\ .align 2, 0\n\ _0807092C: .4byte gStringVar1\n\ -_08070930: .4byte 0x0201c000\n\ +_08070930: .4byte gSharedMem + 0x1C000\n\ _08070934: .4byte StatDataTypes\n\ -_08070938: .4byte 0x0201b264\n\ +_08070938: .4byte gSharedMem + 0x1B264\n\ _0807093C: .4byte StatNames\n\ _08070940: .4byte gOtherText_TallPlusAndRightArrow\n\ .syntax divided\n"); diff --git a/src/field/shop.c b/src/field/shop.c index 67e9b006e..493d8c748 100644 --- a/src/field/shop.c +++ b/src/field/shop.c @@ -279,7 +279,7 @@ void BuyMenuDrawGraphics(void) register const u32 zero asm("r6") = 0; DmaFill32(3, zero, addr, OAM_SIZE); LZDecompressVram(gBuyMenuFrame_Gfx, (void*)(VRAM + 0x7C00)); - LZDecompressWram(gBuyMenuFrame_Tilemap, (void *)0x02018000); + LZDecompressWram(gBuyMenuFrame_Tilemap, ewram18000_2); LoadCompressedPalette(gMenuMoneyPal, 0xC0, sizeof(gMenuMoneyPal)); FreeAllSpritePalettes(); ResetPaletteFade(); diff --git a/src/field/slot_machine.c b/src/field/slot_machine.c index d6b20feaa..89ec68b0a 100644 --- a/src/field/slot_machine.c +++ b/src/field/slot_machine.c @@ -3,6 +3,7 @@ #include "decompress.h" #include "palette.h" #include "task.h" +#include "ewram.h" struct UnkStruct2000000 { /*0x00*/ u8 filler00[61]; @@ -15,8 +16,6 @@ struct UnkStruct1 { /*0x02*/ s16 unk02; }; -extern struct UnkStruct2000000 gSharedMem; - extern struct UnkStruct1 *gUnknown_083ED048[]; extern const u16 gPalette_83EDE24[]; @@ -40,7 +39,7 @@ void sub_8104CAC(u8 arg0) { sub_8104DA4(); - task = &gTasks[gSharedMem.unk3D]; + task = &gTasks[ewram0_8->unk3D]; task->data[1] = arg0; i = 0; @@ -71,9 +70,9 @@ void sub_8106448(void) { u32 offsetRead, offsetWrite; u32 size; - LZDecompressWram(gSlotMachine_Gfx, (void *) 0x02010000); + LZDecompressWram(gSlotMachine_Gfx, ewram10000_2); - offsetRead = 0x02010000; + offsetRead = (u32)ewram10000_2; offsetWrite = BG_VRAM; size = SLOTMACHINE_GFX_TILES * 32; while (TRUE) diff --git a/src/pokemon/pokedex.c b/src/pokemon/pokedex.c index 947dfd218..18e98ca5f 100644 --- a/src/pokemon/pokedex.c +++ b/src/pokemon/pokedex.c @@ -24,6 +24,7 @@ #include "task.h" #include "trig.h" #include "unknown_task.h" +#include "ewram.h" #define NATIONAL_DEX_COUNT 386 @@ -954,86 +955,86 @@ static const struct OamData gOamData_83B557C = }; static void *const gUnknown_083B5584[] = { - (void *)0x02008000, - (void *)0x0200C000, - (void *)0x02010000, - (void *)0x02014000, + ePokedexPalAddr1, + ePokedexPalAddr2, + ePokedexPalAddr3, + ePokedexPalAddr4, }; static const struct SpriteFrameImage gSpriteImageTable_83B5594[] = { - {(u8 *)0x02008000, 0x800}, - {(u8 *)0x02008800, 0x800}, - {(u8 *)0x02009000, 0x800}, - {(u8 *)0x02009800, 0x800}, - {(u8 *)0x0200A000, 0x800}, - {(u8 *)0x0200A800, 0x800}, - {(u8 *)0x0200B000, 0x800}, - {(u8 *)0x0200B800, 0x800}, - {(u8 *)0x0200C000, 0x800}, - {(u8 *)0x0200C800, 0x800}, - {(u8 *)0x0200D000, 0x800}, - {(u8 *)0x0200D800, 0x800}, - {(u8 *)0x0200E000, 0x800}, - {(u8 *)0x0200E800, 0x800}, - {(u8 *)0x0200F000, 0x800}, - {(u8 *)0x0200F800, 0x800}, + {ewram8000, 0x800}, + {ewram8800, 0x800}, + {ewram9000, 0x800}, + {ewram9800, 0x800}, + {ewramA000, 0x800}, + {ewramA800, 0x800}, + {ewramB000, 0x800}, + {ewramB800, 0x800}, + {ewramC000, 0x800}, + {ewramC800, 0x800}, + {ewramD000, 0x800}, + {ewramD800, 0x800}, + {ewramE000, 0x800}, + {ewramE800, 0x800}, + {ewramF000, 0x800}, + {ewramF800, 0x800}, }; static const struct SpriteFrameImage gSpriteImageTable_83B5614[] = { - {(u8 *)0x0200C000, 0x800}, - {(u8 *)0x0200C800, 0x800}, - {(u8 *)0x0200D000, 0x800}, - {(u8 *)0x0200D800, 0x800}, - {(u8 *)0x0200E000, 0x800}, - {(u8 *)0x0200E800, 0x800}, - {(u8 *)0x0200F000, 0x800}, - {(u8 *)0x0200F800, 0x800}, - {(u8 *)0x02010000, 0x800}, - {(u8 *)0x02010800, 0x800}, - {(u8 *)0x02011000, 0x800}, - {(u8 *)0x02011800, 0x800}, - {(u8 *)0x02012000, 0x800}, - {(u8 *)0x02012800, 0x800}, - {(u8 *)0x02013000, 0x800}, - {(u8 *)0x02013800, 0x800}, + {ewramC000, 0x800}, + {ewramC800, 0x800}, + {ewramD000, 0x800}, + {ewramD800, 0x800}, + {ewramE000, 0x800}, + {ewramE800, 0x800}, + {ewramF000, 0x800}, + {ewramF800, 0x800}, + {ewram10000, 0x800}, + {ewram10800, 0x800}, + {ewram11000, 0x800}, + {ewram11800, 0x800}, + {ewram12000, 0x800}, + {ewram12800, 0x800}, + {ewram13000, 0x800}, + {ewram13800, 0x800}, }; static const struct SpriteFrameImage gSpriteImageTable_83B5694[] = { - {(u8 *)0x02010000, 0x800}, - {(u8 *)0x02010800, 0x800}, - {(u8 *)0x02011000, 0x800}, - {(u8 *)0x02011800, 0x800}, - {(u8 *)0x02012000, 0x800}, - {(u8 *)0x02012800, 0x800}, - {(u8 *)0x02013000, 0x800}, - {(u8 *)0x02013800, 0x800}, - {(u8 *)0x02014000, 0x800}, - {(u8 *)0x02014800, 0x800}, - {(u8 *)0x02015000, 0x800}, - {(u8 *)0x02015800, 0x800}, - {(u8 *)0x02016000, 0x800}, - {(u8 *)0x02016800, 0x800}, - {(u8 *)0x02017000, 0x800}, - {(u8 *)0x02017800, 0x800}, + {ewram10000, 0x800}, + {ewram10800, 0x800}, + {ewram11000, 0x800}, + {ewram11800, 0x800}, + {ewram12000, 0x800}, + {ewram12800, 0x800}, + {ewram13000, 0x800}, + {ewram13800, 0x800}, + {ewram14000, 0x800}, + {ewram14800, 0x800}, + {ewram15000, 0x800}, + {ewram15800, 0x800}, + {ewram16000_2, 0x800}, + {ewram16800, 0x800}, + {ewram17000, 0x800}, + {ewram17800_2, 0x800}, }; static const struct SpriteFrameImage gSpriteImageTable_83B5714[] = { - {(u8 *)0x02014000, 0x800}, - {(u8 *)0x02014800, 0x800}, - {(u8 *)0x02015000, 0x800}, - {(u8 *)0x02015800, 0x800}, - {(u8 *)0x02016000, 0x800}, - {(u8 *)0x02016800, 0x800}, - {(u8 *)0x02017000, 0x800}, - {(u8 *)0x02017800, 0x800}, - {(u8 *)0x02018000, 0x800}, - {(u8 *)0x02018800, 0x800}, - {(u8 *)0x02019000, 0x800}, - {(u8 *)0x02019800, 0x800}, - {(u8 *)0x0201A000, 0x800}, - {(u8 *)0x0201A800, 0x800}, - {(u8 *)0x0201B000, 0x800}, - {(u8 *)0x0201B800, 0x800}, + {ewram14000, 0x800}, + {ewram14800, 0x800}, + {ewram15000, 0x800}, + {ewram15800, 0x800}, + {ewram16000_2, 0x800}, + {ewram16800, 0x800}, + {ewram17000, 0x800}, + {ewram17800_2, 0x800}, + {ewram18000_2, 0x800}, + {ewram18800, 0x800}, + {ewram19000, 0x800}, + {ewram19800, 0x800}, + {ewram1A000, 0x800}, + {ewram1A800, 0x800}, + {ewram1B000_2, 0x800}, + {ewram1B800, 0x800}, }; static const struct SpriteFrameImage *const gUnknown_083B5794[] = { @@ -1275,8 +1276,8 @@ static void sub_8091564(u16 weight, u8 i, u8 i1); static void sub_8091738(u16, u16, u16); static void sub_80917CC(u16 i, u16 i1); static u16 sub_8091818(u8, u16, u16, u16); -static u16 sub_80918EC(u16 a, s16 b, s16 c, u16 d); -static u8 sub_8091A4C(u16 gender, s16, s16, u16); +u16 sub_80918EC(u16 a, s16 b, s16 c, u16 d); +u8 sub_8091A4C(u16 gender, s16, s16, u16); static void sub_8091E54(u8); static void sub_809204C(u8); static void sub_809207C(u8); @@ -1433,16 +1434,16 @@ void CB2_InitPokedex(void) { case 0: default: - gPokedexView = (struct PokedexView *)0x02018000; + gPokedexView = ePokedexView1; break; case 1: - gPokedexView = (struct PokedexView *)0x02018800; + gPokedexView = ePokedexView2; break; case 2: - gPokedexView = (struct PokedexView *)0x02019000; + gPokedexView = ePokedexView3; break; case 3: - gPokedexView = (struct PokedexView *)0x02019800; + gPokedexView = ePokedexView4; break; } ClearPokedexView(gPokedexView); @@ -4557,7 +4558,7 @@ u16 sub_80918EC(u16 num, s16 x, s16 y, u16 paletteNum) &gMonFrontPicTable[num], gMonFrontPicCoords[num].coords, gMonFrontPicCoords[num].y_offset, - (void *)0x02000000, + (void*)ewram_addr, gUnknown_083B5584[paletteNum], num); break; @@ -4566,7 +4567,7 @@ u16 sub_80918EC(u16 num, s16 x, s16 y, u16 paletteNum) &gMonFrontPicTable[num], gMonFrontPicCoords[num].coords, gMonFrontPicCoords[num].y_offset, - 0x02000000, + ewram_addr, gUnknown_083B5584[paletteNum], num, gSaveBlock2.pokedex.spindaPersonality, @@ -4577,7 +4578,7 @@ u16 sub_80918EC(u16 num, s16 x, s16 y, u16 paletteNum) &gMonFrontPicTable[num], gMonFrontPicCoords[num].coords, gMonFrontPicCoords[num].y_offset, - 0x02000000, + ewram_addr, gUnknown_083B5584[paletteNum], num, gSaveBlock2.pokedex.unownPersonality, @@ -4591,7 +4592,7 @@ u16 sub_80918EC(u16 num, s16 x, s16 y, u16 paletteNum) return spriteId; } -static u8 sub_8091A4C(u16 gender, s16 x, s16 y, u16 paletteNum) +u8 sub_8091A4C(u16 gender, s16 x, s16 y, u16 paletteNum) { u8 spriteId; @@ -4599,7 +4600,7 @@ static u8 sub_8091A4C(u16 gender, s16 x, s16 y, u16 paletteNum) &gTrainerFrontPicTable[gender], gTrainerFrontPicCoords[gender].coords, gTrainerFrontPicCoords[gender].y_offset, - (void *)0x02000000, + (void*)ewram_addr, gUnknown_083B5584[0], gender); sub_80918B0(gender, 0); diff --git a/src/scene/contest_painting.c b/src/scene/contest_painting.c index 0f745b391..2600076c3 100644 --- a/src/scene/contest_painting.c +++ b/src/scene/contest_painting.c @@ -109,7 +109,7 @@ void sub_8106630(u32 arg0) { asm(".syntax unified\n\ push {r4-r7,lr}\n\ - ldr r2, _0810665C @ =0x02015de0\n\ + ldr r2, _0810665C @ =gSharedMem + 0x15DE0\n\ subs r4, r2, 0x2\n\ subs r5, r2, 0x1\n\ ldr r3, _08106660 @ =gSaveBlock1\n\ @@ -131,7 +131,7 @@ void sub_8106630(u32 arg0) pop {r0}\n\ bx r0\n\ .align 2, 0\n\ -_0810665C: .4byte 0x02015de0\n\ +_0810665C: .4byte gSharedMem + 0x15DE0\n\ _08106660: .4byte gSaveBlock1\n\ _08106664: .4byte 0x00002dfc\n\ .syntax divided\n"); diff --git a/src/scene/evolution_scene.c b/src/scene/evolution_scene.c index 742f663f6..755176c81 100644 --- a/src/scene/evolution_scene.c +++ b/src/scene/evolution_scene.c @@ -1520,7 +1520,7 @@ __attribute__((naked)) void unref_sub_8113B50() { asm(".syntax unified\n\ - push {r4-r7,lr}\n\ + push {r4-r7,lr}\n\ mov r7, r10\n\ mov r6, r9\n\ mov r5, r8\n\ @@ -1534,7 +1534,7 @@ void unref_sub_8113B50() str r1, [sp, 0x10]\n\ movs r2, 0\n\ str r2, [sp, 0x8]\n\ - ldr r3, _08113C60 @ =0x02014800\n\ + ldr r3, _08113C60 @ =gSharedMem + 0x14800\n\ mov r12, r3\n\ ldr r4, _08113C64 @ =0x000018c4\n\ add r4, r12\n\ @@ -1551,7 +1551,7 @@ _08113B7C:\n\ adds r0, r3, 0x4\n\ adds r0, r1, r0\n\ strb r2, [r0]\n\ - ldr r4, _08113C6C @ =0x02014844\n\ + ldr r4, _08113C6C @ =gSharedMem + 0x14844\n\ adds r0, r1, r4\n\ strb r2, [r0]\n\ movs r6, 0\n\ @@ -1562,7 +1562,7 @@ _08113B7C:\n\ _08113B9C:\n\ mov r0, r9\n\ adds r1, r6, r0\n\ - ldr r5, _08113C70 @ =0x020158c4\n\ + ldr r5, _08113C70 @ =gSharedMem + 0x158C4\n\ adds r0, r1, r5\n\ strb r2, [r0]\n\ mov r5, r10\n\ @@ -1571,7 +1571,7 @@ _08113B9C:\n\ mov r5, r8\n\ adds r0, r1, r5\n\ strb r2, [r0]\n\ - ldr r5, _08113C74 @ =0x020170c4\n\ + ldr r5, _08113C74 @ =gSharedMem + 0x170C4\n\ adds r0, r1, r5\n\ strb r2, [r0]\n\ adds r7, r3, 0\n\ @@ -1652,7 +1652,7 @@ _08113C4A:\n\ asrs r0, r6, 1\n\ lsls r0, 2\n\ add r0, r10\n\ - ldr r1, _08113C98 @ =0x020188c4\n\ + ldr r1, _08113C98 @ =gSharedMem + 0x188C4\n\ adds r0, r1\n\ str r2, [r0]\n\ cmp r3, 0\n\ @@ -1661,12 +1661,12 @@ _08113C4A:\n\ beq _08113CC6\n\ b _08113CF4\n\ .align 2, 0\n\ -_08113C60: .4byte 0x02014800\n\ +_08113C60: .4byte gSharedMem + 0x14800\n\ _08113C64: .4byte 0x000018c4\n\ _08113C68: .4byte 0x000020c4\n\ -_08113C6C: .4byte 0x02014844\n\ -_08113C70: .4byte 0x020158c4\n\ -_08113C74: .4byte 0x020170c4\n\ +_08113C6C: .4byte gSharedMem + 0x14844\n\ +_08113C70: .4byte gSharedMem + 0x158C4\n\ +_08113C74: .4byte gSharedMem + 0x170C4\n\ _08113C78: .4byte 0x000008c4\n\ _08113C7C: .4byte 0x000030c4\n\ _08113C80: .4byte 0x000038c4\n\ @@ -1675,7 +1675,7 @@ _08113C88: .4byte 0x000070c4\n\ _08113C8C: .4byte 0x000080c4\n\ _08113C90: .4byte 0x000090c4\n\ _08113C94: .4byte 0x0000a0c4\n\ -_08113C98: .4byte 0x020188c4\n\ +_08113C98: .4byte gSharedMem + 0x188C4\n\ _08113C9C:\n\ movs r0, 0x1\n\ ands r0, r6\n\ @@ -1782,7 +1782,7 @@ _08113D4A:\n\ mov r8, r2\n\ movs r3, 0\n\ str r3, [sp, 0x8]\n\ - ldr r0, _08113D84 @ =0x02014844\n\ + ldr r0, _08113D84 @ =gSharedMem + 0x14844\n\ movs r4, 0x82\n\ lsls r4, 6\n\ adds r4, r0\n\ @@ -1809,7 +1809,7 @@ _08113D78:\n\ beq _08113DB4\n\ b _08113DE4\n\ .align 2, 0\n\ -_08113D84: .4byte 0x02014844\n\ +_08113D84: .4byte gSharedMem + 0x14844\n\ _08113D88:\n\ adds r0, r6, 0\n\ mov r1, r9\n\ @@ -1915,9 +1915,9 @@ _08113E28:\n\ str r1, [sp, 0x8]\n\ _08113E3A:\n\ ldr r3, [sp, 0x8]\n\ - ldr r4, _08113EBC @ =0x02014804\n\ + ldr r4, _08113EBC @ =gSharedMem + 0x14804\n\ adds r2, r3, r4\n\ - ldr r5, _08113EC0 @ =0x02014844\n\ + ldr r5, _08113EC0 @ =gSharedMem + 0x14844\n\ adds r1, r3, r5\n\ ldrb r0, [r2]\n\ adds r3, 0x1\n\ @@ -1932,7 +1932,7 @@ _08113E52:\n\ ldrb r2, [r2]\n\ cmp r0, r2\n\ bge _08113F54\n\ - ldr r0, _08113EC4 @ =0x02014800\n\ + ldr r0, _08113EC4 @ =gSharedMem + 0x14800\n\ adds r0, 0x4\n\ ldr r1, [sp, 0x8]\n\ adds r0, r1, r0\n\ @@ -1943,7 +1943,7 @@ _08113E66:\n\ str r2, [sp, 0x14]\n\ movs r6, 0\n\ ldr r3, [sp, 0x8]\n\ - ldr r4, _08113EC0 @ =0x02014844\n\ + ldr r4, _08113EC0 @ =gSharedMem + 0x14844\n\ adds r0, r3, r4\n\ ldr r5, [sp, 0xC]\n\ adds r5, 0x1\n\ @@ -1951,18 +1951,18 @@ _08113E66:\n\ ldrb r0, [r0]\n\ cmp r6, r0\n\ bge _08113F3E\n\ - ldr r0, _08113EC4 @ =0x02014800\n\ + ldr r0, _08113EC4 @ =gSharedMem + 0x14800\n\ mov r10, r0\n\ lsls r0, r3, 5\n\ ldr r2, [sp, 0xC]\n\ adds r1, r2, r0\n\ mov r9, r0\n\ - ldr r0, _08113EC4 @ =0x02014800\n\ + ldr r0, _08113EC4 @ =gSharedMem + 0x14800\n\ adds r0, 0xC4\n\ mov r3, r9\n\ adds r7, r3, r0\n\ mov r5, r9\n\ - ldr r4, _08113EC4 @ =0x02014800\n\ + ldr r4, _08113EC4 @ =gSharedMem + 0x14800\n\ ldr r2, _08113EC8 @ =0x000010c4\n\ adds r0, r4, r2\n\ adds r1, r0\n\ @@ -1982,9 +1982,9 @@ _08113EA4:\n\ ldrb r0, [r0]\n\ b _08113ED6\n\ .align 2, 0\n\ -_08113EBC: .4byte 0x02014804\n\ -_08113EC0: .4byte 0x02014844\n\ -_08113EC4: .4byte 0x02014800\n\ +_08113EBC: .4byte gSharedMem + 0x14804\n\ +_08113EC0: .4byte gSharedMem + 0x14844\n\ +_08113EC4: .4byte gSharedMem + 0x14800\n\ _08113EC8: .4byte 0x000010c4\n\ _08113ECC: .4byte 0x000020c4\n\ _08113ED0:\n\ @@ -2002,7 +2002,7 @@ _08113ED6:\n\ add r0, r10\n\ adds r2, r5, r0\n\ ldrb r0, [r4]\n\ - ldr r1, _08113F04 @ =0x02014800\n\ + ldr r1, _08113F04 @ =gSharedMem + 0x14800\n\ mov r12, r1\n\ ldrb r1, [r2]\n\ cmp r0, r1\n\ @@ -2013,7 +2013,7 @@ _08113ED6:\n\ .align 2, 0\n\ _08113EFC: .4byte 0x000018c4\n\ _08113F00: .4byte 0x000028c4\n\ -_08113F04: .4byte 0x02014800\n\ +_08113F04: .4byte gSharedMem + 0x14800\n\ _08113F08:\n\ ldrb r1, [r2]\n\ ldrb r0, [r4]\n\ @@ -2039,7 +2039,7 @@ _08113F2C:\n\ adds r5, 0x1\n\ adds r6, 0x1\n\ ldr r3, [sp, 0x8]\n\ - ldr r4, _08114054 @ =0x02014844\n\ + ldr r4, _08114054 @ =gSharedMem + 0x14844\n\ adds r0, r3, r4\n\ ldrb r0, [r0]\n\ cmp r6, r0\n\ @@ -2057,9 +2057,9 @@ _08113F3E:\n\ blt _08113E66\n\ _08113F54:\n\ movs r6, 0\n\ - ldr r2, _08114058 @ =0x02014800\n\ + ldr r2, _08114058 @ =gSharedMem + 0x14800\n\ ldr r1, [sp, 0x8]\n\ - ldr r3, _08114054 @ =0x02014844\n\ + ldr r3, _08114054 @ =gSharedMem + 0x14844\n\ adds r0, r1, r3\n\ adds r4, r2, 0\n\ mov r12, r4\n\ @@ -2090,15 +2090,15 @@ _08113F6E:\n\ bl sub_811430C\n\ _08113F94:\n\ adds r6, 0x1\n\ - ldr r2, _08114058 @ =0x02014800\n\ + ldr r2, _08114058 @ =gSharedMem + 0x14800\n\ ldrb r5, [r4]\n\ cmp r6, r5\n\ blt _08113F6E\n\ _08113F9E:\n\ ldr r0, [sp, 0x8]\n\ - ldr r1, _0811405C @ =0x02014804\n\ + ldr r1, _0811405C @ =gSharedMem + 0x14804\n\ adds r2, r0, r1\n\ - ldr r3, _08114054 @ =0x02014844\n\ + ldr r3, _08114054 @ =gSharedMem + 0x14844\n\ adds r1, r0, r3\n\ ldrb r0, [r2]\n\ ldrb r1, [r1]\n\ @@ -2120,12 +2120,12 @@ _08113FBA:\n\ blt _08113FBA\n\ _08113FCC:\n\ ldr r0, [sp, 0x8]\n\ - ldr r1, _0811405C @ =0x02014804\n\ + ldr r1, _0811405C @ =gSharedMem + 0x14804\n\ adds r2, r0, r1\n\ - ldr r3, _08114054 @ =0x02014844\n\ + ldr r3, _08114054 @ =gSharedMem + 0x14844\n\ adds r1, r0, r3\n\ ldrb r0, [r2]\n\ - ldr r4, _08114058 @ =0x02014800\n\ + ldr r4, _08114058 @ =gSharedMem + 0x14800\n\ ldrb r5, [r1]\n\ cmp r0, r5\n\ bhi _08113FE2\n\ @@ -2165,16 +2165,16 @@ _08114004:\n\ ldr r2, [sp, 0x24]\n\ adds r1, r2\n\ mov r10, r1\n\ - ldr r0, _08114058 @ =0x02014800\n\ + ldr r0, _08114058 @ =gSharedMem + 0x14800\n\ adds r0, 0xC4\n\ adds r2, r0\n\ mov r8, r2\n\ ldr r7, [sp, 0x24]\n\ - ldr r3, _08114058 @ =0x02014800\n\ + ldr r3, _08114058 @ =gSharedMem + 0x14800\n\ ldr r4, _08114060 @ =0x000010c4\n\ adds r0, r3, r4\n\ adds r5, r7, r0\n\ - ldr r0, _08114064 @ =0x020168c4\n\ + ldr r0, _08114064 @ =gSharedMem + 0x168C4\n\ add r0, r10\n\ mov r12, r0\n\ ldrb r1, [r0]\n\ @@ -2190,22 +2190,22 @@ _0811403E:\n\ b _0811406E\n\ .align 2, 0\n\ _08114050: .4byte 0x000008c4\n\ -_08114054: .4byte 0x02014844\n\ -_08114058: .4byte 0x02014800\n\ -_0811405C: .4byte 0x02014804\n\ +_08114054: .4byte gSharedMem + 0x14844\n\ +_08114058: .4byte gSharedMem + 0x14800\n\ +_0811405C: .4byte gSharedMem + 0x14804\n\ _08114060: .4byte 0x000010c4\n\ -_08114064: .4byte 0x020168c4\n\ +_08114064: .4byte gSharedMem + 0x168C4\n\ _08114068:\n\ mov r4, r12\n\ ldrb r1, [r4]\n\ ldrb r0, [r5]\n\ _0811406E:\n\ subs r3, r1, r0\n\ - ldr r1, _0811408C @ =0x02014800\n\ + ldr r1, _0811408C @ =gSharedMem + 0x14800\n\ ldr r2, _08114090 @ =0x000018c4\n\ adds r0, r1, r2\n\ adds r4, r7, r0\n\ - ldr r2, _08114094 @ =0x020170c4\n\ + ldr r2, _08114094 @ =gSharedMem + 0x170C4\n\ add r2, r10\n\ ldrb r0, [r4]\n\ ldrb r1, [r2]\n\ @@ -2215,9 +2215,9 @@ _0811406E:\n\ ldrb r0, [r2]\n\ b _0811409C\n\ .align 2, 0\n\ -_0811408C: .4byte 0x02014800\n\ +_0811408C: .4byte gSharedMem + 0x14800\n\ _08114090: .4byte 0x000018c4\n\ -_08114094: .4byte 0x020170c4\n\ +_08114094: .4byte gSharedMem + 0x170C4\n\ _08114098:\n\ ldrb r1, [r2]\n\ ldrb r0, [r4]\n\ @@ -2246,25 +2246,25 @@ _081140B2:\n\ _081140C4:\n\ ldr r3, [sp, 0xC]\n\ add r3, r9\n\ - ldr r2, _08114164 @ =0x02014800\n\ + ldr r2, _08114164 @ =gSharedMem + 0x14800\n\ ldr r4, _08114168 @ =0x000030c4\n\ adds r1, r2, r4\n\ adds r1, r3, r1\n\ ldr r2, [sp, 0x10]\n\ add r2, r9\n\ - ldr r5, _0811416C @ =0x020168c4\n\ + ldr r5, _0811416C @ =gSharedMem + 0x168C4\n\ adds r0, r2, r5\n\ ldrb r0, [r0]\n\ strb r0, [r1]\n\ - ldr r0, _08114164 @ =0x02014800\n\ + ldr r0, _08114164 @ =gSharedMem + 0x14800\n\ ldr r4, _08114170 @ =0x000038c4\n\ adds r1, r0, r4\n\ adds r1, r3, r1\n\ - ldr r5, _08114174 @ =0x020170c4\n\ + ldr r5, _08114174 @ =gSharedMem + 0x170C4\n\ adds r2, r5\n\ ldrb r0, [r2]\n\ strb r0, [r1]\n\ - ldr r0, _08114164 @ =0x02014800\n\ + ldr r0, _08114164 @ =gSharedMem + 0x14800\n\ adds r0, 0xC4\n\ adds r3, r0\n\ movs r0, 0x1\n\ @@ -2278,9 +2278,9 @@ _081140C4:\n\ b _08114004\n\ _08114104:\n\ movs r6, 0\n\ - ldr r4, _08114164 @ =0x02014800\n\ + ldr r4, _08114164 @ =gSharedMem + 0x14800\n\ ldr r2, [sp, 0x8]\n\ - ldr r3, _08114178 @ =0x02014804\n\ + ldr r3, _08114178 @ =gSharedMem + 0x14804\n\ adds r0, r2, r3\n\ ldrb r0, [r0]\n\ cmp r6, r0\n\ @@ -2325,12 +2325,12 @@ _0811411E:\n\ bl sub_81141F0\n\ b _081141B4\n\ .align 2, 0\n\ -_08114164: .4byte 0x02014800\n\ +_08114164: .4byte gSharedMem + 0x14800\n\ _08114168: .4byte 0x000030c4\n\ -_0811416C: .4byte 0x020168c4\n\ +_0811416C: .4byte gSharedMem + 0x168C4\n\ _08114170: .4byte 0x000038c4\n\ -_08114174: .4byte 0x020170c4\n\ -_08114178: .4byte 0x02014804\n\ +_08114174: .4byte gSharedMem + 0x170C4\n\ +_08114178: .4byte gSharedMem + 0x14804\n\ _0811417C: .4byte 0x000020c4\n\ _08114180: .4byte 0x000028c4\n\ _08114184:\n\ @@ -2359,9 +2359,9 @@ _08114184:\n\ bl sub_81141F0\n\ _081141B4:\n\ adds r6, 0x1\n\ - ldr r4, _081141E8 @ =0x02014800\n\ + ldr r4, _081141E8 @ =gSharedMem + 0x14800\n\ ldr r1, [sp, 0x8]\n\ - ldr r2, _081141EC @ =0x02014804\n\ + ldr r2, _081141EC @ =gSharedMem + 0x14804\n\ adds r0, r1, r2\n\ ldrb r0, [r0]\n\ cmp r6, r0\n\ @@ -2384,8 +2384,8 @@ _081141CE:\n\ .align 2, 0\n\ _081141E0: .4byte 0x000010c4\n\ _081141E4: .4byte 0x000018c4\n\ -_081141E8: .4byte 0x02014800\n\ -_081141EC: .4byte 0x02014804\n\ +_081141E8: .4byte gSharedMem + 0x14800\n\ +_081141EC: .4byte gSharedMem + 0x14804\n\ .syntax divided"); } @@ -2453,7 +2453,7 @@ void unref_sub_81143CC() sub sp, 0x14\n\ movs r0, 0x1\n\ str r0, [sp, 0x4]\n\ - ldr r0, _08114408 @ =0x02014800\n\ + ldr r0, _08114408 @ =gSharedMem + 0x14800\n\ ldr r2, _0811440C @ =0x0000a0c4\n\ adds r1, r0, r2\n\ ldrb r3, [r1]\n\ @@ -2476,7 +2476,7 @@ _081143F2:\n\ str r1, [sp, 0x8]\n\ bl _08114D84\n\ .align 2, 0\n\ -_08114408: .4byte 0x02014800\n\ +_08114408: .4byte gSharedMem + 0x14800\n\ _0811440C: .4byte 0x0000a0c4\n\ _08114410:\n\ ldr r5, [sp]\n\ @@ -2583,7 +2583,7 @@ _081144EC: .4byte 0x000020c4\n\ _081144F0:\n\ movs r2, 0\n\ str r2, [sp, 0x4]\n\ - ldr r4, _08114568 @ =0x02014800\n\ + ldr r4, _08114568 @ =gSharedMem + 0x14800\n\ lsls r0, r3, 1\n\ ldr r5, [sp]\n\ lsls r1, r5, 6\n\ @@ -2643,7 +2643,7 @@ _08114548:\n\ blt _0811453E\n\ b _081148D2\n\ .align 2, 0\n\ -_08114568: .4byte 0x02014800\n\ +_08114568: .4byte gSharedMem + 0x14800\n\ _0811456C: .4byte 0x000060c4\n\ _08114570: .4byte 0x000080c4\n\ _08114574: .4byte 0x000030c4\n\ @@ -2717,7 +2717,7 @@ _081145FC: .4byte 0x000020c4\n\ _08114600:\n\ movs r2, 0\n\ str r2, [sp, 0x4]\n\ - ldr r4, _08114678 @ =0x02014800\n\ + ldr r4, _08114678 @ =gSharedMem + 0x14800\n\ lsls r0, r3, 1\n\ ldr r5, [sp]\n\ lsls r1, r5, 6\n\ @@ -2777,7 +2777,7 @@ _08114658:\n\ blt _0811464E\n\ b _081148D2\n\ .align 2, 0\n\ -_08114678: .4byte 0x02014800\n\ +_08114678: .4byte gSharedMem + 0x14800\n\ _0811467C: .4byte 0x000060c4\n\ _08114680: .4byte 0x000080c4\n\ _08114684: .4byte 0x000030c4\n\ @@ -2785,7 +2785,7 @@ _08114688: .4byte 0x000020c4\n\ _0811468C:\n\ movs r2, 0\n\ str r2, [sp, 0x4]\n\ - ldr r5, _081146C0 @ =0x02014800\n\ + ldr r5, _081146C0 @ =gSharedMem + 0x14800\n\ mov r0, r8\n\ adds r4, r3, r0\n\ ldr r1, _081146C4 @ =0x000030c4\n\ @@ -2810,12 +2810,12 @@ _081146B4:\n\ strb r1, [r0]\n\ b _081148D2\n\ .align 2, 0\n\ -_081146C0: .4byte 0x02014800\n\ +_081146C0: .4byte gSharedMem + 0x14800\n\ _081146C4: .4byte 0x000030c4\n\ _081146C8:\n\ movs r4, 0\n\ str r4, [sp, 0x4]\n\ - ldr r5, _081146FC @ =0x02014800\n\ + ldr r5, _081146FC @ =gSharedMem + 0x14800\n\ mov r0, r8\n\ adds r4, r3, r0\n\ ldr r1, _08114700 @ =0x000030c4\n\ @@ -2840,12 +2840,12 @@ _081146F0:\n\ strb r1, [r0]\n\ b _081148D2\n\ .align 2, 0\n\ -_081146FC: .4byte 0x02014800\n\ +_081146FC: .4byte gSharedMem + 0x14800\n\ _08114700: .4byte 0x000030c4\n\ _08114704:\n\ movs r4, 0\n\ str r4, [sp, 0x4]\n\ - ldr r5, _08114738 @ =0x02014800\n\ + ldr r5, _08114738 @ =gSharedMem + 0x14800\n\ mov r0, r8\n\ adds r4, r3, r0\n\ ldr r1, _0811473C @ =0x000030c4\n\ @@ -2870,12 +2870,12 @@ _0811472C:\n\ strb r1, [r0]\n\ b _081148D2\n\ .align 2, 0\n\ -_08114738: .4byte 0x02014800\n\ +_08114738: .4byte gSharedMem + 0x14800\n\ _0811473C: .4byte 0x000030c4\n\ _08114740:\n\ movs r4, 0\n\ str r4, [sp, 0x4]\n\ - ldr r5, _08114774 @ =0x02014800\n\ + ldr r5, _08114774 @ =gSharedMem + 0x14800\n\ mov r0, r8\n\ adds r4, r3, r0\n\ ldr r1, _08114778 @ =0x000030c4\n\ @@ -2900,12 +2900,12 @@ _08114768:\n\ strb r1, [r0]\n\ b _081148D2\n\ .align 2, 0\n\ -_08114774: .4byte 0x02014800\n\ +_08114774: .4byte gSharedMem + 0x14800\n\ _08114778: .4byte 0x000030c4\n\ _0811477C:\n\ movs r4, 0\n\ str r4, [sp, 0x4]\n\ - ldr r6, _081147B4 @ =0x02014800\n\ + ldr r6, _081147B4 @ =gSharedMem + 0x14800\n\ mov r0, r8\n\ adds r5, r3, r0\n\ ldr r1, _081147B8 @ =0x000030c4\n\ @@ -2931,7 +2931,7 @@ _0811477C:\n\ strb r4, [r0]\n\ b _08114844\n\ .align 2, 0\n\ -_081147B4: .4byte 0x02014800\n\ +_081147B4: .4byte gSharedMem + 0x14800\n\ _081147B8: .4byte 0x000030c4\n\ _081147BC: .4byte 0x000020c4\n\ _081147C0:\n\ @@ -2946,7 +2946,7 @@ _081147C0:\n\ _081147D0:\n\ movs r1, 0\n\ str r1, [sp, 0x4]\n\ - ldr r6, _08114804 @ =0x02014800\n\ + ldr r6, _08114804 @ =gSharedMem + 0x14800\n\ mov r2, r8\n\ adds r5, r3, r2\n\ ldr r0, _08114808 @ =0x000030c4\n\ @@ -2970,13 +2970,13 @@ _081147D0:\n\ movs r1, 0x2\n\ b _08114842\n\ .align 2, 0\n\ -_08114804: .4byte 0x02014800\n\ +_08114804: .4byte gSharedMem + 0x14800\n\ _08114808: .4byte 0x000030c4\n\ _0811480C: .4byte 0x000020c4\n\ _08114810:\n\ movs r0, 0\n\ str r0, [sp, 0x4]\n\ - ldr r6, _0811484C @ =0x02014800\n\ + ldr r6, _0811484C @ =gSharedMem + 0x14800\n\ mov r1, r8\n\ adds r5, r3, r1\n\ ldr r2, _08114850 @ =0x000030c4\n\ @@ -3005,13 +3005,13 @@ _08114844:\n\ mov r10, r5\n\ b _081148D2\n\ .align 2, 0\n\ -_0811484C: .4byte 0x02014800\n\ +_0811484C: .4byte gSharedMem + 0x14800\n\ _08114850: .4byte 0x000030c4\n\ _08114854: .4byte 0x000020c4\n\ _08114858:\n\ movs r0, 0\n\ str r0, [sp, 0x4]\n\ - ldr r6, _08114894 @ =0x02014800\n\ + ldr r6, _08114894 @ =gSharedMem + 0x14800\n\ mov r1, r8\n\ adds r5, r3, r1\n\ ldr r2, _08114898 @ =0x000030c4\n\ @@ -3040,7 +3040,7 @@ _08114882:\n\ mov r10, r4\n\ b _081148D2\n\ .align 2, 0\n\ -_08114894: .4byte 0x02014800\n\ +_08114894: .4byte gSharedMem + 0x14800\n\ _08114898: .4byte 0x000030c4\n\ _0811489C: .4byte 0x000020c4\n\ _081148A0:\n\ @@ -3073,7 +3073,7 @@ _081148C4:\n\ adds r2, r3, 0x1\n\ mov r10, r2\n\ _081148D2:\n\ - ldr r0, _081148F4 @ =0x02014800\n\ + ldr r0, _081148F4 @ =gSharedMem + 0x14800\n\ mov r4, r8\n\ adds r1, r3, r4\n\ ldr r5, _081148F8 @ =0x000008c4\n\ @@ -3091,7 +3091,7 @@ _081148E8:\n\ ldr r0, [r0]\n\ mov pc, r0\n\ .align 2, 0\n\ -_081148F4: .4byte 0x02014800\n\ +_081148F4: .4byte gSharedMem + 0x14800\n\ _081148F8: .4byte 0x000008c4\n\ _081148FC: .4byte _08114900\n\ .align 2, 0\n\ @@ -3177,7 +3177,7 @@ _081149B4: .4byte 0x000028c4\n\ _081149B8:\n\ movs r2, 0\n\ str r2, [sp, 0x4]\n\ - ldr r4, _08114A28 @ =0x02014800\n\ + ldr r4, _08114A28 @ =gSharedMem + 0x14800\n\ lsls r0, r3, 1\n\ ldr r5, [sp]\n\ lsls r1, r5, 6\n\ @@ -3233,7 +3233,7 @@ _08114A0C:\n\ blt _08114A02\n\ b _08114D76\n\ .align 2, 0\n\ -_08114A28: .4byte 0x02014800\n\ +_08114A28: .4byte gSharedMem + 0x14800\n\ _08114A2C: .4byte 0x000070c4\n\ _08114A30: .4byte 0x000090c4\n\ _08114A34: .4byte 0x000038c4\n\ @@ -3306,7 +3306,7 @@ _08114ABC: .4byte 0x000028c4\n\ _08114AC0:\n\ movs r2, 0\n\ str r2, [sp, 0x4]\n\ - ldr r4, _08114B30 @ =0x02014800\n\ + ldr r4, _08114B30 @ =gSharedMem + 0x14800\n\ lsls r0, r3, 1\n\ ldr r5, [sp]\n\ lsls r1, r5, 6\n\ @@ -3362,7 +3362,7 @@ _08114B14:\n\ blt _08114B0A\n\ b _08114D76\n\ .align 2, 0\n\ -_08114B30: .4byte 0x02014800\n\ +_08114B30: .4byte gSharedMem + 0x14800\n\ _08114B34: .4byte 0x000070c4\n\ _08114B38: .4byte 0x000090c4\n\ _08114B3C: .4byte 0x000038c4\n\ @@ -3370,7 +3370,7 @@ _08114B40: .4byte 0x000028c4\n\ _08114B44:\n\ movs r2, 0\n\ str r2, [sp, 0x4]\n\ - ldr r5, _08114B70 @ =0x02014800\n\ + ldr r5, _08114B70 @ =gSharedMem + 0x14800\n\ mov r0, r8\n\ adds r4, r3, r0\n\ ldr r1, _08114B74 @ =0x000038c4\n\ @@ -3390,13 +3390,13 @@ _08114B64:\n\ movs r1, 0x9\n\ b _08114D74\n\ .align 2, 0\n\ -_08114B70: .4byte 0x02014800\n\ +_08114B70: .4byte gSharedMem + 0x14800\n\ _08114B74: .4byte 0x000038c4\n\ _08114B78: .4byte 0x000008c4\n\ _08114B7C:\n\ movs r4, 0\n\ str r4, [sp, 0x4]\n\ - ldr r5, _08114BA8 @ =0x02014800\n\ + ldr r5, _08114BA8 @ =gSharedMem + 0x14800\n\ mov r0, r8\n\ adds r4, r3, r0\n\ ldr r1, _08114BAC @ =0x000038c4\n\ @@ -3416,13 +3416,13 @@ _08114B9C:\n\ movs r1, 0xA\n\ b _08114D74\n\ .align 2, 0\n\ -_08114BA8: .4byte 0x02014800\n\ +_08114BA8: .4byte gSharedMem + 0x14800\n\ _08114BAC: .4byte 0x000038c4\n\ _08114BB0: .4byte 0x000008c4\n\ _08114BB4:\n\ movs r4, 0\n\ str r4, [sp, 0x4]\n\ - ldr r5, _08114BE0 @ =0x02014800\n\ + ldr r5, _08114BE0 @ =gSharedMem + 0x14800\n\ mov r0, r8\n\ adds r4, r3, r0\n\ ldr r1, _08114BE4 @ =0x000038c4\n\ @@ -3442,13 +3442,13 @@ _08114BD4:\n\ movs r1, 0xB\n\ b _08114D74\n\ .align 2, 0\n\ -_08114BE0: .4byte 0x02014800\n\ +_08114BE0: .4byte gSharedMem + 0x14800\n\ _08114BE4: .4byte 0x000038c4\n\ _08114BE8: .4byte 0x000008c4\n\ _08114BEC:\n\ movs r4, 0\n\ str r4, [sp, 0x4]\n\ - ldr r5, _08114C18 @ =0x02014800\n\ + ldr r5, _08114C18 @ =gSharedMem + 0x14800\n\ mov r0, r8\n\ adds r4, r3, r0\n\ ldr r1, _08114C1C @ =0x000038c4\n\ @@ -3468,13 +3468,13 @@ _08114C0C:\n\ movs r1, 0xC\n\ b _08114D74\n\ .align 2, 0\n\ -_08114C18: .4byte 0x02014800\n\ +_08114C18: .4byte gSharedMem + 0x14800\n\ _08114C1C: .4byte 0x000038c4\n\ _08114C20: .4byte 0x000008c4\n\ _08114C24:\n\ movs r4, 0\n\ str r4, [sp, 0x4]\n\ - ldr r6, _08114C58 @ =0x02014800\n\ + ldr r6, _08114C58 @ =gSharedMem + 0x14800\n\ mov r0, r8\n\ adds r5, r3, r0\n\ ldr r1, _08114C5C @ =0x000038c4\n\ @@ -3498,7 +3498,7 @@ _08114C24:\n\ strb r5, [r0]\n\ b _08114D76\n\ .align 2, 0\n\ -_08114C58: .4byte 0x02014800\n\ +_08114C58: .4byte gSharedMem + 0x14800\n\ _08114C5C: .4byte 0x000038c4\n\ _08114C60: .4byte 0x000028c4\n\ _08114C64: .4byte 0x000008c4\n\ @@ -3513,7 +3513,7 @@ _08114C74: .4byte 0x000008c4\n\ _08114C78:\n\ movs r2, 0\n\ str r2, [sp, 0x4]\n\ - ldr r6, _08114CA8 @ =0x02014800\n\ + ldr r6, _08114CA8 @ =gSharedMem + 0x14800\n\ mov r4, r8\n\ adds r5, r3, r4\n\ ldr r0, _08114CAC @ =0x000038c4\n\ @@ -3535,14 +3535,14 @@ _08114C78:\n\ movs r1, 0x2\n\ b _08114D74\n\ .align 2, 0\n\ -_08114CA8: .4byte 0x02014800\n\ +_08114CA8: .4byte gSharedMem + 0x14800\n\ _08114CAC: .4byte 0x000038c4\n\ _08114CB0: .4byte 0x000028c4\n\ _08114CB4: .4byte 0x000008c4\n\ _08114CB8:\n\ movs r2, 0\n\ str r2, [sp, 0x4]\n\ - ldr r6, _08114CE8 @ =0x02014800\n\ + ldr r6, _08114CE8 @ =gSharedMem + 0x14800\n\ mov r4, r8\n\ adds r5, r3, r4\n\ ldr r0, _08114CEC @ =0x000038c4\n\ @@ -3564,14 +3564,14 @@ _08114CB8:\n\ movs r1, 0x3\n\ b _08114D74\n\ .align 2, 0\n\ -_08114CE8: .4byte 0x02014800\n\ +_08114CE8: .4byte gSharedMem + 0x14800\n\ _08114CEC: .4byte 0x000038c4\n\ _08114CF0: .4byte 0x000028c4\n\ _08114CF4: .4byte 0x000008c4\n\ _08114CF8:\n\ movs r2, 0\n\ str r2, [sp, 0x4]\n\ - ldr r6, _08114D2C @ =0x02014800\n\ + ldr r6, _08114D2C @ =gSharedMem + 0x14800\n\ mov r4, r8\n\ adds r5, r3, r4\n\ ldr r0, _08114D30 @ =0x000038c4\n\ @@ -3596,7 +3596,7 @@ _08114D1E:\n\ strb r4, [r0]\n\ b _08114D76\n\ .align 2, 0\n\ -_08114D2C: .4byte 0x02014800\n\ +_08114D2C: .4byte gSharedMem + 0x14800\n\ _08114D30: .4byte 0x000038c4\n\ _08114D34: .4byte 0x000028c4\n\ _08114D38: .4byte 0x000008c4\n\ @@ -3633,7 +3633,7 @@ _08114D74:\n\ strb r1, [r0]\n\ _08114D76:\n\ mov r3, r10\n\ - ldr r2, _08114DB0 @ =0x02014800\n\ + ldr r2, _08114DB0 @ =gSharedMem + 0x14800\n\ adds r0, r2, 0\n\ adds r0, 0x84\n\ ldr r4, [sp]\n\ @@ -3662,7 +3662,7 @@ _08114D9A:\n\ bx r1\n\ .align 2, 0\n\ _08114DAC: .4byte 0x000008c4\n\ -_08114DB0: .4byte 0x02014800\n\ +_08114DB0: .4byte gSharedMem + 0x14800\n\ .syntax divided"); } @@ -3701,7 +3701,7 @@ void sub_8114E48() adds r4, r0, 0\n\ lsls r1, 24\n\ lsrs r6, r1, 24\n\ - ldr r1, _08114E6C @ =0x02014800\n\ + ldr r1, _08114E6C @ =gSharedMem + 0x14800\n\ ldr r2, _08114E70 @ =0x0000a0c4\n\ adds r0, r1, r2\n\ ldrb r0, [r0]\n\ @@ -3717,7 +3717,7 @@ _08114E60:\n\ movs r1, 0x1\n\ b _08114EA6\n\ .align 2, 0\n\ -_08114E6C: .4byte 0x02014800\n\ +_08114E6C: .4byte gSharedMem + 0x14800\n\ _08114E70: .4byte 0x0000a0c4\n\ _08114E74:\n\ subs r0, r4, 0x1\n\ @@ -3829,7 +3829,7 @@ _08114F26:\n\ beq _08114F7C\n\ subs r0, r4, 0x1\n\ lsls r5, r0, 7\n\ - ldr r0, _08114F68 @ =0x020188c4\n\ + ldr r0, _08114F68 @ =gSharedMem + 0x188C4\n\ mov r12, r0\n\ _08114F42:\n\ asrs r0, r3, 1\n\ @@ -3852,7 +3852,7 @@ _08114F5E:\n\ b _08114FCA\n\ .align 2, 0\n\ _08114F64: .4byte 0x000008c4\n\ -_08114F68: .4byte 0x020188c4\n\ +_08114F68: .4byte gSharedMem + 0x188C4\n\ _08114F6C:\n\ ldrb r1, [r1]\n\ movs r0, 0xF\n\ @@ -3872,7 +3872,7 @@ _08114F7C:\n\ beq _08114FC8\n\ adds r0, r4, 0x1\n\ lsls r5, r0, 7\n\ - ldr r6, _08114FB0 @ =0x020188c4\n\ + ldr r6, _08114FB0 @ =gSharedMem + 0x188C4\n\ adds r2, r1, 0\n\ _08114F90:\n\ asrs r0, r3, 1\n\ @@ -3891,7 +3891,7 @@ _08114F90:\n\ beq _08114FBE\n\ b _08114F5E\n\ .align 2, 0\n\ -_08114FB0: .4byte 0x020188c4\n\ +_08114FB0: .4byte gSharedMem + 0x188C4\n\ _08114FB4:\n\ ldrb r1, [r1]\n\ movs r0, 0xF\n\ diff --git a/src/scene/intro.c b/src/scene/intro.c index c4bb1f9ea..03a573c90 100644 --- a/src/scene/intro.c +++ b/src/scene/intro.c @@ -20,6 +20,7 @@ #include "title_screen.h" #include "trig.h" #include "unknown_task.h" +#include "ewram.h" extern struct SpriteTemplate gUnknown_02024E8C; extern u16 gUnknown_02039358; @@ -765,7 +766,11 @@ const struct SpritePalette gIntro3MiscPal_Table[] = {gIntro3Misc2Palette, 2004}, {NULL}, }; -const u32 unusedData = 0x02000000; + +// Game Freak probably used the raw address here. +// Treating this like a u8 * causes the compiler +// to remove it at link time. +const u32 unusedSharedMemPtr = (u32)gSharedMem; static void MainCB2_EndIntro(void); void Task_IntroLoadPart1Graphics(u8); @@ -1207,8 +1212,7 @@ static void Task_IntroWaitToSetupPart3DoubleFight(u8 taskId) gTasks[taskId].func = Task_IntroLoadPart3Streaks; } -// TODO: use ewram define instead -extern u8 gSharedMem[][32]; +//extern u8 gSharedMem[][32]; static void Task_IntroLoadPart3Streaks(u8 taskId) { @@ -1218,9 +1222,9 @@ static void Task_IntroLoadPart3Streaks(u8 taskId) intro_reset_and_hide_bgs(); for (i = 0; i < 32; i++) { - gSharedMem[0][i] = 0; - gSharedMem[1][i] = 17; - gSharedMem[2][i] = 34; + ewram0arr[0][i] = 0; + ewram0arr[1][i] = 17; + ewram0arr[2][i] = 34; } vram = (void *)VRAM; DmaCopy16(3, gSharedMem, vram, 0x60); -- cgit v1.2.3 From ed8c51dd404287c6355ba75dc4b9e2944d80e1d9 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Sat, 11 Nov 2017 14:45:05 -0600 Subject: fix build after ewram changes --- src/field/field_weather.c | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) (limited to 'src') diff --git a/src/field/field_weather.c b/src/field/field_weather.c index a2abf7623..042655644 100644 --- a/src/field/field_weather.c +++ b/src/field/field_weather.c @@ -10,6 +10,7 @@ #include "sprite.h" #include "task.h" #include "trig.h" +#include "ewram.h" #define MACRO1(a) ((((a) >> 1) & 0xF) | (((a) >> 2) & 0xF0) | (((a) >> 3) & 0xF00)) @@ -20,7 +21,7 @@ struct RGBColor u16 b:5; }; -struct Struct2000000 +struct WeatherPaletteData { u16 data[0][0x1000]; // unknown length }; @@ -107,10 +108,6 @@ struct Weather u8 unknown_74E; }; -extern u8 ewram[]; - -#define ewram0 (*(struct Struct2000000 *)ewram) - #define gWeather gUnknown_0202F7E8 extern struct Weather gUnknown_0202F7E8; extern u8 gUnknown_0202FF38[]; @@ -151,7 +148,7 @@ const u8 *const gUnknown_08396FA8[] = DroughtPaletteData_3, DroughtPaletteData_4, DroughtPaletteData_5, - ewram, + gSharedMem, }; void sub_807C828(void) @@ -522,7 +519,7 @@ void sub_807CEBC(u8 a, u8 b, s8 c) for (i = 0; i < 16; i++) { if (gPlttBufferUnfaded[palOffset] != 0x2D9F) - gPlttBufferFaded[palOffset] = ewram0.data[c][MACRO1(gPlttBufferUnfaded[palOffset])]; + gPlttBufferFaded[palOffset] = eWeatherPaletteData.data[c][MACRO1(gPlttBufferUnfaded[palOffset])]; palOffset++; } } @@ -530,7 +527,7 @@ void sub_807CEBC(u8 a, u8 b, s8 c) { for (i = 0; i < 16; i++) { - gPlttBufferFaded[palOffset] = ewram0.data[c][MACRO1(gPlttBufferUnfaded[palOffset])]; + gPlttBufferFaded[palOffset] = eWeatherPaletteData.data[c][MACRO1(gPlttBufferUnfaded[palOffset])]; palOffset++; } } @@ -630,7 +627,7 @@ void sub_807D304(s8 a, u8 arg2, u16 c) b1 = color1.b; offset = ((b1 & 0x1E) << 7) | ((g1 & 0x1E) << 3) | ((r1 & 0x1E) >> 1); - color2 = *(struct RGBColor *)&ewram0.data[a][offset]; + color2 = *(struct RGBColor *)&eWeatherPaletteData.data[a][offset]; r2 = color2.r; g2 = color2.g; b2 = color2.b; @@ -873,17 +870,17 @@ void sub_807D8F0(u8 *a, u8 *b) if (r4 < 7) { r4--; - LZ77UnCompWram(gUnknown_08396FA8[r4], ewram0.data[r4]); + LZ77UnCompWram(gUnknown_08396FA8[r4], eWeatherPaletteData.data[r4]); if (r4 == 0) { - ewram0.data[r4][0] = 0x421; + eWeatherPaletteData.data[r4][0] = 0x421; for (i = 1; i < 0x1000; i++) - ewram0.data[r4][i] += ewram0.data[r4][i - 1]; + eWeatherPaletteData.data[r4][i] += eWeatherPaletteData.data[r4][i - 1]; } else { for (i = 0; i < 0x1000; i++) - ewram0.data[r4][i] += ewram0.data[r4 - 1][i]; + eWeatherPaletteData.data[r4][i] += eWeatherPaletteData.data[r4 - 1][i]; } (*a)++; if (*a == 7) -- cgit v1.2.3 From 403253312b053b91604f4bac7a6cf7b1a18cd8fb Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Sat, 11 Nov 2017 17:05:56 -0800 Subject: Cleanup battle_anim_80CA710.c --- src/battle_anim_80CA710.c | 2326 ++++++++++++++++++++++++--------------------- 1 file changed, 1236 insertions(+), 1090 deletions(-) (limited to 'src') diff --git a/src/battle_anim_80CA710.c b/src/battle_anim_80CA710.c index b4f94fbde..7a191e2d1 100755 --- a/src/battle_anim_80CA710.c +++ b/src/battle_anim_80CA710.c @@ -1,6 +1,8 @@ #include "global.h" #include "battle.h" #include "battle_anim.h" +#include "battle_anim_80CA710.h" +#include "battle_interface.h" #include "blend_palette.h" #include "decompress.h" #include "ewram.h" @@ -13,32 +15,7 @@ #include "sprite.h" #include "task.h" #include "trig.h" - -struct __attribute__((packed)) Some3ByteStruct { - u8 unkArr[3]; -}; - -struct UnknownStruct_1 -{ - void *src[2]; - void *dest; - u32 unkC; - void (*unk10)(void); - u8 srcBank; - u8 unk15; - u8 unk16; - u8 unk17; - u8 taskId; - u8 filler19[0x7]; -}; - -struct UnknownStruct_2 -{ - const void *dest; - u32 control; - u8 unk8; - u8 unk9; -}; +#include "unknown_task.h" struct UnknownStruct6 { @@ -98,173 +75,122 @@ extern u16 gUnknown_083D7A5C[5]; extern struct UnknownStruct6 gUnknown_03004DE0; extern struct UnknownStruct_1 gUnknown_03004DC0; -void sub_80CA768(struct Sprite* sprite); -void sub_80CA8B4(struct Sprite* sprite); -void sub_80CA9F8(struct Sprite* sprite); -void sub_80CAACC(struct Sprite* sprite); -void sub_80CAB88(struct Sprite* sprite); -void sub_80CABC0(struct Sprite* sprite); -void sub_80CAC44(struct Sprite* sprite); -void sub_80CADA8(struct Sprite* sprite); -void sub_80CAE74(struct Sprite* sprite); -void sub_80CAF20(struct Sprite* sprite); -void sub_80CAF6C(struct Sprite* sprite); -void sub_80CB09C(struct Sprite* sprite); -void sub_80CB1A4(struct Sprite* sprite); -void sub_80CB298(struct Sprite* sprite); -void sub_80CB2D4(struct Sprite* sprite); -void sub_80CB710(struct Sprite* sprite); -void sub_80CBB60(struct Sprite* sprite); -void sub_80CBC8C(struct Sprite* sprite); -void sub_80CBCF8(struct Sprite* sprite); -void sub_80CBDB0(struct Sprite* sprite); -void sub_80CC408(struct Sprite* sprite); -void sub_80CC580(struct Sprite* sprite); -void sub_80CC7D4(struct Sprite* sprite); -void sub_80CCB00(struct Sprite* sprite); -void sub_80CCCB4(struct Sprite* sprite); -void sub_80CCE0C(struct Sprite* sprite); -void sub_80CCF70(struct Sprite* sprite); -void sub_80CD0CC(struct Sprite* sprite, int unk1, int unk2); -void sub_80CD2D4(struct Sprite* sprite); -void sub_80CD394(struct Sprite* sprite); -void sub_80CD408(struct Sprite* sprite); -void sub_80CD4B8(struct Sprite* sprite); -void sub_80CD4EC(struct Sprite* sprite); -void sub_80CD5A8(struct Sprite* sprite); -void sub_80CD654(struct Sprite* sprite); -void sub_80CD67C(struct Sprite* sprite); -void sub_80CD7CC(struct Sprite* sprite); -void sub_80CD81C(struct Sprite* sprite); -void sub_80CD8A8(struct Sprite* sprite); -void sub_80CD8F8(struct Sprite* sprite); -void sub_80CD91C(struct Sprite* sprite); -void sub_80CD9B8(struct Sprite* sprite); -void sub_80CD9D4(struct Sprite* sprite); -void sub_80CDE78(struct Sprite* sprite); -void sub_80CDEB0(struct Sprite* sprite); -void sub_80CDEC0(struct Sprite* sprite); -void sub_80CDF70(struct Sprite* sprite); -void sub_80CE000(struct Sprite* sprite); -void sub_80CE1AC(struct Sprite* sprite); -void sub_80CE354(struct Sprite* sprite); -void sub_80CE3B0(struct Sprite* sprite); -void sub_80CE798(struct Sprite* sprite); -void sub_80CE974(struct Sprite* sprite); -void sub_80CEC1C(struct Sprite* sprite); -void sub_80CED78(struct Sprite* sprite); -void sub_80CEEE8(struct Sprite* sprite); -void sub_80CF008(struct Sprite* sprite); -void sub_80CF088(struct Sprite* sprite); -void sub_80CF138(struct Sprite* sprite); -void sub_80CF158(struct Sprite* sprite); -void sub_80CF228(struct Sprite* sprite); -void sub_80CF264(struct Sprite* sprite); -void sub_80CF310(struct Sprite* sprite); -void sub_80CF490(struct Sprite* sprite); -void sub_80CF4B8(struct Sprite* sprite); -void sub_80CF6B4(struct Sprite* sprite); -void sub_80CFE2C(struct Sprite* sprite); -void sub_80CFF68(struct Sprite* sprite); -void sub_80D0030(struct Sprite* sprite); -void sub_80D00B4(struct Sprite* sprite); -void sub_80D020C(struct Sprite* sprite); -void sub_80D02D0(struct Sprite* sprite); -void sub_80D0344(struct Sprite* sprite); -void sub_80D03A8(struct Sprite* sprite); -void sub_80D0704(struct Sprite* sprite); -void sub_80D0E8C(struct Sprite* sprite); -void sub_80D1098(struct Sprite* sprite); -void sub_80D13AC(struct Sprite* sprite); -void sub_80D1424(struct Sprite* sprite); -void sub_80D144C(struct Sprite* sprite); -void sub_80D14C4(struct Sprite* sprite); -void sub_80D1504(struct Sprite* sprite); -void sub_80D154C(struct Sprite* sprite); -void sub_80D158C(struct Sprite* sprite); -void sub_80D1FA4(struct Sprite* sprite); -void sub_80D2094(struct Sprite* sprite); -void sub_80D2704(struct Sprite* sprite); -void sub_80D2834(struct Sprite* sprite); - - -s16 sub_80CC338(struct Sprite* sprite); - -void sub_80787B0(struct Sprite *sprite, u8 a2); -void sub_8078764(struct Sprite *sprite, u8 a2); -void sub_8078B34(struct Sprite *sprite); -void sub_8078D60(struct Sprite *sprite); -void sub_80786EC(struct Sprite *sprite); -void sub_80782D8(struct Sprite *sprite); -void sub_8078CC0(struct Sprite *sprite); -void sub_8078600(struct Sprite *sprite); -void sub_8078504(struct Sprite *sprite); -void sub_807861C(struct Sprite *sprite); -void sub_8078650(struct Sprite *sprite); -void sub_8078394(struct Sprite *sprite); -void sub_80785E4(struct Sprite *sprite); -void sub_8078278(struct Sprite *sprite); -void sub_8078C00(struct Sprite *sprite); -void sub_8078114(struct Sprite *sprite); -void sub_80793C4(struct Sprite *sprite); - -extern void sub_8043DB0(); -extern void sub_8043DFC(); - -void sub_807A3FC(u8 slot, u8 a2, s16 *a3, s16 *a4); -u8 sub_8079ED4(u8 slot); -s8 sub_8076F98(s8 a); -int sub_807A100(u8 slot, u8 a2); -u16 sub_80790F0(s16 a, s16 b); -void sub_8078FDC(struct Sprite *sprite, bool8 a2, s16 xScale, s16 yScale, u16 rotation); -void sub_807867C(struct Sprite *sprite, s16 a2); -u8 sub_8077EE4(u8 slot, u8 a2); -u32 sub_80791A8(u8 a1, u8 a2, u8 a3, u8 a4, u8 a5, u8 a6, u8 a7); -u32 sub_80792C0(u8 a1, u8 a2, u8 a3, u8 a4); -s16 duplicate_obj_of_side_rel2move_in_transparent_mode(u8 a1); -void obj_delete_but_dont_free_vram(struct Sprite *sprite); -s16 sub_81174E0(s16 a); -s16 sub_81174C4(s16 a, s16 b); -void sub_8079108(u16 a1, bool8 a2); -void sub_80798F4(struct Task *task, u8 a2, void *a3); -bool8 sub_807992C(struct Task *task); -u8 sub_8077FC0(u8 slot); -void sub_80895F8(struct UnknownStruct_2 unk); -void sub_80763FC(u16 a, u16 *b, u32 c, u8 d); - -void move_anim_8074EE0(struct Sprite *sprite); -bool8 sub_8078718(struct Sprite *sprite); -bool8 sub_8078CE8(struct Sprite *sprite); - -void sub_80CB3A8(u8 taskId); -void sub_80CB438(u8 taskId); -void sub_80CBF5C(u8 taskId); -void sub_80CDB60(u8 taskId); -void sub_80CDD20(u8 taskId); -void sub_80CE4D4(u8 taskId); -void sub_80CE910(u8 taskId); -void sub_80CF514(u8 taskId); -void sub_80D0428(u8 taskId); -void sub_80D04E0(u8 taskId); -void sub_80D07AC(u8 taskId); -void sub_80D0904(u8 taskId); -void sub_80D0A8C(u8 taskId); -void sub_80D0B3C(u8 taskId); -void sub_80D0D68(u8 taskId); -void sub_80D15E0(u8 taskId); -void sub_80D16A0(u8 taskId); -void sub_80D1808(u8 taskId); -void sub_80D1930(u8 taskId); -void sub_80D1D48(u8 taskId); -void sub_80D1D9C(u8 taskId); -void sub_80D21F0(u8 taskId); -void sub_80D24E0(u8 taskId); - - -void sub_80CC358(struct Task* task, u8 taskId); -void sub_80D0614(struct Task* task, u8 taskId); - -void sub_80CEBC4(s16 a, s16 b, s16* c, s16* d, s8 e); +static void sub_80CA768(struct Sprite* sprite); +static void sub_80CA8B4(struct Sprite* sprite); +static void sub_80CA9F8(struct Sprite* sprite); +static void sub_80CAACC(struct Sprite* sprite); +static void sub_80CAB88(struct Sprite* sprite); +static void sub_80CABC0(struct Sprite* sprite); +static void sub_80CAC44(struct Sprite* sprite); +static void sub_80CADA8(struct Sprite* sprite); +static void sub_80CAE74(struct Sprite* sprite); +static void sub_80CAF20(struct Sprite* sprite); +static void sub_80CAF6C(struct Sprite* sprite); +static void sub_80CB09C(struct Sprite* sprite); +static void sub_80CB1A4(struct Sprite* sprite); +static void sub_80CB298(struct Sprite* sprite); +static void sub_80CB2D4(struct Sprite* sprite); +static void sub_80CB710(struct Sprite* sprite); +static void sub_80CBB60(struct Sprite* sprite); +static void sub_80CBC8C(struct Sprite* sprite); +static void sub_80CBCF8(struct Sprite* sprite); +static void sub_80CBDB0(struct Sprite* sprite); +static void sub_80CC408(struct Sprite* sprite); +static void sub_80CC580(struct Sprite* sprite); +static void sub_80CC7D4(struct Sprite* sprite); +static void sub_80CCB00(struct Sprite* sprite); +static void sub_80CCCB4(struct Sprite* sprite); +static void sub_80CCE0C(struct Sprite* sprite); +static void sub_80CCF70(struct Sprite* sprite); +static void sub_80CD0CC(struct Sprite* sprite, int unk1, int unk2); +static void sub_80CD2D4(struct Sprite* sprite); +static void sub_80CD394(struct Sprite* sprite); +static void sub_80CD408(struct Sprite* sprite); +static void sub_80CD4B8(struct Sprite* sprite); +static void sub_80CD4EC(struct Sprite* sprite); +static void sub_80CD5A8(struct Sprite* sprite); +static void sub_80CD654(struct Sprite* sprite); +static void sub_80CD67C(struct Sprite* sprite); +static void sub_80CD7CC(struct Sprite* sprite); +static void sub_80CD81C(struct Sprite* sprite); +static void sub_80CD8A8(struct Sprite* sprite); +static void sub_80CD8F8(struct Sprite* sprite); +static void sub_80CD91C(struct Sprite* sprite); +static void sub_80CD9B8(struct Sprite* sprite); +static void sub_80CD9D4(struct Sprite* sprite); +static void sub_80CDE78(struct Sprite* sprite); +static void sub_80CDEB0(struct Sprite* sprite); +static void sub_80CDEC0(struct Sprite* sprite); +static void sub_80CDF70(struct Sprite* sprite); +static void sub_80CE000(struct Sprite* sprite); +static void sub_80CE1AC(struct Sprite* sprite); +static void sub_80CE354(struct Sprite* sprite); +static void sub_80CE3B0(struct Sprite* sprite); +static void sub_80CE798(struct Sprite* sprite); +static void sub_80CE974(struct Sprite* sprite); +static void sub_80CEC1C(struct Sprite* sprite); +static void sub_80CED78(struct Sprite* sprite); +static void sub_80CEEE8(struct Sprite* sprite); +static void sub_80CF008(struct Sprite* sprite); +static void sub_80CF088(struct Sprite* sprite); +static void sub_80CF138(struct Sprite* sprite); +static void sub_80CF158(struct Sprite* sprite); +static void sub_80CF228(struct Sprite* sprite); +static void sub_80CF264(struct Sprite* sprite); +static void sub_80CF310(struct Sprite* sprite); +static void sub_80CF490(struct Sprite* sprite); +static void sub_80CF4B8(struct Sprite* sprite); +static void sub_80CF6B4(struct Sprite* sprite); +static void sub_80CFE2C(struct Sprite* sprite); +static void sub_80CFF68(struct Sprite* sprite); +static void sub_80D0030(struct Sprite* sprite); +static void sub_80D00B4(struct Sprite* sprite); +static void sub_80D020C(struct Sprite* sprite); +static void sub_80D02D0(struct Sprite* sprite); +static void sub_80D0344(struct Sprite* sprite); +static void sub_80D03A8(struct Sprite* sprite); +extern void sub_80D0704(struct Sprite* sprite); +static void sub_80D0E8C(struct Sprite* sprite); +static void sub_80D1098(struct Sprite* sprite); +static void sub_80D13AC(struct Sprite* sprite); +static void sub_80D1424(struct Sprite* sprite); +static void sub_80D144C(struct Sprite* sprite); +static void sub_80D14C4(struct Sprite* sprite); +static void sub_80D1504(struct Sprite* sprite); +static void sub_80D154C(struct Sprite* sprite); +static void sub_80D158C(struct Sprite* sprite); +static void sub_80D1FA4(struct Sprite* sprite); +static void sub_80D2094(struct Sprite* sprite); +static void sub_80D2704(struct Sprite* sprite); +static void sub_80D2834(struct Sprite* sprite); +static s16 sub_80CC338(struct Sprite* sprite); +static void sub_80CB3A8(u8 taskId); +static void sub_80CB438(u8 taskId); +static void sub_80CBF5C(u8 taskId); +static void sub_80CDB60(u8 taskId); +static void sub_80CDD20(u8 taskId); +static void sub_80CE4D4(u8 taskId); +static void sub_80CE910(u8 taskId); +static void sub_80CF514(u8 taskId); +static void sub_80D0428(u8 taskId); +static void sub_80D04E0(u8 taskId); +static void sub_80D07AC(u8 taskId); +static void sub_80D0904(u8 taskId); +static void sub_80D0A8C(u8 taskId); +static void sub_80D0B3C(u8 taskId); +static void sub_80D0D68(u8 taskId); +static void sub_80D15E0(u8 taskId); +static void sub_80D16A0(u8 taskId); +static void sub_80D1808(u8 taskId); +static void sub_80D1930(u8 taskId); +static void sub_80D1D48(u8 taskId); +static void sub_80D1D9C(u8 taskId); +static void sub_80D21F0(u8 taskId); +static void sub_80D24E0(u8 taskId); +static void sub_80CC358(struct Task* task, u8 taskId); +extern void sub_80D0614(struct Task* task, u8 taskId); +static void sub_80CEBC4(s16 a, s16 b, s16* c, s16* d, s8 e); + void sub_80CA710(struct Sprite* sprite) { @@ -272,6 +198,7 @@ void sub_80CA710(struct Sprite* sprite) sprite->pos1.y += gBattleAnimArgs[1]; sprite->data0 = gBattleAnimArgs[2]; sprite->data1 = gBattleAnimArgs[3]; + if (GetBankSide(gBattleAnimBankAttacker)) { sprite->data3 = -gBattleAnimArgs[4]; @@ -280,6 +207,7 @@ void sub_80CA710(struct Sprite* sprite) { sprite->data3 = gBattleAnimArgs[4]; } + sprite->data4 = gBattleAnimArgs[5]; sprite->callback = sub_80CA768; } @@ -337,13 +265,13 @@ void sub_80CA858(struct Sprite* sprite) void sub_80CA8B4(struct Sprite* sprite) { - if(sub_8078B5C(sprite)) + if (sub_8078B5C(sprite)) { DestroySprite(sprite); } else { - if(sprite->data5 > 0x7F) + if (sprite->data5 > 0x7F) { sprite->subpriority = sub_8079E90(gBattleAnimBankTarget) + 1; } @@ -370,7 +298,9 @@ void sub_80CA928(u8 taskId) gBattleAnimArgs[3] = 0; CreateSpriteAndAnimate(&gSpriteTemplate_83D631C, 0, 0, sub_8079E90(gBattleAnimBankTarget) + 1); } - if (gTasks[taskId].data[1] == 15) DestroyAnimVisualTask(taskId); + + if (gTasks[taskId].data[1] == 15) + DestroyAnimVisualTask(taskId); } void sub_80CA9A8(struct Sprite* sprite) @@ -386,7 +316,8 @@ void sub_80CA9A8(struct Sprite* sprite) void sub_80CA9F8(struct Sprite* sprite) { - if (sub_8078718(sprite)) move_anim_8072740(sprite); + if (sub_8078718(sprite)) + move_anim_8072740(sprite); } void sub_80CAA14(struct Sprite* sprite) @@ -405,6 +336,7 @@ void sub_80CAA14(struct Sprite* sprite) { sprite->pos1.x += 20; } + b = Random(); sprite->data0 = (b & 31) + 64; sprite->data1 = sprite->pos1.x; @@ -435,6 +367,7 @@ void sub_80CAACC(struct Sprite* sprite) { sprite->subpriority = sprite->data6 + 1; } + sprite->data5 = (sprite->data5 + 24) & 0xFF; } } @@ -442,10 +375,11 @@ void sub_80CAACC(struct Sprite* sprite) void sub_80CAB18(struct Sprite* sprite) { sub_80787B0(sprite, 1); - if(GetBankSide(gBattleAnimBankAttacker)) + if (GetBankSide(gBattleAnimBankAttacker)) { gBattleAnimArgs[2] = -gBattleAnimArgs[2]; } + sprite->data0 = gBattleAnimArgs[4]; sprite->data2 = sub_8077ABC(gBattleAnimBankTarget, 0) + gBattleAnimArgs[2]; sprite->data4 = sub_8077ABC(gBattleAnimBankTarget, 1) + gBattleAnimArgs[3]; @@ -456,7 +390,7 @@ void sub_80CAB18(struct Sprite* sprite) void sub_80CAB88(struct Sprite* sprite) { - if(sub_8078718(sprite)) + if (sub_8078718(sprite)) { sprite->invisible = 1; sprite->data0 = 10; @@ -482,6 +416,7 @@ void sub_80CABF8(struct Sprite* sprite) { sprite->oam.objMode = 1; } + sprite->data0 = gBattleAnimArgs[3]; sprite->data1 = gBattleAnimArgs[2]; sprite->callback = sub_80CAC44; @@ -490,8 +425,7 @@ void sub_80CABF8(struct Sprite* sprite) void sub_80CAC44(struct Sprite* sprite) { - - u8 b; + u8 var1; sprite->pos2.x = Sin(sprite->data1, 32); sprite->pos2.y = Cos(sprite->data1, -3) + ((sprite->data2 += 24) >> 8); @@ -501,21 +435,24 @@ void sub_80CAC44(struct Sprite* sprite) } else { - b = sub_8079ED4(gBattleAnimBankTarget) + 1; - if ( b > 3) + var1 = sub_8079ED4(gBattleAnimBankTarget) + 1; + if (var1 > 3) { - b = 3; + var1 = 3; } - sprite->oam.priority = b; + + sprite->oam.priority = var1; } + sprite->data1 = (sprite->data1 + 2) & 0xFF; sprite->data0--; - if (sprite->data0 == -1) move_anim_8072740(sprite); + if (sprite->data0 == -1) + move_anim_8072740(sprite); } void sub_80CACEC(u8 taskId) { - if(NotInBattle() || !IsDoubleBattle()) + if (NotInBattle() || !IsDoubleBattle()) { DestroyAnimVisualTask(taskId); } @@ -529,6 +466,7 @@ void sub_80CACEC(u8 taskId) { REG_BG1CNT_BITFIELD.priority = 1; } + DestroyAnimVisualTask(taskId); } } @@ -549,7 +487,7 @@ void sub_80CAD54(struct Sprite* sprite) void sub_80CADA8(struct Sprite* sprite) { - if(!sub_8078B5C(sprite)) + if (!sub_8078B5C(sprite)) { sprite->pos2.x += Sin(sprite->data5, 32); sprite->pos2.y += Cos(sprite->data5, -5); @@ -561,6 +499,7 @@ void sub_80CADA8(struct Sprite* sprite) { sprite->subpriority = sub_8079E90(gBattleAnimBankAttacker) + 1; } + sprite->data5 = (sprite->data5 + 5) & 0xFF; } else @@ -585,13 +524,14 @@ void sub_80CAE20(struct Sprite* sprite) void sub_80CAE74(struct Sprite* sprite) { - if(!sub_8078B5C(sprite)) + if (!sub_8078B5C(sprite)) { sprite->pos2.x += Sin(sprite->data5, 8); if ((u16)(sprite->data5 - 0x3B) < 5 || (u16)(sprite->data5 - 0xBB) < 5) { sprite->oam.matrixNum ^= 8; } + sprite->data5 = (sprite->data5 + 5) & 0xFF; } else @@ -612,9 +552,9 @@ void sub_80CAED8(struct Sprite* sprite) void sub_80CAF20(struct Sprite* sprite) { - if(!sprite->data2) + if (!sprite->data2) { - if(sprite->data1 & 1) + if (sprite->data1 & 1) { sprite->data0 = 0x80; sprite->data1 = 0; @@ -638,7 +578,7 @@ void sub_80CAF20(struct Sprite* sprite) void sub_80CAF6C(struct Sprite* sprite) { - if(GetBankSide(gBattleAnimBankAttacker)) + if (GetBankSide(gBattleAnimBankAttacker)) { sprite->pos2.x = -Sin(sprite->data0, 0x19); } @@ -646,13 +586,15 @@ void sub_80CAF6C(struct Sprite* sprite) { sprite->pos2.x = Sin(sprite->data0, 0x19); } + sprite->data0 = (sprite->data0 + 2) & 0xFF; sprite->data1++; - if(!(sprite->data1 & 1)) + if (!(sprite->data1 & 1)) { sprite->pos2.y++; } - if(sprite->data1 > 0x50) + + if (sprite->data1 > 0x50) { move_anim_8072740(sprite); } @@ -661,12 +603,13 @@ void sub_80CAF6C(struct Sprite* sprite) void sub_80CAFD0(struct Sprite* sprite) { sub_80787B0(sprite, 1); - if(GetBankSide(gBattleAnimBankAttacker)) + if (GetBankSide(gBattleAnimBankAttacker)) { gBattleAnimArgs[2] = -gBattleAnimArgs[2]; } + sprite->data0 = gBattleAnimArgs[4]; - if(!(gBattleAnimArgs[6])) + if (!(gBattleAnimArgs[6])) { sprite->data2 = sub_8077ABC(gBattleAnimBankTarget, 2) + gBattleAnimArgs[2]; sprite->data4 = sub_8077ABC(gBattleAnimBankTarget, 3) + gBattleAnimArgs[3]; @@ -677,9 +620,10 @@ void sub_80CAFD0(struct Sprite* sprite) sprite->data2 += gBattleAnimArgs[2]; sprite->data4 += gBattleAnimArgs[3]; } + sprite->data5 = gBattleAnimArgs[5]; sub_80786EC(sprite); - if(GetBankSide(gBattleAnimBankAttacker) == GetBankSide(gBattleAnimBankTarget)) + if (GetBankSide(gBattleAnimBankAttacker) == GetBankSide(gBattleAnimBankTarget)) { sprite->data0 = 1; } @@ -687,6 +631,7 @@ void sub_80CAFD0(struct Sprite* sprite) { sprite->data0 = 0; } + sprite->callback = sub_80CB09C; } @@ -703,6 +648,7 @@ void sub_80CB09C(struct Sprite* sprite) sprite->data0 = a; if (b > 0xC8 && r0 <= 0x37 && sprite->oam.affineParam == 0) sprite->oam.affineParam++; + if (sprite->oam.affineParam != 0 && sprite->data0 != 0) { sprite->invisible ^= 1; @@ -723,10 +669,11 @@ void sub_80CB09C(struct Sprite* sprite) void sub_80CB144(struct Sprite* sprite) { - if(!NotInBattle() && IsDoubleBattle() == TRUE) + if (!NotInBattle() && IsDoubleBattle() == TRUE) { sub_807A3FC(gBattleAnimBankTarget, 1, &sprite->pos1.x, &sprite->pos1.y); } + sprite->pos1.y += 32; sprite->data0 = gBattleAnimArgs[0]; sprite->data1 = gBattleAnimArgs[1]; @@ -738,21 +685,24 @@ void sub_80CB144(struct Sprite* sprite) void sub_80CB1A4(struct Sprite* sprite) { - if(sprite->data1 == 0xFF) + if (sprite->data1 == 0xFF) { sprite->pos1.y -= 2; } - else if(sprite->data1 > 0) + else if (sprite->data1 > 0) { sprite->pos1.y -= 2; sprite->data1 -= 2; } + sprite->data5 += sprite->data2; - if(sprite->data0 < sprite->data4) sprite->data5 += sprite->data2; + if (sprite->data0 < sprite->data4) + sprite->data5 += sprite->data2; + sprite->data5 &= 0xFF; sprite->pos2.x = Cos(sprite->data5, sprite->data3); sprite->pos2.y = Sin(sprite->data5, 5); - if(sprite->data5 <= 0x7F) + if (sprite->data5 <= 0x7F) { sprite->oam.priority = sub_8079ED4(gBattleAnimBankTarget) - 1; } @@ -760,8 +710,10 @@ void sub_80CB1A4(struct Sprite* sprite) { sprite->oam.priority = sub_8079ED4(gBattleAnimBankTarget) + 1; } + sprite->data0--; - if(!sprite->data0) move_anim_8072740(sprite); + if (!sprite->data0) + move_anim_8072740(sprite); } void sub_80CB25C(struct Sprite* sprite) @@ -776,7 +728,7 @@ void sub_80CB25C(struct Sprite* sprite) void sub_80CB298(struct Sprite* sprite) { - if((u16)gBattleAnimArgs[7] == 0xFFFF) + if ((u16)gBattleAnimArgs[7] == 0xFFFF) { sprite->affineAnimPaused = 0; GetAnimBankSpriteId(1); @@ -788,7 +740,7 @@ void sub_80CB298(struct Sprite* sprite) void sub_80CB2D4(struct Sprite* sprite) { GetAnimBankSpriteId(1); - if(!sprite->data2) + if (!sprite->data2) { sprite->data0 += 11; } @@ -797,15 +749,16 @@ void sub_80CB2D4(struct Sprite* sprite) sprite->data0 -= 11; } sprite->data1++; - if(sprite->data1 == 6) + if (sprite->data1 == 6) { sprite->data1 = 0; sprite->data2 ^= 1; } - if(sprite->affineAnimEnded) + + if (sprite->affineAnimEnded) { sprite->data7--; - if(sprite->data7 > 0) + if (sprite->data7 > 0) { StartSpriteAffineAnim(sprite, sprite->data6); } @@ -819,7 +772,7 @@ void sub_80CB2D4(struct Sprite* sprite) void sub_80CB340(u8 taskId) { u8 spriteId = GetAnimBankSpriteId(1); - if(gSprites[spriteId].invisible) + if (gSprites[spriteId].invisible) { DestroyAnimVisualTask(taskId); } @@ -838,15 +791,16 @@ void sub_80CB3A8(u8 taskId) u8 spriteId = GetAnimBankSpriteId(1); gTasks[taskId].data[10] += gTasks[taskId].data[0]; gSprites[spriteId].pos2.x = gTasks[taskId].data[10] >> 8; - if(GetBankSide(gBattleAnimBankTarget)) + if (GetBankSide(gBattleAnimBankTarget)) { gSprites[spriteId].pos2.x = -gSprites[spriteId].pos2.x; } + gTasks[taskId].data[11] += 16; obj_id_set_rotscale(spriteId, gTasks[taskId].data[11], gTasks[taskId].data[11], 0); sub_8079A64(spriteId); gTasks[taskId].data[1]--; - if(!gTasks[taskId].data[1]) + if (!gTasks[taskId].data[1]) { gTasks[taskId].data[0] = 0; gTasks[taskId].func = sub_80CB438; @@ -872,6 +826,7 @@ void sub_80CB438(u8 taskId) if (gTasks[taskId].data[0] == 0) return; } + gTasks[taskId].data[0]++; if (gTasks[taskId].data[0] == 3) DestroyAnimVisualTask(taskId); @@ -879,41 +834,42 @@ void sub_80CB438(u8 taskId) void sub_80CB4CC(struct Sprite* sprite) { - switch(sprite->data0) + switch (sprite->data0) + { + case 0: { - case 0: + if (GetBankSide(gBattleAnimBankTarget) == 0) { - if(GetBankSide(gBattleAnimBankTarget) == 0) - { - s16 a = gBattleAnimArgs[0]; - gBattleAnimArgs[0] = -a; - } - sprite->pos1.x = sub_8077ABC(gBattleAnimBankTarget, 0) + gBattleAnimArgs[0]; - sprite->pos1.y = sub_8077ABC(gBattleAnimBankTarget, 1) + gBattleAnimArgs[1]; - sprite->invisible = 1; - sprite->data0++; - break; + s16 a = gBattleAnimArgs[0]; + gBattleAnimArgs[0] = -a; } - case 1: + + sprite->pos1.x = sub_8077ABC(gBattleAnimBankTarget, 0) + gBattleAnimArgs[0]; + sprite->pos1.y = sub_8077ABC(gBattleAnimBankTarget, 1) + gBattleAnimArgs[1]; + sprite->invisible = 1; + sprite->data0++; + break; + } + case 1: + { + sprite->invisible = 0; + if (sprite->affineAnimEnded) { - sprite->invisible = 0; - if(sprite->affineAnimEnded) - { - ChangeSpriteAffineAnim(sprite, 1); - sprite->data0 = 25; - sprite->data2 = sub_8077ABC(gBattleAnimBankAttacker, 2); - sprite->data4 = sub_8077ABC(gBattleAnimBankAttacker, 3); - sprite->callback = sub_8078CC0; - StoreSpriteCallbackInData6(sprite, move_anim_8072740); - break; - } + ChangeSpriteAffineAnim(sprite, 1); + sprite->data0 = 25; + sprite->data2 = sub_8077ABC(gBattleAnimBankAttacker, 2); + sprite->data4 = sub_8077ABC(gBattleAnimBankAttacker, 3); + sprite->callback = sub_8078CC0; + StoreSpriteCallbackInData6(sprite, move_anim_8072740); + break; } } + } } void sub_80CB59C(struct Sprite* sprite) { - if(!sprite->data0) + if (!sprite->data0) { sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 2); sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 1); @@ -923,7 +879,7 @@ void sub_80CB59C(struct Sprite* sprite) StartSpriteAnim(sprite, gBattleAnimArgs[3]); sprite->data2 = gBattleAnimArgs[4]; sprite->data0++; - if((sprite->pos1.y + sprite->pos2.y) > 120) + if ((sprite->pos1.y + sprite->pos2.y) > 120) { sprite->pos1.y += -120 + (sprite->pos2.y + sprite->pos1.y); } @@ -956,16 +912,16 @@ void sub_80CB620(struct Sprite *sprite) void sub_80CB710(struct Sprite* sprite) { - if(++sprite->data0 > (sprite->data2 - 10)) - { + if (++sprite->data0 > (sprite->data2 - 10)) sprite->invisible = sprite->data0 % 2; - } - if(sprite->data0 > sprite->data2) move_anim_8072740(sprite); + + if (sprite->data0 > sprite->data2) + move_anim_8072740(sprite); } void sub_80CB768(struct Sprite* sprite) { - if(!sprite->data0) + if (!sprite->data0) { sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 2) + gBattleAnimArgs[0]; sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 1) + gBattleAnimArgs[1]; @@ -973,10 +929,12 @@ void sub_80CB768(struct Sprite* sprite) sprite->data2 = gBattleAnimArgs[3]; sprite->data3 = gBattleAnimArgs[4]; } + sprite->data0++; sprite->pos2.x = sprite->data1 * sprite->data0; sprite->pos2.y = Sin((sprite->data0 * 20) & 0xFF, sprite->data2); - if(sprite->data0 > sprite->data3) move_anim_8072740(sprite); + if (sprite->data0 > sprite->data3) + move_anim_8072740(sprite); } void sub_80CB7EC(struct Sprite* sprite, s16 c) @@ -1003,9 +961,14 @@ bool8 sub_80CB814(struct Sprite* sprite) s32 var2; if (r2 == 0) + { r2 = -32; + } else if (r2 == 255) + { r2 = 0x110; + } + r4_2 = r4 - r9; r0 = r2 - r10; var1 = r0 * r3 / r6; @@ -1014,18 +977,23 @@ bool8 sub_80CB814(struct Sprite* sprite) sprite->pos1.y = var2 + r9; if (++r3 == r6) return TRUE; + sprite->data7 = (r6 << 8) | r3; return FALSE; } void sub_80CB8B8(struct Sprite* sprite) { - if(sprite->data0 == 10) + if (sprite->data0 == 10) { StartSpriteAffineAnim(sprite, 1); } + sprite->data0++; - if(sprite->data0 > 50) move_anim_8072740(sprite); + if (sprite->data0 > 50) + { + move_anim_8072740(sprite); + } } void sub_80CB8E8(struct Sprite* sprite) @@ -1036,6 +1004,7 @@ void sub_80CB8E8(struct Sprite* sprite) sprite->data1++; sprite->data0 = 0; } + sprite->pos2.y = Sin(sprite->data0 + 128, 30 - sprite->data1 * 8); if (sub_80CB814(sprite)) { @@ -1052,7 +1021,7 @@ void sub_80CB94C(struct Sprite* sprite) sub_80787B0(sprite, 0); e1 = sub_8077ABC(gBattleAnimBankTarget, 0); e2 = sub_8077ABC(gBattleAnimBankTarget, 1); - if((gBattleAnimBankAttacker ^ 2) == gBattleAnimBankTarget) + if ((gBattleAnimBankAttacker ^ 2) == gBattleAnimBankTarget) { sprite->data6 = e1; sprite->data7 = e2 + 10; @@ -1066,6 +1035,7 @@ void sub_80CB94C(struct Sprite* sprite) sub_80CB7EC(sprite, 0x3C); sprite->data3 = 3; } + sprite->data4 = 0x3C; sprite->callback = sub_80CB8E8; } @@ -1075,13 +1045,14 @@ void sub_80CB9C4(struct Sprite* sprite) int zero; sprite->data0 += ((sprite->data3 * 128) / sprite->data4); zero = 0; - if(sprite->data0 > 0x7F) + if (sprite->data0 > 0x7F) { sprite->data1++; sprite->data0 = zero; } + sprite->pos2.y = Sin(sprite->data0 + 0x80, 30 - sprite->data1 * 8); - if(sub_80CB814(sprite)) + if (sub_80CB814(sprite)) { sprite->pos2.y = zero; sprite->data0 = zero; @@ -1092,7 +1063,7 @@ void sub_80CB9C4(struct Sprite* sprite) void sub_80CBA28(struct Sprite* sprite) { s16 e = sub_8077ABC(gBattleAnimBankTarget, 1); - if(GetBankSide(gBattleAnimBankTarget) == 0) + if (GetBankSide(gBattleAnimBankTarget) == 0) { sprite->data6 = 0; sprite->data7 = e + 10; @@ -1105,7 +1076,9 @@ void sub_80CBA28(struct Sprite* sprite) { sprite->data6 = 255; sprite->data7 = e + 10; - if(NotInBattle()) sprite->data6 = 0; + if (NotInBattle()) + sprite->data6 = 0; + sub_80CB7EC(sprite, 0x28); sprite->data3 = 3; sprite->data4 = 0x3C; @@ -1115,14 +1088,18 @@ void sub_80CBA28(struct Sprite* sprite) void sub_80CBAA4(struct Sprite* sprite) { - if(sprite->data0 == 0) + if (sprite->data0 == 0) { sub_8078764(sprite, 0); sprite->data1 = gBattleAnimArgs[2]; } + sprite->data0++; sprite->pos2.y = sprite->data1 * sprite->data0; - if(sprite->animEnded) move_anim_8072740(sprite); + if (sprite->animEnded) + { + move_anim_8072740(sprite); + } } void sub_80CBAE8(struct Sprite* sprite) @@ -1132,7 +1109,7 @@ void sub_80CBAE8(struct Sprite* sprite) sub_8078764(sprite, 0); p1 = sub_8077ABC(gBattleAnimBankAttacker, 0); p2 = sub_8077ABC(gBattleAnimBankAttacker, 1); - if((gBattleAnimBankTarget ^ 2) == gBattleAnimBankAttacker) + if ((gBattleAnimBankTarget ^ 2) == gBattleAnimBankAttacker) { sprite->data6 = p1; sprite->data7 = p2 + 10; @@ -1146,6 +1123,7 @@ void sub_80CBAE8(struct Sprite* sprite) sub_80CB7EC(sprite, 0x3c); sprite->data3 = 3; } + sprite->data4 = 0x3C; sprite->callback = sub_80CBB60; } @@ -1155,17 +1133,19 @@ void sub_80CBB60(struct Sprite* sprite) int zero; sprite->data0 += ((sprite->data3 * 128) / sprite->data4); zero = 0; - if(sprite->data0 > 0x7F) + if (sprite->data0 > 0x7F) { sprite->data1++; sprite->data0 = zero; } + sprite->pos2.y = Sin(sprite->data0 + 0x80, 30 - sprite->data1 * 8); - if(sprite->pos2.y == 0) + if (sprite->pos2.y == 0) { PlaySE12WithPanning(0x7D, sub_8076F98(0x3F)); } - if(sub_80CB814(sprite)) + + if (sub_80CB814(sprite)) { sprite->pos2.y = 0; sprite->data0 = 0; @@ -1193,10 +1173,11 @@ void sub_80CBBF0(struct Sprite* sprite) b = gBattleAnimArgs[1] + 0xDF; else b = a; + sprite->data1 = a - ((b >> 8) << 8); sprite->pos1.x = 0x46; - } + sprite->pos1.y = gBattleAnimArgs[0]; sprite->data2 = gBattleAnimArgs[0]; sprite->data4 = 20; @@ -1212,34 +1193,31 @@ void sub_80CBBF0(struct Sprite* sprite) void sub_80CBC8C(struct Sprite* sprite) { - switch(sprite->data3) + switch (sprite->data3) { - case 0: + case 0: + if (sprite->data2 > 0x4E) { - if(sprite->data2 > 0x4E) - { - sprite->data3 = 1; - StartSpriteAffineAnim(sprite, 1); - break; - } - else - { - sprite->data2 += sprite->data4 / 10; - sprite->data4 += 3; - sprite->pos1.y = sprite->data2; - break; - } + sprite->data3 = 1; + StartSpriteAffineAnim(sprite, 1); + break; } - case 1: + else { - if(sprite->data3 && sprite->affineAnimEnded) - { - sprite->data0 = 0; - sprite->data2 = 0; - sprite->callback = sub_80CBCF8; - } + sprite->data2 += sprite->data4 / 10; + sprite->data4 += 3; + sprite->pos1.y = sprite->data2; break; } + break; + case 1: + if (sprite->data3 && sprite->affineAnimEnded) + { + sprite->data0 = 0; + sprite->data2 = 0; + sprite->callback = sub_80CBCF8; + } + break; } } @@ -1247,13 +1225,14 @@ void sub_80CBC8C(struct Sprite* sprite) void sub_80CBCF8(struct Sprite* sprite) { - if(sprite->data2 == gUnknown_083D680C[sprite->data0][1]) + if (sprite->data2 == gUnknown_083D680C[sprite->data0][1]) { - if(gUnknown_083D680C[sprite->data0][2] == 0x7F) + if (gUnknown_083D680C[sprite->data0][2] == 0x7F) { sprite->data0 = 0; sprite->callback = sub_80CBDB0; } + sprite->data2 = 0; sprite->data0++; } @@ -1263,7 +1242,7 @@ void sub_80CBCF8(struct Sprite* sprite) sprite->data1 = (gUnknown_083D680C[sprite->data0][0] * gUnknown_083D680C[sprite->data0][2] + sprite->data1) & 0xFF; if (!NotInBattle()) { - if((u16)(sprite->data1 - 1) <= 0xBE) + if ((u16)(sprite->data1 - 1) <= 0xBE) { sprite->subpriority = 31; } @@ -1272,6 +1251,7 @@ void sub_80CBCF8(struct Sprite* sprite) sprite->subpriority = 29; } } + sprite->pos2.x = Cos(sprite->data1, 0x3C); sprite->pos2.y = Sin(sprite->data1, 20); } @@ -1279,7 +1259,9 @@ void sub_80CBCF8(struct Sprite* sprite) void sub_80CBDB0(struct Sprite* sprite) { - if(sprite->data0 > 20) move_anim_8072740(sprite); + if (sprite->data0 > 20) + move_anim_8072740(sprite); + sprite->invisible = sprite->data0 % 2; sprite->data0++; } @@ -1299,6 +1281,7 @@ void sub_80CBDF4(u8 taskId) task->data[2] = CreateSprite(&gSpriteTemplate_83D6884, task->data[8], task->data[9], task->data[4]); if (task->data[2] == 0x40) DestroyAnimVisualTask(taskId); + gSprites[task->data[2]].data0 = 10; gSprites[task->data[2]].data1 = task->data[8]; gSprites[task->data[2]].data2 = task->data[6] - (task->data[10] / 2 + 10) * task->data[5]; @@ -1314,243 +1297,214 @@ void sub_80CBF5C(u8 taskId) struct Task* task = &gTasks[taskId]; struct Sprite* sprite = &gSprites[task->data[2]]; int a = task->data[0]; - switch(a) + switch (a) { - case 4: - { - sub_80CC358(task, taskId); - if(sub_8078718(sprite) == 0) - { - break; - } - else - { - task->data[15] = 5; - task->data[0] = 0xFF; - break; - } - } - case 8: + case 4: + sub_80CC358(task, taskId); + if (sub_8078718(sprite) == 0) { - sub_80CC358(task, taskId); - if(sub_8078718(sprite) == 0) - { - break; - } - else - { - task->data[15] = 9; - task->data[0] = 0xFF; break; - } } - case 0: + else { - sub_80CC358(task, taskId); - if(sub_8078718(sprite) == 0) - { - break; - } - task->data[15] = 1; + task->data[15] = 5; task->data[0] = 0xFF; - break; } - case 1: + break; + case 8: + sub_80CC358(task, taskId); + if (sub_8078718(sprite) == 0) { - sprite->pos1.x += sprite->pos2.x; - sprite->pos1.y += sprite->pos2.y; - sprite->pos2.x = 0; - sprite->pos2.y = 0; - sprite->data0 = 10; - sprite->data1 = sprite->pos1.x; - sprite->data2 = task->data[6]; - sprite->data3 = sprite->pos1.y; - sprite->data4 = task->data[7]; - sprite->data5 = sub_80CC338(sprite); - task->data[4] += 2; - task->data[3] = a; - sprite->subpriority = task->data[4]; - StartSpriteAnim(sprite, task->data[3]); - sub_80786EC(sprite); - task->data[0]++; break; } - case 2: + else { - sub_80CC358(task, taskId); - if(sub_8078718(sprite) == 0) - { - break; - } - task->data[15] = 3; + task->data[15] = 9; task->data[0] = 0xFF; - break; } - case 3: - { - sprite->pos1.x += sprite->pos2.x; - sprite->pos1.y += sprite->pos2.y; - sprite->pos2.x = 0; - sprite->pos2.y = 0; - sprite->data0 = 10; - sprite->data1 = sprite->pos1.x; - sprite->data2 = task->data[6] - ((task->data[10] / 2) + 10) * task->data[5]; - sprite->data3 = sprite->pos1.y; - sprite->data4 = task->data[7] - ((task->data[11] / 2) + 10) * task->data[5]; - sprite->data5 = sub_80CC338(sprite); - task->data[3] = 2; - sprite->subpriority = task->data[4]; - StartSpriteAnim(sprite, task->data[3]); - sub_80786EC(sprite); - task->data[0]++; + break; + case 0: + sub_80CC358(task, taskId); + if (sub_8078718(sprite) == 0) break; - } - case 5: + + task->data[15] = 1; + task->data[0] = 0xFF; + break; + case 1: + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.x = 0; + sprite->pos2.y = 0; + sprite->data0 = 10; + sprite->data1 = sprite->pos1.x; + sprite->data2 = task->data[6]; + sprite->data3 = sprite->pos1.y; + sprite->data4 = task->data[7]; + sprite->data5 = sub_80CC338(sprite); + task->data[4] += 2; + task->data[3] = a; + sprite->subpriority = task->data[4]; + StartSpriteAnim(sprite, task->data[3]); + sub_80786EC(sprite); + task->data[0]++; + break; + case 2: + sub_80CC358(task, taskId); + if (sub_8078718(sprite) == 0) + break; + + task->data[15] = 3; + task->data[0] = 0xFF; + break; + case 3: + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.x = 0; + sprite->pos2.y = 0; + sprite->data0 = 10; + sprite->data1 = sprite->pos1.x; + sprite->data2 = task->data[6] - ((task->data[10] / 2) + 10) * task->data[5]; + sprite->data3 = sprite->pos1.y; + sprite->data4 = task->data[7] - ((task->data[11] / 2) + 10) * task->data[5]; + sprite->data5 = sub_80CC338(sprite); + task->data[3] = 2; + sprite->subpriority = task->data[4]; + StartSpriteAnim(sprite, task->data[3]); + sub_80786EC(sprite); + task->data[0]++; + break; + case 5: + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.x = 0; + sprite->pos2.y = 0; + sprite->data0 = 10; + sprite->data1 = sprite->pos1.x; + sprite->data2 = task->data[6] + ((task->data[10] / 2) + 10) * task->data[5]; + sprite->data3 = sprite->pos1.y; + sprite->data4 = task->data[7] + ((task->data[11] / 2) + 10) * task->data[5]; + sprite->data5 = sub_80CC338(sprite); + task->data[4] -= 2; + task->data[3] = 3; + sprite->subpriority = task->data[4]; + StartSpriteAnim(sprite, task->data[3]); + sub_80786EC(sprite); + task->data[0]++; + break; + case 6: + sub_80CC358(task, taskId); + if (sub_8078718(sprite) == 0) + break; + + task->data[15] = 7; + task->data[0] = 0xFF; + break; + case 7: + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.x = 0; + sprite->pos2.y = 0; + sprite->data0 = 10; + sprite->data1 = sprite->pos1.x; + sprite->data2 = task->data[6]; + sprite->data3 = sprite->pos1.y; + sprite->data4 = task->data[7]; + sprite->data5 = sub_80CC338(sprite); + task->data[4] += 2; + task->data[3] = 4; + sprite->subpriority = task->data[4]; + StartSpriteAnim(sprite, task->data[3]); + sub_80786EC(sprite); + task->data[0]++; + break; + case 9: + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.x = 0; + sprite->pos2.y = 0; + sprite->data0 = 10; + sprite->data1 = sprite->pos1.x; + sprite->data2 = task->data[6] - ((task->data[10] / 2) + 10) * task->data[5]; + sprite->data3 = sprite->pos1.y; + sprite->data4 = task->data[7] + ((task->data[11] / 2) + 10) * task->data[5]; + sprite->data5 = sub_80CC338(sprite); + task->data[3] = 5; + sprite->subpriority = task->data[4]; + StartSpriteAnim(sprite, task->data[3]); + sub_80786EC(sprite); + task->data[0]++; + break; + case 10: + sub_80CC358(task, taskId); + if (sub_8078718(sprite) == 0) { - sprite->pos1.x += sprite->pos2.x; - sprite->pos1.y += sprite->pos2.y; - sprite->pos2.x = 0; - sprite->pos2.y = 0; - sprite->data0 = 10; - sprite->data1 = sprite->pos1.x; - sprite->data2 = task->data[6] + ((task->data[10] / 2) + 10) * task->data[5]; - sprite->data3 = sprite->pos1.y; - sprite->data4 = task->data[7] + ((task->data[11] / 2) + 10) * task->data[5]; - sprite->data5 = sub_80CC338(sprite); - task->data[4] -= 2; - task->data[3] = 3; - sprite->subpriority = task->data[4]; - StartSpriteAnim(sprite, task->data[3]); - sub_80786EC(sprite); - task->data[0]++; break; } - case 6: + else { - sub_80CC358(task, taskId); - if(sub_8078718(sprite) == 0) - { - break; - } - task->data[15] = 7; + task->data[15] = 11; task->data[0] = 0xFF; - break; } - case 7: + break; + case 11: + { + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.x = 0; + sprite->pos2.y = 0; + sprite->data0 = 10; + sprite->data1 = sprite->pos1.x; + sprite->data2 = task->data[8]; + sprite->data3 = sprite->pos1.y; + sprite->data4 = task->data[9]; + sprite->data5 = sub_80CC338(sprite); + task->data[4] -= 2; + task->data[3] = 6; + sprite->subpriority = task->data[4]; + StartSpriteAnim(sprite, task->data[3]); + sub_80786EC(sprite); + task->data[0]++; + break; + } + case 12: + sub_80CC358(task, taskId); + if (sub_8078718(sprite) != 0) { - sprite->pos1.x += sprite->pos2.x; - sprite->pos1.y += sprite->pos2.y; - sprite->pos2.x = 0; - sprite->pos2.y = 0; - sprite->data0 = 10; - sprite->data1 = sprite->pos1.x; - sprite->data2 = task->data[6]; - sprite->data3 = sprite->pos1.y; - sprite->data4 = task->data[7]; - sprite->data5 = sub_80CC338(sprite); - task->data[4] += 2; - task->data[3] = 4; - sprite->subpriority = task->data[4]; - StartSpriteAnim(sprite, task->data[3]); - sub_80786EC(sprite); + DestroySprite(sprite); task->data[0]++; - break; } - case 9: + break; + case 13: + if (task->data[12] == 0) { - sprite->pos1.x += sprite->pos2.x; - sprite->pos1.y += sprite->pos2.y; - sprite->pos2.x = 0; - sprite->pos2.y = 0; - sprite->data0 = 10; - sprite->data1 = sprite->pos1.x; - sprite->data2 = task->data[6] - ((task->data[10] / 2) + 10) * task->data[5]; - sprite->data3 = sprite->pos1.y; - sprite->data4 = task->data[7] + ((task->data[11] / 2) + 10) * task->data[5]; - sprite->data5 = sub_80CC338(sprite); - task->data[3] = 5; - sprite->subpriority = task->data[4]; - StartSpriteAnim(sprite, task->data[3]); - sub_80786EC(sprite); - task->data[0]++; - break; - } - case 10: - { - sub_80CC358(task, taskId); - if(sub_8078718(sprite) == 0) - { - break; - } - else - { - task->data[15] = 11; - task->data[0] = 0xFF; - break; - } - } - case 11: - { - sprite->pos1.x += sprite->pos2.x; - sprite->pos1.y += sprite->pos2.y; - sprite->pos2.x = 0; - sprite->pos2.y = 0; - sprite->data0 = 10; - sprite->data1 = sprite->pos1.x; - sprite->data2 = task->data[8]; - sprite->data3 = sprite->pos1.y; - sprite->data4 = task->data[9]; - sprite->data5 = sub_80CC338(sprite); - task->data[4] -= 2; - task->data[3] = 6; - sprite->subpriority = task->data[4]; - StartSpriteAnim(sprite, task->data[3]); - sub_80786EC(sprite); - task->data[0]++; - break; - } - case 12: - { - sub_80CC358(task, taskId); - if(sub_8078718(sprite) != 0) - { - DestroySprite(sprite); - task->data[0]++; - } - break; - } - case 13: - { - if(task->data[12] == 0) - { - DestroyAnimVisualTask(taskId); - break; - } - break; + DestroyAnimVisualTask(taskId); } - case 255: + break; + case 255: + task->data[1]++; + if (task->data[1] > 5) { - task->data[1]++; - if(task->data[1] > 5) - { - task->data[1] = 0; - task->data[0] = task->data[15]; - } + task->data[1] = 0; + task->data[0] = task->data[15]; } + break; } } s16 sub_80CC338(struct Sprite* sprite) { s16 var = 8; - if(sprite->data4 < sprite->pos1.y) var = -var; + if (sprite->data4 < sprite->pos1.y) + var = -var; + return var; } void sub_80CC358(struct Task* task, u8 taskId) { task->data[14]++; - if(task->data[14] > 0) + if (task->data[14] > 0) { u8 spriteId; s16 spriteX; @@ -1581,7 +1535,7 @@ void sub_80CC408(struct Sprite* sprite) sprite->data0 = 0; sprite->invisible ^= 1; sprite->data1++; - if(sprite->data1 > 8) + if (sprite->data1 > 8) { gTasks[sprite->data6].data[sprite->data7]--; DestroySprite(sprite); @@ -1596,6 +1550,7 @@ void sub_80CC474(struct Sprite* sprite) bank = gBattleAnimBankAttacker; else bank = gBattleAnimBankTarget; + if (GetBankSide(bank) != 0) { sprite->data4 = 0; @@ -1608,37 +1563,31 @@ void sub_80CC474(struct Sprite* sprite) sprite->data2 = -gBattleAnimArgs[3]; sprite->pos1.x = 0x100; } + sprite->data1 = gBattleAnimArgs[1]; sprite->data0 = gBattleAnimArgs[2]; sprite->data3 = gBattleAnimArgs[4]; - switch(gBattleAnimArgs[5]) + switch (gBattleAnimArgs[5]) { - case 0: - { - sprite->pos1.y = gBattleAnimArgs[0]; - sprite->oam.priority = sub_8079ED4(bank); - break; - } - case 1: - { - sprite->pos1.y = gBattleAnimArgs[0]; - sprite->oam.priority = sub_8079ED4(bank) + 1; - break; - } - case 2: - { - sprite->pos1.y = sub_8077ABC(bank, 3) + gBattleAnimArgs[0]; - sprite->oam.priority = sub_8079ED4(bank); - break; - } - case 3: - { - sprite->pos1.y = sub_8077ABC(gBattleAnimBankTarget, 3) + gBattleAnimArgs[0]; - GetAnimBankSpriteId(1); - sprite->oam.priority = sub_8079ED4(bank) + 1; - break; - } + case 0: + sprite->pos1.y = gBattleAnimArgs[0]; + sprite->oam.priority = sub_8079ED4(bank); + break; + case 1: + sprite->pos1.y = gBattleAnimArgs[0]; + sprite->oam.priority = sub_8079ED4(bank) + 1; + break; + case 2: + sprite->pos1.y = sub_8077ABC(bank, 3) + gBattleAnimArgs[0]; + sprite->oam.priority = sub_8079ED4(bank); + break; + case 3: + sprite->pos1.y = sub_8077ABC(gBattleAnimBankTarget, 3) + gBattleAnimArgs[0]; + GetAnimBankSpriteId(1); + sprite->oam.priority = sub_8079ED4(bank) + 1; + break; } + sprite->callback = sub_80CC580; } @@ -1659,41 +1608,41 @@ void sub_80CC580(struct Sprite* sprite) if (sprite->pos2.x + sprite->pos1.x > -16) return; } + move_anim_8074EE0(sprite); } void sub_80CC5F8(u8 taskId) { struct Task* task = &gTasks[taskId]; - switch(task->data[0]) + switch (task->data[0]) { - case 0: - { - task->data[8] = IndexOfSpritePaletteTag(0x274f) * 16 + 256; - task->data[12] = IndexOfSpritePaletteTag(0x27b0) * 16 + 256; - task->data[0]++; - break; - } - case 1: + case 0: + task->data[8] = IndexOfSpritePaletteTag(0x274f) * 16 + 256; + task->data[12] = IndexOfSpritePaletteTag(0x27b0) * 16 + 256; + task->data[0]++; + break; + case 1: + task->data[9]++; + if (task->data[9] >= 0) { - task->data[9]++; - if(task->data[9] >= 0) + task->data[9] = 0; + BlendPalette(task->data[8], 0x10, task->data[10], gUnknown_083D6984[task->data[11]]); + BlendPalette(task->data[12], 0x10, task->data[10], gUnknown_083D6984[task->data[11]]); + task->data[10]++; + if (task->data[10] == 17) { - task->data[9] = 0; - BlendPalette(task->data[8], 0x10, task->data[10], gUnknown_083D6984[task->data[11]]); - BlendPalette(task->data[12], 0x10, task->data[10], gUnknown_083D6984[task->data[11]]); - task->data[10]++; - if(task->data[10] == 17) - { - task->data[10] = 0; - task->data[11]++; - if(task->data[11] == 7) task->data[11] = 0; - } + task->data[10] = 0; + task->data[11]++; + if (task->data[11] == 7) + task->data[11] = 0; } - break; } + break; } - if(gBattleAnimArgs[7] == -1) DestroyAnimVisualTask(taskId); + + if (gBattleAnimArgs[7] == -1) + DestroyAnimVisualTask(taskId); } void sub_80CC6CC(struct Sprite* sprite) @@ -1710,7 +1659,6 @@ void sub_80CC6CC(struct Sprite* sprite) } else { - if (gBattleAnimArgs[0] == 0) { a = sub_8077ABC(gBattleAnimBankAttacker, 2); @@ -1721,6 +1669,7 @@ void sub_80CC6CC(struct Sprite* sprite) a = sub_8077ABC(gBattleAnimBankTarget, 2); b = sub_8077ABC(gBattleAnimBankTarget, 3); } + sprite->data0 = gBattleAnimArgs[4]; if (gBattleAnimArgs[1] == 0) { @@ -1736,6 +1685,7 @@ void sub_80CC6CC(struct Sprite* sprite) sprite->data5 = gBattleAnimArgs[2] + a; sprite->data6 = gBattleAnimArgs[3] + b; } + x = sprite->pos1.x; sprite->data1 = x * 16; y = sprite->pos1.y; @@ -1745,6 +1695,7 @@ void sub_80CC6CC(struct Sprite* sprite) c = sub_80790F0(sprite->data5 - x, sprite->data6 - y); if (NotInBattle()) c -= 0x8000; + sub_8078FDC(sprite, 0, 0x100, 0x100, c); sprite->callback = sub_80CC7D4; } @@ -1752,7 +1703,7 @@ void sub_80CC6CC(struct Sprite* sprite) void sub_80CC7D4(struct Sprite* sprite) { - if(sprite->data0) + if (sprite->data0) { sprite->data1 += sprite->data3; sprite->data2 += sprite->data4; @@ -1761,18 +1712,20 @@ void sub_80CC7D4(struct Sprite* sprite) sprite->data0--; } else + { move_anim_8074EE0(sprite); + } } void sub_80CC810(struct Sprite* sprite) { - if(sprite->animEnded) + if (sprite->animEnded) move_anim_8072740(sprite); } void sub_80CC82C(struct Sprite* sprite) { - if(GetBankSide(gBattleAnimBankAttacker) != 0) + if (GetBankSide(gBattleAnimBankAttacker) != 0) { sprite->pos1.x -= gBattleAnimArgs[0]; sprite->pos1.y += gBattleAnimArgs[1]; @@ -1782,14 +1735,16 @@ void sub_80CC82C(struct Sprite* sprite) sprite->pos1.x += gBattleAnimArgs[0]; sprite->pos1.y += gBattleAnimArgs[1]; } + sprite->callback = sub_8078600; StoreSpriteCallbackInData6(sprite, move_anim_8072740); } void sub_80CC884(struct Sprite* sprite) { - if(GetBankSide(gBattleAnimBankAttacker) == 0) + if (GetBankSide(gBattleAnimBankAttacker) == 0) StartSpriteAnim(sprite, 1); + sprite->callback = sub_80CC810; sub_807867C(sprite, gBattleAnimArgs[0]); sprite->pos1.y += gBattleAnimArgs[1]; @@ -1812,21 +1767,25 @@ void sub_80CC914(struct Sprite* sprite) { sprite->pos1.x = sub_8077ABC(gBattleAnimBankTarget, 0); sprite->pos1.y = sub_8077ABC(gBattleAnimBankTarget, 1); - if(GetBankSide(gBattleAnimBankTarget) == 0) + if (GetBankSide(gBattleAnimBankTarget) == 0) sprite->pos1.y += 8; + sprite->callback = sub_80CCB00; - if(gBattleAnimArgs[2] == 0) + if (gBattleAnimArgs[2] == 0) + { sprite->pos1.x += gBattleAnimArgs[0]; + } else { sprite->pos1.x -= gBattleAnimArgs[0]; sprite->hFlip = 1; } + sprite->pos1.y += gBattleAnimArgs[1]; sprite->data1 -= 0x400; sprite->data2 += 0x400; sprite->data5 = gBattleAnimArgs[2]; - if(sprite->data5 == 1) + if (sprite->data5 == 1) sprite->data1 = -sprite->data1; } @@ -1834,50 +1793,49 @@ void sub_80CC9BC(struct Sprite* sprite) { u8 a; u8 b; - switch(gBattleAnimArgs[3]) + switch (gBattleAnimArgs[3]) { - case 1: - { - a = sub_8077ABC(gBattleAnimBankTarget ^ 2, 0); - b = sub_8077ABC(gBattleAnimBankTarget ^ 2, 1); - break; - } - case 2: - { - a = sub_8077ABC(gBattleAnimBankTarget, 0); - b = sub_8077ABC(gBattleAnimBankTarget, 1); - if(IsAnimBankSpriteVisible(gBattleAnimBankTarget ^ 2)) - { - a = (sub_8077ABC(gBattleAnimBankTarget ^ 2, 0) + a) / 2; - b = (sub_8077ABC(gBattleAnimBankTarget ^ 2, 1) + b) / 2; - } - break; - } - case 0: - default: + case 1: + a = sub_8077ABC(gBattleAnimBankTarget ^ 2, 0); + b = sub_8077ABC(gBattleAnimBankTarget ^ 2, 1); + break; + case 2: + a = sub_8077ABC(gBattleAnimBankTarget, 0); + b = sub_8077ABC(gBattleAnimBankTarget, 1); + if (IsAnimBankSpriteVisible(gBattleAnimBankTarget ^ 2)) { - a = sub_8077ABC(gBattleAnimBankTarget, 0); - b = sub_8077ABC(gBattleAnimBankTarget, 1); - break; + a = (sub_8077ABC(gBattleAnimBankTarget ^ 2, 0) + a) / 2; + b = (sub_8077ABC(gBattleAnimBankTarget ^ 2, 1) + b) / 2; } + break; + case 0: + default: + a = sub_8077ABC(gBattleAnimBankTarget, 0); + b = sub_8077ABC(gBattleAnimBankTarget, 1); + break; } + sprite->pos1.x = a; sprite->pos1.y = b; - if(GetBankSide(gBattleAnimBankTarget) == 0) + if (GetBankSide(gBattleAnimBankTarget) == 0) sprite->pos1.y += 8; + sprite->callback = sub_80CCB00; - if(gBattleAnimArgs[2] == 0) + if (gBattleAnimArgs[2] == 0) + { sprite->pos1.x += gBattleAnimArgs[0]; + } else { sprite->pos1.x -= gBattleAnimArgs[0]; sprite->hFlip = 1; } + sprite->pos1.y += gBattleAnimArgs[1]; sprite->data1 -= 0x400; sprite->data2 += 0x400; sprite->data5 = gBattleAnimArgs[2]; - if(sprite->data5 == 1) + if (sprite->data5 == 1) sprite->data1 = -sprite->data1; } @@ -1885,15 +1843,16 @@ void sub_80CCB00(struct Sprite* sprite) { sprite->data3 += sprite->data1; sprite->data4 += sprite->data2; - if(sprite->data5 == 0) + if (sprite->data5 == 0) sprite->data1 += 0x18; else sprite->data1 -= 0x18; + sprite->data2 -= 0x18; sprite->pos2.x = sprite->data3 >> 8; sprite->pos2.y = sprite->data4 >> 8; sprite->data0++; - if(sprite->data0 == 20) + if (sprite->data0 == 20) { StoreSpriteCallbackInData6(sprite, move_anim_8072740); sprite->data0 = 3; @@ -1903,9 +1862,9 @@ void sub_80CCB00(struct Sprite* sprite) void unref_sub_80CCB6C(struct Sprite* sprite) { - if(sprite->data2 > 1) + if (sprite->data2 > 1) { - if(sprite->data3 & 1) + if (sprite->data3 & 1) { sprite->invisible = 0; gSprites[sprite->data0].invisible = 0; @@ -1917,6 +1876,7 @@ void unref_sub_80CCB6C(struct Sprite* sprite) gSprites[sprite->data0].invisible = 1; gSprites[sprite->data1].invisible = 1; } + sprite->data2 = 0; sprite->data3++; } @@ -1924,7 +1884,8 @@ void unref_sub_80CCB6C(struct Sprite* sprite) { sprite->data2++; } - if(sprite->data3 == 10) + + if (sprite->data3 == 10) { DestroySprite(&gSprites[sprite->data0]); DestroySprite(&gSprites[sprite->data1]); @@ -1935,10 +1896,11 @@ void unref_sub_80CCB6C(struct Sprite* sprite) void sub_80CCC50(struct Sprite* sprite) { sprite->data0 = gBattleAnimArgs[2]; - if(GetBankSide(gBattleAnimBankAttacker) != 0) + if (GetBankSide(gBattleAnimBankAttacker) != 0) sprite->pos1.x -= gBattleAnimArgs[0]; else sprite->pos1.x += gBattleAnimArgs[0]; + StartSpriteAnim(sprite, gBattleAnimArgs[5]); sprite->data1 = -gBattleAnimArgs[3]; sprite->pos1.y += gBattleAnimArgs[1]; @@ -1951,30 +1913,33 @@ void sub_80CCCB4(struct Sprite* sprite) { sprite->pos2.x = Cos(sprite->data0, 100); sprite->pos2.y = Sin(sprite->data0, 20); - if(sprite->data0 <= 0x7F) + if (sprite->data0 <= 0x7F) sprite->subpriority = 0; else sprite->subpriority = 14; + sprite->data0 = (sprite->data0 + sprite->data1) & 0xFF; sprite->data5 += 0x82; sprite->pos2.y += sprite->data5 >> 8; sprite->data2++; - if(sprite->data2 == sprite->data3) + if (sprite->data2 == sprite->data3) move_anim_8072740(sprite); } void sub_80CCD24(struct Sprite* sprite) { - if(NotInBattle() != 0) + if (NotInBattle() != 0) { gBattleAnimArgs[1] += 8; } + sprite->pos1.x = sub_8077EE4(gBattleAnimBankAttacker, 0) + gBattleAnimArgs[0]; sprite->pos1.y = sub_8077EE4(gBattleAnimBankAttacker, 1) + gBattleAnimArgs[1]; if (GetBankSide(gBattleAnimBankAttacker) == 0 || NotInBattle()) sprite->oam.priority = sub_8079ED4(gBattleAnimBankAttacker) + 1; else sprite->oam.priority = sub_8079ED4(gBattleAnimBankAttacker); + sprite->data0 = gBattleAnimArgs[2]; sprite->data2 = (IndexOfSpritePaletteTag(0x2828) << 4) + 0x100; sprite->data7 = 16; @@ -1990,24 +1955,26 @@ void sub_80CCE0C(struct Sprite* sprite) sprite->data5 += 0x60; sprite->pos2.x = -(sprite->data5 >> 8); sprite->data1++; - if(sprite->data1 > 1) + if (sprite->data1 > 1) { sprite->data1 = 0; a = gPlttBufferFaded[sprite->data2 + 1]; i = 0; do - { - gPlttBufferFaded[sprite->data2 + ++i] = gPlttBufferFaded[sprite->data2 + i + 1]; - } - while ( i <= 5 ); + { + gPlttBufferFaded[sprite->data2 + ++i] = gPlttBufferFaded[sprite->data2 + i + 1]; + } while ( i <= 5 ); + gPlttBufferFaded[sprite->data2 + 7] = a; } + if (sprite->data7 > 6 && sprite->data0 >0 && ++sprite->data6 > 1) { sprite->data6 = 0; sprite->data7 -= 1; REG_BLDALPHA = (sprite->data7 << 8) | (16 - sprite->data7);; } + if (sprite->data0 >0) { sprite->data0 -= 1; @@ -2017,7 +1984,7 @@ void sub_80CCE0C(struct Sprite* sprite) sprite->data6 = 0; sprite->data7++; REG_BLDALPHA = (sprite->data7 << 8) | (16 - sprite->data7); - if(sprite->data7 == 16) + if (sprite->data7 == 16) { sprite->invisible = 1; sprite->callback = sub_807861C; @@ -2043,98 +2010,95 @@ void sub_80CCF04(struct Sprite* sprite) void sub_80CCF70(struct Sprite* sprite) { - switch(sprite->data0) + switch (sprite->data0) { - case 0: - { - if(++sprite->data2 > 0) - { - sprite->data2 = 0; - if(((++sprite->data1) & 1) != 0) - { - if(sprite->data6 <= 15) - sprite->data6++; - } - else if (sprite->data7 > 0) - sprite->data7--; - REG_BLDALPHA = (sprite->data7 << 8) | sprite->data6; - if(sprite->data6 == 16 && sprite->data7 == 0) - { - sprite->data1 = 0; - sprite->data0++; - break; - } - } - break; - } - case 1: - { - if(++sprite->data1 > 8) - { - sprite->data1 = 0; - StartSpriteAffineAnim(sprite, 1); - sprite->data0++; - break; - } - break; - } - case 2: + case 0: + if (++sprite->data2 > 0) { - sub_80CD0CC(sprite, 16, 4); - if(++sprite->data1 > 2) - { - sprite->data1 = 0; - sprite->pos1.y++; - } - if(++sprite->data2 <= 29) - break; - if(sprite->data2 & 1) + sprite->data2 = 0; + if (((++sprite->data1) & 1) != 0) { - if(sprite->data6 > 0) - sprite->data6--; + if (sprite->data6 <= 15) + sprite->data6++; } - else if(sprite->data7 <= 15) - sprite->data7++; + else if (sprite->data7 > 0) + sprite->data7--; + REG_BLDALPHA = (sprite->data7 << 8) | sprite->data6; - if(sprite->data6 == 0 && sprite->data7 == 16) + if (sprite->data6 == 16 && sprite->data7 == 0) { sprite->data1 = 0; - sprite->data2 = 0; sprite->data0++; - break; } - else - break; } - case 3: + break; + case 1: + if (++sprite->data1 > 8) { - sprite->invisible = 1; + sprite->data1 = 0; + StartSpriteAffineAnim(sprite, 1); sprite->data0++; + } + break; + case 2: + sub_80CD0CC(sprite, 16, 4); + if (++sprite->data1 > 2) + { + sprite->data1 = 0; + sprite->pos1.y++; + } + + if (++sprite->data2 <= 29) break; + + if (sprite->data2 & 1) + { + if (sprite->data6 > 0) + sprite->data6--; } - case 4: + else if (sprite->data7 <= 15) { - REG_BLDCNT = 0; - REG_BLDALPHA = 0; - move_anim_8072740(sprite); + sprite->data7++; } + + REG_BLDALPHA = (sprite->data7 << 8) | sprite->data6; + if (sprite->data6 == 0 && sprite->data7 == 16) + { + sprite->data1 = 0; + sprite->data2 = 0; + sprite->data0++; + } + break; + case 3: + sprite->invisible = 1; + sprite->data0++; + break; + case 4: + REG_BLDCNT = 0; + REG_BLDALPHA = 0; + move_anim_8072740(sprite); + break; } } void sub_80CD0CC(struct Sprite* sprite, int unk1, int unk2) { - if(sprite->data3 <= 11) + if (sprite->data3 <= 11) sprite->data4 += 2; - if((u16)(sprite->data3 - 0x12) <= 0x17) + + if ((u16)(sprite->data3 - 0x12) <= 0x17) sprite->data4 -= 2; - if((sprite->data3) > 0x2F) + + if ((sprite->data3) > 0x2F) sprite->data4 += 2; + sprite->pos2.x = sprite->data4 / 9; sprite->pos2.y = sprite->data4 / 14; - if(sprite->pos2.y < 0) + if (sprite->pos2.y < 0) sprite->pos2.y *= -1; + sprite->data3++; - if(sprite->data3 > 0x3B) + if (sprite->data3 > 0x3B) sprite->data3 = 0; } @@ -2142,6 +2106,7 @@ void sub_80CD140(struct Sprite* sprite) { if (!gBattleAnimArgs[2]) sub_8078650(sprite); + sub_807867C(sprite, gBattleAnimArgs[0]); sprite->pos1.y += gBattleAnimArgs[1]; sprite->data0 = gBattleAnimArgs[5]; @@ -2158,6 +2123,7 @@ void sub_80CD190(struct Sprite* sprite) bank = gBattleAnimBankAttacker; else bank = gBattleAnimBankTarget; + if (IsDoubleBattle() && IsAnimBankSpriteVisible(bank ^ 2)) { sub_807A3FC(bank, gBattleAnimArgs[6], &sprite->pos1.x, &sprite->pos1.y); @@ -2176,8 +2142,10 @@ void sub_80CD190(struct Sprite* sprite) sprite->pos1.x = sub_8077ABC(bank, 2); sprite->pos1.y = sub_8077ABC(bank, 3) + gBattleAnimArgs[1]; } + sub_807867C(sprite, gBattleAnimArgs[0]); } + sprite->data0 = gBattleAnimArgs[5]; sprite->data1 = gBattleAnimArgs[3]; sprite->data2 = gBattleAnimArgs[4]; @@ -2199,6 +2167,7 @@ void sub_80CD274(struct Sprite* sprite) sprite->pos1.y += gBattleAnimArgs[1]; StartSpriteAnim(sprite, 1); } + sprite->callback = sub_80CD2D4; } @@ -2210,7 +2179,8 @@ void sub_80CD2D4(struct Sprite* sprite) sprite->pos2.x = Sin(sprite->data1 * 4, 3); sprite->data1++; } - if(sprite->animEnded) + + if (sprite->animEnded) move_anim_8072740(sprite); } @@ -2230,6 +2200,7 @@ void sub_80CD328(struct Sprite* sprite) sprite->data3 = 0xFFFF; StartSpriteAffineAnim(sprite, 1); } + sprite->callback = sub_80CD394; } @@ -2254,27 +2225,28 @@ void sub_80CD3E0(struct Sprite* sprite) void sub_80CD408(struct Sprite* sprite) { - switch(sprite->data5 & 1) + switch (sprite->data5 & 1) { - case 0: - sprite->data0 = 1; - sprite->callback = sub_80782D8; - StoreSpriteCallbackInData6(sprite, sub_80CD408); - break; - case 1: - sprite->pos1.x += sprite->pos2.x; - sprite->pos1.y += sprite->pos2.y; - sprite->pos2.y = 0; - sprite->pos2.x = 0; - sprite->data0 = 8; - sprite->data2 = sprite->pos1.x + gUnknown_083D6DDC[sprite->data5 >> 8][0]; - sprite->data4 = sprite->pos1.y + gUnknown_083D6DDC[sprite->data5 >> 8][1]; - sprite->callback = sub_8078B34; - StoreSpriteCallbackInData6(sprite, sub_80CD4B8); - sprite->data5 += 0x100; - PlaySE12WithPanning(0xD2, sub_8076F98(0x3F)); - break; + case 0: + sprite->data0 = 1; + sprite->callback = sub_80782D8; + StoreSpriteCallbackInData6(sprite, sub_80CD408); + break; + case 1: + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.y = 0; + sprite->pos2.x = 0; + sprite->data0 = 8; + sprite->data2 = sprite->pos1.x + gUnknown_083D6DDC[sprite->data5 >> 8][0]; + sprite->data4 = sprite->pos1.y + gUnknown_083D6DDC[sprite->data5 >> 8][1]; + sprite->callback = sub_8078B34; + StoreSpriteCallbackInData6(sprite, sub_80CD4B8); + sprite->data5 += 0x100; + PlaySE12WithPanning(0xD2, sub_8076F98(0x3F)); + break; } + sprite->data5 ^= 1; } @@ -2287,14 +2259,16 @@ void sub_80CD4B8(struct Sprite* sprite) StoreSpriteCallbackInData6(sprite, sub_80CD4EC); } else + { sprite->callback = sub_80CD408; + } } void sub_80CD4EC(struct Sprite* sprite) { s16 a; s16 b; - if(sprite->oam.affineParam == 0) + if (sprite->oam.affineParam == 0) { sprite->data0 = 3; sprite->data1 = 0; @@ -2304,25 +2278,26 @@ void sub_80CD4EC(struct Sprite* sprite) } else { - switch(sprite->oam.affineParam) + switch (sprite->oam.affineParam) { - case 1: - a = -8; - b = -8; - break; - case 2: - a = -8; - b = 8; - break; - case 3: - a = 8; - b = -8; - break; - default: - a = 8; - b = 8; - break; + case 1: + a = -8; + b = -8; + break; + case 2: + a = -8; + b = 8; + break; + case 3: + a = 8; + b = -8; + break; + default: + a = 8; + b = 8; + break; } + sprite->pos1.x += sprite->pos2.x; sprite->pos1.y += sprite->pos2.y; sprite->pos2.y = 0; @@ -2343,7 +2318,10 @@ void sub_80CD5A8(struct Sprite* sprite) sprite->data1 = 16; } else if ((sprite->data1 -= 3) < 0) - sprite->data1 = 0; + { + sprite->data1 = 0; + } + BlendPalettes(sub_80791A8(1, 1, 1, 1, 1, 0, 0), sprite->data1, 0x7FFF); if (sprite->data1 == 16) { @@ -2354,7 +2332,9 @@ void sub_80CD5A8(struct Sprite* sprite) PlaySE12WithPanning(0xC0, sub_8076F98(0x3F)); } else if (sprite->data1 == 0) + { sprite->callback = sub_80CD654; + } } void sub_80CD654(struct Sprite* sprite) @@ -2374,6 +2354,7 @@ void sub_80CD67C(struct Sprite* sprite) sprite->data1++; sprite->invisible ^= 1; } + sprite->data0++; if (sprite->data1 == 8) move_anim_8072740(sprite); @@ -2387,13 +2368,13 @@ void sub_80CD6CC(struct Sprite* sprite) sprite->pos1.x -= 0x18; sprite->pos1.y -= 0x18; } - else if((s16)sprite->oam.affineParam == 2) + else if ((s16)sprite->oam.affineParam == 2) { sprite->pos1.x -= 0x18; sprite->pos1.y += 0x18; sprite->oam.matrixNum = 16; } - else if((s16)sprite->oam.affineParam == 3) + else if ((s16)sprite->oam.affineParam == 3) { sprite->pos1.x += 0x18; sprite->pos1.y -= 0x18; @@ -2405,6 +2386,7 @@ void sub_80CD6CC(struct Sprite* sprite) sprite->pos1.y += 0x18; sprite->oam.matrixNum = 24; } + sprite->oam.tileNum = (sprite->oam.tileNum + 16); sprite->callback = sub_80CD3E0; sub_80CD3E0(sprite); @@ -2414,20 +2396,20 @@ void sub_80CD774(struct Sprite* sprite) { sprite->invisible = 1; sprite->data0 = 0; - switch(gBattleAnimArgs[0]) + switch (gBattleAnimArgs[0]) { - case 0: - sprite->callback = sub_80CD7CC; - break; - case 1: - sprite->callback = sub_80CD8A8; - break; - case 2: - sprite->callback = sub_80CD8F8; - break; - default: - sprite->callback = sub_80CD9B8; - break; + case 0: + sprite->callback = sub_80CD7CC; + break; + case 1: + sprite->callback = sub_80CD8A8; + break; + case 2: + sprite->callback = sub_80CD8F8; + break; + default: + sprite->callback = sub_80CD9B8; + break; } } @@ -2450,6 +2432,7 @@ void sub_80CD81C(struct Sprite* sprite) sprite->data4 = (sprite->data6 = GetBankSide(gBattleAnimBankAttacker)) ? 0x300 : 0xFFFFFD00; sprite->data5 = 0; } + sprite->data5 += sprite->data4; obj_id_set_rotscale(sprite->data3, 0x100, 0x100, sprite->data5); sub_8078F9C(sprite->data3); @@ -2472,7 +2455,7 @@ void sub_80CD8A8(struct Sprite* sprite) void sub_80CD8F8(struct Sprite* sprite) { - if(++sprite->data0 > 8) + if (++sprite->data0 > 8) { sprite->data0 = 0; sprite->callback = sub_80CD91C; @@ -2496,6 +2479,7 @@ void sub_80CD91C(struct Sprite* sprite) sprite->data5 = 0xF400; } } + sprite->data5 += sprite->data4; obj_id_set_rotscale(sprite->data3, 0x100, 0x100, sprite->data5); sub_8078F9C(sprite->data3); @@ -2519,37 +2503,37 @@ void sub_80CD9C4(struct Sprite* sprite) void sub_80CD9D4(struct Sprite* sprite) { - switch(sprite->data0) + switch (sprite->data0) { - case 0: + case 0: + sprite->data1 = 0; + sprite->data2 = gObjectBankIDs[gBattleAnimBankAttacker]; + sprite->data3 = GetBankSide(gBattleAnimBankAttacker); + sprite->data4 = (sprite->data3 != 0) ? 0x200 : -0x200; + sprite->data5 = 0; + sub_8078E70(sprite->data2, 0); + sprite->data0++; + case 1: + sprite->data5 += sprite->data4; + obj_id_set_rotscale(sprite->data2, 0x100, 0x100, sprite->data5); + sub_8078F9C(sprite->data2); + if (++sprite->data1 > 3) + { sprite->data1 = 0; - sprite->data2 = gObjectBankIDs[gBattleAnimBankAttacker]; - sprite->data3 = GetBankSide(gBattleAnimBankAttacker); - sprite->data4 = (sprite->data3 != 0) ? 0x200 : -0x200; - sprite->data5 = 0; - sub_8078E70(sprite->data2, 0); + sprite->data4 *= -1; sprite->data0++; - case 1: - sprite->data5 += sprite->data4; - obj_id_set_rotscale(sprite->data2, 0x100, 0x100, sprite->data5); - sub_8078F9C(sprite->data2); - if (++sprite->data1 > 3) - { - sprite->data1 = 0; - sprite->data4 *= -1; - sprite->data0++; - } - break; - case 2: - sprite->data5 += sprite->data4; - obj_id_set_rotscale(sprite->data2, 0x100, 0x100, sprite->data5); - sub_8078F9C(sprite->data2); - if (++sprite->data1 > 3) - { - sub_8078F40(sprite->data2); - move_anim_8072740(sprite); - } - break; + } + break; + case 2: + sprite->data5 += sprite->data4; + obj_id_set_rotscale(sprite->data2, 0x100, 0x100, sprite->data5); + sub_8078F9C(sprite->data2); + if (++sprite->data1 > 3) + { + sub_8078F40(sprite->data2); + move_anim_8072740(sprite); + } + break; } } @@ -2559,41 +2543,43 @@ void sub_80CDAC8(u8 taskId) a = GetBankSide(gBattleAnimBankAttacker); gTasks[taskId].data[1] = a; gTasks[taskId].data[2] = 0; - switch(gBattleAnimArgs[0]) + switch (gBattleAnimArgs[0]) { - default: - DestroyAnimVisualTask(taskId); - break; - case 0: - gTasks[taskId].data[2] = 0; - gTasks[taskId].data[3] = 8; - gTasks[taskId].data[4] = 0; - gTasks[taskId].data[5] = 3; - if (a == 0) - gTasks[taskId].data[5] *= -1; - gTasks[taskId].func = sub_80CDB60; - break; - case 1: - gTasks[taskId].data[3] = 8; - gTasks[taskId].data[4] = 0x600; - gTasks[taskId].data[5] = 0xC0; - if (a == 0) - { - gTasks[taskId].data[4] = -gTasks[taskId].data[4]; - gTasks[taskId].data[5] = -gTasks[taskId].data[5]; - } - gTasks[taskId].func = sub_80CDD20; - break; + default: + DestroyAnimVisualTask(taskId); + break; + case 0: + gTasks[taskId].data[2] = 0; + gTasks[taskId].data[3] = 8; + gTasks[taskId].data[4] = 0; + gTasks[taskId].data[5] = 3; + if (a == 0) + gTasks[taskId].data[5] *= -1; + + gTasks[taskId].func = sub_80CDB60; + break; + case 1: + gTasks[taskId].data[3] = 8; + gTasks[taskId].data[4] = 0x600; + gTasks[taskId].data[5] = 0xC0; + if (a == 0) + { + gTasks[taskId].data[4] = -gTasks[taskId].data[4]; + gTasks[taskId].data[5] = -gTasks[taskId].data[5]; + } + + gTasks[taskId].func = sub_80CDD20; + break; } } void sub_80CDB60(u8 taskId) { struct Task *task = &gTasks[taskId]; - switch(task->data[2]) + switch (task->data[2]) { case 0: - if(task->data[3]) + if (task->data[3]) { task->data[4] += task->data[5]; gSprites[task->data[0]].pos2.x = task->data[4]; @@ -2638,6 +2624,7 @@ void sub_80CDB60(u8 taskId) gSprites[task->data[0]].pos2.x = task->data[4] + task->data[5]; else gSprites[task->data[0]].pos2.x = task->data[4] - task->data[5]; + task->data[6] = 1; task->data[3]--; } @@ -2706,6 +2693,7 @@ void sub_80CDD74(struct Sprite* sprite) sprite->pos1.x = sub_8077ABC(gBattleAnimBankTarget, 2) + gBattleAnimArgs[1]; sprite->pos1.y = sub_8077ABC(gBattleAnimBankTarget, 3) + gBattleAnimArgs[2]; } + sprite->data0 = 0; sprite->data1 = 0; StoreSpriteCallbackInData6(sprite, sub_80CDEC0); @@ -2751,11 +2739,11 @@ void sub_80CDEB0(struct Sprite* sprite) void sub_80CDEC0(struct Sprite* sprite) { - if(++sprite->data0 > 1) + if (++sprite->data0 > 1) { sprite->data0 = 0; sprite->invisible = !sprite->invisible; - if(++sprite->data1 > 8) + if (++sprite->data1 > 8) move_anim_8072740(sprite); } } @@ -2772,6 +2760,7 @@ void sub_80CDF0C(struct Sprite* sprite) sprite->pos1.x = sub_8077ABC(gBattleAnimBankTarget, 0) + gBattleAnimArgs[1]; sprite->pos1.y = sub_8077ABC(gBattleAnimBankTarget, 1) + gBattleAnimArgs[2]; } + sprite->data0 = 0; sprite->data1 = gBattleAnimArgs[3]; sprite->callback = sub_80CDF70; @@ -2784,6 +2773,7 @@ void sub_80CDF70(struct Sprite* sprite) sprite->data0 = 0; sprite->pos1.y--; } + sprite->pos1.y -= sprite->data0; if (sprite->animEnded) move_anim_8072740(sprite); @@ -2813,6 +2803,7 @@ void sub_80CE000(struct Sprite* sprite) if (!(sprite->data4 & 1)) PlaySE12WithPanning(SE_W207B, sprite->data5); } + sprite->data0 = 0; if (++sprite->data2 > 1) { @@ -2820,6 +2811,7 @@ void sub_80CE000(struct Sprite* sprite) sprite->data1++; } } + if (sprite->animEnded && sprite->data1 > 16 && sprite->invisible) move_anim_8072740(sprite); } @@ -2834,6 +2826,7 @@ void sub_80CE09C(struct Sprite* sprite) sprite->pos1.y += 10; sprite->data0++; } + if ((u16)gBattleAnimArgs[7] == 0xFFFF) move_anim_8072740(sprite); } @@ -2873,7 +2866,9 @@ void sub_80CE17C(struct Sprite* sprite) void sub_80CE1AC(struct Sprite* sprite) { if (sprite->data0) + { sprite->data0--; + } else { sprite->animPaused = 0; @@ -2904,9 +2899,11 @@ void unref_sub_80CE260(u8 taskId) { if (gBattleAnimArgs[0] == 1 && GetBankSide(i) == 0) sub_8043DB0(gHealthboxIDs[i]); + if (gBattleAnimArgs[1] == 1 && GetBankSide(i) == 1) sub_8043DB0(gHealthboxIDs[i]); } + DestroyAnimVisualTask(taskId); } @@ -2914,7 +2911,10 @@ void unref_sub_80CE2D4(u8 taskId) { u8 i; for (i = 0; i < gNoOfAllBanks; i++) + { sub_8043DFC(gHealthboxIDs[i]); + } + DestroyAnimVisualTask(taskId); } @@ -2930,6 +2930,7 @@ void sub_80CE30C(struct Sprite* sprite) sprite->pos1.x = gBattleAnimArgs[0]; sprite->pos1.y = gBattleAnimArgs[1]; } + sprite->oam.shape = 0; sprite->oam.size = 3; sprite->data0 = 0; @@ -2965,6 +2966,7 @@ void sub_80CE3B0(struct Sprite* sprite) sprite->data2++; } } + if (sprite->data0) move_anim_8072740(sprite); } @@ -2975,6 +2977,7 @@ void sub_80CE3EC(u8 taskId) int b; int c; int d; + gTasks[taskId].data[0] = 0; gTasks[taskId].data[1] = 0; gTasks[taskId].data[2] = 0; @@ -3000,71 +3003,76 @@ void sub_80CE4D4(u8 taskId) struct Task* task = &gTasks[taskId]; switch (task->data[0]) { - case 0: - if (++task->data[1] > 0) + case 0: + if (++task->data[1] > 0) + { + u16 color; + u16 bitmask; + u16 r3; + u16 i; + u16 j; + task->data[1] = 0; + if (++task->data[2] <= 15) { - u16 color; - u16 bitmask; - u16 r3; - u16 i; - u16 j; - task->data[1] = 0; - if (++task->data[2] <= 15) - { - u16 red; - u16 green; - u16 blue; - task->data[4] += task->data[7]; - task->data[5] += task->data[8]; - task->data[6] += task->data[9]; - red = task->data[4] >> 3; - green = task->data[5] >> 3; - blue = task->data[6] >> 3; - color = RGB(red, green, blue); - } - else - { - color = RGB(27, 29, 31); - task->data[0]++; - } - bitmask = 1; - r3 = 0; - for (i = 0; i <= 15; i++) - { - if (task->data[3] & bitmask) - { - for (j = 1; j <= 15; j++) - gPlttBufferFaded[r3 + j] = color; - } - bitmask <<= 1; - r3 += 16; - } + u16 red; + u16 green; + u16 blue; + task->data[4] += task->data[7]; + task->data[5] += task->data[8]; + task->data[6] += task->data[9]; + red = task->data[4] >> 3; + green = task->data[5] >> 3; + blue = task->data[6] >> 3; + color = RGB(red, green, blue); } - break; - case 1: - if (!gPaletteFade.active) + else + { + color = RGB(27, 29, 31); + task->data[0]++; + } + + bitmask = 1; + r3 = 0; + for (i = 0; i <= 15; i++) { - u8 spriteId; - for (spriteId = 0; spriteId < MAX_SPRITES; spriteId++) + if (task->data[3] & bitmask) { - if (gSprites[spriteId].template == &gBattleAnimSpriteTemplate_83D6FC8 || gSprites[spriteId].template == &gBattleAnimSpriteTemplate_83D6FF8) - gSprites[spriteId].data0 = 1; + for (j = 1; j <= 15; j++) + { + gPlttBufferFaded[r3 + j] = color; + } } - task->data[1] = 0; - task->data[0]++; + + bitmask <<= 1; + r3 += 16; } - break; - case 2: - if (++task->data[1] > 30) + } + break; + case 1: + if (!gPaletteFade.active) + { + u8 spriteId; + for (spriteId = 0; spriteId < MAX_SPRITES; spriteId++) { - BeginNormalPaletteFade((u32)sub_8079BFC(task->data[14], task->data[15]), 0, 16, 0, RGB(27, 29, 31)); - task->data[0]++; + if (gSprites[spriteId].template == &gBattleAnimSpriteTemplate_83D6FC8 || gSprites[spriteId].template == &gBattleAnimSpriteTemplate_83D6FF8) + gSprites[spriteId].data0 = 1; } - break; - case 3: - if (!gPaletteFade.active) - DestroyAnimVisualTask(taskId); - break; + + task->data[1] = 0; + task->data[0]++; + } + break; + case 2: + if (++task->data[1] > 30) + { + BeginNormalPaletteFade((u32)sub_8079BFC(task->data[14], task->data[15]), 0, 16, 0, RGB(27, 29, 31)); + task->data[0]++; + } + break; + case 3: + if (!gPaletteFade.active) + DestroyAnimVisualTask(taskId); + break; } } @@ -3072,8 +3080,10 @@ void sub_80CE670(struct Sprite* sprite) { if (gBattleAnimArgs[2] <= 1) gBattleAnimArgs[2] = 2; + if (gBattleAnimArgs[2] > 0x7F) gBattleAnimArgs[2] = 0x7F; + sprite->data0 = 0; sprite->data1 = gBattleAnimArgs[2]; sprite->pos1.x = sub_8077ABC(gBattleAnimBankTarget, 2) + gBattleAnimArgs[0]; @@ -3109,6 +3119,7 @@ void sub_80CE670(struct Sprite* sprite) sprite->data5 = 0xA00 / sprite->data1; sprite->oam.matrixNum = 24; } + sprite->callback = sub_80CE798; } @@ -3123,6 +3134,7 @@ void sub_80CE798(struct Sprite* sprite) sprite->pos1.x = sprite->data6; sprite->pos1.y = sprite->data7; } + if (sprite->data1 == 0) move_anim_8072740(sprite); } @@ -3143,6 +3155,7 @@ void sub_80CE7E0(u8 taskId) { gPlttBufferUnfaded[r3 + i] = gPlttBufferUnfaded[r4 + i]; } + BlendPalette(r3, 16, 11, 0); task->data[3] = 0; i = 0; @@ -3156,13 +3169,16 @@ void sub_80CE7E0(u8 taskId) task->data[3]++; i++; } + task->func = sub_80CE910; if (GetBankIdentity_permutated(gBattleAnimBankAttacker) == 1) { REG_DISPCNT &= 0xFDFF; } else + { REG_DISPCNT &= 0xFBFF; + } } void sub_80CE910(u8 taskId) @@ -3174,6 +3190,7 @@ void sub_80CE910(u8 taskId) REG_DISPCNT |= 0x200; else REG_DISPCNT |= 0x400; + FreeSpritePaletteByTag(0x2771); DestroyAnimVisualTask(taskId); } @@ -3186,6 +3203,7 @@ void sub_80CE974(struct Sprite* sprite) sprite->data3 = 0; sprite->data0++; } + if (sprite->data0 > 0x40) { gTasks[sprite->data2].data[3]--; @@ -3218,8 +3236,11 @@ void sub_80CEA20(u8 taskId) { index = (index << 4) + 0x100; for (i = 1; i < 6; i++) + { gPlttBufferFaded[index + i] = gUnknown_083D712C[0][i]; + } } + for (j = 1; j < 4; j++) { index = AllocSpritePalette(gUnknown_083D712C[j][0]); @@ -3227,7 +3248,9 @@ void sub_80CEA20(u8 taskId) { index = (index << 4) + 0x100; for (i = 1; i < 6; i++) + { gPlttBufferFaded[index + i] = gUnknown_083D712C[j][i]; + } } } DestroyAnimVisualTask(taskId); @@ -3237,7 +3260,10 @@ void sub_80CEAD8(u8 taskId) { u16 i; for (i = 1; i < 4; i++) + { FreeSpritePaletteByTag(gUnknown_083D712C[i][0]); + } + DestroyAnimVisualTask(taskId); } @@ -3250,6 +3276,7 @@ void sub_80CEB0C(struct Sprite* sprite) StartSpriteAnim(sprite, gBattleAnimArgs[0]); if ((index = IndexOfSpritePaletteTag(gUnknown_083D712C[gBattleAnimArgs[1]][0])) != 0xFF) sprite->oam.paletteNum = index; + sprite->data1 = gBattleAnimArgs[1]; sprite->data2 = 0; sprite->data3 = gBattleAnimArgs[2]; @@ -3263,6 +3290,7 @@ void sub_80CEB0C(struct Sprite* sprite) a = sub_8077ABC(gBattleAnimBankTarget, 2); b = sub_8077ABC(gBattleAnimBankTarget, 3); } + sprite->data4 = sprite->pos1.x << 4; sprite->data5 = sprite->pos1.y << 4; sub_80CEBC4(a - sprite->pos1.x, b - sprite->pos1.y, &sprite->data6, &sprite->data7, 0x28); @@ -3275,10 +3303,12 @@ void sub_80CEBC4(s16 a, s16 b, s16* c, s16* d, s8 e) int g; if (a < 0) e = -e; + f = a << 8; g = f / e; if (g == 0) g = 1; + *c = f / g; *d = (b << 8) / g; } @@ -3299,18 +3329,19 @@ void sub_80CEC1C(struct Sprite* sprite) sprite->pos2.y = Sin(b, 15); a = (u16)sprite->pos1.y; c = (u16)sprite->pos1.x; - //SOMEBODY CLEAN THIS UP THIS IS MESSY AS HELL AND I'M PRETTY SURE I DID IT IN SOME TACKY WAY + if ((u32)((c + 16) << 16) > (0x110) << 16 || a < -16 || a > 0x80) { move_anim_8074EE0(sprite); } else { - if(sprite->data3 && ++sprite->data2 > sprite->data3) + if (sprite->data3 && ++sprite->data2 > sprite->data3) { sprite->data2 = 0; if (++sprite->data1 > 3) sprite->data1 = 0; + index = IndexOfSpritePaletteTag(gUnknown_083D712C[sprite->data1][0]); if (index != 0xFF) sprite->oam.paletteNum = index; @@ -3326,6 +3357,7 @@ void sub_80CECE8(struct Sprite* sprite) a = gBattleAnimArgs[1]; (u16)gBattleAnimArgs[1] = -a; } + sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 2) + gBattleAnimArgs[1]; sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 3) + gBattleAnimArgs[2]; StartSpriteAnim(sprite, gBattleAnimArgs[0]); @@ -3352,6 +3384,7 @@ void sub_80CED78(struct Sprite* sprite) if (sprite->data2 == 0) sprite->data3 = 1; } + if (++sprite->data0 == 0x30) move_anim_8074EE0(sprite); } @@ -3365,7 +3398,10 @@ void sub_80CEDF0(struct Sprite* sprite) a = 16; } else + { a = -16; + } + sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 2) + a; sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 3) + 8; sprite->data0 = 8; @@ -3383,6 +3419,7 @@ void sub_80CEE60(struct Sprite* sprite) index = IndexOfSpritePaletteTag(gUnknown_083D712C[gBattleAnimArgs[2]][0]); if (index != 0xFF) sprite->oam.paletteNum = index; + a = (gBattleAnimArgs[0] == 0) ? 0xFFE0 : 0x20; sprite->data0 = 40; sprite->data1 = sprite->pos1.x; @@ -3402,12 +3439,15 @@ void sub_80CEEE8(struct Sprite* sprite) a = Sin(sprite->data5, 8); if (sprite->pos2.x < 0) a = -a; + sprite->pos2.x += a; sprite->pos2.y += Sin(sprite->data5, 4); sprite->data5 = (sprite->data5 + 8) & 0xFF; } else + { move_anim_8072740(sprite); + } } void sub_80CEF44(u8 bank, struct Sprite* sprite) @@ -3416,6 +3456,7 @@ void sub_80CEF44(u8 bank, struct Sprite* sprite) sprite->pos1.x = sub_807A100(bank, 5) + 8; else sprite->pos1.x = sub_807A100(bank, 4) - 8; + sprite->pos1.y = sub_8077ABC(bank, 3) - (s16)sub_807A100(bank, 0) / 4; } @@ -3427,6 +3468,7 @@ void sub_80CEF9C(struct Sprite* sprite) bank = gBattleAnimBankAttacker; else bank = gBattleAnimBankTarget; + sub_80CEF44(bank, sprite); a = (GetBankSide(bank) == 0) ? 0 : 1; sprite->data0 = gBattleAnimArgs[1]; @@ -3453,6 +3495,7 @@ void sub_80CF040(struct Sprite* sprite) bank = gBattleAnimBankAttacker; else bank = gBattleAnimBankTarget; + sub_80CEF44(bank, sprite); sprite->data0 = 0; StoreSpriteCallbackInData6(sprite, sub_80CF088); @@ -3476,10 +3519,12 @@ void sub_80CF0BC(struct Sprite* sprite) bank = gBattleAnimBankAttacker; else bank = gBattleAnimBankTarget; + sprite->pos1.x = sub_8077ABC(bank, 0); sprite->pos1.y = sub_807A100(bank, 2); if (sprite->pos1.y <= 9) sprite->pos1.y = 10; + sprite->data0 = 1; sprite->data1 = 0; sprite->data2 = sprite->subpriority; @@ -3509,12 +3554,17 @@ void sub_80CF158(struct Sprite* sprite) return; } else + { sprite->data1 &= 0xFF; + } } + if (sprite->data1 > 0x4F) sprite->subpriority = sprite->data3; + if (sprite->data1 > 0x9F) sprite->subpriority = sprite->data2; + temp = gSineTable[sprite->data1]; sprite->pos2.x = (temp2 = temp >> 3) + (temp2 >> 1); } @@ -3526,6 +3576,7 @@ void sub_80CF1C8(struct Sprite* sprite) bank = gBattleAnimBankAttacker; else bank = gBattleAnimBankTarget; + sub_80CEF44(bank, sprite); if (GetBankSide(bank) == 0) { @@ -3537,6 +3588,7 @@ void sub_80CF1C8(struct Sprite* sprite) StartSpriteAnim(sprite, 1); sprite->data0 = 3; } + sprite->callback = sub_80CF228; } @@ -3578,6 +3630,7 @@ void sub_80CF2D0(struct Sprite* sprite) bank = gBattleAnimBankAttacker; else bank = gBattleAnimBankTarget; + sub_80CEF44(bank, sprite); sprite->data0 = 0; sprite->data1 = 0; @@ -3588,20 +3641,20 @@ void sub_80CF310(struct Sprite* sprite) { switch (sprite->data0) { - case 0: - sprite->pos2.y -= 3; - if (++sprite->data1 == 6) - sprite->data0++; - break; - case 1: - sprite->pos2.y += 3; - if (--sprite->data1 == 0) - sprite->data0++; - break; - case 2: - if (++sprite->data1 == 0x40) - move_anim_8072740(sprite); - break; + case 0: + sprite->pos2.y -= 3; + if (++sprite->data1 == 6) + sprite->data0++; + break; + case 1: + sprite->pos2.y += 3; + if (--sprite->data1 == 0) + sprite->data0++; + break; + case 2: + if (++sprite->data1 == 0x40) + move_anim_8072740(sprite); + break; } } @@ -3616,6 +3669,7 @@ void sub_80CF374(struct Sprite* sprite) gSprites[sprite->data2].pos2.x = 0; move_anim_8074EE0(sprite); } + sprite->data0--; } @@ -3633,6 +3687,7 @@ void sub_80CF3C4(struct Sprite* sprite) { sprite->pos1.x += gBattleAnimArgs[0]; } + sprite->pos1.y += gBattleAnimArgs[1]; sprite->data0 = gBattleAnimArgs[2]; sprite->data1 = gBattleAnimArgs[3]; @@ -3686,6 +3741,7 @@ void sub_80CF514(u8 taskId) { b = gTasks[taskId].data[0]; } + obj_id_set_rotscale(a, 0x100, 0x100, b); if (gTasks[taskId].data[1] == 0) { @@ -3696,6 +3752,7 @@ void sub_80CF514(u8 taskId) { if (++gTasks[taskId].data[3] == 0x1E) gTasks[taskId].data[1] = 2; + return; } else @@ -3703,6 +3760,7 @@ void sub_80CF514(u8 taskId) gTasks[taskId].data[0] -= 0xB0; gSprites[a].pos2.y--; } + sub_8078F9C(a); if (gTasks[taskId].data[0] == 0xF20 || gTasks[taskId].data[0] == 0) { @@ -3734,6 +3792,7 @@ void sub_80CF610(struct Sprite* sprite) if (gBattleAnimArgs[2] != 0) sprite->vFlip = 1; } + sprite->callback = sub_8078600; StoreSpriteCallbackInData6(sprite, move_anim_8072740); } @@ -3762,13 +3821,16 @@ void sub_80CF6DC(struct Sprite* sprite) u16 c; if (NotInBattle()) + { gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + } else if (GetBankSide(gBattleAnimBankAttacker) != 0) { gBattleAnimArgs[2] = -gBattleAnimArgs[2]; gBattleAnimArgs[1] = -gBattleAnimArgs[1]; gBattleAnimArgs[3] = -gBattleAnimArgs[3]; } + sub_80787B0(sprite, 1); a = sub_8077ABC(gBattleAnimBankTarget, 2) + gBattleAnimArgs[2]; b = sub_8077ABC(gBattleAnimBankTarget, 3) + gBattleAnimArgs[3]; @@ -3776,6 +3838,7 @@ void sub_80CF6DC(struct Sprite* sprite) c += 0xF000; if (NotInBattle()) c -= 0x6000; + sub_8078FDC(sprite, 0, 0x100, 0x100, c); sprite->data0 = gBattleAnimArgs[4]; sprite->data2 = a; @@ -3806,16 +3869,19 @@ void sub_80CF814(struct Sprite* sprite) sprite->data5 -= sprite->data3; sprite->data6 -= sprite->data4; } + sprite->data1 += sprite->data5; sprite->data2 += sprite->data6; if (1 & task->data[7]) sprite->pos2.x = ((u16)sprite->data1 >> 8) * -1; else sprite->pos2.x = (u16)sprite->data1 >> 8; + if (1 & task->data[8]) sprite->pos2.y = ((u16)sprite->data2 / 256u) * -1; else sprite->pos2.y = (u16)sprite->data2 / 256u; + if (sprite->data0-- <= 0) { sprite->data0 = 30; @@ -3829,6 +3895,7 @@ void sub_80CF8B8(struct Sprite* sprite) s16 a; s16 b; s16 c; + struct Task* task = &gTasks[sprite->data7]; sprite->data1 += (-2 & task->data[7]); sprite->data2 += (-2 & task->data[8]); @@ -3836,10 +3903,12 @@ void sub_80CF8B8(struct Sprite* sprite) sprite->pos2.x = ((u16)sprite->data1 >> 8) * -1; else sprite->pos2.x = (u16)sprite->data1 >> 8; + if (1 & task->data[8]) sprite->pos2.y = ((u16)sprite->data2 / 256u) * -1; else sprite->pos2.y = (u16)sprite->data2 / 256u; + if (sprite->data0-- <= 0) { sprite->data0 = 8; @@ -3853,10 +3922,12 @@ void sub_80CF8B8(struct Sprite* sprite) b = (task->data[11] - sprite->pos1.x) << 8; else b = (sprite->pos1.x - task->data[11]) << 8; + if (task->data[12] >= sprite->pos1.y) c = (task->data[12] - sprite->pos1.y) << 8; else c = (sprite->pos1.y - task->data[12]) << 8; + sprite->data2 = 0; sprite->data1 = 0; sprite->data6 = 0; @@ -3883,13 +3954,14 @@ void sub_80CFA20(u8 taskId) sprite = &gSprites[spriteId]; switch (gTasks[taskId].data[4]) { - case 1: - sprite->oam.matrixNum |= 24; - break; - case 2: - sprite->oam.matrixNum = 8; - break; + case 1: + sprite->oam.matrixNum |= 24; + break; + case 2: + sprite->oam.matrixNum = 8; + break; } + sprite->data0 = gTasks[taskId].data[5] - gTasks[taskId].data[6]; sprite->data7 = taskId; gTasks[taskId].data[gTasks[taskId].data[1] + 13] = spriteId; @@ -3934,7 +4006,7 @@ void sub_80CFB04(u8 taskId) r6 = gTasks[taskId].data[9] = sub_8077ABC(gBattleAnimBankAttacker, 0); r9 = gTasks[taskId].data[10] = sub_8077ABC(gBattleAnimBankAttacker, 1); if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) - && IsAnimBankSpriteVisible(gBattleAnimBankTarget ^ 2)) + && IsAnimBankSpriteVisible(gBattleAnimBankTarget ^ 2)) { sub_807A3FC(gBattleAnimBankTarget, 0, &sp1, &sp2); } @@ -3943,12 +4015,14 @@ void sub_80CFB04(u8 taskId) sp1 = sub_8077ABC(gBattleAnimBankTarget, 0); sp2 = sub_8077ABC(gBattleAnimBankTarget, 1); } + sp1 = gTasks[taskId].data[11] = sp1 + gBattleAnimArgs[0]; sp2 = gTasks[taskId].data[12] = sp2 + gBattleAnimArgs[1]; if (sp1 >= r6) r4 = sp1 - r6; else r4 = r6 - sp1; + gTasks[taskId].data[5] = sub_81174C4(r4, sub_81174E0(gBattleAnimArgs[2] & ~1)); gTasks[taskId].data[6] = sub_81174C4(gTasks[taskId].data[5], 0x80); gTasks[taskId].data[7] = gBattleAnimArgs[2]; @@ -3962,6 +4036,7 @@ void sub_80CFB04(u8 taskId) r4 = r9 - sp2; gTasks[taskId].data[8] = sub_81174C4(r4, sub_81174E0(gTasks[taskId].data[5])) | 1; } + gTasks[taskId].data[3] = gBattleAnimArgs[3]; if (gBattleAnimArgs[4] & 0x80) { @@ -3990,8 +4065,10 @@ void sub_80CFB04(u8 taskId) gTasks[taskId].data[2] = var; } } + if (gTasks[taskId].data[2] < 3) gTasks[taskId].data[2] = 3; + gTasks[taskId].func = sub_80CFA20; } @@ -4021,6 +4098,7 @@ void sub_80CFE2C(struct Sprite* sprite) r1++; r2++; } + gPlttBufferFaded[sprite->data0 + 15] = r7; if (++sprite->data2 == 0x18) move_anim_8072740(sprite); @@ -4102,6 +4180,7 @@ void sub_80CFE9C(struct Sprite* sprite) r7 = sub_8077ABC(gBattleAnimBankTarget, 3) + gBattleAnimArgs[3]; if (GetBankSide(gBattleAnimBankAttacker) != 0) gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + r6 += gBattleAnimArgs[2]; var = sub_80790F0(r6 - sprite->pos1.x, r7 - sprite->pos1.y); var += 0xC000; @@ -4126,6 +4205,7 @@ void sub_80CFF68(struct Sprite* sprite) sprite->pos2.x = sprite->data0 >> 8; if (GetBankSide(gBattleAnimBankAttacker) == 0) sprite->pos2.x = -sprite->pos2.x; + sprite->pos2.y = Sin(sprite->data1, sprite->data2); sprite->data1 += 5; if (sprite->data1 > 0x7E) @@ -4159,9 +4239,11 @@ void sub_80D0030(struct Sprite* sprite) sprite->pos2.y = 0; sprite->pos2.x = 0; ptr = &sprite->data7; - for (i = 0; i < 8; i++) { + for (i = 0; i < 8; i++) + { ptr[i - 7] = 0; } + rand = Random(); sprite->data6 = 0xFFF4 - (rand & 7); rand = Random(); @@ -4176,6 +4258,7 @@ void sub_80D00B4(struct Sprite* sprite) sprite->pos2.x = sprite->data0 >> 8; if (sprite->data7 & 1) sprite->pos2.x = -sprite->pos2.x; + sprite->pos2.y = Sin(sprite->data1, sprite->data6); sprite->data1 += 8; if (sprite->data1 > 0x7E) @@ -4192,6 +4275,7 @@ void sub_80D0118(struct Sprite* sprite) sub_80787B0(sprite, 0); if (GetBankSide(gBattleAnimBankAttacker) == 0) sprite->pos1.y += 16; + sprite->data0 = gBattleAnimArgs[4]; sprite->data1 = gBattleAnimArgs[2]; sprite->data2 = gBattleAnimArgs[5]; @@ -4216,6 +4300,7 @@ void sub_80D0178(struct Sprite* sprite) r6 = 16; StartSpriteAnim(sprite, 1); } + sprite->pos1.x += r7; sprite->pos1.y += r4; sprite->data0 = 6; @@ -4245,6 +4330,7 @@ void sub_80D0228(struct Sprite* sprite) r6 = 16; StartSpriteAnim(sprite, gBattleAnimArgs[0]); } + sprite->pos1.x += r8; sprite->pos1.y += r4; sprite->data0 = 6; @@ -4284,6 +4370,7 @@ void sub_80D0344(struct Sprite* sprite) sprite->pos2.x = -sprite->pos2.x; sprite->pos2.y = -sprite->pos2.y; } + sprite->data3 ^= 1; if (++sprite->data4 == 0x33) { @@ -4345,64 +4432,64 @@ void sub_80D04E0(u8 taskId) struct Task* task = &gTasks[taskId]; switch (task->data[1]) { - case 0: - if (task->data[2] == 0 || task->data[2] == 3 || task->data[2] == 6) - sub_80D0614(task, taskId); - task->data[2]++; - task->data[4] += 0x28; - obj_id_set_rotscale(task->data[0], task->data[4], task->data[4], 0); - sub_8079A64(task->data[0]); - if (task->data[2] == 32) - { - task->data[5]++; - task->data[1]++; - } - break; - case 1: - if (task->data[6] == 0) - { - if (task->data[5] == 3) - { - task->data[2] = 0; - task->data[1] = 3; - } - else - { - task->data[2] = 0; - task->data[3] = 0; - task->data[4] = 0x100; - obj_id_set_rotscale(task->data[0], task->data[4], task->data[4], 0); - sub_8079A64(task->data[0]); - task->data[1] = 2; - } - } - break; - case 2: - task->data[1] = 0; - break; - case 3: - if (++task->data[2] > 32) + case 0: + if (task->data[2] == 0 || task->data[2] == 3 || task->data[2] == 6) + sub_80D0614(task, taskId); + task->data[2]++; + task->data[4] += 0x28; + obj_id_set_rotscale(task->data[0], task->data[4], task->data[4], 0); + sub_8079A64(task->data[0]); + if (task->data[2] == 32) + { + task->data[5]++; + task->data[1]++; + } + break; + case 1: + if (task->data[6] == 0) + { + if (task->data[5] == 3) { task->data[2] = 0; - task->data[1]++; + task->data[1] = 3; } - break; - case 4: - task->data[2] += 2; - task->data[4] -= 0x50; - obj_id_set_rotscale(task->data[0], task->data[4], task->data[4], 0); - sub_8079A64(task->data[0]); - if (task->data[2] == 32) + else { task->data[2] = 0; - task->data[1]++; + task->data[3] = 0; + task->data[4] = 0x100; + obj_id_set_rotscale(task->data[0], task->data[4], task->data[4], 0); + sub_8079A64(task->data[0]); + task->data[1] = 2; } - break; - case 5: - sub_8078F40(task->data[0]); - gSprites[task->data[15]].pos2.y = 0; - DestroyAnimVisualTask(taskId); - break; + } + break; + case 2: + task->data[1] = 0; + break; + case 3: + if (++task->data[2] > 32) + { + task->data[2] = 0; + task->data[1]++; + } + break; + case 4: + task->data[2] += 2; + task->data[4] -= 0x50; + obj_id_set_rotscale(task->data[0], task->data[4], task->data[4], 0); + sub_8079A64(task->data[0]); + if (task->data[2] == 32) + { + task->data[2] = 0; + task->data[1]++; + } + break; + case 5: + sub_8078F40(task->data[0]); + gSprites[task->data[15]].pos2.y = 0; + DestroyAnimVisualTask(taskId); + break; } } @@ -4414,7 +4501,9 @@ void sub_80D0614(struct Task* task, u8 taskId) { u8 r6 = AllocOamMatrix(); if (r6 == 0xFF) + { obj_delete_but_dont_free_vram(&gSprites[r8]); + } else { gSprites[r8].oam.objMode = 1; @@ -4572,7 +4661,9 @@ void sub_80D074C(u8 taskId) { struct Task* task = &gTasks[taskId]; if (gBattleAnimArgs[1] == 0) + { DestroyAnimVisualTask(taskId); + } else { u8 spriteId = GetAnimBankSpriteId(gBattleAnimArgs[0]); @@ -4591,49 +4682,49 @@ void sub_80D07AC(u8 taskId) struct Task* task = &gTasks[taskId]; switch (task->data[1]) { - case 0: - sub_807992C(task); - task->data[4] += 3; - gSprites[task->data[0]].pos2.y += task->data[4]; - if (++task->data[3] > 7) - { - task->data[3] = 0; - task->data[1]++; - } - break; - case 1: - sub_807992C(task); - gSprites[task->data[0]].pos2.y += task->data[4]; - if (++task->data[3] > 7) - { - task->data[3] = 0; - task->data[1]++; - } - break; - case 2: - if (task->data[4] != 0) + case 0: + sub_807992C(task); + task->data[4] += 3; + gSprites[task->data[0]].pos2.y += task->data[4]; + if (++task->data[3] > 7) + { + task->data[3] = 0; + task->data[1]++; + } + break; + case 1: + sub_807992C(task); + gSprites[task->data[0]].pos2.y += task->data[4]; + if (++task->data[3] > 7) + { + task->data[3] = 0; + task->data[1]++; + } + break; + case 2: + if (task->data[4] != 0) + { + gSprites[task->data[0]].pos2.y -= 2; + task->data[4] -= 2; + } + else + task->data[1]++; + break; + case 3: + if (!sub_807992C(task)) + { + if (--task->data[2] == 0) { - gSprites[task->data[0]].pos2.y -= 2; - task->data[4] -= 2; + gSprites[task->data[0]].pos2.y = 0; + DestroyAnimVisualTask(taskId); } else - task->data[1]++; - break; - case 3: - if (!sub_807992C(task)) { - if (--task->data[2] == 0) - { - gSprites[task->data[0]].pos2.y = 0; - DestroyAnimVisualTask(taskId); - } - else - { - sub_80798F4(task, task->data[0], &gUnknown_083D76F4); - task->data[1] = 0; - } + sub_80798F4(task, task->data[0], &gUnknown_083D76F4); + task->data[1] = 0; } - break; + } + break; } } @@ -4666,6 +4757,7 @@ void sub_80D0930(struct Sprite* sprite) sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 2) - 32; sprite->data1 = -0x40; } + sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 3); sprite->data0 = 0x34; sprite->data2 = 0; @@ -4682,14 +4774,17 @@ void sub_80D09C0(struct Sprite* sprite) bank = gBattleAnimBankAttacker; else bank = gBattleAnimBankTarget; + if (GetBankSide(bank) == 1) { gBattleAnimArgs[1] *= -1; } + sprite->pos1.x = sub_8077ABC(bank, 2) + gBattleAnimArgs[1]; sprite->pos1.y = sub_8077ABC(bank, 3) + gBattleAnimArgs[2]; if (sprite->pos1.y <= 7) sprite->pos1.y = 8; + StoreSpriteCallbackInData6(sprite, move_anim_8074EE0); sprite->callback = sub_80785E4; } @@ -4726,6 +4821,7 @@ void sub_80D0AB8(u8 taskId) task->data[9] = 2; if (GetBankSide(gBattleAnimBankAttacker) == 1) task->data[2] *= -1; + task->func = sub_80D0B3C; } @@ -4741,44 +4837,46 @@ void sub_80D0B3C(u8 taskId) gSprites[task->data[0]].pos1.y += task->data[9]; } else + { gSprites[task->data[0]].pos1.y -= task->data[9]; + } } switch (task->data[1]) { - case 0: - gSprites[task->data[0]].pos1.x += task->data[2]; - if (--task->data[3] == 0) - { - task->data[3] = 14; - task->data[1] = 1; - } - break; - case 1: - gSprites[task->data[0]].pos1.x -= task->data[2]; - if (--task->data[3] == 0) + case 0: + gSprites[task->data[0]].pos1.x += task->data[2]; + if (--task->data[3] == 0) + { + task->data[3] = 14; + task->data[1] = 1; + } + break; + case 1: + gSprites[task->data[0]].pos1.x -= task->data[2]; + if (--task->data[3] == 0) + { + task->data[3] = 7; + task->data[1] = 2; + } + break; + case 2: + gSprites[task->data[0]].pos1.x += task->data[2]; + if (--task->data[3] == 0) + { + if (--task->data[4] != 0) { task->data[3] = 7; - task->data[1] = 2; + task->data[1] = 0; } - break; - case 2: - gSprites[task->data[0]].pos1.x += task->data[2]; - if (--task->data[3] == 0) + else { - if (--task->data[4] != 0) + if ((task->data[8] & 1) != 0) { - task->data[3] = 7; - task->data[1] = 0; - } - else - { - if ((task->data[8] & 1) != 0) - { - gSprites[task->data[0]].pos1.y -= task->data[9]; - } - DestroyAnimVisualTask(taskId); + gSprites[task->data[0]].pos1.y -= task->data[9]; } + DestroyAnimVisualTask(taskId); } + } break; } } @@ -4786,7 +4884,7 @@ void sub_80D0B3C(u8 taskId) void sub_80D0C88(u8 taskId) { struct Task* task = &gTasks[taskId]; - struct UnknownStruct_2 sp; + struct UnknownTaskStruct sp; s16 i; task->data[0] = sub_8077FC0(gBattleAnimBankTarget) + 32; task->data[1] = 4; @@ -4805,6 +4903,7 @@ void sub_80D0C88(u8 taskId) task->data[6] = gUnknown_03004288; sp.dest = (u16 *)REG_ADDR_BG2HOFS; } + for (i = task->data[0] - 0x40; i <= task->data[0];i++) { if (i >= 0) @@ -4813,6 +4912,7 @@ void sub_80D0C88(u8 taskId) gUnknown_03004DE0.unk780[i] = task->data[6] + 0xF0; } } + sp.control = 0xa2600001; sp.unk8 = 1; sp.unk9 = 0; @@ -4851,11 +4951,13 @@ void sub_80D0D68(u8 taskId) task->data[5] += 1; break; } + if (task->data[5] >= 0) { gUnknown_03004DE0.unk0[task->data[5]] = task->data[6]; gUnknown_03004DE0.unk780[task->data[5]] = task->data[6]; } + if (++task->data[3] >= task->data[15]) { gUnknown_03004DC0.unk15 = 3; @@ -4997,58 +5099,58 @@ void sub_80D0E8C(struct Sprite* sprite) { switch (sprite->data0) { - case 0: - if (++sprite->data2 > 1) - { - sprite->data2 = 0; - sprite->invisible = !sprite->invisible; - } - if (++sprite->data1 > 16) - { - sprite->invisible = 0; - sprite->data0++; - } - break; - case 1: - if (++sprite->data1 > 3 && sprite->data2 < sprite->data5) - { - sprite->data1 = 0; - sprite->pos1.y -= 1; - sprite->data2++; - if (sprite->data2 % 10 == 0) - PlaySE12WithPanning(0xCD, sprite->data6); - } - sprite->data4 += sprite->data3; - if (sprite->data4 > 31) - { - sprite->data4 = 0x40 - sprite->data4; - sprite->data3 *= -1; - } - else if (sprite->data4 <= -32) - { - sprite->data4 = -0x40 - sprite->data4; - sprite->data3 *= -1; - } - sprite->pos2.x = sprite->data4; - if (sprite->data5 == sprite->data2) - { - sprite->data1 = 0; - sprite->data2 = 0; - sprite->data0++; - } - break; - case 2: - if (++sprite->data2 > 1) - { - sprite->data2 = 0; - sprite->invisible = !sprite->invisible; - } - if (++sprite->data1 > 16) - { - sprite->invisible = 0; - move_anim_8072740(sprite); - } - break; + case 0: + if (++sprite->data2 > 1) + { + sprite->data2 = 0; + sprite->invisible = !sprite->invisible; + } + if (++sprite->data1 > 16) + { + sprite->invisible = 0; + sprite->data0++; + } + break; + case 1: + if (++sprite->data1 > 3 && sprite->data2 < sprite->data5) + { + sprite->data1 = 0; + sprite->pos1.y -= 1; + sprite->data2++; + if (sprite->data2 % 10 == 0) + PlaySE12WithPanning(0xCD, sprite->data6); + } + sprite->data4 += sprite->data3; + if (sprite->data4 > 31) + { + sprite->data4 = 0x40 - sprite->data4; + sprite->data3 *= -1; + } + else if (sprite->data4 <= -32) + { + sprite->data4 = -0x40 - sprite->data4; + sprite->data3 *= -1; + } + sprite->pos2.x = sprite->data4; + if (sprite->data5 == sprite->data2) + { + sprite->data1 = 0; + sprite->data2 = 0; + sprite->data0++; + } + break; + case 2: + if (++sprite->data2 > 1) + { + sprite->data2 = 0; + sprite->invisible = !sprite->invisible; + } + if (++sprite->data1 > 16) + { + sprite->invisible = 0; + move_anim_8072740(sprite); + } + break; } } @@ -5063,6 +5165,7 @@ void sub_80D0FD8(struct Sprite* sprite) bank = gBattleAnimBankAttacker; else bank = gBattleAnimBankTarget; + r4 = gBattleAnimArgs[3] ^ 1; if (IsDoubleBattle() && IsAnimBankSpriteVisible(bank ^ 2)) { @@ -5071,11 +5174,13 @@ void sub_80D0FD8(struct Sprite* sprite) r4 = sub_8077ABC(bank, 0); else r4 = sub_8077ABC(bank, 2); + if (GetBankSide(bank) != 0) gBattleAnimArgs[0] -= (sp0 - r4) - gBattleAnimArgs[0]; // This is weird. else gBattleAnimArgs[0] = sp0 - r4; } + sprite->callback = sub_80793C4; sub_80793C4(sprite); } @@ -5181,6 +5286,7 @@ void sub_80D1318(struct Sprite* sprite) { BlendPalette(((index << 20) + 0x1010000) >> 16, 15, gBattleAnimArgs[5], gBattleAnimArgs[4]); } + StartSpriteAffineAnim(sprite, 1); sprite->callback = sub_80793C4; sub_80793C4(sprite); @@ -5326,6 +5432,7 @@ void sub_80D1638(u8 taskId) task->data[13] = 1; task->data[14] = -8; } + task->data[15] = GetAnimBankSpriteId(1); task->func = sub_80D16A0; } @@ -5352,10 +5459,12 @@ void sub_80D16A0(u8 taskId) gSprites[task->data[15]].pos2.x += 6; else gSprites[task->data[15]].pos2.x -= 6; + if (++task->data[3] > 4) { if (task->data[2] & 1) gSprites[task->data[15]].pos2.x -= 6; + task->data[0]++; } } @@ -5398,6 +5507,7 @@ void sub_80D1808(u8 taskId) gSprites[task->data[15]].invisible = 0; else gSprites[task->data[15]].invisible = 1; + if (++task->data[3] >= task->data[13]) { if (++task->data[4] < task->data[14]) @@ -5438,63 +5548,64 @@ void sub_80D1930(u8 taskId) struct Task* task = &gTasks[taskId]; switch (task->data[8]) { - case 0: - if (++task->data[4] > 1) + case 0: + if (++task->data[4] > 1) + { + task->data[4] = 0; + task->data[5] = (task->data[5] + 1) & 1; + if (++task->data[6] > 20) { - task->data[4] = 0; - task->data[5] = (task->data[5] + 1) & 1; - if (++task->data[6] > 20) + if (task->data[7] == 0) { - if (task->data[7] == 0) - { - task->data[6] = 0; - task->data[8] = 1; - } - else - task->data[8] = 2; + task->data[6] = 0; + task->data[8] = 1; } + else + task->data[8] = 2; } - break; - case 1: - task->data[5] = 0; - if (++task->data[4] > 20) - { - task->data[7] = 1; - task->data[8] = 0; - } - break; - case 2: - task->data[5] = 1; - break; + } + break; + case 1: + task->data[5] = 0; + if (++task->data[4] > 20) + { + task->data[7] = 1; + task->data[8] = 0; + } + break; + case 2: + task->data[5] = 1; + break; } + switch (task->data[0]) { - case 0: - if (++task->data[1] > 4) + case 0: + if (++task->data[1] > 4) + { + u8 spriteId; + task->data[1] = 0; + spriteId = CreateSprite(&gSpriteTemplate_83D79E8, task->data[14], task->data[15], 0); + if (spriteId != MAX_SPRITES) { - u8 spriteId; - task->data[1] = 0; - spriteId = CreateSprite(&gSpriteTemplate_83D79E8, task->data[14], task->data[15], 0); - if (spriteId != MAX_SPRITES) + gSprites[spriteId].data0 = taskId; + gSprites[spriteId].data1 = 13; + gSprites[spriteId].pos2.x = gUnknown_083D7A00[task->data[2]][0]; + gSprites[spriteId].pos2.y = gUnknown_083D7A00[task->data[2]][1]; + task->data[13]++; + if (++task->data[2] > 3) { - gSprites[spriteId].data0 = taskId; - gSprites[spriteId].data1 = 13; - gSprites[spriteId].pos2.x = gUnknown_083D7A00[task->data[2]][0]; - gSprites[spriteId].pos2.y = gUnknown_083D7A00[task->data[2]][1]; - task->data[13]++; - if (++task->data[2] > 3) - { - task->data[2] = 0; - if (++task->data[3] > 5) - task->data[0]++; - } + task->data[2] = 0; + if (++task->data[3] > 5) + task->data[0]++; } } - break; - case 1: - if (task->data[13] == 0) - DestroyAnimVisualTask(taskId); - break; + } + break; + case 1: + if (task->data[13] == 0) + DestroyAnimVisualTask(taskId); + break; } } @@ -5517,7 +5628,10 @@ void sub_80D1ADC(u8 taskId) void* what; sp[0] = IndexOfSpritePaletteTag(0x27DE); for (i = 1; i <= 4; i++) + { sp[i] = AllocSpritePalette(0x2710 - i); + } + src = &gBattleAnimSpritePalette_206; dest = (NotInBattle()) ? gSharedMem + 0x18000 - 0x3800: gSharedMem + 0x18000; LZDecompressWram(src, dest); @@ -5526,6 +5640,7 @@ void sub_80D1ADC(u8 taskId) what = ((NotInBattle()) ? gSharedMem + 0x14800 : gSharedMem + 0x18000) + (i << 5); LoadPalette(what, (u16)((sp[i] << 4) + 0x100), 32); } + DestroyAnimVisualTask(taskId); } @@ -5533,7 +5648,10 @@ void sub_80D1B80(u8 taskId) { int i; for (i = 0; i < 5; i++) + { FreeSpritePaletteByTag(gUnknown_083D7A5C[i]); + } + DestroyAnimVisualTask(taskId); } @@ -5551,6 +5669,7 @@ void sub_80D1C08(struct Sprite* sprite) sub_80787B0(sprite, 0); if (GetBankSide(gBattleAnimBankAttacker) != 0) gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + sprite->data0 = gBattleAnimArgs[4]; sprite->data2 = sub_8077ABC(gBattleAnimBankAttacker, 0) + gBattleAnimArgs[2]; sprite->data4 = sub_8077ABC(gBattleAnimBankAttacker, 1) + gBattleAnimArgs[3]; @@ -5563,6 +5682,7 @@ void sub_80D1C80(struct Sprite* sprite) { if (++sprite->data0 == 1) sub_80787B0(sprite, 0); + sprite->pos2.x = Sin(sprite->data1, 8); sprite->pos2.y = sprite->data2 >> 8; sprite->data1 = (sprite->data1 + 7) & 0xFF; @@ -5582,7 +5702,10 @@ void sub_80D1CD0(u8 taskId) zero = 0; } else + { zero = 0; + } + gUnknown_030042C4 = var; gUnknown_03004240 = 0xA0; REG_WIN0H = var; @@ -5606,7 +5729,9 @@ void sub_80D1D48(u8 taskId) gTasks[taskId].func = sub_80D1D9C; } else + { gUnknown_030042C4 = gTasks[taskId].data[1] | (gTasks[taskId].data[0] << 8); + } } void sub_80D1D9C(u8 taskId) @@ -5689,7 +5814,9 @@ void sub_80D1FA4(struct Sprite* sprite) sprite->data5 = (sprite->data5 + 4) & 0xFF; } else + { move_anim_8072740(sprite); + } } void sub_80D1FDC(struct Sprite* sprite) @@ -5710,8 +5837,11 @@ void sub_80D1FDC(struct Sprite* sprite) { sprite->invisible = sprite->data3 % 2; } + if (sprite->data3 > 0x78) + { move_anim_8072740(sprite); + } } } @@ -5751,6 +5881,7 @@ void sub_80D2100(u8 taskId) REG_BG1CNT_BITFIELD.screenSize = 0; if (!NotInBattle()) REG_BG1CNT_BITFIELD.charBaseBlock = 1; + gUnknown_030042C0 = 0; gUnknown_030041B4 = 0; REG_BG1HOFS = 0; @@ -5763,6 +5894,7 @@ void sub_80D2100(u8 taskId) LoadCompressedPalette(&gAttractPal, subStruct.field_8 << 4, 32); if (NotInBattle()) sub_80763FC(subStruct.field_8, (u16 *)subStruct.field_4, 0, 0); + gTasks[taskId].func = sub_80D21F0; } @@ -5825,6 +5957,7 @@ void sub_80D21F0(u8 taskId) DmaClear32(3, subStruct.field_4, 0x800); if (!NotInBattle()) REG_BG1CNT_BITFIELD.charBaseBlock = 0; + gTasks[taskId].data[12]++; // fall through case 4: @@ -5846,6 +5979,7 @@ void sub_80D23B4(u8 taskId) REG_BG1CNT_BITFIELD.screenSize = 0; if (!NotInBattle()) REG_BG1CNT_BITFIELD.charBaseBlock = 1; + gUnknown_030042C0 = 0; gUnknown_030041B4 = 0; REG_BG1HOFS = 0; @@ -5859,10 +5993,12 @@ void sub_80D23B4(u8 taskId) LZDecompressVram(&gBattleAnimBackgroundTilemap_ScaryFacePlayer, subStruct.field_4); else LZDecompressVram(&gBattleAnimBackgroundTilemap_ScaryFaceOpponent, subStruct.field_4); + LZDecompressVram(&gBattleAnimBackgroundImage_ScaryFace, subStruct.field_0); LoadCompressedPalette(&gBattleAnimBackgroundPalette_ScaryFace, subStruct.field_8 << 4, 32); if (NotInBattle()) sub_80763FC(subStruct.field_8, (u16 *)subStruct.field_4, 0, 0); + gTasks[taskId].func = sub_80D24E0; } @@ -5925,6 +6061,7 @@ void sub_80D24E0(u8 taskId) DmaClear32(3, subStruct.field_4, 0x800); if (!NotInBattle()) REG_BG1CNT_BITFIELD.charBaseBlock = 0; + gTasks[taskId].data[12]++; // fall through case 4: @@ -5954,30 +6091,32 @@ void sub_80D2704(struct Sprite* sprite) sprite->subpriority = sprite->data7 + 1; else sprite->subpriority = sprite->data7 - 1; + sprite->pos2.x = Sin(sprite->data1, sprite->data2 >> 8); sprite->pos2.y = Cos(sprite->data1, sprite->data3 >> 8); sprite->data1 = (sprite->data1 + 9) & 0xFF; switch (sprite->data5) { - case 1: - sprite->data2 -= 0x400; - sprite->data3 -= 0x100; - if (++sprite->data4 == sprite->data0) - { - sprite->data5 = 2; - return; - } - break; - case 0: - sprite->data2 += 0x400; - sprite->data3 += 0x100; - if (++sprite->data4 == sprite->data0) - { - sprite->data4 = 0; - sprite->data5 = 1; - } - break; + case 1: + sprite->data2 -= 0x400; + sprite->data3 -= 0x100; + if (++sprite->data4 == sprite->data0) + { + sprite->data5 = 2; + return; + } + break; + case 0: + sprite->data2 += 0x400; + sprite->data3 += 0x100; + if (++sprite->data4 == sprite->data0) + { + sprite->data4 = 0; + sprite->data5 = 1; + } + break; } + if ((u16)gBattleAnimArgs[7] == 0xFFFF) move_anim_8072740(sprite); } @@ -6037,16 +6176,19 @@ void sub_80D2938(struct Sprite* sprite) sprite->pos1.x += gBattleAnimArgs[0]; sprite->pos1.y += gBattleAnimArgs[1]; } + sprite->data0++; r5 = (sprite->data0 * 10) & 0xFF; sprite->pos2.x = Sin(r5, 0x50) >> 8; if (sprite->data0 <= 0x4F) sprite->pos2.y = (sprite->data0 / 2) + (Cos(r5, 0x50) >> 8); + if (sprite->data0 > 0x5A) { sprite->data2++; sprite->pos2.x -= sprite->data2 / 2; } + if (sprite->data0 > 0x64) move_anim_8072740(sprite); } @@ -6059,6 +6201,7 @@ void sub_80D29CC(struct Sprite* sprite) sprite->data3 = (sprite->data3 + 3) & 0xFF; if (sprite->data5 > 20) sprite->invisible = sprite->data5 % 2; + if (sprite->data5 > 30) move_anim_8072740(sprite); } @@ -6102,13 +6245,16 @@ void sub_80D2A38(struct Sprite* sprite) sprite->subpriority = sub_8079E90(gBattleAnimBankTarget) - 1; sprite->data2 = 1; } + sprite->data0 += sprite->data2; var = sprite->data0 * 4; if (var < 0) var += 0xFF; + sprite->data1 = (sprite->data0 * 4) -(((var) >> 8) << 8); if (sprite->data1 < 0) sprite->data1 = 0; + var3 = sprite->data1; var2 = sprite->data0; var2 /= 4; -- cgit v1.2.3 From 2e4c7d675cc25181996edcfb879ed9c6e41d0bcc Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Sun, 12 Nov 2017 10:35:06 -0800 Subject: Use spaces instead of tabs in battle_tower --- src/field/battle_tower.c | 2829 +++++++++++++++++++++++----------------------- 1 file changed, 1414 insertions(+), 1415 deletions(-) (limited to 'src') diff --git a/src/field/battle_tower.c b/src/field/battle_tower.c index 3e60d3a9a..7a9c043b0 100644 --- a/src/field/battle_tower.c +++ b/src/field/battle_tower.c @@ -33,221 +33,221 @@ #endif static const u16 sBattleTowerHeldItems[] = { - ITEM_NONE, - ITEM_KINGS_ROCK, - ITEM_SITRUS_BERRY, - ITEM_ORAN_BERRY, - ITEM_CHESTO_BERRY, - ITEM_HARD_STONE, - ITEM_FOCUS_BAND, - ITEM_PERSIM_BERRY, - ITEM_MIRACLE_SEED, - ITEM_BERRY_JUICE, - ITEM_MACHO_BRACE, - ITEM_SILVER_POWDER, - ITEM_CHERI_BERRY, - ITEM_BLACK_GLASSES, - ITEM_BLACK_BELT, - ITEM_SOUL_DEW, - ITEM_CHOICE_BAND, - ITEM_MAGNET, - ITEM_SILK_SCARF, - ITEM_WHITE_HERB, - ITEM_DEEP_SEA_SCALE, - ITEM_DEEP_SEA_TOOTH, - ITEM_MYSTIC_WATER, - ITEM_SHARP_BEAK, - ITEM_QUICK_CLAW, - ITEM_LEFTOVERS, - ITEM_RAWST_BERRY, - ITEM_LIGHT_BALL, - ITEM_POISON_BARB, - ITEM_NEVER_MELT_ICE, - ITEM_ASPEAR_BERRY, - ITEM_SPELL_TAG, - ITEM_BRIGHT_POWDER, - ITEM_LEPPA_BERRY, - ITEM_SCOPE_LENS, - ITEM_TWISTED_SPOON, - ITEM_METAL_COAT, - ITEM_MENTAL_HERB, - ITEM_CHARCOAL, - ITEM_PECHA_BERRY, - ITEM_SOFT_SAND, - ITEM_LUM_BERRY, - ITEM_DRAGON_SCALE, - ITEM_DRAGON_FANG, - ITEM_IAPAPA_BERRY, - ITEM_WIKI_BERRY, - ITEM_SEA_INCENSE, - ITEM_SHELL_BELL, - ITEM_SALAC_BERRY, - ITEM_LANSAT_BERRY, - ITEM_APICOT_BERRY, - ITEM_STARF_BERRY, - ITEM_LIECHI_BERRY, - ITEM_STICK, - ITEM_LAX_INCENSE, - ITEM_AGUAV_BERRY, - ITEM_FIGY_BERRY, - ITEM_THICK_CLUB, - ITEM_MAGO_BERRY, - ITEM_METAL_POWDER, - ITEM_PETAYA_BERRY, - ITEM_LUCKY_PUNCH, - ITEM_GANLON_BERRY, + ITEM_NONE, + ITEM_KINGS_ROCK, + ITEM_SITRUS_BERRY, + ITEM_ORAN_BERRY, + ITEM_CHESTO_BERRY, + ITEM_HARD_STONE, + ITEM_FOCUS_BAND, + ITEM_PERSIM_BERRY, + ITEM_MIRACLE_SEED, + ITEM_BERRY_JUICE, + ITEM_MACHO_BRACE, + ITEM_SILVER_POWDER, + ITEM_CHERI_BERRY, + ITEM_BLACK_GLASSES, + ITEM_BLACK_BELT, + ITEM_SOUL_DEW, + ITEM_CHOICE_BAND, + ITEM_MAGNET, + ITEM_SILK_SCARF, + ITEM_WHITE_HERB, + ITEM_DEEP_SEA_SCALE, + ITEM_DEEP_SEA_TOOTH, + ITEM_MYSTIC_WATER, + ITEM_SHARP_BEAK, + ITEM_QUICK_CLAW, + ITEM_LEFTOVERS, + ITEM_RAWST_BERRY, + ITEM_LIGHT_BALL, + ITEM_POISON_BARB, + ITEM_NEVER_MELT_ICE, + ITEM_ASPEAR_BERRY, + ITEM_SPELL_TAG, + ITEM_BRIGHT_POWDER, + ITEM_LEPPA_BERRY, + ITEM_SCOPE_LENS, + ITEM_TWISTED_SPOON, + ITEM_METAL_COAT, + ITEM_MENTAL_HERB, + ITEM_CHARCOAL, + ITEM_PECHA_BERRY, + ITEM_SOFT_SAND, + ITEM_LUM_BERRY, + ITEM_DRAGON_SCALE, + ITEM_DRAGON_FANG, + ITEM_IAPAPA_BERRY, + ITEM_WIKI_BERRY, + ITEM_SEA_INCENSE, + ITEM_SHELL_BELL, + ITEM_SALAC_BERRY, + ITEM_LANSAT_BERRY, + ITEM_APICOT_BERRY, + ITEM_STARF_BERRY, + ITEM_LIECHI_BERRY, + ITEM_STICK, + ITEM_LAX_INCENSE, + ITEM_AGUAV_BERRY, + ITEM_FIGY_BERRY, + ITEM_THICK_CLUB, + ITEM_MAGO_BERRY, + ITEM_METAL_POWDER, + ITEM_PETAYA_BERRY, + ITEM_LUCKY_PUNCH, + ITEM_GANLON_BERRY, }; #include "../data/battle_tower/level_50_mons.h" #include "../data/battle_tower/level_100_mons.h" static const u8 sMaleTrainerClasses[] = { - TRAINER_CLASS_RUIN_MANIAC, - TRAINER_CLASS_TUBER_M, - TRAINER_CLASS_COOL_TRAINER_M, - TRAINER_CLASS_RICH_BOY, - TRAINER_CLASS_POKEMANIAC, - TRAINER_CLASS_SWIMMER_M, - TRAINER_CLASS_BLACK_BELT, - TRAINER_CLASS_GUITARIST, - TRAINER_CLASS_KINDLER, - TRAINER_CLASS_CAMPER, - TRAINER_CLASS_BUG_MANIAC, - TRAINER_CLASS_PSYCHIC_M, - TRAINER_CLASS_GENTLEMAN, - TRAINER_CLASS_SCHOOL_KID_M, - TRAINER_CLASS_POKEFAN_M, - TRAINER_CLASS_EXPERT_M, - TRAINER_CLASS_YOUNGSTER, - TRAINER_CLASS_FISHERMAN, - TRAINER_CLASS_CYCLING_TRIATHLETE_M, - TRAINER_CLASS_RUNNING_TRIATHLETE_M, - TRAINER_CLASS_SWIMMING_TRIATHLETE_M, - TRAINER_CLASS_DRAGON_TAMER, - TRAINER_CLASS_BIRD_KEEPER, - TRAINER_CLASS_NINJA_BOY, - TRAINER_CLASS_SAILOR, - TRAINER_CLASS_COLLECTOR, - TRAINER_CLASS_POKEMON_BREEDER_M, - TRAINER_CLASS_POKEMON_RANGER_M, - TRAINER_CLASS_BUG_CATCHER, - TRAINER_CLASS_HIKER, + TRAINER_CLASS_RUIN_MANIAC, + TRAINER_CLASS_TUBER_M, + TRAINER_CLASS_COOL_TRAINER_M, + TRAINER_CLASS_RICH_BOY, + TRAINER_CLASS_POKEMANIAC, + TRAINER_CLASS_SWIMMER_M, + TRAINER_CLASS_BLACK_BELT, + TRAINER_CLASS_GUITARIST, + TRAINER_CLASS_KINDLER, + TRAINER_CLASS_CAMPER, + TRAINER_CLASS_BUG_MANIAC, + TRAINER_CLASS_PSYCHIC_M, + TRAINER_CLASS_GENTLEMAN, + TRAINER_CLASS_SCHOOL_KID_M, + TRAINER_CLASS_POKEFAN_M, + TRAINER_CLASS_EXPERT_M, + TRAINER_CLASS_YOUNGSTER, + TRAINER_CLASS_FISHERMAN, + TRAINER_CLASS_CYCLING_TRIATHLETE_M, + TRAINER_CLASS_RUNNING_TRIATHLETE_M, + TRAINER_CLASS_SWIMMING_TRIATHLETE_M, + TRAINER_CLASS_DRAGON_TAMER, + TRAINER_CLASS_BIRD_KEEPER, + TRAINER_CLASS_NINJA_BOY, + TRAINER_CLASS_SAILOR, + TRAINER_CLASS_COLLECTOR, + TRAINER_CLASS_POKEMON_BREEDER_M, + TRAINER_CLASS_POKEMON_RANGER_M, + TRAINER_CLASS_BUG_CATCHER, + TRAINER_CLASS_HIKER, }; static const u8 sFemaleTrainerClasses[] = { - TRAINER_CLASS_AROMA_LADY, - TRAINER_CLASS_TUBER_F, - TRAINER_CLASS_COOL_TRAINER_F, - TRAINER_CLASS_HEX_MANIAC, - TRAINER_CLASS_LADY, - TRAINER_CLASS_BEAUTY, - TRAINER_CLASS_PSYCHIC_F, - TRAINER_CLASS_SCHOOL_KID_F, - TRAINER_CLASS_POKEFAN_F, - TRAINER_CLASS_EXPERT_F, - TRAINER_CLASS_CYCLING_TRIATHLETE_F, - TRAINER_CLASS_RUNNING_TRIATHLETE_F, - TRAINER_CLASS_SWIMMING_TRIATHLETE_F, - TRAINER_CLASS_BATTLE_GIRL, - TRAINER_CLASS_PARASOL_LADY, - TRAINER_CLASS_SWIMMER_F, - TRAINER_CLASS_PICNICKER, - TRAINER_CLASS_POKEMON_BREEDER_F, - TRAINER_CLASS_POKEMON_RANGER_F, - TRAINER_CLASS_LASS, + TRAINER_CLASS_AROMA_LADY, + TRAINER_CLASS_TUBER_F, + TRAINER_CLASS_COOL_TRAINER_F, + TRAINER_CLASS_HEX_MANIAC, + TRAINER_CLASS_LADY, + TRAINER_CLASS_BEAUTY, + TRAINER_CLASS_PSYCHIC_F, + TRAINER_CLASS_SCHOOL_KID_F, + TRAINER_CLASS_POKEFAN_F, + TRAINER_CLASS_EXPERT_F, + TRAINER_CLASS_CYCLING_TRIATHLETE_F, + TRAINER_CLASS_RUNNING_TRIATHLETE_F, + TRAINER_CLASS_SWIMMING_TRIATHLETE_F, + TRAINER_CLASS_BATTLE_GIRL, + TRAINER_CLASS_PARASOL_LADY, + TRAINER_CLASS_SWIMMER_F, + TRAINER_CLASS_PICNICKER, + TRAINER_CLASS_POKEMON_BREEDER_F, + TRAINER_CLASS_POKEMON_RANGER_F, + TRAINER_CLASS_LASS, }; static const u8 sMaleTrainerGfxIds[] = { - MAP_OBJ_GFX_HIKER, - MAP_OBJ_GFX_TUBER_M, - MAP_OBJ_GFX_MAN_4, - MAP_OBJ_GFX_BOY_4, - MAP_OBJ_GFX_MANIAC, - MAP_OBJ_GFX_RUNNING_TRIATHLETE_M, - MAP_OBJ_GFX_BLACK_BELT, - MAP_OBJ_GFX_MAN_6, - MAP_OBJ_GFX_MAN_6, - MAP_OBJ_GFX_CAMPER, - MAP_OBJ_GFX_MANIAC, - MAP_OBJ_GFX_PSYCHIC_M, - MAP_OBJ_GFX_GENTLEMAN, - MAP_OBJ_GFX_SCHOOL_KID_M, - MAP_OBJ_GFX_MAN_3, - MAP_OBJ_GFX_OLD_MAN_1, - MAP_OBJ_GFX_YOUNGSTER, - MAP_OBJ_GFX_FISHERMAN, - MAP_OBJ_GFX_CYCLING_TRIATHLETE_M, - MAP_OBJ_GFX_RUNNING_TRIATHLETE_M, - MAP_OBJ_GFX_RUNNING_TRIATHLETE_M, - MAP_OBJ_GFX_MAN_4, - MAP_OBJ_GFX_MAN_6, - MAP_OBJ_GFX_LITTLE_BOY_1, - MAP_OBJ_GFX_SAILOR, - MAP_OBJ_GFX_MANIAC, - MAP_OBJ_GFX_MAN_5, - MAP_OBJ_GFX_CAMPER, - MAP_OBJ_GFX_BUG_CATCHER, - MAP_OBJ_GFX_HIKER, + MAP_OBJ_GFX_HIKER, + MAP_OBJ_GFX_TUBER_M, + MAP_OBJ_GFX_MAN_4, + MAP_OBJ_GFX_BOY_4, + MAP_OBJ_GFX_MANIAC, + MAP_OBJ_GFX_RUNNING_TRIATHLETE_M, + MAP_OBJ_GFX_BLACK_BELT, + MAP_OBJ_GFX_MAN_6, + MAP_OBJ_GFX_MAN_6, + MAP_OBJ_GFX_CAMPER, + MAP_OBJ_GFX_MANIAC, + MAP_OBJ_GFX_PSYCHIC_M, + MAP_OBJ_GFX_GENTLEMAN, + MAP_OBJ_GFX_SCHOOL_KID_M, + MAP_OBJ_GFX_MAN_3, + MAP_OBJ_GFX_OLD_MAN_1, + MAP_OBJ_GFX_YOUNGSTER, + MAP_OBJ_GFX_FISHERMAN, + MAP_OBJ_GFX_CYCLING_TRIATHLETE_M, + MAP_OBJ_GFX_RUNNING_TRIATHLETE_M, + MAP_OBJ_GFX_RUNNING_TRIATHLETE_M, + MAP_OBJ_GFX_MAN_4, + MAP_OBJ_GFX_MAN_6, + MAP_OBJ_GFX_LITTLE_BOY_1, + MAP_OBJ_GFX_SAILOR, + MAP_OBJ_GFX_MANIAC, + MAP_OBJ_GFX_MAN_5, + MAP_OBJ_GFX_CAMPER, + MAP_OBJ_GFX_BUG_CATCHER, + MAP_OBJ_GFX_HIKER, }; static const u8 sFemaleTrainerGfxIds[] = { - MAP_OBJ_GFX_WOMAN_3, - MAP_OBJ_GFX_TUBER_F, - MAP_OBJ_GFX_WOMAN_7, - MAP_OBJ_GFX_WOMAN_1, - MAP_OBJ_GFX_WOMAN_3, - MAP_OBJ_GFX_BEAUTY, - MAP_OBJ_GFX_LASS, - MAP_OBJ_GFX_GIRL_3, - MAP_OBJ_GFX_WOMAN_2, - MAP_OBJ_GFX_OLD_WOMAN_1, - MAP_OBJ_GFX_CYCLING_TRIATHLETE_F, - MAP_OBJ_GFX_RUNNING_TRIATHLETE_F, - MAP_OBJ_GFX_RUNNING_TRIATHLETE_F, - MAP_OBJ_GFX_GIRL_3, - MAP_OBJ_GFX_WOMAN_7, - MAP_OBJ_GFX_RUNNING_TRIATHLETE_F, - MAP_OBJ_GFX_PICNICKER, - MAP_OBJ_GFX_WOMAN_3, - MAP_OBJ_GFX_PICNICKER, - MAP_OBJ_GFX_LASS, + MAP_OBJ_GFX_WOMAN_3, + MAP_OBJ_GFX_TUBER_F, + MAP_OBJ_GFX_WOMAN_7, + MAP_OBJ_GFX_WOMAN_1, + MAP_OBJ_GFX_WOMAN_3, + MAP_OBJ_GFX_BEAUTY, + MAP_OBJ_GFX_LASS, + MAP_OBJ_GFX_GIRL_3, + MAP_OBJ_GFX_WOMAN_2, + MAP_OBJ_GFX_OLD_WOMAN_1, + MAP_OBJ_GFX_CYCLING_TRIATHLETE_F, + MAP_OBJ_GFX_RUNNING_TRIATHLETE_F, + MAP_OBJ_GFX_RUNNING_TRIATHLETE_F, + MAP_OBJ_GFX_GIRL_3, + MAP_OBJ_GFX_WOMAN_7, + MAP_OBJ_GFX_RUNNING_TRIATHLETE_F, + MAP_OBJ_GFX_PICNICKER, + MAP_OBJ_GFX_WOMAN_3, + MAP_OBJ_GFX_PICNICKER, + MAP_OBJ_GFX_LASS, }; const u16 gBattleTowerBannedSpecies[] = { - SPECIES_MEW, - SPECIES_MEWTWO, - SPECIES_HO_OH, - SPECIES_LUGIA, - SPECIES_CELEBI, - SPECIES_KYOGRE, - SPECIES_GROUDON, - SPECIES_RAYQUAZA, - SPECIES_JIRACHI, - SPECIES_DEOXYS, - 0xFFFF, + SPECIES_MEW, + SPECIES_MEWTWO, + SPECIES_HO_OH, + SPECIES_LUGIA, + SPECIES_CELEBI, + SPECIES_KYOGRE, + SPECIES_GROUDON, + SPECIES_RAYQUAZA, + SPECIES_JIRACHI, + SPECIES_DEOXYS, + 0xFFFF, }; // Item prizes for battle tower streaks of 5 or fewer sets. /*static*/ const u16 sShortStreakPrizes[] = { - ITEM_HP_UP, - ITEM_PROTEIN, - ITEM_IRON, - ITEM_CALCIUM, - ITEM_CARBOS, - ITEM_ZINC, + ITEM_HP_UP, + ITEM_PROTEIN, + ITEM_IRON, + ITEM_CALCIUM, + ITEM_CARBOS, + ITEM_ZINC, }; // Item prizes for battle tower streaks of greater than 5 sets. /*static*/ const u16 sLongStreakPrizes[] = { - ITEM_BRIGHT_POWDER, - ITEM_WHITE_HERB, - ITEM_QUICK_CLAW, - ITEM_LEFTOVERS, - ITEM_MENTAL_HERB, - ITEM_KINGS_ROCK, - ITEM_FOCUS_BAND, - ITEM_SCOPE_LENS, - ITEM_CHOICE_BAND, + ITEM_BRIGHT_POWDER, + ITEM_WHITE_HERB, + ITEM_QUICK_CLAW, + ITEM_LEFTOVERS, + ITEM_MENTAL_HERB, + ITEM_KINGS_ROCK, + ITEM_FOCUS_BAND, + ITEM_SCOPE_LENS, + ITEM_CHOICE_BAND, }; static void ResetBattleTowerStreak(u8 levelType); @@ -281,243 +281,243 @@ extern struct BattlePokemon gBattleMons[]; void sub_8134548(void) { - u8 var1 = 0; - s32 levelType; - - for (levelType = 0; levelType < 2; levelType++) - { - switch (gSaveBlock2.battleTower.var_4AE[levelType]) - { - case 0: - default: - ResetBattleTowerStreak(levelType); - if (!var1) - { - VarSet(VAR_0x4000, 5); - } - break; - case 1: - ResetBattleTowerStreak(levelType); - VarSet(VAR_0x4000, 1); - var1++; - break; - case 4: - VarSet(VAR_0x4000, 2); - var1++; - break; - case 5: - VarSet(VAR_0x4000, 3); - var1++; - break; - case 2: - VarSet(VAR_0x4000, 4); - var1++; - break; - case 3: - case 6: - break; - } - } - - if ((gSaveBlock2.battleTower.var_4AE[0] == 3 || gSaveBlock2.battleTower.var_4AE[0] == 6) - && (gSaveBlock2.battleTower.var_4AE[1] == 3 || gSaveBlock2.battleTower.var_4AE[1] == 6)) - { - VarSet(VAR_0x4000, 5); - } - - ValidateBattleTowerRecordChecksums(); + u8 var1 = 0; + s32 levelType; + + for (levelType = 0; levelType < 2; levelType++) + { + switch (gSaveBlock2.battleTower.var_4AE[levelType]) + { + case 0: + default: + ResetBattleTowerStreak(levelType); + if (!var1) + { + VarSet(VAR_0x4000, 5); + } + break; + case 1: + ResetBattleTowerStreak(levelType); + VarSet(VAR_0x4000, 1); + var1++; + break; + case 4: + VarSet(VAR_0x4000, 2); + var1++; + break; + case 5: + VarSet(VAR_0x4000, 3); + var1++; + break; + case 2: + VarSet(VAR_0x4000, 4); + var1++; + break; + case 3: + case 6: + break; + } + } + + if ((gSaveBlock2.battleTower.var_4AE[0] == 3 || gSaveBlock2.battleTower.var_4AE[0] == 6) + && (gSaveBlock2.battleTower.var_4AE[1] == 3 || gSaveBlock2.battleTower.var_4AE[1] == 6)) + { + VarSet(VAR_0x4000, 5); + } + + ValidateBattleTowerRecordChecksums(); } void ResetBattleTowerStreak(u8 levelType) { - gSaveBlock2.battleTower.var_4AE[levelType] = 0; - gSaveBlock2.battleTower.curChallengeBattleNum[levelType] = 1; - gSaveBlock2.battleTower.curStreakChallengesNum[levelType] = 1; + gSaveBlock2.battleTower.var_4AE[levelType] = 0; + gSaveBlock2.battleTower.curChallengeBattleNum[levelType] = 1; + gSaveBlock2.battleTower.curStreakChallengesNum[levelType] = 1; } // Checks if the next trainer in Battle Tower should be the E-Reader trainer. bool8 ShouldBattleEReaderTrainer(u8 levelType, u16 winStreak) { - u8 trainerTeamLevel; - u8 monLevel; - s32 i; - u16 validPartySpecies[6]; - u16 validPartyHeldItems[6]; - u8 numValid; - - numValid = 0; - - ValidateEReaderTrainer(); - - if (gScriptResult != 0 || gSaveBlock2.battleTower.ereaderTrainer.winStreak != winStreak) - { - return FALSE; - } - - trainerTeamLevel = 50; - if (levelType != 0) - { - trainerTeamLevel = 100; - } - - for (i = 0; i < 3; i++) - { - monLevel = gSaveBlock2.battleTower.ereaderTrainer.party[i].level; - if (gSaveBlock2.battleTower.ereaderTrainer.party[i].level != trainerTeamLevel) - { - return FALSE; - } - - CheckMonBattleTowerBanlist( - gSaveBlock2.battleTower.ereaderTrainer.party[i].species, - gSaveBlock2.battleTower.ereaderTrainer.party[i].heldItem, - 1, - levelType, - monLevel, - validPartySpecies, - validPartyHeldItems, - &numValid); - } - - return numValid == 3; + u8 trainerTeamLevel; + u8 monLevel; + s32 i; + u16 validPartySpecies[6]; + u16 validPartyHeldItems[6]; + u8 numValid; + + numValid = 0; + + ValidateEReaderTrainer(); + + if (gScriptResult != 0 || gSaveBlock2.battleTower.ereaderTrainer.winStreak != winStreak) + { + return FALSE; + } + + trainerTeamLevel = 50; + if (levelType != 0) + { + trainerTeamLevel = 100; + } + + for (i = 0; i < 3; i++) + { + monLevel = gSaveBlock2.battleTower.ereaderTrainer.party[i].level; + if (gSaveBlock2.battleTower.ereaderTrainer.party[i].level != trainerTeamLevel) + { + return FALSE; + } + + CheckMonBattleTowerBanlist( + gSaveBlock2.battleTower.ereaderTrainer.party[i].species, + gSaveBlock2.battleTower.ereaderTrainer.party[i].heldItem, + 1, + levelType, + monLevel, + validPartySpecies, + validPartyHeldItems, + &numValid); + } + + return numValid == 3; } bool8 sub_81346F4(void) { - s32 recordIndex, i; - u8 battleTowerLevelType; - u16 winStreak; - bool8 retVal; - s32 numCandidates; - u32 trainerIds[5]; - - numCandidates = 0; - battleTowerLevelType = gSaveBlock2.battleTower.battleTowerLevelType; - - winStreak = GetCurrentBattleTowerWinStreak(battleTowerLevelType); - if (ShouldBattleEReaderTrainer(battleTowerLevelType, winStreak)) - { - gSaveBlock2.battleTower.battleTowerTrainerId = BATTLE_TOWER_EREADER_TRAINER_ID; - retVal = TRUE; - } - else - { - // Check if one of the battle tower trainers from record mixing should be the next trainer. - for (recordIndex = 0; recordIndex < 5; recordIndex++) - { - struct BattleTowerRecord *record = &gSaveBlock2.battleTower.records[recordIndex]; - u32 recordHasData = 0; - u32 checksum = 0; - for (i = 0; i < sizeof(struct BattleTowerRecord) / sizeof(u32) - 1; i++) - { - recordHasData |= ((u32 *)record)[i]; - checksum += ((u32 *)record)[i]; - } - - if (gSaveBlock2.battleTower.records[recordIndex].winStreak == winStreak - && gSaveBlock2.battleTower.records[recordIndex].battleTowerLevelType == battleTowerLevelType - && recordHasData - && gSaveBlock2.battleTower.records[recordIndex].checksum == checksum) - { - trainerIds[numCandidates] = recordIndex; - numCandidates++; - } - } - - if (numCandidates == 0) - { - retVal = FALSE; - } - else - { - gSaveBlock2.battleTower.battleTowerTrainerId = trainerIds[Random() % numCandidates] + BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID; - retVal = TRUE; - } - } - - return retVal; + s32 recordIndex, i; + u8 battleTowerLevelType; + u16 winStreak; + bool8 retVal; + s32 numCandidates; + u32 trainerIds[5]; + + numCandidates = 0; + battleTowerLevelType = gSaveBlock2.battleTower.battleTowerLevelType; + + winStreak = GetCurrentBattleTowerWinStreak(battleTowerLevelType); + if (ShouldBattleEReaderTrainer(battleTowerLevelType, winStreak)) + { + gSaveBlock2.battleTower.battleTowerTrainerId = BATTLE_TOWER_EREADER_TRAINER_ID; + retVal = TRUE; + } + else + { + // Check if one of the battle tower trainers from record mixing should be the next trainer. + for (recordIndex = 0; recordIndex < 5; recordIndex++) + { + struct BattleTowerRecord *record = &gSaveBlock2.battleTower.records[recordIndex]; + u32 recordHasData = 0; + u32 checksum = 0; + for (i = 0; i < sizeof(struct BattleTowerRecord) / sizeof(u32) - 1; i++) + { + recordHasData |= ((u32 *)record)[i]; + checksum += ((u32 *)record)[i]; + } + + if (gSaveBlock2.battleTower.records[recordIndex].winStreak == winStreak + && gSaveBlock2.battleTower.records[recordIndex].battleTowerLevelType == battleTowerLevelType + && recordHasData + && gSaveBlock2.battleTower.records[recordIndex].checksum == checksum) + { + trainerIds[numCandidates] = recordIndex; + numCandidates++; + } + } + + if (numCandidates == 0) + { + retVal = FALSE; + } + else + { + gSaveBlock2.battleTower.battleTowerTrainerId = trainerIds[Random() % numCandidates] + BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID; + retVal = TRUE; + } + } + + return retVal; } // void sub_81347F8(void) // { -// bool8 levelType = gSaveBlock2.battleTower.battleTowerLevelType; -// if (sub_81346F4()) -// { -// SetBattleTowerTrainerGfxId(gSaveBlock2.battleTower.battleTowerTrainerId); -// gSaveBlock2.battleTower.var_4C1[gSaveBlock2.battleTower.curChallengeBattleNum[levelType]] = gSaveBlock2.battleTower.battleTowerTrainerId; -// } -// else -// { -// u16 var1; - -// if (gSaveBlock2.battleTower.curStreakChallengesNum[levelType] > 7) -// { -// while (1) -// { -// s32 i; -// u32 temp = ((Random() & 0xFF) * 30) >> 8; -// var1 = temp + 70; -// for (i = 0; i < gSaveBlock2.battleTower.curChallengeBattleNum[levelType] - 1 && var1 != gSaveBlock2.battleTower.var_4C1[i]; i++) // TODO: [i + 1]??? -// { } - -// if (i == gSaveBlock2.battleTower.curChallengeBattleNum[levelType] - 1) -// { -// break; -// } -// } -// } -// else -// { -// if (gSaveBlock2.battleTower.curChallengeBattleNum[levelType] == 7) -// { -// while (1) -// { -// s32 i; -// u32 temp = ((Random() & 0xFF) * 5); -// u32 temp2 = (((gSaveBlock2.battleTower.curStreakChallengesNum[levelType] - 1) * 10) + 20); -// var1 = temp / 128 + temp2; -// for (i = 0; i < gSaveBlock2.battleTower.curChallengeBattleNum[levelType] - 1 && gSaveBlock2.battleTower.var_4C1[i] != var1; i++) // TODO: [i + 1]???? -// { } - -// if (i == gSaveBlock2.battleTower.curChallengeBattleNum[levelType] - 1) -// { -// break; -// } -// } -// } -// else -// { -// while (1) -// { -// s32 i; -// u32 temp = ((Random() & 0xFF) * 320); -// u32 temp2 = ((gSaveBlock2.battleTower.curStreakChallengesNum[levelType] - 1) * 10); -// var1 = temp + temp2; -// for (i = 0; i < gSaveBlock2.battleTower.curChallengeBattleNum[levelType] - 1 && gSaveBlock2.battleTower.var_4C1[i] != var1; i++) -// { } - -// if (i == gSaveBlock2.battleTower.curChallengeBattleNum[levelType] - 1) -// { -// break; -// } -// } -// } -// } - -// gSaveBlock2.battleTower.battleTowerTrainerId = var1; -// SetBattleTowerTrainerGfxId(gSaveBlock2.battleTower.battleTowerTrainerId); - -// if (gSaveBlock2.battleTower.curChallengeBattleNum[levelType] < 7) -// { -// gSaveBlock2.battleTower.var_4C1[gSaveBlock2.battleTower.curChallengeBattleNum[levelType]] = gSaveBlock2.battleTower.battleTowerTrainerId; -// } -// } +// bool8 levelType = gSaveBlock2.battleTower.battleTowerLevelType; +// if (sub_81346F4()) +// { +// SetBattleTowerTrainerGfxId(gSaveBlock2.battleTower.battleTowerTrainerId); +// gSaveBlock2.battleTower.var_4C1[gSaveBlock2.battleTower.curChallengeBattleNum[levelType]] = gSaveBlock2.battleTower.battleTowerTrainerId; +// } +// else +// { +// u16 var1; + +// if (gSaveBlock2.battleTower.curStreakChallengesNum[levelType] > 7) +// { +// while (1) +// { +// s32 i; +// u32 temp = ((Random() & 0xFF) * 30) >> 8; +// var1 = temp + 70; +// for (i = 0; i < gSaveBlock2.battleTower.curChallengeBattleNum[levelType] - 1 && var1 != gSaveBlock2.battleTower.var_4C1[i]; i++) // TODO: [i + 1]??? +// { } + +// if (i == gSaveBlock2.battleTower.curChallengeBattleNum[levelType] - 1) +// { +// break; +// } +// } +// } +// else +// { +// if (gSaveBlock2.battleTower.curChallengeBattleNum[levelType] == 7) +// { +// while (1) +// { +// s32 i; +// u32 temp = ((Random() & 0xFF) * 5); +// u32 temp2 = (((gSaveBlock2.battleTower.curStreakChallengesNum[levelType] - 1) * 10) + 20); +// var1 = temp / 128 + temp2; +// for (i = 0; i < gSaveBlock2.battleTower.curChallengeBattleNum[levelType] - 1 && gSaveBlock2.battleTower.var_4C1[i] != var1; i++) // TODO: [i + 1]???? +// { } + +// if (i == gSaveBlock2.battleTower.curChallengeBattleNum[levelType] - 1) +// { +// break; +// } +// } +// } +// else +// { +// while (1) +// { +// s32 i; +// u32 temp = ((Random() & 0xFF) * 320); +// u32 temp2 = ((gSaveBlock2.battleTower.curStreakChallengesNum[levelType] - 1) * 10); +// var1 = temp + temp2; +// for (i = 0; i < gSaveBlock2.battleTower.curChallengeBattleNum[levelType] - 1 && gSaveBlock2.battleTower.var_4C1[i] != var1; i++) +// { } + +// if (i == gSaveBlock2.battleTower.curChallengeBattleNum[levelType] - 1) +// { +// break; +// } +// } +// } +// } + +// gSaveBlock2.battleTower.battleTowerTrainerId = var1; +// SetBattleTowerTrainerGfxId(gSaveBlock2.battleTower.battleTowerTrainerId); + +// if (gSaveBlock2.battleTower.curChallengeBattleNum[levelType] < 7) +// { +// gSaveBlock2.battleTower.var_4C1[gSaveBlock2.battleTower.curChallengeBattleNum[levelType]] = gSaveBlock2.battleTower.battleTowerTrainerId; +// } +// } // } __attribute__((naked)) void sub_81347F8(void) { - asm(".syntax unified\n\ + asm(".syntax unified\n\ push {r4-r7,lr}\n\ mov r7, r10\n\ mov r6, r9\n\ @@ -780,129 +780,129 @@ _081349F8: .4byte 0x00000569\n\ void SetBattleTowerTrainerGfxId(u8 trainerIndex) { - u32 i; - u8 trainerClass; - - if (trainerIndex < BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID) - { - trainerClass = gBattleTowerTrainers[trainerIndex].trainerClass; - } - else if (trainerIndex < BATTLE_TOWER_EREADER_TRAINER_ID) - { - trainerClass = gSaveBlock2.battleTower.records[trainerIndex - BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID].trainerClass; - } - else - { - trainerClass = gSaveBlock2.battleTower.ereaderTrainer.trainerClass; - } - - for (i = 0; i < 30 && sMaleTrainerClasses[i] != trainerClass; i++); - if (i != 30) - { - u8 trainerObjectGfxId = sMaleTrainerGfxIds[i]; - VarSet(0x4010, trainerObjectGfxId); - return; - } - - for (i = 0; i < 20 && sFemaleTrainerClasses[i] != trainerClass; i++); - if (i != 20) - { - u8 trainerObjectGfxId = sFemaleTrainerGfxIds[i]; - VarSet(0x4010, trainerObjectGfxId); - return; - } - - VarSet(0x4010, MAP_OBJ_GFX_BOY_1); + u32 i; + u8 trainerClass; + + if (trainerIndex < BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID) + { + trainerClass = gBattleTowerTrainers[trainerIndex].trainerClass; + } + else if (trainerIndex < BATTLE_TOWER_EREADER_TRAINER_ID) + { + trainerClass = gSaveBlock2.battleTower.records[trainerIndex - BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID].trainerClass; + } + else + { + trainerClass = gSaveBlock2.battleTower.ereaderTrainer.trainerClass; + } + + for (i = 0; i < 30 && sMaleTrainerClasses[i] != trainerClass; i++); + if (i != 30) + { + u8 trainerObjectGfxId = sMaleTrainerGfxIds[i]; + VarSet(0x4010, trainerObjectGfxId); + return; + } + + for (i = 0; i < 20 && sFemaleTrainerClasses[i] != trainerClass; i++); + if (i != 20) + { + u8 trainerObjectGfxId = sFemaleTrainerGfxIds[i]; + VarSet(0x4010, trainerObjectGfxId); + return; + } + + VarSet(0x4010, MAP_OBJ_GFX_BOY_1); } void SetEReaderTrainerGfxId(void) { - SetBattleTowerTrainerGfxId(BATTLE_TOWER_EREADER_TRAINER_ID); + SetBattleTowerTrainerGfxId(BATTLE_TOWER_EREADER_TRAINER_ID); } // void sub_8134AC0(struct BattleTowerRecord *record) // { -// u16 var1[6]; -// u16 var2[6]; -// s32 i, j, k; -// s16 l = 0; - -// for (i = 0; i < 5; i++) -// { -// k = 0; -// for (j = 0; j < 4 && gSaveBlock2.battleTower.records[i].trainerId[j] == record->trainerId[j]; j++); -// if (j == 4) -// { -// for (; k < 7 && gSaveBlock2.battleTower.records[i].name[4] == record->name[4]; k++) -// { -// if (record->name[4] == 0xFF) -// { -// k = 7; -// break; -// } -// } -// } - -// if (k == 7) -// { -// break; -// } -// } - -// if (i < 5) -// { -// gSaveBlock2.battleTower.records[i] = *record; -// return; -// } - -// i = 0; -// while (i < 5) -// { -// if (gSaveBlock2.battleTower.records[i].winStreak == 0) -// { -// if (i > 4) -// { -// break; -// } - -// gSaveBlock2.battleTower.records[i] = *record; -// return; -// } - -// i++; -// } - -// var1[0] = gSaveBlock2.battleTower.records[0].winStreak; -// var2[0] = 0; -// l++; - -// for (i = 1; i < 5; i++) -// { -// j = 0; -// if (j < l) -// { -// for (; gSaveBlock2.battleTower.records[i].winStreak <= var1[j]; j++) -// { -// if (gSaveBlock2.battleTower.records[i].winStreak < var1[j]) -// { -// j = 0; -// l = 1; -// var1[0] = gSaveBlock2.battleTower.records[i].winStreak; -// var2[0] = i; -// break; -// } -// } -// } - -// if (j == l) -// { -// var1[l] = gSaveBlock2.battleTower.records[i].winStreak; -// var2[l] = i; -// l++; -// } -// } - -// gSaveBlock2.battleTower.records[var2[(Random() % l)]] = *record; +// u16 var1[6]; +// u16 var2[6]; +// s32 i, j, k; +// s16 l = 0; + +// for (i = 0; i < 5; i++) +// { +// k = 0; +// for (j = 0; j < 4 && gSaveBlock2.battleTower.records[i].trainerId[j] == record->trainerId[j]; j++); +// if (j == 4) +// { +// for (; k < 7 && gSaveBlock2.battleTower.records[i].name[4] == record->name[4]; k++) +// { +// if (record->name[4] == 0xFF) +// { +// k = 7; +// break; +// } +// } +// } + +// if (k == 7) +// { +// break; +// } +// } + +// if (i < 5) +// { +// gSaveBlock2.battleTower.records[i] = *record; +// return; +// } + +// i = 0; +// while (i < 5) +// { +// if (gSaveBlock2.battleTower.records[i].winStreak == 0) +// { +// if (i > 4) +// { +// break; +// } + +// gSaveBlock2.battleTower.records[i] = *record; +// return; +// } + +// i++; +// } + +// var1[0] = gSaveBlock2.battleTower.records[0].winStreak; +// var2[0] = 0; +// l++; + +// for (i = 1; i < 5; i++) +// { +// j = 0; +// if (j < l) +// { +// for (; gSaveBlock2.battleTower.records[i].winStreak <= var1[j]; j++) +// { +// if (gSaveBlock2.battleTower.records[i].winStreak < var1[j]) +// { +// j = 0; +// l = 1; +// var1[0] = gSaveBlock2.battleTower.records[i].winStreak; +// var2[0] = i; +// break; +// } +// } +// } + +// if (j == l) +// { +// var1[l] = gSaveBlock2.battleTower.records[i].winStreak; +// var2[l] = i; +// l++; +// } +// } + +// gSaveBlock2.battleTower.records[var2[(Random() % l)]] = *record; // } __attribute__((naked)) void sub_8134AC0(struct BattleTowerRecord *record) @@ -1137,707 +1137,706 @@ _08134C5E:\n\ bx r0\n\ .align 2, 0\n\ _08134C70: .4byte gSaveBlock2\n\ - .syntax divided\n"); + .syntax divided\n"); } u8 get_trainer_class_pic_index(void) { - if (gSaveBlock2.battleTower.battleTowerTrainerId == BATTLE_TOWER_EREADER_TRAINER_ID) - { - return gTrainerClassToPicIndex[gSaveBlock2.battleTower.ereaderTrainer.trainerClass]; - } - else if (gSaveBlock2.battleTower.battleTowerTrainerId < BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID) - { - return gTrainerClassToPicIndex[gBattleTowerTrainers[gSaveBlock2.battleTower.battleTowerTrainerId].trainerClass]; - } - else - { - return gTrainerClassToPicIndex[gSaveBlock2.battleTower.records[gSaveBlock2.battleTower.battleTowerTrainerId - BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID].trainerClass]; - } + if (gSaveBlock2.battleTower.battleTowerTrainerId == BATTLE_TOWER_EREADER_TRAINER_ID) + { + return gTrainerClassToPicIndex[gSaveBlock2.battleTower.ereaderTrainer.trainerClass]; + } + else if (gSaveBlock2.battleTower.battleTowerTrainerId < BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID) + { + return gTrainerClassToPicIndex[gBattleTowerTrainers[gSaveBlock2.battleTower.battleTowerTrainerId].trainerClass]; + } + else + { + return gTrainerClassToPicIndex[gSaveBlock2.battleTower.records[gSaveBlock2.battleTower.battleTowerTrainerId - BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID].trainerClass]; + } } u8 get_trainer_class_name_index(void) { - if (gSaveBlock2.battleTower.battleTowerTrainerId == BATTLE_TOWER_EREADER_TRAINER_ID) - { - return gTrainerClassToNameIndex[gSaveBlock2.battleTower.ereaderTrainer.trainerClass]; - } - else if (gSaveBlock2.battleTower.battleTowerTrainerId >= BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID) - { - return gTrainerClassToNameIndex[gSaveBlock2.battleTower.records[gSaveBlock2.battleTower.battleTowerTrainerId - BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID].trainerClass]; - } - else - { - return gTrainerClassToNameIndex[gBattleTowerTrainers[gSaveBlock2.battleTower.battleTowerTrainerId].trainerClass]; - } + if (gSaveBlock2.battleTower.battleTowerTrainerId == BATTLE_TOWER_EREADER_TRAINER_ID) + { + return gTrainerClassToNameIndex[gSaveBlock2.battleTower.ereaderTrainer.trainerClass]; + } + else if (gSaveBlock2.battleTower.battleTowerTrainerId >= BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID) + { + return gTrainerClassToNameIndex[gSaveBlock2.battleTower.records[gSaveBlock2.battleTower.battleTowerTrainerId - BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID].trainerClass]; + } + else + { + return gTrainerClassToNameIndex[gBattleTowerTrainers[gSaveBlock2.battleTower.battleTowerTrainerId].trainerClass]; + } } void get_trainer_name(u8* dest) { - s32 i; - - if (gSaveBlock2.battleTower.battleTowerTrainerId == BATTLE_TOWER_EREADER_TRAINER_ID) - { - for (i = 0; i < 7; i++) - { - dest[i] = gSaveBlock2.battleTower.ereaderTrainer.name[i]; - } - } - else if (gSaveBlock2.battleTower.battleTowerTrainerId < BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID) - { - for (i = 0; i < 7; i++) - { - dest[i] = gBattleTowerTrainers[gSaveBlock2.battleTower.battleTowerTrainerId].name[i]; - } - } - else - { - for (i = 0; i < 7; i++) - { - dest[i] = gSaveBlock2.battleTower.records[gSaveBlock2.battleTower.battleTowerTrainerId - BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID].name[i]; - } - } - - dest[i] = 0xFF; + s32 i; + + if (gSaveBlock2.battleTower.battleTowerTrainerId == BATTLE_TOWER_EREADER_TRAINER_ID) + { + for (i = 0; i < 7; i++) + { + dest[i] = gSaveBlock2.battleTower.ereaderTrainer.name[i]; + } + } + else if (gSaveBlock2.battleTower.battleTowerTrainerId < BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID) + { + for (i = 0; i < 7; i++) + { + dest[i] = gBattleTowerTrainers[gSaveBlock2.battleTower.battleTowerTrainerId].name[i]; + } + } + else + { + for (i = 0; i < 7; i++) + { + dest[i] = gSaveBlock2.battleTower.records[gSaveBlock2.battleTower.battleTowerTrainerId - BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID].name[i]; + } + } + + dest[i] = 0xFF; } void FillBattleTowerTrainerParty(void) { - s32 partyIndex, i; - u16 chosenMonIndices[3]; - u8 friendship; - u8 level; - u8 fixedIV; - u8 battleMonsOffset; - u8 monPoolSize; - u8 teamFlags; - const struct BattleTowerPokemon *battleTowerMons; - - battleMonsOffset = 0; - monPoolSize = 60; - friendship = 255; - - ZeroEnemyPartyMons(); - - // Different trainers have access to different sets of pokemon to use in battle. - // The pokemon later in gBattleTowerLevel100Mons or gBattleTowerLevel50Mons are - // stronger. Additionally, the later trainers' pokemon are granted higher IVs. - if (gSaveBlock2.battleTower.battleTowerTrainerId < 20) - { - fixedIV = 6; - } - else if (gSaveBlock2.battleTower.battleTowerTrainerId < 30) - { - fixedIV = 9; - battleMonsOffset = 30; - } - else if (gSaveBlock2.battleTower.battleTowerTrainerId < 40) - { - fixedIV = 12; - battleMonsOffset = 60; - } - else if (gSaveBlock2.battleTower.battleTowerTrainerId < 50) - { - fixedIV = 15; - battleMonsOffset = 90; - } - else if (gSaveBlock2.battleTower.battleTowerTrainerId < 60) - { - fixedIV = 18; - battleMonsOffset = 120; - } - else if (gSaveBlock2.battleTower.battleTowerTrainerId < 70) - { - fixedIV = 21; - battleMonsOffset = 150; - } - else if (gSaveBlock2.battleTower.battleTowerTrainerId < 80) - { - fixedIV = 31; - battleMonsOffset = 180; - } - else if (gSaveBlock2.battleTower.battleTowerTrainerId < BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID) - { - fixedIV = 31; - battleMonsOffset = 200; - monPoolSize = 100; - } - else if (gSaveBlock2.battleTower.battleTowerTrainerId == BATTLE_TOWER_EREADER_TRAINER_ID) - { - // Load E-Reader trainer's party. - for (partyIndex = 0; partyIndex < 3; partyIndex++) - { - sub_803ADE8(&gEnemyParty[partyIndex], &gSaveBlock2.battleTower.ereaderTrainer.party[partyIndex]); - } - - return; - } - else - { - // Load a battle tower record's party. (From record mixing) - for (partyIndex = 0; partyIndex < 3; partyIndex++) - { - sub_803ADE8( - &gEnemyParty[partyIndex], - &gSaveBlock2.battleTower.records[gSaveBlock2.battleTower.battleTowerTrainerId - BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID].party[partyIndex]); - } - - return; - } - - // Use the appropriate list of pokemon and level depending on the - // current challenge type. (level 50 or level 100 challenge) - if (gSaveBlock2.battleTower.battleTowerLevelType != 0) - { - battleTowerMons = gBattleTowerLevel100Mons; - level = 100; - } - else - { - battleTowerMons = gBattleTowerLevel50Mons; - level = 50; - } - - teamFlags = gBattleTowerTrainers[gSaveBlock2.battleTower.battleTowerTrainerId].teamFlags; - - // Attempt to fill the trainer's party with random Pokemon until 3 have been - // successfully chosen. The trainer's party may not have duplicate pokemon species - // or duplicate held items. Each pokemon must have all of the trainer's team flags - // set, as well. If any of those conditions are not met, then the loop starts over - // and another pokemon is chosen at random. - partyIndex = 0; - while (partyIndex != 3) - { - // Pick a random pokemon index based on the number of pokemon available to choose from - // and the starting offset in the battle tower pokemon array. - s32 battleMonIndex = ((Random() & 0xFF) * monPoolSize) / 256 + battleMonsOffset; - - // Ensure the chosen pokemon has compatible team flags with the trainer. - if (teamFlags == 0 || (battleTowerMons[battleMonIndex].teamFlags & teamFlags) == teamFlags) - { - // Ensure this pokemon species isn't a duplicate. - for (i = 0; i < partyIndex; i++) - { - if (GetMonData(&gEnemyParty[i], MON_DATA_SPECIES, NULL) == battleTowerMons[battleMonIndex].species) - break; - } - - if (i != partyIndex) - continue; - - // Ensure this pokemon's held item isn't a duplicate. - for (i = 0; i < partyIndex; i++) - { - if (GetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, NULL) != 0 - && GetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, NULL) == sBattleTowerHeldItems[battleTowerMons[battleMonIndex].heldItem]) - { - break; - } - } - - if (i != partyIndex) - continue; - - // Ensure this exact pokemon index isn't a duplicate. This check doesn't seem necessary - // because the species and held items were already checked directly above. Perhaps this - // is leftover code before the logic for duplicate species and held items was added. - for (i = 0; i < partyIndex && chosenMonIndices[i] != battleMonIndex; i++); - - if (i != partyIndex) - continue; - - chosenMonIndices[partyIndex] = battleMonIndex; - - // Place the chosen pokemon into the trainer's party. - CreateMonWithEVSpread( - &gEnemyParty[partyIndex], - battleTowerMons[battleMonIndex].species, - level, - fixedIV, - battleTowerMons[battleMonIndex].evSpread); - - // Give the chosen pokemon its specified moves. - for (i = 0; i < 4; i++) - { - SetMonMoveSlot(&gEnemyParty[partyIndex], battleTowerMons[battleMonIndex].moves[i], i); - if (battleTowerMons[battleMonIndex].moves[i] == MOVE_FRUSTRATION) - { - // MOVE_FRUSTRATION is more powerful the lower the pokemon's friendship is. - friendship = 0; - } - } - - SetMonData(&gEnemyParty[partyIndex], MON_DATA_FRIENDSHIP, &friendship); - SetMonData(&gEnemyParty[partyIndex], MON_DATA_HELD_ITEM, &sBattleTowerHeldItems[battleTowerMons[battleMonIndex].heldItem]); - - // The pokemon was successfully added to the trainer's party, so it's safe to move on to - // the next party slot. - partyIndex++; - } - } + s32 partyIndex, i; + u16 chosenMonIndices[3]; + u8 friendship; + u8 level; + u8 fixedIV; + u8 battleMonsOffset; + u8 monPoolSize; + u8 teamFlags; + const struct BattleTowerPokemon *battleTowerMons; + + battleMonsOffset = 0; + monPoolSize = 60; + friendship = 255; + + ZeroEnemyPartyMons(); + + // Different trainers have access to different sets of pokemon to use in battle. + // The pokemon later in gBattleTowerLevel100Mons or gBattleTowerLevel50Mons are + // stronger. Additionally, the later trainers' pokemon are granted higher IVs. + if (gSaveBlock2.battleTower.battleTowerTrainerId < 20) + { + fixedIV = 6; + } + else if (gSaveBlock2.battleTower.battleTowerTrainerId < 30) + { + fixedIV = 9; + battleMonsOffset = 30; + } + else if (gSaveBlock2.battleTower.battleTowerTrainerId < 40) + { + fixedIV = 12; + battleMonsOffset = 60; + } + else if (gSaveBlock2.battleTower.battleTowerTrainerId < 50) + { + fixedIV = 15; + battleMonsOffset = 90; + } + else if (gSaveBlock2.battleTower.battleTowerTrainerId < 60) + { + fixedIV = 18; + battleMonsOffset = 120; + } + else if (gSaveBlock2.battleTower.battleTowerTrainerId < 70) + { + fixedIV = 21; + battleMonsOffset = 150; + } + else if (gSaveBlock2.battleTower.battleTowerTrainerId < 80) + { + fixedIV = 31; + battleMonsOffset = 180; + } + else if (gSaveBlock2.battleTower.battleTowerTrainerId < BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID) + { + fixedIV = 31; + battleMonsOffset = 200; + monPoolSize = 100; + } + else if (gSaveBlock2.battleTower.battleTowerTrainerId == BATTLE_TOWER_EREADER_TRAINER_ID) + { + // Load E-Reader trainer's party. + for (partyIndex = 0; partyIndex < 3; partyIndex++) + { + sub_803ADE8(&gEnemyParty[partyIndex], &gSaveBlock2.battleTower.ereaderTrainer.party[partyIndex]); + } + + return; + } + else + { + // Load a battle tower record's party. (From record mixing) + for (partyIndex = 0; partyIndex < 3; partyIndex++) + { + sub_803ADE8( + &gEnemyParty[partyIndex], + &gSaveBlock2.battleTower.records[gSaveBlock2.battleTower.battleTowerTrainerId - BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID].party[partyIndex]); + } + + return; + } + + // Use the appropriate list of pokemon and level depending on the + // current challenge type. (level 50 or level 100 challenge) + if (gSaveBlock2.battleTower.battleTowerLevelType != 0) + { + battleTowerMons = gBattleTowerLevel100Mons; + level = 100; + } + else + { + battleTowerMons = gBattleTowerLevel50Mons; + level = 50; + } + + teamFlags = gBattleTowerTrainers[gSaveBlock2.battleTower.battleTowerTrainerId].teamFlags; + // Attempt to fill the trainer's party with random Pokemon until 3 have been + // successfully chosen. The trainer's party may not have duplicate pokemon species + // or duplicate held items. Each pokemon must have all of the trainer's team flags + // set, as well. If any of those conditions are not met, then the loop starts over + // and another pokemon is chosen at random. + partyIndex = 0; + while (partyIndex != 3) + { + // Pick a random pokemon index based on the number of pokemon available to choose from + // and the starting offset in the battle tower pokemon array. + s32 battleMonIndex = ((Random() & 0xFF) * monPoolSize) / 256 + battleMonsOffset; + + // Ensure the chosen pokemon has compatible team flags with the trainer. + if (teamFlags == 0 || (battleTowerMons[battleMonIndex].teamFlags & teamFlags) == teamFlags) + { + // Ensure this pokemon species isn't a duplicate. + for (i = 0; i < partyIndex; i++) + { + if (GetMonData(&gEnemyParty[i], MON_DATA_SPECIES, NULL) == battleTowerMons[battleMonIndex].species) + break; + } + + if (i != partyIndex) + continue; + + // Ensure this pokemon's held item isn't a duplicate. + for (i = 0; i < partyIndex; i++) + { + if (GetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, NULL) != 0 + && GetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, NULL) == sBattleTowerHeldItems[battleTowerMons[battleMonIndex].heldItem]) + { + break; + } + } + + if (i != partyIndex) + continue; + + // Ensure this exact pokemon index isn't a duplicate. This check doesn't seem necessary + // because the species and held items were already checked directly above. Perhaps this + // is leftover code before the logic for duplicate species and held items was added. + for (i = 0; i < partyIndex && chosenMonIndices[i] != battleMonIndex; i++); + + if (i != partyIndex) + continue; + + chosenMonIndices[partyIndex] = battleMonIndex; + + // Place the chosen pokemon into the trainer's party. + CreateMonWithEVSpread( + &gEnemyParty[partyIndex], + battleTowerMons[battleMonIndex].species, + level, + fixedIV, + battleTowerMons[battleMonIndex].evSpread); + + // Give the chosen pokemon its specified moves. + for (i = 0; i < 4; i++) + { + SetMonMoveSlot(&gEnemyParty[partyIndex], battleTowerMons[battleMonIndex].moves[i], i); + if (battleTowerMons[battleMonIndex].moves[i] == MOVE_FRUSTRATION) + { + // MOVE_FRUSTRATION is more powerful the lower the pokemon's friendship is. + friendship = 0; + } + } + + SetMonData(&gEnemyParty[partyIndex], MON_DATA_FRIENDSHIP, &friendship); + SetMonData(&gEnemyParty[partyIndex], MON_DATA_HELD_ITEM, &sBattleTowerHeldItems[battleTowerMons[battleMonIndex].heldItem]); + + // The pokemon was successfully added to the trainer's party, so it's safe to move on to + // the next party slot. + partyIndex++; + } + } } u32 CountBattleTowerBanlistCaught(void) { - s32 i; - u32 numCaught = 0; - - for (i = 0; gBattleTowerBannedSpecies[i] != 0xFFFF; i++) - { - if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(gBattleTowerBannedSpecies[i]), FLAG_GET_CAUGHT)) - { - numCaught++; - } - } - - return numCaught; + s32 i; + u32 numCaught = 0; + + for (i = 0; gBattleTowerBannedSpecies[i] != 0xFFFF; i++) + { + if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(gBattleTowerBannedSpecies[i]), FLAG_GET_CAUGHT)) + { + numCaught++; + } + } + + return numCaught; } u8 AppendBattleTowerBannedSpeciesName(u16 species, u8 curIndexToAppend, s32 numToAppend) { - if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(species), FLAG_GET_CAUGHT)) - { - curIndexToAppend++; - - switch (curIndexToAppend - 1) - { - case 0: - case 2: - case 4: - case 6: - case 8: - case 10: - if (numToAppend == curIndexToAppend) - { - StringAppend(gStringVar1, gUnknown_08400E23); - } - else if (numToAppend > curIndexToAppend) - { - StringAppend(gStringVar1, gUnknown_08400E29); - } - break; - case 1: - if (curIndexToAppend == numToAppend) - { - StringAppend(gStringVar1, gUnknown_08400E23); - } - else - { - StringAppend(gStringVar1, gUnknown_08400E29); - } - - StringAppend(gStringVar1, gUnknown_08400E30); - break; - case 3: - case 5: - case 7: - case 9: - default: - if (curIndexToAppend == numToAppend) - { - StringAppend(gStringVar1, gUnknown_08400E23); - } - else - { - StringAppend(gStringVar1, gUnknown_08400E29); - } - - StringAppend(gStringVar1, gUnknown_08400E2E); - break; - } - - StringAppend(gStringVar1, gSpeciesNames[species]); - } - - return curIndexToAppend; + if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(species), FLAG_GET_CAUGHT)) + { + curIndexToAppend++; + + switch (curIndexToAppend - 1) + { + case 0: + case 2: + case 4: + case 6: + case 8: + case 10: + if (numToAppend == curIndexToAppend) + { + StringAppend(gStringVar1, gUnknown_08400E23); + } + else if (numToAppend > curIndexToAppend) + { + StringAppend(gStringVar1, gUnknown_08400E29); + } + break; + case 1: + if (curIndexToAppend == numToAppend) + { + StringAppend(gStringVar1, gUnknown_08400E23); + } + else + { + StringAppend(gStringVar1, gUnknown_08400E29); + } + + StringAppend(gStringVar1, gUnknown_08400E30); + break; + case 3: + case 5: + case 7: + case 9: + default: + if (curIndexToAppend == numToAppend) + { + StringAppend(gStringVar1, gUnknown_08400E23); + } + else + { + StringAppend(gStringVar1, gUnknown_08400E29); + } + + StringAppend(gStringVar1, gUnknown_08400E2E); + break; + } + + StringAppend(gStringVar1, gSpeciesNames[species]); + } + + return curIndexToAppend; } void CheckMonBattleTowerBanlist(u16 species, u16 heldItem, u16 hp, u8 battleTowerLevelType, u8 monLevel, u16 *validPartySpecies, u16 *validPartyHeldItems, u8 *numValid) { - s32 i; - u32 counter = 0; + s32 i; + u32 counter = 0; - if (species == SPECIES_EGG || species == SPECIES_NONE) - return; + if (species == SPECIES_EGG || species == SPECIES_NONE) + return; - while (1) - { - if (gBattleTowerBannedSpecies[counter] == 0xFFFF) - goto EXIT2; // Couldn't get the code to match without this GOTO + while (1) + { + if (gBattleTowerBannedSpecies[counter] == 0xFFFF) + goto EXIT2; // Couldn't get the code to match without this GOTO - if (gBattleTowerBannedSpecies[counter] == species) - break; + if (gBattleTowerBannedSpecies[counter] == species) + break; - counter++; - } + counter++; + } - if (gBattleTowerBannedSpecies[counter] != 0xFFFF) - return; + if (gBattleTowerBannedSpecies[counter] != 0xFFFF) + return; - EXIT2: - if (battleTowerLevelType == 0 && monLevel > 50) - return; + EXIT2: + if (battleTowerLevelType == 0 && monLevel > 50) + return; - for (i = 0; i < *numValid && validPartySpecies[i] != species ; i++); - if (i != *numValid) - return; + for (i = 0; i < *numValid && validPartySpecies[i] != species ; i++); + if (i != *numValid) + return; - if (heldItem != 0) - { - for (i = 0; i < *numValid && validPartyHeldItems[i] != heldItem ; i++); - if (i != *numValid) - return; - } + if (heldItem != 0) + { + for (i = 0; i < *numValid && validPartyHeldItems[i] != heldItem ; i++); + if (i != *numValid) + return; + } - validPartySpecies[*numValid] = species; - validPartyHeldItems[*numValid] = heldItem; - *numValid = *numValid + 1; + validPartySpecies[*numValid] = species; + validPartyHeldItems[*numValid] = heldItem; + *numValid = *numValid + 1; } void CheckPartyBattleTowerBanlist(void) { - s32 i; - u16 species2; - u16 heldItem; - u8 level; - u16 hp; - u32 numBanlistCaught; - u16 validPartySpecies[6]; - u16 validPartyHeldItems[6]; - u8 counter; - - counter = 0; - - for (i = 0; i < PARTY_SIZE; i++) - { - species2 = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2); - heldItem = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM); - level = GetMonData(&gPlayerParty[i], MON_DATA_LEVEL); - hp = GetMonData(&gPlayerParty[i], MON_DATA_HP); - - CheckMonBattleTowerBanlist(species2, heldItem, hp, gScriptResult, level, validPartySpecies, validPartyHeldItems, &counter); - } - - if (counter < 3) - { - gStringVar1[0] = 0xFF; - gSpecialVar_0x8004 = 1; - counter = 0; - - numBanlistCaught = CountBattleTowerBanlistCaught(); - - for (i = 0; gBattleTowerBannedSpecies[i] != 0xFFFF; i++) - { - counter = AppendBattleTowerBannedSpeciesName(gBattleTowerBannedSpecies[i], counter, numBanlistCaught); - } - - if (counter == 0) - { - StringAppend(gStringVar1, gUnknown_08400E2C); - StringAppend(gStringVar1, gUnknown_08400E32); - return; - } - - if (1 & counter) - StringAppend(gStringVar1, gUnknown_08400E2E); - else - StringAppend(gStringVar1, gUnknown_08400E2C); - - StringAppend(gStringVar1, gUnknown_08400E36); - } - else - { - gSpecialVar_0x8004 = 0; - gSaveBlock2.battleTower.battleTowerLevelType = gScriptResult; - } + s32 i; + u16 species2; + u16 heldItem; + u8 level; + u16 hp; + u32 numBanlistCaught; + u16 validPartySpecies[6]; + u16 validPartyHeldItems[6]; + u8 counter; + + counter = 0; + + for (i = 0; i < PARTY_SIZE; i++) + { + species2 = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2); + heldItem = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM); + level = GetMonData(&gPlayerParty[i], MON_DATA_LEVEL); + hp = GetMonData(&gPlayerParty[i], MON_DATA_HP); + + CheckMonBattleTowerBanlist(species2, heldItem, hp, gScriptResult, level, validPartySpecies, validPartyHeldItems, &counter); + } + + if (counter < 3) + { + gStringVar1[0] = 0xFF; + gSpecialVar_0x8004 = 1; + counter = 0; + + numBanlistCaught = CountBattleTowerBanlistCaught(); + + for (i = 0; gBattleTowerBannedSpecies[i] != 0xFFFF; i++) + { + counter = AppendBattleTowerBannedSpeciesName(gBattleTowerBannedSpecies[i], counter, numBanlistCaught); + } + + if (counter == 0) + { + StringAppend(gStringVar1, gUnknown_08400E2C); + StringAppend(gStringVar1, gUnknown_08400E32); + return; + } + + if (1 & counter) + StringAppend(gStringVar1, gUnknown_08400E2E); + else + StringAppend(gStringVar1, gUnknown_08400E2C); + + StringAppend(gStringVar1, gUnknown_08400E36); + } + else + { + gSpecialVar_0x8004 = 0; + gSaveBlock2.battleTower.battleTowerLevelType = gScriptResult; + } } void PrintBattleTowerTrainerMessage(u16 *easyChat) { - sub_80EB544(gStringVar4, easyChat, 2, 3); + sub_80EB544(gStringVar4, easyChat, 2, 3); } void PrintBattleTowerTrainerGreeting(void) { - if (gSaveBlock2.battleTower.battleTowerTrainerId == BATTLE_TOWER_EREADER_TRAINER_ID) - { - PrintBattleTowerTrainerMessage(gSaveBlock2.battleTower.ereaderTrainer.greeting.easyChat); - } - else if (gSaveBlock2.battleTower.battleTowerTrainerId < BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID) - { - PrintBattleTowerTrainerMessage((u16 *)gBattleTowerTrainers[gSaveBlock2.battleTower.battleTowerTrainerId].greeting.easyChat); - } - else - { - PrintBattleTowerTrainerMessage(gSaveBlock2.battleTower.records[gSaveBlock2.battleTower.battleTowerTrainerId - BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID].greeting.easyChat); - } + if (gSaveBlock2.battleTower.battleTowerTrainerId == BATTLE_TOWER_EREADER_TRAINER_ID) + { + PrintBattleTowerTrainerMessage(gSaveBlock2.battleTower.ereaderTrainer.greeting.easyChat); + } + else if (gSaveBlock2.battleTower.battleTowerTrainerId < BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID) + { + PrintBattleTowerTrainerMessage((u16 *)gBattleTowerTrainers[gSaveBlock2.battleTower.battleTowerTrainerId].greeting.easyChat); + } + else + { + PrintBattleTowerTrainerMessage(gSaveBlock2.battleTower.records[gSaveBlock2.battleTower.battleTowerTrainerId - BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID].greeting.easyChat); + } } void sub_81354CC(void) { - s32 i; - u16 heldItem; - - switch (gSpecialVar_0x8004) - { - case 0: - break; - case 1: - for (i = 0; i < PARTY_SIZE; i++) - { - heldItem = GetMonData(&gSaveBlock1.playerParty[i], MON_DATA_HELD_ITEM); - SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, &heldItem); - } - break; - case 2: - PrintEReaderTrainerFarewellMessage(); - break; - } - - SetMainCallback2(c2_exit_to_overworld_1_continue_scripts_restart_music); + s32 i; + u16 heldItem; + + switch (gSpecialVar_0x8004) + { + case 0: + break; + case 1: + for (i = 0; i < PARTY_SIZE; i++) + { + heldItem = GetMonData(&gSaveBlock1.playerParty[i], MON_DATA_HELD_ITEM); + SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, &heldItem); + } + break; + case 2: + PrintEReaderTrainerFarewellMessage(); + break; + } + + SetMainCallback2(c2_exit_to_overworld_1_continue_scripts_restart_music); } void sub_8135534(u8 taskId) { - if (IsBattleTransitionDone() == TRUE) - { - gMain.savedCallback = sub_81354CC; - SetMainCallback2(sub_800E7C4); - DestroyTask(taskId); - } + if (IsBattleTransitionDone() == TRUE) + { + gMain.savedCallback = sub_81354CC; + SetMainCallback2(sub_800E7C4); + DestroyTask(taskId); + } } void sub_813556C(void) { - s32 i; - u16 heldItem; - u8 transition; - - switch (gSpecialVar_0x8004) - { - case 0: - gBattleTypeFlags = (BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_TRAINER); - gTrainerBattleOpponent = 0; - - FillBattleTowerTrainerParty(); - - CreateTask(sub_8135534, 1); - current_map_music_set__default_for_battle(0); - transition = BattleSetup_GetBattleTowerBattleTransition(); - BattleTransition_StartOnField(transition); - break; - case 1: - for (i = 0; i < PARTY_SIZE; i++) - { - heldItem = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM); - SetMonData(&gSaveBlock1.playerParty[i], MON_DATA_HELD_ITEM, &heldItem); - } - - CreateTask(sub_8135534, 1); - current_map_music_set__default_for_battle(0); - transition = BattleSetup_GetBattleTowerBattleTransition(); - BattleTransition_StartOnField(transition); - break; - case 2: - ZeroEnemyPartyMons(); - - for (i = 0; i < 3; i++) - { - sub_803ADE8(&gEnemyParty[i], &gSaveBlock2.battleTower.ereaderTrainer.party[i]); - } - - gBattleTypeFlags = (BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_TRAINER); - gTrainerBattleOpponent = 0; - - CreateTask(sub_8135534, 1); - current_map_music_set__default_for_battle(0); - transition = BattleSetup_GetBattleTowerBattleTransition(); - BattleTransition_StartOnField(transition); - break; - } + s32 i; + u16 heldItem; + u8 transition; + + switch (gSpecialVar_0x8004) + { + case 0: + gBattleTypeFlags = (BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_TRAINER); + gTrainerBattleOpponent = 0; + + FillBattleTowerTrainerParty(); + + CreateTask(sub_8135534, 1); + current_map_music_set__default_for_battle(0); + transition = BattleSetup_GetBattleTowerBattleTransition(); + BattleTransition_StartOnField(transition); + break; + case 1: + for (i = 0; i < PARTY_SIZE; i++) + { + heldItem = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM); + SetMonData(&gSaveBlock1.playerParty[i], MON_DATA_HELD_ITEM, &heldItem); + } + + CreateTask(sub_8135534, 1); + current_map_music_set__default_for_battle(0); + transition = BattleSetup_GetBattleTowerBattleTransition(); + BattleTransition_StartOnField(transition); + break; + case 2: + ZeroEnemyPartyMons(); + + for (i = 0; i < 3; i++) + { + sub_803ADE8(&gEnemyParty[i], &gSaveBlock2.battleTower.ereaderTrainer.party[i]); + } + + gBattleTypeFlags = (BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_TRAINER); + gTrainerBattleOpponent = 0; + + CreateTask(sub_8135534, 1); + current_map_music_set__default_for_battle(0); + transition = BattleSetup_GetBattleTowerBattleTransition(); + BattleTransition_StartOnField(transition); + break; + } } void sub_8135668(void) { - s32 i; - u8 battleTowerLevelType = gSaveBlock2.battleTower.battleTowerLevelType; - - switch (gSpecialVar_0x8004) - { - case 0: - ewram160FB = gSaveBlock2.battleTower.var_4AE[battleTowerLevelType]; - gSaveBlock2.battleTower.var_4AE[battleTowerLevelType] = gSpecialVar_0x8005; - break; - case 1: - gSaveBlock2.battleTower.battleTowerLevelType = gSpecialVar_0x8005; - break; - case 2: - gSaveBlock2.battleTower.curChallengeBattleNum[battleTowerLevelType] = gSpecialVar_0x8005; - break; - case 3: - gSaveBlock2.battleTower.curStreakChallengesNum[battleTowerLevelType] = gSpecialVar_0x8005; - break; - case 4: - gSaveBlock2.battleTower.battleTowerTrainerId = gSpecialVar_0x8005; - break; - case 5: - for (i = 0; i < 3; i++) - { - gSaveBlock2.battleTower.selectedPartyMons[i] = gSelectedOrderFromParty[i]; - } - break; - case 6: - if (gSaveBlock2.battleTower.battleTowerTrainerId == BATTLE_TOWER_EREADER_TRAINER_ID) - { - ClearEReaderTrainer(&gSaveBlock2.battleTower.ereaderTrainer); - } - - if (gSaveBlock2.battleTower.totalBattleTowerWins < 9999) - { - gSaveBlock2.battleTower.totalBattleTowerWins++; - } - - gSaveBlock2.battleTower.curChallengeBattleNum[battleTowerLevelType]++; - sub_8135A3C(); - gScriptResult = gSaveBlock2.battleTower.curChallengeBattleNum[battleTowerLevelType]; - - gStringVar1[0] = gSaveBlock2.battleTower.curChallengeBattleNum[battleTowerLevelType] + 0xA1; - gStringVar1[1] = 0xFF; - break; - case 7: - if (gSaveBlock2.battleTower.curStreakChallengesNum[battleTowerLevelType] < 1430) - { - gSaveBlock2.battleTower.curStreakChallengesNum[battleTowerLevelType]++; - } - - sub_8135A3C(); - gScriptResult = gSaveBlock2.battleTower.curStreakChallengesNum[battleTowerLevelType]; - break; - case 8: - gSaveBlock2.battleTower.unk_554 = gSpecialVar_0x8005; - break; - case 9: - break; - case 10: - SetGameStat(GAME_STAT_BATTLE_TOWER_BEST_STREAK, gSaveBlock2.battleTower.bestBattleTowerWinStreak); - break; - case 11: - if (gSaveBlock2.battleTower.var_4AE[battleTowerLevelType] != 3) - { - ResetBattleTowerStreak(battleTowerLevelType); - } - break; - case 12: - gSaveBlock2.battleTower.var_4AE[battleTowerLevelType] = ewram160FB; - break; - case 13: - gSaveBlock2.battleTower.currentWinStreaks[battleTowerLevelType] = GetCurrentBattleTowerWinStreak(battleTowerLevelType); - break; - case 14: - gSaveBlock2.battleTower.lastStreakLevelType = gSaveBlock2.battleTower.battleTowerLevelType; - break; - } + s32 i; + u8 battleTowerLevelType = gSaveBlock2.battleTower.battleTowerLevelType; + + switch (gSpecialVar_0x8004) + { + case 0: + ewram160FB = gSaveBlock2.battleTower.var_4AE[battleTowerLevelType]; + gSaveBlock2.battleTower.var_4AE[battleTowerLevelType] = gSpecialVar_0x8005; + break; + case 1: + gSaveBlock2.battleTower.battleTowerLevelType = gSpecialVar_0x8005; + break; + case 2: + gSaveBlock2.battleTower.curChallengeBattleNum[battleTowerLevelType] = gSpecialVar_0x8005; + break; + case 3: + gSaveBlock2.battleTower.curStreakChallengesNum[battleTowerLevelType] = gSpecialVar_0x8005; + break; + case 4: + gSaveBlock2.battleTower.battleTowerTrainerId = gSpecialVar_0x8005; + break; + case 5: + for (i = 0; i < 3; i++) + { + gSaveBlock2.battleTower.selectedPartyMons[i] = gSelectedOrderFromParty[i]; + } + break; + case 6: + if (gSaveBlock2.battleTower.battleTowerTrainerId == BATTLE_TOWER_EREADER_TRAINER_ID) + { + ClearEReaderTrainer(&gSaveBlock2.battleTower.ereaderTrainer); + } + + if (gSaveBlock2.battleTower.totalBattleTowerWins < 9999) + { + gSaveBlock2.battleTower.totalBattleTowerWins++; + } + + gSaveBlock2.battleTower.curChallengeBattleNum[battleTowerLevelType]++; + sub_8135A3C(); + gScriptResult = gSaveBlock2.battleTower.curChallengeBattleNum[battleTowerLevelType]; + + gStringVar1[0] = gSaveBlock2.battleTower.curChallengeBattleNum[battleTowerLevelType] + 0xA1; + gStringVar1[1] = 0xFF; + break; + case 7: + if (gSaveBlock2.battleTower.curStreakChallengesNum[battleTowerLevelType] < 1430) + { + gSaveBlock2.battleTower.curStreakChallengesNum[battleTowerLevelType]++; + } + + sub_8135A3C(); + gScriptResult = gSaveBlock2.battleTower.curStreakChallengesNum[battleTowerLevelType]; + break; + case 8: + gSaveBlock2.battleTower.unk_554 = gSpecialVar_0x8005; + break; + case 9: + break; + case 10: + SetGameStat(GAME_STAT_BATTLE_TOWER_BEST_STREAK, gSaveBlock2.battleTower.bestBattleTowerWinStreak); + break; + case 11: + if (gSaveBlock2.battleTower.var_4AE[battleTowerLevelType] != 3) + { + ResetBattleTowerStreak(battleTowerLevelType); + } + break; + case 12: + gSaveBlock2.battleTower.var_4AE[battleTowerLevelType] = ewram160FB; + break; + case 13: + gSaveBlock2.battleTower.currentWinStreaks[battleTowerLevelType] = GetCurrentBattleTowerWinStreak(battleTowerLevelType); + break; + case 14: + gSaveBlock2.battleTower.lastStreakLevelType = gSaveBlock2.battleTower.battleTowerLevelType; + break; + } } void sub_81358A4(void) { - u8 battleTowerLevelType = gSaveBlock2.battleTower.battleTowerLevelType; - - switch (gSpecialVar_0x8004) - { - case 0: - gScriptResult = gSaveBlock2.battleTower.var_4AE[battleTowerLevelType]; - break; - case 1: - gScriptResult = gSaveBlock2.battleTower.battleTowerLevelType; - break; - case 2: - gScriptResult = gSaveBlock2.battleTower.curChallengeBattleNum[battleTowerLevelType]; - break; - case 3: - gScriptResult = gSaveBlock2.battleTower.curStreakChallengesNum[battleTowerLevelType]; - break; - case 4: - gScriptResult = gSaveBlock2.battleTower.battleTowerTrainerId; - break; - case 5: - case 6: - case 7: - break; - case 8: - gScriptResult = gSaveBlock2.battleTower.unk_554; - break; - case 9: - gScriptResult = GetCurrentBattleTowerWinStreak(battleTowerLevelType); - break; - case 10: - SetGameStat(GAME_STAT_BATTLE_TOWER_BEST_STREAK, gSaveBlock2.battleTower.bestBattleTowerWinStreak); - break; - case 11: - ResetBattleTowerStreak(battleTowerLevelType); - break; - case 12: - gSaveBlock2.battleTower.var_4AE[battleTowerLevelType] = ewram160FB; - break; - case 13: - gSaveBlock2.battleTower.currentWinStreaks[battleTowerLevelType] = GetCurrentBattleTowerWinStreak(battleTowerLevelType); - break; - case 14: - gSaveBlock2.battleTower.lastStreakLevelType = gSaveBlock2.battleTower.battleTowerLevelType; - break; - } + u8 battleTowerLevelType = gSaveBlock2.battleTower.battleTowerLevelType; + + switch (gSpecialVar_0x8004) + { + case 0: + gScriptResult = gSaveBlock2.battleTower.var_4AE[battleTowerLevelType]; + break; + case 1: + gScriptResult = gSaveBlock2.battleTower.battleTowerLevelType; + break; + case 2: + gScriptResult = gSaveBlock2.battleTower.curChallengeBattleNum[battleTowerLevelType]; + break; + case 3: + gScriptResult = gSaveBlock2.battleTower.curStreakChallengesNum[battleTowerLevelType]; + break; + case 4: + gScriptResult = gSaveBlock2.battleTower.battleTowerTrainerId; + break; + case 5: + case 6: + case 7: + break; + case 8: + gScriptResult = gSaveBlock2.battleTower.unk_554; + break; + case 9: + gScriptResult = GetCurrentBattleTowerWinStreak(battleTowerLevelType); + break; + case 10: + SetGameStat(GAME_STAT_BATTLE_TOWER_BEST_STREAK, gSaveBlock2.battleTower.bestBattleTowerWinStreak); + break; + case 11: + ResetBattleTowerStreak(battleTowerLevelType); + break; + case 12: + gSaveBlock2.battleTower.var_4AE[battleTowerLevelType] = ewram160FB; + break; + case 13: + gSaveBlock2.battleTower.currentWinStreaks[battleTowerLevelType] = GetCurrentBattleTowerWinStreak(battleTowerLevelType); + break; + case 14: + gSaveBlock2.battleTower.lastStreakLevelType = gSaveBlock2.battleTower.battleTowerLevelType; + break; + } } void sub_8135A14(void) { - s32 i; + s32 i; - for (i = 0; i < 3; i++) - { - gSelectedOrderFromParty[i] = gSaveBlock2.battleTower.selectedPartyMons[i]; - } + for (i = 0; i < 3; i++) + { + gSelectedOrderFromParty[i] = gSaveBlock2.battleTower.selectedPartyMons[i]; + } - ReducePlayerPartyToThree(); + ReducePlayerPartyToThree(); } #ifdef NONMATCHING void sub_8135A3C(void) { - u8 battleTowerLevelType = gSaveBlock2.battleTower.battleTowerLevelType; - u16 winStreak = GetCurrentBattleTowerWinStreak(battleTowerLevelType); - - if (gSaveBlock2.battleTower.recordWinStreaks[battleTowerLevelType] < winStreak) - { - gSaveBlock2.battleTower.recordWinStreaks[battleTowerLevelType] = winStreak; - } - - if (gSaveBlock2.battleTower.recordWinStreaks[0] > gSaveBlock2.battleTower.recordWinStreaks[1]) - { - u16 streak = gSaveBlock2.battleTower.recordWinStreaks[0]; - SetGameStat(GAME_STAT_BATTLE_TOWER_BEST_STREAK, streak); - if (streak > 9999) - { - gSaveBlock2.battleTower.bestBattleTowerWinStreak = 9999; - } - else - { - gSaveBlock2.battleTower.bestBattleTowerWinStreak = streak; - } - } - else - { - u16 streak = gSaveBlock2.battleTower.recordWinStreaks[1]; - SetGameStat(GAME_STAT_BATTLE_TOWER_BEST_STREAK, streak); - if (streak > 9999) - { - gSaveBlock2.battleTower.bestBattleTowerWinStreak = 9999; - } - else - { - gSaveBlock2.battleTower.bestBattleTowerWinStreak = streak; - } - } + u8 battleTowerLevelType = gSaveBlock2.battleTower.battleTowerLevelType; + u16 winStreak = GetCurrentBattleTowerWinStreak(battleTowerLevelType); + + if (gSaveBlock2.battleTower.recordWinStreaks[battleTowerLevelType] < winStreak) + { + gSaveBlock2.battleTower.recordWinStreaks[battleTowerLevelType] = winStreak; + } + + if (gSaveBlock2.battleTower.recordWinStreaks[0] > gSaveBlock2.battleTower.recordWinStreaks[1]) + { + u16 streak = gSaveBlock2.battleTower.recordWinStreaks[0]; + SetGameStat(GAME_STAT_BATTLE_TOWER_BEST_STREAK, streak); + if (streak > 9999) + { + gSaveBlock2.battleTower.bestBattleTowerWinStreak = 9999; + } + else + { + gSaveBlock2.battleTower.bestBattleTowerWinStreak = streak; + } + } + else + { + u16 streak = gSaveBlock2.battleTower.recordWinStreaks[1]; + SetGameStat(GAME_STAT_BATTLE_TOWER_BEST_STREAK, streak); + if (streak > 9999) + { + gSaveBlock2.battleTower.bestBattleTowerWinStreak = 9999; + } + else + { + gSaveBlock2.battleTower.bestBattleTowerWinStreak = streak; + } + } } #else __attribute__((naked)) @@ -1916,156 +1915,156 @@ _08135AC0: .4byte 0x00000572\n\ void sub_8135AC4(void) { - s32 i; - u8 trainerClass; - struct BattleTowerRecord *playerRecord = &gSaveBlock2.battleTower.playerRecord; - u8 battleTowerLevelType = gSaveBlock2.battleTower.battleTowerLevelType; - - if (gSaveBlock2.playerGender != MALE) - { - trainerClass = sFemaleTrainerClasses[(gSaveBlock2.playerTrainerId[0] + gSaveBlock2.playerTrainerId[1] - + gSaveBlock2.playerTrainerId[2] + gSaveBlock2.playerTrainerId[3]) % 20u]; - } - else - { - trainerClass = sMaleTrainerClasses[(gSaveBlock2.playerTrainerId[0] + gSaveBlock2.playerTrainerId[1] - + gSaveBlock2.playerTrainerId[2] + gSaveBlock2.playerTrainerId[3]) % 30u]; - } - - playerRecord->battleTowerLevelType = battleTowerLevelType; - playerRecord->trainerClass = trainerClass; - - copy_word_to_mem(playerRecord->trainerId, gSaveBlock2.playerTrainerId); - StringCopy8(playerRecord->name, gSaveBlock2.playerName); - - playerRecord->winStreak = GetCurrentBattleTowerWinStreak(battleTowerLevelType); - - for (i = 0; i < 6; i++) - { - playerRecord->greeting.easyChat[i] = gSaveBlock1.easyChats.unk2B28[i]; - } - - for (i = 0; i < 3; i++) - { - sub_803AF78(&gUnknown_030042FC[gSaveBlock2.battleTower.selectedPartyMons[i]], &playerRecord->party[i]); - } - - SetBattleTowerRecordChecksum(&gSaveBlock2.battleTower.playerRecord); - sub_8135A3C(); + s32 i; + u8 trainerClass; + struct BattleTowerRecord *playerRecord = &gSaveBlock2.battleTower.playerRecord; + u8 battleTowerLevelType = gSaveBlock2.battleTower.battleTowerLevelType; + + if (gSaveBlock2.playerGender != MALE) + { + trainerClass = sFemaleTrainerClasses[(gSaveBlock2.playerTrainerId[0] + gSaveBlock2.playerTrainerId[1] + + gSaveBlock2.playerTrainerId[2] + gSaveBlock2.playerTrainerId[3]) % 20u]; + } + else + { + trainerClass = sMaleTrainerClasses[(gSaveBlock2.playerTrainerId[0] + gSaveBlock2.playerTrainerId[1] + + gSaveBlock2.playerTrainerId[2] + gSaveBlock2.playerTrainerId[3]) % 30u]; + } + + playerRecord->battleTowerLevelType = battleTowerLevelType; + playerRecord->trainerClass = trainerClass; + + copy_word_to_mem(playerRecord->trainerId, gSaveBlock2.playerTrainerId); + StringCopy8(playerRecord->name, gSaveBlock2.playerName); + + playerRecord->winStreak = GetCurrentBattleTowerWinStreak(battleTowerLevelType); + + for (i = 0; i < 6; i++) + { + playerRecord->greeting.easyChat[i] = gSaveBlock1.easyChats.unk2B28[i]; + } + + for (i = 0; i < 3; i++) + { + sub_803AF78(&gUnknown_030042FC[gSaveBlock2.battleTower.selectedPartyMons[i]], &playerRecord->party[i]); + } + + SetBattleTowerRecordChecksum(&gSaveBlock2.battleTower.playerRecord); + sub_8135A3C(); } void sub_8135BA0(void) { - u8 battleTowerLevelType = gSaveBlock2.battleTower.battleTowerLevelType; + u8 battleTowerLevelType = gSaveBlock2.battleTower.battleTowerLevelType; - if (gSpecialVar_0x8004 == 3 || gSpecialVar_0x8004 == 0) - { - if (gSaveBlock2.battleTower.curStreakChallengesNum[battleTowerLevelType] > 1 - || gSaveBlock2.battleTower.curChallengeBattleNum[battleTowerLevelType] > 1) - { - sub_8135AC4(); - } - } + if (gSpecialVar_0x8004 == 3 || gSpecialVar_0x8004 == 0) + { + if (gSaveBlock2.battleTower.curStreakChallengesNum[battleTowerLevelType] > 1 + || gSaveBlock2.battleTower.curChallengeBattleNum[battleTowerLevelType] > 1) + { + sub_8135AC4(); + } + } - sub_8135CFC(); + sub_8135CFC(); - gSaveBlock2.battleTower.battleOutcome = gBattleOutcome; + gSaveBlock2.battleTower.battleOutcome = gBattleOutcome; - if (gSpecialVar_0x8004 != 3) - { - gSaveBlock2.battleTower.var_4AE[battleTowerLevelType] = gSpecialVar_0x8004; - } + if (gSpecialVar_0x8004 != 3) + { + gSaveBlock2.battleTower.var_4AE[battleTowerLevelType] = gSpecialVar_0x8004; + } - VarSet(VAR_0x4000, 0); - gSaveBlock2.battleTower.unk_554 = 1; - TrySavingData(EREADER_SAVE); + VarSet(VAR_0x4000, 0); + gSaveBlock2.battleTower.unk_554 = 1; + TrySavingData(EREADER_SAVE); } void BattleTower_SoftReset(void) { - DoSoftReset(); + DoSoftReset(); } void ValidateBattleTowerRecordChecksums(void) { - u32 i; - s32 recordIndex; - struct BattleTowerRecord *record; - u32 checksum; - - checksum = 0; - for (i = 0; i < (sizeof(struct BattleTowerRecord) / sizeof(u32)) - 1; i++) - { - checksum += ((u32 *)&gSaveBlock2.battleTower.playerRecord)[i]; - } - - if (gSaveBlock2.battleTower.playerRecord.checksum != checksum) - { - ClearBattleTowerRecord(&gSaveBlock2.battleTower.playerRecord); - } - - for (recordIndex = 0; recordIndex < 5; recordIndex++) - { - record = &gSaveBlock2.battleTower.records[recordIndex]; - checksum = 0; - for (i = 0; i < (sizeof(struct BattleTowerRecord) / sizeof(u32)) - 1; i++) - { - checksum += ((u32 *)record)[i]; - } - - if (gSaveBlock2.battleTower.records[recordIndex].checksum != checksum) - { - ClearBattleTowerRecord(&gSaveBlock2.battleTower.records[recordIndex]); - } - } + u32 i; + s32 recordIndex; + struct BattleTowerRecord *record; + u32 checksum; + + checksum = 0; + for (i = 0; i < (sizeof(struct BattleTowerRecord) / sizeof(u32)) - 1; i++) + { + checksum += ((u32 *)&gSaveBlock2.battleTower.playerRecord)[i]; + } + + if (gSaveBlock2.battleTower.playerRecord.checksum != checksum) + { + ClearBattleTowerRecord(&gSaveBlock2.battleTower.playerRecord); + } + + for (recordIndex = 0; recordIndex < 5; recordIndex++) + { + record = &gSaveBlock2.battleTower.records[recordIndex]; + checksum = 0; + for (i = 0; i < (sizeof(struct BattleTowerRecord) / sizeof(u32)) - 1; i++) + { + checksum += ((u32 *)record)[i]; + } + + if (gSaveBlock2.battleTower.records[recordIndex].checksum != checksum) + { + ClearBattleTowerRecord(&gSaveBlock2.battleTower.records[recordIndex]); + } + } } void SetBattleTowerRecordChecksum(struct BattleTowerRecord *record) { - u32 i; + u32 i; - record->checksum = 0; - for (i = 0; i < (sizeof(struct BattleTowerRecord) / sizeof(u32)) - 1; i++) - { - record->checksum += ((u32 *)record)[i]; - } + record->checksum = 0; + for (i = 0; i < (sizeof(struct BattleTowerRecord) / sizeof(u32)) - 1; i++) + { + record->checksum += ((u32 *)record)[i]; + } } void ClearBattleTowerRecord(struct BattleTowerRecord *record) { - u32 i; + u32 i; - for (i = 0; i < sizeof(struct BattleTowerRecord) / sizeof(u32); i++) - { - ((u32 *)record)[i] = 0; - } + for (i = 0; i < sizeof(struct BattleTowerRecord) / sizeof(u32); i++) + { + ((u32 *)record)[i] = 0; + } } void sub_8135CFC(void) { - s32 i; + s32 i; - get_trainer_name(gSaveBlock2.battleTower.defeatedByTrainerName); - gSaveBlock2.battleTower.defeatedBySpecies = gBattleMons[1].species; - gSaveBlock2.battleTower.firstMonSpecies = gBattleMons[0].species; + get_trainer_name(gSaveBlock2.battleTower.defeatedByTrainerName); + gSaveBlock2.battleTower.defeatedBySpecies = gBattleMons[1].species; + gSaveBlock2.battleTower.firstMonSpecies = gBattleMons[0].species; - for (i = 0; i < POKEMON_NAME_LENGTH; i++) - { - gSaveBlock2.battleTower.firstMonNickname[i] = gBattleMons[0].nickname[i]; - } + for (i = 0; i < POKEMON_NAME_LENGTH; i++) + { + gSaveBlock2.battleTower.firstMonNickname[i] = gBattleMons[0].nickname[i]; + } } u16 GetCurrentBattleTowerWinStreak(u8 battleTowerLevelType) { - u16 winStreak = ((gSaveBlock2.battleTower.curStreakChallengesNum[battleTowerLevelType] - 1) * 7 - 1) - + gSaveBlock2.battleTower.curChallengeBattleNum[battleTowerLevelType]; + u16 winStreak = ((gSaveBlock2.battleTower.curStreakChallengesNum[battleTowerLevelType] - 1) * 7 - 1) + + gSaveBlock2.battleTower.curChallengeBattleNum[battleTowerLevelType]; - if (winStreak > 9999) - { - return 9999; - } + if (winStreak > 9999) + { + return 9999; + } - return winStreak; + return winStreak; } #ifdef NONMATCHING @@ -2144,230 +2143,230 @@ _08135DE8: .4byte sShortStreakPrizes\n\ void GiveBattleTowerPrize(void) { - u8 battleTowerLevelType = gSaveBlock2.battleTower.battleTowerLevelType; - - if (AddBagItem(gSaveBlock2.battleTower.prizeItem, 1) == TRUE) - { - CopyItemName(gSaveBlock2.battleTower.prizeItem, gStringVar1); - gScriptResult = 1; - } - else - { - gScriptResult = 0; - gSaveBlock2.battleTower.var_4AE[battleTowerLevelType] = 6; - } + u8 battleTowerLevelType = gSaveBlock2.battleTower.battleTowerLevelType; + + if (AddBagItem(gSaveBlock2.battleTower.prizeItem, 1) == TRUE) + { + CopyItemName(gSaveBlock2.battleTower.prizeItem, gStringVar1); + gScriptResult = 1; + } + else + { + gScriptResult = 0; + gSaveBlock2.battleTower.var_4AE[battleTowerLevelType] = 6; + } } void AwardBattleTowerRibbons(void) { - s32 i; - u32 partyIndex; - struct Pokemon *pokemon; - u8 ribbonType; - u8 battleTowerLevelType = gSaveBlock2.battleTower.battleTowerLevelType; - - ribbonType = MON_DATA_WINNING_RIBBON; - if (battleTowerLevelType != 0) - { - ribbonType = MON_DATA_VICTORY_RIBBON; - } - - gScriptResult = 0; - - if (GetCurrentBattleTowerWinStreak(battleTowerLevelType) > 55) - { - for (i = 0; i < 3; i++) - { - partyIndex = gSaveBlock2.battleTower.selectedPartyMons[i] - 1; - pokemon = &gPlayerParty[partyIndex]; - if (!GetMonData(pokemon, ribbonType)) - { - gScriptResult = 1; - SetMonData(pokemon, ribbonType, &gScriptResult); - } - } - } - - if (gScriptResult != 0) - { - IncrementGameStat(GAME_STAT_RECEIVED_RIBBONS); - } + s32 i; + u32 partyIndex; + struct Pokemon *pokemon; + u8 ribbonType; + u8 battleTowerLevelType = gSaveBlock2.battleTower.battleTowerLevelType; + + ribbonType = MON_DATA_WINNING_RIBBON; + if (battleTowerLevelType != 0) + { + ribbonType = MON_DATA_VICTORY_RIBBON; + } + + gScriptResult = 0; + + if (GetCurrentBattleTowerWinStreak(battleTowerLevelType) > 55) + { + for (i = 0; i < 3; i++) + { + partyIndex = gSaveBlock2.battleTower.selectedPartyMons[i] - 1; + pokemon = &gPlayerParty[partyIndex]; + if (!GetMonData(pokemon, ribbonType)) + { + gScriptResult = 1; + SetMonData(pokemon, ribbonType, &gScriptResult); + } + } + } + + if (gScriptResult != 0) + { + IncrementGameStat(GAME_STAT_RECEIVED_RIBBONS); + } } // This is a leftover debugging function that is used to populate the E-Reader // trainer with the player's current data. void Debug_FillEReaderTrainerWithPlayerData(void) { - struct BattleTowerEReaderTrainer *ereaderTrainer; - s32 i; - s32 j; - - ereaderTrainer = &gSaveBlock2.battleTower.ereaderTrainer; - - if (gSaveBlock2.playerGender != MALE) - { - ereaderTrainer->trainerClass = sFemaleTrainerClasses[(gSaveBlock2.playerTrainerId[0] + gSaveBlock2.playerTrainerId[1] - + gSaveBlock2.playerTrainerId[2] + gSaveBlock2.playerTrainerId[3]) % 20u]; - } - else - { - ereaderTrainer->trainerClass = sMaleTrainerClasses[(gSaveBlock2.playerTrainerId[0] + gSaveBlock2.playerTrainerId[1] - + gSaveBlock2.playerTrainerId[2] + gSaveBlock2.playerTrainerId[3]) % 30u]; - } - - copy_word_to_mem(ereaderTrainer->trainerId, gSaveBlock2.playerTrainerId); - StringCopy8(ereaderTrainer->name, gSaveBlock2.playerName); - - ereaderTrainer->winStreak = 1; - - j = 7; - for (i = 0; i < 6; i++) - { - ereaderTrainer->greeting.easyChat[i] = gSaveBlock1.easyChats.unk2B28[i]; - ereaderTrainer->farewellPlayerLost.easyChat[i] = j; - ereaderTrainer->farewellPlayerWon.easyChat[i] = j + 6; - j++; - } - - for (i = 0; i < 3; i++) - { - sub_803AF78(&gPlayerParty[i], &ereaderTrainer->party[i]); - } - - SetEReaderTrainerChecksum(ereaderTrainer); + struct BattleTowerEReaderTrainer *ereaderTrainer; + s32 i; + s32 j; + + ereaderTrainer = &gSaveBlock2.battleTower.ereaderTrainer; + + if (gSaveBlock2.playerGender != MALE) + { + ereaderTrainer->trainerClass = sFemaleTrainerClasses[(gSaveBlock2.playerTrainerId[0] + gSaveBlock2.playerTrainerId[1] + + gSaveBlock2.playerTrainerId[2] + gSaveBlock2.playerTrainerId[3]) % 20u]; + } + else + { + ereaderTrainer->trainerClass = sMaleTrainerClasses[(gSaveBlock2.playerTrainerId[0] + gSaveBlock2.playerTrainerId[1] + + gSaveBlock2.playerTrainerId[2] + gSaveBlock2.playerTrainerId[3]) % 30u]; + } + + copy_word_to_mem(ereaderTrainer->trainerId, gSaveBlock2.playerTrainerId); + StringCopy8(ereaderTrainer->name, gSaveBlock2.playerName); + + ereaderTrainer->winStreak = 1; + + j = 7; + for (i = 0; i < 6; i++) + { + ereaderTrainer->greeting.easyChat[i] = gSaveBlock1.easyChats.unk2B28[i]; + ereaderTrainer->farewellPlayerLost.easyChat[i] = j; + ereaderTrainer->farewellPlayerWon.easyChat[i] = j + 6; + j++; + } + + for (i = 0; i < 3; i++) + { + sub_803AF78(&gPlayerParty[i], &ereaderTrainer->party[i]); + } + + SetEReaderTrainerChecksum(ereaderTrainer); } u8 GetEReaderTrainerPicIndex(void) { - return gTrainerClassToPicIndex[gSaveBlock2.battleTower.ereaderTrainer.trainerClass]; + return gTrainerClassToPicIndex[gSaveBlock2.battleTower.ereaderTrainer.trainerClass]; } u8 GetEReaderTrainerClassNameIndex(void) { - return gTrainerClassToNameIndex[gSaveBlock2.battleTower.ereaderTrainer.trainerClass]; + return gTrainerClassToNameIndex[gSaveBlock2.battleTower.ereaderTrainer.trainerClass]; } void SetEReaderTrainerName(u8 *trainerName) { - s32 i; + s32 i; - for (i = 0; i < 7; i++) - { - trainerName[i] = gSaveBlock2.battleTower.ereaderTrainer.name[i]; - } + for (i = 0; i < 7; i++) + { + trainerName[i] = gSaveBlock2.battleTower.ereaderTrainer.name[i]; + } - trainerName[i] = 0xFF; + trainerName[i] = 0xFF; } // Checks if the saved E-Reader trainer is valid. void ValidateEReaderTrainer(void) { - u32 i; - u32 checksum; - struct BattleTowerEReaderTrainer *ereaderTrainer; - - gScriptResult = 0; - ereaderTrainer = &gSaveBlock2.battleTower.ereaderTrainer; - - checksum = 0; - for (i = 0; i < sizeof(struct BattleTowerEReaderTrainer) / sizeof(u32) - 1; i++) - { - checksum |= ((u32 *)ereaderTrainer)[i]; - } - - if (checksum == 0) - { - gScriptResult = 1; - return; - } - - checksum = 0; - for (i = 0; i < sizeof(struct BattleTowerEReaderTrainer) / sizeof(u32) - 1; i++) - { - checksum += ((u32 *)ereaderTrainer)[i]; - } - - if (gSaveBlock2.battleTower.ereaderTrainer.checksum != checksum) - { - ClearEReaderTrainer(&gSaveBlock2.battleTower.ereaderTrainer); - gScriptResult = 1; - } + u32 i; + u32 checksum; + struct BattleTowerEReaderTrainer *ereaderTrainer; + + gScriptResult = 0; + ereaderTrainer = &gSaveBlock2.battleTower.ereaderTrainer; + + checksum = 0; + for (i = 0; i < sizeof(struct BattleTowerEReaderTrainer) / sizeof(u32) - 1; i++) + { + checksum |= ((u32 *)ereaderTrainer)[i]; + } + + if (checksum == 0) + { + gScriptResult = 1; + return; + } + + checksum = 0; + for (i = 0; i < sizeof(struct BattleTowerEReaderTrainer) / sizeof(u32) - 1; i++) + { + checksum += ((u32 *)ereaderTrainer)[i]; + } + + if (gSaveBlock2.battleTower.ereaderTrainer.checksum != checksum) + { + ClearEReaderTrainer(&gSaveBlock2.battleTower.ereaderTrainer); + gScriptResult = 1; + } } void SetEReaderTrainerChecksum(struct BattleTowerEReaderTrainer *ereaderTrainer) { - s32 i; + s32 i; - ereaderTrainer->checksum = 0; - for (i = 0; i < sizeof(struct BattleTowerEReaderTrainer) / sizeof(u32) - 1; i++) - { - ereaderTrainer->checksum += ((u32 *)ereaderTrainer)[i]; - } + ereaderTrainer->checksum = 0; + for (i = 0; i < sizeof(struct BattleTowerEReaderTrainer) / sizeof(u32) - 1; i++) + { + ereaderTrainer->checksum += ((u32 *)ereaderTrainer)[i]; + } } void ClearEReaderTrainer(struct BattleTowerEReaderTrainer *ereaderTrainer) { - u32 i; + u32 i; - for (i = 0; i < sizeof(struct BattleTowerEReaderTrainer) / sizeof(u32); i++) - { - ((u32 *)ereaderTrainer)[i] = 0; - } + for (i = 0; i < sizeof(struct BattleTowerEReaderTrainer) / sizeof(u32); i++) + { + ((u32 *)ereaderTrainer)[i] = 0; + } } void PrintEReaderTrainerGreeting(void) { - PrintBattleTowerTrainerMessage(gSaveBlock2.battleTower.ereaderTrainer.greeting.easyChat); + PrintBattleTowerTrainerMessage(gSaveBlock2.battleTower.ereaderTrainer.greeting.easyChat); } void PrintEReaderTrainerFarewellMessage(void) { - if (gBattleOutcome == BATTLE_DREW) - { - gStringVar4[0] = 0xFF; - } - else if (gBattleOutcome == BATTLE_WON) - { - PrintBattleTowerTrainerMessage(gSaveBlock2.battleTower.ereaderTrainer.farewellPlayerWon.easyChat); - } - else - { - PrintBattleTowerTrainerMessage(gSaveBlock2.battleTower.ereaderTrainer.farewellPlayerLost.easyChat); - } + if (gBattleOutcome == BATTLE_DREW) + { + gStringVar4[0] = 0xFF; + } + else if (gBattleOutcome == BATTLE_WON) + { + PrintBattleTowerTrainerMessage(gSaveBlock2.battleTower.ereaderTrainer.farewellPlayerWon.easyChat); + } + else + { + PrintBattleTowerTrainerMessage(gSaveBlock2.battleTower.ereaderTrainer.farewellPlayerLost.easyChat); + } } void sub_813610C(void) { - s32 i; - - for (i = 0; i < 2; i++) - { - if (gSaveBlock2.battleTower.var_4AE[i] == 1) - { - sub_80BFD20(); - } - } + s32 i; + + for (i = 0; i < 2; i++) + { + if (gSaveBlock2.battleTower.var_4AE[i] == 1) + { + sub_80BFD20(); + } + } } #if GERMAN u8 de_sub_81364AC(void) { - if (gSaveBlock2.battleTower.battleTowerTrainerId == BATTLE_TOWER_EREADER_TRAINER_ID) - { - return gSaveBlock2.battleTower.ereaderTrainer.trainerClass; - } - else if (gSaveBlock2.battleTower.battleTowerTrainerId >= BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID) - { - return gSaveBlock2.battleTower.records[gSaveBlock2.battleTower.battleTowerTrainerId - BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID].trainerClass; - } - else - { - return gBattleTowerTrainers[gSaveBlock2.battleTower.battleTowerTrainerId].trainerClass; - } + if (gSaveBlock2.battleTower.battleTowerTrainerId == BATTLE_TOWER_EREADER_TRAINER_ID) + { + return gSaveBlock2.battleTower.ereaderTrainer.trainerClass; + } + else if (gSaveBlock2.battleTower.battleTowerTrainerId >= BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID) + { + return gSaveBlock2.battleTower.records[gSaveBlock2.battleTower.battleTowerTrainerId - BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID].trainerClass; + } + else + { + return gBattleTowerTrainers[gSaveBlock2.battleTower.battleTowerTrainerId].trainerClass; + } } u8 de_sub_81364F8(void) { - return gSaveBlock2.battleTower.ereaderTrainer.trainerClass; + return gSaveBlock2.battleTower.ereaderTrainer.trainerClass; } #endif -- cgit v1.2.3 From fbdf867ce7bce6239c34c53beaabbcd555302a4f Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Sun, 12 Nov 2017 16:40:04 -0800 Subject: Cleanup and document daycare.c --- src/debug/mori_debug_menu.c | 20 +- src/engine/record_mixing.c | 12 +- src/field/daycare.c | 795 ++++++++++++++++++++--------------- src/field/field_control_avatar.c | 4 +- src/pokemon/pokemon_summary_screen.c | 1 + src/scene/egg_hatch.c | 34 +- src/script_pokemon_util_80C4BF0.c | 2 +- 7 files changed, 485 insertions(+), 383 deletions(-) (limited to 'src') diff --git a/src/debug/mori_debug_menu.c b/src/debug/mori_debug_menu.c index 1595ecd2e..e6ee243e8 100644 --- a/src/debug/mori_debug_menu.c +++ b/src/debug/mori_debug_menu.c @@ -50,13 +50,13 @@ u8 MoriDebugMenu_SearchChild(u8 a1, u8 a2, u8 *ptr) { u8 localPtr[52]; u16 monData; - u16 var; + u16 eggSpecies; monData = GetMonData(gPlayerParty, MON_DATA_SPECIES, ptr); - var = sub_8041870(monData); + eggSpecies = GetEggSpecies(monData); StringCopy(localPtr, gSpeciesNames[monData]); StringAppend(localPtr, gUnknown_0839B24D); - StringAppend(localPtr, gSpeciesNames[var]); + StringAppend(localPtr, gSpeciesNames[eggSpecies]); StringAppend(localPtr, gUnknown_0839B255); MenuZeroFillScreen(); MenuDrawTextWindow(0, 14, 30, 19); @@ -67,8 +67,8 @@ u8 MoriDebugMenu_SearchChild(u8 a1, u8 a2, u8 *ptr) s8 MoriDebugMenu_Egg(void) { - if ( Daycare_CountPokemon(&gSaveBlock1.daycareData) == 2 && daycare_relationship_score_from_savegame() ) - sub_8041940(); + if (CountPokemonInDaycare(&gSaveBlock1.daycare) == 2 && GetDaycareCompatibilityScoreFromSave() ) + TriggerPendingDaycareEgg(); CloseMenu(); return 1; @@ -76,8 +76,8 @@ s8 MoriDebugMenu_Egg(void) s8 MoriDebugMenu_MaleEgg(void) { - if ( Daycare_CountPokemon(&gSaveBlock1.daycareData) == 2 && daycare_relationship_score_from_savegame() ) - sub_8041950(); + if (CountPokemonInDaycare(&gSaveBlock1.daycare) == 2 && GetDaycareCompatibilityScoreFromSave() ) + TriggerPendingDaycareMaleEgg(); CloseMenu(); return 1; @@ -85,14 +85,14 @@ s8 MoriDebugMenu_MaleEgg(void) s8 MoriDebugMenu_1000Steps(void) { - sub_8041790(1000); + Debug_AddDaycareSteps(1000); CloseMenu(); return 1; } s8 MoriDebugMenu_10000Steps(void) { - sub_8041790(10000); + Debug_AddDaycareSteps(10000); CloseMenu(); return 1; } @@ -117,7 +117,7 @@ s8 MoriDebugMenu_BreedEgg(void) SetMonData(&gPlayerParty[loopCounter], MON_DATA_FRIENDSHIP, &friendship); } } - gSaveBlock1.daycareData.misc.countersEtc.unk_11a = -3; + gSaveBlock1.daycare.misc.countersEtc.eggCycleStepsRemaining = -3; CloseMenu(); return 1; } diff --git a/src/engine/record_mixing.c b/src/engine/record_mixing.c index 3ae0c4ea3..b30d57a4d 100644 --- a/src/engine/record_mixing.c +++ b/src/engine/record_mixing.c @@ -71,9 +71,9 @@ void RecordMixing_PrepareExchangePacket(void) memcpy(ewram_2018000.filler1004, gUnknown_083D0274, sizeof(ewram_2008000.filler1004)); memcpy(ewram_2018000.filler1044, gUnknown_083D0278, sizeof(ewram_2008000.filler1044)); memcpy(ewram_2018000.easyChatPairs, recordMixingEasyChatPairs, sizeof(ewram_2018000.easyChatPairs)); - gUnknown_02038738.mail[0] = gSaveBlock1.daycareData.misc.mail[0]; - gUnknown_02038738.mail[1] = gSaveBlock1.daycareData.misc.mail[1]; - sub_8041324(gSaveBlock1.daycareData.mons, &gUnknown_02038738); + gUnknown_02038738.mail[0] = gSaveBlock1.daycare.misc.mail[0]; + gUnknown_02038738.mail[1] = gSaveBlock1.daycare.misc.mail[1]; + InitDaycareMailRecordMixing(gSaveBlock1.daycare.mons, &gUnknown_02038738); memcpy(&ewram_2018000.filler10AC, gUnknown_083D0280, sizeof(struct RecordMixingDayCareMail)); memcpy(&ewram_2018000.battleTowerRecord, gBattleTowerPlayerRecord, sizeof(struct BattleTowerRecord)); @@ -524,11 +524,11 @@ void sub_80B9C6C(u8 *a, u32 b, u8 c, void *d) for (i = 0; i < r8; i++) { r6 = (struct DayCareMisc *)(a + b * i); - if (r6->unk70 != 0) + if (r6->numDaycareMons != 0) { - for (r7 = 0; r7 < r6->unk70; r7++) + for (r7 = 0; r7 < r6->numDaycareMons; r7++) { - if (r6->unk74[r7] == 0) + if (r6->itemsHeld[r7] == 0) sp1C[i][r7] = 1; } } diff --git a/src/field/daycare.c b/src/field/daycare.c index dd74f59e0..2b58a0d5d 100644 --- a/src/field/daycare.c +++ b/src/field/daycare.c @@ -1,47 +1,50 @@ #include "global.h" #include "daycare.h" -#include "pokemon.h" #include "event_data.h" -#include "species.h" +#include "field_effect.h" #include "items.h" -#include "text.h" -#include "string_util.h" #include "mail_data.h" +#include "main.h" +#include "menu.h" +#include "moves.h" #include "name_string_util.h" +#include "overworld.h" +#include "party_menu.h" +#include "pokemon.h" #include "pokemon_storage_system.h" #include "rng.h" -#include "moves.h" -#include "trade.h" -#include "strings2.h" -#include "party_menu.h" -#include "field_effect.h" -#include "main.h" -#include "menu.h" -#include "sound.h" -#include "songs.h" #include "script.h" -#include "overworld.h" +#include "songs.h" +#include "sound.h" +#include "species.h" +#include "string_util.h" +#include "strings2.h" +#include "text.h" +#include "trade.h" -IWRAM_DATA u16 gUnknown_03000470[52]; -IWRAM_DATA u16 gUnknown_030004D8[4]; -IWRAM_DATA u16 gUnknown_030004E0[4]; -IWRAM_DATA u16 gUnknown_030004E8[12]; -IWRAM_DATA u16 gUnknown_03000500[4]; +// RAM buffers used to assist with BuildEggMoveset() +IWRAM_DATA u16 gHatchedEggLevelUpMoves[52]; +IWRAM_DATA u16 gHatchedEggFatherMoves[4]; +IWRAM_DATA u16 gHatchedEggFinalMoves[4]; +IWRAM_DATA u16 gHatchedEggEggMoves[12]; +IWRAM_DATA u16 gHatchedEggMotherMoves[4]; -static void sub_80417F4(struct DayCareMail *); -static void sub_80420FC(struct Pokemon *, u16, struct DayCareData *); -static u8 daycare_relationship_score(struct DayCareData *); +extern u16 gMoveToLearn; + +static void ClearDaycareMail(struct DayCareMail *); +static void SetInitialEggData(struct Pokemon *, u16, struct DayCare *); +static u8 GetDaycareCompatibilityScore(struct DayCare *); #include "../data/pokemon/egg_moves.h" -const u8 *const gUnknown_08209AC4[] = { +static const u8 *const sCompatibilityMessages[] = { DaycareText_GetAlongVeryWell, DaycareText_GetAlong, DaycareText_DontLikeOther, DaycareText_PlayOther }; -const u8 gUnknown_08209AD4[] = _("タマゴ"); +const u8 sJapaneseEggNickname[] = _("タマゴ"); u8 *GetMonNick(struct Pokemon *mon, u8 *dest) { @@ -59,251 +62,284 @@ u8 *GetBoxMonNick(struct BoxPokemon *mon, u8 *dest) return StringCopy10(dest, nickname); } -u8 Daycare_CountPokemon(struct DayCareData *daycare_data) +u8 CountPokemonInDaycare(struct DayCare *daycare) { u8 i, count; count = 0; - for(i = 0;i <= 1;i++) - if(GetBoxMonData(&daycare_data->mons[i], MON_DATA_SPECIES) != 0) + for (i = 0; i < 2; i++) + { + if (GetBoxMonData(&daycare->mons[i], MON_DATA_SPECIES) != 0) count++; + } return count; } -void sub_8041324(struct BoxPokemon * box_pokemon, struct RecordMixingDayCareMail * daycareMailEtc) +void InitDaycareMailRecordMixing(struct BoxPokemon * daycareMons, struct RecordMixingDayCareMail * daycareMail) { u8 i; - u8 specCount; - specCount = 0; - for (i=0; i<2; i++) + u8 numDaycareMons = 0; + + for (i = 0; i < 2; i++) { - if (GetBoxMonData(&box_pokemon[i], MON_DATA_SPECIES) != SPECIES_NONE) + if (GetBoxMonData(&daycareMons[i], MON_DATA_SPECIES) != SPECIES_NONE) { - specCount ++; - if (GetBoxMonData(&box_pokemon[i], MON_DATA_HELD_ITEM) == ITEM_NONE) + numDaycareMons++; + if (GetBoxMonData(&daycareMons[i], MON_DATA_HELD_ITEM) == ITEM_NONE) { - daycareMailEtc->unk74[i] = 0; - } else + daycareMail->itemsHeld[i] = 0; + } + else { - daycareMailEtc->unk74[i] = 1; + daycareMail->itemsHeld[i] = 1; } - } else + } + else { - daycareMailEtc->unk74[i] = 1; + daycareMail->itemsHeld[i] = 1; } } - daycareMailEtc->unk70 = specCount; + + daycareMail->numDaycareMons = numDaycareMons; } -static s8 Daycare_FindEmptySpot(struct BoxPokemon * daycare_data) +static s8 Daycare_FindEmptySpot(struct BoxPokemon * daycareMons) { u8 i; - for(i = 0;i <= 1;i++) - if(GetBoxMonData(daycare_data + i, MON_DATA_SPECIES) == 0) + for (i = 0; i < 2; i++) + { + if (GetBoxMonData(&daycareMons[i], MON_DATA_SPECIES) == 0) return i; + } return -1; } -static void Daycare_SendPokemon(struct Pokemon * mon, struct DayCareData * daycare_data) +static void StorePokemonInDaycare(struct Pokemon * mon, struct DayCare * daycare) { - s8 empty_slot; + s8 emptySlot; u8 mail; u8 *names; - empty_slot = Daycare_FindEmptySpot(daycare_data->mons); - if(MonHasMail(mon)) { - StringCopy((names = daycare_data->misc.mail[empty_slot].names), gSaveBlock2.playerName); + emptySlot = Daycare_FindEmptySpot(daycare->mons); + if (MonHasMail(mon)) + { + StringCopy((names = daycare->misc.mail[emptySlot].names), gSaveBlock2.playerName); PadNameString(names, 0xFC); names += 8; GetMonNick(mon, names); mail = GetMonData(mon, MON_DATA_MAIL); - daycare_data->misc.mail[empty_slot].message = gSaveBlock1.mail[mail]; + daycare->misc.mail[emptySlot].message = gSaveBlock1.mail[mail]; TakeMailFromMon(mon); } - daycare_data->mons[empty_slot] = mon->box; - BoxMonRestorePP(&daycare_data->mons[empty_slot]); - daycare_data->misc.countersEtc.steps[empty_slot] = 0; + + daycare->mons[emptySlot] = mon->box; + BoxMonRestorePP(&daycare->mons[emptySlot]); + daycare->misc.countersEtc.steps[emptySlot] = 0; ZeroMonData(mon); party_compaction(); CalculatePlayerPartyCount(); } -void Daycare_SendPokemon_Special() +void StoreSelectedPokemonInDaycare(void) { - Daycare_SendPokemon(gPlayerParty + gLastFieldPokeMenuOpened, &gSaveBlock1.daycareData); + StorePokemonInDaycare(&gPlayerParty[gLastFieldPokeMenuOpened], &gSaveBlock1.daycare); } -static void sub_80414C0(struct DayCareData * daycare_data) +// Shifts the second daycare pokemon slot into the first slot. +static void ShiftDaycareSlots(struct DayCare * daycare) { - if((GetBoxMonData(&daycare_data->mons[1], MON_DATA_SPECIES) != 0) && GetBoxMonData(&daycare_data->mons[0], MON_DATA_SPECIES) == 0) + // This condition is only satisfied when the player takes out the first pokemon from the daycare. + if (GetBoxMonData(&daycare->mons[1], MON_DATA_SPECIES) != 0 && GetBoxMonData(&daycare->mons[0], MON_DATA_SPECIES) == 0) { - daycare_data->mons[0] = daycare_data->mons[1]; - ZeroBoxMonData(&daycare_data->mons[1]); - daycare_data->misc.mail[0] = daycare_data->misc.mail[1]; - daycare_data->misc.countersEtc.steps[0] = daycare_data->misc.countersEtc.steps[1]; - daycare_data->misc.countersEtc.steps[1] = 0; - sub_80417F4(&daycare_data->misc.mail[1]); + daycare->mons[0] = daycare->mons[1]; + ZeroBoxMonData(&daycare->mons[1]); + + daycare->misc.mail[0] = daycare->misc.mail[1]; + daycare->misc.countersEtc.steps[0] = daycare->misc.countersEtc.steps[1]; + daycare->misc.countersEtc.steps[1] = 0; + ClearDaycareMail(&daycare->misc.mail[1]); } } -u8 TryIncrementMonLevel(struct Pokemon *); -extern u16 gMoveToLearn; - -static void DayCare_LevelUpMoves(struct Pokemon * mon) +static void ApplyDaycareExperience(struct Pokemon * mon) { s32 i; - u8 r6; - u16 temp; + bool8 firstMove; + u16 learnedMove; for (i = 0; i < MAX_LEVEL; i++) { + // Add the mon's gained daycare experience level by level until it can't level up anymore. if (TryIncrementMonLevel(mon)) { - r6 = 1; - while ((temp = MonTryLearningNewMove(mon, r6)) != 0) + // Teach the mon new moves it learned while in the daycare. + firstMove = TRUE; + while ((learnedMove = MonTryLearningNewMove(mon, firstMove)) != 0) { - r6 = 0; - if (temp == 0xffff) + firstMove = FALSE; + if (learnedMove == 0xffff) + { + // Mon already knows 4 moves. DeleteFirstMoveAndGiveMoveToMon(mon, gMoveToLearn); + } } } else + { break; + } } + // Re-calculate the mons stats at its new level. CalculateMonStats(mon); } -static u16 sub_8041570(struct DayCareData * daycare_data, u8 slot) +static u16 TakeSelectedPokemonFromDaycare(struct DayCare * daycare, u8 slot) { u16 species; u32 experience; struct Pokemon pokemon; - GetBoxMonNick(&daycare_data->mons[slot], gStringVar1); - species = GetBoxMonData(&daycare_data->mons[slot], MON_DATA_SPECIES); - sub_803B4B4(&daycare_data->mons[slot], &pokemon); + GetBoxMonNick(&daycare->mons[slot], gStringVar1); + species = GetBoxMonData(&daycare->mons[slot], MON_DATA_SPECIES); + sub_803B4B4(&daycare->mons[slot], &pokemon); + if (GetMonData(&pokemon, MON_DATA_LEVEL) != MAX_LEVEL) { - experience = GetMonData(&pokemon, MON_DATA_EXP) + daycare_data->misc.countersEtc.steps[slot]; + experience = GetMonData(&pokemon, MON_DATA_EXP) + daycare->misc.countersEtc.steps[slot]; SetMonData(&pokemon, MON_DATA_EXP, &experience); - DayCare_LevelUpMoves(&pokemon); + ApplyDaycareExperience(&pokemon); } + gPlayerParty[PARTY_SIZE - 1] = pokemon; - if (daycare_data->misc.mail[slot].message.itemId) + if (daycare->misc.mail[slot].message.itemId) { - GiveMailToMon2(&gPlayerParty[PARTY_SIZE - 1], &daycare_data->misc.mail[slot].message); - sub_80417F4(&daycare_data->misc.mail[slot]); + GiveMailToMon2(&gPlayerParty[PARTY_SIZE - 1], &daycare->misc.mail[slot].message); + ClearDaycareMail(&daycare->misc.mail[slot]); } + party_compaction(); - ZeroBoxMonData(&daycare_data->mons[slot]); - daycare_data->misc.countersEtc.steps[slot] = 0; - sub_80414C0(daycare_data); + ZeroBoxMonData(&daycare->mons[slot]); + daycare->misc.countersEtc.steps[slot] = 0; + ShiftDaycareSlots(daycare); CalculatePlayerPartyCount(); return species; } -u16 sub_8041648() +u16 TakePokemonFromDaycare(void) { - return sub_8041570(&gSaveBlock1.daycareData, gSpecialVar_0x8004); + return TakeSelectedPokemonFromDaycare(&gSaveBlock1.daycare, gSpecialVar_0x8004); } -u8 Daycare_GetLevelAfterSteps(struct BoxPokemon * mon, u32 steps){ - struct BoxPokemon temp = *mon; - u32 new_exp = GetBoxMonData(mon, MON_DATA_EXP) + steps; - SetBoxMonData(&temp, MON_DATA_EXP, &new_exp); - return GetLevelFromBoxMonExp(&temp); +static u8 GetLevelAfterDaycareSteps(struct BoxPokemon * mon, u32 steps) +{ + struct BoxPokemon tempMon = *mon; + + u32 experience = GetBoxMonData(mon, MON_DATA_EXP) + steps; + SetBoxMonData(&tempMon, MON_DATA_EXP, &experience); + return GetLevelFromBoxMonExp(&tempMon); } -static u8 sub_80416A0(struct DayCareData *daycareData, u8 slot) +static u8 GetNumLevelsGainedFromSteps(struct DayCare *daycare, u8 slot) { u8 levelBefore; u8 levelAfter; - levelBefore = GetLevelFromBoxMonExp(&daycareData->mons[slot]); - levelAfter = Daycare_GetLevelAfterSteps(&daycareData->mons[slot], daycareData->misc.countersEtc.steps[slot]); + levelBefore = GetLevelFromBoxMonExp(&daycare->mons[slot]); + levelAfter = GetLevelAfterDaycareSteps(&daycare->mons[slot], daycare->misc.countersEtc.steps[slot]); return levelAfter - levelBefore; } -static u8 sub_80416E8(struct DayCareData *dayCareData, u8 slot) +static u8 GetNumLevelsGainedForDaycareSlot(struct DayCare *daycare, u8 slot) { - u8 levelDelta = sub_80416A0(dayCareData, slot); - GetBoxMonNick(&dayCareData->mons[slot], gStringVar1); - ConvertIntToDecimalStringN(gStringVar2, levelDelta, STR_CONV_MODE_LEFT_ALIGN, 2); - return levelDelta; + u8 numLevelsGained = GetNumLevelsGainedFromSteps(daycare, slot); + GetBoxMonNick(&daycare->mons[slot], gStringVar1); + ConvertIntToDecimalStringN(gStringVar2, numLevelsGained, STR_CONV_MODE_LEFT_ALIGN, 2); + return numLevelsGained; } -static u16 sub_8041728(struct DayCareData *dayCareData, u8 slot) +static u16 GetDaycareCostForSelectedMon(struct DayCare *daycare, u8 slot) { u16 cost; - u8 levelDelta = sub_80416A0(dayCareData, slot); - GetBoxMonNick(&dayCareData->mons[slot], gStringVar1); - cost = 100 + 100 * levelDelta; + u8 numLevelsGained = GetNumLevelsGainedFromSteps(daycare, slot); + GetBoxMonNick(&daycare->mons[slot], gStringVar1); + cost = 100 + 100 * numLevelsGained; ConvertIntToDecimalStringN(gStringVar2, cost, STR_CONV_MODE_LEFT_ALIGN, 5); return cost; } -void sub_8041770(void) +void GetDaycareCost(void) { - gSpecialVar_0x8005 = sub_8041728(&gSaveBlock1.daycareData, gSpecialVar_0x8004); + gSpecialVar_0x8005 = GetDaycareCostForSelectedMon(&gSaveBlock1.daycare, gSpecialVar_0x8004); } -void sub_8041790(u16 i) +void Debug_AddDaycareSteps(u16 numSteps) { - gSaveBlock1.daycareData.misc.countersEtc.steps[0] += i; - gSaveBlock1.daycareData.misc.countersEtc.steps[1] += i; + gSaveBlock1.daycare.misc.countersEtc.steps[0] += numSteps; + gSaveBlock1.daycare.misc.countersEtc.steps[1] += numSteps; } -u8 sub_80417B8(void) +u8 GetNumLevelsGainedFromDaycare(void) { - if (GetBoxMonData(&gSaveBlock1.daycareData.mons[gSpecialVar_0x8004], MON_DATA_SPECIES) != 0) - return sub_80416E8(&gSaveBlock1.daycareData, gSpecialVar_0x8004); + if (GetBoxMonData(&gSaveBlock1.daycare.mons[gSpecialVar_0x8004], MON_DATA_SPECIES) != 0) + return GetNumLevelsGainedForDaycareSlot(&gSaveBlock1.daycare, gSpecialVar_0x8004); + return 0; } -static void sub_80417F4(struct DayCareMail *mail) +static void ClearDaycareMail(struct DayCareMail *mail) { - u8 zero; u8 *names; u8 *names2; - int i; - zero = 0; - for (i = 7, names = mail->names + 7; i >= 0; i --) + s32 i; + u8 zero = 0; + + for (i = 7, names = &mail->names[7]; i >= 0; i--) + { *names-- = zero; - names2 = mail->names + 8; + } + + names2 = &mail->names[8]; zero = 0; - names = mail->names + 18; - do *names-- = zero; while ((int)names >= (int)names2); + names = &mail->names[18]; + do *names-- = zero; while ((s32)names >= (s32)names2); ClearMailStruct(&mail->message); } -void unref_sub_8041824(struct DayCareData *dayCareData) +void unref_sub_8041824(struct DayCare *daycare) { u8 slot; - for (slot = 0; slot < ARRAY_COUNT(dayCareData->mons); slot ++) + for (slot = 0; slot < ARRAY_COUNT(daycare->mons); slot++) { - ZeroBoxMonData(&dayCareData->mons[slot]); - dayCareData->misc.countersEtc.steps[slot] = 0; - sub_80417F4(&dayCareData->misc.mail[slot]); + ZeroBoxMonData(&daycare->mons[slot]); + daycare->misc.countersEtc.steps[slot] = 0; + ClearDaycareMail(&daycare->misc.mail[slot]); } - dayCareData->misc.countersEtc.personalityLo = 0; - dayCareData->misc.countersEtc.unk_11a = 0; + + daycare->misc.countersEtc.pendingEggPersonality = 0; + daycare->misc.countersEtc.eggCycleStepsRemaining = 0; } -u16 sub_8041870(u16 species) +// Determines what the species of an Egg would be based on the given species. +// It determines this by working backwards through the evolution chain of the +// given species. +u16 GetEggSpecies(u16 species) { int i, j, k; bool8 found; - for (i = 0; i < 5; i ++) + + // Working backwards up to 5 times seems arbitrary, since the maximum number + // of times would only be 3 for 3-stage evolutions. + for (i = 0; i < 5; i++) { found = FALSE; - for (j = 1; j < NUM_SPECIES; j ++) + for (j = 1; j < NUM_SPECIES; j++) { - for (k = 0; k < 5; k ++) + for (k = 0; k < 5; k++) { if (gEvolutionTable[j].evolutions[k].targetSpecies == species) { @@ -312,92 +348,118 @@ u16 sub_8041870(u16 species) break; } } + if (found) break; } - if (j == 412) + + if (j == NUM_SPECIES) break; } + return species; } -static void sub_80418F0(struct DayCareData *dayCareData) +static void _TriggerPendingDaycareEgg(struct DayCare *daycare) { - dayCareData->misc.countersEtc.personalityLo = (Random() % 0xfffe) + 1; - FlagSet(0x86); + daycare->misc.countersEtc.pendingEggPersonality = (Random() % 0xfffe) + 1; + FlagSet(FLAG_PENDING_DAYCARE_EGG); } -static void sub_804191C(struct DayCareData *dayCareData) +static void _TriggerPendingDaycareMaleEgg(struct DayCare *daycare) { - dayCareData->misc.countersEtc.personalityLo = Random() | 0x8000; - FlagSet(0x86); + daycare->misc.countersEtc.pendingEggPersonality = Random() | 0x8000; + FlagSet(FLAG_PENDING_DAYCARE_EGG); } -void sub_8041940(void) +void TriggerPendingDaycareEgg(void) { - sub_80418F0(&gSaveBlock1.daycareData); + _TriggerPendingDaycareEgg(&gSaveBlock1.daycare); } -void sub_8041950(void) +void TriggerPendingDaycareMaleEgg(void) { - sub_804191C(&gSaveBlock1.daycareData); + _TriggerPendingDaycareMaleEgg(&gSaveBlock1.daycare); } -static void sub_8041960(u8 *data, u8 idx) +// Removes the selected index from the given IV list and shifts the remaining +// elements to the left. +static void RemoveIVIndexFromList(u8 *ivs, u8 selectedIv) { - int i, j; - u8 temp[6]; - data[idx] = 0xff; - for (i = 0; i < 6; i ++) - temp[i] = data[i]; + s32 i, j; + u8 temp[NUM_STATS]; + + ivs[selectedIv] = 0xff; + for (i = 0; i < NUM_STATS; i++) + { + temp[i] = ivs[i]; + } + j = 0; - for (i = 0; i < 6; i ++) + for (i = 0; i < NUM_STATS; i++) + { if (temp[i] != 0xff) - data[j++] = temp[i]; + ivs[j++] = temp[i]; + } } -static void InheritIVs(struct Pokemon *egg, struct DayCareData *dayCareData) +static void InheritIVs(struct Pokemon *egg, struct DayCare *daycare) { u8 i; u8 selectedIvs[3]; - u8 allIvs[6]; - u8 whichParent[3]; + u8 availableIVs[NUM_STATS]; + u8 whichParent[ARRAY_COUNT(selectedIvs)]; u8 iv; - for (i = 0; i < 6; i ++) - allIvs[i] = i; - for (i = 0; i < 3; i ++) + + // Initialize a list of IV indices. + for (i = 0; i < NUM_STATS; i++) { - selectedIvs[i] = allIvs[Random() % (6 - i)]; - sub_8041960(allIvs, selectedIvs[i]); + availableIVs[i] = i; } - for (i = 0; i < 3; i ++) + + // Select the 3 IVs that will be inherited. + for (i = 0; i < ARRAY_COUNT(selectedIvs); i++) + { + // Randomly pick an IV from the available list. + selectedIvs[i] = availableIVs[Random() % (NUM_STATS - i)]; + + // Remove the selected IV index from the available IV indicies. + RemoveIVIndexFromList(availableIVs, selectedIvs[i]); + } + + // Determine which parent each of the selected IVs should inherit from. + for (i = 0; i < ARRAY_COUNT(selectedIvs); i++) + { whichParent[i] = Random() % 2; - for (i = 0; i < 3; i ++) + } + + // Set each of inherited IVs on the egg mon. + for (i = 0; i < ARRAY_COUNT(selectedIvs); i++) { switch (selectedIvs[i]) { case 0: - iv = GetBoxMonData(&dayCareData->mons[whichParent[i]], MON_DATA_HP_IV); + iv = GetBoxMonData(&daycare->mons[whichParent[i]], MON_DATA_HP_IV); SetMonData(egg, MON_DATA_HP_IV, &iv); break; case 1: - iv = GetBoxMonData(&dayCareData->mons[whichParent[i]], MON_DATA_ATK_IV); + iv = GetBoxMonData(&daycare->mons[whichParent[i]], MON_DATA_ATK_IV); SetMonData(egg, MON_DATA_ATK_IV, &iv); break; case 2: - iv = GetBoxMonData(&dayCareData->mons[whichParent[i]], MON_DATA_DEF_IV); + iv = GetBoxMonData(&daycare->mons[whichParent[i]], MON_DATA_DEF_IV); SetMonData(egg, MON_DATA_DEF_IV, &iv); break; case 3: - iv = GetBoxMonData(&dayCareData->mons[whichParent[i]], MON_DATA_SPEED_IV); + iv = GetBoxMonData(&daycare->mons[whichParent[i]], MON_DATA_SPEED_IV); SetMonData(egg, MON_DATA_SPEED_IV, &iv); break; case 4: - iv = GetBoxMonData(&dayCareData->mons[whichParent[i]], MON_DATA_SPATK_IV); + iv = GetBoxMonData(&daycare->mons[whichParent[i]], MON_DATA_SPATK_IV); SetMonData(egg, MON_DATA_SPATK_IV, &iv); break; case 5: - iv = GetBoxMonData(&dayCareData->mons[whichParent[i]], MON_DATA_SPDEF_IV); + iv = GetBoxMonData(&daycare->mons[whichParent[i]], MON_DATA_SPDEF_IV); SetMonData(egg, MON_DATA_SPDEF_IV, &iv); break; } @@ -407,17 +469,19 @@ static void InheritIVs(struct Pokemon *egg, struct DayCareData *dayCareData) #ifdef NONMATCHING static #endif -u8 pokemon_get_eggmoves(struct Pokemon *pokemon, u16 *eggMoves) +// Counts the number of egg moves a pokemon learns and stores the moves in +// the given array. +u8 GetEggMoves(struct Pokemon *pokemon, u16 *eggMoves) { u16 eggMoveIdx; - u16 numMovesFound; + u16 numEggMoves; u16 species; u16 i; - numMovesFound = 0; + numEggMoves = 0; eggMoveIdx = 0; species = GetMonData(pokemon, MON_DATA_SPECIES); - for (i = 0; i < ARRAY_COUNT(gEggMoves) - 1; i ++) + for (i = 0; i < ARRAY_COUNT(gEggMoves) - 1; i++) { if (gEggMoves[i] == species + EGG_MOVES_SPECIES_OFFSET) { @@ -425,57 +489,61 @@ u8 pokemon_get_eggmoves(struct Pokemon *pokemon, u16 *eggMoves) break; } } - for (i = 0; i < 10; i ++) + + for (i = 0; i < 10; i++) { if (gEggMoves[eggMoveIdx + i] > EGG_MOVES_SPECIES_OFFSET) { + // TODO: the curly braces around this if statement are required for a matching build. break; } + eggMoves[i] = gEggMoves[eggMoveIdx + i]; - numMovesFound++; + numEggMoves++; } - return numMovesFound; + + return numEggMoves; } #ifdef NONMATCHING - -void daycare_build_child_moveset(struct Pokemon *egg, struct BoxPokemon *dad, struct BoxPokemon *mom) +void BuildEggMoveset(struct Pokemon *egg, struct BoxPokemon *father, struct BoxPokemon *mother) { u16 numSharedParentMoves; u8 numLevelUpMoves; - u8 numEggMoves; + u16 numEggMoves; u16 i, j; numSharedParentMoves = 0; - for (i = 0; i < 4; i ++) + for (i = 0; i < 4; i++) { - gUnknown_03000500[i] = 0; - gUnknown_030004D8[i] = 0; - gUnknown_030004E0[i] = 0; + gHatchedEggMotherMoves[i] = 0; + gHatchedEggFatherMoves[i] = 0; + gHatchedEggFinalMoves[i] = 0; } - for (i = 0; i < 10; i ++) - gUnknown_030004E8[i] = 0; - for (i = 0; i < 50; i ++) - gUnknown_03000470[i] = 0; + for (i = 0; i < 10; i++) + gHatchedEggEggMoves[i] = 0; + for (i = 0; i < 50; i++) + gHatchedEggLevelUpMoves[i] = 0; - numLevelUpMoves = GetLevelUpMovesBySpecies(GetMonData(egg, MON_DATA_SPECIES), gUnknown_03000470); - for (i = 0; i < 4; i ++) + numLevelUpMoves = GetLevelUpMovesBySpecies(GetMonData(egg, MON_DATA_SPECIES), gHatchedEggLevelUpMoves); + for (i = 0; i < 4; i++) { - gUnknown_030004D8[i] = GetBoxMonData(dad, MON_DATA_MOVE1 + i); - gUnknown_03000500[i] = GetBoxMonData(mom, MON_DATA_MOVE1 + i); + gHatchedEggFatherMoves[i] = GetBoxMonData(father, MON_DATA_MOVE1 + i); + gHatchedEggMotherMoves[i] = GetBoxMonData(mother, MON_DATA_MOVE1 + i); } - numEggMoves = pokemon_get_eggmoves(egg, gUnknown_030004E8); - for (i = 0; i < 4; i ++) + numEggMoves = GetEggMoves(egg, gHatchedEggEggMoves); + + for (i = 0; i < 4; i++) { - if (gUnknown_030004D8[i] != MOVE_NONE) + if (gHatchedEggFatherMoves[i] != MOVE_NONE) { - for (j = 0; j < numEggMoves; j ++) + for (j = 0; j < (u32)numEggMoves; j++) { - if (gUnknown_030004D8[i] == gUnknown_030004E8[j]) + if (gHatchedEggFatherMoves[i] == gHatchedEggEggMoves[j]) { - if (GiveMoveToMon(egg, gUnknown_030004D8[i]) == 0xffff) - DeleteFirstMoveAndGiveMoveToMon(egg, gUnknown_030004D8[i]); + if (GiveMoveToMon(egg, gHatchedEggFatherMoves[i]) == 0xffff) + DeleteFirstMoveAndGiveMoveToMon(egg, gHatchedEggFatherMoves[i]); break; } } @@ -483,40 +551,41 @@ void daycare_build_child_moveset(struct Pokemon *egg, struct BoxPokemon *dad, st else break; } - for (i = 0; i < 4; i ++) + for (i = 0; i < 4; i++) { - if (gUnknown_030004D8[i] != MOVE_NONE) + if (gHatchedEggFatherMoves[i] != MOVE_NONE) { - for (j = 0; j < 50 + 8; j ++) + for (j = 0; j < NUM_TECHNICAL_MACHINES + NUM_HIDDEN_MACHINES; j++) { - if (gUnknown_030004D8[i] == ItemIdToBattleMoveId(ITEM_TM01 + j) && CanMonLearnTMHM(egg, j)) + if (gHatchedEggFatherMoves[i] == ItemIdToBattleMoveId(ITEM_TM01 + j) && CanMonLearnTMHM(egg, j)) { - if (GiveMoveToMon(egg, gUnknown_030004D8[i]) == 0xffff) - DeleteFirstMoveAndGiveMoveToMon(egg, gUnknown_030004D8[i]); + if (GiveMoveToMon(egg, gHatchedEggFatherMoves[i]) == 0xffff) + DeleteFirstMoveAndGiveMoveToMon(egg, gHatchedEggFatherMoves[i]); } } } } - for (i = 0; i < 4; i ++) + for (i = 0; i < 4; i++) { - if (gUnknown_030004D8[i] == MOVE_NONE) + if (gHatchedEggFatherMoves[i] == MOVE_NONE) break; - for (j = 0; j < 4; j ++) + for (j = 0; j < 4; j++) { - if (gUnknown_030004D8[i] == gUnknown_03000500[j] && gUnknown_030004D8[i] != MOVE_NONE) - gUnknown_030004E0[numSharedParentMoves++] = gUnknown_030004D8[i]; + if (gHatchedEggFatherMoves[i] == gHatchedEggMotherMoves[j] && gHatchedEggFatherMoves[i] != MOVE_NONE) + gHatchedEggFinalMoves[numSharedParentMoves++] = gHatchedEggFatherMoves[i]; } } - for (i = 0; i < 4; i ++) + + for (i = 0; i < 4; i++) { - if (gUnknown_030004E0[i] == MOVE_NONE) + if (gHatchedEggFinalMoves[i] == MOVE_NONE) break; - for (j = 0; j < numLevelUpMoves; j ++) + for (j = 0; j < numLevelUpMoves; j++) { - if (gUnknown_03000470[j] != MOVE_NONE && gUnknown_030004E0[i] == gUnknown_03000470[j]) + if (gHatchedEggLevelUpMoves[j] != MOVE_NONE && gHatchedEggFinalMoves[i] == gHatchedEggLevelUpMoves[j]) { - if (GiveMoveToMon(egg, gUnknown_030004E0[i]) == 0xffff) - DeleteFirstMoveAndGiveMoveToMon(egg, gUnknown_030004E0[i]); + if (GiveMoveToMon(egg, gHatchedEggFinalMoves[i]) == 0xffff) + DeleteFirstMoveAndGiveMoveToMon(egg, gHatchedEggFinalMoves[i]); break; } } @@ -524,7 +593,7 @@ void daycare_build_child_moveset(struct Pokemon *egg, struct BoxPokemon *dad, st } #else __attribute__((naked)) -void daycare_build_child_moveset(struct Pokemon *egg, struct BoxPokemon *dad, struct BoxPokemon *mom) +void BuildEggMoveset(struct Pokemon *egg, struct BoxPokemon *father, struct BoxPokemon *mother) { asm_unified("\tpush {r4-r7,lr}\n" "\tmov r7, r10\n" @@ -538,10 +607,10 @@ void daycare_build_child_moveset(struct Pokemon *egg, struct BoxPokemon *dad, st "\tmovs r0, 0\n" "\tstr r0, [sp]\n" "\tmovs r6, 0\n" - "\tldr r5, _08041CC8 @ =gUnknown_03000500\n" + "\tldr r5, _08041CC8 @ =gHatchedEggMotherMoves\n" "\tmovs r2, 0\n" - "\tldr r4, _08041CCC @ =gUnknown_030004D8\n" - "\tldr r3, _08041CD0 @ =gUnknown_030004E0\n" + "\tldr r4, _08041CCC @ =gHatchedEggFatherMoves\n" + "\tldr r3, _08041CD0 @ =gHatchedEggFinalMoves\n" "_08041BE4:\n" "\tlsls r1, r6, 1\n" "\tadds r0, r1, r5\n" @@ -556,7 +625,7 @@ void daycare_build_child_moveset(struct Pokemon *egg, struct BoxPokemon *dad, st "\tcmp r6, 0x3\n" "\tbls _08041BE4\n" "\tmovs r6, 0\n" - "\tldr r2, _08041CD4 @ =gUnknown_030004E8\n" + "\tldr r2, _08041CD4 @ =gHatchedEggEggMoves\n" "\tmovs r1, 0\n" "_08041C02:\n" "\tlsls r0, r6, 1\n" @@ -568,7 +637,7 @@ void daycare_build_child_moveset(struct Pokemon *egg, struct BoxPokemon *dad, st "\tcmp r6, 0x9\n" "\tbls _08041C02\n" "\tmovs r6, 0\n" - "\tldr r2, _08041CD8 @ =gUnknown_03000470\n" + "\tldr r2, _08041CD8 @ =gHatchedEggLevelUpMoves\n" "\tmovs r1, 0\n" "_08041C18:\n" "\tlsls r0, r6, 1\n" @@ -584,13 +653,13 @@ void daycare_build_child_moveset(struct Pokemon *egg, struct BoxPokemon *dad, st "\tbl GetMonData\n" "\tlsls r0, 16\n" "\tlsrs r0, 16\n" - "\tldr r1, _08041CD8 @ =gUnknown_03000470\n" + "\tldr r1, _08041CD8 @ =gHatchedEggLevelUpMoves\n" "\tbl GetLevelUpMovesBySpecies\n" "\tlsls r0, 24\n" "\tlsrs r0, 24\n" "\tstr r0, [sp, 0x4]\n" "\tmovs r6, 0\n" - "\tldr r1, _08041CCC @ =gUnknown_030004D8\n" + "\tldr r1, _08041CCC @ =gHatchedEggFatherMoves\n" "\tmov r8, r1\n" "_08041C46:\n" "\tadds r5, r6, 0\n" @@ -605,7 +674,7 @@ void daycare_build_child_moveset(struct Pokemon *egg, struct BoxPokemon *dad, st "\tmov r0, r9\n" "\tadds r1, r5, 0\n" "\tbl GetBoxMonData\n" - "\tldr r1, _08041CC8 @ =gUnknown_03000500\n" + "\tldr r1, _08041CC8 @ =gHatchedEggMotherMoves\n" "\tadds r4, r1\n" "\tstrh r0, [r4]\n" "\tadds r0, r6, 0x1\n" @@ -613,15 +682,15 @@ void daycare_build_child_moveset(struct Pokemon *egg, struct BoxPokemon *dad, st "\tlsrs r6, r0, 16\n" "\tcmp r6, 0x3\n" "\tbls _08041C46\n" - "\tldr r1, _08041CD4 @ =gUnknown_030004E8\n" + "\tldr r1, _08041CD4 @ =gHatchedEggEggMoves\n" "\tadds r0, r7, 0\n" - "\tbl pokemon_get_eggmoves\n" + "\tbl GetEggMoves\n" "\tlsls r0, 24\n" "\tlsrs r0, 24\n" "\tmov r8, r0\n" "\tmovs r6, 0\n" "_08041C82:\n" - "\tldr r0, _08041CCC @ =gUnknown_030004D8\n" + "\tldr r0, _08041CCC @ =gHatchedEggFatherMoves\n" "\tlsls r1, r6, 1\n" "\tadds r2, r1, r0\n" "\tldrh r1, [r2]\n" @@ -634,7 +703,7 @@ void daycare_build_child_moveset(struct Pokemon *egg, struct BoxPokemon *dad, st "\tadds r4, r2, 0\n" "\tldr r2, _08041CDC @ =0x0000ffff\n" "_08041C9A:\n" - "\tldr r0, _08041CD4 @ =gUnknown_030004E8\n" + "\tldr r0, _08041CD4 @ =gHatchedEggEggMoves\n" "\tlsls r1, r5, 1\n" "\tadds r1, r0\n" "\tldrh r0, [r4]\n" @@ -655,11 +724,11 @@ void daycare_build_child_moveset(struct Pokemon *egg, struct BoxPokemon *dad, st "\tbl DeleteFirstMoveAndGiveMoveToMon\n" "\tb _08041CEA\n" "\t.align 2, 0\n" - "_08041CC8: .4byte gUnknown_03000500\n" - "_08041CCC: .4byte gUnknown_030004D8\n" - "_08041CD0: .4byte gUnknown_030004E0\n" - "_08041CD4: .4byte gUnknown_030004E8\n" - "_08041CD8: .4byte gUnknown_03000470\n" + "_08041CC8: .4byte gHatchedEggMotherMoves\n" + "_08041CCC: .4byte gHatchedEggFatherMoves\n" + "_08041CD0: .4byte gHatchedEggFinalMoves\n" + "_08041CD4: .4byte gHatchedEggEggMoves\n" + "_08041CD8: .4byte gHatchedEggLevelUpMoves\n" "_08041CDC: .4byte 0x0000ffff\n" "_08041CE0:\n" "\tadds r0, r5, 0x1\n" @@ -671,7 +740,7 @@ void daycare_build_child_moveset(struct Pokemon *egg, struct BoxPokemon *dad, st "\tadds r0, r6, 0x1\n" "\tlsls r0, 16\n" "\tlsrs r6, r0, 16\n" - "\tldr r3, _08041E14 @ =gUnknown_030004D8\n" + "\tldr r3, _08041E14 @ =gHatchedEggFatherMoves\n" "\tmov r9, r3\n" "\tcmp r6, 0x3\n" "\tbls _08041C82\n" @@ -688,7 +757,7 @@ void daycare_build_child_moveset(struct Pokemon *egg, struct BoxPokemon *dad, st "\tcmp r1, 0\n" "\tbeq _08041D5C\n" "\tmovs r5, 0\n" - "\tldr r0, _08041E14 @ =gUnknown_030004D8\n" + "\tldr r0, _08041E14 @ =gHatchedEggFatherMoves\n" "\tadds r4, r2, r0\n" "\tldr r6, _08041E18 @ =0x0000ffff\n" "\tmov r9, r0\n" @@ -734,12 +803,12 @@ void daycare_build_child_moveset(struct Pokemon *egg, struct BoxPokemon *dad, st "\tmovs r6, 0\n" "\tmov r2, r9\n" "\tldrh r0, [r2]\n" - "\tldr r3, _08041E20 @ =gUnknown_030004E0\n" + "\tldr r3, _08041E20 @ =gHatchedEggFinalMoves\n" "\tmov r10, r3\n" "\tcmp r0, 0\n" "\tbeq _08041DC6\n" "\tmov r4, r9\n" - "\tldr r0, _08041E24 @ =gUnknown_03000500\n" + "\tldr r0, _08041E24 @ =gHatchedEggMotherMoves\n" "\tmov r9, r0\n" "\tmov r12, r10\n" "_08041D7C:\n" @@ -797,7 +866,7 @@ void daycare_build_child_moveset(struct Pokemon *egg, struct BoxPokemon *dad, st "\tbcs _08041E38\n" "\tldr r2, _08041E18 @ =0x0000ffff\n" "_08041DDE:\n" - "\tldr r1, _08041E28 @ =gUnknown_03000470\n" + "\tldr r1, _08041E28 @ =gHatchedEggLevelUpMoves\n" "\tlsls r0, r5, 1\n" "\tadds r0, r1\n" "\tldrh r1, [r0]\n" @@ -823,12 +892,12 @@ void daycare_build_child_moveset(struct Pokemon *egg, struct BoxPokemon *dad, st "\tbl DeleteFirstMoveAndGiveMoveToMon\n" "\tb _08041E38\n" "\t.align 2, 0\n" - "_08041E14: .4byte gUnknown_030004D8\n" + "_08041E14: .4byte gHatchedEggFatherMoves\n" "_08041E18: .4byte 0x0000ffff\n" "_08041E1C: .4byte 0x00000121\n" - "_08041E20: .4byte gUnknown_030004E0\n" - "_08041E24: .4byte gUnknown_03000500\n" - "_08041E28: .4byte gUnknown_03000470\n" + "_08041E20: .4byte gHatchedEggFinalMoves\n" + "_08041E24: .4byte gHatchedEggMotherMoves\n" + "_08041E28: .4byte gHatchedEggLevelUpMoves\n" "_08041E2C:\n" "\tadds r0, r5, 0x1\n" "\tlsls r0, 16\n" @@ -842,7 +911,7 @@ void daycare_build_child_moveset(struct Pokemon *egg, struct BoxPokemon *dad, st "\tlsrs r6, r0, 16\n" "\tcmp r6, 0x3\n" "\tbhi _08041E50\n" - "\tldr r0, _08041E60 @ =gUnknown_030004E0\n" + "\tldr r0, _08041E60 @ =gHatchedEggFinalMoves\n" "\tlsls r1, r6, 1\n" "\tadds r1, r0\n" "\tldrh r1, [r1]\n" @@ -859,166 +928,178 @@ void daycare_build_child_moveset(struct Pokemon *egg, struct BoxPokemon *dad, st "\tpop {r0}\n" "\tbx r0\n" "\t.align 2, 0\n" - "_08041E60: .4byte gUnknown_030004E0"); + "_08041E60: .4byte gHatchedEggFinalMoves"); } #endif -static void RemoveEggFromDayCare(struct DayCareData *dayCareData) +static void RemoveEggFromDayCare(struct DayCare *daycare) { - dayCareData->misc.countersEtc.personalityLo = 0; - dayCareData->misc.countersEtc.unk_11a = 0; + daycare->misc.countersEtc.pendingEggPersonality = 0; + daycare->misc.countersEtc.eggCycleStepsRemaining = 0; } -void sub_8041E7C(void) +void RejectEggFromDayCare(void) { - RemoveEggFromDayCare(&gSaveBlock1.daycareData); + RemoveEggFromDayCare(&gSaveBlock1.daycare); } -static void incense_effects(u16 *species, struct DayCareData *dayCareData) +static void AlterEggSpeciesWithIncenseItem(u16 *species, struct DayCare *daycare) { - u16 momItem, dadItem; + u16 motherItem, fatherItem; if (*species == SPECIES_WYNAUT || *species == SPECIES_AZURILL) { - momItem = GetBoxMonData(&dayCareData->mons[0], MON_DATA_HELD_ITEM); - dadItem = GetBoxMonData(&dayCareData->mons[1], MON_DATA_HELD_ITEM); - if (*species == SPECIES_WYNAUT && momItem != ITEM_LAX_INCENSE && dadItem != ITEM_LAX_INCENSE) + motherItem = GetBoxMonData(&daycare->mons[0], MON_DATA_HELD_ITEM); + fatherItem = GetBoxMonData(&daycare->mons[1], MON_DATA_HELD_ITEM); + if (*species == SPECIES_WYNAUT && motherItem != ITEM_LAX_INCENSE && fatherItem != ITEM_LAX_INCENSE) { *species = SPECIES_WOBBUFFET; } - if (*species == SPECIES_AZURILL && momItem != ITEM_SEA_INCENSE && dadItem != ITEM_SEA_INCENSE) + + if (*species == SPECIES_AZURILL && motherItem != ITEM_SEA_INCENSE && fatherItem != ITEM_SEA_INCENSE) { *species = SPECIES_MARILL; } } } -static u16 sub_8041EEC(struct DayCareData *dayCareData, u8 *a1) // inherit_species_from_mom +static u16 DetermineEggSpeciesAndParentSlots(struct DayCare *daycare, u8 *parentSlots) { u16 i; u16 species[2]; u16 eggSpecies; - u8 buffer; - for (i=0; i<2; i++) + + // Determine which of the daycare mons is the mother and father of the egg. + // The 0th index of the parentSlots array is considered the mother slot, and the + // 1st index is the father slot. + for (i = 0; i < 2; i++) { - species[i] = GetBoxMonData(&dayCareData->mons[i], MON_DATA_SPECIES); + species[i] = GetBoxMonData(&daycare->mons[i], MON_DATA_SPECIES); if (species[i] == SPECIES_DITTO) { - a1[0] = i ^ 1; - a1[1] = i; + parentSlots[0] = i ^ 1; + parentSlots[1] = i; } - else if (GetBoxMonGender(&dayCareData->mons[i]) == MON_FEMALE) + else if (GetBoxMonGender(&daycare->mons[i]) == MON_FEMALE) { - a1[0] = i; - a1[1] = i ^ 1; + parentSlots[0] = i; + parentSlots[1] = i ^ 1; } } - eggSpecies = sub_8041870(species[a1[0]]); - if (eggSpecies == SPECIES_NIDORAN_F && dayCareData->misc.countersEtc.personalityLo & 0x8000) + + eggSpecies = GetEggSpecies(species[parentSlots[0]]); + if (eggSpecies == SPECIES_NIDORAN_F && daycare->misc.countersEtc.pendingEggPersonality & 0x8000) { eggSpecies = SPECIES_NIDORAN_M; } - if (eggSpecies == SPECIES_ILLUMISE && dayCareData->misc.countersEtc.personalityLo & 0x8000) + if (eggSpecies == SPECIES_ILLUMISE && daycare->misc.countersEtc.pendingEggPersonality & 0x8000) { eggSpecies = SPECIES_VOLBEAT; } - if (species[a1[1]] == SPECIES_DITTO && GetBoxMonGender(&dayCareData->mons[a1[0]]) != MON_FEMALE) + + // Make Ditto the "mother" slot if the other daycare mon is male. + if (species[parentSlots[1]] == SPECIES_DITTO && GetBoxMonGender(&daycare->mons[parentSlots[0]]) != MON_FEMALE) { - buffer = a1[1]; - a1[1] = a1[0]; - a1[0] = buffer; + u8 temp = parentSlots[1]; + parentSlots[1] = parentSlots[0]; + parentSlots[0] = temp; } + return eggSpecies; } -static void sub_8041FC4(struct DayCareData *dayCareData) // give_egg +static void _GiveEggFromDaycare(struct DayCare *daycare) // give_egg { struct Pokemon egg; u16 species; - u8 parents[2]; + u8 parentSlots[2]; // 0th index is "mother" daycare slot, 1st is "father" u8 isEgg; - species = sub_8041EEC(dayCareData, parents); - incense_effects(&species, dayCareData); - sub_80420FC(&egg, species, dayCareData); - InheritIVs(&egg, dayCareData); - daycare_build_child_moveset(&egg, &dayCareData->mons[parents[1]], &dayCareData->mons[parents[0]]); + + species = DetermineEggSpeciesAndParentSlots(daycare, parentSlots); + AlterEggSpeciesWithIncenseItem(&species, daycare); + SetInitialEggData(&egg, species, daycare); + InheritIVs(&egg, daycare); + BuildEggMoveset(&egg, &daycare->mons[parentSlots[1]], &daycare->mons[parentSlots[0]]); isEgg = TRUE; SetMonData(&egg, MON_DATA_IS_EGG, &isEgg); gPlayerParty[5] = egg; party_compaction(); CalculatePlayerPartyCount(); - RemoveEggFromDayCare(dayCareData); + RemoveEggFromDayCare(daycare); } -void sub_8042044(struct Pokemon *mon, u16 species, u8 overwriteMetLocation) // scr_create_egg +void CreateEgg(struct Pokemon *mon, u16 species, bool8 setMetLocation) { u8 metLevel; u16 ball; u8 language; u8 metLocation; u8 isEgg; + CreateMon(mon, species, 5, 0x20, FALSE, 0, FALSE, 0); metLevel = 0; ball = ITEM_POKE_BALL; language = LANGUAGE_JAPANESE; SetMonData(mon, MON_DATA_POKEBALL, &ball); - SetMonData(mon, MON_DATA_NICKNAME, gUnknown_08209AD4); + SetMonData(mon, MON_DATA_NICKNAME, sJapaneseEggNickname); SetMonData(mon, MON_DATA_FRIENDSHIP, &gBaseStats[species].eggCycles); SetMonData(mon, MON_DATA_MET_LEVEL, &metLevel); SetMonData(mon, MON_DATA_LANGUAGE, &language); - if (overwriteMetLocation) + if (setMetLocation) { - metLocation = 0xfd; + metLocation = 253; // hot springs; see PokemonSummaryScreen_PrintEggTrainerMemo SetMonData(mon, MON_DATA_MET_LOCATION, &metLocation); } + isEgg = TRUE; SetMonData(mon, MON_DATA_IS_EGG, &isEgg); } -static void sub_80420FC(struct Pokemon *mon, u16 species, struct DayCareData *dayCareData) +static void SetInitialEggData(struct Pokemon *mon, u16 species, struct DayCare *daycare) { u32 personality; u16 ball; u8 metLevel; u8 language; - personality = dayCareData->misc.countersEtc.personalityLo | (Random() << 16); + + personality = daycare->misc.countersEtc.pendingEggPersonality | (Random() << 16); CreateMon(mon, species, 5, 0x20, TRUE, personality, FALSE, 0); metLevel = 0; ball = ITEM_POKE_BALL; language = LANGUAGE_JAPANESE; SetMonData(mon, MON_DATA_POKEBALL, &ball); - SetMonData(mon, MON_DATA_NICKNAME, gUnknown_08209AD4); + SetMonData(mon, MON_DATA_NICKNAME, sJapaneseEggNickname); SetMonData(mon, MON_DATA_FRIENDSHIP, &gBaseStats[species].eggCycles); SetMonData(mon, MON_DATA_MET_LEVEL, &metLevel); SetMonData(mon, MON_DATA_LANGUAGE, &language); } -void sp0B8_daycare(void) +void GiveEggFromDaycare(void) { - sub_8041FC4(&gSaveBlock1.daycareData); + _GiveEggFromDaycare(&gSaveBlock1.daycare); } #ifdef NONMATCHING -static bool8 sub_80421B0(struct DayCareData *dayCareData) +static bool8 _ShouldEggHatch(struct DayCare *daycare) { struct BoxPokemon *parent; u32 i; int v0; int steps; v0 = 0; - for (i=0, parent=&dayCareData->mons[0]; i<2; parent++, i++) + for (i=0, parent=&daycare->mons[0]; i<2; parent++, i++) { if (GetBoxMonData(parent, MON_DATA_SANITY_BIT2, v0)) { - dayCareData->misc.countersEtc.steps[i]++; + daycare->misc.countersEtc.steps[i]++; v0++; } } - if (dayCareData->misc.countersEtc.personalityLo == 0 && v0 == 2 && dayCareData->misc.extra.misc[4] == 0xff && daycare_relationship_score(dayCareData) > (u32)((u32)(Random() * 100) / 0xffff)) + if (daycare->misc.countersEtc.pendingEggPersonality == 0 && v0 == 2 && daycare->misc.extra.misc[4] == 0xff && GetDaycareCompatibilityScore(daycare) > (u32)((u32)(Random() * 100) / 0xffff)) { - sub_8041940(); + TriggerPendingDaycareEgg(); } - if ((++dayCareData->misc.countersEtc.unk_11a) == 0xff) + if ((++daycare->misc.countersEtc.eggCycleStepsRemaining) == 0xff) { for (i=0; imisc.countersEtc.personalityLo) | dayCareData->misc.countersEtc.personalityLo) >> 31; + return (u32)((-daycare->misc.countersEtc.pendingEggPersonality) | daycare->misc.countersEtc.pendingEggPersonality) >> 31; } -static void sub_80422C4(struct DayCareData *dayCareData) +static void _GetDaycareMonNicknames(struct DayCare *daycare) { u8 language; - if (GetBoxMonData(&dayCareData->mons[0], MON_DATA_SPECIES) != 0) + if (GetBoxMonData(&daycare->mons[0], MON_DATA_SPECIES) != 0) { - GetBoxMonNick(&dayCareData->mons[0], gStringVar1); - language = GetBoxMonData(&dayCareData->mons[0], MON_DATA_LANGUAGE); - GetBoxMonData(&dayCareData->mons[0], MON_DATA_OT_NAME, gStringVar3); + GetBoxMonNick(&daycare->mons[0], gStringVar1); + language = GetBoxMonData(&daycare->mons[0], MON_DATA_LANGUAGE); + GetBoxMonData(&daycare->mons[0], MON_DATA_OT_NAME, gStringVar3); ConvertInternationalString(gStringVar3, language); } - if (GetBoxMonData(&dayCareData->mons[1], MON_DATA_SPECIES) != 0) + + if (GetBoxMonData(&daycare->mons[1], MON_DATA_SPECIES) != 0) { - GetBoxMonNick(&dayCareData->mons[1], gStringVar2); + GetBoxMonNick(&daycare->mons[1], gStringVar2); } } -u16 sub_8042328(void) +u16 GetSelectedDaycareMonNickname(void) { GetBoxMonNick(&gPlayerParty[gLastFieldPokeMenuOpened].box, gStringVar1); return GetBoxMonData(&gPlayerParty[gLastFieldPokeMenuOpened].box, MON_DATA_SPECIES); } -void sp0B5_daycare(void) +void GetDaycareMonNicknames(void) { - sub_80422C4(&gSaveBlock1.daycareData); + _GetDaycareMonNicknames(&gSaveBlock1.daycare); } -u8 sp0B6_daycare(void) +u8 GetDaycareState(void) { - u8 monCount; - if (sub_80422B4(&gSaveBlock1.daycareData)) + // The daycare can be in 4 possible states: + // 0: default state--no deposited mons, no egg + // 1: there is an egg waiting for the player to pick it up + // 2: there is a single pokemon in the daycare + // 3: there are two pokemon in the daycare, no egg + + u8 numMons; + if (IsEggPending(&gSaveBlock1.daycare)) { + // There is an Egg waiting for the player. return 1; } - monCount = Daycare_CountPokemon(&gSaveBlock1.daycareData); - if (monCount != 0) + + numMons = CountPokemonInDaycare(&gSaveBlock1.daycare); + if (numMons != 0) { - return monCount + 1; + return numMons + 1; } + return 0; } #ifdef NONMATCHING static #endif -bool8 sub_80423A8(u16 *a, u16 *b) +bool8 EggGroupsOverlap(u16 *eggGroups1, u16 *eggGroups2) { - int i, j; + // Determine if the two given egg group lists contain any of the + // same egg groups. + s32 i, j; u16 *v0, *v1, v2; - for (i=0, v0=a; i<2; v0++, i++) + + for (i = 0, v0 = eggGroups1; i < 2; v0++, i++) { - for (j=0, v2=*v0, v1=b; j<2; v1++, j++) + for (j = 0, v2 = *v0, v1 = eggGroups2; j < 2; v1++, j++) { if (v2 == *v1) { @@ -1231,11 +1325,12 @@ bool8 sub_80423A8(u16 *a, u16 *b) } } } + return FALSE; } #ifdef NONMATCHING -static u8 daycare_relationship_score(struct DayCareData *dayCareData) +static u8 GetDaycareCompatibilityScore(struct DayCare *daycare) { u16 species[2]; u32 otIds[2]; @@ -1248,7 +1343,8 @@ static u8 daycare_relationship_score(struct DayCareData *dayCareData) u16 *egg1; u16 *egg2; struct BoxPokemon *parent; - for (i=0, parent=&dayCareData->mons[0], spc=species, ids=otIds, gnd=genders, egg1=&eggGroups[0][0], egg2=&eggGroups[0][1]; i<2; spc++, egg1+=2, egg2+=2, parent++, i++) + + for (i=0, parent=&daycare->mons[0], spc=species, ids=otIds, gnd=genders, egg1=&eggGroups[0][0], egg2=&eggGroups[0][1]; i<2; spc++, egg1+=2, egg2+=2, parent++, i++) { *spc = GetBoxMonData(parent, MON_DATA_SPECIES); *ids++ = GetBoxMonData(parent, MON_DATA_OT_ID); @@ -1280,7 +1376,7 @@ static u8 daycare_relationship_score(struct DayCareData *dayCareData) { return 0; } - if (!sub_80423A8(eggGroups[0], eggGroups[1])) + if (!EggGroupsOverlap(eggGroups[0], eggGroups[1])) { return 0; } @@ -1303,7 +1399,7 @@ static u8 daycare_relationship_score(struct DayCareData *dayCareData) } #else __attribute__((naked)) -static u8 daycare_relationship_score(struct DayCareData *dayCareData) +static u8 GetDaycareCompatibilityScore(struct DayCare *daycare) { asm_unified("\tpush {r4-r7,lr}\n" "\tmov r7, r10\n" @@ -1415,7 +1511,7 @@ static u8 daycare_relationship_score(struct DayCareData *dayCareData) "\tbeq _08042484\n" "\tadd r1, sp, 0x4\n" "\tmov r0, sp\n" - "\tbl sub_80423A8\n" + "\tbl EggGroupsOverlap\n" "\tlsls r0, 24\n" "\tcmp r0, 0\n" "\tbeq _08042484\n" @@ -1454,17 +1550,17 @@ static u8 daycare_relationship_score(struct DayCareData *dayCareData) } #endif -u8 daycare_relationship_score_from_savegame(void) +u8 GetDaycareCompatibilityScoreFromSave(void) { - return daycare_relationship_score(&gSaveBlock1.daycareData); + return GetDaycareCompatibilityScore(&gSaveBlock1.daycare); } -void sp0B9_daycare_relationship_comment(void) +void SetDaycareCompatibilityString(void) { u8 whichString; u8 relationshipScore; - relationshipScore = daycare_relationship_score_from_savegame(); + relationshipScore = GetDaycareCompatibilityScoreFromSave(); whichString = 0; if (relationshipScore == 0) whichString = 3; @@ -1474,7 +1570,8 @@ void sp0B9_daycare_relationship_comment(void) whichString = 1; if (relationshipScore == 70) whichString = 0; - StringCopy(gStringVar4, gUnknown_08209AC4[whichString]); + + StringCopy(gStringVar4, sCompatibilityMessages[whichString]); } #ifdef NONMATCHING @@ -1486,12 +1583,12 @@ bool8 NameHasGenderSymbol(const u8 *name, u8 genderRatio) // This portion is nonmatching flags[1] = 0; flags[0] = 0; - for (i = 0; name[i] != EOS; i ++) + for (i = 0; name[i] != EOS; i++) // End nonmatching portion { - if (name[i] == CHAR_MALE) flags[0] ++; - if (name[i] == CHAR_FEMALE) flags[1] ++; + if (name[i] == CHAR_MALE) flags[0]++; + if (name[i] == CHAR_FEMALE) flags[1]++; } if (genderRatio == MON_MALE && flags[0] && !flags[1]) return TRUE; if (genderRatio == MON_FEMALE && flags[1] && !flags[0]) return TRUE; @@ -1581,45 +1678,48 @@ static u8 *AppendGenderSymbol(u8 *name, u8 gender) if (!NameHasGenderSymbol(name, MON_MALE)) return StringAppend(name, gOtherText_MaleSymbol3); } - else if (gender == MON_FEMALE) { if (!NameHasGenderSymbol(name, MON_FEMALE)) return StringAppend(name, gOtherText_FemaleSymbol3); } + return StringAppend(name, gOtherText_GenderlessSymbol); } -static u8 *MonAppendGenderSymbol(u8 *name, struct BoxPokemon *boxMon) +static u8 *AppendMonGenderSymbol(u8 *name, struct BoxPokemon *boxMon) { return AppendGenderSymbol(name, GetBoxMonGender(boxMon)); } -static void DaycareLevelMenuGetText(struct DayCareData *dayCareData, u8 *dest) +static void GetDaycareLevelMenuText(struct DayCare *daycare, u8 *dest) { - u8 buffers[2][20]; + u8 monNames[2][20]; u8 i; + *dest = EOS; - for (i = 0; i < 2; i ++) + for (i = 0; i < 2; i++) { - GetBoxMonNick(&dayCareData->mons[i], buffers[i]); - MonAppendGenderSymbol(buffers[i], &dayCareData->mons[i]); + GetBoxMonNick(&daycare->mons[i], monNames[i]); + AppendMonGenderSymbol(monNames[i], &daycare->mons[i]); } - StringCopy(dest, buffers[0]); + + StringCopy(dest, monNames[0]); StringAppend(dest, gOtherText_NewLine2); - StringAppend(dest, buffers[1]); + StringAppend(dest, monNames[1]); StringAppend(dest, gOtherText_NewLine2); StringAppend(dest, gOtherText_CancelAndLv); } -static void DaycareLevelMenuGetLevelText(struct DayCareData *dayCareData, u8 *dest) +static void GetDaycareLevelMenuLevelText(struct DayCare *daycare, u8 *dest) { u8 i; u8 level; + *dest = EOS; - for (i = 0; i < 2; i ++) + for (i = 0; i < 2; i++) { - level = Daycare_GetLevelAfterSteps(&dayCareData->mons[i], dayCareData->misc.countersEtc.steps[i]); + level = GetLevelAfterDaycareSteps(&daycare->mons[i], daycare->misc.countersEtc.steps[i]); dest[0] = 0x34; dest[1] = 0xFC; dest[2] = 0x14; @@ -1630,10 +1730,11 @@ static void DaycareLevelMenuGetLevelText(struct DayCareData *dayCareData, u8 *de dest[2] = 0x00; dest = StringCopy(dest + 3, gOtherText_NewLine2); } + *dest = EOS; } -static void DaycareLevelMenuProcessKeyInput(u8 taskId) +static void HandleDaycareLevelMenuInput(u8 taskId) { if (gMain.newKeys & DPAD_UP) { @@ -1648,7 +1749,7 @@ static void DaycareLevelMenuProcessKeyInput(u8 taskId) { if (gTasks[taskId].data[0] != 2) { - gTasks[taskId].data[0] ++; + gTasks[taskId].data[0]++; MoveMenuCursor(+1); PlaySE(SE_SELECT); } @@ -1676,12 +1777,12 @@ void ShowDaycareLevelMenu(void) { u8 buffer[100]; MenuDrawTextWindow(15, 6, 29, 13); - DaycareLevelMenuGetText(&gSaveBlock1.daycareData, buffer); + GetDaycareLevelMenuText(&gSaveBlock1.daycare, buffer); MenuPrint(buffer, 16, 7); - DaycareLevelMenuGetLevelText(&gSaveBlock1.daycareData, buffer); + GetDaycareLevelMenuLevelText(&gSaveBlock1.daycare, buffer); MenuPrint_PixelCoords(buffer, 0xce, 0x38, TRUE); InitMenu(0, 16, 7, 3, 0, 13); - CreateTask(DaycareLevelMenuProcessKeyInput, 3); + CreateTask(HandleDaycareLevelMenuInput, 3); } void ChooseSendDaycareMon(void) diff --git a/src/field/field_control_avatar.c b/src/field/field_control_avatar.c index e9dd0e9a6..c7b4861d5 100644 --- a/src/field/field_control_avatar.c +++ b/src/field/field_control_avatar.c @@ -500,9 +500,9 @@ bool8 sub_8068894(void) ScriptContext1_SetupScript(gUnknown_081A14B8); return TRUE; } - if (sub_80422A0()) + if (ShouldEggHatch()) { - IncrementGameStat(13); + IncrementGameStat(GAME_STAT_HATCHED_EGGS); ScriptContext1_SetupScript(S_EggHatch); return TRUE; } diff --git a/src/pokemon/pokemon_summary_screen.c b/src/pokemon/pokemon_summary_screen.c index d1d226b80..70b9b7d94 100644 --- a/src/pokemon/pokemon_summary_screen.c +++ b/src/pokemon/pokemon_summary_screen.c @@ -52,6 +52,7 @@ void PokemonSummaryScreen_PrintEggTrainerMemo(struct Pokemon *mon, u8 left, u8 t if (locationMet == 255) { + // Eggs received from Pokemon Box. MenuPrint(gOtherText_EggNicePlace, left, top); return; } diff --git a/src/scene/egg_hatch.c b/src/scene/egg_hatch.c index d363e4bcd..6ea26e546 100644 --- a/src/scene/egg_hatch.c +++ b/src/scene/egg_hatch.c @@ -1,26 +1,27 @@ #include "global.h" -#include "pokemon.h" -#include "items.h" -#include "decompress.h" #include "data2.h" -#include "task.h" -#include "script.h" -#include "palette.h" -#include "overworld.h" -#include "main.h" +#include "daycare.h" +#include "decompress.h" #include "event_data.h" -#include "sound.h" +#include "ewram.h" +#include "items.h" +#include "main.h" +#include "menu.h" +#include "naming_screen.h" +#include "overworld.h" +#include "palette.h" +#include "pokemon.h" +#include "rng.h" +#include "script.h" #include "songs.h" -#include "text.h" -#include "text_window.h" +#include "sound.h" #include "string_util.h" #include "strings2.h" -#include "menu.h" -#include "naming_screen.h" +#include "task.h" +#include "text.h" +#include "text_window.h" #include "trig.h" -#include "rng.h" #include "trade.h" -#include "ewram.h" extern struct SpriteTemplate gUnknown_02024E8C; @@ -47,7 +48,6 @@ extern const struct SpriteSheet sUnknown_0820A3B8; extern const struct SpritePalette sUnknown_0820A3C0; bool8 GetSetPokedexFlag(u16 nationalNum, u8 caseID); -u8* GetMonNick(struct Pokemon* mon, u8* dst); u8 sav1_map_get_name(void); const struct CompressedSpritePalette* GetMonSpritePalStruct(struct Pokemon* mon); //gets pokemon palette address void sub_8080990(void); @@ -391,7 +391,7 @@ _08042B42:\n\ bool8 sub_8042B4C(void) { - return sub_8042ABC(&gSaveBlock1.daycareData, gSpecialVar_0x8004); + return sub_8042ABC(&gSaveBlock1.daycare, gSpecialVar_0x8004); } static u8 EggHatchCreateMonSprite(u8 a0, u8 switchID, u8 pokeID) diff --git a/src/script_pokemon_util_80C4BF0.c b/src/script_pokemon_util_80C4BF0.c index 011978a0c..1462a985d 100644 --- a/src/script_pokemon_util_80C4BF0.c +++ b/src/script_pokemon_util_80C4BF0.c @@ -573,7 +573,7 @@ u8 ScriptGiveEgg(u16 species) struct Pokemon mon; u8 isEgg; - sub_8042044(&mon, species, 1); + CreateEgg(&mon, species, TRUE); isEgg = TRUE; SetMonData(&mon, MON_DATA_IS_EGG, &isEgg); -- cgit v1.2.3 From 92d37c52fd3be7c3382d9a2e51a81afd843816fa Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Mon, 13 Nov 2017 04:37:00 -0500 Subject: migrate battle_message data to src (TODO, german) --- src/battle/battle_4.c | 24 +- src/battle/battle_controller_player.c | 41 +- src/battle/battle_controller_safari.c | 8 +- src/battle/battle_controller_wally.c | 8 +- src/battle/battle_message.c | 397 +++++--- src/data/battle_strings_en.h | 1612 +++++++++++++++++++++++++++++++++ src/field/battle_tower.c | 40 +- src/pokemon/pokemon_3.c | 16 +- src/scene/evolution_scene.c | 16 +- 9 files changed, 1950 insertions(+), 212 deletions(-) create mode 100755 src/data/battle_strings_en.h (limited to 'src') diff --git a/src/battle/battle_4.c b/src/battle/battle_4.c index 6f3be7804..cff81396d 100644 --- a/src/battle/battle_4.c +++ b/src/battle/battle_4.c @@ -81,7 +81,7 @@ extern u8 gBattleTextBuff3[]; extern u8 gLeveledUpInBattle; extern void (*gBattleMainFunc)(void); extern struct Window gUnknown_03004210; -extern const u8 gUnknown_08400D7A[]; +extern const u8 BattleText_YesNo[]; extern u8 gPlayerPartyCount; extern u16 gMoveToLearn; //move to learn extern const u8 gTrainerMoney[]; @@ -10952,7 +10952,7 @@ void atk59_learnmove_inbattle(void) void sub_8023A80(void) { sub_802BBD4(0x18, 8, 0x1D, 0xD, 0); - InitWindow(&gUnknown_03004210, gUnknown_08400D7A, 0x100, 0x19, 0x9); + InitWindow(&gUnknown_03004210, BattleText_YesNo, 0x100, 0x19, 0x9); sub_8002F44(&gUnknown_03004210); sub_814A5C0(0, 0xFFFF, 0xC, 0x2D9F, 0x20); } @@ -11660,7 +11660,7 @@ static void atk6C_lvlbox_display(void) { case 0: sub_802BBD4(0xB, 0, 0x1D, 0x7, r1); - StringCopy(gStringVar4, gUnknown_08400D9F); + StringCopy(gStringVar4, BattleText_Format2); } } @@ -11670,7 +11670,7 @@ __attribute__((naked)) static void atk6C_lvlbox_display(void) { asm(".syntax unified\n\ - push {r4-r7,lr}\n\ + push {r4-r7,lr}\n\ mov r7, r10\n\ mov r6, r9\n\ mov r5, r8\n\ @@ -11713,7 +11713,7 @@ _0802493E:\n\ movs r3, 0x7\n\ bl sub_802BBD4\n\ ldr r0, _0802499C @ =gStringVar4\n\ - ldr r1, _080249A0 @ =gUnknown_08400D9F\n\ + ldr r1, _080249A0 @ =BattleText_Format2\n\ bl StringCopy\n\ adds r5, r0, 0\n\ movs r1, 0\n\ @@ -11752,7 +11752,7 @@ _0802495A:\n\ mov pc, r0\n\ .align 2, 0\n\ _0802499C: .4byte gStringVar4\n\ -_080249A0: .4byte gUnknown_08400D9F\n\ +_080249A0: .4byte BattleText_Format2\n\ _080249A4: .4byte gUnknown_0840165C\n\ _080249A8: .4byte gSharedMem\n\ _080249AC: .4byte 0x00016018\n\ @@ -11832,13 +11832,13 @@ _08024A2C:\n\ mov r0, r9\n\ cmp r0, 0\n\ beq _08024A5C\n\ - ldr r1, _08024A58 @ =gUnknown_08400DAC\n\ + ldr r1, _08024A58 @ =BattleText_Dash\n\ b _08024A5E\n\ .align 2, 0\n\ _08024A54: .4byte gSharedMem + 0x17180\n\ -_08024A58: .4byte gUnknown_08400DAC\n\ +_08024A58: .4byte BattleText_Dash\n\ _08024A5C:\n\ - ldr r1, _08024AA4 @ =gUnknown_08400DAA\n\ + ldr r1, _08024AA4 @ =BattleText_Plus\n\ _08024A5E:\n\ adds r0, r5, 0\n\ bl StringCopy\n\ @@ -11874,7 +11874,7 @@ _08024A5E:\n\ adds r5, 0x1\n\ b _08024AB8\n\ .align 2, 0\n\ -_08024AA4: .4byte gUnknown_08400DAA\n\ +_08024AA4: .4byte BattleText_Plus\n\ _08024AA8:\n\ strb r6, [r5]\n\ movs r0, 0x11\n\ @@ -11921,7 +11921,7 @@ _08024AFE:\n\ movs r0, 0x5\n\ bl PlaySE\n\ ldr r0, _08024B98 @ =gStringVar4\n\ - ldr r1, _08024B9C @ =gUnknown_08400D9F\n\ + ldr r1, _08024B9C @ =BattleText_Format2\n\ bl StringCopy\n\ adds r5, r0, 0\n\ movs r0, 0\n\ @@ -11992,7 +11992,7 @@ _08024B1C:\n\ .align 2, 0\n\ _08024B94: .4byte gMain\n\ _08024B98: .4byte gStringVar4\n\ -_08024B9C: .4byte gUnknown_08400D9F\n\ +_08024B9C: .4byte BattleText_Format2\n\ _08024BA0: .4byte 0x00016018\n\ _08024BA4: .4byte gUnknown_0840165C\n\ _08024BA8: .4byte gPlayerParty\n\ diff --git a/src/battle/battle_controller_player.c b/src/battle/battle_controller_player.c index 1aa73e90c..f2004c9b7 100644 --- a/src/battle/battle_controller_player.c +++ b/src/battle/battle_controller_player.c @@ -78,9 +78,9 @@ extern u16 gUnknown_030042C0; extern u8 gUnknown_03004344; extern u8 gUnknown_0300434C[]; -extern const u8 gUnknown_08400CA8[]; -extern const u8 gUnknown_08400CF3[]; -extern const u8 gUnknown_08400D38[]; +extern const u8 BattleText_OtherMenu[]; +extern const u8 BattleText_MenuOptions[]; +extern const u8 BattleText_PP[]; extern void sub_802C68C(void); extern void sub_802E1B0(void); @@ -152,7 +152,7 @@ extern u16 gBattlePartyID[]; extern u16 gUnknown_030042A0; extern u16 gUnknown_030042A4; extern struct Window gUnknown_03004210; -extern const u8 gUnknown_08400D89[]; +extern const u8 BattleText_SwitchWhich[]; extern u8 gUnknown_03004348; extern struct BattlePokemon gBattleMons[]; extern MainCallback gPreBattleCallback1; @@ -164,7 +164,7 @@ extern u8 gUnknown_0202E8F5; extern u8 gUnknown_02038470[]; extern u16 gScriptItemId; extern u8 gDisplayedStringBattle[]; -extern const u8 gUnknown_08400CE0[]; +extern const u8 BattleText_LinkStandby[]; extern void dp11b_obj_instanciate(u8, u8, s8, s8); extern u8 GetBankIdentity(u8); @@ -746,15 +746,14 @@ void sub_802C68C(void) gUnknown_03004344 = gMoveSelectionCursor[gActiveBank] + 1; sub_802E3B4(gUnknown_03004344, 27); FillWindowRect(&gUnknown_03004210, 0x1016, 0x17, 0x37, 0x1C, 0x3A); - InitWindow(&gUnknown_03004210, gUnknown_08400D89, 0x290, 0x17, 0x37); + InitWindow(&gUnknown_03004210, BattleText_SwitchWhich, 0x290, 0x17, 0x37); sub_8002F44(&gUnknown_03004210); gBattleBankFunc[gActiveBank] = sub_802CA60; } } } -extern const u8 gUnknown_08400D49[]; -extern const u8 gUnknown_08400D38[]; +extern const u8 BattleText_Format[]; void sub_802CA60(void) { @@ -850,13 +849,13 @@ void sub_802CA60(void) } else { - sub_802E12C(gUnknown_03004344, gUnknown_08400D49); + sub_802E12C(gUnknown_03004344, BattleText_Format); } gBattleBankFunc[gActiveBank] = sub_802C68C; gMoveSelectionCursor[gActiveBank] = gUnknown_03004344; sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0); FillWindowRect(&gUnknown_03004210, 0x1016, 0x17, 0x37, 0x1C, 0x3A); - InitWindow(&gUnknown_03004210, gUnknown_08400D38, 0x290, 0x17, 0x37); + InitWindow(&gUnknown_03004210, BattleText_PP, 0x290, 0x17, 0x37); sub_8002F44(&gUnknown_03004210); sub_802E220(); sub_802E2D4(); @@ -866,10 +865,10 @@ void sub_802CA60(void) PlaySE(SE_SELECT); nullsub_7(gUnknown_03004344); sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0); - sub_802E12C(gMoveSelectionCursor[gActiveBank], gUnknown_08400D49); + sub_802E12C(gMoveSelectionCursor[gActiveBank], BattleText_Format); gBattleBankFunc[gActiveBank] = sub_802C68C; FillWindowRect(&gUnknown_03004210, 0x1016, 0x17, 0x37, 0x1C, 0x3A); - InitWindow(&gUnknown_03004210, gUnknown_08400D38, 0x290, 0x17, 0x37); + InitWindow(&gUnknown_03004210, BattleText_PP, 0x290, 0x17, 0x37); sub_8002F44(&gUnknown_03004210); sub_802E220(); sub_802E2D4(); @@ -1578,7 +1577,7 @@ void sub_802E1B0(void) for (i = 0; i < 4; i++) { nullsub_7(i); - sub_802E12C(i, gUnknown_08400D49); + sub_802E12C(i, BattleText_Format); if (r4->moves[i] != 0) gUnknown_03004348++; } @@ -1591,7 +1590,7 @@ void sub_802E220(void) struct UnknownStruct1 *r4 = (struct UnknownStruct1 *)&gBattleBufferA[gActiveBank][4]; u8 *str = gDisplayedStringBattle; - str = StringCopy(str, gUnknown_08400D49); + str = StringCopy(str, BattleText_Format); str[0] = EXT_CTRL_CODE_BEGIN; str[1] = 0x11; str[2] = 2; @@ -1608,7 +1607,7 @@ void sub_802E220(void) } } -extern const u8 gUnknown_08400D52[]; +extern const u8 BattleText_ForgetMove[]; extern const u8 gTypeNames[][7]; void sub_802E2D4(void) @@ -1616,14 +1615,14 @@ void sub_802E2D4(void) if (gBattleBufferA[gActiveBank][2] == 1) { FillWindowRect(&gUnknown_03004210, 0x1016, 0x17, 0x37, 0x1C, 0x3A); - InitWindow(&gUnknown_03004210, gUnknown_08400D52, 0x290, 0x13, 0x37); + InitWindow(&gUnknown_03004210, BattleText_ForgetMove, 0x290, 0x13, 0x37); } else { struct UnknownStruct1 *r4 = (struct UnknownStruct1 *)&gBattleBufferA[gActiveBank][4]; u8 *str = gDisplayedStringBattle; - str = StringCopy(str, gUnknown_08400D49); + str = StringCopy(str, BattleText_Format); StringCopy(str, gTypeNames[gBattleMoves[r4->moves[gMoveSelectionCursor[gActiveBank]]].type]); FillWindowRect(&gUnknown_03004210, 0x1016, 0x17, 0x39, 0x1C, 0x3A); InitWindow(&gUnknown_03004210, gDisplayedStringBattle, 0x2C0, 0x17, 0x39); @@ -1699,7 +1698,7 @@ void b_link_standby_message(void) { gUnknown_030042A4 = 0; gUnknown_030042A0 = 0; - sub_8002EB0(&gUnknown_03004210, gUnknown_08400CE0, 0x90, 2, 15); + sub_8002EB0(&gUnknown_03004210, BattleText_LinkStandby, 0x90, 2, 15); } } @@ -2587,7 +2586,7 @@ void PlayerHandlecmd18(void) gBattleBankFunc[gActiveBank] = sub_802C098; - InitWindow(&gUnknown_03004210, gUnknown_08400CF3, 400, 18, 35); + InitWindow(&gUnknown_03004210, BattleText_MenuOptions, 400, 18, 35); sub_8002F44(&gUnknown_03004210); sub_814A5C0(0, 0xFFFF, 12, 11679, 0); @@ -2596,7 +2595,7 @@ void PlayerHandlecmd18(void) sub_802E3E4(gActionSelectionCursor[gActiveBank], 0); - StrCpyDecodeToDisplayedStringBattle(gUnknown_08400CA8); + StrCpyDecodeToDisplayedStringBattle(BattleText_OtherMenu); InitWindow(&gUnknown_03004210, gDisplayedStringBattle, SUB_803037C_TILE_DATA_OFFSET, 2, 35); sub_8002F44(&gUnknown_03004210); } @@ -2621,7 +2620,7 @@ void sub_80304A8(void) sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0); if (gBattleBufferA[gActiveBank][2] != 1) { - InitWindow(&gUnknown_03004210, gUnknown_08400D38, 656, 23, 55); + InitWindow(&gUnknown_03004210, BattleText_PP, 656, 23, 55); sub_8002F44(&gUnknown_03004210); } sub_802E220(); diff --git a/src/battle/battle_controller_safari.c b/src/battle/battle_controller_safari.c index 5b89cf9ba..8a8515fc7 100644 --- a/src/battle/battle_controller_safari.c +++ b/src/battle/battle_controller_safari.c @@ -18,9 +18,9 @@ extern struct Window gUnknown_03004210; extern u8 gDisplayedStringBattle[]; extern u8 gActionSelectionCursor[]; -extern const u8 gUnknown_08400CBB[]; +extern const u8 BattleText_PlayerMenu[]; extern u8 gActiveBank; -extern const u8 gUnknown_08400D15[]; +extern const u8 BattleText_MenuOptionsSafari[]; extern void *gBattleBankFunc[]; extern u16 gUnknown_030042A0; @@ -476,7 +476,7 @@ void SafariHandlecmd18(void) FillWindowRect_DefaultPalette(&gUnknown_03004210, 10, 2, 35, 16, 36); gBattleBankFunc[gActiveBank] = bx_battle_menu_t6_2; - InitWindow(&gUnknown_03004210, gUnknown_08400D15, 400, 18, 35); + InitWindow(&gUnknown_03004210, BattleText_MenuOptionsSafari, 400, 18, 35); sub_8002F44(&gUnknown_03004210); sub_814A5C0(0, 0xFFFF, 12, 11679, 0); @@ -484,7 +484,7 @@ void SafariHandlecmd18(void) nullsub_8(i); sub_802E3E4(gActionSelectionCursor[gActiveBank], 0); - StrCpyDecodeToDisplayedStringBattle(gUnknown_08400CBB); + StrCpyDecodeToDisplayedStringBattle(BattleText_PlayerMenu); InitWindow(&gUnknown_03004210, gDisplayedStringBattle, SUB_812BB10_TILE_DATA_OFFSET, 2, 35); sub_8002F44(&gUnknown_03004210); diff --git a/src/battle/battle_controller_wally.c b/src/battle/battle_controller_wally.c index 9392832d7..05fd8e583 100644 --- a/src/battle/battle_controller_wally.c +++ b/src/battle/battle_controller_wally.c @@ -57,8 +57,8 @@ extern struct Window gUnknown_03004210; extern u16 gUnknown_030042A0; extern u16 gUnknown_030042A4; extern u8 gUnknown_0300434C[]; -extern const u8 gUnknown_08400CCC[]; -extern const u8 gUnknown_08400CF3[]; +extern const u8 BattleText_WallyMenu[]; +extern const u8 BattleText_MenuOptions[]; // TODO: include rom3.h when my other PR gets merged extern void Emitcmd33(u8, u8, u16); @@ -1269,13 +1269,13 @@ void WallyHandlecmd18(void) FillWindowRect_DefaultPalette(&gUnknown_03004210, 10, 2, 15, 27, 18); FillWindowRect_DefaultPalette(&gUnknown_03004210, 10, 2, 35, 16, 36); gBattleBankFunc[gActiveBank] = sub_81372BC; - InitWindow(&gUnknown_03004210, gUnknown_08400CF3, 400, 18, 35); + InitWindow(&gUnknown_03004210, BattleText_MenuOptions, 400, 18, 35); sub_8002F44(&gUnknown_03004210); sub_814A5C0(0, 0xFFFF, 12, 0x2D9F, 0); for (i = 0; i < 4; i++) nullsub_8(i); sub_802E3E4(0, 0); - StrCpyDecodeToDisplayedStringBattle(gUnknown_08400CCC); + StrCpyDecodeToDisplayedStringBattle(BattleText_WallyMenu); #ifdef ENGLISH InitWindow(&gUnknown_03004210, gDisplayedStringBattle, 440, 2, 35); #else diff --git a/src/battle/battle_message.c b/src/battle/battle_message.c index 4e8067a49..962c5de7b 100644 --- a/src/battle/battle_message.c +++ b/src/battle/battle_message.c @@ -18,6 +18,136 @@ #define BATTLESTRINGS_NO 351 #define BATTLESTRINGS_MAX BATTLESTRINGS_NO + BATTLESTRING_TO_SUB +#ifdef GERMAN +#include "../data/battle_strings_en.h" // TODO: German +#else +#include "../data/battle_strings_en.h" +#endif + +const u16 gUnknown_084016BC[] = +{ + MOVE_SWORDS_DANCE, + MOVE_STRENGTH, + MOVE_GROWTH, + MOVE_HARDEN, + MOVE_MINIMIZE, + MOVE_SMOKESCREEN, + MOVE_WITHDRAW, + MOVE_DEFENSE_CURL, + MOVE_EGG_BOMB, + MOVE_SMOG, + MOVE_BONE_CLUB, + MOVE_FLASH, + MOVE_SPLASH, + MOVE_ACID_ARMOR, + MOVE_BONEMERANG, + MOVE_REST, + MOVE_SHARPEN, + MOVE_SUBSTITUTE, + MOVE_MIND_READER, + MOVE_SNORE, + MOVE_PROTECT, + MOVE_SPIKES, + MOVE_ENDURE, + MOVE_ROLLOUT, + MOVE_SWAGGER, + MOVE_SLEEP_TALK, + MOVE_HIDDEN_POWER, + MOVE_PSYCH_UP, + MOVE_EXTREME_SPEED, + MOVE_FOLLOW_ME, + MOVE_TRICK, + MOVE_ASSIST, + MOVE_INGRAIN, + MOVE_KNOCK_OFF, + MOVE_CAMOUFLAGE, + MOVE_ASTONISH, + MOVE_ODOR_SLEUTH, + MOVE_GRASS_WHISTLE, + MOVE_SHEER_COLD, + MOVE_MUDDY_WATER, + MOVE_IRON_DEFENSE, + MOVE_BOUNCE, + MOVE_NONE, + MOVE_TELEPORT, + MOVE_RECOVER, + MOVE_BIDE, + MOVE_AMNESIA, + MOVE_FLAIL, + MOVE_TAUNT, + MOVE_BULK_UP, + MOVE_NONE, + MOVE_MEDITATE, + MOVE_AGILITY, + MOVE_MIMIC, + MOVE_DOUBLE_TEAM, + MOVE_BARRAGE, + MOVE_TRANSFORM, + MOVE_STRUGGLE, + MOVE_SCARY_FACE, + MOVE_CHARGE, + MOVE_WISH, + MOVE_BRICK_BREAK, + MOVE_YAWN, + MOVE_FEATHER_DANCE, + MOVE_TEETER_DANCE, + MOVE_MUD_SPORT, + MOVE_FAKE_TEARS, + MOVE_WATER_SPORT, + MOVE_CALM_MIND, + MOVE_NONE, + MOVE_POUND, + MOVE_SCRATCH, + MOVE_VICE_GRIP, + MOVE_WING_ATTACK, + MOVE_FLY, + MOVE_BIND, + MOVE_SLAM, + MOVE_HORN_ATTACK, + MOVE_WRAP, + MOVE_THRASH, + MOVE_TAIL_WHIP, + MOVE_LEER, + MOVE_BITE, + MOVE_GROWL, + MOVE_ROAR, + MOVE_SING, + MOVE_PECK, + MOVE_ABSORB, + MOVE_STRING_SHOT, + MOVE_EARTHQUAKE, + MOVE_FISSURE, + MOVE_DIG, + MOVE_TOXIC, + MOVE_SCREECH, + MOVE_METRONOME, + MOVE_LICK, + MOVE_CLAMP, + MOVE_CONSTRICT, + MOVE_POISON_GAS, + MOVE_BUBBLE, + MOVE_SLASH, + MOVE_SPIDER_WEB, + MOVE_NIGHTMARE, + MOVE_CURSE, + MOVE_FORESIGHT, + MOVE_CHARM, + MOVE_ATTRACT, + MOVE_ROCK_SMASH, + MOVE_UPROAR, + MOVE_SPIT_UP, + MOVE_SWALLOW, + MOVE_TORMENT, + MOVE_FLATTER, + MOVE_ROLE_PLAY, + MOVE_ENDEAVOR, + MOVE_TICKLE, + MOVE_COVET, + MOVE_NONE, +}; + +const u8 gUnknown_084017A8[] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; // empty flags + extern const u8* const gBattleStringsTable[BATTLESTRINGS_NO]; extern u16 gLastUsedItem; @@ -44,66 +174,64 @@ extern u16 gBattlePartyID[4]; extern struct BattleEnigmaBerry gEnigmaBerries[4]; extern u8 gBattleBufferA[4][0x200]; -extern const u8 gUnknown_084005DB[]; -extern const u8 gUnknown_084005C7[]; -extern const u8 gUnknown_084005AA[]; -extern const u8 gUnknown_08400568[]; -extern const u8 gUnknown_08400590[]; -extern const u8 gUnknown_0840057B[]; -extern const u8 gUnknown_08400555[]; -extern const u8 gUnknown_084006F1[]; -extern const u8 gUnknown_084006A4[]; -extern const u8 gUnknown_0840069C[]; -extern const u8 gUnknown_0840065C[]; -extern const u8 gUnknown_08400645[]; -extern const u8 gUnknown_08400608[]; -extern const u8 gUnknown_08400635[]; -extern const u8 gUnknown_084005F5[]; -extern const u8 gUnknown_08400709[]; -extern const u8 gUnknown_08400727[]; -extern const u8 gUnknown_08400736[]; -extern const u8 gUnknown_08400749[]; -extern const u8 gUnknown_08400781[]; -extern const u8 gUnknown_08400771[]; -extern const u8 gUnknown_0840075E[]; -extern const u8 gUnknown_084006B3[]; -extern const u8 gUnknown_084006BB[]; -extern const u8 gUnknown_084006C6[]; -extern const u8 gUnknown_084006D5[]; -extern const u8 gUnknown_0840068C[]; -extern const u8 gUnknown_0840067C[]; -extern const u8 gUnknown_08400622[]; -extern const u8 gUnknown_084007BD[]; -extern const u8 gUnknown_083FFEFC[]; -extern const u8 gUnknown_083FFFF7[]; -extern const u8 gUnknown_083FFFEA[]; -extern const u8 gUnknown_083FFF6A[]; -extern const u8 gUnknown_083FFF99[]; -extern const u8 gUnknown_083FFFCB[]; -extern const u8 gUnknown_083FFF56[]; -extern const u8 gUnknown_083FFF81[]; -extern const u8 gUnknown_083FFFB3[]; -extern const u8 gUnknown_08400A78[]; -extern const u8 gUnknown_08400A85[]; -extern const u8 gUnknown_08400797[]; -extern const u8 gUnknown_08400791[]; -extern const u8 gUnknown_084007B7[]; -extern const u8 gUnknown_084007B2[]; -extern const u8 gUnknown_0840079C[]; -extern const u8 gUnknown_084007A1[]; -extern const u8 gUnknown_084007A7[]; -extern const u8 gUnknown_084007AC[]; -extern const u8 gUnknown_084009ED[]; -extern const u8 gUnknown_084009F7[]; -extern const u8 gUnknown_084007C8[]; -extern const u8 gUnknown_084007CA[]; -extern const u8 gUnknown_084007CC[]; -extern const u8 gUnknown_084007CE[]; -extern const u8 gUnknown_084007D0[]; -extern const u8 gUnknown_08400E5E[]; -extern const u8 gUnknown_08400E62[]; - -extern const u16 gUnknown_084016BC[]; // a table of moves +extern const u8 BattleText_DoubleWantToBattle[]; +extern const u8 BattleText_SingleWantToBattle2[]; +extern const u8 BattleText_SingleWantToBattle1[]; +extern const u8 BattleText_WildAppeared2[]; +extern const u8 BattleText_WildDoubleAppeared[]; +extern const u8 BattleText_WildAppeared3[]; +extern const u8 BattleText_WildAppeared1[]; +extern const u8 BattleText_SentOutSingle11[]; +extern const u8 BattleText_SentOutDouble4[]; +extern const u8 BattleText_SentOutSingle6[]; +extern const u8 BattleText_SentOutDouble3[]; +extern const u8 BattleText_SentOutDouble2[]; +extern const u8 BattleText_SentOutDouble1[]; +extern const u8 BattleText_SentOutSingle3[]; +extern const u8 BattleText_SentOutSingle1[]; +extern const u8 BattleText_ComeBackSingle1[]; +extern const u8 BattleText_ComeBackSingle2[]; +extern const u8 BattleText_ComeBackSingle3[]; +extern const u8 BattleText_ComeBackSingle4[]; +extern const u8 BattleText_WithdrewPoke3[]; +extern const u8 BattleText_WithdrewPoke2[]; +extern const u8 BattleText_WithdrewPoke1[]; +extern const u8 BattleText_SentOutSingle7[]; +extern const u8 BattleText_SentOutSingle8[]; +extern const u8 BattleText_SentOutSingle9[]; +extern const u8 BattleText_SentOutSingle10[]; +extern const u8 BattleText_SentOutSingle5[]; +extern const u8 BattleText_SentOutSingle4[]; +extern const u8 BattleText_SentOutSingle2[]; +extern const u8 BattleText_OpponentUsedMove[]; +extern const u8 BattleText_GotAwaySafely[]; +extern const u8 BattleText_FledDouble[]; +extern const u8 BattleText_FledSingle[]; +extern const u8 BattleText_PlayerDefeatedTrainers[]; +extern const u8 BattleText_PlayerLostTrainers[]; +extern const u8 BattleText_PlayerTiedTrainers[]; +extern const u8 BattleText_PlayerDefeatedTrainer[]; +extern const u8 BattleText_PlayerLostTrainer[]; +extern const u8 BattleText_PlayerTiedTrainer[]; +extern const u8 BattleText_EnigmaBerry[]; +extern const u8 BattleText_Berry[]; +extern const u8 BattleText_Foe[]; +extern const u8 BattleText_Wild[]; +extern const u8 BattleText_Ally3[]; +extern const u8 BattleText_Foe4[]; +extern const u8 BattleText_Foe2[]; +extern const u8 BattleText_Ally[]; +extern const u8 BattleText_Foe3[]; +extern const u8 BattleText_Ally2[]; +extern const u8 BattleText_Someone[]; +extern const u8 BattleText_Lanette[]; +extern const u8 BattleText_Exclamation2[]; +extern const u8 BattleText_Exclamation3[]; +extern const u8 BattleText_Exclamation4[]; +extern const u8 BattleText_Exclamation5[]; +extern const u8 BattleText_Exclamation[]; +extern const u8 BattleText_Format10[]; +extern const u8 BattleText_Format11[]; extern const u8* const gUnknown_08401674[]; // table of pointers to 'a -TYPE' strings extern const u8* const gUnknown_08400F58[]; // table of pointers to stat strings @@ -116,7 +244,6 @@ struct StatusFlagString }; extern const struct StatusFlagString gUnknown_081FA6D4[7]; // status flag/text -extern const u8 gUnknown_084017A8[8]; // empty flags extern struct StringInfoBattle* gSelectedOrderFromParty; #define gStringInfo gSelectedOrderFromParty @@ -168,13 +295,13 @@ void BufferStringBattle(u16 stringID) if (gBattleTypeFlags & BATTLE_TYPE_LINK) { if (gBattleTypeFlags & BATTLE_TYPE_MULTI) - stringPtr = gUnknown_084005DB; + stringPtr = BattleText_DoubleWantToBattle; else - stringPtr = gUnknown_084005C7; + stringPtr = BattleText_SingleWantToBattle2; } else { - stringPtr = gUnknown_084005AA; + stringPtr = BattleText_SingleWantToBattle1; #ifdef GERMAN stringPtr = de_sub_804110C(0xFFFF, stringPtr); #endif @@ -183,13 +310,13 @@ void BufferStringBattle(u16 stringID) else { if (gBattleTypeFlags & BATTLE_TYPE_LEGENDARY) - stringPtr = gUnknown_08400568; + stringPtr = BattleText_WildAppeared2; else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) // interesting, looks like they had something planned for wild double battles - stringPtr = gUnknown_08400590; + stringPtr = BattleText_WildDoubleAppeared; else if (gBattleTypeFlags & BATTLE_TYPE_WALLY_TUTORIAL) - stringPtr = gUnknown_0840057B; + stringPtr = BattleText_WildAppeared3; else - stringPtr = gUnknown_08400555; + stringPtr = BattleText_WildAppeared1; } break; case 1: // poke first send-out @@ -198,34 +325,34 @@ void BufferStringBattle(u16 stringID) if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) { if (gBattleTypeFlags & BATTLE_TYPE_MULTI) - stringPtr = gUnknown_084006F1; + stringPtr = BattleText_SentOutSingle11; else - stringPtr = gUnknown_084006A4; + stringPtr = BattleText_SentOutDouble4; } else - stringPtr = gUnknown_0840069C; + stringPtr = BattleText_SentOutSingle6; } else { if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) { if (gBattleTypeFlags & BATTLE_TYPE_MULTI) - stringPtr = gUnknown_0840065C; + stringPtr = BattleText_SentOutDouble3; else if (gBattleTypeFlags & BATTLE_TYPE_LINK) - stringPtr = gUnknown_08400645; + stringPtr = BattleText_SentOutDouble2; else { - stringPtr = gUnknown_08400608; + stringPtr = BattleText_SentOutDouble1; #ifdef GERMAN stringPtr = de_sub_804110C(0xFFFF, stringPtr); #endif } } else if (gBattleTypeFlags & BATTLE_TYPE_LINK) - stringPtr = gUnknown_08400635; + stringPtr = BattleText_SentOutSingle3; else { - stringPtr = gUnknown_084005F5; + stringPtr = BattleText_SentOutSingle1; #ifdef GERMAN stringPtr = de_sub_804110C(0xFFFF, stringPtr); #endif @@ -236,26 +363,26 @@ void BufferStringBattle(u16 stringID) if (GetBankSide(gActiveBank) == 0) { if (BATTLE_STRUCT->hpScale == 0) - stringPtr = gUnknown_08400709; + stringPtr = BattleText_ComeBackSingle1; else if (BATTLE_STRUCT->hpScale == 1 || gBattleTypeFlags & BATTLE_TYPE_DOUBLE) - stringPtr = gUnknown_08400727; + stringPtr = BattleText_ComeBackSingle2; else if (BATTLE_STRUCT->hpScale == 2) - stringPtr = gUnknown_08400736; + stringPtr = BattleText_ComeBackSingle3; else - stringPtr = gUnknown_08400749; + stringPtr = BattleText_ComeBackSingle4; } else { if (gTrainerBattleOpponent == 0x800) { if (gBattleTypeFlags & BATTLE_TYPE_MULTI) - stringPtr = gUnknown_08400781; + stringPtr = BattleText_WithdrewPoke3; else - stringPtr = gUnknown_08400771; + stringPtr = BattleText_WithdrewPoke2; } else { - stringPtr = gUnknown_0840075E; + stringPtr = BattleText_WithdrewPoke1; #ifdef GERMAN stringPtr = de_sub_804110C(0xFFFF, stringPtr); #endif @@ -266,26 +393,26 @@ void BufferStringBattle(u16 stringID) if (GetBankSide(BATTLE_STRUCT->scriptingActive) == 0) { if (BATTLE_STRUCT->hpScale == 0 || gBattleTypeFlags & BATTLE_TYPE_DOUBLE) - stringPtr = gUnknown_084006B3; + stringPtr = BattleText_SentOutSingle7; else if (BATTLE_STRUCT->hpScale == 1) - stringPtr = gUnknown_084006BB; + stringPtr = BattleText_SentOutSingle8; else if (BATTLE_STRUCT->hpScale == 2) - stringPtr = gUnknown_084006C6; + stringPtr = BattleText_SentOutSingle9; else - stringPtr = gUnknown_084006D5; + stringPtr = BattleText_SentOutSingle10; } else { if (gBattleTypeFlags & BATTLE_TYPE_LINK) { if (gBattleTypeFlags & BATTLE_TYPE_MULTI) - stringPtr = gUnknown_0840068C; + stringPtr = BattleText_SentOutSingle5; else - stringPtr = gUnknown_0840067C; + stringPtr = BattleText_SentOutSingle4; } else { - stringPtr = gUnknown_08400622; + stringPtr = BattleText_SentOutSingle2; #ifdef GERMAN stringPtr = de_sub_804110C(0xFFFF, stringPtr); #endif @@ -299,7 +426,7 @@ void BufferStringBattle(u16 stringID) else StringCopy(gBattleTextBuff2, gMoveNames[gStringInfo->currentMove]); sub_8121D74(gBattleTextBuff2); - stringPtr = gUnknown_084007BD; + stringPtr = BattleText_OpponentUsedMove; break; case 5: // battle end if (gBattleTextBuff1[0] & 0x80) @@ -308,13 +435,13 @@ void BufferStringBattle(u16 stringID) if (GetBankSide(gActiveBank) == 1 && gBattleTextBuff1[0] != 3) gBattleTextBuff1[0] ^= 3; if (gBattleTextBuff1[0] == BATTLE_LOST || gBattleTextBuff1[0] == BATTLE_DREW) - stringPtr = gUnknown_083FFEFC; + stringPtr = BattleText_GotAwaySafely; else { if (gBattleTypeFlags & BATTLE_TYPE_MULTI) - stringPtr = gUnknown_083FFFF7; + stringPtr = BattleText_FledDouble; else - stringPtr = gUnknown_083FFFEA; + stringPtr = BattleText_FledSingle; } } else @@ -326,13 +453,13 @@ void BufferStringBattle(u16 stringID) switch (gBattleTextBuff1[0]) { case BATTLE_WON: - stringPtr = gUnknown_083FFF6A; + stringPtr = BattleText_PlayerDefeatedTrainers; break; case BATTLE_LOST: - stringPtr = gUnknown_083FFF99; + stringPtr = BattleText_PlayerLostTrainers; break; case BATTLE_DREW: - stringPtr = gUnknown_083FFFCB; + stringPtr = BattleText_PlayerTiedTrainers; break; } } @@ -341,13 +468,13 @@ void BufferStringBattle(u16 stringID) switch (gBattleTextBuff1[0]) { case BATTLE_WON: - stringPtr = gUnknown_083FFF56; + stringPtr = BattleText_PlayerDefeatedTrainer; break; case BATTLE_LOST: - stringPtr = gUnknown_083FFF81; + stringPtr = BattleText_PlayerLostTrainer; break; case BATTLE_DREW: - stringPtr = gUnknown_083FFFB3; + stringPtr = BattleText_PlayerTiedTrainer; break; } } @@ -414,9 +541,9 @@ extern u8 *de_sub_8041024(s32, u32); if (GetBankSide(bank) != 0) \ { \ if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) \ - toCpy = gUnknown_08400797; \ + toCpy = BattleText_Foe; \ else \ - toCpy = gUnknown_08400791; \ + toCpy = BattleText_Wild; \ while (*toCpy != EOS) \ { \ dst[dstID] = *toCpy; \ @@ -445,9 +572,9 @@ extern u8 *de_sub_8041024(s32, u32); toCpy++; \ } \ if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) \ - toCpy = gUnknown_08400797; \ + toCpy = BattleText_Foe; \ else \ - toCpy = gUnknown_08400791; \ + toCpy = BattleText_Wild; \ } \ else \ { \ @@ -590,14 +717,14 @@ u32 StrCpyDecodeBattle(const u8* src, u8* dst) { StringCopy(text, gEnigmaBerries[gStringBank].name); #ifdef ENGLISH - StringAppend(text, gUnknown_08400A85); + StringAppend(text, BattleText_Berry); #else - de_sub_8073174(text, gUnknown_08400A85); + de_sub_8073174(text, BattleText_Berry); #endif toCpy = text; } else - toCpy = gUnknown_08400A78; + toCpy = BattleText_EnigmaBerry; } else { @@ -694,45 +821,45 @@ u32 StrCpyDecodeBattle(const u8* src, u8* dst) break; case 35: // lanette pc if (FlagGet(SYS_PC_LANETTE)) - toCpy = gUnknown_084009F7; + toCpy = BattleText_Lanette; else - toCpy = gUnknown_084009ED; + toCpy = BattleText_Someone; break; case 38: if (GetBankSide(gBankAttacker) == 0) - toCpy = gUnknown_084007AC; + toCpy = BattleText_Ally2; else - toCpy = gUnknown_084007A7; + toCpy = BattleText_Foe3; break; case 39: if (GetBankSide(gBankTarget) == 0) - toCpy = gUnknown_084007AC; + toCpy = BattleText_Ally2; else - toCpy = gUnknown_084007A7; + toCpy = BattleText_Foe3; break; case 36: if (GetBankSide(gBankAttacker) == 0) - toCpy = gUnknown_084007A1; + toCpy = BattleText_Ally; else - toCpy = gUnknown_0840079C; + toCpy = BattleText_Foe2; break; case 37: if (GetBankSide(gBankTarget) == 0) - toCpy = gUnknown_084007A1; + toCpy = BattleText_Ally; else - toCpy = gUnknown_0840079C; + toCpy = BattleText_Foe2; break; case 40: if (GetBankSide(gBankAttacker) == 0) - toCpy = gUnknown_084007B7; + toCpy = BattleText_Ally3; else - toCpy = gUnknown_084007B2; + toCpy = BattleText_Foe4; break; case 41: if (GetBankSide(gBankTarget) == 0) - toCpy = gUnknown_084007B7; + toCpy = BattleText_Ally3; else - toCpy = gUnknown_084007B2; + toCpy = BattleText_Foe4; break; } //if (toCpy != NULL) really GF, why did you forget about this? @@ -819,9 +946,9 @@ void StrCpyDecodeBattleTextBuff(u8* src, u8* dst) else { if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) - StringAppend(dst, gUnknown_08400797); + StringAppend(dst, BattleText_Foe); else - StringAppend(dst, gUnknown_08400791); + StringAppend(dst, BattleText_Wild); GetMonData(&gEnemyParty[src[srcID + 2]], MON_DATA_NICKNAME, text); } StringGetEnd10(text); @@ -839,9 +966,9 @@ void StrCpyDecodeBattleTextBuff(u8* src, u8* dst) StringGetEnd10(text); StringAppend(dst, text); if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) - StringAppend(dst, gUnknown_08400797); + StringAppend(dst, BattleText_Foe); else - StringAppend(dst, gUnknown_08400791); + StringAppend(dst, BattleText_Wild); } #endif srcID += 3; @@ -881,13 +1008,13 @@ void StrCpyDecodeBattleTextBuff(u8* src, u8* dst) { StringCopy(dst, gEnigmaBerries[gStringBank].name); #ifdef ENGLISH - StringAppend(dst, gUnknown_08400A85); + StringAppend(dst, BattleText_Berry); #else - de_sub_8073174(dst, gUnknown_08400A85); + de_sub_8073174(dst, BattleText_Berry); #endif } else - StringAppend(dst, gUnknown_08400A78); + StringAppend(dst, BattleText_EnigmaBerry); } else CopyItemName(hword, dst); @@ -917,9 +1044,9 @@ void sub_8121D1C(u8* textBuff) if (counter >= 0) { if (counter <= 2) - StringCopy(textBuff, gUnknown_08400E5E); // is + StringCopy(textBuff, BattleText_Format10); // is else if (counter <= 4) - StringCopy(textBuff, gUnknown_08400E62); // 's + StringCopy(textBuff, BattleText_Format11); // 's } } @@ -942,19 +1069,19 @@ void sub_8121D74(u8* dst) switch (counter) { case 0: - StringCopy(dst, gUnknown_084007C8); + StringCopy(dst, BattleText_Exclamation2); break; case 1: - StringCopy(dst, gUnknown_084007CA); + StringCopy(dst, BattleText_Exclamation3); break; case 2: - StringCopy(dst, gUnknown_084007CC); + StringCopy(dst, BattleText_Exclamation4); break; case 3: - StringCopy(dst, gUnknown_084007CE); + StringCopy(dst, BattleText_Exclamation5); break; case 4: - StringCopy(dst, gUnknown_084007D0); + StringCopy(dst, BattleText_Exclamation); break; } } diff --git a/src/data/battle_strings_en.h b/src/data/battle_strings_en.h new file mode 100755 index 000000000..7f0481b50 --- /dev/null +++ b/src/data/battle_strings_en.h @@ -0,0 +1,1612 @@ +#include "moves.h" + +enum +{ + BATTLE_TEXT_UnknownString = 12, + BATTLE_TEXT_GainExpPoints, + BATTLE_TEXT_GrewLevel, + BATTLE_TEXT_LearnedMove, + BATTLE_TEXT_TryingToLearnMove, + BATTLE_TEXT_CantLearnMore, + BATTLE_TEXT_DeleteMove, + BATTLE_TEXT_DeletedMove, + BATTLE_TEXT_StopLearning, + BATTLE_TEXT_DidNotLearn, + BATTLE_TEXT_LearnedMove2, + BATTLE_TEXT_AttackMissed, + BATTLE_TEXT_ProtectedItself, + BATTLE_TEXT_StatNoHigher, + BATTLE_TEXT_AvoidedDamage, + BATTLE_TEXT_DoesntAffect, + BATTLE_TEXT_AttackingFainted, + BATTLE_TEXT_DefendingFainted, + BATTLE_TEXT_WinningPrize, + BATTLE_TEXT_OutOfUsablePoke, + BATTLE_TEXT_WhitedOut, + BATTLE_TEXT_PreventEscape, + BATTLE_TEXT_HitMulti, + BATTLE_TEXT_FellAsleep, + BATTLE_TEXT_MadeAsleep, + BATTLE_TEXT_DefendingAsleep, + BATTLE_TEXT_AttackingAsleep, + BATTLE_TEXT_WasntAffected, + BATTLE_TEXT_Poisoned, + BATTLE_TEXT_Poisoned2, + BATTLE_TEXT_PoisonHurt, + BATTLE_TEXT_AlreadyPoisoned, + BATTLE_TEXT_BadlyPoisoned, + BATTLE_TEXT_EnergyDrained, + BATTLE_TEXT_Burned, + BATTLE_TEXT_Burned2, + BATTLE_TEXT_BurnHurt, + BATTLE_TEXT_Frozen, + BATTLE_TEXT_Frozen2, + BATTLE_TEXT_FrozenSolid, + BATTLE_TEXT_DefendingDefrosted, + BATTLE_TEXT_AttackingDefrosted, + BATTLE_TEXT_Defrosted, + BATTLE_TEXT_Paralyzed, + BATTLE_TEXT_Paralyzed2, + BATTLE_TEXT_Paralyzed3, + BATTLE_TEXT_AlreadyParalyzed, + BATTLE_TEXT_ParalysisHealed, + BATTLE_TEXT_DreamEaten, + BATTLE_TEXT_AttackingStatNoHigher, + BATTLE_TEXT_DefendingStatNoHigher, + BATTLE_TEXT_StoppedWorking, + BATTLE_TEXT_StoppedWorking2, + BATTLE_TEXT_Confused, + BATTLE_TEXT_ConfusionSnapOut, + BATTLE_TEXT_BecameConfused, + BATTLE_TEXT_AlreadyConfused, + BATTLE_TEXT_FellLove, + BATTLE_TEXT_InLoveWith, + BATTLE_TEXT_ImmobilizedBy, + BATTLE_TEXT_BlownAway, + BATTLE_TEXT_TypeTransform, + BATTLE_TEXT_Flinched, + BATTLE_TEXT_RegainedHealth, + BATTLE_TEXT_HPFull, + BATTLE_TEXT_RaisedSpDef, + BATTLE_TEXT_RaisedDefense, + BATTLE_TEXT_CoveredVeil, + BATTLE_TEXT_SafeguardActive, + BATTLE_TEXT_SafeguardFaded, + BATTLE_TEXT_WentToSleep, + BATTLE_TEXT_SpeltHealthy, + BATTLE_TEXT_WhipWhirlwind, + BATTLE_TEXT_TookSunlight, + BATTLE_TEXT_LoweredHead, + BATTLE_TEXT_IsGlowing, + BATTLE_TEXT_FlewHigh, + BATTLE_TEXT_DugHole, + BATTLE_TEXT_SqueezedBind, + BATTLE_TEXT_TrappedVortex, + BATTLE_TEXT_Wrapped, + BATTLE_TEXT_Clamped, + BATTLE_TEXT_HurtBy, + BATTLE_TEXT_FreedFrom, + BATTLE_TEXT_KeptGoingCrash, + BATTLE_TEXT_MistShroud, + BATTLE_TEXT_MistProtect, + BATTLE_TEXT_GetPumped, + BATTLE_TEXT_HitRecoil, + BATTLE_TEXT_ProtectedItself2, + BATTLE_TEXT_SandBuffeted, + BATTLE_TEXT_HailStricken, + BATTLE_TEXT_WasSeeded, + BATTLE_TEXT_EvadedAttack, + BATTLE_TEXT_HealthSapped, + BATTLE_TEXT_FastAsleep, + BATTLE_TEXT_WokeUp, + BATTLE_TEXT_UproarAwake, + BATTLE_TEXT_UproarWoke, + BATTLE_TEXT_UproarCaused, + BATTLE_TEXT_UproarMaking, + BATTLE_TEXT_CalmedDown, + BATTLE_TEXT_UproarCantSleep, + BATTLE_TEXT_Stockpiled, + BATTLE_TEXT_StockpiledCant, + BATTLE_TEXT_UproarCantSleep2, + BATTLE_TEXT_UproarKeptAwake, + BATTLE_TEXT_StayedAwake, + BATTLE_TEXT_StoringEnergy, + BATTLE_TEXT_UnleashedEnergy, + BATTLE_TEXT_FatigueConfuse, + BATTLE_TEXT_PickedUpYen, + BATTLE_TEXT_Unaffected, + BATTLE_TEXT_Transformed, + BATTLE_TEXT_SubMade, + BATTLE_TEXT_SubAlready, + BATTLE_TEXT_SubTookDamage, + BATTLE_TEXT_SubFaded, + BATTLE_TEXT_MustRecharge, + BATTLE_TEXT_RageBuilding, + BATTLE_TEXT_MoveWasDisabled, + BATTLE_TEXT_MoveIsDisabled, + BATTLE_TEXT_DisabledNoMore, + BATTLE_TEXT_EncoreGot, + BATTLE_TEXT_EncoreEnded, + BATTLE_TEXT_TookAim, + BATTLE_TEXT_SketchedMove, + BATTLE_TEXT_DestinyBondTake, + BATTLE_TEXT_DestinyBondTaken, + BATTLE_TEXT_ReducedBy, + BATTLE_TEXT_StoleSomething, + BATTLE_TEXT_CantEscapeNow, + BATTLE_TEXT_NightmareStart, + BATTLE_TEXT_NightmareLock, + BATTLE_TEXT_CurseLay, + BATTLE_TEXT_CurseAfflict, + BATTLE_TEXT_SpikesScattered, + BATTLE_TEXT_SpikesHurt, + BATTLE_TEXT_IdentifiedPoke, + BATTLE_TEXT_PerishSongFell, + BATTLE_TEXT_BracedItself, + BATTLE_TEXT_EnduredHit, + BATTLE_TEXT_MagnitudeCount, + BATTLE_TEXT_CutHPMaxATK, + BATTLE_TEXT_CopyStatChanges, + BATTLE_TEXT_GotFreeFrom, + BATTLE_TEXT_LeechShed, + BATTLE_TEXT_SpikesBlownAway, + BATTLE_TEXT_FledBattle, + BATTLE_TEXT_ForesawAttack, + BATTLE_TEXT_TookAttack, + BATTLE_TEXT_PokeAttack, + BATTLE_TEXT_CenterAttention, + BATTLE_TEXT_ChargingPower, + BATTLE_TEXT_NaturePower, + BATTLE_TEXT_StatusNormal, + BATTLE_TEXT_NoMovesLeft, + BATTLE_TEXT_TormentSubject, + BATTLE_TEXT_TormentNoUse, + BATTLE_TEXT_TightenFocus, + BATTLE_TEXT_TauntFell, + BATTLE_TEXT_TauntNoUse, + BATTLE_TEXT_ReadyToHelp, + BATTLE_TEXT_SwitchedItems, + BATTLE_TEXT_CopiedObject, + BATTLE_TEXT_WishMade, + BATTLE_TEXT_WishTrue, + BATTLE_TEXT_PlantedRoots, + BATTLE_TEXT_AbsorbNutrients, + BATTLE_TEXT_AnchoredItself, + BATTLE_TEXT_DrowsyMade, + BATTLE_TEXT_KnockedOffItem, + BATTLE_TEXT_AbilitySwap, + BATTLE_TEXT_SealedMove, + BATTLE_TEXT_SealedNoUse, + BATTLE_TEXT_GrudgeBear, + BATTLE_TEXT_GrudgeLosePP, + BATTLE_TEXT_ShroudedItself, + BATTLE_TEXT_MagicCoatBounce, + BATTLE_TEXT_AwaitMove, + BATTLE_TEXT_SnatchedMove, + BATTLE_TEXT_RainMade, + BATTLE_TEXT_SpeedRisen, + BATTLE_TEXT_ProtectedBy, + BATTLE_TEXT_PreventedBy, + BATTLE_TEXT_HPRestoredUsing, + BATTLE_TEXT_MadeType, + BATTLE_TEXT_PreventedPara, + BATTLE_TEXT_PreventedRomance, + BATTLE_TEXT_PreventedPoison, + BATTLE_TEXT_PreventedConfusion, + BATTLE_TEXT_RaisedFirePower, + BATTLE_TEXT_AnchorsItself, + BATTLE_TEXT_CutsAttack, + BATTLE_TEXT_PreventedStatLoss, + BATTLE_TEXT_HurtOther, + BATTLE_TEXT_Traced, + BATTLE_TEXT_Sharply, + BATTLE_TEXT_Rose, + BATTLE_TEXT_Harshly, + BATTLE_TEXT_Fell, + BATTLE_TEXT_UnknownString7, + BATTLE_TEXT_UnknownString3, + BATTLE_TEXT_UnknownString5, + BATTLE_TEXT_UnknownString6, + BATTLE_TEXT_Critical, + BATTLE_TEXT_GrandSlam, + BATTLE_TEXT_MoveForget123, + BATTLE_TEXT_MoveForgetAnd, + BATTLE_TEXT_NotEffective, + BATTLE_TEXT_SuperEffective, + BATTLE_TEXT_GotAwaySafely, + BATTLE_TEXT_FledWild, + BATTLE_TEXT_NoRunning, + BATTLE_TEXT_CantEscape2, + BATTLE_TEXT_BirchDontLeaveMe, + BATTLE_TEXT_Nothing, + BATTLE_TEXT_Failed, + BATTLE_TEXT_HurtItself, + BATTLE_TEXT_MirrorFail, + BATTLE_TEXT_RainStart, + BATTLE_TEXT_PourStart, + BATTLE_TEXT_RainCont1, + BATTLE_TEXT_PourCont, + BATTLE_TEXT_RainStop, + BATTLE_TEXT_SandBrewed, + BATTLE_TEXT_SandRages, + BATTLE_TEXT_SandSubsided, + BATTLE_TEXT_SunBright, + BATTLE_TEXT_SunStrong, + BATTLE_TEXT_SunFaded, + BATTLE_TEXT_HailStart, + BATTLE_TEXT_HailCont, + BATTLE_TEXT_HailStop, + BATTLE_TEXT_SpitUpFail, + BATTLE_TEXT_SwallowFail, + BATTLE_TEXT_WindHeatWave, + BATTLE_TEXT_StatElim, + BATTLE_TEXT_CoinScatter, + BATTLE_TEXT_SubWeak, + BATTLE_TEXT_PainSplit, + BATTLE_TEXT_BellChime, + BATTLE_TEXT_PerishSong, + BATTLE_TEXT_NoPP1, + BATTLE_TEXT_NoPP2, + BATTLE_TEXT_Used1, + BATTLE_TEXT_TutorialUsed, + BATTLE_TEXT_BlockBall, + BATTLE_TEXT_DontBeAThief, + BATTLE_TEXT_DodgeBall, + BATTLE_TEXT_MissPoke, + BATTLE_TEXT_BallBrokeOhNo, + BATTLE_TEXT_BallBrokeAppeared, + BATTLE_TEXT_BallBrokeAlmost, + BATTLE_TEXT_BallBrokeSoClose, + BATTLE_TEXT_BallCaught1, + BATTLE_TEXT_BallCaught2, + BATTLE_TEXT_GiveNickname, + BATTLE_TEXT_SentToPC, + BATTLE_TEXT_AddedToDex, + BATTLE_TEXT_Raining, + BATTLE_TEXT_Sandstorm, + BATTLE_TEXT_CantEscape, + BATTLE_TEXT_IgnoredOrdersSLP, + BATTLE_TEXT_IgnoredOrders, + BATTLE_TEXT_BeganNap, + BATTLE_TEXT_LoafingAround, + BATTLE_TEXT_WontObey, + BATTLE_TEXT_TurnedAway, + BATTLE_TEXT_NotNotice, + BATTLE_TEXT_WillSwitch, + BATTLE_TEXT_CreptCloser, + BATTLE_TEXT_CantGetCloser, + BATTLE_TEXT_WatchingCarefully, + BATTLE_TEXT_CuriousAbout, + BATTLE_TEXT_EnthralledBy, + BATTLE_TEXT_IgnoredThing, + BATTLE_TEXT_ThrewBlock, + BATTLE_TEXT_SafariOver, + BATTLE_TEXT_CuredParalysis, + BATTLE_TEXT_CuredPoison, + BATTLE_TEXT_CuredBurn, + BATTLE_TEXT_CuredFreeze, + BATTLE_TEXT_CuredSleep, + BATTLE_TEXT_CuredConfusion, + BATTLE_TEXT_CuredStatus, + BATTLE_TEXT_RestoredHealth, + BATTLE_TEXT_RestoredPP, + BATTLE_TEXT_RestoredStatus, + BATTLE_TEXT_RestoredHPLittle, + BATTLE_TEXT_ChoiceBand, + BATTLE_TEXT_FocusSash, + BATTLE_TEXT_Terminator2, + BATTLE_TEXT_PreventedBurn, + BATTLE_TEXT_BlocksOther, + BATTLE_TEXT_RestoredHPByItem, + BATTLE_TEXT_WhipSandstorm, + BATTLE_TEXT_PreventedLoss, + BATTLE_TEXT_InfatuatedPoke, + BATTLE_TEXT_MadeIneffective, + BATTLE_TEXT_CuredProblem, + BATTLE_TEXT_OozeSuckup, + BATTLE_TEXT_Transformed2, + BATTLE_TEXT_ElecWeakened, + BATTLE_TEXT_FireWeakened, + BATTLE_TEXT_HidUnderwater, + BATTLE_TEXT_SprangUp, + BATTLE_TEXT_CantForgetHM, + BATTLE_TEXT_FoundOne, + BATTLE_TEXT_PlayerDefeatedTrainer2, + BATTLE_TEXT_SoothingAroma, + BATTLE_TEXT_CantUseItems, + BATTLE_TEXT_UnknownString2, + BATTLE_TEXT_UnknownString4, + BATTLE_TEXT_HustleUse, + BATTLE_TEXT_MadeUseless, + BATTLE_TEXT_SandTombTrapped, + BATTLE_TEXT_Terminator, + BATTLE_TEXT_BoostedExp, + BATTLE_TEXT_SunIntensified, + BATTLE_TEXT_GroundMoveNegate, + BATTLE_TEXT_WallyBall, + BATTLE_TEXT_TookAttack2, + BATTLE_TEXT_ChoseDestiny, + BATTLE_TEXT_LostFocus, + BATTLE_TEXT_UseNext, + BATTLE_TEXT_FledUsingItem, + BATTLE_TEXT_FledUsingOther, + BATTLE_TEXT_DraggedOut, + BATTLE_TEXT_PreventedOther, + BATTLE_TEXT_NormalizedStatus, + BATTLE_TEXT_Used2, + BATTLE_TEXT_BoxFull, + BATTLE_TEXT_AvoidedAttack, + BATTLE_TEXT_MadeIneffective2, + BATTLE_TEXT_PreventedFlinching, + BATTLE_TEXT_AlreadyBurned, + BATTLE_TEXT_StatNoLower, + BATTLE_TEXT_BlocksOther2, + BATTLE_TEXT_WoreOff, + BATTLE_TEXT_RaisedDefenseLittle, + BATTLE_TEXT_RaisedSpDefLittle, + BATTLE_TEXT_BrokeWall, + BATTLE_TEXT_PreventedOther2, + BATTLE_TEXT_CuredOfProblem, + BATTLE_TEXT_AttackingCantEscape, + BATTLE_TEXT_Obtained1, + BATTLE_TEXT_Obtained2, + BATTLE_TEXT_Obtained3, + BATTLE_TEXT_NoEffect, + BATTLE_TEXT_NoEffectOn, +}; + +const u8 BattleText_UnknownString[] = _("{STRING 33}"); +const u8 BattleText_GainExpPoints[] = _("{STRING 0} gained{STRING 1}\n{STRING 42} EXP. Points!\p"); +const u8 BattleText_Terminator[] = _(""); +const u8 BattleText_BoostedExp[] = _(" a boosted"); +const u8 BattleText_GrewLevel[] = _("{STRING 0} grew to\nLV. {STRING 1}!{UNKNOWN_A}\p"); +const u8 BattleText_LearnedMove[] = _("{STRING 0} learned\n{STRING 1}!{UNKNOWN_A}\p"); +const u8 BattleText_TryingToLearnMove[] = _("{STRING 0} is trying to\nlearn {STRING 1}.\p"); +const u8 BattleText_CantLearnMore[] = _("But, {STRING 0} can’t learn\nmore than four moves.\p"); +const u8 BattleText_DeleteMove[] = _("Delete a move to make\nroom for {STRING 1}?"); +const u8 BattleText_DeletedMove[] = _("{STRING 0} forgot\n{STRING 1}.\p"); +const u8 BattleText_StopLearning[] = _("{PAUSE 32}Stop learning\n{STRING 1}?"); +const u8 BattleText_DidNotLearn[] = _("{STRING 0} did not learn\n{STRING 1}.\p"); +const u8 BattleText_UseNext[] = _("Use next POKéMON?"); +const u8 BattleText_AttackMissed[] = _("{ATTACKING_MON}’s\nattack missed!"); +const u8 BattleText_ProtectedItself[] = _("{DEFENDING_MON}\nprotected itself!"); +const u8 BattleText_AvoidedDamage[] = _("{DEFENDING_MON} avoided\ndamage with {STRING 22}!"); +const u8 BattleText_GroundMoveNegate[] = _("{DEFENDING_MON} makes GROUND\nmoves miss with {STRING 22}!"); +const u8 BattleText_AvoidedAttack[] = _("{DEFENDING_MON} avoided\nthe attack!"); +const u8 BattleText_DoesntAffect[] = _("It doesn’t affect\n{DEFENDING_MON}..."); +const u8 BattleText_AttackingFainted[] = _("{ATTACKING_MON}\nfainted!\p"); +const u8 BattleText_DefendingFainted[] = _("{DEFENDING_MON}\nfainted!\p"); +const u8 BattleText_WinningPrize[] = _("{STRING 32} got ¥{STRING 0}\nfor winning!\p"); +const u8 BattleText_OutOfUsablePoke[] = _("{STRING 32} is out of\nuseable POKéMON!\p"); +const u8 BattleText_WhitedOut[] = _("{STRING 32} whited out!{PAUSE_UNTIL_PRESS}"); +const u8 BattleText_PreventEscape[] = _("{STRING 16} prevents\nescape with {STRING 23}!\p"); +const u8 BattleText_CantEscape[] = _("Can’t escape!\p"); +const u8 BattleText_AttackingCantEscape[] = _("{ATTACKING_MON}\ncan’t escape!"); +const u8 BattleText_HitMulti[] = _("Hit {STRING 0} time(s)!"); +const u8 BattleText_FellAsleep[] = _("{STRING 14}\nfell asleep!"); +const u8 BattleText_MadeAsleep[] = _("{STRING 16}’s {STRING 23}\nmade {STRING 14} sleep!"); +const u8 BattleText_DefendingAsleep[] = _("{DEFENDING_MON} is\nalready asleep!"); +const u8 BattleText_AttackingAsleep[] = _("{ATTACKING_MON} is\nalready asleep!"); +const u8 BattleText_WasntAffected[] = _("{DEFENDING_MON}\nwasn’t affected!"); +const u8 BattleText_Poisoned[] = _("{STRING 14}\nwas poisoned!"); +const u8 BattleText_Poisoned2[] = _("{STRING 16}’s {STRING 23}\npoisoned {STRING 14}!"); +const u8 BattleText_PoisonHurt[] = _("{ATTACKING_MON} is hurt\nby poison!"); +const u8 BattleText_AlreadyPoisoned[] = _("{DEFENDING_MON} is already\npoisoned."); +const u8 BattleText_BadlyPoisoned[] = _("{STRING 14} is badly\npoisoned!"); +const u8 BattleText_EnergyDrained[] = _("{DEFENDING_MON} had its\nenergy drained!"); +const u8 BattleText_Burned[] = _("{STRING 14} was burned!"); +const u8 BattleText_Burned2[] = _("{STRING 16}’s {STRING 23}\nburned {STRING 14}!"); +const u8 BattleText_BurnHurt[] = _("{ATTACKING_MON} is hurt\nby its burn!"); +const u8 BattleText_AlreadyBurned[] = _("{DEFENDING_MON} already\nhas a burn."); +const u8 BattleText_Frozen[] = _("{STRING 14} was\nfrozen solid!"); +const u8 BattleText_Frozen2[] = _("{STRING 16}’s {STRING 23}\nfroze {STRING 14} solid!"); +const u8 BattleText_FrozenSolid[] = _("{ATTACKING_MON} is\nfrozen solid!"); +const u8 BattleText_DefendingDefrosted[] = _("{DEFENDING_MON} was\ndefrosted!"); +const u8 BattleText_AttackingDefrosted[] = _("{ATTACKING_MON} was\ndefrosted!"); +const u8 BattleText_Defrosted[] = _("{ATTACKING_MON} was\ndefrosted by {STRING 17}!"); +const u8 BattleText_Paralyzed[] = _("{STRING 14} is paralyzed!\nIt may be unable to move!"); +const u8 BattleText_Paralyzed2[] = _("{STRING 16}’s {STRING 23}\nparalyzed {STRING 14}!\lIt may be unable to move!"); +const u8 BattleText_Paralyzed3[] = _("{ATTACKING_MON} is paralyzed!\nIt can’t move!"); +const u8 BattleText_AlreadyParalyzed[] = _("{DEFENDING_MON} is\nalready paralyzed!"); +const u8 BattleText_ParalysisHealed[] = _("{DEFENDING_MON} was\nhealed of paralysis!"); +const u8 BattleText_DreamEaten[] = _("{DEFENDING_MON}’s\ndream was eaten!"); +const u8 BattleText_AttackingStatNoHigher[] = _("{ATTACKING_MON}’s {STRING 0}\nwon’t go higher!"); +const u8 BattleText_DefendingStatNoHigher[] = _("{DEFENDING_MON}’s {STRING 0}\nwon’t go lower!"); +const u8 BattleText_StoppedWorking[] = _("Your team’s {STRING 0}\nstopped working!"); +const u8 BattleText_StoppedWorking2[] = _("The foe’s {STRING 0}\nstopped working!"); +const u8 BattleText_Confused[] = _("{ATTACKING_MON} is\nconfused!"); +const u8 BattleText_ConfusionSnapOut[] = _("{ATTACKING_MON} snapped\nout of confusion!"); +const u8 BattleText_BecameConfused[] = _("{STRING 14} became\nconfused!"); +const u8 BattleText_AlreadyConfused[] = _("{DEFENDING_MON} is\nalready confused!"); +const u8 BattleText_FellLove[] = _("{DEFENDING_MON}\nfell in love!"); +const u8 BattleText_InLoveWith[] = _("{ATTACKING_MON} is in love\nwith {STRING 16}!"); +const u8 BattleText_ImmobilizedBy[] = _("{ATTACKING_MON} is\nimmobilized by love!"); +const u8 BattleText_BlownAway[] = _("{DEFENDING_MON} was\nblown away!"); +const u8 BattleText_TypeTransform[] = _("{ATTACKING_MON} transformed\ninto the {STRING 0} type!"); +const u8 BattleText_Flinched[] = _("{ATTACKING_MON} flinched!"); +const u8 BattleText_RegainedHealth[] = _("{DEFENDING_MON} regained\nhealth!"); +const u8 BattleText_HPFull[] = _("{DEFENDING_MON}’s\nHP is full!"); +const u8 BattleText_RaisedSpDef[] = _("{STRING 38}’s {STRING 17}\nraised SP. DEF!"); +const u8 BattleText_RaisedSpDefLittle[] = _("{STRING 38}’s {STRING 17}\nraised SP. DEF a little!"); +const u8 BattleText_RaisedDefense[] = _("{STRING 38}’s {STRING 17}\nraised DEFENSE!"); +const u8 BattleText_RaisedDefenseLittle[] = _("{STRING 38}’s {STRING 17}\nraised DEFENSE a little!"); +const u8 BattleText_CoveredVeil[] = _("{STRING 38} is covered\nby a veil!"); +const u8 BattleText_SafeguardActive[] = _("{DEFENDING_MON} is protected\nby SAFEGUARD!"); +const u8 BattleText_SafeguardFaded[] = _("{STRING 40}’s SAFEGUARD\nfaded!"); +const u8 BattleText_WentToSleep[] = _("{ATTACKING_MON} went\nto sleep!"); +const u8 BattleText_SpeltHealthy[] = _("{ATTACKING_MON} slept and\nbecame healthy!"); +const u8 BattleText_WhipWhirlwind[] = _("{ATTACKING_MON} whipped\nup a whirlwind!"); +const u8 BattleText_TookSunlight[] = _("{ATTACKING_MON} took\nin sunlight!"); +const u8 BattleText_LoweredHead[] = _("{ATTACKING_MON} lowered\nits head!"); +const u8 BattleText_IsGlowing[] = _("{ATTACKING_MON} is glowing!"); +const u8 BattleText_FlewHigh[] = _("{ATTACKING_MON} flew\nup high!"); +const u8 BattleText_DugHole[] = _("{ATTACKING_MON} dug a hole!"); +const u8 BattleText_HidUnderwater[] = _("{ATTACKING_MON} hid\nunderwater!"); +const u8 BattleText_SprangUp[] = _("{ATTACKING_MON} sprang up!"); +const u8 BattleText_SqueezedBind[] = _("{DEFENDING_MON} was squeezed by\n{ATTACKING_MON}’s BIND!"); +const u8 BattleText_TrappedVortex[] = _("{DEFENDING_MON} was trapped\nin the vortex!"); +const u8 BattleText_SandTombTrapped[] = _("{DEFENDING_MON} was trapped\nby SAND TOMB!"); +const u8 BattleText_Wrapped[] = _("{DEFENDING_MON} was WRAPPED by\n{ATTACKING_MON}!"); +const u8 BattleText_Clamped[] = _("{ATTACKING_MON} CLAMPED\n{DEFENDING_MON}!"); +const u8 BattleText_HurtBy[] = _("{ATTACKING_MON} is hurt\nby {STRING 0}!"); +const u8 BattleText_FreedFrom[] = _("{ATTACKING_MON} was freed\nfrom {STRING 0}!"); +const u8 BattleText_KeptGoingCrash[] = _("{ATTACKING_MON} kept going\nand crashed!"); +const u8 BattleText_MistShroud[] = _("{STRING 38} became\nshrouded in MIST!"); +const u8 BattleText_MistProtect[] = _("{STRING 16} is protected\nby MIST!"); +const u8 BattleText_GetPumped[] = _("{ATTACKING_MON} is getting\npumped!"); +const u8 BattleText_HitRecoil[] = _("{ATTACKING_MON} is hit\nwith recoil!"); +const u8 BattleText_ProtectedItself2[] = _("{ATTACKING_MON} protected\nitself!"); +const u8 BattleText_SandBuffeted[] = _("{ATTACKING_MON} is buffeted\nby the sandstorm!"); +const u8 BattleText_HailStricken[] = _("{ATTACKING_MON} is stricken\nby HAIL!"); +const u8 BattleText_WoreOff[] = _("{STRING 36}’s {STRING 0}\nwore off!"); +const u8 BattleText_WasSeeded[] = _("{DEFENDING_MON} was seeded!"); +const u8 BattleText_EvadedAttack[] = _("{DEFENDING_MON} evaded\nthe attack!"); +const u8 BattleText_HealthSapped[] = _("{ATTACKING_MON}’s health is\nsapped by LEECH SEED!"); +const u8 BattleText_FastAsleep[] = _("{ATTACKING_MON} is fast\nasleep."); +const u8 BattleText_WokeUp[] = _("{ATTACKING_MON} woke up!"); +const u8 BattleText_UproarAwake[] = _("But {STRING 16}’s UPROAR\nkept it awake!"); +const u8 BattleText_UproarWoke[] = _("{ATTACKING_MON} woke up\nin the UPROAR!"); +const u8 BattleText_UproarCaused[] = _("{ATTACKING_MON} caused\nan UPROAR!"); +const u8 BattleText_UproarMaking[] = _("{ATTACKING_MON} is making\nan UPROAR!"); +const u8 BattleText_CalmedDown[] = _("{ATTACKING_MON} calmed down."); +const u8 BattleText_UproarCantSleep[] = _("But {DEFENDING_MON} can’t\nsleep in an UPROAR!"); +const u8 BattleText_Stockpiled[] = _("{ATTACKING_MON} STOCKPILED\n{STRING 0}!"); +const u8 BattleText_StockpiledCant[] = _("{ATTACKING_MON} can’t\nSTOCKPILE any more!"); +const u8 BattleText_UproarCantSleep2[] = _("But {DEFENDING_MON} can’t\nsleep in an UPROAR!"); +const u8 BattleText_UproarKeptAwake[] = _("But the UPROAR kept\n{DEFENDING_MON} awake!"); +const u8 BattleText_StayedAwake[] = _("{DEFENDING_MON} stayed awake\nusing its {STRING 22}!"); +const u8 BattleText_StoringEnergy[] = _("{ATTACKING_MON} is storing\nenergy!"); +const u8 BattleText_UnleashedEnergy[] = _("{ATTACKING_MON} unleashed\nenergy!"); +const u8 BattleText_FatigueConfuse[] = _("{ATTACKING_MON} became\nconfused out of fatigue!"); +const u8 BattleText_PickedUpYen[] = _("{STRING 32} picked up\n¥{STRING 0}!\p"); +const u8 BattleText_Unaffected[] = _("{DEFENDING_MON} is\nunaffected!"); +const u8 BattleText_Transformed[] = _("{ATTACKING_MON} transformed\ninto {STRING 0}!"); +const u8 BattleText_SubMade[] = _("{ATTACKING_MON} made\na SUBSTITUTE!"); +const u8 BattleText_SubAlready[] = _("{ATTACKING_MON} already\nhas a SUBSTITUTE!"); +const u8 BattleText_SubTookDamage[] = _("The SUBSTITUTE took damage\nfor {DEFENDING_MON}!\p"); +const u8 BattleText_SubFaded[] = _("{DEFENDING_MON}’s\nSUBSTITUTE faded!\p"); +const u8 BattleText_MustRecharge[] = _("{ATTACKING_MON} must\nrecharge!"); +const u8 BattleText_RageBuilding[] = _("{DEFENDING_MON}’s RAGE\nis building!"); +const u8 BattleText_MoveWasDisabled[] = _("{DEFENDING_MON}’s {STRING 0}\nwas disabled!"); +const u8 BattleText_DisabledNoMore[] = _("{ATTACKING_MON} is disabled\nno more!"); +const u8 BattleText_EncoreGot[] = _("{DEFENDING_MON} got\nan ENCORE!"); +const u8 BattleText_EncoreEnded[] = _("{ATTACKING_MON}’s ENCORE\nended!"); +const u8 BattleText_TookAim[] = _("{ATTACKING_MON} took aim\nat {DEFENDING_MON}!"); +const u8 BattleText_SketchedMove[] = _("{ATTACKING_MON} SKETCHED\n{STRING 0}!"); +const u8 BattleText_DestinyBondTake[] = _("{ATTACKING_MON} is trying\nto take its foe with it!"); +const u8 BattleText_DestinyBondTaken[] = _("{DEFENDING_MON} took\n{ATTACKING_MON} with it!"); +const u8 BattleText_ReducedBy[] = _("Reduced {DEFENDING_MON}’s\n{STRING 0} by {STRING 1}!"); +const u8 BattleText_StoleSomething[] = _("{ATTACKING_MON} stole\n{DEFENDING_MON}’s {STRING 19}!"); +const u8 BattleText_CantEscapeNow[] = _("{DEFENDING_MON} can’t\nescape now!"); +const u8 BattleText_NightmareStart[] = _("{DEFENDING_MON} fell into\na NIGHTMARE!"); +const u8 BattleText_NightmareLock[] = _("{ATTACKING_MON} is locked\nin a NIGHTMARE!"); +const u8 BattleText_CurseLay[] = _("{ATTACKING_MON} cut its own HP\nand laid a CURSE on\l{DEFENDING_MON}!"); +const u8 BattleText_CurseAfflict[] = _("{ATTACKING_MON} is afflicted\nby the CURSE!"); +const u8 BattleText_SpikesScattered[] = _("{STRING 37} POKéMON team had SPIKES\nscattered around it!"); +const u8 BattleText_SpikesHurt[] = _("{STRING 16} is hurt\nby SPIKES!"); +const u8 BattleText_IdentifiedPoke[] = _("{ATTACKING_MON} identified\n{DEFENDING_MON}!"); +const u8 BattleText_PerishSongFell[] = _("{ATTACKING_MON}’s PERISH count\nfell to {STRING 0}!"); +const u8 BattleText_BracedItself[] = _("{ATTACKING_MON} braced\nitself!"); +const u8 BattleText_EnduredHit[] = _("{DEFENDING_MON} ENDURED\nthe hit!"); +const u8 BattleText_MagnitudeCount[] = _("MAGNITUDE {STRING 0}!"); +const u8 BattleText_CutHPMaxATK[] = _("{ATTACKING_MON} cut its own HP\nand maximized ATTACK!"); +const u8 BattleText_CopyStatChanges[] = _("{ATTACKING_MON} copied\n{DEFENDING_MON}’s stat changes!"); +const u8 BattleText_GotFreeFrom[] = _("{ATTACKING_MON} got free of\n{DEFENDING_MON}’s {STRING 0}!"); +const u8 BattleText_LeechShed[] = _("{ATTACKING_MON} shed\nLEECH SEED!"); +const u8 BattleText_SpikesBlownAway[] = _("{ATTACKING_MON} blew away\nSPIKES!"); +const u8 BattleText_FledBattle[] = _("{ATTACKING_MON} fled from\nbattle!"); +const u8 BattleText_ForesawAttack[] = _("{ATTACKING_MON} foresaw\nan attack!"); +const u8 BattleText_TookAttack[] = _("{DEFENDING_MON} took\n{STRING 0}’s attack!"); +const u8 BattleText_ChoseDestiny[] = _("{ATTACKING_MON} chose\n{STRING 17} as its destiny!"); +const u8 BattleText_PokeAttack[] = _("{STRING 0}’s attack!"); +const u8 BattleText_CenterAttention[] = _("{ATTACKING_MON} became the\ncenter of attention!"); +const u8 BattleText_ChargingPower[] = _("{ATTACKING_MON} began\ncharging power!"); +const u8 BattleText_NaturePower[] = _("NATURE POWER turned into\n{STRING 17}!"); +const u8 BattleText_StatusNormal[] = _("{ATTACKING_MON}’s status\nreturned to normal!"); +const u8 BattleText_TormentSubject[] = _("{DEFENDING_MON} was subjected\nto TORMENT!"); +const u8 BattleText_TightenFocus[] = _("{ATTACKING_MON} is tightening\nits focus!"); +const u8 BattleText_TauntFell[] = _("{DEFENDING_MON} fell for\nthe TAUNT!"); +const u8 BattleText_ReadyToHelp[] = _("{ATTACKING_MON} is ready to\nhelp {DEFENDING_MON}!"); +const u8 BattleText_SwitchedItems[] = _("{ATTACKING_MON} switched\nitems with its opponent!"); +const u8 BattleText_Obtained1[] = _("{ATTACKING_MON} obtained\n{STRING 0}."); +const u8 BattleText_Obtained2[] = _("{DEFENDING_MON} obtained\n{STRING 1}."); +const u8 BattleText_Obtained3[] = _("{ATTACKING_MON} obtained\n{STRING 0}.\p{DEFENDING_MON} obtained\n{STRING 1}."); +const u8 BattleText_CopiedObject[] = _("{ATTACKING_MON} copied\n{DEFENDING_MON}’s {STRING 22}!"); +const u8 BattleText_WishMade[] = _("{ATTACKING_MON} made a WISH!"); +const u8 BattleText_WishTrue[] = _("{STRING 0}’s WISH\ncame true!"); +const u8 BattleText_PlantedRoots[] = _("{ATTACKING_MON} planted its roots!"); +const u8 BattleText_AbsorbNutrients[] = _("{ATTACKING_MON} absorbed\nnutrients with its roots!"); +const u8 BattleText_AnchoredItself[] = _("{DEFENDING_MON} anchored\nitself with its roots!"); +const u8 BattleText_DrowsyMade[] = _("{ATTACKING_MON} made\n{DEFENDING_MON} drowsy!"); +const u8 BattleText_KnockedOffItem[] = _("{ATTACKING_MON} knocked off\n{DEFENDING_MON}’s {STRING 19}!"); +const u8 BattleText_AbilitySwap[] = _("{ATTACKING_MON} swapped abilities\nwith its opponent!"); +const u8 BattleText_SealedMove[] = _("{ATTACKING_MON} sealed the\nopponent’s move(s)!"); +const u8 BattleText_GrudgeBear[] = _("{ATTACKING_MON} wants the\nopponent to bear a GRUDGE!"); +const u8 BattleText_GrudgeLosePP[] = _("{ATTACKING_MON}’s {STRING 0}\nlost all its PP due to\lthe GRUDGE!"); +const u8 BattleText_ShroudedItself[] = _("{ATTACKING_MON} shrouded\nitself in {STRING 17}!"); +const u8 BattleText_MagicCoatBounce[] = _("{ATTACKING_MON}’s {STRING 17}\nwas bounced back by MAGIC COAT!"); +const u8 BattleText_AwaitMove[] = _("{ATTACKING_MON} awaits its foe\nto make a move!"); +const u8 BattleText_SnatchedMove[] = _("{DEFENDING_MON} SNATCHED\n{STRING 16}’s move!"); +const u8 BattleText_ElecWeakened[] = _("Electricity’s power was\nweakened!"); +const u8 BattleText_FireWeakened[] = _("Fire’s power was\nweakened!"); +const u8 BattleText_FoundOne[] = _("{ATTACKING_MON} found\none {STRING 19}!"); +const u8 BattleText_SoothingAroma[] = _("A soothing aroma wafted\nthrough the area!"); +const u8 BattleText_CantUseItems[] = _("Items can’t be used now.{PAUSE 64}"); +const u8 BattleText_UnknownString2[] = _("For {STRING 16},\n{STRING 19} {STRING 0}"); +const u8 BattleText_HustleUse[] = _("{STRING 16} used\n{STRING 19} to hustle!"); +const u8 BattleText_LostFocus[] = _("{ATTACKING_MON} lost its\nfocus and couldn’t move!"); +const u8 BattleText_DraggedOut[] = _("{DEFENDING_MON} was\ndragged out!\p"); +const u8 BattleText_BrokeWall[] = _("The wall shattered!"); +const u8 BattleText_NoEffect[] = _("But it had no effect!"); +const u8 BattleText_NoMovesLeft[] = _("{STRING 15} has no\nmoves left!\p"); +const u8 BattleText_MoveIsDisabled[] = _("{STRING 15}’s {STRING 17}\nis disabled!\p"); +const u8 BattleText_TormentNoUse[] = _("{STRING 15} can’t use the same\nmove twice in a row due to the TORMENT!\p"); +const u8 BattleText_TauntNoUse[] = _("{STRING 15} can’t use\n{STRING 17} after the TAUNT!\p"); +const u8 BattleText_SealedNoUse[] = _("{STRING 15} can’t use the\nsealed {STRING 17}!\p"); +const u8 BattleText_RainMade[] = _("{STRING 16}’s {STRING 23}\nmade it rain!"); +const u8 BattleText_SpeedRisen[] = _("{STRING 16}’s {STRING 23}\nraised its SPEED!"); +const u8 BattleText_ProtectedBy[] = _("{DEFENDING_MON} was protected\nby {STRING 22}!"); +const u8 BattleText_PreventedBy[] = _("{DEFENDING_MON}’s {STRING 22}\nprevents {ATTACKING_MON}\lfrom using {STRING 17}!"); +const u8 BattleText_HPRestoredUsing[] = _("{DEFENDING_MON} restored HP\nusing its {STRING 22}!"); +const u8 BattleText_MadeUseless[] = _("{DEFENDING_MON}’s {STRING 22}\nmade {STRING 17} useless!"); +const u8 BattleText_MadeType[] = _("{DEFENDING_MON}’s {STRING 22}\nmade it the {STRING 0} type!"); +const u8 BattleText_PreventedPara[] = _("{STRING 14}’s {STRING 22}\nprevents paralysis!"); +const u8 BattleText_PreventedRomance[] = _("{DEFENDING_MON}’s {STRING 22}\nprevents romance!"); +const u8 BattleText_PreventedPoison[] = _("{STRING 14}’s {STRING 22}\nprevents poisoning!"); +const u8 BattleText_PreventedConfusion[] = _("{DEFENDING_MON}’s {STRING 22}\nprevents confusion!"); +const u8 BattleText_RaisedFirePower[] = _("{DEFENDING_MON}’s {STRING 22}\nraised its FIRE power!"); +const u8 BattleText_AnchorsItself[] = _("{DEFENDING_MON} anchors\nitself with {STRING 22}!"); +const u8 BattleText_CutsAttack[] = _("{STRING 16}’s {STRING 23}\ncuts {DEFENDING_MON}’s ATTACK!"); +const u8 BattleText_PreventedStatLoss[] = _("{STRING 16}’s {STRING 23}\nprevents stat loss!"); +const u8 BattleText_HurtOther[] = _("{DEFENDING_MON}’s {STRING 22}\nhurt {ATTACKING_MON}!"); +const u8 BattleText_Traced[] = _("{STRING 16} TRACED\n{STRING 0}’s {STRING 1}!"); +const u8 BattleText_PreventedBurn[] = _("{STRING 14}’s {STRING 24}\nprevents burns!"); +const u8 BattleText_BlocksOther[] = _("{DEFENDING_MON}’s {STRING 22}\nblocks {STRING 17}!"); +const u8 BattleText_BlocksOther2[] = _("{STRING 16}’s {STRING 23}\nblocks {STRING 17}!"); +const u8 BattleText_RestoredHPByItem[] = _("{ATTACKING_MON}’s {STRING 21}\nrestored some HP!"); +const u8 BattleText_WhipSandstorm[] = _("{STRING 16}’s {STRING 23}\nwhipped up a sandstorm!"); +const u8 BattleText_SunIntensified[] = _("{STRING 16}’s {STRING 23}\nintensified the sun’s rays!"); +const u8 BattleText_PreventedLoss[] = _("{STRING 16}’s {STRING 23}\nprevents {STRING 0} loss!"); +const u8 BattleText_InfatuatedPoke[] = _("{DEFENDING_MON}’s {STRING 22}\ninfatuated {ATTACKING_MON}!"); +const u8 BattleText_MadeIneffective[] = _("{DEFENDING_MON}’s {STRING 22}\nmade {STRING 17} ineffective!"); +const u8 BattleText_CuredProblem[] = _("{STRING 16}’s {STRING 23}\ncured its {STRING 0} problem!"); +const u8 BattleText_OozeSuckup[] = _("It sucked up the\nLIQUID OOZE!"); +const u8 BattleText_Transformed2[] = _("{STRING 16} transformed!"); +const u8 BattleText_TookAttack2[] = _("{DEFENDING_MON}’s {STRING 22}\ntook the attack!"); +const u8 BattleText_PreventedSwitch[] = _("{STRING 0}’s {STRING 20}\nprevents switching!\p"); +const u8 BattleText_PreventedOther[] = _("{DEFENDING_MON}’s {STRING 22}\nprevented {STRING 16}’s\l{STRING 0} from working!"); +const u8 BattleText_MadeIneffective2[] = _("{STRING 16}’s {STRING 23}\nmade it ineffective!"); +const u8 BattleText_PreventedFlinching[] = _("{STRING 14}’s {STRING 24}\nprevents flinching!"); +const u8 BattleText_PreventedOther2[] = _("{ATTACKING_MON}’s {STRING 21}\nprevents {DEFENDING_MON}’s\l{STRING 22} from working!"); +const u8 BattleText_CuredOfProblem[] = _("{STRING 16}’s {STRING 23}\ncured its {STRING 0} problem!"); +const u8 BattleText_NoEffectOn[] = _("{STRING 16}’s {STRING 23}\nhad no effect on {STRING 14}!"); +const u8 BattleText_Sharply[] = _("sharply "); +const u8 BattleText_Rose[] = _("rose!"); +const u8 BattleText_Harshly[] = _("harshly "); +const u8 BattleText_Fell[] = _("fell!"); +const u8 BattleText_UnknownString7[] = _("{ATTACKING_MON}’s {STRING 0}\n{STRING 1}"); +const u8 BattleText_UnknownString3[] = _("{DEFENDING_MON}’s {STRING 0}\n{STRING 1}"); +const u8 BattleText_UnknownString4[] = _("Using {STRING 19}, the {STRING 0}\nof {STRING 16} {STRING 1}"); +const u8 BattleText_UnknownString5[] = _("{ATTACKING_MON}’s {STRING 0}\n{STRING 1}"); +const u8 BattleText_UnknownString6[] = _("{DEFENDING_MON}’s {STRING 0}\n{STRING 1}"); +const u8 BattleText_StatNoHigher[] = _("{ATTACKING_MON}’s stats won’t\ngo any higher!"); +const u8 BattleText_StatNoLower[] = _("{DEFENDING_MON}’s stats won’t\ngo any lower!"); +const u8 BattleText_Critical[] = _("A critical hit!"); +const u8 BattleText_GrandSlam[] = _("It’s a one-hit KO!"); +const u8 BattleText_MoveForget123[] = _("{PAUSE 32}1, {PAUSE 15}2 and...{PAUSE 15} ...{PAUSE 15} ...{PAUSE 15}\n{PAUSE 15}{PLAY_SE SE_KON}Poof!\p"); +const u8 BattleText_MoveForgetAnd[] = _("And...\p"); +const u8 BattleText_CantForgetHM[] = _("HM moves can’t be\nforgotten now.\p"); +const u8 BattleText_NotEffective[] = _("It’s not very effective..."); +const u8 BattleText_SuperEffective[] = _("It’s super effective!"); +const u8 BattleText_GotAwaySafely[] = _("{PLAY_SE SE_NIGERU}Got away safely!\p"); +const u8 BattleText_FledUsingItem[] = _("{PLAY_SE SE_NIGERU}{ATTACKING_MON} fled\nusing its {STRING 19}!\p"); +const u8 BattleText_FledUsingOther[] = _("{PLAY_SE SE_NIGERU}{ATTACKING_MON} fled\nusing {STRING 21}!\p"); +const u8 BattleText_FledWild[] = _("{PLAY_SE SE_NIGERU}Wild {STRING 0} fled!"); +const u8 BattleText_PlayerDefeatedTrainer[] = _("Player defeated\n{STRING 29}!"); +const u8 BattleText_PlayerDefeatedTrainers[] = _("Player beat {STRING 30}\nand {STRING 29}!"); +const u8 BattleText_PlayerLostTrainer[] = _("Player lost against\n{STRING 29}!"); +const u8 BattleText_PlayerLostTrainers[] = _("Player lost to {STRING 30}\nand {STRING 29}!"); +const u8 BattleText_PlayerTiedTrainer[] = _("Player tied against\n{STRING 29}!"); +const u8 BattleText_PlayerTiedTrainers[] = _("Player tied against {STRING 30}\nand {STRING 29}!"); +const u8 BattleText_FledSingle[] = _("{PLAY_SE SE_NIGERU}{STRING 29} fled!"); +const u8 BattleText_FledDouble[] = _("{PLAY_SE SE_NIGERU}{STRING 29} and\n{STRING 30} fled!"); +const u8 BattleText_NoRunning[] = _("No! There’s no running\nfrom a TRAINER battle!\p"); +const u8 BattleText_CantEscape2[] = _("Can’t escape!\p"); +const u8 BattleText_BirchDontLeaveMe[] = _("PROF. BIRCH: D-don’t leave\nme here like this!\p"); +const u8 BattleText_Nothing[] = _("But nothing happened!"); +const u8 BattleText_Failed[] = _("But it failed!"); +const u8 BattleText_HurtItself[] = _("It hurt itself in its\nconfusion!"); +const u8 BattleText_MirrorFail[] = _("The MIRROR MOVE failed!"); +const u8 BattleText_RainStart[] = _("It started to rain!"); +const u8 BattleText_PourStart[] = _("A downpour started!"); +const u8 BattleText_RainCont1[] = _("Rain continues to fall."); +const u8 BattleText_PourCont[] = _("The downpour continues."); +const u8 BattleText_RainStop[] = _("The rain stopped."); +const u8 BattleText_SandBrewed[] = _("A sandstorm brewed!"); +const u8 BattleText_SandRages[] = _("The sandstorm rages."); +const u8 BattleText_SandSubsided[] = _("The sandstorm subsided."); +const u8 BattleText_SunBright[] = _("The sunlight got bright!"); +const u8 BattleText_SunStrong[] = _("The sunlight is strong."); +const u8 BattleText_SunFaded[] = _("The sunlight faded."); +const u8 BattleText_HailStart[] = _("It started to hail!"); +const u8 BattleText_HailCont[] = _("Hail continues to fall."); +const u8 BattleText_HailStop[] = _("The hail stopped."); +const u8 BattleText_SpitUpFail[] = _("But it failed to SPIT UP\na thing!"); +const u8 BattleText_SwallowFail[] = _("But it failed to SWALLOW\na thing!"); +const u8 BattleText_WindHeatWave[] = _("The wind turned into a\nHEAT WAVE!"); +const u8 BattleText_StatElim[] = _("All stat changes were\neliminated!"); +const u8 BattleText_CoinScatter[] = _("Coins scattered everywhere!"); +const u8 BattleText_SubWeak[] = _("It was too weak to make\na SUBSTITUTE!"); +const u8 BattleText_PainSplit[] = _("The battlers shared\ntheir pain!"); +const u8 BattleText_BellChime[] = _("A bell chimed!"); +const u8 BattleText_PerishSong[] = _("All affected POKéMON will\nfaint in 3 turns!"); +const u8 BattleText_NoPP1[] = _("There’s no PP left for\nthis move!\p"); +const u8 BattleText_NoPP2[] = _("But there was no PP left\nfor the move!"); +const u8 BattleText_IgnoredOrdersSLP[] = _("{ATTACKING_MON} ignored\norders while asleep!"); +const u8 BattleText_IgnoredOrders[] = _("{ATTACKING_MON} ignored\norders!"); +const u8 BattleText_BeganNap[] = _("{ATTACKING_MON} began to nap!"); +const u8 BattleText_LoafingAround[] = _("{ATTACKING_MON} is\nloafing around!"); +const u8 BattleText_WontObey[] = _("{ATTACKING_MON} won’t\nobey!"); +const u8 BattleText_TurnedAway[] = _("{ATTACKING_MON} turned away!"); +const u8 BattleText_NotNotice[] = _("{ATTACKING_MON} pretended\nto not notice!"); +const u8 BattleText_WillSwitch[] = _("{STRING 25} {STRING 26} is\nabout to use {STRING 1}.\pWill {STRING 32} change\nPOKéMON?"); +const u8 BattleText_LearnedMove2[] = _("{ATTACKING_MON} learned\n{STRING 0}!"); +const u8 BattleText_PlayerDefeatedTrainer2[] = _("Player defeated\n{STRING 25} {STRING 26}!\p"); +const u8 BattleText_CreptCloser[] = _("{STRING 32} crept closer to\n{STRING 3}!"); +const u8 BattleText_CantGetCloser[] = _("{STRING 32} can’t get any closer!"); +const u8 BattleText_WatchingCarefully[] = _("{STRING 3} is watching\ncarefully!"); +const u8 BattleText_CuriousAbout[] = _("{STRING 3} is curious about\nthe {STRING 0}!"); +const u8 BattleText_EnthralledBy[] = _("{STRING 3} is enthralled by\nthe {STRING 0}!"); +const u8 BattleText_IgnoredThing[] = _("{STRING 3} completely ignored\nthe {STRING 0}!"); +const u8 BattleText_ThrewBlock[] = _("{STRING 32} threw a {POKEBLOCK}\nat the {STRING 3}!"); +const u8 BattleText_SafariOver[] = _("{PLAY_SE SE_PINPON}ANNOUNCER: You’re out of\nSAFARI BALLS! Game over!\p"); +const u8 BattleText_WildAppeared1[] = _("Wild {STRING 3} appeared!\p"); +const u8 BattleText_WildAppeared2[] = _("Wild {STRING 3} appeared!\p"); +const u8 BattleText_WildAppeared3[] = _("Wild {STRING 3} appeared!{PAUSE 127}"); +const u8 BattleText_WildDoubleAppeared[] = _("Wild {STRING 5} and\n{STRING 3} appeared!\p"); +const u8 BattleText_SingleWantToBattle1[] = _("{STRING 25} {STRING 26}\nwould like to battle!\p"); +const u8 BattleText_SingleWantToBattle2[] = _("{STRING 29}\nwants to battle!"); +const u8 BattleText_DoubleWantToBattle[] = _("{STRING 29} and {STRING 30}\nwant to battle!"); +const u8 BattleText_SentOutSingle1[] = _("{STRING 25} {STRING 26} sent\nout {STRING 3}!"); +const u8 BattleText_SentOutDouble1[] = _("{STRING 25} {STRING 26} sent\nout {STRING 3} and {STRING 5}!"); +const u8 BattleText_SentOutSingle2[] = _("{STRING 25} {STRING 26} sent\nout {STRING 0}!"); +const u8 BattleText_SentOutSingle3[] = _("{STRING 29} sent\nout {STRING 3}!"); +const u8 BattleText_SentOutDouble2[] = _("{STRING 29} sent out\n{STRING 3} and {STRING 5}!"); +const u8 BattleText_SentOutDouble3[] = _("{STRING 29} sent out\n{STRING 7}!\p{STRING 30} sent out\n{STRING 9}!"); +const u8 BattleText_SentOutSingle4[] = _("{STRING 29} sent out\n{STRING 0}!"); +const u8 BattleText_SentOutSingle5[] = _("{STRING 31} sent out\n{STRING 0}!"); +const u8 BattleText_SentOutSingle6[] = _("Go! {STRING 2}!"); +const u8 BattleText_SentOutDouble4[] = _("Go! {STRING 2} and\n{STRING 4}!"); +const u8 BattleText_SentOutSingle7[] = _("Go! {STRING 0}!"); +const u8 BattleText_SentOutSingle8[] = _("Do it! {STRING 0}!"); +const u8 BattleText_SentOutSingle9[] = _("Go for it, {STRING 0}!"); +const u8 BattleText_SentOutSingle10[] = _("Your foe’s weak!\nGet’m, {STRING 0}!"); +const u8 BattleText_SentOutSingle11[] = _("{STRING 28} sent out\n{STRING 8}!\pGo! {STRING 6}!"); +const u8 BattleText_ComeBackSingle1[] = _("{STRING 0}, that’s enough!\nCome back!"); +const u8 BattleText_ComeBackSingle2[] = _("{STRING 0}, come back!"); +const u8 BattleText_ComeBackSingle3[] = _("{STRING 0}, OK!\nCome back!"); +const u8 BattleText_ComeBackSingle4[] = _("{STRING 0}, good!\nCome back!"); +const u8 BattleText_WithdrewPoke1[] = _("{STRING 25} {STRING 26}\nwithdrew {STRING 0}!"); +const u8 BattleText_WithdrewPoke2[] = _("{STRING 29} withdrew\n{STRING 0}!"); +const u8 BattleText_WithdrewPoke3[] = _("{STRING 31} withdrew\n{STRING 0}!"); +const u8 BattleText_Wild[] = _("Wild "); +const u8 BattleText_Foe[] = _("Foe "); +const u8 BattleText_Foe2[] = _("Foe "); +const u8 BattleText_Ally[] = _("Ally "); +const u8 BattleText_Foe3[] = _("Foe "); +const u8 BattleText_Ally2[] = _("Ally "); +const u8 BattleText_Foe4[] = _("Foe "); +const u8 BattleText_Ally3[] = _("Ally "); +const u8 BattleText_OpponentUsedMove[] = _("{ATTACKING_MON} used\n{STRING 1}"); +const u8 BattleText_Exclamation2[] = _("!"); +const u8 BattleText_Exclamation3[] = _("!"); +const u8 BattleText_Exclamation4[] = _("!"); +const u8 BattleText_Exclamation5[] = _("!"); +const u8 BattleText_Exclamation[] = _("!"); +const u8 BattleStatText_HP[] = _("HP"); +const u8 BattleStatText_Attack[] = _("ATTACK"); +const u8 BattleStatText_Defense[] = _("DEFENSE"); +const u8 BattleStatText_Speed[] = _("SPEED"); +const u8 BattleStatText_SpAtk[] = _("SP. ATK"); +const u8 BattleStatText_SpDef[] = _("SP. DEF"); +const u8 BattleStatText_Accuracy[] = _("accuracy"); +const u8 BattleStatText_Evasion[] = _("evasiveness"); +const u8 ContestStatText_TooSpicy[] = _("was too spicy!"); +const u8 ContestStatText_TooDry[] = _("was too dry!"); +const u8 ContestStatText_TooSweet[] = _("was too sweet!"); +const u8 ContestStatText_TooBitter[] = _("was too bitter!"); +const u8 ContestStatText_TooSour[] = _("was too sour!"); +const u8 BattleText_Used1[] = _("{STRING 32} used\n{STRING 19}!"); +const u8 BattleText_TutorialUsed[] = _("WALLY used\n{STRING 19}!"); +const u8 BattleText_Used2[] = _("{STRING 25} {STRING 26}\nused {STRING 19}!"); +const u8 BattleText_BlockBall[] = _("The TRAINER blocked the BALL!"); +const u8 BattleText_DontBeAThief[] = _("Don’t be a thief!"); +const u8 BattleText_DodgeBall[] = _("It dodged the thrown BALL!\nThis POKéMON can’t be caught!"); +const u8 BattleText_MissPoke[] = _("You missed the POKéMON!"); +const u8 BattleText_BallBrokeOhNo[] = _("Oh, no!\nThe POKéMON broke free!"); +const u8 BattleText_BallBrokeAppeared[] = _("Aww!\nIt appeared to be caught!"); +const u8 BattleText_BallBrokeAlmost[] = _("Aargh!\nAlmost had it!"); +const u8 BattleText_BallBrokeSoClose[] = _("Shoot!\nIt was so close, too!"); +const u8 BattleText_BallCaught1[] = _("Gotcha!\n{STRING 3} was caught!{UNKNOWN_A}{PLAY_BGM BGM_KACHI22}\p"); +const u8 BattleText_BallCaught2[] = _("Gotcha!\n{STRING 3} was caught!{UNKNOWN_A}{PLAY_BGM BGM_KACHI22}{PAUSE 127}"); +const u8 BattleText_GiveNickname[] = _("Give a nickname to the\ncaptured {STRING 3}?"); +const u8 BattleText_SentToPC[] = _("{STRING 3} was sent to\n{STRING 35} PC."); +const u8 BattleText_Someone[] = _("someone’s"); +const u8 BattleText_Lanette[] = _("LANETTE’s"); +const u8 BattleText_AddedToDex[] = _("{STRING 3}’s data was\nadded to the POKéDEX.\p"); +const u8 BattleText_Raining[] = _("It is raining."); +const u8 BattleText_Sandstorm[] = _("A sandstorm is raging."); +const u8 BattleText_BoxFull[] = _("The BOX is full!\nYou can’t catch any more!\p"); +const u8 BattleText_EnigmaBerry[] = _("ENIGMA BERRY"); +const u8 BattleText_Berry[] = _(" BERRY"); +const u8 BattleText_CuredParalysis[] = _("{STRING 16}’s {STRING 19}\ncured paralysis!"); +const u8 BattleText_CuredPoison[] = _("{STRING 16}’s {STRING 19}\ncured poison!"); +const u8 BattleText_CuredBurn[] = _("{STRING 16}’s {STRING 19}\nhealed its burn!"); +const u8 BattleText_CuredFreeze[] = _("{STRING 16}’s {STRING 19}\ndefrosted it!"); +const u8 BattleText_CuredSleep[] = _("{STRING 16}’s {STRING 19}\nwoke it from its sleep!"); +const u8 BattleText_CuredConfusion[] = _("{STRING 16}’s {STRING 19}\nsnapped it out of confusion!"); +const u8 BattleText_CuredStatus[] = _("{STRING 16}’s {STRING 19}\ncured its {STRING 0} problem!"); +const u8 BattleText_NormalizedStatus[] = _("{STRING 16}’s {STRING 19}\nnormalized its status!"); +const u8 BattleText_RestoredHealth[] = _("{STRING 16}’s {STRING 19}\nrestored health!"); +const u8 BattleText_RestoredPP[] = _("{STRING 16}’s {STRING 19}\nrestored {STRING 0}’s PP!"); +const u8 BattleText_RestoredStatus[] = _("{STRING 16}’s {STRING 19}\nrestored its status!"); +const u8 BattleText_RestoredHPLittle[] = _("{STRING 16}’s {STRING 19}\nrestored its HP a little!"); +const u8 BattleText_ChoiceBand[] = _("{STRING 19} allows the\nuse of only {STRING 17}!\p"); +const u8 BattleText_FocusSash[] = _("{DEFENDING_MON} hung on\nusing its {STRING 19}!"); +const u8 BattleText_Terminator2[] = _(""); +const u8 BattleText_WallyBall[] = _("You throw a BALL now, right?\nI... I’ll do my best!"); +const u8 BattleText_StartEvo[] = _("What?\n{STRING 2} is evolving!"); +const u8 BattleText_FinishEvo[] = _("Congratulations! Your {STRING 2}\nevolved into {STRING 3}!{UNKNOWN_A}\p"); +const u8 BattleText_StopEvo[] = _("Huh? {STRING 2}\nstopped evolving!\p"); +const u8 BattleText_OtherMenu[] = _("What should\n{STRING 15} do?"); +const u8 BattleText_PlayerMenu[] = _("What will\n{STRING 32} do?"); +const u8 BattleText_WallyMenu[] = _("What will\nWALLY do?"); +const u8 BattleText_LinkStandby[] = _("{PAUSE 16}Link standby..."); +const u8 BattleText_MenuOptions[] = _("{PALETTE 5}{COLOR_HIGHLIGHT_SHADOW SKY_BLUE LIGHT_BLUE WHITE2}FIGHT{CLEAR_TO 0x2E}BAG\nPOKéMON{CLEAR_TO 0x2E}RUN"); +const u8 BattleText_MenuOptionsSafari[] = _("{PALETTE 5}{COLOR_HIGHLIGHT_SHADOW SKY_BLUE LIGHT_BLUE WHITE2}BALL{CLEAR_TO 0x2E}{POKEBLOCK}\nGO NEAR{CLEAR_TO 0x2E}RUN"); +const u8 BattleText_PP[] = _("{PALETTE 5}{COLOR_HIGHLIGHT_SHADOW SKY_BLUE LIGHT_BLUE WHITE2}PP\nTYPE/"); +const u8 BattleText_Format[] = _("{PALETTE 5}{COLOR_HIGHLIGHT_SHADOW SKY_BLUE LIGHT_BLUE WHITE2}"); // cant think of a better name +const u8 BattleText_ForgetMove[] = _("{COLOR_HIGHLIGHT_SHADOW SKY_BLUE LIGHT_BLUE WHITE2}{PALETTE 5}Which move should\nbe forgotten?"); +const u8 BattleText_YesNo[] = _("{PALETTE 5}{COLOR_HIGHLIGHT_SHADOW SKY_BLUE LIGHT_BLUE WHITE2}Yes\nNo"); +const u8 BattleText_SwitchWhich[] = _("{PALETTE 5}{COLOR_HIGHLIGHT_SHADOW SKY_BLUE LIGHT_BLUE WHITE2}Switch\nwhich?"); +const u8 BattleText_Format2[] = _("{PALETTE 5}{COLOR_HIGHLIGHT_SHADOW SKY_BLUE LIGHT_BLUE WHITE2}"); +const u8 BattleText_RightArrow[] = _("{RIGHT_ARROW}"); +const u8 BattleText_Plus[] = _("+"); +const u8 BattleText_Dash[] = _("-"); +const u8 BattleText_HP[] = _("HP "); +const u8 BattleText_Attack[] = _("ATTACK "); +const u8 BattleText_Defense[] = _("DEFENSE"); +const u8 BattleText_SpAtk[] = _("SP. ATK"); +const u8 BattleText_SpDef[] = _("SP. DEF"); +const u8 BattleText_SafariBalls[] = _("{HIGHLIGHT RED}SAFARI BALLS"); +const u8 BattleText_SafariBallsLeft[] = _("{HIGHLIGHT RED}Left: "); +const u8 BattleText_HighlightRed[] = _("{HIGHLIGHT RED}"); +const u8 BattleText_Sleep[] = _("sleep"); +const u8 BattleText_PoisonStatus[] = _("poison"); +const u8 BattleText_Burn[] = _("burn"); +const u8 BattleText_Paralysis[] = _("paralysis"); +const u8 BattleText_IceStatus[] = _("ice"); +const u8 BattleText_Confusion[] = _("confusion"); +const u8 BattleText_Love[] = _("love"); +const u8 BattleText_Format3[] = _(" and "); +const u8 BattleText_Format4[] = _(", "); +const u8 BattleText_Format5[] = _(" "); +const u8 BattleText_Format6[] = _("\l"); +const u8 BattleText_Format7[] = _("\n"); +const u8 BattleText_Format8[] = _("are"); +const u8 BattleText_Format9[] = _("are"); +const u8 gBadEggNickname[] = _("Bad EGG"); // 8400E3A +const u8 BattleText_Wally[] = _("WALLY"); +const u8 BattleText_Win[] = _("{HIGHLIGHT TRANSPARENT}Win"); // 8400E48 +const u8 BattleText_Loss[] = _("{HIGHLIGHT TRANSPARENT}Loss"); // 8400E4F +const u8 BattleText_Tie[] = _("{HIGHLIGHT TRANSPARENT}Tie"); // 8400E57 +const u8 BattleText_Format10[] = _(" is"); +const u8 BattleText_Format11[] = _("’s"); +const u8 BattleText_Normal[] = _("a NORMAL move"); +const u8 BattleText_Fighting[] = _("a FIGHTING move"); +const u8 BattleText_Flying[] = _("a FLYING move"); +const u8 BattleText_Poison[] = _("a POISON move"); +const u8 BattleText_Ground[] = _("a GROUND move"); +const u8 BattleText_Rock[] = _("a ROCK move"); +const u8 BattleText_Bug[] = _("a BUG move"); +const u8 BattleText_Ghost[] = _("a GHOST move"); +const u8 BattleText_Steel[] = _("a STEEL move"); +const u8 BattleText_Typeless[] = _("a ??? move"); +const u8 BattleText_Fire[] = _("a FIRE move"); +const u8 BattleText_Water[] = _("a WATER move"); +const u8 BattleText_Grass[] = _("a GRASS move"); +const u8 BattleText_Electric[] = _("an ELECTRIC move"); +const u8 BattleText_Psychic[] = _("a PSYCHIC move"); +const u8 BattleText_Ice[] = _("an ICE move"); +const u8 BattleText_Dragon[] = _("a DRAGON move"); +const u8 BattleText_Dark[] = _("a DARK move"); + +const u8 *const gUnknown_08400F58[] = +{ + BattleStatText_HP, + BattleStatText_Attack, + BattleStatText_Defense, + BattleStatText_Speed, + BattleStatText_SpAtk, + BattleStatText_SpDef, + BattleStatText_Accuracy, + BattleStatText_Evasion, +}; + +const u8 *const gUnknown_08400F78[] = +{ + ContestStatText_TooSpicy, + ContestStatText_TooDry, + ContestStatText_TooSweet, + ContestStatText_TooBitter, + ContestStatText_TooSour, +}; + +const u8 *const gBattleStringsTable[] = +{ + BattleText_UnknownString, + BattleText_GainExpPoints, + BattleText_GrewLevel, + BattleText_LearnedMove, + BattleText_TryingToLearnMove, + BattleText_CantLearnMore, + BattleText_DeleteMove, + BattleText_DeletedMove, + BattleText_StopLearning, + BattleText_DidNotLearn, + BattleText_LearnedMove2, + BattleText_AttackMissed, + BattleText_ProtectedItself, + BattleText_StatNoHigher, + BattleText_AvoidedDamage, + BattleText_DoesntAffect, + BattleText_AttackingFainted, + BattleText_DefendingFainted, + BattleText_WinningPrize, + BattleText_OutOfUsablePoke, + BattleText_WhitedOut, + BattleText_PreventEscape, + BattleText_HitMulti, + BattleText_FellAsleep, + BattleText_MadeAsleep, + BattleText_DefendingAsleep, + BattleText_AttackingAsleep, + BattleText_WasntAffected, + BattleText_Poisoned, + BattleText_Poisoned2, + BattleText_PoisonHurt, + BattleText_AlreadyPoisoned, + BattleText_BadlyPoisoned, + BattleText_EnergyDrained, + BattleText_Burned, + BattleText_Burned2, + BattleText_BurnHurt, + BattleText_Frozen, + BattleText_Frozen2, + BattleText_FrozenSolid, + BattleText_DefendingDefrosted, + BattleText_AttackingDefrosted, + BattleText_Defrosted, + BattleText_Paralyzed, + BattleText_Paralyzed2, + BattleText_Paralyzed3, + BattleText_AlreadyParalyzed, + BattleText_ParalysisHealed, + BattleText_DreamEaten, + BattleText_AttackingStatNoHigher, + BattleText_DefendingStatNoHigher, + BattleText_StoppedWorking, + BattleText_StoppedWorking2, + BattleText_Confused, + BattleText_ConfusionSnapOut, + BattleText_BecameConfused, + BattleText_AlreadyConfused, + BattleText_FellLove, + BattleText_InLoveWith, + BattleText_ImmobilizedBy, + BattleText_BlownAway, + BattleText_TypeTransform, + BattleText_Flinched, + BattleText_RegainedHealth, + BattleText_HPFull, + BattleText_RaisedSpDef, + BattleText_RaisedDefense, + BattleText_CoveredVeil, + BattleText_SafeguardActive, + BattleText_SafeguardFaded, + BattleText_WentToSleep, + BattleText_SpeltHealthy, + BattleText_WhipWhirlwind, + BattleText_TookSunlight, + BattleText_LoweredHead, + BattleText_IsGlowing, + BattleText_FlewHigh, + BattleText_DugHole, + BattleText_SqueezedBind, + BattleText_TrappedVortex, + BattleText_Wrapped, + BattleText_Clamped, + BattleText_HurtBy, + BattleText_FreedFrom, + BattleText_KeptGoingCrash, + BattleText_MistShroud, + BattleText_MistProtect, + BattleText_GetPumped, + BattleText_HitRecoil, + BattleText_ProtectedItself2, + BattleText_SandBuffeted, + BattleText_HailStricken, + BattleText_WasSeeded, + BattleText_EvadedAttack, + BattleText_HealthSapped, + BattleText_FastAsleep, + BattleText_WokeUp, + BattleText_UproarAwake, + BattleText_UproarWoke, + BattleText_UproarCaused, + BattleText_UproarMaking, + BattleText_CalmedDown, + BattleText_UproarCantSleep, + BattleText_Stockpiled, + BattleText_StockpiledCant, + BattleText_UproarCantSleep2, + BattleText_UproarKeptAwake, + BattleText_StayedAwake, + BattleText_StoringEnergy, + BattleText_UnleashedEnergy, + BattleText_FatigueConfuse, + BattleText_PickedUpYen, + BattleText_Unaffected, + BattleText_Transformed, + BattleText_SubMade, + BattleText_SubAlready, + BattleText_SubTookDamage, + BattleText_SubFaded, + BattleText_MustRecharge, + BattleText_RageBuilding, + BattleText_MoveWasDisabled, + BattleText_MoveIsDisabled, + BattleText_DisabledNoMore, + BattleText_EncoreGot, + BattleText_EncoreEnded, + BattleText_TookAim, + BattleText_SketchedMove, + BattleText_DestinyBondTake, + BattleText_DestinyBondTaken, + BattleText_ReducedBy, + BattleText_StoleSomething, + BattleText_CantEscapeNow, + BattleText_NightmareStart, + BattleText_NightmareLock, + BattleText_CurseLay, + BattleText_CurseAfflict, + BattleText_SpikesScattered, + BattleText_SpikesHurt, + BattleText_IdentifiedPoke, + BattleText_PerishSongFell, + BattleText_BracedItself, + BattleText_EnduredHit, + BattleText_MagnitudeCount, + BattleText_CutHPMaxATK, + BattleText_CopyStatChanges, + BattleText_GotFreeFrom, + BattleText_LeechShed, + BattleText_SpikesBlownAway, + BattleText_FledBattle, + BattleText_ForesawAttack, + BattleText_TookAttack, + BattleText_PokeAttack, + BattleText_CenterAttention, + BattleText_ChargingPower, + BattleText_NaturePower, + BattleText_StatusNormal, + BattleText_NoMovesLeft, + BattleText_TormentSubject, + BattleText_TormentNoUse, + BattleText_TightenFocus, + BattleText_TauntFell, + BattleText_TauntNoUse, + BattleText_ReadyToHelp, + BattleText_SwitchedItems, + BattleText_CopiedObject, + BattleText_WishMade, + BattleText_WishTrue, + BattleText_PlantedRoots, + BattleText_AbsorbNutrients, + BattleText_AnchoredItself, + BattleText_DrowsyMade, + BattleText_KnockedOffItem, + BattleText_AbilitySwap, + BattleText_SealedMove, + BattleText_SealedNoUse, + BattleText_GrudgeBear, + BattleText_GrudgeLosePP, + BattleText_ShroudedItself, + BattleText_MagicCoatBounce, + BattleText_AwaitMove, + BattleText_SnatchedMove, + BattleText_RainMade, + BattleText_SpeedRisen, + BattleText_ProtectedBy, + BattleText_PreventedBy, + BattleText_HPRestoredUsing, + BattleText_MadeType, + BattleText_PreventedPara, + BattleText_PreventedRomance, + BattleText_PreventedPoison, + BattleText_PreventedConfusion, + BattleText_RaisedFirePower, + BattleText_AnchorsItself, + BattleText_CutsAttack, + BattleText_PreventedStatLoss, + BattleText_HurtOther, + BattleText_Traced, + BattleText_Sharply, + BattleText_Rose, + BattleText_Harshly, + BattleText_Fell, + BattleText_UnknownString7, + BattleText_UnknownString3, + BattleText_UnknownString5, + BattleText_UnknownString6, + BattleText_Critical, + BattleText_GrandSlam, + BattleText_MoveForget123, + BattleText_MoveForgetAnd, + BattleText_NotEffective, + BattleText_SuperEffective, + BattleText_GotAwaySafely, + BattleText_FledWild, + BattleText_NoRunning, + BattleText_CantEscape2, + BattleText_BirchDontLeaveMe, + BattleText_Nothing, + BattleText_Failed, + BattleText_HurtItself, + BattleText_MirrorFail, + BattleText_RainStart, + BattleText_PourStart, + BattleText_RainCont1, + BattleText_PourCont, + BattleText_RainStop, + BattleText_SandBrewed, + BattleText_SandRages, + BattleText_SandSubsided, + BattleText_SunBright, + BattleText_SunStrong, + BattleText_SunFaded, + BattleText_HailStart, + BattleText_HailCont, + BattleText_HailStop, + BattleText_SpitUpFail, + BattleText_SwallowFail, + BattleText_WindHeatWave, + BattleText_StatElim, + BattleText_CoinScatter, + BattleText_SubWeak, + BattleText_PainSplit, + BattleText_BellChime, + BattleText_PerishSong, + BattleText_NoPP1, + BattleText_NoPP2, + BattleText_Used1, + BattleText_TutorialUsed, + BattleText_BlockBall, + BattleText_DontBeAThief, + BattleText_DodgeBall, + BattleText_MissPoke, + BattleText_BallBrokeOhNo, + BattleText_BallBrokeAppeared, + BattleText_BallBrokeAlmost, + BattleText_BallBrokeSoClose, + BattleText_BallCaught1, + BattleText_BallCaught2, + BattleText_GiveNickname, + BattleText_SentToPC, + BattleText_AddedToDex, + BattleText_Raining, + BattleText_Sandstorm, + BattleText_CantEscape, + BattleText_IgnoredOrdersSLP, + BattleText_IgnoredOrders, + BattleText_BeganNap, + BattleText_LoafingAround, + BattleText_WontObey, + BattleText_TurnedAway, + BattleText_NotNotice, + BattleText_WillSwitch, + BattleText_CreptCloser, + BattleText_CantGetCloser, + BattleText_WatchingCarefully, + BattleText_CuriousAbout, + BattleText_EnthralledBy, + BattleText_IgnoredThing, + BattleText_ThrewBlock, + BattleText_SafariOver, + BattleText_CuredParalysis, + BattleText_CuredPoison, + BattleText_CuredBurn, + BattleText_CuredFreeze, + BattleText_CuredSleep, + BattleText_CuredConfusion, + BattleText_CuredStatus, + BattleText_RestoredHealth, + BattleText_RestoredPP, + BattleText_RestoredStatus, + BattleText_RestoredHPLittle, + BattleText_ChoiceBand, + BattleText_FocusSash, + BattleText_Terminator2, + BattleText_PreventedBurn, + BattleText_BlocksOther, + BattleText_RestoredHPByItem, + BattleText_WhipSandstorm, + BattleText_PreventedLoss, + BattleText_InfatuatedPoke, + BattleText_MadeIneffective, + BattleText_CuredProblem, + BattleText_OozeSuckup, + BattleText_Transformed2, + BattleText_ElecWeakened, + BattleText_FireWeakened, + BattleText_HidUnderwater, + BattleText_SprangUp, + BattleText_CantForgetHM, + BattleText_FoundOne, + BattleText_PlayerDefeatedTrainer2, + BattleText_SoothingAroma, + BattleText_CantUseItems, + BattleText_UnknownString2, + BattleText_UnknownString4, + BattleText_HustleUse, + BattleText_MadeUseless, + BattleText_SandTombTrapped, + BattleText_Terminator, + BattleText_BoostedExp, + BattleText_SunIntensified, + BattleText_GroundMoveNegate, + BattleText_WallyBall, + BattleText_TookAttack2, + BattleText_ChoseDestiny, + BattleText_LostFocus, + BattleText_UseNext, + BattleText_FledUsingItem, + BattleText_FledUsingOther, + BattleText_DraggedOut, + BattleText_PreventedOther, + BattleText_NormalizedStatus, + BattleText_Used2, + BattleText_BoxFull, + BattleText_AvoidedAttack, + BattleText_MadeIneffective2, + BattleText_PreventedFlinching, + BattleText_AlreadyBurned, + BattleText_StatNoLower, + BattleText_BlocksOther2, + BattleText_WoreOff, + BattleText_RaisedDefenseLittle, + BattleText_RaisedSpDefLittle, + BattleText_BrokeWall, + BattleText_PreventedOther2, + BattleText_CuredOfProblem, + BattleText_AttackingCantEscape, + BattleText_Obtained1, + BattleText_Obtained2, + BattleText_Obtained3, + BattleText_NoEffect, + BattleText_NoEffectOn, +}; + +// below are lists of battle string enums and NOT pointers to the strings. +const u16 gMissStrings[] = +{ + BATTLE_TEXT_AttackMissed, + BATTLE_TEXT_ProtectedItself, + BATTLE_TEXT_AvoidedAttack, + BATTLE_TEXT_AvoidedDamage, + BATTLE_TEXT_GroundMoveNegate, +}; + +const u16 BattleTextList_401512[] = +{ + BATTLE_TEXT_CantEscape2, + BATTLE_TEXT_BirchDontLeaveMe, + BATTLE_TEXT_PreventEscape, + BATTLE_TEXT_CantEscape, + BATTLE_TEXT_AttackingCantEscape, +}; + +const u16 BattleTextList_40151C[] = +{ + BATTLE_TEXT_RainStart, + BATTLE_TEXT_PourStart, + BATTLE_TEXT_Failed, + BATTLE_TEXT_SandBrewed, + BATTLE_TEXT_SunBright, + BATTLE_TEXT_HailStart, +}; + +const u16 BattleTextList_401528[] = +{ + BATTLE_TEXT_SandRages, + BATTLE_TEXT_HailCont, +}; + +const u16 BattleTextList_40152C[] = +{ + BATTLE_TEXT_SandBuffeted, + BATTLE_TEXT_HailStricken, +}; + +const u16 BattleTextList_401530[] = +{ + BATTLE_TEXT_SandSubsided, + BATTLE_TEXT_HailStop, +}; + +const u16 BattleTextList_401534[] = +{ + BATTLE_TEXT_RainCont1, + BATTLE_TEXT_PourCont, + BATTLE_TEXT_RainStop, +}; + +const u16 BattleTextList_40153A[] = +{ + BATTLE_TEXT_ProtectedItself2, + BATTLE_TEXT_BracedItself, + BATTLE_TEXT_Failed, +}; + +const u16 BattleTextList_401540[] = +{ + BATTLE_TEXT_Failed, + BATTLE_TEXT_RaisedDefense, + BATTLE_TEXT_RaisedDefenseLittle, + BATTLE_TEXT_RaisedSpDef, + BATTLE_TEXT_RaisedSpDefLittle, + BATTLE_TEXT_CoveredVeil, +}; + +const u16 BattleTextList_40154C[] = +{ + BATTLE_TEXT_WasSeeded, + BATTLE_TEXT_EvadedAttack, + BATTLE_TEXT_DoesntAffect, + BATTLE_TEXT_HealthSapped, + BATTLE_TEXT_OozeSuckup, +}; + +const u16 BattleTextList_401556[] = +{ + BATTLE_TEXT_WentToSleep, + BATTLE_TEXT_SpeltHealthy, +}; + +const u16 BattleTextList_40155A[] = +{ + BATTLE_TEXT_UproarMaking, + BATTLE_TEXT_CalmedDown, +}; + +const u16 BattleTextList_40155E[] = +{ + BATTLE_TEXT_Stockpiled, + BATTLE_TEXT_StockpiledCant, +}; + +const u16 BattleTextList_401562[] = +{ + BATTLE_TEXT_WokeUp, + BATTLE_TEXT_UproarWoke, +}; + +const u16 BattleTextList_401566[] = +{ + BATTLE_TEXT_SwallowFail, + BATTLE_TEXT_HPFull, +}; + +const u16 BattleTextList_40156A[] = +{ + BATTLE_TEXT_UproarCantSleep2, + BATTLE_TEXT_UproarKeptAwake, + BATTLE_TEXT_StayedAwake, +}; + +const u16 BattleTextList_401570[] = +{ + BATTLE_TEXT_UnknownString7, + BATTLE_TEXT_UnknownString3, + BATTLE_TEXT_AttackingStatNoHigher, + BATTLE_TEXT_Terminator2, + BATTLE_TEXT_UnknownString4, + BATTLE_TEXT_HustleUse, +}; + +const u16 BattleTextList_40157C[] = +{ + BATTLE_TEXT_UnknownString5, + BATTLE_TEXT_UnknownString6, + BATTLE_TEXT_DefendingStatNoHigher, + BATTLE_TEXT_Terminator2, +}; + +const u16 BattleTextList_401584[] = +{ + BATTLE_TEXT_WhipWhirlwind, + BATTLE_TEXT_TookSunlight, + BATTLE_TEXT_LoweredHead, + BATTLE_TEXT_IsGlowing, + BATTLE_TEXT_FlewHigh, + BATTLE_TEXT_DugHole, + BATTLE_TEXT_HidUnderwater, + BATTLE_TEXT_SprangUp, +}; + +const u16 BattleTextList_401594[] = +{ + BATTLE_TEXT_SqueezedBind, + BATTLE_TEXT_Wrapped, + BATTLE_TEXT_TrappedVortex, + BATTLE_TEXT_Clamped, + BATTLE_TEXT_TrappedVortex, + BATTLE_TEXT_SandTombTrapped, +}; + +const u16 BattleTextList_4015A0[] = +{ + BATTLE_TEXT_MistShroud, + BATTLE_TEXT_Failed, +}; + +const u16 BattleTextList_4015A4[] = +{ + BATTLE_TEXT_GetPumped, + BATTLE_TEXT_Failed, +}; + +const u16 BattleTextList_4015A8[] = +{ + BATTLE_TEXT_Transformed, + BATTLE_TEXT_Failed, +}; + +const u16 BattleTextList_4015AC[] = +{ + BATTLE_TEXT_SubMade, + BATTLE_TEXT_SubWeak, +}; + +const u16 BattleTextList_4015B0[] = +{ + BATTLE_TEXT_Poisoned, + BATTLE_TEXT_Poisoned2, +}; + +const u16 BattleTextList_4015B4[] = +{ + BATTLE_TEXT_Paralyzed, + BATTLE_TEXT_Paralyzed2, +}; + +const u16 BattleTextList_4015B8[] = +{ + BATTLE_TEXT_FellAsleep, + BATTLE_TEXT_MadeAsleep, +}; + +const u16 BattleTextList_4015BC[] = +{ + BATTLE_TEXT_Burned, + BATTLE_TEXT_Burned2, +}; + +const u16 BattleTextList_4015C0[] = +{ + BATTLE_TEXT_Frozen, + BATTLE_TEXT_Frozen2, +}; + +const u16 BattleTextList_4015C4[] = +{ + BATTLE_TEXT_AttackingDefrosted, + BATTLE_TEXT_Defrosted, +}; + +const u16 BattleTextList_4015C8[] = +{ + BATTLE_TEXT_AttackMissed, + BATTLE_TEXT_Unaffected, + BATTLE_TEXT_FellLove, + BATTLE_TEXT_InfatuatedPoke, +}; + +const u16 BattleTextList_4015D0[] = +{ + BATTLE_TEXT_EnergyDrained, + BATTLE_TEXT_OozeSuckup, +}; + +const u16 BattleTextList_4015D4[] = +{ + BATTLE_TEXT_ElecWeakened, + BATTLE_TEXT_FireWeakened, +}; + +const u16 BattleTextList_4015D8[] = +{ + BATTLE_TEXT_BellChime, + BATTLE_TEXT_BellChime, + BATTLE_TEXT_BellChime, + BATTLE_TEXT_BellChime, + BATTLE_TEXT_SoothingAroma, +}; + +const u16 BattleTextList_4015E2[] = +{ + BATTLE_TEXT_ForesawAttack, + BATTLE_TEXT_ChoseDestiny, +}; + +const u16 BattleTextList_4015E6[] = +{ + BATTLE_TEXT_BallBrokeOhNo, + BATTLE_TEXT_BallBrokeAppeared, + BATTLE_TEXT_BallBrokeAlmost, + BATTLE_TEXT_BallBrokeSoClose, +}; + +const u16 BattleTextList_4015EE[] = +{ + BATTLE_TEXT_Raining, + BATTLE_TEXT_Raining, + BATTLE_TEXT_Raining, + BATTLE_TEXT_Raining, + BATTLE_TEXT_Raining, + BATTLE_TEXT_Raining, + BATTLE_TEXT_Raining, + BATTLE_TEXT_Raining, + BATTLE_TEXT_Sandstorm, + BATTLE_TEXT_Raining, + BATTLE_TEXT_Raining, + BATTLE_TEXT_Raining, + BATTLE_TEXT_SunStrong, + BATTLE_TEXT_Raining, + BATTLE_TEXT_Raining, + BATTLE_TEXT_Raining, +}; + +const u16 BattleTextList_40160E[] = +{ + BATTLE_TEXT_LoafingAround, + BATTLE_TEXT_WontObey, + BATTLE_TEXT_TurnedAway, + BATTLE_TEXT_NotNotice, +}; + +const u16 BattleTextList_401616[] = +{ + BATTLE_TEXT_CreptCloser, + BATTLE_TEXT_CantGetCloser, +}; + +const u16 BattleTextList_40161A[] = +{ + BATTLE_TEXT_CuriousAbout, + BATTLE_TEXT_EnthralledBy, + BATTLE_TEXT_IgnoredThing, +}; + +const u16 BattleTextList_401620[] = +{ + BATTLE_TEXT_CuredConfusion, + BATTLE_TEXT_CuredParalysis, + BATTLE_TEXT_CuredFreeze, + BATTLE_TEXT_CuredBurn, + BATTLE_TEXT_CuredPoison, + BATTLE_TEXT_CuredSleep, +}; + +const u16 BattleTextList_40162C[] = +{ + BATTLE_TEXT_CuredStatus, + BATTLE_TEXT_NormalizedStatus, +}; + +const u16 BattleTextList_401630[] = +{ + BATTLE_TEXT_PreventedBurn, + BATTLE_TEXT_PreventedOther2, + BATTLE_TEXT_NoEffectOn, +}; + +const u16 BattleTextList_401636[] = +{ + BATTLE_TEXT_PreventedPara, + BATTLE_TEXT_PreventedOther2, + BATTLE_TEXT_NoEffectOn, +}; + +const u16 BattleTextList_40163C[] = +{ + BATTLE_TEXT_PreventedPoison, + BATTLE_TEXT_PreventedOther2, + BATTLE_TEXT_NoEffectOn, +}; + +const u16 BattleTextList_401642[] = +{ + BATTLE_TEXT_Obtained1, + BATTLE_TEXT_Obtained2, + BATTLE_TEXT_Obtained3, +}; + +const u16 BattleTextList_401648[] = +{ + BATTLE_TEXT_RaisedFirePower, + BATTLE_TEXT_MadeIneffective, +}; + +const u16 gTrappingMoves[] = +{ + MOVE_BIND, + MOVE_WRAP, + MOVE_FIRE_SPIN, + MOVE_CLAMP, + MOVE_WHIRLPOOL, + MOVE_SAND_TOMB, + 0xFFFF, +}; + +const u8 *const gUnknown_0840165C[] = +{ + BattleText_HP, + BattleText_SpAtk, + BattleText_Attack, + BattleText_SpDef, + BattleText_Defense, + BattleStatText_Speed, +}; + +const u8 *const gUnknown_08401674[] = +{ + BattleText_Normal, + BattleText_Fighting, + BattleText_Flying, + BattleText_Poison, + BattleText_Ground, + BattleText_Rock, + BattleText_Bug, + BattleText_Ghost, + BattleText_Steel, + BattleText_Typeless, + BattleText_Fire, + BattleText_Water, + BattleText_Grass, + BattleText_Electric, + BattleText_Psychic, + BattleText_Ice, + BattleText_Dragon, + BattleText_Dark, +}; diff --git a/src/field/battle_tower.c b/src/field/battle_tower.c index 7a9c043b0..d6271643c 100644 --- a/src/field/battle_tower.c +++ b/src/field/battle_tower.c @@ -262,13 +262,13 @@ static void SetEReaderTrainerChecksum(struct BattleTowerEReaderTrainer *ereaderT static void SetBattleTowerRecordChecksum(struct BattleTowerRecord *); static void ClearBattleTowerRecord(struct BattleTowerRecord *); -extern const u8 gUnknown_08400E23[]; -extern const u8 gUnknown_08400E29[]; -extern const u8 gUnknown_08400E2C[]; -extern const u8 gUnknown_08400E2E[]; -extern const u8 gUnknown_08400E30[]; -extern const u8 gUnknown_08400E32[]; -extern const u8 gUnknown_08400E36[]; +extern const u8 BattleText_Format3[]; +extern const u8 BattleText_Format4[]; +extern const u8 BattleText_Format5[]; +extern const u8 BattleText_Format6[]; +extern const u8 BattleText_Format7[]; +extern const u8 BattleText_Format8[]; +extern const u8 BattleText_Format9[]; extern u16 gSpecialVar_0x8004; extern u8 gTrainerClassToPicIndex[]; extern u8 gTrainerClassToNameIndex[]; @@ -1409,24 +1409,24 @@ u8 AppendBattleTowerBannedSpeciesName(u16 species, u8 curIndexToAppend, s32 numT case 10: if (numToAppend == curIndexToAppend) { - StringAppend(gStringVar1, gUnknown_08400E23); + StringAppend(gStringVar1, BattleText_Format3); } else if (numToAppend > curIndexToAppend) { - StringAppend(gStringVar1, gUnknown_08400E29); + StringAppend(gStringVar1, BattleText_Format4); } break; case 1: if (curIndexToAppend == numToAppend) { - StringAppend(gStringVar1, gUnknown_08400E23); + StringAppend(gStringVar1, BattleText_Format3); } else { - StringAppend(gStringVar1, gUnknown_08400E29); + StringAppend(gStringVar1, BattleText_Format4); } - StringAppend(gStringVar1, gUnknown_08400E30); + StringAppend(gStringVar1, BattleText_Format7); break; case 3: case 5: @@ -1435,14 +1435,14 @@ u8 AppendBattleTowerBannedSpeciesName(u16 species, u8 curIndexToAppend, s32 numT default: if (curIndexToAppend == numToAppend) { - StringAppend(gStringVar1, gUnknown_08400E23); + StringAppend(gStringVar1, BattleText_Format3); } else { - StringAppend(gStringVar1, gUnknown_08400E29); + StringAppend(gStringVar1, BattleText_Format4); } - StringAppend(gStringVar1, gUnknown_08400E2E); + StringAppend(gStringVar1, BattleText_Format6); break; } @@ -1533,17 +1533,17 @@ void CheckPartyBattleTowerBanlist(void) if (counter == 0) { - StringAppend(gStringVar1, gUnknown_08400E2C); - StringAppend(gStringVar1, gUnknown_08400E32); + StringAppend(gStringVar1, BattleText_Format5); + StringAppend(gStringVar1, BattleText_Format8); return; } if (1 & counter) - StringAppend(gStringVar1, gUnknown_08400E2E); + StringAppend(gStringVar1, BattleText_Format6); else - StringAppend(gStringVar1, gUnknown_08400E2C); + StringAppend(gStringVar1, BattleText_Format5); - StringAppend(gStringVar1, gUnknown_08400E36); + StringAppend(gStringVar1, BattleText_Format9); } else { diff --git a/src/pokemon/pokemon_3.c b/src/pokemon/pokemon_3.c index 19786e506..a8e824b33 100644 --- a/src/pokemon/pokemon_3.c +++ b/src/pokemon/pokemon_3.c @@ -56,10 +56,10 @@ extern u16 gBattlePartyID[]; extern u8 gJapaneseNidoranNames[][11]; extern u8 gUnknown_082082F8[]; -extern u8 gUnknown_083FFDB3[]; -extern u8 gUnknown_083FFDD3[]; -extern u8 gUnknown_083FEE5D[]; -extern u8 gUnknown_083FEE92[]; +extern u8 BattleText_Rose[]; +extern u8 BattleText_UnknownString3[]; +extern u8 BattleText_MistShroud[]; +extern u8 BattleText_GetPumped[]; extern u8 *gUnknown_08400F58[]; bool8 HealStatusConditions(struct Pokemon *mon, u32 unused, u32 healMask, u8 battleId) @@ -197,8 +197,8 @@ void sub_803F324(int stat) { gBankTarget = gBankInMenu; StringCopy(gBattleTextBuff1, gUnknown_08400F58[gUnknown_082082F8[stat]]); - StringCopy(gBattleTextBuff2, gUnknown_083FFDB3); - StrCpyDecodeToDisplayedStringBattle(gUnknown_083FFDD3); + StringCopy(gBattleTextBuff2, BattleText_Rose); + StrCpyDecodeToDisplayedStringBattle(BattleText_UnknownString3); } u8 *sub_803F378(u16 itemId) @@ -237,7 +237,7 @@ u8 *sub_803F378(u16 itemId) else { gBankAttacker = gBankInMenu; - StrCpyDecodeToDisplayedStringBattle(gUnknown_083FEE92); + StrCpyDecodeToDisplayedStringBattle(BattleText_GetPumped); } } } @@ -245,7 +245,7 @@ u8 *sub_803F378(u16 itemId) if (itemEffect[3] & 0x80) { gBankAttacker = gBankInMenu; - StrCpyDecodeToDisplayedStringBattle(gUnknown_083FEE5D); + StrCpyDecodeToDisplayedStringBattle(BattleText_MistShroud); } return gDisplayedStringBattle; diff --git a/src/scene/evolution_scene.c b/src/scene/evolution_scene.c index 755176c81..4b73ab5b2 100644 --- a/src/scene/evolution_scene.c +++ b/src/scene/evolution_scene.c @@ -85,9 +85,9 @@ extern u8 gBattleCommunication[]; #define sEvoCursorPos gBattleCommunication[1] // when learning a new move #define sEvoGraphicsTaskID gBattleCommunication[2] -extern const u8 gUnknown_08400C4A[]; -extern const u8 gUnknown_08400C60[]; -extern const u8 gUnknown_08400C8D[]; +extern const u8 BattleText_StartEvo[]; +extern const u8 BattleText_FinishEvo[]; +extern const u8 BattleText_StopEvo[]; extern void * const gUnknown_081FAF4C[]; extern const u8* const gBattleStringsTable[]; @@ -557,7 +557,7 @@ static void Task_EvolutionScene(u8 taskID) case 1: // print 'whoa, poke is evolving!!!' msg if (!gPaletteFade.active) { - StringExpandPlaceholders(gStringVar4, gUnknown_08400C4A); + StringExpandPlaceholders(gStringVar4, BattleText_StartEvo); sub_8002EB0(&gUnknown_03004210, gStringVar4, 144, 2, 15); gTasks[taskID].tState++; } @@ -645,7 +645,7 @@ static void Task_EvolutionScene(u8 taskID) case 13: // congratulations string and rename prompt if (IsCryFinished() && !gPaletteFade.active) { - StringExpandPlaceholders(gStringVar4, gUnknown_08400C60); + StringExpandPlaceholders(gStringVar4, BattleText_FinishEvo); sub_8002EB0(&gUnknown_03004210, gStringVar4, 144, 2, 15); PlayBGM(BGM_FANFA5); gTasks[taskID].tState++; @@ -714,7 +714,7 @@ static void Task_EvolutionScene(u8 taskID) case 18: // after the cry, print the string 'WHOA IT DID NOT EVOLVE!!!' if (IsCryFinished()) { - StringExpandPlaceholders(gStringVar4, gUnknown_08400C8D); + StringExpandPlaceholders(gStringVar4, BattleText_StopEvo); sub_8002EB0(&gUnknown_03004210, gStringVar4, 144, 2, 15); gTasks[taskID].tEvoWasStopped = TRUE; gTasks[taskID].tState = 14; @@ -899,7 +899,7 @@ static void Task_TradeEvolutionScene(u8 taskID) switch (gTasks[taskID].tState) { case 0: - StringExpandPlaceholders(gStringVar4, gUnknown_08400C4A); + StringExpandPlaceholders(gStringVar4, BattleText_StartEvo); sub_8002EB0(&gUnknown_03004828->window, gStringVar4, gUnknown_03004828->textWindowBaseTileNum, 2, 15); gTasks[taskID].tState++; break; @@ -987,7 +987,7 @@ static void Task_TradeEvolutionScene(u8 taskID) case 12: if (IsCryFinished() && !gPaletteFade.active) { - StringExpandPlaceholders(gStringVar4, gUnknown_08400C60); + StringExpandPlaceholders(gStringVar4, BattleText_FinishEvo); sub_8002EB0(&gUnknown_03004828->window, gStringVar4, gUnknown_03004828->textWindowBaseTileNum, 2, 15); PlayFanfare(BGM_FANFA5); gTasks[taskID].tState++; -- cgit v1.2.3 From 28c9f5ee21407a7c896b171b20fddaf3791f93c7 Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Mon, 13 Nov 2017 13:25:34 -0500 Subject: fix german --- src/battle/battle_message.c | 2 +- src/data/battle_strings_de.h | 1612 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 1613 insertions(+), 1 deletion(-) create mode 100755 src/data/battle_strings_de.h (limited to 'src') diff --git a/src/battle/battle_message.c b/src/battle/battle_message.c index 962c5de7b..f856355b9 100644 --- a/src/battle/battle_message.c +++ b/src/battle/battle_message.c @@ -19,7 +19,7 @@ #define BATTLESTRINGS_MAX BATTLESTRINGS_NO + BATTLESTRING_TO_SUB #ifdef GERMAN -#include "../data/battle_strings_en.h" // TODO: German +#include "../data/battle_strings_de.h" // TODO: German #else #include "../data/battle_strings_en.h" #endif diff --git a/src/data/battle_strings_de.h b/src/data/battle_strings_de.h new file mode 100755 index 000000000..e696adf94 --- /dev/null +++ b/src/data/battle_strings_de.h @@ -0,0 +1,1612 @@ +#include "moves.h" + +enum +{ + BATTLE_TEXT_UnknownString = 12, + BATTLE_TEXT_GainExpPoints, + BATTLE_TEXT_GrewLevel, + BATTLE_TEXT_LearnedMove, + BATTLE_TEXT_TryingToLearnMove, + BATTLE_TEXT_CantLearnMore, + BATTLE_TEXT_DeleteMove, + BATTLE_TEXT_DeletedMove, + BATTLE_TEXT_StopLearning, + BATTLE_TEXT_DidNotLearn, + BATTLE_TEXT_LearnedMove2, + BATTLE_TEXT_AttackMissed, + BATTLE_TEXT_ProtectedItself, + BATTLE_TEXT_StatNoHigher, + BATTLE_TEXT_AvoidedDamage, + BATTLE_TEXT_DoesntAffect, + BATTLE_TEXT_AttackingFainted, + BATTLE_TEXT_DefendingFainted, + BATTLE_TEXT_WinningPrize, + BATTLE_TEXT_OutOfUsablePoke, + BATTLE_TEXT_WhitedOut, + BATTLE_TEXT_PreventEscape, + BATTLE_TEXT_HitMulti, + BATTLE_TEXT_FellAsleep, + BATTLE_TEXT_MadeAsleep, + BATTLE_TEXT_DefendingAsleep, + BATTLE_TEXT_AttackingAsleep, + BATTLE_TEXT_WasntAffected, + BATTLE_TEXT_Poisoned, + BATTLE_TEXT_Poisoned2, + BATTLE_TEXT_PoisonHurt, + BATTLE_TEXT_AlreadyPoisoned, + BATTLE_TEXT_BadlyPoisoned, + BATTLE_TEXT_EnergyDrained, + BATTLE_TEXT_Burned, + BATTLE_TEXT_Burned2, + BATTLE_TEXT_BurnHurt, + BATTLE_TEXT_Frozen, + BATTLE_TEXT_Frozen2, + BATTLE_TEXT_FrozenSolid, + BATTLE_TEXT_DefendingDefrosted, + BATTLE_TEXT_AttackingDefrosted, + BATTLE_TEXT_Defrosted, + BATTLE_TEXT_Paralyzed, + BATTLE_TEXT_Paralyzed2, + BATTLE_TEXT_Paralyzed3, + BATTLE_TEXT_AlreadyParalyzed, + BATTLE_TEXT_ParalysisHealed, + BATTLE_TEXT_DreamEaten, + BATTLE_TEXT_AttackingStatNoHigher, + BATTLE_TEXT_DefendingStatNoHigher, + BATTLE_TEXT_StoppedWorking, + BATTLE_TEXT_StoppedWorking2, + BATTLE_TEXT_Confused, + BATTLE_TEXT_ConfusionSnapOut, + BATTLE_TEXT_BecameConfused, + BATTLE_TEXT_AlreadyConfused, + BATTLE_TEXT_FellLove, + BATTLE_TEXT_InLoveWith, + BATTLE_TEXT_ImmobilizedBy, + BATTLE_TEXT_BlownAway, + BATTLE_TEXT_TypeTransform, + BATTLE_TEXT_Flinched, + BATTLE_TEXT_RegainedHealth, + BATTLE_TEXT_HPFull, + BATTLE_TEXT_RaisedSpDef, + BATTLE_TEXT_RaisedDefense, + BATTLE_TEXT_CoveredVeil, + BATTLE_TEXT_SafeguardActive, + BATTLE_TEXT_SafeguardFaded, + BATTLE_TEXT_WentToSleep, + BATTLE_TEXT_SpeltHealthy, + BATTLE_TEXT_WhipWhirlwind, + BATTLE_TEXT_TookSunlight, + BATTLE_TEXT_LoweredHead, + BATTLE_TEXT_IsGlowing, + BATTLE_TEXT_FlewHigh, + BATTLE_TEXT_DugHole, + BATTLE_TEXT_SqueezedBind, + BATTLE_TEXT_TrappedVortex, + BATTLE_TEXT_Wrapped, + BATTLE_TEXT_Clamped, + BATTLE_TEXT_HurtBy, + BATTLE_TEXT_FreedFrom, + BATTLE_TEXT_KeptGoingCrash, + BATTLE_TEXT_MistShroud, + BATTLE_TEXT_MistProtect, + BATTLE_TEXT_GetPumped, + BATTLE_TEXT_HitRecoil, + BATTLE_TEXT_ProtectedItself2, + BATTLE_TEXT_SandBuffeted, + BATTLE_TEXT_HailStricken, + BATTLE_TEXT_WasSeeded, + BATTLE_TEXT_EvadedAttack, + BATTLE_TEXT_HealthSapped, + BATTLE_TEXT_FastAsleep, + BATTLE_TEXT_WokeUp, + BATTLE_TEXT_UproarAwake, + BATTLE_TEXT_UproarWoke, + BATTLE_TEXT_UproarCaused, + BATTLE_TEXT_UproarMaking, + BATTLE_TEXT_CalmedDown, + BATTLE_TEXT_UproarCantSleep, + BATTLE_TEXT_Stockpiled, + BATTLE_TEXT_StockpiledCant, + BATTLE_TEXT_UproarCantSleep2, + BATTLE_TEXT_UproarKeptAwake, + BATTLE_TEXT_StayedAwake, + BATTLE_TEXT_StoringEnergy, + BATTLE_TEXT_UnleashedEnergy, + BATTLE_TEXT_FatigueConfuse, + BATTLE_TEXT_PickedUpYen, + BATTLE_TEXT_Unaffected, + BATTLE_TEXT_Transformed, + BATTLE_TEXT_SubMade, + BATTLE_TEXT_SubAlready, + BATTLE_TEXT_SubTookDamage, + BATTLE_TEXT_SubFaded, + BATTLE_TEXT_MustRecharge, + BATTLE_TEXT_RageBuilding, + BATTLE_TEXT_MoveWasDisabled, + BATTLE_TEXT_MoveIsDisabled, + BATTLE_TEXT_DisabledNoMore, + BATTLE_TEXT_EncoreGot, + BATTLE_TEXT_EncoreEnded, + BATTLE_TEXT_TookAim, + BATTLE_TEXT_SketchedMove, + BATTLE_TEXT_DestinyBondTake, + BATTLE_TEXT_DestinyBondTaken, + BATTLE_TEXT_ReducedBy, + BATTLE_TEXT_StoleSomething, + BATTLE_TEXT_CantEscapeNow, + BATTLE_TEXT_NightmareStart, + BATTLE_TEXT_NightmareLock, + BATTLE_TEXT_CurseLay, + BATTLE_TEXT_CurseAfflict, + BATTLE_TEXT_SpikesScattered, + BATTLE_TEXT_SpikesHurt, + BATTLE_TEXT_IdentifiedPoke, + BATTLE_TEXT_PerishSongFell, + BATTLE_TEXT_BracedItself, + BATTLE_TEXT_EnduredHit, + BATTLE_TEXT_MagnitudeCount, + BATTLE_TEXT_CutHPMaxATK, + BATTLE_TEXT_CopyStatChanges, + BATTLE_TEXT_GotFreeFrom, + BATTLE_TEXT_LeechShed, + BATTLE_TEXT_SpikesBlownAway, + BATTLE_TEXT_FledBattle, + BATTLE_TEXT_ForesawAttack, + BATTLE_TEXT_TookAttack, + BATTLE_TEXT_PokeAttack, + BATTLE_TEXT_CenterAttention, + BATTLE_TEXT_ChargingPower, + BATTLE_TEXT_NaturePower, + BATTLE_TEXT_StatusNormal, + BATTLE_TEXT_NoMovesLeft, + BATTLE_TEXT_TormentSubject, + BATTLE_TEXT_TormentNoUse, + BATTLE_TEXT_TightenFocus, + BATTLE_TEXT_TauntFell, + BATTLE_TEXT_TauntNoUse, + BATTLE_TEXT_ReadyToHelp, + BATTLE_TEXT_SwitchedItems, + BATTLE_TEXT_CopiedObject, + BATTLE_TEXT_WishMade, + BATTLE_TEXT_WishTrue, + BATTLE_TEXT_PlantedRoots, + BATTLE_TEXT_AbsorbNutrients, + BATTLE_TEXT_AnchoredItself, + BATTLE_TEXT_DrowsyMade, + BATTLE_TEXT_KnockedOffItem, + BATTLE_TEXT_AbilitySwap, + BATTLE_TEXT_SealedMove, + BATTLE_TEXT_SealedNoUse, + BATTLE_TEXT_GrudgeBear, + BATTLE_TEXT_GrudgeLosePP, + BATTLE_TEXT_ShroudedItself, + BATTLE_TEXT_MagicCoatBounce, + BATTLE_TEXT_AwaitMove, + BATTLE_TEXT_SnatchedMove, + BATTLE_TEXT_RainMade, + BATTLE_TEXT_SpeedRisen, + BATTLE_TEXT_ProtectedBy, + BATTLE_TEXT_PreventedBy, + BATTLE_TEXT_HPRestoredUsing, + BATTLE_TEXT_MadeType, + BATTLE_TEXT_PreventedPara, + BATTLE_TEXT_PreventedRomance, + BATTLE_TEXT_PreventedPoison, + BATTLE_TEXT_PreventedConfusion, + BATTLE_TEXT_RaisedFirePower, + BATTLE_TEXT_AnchorsItself, + BATTLE_TEXT_CutsAttack, + BATTLE_TEXT_PreventedStatLoss, + BATTLE_TEXT_HurtOther, + BATTLE_TEXT_Traced, + BATTLE_TEXT_Sharply, + BATTLE_TEXT_Rose, + BATTLE_TEXT_Harshly, + BATTLE_TEXT_Fell, + BATTLE_TEXT_UnknownString7, + BATTLE_TEXT_UnknownString3, + BATTLE_TEXT_UnknownString5, + BATTLE_TEXT_UnknownString6, + BATTLE_TEXT_Critical, + BATTLE_TEXT_GrandSlam, + BATTLE_TEXT_MoveForget123, + BATTLE_TEXT_MoveForgetAnd, + BATTLE_TEXT_NotEffective, + BATTLE_TEXT_SuperEffective, + BATTLE_TEXT_GotAwaySafely, + BATTLE_TEXT_FledWild, + BATTLE_TEXT_NoRunning, + BATTLE_TEXT_CantEscape2, + BATTLE_TEXT_BirchDontLeaveMe, + BATTLE_TEXT_Nothing, + BATTLE_TEXT_Failed, + BATTLE_TEXT_HurtItself, + BATTLE_TEXT_MirrorFail, + BATTLE_TEXT_RainStart, + BATTLE_TEXT_PourStart, + BATTLE_TEXT_RainCont1, + BATTLE_TEXT_PourCont, + BATTLE_TEXT_RainStop, + BATTLE_TEXT_SandBrewed, + BATTLE_TEXT_SandRages, + BATTLE_TEXT_SandSubsided, + BATTLE_TEXT_SunBright, + BATTLE_TEXT_SunStrong, + BATTLE_TEXT_SunFaded, + BATTLE_TEXT_HailStart, + BATTLE_TEXT_HailCont, + BATTLE_TEXT_HailStop, + BATTLE_TEXT_SpitUpFail, + BATTLE_TEXT_SwallowFail, + BATTLE_TEXT_WindHeatWave, + BATTLE_TEXT_StatElim, + BATTLE_TEXT_CoinScatter, + BATTLE_TEXT_SubWeak, + BATTLE_TEXT_PainSplit, + BATTLE_TEXT_BellChime, + BATTLE_TEXT_PerishSong, + BATTLE_TEXT_NoPP1, + BATTLE_TEXT_NoPP2, + BATTLE_TEXT_Used1, + BATTLE_TEXT_TutorialUsed, + BATTLE_TEXT_BlockBall, + BATTLE_TEXT_DontBeAThief, + BATTLE_TEXT_DodgeBall, + BATTLE_TEXT_MissPoke, + BATTLE_TEXT_BallBrokeOhNo, + BATTLE_TEXT_BallBrokeAppeared, + BATTLE_TEXT_BallBrokeAlmost, + BATTLE_TEXT_BallBrokeSoClose, + BATTLE_TEXT_BallCaught1, + BATTLE_TEXT_BallCaught2, + BATTLE_TEXT_GiveNickname, + BATTLE_TEXT_SentToPC, + BATTLE_TEXT_AddedToDex, + BATTLE_TEXT_Raining, + BATTLE_TEXT_Sandstorm, + BATTLE_TEXT_CantEscape, + BATTLE_TEXT_IgnoredOrdersSLP, + BATTLE_TEXT_IgnoredOrders, + BATTLE_TEXT_BeganNap, + BATTLE_TEXT_LoafingAround, + BATTLE_TEXT_WontObey, + BATTLE_TEXT_TurnedAway, + BATTLE_TEXT_NotNotice, + BATTLE_TEXT_WillSwitch, + BATTLE_TEXT_CreptCloser, + BATTLE_TEXT_CantGetCloser, + BATTLE_TEXT_WatchingCarefully, + BATTLE_TEXT_CuriousAbout, + BATTLE_TEXT_EnthralledBy, + BATTLE_TEXT_IgnoredThing, + BATTLE_TEXT_ThrewBlock, + BATTLE_TEXT_SafariOver, + BATTLE_TEXT_CuredParalysis, + BATTLE_TEXT_CuredPoison, + BATTLE_TEXT_CuredBurn, + BATTLE_TEXT_CuredFreeze, + BATTLE_TEXT_CuredSleep, + BATTLE_TEXT_CuredConfusion, + BATTLE_TEXT_CuredStatus, + BATTLE_TEXT_RestoredHealth, + BATTLE_TEXT_RestoredPP, + BATTLE_TEXT_RestoredStatus, + BATTLE_TEXT_RestoredHPLittle, + BATTLE_TEXT_ChoiceBand, + BATTLE_TEXT_FocusSash, + BATTLE_TEXT_Terminator2, + BATTLE_TEXT_PreventedBurn, + BATTLE_TEXT_BlocksOther, + BATTLE_TEXT_RestoredHPByItem, + BATTLE_TEXT_WhipSandstorm, + BATTLE_TEXT_PreventedLoss, + BATTLE_TEXT_InfatuatedPoke, + BATTLE_TEXT_MadeIneffective, + BATTLE_TEXT_CuredProblem, + BATTLE_TEXT_OozeSuckup, + BATTLE_TEXT_Transformed2, + BATTLE_TEXT_ElecWeakened, + BATTLE_TEXT_FireWeakened, + BATTLE_TEXT_HidUnderwater, + BATTLE_TEXT_SprangUp, + BATTLE_TEXT_CantForgetHM, + BATTLE_TEXT_FoundOne, + BATTLE_TEXT_PlayerDefeatedTrainer2, + BATTLE_TEXT_SoothingAroma, + BATTLE_TEXT_CantUseItems, + BATTLE_TEXT_UnknownString2, + BATTLE_TEXT_UnknownString4, + BATTLE_TEXT_HustleUse, + BATTLE_TEXT_MadeUseless, + BATTLE_TEXT_SandTombTrapped, + BATTLE_TEXT_Terminator, + BATTLE_TEXT_BoostedExp, + BATTLE_TEXT_SunIntensified, + BATTLE_TEXT_GroundMoveNegate, + BATTLE_TEXT_WallyBall, + BATTLE_TEXT_TookAttack2, + BATTLE_TEXT_ChoseDestiny, + BATTLE_TEXT_LostFocus, + BATTLE_TEXT_UseNext, + BATTLE_TEXT_FledUsingItem, + BATTLE_TEXT_FledUsingOther, + BATTLE_TEXT_DraggedOut, + BATTLE_TEXT_PreventedOther, + BATTLE_TEXT_NormalizedStatus, + BATTLE_TEXT_Used2, + BATTLE_TEXT_BoxFull, + BATTLE_TEXT_AvoidedAttack, + BATTLE_TEXT_MadeIneffective2, + BATTLE_TEXT_PreventedFlinching, + BATTLE_TEXT_AlreadyBurned, + BATTLE_TEXT_StatNoLower, + BATTLE_TEXT_BlocksOther2, + BATTLE_TEXT_WoreOff, + BATTLE_TEXT_RaisedDefenseLittle, + BATTLE_TEXT_RaisedSpDefLittle, + BATTLE_TEXT_BrokeWall, + BATTLE_TEXT_PreventedOther2, + BATTLE_TEXT_CuredOfProblem, + BATTLE_TEXT_AttackingCantEscape, + BATTLE_TEXT_Obtained1, + BATTLE_TEXT_Obtained2, + BATTLE_TEXT_Obtained3, + BATTLE_TEXT_NoEffect, + BATTLE_TEXT_NoEffectOn, +}; + +const u8 BattleText_UnknownString[] = _("{STRING 33}"); +const u8 BattleText_GainExpPoints[] = _("{STRING 0} erhält{PLAYER}\n{STRING 42} E-Punkte!\p"); +const u8 BattleText_Terminator[] = _(""); +const u8 BattleText_BoostedExp[] = _(" spezielle"); +const u8 BattleText_GrewLevel[] = _("{STRING 0} erreicht\nLv. {PLAYER}!{UNKNOWN_A}\p"); +const u8 BattleText_LearnedMove[] = _("{STRING 0} erlernt\n{PLAYER}!{UNKNOWN_A}\p"); +const u8 BattleText_TryingToLearnMove[] = _("{STRING 0} versucht,\n{PLAYER} zu lernen.\p"); +const u8 BattleText_CantLearnMore[] = _("Aber {STRING 0} kann nicht\nmehr als vier Attacken erlernen.\p"); +const u8 BattleText_DeleteMove[] = _("Soll eine Attacke zu Gunsten von\n{PLAYER} vergessen werden?"); +const u8 BattleText_DeletedMove[] = _("{STRING 0} hat\n{PLAYER} vergessen!\p"); +const u8 BattleText_StopLearning[] = _("{PAUSE 32}{PLAYER}\nnicht erlernen?"); +const u8 BattleText_DidNotLearn[] = _("{STRING 0} hat {PLAYER}\nnicht erlernt.\p"); +const u8 BattleText_UseNext[] = _("Nächstes POKéMON einsetzen?"); +const u8 BattleText_AttackMissed[] = _("Attacke von {EVIL_LEGENDARY}\nging daneben!"); +const u8 BattleText_ProtectedItself[] = _("{GOOD_LEGENDARY}\nschützt sich selbst!"); +const u8 BattleText_AvoidedDamage[] = _("{GOOD_LEGENDARY} vermeidet\nSchaden mit {STRING 22}!"); +const u8 BattleText_GroundMoveNegate[] = _("{GOOD_LEGENDARY} wehrt BODEN-\nAttacken mit {STRING 22} ab!"); +const u8 BattleText_AvoidedAttack[] = _("{GOOD_LEGENDARY} wehrt die\nAttacke ab!"); +const u8 BattleText_DoesntAffect[] = _("Es hat keine Wirkung auf\n{GOOD_LEGENDARY}..."); +const u8 BattleText_AttackingFainted[] = _("{EVIL_LEGENDARY}\nwurde besiegt!\p"); +const u8 BattleText_DefendingFainted[] = _("{GOOD_LEGENDARY}\nwurde besiegt!\p"); +const u8 BattleText_WinningPrize[] = _("{STRING 32} gewinnt ¥{STRING 0}!\p"); +const u8 BattleText_OutOfUsablePoke[] = _("{STRING 32} hat kein\nkampffähiges POKéMON mehr!\p"); +const u8 BattleText_WhitedOut[] = _("{STRING 32} fällt in Ohnmacht!{PAUSE_UNTIL_PRESS}"); +const u8 BattleText_PreventEscape[] = _("{STRING 16} verhindert\neine Flucht mit {STRING 23}!\p"); +const u8 BattleText_CantEscape[] = _("Flucht unmöglich!\p"); +const u8 BattleText_AttackingCantEscape[] = _("{EVIL_LEGENDARY}\nkann nicht fliehen!"); +const u8 BattleText_HitMulti[] = _("{STRING 0}-mal getroffen!"); +const u8 BattleText_FellAsleep[] = _("{STRING 14}\nist eingeschlafen!"); +const u8 BattleText_MadeAsleep[] = _("{STRING 23} von\n{STRING 16} lässt\l{STRING 14} einschlafen!"); +const u8 BattleText_DefendingAsleep[] = _("{GOOD_LEGENDARY} schläft\nbereits!"); +const u8 BattleText_AttackingAsleep[] = _("{EVIL_LEGENDARY} schläft\nbereits!"); +const u8 BattleText_WasntAffected[] = _("{GOOD_LEGENDARY}\nist unversehrt!"); +const u8 BattleText_Poisoned[] = _("{STRING 14}\nwurde vergiftet!"); +const u8 BattleText_Poisoned2[] = _("{STRING 23} von\n{STRING 16} vergiftete\l{STRING 14}!"); +const u8 BattleText_PoisonHurt[] = _("{EVIL_LEGENDARY} wurde durch\nGift verletzt!"); +const u8 BattleText_AlreadyPoisoned[] = _("{GOOD_LEGENDARY} ist bereits\nvergiftet."); +const u8 BattleText_BadlyPoisoned[] = _("{STRING 14} wurde schwer\nvergiftet!"); +const u8 BattleText_EnergyDrained[] = _("{GOOD_LEGENDARY} wurde\nEnergie abgesaugt!"); +const u8 BattleText_Burned[] = _("{STRING 14} brennt!"); +const u8 BattleText_Burned2[] = _("{STRING 23} von\n{STRING 16} verbrennt\l{STRING 14}!"); +const u8 BattleText_BurnHurt[] = _("Die Verbrennung schadet\n{EVIL_LEGENDARY}!"); +const u8 BattleText_AlreadyBurned[] = _("{GOOD_LEGENDARY} brennt\nbereits."); +const u8 BattleText_Frozen[] = _("{STRING 14} erstarrt\nzu Eis!"); +const u8 BattleText_Frozen2[] = _("{STRING 14} wurde durch\n{STRING 23} von\l{STRING 16} eingefroren!"); +const u8 BattleText_FrozenSolid[] = _("{EVIL_LEGENDARY} ist\neingefroren!"); +const u8 BattleText_DefendingDefrosted[] = _("{GOOD_LEGENDARY} wurde\naufgetaut!"); +const u8 BattleText_AttackingDefrosted[] = _("{EVIL_LEGENDARY} wurde\naufgetaut!"); +const u8 BattleText_Defrosted[] = _("{EVIL_LEGENDARY} wurde\ndurch {STRING 17} aufgetaut!"); +const u8 BattleText_Paralyzed[] = _("{STRING 14} ist\nparalysiert! Es greift\leventuell nicht an!"); +const u8 BattleText_Paralyzed2[] = _("{STRING 23} von\n{STRING 16} paralysierte\p{STRING 14}!\nEs greift eventuell nicht an!"); +const u8 BattleText_Paralyzed3[] = _("{EVIL_LEGENDARY} ist\nparalysiert! Es kann\lnicht angreifen!"); +const u8 BattleText_AlreadyParalyzed[] = _("{GOOD_LEGENDARY} ist\nbereits paralysiert!"); +const u8 BattleText_ParalysisHealed[] = _("{GOOD_LEGENDARY} wurde von der\nParalyse geheilt!"); +const u8 BattleText_DreamEaten[] = _("Der Traum von {GOOD_LEGENDARY}\nwurde gefressen!"); +const u8 BattleText_AttackingStatNoHigher[] = _("{STRING 0} von\n{EVIL_LEGENDARY} kann nicht\lmehr erhöht werden!"); +const u8 BattleText_DefendingStatNoHigher[] = _("{STRING 0} von\n{GOOD_LEGENDARY} kann nicht\lweiter gesenkt werden!"); +const u8 BattleText_StoppedWorking[] = _("{STRING 0} in deinem Team\nfunktioniert nicht mehr!"); +const u8 BattleText_StoppedWorking2[] = _("{STRING 0} des Gegners\nfunktioniert nicht mehr!"); +const u8 BattleText_Confused[] = _("{EVIL_LEGENDARY} ist\nverwirrt!"); +const u8 BattleText_ConfusionSnapOut[] = _("{EVIL_LEGENDARY} ist nicht\nmehr verwirrt!"); +const u8 BattleText_BecameConfused[] = _("{STRING 14} wurde\nverwirrt!"); +const u8 BattleText_AlreadyConfused[] = _("{GOOD_LEGENDARY} ist\nbereits verwirrt!"); +const u8 BattleText_FellLove[] = _("{GOOD_LEGENDARY}\nhat sich verliebt!"); +const u8 BattleText_InLoveWith[] = _("{EVIL_LEGENDARY} hat sich in\n{STRING 16} verliebt!"); +const u8 BattleText_ImmobilizedBy[] = _("{EVIL_LEGENDARY} ist starr\nvor Liebe!"); +const u8 BattleText_BlownAway[] = _("{GOOD_LEGENDARY} wurde\nweggeweht!"); +const u8 BattleText_TypeTransform[] = _("{EVIL_LEGENDARY} verwandelt\nsich zu Typ {STRING 0}!"); +const u8 BattleText_Flinched[] = _("{EVIL_LEGENDARY} schreckt\nzurück!"); +const u8 BattleText_RegainedHealth[] = _("{GOOD_LEGENDARY} erholt sich!"); +const u8 BattleText_HPFull[] = _("{GOOD_LEGENDARY} hat alle KP!"); +const u8 BattleText_RaisedSpDef[] = _("{STRING 17} von\n{STRING 38} erhöht\ldie SP. VER."); +const u8 BattleText_RaisedSpDefLittle[] = _("Die SP. VER. wird etwas durch\n{STRING 17} von\l{STRING 38} erhöht."); +const u8 BattleText_RaisedDefense[] = _("{STRING 17} von\n{STRING 38}\lerhöht die VERTEIDIGUNG!"); +const u8 BattleText_RaisedDefenseLittle[] = _("{STRING 17} von\n{STRING 38}\lerhöht etwas die VERTEIDIGUNG!"); +const u8 BattleText_CoveredVeil[] = _("{STRING 38} wird von\neinem Schleier umhüllt!"); +const u8 BattleText_SafeguardActive[] = _("{GOOD_LEGENDARY} wird durch\nBODYGUARD geschützt!"); +const u8 BattleText_SafeguardFaded[] = _("BODYGUARD von\n{STRING 40} lässt nach!"); +const u8 BattleText_WentToSleep[] = _("{EVIL_LEGENDARY} ist\neingeschlafen!"); +const u8 BattleText_SpeltHealthy[] = _("{EVIL_LEGENDARY} schläft und\nerholt sich!"); +const u8 BattleText_WhipWhirlwind[] = _("{EVIL_LEGENDARY} entfacht\neinen Wirbelwind!"); +const u8 BattleText_TookSunlight[] = _("{EVIL_LEGENDARY} absorbiert\nSonnenlicht!"); +const u8 BattleText_LoweredHead[] = _("{EVIL_LEGENDARY} zieht seinen\nKopf ein!"); +const u8 BattleText_IsGlowing[] = _("{EVIL_LEGENDARY} leuchtet!"); +const u8 BattleText_FlewHigh[] = _("{EVIL_LEGENDARY} fliegt\nhoch empor!"); +const u8 BattleText_DugHole[] = _("{EVIL_LEGENDARY} gräbt sich\nein!"); +const u8 BattleText_HidUnderwater[] = _("{EVIL_LEGENDARY} taucht\nunter!"); +const u8 BattleText_SprangUp[] = _("{EVIL_LEGENDARY} springt auf!"); +const u8 BattleText_SqueezedBind[] = _("{EVIL_LEGENDARY} setzt bei\n{GOOD_LEGENDARY}\lKLAMMERGRIFF ein!"); +const u8 BattleText_TrappedVortex[] = _("{GOOD_LEGENDARY} wurde in\neinem Strudel gefangen!"); +const u8 BattleText_SandTombTrapped[] = _("{GOOD_LEGENDARY} wurde durch\nSANDGRAB gefangen!"); +const u8 BattleText_Wrapped[] = _("{GOOD_LEGENDARY} wurde von\n{EVIL_LEGENDARY} umWICKELt!"); +const u8 BattleText_Clamped[] = _("{GOOD_LEGENDARY} wurde von\n{EVIL_LEGENDARY} geSCHNAPPT!"); +const u8 BattleText_HurtBy[] = _("{EVIL_LEGENDARY} wurde durch\n{STRING 0} verletzt!"); +const u8 BattleText_FreedFrom[] = _("{EVIL_LEGENDARY} wurde von\n{STRING 0} befreit!"); +const u8 BattleText_KeptGoingCrash[] = _("{EVIL_LEGENDARY} macht weiter\nund bricht zusammen!"); +const u8 BattleText_MistShroud[] = _("{STRING 38} wird in\nWEISSNEBEL gehüllt!"); +const u8 BattleText_MistProtect[] = _("{STRING 16} wird durch\nWEISSNEBEL geschützt!"); +const u8 BattleText_GetPumped[] = _("{EVIL_LEGENDARY} pumpt\nsich auf!"); +const u8 BattleText_HitRecoil[] = _("{EVIL_LEGENDARY} wurde vom\nRückstoß getroffen!"); +const u8 BattleText_ProtectedItself2[] = _("{EVIL_LEGENDARY} schützt\nsich selbst!"); +const u8 BattleText_SandBuffeted[] = _("{EVIL_LEGENDARY} wird vom\nSandsturm getroffen!"); +const u8 BattleText_HailStricken[] = _("{EVIL_LEGENDARY} wird vom\nHAGELSTURM getroffen!"); +const u8 BattleText_WoreOff[] = _("{STRING 0} von\n{STRING 36} lässt nach!"); +const u8 BattleText_WasSeeded[] = _("{GOOD_LEGENDARY} wurde\nbepflanzt!"); +const u8 BattleText_EvadedAttack[] = _("{GOOD_LEGENDARY} ist\nausgewichen!"); +const u8 BattleText_HealthSapped[] = _("EGELSAMEN schadet\n{EVIL_LEGENDARY}!"); +const u8 BattleText_FastAsleep[] = _("{EVIL_LEGENDARY} schläft tief\nund fest."); +const u8 BattleText_WokeUp[] = _("{EVIL_LEGENDARY} ist\naufgewacht!"); +const u8 BattleText_UproarAwake[] = _("AUFRUHR von {STRING 16}\nhält es wach!"); +const u8 BattleText_UproarWoke[] = _("{EVIL_LEGENDARY} wird durch\nAUFRUHR wach!"); +const u8 BattleText_UproarCaused[] = _("{EVIL_LEGENDARY} verursacht\nAUFRUHR!"); +const u8 BattleText_UproarMaking[] = _("{EVIL_LEGENDARY} macht\neinen AUFRUHR!"); +const u8 BattleText_CalmedDown[] = _("{EVIL_LEGENDARY}\nberuhigt sich."); +const u8 BattleText_UproarCantSleep[] = _("{GOOD_LEGENDARY} kann bei dem\nAUFRUHR nicht schlafen!"); +const u8 BattleText_Stockpiled[] = _("{EVIL_LEGENDARY} HORTET\n{STRING 0}!"); +const u8 BattleText_StockpiledCant[] = _("{EVIL_LEGENDARY} kann nicht\nweiter HORTEN!"); +const u8 BattleText_UproarCantSleep2[] = _("{GOOD_LEGENDARY} kann bei dem\nAUFRUHR nicht schlafen!"); +const u8 BattleText_UproarKeptAwake[] = _("Aber der AUFRUHR hält\n{GOOD_LEGENDARY} wach!"); +const u8 BattleText_StayedAwake[] = _("{GOOD_LEGENDARY} hält sich mit\n{STRING 22} wach!"); +const u8 BattleText_StoringEnergy[] = _("{EVIL_LEGENDARY} speichert\nEnergie!"); +const u8 BattleText_UnleashedEnergy[] = _("{EVIL_LEGENDARY} erzeugt\nEnergie!"); +const u8 BattleText_FatigueConfuse[] = _("{EVIL_LEGENDARY} ist vor\nErschöpfung verwirrt!"); +const u8 BattleText_PickedUpYen[] = _("{STRING 32} hebt\n¥{STRING 0} auf!\p"); +const u8 BattleText_Unaffected[] = _("{GOOD_LEGENDARY} ist\nunversehrt!"); +const u8 BattleText_Transformed[] = _("{EVIL_LEGENDARY} verwandelt\nsich in {STRING 0}!"); +const u8 BattleText_SubMade[] = _("{EVIL_LEGENDARY} setzt einen\nDELEGATOR ein!"); +const u8 BattleText_SubAlready[] = _("{EVIL_LEGENDARY} hat bereits\neinen DELEGATOR!"); +const u8 BattleText_SubTookDamage[] = _("Der DELEGATOR steckt den\nSchlag für {GOOD_LEGENDARY}\lein!\p"); +const u8 BattleText_SubFaded[] = _("DELEGATOR von\n{GOOD_LEGENDARY} lässt nach!\p"); +const u8 BattleText_MustRecharge[] = _("{EVIL_LEGENDARY} muss sich\nwieder aufladen!"); +const u8 BattleText_RageBuilding[] = _("{GOOD_LEGENDARY} verfällt in\nRASEREI!"); +const u8 BattleText_MoveWasDisabled[] = _("{STRING 0} von\n{GOOD_LEGENDARY}\lwurde blockiert!"); +const u8 BattleText_DisabledNoMore[] = _("{EVIL_LEGENDARY} ist nicht\nmehr blockiert!"); +const u8 BattleText_EncoreGot[] = _("{GOOD_LEGENDARY} gibt\neine ZUGABE!"); +const u8 BattleText_EncoreEnded[] = _("ZUGABE von {EVIL_LEGENDARY}\nist beendet!"); +const u8 BattleText_TookAim[] = _("{EVIL_LEGENDARY} zielt\nauf {GOOD_LEGENDARY}!"); +const u8 BattleText_SketchedMove[] = _("{EVIL_LEGENDARY} setzt\nNACHAHMER bei {STRING 0} ein!"); +const u8 BattleText_DestinyBondTake[] = _("{EVIL_LEGENDARY} versucht den\nGegner mit sich zu nehmen!"); +const u8 BattleText_DestinyBondTaken[] = _("{GOOD_LEGENDARY} nimmt\n{EVIL_LEGENDARY} mit sich!"); +const u8 BattleText_ReducedBy[] = _("{STRING 0} von\n{GOOD_LEGENDARY} wird um\l{PLAYER} reduziert!"); +const u8 BattleText_StoleSomething[] = _("{EVIL_LEGENDARY} stiehlt\n{STRING 19} von\l{GOOD_LEGENDARY}!"); +const u8 BattleText_CantEscapeNow[] = _("{GOOD_LEGENDARY} kann\nnicht fliehen!"); +const u8 BattleText_NightmareStart[] = _("{GOOD_LEGENDARY} bekommt\nNACHTMAHR!"); +const u8 BattleText_NightmareLock[] = _("{EVIL_LEGENDARY} ist in\nNACHTMAHR gefangen!"); +const u8 BattleText_CurseLay[] = _("{EVIL_LEGENDARY} nimmt einen\nTeil seiner KP und legt einen\lFLUCH auf {GOOD_LEGENDARY}!"); +const u8 BattleText_CurseAfflict[] = _("{EVIL_LEGENDARY} wurde durch\nFLUCH verletzt!"); +const u8 BattleText_SpikesScattered[] = _("POKéMON-Team von {STRING 37}\nverteilt STACHELN um sich!"); +const u8 BattleText_SpikesHurt[] = _("{STRING 16} wurde durch\nSTACHLER verletzt!"); +const u8 BattleText_IdentifiedPoke[] = _("{EVIL_LEGENDARY} erkennt\n{GOOD_LEGENDARY}!"); +const u8 BattleText_PerishSongFell[] = _("ABGESANG von {EVIL_LEGENDARY}\nsteht bei {STRING 0}!"); +const u8 BattleText_BracedItself[] = _("{EVIL_LEGENDARY} macht sich\nbereit!"); +const u8 BattleText_EnduredHit[] = _("{GOOD_LEGENDARY} setzt\nAUSDAUER ein!"); +const u8 BattleText_MagnitudeCount[] = _("INTENSITÄT {STRING 0}!"); +const u8 BattleText_CutHPMaxATK[] = _("{EVIL_LEGENDARY} nutzt seine\nKP und hebt den ANGR-Wert!"); +const u8 BattleText_CopyStatChanges[] = _("{EVIL_LEGENDARY} kopiert die\nStatusveränderungen\lvon {GOOD_LEGENDARY}!"); +const u8 BattleText_GotFreeFrom[] = _("{EVIL_LEGENDARY} befreit\nsich von {STRING 0}\lvon {GOOD_LEGENDARY}!"); +const u8 BattleText_LeechShed[] = _("{EVIL_LEGENDARY} befreit sich\nvon EGELSAMEN!"); +const u8 BattleText_SpikesBlownAway[] = _("{EVIL_LEGENDARY} blies den\nSTACHLER weg!"); +const u8 BattleText_FledBattle[] = _("{EVIL_LEGENDARY} ist\ngeflüchtet!"); +const u8 BattleText_ForesawAttack[] = _("{EVIL_LEGENDARY} sah eine\nAttacke voraus!"); +const u8 BattleText_TookAttack[] = _("{GOOD_LEGENDARY} wurde von\nder Attacke {STRING 0} getroffen!"); +const u8 BattleText_ChoseDestiny[] = _("{EVIL_LEGENDARY} wählte\n{STRING 17} als Vorhersehung aus!"); +const u8 BattleText_PokeAttack[] = _("Angriff von {STRING 0}!"); +const u8 BattleText_CenterAttention[] = _("{EVIL_LEGENDARY} zieht alle\nAufmerksamkeit auf sich!"); +const u8 BattleText_ChargingPower[] = _("{EVIL_LEGENDARY} lädt\nsich auf!"); +const u8 BattleText_NaturePower[] = _("NATUR-KRAFT wurde zu\n{STRING 17}!"); +const u8 BattleText_StatusNormal[] = _("Status von {EVIL_LEGENDARY}\nwird normal!"); +const u8 BattleText_TormentSubject[] = _("{GOOD_LEGENDARY} wird von\nFOLTERKNECHT unterworfen!"); +const u8 BattleText_TightenFocus[] = _("{EVIL_LEGENDARY} verstärkt\nseinen Fokus!"); +const u8 BattleText_TauntFell[] = _("{GOOD_LEGENDARY} fällt auf\nVERHÖHNER herein!"); +const u8 BattleText_ReadyToHelp[] = _("{EVIL_LEGENDARY} will\n{GOOD_LEGENDARY} helfen!"); +const u8 BattleText_SwitchedItems[] = _("{EVIL_LEGENDARY} tauscht\nItems mit anderem PKMN!"); +const u8 BattleText_Obtained1[] = _("{EVIL_LEGENDARY} erhält\n{STRING 0}."); +const u8 BattleText_Obtained2[] = _("{GOOD_LEGENDARY} erhält\n{PLAYER}."); +const u8 BattleText_Obtained3[] = _("{EVIL_LEGENDARY} erhält\n{STRING 0}.\p{GOOD_LEGENDARY} erhält\n{PLAYER}."); +const u8 BattleText_CopiedObject[] = _("{EVIL_LEGENDARY}\nkopiert {STRING 22} von\l{GOOD_LEGENDARY}!"); +const u8 BattleText_WishMade[] = _("{EVIL_LEGENDARY} spricht einen\nWUNSCHTRAUM aus!"); +const u8 BattleText_WishTrue[] = _("WUNSCHTRAUM von\n{STRING 0} erfüllt sich!"); +const u8 BattleText_PlantedRoots[] = _("{EVIL_LEGENDARY} pflanzt seine\nWurzeln!"); +const u8 BattleText_AbsorbNutrients[] = _("{EVIL_LEGENDARY} nimmt über\nseine Wurzeln Nährstoffe auf!"); +const u8 BattleText_AnchoredItself[] = _("{GOOD_LEGENDARY}\nverankert sich mit seinen Wurzeln!"); +const u8 BattleText_DrowsyMade[] = _("{EVIL_LEGENDARY} macht\n{GOOD_LEGENDARY} schläfrig!"); +const u8 BattleText_KnockedOffItem[] = _("{EVIL_LEGENDARY}\nentreißt {STRING 19} von\l{GOOD_LEGENDARY}!"); +const u8 BattleText_AbilitySwap[] = _("{EVIL_LEGENDARY} tauscht die\nFähigkeiten mit einem PKMN!"); +const u8 BattleText_SealedMove[] = _("{EVIL_LEGENDARY} versiegelt\ndie Attacke/n des Gegners!"); +const u8 BattleText_GrudgeBear[] = _("{EVIL_LEGENDARY} möchte, dass\nder Gegner ein NACHSPIEL erträgt!"); +const u8 BattleText_GrudgeLosePP[] = _("{STRING 0} von\n{EVIL_LEGENDARY} hat aufgrund\lvon NACHSPIEL alle AP verloren!"); +const u8 BattleText_ShroudedItself[] = _("{EVIL_LEGENDARY} verhüllt sich\nselbst in {STRING 17}!"); +const u8 BattleText_MagicCoatBounce[] = _("{STRING 17} von\n{EVIL_LEGENDARY} prallte am\lMAGIEMANTEL ab!"); +const u8 BattleText_AwaitMove[] = _("{EVIL_LEGENDARY} wartet auf\neine gegnerische Attacke!"); +const u8 BattleText_SnatchedMove[] = _("{GOOD_LEGENDARY} ÜBERNAHM\nAttacke von {STRING 16}!"); +const u8 BattleText_ElecWeakened[] = _("Die Stärke der Elektrizität\nwurde geschwächt!"); +const u8 BattleText_FireWeakened[] = _("Die Stärke des Feuers\nwurde geschwächt!"); +const u8 BattleText_FoundOne[] = _("{EVIL_LEGENDARY} hat 1\n{STRING 19} gefunden!"); +const u8 BattleText_SoothingAroma[] = _("Ein wohltuendes Aroma\nbreitet sich aus!"); +const u8 BattleText_CantUseItems[] = _("Hier können Items nicht eingesetzt\nwerden.{PAUSE 64}"); +const u8 BattleText_UnknownString2[] = _("Für {STRING 16} war\n{STRING 19} {STRING 0}"); +const u8 BattleText_HustleUse[] = _("{STRING 16} setzt\n{STRING 19} ein, um zu drängeln!"); +const u8 BattleText_LostFocus[] = _("{EVIL_LEGENDARY} hat seinen\nFokus verloren und kann\lnicht angreifen!"); +const u8 BattleText_DraggedOut[] = _("{GOOD_LEGENDARY} wurde\nauserwählt!\p"); +const u8 BattleText_BrokeWall[] = _("Die Mauer brach zusammen!"); +const u8 BattleText_NoEffect[] = _("Es ist wirkungslos!"); +const u8 BattleText_NoMovesLeft[] = _("{STRING 15} hat keine\nAttacken mehr übrig!\p"); +const u8 BattleText_MoveIsDisabled[] = _("{STRING 17} von\n{STRING 15} ist blockiert!\p"); +const u8 BattleText_TormentNoUse[] = _("{STRING 15} kann\naufgrund von FOLTERKNECHT\pdie Attacke nicht 2-mal\nhintereinander einsetzen!"); +const u8 BattleText_TauntNoUse[] = _("{STRING 15} kann\n{STRING 17} nach VERHÖHNER\lnicht einsetzen!\p"); +const u8 BattleText_SealedNoUse[] = _("{STRING 15} kann die ver-\nsiegelte Attacke {STRING 17}\lnicht einsetzen!\p"); +const u8 BattleText_RainMade[] = _("{STRING 23} von\n{STRING 16} lässt\les regnen!"); +const u8 BattleText_SpeedRisen[] = _("{STRING 23} von\n{STRING 16} erhöht\lseine INIT.!"); +const u8 BattleText_ProtectedBy[] = _("{GOOD_LEGENDARY} wurde durch\n{STRING 22} geschützt!"); +const u8 BattleText_PreventedBy[] = _("{STRING 22} von\n{GOOD_LEGENDARY} hindert\p{EVIL_LEGENDARY} daran,\n{STRING 17} einzusetzen!"); +const u8 BattleText_HPRestoredUsing[] = _("{GOOD_LEGENDARY} füllt KP mit\nHilfe von {STRING 22} auf!"); +const u8 BattleText_MadeUseless[] = _("{STRING 22} von\n{GOOD_LEGENDARY} hebt die\lWirkung von {STRING 17} auf!"); +const u8 BattleText_MadeType[] = _("{STRING 22} von\n{GOOD_LEGENDARY} macht es zu\leinem {STRING 0}-Typ!"); +const u8 BattleText_PreventedPara[] = _("{STRING 22} von\n{STRING 14} verhindert\leine Paralyse!"); +const u8 BattleText_PreventedRomance[] = _("{STRING 22} von\n{GOOD_LEGENDARY} verhindert\leine Romanze!"); +const u8 BattleText_PreventedPoison[] = _("{STRING 22} von\n{STRING 14} verhindert\leine Vergiftung!"); +const u8 BattleText_PreventedConfusion[] = _("{STRING 22} von\n{GOOD_LEGENDARY} verhindert\lVerwirrung!"); +const u8 BattleText_RaisedFirePower[] = _("{STRING 22} von\n{GOOD_LEGENDARY} erhöht die\lFEUER-Kraft!"); +const u8 BattleText_AnchorsItself[] = _("{GOOD_LEGENDARY} verankert\nsich mit Hilfe von {STRING 22}!"); +const u8 BattleText_CutsAttack[] = _("{STRING 23} von\n{STRING 16} vermindert\lANGRIFF von {GOOD_LEGENDARY}!"); +const u8 BattleText_PreventedStatLoss[] = _("{STRING 23} von\n{STRING 16} verhindert\lStatusveränderungen!"); +const u8 BattleText_HurtOther[] = _("{STRING 22} von\n{GOOD_LEGENDARY} verletzt\l{EVIL_LEGENDARY}!"); +const u8 BattleText_Traced[] = _("FÄHRTE von\n{STRING 16}\perkennt {PLAYER}\nvon {STRING 0}!"); +const u8 BattleText_PreventedBurn[] = _("{STRING 24} von\n{STRING 14} verhindert\lVerbrennung!"); +const u8 BattleText_BlocksOther[] = _("{STRING 22} von\n{GOOD_LEGENDARY} blockiert\l{STRING 17}!"); +const u8 BattleText_BlocksOther2[] = _("{STRING 23} von\n{STRING 16} blockiert\l{STRING 17}!"); +const u8 BattleText_RestoredHPByItem[] = _("{STRING 21} von\n{EVIL_LEGENDARY} füllt\leinige KP auf!"); +const u8 BattleText_WhipSandstorm[] = _("{STRING 23} von\n{STRING 16} entfacht\leinen Sandsturm!"); +const u8 BattleText_SunIntensified[] = _("{STRING 23} von\n{STRING 16} intensiviert\ldie Sonnenstrahlen!"); +const u8 BattleText_PreventedLoss[] = _("{STRING 23} von\n{STRING 16} verhindert \lden Verlust von {STRING 0}!"); +const u8 BattleText_InfatuatedPoke[] = _("{EVIL_LEGENDARY} ist vernarrt\nin {STRING 22} von\l{GOOD_LEGENDARY}!"); +const u8 BattleText_MadeIneffective[] = _("{STRING 22} von\n{GOOD_LEGENDARY} macht\l{STRING 17} wirkungslos!"); +const u8 BattleText_CuredProblem[] = _("{STRING 23} von\n{STRING 16} heilte sein\lProblem mit {STRING 0}!"); +const u8 BattleText_OozeSuckup[] = _("Es saugte\nKLOAKENSOSSE auf!"); +const u8 BattleText_Transformed2[] = _("{STRING 16}\nverwandelte sich!"); +const u8 BattleText_TookAttack2[] = _("{STRING 22} von\n{GOOD_LEGENDARY} übernahm\lden Angriff!"); +const u8 BattleText_PreventedSwitch[] = _("{STRING 20} von\n{STRING 0} verhindert\pWechsel!\p"); +const u8 BattleText_PreventedOther[] = _("{STRING 22} von\n{GOOD_LEGENDARY} macht\p{STRING 0} von\n{STRING 16} wirkungslos!"); +const u8 BattleText_MadeIneffective2[] = _("{STRING 23} von\n{STRING 16} machte\les wirkungslos!"); +const u8 BattleText_PreventedFlinching[] = _("{STRING 24} von\n{STRING 14} verhindert\lein Zurückschrecken!"); +const u8 BattleText_PreventedOther2[] = _("{STRING 21} von\n{EVIL_LEGENDARY} macht\p{STRING 22} von\n{GOOD_LEGENDARY} wirkungslos!"); +const u8 BattleText_CuredOfProblem[] = _("{STRING 23} von\n{STRING 16} heilte sein\lProblem mit {STRING 0}!"); +const u8 BattleText_NoEffectOn[] = _("{STRING 23} von\n{STRING 16} hat keine\lWirkung auf {STRING 14}!"); +const u8 BattleText_Sharply[] = _("steigt stark!"); +const u8 BattleText_Rose[] = _("steigt."); +const u8 BattleText_Harshly[] = _("sinkt stark!"); +const u8 BattleText_Fell[] = _("sinkt."); +const u8 BattleText_UnknownString7[] = _("{STRING 0} von\n{EVIL_LEGENDARY} {PLAYER}"); +const u8 BattleText_UnknownString3[] = _("{STRING 0} von\n{GOOD_LEGENDARY} {PLAYER}"); +const u8 BattleText_UnknownString4[] = _("{STRING 19}: {STRING 0} von\n{STRING 16} {PLAYER}"); +const u8 BattleText_UnknownString5[] = _("{STRING 0} von\n{EVIL_LEGENDARY} {PLAYER}"); +const u8 BattleText_UnknownString6[] = _("{STRING 0} von\n{GOOD_LEGENDARY} {PLAYER}"); +const u8 BattleText_StatNoHigher[] = _("Status von {EVIL_LEGENDARY}\nkann nicht weiter erhöht werden!"); +const u8 BattleText_StatNoLower[] = _("Status von {GOOD_LEGENDARY}\nkann nicht weiter sinken!"); +const u8 BattleText_Critical[] = _("Ein Volltreffer!"); +const u8 BattleText_GrandSlam[] = _("Ein K.O.-Treffer!"); +const u8 BattleText_MoveForget123[] = _("{PAUSE 32}1, {PAUSE 15}2 und...{PAUSE 15} ...{PAUSE 15} ...{PAUSE 15}\n{PAUSE 15}{PLAY_SE 0x38 0x00}Schwupp!\p"); +const u8 BattleText_MoveForgetAnd[] = _("Und...\p"); +const u8 BattleText_CantForgetHM[] = _("VM-Attacken können jetzt \nnicht vergessen werden.\p"); +const u8 BattleText_NotEffective[] = _("Das ist nicht sehr effektiv..."); +const u8 BattleText_SuperEffective[] = _("Das ist sehr effektiv!"); +const u8 BattleText_GotAwaySafely[] = _("{PLAY_SE 0x11 0x00}Du bist entkommen!\p"); +const u8 BattleText_FledUsingItem[] = _("{PLAY_SE 0x11 0x00}{EVIL_LEGENDARY} floh\ndurch Einsatz von {STRING 19}!\p"); +const u8 BattleText_FledUsingOther[] = _("{PLAY_SE 0x11 0x00}{EVIL_LEGENDARY} floh\ndurch Einsatz von {STRING 21}!\p"); +const u8 BattleText_FledWild[] = _("{PLAY_SE 0x11 0x00}Wildes {STRING 0} floh!"); +const u8 BattleText_PlayerDefeatedTrainer[] = _("Spieler besiegte\n{STRING 29}!"); +const u8 BattleText_PlayerDefeatedTrainers[] = _("Spieler besiegte\n{STRING 30} und {STRING 29}!"); +const u8 BattleText_PlayerLostTrainer[] = _("Spieler verlor gegen\n{STRING 29}!"); +const u8 BattleText_PlayerLostTrainers[] = _("Spieler verlor gegen\n{STRING 30} und {STRING 29}!"); +const u8 BattleText_PlayerTiedTrainer[] = _("Patt zwischen Spieler und\n{STRING 29}!"); +const u8 BattleText_PlayerTiedTrainers[] = _("Patt zwischen Spieler, {STRING 30}\nund {STRING 29}!"); +const u8 BattleText_FledSingle[] = _("{PLAY_SE 0x11 0x00}{STRING 29} floh!"); +const u8 BattleText_FledDouble[] = _("{PLAY_SE 0x11 0x00}{STRING 29} und\n{STRING 30} flohen!"); +const u8 BattleText_NoRunning[] = _("Du kannst aus TRAINER-Kämpfen\nnicht fliehen!\p"); +const u8 BattleText_CantEscape2[] = _("Flucht unmöglich!\p"); +const u8 BattleText_BirchDontLeaveMe[] = _("PROF. BIRK: Du... Du kannst mich doch\nnicht einfach im Stich lassen!\p"); +const u8 BattleText_Nothing[] = _("Nichts geschieht!"); +const u8 BattleText_Failed[] = _("Es schlug fehl!"); +const u8 BattleText_HurtItself[] = _("Es hat sich vor Verwirrung\nselbst verletzt!"); +const u8 BattleText_MirrorFail[] = _("Der SPIEGELTRICK schlug fehl!"); +const u8 BattleText_RainStart[] = _("Es fängt an zu regnen!"); +const u8 BattleText_PourStart[] = _("Ein Wolkenbruch!"); +const u8 BattleText_RainCont1[] = _("Es regnet weiter."); +const u8 BattleText_PourCont[] = _("Der Wolkenbruch hält an."); +const u8 BattleText_RainStop[] = _("Es hat aufgehört zu regnen."); +const u8 BattleText_SandBrewed[] = _("Ein Sandsturm kommt auf!"); +const u8 BattleText_SandRages[] = _("Der Sandsturm tobt."); +const u8 BattleText_SandSubsided[] = _("Der Sandsturm legt sich."); +const u8 BattleText_SunBright[] = _("Das Sonnenlicht wird stärker!"); +const u8 BattleText_SunStrong[] = _("Gleißendes Sonnenlicht!"); +const u8 BattleText_SunFaded[] = _("Das Sonnenlicht lässt nach!"); +const u8 BattleText_HailStart[] = _("Es fängt an zu hageln!"); +const u8 BattleText_HailCont[] = _("Es hagelt!"); +const u8 BattleText_HailStop[] = _("Es hat aufgehört zu hageln."); +const u8 BattleText_SpitUpFail[] = _("Aber es konnte nichts\nENTFESSELN!"); +const u8 BattleText_SwallowFail[] = _("Aber es konnte nichts\nVERZEHREN!"); +const u8 BattleText_WindHeatWave[] = _("Der Wind wurde zu einer\nHITZEWELLE!"); +const u8 BattleText_StatElim[] = _("Alle Statusveränderungen wurden\nentfernt!"); +const u8 BattleText_CoinScatter[] = _("Es liegen überall Münzen verstreut!"); +const u8 BattleText_SubWeak[] = _("Zu schwach, um einen DELEGATOR\neinzusetzen!"); +const u8 BattleText_PainSplit[] = _("Die Kontrahenten teilen\nihr Leid!"); +const u8 BattleText_BellChime[] = _("Eine Glocke läutet!"); +const u8 BattleText_PerishSong[] = _("Alle betroffenen POKéMON werden\nin 3 Runden K.O. gehen!"); +const u8 BattleText_NoPP1[] = _("Es sind keine AP mehr für\ndiese Attacke übrig!\p"); +const u8 BattleText_NoPP2[] = _("Aber es waren keine AP mehr\nfür diese Attacke übrig!"); +const u8 BattleText_IgnoredOrdersSLP[] = _("{EVIL_LEGENDARY} ignoriert die\nBefehle. Es schläft!"); +const u8 BattleText_IgnoredOrders[] = _("{EVIL_LEGENDARY} ignoriert den\nBefehl!"); +const u8 BattleText_BeganNap[] = _("{EVIL_LEGENDARY} macht\nein Nickerchen!"); +const u8 BattleText_LoafingAround[] = _("{EVIL_LEGENDARY} faulenzt!"); +const u8 BattleText_WontObey[] = _("{EVIL_LEGENDARY} ist\nungehorsam!"); +const u8 BattleText_TurnedAway[] = _("{EVIL_LEGENDARY} wendet\nsich ab!"); +const u8 BattleText_NotNotice[] = _("{EVIL_LEGENDARY} gibt vor,\nnichts zu bemerken!"); +const u8 BattleText_WillSwitch[] = _("Als Nächstes wird {PLAYER} von\n{STRING 25} {STRING 26} eingesetzt.\pWird {STRING 32} das\nPOKéMON wechseln?"); +const u8 BattleText_LearnedMove2[] = _("{EVIL_LEGENDARY} hat\n{STRING 0} gelernt!"); +const u8 BattleText_PlayerDefeatedTrainer2[] = _("Spieler besiegte\n{STRING 25} {STRING 26}!\p"); +const u8 BattleText_CreptCloser[] = _("{STRING 32} schleicht sich näher an\n{STR_VAR_2} heran!"); +const u8 BattleText_CantGetCloser[] = _("{STRING 32} kann nicht näher herangehen!"); +const u8 BattleText_WatchingCarefully[] = _("{STR_VAR_2} beobachtet\nalles aufmerksam!"); +const u8 BattleText_CuriousAbout[] = _("{STR_VAR_2} ist\nneugierig auf {STRING 0}!"); +const u8 BattleText_EnthralledBy[] = _("{STR_VAR_2} ist begeistert\nvon {STRING 0}!"); +const u8 BattleText_IgnoredThing[] = _("{STR_VAR_2} ignoriert\n{STRING 0} völlig!"); +const u8 BattleText_ThrewBlock[] = _("{STRING 32} wirft {STR_VAR_2} einen\n{POKEBLOCK} zu!"); +const u8 BattleText_SafariOver[] = _("{PLAY_SE 0x49 0x00}ANSAGE: Du hast keine\nSAFARIBÄLLE mehr! Game over!\p"); +const u8 BattleText_WildAppeared1[] = _("Ein wildes {STR_VAR_2} erscheint!\p"); +const u8 BattleText_WildAppeared2[] = _("Ein wildes {STR_VAR_2} erscheint!\p"); +const u8 BattleText_WildAppeared3[] = _("Ein wildes {STR_VAR_2} erscheint!{PAUSE 127}"); +const u8 BattleText_WildDoubleAppeared[] = _("Ein wildes {KUN} und\nein wildes {STR_VAR_2} erscheinen!\p"); +const u8 BattleText_SingleWantToBattle1[] = _("Eine Herausforderung von\n{STRING 25} {STRING 26}!\p"); +const u8 BattleText_SingleWantToBattle2[] = _("Eine Herausforderung von\n{STRING 29}!"); +const u8 BattleText_DoubleWantToBattle[] = _("{STRING 29} und {STRING 30}\nmöchten kämpfen!"); +const u8 BattleText_SentOutSingle1[] = _("{STR_VAR_2} wird von\n{STRING 25} {STRING 26} in den\lKampf geschickt!"); +const u8 BattleText_SentOutDouble1[] = _("{STR_VAR_2} und {KUN}\nwerden von\p{STRING 25} {STRING 26}\nin den Kampf geschickt!"); +const u8 BattleText_SentOutSingle2[] = _("{STRING 0} wird von\n{STRING 25} {STRING 26}\lin den Kampf geschickt!"); +const u8 BattleText_SentOutSingle3[] = _("{STRING 29} schickt\n{STR_VAR_2} in den Kampf!"); +const u8 BattleText_SentOutDouble2[] = _("{STRING 29} schickt\n{STR_VAR_2} und {KUN}!"); +const u8 BattleText_SentOutDouble3[] = _("{STRING 29} schickt\n{VERSION}!\p{STRING 30} schickt\n{GOOD_TEAM}!"); +const u8 BattleText_SentOutSingle4[] = _("{STRING 29} schickt\n{STRING 0}!"); +const u8 BattleText_SentOutSingle5[] = _("{STRING 31} schickt\n{STRING 0}!"); +const u8 BattleText_SentOutSingle6[] = _("Los! {STR_VAR_1}!"); +const u8 BattleText_SentOutDouble4[] = _("Los! {STR_VAR_1} und\n{STR_VAR_3}!"); +const u8 BattleText_SentOutSingle7[] = _("Los! {STRING 0}!"); +const u8 BattleText_SentOutSingle8[] = _("Du schaffst es! {STRING 0}!"); +const u8 BattleText_SentOutSingle9[] = _("Streng dich an, {STRING 0}!"); +const u8 BattleText_SentOutSingle10[] = _("Mach es fertig!\nLos, {STRING 0}!"); +const u8 BattleText_SentOutSingle11[] = _("{STRING 28} schickt\n{EVIL_TEAM}!\pLos! {RIVAL}!"); +const u8 BattleText_ComeBackSingle1[] = _("{STRING 0}, genug!\nKomm zurück!"); +const u8 BattleText_ComeBackSingle2[] = _("{STRING 0}, komm zurück!"); +const u8 BattleText_ComeBackSingle3[] = _("{STRING 0}, O.K.!\nKomm zurück!"); +const u8 BattleText_ComeBackSingle4[] = _("{STRING 0}, gut!\nKomm zurück!"); +const u8 BattleText_WithdrewPoke1[] = _("{STRING 0} wurde\nvon {STRING 25} {STRING 26}\lzurückgerufen!"); +const u8 BattleText_WithdrewPoke2[] = _("{STRING 29} ruft\n{STRING 0} zurück!"); +const u8 BattleText_WithdrewPoke3[] = _("{STRING 31} ruft\n{STRING 0} zurück!"); +const u8 BattleText_Wild[] = _(" (Wild)"); +const u8 BattleText_Foe[] = _(" (Gegner)"); +const u8 BattleText_Foe2[] = _("Gegner"); +const u8 BattleText_Ally[] = _("Anwender"); +const u8 BattleText_Foe3[] = _("Gegner"); +const u8 BattleText_Ally2[] = _("Anwender"); +const u8 BattleText_Foe4[] = _("Gegner"); +const u8 BattleText_Ally3[] = _("Anwender"); +const u8 BattleText_OpponentUsedMove[] = _("{EVIL_LEGENDARY} setzt\n{PLAYER} ein!"); +const u8 BattleText_Exclamation2[] = _(""); +const u8 BattleText_Exclamation3[] = _(""); +const u8 BattleText_Exclamation4[] = _(""); +const u8 BattleText_Exclamation5[] = _(""); +const u8 BattleText_Exclamation[] = _(""); +const u8 BattleStatText_HP[] = _("KP"); +const u8 BattleStatText_Attack[] = _("ANGRIFF"); +const u8 BattleStatText_Defense[] = _("VERT."); +const u8 BattleStatText_Speed[] = _("INIT."); +const u8 BattleStatText_SpAtk[] = _("SP.ANG."); +const u8 BattleStatText_SpDef[] = _("SP.VER."); +const u8 BattleStatText_Accuracy[] = _("GENAUIGKEIT"); +const u8 BattleStatText_Evasion[] = _("FLUCHTWERT"); +const u8 ContestStatText_TooSpicy[] = _("zu scharf!"); +const u8 ContestStatText_TooDry[] = _("zu trocken!"); +const u8 ContestStatText_TooSweet[] = _("zu süß!"); +const u8 ContestStatText_TooBitter[] = _("zu bitter!"); +const u8 ContestStatText_TooSour[] = _("zu sauer!"); +const u8 BattleText_Used1[] = _("{STRING 32} setzt\n{STRING 19} ein!"); +const u8 BattleText_TutorialUsed[] = _("HEIKO setzt\n{STRING 19} ein!"); +const u8 BattleText_Used2[] = _("{STRING 19} wird von\n{STRING 25} {STRING 26} eingesetzt!"); +const u8 BattleText_BlockBall[] = _("Der TRAINER hat den BALL abgeblockt!"); +const u8 BattleText_DontBeAThief[] = _("Sei kein Dieb!"); +const u8 BattleText_DodgeBall[] = _("Es ist dem BALL ausgewichen! Dieses\nPOKéMON kann nicht gefangen werden!"); +const u8 BattleText_MissPoke[] = _("Du hast das POKéMON verfehlt!"); +const u8 BattleText_BallBrokeOhNo[] = _("Mist!\nDas POKéMON hat sich befreit!"); +const u8 BattleText_BallBrokeAppeared[] = _("Oh!\nFast hätte es geklappt!"); +const u8 BattleText_BallBrokeAlmost[] = _("Mist!\nDas war knapp!"); +const u8 BattleText_BallBrokeSoClose[] = _("Verflixt!\nEs hätte beinahe geklappt!"); +const u8 BattleText_BallCaught1[] = _("Toll!\n{STR_VAR_2} wurde gefangen!{UNKNOWN_A}{PLAY_BGM 0x60 0x01}\p"); +const u8 BattleText_BallCaught2[] = _("Toll!\n{STR_VAR_2} wurde gefangen!{UNKNOWN_A}{PLAY_BGM 0x60 0x01}{PAUSE 127}"); +const u8 BattleText_GiveNickname[] = _("Möchtest du dem {STR_VAR_2}\neinen Spitznamen geben?"); +const u8 BattleText_SentToPC[] = _("{STR_VAR_2} wurde auf\n{STRING 35} PC übertragen."); +const u8 BattleText_Someone[] = _("einen"); +const u8 BattleText_Lanette[] = _("LANETTES"); +const u8 BattleText_AddedToDex[] = _("Für {STR_VAR_2} wurde ein Eintrag\nim POKéDEX angelegt.\p"); +const u8 BattleText_Raining[] = _("Es regnet."); +const u8 BattleText_Sandstorm[] = _("Ein Sandsturm tobt."); +const u8 BattleText_BoxFull[] = _("Die BOXEN sind voll!\nDu kannst keines mehr fangen!\p"); +const u8 BattleText_EnigmaBerry[] = _("ENIGMABEERE"); +const u8 BattleText_Berry[] = _("{STR_VAR_1}BEERE"); +const u8 BattleText_CuredParalysis[] = _("{STRING 19} von\n{STRING 16}\lheilte die Paralyse!"); +const u8 BattleText_CuredPoison[] = _("{STRING 19} von\n{STRING 16}\lheilte die Vergiftung!"); +const u8 BattleText_CuredBurn[] = _("{STRING 19} von\n{STRING 16}\lheilte die Verbrennung!"); +const u8 BattleText_CuredFreeze[] = _("{STRING 19} von\n{STRING 16} taute es auf!"); +const u8 BattleText_CuredSleep[] = _("{STRING 19} von\n{STRING 16} \lweckte es auf!"); +const u8 BattleText_CuredConfusion[] = _("{STRING 19} von\n{STRING 16}\lhebt die Verwirrung auf!"); +const u8 BattleText_CuredStatus[] = _("{STRING 19} von\n{STRING 16} \lheilte sein {STRING 0}-Problem!"); +const u8 BattleText_NormalizedStatus[] = _("{STRING 19} von\n{STRING 16} normalisierte\lseine Statuswerte!"); +const u8 BattleText_RestoredHealth[] = _("{STRING 19} füllte\nKP von {STRING 16} auf!"); +const u8 BattleText_RestoredPP[] = _("{STRING 19} von\n{STRING 16} füllte AP von\l{STRING 0} auf!"); +const u8 BattleText_RestoredStatus[] = _("{STRING 19} von\n{STRING 16}\pstellte seine\nStatuswerte wieder her!"); +const u8 BattleText_RestoredHPLittle[] = _("{STRING 19} von\n{STRING 16}\lfüllte einige KP auf!"); +const u8 BattleText_ChoiceBand[] = _("{STRING 19} erlaubt\nnur den Einsatz von {STRING 17}!\p"); +const u8 BattleText_FocusSash[] = _("{GOOD_LEGENDARY} hält\nmit Hilfe von\l{STRING 19} durch!"); +const u8 BattleText_Terminator2[] = _(""); +const u8 BattleText_WallyBall[] = _("Nun muss man einen BALL werfen, oder?\nIch... Ich werde mein Bestes geben!"); +const u8 BattleText_StartEvo[] = _("Hey?\n{STR_VAR_1} entwickelt sich!"); +const u8 BattleText_FinishEvo[] = _("Glückwunsch! Dein {STR_VAR_1}\nwurde zu {STR_VAR_2}!{UNKNOWN_A}\p"); +const u8 BattleText_StopEvo[] = _("Hm? Die Entwicklung\nwurde abgebrochen!\p"); +const u8 BattleText_OtherMenu[] = _("Was soll\n{STRING 15} tun?"); +const u8 BattleText_PlayerMenu[] = _("Was wird {STRING 32}\ntun?"); +const u8 BattleText_WallyMenu[] = _("Was wird\nHEIKO tun?"); +const u8 BattleText_LinkStandby[] = _("{PAUSE 16}Verbindung..."); +const u8 BattleText_MenuOptions[] = _("{PALETTE 5}{COLOR_HIGHLIGHT_SHADOW SKY_BLUE LIGHT_BLUE WHITE2}KAMPF{CLEAR_TO 46}BEUTEL\nPOKéMON{CLEAR_TO 46}FLUCHT"); +const u8 BattleText_MenuOptionsSafari[] = _("{PALETTE 5}{COLOR_HIGHLIGHT_SHADOW SKY_BLUE LIGHT_BLUE WHITE2}BALL{CLEAR_TO 46}{POKEBLOCK}\nNÄHER{CLEAR_TO 46}FLUCHT"); +const u8 BattleText_PP[] = _("{PALETTE 5}{COLOR_HIGHLIGHT_SHADOW SKY_BLUE LIGHT_BLUE WHITE2}AP\nTYP/"); +const u8 BattleText_Format[] = _("{PALETTE 5}{COLOR_HIGHLIGHT_SHADOW SKY_BLUE LIGHT_BLUE WHITE2}"); +const u8 BattleText_ForgetMove[] = _("{COLOR_HIGHLIGHT_SHADOW SKY_BLUE LIGHT_BLUE WHITE2}{PALETTE 5}Welche Attacke soll vergessen werden?"); +const u8 BattleText_YesNo[] = _("{PALETTE 5}{COLOR_HIGHLIGHT_SHADOW SKY_BLUE LIGHT_BLUE WHITE2}Ja\nNein"); +const u8 BattleText_SwitchWhich[] = _("{PALETTE 5}{COLOR_HIGHLIGHT_SHADOW SKY_BLUE LIGHT_BLUE WHITE2}\nWohin?"); +const u8 BattleText_Format2[] = _("{PALETTE 5}{COLOR_HIGHLIGHT_SHADOW SKY_BLUE LIGHT_BLUE WHITE2}"); +const u8 BattleText_RightArrow[] = _("{RIGHT_ARROW}"); +const u8 BattleText_Plus[] = _("+"); +const u8 BattleText_Dash[] = _("-"); +const u8 BattleText_HP[] = _("KP "); +const u8 BattleText_Attack[] = _("ANGR. "); +const u8 BattleText_Defense[] = _("VERT."); +const u8 BattleText_SpAtk[] = _("SP.ANG."); +const u8 BattleText_SpDef[] = _("SP.VER."); +const u8 BattleText_SafariBalls[] = _("{HIGHLIGHT RED}SAFARIBÄLLE"); +const u8 BattleText_SafariBallsLeft[] = _("{HIGHLIGHT RED}Übrig: "); +const u8 BattleText_HighlightRed[] = _("{HIGHLIGHT RED}"); +const u8 BattleText_Sleep[] = _("Schlaf"); +const u8 BattleText_PoisonStatus[] = _("Gift"); +const u8 BattleText_Burn[] = _("Verbrennung"); +const u8 BattleText_Paralysis[] = _("Paralyse"); +const u8 BattleText_IceStatus[] = _("Eis"); +const u8 BattleText_Confusion[] = _("Verwirrung"); +const u8 BattleText_Love[] = _("Liebe"); +const u8 BattleText_Format3[] = _(" und "); +const u8 BattleText_Format4[] = _(", "); +const u8 BattleText_Format5[] = _(" "); +const u8 BattleText_Format6[] = _("\l"); +const u8 BattleText_Format7[] = _("\n"); +const u8 BattleText_Format8[] = _("sind"); +const u8 BattleText_Format9[] = _("sind"); +gBadEggNickname[] = _("Schl. EI"); +const u8 BattleText_Wally[] = _("HEIKO"); +const u8 BattleText_Win[] = _("{HIGHLIGHT TRANSPARENT}Sieg"); +const u8 BattleText_Loss[] = _("{HIGHLIGHT TRANSPARENT}Ndrl."); +const u8 BattleText_Tie[] = _("{HIGHLIGHT TRANSPARENT}Patt"); +const u8 BattleText_Format10[] = _(" ist"); +const u8 BattleText_Format11[] = _(""); +const u8 BattleText_Normal[] = _("eine NORMALE Att."); +const u8 BattleText_Fighting[] = _("eine KAMPF-Att."); +const u8 BattleText_Flying[] = _("eine FLUG-Att."); +const u8 BattleText_Poison[] = _("eine GIFT-Att."); +const u8 BattleText_Ground[] = _("eine BODEN-Att."); +const u8 BattleText_Rock[] = _("eine GESTEINS-Att."); +const u8 BattleText_Bug[] = _("eine KÄFER-Att."); +const u8 BattleText_Ghost[] = _("eine GEIST-Att."); +const u8 BattleText_Steel[] = _("eine STAHL-Att."); +const u8 BattleText_Typeless[] = _("eine ???-Attacke"); +const u8 BattleText_Fire[] = _("eine FEUER-Att."); +const u8 BattleText_Water[] = _("eine WASSER-Att."); +const u8 BattleText_Grass[] = _("eine PFLANZEN-Att."); +const u8 BattleText_Electric[] = _("eine ELEKTRO-Att."); +const u8 BattleText_Psychic[] = _("eine PSYCHO-Att."); +const u8 BattleText_Ice[] = _("eine EIS-Att."); +const u8 BattleText_Dragon[] = _("eine DRACHEN-Att."); +const u8 BattleText_Dark[] = _("eine UNLICHT-Att."); + +const u8 *const gUnknown_08400F58[] = +{ + BattleStatText_HP, + BattleStatText_Attack, + BattleStatText_Defense, + BattleStatText_Speed, + BattleStatText_SpAtk, + BattleStatText_SpDef, + BattleStatText_Accuracy, + BattleStatText_Evasion, +}; + +const u8 *const gUnknown_08400F78[] = +{ + ContestStatText_TooSpicy, + ContestStatText_TooDry, + ContestStatText_TooSweet, + ContestStatText_TooBitter, + ContestStatText_TooSour, +}; + +const u8 *const gBattleStringsTable[] = +{ + BattleText_UnknownString, + BattleText_GainExpPoints, + BattleText_GrewLevel, + BattleText_LearnedMove, + BattleText_TryingToLearnMove, + BattleText_CantLearnMore, + BattleText_DeleteMove, + BattleText_DeletedMove, + BattleText_StopLearning, + BattleText_DidNotLearn, + BattleText_LearnedMove2, + BattleText_AttackMissed, + BattleText_ProtectedItself, + BattleText_StatNoHigher, + BattleText_AvoidedDamage, + BattleText_DoesntAffect, + BattleText_AttackingFainted, + BattleText_DefendingFainted, + BattleText_WinningPrize, + BattleText_OutOfUsablePoke, + BattleText_WhitedOut, + BattleText_PreventEscape, + BattleText_HitMulti, + BattleText_FellAsleep, + BattleText_MadeAsleep, + BattleText_DefendingAsleep, + BattleText_AttackingAsleep, + BattleText_WasntAffected, + BattleText_Poisoned, + BattleText_Poisoned2, + BattleText_PoisonHurt, + BattleText_AlreadyPoisoned, + BattleText_BadlyPoisoned, + BattleText_EnergyDrained, + BattleText_Burned, + BattleText_Burned2, + BattleText_BurnHurt, + BattleText_Frozen, + BattleText_Frozen2, + BattleText_FrozenSolid, + BattleText_DefendingDefrosted, + BattleText_AttackingDefrosted, + BattleText_Defrosted, + BattleText_Paralyzed, + BattleText_Paralyzed2, + BattleText_Paralyzed3, + BattleText_AlreadyParalyzed, + BattleText_ParalysisHealed, + BattleText_DreamEaten, + BattleText_AttackingStatNoHigher, + BattleText_DefendingStatNoHigher, + BattleText_StoppedWorking, + BattleText_StoppedWorking2, + BattleText_Confused, + BattleText_ConfusionSnapOut, + BattleText_BecameConfused, + BattleText_AlreadyConfused, + BattleText_FellLove, + BattleText_InLoveWith, + BattleText_ImmobilizedBy, + BattleText_BlownAway, + BattleText_TypeTransform, + BattleText_Flinched, + BattleText_RegainedHealth, + BattleText_HPFull, + BattleText_RaisedSpDef, + BattleText_RaisedDefense, + BattleText_CoveredVeil, + BattleText_SafeguardActive, + BattleText_SafeguardFaded, + BattleText_WentToSleep, + BattleText_SpeltHealthy, + BattleText_WhipWhirlwind, + BattleText_TookSunlight, + BattleText_LoweredHead, + BattleText_IsGlowing, + BattleText_FlewHigh, + BattleText_DugHole, + BattleText_SqueezedBind, + BattleText_TrappedVortex, + BattleText_Wrapped, + BattleText_Clamped, + BattleText_HurtBy, + BattleText_FreedFrom, + BattleText_KeptGoingCrash, + BattleText_MistShroud, + BattleText_MistProtect, + BattleText_GetPumped, + BattleText_HitRecoil, + BattleText_ProtectedItself2, + BattleText_SandBuffeted, + BattleText_HailStricken, + BattleText_WasSeeded, + BattleText_EvadedAttack, + BattleText_HealthSapped, + BattleText_FastAsleep, + BattleText_WokeUp, + BattleText_UproarAwake, + BattleText_UproarWoke, + BattleText_UproarCaused, + BattleText_UproarMaking, + BattleText_CalmedDown, + BattleText_UproarCantSleep, + BattleText_Stockpiled, + BattleText_StockpiledCant, + BattleText_UproarCantSleep2, + BattleText_UproarKeptAwake, + BattleText_StayedAwake, + BattleText_StoringEnergy, + BattleText_UnleashedEnergy, + BattleText_FatigueConfuse, + BattleText_PickedUpYen, + BattleText_Unaffected, + BattleText_Transformed, + BattleText_SubMade, + BattleText_SubAlready, + BattleText_SubTookDamage, + BattleText_SubFaded, + BattleText_MustRecharge, + BattleText_RageBuilding, + BattleText_MoveWasDisabled, + BattleText_MoveIsDisabled, + BattleText_DisabledNoMore, + BattleText_EncoreGot, + BattleText_EncoreEnded, + BattleText_TookAim, + BattleText_SketchedMove, + BattleText_DestinyBondTake, + BattleText_DestinyBondTaken, + BattleText_ReducedBy, + BattleText_StoleSomething, + BattleText_CantEscapeNow, + BattleText_NightmareStart, + BattleText_NightmareLock, + BattleText_CurseLay, + BattleText_CurseAfflict, + BattleText_SpikesScattered, + BattleText_SpikesHurt, + BattleText_IdentifiedPoke, + BattleText_PerishSongFell, + BattleText_BracedItself, + BattleText_EnduredHit, + BattleText_MagnitudeCount, + BattleText_CutHPMaxATK, + BattleText_CopyStatChanges, + BattleText_GotFreeFrom, + BattleText_LeechShed, + BattleText_SpikesBlownAway, + BattleText_FledBattle, + BattleText_ForesawAttack, + BattleText_TookAttack, + BattleText_PokeAttack, + BattleText_CenterAttention, + BattleText_ChargingPower, + BattleText_NaturePower, + BattleText_StatusNormal, + BattleText_NoMovesLeft, + BattleText_TormentSubject, + BattleText_TormentNoUse, + BattleText_TightenFocus, + BattleText_TauntFell, + BattleText_TauntNoUse, + BattleText_ReadyToHelp, + BattleText_SwitchedItems, + BattleText_CopiedObject, + BattleText_WishMade, + BattleText_WishTrue, + BattleText_PlantedRoots, + BattleText_AbsorbNutrients, + BattleText_AnchoredItself, + BattleText_DrowsyMade, + BattleText_KnockedOffItem, + BattleText_AbilitySwap, + BattleText_SealedMove, + BattleText_SealedNoUse, + BattleText_GrudgeBear, + BattleText_GrudgeLosePP, + BattleText_ShroudedItself, + BattleText_MagicCoatBounce, + BattleText_AwaitMove, + BattleText_SnatchedMove, + BattleText_RainMade, + BattleText_SpeedRisen, + BattleText_ProtectedBy, + BattleText_PreventedBy, + BattleText_HPRestoredUsing, + BattleText_MadeType, + BattleText_PreventedPara, + BattleText_PreventedRomance, + BattleText_PreventedPoison, + BattleText_PreventedConfusion, + BattleText_RaisedFirePower, + BattleText_AnchorsItself, + BattleText_CutsAttack, + BattleText_PreventedStatLoss, + BattleText_HurtOther, + BattleText_Traced, + BattleText_Sharply, + BattleText_Rose, + BattleText_Harshly, + BattleText_Fell, + BattleText_UnknownString7, + BattleText_UnknownString3, + BattleText_UnknownString5, + BattleText_UnknownString6, + BattleText_Critical, + BattleText_GrandSlam, + BattleText_MoveForget123, + BattleText_MoveForgetAnd, + BattleText_NotEffective, + BattleText_SuperEffective, + BattleText_GotAwaySafely, + BattleText_FledWild, + BattleText_NoRunning, + BattleText_CantEscape2, + BattleText_BirchDontLeaveMe, + BattleText_Nothing, + BattleText_Failed, + BattleText_HurtItself, + BattleText_MirrorFail, + BattleText_RainStart, + BattleText_PourStart, + BattleText_RainCont1, + BattleText_PourCont, + BattleText_RainStop, + BattleText_SandBrewed, + BattleText_SandRages, + BattleText_SandSubsided, + BattleText_SunBright, + BattleText_SunStrong, + BattleText_SunFaded, + BattleText_HailStart, + BattleText_HailCont, + BattleText_HailStop, + BattleText_SpitUpFail, + BattleText_SwallowFail, + BattleText_WindHeatWave, + BattleText_StatElim, + BattleText_CoinScatter, + BattleText_SubWeak, + BattleText_PainSplit, + BattleText_BellChime, + BattleText_PerishSong, + BattleText_NoPP1, + BattleText_NoPP2, + BattleText_Used1, + BattleText_TutorialUsed, + BattleText_BlockBall, + BattleText_DontBeAThief, + BattleText_DodgeBall, + BattleText_MissPoke, + BattleText_BallBrokeOhNo, + BattleText_BallBrokeAppeared, + BattleText_BallBrokeAlmost, + BattleText_BallBrokeSoClose, + BattleText_BallCaught1, + BattleText_BallCaught2, + BattleText_GiveNickname, + BattleText_SentToPC, + BattleText_AddedToDex, + BattleText_Raining, + BattleText_Sandstorm, + BattleText_CantEscape, + BattleText_IgnoredOrdersSLP, + BattleText_IgnoredOrders, + BattleText_BeganNap, + BattleText_LoafingAround, + BattleText_WontObey, + BattleText_TurnedAway, + BattleText_NotNotice, + BattleText_WillSwitch, + BattleText_CreptCloser, + BattleText_CantGetCloser, + BattleText_WatchingCarefully, + BattleText_CuriousAbout, + BattleText_EnthralledBy, + BattleText_IgnoredThing, + BattleText_ThrewBlock, + BattleText_SafariOver, + BattleText_CuredParalysis, + BattleText_CuredPoison, + BattleText_CuredBurn, + BattleText_CuredFreeze, + BattleText_CuredSleep, + BattleText_CuredConfusion, + BattleText_CuredStatus, + BattleText_RestoredHealth, + BattleText_RestoredPP, + BattleText_RestoredStatus, + BattleText_RestoredHPLittle, + BattleText_ChoiceBand, + BattleText_FocusSash, + BattleText_Terminator2, + BattleText_PreventedBurn, + BattleText_BlocksOther, + BattleText_RestoredHPByItem, + BattleText_WhipSandstorm, + BattleText_PreventedLoss, + BattleText_InfatuatedPoke, + BattleText_MadeIneffective, + BattleText_CuredProblem, + BattleText_OozeSuckup, + BattleText_Transformed2, + BattleText_ElecWeakened, + BattleText_FireWeakened, + BattleText_HidUnderwater, + BattleText_SprangUp, + BattleText_CantForgetHM, + BattleText_FoundOne, + BattleText_PlayerDefeatedTrainer2, + BattleText_SoothingAroma, + BattleText_CantUseItems, + BattleText_UnknownString2, + BattleText_UnknownString4, + BattleText_HustleUse, + BattleText_MadeUseless, + BattleText_SandTombTrapped, + BattleText_Terminator, + BattleText_BoostedExp, + BattleText_SunIntensified, + BattleText_GroundMoveNegate, + BattleText_WallyBall, + BattleText_TookAttack2, + BattleText_ChoseDestiny, + BattleText_LostFocus, + BattleText_UseNext, + BattleText_FledUsingItem, + BattleText_FledUsingOther, + BattleText_DraggedOut, + BattleText_PreventedOther, + BattleText_NormalizedStatus, + BattleText_Used2, + BattleText_BoxFull, + BattleText_AvoidedAttack, + BattleText_MadeIneffective2, + BattleText_PreventedFlinching, + BattleText_AlreadyBurned, + BattleText_StatNoLower, + BattleText_BlocksOther2, + BattleText_WoreOff, + BattleText_RaisedDefenseLittle, + BattleText_RaisedSpDefLittle, + BattleText_BrokeWall, + BattleText_PreventedOther2, + BattleText_CuredOfProblem, + BattleText_AttackingCantEscape, + BattleText_Obtained1, + BattleText_Obtained2, + BattleText_Obtained3, + BattleText_NoEffect, + BattleText_NoEffectOn, +}; + +// below are lists of battle string enums and NOT pointers to the strings. +const u16 gMissStrings[] = +{ + BATTLE_TEXT_AttackMissed, + BATTLE_TEXT_ProtectedItself, + BATTLE_TEXT_AvoidedAttack, + BATTLE_TEXT_AvoidedDamage, + BATTLE_TEXT_GroundMoveNegate, +}; + +const u16 BattleTextList_401512[] = +{ + BATTLE_TEXT_CantEscape2, + BATTLE_TEXT_BirchDontLeaveMe, + BATTLE_TEXT_PreventEscape, + BATTLE_TEXT_CantEscape, + BATTLE_TEXT_AttackingCantEscape, +}; + +const u16 BattleTextList_40151C[] = +{ + BATTLE_TEXT_RainStart, + BATTLE_TEXT_PourStart, + BATTLE_TEXT_Failed, + BATTLE_TEXT_SandBrewed, + BATTLE_TEXT_SunBright, + BATTLE_TEXT_HailStart, +}; + +const u16 BattleTextList_401528[] = +{ + BATTLE_TEXT_SandRages, + BATTLE_TEXT_HailCont, +}; + +const u16 BattleTextList_40152C[] = +{ + BATTLE_TEXT_SandBuffeted, + BATTLE_TEXT_HailStricken, +}; + +const u16 BattleTextList_401530[] = +{ + BATTLE_TEXT_SandSubsided, + BATTLE_TEXT_HailStop, +}; + +const u16 BattleTextList_401534[] = +{ + BATTLE_TEXT_RainCont1, + BATTLE_TEXT_PourCont, + BATTLE_TEXT_RainStop, +}; + +const u16 BattleTextList_40153A[] = +{ + BATTLE_TEXT_ProtectedItself2, + BATTLE_TEXT_BracedItself, + BATTLE_TEXT_Failed, +}; + +const u16 BattleTextList_401540[] = +{ + BATTLE_TEXT_Failed, + BATTLE_TEXT_RaisedDefense, + BATTLE_TEXT_RaisedDefenseLittle, + BATTLE_TEXT_RaisedSpDef, + BATTLE_TEXT_RaisedSpDefLittle, + BATTLE_TEXT_CoveredVeil, +}; + +const u16 BattleTextList_40154C[] = +{ + BATTLE_TEXT_WasSeeded, + BATTLE_TEXT_EvadedAttack, + BATTLE_TEXT_DoesntAffect, + BATTLE_TEXT_HealthSapped, + BATTLE_TEXT_OozeSuckup, +}; + +const u16 BattleTextList_401556[] = +{ + BATTLE_TEXT_WentToSleep, + BATTLE_TEXT_SpeltHealthy, +}; + +const u16 BattleTextList_40155A[] = +{ + BATTLE_TEXT_UproarMaking, + BATTLE_TEXT_CalmedDown, +}; + +const u16 BattleTextList_40155E[] = +{ + BATTLE_TEXT_Stockpiled, + BATTLE_TEXT_StockpiledCant, +}; + +const u16 BattleTextList_401562[] = +{ + BATTLE_TEXT_WokeUp, + BATTLE_TEXT_UproarWoke, +}; + +const u16 BattleTextList_401566[] = +{ + BATTLE_TEXT_SwallowFail, + BATTLE_TEXT_HPFull, +}; + +const u16 BattleTextList_40156A[] = +{ + BATTLE_TEXT_UproarCantSleep2, + BATTLE_TEXT_UproarKeptAwake, + BATTLE_TEXT_StayedAwake, +}; + +const u16 BattleTextList_401570[] = +{ + BATTLE_TEXT_UnknownString7, + BATTLE_TEXT_UnknownString3, + BATTLE_TEXT_AttackingStatNoHigher, + BATTLE_TEXT_Terminator2, + BATTLE_TEXT_UnknownString4, + BATTLE_TEXT_HustleUse, +}; + +const u16 BattleTextList_40157C[] = +{ + BATTLE_TEXT_UnknownString5, + BATTLE_TEXT_UnknownString6, + BATTLE_TEXT_DefendingStatNoHigher, + BATTLE_TEXT_Terminator2, +}; + +const u16 BattleTextList_401584[] = +{ + BATTLE_TEXT_WhipWhirlwind, + BATTLE_TEXT_TookSunlight, + BATTLE_TEXT_LoweredHead, + BATTLE_TEXT_IsGlowing, + BATTLE_TEXT_FlewHigh, + BATTLE_TEXT_DugHole, + BATTLE_TEXT_HidUnderwater, + BATTLE_TEXT_SprangUp, +}; + +const u16 BattleTextList_401594[] = +{ + BATTLE_TEXT_SqueezedBind, + BATTLE_TEXT_Wrapped, + BATTLE_TEXT_TrappedVortex, + BATTLE_TEXT_Clamped, + BATTLE_TEXT_TrappedVortex, + BATTLE_TEXT_SandTombTrapped, +}; + +const u16 BattleTextList_4015A0[] = +{ + BATTLE_TEXT_MistShroud, + BATTLE_TEXT_Failed, +}; + +const u16 BattleTextList_4015A4[] = +{ + BATTLE_TEXT_GetPumped, + BATTLE_TEXT_Failed, +}; + +const u16 BattleTextList_4015A8[] = +{ + BATTLE_TEXT_Transformed, + BATTLE_TEXT_Failed, +}; + +const u16 BattleTextList_4015AC[] = +{ + BATTLE_TEXT_SubMade, + BATTLE_TEXT_SubWeak, +}; + +const u16 BattleTextList_4015B0[] = +{ + BATTLE_TEXT_Poisoned, + BATTLE_TEXT_Poisoned2, +}; + +const u16 BattleTextList_4015B4[] = +{ + BATTLE_TEXT_Paralyzed, + BATTLE_TEXT_Paralyzed2, +}; + +const u16 BattleTextList_4015B8[] = +{ + BATTLE_TEXT_FellAsleep, + BATTLE_TEXT_MadeAsleep, +}; + +const u16 BattleTextList_4015BC[] = +{ + BATTLE_TEXT_Burned, + BATTLE_TEXT_Burned2, +}; + +const u16 BattleTextList_4015C0[] = +{ + BATTLE_TEXT_Frozen, + BATTLE_TEXT_Frozen2, +}; + +const u16 BattleTextList_4015C4[] = +{ + BATTLE_TEXT_AttackingDefrosted, + BATTLE_TEXT_Defrosted, +}; + +const u16 BattleTextList_4015C8[] = +{ + BATTLE_TEXT_AttackMissed, + BATTLE_TEXT_Unaffected, + BATTLE_TEXT_FellLove, + BATTLE_TEXT_InfatuatedPoke, +}; + +const u16 BattleTextList_4015D0[] = +{ + BATTLE_TEXT_EnergyDrained, + BATTLE_TEXT_OozeSuckup, +}; + +const u16 BattleTextList_4015D4[] = +{ + BATTLE_TEXT_ElecWeakened, + BATTLE_TEXT_FireWeakened, +}; + +const u16 BattleTextList_4015D8[] = +{ + BATTLE_TEXT_BellChime, + BATTLE_TEXT_BellChime, + BATTLE_TEXT_BellChime, + BATTLE_TEXT_BellChime, + BATTLE_TEXT_SoothingAroma, +}; + +const u16 BattleTextList_4015E2[] = +{ + BATTLE_TEXT_ForesawAttack, + BATTLE_TEXT_ChoseDestiny, +}; + +const u16 BattleTextList_4015E6[] = +{ + BATTLE_TEXT_BallBrokeOhNo, + BATTLE_TEXT_BallBrokeAppeared, + BATTLE_TEXT_BallBrokeAlmost, + BATTLE_TEXT_BallBrokeSoClose, +}; + +const u16 BattleTextList_4015EE[] = +{ + BATTLE_TEXT_Raining, + BATTLE_TEXT_Raining, + BATTLE_TEXT_Raining, + BATTLE_TEXT_Raining, + BATTLE_TEXT_Raining, + BATTLE_TEXT_Raining, + BATTLE_TEXT_Raining, + BATTLE_TEXT_Raining, + BATTLE_TEXT_Sandstorm, + BATTLE_TEXT_Raining, + BATTLE_TEXT_Raining, + BATTLE_TEXT_Raining, + BATTLE_TEXT_SunStrong, + BATTLE_TEXT_Raining, + BATTLE_TEXT_Raining, + BATTLE_TEXT_Raining, +}; + +const u16 BattleTextList_40160E[] = +{ + BATTLE_TEXT_LoafingAround, + BATTLE_TEXT_WontObey, + BATTLE_TEXT_TurnedAway, + BATTLE_TEXT_NotNotice, +}; + +const u16 BattleTextList_401616[] = +{ + BATTLE_TEXT_CreptCloser, + BATTLE_TEXT_CantGetCloser, +}; + +const u16 BattleTextList_40161A[] = +{ + BATTLE_TEXT_CuriousAbout, + BATTLE_TEXT_EnthralledBy, + BATTLE_TEXT_IgnoredThing, +}; + +const u16 BattleTextList_401620[] = +{ + BATTLE_TEXT_CuredConfusion, + BATTLE_TEXT_CuredParalysis, + BATTLE_TEXT_CuredFreeze, + BATTLE_TEXT_CuredBurn, + BATTLE_TEXT_CuredPoison, + BATTLE_TEXT_CuredSleep, +}; + +const u16 BattleTextList_40162C[] = +{ + BATTLE_TEXT_CuredStatus, + BATTLE_TEXT_NormalizedStatus, +}; + +const u16 BattleTextList_401630[] = +{ + BATTLE_TEXT_PreventedBurn, + BATTLE_TEXT_PreventedOther2, + BATTLE_TEXT_NoEffectOn, +}; + +const u16 BattleTextList_401636[] = +{ + BATTLE_TEXT_PreventedPara, + BATTLE_TEXT_PreventedOther2, + BATTLE_TEXT_NoEffectOn, +}; + +const u16 BattleTextList_40163C[] = +{ + BATTLE_TEXT_PreventedPoison, + BATTLE_TEXT_PreventedOther2, + BATTLE_TEXT_NoEffectOn, +}; + +const u16 BattleTextList_401642[] = +{ + BATTLE_TEXT_Obtained1, + BATTLE_TEXT_Obtained2, + BATTLE_TEXT_Obtained3, +}; + +const u16 BattleTextList_401648[] = +{ + BATTLE_TEXT_RaisedFirePower, + BATTLE_TEXT_MadeIneffective, +}; + +const u16 gTrappingMoves[] = +{ + MOVE_BIND, + MOVE_WRAP, + MOVE_FIRE_SPIN, + MOVE_CLAMP, + MOVE_WHIRLPOOL, + MOVE_SAND_TOMB, + 0xFFFF, +}; + +const u8 *const gUnknown_0840165C[] = +{ + BattleText_HP, + BattleText_SpAtk, + BattleText_Attack, + BattleText_SpDef, + BattleText_Defense, + BattleStatText_Speed, +}; + +const u8 *const gUnknown_08401674[] = +{ + BattleText_Normal, + BattleText_Fighting, + BattleText_Flying, + BattleText_Poison, + BattleText_Ground, + BattleText_Rock, + BattleText_Bug, + BattleText_Ghost, + BattleText_Steel, + BattleText_Typeless, + BattleText_Fire, + BattleText_Water, + BattleText_Grass, + BattleText_Electric, + BattleText_Psychic, + BattleText_Ice, + BattleText_Dragon, + BattleText_Dark, +}; -- cgit v1.2.3 From b2cd76e980a7b9b8f9f7c268b0af49dd9a80ab96 Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Mon, 13 Nov 2017 13:30:45 -0500 Subject: attempted fix for german --- src/data/battle_strings_de.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/data/battle_strings_de.h b/src/data/battle_strings_de.h index e696adf94..0e1df4b2a 100755 --- a/src/data/battle_strings_de.h +++ b/src/data/battle_strings_de.h @@ -831,7 +831,7 @@ const u8 BattleText_Rock[] = _("eine GESTEINS-Att."); const u8 BattleText_Bug[] = _("eine KÄFER-Att."); const u8 BattleText_Ghost[] = _("eine GEIST-Att."); const u8 BattleText_Steel[] = _("eine STAHL-Att."); -const u8 BattleText_Typeless[] = _("eine ???-Attacke"); +const u8 BattleText_Typeless[] = _("eine \?\?\?-Attacke"); const u8 BattleText_Fire[] = _("eine FEUER-Att."); const u8 BattleText_Water[] = _("eine WASSER-Att."); const u8 BattleText_Grass[] = _("eine PFLANZEN-Att."); -- cgit v1.2.3 From 2a841124cffddcfcc5650d06aa373558fe255f2c Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Mon, 13 Nov 2017 13:35:11 -0500 Subject: actually fix german this time --- src/data/battle_strings_de.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/data/battle_strings_de.h b/src/data/battle_strings_de.h index 0e1df4b2a..873643506 100755 --- a/src/data/battle_strings_de.h +++ b/src/data/battle_strings_de.h @@ -815,7 +815,7 @@ const u8 BattleText_Format6[] = _("\l"); const u8 BattleText_Format7[] = _("\n"); const u8 BattleText_Format8[] = _("sind"); const u8 BattleText_Format9[] = _("sind"); -gBadEggNickname[] = _("Schl. EI"); +const u8 gBadEggNickname[] = _("Schl. EI"); const u8 BattleText_Wally[] = _("HEIKO"); const u8 BattleText_Win[] = _("{HIGHLIGHT TRANSPARENT}Sieg"); const u8 BattleText_Loss[] = _("{HIGHLIGHT TRANSPARENT}Ndrl."); -- cgit v1.2.3 From e30b844ca17f0eac84418e449f5fabe72602bad8 Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Mon, 13 Nov 2017 13:49:35 -0500 Subject: undo string fix --- src/data/battle_strings_de.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/data/battle_strings_de.h b/src/data/battle_strings_de.h index 873643506..5289ce4e0 100755 --- a/src/data/battle_strings_de.h +++ b/src/data/battle_strings_de.h @@ -831,7 +831,7 @@ const u8 BattleText_Rock[] = _("eine GESTEINS-Att."); const u8 BattleText_Bug[] = _("eine KÄFER-Att."); const u8 BattleText_Ghost[] = _("eine GEIST-Att."); const u8 BattleText_Steel[] = _("eine STAHL-Att."); -const u8 BattleText_Typeless[] = _("eine \?\?\?-Attacke"); +const u8 BattleText_Typeless[] = _("eine ???-Attacke"); const u8 BattleText_Fire[] = _("eine FEUER-Att."); const u8 BattleText_Water[] = _("eine WASSER-Att."); const u8 BattleText_Grass[] = _("eine PFLANZEN-Att."); -- cgit v1.2.3 From e4e81453ba710688451f9024cb76004114315c74 Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Mon, 13 Nov 2017 15:02:27 -0500 Subject: migrate cable_club and mori_debug_menu data to src --- src/debug/mori_debug_menu.c | 67 +++++++++++++++++++++++++++++++++++---------- src/engine/cable_club.c | 21 +++++++++++++- 2 files changed, 72 insertions(+), 16 deletions(-) (limited to 'src') diff --git a/src/debug/mori_debug_menu.c b/src/debug/mori_debug_menu.c index 1595ecd2e..019cfbf25 100644 --- a/src/debug/mori_debug_menu.c +++ b/src/debug/mori_debug_menu.c @@ -16,13 +16,50 @@ extern u8 (*gCallback_03004AE8)(void); u8 gUnknown_03004DA0[0x20]; -extern u8 gUnknown_0839B22C[][3]; -extern u8 gUnknown_0839B24A[]; -extern u8 gUnknown_0839B24D[]; -extern u8 gUnknown_0839B255[]; -extern u8 gUnknown_0839B257[]; - -extern const struct MenuAction gMoriDebugMenuActions[]; +const u8 gUnknown_0839B22C[][3] = +{ + _(" A"), + _(" B"), + _("SL"), + _("ST"), + _("RK"), + _("LK"), + _("UK"), + _("DK"), + _("RT"), + _("LT"), +}; + +const u8 gUnknown_0839B24A[] = _("ND"); +const u8 gUnknown_0839B24D[] = _("の こどもは\n"); // "'s child "= +const u8 gUnknown_0839B255[] = _(" "); +const u8 gUnknown_0839B257[] = _("ながいなまえぽけもん"); // "long name pokemon" (used as test name) +const u8 Text_39B262[] = _("Search a child"); +const u8 Text_39B271[] = _("Egg"); +const u8 Text_39B275[] = _("Egg (male)"); +const u8 Text_39B280[] = _("1000 steps"); +const u8 Text_39B28B[] = _("10000 steps"); +const u8 Text_39B297[] = _("MOVE TUTOR"); +const u8 Text_39B2A2[] = _("Breed an egg"); +const u8 Text_39B2AF[] = _("Long name"); +#ifdef GERMAN +const u8 Text_39B2B9[] = _("Delete {POKEBLOCK}"); +#else +const u8 Text_39B2B9[] = _("ポロックけす"); +#endif + +const struct MenuAction gMoriDebugMenuActions[] = +{ + {Text_39B262, (u8 (*) (void))MoriDebugMenu_SearchChild}, // ugly cast needed to stop complaints of u8 (*func)() not being compatible with this declaration (TODO: Make MenuAction a Callback union to allow a new definition.) + {Text_39B271, MoriDebugMenu_Egg}, + {Text_39B275, MoriDebugMenu_MaleEgg}, + {Text_39B280, MoriDebugMenu_1000Steps}, + {Text_39B28B, MoriDebugMenu_10000Steps}, + {Text_39B297, MoriDebugMenu_MoveTutor}, + {Text_39B2A2, MoriDebugMenu_BreedEgg}, + {Text_39B2AF, MoriDebugMenu_LongName}, + {Text_39B2B9, MoriDebugMenu_PokeblockCase}, +}; void unref_sub_8083CF0(void) { @@ -65,7 +102,7 @@ u8 MoriDebugMenu_SearchChild(u8 a1, u8 a2, u8 *ptr) return 0; } -s8 MoriDebugMenu_Egg(void) +u8 MoriDebugMenu_Egg(void) { if ( Daycare_CountPokemon(&gSaveBlock1.daycareData) == 2 && daycare_relationship_score_from_savegame() ) sub_8041940(); @@ -74,7 +111,7 @@ s8 MoriDebugMenu_Egg(void) return 1; } -s8 MoriDebugMenu_MaleEgg(void) +u8 MoriDebugMenu_MaleEgg(void) { if ( Daycare_CountPokemon(&gSaveBlock1.daycareData) == 2 && daycare_relationship_score_from_savegame() ) sub_8041950(); @@ -83,28 +120,28 @@ s8 MoriDebugMenu_MaleEgg(void) return 1; } -s8 MoriDebugMenu_1000Steps(void) +u8 MoriDebugMenu_1000Steps(void) { sub_8041790(1000); CloseMenu(); return 1; } -s8 MoriDebugMenu_10000Steps(void) +u8 MoriDebugMenu_10000Steps(void) { sub_8041790(10000); CloseMenu(); return 1; } -s8 MoriDebugMenu_MoveTutor(void) +u8 MoriDebugMenu_MoveTutor(void) { sub_8132670(); CloseMenu(); return 1; } -s8 MoriDebugMenu_BreedEgg(void) +u8 MoriDebugMenu_BreedEgg(void) { u8 loopCounter; @@ -122,14 +159,14 @@ s8 MoriDebugMenu_BreedEgg(void) return 1; } -s8 MoriDebugMenu_LongName(void) +u8 MoriDebugMenu_LongName(void) { SetMonData(gPlayerParty, MON_DATA_NICKNAME, gUnknown_0839B257); CloseMenu(); return 1; } -s8 MoriDebugMenu_PokeblockCase(void) +u8 MoriDebugMenu_PokeblockCase(void) { s32 loopCounter; diff --git a/src/engine/cable_club.c b/src/engine/cable_club.c index c61a1d01c..ec8acc65f 100644 --- a/src/engine/cable_club.c +++ b/src/engine/cable_club.c @@ -35,7 +35,6 @@ extern const u8 gUnknown_081A4932[]; extern const u8 gUnknown_081A4975[]; extern const u8 gUnknown_081A49B6[]; extern const u8 gUnknown_081A490C[]; -extern const u8* const gTrainerCardColorNames[]; extern struct { u8 field0; @@ -76,6 +75,26 @@ extern void sub_8055574(void); extern s32 sub_80554F8(void); extern void sub_805465C(void); +#ifdef GERMAN +const u8 TrainerCardColorName_Bronze[] = _("BRONZE"); +const u8 TrainerCardColorName_Copper[] = _("KUPFER"); +const u8 TrainerCardColorName_Silver[] = _("SILBER"); +const u8 TrainerCardColorName_Gold[] = _("GOLD"); +#else +const u8 TrainerCardColorName_Bronze[] = _("BRONZE"); +const u8 TrainerCardColorName_Copper[] = _("COPPER"); +const u8 TrainerCardColorName_Silver[] = _("SILVER"); +const u8 TrainerCardColorName_Gold[] = _("GOLD"); +#endif + +const u8 *const gTrainerCardColorNames[] = +{ + TrainerCardColorName_Bronze, + TrainerCardColorName_Copper, + TrainerCardColorName_Silver, + TrainerCardColorName_Gold, +}; + static void sub_8082CD4(u8 arg0, u8 arg1) { if (FindTaskIdByFunc(sub_8082F20) == 0xFF) -- cgit v1.2.3 From f4562d618ccae091f6ca3cfff15b4b22db334d50 Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Mon, 13 Nov 2017 17:34:34 -0500 Subject: migrate tv data to src --- src/field/field_specials.c | 2 + src/field/tv.c | 379 ++++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 361 insertions(+), 20 deletions(-) (limited to 'src') diff --git a/src/field/field_specials.c b/src/field/field_specials.c index 46061febf..48e9b44aa 100644 --- a/src/field/field_specials.c +++ b/src/field/field_specials.c @@ -48,6 +48,8 @@ extern u16 gSpecialVar_0x8004; extern u16 gSpecialVar_0x8005; extern u16 gScriptResult; +extern u8 *const gUnknown_083D1464[3]; + EWRAM_DATA bool8 gBikeCyclingChallenge = FALSE; EWRAM_DATA u8 gBikeCollisions = 0; EWRAM_DATA u32 gBikeCyclingTimer = 0; diff --git a/src/field/tv.c b/src/field/tv.c index a0287e7df..ac9f4a0f0 100644 --- a/src/field/tv.c +++ b/src/field/tv.c @@ -39,6 +39,8 @@ #include "strings.h" #include "text.h" #include "ewram.h" +#include "moves.h" +#include "region_map_sections.h" struct UnkTvStruct { @@ -66,26 +68,18 @@ extern struct TVSaleItem gUnknown_02038724[3]; struct UnkTvStruct gUnknown_03005D38; -extern u8 *gTVBravoTrainerTextGroup[]; -extern u8 *gTVBravoTrainerBattleTowerTextGroup[]; -extern u8 *gTVSmartShopperTextGroup[]; -extern u8 *gTVNameRaterTextGroup[]; -extern u8 *gTVPokemonTodayTextGroup[]; -extern u8 *gTVPokemonTodayFailedCaptureTextGroup[]; -extern u8 *gTVFanClubTextGroup[]; -extern u8 *gTVRecentHappeningsTextGroup[]; -extern u8 *gTVFanClubOpinionsTextGroup[]; -extern u8 *gTVPokemonOutbreakTextGroup[]; -extern u8 *gTVGabbyAndTyTextGroup[]; -extern u8 *gTVFishingGuruAdviceTextGroup[]; -extern u8 *gTVWorldOfMastersTextGroup[]; -extern struct OutbreakPokemon gPokeOutbreakSpeciesList[5]; - - - -extern const u8 *gTVNewsTextGroup1[]; -extern const u8 *gTVNewsTextGroup2[]; -extern const u8 *gTVNewsTextGroup3[]; +//extern u8 *gTVBravoTrainerTextGroup[]; +//extern u8 *gTVBravoTrainerBattleTowerTextGroup[]; +//extern u8 *gTVSmartShopperTextGroup[]; +//extern u8 *gTVNameRaterTextGroup[]; +//extern u8 *gTVPokemonTodayTextGroup[]; +//extern u8 *gTVPokemonTodayFailedCaptureTextGroup[]; +//extern u8 *gTVRecentHappeningsTextGroup[]; +//extern u8 *gTVFanClubOpinionsTextGroup[]; +//extern u8 *gTVPokemonOutbreakTextGroup[]; +//extern u8 *gTVGabbyAndTyTextGroup[]; +//extern u8 *gTVFishingGuruAdviceTextGroup[]; +//extern u8 *gTVWorldOfMastersTextGroup[]; extern u16 gScriptLastTalked; @@ -105,6 +99,351 @@ static u8 gUnknown_03000720; static u8 gUnknown_03000721; static s8 gUnknown_03000722; +const struct OutbreakPokemon gPokeOutbreakSpeciesList[5] = +{ + { + .species = SPECIES_SURSKIT, + .moves = {MOVE_BUBBLE, MOVE_QUICK_ATTACK, MOVE_NONE, MOVE_NONE}, + .level = 3, + .location = MAPSEC_Route102, + }, + { + .species = SPECIES_SURSKIT, + .moves = {MOVE_BUBBLE, MOVE_QUICK_ATTACK, MOVE_NONE, MOVE_NONE}, + .level = 15, + .location = MAPSEC_Route114, + }, + { + .species = SPECIES_SURSKIT, + .moves = {MOVE_BUBBLE, MOVE_QUICK_ATTACK, MOVE_NONE, MOVE_NONE}, + .level = 15, + .location = MAPSEC_Route117, + }, + { + .species = SPECIES_SURSKIT, + .moves = {MOVE_BUBBLE, MOVE_QUICK_ATTACK, MOVE_NONE, MOVE_NONE}, + .level = 28, + .location = MAPSEC_Route120, + }, + { + .species = SPECIES_SKITTY, + .moves = {MOVE_GROWL, MOVE_TACKLE, MOVE_NONE, MOVE_NONE}, + .level = 15, + .location = MAPSEC_Route116, + }, +}; + +extern const u8 gTVNewsText_EnergyGuru1[]; +extern const u8 gTVNewsText_GameCorner1[]; +extern const u8 gTVNewsText_LilycoveDepartment1[]; +extern const u8 gTVNewsText_EnergyGuru2[]; +extern const u8 gTVNewsText_GameCorner2[]; +extern const u8 gTVNewsText_LilycoveDepartment2[]; +extern const u8 gTVNewsText_EnergyGuru3[]; +extern const u8 gTVNewsText_GameCorner3[]; +extern const u8 gTVNewsText_LilycoveDepartment3[]; +extern const u8 gTVFanClubText1[]; +extern const u8 gTVFanClubText2[]; +extern const u8 gTVFanClubText3[]; +extern const u8 gTVFanClubText4[]; +extern const u8 gTVFanClubText5[]; +extern const u8 gTVFanClubText6[]; +extern const u8 gTVFanClubText7[]; +extern const u8 gTVFanClubText8[]; +extern const u8 gTVRecentHappeningsText1[]; +extern const u8 gTVRecentHappeningsText2[]; +extern const u8 gTVRecentHappeningsText3[]; +extern const u8 gTVRecentHappeningsText4[]; +extern const u8 gTVRecentHappeningsText5[]; +extern const u8 gTVRecentHappeningsText6[]; +extern const u8 gTVFanClubOpinionsText1[]; +extern const u8 gTVFanClubOpinionsText2[]; +extern const u8 gTVFanClubOpinionsText3[]; +extern const u8 gTVFanClubOpinionsText4[]; +extern const u8 gTVFanClubOpinionsText5[]; +extern const u8 gTVPokemonOutbreakText[]; +extern const u8 gTVPokemonTodayText1[]; +extern const u8 gTVPokemonTodayText2[]; +extern const u8 gTVPokemonTodayText3[]; +extern const u8 gTVPokemonTodayText4[]; +extern const u8 gTVPokemonTodayText5[]; +extern const u8 gTVPokemonTodayText6[]; +extern const u8 gTVPokemonTodayText7[]; +extern const u8 gTVPokemonTodayText8[]; +extern const u8 gTVPokemonTodayText9[]; +extern const u8 gTVPokemonTodayText10[]; +extern const u8 gTVPokemonTodayText11[]; +extern const u8 gTVPokemonTodayText12[]; +extern const u8 gTVSmartShopperText1[]; +extern const u8 gTVSmartShopperText2[]; +extern const u8 gTVSmartShopperText3[]; +extern const u8 gTVSmartShopperText4[]; +extern const u8 gTVSmartShopperText5[]; +extern const u8 gTVSmartShopperText6[]; +extern const u8 gTVSmartShopperText7[]; +extern const u8 gTVSmartShopperText8[]; +extern const u8 gTVSmartShopperText9[]; +extern const u8 gTVSmartShopperText10[]; +extern const u8 gTVSmartShopperText11[]; +extern const u8 gTVSmartShopperText12[]; +extern const u8 gTVSmartShopperText13[]; +extern const u8 gTVBravoTrainerText1[]; +extern const u8 gTVBravoTrainerText2[]; +extern const u8 gTVBravoTrainerText3[]; +extern const u8 gTVBravoTrainerText4[]; +extern const u8 gTVBravoTrainerText5[]; +extern const u8 gTVBravoTrainerText6[]; +extern const u8 gTVBravoTrainerText7[]; +extern const u8 gTVBravoTrainerText8[]; +extern const u8 gTVBravoTrainerText9[]; +extern const u8 gTVBravoTrainerBattleTowerText1[]; +extern const u8 gTVBravoTrainerBattleTowerText2[]; +extern const u8 gTVBravoTrainerBattleTowerText3[]; +extern const u8 gTVBravoTrainerBattleTowerText4[]; +extern const u8 gTVBravoTrainerBattleTowerText5[]; +extern const u8 gTVBravoTrainerBattleTowerText6[]; +extern const u8 gTVBravoTrainerBattleTowerText7[]; +extern const u8 gTVBravoTrainerBattleTowerText8[]; +extern const u8 gTVBravoTrainerBattleTowerText9[]; +extern const u8 gTVBravoTrainerBattleTowerText10[]; +extern const u8 gTVBravoTrainerBattleTowerText11[]; +extern const u8 gTVBravoTrainerBattleTowerText12[]; +extern const u8 gTVBravoTrainerBattleTowerText13[]; +extern const u8 gTVBravoTrainerBattleTowerText14[]; +extern const u8 gTVBravoTrainerBattleTowerText15[]; +extern const u8 gTVNameRaterText1[]; +extern const u8 gTVNameRaterText2[]; +extern const u8 gTVNameRaterText3[]; +extern const u8 gTVNameRaterText4[]; +extern const u8 gTVNameRaterText5[]; +extern const u8 gTVNameRaterText6[]; +extern const u8 gTVNameRaterText7[]; +extern const u8 gTVNameRaterText8[]; +extern const u8 gTVNameRaterText9[]; +extern const u8 gTVNameRaterText10[]; +extern const u8 gTVNameRaterText11[]; +extern const u8 gTVNameRaterText12[]; +extern const u8 gTVNameRaterText13[]; +extern const u8 gTVNameRaterText14[]; +extern const u8 gTVNameRaterText15[]; +extern const u8 gTVNameRaterText16[]; +extern const u8 gTVNameRaterText17[]; +extern const u8 gTVNameRaterText18[]; +extern const u8 gTVNameRaterText19[]; +extern const u8 gTVPokemonTodayFailedCaptureText1[]; +extern const u8 gTVPokemonTodayFailedCaptureText2[]; +extern const u8 gTVPokemonTodayFailedCaptureText3[]; +extern const u8 gTVPokemonTodayFailedCaptureText4[]; +extern const u8 gTVPokemonTodayFailedCaptureText5[]; +extern const u8 gTVPokemonTodayFailedCaptureText6[]; +extern const u8 gTVPokemonTodayFailedCaptureText7[]; +extern const u8 gTVFishingGuruAdviceText1[]; +extern const u8 gTVFishingGuruAdviceText2[]; +extern const u8 gTVWorldOfMastersText1[]; +extern const u8 gTVWorldOfMastersText2[]; +extern const u8 gTVWorldOfMastersText3[]; +extern const u8 gTVGabbyAndTyText1[]; +extern const u8 gTVGabbyAndTyText2[]; +extern const u8 gTVGabbyAndTyText3[]; +extern const u8 gTVGabbyAndTyText4[]; +extern const u8 gTVGabbyAndTyText5[]; +extern const u8 gTVGabbyAndTyText6[]; +extern const u8 gTVGabbyAndTyText7[]; +extern const u8 gTVGabbyAndTyText8[]; +extern const u8 gTVGabbyAndTyText9[]; + +const u8 *const gTVNewsTextGroup1[] = +{ + NULL, + gTVNewsText_EnergyGuru1, + gTVNewsText_GameCorner1, + gTVNewsText_LilycoveDepartment1, +}; + +const u8 *const gTVNewsTextGroup2[] = +{ + NULL, + gTVNewsText_EnergyGuru2, + gTVNewsText_GameCorner2, + gTVNewsText_LilycoveDepartment2, +}; + +const u8 *const gTVNewsTextGroup3[] = +{ + NULL, + gTVNewsText_EnergyGuru3, + gTVNewsText_GameCorner3, + gTVNewsText_LilycoveDepartment3, +}; + +u8 *const gUnknown_083D1464[] = +{ + gStringVar1, + gStringVar2, + gStringVar3, +}; + +const u8 *const gTVFanClubTextGroup[] = +{ + gTVFanClubText1, + gTVFanClubText2, + gTVFanClubText3, + gTVFanClubText4, + gTVFanClubText5, + gTVFanClubText6, + gTVFanClubText7, + gTVFanClubText8, +}; + +const u8 *const gTVRecentHappeningsTextGroup[] = +{ + gTVRecentHappeningsText1, + gTVRecentHappeningsText2, + gTVRecentHappeningsText3, + gTVRecentHappeningsText4, + gTVRecentHappeningsText5, + gTVRecentHappeningsText6, +}; + +const u8 *const gTVFanClubOpinionsTextGroup[] = +{ + gTVFanClubOpinionsText1, + gTVFanClubOpinionsText2, + gTVFanClubOpinionsText3, + gTVFanClubOpinionsText4, + gTVFanClubOpinionsText5, +}; + +const u8 *const gTVPokemonOutbreakTextGroup[] = +{ + gTVPokemonOutbreakText, +}; + +const u8 *const gTVPokemonTodayTextGroup[] = +{ + gTVPokemonTodayText1, + gTVPokemonTodayText2, + gTVPokemonTodayText3, + gTVPokemonTodayText4, + gTVPokemonTodayText5, + gTVPokemonTodayText6, + gTVPokemonTodayText7, + gTVPokemonTodayText8, + gTVPokemonTodayText9, + gTVPokemonTodayText10, + gTVPokemonTodayText11, + gTVPokemonTodayText12, +}; + +const u8 *const gTVSmartShopperTextGroup[] = +{ + gTVSmartShopperText1, + gTVSmartShopperText2, + gTVSmartShopperText3, + gTVSmartShopperText4, + gTVSmartShopperText5, + gTVSmartShopperText6, + gTVSmartShopperText7, + gTVSmartShopperText8, + gTVSmartShopperText9, + gTVSmartShopperText10, + gTVSmartShopperText11, + gTVSmartShopperText12, + gTVSmartShopperText13, +}; + +const u8 *const gTVBravoTrainerTextGroup[] = +{ + gTVBravoTrainerText1, + gTVBravoTrainerText2, + gTVBravoTrainerText3, + gTVBravoTrainerText4, + gTVBravoTrainerText5, + gTVBravoTrainerText6, + gTVBravoTrainerText7, + gTVBravoTrainerText8, + gTVBravoTrainerText9, +}; + +const u8 *const gTVBravoTrainerBattleTowerTextGroup[] = +{ + gTVBravoTrainerBattleTowerText1, + gTVBravoTrainerBattleTowerText2, + gTVBravoTrainerBattleTowerText3, + gTVBravoTrainerBattleTowerText4, + gTVBravoTrainerBattleTowerText5, + gTVBravoTrainerBattleTowerText6, + gTVBravoTrainerBattleTowerText7, + gTVBravoTrainerBattleTowerText8, + gTVBravoTrainerBattleTowerText9, + gTVBravoTrainerBattleTowerText10, + gTVBravoTrainerBattleTowerText11, + gTVBravoTrainerBattleTowerText12, + gTVBravoTrainerBattleTowerText13, + gTVBravoTrainerBattleTowerText14, + gTVBravoTrainerBattleTowerText15, +}; + +const u8 *const gTVNameRaterTextGroup[] = +{ + gTVNameRaterText1, + gTVNameRaterText2, + gTVNameRaterText3, + gTVNameRaterText4, + gTVNameRaterText5, + gTVNameRaterText6, + gTVNameRaterText7, + gTVNameRaterText8, + gTVNameRaterText9, + gTVNameRaterText10, + gTVNameRaterText11, + gTVNameRaterText12, + gTVNameRaterText13, + gTVNameRaterText14, + gTVNameRaterText15, + gTVNameRaterText16, + gTVNameRaterText17, + gTVNameRaterText18, + gTVNameRaterText19, +}; + +const u8 *const gTVPokemonTodayFailedCaptureTextGroup[] = +{ + gTVPokemonTodayFailedCaptureText1, + gTVPokemonTodayFailedCaptureText2, + gTVPokemonTodayFailedCaptureText3, + gTVPokemonTodayFailedCaptureText4, + gTVPokemonTodayFailedCaptureText5, + gTVPokemonTodayFailedCaptureText6, + gTVPokemonTodayFailedCaptureText7, +}; + +const u8 *const gTVFishingGuruAdviceTextGroup[] = +{ + gTVFishingGuruAdviceText1, + gTVFishingGuruAdviceText2, +}; + +const u8 *const gTVWorldOfMastersTextGroup[] = +{ + gTVWorldOfMastersText1, + gTVWorldOfMastersText2, + gTVWorldOfMastersText3, +}; + +const u8 *const gTVGabbyAndTyTextGroup[] = +{ + gTVGabbyAndTyText1, + gTVGabbyAndTyText2, + gTVGabbyAndTyText3, + gTVGabbyAndTyText4, + gTVGabbyAndTyText5, + gTVGabbyAndTyText6, + gTVGabbyAndTyText7, + gTVGabbyAndTyText8, + gTVGabbyAndTyText9, +}; + void ClearTVShowData(void) { u8 showidx; -- cgit v1.2.3 From 25b90f99dd5005748b9cd4cf895cdbdfb2c7c2e9 Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Mon, 13 Nov 2017 17:37:22 -0500 Subject: remove tv extern comments --- src/field/tv.c | 13 ------------- 1 file changed, 13 deletions(-) (limited to 'src') diff --git a/src/field/tv.c b/src/field/tv.c index ac9f4a0f0..29d012f28 100644 --- a/src/field/tv.c +++ b/src/field/tv.c @@ -68,19 +68,6 @@ extern struct TVSaleItem gUnknown_02038724[3]; struct UnkTvStruct gUnknown_03005D38; -//extern u8 *gTVBravoTrainerTextGroup[]; -//extern u8 *gTVBravoTrainerBattleTowerTextGroup[]; -//extern u8 *gTVSmartShopperTextGroup[]; -//extern u8 *gTVNameRaterTextGroup[]; -//extern u8 *gTVPokemonTodayTextGroup[]; -//extern u8 *gTVPokemonTodayFailedCaptureTextGroup[]; -//extern u8 *gTVRecentHappeningsTextGroup[]; -//extern u8 *gTVFanClubOpinionsTextGroup[]; -//extern u8 *gTVPokemonOutbreakTextGroup[]; -//extern u8 *gTVGabbyAndTyTextGroup[]; -//extern u8 *gTVFishingGuruAdviceTextGroup[]; -//extern u8 *gTVWorldOfMastersTextGroup[]; - extern u16 gScriptLastTalked; extern u8 gScriptContestCategory; -- cgit v1.2.3 From 4a57fe42e53b0f1e35c224a38a613a1bf9bb97f7 Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Mon, 13 Nov 2017 18:03:57 -0500 Subject: migrate main_menu data to src --- src/engine/main_menu.c | 53 ++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 47 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/engine/main_menu.c b/src/engine/main_menu.c index bfbf0dcd6..031dc49d1 100644 --- a/src/engine/main_menu.c +++ b/src/engine/main_menu.c @@ -30,8 +30,6 @@ extern struct PaletteFadeControl gPaletteFade; extern u16 gSaveFileStatus; -extern u16 gMainMenuPalette[]; - extern const u8 gBirchSpeech_Welcome[]; extern const u8 gBirchSpeech_ThisIsPokemon[]; extern const u8 gBirchSpeech_WorldInhabitedByPokemon[]; @@ -43,15 +41,11 @@ extern u8 gBirchSpeech_AhOkayYouArePlayer[]; extern u8 gBirchSpeech_AreYouReady[]; extern struct SpriteTemplate gUnknown_02024E8C; -extern u16 gUnknown_081E795C[]; extern const struct MenuAction gUnknown_081E79B0[]; extern const struct MenuAction gMalePresetNames[]; extern const struct MenuAction gFemalePresetNames[]; -extern const u8 gUnknown_081E764C[]; -extern const u8 gBirchIntroShadowGfx[]; extern const u8 gUnknown_081E7834[]; -extern const u8 gUnknown_081E796C[]; extern const union AffineAnimCmd *const gSpriteAffineAnimTable_81E79AC[]; @@ -136,6 +130,53 @@ static void CreateNameMenu(u8 left, u8 top); static s8 NameMenuProcessInput(void); static void SetPresetPlayerName(u8 index); +static const u16 gUnknown_081E764C[][16] = +{ + INCBIN_U16("graphics/birch_speech/bg0.gbapal"), + INCBIN_U16("graphics/birch_speech/bg1.gbapal"), +}; + +static const u8 gBirchIntroShadowGfx[] = INCBIN_U8("graphics/birch_speech/shadow.4bpp.lz"); +static const u8 gUnknown_081E7834[] = INCBIN_U8("graphics/birch_speech/map.bin.lz"); +static const u16 gUnknown_081E795C[] = INCBIN_U16("graphics/birch_speech/bg2.gbapal"); +static const u16 gUnknown_081E796C[] = INCBIN_U16("graphics/birch_speech/blank_pal.gbapal"); +static const u16 gMainMenuPalette[] = INCBIN_U16("graphics/misc/main_menu.gbapal"); + +static const union AffineAnimCmd gSpriteAffineAnim_81E799C[] = +{ + AFFINEANIMCMD_FRAME(0xFFFE, 0xFFFE, 0, 48), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd *const gSpriteAffineAnimTable_81E79AC[] = +{ + gSpriteAffineAnim_81E799C, +}; + +static const struct MenuAction gUnknown_081E79B0[] = +{ + {gBirchText_Boy, NULL}, + {gBirchText_Girl, NULL}, +}; + +static const struct MenuAction gMalePresetNames[] = +{ + {gBirchText_NewName, NULL}, + {gDefaultBoyName1, NULL}, + {gDefaultBoyName2, NULL}, + {gDefaultBoyName3, NULL}, + {gDefaultBoyName4, NULL}, +}; + +static const struct MenuAction gFemalePresetNames[] = +{ + {gBirchText_NewName, NULL}, + {gDefaultGirlName1, NULL}, + {gDefaultGirlName2, NULL}, + {gDefaultGirlName3, NULL}, + {gDefaultGirlName4, NULL}, +}; + static void CB2_MainMenu(void) { RunTasks(); -- cgit v1.2.3 From 542e1cac5520175949098cb6311faaba42bc2f37 Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Wed, 15 Nov 2017 15:35:15 -0500 Subject: migrate field_door data to src --- src/field/field_door.c | 411 +++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 396 insertions(+), 15 deletions(-) (limited to 'src') diff --git a/src/field/field_door.c b/src/field/field_door.c index ab46f0696..ef349bca7 100644 --- a/src/field/field_door.c +++ b/src/field/field_door.c @@ -6,16 +6,397 @@ #include "songs.h" #include "task.h" -extern struct DoorAnimFrame gDoorOpenAnimFrames[]; -extern struct DoorAnimFrame gDoorCloseAnimFrames[]; -extern struct DoorGraphics gDoorAnimGraphicsTable[]; +const u8 DoorAnimTiles_04[][0x100] = +{ + INCBIN_U8("graphics/door_anims/04/0.4bpp"), + INCBIN_U8("graphics/door_anims/04/1.4bpp"), + INCBIN_U8("graphics/door_anims/04/2.4bpp"), +}; + +// TODO: Make these blank palette includes? +asm(".space 32"); + +const u8 DoorAnimTiles_05[][0x100] = +{ + INCBIN_U8("graphics/door_anims/05/0.4bpp"), + INCBIN_U8("graphics/door_anims/05/1.4bpp"), + INCBIN_U8("graphics/door_anims/05/2.4bpp"), +}; + +const u8 DoorAnimTiles_08[][0x100] = +{ + INCBIN_U8("graphics/door_anims/08/0.4bpp"), + INCBIN_U8("graphics/door_anims/08/1.4bpp"), + INCBIN_U8("graphics/door_anims/08/2.4bpp"), +}; + +asm(".space 32"); + +const u8 DoorAnimTiles_15[][0x100] = +{ + INCBIN_U8("graphics/door_anims/15/0.4bpp"), + INCBIN_U8("graphics/door_anims/15/1.4bpp"), + INCBIN_U8("graphics/door_anims/15/2.4bpp"), +}; + +asm(".space 32"); + +const u8 DoorAnimTiles_16[][0x100] = +{ + INCBIN_U8("graphics/door_anims/16/0.4bpp"), + INCBIN_U8("graphics/door_anims/16/1.4bpp"), + INCBIN_U8("graphics/door_anims/16/2.4bpp"), +}; + +asm(".space 32"); + +const u8 DoorAnimTiles_00[][0x100] = +{ + INCBIN_U8("graphics/door_anims/00/0.4bpp"), + INCBIN_U8("graphics/door_anims/00/1.4bpp"), + INCBIN_U8("graphics/door_anims/00/2.4bpp"), +}; + +const u8 DoorAnimTiles_01[][0x100] = +{ + INCBIN_U8("graphics/door_anims/01/0.4bpp"), + INCBIN_U8("graphics/door_anims/01/1.4bpp"), + INCBIN_U8("graphics/door_anims/01/2.4bpp"), +}; + +const u8 DoorAnimTiles_02[][0x100] = +{ + INCBIN_U8("graphics/door_anims/02/0.4bpp"), + INCBIN_U8("graphics/door_anims/02/1.4bpp"), + INCBIN_U8("graphics/door_anims/02/2.4bpp"), +}; + +const u8 DoorAnimTiles_03[][0x100] = +{ + INCBIN_U8("graphics/door_anims/03/0.4bpp"), + INCBIN_U8("graphics/door_anims/03/1.4bpp"), + INCBIN_U8("graphics/door_anims/03/2.4bpp"), +}; + +const u8 DoorAnimTiles_06[][0x100] = +{ + INCBIN_U8("graphics/door_anims/06/0.4bpp"), + INCBIN_U8("graphics/door_anims/06/1.4bpp"), + INCBIN_U8("graphics/door_anims/06/2.4bpp"), +}; + +const u8 DoorAnimTiles_07[][0x100] = +{ + INCBIN_U8("graphics/door_anims/07/0.4bpp"), + INCBIN_U8("graphics/door_anims/07/1.4bpp"), + INCBIN_U8("graphics/door_anims/07/2.4bpp"), +}; + +const u8 DoorAnimTiles_09[][0x100] = +{ + INCBIN_U8("graphics/door_anims/09/0.4bpp"), + INCBIN_U8("graphics/door_anims/09/1.4bpp"), + INCBIN_U8("graphics/door_anims/09/2.4bpp"), +}; + +asm(".space 32"); + +const u8 DoorAnimTiles_10[][0x100] = +{ + INCBIN_U8("graphics/door_anims/10/0.4bpp"), + INCBIN_U8("graphics/door_anims/10/1.4bpp"), + INCBIN_U8("graphics/door_anims/10/2.4bpp"), +}; + +asm(".space 32"); + +const u8 DoorAnimTiles_11[][0x100] = +{ + INCBIN_U8("graphics/door_anims/11/0.4bpp"), + INCBIN_U8("graphics/door_anims/11/1.4bpp"), + INCBIN_U8("graphics/door_anims/11/2.4bpp"), +}; + +asm(".space 32"); + +const u8 DoorAnimTiles_12[][0x100] = +{ + INCBIN_U8("graphics/door_anims/12/0.4bpp"), + INCBIN_U8("graphics/door_anims/12/1.4bpp"), + INCBIN_U8("graphics/door_anims/12/2.4bpp"), +}; + +asm(".space 32"); + +const u8 DoorAnimTiles_13[][0x100] = +{ + INCBIN_U8("graphics/door_anims/13/0.4bpp"), + INCBIN_U8("graphics/door_anims/13/1.4bpp"), + INCBIN_U8("graphics/door_anims/13/2.4bpp"), +}; + +asm(".space 32"); + +const u8 DoorAnimTiles_14[][0x100] = +{ + INCBIN_U8("graphics/door_anims/14/0.4bpp"), + INCBIN_U8("graphics/door_anims/14/1.4bpp"), + INCBIN_U8("graphics/door_anims/14/2.4bpp"), +}; + +asm(".space 32"); + +const u8 DoorAnimTiles_17[][0x100] = +{ + INCBIN_U8("graphics/door_anims/17/0.4bpp"), + INCBIN_U8("graphics/door_anims/17/1.4bpp"), + INCBIN_U8("graphics/door_anims/17/2.4bpp"), +}; + +asm(".space 32"); + +const u8 DoorAnimTiles_18[][0x100] = +{ + INCBIN_U8("graphics/door_anims/18/0.4bpp"), + INCBIN_U8("graphics/door_anims/18/1.4bpp"), + INCBIN_U8("graphics/door_anims/18/2.4bpp"), +}; + +asm(".space 32"); + +const u8 DoorAnimTiles_19[][0x100] = +{ + INCBIN_U8("graphics/door_anims/19/0.4bpp"), + INCBIN_U8("graphics/door_anims/19/1.4bpp"), + INCBIN_U8("graphics/door_anims/19/2.4bpp"), +}; + +asm(".space 32"); + +const u8 DoorAnimTiles_20[][0x100] = +{ + INCBIN_U8("graphics/door_anims/20/0.4bpp"), + INCBIN_U8("graphics/door_anims/20/1.4bpp"), + INCBIN_U8("graphics/door_anims/20/2.4bpp"), +}; + +asm(".space 32"); + +const u8 DoorAnimTiles_21[][0x100] = +{ + INCBIN_U8("graphics/door_anims/21/0.4bpp"), + INCBIN_U8("graphics/door_anims/21/1.4bpp"), + INCBIN_U8("graphics/door_anims/21/2.4bpp"), +}; + +asm(".space 32"); + +const u8 DoorAnimTiles_22[][0x100] = +{ + INCBIN_U8("graphics/door_anims/22/0.4bpp"), + INCBIN_U8("graphics/door_anims/22/1.4bpp"), + INCBIN_U8("graphics/door_anims/22/2.4bpp"), +}; + +asm(".space 32"); + +const u8 DoorAnimTiles_23[][0x100] = +{ + INCBIN_U8("graphics/door_anims/23/0.4bpp"), + INCBIN_U8("graphics/door_anims/23/1.4bpp"), + INCBIN_U8("graphics/door_anims/23/2.4bpp"), +}; + +asm(".space 32"); + +const u8 DoorAnimTiles_24[][0x100] = +{ + INCBIN_U8("graphics/door_anims/24/0.4bpp"), + INCBIN_U8("graphics/door_anims/24/1.4bpp"), + INCBIN_U8("graphics/door_anims/24/2.4bpp"), +}; + +asm(".space 32"); + +const u8 DoorAnimTiles_25[][0x100] = +{ + INCBIN_U8("graphics/door_anims/25/0.4bpp"), + INCBIN_U8("graphics/door_anims/25/1.4bpp"), + INCBIN_U8("graphics/door_anims/25/2.4bpp"), +}; + +asm(".space 32"); + +const u8 DoorAnimTiles_26[][0x100] = +{ + INCBIN_U8("graphics/door_anims/26/0.4bpp"), + INCBIN_U8("graphics/door_anims/26/1.4bpp"), + INCBIN_U8("graphics/door_anims/26/2.4bpp"), +}; + +asm(".space 32"); + +const u8 DoorAnimTiles_27[][0x100] = +{ + INCBIN_U8("graphics/door_anims/27/0.4bpp"), + INCBIN_U8("graphics/door_anims/27/1.4bpp"), + INCBIN_U8("graphics/door_anims/27/2.4bpp"), +}; + +asm(".space 32"); + +const u8 DoorAnimTiles_28[][0x100] = +{ + INCBIN_U8("graphics/door_anims/28/0.4bpp"), + INCBIN_U8("graphics/door_anims/28/1.4bpp"), + INCBIN_U8("graphics/door_anims/28/2.4bpp"), +}; + +asm(".space 32"); + +const u8 DoorAnimTiles_29[][0x100] = +{ + INCBIN_U8("graphics/door_anims/29/0.4bpp"), + INCBIN_U8("graphics/door_anims/29/1.4bpp"), + INCBIN_U8("graphics/door_anims/29/2.4bpp"), +}; + +asm(".space 32"); + +const u8 DoorAnimTiles_30[][0x100] = +{ + INCBIN_U8("graphics/door_anims/30/0.4bpp"), + INCBIN_U8("graphics/door_anims/30/1.4bpp"), + INCBIN_U8("graphics/door_anims/30/2.4bpp"), +}; + +asm(".space 32"); + +const u8 DoorAnimTiles_31[][0x100] = +{ + INCBIN_U8("graphics/door_anims/31/0.4bpp"), + INCBIN_U8("graphics/door_anims/31/1.4bpp"), + INCBIN_U8("graphics/door_anims/31/2.4bpp"), +}; + +asm(".space 32"); + +const u8 DoorAnimTiles_32[][0x100] = +{ + INCBIN_U8("graphics/door_anims/32/0.4bpp"), + INCBIN_U8("graphics/door_anims/32/1.4bpp"), + INCBIN_U8("graphics/door_anims/32/2.4bpp"), +}; + +asm(".space 32"); + +const u8 DoorAnimTiles_33[][0x100] = +{ + INCBIN_U8("graphics/door_anims/33/0.4bpp"), + INCBIN_U8("graphics/door_anims/33/1.4bpp"), + INCBIN_U8("graphics/door_anims/33/2.4bpp"), +}; + +asm(".space 32"); + +static const struct DoorAnimFrame gDoorOpenAnimFrames[] = +{ + {4, -1}, + {4, 0}, + {4, 0x100}, + {4, 0x200}, + {0, 0}, +}; + +static const struct DoorAnimFrame gDoorCloseAnimFrames[] = +{ + {4, 0x200}, + {4, 0x100}, + {4, 0}, + {4, -1}, + {0, 0}, +}; + +const u8 DoorAnimPalettes_830F8A4[] = {1, 1, 1, 1, 1, 1, 1, 1}; // door 00 +const u8 DoorAnimPalettes_830F8AC[] = {1, 1, 1, 1, 1, 1, 1, 1}; // door 01 +const u8 DoorAnimPalettes_830F8B4[] = {5, 5, 5, 5, 5, 5, 5, 5}; // door 02 +const u8 DoorAnimPalettes_830F8BC[] = {0, 0, 1, 1, 1, 1, 1, 1}; // door 03 +const u8 DoorAnimPalettes_830F8C4[] = {6, 6, 6, 6, 6, 6, 6, 6}; // door 04 +const u8 DoorAnimPalettes_830F8CC[] = {8, 8, 8, 8, 8, 8, 8, 8}; // door 05 +const u8 DoorAnimPalettes_830F8D4[] = {11, 11, 11, 11, 11, 11, 11, 11}; // door 06 +const u8 DoorAnimPalettes_830F8DC[] = {10, 10, 10, 10, 10, 10, 10, 10}; // door 07 +const u8 DoorAnimPalettes_830F8E4[] = {7, 7, 7, 7, 7, 7, 7, 7}; // door 08 +const u8 DoorAnimPalettes_830F8EC[] = {8, 8, 8, 8, 8, 8, 8, 8}; // door 09 +const u8 DoorAnimPalettes_830F8F4[] = {9, 9, 9, 9, 9, 9, 9, 9}; // door 10 +const u8 DoorAnimPalettes_830F8FC[] = {9, 9, 1, 1, 1, 1, 1, 1}; // door 11 +const u8 DoorAnimPalettes_830F904[] = {8, 8, 8, 8, 8, 8, 8, 8}; // door 12 +const u8 DoorAnimPalettes_830F90C[] = {9, 9, 9, 9, 9, 9, 9, 9}; // door 13 +const u8 DoorAnimPalettes_830F914[] = {6, 6, 6, 6, 6, 6, 6, 6}; // door 14 +const u8 DoorAnimPalettes_830F91C[] = {6, 6, 6, 6, 6, 6, 6, 6}; // door 15 +const u8 DoorAnimPalettes_830F924[] = {0, 0, 5, 5, 5, 5, 5, 5}; // door 16 +const u8 DoorAnimPalettes_830F92C[] = {6, 6, 1, 1, 1, 1, 1, 1}; // door 17 +const u8 DoorAnimPalettes_830F934[] = {7, 7, 7, 7, 7, 7, 7, 7}; // door 18 +const u8 DoorAnimPalettes_830F93C[] = {6, 6, 5, 5, 5, 5, 5, 5}; // door 19 +const u8 DoorAnimPalettes_830F944[] = {5, 5, 5, 5, 5, 5, 5, 5}; // door 20 +const u8 DoorAnimPalettes_830F94C[] = {1, 1, 1, 1, 1, 1, 1, 1}; // door 21 +const u8 DoorAnimPalettes_830F954[] = {6, 6, 7, 7, 7, 7, 7, 7}; // door 22 +const u8 DoorAnimPalettes_830F95C[] = {7, 7, 7, 7, 7, 7, 7, 7}; // door 23 +const u8 DoorAnimPalettes_830F964[] = {5, 5, 5, 5, 5, 5, 5, 5}; // door 24 +const u8 DoorAnimPalettes_830F96C[] = {9, 9, 9, 9, 9, 9, 9, 9}; // door 25 +const u8 DoorAnimPalettes_830F974[] = {8, 8, 8, 8, 8, 8, 8, 8}; // door 26 +const u8 DoorAnimPalettes_830F97C[] = {6, 6, 6, 6, 6, 6, 6, 6}; // door 27 +const u8 DoorAnimPalettes_830F984[] = {7, 7, 7, 7, 7, 7, 7, 7}; // door 28 +const u8 DoorAnimPalettes_830F98C[] = {11, 11, 7, 7, 7, 7, 7, 7}; // door 29 +const u8 DoorAnimPalettes_830F994[] = {7, 7, 7, 7, 7, 7, 7, 7}; // door 30 +const u8 DoorAnimPalettes_830F99C[] = {6, 6, 7, 7, 7, 7, 7, 7}; // door 31 +const u8 DoorAnimPalettes_830F9A4[] = {9, 9, 9, 9, 9, 9, 9, 9}; // door 32 +const u8 DoorAnimPalettes_830F9AC[] = {7, 7, 7, 7, 7, 7, 7, 7}; // door 33 + +static const struct DoorGraphics gDoorAnimGraphicsTable[] = +{ + {0x021, 0, DoorAnimTiles_00, DoorAnimPalettes_830F8A4}, // door 00 + {0x061, 1, DoorAnimTiles_01, DoorAnimPalettes_830F8AC}, // door 01 + {0x1CD, 1, DoorAnimTiles_02, DoorAnimPalettes_830F8B4}, // door 02 + {0x041, 1, DoorAnimTiles_03, DoorAnimPalettes_830F8BC}, // door 03 + {0x248, 0, DoorAnimTiles_04, DoorAnimPalettes_830F8C4}, // door 04 + {0x249, 0, DoorAnimTiles_05, DoorAnimPalettes_830F8CC}, // door 05 + {0x22F, 0, DoorAnimTiles_06, DoorAnimPalettes_830F8D4}, // door 06 + {0x21F, 0, DoorAnimTiles_07, DoorAnimPalettes_830F8DC}, // door 07 + {0x2A5, 0, DoorAnimTiles_08, DoorAnimPalettes_830F8E4}, // door 08 + {0x287, 0, DoorAnimTiles_09, DoorAnimPalettes_830F8F4}, // door 09 + {0x2AC, 0, DoorAnimTiles_10, DoorAnimPalettes_830F934}, // door 10 + {0x3A1, 0, DoorAnimTiles_11, DoorAnimPalettes_830F93C}, // door 11 + {0x2DC, 0, DoorAnimTiles_12, DoorAnimPalettes_830F92C}, // door 12 + {0x225, 0, DoorAnimTiles_13, DoorAnimPalettes_830F924}, // door 13 + {0x1DB, 1, DoorAnimTiles_14, DoorAnimPalettes_830F94C}, // door 14 + {0x246, 0, DoorAnimTiles_15, DoorAnimPalettes_830F8EC}, // door 15 + {0x28E, 0, DoorAnimTiles_16, DoorAnimPalettes_830F944}, // door 16 + {0x2A1, 0, DoorAnimTiles_17, DoorAnimPalettes_830F8FC}, // door 17 + {0x21C, 0, DoorAnimTiles_18, DoorAnimPalettes_830F914}, // door 18 + {0x21E, 0, DoorAnimTiles_19, DoorAnimPalettes_830F91C}, // door 19 + {0x21D, 1, DoorAnimTiles_20, DoorAnimPalettes_830F904}, // door 20 + {0x21A, 0, DoorAnimTiles_21, DoorAnimPalettes_830F90C}, // door 21 + {0x224, 0, DoorAnimTiles_22, DoorAnimPalettes_830F954}, // door 22 + {0x289, 0, DoorAnimTiles_23, DoorAnimPalettes_830F95C}, // door 23 + {0x30C, 1, DoorAnimTiles_24, DoorAnimPalettes_830F964}, // door 24 + {0x32D, 1, DoorAnimTiles_25, DoorAnimPalettes_830F96C}, // door 25 + {0x2ED, 1, DoorAnimTiles_26, DoorAnimPalettes_830F974}, // door 26 + {0x264, 1, DoorAnimTiles_27, DoorAnimPalettes_830F97C}, // door 27 + {0x22B, 0, DoorAnimTiles_28, DoorAnimPalettes_830F984}, // door 28 + {0x2F7, 0, DoorAnimTiles_29, DoorAnimPalettes_830F98C}, // door 29 + {0x297, 0, DoorAnimTiles_30, DoorAnimPalettes_830F994}, // door 30 + {0x285, 1, DoorAnimTiles_31, DoorAnimPalettes_830F99C}, // door 31 + {0x25D, 1, DoorAnimTiles_32, DoorAnimPalettes_830F9A4}, // door 32 + {0x20E, 1, DoorAnimTiles_33, DoorAnimPalettes_830F9AC}, // door 33 + {0, 0, NULL, NULL}, +}; -static void CopyDoorTilesToVram(void *src) +static void CopyDoorTilesToVram(const void *src) { CpuFastSet(src, (void *)(VRAM + 0x7F00), 0x40); } -static void door_build_blockdef(u16 *a, u16 b, u8 *c) +static void door_build_blockdef(u16 *a, u16 b, const u8 *c) { int i; u16 unk; @@ -32,7 +413,7 @@ static void door_build_blockdef(u16 *a, u16 b, u8 *c) } } -static void DrawCurrentDoorAnimFrame(u32 x, u32 y, u8 *c) +static void DrawCurrentDoorAnimFrame(u32 x, u32 y, const u8 *c) { u16 arr[8]; @@ -48,7 +429,7 @@ static void DrawClosedDoorTiles(u32 x, u32 y) CurrentMapDrawMetatileAt(x, y); } -static void DrawDoor(struct DoorGraphics *gfx, struct DoorAnimFrame *frame, u32 x, u32 y) +static void DrawDoor(const struct DoorGraphics *gfx, const struct DoorAnimFrame *frame, u32 x, u32 y) { if (frame->offset == 0xFFFF) DrawClosedDoorTiles(x, y); @@ -96,14 +477,14 @@ static void Task_AnimateDoor(u8 taskId) DestroyTask(taskId); } -static struct DoorAnimFrame *GetLastDoorFrame(struct DoorAnimFrame *frame, void *unused) +static const struct DoorAnimFrame *GetLastDoorFrame(const struct DoorAnimFrame *frame, const void *unused) { while (frame->time != 0) frame++; return frame - 1; } -static struct DoorGraphics *GetDoorGraphics(struct DoorGraphics *gfx, u16 metatileNum) +static const struct DoorGraphics *GetDoorGraphics(const struct DoorGraphics *gfx, u16 metatileNum) { while (gfx->tiles != NULL) { @@ -114,7 +495,7 @@ static struct DoorGraphics *GetDoorGraphics(struct DoorGraphics *gfx, u16 metati return NULL; } -static s8 StartDoorAnimationTask(struct DoorGraphics *gfx, struct DoorAnimFrame *frames, u32 x, u32 y) +static s8 StartDoorAnimationTask(const struct DoorGraphics *gfx, const struct DoorAnimFrame *frames, u32 x, u32 y) { if (FuncIsActiveTask(Task_AnimateDoor) == TRUE) return -1; @@ -136,19 +517,19 @@ static s8 StartDoorAnimationTask(struct DoorGraphics *gfx, struct DoorAnimFrame } } -static void DrawClosedDoor(struct DoorGraphics *unused, u32 x, u32 y) +static void DrawClosedDoor(const struct DoorGraphics *unused, u32 x, u32 y) { DrawClosedDoorTiles(x, y); } -static void DrawOpenedDoor(struct DoorGraphics *gfx, u32 x, u32 y) +static void DrawOpenedDoor(const struct DoorGraphics *gfx, u32 x, u32 y) { gfx = GetDoorGraphics(gfx, MapGridGetMetatileIdAt(x, y)); if (gfx != NULL) DrawDoor(gfx, GetLastDoorFrame(gDoorOpenAnimFrames, gDoorOpenAnimFrames), x, y); } -static s8 StartDoorOpenAnimation(struct DoorGraphics *gfx, u32 x, u32 y) +static s8 StartDoorOpenAnimation(const struct DoorGraphics *gfx, u32 x, u32 y) { gfx = GetDoorGraphics(gfx, MapGridGetMetatileIdAt(x, y)); if (gfx == NULL) @@ -157,7 +538,7 @@ static s8 StartDoorOpenAnimation(struct DoorGraphics *gfx, u32 x, u32 y) return StartDoorAnimationTask(gfx, gDoorOpenAnimFrames, x, y); } -static s8 StartDoorCloseAnimation(struct DoorGraphics *gfx, u32 x, u32 y) +static s8 StartDoorCloseAnimation(const struct DoorGraphics *gfx, u32 x, u32 y) { gfx = GetDoorGraphics(gfx, MapGridGetMetatileIdAt(x, y)); if (gfx == NULL) @@ -166,7 +547,7 @@ static s8 StartDoorCloseAnimation(struct DoorGraphics *gfx, u32 x, u32 y) return StartDoorAnimationTask(gfx, gDoorCloseAnimFrames, x, y); } -static s8 cur_mapdata_get_door_x2_at(struct DoorGraphics *gfx, u32 x, u32 y) +static s8 cur_mapdata_get_door_x2_at(const struct DoorGraphics *gfx, u32 x, u32 y) { gfx = GetDoorGraphics(gfx, MapGridGetMetatileIdAt(x, y)); if (gfx == NULL) -- cgit v1.2.3 From f85dbd0779bdee6e191100d8e0bc53d3c601e8f3 Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Wed, 15 Nov 2017 18:56:27 -0500 Subject: migrate text_window and reset_rtc_screen data to src --- src/engine/reset_rtc_screen.c | 123 +++++++++++++++++++++++++++++++++++++++--- src/engine/text_window.c | 82 +++++++++++++++++++++++++++- src/pokemon/mon_markings.c | 4 +- 3 files changed, 199 insertions(+), 10 deletions(-) (limited to 'src') diff --git a/src/engine/reset_rtc_screen.c b/src/engine/reset_rtc_screen.c index d052992ad..198bffaa7 100644 --- a/src/engine/reset_rtc_screen.c +++ b/src/engine/reset_rtc_screen.c @@ -27,15 +27,126 @@ struct ResetRtcStruct extern u16 gSaveFileStatus; -extern struct ResetRtcStruct gUnknown_08376420[]; -extern struct SpritePalette gUnknown_083764BC; -extern struct SpriteTemplate gSpriteTemplate_83764E8; -extern u8 gUnknown_08376500[]; - void CB2_ResetRtcScreen(void); void VBlankCB_ResetRtcScreen(void); void Task_ResetRtcScreen(u8); +static const struct ResetRtcStruct gUnknown_08376420[5] = +{ + { + .dataIndex = 3, + .minVal = 1, + .maxVal = 9999, + .left = 0, + .right = 2, + .unk8 = 0, + }, + { + .dataIndex = 4, + .minVal = 0, + .maxVal = 23, + .left = 1, + .right = 3, + .unk8 = 0, + }, + { + .dataIndex = 5, + .minVal = 0, + .maxVal = 59, + .left = 2, + .right = 4, + .unk8 = 0, + }, + { + .dataIndex = 6, + .minVal = 0, + .maxVal = 59, + .left = 3, + .right = 5, + .unk8 = 0, + }, + { + .dataIndex = 7, + .minVal = 0, + .maxVal = 0, + .left = 4, + .right = 0, + .unk8 = 6, + }, +}; + +const struct OamData gOamData_837645C = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + .affineParam = 0, +}; + +const u8 gSpriteImage_8376464[] = INCBIN_U8("graphics/unknown_sprites/83764AC/0.4bpp"); +const u8 gSpriteImage_8376484[] = INCBIN_U8("graphics/unknown_sprites/83764AC/1.4bpp"); + +const u16 Palette_3764A4[] = INCBIN_U16("graphics/unknown/83764A4.gbapal"); + +const struct SpriteFrameImage gSpriteImageTable_83764AC[] = +{ + { gSpriteImage_8376464, 0x20 }, + { gSpriteImage_8376484, 0x20 }, +}; + +const struct SpritePalette gUnknown_083764BC = +{ + .data = Palette_3764A4, + .tag = 0x1000, +}; + +const union AnimCmd gSpriteAnim_83764C4[] = +{ + ANIMCMD_FRAME(0, 30), + ANIMCMD_JUMP(0), +}; + +const union AnimCmd gSpriteAnim_83764CC[] = +{ + ANIMCMD_FRAME(0, 158, .vFlip = TRUE), + ANIMCMD_JUMP(0), +}; + +const union AnimCmd gSpriteAnim_83764D4[] = +{ + ANIMCMD_FRAME(1, 30), + ANIMCMD_JUMP(0), +}; + +const union AnimCmd *const gSpriteAnimTable_83764DC[] = +{ + gSpriteAnim_83764C4, + gSpriteAnim_83764CC, + gSpriteAnim_83764D4, +}; + +const struct SpriteTemplate gSpriteTemplate_83764E8 = +{ + .tileTag = 0xFFFF, + .paletteTag = 0x1000, + .oam = &gOamData_837645C, + .anims = gSpriteAnimTable_83764DC, + .images = gSpriteImageTable_83764AC, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +const u8 gUnknown_08376500[] = _(" : "); + void SpriteCB_ResetRtcCusor0(struct Sprite *sprite) { int state = gTasks[sprite->data0].data[2]; @@ -235,7 +346,7 @@ void Task_ResetRtc_1(u8 taskId) { s16 *data = gTasks[taskId].data; u8 selection = data[2]; - struct ResetRtcStruct *selectionInfo = &gUnknown_08376420[selection - 1]; + const struct ResetRtcStruct *selectionInfo = &gUnknown_08376420[selection - 1]; if (gMain.newKeys & B_BUTTON) { diff --git a/src/engine/text_window.c b/src/engine/text_window.c index 9a88789d1..81932650f 100644 --- a/src/engine/text_window.c +++ b/src/engine/text_window.c @@ -18,11 +18,89 @@ static void DrawMessageBox(struct Window *win, u8 left, u8 top, u8 width, u8 hei static u16 sTextWindowBaseTileNum; static u16 sMessageBoxBaseTileNum; -extern const struct FrameGraphics gUnknown_083761F0[20]; +extern const u8 gTextWindowFrame1_Gfx[]; +extern const u8 gTextWindowFrame2_Gfx[]; +extern const u8 gTextWindowFrame3_Gfx[]; +extern const u8 gTextWindowFrame4_Gfx[]; +extern const u8 gTextWindowFrame5_Gfx[]; +extern const u8 gTextWindowFrame6_Gfx[]; +extern const u8 gTextWindowFrame7_Gfx[]; +extern const u8 gTextWindowFrame8_Gfx[]; +extern const u8 gTextWindowFrame9_Gfx[]; +extern const u8 gTextWindowFrame10_Gfx[]; +extern const u8 gTextWindowFrame11_Gfx[]; +extern const u8 gTextWindowFrame12_Gfx[]; +extern const u8 gTextWindowFrame13_Gfx[]; +extern const u8 gTextWindowFrame14_Gfx[]; +extern const u8 gTextWindowFrame15_Gfx[]; +extern const u8 gTextWindowFrame16_Gfx[]; +extern const u8 gTextWindowFrame17_Gfx[]; +extern const u8 gTextWindowFrame18_Gfx[]; +extern const u8 gTextWindowFrame19_Gfx[]; +extern const u8 gTextWindowFrame20_Gfx[]; + +extern const u16 gTextWindowFrame1_Pal[]; +extern const u16 gTextWindowFrame2_Pal[]; +extern const u16 gTextWindowFrame3_Pal[]; +extern const u16 gTextWindowFrame4_Pal[]; +extern const u16 gTextWindowFrame5_Pal[]; +extern const u16 gTextWindowFrame6_Pal[]; +extern const u16 gTextWindowFrame7_Pal[]; +extern const u16 gTextWindowFrame8_Pal[]; +extern const u16 gTextWindowFrame9_Pal[]; +extern const u16 gTextWindowFrame10_Pal[]; +extern const u16 gTextWindowFrame11_Pal[]; +extern const u16 gTextWindowFrame12_Pal[]; +extern const u16 gTextWindowFrame13_Pal[]; +extern const u16 gTextWindowFrame14_Pal[]; +extern const u16 gTextWindowFrame15_Pal[]; +extern const u16 gTextWindowFrame16_Pal[]; +extern const u16 gTextWindowFrame17_Pal[]; +extern const u16 gTextWindowFrame18_Pal[]; +extern const u16 gTextWindowFrame19_Pal[]; +extern const u16 gTextWindowFrame20_Pal[]; -extern const u16 gMessageBoxTilemap[5][7]; extern const u8 gMessageBox_Gfx[]; +static const struct FrameGraphics gUnknown_083761F0[20] = +{ + {gTextWindowFrame1_Gfx, gTextWindowFrame1_Pal}, + {gTextWindowFrame2_Gfx, gTextWindowFrame2_Pal}, + {gTextWindowFrame3_Gfx, gTextWindowFrame3_Pal}, + {gTextWindowFrame4_Gfx, gTextWindowFrame4_Pal}, + {gTextWindowFrame5_Gfx, gTextWindowFrame5_Pal}, + {gTextWindowFrame6_Gfx, gTextWindowFrame6_Pal}, + {gTextWindowFrame7_Gfx, gTextWindowFrame7_Pal}, + {gTextWindowFrame8_Gfx, gTextWindowFrame8_Pal}, + {gTextWindowFrame9_Gfx, gTextWindowFrame9_Pal}, + {gTextWindowFrame10_Gfx, gTextWindowFrame10_Pal}, + {gTextWindowFrame11_Gfx, gTextWindowFrame11_Pal}, + {gTextWindowFrame12_Gfx, gTextWindowFrame12_Pal}, + {gTextWindowFrame13_Gfx, gTextWindowFrame13_Pal}, + {gTextWindowFrame14_Gfx, gTextWindowFrame14_Pal}, + {gTextWindowFrame15_Gfx, gTextWindowFrame15_Pal}, + {gTextWindowFrame16_Gfx, gTextWindowFrame16_Pal}, + {gTextWindowFrame17_Gfx, gTextWindowFrame17_Pal}, + {gTextWindowFrame18_Gfx, gTextWindowFrame18_Pal}, + {gTextWindowFrame19_Gfx, gTextWindowFrame19_Pal}, + {gTextWindowFrame20_Gfx, gTextWindowFrame20_Pal}, +}; + +//static const u16 gMessageBoxTilemap[5][7] = INCBIN_U16("graphics/text_window/message_box_map.bin"); +// 01 00 03 00 04 00 04 00 05 00 06 00 09 00 +// 0B 00 09 00 09 00 09 00 09 00 0B 04 09 00 +// 07 00 09 00 09 00 09 00 09 00 0A 00 09 00 +// 0B 08 09 00 09 00 09 00 09 00 0B 0C 09 00 +// 01 08 03 08 04 08 04 08 05 08 06 08 09 00 +static const u16 gMessageBoxTilemap[5][7] = +{ + {1, 3, 4, 4, 5, 6, 9}, + {11, 9, 9, 9, 9, 0x040B, 9}, + {7, 9, 9, 9, 9, 10, 9}, + {0x080B, 9, 9, 9, 9, 0x0C0B, 9}, + {0x0801, 0x0803, 0x0804, 0x0804, 0x0805, 0x0806, 9}, +}; + u16 SetTextWindowBaseTileNum(u16 baseTileNum) { sTextWindowBaseTileNum = baseTileNum; diff --git a/src/pokemon/mon_markings.c b/src/pokemon/mon_markings.c index 0cad8db59..9ea738c7b 100644 --- a/src/pokemon/mon_markings.c +++ b/src/pokemon/mon_markings.c @@ -24,8 +24,8 @@ struct PokemonMarkMenu /*0x000C*/ struct Sprite *menuWindowSprites[2]; // upper and lower halves of menu window /*0x0014*/ struct Sprite *menuMarkingSprites[4]; /*0x0024*/ struct Sprite *menuTextSprite; - /*0x0028*/ u8 *frameTiles; - /*0x002C*/ u16 *framePalette; + /*0x0028*/ const u8 *frameTiles; + /*0x002C*/ const u16 *framePalette; /*0x0030*/ u8 menuWindowSpriteTiles[0x1000]; /*0x1030*/ u8 filler1030[0x80]; /*0x10B0*/ u8 tileLoadState; -- cgit v1.2.3 From b9aae384345e31e56192d93b65d4f69189cc137c Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Wed, 15 Nov 2017 18:59:13 -0500 Subject: comment --- src/engine/text_window.c | 6 ------ 1 file changed, 6 deletions(-) (limited to 'src') diff --git a/src/engine/text_window.c b/src/engine/text_window.c index 81932650f..c001ddefc 100644 --- a/src/engine/text_window.c +++ b/src/engine/text_window.c @@ -86,12 +86,6 @@ static const struct FrameGraphics gUnknown_083761F0[20] = {gTextWindowFrame20_Gfx, gTextWindowFrame20_Pal}, }; -//static const u16 gMessageBoxTilemap[5][7] = INCBIN_U16("graphics/text_window/message_box_map.bin"); -// 01 00 03 00 04 00 04 00 05 00 06 00 09 00 -// 0B 00 09 00 09 00 09 00 09 00 0B 04 09 00 -// 07 00 09 00 09 00 09 00 09 00 0A 00 09 00 -// 0B 08 09 00 09 00 09 00 09 00 0B 0C 09 00 -// 01 08 03 08 04 08 04 08 05 08 06 08 09 00 static const u16 gMessageBoxTilemap[5][7] = { {1, 3, 4, 4, 5, 6, 9}, -- cgit v1.2.3 From a465fd339c08791d247f6897230cef94a17d8ca4 Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Wed, 15 Nov 2017 23:28:16 -0500 Subject: migrate matsuda debug menu and tileset anim data to src --- src/debug/matsuda_debug_menu.c | 250 +++++++++++++++++++----- src/engine/tileset_anim.c | 425 +++++++++++++++++++++++++++++++++++++---- 2 files changed, 597 insertions(+), 78 deletions(-) (limited to 'src') diff --git a/src/debug/matsuda_debug_menu.c b/src/debug/matsuda_debug_menu.c index 3378e4e0a..dcb6fa2d8 100644 --- a/src/debug/matsuda_debug_menu.c +++ b/src/debug/matsuda_debug_menu.c @@ -41,32 +41,8 @@ extern u16 gUnknown_030041B8; extern struct Window gUnknown_03004210; extern u8 (*gCallback_03004AE8)(void); -extern u8 gUnknown_083C926E[][2]; -extern u8 gUnknown_083C9282[]; -extern const u8 gUnknown_083C928E[][2]; -extern u8 gUnknown_083C9296[]; -extern u8 gUnknown_083C92A8[]; -extern u8 gMatsudaDebugMenu_GoBackText[]; -extern u8 gMatsudaDebugMenu_BattlePointsText[]; -extern u8 gMatsudaDebugMenu_StartText[]; - -extern struct SpritePalette gUnknown_083C92BC; -extern struct SpriteSheet gUnknown_083C92B4; -extern struct SpriteTemplate gSpriteTemplate_83C92CC; -extern void (*gUnknown_083C92E4[][2])(struct Sprite *, s8); -extern u32 gUnknown_083C9400[2]; - - -extern u8 gMatsudaDebugMenu_UnknownByteArray[]; -extern u8* gMatsudaDebugMenuTextList1[]; -extern u8* gMatsudaDebugMenuTextList2[]; -extern u8* gMatsudaDebugMenuTextList3[]; -extern u8 gMatsudaDebugMenuContestTopLeft[][2]; - extern bool8 gReceivedRemoteLinkPlayers; -extern struct MenuAction gMatsudaDebugMenuActions[]; - static bool8 sub_80A9B78(void); static void sub_80A9BE4(u8 taskId); static void sub_80A9C98(u8); @@ -85,6 +61,191 @@ static void sub_80AA5BC(u8); static void sub_80AA614(u8, u8); static void sub_80AAD08(struct Sprite *, s8); +// unused +const u8 gText_Unused83C9150[] = _("テストです"); // "test" +const u8 gMatsudaDebugMenu_ActionContestText[] = _("Contest"); +const u8 gMatsudaDebugMenu_ActionContestResultsText[] = _("Contest results"); +// unused +const u8 gMatsudaDebugMenu_ActionChangePerimeterText[] = _("パラメータへんこう"); // "Change parameter" +// unused +const u8 gMatsudaDebugMenu_ActionChangeMoveText[] = _("わざ へんこう"); // "Change move" +const u8 gMatsudaDebugMenu_ActionContestCommText[] = _("Contest (comm.)"); +const u8 gMatsudaDebugMenu_ActionCommTestText[] = _("Init comm. data"); +const u8 gMatsudaDebugMenu_ActionSetHighScoreText[] = _("Set highest score"); +const u8 gMatsudaDebugMenu_ActionResetHighScoreText[] = _("Reset highest score"); +const u8 gMatsudaDebugMenu_ActionSetAllArtMuseumText[] = _("Set all art museum items"); + +const struct MenuAction gMatsudaDebugMenuActions[] = +{ + {gMatsudaDebugMenu_ActionContestText, MatsudaDebugMenu_Contest}, + {gMatsudaDebugMenu_ActionContestResultsText, MatsudaDebugMenu_ContestResults}, + {gMatsudaDebugMenu_ActionContestCommText, MatsudaDebugMenu_ContestComm}, + {gMatsudaDebugMenu_ActionCommTestText, MatsudaDebugMenu_CommTest}, + {gMatsudaDebugMenu_ActionSetHighScoreText, MatsudaDebugMenu_SetHighScore}, + {gMatsudaDebugMenu_ActionResetHighScoreText, MatsudaDebugMenu_ResetHighScore}, + {gMatsudaDebugMenu_ActionSetAllArtMuseumText, MatsudaDebugMenu_SetArtMuseumItems}, +}; + +const u8 gMatsudaDebugMenu_UnknownByteArray[] = {0xFC, 0x02, 0x0F, 0x00, 0xFF}; +const u8 Unknown_083C922D[] = INCBIN_U8("graphics/unknown/ball.4bpp"); +const u16 Unknown_083C924E[] = INCBIN_U16("graphics/unknown/ball.gbapal"); + +const u8 gUnknown_083C926E[][2] = +{ + {2, 0}, + {17, 0}, + {2, 2}, + {17, 2}, +}; + +const u8 gMatsudaDebugMenuContestTopLeft[][2] = +{ + {0, 6}, + {15, 6}, + {0, 8}, + {15, 8}, + {0, 10}, + {15, 10}, +}; + +const u8 gUnknown_083C9282[] = +{ + // TODO: 2d array? + 7, 6, + 22, 6, + 7, 8, + 22, 8, + 7, 10, + 22, 10, +}; + +const u8 gUnknown_083C928E[][2] = +{ + {2, 14}, + {17, 14}, + {2, 16}, + {17, 16}, +}; + +const u8 gUnknown_083C9296[] = {0x08, 0x80, 0x08, 0x80, 0x10, 0x10, 0x30, 0xA8, 0x30, 0xA8, 0x30, 0xA8, 0x08, 0x80, 0x08, 0x80, 0x10, 0x88}; +const u8 gUnknown_083C92A8[] = {0x08, 0x18, 0x28, 0x38, 0x48, 0x58, 0x78, 0x88, 0x98}; + +const struct SpriteSheet gUnknown_083C92B4[] = {Unknown_083C922D, 32, 0x4B0}; +const struct SpritePalette gUnknown_083C92BC[] = {Unknown_083C924E, 0x4B0}; + +const struct OamData gOamData_83C92C4 = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + .affineParam = 0, +}; + +const struct SpriteTemplate gSpriteTemplate_83C92CC = +{ + .tileTag = 1200, + .paletteTag = 1200, + .oam = &gOamData_83C92C4, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80AA754, +}; + +static void (* const gUnknown_083C92E4[][2])(struct Sprite *, s8) = +{ + {sub_80AA8C8, sub_80AA8D8}, + {sub_80AA8E8, sub_80AA8F8}, + {sub_80AAC5C, sub_80AAC5C}, + {sub_80AA930, sub_80AA974}, + {sub_80AA9B8, sub_80AA9FC}, + {sub_80AAA40, sub_80AAA84}, + {sub_80AAAF0, sub_80AAB30}, + {sub_80AAB70, sub_80AABB0}, + {sub_80AABF0, sub_80AAD44}, +}; + +static const u8 gMatsudaDebugMenu_StartText[] = _("{COLOR CYAN}{HIGHLIGHT RED}"); +static const u8 gMatsudaDebugMenu_StartJapText[] = _("かいし"); // because StartText is only called by StringCopy, this part appears to be unused. +static const u8 gMatsudaDebugMenu_GoBackText[] = _("もどる"); + +#ifdef GERMAN +static const u8 gMatsudaDebugMenu_BattlePointsText[] = _("{COLOR MAGENTA}BP,"); +#else +static const u8 gMatsudaDebugMenu_BattlePointsText[] = _("{COLOR MAGENTA}BP."); +#endif + +static const u8 MatsudaDebugMenuText_Cool[] = _("かっこよさ"); // cool +static const u8 MatsudaDebugMenuText_Cute[] = _("かわいさ"); // cute +static const u8 MatsudaDebugMenuText_Beauty[] = _("うつくしさ"); // beauty +static const u8 MatsudaDebugMenuText_Smart[] = _("かしこさ"); // smart +static const u8 MatsudaDebugMenuText_Tough[] = _("たくましさ"); // tough +static const u8 MatsudaDebugMenuText_Sheen[] = _("けづや"); // sheen + +static const u8 *const gMatsudaDebugMenuTextList1[] = +{ + MatsudaDebugMenuText_Cool, + MatsudaDebugMenuText_Cute, + MatsudaDebugMenuText_Beauty, + MatsudaDebugMenuText_Smart, + MatsudaDebugMenuText_Tough, + MatsudaDebugMenuText_Sheen, +}; + +static const u8 MatsudaDebugMenuText_CoolContest[] = _("かっこよさコンテスト"); +static const u8 MatsudaDebugMenuText_BeautyContest[] = _("うつくしさコンテスト"); +static const u8 MatsudaDebugMenuText_CuteContest[] = _("かわいさコンテスト "); +static const u8 MatsudaDebugMenuText_SmartContest[] = _("かしこさコンテスト "); +static const u8 MatsudaDebugMenuText_ToughContest[] = _("たくましさコンテスト"); + +static const u8 *const gMatsudaDebugMenuTextList2[] = +{ + MatsudaDebugMenuText_CoolContest, + MatsudaDebugMenuText_BeautyContest, + MatsudaDebugMenuText_CuteContest, + MatsudaDebugMenuText_SmartContest, + MatsudaDebugMenuText_ToughContest, +}; + +static const u8 MatsudaDebugMenuText_Fallarbor[] = _("ハジツゲ/ノーマル"); // Fallarbor / Normal +static const u8 MatsudaDebugMenuText_Verdanturf[] = _("シダケ/スーパー "); // Verdanturf / Super +static const u8 MatsudaDebugMenuText_Slateport[] = _("カイナ/ハイパー "); // Slateport / Hyper +static const u8 MatsudaDebugMenuText_Lilycove[] = _("ミナモ/マスター "); // Lilycove / Master + +static const u8 *const gMatsudaDebugMenuTextList3[] = +{ + MatsudaDebugMenuText_Fallarbor, + MatsudaDebugMenuText_Verdanturf, + MatsudaDebugMenuText_Slateport, + MatsudaDebugMenuText_Lilycove, +}; + +static const struct OamData gUnknown_083C9400 = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 1023, + .priority = 0, + .paletteNum = 15, + .affineParam = 0, +}; + u8 unref_sub_80A9B28(void) { MenuZeroFillScreen(); @@ -112,7 +273,7 @@ static bool8 sub_80A9B78(void) } } -s8 MatsudaDebugMenu_ContestResults(void) +u8 MatsudaDebugMenu_ContestResults(void) { BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); CreateTask(sub_80A9BE4, 0xFF); @@ -132,20 +293,20 @@ static void sub_80A9BE4(u8 taskId) } } -s8 MatsudaDebugMenu_Contest(void) +u8 MatsudaDebugMenu_Contest(void) { gIsLinkContest = 0; sub_80AA10C(); return 0; } -s8 MatsudaDebugMenu_ContestComm(void) +u8 MatsudaDebugMenu_ContestComm(void) { sub_80AA10C(); return 0; } -s8 MatsudaDebugMenu_CommTest(void) +u8 MatsudaDebugMenu_CommTest(void) { u8 newTaskId; u8 newTaskId2; @@ -397,8 +558,8 @@ static void sub_80AA10C(void) sub_80AA5E8(gScriptContestRank); sub_8003460(&gMenuWindow, gMatsudaDebugMenu_GoBackText, 0xD6, 0x12, 0x12); sub_8003460(&gMenuWindow, gMatsudaDebugMenu_BattlePointsText, 0xDC, zero, 0xC); - LoadSpriteSheet(&gUnknown_083C92B4); - LoadSpritePalette(&gUnknown_083C92BC); + LoadSpriteSheet(gUnknown_083C92B4); + LoadSpritePalette(gUnknown_083C92BC); sub_80AA280(3); sub_80AA658(3); sub_80AA614(3, zero); @@ -608,7 +769,7 @@ static u8 sub_80AA908(u32 a1, u8 a2, s8 a3) // first param is unused. return val; } -void sub_80AA930(struct Sprite *sprite, u8 var2) +void sub_80AA930(struct Sprite *sprite, s8 var2) { u8 val = sprite->data2; @@ -616,7 +777,7 @@ void sub_80AA930(struct Sprite *sprite, u8 var2) sub_80AA340(sprite->data2); } -void sub_80AA974(struct Sprite *sprite, u8 var2) +void sub_80AA974(struct Sprite *sprite, s8 var2) { u8 val = sprite->data2; @@ -624,7 +785,7 @@ void sub_80AA974(struct Sprite *sprite, u8 var2) sub_80AA388(sprite->data2); } -void sub_80AA9B8(struct Sprite *sprite, u8 var2) +void sub_80AA9B8(struct Sprite *sprite, s8 var2) { u8 val = sprite->data2; @@ -632,7 +793,7 @@ void sub_80AA9B8(struct Sprite *sprite, u8 var2) sub_80AA3D0(sprite->data2); } -void sub_80AA9FC(struct Sprite *sprite, u8 var2) +void sub_80AA9FC(struct Sprite *sprite, s8 var2) { u8 val = sprite->data2; @@ -640,7 +801,7 @@ void sub_80AA9FC(struct Sprite *sprite, u8 var2) sub_80AA418(sprite->data2); } -void sub_80AAA40(struct Sprite *sprite, u8 var2) +void sub_80AAA40(struct Sprite *sprite, s8 var2) { u8 val = sprite->data2; @@ -648,7 +809,7 @@ void sub_80AAA40(struct Sprite *sprite, u8 var2) sub_80AA460(sprite->data2); } -void sub_80AAA84(struct Sprite *sprite, u8 var2) +void sub_80AAA84(struct Sprite *sprite, s8 var2) { u8 val = sprite->data2; @@ -669,7 +830,7 @@ static u16 sub_80AAAC8(u32 a1, u16 a2, s8 a3) // first param is unused. return val; } -void sub_80AAAF0(struct Sprite *sprite, u8 var2) +void sub_80AAAF0(struct Sprite *sprite, s8 var2) { u8 val = sprite->data2; @@ -677,7 +838,7 @@ void sub_80AAAF0(struct Sprite *sprite, u8 var2) sub_80AA4F0(sprite->data2, 0); } -void sub_80AAB30(struct Sprite *sprite, u8 var2) +void sub_80AAB30(struct Sprite *sprite, s8 var2) { u8 val = sprite->data2; @@ -685,7 +846,7 @@ void sub_80AAB30(struct Sprite *sprite, u8 var2) sub_80AA4F0(sprite->data2, 1); } -void sub_80AAB70(struct Sprite *sprite, u8 var2) +void sub_80AAB70(struct Sprite *sprite, s8 var2) { u8 val = sprite->data2; @@ -693,7 +854,7 @@ void sub_80AAB70(struct Sprite *sprite, u8 var2) sub_80AA4F0(sprite->data2, 2); } -void sub_80AABB0(struct Sprite *sprite, u8 var2) +void sub_80AABB0(struct Sprite *sprite, s8 var2) { u8 val = sprite->data2; @@ -1013,16 +1174,14 @@ void sub_80AAF30(void) sub_80B2A7C(0xFE); } -//Don't know size of return type -int MatsudaDebugMenu_SetHighScore(void) +u8 MatsudaDebugMenu_SetHighScore(void) { sub_80AAF30(); CloseMenu(); return 1; } -//Don't know size of return type -int MatsudaDebugMenu_ResetHighScore(void) +u8 MatsudaDebugMenu_ResetHighScore(void) { s32 i; @@ -1037,8 +1196,7 @@ int MatsudaDebugMenu_ResetHighScore(void) return 1; } -//Don't know size of return type -int MatsudaDebugMenu_SetArtMuseumItems(void) +u8 MatsudaDebugMenu_SetArtMuseumItems(void) { s32 i; diff --git a/src/engine/tileset_anim.c b/src/engine/tileset_anim.c index f892e5e9a..abd38edad 100644 --- a/src/engine/tileset_anim.c +++ b/src/engine/tileset_anim.c @@ -1,39 +1,10 @@ #include "global.h" #include "tileset_anim.h" -extern u8 *gTilesetAnimTable_General_0[]; -extern u8 *gTilesetAnimTable_General_1[]; -extern u8 *gTilesetAnimTable_General_2[]; -extern u8 *gTilesetAnimTable_General_3[]; -extern u8 *gTilesetAnimTable_General_4[]; -extern u8 *gTilesetAnimTable_Lavaridge[]; -extern u8 *gTilesetAnimTable_Pacifidlog_0[]; -extern u8 *gTilesetAnimTable_Underwater[]; -extern u8 *gTilesetAnimTable_Pacifidlog_1[]; -extern u8 *gUnknown_0837BAE4[]; -extern u8 *gUnknown_0837BB04[]; -extern u8 *gTilesetAnimTable_Mauville_0A[]; -extern u8 *gTilesetAnimTable_Mauville_1A[]; -extern u8 *gTilesetAnimTable_Mauville_0B[]; -extern u8 *gTilesetAnimTable_Mauville_1B[]; -extern u8 *gUnknown_0837BFA4[]; -extern u8 *gTilesetAnimTable_Rustboro_0[]; -extern u8 *gTilesetAnimTable_Rustboro_1[]; -extern u8 *gTilesetAnimTable_Cave[]; -extern u8 *gUnknown_0837C93C[]; -extern u8 *gTilesetAnimTable_EverGrande[]; -extern u8 *gTilesetAnimTable_Building[]; -extern u8 *gTilesetAnimTable_SootopolisGym_0[]; -extern u8 *gTilesetAnimTable_SootopolisGym_1[]; -extern u8 *gTilesetAnimTable_EliteFour_0[]; -extern u8 *gTilesetAnimTable_EliteFour_1[]; -extern u8 *gTilesetAnimTable_MauvilleGym[]; -extern u8 *gTilesetAnimTable_BikeShop[]; - struct Dma { - void *src; - void *dest; + const void *src; + const void *dest; u16 size; }; @@ -89,13 +60,403 @@ static void sub_807399C(u16); static void sub_8073974(u16); static void sub_80739EC(u16); +static const u8 TilesetAnimTiles_General_0_1[] = INCBIN_U8("data/tilesets/primary/general/anim/0/1.4bpp"); +static const u8 TilesetAnimTiles_General_0_0[] = INCBIN_U8("data/tilesets/primary/general/anim/0/0.4bpp"); +static const u8 TilesetAnimTiles_General_0_2[] = INCBIN_U8("data/tilesets/primary/general/anim/0/2.4bpp"); +asm(".space 32"); + +static const u8 *const gTilesetAnimTable_General_0[] = +{ + TilesetAnimTiles_General_0_0, + TilesetAnimTiles_General_0_1, + TilesetAnimTiles_General_0_0, + TilesetAnimTiles_General_0_2, +}; + +static const u8 TilesetAnimTiles_General_1_0[] = INCBIN_U8("data/tilesets/primary/general/anim/1/0.4bpp"); +static const u8 TilesetAnimTiles_General_1_1[] = INCBIN_U8("data/tilesets/primary/general/anim/1/1.4bpp"); +static const u8 TilesetAnimTiles_General_1_2[] = INCBIN_U8("data/tilesets/primary/general/anim/1/2.4bpp"); +static const u8 TilesetAnimTiles_General_1_3[] = INCBIN_U8("data/tilesets/primary/general/anim/1/3.4bpp"); +static const u8 TilesetAnimTiles_General_1_4[] = INCBIN_U8("data/tilesets/primary/general/anim/1/4.4bpp"); +static const u8 TilesetAnimTiles_General_1_5[] = INCBIN_U8("data/tilesets/primary/general/anim/1/5.4bpp"); +static const u8 TilesetAnimTiles_General_1_6[] = INCBIN_U8("data/tilesets/primary/general/anim/1/6.4bpp"); +static const u8 TilesetAnimTiles_General_1_7[] = INCBIN_U8("data/tilesets/primary/general/anim/1/7.4bpp"); + +static const u8 *const gTilesetAnimTable_General_1[] = +{ + TilesetAnimTiles_General_1_0, + TilesetAnimTiles_General_1_1, + TilesetAnimTiles_General_1_2, + TilesetAnimTiles_General_1_3, + TilesetAnimTiles_General_1_4, + TilesetAnimTiles_General_1_5, + TilesetAnimTiles_General_1_6, + TilesetAnimTiles_General_1_7, +}; + +static const u8 TilesetAnimTiles_General_2_0[] = INCBIN_U8("data/tilesets/primary/general/anim/2/0.4bpp"); +static const u8 TilesetAnimTiles_General_2_1[] = INCBIN_U8("data/tilesets/primary/general/anim/2/1.4bpp"); +static const u8 TilesetAnimTiles_General_2_2[] = INCBIN_U8("data/tilesets/primary/general/anim/2/2.4bpp"); +static const u8 TilesetAnimTiles_General_2_3[] = INCBIN_U8("data/tilesets/primary/general/anim/2/3.4bpp"); +static const u8 TilesetAnimTiles_General_2_4[] = INCBIN_U8("data/tilesets/primary/general/anim/2/4.4bpp"); +static const u8 TilesetAnimTiles_General_2_5[] = INCBIN_U8("data/tilesets/primary/general/anim/2/5.4bpp"); +static const u8 TilesetAnimTiles_General_2_6[] = INCBIN_U8("data/tilesets/primary/general/anim/2/6.4bpp"); + +static const u8 *const gTilesetAnimTable_General_2[] = +{ + TilesetAnimTiles_General_2_0, + TilesetAnimTiles_General_2_1, + TilesetAnimTiles_General_2_2, + TilesetAnimTiles_General_2_3, + TilesetAnimTiles_General_2_4, + TilesetAnimTiles_General_2_5, + TilesetAnimTiles_General_2_6, + TilesetAnimTiles_General_2_0, +}; + +static const u8 TilesetAnimTiles_General_3_0[] = INCBIN_U8("data/tilesets/primary/general/anim/3/0.4bpp"); +static const u8 TilesetAnimTiles_General_3_1[] = INCBIN_U8("data/tilesets/primary/general/anim/3/1.4bpp"); +static const u8 TilesetAnimTiles_General_3_2[] = INCBIN_U8("data/tilesets/primary/general/anim/3/2.4bpp"); +static const u8 TilesetAnimTiles_General_3_3[] = INCBIN_U8("data/tilesets/primary/general/anim/3/3.4bpp"); + +static const u8 *const gTilesetAnimTable_General_3[] = +{ + TilesetAnimTiles_General_3_0, + TilesetAnimTiles_General_3_1, + TilesetAnimTiles_General_3_2, + TilesetAnimTiles_General_3_3, +}; + +static const u8 TilesetAnimTiles_General_4_0[] = INCBIN_U8("data/tilesets/primary/general/anim/4/0.4bpp"); +static const u8 TilesetAnimTiles_General_4_1[] = INCBIN_U8("data/tilesets/primary/general/anim/4/1.4bpp"); +static const u8 TilesetAnimTiles_General_4_2[] = INCBIN_U8("data/tilesets/primary/general/anim/4/2.4bpp"); +static const u8 TilesetAnimTiles_General_4_3[] = INCBIN_U8("data/tilesets/primary/general/anim/4/3.4bpp"); + +static const u8 *const gTilesetAnimTable_General_4[] = +{ + TilesetAnimTiles_General_4_0, + TilesetAnimTiles_General_4_1, + TilesetAnimTiles_General_4_2, + TilesetAnimTiles_General_4_3, +}; + +static const u8 TilesetAnimTiles_Lavaridge_0[] = INCBIN_U8("data/tilesets/secondary/lavaridge/anim/0.4bpp"); +static const u8 TilesetAnimTiles_Lavaridge_1[] = INCBIN_U8("data/tilesets/secondary/lavaridge/anim/1.4bpp"); +static const u8 TilesetAnimTiles_Lavaridge_2[] = INCBIN_U8("data/tilesets/secondary/lavaridge/anim/2.4bpp"); +static const u8 TilesetAnimTiles_Lavaridge_3[] = INCBIN_U8("data/tilesets/secondary/lavaridge/anim/3.4bpp"); + +static const u8 *const gTilesetAnimTable_Lavaridge[] = +{ + TilesetAnimTiles_Lavaridge_0, + TilesetAnimTiles_Lavaridge_1, + TilesetAnimTiles_Lavaridge_2, + TilesetAnimTiles_Lavaridge_3, +}; + +static const u8 TilesetAnimTiles_Pacifidlog_0_0[] = INCBIN_U8("data/tilesets/secondary/pacifidlog/anim/0/0.4bpp"); +static const u8 TilesetAnimTiles_Pacifidlog_0_1[] = INCBIN_U8("data/tilesets/secondary/pacifidlog/anim/0/1.4bpp"); +static const u8 TilesetAnimTiles_Pacifidlog_0_2[] = INCBIN_U8("data/tilesets/secondary/pacifidlog/anim/0/2.4bpp"); + +static const u8 *const gTilesetAnimTable_Pacifidlog_0[] = +{ + TilesetAnimTiles_Pacifidlog_0_0, + TilesetAnimTiles_Pacifidlog_0_1, + TilesetAnimTiles_Pacifidlog_0_2, + TilesetAnimTiles_Pacifidlog_0_1, +}; + +static const u8 TilesetAnimTiles_Underwater_0[] = INCBIN_U8("data/tilesets/secondary/underwater/anim/0.4bpp"); +static const u8 TilesetAnimTiles_Underwater_1[] = INCBIN_U8("data/tilesets/secondary/underwater/anim/1.4bpp"); +static const u8 TilesetAnimTiles_Underwater_2[] = INCBIN_U8("data/tilesets/secondary/underwater/anim/2.4bpp"); +static const u8 TilesetAnimTiles_Underwater_3[] = INCBIN_U8("data/tilesets/secondary/underwater/anim/3.4bpp"); + +static const u8 *const gTilesetAnimTable_Underwater[] = +{ + TilesetAnimTiles_Underwater_0, + TilesetAnimTiles_Underwater_1, + TilesetAnimTiles_Underwater_2, + TilesetAnimTiles_Underwater_3, +}; + +static const u8 TilesetAnimTiles_Pacifidlog_1_0[] = INCBIN_U8("data/tilesets/secondary/pacifidlog/anim/1/0.4bpp"); +static const u8 TilesetAnimTiles_Pacifidlog_1_1[] = INCBIN_U8("data/tilesets/secondary/pacifidlog/anim/1/1.4bpp"); +static const u8 TilesetAnimTiles_Pacifidlog_1_2[] = INCBIN_U8("data/tilesets/secondary/pacifidlog/anim/1/2.4bpp"); +static const u8 TilesetAnimTiles_Pacifidlog_1_3[] = INCBIN_U8("data/tilesets/secondary/pacifidlog/anim/1/3.4bpp"); +static const u8 TilesetAnimTiles_Pacifidlog_1_4[] = INCBIN_U8("data/tilesets/secondary/pacifidlog/anim/1/4.4bpp"); +static const u8 TilesetAnimTiles_Pacifidlog_1_5[] = INCBIN_U8("data/tilesets/secondary/pacifidlog/anim/1/5.4bpp"); +static const u8 TilesetAnimTiles_Pacifidlog_1_6[] = INCBIN_U8("data/tilesets/secondary/pacifidlog/anim/1/6.4bpp"); +static const u8 TilesetAnimTiles_Pacifidlog_1_7[] = INCBIN_U8("data/tilesets/secondary/pacifidlog/anim/1/7.4bpp"); + +static const u8 *const gTilesetAnimTable_Pacifidlog_1[] = +{ + TilesetAnimTiles_Pacifidlog_1_0, + TilesetAnimTiles_Pacifidlog_1_1, + TilesetAnimTiles_Pacifidlog_1_2, + TilesetAnimTiles_Pacifidlog_1_3, + TilesetAnimTiles_Pacifidlog_1_4, + TilesetAnimTiles_Pacifidlog_1_5, + TilesetAnimTiles_Pacifidlog_1_6, + TilesetAnimTiles_Pacifidlog_1_7, +}; + +static const u8 TilesetAnimTiles_Mauville_0_0[] = INCBIN_U8("data/tilesets/secondary/mauville/anim/0/0.4bpp"); +static const u8 TilesetAnimTiles_Mauville_0_1[] = INCBIN_U8("data/tilesets/secondary/mauville/anim/0/1.4bpp"); +static const u8 TilesetAnimTiles_Mauville_0_2[] = INCBIN_U8("data/tilesets/secondary/mauville/anim/0/2.4bpp"); +static const u8 TilesetAnimTiles_Mauville_0_3[] = INCBIN_U8("data/tilesets/secondary/mauville/anim/0/3.4bpp"); +static const u8 TilesetAnimTiles_Mauville_0_4[] = INCBIN_U8("data/tilesets/secondary/mauville/anim/0/4.4bpp"); + +static const u8 TilesetAnimTiles_Mauville_1_0[] = INCBIN_U8("data/tilesets/secondary/mauville/anim/1/0.4bpp"); +static const u8 TilesetAnimTiles_Mauville_1_1[] = INCBIN_U8("data/tilesets/secondary/mauville/anim/1/1.4bpp"); +static const u8 TilesetAnimTiles_Mauville_1_2[] = INCBIN_U8("data/tilesets/secondary/mauville/anim/1/2.4bpp"); +static const u8 TilesetAnimTiles_Mauville_1_3[] = INCBIN_U8("data/tilesets/secondary/mauville/anim/1/3.4bpp"); +static const u8 TilesetAnimTiles_Mauville_1_4[] = INCBIN_U8("data/tilesets/secondary/mauville/anim/1/4.4bpp"); + +static const void *const gUnknown_0837BAE4[] = +{ + (void *)(VRAM + 0x4C00), + (void *)(VRAM + 0x4C80), + (void *)(VRAM + 0x4D00), + (void *)(VRAM + 0x4D80), + (void *)(VRAM + 0x4E00), + (void *)(VRAM + 0x4E80), + (void *)(VRAM + 0x4F00), + (void *)(VRAM + 0x4F80), +}; + +static const void *const gUnknown_0837BB04[] = +{ + (void *)(VRAM + 0x5000), + (void *)(VRAM + 0x5080), + (void *)(VRAM + 0x5100), + (void *)(VRAM + 0x5180), + (void *)(VRAM + 0x5200), + (void *)(VRAM + 0x5280), + (void *)(VRAM + 0x5300), + (void *)(VRAM + 0x5380), +}; + +static const u8 *const gTilesetAnimTable_Mauville_0A[] = +{ + TilesetAnimTiles_Mauville_0_0, + TilesetAnimTiles_Mauville_0_0, + TilesetAnimTiles_Mauville_0_1, + TilesetAnimTiles_Mauville_0_2, + TilesetAnimTiles_Mauville_0_3, + TilesetAnimTiles_Mauville_0_3, + TilesetAnimTiles_Mauville_0_3, + TilesetAnimTiles_Mauville_0_3, + TilesetAnimTiles_Mauville_0_3, + TilesetAnimTiles_Mauville_0_3, + TilesetAnimTiles_Mauville_0_2, + TilesetAnimTiles_Mauville_0_1, +}; + +static const u8 *const gTilesetAnimTable_Mauville_1A[] = +{ + TilesetAnimTiles_Mauville_1_0, + TilesetAnimTiles_Mauville_1_0, + TilesetAnimTiles_Mauville_1_1, + TilesetAnimTiles_Mauville_1_2, + TilesetAnimTiles_Mauville_1_3, + TilesetAnimTiles_Mauville_1_3, + TilesetAnimTiles_Mauville_1_3, + TilesetAnimTiles_Mauville_1_3, + TilesetAnimTiles_Mauville_1_3, + TilesetAnimTiles_Mauville_1_3, + TilesetAnimTiles_Mauville_1_2, + TilesetAnimTiles_Mauville_1_1, +}; + +static const u8 *const gTilesetAnimTable_Mauville_0B[] = +{ + TilesetAnimTiles_Mauville_0_0, + TilesetAnimTiles_Mauville_0_0, + TilesetAnimTiles_Mauville_0_4, + TilesetAnimTiles_Mauville_0_4, +}; + +static const u8 *const gTilesetAnimTable_Mauville_1B[] = +{ + TilesetAnimTiles_Mauville_1_0, + TilesetAnimTiles_Mauville_1_0, + TilesetAnimTiles_Mauville_1_4, + TilesetAnimTiles_Mauville_1_4, +}; + +static const u8 TilesetAnimTiles_Rustboro_0_0[] = INCBIN_U8("data/tilesets/secondary/rustboro/anim/0/0.4bpp"); +static const u8 TilesetAnimTiles_Rustboro_0_1[] = INCBIN_U8("data/tilesets/secondary/rustboro/anim/0/1.4bpp"); +static const u8 TilesetAnimTiles_Rustboro_0_2[] = INCBIN_U8("data/tilesets/secondary/rustboro/anim/0/2.4bpp"); +static const u8 TilesetAnimTiles_Rustboro_0_3[] = INCBIN_U8("data/tilesets/secondary/rustboro/anim/0/3.4bpp"); +static const u8 TilesetAnimTiles_Rustboro_0_4[] = INCBIN_U8("data/tilesets/secondary/rustboro/anim/0/4.4bpp"); +static const u8 TilesetAnimTiles_Rustboro_0_5[] = INCBIN_U8("data/tilesets/secondary/rustboro/anim/0/5.4bpp"); +static const u8 TilesetAnimTiles_Rustboro_0_6[] = INCBIN_U8("data/tilesets/secondary/rustboro/anim/0/6.4bpp"); +static const u8 TilesetAnimTiles_Rustboro_0_7[] = INCBIN_U8("data/tilesets/secondary/rustboro/anim/0/7.4bpp"); + +static const void *const gUnknown_0837BFA4[] = +{ + (void *)(VRAM + 0x5000), + (void *)(VRAM + 0x5080), + (void *)(VRAM + 0x5100), + (void *)(VRAM + 0x5180), + (void *)(VRAM + 0x5200), + (void *)(VRAM + 0x5280), + (void *)(VRAM + 0x5300), + (void *)(VRAM + 0x5380), +}; + +static const u8 *const gTilesetAnimTable_Rustboro_0[] = +{ + TilesetAnimTiles_Rustboro_0_0, + TilesetAnimTiles_Rustboro_0_1, + TilesetAnimTiles_Rustboro_0_2, + TilesetAnimTiles_Rustboro_0_3, + TilesetAnimTiles_Rustboro_0_4, + TilesetAnimTiles_Rustboro_0_5, + TilesetAnimTiles_Rustboro_0_6, + TilesetAnimTiles_Rustboro_0_7, +}; + +static const u8 TilesetAnimTiles_Rustboro_1_0[] = INCBIN_U8("data/tilesets/secondary/rustboro/anim/1/0.4bpp"); +static const u8 TilesetAnimTiles_Rustboro_1_1[] = INCBIN_U8("data/tilesets/secondary/rustboro/anim/1/1.4bpp"); + +static const u8 *const gTilesetAnimTable_Rustboro_1[] = +{ + TilesetAnimTiles_Rustboro_1_0, + TilesetAnimTiles_Rustboro_1_1, +}; + +static const u8 TilesetAnimTiles_Cave_0[] = INCBIN_U8("data/tilesets/secondary/cave/anim/0.4bpp"); +static const u8 TilesetAnimTiles_Cave_1[] = INCBIN_U8("data/tilesets/secondary/cave/anim/1.4bpp"); +static const u8 TilesetAnimTiles_Cave_2[] = INCBIN_U8("data/tilesets/secondary/cave/anim/2.4bpp"); +static const u8 TilesetAnimTiles_Cave_3[] = INCBIN_U8("data/tilesets/secondary/cave/anim/3.4bpp"); +// unused anim tiles for cave +static const u8 TilesetAnimTiles_Cave_4[] = INCBIN_U8("data/tilesets/secondary/cave/anim/unused/0.4bpp"); +static const u8 TilesetAnimTiles_Cave_5[] = INCBIN_U8("data/tilesets/secondary/cave/anim/unused/1.4bpp"); +static const u8 TilesetAnimTiles_Cave_6[] = INCBIN_U8("data/tilesets/secondary/cave/anim/unused/2.4bpp"); +static const u8 TilesetAnimTiles_Cave_7[] = INCBIN_U8("data/tilesets/secondary/cave/anim/unused/3.4bpp"); +asm(".space 32"); + +static const u8 *const gTilesetAnimTable_Cave[] = +{ + TilesetAnimTiles_Cave_0, + TilesetAnimTiles_Cave_1, + TilesetAnimTiles_Cave_2, + TilesetAnimTiles_Cave_3, +}; + +static const u8 TilesetAnimTiles_EverGrande_0[] = INCBIN_U8("data/tilesets/secondary/ever_grande/anim/0.4bpp"); +static const u8 TilesetAnimTiles_EverGrande_1[] = INCBIN_U8("data/tilesets/secondary/ever_grande/anim/1.4bpp"); +static const u8 TilesetAnimTiles_EverGrande_2[] = INCBIN_U8("data/tilesets/secondary/ever_grande/anim/2.4bpp"); +static const u8 TilesetAnimTiles_EverGrande_3[] = INCBIN_U8("data/tilesets/secondary/ever_grande/anim/3.4bpp"); +static const u8 TilesetAnimTiles_EverGrande_4[] = INCBIN_U8("data/tilesets/secondary/ever_grande/anim/4.4bpp"); +static const u8 TilesetAnimTiles_EverGrande_5[] = INCBIN_U8("data/tilesets/secondary/ever_grande/anim/5.4bpp"); +static const u8 TilesetAnimTiles_EverGrande_6[] = INCBIN_U8("data/tilesets/secondary/ever_grande/anim/6.4bpp"); +static const u8 TilesetAnimTiles_EverGrande_7[] = INCBIN_U8("data/tilesets/secondary/ever_grande/anim/7.4bpp"); +asm(".space 32"); + +static const void *const gUnknown_0837C93C[] = +{ + (void *)(VRAM + 0x5C00), + (void *)(VRAM + 0x5C80), + (void *)(VRAM + 0x5D00), + (void *)(VRAM + 0x5D80), + (void *)(VRAM + 0x5E00), + (void *)(VRAM + 0x5E80), + (void *)(VRAM + 0x5F00), + (void *)(VRAM + 0x5F80), +}; + +static const u8 *const gTilesetAnimTable_EverGrande[] = +{ + TilesetAnimTiles_EverGrande_0, + TilesetAnimTiles_EverGrande_1, + TilesetAnimTiles_EverGrande_2, + TilesetAnimTiles_EverGrande_3, + TilesetAnimTiles_EverGrande_4, + TilesetAnimTiles_EverGrande_5, + TilesetAnimTiles_EverGrande_6, + TilesetAnimTiles_EverGrande_7, +}; + +static const u8 TilesetAnimTiles_Building_0[] = INCBIN_U8("data/tilesets/primary/building/anim/0.4bpp"); +static const u8 TilesetAnimTiles_Building_1[] = INCBIN_U8("data/tilesets/primary/building/anim/1.4bpp"); + +static const u8 *const gTilesetAnimTable_Building[] = +{ + TilesetAnimTiles_Building_0, + TilesetAnimTiles_Building_1, +}; + +static const u8 TilesetAnimTiles_SootopolisGym_0_0[] = INCBIN_U8("data/tilesets/secondary/sootopolis_gym/anim/0/0.4bpp"); +static const u8 TilesetAnimTiles_SootopolisGym_0_1[] = INCBIN_U8("data/tilesets/secondary/sootopolis_gym/anim/0/1.4bpp"); +static const u8 TilesetAnimTiles_SootopolisGym_0_2[] = INCBIN_U8("data/tilesets/secondary/sootopolis_gym/anim/0/2.4bpp"); +static const u8 TilesetAnimTiles_SootopolisGym_1_0[] = INCBIN_U8("data/tilesets/secondary/sootopolis_gym/anim/1/0.4bpp"); +static const u8 TilesetAnimTiles_SootopolisGym_1_1[] = INCBIN_U8("data/tilesets/secondary/sootopolis_gym/anim/1/1.4bpp"); +static const u8 TilesetAnimTiles_SootopolisGym_1_2[] = INCBIN_U8("data/tilesets/secondary/sootopolis_gym/anim/1/2.4bpp"); + +static const u8 *const gTilesetAnimTable_SootopolisGym_0[] = +{ + TilesetAnimTiles_SootopolisGym_0_0, + TilesetAnimTiles_SootopolisGym_0_1, + TilesetAnimTiles_SootopolisGym_0_2, +}; + +static const u8 *const gTilesetAnimTable_SootopolisGym_1[] = +{ + TilesetAnimTiles_SootopolisGym_1_0, + TilesetAnimTiles_SootopolisGym_1_1, + TilesetAnimTiles_SootopolisGym_1_2, +}; + +static const u8 TilesetAnimTiles_EliteFour_1_0[] = INCBIN_U8("data/tilesets/secondary/elite_four/anim/1/0.4bpp"); +static const u8 TilesetAnimTiles_EliteFour_1_1[] = INCBIN_U8("data/tilesets/secondary/elite_four/anim/1/1.4bpp"); +static const u8 TilesetAnimTiles_EliteFour_0_0[] = INCBIN_U8("data/tilesets/secondary/elite_four/anim/0/0.4bpp"); +static const u8 TilesetAnimTiles_EliteFour_0_1[] = INCBIN_U8("data/tilesets/secondary/elite_four/anim/0/1.4bpp"); +static const u8 TilesetAnimTiles_EliteFour_0_2[] = INCBIN_U8("data/tilesets/secondary/elite_four/anim/0/2.4bpp"); +static const u8 TilesetAnimTiles_EliteFour_0_3[] = INCBIN_U8("data/tilesets/secondary/elite_four/anim/0/3.4bpp"); +asm(".space 32"); + +static const u8 *const gTilesetAnimTable_EliteFour_0[] = +{ + TilesetAnimTiles_EliteFour_0_0, + TilesetAnimTiles_EliteFour_0_1, + TilesetAnimTiles_EliteFour_0_2, + TilesetAnimTiles_EliteFour_0_3, +}; + +static const u8 *const gTilesetAnimTable_EliteFour_1[] = +{ + TilesetAnimTiles_EliteFour_1_0, + TilesetAnimTiles_EliteFour_1_1, +}; + +static const u8 TilesetAnimTiles_MauvilleGym_0[] = INCBIN_U8("data/tilesets/secondary/mauville_gym/anim/0.4bpp"); +static const u8 TilesetAnimTiles_MauvilleGym_1[] = INCBIN_U8("data/tilesets/secondary/mauville_gym/anim/1.4bpp"); +asm(".space 32"); + +static const u8 *const gTilesetAnimTable_MauvilleGym[] = +{ + TilesetAnimTiles_MauvilleGym_0, + TilesetAnimTiles_MauvilleGym_1, +}; + +static const u8 TilesetAnimTiles_BikeShop_0[] = INCBIN_U8("data/tilesets/secondary/bike_shop/anim/0.4bpp"); +static const u8 TilesetAnimTiles_BikeShop_1[] = INCBIN_U8("data/tilesets/secondary/bike_shop/anim/1.4bpp"); +asm(".space 32"); + +static const u8 *const gTilesetAnimTable_BikeShop[] = +{ + TilesetAnimTiles_BikeShop_0, + TilesetAnimTiles_BikeShop_1, +}; + static void ClearTilesetAnimDmas(void) { gNumTilesetAnimDmas = 0; CpuFill32(0, &gTilesetAnimDmas, sizeof(gTilesetAnimDmas)); } -static void QueueTilesetAnimDma(void *src, void *dest, u16 size) +static void QueueTilesetAnimDma(const void *src, const void *dest, u16 size) { if (gNumTilesetAnimDmas < 20) { -- cgit v1.2.3 From 9bf23faf9d73d4dbe9ba160e89a0cfd4508a2692 Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Thu, 16 Nov 2017 00:22:33 -0500 Subject: migrate fldeff_flash and money data to src --- src/field/fldeff_flash.c | 40 +++++++++++++++++++++++++++++++-------- src/field/money.c | 49 +++++++++++++++++++++++++++++++++++++++++++----- 2 files changed, 76 insertions(+), 13 deletions(-) (limited to 'src') diff --git a/src/field/fldeff_flash.c b/src/field/fldeff_flash.c index 1ee8a8f05..30423a3f9 100644 --- a/src/field/fldeff_flash.c +++ b/src/field/fldeff_flash.c @@ -21,14 +21,6 @@ struct FlashStruct void (*func)(void); }; -extern struct FlashStruct gUnknown_083F7FC4[]; -extern u16 gCaveTransitionPalette_White[]; -extern u16 gCaveTransitionPalette_Black[]; -extern u16 gUnknown_083F808C[]; -extern u16 gUnknown_083F809C[]; -extern u16 gCaveTransitionTilemap[]; -extern u8 gCaveTransitionTiles[]; - extern u8 gLastFieldPokeMenuOpened; extern void (*gUnknown_03005CE4)(void); @@ -46,6 +38,38 @@ void sub_810D00C(u8); void sub_810D028(u8); void sub_810D0C4(u8); void sub_810D128(u8); +void sub_810CFF8(void); +void sub_810CE48(void); + +static const struct FlashStruct gUnknown_083F7FC4[] = +{ + {1, 4, 1, 0, sub_810CFF8}, + {2, 4, 1, 0, sub_810CFF8}, + {3, 4, 1, 0, sub_810CFF8}, + {5, 4, 1, 0, sub_810CFF8}, + {6, 4, 1, 0, sub_810CFF8}, + {7, 4, 1, 0, sub_810CFF8}, + {8, 4, 1, 0, sub_810CFF8}, + {9, 4, 1, 0, sub_810CFF8}, + {4, 1, 0, 1, sub_810CE48}, + {4, 2, 0, 1, sub_810CE48}, + {4, 3, 0, 1, sub_810CE48}, + {4, 5, 0, 1, sub_810CE48}, + {4, 6, 0, 1, sub_810CE48}, + {4, 7, 0, 1, sub_810CE48}, + {4, 8, 0, 1, sub_810CE48}, + {4, 9, 0, 1, sub_810CE48}, + {0, 0, 0, 0, NULL}, +}; + +// TODO: Make these extracted palettes? +static const u16 gCaveTransitionPalette_White[] = {0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF}; +static const u16 gCaveTransitionPalette_Black[] = {0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000}; + +static const u16 gUnknown_083F808C[] = INCBIN_U16("graphics/misc/83F808C.gbapal"); +static const u16 gUnknown_083F809C[] = INCBIN_U16("graphics/misc/83F809C.gbapal"); +static const u16 gCaveTransitionTilemap[] = INCBIN_U16("graphics/misc/cave_transition_map.bin.lz"); +static const u8 gCaveTransitionTiles[] = INCBIN_U8("graphics/misc/cave_transition.4bpp.lz"); bool8 SetUpFieldMove_Flash(void) { diff --git a/src/field/money.c b/src/field/money.c index 5d0f0ae8d..f277ac905 100644 --- a/src/field/money.c +++ b/src/field/money.c @@ -4,6 +4,7 @@ #include "menu.h" #include "sprite.h" #include "string_util.h" +#include "graphics.h" #define SPRITE_TAG_MONEY (0x2722) @@ -11,9 +12,47 @@ extern u16 gSpecialVar_0x8005; static EWRAM_DATA u8 gUnknown_02038734 = 0; -extern const struct CompressedSpriteSheet gUnknown_083CF584; -extern const struct CompressedSpritePalette gUnknown_083CF58C; -extern const struct SpriteTemplate gSpriteTemplate_83CF56C; +static const struct OamData gOamData_83CF558 = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + .affineParam = 0, +}; + +const union AnimCmd gSpriteAnim_83CF560[] = +{ + ANIMCMD_FRAME(0, 0), + ANIMCMD_END +}; + +const union AnimCmd *const gSpriteAnimTable_83CF568[] = +{ + gSpriteAnim_83CF560, +}; + +const struct SpriteTemplate gSpriteTemplate_83CF56C = +{ + .tileTag = 10018, + .paletteTag = 10018, + .oam = &gOamData_83CF558, + .anims = gSpriteAnimTable_83CF568, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +const struct CompressedSpriteSheet gUnknown_083CF584[] = {gMenuMoneyGfx, 256, SPRITE_TAG_MONEY}; +const struct CompressedSpritePalette gUnknown_083CF58C[] = {gMenuMoneyPal, SPRITE_TAG_MONEY}; bool8 IsEnoughMoney(u32 budget, u32 cost) { @@ -239,8 +278,8 @@ void OpenMoneyWindow(u32 amount, u8 x, u8 y) MenuDrawTextWindow(x, y, x + 13, y + 3); UpdateMoneyWindow(amount, x, y); - LoadCompressedObjectPic(&gUnknown_083CF584); - LoadCompressedObjectPalette(&gUnknown_083CF58C); + LoadCompressedObjectPic(gUnknown_083CF584); + LoadCompressedObjectPalette(gUnknown_083CF58C); gUnknown_02038734 = CreateSprite(&gSpriteTemplate_83CF56C, x * 8 + 19, y * 8 + 11, 0); } -- cgit v1.2.3 From bcf6de6ece48b467f20c002d472a82cb8f17a79a Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Thu, 16 Nov 2017 00:24:56 -0500 Subject: remove unnecessary battle_message externs --- src/battle/battle_message.c | 59 --------------------------------------------- 1 file changed, 59 deletions(-) (limited to 'src') diff --git a/src/battle/battle_message.c b/src/battle/battle_message.c index f856355b9..eac92a78d 100644 --- a/src/battle/battle_message.c +++ b/src/battle/battle_message.c @@ -174,65 +174,6 @@ extern u16 gBattlePartyID[4]; extern struct BattleEnigmaBerry gEnigmaBerries[4]; extern u8 gBattleBufferA[4][0x200]; -extern const u8 BattleText_DoubleWantToBattle[]; -extern const u8 BattleText_SingleWantToBattle2[]; -extern const u8 BattleText_SingleWantToBattle1[]; -extern const u8 BattleText_WildAppeared2[]; -extern const u8 BattleText_WildDoubleAppeared[]; -extern const u8 BattleText_WildAppeared3[]; -extern const u8 BattleText_WildAppeared1[]; -extern const u8 BattleText_SentOutSingle11[]; -extern const u8 BattleText_SentOutDouble4[]; -extern const u8 BattleText_SentOutSingle6[]; -extern const u8 BattleText_SentOutDouble3[]; -extern const u8 BattleText_SentOutDouble2[]; -extern const u8 BattleText_SentOutDouble1[]; -extern const u8 BattleText_SentOutSingle3[]; -extern const u8 BattleText_SentOutSingle1[]; -extern const u8 BattleText_ComeBackSingle1[]; -extern const u8 BattleText_ComeBackSingle2[]; -extern const u8 BattleText_ComeBackSingle3[]; -extern const u8 BattleText_ComeBackSingle4[]; -extern const u8 BattleText_WithdrewPoke3[]; -extern const u8 BattleText_WithdrewPoke2[]; -extern const u8 BattleText_WithdrewPoke1[]; -extern const u8 BattleText_SentOutSingle7[]; -extern const u8 BattleText_SentOutSingle8[]; -extern const u8 BattleText_SentOutSingle9[]; -extern const u8 BattleText_SentOutSingle10[]; -extern const u8 BattleText_SentOutSingle5[]; -extern const u8 BattleText_SentOutSingle4[]; -extern const u8 BattleText_SentOutSingle2[]; -extern const u8 BattleText_OpponentUsedMove[]; -extern const u8 BattleText_GotAwaySafely[]; -extern const u8 BattleText_FledDouble[]; -extern const u8 BattleText_FledSingle[]; -extern const u8 BattleText_PlayerDefeatedTrainers[]; -extern const u8 BattleText_PlayerLostTrainers[]; -extern const u8 BattleText_PlayerTiedTrainers[]; -extern const u8 BattleText_PlayerDefeatedTrainer[]; -extern const u8 BattleText_PlayerLostTrainer[]; -extern const u8 BattleText_PlayerTiedTrainer[]; -extern const u8 BattleText_EnigmaBerry[]; -extern const u8 BattleText_Berry[]; -extern const u8 BattleText_Foe[]; -extern const u8 BattleText_Wild[]; -extern const u8 BattleText_Ally3[]; -extern const u8 BattleText_Foe4[]; -extern const u8 BattleText_Foe2[]; -extern const u8 BattleText_Ally[]; -extern const u8 BattleText_Foe3[]; -extern const u8 BattleText_Ally2[]; -extern const u8 BattleText_Someone[]; -extern const u8 BattleText_Lanette[]; -extern const u8 BattleText_Exclamation2[]; -extern const u8 BattleText_Exclamation3[]; -extern const u8 BattleText_Exclamation4[]; -extern const u8 BattleText_Exclamation5[]; -extern const u8 BattleText_Exclamation[]; -extern const u8 BattleText_Format10[]; -extern const u8 BattleText_Format11[]; - extern const u8* const gUnknown_08401674[]; // table of pointers to 'a -TYPE' strings extern const u8* const gUnknown_08400F58[]; // table of pointers to stat strings extern const u8* const gUnknown_08400F78[]; // table of pointers to flavour strings -- cgit v1.2.3 From be716ef9f841589c67f152a90ce5c7c29f7211d8 Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Sat, 18 Nov 2017 20:24:39 -0500 Subject: change Sprite struct to use a data array instead of manual declares. --- src/battle/battle_2.c | 134 +- src/battle/battle_7.c | 10 +- src/battle/battle_anim_807B69C.c | 36 +- src/battle/battle_anim_80A7E7C.c | 124 +- src/battle/battle_controller_linkopponent.c | 46 +- src/battle/battle_controller_linkpartner.c | 46 +- src/battle/battle_controller_opponent.c | 52 +- src/battle/battle_controller_player.c | 48 +- src/battle/battle_controller_safari.c | 2 +- src/battle/battle_controller_wally.c | 34 +- src/battle/battle_interface.c | 146 +- src/battle/battle_transition.c | 86 +- src/battle/pokeball.c | 356 ++--- src/battle/reshow_battle_screen.c | 12 +- src/battle/smokescreen.c | 24 +- src/battle_anim_80CA710.c | 2120 +++++++++++++-------------- src/debug/matsuda_debug_menu.c | 124 +- src/engine/main_menu.c | 6 +- src/engine/naming_screen.c | 110 +- src/engine/reset_rtc_screen.c | 20 +- src/engine/sprite.c | 9 +- src/engine/trade.c | 96 +- src/field/choose_party.c | 4 +- src/field/decoration.c | 66 +- src/field/field_camera.c | 4 +- src/field/field_effect.c | 242 +-- src/field/field_effect_helpers.c | 364 ++--- src/field/field_map_obj.c | 592 ++++---- src/field/field_map_obj_helpers.c | 72 +- src/field/field_tasks.c | 6 +- src/field/field_weather.c | 126 +- src/field/fldeff_cut.c | 22 +- src/field/fldeff_softboiled.c | 8 +- src/field/item_menu.c | 74 +- src/field/menu_helpers.c | 48 +- src/field/overworld.c | 8 +- src/field/party_menu.c | 274 ++-- src/field/pokeblock.c | 16 +- src/field/region_map.c | 42 +- src/field/rotating_gate.c | 12 +- src/field/starter_choose.c | 24 +- src/field/trainer_see.c | 24 +- src/field/use_pokeblock.c | 6 +- src/field/wallclock.c | 72 +- src/pokemon/learn_move.c | 26 +- src/pokemon/mon_markings.c | 8 +- src/pokemon/pokeblock_feed.c | 26 +- src/pokemon/pokedex.c | 86 +- src/pokemon/pokemon_menu.c | 2 +- src/rom_8077ABC.c | 436 +++--- src/scene/berry_blender.c | 110 +- src/scene/credits.c | 118 +- src/scene/egg_hatch.c | 78 +- src/scene/evolution_graphics.c | 80 +- src/scene/evolution_scene.c | 18 +- src/scene/hall_of_fame.c | 30 +- src/scene/intro.c | 686 ++++----- src/scene/intro_credits_graphics.c | 38 +- src/scene/title_screen.c | 38 +- 59 files changed, 3760 insertions(+), 3767 deletions(-) (limited to 'src') diff --git a/src/battle/battle_2.c b/src/battle/battle_2.c index 14afc1537..095482305 100644 --- a/src/battle/battle_2.c +++ b/src/battle/battle_2.c @@ -857,7 +857,7 @@ void sub_800F808(void) void sub_800F828(struct Sprite *sprite) { - sprite->data0 = 0; + sprite->data[0] = 0; sprite->callback = sub_800F838; } @@ -865,42 +865,42 @@ void sub_800F838(struct Sprite *sprite) { u16 *arr = (u16 *)gSharedMem; - switch (sprite->data0) + switch (sprite->data[0]) { case 0: - sprite->data0++; - sprite->data1 = 0; - sprite->data2 = 0x281; - sprite->data3 = 0; - sprite->data4 = 1; + sprite->data[0]++; + sprite->data[1] = 0; + sprite->data[2] = 0x281; + sprite->data[3] = 0; + sprite->data[4] = 1; // fall through case 1: - sprite->data4--; - if (sprite->data4 == 0) + sprite->data[4]--; + if (sprite->data[4] == 0) { s32 i; s32 r2; s32 r0; - sprite->data4 = 2; - r2 = sprite->data1 + sprite->data3 * 32; - r0 = sprite->data2 - sprite->data3 * 32; + sprite->data[4] = 2; + r2 = sprite->data[1] + sprite->data[3] * 32; + r0 = sprite->data[2] - sprite->data[3] * 32; for (i = 0; i < 29; i += 2) { arr[r2 + i] = 0x3D; arr[r0 + i] = 0x3D; } - sprite->data3++; - if (sprite->data3 == 21) + sprite->data[3]++; + if (sprite->data[3] == 21) { - sprite->data0++; - sprite->data1 = 32; + sprite->data[0]++; + sprite->data[1] = 32; } } break; case 2: - sprite->data1--; - if (sprite->data1 == 20) + sprite->data[1]--; + if (sprite->data[1] == 20) SetMainCallback2(sub_800E7C4); break; } @@ -1034,11 +1034,11 @@ void nullsub_36(struct Sprite *sprite) void sub_800FDB0(struct Sprite *sprite) { - if (sprite->data0 != 0) - sprite->pos1.x = sprite->data1 + ((sprite->data2 & 0xFF00) >> 8); + if (sprite->data[0] != 0) + sprite->pos1.x = sprite->data[1] + ((sprite->data[2] & 0xFF00) >> 8); else - sprite->pos1.x = sprite->data1 - ((sprite->data2 & 0xFF00) >> 8); - sprite->data2 += 0x180; + sprite->pos1.x = sprite->data[1] - ((sprite->data[2] & 0xFF00) >> 8); + sprite->data[2] += 0x180; if (sprite->affineAnimEnded) { FreeSpriteTilesByTag(0x2710); @@ -1242,7 +1242,7 @@ void sub_8010278(struct Sprite *sprite) if (sprite->pos2.x == 0) { sprite->callback = sub_80102AC; - PlayCry1(sprite->data2, 25); + PlayCry1(sprite->data[2], 25); } } } @@ -1251,8 +1251,8 @@ void sub_80102AC(struct Sprite *sprite) { if (sprite->animEnded) { - sub_804777C(sprite->data0); - sub_8043DFC(gHealthboxIDs[sprite->data0]); + sub_804777C(sprite->data[0]); + sub_8043DFC(gHealthboxIDs[sprite->data[0]]); sprite->callback = nullsub_37; StartSpriteAnimIfDifferent(sprite, 0); BeginNormalPaletteFade(0x00020000, 0, 10, 0, 0x3DEF); @@ -1265,20 +1265,20 @@ void nullsub_37(struct Sprite *sprite) void unref_sub_801030C(struct Sprite *sprite) { - sprite->data3 = 6; - sprite->data4 = 1; + sprite->data[3] = 6; + sprite->data[4] = 1; sprite->callback = sub_8010320; } void sub_8010320(struct Sprite *sprite) { - sprite->data4--; - if (sprite->data4 == 0) + sprite->data[4]--; + if (sprite->data[4] == 0) { - sprite->data4 = 8; + sprite->data[4] = 8; sprite->invisible ^= 1; - sprite->data3--; - if (sprite->data3 == 0) + sprite->data[3]--; + if (sprite->data[3] == 0) { sprite->invisible = FALSE; sprite->callback = nullsub_37; @@ -1289,14 +1289,14 @@ void sub_8010320(struct Sprite *sprite) void sub_8010384(struct Sprite *sprite) { - u8 r6 = sprite->data0; + u8 r6 = sprite->data[0]; u16 species; u8 yOffset; if (ewram17800[r6].transformedSpecies != 0) species = ewram17800[r6].transformedSpecies; else - species = sprite->data2; + species = sprite->data[2]; GetMonData(&gEnemyParty[gBattlePartyID[r6]], MON_DATA_PERSONALITY); // Unused return value @@ -1326,8 +1326,8 @@ void sub_8010384(struct Sprite *sprite) yOffset = gMonFrontPicCoords[species].y_offset; } - sprite->data3 = 8 - yOffset / 8; - sprite->data4 = 1; + sprite->data[3] = 8 - yOffset / 8; + sprite->data[4] = 1; sprite->callback = sub_8010494; } @@ -1336,13 +1336,13 @@ void sub_8010494(struct Sprite *sprite) s32 i; u8 *dst; - sprite->data4--; - if (sprite->data4 == 0) + sprite->data[4]--; + if (sprite->data[4] == 0) { - sprite->data4 = 2; + sprite->data[4] = 2; sprite->pos2.y += 8; - sprite->data3--; - if (sprite->data3 < 0) + sprite->data[3]--; + if (sprite->data[3] < 0) { FreeSpriteOamMatrix(sprite); DestroySprite(sprite); @@ -1350,35 +1350,35 @@ void sub_8010494(struct Sprite *sprite) else { // this should use a MEMSET_ALT, but *(dst++) wont match with it. - dst = (u8 *)gUnknown_081FAF4C[GetBankIdentity(sprite->data0)] + (gBattleMonForms[sprite->data0] << 11) + (sprite->data3 << 8); + dst = (u8 *)gUnknown_081FAF4C[GetBankIdentity(sprite->data[0])] + (gBattleMonForms[sprite->data[0]] << 11) + (sprite->data[3] << 8); for (i = 0; i < 0x100; i++) *(dst++) = 0; - StartSpriteAnim(sprite, gBattleMonForms[sprite->data0]); + StartSpriteAnim(sprite, gBattleMonForms[sprite->data[0]]); } } } void sub_8010520(struct Sprite *sprite) { - sprite->data3 = 8; - sprite->data4 = sprite->invisible; + sprite->data[3] = 8; + sprite->data[4] = sprite->invisible; sprite->callback = sub_801053C; } void sub_801053C(struct Sprite *sprite) { - sprite->data3--; - if (sprite->data3 == 0) + sprite->data[3]--; + if (sprite->data[3] == 0) { sprite->invisible ^= 1; - sprite->data3 = 8; + sprite->data[3] = 8; } } void sub_8010574(struct Sprite *sprite) { - sprite->invisible = sprite->data4; - sprite->data4 = FALSE; + sprite->invisible = sprite->data[4]; + sprite->data[4] = FALSE; sprite->callback = nullsub_37; } @@ -1395,7 +1395,7 @@ void oac_poke_ally_(struct Sprite *sprite) if (sprite->pos2.x == 0) { sprite->callback = nullsub_86; - sprite->data1 = 0; + sprite->data[1] = 0; } } } @@ -1413,8 +1413,8 @@ void sub_80105EC(struct Sprite *sprite) { if ((gUnknown_02024DE8 & 1) == 0) { - sprite->pos2.x += sprite->data1; - sprite->pos2.y += sprite->data2; + sprite->pos2.x += sprite->data[1]; + sprite->pos2.y += sprite->data[2]; } } @@ -1440,19 +1440,19 @@ void dp11b_obj_instanciate(u8 bank, u8 b, s8 c, s8 d) objectID = gHealthboxIDs[bank]; ewram17810[bank].unk2 = spriteId; ewram17810[bank].unk0_1 = 1; - gSprites[spriteId].data0 = 0x80; + gSprites[spriteId].data[0] = 0x80; } else { objectID = gObjectBankIDs[bank]; ewram17810[bank].unk3 = spriteId; ewram17810[bank].unk0_2 = 1; - gSprites[spriteId].data0 = 0xC0; + gSprites[spriteId].data[0] = 0xC0; } - gSprites[spriteId].data1 = c; - gSprites[spriteId].data2 = d; - gSprites[spriteId].data3 = objectID; - gSprites[spriteId].data4 = b; + gSprites[spriteId].data[1] = c; + gSprites[spriteId].data[2] = d; + gSprites[spriteId].data[3] = objectID; + gSprites[spriteId].data[4] = b; gSprites[objectID].pos2.x = 0; gSprites[objectID].pos2.y = 0; } @@ -1465,7 +1465,7 @@ void dp11b_obj_free(u8 a, u8 b) { if (!ewram17810[a].unk0_1) return; - r4 = gSprites[ewram17810[a].unk2].data3; + r4 = gSprites[ewram17810[a].unk2].data[3]; DestroySprite(&gSprites[ewram17810[a].unk2]); ewram17810[a].unk0_1 = 0; } @@ -1473,7 +1473,7 @@ void dp11b_obj_free(u8 a, u8 b) { if (!ewram17810[a].unk0_2) return; - r4 = gSprites[ewram17810[a].unk3].data3; + r4 = gSprites[ewram17810[a].unk3].data[3]; DestroySprite(&gSprites[ewram17810[a].unk3]); ewram17810[a].unk0_2 = 0; } @@ -1483,16 +1483,16 @@ void dp11b_obj_free(u8 a, u8 b) void objc_dp11b_pingpong(struct Sprite *sprite) { - u8 spriteId = sprite->data3; + u8 spriteId = sprite->data[3]; s32 var; - if (sprite->data4 == 1) - var = sprite->data0; + if (sprite->data[4] == 1) + var = sprite->data[0]; else - var = sprite->data0; + var = sprite->data[0]; - gSprites[spriteId].pos2.y = Sin(var, sprite->data2) + sprite->data2; - sprite->data0 = (sprite->data0 + sprite->data1) & 0xFF; + gSprites[spriteId].pos2.y = Sin(var, sprite->data[2]) + sprite->data[2]; + sprite->data[0] = (sprite->data[0] + sprite->data[1]) & 0xFF; } void nullsub_41(void) diff --git a/src/battle/battle_7.c b/src/battle/battle_7.c index fe1d0b159..8766b5b77 100644 --- a/src/battle/battle_7.c +++ b/src/battle/battle_7.c @@ -86,7 +86,7 @@ void sub_80328A4(struct Sprite *); void sub_80312F0(struct Sprite *sprite) { - u8 spriteId = sprite->data1; + u8 spriteId = sprite->data[1]; if (gSprites[spriteId].affineAnimEnded && !gSprites[spriteId].invisible) { @@ -116,7 +116,7 @@ void sub_80313A0(struct Sprite *sprite) { if (!(gUnknown_02024DE8 & 1)) { - sprite->pos2.x += sprite->data0; + sprite->pos2.x += sprite->data[0]; if (sprite->pos2.x == 0) sprite->callback = SpriteCallbackDummy; } @@ -858,19 +858,19 @@ void sub_80327CC(void) LoadCompressedObjectPic(&gUnknown_081FAF24); r5 = GetBankByPlayerAI(1); ewram17810[r5].unk7 = CreateSprite(&gSpriteTemplate_81FAF34, sub_8077ABC(r5, 0), sub_8077ABC(r5, 1) + 32, 0xC8); - gSprites[ewram17810[r5].unk7].data0 = r5; + gSprites[ewram17810[r5].unk7].data[0] = r5; if (IsDoubleBattle()) { r5 = GetBankByPlayerAI(3); ewram17810[r5].unk7 = CreateSprite(&gSpriteTemplate_81FAF34, sub_8077ABC(r5, 0), sub_8077ABC(r5, 1) + 32, 0xC8); - gSprites[ewram17810[r5].unk7].data0 = r5; + gSprites[ewram17810[r5].unk7].data[0] = r5; } } void sub_80328A4(struct Sprite *sprite) { bool8 invisible = FALSE; - u8 r4 = sprite->data0; + u8 r4 = sprite->data[0]; struct Sprite *r7 = &gSprites[gObjectBankIDs[r4]]; if (!r7->inUse || AnimBankSpriteExists(r4) == 0) diff --git a/src/battle/battle_anim_807B69C.c b/src/battle/battle_anim_807B69C.c index 7fcd1e23f..6c35a85c9 100644 --- a/src/battle/battle_anim_807B69C.c +++ b/src/battle/battle_anim_807B69C.c @@ -86,11 +86,11 @@ u8 unref_sub_807B69C(u8 a, u8 b) for (i = 0; i < 10; i++) { spriteId2 = CreateSprite(&gSpriteTemplate_83931F8, gSprites[spriteId1].pos1.x, gSprites[spriteId1].pos1.y + 32, 0); - gSprites[spriteId2].data0 = i * 51; - gSprites[spriteId2].data1 = -256; + gSprites[spriteId2].data[0] = i * 51; + gSprites[spriteId2].data[1] = -256; gSprites[spriteId2].invisible = TRUE; if (i > 4) - gSprites[spriteId2].data6 = 21; + gSprites[spriteId2].data[6] = 21; } } else @@ -99,14 +99,14 @@ u8 unref_sub_807B69C(u8 a, u8 b) for (i = 0; i < 10; i++) { spriteId2 = CreateSprite(&gSpriteTemplate_83931F8, gSprites[spriteId1].pos1.x, gSprites[spriteId1].pos1.y - 32, 0); - gSprites[spriteId2].data0 = i * 51; - gSprites[spriteId2].data1 = 256; + gSprites[spriteId2].data[0] = i * 51; + gSprites[spriteId2].data[1] = 256; gSprites[spriteId2].invisible = TRUE; if (i > 4) - gSprites[spriteId2].data6 = 21; + gSprites[spriteId2].data[6] = 21; } } - gSprites[spriteId2].data7 = 1; + gSprites[spriteId2].data[7] = 1; return taskId; } @@ -145,7 +145,7 @@ static void sub_807B7E0(u8 taskId) static void sub_807B870(struct Sprite *sprite) { - if (sprite->data6 == 0) + if (sprite->data[6] == 0) { sprite->invisible = FALSE; sprite->callback = sub_807B8A4; @@ -153,25 +153,25 @@ static void sub_807B870(struct Sprite *sprite) } else { - sprite->data6 --; + sprite->data[6] --; } } static void sub_807B8A4(struct Sprite *sprite) { - sprite->pos2.x = Cos(sprite->data0, 32); - sprite->pos2.y = Sin(sprite->data0, 8); - if (sprite->data0 < 128) + sprite->pos2.x = Cos(sprite->data[0], 32); + sprite->pos2.y = Sin(sprite->data[0], 8); + if (sprite->data[0] < 128) sprite->subpriority = 29; else sprite->subpriority = 31; - sprite->data0 = (sprite->data0 + 8) & 0xFF; - sprite->data5 += sprite->data1; - sprite->pos2.y += sprite->data5 >> 8; - sprite->data2++; - if (sprite->data2 == 52) + sprite->data[0] = (sprite->data[0] + 8) & 0xFF; + sprite->data[5] += sprite->data[1]; + sprite->pos2.y += sprite->data[5] >> 8; + sprite->data[2]++; + if (sprite->data[2] == 52) { - if (sprite->data7 != 0) + if (sprite->data[7] != 0) DestroySpriteAndFreeResources(sprite); else DestroySprite(sprite); diff --git a/src/battle/battle_anim_80A7E7C.c b/src/battle/battle_anim_80A7E7C.c index 19ac7143e..a1d916f0f 100644 --- a/src/battle/battle_anim_80A7E7C.c +++ b/src/battle/battle_anim_80A7E7C.c @@ -340,26 +340,26 @@ void sub_80A8530(struct Sprite *sprite) sprite->invisible = TRUE; if (GetBankSide(gBattleAnimBankAttacker)) { - sprite->data1 = -gBattleAnimArgs[1]; + sprite->data[1] = -gBattleAnimArgs[1]; } else { - sprite->data1 = gBattleAnimArgs[1]; + sprite->data[1] = gBattleAnimArgs[1]; } - sprite->data0 = gBattleAnimArgs[0]; - sprite->data2 = 0; - sprite->data3 = gObjectBankIDs[gBattleAnimBankAttacker]; - sprite->data4 = gBattleAnimArgs[0]; - StoreSpriteCallbackInData6(sprite, sub_80A85A4); + sprite->data[0] = gBattleAnimArgs[0]; + sprite->data[2] = 0; + sprite->data[3] = gObjectBankIDs[gBattleAnimBankAttacker]; + sprite->data[4] = gBattleAnimArgs[0]; + StoreSpriteCallbackInData(sprite, sub_80A85A4); sprite->callback = sub_8078458; } static void sub_80A85A4(struct Sprite *sprite) { - sprite->data0 = sprite->data4; - sprite->data1 = -sprite->data1; + sprite->data[0] = sprite->data[4]; + sprite->data[1] = -sprite->data[1]; sprite->callback = sub_8078458; - StoreSpriteCallbackInData6(sprite, move_anim_8072740); + StoreSpriteCallbackInData(sprite, move_anim_8072740); } void sub_80A85C8(struct Sprite *sprite) @@ -367,21 +367,21 @@ void sub_80A85C8(struct Sprite *sprite) u8 spriteId; sprite->invisible = TRUE; spriteId = GetAnimBankSpriteId(gBattleAnimArgs[2]); - sprite->data0 = gBattleAnimArgs[0]; - sprite->data1 = 0; - sprite->data2 = gBattleAnimArgs[1]; - sprite->data3 = spriteId; - sprite->data4 = gBattleAnimArgs[0]; - StoreSpriteCallbackInData6(sprite, sub_80A8614); + sprite->data[0] = gBattleAnimArgs[0]; + sprite->data[1] = 0; + sprite->data[2] = gBattleAnimArgs[1]; + sprite->data[3] = spriteId; + sprite->data[4] = gBattleAnimArgs[0]; + StoreSpriteCallbackInData(sprite, sub_80A8614); sprite->callback = sub_8078458; } void sub_80A8614(struct Sprite *sprite) { - sprite->data0 = sprite->data4; - sprite->data2 = -sprite->data2; + sprite->data[0] = sprite->data[4]; + sprite->data[2] = -sprite->data[2]; sprite->callback = sub_8078458; - StoreSpriteCallbackInData6(sprite, move_anim_8072740); + StoreSpriteCallbackInData(sprite, move_anim_8072740); } void sub_80A8638(struct Sprite *sprite) @@ -396,28 +396,28 @@ void sub_80A8638(struct Sprite *sprite) { spriteId = gObjectBankIDs[gBattleAnimBankTarget]; } - sprite->data0 = gBattleAnimArgs[2]; - sprite->data1 = gSprites[spriteId].pos1.x + gSprites[spriteId].pos2.x; - sprite->data2 = gSprites[spriteId].pos1.x; - sprite->data3 = gSprites[spriteId].pos1.y + gSprites[spriteId].pos2.y; - sprite->data4 = gSprites[spriteId].pos1.y; + sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[1] = gSprites[spriteId].pos1.x + gSprites[spriteId].pos2.x; + sprite->data[2] = gSprites[spriteId].pos1.x; + sprite->data[3] = gSprites[spriteId].pos1.y + gSprites[spriteId].pos2.y; + sprite->data[4] = gSprites[spriteId].pos1.y; something = 0; sub_8078A5C(sprite); - sprite->data3 = something; - sprite->data4 = something; - sprite->data5 = gSprites[spriteId].pos2.x; - sprite->data6 = gSprites[spriteId].pos2.y; + sprite->data[3] = something; + sprite->data[4] = something; + sprite->data[5] = gSprites[spriteId].pos2.x; + sprite->data[6] = gSprites[spriteId].pos2.y; sprite->invisible = TRUE; if (gBattleAnimArgs[1] == 1) { - sprite->data2 = something; + sprite->data[2] = something; } else if (gBattleAnimArgs[1] == 2) { - sprite->data1 = something; + sprite->data[1] = something; } - sprite->data7 = gBattleAnimArgs[1]; - sprite->data7 |= spriteId << 8; + sprite->data[7] = gBattleAnimArgs[1]; + sprite->data[7] |= spriteId << 8; sprite->callback = sub_80A86F4; } @@ -426,10 +426,10 @@ static void sub_80A86F4(struct Sprite *sprite) s8 spriteId; u8 lo; struct Sprite *sprite2; - lo = sprite->data7 & 0xff; - spriteId = sprite->data7 >> 8; + lo = sprite->data[7] & 0xff; + spriteId = sprite->data[7] >> 8; sprite2 = &gSprites[spriteId]; - if (sprite->data0 == 0) + if (sprite->data[0] == 0) { if (lo < 2) { @@ -443,11 +443,11 @@ static void sub_80A86F4(struct Sprite *sprite) } else { - sprite->data0--; - sprite->data3 += sprite->data1; - sprite->data4 += sprite->data2; - sprite2->pos2.x = (s8)(sprite->data3 >> 8) + sprite->data5; - sprite2->pos2.y = (s8)(sprite->data4 >> 8) + sprite->data6; + sprite->data[0]--; + sprite->data[3] += sprite->data[1]; + sprite->data[4] += sprite->data[2]; + sprite2->pos2.x = (s8)(sprite->data[3] >> 8) + sprite->data[5]; + sprite2->pos2.y = (s8)(sprite->data[4] >> 8) + sprite->data[6]; } } @@ -472,17 +472,17 @@ void sub_80A8764(struct Sprite *sprite) gBattleAnimArgs[2] = -gBattleAnimArgs[2]; } } - sprite->data0 = gBattleAnimArgs[4]; - sprite->data1 = gSprites[spriteId].pos1.x; - sprite->data2 = gSprites[spriteId].pos1.x + gBattleAnimArgs[1]; - sprite->data3 = gSprites[spriteId].pos1.y; - sprite->data4 = gSprites[spriteId].pos1.y + gBattleAnimArgs[2]; + sprite->data[0] = gBattleAnimArgs[4]; + sprite->data[1] = gSprites[spriteId].pos1.x; + sprite->data[2] = gSprites[spriteId].pos1.x + gBattleAnimArgs[1]; + sprite->data[3] = gSprites[spriteId].pos1.y; + sprite->data[4] = gSprites[spriteId].pos1.y + gBattleAnimArgs[2]; sub_8078A5C(sprite); - sprite->data3 = 0; - sprite->data4 = 0; - sprite->data5 = spriteId; + sprite->data[3] = 0; + sprite->data[4] = 0; + sprite->data[5] = spriteId; sprite->invisible = TRUE; - StoreSpriteCallbackInData6(sprite, move_anim_8072740); + StoreSpriteCallbackInData(sprite, move_anim_8072740); sprite->callback = sub_80784A8; } @@ -508,23 +508,23 @@ void sub_80A8818(struct Sprite *sprite) gBattleAnimArgs[2] = -gBattleAnimArgs[2]; } } - sprite->data0 = gBattleAnimArgs[4]; - sprite->data1 = gSprites[spriteId].pos1.x + gSprites[spriteId].pos2.x; - sprite->data2 = sprite->data1 + gBattleAnimArgs[1]; - sprite->data3 = gSprites[spriteId].pos1.y + gSprites[spriteId].pos2.y; - sprite->data4 = sprite->data3 + gBattleAnimArgs[2]; + sprite->data[0] = gBattleAnimArgs[4]; + sprite->data[1] = gSprites[spriteId].pos1.x + gSprites[spriteId].pos2.x; + sprite->data[2] = sprite->data[1] + gBattleAnimArgs[1]; + sprite->data[3] = gSprites[spriteId].pos1.y + gSprites[spriteId].pos2.y; + sprite->data[4] = sprite->data[3] + gBattleAnimArgs[2]; sub_8078A5C(sprite); - sprite->data3 = gSprites[spriteId].pos2.x << 8; - sprite->data4 = gSprites[spriteId].pos2.y << 8; - sprite->data5 = spriteId; - sprite->data6 = gBattleAnimArgs[5]; + sprite->data[3] = gSprites[spriteId].pos2.x << 8; + sprite->data[4] = gSprites[spriteId].pos2.y << 8; + sprite->data[5] = spriteId; + sprite->data[6] = gBattleAnimArgs[5]; if (!gBattleAnimArgs[5]) { - StoreSpriteCallbackInData6(sprite, move_anim_8072740); + StoreSpriteCallbackInData(sprite, move_anim_8072740); } else { - StoreSpriteCallbackInData6(sprite, sub_80A88F0); + StoreSpriteCallbackInData(sprite, sub_80A88F0); } sprite->callback = sub_80784A8; } @@ -532,8 +532,8 @@ void sub_80A8818(struct Sprite *sprite) static void sub_80A88F0(struct Sprite *sprite) { - gSprites[sprite->data5].pos2.x = 0; - gSprites[sprite->data5].pos2.y = 0; + gSprites[sprite->data[5]].pos2.x = 0; + gSprites[sprite->data[5]].pos2.y = 0; move_anim_8072740(sprite); } diff --git a/src/battle/battle_controller_linkopponent.c b/src/battle/battle_controller_linkopponent.c index 107c374a0..88043c60d 100644 --- a/src/battle/battle_controller_linkopponent.c +++ b/src/battle/battle_controller_linkopponent.c @@ -72,7 +72,7 @@ extern void sub_8031A6C(u16, u8); extern void sub_80313A0(struct Sprite *); extern void sub_803757C(void); extern void oamt_add_pos2_onto_pos1(); -extern void StoreSpriteCallbackInData6(); +extern void StoreSpriteCallbackInData(); extern void sub_8078B34(struct Sprite *); extern void sub_80375B4(void); extern void sub_8010384(struct Sprite *); @@ -275,7 +275,7 @@ void sub_80375B4(void) if (gSprites[gObjectBankIDs[gActiveBank]].callback == SpriteCallbackDummy) { sub_8031B74(gSprites[gObjectBankIDs[gActiveBank]].oam.affineParam); - gSprites[gObjectBankIDs[gActiveBank]].oam.tileNum = gSprites[gObjectBankIDs[gActiveBank]].data5; + gSprites[gObjectBankIDs[gActiveBank]].oam.tileNum = gSprites[gObjectBankIDs[gActiveBank]].data[5]; FreeSpriteOamMatrix(&gSprites[gObjectBankIDs[gActiveBank]]); DestroySprite(&gSprites[gObjectBankIDs[gActiveBank]]); LinkOpponentBufferExecCompleted(); @@ -443,18 +443,18 @@ void dp01t_0F_4_move_anim(void) { u8 spriteId = gObjectBankIDs[gActiveBank]; - if (gSprites[spriteId].data1 == 32) + if (gSprites[spriteId].data[1] == 32) { - gSprites[spriteId].data1 = 0; + gSprites[spriteId].data[1] = 0; gSprites[spriteId].invisible = FALSE; gDoingBattleAnim = 0; LinkOpponentBufferExecCompleted(); } else { - if (((u16)gSprites[spriteId].data1 % 4) == 0) + if (((u16)gSprites[spriteId].data[1] % 4) == 0) gSprites[spriteId].invisible ^= 1; - gSprites[spriteId].data1++; + gSprites[spriteId].data[1]++; } } @@ -1161,7 +1161,7 @@ void LinkOpponentHandleLoadPokeSprite(void) sub_8077F68(gActiveBank), sub_8079E90(gActiveBank)); gSprites[gObjectBankIDs[gActiveBank]].pos2.x = -240; - gSprites[gObjectBankIDs[gActiveBank]].data0 = gActiveBank; + gSprites[gObjectBankIDs[gActiveBank]].data[0] = gActiveBank; gSprites[gObjectBankIDs[gActiveBank]].oam.paletteNum = gActiveBank; StartSpriteAnim(&gSprites[gObjectBankIDs[gActiveBank]], gBattleMonForms[gActiveBank]); sub_8032984(gActiveBank, GetMonData(&gEnemyParty[gBattlePartyID[gActiveBank]], MON_DATA_SPECIES)); @@ -1190,14 +1190,14 @@ void sub_8039430(u8 a, u8 b) sub_8077ABC(a, 2), sub_8077F68(a), sub_8079E90(a)); - gSprites[gUnknown_0300434C[a]].data1 = gObjectBankIDs[a]; - gSprites[gObjectBankIDs[a]].data0 = a; - gSprites[gObjectBankIDs[a]].data2 = species; + gSprites[gUnknown_0300434C[a]].data[1] = gObjectBankIDs[a]; + gSprites[gObjectBankIDs[a]].data[0] = a; + gSprites[gObjectBankIDs[a]].data[2] = species; gSprites[gObjectBankIDs[a]].oam.paletteNum = a; StartSpriteAnim(&gSprites[gObjectBankIDs[a]], gBattleMonForms[a]); gSprites[gObjectBankIDs[a]].invisible = TRUE; gSprites[gObjectBankIDs[a]].callback = SpriteCallbackDummy; - gSprites[gUnknown_0300434C[a]].data0 = sub_8046400(0, 0xFE); + gSprites[gUnknown_0300434C[a]].data[0] = sub_8046400(0, 0xFE); } void LinkOpponentHandleReturnPokeToBall(void) @@ -1262,9 +1262,9 @@ void LinkOpponentHandleTrainerThrow(void) 176 + xOffset, 40 + 4 * (8 - gTrainerFrontPicCoords[gender].coords), sub_8079E90(gActiveBank)); gSprites[gObjectBankIDs[gActiveBank]].pos2.x = -240; - gSprites[gObjectBankIDs[gActiveBank]].data0 = 2; + gSprites[gObjectBankIDs[gActiveBank]].data[0] = 2; gSprites[gObjectBankIDs[gActiveBank]].oam.paletteNum = IndexOfSpritePaletteTag(gTrainerFrontPicPaletteTable[gender].tag); - gSprites[gObjectBankIDs[gActiveBank]].data5 = gSprites[gObjectBankIDs[gActiveBank]].oam.tileNum; + gSprites[gObjectBankIDs[gActiveBank]].data[5] = gSprites[gObjectBankIDs[gActiveBank]].oam.tileNum; gSprites[gObjectBankIDs[gActiveBank]].oam.tileNum = GetSpriteTileStartByTag(gTrainerFrontPicTable[gender].tag); gSprites[gObjectBankIDs[gActiveBank]].oam.affineParam = gender; gSprites[gObjectBankIDs[gActiveBank]].callback = sub_80313A0; @@ -1279,11 +1279,11 @@ void LinkOpponentHandleTrainerSlide(void) void LinkOpponentHandleTrainerSlideBack(void) { oamt_add_pos2_onto_pos1(&gSprites[gObjectBankIDs[gActiveBank]]); - gSprites[gObjectBankIDs[gActiveBank]].data0 = 35; - gSprites[gObjectBankIDs[gActiveBank]].data2 = 280; - gSprites[gObjectBankIDs[gActiveBank]].data4 = gSprites[gObjectBankIDs[gActiveBank]].pos1.y; + gSprites[gObjectBankIDs[gActiveBank]].data[0] = 35; + gSprites[gObjectBankIDs[gActiveBank]].data[2] = 280; + gSprites[gObjectBankIDs[gActiveBank]].data[4] = gSprites[gObjectBankIDs[gActiveBank]].pos1.y; gSprites[gObjectBankIDs[gActiveBank]].callback = sub_8078B34; - StoreSpriteCallbackInData6(&gSprites[gObjectBankIDs[gActiveBank]], SpriteCallbackDummy); + StoreSpriteCallbackInData(&gSprites[gObjectBankIDs[gActiveBank]], SpriteCallbackDummy); gBattleBankFunc[gActiveBank] = sub_80375B4; } @@ -1581,7 +1581,7 @@ void LinkOpponentHandleHitAnimation(void) else { gDoingBattleAnim = TRUE; - gSprites[gObjectBankIDs[gActiveBank]].data1 = 0; + gSprites[gObjectBankIDs[gActiveBank]].data[1] = 0; sub_8047858(gActiveBank); gBattleBankFunc[gActiveBank] = dp01t_0F_4_move_anim; } @@ -1630,11 +1630,11 @@ void LinkOpponentHandleTrainerBallThrow(void) u8 taskId; oamt_add_pos2_onto_pos1(&gSprites[gObjectBankIDs[gActiveBank]]); - gSprites[gObjectBankIDs[gActiveBank]].data0 = 35; - gSprites[gObjectBankIDs[gActiveBank]].data2 = 280; - gSprites[gObjectBankIDs[gActiveBank]].data4 = gSprites[gObjectBankIDs[gActiveBank]].pos1.y; + gSprites[gObjectBankIDs[gActiveBank]].data[0] = 35; + gSprites[gObjectBankIDs[gActiveBank]].data[2] = 280; + gSprites[gObjectBankIDs[gActiveBank]].data[4] = gSprites[gObjectBankIDs[gActiveBank]].pos1.y; gSprites[gObjectBankIDs[gActiveBank]].callback = sub_8078B34; - StoreSpriteCallbackInData6(&gSprites[gObjectBankIDs[gActiveBank]], sub_803A3A8); + StoreSpriteCallbackInData(&gSprites[gObjectBankIDs[gActiveBank]], sub_803A3A8); taskId = CreateTask(sub_803A2C4, 5); gTasks[taskId].data[0] = gActiveBank; if (ewram17810[gActiveBank].unk0_0) @@ -1671,7 +1671,7 @@ void sub_803A2C4(u8 taskId) void sub_803A3A8(struct Sprite *sprite) { sub_8031B74(sprite->oam.affineParam); - sprite->oam.tileNum = sprite->data5; + sprite->oam.tileNum = sprite->data[5]; FreeSpriteOamMatrix(sprite); DestroySprite(sprite); } diff --git a/src/battle/battle_controller_linkpartner.c b/src/battle/battle_controller_linkpartner.c index 25deebf78..3e6ea4add 100644 --- a/src/battle/battle_controller_linkpartner.c +++ b/src/battle/battle_controller_linkpartner.c @@ -83,7 +83,7 @@ extern void sub_80324BC(); extern u8 sub_8031720(); extern u8 mplay_80342A4(); extern void oamt_add_pos2_onto_pos1(); -extern void StoreSpriteCallbackInData6(); +extern void StoreSpriteCallbackInData(); extern void sub_8078B34(struct Sprite *); extern void sub_80105EC(struct Sprite *); extern s32 sub_803FC34(u16); @@ -400,20 +400,20 @@ void sub_811DFA0(void) void bx_blink_t3(void) { u8 spriteId = gObjectBankIDs[gActiveBank]; - if (gSprites[spriteId].data1 == 32) + if (gSprites[spriteId].data[1] == 32) { - gSprites[spriteId].data1 = 0; + gSprites[spriteId].data[1] = 0; gSprites[spriteId].invisible = FALSE; gDoingBattleAnim = 0; LinkPartnerBufferExecCompleted(); } else { - if ((gSprites[spriteId].data1 % 4) == 0) + if ((gSprites[spriteId].data[1] % 4) == 0) { gSprites[spriteId].invisible ^= 1; } - gSprites[spriteId].data1++; + gSprites[spriteId].data[1]++; } } @@ -1118,7 +1118,7 @@ void LinkPartnerHandleLoadPokeSprite(void) sub_8077F68(gActiveBank), sub_8079E90(gActiveBank)); gSprites[gObjectBankIDs[gActiveBank]].pos2.x = -240; - gSprites[gObjectBankIDs[gActiveBank]].data0 = gActiveBank; + gSprites[gObjectBankIDs[gActiveBank]].data[0] = gActiveBank; gSprites[gObjectBankIDs[gActiveBank]].oam.paletteNum = gActiveBank; StartSpriteAnim(&gSprites[gObjectBankIDs[gActiveBank]], gBattleMonForms[gActiveBank]); gBattleBankFunc[gActiveBank] = sub_811DDE8; @@ -1147,14 +1147,14 @@ void sub_811F864(u8 a, u8 b) sub_8077ABC(a, 2), sub_8077F68(a), sub_8079E90(a)); - gSprites[gUnknown_0300434C[a]].data1 = gObjectBankIDs[a]; - gSprites[gObjectBankIDs[a]].data0 = a; - gSprites[gObjectBankIDs[a]].data2 = species; + gSprites[gUnknown_0300434C[a]].data[1] = gObjectBankIDs[a]; + gSprites[gObjectBankIDs[a]].data[0] = a; + gSprites[gObjectBankIDs[a]].data[2] = species; gSprites[gObjectBankIDs[a]].oam.paletteNum = a; StartSpriteAnim(&gSprites[gObjectBankIDs[a]], gBattleMonForms[a]); gSprites[gObjectBankIDs[a]].invisible = TRUE; gSprites[gObjectBankIDs[a]].callback = SpriteCallbackDummy; - gSprites[gUnknown_0300434C[a]].data0 = sub_8046400(0, 0xFF); + gSprites[gUnknown_0300434C[a]].data[0] = sub_8046400(0, 0xFF); } void LinkPartnerHandleReturnPokeToBall(void) @@ -1219,7 +1219,7 @@ void LinkPartnerHandleTrainerThrow(void) sub_8079E90(gActiveBank)); gSprites[gObjectBankIDs[gActiveBank]].oam.paletteNum = gActiveBank; gSprites[gObjectBankIDs[gActiveBank]].pos2.x = 240; - gSprites[gObjectBankIDs[gActiveBank]].data0 = -2; + gSprites[gObjectBankIDs[gActiveBank]].data[0] = -2; gSprites[gObjectBankIDs[gActiveBank]].callback = sub_80313A0; gBattleBankFunc[gActiveBank] = sub_811DAE4; } @@ -1232,11 +1232,11 @@ void LinkPartnerHandleTrainerSlide(void) void LinkPartnerHandleTrainerSlideBack(void) { oamt_add_pos2_onto_pos1(&gSprites[gObjectBankIDs[gActiveBank]]); - gSprites[gObjectBankIDs[gActiveBank]].data0 = 35; - gSprites[gObjectBankIDs[gActiveBank]].data2 = -40; - gSprites[gObjectBankIDs[gActiveBank]].data4 = gSprites[gObjectBankIDs[gActiveBank]].pos1.y; + gSprites[gObjectBankIDs[gActiveBank]].data[0] = 35; + gSprites[gObjectBankIDs[gActiveBank]].data[2] = -40; + gSprites[gObjectBankIDs[gActiveBank]].data[4] = gSprites[gObjectBankIDs[gActiveBank]].pos1.y; gSprites[gObjectBankIDs[gActiveBank]].callback = sub_8078B34; - StoreSpriteCallbackInData6(&gSprites[gObjectBankIDs[gActiveBank]], SpriteCallbackDummy); + StoreSpriteCallbackInData(&gSprites[gObjectBankIDs[gActiveBank]], SpriteCallbackDummy); gBattleBankFunc[gActiveBank] = sub_811DB1C; } @@ -1253,8 +1253,8 @@ void LinkPartnerHandlecmd10(void) ewram17810[gActiveBank].unk4 = 0; sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); PlaySE12WithPanning(SE_POKE_DEAD, -64); - gSprites[gObjectBankIDs[gActiveBank]].data1 = 0; - gSprites[gObjectBankIDs[gActiveBank]].data2 = 5; + gSprites[gObjectBankIDs[gActiveBank]].data[1] = 0; + gSprites[gObjectBankIDs[gActiveBank]].data[2] = 5; gSprites[gObjectBankIDs[gActiveBank]].callback = sub_80105EC; gBattleBankFunc[gActiveBank] = sub_811DE98; } @@ -1534,7 +1534,7 @@ void LinkPartnerHandleHitAnimation(void) else { gDoingBattleAnim = TRUE; - gSprites[gObjectBankIDs[gActiveBank]].data1 = 0; + gSprites[gObjectBankIDs[gActiveBank]].data[1] = 0; sub_8047858(gActiveBank); gBattleBankFunc[gActiveBank] = bx_blink_t3; } @@ -1584,12 +1584,12 @@ void LinkPartnerHandleTrainerBallThrow(void) u8 taskId; oamt_add_pos2_onto_pos1(&gSprites[gObjectBankIDs[gActiveBank]]); - gSprites[gObjectBankIDs[gActiveBank]].data0 = 50; - gSprites[gObjectBankIDs[gActiveBank]].data2 = -40; - gSprites[gObjectBankIDs[gActiveBank]].data4 = gSprites[gObjectBankIDs[gActiveBank]].pos1.y; + gSprites[gObjectBankIDs[gActiveBank]].data[0] = 50; + gSprites[gObjectBankIDs[gActiveBank]].data[2] = -40; + gSprites[gObjectBankIDs[gActiveBank]].data[4] = gSprites[gObjectBankIDs[gActiveBank]].pos1.y; gSprites[gObjectBankIDs[gActiveBank]].callback = sub_8078B34; - gSprites[gObjectBankIDs[gActiveBank]].data5 = gActiveBank; - StoreSpriteCallbackInData6(&gSprites[gObjectBankIDs[gActiveBank]], sub_8030E38); + gSprites[gObjectBankIDs[gActiveBank]].data[5] = gActiveBank; + StoreSpriteCallbackInData(&gSprites[gObjectBankIDs[gActiveBank]], sub_8030E38); StartSpriteAnim(&gSprites[gObjectBankIDs[gActiveBank]], 1); r4 = AllocSpritePalette(0xD6F9); LoadCompressedPalette( diff --git a/src/battle/battle_controller_opponent.c b/src/battle/battle_controller_opponent.c index 823d6702a..4d4155419 100644 --- a/src/battle/battle_controller_opponent.c +++ b/src/battle/battle_controller_opponent.c @@ -86,7 +86,7 @@ extern void sub_8032B84(void); extern void sub_8078B34(struct Sprite *); extern void sub_8032BBC(void); extern void oamt_add_pos2_onto_pos1(); -extern void StoreSpriteCallbackInData6(); +extern void StoreSpriteCallbackInData(); extern void sub_803311C(void); extern void sub_8010384(struct Sprite *); extern bool8 mplay_80342A4(u8); @@ -295,7 +295,7 @@ void sub_8032BBC(void) if (gSprites[gObjectBankIDs[gActiveBank]].callback == SpriteCallbackDummy) { sub_8031B74(gSprites[gObjectBankIDs[gActiveBank]].oam.affineParam); - gSprites[gObjectBankIDs[gActiveBank]].oam.tileNum = gSprites[gObjectBankIDs[gActiveBank]].data5; + gSprites[gObjectBankIDs[gActiveBank]].oam.tileNum = gSprites[gObjectBankIDs[gActiveBank]].data[5]; FreeSpriteOamMatrix(&gSprites[gObjectBankIDs[gActiveBank]]); DestroySprite(&gSprites[gObjectBankIDs[gActiveBank]]); OpponentBufferExecCompleted(); @@ -447,18 +447,18 @@ void bx_blink_t7(void) { u8 spriteId = gObjectBankIDs[gActiveBank]; - if (gSprites[spriteId].data1 == 32) + if (gSprites[spriteId].data[1] == 32) { - gSprites[spriteId].data1 = 0; + gSprites[spriteId].data[1] = 0; gSprites[spriteId].invisible = FALSE; gDoingBattleAnim = 0; OpponentBufferExecCompleted(); } else { - if (((u16)gSprites[spriteId].data1 % 4) == 0) + if (((u16)gSprites[spriteId].data[1] % 4) == 0) gSprites[spriteId].invisible ^= 1; - gSprites[spriteId].data1++; + gSprites[spriteId].data[1]++; } } @@ -1131,8 +1131,8 @@ void OpponentHandleLoadPokeSprite(void) sub_8077F68(gActiveBank), sub_8079E90(gActiveBank)); gSprites[gObjectBankIDs[gActiveBank]].pos2.x = -240; - gSprites[gObjectBankIDs[gActiveBank]].data0 = gActiveBank; - gSprites[gObjectBankIDs[gActiveBank]].data2 = species; + gSprites[gObjectBankIDs[gActiveBank]].data[0] = gActiveBank; + gSprites[gObjectBankIDs[gActiveBank]].data[2] = species; gSprites[gObjectBankIDs[gActiveBank]].oam.paletteNum = gActiveBank; StartSpriteAnim(&gSprites[gObjectBankIDs[gActiveBank]], gBattleMonForms[gActiveBank]); sub_8032984(gActiveBank, GetMonData(&gEnemyParty[gBattlePartyID[gActiveBank]], MON_DATA_SPECIES)); @@ -1162,14 +1162,14 @@ void sub_803495C(u8 a, u8 b) sub_8077ABC(a, 2), sub_8077F68(a), sub_8079E90(a)); - gSprites[gObjectBankIDs[a]].data0 = a; - gSprites[gObjectBankIDs[a]].data2 = species; - gSprites[gUnknown_0300434C[a]].data1 = gObjectBankIDs[a]; + gSprites[gObjectBankIDs[a]].data[0] = a; + gSprites[gObjectBankIDs[a]].data[2] = species; + gSprites[gUnknown_0300434C[a]].data[1] = gObjectBankIDs[a]; gSprites[gObjectBankIDs[a]].oam.paletteNum = a; StartSpriteAnim(&gSprites[gObjectBankIDs[a]], gBattleMonForms[a]); gSprites[gObjectBankIDs[a]].invisible = TRUE; gSprites[gObjectBankIDs[a]].callback = SpriteCallbackDummy; - gSprites[gUnknown_0300434C[a]].data0 = sub_8046400(0, 0xFE); + gSprites[gUnknown_0300434C[a]].data[0] = sub_8046400(0, 0xFE); } void OpponentHandleReturnPokeToBall(void) @@ -1230,9 +1230,9 @@ void OpponentHandleTrainerThrow(void) 40 + 4 * (8 - gTrainerFrontPicCoords[trainerPicIndex].coords), sub_8079E90(gActiveBank)); gSprites[gObjectBankIDs[gActiveBank]].pos2.x = -240; - gSprites[gObjectBankIDs[gActiveBank]].data0 = 2; + gSprites[gObjectBankIDs[gActiveBank]].data[0] = 2; gSprites[gObjectBankIDs[gActiveBank]].oam.paletteNum = IndexOfSpritePaletteTag(gTrainerFrontPicPaletteTable[trainerPicIndex].tag); - gSprites[gObjectBankIDs[gActiveBank]].data5 = gSprites[gObjectBankIDs[gActiveBank]].oam.tileNum; + gSprites[gObjectBankIDs[gActiveBank]].data[5] = gSprites[gObjectBankIDs[gActiveBank]].oam.tileNum; gSprites[gObjectBankIDs[gActiveBank]].oam.tileNum = GetSpriteTileStartByTag(gTrainerFrontPicTable[trainerPicIndex].tag); gSprites[gObjectBankIDs[gActiveBank]].oam.affineParam = trainerPicIndex; gSprites[gObjectBankIDs[gActiveBank]].callback = sub_80313A0; @@ -1261,9 +1261,9 @@ void OpponentHandleTrainerSlide(void) 0x1E); gSprites[gObjectBankIDs[gActiveBank]].pos2.x = 96; gSprites[gObjectBankIDs[gActiveBank]].pos1.x += 32; - gSprites[gObjectBankIDs[gActiveBank]].data0 = -2; + gSprites[gObjectBankIDs[gActiveBank]].data[0] = -2; gSprites[gObjectBankIDs[gActiveBank]].oam.paletteNum = IndexOfSpritePaletteTag(gTrainerFrontPicPaletteTable[trainerPicIndex].tag); - gSprites[gObjectBankIDs[gActiveBank]].data5 = gSprites[gObjectBankIDs[gActiveBank]].oam.tileNum; + gSprites[gObjectBankIDs[gActiveBank]].data[5] = gSprites[gObjectBankIDs[gActiveBank]].oam.tileNum; gSprites[gObjectBankIDs[gActiveBank]].oam.tileNum = GetSpriteTileStartByTag(gTrainerFrontPicTable[trainerPicIndex].tag); gSprites[gObjectBankIDs[gActiveBank]].oam.affineParam = trainerPicIndex; gSprites[gObjectBankIDs[gActiveBank]].callback = sub_80313A0; @@ -1273,11 +1273,11 @@ void OpponentHandleTrainerSlide(void) void OpponentHandleTrainerSlideBack(void) { oamt_add_pos2_onto_pos1(&gSprites[gObjectBankIDs[gActiveBank]]); - gSprites[gObjectBankIDs[gActiveBank]].data0 = 35; - gSprites[gObjectBankIDs[gActiveBank]].data2 = 280; - gSprites[gObjectBankIDs[gActiveBank]].data4 = gSprites[gObjectBankIDs[gActiveBank]].pos1.y; + gSprites[gObjectBankIDs[gActiveBank]].data[0] = 35; + gSprites[gObjectBankIDs[gActiveBank]].data[2] = 280; + gSprites[gObjectBankIDs[gActiveBank]].data[4] = gSprites[gObjectBankIDs[gActiveBank]].pos1.y; gSprites[gObjectBankIDs[gActiveBank]].callback = sub_8078B34; - StoreSpriteCallbackInData6(&gSprites[gObjectBankIDs[gActiveBank]], SpriteCallbackDummy); + StoreSpriteCallbackInData(&gSprites[gObjectBankIDs[gActiveBank]], SpriteCallbackDummy); gBattleBankFunc[gActiveBank] = sub_8032BBC; } @@ -1853,7 +1853,7 @@ void OpponentHandleHitAnimation(void) else { gDoingBattleAnim = TRUE; - gSprites[gObjectBankIDs[gActiveBank]].data1 = 0; + gSprites[gObjectBankIDs[gActiveBank]].data[1] = 0; sub_8047858(gActiveBank); gBattleBankFunc[gActiveBank] = bx_blink_t7; } @@ -1902,11 +1902,11 @@ void OpponentHandleTrainerBallThrow(void) u8 taskId; oamt_add_pos2_onto_pos1(&gSprites[gObjectBankIDs[gActiveBank]]); - gSprites[gObjectBankIDs[gActiveBank]].data0 = 35; - gSprites[gObjectBankIDs[gActiveBank]].data2 = 280; - gSprites[gObjectBankIDs[gActiveBank]].data4 = gSprites[gObjectBankIDs[gActiveBank]].pos1.y; + gSprites[gObjectBankIDs[gActiveBank]].data[0] = 35; + gSprites[gObjectBankIDs[gActiveBank]].data[2] = 280; + gSprites[gObjectBankIDs[gActiveBank]].data[4] = gSprites[gObjectBankIDs[gActiveBank]].pos1.y; gSprites[gObjectBankIDs[gActiveBank]].callback = sub_8078B34; - StoreSpriteCallbackInData6(&gSprites[gObjectBankIDs[gActiveBank]], sub_8035C10); + StoreSpriteCallbackInData(&gSprites[gObjectBankIDs[gActiveBank]], sub_8035C10); taskId = CreateTask(sub_8035C44, 5); gTasks[taskId].data[0] = gActiveBank; if (ewram17810[gActiveBank].unk0_0) @@ -1918,7 +1918,7 @@ void OpponentHandleTrainerBallThrow(void) void sub_8035C10(struct Sprite *sprite) { sub_8031B74(sprite->oam.affineParam); - sprite->oam.tileNum = sprite->data5; + sprite->oam.tileNum = sprite->data[5]; FreeSpriteOamMatrix(sprite); DestroySprite(sprite); } diff --git a/src/battle/battle_controller_player.c b/src/battle/battle_controller_player.c index f2004c9b7..55fc45f95 100644 --- a/src/battle/battle_controller_player.c +++ b/src/battle/battle_controller_player.c @@ -102,7 +102,7 @@ extern u8 GetBankSide(u8); extern void sub_80E43C0(); extern void oamt_add_pos2_onto_pos1(); extern void sub_8078B34(struct Sprite *); -extern void StoreSpriteCallbackInData6(); +extern void StoreSpriteCallbackInData(); extern void BattleLoadPlayerMonSprite(); extern bool8 IsDoubleBattle(void); extern void sub_802D500(void); @@ -1537,18 +1537,18 @@ void bx_blink_t1(void) { u8 spriteId = gObjectBankIDs[gActiveBank]; - if (gSprites[spriteId].data1 == 32) + if (gSprites[spriteId].data[1] == 32) { - gSprites[spriteId].data1 = 0; + gSprites[spriteId].data[1] = 0; gSprites[spriteId].invisible = FALSE; gDoingBattleAnim = 0; PlayerBufferExecCompleted(); } else { - if (((u16)gSprites[spriteId].data1 % 4) == 0) + if (((u16)gSprites[spriteId].data[1] % 4) == 0) gSprites[spriteId].invisible ^= 1; - gSprites[spriteId].data1++; + gSprites[spriteId].data[1]++; } } @@ -2324,14 +2324,14 @@ void sub_802F934(u8 bank, u8 b) sub_8077ABC(bank, 2), sub_8077F68(bank), sub_8079E90(bank)); - gSprites[gUnknown_0300434C[bank]].data1 = gObjectBankIDs[bank]; - gSprites[gObjectBankIDs[bank]].data0 = bank; - gSprites[gObjectBankIDs[bank]].data2 = species; + gSprites[gUnknown_0300434C[bank]].data[1] = gObjectBankIDs[bank]; + gSprites[gObjectBankIDs[bank]].data[0] = bank; + gSprites[gObjectBankIDs[bank]].data[2] = species; gSprites[gObjectBankIDs[bank]].oam.paletteNum = bank; StartSpriteAnim(&gSprites[gObjectBankIDs[bank]], gBattleMonForms[bank]); gSprites[gObjectBankIDs[bank]].invisible = TRUE; gSprites[gObjectBankIDs[bank]].callback = SpriteCallbackDummy; - gSprites[gUnknown_0300434C[bank]].data0 = sub_8046400(0, 0xFF); + gSprites[gUnknown_0300434C[bank]].data[0] = sub_8046400(0, 0xFF); } void PlayerHandleReturnPokeToBall(void) @@ -2393,7 +2393,7 @@ void PlayerHandleTrainerThrow(void) sub_8079E90(gActiveBank)); gSprites[gObjectBankIDs[gActiveBank]].oam.paletteNum = gActiveBank; gSprites[gObjectBankIDs[gActiveBank]].pos2.x = 240; - gSprites[gObjectBankIDs[gActiveBank]].data0 = -2; + gSprites[gObjectBankIDs[gActiveBank]].data[0] = -2; gSprites[gObjectBankIDs[gActiveBank]].callback = sub_80313A0; gBattleBankFunc[gActiveBank] = sub_802D204; } @@ -2409,7 +2409,7 @@ void PlayerHandleTrainerSlide(void) 30); gSprites[gObjectBankIDs[gActiveBank]].oam.paletteNum = gActiveBank; gSprites[gObjectBankIDs[gActiveBank]].pos2.x = -96; - gSprites[gObjectBankIDs[gActiveBank]].data0 = 2; + gSprites[gObjectBankIDs[gActiveBank]].data[0] = 2; gSprites[gObjectBankIDs[gActiveBank]].callback = sub_80313A0; gBattleBankFunc[gActiveBank] = sub_802D23C; } @@ -2417,11 +2417,11 @@ void PlayerHandleTrainerSlide(void) void PlayerHandleTrainerSlideBack(void) { oamt_add_pos2_onto_pos1(&gSprites[gObjectBankIDs[gActiveBank]]); - gSprites[gObjectBankIDs[gActiveBank]].data0 = 50; - gSprites[gObjectBankIDs[gActiveBank]].data2 = -40; - gSprites[gObjectBankIDs[gActiveBank]].data4 = gSprites[gObjectBankIDs[gActiveBank]].pos1.y; + gSprites[gObjectBankIDs[gActiveBank]].data[0] = 50; + gSprites[gObjectBankIDs[gActiveBank]].data[2] = -40; + gSprites[gObjectBankIDs[gActiveBank]].data[4] = gSprites[gObjectBankIDs[gActiveBank]].pos1.y; gSprites[gObjectBankIDs[gActiveBank]].callback = sub_8078B34; - StoreSpriteCallbackInData6(&gSprites[gObjectBankIDs[gActiveBank]], SpriteCallbackDummy); + StoreSpriteCallbackInData(&gSprites[gObjectBankIDs[gActiveBank]], SpriteCallbackDummy); StartSpriteAnim(&gSprites[gObjectBankIDs[gActiveBank]], 1); gBattleBankFunc[gActiveBank] = sub_802D274; } @@ -2441,8 +2441,8 @@ void PlayerHandlecmd10(void) ewram17810[gActiveBank].unk4 = 0; sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); PlaySE12WithPanning(SE_POKE_DEAD, -64); - gSprites[gObjectBankIDs[gActiveBank]].data1 = 0; - gSprites[gObjectBankIDs[gActiveBank]].data2 = 5; + gSprites[gObjectBankIDs[gActiveBank]].data[1] = 0; + gSprites[gObjectBankIDs[gActiveBank]].data[2] = 5; gSprites[gObjectBankIDs[gActiveBank]].callback = sub_80105EC; gBattleBankFunc[gActiveBank] = sub_802DE10; } @@ -2837,7 +2837,7 @@ void PlayerHandleHitAnimation(void) else { gDoingBattleAnim = 1; - gSprites[gObjectBankIDs[gActiveBank]].data1 = 0; + gSprites[gObjectBankIDs[gActiveBank]].data[1] = 0; sub_8047858(gActiveBank); gBattleBankFunc[gActiveBank] = bx_blink_t1; } @@ -2887,12 +2887,12 @@ void PlayerHandleTrainerBallThrow(void) u8 taskId; oamt_add_pos2_onto_pos1(&gSprites[gObjectBankIDs[gActiveBank]]); - gSprites[gObjectBankIDs[gActiveBank]].data0 = 50; - gSprites[gObjectBankIDs[gActiveBank]].data2 = -40; - gSprites[gObjectBankIDs[gActiveBank]].data4 = gSprites[gObjectBankIDs[gActiveBank]].pos1.y; + gSprites[gObjectBankIDs[gActiveBank]].data[0] = 50; + gSprites[gObjectBankIDs[gActiveBank]].data[2] = -40; + gSprites[gObjectBankIDs[gActiveBank]].data[4] = gSprites[gObjectBankIDs[gActiveBank]].pos1.y; gSprites[gObjectBankIDs[gActiveBank]].callback = sub_8078B34; - gSprites[gObjectBankIDs[gActiveBank]].data5 = gActiveBank; - StoreSpriteCallbackInData6(&gSprites[gObjectBankIDs[gActiveBank]], sub_8030E38); + gSprites[gObjectBankIDs[gActiveBank]].data[5] = gActiveBank; + StoreSpriteCallbackInData(&gSprites[gObjectBankIDs[gActiveBank]], sub_8030E38); StartSpriteAnim(&gSprites[gObjectBankIDs[gActiveBank]], 1); paletteNum = AllocSpritePalette(0xD6F8); LoadCompressedPalette(gTrainerBackPicPaletteTable[gSaveBlock2.playerGender].data, 0x100 + paletteNum * 16, 32); @@ -2907,7 +2907,7 @@ void PlayerHandleTrainerBallThrow(void) void sub_8030E38(struct Sprite *sprite) { - u8 r4 = sprite->data5; + u8 r4 = sprite->data[5]; FreeSpriteOamMatrix(sprite); FreeSpritePaletteByTag(GetSpritePaletteTagByPaletteNum(sprite->oam.paletteNum)); diff --git a/src/battle/battle_controller_safari.c b/src/battle/battle_controller_safari.c index 8a8515fc7..f83eddc9f 100644 --- a/src/battle/battle_controller_safari.c +++ b/src/battle/battle_controller_safari.c @@ -394,7 +394,7 @@ void SafariHandleTrainerThrow(void) 30); gSprites[gObjectBankIDs[gActiveBank]].oam.paletteNum = gActiveBank; gSprites[gObjectBankIDs[gActiveBank]].pos2.x = 240; - gSprites[gObjectBankIDs[gActiveBank]].data0 = -2; + gSprites[gObjectBankIDs[gActiveBank]].data[0] = -2; gSprites[gObjectBankIDs[gActiveBank]].callback = sub_80313A0; gBattleBankFunc[gActiveBank] = sub_812B65C; } diff --git a/src/battle/battle_controller_wally.c b/src/battle/battle_controller_wally.c index 05fd8e583..77aa54873 100644 --- a/src/battle/battle_controller_wally.c +++ b/src/battle/battle_controller_wally.c @@ -90,7 +90,7 @@ extern void sub_80E43C0(); extern void oamt_add_pos2_onto_pos1(); extern void sub_8078B34(struct Sprite *); extern void sub_8030E38(struct Sprite *); -extern void StoreSpriteCallbackInData6(); +extern void StoreSpriteCallbackInData(); extern u8 sub_8046400(); extern u8 sub_8077ABC(); extern u8 sub_8077F68(); @@ -439,18 +439,18 @@ void bx_blink_t5(void) { u8 spriteId = gObjectBankIDs[gActiveBank]; - if (gSprites[spriteId].data1 == 32) + if (gSprites[spriteId].data[1] == 32) { - gSprites[spriteId].data1 = 0; + gSprites[spriteId].data[1] = 0; gSprites[spriteId].invisible = FALSE; gDoingBattleAnim = FALSE; WallyBufferExecCompleted(); } else { - if (((u16)gSprites[spriteId].data1 % 4) == 0) + if (((u16)gSprites[spriteId].data[1] % 4) == 0) gSprites[spriteId].invisible ^= 1; - gSprites[spriteId].data1++; + gSprites[spriteId].data[1]++; } } @@ -1111,7 +1111,7 @@ void WallyHandleTrainerThrow(void) 30); gSprites[gObjectBankIDs[gActiveBank]].oam.paletteNum = gActiveBank; gSprites[gObjectBankIDs[gActiveBank]].pos2.x = 240; - gSprites[gObjectBankIDs[gActiveBank]].data0 = -2; + gSprites[gObjectBankIDs[gActiveBank]].data[0] = -2; gSprites[gObjectBankIDs[gActiveBank]].callback = sub_80313A0; gBattleBankFunc[gActiveBank] = sub_813741C; } @@ -1126,7 +1126,7 @@ void WallyHandleTrainerSlide(void) 30); gSprites[gObjectBankIDs[gActiveBank]].oam.paletteNum = gActiveBank; gSprites[gObjectBankIDs[gActiveBank]].pos2.x = -96; - gSprites[gObjectBankIDs[gActiveBank]].data0 = 2; + gSprites[gObjectBankIDs[gActiveBank]].data[0] = 2; gSprites[gObjectBankIDs[gActiveBank]].callback = sub_80313A0; gBattleBankFunc[gActiveBank] = sub_8137908; } @@ -1440,7 +1440,7 @@ void WallyHandleHitAnimation(void) else { gDoingBattleAnim = 1; - gSprites[gObjectBankIDs[gActiveBank]].data1 = 0; + gSprites[gObjectBankIDs[gActiveBank]].data[1] = 0; sub_8047858(gActiveBank); gBattleBankFunc[gActiveBank] = bx_blink_t5; } @@ -1482,12 +1482,12 @@ void WallyHandleTrainerBallThrow(void) u8 taskId; oamt_add_pos2_onto_pos1(&gSprites[gObjectBankIDs[gActiveBank]]); - gSprites[gObjectBankIDs[gActiveBank]].data0 = 50; - gSprites[gObjectBankIDs[gActiveBank]].data2 = -40; - gSprites[gObjectBankIDs[gActiveBank]].data4 = gSprites[gObjectBankIDs[gActiveBank]].pos1.y; + gSprites[gObjectBankIDs[gActiveBank]].data[0] = 50; + gSprites[gObjectBankIDs[gActiveBank]].data[2] = -40; + gSprites[gObjectBankIDs[gActiveBank]].data[4] = gSprites[gObjectBankIDs[gActiveBank]].pos1.y; gSprites[gObjectBankIDs[gActiveBank]].callback = sub_8078B34; - gSprites[gObjectBankIDs[gActiveBank]].data5 = gActiveBank; - StoreSpriteCallbackInData6(&gSprites[gObjectBankIDs[gActiveBank]], sub_8030E38); + gSprites[gObjectBankIDs[gActiveBank]].data[5] = gActiveBank; + StoreSpriteCallbackInData(&gSprites[gObjectBankIDs[gActiveBank]], sub_8030E38); StartSpriteAnim(&gSprites[gObjectBankIDs[gActiveBank]], 1); paletteNum = AllocSpritePalette(0xD6F8); LoadCompressedPalette(gTrainerBackPicPaletteTable[2].data, 0x100 + paletteNum * 16, 32); @@ -1514,14 +1514,14 @@ void sub_81398BC(u8 bank) sub_8077ABC(bank, 2), sub_8077F68(bank), sub_8079E90(bank)); - gSprites[gUnknown_0300434C[bank]].data1 = gObjectBankIDs[bank]; - gSprites[gObjectBankIDs[bank]].data0 = bank; - gSprites[gObjectBankIDs[bank]].data2 = species; + gSprites[gUnknown_0300434C[bank]].data[1] = gObjectBankIDs[bank]; + gSprites[gObjectBankIDs[bank]].data[0] = bank; + gSprites[gObjectBankIDs[bank]].data[2] = species; gSprites[gObjectBankIDs[bank]].oam.paletteNum = bank; StartSpriteAnim(&gSprites[gObjectBankIDs[bank]], gBattleMonForms[bank]); gSprites[gObjectBankIDs[bank]].invisible = TRUE; gSprites[gObjectBankIDs[bank]].callback = SpriteCallbackDummy; - gSprites[gUnknown_0300434C[bank]].data0 = sub_8046400(0, 0xFF); + gSprites[gUnknown_0300434C[bank]].data[0] = sub_8046400(0, 0xFF); } void sub_8139A2C(u8 taskId) diff --git a/src/battle/battle_interface.c b/src/battle/battle_interface.c index 0bd2e882f..d35440246 100644 --- a/src/battle/battle_interface.c +++ b/src/battle/battle_interface.c @@ -439,7 +439,7 @@ u8 battle_make_oam_normal_battle(u8 a) //_080439F2 gSprites[spriteId1].oam.affineParam = spriteId2; - gSprites[spriteId2].data5 = spriteId1; + gSprites[spriteId2].data[5] = spriteId1; gSprites[spriteId2].callback = sub_8043D5C; } //_08043A28 @@ -451,7 +451,7 @@ u8 battle_make_oam_normal_battle(u8 a) spriteId2 = CreateSpriteAtEnd(&gSpriteTemplate_820A4EC[GetBankIdentity(a) / 2], 240, 160, 1); gSprites[spriteId1].oam.affineParam = spriteId2; - gSprites[spriteId2].data5 = spriteId1; + gSprites[spriteId2].data[5] = spriteId1; gSprites[spriteId2].oam.tileNum += 32; gSprites[spriteId2].callback = sub_8043D5C; sp0 = 1; @@ -463,7 +463,7 @@ u8 battle_make_oam_normal_battle(u8 a) spriteId2 = CreateSpriteAtEnd(&gSpriteTemplate_820A51C[GetBankIdentity(a) / 2], 240, 160, 1); gSprites[spriteId1].oam.affineParam = spriteId2; - gSprites[spriteId2].data5 = spriteId1; + gSprites[spriteId2].data[5] = spriteId1; gSprites[spriteId2].oam.tileNum += 32; gSprites[spriteId2].callback = sub_8043D5C; sp0 = 2; @@ -479,12 +479,12 @@ u8 battle_make_oam_normal_battle(u8 a) sprite->oam.priority = 1; CpuCopy32(sub_8043CDC(1), OBJ_VRAM0 + sprite->oam.tileNum * 32, 64); - gSprites[spriteId1].data5 = spriteId3; - gSprites[spriteId1].data6 = a; + gSprites[spriteId1].data[5] = spriteId3; + gSprites[spriteId1].data[6] = a; gSprites[spriteId1].invisible = TRUE; gSprites[spriteId2].invisible = TRUE; - sprite->data5 = spriteId1; - sprite->data6 = sp0; + sprite->data[5] = spriteId1; + sprite->data[6] = sp0; sprite->invisible = TRUE; return spriteId1; @@ -499,7 +499,7 @@ u8 battle_make_oam_safari_battle(void) gSprites[spriteId2].oam.shape = 0; gSprites[spriteId2].oam.tileNum += 0x40; gSprites[spriteId1].oam.affineParam = spriteId2; - gSprites[spriteId2].data5 = spriteId1; + gSprites[spriteId2].data[5] = spriteId1; gSprites[spriteId2].callback = sub_8043D5C; return spriteId1; } @@ -511,9 +511,9 @@ static const void *sub_8043CDC(u8 a) void sub_8043CEC(struct Sprite *sprite) { - u8 r5 = sprite->data5; + u8 r5 = sprite->data[5]; - switch (sprite->data6) + switch (sprite->data[6]) { case 0: sprite->pos1.x = gSprites[r5].pos1.x + 16; @@ -535,7 +535,7 @@ void sub_8043CEC(struct Sprite *sprite) static void sub_8043D5C(struct Sprite *sprite) { - u8 data5 = sprite->data5; + u8 data5 = sprite->data[5]; sprite->pos1.x = gSprites[data5].pos1.x + 64; sprite->pos1.y = gSprites[data5].pos1.y; @@ -555,14 +555,14 @@ void sub_8043D84(u8 a, u8 b, u32 c, u32 d, u32 e) void sub_8043DB0(u8 a) { gSprites[a].invisible = TRUE; - gSprites[gSprites[a].data5].invisible = TRUE; + gSprites[gSprites[a].data[5]].invisible = TRUE; gSprites[gSprites[a].oam.affineParam].invisible = TRUE; } void sub_8043DFC(u8 a) { gSprites[a].invisible = FALSE; - gSprites[gSprites[a].data5].invisible = FALSE; + gSprites[gSprites[a].data[5]].invisible = FALSE; gSprites[gSprites[a].oam.affineParam].invisible = FALSE; } @@ -575,7 +575,7 @@ static void sub_8043E50(u8 spriteId, s16 x, s16 y) void unref_sub_8043E70(u8 a) { DestroySprite(&gSprites[gSprites[a].oam.affineParam]); - DestroySprite(&gSprites[gSprites[a].data5]); + DestroySprite(&gSprites[gSprites[a].data[5]]); DestroySprite(&gSprites[a]); } @@ -595,7 +595,7 @@ void sub_8043EB4(u8 priority) spriteId1 = gHealthboxIDs[i]; spriteId2 = gSprites[spriteId1].oam.affineParam; - spriteId3 = gSprites[spriteId1].data5; + spriteId3 = gSprites[spriteId1].data[5]; gSprites[spriteId1].oam.priority = priority; gSprites[spriteId2].oam.priority = priority; gSprites[spriteId3].oam.priority = priority; @@ -663,14 +663,14 @@ static void sub_8043FC0(u8 a, u8 b) memcpy(str, gUnknown_0820A81C, sizeof(str)); if (!IsDoubleBattle()) { - if (GetBankSide(gSprites[a].data6) == 0) + if (GetBankSide(gSprites[a].data[6]) == 0) r7 = gUnknown_0820A804; else r7 = gUnknown_0820A80C; } else { - if (GetBankSide(gSprites[a].data6) == 0) + if (GetBankSide(gSprites[a].data[6]) == 0) r7 = gUnknown_0820A814; else r7 = gUnknown_0820A80C; @@ -718,7 +718,7 @@ void sub_80440EC(u8 a, s16 b, u8 c) // TODO: make this a local variable memcpy(str, gUnknown_0820A864, sizeof(str)); - foo = gSprites[a].data6; + foo = gSprites[a].data[6]; if (IsDoubleBattle() == TRUE || GetBankSide(foo) == 1) { @@ -730,7 +730,7 @@ void sub_80440EC(u8 a, s16 b, u8 c) ptr = str + 6; if (c == 0) { - if (GetBankSide(gSprites[a].data6) == 0) + if (GetBankSide(gSprites[a].data[6]) == 0) r4 = gUnknown_0820A83C; else r4 = gUnknown_0820A848; @@ -742,7 +742,7 @@ void sub_80440EC(u8 a, s16 b, u8 c) } else { - if (GetBankSide(gSprites[a].data6) == 0) + if (GetBankSide(gSprites[a].data[6]) == 0) r4 = gUnknown_0820A854; else r4 = gUnknown_0820A85C; @@ -916,7 +916,7 @@ static void sub_8044210(u8 a, s16 b, u8 c) // TODO: make this a local variable memcpy(str, gUnknown_0820A89C, sizeof(str)); - r4 = gSprites[a].data6; + r4 = gSprites[a].data[6]; if ((ewram17800[r4].unk0_4) == 0) return; ptr = str + 6; @@ -938,7 +938,7 @@ static void sub_8044210(u8 a, s16 b, u8 c) CpuCopy32(sub_8043CDC(0x74), OBJ_VRAM0 + (gSprites[a].oam.tileNum + 0x34) * 32, 32); } } - r4 = gSprites[a].data5; + r4 = gSprites[a].data[5]; sub_80034D4(ewram0_9(0), str); for (i = 0; i < r10; i++) { @@ -959,7 +959,7 @@ void sub_8044338(u8 a, struct Pokemon *pkmn) // TODO: make this a local variable memcpy(str, gUnknown_0820A864, sizeof(str)); - r6 = ewram520[GetBankIdentity(gSprites[a].data6)].filler0; + r6 = ewram520[GetBankIdentity(gSprites[a].data[6])].filler0; r8 = 5; nature = GetNature(pkmn); StringCopy(str + 6, gNatureNames[nature]); @@ -994,7 +994,7 @@ void sub_8044338(u8 a, struct Pokemon *pkmn) r6 += 32; } //_08044486 - r5 = gSprites[a].data5; + r5 = gSprites[a].data[5]; ConvertIntToDecimalStringN(str + 6, ewram16089, 1, 2); ConvertIntToDecimalStringN(str + 9, ewram16088, 1, 2); str[5] = 0; @@ -1302,7 +1302,7 @@ void sub_804454C(void) if (r6 == 1) { - spriteId = gSprites[gHealthboxIDs[i]].data5; + spriteId = gSprites[gHealthboxIDs[i]].data[5]; CpuFill32(0, OBJ_VRAM0 + gSprites[spriteId].oam.tileNum * 32, 0x100); sub_8044210(gHealthboxIDs[i], GetMonData(&gPlayerParty[gBattlePartyID[i]], MON_DATA_HP), 0); @@ -1325,7 +1325,7 @@ void sub_804454C(void) } else { - spriteId = gSprites[gHealthboxIDs[i]].data5; + spriteId = gSprites[gHealthboxIDs[i]].data[5]; CpuFill32(0, OBJ_VRAM0 + gSprites[spriteId].oam.tileNum * 32, 0x100); sub_8044210(gHealthboxIDs[i], GetMonData(&gEnemyParty[gBattlePartyID[i]], MON_DATA_HP), 0); @@ -1340,7 +1340,7 @@ void sub_804454C(void) sub_8045A5C(gHealthboxIDs[i], &gEnemyParty[gBattlePartyID[i]], 4); } } - gSprites[gHealthboxIDs[i]].data7 ^= 1; + gSprites[gHealthboxIDs[i]].data[7] ^= 1; } } } @@ -1413,7 +1413,7 @@ u8 sub_8044804(u8 a, const struct BattleInterfaceStruct2 *b, u8 c, u8 d) sp18 = CreateSprite(&gSpriteTemplate_820A7A4[r7], x, y, 10); SetSubspriteTables(&gSprites[sp18], gSubspriteTables_820A6E4); gSprites[sp18].pos2.x = r8; - gSprites[sp18].data0 = r5; + gSprites[sp18].data[0] = r5; if (r7 != 0) { gSprites[sp18].pos1.x -= 96; @@ -1438,22 +1438,22 @@ u8 sub_8044804(u8 a, const struct BattleInterfaceStruct2 *b, u8 c, u8 d) gSprites[sp[i]].pos2.y = 0; } //_080449BE - gSprites[sp[i]].data0 = sp18; + gSprites[sp[i]].data[0] = sp18; if (r7 == 0) { gSprites[sp[i]].pos1.x += 10 * i + 24; - gSprites[sp[i]].data1 = i * 7 + 10; + gSprites[sp[i]].data[1] = i * 7 + 10; gSprites[sp[i]].pos2.x = 120; } //_08044A18 else { gSprites[sp[i]].pos1.x -= 10 * (5 - i) + 24; - gSprites[sp[i]].data1 = (6 - i) * 7 + 10; + gSprites[sp[i]].data[1] = (6 - i) * 7 + 10; gSprites[sp[i]].pos2.x = -120; } //_08044A56 - gSprites[sp[i]].data2 = r7; + gSprites[sp[i]].data[2] = r7; } //_08044A76 if (GetBankSide(a) == 0) @@ -1466,7 +1466,7 @@ u8 sub_8044804(u8 a, const struct BattleInterfaceStruct2 *b, u8 c, u8 d) { //_08044AE6 gSprites[sp[i]].oam.tileNum += 1; - gSprites[sp[i]].data7 = 1; + gSprites[sp[i]].data[7] = 1; // to _08044B52 } else if (b[i].unk0 == 0) @@ -1486,7 +1486,7 @@ u8 sub_8044804(u8 a, const struct BattleInterfaceStruct2 *b, u8 c, u8 d) { //_08044AE6 gSprites[sp[i]].oam.tileNum += 1; - gSprites[sp[i]].data7 = 1; + gSprites[sp[i]].data[7] = 1; // to _08044B52 } else if (b[i].unk0 == 0) @@ -1513,7 +1513,7 @@ u8 sub_8044804(u8 a, const struct BattleInterfaceStruct2 *b, u8 c, u8 d) if (b[i].unk0 == 0xFFFF) { gSprites[sp[5 - i]].oam.tileNum += 1; - gSprites[sp[5 - i]].data7 = 1; + gSprites[sp[5 - i]].data[7] = 1; } else if (b[i].unk0 == 0) { @@ -1529,7 +1529,7 @@ u8 sub_8044804(u8 a, const struct BattleInterfaceStruct2 *b, u8 c, u8 d) if (i >= sp14) { gSprites[sp[5 - i]].oam.tileNum += 1; - gSprites[sp[5 - i]].data7 = 1; + gSprites[sp[5 - i]].data[7] = 1; } else if (b[i].unk0 == 0) { @@ -2174,21 +2174,21 @@ void sub_8044CA0(u8 taskId) { if (GetBankSide(sp8) != 0) { - gSprites[sp[5 - i]].data1 = 7 * i; - gSprites[sp[5 - i]].data3 = 0; - gSprites[sp[5 - i]].data4 = 0; + gSprites[sp[5 - i]].data[1] = 7 * i; + gSprites[sp[5 - i]].data[3] = 0; + gSprites[sp[5 - i]].data[4] = 0; gSprites[sp[5 - i]].callback = sub_8045110; } else { - gSprites[sp[i]].data1 = 7 * i; - gSprites[sp[i]].data3 = 0; - gSprites[sp[i]].data4 = 0; + gSprites[sp[i]].data[1] = 7 * i; + gSprites[sp[i]].data[3] = 0; + gSprites[sp[i]].data[4] = 0; gSprites[sp[i]].callback = sub_8045110; } } - gSprites[r10].data0 /= 2; - gSprites[r10].data1 = 0; + gSprites[r10].data[0] /= 2; + gSprites[r10].data[1] = 0; gSprites[r10].callback = sub_8045048; SetSubspriteTables(&gSprites[r10], gSubspriteTables_820A6EC); gTasks[taskId].func = sub_8044E74; @@ -2272,17 +2272,17 @@ static void sub_8044F70(u8 taskId) void sub_8045030(struct Sprite *sprite) { if (sprite->pos2.x != 0) - sprite->pos2.x += sprite->data0; + sprite->pos2.x += sprite->data[0]; } static void sub_8045048(struct Sprite *sprite) { - sprite->data1 += 32; - if (sprite->data0 > 0) - sprite->pos2.x += sprite->data1 >> 4; + sprite->data[1] += 32; + if (sprite->data[0] > 0) + sprite->pos2.x += sprite->data[1] >> 4; else - sprite->pos2.x -= sprite->data1 >> 4; - sprite->data1 &= 0xF; + sprite->pos2.x -= sprite->data[1] >> 4; + sprite->data[1] &= 0xF; } void sub_804507C(struct Sprite *sprite) @@ -2291,15 +2291,15 @@ void sub_804507C(struct Sprite *sprite) u16 r2; s8 pan; - if (sprite->data1 > 0) + if (sprite->data[1] > 0) { - sprite->data1--; + sprite->data[1]--; return; } - r3 = sprite->data2; - r2 = sprite->data3; + r3 = sprite->data[2]; + r2 = sprite->data[3]; r2 += 56; - sprite->data3 = r2 & 0xFFF0; + sprite->data[3] = r2 & 0xFFF0; if (r3 != 0) { sprite->pos2.x += r2 >> 4; @@ -2317,7 +2317,7 @@ void sub_804507C(struct Sprite *sprite) pan = 63; if (r3 != 0) pan = -64; - if (sprite->data7 != 0) + if (sprite->data[7] != 0) PlaySE2WithPanning(SE_TB_KARA, pan); else PlaySE1WithPanning(SE_TB_KON, pan); @@ -2330,15 +2330,15 @@ static void sub_8045110(struct Sprite *sprite) u8 r0; u16 r2; - if (sprite->data1 > 0) + if (sprite->data[1] > 0) { - sprite->data1--; + sprite->data[1]--; return; } - r0 = sprite->data2; - r2 = sprite->data3; + r0 = sprite->data[2]; + r2 = sprite->data[3]; r2 += 56; - sprite->data3 = r2 & 0xFFF0; + sprite->data[3] = r2 & 0xFFF0; if (r0 != 0) sprite->pos2.x += r2 >> 4; else @@ -2353,7 +2353,7 @@ static void sub_8045110(struct Sprite *sprite) void sub_8045180(struct Sprite *sprite) { - u8 spriteId = sprite->data0; + u8 spriteId = sprite->data[0]; sprite->pos2.x = gSprites[spriteId].pos2.x; sprite->pos2.y = gSprites[spriteId].pos2.y; @@ -2409,7 +2409,7 @@ static void sub_80451A0(u8 a, struct Pokemon *pkmn) ptr[1] = 0x13; ptr[2] = 0x37; ptr[3] = EOS; - ptr = ewram520_2 + GetBankIdentity(gSprites[a].data6) * 0x180; + ptr = ewram520_2 + GetBankIdentity(gSprites[a].data[6]) * 0x180; sub_80034D4(ptr, gDisplayedStringBattle); i = 0; @@ -2446,7 +2446,7 @@ static void sub_80451A0(u8 a, struct Pokemon *pkmn) for (; i < _7; i++) CpuCopy32(sub_8043CDC(0x2B), ptr + 64 * i, 32); - if (GetBankSide(gSprites[a].data6) == 0 && !IsDoubleBattle()) + if (GetBankSide(gSprites[a].data[6]) == 0 && !IsDoubleBattle()) { r1 = (u8 *const *)gUnknown_0820A8B4; for (i = 0; i < _7; i++) @@ -2464,7 +2464,7 @@ static void sub_80451A0(u8 a, struct Pokemon *pkmn) } else { - if (GetBankSide(gSprites[a].data6) == 0) + if (GetBankSide(gSprites[a].data[6]) == 0) r1 = (u8 *const *)gUnknown_0820A904; else r1 = (u8 *const *)gUnknown_0820A8DC; @@ -2492,13 +2492,13 @@ static void sub_8045458(u8 a, u8 b) if (gBattleTypeFlags & 8) return; - r4 = gSprites[a].data6; + r4 = gSprites[a].data[6]; if (GetBankSide(r4) != 0) { u16 species = GetMonData(&gEnemyParty[gBattlePartyID[r4]], MON_DATA_SPECIES); if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(species), 1) != 0) { - r4 = gSprites[a].data5; + r4 = gSprites[a].data[5]; if (b != 0) CpuCopy32(sub_8043CDC(0x46), OBJ_VRAM0 + (gSprites[r4].oam.tileNum + 8) * 32, 32); else @@ -2518,8 +2518,8 @@ static void draw_status_ailment_maybe(u8 a) u8 r0; s32 i; - r7 = gSprites[a].data6; - r10 = gSprites[a].data5; + r7 = gSprites[a].data[6]; + r10 = gSprites[a].data[5]; if (GetBankSide(r7) == 0) { r4 = GetMonData(&gPlayerParty[gBattlePartyID[r7]], MON_DATA_STATUS); @@ -2657,7 +2657,7 @@ static void sub_80458B0(u8 a) s32 r7; u8 *addr; - r6 = ewram520_2 + GetBankIdentity(gSprites[a].data6) * 0x180; + r6 = ewram520_2 + GetBankIdentity(gSprites[a].data[6]) * 0x180; r8 = 7; sub_80034D4(r6, BattleText_SafariBalls); for (i = 0; i < r8; i++) @@ -2685,7 +2685,7 @@ static void sub_8045998(u8 a) r7 = StringCopy(gDisplayedStringBattle, BattleText_SafariBallsLeft); r7 = sub_8003504(r7, gNumSafariBalls, 10, 1); StringAppend(r7, BattleText_HighlightRed); - status = GetBankIdentity(gSprites[a].data6); + status = GetBankIdentity(gSprites[a].data[6]); r7 = ewram520_2 + status * 0x180; r6 = 5; sub_80034D4(r7, gDisplayedStringBattle); @@ -2703,7 +2703,7 @@ void sub_8045A5C(u8 a, struct Pokemon *pkmn, u8 c) u32 maxhp; u32 currhp; - r10 = gSprites[a].data6; + r10 = gSprites[a].data[6]; if (GetBankSide(r10) == 0) { if (c == 3 || c == 0) @@ -2814,7 +2814,7 @@ static void sub_8045D58(u8 a, u8 b) } for (i = 0; i < 6; i++) { - u8 r4 = gSprites[ewram17850[a].unk0].data5; + u8 r4 = gSprites[ewram17850[a].unk0].data[5]; if (i < 2) CpuCopy32(sub_8043CDC(r8) + sp8[i] * 32, OBJ_VRAM0 + (gSprites[r4].oam.tileNum + 2 + i) * 32, 32); else diff --git a/src/battle/battle_transition.c b/src/battle/battle_transition.c index d0a9bfb92..2bde7299b 100644 --- a/src/battle/battle_transition.c +++ b/src/battle/battle_transition.c @@ -1019,9 +1019,9 @@ bool8 FldEff_Pokeball(void) u8 spriteID = CreateSpriteAtEnd(&sSpriteTemplate_83FD98C, gFieldEffectArguments[0], gFieldEffectArguments[1], 0); gSprites[spriteID].oam.priority = 0; gSprites[spriteID].oam.affineMode = 1; - gSprites[spriteID].data0 = gFieldEffectArguments[2]; - gSprites[spriteID].data1 = gFieldEffectArguments[3]; - gSprites[spriteID].data2 = -1; + gSprites[spriteID].data[0] = gFieldEffectArguments[2]; + gSprites[spriteID].data[1] = gFieldEffectArguments[3]; + gSprites[spriteID].data[2] = -1; InitSpriteAffineAnim(&gSprites[spriteID]); StartSpriteAffineAnim(&gSprites[spriteID], gFieldEffectArguments[2]); return FALSE; @@ -1038,8 +1038,8 @@ static void sub_811B720(struct Sprite* sprite) s16 arr0[2]; memcpy(arr0, sUnknown_083FD7F2, sizeof(sUnknown_083FD7F2)); - if (sprite->data1 != 0) - sprite->data1--; + if (sprite->data[1] != 0) + sprite->data[1]--; else { if (sprite->pos1.x >= 0 && sprite->pos1.x <= 240) @@ -1047,12 +1047,12 @@ static void sub_811B720(struct Sprite* sprite) s16 posX = sprite->pos1.x >> 3; s16 posY = sprite->pos1.y >> 3; - if (posX != sprite->data2) + if (posX != sprite->data[2]) { u32 var; u16 *ptr; - sprite->data2 = posX; + sprite->data[2] = posX; var = (((REG_BG0CNT >> 8) & 0x1F) << 11); // r2 ptr = (u16 *)(VRAM + var); @@ -1062,7 +1062,7 @@ static void sub_811B720(struct Sprite* sprite) SOME_VRAM_STORE(ptr, posY + 1, posX, 0xF001); } } - sprite->pos1.x += arr0[sprite->data0]; + sprite->pos1.x += arr0[sprite->data[0]]; if (sprite->pos1.x < -15 || sprite->pos1.x > 255) FieldEffectStop(sprite, FLDEFF_POKEBALL); } @@ -1763,7 +1763,7 @@ static void Mugshots_CreateOpponentPlayerSprites(struct Task* task) static void sub_811C90C(struct Sprite* sprite) { - while (sUnknown_083FD880[sprite->data0](sprite)); + while (sUnknown_083FD880[sprite->data[0]](sprite)); } static bool8 sub_811C934(struct Sprite* sprite) @@ -1779,57 +1779,57 @@ static bool8 sub_811C938(struct Sprite* sprite) memcpy(arr0, sUnknown_083FD89C, sizeof(sUnknown_083FD89C)); memcpy(arr1, sUnknown_083FD8A0, sizeof(sUnknown_083FD8A0)); - sprite->data0++; - sprite->data1 = arr0[sprite->data7]; - sprite->data2 = arr1[sprite->data7]; + sprite->data[0]++; + sprite->data[1] = arr0[sprite->data[7]]; + sprite->data[2] = arr1[sprite->data[7]]; return TRUE; } static bool8 sub_811C984(struct Sprite* sprite) { - sprite->pos1.x += sprite->data1; - if (sprite->data7 && sprite->pos1.x < 133) - sprite->data0++; - else if (!sprite->data7 && sprite->pos1.x > 103) - sprite->data0++; + sprite->pos1.x += sprite->data[1]; + if (sprite->data[7] && sprite->pos1.x < 133) + sprite->data[0]++; + else if (!sprite->data[7] && sprite->pos1.x > 103) + sprite->data[0]++; return FALSE; } static bool8 sub_811C9B8(struct Sprite* sprite) { - sprite->data1 += sprite->data2; - sprite->pos1.x += sprite->data1; - if (sprite->data1 == 0) + sprite->data[1] += sprite->data[2]; + sprite->pos1.x += sprite->data[1]; + if (sprite->data[1] == 0) { - sprite->data0++; - sprite->data2 = -sprite->data2; - sprite->data6 = 1; + sprite->data[0]++; + sprite->data[2] = -sprite->data[2]; + sprite->data[6] = 1; } return FALSE; } static bool8 sub_811C9E4(struct Sprite* sprite) { - sprite->data1 += sprite->data2; - sprite->pos1.x += sprite->data1; + sprite->data[1] += sprite->data[2]; + sprite->pos1.x += sprite->data[1]; if (sprite->pos1.x < -31 || sprite->pos1.x > 271) - sprite->data0++; + sprite->data[0]++; return FALSE; } static void sub_811CA10(s16 spriteID, s16 value) { - gSprites[spriteID].data7 = value; + gSprites[spriteID].data[7] = value; } static void sub_811CA28(s16 spriteID) { - gSprites[spriteID].data0++; + gSprites[spriteID].data[0]++; } static s16 sub_811CA44(s16 spriteID) { - return gSprites[spriteID].data6; + return gSprites[spriteID].data[6]; } #undef tMugshotOpponentID @@ -1981,9 +1981,9 @@ static bool8 Phase2_Transition_WhiteFade_Func2(struct Task* task) sprite = &gSprites[CreateInvisibleSprite(sub_811CFD0)]; sprite->pos1.x = 0xF0; sprite->pos1.y = posY; - sprite->data5 = arr1[i]; + sprite->data[5] = arr1[i]; } - sprite->data6++; + sprite->data[6]++; task->tState++; return FALSE; @@ -2060,10 +2060,10 @@ static void HBlankCB_Phase2_Transition_WhiteFade(void) static void sub_811CFD0(struct Sprite* sprite) { - if (sprite->data5) + if (sprite->data[5]) { - sprite->data5--; - if (sprite->data6) + sprite->data[5]--; + if (sprite->data[6]) TRANSITION_STRUCT.VBlank_DMA = 1; } else @@ -2073,26 +2073,26 @@ static void sub_811CFD0(struct Sprite* sprite) u16* ptr2 = &gUnknown_03004DE0[0][sprite->pos1.y + 160]; for (i = 0; i < 20; i++) { - ptr1[i] = sprite->data0 >> 8; + ptr1[i] = sprite->data[0] >> 8; ptr2[i] = (u8)(sprite->pos1.x); } - if (sprite->pos1.x == 0 && sprite->data0 == 0x1000) - sprite->data1 = 1; + if (sprite->pos1.x == 0 && sprite->data[0] == 0x1000) + sprite->data[1] = 1; sprite->pos1.x -= 16; - sprite->data0 += 0x80; + sprite->data[0] += 0x80; if (sprite->pos1.x < 0) sprite->pos1.x = 0; - if (sprite->data0 > 0x1000) - sprite->data0 = 0x1000; + if (sprite->data[0] > 0x1000) + sprite->data[0] = 0x1000; - if (sprite->data6) + if (sprite->data[6]) TRANSITION_STRUCT.VBlank_DMA = 1; - if (sprite->data1) + if (sprite->data[1]) { - if (sprite->data6 == 0 || (TRANSITION_STRUCT.field_20 > 6 && sprite->data2++ > 7)) + if (sprite->data[6] == 0 || (TRANSITION_STRUCT.field_20 > 6 && sprite->data[2]++ > 7)) { TRANSITION_STRUCT.field_20++; DestroySprite(sprite); diff --git a/src/battle/pokeball.c b/src/battle/pokeball.c index afdf47979..8271e53ac 100644 --- a/src/battle/pokeball.c +++ b/src/battle/pokeball.c @@ -364,9 +364,9 @@ static void sub_8046464(u8 taskId) r4 = ball_number_to_ball_processing_index(ball); sub_80478DC(r4); spriteId = CreateSprite(&gBallSpriteTemplates[r4], 32, 80, 0x1D); - gSprites[spriteId].data0 = 0x80; - gSprites[spriteId].data1 = 0; - gSprites[spriteId].data7 = r8; + gSprites[spriteId].data[0] = 0x80; + gSprites[spriteId].data[1] = 0; + gSprites[spriteId].data[7] = r8; switch (r8) { case 0xFF: @@ -379,7 +379,7 @@ static void sub_8046464(u8 taskId) gSprites[spriteId].pos1.x = sub_8077ABC(r5, 0); gSprites[spriteId].pos1.y = sub_8077ABC(r5, 1) + 24; gBankTarget = r5; - gSprites[spriteId].data0 = 0; + gSprites[spriteId].data[0] = 0; gSprites[spriteId].callback = sub_8047254; break; default: @@ -387,16 +387,16 @@ static void sub_8046464(u8 taskId) sp0 = TRUE; break; } - gSprites[spriteId].data6 = gBankTarget; + gSprites[spriteId].data[6] = gBankTarget; if (!sp0) { DestroyTask(taskId); return; } - gSprites[spriteId].data0 = 0x22; - gSprites[spriteId].data2 = sub_8077ABC(gBankTarget, 0); - gSprites[spriteId].data4 = sub_8077ABC(gBankTarget, 1) - 16; - gSprites[spriteId].data5 = -40; + gSprites[spriteId].data[0] = 0x22; + gSprites[spriteId].data[2] = sub_8077ABC(gBankTarget, 0); + gSprites[spriteId].data[4] = sub_8077ABC(gBankTarget, 1) - 16; + gSprites[spriteId].data[5] = -40; sub_80786EC(&gSprites[spriteId]); gSprites[spriteId].oam.affineParam = taskId; gTasks[taskId].data[4] = gBankTarget; @@ -419,12 +419,12 @@ static void objc_0804ABD4(struct Sprite *sprite) sprite->pos1.y += sprite->pos2.y; sprite->pos2.x = 0; sprite->pos2.y = 0; - sprite->data5 = 0; + sprite->data[5] = 0; r4 = ball_number_to_ball_processing_index(sub_8047978(r5)); sub_814086C(sprite->pos1.x, sprite->pos1.y - 5, 1, 0x1C, r4); - sprite->data0 = sub_8141314(0, r5, 14, r4); - sprite->data6 = r5; - sprite->data7 = r8; + sprite->data[0] = sub_8141314(0, r5, 14, r4); + sprite->data[6] = r5; + sprite->data[7] = r8; DestroyTask(taskId); sprite->callback = sub_80466E8; } @@ -437,33 +437,33 @@ static void sub_80466E8(struct Sprite *sprite) static void sub_80466F4(struct Sprite *sprite) { - sprite->data5++; - if (sprite->data5 == 10) + sprite->data[5]++; + if (sprite->data[5] == 10) { - sprite->data5 = 0; + sprite->data[5] = 0; sprite->callback = sub_8046760; - StartSpriteAffineAnim(&gSprites[gObjectBankIDs[sprite->data6]], 2); - AnimateSprite(&gSprites[gObjectBankIDs[sprite->data6]]); - gSprites[gObjectBankIDs[sprite->data6]].data1 = 0; + StartSpriteAffineAnim(&gSprites[gObjectBankIDs[sprite->data[6]]], 2); + AnimateSprite(&gSprites[gObjectBankIDs[sprite->data[6]]]); + gSprites[gObjectBankIDs[sprite->data[6]]].data[1] = 0; } } static void sub_8046760(struct Sprite *sprite) { - sprite->data5++; - if (sprite->data5 == 11) + sprite->data[5]++; + if (sprite->data[5] == 11) PlaySE(SE_SUIKOMU); - if (gSprites[gObjectBankIDs[sprite->data6]].affineAnimEnded) + if (gSprites[gObjectBankIDs[sprite->data[6]]].affineAnimEnded) { StartSpriteAnim(sprite, 2); - gSprites[gObjectBankIDs[sprite->data6]].invisible = TRUE; - sprite->data5 = 0; + gSprites[gObjectBankIDs[sprite->data[6]]].invisible = TRUE; + sprite->data[5] = 0; sprite->callback = sub_80467F8; } else { - gSprites[gObjectBankIDs[sprite->data6]].data1 += 0x60; - gSprites[gObjectBankIDs[sprite->data6]].pos2.y = -gSprites[gObjectBankIDs[sprite->data6]].data1 >> 8; + gSprites[gObjectBankIDs[sprite->data[6]]].data[1] += 0x60; + gSprites[gObjectBankIDs[sprite->data[6]]].pos2.y = -gSprites[gObjectBankIDs[sprite->data[6]]].data[1] >> 8; } } @@ -471,14 +471,14 @@ static void sub_80467F8(struct Sprite *sprite) { if (sprite->animEnded) { - sprite->data5++; - if (sprite->data5 == 1) + sprite->data[5]++; + if (sprite->data[5] == 1) { - sprite->data3 = 0; - sprite->data4 = 32; - sprite->data5 = 0; + sprite->data[3] = 0; + sprite->data[4] = 32; + sprite->data[5] = 0; sprite->pos1.y += Cos(0, 32); - sprite->pos2.y = -Cos(0, sprite->data4); + sprite->pos2.y = -Cos(0, sprite->data[4]); sprite->callback = sub_804684C; } } @@ -488,18 +488,18 @@ static void sub_804684C(struct Sprite *sprite) { bool8 r5 = FALSE; - switch (sprite->data3 & 0xFF) + switch (sprite->data[3] & 0xFF) { case 0: - sprite->pos2.y = -Cos(sprite->data5, sprite->data4); - sprite->data5 += 4 + (sprite->data3 >> 8); - if (sprite->data5 >= 64) + sprite->pos2.y = -Cos(sprite->data[5], sprite->data[4]); + sprite->data[5] += 4 + (sprite->data[3] >> 8); + if (sprite->data[5] >= 64) { - sprite->data4 -= 10; - sprite->data3 += 0x101; - if (sprite->data3 >> 8 == 4) + sprite->data[4] -= 10; + sprite->data[3] += 0x101; + if (sprite->data[3] >> 8 == 4) r5 = TRUE; - switch (sprite->data3 >> 8) + switch (sprite->data[3] >> 8) { case 1: PlaySE(SE_KON); @@ -517,39 +517,39 @@ static void sub_804684C(struct Sprite *sprite) } break; case 1: - sprite->pos2.y = -Cos(sprite->data5, sprite->data4); - sprite->data5 -= 4 + (sprite->data3 >> 8); - if (sprite->data5 <= 0) + sprite->pos2.y = -Cos(sprite->data[5], sprite->data[4]); + sprite->data[5] -= 4 + (sprite->data[3] >> 8); + if (sprite->data[5] <= 0) { - sprite->data5 = 0; - sprite->data3 &= 0xFF00; + sprite->data[5] = 0; + sprite->data[3] &= 0xFF00; } break; } if (r5) { - sprite->data3 = 0; + sprite->data[3] = 0; sprite->pos1.y += Cos(64, 32); sprite->pos2.y = 0; - if (sprite->data7 == 0) + if (sprite->data[7] == 0) { sprite->callback = sub_8046C78; } else { sprite->callback = sub_8046944; - sprite->data4 = 1; - sprite->data5 = 0; + sprite->data[4] = 1; + sprite->data[5] = 0; } } } static void sub_8046944(struct Sprite *sprite) { - sprite->data3++; - if (sprite->data3 == 31) + sprite->data[3]++; + if (sprite->data[3] == 31) { - sprite->data3 = 0; + sprite->data[3] = 0; sprite->affineAnimPaused = TRUE; StartSpriteAffineAnim(sprite, 1); sprite->callback = sub_8046984; @@ -559,28 +559,28 @@ static void sub_8046944(struct Sprite *sprite) static void sub_8046984(struct Sprite *sprite) { - switch (sprite->data3 & 0xFF) + switch (sprite->data[3] & 0xFF) { case 0: case 2: - sprite->pos2.x += sprite->data4; - sprite->data5 += sprite->data4; + sprite->pos2.x += sprite->data[4]; + sprite->data[5] += sprite->data[4]; sprite->affineAnimPaused = FALSE; - if (sprite->data5 > 3 || sprite->data5 < -3) + if (sprite->data[5] > 3 || sprite->data[5] < -3) { - sprite->data3++; - sprite->data5 = 0; + sprite->data[3]++; + sprite->data[5] = 0; } break; case 1: - sprite->data5++; - if (sprite->data5 == 1) + sprite->data[5]++; + if (sprite->data[5] == 1) { - sprite->data5 = 0; - sprite->data4 = -sprite->data4; - sprite->data3++; + sprite->data[5] = 0; + sprite->data[4] = -sprite->data[4]; + sprite->data[3]++; sprite->affineAnimPaused = FALSE; - if (sprite->data4 < 0) + if (sprite->data[4] < 0) ChangeSpriteAffineAnim(sprite, 2); else ChangeSpriteAffineAnim(sprite, 1); @@ -591,34 +591,34 @@ static void sub_8046984(struct Sprite *sprite) } break; case 3: - sprite->data3 += 0x100; - if (sprite->data3 >> 8 == sprite->data7) + sprite->data[3] += 0x100; + if (sprite->data[3] >> 8 == sprite->data[7]) { sprite->callback = sub_8046C78; } else { - if (sprite->data7 == 4 && sprite->data3 >> 8 == 3) + if (sprite->data[7] == 4 && sprite->data[3] >> 8 == 3) { sprite->callback = sub_8046E7C; sprite->affineAnimPaused = TRUE; } else { - sprite->data3++; + sprite->data[3]++; sprite->affineAnimPaused = TRUE; } } break; case 4: default: - sprite->data5++; - if (sprite->data5 == 31) + sprite->data[5]++; + if (sprite->data[5] == 31) { - sprite->data5 = 0; - sprite->data3 &= 0xFF00; + sprite->data[5] = 0; + sprite->data[3] &= 0xFF00; StartSpriteAffineAnim(sprite, 3); - if (sprite->data4 < 0) + if (sprite->data[4] < 0) StartSpriteAffineAnim(sprite, 2); else StartSpriteAffineAnim(sprite, 1); @@ -695,13 +695,13 @@ static void sub_8046AD0(u8 taskId) static void sub_8046C78(struct Sprite *sprite) { - u8 r5 = sprite->data6; + u8 r5 = sprite->data[6]; u32 r4; // not sure of this type StartSpriteAnim(sprite, 1); r4 = ball_number_to_ball_processing_index(sub_8047978(r5)); sub_814086C(sprite->pos1.x, sprite->pos1.y - 5, 1, 0x1C, r4); - sprite->data0 = sub_8141314(1, sprite->data6, 14, r4); + sprite->data[0] = sub_8141314(1, sprite->data[6], 14, r4); sprite->callback = sub_8046E9C; if (gMain.inBattle) { @@ -747,24 +747,24 @@ static void sub_8046C78(struct Sprite *sprite) gTasks[taskId].data[2] = r4_2; gTasks[taskId].data[15] = 0; } - StartSpriteAffineAnim(&gSprites[gObjectBankIDs[sprite->data6]], 1); - AnimateSprite(&gSprites[gObjectBankIDs[sprite->data6]]); - gSprites[gObjectBankIDs[sprite->data6]].data1 = 0x1000; + StartSpriteAffineAnim(&gSprites[gObjectBankIDs[sprite->data[6]]], 1); + AnimateSprite(&gSprites[gObjectBankIDs[sprite->data[6]]]); + gSprites[gObjectBankIDs[sprite->data[6]]].data[1] = 0x1000; } static void sub_8046E7C(struct Sprite *sprite) { sprite->animPaused = TRUE; sprite->callback = sub_8046FBC; - sprite->data3 = 0; - sprite->data4 = 0; - sprite->data5 = 0; + sprite->data[3] = 0; + sprite->data[4] = 0; + sprite->data[5] = 0; } static void sub_8046E9C(struct Sprite *sprite) { bool8 r7 = FALSE; - u8 r4 = sprite->data6; + u8 r4 = sprite->data[6]; gSprites[gObjectBankIDs[r4]].invisible = FALSE; if (sprite->animEnded) @@ -776,8 +776,8 @@ static void sub_8046E9C(struct Sprite *sprite) } else { - gSprites[gObjectBankIDs[r4]].data1 -= 288; - gSprites[gObjectBankIDs[r4]].pos2.y = gSprites[gObjectBankIDs[r4]].data1 >> 8; + gSprites[gObjectBankIDs[r4]].data[1] -= 288; + gSprites[gObjectBankIDs[r4]].pos2.y = gSprites[gObjectBankIDs[r4]].data[1] >> 8; } if (sprite->animEnded && r7) { @@ -804,23 +804,23 @@ static void sub_8046E9C(struct Sprite *sprite) static void sub_8046FBC(struct Sprite *sprite) { - u8 r7 = sprite->data6; + u8 r7 = sprite->data[6]; - sprite->data4++; - if (sprite->data4 == 40) + sprite->data[4]++; + if (sprite->data[4] == 40) { return; } - else if (sprite->data4 == 95) + else if (sprite->data[4] == 95) { gDoingBattleAnim = 0; m4aMPlayAllStop(); PlaySE(BGM_FANFA5); } - else if (sprite->data4 == 315) + else if (sprite->data[4] == 315) { - FreeOamMatrix(gSprites[gObjectBankIDs[sprite->data6]].oam.matrixNum); - DestroySprite(&gSprites[gObjectBankIDs[sprite->data6]]); + FreeOamMatrix(gSprites[gObjectBankIDs[sprite->data[6]]].oam.matrixNum); + DestroySprite(&gSprites[gObjectBankIDs[sprite->data[6]]]); DestroySpriteAndFreeResources(sprite); if (gMain.inBattle) ewram17810[r7].unk0_3 = 0; @@ -829,11 +829,11 @@ static void sub_8046FBC(struct Sprite *sprite) static void sub_8047074(struct Sprite *sprite) { - sprite->data0 = 25; - sprite->data2 = sub_8077ABC(sprite->data6, 2); - sprite->data4 = sub_8077ABC(sprite->data6, 3) + 24; - sprite->data5 = -30; - sprite->oam.affineParam = sprite->data6; + sprite->data[0] = 25; + sprite->data[2] = sub_8077ABC(sprite->data[6], 2); + sprite->data[4] = sub_8077ABC(sprite->data[6], 3) + 24; + sprite->data[5] = -30; + sprite->oam.affineParam = sprite->data[6]; sub_80786EC(sprite); sprite->callback = sub_80470C4; } @@ -845,33 +845,33 @@ static void sub_80470C4(struct Sprite *sprite) u32 r6; u32 r7; - if (HIBYTE(sprite->data7) >= 35 && HIBYTE(sprite->data7) < 80) + if (HIBYTE(sprite->data[7]) >= 35 && HIBYTE(sprite->data[7]) < 80) { s16 r4; if ((sprite->oam.affineParam & 0xFF00) == 0) { - r6 = sprite->data1 & 1; - r7 = sprite->data2 & 1; - sprite->data1 = ((sprite->data1 / 3) & ~1) | r6; - sprite->data2 = ((sprite->data2 / 3) & ~1) | r7; + r6 = sprite->data[1] & 1; + r7 = sprite->data[2] & 1; + sprite->data[1] = ((sprite->data[1] / 3) & ~1) | r6; + sprite->data[2] = ((sprite->data[2] / 3) & ~1) | r7; StartSpriteAffineAnim(sprite, 4); } - r4 = sprite->data0; + r4 = sprite->data[0]; sub_8078B5C(sprite); - sprite->data7 += sprite->data6 / 3; - sprite->pos2.y += Sin(HIBYTE(sprite->data7), sprite->data5); + sprite->data[7] += sprite->data[6] / 3; + sprite->pos2.y += Sin(HIBYTE(sprite->data[7]), sprite->data[5]); sprite->oam.affineParam += 0x100; if ((sprite->oam.affineParam >> 8) % 3 != 0) - sprite->data0 = r4; + sprite->data[0] = r4; else - sprite->data0 = r4 - 1; - if (HIBYTE(sprite->data7) >= 80) + sprite->data[0] = r4 - 1; + if (HIBYTE(sprite->data[7]) >= 80) { - r6 = sprite->data1 & 1; - r7 = sprite->data2 & 1; - sprite->data1 = ((sprite->data1 * 3) & ~1) | r6; - sprite->data2 = ((sprite->data2 * 3) & ~1) | r7; + r6 = sprite->data[1] & 1; + r7 = sprite->data[2] & 1; + sprite->data[1] = ((sprite->data[1] * 3) & ~1) | r6; + sprite->data[2] = ((sprite->data[2] * 3) & ~1) | r7; } } else @@ -882,10 +882,10 @@ static void sub_80470C4(struct Sprite *sprite) sprite->pos1.y += sprite->pos2.y; sprite->pos2.y = 0; sprite->pos2.x = 0; - sprite->data6 = sprite->oam.affineParam & 0xFF; - sprite->data0 = 0; + sprite->data[6] = sprite->oam.affineParam & 0xFF; + sprite->data[0] = 0; if (IsDoubleBattle() && ewram17840.unk9_0 - && sprite->data6 == GetBankByPlayerAI(2)) + && sprite->data[6] == GetBankByPlayerAI(2)) sprite->callback = sub_8047230; else sprite->callback = sub_8046C78; @@ -896,21 +896,21 @@ static void sub_80470C4(struct Sprite *sprite) static void sub_8047230(struct Sprite *sprite) { - if (sprite->data0++ > 24) + if (sprite->data[0]++ > 24) { - sprite->data0 = 0; + sprite->data[0] = 0; sprite->callback = sub_8046C78; } } static void sub_8047254(struct Sprite *sprite) { - sprite->data0++; - if (sprite->data0 > 15) + sprite->data[0]++; + if (sprite->data[0] > 15) { - sprite->data0 = 0; + sprite->data[0] = 0; if (IsDoubleBattle() && ewram17840.unk9_0 - && sprite->data6 == GetBankByPlayerAI(3)) + && sprite->data[6] == GetBankByPlayerAI(3)) sprite->callback = sub_8047230; else sprite->callback = sub_8046C78; @@ -934,15 +934,15 @@ void CreatePokeballSprite(u8 a, u8 b, u8 x, u8 y, u8 e, u8 f, u8 g, u32 h) LoadCompressedObjectPic(&sBallSpriteSheets[0]); LoadCompressedObjectPalette(&sBallSpritePalettes[0]); spriteId = CreateSprite(&gBallSpriteTemplates[0], x, y, f); - gSprites[spriteId].data0 = a; - gSprites[spriteId].data5 = gSprites[a].pos1.x; - gSprites[spriteId].data6 = gSprites[a].pos1.y; + gSprites[spriteId].data[0] = a; + gSprites[spriteId].data[5] = gSprites[a].pos1.x; + gSprites[spriteId].data[6] = gSprites[a].pos1.y; gSprites[a].pos1.x = x; gSprites[a].pos1.y = y; - gSprites[spriteId].data1 = g; - gSprites[spriteId].data2 = b; - gSprites[spriteId].data3 = h; - gSprites[spriteId].data4 = h >> 16; + gSprites[spriteId].data[1] = g; + gSprites[spriteId].data[2] = b; + gSprites[spriteId].data[3] = h; + gSprites[spriteId].data[4] = h >> 16; gSprites[spriteId].oam.priority = e; gSprites[spriteId].callback = sub_80473D0; gSprites[a].invisible = TRUE; @@ -950,12 +950,12 @@ void CreatePokeballSprite(u8 a, u8 b, u8 x, u8 y, u8 e, u8 f, u8 g, u32 h) static void sub_80473D0(struct Sprite *sprite) { - if (sprite->data1 == 0) + if (sprite->data[1] == 0) { u8 r5; - u8 r7 = sprite->data0; - u8 r8 = sprite->data2; - u32 r4 = (u16)sprite->data3 | ((u16)sprite->data4 << 16); + u8 r7 = sprite->data[0]; + u8 r8 = sprite->data[2]; + u32 r4 = (u16)sprite->data[3] | ((u16)sprite->data[4] << 16); if (sprite->subpriority != 0) r5 = sprite->subpriority - 1; @@ -963,17 +963,17 @@ static void sub_80473D0(struct Sprite *sprite) r5 = 0; StartSpriteAnim(sprite, 1); sub_80472B0(sprite->pos1.x, sprite->pos1.y - 5, sprite->oam.priority, r5); - sprite->data1 = sub_80472D8(1, r8, r4); + sprite->data[1] = sub_80472D8(1, r8, r4); sprite->callback = sub_804748C; gSprites[r7].invisible = FALSE; StartSpriteAffineAnim(&gSprites[r7], 1); AnimateSprite(&gSprites[r7]); - gSprites[r7].data1 = 0x1000; - sprite->data7 = 0; + gSprites[r7].data[1] = 0x1000; + sprite->data[7] = 0; } else { - sprite->data1--; + sprite->data[1]--; } } @@ -981,7 +981,7 @@ static void sub_804748C(struct Sprite *sprite) { bool8 r12 = FALSE; bool8 r6 = FALSE; - u8 r3 = sprite->data0; + u8 r3 = sprite->data[0]; u16 var1; u16 var2; @@ -992,22 +992,22 @@ static void sub_804748C(struct Sprite *sprite) StartSpriteAffineAnim(&gSprites[r3], 0); r12 = TRUE; } - var1 = (sprite->data5 - sprite->pos1.x) * sprite->data7 / 128 + sprite->pos1.x; - var2 = (sprite->data6 - sprite->pos1.y) * sprite->data7 / 128 + sprite->pos1.y; + var1 = (sprite->data[5] - sprite->pos1.x) * sprite->data[7] / 128 + sprite->pos1.x; + var2 = (sprite->data[6] - sprite->pos1.y) * sprite->data[7] / 128 + sprite->pos1.y; gSprites[r3].pos1.x = var1; gSprites[r3].pos1.y = var2; - if (sprite->data7 < 128) + if (sprite->data[7] < 128) { - s16 sine = -(gSineTable[(u8)sprite->data7] / 8); + s16 sine = -(gSineTable[(u8)sprite->data[7]] / 8); - sprite->data7 += 4; + sprite->data[7] += 4; gSprites[r3].pos2.x = sine; gSprites[r3].pos2.y = sine; } else { - gSprites[r3].pos1.x = sprite->data5; - gSprites[r3].pos1.y = sprite->data6; + gSprites[r3].pos1.x = sprite->data[5]; + gSprites[r3].pos1.y = sprite->data[6]; gSprites[r3].pos2.x = 0; gSprites[r3].pos2.y = 0; r6 = TRUE; @@ -1023,11 +1023,11 @@ u8 sub_8047580(u8 a, u8 b, u8 x, u8 y, u8 e, u8 f, u8 g, u32 h) LoadCompressedObjectPic(&sBallSpriteSheets[0]); LoadCompressedObjectPalette(&sBallSpritePalettes[0]); spriteId = CreateSprite(&gBallSpriteTemplates[0], x, y, f); - gSprites[spriteId].data0 = a; - gSprites[spriteId].data1 = g; - gSprites[spriteId].data2 = b; - gSprites[spriteId].data3 = h; - gSprites[spriteId].data4 = h >> 16; + gSprites[spriteId].data[0] = a; + gSprites[spriteId].data[1] = g; + gSprites[spriteId].data[2] = b; + gSprites[spriteId].data[3] = h; + gSprites[spriteId].data[4] = h >> 16; gSprites[spriteId].oam.priority = e; gSprites[spriteId].callback = sub_8047638; return spriteId; @@ -1035,12 +1035,12 @@ u8 sub_8047580(u8 a, u8 b, u8 x, u8 y, u8 e, u8 f, u8 g, u32 h) static void sub_8047638(struct Sprite *sprite) { - if (sprite->data1 == 0) + if (sprite->data[1] == 0) { u8 r6; - u8 r7 = sprite->data0; - u8 r8 = sprite->data2; - u32 r5 = (u16)sprite->data3 | ((u16)sprite->data4 << 16); + u8 r7 = sprite->data[0]; + u8 r8 = sprite->data[2]; + u32 r5 = (u16)sprite->data[3] | ((u16)sprite->data[4] << 16); if (sprite->subpriority != 0) r6 = sprite->subpriority - 1; @@ -1048,15 +1048,15 @@ static void sub_8047638(struct Sprite *sprite) r6 = 0; StartSpriteAnim(sprite, 1); sub_80472B0(sprite->pos1.x, sprite->pos1.y - 5, sprite->oam.priority, r6); - sprite->data1 = sub_80472D8(1, r8, r5); + sprite->data[1] = sub_80472D8(1, r8, r5); sprite->callback = sub_80476E0; StartSpriteAffineAnim(&gSprites[r7], 2); AnimateSprite(&gSprites[r7]); - gSprites[r7].data1 = 0; + gSprites[r7].data[1] = 0; } else { - sprite->data1--; + sprite->data[1]--; } } @@ -1064,21 +1064,21 @@ static void sub_80476E0(struct Sprite *sprite) { u8 r1; - sprite->data5++; - if (sprite->data5 == 11) + sprite->data[5]++; + if (sprite->data[5] == 11) PlaySE(SE_SUIKOMU); - r1 = sprite->data0; + r1 = sprite->data[0]; if (gSprites[r1].affineAnimEnded) { StartSpriteAnim(sprite, 2); gSprites[r1].invisible = TRUE; - sprite->data5 = 0; + sprite->data[5] = 0; sprite->callback = sub_8047754; } else { - gSprites[r1].data1 += 96; - gSprites[r1].pos2.y = -gSprites[r1].data1 >> 8; + gSprites[r1].data[1] += 96; + gSprites[r1].pos2.y = -gSprites[r1].data[1] >> 8; } } @@ -1097,37 +1097,37 @@ void sub_804777C(u8 a) { struct Sprite *sprite = &gSprites[gHealthboxIDs[a]]; - sprite->data0 = 5; - sprite->data1 = 0; + sprite->data[0] = 5; + sprite->data[1] = 0; sprite->pos2.x = 0x73; sprite->pos2.y = 0; sprite->callback = sub_8047830; if (GetBankSide(a) != 0) { - sprite->data0 = -sprite->data0; - sprite->data1 = -sprite->data1; + sprite->data[0] = -sprite->data[0]; + sprite->data[1] = -sprite->data[1]; sprite->pos2.x = -sprite->pos2.x; sprite->pos2.y = -sprite->pos2.y; } - gSprites[sprite->data5].callback(&gSprites[sprite->data5]); + gSprites[sprite->data[5]].callback(&gSprites[sprite->data[5]]); if (GetBankIdentity(a) == 2) sprite->callback = sub_804780C; } static void sub_804780C(struct Sprite *sprite) { - sprite->data1++; - if (sprite->data1 == 20) + sprite->data[1]++; + if (sprite->data[1] == 20) { - sprite->data1 = 0; + sprite->data[1] = 0; sprite->callback = sub_8047830; } } static void sub_8047830(struct Sprite *sprite) { - sprite->pos2.x -= sprite->data0; - sprite->pos2.y -= sprite->data1; + sprite->pos2.x -= sprite->data[0]; + sprite->pos2.y -= sprite->data[1]; if (sprite->pos2.x == 0 && sprite->pos2.y == 0) sprite->callback = SpriteCallbackDummy; } @@ -1137,19 +1137,19 @@ void sub_8047858(u8 a) u8 spriteId; spriteId = CreateInvisibleSpriteWithCallback(oamc_804BEB4); - gSprites[spriteId].data0 = 1; - gSprites[spriteId].data1 = gHealthboxIDs[a]; + gSprites[spriteId].data[0] = 1; + gSprites[spriteId].data[1] = gHealthboxIDs[a]; gSprites[spriteId].callback = oamc_804BEB4; } static void oamc_804BEB4(struct Sprite *sprite) { - u8 r1 = sprite->data1; + u8 r1 = sprite->data[1]; - gSprites[r1].pos2.y = sprite->data0; - sprite->data0 = -sprite->data0; - sprite->data2++; - if (sprite->data2 == 21) + gSprites[r1].pos2.y = sprite->data[0]; + sprite->data[0] = -sprite->data[0]; + sprite->data[2]++; + if (sprite->data[2] == 21) { gSprites[r1].pos2.x = 0; gSprites[r1].pos2.y = 0; diff --git a/src/battle/reshow_battle_screen.c b/src/battle/reshow_battle_screen.c index 396c4435e..14f465352 100644 --- a/src/battle/reshow_battle_screen.c +++ b/src/battle/reshow_battle_screen.c @@ -252,8 +252,8 @@ static void sub_807B184(u8 bank) gObjectBankIDs[bank] = CreateSprite(&gUnknown_02024E8C, sub_8077ABC(bank, 2), posY, sub_8079E90(bank)); gSprites[gObjectBankIDs[bank]].oam.paletteNum = bank; gSprites[gObjectBankIDs[bank]].callback = SpriteCallbackDummy; - gSprites[gObjectBankIDs[bank]].data0 = bank; - gSprites[gObjectBankIDs[bank]].data2 = GetMonData(&gEnemyParty[gBattlePartyID[bank]], MON_DATA_SPECIES); + gSprites[gObjectBankIDs[bank]].data[0] = bank; + gSprites[gObjectBankIDs[bank]].data[2] = GetMonData(&gEnemyParty[gBattlePartyID[bank]], MON_DATA_SPECIES); StartSpriteAnim(&gSprites[gObjectBankIDs[bank]], gBattleMonForms[bank]); } else if (gBattleTypeFlags & BATTLE_TYPE_SAFARI && bank == 0) @@ -264,7 +264,7 @@ static void sub_807B184(u8 bank) sub_8079E90(0)); gSprites[gObjectBankIDs[bank]].oam.paletteNum = bank; gSprites[gObjectBankIDs[bank]].callback = SpriteCallbackDummy; - gSprites[gObjectBankIDs[bank]].data0 = bank; + gSprites[gObjectBankIDs[bank]].data[0] = bank; } else if (gBattleTypeFlags & BATTLE_TYPE_WALLY_TUTORIAL && bank == 0) { @@ -274,7 +274,7 @@ static void sub_807B184(u8 bank) sub_8079E90(0)); gSprites[gObjectBankIDs[bank]].oam.paletteNum = bank; gSprites[gObjectBankIDs[bank]].callback = SpriteCallbackDummy; - gSprites[gObjectBankIDs[bank]].data0 = bank; + gSprites[gObjectBankIDs[bank]].data[0] = bank; } else { @@ -284,8 +284,8 @@ static void sub_807B184(u8 bank) gObjectBankIDs[bank] = CreateSprite(&gUnknown_02024E8C, sub_8077ABC(bank, 2), posY, sub_8079E90(bank)); gSprites[gObjectBankIDs[bank]].oam.paletteNum = bank; gSprites[gObjectBankIDs[bank]].callback = SpriteCallbackDummy; - gSprites[gObjectBankIDs[bank]].data0 = bank; - gSprites[gObjectBankIDs[bank]].data2 = GetMonData(&gPlayerParty[gBattlePartyID[bank]], MON_DATA_SPECIES); + gSprites[gObjectBankIDs[bank]].data[0] = bank; + gSprites[gObjectBankIDs[bank]].data[2] = GetMonData(&gPlayerParty[gBattlePartyID[bank]], MON_DATA_SPECIES); StartSpriteAnim(&gSprites[gObjectBankIDs[bank]], gBattleMonForms[bank]); } gSprites[gObjectBankIDs[bank]].invisible = ewram17800[bank].invisible; diff --git a/src/battle/smokescreen.c b/src/battle/smokescreen.c index 8345cb6ad..dc2887007 100644 --- a/src/battle/smokescreen.c +++ b/src/battle/smokescreen.c @@ -22,28 +22,28 @@ u8 sub_8046234(s16 x, s16 y, u8 a3) mainSpriteId = CreateInvisibleSpriteWithCallback(sub_8046388); mainSprite = &gSprites[mainSpriteId]; - mainSprite->data1 = a3; + mainSprite->data[1] = a3; spriteId1 = CreateSprite(&gSpriteTemplate_81FAF0C, x - 16, y - 16, 2); - gSprites[spriteId1].data0 = mainSpriteId; - mainSprite->data0++; + gSprites[spriteId1].data[0] = mainSpriteId; + mainSprite->data[0]++; AnimateSprite(&gSprites[spriteId1]); spriteId2 = CreateSprite(&gSpriteTemplate_81FAF0C, x, y - 16, 2); - gSprites[spriteId2].data0 = mainSpriteId; - mainSprite->data0++; + gSprites[spriteId2].data[0] = mainSpriteId; + mainSprite->data[0]++; StartSpriteAnim(&gSprites[spriteId2], 1); AnimateSprite(&gSprites[spriteId2]); spriteId3 = CreateSprite(&gSpriteTemplate_81FAF0C, x - 16, y, 2); - gSprites[spriteId3].data0 = mainSpriteId; - mainSprite->data0++; + gSprites[spriteId3].data[0] = mainSpriteId; + mainSprite->data[0]++; StartSpriteAnim(&gSprites[spriteId3], 2); AnimateSprite(&gSprites[spriteId3]); spriteId4 = CreateSprite(&gSpriteTemplate_81FAF0C, x, y, 2); - gSprites[spriteId4].data0 = mainSpriteId; - mainSprite->data0++; + gSprites[spriteId4].data[0] = mainSpriteId; + mainSprite->data[0]++; StartSpriteAnim(&gSprites[spriteId4], 3); AnimateSprite(&gSprites[spriteId4]); @@ -52,11 +52,11 @@ u8 sub_8046234(s16 x, s16 y, u8 a3) static void sub_8046388(struct Sprite *sprite) { - if (!sprite->data0) + if (!sprite->data[0]) { FreeSpriteTilesByTag(gUnknown_081FAEA4.tag); FreeSpritePaletteByTag(gUnknown_081FAEAC.tag); - if (!sprite->data1) + if (!sprite->data[1]) DestroySprite(sprite); else sprite->callback = SpriteCallbackDummy; @@ -67,7 +67,7 @@ void sub_80463CC(struct Sprite *sprite) { if (sprite->animEnded) { - gSprites[sprite->data0].data0--; + gSprites[sprite->data[0]].data[0]--; DestroySprite(sprite); } } diff --git a/src/battle_anim_80CA710.c b/src/battle_anim_80CA710.c index 7a191e2d1..98f421a49 100755 --- a/src/battle_anim_80CA710.c +++ b/src/battle_anim_80CA710.c @@ -196,31 +196,31 @@ void sub_80CA710(struct Sprite* sprite) { sprite->pos1.x += gBattleAnimArgs[0]; sprite->pos1.y += gBattleAnimArgs[1]; - sprite->data0 = gBattleAnimArgs[2]; - sprite->data1 = gBattleAnimArgs[3]; + sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[1] = gBattleAnimArgs[3]; if (GetBankSide(gBattleAnimBankAttacker)) { - sprite->data3 = -gBattleAnimArgs[4]; + sprite->data[3] = -gBattleAnimArgs[4]; } else { - sprite->data3 = gBattleAnimArgs[4]; + sprite->data[3] = gBattleAnimArgs[4]; } - sprite->data4 = gBattleAnimArgs[5]; + sprite->data[4] = gBattleAnimArgs[5]; sprite->callback = sub_80CA768; } void sub_80CA768(struct Sprite* sprite) { - if (sprite->data0 > 0) + if (sprite->data[0] > 0) { - sprite->data0--; - sprite->pos2.y = sprite->data2 >> 8; - sprite->data2 += sprite->data1; - sprite->pos2.x = Sin(sprite->data5, sprite->data3); - sprite->data5 = (sprite->data5 + sprite->data4) & 0xFF; + sprite->data[0]--; + sprite->pos2.y = sprite->data[2] >> 8; + sprite->data[2] += sprite->data[1]; + sprite->pos2.x = Sin(sprite->data[5], sprite->data[3]); + sprite->data[5] = (sprite->data[5] + sprite->data[4]) & 0xFF; } else { @@ -231,34 +231,34 @@ void sub_80CA768(struct Sprite* sprite) void sub_80CA7B0(struct Sprite* sprite) { sub_80787B0(sprite, 1); - sprite->data0 = gBattleAnimArgs[2]; - sprite->data2 = sub_8077ABC(gBattleAnimBankAttacker, 2); - sprite->data4 = sub_8077ABC(gBattleAnimBankAttacker, 3); + sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[2] = sub_8077ABC(gBattleAnimBankAttacker, 2); + sprite->data[4] = sub_8077ABC(gBattleAnimBankAttacker, 3); sprite->callback = sub_8078B34; - StoreSpriteCallbackInData6(sprite, move_anim_8074EE0); + StoreSpriteCallbackInData(sprite, move_anim_8074EE0); } void sub_80CA800(struct Sprite* sprite) { sub_80787B0(sprite, 1); StartSpriteAnim(sprite, gBattleAnimArgs[3]); - sprite->data0 = gBattleAnimArgs[2]; - sprite->data2 = sub_8077ABC(gBattleAnimBankTarget, 2); - sprite->data4 = sub_8077ABC(gBattleAnimBankTarget, 3); + sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[2] = sub_8077ABC(gBattleAnimBankTarget, 2); + sprite->data[4] = sub_8077ABC(gBattleAnimBankTarget, 3); sprite->callback = sub_8078B34; - StoreSpriteCallbackInData6(sprite, move_anim_8072740); + StoreSpriteCallbackInData(sprite, move_anim_8072740); } void sub_80CA858(struct Sprite* sprite) { sub_80787B0(sprite, 1); - sprite->data0 = gBattleAnimArgs[2]; - sprite->data1 = sprite->pos1.x; - sprite->data2 = sub_8077ABC(gBattleAnimBankTarget, 2); - sprite->data3 = sprite->pos1.y; - sprite->data4 = sub_8077ABC(gBattleAnimBankTarget, 3); + sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[1] = sprite->pos1.x; + sprite->data[2] = sub_8077ABC(gBattleAnimBankTarget, 2); + sprite->data[3] = sprite->pos1.y; + sprite->data[4] = sub_8077ABC(gBattleAnimBankTarget, 3); obj_translate_based_on_private_1_2_3_4(sprite); - sprite->data5 = gBattleAnimArgs[3]; + sprite->data[5] = gBattleAnimArgs[3]; sprite->callback = sub_80CA8B4; sub_80CA8B4(sprite); } @@ -271,7 +271,7 @@ void sub_80CA8B4(struct Sprite* sprite) } else { - if (sprite->data5 > 0x7F) + if (sprite->data[5] > 0x7F) { sprite->subpriority = sub_8079E90(gBattleAnimBankTarget) + 1; } @@ -279,9 +279,9 @@ void sub_80CA8B4(struct Sprite* sprite) { sprite->subpriority = sub_8079E90(gBattleAnimBankTarget) + 6; } - sprite->pos2.x += Sin(sprite->data5, 5); - sprite->pos2.y += Cos(sprite->data5, 14); - sprite->data5 = (sprite->data5 + 15) & 0xFF; + sprite->pos2.x += Sin(sprite->data[5], 5); + sprite->pos2.y += Cos(sprite->data[5], 14); + sprite->data[5] = (sprite->data[5] + 15) & 0xFF; } } @@ -306,10 +306,10 @@ void sub_80CA928(u8 taskId) void sub_80CA9A8(struct Sprite* sprite) { sub_8078764(sprite, 1); - sprite->data0 = gBattleAnimArgs[3]; - sprite->data2 = sub_8077ABC(gBattleAnimBankAttacker, 2); - sprite->data4 = sub_8077ABC(gBattleAnimBankAttacker, 3); - sprite->data5 = gBattleAnimArgs[2]; + sprite->data[0] = gBattleAnimArgs[3]; + sprite->data[2] = sub_8077ABC(gBattleAnimBankAttacker, 2); + sprite->data[4] = sub_8077ABC(gBattleAnimBankAttacker, 3); + sprite->data[5] = gBattleAnimArgs[2]; sub_80786EC(sprite); sprite->callback = sub_80CA9F8; } @@ -338,14 +338,14 @@ void sub_80CAA14(struct Sprite* sprite) } b = Random(); - sprite->data0 = (b & 31) + 64; - sprite->data1 = sprite->pos1.x; - sprite->data2 = sub_8077ABC(gBattleAnimBankTarget, 2); - sprite->data3 = sprite->pos1.y; - sprite->data4 = sub_8077ABC(gBattleAnimBankTarget, 3); + sprite->data[0] = (b & 31) + 64; + sprite->data[1] = sprite->pos1.x; + sprite->data[2] = sub_8077ABC(gBattleAnimBankTarget, 2); + sprite->data[3] = sprite->pos1.y; + sprite->data[4] = sub_8077ABC(gBattleAnimBankTarget, 3); sub_8078D60(sprite); - sprite->data5 = Random() & 0xFF; - sprite->data6 = sprite->subpriority; + sprite->data[5] = Random() & 0xFF; + sprite->data[6] = sprite->subpriority; sprite->callback = sub_80CAACC; sub_80CAACC(sprite); } @@ -358,17 +358,17 @@ void sub_80CAACC(struct Sprite* sprite) } else { - sprite->pos2.y += Cos(sprite->data5, 12); - if (sprite->data5 <= 0x7E) + sprite->pos2.y += Cos(sprite->data[5], 12); + if (sprite->data[5] <= 0x7E) { - sprite->subpriority = sprite->data6; + sprite->subpriority = sprite->data[6]; } else { - sprite->subpriority = sprite->data6 + 1; + sprite->subpriority = sprite->data[6] + 1; } - sprite->data5 = (sprite->data5 + 24) & 0xFF; + sprite->data[5] = (sprite->data[5] + 24) & 0xFF; } } @@ -380,10 +380,10 @@ void sub_80CAB18(struct Sprite* sprite) gBattleAnimArgs[2] = -gBattleAnimArgs[2]; } - sprite->data0 = gBattleAnimArgs[4]; - sprite->data2 = sub_8077ABC(gBattleAnimBankTarget, 0) + gBattleAnimArgs[2]; - sprite->data4 = sub_8077ABC(gBattleAnimBankTarget, 1) + gBattleAnimArgs[3]; - sprite->data5 = gBattleAnimArgs[5]; + sprite->data[0] = gBattleAnimArgs[4]; + sprite->data[2] = sub_8077ABC(gBattleAnimBankTarget, 0) + gBattleAnimArgs[2]; + sprite->data[4] = sub_8077ABC(gBattleAnimBankTarget, 1) + gBattleAnimArgs[3]; + sprite->data[5] = gBattleAnimArgs[5]; sub_80786EC(sprite); sprite->callback = sub_80CAB88; } @@ -393,9 +393,9 @@ void sub_80CAB88(struct Sprite* sprite) if (sub_8078718(sprite)) { sprite->invisible = 1; - sprite->data0 = 10; + sprite->data[0] = 10; sprite->callback = sub_80782D8; - StoreSpriteCallbackInData6(sprite, sub_80CABC0); + StoreSpriteCallbackInData(sprite, sub_80CABC0); } } @@ -403,9 +403,9 @@ void sub_80CABC0(struct Sprite* sprite) { sprite->invisible = 0; StartSpriteAnim(sprite, 1); - sprite->data0 = 60; + sprite->data[0] = 60; sprite->callback = sub_80782D8; - StoreSpriteCallbackInData6(sprite, move_anim_8072740); + StoreSpriteCallbackInData(sprite, move_anim_8072740); } void sub_80CABF8(struct Sprite* sprite) @@ -417,8 +417,8 @@ void sub_80CABF8(struct Sprite* sprite) sprite->oam.objMode = 1; } - sprite->data0 = gBattleAnimArgs[3]; - sprite->data1 = gBattleAnimArgs[2]; + sprite->data[0] = gBattleAnimArgs[3]; + sprite->data[1] = gBattleAnimArgs[2]; sprite->callback = sub_80CAC44; sub_80CAC44(sprite); } @@ -427,9 +427,9 @@ void sub_80CAC44(struct Sprite* sprite) { u8 var1; - sprite->pos2.x = Sin(sprite->data1, 32); - sprite->pos2.y = Cos(sprite->data1, -3) + ((sprite->data2 += 24) >> 8); - if ((u16)(sprite->data1 - 0x40) < 0x80) + sprite->pos2.x = Sin(sprite->data[1], 32); + sprite->pos2.y = Cos(sprite->data[1], -3) + ((sprite->data[2] += 24) >> 8); + if ((u16)(sprite->data[1] - 0x40) < 0x80) { sprite->oam.priority = (sub_8079ED4(gBattleAnimBankTarget) & 3); } @@ -444,9 +444,9 @@ void sub_80CAC44(struct Sprite* sprite) sprite->oam.priority = var1; } - sprite->data1 = (sprite->data1 + 2) & 0xFF; - sprite->data0--; - if (sprite->data0 == -1) + sprite->data[1] = (sprite->data[1] + 2) & 0xFF; + sprite->data[0]--; + if (sprite->data[0] == -1) move_anim_8072740(sprite); } @@ -474,13 +474,13 @@ void sub_80CACEC(u8 taskId) void sub_80CAD54(struct Sprite* sprite) { sub_80787B0(sprite, 0); - sprite->data0 = gBattleAnimArgs[3]; - sprite->data1 = sprite->pos1.x; - sprite->data2 = sprite->pos1.x; - sprite->data3 = sprite->pos1.y; - sprite->data4 = sub_8077ABC(gBattleAnimBankAttacker, 3) + gBattleAnimArgs[2]; + sprite->data[0] = gBattleAnimArgs[3]; + sprite->data[1] = sprite->pos1.x; + sprite->data[2] = sprite->pos1.x; + sprite->data[3] = sprite->pos1.y; + sprite->data[4] = sub_8077ABC(gBattleAnimBankAttacker, 3) + gBattleAnimArgs[2]; obj_translate_based_on_private_1_2_3_4(sprite); - sprite->data5 = 0x40; + sprite->data[5] = 0x40; sprite->callback = sub_80CADA8; sub_80CADA8(sprite); } @@ -489,9 +489,9 @@ void sub_80CADA8(struct Sprite* sprite) { if (!sub_8078B5C(sprite)) { - sprite->pos2.x += Sin(sprite->data5, 32); - sprite->pos2.y += Cos(sprite->data5, -5); - if ((u16)(sprite->data5 - 0x40) < 0x80) + sprite->pos2.x += Sin(sprite->data[5], 32); + sprite->pos2.y += Cos(sprite->data[5], -5); + if ((u16)(sprite->data[5] - 0x40) < 0x80) { sprite->subpriority = sub_8079E90(gBattleAnimBankAttacker) - 1; } @@ -500,7 +500,7 @@ void sub_80CADA8(struct Sprite* sprite) sprite->subpriority = sub_8079E90(gBattleAnimBankAttacker) + 1; } - sprite->data5 = (sprite->data5 + 5) & 0xFF; + sprite->data[5] = (sprite->data[5] + 5) & 0xFF; } else { @@ -511,13 +511,13 @@ void sub_80CADA8(struct Sprite* sprite) void sub_80CAE20(struct Sprite* sprite) { sub_80787B0(sprite, 1); - sprite->data0 = gBattleAnimArgs[3]; - sprite->data1 = sprite->pos1.x; - sprite->data2 = sprite->pos1.x; - sprite->data3 = sprite->pos1.y; - sprite->data4 = sub_8077ABC(gBattleAnimBankAttacker, 3) + gBattleAnimArgs[2]; + sprite->data[0] = gBattleAnimArgs[3]; + sprite->data[1] = sprite->pos1.x; + sprite->data[2] = sprite->pos1.x; + sprite->data[3] = sprite->pos1.y; + sprite->data[4] = sub_8077ABC(gBattleAnimBankAttacker, 3) + gBattleAnimArgs[2]; obj_translate_based_on_private_1_2_3_4(sprite); - sprite->data5 = 0x40; + sprite->data[5] = 0x40; sprite->callback = sub_80CAE74; sub_80CAE74(sprite); } @@ -526,13 +526,13 @@ void sub_80CAE74(struct Sprite* sprite) { if (!sub_8078B5C(sprite)) { - sprite->pos2.x += Sin(sprite->data5, 8); - if ((u16)(sprite->data5 - 0x3B) < 5 || (u16)(sprite->data5 - 0xBB) < 5) + sprite->pos2.x += Sin(sprite->data[5], 8); + if ((u16)(sprite->data[5] - 0x3B) < 5 || (u16)(sprite->data[5] - 0xBB) < 5) { sprite->oam.matrixNum ^= 8; } - sprite->data5 = (sprite->data5 + 5) & 0xFF; + sprite->data[5] = (sprite->data[5] + 5) & 0xFF; } else { @@ -544,35 +544,35 @@ void sub_80CAED8(struct Sprite* sprite) { sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 2); sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 3); - sprite->data0 = gBattleAnimArgs[0]; - sprite->data1 = gBattleAnimArgs[1]; - sprite->data2 = gBattleAnimArgs[2]; + sprite->data[0] = gBattleAnimArgs[0]; + sprite->data[1] = gBattleAnimArgs[1]; + sprite->data[2] = gBattleAnimArgs[2]; sprite->callback = sub_80CAF20; } void sub_80CAF20(struct Sprite* sprite) { - if (!sprite->data2) + if (!sprite->data[2]) { - if (sprite->data1 & 1) + if (sprite->data[1] & 1) { - sprite->data0 = 0x80; - sprite->data1 = 0; - sprite->data2 = 0; + sprite->data[0] = 0x80; + sprite->data[1] = 0; + sprite->data[2] = 0; } else { - sprite->data0 = sprite->data1 & 1; - sprite->data1 = sprite->data1 & 1; - sprite->data2 = sprite->data1 & 1; + sprite->data[0] = sprite->data[1] & 1; + sprite->data[1] = sprite->data[1] & 1; + sprite->data[2] = sprite->data[1] & 1; } sprite->callback = sub_80CAF6C; } else { - sprite->data2--; - sprite->pos1.x += sprite->data0; - sprite->pos1.y += sprite->data1; + sprite->data[2]--; + sprite->pos1.x += sprite->data[0]; + sprite->pos1.y += sprite->data[1]; } } @@ -580,21 +580,21 @@ void sub_80CAF6C(struct Sprite* sprite) { if (GetBankSide(gBattleAnimBankAttacker)) { - sprite->pos2.x = -Sin(sprite->data0, 0x19); + sprite->pos2.x = -Sin(sprite->data[0], 0x19); } else { - sprite->pos2.x = Sin(sprite->data0, 0x19); + sprite->pos2.x = Sin(sprite->data[0], 0x19); } - sprite->data0 = (sprite->data0 + 2) & 0xFF; - sprite->data1++; - if (!(sprite->data1 & 1)) + sprite->data[0] = (sprite->data[0] + 2) & 0xFF; + sprite->data[1]++; + if (!(sprite->data[1] & 1)) { sprite->pos2.y++; } - if (sprite->data1 > 0x50) + if (sprite->data[1] > 0x50) { move_anim_8072740(sprite); } @@ -608,28 +608,28 @@ void sub_80CAFD0(struct Sprite* sprite) gBattleAnimArgs[2] = -gBattleAnimArgs[2]; } - sprite->data0 = gBattleAnimArgs[4]; + sprite->data[0] = gBattleAnimArgs[4]; if (!(gBattleAnimArgs[6])) { - sprite->data2 = sub_8077ABC(gBattleAnimBankTarget, 2) + gBattleAnimArgs[2]; - sprite->data4 = sub_8077ABC(gBattleAnimBankTarget, 3) + gBattleAnimArgs[3]; + sprite->data[2] = sub_8077ABC(gBattleAnimBankTarget, 2) + gBattleAnimArgs[2]; + sprite->data[4] = sub_8077ABC(gBattleAnimBankTarget, 3) + gBattleAnimArgs[3]; } else { - sub_807A3FC(gBattleAnimBankTarget, 1, &sprite->data2, &sprite->data4); - sprite->data2 += gBattleAnimArgs[2]; - sprite->data4 += gBattleAnimArgs[3]; + sub_807A3FC(gBattleAnimBankTarget, 1, &sprite->data[2], &sprite->data[4]); + sprite->data[2] += gBattleAnimArgs[2]; + sprite->data[4] += gBattleAnimArgs[3]; } - sprite->data5 = gBattleAnimArgs[5]; + sprite->data[5] = gBattleAnimArgs[5]; sub_80786EC(sprite); if (GetBankSide(gBattleAnimBankAttacker) == GetBankSide(gBattleAnimBankTarget)) { - sprite->data0 = 1; + sprite->data[0] = 1; } else { - sprite->data0 = 0; + sprite->data[0] = 0; } sprite->callback = sub_80CB09C; @@ -638,18 +638,18 @@ void sub_80CAFD0(struct Sprite* sprite) void sub_80CB09C(struct Sprite* sprite) { bool8 c = FALSE; - s16 a = sprite->data0; - s16 b = sprite->data7; + s16 a = sprite->data[0]; + s16 b = sprite->data[7]; s16 r0; - sprite->data0 = 1; + sprite->data[0] = 1; sub_8078718(sprite); - r0 = sprite->data7; - sprite->data0 = a; + r0 = sprite->data[7]; + sprite->data[0] = a; if (b > 0xC8 && r0 <= 0x37 && sprite->oam.affineParam == 0) sprite->oam.affineParam++; - if (sprite->oam.affineParam != 0 && sprite->data0 != 0) + if (sprite->oam.affineParam != 0 && sprite->data[0] != 0) { sprite->invisible ^= 1; sprite->oam.affineParam++; @@ -675,34 +675,34 @@ void sub_80CB144(struct Sprite* sprite) } sprite->pos1.y += 32; - sprite->data0 = gBattleAnimArgs[0]; - sprite->data1 = gBattleAnimArgs[1]; - sprite->data2 = gBattleAnimArgs[2]; - sprite->data3 = gBattleAnimArgs[3]; - sprite->data4 = gBattleAnimArgs[4]; + sprite->data[0] = gBattleAnimArgs[0]; + sprite->data[1] = gBattleAnimArgs[1]; + sprite->data[2] = gBattleAnimArgs[2]; + sprite->data[3] = gBattleAnimArgs[3]; + sprite->data[4] = gBattleAnimArgs[4]; sprite->callback = sub_80CB1A4; } void sub_80CB1A4(struct Sprite* sprite) { - if (sprite->data1 == 0xFF) + if (sprite->data[1] == 0xFF) { sprite->pos1.y -= 2; } - else if (sprite->data1 > 0) + else if (sprite->data[1] > 0) { sprite->pos1.y -= 2; - sprite->data1 -= 2; + sprite->data[1] -= 2; } - sprite->data5 += sprite->data2; - if (sprite->data0 < sprite->data4) - sprite->data5 += sprite->data2; + sprite->data[5] += sprite->data[2]; + if (sprite->data[0] < sprite->data[4]) + sprite->data[5] += sprite->data[2]; - sprite->data5 &= 0xFF; - sprite->pos2.x = Cos(sprite->data5, sprite->data3); - sprite->pos2.y = Sin(sprite->data5, 5); - if (sprite->data5 <= 0x7F) + sprite->data[5] &= 0xFF; + sprite->pos2.x = Cos(sprite->data[5], sprite->data[3]); + sprite->pos2.y = Sin(sprite->data[5], 5); + if (sprite->data[5] <= 0x7F) { sprite->oam.priority = sub_8079ED4(gBattleAnimBankTarget) - 1; } @@ -711,8 +711,8 @@ void sub_80CB1A4(struct Sprite* sprite) sprite->oam.priority = sub_8079ED4(gBattleAnimBankTarget) + 1; } - sprite->data0--; - if (!sprite->data0) + sprite->data[0]--; + if (!sprite->data[0]) move_anim_8072740(sprite); } @@ -721,8 +721,8 @@ void sub_80CB25C(struct Sprite* sprite) sub_8078764(sprite, 0); sprite->affineAnimPaused = 1; StartSpriteAffineAnim(sprite, gBattleAnimArgs[2]); - sprite->data6 = gBattleAnimArgs[2]; - sprite->data7 = gBattleAnimArgs[3]; + sprite->data[6] = gBattleAnimArgs[2]; + sprite->data[7] = gBattleAnimArgs[3]; sprite->callback = sub_80CB298; } @@ -732,7 +732,7 @@ void sub_80CB298(struct Sprite* sprite) { sprite->affineAnimPaused = 0; GetAnimBankSpriteId(1); - sprite->data0 = 0x100; + sprite->data[0] = 0x100; sprite->callback = sub_80CB2D4; } } @@ -740,27 +740,27 @@ void sub_80CB298(struct Sprite* sprite) void sub_80CB2D4(struct Sprite* sprite) { GetAnimBankSpriteId(1); - if (!sprite->data2) + if (!sprite->data[2]) { - sprite->data0 += 11; + sprite->data[0] += 11; } else { - sprite->data0 -= 11; + sprite->data[0] -= 11; } - sprite->data1++; - if (sprite->data1 == 6) + sprite->data[1]++; + if (sprite->data[1] == 6) { - sprite->data1 = 0; - sprite->data2 ^= 1; + sprite->data[1] = 0; + sprite->data[2] ^= 1; } if (sprite->affineAnimEnded) { - sprite->data7--; - if (sprite->data7 > 0) + sprite->data[7]--; + if (sprite->data[7] > 0) { - StartSpriteAffineAnim(sprite, sprite->data6); + StartSpriteAffineAnim(sprite, sprite->data[6]); } else { @@ -834,7 +834,7 @@ void sub_80CB438(u8 taskId) void sub_80CB4CC(struct Sprite* sprite) { - switch (sprite->data0) + switch (sprite->data[0]) { case 0: { @@ -847,7 +847,7 @@ void sub_80CB4CC(struct Sprite* sprite) sprite->pos1.x = sub_8077ABC(gBattleAnimBankTarget, 0) + gBattleAnimArgs[0]; sprite->pos1.y = sub_8077ABC(gBattleAnimBankTarget, 1) + gBattleAnimArgs[1]; sprite->invisible = 1; - sprite->data0++; + sprite->data[0]++; break; } case 1: @@ -856,11 +856,11 @@ void sub_80CB4CC(struct Sprite* sprite) if (sprite->affineAnimEnded) { ChangeSpriteAffineAnim(sprite, 1); - sprite->data0 = 25; - sprite->data2 = sub_8077ABC(gBattleAnimBankAttacker, 2); - sprite->data4 = sub_8077ABC(gBattleAnimBankAttacker, 3); + sprite->data[0] = 25; + sprite->data[2] = sub_8077ABC(gBattleAnimBankAttacker, 2); + sprite->data[4] = sub_8077ABC(gBattleAnimBankAttacker, 3); sprite->callback = sub_8078CC0; - StoreSpriteCallbackInData6(sprite, move_anim_8072740); + StoreSpriteCallbackInData(sprite, move_anim_8072740); break; } } @@ -869,7 +869,7 @@ void sub_80CB4CC(struct Sprite* sprite) void sub_80CB59C(struct Sprite* sprite) { - if (!sprite->data0) + if (!sprite->data[0]) { sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 2); sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 1); @@ -877,8 +877,8 @@ void sub_80CB59C(struct Sprite* sprite) sprite->pos2.y = gBattleAnimArgs[1]; sprite->subpriority = gBattleAnimArgs[2] + 30; StartSpriteAnim(sprite, gBattleAnimArgs[3]); - sprite->data2 = gBattleAnimArgs[4]; - sprite->data0++; + sprite->data[2] = gBattleAnimArgs[4]; + sprite->data[0]++; if ((sprite->pos1.y + sprite->pos2.y) > 120) { sprite->pos1.y += -120 + (sprite->pos2.y + sprite->pos1.y); @@ -902,7 +902,7 @@ void sub_80CB620(struct Sprite *sprite) sprite->pos2.y = gBattleAnimArgs[2]; sprite->subpriority = gBattleAnimArgs[3] + 30; StartSpriteAnim(sprite, gBattleAnimArgs[4]); - sprite->data2 = gBattleAnimArgs[5]; + sprite->data[2] = gBattleAnimArgs[5]; sprite->callback = sub_80CB710; gUnknown_03000728[0] = sprite->pos1.x; gUnknown_03000728[1] = sprite->pos1.y; @@ -912,49 +912,49 @@ void sub_80CB620(struct Sprite *sprite) void sub_80CB710(struct Sprite* sprite) { - if (++sprite->data0 > (sprite->data2 - 10)) - sprite->invisible = sprite->data0 % 2; + if (++sprite->data[0] > (sprite->data[2] - 10)) + sprite->invisible = sprite->data[0] % 2; - if (sprite->data0 > sprite->data2) + if (sprite->data[0] > sprite->data[2]) move_anim_8072740(sprite); } void sub_80CB768(struct Sprite* sprite) { - if (!sprite->data0) + if (!sprite->data[0]) { sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 2) + gBattleAnimArgs[0]; sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 1) + gBattleAnimArgs[1]; - sprite->data1 = gBattleAnimArgs[2]; - sprite->data2 = gBattleAnimArgs[3]; - sprite->data3 = gBattleAnimArgs[4]; + sprite->data[1] = gBattleAnimArgs[2]; + sprite->data[2] = gBattleAnimArgs[3]; + sprite->data[3] = gBattleAnimArgs[4]; } - sprite->data0++; - sprite->pos2.x = sprite->data1 * sprite->data0; - sprite->pos2.y = Sin((sprite->data0 * 20) & 0xFF, sprite->data2); - if (sprite->data0 > sprite->data3) + sprite->data[0]++; + sprite->pos2.x = sprite->data[1] * sprite->data[0]; + sprite->pos2.y = Sin((sprite->data[0] * 20) & 0xFF, sprite->data[2]); + if (sprite->data[0] > sprite->data[3]) move_anim_8072740(sprite); } void sub_80CB7EC(struct Sprite* sprite, s16 c) { s32 a = (sprite->pos1.x * 256) | sprite->pos1.y; - s32 b = (sprite->data6 * 256) | sprite->data7; + s32 b = (sprite->data[6] * 256) | sprite->data[7]; c *= 256; - sprite->data5 = a; - sprite->data6 = b; - sprite->data7 = c; + sprite->data[5] = a; + sprite->data[6] = b; + sprite->data[7] = c; } bool8 sub_80CB814(struct Sprite* sprite) { - u16 r10 = (u8)(sprite->data5 >> 8); - u16 r9 = (u8)sprite->data5; - s32 r2 = (u8)(sprite->data6 >> 8); - s32 r4 = (u8)sprite->data6; - s16 r6 = sprite->data7 >> 8; - s16 r3 = sprite->data7 & 0xFF; + u16 r10 = (u8)(sprite->data[5] >> 8); + u16 r9 = (u8)sprite->data[5]; + s32 r2 = (u8)(sprite->data[6] >> 8); + s32 r4 = (u8)sprite->data[6]; + s16 r6 = sprite->data[7] >> 8; + s16 r3 = sprite->data[7] & 0xFF; s16 r4_2; s16 r0; s32 var1; @@ -978,19 +978,19 @@ bool8 sub_80CB814(struct Sprite* sprite) if (++r3 == r6) return TRUE; - sprite->data7 = (r6 << 8) | r3; + sprite->data[7] = (r6 << 8) | r3; return FALSE; } void sub_80CB8B8(struct Sprite* sprite) { - if (sprite->data0 == 10) + if (sprite->data[0] == 10) { StartSpriteAffineAnim(sprite, 1); } - sprite->data0++; - if (sprite->data0 > 50) + sprite->data[0]++; + if (sprite->data[0] > 50) { move_anim_8072740(sprite); } @@ -998,18 +998,18 @@ void sub_80CB8B8(struct Sprite* sprite) void sub_80CB8E8(struct Sprite* sprite) { - sprite->data0 += sprite->data3 * 128 / sprite->data4; - if (sprite->data0 >= 128) + sprite->data[0] += sprite->data[3] * 128 / sprite->data[4]; + if (sprite->data[0] >= 128) { - sprite->data1++; - sprite->data0 = 0; + sprite->data[1]++; + sprite->data[0] = 0; } - sprite->pos2.y = Sin(sprite->data0 + 128, 30 - sprite->data1 * 8); + sprite->pos2.y = Sin(sprite->data[0] + 128, 30 - sprite->data[1] * 8); if (sub_80CB814(sprite)) { sprite->pos2.y = 0; - sprite->data0 = 0; + sprite->data[0] = 0; sprite->callback = sub_80CB8B8; } } @@ -1023,39 +1023,39 @@ void sub_80CB94C(struct Sprite* sprite) e2 = sub_8077ABC(gBattleAnimBankTarget, 1); if ((gBattleAnimBankAttacker ^ 2) == gBattleAnimBankTarget) { - sprite->data6 = e1; - sprite->data7 = e2 + 10; + sprite->data[6] = e1; + sprite->data[7] = e2 + 10; sub_80CB7EC(sprite, 0x3C); - sprite->data3 = 1; + sprite->data[3] = 1; } else { - sprite->data6 = e1; - sprite->data7 = e2 + 10; + sprite->data[6] = e1; + sprite->data[7] = e2 + 10; sub_80CB7EC(sprite, 0x3C); - sprite->data3 = 3; + sprite->data[3] = 3; } - sprite->data4 = 0x3C; + sprite->data[4] = 0x3C; sprite->callback = sub_80CB8E8; } void sub_80CB9C4(struct Sprite* sprite) { int zero; - sprite->data0 += ((sprite->data3 * 128) / sprite->data4); + sprite->data[0] += ((sprite->data[3] * 128) / sprite->data[4]); zero = 0; - if (sprite->data0 > 0x7F) + if (sprite->data[0] > 0x7F) { - sprite->data1++; - sprite->data0 = zero; + sprite->data[1]++; + sprite->data[0] = zero; } - sprite->pos2.y = Sin(sprite->data0 + 0x80, 30 - sprite->data1 * 8); + sprite->pos2.y = Sin(sprite->data[0] + 0x80, 30 - sprite->data[1] * 8); if (sub_80CB814(sprite)) { sprite->pos2.y = zero; - sprite->data0 = zero; + sprite->data[0] = zero; move_anim_8072740(sprite); } } @@ -1065,37 +1065,37 @@ void sub_80CBA28(struct Sprite* sprite) s16 e = sub_8077ABC(gBattleAnimBankTarget, 1); if (GetBankSide(gBattleAnimBankTarget) == 0) { - sprite->data6 = 0; - sprite->data7 = e + 10; + sprite->data[6] = 0; + sprite->data[7] = e + 10; sub_80CB7EC(sprite, 0x28); - sprite->data3 = 3; - sprite->data4 = 0x3C; + sprite->data[3] = 3; + sprite->data[4] = 0x3C; sprite->callback = sub_80CB8E8; } else { - sprite->data6 = 255; - sprite->data7 = e + 10; + sprite->data[6] = 255; + sprite->data[7] = e + 10; if (NotInBattle()) - sprite->data6 = 0; + sprite->data[6] = 0; sub_80CB7EC(sprite, 0x28); - sprite->data3 = 3; - sprite->data4 = 0x3C; + sprite->data[3] = 3; + sprite->data[4] = 0x3C; sprite->callback = sub_80CB9C4; } } void sub_80CBAA4(struct Sprite* sprite) { - if (sprite->data0 == 0) + if (sprite->data[0] == 0) { sub_8078764(sprite, 0); - sprite->data1 = gBattleAnimArgs[2]; + sprite->data[1] = gBattleAnimArgs[2]; } - sprite->data0++; - sprite->pos2.y = sprite->data1 * sprite->data0; + sprite->data[0]++; + sprite->pos2.y = sprite->data[1] * sprite->data[0]; if (sprite->animEnded) { move_anim_8072740(sprite); @@ -1111,35 +1111,35 @@ void sub_80CBAE8(struct Sprite* sprite) p2 = sub_8077ABC(gBattleAnimBankAttacker, 1); if ((gBattleAnimBankTarget ^ 2) == gBattleAnimBankAttacker) { - sprite->data6 = p1; - sprite->data7 = p2 + 10; + sprite->data[6] = p1; + sprite->data[7] = p2 + 10; sub_80CB7EC(sprite, 0x3c); - sprite->data3 = 1; + sprite->data[3] = 1; } else { - sprite->data6 = p1; - sprite->data7 = p2 + 10; + sprite->data[6] = p1; + sprite->data[7] = p2 + 10; sub_80CB7EC(sprite, 0x3c); - sprite->data3 = 3; + sprite->data[3] = 3; } - sprite->data4 = 0x3C; + sprite->data[4] = 0x3C; sprite->callback = sub_80CBB60; } void sub_80CBB60(struct Sprite* sprite) { int zero; - sprite->data0 += ((sprite->data3 * 128) / sprite->data4); + sprite->data[0] += ((sprite->data[3] * 128) / sprite->data[4]); zero = 0; - if (sprite->data0 > 0x7F) + if (sprite->data[0] > 0x7F) { - sprite->data1++; - sprite->data0 = zero; + sprite->data[1]++; + sprite->data[0] = zero; } - sprite->pos2.y = Sin(sprite->data0 + 0x80, 30 - sprite->data1 * 8); + sprite->pos2.y = Sin(sprite->data[0] + 0x80, 30 - sprite->data[1] * 8); if (sprite->pos2.y == 0) { PlaySE12WithPanning(0x7D, sub_8076F98(0x3F)); @@ -1148,7 +1148,7 @@ void sub_80CBB60(struct Sprite* sprite) if (sub_80CB814(sprite)) { sprite->pos2.y = 0; - sprite->data0 = 0; + sprite->data[0] = 0; sprite->callback = sub_80CB8B8; PlaySE12WithPanning(0x7D, sub_8076F98(-0x40)); } @@ -1159,11 +1159,11 @@ void sub_80CBBF0(struct Sprite* sprite) int a; int b; - if (sprite->data0 == 0) + if (sprite->data[0] == 0) { if (!NotInBattle()) { - sprite->data1 = gBattleAnimArgs[1]; + sprite->data[1] = gBattleAnimArgs[1]; sprite->pos1.x = 0x78; } else @@ -1174,17 +1174,17 @@ void sub_80CBBF0(struct Sprite* sprite) else b = a; - sprite->data1 = a - ((b >> 8) << 8); + sprite->data[1] = a - ((b >> 8) << 8); sprite->pos1.x = 0x46; } sprite->pos1.y = gBattleAnimArgs[0]; - sprite->data2 = gBattleAnimArgs[0]; - sprite->data4 = 20; - sprite->pos2.x = Cos(sprite->data1, 0x3C); - sprite->pos2.y = Sin(sprite->data1, 20); + sprite->data[2] = gBattleAnimArgs[0]; + sprite->data[4] = 20; + sprite->pos2.x = Cos(sprite->data[1], 0x3C); + sprite->pos2.y = Sin(sprite->data[1], 20); sprite->callback = sub_80CBC8C; - if (sprite->data1 > 0 && sprite->data1 < 0xC0) + if (sprite->data[1] > 0 && sprite->data[1] < 0xC0) sprite->subpriority = 31; else sprite->subpriority = 29; @@ -1193,28 +1193,28 @@ void sub_80CBBF0(struct Sprite* sprite) void sub_80CBC8C(struct Sprite* sprite) { - switch (sprite->data3) + switch (sprite->data[3]) { case 0: - if (sprite->data2 > 0x4E) + if (sprite->data[2] > 0x4E) { - sprite->data3 = 1; + sprite->data[3] = 1; StartSpriteAffineAnim(sprite, 1); break; } else { - sprite->data2 += sprite->data4 / 10; - sprite->data4 += 3; - sprite->pos1.y = sprite->data2; + sprite->data[2] += sprite->data[4] / 10; + sprite->data[4] += 3; + sprite->pos1.y = sprite->data[2]; break; } break; case 1: - if (sprite->data3 && sprite->affineAnimEnded) + if (sprite->data[3] && sprite->affineAnimEnded) { - sprite->data0 = 0; - sprite->data2 = 0; + sprite->data[0] = 0; + sprite->data[2] = 0; sprite->callback = sub_80CBCF8; } break; @@ -1225,24 +1225,24 @@ void sub_80CBC8C(struct Sprite* sprite) void sub_80CBCF8(struct Sprite* sprite) { - if (sprite->data2 == gUnknown_083D680C[sprite->data0][1]) + if (sprite->data[2] == gUnknown_083D680C[sprite->data[0]][1]) { - if (gUnknown_083D680C[sprite->data0][2] == 0x7F) + if (gUnknown_083D680C[sprite->data[0]][2] == 0x7F) { - sprite->data0 = 0; + sprite->data[0] = 0; sprite->callback = sub_80CBDB0; } - sprite->data2 = 0; - sprite->data0++; + sprite->data[2] = 0; + sprite->data[0]++; } else { - sprite->data2++; - sprite->data1 = (gUnknown_083D680C[sprite->data0][0] * gUnknown_083D680C[sprite->data0][2] + sprite->data1) & 0xFF; + sprite->data[2]++; + sprite->data[1] = (gUnknown_083D680C[sprite->data[0]][0] * gUnknown_083D680C[sprite->data[0]][2] + sprite->data[1]) & 0xFF; if (!NotInBattle()) { - if ((u16)(sprite->data1 - 1) <= 0xBE) + if ((u16)(sprite->data[1] - 1) <= 0xBE) { sprite->subpriority = 31; } @@ -1252,18 +1252,18 @@ void sub_80CBCF8(struct Sprite* sprite) } } - sprite->pos2.x = Cos(sprite->data1, 0x3C); - sprite->pos2.y = Sin(sprite->data1, 20); + sprite->pos2.x = Cos(sprite->data[1], 0x3C); + sprite->pos2.y = Sin(sprite->data[1], 20); } } void sub_80CBDB0(struct Sprite* sprite) { - if (sprite->data0 > 20) + if (sprite->data[0] > 20) move_anim_8072740(sprite); - sprite->invisible = sprite->data0 % 2; - sprite->data0++; + sprite->invisible = sprite->data[0] % 2; + sprite->data[0]++; } void sub_80CBDF4(u8 taskId) @@ -1282,12 +1282,12 @@ void sub_80CBDF4(u8 taskId) if (task->data[2] == 0x40) DestroyAnimVisualTask(taskId); - gSprites[task->data[2]].data0 = 10; - gSprites[task->data[2]].data1 = task->data[8]; - gSprites[task->data[2]].data2 = task->data[6] - (task->data[10] / 2 + 10) * task->data[5]; - gSprites[task->data[2]].data3 = task->data[9]; - gSprites[task->data[2]].data4 = task->data[7] + (task->data[11] / 2 + 10) * task->data[5]; - gSprites[task->data[2]].data5 = sub_80CC338(&gSprites[task->data[2]]); + gSprites[task->data[2]].data[0] = 10; + gSprites[task->data[2]].data[1] = task->data[8]; + gSprites[task->data[2]].data[2] = task->data[6] - (task->data[10] / 2 + 10) * task->data[5]; + gSprites[task->data[2]].data[3] = task->data[9]; + gSprites[task->data[2]].data[4] = task->data[7] + (task->data[11] / 2 + 10) * task->data[5]; + gSprites[task->data[2]].data[5] = sub_80CC338(&gSprites[task->data[2]]); sub_80786EC(&gSprites[task->data[2]]); task->func = sub_80CBF5C; } @@ -1336,12 +1336,12 @@ void sub_80CBF5C(u8 taskId) sprite->pos1.y += sprite->pos2.y; sprite->pos2.x = 0; sprite->pos2.y = 0; - sprite->data0 = 10; - sprite->data1 = sprite->pos1.x; - sprite->data2 = task->data[6]; - sprite->data3 = sprite->pos1.y; - sprite->data4 = task->data[7]; - sprite->data5 = sub_80CC338(sprite); + sprite->data[0] = 10; + sprite->data[1] = sprite->pos1.x; + sprite->data[2] = task->data[6]; + sprite->data[3] = sprite->pos1.y; + sprite->data[4] = task->data[7]; + sprite->data[5] = sub_80CC338(sprite); task->data[4] += 2; task->data[3] = a; sprite->subpriority = task->data[4]; @@ -1362,12 +1362,12 @@ void sub_80CBF5C(u8 taskId) sprite->pos1.y += sprite->pos2.y; sprite->pos2.x = 0; sprite->pos2.y = 0; - sprite->data0 = 10; - sprite->data1 = sprite->pos1.x; - sprite->data2 = task->data[6] - ((task->data[10] / 2) + 10) * task->data[5]; - sprite->data3 = sprite->pos1.y; - sprite->data4 = task->data[7] - ((task->data[11] / 2) + 10) * task->data[5]; - sprite->data5 = sub_80CC338(sprite); + sprite->data[0] = 10; + sprite->data[1] = sprite->pos1.x; + sprite->data[2] = task->data[6] - ((task->data[10] / 2) + 10) * task->data[5]; + sprite->data[3] = sprite->pos1.y; + sprite->data[4] = task->data[7] - ((task->data[11] / 2) + 10) * task->data[5]; + sprite->data[5] = sub_80CC338(sprite); task->data[3] = 2; sprite->subpriority = task->data[4]; StartSpriteAnim(sprite, task->data[3]); @@ -1379,12 +1379,12 @@ void sub_80CBF5C(u8 taskId) sprite->pos1.y += sprite->pos2.y; sprite->pos2.x = 0; sprite->pos2.y = 0; - sprite->data0 = 10; - sprite->data1 = sprite->pos1.x; - sprite->data2 = task->data[6] + ((task->data[10] / 2) + 10) * task->data[5]; - sprite->data3 = sprite->pos1.y; - sprite->data4 = task->data[7] + ((task->data[11] / 2) + 10) * task->data[5]; - sprite->data5 = sub_80CC338(sprite); + sprite->data[0] = 10; + sprite->data[1] = sprite->pos1.x; + sprite->data[2] = task->data[6] + ((task->data[10] / 2) + 10) * task->data[5]; + sprite->data[3] = sprite->pos1.y; + sprite->data[4] = task->data[7] + ((task->data[11] / 2) + 10) * task->data[5]; + sprite->data[5] = sub_80CC338(sprite); task->data[4] -= 2; task->data[3] = 3; sprite->subpriority = task->data[4]; @@ -1405,12 +1405,12 @@ void sub_80CBF5C(u8 taskId) sprite->pos1.y += sprite->pos2.y; sprite->pos2.x = 0; sprite->pos2.y = 0; - sprite->data0 = 10; - sprite->data1 = sprite->pos1.x; - sprite->data2 = task->data[6]; - sprite->data3 = sprite->pos1.y; - sprite->data4 = task->data[7]; - sprite->data5 = sub_80CC338(sprite); + sprite->data[0] = 10; + sprite->data[1] = sprite->pos1.x; + sprite->data[2] = task->data[6]; + sprite->data[3] = sprite->pos1.y; + sprite->data[4] = task->data[7]; + sprite->data[5] = sub_80CC338(sprite); task->data[4] += 2; task->data[3] = 4; sprite->subpriority = task->data[4]; @@ -1423,12 +1423,12 @@ void sub_80CBF5C(u8 taskId) sprite->pos1.y += sprite->pos2.y; sprite->pos2.x = 0; sprite->pos2.y = 0; - sprite->data0 = 10; - sprite->data1 = sprite->pos1.x; - sprite->data2 = task->data[6] - ((task->data[10] / 2) + 10) * task->data[5]; - sprite->data3 = sprite->pos1.y; - sprite->data4 = task->data[7] + ((task->data[11] / 2) + 10) * task->data[5]; - sprite->data5 = sub_80CC338(sprite); + sprite->data[0] = 10; + sprite->data[1] = sprite->pos1.x; + sprite->data[2] = task->data[6] - ((task->data[10] / 2) + 10) * task->data[5]; + sprite->data[3] = sprite->pos1.y; + sprite->data[4] = task->data[7] + ((task->data[11] / 2) + 10) * task->data[5]; + sprite->data[5] = sub_80CC338(sprite); task->data[3] = 5; sprite->subpriority = task->data[4]; StartSpriteAnim(sprite, task->data[3]); @@ -1453,12 +1453,12 @@ void sub_80CBF5C(u8 taskId) sprite->pos1.y += sprite->pos2.y; sprite->pos2.x = 0; sprite->pos2.y = 0; - sprite->data0 = 10; - sprite->data1 = sprite->pos1.x; - sprite->data2 = task->data[8]; - sprite->data3 = sprite->pos1.y; - sprite->data4 = task->data[9]; - sprite->data5 = sub_80CC338(sprite); + sprite->data[0] = 10; + sprite->data[1] = sprite->pos1.x; + sprite->data[2] = task->data[8]; + sprite->data[3] = sprite->pos1.y; + sprite->data[4] = task->data[9]; + sprite->data[5] = sub_80CC338(sprite); task->data[4] -= 2; task->data[3] = 6; sprite->subpriority = task->data[4]; @@ -1495,7 +1495,7 @@ void sub_80CBF5C(u8 taskId) s16 sub_80CC338(struct Sprite* sprite) { s16 var = 8; - if (sprite->data4 < sprite->pos1.y) + if (sprite->data[4] < sprite->pos1.y) var = -var; return var; @@ -1515,10 +1515,10 @@ void sub_80CC358(struct Task* task, u8 taskId) spriteId = CreateSprite(&gSpriteTemplate_83D6884, spriteX, spriteY, task->data[4]); if (spriteId != 0x40) { - gSprites[spriteId].data6 = taskId; - gSprites[spriteId].data7 = 12; + gSprites[spriteId].data[6] = taskId; + gSprites[spriteId].data[7] = 12; gTasks[taskId].data[12]++; - gSprites[spriteId].data0 = task->data[13] & 1; + gSprites[spriteId].data[0] = task->data[13] & 1; gTasks[taskId].data[13]++; StartSpriteAnim(&gSprites[spriteId], task->data[3]); gSprites[spriteId].subpriority = task->data[4]; @@ -1529,15 +1529,15 @@ void sub_80CC358(struct Task* task, u8 taskId) void sub_80CC408(struct Sprite* sprite) { - sprite->data0++; - if (sprite->data0 > 1) + sprite->data[0]++; + if (sprite->data[0] > 1) { - sprite->data0 = 0; + sprite->data[0] = 0; sprite->invisible ^= 1; - sprite->data1++; - if (sprite->data1 > 8) + sprite->data[1]++; + if (sprite->data[1] > 8) { - gTasks[sprite->data6].data[sprite->data7]--; + gTasks[sprite->data[6]].data[sprite->data[7]]--; DestroySprite(sprite); } } @@ -1553,20 +1553,20 @@ void sub_80CC474(struct Sprite* sprite) if (GetBankSide(bank) != 0) { - sprite->data4 = 0; - sprite->data2 = gBattleAnimArgs[3]; + sprite->data[4] = 0; + sprite->data[2] = gBattleAnimArgs[3]; sprite->pos1.x = 0xFFF0; } else { - sprite->data4 = 1; - sprite->data2 = -gBattleAnimArgs[3]; + sprite->data[4] = 1; + sprite->data[2] = -gBattleAnimArgs[3]; sprite->pos1.x = 0x100; } - sprite->data1 = gBattleAnimArgs[1]; - sprite->data0 = gBattleAnimArgs[2]; - sprite->data3 = gBattleAnimArgs[4]; + sprite->data[1] = gBattleAnimArgs[1]; + sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[3] = gBattleAnimArgs[4]; switch (gBattleAnimArgs[5]) { case 0: @@ -1593,12 +1593,12 @@ void sub_80CC474(struct Sprite* sprite) void sub_80CC580(struct Sprite* sprite) { - int a = sprite->data7; - sprite->data7++; - sprite->pos2.y = (sprite->data1 * gSineTable[sprite->data0]) >> 8; - sprite->pos2.x = sprite->data2 * a; - sprite->data0 = (sprite->data3 * a) & 0xFF; - if (sprite->data4 == 0) + int a = sprite->data[7]; + sprite->data[7]++; + sprite->pos2.y = (sprite->data[1] * gSineTable[sprite->data[0]]) >> 8; + sprite->pos2.x = sprite->data[2] * a; + sprite->data[0] = (sprite->data[3] * a) & 0xFF; + if (sprite->data[4] == 0) { if (sprite->pos2.x + sprite->pos1.x <= 0xF7) return; @@ -1670,29 +1670,29 @@ void sub_80CC6CC(struct Sprite* sprite) b = sub_8077ABC(gBattleAnimBankTarget, 3); } - sprite->data0 = gBattleAnimArgs[4]; + sprite->data[0] = gBattleAnimArgs[4]; if (gBattleAnimArgs[1] == 0) { sprite->pos1.x = gBattleAnimArgs[2] + a; sprite->pos1.y = gBattleAnimArgs[3] + b; - sprite->data5 = a; - sprite->data6 = b; + sprite->data[5] = a; + sprite->data[6] = b; } else { sprite->pos1.x = a; sprite->pos1.y = b; - sprite->data5 = gBattleAnimArgs[2] + a; - sprite->data6 = gBattleAnimArgs[3] + b; + sprite->data[5] = gBattleAnimArgs[2] + a; + sprite->data[6] = gBattleAnimArgs[3] + b; } x = sprite->pos1.x; - sprite->data1 = x * 16; + sprite->data[1] = x * 16; y = sprite->pos1.y; - sprite->data2 = y * 16; - sprite->data3 = (sprite->data5 - sprite->pos1.x) * 16 / gBattleAnimArgs[4]; - sprite->data4 = (sprite->data6 - sprite->pos1.y) * 16 / gBattleAnimArgs[4]; - c = sub_80790F0(sprite->data5 - x, sprite->data6 - y); + sprite->data[2] = y * 16; + sprite->data[3] = (sprite->data[5] - sprite->pos1.x) * 16 / gBattleAnimArgs[4]; + sprite->data[4] = (sprite->data[6] - sprite->pos1.y) * 16 / gBattleAnimArgs[4]; + c = sub_80790F0(sprite->data[5] - x, sprite->data[6] - y); if (NotInBattle()) c -= 0x8000; @@ -1703,13 +1703,13 @@ void sub_80CC6CC(struct Sprite* sprite) void sub_80CC7D4(struct Sprite* sprite) { - if (sprite->data0) + if (sprite->data[0]) { - sprite->data1 += sprite->data3; - sprite->data2 += sprite->data4; - sprite->pos1.x = sprite->data1 >> 4 ; - sprite->pos1.y = sprite->data2 >> 4 ; - sprite->data0--; + sprite->data[1] += sprite->data[3]; + sprite->data[2] += sprite->data[4]; + sprite->pos1.x = sprite->data[1] >> 4 ; + sprite->pos1.y = sprite->data[2] >> 4 ; + sprite->data[0]--; } else { @@ -1737,7 +1737,7 @@ void sub_80CC82C(struct Sprite* sprite) } sprite->callback = sub_8078600; - StoreSpriteCallbackInData6(sprite, move_anim_8072740); + StoreSpriteCallbackInData(sprite, move_anim_8072740); } void sub_80CC884(struct Sprite* sprite) @@ -1754,12 +1754,12 @@ void sub_80CC8C8(struct Sprite* sprite) { sprite->pos1.x += gBattleAnimArgs[0]; sprite->pos1.y += gBattleAnimArgs[1]; - sprite->data0 = gBattleAnimArgs[2]; - sprite->data1 = gBattleAnimArgs[3]; - sprite->data3 = gBattleAnimArgs[4]; - sprite->data5 = gBattleAnimArgs[5]; + sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[1] = gBattleAnimArgs[3]; + sprite->data[3] = gBattleAnimArgs[4]; + sprite->data[5] = gBattleAnimArgs[5]; StartSpriteAffineAnim(sprite, gBattleAnimArgs[6]); - StoreSpriteCallbackInData6(sprite, move_anim_8074EE0); + StoreSpriteCallbackInData(sprite, move_anim_8074EE0); sprite->callback = sub_8078504; } @@ -1782,11 +1782,11 @@ void sub_80CC914(struct Sprite* sprite) } sprite->pos1.y += gBattleAnimArgs[1]; - sprite->data1 -= 0x400; - sprite->data2 += 0x400; - sprite->data5 = gBattleAnimArgs[2]; - if (sprite->data5 == 1) - sprite->data1 = -sprite->data1; + sprite->data[1] -= 0x400; + sprite->data[2] += 0x400; + sprite->data[5] = gBattleAnimArgs[2]; + if (sprite->data[5] == 1) + sprite->data[1] = -sprite->data[1]; } void sub_80CC9BC(struct Sprite* sprite) @@ -1832,97 +1832,97 @@ void sub_80CC9BC(struct Sprite* sprite) } sprite->pos1.y += gBattleAnimArgs[1]; - sprite->data1 -= 0x400; - sprite->data2 += 0x400; - sprite->data5 = gBattleAnimArgs[2]; - if (sprite->data5 == 1) - sprite->data1 = -sprite->data1; + sprite->data[1] -= 0x400; + sprite->data[2] += 0x400; + sprite->data[5] = gBattleAnimArgs[2]; + if (sprite->data[5] == 1) + sprite->data[1] = -sprite->data[1]; } void sub_80CCB00(struct Sprite* sprite) { - sprite->data3 += sprite->data1; - sprite->data4 += sprite->data2; - if (sprite->data5 == 0) - sprite->data1 += 0x18; + sprite->data[3] += sprite->data[1]; + sprite->data[4] += sprite->data[2]; + if (sprite->data[5] == 0) + sprite->data[1] += 0x18; else - sprite->data1 -= 0x18; + sprite->data[1] -= 0x18; - sprite->data2 -= 0x18; - sprite->pos2.x = sprite->data3 >> 8; - sprite->pos2.y = sprite->data4 >> 8; - sprite->data0++; - if (sprite->data0 == 20) + sprite->data[2] -= 0x18; + sprite->pos2.x = sprite->data[3] >> 8; + sprite->pos2.y = sprite->data[4] >> 8; + sprite->data[0]++; + if (sprite->data[0] == 20) { - StoreSpriteCallbackInData6(sprite, move_anim_8072740); - sprite->data0 = 3; + StoreSpriteCallbackInData(sprite, move_anim_8072740); + sprite->data[0] = 3; sprite->callback = sub_80782D8; } } void unref_sub_80CCB6C(struct Sprite* sprite) { - if (sprite->data2 > 1) + if (sprite->data[2] > 1) { - if (sprite->data3 & 1) + if (sprite->data[3] & 1) { sprite->invisible = 0; - gSprites[sprite->data0].invisible = 0; - gSprites[sprite->data1].invisible = 0; + gSprites[sprite->data[0]].invisible = 0; + gSprites[sprite->data[1]].invisible = 0; } else { sprite->invisible = 1; - gSprites[sprite->data0].invisible = 1; - gSprites[sprite->data1].invisible = 1; + gSprites[sprite->data[0]].invisible = 1; + gSprites[sprite->data[1]].invisible = 1; } - sprite->data2 = 0; - sprite->data3++; + sprite->data[2] = 0; + sprite->data[3]++; } else { - sprite->data2++; + sprite->data[2]++; } - if (sprite->data3 == 10) + if (sprite->data[3] == 10) { - DestroySprite(&gSprites[sprite->data0]); - DestroySprite(&gSprites[sprite->data1]); + DestroySprite(&gSprites[sprite->data[0]]); + DestroySprite(&gSprites[sprite->data[1]]); move_anim_8072740(sprite); } } void sub_80CCC50(struct Sprite* sprite) { - sprite->data0 = gBattleAnimArgs[2]; + sprite->data[0] = gBattleAnimArgs[2]; if (GetBankSide(gBattleAnimBankAttacker) != 0) sprite->pos1.x -= gBattleAnimArgs[0]; else sprite->pos1.x += gBattleAnimArgs[0]; StartSpriteAnim(sprite, gBattleAnimArgs[5]); - sprite->data1 = -gBattleAnimArgs[3]; + sprite->data[1] = -gBattleAnimArgs[3]; sprite->pos1.y += gBattleAnimArgs[1]; - sprite->data3 = gBattleAnimArgs[4]; + sprite->data[3] = gBattleAnimArgs[4]; sprite->callback = sub_80CCCB4; sub_80CCCB4(sprite); } void sub_80CCCB4(struct Sprite* sprite) { - sprite->pos2.x = Cos(sprite->data0, 100); - sprite->pos2.y = Sin(sprite->data0, 20); - if (sprite->data0 <= 0x7F) + sprite->pos2.x = Cos(sprite->data[0], 100); + sprite->pos2.y = Sin(sprite->data[0], 20); + if (sprite->data[0] <= 0x7F) sprite->subpriority = 0; else sprite->subpriority = 14; - sprite->data0 = (sprite->data0 + sprite->data1) & 0xFF; - sprite->data5 += 0x82; - sprite->pos2.y += sprite->data5 >> 8; - sprite->data2++; - if (sprite->data2 == sprite->data3) + sprite->data[0] = (sprite->data[0] + sprite->data[1]) & 0xFF; + sprite->data[5] += 0x82; + sprite->pos2.y += sprite->data[5] >> 8; + sprite->data[2]++; + if (sprite->data[2] == sprite->data[3]) move_anim_8072740(sprite); } @@ -1940,11 +1940,11 @@ void sub_80CCD24(struct Sprite* sprite) else sprite->oam.priority = sub_8079ED4(gBattleAnimBankAttacker); - sprite->data0 = gBattleAnimArgs[2]; - sprite->data2 = (IndexOfSpritePaletteTag(0x2828) << 4) + 0x100; - sprite->data7 = 16; + sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[2] = (IndexOfSpritePaletteTag(0x2828) << 4) + 0x100; + sprite->data[7] = 16; REG_BLDCNT = 0x3F40; - REG_BLDALPHA = (sprite->data7 << 8) | (16 - sprite->data7); + REG_BLDALPHA = (sprite->data[7] << 8) | (16 - sprite->data[7]); sprite->callback = sub_80CCE0C; } @@ -1952,39 +1952,39 @@ void sub_80CCE0C(struct Sprite* sprite) { int a; int i; - sprite->data5 += 0x60; - sprite->pos2.x = -(sprite->data5 >> 8); - sprite->data1++; - if (sprite->data1 > 1) + sprite->data[5] += 0x60; + sprite->pos2.x = -(sprite->data[5] >> 8); + sprite->data[1]++; + if (sprite->data[1] > 1) { - sprite->data1 = 0; - a = gPlttBufferFaded[sprite->data2 + 1]; + sprite->data[1] = 0; + a = gPlttBufferFaded[sprite->data[2] + 1]; i = 0; do { - gPlttBufferFaded[sprite->data2 + ++i] = gPlttBufferFaded[sprite->data2 + i + 1]; + gPlttBufferFaded[sprite->data[2] + ++i] = gPlttBufferFaded[sprite->data[2] + i + 1]; } while ( i <= 5 ); - gPlttBufferFaded[sprite->data2 + 7] = a; + gPlttBufferFaded[sprite->data[2] + 7] = a; } - if (sprite->data7 > 6 && sprite->data0 >0 && ++sprite->data6 > 1) + if (sprite->data[7] > 6 && sprite->data[0] >0 && ++sprite->data[6] > 1) { - sprite->data6 = 0; - sprite->data7 -= 1; - REG_BLDALPHA = (sprite->data7 << 8) | (16 - sprite->data7);; + sprite->data[6] = 0; + sprite->data[7] -= 1; + REG_BLDALPHA = (sprite->data[7] << 8) | (16 - sprite->data[7]);; } - if (sprite->data0 >0) + if (sprite->data[0] >0) { - sprite->data0 -= 1; + sprite->data[0] -= 1; } - else if (++sprite->data6 > 1) + else if (++sprite->data[6] > 1) { - sprite->data6 = 0; - sprite->data7++; - REG_BLDALPHA = (sprite->data7 << 8) | (16 - sprite->data7); - if (sprite->data7 == 16) + sprite->data[6] = 0; + sprite->data[7]++; + REG_BLDALPHA = (sprite->data[7] << 8) | (16 - sprite->data[7]); + if (sprite->data[7] == 16) { sprite->invisible = 1; sprite->callback = sub_807861C; @@ -1996,82 +1996,82 @@ void sub_80CCF04(struct Sprite* sprite) { sprite->pos1.x = sub_8077ABC(gBattleAnimBankTarget, 2); sprite->pos1.y = sub_8077ABC(gBattleAnimBankTarget, 3) + 0xFFE8; - sprite->data0 = 0; - sprite->data1 = 0; - sprite->data2 = 0; - sprite->data3 = 0; - sprite->data4 = 0; - sprite->data6 = 0; - sprite->data7 = 16; + sprite->data[0] = 0; + sprite->data[1] = 0; + sprite->data[2] = 0; + sprite->data[3] = 0; + sprite->data[4] = 0; + sprite->data[6] = 0; + sprite->data[7] = 16; REG_BLDCNT = 0x3F40; - REG_BLDALPHA = (sprite->data7 << 8) | sprite->data6; + REG_BLDALPHA = (sprite->data[7] << 8) | sprite->data[6]; sprite->callback = sub_80CCF70; } void sub_80CCF70(struct Sprite* sprite) { - switch (sprite->data0) + switch (sprite->data[0]) { case 0: - if (++sprite->data2 > 0) + if (++sprite->data[2] > 0) { - sprite->data2 = 0; - if (((++sprite->data1) & 1) != 0) + sprite->data[2] = 0; + if (((++sprite->data[1]) & 1) != 0) { - if (sprite->data6 <= 15) - sprite->data6++; + if (sprite->data[6] <= 15) + sprite->data[6]++; } - else if (sprite->data7 > 0) - sprite->data7--; + else if (sprite->data[7] > 0) + sprite->data[7]--; - REG_BLDALPHA = (sprite->data7 << 8) | sprite->data6; - if (sprite->data6 == 16 && sprite->data7 == 0) + REG_BLDALPHA = (sprite->data[7] << 8) | sprite->data[6]; + if (sprite->data[6] == 16 && sprite->data[7] == 0) { - sprite->data1 = 0; - sprite->data0++; + sprite->data[1] = 0; + sprite->data[0]++; } } break; case 1: - if (++sprite->data1 > 8) + if (++sprite->data[1] > 8) { - sprite->data1 = 0; + sprite->data[1] = 0; StartSpriteAffineAnim(sprite, 1); - sprite->data0++; + sprite->data[0]++; } break; case 2: sub_80CD0CC(sprite, 16, 4); - if (++sprite->data1 > 2) + if (++sprite->data[1] > 2) { - sprite->data1 = 0; + sprite->data[1] = 0; sprite->pos1.y++; } - if (++sprite->data2 <= 29) + if (++sprite->data[2] <= 29) break; - if (sprite->data2 & 1) + if (sprite->data[2] & 1) { - if (sprite->data6 > 0) - sprite->data6--; + if (sprite->data[6] > 0) + sprite->data[6]--; } - else if (sprite->data7 <= 15) + else if (sprite->data[7] <= 15) { - sprite->data7++; + sprite->data[7]++; } - REG_BLDALPHA = (sprite->data7 << 8) | sprite->data6; - if (sprite->data6 == 0 && sprite->data7 == 16) + REG_BLDALPHA = (sprite->data[7] << 8) | sprite->data[6]; + if (sprite->data[6] == 0 && sprite->data[7] == 16) { - sprite->data1 = 0; - sprite->data2 = 0; - sprite->data0++; + sprite->data[1] = 0; + sprite->data[2] = 0; + sprite->data[0]++; } break; case 3: sprite->invisible = 1; - sprite->data0++; + sprite->data[0]++; break; case 4: REG_BLDCNT = 0; @@ -2083,23 +2083,23 @@ void sub_80CCF70(struct Sprite* sprite) void sub_80CD0CC(struct Sprite* sprite, int unk1, int unk2) { - if (sprite->data3 <= 11) - sprite->data4 += 2; + if (sprite->data[3] <= 11) + sprite->data[4] += 2; - if ((u16)(sprite->data3 - 0x12) <= 0x17) - sprite->data4 -= 2; + if ((u16)(sprite->data[3] - 0x12) <= 0x17) + sprite->data[4] -= 2; - if ((sprite->data3) > 0x2F) - sprite->data4 += 2; + if ((sprite->data[3]) > 0x2F) + sprite->data[4] += 2; - sprite->pos2.x = sprite->data4 / 9; - sprite->pos2.y = sprite->data4 / 14; + sprite->pos2.x = sprite->data[4] / 9; + sprite->pos2.y = sprite->data[4] / 14; if (sprite->pos2.y < 0) sprite->pos2.y *= -1; - sprite->data3++; - if (sprite->data3 > 0x3B) - sprite->data3 = 0; + sprite->data[3]++; + if (sprite->data[3] > 0x3B) + sprite->data[3] = 0; } void sub_80CD140(struct Sprite* sprite) @@ -2109,10 +2109,10 @@ void sub_80CD140(struct Sprite* sprite) sub_807867C(sprite, gBattleAnimArgs[0]); sprite->pos1.y += gBattleAnimArgs[1]; - sprite->data0 = gBattleAnimArgs[5]; - sprite->data1 = gBattleAnimArgs[3]; - sprite->data2 = gBattleAnimArgs[4]; - StoreSpriteCallbackInData6(sprite, move_anim_8072740); + sprite->data[0] = gBattleAnimArgs[5]; + sprite->data[1] = gBattleAnimArgs[3]; + sprite->data[2] = gBattleAnimArgs[4]; + StoreSpriteCallbackInData(sprite, move_anim_8072740); sprite->callback = sub_8078394; } @@ -2146,10 +2146,10 @@ void sub_80CD190(struct Sprite* sprite) sub_807867C(sprite, gBattleAnimArgs[0]); } - sprite->data0 = gBattleAnimArgs[5]; - sprite->data1 = gBattleAnimArgs[3]; - sprite->data2 = gBattleAnimArgs[4]; - StoreSpriteCallbackInData6(sprite, move_anim_8072740); + sprite->data[0] = gBattleAnimArgs[5]; + sprite->data[1] = gBattleAnimArgs[3]; + sprite->data[2] = gBattleAnimArgs[4]; + StoreSpriteCallbackInData(sprite, move_anim_8072740); sprite->callback = sub_8078394; } @@ -2173,11 +2173,11 @@ void sub_80CD274(struct Sprite* sprite) void sub_80CD2D4(struct Sprite* sprite) { - if (++sprite->data0 > 30) + if (++sprite->data[0] > 30) { - sprite->pos2.y = (30 - sprite->data0) / 3; - sprite->pos2.x = Sin(sprite->data1 * 4, 3); - sprite->data1++; + sprite->pos2.y = (30 - sprite->data[0]) / 3; + sprite->pos2.x = Sin(sprite->data[1] * 4, 3); + sprite->data[1]++; } if (sprite->animEnded) @@ -2191,13 +2191,13 @@ void sub_80CD328(struct Sprite* sprite) { sprite->pos1.x += gBattleAnimArgs[0]; sprite->pos1.y += gBattleAnimArgs[1]; - sprite->data3 = 1; + sprite->data[3] = 1; } else { sprite->pos1.x -= gBattleAnimArgs[0]; sprite->pos1.y += gBattleAnimArgs[1]; - sprite->data3 = 0xFFFF; + sprite->data[3] = 0xFFFF; StartSpriteAffineAnim(sprite, 1); } @@ -2206,11 +2206,11 @@ void sub_80CD328(struct Sprite* sprite) void sub_80CD394(struct Sprite* sprite) { - sprite->pos2.y = -(sprite->data0 / 0x28); - sprite->pos2.x = sprite->data4 / 10; - sprite->data4 += sprite->data3 * 2; - sprite->data0 += sprite->data1; - if (++sprite->data1 > 0x3C) + sprite->pos2.y = -(sprite->data[0] / 0x28); + sprite->pos2.x = sprite->data[4] / 10; + sprite->data[4] += sprite->data[3] * 2; + sprite->data[0] += sprite->data[1]; + if (++sprite->data[1] > 0x3C) move_anim_8074EE0(sprite); } @@ -2218,45 +2218,45 @@ void sub_80CD3E0(struct Sprite* sprite) { sprite->pos1.x -= 32; sprite->pos1.y -= 32; - sprite->data0 = 20; + sprite->data[0] = 20; sprite->callback = sub_80782D8; - StoreSpriteCallbackInData6(sprite, sub_80CD408); + StoreSpriteCallbackInData(sprite, sub_80CD408); } void sub_80CD408(struct Sprite* sprite) { - switch (sprite->data5 & 1) + switch (sprite->data[5] & 1) { case 0: - sprite->data0 = 1; + sprite->data[0] = 1; sprite->callback = sub_80782D8; - StoreSpriteCallbackInData6(sprite, sub_80CD408); + StoreSpriteCallbackInData(sprite, sub_80CD408); break; case 1: sprite->pos1.x += sprite->pos2.x; sprite->pos1.y += sprite->pos2.y; sprite->pos2.y = 0; sprite->pos2.x = 0; - sprite->data0 = 8; - sprite->data2 = sprite->pos1.x + gUnknown_083D6DDC[sprite->data5 >> 8][0]; - sprite->data4 = sprite->pos1.y + gUnknown_083D6DDC[sprite->data5 >> 8][1]; + sprite->data[0] = 8; + sprite->data[2] = sprite->pos1.x + gUnknown_083D6DDC[sprite->data[5] >> 8][0]; + sprite->data[4] = sprite->pos1.y + gUnknown_083D6DDC[sprite->data[5] >> 8][1]; sprite->callback = sub_8078B34; - StoreSpriteCallbackInData6(sprite, sub_80CD4B8); - sprite->data5 += 0x100; + StoreSpriteCallbackInData(sprite, sub_80CD4B8); + sprite->data[5] += 0x100; PlaySE12WithPanning(0xD2, sub_8076F98(0x3F)); break; } - sprite->data5 ^= 1; + sprite->data[5] ^= 1; } void sub_80CD4B8(struct Sprite* sprite) { - if ((sprite->data5 >> 8) == 4) + if ((sprite->data[5] >> 8) == 4) { - sprite->data0 = 10; + sprite->data[0] = 10; sprite->callback = sub_80782D8; - StoreSpriteCallbackInData6(sprite, sub_80CD4EC); + StoreSpriteCallbackInData(sprite, sub_80CD4EC); } else { @@ -2270,11 +2270,11 @@ void sub_80CD4EC(struct Sprite* sprite) s16 b; if (sprite->oam.affineParam == 0) { - sprite->data0 = 3; - sprite->data1 = 0; - sprite->data2 = 0; + sprite->data[0] = 3; + sprite->data[1] = 0; + sprite->data[2] = 0; sprite->callback = sub_80782D8; - StoreSpriteCallbackInData6(sprite, sub_80CD5A8); + StoreSpriteCallbackInData(sprite, sub_80CD5A8); } else { @@ -2302,36 +2302,36 @@ void sub_80CD4EC(struct Sprite* sprite) sprite->pos1.y += sprite->pos2.y; sprite->pos2.y = 0; sprite->pos2.x = 0; - sprite->data0 = 6; - sprite->data2 = sub_8077ABC(gBattleAnimBankTarget, 2) + a; - sprite->data4 = sub_8077ABC(gBattleAnimBankTarget, 3) + b; + sprite->data[0] = 6; + sprite->data[2] = sub_8077ABC(gBattleAnimBankTarget, 2) + a; + sprite->data[4] = sub_8077ABC(gBattleAnimBankTarget, 3) + b; sprite->callback = sub_8078B34; - StoreSpriteCallbackInData6(sprite, sub_80CD654); + StoreSpriteCallbackInData(sprite, sub_80CD654); } } void sub_80CD5A8(struct Sprite* sprite) { - if (sprite->data2 == 0) + if (sprite->data[2] == 0) { - if ((sprite->data1 += 3) > 16) - sprite->data1 = 16; + if ((sprite->data[1] += 3) > 16) + sprite->data[1] = 16; } - else if ((sprite->data1 -= 3) < 0) + else if ((sprite->data[1] -= 3) < 0) { - sprite->data1 = 0; + sprite->data[1] = 0; } - BlendPalettes(sub_80791A8(1, 1, 1, 1, 1, 0, 0), sprite->data1, 0x7FFF); - if (sprite->data1 == 16) + BlendPalettes(sub_80791A8(1, 1, 1, 1, 1, 0, 0), sprite->data[1], 0x7FFF); + if (sprite->data[1] == 16) { int pal; - sprite->data2++; + sprite->data[2]++; pal = sprite->oam.paletteNum; LoadPalette(&gPlttBufferUnfaded[0x108 + pal * 16], pal * 16 | 0x101, 4); PlaySE12WithPanning(0xC0, sub_8076F98(0x3F)); } - else if (sprite->data1 == 0) + else if (sprite->data[1] == 0) { sprite->callback = sub_80CD654; } @@ -2341,22 +2341,22 @@ void sub_80CD654(struct Sprite* sprite) { if ((u16)gBattleAnimArgs[7] == 0xFFFF) { - sprite->data1 = 0; - sprite->data0 = 0; + sprite->data[1] = 0; + sprite->data[0] = 0; sprite->callback = sub_80CD67C; } } void sub_80CD67C(struct Sprite* sprite) { - if (sprite->data0 % 3 == 0) + if (sprite->data[0] % 3 == 0) { - sprite->data1++; + sprite->data[1]++; sprite->invisible ^= 1; } - sprite->data0++; - if (sprite->data1 == 8) + sprite->data[0]++; + if (sprite->data[1] == 8) move_anim_8072740(sprite); } @@ -2395,7 +2395,7 @@ void sub_80CD6CC(struct Sprite* sprite) void sub_80CD774(struct Sprite* sprite) { sprite->invisible = 1; - sprite->data0 = 0; + sprite->data[0] = 0; switch (gBattleAnimArgs[0]) { case 0: @@ -2415,77 +2415,77 @@ void sub_80CD774(struct Sprite* sprite) void sub_80CD7CC(struct Sprite* sprite) { - sprite->data0 = 6; - sprite->data1 = (GetBankSide(gBattleAnimBankAttacker)) ? 2 : -2; - sprite->data2 = 0; - sprite->data3 = gObjectBankIDs[gBattleAnimBankAttacker]; - StoreSpriteCallbackInData6(sprite, sub_80CD81C); + sprite->data[0] = 6; + sprite->data[1] = (GetBankSide(gBattleAnimBankAttacker)) ? 2 : -2; + sprite->data[2] = 0; + sprite->data[3] = gObjectBankIDs[gBattleAnimBankAttacker]; + StoreSpriteCallbackInData(sprite, sub_80CD81C); sprite->callback = sub_8078458; } void sub_80CD81C(struct Sprite* sprite) { - if (sprite->data0 == 0) + if (sprite->data[0] == 0) { - sprite->data3 = gObjectBankIDs[gBattleAnimBankAttacker]; - sub_8078E70(sprite->data3, 0); - sprite->data4 = (sprite->data6 = GetBankSide(gBattleAnimBankAttacker)) ? 0x300 : 0xFFFFFD00; - sprite->data5 = 0; + sprite->data[3] = gObjectBankIDs[gBattleAnimBankAttacker]; + sub_8078E70(sprite->data[3], 0); + sprite->data[4] = (sprite->data[6] = GetBankSide(gBattleAnimBankAttacker)) ? 0x300 : 0xFFFFFD00; + sprite->data[5] = 0; } - sprite->data5 += sprite->data4; - obj_id_set_rotscale(sprite->data3, 0x100, 0x100, sprite->data5); - sub_8078F9C(sprite->data3); - if (++sprite->data0 > 3) + sprite->data[5] += sprite->data[4]; + obj_id_set_rotscale(sprite->data[3], 0x100, 0x100, sprite->data[5]); + sub_8078F9C(sprite->data[3]); + if (++sprite->data[0] > 3) { - sprite->data0 = 0; + sprite->data[0] = 0; sprite->callback = sub_80CD9B8; } } void sub_80CD8A8(struct Sprite* sprite) { - sprite->data0 = 4; - sprite->data1 = (GetBankSide(gBattleAnimBankAttacker)) ? -3 : 3; - sprite->data2 = 0; - sprite->data3 = gObjectBankIDs[gBattleAnimBankAttacker]; - StoreSpriteCallbackInData6(sprite, sub_80CD9B8); + sprite->data[0] = 4; + sprite->data[1] = (GetBankSide(gBattleAnimBankAttacker)) ? -3 : 3; + sprite->data[2] = 0; + sprite->data[3] = gObjectBankIDs[gBattleAnimBankAttacker]; + StoreSpriteCallbackInData(sprite, sub_80CD9B8); sprite->callback = sub_8078458; } void sub_80CD8F8(struct Sprite* sprite) { - if (++sprite->data0 > 8) + if (++sprite->data[0] > 8) { - sprite->data0 = 0; + sprite->data[0] = 0; sprite->callback = sub_80CD91C; } } void sub_80CD91C(struct Sprite* sprite) { - if (sprite->data0 == 0) + if (sprite->data[0] == 0) { - sprite->data3 = gObjectBankIDs[gBattleAnimBankAttacker]; - sprite->data6 = GetBankSide(gBattleAnimBankAttacker); + sprite->data[3] = gObjectBankIDs[gBattleAnimBankAttacker]; + sprite->data[6] = GetBankSide(gBattleAnimBankAttacker); if (GetBankSide(gBattleAnimBankAttacker)) { - sprite->data4 = 0xFC00; - sprite->data5 = 0xC00; + sprite->data[4] = 0xFC00; + sprite->data[5] = 0xC00; } else { - sprite->data4 = 0x400; - sprite->data5 = 0xF400; + sprite->data[4] = 0x400; + sprite->data[5] = 0xF400; } } - sprite->data5 += sprite->data4; - obj_id_set_rotscale(sprite->data3, 0x100, 0x100, sprite->data5); - sub_8078F9C(sprite->data3); - if (++sprite->data0 > 2) + sprite->data[5] += sprite->data[4]; + obj_id_set_rotscale(sprite->data[3], 0x100, 0x100, sprite->data[5]); + sub_8078F9C(sprite->data[3]); + if (++sprite->data[0] > 2) { - sub_8078F40(sprite->data3); + sub_8078F40(sprite->data[3]); sprite->callback = sub_80CD9B8; } } @@ -2497,40 +2497,40 @@ void sub_80CD9B8(struct Sprite* sprite) void sub_80CD9C4(struct Sprite* sprite) { - sprite->data0 = 0; + sprite->data[0] = 0; sprite->callback = sub_80CD9D4; } void sub_80CD9D4(struct Sprite* sprite) { - switch (sprite->data0) + switch (sprite->data[0]) { case 0: - sprite->data1 = 0; - sprite->data2 = gObjectBankIDs[gBattleAnimBankAttacker]; - sprite->data3 = GetBankSide(gBattleAnimBankAttacker); - sprite->data4 = (sprite->data3 != 0) ? 0x200 : -0x200; - sprite->data5 = 0; - sub_8078E70(sprite->data2, 0); - sprite->data0++; + sprite->data[1] = 0; + sprite->data[2] = gObjectBankIDs[gBattleAnimBankAttacker]; + sprite->data[3] = GetBankSide(gBattleAnimBankAttacker); + sprite->data[4] = (sprite->data[3] != 0) ? 0x200 : -0x200; + sprite->data[5] = 0; + sub_8078E70(sprite->data[2], 0); + sprite->data[0]++; case 1: - sprite->data5 += sprite->data4; - obj_id_set_rotscale(sprite->data2, 0x100, 0x100, sprite->data5); - sub_8078F9C(sprite->data2); - if (++sprite->data1 > 3) + sprite->data[5] += sprite->data[4]; + obj_id_set_rotscale(sprite->data[2], 0x100, 0x100, sprite->data[5]); + sub_8078F9C(sprite->data[2]); + if (++sprite->data[1] > 3) { - sprite->data1 = 0; - sprite->data4 *= -1; - sprite->data0++; + sprite->data[1] = 0; + sprite->data[4] *= -1; + sprite->data[0]++; } break; case 2: - sprite->data5 += sprite->data4; - obj_id_set_rotscale(sprite->data2, 0x100, 0x100, sprite->data5); - sub_8078F9C(sprite->data2); - if (++sprite->data1 > 3) + sprite->data[5] += sprite->data[4]; + obj_id_set_rotscale(sprite->data[2], 0x100, 0x100, sprite->data[5]); + sub_8078F9C(sprite->data[2]); + if (++sprite->data[1] > 3) { - sub_8078F40(sprite->data2); + sub_8078F40(sprite->data[2]); move_anim_8072740(sprite); } break; @@ -2694,9 +2694,9 @@ void sub_80CDD74(struct Sprite* sprite) sprite->pos1.y = sub_8077ABC(gBattleAnimBankTarget, 3) + gBattleAnimArgs[2]; } - sprite->data0 = 0; - sprite->data1 = 0; - StoreSpriteCallbackInData6(sprite, sub_80CDEC0); + sprite->data[0] = 0; + sprite->data[1] = 0; + StoreSpriteCallbackInData(sprite, sub_80CDEC0); sprite->callback = sub_8078600; } @@ -2704,7 +2704,7 @@ void sub_80CDDDC(struct Sprite* sprite) { sprite->pos1.x = sub_8077ABC(gBattleAnimBankTarget, 2) + 0xFFD0; sprite->pos1.y = sub_8077ABC(gBattleAnimBankTarget, 3); - StoreSpriteCallbackInData6(sprite, sub_80CDE78); + StoreSpriteCallbackInData(sprite, sub_80CDE78); sprite->callback = sub_8078600; } @@ -2713,37 +2713,37 @@ void sub_80CDE24(struct Sprite* sprite) sprite->pos1.x = sprite->pos1.x = sub_8077ABC(gBattleAnimBankTarget, 2) + 0xFFD0 + gBattleAnimArgs[0]; sprite->pos1.y = sub_8077ABC(gBattleAnimBankTarget, 3); StartSpriteAnim(sprite, 1); - sprite->data0 = 0; - sprite->data1 = 0; + sprite->data[0] = 0; + sprite->data[1] = 0; sprite->callback = sub_80CDEC0; } void sub_80CDE78(struct Sprite* sprite) { - if (++sprite->data0 > 8) + if (++sprite->data[0] > 8) { - sprite->data0 = 12; - sprite->data1 = 8; - sprite->data2 = 0; - StoreSpriteCallbackInData6(sprite, sub_80CDEB0); + sprite->data[0] = 12; + sprite->data[1] = 8; + sprite->data[2] = 0; + StoreSpriteCallbackInData(sprite, sub_80CDEB0); sprite->callback = sub_8078364; } } void sub_80CDEB0(struct Sprite* sprite) { - sprite->data0 = 0; - sprite->data1 = 0; + sprite->data[0] = 0; + sprite->data[1] = 0; sprite->callback = sub_80CDEC0; } void sub_80CDEC0(struct Sprite* sprite) { - if (++sprite->data0 > 1) + if (++sprite->data[0] > 1) { - sprite->data0 = 0; + sprite->data[0] = 0; sprite->invisible = !sprite->invisible; - if (++sprite->data1 > 8) + if (++sprite->data[1] > 8) move_anim_8072740(sprite); } } @@ -2761,20 +2761,20 @@ void sub_80CDF0C(struct Sprite* sprite) sprite->pos1.y = sub_8077ABC(gBattleAnimBankTarget, 1) + gBattleAnimArgs[2]; } - sprite->data0 = 0; - sprite->data1 = gBattleAnimArgs[3]; + sprite->data[0] = 0; + sprite->data[1] = gBattleAnimArgs[3]; sprite->callback = sub_80CDF70; } void sub_80CDF70(struct Sprite* sprite) { - if (++sprite->data0 > sprite->data1) + if (++sprite->data[0] > sprite->data[1]) { - sprite->data0 = 0; + sprite->data[0] = 0; sprite->pos1.y--; } - sprite->pos1.y -= sprite->data0; + sprite->pos1.y -= sprite->data[0]; if (sprite->animEnded) move_anim_8072740(sprite); } @@ -2783,48 +2783,48 @@ void sub_80CDFB0(struct Sprite* sprite) { sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 2); sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 3) - 12; - sprite->data0 = 0; - sprite->data1 = 2; - sprite->data2 = 0; - sprite->data3 = 0; - sprite->data4 = 0; - sprite->data5 = sub_8076F98(-0x40); + sprite->data[0] = 0; + sprite->data[1] = 2; + sprite->data[2] = 0; + sprite->data[3] = 0; + sprite->data[4] = 0; + sprite->data[5] = sub_8076F98(-0x40); sprite->callback = sub_80CE000; } void sub_80CE000(struct Sprite* sprite) { - if (++sprite->data0 >= sprite->data1) + if (++sprite->data[0] >= sprite->data[1]) { sprite->invisible = !sprite->invisible; if (!sprite->invisible) { - sprite->data4++; - if (!(sprite->data4 & 1)) - PlaySE12WithPanning(SE_W207B, sprite->data5); + sprite->data[4]++; + if (!(sprite->data[4] & 1)) + PlaySE12WithPanning(SE_W207B, sprite->data[5]); } - sprite->data0 = 0; - if (++sprite->data2 > 1) + sprite->data[0] = 0; + if (++sprite->data[2] > 1) { - sprite->data2 = 0; - sprite->data1++; + sprite->data[2] = 0; + sprite->data[1]++; } } - if (sprite->animEnded && sprite->data1 > 16 && sprite->invisible) + if (sprite->animEnded && sprite->data[1] > 16 && sprite->invisible) move_anim_8072740(sprite); } void sub_80CE09C(struct Sprite* sprite) { - if (sprite->data0 == 0) + if (sprite->data[0] == 0) { sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 0) + gBattleAnimArgs[0]; sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 1) + gBattleAnimArgs[1]; if (NotInBattle()) sprite->pos1.y += 10; - sprite->data0++; + sprite->data[0]++; } if ((u16)gBattleAnimArgs[7] == 0xFFFF) @@ -2859,24 +2859,24 @@ void sub_80CE17C(struct Sprite* sprite) { sub_8078764(sprite, 0); sprite->animPaused = 1; - sprite->data0 = gBattleAnimArgs[2]; + sprite->data[0] = gBattleAnimArgs[2]; sprite->callback = sub_80CE1AC; } void sub_80CE1AC(struct Sprite* sprite) { - if (sprite->data0) + if (sprite->data[0]) { - sprite->data0--; + sprite->data[0]--; } else { sprite->animPaused = 0; - sprite->data0 = 30; - sprite->data2 = sub_8077ABC(gBattleAnimBankAttacker, 2); - sprite->data4 = sub_8077ABC(gBattleAnimBankAttacker, 3); + sprite->data[0] = 30; + sprite->data[2] = sub_8077ABC(gBattleAnimBankAttacker, 2); + sprite->data[4] = sub_8077ABC(gBattleAnimBankAttacker, 3); sprite->callback = sub_8078B34; - StoreSpriteCallbackInData6(sprite, move_anim_8072740); + StoreSpriteCallbackInData(sprite, move_anim_8072740); } } @@ -2933,13 +2933,13 @@ void sub_80CE30C(struct Sprite* sprite) sprite->oam.shape = 0; sprite->oam.size = 3; - sprite->data0 = 0; + sprite->data[0] = 0; sprite->callback = sub_80CE354; } void sub_80CE354(struct Sprite* sprite) { - if (sprite->data0) + if (sprite->data[0]) move_anim_8072740(sprite); } @@ -2947,27 +2947,27 @@ void sub_80CE36C(struct Sprite* sprite) { sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 2) + gBattleAnimArgs[0]; sprite->pos1.y = gBattleAnimArgs[1]; - sprite->data0 = 0; - sprite->data1 = 0; - sprite->data2 = 0; - sprite->data3 = 0; - sprite->data4 = 1; + sprite->data[0] = 0; + sprite->data[1] = 0; + sprite->data[2] = 0; + sprite->data[3] = 0; + sprite->data[4] = 1; sprite->callback = sub_80CE3B0; } void sub_80CE3B0(struct Sprite* sprite) { - if (++sprite->data1 > 1) + if (++sprite->data[1] > 1) { - sprite->data1 = 0; - if (sprite->data2 <= 0x77) + sprite->data[1] = 0; + if (sprite->data[2] <= 0x77) { sprite->pos1.y++; - sprite->data2++; + sprite->data[2]++; } } - if (sprite->data0) + if (sprite->data[0]) move_anim_8072740(sprite); } @@ -3055,7 +3055,7 @@ void sub_80CE4D4(u8 taskId) for (spriteId = 0; spriteId < MAX_SPRITES; spriteId++) { if (gSprites[spriteId].template == &gBattleAnimSpriteTemplate_83D6FC8 || gSprites[spriteId].template == &gBattleAnimSpriteTemplate_83D6FF8) - gSprites[spriteId].data0 = 1; + gSprites[spriteId].data[0] = 1; } task->data[1] = 0; @@ -3084,39 +3084,39 @@ void sub_80CE670(struct Sprite* sprite) if (gBattleAnimArgs[2] > 0x7F) gBattleAnimArgs[2] = 0x7F; - sprite->data0 = 0; - sprite->data1 = gBattleAnimArgs[2]; + sprite->data[0] = 0; + sprite->data[1] = gBattleAnimArgs[2]; sprite->pos1.x = sub_8077ABC(gBattleAnimBankTarget, 2) + gBattleAnimArgs[0]; sprite->pos1.y = sub_8077ABC(gBattleAnimBankTarget, 3) + gBattleAnimArgs[1]; - sprite->data6 = sprite->pos1.x; - sprite->data7 = sprite->pos1.y; + sprite->data[6] = sprite->pos1.x; + sprite->data[7] = sprite->pos1.y; if (NotInBattle() != 0) { sprite->oam.matrixNum = 8; sprite->pos1.x += 40; sprite->pos1.y += 20; - sprite->data2 = sprite->pos1.x << 7; - sprite->data3 = -0x1400 / sprite->data1; - sprite->data4 = sprite->pos1.y << 7; - sprite->data5 = -0xA00 / sprite->data1; + sprite->data[2] = sprite->pos1.x << 7; + sprite->data[3] = -0x1400 / sprite->data[1]; + sprite->data[4] = sprite->pos1.y << 7; + sprite->data[5] = -0xA00 / sprite->data[1]; } else if (GetBankSide(gBattleAnimBankAttacker) == 0) { sprite->pos1.x -= 40; sprite->pos1.y += 20; - sprite->data2 = sprite->pos1.x << 7; - sprite->data3 = 0x1400 / sprite->data1; - sprite->data4 = sprite->pos1.y << 7; - sprite->data5 = -0xA00 / sprite->data1; + sprite->data[2] = sprite->pos1.x << 7; + sprite->data[3] = 0x1400 / sprite->data[1]; + sprite->data[4] = sprite->pos1.y << 7; + sprite->data[5] = -0xA00 / sprite->data[1]; } else { sprite->pos1.x += 40; sprite->pos1.y -= 20; - sprite->data2 = sprite->pos1.x << 7; - sprite->data3 = -0x1400 / sprite->data1; - sprite->data4 = sprite->pos1.y << 7; - sprite->data5 = 0xA00 / sprite->data1; + sprite->data[2] = sprite->pos1.x << 7; + sprite->data[3] = -0x1400 / sprite->data[1]; + sprite->data[4] = sprite->pos1.y << 7; + sprite->data[5] = 0xA00 / sprite->data[1]; sprite->oam.matrixNum = 24; } @@ -3125,17 +3125,17 @@ void sub_80CE670(struct Sprite* sprite) void sub_80CE798(struct Sprite* sprite) { - sprite->data2 += sprite->data3; - sprite->data4 += sprite->data5; - sprite->pos1.x = sprite->data2 >> 7; - sprite->pos1.y = sprite->data4 >> 7; - if (--sprite->data1 == 1) + sprite->data[2] += sprite->data[3]; + sprite->data[4] += sprite->data[5]; + sprite->pos1.x = sprite->data[2] >> 7; + sprite->pos1.y = sprite->data[4] >> 7; + if (--sprite->data[1] == 1) { - sprite->pos1.x = sprite->data6; - sprite->pos1.y = sprite->data7; + sprite->pos1.x = sprite->data[6]; + sprite->pos1.y = sprite->data[7]; } - if (sprite->data1 == 0) + if (sprite->data[1] == 0) move_anim_8072740(sprite); } @@ -3162,9 +3162,9 @@ void sub_80CE7E0(u8 taskId) while (i <= 1 && (obj = duplicate_obj_of_side_rel2move_in_transparent_mode(0)) >= 0) { gSprites[obj].oam.paletteNum = task->data[1]; - gSprites[obj].data0 = 0; - gSprites[obj].data1 = i << 7; - gSprites[obj].data2 = taskId; + gSprites[obj].data[0] = 0; + gSprites[obj].data[1] = i << 7; + gSprites[obj].data[2] = taskId; gSprites[obj].callback = sub_80CE974; task->data[3]++; i++; @@ -3198,29 +3198,29 @@ void sub_80CE910(u8 taskId) void sub_80CE974(struct Sprite* sprite) { - if (++sprite->data3 > 1) + if (++sprite->data[3] > 1) { - sprite->data3 = 0; - sprite->data0++; + sprite->data[3] = 0; + sprite->data[0]++; } - if (sprite->data0 > 0x40) + if (sprite->data[0] > 0x40) { - gTasks[sprite->data2].data[3]--; + gTasks[sprite->data[2]].data[3]--; obj_delete_but_dont_free_vram(sprite); } else { - sprite->data4 = gSineTable[sprite->data0] / 6; - sprite->data5 = gSineTable[sprite->data0] / 13; - sprite->data1 = (sprite->data1 + sprite->data5) & 0xFF; - sprite->pos2.x = Sin(sprite->data1, sprite->data4); + sprite->data[4] = gSineTable[sprite->data[0]] / 6; + sprite->data[5] = gSineTable[sprite->data[0]] / 13; + sprite->data[1] = (sprite->data[1] + sprite->data[5]) & 0xFF; + sprite->pos2.x = Sin(sprite->data[1], sprite->data[4]); } } void sub_80CEA04(struct Sprite* sprite) { - StoreSpriteCallbackInData6(sprite, move_anim_8072740); + StoreSpriteCallbackInData(sprite, move_anim_8072740); sprite->callback = sub_8078600; } @@ -3277,9 +3277,9 @@ void sub_80CEB0C(struct Sprite* sprite) if ((index = IndexOfSpritePaletteTag(gUnknown_083D712C[gBattleAnimArgs[1]][0])) != 0xFF) sprite->oam.paletteNum = index; - sprite->data1 = gBattleAnimArgs[1]; - sprite->data2 = 0; - sprite->data3 = gBattleAnimArgs[2]; + sprite->data[1] = gBattleAnimArgs[1]; + sprite->data[2] = 0; + sprite->data[3] = gBattleAnimArgs[2]; if (NotInBattle()) { a = 0x30; @@ -3291,9 +3291,9 @@ void sub_80CEB0C(struct Sprite* sprite) b = sub_8077ABC(gBattleAnimBankTarget, 3); } - sprite->data4 = sprite->pos1.x << 4; - sprite->data5 = sprite->pos1.y << 4; - sub_80CEBC4(a - sprite->pos1.x, b - sprite->pos1.y, &sprite->data6, &sprite->data7, 0x28); + sprite->data[4] = sprite->pos1.x << 4; + sprite->data[5] = sprite->pos1.y << 4; + sub_80CEBC4(a - sprite->pos1.x, b - sprite->pos1.y, &sprite->data[6], &sprite->data[7], 0x28); sprite->callback = sub_80CEC1C; } @@ -3320,12 +3320,12 @@ void sub_80CEC1C(struct Sprite* sprite) s16 a; int c; u8 index; - sprite->data0++; - b = sprite->data0 * 5 - ((sprite->data0 * 5 / 256) << 8); - sprite->data4 += sprite->data6; - sprite->data5 += sprite->data7; - sprite->pos1.x = sprite->data4 >> 4; - sprite->pos1.y = sprite->data5 >> 4; + sprite->data[0]++; + b = sprite->data[0] * 5 - ((sprite->data[0] * 5 / 256) << 8); + sprite->data[4] += sprite->data[6]; + sprite->data[5] += sprite->data[7]; + sprite->pos1.x = sprite->data[4] >> 4; + sprite->pos1.y = sprite->data[5] >> 4; sprite->pos2.y = Sin(b, 15); a = (u16)sprite->pos1.y; c = (u16)sprite->pos1.x; @@ -3336,13 +3336,13 @@ void sub_80CEC1C(struct Sprite* sprite) } else { - if (sprite->data3 && ++sprite->data2 > sprite->data3) + if (sprite->data[3] && ++sprite->data[2] > sprite->data[3]) { - sprite->data2 = 0; - if (++sprite->data1 > 3) - sprite->data1 = 0; + sprite->data[2] = 0; + if (++sprite->data[1] > 3) + sprite->data[1] = 0; - index = IndexOfSpritePaletteTag(gUnknown_083D712C[sprite->data1][0]); + index = IndexOfSpritePaletteTag(gUnknown_083D712C[sprite->data[1]][0]); if (index != 0xFF) sprite->oam.paletteNum = index; } @@ -3361,31 +3361,31 @@ void sub_80CECE8(struct Sprite* sprite) sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 2) + gBattleAnimArgs[1]; sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 3) + gBattleAnimArgs[2]; StartSpriteAnim(sprite, gBattleAnimArgs[0]); - sprite->data2 = 0; - sprite->data3 = 0; - sprite->data4 = sprite->pos1.x << 4; - sprite->data5 = sprite->pos1.y << 4; - sprite->data6 = (gBattleAnimArgs[1] << 4) / 5; - sprite->data7 = (gBattleAnimArgs[2] << 7) / 5; + sprite->data[2] = 0; + sprite->data[3] = 0; + sprite->data[4] = sprite->pos1.x << 4; + sprite->data[5] = sprite->pos1.y << 4; + sprite->data[6] = (gBattleAnimArgs[1] << 4) / 5; + sprite->data[7] = (gBattleAnimArgs[2] << 7) / 5; sprite->callback = sub_80CED78; } void sub_80CED78(struct Sprite* sprite) { - sprite->data4 += sprite->data6; - sprite->data5 += sprite->data7; - sprite->pos1.x = sprite->data4 >> 4; - sprite->pos1.y = sprite->data5 >> 4; - if (sprite->data0 > 5 && sprite->data3 == 0) + sprite->data[4] += sprite->data[6]; + sprite->data[5] += sprite->data[7]; + sprite->pos1.x = sprite->data[4] >> 4; + sprite->pos1.y = sprite->data[5] >> 4; + if (sprite->data[0] > 5 && sprite->data[3] == 0) { - sprite->data2 = (sprite->data2 + 16) & 0xFF; - sprite->pos2.x = Cos(sprite->data2, 18); - sprite->pos2.y = Sin(sprite->data2, 18); - if (sprite->data2 == 0) - sprite->data3 = 1; + sprite->data[2] = (sprite->data[2] + 16) & 0xFF; + sprite->pos2.x = Cos(sprite->data[2], 18); + sprite->pos2.y = Sin(sprite->data[2], 18); + if (sprite->data[2] == 0) + sprite->data[3] = 1; } - if (++sprite->data0 == 0x30) + if (++sprite->data[0] == 0x30) move_anim_8074EE0(sprite); } @@ -3404,9 +3404,9 @@ void sub_80CEDF0(struct Sprite* sprite) sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 2) + a; sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 3) + 8; - sprite->data0 = 8; + sprite->data[0] = 8; sprite->callback = sub_80782D8; - StoreSpriteCallbackInData6(sprite, move_anim_8072740); + StoreSpriteCallbackInData(sprite, move_anim_8072740); } void sub_80CEE60(struct Sprite* sprite) @@ -3421,13 +3421,13 @@ void sub_80CEE60(struct Sprite* sprite) sprite->oam.paletteNum = index; a = (gBattleAnimArgs[0] == 0) ? 0xFFE0 : 0x20; - sprite->data0 = 40; - sprite->data1 = sprite->pos1.x; - sprite->data2 = a + sprite->data1; - sprite->data3 = sprite->pos1.y; - sprite->data4 = sprite->data3 - 40; + sprite->data[0] = 40; + sprite->data[1] = sprite->pos1.x; + sprite->data[2] = a + sprite->data[1]; + sprite->data[3] = sprite->pos1.y; + sprite->data[4] = sprite->data[3] - 40; obj_translate_based_on_private_1_2_3_4(sprite); - sprite->data5 = gBattleAnimArgs[3]; + sprite->data[5] = gBattleAnimArgs[3]; sprite->callback = sub_80CEEE8; } @@ -3436,13 +3436,13 @@ void sub_80CEEE8(struct Sprite* sprite) if (sub_8078B5C(sprite) == 0) { s16 a; - a = Sin(sprite->data5, 8); + a = Sin(sprite->data[5], 8); if (sprite->pos2.x < 0) a = -a; sprite->pos2.x += a; - sprite->pos2.y += Sin(sprite->data5, 4); - sprite->data5 = (sprite->data5 + 8) & 0xFF; + sprite->pos2.y += Sin(sprite->data[5], 4); + sprite->data[5] = (sprite->data[5] + 8) & 0xFF; } else { @@ -3471,19 +3471,19 @@ void sub_80CEF9C(struct Sprite* sprite) sub_80CEF44(bank, sprite); a = (GetBankSide(bank) == 0) ? 0 : 1; - sprite->data0 = gBattleAnimArgs[1]; - sprite->data1 = a + 2; + sprite->data[0] = gBattleAnimArgs[1]; + sprite->data[1] = a + 2; StartSpriteAnim(sprite, a); - StoreSpriteCallbackInData6(sprite, sub_80CF008); + StoreSpriteCallbackInData(sprite, sub_80CF008); sprite->callback = sub_8078600; } void sub_80CF008(struct Sprite* sprite) { - if (--sprite->data0 == 0) + if (--sprite->data[0] == 0) { - StoreSpriteCallbackInData6(sprite, move_anim_8072740); - StartSpriteAnim(sprite, sprite->data1); + StoreSpriteCallbackInData(sprite, move_anim_8072740); + StartSpriteAnim(sprite, sprite->data[1]); sprite->callback = sub_8078600; } } @@ -3497,17 +3497,17 @@ void sub_80CF040(struct Sprite* sprite) bank = gBattleAnimBankTarget; sub_80CEF44(bank, sprite); - sprite->data0 = 0; - StoreSpriteCallbackInData6(sprite, sub_80CF088); + sprite->data[0] = 0; + StoreSpriteCallbackInData(sprite, sub_80CF088); sprite->callback = sub_80785E4; } void sub_80CF088(struct Sprite* sprite) { - if (++sprite->data0 > 16) + if (++sprite->data[0] > 16) { StartSpriteAffineAnim(sprite, 1); - StoreSpriteCallbackInData6(sprite, move_anim_8074EE0); + StoreSpriteCallbackInData(sprite, move_anim_8074EE0); sprite->callback = sub_80785E4; } } @@ -3525,18 +3525,18 @@ void sub_80CF0BC(struct Sprite* sprite) if (sprite->pos1.y <= 9) sprite->pos1.y = 10; - sprite->data0 = 1; - sprite->data1 = 0; - sprite->data2 = sprite->subpriority; - sprite->data3 = sprite->subpriority + 4; - sprite->data4 = 0; - StoreSpriteCallbackInData6(sprite, sub_80CF138); + sprite->data[0] = 1; + sprite->data[1] = 0; + sprite->data[2] = sprite->subpriority; + sprite->data[3] = sprite->subpriority + 4; + sprite->data[4] = 0; + StoreSpriteCallbackInData(sprite, sub_80CF138); sprite->callback = sub_80785E4; } void sub_80CF138(struct Sprite* sprite) { - if (++sprite->data4 > 12) + if (++sprite->data[4] > 12) sprite->callback = sub_80CF158; } @@ -3544,10 +3544,10 @@ void sub_80CF158(struct Sprite* sprite) { s16 temp; s16 temp2; - sprite->data1 += 4; - if (sprite->data1 > 0xFE) + sprite->data[1] += 4; + if (sprite->data[1] > 0xFE) { - if (--sprite->data0 == 0) + if (--sprite->data[0] == 0) { sprite->pos2.x = 0; sprite->callback = sub_80CF088; @@ -3555,17 +3555,17 @@ void sub_80CF158(struct Sprite* sprite) } else { - sprite->data1 &= 0xFF; + sprite->data[1] &= 0xFF; } } - if (sprite->data1 > 0x4F) - sprite->subpriority = sprite->data3; + if (sprite->data[1] > 0x4F) + sprite->subpriority = sprite->data[3]; - if (sprite->data1 > 0x9F) - sprite->subpriority = sprite->data2; + if (sprite->data[1] > 0x9F) + sprite->subpriority = sprite->data[2]; - temp = gSineTable[sprite->data1]; + temp = gSineTable[sprite->data[1]]; sprite->pos2.x = (temp2 = temp >> 3) + (temp2 >> 1); } @@ -3581,12 +3581,12 @@ void sub_80CF1C8(struct Sprite* sprite) if (GetBankSide(bank) == 0) { StartSpriteAnim(sprite, 0); - sprite->data0 = 2; + sprite->data[0] = 2; } else { StartSpriteAnim(sprite, 1); - sprite->data0 = 3; + sprite->data[0] = 3; } sprite->callback = sub_80CF228; @@ -3594,18 +3594,18 @@ void sub_80CF1C8(struct Sprite* sprite) void sub_80CF228(struct Sprite* sprite) { - if (++sprite->data1 > 10) + if (++sprite->data[1] > 10) { - sprite->data1 = 0; - StartSpriteAnim(sprite, sprite->data0); - StoreSpriteCallbackInData6(sprite, sub_80CF264); + sprite->data[1] = 0; + StartSpriteAnim(sprite, sprite->data[0]); + StoreSpriteCallbackInData(sprite, sub_80CF264); sprite->callback = sub_8078600; } } void sub_80CF264(struct Sprite* sprite) { - if (++sprite->data1 > 5) + if (++sprite->data[1] > 5) move_anim_8072740(sprite); } @@ -3614,11 +3614,11 @@ void sub_80CF280(struct Sprite* sprite) sub_8078650(sprite); sub_807867C(sprite, gBattleAnimArgs[0]); sprite->pos1.y += gBattleAnimArgs[1]; - sprite->data1 = gBattleAnimArgs[2]; - sprite->data2 = gBattleAnimArgs[4]; - sprite->data3 = gBattleAnimArgs[5]; - sprite->data4 = gBattleAnimArgs[3]; - StoreSpriteCallbackInData6(sprite, move_anim_8074EE0); + sprite->data[1] = gBattleAnimArgs[2]; + sprite->data[2] = gBattleAnimArgs[4]; + sprite->data[3] = gBattleAnimArgs[5]; + sprite->data[4] = gBattleAnimArgs[3]; + StoreSpriteCallbackInData(sprite, move_anim_8074EE0); sprite->callback = sub_8078278; sub_8078278(sprite); } @@ -3632,27 +3632,27 @@ void sub_80CF2D0(struct Sprite* sprite) bank = gBattleAnimBankTarget; sub_80CEF44(bank, sprite); - sprite->data0 = 0; - sprite->data1 = 0; + sprite->data[0] = 0; + sprite->data[1] = 0; sprite->callback = sub_80CF310; } void sub_80CF310(struct Sprite* sprite) { - switch (sprite->data0) + switch (sprite->data[0]) { case 0: sprite->pos2.y -= 3; - if (++sprite->data1 == 6) - sprite->data0++; + if (++sprite->data[1] == 6) + sprite->data[0]++; break; case 1: sprite->pos2.y += 3; - if (--sprite->data1 == 0) - sprite->data0++; + if (--sprite->data[1] == 0) + sprite->data[0]++; break; case 2: - if (++sprite->data1 == 0x40) + if (++sprite->data[1] == 0x40) move_anim_8072740(sprite); break; } @@ -3661,16 +3661,16 @@ void sub_80CF310(struct Sprite* sprite) void sub_80CF374(struct Sprite* sprite) { s16 temp; - gSprites[sprite->data2].pos2.x += sprite->data1; - temp = sprite->data1; - sprite->data1 = -temp; - if (sprite->data0 == 0) + gSprites[sprite->data[2]].pos2.x += sprite->data[1]; + temp = sprite->data[1]; + sprite->data[1] = -temp; + if (sprite->data[0] == 0) { - gSprites[sprite->data2].pos2.x = 0; + gSprites[sprite->data[2]].pos2.x = 0; move_anim_8074EE0(sprite); } - sprite->data0--; + sprite->data[0]--; } void sub_80CF3C4(struct Sprite* sprite) @@ -3689,9 +3689,9 @@ void sub_80CF3C4(struct Sprite* sprite) } sprite->pos1.y += gBattleAnimArgs[1]; - sprite->data0 = gBattleAnimArgs[2]; - sprite->data1 = gBattleAnimArgs[3]; - sprite->data2 = a; + sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[1] = gBattleAnimArgs[3]; + sprite->data[2] = a; sprite->callback = sub_80CF374; sprite->invisible = 1; } @@ -3699,28 +3699,28 @@ void sub_80CF3C4(struct Sprite* sprite) void sub_80CF458(struct Sprite* sprite) { sub_80787B0(sprite, 1); - sprite->data0 = gBattleAnimArgs[2]; - sprite->data1 = gBattleAnimArgs[3]; - sprite->data5 = gBattleAnimArgs[4]; + sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[1] = gBattleAnimArgs[3]; + sprite->data[5] = gBattleAnimArgs[4]; sprite->callback = sub_80782D8; - StoreSpriteCallbackInData6(sprite, sub_80CF490); + StoreSpriteCallbackInData(sprite, sub_80CF490); } void sub_80CF490(struct Sprite* sprite) { - sprite->data0 = sprite->data1; - sprite->data2 = sprite->pos1.x; - sprite->data4 = sprite->pos1.y + 15; + sprite->data[0] = sprite->data[1]; + sprite->data[2] = sprite->pos1.x; + sprite->data[4] = sprite->pos1.y + 15; sprite->callback = sub_8078B34; - StoreSpriteCallbackInData6(sprite, sub_80CF4B8); + StoreSpriteCallbackInData(sprite, sub_80CF4B8); } void sub_80CF4B8(struct Sprite* sprite) { - if (sprite->data5 == 0) + if (sprite->data[5] == 0) move_anim_8072740(sprite); else - sprite->data5--; + sprite->data[5]--; } void sub_80CF4D8(u8 taskId) @@ -3794,23 +3794,23 @@ void sub_80CF610(struct Sprite* sprite) } sprite->callback = sub_8078600; - StoreSpriteCallbackInData6(sprite, move_anim_8072740); + StoreSpriteCallbackInData(sprite, move_anim_8072740); } void sub_80CF690(struct Sprite* sprite) { sub_80787B0(sprite, 0); sprite->callback = sub_80785E4; - StoreSpriteCallbackInData6(sprite, sub_80CF6B4); + StoreSpriteCallbackInData(sprite, sub_80CF6B4); } void sub_80CF6B4(struct Sprite* sprite) { - sprite->data0 = 6; - sprite->data2 = sprite->pos1.x; - sprite->data4 = sprite->pos1.y - 32; + sprite->data[0] = 6; + sprite->data[2] = sprite->pos1.x; + sprite->data[4] = sprite->pos1.y - 32; sprite->callback = sub_8078B34; - StoreSpriteCallbackInData6(sprite, move_anim_8072740); + StoreSpriteCallbackInData(sprite, move_anim_8072740); } //sonic boom @@ -3840,51 +3840,51 @@ void sub_80CF6DC(struct Sprite* sprite) c -= 0x6000; sub_8078FDC(sprite, 0, 0x100, 0x100, c); - sprite->data0 = gBattleAnimArgs[4]; - sprite->data2 = a; - sprite->data4 = b; + sprite->data[0] = gBattleAnimArgs[4]; + sprite->data[2] = a; + sprite->data[4] = b; sprite->callback = sub_8078B34; - StoreSpriteCallbackInData6(sprite, move_anim_8072740); + StoreSpriteCallbackInData(sprite, move_anim_8072740); } void sub_80CF7E0(struct Sprite* sprite) { - if (sprite->data0-- <= 0) + if (sprite->data[0]-- <= 0) { - gTasks[sprite->data7].data[1]--; + gTasks[sprite->data[7]].data[1]--; DestroySprite(sprite); } } void sub_80CF814(struct Sprite* sprite) { - struct Task* task = &gTasks[sprite->data7]; - if (sprite->data0 > task->data[5]) + struct Task* task = &gTasks[sprite->data[7]]; + if (sprite->data[0] > task->data[5]) { - sprite->data5 += sprite->data3; - sprite->data6 += sprite->data4; + sprite->data[5] += sprite->data[3]; + sprite->data[6] += sprite->data[4]; } else { - sprite->data5 -= sprite->data3; - sprite->data6 -= sprite->data4; + sprite->data[5] -= sprite->data[3]; + sprite->data[6] -= sprite->data[4]; } - sprite->data1 += sprite->data5; - sprite->data2 += sprite->data6; + sprite->data[1] += sprite->data[5]; + sprite->data[2] += sprite->data[6]; if (1 & task->data[7]) - sprite->pos2.x = ((u16)sprite->data1 >> 8) * -1; + sprite->pos2.x = ((u16)sprite->data[1] >> 8) * -1; else - sprite->pos2.x = (u16)sprite->data1 >> 8; + sprite->pos2.x = (u16)sprite->data[1] >> 8; if (1 & task->data[8]) - sprite->pos2.y = ((u16)sprite->data2 / 256u) * -1; + sprite->pos2.y = ((u16)sprite->data[2] / 256u) * -1; else - sprite->pos2.y = (u16)sprite->data2 / 256u; + sprite->pos2.y = (u16)sprite->data[2] / 256u; - if (sprite->data0-- <= 0) + if (sprite->data[0]-- <= 0) { - sprite->data0 = 30; + sprite->data[0] = 30; sprite->callback = sub_80CF7E0; } } @@ -3896,22 +3896,22 @@ void sub_80CF8B8(struct Sprite* sprite) s16 b; s16 c; - struct Task* task = &gTasks[sprite->data7]; - sprite->data1 += (-2 & task->data[7]); - sprite->data2 += (-2 & task->data[8]); + struct Task* task = &gTasks[sprite->data[7]]; + sprite->data[1] += (-2 & task->data[7]); + sprite->data[2] += (-2 & task->data[8]); if (1 & task->data[7]) - sprite->pos2.x = ((u16)sprite->data1 >> 8) * -1; + sprite->pos2.x = ((u16)sprite->data[1] >> 8) * -1; else - sprite->pos2.x = (u16)sprite->data1 >> 8; + sprite->pos2.x = (u16)sprite->data[1] >> 8; if (1 & task->data[8]) - sprite->pos2.y = ((u16)sprite->data2 / 256u) * -1; + sprite->pos2.y = ((u16)sprite->data[2] / 256u) * -1; else - sprite->pos2.y = (u16)sprite->data2 / 256u; + sprite->pos2.y = (u16)sprite->data[2] / 256u; - if (sprite->data0-- <= 0) + if (sprite->data[0]-- <= 0) { - sprite->data0 = 8; + sprite->data[0] = 8; task->data[5] = 4; a = sub_81174E0(0x1000); sprite->pos1.x += sprite->pos2.x; @@ -3928,12 +3928,12 @@ void sub_80CF8B8(struct Sprite* sprite) else c = (sprite->pos1.y - task->data[12]) << 8; - sprite->data2 = 0; - sprite->data1 = 0; - sprite->data6 = 0; - sprite->data5 = 0; - sprite->data3 = sub_81174C4(sub_81174C4(b, a), sub_81174E0(0x1C0)); - sprite->data4 = sub_81174C4(sub_81174C4(c, a), sub_81174E0(0x1C0)); + sprite->data[2] = 0; + sprite->data[1] = 0; + sprite->data[6] = 0; + sprite->data[5] = 0; + sprite->data[3] = sub_81174C4(sub_81174C4(b, a), sub_81174E0(0x1C0)); + sprite->data[4] = sub_81174C4(sub_81174C4(c, a), sub_81174E0(0x1C0)); sprite->callback = sub_80CF814; } } @@ -3962,8 +3962,8 @@ void sub_80CFA20(u8 taskId) break; } - sprite->data0 = gTasks[taskId].data[5] - gTasks[taskId].data[6]; - sprite->data7 = taskId; + sprite->data[0] = gTasks[taskId].data[5] - gTasks[taskId].data[6]; + sprite->data[7] = taskId; gTasks[taskId].data[gTasks[taskId].data[1] + 13] = spriteId; gTasks[taskId].data[0] = gTasks[taskId].data[3]; gTasks[taskId].data[1]++; @@ -4075,7 +4075,7 @@ void sub_80CFB04(u8 taskId) void sub_80CFDFC(struct Sprite* sprite) { sub_80787B0(sprite, 0); - sprite->data0 = 0x100 + (IndexOfSpritePaletteTag(gSpriteTemplate_83D75AC.paletteTag) << 4); + sprite->data[0] = 0x100 + (IndexOfSpritePaletteTag(gSpriteTemplate_83D75AC.paletteTag) << 4); sprite->callback = sub_80CFE2C; } @@ -4086,12 +4086,12 @@ void sub_80CFE2C(struct Sprite* sprite) u16* r1; u16* r2; int i; - if (++sprite->data1 == 2) + if (++sprite->data[1] == 2) { - sprite->data1 = 0; - r7 = gPlttBufferFaded[sprite->data0 + 8]; + sprite->data[1] = 0; + r7 = gPlttBufferFaded[sprite->data[0] + 8]; r2 = &gPlttBufferFaded[0x10]; - r1 = &gPlttBufferFaded[sprite->data0 + 9]; + r1 = &gPlttBufferFaded[sprite->data[0] + 9]; for (i = 7; i >= 0; i--) { *r2 = *r1; @@ -4099,8 +4099,8 @@ void sub_80CFE2C(struct Sprite* sprite) r2++; } - gPlttBufferFaded[sprite->data0 + 15] = r7; - if (++sprite->data2 == 0x18) + gPlttBufferFaded[sprite->data[0] + 15] = r7; + if (++sprite->data[2] == 0x18) move_anim_8072740(sprite); } } @@ -4185,34 +4185,34 @@ void sub_80CFE9C(struct Sprite* sprite) var = sub_80790F0(r6 - sprite->pos1.x, r7 - sprite->pos1.y); var += 0xC000; sub_8078FDC(sprite, 0, 0x100, 0x100, var); - sprite->data0 = gBattleAnimArgs[4]; - sprite->data2 = r6; - sprite->data4 = r7; + sprite->data[0] = gBattleAnimArgs[4]; + sprite->data[2] = r6; + sprite->data[4] = r7; sprite->callback = sub_8078C00; - StoreSpriteCallbackInData6(sprite, move_anim_8072740); + StoreSpriteCallbackInData(sprite, move_anim_8072740); } void sub_80CFF50(struct Sprite* sprite) { - sprite->data2 = -16; + sprite->data[2] = -16; sprite->pos1.y += 8; sprite->callback = sub_80CFF68; } void sub_80CFF68(struct Sprite* sprite) { - sprite->data0 += 0x80; - sprite->pos2.x = sprite->data0 >> 8; + sprite->data[0] += 0x80; + sprite->pos2.x = sprite->data[0] >> 8; if (GetBankSide(gBattleAnimBankAttacker) == 0) sprite->pos2.x = -sprite->pos2.x; - sprite->pos2.y = Sin(sprite->data1, sprite->data2); - sprite->data1 += 5; - if (sprite->data1 > 0x7E) + sprite->pos2.y = Sin(sprite->data[1], sprite->data[2]); + sprite->data[1] += 5; + if (sprite->data[1] > 0x7E) { - sprite->data1 = 0; - sprite->data2 /= 2; - if (++sprite->data3 == 2) + sprite->data[1] = 0; + sprite->data[2] /= 2; + if (++sprite->data[3] == 2) move_anim_8072740(sprite); } } @@ -4220,12 +4220,12 @@ void sub_80CFF68(struct Sprite* sprite) void sub_80CFFD8(struct Sprite* sprite) { sub_80787B0(sprite, 1); - sprite->data0 = 20; - sprite->data2 = sub_8077ABC(gBattleAnimBankTarget, 2); - sprite->data4 = sub_8077ABC(gBattleAnimBankTarget, 3); + sprite->data[0] = 20; + sprite->data[2] = sub_8077ABC(gBattleAnimBankTarget, 2); + sprite->data[4] = sub_8077ABC(gBattleAnimBankTarget, 3); sprite->callback = sub_8078B34; sprite->affineAnimPaused = 1; - StoreSpriteCallbackInData6(sprite, sub_80D0030); + StoreSpriteCallbackInData(sprite, sub_80D0030); } void sub_80D0030(struct Sprite* sprite) @@ -4238,34 +4238,34 @@ void sub_80D0030(struct Sprite* sprite) sprite->pos1.y += sprite->pos2.y; sprite->pos2.y = 0; sprite->pos2.x = 0; - ptr = &sprite->data7; + ptr = &sprite->data[7]; for (i = 0; i < 8; i++) { ptr[i - 7] = 0; } rand = Random(); - sprite->data6 = 0xFFF4 - (rand & 7); + sprite->data[6] = 0xFFF4 - (rand & 7); rand = Random(); - sprite->data7 = (rand % 0xA0) + 0xA0; + sprite->data[7] = (rand % 0xA0) + 0xA0; sprite->callback = sub_80D00B4; sprite->affineAnimPaused = 0; } void sub_80D00B4(struct Sprite* sprite) { - sprite->data0 += sprite->data7; - sprite->pos2.x = sprite->data0 >> 8; - if (sprite->data7 & 1) + sprite->data[0] += sprite->data[7]; + sprite->pos2.x = sprite->data[0] >> 8; + if (sprite->data[7] & 1) sprite->pos2.x = -sprite->pos2.x; - sprite->pos2.y = Sin(sprite->data1, sprite->data6); - sprite->data1 += 8; - if (sprite->data1 > 0x7E) + sprite->pos2.y = Sin(sprite->data[1], sprite->data[6]); + sprite->data[1] += 8; + if (sprite->data[1] > 0x7E) { - sprite->data1 = 0; - sprite->data2 /= 2; - if (++sprite->data3 == 1) + sprite->data[1] = 0; + sprite->data[2] /= 2; + if (++sprite->data[3] == 1) move_anim_8072740(sprite); } } @@ -4276,13 +4276,13 @@ void sub_80D0118(struct Sprite* sprite) if (GetBankSide(gBattleAnimBankAttacker) == 0) sprite->pos1.y += 16; - sprite->data0 = gBattleAnimArgs[4]; - sprite->data1 = gBattleAnimArgs[2]; - sprite->data2 = gBattleAnimArgs[5]; - sprite->data3 = gBattleAnimArgs[6]; - sprite->data4 = gBattleAnimArgs[3]; + sprite->data[0] = gBattleAnimArgs[4]; + sprite->data[1] = gBattleAnimArgs[2]; + sprite->data[2] = gBattleAnimArgs[5]; + sprite->data[3] = gBattleAnimArgs[6]; + sprite->data[4] = gBattleAnimArgs[3]; sprite->callback = sub_8078114; - StoreSpriteCallbackInData6(sprite, move_anim_8072740); + StoreSpriteCallbackInData(sprite, move_anim_8072740); sprite->callback(sprite); } @@ -4303,11 +4303,11 @@ void sub_80D0178(struct Sprite* sprite) sprite->pos1.x += r7; sprite->pos1.y += r4; - sprite->data0 = 6; - sprite->data2 = sub_8077ABC(gBattleAnimBankTarget, 2) + r8; - sprite->data4 = sub_8077ABC(gBattleAnimBankTarget, 3) + r6; + sprite->data[0] = 6; + sprite->data[2] = sub_8077ABC(gBattleAnimBankTarget, 2) + r8; + sprite->data[4] = sub_8077ABC(gBattleAnimBankTarget, 3) + r6; sprite->callback = sub_8078B34; - StoreSpriteCallbackInData6(sprite, sub_80D020C); + StoreSpriteCallbackInData(sprite, sub_80D020C); } void sub_80D020C(struct Sprite* sprite) @@ -4333,14 +4333,14 @@ void sub_80D0228(struct Sprite* sprite) sprite->pos1.x += r8; sprite->pos1.y += r4; - sprite->data0 = 6; - sprite->data1 = sprite->pos1.x; - sprite->data2 = sub_8077ABC(gBattleAnimBankTarget, 2) + r9; - sprite->data3 = sprite->pos1.y; - sprite->data4 = sub_8077ABC(gBattleAnimBankTarget, 3) + r6; + sprite->data[0] = 6; + sprite->data[1] = sprite->pos1.x; + sprite->data[2] = sub_8077ABC(gBattleAnimBankTarget, 2) + r9; + sprite->data[3] = sprite->pos1.y; + sprite->data[4] = sub_8077ABC(gBattleAnimBankTarget, 3) + r6; obj_translate_based_on_private_1_2_3_4(sprite); - sprite->data5 = gBattleAnimArgs[0]; - sprite->data6 = sprite->data0; + sprite->data[5] = gBattleAnimArgs[0]; + sprite->data[6] = sprite->data[0]; sprite->callback = sub_80D02D0; } @@ -4354,32 +4354,32 @@ void sub_80D02D0(struct Sprite* sprite) sprite->pos1.y += sprite->pos2.y; sprite->pos2.x = 2; sprite->pos2.y = -2; - sprite->data0 = sprite->data6; - sprite->data1 ^= 1; - sprite->data2 ^= 1; - sprite->data4 = 0; - sprite->data3 = 0; + sprite->data[0] = sprite->data[6]; + sprite->data[1] ^= 1; + sprite->data[2] ^= 1; + sprite->data[4] = 0; + sprite->data[3] = 0; sprite->callback = sub_80D0344; } } void sub_80D0344(struct Sprite* sprite) { - if (sprite->data3) + if (sprite->data[3]) { sprite->pos2.x = -sprite->pos2.x; sprite->pos2.y = -sprite->pos2.y; } - sprite->data3 ^= 1; - if (++sprite->data4 == 0x33) + sprite->data[3] ^= 1; + if (++sprite->data[4] == 0x33) { sprite->pos2.y = 0; sprite->pos2.x = 0; - sprite->data4 = 0; - sprite->data3 = 0; + sprite->data[4] = 0; + sprite->data[3] = 0; sprite->animPaused = 0; - StartSpriteAnim(sprite, sprite->data5 ^ 1); + StartSpriteAnim(sprite, sprite->data[5] ^ 1); sprite->callback = sub_80D03A8; } } @@ -4513,9 +4513,9 @@ void sub_80D0614(struct Task* task, u8 taskId) gSprites[r8].subpriority = task->data[7] - task->data[3]; task->data[3]++; task->data[6]++; - gSprites[r8].data0 = 16; - gSprites[r8].data1 = taskId; - gSprites[r8].data2 = 6; + gSprites[r8].data[0] = 16; + gSprites[r8].data[1] = taskId; + gSprites[r8].data[2] = 6; gSprites[r8].callback = sub_80D0704; obj_id_set_rotscale(r8, task->data[4], task->data[4], 0); gSprites[r8].oam.affineMode = 1; @@ -4649,9 +4649,9 @@ _080D0700: .4byte sub_80D0704\n\ void sub_80D0704(struct Sprite* sprite) { - if (--sprite->data0 == 0) + if (--sprite->data[0] == 0) { - gTasks[sprite->data1].data[sprite->data2]--; + gTasks[sprite->data[1]].data[sprite->data[2]]--; FreeOamMatrix(sprite->oam.matrixNum); obj_delete_but_dont_free_vram(sprite); } @@ -4749,21 +4749,21 @@ void sub_80D0930(struct Sprite* sprite) { StartSpriteAnim(sprite, 0); sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 2) + 32; - sprite->data1 = 0x40; + sprite->data[1] = 0x40; } else { StartSpriteAnim(sprite, 1); sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 2) - 32; - sprite->data1 = -0x40; + sprite->data[1] = -0x40; } sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 3); - sprite->data0 = 0x34; - sprite->data2 = 0; - sprite->data3 = 0; - sprite->data4 = 0; - StoreSpriteCallbackInData6(sprite, move_anim_8072740); + sprite->data[0] = 0x34; + sprite->data[2] = 0; + sprite->data[3] = 0; + sprite->data[4] = 0; + StoreSpriteCallbackInData(sprite, move_anim_8072740); sprite->callback = sub_8078394; } @@ -4785,7 +4785,7 @@ void sub_80D09C0(struct Sprite* sprite) if (sprite->pos1.y <= 7) sprite->pos1.y = 8; - StoreSpriteCallbackInData6(sprite, move_anim_8074EE0); + StoreSpriteCallbackInData(sprite, move_anim_8074EE0); sprite->callback = sub_80785E4; } @@ -5085,67 +5085,67 @@ void sub_80D0E30(struct Sprite* sprite) { sprite->pos1.x = sub_8077ABC(gBattleAnimBankTarget, 0) - 16; sprite->pos1.y = sub_8077FC0(gBattleAnimBankTarget) + 16; - sprite->data0 = 0; - sprite->data1 = 0; - sprite->data2 = 0; - sprite->data3 = 16; - sprite->data4 = 0; - sprite->data5 = sub_807A100(gBattleAnimBankTarget, 0) + 2; - sprite->data6 = sub_8076F98(0x3F); + sprite->data[0] = 0; + sprite->data[1] = 0; + sprite->data[2] = 0; + sprite->data[3] = 16; + sprite->data[4] = 0; + sprite->data[5] = sub_807A100(gBattleAnimBankTarget, 0) + 2; + sprite->data[6] = sub_8076F98(0x3F); sprite->callback = sub_80D0E8C; } void sub_80D0E8C(struct Sprite* sprite) { - switch (sprite->data0) + switch (sprite->data[0]) { case 0: - if (++sprite->data2 > 1) + if (++sprite->data[2] > 1) { - sprite->data2 = 0; + sprite->data[2] = 0; sprite->invisible = !sprite->invisible; } - if (++sprite->data1 > 16) + if (++sprite->data[1] > 16) { sprite->invisible = 0; - sprite->data0++; + sprite->data[0]++; } break; case 1: - if (++sprite->data1 > 3 && sprite->data2 < sprite->data5) + if (++sprite->data[1] > 3 && sprite->data[2] < sprite->data[5]) { - sprite->data1 = 0; + sprite->data[1] = 0; sprite->pos1.y -= 1; - sprite->data2++; - if (sprite->data2 % 10 == 0) - PlaySE12WithPanning(0xCD, sprite->data6); + sprite->data[2]++; + if (sprite->data[2] % 10 == 0) + PlaySE12WithPanning(0xCD, sprite->data[6]); } - sprite->data4 += sprite->data3; - if (sprite->data4 > 31) + sprite->data[4] += sprite->data[3]; + if (sprite->data[4] > 31) { - sprite->data4 = 0x40 - sprite->data4; - sprite->data3 *= -1; + sprite->data[4] = 0x40 - sprite->data[4]; + sprite->data[3] *= -1; } - else if (sprite->data4 <= -32) + else if (sprite->data[4] <= -32) { - sprite->data4 = -0x40 - sprite->data4; - sprite->data3 *= -1; + sprite->data[4] = -0x40 - sprite->data[4]; + sprite->data[3] *= -1; } - sprite->pos2.x = sprite->data4; - if (sprite->data5 == sprite->data2) + sprite->pos2.x = sprite->data[4]; + if (sprite->data[5] == sprite->data[2]) { - sprite->data1 = 0; - sprite->data2 = 0; - sprite->data0++; + sprite->data[1] = 0; + sprite->data[2] = 0; + sprite->data[0]++; } break; case 2: - if (++sprite->data2 > 1) + if (++sprite->data[2] > 1) { - sprite->data2 = 0; + sprite->data[2] = 0; sprite->invisible = !sprite->invisible; } - if (++sprite->data1 > 16) + if (++sprite->data[1] > 16) { sprite->invisible = 0; move_anim_8072740(sprite); @@ -5269,11 +5269,11 @@ void sub_80D10B8(struct Sprite* sprite) sp0 -= gBattleAnimArgs[3]; sp1 += gBattleAnimArgs[4]; - sprite->pos1.x = sprite->data1 = r9; - sprite->pos1.y = sprite->data3 = r6; - sprite->data2 = sp0; - sprite->data4 = sp1; - sprite->data0 = gBattleAnimArgs[0]; + sprite->pos1.x = sprite->data[1] = r9; + sprite->pos1.y = sprite->data[3] = r6; + sprite->data[2] = sp0; + sprite->data[4] = sp1; + sprite->data[0] = gBattleAnimArgs[0]; obj_translate_based_on_private_1_2_3_4(sprite); sprite->callback = sub_80D1098; sub_80D1098(sprite); @@ -5297,27 +5297,27 @@ void sub_80D1368(struct Sprite* sprite) s16 r1; sub_80787B0(sprite, 0); r1 = (GetBankSide(gBattleAnimBankAttacker)) ? -0xA0 : 0xA0; - sprite->data0 = 0x380; - sprite->data1 = r1; - sprite->data7 = gBattleAnimArgs[2]; + sprite->data[0] = 0x380; + sprite->data[1] = r1; + sprite->data[7] = gBattleAnimArgs[2]; sprite->callback = sub_80D13AC; } void sub_80D13AC(struct Sprite* sprite) { s16 add; - sprite->pos2.y -= (sprite->data0 >> 8); - sprite->pos2.x = sprite->data1 >> 8; - sprite->data0 -= 32; + sprite->pos2.y -= (sprite->data[0] >> 8); + sprite->pos2.x = sprite->data[1] >> 8; + sprite->data[0] -= 32; add = (GetBankSide(gBattleAnimBankAttacker)) ? -0xA0 : 0xA0; - sprite->data1 += add; + sprite->data[1] += add; if (sprite->pos2.y > 0) { sprite->pos1.y += sprite->pos2.y; sprite->pos1.x += sprite->pos2.x; sprite->pos2.y = 0; sprite->pos2.x = 0; - sprite->data0 = 0; + sprite->data[0] = 0; StartSpriteAffineAnim(sprite, 1); sprite->callback = sub_80D1424; } @@ -5325,7 +5325,7 @@ void sub_80D13AC(struct Sprite* sprite) void sub_80D1424(struct Sprite* sprite) { - if (sprite->data0++ > 19) + if (sprite->data[0]++ > 19) { StartSpriteAffineAnim(sprite, 2); sprite->callback = sub_80D144C; @@ -5337,8 +5337,8 @@ void sub_80D144C(struct Sprite* sprite) if (sprite->affineAnimEnded) { StartSpriteAffineAnim(sprite, 1); - sprite->data0 = 0; - if (sprite->data7 == 0) + sprite->data[0] = 0; + if (sprite->data[7] == 0) { sprite->oam.tileNum += 16; sprite->callback = sub_80D14C4; @@ -5354,23 +5354,23 @@ void sub_80D144C(struct Sprite* sprite) void sub_80D14C4(struct Sprite* sprite) { sprite->pos2.y -= 2; - if (++sprite->data0 == 9) + if (++sprite->data[0] == 9) { - sprite->data0 = 16; - sprite->data1 = 0; + sprite->data[0] = 16; + sprite->data[1] = 0; REG_BLDCNT = 0x3F40; - REG_BLDALPHA = sprite->data0; + REG_BLDALPHA = sprite->data[0]; sprite->callback = sub_80D1504; } } void sub_80D1504(struct Sprite* sprite) { - if (sprite->data1++ % 3 == 0) + if (sprite->data[1]++ % 3 == 0) { - sprite->data0--; - REG_BLDALPHA = sprite->data0 | ((16 - sprite->data0) << 8); - if (sprite->data0 == 0) + sprite->data[0]--; + REG_BLDALPHA = sprite->data[0] | ((16 - sprite->data[0]) << 8); + if (sprite->data[0] == 0) sprite->callback = sub_80D154C; } } @@ -5380,7 +5380,7 @@ void sub_80D154C(struct Sprite* sprite) if ((u16)gBattleAnimArgs[7] == 0xFFFF) { sprite->invisible = 1; - if (sprite->data7 == 0) + if (sprite->data[7] == 0) sprite->callback = sub_80D158C; else sprite->callback = move_anim_8072740; @@ -5588,8 +5588,8 @@ void sub_80D1930(u8 taskId) spriteId = CreateSprite(&gSpriteTemplate_83D79E8, task->data[14], task->data[15], 0); if (spriteId != MAX_SPRITES) { - gSprites[spriteId].data0 = taskId; - gSprites[spriteId].data1 = 13; + gSprites[spriteId].data[0] = taskId; + gSprites[spriteId].data[1] = 13; gSprites[spriteId].pos2.x = gUnknown_083D7A00[task->data[2]][0]; gSprites[spriteId].pos2.y = gUnknown_083D7A00[task->data[2]][1]; task->data[13]++; @@ -5611,10 +5611,10 @@ void sub_80D1930(u8 taskId) void sub_80D1A70(struct Sprite* sprite) { - sprite->invisible = gTasks[sprite->data0].data[5]; + sprite->invisible = gTasks[sprite->data[0]].data[5]; if (sprite->animEnded) { - gTasks[sprite->data0].data[sprite->data1]--; + gTasks[sprite->data[0]].data[sprite->data[1]]--; DestroySprite(sprite); } } @@ -5670,24 +5670,24 @@ void sub_80D1C08(struct Sprite* sprite) if (GetBankSide(gBattleAnimBankAttacker) != 0) gBattleAnimArgs[2] = -gBattleAnimArgs[2]; - sprite->data0 = gBattleAnimArgs[4]; - sprite->data2 = sub_8077ABC(gBattleAnimBankAttacker, 0) + gBattleAnimArgs[2]; - sprite->data4 = sub_8077ABC(gBattleAnimBankAttacker, 1) + gBattleAnimArgs[3]; + sprite->data[0] = gBattleAnimArgs[4]; + sprite->data[2] = sub_8077ABC(gBattleAnimBankAttacker, 0) + gBattleAnimArgs[2]; + sprite->data[4] = sub_8077ABC(gBattleAnimBankAttacker, 1) + gBattleAnimArgs[3]; sprite->callback = sub_8078B34; - StoreSpriteCallbackInData6(sprite, move_anim_8072740); + StoreSpriteCallbackInData(sprite, move_anim_8072740); sub_80D1BA8(sprite, gBattleAnimArgs[5], gBattleAnimArgs[6]); } void sub_80D1C80(struct Sprite* sprite) { - if (++sprite->data0 == 1) + if (++sprite->data[0] == 1) sub_80787B0(sprite, 0); - sprite->pos2.x = Sin(sprite->data1, 8); - sprite->pos2.y = sprite->data2 >> 8; - sprite->data1 = (sprite->data1 + 7) & 0xFF; - sprite->data2 -= 0x80; - if (sprite->data0 == 0x3C) + sprite->pos2.x = Sin(sprite->data[1], 8); + sprite->pos2.y = sprite->data[2] >> 8; + sprite->data[1] = (sprite->data[1] + 7) & 0xFF; + sprite->data[2] -= 0x80; + if (sprite->data[0] == 0x3C) move_anim_8072740(sprite); } @@ -5797,11 +5797,11 @@ void sub_80D1EC8(u8 taskId) void sub_80D1F58(struct Sprite* sprite) { sub_80787B0(sprite, 1); - sprite->data0 = 0x5F; - sprite->data1 = sprite->pos1.x; - sprite->data2 = sub_8077ABC(gBattleAnimBankTarget, 2); - sprite->data3 = sprite->pos1.y; - sprite->data4 = sub_8077ABC(gBattleAnimBankTarget, 3); + sprite->data[0] = 0x5F; + sprite->data[1] = sprite->pos1.x; + sprite->data[2] = sub_8077ABC(gBattleAnimBankTarget, 2); + sprite->data[3] = sprite->pos1.y; + sprite->data[4] = sub_8077ABC(gBattleAnimBankTarget, 3); obj_translate_based_on_private_1_2_3_4(sprite); sprite->callback = sub_80D1FA4; } @@ -5810,8 +5810,8 @@ void sub_80D1FA4(struct Sprite* sprite) { if (sub_8078B5C(sprite) == 0) { - sprite->pos2.y += Sin(sprite->data5, 14); - sprite->data5 = (sprite->data5 + 4) & 0xFF; + sprite->pos2.y += Sin(sprite->data[5], 14); + sprite->data[5] = (sprite->data[5] + 4) & 0xFF; } else { @@ -5821,24 +5821,24 @@ void sub_80D1FA4(struct Sprite* sprite) void sub_80D1FDC(struct Sprite* sprite) { - if (sprite->data0 == 0) + if (sprite->data[0] == 0) { - sprite->data1 = gBattleAnimArgs[0]; - sprite->data2 = gBattleAnimArgs[1]; - sprite->data0++; + sprite->data[1] = gBattleAnimArgs[0]; + sprite->data[2] = gBattleAnimArgs[1]; + sprite->data[0]++; } else { - sprite->data4 += sprite->data1; - sprite->pos2.x = sprite->data4 >> 8; - sprite->pos2.y = Sin(sprite->data3, sprite->data2); - sprite->data3 = (sprite->data3 + 3) & 0xFF; - if (sprite->data3 > 0x64) + sprite->data[4] += sprite->data[1]; + sprite->pos2.x = sprite->data[4] >> 8; + sprite->pos2.y = Sin(sprite->data[3], sprite->data[2]); + sprite->data[3] = (sprite->data[3] + 3) & 0xFF; + if (sprite->data[3] > 0x64) { - sprite->invisible = sprite->data3 % 2; + sprite->invisible = sprite->data[3] % 2; } - if (sprite->data3 > 0x78) + if (sprite->data[3] > 0x78) { move_anim_8072740(sprite); } @@ -5849,23 +5849,23 @@ void sub_80D2064(struct Sprite* sprite) { sprite->pos1.x = gBattleAnimArgs[0]; sprite->pos1.y = 0xA0; - sprite->data0 = gBattleAnimArgs[2]; - sprite->data1 = gBattleAnimArgs[1]; + sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[1] = gBattleAnimArgs[1]; sprite->callback = sub_80782D8; - StoreSpriteCallbackInData6(sprite, sub_80D2094); + StoreSpriteCallbackInData(sprite, sub_80D2094); } void sub_80D2094(struct Sprite* sprite) { s16 y; - sprite->data2 += sprite->data1; - sprite->pos2.y = -((u16)sprite->data2 >> 8); - sprite->pos2.x = Sin(sprite->data3, 4); - sprite->data3 = (sprite->data3 + 3) & 0xFF; + sprite->data[2] += sprite->data[1]; + sprite->pos2.y = -((u16)sprite->data[2] >> 8); + sprite->pos2.x = Sin(sprite->data[3], 4); + sprite->data[3] = (sprite->data[3] + 3) & 0xFF; y = sprite->pos1.y + sprite->pos2.y; if (y <= 0x48) { - sprite->invisible = sprite->data3 % 2; + sprite->invisible = sprite->data[3] % 2; if (y <= 0x40) move_anim_8072740(sprite); } @@ -6078,41 +6078,41 @@ void sub_80D26A4(struct Sprite* sprite) sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 2); sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 3); sprite->affineAnimPaused = 1; - sprite->data0 = gBattleAnimArgs[0]; - sprite->data1 = gBattleAnimArgs[1]; - sprite->data7 = sub_8079E90(gBattleAnimBankAttacker); + sprite->data[0] = gBattleAnimArgs[0]; + sprite->data[1] = gBattleAnimArgs[1]; + sprite->data[7] = sub_8079E90(gBattleAnimBankAttacker); sprite->callback = sub_80D2704; sub_80D2704(sprite); } void sub_80D2704(struct Sprite* sprite) { - if ((u16)(sprite->data1 - 0x40) <= 0x7F) - sprite->subpriority = sprite->data7 + 1; + if ((u16)(sprite->data[1] - 0x40) <= 0x7F) + sprite->subpriority = sprite->data[7] + 1; else - sprite->subpriority = sprite->data7 - 1; + sprite->subpriority = sprite->data[7] - 1; - sprite->pos2.x = Sin(sprite->data1, sprite->data2 >> 8); - sprite->pos2.y = Cos(sprite->data1, sprite->data3 >> 8); - sprite->data1 = (sprite->data1 + 9) & 0xFF; - switch (sprite->data5) + sprite->pos2.x = Sin(sprite->data[1], sprite->data[2] >> 8); + sprite->pos2.y = Cos(sprite->data[1], sprite->data[3] >> 8); + sprite->data[1] = (sprite->data[1] + 9) & 0xFF; + switch (sprite->data[5]) { case 1: - sprite->data2 -= 0x400; - sprite->data3 -= 0x100; - if (++sprite->data4 == sprite->data0) + sprite->data[2] -= 0x400; + sprite->data[3] -= 0x100; + if (++sprite->data[4] == sprite->data[0]) { - sprite->data5 = 2; + sprite->data[5] = 2; return; } break; case 0: - sprite->data2 += 0x400; - sprite->data3 += 0x100; - if (++sprite->data4 == sprite->data0) + sprite->data[2] += 0x400; + sprite->data[3] += 0x100; + if (++sprite->data[4] == sprite->data[0]) { - sprite->data4 = 0; - sprite->data5 = 1; + sprite->data[4] = 0; + sprite->data[5] = 1; } break; } @@ -6125,24 +6125,24 @@ void sub_80D27E0(struct Sprite* sprite) { sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 2); sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 3); - sprite->data0 = Sin(gBattleAnimArgs[0], 10); - sprite->data1 = Cos(gBattleAnimArgs[0], 7); + sprite->data[0] = Sin(gBattleAnimArgs[0], 10); + sprite->data[1] = Cos(gBattleAnimArgs[0], 7); sprite->callback = sub_80D2834; } void sub_80D2834(struct Sprite* sprite) { - sprite->pos2.x += sprite->data0; - sprite->pos2.y += sprite->data1; + sprite->pos2.x += sprite->data[0]; + sprite->pos2.y += sprite->data[1]; if (sprite->pos1.x + sprite->pos2.x + 16 > 0x110u || sprite->pos1.y + sprite->pos2.y > 0xA0 || sprite->pos1.y + sprite->pos2.y < -16) move_anim_8072740(sprite); } void sub_80D287C(struct Sprite* sprite) { - sprite->pos2.x += sprite->data0; - sprite->pos2.y += sprite->data1; - if (sprite->data3++ >= sprite->data2) + sprite->pos2.x += sprite->data[0]; + sprite->pos2.y += sprite->data[1]; + if (sprite->data[3]++ >= sprite->data[2]) move_anim_8072740(sprite); } @@ -6150,9 +6150,9 @@ void sub_80D28AC(struct Sprite* sprite) { sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 2); sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 3); - sprite->data0 = Sin(gBattleAnimArgs[0], 10); - sprite->data1 = Cos(gBattleAnimArgs[0], 7); - sprite->data2 = gBattleAnimArgs[1]; + sprite->data[0] = Sin(gBattleAnimArgs[0], 10); + sprite->data[1] = Cos(gBattleAnimArgs[0], 7); + sprite->data[2] = gBattleAnimArgs[1]; sprite->callback = sub_80D287C; } @@ -6171,63 +6171,63 @@ void sub_80D2920(struct Sprite* sprite) void sub_80D2938(struct Sprite* sprite) { s16 r5; - if (sprite->data0 == 0) + if (sprite->data[0] == 0) { sprite->pos1.x += gBattleAnimArgs[0]; sprite->pos1.y += gBattleAnimArgs[1]; } - sprite->data0++; - r5 = (sprite->data0 * 10) & 0xFF; + sprite->data[0]++; + r5 = (sprite->data[0] * 10) & 0xFF; sprite->pos2.x = Sin(r5, 0x50) >> 8; - if (sprite->data0 <= 0x4F) - sprite->pos2.y = (sprite->data0 / 2) + (Cos(r5, 0x50) >> 8); + if (sprite->data[0] <= 0x4F) + sprite->pos2.y = (sprite->data[0] / 2) + (Cos(r5, 0x50) >> 8); - if (sprite->data0 > 0x5A) + if (sprite->data[0] > 0x5A) { - sprite->data2++; - sprite->pos2.x -= sprite->data2 / 2; + sprite->data[2]++; + sprite->pos2.x -= sprite->data[2] / 2; } - if (sprite->data0 > 0x64) + if (sprite->data[0] > 0x64) move_anim_8072740(sprite); } void sub_80D29CC(struct Sprite* sprite) { - sprite->data5++; - sprite->pos2.x = Sin(sprite->data3, 5); - sprite->pos2.y = sprite->data5 / 2; - sprite->data3 = (sprite->data3 + 3) & 0xFF; - if (sprite->data5 > 20) - sprite->invisible = sprite->data5 % 2; + sprite->data[5]++; + sprite->pos2.x = Sin(sprite->data[3], 5); + sprite->pos2.y = sprite->data[5] / 2; + sprite->data[3] = (sprite->data[3] + 3) & 0xFF; + if (sprite->data[5] > 20) + sprite->invisible = sprite->data[5] % 2; - if (sprite->data5 > 30) + if (sprite->data[5] > 30) move_anim_8072740(sprite); } void sub_80D2A38(struct Sprite* sprite) { - if (sprite->data0 == 0) + if (sprite->data[0] == 0) { - sprite->data1 = gBattleAnimArgs[0]; - sprite->data2 = gBattleAnimArgs[1]; - sprite->data0++; + sprite->data[1] = gBattleAnimArgs[0]; + sprite->data[2] = gBattleAnimArgs[1]; + sprite->data[0]++; } else { - sprite->data4 += sprite->data1; - sprite->pos2.x = sprite->data4 >> 8; - sprite->pos2.y = Sin(sprite->data3, sprite->data2); - sprite->data3 = (sprite->data3 + 3) & 0xFF; - if (sprite->data3 > 0x46) + sprite->data[4] += sprite->data[1]; + sprite->pos2.x = sprite->data[4] >> 8; + sprite->pos2.y = Sin(sprite->data[3], sprite->data[2]); + sprite->data[3] = (sprite->data[3] + 3) & 0xFF; + if (sprite->data[3] > 0x46) { sprite->callback = sub_80D29CC; sprite->pos1.x += sprite->pos2.x; sprite->pos1.y += sprite->pos2.y; sprite->pos2.x = 0; sprite->pos2.y = 0; - sprite->data3 = Random() % 0xB4; + sprite->data[3] = Random() % 0xB4; } } } @@ -6237,31 +6237,31 @@ void sub_80D2A38(struct Sprite* sprite) int var; s16 var2; int var3; - if (sprite->data3 == 0) + if (sprite->data[3] == 0) { sprite->pos1.x += gBattleAnimArgs[0]; sprite->pos1.y += gBattleAnimArgs[1]; StartSpriteAnim(sprite, 0); sprite->subpriority = sub_8079E90(gBattleAnimBankTarget) - 1; - sprite->data2 = 1; + sprite->data[2] = 1; } - sprite->data0 += sprite->data2; - var = sprite->data0 * 4; + sprite->data[0] += sprite->data[2]; + var = sprite->data[0] * 4; if (var < 0) var += 0xFF; - sprite->data1 = (sprite->data0 * 4) -(((var) >> 8) << 8); - if (sprite->data1 < 0) - sprite->data1 = 0; + sprite->data[1] = (sprite->data[0] * 4) -(((var) >> 8) << 8); + if (sprite->data[1] < 0) + sprite->data[1] = 0; - var3 = sprite->data1; - var2 = sprite->data0; + var3 = sprite->data[1]; + var2 = sprite->data[0]; var2 /= 4; sprite->pos2.x = Cos(var3, 30 - var2); - var3 = sprite->data1; - var2 = sprite->data0 / 8; + var3 = sprite->data[1]; + var2 = sprite->data[0] / 8; sprite->pos2.x = Sin(var3, 10 - var2); - if (sprite->data1 > 0x80 && sprite->data2 > 0) - sprite->data2 = 0xFFFF; + if (sprite->data[1] > 0x80 && sprite->data[2] > 0) + sprite->data[2] = 0xFFFF; } */ \ No newline at end of file diff --git a/src/debug/matsuda_debug_menu.c b/src/debug/matsuda_debug_menu.c index dcb6fa2d8..0f77d2814 100644 --- a/src/debug/matsuda_debug_menu.c +++ b/src/debug/matsuda_debug_menu.c @@ -564,10 +564,10 @@ static void sub_80AA10C(void) sub_80AA658(3); sub_80AA614(3, zero); spriteId = CreateSprite(&gSpriteTemplate_83C92CC, gUnknown_083C9296[3], gUnknown_083C92A8[1], 5); - gSprites[spriteId].data0 = 1; - gSprites[spriteId].data1 = 1; - gSprites[spriteId].data2 = 3; - gSprites[spriteId].data3 = zero; // only this assignment of zero is necessary. other replacements of 0 with zero do not change the asm, compiler will treat it the same. + gSprites[spriteId].data[0] = 1; + gSprites[spriteId].data[1] = 1; + gSprites[spriteId].data[2] = 3; + gSprites[spriteId].data[3] = zero; // only this assignment of zero is necessary. other replacements of 0 with zero do not change the asm, compiler will treat it the same. } void sub_80AA280(u8 var) // no? @@ -689,51 +689,51 @@ void sub_80AA754(struct Sprite *sprite) { case DPAD_RIGHT: case DPAD_LEFT: - sprite->data0 ^= 1; + sprite->data[0] ^= 1; break; case DPAD_UP: - if (sprite->data1 == 0) - sprite->data1 = 8; + if (sprite->data[1] == 0) + sprite->data[1] = 8; else - sprite->data1--; + sprite->data[1]--; break; case DPAD_DOWN: - if (sprite->data1 == 8) - sprite->data1 = 0; + if (sprite->data[1] == 8) + sprite->data[1] = 0; else - sprite->data1++; + sprite->data[1]++; break; case A_BUTTON: - gUnknown_083C92E4[sprite->data1][sprite->data0](sprite, 1); - sub_80AA614(sprite->data2, sprite->data3); + gUnknown_083C92E4[sprite->data[1]][sprite->data[0]](sprite, 1); + sub_80AA614(sprite->data[2], sprite->data[3]); break; case B_BUTTON: - gUnknown_083C92E4[sprite->data1][sprite->data0](sprite, -1); - sub_80AA614(sprite->data2, sprite->data3); + gUnknown_083C92E4[sprite->data[1]][sprite->data[0]](sprite, -1); + sub_80AA614(sprite->data[2], sprite->data[3]); break; case R_BUTTON: - gUnknown_083C92E4[sprite->data1][sprite->data0](sprite, 10); - sub_80AA614(sprite->data2, sprite->data3); + gUnknown_083C92E4[sprite->data[1]][sprite->data[0]](sprite, 10); + sub_80AA614(sprite->data[2], sprite->data[3]); break; case L_BUTTON: - gUnknown_083C92E4[sprite->data1][sprite->data0](sprite, -10); - sub_80AA614(sprite->data2, sprite->data3); + gUnknown_083C92E4[sprite->data[1]][sprite->data[0]](sprite, -10); + sub_80AA614(sprite->data[2], sprite->data[3]); break; case START_BUTTON: sub_80AAD08(sprite, 1); break; } - sprite->pos1.x = gUnknown_083C9296[sprite->data0 + sprite->data1 * 2]; - sprite->pos1.y = gUnknown_083C92A8[sprite->data1]; + sprite->pos1.x = gUnknown_083C9296[sprite->data[0] + sprite->data[1] * 2]; + sprite->pos1.y = gUnknown_083C92A8[sprite->data[1]]; } static void sub_80AA8A0(struct Sprite *sprite, s8 var1, u8 var2) { if (var1 == 1) { - sprite->data2 = var2; + sprite->data[2] = var2; sub_80AA280(var2); - sub_80AA658(sprite->data2); + sub_80AA658(sprite->data[2]); } } @@ -771,50 +771,50 @@ static u8 sub_80AA908(u32 a1, u8 a2, s8 a3) // first param is unused. void sub_80AA930(struct Sprite *sprite, s8 var2) { - u8 val = sprite->data2; + u8 val = sprite->data[2]; - gContestMons[sprite->data2].cool = sub_80AA908(val, gContestMons[sprite->data2].cool, var2); - sub_80AA340(sprite->data2); + gContestMons[sprite->data[2]].cool = sub_80AA908(val, gContestMons[sprite->data[2]].cool, var2); + sub_80AA340(sprite->data[2]); } void sub_80AA974(struct Sprite *sprite, s8 var2) { - u8 val = sprite->data2; + u8 val = sprite->data[2]; - gContestMons[sprite->data2].cute = sub_80AA908(val, gContestMons[sprite->data2].cute, var2); - sub_80AA388(sprite->data2); + gContestMons[sprite->data[2]].cute = sub_80AA908(val, gContestMons[sprite->data[2]].cute, var2); + sub_80AA388(sprite->data[2]); } void sub_80AA9B8(struct Sprite *sprite, s8 var2) { - u8 val = sprite->data2; + u8 val = sprite->data[2]; - gContestMons[sprite->data2].beauty = sub_80AA908(val, gContestMons[sprite->data2].beauty, var2); - sub_80AA3D0(sprite->data2); + gContestMons[sprite->data[2]].beauty = sub_80AA908(val, gContestMons[sprite->data[2]].beauty, var2); + sub_80AA3D0(sprite->data[2]); } void sub_80AA9FC(struct Sprite *sprite, s8 var2) { - u8 val = sprite->data2; + u8 val = sprite->data[2]; - gContestMons[sprite->data2].smart = sub_80AA908(val, gContestMons[sprite->data2].smart, var2); - sub_80AA418(sprite->data2); + gContestMons[sprite->data[2]].smart = sub_80AA908(val, gContestMons[sprite->data[2]].smart, var2); + sub_80AA418(sprite->data[2]); } void sub_80AAA40(struct Sprite *sprite, s8 var2) { - u8 val = sprite->data2; + u8 val = sprite->data[2]; - gContestMons[sprite->data2].tough = sub_80AA908(val, gContestMons[sprite->data2].tough, var2); - sub_80AA460(sprite->data2); + gContestMons[sprite->data[2]].tough = sub_80AA908(val, gContestMons[sprite->data[2]].tough, var2); + sub_80AA460(sprite->data[2]); } void sub_80AAA84(struct Sprite *sprite, s8 var2) { - u8 val = sprite->data2; + u8 val = sprite->data[2]; - gContestMons[sprite->data2].sheen = sub_80AA908(val, gContestMons[sprite->data2].sheen, var2); - sub_80AA4A8(sprite->data2); + gContestMons[sprite->data[2]].sheen = sub_80AA908(val, gContestMons[sprite->data[2]].sheen, var2); + sub_80AA4A8(sprite->data[2]); } // a similar function is at 0x80AA908, however, it apparently returns the wrong type (u8 vs u16). @@ -832,51 +832,51 @@ static u16 sub_80AAAC8(u32 a1, u16 a2, s8 a3) // first param is unused. void sub_80AAAF0(struct Sprite *sprite, s8 var2) { - u8 val = sprite->data2; + u8 val = sprite->data[2]; - gContestMons[sprite->data2].moves[0] = sub_80AAAC8(val, gContestMons[sprite->data2].moves[0], var2); - sub_80AA4F0(sprite->data2, 0); + gContestMons[sprite->data[2]].moves[0] = sub_80AAAC8(val, gContestMons[sprite->data[2]].moves[0], var2); + sub_80AA4F0(sprite->data[2], 0); } void sub_80AAB30(struct Sprite *sprite, s8 var2) { - u8 val = sprite->data2; + u8 val = sprite->data[2]; - gContestMons[sprite->data2].moves[1] = sub_80AAAC8(val, gContestMons[sprite->data2].moves[1], var2); - sub_80AA4F0(sprite->data2, 1); + gContestMons[sprite->data[2]].moves[1] = sub_80AAAC8(val, gContestMons[sprite->data[2]].moves[1], var2); + sub_80AA4F0(sprite->data[2], 1); } void sub_80AAB70(struct Sprite *sprite, s8 var2) { - u8 val = sprite->data2; + u8 val = sprite->data[2]; - gContestMons[sprite->data2].moves[2] = sub_80AAAC8(val, gContestMons[sprite->data2].moves[2], var2); - sub_80AA4F0(sprite->data2, 2); + gContestMons[sprite->data[2]].moves[2] = sub_80AAAC8(val, gContestMons[sprite->data[2]].moves[2], var2); + sub_80AA4F0(sprite->data[2], 2); } void sub_80AABB0(struct Sprite *sprite, s8 var2) { - u8 val = sprite->data2; + u8 val = sprite->data[2]; - gContestMons[sprite->data2].moves[3] = sub_80AAAC8(val, gContestMons[sprite->data2].moves[3], var2); - sub_80AA4F0(sprite->data2, 3); + gContestMons[sprite->data[2]].moves[3] = sub_80AAAC8(val, gContestMons[sprite->data[2]].moves[3], var2); + sub_80AA4F0(sprite->data[2], 3); } void sub_80AABF0(struct Sprite *sprite, s8 var2) { s8 a = (var2 > 0) ? 1 : -1; - s8 r4 = sprite->data3 + a; + s8 r4 = sprite->data[3] + a; if (r4 < 0) r4 = 0; else if (r4 > 4) r4 = 4; sub_80AA5BC(r4); - sprite->data3 = r4; - gScriptContestCategory = sprite->data3; - sub_80AE398(sprite->data3, gScriptContestRank); - sub_80AA280(sprite->data2); - sub_80AA658(sprite->data2); + sprite->data[3] = r4; + gScriptContestCategory = sprite->data[3]; + sub_80AE398(sprite->data[3], gScriptContestRank); + sub_80AA280(sprite->data[2]); + sub_80AA658(sprite->data[2]); } void sub_80AAC5C(struct Sprite *sprite, s8 var2) @@ -889,8 +889,8 @@ void sub_80AAC5C(struct Sprite *sprite, s8 var2) gScriptContestRank = 3; sub_80AA5E8(gScriptContestRank); sub_80AE398(gScriptContestCategory, gScriptContestRank); - sub_80AA280(sprite->data2); - sub_80AA658(sprite->data2); + sub_80AA280(sprite->data[2]); + sub_80AA658(sprite->data[2]); } void sub_80AACC4(void) @@ -909,7 +909,7 @@ void sub_80AAD08(struct Sprite *sprite, s8 var2) { if (var2 == 1) { - eMatsudaDebugVar = sprite->data3; + eMatsudaDebugVar = sprite->data[3]; SetMainCallback2(sub_80AACC4); BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, 0); } diff --git a/src/engine/main_menu.c b/src/engine/main_menu.c index 031dc49d1..a8375c6dd 100644 --- a/src/engine/main_menu.c +++ b/src/engine/main_menu.c @@ -844,7 +844,7 @@ static void Task_NewGameSpeech6(u8 taskId) gSprites[spriteId].pos1.x = 104; gSprites[spriteId].pos1.y = 72; gSprites[spriteId].invisible = 0; - gSprites[spriteId].data0 = 0; + gSprites[spriteId].data[0] = 0; CreatePokeballSprite(spriteId, gSprites[spriteId].oam.paletteNum, 0x70, 0x3A, 0, 0, 0x20, 0x0000FFFF); gTasks[taskId].func = Task_NewGameSpeech7; gTasks[taskId].tFrameCounter = 0; @@ -1423,9 +1423,9 @@ void nullsub_34(struct Sprite *sprite) void ShrinkPlayerSprite(struct Sprite *sprite) { - u32 y = (sprite->pos1.y << 16) + sprite->data0 + 0xC000; + u32 y = (sprite->pos1.y << 16) + sprite->data[0] + 0xC000; sprite->pos1.y = y >> 16; - sprite->data0 = y; + sprite->data[0] = y; } u8 CreateAzurillSprite(u8 x, u8 y) diff --git a/src/engine/naming_screen.c b/src/engine/naming_screen.c index 92a61eb8f..667a42ac8 100644 --- a/src/engine/naming_screen.c +++ b/src/engine/naming_screen.c @@ -1012,8 +1012,8 @@ static void CursorInit(void) namingScreenData.cursorSpriteId = CreateSprite(&gSpriteTemplate_83CE640, 0, 0, 0); gSprites[namingScreenData.cursorSpriteId].oam.priority = 1; gSprites[namingScreenData.cursorSpriteId].oam.objMode = 1; - gSprites[namingScreenData.cursorSpriteId].data6 = 1; - gSprites[namingScreenData.cursorSpriteId].data6 = 2; + gSprites[namingScreenData.cursorSpriteId].data[6] = 1; + gSprites[namingScreenData.cursorSpriteId].data[6] = 2; SetCursorPos(0, 0); } @@ -1040,18 +1040,18 @@ static void SetCursorPos(s16 x, s16 y) cursorSprite->pos1.x = CursorColToKeyboardCol(x) * 8 + 27; cursorSprite->pos1.y = y * 16 + 80; - cursorSprite->data2 = cursorSprite->data0; - cursorSprite->data3 = cursorSprite->data1; - cursorSprite->data0 = x; - cursorSprite->data1 = y; + cursorSprite->data[2] = cursorSprite->data[0]; + cursorSprite->data[3] = cursorSprite->data[1]; + cursorSprite->data[0] = x; + cursorSprite->data[1] = y; } static void GetCursorPos(s16 *x, s16 *y) { struct Sprite *cursorSprite = &gSprites[namingScreenData.cursorSpriteId]; - *x = cursorSprite->data0; - *y = cursorSprite->data1; + *x = cursorSprite->data[0]; + *y = cursorSprite->data[1]; } static void MoveCursorToOKButton(void) @@ -1061,15 +1061,15 @@ static void MoveCursorToOKButton(void) static void sub_80B6888(u8 a) { - gSprites[namingScreenData.cursorSpriteId].data4 &= -256; - gSprites[namingScreenData.cursorSpriteId].data4 |= a; + gSprites[namingScreenData.cursorSpriteId].data[4] &= -256; + gSprites[namingScreenData.cursorSpriteId].data[4] |= a; StartSpriteAnim(&gSprites[namingScreenData.cursorSpriteId], 0); } static void sub_80B68D8(u8 a) { - gSprites[namingScreenData.cursorSpriteId].data4 &= 0xFF; - gSprites[namingScreenData.cursorSpriteId].data4 |= a << 8; + gSprites[namingScreenData.cursorSpriteId].data[4] &= 0xFF; + gSprites[namingScreenData.cursorSpriteId].data[4] |= a << 8; } static void sub_80B6914(void) @@ -1099,28 +1099,28 @@ void sub_80B6998(struct Sprite *sprite) { if (sprite->animEnded) StartSpriteAnim(sprite, 0); - sprite->invisible = (sprite->data4 & 0xFF); - if (sprite->data0 == COLUMN_COUNT - 1) + sprite->invisible = (sprite->data[4] & 0xFF); + if (sprite->data[0] == COLUMN_COUNT - 1) sprite->invisible = TRUE; - if (sprite->invisible || (sprite->data4 & 0xFF00) == 0 - || sprite->data0 != sprite->data2 || sprite->data1 != sprite->data3) + if (sprite->invisible || (sprite->data[4] & 0xFF00) == 0 + || sprite->data[0] != sprite->data[2] || sprite->data[1] != sprite->data[3]) { - sprite->data5 = 0; - sprite->data6 = 1; - sprite->data7 = 2; + sprite->data[5] = 0; + sprite->data[6] = 1; + sprite->data[7] = 2; } - sprite->data7--; - if (sprite->data7 == 0) + sprite->data[7]--; + if (sprite->data[7] == 0) { - sprite->data5 += sprite->data6; - if (sprite->data5 == 16 || sprite->data5 == 0) - sprite->data6 = -sprite->data6; - sprite->data7 = 2; + sprite->data[5] += sprite->data[6]; + if (sprite->data[5] == 16 || sprite->data[5] == 0) + sprite->data[6] = -sprite->data[6]; + sprite->data[7] = 2; } - if ((sprite->data4 & 0xFF00) != 0) + if ((sprite->data[4] & 0xFF00) != 0) { - s8 gb = sprite->data5; - s8 r = sprite->data5 >> 1; + s8 gb = sprite->data[5]; + s8 r = sprite->data[5] >> 1; u16 index = IndexOfSpritePaletteTag(5) * 16 + 0x0101; MultiplyInvertedPaletteRGBComponents(index, r, gb, gb); @@ -1138,20 +1138,20 @@ static void sub_80B6A80(void) SetSubspriteTables(&gSprites[spriteId1], gSubspriteTables_83CE558); spriteId2 = CreateSprite(&gSpriteTemplate_83CE5F8, 0xCC, 0x4C, 1); - gSprites[spriteId1].data6 = spriteId2; + gSprites[spriteId1].data[6] = spriteId2; SetSubspriteTables(&gSprites[spriteId2], gSubspriteTables_83CE560); spriteId3 = CreateSprite(&gSpriteTemplate_83CE5E0, 0xCC, 0x4B, 2); gSprites[spriteId3].oam.priority = 1; - gSprites[spriteId1].data7 = spriteId3; + gSprites[spriteId1].data[7] = spriteId3; } static void sub_80B6B14(void) { struct Sprite *sprite = &gSprites[namingScreenData.unk10]; - sprite->data0 = 2; - sprite->data1 = namingScreenData.currentPage; + sprite->data[0] = 2; + sprite->data[1] = namingScreenData.currentPage; } static u8 sub_80B6B5C(struct Sprite *); @@ -1169,17 +1169,17 @@ static u8 (*const gUnknown_083CE2B4[])(struct Sprite *) = void sub_80B6B34(struct Sprite *sprite) { - while (gUnknown_083CE2B4[sprite->data0](sprite) != 0) + while (gUnknown_083CE2B4[sprite->data[0]](sprite) != 0) ; } static u8 sub_80B6B5C(struct Sprite *sprite) { - struct Sprite *sprite1 = &gSprites[sprite->data6]; - struct Sprite *sprite2 = &gSprites[sprite->data7]; + struct Sprite *sprite1 = &gSprites[sprite->data[6]]; + struct Sprite *sprite2 = &gSprites[sprite->data[7]]; sub_80B6C48(namingScreenData.currentPage, sprite1, sprite2); - sprite->data0++; + sprite->data[0]++; return 0; } @@ -1190,30 +1190,30 @@ static u8 sub_80B6B98(struct Sprite *sprite) static u8 sub_80B6B9C(struct Sprite *sprite) { - struct Sprite *r4 = &gSprites[sprite->data6]; - struct Sprite *r5 = &gSprites[sprite->data7]; + struct Sprite *r4 = &gSprites[sprite->data[6]]; + struct Sprite *r5 = &gSprites[sprite->data[7]]; r4->pos2.y++; if (r4->pos2.y > 7) { - sprite->data0++; + sprite->data[0]++; r4->pos2.y = -4; r4->invisible = TRUE; - sub_80B6C48(((u8)sprite->data1 + 1) % 3, r4, r5); + sub_80B6C48(((u8)sprite->data[1] + 1) % 3, r4, r5); } return 0; } static u8 sub_80B6C08(struct Sprite *sprite) { - struct Sprite *r2 = &gSprites[sprite->data6]; + struct Sprite *r2 = &gSprites[sprite->data[6]]; r2->invisible = FALSE; r2->pos2.y++; if (r2->pos2.y >= 0) { r2->pos2.y = 0; - sprite->data0 = 1; + sprite->data[0] = 1; } return 0; } @@ -1255,7 +1255,7 @@ static void sub_80B6D04(void) { spriteId = CreateSprite(&gSpriteTemplate_83CE670, r1, 0x2C, 0); gSprites[spriteId].oam.priority = 3; - gSprites[spriteId].data0 = i; + gSprites[spriteId].data[0] = i; } } @@ -1263,12 +1263,12 @@ void sub_80B6D9C(struct Sprite *sprite) { const s16 arr[] = {0, -4, -2, -1}; - if (sprite->data0 == 0 || --sprite->data0 == 0) + if (sprite->data[0] == 0 || --sprite->data[0] == 0) { - sprite->data0 = 8; - sprite->data1 = (sprite->data1 + 1) & 3; + sprite->data[0] = 8; + sprite->data[1] = (sprite->data[1] + 1) & 3; } - sprite->pos2.x = arr[sprite->data1]; + sprite->pos2.x = arr[sprite->data[1]]; } void sub_80B6DE8(struct Sprite *sprite) @@ -1277,20 +1277,20 @@ void sub_80B6DE8(struct Sprite *sprite) u8 var; var = GetTextCaretPosition(); - if (var != (u8)sprite->data0) + if (var != (u8)sprite->data[0]) { sprite->pos2.y = 0; - sprite->data1 = 0; - sprite->data2 = 0; + sprite->data[1] = 0; + sprite->data[2] = 0; } else { - sprite->pos2.y = arr[sprite->data1]; - sprite->data2++; - if (sprite->data2 > 8) + sprite->pos2.y = arr[sprite->data[1]]; + sprite->data[2]++; + if (sprite->data[2] > 8) { - sprite->data1 = (sprite->data1 + 1) & 3; - sprite->data2 = 0; + sprite->data[1] = (sprite->data[1] + 1) & 3; + sprite->data[2] = 0; } } } diff --git a/src/engine/reset_rtc_screen.c b/src/engine/reset_rtc_screen.c index 198bffaa7..5701c1185 100644 --- a/src/engine/reset_rtc_screen.c +++ b/src/engine/reset_rtc_screen.c @@ -149,10 +149,10 @@ const u8 gUnknown_08376500[] = _(" : "); void SpriteCB_ResetRtcCusor0(struct Sprite *sprite) { - int state = gTasks[sprite->data0].data[2]; - if (state != sprite->data1) + int state = gTasks[sprite->data[0]].data[2]; + if (state != sprite->data[1]) { - sprite->data1 = state; + sprite->data[1] = state; switch (state) { case 1: @@ -199,10 +199,10 @@ void SpriteCB_ResetRtcCusor0(struct Sprite *sprite) void SpriteCB_ResetRtcCusor1(struct Sprite *sprite) { - int state = gTasks[sprite->data0].data[2]; - if (state != sprite->data1) + int state = gTasks[sprite->data[0]].data[2]; + if (state != sprite->data[1]) { - sprite->data1 = state; + sprite->data[1] = state; switch (state) { case 1: @@ -251,13 +251,13 @@ void ResetRtcScreen_CreateCursor(u8 taskId) spriteId = CreateSpriteAtEnd(&gSpriteTemplate_83764E8, 53, 68, 0); gSprites[spriteId].callback = SpriteCB_ResetRtcCusor0; - gSprites[spriteId].data0 = taskId; - gSprites[spriteId].data1 = -1; + gSprites[spriteId].data[0] = taskId; + gSprites[spriteId].data[1] = -1; spriteId = CreateSpriteAtEnd(&gSpriteTemplate_83764E8, 53, 68, 0); gSprites[spriteId].callback = SpriteCB_ResetRtcCusor1; - gSprites[spriteId].data0 = taskId; - gSprites[spriteId].data1 = -1; + gSprites[spriteId].data[0] = taskId; + gSprites[spriteId].data[1] = -1; } void ResetRtcScreen_FreeCursorPalette(void) diff --git a/src/engine/sprite.c b/src/engine/sprite.c index 34ca3802d..69fa860c1 100644 --- a/src/engine/sprite.c +++ b/src/engine/sprite.c @@ -187,14 +187,7 @@ static const struct Sprite sDummySprite = .animPaused = 0, .affineAnimPaused = 0, .animLoopCounter = 0, - .data0 = 0, - .data1 = 0, - .data2 = 0, - .data3 = 0, - .data4 = 0, - .data5 = 0, - .data6 = 0, - .data7 = 0, + .data = {0}, .inUse = 0, .coordOffsetEnabled = 0, .invisible = 0, diff --git a/src/engine/trade.c b/src/engine/trade.c index 41146a22c..729791aff 100644 --- a/src/engine/trade.c +++ b/src/engine/trade.c @@ -2458,10 +2458,10 @@ static void sub_8049ED4(u8 a0) gSprites[gUnknown_03004824->partyIcons[whichParty][i]].invisible = TRUE; } gSprites[gUnknown_03004824->partyIcons[whichParty][whichPokemon]].invisible = FALSE; - gSprites[gUnknown_03004824->partyIcons[whichParty][whichPokemon]].data0 = 20; - gSprites[gUnknown_03004824->partyIcons[whichParty][whichPokemon]].data2 = (gTradeMonSpriteCoords[6 * whichParty + whichPokemon][0] + gTradeMonSpriteCoords[6 * whichParty + whichPokemon + 1][0]) / 2 * 8 + 14; - gSprites[gUnknown_03004824->partyIcons[whichParty][whichPokemon]].data4 = gTradeMonSpriteCoords[6 * whichParty + whichPokemon][1] * 8 - 12; - StoreSpriteCallbackInData6(&gSprites[gUnknown_03004824->partyIcons[whichParty][whichPokemon]], sub_809D62C); + gSprites[gUnknown_03004824->partyIcons[whichParty][whichPokemon]].data[0] = 20; + gSprites[gUnknown_03004824->partyIcons[whichParty][whichPokemon]].data[2] = (gTradeMonSpriteCoords[6 * whichParty + whichPokemon][0] + gTradeMonSpriteCoords[6 * whichParty + whichPokemon + 1][0]) / 2 * 8 + 14; + gSprites[gUnknown_03004824->partyIcons[whichParty][whichPokemon]].data[4] = gTradeMonSpriteCoords[6 * whichParty + whichPokemon][1] * 8 - 12; + StoreSpriteCallbackInData(&gSprites[gUnknown_03004824->partyIcons[whichParty][whichPokemon]], sub_809D62C); gUnknown_03004824->unk_0080[a0] ++; sub_8078A34(&gSprites[gUnknown_03004824->partyIcons[whichParty][whichPokemon]]); HandleDestroyMenuCursors(); @@ -2675,7 +2675,7 @@ static void sub_8049ED4(u8 a0) "\tlsls r0, 2\n" "\tadds r0, r7\n" "\tldr r1, _0804A0A0 @ =sub_809D62C\n" - "\tbl StoreSpriteCallbackInData6\n" + "\tbl StoreSpriteCallbackInData\n" "\tldr r2, _0804A09C @ =gUnknown_03004824\n" "\tldr r1, [r2]\n" "\tadds r1, 0x80\n" @@ -3816,45 +3816,45 @@ static void sub_804AFB8(const struct WindowConfig *windowConfig, u8 *dest, const static void sub_804B058(struct Sprite *sprite) { - if (++ sprite->data0 == 10) + if (++ sprite->data[0] == 10) { PlaySE(SE_BOWA); - sprite->data0 = 0; + sprite->data[0] = 0; } } static void sub_804B07C(struct Sprite *sprite) { - if (sprite->data1 == 0) + if (sprite->data[1] == 0) { - if (++ sprite->data0 == 12) - sprite->data0 = 0; - LoadPalette(&gTradeGlow2PaletteAnimTable[sprite->data0], 16 * (sprite->oam.paletteNum + 16) + 4, 2); + if (++ sprite->data[0] == 12) + sprite->data[0] = 0; + LoadPalette(&gTradeGlow2PaletteAnimTable[sprite->data[0]], 16 * (sprite->oam.paletteNum + 16) + 4, 2); } } static void sub_804B0BC(struct Sprite *sprite) { - sprite->data0 ++; + sprite->data[0] ++; sprite->pos2.y ++; - if (sprite->data0 == 10) + if (sprite->data[0] == 10) DestroySprite(sprite); } static void sub_804B0E0(struct Sprite *sprite) { - sprite->data0 ++; + sprite->data[0] ++; sprite->pos2.y --; - if (sprite->data0 == 10) + if (sprite->data[0] == 10) DestroySprite(sprite); } static void sub_804B104(struct Sprite *sprite) { - if (++ sprite->data0 == 15) + if (++ sprite->data[0] == 15) { PlaySE(SE_W107); - sprite->data0 = 0; + sprite->data[0] = 0; } } @@ -4989,8 +4989,8 @@ static bool8 sub_804C29C(void) gSprites[gUnknown_03004828->unk_00bb].pos2.y += 3; if (gSprites[gUnknown_03004828->unk_00ba].pos2.y <= -0x5a) { - gSprites[gUnknown_03004828->unk_00ba].data1 = 1; - gSprites[gUnknown_03004828->unk_00bb].data1 = 1; + gSprites[gUnknown_03004828->unk_00ba].data[1] = 1; + gSprites[gUnknown_03004828->unk_00bb].data[1] = 1; gUnknown_03004828->unk_00c4 ++; } break; @@ -5036,8 +5036,8 @@ static bool8 sub_804C29C(void) } if (gSprites[gUnknown_03004828->pokePicSpriteIdxs[0]].pos2.y < -0xde) { - gSprites[gUnknown_03004828->unk_00ba].data1 = 0; - gSprites[gUnknown_03004828->unk_00bb].data1 = 0; + gSprites[gUnknown_03004828->unk_00ba].data[1] = 0; + gSprites[gUnknown_03004828->unk_00bb].data[1] = 0; gUnknown_03004828->unk_00c4 ++; gSprites[gUnknown_03004828->pokePicSpriteIdxs[0]].invisible = TRUE; gSprites[gUnknown_03004828->pokePicSpriteIdxs[1]].invisible = TRUE; @@ -5169,7 +5169,7 @@ static bool8 sub_804C29C(void) break; case 63: gUnknown_03004828->unk_0103 = CreateSprite(&gSpriteTemplate_821595C, 0x78, -0x8, 0); - gSprites[gUnknown_03004828->unk_0103].data3 = 0x4a; + gSprites[gUnknown_03004828->unk_0103].data[3] = 0x4a; gSprites[gUnknown_03004828->unk_0103].callback = sub_804D80C; StartSpriteAnim(&gSprites[gUnknown_03004828->unk_0103], 1); StartSpriteAffineAnim(&gSprites[gUnknown_03004828->unk_0103], 2); @@ -5318,47 +5318,47 @@ static void sub_804D63C(void) static void sub_804D6BC(struct Sprite *sprite) { - sprite->pos1.y += sprite->data0 / 10; - sprite->data5 += sprite->data1; - sprite->pos1.x = sprite->data5 / 10; + sprite->pos1.y += sprite->data[0] / 10; + sprite->data[5] += sprite->data[1]; + sprite->pos1.x = sprite->data[5] / 10; if (sprite->pos1.y > 0x4c) { sprite->pos1.y = 0x4c; - sprite->data0 = -(sprite->data0 * sprite->data2) / 100; - sprite->data3 ++; + sprite->data[0] = -(sprite->data[0] * sprite->data[2]) / 100; + sprite->data[3] ++; } if (sprite->pos1.x == 0x78) - sprite->data1 = 0; - sprite->data0 += sprite->data4; - if (sprite->data3 == 4) + sprite->data[1] = 0; + sprite->data[0] += sprite->data[4]; + if (sprite->data[3] == 4) { - sprite->data7 = 1; + sprite->data[7] = 1; sprite->callback = SpriteCallbackDummy; } } static void sub_804D738(struct Sprite *sprite) { - sprite->pos2.y += gTradeBallVerticalVelocityTable[sprite->data0]; - if (sprite->data0 == 22) + sprite->pos2.y += gTradeBallVerticalVelocityTable[sprite->data[0]]; + if (sprite->data[0] == 22) PlaySE(SE_KON); - if (++ sprite->data0 == 44) + if (++ sprite->data[0] == 44) { PlaySE(SE_W025); sprite->callback = sub_804D7AC; - sprite->data0 = 0; + sprite->data[0] = 0; BeginNormalPaletteFade(1 << (16 + sprite->oam.paletteNum), -1, 0, 16, -1); } } static void sub_804D7AC(struct Sprite *sprite) { - if (sprite->data1 == 20) + if (sprite->data[1] == 20) StartSpriteAffineAnim(sprite, 1); - if (++ sprite->data1 > 20) + if (++ sprite->data[1] > 20) { - sprite->pos2.y -= gTradeBallVerticalVelocityTable[sprite->data0]; - if (++ sprite->data0 == 23) + sprite->pos2.y -= gTradeBallVerticalVelocityTable[sprite->data[0]]; + if (++ sprite->data[0] == 23) { DestroySprite(sprite); gUnknown_03004828->unk_00c4 = 14; // Resume the master trade animation @@ -5368,25 +5368,25 @@ static void sub_804D7AC(struct Sprite *sprite) static void sub_804D80C(struct Sprite *sprite) { - if (sprite->data2 == 0) + if (sprite->data[2] == 0) { - if ((sprite->pos1.y += 4) > sprite->data3) + if ((sprite->pos1.y += 4) > sprite->data[3]) { - sprite->data2 ++; - sprite->data0 = 0x16; + sprite->data[2] ++; + sprite->data[0] = 0x16; PlaySE(SE_KON); } } else { - if (sprite->data0 == 0x42) + if (sprite->data[0] == 0x42) PlaySE(SE_KON2); - if (sprite->data0 == 0x5c) + if (sprite->data[0] == 0x5c) PlaySE(SE_KON3); - if (sprite->data0 == 0x6b) + if (sprite->data[0] == 0x6b) PlaySE(SE_KON4); - sprite->pos2.y += gTradeBallVerticalVelocityTable[sprite->data0]; - if (++sprite->data0 == 0x6c) + sprite->pos2.y += gTradeBallVerticalVelocityTable[sprite->data[0]]; + if (++sprite->data[0] == 0x6c) sprite->callback = SpriteCallbackDummy; } } diff --git a/src/field/choose_party.c b/src/field/choose_party.c index 891ee48b8..c3845e48b 100644 --- a/src/field/choose_party.c +++ b/src/field/choose_party.c @@ -430,7 +430,7 @@ static void sub_81225D4(u8 taskId) { if (!gPaletteFade.active) { - u8 r4 = gSprites[gTasks[taskId].data[3] >> 8].data0; + u8 r4 = gSprites[gTasks[taskId].data[3] >> 8].data[0]; DestroyTask(taskId); ewram1B000.unk262 = 1; @@ -880,7 +880,7 @@ static void sub_8123034(u8 taskId) { if (!gPaletteFade.active) { - u8 r4 = gSprites[gTasks[taskId].data[3] >> 8].data0; + u8 r4 = gSprites[gTasks[taskId].data[3] >> 8].data[0]; DestroyTask(taskId); ewram1B000.unk262 = 1; diff --git a/src/field/decoration.c b/src/field/decoration.c index bdeaaf91d..8e6276a2f 100644 --- a/src/field/decoration.c +++ b/src/field/decoration.c @@ -2439,11 +2439,11 @@ void AddDecorationIconObjectFromFieldObject(struct UnkStruct_02038900 * unk_0203 sub_8100874(unk_02038900); sub_810070C(unk_02038900->palette, ((u16 *)gMapHeader.mapData->secondaryTileset->metatiles + 8 * unk_02038900->decoration->tiles[0])[7] >> 12); LoadSpritePalette(&gUnknown_083EC954); - gUnknown_020391A8 = gSprites[gUnknown_03004880.unk4].data0; + gUnknown_020391A8 = gSprites[gUnknown_03004880.unk4].data[0]; gUnknown_03004880.unk4 = CreateSprite(&gSpriteTemplate_83EC93C, gUnknown_083EC900[unk_02038900->decoration->shape].x, gUnknown_083EC900[unk_02038900->decoration->shape].y, 0); } else { - gUnknown_020391A8 = gSprites[gUnknown_03004880.unk4].data0; + gUnknown_020391A8 = gSprites[gUnknown_03004880.unk4].data[0]; gUnknown_03004880.unk4 = AddPseudoFieldObject(unk_02038900->decoration->tiles[0], sub_81009A8, gUnknown_083EC900[unk_02038900->decoration->shape].x, gUnknown_083EC900[unk_02038900->decoration->shape].y, 1); gSprites[gUnknown_03004880.unk4].oam.priority = 1; } @@ -2520,8 +2520,8 @@ void sub_80FF960(u8 taskId) void sub_80FFAB0(u8 taskId) { gTasks[taskId].data[10] = 0; - gSprites[gUnknown_020391A8].data7 = 1; - gSprites[gUnknown_020391A9].data7 = 1; + gSprites[gUnknown_020391A8].data[7] = 1; + gSprites[gUnknown_020391A9].data[7] = 1; sub_810045C(); sub_8100038(taskId); } @@ -2529,8 +2529,8 @@ void sub_80FFAB0(u8 taskId) void sub_80FFB08(u8 taskId) { gTasks[taskId].data[10] = 0; - gSprites[gUnknown_020391A8].data7 = 1; - gSprites[gUnknown_020391A9].data7 = 1; + gSprites[gUnknown_020391A8].data[7] = 1; + gSprites[gUnknown_020391A9].data[7] = 1; sub_810045C(); DisplayItemMessageOnField(taskId, gSecretBaseText_CancelDecorating, sub_8100248, 0); } @@ -3400,13 +3400,13 @@ bool8 sub_8100430(void) void sub_810045C(void) { gUnknown_020391AA = 0; - gSprites[gUnknown_020391A8].data2 = 0; - gSprites[gUnknown_020391A8].data3 = 0; + gSprites[gUnknown_020391A8].data[2] = 0; + gSprites[gUnknown_020391A8].data[3] = 0; } void sub_8100494(u8 taskId) { - if (!gSprites[gUnknown_020391A8].data4) + if (!gSprites[gUnknown_020391A8].data[4]) { if (gTasks[taskId].data[10] == 1) { @@ -3420,29 +3420,29 @@ void sub_8100494(u8 taskId) if ((gMain.heldKeys & DPAD_ANY) == DPAD_UP) { gUnknown_020391AA = DIR_SOUTH; - gSprites[gUnknown_020391A8].data2 = 0; - gSprites[gUnknown_020391A8].data3 = -2; + gSprites[gUnknown_020391A8].data[2] = 0; + gSprites[gUnknown_020391A8].data[3] = -2; gTasks[taskId].data[1]--; } if ((gMain.heldKeys & DPAD_ANY) == DPAD_DOWN) { gUnknown_020391AA = DIR_NORTH; - gSprites[gUnknown_020391A8].data2 = 0; - gSprites[gUnknown_020391A8].data3 = 2; + gSprites[gUnknown_020391A8].data[2] = 0; + gSprites[gUnknown_020391A8].data[3] = 2; gTasks[taskId].data[1]++; } if ((gMain.heldKeys & DPAD_ANY) == DPAD_LEFT) { gUnknown_020391AA = DIR_WEST; - gSprites[gUnknown_020391A8].data2 = -2; - gSprites[gUnknown_020391A8].data3 = 0; + gSprites[gUnknown_020391A8].data[2] = -2; + gSprites[gUnknown_020391A8].data[3] = 0; gTasks[taskId].data[0]--; } if ((gMain.heldKeys & DPAD_ANY) == DPAD_RIGHT) { gUnknown_020391AA = DIR_EAST; - gSprites[gUnknown_020391A8].data2 = 2; - gSprites[gUnknown_020391A8].data3 = 0; + gSprites[gUnknown_020391A8].data[2] = 2; + gSprites[gUnknown_020391A8].data[3] = 0; gTasks[taskId].data[0]++; } if (!sub_8100430() || !sub_810038C(taskId)) @@ -3452,8 +3452,8 @@ void sub_8100494(u8 taskId) } if (gUnknown_020391AA) { - gSprites[gUnknown_020391A8].data4++; - gSprites[gUnknown_020391A8].data4 &= 7; + gSprites[gUnknown_020391A8].data[4]++; + gSprites[gUnknown_020391A8].data[4] &= 7; } if (!gTasks[taskId].data[10]) { @@ -3471,7 +3471,7 @@ void sub_8100494(u8 taskId) void sub_810065C(u8 taskId) { MenuZeroFillWindowRect(0, 0, 29, 19); - gSprites[gUnknown_020391A8].data7 = 0; + gSprites[gUnknown_020391A8].data[7] = 0; gTasks[taskId].data[10] = 0; gTasks[taskId].func = sub_8100494; } @@ -3596,27 +3596,27 @@ void sub_8100930(u8 decoShape) void sub_81009A8(struct Sprite *sprite) { - sprite->data2 = 0; - sprite->data3 = 0; - sprite->data4 = 0; - sprite->data5 = 0; - sprite->data6 = 0; - sprite->data7 = 0; + sprite->data[2] = 0; + sprite->data[3] = 0; + sprite->data[4] = 0; + sprite->data[5] = 0; + sprite->data[6] = 0; + sprite->data[7] = 0; sprite->callback = sub_81009C0; } void sub_81009C0(struct Sprite *sprite) { - if (sprite->data7 == 0) + if (sprite->data[7] == 0) { - if (sprite->data6 < 15) + if (sprite->data[6] < 15) { sprite->invisible = 0; } else { sprite->invisible = 1; } - sprite->data6 = (sprite->data6 + 1) & 0x1f; + sprite->data[6] = (sprite->data[6] + 1) & 0x1f; } else { sprite->invisible = 0; @@ -3760,7 +3760,7 @@ void SetUpPuttingAwayDecorationPlayerAvatar(void) { player_get_direction_lower_nybble(); MenuZeroFillWindowRect(0, 0, 29, 19); - gUnknown_020391A8 = gSprites[gUnknown_03004880.unk4].data0; + gUnknown_020391A8 = gSprites[gUnknown_03004880.unk4].data[0]; sub_81016C8(); gUnknown_03004880.unk4 = CreateSprite(&gSpriteTemplate_83ECA88, 0x78, 0x50, 0); if (gSaveBlock2.playerGender == MALE) @@ -3810,7 +3810,7 @@ void sub_8100E70(u8 taskId) void sub_8100EEC(u8 taskId) { MenuZeroFillWindowRect(0, 0, 29, 19); - gSprites[gUnknown_020391A8].data7 = 0; + gSprites[gUnknown_020391A8].data[7] = 0; gSprites[gUnknown_020391A8].invisible = 0; gSprites[gUnknown_020391A8].callback = sub_8101698; gSprites[gUnknown_020391A9].pos1.x = 0x88; @@ -4198,8 +4198,8 @@ void sub_8101678(void) void sub_8101698(struct Sprite *sprite) { - sprite->data0 = (sprite->data0 + 1) & 0x1f; - if (sprite->data0 >= 16) + sprite->data[0] = (sprite->data[0] + 1) & 0x1f; + if (sprite->data[0] >= 16) { sprite->invisible = TRUE; } else diff --git a/src/field/field_camera.c b/src/field/field_camera.c index a29f4c49f..8384ad8d1 100644 --- a/src/field/field_camera.c +++ b/src/field/field_camera.c @@ -322,8 +322,8 @@ static void CameraUpdateCallback(struct CameraSomething *a) { if (a->unk4 != 0) { - a->unk8 = gSprites[a->unk4].data2; - a->unkC = gSprites[a->unk4].data3; + a->unk8 = gSprites[a->unk4].data[2]; + a->unkC = gSprites[a->unk4].data[3]; } } diff --git a/src/field/field_effect.c b/src/field/field_effect.c index bd78fb632..e15dc906f 100644 --- a/src/field/field_effect.c +++ b/src/field/field_effect.c @@ -886,16 +886,16 @@ void PokecenterHealEffect_0(struct Task *task) void PokecenterHealEffect_1(struct Task *task) { - if (gSprites[task->data[6]].data0 > 1) + if (gSprites[task->data[6]].data[0] > 1) { - gSprites[task->data[7]].data0++; + gSprites[task->data[7]].data[0]++; task->data[0]++; } } void PokecenterHealEffect_2(struct Task *task) { - if (gSprites[task->data[6]].data0 > 4) + if (gSprites[task->data[6]].data[0] > 4) { task->data[0]++; } @@ -903,7 +903,7 @@ void PokecenterHealEffect_2(struct Task *task) void PokecenterHealEffect_3(struct Task *task) { - if (gSprites[task->data[6]].data0 > 6) + if (gSprites[task->data[6]].data[0] > 6) { DestroySprite(&gSprites[task->data[6]]); FieldEffectActiveListRemove(FLDEFF_POKECENTER_HEAL); @@ -949,7 +949,7 @@ void HallOfFameRecordEffect_0(struct Task *task) void HallOfFameRecordEffect_1(struct Task *task) { - if (gSprites[task->data[6]].data0 > 1) + if (gSprites[task->data[6]].data[0] > 1) { task->data[15]++; // was this ever initialized? is this ever used? task->data[0]++; @@ -958,7 +958,7 @@ void HallOfFameRecordEffect_1(struct Task *task) void HallOfFameRecordEffect_2(struct Task *task) { - if (gSprites[task->data[6]].data0 > 4) + if (gSprites[task->data[6]].data[0] > 4) { task->data[0]++; } @@ -966,7 +966,7 @@ void HallOfFameRecordEffect_2(struct Task *task) void HallOfFameRecordEffect_3(struct Task *task) { - if (gSprites[task->data[6]].data0 > 6) + if (gSprites[task->data[6]].data[0] > 6) { DestroySprite(&gSprites[task->data[6]]); FieldEffectActiveListRemove(FLDEFF_HALL_OF_FAME_RECORD); @@ -984,46 +984,46 @@ u8 CreatePokeballGlowSprite(s16 data6, s16 x, s16 y, u16 data5) sprite = &gSprites[spriteId]; sprite->pos2.x = x; sprite->pos2.y = y; - sprite->data5 = data5; - sprite->data6 = data6; - sprite->data7 = spriteId; + sprite->data[5] = data5; + sprite->data[6] = data6; + sprite->data[7] = spriteId; return spriteId; } void SpriteCB_PokeballGlowEffect(struct Sprite *sprite) { - gUnknown_0839F288[sprite->data0](sprite); + gUnknown_0839F288[sprite->data[0]](sprite); } void PokeballGlowEffect_0(struct Sprite *sprite) { u8 endSpriteId; - if (sprite->data1 == 0 || (--sprite->data1) == 0) + if (sprite->data[1] == 0 || (--sprite->data[1]) == 0) { - sprite->data1 = 25; - endSpriteId = CreateSpriteAtEnd(&gSpriteTemplate_839F208, gUnknown_0839F2A8[sprite->data2].x + sprite->pos2.x, gUnknown_0839F2A8[sprite->data2].y + sprite->pos2.y, 0); + sprite->data[1] = 25; + endSpriteId = CreateSpriteAtEnd(&gSpriteTemplate_839F208, gUnknown_0839F2A8[sprite->data[2]].x + sprite->pos2.x, gUnknown_0839F2A8[sprite->data[2]].y + sprite->pos2.y, 0); gSprites[endSpriteId].oam.priority = 2; - gSprites[endSpriteId].data0 = sprite->data7; - sprite->data2++; - sprite->data6--; + gSprites[endSpriteId].data[0] = sprite->data[7]; + sprite->data[2]++; + sprite->data[6]--; PlaySE(SE_BOWA); } - if (sprite->data6 == 0) + if (sprite->data[6] == 0) { - sprite->data1 = 32; - sprite->data0++; + sprite->data[1] = 32; + sprite->data[0]++; } } void PokeballGlowEffect_1(struct Sprite *sprite) { - if ((--sprite->data1) == 0) + if ((--sprite->data[1]) == 0) { - sprite->data0++; - sprite->data1 = 8; - sprite->data2 = 0; - sprite->data3 = 0; - if (sprite->data5) + sprite->data[0]++; + sprite->data[1] = 8; + sprite->data[2] = 0; + sprite->data[3] = 0; + if (sprite->data[5]) { PlayFanfare(BGM_ME_ASA); } @@ -1033,48 +1033,48 @@ void PokeballGlowEffect_1(struct Sprite *sprite) void PokeballGlowEffect_2(struct Sprite *sprite) { u8 phase; - if ((--sprite->data1) == 0) + if ((--sprite->data[1]) == 0) { - sprite->data1 = 8; - sprite->data2++; - sprite->data2 &= 3; - if (sprite->data2 == 0) + sprite->data[1] = 8; + sprite->data[2]++; + sprite->data[2] &= 3; + if (sprite->data[2] == 0) { - sprite->data3++; + sprite->data[3]++; } } - phase = (sprite->data2 + 3) & 3; + phase = (sprite->data[2] + 3) & 3; MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x108, gUnknown_0839F2C0[phase], gUnknown_0839F2C4[phase], gUnknown_0839F2C8[phase]); - phase = (sprite->data2 + 2) & 3; + phase = (sprite->data[2] + 2) & 3; MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x106, gUnknown_0839F2C0[phase], gUnknown_0839F2C4[phase], gUnknown_0839F2C8[phase]); - phase = (sprite->data2 + 1) & 3; + phase = (sprite->data[2] + 1) & 3; MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x102, gUnknown_0839F2C0[phase], gUnknown_0839F2C4[phase], gUnknown_0839F2C8[phase]); - phase = sprite->data2; + phase = sprite->data[2]; MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x105, gUnknown_0839F2C0[phase], gUnknown_0839F2C4[phase], gUnknown_0839F2C8[phase]); MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x103, gUnknown_0839F2C0[phase], gUnknown_0839F2C4[phase], gUnknown_0839F2C8[phase]); - if (sprite->data3 > 2) + if (sprite->data[3] > 2) { - sprite->data0++; - sprite->data1 = 8; - sprite->data2 = 0; + sprite->data[0]++; + sprite->data[1] = 8; + sprite->data[2] = 0; } } void PokeballGlowEffect_3(struct Sprite *sprite) { u8 phase; - if ((--sprite->data1) == 0) + if ((--sprite->data[1]) == 0) { - sprite->data1 = 8; - sprite->data2++; - sprite->data2 &= 3; - if (sprite->data2 == 3) + sprite->data[1] = 8; + sprite->data[2]++; + sprite->data[2] &= 3; + if (sprite->data[2] == 3) { - sprite->data0++; - sprite->data1 = 30; + sprite->data[0]++; + sprite->data[1] = 30; } } - phase = sprite->data2; + phase = sprite->data[2]; MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x108, gUnknown_0839F2C0[phase], gUnknown_0839F2C4[phase], gUnknown_0839F2C8[phase]); MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x106, gUnknown_0839F2C0[phase], gUnknown_0839F2C4[phase], gUnknown_0839F2C8[phase]); MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x102, gUnknown_0839F2C0[phase], gUnknown_0839F2C4[phase], gUnknown_0839F2C8[phase]); @@ -1084,22 +1084,22 @@ void PokeballGlowEffect_3(struct Sprite *sprite) void PokeballGlowEffect_4(struct Sprite *sprite) { - if ((--sprite->data1) == 0) + if ((--sprite->data[1]) == 0) { - sprite->data0++; + sprite->data[0]++; } } void PokeballGlowEffect_5(struct Sprite *sprite) { - sprite->data0++; + sprite->data[0]++; } void PokeballGlowEffect_6(struct Sprite *sprite) { - if (sprite->data5 == 0 || IsFanfareTaskInactive()) + if (sprite->data[5] == 0 || IsFanfareTaskInactive()) { - sprite->data0++; + sprite->data[0]++; } } @@ -1109,7 +1109,7 @@ void PokeballGlowEffect_7(struct Sprite *sprite) void SpriteCB_PokeballGlow(struct Sprite *sprite) { - if (gSprites[sprite->data0].data0 > 4) + if (gSprites[sprite->data[0]].data[0] > 4) { FieldEffectFreeGraphicsResources(sprite); } @@ -1129,9 +1129,9 @@ u8 PokecenterHealEffectHelper(s16 x, s16 y) void SpriteCB_PokecenterMonitor(struct Sprite *sprite) { - if (sprite->data0 != 0) + if (sprite->data[0] != 0) { - sprite->data0 = 0; + sprite->data[0] = 0; sprite->invisible = 0; StartSpriteAnim(sprite, 1); } @@ -1153,21 +1153,21 @@ void HallOfFameRecordEffectHelper(s16 a0, s16 a1, s16 a2, u8 a3) spriteIdAtEnd = CreateSpriteAtEnd(&gSpriteTemplate_839F250, a1, a2, 0); } gSprites[spriteIdAtEnd].invisible = 1; - gSprites[spriteIdAtEnd].data0 = a0; + gSprites[spriteIdAtEnd].data[0] = a0; } void SpriteCB_HallOfFameMonitor(struct Sprite *sprite) { - if (gTasks[sprite->data0].data[15]) + if (gTasks[sprite->data[0]].data[15]) { - if (sprite->data1 == 0 || (--sprite->data1) == 0) + if (sprite->data[1] == 0 || (--sprite->data[1]) == 0) { - sprite->data1 = 16; + sprite->data[1] = 16; sprite->invisible ^= 1; } - sprite->data2++; + sprite->data[2]++; } - if (sprite->data2 > 127) + if (sprite->data[2] > 127) { FieldEffectFreeGraphicsResources(sprite); } @@ -2480,7 +2480,7 @@ void sub_8088228(struct Task *task) void sub_80882B4(struct Task *task) { task->data[5] -= 16; - if (gSprites[task->data[15]].data7) + if (gSprites[task->data[15]].data[7]) { task->data[0]++; } @@ -2607,7 +2607,7 @@ void sub_8088554(struct Task *task) void sub_80885A8(struct Task *task) { sub_80886F8(task); - if (gSprites[task->data[15]].data7) + if (gSprites[task->data[15]].data[7]) { task->data[0]++; } @@ -2827,8 +2827,8 @@ u8 sub_8088830(u32 a0, u32 a1, u32 a2) sprite = &gSprites[monSprite]; sprite->callback = SpriteCallbackDummy; sprite->oam.priority = 0; - sprite->data0 = a0; - sprite->data6 = v0; + sprite->data[0] = a0; + sprite->data[6] = v0; return monSprite; } @@ -2839,14 +2839,14 @@ void sub_8088890(struct Sprite *sprite) if ((sprite->pos1.x -= 20) <= 0x78) { sprite->pos1.x = 0x78; - sprite->data1 = 30; + sprite->data[1] = 30; sprite->callback = sub_80888D4; - if (sprite->data6) + if (sprite->data[6]) { - PlayCry2(sprite->data0, 0, 0x7d, 0xa); + PlayCry2(sprite->data[0], 0, 0x7d, 0xa); } else { - PlayCry1(sprite->data0, 0); + PlayCry1(sprite->data[0], 0); } } } @@ -2855,7 +2855,7 @@ void sub_80888F0(struct Sprite *); void sub_80888D4(struct Sprite *sprite) { - if ((--sprite->data1) == 0) + if ((--sprite->data[1]) == 0) { sprite->callback = sub_80888F0; } @@ -2865,7 +2865,7 @@ void sub_80888F0(struct Sprite *sprite) { if (sprite->pos1.x < -0x40) { - sprite->data7 = 1; + sprite->data[7] = 1; } else { sprite->pos1.x -= 20; @@ -2969,7 +2969,7 @@ u8 FldEff_NPCFlyOut(void) sprite->oam.paletteNum = 0; sprite->oam.priority = 1; sprite->callback = sub_8088BC4; - sprite->data1 = gFieldEffectArguments[0]; + sprite->data[1] = gFieldEffectArguments[0]; PlaySE(SE_W019); return spriteId; } @@ -2977,19 +2977,19 @@ u8 FldEff_NPCFlyOut(void) void sub_8088BC4(struct Sprite *sprite) { struct Sprite *npcSprite; - sprite->pos2.x = Cos(sprite->data2, 0x8c); - sprite->pos2.y = Sin(sprite->data2, 0x48); - sprite->data2 = (sprite->data2 + 4) & 0xff; - if (sprite->data0) + sprite->pos2.x = Cos(sprite->data[2], 0x8c); + sprite->pos2.y = Sin(sprite->data[2], 0x48); + sprite->data[2] = (sprite->data[2] + 4) & 0xff; + if (sprite->data[0]) { - npcSprite = &gSprites[sprite->data1]; + npcSprite = &gSprites[sprite->data[1]]; npcSprite->coordOffsetEnabled = 0; npcSprite->pos1.x = sprite->pos1.x + sprite->pos2.x; npcSprite->pos1.y = sprite->pos1.y + sprite->pos2.y - 8; npcSprite->pos2.x = 0; npcSprite->pos2.y = 0; } - if (sprite->data2 >= 0x80) + if (sprite->data[2] >= 0x80) { FieldEffectStop(sprite, FLDEFF_NPCFLY_OUT); } @@ -3149,7 +3149,7 @@ u8 sub_8088F60(void) u8 sub_8088FA4(u8 spriteId) { - return gSprites[spriteId].data7; + return gSprites[spriteId].data[7]; } void sub_8088FC0(u8 spriteId) @@ -3161,20 +3161,20 @@ void sub_8088FC0(u8 spriteId) sprite->pos1.y = 0x00; sprite->pos2.x = 0; sprite->pos2.y = 0; - memset(&sprite->data0, 0, 8 * sizeof(u16) /* zero all data cells */); - sprite->data6 = 0x40; + memset(&sprite->data[0], 0, 8 * sizeof(u16) /* zero all data cells */); + sprite->data[6] = 0x40; } void sub_8088FFC(u8 a0, u8 a1) { - gSprites[a0].data6 = a1; + gSprites[a0].data[6] = a1; } void sub_8089018(struct Sprite *sprite) { - if (sprite->data7 == 0) + if (sprite->data[7] == 0) { - if (sprite->data0 == 0) + if (sprite->data[0] == 0) { sprite->oam.affineMode = 3; sprite->affineAnims = gSpriteAffineAnimTable_0839F44C; @@ -3182,20 +3182,20 @@ void sub_8089018(struct Sprite *sprite) StartSpriteAffineAnim(sprite, 0); sprite->pos1.x = 0x76; sprite->pos1.y = -0x30; - sprite->data0++; - sprite->data1 = 0x40; - sprite->data2 = 0x100; + sprite->data[0]++; + sprite->data[1] = 0x40; + sprite->data[2] = 0x100; } - sprite->data1 += (sprite->data2 >> 8); - sprite->pos2.x = Cos(sprite->data1, 0x78); - sprite->pos2.y = Sin(sprite->data1, 0x78); - if (sprite->data2 < 0x800) + sprite->data[1] += (sprite->data[2] >> 8); + sprite->pos2.x = Cos(sprite->data[1], 0x78); + sprite->pos2.y = Sin(sprite->data[1], 0x78); + if (sprite->data[2] < 0x800) { - sprite->data2 += 0x60; + sprite->data[2] += 0x60; } - if (sprite->data1 > 0x81) + if (sprite->data[1] > 0x81) { - sprite->data7++; + sprite->data[7]++; sprite->oam.affineMode = 0; FreeOamMatrix(sprite->oam.matrixNum); CalcCenterToCornerVec(sprite, sprite->oam.shape, sprite->oam.size, 0); @@ -3206,29 +3206,29 @@ void sub_8089018(struct Sprite *sprite) void sub_80890D8(struct Sprite *sprite) { struct Sprite *sprite1; - sprite->pos2.x = Cos(sprite->data2, 0x8c); - sprite->pos2.y = Sin(sprite->data2, 0x48); - sprite->data2 = (sprite->data2 + 4) & 0xff; - if (sprite->data6 != 0x40) + sprite->pos2.x = Cos(sprite->data[2], 0x8c); + sprite->pos2.y = Sin(sprite->data[2], 0x48); + sprite->data[2] = (sprite->data[2] + 4) & 0xff; + if (sprite->data[6] != 0x40) { - sprite1 = &gSprites[sprite->data6]; + sprite1 = &gSprites[sprite->data[6]]; sprite1->coordOffsetEnabled = 0; sprite1->pos1.x = sprite->pos1.x + sprite->pos2.x; sprite1->pos1.y = sprite->pos1.y + sprite->pos2.y - 8; sprite1->pos2.x = 0; sprite1->pos2.y = 0; } - if (sprite->data2 >= 0x80) + if (sprite->data[2] >= 0x80) { - sprite->data7 = 1; + sprite->data[7] = 1; } } void sub_808914C(struct Sprite *sprite) { - if (sprite->data7 == 0) + if (sprite->data[7] == 0) { - if (sprite->data0 == 0) + if (sprite->data[0] == 0) { sprite->oam.affineMode = 3; sprite->affineAnims = gSpriteAffineAnimTable_0839F44C; @@ -3236,31 +3236,31 @@ void sub_808914C(struct Sprite *sprite) StartSpriteAffineAnim(sprite, 1); sprite->pos1.x = 0x5e; sprite->pos1.y = -0x20; - sprite->data0++; - sprite->data1 = 0xf0; - sprite->data2 = 0x800; - sprite->data4 = 0x80; + sprite->data[0]++; + sprite->data[1] = 0xf0; + sprite->data[2] = 0x800; + sprite->data[4] = 0x80; } - sprite->data1 += sprite->data2 >> 8; - sprite->data3 += sprite->data2 >> 8; - sprite->data1 &= 0xff; - sprite->pos2.x = Cos(sprite->data1, 0x20); - sprite->pos2.y = Sin(sprite->data1, 0x78); - if (sprite->data2 > 0x100) + sprite->data[1] += sprite->data[2] >> 8; + sprite->data[3] += sprite->data[2] >> 8; + sprite->data[1] &= 0xff; + sprite->pos2.x = Cos(sprite->data[1], 0x20); + sprite->pos2.y = Sin(sprite->data[1], 0x78); + if (sprite->data[2] > 0x100) { - sprite->data2 -= sprite->data4; + sprite->data[2] -= sprite->data[4]; } - if (sprite->data4 < 0x100) + if (sprite->data[4] < 0x100) { - sprite->data4 += 24; + sprite->data[4] += 24; } - if (sprite->data2 < 0x100) + if (sprite->data[2] < 0x100) { - sprite->data2 = 0x100; + sprite->data[2] = 0x100; } - if (sprite->data3 >= 60) + if (sprite->data[3] >= 60) { - sprite->data7++; + sprite->data[7]++; sprite->oam.affineMode = 0; FreeOamMatrix(sprite->oam.matrixNum); sprite->invisible = 1; diff --git a/src/field/field_effect_helpers.c b/src/field/field_effect_helpers.c index 2ad8bdce3..c5b67fd9d 100644 --- a/src/field/field_effect_helpers.c +++ b/src/field/field_effect_helpers.c @@ -89,9 +89,9 @@ void SetUpReflection(struct MapObject *mapObject, struct Sprite *sprite, bool8 f newSprite->affineAnims = gDummySpriteAffineAnimTable; newSprite->affineAnimBeginning = TRUE; newSprite->subspriteMode = 0; - newSprite->data0 = sprite->data0; - newSprite->data1 = mapObject->localId; - newSprite->data7 = flag; + newSprite->data[0] = sprite->data[0]; + newSprite->data[1] = mapObject->localId; + newSprite->data[7] = flag; npc_pal_op(mapObject, newSprite); if (!flag) { @@ -110,10 +110,10 @@ static void npc_pal_op(struct MapObject *mapObject, struct Sprite *sprite) u16 unk_8041e2c[ARRAY_COUNT(gUnknown_08401E2C)]; memcpy(unk_8041e2c, gUnknown_08401E2C, sizeof gUnknown_08401E2C); - sprite->data2 = 0; + sprite->data[2] = 0; if (!GetFieldObjectGraphicsInfo(mapObject->graphicsId)->disableReflectionPaletteLoad && ((whichElement = sub_8057450(mapObject->mapobj_unk_1F)) || (whichElement = sub_8057450(mapObject->mapobj_unk_1E)))) { - sprite->data2 = unk_8041e2c[whichElement - 1]; + sprite->data[2] = unk_8041e2c[whichElement - 1]; npc_pal_op_A(mapObject, sprite->oam.paletteNum); } else @@ -162,9 +162,9 @@ static void sub_81269E0(struct Sprite *sprite) struct MapObject *mapObject; struct Sprite *oldSprite; - mapObject = &gMapObjects[sprite->data0]; + mapObject = &gMapObjects[sprite->data[0]]; oldSprite = &gSprites[mapObject->spriteId]; - if (!mapObject->active || !mapObject->mapobj_bit_17 || mapObject->localId != sprite->data1) + if (!mapObject->active || !mapObject->mapobj_bit_17 || mapObject->localId != sprite->data[1]) { sprite->inUse = FALSE; } @@ -179,13 +179,13 @@ static void sub_81269E0(struct Sprite *sprite) sprite->subspriteTableNum = oldSprite->subspriteTableNum; sprite->invisible = oldSprite->invisible; sprite->pos1.x = oldSprite->pos1.x; - sprite->pos1.y = oldSprite->pos1.y + sub_81268D0(mapObject) + sprite->data2; + sprite->pos1.y = oldSprite->pos1.y + sub_81268D0(mapObject) + sprite->data[2]; sprite->centerToCornerVecX = oldSprite->centerToCornerVecX; sprite->centerToCornerVecY = oldSprite->centerToCornerVecY; sprite->pos2.x = oldSprite->pos2.x; sprite->pos2.y = -oldSprite->pos2.y; sprite->coordOffsetEnabled = oldSprite->coordOffsetEnabled; - if (sprite->data7 == FALSE) + if (sprite->data[7] == FALSE) { sprite->oam.matrixNum = 0; if (oldSprite->oam.matrixNum & 0x8) @@ -224,15 +224,15 @@ void sub_8126BC4(u8 spriteId, u8 animNum, s16 x, s16 y) struct Sprite *sprite; sprite = &gSprites[spriteId]; - if (sprite->invisible || sprite->data0 != x || sprite->data1 != y) + if (sprite->invisible || sprite->data[0] != x || sprite->data[1] != y) { sub_80603CC(x, y, &x2, &y2); sprite = &gSprites[spriteId]; sprite->pos1.x = x2 + 8; sprite->pos1.y = y2 + 8; sprite->invisible = FALSE; - sprite->data0 = x; - sprite->data1 = y; + sprite->data[0] = x; + sprite->data[1] = y; StartSpriteAnim(sprite, animNum - 1); } } @@ -249,10 +249,10 @@ u32 FldEff_Shadow(void) if (spriteId != MAX_SPRITES) { gSprites[spriteId].coordOffsetEnabled = TRUE; - gSprites[spriteId].data0 = gFieldEffectArguments[0]; - gSprites[spriteId].data1 = gFieldEffectArguments[1]; - gSprites[spriteId].data2 = gFieldEffectArguments[2]; - gSprites[spriteId].data3 = (graphicsInfo->height >> 1) - gUnknown_08401E36[graphicsInfo->shadowSize]; + gSprites[spriteId].data[0] = gFieldEffectArguments[0]; + gSprites[spriteId].data[1] = gFieldEffectArguments[1]; + gSprites[spriteId].data[2] = gFieldEffectArguments[2]; + gSprites[spriteId].data[3] = (graphicsInfo->height >> 1) - gUnknown_08401E36[graphicsInfo->shadowSize]; } return 0; } @@ -263,7 +263,7 @@ void oamc_shadow(struct Sprite *sprite) struct MapObject *mapObject; struct Sprite *linkedSprite; - if (TryGetFieldObjectIdByLocalIdAndMap(sprite->data0, sprite->data1, sprite->data2, &mapObjectId)) + if (TryGetFieldObjectIdByLocalIdAndMap(sprite->data[0], sprite->data[1], sprite->data[2], &mapObjectId)) { FieldEffectStop(sprite, FLDEFF_SHADOW); } @@ -273,7 +273,7 @@ void oamc_shadow(struct Sprite *sprite) linkedSprite = &gSprites[mapObject->spriteId]; sprite->oam.priority = linkedSprite->oam.priority; sprite->pos1.x = linkedSprite->pos1.x; - sprite->pos1.y = linkedSprite->pos1.y + sprite->data3; + sprite->pos1.y = linkedSprite->pos1.y + sprite->data[3]; if (!mapObject->active || !mapObject->mapobj_bit_22 || MetatileBehavior_IsPokeGrass(mapObject->mapobj_unk_1E) || MetatileBehavior_IsSurfableWaterOrUnderwater(mapObject->mapobj_unk_1E) || MetatileBehavior_IsSurfableWaterOrUnderwater(mapObject->mapobj_unk_1F) || MetatileBehavior_IsReflective(mapObject->mapobj_unk_1E) || MetatileBehavior_IsReflective(mapObject->mapobj_unk_1F)) { FieldEffectStop(sprite, FLDEFF_SHADOW); @@ -297,12 +297,12 @@ u32 FldEff_TallGrass(void) sprite = &gSprites[spriteId]; sprite->coordOffsetEnabled = TRUE; sprite->oam.priority = gFieldEffectArguments[3]; - sprite->data0 = gFieldEffectArguments[2]; - sprite->data1 = gFieldEffectArguments[0]; - sprite->data2 = gFieldEffectArguments[1]; - sprite->data3 = gFieldEffectArguments[4]; - sprite->data4 = gFieldEffectArguments[5]; - sprite->data5 = gFieldEffectArguments[6]; + sprite->data[0] = gFieldEffectArguments[2]; + sprite->data[1] = gFieldEffectArguments[0]; + sprite->data[2] = gFieldEffectArguments[1]; + sprite->data[3] = gFieldEffectArguments[4]; + sprite->data[4] = gFieldEffectArguments[5]; + sprite->data[5] = gFieldEffectArguments[6]; if (gFieldEffectArguments[7]) { SeekSpriteAnim(sprite, 4); @@ -320,28 +320,28 @@ void unc_grass_normal(struct Sprite *sprite) u8 mapObjectId; struct MapObject *mapObject; - mapNum = sprite->data5 >> 8; - mapGroup = sprite->data5; + mapNum = sprite->data[5] >> 8; + mapGroup = sprite->data[5]; if (gCamera.field_0 && (gSaveBlock1.location.mapNum != mapNum || gSaveBlock1.location.mapGroup != mapGroup)) { - sprite->data1 -= gCamera.x; - sprite->data2 -= gCamera.y; - sprite->data5 = ((u8)gSaveBlock1.location.mapNum << 8) | (u8)gSaveBlock1.location.mapGroup; + sprite->data[1] -= gCamera.x; + sprite->data[2] -= gCamera.y; + sprite->data[5] = ((u8)gSaveBlock1.location.mapNum << 8) | (u8)gSaveBlock1.location.mapGroup; } - localId = sprite->data3 >> 8; - mapNum = sprite->data3; - mapGroup = sprite->data4; - metatileBehavior = MapGridGetMetatileBehaviorAt(sprite->data1, sprite->data2); - if (TryGetFieldObjectIdByLocalIdAndMap(localId, mapNum, mapGroup, &mapObjectId) || !MetatileBehavior_IsTallGrass(metatileBehavior) || (sprite->data7 && sprite->animEnded)) + localId = sprite->data[3] >> 8; + mapNum = sprite->data[3]; + mapGroup = sprite->data[4]; + metatileBehavior = MapGridGetMetatileBehaviorAt(sprite->data[1], sprite->data[2]); + if (TryGetFieldObjectIdByLocalIdAndMap(localId, mapNum, mapGroup, &mapObjectId) || !MetatileBehavior_IsTallGrass(metatileBehavior) || (sprite->data[7] && sprite->animEnded)) { FieldEffectStop(sprite, FLDEFF_TALL_GRASS); } else { mapObject = &gMapObjects[mapObjectId]; - if ((mapObject->coords2.x != sprite->data1 || mapObject->coords2.y != sprite->data2) && (mapObject->coords3.x != sprite->data1 || mapObject->coords3.y != sprite->data2)) + if ((mapObject->coords2.x != sprite->data[1] || mapObject->coords2.y != sprite->data[2]) && (mapObject->coords3.x != sprite->data[1] || mapObject->coords3.y != sprite->data[2])) { - sprite->data7 = TRUE; + sprite->data[7] = TRUE; } metatileBehavior = 0; if (sprite->animCmdIndex == 0) @@ -349,7 +349,7 @@ void unc_grass_normal(struct Sprite *sprite) metatileBehavior = 4; } sub_806487C(sprite, 0); - sub_812882C(sprite, sprite->data0, metatileBehavior); + sub_812882C(sprite, sprite->data[0], metatileBehavior); } } @@ -365,8 +365,8 @@ u32 FldEff_JumpTallGrass(void) sprite = &gSprites[spriteId]; sprite->coordOffsetEnabled = TRUE; sprite->oam.priority = gFieldEffectArguments[3]; - sprite->data0 = gFieldEffectArguments[2]; - sprite->data1 = 12; + sprite->data[0] = gFieldEffectArguments[2]; + sprite->data[1] = 12; } return 0; } @@ -381,7 +381,7 @@ u8 sub_8126FF0(u8 localId, u8 mapNum, u8 mapGroup, s16 x, s16 y) if (gSprites[i].inUse) { sprite = &gSprites[i]; - if (sprite->callback == unc_grass_normal && (x == sprite->data1 && y == sprite->data2) && (localId == (u8)(sprite->data3 >> 8) && mapNum == (sprite->data3 & 0xFF) && mapGroup == sprite->data4)) + if (sprite->callback == unc_grass_normal && (x == sprite->data[1] && y == sprite->data[2]) && (localId == (u8)(sprite->data[3] >> 8) && mapNum == (sprite->data[3] & 0xFF) && mapGroup == sprite->data[4])) { return i; } @@ -406,12 +406,12 @@ u32 FldEff_LongGrass(void) sprite = &gSprites[spriteId]; sprite->coordOffsetEnabled = TRUE; sprite->oam.priority = ZCoordToPriority(gFieldEffectArguments[2]); - sprite->data0 = gFieldEffectArguments[2]; - sprite->data1 = gFieldEffectArguments[0]; - sprite->data2 = gFieldEffectArguments[1]; - sprite->data3 = gFieldEffectArguments[4]; - sprite->data4 = gFieldEffectArguments[5]; - sprite->data5 = gFieldEffectArguments[6]; + sprite->data[0] = gFieldEffectArguments[2]; + sprite->data[1] = gFieldEffectArguments[0]; + sprite->data[2] = gFieldEffectArguments[1]; + sprite->data[3] = gFieldEffectArguments[4]; + sprite->data[4] = gFieldEffectArguments[5]; + sprite->data[5] = gFieldEffectArguments[6]; if (gFieldEffectArguments[7]) { SeekSpriteAnim(sprite, 6); @@ -429,31 +429,31 @@ void unc_grass_tall(struct Sprite *sprite) u8 mapObjectId; struct MapObject *mapObject; - mapNum = sprite->data5 >> 8; - mapGroup = sprite->data5; + mapNum = sprite->data[5] >> 8; + mapGroup = sprite->data[5]; if (gCamera.field_0 && (gSaveBlock1.location.mapNum != mapNum || gSaveBlock1.location.mapGroup != mapGroup)) { - sprite->data1 -= gCamera.x; - sprite->data2 -= gCamera.y; - sprite->data5 = ((u8)gSaveBlock1.location.mapNum << 8) | (u8)gSaveBlock1.location.mapGroup; + sprite->data[1] -= gCamera.x; + sprite->data[2] -= gCamera.y; + sprite->data[5] = ((u8)gSaveBlock1.location.mapNum << 8) | (u8)gSaveBlock1.location.mapGroup; } - localId = sprite->data3 >> 8; - mapNum = sprite->data3; - mapGroup = sprite->data4; - metatileBehavior = MapGridGetMetatileBehaviorAt(sprite->data1, sprite->data2); - if (TryGetFieldObjectIdByLocalIdAndMap(localId, mapNum, mapGroup, &mapObjectId) || !MetatileBehavior_IsLongGrass(metatileBehavior) || (sprite->data7 && sprite->animEnded)) + localId = sprite->data[3] >> 8; + mapNum = sprite->data[3]; + mapGroup = sprite->data[4]; + metatileBehavior = MapGridGetMetatileBehaviorAt(sprite->data[1], sprite->data[2]); + if (TryGetFieldObjectIdByLocalIdAndMap(localId, mapNum, mapGroup, &mapObjectId) || !MetatileBehavior_IsLongGrass(metatileBehavior) || (sprite->data[7] && sprite->animEnded)) { FieldEffectStop(sprite, FLDEFF_LONG_GRASS); } else { mapObject = &gMapObjects[mapObjectId]; - if ((mapObject->coords2.x != sprite->data1 || mapObject->coords2.y != sprite->data2) && (mapObject->coords3.x != sprite->data1 || mapObject->coords3.y != sprite->data2)) + if ((mapObject->coords2.x != sprite->data[1] || mapObject->coords2.y != sprite->data[2]) && (mapObject->coords3.x != sprite->data[1] || mapObject->coords3.y != sprite->data[2])) { - sprite->data7 = TRUE; + sprite->data[7] = TRUE; } sub_806487C(sprite, 0); - sub_812882C(sprite, sprite->data0, 0); + sub_812882C(sprite, sprite->data[0], 0); } } @@ -469,8 +469,8 @@ u32 FldEff_JumpLongGrass(void) sprite = &gSprites[spriteId]; sprite->coordOffsetEnabled = TRUE; sprite->oam.priority = gFieldEffectArguments[3]; - sprite->data0 = gFieldEffectArguments[2]; - sprite->data1 = 18; + sprite->data[0] = gFieldEffectArguments[2]; + sprite->data[1] = 18; } return 0; } @@ -490,11 +490,11 @@ u32 FldEff_ShortGrass(void) sprite = &(gSprites[spriteId]); sprite->coordOffsetEnabled = TRUE; sprite->oam.priority = gSprites[mapObject->spriteId].oam.priority; - sprite->data0 = gFieldEffectArguments[0]; - sprite->data1 = gFieldEffectArguments[1]; - sprite->data2 = gFieldEffectArguments[2]; - sprite->data3 = gSprites[mapObject->spriteId].pos1.x; - sprite->data4 = gSprites[mapObject->spriteId].pos1.y; + sprite->data[0] = gFieldEffectArguments[0]; + sprite->data[1] = gFieldEffectArguments[1]; + sprite->data[2] = gFieldEffectArguments[2]; + sprite->data[3] = gSprites[mapObject->spriteId].pos1.x; + sprite->data[4] = gSprites[mapObject->spriteId].pos1.y; } return 0; } @@ -507,7 +507,7 @@ void sub_8127334(struct Sprite *sprite) const struct MapObjectGraphicsInfo *graphicsInfo; struct Sprite *linkedSprite; - if (TryGetFieldObjectIdByLocalIdAndMap(sprite->data0, sprite->data1, sprite->data2, &mapObjectId) || !gMapObjects[mapObjectId].mapobj_bit_18) + if (TryGetFieldObjectIdByLocalIdAndMap(sprite->data[0], sprite->data[1], sprite->data[2], &mapObjectId) || !gMapObjects[mapObjectId].mapobj_bit_18) { FieldEffectStop(sprite, FLDEFF_SHORT_GRASS); } @@ -517,10 +517,10 @@ void sub_8127334(struct Sprite *sprite) linkedSprite = &gSprites[gMapObjects[mapObjectId].spriteId]; y = linkedSprite->pos1.y; x = linkedSprite->pos1.x; - if (x != sprite->data3 || y != sprite->data4) + if (x != sprite->data[3] || y != sprite->data[4]) { - sprite->data3 = x; - sprite->data4 = y; + sprite->data[3] = x; + sprite->data[4] = y; if (sprite->animEnded) { StartSpriteAnim(sprite, 0); @@ -547,7 +547,7 @@ u32 FldEff_SandFootprints(void) sprite = &gSprites[spriteId]; sprite->coordOffsetEnabled = TRUE; sprite->oam.priority = gFieldEffectArguments[3]; - sprite->data7 = FLDEFF_SAND_FOOTPRINTS; + sprite->data[7] = FLDEFF_SAND_FOOTPRINTS; StartSpriteAnim(sprite, gFieldEffectArguments[4]); } return 0; @@ -565,7 +565,7 @@ u32 FldEff_DeepSandFootprints(void) sprite = &gSprites[spriteId]; sprite->coordOffsetEnabled = TRUE; sprite->oam.priority = gFieldEffectArguments[3]; - sprite->data7 = FLDEFF_DEEP_SAND_FOOTPRINTS; + sprite->data[7] = FLDEFF_DEEP_SAND_FOOTPRINTS; StartSpriteAnim(sprite, gFieldEffectArguments[4]); } return spriteId; @@ -583,7 +583,7 @@ u32 FldEff_BikeTireTracks(void) sprite = &gSprites[spriteId]; sprite->coordOffsetEnabled = TRUE; sprite->oam.priority = gFieldEffectArguments[3]; - sprite->data7 = FLDEFF_BIKE_TIRE_TRACKS; + sprite->data[7] = FLDEFF_BIKE_TIRE_TRACKS; StartSpriteAnim(sprite, gFieldEffectArguments[4]); } return spriteId; @@ -591,14 +591,14 @@ u32 FldEff_BikeTireTracks(void) void sub_8127584(struct Sprite *sprite) { - gUnknown_08401E40[sprite->data0](sprite); + gUnknown_08401E40[sprite->data[0]](sprite); } static void sub_81275A0(struct Sprite *sprite) { - if (++sprite->data1 > 40) + if (++sprite->data[1] > 40) { - sprite->data0 = 1; + sprite->data[0] = 1; } sub_806487C(sprite, FALSE); } @@ -606,11 +606,11 @@ static void sub_81275A0(struct Sprite *sprite) static void sub_81275C4(struct Sprite *sprite) { sprite->invisible ^= 1; - sprite->data1 ++; + sprite->data[1] ++; sub_806487C(sprite, sprite->invisible); - if (sprite->data1 > 56) + if (sprite->data[1] > 56) { - FieldEffectStop(sprite, sprite->data7); + FieldEffectStop(sprite, sprite->data[7]); } } @@ -633,9 +633,9 @@ u32 FldEff_Splash(void) sprite->coordOffsetEnabled = TRUE; linkedSprite = &gSprites[mapObject->spriteId]; sprite->oam.priority = linkedSprite->oam.priority; - sprite->data0 = gFieldEffectArguments[0]; - sprite->data1 = gFieldEffectArguments[1]; - sprite->data2 = gFieldEffectArguments[2]; + sprite->data[0] = gFieldEffectArguments[0]; + sprite->data[1] = gFieldEffectArguments[1]; + sprite->data[2] = gFieldEffectArguments[2]; sprite->pos2.y = (graphicsInfo->height >> 1) - 4; PlaySE(SE_MIZU); } @@ -646,7 +646,7 @@ void sub_81276B4(struct Sprite *sprite) { u8 mapObjectId; - if (sprite->animEnded || TryGetFieldObjectIdByLocalIdAndMap(sprite->data0, sprite->data1, sprite->data2, &mapObjectId)) + if (sprite->animEnded || TryGetFieldObjectIdByLocalIdAndMap(sprite->data[0], sprite->data[1], sprite->data[2], &mapObjectId)) { FieldEffectStop(sprite, FLDEFF_SPLASH); } @@ -670,8 +670,8 @@ u32 FldEff_JumpSmallSplash(void) sprite = &gSprites[spriteId]; sprite->coordOffsetEnabled = TRUE; sprite->oam.priority = gFieldEffectArguments[3]; - sprite->data0 = gFieldEffectArguments[2]; - sprite->data1 = FLDEFF_JUMP_SMALL_SPLASH; + sprite->data[0] = gFieldEffectArguments[2]; + sprite->data[1] = FLDEFF_JUMP_SMALL_SPLASH; } return 0; } @@ -688,8 +688,8 @@ u32 FldEff_JumpBigSplash(void) sprite = &gSprites[spriteId]; sprite->coordOffsetEnabled = TRUE; sprite->oam.priority = gFieldEffectArguments[3]; - sprite->data0 = gFieldEffectArguments[2]; - sprite->data1 = FLDEFF_JUMP_BIG_SPLASH; + sprite->data[0] = gFieldEffectArguments[2]; + sprite->data[1] = FLDEFF_JUMP_BIG_SPLASH; } return 0; } @@ -712,11 +712,11 @@ u32 FldEff_FeetInFlowingWater(void) sprite->callback = sub_81278D8; sprite->coordOffsetEnabled = TRUE; sprite->oam.priority = gSprites[mapObject->spriteId].oam.priority; - sprite->data0 = gFieldEffectArguments[0]; - sprite->data1 = gFieldEffectArguments[1]; - sprite->data2 = gFieldEffectArguments[2]; - sprite->data3 = -1; - sprite->data4 = -1; + sprite->data[0] = gFieldEffectArguments[0]; + sprite->data[1] = gFieldEffectArguments[1]; + sprite->data[2] = gFieldEffectArguments[2]; + sprite->data[3] = -1; + sprite->data[4] = -1; sprite->pos2.y = (graphicsInfo->height >> 1) - 4; StartSpriteAnim(sprite, 1); } @@ -729,7 +729,7 @@ static void sub_81278D8(struct Sprite *sprite) struct Sprite *linkedSprite; struct MapObject *mapObject; - if (TryGetFieldObjectIdByLocalIdAndMap(sprite->data0, sprite->data1, sprite->data2, &mapObjectId) || !gMapObjects[mapObjectId].mapobj_bit_19) + if (TryGetFieldObjectIdByLocalIdAndMap(sprite->data[0], sprite->data[1], sprite->data[2], &mapObjectId) || !gMapObjects[mapObjectId].mapobj_bit_19) { FieldEffectStop(sprite, FLDEFF_FEET_IN_FLOWING_WATER); } @@ -741,10 +741,10 @@ static void sub_81278D8(struct Sprite *sprite) sprite->pos1.y = linkedSprite->pos1.y; sprite->subpriority = linkedSprite->subpriority; sub_806487C(sprite, FALSE); - if (mapObject->coords2.x != sprite->data3 || mapObject->coords2.y != sprite->data4) + if (mapObject->coords2.x != sprite->data[3] || mapObject->coords2.y != sprite->data[4]) { - sprite->data3 = mapObject->coords2.x; - sprite->data4 = mapObject->coords2.y; + sprite->data[3] = mapObject->coords2.x; + sprite->data[4] = mapObject->coords2.y; if (!sprite->invisible) { PlaySE(SE_MIZU); @@ -764,7 +764,7 @@ u32 FldEff_Ripple(void) sprite = &gSprites[spriteId]; sprite->coordOffsetEnabled = TRUE; sprite->oam.priority = gFieldEffectArguments[3]; - sprite->data0 = FLDEFF_RIPPLE; + sprite->data[0] = FLDEFF_RIPPLE; } return 0; } @@ -784,11 +784,11 @@ u32 FldEff_HotSpringsWater(void) sprite = &gSprites[spriteId]; sprite->coordOffsetEnabled = TRUE; sprite->oam.priority = gSprites[mapObject->spriteId].oam.priority; - sprite->data0 = gFieldEffectArguments[0]; - sprite->data1 = gFieldEffectArguments[1]; - sprite->data2 = gFieldEffectArguments[2]; - sprite->data3 = gSprites[mapObject->spriteId].pos1.x; - sprite->data4 = gSprites[mapObject->spriteId].pos1.y; + sprite->data[0] = gFieldEffectArguments[0]; + sprite->data[1] = gFieldEffectArguments[1]; + sprite->data[2] = gFieldEffectArguments[2]; + sprite->data[3] = gSprites[mapObject->spriteId].pos1.x; + sprite->data[4] = gSprites[mapObject->spriteId].pos1.y; } return 0; } @@ -799,7 +799,7 @@ void sub_8127A7C(struct Sprite *sprite) const struct MapObjectGraphicsInfo *graphicsInfo; struct Sprite *linkedSprite; - if (TryGetFieldObjectIdByLocalIdAndMap(sprite->data0, sprite->data1, sprite->data2, &mapObjectId) || !gMapObjects[mapObjectId].mapobj_bit_21) + if (TryGetFieldObjectIdByLocalIdAndMap(sprite->data[0], sprite->data[1], sprite->data[2], &mapObjectId) || !gMapObjects[mapObjectId].mapobj_bit_21) { FieldEffectStop(sprite, FLDEFF_HOT_SPRINGS_WATER); } @@ -826,7 +826,7 @@ u32 FldEff_Unknown19(void) sprite = &gSprites[spriteId]; sprite->coordOffsetEnabled = TRUE; sprite->oam.priority = gFieldEffectArguments[3]; - sprite->data0 = FLDEFF_UNKNOWN_19; + sprite->data[0] = FLDEFF_UNKNOWN_19; } return 0; } @@ -843,7 +843,7 @@ u32 FldEff_Unknown20(void) sprite = &gSprites[spriteId]; sprite->coordOffsetEnabled = TRUE; sprite->oam.priority = gFieldEffectArguments[3]; - sprite->data0 = FLDEFF_UNKNOWN_20; + sprite->data[0] = FLDEFF_UNKNOWN_20; } return 0; } @@ -860,7 +860,7 @@ u32 FldEff_Unknown21(void) sprite = &gSprites[spriteId]; sprite->coordOffsetEnabled = TRUE; sprite->oam.priority = gFieldEffectArguments[3]; - sprite->data0 = FLDEFF_UNKNOWN_21; + sprite->data[0] = FLDEFF_UNKNOWN_21; } return 0; } @@ -877,7 +877,7 @@ u32 FldEff_Unknown22(void) sprite = &gSprites[spriteId]; sprite->coordOffsetEnabled = TRUE; sprite->oam.priority = gFieldEffectArguments[3]; - sprite->data0 = FLDEFF_UNKNOWN_22; + sprite->data[0] = FLDEFF_UNKNOWN_22; } return 0; } @@ -909,26 +909,26 @@ u32 FldEff_Ash(void) sprite = &gSprites[spriteId]; sprite->coordOffsetEnabled = TRUE; sprite->oam.priority = gFieldEffectArguments[3]; - sprite->data1 = gFieldEffectArguments[0]; - sprite->data2 = gFieldEffectArguments[1]; - sprite->data3 = gFieldEffectArguments[4]; - sprite->data4 = gFieldEffectArguments[5]; + sprite->data[1] = gFieldEffectArguments[0]; + sprite->data[2] = gFieldEffectArguments[1]; + sprite->data[3] = gFieldEffectArguments[4]; + sprite->data[4] = gFieldEffectArguments[5]; } return 0; } void sub_8127D84(struct Sprite *sprite) { - gUnknown_08401E48[sprite->data0](sprite); + gUnknown_08401E48[sprite->data[0]](sprite); } static void sub_8127DA0(struct Sprite *sprite) { sprite->invisible = TRUE; sprite->animPaused = TRUE; - if (--sprite->data4 == 0) + if (--sprite->data[4] == 0) { - sprite->data0 = 1; + sprite->data[0] = 1; } } @@ -936,10 +936,10 @@ static void sub_8127DD0(struct Sprite *sprite) { sprite->invisible = FALSE; sprite->animPaused = FALSE; - MapGridSetMetatileIdAt(sprite->data1, sprite->data2, sprite->data3); - CurrentMapDrawMetatileAt(sprite->data1, sprite->data2); + MapGridSetMetatileIdAt(sprite->data[1], sprite->data[2], sprite->data[3]); + CurrentMapDrawMetatileAt(sprite->data[1], sprite->data[2]); gMapObjects[gPlayerAvatar.mapObjectId].mapobj_bit_2 = TRUE; - sprite->data0 = 2; + sprite->data[0] = 2; } static void sub_8127E30(struct Sprite *sprite) @@ -963,10 +963,10 @@ u32 FldEff_SurfBlob(void) sprite = &gSprites[spriteId]; sprite->coordOffsetEnabled = TRUE; sprite->oam.paletteNum = 0; - sprite->data2 = gFieldEffectArguments[2]; - sprite->data3 = -1; - sprite->data6 = -1; - sprite->data7 = -1; + sprite->data[2] = gFieldEffectArguments[2]; + sprite->data[3] = -1; + sprite->data[6] = -1; + sprite->data[7] = -1; } FieldEffectActiveListRemove(FLDEFF_SURF_BLOB); return spriteId; @@ -974,33 +974,33 @@ u32 FldEff_SurfBlob(void) void sub_8127ED0(u8 spriteId, u8 value) { - gSprites[spriteId].data0 = (gSprites[spriteId].data0 & ~0xF) | (value & 0xF); + gSprites[spriteId].data[0] = (gSprites[spriteId].data[0] & ~0xF) | (value & 0xF); } void sub_8127EFC(u8 spriteId, u8 value) { - gSprites[spriteId].data0 = (gSprites[spriteId].data0 & ~0xF0) | ((value & 0xF) << 4); + gSprites[spriteId].data[0] = (gSprites[spriteId].data[0] & ~0xF0) | ((value & 0xF) << 4); } void sub_8127F28(u8 spriteId, u8 value, s16 data1) { - gSprites[spriteId].data0 = (gSprites[spriteId].data0 & ~0xF00) | ((value & 0xF) << 8); - gSprites[spriteId].data1 = data1; + gSprites[spriteId].data[0] = (gSprites[spriteId].data[0] & ~0xF00) | ((value & 0xF) << 8); + gSprites[spriteId].data[1] = data1; } static u8 sub_8127F5C(struct Sprite *sprite) { - return sprite->data0 & 0xF; + return sprite->data[0] & 0xF; } static u8 sub_8127F64(struct Sprite *sprite) { - return (sprite->data0 & 0xF0) >> 4; + return (sprite->data[0] & 0xF0) >> 4; } static u8 sub_8127F70(struct Sprite *sprite) { - return (sprite->data0 & 0xF00) >> 8; + return (sprite->data[0] & 0xF00) >> 8; } void sub_8127F7C(struct Sprite *sprite) @@ -1008,7 +1008,7 @@ void sub_8127F7C(struct Sprite *sprite) struct MapObject *mapObject; struct Sprite *linkedSprite; - mapObject = &gMapObjects[sprite->data2]; + mapObject = &gMapObjects[sprite->data[2]]; linkedSprite = &gSprites[mapObject->spriteId]; sub_8127FD4(mapObject, sprite); sub_812800C(mapObject, sprite); @@ -1036,15 +1036,15 @@ static void sub_812800C(struct MapObject *mapObject, struct Sprite *sprite) x = mapObject->coords2.x; y = mapObject->coords2.y; - if (sprite->pos2.y == 0 && (x != sprite->data6 || y != sprite->data7)) + if (sprite->pos2.y == 0 && (x != sprite->data[6] || y != sprite->data[7])) { - sprite->data5 = sprite->pos2.y; - for (sprite->data6 = x, sprite->data7 = y, i = DIR_SOUTH; i <= DIR_EAST; i ++, x = sprite->data6, y = sprite->data7) + sprite->data[5] = sprite->pos2.y; + for (sprite->data[6] = x, sprite->data[7] = y, i = DIR_SOUTH; i <= DIR_EAST; i ++, x = sprite->data[6], y = sprite->data[7]) { MoveCoords(i, &x, &y); if (MapGridGetZCoordAt(x, y) == 3) { - sprite->data5 ++; + sprite->data[5] ++; break; } } @@ -1141,13 +1141,13 @@ static void sub_81280A0(struct MapObject *mapObject, struct Sprite *linkedSprite v0 = sub_8127F5C(sprite); if (v0 != 0) { - if (((u16)(++ sprite->data4) & unk_8401E5A[sprite->data5]) == 0) + if (((u16)(++ sprite->data[4]) & unk_8401E5A[sprite->data[5]]) == 0) { - sprite->pos2.y += sprite->data3; + sprite->pos2.y += sprite->data[3]; } - if ((sprite->data4 & 0x0F) == 0) + if ((sprite->data[4] & 0x0F) == 0) { - sprite->data3 = -sprite->data3; + sprite->data[3] = -sprite->data[3]; } if (v0 != 2) { @@ -1157,7 +1157,7 @@ static void sub_81280A0(struct MapObject *mapObject, struct Sprite *linkedSprite } else { - linkedSprite->pos2.y = sprite->data1 + sprite->pos2.y; + linkedSprite->pos2.y = sprite->data[1] + sprite->pos2.y; } sprite->pos1.x = linkedSprite->pos1.x; sprite->pos1.y = linkedSprite->pos1.y + 8; @@ -1174,8 +1174,8 @@ u8 sub_8128124(u8 oldSpriteId) sprite = &gSprites[spriteId]; sprite->callback = sub_8128174; sprite->invisible = TRUE; - sprite->data0 = oldSpriteId; - sprite->data1 = 1; + sprite->data[0] = oldSpriteId; + sprite->data[1] = 1; return spriteId; } @@ -1183,14 +1183,14 @@ static void sub_8128174(struct Sprite *sprite) { struct Sprite *oldSprite; - oldSprite = &gSprites[sprite->data0]; - if (((sprite->data2++) & 0x03) == 0) + oldSprite = &gSprites[sprite->data[0]]; + if (((sprite->data[2]++) & 0x03) == 0) { - oldSprite->pos2.y += sprite->data1; + oldSprite->pos2.y += sprite->data[1]; } - if ((sprite->data2 & 0x0F) == 0) + if ((sprite->data[2] & 0x0F) == 0) { - sprite->data1 = -sprite->data1; + sprite->data[1] = -sprite->data[1]; } } @@ -1206,8 +1206,8 @@ u32 FldEff_Dust(void) sprite = &gSprites[spriteId]; sprite->coordOffsetEnabled = TRUE; sprite->oam.priority = gFieldEffectArguments[3]; - sprite->data0 = gFieldEffectArguments[2]; - sprite->data1 = 10; + sprite->data[0] = gFieldEffectArguments[2]; + sprite->data[1] = 10; } return 0; } @@ -1229,11 +1229,11 @@ u32 FldEff_SandPile(void) sprite = &gSprites[spriteId]; sprite->coordOffsetEnabled = TRUE; sprite->oam.priority = gSprites[mapObject->spriteId].oam.priority; - sprite->data0 = gFieldEffectArguments[0]; - sprite->data1 = gFieldEffectArguments[1]; - sprite->data2 = gFieldEffectArguments[2]; - sprite->data3 = gSprites[mapObject->spriteId].pos1.x; - sprite->data4 = gSprites[mapObject->spriteId].pos1.y; + sprite->data[0] = gFieldEffectArguments[0]; + sprite->data[1] = gFieldEffectArguments[1]; + sprite->data[2] = gFieldEffectArguments[2]; + sprite->data[3] = gSprites[mapObject->spriteId].pos1.x; + sprite->data[4] = gSprites[mapObject->spriteId].pos1.y; sprite->pos2.y = (graphicsInfo->height >> 1) - 2; SeekSpriteAnim(sprite, 2); } @@ -1246,7 +1246,7 @@ void sub_81282E0(struct Sprite *sprite) s16 x; s16 y; - if (TryGetFieldObjectIdByLocalIdAndMap(sprite->data0, sprite->data1, sprite->data2, &mapObjectId) || !gMapObjects[mapObjectId].mapobj_bit_20) + if (TryGetFieldObjectIdByLocalIdAndMap(sprite->data[0], sprite->data[1], sprite->data[2], &mapObjectId) || !gMapObjects[mapObjectId].mapobj_bit_20) { FieldEffectStop(sprite, FLDEFF_SAND_PILE); } @@ -1254,10 +1254,10 @@ void sub_81282E0(struct Sprite *sprite) { y = gSprites[gMapObjects[mapObjectId].spriteId].pos1.y; x = gSprites[gMapObjects[mapObjectId].spriteId].pos1.x; - if (x != sprite->data3 || y != sprite->data4) + if (x != sprite->data[3] || y != sprite->data[4]) { - sprite->data3 = x; - sprite->data4 = y; + sprite->data[3] = x; + sprite->data[4] = y; if (sprite->animEnded) { StartSpriteAnim(sprite, 0); @@ -1288,9 +1288,9 @@ u32 FldEff_Bubbles(void) void sub_8128410(struct Sprite *sprite) { - sprite->data0 += 0x80; - sprite->data0 &= 0x100; - sprite->pos1.y -= sprite->data0 >> 8; + sprite->data[0] += 0x80; + sprite->data[0] &= 0x100; + sprite->pos1.y -= sprite->data[0] >> 8; sub_806487C(sprite, FALSE); if (sprite->invisible || sprite->animEnded) { @@ -1311,7 +1311,7 @@ u32 FldEff_BerryTreeGrowthSparkle(void) sprite->coordOffsetEnabled = TRUE; sprite->oam.priority = gFieldEffectArguments[3]; sprite->oam.paletteNum = 5; - sprite->data0 = FLDEFF_BERRY_TREE_GROWTH_SPARKLE; + sprite->data[0] = FLDEFF_BERRY_TREE_GROWTH_SPARKLE; } return 0; } @@ -1349,10 +1349,10 @@ static u32 ShowDisguiseFieldEffect(u8 fldEff, u8 templateIdx, u8 paletteNum) sprite = &gSprites[spriteId]; sprite->coordOffsetEnabled ++; sprite->oam.paletteNum = paletteNum; - sprite->data1 = fldEff; - sprite->data2 = gFieldEffectArguments[0]; - sprite->data3 = gFieldEffectArguments[1]; - sprite->data4 = gFieldEffectArguments[2]; + sprite->data[1] = fldEff; + sprite->data[2] = gFieldEffectArguments[0]; + sprite->data[3] = gFieldEffectArguments[1]; + sprite->data[4] = gFieldEffectArguments[2]; } return spriteId; } @@ -1363,9 +1363,9 @@ void sub_81285AC(struct Sprite *sprite) const struct MapObjectGraphicsInfo *graphicsInfo; struct Sprite *linkedSprite; - if (TryGetFieldObjectIdByLocalIdAndMap(sprite->data2, sprite->data3, sprite->data4, &mapObjectId)) + if (TryGetFieldObjectIdByLocalIdAndMap(sprite->data[2], sprite->data[3], sprite->data[4], &mapObjectId)) { - FieldEffectStop(sprite, sprite->data1); + FieldEffectStop(sprite, sprite->data[1]); } // else { graphicsInfo = GetFieldObjectGraphicsInfo(gMapObjects[mapObjectId].graphicsId); @@ -1374,18 +1374,18 @@ void sub_81285AC(struct Sprite *sprite) sprite->pos1.x = linkedSprite->pos1.x; sprite->pos1.y = (graphicsInfo->height >> 1) + linkedSprite->pos1.y - 16; sprite->subpriority = linkedSprite->subpriority - 1; - if (sprite->data0 == 1) + if (sprite->data[0] == 1) { - sprite->data0 ++; + sprite->data[0] ++; StartSpriteAnim(sprite, 1); } - if (sprite->data0 == 2 && sprite->animEnded) + if (sprite->data[0] == 2 && sprite->animEnded) { - sprite->data7 = 1; + sprite->data[7] = 1; } - if (sprite->data0 == 3) + if (sprite->data[0] == 3) { - FieldEffectStop(sprite, sprite->data1); + FieldEffectStop(sprite, sprite->data[1]); } // } } @@ -1394,7 +1394,7 @@ void sub_812869C(struct MapObject *mapObject) { if (mapObject->mapobj_unk_21 == 1) { - gSprites[mapObject->mapobj_unk_1A].data0 ++; + gSprites[mapObject->mapobj_unk_1A].data[0] ++; } } @@ -1411,10 +1411,10 @@ bool8 sub_81286C4(struct MapObject *mapObject) return TRUE; } sprite = &gSprites[mapObject->mapobj_unk_1A]; - if (sprite->data7) + if (sprite->data[7]) { mapObject->mapobj_unk_21 = 2; - sprite->data0 ++; + sprite->data[0] ++; return TRUE; } return FALSE; @@ -1438,19 +1438,19 @@ u32 FldEff_Sparkle(void) void sub_8128774(struct Sprite *sprite) { - if (sprite->data0 == 0) + if (sprite->data[0] == 0) { if (sprite->animEnded) { sprite->invisible = TRUE; - sprite->data0 ++; + sprite->data[0] ++; } - if (sprite->data0 == 0) + if (sprite->data[0] == 0) { return; } } - if (++ sprite->data1 >= 35) + if (++ sprite->data[1] >= 35) { FieldEffectStop(sprite, FLDEFF_SPARKLE); } @@ -1460,12 +1460,12 @@ void sub_81287C4(struct Sprite *sprite) { if (sprite->animEnded) { - FieldEffectStop(sprite, sprite->data1); + FieldEffectStop(sprite, sprite->data[1]); } else { sub_806487C(sprite, FALSE); - SetObjectSubpriorityByZCoord(sprite->data0, sprite, 0); + SetObjectSubpriorityByZCoord(sprite->data[0], sprite, 0); } } @@ -1473,7 +1473,7 @@ void sub_8128800(struct Sprite *sprite) { if (sprite->animEnded) { - FieldEffectStop(sprite, sprite->data0); + FieldEffectStop(sprite, sprite->data[0]); } else { diff --git a/src/field/field_map_obj.c b/src/field/field_map_obj.c index 74ef3b7fe..98f6fedab 100644 --- a/src/field/field_map_obj.c +++ b/src/field/field_map_obj.c @@ -2343,7 +2343,7 @@ u8 sub_805AFCC(struct MapObjectTemplate *mapObjTemplate, struct SpriteTemplate * sprite->pos1.y += 16 + sprite->centerToCornerVecY; sprite->oam.paletteNum = gfxInfo->paletteSlot; sprite->coordOffsetEnabled = TRUE; - sprite->data0 = mapObjectId; + sprite->data[0] = mapObjectId; mapObject->spriteId = spriteId; mapObject->mapobj_bit_12 = gfxInfo->inanimate; if (!mapObject->mapobj_bit_12) @@ -2489,8 +2489,8 @@ u8 sub_805B410(u8 graphicsId, u8 b, s16 x, s16 y, u8 elevation, u8 direction) sprite->pos1.y += sprite->centerToCornerVecY; sprite->oam.paletteNum = gfxInfo->paletteSlot; sprite->coordOffsetEnabled = TRUE; - sprite->data0 = b; - sprite->data1 = elevation; + sprite->data[0] = b; + sprite->data[1] = elevation; if (gfxInfo->paletteSlot == 10) npc_load_two_palettes__and_record(gfxInfo->paletteTag1, gfxInfo->paletteSlot); if (subspriteTables != NULL) @@ -2640,7 +2640,7 @@ void sub_805B75C(u8 a, s16 b, s16 c) SetSubspriteTables(sprite, subspriteTables); sprite->oam.paletteNum = gfxInfo->paletteSlot; sprite->coordOffsetEnabled = TRUE; - sprite->data0 = a; + sprite->data[0] = a; mapObject->spriteId = spriteId; if (!mapObject->mapobj_bit_12 && mapObject->animPattern != 11) StartSpriteAnim(sprite, FieldObjectDirectionToImageAnimId(mapObject->mapobj_unk_18)); @@ -3042,7 +3042,7 @@ u8 AddCameraObject(u8 a) u8 spriteId = CreateSprite(&gSpriteTemplate_830FD24, 0, 0, 4); gSprites[spriteId].invisible = TRUE; - gSprites[spriteId].data0 = a; + gSprites[spriteId].data[0] = a; return spriteId; } @@ -3050,35 +3050,35 @@ void ObjectCB_CameraObject(struct Sprite *sprite) { void (*cameraObjectFuncs[3])(struct Sprite *); memcpy(cameraObjectFuncs, gCameraObjectFuncs, sizeof gCameraObjectFuncs); - cameraObjectFuncs[sprite->data1](sprite); + cameraObjectFuncs[sprite->data[1]](sprite); } void CameraObject_0(struct Sprite *sprite) { - sprite->pos1.x = gSprites[sprite->data0].pos1.x; - sprite->pos1.y = gSprites[sprite->data0].pos1.y; + sprite->pos1.x = gSprites[sprite->data[0]].pos1.x; + sprite->pos1.y = gSprites[sprite->data[0]].pos1.y; sprite->invisible = TRUE; - sprite->data1 = 1; + sprite->data[1] = 1; CameraObject_1(sprite); } void CameraObject_1(struct Sprite *sprite) { - s16 x = gSprites[sprite->data0].pos1.x; - s16 y = gSprites[sprite->data0].pos1.y; + s16 x = gSprites[sprite->data[0]].pos1.x; + s16 y = gSprites[sprite->data[0]].pos1.y; - sprite->data2 = x - sprite->pos1.x; - sprite->data3 = y - sprite->pos1.y; + sprite->data[2] = x - sprite->pos1.x; + sprite->data[3] = y - sprite->pos1.y; sprite->pos1.x = x; sprite->pos1.y = y; } void CameraObject_2(struct Sprite *sprite) { - sprite->pos1.x = gSprites[sprite->data0].pos1.x; - sprite->pos1.y = gSprites[sprite->data0].pos1.y; - sprite->data2 = 0; - sprite->data3 = 0; + sprite->pos1.x = gSprites[sprite->data[0]].pos1.x; + sprite->pos1.y = gSprites[sprite->data[0]].pos1.y; + sprite->data[2] = 0; + sprite->data[3] = 0; } struct Sprite *FindCameraObject(void) @@ -3099,7 +3099,7 @@ void CameraObjectReset1(void) if (cameraSprite != NULL) { - cameraSprite->data1 = 0; + cameraSprite->data[1] = 0; cameraSprite->callback(cameraSprite); } } @@ -3110,7 +3110,7 @@ void CameraObjectSetFollowedObjectId(u8 spriteId) if (cameraSprite != NULL) { - cameraSprite->data0 = spriteId; + cameraSprite->data[0] = spriteId; CameraObjectReset1(); } } @@ -3122,14 +3122,14 @@ u8 CameraObjectGetFollowedObjectId(void) if (cameraSprite == NULL) return 64; else - return cameraSprite->data0; + return cameraSprite->data[0]; } void CameraObjectReset2(void) { struct Sprite *cameraSprite = FindCameraObject(); - cameraSprite->data1 = 2; + cameraSprite->data[1] = 2; } u8 unref_sub_805C43C(struct Sprite *src, s16 x, s16 y, u8 subpriority) @@ -3333,7 +3333,7 @@ fieldmap_object_cb(sub_805C8AC, sub_805C8D0, gUnknown_08375224); u8 sub_805C8F0(struct MapObject *mapObject, struct Sprite *sprite) { npc_reset(mapObject, sprite); - sprite->data1 = 1; + sprite->data[1] = 1; return 1; } @@ -3342,7 +3342,7 @@ extern void FieldObjectSetRegularAnim(struct MapObject *, struct Sprite *, u8); u8 sub_805C904(struct MapObject *mapObject, struct Sprite *sprite) { FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18)); - sprite->data1 = 2; + sprite->data[1] = 2; return 1; } @@ -3356,7 +3356,7 @@ u8 sub_805C930(struct MapObject *mapObject, struct Sprite *sprite) return 0; } sub_8064820(sprite, gUnknown_0837520C[Random() & 3]); - sprite->data1 = 3; + sprite->data[1] = 3; return 1; } @@ -3366,7 +3366,7 @@ u8 sub_805C96C(struct MapObject *mapObject, struct Sprite *sprite) { if (sub_8064824(sprite) != 0) { - sprite->data1 = 4; + sprite->data[1] = 4; return 1; } return 0; @@ -3381,10 +3381,10 @@ u8 sub_805C98C(struct MapObject *mapObject, struct Sprite *sprite) memcpy(directions, gUnknown_08375240, 4); direction = directions[Random() & 3]; FieldObjectSetDirection(mapObject, direction); - sprite->data1 = 5; + sprite->data[1] = 5; if (sub_805FF20(mapObject, direction) != 0) { - sprite->data1 = 1; + sprite->data[1] = 1; } return 1; } @@ -3393,7 +3393,7 @@ u8 sub_805C9D8(struct MapObject *mapObject, struct Sprite *sprite) { FieldObjectSetRegularAnim(mapObject, sprite, GetGoSpeed0AnimId(mapObject->placeholder18)); mapObject->mapobj_bit_1 = 1; - sprite->data1 = 6; + sprite->data[1] = 6; return 1; } @@ -3402,7 +3402,7 @@ u8 sub_805CA08(struct MapObject *mapObject, struct Sprite *sprite) if (FieldObjectExecRegularAnim(mapObject, sprite) != 0) { mapObject->mapobj_bit_1 = 0; - sprite->data1 = 1; + sprite->data[1] = 1; } return 0; } @@ -3649,14 +3649,14 @@ fieldmap_object_cb(sub_805CDE8, sub_805CE0c, gUnknown_08375270); u8 sub_805CE2C(struct MapObject *mapObject, struct Sprite *sprite) { npc_reset(mapObject, sprite); - sprite->data1 = 1; + sprite->data[1] = 1; return 1; } u8 sub_805CE40(struct MapObject *mapObject, struct Sprite *sprite) { FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18)); - sprite->data1 = 2; + sprite->data[1] = 2; return 1; } @@ -3666,7 +3666,7 @@ u8 sub_805CE6C(struct MapObject *mapObject, struct Sprite *sprite) { sub_8064820(sprite, gUnknown_0837520C[Random() & 3]); mapObject->mapobj_bit_1 = 0; - sprite->data1 = 3; + sprite->data[1] = 3; } return 0; } @@ -3675,7 +3675,7 @@ u8 sub_805CEB0(struct MapObject *mapObject, struct Sprite *sprite) { if (sub_8064824(sprite) || FieldObjectIsTrainerAndCloseToPlayer(mapObject)) { - sprite->data1 = 4; + sprite->data[1] = 4; return 1; } return 0; @@ -3692,7 +3692,7 @@ u8 sub_805CEE0(struct MapObject *mapObject, struct Sprite *sprite) direction = directions[Random() & 3]; } FieldObjectSetDirection(mapObject, direction); - sprite->data1 = 1; + sprite->data[1] = 1; return 1; } @@ -3701,14 +3701,14 @@ fieldmap_object_cb(sub_805CF28, sub_805CF4C, gUnknown_08375284); u8 sub_805CF6C(struct MapObject *mapObject, struct Sprite *sprite) { npc_reset(mapObject, sprite); - sprite->data1 = 1; + sprite->data[1] = 1; return 1; } u8 sub_805CF80(struct MapObject *mapObject, struct Sprite *sprite) { FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18)); - sprite->data1 = 2; + sprite->data[1] = 2; return 1; } @@ -3719,7 +3719,7 @@ u8 sub_805CFAC(struct MapObject *mapObject, struct Sprite *sprite) return 0; } sub_8064820(sprite, gUnknown_0837520C[Random() & 3]); - sprite->data1 = 3; + sprite->data[1] = 3; return 1; } @@ -3727,7 +3727,7 @@ u8 sub_805CFE8(struct MapObject *mapObject, struct Sprite *sprite) { if (sub_8064824(sprite) != 0) { - sprite->data1 = 4; + sprite->data[1] = 4; return 1; } return 0; @@ -3740,10 +3740,10 @@ u8 sub_805D008(struct MapObject *mapObject, struct Sprite *sprite) memcpy(directions, gUnknown_083752A0, 2); direction = directions[Random() & 1]; FieldObjectSetDirection(mapObject, direction); - sprite->data1 = 5; + sprite->data[1] = 5; if (sub_805FF20(mapObject, direction) != 0) { - sprite->data1 = 1; + sprite->data[1] = 1; } return 1; } @@ -3752,7 +3752,7 @@ u8 sub_805D054(struct MapObject *mapObject, struct Sprite *sprite) { FieldObjectSetRegularAnim(mapObject, sprite, GetGoSpeed0AnimId(mapObject->placeholder18)); mapObject->mapobj_bit_1 = 1; - sprite->data1 = 6; + sprite->data[1] = 6; return 1; } @@ -3761,7 +3761,7 @@ u8 sub_805D084(struct MapObject *mapObject, struct Sprite *sprite) if (FieldObjectExecRegularAnim(mapObject, sprite) != 0) { mapObject->mapobj_bit_1 = 0; - sprite->data1 = 1; + sprite->data[1] = 1; } return 0; } @@ -3771,14 +3771,14 @@ fieldmap_object_cb(sub_805D0AC, sub_805D0D0, gUnknown_083752A4); u8 sub_805D0F0(struct MapObject *mapObject, struct Sprite *sprite) { npc_reset(mapObject, sprite); - sprite->data1 = 1; + sprite->data[1] = 1; return 1; } u8 sub_805D104(struct MapObject *mapObject, struct Sprite *sprite) { FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18)); - sprite->data1 = 2; + sprite->data[1] = 2; return 1; } @@ -3789,7 +3789,7 @@ u8 sub_805D130(struct MapObject *mapObject, struct Sprite *sprite) return 0; } sub_8064820(sprite, gUnknown_0837520C[Random() & 3]); - sprite->data1 = 3; + sprite->data[1] = 3; return 1; } @@ -3797,7 +3797,7 @@ u8 sub_805D16C(struct MapObject *mapObject, struct Sprite *sprite) { if (sub_8064824(sprite) != 0) { - sprite->data1 = 4; + sprite->data[1] = 4; return 1; } return 0; @@ -3810,10 +3810,10 @@ u8 sub_805D18C(struct MapObject *mapObject, struct Sprite *sprite) memcpy(directions, gUnknown_083752C0, 2); direction = directions[Random() & 1]; FieldObjectSetDirection(mapObject, direction); - sprite->data1 = 5; + sprite->data[1] = 5; if (sub_805FF20(mapObject, direction) != 0) { - sprite->data1 = 1; + sprite->data[1] = 1; } return 1; } @@ -3822,7 +3822,7 @@ u8 sub_805D1D8(struct MapObject *mapObject, struct Sprite *sprite) { FieldObjectSetRegularAnim(mapObject, sprite, GetGoSpeed0AnimId(mapObject->placeholder18)); mapObject->mapobj_bit_1 = 1; - sprite->data1 = 6; + sprite->data[1] = 6; return 1; } @@ -3831,7 +3831,7 @@ u8 sub_805D208(struct MapObject *mapObject, struct Sprite *sprite) if (FieldObjectExecRegularAnim(mapObject, sprite) != 0) { mapObject->mapobj_bit_1 = 0; - sprite->data1 = 1; + sprite->data[1] = 1; } return 0; } @@ -3842,7 +3842,7 @@ u8 sub_805D274(struct MapObject *mapObject, struct Sprite *sprite) { npc_reset(mapObject, sprite); FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18)); - sprite->data1 = 1; + sprite->data[1] = 1; return 1; } @@ -3850,7 +3850,7 @@ u8 sub_805D2A0(struct MapObject *mapObject, struct Sprite *sprite) { if (FieldObjectExecRegularAnim(mapObject, sprite) != 0) { - sprite->data1 = 2; + sprite->data[1] = 2; return 1; } return 0; @@ -3867,18 +3867,18 @@ u8 sub_805D314(struct MapObject *mapObject, struct Sprite *sprite); void FieldObjectCB_BerryTree(struct Sprite *sprite) { struct MapObject *mapObject; - mapObject = &gMapObjects[sprite->data0]; - if (!(sprite->data7 & 1)) + mapObject = &gMapObjects[sprite->data[0]]; + if (!(sprite->data[7] & 1)) { get_berry_tree_graphics(mapObject, sprite); - sprite->data7 |= 1; + sprite->data[7] |= 1; } meta_step(mapObject, sprite, sub_805D314); } u8 sub_805D314(struct MapObject *mapObject, struct Sprite *sprite) { - return gUnknown_083752D0[sprite->data1](mapObject, sprite); + return gUnknown_083752D0[sprite->data[1]](mapObject, sprite); } u8 do_berry_tree_growth_sparkle_1(struct MapObject *mapObject, struct Sprite *sprite) @@ -3890,7 +3890,7 @@ u8 do_berry_tree_growth_sparkle_1(struct MapObject *mapObject, struct Sprite *sp berryTreeStage = GetStageByBerryTreeId(mapObject->trainerRange_berryTreeId); if (!berryTreeStage) { - if (!(sprite->data7 & 4) && sprite->animNum == 4) + if (!(sprite->data[7] & 4) && sprite->animNum == 4) { gFieldEffectArguments[0] = mapObject->coords2.x; gFieldEffectArguments[1] = mapObject->coords2.y; @@ -3906,12 +3906,12 @@ u8 do_berry_tree_growth_sparkle_1(struct MapObject *mapObject, struct Sprite *sp berryTreeStage--; if (sprite->animNum != berryTreeStage) { - sprite->data1 = 2; + sprite->data[1] = 2; return 1; } get_berry_tree_graphics(mapObject, sprite); FieldObjectSetRegularAnim(mapObject, sprite, 0x39); - sprite->data1 = 1; + sprite->data[1] = 1; return 1; } @@ -3919,7 +3919,7 @@ u8 sub_805D3EC(struct MapObject *mapObject, struct Sprite *sprite) { if (FieldObjectExecRegularAnim(mapObject, sprite)) { - sprite->data1 = 0; + sprite->data[1] = 0; return 1; } return 0; @@ -3928,9 +3928,9 @@ u8 sub_805D3EC(struct MapObject *mapObject, struct Sprite *sprite) u8 do_berry_tree_growth_sparkle_2(struct MapObject *mapObject, struct Sprite *sprite) { mapObject->mapobj_bit_1 = 1; - sprite->data1 = 3; - sprite->data2 = 0; - sprite->data7 |= 2; + sprite->data[1] = 3; + sprite->data[2] = 0; + sprite->data[7] |= 2; gFieldEffectArguments[0] = mapObject->coords2.x; gFieldEffectArguments[1] = mapObject->coords2.y; gFieldEffectArguments[2] = sprite->subpriority - 1; @@ -3941,14 +3941,14 @@ u8 do_berry_tree_growth_sparkle_2(struct MapObject *mapObject, struct Sprite *sp u8 sub_805D458(struct MapObject *mapObject, struct Sprite *sprite) { - sprite->data2++; - mapObject->mapobj_bit_13 = ((sprite->data2 & 0x2) >> 1); + sprite->data[2]++; + mapObject->mapobj_bit_13 = ((sprite->data[2] & 0x2) >> 1); sprite->animPaused = 1; - if (sprite->data2 > 64) + if (sprite->data[2] > 64) { get_berry_tree_graphics(mapObject, sprite); - sprite->data1 = 4; - sprite->data2 = 0; + sprite->data[1] = 4; + sprite->data[2] = 0; return 1; } return 0; @@ -3956,13 +3956,13 @@ u8 sub_805D458(struct MapObject *mapObject, struct Sprite *sprite) u8 sub_805D4A8(struct MapObject *mapObject, struct Sprite *sprite) { - sprite->data2++; - mapObject->mapobj_bit_13 = ((sprite->data2 & 0x2) >> 1); + sprite->data[2]++; + mapObject->mapobj_bit_13 = ((sprite->data[2] & 0x2) >> 1); sprite->animPaused = 1; - if (sprite->data2 > 64) + if (sprite->data[2] > 64) { - sprite->data1 = 0; - sprite->data7 &= (-3); + sprite->data[1] = 0; + sprite->data[7] &= (-3); return 1; } return 0; @@ -3973,14 +3973,14 @@ fieldmap_object_cb(sub_805D4F4, sub_805D518, gUnknown_083752E4); u8 sub_805D538(struct MapObject *mapObject, struct Sprite *sprite) { npc_reset(mapObject, sprite); - sprite->data1 = 1; + sprite->data[1] = 1; return 1; } u8 sub_805D54C(struct MapObject *mapObject, struct Sprite *sprite) { FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18)); - sprite->data1 = 2; + sprite->data[1] = 2; return 1; } @@ -3990,7 +3990,7 @@ u8 sub_805D578(struct MapObject *mapObject, struct Sprite *sprite) { sub_8064820(sprite, gUnknown_0837520C[Random() & 3]); mapObject->mapobj_bit_1 = 0; - sprite->data1 = 3; + sprite->data[1] = 3; } return 0; } @@ -3999,7 +3999,7 @@ u8 sub_805D5BC(struct MapObject *mapObject, struct Sprite *sprite) { if (sub_8064824(sprite) || FieldObjectIsTrainerAndCloseToPlayer(mapObject)) { - sprite->data1 = 4; + sprite->data[1] = 4; return 1; } return 0; @@ -4016,7 +4016,7 @@ u8 sub_805D5EC(struct MapObject *mapObject, struct Sprite *sprite) direction = directions[Random() & 1]; } FieldObjectSetDirection(mapObject, direction); - sprite->data1 = 1; + sprite->data[1] = 1; return 1; } @@ -4025,14 +4025,14 @@ fieldmap_object_cb(sub_805D634, sub_805D658, gUnknown_083752F8); u8 sub_805D678(struct MapObject *mapObject, struct Sprite *sprite) { npc_reset(mapObject, sprite); - sprite->data1 = 1; + sprite->data[1] = 1; return 1; } u8 sub_805D68C(struct MapObject *mapObject, struct Sprite *sprite) { FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18)); - sprite->data1 = 2; + sprite->data[1] = 2; return 1; } @@ -4042,7 +4042,7 @@ u8 sub_805D6B8(struct MapObject *mapObject, struct Sprite *sprite) { sub_8064820(sprite, gUnknown_0837520C[Random() & 3]); mapObject->mapobj_bit_1 = 0; - sprite->data1 = 3; + sprite->data[1] = 3; } return 0; } @@ -4051,7 +4051,7 @@ u8 sub_805D6FC(struct MapObject *mapObject, struct Sprite *sprite) { if (sub_8064824(sprite) || FieldObjectIsTrainerAndCloseToPlayer(mapObject)) { - sprite->data1 = 4; + sprite->data[1] = 4; return 1; } return 0; @@ -4068,7 +4068,7 @@ u8 sub_805D72C(struct MapObject *mapObject, struct Sprite *sprite) direction = directions[Random() & 1]; } FieldObjectSetDirection(mapObject, direction); - sprite->data1 = 1; + sprite->data[1] = 1; return 1; } @@ -4077,14 +4077,14 @@ fieldmap_object_cb(sub_805D774, sub_805D798, gUnknown_0837530C); u8 sub_805D7B8(struct MapObject *mapObject, struct Sprite *sprite) { npc_reset(mapObject, sprite); - sprite->data1 = 1; + sprite->data[1] = 1; return 1; } u8 sub_805D7CC(struct MapObject *mapObject, struct Sprite *sprite) { FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18)); - sprite->data1 = 2; + sprite->data[1] = 2; return 1; } @@ -4094,7 +4094,7 @@ u8 sub_805D7F8(struct MapObject *mapObject, struct Sprite *sprite) { sub_8064820(sprite, gUnknown_0837521C[Random() & 3]); mapObject->mapobj_bit_1 = 0; - sprite->data1 = 3; + sprite->data[1] = 3; } return 0; } @@ -4103,7 +4103,7 @@ u8 sub_805D83C(struct MapObject *mapObject, struct Sprite *sprite) { if (sub_8064824(sprite) || FieldObjectIsTrainerAndCloseToPlayer(mapObject)) { - sprite->data1 = 4; + sprite->data[1] = 4; return 1; } return 0; @@ -4120,7 +4120,7 @@ u8 sub_805D86C(struct MapObject *mapObject, struct Sprite *sprite) direction = directions[Random() & 1]; } FieldObjectSetDirection(mapObject, direction); - sprite->data1 = 1; + sprite->data[1] = 1; return 1; } @@ -4129,14 +4129,14 @@ fieldmap_object_cb(sub_805D8B4, sub_805D8D8, gUnknown_08375324); u8 sub_805D8F8(struct MapObject *mapObject, struct Sprite *sprite) { npc_reset(mapObject, sprite); - sprite->data1 = 1; + sprite->data[1] = 1; return 1; } u8 sub_805D90C(struct MapObject *mapObject, struct Sprite *sprite) { FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18)); - sprite->data1 = 2; + sprite->data[1] = 2; return 1; } @@ -4146,7 +4146,7 @@ u8 sub_805D938(struct MapObject *mapObject, struct Sprite *sprite) { sub_8064820(sprite, gUnknown_0837521C[Random() & 3]); mapObject->mapobj_bit_1 = 0; - sprite->data1 = 3; + sprite->data[1] = 3; } return 0; } @@ -4155,7 +4155,7 @@ u8 sub_805D97C(struct MapObject *mapObject, struct Sprite *sprite) { if (sub_8064824(sprite) || FieldObjectIsTrainerAndCloseToPlayer(mapObject)) { - sprite->data1 = 4; + sprite->data[1] = 4; return 1; } return 0; @@ -4172,7 +4172,7 @@ u8 sub_805D9AC(struct MapObject *mapObject, struct Sprite *sprite) direction = directions[Random() & 1]; } FieldObjectSetDirection(mapObject, direction); - sprite->data1 = 1; + sprite->data[1] = 1; return 1; } @@ -4181,14 +4181,14 @@ fieldmap_object_cb(sub_805D9F4, sub_805DA18, gUnknown_0837533C); u8 sub_805DA38(struct MapObject *mapObject, struct Sprite *sprite) { npc_reset(mapObject, sprite); - sprite->data1 = 1; + sprite->data[1] = 1; return 1; } u8 sub_805DA4C(struct MapObject *mapObject, struct Sprite *sprite) { FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18)); - sprite->data1 = 2; + sprite->data[1] = 2; return 1; } @@ -4198,7 +4198,7 @@ u8 sub_805DA78(struct MapObject *mapObject, struct Sprite *sprite) { sub_8064820(sprite, gUnknown_0837521C[Random() & 3]); mapObject->mapobj_bit_1 = 0; - sprite->data1 = 3; + sprite->data[1] = 3; } return 0; } @@ -4207,7 +4207,7 @@ u8 sub_805DABC(struct MapObject *mapObject, struct Sprite *sprite) { if (sub_8064824(sprite) || FieldObjectIsTrainerAndCloseToPlayer(mapObject)) { - sprite->data1 = 4; + sprite->data[1] = 4; return 1; } return 0; @@ -4224,7 +4224,7 @@ u8 sub_805DAEC(struct MapObject *mapObject, struct Sprite *sprite) direction = directions[Random() & 1]; } FieldObjectSetDirection(mapObject, direction); - sprite->data1 = 1; + sprite->data[1] = 1; return 1; } @@ -4233,14 +4233,14 @@ fieldmap_object_cb(sub_805DB34, sub_805DB58, gUnknown_08375354); u8 sub_805DB78(struct MapObject *mapObject, struct Sprite *sprite) { npc_reset(mapObject, sprite); - sprite->data1 = 1; + sprite->data[1] = 1; return 1; } u8 sub_805DB8C(struct MapObject *mapObject, struct Sprite *sprite) { FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18)); - sprite->data1 = 2; + sprite->data[1] = 2; return 1; } @@ -4250,7 +4250,7 @@ u8 sub_805DBB8(struct MapObject *mapObject, struct Sprite *sprite) { sub_8064820(sprite, gUnknown_0837521C[Random() & 3]); mapObject->mapobj_bit_1 = 0; - sprite->data1 = 3; + sprite->data[1] = 3; } return 0; } @@ -4259,7 +4259,7 @@ u8 sub_805DBFC(struct MapObject *mapObject, struct Sprite *sprite) { if (sub_8064824(sprite) || FieldObjectIsTrainerAndCloseToPlayer(mapObject)) { - sprite->data1 = 4; + sprite->data[1] = 4; return 1; } return 0; @@ -4276,7 +4276,7 @@ u8 sub_805DC2C(struct MapObject *mapObject, struct Sprite *sprite) direction = directions[Random() & 1]; } FieldObjectSetDirection(mapObject, direction); - sprite->data1 = 1; + sprite->data[1] = 1; return 1; } @@ -4285,14 +4285,14 @@ fieldmap_object_cb(sub_805DC74, sub_805DC98, gUnknown_0837536C); u8 sub_805DCB8(struct MapObject *mapObject, struct Sprite *sprite) { npc_reset(mapObject, sprite); - sprite->data1 = 1; + sprite->data[1] = 1; return 1; } u8 sub_805DCCC(struct MapObject *mapObject, struct Sprite *sprite) { FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18)); - sprite->data1 = 2; + sprite->data[1] = 2; return 1; } @@ -4302,7 +4302,7 @@ u8 sub_805DCF8(struct MapObject *mapObject, struct Sprite *sprite) { sub_8064820(sprite, gUnknown_0837521C[Random() & 3]); mapObject->mapobj_bit_1 = 0; - sprite->data1 = 3; + sprite->data[1] = 3; } return 0; } @@ -4311,7 +4311,7 @@ u8 sub_805DD3C(struct MapObject *mapObject, struct Sprite *sprite) { if (sub_8064824(sprite) || FieldObjectIsTrainerAndCloseToPlayer(mapObject)) { - sprite->data1 = 4; + sprite->data[1] = 4; return 1; } return 0; @@ -4328,7 +4328,7 @@ u8 sub_805DD6C(struct MapObject *mapObject, struct Sprite *sprite) direction = directions[Random() & 3]; } FieldObjectSetDirection(mapObject, direction); - sprite->data1 = 1; + sprite->data[1] = 1; return 1; } @@ -4337,14 +4337,14 @@ fieldmap_object_cb(sub_805DDB4, sub_805DDD8, gUnknown_08375384); u8 sub_805DDF8(struct MapObject *mapObject, struct Sprite *sprite) { npc_reset(mapObject, sprite); - sprite->data1 = 1; + sprite->data[1] = 1; return 1; } u8 sub_805DE0C(struct MapObject *mapObject, struct Sprite *sprite) { FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18)); - sprite->data1 = 2; + sprite->data[1] = 2; return 1; } @@ -4354,7 +4354,7 @@ u8 sub_805DE38(struct MapObject *mapObject, struct Sprite *sprite) { sub_8064820(sprite, gUnknown_0837521C[Random() & 3]); mapObject->mapobj_bit_1 = 0; - sprite->data1 = 3; + sprite->data[1] = 3; } return 0; } @@ -4363,7 +4363,7 @@ u8 sub_805DE7C(struct MapObject *mapObject, struct Sprite *sprite) { if (sub_8064824(sprite) || FieldObjectIsTrainerAndCloseToPlayer(mapObject)) { - sprite->data1 = 4; + sprite->data[1] = 4; return 1; } return 0; @@ -4380,7 +4380,7 @@ u8 sub_805DEAC(struct MapObject *mapObject, struct Sprite *sprite) direction = directions[Random() & 3]; } FieldObjectSetDirection(mapObject, direction); - sprite->data1 = 1; + sprite->data[1] = 1; return 1; } @@ -4389,14 +4389,14 @@ fieldmap_object_cb(sub_805DEF4, sub_805DF18, gUnknown_0837539C); u8 sub_805DF38(struct MapObject *mapObject, struct Sprite *sprite) { npc_reset(mapObject, sprite); - sprite->data1 = 1; + sprite->data[1] = 1; return 1; } u8 sub_805DF4C(struct MapObject *mapObject, struct Sprite *sprite) { FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18)); - sprite->data1 = 2; + sprite->data[1] = 2; return 1; } @@ -4406,7 +4406,7 @@ u8 sub_805DF78(struct MapObject *mapObject, struct Sprite *sprite) { sub_8064820(sprite, gUnknown_0837521C[Random() & 3]); mapObject->mapobj_bit_1 = 0; - sprite->data1 = 3; + sprite->data[1] = 3; } return 0; } @@ -4415,7 +4415,7 @@ u8 sub_805DFBC(struct MapObject *mapObject, struct Sprite *sprite) { if (sub_8064824(sprite) || FieldObjectIsTrainerAndCloseToPlayer(mapObject)) { - sprite->data1 = 4; + sprite->data[1] = 4; return 1; } return 0; @@ -4432,7 +4432,7 @@ u8 sub_805DFEC(struct MapObject *mapObject, struct Sprite *sprite) direction = directions[Random() & 3]; } FieldObjectSetDirection(mapObject, direction); - sprite->data1 = 1; + sprite->data[1] = 1; return 1; } @@ -4441,14 +4441,14 @@ fieldmap_object_cb(sub_805E034, sub_805E058, gUnknown_083753B4); u8 sub_805E078(struct MapObject *mapObject, struct Sprite *sprite) { npc_reset(mapObject, sprite); - sprite->data1 = 1; + sprite->data[1] = 1; return 1; } u8 sub_805E08C(struct MapObject *mapObject, struct Sprite *sprite) { FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18)); - sprite->data1 = 2; + sprite->data[1] = 2; return 1; } @@ -4458,7 +4458,7 @@ u8 sub_805E0B8(struct MapObject *mapObject, struct Sprite *sprite) { sub_8064820(sprite, gUnknown_0837521C[Random() & 3]); mapObject->mapobj_bit_1 = 0; - sprite->data1 = 3; + sprite->data[1] = 3; } return 0; } @@ -4467,7 +4467,7 @@ u8 sub_805E0FC(struct MapObject *mapObject, struct Sprite *sprite) { if (sub_8064824(sprite) || FieldObjectIsTrainerAndCloseToPlayer(mapObject)) { - sprite->data1 = 4; + sprite->data[1] = 4; return 1; } return 0; @@ -4484,7 +4484,7 @@ u8 sub_805E12C(struct MapObject *mapObject, struct Sprite *sprite) direction = directions[Random() & 3]; } FieldObjectSetDirection(mapObject, direction); - sprite->data1 = 1; + sprite->data[1] = 1; return 1; } @@ -4494,7 +4494,7 @@ u8 sub_805E1B8(struct MapObject *mapObject, struct Sprite *sprite) { npc_reset(mapObject, sprite); FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18)); - sprite->data1 = 1; + sprite->data[1] = 1; return 1; } @@ -4503,7 +4503,7 @@ u8 sub_805E1E4(struct MapObject *mapObject, struct Sprite *sprite) if (FieldObjectExecRegularAnim(mapObject, sprite)) { sub_8064820(sprite, 0x30); - sprite->data1 = 2; + sprite->data[1] = 2; } return 0; } @@ -4512,7 +4512,7 @@ u8 sub_805E208(struct MapObject *mapObject, struct Sprite *sprite) { if (sub_8064824(sprite) || FieldObjectIsTrainerAndCloseToPlayer(mapObject)) { - sprite->data1 = 3; + sprite->data[1] = 3; } return 0; } @@ -4528,7 +4528,7 @@ u8 sub_805E234(struct MapObject *mapObject, struct Sprite *sprite) direction = directions[mapObject->mapobj_unk_18]; } FieldObjectSetDirection(mapObject, direction); - sprite->data1 = 0; + sprite->data[1] = 0; return 1; } @@ -4538,7 +4538,7 @@ u8 sub_805E2BC(struct MapObject *mapObject, struct Sprite *sprite) { npc_reset(mapObject, sprite); FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18)); - sprite->data1 = 1; + sprite->data[1] = 1; return 1; } @@ -4547,7 +4547,7 @@ u8 sub_805E2E8(struct MapObject *mapObject, struct Sprite *sprite) if (FieldObjectExecRegularAnim(mapObject, sprite)) { sub_8064820(sprite, 0x30); - sprite->data1 = 2; + sprite->data[1] = 2; } return 0; } @@ -4556,7 +4556,7 @@ u8 sub_805E30C(struct MapObject *mapObject, struct Sprite *sprite) { if (sub_8064824(sprite) || FieldObjectIsTrainerAndCloseToPlayer(mapObject)) { - sprite->data1 = 3; + sprite->data[1] = 3; } return 0; } @@ -4572,7 +4572,7 @@ u8 sub_805E338(struct MapObject *mapObject, struct Sprite *sprite) direction = directions[mapObject->mapobj_unk_18]; } FieldObjectSetDirection(mapObject, direction); - sprite->data1 = 0; + sprite->data[1] = 0; return 1; } @@ -4581,7 +4581,7 @@ fieldmap_object_cb(sub_805E37C, sub_805E3A0, gUnknown_083753FC); u8 sub_805E3C0(struct MapObject *mapObject, struct Sprite *sprite) { npc_reset(mapObject, sprite); - sprite->data1 = 1; + sprite->data[1] = 1; return 1; } @@ -4594,7 +4594,7 @@ u8 sub_805E3D4(struct MapObject *mapObject, struct Sprite *sprite) direction = GetOppositeDirection(direction); } FieldObjectSetDirection(mapObject, direction); - sprite->data1 = 2; + sprite->data[1] = 2; return 1; } @@ -4622,7 +4622,7 @@ u8 sub_805E40C(struct MapObject *mapObject, struct Sprite *sprite) } FieldObjectSetRegularAnim(mapObject, sprite, goSpeed0AnimId); mapObject->mapobj_bit_1 = 1; - sprite->data1 = 3; + sprite->data[1] = 3; return 1; } @@ -4631,7 +4631,7 @@ u8 sub_805E4C4(struct MapObject *mapObject, struct Sprite *sprite) if (FieldObjectExecRegularAnim(mapObject, sprite)) { mapObject->mapobj_bit_1 = 0; - sprite->data1 = 1; + sprite->data[1] = 1; } return 0; } @@ -4639,7 +4639,7 @@ u8 sub_805E4C4(struct MapObject *mapObject, struct Sprite *sprite) u8 sub_805E4EC(struct MapObject *mapObject, struct Sprite *sprite) { npc_reset(mapObject, sprite); - sprite->data1 = 1; + sprite->data[1] = 1; return 1; } @@ -4667,7 +4667,7 @@ u8 MoveFieldObjectInNextDirectionInSequence(struct MapObject *mapObject, struct } FieldObjectSetRegularAnim(mapObject, sprite, goSpeed0AnimId); mapObject->mapobj_bit_1 = 1; - sprite->data1 = 2; + sprite->data[1] = 2; return 1; } @@ -4676,7 +4676,7 @@ u8 sub_805E5B4(struct MapObject *mapObject, struct Sprite *sprite) if (FieldObjectExecRegularAnim(mapObject, sprite)) { mapObject->mapobj_bit_1 = 0; - sprite->data1 = 1; + sprite->data[1] = 1; } return 0; } @@ -5004,7 +5004,7 @@ u8 mss_npc_reset_oampriv3_1_unk2_unk3(struct MapObject *mapObject, struct Sprite { mapObject->mapobj_unk_21 = player_get_direction_lower_nybble(); } - sprite->data1 = 1; + sprite->data[1] = 1; return 1; } @@ -5022,7 +5022,7 @@ u8 sub_805F3C4(struct MapObject *mapObject, struct Sprite *sprite) if (FieldObjectExecRegularAnim(mapObject, sprite)) { mapObject->mapobj_bit_1 = 0; - sprite->data1 = 1; + sprite->data[1] = 1; } return 0; } @@ -5036,7 +5036,7 @@ bool8 sub_805F3F0(struct MapObject *mapObject, struct Sprite *sprite, u8 a2, boo { FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(state_to_direction(gUnknown_0836DC09[mapObject->animPattern], mapObject->mapobj_unk_21, a2))); mapObject->mapobj_bit_1 = 1; - sprite->data1 = 2; + sprite->data[1] = 2; return 1; } @@ -5055,7 +5055,7 @@ bool8 sub_805F438(struct MapObject *mapObject, struct Sprite *sprite, u8 a2, boo FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(direction)); } mapObject->mapobj_bit_1 = 1; - sprite->data1 = 2; + sprite->data[1] = 2; return 1; } @@ -5074,7 +5074,7 @@ bool8 sub_805F4F0(struct MapObject *mapObject, struct Sprite *sprite, u8 playerD FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(direction)); } mapObject->mapobj_bit_1 = TRUE; - sprite->data1 = 2; + sprite->data[1] = 2; return TRUE; } @@ -5093,7 +5093,7 @@ bool8 sub_805F5A8(struct MapObject *mapObject, struct Sprite *sprite, u8 playerD FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(direction)); } mapObject->mapobj_bit_1 = TRUE; - sprite->data1 = 2; + sprite->data[1] = 2; return TRUE; } @@ -5112,7 +5112,7 @@ bool8 sub_805F660(struct MapObject *mapObject, struct Sprite *sprite, u8 playerD FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(direction)); } mapObject->mapobj_bit_1 = TRUE; - sprite->data1 = 2; + sprite->data[1] = 2; return TRUE; } @@ -5124,7 +5124,7 @@ bool8 cph_IM_DIFFERENT(struct MapObject *mapObject, struct Sprite *sprite, u8 pl direction = state_to_direction(gUnknown_0836DC09[mapObject->animPattern], mapObject->mapobj_unk_21, direction); FieldObjectSetRegularAnim(mapObject, sprite, sub_806084C(direction)); mapObject->mapobj_bit_1 = TRUE; - sprite->data1 = 2; + sprite->data[1] = 2; return TRUE; } @@ -5143,7 +5143,7 @@ bool8 sub_805F760(struct MapObject *mapObject, struct Sprite *sprite, u8 playerD FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(direction)); } mapObject->mapobj_bit_1 = TRUE; - sprite->data1 = 2; + sprite->data[1] = 2; return TRUE; } @@ -5164,7 +5164,7 @@ bool8 oac_hopping(struct MapObject *mapObject, struct Sprite *sprite, u8 playerD FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(direction)); } mapObject->mapobj_bit_1 = TRUE; - sprite->data1 = 2; + sprite->data[1] = 2; return TRUE; } @@ -5184,15 +5184,15 @@ u8 sub_805F9F8(struct MapObject *, struct Sprite *); void FieldObjectCB_TreeDisguise(struct Sprite *sprite) { struct MapObject *mapObject; - mapObject = &gMapObjects[sprite->data0]; - if (mapObject->mapobj_unk_21 == 0 || (mapObject->mapobj_unk_21 == 1 && sprite->data7 == 0)) + mapObject = &gMapObjects[sprite->data[0]]; + if (mapObject->mapobj_unk_21 == 0 || (mapObject->mapobj_unk_21 == 1 && sprite->data[7] == 0)) { FieldObjectGetLocalIdAndMap(mapObject, &gFieldEffectArguments[0], &gFieldEffectArguments[1], &gFieldEffectArguments[2]); mapObject->mapobj_unk_1A = FieldEffectStart(FLDEFF_TREE_DISGUISE); mapObject->mapobj_unk_21 = 1; - sprite->data7 ++; + sprite->data[7] ++; } - meta_step(&gMapObjects[sprite->data0], sprite, sub_805F9F8); + meta_step(&gMapObjects[sprite->data[0]], sprite, sub_805F9F8); } u8 sub_805F9F8(struct MapObject *mapObject, struct Sprite *sprite) @@ -5204,34 +5204,34 @@ u8 sub_805F9F8(struct MapObject *mapObject, struct Sprite *sprite) void FieldObjectCB_MountainDisguise(struct Sprite *sprite) { struct MapObject *mapObject; - mapObject = &gMapObjects[sprite->data0]; - if (mapObject->mapobj_unk_21 == 0 || (mapObject->mapobj_unk_21 == 1 && sprite->data7 == 0)) + mapObject = &gMapObjects[sprite->data[0]]; + if (mapObject->mapobj_unk_21 == 0 || (mapObject->mapobj_unk_21 == 1 && sprite->data[7] == 0)) { FieldObjectGetLocalIdAndMap(mapObject, &gFieldEffectArguments[0], &gFieldEffectArguments[1], &gFieldEffectArguments[2]); mapObject->mapobj_unk_1A = FieldEffectStart(FLDEFF_MOUNTAIN_DISGUISE); mapObject->mapobj_unk_21 = 1; - sprite->data7 ++; + sprite->data[7] ++; } - meta_step(&gMapObjects[sprite->data0], sprite, sub_805F9F8); + meta_step(&gMapObjects[sprite->data[0]], sprite, sub_805F9F8); } u8 sub_805FAD8(struct MapObject *mapObject, struct Sprite *sprite); void FieldObjectCB_Hidden1(struct Sprite *sprite) { - if (sprite->data7 == 0) + if (sprite->data[7] == 0) { - gMapObjects[sprite->data0].mapobj_bit_26 = 1; + gMapObjects[sprite->data[0]].mapobj_bit_26 = 1; sprite->subspriteMode = 2; sprite->oam.priority = 3; - sprite->data7 ++; + sprite->data[7] ++; } - meta_step(&gMapObjects[sprite->data0], sprite, sub_805FAD8); + meta_step(&gMapObjects[sprite->data[0]], sprite, sub_805FAD8); } u8 sub_805FAD8(struct MapObject *mapObject, struct Sprite *sprite) { - return gUnknown_083755CC[sprite->data1](mapObject, sprite); + return gUnknown_083755CC[sprite->data[1]](mapObject, sprite); } u8 sub_805FAF8(struct MapObject *mapObject, struct Sprite *sprite) @@ -5244,7 +5244,7 @@ u8 sub_805FB04(struct MapObject *mapObject, struct Sprite *sprite) { if (FieldObjectExecRegularAnim(mapObject, sprite)) { - sprite->data1 = 0; + sprite->data[1] = 0; } return 0; } @@ -5255,7 +5255,7 @@ u8 sub_805FB64(struct MapObject *mapObject, struct Sprite *sprite) { npc_reset(mapObject, sprite); FieldObjectSetRegularAnim(mapObject, sprite, GetStepInPlaceDelay16AnimId(mapObject->mapobj_unk_18)); - sprite->data1 = 1; + sprite->data[1] = 1; return 1; } @@ -5265,7 +5265,7 @@ u8 sub_805FBD4(struct MapObject *mapObject, struct Sprite *sprite) { npc_reset(mapObject, sprite); FieldObjectSetRegularAnim(mapObject, sprite, GetStepInPlaceDelay8AnimId(mapObject->mapobj_unk_18)); - sprite->data1 = 1; + sprite->data[1] = 1; return 1; } @@ -5275,7 +5275,7 @@ u8 sub_805FC44(struct MapObject *mapObject, struct Sprite *sprite) { npc_reset(mapObject, sprite); FieldObjectSetRegularAnim(mapObject, sprite, GetStepInPlaceDelay4AnimId(mapObject->mapobj_unk_18)); - sprite->data1 = 1; + sprite->data[1] = 1; return 1; } @@ -5286,7 +5286,7 @@ u8 sub_805FCB4(struct MapObject *mapObject, struct Sprite *sprite) npc_reset(mapObject, sprite); FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18)); mapObject->mapobj_bit_13 = 1; - sprite->data1 = 1; + sprite->data[1] = 1; return 1; } @@ -5294,7 +5294,7 @@ u8 sub_805FCE8(struct MapObject *mapObject, struct Sprite *sprite) { if (FieldObjectExecRegularAnim(mapObject, sprite)) { - sprite->data1 = 2; + sprite->data[1] = 2; return 1; } return 0; @@ -5314,7 +5314,7 @@ void npc_reset(struct MapObject *mapObject, struct Sprite *sprite) mapObject->mapobj_bit_6 = 0; mapObject->mapobj_bit_7 = 0; mapObject->mapobj_unk_1C = 0xff; - sprite->data1 = 0; + sprite->data[1] = 0; } u8 FieldObjectDirectionToImageAnimId(u8 direction) @@ -5446,7 +5446,7 @@ void npc_set_running_behaviour_etc(struct MapObject *mapObject, u8 animPattern) mapObject->mapobj_unk_21 = 0; mapObject->animId = 0; gSprites[mapObject->spriteId].callback = gUnknown_0836DA88[animPattern]; - gSprites[mapObject->spriteId].data1 = 0; + gSprites[mapObject->spriteId].data[1] = 0; } u8 npc_running_behaviour_by_direction(u8 direction) @@ -5555,7 +5555,7 @@ bool8 IsBerryTreeSparkling(u8 localId, u8 mapNum, u8 mapGroup) u8 mapObjectId; if (!TryGetFieldObjectIdByLocalIdAndMap(localId, mapNum, mapGroup, &mapObjectId)) - if (gSprites[gMapObjects[mapObjectId].spriteId].data7 & 2) + if (gSprites[gMapObjects[mapObjectId].spriteId].data[7] & 2) return TRUE; return FALSE; @@ -5566,7 +5566,7 @@ void sub_8060288(u8 localId, u8 mapNum, u8 mapGroup) u8 mapObjectId; if (!TryGetFieldObjectIdByLocalIdAndMap(localId, mapNum, mapGroup, &mapObjectId)) { - gSprites[gMapObjects[mapObjectId].spriteId].data7 |= 4; + gSprites[gMapObjects[mapObjectId].spriteId].data[7] |= 4; } } @@ -5704,7 +5704,7 @@ bool8 FieldObjectSetSpecialAnim(struct MapObject *mapObject, u8 specialAnimId) mapObject->mapobj_unk_1C = specialAnimId; mapObject->mapobj_bit_6 = 1; mapObject->mapobj_bit_7 = 0; - gSprites[mapObject->spriteId].data2 = 0; + gSprites[mapObject->spriteId].data[2] = 0; return FALSE; } @@ -5727,8 +5727,8 @@ void FieldObjectClearAnim(struct MapObject *mapObject) mapObject->mapobj_unk_1C = 0xFF; mapObject->mapobj_bit_6 = 0; mapObject->mapobj_bit_7 = 0; - gSprites[mapObject->spriteId].data1 = 0; - gSprites[mapObject->spriteId].data2 = 0; + gSprites[mapObject->spriteId].data[1] = 0; + gSprites[mapObject->spriteId].data[2] = 0; } bool8 FieldObjectCheckIfSpecialAnimFinishedOrInactive(struct MapObject *mapObject) @@ -5962,7 +5962,7 @@ u32 state_to_direction(u8 a0, u32 a1, u32 a2) void FieldObjectExecSpecialAnim(struct MapObject *mapObject, struct Sprite *sprite) { - if (gUnknown_08375778[mapObject->mapobj_unk_1C][sprite->data2](mapObject, sprite)) + if (gUnknown_08375778[mapObject->mapobj_unk_1C][sprite->data[2]](mapObject, sprite)) { mapObject->mapobj_bit_7 = 1; } @@ -5970,10 +5970,10 @@ void FieldObjectExecSpecialAnim(struct MapObject *mapObject, struct Sprite *spri bool8 FieldObjectExecRegularAnim(struct MapObject *mapObject, struct Sprite *sprite) { - if (gUnknown_08375778[mapObject->mapobj_unk_1C][sprite->data2](mapObject, sprite)) + if (gUnknown_08375778[mapObject->mapobj_unk_1C][sprite->data[2]](mapObject, sprite)) { mapObject->mapobj_unk_1C = 0xFF; - sprite->data2 = 0; + sprite->data[2] = 0; return 1; } return 0; @@ -5982,7 +5982,7 @@ bool8 FieldObjectExecRegularAnim(struct MapObject *mapObject, struct Sprite *spr void FieldObjectSetRegularAnim(struct MapObject *mapObject, struct Sprite *sprite, u8 animId) { mapObject->mapobj_unk_1C = animId; - sprite->data2 = 0; + sprite->data[2] = 0; } void an_look_any(struct MapObject *mapObject, struct Sprite *sprite, u8 direction) @@ -5991,7 +5991,7 @@ void an_look_any(struct MapObject *mapObject, struct Sprite *sprite, u8 directio npc_coords_shift_still(mapObject); sub_805FE64(mapObject, sprite, get_go_image_anim_num(mapObject->mapobj_unk_18)); sprite->animPaused = 1; - sprite->data2 = 1; + sprite->data[2] = 1; } u8 sub_8060CE0(struct MapObject *mapObject, struct Sprite *sprite) @@ -6030,7 +6030,7 @@ void sub_8060D20(struct MapObject *mapObject, struct Sprite *sprite, u8 directio oamt_npc_ministep_reset(sprite, direction, a3); sprite->animPaused = 0; mapObject->mapobj_bit_2 = 1; - sprite->data2 = 1; + sprite->data[2] = 1; } extern u8 (*const gUnknown_083759C0[5])(u8); @@ -6075,7 +6075,7 @@ void sub_8060E68(struct MapObject *mapObject, struct Sprite *sprite, u8 directio sub_806467C(sprite, direction); sprite->animPaused = 0; mapObject->mapobj_bit_2 = 1; - sprite->data2 = 1; + sprite->data[2] = 1; } void sub_8060ED8(struct MapObject *mapObject, struct Sprite *sprite, u8 direction) @@ -6108,7 +6108,7 @@ bool8 sub_8060F5C(struct MapObject *mapObject, struct Sprite *sprite) { if (an_walk_any_2(mapObject, sprite)) { - sprite->data2 = 2; + sprite->data[2] = 2; return TRUE; } return FALSE; @@ -6126,7 +6126,7 @@ bool8 sub_8060F9C(struct MapObject *mapObject, struct Sprite *sprite) { if (an_walk_any_2(mapObject, sprite)) { - sprite->data2 = 2; + sprite->data[2] = 2; return TRUE; } return FALSE; @@ -6144,7 +6144,7 @@ bool8 sub_8060FDC(struct MapObject *mapObject, struct Sprite *sprite) { if (an_walk_any_2(mapObject, sprite)) { - sprite->data2 = 2; + sprite->data[2] = 2; return TRUE; } return FALSE; @@ -6162,7 +6162,7 @@ bool8 sub_806101C(struct MapObject *mapObject, struct Sprite *sprite) { if (an_walk_any_2(mapObject, sprite)) { - sprite->data2 = 2; + sprite->data[2] = 2; return TRUE; } return FALSE; @@ -6180,7 +6180,7 @@ bool8 sub_806105C(struct MapObject *mapObject, struct Sprite *sprite) { if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) { - sprite->data2 = 2; + sprite->data[2] = 2; return TRUE; } return FALSE; @@ -6198,7 +6198,7 @@ bool8 sub_806109C(struct MapObject *mapObject, struct Sprite *sprite) { if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) { - sprite->data2 = 2; + sprite->data[2] = 2; return TRUE; } return FALSE; @@ -6216,7 +6216,7 @@ bool8 sub_80610DC(struct MapObject *mapObject, struct Sprite *sprite) { if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) { - sprite->data2 = 2; + sprite->data[2] = 2; return TRUE; } return FALSE; @@ -6234,7 +6234,7 @@ bool8 sub_806111C(struct MapObject *mapObject, struct Sprite *sprite) { if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) { - sprite->data2 = 2; + sprite->data[2] = 2; return TRUE; } return FALSE; @@ -6252,7 +6252,7 @@ void sub_806113C(struct MapObject *mapObject, struct Sprite *sprite, u8 directio sub_8060320(direction, &x, &y, vSPp4[a4], vSPp4[a4]); npc_coords_shift(mapObject, mapObject->coords2.x + x, mapObject->coords2.y + y); sub_80646E4(sprite, direction, a4, a5); - sprite->data2 = 1; + sprite->data[2] = 1; sprite->animPaused = 0; mapObject->mapobj_bit_2 = 1; mapObject->mapobj_bit_4 = 1; @@ -6273,11 +6273,11 @@ u8 sub_806123C(struct MapObject *mapObject, struct Sprite *sprite, u8 (*const ca u8 retval; memcpy(vSPp4, gUnknown_08375A3A, sizeof gUnknown_08375A3A); retval = callback(sprite); - if (retval == 1 && vSPp4[sprite->data4] != 0) + if (retval == 1 && vSPp4[sprite->data[4]] != 0) { x = 0; y = 0; - sub_8060320(mapObject->placeholder18, &x, &y, vSPp4[sprite->data4], vSPp4[sprite->data4]); + sub_8060320(mapObject->placeholder18, &x, &y, vSPp4[sprite->data[4]], vSPp4[sprite->data[4]]); npc_coords_shift(mapObject, mapObject->coords2.x + x, mapObject->coords2.y + y); mapObject->mapobj_bit_2 = 1; mapObject->mapobj_bit_4 = 1; @@ -6353,7 +6353,7 @@ bool8 sub_80613D4(struct MapObject *mapObject, struct Sprite *sprite) if (sub_8061328(mapObject, sprite)) { mapObject->mapobj_bit_22 = 0; - sprite->data2 = 2; + sprite->data[2] = 2; return TRUE; } return FALSE; @@ -6370,7 +6370,7 @@ bool8 sub_806142C(struct MapObject *mapObject, struct Sprite *sprite) if (sub_8061328(mapObject, sprite)) { mapObject->mapobj_bit_22 = 0; - sprite->data2 = 2; + sprite->data[2] = 2; return TRUE; } return FALSE; @@ -6387,7 +6387,7 @@ bool8 sub_8061484(struct MapObject *mapObject, struct Sprite *sprite) if (sub_8061328(mapObject, sprite)) { mapObject->mapobj_bit_22 = 0; - sprite->data2 = 2; + sprite->data[2] = 2; return TRUE; } return FALSE; @@ -6404,7 +6404,7 @@ bool8 sub_80614DC(struct MapObject *mapObject, struct Sprite *sprite) if (sub_8061328(mapObject, sprite)) { mapObject->mapobj_bit_22 = 0; - sprite->data2 = 2; + sprite->data[2] = 2; return TRUE; } return FALSE; @@ -6412,16 +6412,16 @@ bool8 sub_80614DC(struct MapObject *mapObject, struct Sprite *sprite) void sub_8061508(struct Sprite *sprite, u16 duration) { - sprite->data2 = 1; - sprite->data3 = duration; + sprite->data[2] = 1; + sprite->data[3] = duration; } bool8 sub_8061510(struct MapObject *mapObject, struct Sprite *sprite) { - sprite->data3--; - if (!sprite->data3) + sprite->data[3]--; + if (!sprite->data[3]) { - sprite->data2 = 2; + sprite->data[2] = 2; return TRUE; } return FALSE; @@ -6472,7 +6472,7 @@ bool8 sub_80615EC(struct MapObject *mapObject, struct Sprite *sprite) { if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) { - sprite->data2 = 2; + sprite->data[2] = 2; return TRUE; } return FALSE; @@ -6487,7 +6487,7 @@ bool8 sub_806162C(struct MapObject *mapObject, struct Sprite *sprite) { if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) { - sprite->data2 = 2; + sprite->data[2] = 2; return TRUE; } return FALSE; @@ -6502,7 +6502,7 @@ bool8 sub_806166C(struct MapObject *mapObject, struct Sprite *sprite) { if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) { - sprite->data2 = 2; + sprite->data[2] = 2; return TRUE; } return FALSE; @@ -6517,7 +6517,7 @@ bool8 sub_80616AC(struct MapObject *mapObject, struct Sprite *sprite) { if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) { - sprite->data2 = 2; + sprite->data[2] = 2; return TRUE; } return FALSE; @@ -6528,16 +6528,16 @@ void sub_80616CC(struct MapObject *mapObject, struct Sprite *sprite, u8 directio FieldObjectSetDirection(mapObject, direction); sub_805FE28(mapObject, sprite, animId); sprite->animPaused = 0; - sprite->data2 = 1; - sprite->data3 = duration; + sprite->data[2] = 1; + sprite->data[3] = duration; } bool8 sub_8061714(struct MapObject *mapObject, struct Sprite *sprite) { - sprite->data3--; - if (sprite->data3 == 0) + sprite->data[3]--; + if (sprite->data[3] == 0) { - sprite->data2 = 2; + sprite->data[2] = 2; sprite->animPaused = 1; return TRUE; } @@ -6546,7 +6546,7 @@ bool8 sub_8061714(struct MapObject *mapObject, struct Sprite *sprite) bool8 sub_806173C(struct MapObject *mapObject, struct Sprite *sprite) { - if (sprite->data3 & 1) + if (sprite->data[3] & 1) { sprite->animDelayCounter++; } @@ -6661,7 +6661,7 @@ bool8 sub_8061B18(struct MapObject *mapObject, struct Sprite *sprite) { if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) { - sprite->data2 = 2; + sprite->data[2] = 2; return TRUE; } return FALSE; @@ -6680,7 +6680,7 @@ bool8 sub_8061B58(struct MapObject *mapObject, struct Sprite *sprite) { if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) { - sprite->data2 = 2; + sprite->data[2] = 2; return TRUE; } return FALSE; @@ -6699,7 +6699,7 @@ bool8 sub_8061B98(struct MapObject *mapObject, struct Sprite *sprite) { if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) { - sprite->data2 = 2; + sprite->data[2] = 2; return TRUE; } return FALSE; @@ -6718,7 +6718,7 @@ bool8 sub_8061BD8(struct MapObject *mapObject, struct Sprite *sprite) { if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) { - sprite->data2 = 2; + sprite->data[2] = 2; return TRUE; } return FALSE; @@ -6736,7 +6736,7 @@ bool8 sub_8061C18(struct MapObject *mapObject, struct Sprite *sprite) { if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) { - sprite->data2 = 2; + sprite->data[2] = 2; return TRUE; } return FALSE; @@ -6754,7 +6754,7 @@ bool8 sub_8061C58(struct MapObject *mapObject, struct Sprite *sprite) { if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) { - sprite->data2 = 2; + sprite->data[2] = 2; return TRUE; } return FALSE; @@ -6773,7 +6773,7 @@ bool8 sub_8061C98(struct MapObject *mapObject, struct Sprite *sprite) { if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) { - sprite->data2 = 2; + sprite->data[2] = 2; return TRUE; } return FALSE; @@ -6792,7 +6792,7 @@ bool8 sub_8061CD8(struct MapObject *mapObject, struct Sprite *sprite) { if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) { - sprite->data2 = 2; + sprite->data[2] = 2; return TRUE; } return FALSE; @@ -6810,7 +6810,7 @@ bool8 sub_8061D18(struct MapObject *mapObject, struct Sprite *sprite) { if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) { - sprite->data2 = 2; + sprite->data[2] = 2; return TRUE; } return FALSE; @@ -6828,7 +6828,7 @@ bool8 sub_8061D58(struct MapObject *mapObject, struct Sprite *sprite) { if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) { - sprite->data2 = 2; + sprite->data[2] = 2; return TRUE; } return FALSE; @@ -6847,7 +6847,7 @@ bool8 sub_8061D98(struct MapObject *mapObject, struct Sprite *sprite) { if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) { - sprite->data2 = 2; + sprite->data[2] = 2; return TRUE; } return FALSE; @@ -6866,7 +6866,7 @@ bool8 sub_8061DD8(struct MapObject *mapObject, struct Sprite *sprite) { if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) { - sprite->data2 = 2; + sprite->data[2] = 2; return TRUE; } return FALSE; @@ -6884,7 +6884,7 @@ bool8 sub_8061E18(struct MapObject *mapObject, struct Sprite *sprite) { if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) { - sprite->data2 = 2; + sprite->data[2] = 2; return TRUE; } return FALSE; @@ -6902,7 +6902,7 @@ bool8 sub_8061E58(struct MapObject *mapObject, struct Sprite *sprite) { if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) { - sprite->data2 = 2; + sprite->data[2] = 2; return TRUE; } return FALSE; @@ -6920,7 +6920,7 @@ bool8 sub_8061E98(struct MapObject *mapObject, struct Sprite *sprite) { if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) { - sprite->data2 = 2; + sprite->data[2] = 2; return TRUE; } return FALSE; @@ -6938,7 +6938,7 @@ bool8 sub_8061ED8(struct MapObject *mapObject, struct Sprite *sprite) { if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) { - sprite->data2 = 2; + sprite->data[2] = 2; return TRUE; } return FALSE; @@ -6948,7 +6948,7 @@ void npc_set_direction_and_anim__an_proceed(struct MapObject *mapObject, struct { obj_anim_image_set_and_seek(sprite, animNum, 0); FieldObjectSetDirection(mapObject, direction); - sprite->data2 = 1; + sprite->data[2] = 1; } bool8 sub_8061F24(struct MapObject *mapObject, struct Sprite *sprite) @@ -6963,7 +6963,7 @@ bool8 sub_8061F3C(struct MapObject *mapObject, struct Sprite *sprite) { if (sub_8064864(sprite)) { - sprite->data2 = 2; + sprite->data[2] = 2; return TRUE; } return FALSE; @@ -6987,7 +6987,7 @@ bool8 sub_8061FB0(struct MapObject *mapObject, struct Sprite *sprite) { if (sub_8061340(mapObject, sprite)) { - sprite->data2 = 2; + sprite->data[2] = 2; mapObject->mapobj_bit_5 = 0; return TRUE; } @@ -7006,7 +7006,7 @@ bool8 sub_8061FF8(struct MapObject *mapObject, struct Sprite *sprite) { if (sub_8061340(mapObject, sprite)) { - sprite->data2 = 2; + sprite->data[2] = 2; mapObject->mapobj_bit_5 = 0; return TRUE; } @@ -7025,7 +7025,7 @@ bool8 sub_8062040(struct MapObject *mapObject, struct Sprite *sprite) { if (sub_8061340(mapObject, sprite)) { - sprite->data2 = 2; + sprite->data[2] = 2; mapObject->mapobj_bit_5 = 0; return TRUE; } @@ -7044,7 +7044,7 @@ bool8 sub_8062088(struct MapObject *mapObject, struct Sprite *sprite) { if (sub_8061340(mapObject, sprite)) { - sprite->data2 = 2; + sprite->data[2] = 2; mapObject->mapobj_bit_5 = 0; return TRUE; } @@ -7058,7 +7058,7 @@ bool8 sub_80620B0(struct MapObject *mapObject, struct Sprite *sprite) { an_look_any(mapObject, sprite, sub_805FE90(mapObject->coords2.x, mapObject->coords2.y, gMapObjects[objectId].coords2.x, gMapObjects[objectId].coords2.y)); } - sprite->data2 = 1; + sprite->data[2] = 1; return TRUE; } @@ -7069,21 +7069,21 @@ bool8 sub_806210C(struct MapObject *mapObject, struct Sprite *sprite) { an_look_any(mapObject, sprite, GetOppositeDirection(sub_805FE90(mapObject->coords2.x, mapObject->coords2.y, gMapObjects[objectId].coords2.x, gMapObjects[objectId].coords2.y))); } - sprite->data2 = 1; + sprite->data[2] = 1; return TRUE; } bool8 sub_8062170(struct MapObject *mapObject, struct Sprite *sprite) { mapObject->mapobj_bit_9 = 1; - sprite->data2 = 1; + sprite->data[2] = 1; return TRUE; } bool8 sub_8062180(struct MapObject *mapObject, struct Sprite *sprite) { mapObject->mapobj_bit_9 = 0; - sprite->data2 = 1; + sprite->data[2] = 1; return TRUE; } @@ -7100,7 +7100,7 @@ bool8 sub_80621BC(struct MapObject *mapObject, struct Sprite *sprite) if (sub_8061328(mapObject, sprite)) { mapObject->mapobj_bit_22 = 0; - sprite->data2 = 2; + sprite->data[2] = 2; return TRUE; } return FALSE; @@ -7119,7 +7119,7 @@ bool8 sub_8062214(struct MapObject *mapObject, struct Sprite *sprite) if (sub_8061328(mapObject, sprite)) { mapObject->mapobj_bit_22 = 0; - sprite->data2 = 2; + sprite->data[2] = 2; return TRUE; } return FALSE; @@ -7138,7 +7138,7 @@ bool8 sub_806226C(struct MapObject *mapObject, struct Sprite *sprite) if (sub_8061328(mapObject, sprite)) { mapObject->mapobj_bit_22 = 0; - sprite->data2 = 2; + sprite->data[2] = 2; return TRUE; } return FALSE; @@ -7157,7 +7157,7 @@ bool8 sub_80622C4(struct MapObject *mapObject, struct Sprite *sprite) if (sub_8061328(mapObject, sprite)) { mapObject->mapobj_bit_22 = 0; - sprite->data2 = 2; + sprite->data[2] = 2; return TRUE; } return FALSE; @@ -7176,7 +7176,7 @@ bool8 sub_806231C(struct MapObject *mapObject, struct Sprite *sprite) if (sub_8061328(mapObject, sprite)) { mapObject->mapobj_bit_22 = 0; - sprite->data2 = 2; + sprite->data[2] = 2; return TRUE; } return FALSE; @@ -7195,7 +7195,7 @@ bool8 sub_8062374(struct MapObject *mapObject, struct Sprite *sprite) if (sub_8061328(mapObject, sprite)) { mapObject->mapobj_bit_22 = 0; - sprite->data2 = 2; + sprite->data[2] = 2; return TRUE; } return FALSE; @@ -7214,7 +7214,7 @@ bool8 sub_80623CC(struct MapObject *mapObject, struct Sprite *sprite) if (sub_8061328(mapObject, sprite)) { mapObject->mapobj_bit_22 = 0; - sprite->data2 = 2; + sprite->data[2] = 2; return TRUE; } return FALSE; @@ -7233,7 +7233,7 @@ bool8 sub_8062424(struct MapObject *mapObject, struct Sprite *sprite) if (sub_8061328(mapObject, sprite)) { mapObject->mapobj_bit_22 = 0; - sprite->data2 = 2; + sprite->data[2] = 2; return TRUE; } return FALSE; @@ -7252,7 +7252,7 @@ bool8 sub_806247C(struct MapObject *mapObject, struct Sprite *sprite) if (sub_8061358(mapObject, sprite)) { mapObject->mapobj_bit_22 = 0; - sprite->data2 = 2; + sprite->data[2] = 2; return TRUE; } return FALSE; @@ -7271,7 +7271,7 @@ bool8 sub_80624D4(struct MapObject *mapObject, struct Sprite *sprite) if (sub_8061358(mapObject, sprite)) { mapObject->mapobj_bit_22 = 0; - sprite->data2 = 2; + sprite->data[2] = 2; return TRUE; } return FALSE; @@ -7290,7 +7290,7 @@ bool8 sub_806252C(struct MapObject *mapObject, struct Sprite *sprite) if (sub_8061358(mapObject, sprite)) { mapObject->mapobj_bit_22 = 0; - sprite->data2 = 2; + sprite->data[2] = 2; return TRUE; } return FALSE; @@ -7309,7 +7309,7 @@ bool8 sub_8062584(struct MapObject *mapObject, struct Sprite *sprite) if (sub_8061358(mapObject, sprite)) { mapObject->mapobj_bit_22 = 0; - sprite->data2 = 2; + sprite->data[2] = 2; return TRUE; } return FALSE; @@ -7330,42 +7330,42 @@ bool8 sub_80625C8(struct MapObject *mapObject, struct Sprite *sprite) bool8 sub_80625D8(struct MapObject *mapObject, struct Sprite *sprite) { mapObject->mapobj_bit_25 = 0; - sprite->data2 = 1; + sprite->data[2] = 1; return TRUE; } bool8 sub_80625E8(struct MapObject *mapObject, struct Sprite *sprite) { mapObject->mapobj_bit_25 = 1; - sprite->data2 = 1; + sprite->data[2] = 1; return TRUE; } bool8 sub_80625F8(struct MapObject *mapObject, struct Sprite *sprite) { mapObject->mapobj_bit_12 = 1; - sprite->data2 = 1; + sprite->data[2] = 1; return TRUE; } bool8 sub_8062608(struct MapObject *mapObject, struct Sprite *sprite) { mapObject->mapobj_bit_12 = GetFieldObjectGraphicsInfo(mapObject->graphicsId)->inanimate; - sprite->data2 = 1; + sprite->data[2] = 1; return TRUE; } bool8 sub_8062634(struct MapObject *mapObject, struct Sprite *sprite) { mapObject->mapobj_bit_13 = 1; - sprite->data2 = 1; + sprite->data[2] = 1; return TRUE; } bool8 sub_8062644(struct MapObject *mapObject, struct Sprite *sprite) { mapObject->mapobj_bit_13 = 0; - sprite->data2 = 1; + sprite->data[2] = 1; return TRUE; } @@ -7373,7 +7373,7 @@ bool8 do_exclamation_mark_bubble_1(struct MapObject *mapObject, struct Sprite *s { FieldObjectGetLocalIdAndMap(mapObject, &gFieldEffectArguments[0], &gFieldEffectArguments[1], &gFieldEffectArguments[2]); FieldEffectStart(FLDEFF_EXCLAMATION_MARK_ICON_1); - sprite->data2 = 1; + sprite->data[2] = 1; return TRUE; } @@ -7381,7 +7381,7 @@ bool8 do_exclamation_mark_bubble_2(struct MapObject *mapObject, struct Sprite *s { FieldObjectGetLocalIdAndMap(mapObject, &gFieldEffectArguments[0], &gFieldEffectArguments[1], &gFieldEffectArguments[2]); FieldEffectStart(FLDEFF_EXCLAMATION_MARK_ICON_2); - sprite->data2 = 1; + sprite->data[2] = 1; return TRUE; } @@ -7389,7 +7389,7 @@ bool8 do_heart_bubble(struct MapObject *mapObject, struct Sprite *sprite) { FieldObjectGetLocalIdAndMap(mapObject, &gFieldEffectArguments[0], &gFieldEffectArguments[1], &gFieldEffectArguments[2]); FieldEffectStart(FLDEFF_HEART_ICON); - sprite->data2 = 1; + sprite->data[2] = 1; return TRUE; } @@ -7404,13 +7404,13 @@ bool8 sub_80626C0(struct MapObject *mapObject, struct Sprite *sprite) } else if (mapObject->animPattern != 0x39 && mapObject->animPattern != 0x3A) { - sprite->data2 = 2; + sprite->data[2] = 2; return TRUE; } else { sub_812869C(mapObject); - sprite->data2 = 1; + sprite->data[2] = 1; return sub_8062704(mapObject, sprite); } } @@ -7419,7 +7419,7 @@ bool8 sub_8062704(struct MapObject *mapObject, struct Sprite *sprite) { if (sub_81286C4(mapObject)) { - sprite->data2 = 2; + sprite->data[2] = 2; return TRUE; } return FALSE; @@ -7428,7 +7428,7 @@ bool8 sub_8062704(struct MapObject *mapObject, struct Sprite *sprite) bool8 sub_8062724(struct MapObject *mapObject, struct Sprite *sprite) { obj_anim_image_set_and_seek(sprite, 1, 0); - sprite->data2 = 1; + sprite->data[2] = 1; return FALSE; } @@ -7437,7 +7437,7 @@ bool8 sub_8062740(struct MapObject *mapObject, struct Sprite *sprite) if (sub_8064864(sprite)) { sub_8064820(sprite, 0x20); - sprite->data2 = 2; + sprite->data[2] = 2; } return FALSE; } @@ -7448,7 +7448,7 @@ bool8 sub_8062764(struct MapObject *mapObject, struct Sprite *sprite) if (sub_8064824(sprite)) { mapObject->mapobj_bit_13 = 1; - sprite->data2 = 3; + sprite->data[2] = 3; } return FALSE; } @@ -7456,7 +7456,7 @@ bool8 sub_8062764(struct MapObject *mapObject, struct Sprite *sprite) bool8 sub_80627A0(struct MapObject *mapObject, struct Sprite *sprite) { obj_anim_image_set_and_seek(sprite, 1, 0); - sprite->data2 = 1; + sprite->data[2] = 1; return FALSE; } @@ -7465,7 +7465,7 @@ bool8 sub_80627BC(struct MapObject *mapObject, struct Sprite *sprite) if (sub_8064864(sprite)) { sub_8064820(sprite, 0x20); - sprite->data2 = 2; + sprite->data[2] = 2; } return FALSE; } @@ -7476,7 +7476,7 @@ bool8 sub_80627E0(struct MapObject *mapObject, struct Sprite *sprite) if (sub_8064824(sprite)) { mapObject->mapobj_bit_13 = 1; - sprite->data2 = 3; + sprite->data[2] = 3; } return FALSE; } @@ -7484,14 +7484,14 @@ bool8 sub_80627E0(struct MapObject *mapObject, struct Sprite *sprite) bool8 sub_806281C(struct MapObject *mapObject, struct Sprite *sprite) { mapObject->mapobj_bit_26 = 1; - sprite->data2 = 1; + sprite->data[2] = 1; return TRUE; } bool8 sub_806282C(struct MapObject *mapObject, struct Sprite *sprite) { mapObject->mapobj_bit_26 = 0; - sprite->data2 = 1; + sprite->data[2] = 1; return TRUE; } @@ -7527,7 +7527,7 @@ bool8 sub_80628D0(struct MapObject *mapObject, struct Sprite *sprite) if (an_walk_any_2(mapObject, sprite)) { sprite->affineAnimPaused = 1; - sprite->data2 = 2; + sprite->data[2] = 2; return TRUE; } return FALSE; @@ -7548,7 +7548,7 @@ bool8 sub_8062930(struct MapObject *mapObject, struct Sprite *sprite) if (an_walk_any_2(mapObject, sprite)) { sprite->affineAnimPaused = 1; - sprite->data2 = 2; + sprite->data[2] = 2; return TRUE; } return FALSE; @@ -7560,7 +7560,7 @@ void sub_806295C(struct MapObject *mapObject, struct Sprite *sprite, u8 directio npc_coords_shift_still(mapObject); sub_805FE64(mapObject, sprite, sub_805FDD8(direction)); sprite->animPaused = 1; - sprite->data2 = 1; + sprite->data[2] = 1; } bool8 sub_806299C(struct MapObject *mapObject, struct Sprite *sprite) @@ -7679,7 +7679,7 @@ bool8 sub_8062BFC(struct MapObject *mapObject, struct Sprite *sprite) if (sub_8061328(mapObject, sprite)) { mapObject->mapobj_bit_22 = 0; - sprite->data2 = 2; + sprite->data[2] = 2; return TRUE; } return FALSE; @@ -7698,7 +7698,7 @@ bool8 sub_8062C54(struct MapObject *mapObject, struct Sprite *sprite) if (sub_8061328(mapObject, sprite)) { mapObject->mapobj_bit_22 = 0; - sprite->data2 = 2; + sprite->data[2] = 2; return TRUE; } return FALSE; @@ -7717,7 +7717,7 @@ bool8 sub_8062CAC(struct MapObject *mapObject, struct Sprite *sprite) if (sub_8061328(mapObject, sprite)) { mapObject->mapobj_bit_22 = 0; - sprite->data2 = 2; + sprite->data[2] = 2; return TRUE; } return FALSE; @@ -7736,7 +7736,7 @@ bool8 sub_8062D04(struct MapObject *mapObject, struct Sprite *sprite) if (sub_8061328(mapObject, sprite)) { mapObject->mapobj_bit_22 = 0; - sprite->data2 = 2; + sprite->data[2] = 2; return TRUE; } return FALSE; @@ -7755,7 +7755,7 @@ bool8 sub_8062D5C(struct MapObject *mapObject, struct Sprite *sprite) if (sub_8061328(mapObject, sprite)) { mapObject->mapobj_bit_22 = 0; - sprite->data2 = 2; + sprite->data[2] = 2; return TRUE; } return FALSE; @@ -7774,7 +7774,7 @@ bool8 sub_8062DB4(struct MapObject *mapObject, struct Sprite *sprite) if (sub_8061328(mapObject, sprite)) { mapObject->mapobj_bit_22 = 0; - sprite->data2 = 2; + sprite->data[2] = 2; return TRUE; } return FALSE; @@ -7793,7 +7793,7 @@ bool8 sub_8062E0C(struct MapObject *mapObject, struct Sprite *sprite) if (sub_8061328(mapObject, sprite)) { mapObject->mapobj_bit_22 = 0; - sprite->data2 = 2; + sprite->data[2] = 2; return TRUE; } return FALSE; @@ -7812,7 +7812,7 @@ bool8 sub_8062E64(struct MapObject *mapObject, struct Sprite *sprite) if (sub_8061328(mapObject, sprite)) { mapObject->mapobj_bit_22 = 0; - sprite->data2 = 2; + sprite->data[2] = 2; return TRUE; } return FALSE; @@ -7831,7 +7831,7 @@ bool8 sub_8062EBC(struct MapObject *mapObject, struct Sprite *sprite) if (sub_8061328(mapObject, sprite)) { mapObject->mapobj_bit_22 = 0; - sprite->data2 = 2; + sprite->data[2] = 2; return TRUE; } return FALSE; @@ -7850,7 +7850,7 @@ bool8 sub_8062F14(struct MapObject *mapObject, struct Sprite *sprite) if (sub_8061328(mapObject, sprite)) { mapObject->mapobj_bit_22 = 0; - sprite->data2 = 2; + sprite->data[2] = 2; return TRUE; } return FALSE; @@ -7869,7 +7869,7 @@ bool8 sub_8062F6C(struct MapObject *mapObject, struct Sprite *sprite) if (sub_8061328(mapObject, sprite)) { mapObject->mapobj_bit_22 = 0; - sprite->data2 = 2; + sprite->data[2] = 2; return TRUE; } return FALSE; @@ -7888,7 +7888,7 @@ bool8 sub_8062FC4(struct MapObject *mapObject, struct Sprite *sprite) if (sub_8061328(mapObject, sprite)) { mapObject->mapobj_bit_22 = 0; - sprite->data2 = 2; + sprite->data[2] = 2; return TRUE; } return FALSE; @@ -7937,7 +7937,7 @@ bool8 sub_8063128(struct MapObject *mapObject, struct Sprite *sprite) { if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) { - sprite->data2 = 2; + sprite->data[2] = 2; return TRUE; } return FALSE; @@ -7955,7 +7955,7 @@ bool8 sub_8063168(struct MapObject *mapObject, struct Sprite *sprite) { if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) { - sprite->data2 = 2; + sprite->data[2] = 2; return TRUE; } return FALSE; @@ -7973,7 +7973,7 @@ bool8 sub_80631A8(struct MapObject *mapObject, struct Sprite *sprite) { if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) { - sprite->data2 = 2; + sprite->data[2] = 2; return TRUE; } return FALSE; @@ -7991,7 +7991,7 @@ bool8 sub_80631E8(struct MapObject *mapObject, struct Sprite *sprite) { if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) { - sprite->data2 = 2; + sprite->data[2] = 2; return TRUE; } return FALSE; @@ -8015,7 +8015,7 @@ bool8 sub_8063258(struct MapObject *mapObject, struct Sprite *sprite) { if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) { - sprite->data2 = 2; + sprite->data[2] = 2; return TRUE; } return FALSE; @@ -8033,7 +8033,7 @@ bool8 sub_8063298(struct MapObject *mapObject, struct Sprite *sprite) { if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) { - sprite->data2 = 2; + sprite->data[2] = 2; return TRUE; } return FALSE; @@ -8051,7 +8051,7 @@ bool8 sub_80632D8(struct MapObject *mapObject, struct Sprite *sprite) { if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) { - sprite->data2 = 2; + sprite->data[2] = 2; return TRUE; } return FALSE; @@ -8069,7 +8069,7 @@ bool8 sub_8063318(struct MapObject *mapObject, struct Sprite *sprite) { if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) { - sprite->data2 = 2; + sprite->data[2] = 2; return TRUE; } return FALSE; @@ -8094,7 +8094,7 @@ bool8 sub_8063390(struct MapObject *mapObject, struct Sprite *sprite) { if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) { - sprite->data2 = 2; + sprite->data[2] = 2; return TRUE; } return FALSE; @@ -8112,7 +8112,7 @@ bool8 sub_80633D0(struct MapObject *mapObject, struct Sprite *sprite) { if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) { - sprite->data2 = 2; + sprite->data[2] = 2; return TRUE; } return FALSE; @@ -8130,7 +8130,7 @@ bool8 sub_8063410(struct MapObject *mapObject, struct Sprite *sprite) { if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) { - sprite->data2 = 2; + sprite->data[2] = 2; return TRUE; } return FALSE; @@ -8148,7 +8148,7 @@ bool8 sub_8063450(struct MapObject *mapObject, struct Sprite *sprite) { if (npc_obj_ministep_stop_on_arrival(mapObject, sprite)) { - sprite->data2 = 2; + sprite->data[2] = 2; return TRUE; } return FALSE; diff --git a/src/field/field_map_obj_helpers.c b/src/field/field_map_obj_helpers.c index 59e857aae..f1a113d44 100644 --- a/src/field/field_map_obj_helpers.c +++ b/src/field/field_map_obj_helpers.c @@ -98,21 +98,21 @@ void Step8(struct Sprite *sprite, u8 dir) void oamt_npc_ministep_reset(struct Sprite *sprite, u8 a2, u8 a3) { - sprite->data3 = a2; - sprite->data4 = a3; - sprite->data5 = 0; + sprite->data[3] = a2; + sprite->data[4] = a3; + sprite->data[5] = 0; } bool8 obj_npc_ministep(struct Sprite *sprite) { - if (sprite->data5 >= gUnknown_08376194[sprite->data4]) + if (sprite->data[5] >= gUnknown_08376194[sprite->data[4]]) return FALSE; - gUnknown_08376180[sprite->data4][sprite->data5](sprite, sprite->data3); + gUnknown_08376180[sprite->data[4]][sprite->data[5]](sprite, sprite->data[3]); - sprite->data5++; + sprite->data[5]++; - if (sprite->data5 < gUnknown_08376194[sprite->data4]) + if (sprite->data[5] < gUnknown_08376194[sprite->data[4]]) return FALSE; return TRUE; @@ -120,22 +120,22 @@ bool8 obj_npc_ministep(struct Sprite *sprite) void sub_806467C(struct Sprite *sprite, u8 a2) { - sprite->data3 = a2; - sprite->data4 = 0; - sprite->data5 = 0; + sprite->data[3] = a2; + sprite->data[4] = 0; + sprite->data[5] = 0; } bool8 sub_806468C(struct Sprite *sprite) { - if (!(sprite->data4 & 1)) + if (!(sprite->data[4] & 1)) { - Step1(sprite, sprite->data3); - sprite->data5++; + Step1(sprite, sprite->data[3]); + sprite->data[5]++; } - sprite->data4++; + sprite->data[4]++; - if (sprite->data5 > 15) + if (sprite->data[5] > 15) return TRUE; else return FALSE; @@ -148,10 +148,10 @@ s16 sub_80646C8(s16 a1, u8 a2) void sub_80646E4(struct Sprite *sprite, u8 a2, u8 a3, u8 a4) { - sprite->data3 = a2; - sprite->data4 = a3; - sprite->data5 = a4; - sprite->data6 = 0; + sprite->data[3] = a2; + sprite->data[4] = a3; + sprite->data[5] = a4; + sprite->data[6] = 0; } u8 sub_8064704(struct Sprite *sprite) @@ -165,17 +165,17 @@ u8 sub_8064704(struct Sprite *sprite) v2 = 0; - if (sprite->data4) - Step1(sprite, sprite->data3); + if (sprite->data[4]) + Step1(sprite, sprite->data[3]); - sprite->pos2.y = sub_80646C8(sprite->data6 >> v6[sprite->data4], sprite->data5); + sprite->pos2.y = sub_80646C8(sprite->data[6] >> v6[sprite->data[4]], sprite->data[5]); - sprite->data6++; + sprite->data[6]++; - if (sprite->data6 == (v5[sprite->data4] >> 1)) + if (sprite->data[6] == (v5[sprite->data[4]] >> 1)) v2 = 1; - if (sprite->data6 >= v5[sprite->data4]) + if (sprite->data[6] >= v5[sprite->data[4]]) { sprite->pos2.y = 0; v2 = -1; @@ -195,17 +195,17 @@ u8 sub_806478C(struct Sprite *sprite) v2 = 0; - if (sprite->data4 && !(sprite->data6 & 1)) - Step1(sprite, sprite->data3); + if (sprite->data[4] && !(sprite->data[6] & 1)) + Step1(sprite, sprite->data[3]); - sprite->pos2.y = sub_80646C8(sprite->data6 >> v6[sprite->data4], sprite->data5); + sprite->pos2.y = sub_80646C8(sprite->data[6] >> v6[sprite->data[4]], sprite->data[5]); - sprite->data6++; + sprite->data[6]++; - if (sprite->data6 == (v5[sprite->data4] >> 1)) + if (sprite->data[6] == (v5[sprite->data[4]] >> 1)) v2 = 1; - if (sprite->data6 >= v5[sprite->data4]) + if (sprite->data[6] >= v5[sprite->data[4]]) { sprite->pos2.y = 0; v2 = -1; @@ -216,14 +216,14 @@ u8 sub_806478C(struct Sprite *sprite) void sub_8064820(struct Sprite *sprite, u16 a2) { - sprite->data3 = a2; + sprite->data[3] = a2; } bool8 sub_8064824(struct Sprite *sprite) { - sprite->data3--; + sprite->data[3]--; - if (sprite->data3 == 0) + if (sprite->data[3] == 0) return TRUE; else return FALSE; @@ -273,7 +273,7 @@ void sub_806487C(struct Sprite *sprite, bool8 invisible) void sub_8064970(struct Sprite *sprite) { - SetObjectSubpriorityByZCoord(sprite->data1, sprite, 1); + SetObjectSubpriorityByZCoord(sprite->data[1], sprite, 1); sub_806487C(sprite, 0); } @@ -283,7 +283,7 @@ void sub_8064990(u8 a1, u8 dir) for (i = 0; i < MAX_SPRITES; i++) { struct Sprite *sprite = &gSprites[i]; - if (sprite->inUse && sprite->callback == sub_8064970 && (u8)sprite->data0 == a1) + if (sprite->inUse && sprite->callback == sub_8064970 && (u8)sprite->data[0] == a1) { u8 animNum = FieldObjectDirectionToImageAnimId(dir); StartSpriteAnim(sprite, animNum); diff --git a/src/field/field_tasks.c b/src/field/field_tasks.c index 767753da2..95b8b749b 100644 --- a/src/field/field_tasks.c +++ b/src/field/field_tasks.c @@ -197,7 +197,7 @@ const struct MetatileOffset *sub_80695E0(const struct MetatileOffset a0[][2], s8 void sub_8069638(const struct MetatileOffset offsets[][2], s16 x, s16 y, bool32 flag) { const struct MetatileOffset *offsetData = sub_80695E0(offsets, MapGridGetMetatileBehaviorAt(x, y)); - const struct MetatileOffset *offsetData2 = offsetData; + const struct MetatileOffset *offsetdata[2] = offsetData; if (offsetData != NULL) { MapGridSetMetatileIdAt(x + offsetData[0].x, y + offsetData[0].y, offsetData[0].tileId); @@ -205,10 +205,10 @@ void sub_8069638(const struct MetatileOffset offsets[][2], s16 x, s16 y, bool32 { CurrentMapDrawMetatileAt(x + offsetData[0].x, y + offsetData[0].y); } - MapGridSetMetatileIdAt(x + offsetData2[1].x, y + offsetData2[1].y, offsetData2[1].tileId); + MapGridSetMetatileIdAt(x + offsetdata[2][1].x, y + offsetdata[2][1].y, offsetdata[2][1].tileId); if (flag) { - CurrentMapDrawMetatileAt(x + offsetData2[1].x, y + offsetData2[1].y); + CurrentMapDrawMetatileAt(x + offsetdata[2][1].x, y + offsetdata[2][1].y); } } } diff --git a/src/field/field_weather.c b/src/field/field_weather.c index 042655644..acd8b81ff 100644 --- a/src/field/field_weather.c +++ b/src/field/field_weather.c @@ -1248,8 +1248,8 @@ void sub_807E0A0(void) void sub_807E0F4(struct Sprite *sprite) { - sprite->data0 = (sprite->data0 + 1) & 1; - if (sprite->data0 != 0) + sprite->data[0] = (sprite->data[0] + 1) & 1; + if (sprite->data[0] != 0) sprite->pos1.x--; } @@ -1468,55 +1468,55 @@ void sub_807E4EC(struct Sprite *sprite) s32 r4; s32 r0; - if (sprite->data1 == 0) - sprite->data1 = 361; - randVal = sprite->data1 * 1103515245 + 12345; - sprite->data1 = ((randVal & 0x7FFF0000) >> 16) % 600; + if (sprite->data[1] == 0) + sprite->data[1] = 361; + randVal = sprite->data[1] * 1103515245 + 12345; + sprite->data[1] = ((randVal & 0x7FFF0000) >> 16) % 600; r6 = gUnknown_0839AAC4[gUnknown_08396FC4->unknown_6DC][0]; - r4 = sprite->data1 % 30; - sprite->data2 = r4 * 8; // useless assignment + r4 = sprite->data[1] % 30; + sprite->data[2] = r4 * 8; // useless assignment - r0 = sprite->data1 / 30; - sprite->data3 = r0 * 8; // useless assignment + r0 = sprite->data[1] / 30; + sprite->data[3] = r0 * 8; // useless assignment - sprite->data2 = r4; - sprite->data2 <<= 7; + sprite->data[2] = r4; + sprite->data[2] <<= 7; - sprite->data3 = r0; - sprite->data3 <<= 7; + sprite->data[3] = r0; + sprite->data[3] <<= 7; - sprite->data2 -= gUnknown_0839AABC[gUnknown_08396FC4->unknown_6DC][0] * r6; - sprite->data3 -= gUnknown_0839AABC[gUnknown_08396FC4->unknown_6DC][1] * r6; + sprite->data[2] -= gUnknown_0839AABC[gUnknown_08396FC4->unknown_6DC][0] * r6; + sprite->data[3] -= gUnknown_0839AABC[gUnknown_08396FC4->unknown_6DC][1] * r6; StartSpriteAnim(sprite, 0); - sprite->data4 = 0; + sprite->data[4] = 0; sprite->coordOffsetEnabled = FALSE; - sprite->data0 = r6; + sprite->data[0] = r6; } void sub_807E5C0(struct Sprite *sprite) { - if (sprite->data4 == 0) + if (sprite->data[4] == 0) { - sprite->data2 += gUnknown_0839AABC[gUnknown_08396FC4->unknown_6DC][0]; - sprite->data3 += gUnknown_0839AABC[gUnknown_08396FC4->unknown_6DC][1]; - sprite->pos1.x = sprite->data2 >> 4; - sprite->pos1.y = sprite->data3 >> 4; + sprite->data[2] += gUnknown_0839AABC[gUnknown_08396FC4->unknown_6DC][0]; + sprite->data[3] += gUnknown_0839AABC[gUnknown_08396FC4->unknown_6DC][1]; + sprite->pos1.x = sprite->data[2] >> 4; + sprite->pos1.y = sprite->data[3] >> 4; - if (sprite->data5 != 0 + if (sprite->data[5] != 0 && (sprite->pos1.x >= -8 && sprite->pos1.x <= 248) && sprite->pos1.y >= -16 && sprite->pos1.y <= 176) sprite->invisible = FALSE; else sprite->invisible = TRUE; - sprite->data0--; - if (sprite->data0 == 0) + sprite->data[0]--; + if (sprite->data[0] == 0) { StartSpriteAnim(sprite, gUnknown_08396FC4->unknown_6DC + 1); - sprite->data4 = 1; + sprite->data[4] = 1; sprite->pos1.x -= gSpriteCoordOffsetX; sprite->pos1.y -= gSpriteCoordOffsetY; sprite->coordOffsetEnabled = TRUE; @@ -1531,14 +1531,14 @@ void sub_807E5C0(struct Sprite *sprite) void sub_807E6C4(struct Sprite *sprite) { - if (sprite->data0 == 0) + if (sprite->data[0] == 0) { sub_807E4EC(sprite); sprite->callback = sub_807E5C0; } else { - sprite->data0--; + sprite->data[0]--; } } @@ -1554,13 +1554,13 @@ void sub_807E6F0(struct Sprite *sprite, u16 b) { while (--r4 != 0xFFFF) sub_807E5C0(sprite); - sprite->data6 = 0; + sprite->data[6] = 0; } else { - sprite->data0 = r4 - r8; + sprite->data[0] = r4 - r8; sprite->invisible = TRUE; - sprite->data6 = 1; + sprite->data[6] = 1; } } @@ -1584,10 +1584,10 @@ bool8 sub_807E7B4(void) gUnknown_0839AA08[r7].x, gUnknown_0839AA08[r7].y, 78); if (spriteId != 64) { - gSprites[spriteId].data5 = 0; - gSprites[spriteId].data1 = r7 * 145; - while (gSprites[spriteId].data1 >= 600) - gSprites[spriteId].data1 -= 600; + gSprites[spriteId].data[5] = 0; + gSprites[spriteId].data[1] = r7 * 145; + while (gSprites[spriteId].data[1] >= 600) + gSprites[spriteId].data[1] -= 600; sub_807E4EC(&gSprites[spriteId]); sub_807E6F0(&gSprites[spriteId], r7 * 9); gSprites[spriteId].invisible = TRUE; @@ -1606,7 +1606,7 @@ bool8 sub_807E7B4(void) { if (gUnknown_08396FC4->unknown_0[i] != NULL) { - if (gUnknown_08396FC4->unknown_0[i]->data6 == 0) + if (gUnknown_08396FC4->unknown_0[i]->data[6] == 0) gUnknown_08396FC4->unknown_0[i]->callback = sub_807E5C0; else gUnknown_08396FC4->unknown_0[i]->callback = sub_807E6C4; @@ -1627,12 +1627,12 @@ bool8 sub_807E8E8(void) gUnknown_08396FC4->unknown_6D6 = 0; if (gUnknown_08396FC4->unknown_6D8 < gUnknown_08396FC4->unknown_6D9) { - gUnknown_08396FC4->unknown_0[gUnknown_08396FC4->unknown_6D8++]->data5 = 1; + gUnknown_08396FC4->unknown_0[gUnknown_08396FC4->unknown_6D8++]->data[5] = 1; } else { gUnknown_08396FC4->unknown_6D8--; - gUnknown_08396FC4->unknown_0[gUnknown_08396FC4->unknown_6D8]->data5 = 0; + gUnknown_08396FC4->unknown_0[gUnknown_08396FC4->unknown_6D8]->data[5] = 0; gUnknown_08396FC4->unknown_0[gUnknown_08396FC4->unknown_6D8]->invisible = TRUE; } } @@ -1739,7 +1739,7 @@ bool8 snowflake_add(void) if (spriteId == 64) return FALSE; - gSprites[spriteId].data4 = gUnknown_08396FC4->unknown_6E4; + gSprites[spriteId].data[4] = gUnknown_08396FC4->unknown_6E4; sub_807EC40(&gSprites[spriteId]); gSprites[spriteId].coordOffsetEnabled = TRUE; gUnknown_08396FC4->unknown_60[gUnknown_08396FC4->unknown_6E4++] = &gSprites[spriteId]; @@ -1758,21 +1758,21 @@ bool8 snowflake_remove(void) void sub_807EC40(struct Sprite *sprite) { - u16 r4 = ((sprite->data4 * 5) & 7) * 30 + (Random() % 30); + u16 r4 = ((sprite->data[4] * 5) & 7) * 30 + (Random() % 30); u16 r6; sprite->pos1.y = -3 - (gSpriteCoordOffsetY + sprite->centerToCornerVecY); sprite->pos1.x = r4 - (gSpriteCoordOffsetX + sprite->centerToCornerVecX); - sprite->data0 = sprite->pos1.y * 128; + sprite->data[0] = sprite->pos1.y * 128; sprite->pos2.x = 0; r6 = Random(); - sprite->data1 = (r6 & 3) * 5 + 64; - sprite->data7 = (r6 & 3) * 5 + 64; + sprite->data[1] = (r6 & 3) * 5 + 64; + sprite->data[7] = (r6 & 3) * 5 + 64; StartSpriteAnim(sprite, (r6 & 1) ? 0 : 1); - sprite->data3 = 0; - sprite->data2 = ((r6 & 3) == 0) ? 2 : 1; - sprite->data6 = (r6 & 0x1F) + 210; - sprite->data5 = 0; + sprite->data[3] = 0; + sprite->data[2] = ((r6 & 3) == 0) ? 2 : 1; + sprite->data[6] = (r6 & 0x1F) + 210; + sprite->data[5] = 0; } void sub_807ECEC(struct Sprite *sprite) @@ -1782,7 +1782,7 @@ void sub_807ECEC(struct Sprite *sprite) sprite->invisible = FALSE; sprite->callback = sub_807ED48; sprite->pos1.y = 0xFA - (gSpriteCoordOffsetY + sprite->centerToCornerVecY); - sprite->data0 = sprite->pos1.y * 128; + sprite->data[0] = sprite->pos1.y * 128; gUnknown_08396FC4->unknown_6E2 = 0; } } @@ -1792,10 +1792,10 @@ void sub_807ED48(struct Sprite *sprite) s16 r3; s16 r2; - sprite->data0 += sprite->data1; - sprite->pos1.y = sprite->data0 >> 7; - sprite->data3 = (sprite->data3 + sprite->data2) & 0xFF; - sprite->pos2.x = gSineTable[sprite->data3] / 64; + sprite->data[0] += sprite->data[1]; + sprite->pos1.y = sprite->data[0] >> 7; + sprite->data[3] = (sprite->data[3] + sprite->data[2]) & 0xFF; + sprite->pos2.x = gSineTable[sprite->data[3]] / 64; r3 = (sprite->pos1.x + sprite->centerToCornerVecX + gSpriteCoordOffsetX) & 0x1FF; if (r3 & 0x100) @@ -1809,22 +1809,22 @@ void sub_807ED48(struct Sprite *sprite) if (r2 > 163 && r2 < 171) { sprite->pos1.y = 250 - (gSpriteCoordOffsetY + sprite->centerToCornerVecY); - sprite->data0 = sprite->pos1.y * 128; - sprite->data5 = 0; - sprite->data6 = 220; + sprite->data[0] = sprite->pos1.y * 128; + sprite->data[5] = 0; + sprite->data[6] = 220; } else if (r2 > 242 && r2 < 250) { sprite->pos1.y = 163; - sprite->data0 = sprite->pos1.y * 128; - sprite->data5 = 0; - sprite->data6 = 220; + sprite->data[0] = sprite->pos1.y * 128; + sprite->data[5] = 0; + sprite->data[6] = 220; sprite->invisible = TRUE; sprite->callback = sub_807ECEC; } - sprite->data5++; - if (sprite->data5 == sprite->data6) + sprite->data[5]++; + if (sprite->data[5] == sprite->data[6]) { sub_807EC40(sprite); sprite->pos1.y = 250; @@ -2135,10 +2135,10 @@ bool8 sub_807F5EC(void) void sub_807F688(struct Sprite *sprite) { sprite->pos2.y = (u8)gSpriteCoordOffsetY; - sprite->pos1.x = gUnknown_08396FC4->unknown_6EE + 32 + sprite->data0 * 64; + sprite->pos1.x = gUnknown_08396FC4->unknown_6EE + 32 + sprite->data[0] * 64; if (sprite->pos1.x > 0x10F) { - sprite->pos1.x = 480 + gUnknown_08396FC4->unknown_6EE - (4 - sprite->data0) * 64; + sprite->pos1.x = 480 + gUnknown_08396FC4->unknown_6EE - (4 - sprite->data[0]) * 64; sprite->pos1.x &= 0x1FF; } } diff --git a/src/field/fldeff_cut.c b/src/field/fldeff_cut.c index 00cabe5c0..6e7f14a8c 100644 --- a/src/field/fldeff_cut.c +++ b/src/field/fldeff_cut.c @@ -136,7 +136,7 @@ bool8 FldEff_CutGrass(void) { eCutGrassSpriteArray[i] = CreateSprite((struct SpriteTemplate *)&gSpriteTemplate_CutGrass, gSprites[gPlayerAvatar.spriteId].oam.x + 8, gSprites[gPlayerAvatar.spriteId].oam.y + 20, 0); - gSprites[eCutGrassSpriteArray[i]].data2 = 32 * i; + gSprites[eCutGrassSpriteArray[i]].data[2] = 32 * i; } return 0; } @@ -242,9 +242,9 @@ void sub_80A28F4(s16 x, s16 y) void sub_80A2A48(struct Sprite *sprite) { - sprite->data0 = 8; - sprite->data1 = 0; - sprite->data3 = 0; + sprite->data[0] = 8; + sprite->data[1] = 0; + sprite->data[3] = 0; sprite->callback = (void *)objc_8097BBC; } @@ -253,16 +253,16 @@ void objc_8097BBC(struct Sprite *sprite) u16 tempdata; u16 tempdata2; - sprite->pos2.x = Sin(sprite->data2, sprite->data0); - sprite->pos2.y = Cos(sprite->data2, sprite->data0); + sprite->pos2.x = Sin(sprite->data[2], sprite->data[0]); + sprite->pos2.y = Cos(sprite->data[2], sprite->data[0]); - sprite->data2 = (sprite->data2 + 8) & 0xFF; - sprite->data0 += ((tempdata2 = sprite->data3) << 16 >> 18) + 1; // what? - sprite->data3 = tempdata2 + 1; + sprite->data[2] = (sprite->data[2] + 8) & 0xFF; + sprite->data[0] += ((tempdata2 = sprite->data[3]) << 16 >> 18) + 1; // what? + sprite->data[3] = tempdata2 + 1; - tempdata = sprite->data1; + tempdata = sprite->data[1]; if((s16)tempdata != 28) // done rotating the grass, execute clean up function - sprite->data1++; + sprite->data[1]++; else sprite->callback = (void *)sub_80A2AB8; } diff --git a/src/field/fldeff_softboiled.c b/src/field/fldeff_softboiled.c index b2c3d9bd1..c2a315233 100644 --- a/src/field/fldeff_softboiled.c +++ b/src/field/fldeff_softboiled.c @@ -82,8 +82,8 @@ static void sub_8133D50(u8 taskId) { struct Sprite *sprites = gSprites; - unk1 = sprites[EWRAM_1000.unk1].data0; - unk2 = sprites[EWRAM_1000.unk2].data0; + unk1 = sprites[EWRAM_1000.unk1].data[0]; + unk2 = sprites[EWRAM_1000.unk2].data[0]; if (unk1 > 5 || unk2 > 5) { @@ -91,7 +91,7 @@ static void sub_8133D50(u8 taskId) { return; } - EWRAM_1C000.unk0 = &gPlayerParty[sprites[EWRAM_1000.unk2].data0]; + EWRAM_1C000.unk0 = &gPlayerParty[sprites[EWRAM_1000.unk2].data[0]]; hp = GetMonData(EWRAM_1C000.unk0, MON_DATA_HP); if (hp == 0 || unk1 == unk2 || GetMonData(EWRAM_1C000.unk0, MON_DATA_MAX_HP) == hp) @@ -102,7 +102,7 @@ static void sub_8133D50(u8 taskId) { PlaySE(SE_KAIFUKU); - EWRAM_1C000.unk5 = gSprites[EWRAM_1000.unk1].data0; + EWRAM_1C000.unk5 = gSprites[EWRAM_1000.unk1].data[0]; pokemon = &gPlayerParty[EWRAM_1C000.unk5]; EWRAM_1C000.unk0 = pokemon; diff --git a/src/field/item_menu.c b/src/field/item_menu.c index 09542cc6d..67362d5f3 100644 --- a/src/field/item_menu.c +++ b/src/field/item_menu.c @@ -4080,11 +4080,11 @@ static const struct CompressedSpritePalette sBagSpritePalette = {gBagPalette, 30 static void sub_80A7998(struct Sprite *sprite) { sprite->animNum = 0; - sprite->data0 = 0; - sprite->data1 = 0; - sprite->data2 = 0; - sprite->data3 = 0; - sprite->data4 = 0; + sprite->data[0] = 0; + sprite->data[1] = 0; + sprite->data[2] = 0; + sprite->data[3] = 0; + sprite->data[4] = 0; sprite->callback = sub_80A79B4; } @@ -4098,7 +4098,7 @@ static void sub_80A79B4(struct Sprite *sprite) static void sub_80A79EC(struct Sprite *sprite) { - switch (sprite->data3) + switch (sprite->data[3]) { case 0: if (gUnknown_0203855B != 6) @@ -4112,26 +4112,26 @@ static void sub_80A79EC(struct Sprite *sprite) sprite->animBeginning = TRUE; sprite->animNum = 0; sprite->pos1.y -= 4; - sprite->data0 = 4; - sprite->data3 = 1; + sprite->data[0] = 4; + sprite->data[3] = 1; sub_80A7AE4(sprite); } break; case 1: - if (sprite->data0 != 0) + if (sprite->data[0] != 0) { - if (sprite->data1 != 0) + if (sprite->data[1] != 0) { sprite->pos1.y++; - sprite->data0--; + sprite->data[0]--; } - sprite->data1 = (sprite->data1 + 1) & 1; + sprite->data[1] = (sprite->data[1] + 1) & 1; } else { gUnknown_0203855B = -1; - sprite->data1 = 0; - sprite->data3 = 0; + sprite->data[1] = 0; + sprite->data[3] = 0; } break; } @@ -4139,17 +4139,17 @@ static void sub_80A79EC(struct Sprite *sprite) static void sub_80A7A94(struct Sprite *sprite) { - switch (sprite->data4) + switch (sprite->data[4]) { case 0: sprite->oam.affineMode = 1; sprite->affineAnims = sBagSpriteAffineAnimTable; InitSpriteAffineAnim(sprite); - sprite->data4 = 1; + sprite->data[4] = 1; break; case 1: - sprite->data2++; - if (sprite->data2 == 12) + sprite->data[2]++; + if (sprite->data[2] == 12) sub_80A7AE4(sprite); break; } @@ -4159,8 +4159,8 @@ static void sub_80A7AE4(struct Sprite *sprite) { gUnknown_0203855C = 0; sprite->oam.affineMode = 0; - sprite->data2 = 0; - sprite->data4 = 0; + sprite->data[2] = 0; + sprite->data[4] = 0; FreeOamMatrix(sprite->oam.matrixNum); } @@ -4228,45 +4228,45 @@ static const struct SpritePalette sPokeballSpritePalette = {gPalette_83C170C, 8} static void sub_80A7B28(struct Sprite *sprite) { - sprite->data3 = 0; - sprite->data0 = 0; + sprite->data[3] = 0; + sprite->data[0] = 0; sub_80A7B6C(sprite); sprite->callback = sub_80A7B6C; } static void sub_80A7B48(struct Sprite *sprite) { - sprite->centerToCornerVecX = sprite->data5 - ((sprite->data0 + 1) & 1); - sprite->centerToCornerVecY = sprite->data6 - ((sprite->data0 + 1) & 1); + sprite->centerToCornerVecX = sprite->data[5] - ((sprite->data[0] + 1) & 1); + sprite->centerToCornerVecY = sprite->data[6] - ((sprite->data[0] + 1) & 1); } static void sub_80A7B6C(struct Sprite *sprite) { - if (sprite->data7 != 0) + if (sprite->data[7] != 0) { - switch (sprite->data3) + switch (sprite->data[3]) { case 0: sprite->oam.affineMode = 1; - if (sprite->data7 == 1) + if (sprite->data[7] == 1) sprite->affineAnims = gSpriteAffineAnimTable_83C1D20; else sprite->affineAnims = gSpriteAffineAnimTable_83C1D20 + 1; InitSpriteAffineAnim(sprite); - sprite->data3 = 1; - sprite->data5 = sprite->centerToCornerVecX; - sprite->data6 = sprite->centerToCornerVecY; + sprite->data[3] = 1; + sprite->data[5] = sprite->centerToCornerVecX; + sprite->data[6] = sprite->centerToCornerVecY; sub_80A7B48(sprite); break; case 1: - sprite->data0++; + sprite->data[0]++; sub_80A7B48(sprite); - if (sprite->data0 == 32) + if (sprite->data[0] == 32) { - sprite->data0 = 0; - sprite->data3 = 0; - sprite->centerToCornerVecX = sprite->data5; - sprite->centerToCornerVecY = sprite->data6; + sprite->data[0] = 0; + sprite->data[3] = 0; + sprite->centerToCornerVecX = sprite->data[5]; + sprite->centerToCornerVecY = sprite->data[6]; FreeOamMatrix(sprite->oam.matrixNum); sprite->oam.affineMode = 0; sprite->callback = SpriteCallbackDummy; @@ -4291,7 +4291,7 @@ static void CreateBagPokeballSprite(u8 a) { LoadSpritePalette(&sPokeballSpritePalette); sPokeballSpriteId = CreateSprite(&sPokeballSpriteTemplate, 16, 88, 0); - gSprites[sPokeballSpriteId].data7 = a; + gSprites[sPokeballSpriteId].data[7] = a; } static void sub_80A7C64(void) diff --git a/src/field/menu_helpers.c b/src/field/menu_helpers.c index 14e823355..8e13e5546 100644 --- a/src/field/menu_helpers.c +++ b/src/field/menu_helpers.c @@ -405,15 +405,15 @@ void CreateVerticalScrollIndicators(u8 id, u16 x, u16 y) if (gUnknown_020388C0[0] == 0xFF) { gUnknown_020388C0[0] = CreateSprite(&gSpriteTemplate_83E59D0, x, y, 0); - gSprites[gUnknown_020388C0[0]].data2 = -1; + gSprites[gUnknown_020388C0[0]].data[2] = -1; if (gUnknown_020388C0[1] != 0xFF) { gSprites[gUnknown_020388C0[0]].pos2.y = gSprites[gUnknown_020388C0[1]].pos2.y * -1; - gSprites[gUnknown_020388C0[0]].data3 = gSprites[gUnknown_020388C0[1]].data3; + gSprites[gUnknown_020388C0[0]].data[3] = gSprites[gUnknown_020388C0[1]].data[3]; } else { - gSprites[gUnknown_020388C0[0]].data3 = 0; + gSprites[gUnknown_020388C0[0]].data[3] = 0; } } break; @@ -422,15 +422,15 @@ void CreateVerticalScrollIndicators(u8 id, u16 x, u16 y) if (gUnknown_020388C0[1] == 0xFF) { gUnknown_020388C0[1] = CreateSprite(&gSpriteTemplate_83E59D0, x, y, 0); - gSprites[gUnknown_020388C0[1]].data2 = 1; + gSprites[gUnknown_020388C0[1]].data[2] = 1; if (gUnknown_020388C0[0] != 0xFF) { gSprites[gUnknown_020388C0[1]].pos2.y = gSprites[gUnknown_020388C0[0]].pos2.y * -1; - gSprites[gUnknown_020388C0[1]].data3 = gSprites[gUnknown_020388C0[0]].data3; + gSprites[gUnknown_020388C0[1]].data[3] = gSprites[gUnknown_020388C0[0]].data[3]; } else { - gSprites[gUnknown_020388C0[1]].data3 = 0; + gSprites[gUnknown_020388C0[1]].data[3] = 0; } } break; @@ -439,15 +439,15 @@ void CreateVerticalScrollIndicators(u8 id, u16 x, u16 y) if (gUnknown_020388C0[2] == 0xFF) { gUnknown_020388C0[2] = CreateSprite(&gSpriteTemplate_83E59E8, x, y, 0); - gSprites[gUnknown_020388C0[2]].data0 = -1; + gSprites[gUnknown_020388C0[2]].data[0] = -1; if (gUnknown_020388C0[3] != 0xFF) { gSprites[gUnknown_020388C0[2]].pos2.x = gSprites[gUnknown_020388C0[3]].pos2.x * -1; - gSprites[gUnknown_020388C0[2]].data1 = gSprites[gUnknown_020388C0[3]].data1; + gSprites[gUnknown_020388C0[2]].data[1] = gSprites[gUnknown_020388C0[3]].data[1]; } else { - gSprites[gUnknown_020388C0[2]].data1 = 0; + gSprites[gUnknown_020388C0[2]].data[1] = 0; } } break; @@ -456,15 +456,15 @@ void CreateVerticalScrollIndicators(u8 id, u16 x, u16 y) if (gUnknown_020388C0[3] == 0xFF) { gUnknown_020388C0[3] = CreateSprite(&gSpriteTemplate_83E59E8, x, y, 0); - gSprites[gUnknown_020388C0[3]].data0 = 1; + gSprites[gUnknown_020388C0[3]].data[0] = 1; if (gUnknown_020388C0[2] != 0xFF) { gSprites[gUnknown_020388C0[3]].pos2.x = gSprites[gUnknown_020388C0[2]].pos2.x * -1; - gSprites[gUnknown_020388C0[3]].data1 = gSprites[gUnknown_020388C0[2]].data1; + gSprites[gUnknown_020388C0[3]].data[1] = gSprites[gUnknown_020388C0[2]].data[1]; } else { - gSprites[gUnknown_020388C0[3]].data1 = 0; + gSprites[gUnknown_020388C0[3]].data[1] = 0; } } break; @@ -502,23 +502,23 @@ void BuyMenuFreeMemory(void) static void sub_80F9834(struct Sprite *sprite) { - if (sprite->data1 == 0) + if (sprite->data[1] == 0) { - sprite->pos2.x += sprite->data0; + sprite->pos2.x += sprite->data[0]; } - if (sprite->data3 == 0) + if (sprite->data[3] == 0) { - sprite->pos2.y += sprite->data2; + sprite->pos2.y += sprite->data[2]; } - sprite->data1++; - sprite->data3++; - if (sprite->data1 > 2) + sprite->data[1]++; + sprite->data[3]++; + if (sprite->data[1] > 2) { - sprite->data1 = 0; + sprite->data[1] = 0; } - if (sprite->data3 > 2) + if (sprite->data[3] > 2) { - sprite->data3 = 0; + sprite->data[3] = 0; } if (sprite->pos2.x == 8 || sprite->pos2.x == -8) { @@ -552,8 +552,8 @@ static void sub_80F9914(u8 id) { gSprites[gUnknown_020388C0[id]].pos2.x = 0; gSprites[gUnknown_020388C0[id]].pos2.y = 0; - gSprites[gUnknown_020388C0[id]].data1 = 0; - gSprites[gUnknown_020388C0[id]].data3 = 0; + gSprites[gUnknown_020388C0[id]].data[1] = 0; + gSprites[gUnknown_020388C0[id]].data[3] = 0; } } diff --git a/src/field/overworld.c b/src/field/overworld.c index d6f255409..59aac5c33 100644 --- a/src/field/overworld.c +++ b/src/field/overworld.c @@ -2648,14 +2648,14 @@ void CreateLinkPlayerSprite(u8 linkPlayerId) mapObj->spriteId = AddPseudoFieldObject(val, SpriteCB_LinkPlayer, 0, 0, 0); sprite = &gSprites[mapObj->spriteId]; sprite->coordOffsetEnabled = TRUE; - sprite->data0 = linkPlayerId; + sprite->data[0] = linkPlayerId; mapObj->mapobj_bit_2 = 0; } } void SpriteCB_LinkPlayer(struct Sprite *sprite) { - struct LinkPlayerMapObject *linkPlayerMapObj = &gLinkPlayerMapObjects[sprite->data0]; + struct LinkPlayerMapObject *linkPlayerMapObj = &gLinkPlayerMapObjects[sprite->data[0]]; struct MapObject *mapObj = &gMapObjects[linkPlayerMapObj->mapObjId]; sprite->pos1.x = mapObj->coords1.x; sprite->pos1.y = mapObj->coords1.y; @@ -2668,7 +2668,7 @@ void SpriteCB_LinkPlayer(struct Sprite *sprite) sub_806487C(sprite, 0); if (mapObj->mapobj_bit_2) { - sprite->invisible = ((sprite->data7 & 4) >> 2); - sprite->data7++; + sprite->invisible = ((sprite->data[7] & 4) >> 2); + sprite->data[7]++; } } diff --git a/src/field/party_menu.c b/src/field/party_menu.c index 42bb66f6f..a8620570b 100644 --- a/src/field/party_menu.c +++ b/src/field/party_menu.c @@ -1422,7 +1422,7 @@ u16 HandleDefaultPartyMenuInput(u8 taskId) if (menuDirectionPressed == 0) { - if ((gMain.newKeys & A_BUTTON) && gSprites[sub_806CA00(taskId)].data0 == 7) + if ((gMain.newKeys & A_BUTTON) && gSprites[sub_806CA00(taskId)].data[0] == 7) { // Selected "CANCEL" return B_BUTTON; @@ -1595,7 +1595,7 @@ u16 HandleBattleTowerPartyMenuInput(u8 taskId) { if (gMain.newKeys & A_BUTTON) { - if (gSprites[sub_806CA00(taskId)].data0 == 7) + if (gSprites[sub_806CA00(taskId)].data[0] == 7) { return B_BUTTON; } @@ -1629,7 +1629,7 @@ void ChangePartyMenuSelection(u8 taskId, s8 directionPressed) { bool8 isLinkDoubleBattle; u8 spriteId = sub_806CA00(taskId); - u8 menuIndex = gSprites[spriteId].data0; + u8 menuIndex = gSprites[spriteId].data[0]; UpdateMonIconFrame_806DA44(taskId, menuIndex, 0); @@ -1645,17 +1645,17 @@ void ChangePartyMenuSelection(u8 taskId, s8 directionPressed) ChangeLinkDoubleBattlePartyMenuSelection(spriteId, menuIndex, directionPressed); - if (gSprites[spriteId].data0 == 0 || gSprites[spriteId].data0 == 2 || gSprites[spriteId].data0 == 3) - sub_806BF24(&gUnknown_083769C0[gSprites[spriteId].data0 * 2], gSprites[spriteId].data0, 3, 1); - if (gSprites[spriteId].data0 == 1 || gSprites[spriteId].data0 == 4 || gSprites[spriteId].data0 == 5) - sub_806BF24(&gUnknown_083769C0[gSprites[spriteId].data0 * 2], gSprites[spriteId].data0, 4, 1); - if (gSprites[spriteId].data0 == 7) + if (gSprites[spriteId].data[0] == 0 || gSprites[spriteId].data[0] == 2 || gSprites[spriteId].data[0] == 3) + sub_806BF24(&gUnknown_083769C0[gSprites[spriteId].data[0] * 2], gSprites[spriteId].data[0], 3, 1); + if (gSprites[spriteId].data[0] == 1 || gSprites[spriteId].data[0] == 4 || gSprites[spriteId].data[0] == 5) + sub_806BF24(&gUnknown_083769C0[gSprites[spriteId].data[0] * 2], gSprites[spriteId].data[0], 4, 1); + if (gSprites[spriteId].data[0] == 7) sub_806BBEC(2); ewram1B000.unk261 = 2; - gSprites[spriteId].pos1.x = gUnknown_083768B8[PARTY_MENU_LAYOUT_LINK_DOUBLE_BATTLE][gSprites[spriteId].data0].x; - gSprites[spriteId].pos1.y = gUnknown_083768B8[PARTY_MENU_LAYOUT_LINK_DOUBLE_BATTLE][gSprites[spriteId].data0].y; + gSprites[spriteId].pos1.x = gUnknown_083768B8[PARTY_MENU_LAYOUT_LINK_DOUBLE_BATTLE][gSprites[spriteId].data[0]].x; + gSprites[spriteId].pos1.y = gUnknown_083768B8[PARTY_MENU_LAYOUT_LINK_DOUBLE_BATTLE][gSprites[spriteId].data[0]].y; } else { @@ -1679,9 +1679,9 @@ void ChangePartyMenuSelection(u8 taskId, s8 directionPressed) ChangeDoubleBattlePartyMenuSelection(spriteId, menuIndex, directionPressed); } - if (gSprites[spriteId].data0 < PARTY_SIZE) + if (gSprites[spriteId].data[0] < PARTY_SIZE) { - sub_806BF24(&gUnknown_083769A8[isDoubleBattle * 12 + gSprites[spriteId].data0 * 2], gSprites[spriteId].data0, 3, 1); + sub_806BF24(&gUnknown_083769A8[isDoubleBattle * 12 + gSprites[spriteId].data[0] * 2], gSprites[spriteId].data[0], 3, 1); } else { @@ -1690,13 +1690,13 @@ void ChangePartyMenuSelection(u8 taskId, s8 directionPressed) ewram1B000.unk261 = 2; - gSprites[spriteId].pos1.x = gUnknown_083768B8[isDoubleBattle][gSprites[spriteId].data0].x; - gSprites[spriteId].pos1.y = gUnknown_083768B8[isDoubleBattle][gSprites[spriteId].data0].y; + gSprites[spriteId].pos1.x = gUnknown_083768B8[isDoubleBattle][gSprites[spriteId].data[0]].x; + gSprites[spriteId].pos1.y = gUnknown_083768B8[isDoubleBattle][gSprites[spriteId].data[0]].y; } - UpdateMonIconFrame_806DA44(taskId, gSprites[spriteId].data0, 1); + UpdateMonIconFrame_806DA44(taskId, gSprites[spriteId].data[0], 1); - if (menuIndex != gSprites[spriteId].data0) + if (menuIndex != gSprites[spriteId].data[0]) { PlaySE(5); } @@ -1710,47 +1710,47 @@ void ChangeDefaultPartyMenuSelection(u8 spriteId, u8 menuIndex, s8 directionPres switch (menuMovement) { case 2: // no movement - gSprites[spriteId].data1 = 0; + gSprites[spriteId].data[1] = 0; break; case 1: // moving up if (menuIndex == 0) { - gSprites[spriteId].data0 = 7; + gSprites[spriteId].data[0] = 7; } else if (menuIndex == 7) { - gSprites[spriteId].data0 = gPlayerPartyCount - 1; + gSprites[spriteId].data[0] = gPlayerPartyCount - 1; } else { s8 diff = directionPressed; - gSprites[spriteId].data0 += diff; + gSprites[spriteId].data[0] += diff; } - gSprites[spriteId].data1 = 0; + gSprites[spriteId].data[1] = 0; break; case 3: // moving down if (menuIndex == gPlayerPartyCount - 1) { - gSprites[spriteId].data0 = 7; + gSprites[spriteId].data[0] = 7; } else if (menuIndex == 7) { - gSprites[spriteId].data0 = 0; + gSprites[spriteId].data[0] = 0; } else { s8 diff = directionPressed; - gSprites[spriteId].data0 += diff; + gSprites[spriteId].data[0] += diff; } - gSprites[spriteId].data1 = 0; + gSprites[spriteId].data[1] = 0; break; case 4: // moving right if (gPlayerPartyCount > 1 && menuIndex == 0) { - if (gSprites[spriteId].data1 == 0) - gSprites[spriteId].data1 = 1; + if (gSprites[spriteId].data[1] == 0) + gSprites[spriteId].data[1] = 1; - gSprites[spriteId].data0 = gSprites[spriteId].data1; + gSprites[spriteId].data[0] = gSprites[spriteId].data[1]; } break; case 0: // moving left // Only move the selection to the left side if one of the mons in the right-hand column are currently selected nextIndex = menuIndex - 1; if (nextIndex <= 4) { - gSprites[spriteId].data0 = 0; - gSprites[spriteId].data1 = menuIndex; + gSprites[spriteId].data[0] = 0; + gSprites[spriteId].data[1] = menuIndex; } break; } @@ -1764,62 +1764,62 @@ void ChangeDoubleBattlePartyMenuSelection(u8 spriteId, u8 menuIndex, s8 directio switch(menuMovement) { case 2: // no movement - gSprites[spriteId].data1 = 0; + gSprites[spriteId].data[1] = 0; break; case 3: // moving down if (menuIndex == 7) { - gSprites[spriteId].data0 = 0; + gSprites[spriteId].data[0] = 0; } else if (menuIndex == gPlayerPartyCount - 1) { - gSprites[spriteId].data0 = 7; + gSprites[spriteId].data[0] = 7; } else { s8 diff = directionPressed; - gSprites[spriteId].data0 += diff; + gSprites[spriteId].data[0] += diff; } - gSprites[spriteId].data1 = 0; + gSprites[spriteId].data[1] = 0; break; case 1: // moving up if (menuIndex == 0) { - gSprites[spriteId].data0 = 7; + gSprites[spriteId].data[0] = 7; } else if (menuIndex == 7) { - gSprites[spriteId].data0 = gPlayerPartyCount - 1; + gSprites[spriteId].data[0] = gPlayerPartyCount - 1; } else { s8 diff = directionPressed; - gSprites[spriteId].data0 += diff; + gSprites[spriteId].data[0] += diff; } - gSprites[spriteId].data1 = 0; + gSprites[spriteId].data[1] = 0; break; case 4: // moving right if (menuIndex == 0) { if (gPlayerPartyCount > 2) { - u16 var1 = gSprites[spriteId].data1 - 2; + u16 var1 = gSprites[spriteId].data[1] - 2; if (var1 > 1) - gSprites[spriteId].data0 = 2; + gSprites[spriteId].data[0] = 2; else - gSprites[spriteId].data0 = gSprites[spriteId].data1; + gSprites[spriteId].data[0] = gSprites[spriteId].data[1]; } } else if (menuIndex == 1) { if (gPlayerPartyCount > 4) { - u16 var1 = gSprites[spriteId].data1 - 4; + u16 var1 = gSprites[spriteId].data[1] - 4; if (var1 <= 1) - gSprites[spriteId].data0 = gSprites[spriteId].data1; + gSprites[spriteId].data[0] = gSprites[spriteId].data[1]; else - gSprites[spriteId].data0 = 4; + gSprites[spriteId].data[0] = 4; } } break; case 0: // moving left var1 = menuIndex - 2; if (var1 <= 1) { - gSprites[spriteId].data0 = 0; - gSprites[spriteId].data1 = menuIndex; + gSprites[spriteId].data[0] = 0; + gSprites[spriteId].data[1] = menuIndex; } else { u8 var2 = menuIndex - 4; if (var2 <= 1) { - gSprites[spriteId].data0 = 1; - gSprites[spriteId].data1 = menuIndex; + gSprites[spriteId].data[0] = 1; + gSprites[spriteId].data[1] = menuIndex; } } break; @@ -1837,62 +1837,62 @@ void ChangeLinkDoubleBattlePartyMenuSelection(u8 spriteId, u8 menuIndex, s8 dire switch (menuMovement) { case 2: // no movement - gSprites[spriteId].data1 = 0; + gSprites[spriteId].data[1] = 0; break; case 3: // moving down if (menuIndex == 7) { - gSprites[spriteId].data0 = 0; + gSprites[spriteId].data[0] = 0; } else { while (menuIndex != PARTY_SIZE - 1) { menuIndex++; if (GetMonData(&gPlayerParty[menuIndex], MON_DATA_SPECIES)) { - gSprites[spriteId].data0 = menuIndex; - gSprites[spriteId].data1 = 0; + gSprites[spriteId].data[0] = menuIndex; + gSprites[spriteId].data[1] = 0; return; } } - gSprites[spriteId].data0 = 7; + gSprites[spriteId].data[0] = 7; } - gSprites[spriteId].data1 = 0; + gSprites[spriteId].data[1] = 0; break; case 1: // moving up while (menuIndex != 0) { menuIndex--; if (menuIndex != PARTY_SIZE && GetMonData(gPlayerParty[menuIndex], MON_DATA_SPECIES)) { - gSprites[spriteId].data0 = menuIndex; - gSprites[spriteId].data1 = 0; + gSprites[spriteId].data[0] = menuIndex; + gSprites[spriteId].data[1] = 0; return; } } - gSprites[spriteId].data0 = 7; - gSprites[spriteId].data1 = 0; + gSprites[spriteId].data[0] = 7; + gSprites[spriteId].data[1] = 0; break; case 4: // moving right if (menuIndex == 0) { - var1 = gSprites[spriteId].data1 - 2; + var1 = gSprites[spriteId].data[1] - 2; if (var1 > 1) { if (GetMonData(&gPlayerParty[2], MON_DATA_SPECIES)) { - gSprites[spriteId].data0 = 2; + gSprites[spriteId].data[0] = 2; } else if (GetMonData(&gPlayerParty[3], MON_DATA_SPECIES)) { - gSprites[spriteId].data0 = 3; + gSprites[spriteId].data[0] = 3; } } else { - gSprites[spriteId].data0 = 1; + gSprites[spriteId].data[0] = 1; } } else if (menuIndex == 1) { - var1 = gSprites[spriteId].data1 - 4; + var1 = gSprites[spriteId].data[1] - 4; if (var1 <= 1) { - gSprites[spriteId].data0 = gSprites[spriteId].data1; + gSprites[spriteId].data[0] = gSprites[spriteId].data[1]; } else { if (GetMonData(&gPlayerParty[4], MON_DATA_SPECIES)) { - gSprites[spriteId].data0 = 4; + gSprites[spriteId].data[0] = 4; } else if (GetMonData(&gPlayerParty[5], MON_DATA_SPECIES)) { - gSprites[spriteId].data0 = 5; + gSprites[spriteId].data[0] = 5; } } } @@ -1900,13 +1900,13 @@ void ChangeLinkDoubleBattlePartyMenuSelection(u8 spriteId, u8 menuIndex, s8 dire case 0: // moving left var2 = menuIndex - 2; if (var2 <= 1) { - gSprites[spriteId].data0 = 0; - gSprites[spriteId].data1 = menuIndex; + gSprites[spriteId].data[0] = 0; + gSprites[spriteId].data[1] = menuIndex; } else { var2 = menuIndex - 4; if (var2 <= 1) { - gSprites[spriteId].data0 = 1; - gSprites[spriteId].data1 = menuIndex; + gSprites[spriteId].data[0] = 1; + gSprites[spriteId].data[1] = menuIndex; } } @@ -2165,7 +2165,7 @@ void ChangeBattleTowerPartyMenuSelection(u8 taskId, s8 directionPressed) u8 newMenuIndex3; s8 menuMovement; u8 spriteId = sub_806CA00(taskId); - u8 menuIndex = gSprites[spriteId].data0; + u8 menuIndex = gSprites[spriteId].data[0]; UpdateMonIconFrame_806DA44(taskId, menuIndex, 0); @@ -2187,60 +2187,60 @@ void ChangeBattleTowerPartyMenuSelection(u8 taskId, s8 directionPressed) switch (menuMovement) { case 2: // no movement - gSprites[spriteId].data1 = 0; + gSprites[spriteId].data[1] = 0; break; case 1: // moving up if (menuIndex == 0) { - gSprites[spriteId].data0 = 7; + gSprites[spriteId].data[0] = 7; } else if (menuIndex == PARTY_SIZE) { - gSprites[spriteId].data0 = gPlayerPartyCount - 1; + gSprites[spriteId].data[0] = gPlayerPartyCount - 1; } else { - gSprites[spriteId].data0 += directionPressed; + gSprites[spriteId].data[0] += directionPressed; } - gSprites[spriteId].data1 = 0; + gSprites[spriteId].data[1] = 0; break; case 3: // moving down if (menuIndex == gPlayerPartyCount - 1) { - gSprites[spriteId].data0 = 6; + gSprites[spriteId].data[0] = 6; } else if (menuIndex == 7) { - gSprites[spriteId].data0 = 0; + gSprites[spriteId].data[0] = 0; } else { - gSprites[spriteId].data0 += directionPressed; + gSprites[spriteId].data[0] += directionPressed; } - gSprites[spriteId].data1 = 0; + gSprites[spriteId].data[1] = 0; break; case 4: // moving right if (gPlayerPartyCount > 1 && menuIndex == 0) { - if (gSprites[spriteId].data1 == 0) { - gSprites[spriteId].data1 = 1; + if (gSprites[spriteId].data[1] == 0) { + gSprites[spriteId].data[1] = 1; } - gSprites[spriteId].data0 = gSprites[spriteId].data1; + gSprites[spriteId].data[0] = gSprites[spriteId].data[1]; } break; case 0: // moving left newMenuIndex3 = menuIndex - 1; if (newMenuIndex3 <= 4) { - gSprites[spriteId].data0 = 0; - gSprites[spriteId].data1 = menuIndex; + gSprites[spriteId].data[0] = 0; + gSprites[spriteId].data[1] = menuIndex; } break; } - gSprites[spriteId].pos1.x = gUnknown_083768B8[PARTY_MENU_LAYOUT_STANDARD][gSprites[spriteId].data0].x; - gSprites[spriteId].pos1.y = gUnknown_083768B8[PARTY_MENU_LAYOUT_STANDARD][gSprites[spriteId].data0].y; + gSprites[spriteId].pos1.x = gUnknown_083768B8[PARTY_MENU_LAYOUT_STANDARD][gSprites[spriteId].data[0]].x; + gSprites[spriteId].pos1.y = gUnknown_083768B8[PARTY_MENU_LAYOUT_STANDARD][gSprites[spriteId].data[0]].y; - newMenuIndex = gSprites[spriteId].data0; - if (gSprites[spriteId].data0 < PARTY_SIZE) + newMenuIndex = gSprites[spriteId].data[0]; + if (gSprites[spriteId].data[0] < PARTY_SIZE) { - sub_806BF24(&gUnknown_083769A8[gSprites[spriteId].data0 * 2], newMenuIndex, 3, 1); + sub_806BF24(&gUnknown_083769A8[gSprites[spriteId].data[0] * 2], newMenuIndex, 3, 1); } - else if (gSprites[spriteId].data0 == PARTY_SIZE) + else if (gSprites[spriteId].data[0] == PARTY_SIZE) { sub_806BB9C(2); } @@ -2251,10 +2251,10 @@ void ChangeBattleTowerPartyMenuSelection(u8 taskId, s8 directionPressed) ewram1B000.unk261 = 2; - newMenuIndex2 = gSprites[spriteId].data0; + newMenuIndex2 = gSprites[spriteId].data[0]; UpdateMonIconFrame_806DA44(taskId, newMenuIndex2, 1); - if (menuIndex != gSprites[spriteId].data0) + if (menuIndex != gSprites[spriteId].data[0]) { PlaySE(5); } @@ -2265,7 +2265,7 @@ void SelectBattleTowerOKButton(u8 taskId) { u8 spriteId = sub_806CA00(taskId); - u8 menuIndex = gSprites[spriteId].data0; + u8 menuIndex = gSprites[spriteId].data[0]; if (menuIndex != 6) { UpdateMonIconFrame_806DA44(taskId, menuIndex, 0); @@ -2279,8 +2279,8 @@ void SelectBattleTowerOKButton(u8 taskId) sub_806BBEC(1); } - gSprites[spriteId].data1 = 0; - gSprites[spriteId].data0 = 6; + gSprites[spriteId].data[1] = 0; + gSprites[spriteId].data[0] = 6; gSprites[spriteId].pos1.x = gUnknown_083768B8[PARTY_MENU_LAYOUT_STANDARD][6].x; gSprites[spriteId].pos1.y = gUnknown_083768B8[PARTY_MENU_LAYOUT_STANDARD][6].y; @@ -2293,8 +2293,8 @@ void SelectBattleTowerOKButton(u8 taskId) void sub_806C92C(u8 spriteId) { - u8 menuIndex1 = gSprites[spriteId].data0; - u8 menuIndex2 = gSprites[spriteId].data1; + u8 menuIndex1 = gSprites[spriteId].data[0]; + u8 menuIndex2 = gSprites[spriteId].data[1]; if (!IsDoubleBattle()) { @@ -2319,14 +2319,14 @@ void sub_806C92C(u8 spriteId) } } - gSprites[spriteId].data1 = menuIndex2; + gSprites[spriteId].data[1] = menuIndex2; } void sub_806C994(u8 taskId, u8 b) { u8 spriteId = sub_806CA00(taskId); - gSprites[spriteId].data0 = b; + gSprites[spriteId].data[0] = b; sub_806C92C(spriteId); } @@ -2336,7 +2336,7 @@ void sub_806C9C4(u8 taskId, u8 spriteId) gSprites[spriteId].pos1.x = gSprites[spriteId2].pos1.x; gSprites[spriteId].pos1.y = gSprites[spriteId2].pos1.y; - gSprites[spriteId].data0 = gSprites[spriteId2].data0; + gSprites[spriteId].data[0] = gSprites[spriteId2].data[0]; } u8 sub_806CA00(u8 taskId) @@ -2353,7 +2353,7 @@ void sub_806CA18(u8 taskId, u8 b) u8 sub_806CA38(u8 taskId) { u8 spriteId = sub_806CA00(taskId); - return gSprites[spriteId].data0; + return gSprites[spriteId].data[0]; } void SetupDefaultPartyMenuSwitchPokemon(u8 taskId) @@ -2369,7 +2369,7 @@ void SetupDefaultPartyMenuSwitchPokemon(u8 taskId) PrintPartyMenuPromptText(ewram1B000_alt.unk272, 0); - sub_806BF24(&gUnknown_083769A8[gSprites[ewram01000.unk1].data0 * 2], gSprites[ewram01000.unk1].data0, 6, 0); + sub_806BF24(&gUnknown_083769A8[gSprites[ewram01000.unk1].data[0] * 2], gSprites[ewram01000.unk1].data[0], 6, 0); ewram1B000.unk261 = 2; } @@ -2381,13 +2381,13 @@ void ChangePartyMenuSwitchPokemonSelection(u8 taskId, s16 menuDirectionPressed) ChangePartyMenuSelection(taskId, menuDirectionPressed); - if (sprite1->data0 != sprite2->data0) + if (sprite1->data[0] != sprite2->data[0]) { - sub_806BF24(&gUnknown_083769A8[sprite1->data0 * 2], sprite1->data0, 6, 1); + sub_806BF24(&gUnknown_083769A8[sprite1->data[0] * 2], sprite1->data[0], 6, 1); } else { - sub_806BF24(&gUnknown_083769A8[sprite1->data0 * 2], sprite1->data0, 6, 0); + sub_806BF24(&gUnknown_083769A8[sprite1->data[0] * 2], sprite1->data[0], 6, 0); } } @@ -2434,15 +2434,15 @@ void sub_806CC2C(u8 taskId) void sub_806CC74(u8 taskId) { - sub_806BF24(&gUnknown_083769A8[gSprites[ewram01000.unk2].data0 * 2], gSprites[ewram01000.unk2].data0, 3, 1); - sub_806BF24(&gUnknown_083769A8[gSprites[ewram01000.unk1].data0 * 2], gSprites[ewram01000.unk1].data0, 3, 0); + sub_806BF24(&gUnknown_083769A8[gSprites[ewram01000.unk2].data[0] * 2], gSprites[ewram01000.unk2].data[0], 3, 1); + sub_806BF24(&gUnknown_083769A8[gSprites[ewram01000.unk1].data[0] * 2], gSprites[ewram01000.unk1].data[0], 3, 0); sub_806CC2C(taskId); } void sub_806CCE4() { - u8 monIndex1 = gSprites[ewram01000.unk1].data0; - u8 monIndex2 = gSprites[ewram01000.unk2].data0; + u8 monIndex1 = gSprites[ewram01000.unk1].data[0]; + u8 monIndex2 = gSprites[ewram01000.unk2].data[0]; if (monIndex1 <= 5) { @@ -2463,8 +2463,8 @@ void sub_806CD44(u8 taskId) void sub_806CD5C(u8 taskId) { - u8 monIndex1 = gSprites[ewram01000.unk1].data0; - u8 monIndex2 = gSprites[ewram01000.unk2].data0; + u8 monIndex1 = gSprites[ewram01000.unk1].data[0]; + u8 monIndex2 = gSprites[ewram01000.unk2].data[0]; if (monIndex1 == monIndex2 || monIndex1 == 7 || monIndex2 == 7) { @@ -2494,8 +2494,8 @@ void sub_806CD5C(u8 taskId) var1 = ewram01000.unk5; if (!var1) { - gSprites[ewram01000.unk3].data0 = -8; - gSprites[ewram01000.unk3].data2 = -0xA8; + gSprites[ewram01000.unk3].data[0] = -8; + gSprites[ewram01000.unk3].data[2] = -0xA8; ewram01000.unk8 = var1; ewram01000.unkA = 11; @@ -2504,8 +2504,8 @@ void sub_806CD5C(u8 taskId) } else { - gSprites[ewram01000.unk3].data0 = 8; - gSprites[ewram01000.unk3].data2 = 0xA8; + gSprites[ewram01000.unk3].data[0] = 8; + gSprites[ewram01000.unk3].data[2] = 0xA8; ewram01000.unk8 = 11; ewram01000.unkA = 11; @@ -2515,8 +2515,8 @@ void sub_806CD5C(u8 taskId) gSprites[ewram01000.unk3].callback = SpriteCB_sub_806D37C; - gSprites[ewram01000.unk4].data0 = 8; - gSprites[ewram01000.unk4].data2 = 0xA8; + gSprites[ewram01000.unk4].data[0] = 8; + gSprites[ewram01000.unk4].data[2] = 0xA8; gSprites[ewram01000.unk4].callback = SpriteCB_sub_806D37C; gSprites[ewram01000.unk3].callback(&gSprites[ewram01000.unk3]); @@ -2537,7 +2537,7 @@ void sub_806CF04(void) SwapValues_s16(&gSprites[ewram01000.unk3].pos1.x, &gSprites[ewram01000.unk4].pos1.x); SwapValues_s16(&gSprites[ewram01000.unk3].pos1.y, &gSprites[ewram01000.unk4].pos1.y); SwapValues_s16(&gSprites[ewram01000.unk3].pos2.x, &gSprites[ewram01000.unk4].pos2.x); - SwapValues_s16(&gSprites[ewram01000.unk3].data0, &gSprites[ewram01000.unk4].data0); + SwapValues_s16(&gSprites[ewram01000.unk3].data[0], &gSprites[ewram01000.unk4].data[0]); gSprites[ewram01000.unk3].callback = SpriteCB_sub_806D37C; gSprites[ewram01000.unk4].callback = SpriteCB_sub_806D37C; @@ -2729,7 +2729,7 @@ void sub_806D198(u8 taskId) gSprites[ewram01000.unk4].pos2.y = 0; gSprites[ewram01000.unk4].callback = UpdateMonIconFrame_806DA38; - spriteId = GetMonIconSpriteId(ewram01000.unk0, gSprites[ewram01000.unk2].data0); + spriteId = GetMonIconSpriteId(ewram01000.unk0, gSprites[ewram01000.unk2].data[0]); gSprites[spriteId].callback = UpdateMonIconFrame_806DA0C; SwapPokemon(&gPlayerParty[ewram01000.unk5], &gPlayerParty[ewram01000.unk6]); @@ -2752,15 +2752,15 @@ void SpriteCB_sub_806D37C(struct Sprite *sprite) { UpdateMonIconFrame(sprite); - if (sprite->pos2.x == sprite->data2) + if (sprite->pos2.x == sprite->data[2]) { - sprite->data0 *= -1; - sprite->data2 = 0; + sprite->data[0] *= -1; + sprite->data[2] = 0; sprite->callback = UpdateMonIconFrame_806DA38; } else { - sprite->pos2.x += sprite->data0; + sprite->pos2.x += sprite->data[0]; } } @@ -2802,8 +2802,8 @@ void sub_806D4AC(u8 taskId, u16 species, u8 c) u8 monIndex = c + 3; u8 spriteId = GetMonIconSpriteId(taskId, monIndex); - gSprites[spriteId].data0 = -8; - gSprites[spriteId].data2 = gTasks[taskId].data[0] * -8; + gSprites[spriteId].data[0] = -8; + gSprites[spriteId].data[2] = gTasks[taskId].data[0] * -8; gSprites[spriteId].callback = SpriteCB_sub_806D37C; } } @@ -3035,7 +3035,7 @@ void UpdateMonIconFrame_806DA44(u8 taskId, u8 monIndex, u8 c) { spriteId = GetMonIconSpriteId(taskId, monIndex); gSprites[spriteId].pos2.y = 0; - gSprites[spriteId].data0 = 0; + gSprites[spriteId].data[0] = 0; if (!c) { @@ -3057,7 +3057,7 @@ void LoadHeldItemIconGraphics(void) void SpriteCB_HeldItemIcon(struct Sprite *sprite) { - u8 data7 = sprite->data7; + u8 data7 = sprite->data[7]; if (gSprites[data7].invisible) { sprite->invisible = 1; @@ -3081,7 +3081,7 @@ void CreateHeldItemIcon(u8 a, u8 b) gSprites[spriteId].pos2.x = 4; gSprites[spriteId].pos2.y = 10; gSprites[spriteId].callback = SpriteCB_HeldItemIcon; - gSprites[spriteId].data7 = a; + gSprites[spriteId].data[7] = a; StartSpriteAnim(&gSprites[spriteId], b); gSprites[spriteId].callback(&gSprites[spriteId]); @@ -3138,8 +3138,8 @@ void CreateHeldItemIcons_806DC34(u8 taskId) gSprites[heldItemSpriteId].pos2.x = 4; gSprites[heldItemSpriteId].pos2.y = 10; - gSprites[heldItemSpriteId].data7 = monIconSpriteId; - gSprites[monIconSpriteId].data7 = heldItemSpriteId; + gSprites[heldItemSpriteId].data[7] = monIconSpriteId; + gSprites[monIconSpriteId].data[7] = heldItemSpriteId; SetHeldItemIconVisibility(taskId, i); gSprites[heldItemSpriteId].callback(&gSprites[heldItemSpriteId]); @@ -3158,8 +3158,8 @@ void CreateHeldItemIcon_806DCD4(u8 taskId, u8 monIndex, u16 item) gSprites[heldItemSpriteId].pos2.x = 4; gSprites[heldItemSpriteId].pos2.y = 10; - gSprites[heldItemSpriteId].data7 = monIconSpriteId; - gSprites[monIconSpriteId].data7 = heldItemSpriteId; + gSprites[heldItemSpriteId].data[7] = monIconSpriteId; + gSprites[monIconSpriteId].data[7] = heldItemSpriteId; if (!item) { @@ -3274,7 +3274,7 @@ _0806DD78: .4byte gSprites\n\ void SpriteCB_UpdateHeldItemIconPosition(struct Sprite *sprite) { - u8 spriteId = sprite->data7; + u8 spriteId = sprite->data[7]; sprite->pos1.x = gSprites[spriteId].pos1.x + gSprites[spriteId].pos2.x; sprite->pos1.y = gSprites[spriteId].pos1.y; @@ -3334,7 +3334,7 @@ void SetMonIconSpriteId(u8 taskId, u8 monIndex, u8 spriteId) u16 GetMonHeldItemIconSpriteId(u8 taskId, u8 monIndex) { u8 spriteId = GetMonIconSpriteId(taskId, monIndex); - u8 retVal = gSprites[spriteId].data7; + u8 retVal = gSprites[spriteId].data[7]; return retVal; } @@ -4478,7 +4478,7 @@ void sub_806FA18(u8 taskId) gTasks[taskId].data[11] -= gTasks[taskId].data[12]; SetMonData(ewram1C000.pokemon, MON_DATA_HP, &gTasks[taskId].data[11]); SetMonIconAnim(GetMonIconSpriteId(ewram1C000.unk4, ewram01000.unk1), ewram1C000.pokemon); - ewram1C000.unk5 = gSprites[ewram01000.unk2].data0; + ewram1C000.unk5 = gSprites[ewram01000.unk2].data[0]; ewram1C000.pokemon = &gPlayerParty[ewram1C000.unk5]; gTasks[taskId].data[10] = GetMonData(ewram1C000.pokemon, MON_DATA_MAX_HP); gTasks[taskId].data[11] = GetMonData(ewram1C000.pokemon, MON_DATA_HP); diff --git a/src/field/pokeblock.c b/src/field/pokeblock.c index a4497295f..5aa03ff7a 100644 --- a/src/field/pokeblock.c +++ b/src/field/pokeblock.c @@ -971,25 +971,25 @@ static void sub_810C854(u8 taskId) static void sub_810C8D4(struct Sprite *sprite) { - if (sprite->data0 > 1) + if (sprite->data[0] > 1) { - sprite->data0 = 0; + sprite->data[0] = 0; } - switch (sprite->data0) + switch (sprite->data[0]) { case 0: sprite->oam.affineMode = 1; sprite->affineAnims = gSpriteAffineAnimTable_83F7F70; InitSpriteAffineAnim(sprite); - sprite->data0 = 1; - sprite->data1 = 0; + sprite->data[0] = 1; + sprite->data[1] = 0; break; case 1: - if (++sprite->data1 > 11) + if (++sprite->data[1] > 11) { sprite->oam.affineMode = 0; - sprite->data0 = 0; - sprite->data1 = 0; + sprite->data[0] = 0; + sprite->data[1] = 0; FreeOamMatrix(sprite->oam.matrixNum); sprite->callback = SpriteCallbackDummy; } diff --git a/src/field/region_map.c b/src/field/region_map.c index 973e7decc..241b38bf6 100644 --- a/src/field/region_map.c +++ b/src/field/region_map.c @@ -1121,9 +1121,9 @@ void CreateRegionMapCursor(u16 tileTag, u16 paletteTag) gRegionMap->cursorSprite->pos1.x = gRegionMap->cursorPosX * 8 + 4; gRegionMap->cursorSprite->pos1.y = gRegionMap->cursorPosY * 8 + 4; } - gRegionMap->cursorSprite->data1 = 2; - gRegionMap->cursorSprite->data2 = IndexOfSpritePaletteTag(paletteTag) * 16 + 0x0101; - gRegionMap->cursorSprite->data3 = 1; + gRegionMap->cursorSprite->data[1] = 2; + gRegionMap->cursorSprite->data[2] = IndexOfSpritePaletteTag(paletteTag) * 16 + 0x0101; + gRegionMap->cursorSprite->data[3] = 1; } } @@ -1139,12 +1139,12 @@ static void sub_80FBCA0(void) void unref_sub_80FBCD0(void) { - gRegionMap->cursorSprite->data3 = 1; + gRegionMap->cursorSprite->data[3] = 1; } void unref_sub_80FBCE0(void) { - gRegionMap->cursorSprite->data3 = 0; + gRegionMap->cursorSprite->data[3] = 0; } static const struct OamData sPlayerIconOamData = @@ -1259,16 +1259,16 @@ static void SpriteCB_PlayerIconZoomedIn(struct Sprite *sprite) { sprite->pos2.x = -(gRegionMap->scrollX * 2); sprite->pos2.y = -(gRegionMap->scrollY * 2); - sprite->data0 = sprite->pos1.y + sprite->pos2.y + sprite->centerToCornerVecY; - sprite->data1 = sprite->pos1.x + sprite->pos2.x + sprite->centerToCornerVecX; + sprite->data[0] = sprite->pos1.y + sprite->pos2.y + sprite->centerToCornerVecY; + sprite->data[1] = sprite->pos1.x + sprite->pos2.x + sprite->centerToCornerVecX; // Determine if sprite is on screen - if (sprite->data0 < -8 || sprite->data0 > 0xA8 || sprite->data1 < -8 || sprite->data1 > 0xF8) - sprite->data2 = FALSE; + if (sprite->data[0] < -8 || sprite->data[0] > 0xA8 || sprite->data[1] < -8 || sprite->data[1] > 0xF8) + sprite->data[2] = FALSE; else - sprite->data2 = TRUE; + sprite->data[2] = TRUE; - if (sprite->data2 == TRUE) + if (sprite->data[2] == TRUE) UpdateIconBlink(sprite); else sprite->invisible = TRUE; @@ -1284,10 +1284,10 @@ static void UpdateIconBlink(struct Sprite *sprite) if (gRegionMap->blinkPlayerIcon) { // Toggle visibility every 16 frames - sprite->data7++; - if (sprite->data7 > 16) + sprite->data[7]++; + if (sprite->data[7] > 16) { - sprite->data7 = 0; + sprite->data[7] = 0; sprite->invisible = !sprite->invisible; } } @@ -1691,7 +1691,7 @@ static void CreateCityTownFlyTargetIcons(void) else r7 += 3; StartSpriteAnim(&gSprites[spriteId], r7); - gSprites[spriteId].data0 = i; + gSprites[spriteId].data[0] = i; } canFlyFlag++; } @@ -1724,7 +1724,7 @@ static void CreateSpecialAreaFlyTargetIcons(void) gSprites[spriteId].oam.size = 1; gSprites[spriteId].callback = SpriteCB_FlyTargetIcons; StartSpriteAnim(&gSprites[spriteId], 6); - gSprites[spriteId].data0 = mapSectionId; + gSprites[spriteId].data[0] = mapSectionId; } } } @@ -1733,19 +1733,19 @@ static void CreateSpecialAreaFlyTargetIcons(void) static void SpriteCB_FlyTargetIcons(struct Sprite *sprite) { // Blink if our mapSectionId is the one selected on the map - if (ewram0_3.regionMap.mapSectionId == sprite->data0) + if (ewram0_3.regionMap.mapSectionId == sprite->data[0]) { // Toggle visibility every 16 frames - sprite->data1++; - if (sprite->data1 > 16) + sprite->data[1]++; + if (sprite->data[1] > 16) { - sprite->data1 = 0; + sprite->data[1] = 0; sprite->invisible = !sprite->invisible; } } else { - sprite->data1 = 16; + sprite->data[1] = 16; sprite->invisible = FALSE; } } diff --git a/src/field/rotating_gate.c b/src/field/rotating_gate.c index e8ab7e1bf..a672f3489 100644 --- a/src/field/rotating_gate.c +++ b/src/field/rotating_gate.c @@ -762,7 +762,7 @@ static u8 RotatingGate_CreateGate(u8 gateId, s16 deltaX, s16 deltaY) y = gate->y + 7; sprite = &gSprites[spriteId]; - sprite->data0 = gateId; + sprite->data[0] = gateId; sprite->coordOffsetEnabled = 1; sub_8060388(x + deltaX, y + deltaY, &sprite->pos1.x, &sprite->pos1.y); @@ -778,8 +778,8 @@ static void SpriteCallback_RotatingGate(struct Sprite *sprite) u8 orientation; u8 affineAnimation; - rotationDirection = sprite->data1; - orientation = sprite->data2; + rotationDirection = sprite->data[1]; + orientation = sprite->data[2]; RotatingGate_HideGatesOutsideViewport(sprite); @@ -804,7 +804,7 @@ static void SpriteCallback_RotatingGate(struct Sprite *sprite) StartSpriteAffineAnim(sprite, affineAnimation); } - sprite->data1 = ROTATE_NONE; + sprite->data[1] = ROTATE_NONE; } static void RotatingGate_HideGatesOutsideViewport(struct Sprite *sprite) @@ -1065,8 +1065,8 @@ static void RotatingGate_TriggerRotationAnimation(u8 gateId, int rotationDirecti if (gRotatingGate_GateSpriteIds[gateId] != MAX_SPRITES) { sprite = &gSprites[gRotatingGate_GateSpriteIds[gateId]]; - sprite->data1 = rotationDirection; - sprite->data2 = RotatingGate_GetGateOrientation(gateId); + sprite->data[1] = rotationDirection; + sprite->data[2] = RotatingGate_GetGateOrientation(gateId); } } diff --git a/src/field/starter_choose.c b/src/field/starter_choose.c index 2b28df4f0..49590f83a 100644 --- a/src/field/starter_choose.c +++ b/src/field/starter_choose.c @@ -324,24 +324,24 @@ void CB2_ChooseStarter(void) //Create hand sprite spriteId = CreateSprite(&gSpriteTemplate_83F77CC, 120, 56, 2); - gSprites[spriteId].data0 = taskId; + gSprites[spriteId].data[0] = taskId; //Create three Pokeball sprites spriteId = CreateSprite( &gSpriteTemplate_83F77E4, gStarterChoose_PokeballCoords[0][0], gStarterChoose_PokeballCoords[0][1], 2); - gSprites[spriteId].data0 = taskId; - gSprites[spriteId].data1 = 0; + gSprites[spriteId].data[0] = taskId; + gSprites[spriteId].data[1] = 0; spriteId = CreateSprite( &gSpriteTemplate_83F77E4, gStarterChoose_PokeballCoords[1][0], gStarterChoose_PokeballCoords[1][1], 2); - gSprites[spriteId].data0 = taskId; - gSprites[spriteId].data1 = 1; + gSprites[spriteId].data[0] = taskId; + gSprites[spriteId].data[1] = 1; spriteId = CreateSprite( &gSpriteTemplate_83F77E4, gStarterChoose_PokeballCoords[2][0], gStarterChoose_PokeballCoords[2][1], 2); - gSprites[spriteId].data0 = taskId; - gSprites[spriteId].data1 = 2; + gSprites[spriteId].data[0] = taskId; + gSprites[spriteId].data[1] = 2; } static void MainCallback2(void) @@ -727,16 +727,16 @@ static u8 CreatePokemonFrontSprite(u16 species, u8 x, u8 y) //Sprite callback static void sub_810A62C(struct Sprite *sprite) { - sprite->pos1.x = gUnknown_083F76E4[gTasks[sprite->data0].tStarterSelection][0]; - sprite->pos1.y = gUnknown_083F76E4[gTasks[sprite->data0].tStarterSelection][1]; - sprite->pos2.y = Sin(sprite->data1, 8); - sprite->data1 = (u8)sprite->data1 + 4; + sprite->pos1.x = gUnknown_083F76E4[gTasks[sprite->data[0]].tStarterSelection][0]; + sprite->pos1.y = gUnknown_083F76E4[gTasks[sprite->data[0]].tStarterSelection][1]; + sprite->pos2.y = Sin(sprite->data[1], 8); + sprite->data[1] = (u8)sprite->data[1] + 4; } //Sprite callback static void sub_810A68C(struct Sprite *sprite) { - if (gTasks[sprite->data0].tStarterSelection == sprite->data1) + if (gTasks[sprite->data[0]].tStarterSelection == sprite->data[1]) StartSpriteAnimIfDifferent(sprite, 1); else StartSpriteAnimIfDifferent(sprite, 0); diff --git a/src/field/trainer_see.c b/src/field/trainer_see.c index 85bd7ad0b..38bc6971c 100644 --- a/src/field/trainer_see.c +++ b/src/field/trainer_see.c @@ -485,11 +485,11 @@ void sub_8084894(struct Sprite *sprite, u16 a2, u8 a3) sprite->oam.priority = 1; sprite->coordOffsetEnabled = 1; - sprite->data0 = gFieldEffectArguments[0]; - sprite->data1 = gFieldEffectArguments[1]; - sprite->data2 = gFieldEffectArguments[2]; - sprite->data3 = -5; - sprite->data7 = a2; + sprite->data[0] = gFieldEffectArguments[0]; + sprite->data[1] = gFieldEffectArguments[1]; + sprite->data[2] = gFieldEffectArguments[2]; + sprite->data[3] = -5; + sprite->data[7] = a2; StartSpriteAnim(sprite, a3); } @@ -498,22 +498,22 @@ void objc_exclamation_mark_probably(struct Sprite *sprite) { u8 mapObjId; - if (TryGetFieldObjectIdByLocalIdAndMap(sprite->data0, sprite->data1, sprite->data2, &mapObjId) + if (TryGetFieldObjectIdByLocalIdAndMap(sprite->data[0], sprite->data[1], sprite->data[2], &mapObjId) || sprite->animEnded) { - FieldEffectStop(sprite, (u8)sprite->data7); + FieldEffectStop(sprite, (u8)sprite->data[7]); } else { struct Sprite *mapObjSprite = &gSprites[gMapObjects[mapObjId].spriteId]; - sprite->data4 += sprite->data3; + sprite->data[4] += sprite->data[3]; sprite->pos1.x = mapObjSprite->pos1.x; sprite->pos1.y = mapObjSprite->pos1.y - 16; sprite->pos2.x = mapObjSprite->pos2.x; - sprite->pos2.y = mapObjSprite->pos2.y + sprite->data4; - if (sprite->data4) - sprite->data3++; + sprite->pos2.y = mapObjSprite->pos2.y + sprite->data[4]; + if (sprite->data[4]) + sprite->data[3]++; else - sprite->data3 = 0; + sprite->data[3] = 0; } } diff --git a/src/field/use_pokeblock.c b/src/field/use_pokeblock.c index 54ed89ef2..d301d93d6 100644 --- a/src/field/use_pokeblock.c +++ b/src/field/use_pokeblock.c @@ -893,11 +893,11 @@ static void sub_8137138(void) static void sub_81371DC(struct Sprite *sprite) { - if (sprite->data0 <= 5) + if (sprite->data[0] <= 5) sprite->pos2.y -= 2; - else if (sprite->data0 <= 11) + else if (sprite->data[0] <= 11) sprite->pos2.y += 2; - if ((++sprite->data0) > 60) + if ((++sprite->data[0]) > 60) { DestroySprite(sprite); gUnknown_02039304->unk54--; diff --git a/src/field/wallclock.c b/src/field/wallclock.c index 8db13dc2d..d86b1bc95 100644 --- a/src/field/wallclock.c +++ b/src/field/wallclock.c @@ -288,22 +288,22 @@ void CB2_StartWallClock(void) gTasks[taskId].tHourHandAngle = 300; spriteId = CreateSprite(&gSpriteTemplate_83F7AD8, DISPLAY_WIDTH / 2, DISPLAY_HEIGHT / 2, 1); - gSprites[spriteId].data0 = taskId; + gSprites[spriteId].data[0] = taskId; gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL; gSprites[spriteId].oam.matrixNum = 0; spriteId = CreateSprite(&gSpriteTemplate_83F7AF0, DISPLAY_WIDTH / 2, DISPLAY_HEIGHT / 2, 0); - gSprites[spriteId].data0 = taskId; + gSprites[spriteId].data[0] = taskId; gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL; gSprites[spriteId].oam.matrixNum = 1; spriteId = CreateSprite(&gSpriteTemplate_83F7B28, DISPLAY_WIDTH / 2, DISPLAY_HEIGHT / 2, 2); - gSprites[spriteId].data0 = taskId; - gSprites[spriteId].data1 = 45; + gSprites[spriteId].data[0] = taskId; + gSprites[spriteId].data[1] = 45; spriteId = CreateSprite(&gSpriteTemplate_83F7B40, DISPLAY_WIDTH / 2, DISPLAY_HEIGHT / 2, 2); - gSprites[spriteId].data0 = taskId; - gSprites[spriteId].data1 = 90; + gSprites[spriteId].data[0] = taskId; + gSprites[spriteId].data[1] = 90; WallClockInit(); } @@ -333,22 +333,22 @@ void CB2_ViewWallClock(void) } spriteId = CreateSprite(&gSpriteTemplate_83F7AD8, 120, 80, 1); - gSprites[spriteId].data0 = taskId; + gSprites[spriteId].data[0] = taskId; gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL; gSprites[spriteId].oam.matrixNum = 0; spriteId = CreateSprite(&gSpriteTemplate_83F7AF0, 120, 80, 0); - gSprites[spriteId].data0 = taskId; + gSprites[spriteId].data[0] = taskId; gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL; gSprites[spriteId].oam.matrixNum = 1; spriteId = CreateSprite(&gSpriteTemplate_83F7B28, 120, 80, 2); - gSprites[spriteId].data0 = taskId; - gSprites[spriteId].data1 = angle1; + gSprites[spriteId].data[0] = taskId; + gSprites[spriteId].data[1] = angle1; spriteId = CreateSprite(&gSpriteTemplate_83F7B40, 120, 80, 2); - gSprites[spriteId].data0 = taskId; - gSprites[spriteId].data1 = angle2; + gSprites[spriteId].data[0] = taskId; + gSprites[spriteId].data[1] = angle2; WallClockInit(); } @@ -968,7 +968,7 @@ static void sub_810B05C(struct Sprite *sprite) u16 x; u16 y; - angle = gTasks[sprite->data0].tMinuteHandAngle; + angle = gTasks[sprite->data[0]].tMinuteHandAngle; sin = Sin2(angle) / 16; cos = Cos2(angle) / 16; SetOamMatrix(0, cos, sin, -sin, cos); @@ -993,7 +993,7 @@ static void sub_810B0F4(struct Sprite *sprite) u16 x; u16 y; - angle = gTasks[sprite->data0].tHourHandAngle; + angle = gTasks[sprite->data[0]].tHourHandAngle; sin = Sin2(angle) / 16; cos = Cos2(angle) / 16; SetOamMatrix(1, cos, sin, -sin, cos); @@ -1015,23 +1015,23 @@ static void sub_810B18C(struct Sprite *sprite) s16 sin; s16 cos; - if (gTasks[sprite->data0].tPeriod != PERIOD_AM) + if (gTasks[sprite->data[0]].tPeriod != PERIOD_AM) { - if (sprite->data1 >= 60 && sprite->data1 < 90) - sprite->data1 += 5; - if (sprite->data1 < 60) - sprite->data1++; + if (sprite->data[1] >= 60 && sprite->data[1] < 90) + sprite->data[1] += 5; + if (sprite->data[1] < 60) + sprite->data[1]++; } else { - if (sprite->data1 > 45 && sprite->data1 <= 75) - sprite->data1 -= 5; - if (sprite->data1 > 75) - sprite->data1--; + if (sprite->data[1] > 45 && sprite->data[1] <= 75) + sprite->data[1] -= 5; + if (sprite->data[1] > 75) + sprite->data[1]--; } - cos = Cos2((u16)sprite->data1); + cos = Cos2((u16)sprite->data[1]); sprite->pos2.x = cos * 30 / 4096; - sin = Sin2((u16)sprite->data1); + sin = Sin2((u16)sprite->data[1]); sprite->pos2.y = sin * 30 / 4096; } @@ -1040,22 +1040,22 @@ static void sub_810B230(struct Sprite *sprite) s16 sin; s16 cos; - if (gTasks[sprite->data0].tPeriod != PERIOD_AM) + if (gTasks[sprite->data[0]].tPeriod != PERIOD_AM) { - if (sprite->data1 >= 105 && sprite->data1 < 135) - sprite->data1 += 5; - if (sprite->data1 < 105) - sprite->data1++; + if (sprite->data[1] >= 105 && sprite->data[1] < 135) + sprite->data[1] += 5; + if (sprite->data[1] < 105) + sprite->data[1]++; } else { - if (sprite->data1 > 90 && sprite->data1 <= 120) - sprite->data1 -= 5; - if (sprite->data1 > 120) - sprite->data1--; + if (sprite->data[1] > 90 && sprite->data[1] <= 120) + sprite->data[1] -= 5; + if (sprite->data[1] > 120) + sprite->data[1]--; } - cos = Cos2((u16)sprite->data1); + cos = Cos2((u16)sprite->data[1]); sprite->pos2.x = cos * 30 / 4096; - sin = Sin2((u16)sprite->data1); + sin = Sin2((u16)sprite->data[1]); sprite->pos2.y = sin * 30 / 4096; } diff --git a/src/pokemon/learn_move.c b/src/pokemon/learn_move.c index a47896ea5..55aac840f 100644 --- a/src/pokemon/learn_move.c +++ b/src/pokemon/learn_move.c @@ -765,20 +765,20 @@ void ClearLearnMoveVars(void) void sub_8133300(struct Sprite *sprite) { - s16 var = (sprite->data1 * 10) & 0xFF; + s16 var = (sprite->data[1] * 10) & 0xFF; - switch (sprite->data0) + switch (sprite->data[0]) { case 0: break; case 1: - sprite->pos2.x = Sin(var, 3) * sprite->data2; + sprite->pos2.x = Sin(var, 3) * sprite->data[2]; break; case 2: - sprite->pos2.y = Sin(var, 1) * sprite->data2; + sprite->pos2.y = Sin(var, 1) * sprite->data[2]; break; } - sprite->data1++; + sprite->data[1]++; } void sub_8133358(void) @@ -786,22 +786,22 @@ void sub_8133358(void) s32 i; sLearnMoveStruct->spriteIDs[0] = CreateSprite(&gSpriteTemplate_8402D90, 8, 16, 0); - gSprites[sLearnMoveStruct->spriteIDs[0]].data0 = 1; - gSprites[sLearnMoveStruct->spriteIDs[0]].data2 = -1; + gSprites[sLearnMoveStruct->spriteIDs[0]].data[0] = 1; + gSprites[sLearnMoveStruct->spriteIDs[0]].data[2] = -1; sLearnMoveStruct->spriteIDs[1] = CreateSprite(&gSpriteTemplate_8402D90, 72, 16, 0); StartSpriteAnim(&gSprites[sLearnMoveStruct->spriteIDs[1]], 1); - gSprites[sLearnMoveStruct->spriteIDs[1]].data0 = 1; - gSprites[sLearnMoveStruct->spriteIDs[1]].data2 = 1; + gSprites[sLearnMoveStruct->spriteIDs[1]].data[0] = 1; + gSprites[sLearnMoveStruct->spriteIDs[1]].data[2] = 1; sLearnMoveStruct->spriteIDs[2] = CreateSprite(&gSpriteTemplate_8402DC0, 160, 4, 0); StartSpriteAnim(&gSprites[sLearnMoveStruct->spriteIDs[2]], 1); - gSprites[sLearnMoveStruct->spriteIDs[2]].data0 = 2; - gSprites[sLearnMoveStruct->spriteIDs[2]].data2 = -1; + gSprites[sLearnMoveStruct->spriteIDs[2]].data[0] = 2; + gSprites[sLearnMoveStruct->spriteIDs[2]].data[2] = -1; sLearnMoveStruct->spriteIDs[3] = CreateSprite(&gSpriteTemplate_8402DC0, 160, 60, 0); - gSprites[sLearnMoveStruct->spriteIDs[3]].data0 = 2; - gSprites[sLearnMoveStruct->spriteIDs[3]].data2 = 1; + gSprites[sLearnMoveStruct->spriteIDs[3]].data[0] = 2; + gSprites[sLearnMoveStruct->spriteIDs[3]].data[2] = 1; for (i = 0; i < 8; i++) { diff --git a/src/pokemon/mon_markings.c b/src/pokemon/mon_markings.c index 9ea738c7b..29e8c5127 100644 --- a/src/pokemon/mon_markings.c +++ b/src/pokemon/mon_markings.c @@ -284,7 +284,7 @@ void sub_80F761C(s16 x, s16 y, u16 baseTileTag, u16 basePaletteTag) if (spriteId != 64) { sMenu->menuMarkingSprites[i] = &gSprites[spriteId]; - gSprites[spriteId].data0 = i; + gSprites[spriteId].data[0] = i; } else { @@ -324,10 +324,10 @@ void nullsub_65(struct Sprite *sprite) void sub_80F78CC(struct Sprite *sprite) { - if (sMenu->markingsArray[sprite->data0]) - StartSpriteAnim(sprite, 2 * sprite->data0 + 1); + if (sMenu->markingsArray[sprite->data[0]]) + StartSpriteAnim(sprite, 2 * sprite->data[0] + 1); else - StartSpriteAnim(sprite, 2 * sprite->data0); + StartSpriteAnim(sprite, 2 * sprite->data[0]); } void sub_80F7908(struct Sprite *sprite) diff --git a/src/pokemon/pokeblock_feed.c b/src/pokemon/pokeblock_feed.c index 5f218a6f6..389c4bb25 100644 --- a/src/pokemon/pokeblock_feed.c +++ b/src/pokemon/pokeblock_feed.c @@ -763,7 +763,7 @@ static u8 PokeblockFeed_CreatePokeSprite(struct Pokemon* mon) gPokeblockFeedMonSpecies = species; gPokeblockFeedMonSpriteID = spriteID; gPokeblockFeedMonNature = GetNature(mon); - gSprites[spriteID].data2 = species; + gSprites[spriteID].data[2] = species; gSprites[spriteID].callback = SpriteCallbackDummy; gPokeblockMonNotFlipped = 1; if (!IsPokeSpriteNotFlipped(species)) @@ -780,19 +780,19 @@ static void sub_8148044(u8 spriteID) { gSprites[spriteID].pos1.x = 48; gSprites[spriteID].pos1.y = 80; - gSprites[spriteID].data0 = -8; - gSprites[spriteID].data1 = 1; + gSprites[spriteID].data[0] = -8; + gSprites[spriteID].data[1] = 1; gSprites[spriteID].callback = sub_8148078; } static void sub_8148078(struct Sprite* sprite) { sprite->pos1.x += 4; - sprite->pos1.y += sprite->data0; - sprite->data0 += sprite->data1; - if (sprite->data0 == 0) - PlayCry1(sprite->data2, 0); - if (sprite->data0 == 9) + sprite->pos1.y += sprite->data[0]; + sprite->data[0] += sprite->data[1]; + if (sprite->data[0] == 0) + PlayCry1(sprite->data[2], 0); + if (sprite->data[0] == 9) sprite->callback = SpriteCallbackDummy; } @@ -820,17 +820,17 @@ static void sub_8148108(u8 spriteID, bool8 a1) static u8 CreatePokeblockSprite(void) { u8 spriteID = CreateSprite(&sThrownPokeblockSpriteTemplate, 174, 84, 1); - gSprites[spriteID].data0 = -12; - gSprites[spriteID].data1 = 1; + gSprites[spriteID].data[0] = -12; + gSprites[spriteID].data[1] = 1; return spriteID; } static void SpriteCB_ThrownPokeblock(struct Sprite* sprite) { sprite->pos1.x -= 4; - sprite->pos1.y += sprite->data0; - sprite->data0 += sprite->data1; - if (sprite->data0 == 10) + sprite->pos1.y += sprite->data[0]; + sprite->data[0] += sprite->data[1]; + if (sprite->data[0] == 10) DestroySprite(sprite); } diff --git a/src/pokemon/pokedex.c b/src/pokemon/pokedex.c index 18e98ca5f..cd37c3a93 100644 --- a/src/pokemon/pokedex.c +++ b/src/pokemon/pokedex.c @@ -2315,7 +2315,7 @@ static void sub_808E0CC(u16 a, u16 b) { spriteId = sub_808E8C8(unk, 0x60, 0x50); gSprites[spriteId].callback = sub_808EE28; - gSprites[spriteId].data5 = -32; + gSprites[spriteId].data[5] = -32; } unk = sub_808E888(a); @@ -2323,7 +2323,7 @@ static void sub_808E0CC(u16 a, u16 b) { spriteId = sub_808E8C8(unk, 0x60, 0x50); gSprites[spriteId].callback = sub_808EE28; - gSprites[spriteId].data5 = 0; + gSprites[spriteId].data[5] = 0; } unk = sub_808E888(a + 1); @@ -2331,7 +2331,7 @@ static void sub_808E0CC(u16 a, u16 b) { spriteId = sub_808E8C8(unk, 0x60, 0x50); gSprites[spriteId].callback = sub_808EE28; - gSprites[spriteId].data5 = 32; + gSprites[spriteId].data[5] = 32; } gPokedexView->unk630 = 0; @@ -2352,7 +2352,7 @@ static bool8 sub_808E208(u8 a, u8 b, u8 c) for (i = 0; i < 4; i++) { if (gPokedexView->unk61E[i] != 0xFFFF) - gSprites[gPokedexView->unk61E[i]].data5 += b; + gSprites[gPokedexView->unk61E[i]].data[5] += b; } foo = 16 * (c - gPokedexView->unk62E) / c; REG_BG2VOFS = gPokedexView->unk62D + gPokedexView->unk632 * 16 - foo; @@ -2362,7 +2362,7 @@ static bool8 sub_808E208(u8 a, u8 b, u8 c) for (i = 0; i < 4; i++) { if (gPokedexView->unk61E[i] != 0xFFFF) - gSprites[gPokedexView->unk61E[i]].data5 -= b; + gSprites[gPokedexView->unk61E[i]].data[5] -= b; } foo = 16 * (c - gPokedexView->unk62E) / c; REG_BG2VOFS = gPokedexView->unk62D + gPokedexView->unk632 * 16 + foo; @@ -2392,7 +2392,7 @@ static void sub_808E398(u8 a, u16 b) { spriteId = sub_808E8C8(unk, 0x60, 0x50); gSprites[spriteId].callback = sub_808EE28; - gSprites[spriteId].data5 = -64; + gSprites[spriteId].data[5] = -64; } if (gPokedexView->unk630 > 0) gPokedexView->unk630--; @@ -2405,7 +2405,7 @@ static void sub_808E398(u8 a, u16 b) { spriteId = sub_808E8C8(unk, 0x60, 0x50); gSprites[spriteId].callback = sub_808EE28; - gSprites[spriteId].data5 = 0x40; + gSprites[spriteId].data[5] = 0x40; } if (gPokedexView->unk630 <= 0xE) gPokedexView->unk630++; @@ -2600,9 +2600,9 @@ static u32 sub_808E8C8(u16 a, s16 b, s16 c) gSprites[spriteId].oam.affineMode = 1; gSprites[spriteId].oam.priority = 3; - gSprites[spriteId].data0 = 0; - gSprites[spriteId].data1 = i; - gSprites[spriteId].data2 = NationalPokedexNumToSpecies(a); + gSprites[spriteId].data[0] = 0; + gSprites[spriteId].data[1] = i; + gSprites[spriteId].data[2] = NationalPokedexNumToSpecies(a); gPokedexView->unk61E[i] = spriteId; return spriteId; } @@ -2616,10 +2616,10 @@ static void sub_808E978(u8 a) u16 r5; spriteId = CreateSprite(&gSpriteTemplate_83A053C, 184, 4, 0); - gSprites[spriteId].data1 = 0; + gSprites[spriteId].data[1] = 0; spriteId = CreateSprite(&gSpriteTemplate_83A053C, 184, 156, 0); - gSprites[spriteId].data1 = 1; + gSprites[spriteId].data[1] = 1; gSprites[spriteId].vFlip = TRUE; CreateSprite(&gSpriteTemplate_83A0524, 234, 20, 0); @@ -2630,7 +2630,7 @@ static void sub_808E978(u8 a) spriteId = CreateSprite(&gSpriteTemplate_83A0554, 16, 158, 0); StartSpriteAnim(&gSprites[spriteId], 2); - gSprites[spriteId].data2 = 0x80; + gSprites[spriteId].data[2] = 0x80; spriteId = CreateSprite(&gSpriteTemplate_83A0554, 48, 158, 0); StartSpriteAnim(&gSprites[spriteId], 1); @@ -2638,14 +2638,14 @@ static void sub_808E978(u8 a) spriteId = CreateSprite(&gSpriteTemplate_83A056C, 0, 80, 2); gSprites[spriteId].oam.affineMode = 1; gSprites[spriteId].oam.matrixNum = 30; - gSprites[spriteId].data0 = 0x1E; - gSprites[spriteId].data1 = 0; + gSprites[spriteId].data[0] = 0x1E; + gSprites[spriteId].data[1] = 0; spriteId = CreateSprite(&gSpriteTemplate_83A056C, 0, 80, 2); gSprites[spriteId].oam.affineMode = 1; gSprites[spriteId].oam.matrixNum = 31; - gSprites[spriteId].data0 = 0x1F; - gSprites[spriteId].data1 = 0x80; + gSprites[spriteId].data[0] = 0x1F; + gSprites[spriteId].data[1] = 0x80; if (a == 0) { @@ -2743,7 +2743,7 @@ static void sub_808EDB8(struct Sprite *sprite) static void sub_808EE28(struct Sprite *sprite) { - u8 data1 = sprite->data1; + u8 data1 = sprite->data[1]; if (gPokedexView->unk64A != 0 && gPokedexView->unk64A != 3) { @@ -2754,24 +2754,24 @@ static void sub_808EE28(struct Sprite *sprite) { u32 var; - sprite->pos2.y = gSineTable[(u8)sprite->data5] * 76 / 256; - var = 0x10000 / gSineTable[sprite->data5 + 0x40]; + sprite->pos2.y = gSineTable[(u8)sprite->data[5]] * 76 / 256; + var = 0x10000 / gSineTable[sprite->data[5] + 0x40]; if (var > 0xFFFF) var = 0xFFFF; - SetOamMatrix(sprite->data1 + 1, 0x100, 0, 0, var); + SetOamMatrix(sprite->data[1] + 1, 0x100, 0, 0, var); sprite->oam.matrixNum = data1 + 1; - if (sprite->data5 > -64 && sprite->data5 < 64) + if (sprite->data[5] > -64 && sprite->data[5] < 64) { sprite->invisible = FALSE; - sprite->data0 = 1; + sprite->data[0] = 1; } else { sprite->invisible = TRUE; } - if ((sprite->data5 <= -64 || sprite->data5 >= 64) && sprite->data0 != 0) + if ((sprite->data[5] <= -64 || sprite->data[5] >= 64) && sprite->data[0] != 0) { DestroySprite(sprite); gPokedexView->unk61E[data1] = 0xFFFF; @@ -2797,13 +2797,13 @@ static void sub_808EF8C(struct Sprite *sprite) { u8 r0; - if (sprite->data1 != 0) + if (sprite->data[1] != 0) { if (gPokedexView->selectedPokemon == gPokedexView->pokemonListCount - 1) sprite->invisible = TRUE; else sprite->invisible = FALSE; - r0 = sprite->data2; + r0 = sprite->data[2]; } else { @@ -2811,10 +2811,10 @@ static void sub_808EF8C(struct Sprite *sprite) sprite->invisible = TRUE; else sprite->invisible = FALSE; - r0 = sprite->data2 - 128; + r0 = sprite->data[2] - 128; } sprite->pos2.y = gSineTable[r0] / 64; - sprite->data2 = sprite->data2 + 8; + sprite->data[2] = sprite->data[2] + 8; if (gPokedexView->menuIsOpen == 0 && gPokedexView->menuY == 0 && sprite->invisible == 0) sprite->invisible = FALSE; else @@ -2840,12 +2840,12 @@ static void sub_808F0B4(struct Sprite *sprite) s16 r3; s16 r0; - val = gPokedexView->unk62C + sprite->data1; + val = gPokedexView->unk62C + sprite->data[1]; r3 = gSineTable[val]; r0 = gSineTable[val + 0x40]; - SetOamMatrix(sprite->data0, r0, r3, -r3, r0); + SetOamMatrix(sprite->data[0], r0, r3, -r3, r0); - val = gPokedexView->unk62C + (sprite->data1 + 0x40); + val = gPokedexView->unk62C + (sprite->data[1] + 0x40); r3 = gSineTable[val]; r0 = gSineTable[val + 0x40]; sprite->pos2.x = r0 * 40 / 256; @@ -2867,8 +2867,8 @@ static void sub_808F168(struct Sprite *sprite) { sprite->invisible = FALSE; sprite->pos2.y = gPokedexView->menuCursorPos * 16; - sprite->pos2.x = gSineTable[(u8)sprite->data2] / 64; - sprite->data2 += 8; + sprite->pos2.x = gSineTable[(u8)sprite->data[2]] / 64; + sprite->data[2] += 8; } else { @@ -5482,27 +5482,27 @@ static bool8 sub_8092F8C(u8 taskId) static void sub_8092FD8(struct Sprite *sprite) { - if (gTasks[sprite->data0].func == sub_8092644) + if (gTasks[sprite->data[0]].func == sub_8092644) { u8 val; - if (sprite->data1 != 0) + if (sprite->data[1] != 0) { - if (sub_8092F8C(sprite->data0)) + if (sub_8092F8C(sprite->data[0])) sprite->invisible = TRUE; else sprite->invisible = FALSE; } else { - if (sub_8092F44(sprite->data0)) + if (sub_8092F44(sprite->data[0])) sprite->invisible = TRUE; else sprite->invisible = FALSE; } - val = sprite->data2 + sprite->data1 * 128; + val = sprite->data[2] + sprite->data[1] * 128; sprite->pos2.y = gSineTable[val] / 128; - sprite->data2 += 8; + sprite->data[2] += 8; } else { @@ -5515,13 +5515,13 @@ static void sub_809308C(u8 taskId) u8 spriteId; spriteId = CreateSprite(&gSpriteTemplate_83A053C, 184, 4, 0); - gSprites[spriteId].data0 = taskId; - gSprites[spriteId].data1 = 0; + gSprites[spriteId].data[0] = taskId; + gSprites[spriteId].data[1] = 0; gSprites[spriteId].callback = sub_8092FD8; spriteId = CreateSprite(&gSpriteTemplate_83A053C, 184, 108, 0); - gSprites[spriteId].data0 = taskId; - gSprites[spriteId].data1 = 1; + gSprites[spriteId].data[0] = taskId; + gSprites[spriteId].data[1] = 1; gSprites[spriteId].vFlip = TRUE; gSprites[spriteId].callback = sub_8092FD8; } diff --git a/src/pokemon/pokemon_menu.c b/src/pokemon/pokemon_menu.c index 3a2c12db5..07d7e5322 100644 --- a/src/pokemon/pokemon_menu.c +++ b/src/pokemon/pokemon_menu.c @@ -347,7 +347,7 @@ static void sub_8089F44(u8 taskID) { if (!gPaletteFade.active) { - u8 spriteID = gSprites[gTasks[taskID].data[3] >> 8].data0; + u8 spriteID = gSprites[gTasks[taskID].data[3] >> 8].data[0]; DestroyTask(taskID); ewram1B000_alt.unk262 = 1; ShowPokemonSummaryScreen(gPlayerParty, spriteID, gPlayerPartyCount - 1, sub_8089F14, 0); diff --git a/src/rom_8077ABC.c b/src/rom_8077ABC.c index 10d58dcb5..e4801a194 100644 --- a/src/rom_8077ABC.c +++ b/src/rom_8077ABC.c @@ -434,92 +434,92 @@ u8 GetAnimBankSpriteId(u8 whichBank) { } } -void StoreSpriteCallbackInData6(struct Sprite *sprite, void (*callback)(struct Sprite*)) { - sprite->data6 = (u32)(callback) & 0xffff; - sprite->data7 = (u32)(callback) >> 16; +void StoreSpriteCallbackInData(struct Sprite *sprite, void (*callback)(struct Sprite*)) { + sprite->data[6] = (u32)(callback) & 0xffff; + sprite->data[7] = (u32)(callback) >> 16; } -void SetCallbackToStoredInData6(struct Sprite *sprite) { - u32 callback = (u16)sprite->data6 | (sprite->data7 << 16); +void SetCallbackToStoredInData(struct Sprite *sprite) { + u32 callback = (u16)sprite->data[6] | (sprite->data[7] << 16); sprite->callback = (void (*)(struct Sprite *))callback; } void sub_8078114(struct Sprite *sprite) { - if (sprite->data3) { - sprite->pos2.x = Sin(sprite->data0, sprite->data1); - sprite->pos2.y = Cos(sprite->data0, sprite->data1); - sprite->data0 += sprite->data2; - if (sprite->data0 >= 0x100) { - sprite->data0 -= 0x100; - } else if (sprite->data0 < 0) { - sprite->data0 += 0x100; + if (sprite->data[3]) { + sprite->pos2.x = Sin(sprite->data[0], sprite->data[1]); + sprite->pos2.y = Cos(sprite->data[0], sprite->data[1]); + sprite->data[0] += sprite->data[2]; + if (sprite->data[0] >= 0x100) { + sprite->data[0] -= 0x100; + } else if (sprite->data[0] < 0) { + sprite->data[0] += 0x100; } - sprite->data3--; + sprite->data[3]--; } else { - SetCallbackToStoredInData6(sprite); + SetCallbackToStoredInData(sprite); } } void sub_8078174(struct Sprite *sprite) { - if (sprite->data3) { - sprite->pos2.x = Sin(sprite->data0, (sprite->data5 >> 8) + sprite->data1); - sprite->pos2.y = Cos(sprite->data0, (sprite->data5 >> 8) + sprite->data1); - sprite->data0 += sprite->data2; - sprite->data5 += sprite->data4; - if (sprite->data0 >= 0x100) { - sprite->data0 -= 0x100; - } else if (sprite->data0 < 0) { - sprite->data0 += 0x100; + if (sprite->data[3]) { + sprite->pos2.x = Sin(sprite->data[0], (sprite->data[5] >> 8) + sprite->data[1]); + sprite->pos2.y = Cos(sprite->data[0], (sprite->data[5] >> 8) + sprite->data[1]); + sprite->data[0] += sprite->data[2]; + sprite->data[5] += sprite->data[4]; + if (sprite->data[0] >= 0x100) { + sprite->data[0] -= 0x100; + } else if (sprite->data[0] < 0) { + sprite->data[0] += 0x100; } - sprite->data3--; + sprite->data[3]--; } else { - SetCallbackToStoredInData6(sprite); + SetCallbackToStoredInData(sprite); } } void unref_sub_80781F0(struct Sprite *sprite) { - if (sprite->data3) { - sprite->pos2.x = Sin(sprite->data0, sprite->data1); - sprite->pos2.y = Cos(sprite->data4, sprite->data1); - sprite->data0 += sprite->data2; - sprite->data4 += sprite->data5; - if (sprite->data0 >= 0x100) { - sprite->data0 -= 0x100; - } else if (sprite->data0 < 0) { - sprite->data0 += 0x100; + if (sprite->data[3]) { + sprite->pos2.x = Sin(sprite->data[0], sprite->data[1]); + sprite->pos2.y = Cos(sprite->data[4], sprite->data[1]); + sprite->data[0] += sprite->data[2]; + sprite->data[4] += sprite->data[5]; + if (sprite->data[0] >= 0x100) { + sprite->data[0] -= 0x100; + } else if (sprite->data[0] < 0) { + sprite->data[0] += 0x100; } - if (sprite->data4 >= 0x100) { - sprite->data4 -= 0x100; - } else if (sprite->data4 < 0) { - sprite->data4 += 0x100; + if (sprite->data[4] >= 0x100) { + sprite->data[4] -= 0x100; + } else if (sprite->data[4] < 0) { + sprite->data[4] += 0x100; } - sprite->data3--; + sprite->data[3]--; } else { - SetCallbackToStoredInData6(sprite); + SetCallbackToStoredInData(sprite); } } void sub_8078278(struct Sprite *sprite) { - if (sprite->data3) { - sprite->pos2.x = Sin(sprite->data0, sprite->data1); - sprite->pos2.y = Cos(sprite->data0, sprite->data4); - sprite->data0 += sprite->data2; - if (sprite->data0 >= 0x100) { - sprite->data0 -= 0x100; - } else if (sprite->data0 < 0) { - sprite->data0 += 0x100; + if (sprite->data[3]) { + sprite->pos2.x = Sin(sprite->data[0], sprite->data[1]); + sprite->pos2.y = Cos(sprite->data[0], sprite->data[4]); + sprite->data[0] += sprite->data[2]; + if (sprite->data[0] >= 0x100) { + sprite->data[0] -= 0x100; + } else if (sprite->data[0] < 0) { + sprite->data[0] += 0x100; } - sprite->data3--; + sprite->data[3]--; } else { - SetCallbackToStoredInData6(sprite); + SetCallbackToStoredInData(sprite); } } void sub_80782D8(struct Sprite *sprite) { - if (sprite->data0 > 0) { - sprite->data0--; + if (sprite->data[0] > 0) { + sprite->data[0]--; } else { - SetCallbackToStoredInData6(sprite); + SetCallbackToStoredInData(sprite); } } @@ -532,95 +532,95 @@ void sub_80782F8(struct Sprite *sprite) { void sub_8078314(struct Sprite *sprite) { s16 old; int v1; - if (sprite->data1 > sprite->data2) { - sprite->data0 = -sprite->data0; + if (sprite->data[1] > sprite->data[2]) { + sprite->data[0] = -sprite->data[0]; } - v1 = sprite->data2 - sprite->data1; - old = sprite->data0; - sprite->data0 = abs(v1 / sprite->data0); - sprite->data2 = (sprite->data4 - sprite->data3) / sprite->data0; - sprite->data1 = old; + v1 = sprite->data[2] - sprite->data[1]; + old = sprite->data[0]; + sprite->data[0] = abs(v1 / sprite->data[0]); + sprite->data[2] = (sprite->data[4] - sprite->data[3]) / sprite->data[0]; + sprite->data[1] = old; } void sub_8078364(struct Sprite *sprite) { - if (sprite->data0 > 0) { - sprite->data0--; - sprite->pos2.x += sprite->data1; - sprite->pos2.y += sprite->data2; + if (sprite->data[0] > 0) { + sprite->data[0]--; + sprite->pos2.x += sprite->data[1]; + sprite->pos2.y += sprite->data[2]; } else { - SetCallbackToStoredInData6(sprite); + SetCallbackToStoredInData(sprite); } } void sub_8078394(struct Sprite *sprite) { - if (sprite->data0 > 0) { - sprite->data0--; - sprite->data3 += sprite->data1; - sprite->data4 += sprite->data2; - sprite->pos2.x = sprite->data3 >> 8; - sprite->pos2.y = sprite->data4 >> 8; + if (sprite->data[0] > 0) { + sprite->data[0]--; + sprite->data[3] += sprite->data[1]; + sprite->data[4] += sprite->data[2]; + sprite->pos2.x = sprite->data[3] >> 8; + sprite->pos2.y = sprite->data[4] >> 8; } else { - SetCallbackToStoredInData6(sprite); + SetCallbackToStoredInData(sprite); } } void sub_80783D0(struct Sprite *sprite) { - if (sprite->data0 > 0) { - sprite->data0--; - sprite->data3 += sprite->data1; - sprite->data4 += sprite->data2; - sprite->pos2.x = sprite->data3 >> 8; - sprite->pos2.y = sprite->data4 >> 8; + if (sprite->data[0] > 0) { + sprite->data[0]--; + sprite->data[3] += sprite->data[1]; + sprite->data[4] += sprite->data[2]; + sprite->pos2.x = sprite->data[3] >> 8; + sprite->pos2.y = sprite->data[4] >> 8; } else { - SetCallbackToStoredInData6(sprite); + SetCallbackToStoredInData(sprite); } UpdateMonIconFrame(sprite); } void unref_sub_8078414(struct Sprite *sprite) { - sprite->data1 = sprite->pos1.x + sprite->pos2.x; - sprite->data3 = sprite->pos1.y + sprite->pos2.y; - sprite->data2 = sub_8077ABC(gBattleAnimBankTarget, 2); - sprite->data4 = sub_8077ABC(gBattleAnimBankTarget, 3); + sprite->data[1] = sprite->pos1.x + sprite->pos2.x; + sprite->data[3] = sprite->pos1.y + sprite->pos2.y; + sprite->data[2] = sub_8077ABC(gBattleAnimBankTarget, 2); + sprite->data[4] = sub_8077ABC(gBattleAnimBankTarget, 3); sprite->callback = sub_80782F8; } void sub_8078458(struct Sprite *sprite) { - if (sprite->data0 > 0) { - sprite->data0--; - gSprites[sprite->data3].pos2.x += sprite->data1; - gSprites[sprite->data3].pos2.y += sprite->data2; + if (sprite->data[0] > 0) { + sprite->data[0]--; + gSprites[sprite->data[3]].pos2.x += sprite->data[1]; + gSprites[sprite->data[3]].pos2.y += sprite->data[2]; } else { - SetCallbackToStoredInData6(sprite); + SetCallbackToStoredInData(sprite); } } void sub_80784A8(struct Sprite *sprite) { - if (sprite->data0 > 0) { - sprite->data0--; - sprite->data3 += sprite->data1; - sprite->data4 += sprite->data2; - gSprites[sprite->data5].pos2.x = sprite->data3 >> 8; - gSprites[sprite->data5].pos2.y = sprite->data4 >> 8; + if (sprite->data[0] > 0) { + sprite->data[0]--; + sprite->data[3] += sprite->data[1]; + sprite->data[4] += sprite->data[2]; + gSprites[sprite->data[5]].pos2.x = sprite->data[3] >> 8; + gSprites[sprite->data[5]].pos2.y = sprite->data[4] >> 8; } else { - SetCallbackToStoredInData6(sprite); + SetCallbackToStoredInData(sprite); } } void sub_8078504(struct Sprite *sprite) { - if (sprite->data0 > 0) { - sprite->data0--; - sprite->pos2.x = sprite->data2 >> 8; - sprite->data2 += sprite->data1; - sprite->pos2.y = sprite->data4 >> 8; - sprite->data4 += sprite->data3; - if (sprite->data0 % sprite->data5 == 0) { - if (sprite->data5) { + if (sprite->data[0] > 0) { + sprite->data[0]--; + sprite->pos2.x = sprite->data[2] >> 8; + sprite->data[2] += sprite->data[1]; + sprite->pos2.y = sprite->data[4] >> 8; + sprite->data[4] += sprite->data[3]; + if (sprite->data[0] % sprite->data[5] == 0) { + if (sprite->data[5]) { sprite->invisible ^= 1; } } } else { - SetCallbackToStoredInData6(sprite); + SetCallbackToStoredInData(sprite); } } @@ -630,27 +630,27 @@ void move_anim_8074EE0(struct Sprite *sprite) { } void unref_sub_8078588(struct Sprite *sprite) { - sprite->data1 = sprite->pos1.x + sprite->pos2.x; - sprite->data3 = sprite->pos1.y + sprite->pos2.y; - sprite->data2 = sub_8077ABC(gBattleAnimBankAttacker, 2); - sprite->data4 = sub_8077ABC(gBattleAnimBankAttacker, 3); + sprite->data[1] = sprite->pos1.x + sprite->pos2.x; + sprite->data[3] = sprite->pos1.y + sprite->pos2.y; + sprite->data[2] = sub_8077ABC(gBattleAnimBankAttacker, 2); + sprite->data[4] = sub_8077ABC(gBattleAnimBankAttacker, 3); sprite->callback = sub_80782F8; } void unref_sub_80785CC(struct Sprite *sprite) { - ResetPaletteStructByUid(sprite->data5); + ResetPaletteStructByUid(sprite->data[5]); move_anim_8074EE0(sprite); } void sub_80785E4(struct Sprite *sprite) { if (sprite->affineAnimEnded) { - SetCallbackToStoredInData6(sprite); + SetCallbackToStoredInData(sprite); } } void sub_8078600(struct Sprite *sprite) { if (sprite->animEnded) { - SetCallbackToStoredInData6(sprite); + SetCallbackToStoredInData(sprite); } } @@ -688,19 +688,19 @@ void sub_807867C(struct Sprite *sprite, s16 a2) { } void sub_80786EC(struct Sprite *sprite) { - sprite->data1 = sprite->pos1.x; - sprite->data3 = sprite->pos1.y; + sprite->data[1] = sprite->pos1.x; + sprite->data[3] = sprite->pos1.y; obj_translate_based_on_private_1_2_3_4(sprite); - sprite->data6 = 0x8000 / sprite->data0; - sprite->data7 = 0; + sprite->data[6] = 0x8000 / sprite->data[0]; + sprite->data[7] = 0; } bool8 sub_8078718(struct Sprite *sprite) { if (sub_8078B5C(sprite)) { return TRUE; } - sprite->data7 += sprite->data6; - sprite->pos2.y += Sin((u8)(sprite->data7 >> 8), sprite->data5); + sprite->data[7] += sprite->data[6]; + sprite->pos2.y += Sin((u8)(sprite->data[7] >> 8), sprite->data[5]); return FALSE; } @@ -829,31 +829,31 @@ void sub_80789D4(bool8 a1) { } void sub_8078A34(struct Sprite *sprite) { - sprite->data1 = sprite->pos1.x; - sprite->data3 = sprite->pos1.y; + sprite->data[1] = sprite->pos1.x; + sprite->data[3] = sprite->pos1.y; sub_8078A5C(sprite); sprite->callback = sub_80783D0; sprite->callback(sprite); } void sub_8078A5C(struct Sprite *sprite) { - s16 x = (sprite->data2 - sprite->data1) << 8; - s16 y = (sprite->data4 - sprite->data3) << 8; - sprite->data1 = x / sprite->data0; - sprite->data2 = y / sprite->data0; - sprite->data4 = 0; - sprite->data3 = 0; + s16 x = (sprite->data[2] - sprite->data[1]) << 8; + s16 y = (sprite->data[4] - sprite->data[3]) << 8; + sprite->data[1] = x / sprite->data[0]; + sprite->data[2] = y / sprite->data[0]; + sprite->data[4] = 0; + sprite->data[3] = 0; } void obj_translate_based_on_private_1_2_3_4(struct Sprite *sprite) { - int x = sprite->data2 - sprite->data1; - int y = sprite->data4 - sprite->data3; + int x = sprite->data[2] - sprite->data[1]; + int y = sprite->data[4] - sprite->data[3]; bool8 r8 = x < 0; bool8 r9 = y < 0; u16 x2 = abs(x) << 8; u16 y2 = abs(y) << 8; - x2 = x2 / sprite->data0; - y2 = y2 / sprite->data0; + x2 = x2 / sprite->data[0]; + y2 = y2 / sprite->data[0]; if (r8) { x2 |= 1; } else { @@ -864,15 +864,15 @@ void obj_translate_based_on_private_1_2_3_4(struct Sprite *sprite) { } else { y2 &= ~1; } - sprite->data1 = x2; - sprite->data2 = y2; - sprite->data4 = 0; - sprite->data3 = 0; + sprite->data[1] = x2; + sprite->data[2] = y2; + sprite->data[4] = 0; + sprite->data[3] = 0; } void sub_8078B34(struct Sprite *sprite) { - sprite->data1 = sprite->pos1.x; - sprite->data3 = sprite->pos1.y; + sprite->data[1] = sprite->pos1.x; + sprite->data[3] = sprite->pos1.y; obj_translate_based_on_private_1_2_3_4(sprite); sprite->callback = sub_8078BB8; sprite->callback(sprite); @@ -880,13 +880,13 @@ void sub_8078B34(struct Sprite *sprite) { bool8 sub_8078B5C(struct Sprite *sprite) { u16 v1, v2, x, y; - if (!sprite->data0) { + if (!sprite->data[0]) { return TRUE; } - v1 = sprite->data1; - v2 = sprite->data2; - x = sprite->data3; - y = sprite->data4; + v1 = sprite->data[1]; + v2 = sprite->data[2]; + x = sprite->data[3]; + y = sprite->data[4]; x += v1; y += v2; if (v1 & 1) { @@ -899,41 +899,41 @@ bool8 sub_8078B5C(struct Sprite *sprite) { } else { sprite->pos2.y = y >> 8; } - sprite->data3 = x; - sprite->data4 = y; - sprite->data0--; + sprite->data[3] = x; + sprite->data[4] = y; + sprite->data[0]--; return FALSE; } void sub_8078BB8(struct Sprite *sprite) { if (sub_8078B5C(sprite)) { - SetCallbackToStoredInData6(sprite); + SetCallbackToStoredInData(sprite); } } void sub_8078BD4(struct Sprite *sprite) { - int v1 = abs(sprite->data2 - sprite->data1) << 8; - sprite->data0 = v1 / sprite->data0; + int v1 = abs(sprite->data[2] - sprite->data[1]) << 8; + sprite->data[0] = v1 / sprite->data[0]; obj_translate_based_on_private_1_2_3_4(sprite); } void sub_8078C00(struct Sprite *sprite) { - sprite->data1 = sprite->pos1.x; - sprite->data3 = sprite->pos1.y; + sprite->data[1] = sprite->pos1.x; + sprite->data[3] = sprite->pos1.y; sub_8078BD4(sprite); sprite->callback = sub_8078BB8; sprite->callback(sprite); } void sub_8078C28(struct Sprite *sprite) { - int x = sprite->data2 - sprite->data1; - int y = sprite->data4 - sprite->data3; + int x = sprite->data[2] - sprite->data[1]; + int y = sprite->data[4] - sprite->data[3]; bool8 x_sign = x < 0; bool8 y_sign = y < 0; u16 x2 = abs(x) << 4; u16 y2 = abs(y) << 4; - x2 /= sprite->data0; - y2 /= sprite->data0; + x2 /= sprite->data[0]; + y2 /= sprite->data[0]; if (x_sign) { x2 |= 1; } else { @@ -944,15 +944,15 @@ void sub_8078C28(struct Sprite *sprite) { } else { y2 &= ~1; } - sprite->data1 = x2; - sprite->data2 = y2; - sprite->data4 = 0; - sprite->data3 = 0; + sprite->data[1] = x2; + sprite->data[2] = y2; + sprite->data[4] = 0; + sprite->data[3] = 0; } void sub_8078CC0(struct Sprite *sprite) { - sprite->data1 = sprite->pos1.x; - sprite->data3 = sprite->pos1.y; + sprite->data[1] = sprite->pos1.x; + sprite->data[3] = sprite->pos1.y; sub_8078C28(sprite); sprite->callback = sub_8078D44; sprite->callback(sprite); @@ -960,13 +960,13 @@ void sub_8078CC0(struct Sprite *sprite) { bool8 sub_8078CE8(struct Sprite *sprite) { u16 v1, v2, x, y; - if (!sprite->data0) { + if (!sprite->data[0]) { return TRUE; } - v1 = sprite->data1; - v2 = sprite->data2; - x = sprite->data3; - y = sprite->data4; + v1 = sprite->data[1]; + v2 = sprite->data[2]; + x = sprite->data[3]; + y = sprite->data[4]; x += v1; y += v2; if (v1 & 1) { @@ -979,27 +979,27 @@ bool8 sub_8078CE8(struct Sprite *sprite) { } else { sprite->pos2.y = y >> 4; } - sprite->data3 = x; - sprite->data4 = y; - sprite->data0--; + sprite->data[3] = x; + sprite->data[4] = y; + sprite->data[0]--; return FALSE; } void sub_8078D44(struct Sprite *sprite) { if (sub_8078CE8(sprite)) { - SetCallbackToStoredInData6(sprite); + SetCallbackToStoredInData(sprite); } } void sub_8078D60(struct Sprite *sprite) { - int v1 = abs(sprite->data2 - sprite->data1) << 4; - sprite->data0 = v1 / sprite->data0; + int v1 = abs(sprite->data[2] - sprite->data[1]) << 4; + sprite->data[0] = v1 / sprite->data[0]; sub_8078C28(sprite); } void sub_8078D8C(struct Sprite *sprite) { - sprite->data1 = sprite->pos1.x; - sprite->data3 = sprite->pos1.y; + sprite->data[1] = sprite->pos1.x; + sprite->data[3] = sprite->pos1.y; sub_8078D60(sprite); sprite->callback = sub_8078D44; sprite->callback(sprite); @@ -1025,7 +1025,7 @@ void obj_id_set_rotscale(u8 sprite, s16 xScale, s16 yScale, u16 rotation) { bool8 sub_8078E38() { if (NotInBattle()) { - if (gSprites[GetAnimBankSpriteId(0)].data2 == 0xc9 /* XXX SPECIES_UNOWN? */) { + if (gSprites[GetAnimBankSpriteId(0)].data[2] == 0xc9 /* XXX SPECIES_UNOWN? */) { return FALSE; } return TRUE; @@ -1034,7 +1034,7 @@ bool8 sub_8078E38() { } void sub_8078E70(u8 sprite, u8 a2) { - u8 r7 = gSprites[sprite].data0; + u8 r7 = gSprites[sprite].data[0]; if (NotInBattle() || IsAnimBankSpriteVisible(r7)) { gSprites[sprite].invisible = FALSE; } @@ -1219,7 +1219,7 @@ u8 unref_sub_80793B0(u8 a1) { void sub_80793C4(struct Sprite *sprite) { bool8 var; - if (!sprite->data0) { + if (!sprite->data[0]) { if (!gBattleAnimArgs[3]) { var = TRUE; } else { @@ -1230,7 +1230,7 @@ void sub_80793C4(struct Sprite *sprite) { } else { sub_8078764(sprite, var); } - sprite->data0++; + sprite->data[0]++; } else if (sprite->animEnded || sprite->affineAnimEnded) { move_anim_8074EE0(sprite); @@ -1254,11 +1254,11 @@ void sub_807941C(struct Sprite *sprite) { if (GetBankSide(gBattleAnimBankAttacker)) { gBattleAnimArgs[2] = -gBattleAnimArgs[2]; } - sprite->data0 = gBattleAnimArgs[4]; - sprite->data2 = sub_8077ABC(gBattleAnimBankTarget, 2) + gBattleAnimArgs[2]; - sprite->data4 = sub_8077ABC(gBattleAnimBankTarget, v2) + gBattleAnimArgs[3]; + sprite->data[0] = gBattleAnimArgs[4]; + sprite->data[2] = sub_8077ABC(gBattleAnimBankTarget, 2) + gBattleAnimArgs[2]; + sprite->data[4] = sub_8077ABC(gBattleAnimBankTarget, v2) + gBattleAnimArgs[3]; sprite->callback = sub_8078B34; - StoreSpriteCallbackInData6(sprite, move_anim_8072740); + StoreSpriteCallbackInData(sprite, move_anim_8072740); } void sub_80794A8(struct Sprite *sprite) { @@ -1266,10 +1266,10 @@ void sub_80794A8(struct Sprite *sprite) { if (GetBankSide(gBattleAnimBankAttacker)) { gBattleAnimArgs[2] = -gBattleAnimArgs[2]; } - sprite->data0 = gBattleAnimArgs[4]; - sprite->data2 = sub_8077ABC(gBattleAnimBankTarget, 2) + gBattleAnimArgs[2]; - sprite->data4 = sub_8077ABC(gBattleAnimBankTarget, 3) + gBattleAnimArgs[3]; - sprite->data5 = gBattleAnimArgs[5]; + sprite->data[0] = gBattleAnimArgs[4]; + sprite->data[2] = sub_8077ABC(gBattleAnimBankTarget, 2) + gBattleAnimArgs[2]; + sprite->data[4] = sub_8077ABC(gBattleAnimBankTarget, 3) + gBattleAnimArgs[3]; + sprite->data[5] = gBattleAnimArgs[5]; sub_80786EC(sprite); sprite->callback = sub_8079518; } @@ -1300,11 +1300,11 @@ void sub_8079534(struct Sprite *sprite) { gBattleAnimArgs[2] = -gBattleAnimArgs[2]; } sub_8078764(sprite, r4); - sprite->data0 = gBattleAnimArgs[4]; - sprite->data2 = sub_8077ABC(slot, 2) + gBattleAnimArgs[2]; - sprite->data4 = sub_8077ABC(slot, r7) + gBattleAnimArgs[3]; + sprite->data[0] = gBattleAnimArgs[4]; + sprite->data[2] = sub_8077ABC(slot, 2) + gBattleAnimArgs[2]; + sprite->data[4] = sub_8077ABC(slot, r7) + gBattleAnimArgs[3]; sprite->callback = sub_8078B34; - StoreSpriteCallbackInData6(sprite, move_anim_8072740); + StoreSpriteCallbackInData(sprite, move_anim_8072740); } s16 duplicate_obj_of_side_rel2move_in_transparent_mode(u8 a1) { @@ -1532,7 +1532,7 @@ void sub_8079AB8(u8 sprite, u8 sprite2) { u16 sub_8079B10(u8 sprite) { struct TransformStatus *transform; - u8 slot = gSprites[sprite].data0; + u8 slot = gSprites[sprite].data[0]; u16 species; u16 i; for (i = 0; i < (sizeof(gBattleMonSprites) / sizeof(u8)); i++) { @@ -1899,11 +1899,11 @@ void sub_807A544(struct Sprite *sprite) { sprite->pos1.x += gBattleAnimArgs[0]; } sprite->pos1.y += gBattleAnimArgs[1]; - sprite->data0 = gBattleAnimArgs[2]; - sprite->data1 = gBattleAnimArgs[3]; - sprite->data3 = gBattleAnimArgs[4]; - sprite->data5 = gBattleAnimArgs[5]; - StoreSpriteCallbackInData6(sprite, move_anim_8074EE0); + sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[1] = gBattleAnimArgs[3]; + sprite->data[3] = gBattleAnimArgs[4]; + sprite->data[5] = gBattleAnimArgs[5]; + StoreSpriteCallbackInData(sprite, move_anim_8074EE0); sprite->callback = sub_8078504; } @@ -1915,12 +1915,12 @@ void sub_807A5C4(struct Sprite *sprite) { sprite->pos1.x += gBattleAnimArgs[0]; } sprite->pos1.y += gBattleAnimArgs[1]; - sprite->data0 = gBattleAnimArgs[2]; - sprite->data1 = gBattleAnimArgs[3]; - sprite->data3 = gBattleAnimArgs[4]; - sprite->data5 = gBattleAnimArgs[5]; + sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[1] = gBattleAnimArgs[3]; + sprite->data[3] = gBattleAnimArgs[4]; + sprite->data[5] = gBattleAnimArgs[5]; StartSpriteAnim(sprite, gBattleAnimArgs[6]); - StoreSpriteCallbackInData6(sprite, move_anim_8074EE0); + StoreSpriteCallbackInData(sprite, move_anim_8074EE0); sprite->callback = sub_8078504; } @@ -1933,7 +1933,7 @@ void sub_807A63C(struct Sprite *sprite) { } sprite->pos1.y += gBattleAnimArgs[1]; sprite->callback = sub_8078600; - StoreSpriteCallbackInData6(sprite, move_anim_8072740); + StoreSpriteCallbackInData(sprite, move_anim_8072740); } void sub_807A69C(u8 taskId) { @@ -1994,9 +1994,9 @@ void sub_807A850(struct Task *task, u8 taskId) { if (sprite >= 0) { gSprites[sprite].oam.priority = task->data[6]; gSprites[sprite].oam.paletteNum = task->data[4]; - gSprites[sprite].data0 = 8; - gSprites[sprite].data1 = taskId; - gSprites[sprite].data2 = sprite; + gSprites[sprite].data[0] = 8; + gSprites[sprite].data[1] = taskId; + gSprites[sprite].data[2] = sprite; gSprites[sprite].pos2.x = gSprites[task->data[0]].pos2.x; gSprites[sprite].callback = sub_807A8D4; task->data[5]++; @@ -2004,8 +2004,8 @@ void sub_807A850(struct Task *task, u8 taskId) { } void sub_807A8D4(struct Sprite *sprite) { - if (--sprite->data0 == 0) { - gTasks[sprite->data1].data[5]--; + if (--sprite->data[0] == 0) { + gTasks[sprite->data[1]].data[5]--; obj_delete_but_dont_free_vram(sprite); } } @@ -2014,21 +2014,21 @@ void sub_807A908(struct Sprite *sprite) { sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 2); sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 3); if (!GetBankSide(gBattleAnimBankAttacker)) { - sprite->data0 = 5; + sprite->data[0] = 5; } else { - sprite->data0 = -10; + sprite->data[0] = -10; } - sprite->data1 = -40; + sprite->data[1] = -40; sprite->callback = sub_807A960; } void sub_807A960(struct Sprite *sprite) { - sprite->data2 += sprite->data0; - sprite->data3 += sprite->data1; - sprite->pos2.x = sprite->data2 / 10; - sprite->pos2.y = sprite->data3 / 10; - if (sprite->data1 < -20) { - sprite->data1++; + sprite->data[2] += sprite->data[0]; + sprite->data[3] += sprite->data[1]; + sprite->pos2.x = sprite->data[2] / 10; + sprite->pos2.y = sprite->data[3] / 10; + if (sprite->data[1] < -20) { + sprite->data[1]++; } if ((sprite->pos1.y + sprite->pos2.y) < -32) { move_anim_8072740(sprite); @@ -2037,9 +2037,9 @@ void sub_807A960(struct Sprite *sprite) { void sub_807A9BC(struct Sprite *sprite) { int x; - sprite->data0 = gBattleAnimArgs[2]; - sprite->data2 = sprite->pos1.x + gBattleAnimArgs[4]; - sprite->data4 = sprite->pos1.y + gBattleAnimArgs[5]; + sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[2] = sprite->pos1.x + gBattleAnimArgs[4]; + sprite->data[4] = sprite->pos1.y + gBattleAnimArgs[5]; if (!GetBankSide(gBattleAnimBankTarget)) { x = (u16)gBattleAnimArgs[4] + 30; sprite->pos1.x += x; @@ -2050,5 +2050,5 @@ void sub_807A9BC(struct Sprite *sprite) { sprite->pos1.y = gBattleAnimArgs[5] - 80; } sprite->callback = sub_8078B34; - StoreSpriteCallbackInData6(sprite, move_anim_8072740); + StoreSpriteCallbackInData(sprite, move_anim_8072740); } diff --git a/src/scene/berry_blender.c b/src/scene/berry_blender.c index 398f62833..42c79bc99 100644 --- a/src/scene/berry_blender.c +++ b/src/scene/berry_blender.c @@ -1019,34 +1019,34 @@ static void sub_804E56C(void) void sub_804E738(struct Sprite* sprite) { - sprite->data1 += sprite->data6; - sprite->data2 -= sprite->data4; - sprite->data2 += sprite->data7; - sprite->data0 += sprite->data7; - sprite->data4--; + sprite->data[1] += sprite->data[6]; + sprite->data[2] -= sprite->data[4]; + sprite->data[2] += sprite->data[7]; + sprite->data[0] += sprite->data[7]; + sprite->data[4]--; - if (sprite->data0 < sprite->data2) + if (sprite->data[0] < sprite->data[2]) { - sprite->data3 = sprite->data4 = sprite->data3 - 1; - if (++sprite->data5 > 3) + sprite->data[3] = sprite->data[4] = sprite->data[3] - 1; + if (++sprite->data[5] > 3) DestroySprite(sprite); else PlaySE(SE_TB_KARA); } - sprite->pos1.x = sprite->data1; - sprite->pos1.y = sprite->data2; + sprite->pos1.x = sprite->data[1]; + sprite->pos1.y = sprite->data[2]; } void sub_804E794(struct Sprite* sprite, s16 a2, s16 a3, s16 a4, s16 a5, s16 a6) { - sprite->data0 = a3; - sprite->data1 = a2; - sprite->data2 = a3; - sprite->data3 = a4; - sprite->data4 = 10; - sprite->data5 = 0; - sprite->data6 = a5; - sprite->data7 = a6; + sprite->data[0] = a3; + sprite->data[1] = a2; + sprite->data[2] = a3; + sprite->data[3] = a4; + sprite->data[4] = 10; + sprite->data[5] = 0; + sprite->data[6] = a5; + sprite->data[7] = a6; sprite->callback = sub_804E738; } @@ -3012,10 +3012,10 @@ static void sub_80514F0(void) void sub_8051524(struct Sprite* sprite) { - sprite->data2 += sprite->data0; - sprite->data3 += sprite->data1; - sprite->pos2.x = sprite->data2 / 8; - sprite->pos2.y = sprite->data3 / 8; + sprite->data[2] += sprite->data[0]; + sprite->data[3] += sprite->data[1]; + sprite->pos2.x = sprite->data[2] / 8; + sprite->pos2.y = sprite->data[3] / 8; if (sprite->animEnded) DestroySprite(sprite); } @@ -3037,8 +3037,8 @@ static void sub_805156C(void) y = gSineTable[(rand & 0xFF)] / 4; spriteID = CreateSprite(&sSpriteTemplate_82164FC, x + 120, y + 80, 1); - gSprites[spriteID].data0 = 16 - (Random() % 32); - gSprites[spriteID].data1 = 16 - (Random() % 32); + gSprites[spriteID].data[0] = 16 - (Random() % 32); + gSprites[spriteID].data[1] = 16 - (Random() % 32); gSprites[spriteID].callback = sub_8051524; } @@ -3046,16 +3046,16 @@ static void sub_805156C(void) static void sub_8051650(struct Sprite* sprite) { - sprite->data0++; - sprite->pos2.y = -(sprite->data0 / 3); + sprite->data[0]++; + sprite->pos2.y = -(sprite->data[0] / 3); if (sprite->animEnded) DestroySprite(sprite); } void sub_8051684(struct Sprite* sprite) { - sprite->data0++; - sprite->pos2.y = -(sprite->data0 * 2); + sprite->data[0]++; + sprite->pos2.y = -(sprite->data[0] * 2); if (sprite->pos2.y < -12) sprite->pos2.y = -12; if (sprite->animEnded) @@ -3110,74 +3110,74 @@ void unref_sub_80516F8(u8 taskID) static void sub_805181C(struct Sprite* sprite) { - switch (sprite->data0) + switch (sprite->data[0]) { case 0: - sprite->data1 += 8; - if (sprite->data1 > 88) + sprite->data[1] += 8; + if (sprite->data[1] > 88) { - sprite->data1 = 88; - sprite->data0++; + sprite->data[1] = 88; + sprite->data[0]++; PlaySE(SE_KON); } break; case 1: - sprite->data2 += 1; - if (sprite->data2 > 20) + sprite->data[2] += 1; + if (sprite->data[2] > 20) { - sprite->data0++; - sprite->data2 = 0; + sprite->data[0]++; + sprite->data[2] = 0; } break; case 2: - sprite->data1 += 4; - if (sprite->data1 > 176) + sprite->data[1] += 4; + if (sprite->data[1] > 176) { - if (++sprite->data3 == 3) + if (++sprite->data[3] == 3) { DestroySprite(sprite); CreateSprite(&sSpriteTemplate_821657C, 120, -20, 2); } else { - sprite->data0 = 0; - sprite->data1 = -16; - StartSpriteAnim(sprite, sprite->data3); + sprite->data[0] = 0; + sprite->data[1] = -16; + StartSpriteAnim(sprite, sprite->data[3]); } } break; } - sprite->pos2.y = sprite->data1; + sprite->pos2.y = sprite->data[1]; } static void sub_80518CC(struct Sprite* sprite) { - switch (sprite->data0) + switch (sprite->data[0]) { case 0: - sprite->data1 += 8; - if (sprite->data1 > 92) + sprite->data[1] += 8; + if (sprite->data[1] > 92) { - sprite->data1 = 92; - sprite->data0++; + sprite->data[1] = 92; + sprite->data[0]++; PlaySE(SE_PIN); } break; case 1: - sprite->data2 += 1; - if (sprite->data2 > 20) - sprite->data0++; + sprite->data[2] += 1; + if (sprite->data[2] > 20) + sprite->data[0]++; break; case 2: - sprite->data1 += 4; - if (sprite->data1 > 176) + sprite->data[1] += 4; + if (sprite->data[1] > 176) { gBerryBlenderData->field_0++; DestroySprite(sprite); } break; } - sprite->pos2.y = sprite->data1; + sprite->pos2.y = sprite->data[1]; } static void sub_805194C(u16 a0, u16 a1) diff --git a/src/scene/credits.c b/src/scene/credits.c index 077fc5e0d..ccd4cebc6 100644 --- a/src/scene/credits.c +++ b/src/scene/credits.c @@ -520,7 +520,7 @@ static void task_a_8143B38(u8 taskIdA) static void task_a_8143B68(u8 taskIdA) { - u16 data11; + u16 data1; if (gTasks[taskIdA].data[TDA_4]) { @@ -535,18 +535,18 @@ static void task_a_8143B68(u8 taskIdA) } gUnknown_02039320 = 0; - data11 = gTasks[taskIdA].data[TDA_11]; + data1 = gTasks[taskIdA].data[TDA_11]; if (gTasks[taskIdA].data[TDA_11] == 1) { - gTasks[taskIdA].data[TDA_13] = data11; + gTasks[taskIdA].data[TDA_13] = data1; gTasks[taskIdA].data[TDA_11] = 0; BeginNormalPaletteFade(-1, 0, 0, 16, 0); gTasks[taskIdA].func = task_a_8143BFC; } else if (gTasks[taskIdA].data[TDA_11] == 2) { - gTasks[taskIdA].data[TDA_13] = data11; + gTasks[taskIdA].data[TDA_13] = data1; gTasks[taskIdA].data[TDA_11] = 0; BeginNormalPaletteFade(-1, 0, 0, 16, 0); gTasks[taskIdA].func = task_a_8143CC0; @@ -956,12 +956,12 @@ static void task_d_8144514(u8 taskIdD) if (r6->unk8C < r6->unk8E - 1) { r6->unk8C++; - gSprites[r2].data3 = 50; + gSprites[r2].data[3] = 50; } else { r6->unk8C = 0; - gSprites[r2].data3 = 512; + gSprites[r2].data[3] = 512; } r6->unk88++; if (r6->unk8A == 2) @@ -996,7 +996,7 @@ void task_c_8144664(u8 taskIdC) } else { - gSprites[gTasks[taskIdC].data[TDC_2]].data0 = 2; + gSprites[gTasks[taskIdC].data[TDC_2]].data[0] = 2; gTasks[taskIdC].data[TDC_5] = 0; gTasks[taskIdC].data[TDC_0]++; } @@ -1013,8 +1013,8 @@ void task_c_8144664(u8 taskIdC) } break; case 3: - gSprites[gTasks[taskIdC].data[TDC_2]].data0 = 3; - gSprites[gTasks[taskIdC].data[TDC_3]].data0 = 1; + gSprites[gTasks[taskIdC].data[TDC_2]].data[0] = 3; + gSprites[gTasks[taskIdC].data[TDC_3]].data[0] = 1; gTasks[taskIdC].data[TDC_4] = 120; gTasks[taskIdC].data[TDC_0]++; break; @@ -1037,7 +1037,7 @@ void task_c_8144664(u8 taskIdC) } else { - gSprites[gTasks[taskIdC].data[TDC_2]].data0 = 1; + gSprites[gTasks[taskIdC].data[TDC_2]].data[0] = 1; gTasks[taskIdC].data[TDC_0]++; } break; @@ -1045,16 +1045,16 @@ void task_c_8144664(u8 taskIdC) gTasks[taskIdC].data[TDC_0] = 50; break; case 10: - gSprites[gTasks[taskIdC].data[TDC_3]].data0 = 2; + gSprites[gTasks[taskIdC].data[TDC_3]].data[0] = 2; gTasks[taskIdC].data[TDC_0] = 50; break; case 20: - gSprites[gTasks[taskIdC].data[TDC_2]].data0 = 4; + gSprites[gTasks[taskIdC].data[TDC_2]].data[0] = 4; gTasks[taskIdC].data[TDC_0] = 50; break; case 30: - gSprites[gTasks[taskIdC].data[TDC_2]].data0 = 5; - gSprites[gTasks[taskIdC].data[TDC_3]].data0 = 3; + gSprites[gTasks[taskIdC].data[TDC_2]].data[0] = 5; + gSprites[gTasks[taskIdC].data[TDC_3]].data[0] = 3; gTasks[taskIdC].data[TDC_0] = 50; break; case 50: @@ -1132,8 +1132,8 @@ static void sub_8144A68(u8 data, u8 taskIdA) gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].pos1.x = 272; gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].pos1.y = 46; gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].pos1.y = 46; - gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].data0 = 0; - gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].data0 = 0; + gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].data[0] = 0; + gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].data[0] = 0; gTasks[taskIdA].data[TDA_0] = sub_8148EC0(0, 0x2000, 0x20, 8); break; case 1: @@ -1143,8 +1143,8 @@ static void sub_8144A68(u8 data, u8 taskIdA) gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].pos1.x = 272; gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].pos1.y = 46; gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].pos1.y = 46; - gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].data0 = 0; - gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].data0 = 0; + gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].data[0] = 0; + gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].data[0] = 0; gTasks[taskIdA].data[TDA_0] = sub_8148EC0(0, 0x2000, 0x20, 8); break; case 2: @@ -1154,8 +1154,8 @@ static void sub_8144A68(u8 data, u8 taskIdA) gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].pos1.x = 272; gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].pos1.y = 46; gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].pos1.y = 46; - gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].data0 = 0; - gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].data0 = 0; + gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].data[0] = 0; + gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].data[0] = 0; gTasks[taskIdA].data[TDA_0] = sub_8148EC0(1, 0x2000, 0x200, 8); break; case 3: @@ -1165,8 +1165,8 @@ static void sub_8144A68(u8 data, u8 taskIdA) gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].pos1.x = -32; gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].pos1.y = 46; gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].pos1.y = 46; - gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].data0 = 0; - gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].data0 = 0; + gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].data[0] = 0; + gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].data[0] = 0; gTasks[taskIdA].data[TDA_0] = sub_8148EC0(1, 0x2000, 0x200, 8); break; case 4: @@ -1176,8 +1176,8 @@ static void sub_8144A68(u8 data, u8 taskIdA) gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].pos1.x = 152; gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].pos1.y = 46; gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].pos1.y = 46; - gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].data0 = 0; - gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].data0 = 0; + gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].data[0] = 0; + gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].data[0] = 0; gTasks[taskIdA].data[TDA_0] = sub_8148EC0(2, 0x2000, 0x200, 8); break; } @@ -1384,7 +1384,7 @@ static void spritecb_player_8145378(struct Sprite *sprite) return; } - switch (sprite->data0) + switch (sprite->data[0]) { case 0: StartSpriteAnimIfDifferent(sprite, 0); @@ -1421,7 +1421,7 @@ static void spritecb_rival_8145420(struct Sprite *sprite) return; } - switch (sprite->data0) + switch (sprite->data[0]) { case 0: sprite->pos2.y = 0; @@ -1437,9 +1437,9 @@ static void spritecb_rival_8145420(struct Sprite *sprite) sprite->pos2.y = -gUnknown_0203935A; break; case 2: - sprite->data7 += 1; + sprite->data[7] += 1; StartSpriteAnimIfDifferent(sprite, 0); - if ((sprite->data7 & 3) == 0) + if ((sprite->data[7] & 3) == 0) sprite->pos1.x += 1; break; case 3: @@ -1458,74 +1458,74 @@ void spritecb_81454E0(struct Sprite *sprite) return; } - sprite->data7 += 1; - switch (sprite->data0) + sprite->data[7] += 1; + switch (sprite->data[0]) { case 0: default: sprite->oam.affineMode = 1; - sprite->oam.matrixNum = sprite->data1; - sprite->data2 = 16; - SetOamMatrix(sprite->data1, 0x10000 / sprite->data2, 0, 0, 0x10000 / sprite->data2); + sprite->oam.matrixNum = sprite->data[1]; + sprite->data[2] = 16; + SetOamMatrix(sprite->data[1], 0x10000 / sprite->data[2], 0, 0, 0x10000 / sprite->data[2]); sprite->invisible = FALSE; - sprite->data0 = 1; + sprite->data[0] = 1; break; case 1: - if (sprite->data2 < 256) + if (sprite->data[2] < 256) { - sprite->data2 += 8; - SetOamMatrix(sprite->data1, 0x10000 / sprite->data2, 0, 0, 0x10000 / sprite->data2); + sprite->data[2] += 8; + SetOamMatrix(sprite->data[1], 0x10000 / sprite->data[2], 0, 0, 0x10000 / sprite->data[2]); } else { - sprite->data0 += 1; + sprite->data[0] += 1; } - switch (sprite->data1) + switch (sprite->data[1]) { case 1: - if ((sprite->data7 & 3) == 0) + if ((sprite->data[7] & 3) == 0) sprite->pos1.y += 1; sprite->pos1.x -= 2; break; case 2: break; case 3: - if ((sprite->data7 & 3) == 0) + if ((sprite->data[7] & 3) == 0) sprite->pos1.y += 1; sprite->pos1.x += 2; break; } break; case 2: - if (sprite->data3 != 0) + if (sprite->data[3] != 0) { - sprite->data3 -= 1; + sprite->data[3] -= 1; } else { REG_BLDCNT = 0xF40; REG_BLDALPHA = 0x10; sprite->oam.objMode = 1; - sprite->data3 = 16; - sprite->data0 += 1; + sprite->data[3] = 16; + sprite->data[0] += 1; } break; case 3: - if (sprite->data3 != 0) + if (sprite->data[3] != 0) { int data3; vu16 *reg; - sprite->data3 -= 1; + sprite->data[3] -= 1; reg = ®_BLDALPHA; - data3 = 16 - sprite->data3; - *reg = (data3 << 8) + sprite->data3; + data3 = 16 - sprite->data[3]; + *reg = (data3 << 8) + sprite->data[3]; } else { sprite->invisible = TRUE; - sprite->data0 = 10; + sprite->data[0] = 10; } break; case 10: @@ -1575,12 +1575,12 @@ static u8 sub_81456B4(u16 species, u16 x, u16 y, u16 position) spriteId = CreateSprite(&gUnknown_02024E8C, x, y, 0); gSprites[spriteId].oam.paletteNum = position; gSprites[spriteId].oam.priority = 1; - gSprites[spriteId].data1 = position + 1; + gSprites[spriteId].data[1] = position + 1; gSprites[spriteId].invisible = TRUE; gSprites[spriteId].callback = spritecb_81454E0; spriteId2 = CreateSprite(&gSpriteTemplate_840CAEC, gSprites[spriteId].pos1.x, gSprites[spriteId].pos1.y, 1); - gSprites[spriteId2].data0 = spriteId; + gSprites[spriteId2].data[0] = spriteId; StartSpriteAnimIfDifferent(&gSprites[spriteId2], position); @@ -1589,18 +1589,18 @@ static u8 sub_81456B4(u16 species, u16 x, u16 y, u16 position) void spritecb_814580C(struct Sprite *sprite) { - if (gSprites[sprite->data0].data0 == 10 || gUnknown_0203935C) + if (gSprites[sprite->data[0]].data[0] == 10 || gUnknown_0203935C) { DestroySprite(sprite); return; } - sprite->invisible = gSprites[sprite->data0].invisible; - sprite->oam.objMode = gSprites[sprite->data0].oam.objMode; - sprite->oam.affineMode = gSprites[sprite->data0].oam.affineMode; - sprite->oam.matrixNum = gSprites[sprite->data0].oam.matrixNum; - sprite->pos1.x = gSprites[sprite->data0].pos1.x; - sprite->pos1.y = gSprites[sprite->data0].pos1.y; + sprite->invisible = gSprites[sprite->data[0]].invisible; + sprite->oam.objMode = gSprites[sprite->data[0]].oam.objMode; + sprite->oam.affineMode = gSprites[sprite->data[0]].oam.affineMode; + sprite->oam.matrixNum = gSprites[sprite->data[0]].oam.matrixNum; + sprite->pos1.x = gSprites[sprite->data[0]].pos1.x; + sprite->pos1.y = gSprites[sprite->data[0]].pos1.y; } static void sub_81458DC(void) diff --git a/src/scene/egg_hatch.c b/src/scene/egg_hatch.c index 6ea26e546..49cced46a 100644 --- a/src/scene/egg_hatch.c +++ b/src/scene/egg_hatch.c @@ -669,16 +669,16 @@ static void CB2_EggHatch_1(void) static void SpriteCB_Egg_0(struct Sprite* sprite) { - if (++sprite->data0 > 20) + if (++sprite->data[0] > 20) { sprite->callback = SpriteCB_Egg_1; - sprite->data0 = 0; + sprite->data[0] = 0; } else { - sprite->data1 = (sprite->data1 + 20) & 0xFF; - sprite->pos2.x = Sin(sprite->data1, 1); - if (sprite->data0 == 15) + sprite->data[1] = (sprite->data[1] + 20) & 0xFF; + sprite->pos2.x = Sin(sprite->data[1], 1); + if (sprite->data[0] == 15) { PlaySE(SE_BOWA); StartSpriteAnim(sprite, 1); @@ -689,19 +689,19 @@ static void SpriteCB_Egg_0(struct Sprite* sprite) static void SpriteCB_Egg_1(struct Sprite* sprite) { - if (++sprite->data2 > 30) + if (++sprite->data[2] > 30) { - if (++sprite->data0 > 20) + if (++sprite->data[0] > 20) { sprite->callback = SpriteCB_Egg_2; - sprite->data0 = 0; - sprite->data2 = 0; + sprite->data[0] = 0; + sprite->data[2] = 0; } else { - sprite->data1 = (sprite->data1 + 20) & 0xFF; - sprite->pos2.x = Sin(sprite->data1, 2); - if (sprite->data0 == 15) + sprite->data[1] = (sprite->data[1] + 20) & 0xFF; + sprite->pos2.x = Sin(sprite->data[1], 2); + if (sprite->data[0] == 15) { PlaySE(SE_BOWA); StartSpriteAnim(sprite, 2); @@ -712,30 +712,30 @@ static void SpriteCB_Egg_1(struct Sprite* sprite) static void SpriteCB_Egg_2(struct Sprite* sprite) { - if (++sprite->data2 > 30) + if (++sprite->data[2] > 30) { - if (++sprite->data0 > 38) + if (++sprite->data[0] > 38) { u16 species; sprite->callback = SpriteCB_Egg_3; - sprite->data0 = 0; + sprite->data[0] = 0; species = GetMonData(&gPlayerParty[gEggHatchData->eggPartyID], MON_DATA_SPECIES); gSprites[gEggHatchData->pokeSpriteID].pos2.x = 0; gSprites[gEggHatchData->pokeSpriteID].pos2.y = gMonFrontPicCoords[species].y_offset; } else { - sprite->data1 = (sprite->data1 + 20) & 0xFF; - sprite->pos2.x = Sin(sprite->data1, 2); - if (sprite->data0 == 15) + sprite->data[1] = (sprite->data[1] + 20) & 0xFF; + sprite->pos2.x = Sin(sprite->data[1], 2); + if (sprite->data[0] == 15) { PlaySE(SE_BOWA); StartSpriteAnim(sprite, 2); CreateRandomEggShardSprite(); CreateRandomEggShardSprite(); } - if (sprite->data0 == 30) + if (sprite->data[0] == 30) PlaySE(SE_BOWA); } } @@ -743,60 +743,60 @@ static void SpriteCB_Egg_2(struct Sprite* sprite) static void SpriteCB_Egg_3(struct Sprite* sprite) { - if (++sprite->data0 > 50) + if (++sprite->data[0] > 50) { sprite->callback = SpriteCB_Egg_4; - sprite->data0 = 0; + sprite->data[0] = 0; } } static void SpriteCB_Egg_4(struct Sprite* sprite) { s16 i; - if (sprite->data0 == 0) + if (sprite->data[0] == 0) BeginNormalPaletteFade(-1, -1, 0, 0x10, 0xFFFF); - if (sprite->data0 < 4u) + if (sprite->data[0] < 4u) { for (i = 0; i <= 3; i++) CreateRandomEggShardSprite(); } - sprite->data0++; + sprite->data[0]++; if (!gPaletteFade.active) { PlaySE(SE_TAMAGO); sprite->invisible = 1; sprite->callback = SpriteCB_Egg_5; - sprite->data0 = 0; + sprite->data[0] = 0; } } static void SpriteCB_Egg_5(struct Sprite* sprite) { - if (sprite->data0 == 0) + if (sprite->data[0] == 0) { gSprites[gEggHatchData->pokeSpriteID].invisible = 0; StartSpriteAffineAnim(&gSprites[gEggHatchData->pokeSpriteID], 1); } - if (sprite->data0 == 8) + if (sprite->data[0] == 8) BeginNormalPaletteFade(-1, -1, 0x10, 0, 0xFFFF); - if (sprite->data0 <= 9) + if (sprite->data[0] <= 9) gSprites[gEggHatchData->pokeSpriteID].pos1.y -= 1; - if (sprite->data0 > 40) + if (sprite->data[0] > 40) sprite->callback = SpriteCallbackDummy; - sprite->data0++; + sprite->data[0]++; } static void SpriteCB_EggShard(struct Sprite* sprite) { - sprite->data4 += sprite->data1; - sprite->data5 += sprite->data2; + sprite->data[4] += sprite->data[1]; + sprite->data[5] += sprite->data[2]; - sprite->pos2.x = sprite->data4 / 256; - sprite->pos2.y = sprite->data5 / 256; + sprite->pos2.x = sprite->data[4] / 256; + sprite->pos2.y = sprite->data[5] / 256; - sprite->data2 += sprite->data3; + sprite->data[2] += sprite->data[3]; - if (sprite->pos1.y + sprite->pos2.y > sprite->pos1.y + 20 && sprite->data2 > 0) + if (sprite->pos1.y + sprite->pos2.y > sprite->pos1.y + 20 && sprite->data[2] > 0) DestroySprite(sprite); } @@ -840,9 +840,9 @@ static void CreateRandomEggShardSprite(void) static void CreateEggShardSprite(u8 x, u8 y, s16 data1, s16 data2, s16 data3, u8 spriteAnimIndex) { u8 spriteID = CreateSprite(&sSpriteTemplate_820A418, x, y, 4); - gSprites[spriteID].data1 = data1; - gSprites[spriteID].data2 = data2; - gSprites[spriteID].data3 = data3; + gSprites[spriteID].data[1] = data1; + gSprites[spriteID].data[2] = data2; + gSprites[spriteID].data[3] = data3; StartSpriteAnim(&gSprites[spriteID], spriteAnimIndex); } diff --git a/src/scene/evolution_graphics.c b/src/scene/evolution_graphics.c index 1fd5bf8fa..66b506fb5 100644 --- a/src/scene/evolution_graphics.c +++ b/src/scene/evolution_graphics.c @@ -115,18 +115,18 @@ static void SpriteCB_PreEvoSparkleSet1(struct Sprite* sprite) { u8 matrixNum; - sprite->pos1.y = 88 - (sprite->data7 * sprite->data7) / 80; - sprite->pos2.y = Sin((u8)(sprite->data6), sprite->data5) / 4; - sprite->pos2.x = Cos((u8)(sprite->data6), sprite->data5); - sprite->data6 += 4; - if (sprite->data7 & 1) - sprite->data5--; - sprite->data7++; + sprite->pos1.y = 88 - (sprite->data[7] * sprite->data[7]) / 80; + sprite->pos2.y = Sin((u8)(sprite->data[6]), sprite->data[5]) / 4; + sprite->pos2.x = Cos((u8)(sprite->data[6]), sprite->data[5]); + sprite->data[6] += 4; + if (sprite->data[7] & 1) + sprite->data[5]--; + sprite->data[7]++; if (sprite->pos2.y > 0) sprite->subpriority = 1; else sprite->subpriority = 20; - matrixNum = sprite->data5 / 4 + 20; + matrixNum = sprite->data[5] / 4 + 20; if (matrixNum > 31) matrixNum = 31; sprite->oam.matrixNum = matrixNum; @@ -140,9 +140,9 @@ static void CreatePreEvoSparkleSet1(u8 arg0) u8 spriteID = CreateSprite(&sEvoSparkleSpriteTemplate, 120, 88, 0); if (spriteID != MAX_SPRITES) { - gSprites[spriteID].data5 = 48; - gSprites[spriteID].data6 = arg0; - gSprites[spriteID].data7 = 0; + gSprites[spriteID].data[5] = 48; + gSprites[spriteID].data[6] = arg0; + gSprites[spriteID].data[7] = 0; gSprites[spriteID].oam.affineMode = 1; gSprites[spriteID].oam.matrixNum = 31; gSprites[spriteID].callback = SpriteCB_PreEvoSparkleSet1; @@ -153,11 +153,11 @@ static void SpriteCB_PreEvoSparkleSet2(struct Sprite* sprite) { if (sprite->pos1.y < 88) { - sprite->pos1.y = 8 + (sprite->data7 * sprite->data7) / 5; - sprite->pos2.y = Sin((u8)(sprite->data6), sprite->data5) / 4; - sprite->pos2.x = Cos((u8)(sprite->data6), sprite->data5); - sprite->data5 = 8 + Sin((u8)(sprite->data7 * 4), 40); - sprite->data7++; + sprite->pos1.y = 8 + (sprite->data[7] * sprite->data[7]) / 5; + sprite->pos2.y = Sin((u8)(sprite->data[6]), sprite->data[5]) / 4; + sprite->pos2.x = Cos((u8)(sprite->data[6]), sprite->data[5]); + sprite->data[5] = 8 + Sin((u8)(sprite->data[7] * 4), 40); + sprite->data[7]++; } else DestroySprite(sprite); @@ -168,9 +168,9 @@ static void CreatePreEvoSparkleSet2(u8 arg0) u8 spriteID = CreateSprite(&sEvoSparkleSpriteTemplate, 120, 8, 0); if (spriteID != MAX_SPRITES) { - gSprites[spriteID].data5 = 8; - gSprites[spriteID].data6 = arg0; - gSprites[spriteID].data7 = 0; + gSprites[spriteID].data[5] = 8; + gSprites[spriteID].data[6] = arg0; + gSprites[spriteID].data[7] = 0; gSprites[spriteID].oam.affineMode = 1; gSprites[spriteID].oam.matrixNum = 25; gSprites[spriteID].subpriority = 1; @@ -180,12 +180,12 @@ static void CreatePreEvoSparkleSet2(u8 arg0) static void SpriteCB_PostEvoSparkleSet1(struct Sprite* sprite) { - if (sprite->data5 > 8) + if (sprite->data[5] > 8) { - sprite->pos2.y = Sin((u8)(sprite->data6), sprite->data5); - sprite->pos2.x = Cos((u8)(sprite->data6), sprite->data5); - sprite->data5 -= sprite->data3; - sprite->data6 += 4; + sprite->pos2.y = Sin((u8)(sprite->data[6]), sprite->data[5]); + sprite->pos2.x = Cos((u8)(sprite->data[6]), sprite->data[5]); + sprite->data[5] -= sprite->data[3]; + sprite->data[6] += 4; } else DestroySprite(sprite); @@ -196,10 +196,10 @@ static void CreatePostEvoSparkleSet1(u8 arg0, u8 arg1) u8 spriteID = CreateSprite(&sEvoSparkleSpriteTemplate, 120, 56, 0); if (spriteID != MAX_SPRITES) { - gSprites[spriteID].data3 = arg1; - gSprites[spriteID].data5 = 120; - gSprites[spriteID].data6 = arg0; - gSprites[spriteID].data7 = 0; + gSprites[spriteID].data[3] = arg1; + gSprites[spriteID].data[5] = 120; + gSprites[spriteID].data[6] = arg0; + gSprites[spriteID].data[7] = 0; gSprites[spriteID].oam.affineMode = 1; gSprites[spriteID].oam.matrixNum = 31; gSprites[spriteID].subpriority = 1; @@ -209,29 +209,29 @@ static void CreatePostEvoSparkleSet1(u8 arg0, u8 arg1) static void SpriteCB_PostEvoSparkleSet2(struct Sprite* sprite) { - if (!(sprite->data7 & 3)) + if (!(sprite->data[7] & 3)) sprite->pos1.y++; - if (sprite->data6 < 128) + if (sprite->data[6] < 128) { u8 matrixNum; - sprite->pos2.y = -Sin((u8)(sprite->data6), sprite->data5); - sprite->pos1.x = 120 + (sprite->data3 * sprite->data7) / 3; - sprite->data6++; - matrixNum = 31 - (sprite->data6 * 12 / 128); - if (sprite->data6 > 64) + sprite->pos2.y = -Sin((u8)(sprite->data[6]), sprite->data[5]); + sprite->pos1.x = 120 + (sprite->data[3] * sprite->data[7]) / 3; + sprite->data[6]++; + matrixNum = 31 - (sprite->data[6] * 12 / 128); + if (sprite->data[6] > 64) sprite->subpriority = 1; else { sprite->invisible = 0; sprite->subpriority = 20; - if (sprite->data6 > 112 && sprite->data6 & 1) + if (sprite->data[6] > 112 && sprite->data[6] & 1) sprite->invisible = 1; } if (matrixNum < 20) matrixNum = 20; sprite->oam.matrixNum = matrixNum; - sprite->data7++; + sprite->data[7]++; } else DestroySprite(sprite); @@ -242,9 +242,9 @@ static void CreatePostEvoSparkleSet2(u8 arg0) u8 spriteID = CreateSprite(&sEvoSparkleSpriteTemplate, 120, 56, 0); if (spriteID != MAX_SPRITES) { - gSprites[spriteID].data3 = 3 - (Random() % 7); - gSprites[spriteID].data5 = 48 + (Random() & 0x3F); - gSprites[spriteID].data7 = 0; + gSprites[spriteID].data[3] = 3 - (Random() % 7); + gSprites[spriteID].data[5] = 48 + (Random() & 0x3F); + gSprites[spriteID].data[7] = 0; gSprites[spriteID].oam.affineMode = 1; gSprites[spriteID].oam.matrixNum = 31; gSprites[spriteID].subpriority = 20; diff --git a/src/scene/evolution_scene.c b/src/scene/evolution_scene.c index 4b73ab5b2..1bbb8d485 100644 --- a/src/scene/evolution_scene.c +++ b/src/scene/evolution_scene.c @@ -131,7 +131,7 @@ static void CB2_BeginEvolutionScene(void) #define tLearnsFirstMove data[6] #define tLearnMoveState data[8] #define tData9 data[9] -#define tData10 data[10] +#define tdata10 data[10] #define tEvoWasStopped data[11] #define tPartyID data[12] @@ -763,7 +763,7 @@ static void Task_EvolutionScene(u8 taskID) StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[6]); sub_8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15); gTasks[taskID].tData9 = 5; - gTasks[taskID].tData10 = 9; + gTasks[taskID].tdata10 = 9; gTasks[taskID].tLearnMoveState++; } case 3: @@ -797,7 +797,7 @@ static void Task_EvolutionScene(u8 taskID) sub_8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15); PlaySE(SE_SELECT); if (sEvoCursorPos != 0) - gTasks[taskID].tLearnMoveState = gTasks[taskID].tData10; + gTasks[taskID].tLearnMoveState = gTasks[taskID].tdata10; else { gTasks[taskID].tLearnMoveState = gTasks[taskID].tData9; @@ -811,7 +811,7 @@ static void Task_EvolutionScene(u8 taskID) StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[292]); sub_8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15); PlaySE(SE_SELECT); - gTasks[taskID].tLearnMoveState = gTasks[taskID].tData10; + gTasks[taskID].tLearnMoveState = gTasks[taskID].tdata10; } break; case 5: @@ -874,7 +874,7 @@ static void Task_EvolutionScene(u8 taskID) StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[8]); sub_8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15); gTasks[taskID].tData9 = 10; - gTasks[taskID].tData10 = 0; + gTasks[taskID].tdata10 = 0; gTasks[taskID].tLearnMoveState = 3; break; case 10: @@ -1077,7 +1077,7 @@ static void Task_TradeEvolutionScene(u8 taskID) StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[6]); sub_8002EB0(&gUnknown_03004828->window, gDisplayedStringBattle, gUnknown_03004828->textWindowBaseTileNum, 2, 15); gTasks[taskID].tData9 = 5; - gTasks[taskID].tData10 = 9; + gTasks[taskID].tdata10 = 9; gTasks[taskID].tLearnMoveState++; } case 3: @@ -1116,7 +1116,7 @@ static void Task_TradeEvolutionScene(u8 taskID) sub_8002EB0(&gUnknown_03004828->window, gDisplayedStringBattle, gUnknown_03004828->textWindowBaseTileNum, 2, 15); PlaySE(SE_SELECT); if (sEvoCursorPos != 0) - gTasks[taskID].tLearnMoveState = gTasks[taskID].tData10; + gTasks[taskID].tLearnMoveState = gTasks[taskID].tdata10; else { gTasks[taskID].tLearnMoveState = gTasks[taskID].tData9; @@ -1131,7 +1131,7 @@ static void Task_TradeEvolutionScene(u8 taskID) StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[292]); sub_8002EB0(&gUnknown_03004828->window, gDisplayedStringBattle, gUnknown_03004828->textWindowBaseTileNum, 2, 15); PlaySE(SE_SELECT); - gTasks[taskID].tLearnMoveState = gTasks[taskID].tData10; + gTasks[taskID].tLearnMoveState = gTasks[taskID].tdata10; } break; case 5: @@ -1194,7 +1194,7 @@ static void Task_TradeEvolutionScene(u8 taskID) StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[8]); sub_8002EB0(&gUnknown_03004828->window, gDisplayedStringBattle, gUnknown_03004828->textWindowBaseTileNum, 2, 15); gTasks[taskID].tData9 = 10; - gTasks[taskID].tData10 = 0; + gTasks[taskID].tdata10 = 0; gTasks[taskID].tLearnMoveState = 3; break; case 10: diff --git a/src/scene/hall_of_fame.c b/src/scene/hall_of_fame.c index 72bd051da..a1de26c32 100644 --- a/src/scene/hall_of_fame.c +++ b/src/scene/hall_of_fame.c @@ -612,9 +612,9 @@ static void sub_8142320(u8 taskID) } spriteID = HallOfFame_LoadPokemonPic(currMon->species, xPos, yPos, currPokeID, currMon->tid, currMon->personality); - gSprites[spriteID].data1 = field4; - gSprites[spriteID].data2 = field6; - gSprites[spriteID].data0 = 0; + gSprites[spriteID].data[1] = field4; + gSprites[spriteID].data[2] = field6; + gSprites[spriteID].data[0] = 0; gSprites[spriteID].callback = sub_81435DC; gTasks[taskID].tMonSpriteID(currPokeID) = spriteID; MenuZeroFillWindowRect(0, 14, 29, 19); @@ -627,7 +627,7 @@ static void sub_8142404(u8 taskID) u16 currPokeID = gTasks[taskID].tDisplayedPoke; struct HallofFameMon* currMon = &fameMons->mons[currPokeID]; - if (gSprites[gTasks[taskID].tMonSpriteID(currPokeID)].data0 != 0) + if (gSprites[gTasks[taskID].tMonSpriteID(currPokeID)].data[0] != 0) { if (currMon->species != SPECIES_EGG) PlayCry1(currMon->species, 0); @@ -1299,22 +1299,22 @@ static void sub_81435B8(void) static void sub_81435DC(struct Sprite* sprite) { u32 spritePos = *(u32*)(&sprite->pos1); - u32 dataPos = *(u32*)(&sprite->data1); + u32 dataPos = *(u32*)(&sprite->data[1]); if (spritePos != dataPos) { - if (sprite->pos1.x < sprite->data1) + if (sprite->pos1.x < sprite->data[1]) sprite->pos1.x += 15; - if (sprite->pos1.x > sprite->data1) + if (sprite->pos1.x > sprite->data[1]) sprite->pos1.x -= 15; - if (sprite->pos1.y < sprite->data2) + if (sprite->pos1.y < sprite->data[2]) sprite->pos1.y += 10; - if (sprite->pos1.y > sprite->data2) + if (sprite->pos1.y > sprite->data[2]) sprite->pos1.y -= 10; } else { - sprite->data0 = 1; + sprite->data[0] = 1; sprite->callback = SpriteCB_HallOfFame_Dummy; } } @@ -1381,13 +1381,13 @@ static void sub_814386C(struct Sprite* sprite) u8 tableID; sprite->pos2.y++; - sprite->pos2.y += sprite->data1; + sprite->pos2.y += sprite->data[1]; - tableID = sprite->data0; + tableID = sprite->data[0]; rand = (Random() % 4) + 8; sprite->pos2.x = rand * gSineTable[tableID] / 256; - sprite->data0 += 4; + sprite->data[0] += 4; } } @@ -1405,9 +1405,9 @@ static bool8 sub_81438C4(void) StartSpriteAnim(sprite, Random() % 17); if (Random() & 3) - sprite->data1 = 0; + sprite->data[1] = 0; else - sprite->data1 = 1; + sprite->data[1] = 1; return 0; } diff --git a/src/scene/intro.c b/src/scene/intro.c index 03a573c90..b52fbb3a9 100644 --- a/src/scene/intro.c +++ b/src/scene/intro.c @@ -995,11 +995,11 @@ static void Task_IntroWaterDrops(u8 taskId) { //start moving rock if (gIntroFrameCounter == 76) - gSprites[gTasks[taskId].data[0]].data0 = 1; + gSprites[gTasks[taskId].data[0]].data[0] = 1; //drop rock if (gIntroFrameCounter == 251) - gSprites[gTasks[taskId].data[0]].data0 = 2; + gSprites[gTasks[taskId].data[0]].data[0] = 2; if (gIntroFrameCounter == 368) CreateWaterDrop(48, 0, 0x400, 5, 0x70, TRUE); @@ -1134,17 +1134,17 @@ static void Task_IntroHandleBikeAndEonMovement(u8 taskId) gTasks[taskId].func = Task_IntroWaitToSetupPart3; } if (gIntroFrameCounter == 1109) - gSprites[gTasks[taskId].data[1]].data0 = 1; + gSprites[gTasks[taskId].data[1]].data[0] = 1; if (gIntroFrameCounter == 1214) - gSprites[gTasks[taskId].data[1]].data0 = 0; + gSprites[gTasks[taskId].data[1]].data[0] = 0; if (gIntroFrameCounter == 1394) - gSprites[gTasks[taskId].data[2]].data0 = 1; + gSprites[gTasks[taskId].data[2]].data[0] = 1; if (gIntroFrameCounter == 1398) - gSprites[gTasks[taskId].data[1]].data0 = 2; + gSprites[gTasks[taskId].data[1]].data[0] = 2; if (gIntroFrameCounter == 1586) - gSprites[gTasks[taskId].data[1]].data0 = 3; + gSprites[gTasks[taskId].data[1]].data[0] = 3; if (gIntroFrameCounter == 1727) - gSprites[gTasks[taskId].data[1]].data0 = 4; + gSprites[gTasks[taskId].data[1]].data[0] = 4; //TODO: Clean this up a = (((u16)gTasks[taskId].data[3] << 16) >> 18) & 0x7F; @@ -1314,15 +1314,15 @@ static void Task_IntroPokemonBattle(u8 taskId) { spriteId = sub_813CE88(SPECIES_SHARPEDO, 0xF0, 0xA0, 5, 1); gSprites[spriteId].callback = sub_813DB9C; - gSprites[spriteId].data1 = 1; - gSprites[spriteId].data2 = 0; + gSprites[spriteId].data[1] = 1; + gSprites[spriteId].data[2] = 0; } if (gIntroFrameCounter == 152) { spriteId = sub_813CE88(SPECIES_DUSKULL, 0, 0xA0, 4, 1); gSprites[spriteId].callback = sub_813DB9C; - gSprites[spriteId].data1 = 2; - gSprites[spriteId].data2 = 1; + gSprites[spriteId].data[1] = 2; + gSprites[spriteId].data[2] = 1; } if (gIntroFrameCounter == 219) { @@ -1334,12 +1334,12 @@ static void Task_IntroPokemonBattle(u8 taskId) if (gIntroFrameCounter == 304) { gTasks[gTasks[taskId].data[15]].data[0] = 4; - gSprites[gTasks[taskId].data[1]].data0 = 2; + gSprites[gTasks[taskId].data[1]].data[0] = 2; } if (gIntroFrameCounter == 384) { gTasks[gTasks[taskId].data[15]].data[0] = 0; - gSprites[gTasks[taskId].data[1]].data0 = 4; + gSprites[gTasks[taskId].data[1]].data[0] = 4; } if (gIntroFrameCounter == 400) { @@ -1347,11 +1347,11 @@ static void Task_IntroPokemonBattle(u8 taskId) } if (gIntroFrameCounter == 432) { - gSprites[gTasks[taskId].data[1]].data0 = 5; + gSprites[gTasks[taskId].data[1]].data[0] = 5; } if (gIntroFrameCounter == 462) { - gSprites[gTasks[taskId].data[1]].data0 = 6; + gSprites[gTasks[taskId].data[1]].data[0] = 6; gTasks[gTasks[taskId].data[15]].data[0] = 2; } if (gIntroFrameCounter == 463) @@ -1371,8 +1371,8 @@ static void Task_IntroPokemonBattle(u8 taskId) } if (gIntroFrameCounter == 623) { - gSprites[gTasks[taskId].data[2]].data0 = 2; - gSprites[gTasks[taskId].data[3]].data0 = 2; + gSprites[gTasks[taskId].data[2]].data[0] = 2; + gSprites[gTasks[taskId].data[3]].data[0] = 2; gTasks[gTasks[taskId].data[15]].data[0] = 3; } if (gIntroFrameCounter == 624) @@ -1393,17 +1393,17 @@ static void Task_IntroPokemonBattle(u8 taskId) if (gIntroFrameCounter == 776) { gUnknown_0203931A = 1; - gSprites[gTasks[taskId].data[4]].data0 = 2; - gSprites[gTasks[taskId].data[5]].data0 = 2; + gSprites[gTasks[taskId].data[4]].data[0] = 2; + gSprites[gTasks[taskId].data[5]].data[0] = 2; gTasks[gTasks[taskId].data[15]].data[0] = 0; } if (gIntroFrameCounter == 781) { sub_813D084(2); - gSprites[gTasks[taskId].data[2]].data0 = 3; - gSprites[gTasks[taskId].data[3]].data0 = 3; - gSprites[gTasks[taskId].data[4]].data0 = 3; - gSprites[gTasks[taskId].data[5]].data0 = 3; + gSprites[gTasks[taskId].data[2]].data[0] = 3; + gSprites[gTasks[taskId].data[3]].data[0] = 3; + gSprites[gTasks[taskId].data[4]].data[0] = 3; + gSprites[gTasks[taskId].data[5]].data[0] = 3; spriteId = CreateSprite(&gSpriteTemplate_840B1F4, 0x78, 0x50, 15); gSprites[spriteId].invisible = 1; } @@ -1838,18 +1838,18 @@ static void sub_813D0CC(struct Sprite *sprite) { u8 r0; - if (sprite->data2 >= 192) + if (sprite->data[2] >= 192) { - if (sprite->data3 != 0) + if (sprite->data[3] != 0) { - sprite->data3--; + sprite->data[3]--; } else { sprite->invisible = FALSE; - SetOamMatrix(sprite->data1, sprite->data2, 0, 0, sprite->data2); - sprite->data2 = (sprite->data2 * 95) / 100; - r0 = (sprite->data2 - 192) / 128 + 9; + SetOamMatrix(sprite->data[1], sprite->data[2], 0, 0, sprite->data[2]); + sprite->data[2] = (sprite->data[2] * 95) / 100; + r0 = (sprite->data[2] - 192) / 128 + 9; if (r0 > 15) r0 = 15; sprite->oam.paletteNum = r0; @@ -1863,14 +1863,14 @@ static void sub_813D0CC(struct Sprite *sprite) static void sub_813D158(struct Sprite *sprite) { - if (gSprites[sprite->data7].data7 != 0) + if (gSprites[sprite->data[7]].data[7] != 0) { sprite->invisible = TRUE; sprite->pos1.x += sprite->pos2.x; sprite->pos1.y += sprite->pos2.y; StartSpriteAnim(sprite, 3); - sprite->data2 = 1024; - sprite->data3 = 8 * (sprite->data1 & 3); + sprite->data[2] = 1024; + sprite->data[3] = 8 * (sprite->data[1] & 3); sprite->callback = sub_813D0CC; sprite->oam.shape = 1; sprite->oam.size = 3; @@ -1878,16 +1878,16 @@ static void sub_813D158(struct Sprite *sprite) } else { - sprite->pos2.x = gSprites[sprite->data7].pos2.x; - sprite->pos2.y = gSprites[sprite->data7].pos2.y; - sprite->pos1.x = gSprites[sprite->data7].pos1.x; - sprite->pos1.y = gSprites[sprite->data7].pos1.y; + sprite->pos2.x = gSprites[sprite->data[7]].pos2.x; + sprite->pos2.y = gSprites[sprite->data[7]].pos2.y; + sprite->pos1.x = gSprites[sprite->data[7]].pos1.x; + sprite->pos1.y = gSprites[sprite->data[7]].pos1.y; } } static void sub_813D208(struct Sprite *sprite) { - if (sprite->data0 != 0) + if (sprite->data[0] != 0) sprite->callback = sub_813D220; } @@ -1899,7 +1899,7 @@ static void sub_813D220(struct Sprite *sprite) sprite->pos2.y = 0; sprite->pos1.x += 4; sprite->pos2.x = -4; - sprite->data4 = 128; + sprite->data[4] = 128; sprite->callback = sub_813D368; } else @@ -1917,58 +1917,58 @@ static void sub_813D220(struct Sprite *sprite) s16 var4; s16 temp; - data4 = sprite->data4; + data4 = sprite->data[4]; sin1 = gSineTable[(u8)data4]; sin2 = gSineTable[(u8)(data4 + 64)]; - sprite->data4 += 2; + sprite->data[4] += 2; sprite->pos2.y = sin1 / 32; sprite->pos1.x--; if (sprite->pos1.x & 1) sprite->pos1.y++; temp = -sin2 / 16; - data2 = sprite->data2; - data3 = sprite->data3; + data2 = sprite->data[2]; + data3 = sprite->data[3]; sin3 = gSineTable[(u8)(temp - 16)]; sin4 = gSineTable[(u8)(temp + 48)]; var1 = sin4 * data2 / 256; var2 = -sin3 * data3 / 256; var3 = sin3 * data2 / 256; var4 = sin4 * data3 / 256; - SetOamMatrix(sprite->data1, data2, 0, 0, data3); - SetOamMatrix(sprite->data1 + 1, var1, var3, var2, var4); - SetOamMatrix(sprite->data1 + 2, var1, var3, var2 * 2, var4 * 2); + SetOamMatrix(sprite->data[1], data2, 0, 0, data3); + SetOamMatrix(sprite->data[1] + 1, var1, var3, var2, var4); + SetOamMatrix(sprite->data[1] + 2, var1, var3, var2 * 2, var4 * 2); } } static void sub_813D368(struct Sprite *sprite) { - SetOamMatrix(sprite->data1, sprite->data6 + 64, 0, 0, sprite->data6 + 64); - SetOamMatrix(sprite->data1 + 1, sprite->data6 + 64, 0, 0, sprite->data6 + 64); - SetOamMatrix(sprite->data1 + 2, sprite->data6 + 64, 0, 0, sprite->data6 + 64); - if (sprite->data4 != 64) + SetOamMatrix(sprite->data[1], sprite->data[6] + 64, 0, 0, sprite->data[6] + 64); + SetOamMatrix(sprite->data[1] + 1, sprite->data[6] + 64, 0, 0, sprite->data[6] + 64); + SetOamMatrix(sprite->data[1] + 2, sprite->data[6] + 64, 0, 0, sprite->data[6] + 64); + if (sprite->data[4] != 64) { u16 data4; - sprite->data4 -= 8; - data4 = sprite->data4; + sprite->data[4] -= 8; + data4 = sprite->data[4]; sprite->pos2.x = gSineTable[(u8)(data4 + 64)] / 64; sprite->pos2.y = gSineTable[(u8)data4] / 64; } else { - sprite->data4 = 0; + sprite->data[4] = 0; sprite->callback = sub_813D414; } } static void sub_813D414(struct Sprite *sprite) { - if (sprite->data0 != 2) + if (sprite->data[0] != 2) { s16 r2; - sprite->data4 += 8; - r2 = gSineTable[(u8)sprite->data4] / 16 + 64; + sprite->data[4] += 8; + r2 = gSineTable[(u8)sprite->data[4]] / 16 + 64; sprite->pos2.x = gSineTable[(u8)(r2 + 64)] / 64; sprite->pos2.y = gSineTable[(u8)r2] / 64; } @@ -1980,19 +1980,19 @@ static void sub_813D414(struct Sprite *sprite) static void SpriteCB_WaterDropFall(struct Sprite *sprite) { - if (sprite->pos1.y < sprite->data5) + if (sprite->pos1.y < sprite->data[5]) { sprite->pos1.y += 4; } else { - sprite->data7 = 1; + sprite->data[7] = 1; sprite->invisible = TRUE; sprite->pos1.x += sprite->pos2.x; sprite->pos1.y += sprite->pos2.y; StartSpriteAnim(sprite, 3); - sprite->data2 = 1024; - sprite->data3 = 8 * (sprite->data1 & 3); + sprite->data[2] = 1024; + sprite->data[3] = 8 * (sprite->data[1] & 3); sprite->callback = sub_813D0CC; sprite->oam.shape = 1; sprite->oam.size = 3; @@ -2003,19 +2003,19 @@ static void SpriteCB_WaterDropFall(struct Sprite *sprite) //Duplicate function static void SpriteCB_WaterDropFall_2(struct Sprite *sprite) { - if (sprite->pos1.y < sprite->data5) + if (sprite->pos1.y < sprite->data[5]) { sprite->pos1.y += 4; } else { - sprite->data7 = 1; + sprite->data[7] = 1; sprite->invisible = TRUE; sprite->pos1.x += sprite->pos2.x; sprite->pos1.y += sprite->pos2.y; StartSpriteAnim(sprite, 3); - sprite->data2 = 1024; - sprite->data3 = 8 * (sprite->data1 & 3); + sprite->data[2] = 1024; + sprite->data[3] = 8 * (sprite->data[1] & 3); sprite->callback = sub_813D0CC; sprite->oam.shape = 1; sprite->oam.size = 3; @@ -2029,13 +2029,13 @@ static u8 CreateWaterDrop(s16 x, s16 y, u16 c, u16 d, u16 e, u8 fallImmediately) u8 oldSpriteId; spriteId = CreateSprite(&gSpriteTemplate_840AE20, x, y, 0); - gSprites[spriteId].data0 = 0; - gSprites[spriteId].data7 = 0; - gSprites[spriteId].data1 = d; - gSprites[spriteId].data2 = c; - gSprites[spriteId].data3 = c; - gSprites[spriteId].data5 = e; - gSprites[spriteId].data6 = c; + gSprites[spriteId].data[0] = 0; + gSprites[spriteId].data[7] = 0; + gSprites[spriteId].data[1] = d; + gSprites[spriteId].data[2] = c; + gSprites[spriteId].data[3] = c; + gSprites[spriteId].data[5] = e; + gSprites[spriteId].data[6] = c; gSprites[spriteId].oam.affineMode = 3; gSprites[spriteId].oam.matrixNum = d; CalcCenterToCornerVec(&gSprites[spriteId], 0, 2, 2); @@ -2047,16 +2047,16 @@ static u8 CreateWaterDrop(s16 x, s16 y, u16 c, u16 d, u16 e, u8 fallImmediately) oldSpriteId = spriteId; spriteId = CreateSprite(&gSpriteTemplate_840AE20, x, y, 0); - gSprites[spriteId].data7 = oldSpriteId; - gSprites[spriteId].data1 = d + 1; + gSprites[spriteId].data[7] = oldSpriteId; + gSprites[spriteId].data[1] = d + 1; gSprites[spriteId].oam.affineMode = 3; gSprites[spriteId].oam.matrixNum = d + 1; CalcCenterToCornerVec(&gSprites[spriteId], 0, 2, 2); gSprites[spriteId].callback = sub_813D158; spriteId = CreateSprite(&gSpriteTemplate_840AE20, x, y, 0); - gSprites[spriteId].data7 = oldSpriteId; - gSprites[spriteId].data1 = d + 2; + gSprites[spriteId].data[7] = oldSpriteId; + gSprites[spriteId].data[1] = d + 2; StartSpriteAnim(&gSprites[spriteId], 1); gSprites[spriteId].oam.affineMode = 3; gSprites[spriteId].oam.matrixNum = d + 2; @@ -2072,7 +2072,7 @@ static u8 CreateWaterDrop(s16 x, s16 y, u16 c, u16 d, u16 e, u8 fallImmediately) static void sub_813D788(struct Sprite *sprite) { - switch (sprite->data0) + switch (sprite->data[0]) { case 0: StartSpriteAnimIfDifferent(sprite, 0); @@ -2124,7 +2124,7 @@ static void sub_813D788(struct Sprite *sprite) static void sub_813D880(struct Sprite *sprite) { - switch (sprite->data0) + switch (sprite->data[0]) { case 0: break; @@ -2132,30 +2132,30 @@ static void sub_813D880(struct Sprite *sprite) if (sprite->pos2.x + sprite->pos1.x < 304) sprite->pos2.x += 8; else - sprite->data0 = 2; + sprite->data[0] = 2; break; case 2: if (sprite->pos2.x + sprite->pos1.x > 120) sprite->pos2.x -= 1; else - sprite->data0 = 3; + sprite->data[0] = 3; break; case 3: if (sprite->pos2.x > 0) sprite->pos2.x -= 2; break; } - sprite->pos2.y = Sin((u8)sprite->data1, 8) - gUnknown_0203935A; - sprite->data1 += 4; + sprite->pos2.y = Sin((u8)sprite->data[1], 8) - gUnknown_0203935A; + sprite->data[1] += 4; } static void sub_813D908(struct Sprite *sprite) { - if (gTasks[sprite->data0].data[0] == 0) + if (gTasks[sprite->data[0]].data[0] == 0) { sprite->invisible = TRUE; } - else if (gTasks[sprite->data0].data[0] != 4) + else if (gTasks[sprite->data[0]].data[0] != 4) { sprite->invisible = FALSE; } @@ -2173,17 +2173,17 @@ static u8 CreateGameFreakLogo(s16 a, s16 b, u8 c) for (i = 0; i < 9; i++) { spriteId = CreateSprite(&gSpriteTemplate_840AF94, gUnknown_0840AF50[i][1] + a, b - 4, 0); - gSprites[spriteId].data0 = c; + gSprites[spriteId].data[0] = c; StartSpriteAnim(&gSprites[spriteId], gUnknown_0840AF50[i][0]); } for (i = 0; i < 8; i++) { spriteId = CreateSprite(&gSpriteTemplate_840AFAC, gUnknown_0840AF74[i][1] + a, b + 12, 0); - gSprites[spriteId].data0 = c; + gSprites[spriteId].data[0] = c; StartSpriteAnim(&gSprites[spriteId], gUnknown_0840AF74[i][0]); } spriteId = CreateSprite(&gSpriteTemplate_840AFC4, 120, b - 4, 0); - gSprites[spriteId].data0 = c; + gSprites[spriteId].data[0] = c; return spriteId; } @@ -2191,9 +2191,9 @@ static u8 CreateGameFreakLogo(s16 a, s16 b, u8 c) #ifdef NONMATCHING static void sub_813DA64(struct Sprite *sprite) { - sprite->data7++; + sprite->data[7]++; - switch (sprite->data0) + switch (sprite->data[0]) { case 0: default: @@ -2201,10 +2201,10 @@ static void sub_813DA64(struct Sprite *sprite) sprite->oam.matrixNum = 1; CalcCenterToCornerVec(sprite, 1, 3, 3); sprite->invisible = FALSE; - sprite->data0 = 1; - sprite->data1 = 128; - sprite->data2 = -24; - sprite->data3 = 0; + sprite->data[0] = 1; + sprite->data[1] = 128; + sprite->data[2] = -24; + sprite->data[3] = 0; break; case 1: { @@ -2216,33 +2216,33 @@ static void sub_813DA64(struct Sprite *sprite) s16 r2; //_0813DAC0 - if (sprite->data3 < 0x50) + if (sprite->data[3] < 0x50) { - sprite->pos2.y = -Sin((u8)sprite->data3, 0x78); - sprite->pos2.x = -Sin((u8)sprite->data3, 0x8C); - if (sprite->data3 > 64) + sprite->pos2.y = -Sin((u8)sprite->data[3], 0x78); + sprite->pos2.x = -Sin((u8)sprite->data[3], 0x8C); + if (sprite->data[3] > 64) sprite->oam.priority = 3; } //_0813DAF8 - r3 = gSineTable[(u8)sprite->data2]; - sin1 = gSineTable[(u8)(sprite->data2 + 64)]; - r6 = sin1 * sprite->data1 / 256; - foo = sin1 * sprite->data1 / 256; - r5 = -r3 * sprite->data1 / 256; - r2 = r3 * sprite->data1 / 256; + r3 = gSineTable[(u8)sprite->data[2]]; + sin1 = gSineTable[(u8)(sprite->data[2] + 64)]; + r6 = sin1 * sprite->data[1] / 256; + foo = sin1 * sprite->data[1] / 256; + r5 = -r3 * sprite->data[1] / 256; + r2 = r3 * sprite->data[1] / 256; SetOamMatrix(1, r6, r2, r5, foo); - if (sprite->data1 < 0x100) - sprite->data1 += 8; + if (sprite->data[1] < 0x100) + sprite->data[1] += 8; else - sprite->data1 += 32; - if (sprite->data2 < 0x18) - sprite->data2 += 1; - if (sprite->data3 < 64) - sprite->data3 += 2; - else if (!(sprite->data7 & 3)) - sprite->data3 += 1; + sprite->data[1] += 32; + if (sprite->data[2] < 0x18) + sprite->data[2] += 1; + if (sprite->data[3] < 64) + sprite->data[3] += 2; + else if (!(sprite->data[7] & 3)) + sprite->data[3] += 1; break; } } @@ -2423,72 +2423,72 @@ _0813DB94:\n\ static void sub_813DB9C(struct Sprite *sprite) { - switch (sprite->data0) + switch (sprite->data[0]) { case 0: default: - if (sprite->data2 != 0) + if (sprite->data[2] != 0) sprite->hFlip = TRUE; else sprite->hFlip = FALSE; - sprite->data0 = 1; + sprite->data[0] = 1; //fall through case 1: if (sprite->pos1.y > 96) { sprite->pos1.y -= 4; - if (sprite->data2 != 0) + if (sprite->data[2] != 0) sprite->pos1.x += 2; else sprite->pos1.x -= 2; } else { - sprite->data0++; - sprite->data3 = 8; + sprite->data[0]++; + sprite->data[3] = 8; } break; case 2: - if (sprite->data3 != 0) + if (sprite->data[3] != 0) { - sprite->data3--; + sprite->data[3]--; } else { - sprite->data0++; - sprite->data3 = 0; //redundant? + sprite->data[0]++; + sprite->data[3] = 0; //redundant? } break; case 3: sprite->oam.affineMode = 3; - sprite->oam.matrixNum = sprite->data1; + sprite->oam.matrixNum = sprite->data[1]; CalcCenterToCornerVec(sprite, 0, 3, 3); - if (sprite->data2 != 0) - SetOamMatrix(sprite->data1, -256, 0, 0, 256); + if (sprite->data[2] != 0) + SetOamMatrix(sprite->data[1], -256, 0, 0, 256); else - SetOamMatrix(sprite->data1, 256, 0, 0, 256); - sprite->data0++; - sprite->data4 = 0; + SetOamMatrix(sprite->data[1], 256, 0, 0, 256); + sprite->data[0]++; + sprite->data[4] = 0; break; case 4: - sprite->data4++; + sprite->data[4]++; if (sprite->pos1.y + sprite->pos2.y > -32 && sprite->pos1.x + sprite->pos2.x > -64) { u16 r2; - sprite->pos2.y = -(sprite->data4 * sprite->data4) / 8; - if (sprite->data2 != 0) - sprite->pos2.x += sprite->data4; + sprite->pos2.y = -(sprite->data[4] * sprite->data[4]) / 8; + if (sprite->data[2] != 0) + sprite->pos2.x += sprite->data[4]; else - sprite->pos2.x -= sprite->data4; - if (sprite->data3 < 128) - sprite->data3 += 8; - r2 = 256 - sprite->data3; - if (sprite->data2 != 0) - SetOamMatrix(sprite->data1, -r2, 0, 0, r2); + sprite->pos2.x -= sprite->data[4]; + if (sprite->data[3] < 128) + sprite->data[3] += 8; + r2 = 256 - sprite->data[3]; + if (sprite->data[2] != 0) + SetOamMatrix(sprite->data[1], -r2, 0, 0, r2); else - SetOamMatrix(sprite->data1, r2, 0, 0, r2); + SetOamMatrix(sprite->data[1], r2, 0, 0, r2); } else { @@ -2499,50 +2499,50 @@ static void sub_813DB9C(struct Sprite *sprite) static void sub_813DD58(struct Sprite *sprite) { - switch (sprite->data0) + switch (sprite->data[0]) { case 0: default: sprite->invisible = FALSE; sprite->oam.affineMode = 1; - sprite->oam.matrixNum = sprite->data1; - sprite->data3 = 2048; - sprite->data0 = 1; + sprite->oam.matrixNum = sprite->data[1]; + sprite->data[3] = 2048; + sprite->data[0] = 1; //fall through case 1: - if (sprite->data3 > 256) + if (sprite->data[3] > 256) { - sprite->data3 -= 128; - if (sprite->data2 != 0) - SetOamMatrix(sprite->data1, -sprite->data3, 0, 0, sprite->data3); + sprite->data[3] -= 128; + if (sprite->data[2] != 0) + SetOamMatrix(sprite->data[1], -sprite->data[3], 0, 0, sprite->data[3]); else - SetOamMatrix(sprite->data1, sprite->data3, 0, 0, sprite->data3); + SetOamMatrix(sprite->data[1], sprite->data[3], 0, 0, sprite->data[3]); } else { - if (sprite->data2 != 0) - SetOamMatrix(sprite->data1, -256, 0, 0, 256); + if (sprite->data[2] != 0) + SetOamMatrix(sprite->data[1], -256, 0, 0, 256); else - SetOamMatrix(sprite->data1, 256, 0, 0, 256); - sprite->data0++; + SetOamMatrix(sprite->data[1], 256, 0, 0, 256); + sprite->data[0]++; } break; case 2: break; case 3: - sprite->data4++; - sprite->pos2.y = sprite->data4 * sprite->data4 / 32; - if (sprite->data2 != 0) - sprite->pos2.x = sprite->data4 / 4; + sprite->data[4]++; + sprite->pos2.y = sprite->data[4] * sprite->data[4] / 32; + if (sprite->data[2] != 0) + sprite->pos2.x = sprite->data[4] / 4; else - sprite->pos2.x = -(sprite->data4 / 4); + sprite->pos2.x = -(sprite->data[4] / 4); break; } } static void sub_813DE70(struct Sprite *sprite) { - switch (sprite->data0) + switch (sprite->data[0]) { case 0: default: @@ -2553,24 +2553,24 @@ static void sub_813DE70(struct Sprite *sprite) else { StartSpriteAnim(sprite, 1); - sprite->data6 = CreateSprite(&gSpriteTemplate_840B084, 16, 104, 100); - sprite->data7 = CreateSprite(&gSpriteTemplate_840B084, 12, 106, 101); - sprite->data0 = 1; + sprite->data[6] = CreateSprite(&gSpriteTemplate_840B084, 16, 104, 100); + sprite->data[7] = CreateSprite(&gSpriteTemplate_840B084, 12, 106, 101); + sprite->data[0] = 1; } break; case 1: break; case 2: StartSpriteAnim(sprite, 2); - gSprites[sprite->data6].data0 = 1; - gSprites[sprite->data7].data0 = 2; - sprite->data0++; + gSprites[sprite->data[6]].data[0] = 1; + gSprites[sprite->data[7]].data[0] = 2; + sprite->data[0]++; break; case 3: if (sprite->pos1.y > 160) { sprite->invisible = 1; - sprite->data0 = 1; + sprite->data[0] = 1; } else { @@ -2582,37 +2582,37 @@ static void sub_813DE70(struct Sprite *sprite) { s16 r4, r5; - r5 = gSprites[sprite->data6].pos1.x + gSprites[sprite->data6].pos2.x; - r4 = gSprites[sprite->data6].pos1.y + gSprites[sprite->data6].pos2.y; - DestroySprite(&gSprites[sprite->data6]); - sprite->data6 = sub_813CE88(SPECIES_TORCHIC, r5, r4, 2, 1); - gSprites[sprite->data6].callback = sub_813DD58; - gSprites[sprite->data6].invisible = TRUE; - gSprites[sprite->data6].data1 = 1; - gSprites[sprite->data6].data2 = 1; + r5 = gSprites[sprite->data[6]].pos1.x + gSprites[sprite->data[6]].pos2.x; + r4 = gSprites[sprite->data[6]].pos1.y + gSprites[sprite->data[6]].pos2.y; + DestroySprite(&gSprites[sprite->data[6]]); + sprite->data[6] = sub_813CE88(SPECIES_TORCHIC, r5, r4, 2, 1); + gSprites[sprite->data[6]].callback = sub_813DD58; + gSprites[sprite->data[6]].invisible = TRUE; + gSprites[sprite->data[6]].data[1] = 1; + gSprites[sprite->data[6]].data[2] = 1; sub_813E580(r5, r4); - r5 = gSprites[sprite->data7].pos1.x + gSprites[sprite->data7].pos2.x; - r4 = gSprites[sprite->data7].pos1.y + gSprites[sprite->data7].pos2.y; - DestroySprite(&gSprites[sprite->data7]); - sprite->data7 = sub_813CE88(SPECIES_MUDKIP, r5, r4, 3, 1); - gSprites[sprite->data7].callback = sub_813DD58; - gSprites[sprite->data7].invisible = TRUE; - gSprites[sprite->data7].data1 = 2; - gSprites[sprite->data7].data2 = 0; + r5 = gSprites[sprite->data[7]].pos1.x + gSprites[sprite->data[7]].pos2.x; + r4 = gSprites[sprite->data[7]].pos1.y + gSprites[sprite->data[7]].pos2.y; + DestroySprite(&gSprites[sprite->data[7]]); + sprite->data[7] = sub_813CE88(SPECIES_MUDKIP, r5, r4, 3, 1); + gSprites[sprite->data[7]].callback = sub_813DD58; + gSprites[sprite->data[7]].invisible = TRUE; + gSprites[sprite->data[7]].data[1] = 2; + gSprites[sprite->data[7]].data[2] = 0; sub_813E580(r5, r4); BeginNormalPaletteFade(0xFF0000, 0, 16, 16, RGB(31, 23, 31)); - sprite->data0 = 1; + sprite->data[0] = 1; break; } case 5: - gSprites[sprite->data6].data0 = 3; - gSprites[sprite->data7].data0 = 3; + gSprites[sprite->data[6]].data[0] = 3; + gSprites[sprite->data[7]].data[0] = 3; break; case 6: - DestroySprite(&gSprites[sprite->data6]); - DestroySprite(&gSprites[sprite->data7]); + DestroySprite(&gSprites[sprite->data[6]]); + DestroySprite(&gSprites[sprite->data[7]]); DestroySprite(sprite); break; } @@ -2620,7 +2620,7 @@ static void sub_813DE70(struct Sprite *sprite) static void sub_813E10C(struct Sprite *sprite) { - switch (sprite->data0) + switch (sprite->data[0]) { case 0: default: @@ -2631,20 +2631,20 @@ static void sub_813E10C(struct Sprite *sprite) } else { - sprite->data6 = sprite->pos1.x; - sprite->data7 = sprite->pos1.y; + sprite->data[6] = sprite->pos1.x; + sprite->data[7] = sprite->pos1.y; sprite->pos1.x += sprite->pos2.x; sprite->pos1.y += sprite->pos2.y; sprite->pos2.x = 0; sprite->pos2.y = 0; - sprite->data0 = 1; - sprite->data1 = 0; + sprite->data[0] = 1; + sprite->data[1] = 0; } break; case 1: - if (!(sprite->data1 & 1)) + if (!(sprite->data[1] & 1)) { - if (sprite->data1 & 2) + if (sprite->data[1] & 2) { sprite->pos2.x = -1; sprite->pos2.y = 1; @@ -2655,18 +2655,18 @@ static void sub_813E10C(struct Sprite *sprite) sprite->pos2.y = 0; } } - sprite->data1++; + sprite->data[1]++; break; case 2: sprite->invisible = TRUE; - sprite->pos1.x = sprite->data6; - sprite->pos1.y = sprite->data7; + sprite->pos1.x = sprite->data[6]; + sprite->pos1.y = sprite->data[7]; sprite->pos2.x = 0; sprite->pos2.y = 0; break; case 3: sprite->invisible = FALSE; - sprite->data1++; + sprite->data[1]++; //fall through case 4: if (sprite->pos2.x > -56) @@ -2680,7 +2680,7 @@ static void sub_813E10C(struct Sprite *sprite) sprite->pos1.y += sprite->pos2.y; sprite->pos2.x = 0; sprite->pos2.y = 0; - sprite->data0 = 1; + sprite->data[0] = 1; } break; } @@ -2688,7 +2688,7 @@ static void sub_813E10C(struct Sprite *sprite) static void sub_813E210(struct Sprite *sprite) { - switch (sprite->data0) + switch (sprite->data[0]) { case 0: default: @@ -2699,20 +2699,20 @@ static void sub_813E210(struct Sprite *sprite) } else { - sprite->data6 = sprite->pos1.x; - sprite->data7 = sprite->pos1.y; + sprite->data[6] = sprite->pos1.x; + sprite->data[7] = sprite->pos1.y; sprite->pos1.x += sprite->pos2.x; sprite->pos1.y += sprite->pos2.y; sprite->pos2.x = 0; sprite->pos2.y = 0; - sprite->data0 = 1; - sprite->data1 = 0; + sprite->data[0] = 1; + sprite->data[1] = 0; } break; case 1: - if (!(sprite->data1 & 1)) + if (!(sprite->data[1] & 1)) { - if (sprite->data1 & 2) + if (sprite->data[1] & 2) { sprite->pos2.x = 1; sprite->pos2.y = -1; @@ -2723,18 +2723,18 @@ static void sub_813E210(struct Sprite *sprite) sprite->pos2.y = 0; } } - sprite->data1++; + sprite->data[1]++; break; case 2: sprite->invisible = TRUE; - sprite->pos1.x = sprite->data6; - sprite->pos1.y = sprite->data7; + sprite->pos1.x = sprite->data[6]; + sprite->pos1.y = sprite->data[7]; sprite->pos2.x = 0; sprite->pos2.y = 0; break; case 3: sprite->invisible = FALSE; - sprite->data1++; + sprite->data[1]++; //fall through case 4: if (sprite->pos2.x < 56) @@ -2748,7 +2748,7 @@ static void sub_813E210(struct Sprite *sprite) sprite->pos1.y += sprite->pos2.y; sprite->pos2.x = 0; sprite->pos2.y = 0; - sprite->data0 = 1; + sprite->data[0] = 1; } break; } @@ -2758,8 +2758,8 @@ static void sub_813E30C(struct Sprite *sprite) { u16 r4, r1; - sprite->data7++; - switch (sprite->data0) + sprite->data[7]++; + switch (sprite->data[0]) { case 0: default: @@ -2767,43 +2767,43 @@ static void sub_813E30C(struct Sprite *sprite) case 1: sprite->oam.affineMode = 1; sprite->oam.matrixNum = 1; - sprite->data0 = 10; - sprite->data4 = 36; + sprite->data[0] = 10; + sprite->data[4] = 36; //fall through case 10: if (sprite->pos1.x <= 144) { sprite->pos1.x += 4; sprite->pos1.y -= 1; - sprite->pos2.y = -Sin((u8)sprite->data2, 24); - sprite->data2 += 4; + sprite->pos2.y = -Sin((u8)sprite->data[2], 24); + sprite->data[2] += 4; } - sprite->data3 -= sprite->data4; - if ((sprite->data7 & 1) && sprite->data4 != 0) - sprite->data4--; - r4 = gSineTable[(u8)sprite->data3]; - r1 = gSineTable[(u8)(sprite->data3 + 64)]; + sprite->data[3] -= sprite->data[4]; + if ((sprite->data[7] & 1) && sprite->data[4] != 0) + sprite->data[4]--; + r4 = gSineTable[(u8)sprite->data[3]]; + r1 = gSineTable[(u8)(sprite->data[3] + 64)]; SetOamMatrix(1, r1, r4, -r4, r1); break; case 2: sprite->oam.affineMode = 1; sprite->oam.matrixNum = 2; - sprite->data0 = 20; - sprite->data4 = 36; + sprite->data[0] = 20; + sprite->data[4] = 36; //fall through case 20: if (sprite->pos1.x <= 96) { sprite->pos1.x += 3; sprite->pos1.y -= 1; - sprite->pos2.y = -Sin((u8)sprite->data2, 24); - sprite->data2 += 4; + sprite->pos2.y = -Sin((u8)sprite->data[2], 24); + sprite->data[2] += 4; } - sprite->data3 -= sprite->data4; - if ((sprite->data7 & 1) && sprite->data4 != 0) - sprite->data4--; - r4 = gSineTable[(u8)sprite->data3]; - r1 = gSineTable[(u8)(sprite->data3 + 64)]; + sprite->data[3] -= sprite->data[4]; + if ((sprite->data[7] & 1) && sprite->data[4] != 0) + sprite->data[4]--; + r4 = gSineTable[(u8)sprite->data[3]]; + r1 = gSineTable[(u8)(sprite->data[3] + 64)]; SetOamMatrix(2, r1, r4, -r4, r1); break; } @@ -2815,27 +2815,27 @@ static void sub_813E4B8(struct Sprite *sprite) u16 r2; u16 r1; - sprite->data7++; - if (sprite->data7 & 1) + sprite->data[7]++; + if (sprite->data[7] & 1) sprite->invisible = FALSE; else sprite->invisible = TRUE; - if (sprite->data2 >= 64) + if (sprite->data[2] >= 64) { DestroySprite(sprite); return; } - sprite->data2 += 2; - r4 = Sin((u8)sprite->data2, 40); - sprite->pos2.x = Cos((u8)(sprite->data0 * 32), r4); - sprite->pos2.y = Sin((u8)(sprite->data0 * 32), r4); - if (sprite->data0 == 0) - { - sprite->data3 -= sprite->data1; - if ((sprite->data7 & 1) && sprite->data1 != 0) - sprite->data1--; - r2 = gSineTable[(u8)sprite->data3]; - r1 = gSineTable[(u8)(sprite->data3 + 64)]; + sprite->data[2] += 2; + r4 = Sin((u8)sprite->data[2], 40); + sprite->pos2.x = Cos((u8)(sprite->data[0] * 32), r4); + sprite->pos2.y = Sin((u8)(sprite->data[0] * 32), r4); + if (sprite->data[0] == 0) + { + sprite->data[3] -= sprite->data[1]; + if ((sprite->data[7] & 1) && sprite->data[1] != 0) + sprite->data[1]--; + r2 = gSineTable[(u8)sprite->data[3]]; + r1 = gSineTable[(u8)(sprite->data[3] + 64)]; SetOamMatrix(16, r1, r2, -r2, r1); } } @@ -2850,8 +2850,8 @@ static void sub_813E580(u16 x, u16 y) spriteId = CreateSprite(&gSpriteTemplate_840B0B0, x, y, 0); gSprites[spriteId].oam.affineMode = 1; gSprites[spriteId].oam.matrixNum = 16; - gSprites[spriteId].data0 = i; - gSprites[spriteId].data1 = 32; + gSprites[spriteId].data[0] = i; + gSprites[spriteId].data[1] = 32; } } @@ -2863,16 +2863,16 @@ static void sub_813E5E0(struct Sprite *sprite) } else { - sprite->invisible = gSprites[sprite->data0].invisible; - if (sprite->data7 < 12) - sprite->data7++; - sprite->data6 += 4; - sprite->pos1.x = sprite->data4 + gSineTable[(u8)(sprite->data3 + 64)] * sprite->data6 / 256; + sprite->invisible = gSprites[sprite->data[0]].invisible; + if (sprite->data[7] < 12) + sprite->data[7]++; + sprite->data[6] += 4; + sprite->pos1.x = sprite->data[4] + gSineTable[(u8)(sprite->data[3] + 64)] * sprite->data[6] / 256; //This useless '+ 0' is needed to make the asm match - sprite->pos1.y = sprite->data5 + gSineTable[(u8)(sprite->data3 + 0)] * sprite->data6 / 256; - sprite->pos2.y = gSineTable[(u8)(sprite->data1 + 0)] * sprite->data7 / 256; - sprite->data1 += 16; - if (sprite->pos1.y > sprite->data2) + sprite->pos1.y = sprite->data[5] + gSineTable[(u8)(sprite->data[3] + 0)] * sprite->data[6] / 256; + sprite->pos2.y = gSineTable[(u8)(sprite->data[1] + 0)] * sprite->data[7] / 256; + sprite->data[1] += 16; + if (sprite->pos1.y > sprite->data[2]) DestroySprite(sprite); } } @@ -2890,15 +2890,15 @@ static void sub_813E6C0(struct Sprite *sprite) } else { - sprite->data7++; + sprite->data[7]++; sprite->invisible = TRUE; - if (gSprites[sprite->data0].data0 == 1 && !(sprite->data7 & 3)) + if (gSprites[sprite->data[0]].data[0] == 1 && !(sprite->data[7] & 3)) { - var1 = sprite->data1 + gSprites[sprite->data0].pos1.x; - var2 = sprite->data2 + gSprites[sprite->data0].pos1.y; + var1 = sprite->data[1] + gSprites[sprite->data[0]].pos1.x; + var2 = sprite->data[2] + gSprites[sprite->data[0]].pos1.y; for (i = 0; i < 3; i++) { - u8 r3 = gSprites[sprite->data0].subpriority - 1; + u8 r3 = gSprites[sprite->data[0]].subpriority - 1; //Make redundant copies of these variables to get the asm to match s16 _var1 = var1; s16 _var2 = var2; @@ -2906,13 +2906,13 @@ static void sub_813E6C0(struct Sprite *sprite) spriteId = CreateSprite(&gSpriteTemplate_840B0DC, _var1, _var2, r3); if (spriteId != 64) { - gSprites[spriteId].data0 = sprite->data0; - gSprites[spriteId].data1 = (((sprite->data7 >> 2) & 7) << 5) + i * 85; - gSprites[spriteId].data2 = sprite->data3; - gSprites[spriteId].data3 = 104; - gSprites[spriteId].data4 = var1; - gSprites[spriteId].data5 = var2; - gSprites[spriteId].data6 = 0; + gSprites[spriteId].data[0] = sprite->data[0]; + gSprites[spriteId].data[1] = (((sprite->data[7] >> 2) & 7) << 5) + i * 85; + gSprites[spriteId].data[2] = sprite->data[3]; + gSprites[spriteId].data[3] = 104; + gSprites[spriteId].data[4] = var1; + gSprites[spriteId].data[5] = var2; + gSprites[spriteId].data[6] = 0; } } } @@ -2926,10 +2926,10 @@ static void sub_813E7C0(u8 a) spriteId = CreateSprite(&gSpriteTemplate_840B0F4, 0, 0, 0); if (spriteId != 64) { - gSprites[spriteId].data0 = a; - gSprites[spriteId].data1 = -12; - gSprites[spriteId].data2 = 0; - gSprites[spriteId].data3 = 136; + gSprites[spriteId].data[0] = a; + gSprites[spriteId].data[1] = -12; + gSprites[spriteId].data[2] = 0; + gSprites[spriteId].data[3] = 136; } } @@ -2941,20 +2941,20 @@ static void sub_813E804(struct Sprite *sprite) } else { - sprite->invisible = gSprites[sprite->data0].invisible; - sprite->data7++; - if (sprite->data3 < 40) - sprite->data3 += 2; + sprite->invisible = gSprites[sprite->data[0]].invisible; + sprite->data[7]++; + if (sprite->data[3] < 40) + sprite->data[3] += 2; //This useless '+ 0' is needed to make the asm match - sprite->pos1.x = gSprites[sprite->data0].pos1.x + gSprites[sprite->data0].pos2.x + gSineTable[(u8)(sprite->data1 + 64)] * sprite->data3 / 256; - sprite->pos1.y = gSprites[sprite->data0].pos1.y + gSprites[sprite->data0].pos2.y + gSineTable[(u8)(sprite->data1 + 0)] * sprite->data3 / 512; - sprite->data1 += 2; - sprite->pos2.y = gSineTable[(u8)(sprite->data2 + 0)] / 32; - sprite->data2 += 8; - if ((sprite->data1 & 0xFF) < 128) - sprite->subpriority = gSprites[sprite->data0].subpriority - 1; + sprite->pos1.x = gSprites[sprite->data[0]].pos1.x + gSprites[sprite->data[0]].pos2.x + gSineTable[(u8)(sprite->data[1] + 64)] * sprite->data[3] / 256; + sprite->pos1.y = gSprites[sprite->data[0]].pos1.y + gSprites[sprite->data[0]].pos2.y + gSineTable[(u8)(sprite->data[1] + 0)] * sprite->data[3] / 512; + sprite->data[1] += 2; + sprite->pos2.y = gSineTable[(u8)(sprite->data[2] + 0)] / 32; + sprite->data[2] += 8; + if ((sprite->data[1] & 0xFF) < 128) + sprite->subpriority = gSprites[sprite->data[0]].subpriority - 1; else - sprite->subpriority = gSprites[sprite->data0].subpriority + 1; + sprite->subpriority = gSprites[sprite->data[0]].subpriority + 1; } } @@ -2968,8 +2968,8 @@ static void sub_813E930(u8 a) spriteId = CreateSprite(&gSpriteTemplate_840B124, gSprites[a].pos1.x, gSprites[a].pos1.y, 0); if (spriteId != 64) { - gSprites[spriteId].data0 = a; - gSprites[spriteId].data1 = i * 32; + gSprites[spriteId].data[0] = a; + gSprites[spriteId].data[1] = i * 32; } } } @@ -2985,17 +2985,17 @@ static void sub_813E980(struct Sprite *sprite) u8 r0; u16 matrixNum; - sprite->invisible = gSprites[sprite->data0].invisible; - sprite->data7++; - sprite->data6 += 8; - sprite->pos1.x = sprite->data4 + gSineTable[(u8)(sprite->data3 + 64)] * sprite->data6 / 256; - sprite->pos1.y = sprite->data5 + gSineTable[(u8)(sprite->data3 + 0)] * sprite->data6 / 256; - r0 = sprite->data6 / 16; + sprite->invisible = gSprites[sprite->data[0]].invisible; + sprite->data[7]++; + sprite->data[6] += 8; + sprite->pos1.x = sprite->data[4] + gSineTable[(u8)(sprite->data[3] + 64)] * sprite->data[6] / 256; + sprite->pos1.y = sprite->data[5] + gSineTable[(u8)(sprite->data[3] + 0)] * sprite->data[6] / 256; + r0 = sprite->data[6] / 16; if (r0 > 9) r0 = 9; matrixNum = (r0 + 18) & 31; sprite->oam.matrixNum = matrixNum; - if (sprite->data6 > 160) + if (sprite->data[6] > 160) DestroySprite(sprite); } } @@ -3012,26 +3012,26 @@ static void sub_813EA60(struct Sprite *sprite) } else { - sprite->data7++; + sprite->data[7]++; sprite->invisible = TRUE; - if (gSprites[sprite->data0].data0 == 1) + if (gSprites[sprite->data[0]].data[0] == 1) { - r6 = (sprite->data7 & 1); + r6 = (sprite->data[7] & 1); if (!r6) { - r1 = sprite->data1 + gSprites[sprite->data0].pos1.x; - r2 = sprite->data2 + gSprites[sprite->data0].pos1.y; - spriteId = CreateSprite(&gSpriteTemplate_840B150, r1, r2, gSprites[sprite->data0].subpriority + 1); + r1 = sprite->data[1] + gSprites[sprite->data[0]].pos1.x; + r2 = sprite->data[2] + gSprites[sprite->data[0]].pos1.y; + spriteId = CreateSprite(&gSpriteTemplate_840B150, r1, r2, gSprites[sprite->data[0]].subpriority + 1); if (spriteId != 64) { gSprites[spriteId].oam.affineMode = 3; gSprites[spriteId].oam.matrixNum = 18; CalcCenterToCornerVec(&gSprites[spriteId], 0, 1, 3); - gSprites[spriteId].data0 = sprite->data0; - gSprites[spriteId].data3 = gUnknown_0840B168[(sprite->data7 >> 1) & 7]; - gSprites[spriteId].data4 = r1; - gSprites[spriteId].data5 = r2; - gSprites[spriteId].data6 = r6; + gSprites[spriteId].data[0] = sprite->data[0]; + gSprites[spriteId].data[3] = gUnknown_0840B168[(sprite->data[7] >> 1) & 7]; + gSprites[spriteId].data[4] = r1; + gSprites[spriteId].data[5] = r2; + gSprites[spriteId].data[6] = r6; } } } @@ -3046,10 +3046,10 @@ static void InitIntroTorchicAttackAnim(u8 a) spriteId = CreateSprite(&gSpriteTemplate_840B170, 0, 0, 0); if (spriteId != 64) { - gSprites[spriteId].data0 = a; - gSprites[spriteId].data1 = 0; - gSprites[spriteId].data2 = 8; - gSprites[spriteId].data3 = 24; + gSprites[spriteId].data[0] = a; + gSprites[spriteId].data[1] = 0; + gSprites[spriteId].data[2] = 8; + gSprites[spriteId].data[3] = 24; } for (i = 0; i < 10; i++) { @@ -3065,14 +3065,14 @@ static void sub_813EBBC(struct Sprite *sprite) } else { - sprite->invisible = gSprites[sprite->data0].invisible; - sprite->data7 += 1; - sprite->data6 += 8; - sprite->pos1.x = sprite->data4 + gSineTable[(u8)(sprite->data3 + 64)] * sprite->data6 / 256; - sprite->pos1.y = sprite->data5 + gSineTable[(u8)(sprite->data3 + 0)] * sprite->data6 / 256; - sprite->pos2.y = gSineTable[(u8)(sprite->data1 + 0)] / 64; - sprite->data1 += 16; - if (sprite->pos1.y < sprite->data2) + sprite->invisible = gSprites[sprite->data[0]].invisible; + sprite->data[7] += 1; + sprite->data[6] += 8; + sprite->pos1.x = sprite->data[4] + gSineTable[(u8)(sprite->data[3] + 64)] * sprite->data[6] / 256; + sprite->pos1.y = sprite->data[5] + gSineTable[(u8)(sprite->data[3] + 0)] * sprite->data[6] / 256; + sprite->pos2.y = gSineTable[(u8)(sprite->data[1] + 0)] / 64; + sprite->data[1] += 16; + if (sprite->pos1.y < sprite->data[2]) DestroySprite(sprite); } } @@ -3090,34 +3090,34 @@ static void sub_813EC90(struct Sprite *sprite) } else { - sprite->data7++; + sprite->data[7]++; sprite->invisible = TRUE; - if (gSprites[sprite->data0].data0 == 1) + if (gSprites[sprite->data[0]].data[0] == 1) { - r6 = sprite->data7 & 1; + r6 = sprite->data[7] & 1; if (!r6) { - r1 = sprite->data1 + gSprites[sprite->data0].pos1.x; - r2 = sprite->data2 + gSprites[sprite->data0].pos1.y; - spriteId = CreateSprite(&gSpriteTemplate_840B1B0, r1, r2, gSprites[sprite->data0].subpriority + 1); + r1 = sprite->data[1] + gSprites[sprite->data[0]].pos1.x; + r2 = sprite->data[2] + gSprites[sprite->data[0]].pos1.y; + spriteId = CreateSprite(&gSpriteTemplate_840B1B0, r1, r2, gSprites[sprite->data[0]].subpriority + 1); if (spriteId != 64) { gSprites[spriteId].oam.affineMode = 3; gSprites[spriteId].oam.matrixNum = 17; CalcCenterToCornerVec(&gSprites[spriteId], 0, 1, 3); - gSprites[spriteId].data0 = sprite->data0; - gSprites[spriteId].data1 = ((sprite->data7 >> 2) & 7) << 5; - gSprites[spriteId].data2 = sprite->data3; - gSprites[spriteId].data3 = 232; - gSprites[spriteId].data4 = r1; - gSprites[spriteId].data5 = r2; - gSprites[spriteId].data6 = r6; + gSprites[spriteId].data[0] = sprite->data[0]; + gSprites[spriteId].data[1] = ((sprite->data[7] >> 2) & 7) << 5; + gSprites[spriteId].data[2] = sprite->data[3]; + gSprites[spriteId].data[3] = 232; + gSprites[spriteId].data[4] = r1; + gSprites[spriteId].data[5] = r2; + gSprites[spriteId].data[6] = r6; } } - if (sprite->data6 < 112) - sprite->data6 += 4; + if (sprite->data[6] < 112) + sprite->data[6] += 4; } - foo = 256 - gSineTable[(u8)sprite->data6] / 2; + foo = 256 - gSineTable[(u8)sprite->data[6]] / 2; SetOamMatrix(17, foo, 0, 0, foo); } } @@ -3129,10 +3129,10 @@ static void InitIntroMudkipAttackAnim(u8 a) spriteId = CreateSprite(&gSpriteTemplate_840B1C8, 0, 0, 0); if (spriteId != 64) { - gSprites[spriteId].data0 = a; - gSprites[spriteId].data1 = 0; - gSprites[spriteId].data2 = 12; - gSprites[spriteId].data3 = 24; + gSprites[spriteId].data[0] = a; + gSprites[spriteId].data[1] = 0; + gSprites[spriteId].data[2] = 12; + gSprites[spriteId].data[3] = 24; } } @@ -3141,8 +3141,8 @@ static void sub_813EDFC(struct Sprite *sprite) u16 foo; //I'm not sure why a switch statement was used here. - //if (sprite->data0 != 1) would have been more appropriate. - switch (sprite->data0) + //if (sprite->data[0] != 1) would have been more appropriate. + switch (sprite->data[0]) { case 0: default: @@ -3150,23 +3150,23 @@ static void sub_813EDFC(struct Sprite *sprite) sprite->oam.affineMode = 3; sprite->oam.matrixNum = 18; CalcCenterToCornerVec(sprite, 0, 3, 3); - sprite->data1 = 0; - sprite->data0 = 1; + sprite->data[1] = 0; + sprite->data[0] = 1; //fall through case 1: break; } - sprite->data7++; - if (sprite->data7 & 1) + sprite->data[7]++; + if (sprite->data[7] & 1) { sprite->invisible = TRUE; } else { sprite->invisible = FALSE; - if (sprite->data1 < 64) - sprite->data1++; + if (sprite->data[1] < 64) + sprite->data[1]++; } - foo = 256 - gSineTable[(u8)sprite->data1] / 2; + foo = 256 - gSineTable[(u8)sprite->data[1]] / 2; SetOamMatrix(18, foo, 0, 0, foo); } diff --git a/src/scene/intro_credits_graphics.c b/src/scene/intro_credits_graphics.c index cd0589af8..a150e8dc9 100755 --- a/src/scene/intro_credits_graphics.c +++ b/src/scene/intro_credits_graphics.c @@ -418,11 +418,11 @@ void sub_814910C(struct Sprite *sprite) } else { - s32 var = ((sprite->pos1.x << 16) | (u16)sprite->data2) + (u16)sprite->data1; + s32 var = ((sprite->pos1.x << 16) | (u16)sprite->data[2]) + (u16)sprite->data[1]; sprite->pos1.x = var >> 16; - sprite->data2 = var; + sprite->data[2] = var; if (sprite->pos1.x > 255) sprite->pos1.x = 0xFFE0; - if (sprite->data0) + if (sprite->data[0]) { sprite->pos2.y = -(gUnknown_02039358 + gUnknown_0203935A); } @@ -447,9 +447,9 @@ void sub_8149174(u8 a, struct UnknownStruct1 *b, const union AnimCmd *const *c, gSprites[sprite].oam.paletteNum = 0; gSprites[sprite].anims = c; StartSpriteAnim(&gSprites[sprite], b[i].var0_0); - gSprites[sprite].data0 = a; - gSprites[sprite].data1 = b[i].var4; - gSprites[sprite].data2 = 0; + gSprites[sprite].data[0] = a; + gSprites[sprite].data[1] = b[i].var4; + gSprites[sprite].data[2] = 0; } } @@ -474,11 +474,11 @@ void nullsub_82() void sub_81492A0(struct Sprite* sprite) { - sprite->invisible = gSprites[sprite->data0].invisible; - sprite->pos1.x = gSprites[sprite->data0].pos1.x; - sprite->pos1.y = gSprites[sprite->data0].pos1.y + 8; - sprite->pos2.x = gSprites[sprite->data0].pos2.x; - sprite->pos2.y = gSprites[sprite->data0].pos2.y; + sprite->invisible = gSprites[sprite->data[0]].invisible; + sprite->pos1.x = gSprites[sprite->data[0]].pos1.x; + sprite->pos1.y = gSprites[sprite->data[0]].pos1.y + 8; + sprite->pos2.x = gSprites[sprite->data[0]].pos2.x; + sprite->pos2.y = gSprites[sprite->data[0]].pos2.y; } @@ -487,7 +487,7 @@ u8 intro_create_brendan_sprite(s16 a, s16 b) { u8 sprite = CreateSprite(&gSpriteTemplate_8416CDC, a, b, 0); u8 brendan = CreateSprite(&gSpriteTemplate_Brendan, a, b + 8, 1); - gSprites[brendan].data0 = sprite; + gSprites[brendan].data[0] = sprite; return sprite; } @@ -495,7 +495,7 @@ u8 intro_create_may_sprite(s16 a, s16 b) { u8 sprite = CreateSprite(&gSpriteTemplate_8416CF4, a, b, 0); u8 may = CreateSprite(&gSpriteTemplate_May, a, b + 8, 1); - gSprites[may].data0 = sprite; + gSprites[may].data[0] = sprite; return sprite; } @@ -505,17 +505,17 @@ void nullsub_83() void sub_81493C4(struct Sprite* sprite) { - sprite->invisible = gSprites[sprite->data0].invisible; - sprite->pos1.y = gSprites[sprite->data0].pos1.y; - sprite->pos2.x = gSprites[sprite->data0].pos2.x; - sprite->pos2.y = gSprites[sprite->data0].pos2.y; + sprite->invisible = gSprites[sprite->data[0]].invisible; + sprite->pos1.y = gSprites[sprite->data[0]].pos1.y; + sprite->pos2.x = gSprites[sprite->data[0]].pos2.x; + sprite->pos2.y = gSprites[sprite->data[0]].pos2.y; } u8 intro_create_latios_sprite(s16 a, s16 b) { u8 sprite = CreateSprite(&gSpriteTemplate_8416D7C, a - 32, b, 2); u8 latios = CreateSprite(&gSpriteTemplate_8416D7C, a + 32, b, 2); - gSprites[latios].data0 = sprite; + gSprites[latios].data[0] = sprite; StartSpriteAnim(&gSprites[latios], 1); gSprites[latios].callback = &sub_81493C4; return sprite; @@ -525,7 +525,7 @@ u8 intro_create_latias_sprite(s16 a, s16 b) { u8 sprite = CreateSprite(&gSpriteTemplate_8416D94, a - 32, b, 2); u8 latios = CreateSprite(&gSpriteTemplate_8416D94, a + 32, b, 2); - gSprites[latios].data0 = sprite; + gSprites[latios].data[0] = sprite; StartSpriteAnim(&gSprites[latios], 1); gSprites[latios].callback = &sub_81493C4; return sprite; diff --git a/src/scene/title_screen.c b/src/scene/title_screen.c index 2503b0654..f158500fe 100644 --- a/src/scene/title_screen.c +++ b/src/scene/title_screen.c @@ -360,7 +360,7 @@ static void UpdateLegendaryMarkingColor(u8); void SpriteCallback_VersionBannerLeft(struct Sprite *sprite) { - struct Task *task = &gTasks[sprite->data1]; + struct Task *task = &gTasks[sprite->data[1]]; if (task->data[1] != 0) { @@ -384,7 +384,7 @@ void SpriteCallback_VersionBannerLeft(struct Sprite *sprite) void SpriteCallback_VersionBannerRight(struct Sprite *sprite) { - struct Task *task = &gTasks[sprite->data1]; + struct Task *task = &gTasks[sprite->data[1]]; if (task->data[1] != 0) { @@ -405,11 +405,11 @@ void SpriteCallback_VersionBannerRight(struct Sprite *sprite) void SpriteCallback_PressStartCopyrightBanner(struct Sprite *sprite) { - if (sprite->data0 == 1) + if (sprite->data[0] == 1) { - sprite->data1++; + sprite->data[1]++; //Alternate between hidden and shown every 16th frame - if (sprite->data1 & 16) + if (sprite->data[1] & 16) sprite->invisible = FALSE; else sprite->invisible = TRUE; @@ -429,7 +429,7 @@ static void CreatePressStartBanner(s16 x, s16 y) { spriteId = CreateSprite(&sStartCopyrightBannerSpriteTemplate, x, y, 0); StartSpriteAnim(&gSprites[spriteId], i); - gSprites[spriteId].data0 = 1; + gSprites[spriteId].data[0] = 1; } } #elif GERMAN @@ -554,27 +554,27 @@ void SpriteCallback_PokemonLogoShine(struct Sprite *sprite) { if (gTasks[gUnknown_0202F7E4].data[1] == 0 && sprite->pos1.x < 272) { - if (sprite->data0) //Flash background + if (sprite->data[0]) //Flash background { u16 backgroundColor; if (sprite->pos1.x < DISPLAY_WIDTH / 2) { //Brighten background color - if (sprite->data1 < 31) - sprite->data1++; - if (sprite->data1 < 31) - sprite->data1++; + if (sprite->data[1] < 31) + sprite->data[1]++; + if (sprite->data[1] < 31) + sprite->data[1]++; } else { //Darken background color - if (sprite->data1 != 0) - sprite->data1--; - if (sprite->data1 != 0) - sprite->data1--; + if (sprite->data[1] != 0) + sprite->data[1]--; + if (sprite->data[1] != 0) + sprite->data[1]--; } - backgroundColor = _RGB(sprite->data1, sprite->data1, sprite->data1); + backgroundColor = _RGB(sprite->data[1], sprite->data[1], sprite->data[1]); gPlttBufferFaded[0] = backgroundColor; gPlttBufferFaded[PLTT_BUFFER_INDEX] = backgroundColor; } @@ -593,7 +593,7 @@ static void StartPokemonLogoShine(bool8 flashBackground) u8 spriteId = CreateSprite(&sPokemonLogoShineSpriteTemplate, 0, 68, 0); gSprites[spriteId].oam.objMode = 2; - gSprites[spriteId].data0 = flashBackground; + gSprites[spriteId].data[0] = flashBackground; } static void VBlankCB(void) @@ -758,12 +758,12 @@ static void Task_TitleScreenPhase1(u8 taskId) //Create left side of version banner spriteId = CreateSprite(&sVersionBannerLeftSpriteTemplate, VERSION_BANNER_LEFT_X, VERSION_BANNER_Y, 0); gSprites[spriteId].invisible = TRUE; - gSprites[spriteId].data1 = taskId; + gSprites[spriteId].data[1] = taskId; //Create right side of version banner spriteId = CreateSprite(&sVersionBannerRightSpriteTemplate, VERSION_BANNER_RIGHT_X, VERSION_BANNER_Y, 0); gSprites[spriteId].invisible = TRUE; - gSprites[spriteId].data1 = taskId; + gSprites[spriteId].data[1] = taskId; gTasks[taskId].data[5] = 88; gTasks[taskId].tCounter = 144; -- cgit v1.2.3 From 79650185e2af1748a9728f6e9209d64f93cdb050 Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Sat, 18 Nov 2017 22:01:16 -0500 Subject: false positive --- src/field/field_tasks.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/field/field_tasks.c b/src/field/field_tasks.c index 95b8b749b..e938a57ef 100644 --- a/src/field/field_tasks.c +++ b/src/field/field_tasks.c @@ -197,7 +197,7 @@ const struct MetatileOffset *sub_80695E0(const struct MetatileOffset a0[][2], s8 void sub_8069638(const struct MetatileOffset offsets[][2], s16 x, s16 y, bool32 flag) { const struct MetatileOffset *offsetData = sub_80695E0(offsets, MapGridGetMetatileBehaviorAt(x, y)); - const struct MetatileOffset *offsetdata[2] = offsetData; + const struct MetatileOffset *offsetdata2 = offsetData; if (offsetData != NULL) { MapGridSetMetatileIdAt(x + offsetData[0].x, y + offsetData[0].y, offsetData[0].tileId); @@ -205,10 +205,10 @@ void sub_8069638(const struct MetatileOffset offsets[][2], s16 x, s16 y, bool32 { CurrentMapDrawMetatileAt(x + offsetData[0].x, y + offsetData[0].y); } - MapGridSetMetatileIdAt(x + offsetdata[2][1].x, y + offsetdata[2][1].y, offsetdata[2][1].tileId); + MapGridSetMetatileIdAt(x + offsetdata2[1].x, y + offsetdata2[1].y, offsetdata2[1].tileId); if (flag) { - CurrentMapDrawMetatileAt(x + offsetdata[2][1].x, y + offsetdata[2][1].y); + CurrentMapDrawMetatileAt(x + offsetdata2[1].x, y + offsetdata2[1].y); } } } -- cgit v1.2.3 From 9baa39f7082acfb1eb8b75603e440773504ad206 Mon Sep 17 00:00:00 2001 From: sceptillion <33798691+sceptillion@users.noreply.github.com> Date: Sat, 18 Nov 2017 23:35:08 -0800 Subject: decompile fldeff_recordmixing --- src/field/fldeff_recordmixing.c | 82 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 src/field/fldeff_recordmixing.c (limited to 'src') diff --git a/src/field/fldeff_recordmixing.c b/src/field/fldeff_recordmixing.c new file mode 100644 index 000000000..e7a1f20c4 --- /dev/null +++ b/src/field/fldeff_recordmixing.c @@ -0,0 +1,82 @@ +#include "global.h" +#include "field_map_obj.h" +#include "sprite.h" + +extern const struct OamData gFieldOamData_32x8; + +static const u8 sSpriteImage_83D26C0[] = INCBIN_U8("graphics/unknown_sprites/83D2860/0.4bpp"); +static const u8 sSpriteImage_83D2740[] = INCBIN_U8("graphics/unknown_sprites/83D2860/1.4bpp"); +static const u8 sSpriteImage_83D27C0[] = INCBIN_U8("graphics/unknown_sprites/83D2860/2.4bpp"); +static const u16 sPalette_3D2840[] = INCBIN_U16("graphics/unknown/unknown_3D2840.gbapal"); + + +static const struct SpriteFrameImage sSpriteImageTable_83FD950[] = +{ + { sSpriteImage_83D26C0, sizeof(sSpriteImage_83D26C0) }, + { sSpriteImage_83D2740, sizeof(sSpriteImage_83D26C0) }, + { sSpriteImage_83D27C0, sizeof(sSpriteImage_83D26C0) }, +}; + +static const struct SpritePalette sUnknown_083D2878 = { sPalette_3D2840, 0x1000 }; + +static const union AnimCmd sSpriteAnim_83D2880[] = +{ + ANIMCMD_FRAME(0, 30), + ANIMCMD_FRAME(1, 30), + ANIMCMD_FRAME(2, 30), + ANIMCMD_JUMP(0), +}; + +static const union AnimCmd *const sSpriteAnimTable_83D2890[] = +{ + sSpriteAnim_83D2880, +}; + +static const struct SpriteTemplate sSpriteTemplate_83D2894 = +{ + .tileTag = 0xFFFF, + .paletteTag = 0x1000, + .oam = &gFieldOamData_32x8, + .anims = sSpriteAnimTable_83D2890, + .images = sSpriteImageTable_83FD950, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +u8 CreateRecordMixingSprite(void) +{ + u8 spriteId; + + LoadSpritePalette(&sUnknown_083D2878); + + spriteId = CreateSprite(&sSpriteTemplate_83D2894, 0, 0, 82); + + if (spriteId == MAX_SPRITES) + { + return MAX_SPRITES; + } + else + { + struct Sprite *sprite = &gSprites[spriteId]; + sub_8060388(16, 13, &sprite->pos1.x, &sprite->pos1.y); + sprite->coordOffsetEnabled = TRUE; + sprite->pos1.x += 16; + sprite->pos1.y += 2; + } + + return spriteId; +} + +void DestroyRecordMixingSprite(void) +{ + int i; + + for (i = 0; i < MAX_SPRITES; i++) + { + if (gSprites[i].template == &sSpriteTemplate_83D2894) + { + FreeSpritePalette(&gSprites[i]); + DestroySprite(&gSprites[i]); + } + } +} -- cgit v1.2.3 From 557fd1958dca6dfed792e584bd16e47282697963 Mon Sep 17 00:00:00 2001 From: sceptillion <33798691+sceptillion@users.noreply.github.com> Date: Sun, 19 Nov 2017 00:20:19 -0800 Subject: decompile fldeff_poison --- src/field/fldeff_poison.c | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 src/field/fldeff_poison.c (limited to 'src') diff --git a/src/field/fldeff_poison.c b/src/field/fldeff_poison.c new file mode 100644 index 000000000..b751ee564 --- /dev/null +++ b/src/field/fldeff_poison.c @@ -0,0 +1,43 @@ +#include "global.h" +#include "task.h" +#include "songs.h" +#include "sound.h" + +static void Task_FieldPoisonEffect(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + + switch (data[0]) + { + case 0: + data[1] += 2; + if (data[1] > 8) + { + data[0]++; + } + break; + case 1: + data[1] -= 2; + if (data[1] == 0) + { + data[0]++; + } + break; + case 2: + DestroyTask(taskId); + return; + } + + REG_MOSAIC = (data[1] << 4) | data[1]; +} + +void DoFieldPoisonEffect() +{ + PlaySE(SE_DOKU); + CreateTask(Task_FieldPoisonEffect, 80); +} + +bool8 FieldPoisonEffectIsRunning(void) +{ + return FuncIsActiveTask(Task_FieldPoisonEffect); +} -- cgit v1.2.3 From 04c85d0e4fa13f08a98d343333d85a8815757705 Mon Sep 17 00:00:00 2001 From: sceptillion <33798691+sceptillion@users.noreply.github.com> Date: Sun, 19 Nov 2017 00:22:01 -0800 Subject: int to s32 --- src/field/fldeff_recordmixing.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/field/fldeff_recordmixing.c b/src/field/fldeff_recordmixing.c index e7a1f20c4..c0e3cd515 100644 --- a/src/field/fldeff_recordmixing.c +++ b/src/field/fldeff_recordmixing.c @@ -69,7 +69,7 @@ u8 CreateRecordMixingSprite(void) void DestroyRecordMixingSprite(void) { - int i; + s32 i; for (i = 0; i < MAX_SPRITES; i++) { -- cgit v1.2.3 From c65aa069fa1d8b8e4e668f470d502536013c6a1e Mon Sep 17 00:00:00 2001 From: sceptillion <33798691+sceptillion@users.noreply.github.com> Date: Sun, 19 Nov 2017 00:27:51 -0800 Subject: headers for fldeff_poison and fldeff_recordmixing --- src/battle/battle_setup.c | 2 +- src/engine/record_mixing.c | 2 +- src/field/field_poison.c | 2 +- src/field/fldeff_poison.c | 4 ++-- 4 files changed, 5 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/battle/battle_setup.c b/src/battle/battle_setup.c index 8327ed59d..dab87b462 100644 --- a/src/battle/battle_setup.c +++ b/src/battle/battle_setup.c @@ -11,7 +11,7 @@ #include "field_player_avatar.h" #include "field_weather.h" #include "fieldmap.h" -#include "fldeff_80C5CD4.h" +#include "fldeff_poison.h" #include "main.h" #include "map_constants.h" #include "metatile_behavior.h" diff --git a/src/engine/record_mixing.c b/src/engine/record_mixing.c index b30d57a4d..cf51bec9e 100644 --- a/src/engine/record_mixing.c +++ b/src/engine/record_mixing.c @@ -5,7 +5,7 @@ #include "daycare.h" #include "dewford_trend.h" #include "event_data.h" -#include "fldeff_80C5CD4.h" +#include "fldeff_recordmixing.h" #include "item.h" #include "items.h" #include "load_save.h" diff --git a/src/field/field_poison.c b/src/field/field_poison.c index b6ff12ff9..74d70cb36 100644 --- a/src/field/field_poison.c +++ b/src/field/field_poison.c @@ -1,7 +1,7 @@ #include "global.h" #include "field_poison.h" #include "field_message_box.h" -#include "fldeff_80C5CD4.h" +#include "fldeff_poison.h" #include "pokemon.h" #include "pokemon_summary_screen.h" #include "script.h" diff --git a/src/field/fldeff_poison.c b/src/field/fldeff_poison.c index b751ee564..8f4edb215 100644 --- a/src/field/fldeff_poison.c +++ b/src/field/fldeff_poison.c @@ -31,13 +31,13 @@ static void Task_FieldPoisonEffect(u8 taskId) REG_MOSAIC = (data[1] << 4) | data[1]; } -void DoFieldPoisonEffect() +void DoFieldPoisonEffect(void) { PlaySE(SE_DOKU); CreateTask(Task_FieldPoisonEffect, 80); } -bool8 FieldPoisonEffectIsRunning(void) +bool32 FieldPoisonEffectIsRunning(void) { return FuncIsActiveTask(Task_FieldPoisonEffect); } -- cgit v1.2.3 From 58614a9a09b7066f37e6ee4715f139c04ad59d5a Mon Sep 17 00:00:00 2001 From: sceptillion <33798691+sceptillion@users.noreply.github.com> Date: Sun, 19 Nov 2017 00:30:55 -0800 Subject: include headers in corresponding source files --- src/field/fldeff_poison.c | 1 + src/field/fldeff_recordmixing.c | 1 + 2 files changed, 2 insertions(+) (limited to 'src') diff --git a/src/field/fldeff_poison.c b/src/field/fldeff_poison.c index 8f4edb215..0a0cf5539 100644 --- a/src/field/fldeff_poison.c +++ b/src/field/fldeff_poison.c @@ -1,4 +1,5 @@ #include "global.h" +#include "fldeff_poison.h" #include "task.h" #include "songs.h" #include "sound.h" diff --git a/src/field/fldeff_recordmixing.c b/src/field/fldeff_recordmixing.c index c0e3cd515..88d5a9969 100644 --- a/src/field/fldeff_recordmixing.c +++ b/src/field/fldeff_recordmixing.c @@ -1,5 +1,6 @@ #include "global.h" #include "field_map_obj.h" +#include "fldeff_recordmixing.h" #include "sprite.h" extern const struct OamData gFieldOamData_32x8; -- cgit v1.2.3 From 41c347c815627e03d81625260e55835a9b592c00 Mon Sep 17 00:00:00 2001 From: sceptillion <33798691+sceptillion@users.noreply.github.com> Date: Sun, 19 Nov 2017 00:37:19 -0800 Subject: fix sizeof copy/paste error --- src/field/fldeff_recordmixing.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/field/fldeff_recordmixing.c b/src/field/fldeff_recordmixing.c index 88d5a9969..16cad58f8 100644 --- a/src/field/fldeff_recordmixing.c +++ b/src/field/fldeff_recordmixing.c @@ -14,8 +14,8 @@ static const u16 sPalette_3D2840[] = INCBIN_U16("graphics/unknown/unknown_3D2840 static const struct SpriteFrameImage sSpriteImageTable_83FD950[] = { { sSpriteImage_83D26C0, sizeof(sSpriteImage_83D26C0) }, - { sSpriteImage_83D2740, sizeof(sSpriteImage_83D26C0) }, - { sSpriteImage_83D27C0, sizeof(sSpriteImage_83D26C0) }, + { sSpriteImage_83D2740, sizeof(sSpriteImage_83D2740) }, + { sSpriteImage_83D27C0, sizeof(sSpriteImage_83D27C0) }, }; static const struct SpritePalette sUnknown_083D2878 = { sPalette_3D2840, 0x1000 }; -- cgit v1.2.3 From e0e5d070fa7a19235c6e8ba9b57b618ff86b8895 Mon Sep 17 00:00:00 2001 From: sceptillion <33798691+sceptillion@users.noreply.github.com> Date: Sun, 19 Nov 2017 01:31:09 -0800 Subject: decompile fldeff_secret_base_pc --- src/field/fldeff_secret_base_pc.c | 69 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 src/field/fldeff_secret_base_pc.c (limited to 'src') diff --git a/src/field/fldeff_secret_base_pc.c b/src/field/fldeff_secret_base_pc.c new file mode 100644 index 000000000..ead970b27 --- /dev/null +++ b/src/field/fldeff_secret_base_pc.c @@ -0,0 +1,69 @@ +#include "global.h" +#include "event_data.h" +#include "field_camera.h" +#include "field_effect.h" +#include "field_player_avatar.h" +#include "fieldmap.h" +#include "script.h" +#include "songs.h" +#include "sound.h" +#include "task.h" + +static void Task_SecretBasePCTurnOn(u8); + +u32 FldEff_SecretBasePCTurnOn(void) +{ + s16 x, y; + u8 taskId; + + GetXYCoordsOneStepInFrontOfPlayer(&x, &y); + taskId = CreateTask(Task_SecretBasePCTurnOn, 0); + gTasks[taskId].data[0] = x; + gTasks[taskId].data[1] = y; + gTasks[taskId].data[2] = 0; + + return 0; +} + +static void Task_SecretBasePCTurnOn(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + + switch (data[2]) + { + case 4: + case 12: + MapGridSetMetatileIdAt(data[0], data[1], 548); + CurrentMapDrawMetatileAt(data[0], data[1]); + break; + case 8: + case 16: + MapGridSetMetatileIdAt(data[0], data[1], 544); + CurrentMapDrawMetatileAt(data[0], data[1]); + break; + case 20: + MapGridSetMetatileIdAt(data[0], data[1], 548); + CurrentMapDrawMetatileAt(data[0], data[1]); + FieldEffectActiveListRemove(FLDEFF_SECRET_BASE_PC_TURN_ON); + EnableBothScriptContexts(); + DestroyTask(taskId); + return; + } + + data[2]++; +} + +void DoSecretBasePCTurnOffEffect(void) +{ + s16 x, y; + + GetXYCoordsOneStepInFrontOfPlayer(&x, &y); + PlaySE(SE_PC_OFF); + + if (!VarGet(VAR_0x4054)) + MapGridSetMetatileIdAt(x, y, 3616); + else + MapGridSetMetatileIdAt(x, y, 3617); + + CurrentMapDrawMetatileAt(x, y); +} -- cgit v1.2.3 From f3f3af1027ca1c0459e077f4dc98391bbbe821e4 Mon Sep 17 00:00:00 2001 From: sceptillion <33798691+sceptillion@users.noreply.github.com> Date: Sun, 19 Nov 2017 02:21:18 -0800 Subject: decompile fldeff_berrytree --- src/field/fldeff_berrytree.c | 56 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 src/field/fldeff_berrytree.c (limited to 'src') diff --git a/src/field/fldeff_berrytree.c b/src/field/fldeff_berrytree.c new file mode 100644 index 000000000..0763c0314 --- /dev/null +++ b/src/field/fldeff_berrytree.c @@ -0,0 +1,56 @@ +#include "global.h" +#include "field_map_obj.h" +#include "field_player_avatar.h" +#include "script.h" + +static void Task_WateringBerryTreeAnim_0(u8); +static void Task_WateringBerryTreeAnim_1(u8); +static void Task_WateringBerryTreeAnim_2(u8); +static void Task_WateringBerryTreeAnim_3(u8); + +static void Task_WateringBerryTreeAnim_0(u8 taskId) +{ + gTasks[taskId].func = Task_WateringBerryTreeAnim_1; +} + +static void Task_WateringBerryTreeAnim_1(u8 taskId) +{ + struct MapObject *mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; + if (!FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(mapObject) + || FieldObjectClearAnimIfSpecialAnimFinished(mapObject)) + { + sub_8059D08(player_get_direction_lower_nybble()); + FieldObjectSetSpecialAnim(mapObject, GetStepInPlaceDelay16AnimId(player_get_direction_lower_nybble())); + gTasks[taskId].func = Task_WateringBerryTreeAnim_2; + } +} + +static void Task_WateringBerryTreeAnim_2(u8 taskId) +{ + struct MapObject *mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; + if (FieldObjectClearAnimIfSpecialAnimFinished(mapObject)) + { + s16 value = gTasks[taskId].data[1]++; + + if (value < 10) + { + FieldObjectSetSpecialAnim(mapObject, GetStepInPlaceDelay16AnimId(player_get_direction_lower_nybble())); + } + else + { + gTasks[taskId].func = Task_WateringBerryTreeAnim_3; + } + } +} + +static void Task_WateringBerryTreeAnim_3(u8 taskId) +{ + SetPlayerAvatarTransitionFlags(sub_80597D0()); + DestroyTask(taskId); + EnableBothScriptContexts(); +} + +void DoWateringBerryTreeAnim(void) +{ + CreateTask(Task_WateringBerryTreeAnim_0, 80); +} -- cgit v1.2.3 From f4b39ff81d4387b4a29bad7d9bb0a223721773c9 Mon Sep 17 00:00:00 2001 From: sceptillion <33798691+sceptillion@users.noreply.github.com> Date: Sun, 19 Nov 2017 10:16:42 -0800 Subject: decompile fldeff_secretpower --- src/field/field_effect.c | 2 +- src/field/fldeff_cut.c | 2 - src/field/fldeff_secretpower.c | 304 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 305 insertions(+), 3 deletions(-) create mode 100644 src/field/fldeff_secretpower.c (limited to 'src') diff --git a/src/field/field_effect.c b/src/field/field_effect.c index e15dc906f..0ccbb6230 100644 --- a/src/field/field_effect.c +++ b/src/field/field_effect.c @@ -28,7 +28,7 @@ #define subsprite_table(ptr) {.subsprites = ptr, .subspriteCount = (sizeof ptr) / (sizeof(struct Subsprite))} -EWRAM_DATA u32 gFieldEffectArguments[8] = {0}; +EWRAM_DATA s32 gFieldEffectArguments[8] = {0}; const u32 gSpriteImage_839DC14[] = INCBIN_U32("graphics/birch_speech/birch.4bpp"); const u16 gBirchPalette[16] = INCBIN_U16("graphics/birch_speech/birch.gbapal"); diff --git a/src/field/fldeff_cut.c b/src/field/fldeff_cut.c index 6e7f14a8c..599c916a2 100644 --- a/src/field/fldeff_cut.c +++ b/src/field/fldeff_cut.c @@ -23,8 +23,6 @@ extern void (*gUnknown_03005CE4)(void); extern struct SpriteTemplate gSpriteTemplate_CutGrass; -extern struct MapPosition gUnknown_0203923C; - extern u8 gLastFieldPokeMenuOpened; extern u8 S_UseCut[]; diff --git a/src/field/fldeff_secretpower.c b/src/field/fldeff_secretpower.c new file mode 100644 index 000000000..fd1548c46 --- /dev/null +++ b/src/field/fldeff_secretpower.c @@ -0,0 +1,304 @@ +#include "global.h" +#include "event_data.h" +#include "fieldmap.h" +#include "field_effect.h" +#include "field_player_avatar.h" +#include "metatile_behavior.h" +#include "metatile_behaviors.h" +#include "overworld.h" +#include "pokemon_menu.h" +#include "rom6.h" +#include "script.h" +#include "secret_base.h" +#include "songs.h" +#include "sound.h" + +extern u8 gUnknown_081A2CE6[]; +extern u8 gUnknown_081A2D3E[]; +extern u8 gUnknown_081A2D96[]; + +extern struct SpriteTemplate gSpriteTemplate_83D2614; +extern struct SpriteTemplate gSpriteTemplate_83D262C; +extern struct SpriteTemplate gSpriteTemplate_83D2644; + +void sub_80C639C(void); +void sub_80C63E8(void); +void sub_80C6468(struct Sprite *); +void sub_80C6498(struct Sprite *); +void sub_80C64A8(void); +void sub_80C64F4(void); +void sub_80C65C4(struct Sprite *); +void sub_80C65FC(struct Sprite *); +void sub_80C660C(void); +void sub_80C6658(void); +void sub_80C66D8(struct Sprite *sprite); +void sub_80C6708(struct Sprite *sprite); + +void sub_80C6264(void) +{ + sub_80BBFD8(&gUnknown_0203923C, gMapHeader.events); + sub_80BB5E4(); +} + +void sub_80C6280(void) +{ + switch (gFieldEffectArguments[1]) + { + case 1: + gFieldEffectArguments[5] = 8; + gFieldEffectArguments[6] = 40; + break; + case 2: + gFieldEffectArguments[5] = 8; + gFieldEffectArguments[6] = 8; + break; + case 3: + gFieldEffectArguments[5] = -8; + gFieldEffectArguments[6] = 24; + break; + case 4: + gFieldEffectArguments[5] = 24; + gFieldEffectArguments[6] = 24; + break; + } +} + +bool8 SetUpFieldMove_SecretPower(void) +{ + u8 behavior; + + sub_80BB63C(); + + if (gScriptResult == 1 || player_get_direction_lower_nybble() != 2) + return FALSE; + + GetXYCoordsOneStepInFrontOfPlayer(&gUnknown_0203923C.x, &gUnknown_0203923C.y); + behavior = MapGridGetMetatileBehaviorAt(gUnknown_0203923C.x, gUnknown_0203923C.y); + + if (MetatileBehavior_IsSecretBaseCave(behavior) == TRUE) + { + sub_80C6264(); + gFieldCallback = FieldCallback_Teleport; + gUnknown_03005CE4 = sub_80C639C; + return TRUE; + } + + if (MetatileBehavior_IsSecretBaseTree(behavior) == TRUE) + { + sub_80C6264(); + gFieldCallback = FieldCallback_Teleport; + gUnknown_03005CE4 = sub_80C64A8; + return TRUE; + } + + if (MetatileBehavior_IsSecretBaseShrub(behavior) == TRUE) + { + sub_80C6264(); + gFieldCallback = FieldCallback_Teleport; + gUnknown_03005CE4 = sub_80C660C; + return TRUE; + } + + return FALSE; +} + +void sub_80C639C(void) +{ + gFieldEffectArguments[0] = gLastFieldPokeMenuOpened; + ScriptContext1_SetupScript(gUnknown_081A2CE6); +} + +bool8 FldEff_UseSecretPowerCave(void) +{ + u8 taskId = oei_task_add(); + + gTasks[taskId].data[8] = (uintptr_t)sub_80C63E8 >> 16; + gTasks[taskId].data[9] = (uintptr_t)sub_80C63E8; + + return FALSE; +} + +void sub_80C63E8(void) +{ + FieldEffectActiveListRemove(FLDEFF_USE_SECRET_POWER_CAVE); + FieldEffectStart(FLDEFF_SECRET_POWER_CAVE); +} + +bool8 FldEff_SecretPowerCave(void) +{ + sub_80C6280(); + CreateSprite( + &gSpriteTemplate_83D2614, + gSprites[gPlayerAvatar.spriteId].oam.x + gFieldEffectArguments[5], + gSprites[gPlayerAvatar.spriteId].oam.y + gFieldEffectArguments[6], + 148); + return FALSE; +} + +void sub_80C644C(struct Sprite *sprite) +{ + PlaySE(SE_W088); + sprite->data[0] = 0; + sprite->callback = sub_80C6468; +} + +void sub_80C6468(struct Sprite *sprite) +{ + if (sprite->data[0] < 40) + { + sprite->data[0]++; + if (sprite->data[0] == 20 ) + sub_80BB800(); + } + else + { + sprite->data[0] = 0; + sprite->callback = sub_80C6498; + } +} + +void sub_80C6498(struct Sprite *sprite) +{ + FieldEffectStop(sprite, FLDEFF_SECRET_POWER_CAVE); + EnableBothScriptContexts(); +} + +void sub_80C64A8(void) +{ + gFieldEffectArguments[0] = gLastFieldPokeMenuOpened; + ScriptContext1_SetupScript(gUnknown_081A2D3E); +} + +bool8 FldEff_UseSecretPowerTree(void) +{ + u8 taskId = oei_task_add(); + + gTasks[taskId].data[8] = (uintptr_t)sub_80C64F4 >> 16; + gTasks[taskId].data[9] = (uintptr_t)sub_80C64F4; + + return FALSE; +} + +void sub_80C64F4(void) +{ + FieldEffectActiveListRemove(FLDEFF_USE_SECRET_POWER_TREE); + FieldEffectStart(FLDEFF_SECRET_POWER_TREE); +} + +bool8 FldEff_SecretPowerTree(void) +{ + s16 behavior = MapGridGetMetatileBehaviorAt(gUnknown_0203923C.x, gUnknown_0203923C.y) & 0xFFF; + + if (behavior == MB_SECRET_BASE_SPOT_TREE_1) + { + gFieldEffectArguments[7] = 0; + } + + if (behavior == MB_SECRET_BASE_SPOT_TREE_2) + { + gFieldEffectArguments[7] = 2; + } + + sub_80C6280(); + + CreateSprite( + &gSpriteTemplate_83D262C, + gSprites[gPlayerAvatar.spriteId].oam.x + gFieldEffectArguments[5], + gSprites[gPlayerAvatar.spriteId].oam.y + gFieldEffectArguments[6], + 148); + + if (gFieldEffectArguments[7] == 1 || gFieldEffectArguments[7] == 3) + sub_80BB800(); + + return FALSE; +} + +void sub_80C6598(struct Sprite *sprite) +{ + PlaySE(SE_W010); + sprite->animNum = gFieldEffectArguments[7]; + sprite->data[0] = 0; + sprite->callback = sub_80C65C4; +} + +void sub_80C65C4(struct Sprite *sprite) +{ + sprite->data[0]++; + + if (sprite->data[0] >= 40) + { + if (gFieldEffectArguments[7] == 0 || gFieldEffectArguments[7] == 2) + sub_80BB800(); + sprite->data[0] = 0; + sprite->callback = sub_80C65FC; + } +} + + +void sub_80C65FC(struct Sprite *sprite) +{ + FieldEffectStop(sprite, FLDEFF_SECRET_POWER_TREE); + EnableBothScriptContexts(); +} + +void sub_80C660C(void) +{ + gFieldEffectArguments[0] = gLastFieldPokeMenuOpened; + ScriptContext1_SetupScript(gUnknown_081A2D96); +} + +bool8 FldEff_UseSecretPowerShrub(void) +{ + u8 taskId = oei_task_add(); + + gTasks[taskId].data[8] = (uintptr_t)sub_80C6658 >> 16; + gTasks[taskId].data[9] = (uintptr_t)sub_80C6658; + + return FALSE; +} + +void sub_80C6658(void) +{ + FieldEffectActiveListRemove(FLDEFF_USE_SECRET_POWER_SHRUB); + FieldEffectStart(FLDEFF_SECRET_POWER_SHRUB); +} + +bool8 FldEff_SecretPowerShrub(void) +{ + sub_80C6280(); + CreateSprite( + &gSpriteTemplate_83D2644, + gSprites[gPlayerAvatar.spriteId].oam.x + gFieldEffectArguments[5], + gSprites[gPlayerAvatar.spriteId].oam.y + gFieldEffectArguments[6], + 148); + return FALSE; +} + +void sub_80C66BC(struct Sprite *sprite) +{ + PlaySE(SE_W077); + sprite->data[0] = 0; + sprite->callback = sub_80C66D8; +} + +void sub_80C66D8(struct Sprite *sprite) +{ + if (sprite->data[0] < 40) + { + sprite->data[0]++; + if (sprite->data[0] == 20 ) + sub_80BB800(); + } + else + { + sprite->data[0] = 0; + sprite->callback = sub_80C6708; + } +} + + +void sub_80C6708(struct Sprite *sprite) +{ + FieldEffectStop(sprite, FLDEFF_SECRET_POWER_SHRUB); + EnableBothScriptContexts(); +} -- cgit v1.2.3 From 1c89a72946a463abae5d3331174c764f1e9109b5 Mon Sep 17 00:00:00 2001 From: sceptillion <33798691+sceptillion@users.noreply.github.com> Date: Sun, 19 Nov 2017 10:18:06 -0800 Subject: s32 to int --- src/field/fldeff_recordmixing.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/field/fldeff_recordmixing.c b/src/field/fldeff_recordmixing.c index 16cad58f8..ec72885b5 100644 --- a/src/field/fldeff_recordmixing.c +++ b/src/field/fldeff_recordmixing.c @@ -70,7 +70,7 @@ u8 CreateRecordMixingSprite(void) void DestroyRecordMixingSprite(void) { - s32 i; + int i; for (i = 0; i < MAX_SPRITES; i++) { -- cgit v1.2.3 From 6db242de730e5d6871aa012c9dcfd893fde463d4 Mon Sep 17 00:00:00 2001 From: sceptillion <33798691+sceptillion@users.noreply.github.com> Date: Sun, 19 Nov 2017 14:54:29 -0800 Subject: decompile fldeff_decoration --- src/field/fldeff_decoration.c | 309 ++++++++++++++++++++++++++++++++++++++++++ src/field/secret_base.c | 6 +- 2 files changed, 310 insertions(+), 5 deletions(-) create mode 100644 src/field/fldeff_decoration.c (limited to 'src') diff --git a/src/field/fldeff_decoration.c b/src/field/fldeff_decoration.c new file mode 100644 index 000000000..d754aed43 --- /dev/null +++ b/src/field/fldeff_decoration.c @@ -0,0 +1,309 @@ +#include "global.h" +#include "event_data.h" +#include "field_camera.h" +#include "field_effect.h" +#include "field_map_obj.h" +#include "field_player_avatar.h" +#include "fieldmap.h" +#include "script.h" +#include "songs.h" +#include "sound.h" +#include "string_util.h" +#include "strings.h" +#include "task.h" +#include "text.h" + +extern const struct SpriteTemplate *const gFieldEffectObjectTemplatePointers[36]; +extern const struct SpriteTemplate gSpriteTemplate_83D26A0; + +static void sub_80C68EC(u8); +static void DoBalloonSoundEffect(s16); +void SpriteCB_SandPillar_0(struct Sprite *); +void SpriteCB_SandPillar_1(struct Sprite *); +void SpriteCB_SandPillar_2(struct Sprite *); + +void sub_80C68A4(s16 metatileId, s16 x, s16 y) +{ + u8 taskId = CreateTask(sub_80C68EC, 0); + + gTasks[taskId].data[0] = metatileId; + gTasks[taskId].data[1] = x; + gTasks[taskId].data[2] = y; + gTasks[taskId].data[3] = 0; + gTasks[taskId].data[4] = 1; +} + +static void sub_80C68EC(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + + if (data[3] == 6) + data[3] = 0; + else + data[3]++; + + if (data[3] == 0) + { + if (data[4] == 2) + DoBalloonSoundEffect(data[0]); + MapGridSetMetatileIdAt(data[1], data[2], data[0] + data[4]); + CurrentMapDrawMetatileAt(data[1], data[2]); + if (data[4] == 3) + DestroyTask(taskId); + else + data[4]++; + } +} + +static void DoBalloonSoundEffect(s16 metatileId) +{ + switch (metatileId) + { + case 824: + PlaySE(SE_FUUSEN1); + break; + case 828: + PlaySE(SE_FUUSEN2); + break; + case 832: + PlaySE(SE_FUUSEN3); + break; + case 552: + PlaySE(SE_TOY_DANGO); + break; + } +} + +bool8 FldEff_Nop47(void) +{ + return FALSE; +} + +bool8 FldEff_Nop48(void) +{ + return FALSE; +} + +static void sub_80C69C4(s16 x, s16 y) +{ + PlaySE(SE_TOY_KABE); + MapGridSetMetatileIdAt(x, y, 630); + MapGridSetMetatileIdAt(x, y - 1, 622); + CurrentMapDrawMetatileAt(x, y); + CurrentMapDrawMetatileAt(x, y - 1); +} + +static void sub_80C6A14(u8 taskId) +{ + if (gTasks[taskId].data[0] == 7) + { + sub_80C69C4(gTasks[taskId].data[1], gTasks[taskId].data[2]); + DestroyTask(taskId); + } + else + { + gTasks[taskId].data[0]++; + } +} + +void sub_80C6A54(s16 x, s16 y) +{ + u8 dir = player_get_direction_lower_nybble(); + if (dir == 1) + { + sub_80C69C4(x, y); + } + else if (dir == 2) + { + u8 taskId = CreateTask(sub_80C6A14, 5); + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[1] = x; + gTasks[taskId].data[2] = y; + } +} + +static void Task_DecorationSoundEffect(u8 taskId) +{ + if (gTasks[taskId].data[1] == 7) + { + switch (gTasks[taskId].data[0]) + { + case 632: + PlaySE(SE_TOY_C); + break; + case 633: + PlaySE(SE_TOY_D); + break; + case 634: + PlaySE(SE_TOY_E); + break; + case 635: + PlaySE(SE_TOY_F); + break; + case 636: + PlaySE(SE_TOY_G); + break; + case 637: + PlaySE(SE_TOY_A); + break; + case 638: + PlaySE(SE_TOY_B); + break; + case 691: + PlaySE(SE_TOY_C1); + break; + } + + DestroyTask(taskId); + } + else + { + gTasks[taskId].data[1]++; + } +} + +void DoDecorationSoundEffect(s16 arg) +{ + u8 taskId = CreateTask(Task_DecorationSoundEffect, 5); + gTasks[taskId].data[0] = arg; + gTasks[taskId].data[1] = 0; +} + +void SpriteCB_YellowCave4Sparkle(struct Sprite *sprite) +{ + sprite->data[0]++; + if (sprite->data[0] == 8) + PlaySE(SE_W215); + if (sprite->data[0] >= 32) + DestroySprite(sprite); +} + +void DoYellowCave4Sparkle(void) +{ + s16 x = gMapObjects[gPlayerAvatar.mapObjectId].coords2.x; + s16 y = gMapObjects[gPlayerAvatar.mapObjectId].coords2.y; + u8 spriteId; + + sub_8060470(&x, &y, 8, 4); + spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[22], x, y, 0); + if (spriteId != MAX_SPRITES) + { + gSprites[spriteId].coordOffsetEnabled = TRUE; + gSprites[spriteId].oam.priority = 1; + gSprites[spriteId].oam.paletteNum = 5; + gSprites[spriteId].callback = SpriteCB_YellowCave4Sparkle; + gSprites[spriteId].data[0] = 0; + } +} + +bool8 FldEff_SandPillar(void) +{ + s16 x, y; + + ScriptContext2_Enable(); + GetXYCoordsOneStepInFrontOfPlayer(&x, &y); + gFieldEffectArguments[5] = x; + gFieldEffectArguments[6] = y; + + switch (player_get_direction_lower_nybble()) + { + case 1: + CreateSprite( + &gSpriteTemplate_83D26A0, + gSprites[gPlayerAvatar.spriteId].oam.x + 8, + gSprites[gPlayerAvatar.spriteId].oam.y + 32, + 0); + break; + case 2: + CreateSprite( + &gSpriteTemplate_83D26A0, + gSprites[gPlayerAvatar.spriteId].oam.x + 8, + gSprites[gPlayerAvatar.spriteId].oam.y, + 148); + break; + case 3: + CreateSprite( + &gSpriteTemplate_83D26A0, + gSprites[gPlayerAvatar.spriteId].oam.x - 8, + gSprites[gPlayerAvatar.spriteId].oam.y + 16, + 148); + break; + case 4: + CreateSprite( + &gSpriteTemplate_83D26A0, + gSprites[gPlayerAvatar.spriteId].oam.x + 24, + gSprites[gPlayerAvatar.spriteId].oam.y + 16, + 148); + break; + } + + return FALSE; +} + +void SpriteCB_SandPillar_0(struct Sprite *sprite) +{ + PlaySE(SE_W088); + if (MapGridGetMetatileIdAt(gFieldEffectArguments[5], gFieldEffectArguments[6] - 1) == 646) + MapGridSetMetatileIdAt(gFieldEffectArguments[5], gFieldEffectArguments[6] - 1, 3586); + else + MapGridSetMetatileIdAt(gFieldEffectArguments[5], gFieldEffectArguments[6] - 1, 644); + MapGridSetMetatileIdAt(gFieldEffectArguments[5], gFieldEffectArguments[6], 522); + CurrentMapDrawMetatileAt(gFieldEffectArguments[5], gFieldEffectArguments[6] - 1); + CurrentMapDrawMetatileAt(gFieldEffectArguments[5], gFieldEffectArguments[6]); + sprite->data[0] = 0; + sprite->callback = SpriteCB_SandPillar_1; +} + +void SpriteCB_SandPillar_1(struct Sprite *sprite) +{ + if (sprite->data[0] < 18) + { + sprite->data[0]++; + } + else + { + MapGridSetMetatileIdAt(gFieldEffectArguments[5], gFieldEffectArguments[6], 3724); + CurrentMapDrawMetatileAt(gFieldEffectArguments[5], gFieldEffectArguments[6]); + sprite->data[0] = 0; + sprite->callback = SpriteCB_SandPillar_2; + } +} + +void SpriteCB_SandPillar_2(struct Sprite *sprite) +{ + FieldEffectStop(sprite, FLDEFF_SAND_PILLAR); + EnableBothScriptContexts(); +} + +void GetShieldToyTVDecorationInfo(void) +{ + s16 x, y; + s32 metatileId; + + GetXYCoordsOneStepInFrontOfPlayer(&x, &y); + + metatileId = MapGridGetMetatileIdAt(x, y); + + switch (metatileId) + { + case 822: + ConvertIntToDecimalStringN(gStringVar1, 100, STR_CONV_MODE_LEFT_ALIGN, 3); + StringCopy(gStringVar2, gSecretBaseText_GoldRank); + gScriptResult = 0; + break; + case 734: + ConvertIntToDecimalStringN(gStringVar1, 50, STR_CONV_MODE_LEFT_ALIGN, 2); + StringCopy(gStringVar2, gSecretBaseText_SilverRank); + gScriptResult = 0; + break; + case 756: + gScriptResult = 1; + break; + case 757: + gScriptResult = 2; + break; + case 758: + gScriptResult = 3; + break; + } +} diff --git a/src/field/secret_base.c b/src/field/secret_base.c index 8c1b7c8c1..34352f39a 100644 --- a/src/field/secret_base.c +++ b/src/field/secret_base.c @@ -12,6 +12,7 @@ #include "field_specials.h" #include "field_weather.h" #include "fieldmap.h" +#include "fldeff_decoration.h" #include "link.h" #include "main.h" #include "sound.h" @@ -47,11 +48,6 @@ static void sub_80BCBF8(u8 taskId); static void sub_80BCC54(u8 taskId); static void Task_SecretBasePC_Registry(u8 taskId); -extern void DoDecorationSoundEffect(s16 metatileId); -extern void sub_80C6A54(s16 x, s16 y); -extern void sub_80C68A4(s16 metatileId, s16 x, s16 y); -extern void DoYellowCave4Sparkle(void); - extern u8 gUnknown_0815F399[]; extern u8 gUnknown_0815F49A[]; extern u8 gUnknown_020387DC; -- cgit v1.2.3 From 71ab629e9e4f29fc502411d41b0fd53064d94e02 Mon Sep 17 00:00:00 2001 From: sceptillion <33798691+sceptillion@users.noreply.github.com> Date: Sun, 19 Nov 2017 19:34:43 -0800 Subject: use direction enums --- src/field/fldeff_decoration.c | 12 ++++++------ src/field/fldeff_secretpower.c | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) (limited to 'src') diff --git a/src/field/fldeff_decoration.c b/src/field/fldeff_decoration.c index d754aed43..b0ac30062 100644 --- a/src/field/fldeff_decoration.c +++ b/src/field/fldeff_decoration.c @@ -109,11 +109,11 @@ static void sub_80C6A14(u8 taskId) void sub_80C6A54(s16 x, s16 y) { u8 dir = player_get_direction_lower_nybble(); - if (dir == 1) + if (dir == DIR_SOUTH) { sub_80C69C4(x, y); } - else if (dir == 2) + else if (dir == DIR_NORTH) { u8 taskId = CreateTask(sub_80C6A14, 5); gTasks[taskId].data[0] = 0; @@ -207,28 +207,28 @@ bool8 FldEff_SandPillar(void) switch (player_get_direction_lower_nybble()) { - case 1: + case DIR_SOUTH: CreateSprite( &gSpriteTemplate_83D26A0, gSprites[gPlayerAvatar.spriteId].oam.x + 8, gSprites[gPlayerAvatar.spriteId].oam.y + 32, 0); break; - case 2: + case DIR_NORTH: CreateSprite( &gSpriteTemplate_83D26A0, gSprites[gPlayerAvatar.spriteId].oam.x + 8, gSprites[gPlayerAvatar.spriteId].oam.y, 148); break; - case 3: + case DIR_WEST: CreateSprite( &gSpriteTemplate_83D26A0, gSprites[gPlayerAvatar.spriteId].oam.x - 8, gSprites[gPlayerAvatar.spriteId].oam.y + 16, 148); break; - case 4: + case DIR_EAST: CreateSprite( &gSpriteTemplate_83D26A0, gSprites[gPlayerAvatar.spriteId].oam.x + 24, diff --git a/src/field/fldeff_secretpower.c b/src/field/fldeff_secretpower.c index fd1548c46..5ec4407ae 100644 --- a/src/field/fldeff_secretpower.c +++ b/src/field/fldeff_secretpower.c @@ -69,7 +69,7 @@ bool8 SetUpFieldMove_SecretPower(void) sub_80BB63C(); - if (gScriptResult == 1 || player_get_direction_lower_nybble() != 2) + if (gScriptResult == 1 || player_get_direction_lower_nybble() != DIR_NORTH) return FALSE; GetXYCoordsOneStepInFrontOfPlayer(&gUnknown_0203923C.x, &gUnknown_0203923C.y); -- cgit v1.2.3 From 3e77fcdd38e9dfab732e8ce72ac1496cec652c0e Mon Sep 17 00:00:00 2001 From: sceptillion <33798691+sceptillion@users.noreply.github.com> Date: Sun, 19 Nov 2017 18:04:08 -0800 Subject: label battle anims --- src/battle/battle_3.c | 10 +- src/battle/battle_4.c | 338 ++++++++++++-------------------------------------- src/battle/battle_7.c | 4 +- 3 files changed, 87 insertions(+), 265 deletions(-) (limited to 'src') diff --git a/src/battle/battle_3.c b/src/battle/battle_3.c index f37111af5..958ee0b55 100644 --- a/src/battle/battle_3.c +++ b/src/battle/battle_3.c @@ -546,7 +546,7 @@ u8 UpdateTurnCounters(void) else gBattlescriptCurrInstr = gUnknown_081D8F7D; - BATTLE_STRUCT->animArg1 = 0xC; + BATTLE_STRUCT->animArg1 = B_ANIM_SANDSTORM_CONTINUES; gBattleCommunication[MULTISTRING_CHOOSER] = 0; b_call_bc_move_exec(gBattlescriptCurrInstr); effect++; @@ -580,7 +580,7 @@ u8 UpdateTurnCounters(void) else gBattlescriptCurrInstr = gUnknown_081D8F7D; - BATTLE_STRUCT->animArg1 = 0xD; + BATTLE_STRUCT->animArg1 = B_ANIM_HAIL_CONTINUES; gBattleCommunication[MULTISTRING_CHOOSER] = 1; b_call_bc_move_exec(gBattlescriptCurrInstr); effect++; @@ -1505,7 +1505,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) if (!(gBattleWeather & WEATHER_RAIN_ANY)) { gBattleWeather = (WEATHER_RAIN_TEMPORARY | WEATHER_RAIN_PERMANENT); - BATTLE_STRUCT->animArg1 = 0xA; + BATTLE_STRUCT->animArg1 = B_ANIM_RAIN_CONTINUES; BATTLE_STRUCT->scriptingActive = bank; effect++; } @@ -1514,7 +1514,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) if (!(gBattleWeather & WEATHER_SANDSTORM_ANY)) { gBattleWeather = (WEATHER_SANDSTORM_PERMANENT | WEATHER_SANDSTORM_TEMPORARY); - BATTLE_STRUCT->animArg1 = 0xC; + BATTLE_STRUCT->animArg1 = B_ANIM_SANDSTORM_CONTINUES; BATTLE_STRUCT->scriptingActive = bank; effect++; } @@ -1523,7 +1523,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) if (!(gBattleWeather & WEATHER_SUN_ANY)) { gBattleWeather = (WEATHER_SUN_PERMANENT | WEATHER_SUN_TEMPORARY); - BATTLE_STRUCT->animArg1 = 0xB; + BATTLE_STRUCT->animArg1 = B_ANIM_SUN_CONTINUES; BATTLE_STRUCT->scriptingActive = bank; effect++; } diff --git a/src/battle/battle_4.c b/src/battle/battle_4.c index cff81396d..73530c486 100644 --- a/src/battle/battle_4.c +++ b/src/battle/battle_4.c @@ -221,6 +221,16 @@ extern u8 gUnknown_081D8C65[]; extern u8 gUnknown_081D9156[]; extern u8 gUnknown_081D9468[]; +// read via orr +#define BSScriptRead32(ptr) ((ptr)[0] | (ptr)[1] << 8 | (ptr)[2] << 16 | (ptr)[3] << 24) +#define BSScriptRead16(ptr) ((ptr)[0] | ((ptr)[1] << 8)) +#define BSScriptReadPtr(ptr) ((void *)BSScriptRead32(ptr)) + +// read via add +#define BS2ScriptRead32(ptr) ((ptr)[0] + ((ptr)[1] << 8) + ((ptr)[2] << 16) + ((ptr)[3] << 24)) +#define BS2ScriptRead16(ptr) ((ptr)[0] + ((ptr)[1] << 8)) +#define BS2ScriptReadPtr(ptr) ((void *)BS2ScriptRead32(ptr)) + #define TargetProtectAffected ((gProtectStructs[gBankTarget].protected && gBattleMoves[gCurrentMove].flags & FLAG_PROTECT_AFFECTED)) //array entries for battle communication @@ -7327,276 +7337,88 @@ static void atk44(void) ewram16060(gBankAttacker) = 1; } -#ifdef NONMATCHING static void atk45_playanimation(void) { - #define ANIMATION_ID T2_READ_8(gBattlescriptCurrInstr + 2) - #define ARGUMENT (u16*) T2_READ_PTR(gBattlescriptCurrInstr + 3) - gActiveBank = GetBattleBank(T2_READ_8(gBattlescriptCurrInstr + 1)); + const u16* argumentPtr; + + gActiveBank = GetBattleBank(gBattlescriptCurrInstr[1]); + argumentPtr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 3); - if ( ANIMATION_ID == 1 || ANIMATION_ID == 0x11 || ANIMATION_ID == 2) { - EmitBattleAnimation(0, ANIMATION_ID, *argument); + if (gBattlescriptCurrInstr[2] == B_ANIM_STATS_CHANGE + || gBattlescriptCurrInstr[2] == B_ANIM_SNATCH_MOVE + || gBattlescriptCurrInstr[2] == B_ANIM_SUBSTITUTE_FADE) + { + EmitBattleAnimation(0, gBattlescriptCurrInstr[2], *argumentPtr); MarkBufferBankForExecution(gActiveBank); gBattlescriptCurrInstr += 7; - } else if (gHitMarker & HITMARKER_NO_ANIMATIONS) { + } + else if (gHitMarker & HITMARKER_NO_ANIMATIONS) + { b_movescr_stack_push(gBattlescriptCurrInstr + 7); gBattlescriptCurrInstr = BattleScript_Pausex20; - } else { - if (((ANIMATION_ID - 10) > 3 && gStatuses3[gActiveBank] & (STATUS3_SEMI_INVULNERABLE))) { - gBattlescriptCurrInstr += 7; - } else { - EmitBattleAnimation(0, ANIMATION_ID, *argument); - MarkBufferBankForExecution(gActiveBank); - gBattlescriptCurrInstr += 7; - } + } + else if (gBattlescriptCurrInstr[2] == B_ANIM_RAIN_CONTINUES + || gBattlescriptCurrInstr[2] == B_ANIM_SUN_CONTINUES + || gBattlescriptCurrInstr[2] == B_ANIM_SANDSTORM_CONTINUES + || gBattlescriptCurrInstr[2] == B_ANIM_HAIL_CONTINUES) + { + EmitBattleAnimation(0, gBattlescriptCurrInstr[2], *argumentPtr); + MarkBufferBankForExecution(gActiveBank); + gBattlescriptCurrInstr += 7; + } + else if (gStatuses3[gActiveBank] & STATUS3_SEMI_INVULNERABLE) + { + gBattlescriptCurrInstr += 7; + } + else + { + EmitBattleAnimation(0, gBattlescriptCurrInstr[2], *argumentPtr); + MarkBufferBankForExecution(gActiveBank); + gBattlescriptCurrInstr += 7; } } -#else -__attribute__((naked)) -static void atk45_playanimation(void) +static void atk46_playanimation2(void) // animation Id is stored in the first pointer { - asm(".syntax unified\n\ - push {r4-r6,lr}\n\ - ldr r5, _08021444 @ =gBattlescriptCurrInstr\n\ - ldr r0, [r5]\n\ - ldrb r0, [r0, 0x1]\n\ - bl GetBattleBank\n\ - ldr r6, _08021448 @ =gActiveBank\n\ - strb r0, [r6]\n\ - ldr r2, [r5]\n\ - ldrb r1, [r2, 0x3]\n\ - ldrb r0, [r2, 0x4]\n\ - lsls r0, 8\n\ - adds r1, r0\n\ - ldrb r0, [r2, 0x5]\n\ - lsls r0, 16\n\ - adds r1, r0\n\ - ldrb r0, [r2, 0x6]\n\ - lsls r0, 24\n\ - adds r3, r1, r0\n\ - ldrb r4, [r2, 0x2]\n\ - adds r0, r4, 0\n\ - cmp r0, 0x1\n\ - beq _08021426\n\ - cmp r0, 0x11\n\ - beq _08021426\n\ - cmp r0, 0x2\n\ - bne _0802144C\n\ -_08021426:\n\ - ldr r4, _08021444 @ =gBattlescriptCurrInstr\n\ - ldr r0, [r4]\n\ - ldrb r1, [r0, 0x2]\n\ - ldrh r2, [r3]\n\ - movs r0, 0\n\ - bl EmitBattleAnimation\n\ - ldr r0, _08021448 @ =gActiveBank\n\ - ldrb r0, [r0]\n\ - bl MarkBufferBankForExecution\n\ - ldr r0, [r4]\n\ - adds r0, 0x7\n\ - str r0, [r4]\n\ - b _080214AE\n\ - .align 2, 0\n\ -_08021444: .4byte gBattlescriptCurrInstr\n\ -_08021448: .4byte gActiveBank\n\ -_0802144C:\n\ - ldr r0, _08021464 @ =gHitMarker\n\ - ldr r0, [r0]\n\ - movs r1, 0x80\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _0802146C\n\ - adds r0, r2, 0x7\n\ - bl b_movescr_stack_push\n\ - ldr r0, _08021468 @ =BattleScript_Pausex20\n\ - b _080214AC\n\ - .align 2, 0\n\ -_08021464: .4byte gHitMarker\n\ -_08021468: .4byte BattleScript_Pausex20\n\ -_0802146C:\n\ - adds r0, r4, 0\n\ - subs r0, 0xA\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - cmp r0, 0x3\n\ - bls _08021498\n\ - ldr r1, _08021490 @ =gStatuses3\n\ - ldrb r0, [r6]\n\ - lsls r0, 2\n\ - adds r0, r1\n\ - ldr r0, [r0]\n\ - ldr r1, _08021494 @ =0x000400c0\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _08021498\n\ - adds r0, r2, 0x7\n\ - b _080214AC\n\ - .align 2, 0\n\ -_08021490: .4byte gStatuses3\n\ -_08021494: .4byte 0x000400c0\n\ -_08021498:\n\ - ldrb r1, [r2, 0x2]\n\ - ldrh r2, [r3]\n\ - movs r0, 0\n\ - bl EmitBattleAnimation\n\ - ldrb r0, [r6]\n\ - bl MarkBufferBankForExecution\n\ - ldr r0, [r5]\n\ - adds r0, 0x7\n\ -_080214AC:\n\ - str r0, [r5]\n\ -_080214AE:\n\ - pop {r4-r6}\n\ - pop {r0}\n\ - bx r0\n\ - .syntax divided"); -} -#endif // NONMATCHING + const u16* argumentPtr; + const u8* animationIdPtr; -#ifdef NONMATCHING -static void atk46_playanimation2(void) -{ - u8 arg1; - u8* arg2; - u16* arg3; - u32 something; - - arg1 = T2_READ_8(gBattlescriptCurrInstr + 1); - gActiveBank = GetBattleBank(arg1); - arg2 = T2_READ_PTR(gBattlescriptCurrInstr + 2); - arg3 = T2_READ_PTR(gBattlescriptCurrInstr + 6); - - if (*arg2 == 1 || *arg2 == 0x11 || *arg2 == 2) - { - EmitBattleAnimation(0, *arg2, *arg3); - MarkBufferBankForExecution(gActiveBank); - gBattlescriptCurrInstr += 10; - return; - } - if ((gHitMarker & 0x80)) - { - something = (u32)(gBattlescriptCurrInstr + 10); - } - else - { - u8 yeah = *arg2 - 10; - if (yeah < 4 || (gStatuses3[gActiveBank] & 0x000400C0) == 0) - { - EmitBattleAnimation(0, *arg2, *arg3); - MarkBufferBankForExecution(gActiveBank); - } - something = (u32)(gBattlescriptCurrInstr + 10); - } - gBattlescriptCurrInstr = (u8*)something; -} -#else -__attribute__((naked)) -static void atk46_playanimation2(void) -{ - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - ldr r6, _0802151C @ =gBattlescriptCurrInstr\n\ - ldr r0, [r6]\n\ - ldrb r0, [r0, 0x1]\n\ - bl GetBattleBank\n\ - ldr r7, _08021520 @ =gActiveBank\n\ - strb r0, [r7]\n\ - ldr r2, [r6]\n\ - ldrb r1, [r2, 0x2]\n\ - ldrb r0, [r2, 0x3]\n\ - lsls r0, 8\n\ - adds r1, r0\n\ - ldrb r0, [r2, 0x4]\n\ - lsls r0, 16\n\ - adds r1, r0\n\ - ldrb r0, [r2, 0x5]\n\ - lsls r0, 24\n\ - adds r3, r1, r0\n\ - ldrb r1, [r2, 0x6]\n\ - ldrb r0, [r2, 0x7]\n\ - lsls r0, 8\n\ - adds r1, r0\n\ - ldrb r0, [r2, 0x8]\n\ - lsls r0, 16\n\ - adds r1, r0\n\ - ldrb r0, [r2, 0x9]\n\ - lsls r0, 24\n\ - adds r4, r1, r0\n\ - ldrb r5, [r3]\n\ - adds r0, r5, 0\n\ - cmp r0, 0x1\n\ - beq _080214FE\n\ - cmp r0, 0x11\n\ - beq _080214FE\n\ - cmp r0, 0x2\n\ - bne _08021524\n\ -_080214FE:\n\ - ldrb r1, [r3]\n\ - ldrh r2, [r4]\n\ - movs r0, 0\n\ - bl EmitBattleAnimation\n\ - ldr r0, _08021520 @ =gActiveBank\n\ - ldrb r0, [r0]\n\ - bl MarkBufferBankForExecution\n\ - ldr r1, _0802151C @ =gBattlescriptCurrInstr\n\ - ldr r0, [r1]\n\ - adds r0, 0xA\n\ - str r0, [r1]\n\ - b _0802157A\n\ - .align 2, 0\n\ -_0802151C: .4byte gBattlescriptCurrInstr\n\ -_08021520: .4byte gActiveBank\n\ -_08021524:\n\ - ldr r0, _08021534 @ =gHitMarker\n\ - ldr r0, [r0]\n\ - movs r1, 0x80\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _08021538\n\ - adds r0, r2, 0\n\ - b _08021576\n\ - .align 2, 0\n\ -_08021534: .4byte gHitMarker\n\ -_08021538:\n\ - adds r0, r5, 0\n\ - subs r0, 0xA\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - cmp r0, 0x3\n\ - bls _08021564\n\ - ldr r1, _0802155C @ =gStatuses3\n\ - ldrb r0, [r7]\n\ - lsls r0, 2\n\ - adds r0, r1\n\ - ldr r0, [r0]\n\ - ldr r1, _08021560 @ =0x000400c0\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _08021564\n\ - adds r0, r2, 0\n\ - b _08021576\n\ - .align 2, 0\n\ -_0802155C: .4byte gStatuses3\n\ -_08021560: .4byte 0x000400c0\n\ -_08021564:\n\ - ldrb r1, [r3]\n\ - ldrh r2, [r4]\n\ - movs r0, 0\n\ - bl EmitBattleAnimation\n\ - ldrb r0, [r7]\n\ - bl MarkBufferBankForExecution\n\ - ldr r0, [r6]\n\ -_08021576:\n\ - adds r0, 0xA\n\ - str r0, [r6]\n\ -_0802157A:\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .syntax divided "); + gActiveBank = GetBattleBank(gBattlescriptCurrInstr[1]); + animationIdPtr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 2); + argumentPtr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 6); + + if (*animationIdPtr == B_ANIM_STATS_CHANGE + || *animationIdPtr == B_ANIM_SNATCH_MOVE + || *animationIdPtr == B_ANIM_SUBSTITUTE_FADE) + { + EmitBattleAnimation(0, *animationIdPtr, *argumentPtr); + MarkBufferBankForExecution(gActiveBank); + gBattlescriptCurrInstr += 10; + } + else if (gHitMarker & HITMARKER_NO_ANIMATIONS) + { + gBattlescriptCurrInstr += 10; + } + else if (*animationIdPtr == B_ANIM_RAIN_CONTINUES + || *animationIdPtr == B_ANIM_SUN_CONTINUES + || *animationIdPtr == B_ANIM_SANDSTORM_CONTINUES + || *animationIdPtr == B_ANIM_HAIL_CONTINUES) + { + EmitBattleAnimation(0, *animationIdPtr, *argumentPtr); + MarkBufferBankForExecution(gActiveBank); + gBattlescriptCurrInstr += 10; + } + else if (gStatuses3[gActiveBank] & STATUS3_SEMI_INVULNERABLE) + { + gBattlescriptCurrInstr += 10; + } + else + { + EmitBattleAnimation(0, *animationIdPtr, *argumentPtr); + MarkBufferBankForExecution(gActiveBank); + gBattlescriptCurrInstr += 10; + } } -#endif // NONMATCHING static void atk47_setgraphicalstatchangevalues(void) { @@ -17089,7 +16911,7 @@ static void atkE6_castform_change_animation(void) gActiveBank = BATTLE_STRUCT->scriptingActive; if (gBattleMons[gActiveBank].status2 & STATUS2_SUBSTITUTE) BATTLE_STRUCT->castformToChangeInto |= 0x80; - EmitBattleAnimation(0, 0, BATTLE_STRUCT->castformToChangeInto); + EmitBattleAnimation(0, B_ANIM_CASTFORM_CHANGE, BATTLE_STRUCT->castformToChangeInto); MarkBufferBankForExecution(gActiveBank); gBattlescriptCurrInstr++; } diff --git a/src/battle/battle_7.c b/src/battle/battle_7.c index 8766b5b77..6c2bdcb9b 100644 --- a/src/battle/battle_7.c +++ b/src/battle/battle_7.c @@ -43,7 +43,7 @@ extern u8 gBattleAnimBankAttacker; extern u8 gBattleAnimBankTarget; extern void (*gAnimScriptCallback)(void); extern u8 gAnimScriptActive; -extern const u8 *const gBattleAnims_Unknown1[]; +extern const u8 *const gBattleAnims_General[]; extern const u8 *const gBattleAnims_Unknown2[]; extern const struct CompressedSpriteSheet gTrainerFrontPicTable[]; extern const struct MonCoords gTrainerFrontPicCoords[]; @@ -177,7 +177,7 @@ bool8 move_anim_start_t3(u8 a, u8 b, u8 c, u8 d, u16 e) gBattleAnimBankAttacker = b; gBattleAnimBankTarget = c; ewram17840.unk0 = e; - DoMoveAnim(gBattleAnims_Unknown1, d, 0); + DoMoveAnim(gBattleAnims_General, d, 0); taskId = CreateTask(sub_80315E8, 10); gTasks[taskId].data[0] = a; ewram17810[gTasks[taskId].data[0]].unk0_5 = 1; -- cgit v1.2.3 From 9d36bf245b25376b678e7f1d9a2c82a7b47464c9 Mon Sep 17 00:00:00 2001 From: sceptillion <33798691+sceptillion@users.noreply.github.com> Date: Sun, 19 Nov 2017 20:11:02 -0800 Subject: gBattleAnims_Unknown2 to gBattleAnims_Special --- src/battle/battle_7.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/battle/battle_7.c b/src/battle/battle_7.c index 6c2bdcb9b..0728b4b71 100644 --- a/src/battle/battle_7.c +++ b/src/battle/battle_7.c @@ -44,7 +44,7 @@ extern u8 gBattleAnimBankTarget; extern void (*gAnimScriptCallback)(void); extern u8 gAnimScriptActive; extern const u8 *const gBattleAnims_General[]; -extern const u8 *const gBattleAnims_Unknown2[]; +extern const u8 *const gBattleAnims_Special[]; extern const struct CompressedSpriteSheet gTrainerFrontPicTable[]; extern const struct MonCoords gTrainerFrontPicCoords[]; extern const struct CompressedSpritePalette gTrainerFrontPicPaletteTable[]; @@ -216,7 +216,7 @@ void move_anim_start_t4(u8 a, u8 b, u8 c, u8 d) gBattleAnimBankAttacker = b; gBattleAnimBankTarget = c; - DoMoveAnim(gBattleAnims_Unknown2, d, 0); + DoMoveAnim(gBattleAnims_Special, d, 0); taskId = CreateTask(sub_80316CC, 10); gTasks[taskId].data[0] = a; ewram17810[gTasks[taskId].data[0]].unk0_6 = 1; -- cgit v1.2.3 From 0f0d652f4d8b0347f086ee6aab899f4b1c461839 Mon Sep 17 00:00:00 2001 From: sceptillion <33798691+sceptillion@users.noreply.github.com> Date: Sun, 19 Nov 2017 22:31:29 -0800 Subject: clean up unknown_task variables --- src/battle/battle_2.c | 25 ++++++++----------------- src/battle/battle_transition.c | 2 +- src/battle_anim_80CA710.c | 17 ++++------------- src/engine/trainer_card.c | 17 +++++------------ src/field/field_screen_effect.c | 14 ++------------ src/unknown_task.c | 16 +--------------- 6 files changed, 21 insertions(+), 70 deletions(-) (limited to 'src') diff --git a/src/battle/battle_2.c b/src/battle/battle_2.c index 095482305..6d406c5e5 100644 --- a/src/battle/battle_2.c +++ b/src/battle/battle_2.c @@ -31,13 +31,6 @@ #include "battle_move_effects.h" #include "ewram.h" -struct UnknownStruct6 -{ - u16 unk0[0xA0]; - u8 fillerA0[0x640]; - u16 unk780[0xA0]; -}; - struct UnknownStruct7 { u8 unk0; @@ -123,8 +116,6 @@ extern void (*gBattleMainFunc)(void); extern u8 gLeveledUpInBattle; extern void (*gBattleBankFunc[])(void); extern u8 gHealthboxIDs[]; -extern struct UnknownStruct6 gUnknown_03004DE0; -//extern u16 gUnknown_03004DE0[][0xA0]; // possibly? extern u16 gBattleTypeFlags; extern s8 gBattleTerrain; // I'm not sure if this is supposed to be s8 or u8. Regardless, it must have the same type as the return value of BattleSetup_GetTerrain. extern u8 gReservedSpritePaletteCount; @@ -175,14 +166,14 @@ void InitBattle(void) for (i = 0; i < 80; i++) { - gUnknown_03004DE0.unk0[i] = 0xF0; - gUnknown_03004DE0.unk780[i] = 0xF0; + gUnknown_03004DE0[0][i] = 0xF0; + gUnknown_03004DE0[1][i] = 0xF0; } for (i = 80; i < 160; i++) { asm(""::"r"(i)); // Needed to stop the compiler from optimizing out the loop counter - gUnknown_03004DE0.unk0[i] = 0xFF10; - gUnknown_03004DE0.unk780[i] = 0xFF10; + gUnknown_03004DE0[0][i] = 0xFF10; + gUnknown_03004DE0[1][i] = 0xFF10; } //sub_80895F8(gUnknown_081F9674.unk0, gUnknown_081F9674.unk4, gUnknown_081F9674.unk8); sub_80895F8(gUnknown_081F9674); @@ -1153,14 +1144,14 @@ void c2_8011A1C(void) for (i = 0; i < 80; i++) { - gUnknown_03004DE0.unk0[i] = 0xF0; - gUnknown_03004DE0.unk780[i] = 0xF0; + gUnknown_03004DE0[0][i] = 0xF0; + gUnknown_03004DE0[1][i] = 0xF0; } for (i = 80; i < 160; i++) { asm(""::"r"(i)); // Needed to stop the compiler from optimizing out the loop counter - gUnknown_03004DE0.unk0[i] = 0xFF10; - gUnknown_03004DE0.unk780[i] = 0xFF10; + gUnknown_03004DE0[0][i] = 0xFF10; + gUnknown_03004DE0[1][i] = 0xFF10; } SetUpWindowConfig(&gWindowConfig_81E6C58); ResetPaletteFade(); diff --git a/src/battle/battle_transition.c b/src/battle/battle_transition.c index 2bde7299b..7f6c114f6 100644 --- a/src/battle/battle_transition.c +++ b/src/battle/battle_transition.c @@ -13,12 +13,12 @@ #include "trainer.h" #include "field_camera.h" #include "ewram.h" +#include "unknown_task.h" void sub_807DE10(void); void dp12_8087EA4(void); extern u16 gUnknown_03005560[]; -extern u16 gUnknown_03004DE0[][0x3C0]; extern const struct OamData gFieldOamData_32x32; diff --git a/src/battle_anim_80CA710.c b/src/battle_anim_80CA710.c index 98f421a49..6e4907888 100755 --- a/src/battle_anim_80CA710.c +++ b/src/battle_anim_80CA710.c @@ -17,13 +17,6 @@ #include "trig.h" #include "unknown_task.h" -struct UnknownStruct6 -{ - u16 unk0[0xA0]; - u8 fillerA0[0x640]; - u16 unk780[0xA0]; -}; - struct Struct_sub_8078914 { u8 *field_0; @@ -72,8 +65,6 @@ extern u16 gUnknown_03004240; extern u16 gUnknown_030041B4; extern s8 gUnknown_083D7A00[4][2]; extern u16 gUnknown_083D7A5C[5]; -extern struct UnknownStruct6 gUnknown_03004DE0; -extern struct UnknownStruct_1 gUnknown_03004DC0; static void sub_80CA768(struct Sprite* sprite); static void sub_80CA8B4(struct Sprite* sprite); @@ -4908,8 +4899,8 @@ void sub_80D0C88(u8 taskId) { if (i >= 0) { - gUnknown_03004DE0.unk0[i] = task->data[6] + 0xF0; - gUnknown_03004DE0.unk780[i] = task->data[6] + 0xF0; + gUnknown_03004DE0[0][i] = task->data[6] + 0xF0; + gUnknown_03004DE0[1][i] = task->data[6] + 0xF0; } } @@ -4954,8 +4945,8 @@ void sub_80D0D68(u8 taskId) if (task->data[5] >= 0) { - gUnknown_03004DE0.unk0[task->data[5]] = task->data[6]; - gUnknown_03004DE0.unk780[task->data[5]] = task->data[6]; + gUnknown_03004DE0[0][task->data[5]] = task->data[6]; + gUnknown_03004DE0[1][task->data[5]] = task->data[6]; } if (++task->data[3] >= task->data[15]) diff --git a/src/engine/trainer_card.c b/src/engine/trainer_card.c index 6d105f512..2045c6b21 100644 --- a/src/engine/trainer_card.c +++ b/src/engine/trainer_card.c @@ -52,13 +52,6 @@ extern struct LinkPlayerMapObject gLinkPlayerMapObjects[]; EWRAM_DATA struct TrainerCard gTrainerCards[4] = {0}; -struct UnknownStruct1 -{ - u16 filler0[0x3C0]; - u16 unk780[160]; -}; -extern struct UnknownStruct1 gUnknown_03004DE0; - extern const u8 gBadgesTiles[]; extern const u16 gUnknown_083B5F0C[]; extern const u16 gBadgesPalette[]; @@ -263,7 +256,7 @@ static void sub_8093254(void) ewram0_2.var_5 ^= 1; } if (ewram0_2.var_4) - DmaCopy16(3, gUnknown_03004DE0.filler0, gUnknown_03004DE0.unk780, sizeof(gUnknown_03004DE0.unk780)); + DmaCopy16(3, &gUnknown_03004DE0[0], &gUnknown_03004DE0[1], 0x140); } static void sub_80932AC(Callback callBack) @@ -737,12 +730,12 @@ static void sub_8093A68(u8 taskId) bool8 sub_8093AA0(struct Task *task) { - s32 i; + u32 i; ewram0_2.var_4 = FALSE; dp12_8087EA4(); - for (i = 0; i < ARRAY_COUNT(gUnknown_03004DE0.unk780); i++) - gUnknown_03004DE0.unk780[i] = -4; + for (i = 0; i < 0xA0; i++) + gUnknown_03004DE0[1][i] = -4; SetHBlankCallback(sub_8093D7C); ewram0_2.var_4 = TRUE; task->data[0]++; @@ -1123,7 +1116,7 @@ bool8 sub_8093D50(struct Task *task) void sub_8093D7C(void) { - u16 bgVOffset = gUnknown_03004DE0.unk780[REG_VCOUNT & 0xFF]; + u16 bgVOffset = gUnknown_03004DE0[1][REG_VCOUNT & 0xFF]; REG_BG0VOFS = bgVOffset; REG_BG1VOFS = bgVOffset; diff --git a/src/field/field_screen_effect.c b/src/field/field_screen_effect.c index 0c76d254d..a18190809 100644 --- a/src/field/field_screen_effect.c +++ b/src/field/field_screen_effect.c @@ -9,16 +9,6 @@ #include "text.h" #include "unknown_task.h" -struct UnknownStruct1 -{ - u8 filler0[0x14]; - u8 unk14; - u8 filler15[0xB]; -}; -extern struct UnknownStruct1 gUnknown_03004DC0; - -extern u16 gUnknown_03004DE0[][0x3C0]; - const static u16 gUnknown_0839ACDC[] = { 0xC8, 0x48, 0x38, 0x28, 0x18, 0x0 }; const s32 gMaxFlashLevel = 4; @@ -74,11 +64,11 @@ static void sub_8081424(u8 taskId) switch (data[0]) { case 0: - sub_8081398(&gUnknown_03004DE0[gUnknown_03004DC0.unk14][0], data[1], data[2], data[3]); + sub_8081398(&gUnknown_03004DE0[gUnknown_03004DC0.srcBank][0], data[1], data[2], data[3]); data[0] = 1; break; case 1: - sub_8081398(&gUnknown_03004DE0[gUnknown_03004DC0.unk14][0], data[1], data[2], data[3]); + sub_8081398(&gUnknown_03004DE0[gUnknown_03004DC0.srcBank][0], data[1], data[2], data[3]); data[0] = 0; data[3] += data[5]; if (data[3] > data[4]) diff --git a/src/unknown_task.c b/src/unknown_task.c index 5ec7fa6bc..0cc59fc66 100644 --- a/src/unknown_task.c +++ b/src/unknown_task.c @@ -4,20 +4,6 @@ #include "trig.h" #include "unknown_task.h" -struct UnknownStruct1 -{ - void *src[2]; - volatile void *dest; - u32 unkC; - void (*unk10)(void); - u8 srcBank; - u8 unk15; - u8 unk16; - u8 unk17; - u8 taskId; - u8 filler19[0x7]; -}; - static void sub_80896F4(void); static void sub_8089714(void); @@ -32,7 +18,7 @@ extern u16 gUnknown_030042C0; extern u8 gUnknown_0202FFA4; -extern struct UnknownStruct1 gUnknown_03004DC0; +extern struct UnknownTaskStruct2 gUnknown_03004DC0; extern u16 gUnknown_03004DE0[][0x3C0]; -- cgit v1.2.3 From e404d27e64305859e058d95946547143656b9a50 Mon Sep 17 00:00:00 2001 From: sceptillion <33798691+sceptillion@users.noreply.github.com> Date: Mon, 20 Nov 2017 21:41:42 -0800 Subject: partially decompile pc_screen_effect --- src/field/pc_screen_effect.c | 128 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 128 insertions(+) create mode 100644 src/field/pc_screen_effect.c (limited to 'src') diff --git a/src/field/pc_screen_effect.c b/src/field/pc_screen_effect.c new file mode 100644 index 000000000..364fca0aa --- /dev/null +++ b/src/field/pc_screen_effect.c @@ -0,0 +1,128 @@ +#include "global.h" +#include "main.h" +#include "palette.h" +#include "sprite.h" + +struct UnkStruct +{ + /*0x00*/ u16 tileTag; + /*0x02*/ u16 paletteTag; + /*0x04*/ u16 unk04; + /*0x06*/ u16 unk06; + /*0x08*/ u16 unk08; + /*0x0A*/ u16 unk0A; + /*0x0C*/ s16 unk0C; + /*0x10*/ u32 selectedPalettes; +}; + +void sub_80C603C(void); +void sub_80C6078(void); +void sub_80C60CC(struct Sprite *); +void sub_80C6130(struct Sprite *); +void sub_80C61B0(IntrFunc); +void ClearGpuRegBits(void); + +extern const struct OamData gOamData_83D18D8; + +extern const union AnimCmd *const gSpriteAnimTable_83D18E8[]; + +extern const u16 gUnknownPal_083D18EC[16]; + +extern const u8 gUnknownGfx_083D190C[128]; + +extern struct UnkStruct *gUnknown_020387EC; + +const struct SpriteSheet gUnknown_083D1898 = { gUnknownGfx_083D190C, sizeof(gUnknownGfx_083D190C), 0 }; + +const struct SpritePalette gUnknown_083D18A0 = { gUnknownPal_083D18EC, 0 }; + +const struct SpriteTemplate gSpriteTemplate_83D18A8 = +{ + 0, + 0, + &gOamData_83D18D8, + gSpriteAnimTable_83D18E8, + NULL, + gDummySpriteAffineAnimTable, + sub_80C60CC, +}; + +const struct SpriteTemplate gSpriteTemplate_83D18C0 = +{ + 0, + 0, + &gOamData_83D18D8, + gSpriteAnimTable_83D18E8, + NULL, + gDummySpriteAffineAnimTable, + sub_80C6130, +}; + +void sub_80C5CD4(struct UnkStruct *unkStruct) +{ + u16 i; + + struct SpriteSheet sprSheet = gUnknown_083D1898; + struct SpritePalette sprPalette = gUnknown_083D18A0; + struct SpriteTemplate sprTemplate = gSpriteTemplate_83D18A8; + + sprSheet.tag = unkStruct->tileTag; + sprTemplate.tileTag = unkStruct->tileTag; + sprPalette.tag = unkStruct->paletteTag; + sprTemplate.paletteTag = unkStruct->paletteTag; + + LoadSpriteSheet(&sprSheet); + LoadSpritePalette(&sprPalette); + + unkStruct->unk0C = 1; + unkStruct->unk0A = 0; + unkStruct->unk08 = 0; + unkStruct->selectedPalettes = ~(0x10000 << IndexOfSpritePaletteTag(unkStruct->paletteTag)) & 0xFFFF0000; + + if (unkStruct->unk04 == 0) + unkStruct->unk04 = 16; + + if (unkStruct->unk06 == 0) + unkStruct->unk06 = 20; + + gUnknown_020387EC = unkStruct; + + for (i = 0; i < 8; i++) + { + u8 spriteId = CreateSprite(&sprTemplate, 32 * i + 8, 80, 0); + if (spriteId == MAX_SPRITES) + break; + gSprites[spriteId].data[0] = (i < 4) ? -unkStruct->unk04 : unkStruct->unk04; + } + + REG_BLDCNT = 191; + REG_BLDY = 16; +} + +bool8 sub_80C5DCC(void) +{ + if (gUnknown_020387EC->unk08 == 0) + { + BlendPalettes(gUnknown_020387EC->selectedPalettes, 0x10, 0xFFFF); + sub_80C61B0(sub_80C603C); + gUnknown_020387EC->unk08++; + } + + if (gUnknown_020387EC->unk0A < 8) + return FALSE; + + gUnknown_020387EC->unk0C += gUnknown_020387EC->unk06; + + if (gUnknown_020387EC->unk0C >= 80) + { + gUnknown_020387EC->unk0C = 80; + REG_BLDCNT = 0; + REG_BLDY = 0; + ClearGpuRegBits(); + return TRUE; + } + else + { + return FALSE; + } +} -- cgit v1.2.3 From bd45e6acb85fe854f58db5aa99f4004379765513 Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Sat, 25 Nov 2017 02:42:34 -0500 Subject: split battle_anim_80CA710.c (todo: split asm) --- src/anim/alert.c | 33 + src/anim/angel.c | 37 + src/anim/angel_kiss.c | 87 + src/anim/anger.c | 34 + src/anim/blow_kiss.c | 39 + src/anim/bottle.c | 125 + src/anim/brace.c | 45 + src/anim/breath.c | 36 + src/anim/bullet.c | 69 + src/anim/copy_orb.c | 46 + src/anim/cube.c | 52 + src/anim/curtain.c | 82 + src/anim/cutter.c | 130 + src/anim/cyclone.c | 28 + src/anim/draw.c | 292 +++ src/anim/drum.c | 32 + src/anim/egg.c | 122 + src/anim/espeed.c | 241 ++ src/anim/evasion.c | 95 + src/anim/fang.c | 19 + src/anim/flash.c | 123 + src/anim/flying_hearts.c | 40 + src/anim/flying_path.c | 296 +++ src/anim/flying_petals.c | 83 + src/anim/glitter.c | 63 + src/anim/glow.c | 55 + src/anim/grip.c | 44 + src/anim/grow.c | 31 + src/anim/guillotine.c | 90 + src/anim/heal.c | 27 + src/anim/heart_1.c | 25 + src/anim/homing.c | 86 + src/anim/hop.c | 160 ++ src/anim/hop_2.c | 70 + src/anim/kiss_fountain.c | 38 + src/anim/leaf.c | 74 + src/anim/love_bg.c | 128 + src/anim/lunge_1.c | 124 + src/anim/lunge_2.c | 163 ++ src/anim/money.c | 62 + src/anim/moon.c | 39 + src/anim/note_rain.c | 37 + src/anim/note_scatter.c | 54 + src/anim/note_scatter_2.c | 57 + src/anim/note_wave.c | 143 + src/anim/orbit.c | 147 ++ src/anim/orbit_fast.c | 62 + src/anim/orbit_scatter.c | 31 + src/anim/orbs.c | 162 ++ src/anim/osmose.c | 29 + src/anim/perceive.c | 24 + src/anim/powder.c | 48 + src/anim/ring.c | 156 ++ src/anim/roots.c | 67 + src/anim/scan.c | 200 ++ src/anim/scary_face.c | 136 + src/anim/seed.c | 50 + src/anim/shadow_enlarge.c | 35 + src/anim/shadow_minimize.c | 262 ++ src/anim/shield.c | 81 + src/anim/shimmer.c | 48 + src/anim/silhouette.c | 77 + src/anim/slash.c | 83 + src/anim/sleep.c | 44 + src/anim/slice.c | 111 + src/anim/smoke.c | 22 + src/anim/sonic.c | 136 + src/anim/sonic_task.c | 152 ++ src/anim/spin_finger.c | 73 + src/anim/spit.c | 30 + src/anim/splash.c | 87 + src/anim/startle.c | 56 + src/anim/strike.c | 77 + src/anim/switch.c | 128 + src/anim/sword.c | 30 + src/anim/taunt_finger.c | 56 + src/anim/tendrils.c | 67 + src/anim/thought.c | 52 + src/anim/thrashing.c | 111 + src/anim/tile_in.c | 51 + src/anim/tile_out.c | 81 + src/anim/twinkle.c | 42 + src/anim/unused_1.c | 25 + src/anim/unused_2.c | 80 + src/anim/unused_3.c | 45 + src/anim/unused_4.c | 58 + src/anim/unused_5.c | 25 + src/anim/unused_6.c | 49 + src/anim/unused_7.c | 51 + src/anim/unused_8.c | 41 + src/anim/unused_9.c | 113 + src/anim/wave_finger.c | 39 + src/anim/whip.c | 46 + src/anim/withdraw.c | 69 + src/battle_anim_80CA710.c | 6258 -------------------------------------------- 95 files changed, 7501 insertions(+), 6258 deletions(-) create mode 100755 src/anim/alert.c create mode 100755 src/anim/angel.c create mode 100755 src/anim/angel_kiss.c create mode 100755 src/anim/anger.c create mode 100755 src/anim/blow_kiss.c create mode 100755 src/anim/bottle.c create mode 100755 src/anim/brace.c create mode 100755 src/anim/breath.c create mode 100755 src/anim/bullet.c create mode 100755 src/anim/copy_orb.c create mode 100755 src/anim/cube.c create mode 100755 src/anim/curtain.c create mode 100755 src/anim/cutter.c create mode 100755 src/anim/cyclone.c create mode 100755 src/anim/draw.c create mode 100755 src/anim/drum.c create mode 100755 src/anim/egg.c create mode 100755 src/anim/espeed.c create mode 100755 src/anim/evasion.c create mode 100755 src/anim/fang.c create mode 100755 src/anim/flash.c create mode 100755 src/anim/flying_hearts.c create mode 100755 src/anim/flying_path.c create mode 100755 src/anim/flying_petals.c create mode 100755 src/anim/glitter.c create mode 100755 src/anim/glow.c create mode 100755 src/anim/grip.c create mode 100755 src/anim/grow.c create mode 100755 src/anim/guillotine.c create mode 100755 src/anim/heal.c create mode 100755 src/anim/heart_1.c create mode 100755 src/anim/homing.c create mode 100755 src/anim/hop.c create mode 100755 src/anim/hop_2.c create mode 100755 src/anim/kiss_fountain.c create mode 100755 src/anim/leaf.c create mode 100755 src/anim/love_bg.c create mode 100755 src/anim/lunge_1.c create mode 100755 src/anim/lunge_2.c create mode 100755 src/anim/money.c create mode 100755 src/anim/moon.c create mode 100755 src/anim/note_rain.c create mode 100755 src/anim/note_scatter.c create mode 100755 src/anim/note_scatter_2.c create mode 100755 src/anim/note_wave.c create mode 100755 src/anim/orbit.c create mode 100755 src/anim/orbit_fast.c create mode 100755 src/anim/orbit_scatter.c create mode 100755 src/anim/orbs.c create mode 100755 src/anim/osmose.c create mode 100755 src/anim/perceive.c create mode 100755 src/anim/powder.c create mode 100755 src/anim/ring.c create mode 100755 src/anim/roots.c create mode 100755 src/anim/scan.c create mode 100755 src/anim/scary_face.c create mode 100755 src/anim/seed.c create mode 100755 src/anim/shadow_enlarge.c create mode 100755 src/anim/shadow_minimize.c create mode 100755 src/anim/shield.c create mode 100755 src/anim/shimmer.c create mode 100755 src/anim/silhouette.c create mode 100755 src/anim/slash.c create mode 100755 src/anim/sleep.c create mode 100755 src/anim/slice.c create mode 100755 src/anim/smoke.c create mode 100755 src/anim/sonic.c create mode 100755 src/anim/sonic_task.c create mode 100755 src/anim/spin_finger.c create mode 100755 src/anim/spit.c create mode 100755 src/anim/splash.c create mode 100755 src/anim/startle.c create mode 100755 src/anim/strike.c create mode 100755 src/anim/switch.c create mode 100755 src/anim/sword.c create mode 100755 src/anim/taunt_finger.c create mode 100755 src/anim/tendrils.c create mode 100755 src/anim/thought.c create mode 100755 src/anim/thrashing.c create mode 100755 src/anim/tile_in.c create mode 100755 src/anim/tile_out.c create mode 100755 src/anim/twinkle.c create mode 100755 src/anim/unused_1.c create mode 100755 src/anim/unused_2.c create mode 100755 src/anim/unused_3.c create mode 100755 src/anim/unused_4.c create mode 100755 src/anim/unused_5.c create mode 100755 src/anim/unused_6.c create mode 100755 src/anim/unused_7.c create mode 100755 src/anim/unused_8.c create mode 100755 src/anim/unused_9.c create mode 100755 src/anim/wave_finger.c create mode 100755 src/anim/whip.c create mode 100755 src/anim/withdraw.c delete mode 100755 src/battle_anim_80CA710.c (limited to 'src') diff --git a/src/anim/alert.c b/src/anim/alert.c new file mode 100755 index 000000000..538008be0 --- /dev/null +++ b/src/anim/alert.c @@ -0,0 +1,33 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +// alert (red thunder from the sides of a Pokemon, simulating more alert behavior.) +// Used in Kinesis. + +void sub_80CF610(struct Sprite* sprite) +{ + sub_8078650(sprite); + sub_807867C(sprite, gBattleAnimArgs[0]); + sprite->pos1.y += gBattleAnimArgs[1]; + if (GetBankSide(gBattleAnimBankAttacker) != 0) + { + sprite->hFlip = 1; + if (gBattleAnimArgs[2] != 0) + sprite->vFlip = 1; + } + else + { + if (gBattleAnimArgs[2] != 0) + sprite->vFlip = 1; + } + + sprite->callback = sub_8078600; + StoreSpriteCallbackInData(sprite, move_anim_8072740); +} diff --git a/src/anim/angel.c b/src/anim/angel.c new file mode 100755 index 000000000..916ebfdfd --- /dev/null +++ b/src/anim/angel.c @@ -0,0 +1,37 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +// angel (a little angel descends from somewhere towards a position) +// Used in Sweet Kiss. + +void sub_80D2938(struct Sprite* sprite) +{ + s16 r5; + if (sprite->data[0] == 0) + { + sprite->pos1.x += gBattleAnimArgs[0]; + sprite->pos1.y += gBattleAnimArgs[1]; + } + + sprite->data[0]++; + r5 = (sprite->data[0] * 10) & 0xFF; + sprite->pos2.x = Sin(r5, 0x50) >> 8; + if (sprite->data[0] <= 0x4F) + sprite->pos2.y = (sprite->data[0] / 2) + (Cos(r5, 0x50) >> 8); + + if (sprite->data[0] > 0x5A) + { + sprite->data[2]++; + sprite->pos2.x -= sprite->data[2] / 2; + } + + if (sprite->data[0] > 0x64) + move_anim_8072740(sprite); +} diff --git a/src/anim/angel_kiss.c b/src/anim/angel_kiss.c new file mode 100755 index 000000000..f6b16506a --- /dev/null +++ b/src/anim/angel_kiss.c @@ -0,0 +1,87 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" +#include "rng.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +// angel_kiss (a different variation of kiss_fountain.) +// Used in Sweet Kiss. + +void sub_80D29CC(struct Sprite* sprite) +{ + sprite->data[5]++; + sprite->pos2.x = Sin(sprite->data[3], 5); + sprite->pos2.y = sprite->data[5] / 2; + sprite->data[3] = (sprite->data[3] + 3) & 0xFF; + if (sprite->data[5] > 20) + sprite->invisible = sprite->data[5] % 2; + + if (sprite->data[5] > 30) + move_anim_8072740(sprite); +} + +void sub_80D2A38(struct Sprite* sprite) +{ + if (sprite->data[0] == 0) + { + sprite->data[1] = gBattleAnimArgs[0]; + sprite->data[2] = gBattleAnimArgs[1]; + sprite->data[0]++; + } + else + { + sprite->data[4] += sprite->data[1]; + sprite->pos2.x = sprite->data[4] >> 8; + sprite->pos2.y = Sin(sprite->data[3], sprite->data[2]); + sprite->data[3] = (sprite->data[3] + 3) & 0xFF; + if (sprite->data[3] > 0x46) + { + sprite->callback = sub_80D29CC; + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.x = 0; + sprite->pos2.y = 0; + sprite->data[3] = Random() % 0xB4; + } + } +} + +// this is for the next file, but i didnt feel like deleting it from the original 80C file. +/* void sub_80D2ABC(struct Sprite* sprite) +{ + int var; + s16 var2; + int var3; + if (sprite->data[3] == 0) + { + sprite->pos1.x += gBattleAnimArgs[0]; + sprite->pos1.y += gBattleAnimArgs[1]; + StartSpriteAnim(sprite, 0); + sprite->subpriority = sub_8079E90(gBattleAnimBankTarget) - 1; + sprite->data[2] = 1; + } + + sprite->data[0] += sprite->data[2]; + var = sprite->data[0] * 4; + if (var < 0) + var += 0xFF; + + sprite->data[1] = (sprite->data[0] * 4) -(((var) >> 8) << 8); + if (sprite->data[1] < 0) + sprite->data[1] = 0; + + var3 = sprite->data[1]; + var2 = sprite->data[0]; + var2 /= 4; + sprite->pos2.x = Cos(var3, 30 - var2); + var3 = sprite->data[1]; + var2 = sprite->data[0] / 8; + sprite->pos2.x = Sin(var3, 10 - var2); + if (sprite->data[1] > 0x80 && sprite->data[2] > 0) + sprite->data[2] = 0xFFFF; +} */ diff --git a/src/anim/anger.c b/src/anim/anger.c new file mode 100755 index 000000000..8962e0855 --- /dev/null +++ b/src/anim/anger.c @@ -0,0 +1,34 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +// anger (anger emotes, usually above the Pokemon's head, indicating annoyed emotions.) +// Used in Frustration, Rage, Swagger, Torment, and Taunt. + +void sub_80D09C0(struct Sprite* sprite) +{ + u8 bank; + if (gBattleAnimArgs[0] == 0) + bank = gBattleAnimBankAttacker; + else + bank = gBattleAnimBankTarget; + + if (GetBankSide(bank) == 1) + { + gBattleAnimArgs[1] *= -1; + } + + sprite->pos1.x = sub_8077ABC(bank, 2) + gBattleAnimArgs[1]; + sprite->pos1.y = sub_8077ABC(bank, 3) + gBattleAnimArgs[2]; + if (sprite->pos1.y <= 7) + sprite->pos1.y = 8; + + StoreSpriteCallbackInData(sprite, move_anim_8074EE0); + sprite->callback = sub_80785E4; +} diff --git a/src/anim/blow_kiss.c b/src/anim/blow_kiss.c new file mode 100755 index 000000000..e63f7189d --- /dev/null +++ b/src/anim/blow_kiss.c @@ -0,0 +1,39 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +static void sub_80D1FA4(struct Sprite* sprite); + +// blow_kiss (a heart floating across the screen.) +// Used in Attract. + +void sub_80D1F58(struct Sprite* sprite) +{ + sub_80787B0(sprite, 1); + sprite->data[0] = 0x5F; + sprite->data[1] = sprite->pos1.x; + sprite->data[2] = sub_8077ABC(gBattleAnimBankTarget, 2); + sprite->data[3] = sprite->pos1.y; + sprite->data[4] = sub_8077ABC(gBattleAnimBankTarget, 3); + obj_translate_based_on_private_1_2_3_4(sprite); + sprite->callback = sub_80D1FA4; +} + +void sub_80D1FA4(struct Sprite* sprite) +{ + if (sub_8078B5C(sprite) == 0) + { + sprite->pos2.y += Sin(sprite->data[5], 14); + sprite->data[5] = (sprite->data[5] + 4) & 0xFF; + } + else + { + move_anim_8072740(sprite); + } +} diff --git a/src/anim/bottle.c b/src/anim/bottle.c new file mode 100755 index 000000000..ac5e51881 --- /dev/null +++ b/src/anim/bottle.c @@ -0,0 +1,125 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +static void sub_80CCF70(struct Sprite* sprite); +static void sub_80CD0CC(struct Sprite* sprite, int unk1, int unk2); + +// bottle (shows a bottle swinging back and forth.) +// Used by Milk Drink. + +void sub_80CCF04(struct Sprite* sprite) +{ + sprite->pos1.x = sub_8077ABC(gBattleAnimBankTarget, 2); + sprite->pos1.y = sub_8077ABC(gBattleAnimBankTarget, 3) + 0xFFE8; + sprite->data[0] = 0; + sprite->data[1] = 0; + sprite->data[2] = 0; + sprite->data[3] = 0; + sprite->data[4] = 0; + sprite->data[6] = 0; + sprite->data[7] = 16; + REG_BLDCNT = 0x3F40; + REG_BLDALPHA = (sprite->data[7] << 8) | sprite->data[6]; + sprite->callback = sub_80CCF70; +} + +void sub_80CCF70(struct Sprite* sprite) +{ + switch (sprite->data[0]) + { + case 0: + if (++sprite->data[2] > 0) + { + sprite->data[2] = 0; + if (((++sprite->data[1]) & 1) != 0) + { + if (sprite->data[6] <= 15) + sprite->data[6]++; + } + else if (sprite->data[7] > 0) + sprite->data[7]--; + + REG_BLDALPHA = (sprite->data[7] << 8) | sprite->data[6]; + if (sprite->data[6] == 16 && sprite->data[7] == 0) + { + sprite->data[1] = 0; + sprite->data[0]++; + } + } + break; + case 1: + if (++sprite->data[1] > 8) + { + sprite->data[1] = 0; + StartSpriteAffineAnim(sprite, 1); + sprite->data[0]++; + } + break; + case 2: + sub_80CD0CC(sprite, 16, 4); + if (++sprite->data[1] > 2) + { + sprite->data[1] = 0; + sprite->pos1.y++; + } + + if (++sprite->data[2] <= 29) + break; + + if (sprite->data[2] & 1) + { + if (sprite->data[6] > 0) + sprite->data[6]--; + } + else if (sprite->data[7] <= 15) + { + sprite->data[7]++; + } + + REG_BLDALPHA = (sprite->data[7] << 8) | sprite->data[6]; + if (sprite->data[6] == 0 && sprite->data[7] == 16) + { + sprite->data[1] = 0; + sprite->data[2] = 0; + sprite->data[0]++; + } + break; + case 3: + sprite->invisible = 1; + sprite->data[0]++; + break; + case 4: + REG_BLDCNT = 0; + REG_BLDALPHA = 0; + move_anim_8072740(sprite); + break; + } +} + +void sub_80CD0CC(struct Sprite* sprite, int unk1, int unk2) +{ + if (sprite->data[3] <= 11) + sprite->data[4] += 2; + + if ((u16)(sprite->data[3] - 0x12) <= 0x17) + sprite->data[4] -= 2; + + if ((sprite->data[3]) > 0x2F) + sprite->data[4] += 2; + + sprite->pos2.x = sprite->data[4] / 9; + sprite->pos2.y = sprite->data[4] / 14; + if (sprite->pos2.y < 0) + sprite->pos2.y *= -1; + + sprite->data[3]++; + if (sprite->data[3] > 0x3B) + sprite->data[3] = 0; +} diff --git a/src/anim/brace.c b/src/anim/brace.c new file mode 100755 index 000000000..7b084efbb --- /dev/null +++ b/src/anim/brace.c @@ -0,0 +1,45 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +static void sub_80CDF70(struct Sprite* sprite); + +// brace (the Pokemon prepares to endure a hit) +// Used in Endure. + +void sub_80CDF0C(struct Sprite* sprite) +{ + if (gBattleAnimArgs[0] == 0) + { + sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 0) + gBattleAnimArgs[1]; + sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 1) + gBattleAnimArgs[2]; + } + else + { + sprite->pos1.x = sub_8077ABC(gBattleAnimBankTarget, 0) + gBattleAnimArgs[1]; + sprite->pos1.y = sub_8077ABC(gBattleAnimBankTarget, 1) + gBattleAnimArgs[2]; + } + + sprite->data[0] = 0; + sprite->data[1] = gBattleAnimArgs[3]; + sprite->callback = sub_80CDF70; +} + +void sub_80CDF70(struct Sprite* sprite) +{ + if (++sprite->data[0] > sprite->data[1]) + { + sprite->data[0] = 0; + sprite->pos1.y--; + } + + sprite->pos1.y -= sprite->data[0]; + if (sprite->animEnded) + move_anim_8072740(sprite); +} diff --git a/src/anim/breath.c b/src/anim/breath.c new file mode 100755 index 000000000..0fcc7fa08 --- /dev/null +++ b/src/anim/breath.c @@ -0,0 +1,36 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +// breath (a puff of smoke, usually from the mouth or nose of the Pokemon.) +// Used in Swagger and Bulk Up. + +void sub_80D0930(struct Sprite* sprite) +{ + if (GetBankSide(gBattleAnimBankAttacker) == 0) + { + StartSpriteAnim(sprite, 0); + sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 2) + 32; + sprite->data[1] = 0x40; + } + else + { + StartSpriteAnim(sprite, 1); + sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 2) - 32; + sprite->data[1] = -0x40; + } + + sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 3); + sprite->data[0] = 0x34; + sprite->data[2] = 0; + sprite->data[3] = 0; + sprite->data[4] = 0; + StoreSpriteCallbackInData(sprite, move_anim_8072740); + sprite->callback = sub_8078394; +} diff --git a/src/anim/bullet.c b/src/anim/bullet.c new file mode 100755 index 000000000..02d1e351b --- /dev/null +++ b/src/anim/bullet.c @@ -0,0 +1,69 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" +#include "rng.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +static void sub_80D0030(struct Sprite* sprite); +static void sub_80D00B4(struct Sprite* sprite); + +// bullet (shoot seeds as ammunition.) +// Used by Bullet Seed. + +void sub_80CFFD8(struct Sprite* sprite) +{ + sub_80787B0(sprite, 1); + sprite->data[0] = 20; + sprite->data[2] = sub_8077ABC(gBattleAnimBankTarget, 2); + sprite->data[4] = sub_8077ABC(gBattleAnimBankTarget, 3); + sprite->callback = sub_8078B34; + sprite->affineAnimPaused = 1; + StoreSpriteCallbackInData(sprite, sub_80D0030); +} + +void sub_80D0030(struct Sprite* sprite) +{ + int i; + u16 rand; + s16* ptr; + PlaySE12WithPanning(0xA6, sub_8076F98(0x3F)); + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.y = 0; + sprite->pos2.x = 0; + ptr = &sprite->data[7]; + for (i = 0; i < 8; i++) + { + ptr[i - 7] = 0; + } + + rand = Random(); + sprite->data[6] = 0xFFF4 - (rand & 7); + rand = Random(); + sprite->data[7] = (rand % 0xA0) + 0xA0; + sprite->callback = sub_80D00B4; + sprite->affineAnimPaused = 0; +} + +void sub_80D00B4(struct Sprite* sprite) +{ + sprite->data[0] += sprite->data[7]; + sprite->pos2.x = sprite->data[0] >> 8; + if (sprite->data[7] & 1) + sprite->pos2.x = -sprite->pos2.x; + + sprite->pos2.y = Sin(sprite->data[1], sprite->data[6]); + sprite->data[1] += 8; + if (sprite->data[1] > 0x7E) + { + sprite->data[1] = 0; + sprite->data[2] /= 2; + if (++sprite->data[3] == 1) + move_anim_8072740(sprite); + } +} diff --git a/src/anim/copy_orb.c b/src/anim/copy_orb.c new file mode 100755 index 000000000..96d2910f0 --- /dev/null +++ b/src/anim/copy_orb.c @@ -0,0 +1,46 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +// copy_orb +// Used in Mimic. + +void sub_80CB4CC(struct Sprite* sprite) +{ + switch (sprite->data[0]) + { + case 0: + { + if (GetBankSide(gBattleAnimBankTarget) == 0) + { + s16 a = gBattleAnimArgs[0]; + gBattleAnimArgs[0] = -a; + } + + sprite->pos1.x = sub_8077ABC(gBattleAnimBankTarget, 0) + gBattleAnimArgs[0]; + sprite->pos1.y = sub_8077ABC(gBattleAnimBankTarget, 1) + gBattleAnimArgs[1]; + sprite->invisible = 1; + sprite->data[0]++; + break; + } + case 1: + { + sprite->invisible = 0; + if (sprite->affineAnimEnded) + { + ChangeSpriteAffineAnim(sprite, 1); + sprite->data[0] = 25; + sprite->data[2] = sub_8077ABC(gBattleAnimBankAttacker, 2); + sprite->data[4] = sub_8077ABC(gBattleAnimBankAttacker, 3); + sprite->callback = sub_8078CC0; + StoreSpriteCallbackInData(sprite, move_anim_8072740); + break; + } + } + } +} diff --git a/src/anim/cube.c b/src/anim/cube.c new file mode 100755 index 000000000..250e3f2d1 --- /dev/null +++ b/src/anim/cube.c @@ -0,0 +1,52 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" +#include "songs.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +static void sub_80CE000(struct Sprite* sprite); + +// cube (shows a sphere sharpening into a cube.) +// Used in Sharpen. + +void sub_80CDFB0(struct Sprite* sprite) +{ + sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 2); + sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 3) - 12; + sprite->data[0] = 0; + sprite->data[1] = 2; + sprite->data[2] = 0; + sprite->data[3] = 0; + sprite->data[4] = 0; + sprite->data[5] = sub_8076F98(-0x40); + sprite->callback = sub_80CE000; +} + +void sub_80CE000(struct Sprite* sprite) +{ + if (++sprite->data[0] >= sprite->data[1]) + { + sprite->invisible = !sprite->invisible; + if (!sprite->invisible) + { + sprite->data[4]++; + if (!(sprite->data[4] & 1)) + PlaySE12WithPanning(SE_W207B, sprite->data[5]); + } + + sprite->data[0] = 0; + if (++sprite->data[2] > 1) + { + sprite->data[2] = 0; + sprite->data[1]++; + } + } + + if (sprite->animEnded && sprite->data[1] > 16 && sprite->invisible) + move_anim_8072740(sprite); +} diff --git a/src/anim/curtain.c b/src/anim/curtain.c new file mode 100755 index 000000000..1f34cb173 --- /dev/null +++ b/src/anim/curtain.c @@ -0,0 +1,82 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" +#include "palette.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +extern u16 gUnknown_03004240; +extern u16 gUnknown_030042C4; + +static void sub_80D1D48(u8 taskId); +static void sub_80D1D9C(u8 taskId); + +// curtain (a sweeping blackening curtain in the BG) +// Used in Fake Out. + +void sub_80D1CD0(u8 taskId) +{ + int zero; + bool8 result = NotInBattle(); + u16 var = 0xF0; + if (result) + { + var = 0x98; + zero = 0; + } + else + { + zero = 0; + } + + gUnknown_030042C4 = var; + gUnknown_03004240 = 0xA0; + REG_WIN0H = var; + REG_WIN0V = 0xA0; + REG_WININ = 0x3F1F; + REG_WINOUT = 0x3F3F; + REG_BLDCNT = 0xC8; + REG_BLDY = 0x10; + gTasks[taskId].data[0] = zero; + gTasks[taskId].data[1] = var; + gTasks[taskId].func = sub_80D1D48; +} + +void sub_80D1D48(u8 taskId) +{ + gTasks[taskId].data[0] += 13; + gTasks[taskId].data[1] -= 13; + if (gTasks[taskId].data[0] >= gTasks[taskId].data[1]) + { + gUnknown_030042C4 = 0; + gTasks[taskId].func = sub_80D1D9C; + } + else + { + gUnknown_030042C4 = gTasks[taskId].data[1] | (gTasks[taskId].data[0] << 8); + } +} + +void sub_80D1D9C(u8 taskId) +{ + if (++gTasks[taskId].data[10] == 5) + { + gTasks[taskId].data[11] = 0x88; + RequestSpriteCopy((u8 *)(&gTasks[taskId].data[11]), (u8 *)(®_BLDCNT), 2); + BlendPalettes(sub_80791A8(1, 0, 0, 0, 0, 0, 0), 16, RGB(31, 31, 31)); + } + else if (gTasks[taskId].data[10] > 4) + { + gUnknown_030042C4 = 0; + gUnknown_03004240 = 0; + REG_WININ = 0x3F3F; + REG_WINOUT = 0x3F3F; + REG_BLDCNT = 0; + REG_BLDY = 0; + DestroyAnimVisualTask(taskId); + } +} diff --git a/src/anim/cutter.c b/src/anim/cutter.c new file mode 100755 index 000000000..9859497e5 --- /dev/null +++ b/src/anim/cutter.c @@ -0,0 +1,130 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +static void sub_80CB09C(struct Sprite* sprite); +static void sub_80CB1A4(struct Sprite* sprite); + +// cutter (the cresent shaped leaf used in throwing projectiles for the listed moves.) +// Used by Razor Leaf and Magical Leaf. + +void sub_80CAFD0(struct Sprite* sprite) +{ + sub_80787B0(sprite, 1); + if (GetBankSide(gBattleAnimBankAttacker)) + { + gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + } + + sprite->data[0] = gBattleAnimArgs[4]; + if (!(gBattleAnimArgs[6])) + { + sprite->data[2] = sub_8077ABC(gBattleAnimBankTarget, 2) + gBattleAnimArgs[2]; + sprite->data[4] = sub_8077ABC(gBattleAnimBankTarget, 3) + gBattleAnimArgs[3]; + } + else + { + sub_807A3FC(gBattleAnimBankTarget, 1, &sprite->data[2], &sprite->data[4]); + sprite->data[2] += gBattleAnimArgs[2]; + sprite->data[4] += gBattleAnimArgs[3]; + } + + sprite->data[5] = gBattleAnimArgs[5]; + sub_80786EC(sprite); + if (GetBankSide(gBattleAnimBankAttacker) == GetBankSide(gBattleAnimBankTarget)) + { + sprite->data[0] = 1; + } + else + { + sprite->data[0] = 0; + } + + sprite->callback = sub_80CB09C; +} + +void sub_80CB09C(struct Sprite* sprite) +{ + bool8 c = FALSE; + s16 a = sprite->data[0]; + s16 b = sprite->data[7]; + s16 r0; + + sprite->data[0] = 1; + sub_8078718(sprite); + r0 = sprite->data[7]; + sprite->data[0] = a; + if (b > 0xC8 && r0 <= 0x37 && sprite->oam.affineParam == 0) + sprite->oam.affineParam++; + + if (sprite->oam.affineParam != 0 && sprite->data[0] != 0) + { + sprite->invisible ^= 1; + sprite->oam.affineParam++; + if (sprite->oam.affineParam == 0x1E) + c = TRUE; + } + + if (sprite->pos1.x + sprite->pos2.x > 0x100 + || sprite->pos1.x + sprite->pos2.x < -16 + || sprite->pos1.y + sprite->pos2.y > 0xA0 + || sprite->pos1.y + sprite->pos2.y < -16) + c = TRUE; + + if (c) + move_anim_8072740(sprite); +} + +void sub_80CB144(struct Sprite* sprite) +{ + if (!NotInBattle() && IsDoubleBattle() == TRUE) + { + sub_807A3FC(gBattleAnimBankTarget, 1, &sprite->pos1.x, &sprite->pos1.y); + } + + sprite->pos1.y += 32; + sprite->data[0] = gBattleAnimArgs[0]; + sprite->data[1] = gBattleAnimArgs[1]; + sprite->data[2] = gBattleAnimArgs[2]; + sprite->data[3] = gBattleAnimArgs[3]; + sprite->data[4] = gBattleAnimArgs[4]; + sprite->callback = sub_80CB1A4; +} + +void sub_80CB1A4(struct Sprite* sprite) +{ + if (sprite->data[1] == 0xFF) + { + sprite->pos1.y -= 2; + } + else if (sprite->data[1] > 0) + { + sprite->pos1.y -= 2; + sprite->data[1] -= 2; + } + + sprite->data[5] += sprite->data[2]; + if (sprite->data[0] < sprite->data[4]) + sprite->data[5] += sprite->data[2]; + + sprite->data[5] &= 0xFF; + sprite->pos2.x = Cos(sprite->data[5], sprite->data[3]); + sprite->pos2.y = Sin(sprite->data[5], 5); + if (sprite->data[5] <= 0x7F) + { + sprite->oam.priority = sub_8079ED4(gBattleAnimBankTarget) - 1; + } + else + { + sprite->oam.priority = sub_8079ED4(gBattleAnimBankTarget) + 1; + } + + sprite->data[0]--; + if (!sprite->data[0]) + move_anim_8072740(sprite); +} diff --git a/src/anim/cyclone.c b/src/anim/cyclone.c new file mode 100755 index 000000000..b19304f17 --- /dev/null +++ b/src/anim/cyclone.c @@ -0,0 +1,28 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +// cyclone (creates a circling motion like a cyclone, usually a wind sprite.) +// Used in Razor Wind. + +void sub_80D0118(struct Sprite* sprite) +{ + sub_80787B0(sprite, 0); + if (GetBankSide(gBattleAnimBankAttacker) == 0) + sprite->pos1.y += 16; + + sprite->data[0] = gBattleAnimArgs[4]; + sprite->data[1] = gBattleAnimArgs[2]; + sprite->data[2] = gBattleAnimArgs[5]; + sprite->data[3] = gBattleAnimArgs[6]; + sprite->data[4] = gBattleAnimArgs[3]; + sprite->callback = sub_8078114; + StoreSpriteCallbackInData(sprite, move_anim_8072740); + sprite->callback(sprite); +} diff --git a/src/anim/draw.c b/src/anim/draw.c new file mode 100755 index 000000000..c075af097 --- /dev/null +++ b/src/anim/draw.c @@ -0,0 +1,292 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" +#include "unknown_task.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +extern u16 gUnknown_03004288; +extern u16 gUnknown_030042C0; + +static void sub_80D0D68(u8 taskId); +static void sub_80D0E8C(struct Sprite* sprite); + +// draw (draws the Pokemon into the world using a pencil.) +// Used in Sketch. + +void sub_80D0C88(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + struct UnknownTaskStruct sp; + s16 i; + task->data[0] = sub_8077FC0(gBattleAnimBankTarget) + 32; + task->data[1] = 4; + task->data[2] = 0; + task->data[3] = 0; + task->data[4] = 0; + task->data[5] = 0; + task->data[15] = sub_807A100(gBattleAnimBankTarget, 0); + if (GetBankIdentity_permutated(gBattleAnimBankTarget) == 1) + { + task->data[6] = gUnknown_030042C0; + sp.dest = (u16 *)REG_ADDR_BG1HOFS; + } + else + { + task->data[6] = gUnknown_03004288; + sp.dest = (u16 *)REG_ADDR_BG2HOFS; + } + + for (i = task->data[0] - 0x40; i <= task->data[0];i++) + { + if (i >= 0) + { + gUnknown_03004DE0[0][i] = task->data[6] + 0xF0; + gUnknown_03004DE0[1][i] = task->data[6] + 0xF0; + } + } + + sp.control = 0xa2600001; + sp.unk8 = 1; + sp.unk9 = 0; + sub_80895F8(sp); + task->func = sub_80D0D68; +} + +#ifdef NONMATCHING +void sub_80D0D68(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + + switch (task->data[4]) + { + case 0: + if (++task->data[5] > 20) + task->data[4]++; + break; + case 1: + if (++task->data[1] > 3) + { + task->data[1] = 0; + task->data[2] = task->data[3] & 3; + task->data[5] = task->data[0] - task->data[3]; + switch (task->data[2]) + { + case 0: + break; + case 1: + task->data[5] -= 2; + break; + case 2: + task->data[5] += 1; + break; + case 3: + task->data[5] += 1; + break; + } + + if (task->data[5] >= 0) + { + gUnknown_03004DE0[0][task->data[5]] = task->data[6]; + gUnknown_03004DE0[1][task->data[5]] = task->data[6]; + } + + if (++task->data[3] >= task->data[15]) + { + gUnknown_03004DC0.unk15 = 3; + DestroyAnimVisualTask(taskId); + } + } + break; + } +} +#else +__attribute__((naked)) +void sub_80D0D68(u8 taskId) +{ + asm(".syntax unified\n\ + push {r4,lr}\n\ + lsls r0, 24\n\ + lsrs r4, r0, 24\n\ + lsls r0, r4, 2\n\ + adds r0, r4\n\ + lsls r0, 3\n\ + ldr r1, _080D0D88 @ =gTasks\n\ + adds r3, r0, r1\n\ + movs r1, 0x10\n\ + ldrsh r0, [r3, r1]\n\ + cmp r0, 0\n\ + beq _080D0D8C\n\ + cmp r0, 0x1\n\ + beq _080D0DA2\n\ + b _080D0E22\n\ + .align 2, 0\n\ +_080D0D88: .4byte gTasks\n\ +_080D0D8C:\n\ + ldrh r0, [r3, 0x12]\n\ + adds r0, 0x1\n\ + strh r0, [r3, 0x12]\n\ + lsls r0, 16\n\ + asrs r0, 16\n\ + cmp r0, 0x14\n\ + ble _080D0E22\n\ + ldrh r0, [r3, 0x10]\n\ + adds r0, 0x1\n\ + strh r0, [r3, 0x10]\n\ + b _080D0E22\n\ +_080D0DA2:\n\ + ldrh r0, [r3, 0xA]\n\ + adds r0, 0x1\n\ + strh r0, [r3, 0xA]\n\ + lsls r0, 16\n\ + asrs r0, 16\n\ + cmp r0, 0x3\n\ + ble _080D0E22\n\ + movs r0, 0\n\ + strh r0, [r3, 0xA]\n\ + ldrh r1, [r3, 0xE]\n\ + movs r0, 0x3\n\ + ands r0, r1\n\ + strh r0, [r3, 0xC]\n\ + ldrh r0, [r3, 0x8]\n\ + subs r0, r1\n\ + strh r0, [r3, 0x12]\n\ + movs r2, 0xC\n\ + ldrsh r1, [r3, r2]\n\ + cmp r1, 0x1\n\ + beq _080D0DD8\n\ + cmp r1, 0x1\n\ + ble _080D0DE0\n\ + cmp r1, 0x2\n\ + beq _080D0DDC\n\ + cmp r1, 0x3\n\ + beq _080D0DDC\n\ + b _080D0DE0\n\ +_080D0DD8:\n\ + subs r0, 0x2\n\ + b _080D0DDE\n\ +_080D0DDC:\n\ + adds r0, 0x1\n\ +_080D0DDE:\n\ + strh r0, [r3, 0x12]\n\ +_080D0DE0:\n\ + movs r1, 0x12\n\ + ldrsh r0, [r3, r1]\n\ + cmp r0, 0\n\ + blt _080D0E04\n\ + ldr r2, _080D0E28 @ =gUnknown_03004DE0\n\ + lsls r0, 1\n\ + adds r0, r2\n\ + ldrh r1, [r3, 0x14]\n\ + strh r1, [r0]\n\ + movs r1, 0x12\n\ + ldrsh r0, [r3, r1]\n\ + lsls r0, 1\n\ + movs r1, 0xF0\n\ + lsls r1, 3\n\ + adds r2, r1\n\ + adds r0, r2\n\ + ldrh r1, [r3, 0x14]\n\ + strh r1, [r0]\n\ +_080D0E04:\n\ + ldrh r0, [r3, 0xE]\n\ + adds r0, 0x1\n\ + strh r0, [r3, 0xE]\n\ + lsls r0, 16\n\ + asrs r0, 16\n\ + movs r2, 0x26\n\ + ldrsh r1, [r3, r2]\n\ + cmp r0, r1\n\ + blt _080D0E22\n\ + ldr r1, _080D0E2C @ =gUnknown_03004DC0\n\ + movs r0, 0x3\n\ + strb r0, [r1, 0x15]\n\ + adds r0, r4, 0\n\ + bl DestroyAnimVisualTask\n\ +_080D0E22:\n\ + pop {r4}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_080D0E28: .4byte gUnknown_03004DE0\n\ +_080D0E2C: .4byte gUnknown_03004DC0\n\ +.syntax divided\n"); +} +#endif + +void sub_80D0E30(struct Sprite* sprite) +{ + sprite->pos1.x = sub_8077ABC(gBattleAnimBankTarget, 0) - 16; + sprite->pos1.y = sub_8077FC0(gBattleAnimBankTarget) + 16; + sprite->data[0] = 0; + sprite->data[1] = 0; + sprite->data[2] = 0; + sprite->data[3] = 16; + sprite->data[4] = 0; + sprite->data[5] = sub_807A100(gBattleAnimBankTarget, 0) + 2; + sprite->data[6] = sub_8076F98(0x3F); + sprite->callback = sub_80D0E8C; +} + +void sub_80D0E8C(struct Sprite* sprite) +{ + switch (sprite->data[0]) + { + case 0: + if (++sprite->data[2] > 1) + { + sprite->data[2] = 0; + sprite->invisible = !sprite->invisible; + } + if (++sprite->data[1] > 16) + { + sprite->invisible = 0; + sprite->data[0]++; + } + break; + case 1: + if (++sprite->data[1] > 3 && sprite->data[2] < sprite->data[5]) + { + sprite->data[1] = 0; + sprite->pos1.y -= 1; + sprite->data[2]++; + if (sprite->data[2] % 10 == 0) + PlaySE12WithPanning(0xCD, sprite->data[6]); + } + sprite->data[4] += sprite->data[3]; + if (sprite->data[4] > 31) + { + sprite->data[4] = 0x40 - sprite->data[4]; + sprite->data[3] *= -1; + } + else if (sprite->data[4] <= -32) + { + sprite->data[4] = -0x40 - sprite->data[4]; + sprite->data[3] *= -1; + } + sprite->pos2.x = sprite->data[4]; + if (sprite->data[5] == sprite->data[2]) + { + sprite->data[1] = 0; + sprite->data[2] = 0; + sprite->data[0]++; + } + break; + case 2: + if (++sprite->data[2] > 1) + { + sprite->data[2] = 0; + sprite->invisible = !sprite->invisible; + } + if (++sprite->data[1] > 16) + { + sprite->invisible = 0; + move_anim_8072740(sprite); + } + break; + } +} diff --git a/src/anim/drum.c b/src/anim/drum.c new file mode 100755 index 000000000..60cb2acc1 --- /dev/null +++ b/src/anim/drum.c @@ -0,0 +1,32 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +// drum (using hands to slap the Pokemon's belly in a rhythm.) +// Used in Belly Drum. + +void sub_80CEDF0(struct Sprite* sprite) +{ + s16 a; + if (gBattleAnimArgs[0] == 1) + { + sprite->oam.matrixNum = 8; + a = 16; + } + else + { + a = -16; + } + + sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 2) + a; + sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 3) + 8; + sprite->data[0] = 8; + sprite->callback = sub_80782D8; + StoreSpriteCallbackInData(sprite, move_anim_8072740); +} diff --git a/src/anim/egg.c b/src/anim/egg.c new file mode 100755 index 000000000..a5bcffa6d --- /dev/null +++ b/src/anim/egg.c @@ -0,0 +1,122 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +static void sub_80D13AC(struct Sprite* sprite); +static void sub_80D1424(struct Sprite* sprite); +static void sub_80D144C(struct Sprite* sprite); +static void sub_80D14C4(struct Sprite* sprite); +static void sub_80D1504(struct Sprite* sprite); +static void sub_80D154C(struct Sprite* sprite); +static void sub_80D158C(struct Sprite* sprite); + +// egg (a hatching egg) +// Used in Softboiled. + +void sub_80D1368(struct Sprite* sprite) +{ + s16 r1; + sub_80787B0(sprite, 0); + r1 = (GetBankSide(gBattleAnimBankAttacker)) ? -0xA0 : 0xA0; + sprite->data[0] = 0x380; + sprite->data[1] = r1; + sprite->data[7] = gBattleAnimArgs[2]; + sprite->callback = sub_80D13AC; +} + +void sub_80D13AC(struct Sprite* sprite) +{ + s16 add; + sprite->pos2.y -= (sprite->data[0] >> 8); + sprite->pos2.x = sprite->data[1] >> 8; + sprite->data[0] -= 32; + add = (GetBankSide(gBattleAnimBankAttacker)) ? -0xA0 : 0xA0; + sprite->data[1] += add; + if (sprite->pos2.y > 0) + { + sprite->pos1.y += sprite->pos2.y; + sprite->pos1.x += sprite->pos2.x; + sprite->pos2.y = 0; + sprite->pos2.x = 0; + sprite->data[0] = 0; + StartSpriteAffineAnim(sprite, 1); + sprite->callback = sub_80D1424; + } +} + +void sub_80D1424(struct Sprite* sprite) +{ + if (sprite->data[0]++ > 19) + { + StartSpriteAffineAnim(sprite, 2); + sprite->callback = sub_80D144C; + } +} + +void sub_80D144C(struct Sprite* sprite) +{ + if (sprite->affineAnimEnded) + { + StartSpriteAffineAnim(sprite, 1); + sprite->data[0] = 0; + if (sprite->data[7] == 0) + { + sprite->oam.tileNum += 16; + sprite->callback = sub_80D14C4; + } + else + { + sprite->oam.tileNum += 32; + sprite->callback = sub_80D154C; + } + } +} + +void sub_80D14C4(struct Sprite* sprite) +{ + sprite->pos2.y -= 2; + if (++sprite->data[0] == 9) + { + sprite->data[0] = 16; + sprite->data[1] = 0; + REG_BLDCNT = 0x3F40; + REG_BLDALPHA = sprite->data[0]; + sprite->callback = sub_80D1504; + } +} + +void sub_80D1504(struct Sprite* sprite) +{ + if (sprite->data[1]++ % 3 == 0) + { + sprite->data[0]--; + REG_BLDALPHA = sprite->data[0] | ((16 - sprite->data[0]) << 8); + if (sprite->data[0] == 0) + sprite->callback = sub_80D154C; + } +} + +void sub_80D154C(struct Sprite* sprite) +{ + if ((u16)gBattleAnimArgs[7] == 0xFFFF) + { + sprite->invisible = 1; + if (sprite->data[7] == 0) + sprite->callback = sub_80D158C; + else + sprite->callback = move_anim_8072740; + } +} + +void sub_80D158C(struct Sprite* sprite) +{ + REG_BLDCNT = 0; + REG_BLDALPHA = 0; + move_anim_8072740(sprite); +} diff --git a/src/anim/espeed.c b/src/anim/espeed.c new file mode 100755 index 000000000..621d386e1 --- /dev/null +++ b/src/anim/espeed.c @@ -0,0 +1,241 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +extern s8 gUnknown_083D7A00[4][2]; + +extern struct AffineAnimFrameCmd gUnknown_083D79BC; +extern struct SpriteTemplate gSpriteTemplate_83D79E8; + +static void sub_80D15E0(u8 taskId); +static void sub_80D16A0(u8 taskId); +static void sub_80D1808(u8 taskId); +static void sub_80D1930(u8 taskId); + +// espeed (the Pokemon's width decreases as the sprite becomes vertically compressed) +// Used in Extremespeed. + +// apply espeed +void sub_80D15A4(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + u8 spriteId = GetAnimBankSpriteId(0); + task->data[0] = spriteId; + sub_80798F4(task, spriteId, &gUnknown_083D79BC); + task->func = sub_80D15E0; +} + +void sub_80D15E0(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + if (sub_807992C(task) == 0) + { + gSprites[task->data[0]].pos2.y = 0; + gSprites[task->data[0]].invisible = 1; + DestroyAnimVisualTask(taskId); + } +} + +// espeed hit effect +void sub_80D1638(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + task->data[0] = 0; + task->data[1] = 0; + task->data[2] = 0; + task->data[3] = 0; + task->data[12] = 3; + if (GetBankSide(gBattleAnimBankTarget) == 0) + { + task->data[13] = 0xFFFF; + task->data[14] = 8; + } + else + { + task->data[13] = 1; + task->data[14] = -8; + } + + task->data[15] = GetAnimBankSpriteId(1); + task->func = sub_80D16A0; +} + +void sub_80D16A0(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + + switch (task->data[0]) + { + case 0: + gSprites[task->data[15]].pos2.x += task->data[14]; + task->data[1] = 0; + task->data[2] = 0; + task->data[3] = 0; + task->data[0]++; + break; + case 1: + if (++task->data[1] > 1) + { + task->data[1] = 0; + task->data[2]++; + if (task->data[2] & 1) + gSprites[task->data[15]].pos2.x += 6; + else + gSprites[task->data[15]].pos2.x -= 6; + + if (++task->data[3] > 4) + { + if (task->data[2] & 1) + gSprites[task->data[15]].pos2.x -= 6; + + task->data[0]++; + } + } + break; + case 2: + if (--task->data[12] != 0) + task->data[0] = 0; + else + task->data[0]++; + break; + case 3: + gSprites[task->data[15]].pos2.x += task->data[13]; + if (gSprites[task->data[15]].pos2.x == 0) + DestroyAnimVisualTask(taskId); + break; + } +} + +// espeed poke flicker in +void sub_80D17C4(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + task->data[0] = 0; + task->data[1] = 0; + task->data[2] = 0; + task->data[3] = 0; + task->data[4] = 1; + task->data[13] = 14; + task->data[14] = 2; + task->data[15] = GetAnimBankSpriteId(0); + task->func = sub_80D1808; +} + +void sub_80D1808(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + if (task->data[0] == 0 && ++task->data[1] > task->data[4]) + { + task->data[1] = 0; + if (++task->data[2] & 1) + gSprites[task->data[15]].invisible = 0; + else + gSprites[task->data[15]].invisible = 1; + + if (++task->data[3] >= task->data[13]) + { + if (++task->data[4] < task->data[14]) + { + task->data[1] = 0; + task->data[2] = 0; + task->data[3] = 0; + } + else + { + gSprites[task->data[15]].invisible = 0; + DestroyAnimVisualTask(taskId); + } + } + } +} + +// espeed smoke flicker +void sub_80D18D4(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + task->data[0] = 0; + task->data[1] = 4; + task->data[2] = 0; + task->data[3] = 0; + task->data[4] = 0; + task->data[5] = 0; + task->data[6] = 0; + task->data[7] = 0; + task->data[8] = 0; + task->data[13] = 0; + task->data[14] = sub_8077ABC(gBattleAnimBankAttacker, 0); + task->data[15] = sub_8077ABC(gBattleAnimBankAttacker, 1); + task->func = sub_80D1930; +} + +void sub_80D1930(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + switch (task->data[8]) + { + case 0: + if (++task->data[4] > 1) + { + task->data[4] = 0; + task->data[5] = (task->data[5] + 1) & 1; + if (++task->data[6] > 20) + { + if (task->data[7] == 0) + { + task->data[6] = 0; + task->data[8] = 1; + } + else + task->data[8] = 2; + } + } + break; + case 1: + task->data[5] = 0; + if (++task->data[4] > 20) + { + task->data[7] = 1; + task->data[8] = 0; + } + break; + case 2: + task->data[5] = 1; + break; + } + + switch (task->data[0]) + { + case 0: + if (++task->data[1] > 4) + { + u8 spriteId; + task->data[1] = 0; + spriteId = CreateSprite(&gSpriteTemplate_83D79E8, task->data[14], task->data[15], 0); + if (spriteId != MAX_SPRITES) + { + gSprites[spriteId].data[0] = taskId; + gSprites[spriteId].data[1] = 13; + gSprites[spriteId].pos2.x = gUnknown_083D7A00[task->data[2]][0]; + gSprites[spriteId].pos2.y = gUnknown_083D7A00[task->data[2]][1]; + task->data[13]++; + if (++task->data[2] > 3) + { + task->data[2] = 0; + if (++task->data[3] > 5) + task->data[0]++; + } + } + } + break; + case 1: + if (task->data[13] == 0) + DestroyAnimVisualTask(taskId); + break; + } +} diff --git a/src/anim/evasion.c b/src/anim/evasion.c new file mode 100755 index 000000000..b4e81009b --- /dev/null +++ b/src/anim/evasion.c @@ -0,0 +1,95 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" +#include "palette.h" +#include "blend_palette.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +static void sub_80CE910(u8 taskId); +static void sub_80CE974(struct Sprite* sprite); + +// evasion (the shadow seen during evasion increases, mainly Double Team.) +// Used by Double Team. + +void sub_80CE7E0(u8 taskId) +{ + u16 i; + int obj; + u16 r3; + u16 r4; + struct Task* task = &gTasks[taskId]; + task->data[0] = GetAnimBankSpriteId(0); + task->data[1] = AllocSpritePalette(0x2771); + r3 = (task->data[1] * 16) + 0x100; + r4 = (gSprites[task->data[0]].oam.paletteNum + 16) << 4; + for (i = 1; i < 16; i++) + { + gPlttBufferUnfaded[r3 + i] = gPlttBufferUnfaded[r4 + i]; + } + + BlendPalette(r3, 16, 11, 0); + task->data[3] = 0; + i = 0; + while (i <= 1 && (obj = duplicate_obj_of_side_rel2move_in_transparent_mode(0)) >= 0) + { + gSprites[obj].oam.paletteNum = task->data[1]; + gSprites[obj].data[0] = 0; + gSprites[obj].data[1] = i << 7; + gSprites[obj].data[2] = taskId; + gSprites[obj].callback = sub_80CE974; + task->data[3]++; + i++; + } + + task->func = sub_80CE910; + if (GetBankIdentity_permutated(gBattleAnimBankAttacker) == 1) + { + REG_DISPCNT &= 0xFDFF; + } + else + { + REG_DISPCNT &= 0xFBFF; + } +} + +void sub_80CE910(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + if (!task->data[3]) + { + if (GetBankIdentity_permutated(gBattleAnimBankAttacker) == 1) + REG_DISPCNT |= 0x200; + else + REG_DISPCNT |= 0x400; + + FreeSpritePaletteByTag(0x2771); + DestroyAnimVisualTask(taskId); + } +} + +void sub_80CE974(struct Sprite* sprite) +{ + if (++sprite->data[3] > 1) + { + sprite->data[3] = 0; + sprite->data[0]++; + } + + if (sprite->data[0] > 0x40) + { + gTasks[sprite->data[2]].data[3]--; + obj_delete_but_dont_free_vram(sprite); + } + else + { + sprite->data[4] = gSineTable[sprite->data[0]] / 6; + sprite->data[5] = gSineTable[sprite->data[0]] / 13; + sprite->data[1] = (sprite->data[1] + sprite->data[5]) & 0xFF; + sprite->pos2.x = Sin(sprite->data[1], sprite->data[4]); + } +} diff --git a/src/anim/fang.c b/src/anim/fang.c new file mode 100755 index 000000000..4df450691 --- /dev/null +++ b/src/anim/fang.c @@ -0,0 +1,19 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +// fang +// Used by Super Fang (and probably Hyper Fang, but the actual callbacks are not in this file.) +// (Look into this one later.) + +void sub_80CEA04(struct Sprite* sprite) +{ + StoreSpriteCallbackInData(sprite, move_anim_8072740); + sprite->callback = sub_8078600; +} diff --git a/src/anim/flash.c b/src/anim/flash.c new file mode 100755 index 000000000..0e087ec2d --- /dev/null +++ b/src/anim/flash.c @@ -0,0 +1,123 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" +#include "palette.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +extern struct SpriteTemplate gBattleAnimSpriteTemplate_83D6FC8; +extern struct SpriteTemplate gBattleAnimSpriteTemplate_83D6FF8; + +static void sub_80CE4D4(u8 taskId); + +// flash (a "ting!" flash effect.) +// Used in Moonlight. + +void sub_80CE3EC(u8 taskId) +{ + int a = sub_80791A8(1, 0, 0, 0, 0, 0, 0) & 0xFFFF; + int b; + int c; + int d; + + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[1] = 0; + gTasks[taskId].data[2] = 0; + gTasks[taskId].data[3] = a; + gTasks[taskId].data[4] = 0; + gTasks[taskId].data[5] = 0; + gTasks[taskId].data[6] = 0; + gTasks[taskId].data[7] = 13; + gTasks[taskId].data[8] = 14; + gTasks[taskId].data[9] = 15; + b = sub_80792C0(1, 1, 1, 1); + c = a | b; + sub_8079BF4(&gTasks[taskId].data[14], &gTasks[taskId].data[15], (void*)c); + b = b | (0x10000 << IndexOfSpritePaletteTag(0x27D2)); + d = IndexOfSpritePaletteTag(0x27D3); + BeginNormalPaletteFade((0x10000 << d) | b, 0, 0, 0x10, 32699); + gTasks[taskId].func = sub_80CE4D4; + sub_80CE4D4(taskId); +} + +void sub_80CE4D4(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + switch (task->data[0]) + { + case 0: + if (++task->data[1] > 0) + { + u16 color; + u16 bitmask; + u16 r3; + u16 i; + u16 j; + task->data[1] = 0; + if (++task->data[2] <= 15) + { + u16 red; + u16 green; + u16 blue; + task->data[4] += task->data[7]; + task->data[5] += task->data[8]; + task->data[6] += task->data[9]; + red = task->data[4] >> 3; + green = task->data[5] >> 3; + blue = task->data[6] >> 3; + color = RGB(red, green, blue); + } + else + { + color = RGB(27, 29, 31); + task->data[0]++; + } + + bitmask = 1; + r3 = 0; + for (i = 0; i <= 15; i++) + { + if (task->data[3] & bitmask) + { + for (j = 1; j <= 15; j++) + { + gPlttBufferFaded[r3 + j] = color; + } + } + + bitmask <<= 1; + r3 += 16; + } + } + break; + case 1: + if (!gPaletteFade.active) + { + u8 spriteId; + for (spriteId = 0; spriteId < MAX_SPRITES; spriteId++) + { + if (gSprites[spriteId].template == &gBattleAnimSpriteTemplate_83D6FC8 || gSprites[spriteId].template == &gBattleAnimSpriteTemplate_83D6FF8) + gSprites[spriteId].data[0] = 1; + } + + task->data[1] = 0; + task->data[0]++; + } + break; + case 2: + if (++task->data[1] > 30) + { + BeginNormalPaletteFade((u32)sub_8079BFC(task->data[14], task->data[15]), 0, 16, 0, RGB(27, 29, 31)); + task->data[0]++; + } + break; + case 3: + if (!gPaletteFade.active) + DestroyAnimVisualTask(taskId); + break; + } +} diff --git a/src/anim/flying_hearts.c b/src/anim/flying_hearts.c new file mode 100755 index 000000000..5b7d31a51 --- /dev/null +++ b/src/anim/flying_hearts.c @@ -0,0 +1,40 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +static void sub_80D2094(struct Sprite* sprite); + +// flying_hearts (hearts float upward from the bottom of the screen.) +// Used in Attract. + +void sub_80D2064(struct Sprite* sprite) +{ + sprite->pos1.x = gBattleAnimArgs[0]; + sprite->pos1.y = 0xA0; + sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[1] = gBattleAnimArgs[1]; + sprite->callback = sub_80782D8; + StoreSpriteCallbackInData(sprite, sub_80D2094); +} + +void sub_80D2094(struct Sprite* sprite) +{ + s16 y; + sprite->data[2] += sprite->data[1]; + sprite->pos2.y = -((u16)sprite->data[2] >> 8); + sprite->pos2.x = Sin(sprite->data[3], 4); + sprite->data[3] = (sprite->data[3] + 3) & 0xFF; + y = sprite->pos1.y + sprite->pos2.y; + if (y <= 0x48) + { + sprite->invisible = sprite->data[3] % 2; + if (y <= 0x40) + move_anim_8072740(sprite); + } +} diff --git a/src/anim/flying_path.c b/src/anim/flying_path.c new file mode 100755 index 000000000..017f89858 --- /dev/null +++ b/src/anim/flying_path.c @@ -0,0 +1,296 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +extern struct SpriteTemplate gSpriteTemplate_83D6884; + +static void sub_80CBF5C(u8 taskId); +static s16 sub_80CC338(struct Sprite* sprite); +static void sub_80CC358(struct Task* task, u8 taskId); +static void sub_80CC408(struct Sprite* sprite); + +// flying_path (guides a sprite along a specific path.) +// Used by Leaf Blade. + +void sub_80CBDF4(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + task->data[4] = sub_8079E90(gBattleAnimBankTarget) - 1; + task->data[6] = sub_8077ABC(gBattleAnimBankTarget, 2); + task->data[7] = sub_8077ABC(gBattleAnimBankTarget, 3); + task->data[10] = sub_807A100(gBattleAnimBankTarget, 1); + task->data[11] = sub_807A100(gBattleAnimBankTarget, 0); + task->data[5] = (GetBankSide(gBattleAnimBankTarget) == 1) ? 1 : -1; + task->data[9] = 0x38 - (task->data[5] * 64); + task->data[8] = task->data[7] - task->data[9] + task->data[6]; + task->data[2] = CreateSprite(&gSpriteTemplate_83D6884, task->data[8], task->data[9], task->data[4]); + if (task->data[2] == 0x40) + DestroyAnimVisualTask(taskId); + + gSprites[task->data[2]].data[0] = 10; + gSprites[task->data[2]].data[1] = task->data[8]; + gSprites[task->data[2]].data[2] = task->data[6] - (task->data[10] / 2 + 10) * task->data[5]; + gSprites[task->data[2]].data[3] = task->data[9]; + gSprites[task->data[2]].data[4] = task->data[7] + (task->data[11] / 2 + 10) * task->data[5]; + gSprites[task->data[2]].data[5] = sub_80CC338(&gSprites[task->data[2]]); + sub_80786EC(&gSprites[task->data[2]]); + task->func = sub_80CBF5C; +} + +void sub_80CBF5C(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + struct Sprite* sprite = &gSprites[task->data[2]]; + int a = task->data[0]; + switch (a) + { + case 4: + sub_80CC358(task, taskId); + if (sub_8078718(sprite) == 0) + { + break; + } + else + { + task->data[15] = 5; + task->data[0] = 0xFF; + } + break; + case 8: + sub_80CC358(task, taskId); + if (sub_8078718(sprite) == 0) + { + break; + } + else + { + task->data[15] = 9; + task->data[0] = 0xFF; + } + break; + case 0: + sub_80CC358(task, taskId); + if (sub_8078718(sprite) == 0) + break; + + task->data[15] = 1; + task->data[0] = 0xFF; + break; + case 1: + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.x = 0; + sprite->pos2.y = 0; + sprite->data[0] = 10; + sprite->data[1] = sprite->pos1.x; + sprite->data[2] = task->data[6]; + sprite->data[3] = sprite->pos1.y; + sprite->data[4] = task->data[7]; + sprite->data[5] = sub_80CC338(sprite); + task->data[4] += 2; + task->data[3] = a; + sprite->subpriority = task->data[4]; + StartSpriteAnim(sprite, task->data[3]); + sub_80786EC(sprite); + task->data[0]++; + break; + case 2: + sub_80CC358(task, taskId); + if (sub_8078718(sprite) == 0) + break; + + task->data[15] = 3; + task->data[0] = 0xFF; + break; + case 3: + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.x = 0; + sprite->pos2.y = 0; + sprite->data[0] = 10; + sprite->data[1] = sprite->pos1.x; + sprite->data[2] = task->data[6] - ((task->data[10] / 2) + 10) * task->data[5]; + sprite->data[3] = sprite->pos1.y; + sprite->data[4] = task->data[7] - ((task->data[11] / 2) + 10) * task->data[5]; + sprite->data[5] = sub_80CC338(sprite); + task->data[3] = 2; + sprite->subpriority = task->data[4]; + StartSpriteAnim(sprite, task->data[3]); + sub_80786EC(sprite); + task->data[0]++; + break; + case 5: + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.x = 0; + sprite->pos2.y = 0; + sprite->data[0] = 10; + sprite->data[1] = sprite->pos1.x; + sprite->data[2] = task->data[6] + ((task->data[10] / 2) + 10) * task->data[5]; + sprite->data[3] = sprite->pos1.y; + sprite->data[4] = task->data[7] + ((task->data[11] / 2) + 10) * task->data[5]; + sprite->data[5] = sub_80CC338(sprite); + task->data[4] -= 2; + task->data[3] = 3; + sprite->subpriority = task->data[4]; + StartSpriteAnim(sprite, task->data[3]); + sub_80786EC(sprite); + task->data[0]++; + break; + case 6: + sub_80CC358(task, taskId); + if (sub_8078718(sprite) == 0) + break; + + task->data[15] = 7; + task->data[0] = 0xFF; + break; + case 7: + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.x = 0; + sprite->pos2.y = 0; + sprite->data[0] = 10; + sprite->data[1] = sprite->pos1.x; + sprite->data[2] = task->data[6]; + sprite->data[3] = sprite->pos1.y; + sprite->data[4] = task->data[7]; + sprite->data[5] = sub_80CC338(sprite); + task->data[4] += 2; + task->data[3] = 4; + sprite->subpriority = task->data[4]; + StartSpriteAnim(sprite, task->data[3]); + sub_80786EC(sprite); + task->data[0]++; + break; + case 9: + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.x = 0; + sprite->pos2.y = 0; + sprite->data[0] = 10; + sprite->data[1] = sprite->pos1.x; + sprite->data[2] = task->data[6] - ((task->data[10] / 2) + 10) * task->data[5]; + sprite->data[3] = sprite->pos1.y; + sprite->data[4] = task->data[7] + ((task->data[11] / 2) + 10) * task->data[5]; + sprite->data[5] = sub_80CC338(sprite); + task->data[3] = 5; + sprite->subpriority = task->data[4]; + StartSpriteAnim(sprite, task->data[3]); + sub_80786EC(sprite); + task->data[0]++; + break; + case 10: + sub_80CC358(task, taskId); + if (sub_8078718(sprite) == 0) + { + break; + } + else + { + task->data[15] = 11; + task->data[0] = 0xFF; + } + break; + case 11: + { + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.x = 0; + sprite->pos2.y = 0; + sprite->data[0] = 10; + sprite->data[1] = sprite->pos1.x; + sprite->data[2] = task->data[8]; + sprite->data[3] = sprite->pos1.y; + sprite->data[4] = task->data[9]; + sprite->data[5] = sub_80CC338(sprite); + task->data[4] -= 2; + task->data[3] = 6; + sprite->subpriority = task->data[4]; + StartSpriteAnim(sprite, task->data[3]); + sub_80786EC(sprite); + task->data[0]++; + break; + } + case 12: + sub_80CC358(task, taskId); + if (sub_8078718(sprite) != 0) + { + DestroySprite(sprite); + task->data[0]++; + } + break; + case 13: + if (task->data[12] == 0) + { + DestroyAnimVisualTask(taskId); + } + break; + case 255: + task->data[1]++; + if (task->data[1] > 5) + { + task->data[1] = 0; + task->data[0] = task->data[15]; + } + break; + } +} + +s16 sub_80CC338(struct Sprite* sprite) +{ + s16 var = 8; + if (sprite->data[4] < sprite->pos1.y) + var = -var; + + return var; +} + +void sub_80CC358(struct Task* task, u8 taskId) +{ + task->data[14]++; + if (task->data[14] > 0) + { + u8 spriteId; + s16 spriteX; + s16 spriteY; + task->data[14] = 0; + spriteX = gSprites[task->data[2]].pos1.x + gSprites[task->data[2]].pos2.x; + spriteY = gSprites[task->data[2]].pos1.y + gSprites[task->data[2]].pos2.y; + spriteId = CreateSprite(&gSpriteTemplate_83D6884, spriteX, spriteY, task->data[4]); + if (spriteId != 0x40) + { + gSprites[spriteId].data[6] = taskId; + gSprites[spriteId].data[7] = 12; + gTasks[taskId].data[12]++; + gSprites[spriteId].data[0] = task->data[13] & 1; + gTasks[taskId].data[13]++; + StartSpriteAnim(&gSprites[spriteId], task->data[3]); + gSprites[spriteId].subpriority = task->data[4]; + gSprites[spriteId].callback = sub_80CC408; + } + } +} + +void sub_80CC408(struct Sprite* sprite) +{ + sprite->data[0]++; + if (sprite->data[0] > 1) + { + sprite->data[0] = 0; + sprite->invisible ^= 1; + sprite->data[1]++; + if (sprite->data[1] > 8) + { + gTasks[sprite->data[6]].data[sprite->data[7]]--; + DestroySprite(sprite); + } + } +} diff --git a/src/anim/flying_petals.c b/src/anim/flying_petals.c new file mode 100755 index 000000000..ed6497b7a --- /dev/null +++ b/src/anim/flying_petals.c @@ -0,0 +1,83 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +static void sub_80CC580(struct Sprite* sprite); + +// flying_petals (petals fly across the screen.) +// Used by Aromatherapy. + +void sub_80CC474(struct Sprite* sprite) +{ + u8 bank; + if (!gBattleAnimArgs[6]) + bank = gBattleAnimBankAttacker; + else + bank = gBattleAnimBankTarget; + + if (GetBankSide(bank) != 0) + { + sprite->data[4] = 0; + sprite->data[2] = gBattleAnimArgs[3]; + sprite->pos1.x = 0xFFF0; + } + else + { + sprite->data[4] = 1; + sprite->data[2] = -gBattleAnimArgs[3]; + sprite->pos1.x = 0x100; + } + + sprite->data[1] = gBattleAnimArgs[1]; + sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[3] = gBattleAnimArgs[4]; + switch (gBattleAnimArgs[5]) + { + case 0: + sprite->pos1.y = gBattleAnimArgs[0]; + sprite->oam.priority = sub_8079ED4(bank); + break; + case 1: + sprite->pos1.y = gBattleAnimArgs[0]; + sprite->oam.priority = sub_8079ED4(bank) + 1; + break; + case 2: + sprite->pos1.y = sub_8077ABC(bank, 3) + gBattleAnimArgs[0]; + sprite->oam.priority = sub_8079ED4(bank); + break; + case 3: + sprite->pos1.y = sub_8077ABC(gBattleAnimBankTarget, 3) + gBattleAnimArgs[0]; + GetAnimBankSpriteId(1); + sprite->oam.priority = sub_8079ED4(bank) + 1; + break; + } + + sprite->callback = sub_80CC580; +} + +void sub_80CC580(struct Sprite* sprite) +{ + int a = sprite->data[7]; + sprite->data[7]++; + sprite->pos2.y = (sprite->data[1] * gSineTable[sprite->data[0]]) >> 8; + sprite->pos2.x = sprite->data[2] * a; + sprite->data[0] = (sprite->data[3] * a) & 0xFF; + if (sprite->data[4] == 0) + { + if (sprite->pos2.x + sprite->pos1.x <= 0xF7) + return; + } + else + { + if (sprite->pos2.x + sprite->pos1.x > -16) + return; + } + + move_anim_8074EE0(sprite); +} diff --git a/src/anim/glitter.c b/src/anim/glitter.c new file mode 100755 index 000000000..548397932 --- /dev/null +++ b/src/anim/glitter.c @@ -0,0 +1,63 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +// glitter (the sparkling effect seen on Pokemon, usually after healing or a beneficial effect.) +// Used by Heal Bell, Cosmic Power, and Aromatherapy. + +void sub_80CD140(struct Sprite* sprite) +{ + if (!gBattleAnimArgs[2]) + sub_8078650(sprite); + + sub_807867C(sprite, gBattleAnimArgs[0]); + sprite->pos1.y += gBattleAnimArgs[1]; + sprite->data[0] = gBattleAnimArgs[5]; + sprite->data[1] = gBattleAnimArgs[3]; + sprite->data[2] = gBattleAnimArgs[4]; + StoreSpriteCallbackInData(sprite, move_anim_8072740); + sprite->callback = sub_8078394; +} + +void sub_80CD190(struct Sprite* sprite) +{ + u8 bank; + if (!gBattleAnimArgs[2]) + bank = gBattleAnimBankAttacker; + else + bank = gBattleAnimBankTarget; + + if (IsDoubleBattle() && IsAnimBankSpriteVisible(bank ^ 2)) + { + sub_807A3FC(bank, gBattleAnimArgs[6], &sprite->pos1.x, &sprite->pos1.y); + sub_807867C(sprite, gBattleAnimArgs[0]); + sprite->pos1.y += gBattleAnimArgs[1]; + } + else + { + if (!gBattleAnimArgs[6]) + { + sprite->pos1.x = sub_8077ABC(bank, 0); + sprite->pos1.y = sub_8077ABC(bank, 1) + gBattleAnimArgs[1]; + } + else + { + sprite->pos1.x = sub_8077ABC(bank, 2); + sprite->pos1.y = sub_8077ABC(bank, 3) + gBattleAnimArgs[1]; + } + + sub_807867C(sprite, gBattleAnimArgs[0]); + } + + sprite->data[0] = gBattleAnimArgs[5]; + sprite->data[1] = gBattleAnimArgs[3]; + sprite->data[2] = gBattleAnimArgs[4]; + StoreSpriteCallbackInData(sprite, move_anim_8072740); + sprite->callback = sub_8078394; +} diff --git a/src/anim/glow.c b/src/anim/glow.c new file mode 100755 index 000000000..6038825af --- /dev/null +++ b/src/anim/glow.c @@ -0,0 +1,55 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" +#include "ewram.h" +#include "palette.h" +#include "decompress.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +extern u16 gUnknown_083D7A5C[5]; + +extern struct INCBIN_U8 gBattleAnimSpritePalette_206; + +// glow (a whitening effect where the Pokemon glows white in a cycle.) +// Used in Heal Bell. + +void sub_80D1ADC(u8 taskId) +{ + int i; + u8 sp[8]; + void* src; + void* dest; + void* what; + sp[0] = IndexOfSpritePaletteTag(0x27DE); + for (i = 1; i <= 4; i++) + { + sp[i] = AllocSpritePalette(0x2710 - i); + } + + src = &gBattleAnimSpritePalette_206; + dest = (NotInBattle()) ? gSharedMem + 0x18000 - 0x3800: gSharedMem + 0x18000; + LZDecompressWram(src, dest); + for (i = 0; i <= 4; i++) + { + what = ((NotInBattle()) ? gSharedMem + 0x14800 : gSharedMem + 0x18000) + (i << 5); + LoadPalette(what, (u16)((sp[i] << 4) + 0x100), 32); + } + + DestroyAnimVisualTask(taskId); +} + +void sub_80D1B80(u8 taskId) +{ + int i; + for (i = 0; i < 5; i++) + { + FreeSpritePaletteByTag(gUnknown_083D7A5C[i]); + } + + DestroyAnimVisualTask(taskId); +} diff --git a/src/anim/grip.c b/src/anim/grip.c new file mode 100755 index 000000000..93c3dba96 --- /dev/null +++ b/src/anim/grip.c @@ -0,0 +1,44 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +static void sub_80D020C(struct Sprite* sprite); + +// grip (does a slash which is capable of mirroring for the effect of "gripping".) +// Used in Vice Grip. + +void sub_80D0178(struct Sprite* sprite) +{ + s16 r7 = 32; + s16 r4 = -32; + s16 r8 = 16; + s16 r6 = -16; + if (gBattleAnimArgs[0] != 0) + { + r7 = r4; + r4 = 32; + r8 = r6; + r6 = 16; + StartSpriteAnim(sprite, 1); + } + + sprite->pos1.x += r7; + sprite->pos1.y += r4; + sprite->data[0] = 6; + sprite->data[2] = sub_8077ABC(gBattleAnimBankTarget, 2) + r8; + sprite->data[4] = sub_8077ABC(gBattleAnimBankTarget, 3) + r6; + sprite->callback = sub_8078B34; + StoreSpriteCallbackInData(sprite, sub_80D020C); +} + +void sub_80D020C(struct Sprite* sprite) +{ + if (sprite->animEnded == 1) + move_anim_8072740(sprite); +} diff --git a/src/anim/grow.c b/src/anim/grow.c new file mode 100755 index 000000000..35047c8b0 --- /dev/null +++ b/src/anim/grow.c @@ -0,0 +1,31 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +extern struct AffineAnimFrameCmd gUnknown_083D7714; + +static void sub_80D0904(u8 taskId); + +// grow (grows a Pokemon then shrinks back to normal size.) +// Used in Swagger and Bulk Up. + +void sub_80D08C8(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + u8 spriteId = GetAnimBankSpriteId(0); + sub_80798F4(task, spriteId, &gUnknown_083D7714); + task->func = sub_80D0904; +} + +void sub_80D0904(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + if (!sub_807992C(task)) + DestroyAnimVisualTask(taskId); +} diff --git a/src/anim/guillotine.c b/src/anim/guillotine.c new file mode 100755 index 000000000..b710f372a --- /dev/null +++ b/src/anim/guillotine.c @@ -0,0 +1,90 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +static void sub_80D02D0(struct Sprite* sprite); +static void sub_80D0344(struct Sprite* sprite); +static void sub_80D03A8(struct Sprite* sprite); + +// guillotine (does a reverse grip where the slices can reverse at a given period.) +// Used in Guillotine. + +void sub_80D0228(struct Sprite* sprite) +{ + s16 r8 = 32; + s16 r4 = -32; + s16 r9 = 16; + s16 r6 = -16; + if (gBattleAnimArgs[0] != 0) + { + r8 = r4; + r4 = 32; + r9 = r6; + r6 = 16; + StartSpriteAnim(sprite, gBattleAnimArgs[0]); + } + + sprite->pos1.x += r8; + sprite->pos1.y += r4; + sprite->data[0] = 6; + sprite->data[1] = sprite->pos1.x; + sprite->data[2] = sub_8077ABC(gBattleAnimBankTarget, 2) + r9; + sprite->data[3] = sprite->pos1.y; + sprite->data[4] = sub_8077ABC(gBattleAnimBankTarget, 3) + r6; + obj_translate_based_on_private_1_2_3_4(sprite); + sprite->data[5] = gBattleAnimArgs[0]; + sprite->data[6] = sprite->data[0]; + sprite->callback = sub_80D02D0; +} + +void sub_80D02D0(struct Sprite* sprite) +{ + if (sub_8078B5C(sprite) && sprite->animEnded == 1) + { + SeekSpriteAnim(sprite, 0); + sprite->animPaused = 1; + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.x = 2; + sprite->pos2.y = -2; + sprite->data[0] = sprite->data[6]; + sprite->data[1] ^= 1; + sprite->data[2] ^= 1; + sprite->data[4] = 0; + sprite->data[3] = 0; + sprite->callback = sub_80D0344; + } +} + +void sub_80D0344(struct Sprite* sprite) +{ + if (sprite->data[3]) + { + sprite->pos2.x = -sprite->pos2.x; + sprite->pos2.y = -sprite->pos2.y; + } + + sprite->data[3] ^= 1; + if (++sprite->data[4] == 0x33) + { + sprite->pos2.y = 0; + sprite->pos2.x = 0; + sprite->data[4] = 0; + sprite->data[3] = 0; + sprite->animPaused = 0; + StartSpriteAnim(sprite, sprite->data[5] ^ 1); + sprite->callback = sub_80D03A8; + } +} + +void sub_80D03A8(struct Sprite* sprite) +{ + if (sub_8078B5C(sprite) != 0) + move_anim_8072740(sprite); +} diff --git a/src/anim/heal.c b/src/anim/heal.c new file mode 100755 index 000000000..c5950650c --- /dev/null +++ b/src/anim/heal.c @@ -0,0 +1,27 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +// heal (healing sparkles on a Pokemon) +// Used in Present, if the move heals instead of damages. + +void sub_80CBAA4(struct Sprite* sprite) +{ + if (sprite->data[0] == 0) + { + sub_8078764(sprite, 0); + sprite->data[1] = gBattleAnimArgs[2]; + } + + sprite->data[0]++; + sprite->pos2.y = sprite->data[1] * sprite->data[0]; + if (sprite->animEnded) + { + move_anim_8072740(sprite); + } +} diff --git a/src/anim/heart_1.c b/src/anim/heart_1.c new file mode 100755 index 000000000..1ab83136c --- /dev/null +++ b/src/anim/heart_1.c @@ -0,0 +1,25 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +// heart_1 (a floating heart in a wave pattern upward.) +// Used in Charm, Covet, and when a Pokemon is infatuated. + +void sub_80D1C80(struct Sprite* sprite) +{ + if (++sprite->data[0] == 1) + sub_80787B0(sprite, 0); + + sprite->pos2.x = Sin(sprite->data[1], 8); + sprite->pos2.y = sprite->data[2] >> 8; + sprite->data[1] = (sprite->data[1] + 7) & 0xFF; + sprite->data[2] -= 0x80; + if (sprite->data[0] == 0x3C) + move_anim_8072740(sprite); +} diff --git a/src/anim/homing.c b/src/anim/homing.c new file mode 100755 index 000000000..c5e372d78 --- /dev/null +++ b/src/anim/homing.c @@ -0,0 +1,86 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +static void sub_80CC7D4(struct Sprite* sprite); + +// homing (the spinning effect of sprites going inward in a static rotation.) +// Used by Needle Arm. + +void sub_80CC6CC(struct Sprite* sprite) +{ + u8 a; + u8 b; + u16 c; + u16 x; + u16 y; + + if (gBattleAnimArgs[4] == 0) + { + move_anim_8072740(sprite); + } + else + { + if (gBattleAnimArgs[0] == 0) + { + a = sub_8077ABC(gBattleAnimBankAttacker, 2); + b = sub_8077ABC(gBattleAnimBankAttacker, 3); + } + else + { + a = sub_8077ABC(gBattleAnimBankTarget, 2); + b = sub_8077ABC(gBattleAnimBankTarget, 3); + } + + sprite->data[0] = gBattleAnimArgs[4]; + if (gBattleAnimArgs[1] == 0) + { + sprite->pos1.x = gBattleAnimArgs[2] + a; + sprite->pos1.y = gBattleAnimArgs[3] + b; + sprite->data[5] = a; + sprite->data[6] = b; + } + else + { + sprite->pos1.x = a; + sprite->pos1.y = b; + sprite->data[5] = gBattleAnimArgs[2] + a; + sprite->data[6] = gBattleAnimArgs[3] + b; + } + + x = sprite->pos1.x; + sprite->data[1] = x * 16; + y = sprite->pos1.y; + sprite->data[2] = y * 16; + sprite->data[3] = (sprite->data[5] - sprite->pos1.x) * 16 / gBattleAnimArgs[4]; + sprite->data[4] = (sprite->data[6] - sprite->pos1.y) * 16 / gBattleAnimArgs[4]; + c = sub_80790F0(sprite->data[5] - x, sprite->data[6] - y); + if (NotInBattle()) + c -= 0x8000; + + sub_8078FDC(sprite, 0, 0x100, 0x100, c); + sprite->callback = sub_80CC7D4; + } +} + +void sub_80CC7D4(struct Sprite* sprite) +{ + if (sprite->data[0]) + { + sprite->data[1] += sprite->data[3]; + sprite->data[2] += sprite->data[4]; + sprite->pos1.x = sprite->data[1] >> 4 ; + sprite->pos1.y = sprite->data[2] >> 4 ; + sprite->data[0]--; + } + else + { + move_anim_8074EE0(sprite); + } +} diff --git a/src/anim/hop.c b/src/anim/hop.c new file mode 100755 index 000000000..60f3b8a48 --- /dev/null +++ b/src/anim/hop.c @@ -0,0 +1,160 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +// hop (where a sprite "hops" across the screen) +// Used by Present, Trick, and the item knock off effect. + +void sub_80CB7EC(struct Sprite* sprite, s16 c) +{ + s32 a = (sprite->pos1.x * 256) | sprite->pos1.y; + s32 b = (sprite->data[6] * 256) | sprite->data[7]; + c *= 256; + sprite->data[5] = a; + sprite->data[6] = b; + sprite->data[7] = c; +} + +bool8 sub_80CB814(struct Sprite* sprite) +{ + u16 r10 = (u8)(sprite->data[5] >> 8); + u16 r9 = (u8)sprite->data[5]; + s32 r2 = (u8)(sprite->data[6] >> 8); + s32 r4 = (u8)sprite->data[6]; + s16 r6 = sprite->data[7] >> 8; + s16 r3 = sprite->data[7] & 0xFF; + s16 r4_2; + s16 r0; + s32 var1; + s32 var2; + + if (r2 == 0) + { + r2 = -32; + } + else if (r2 == 255) + { + r2 = 0x110; + } + + r4_2 = r4 - r9; + r0 = r2 - r10; + var1 = r0 * r3 / r6; + var2 = r4_2 * r3 / r6; + sprite->pos1.x = var1 + r10; + sprite->pos1.y = var2 + r9; + if (++r3 == r6) + return TRUE; + + sprite->data[7] = (r6 << 8) | r3; + return FALSE; +} + +void sub_80CB8B8(struct Sprite* sprite) +{ + if (sprite->data[0] == 10) + { + StartSpriteAffineAnim(sprite, 1); + } + + sprite->data[0]++; + if (sprite->data[0] > 50) + { + move_anim_8072740(sprite); + } +} + +void sub_80CB8E8(struct Sprite* sprite) +{ + sprite->data[0] += sprite->data[3] * 128 / sprite->data[4]; + if (sprite->data[0] >= 128) + { + sprite->data[1]++; + sprite->data[0] = 0; + } + + sprite->pos2.y = Sin(sprite->data[0] + 128, 30 - sprite->data[1] * 8); + if (sub_80CB814(sprite)) + { + sprite->pos2.y = 0; + sprite->data[0] = 0; + sprite->callback = sub_80CB8B8; + } +} + +void sub_80CB94C(struct Sprite* sprite) +{ + s16 e1; + s16 e2; + sub_80787B0(sprite, 0); + e1 = sub_8077ABC(gBattleAnimBankTarget, 0); + e2 = sub_8077ABC(gBattleAnimBankTarget, 1); + if ((gBattleAnimBankAttacker ^ 2) == gBattleAnimBankTarget) + { + sprite->data[6] = e1; + sprite->data[7] = e2 + 10; + sub_80CB7EC(sprite, 0x3C); + sprite->data[3] = 1; + } + else + { + sprite->data[6] = e1; + sprite->data[7] = e2 + 10; + sub_80CB7EC(sprite, 0x3C); + sprite->data[3] = 3; + } + + sprite->data[4] = 0x3C; + sprite->callback = sub_80CB8E8; +} + +void sub_80CB9C4(struct Sprite* sprite) +{ + int zero; + sprite->data[0] += ((sprite->data[3] * 128) / sprite->data[4]); + zero = 0; + if (sprite->data[0] > 0x7F) + { + sprite->data[1]++; + sprite->data[0] = zero; + } + + sprite->pos2.y = Sin(sprite->data[0] + 0x80, 30 - sprite->data[1] * 8); + if (sub_80CB814(sprite)) + { + sprite->pos2.y = zero; + sprite->data[0] = zero; + move_anim_8072740(sprite); + } +} + +void sub_80CBA28(struct Sprite* sprite) +{ + s16 e = sub_8077ABC(gBattleAnimBankTarget, 1); + if (GetBankSide(gBattleAnimBankTarget) == 0) + { + sprite->data[6] = 0; + sprite->data[7] = e + 10; + sub_80CB7EC(sprite, 0x28); + sprite->data[3] = 3; + sprite->data[4] = 0x3C; + sprite->callback = sub_80CB8E8; + } + else + { + sprite->data[6] = 255; + sprite->data[7] = e + 10; + if (NotInBattle()) + sprite->data[6] = 0; + + sub_80CB7EC(sprite, 0x28); + sprite->data[3] = 3; + sprite->data[4] = 0x3C; + sprite->callback = sub_80CB9C4; + } +} diff --git a/src/anim/hop_2.c b/src/anim/hop_2.c new file mode 100755 index 000000000..5458c4599 --- /dev/null +++ b/src/anim/hop_2.c @@ -0,0 +1,70 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +extern void sub_80CB7EC(struct Sprite* sprite, s16 c); +extern bool8 sub_80CB814(struct Sprite* sprite); +extern void sub_80CB8B8(struct Sprite* sprite); + +static void sub_80CBB60(struct Sprite* sprite); + +// hop_2 +// Used in item steal. + +void sub_80CBAE8(struct Sprite* sprite) +{ + s16 p1; + s16 p2; + sub_8078764(sprite, 0); + p1 = sub_8077ABC(gBattleAnimBankAttacker, 0); + p2 = sub_8077ABC(gBattleAnimBankAttacker, 1); + if ((gBattleAnimBankTarget ^ 2) == gBattleAnimBankAttacker) + { + sprite->data[6] = p1; + sprite->data[7] = p2 + 10; + sub_80CB7EC(sprite, 0x3c); + sprite->data[3] = 1; + } + else + { + sprite->data[6] = p1; + sprite->data[7] = p2 + 10; + sub_80CB7EC(sprite, 0x3c); + sprite->data[3] = 3; + } + + sprite->data[4] = 0x3C; + sprite->callback = sub_80CBB60; +} + +void sub_80CBB60(struct Sprite* sprite) +{ + int zero; + sprite->data[0] += ((sprite->data[3] * 128) / sprite->data[4]); + zero = 0; + if (sprite->data[0] > 0x7F) + { + sprite->data[1]++; + sprite->data[0] = zero; + } + + sprite->pos2.y = Sin(sprite->data[0] + 0x80, 30 - sprite->data[1] * 8); + if (sprite->pos2.y == 0) + { + PlaySE12WithPanning(0x7D, sub_8076F98(0x3F)); + } + + if (sub_80CB814(sprite)) + { + sprite->pos2.y = 0; + sprite->data[0] = 0; + sprite->callback = sub_80CB8B8; + PlaySE12WithPanning(0x7D, sub_8076F98(-0x40)); + } +} diff --git a/src/anim/kiss_fountain.c b/src/anim/kiss_fountain.c new file mode 100755 index 000000000..2e7f64c11 --- /dev/null +++ b/src/anim/kiss_fountain.c @@ -0,0 +1,38 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +// kiss_fountain (a series of hearts pour out of a target Pokemon.) +// Used in Attract and Sweet Kiss. + +void sub_80D1FDC(struct Sprite* sprite) +{ + if (sprite->data[0] == 0) + { + sprite->data[1] = gBattleAnimArgs[0]; + sprite->data[2] = gBattleAnimArgs[1]; + sprite->data[0]++; + } + else + { + sprite->data[4] += sprite->data[1]; + sprite->pos2.x = sprite->data[4] >> 8; + sprite->pos2.y = Sin(sprite->data[3], sprite->data[2]); + sprite->data[3] = (sprite->data[3] + 3) & 0xFF; + if (sprite->data[3] > 0x64) + { + sprite->invisible = sprite->data[3] % 2; + } + + if (sprite->data[3] > 0x78) + { + move_anim_8072740(sprite); + } + } +} diff --git a/src/anim/leaf.c b/src/anim/leaf.c new file mode 100755 index 000000000..13d1bc9f5 --- /dev/null +++ b/src/anim/leaf.c @@ -0,0 +1,74 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +static void sub_80CAF20(struct Sprite* sprite); +static void sub_80CAF6C(struct Sprite* sprite); + +// leaf +// Used by Razor Leaf and Twister. + +void sub_80CAED8(struct Sprite* sprite) +{ + sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 2); + sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 3); + sprite->data[0] = gBattleAnimArgs[0]; + sprite->data[1] = gBattleAnimArgs[1]; + sprite->data[2] = gBattleAnimArgs[2]; + sprite->callback = sub_80CAF20; +} + +void sub_80CAF20(struct Sprite* sprite) +{ + if (!sprite->data[2]) + { + if (sprite->data[1] & 1) + { + sprite->data[0] = 0x80; + sprite->data[1] = 0; + sprite->data[2] = 0; + } + else + { + sprite->data[0] = sprite->data[1] & 1; + sprite->data[1] = sprite->data[1] & 1; + sprite->data[2] = sprite->data[1] & 1; + } + sprite->callback = sub_80CAF6C; + } + else + { + sprite->data[2]--; + sprite->pos1.x += sprite->data[0]; + sprite->pos1.y += sprite->data[1]; + } +} + +void sub_80CAF6C(struct Sprite* sprite) +{ + if (GetBankSide(gBattleAnimBankAttacker)) + { + sprite->pos2.x = -Sin(sprite->data[0], 0x19); + } + else + { + sprite->pos2.x = Sin(sprite->data[0], 0x19); + } + + sprite->data[0] = (sprite->data[0] + 2) & 0xFF; + sprite->data[1]++; + if (!(sprite->data[1] & 1)) + { + sprite->pos2.y++; + } + + if (sprite->data[1] > 0x50) + { + move_anim_8072740(sprite); + } +} diff --git a/src/anim/love_bg.c b/src/anim/love_bg.c new file mode 100755 index 000000000..c5659463e --- /dev/null +++ b/src/anim/love_bg.c @@ -0,0 +1,128 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" +#include "decompress.h" +#include "palette.h" + +struct Struct_sub_8078914 +{ + u8 *field_0; + u8 *field_4; + u8 field_8; +}; + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +extern struct INCBIN_U8 gAttractTilemap; +extern struct INCBIN_U8 gAttractGfx; +extern struct INCBIN_U8 gAttractPal; + +extern u16 gUnknown_030041B4; +extern u16 gUnknown_030042C0; + +static void sub_80D21F0(u8 taskId); + +// love_bg (makes the BG a background of hearts.) +// Used in Attract. + +void sub_80D2100(u8 taskId) +{ + struct Struct_sub_8078914 subStruct; + u8* tempvar; + REG_BLDCNT = 0x3F42; + REG_BLDALPHA = 0x1000; + REG_BG1CNT_BITFIELD.priority = 3; + REG_BG1CNT_BITFIELD.screenSize = 0; + if (!NotInBattle()) + REG_BG1CNT_BITFIELD.charBaseBlock = 1; + + gUnknown_030042C0 = 0; + gUnknown_030041B4 = 0; + REG_BG1HOFS = 0; + REG_BG1VOFS = 0; + sub_8078914(&subStruct); + tempvar = subStruct.field_4; + DmaFill32(3, 0x0, tempvar, 0x1000); + LZDecompressVram(&gAttractTilemap, tempvar); + LZDecompressVram(&gAttractGfx, subStruct.field_0); + LoadCompressedPalette(&gAttractPal, subStruct.field_8 << 4, 32); + if (NotInBattle()) + sub_80763FC(subStruct.field_8, (u16 *)subStruct.field_4, 0, 0); + + gTasks[taskId].func = sub_80D21F0; +} + +void sub_80D21F0(u8 taskId) +{ + struct Struct_sub_8078914 subStruct; + + switch (gTasks[taskId].data[12]) + { + case 0: + if (++gTasks[taskId].data[10] == 4) + { + gTasks[taskId].data[10] = 0; + gTasks[taskId].data[11]++; + REG_BLDALPHA = gTasks[taskId].data[11] | ((16 - gTasks[taskId].data[11]) << 8); + if (gTasks[taskId].data[11] == 16) + { + gTasks[taskId].data[12]++; + gTasks[taskId].data[11] = 0; + } + } + break; + case 1: + if (++gTasks[taskId].data[11] == 0x8D) + { + gTasks[taskId].data[11] = 16; + gTasks[taskId].data[12]++; + } + break; + case 2: + if (++gTasks[taskId].data[10] == 4) + { + gTasks[taskId].data[10] = 0; + gTasks[taskId].data[11]--; + REG_BLDALPHA = gTasks[taskId].data[11] | ((16 - gTasks[taskId].data[11]) << 8); + if (gTasks[taskId].data[11] == 0) + { + gTasks[taskId].data[12]++; + gTasks[taskId].data[11] = 0; + } + } + break; + case 3: + sub_8078914(&subStruct); + { + u8 *addr = subStruct.field_0; + u32 size = 0x2000; + while (1) + { + DmaFill32(3, 0, addr, 0x1000); + addr += 0x1000; + size -= 0x1000; + if (size <= 0x1000) + { + DmaFill32(3, 0, addr, size); + break; + } + } + } + DmaClear32(3, subStruct.field_4, 0x800); + if (!NotInBattle()) + REG_BG1CNT_BITFIELD.charBaseBlock = 0; + + gTasks[taskId].data[12]++; + // fall through + case 4: + REG_BLDCNT = 0; + REG_BLDALPHA = 0; + REG_BG1CNT_BITFIELD.priority = 1; + DestroyAnimVisualTask(taskId); + break; + } +} diff --git a/src/anim/lunge_1.c b/src/anim/lunge_1.c new file mode 100755 index 000000000..f1e1e35b6 --- /dev/null +++ b/src/anim/lunge_1.c @@ -0,0 +1,124 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +extern u8 gObjectBankIDs[]; + +static void sub_80CD7CC(struct Sprite* sprite); +static void sub_80CD81C(struct Sprite* sprite); +static void sub_80CD8A8(struct Sprite* sprite); +static void sub_80CD8F8(struct Sprite* sprite); +static void sub_80CD91C(struct Sprite* sprite); +static void sub_80CD9B8(struct Sprite* sprite); + +// lunge_1 (makes the pokemon sprite do a "lunge" where it leans back to attack, usually with its head or horn.) +// Used in Drill Peck, Headbutt, Horn Attack, and Horn Drill. + +void sub_80CD774(struct Sprite* sprite) +{ + sprite->invisible = 1; + sprite->data[0] = 0; + switch (gBattleAnimArgs[0]) + { + case 0: + sprite->callback = sub_80CD7CC; + break; + case 1: + sprite->callback = sub_80CD8A8; + break; + case 2: + sprite->callback = sub_80CD8F8; + break; + default: + sprite->callback = sub_80CD9B8; + break; + } +} + +void sub_80CD7CC(struct Sprite* sprite) +{ + sprite->data[0] = 6; + sprite->data[1] = (GetBankSide(gBattleAnimBankAttacker)) ? 2 : -2; + sprite->data[2] = 0; + sprite->data[3] = gObjectBankIDs[gBattleAnimBankAttacker]; + StoreSpriteCallbackInData(sprite, sub_80CD81C); + sprite->callback = sub_8078458; +} + +void sub_80CD81C(struct Sprite* sprite) +{ + if (sprite->data[0] == 0) + { + sprite->data[3] = gObjectBankIDs[gBattleAnimBankAttacker]; + sub_8078E70(sprite->data[3], 0); + sprite->data[4] = (sprite->data[6] = GetBankSide(gBattleAnimBankAttacker)) ? 0x300 : 0xFFFFFD00; + sprite->data[5] = 0; + } + + sprite->data[5] += sprite->data[4]; + obj_id_set_rotscale(sprite->data[3], 0x100, 0x100, sprite->data[5]); + sub_8078F9C(sprite->data[3]); + if (++sprite->data[0] > 3) + { + sprite->data[0] = 0; + sprite->callback = sub_80CD9B8; + } +} + +void sub_80CD8A8(struct Sprite* sprite) +{ + sprite->data[0] = 4; + sprite->data[1] = (GetBankSide(gBattleAnimBankAttacker)) ? -3 : 3; + sprite->data[2] = 0; + sprite->data[3] = gObjectBankIDs[gBattleAnimBankAttacker]; + StoreSpriteCallbackInData(sprite, sub_80CD9B8); + sprite->callback = sub_8078458; +} + +void sub_80CD8F8(struct Sprite* sprite) +{ + if (++sprite->data[0] > 8) + { + sprite->data[0] = 0; + sprite->callback = sub_80CD91C; + } +} + +void sub_80CD91C(struct Sprite* sprite) +{ + if (sprite->data[0] == 0) + { + sprite->data[3] = gObjectBankIDs[gBattleAnimBankAttacker]; + sprite->data[6] = GetBankSide(gBattleAnimBankAttacker); + if (GetBankSide(gBattleAnimBankAttacker)) + { + sprite->data[4] = 0xFC00; + sprite->data[5] = 0xC00; + } + else + { + sprite->data[4] = 0x400; + sprite->data[5] = 0xF400; + } + } + + sprite->data[5] += sprite->data[4]; + obj_id_set_rotscale(sprite->data[3], 0x100, 0x100, sprite->data[5]); + sub_8078F9C(sprite->data[3]); + if (++sprite->data[0] > 2) + { + sub_8078F40(sprite->data[3]); + sprite->callback = sub_80CD9B8; + } +} + +void sub_80CD9B8(struct Sprite* sprite) +{ + move_anim_8072740(sprite); +} diff --git a/src/anim/lunge_2.c b/src/anim/lunge_2.c new file mode 100755 index 000000000..3972bee59 --- /dev/null +++ b/src/anim/lunge_2.c @@ -0,0 +1,163 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +extern u8 gObjectBankIDs[]; + +static void sub_80CDB60(u8 taskId); +static void sub_80CDD20(u8 taskId); + +// lunge_2 +// Drill Peck + +void sub_80CDAC8(u8 taskId) +{ + u8 a; + + gTasks[taskId].data[0] = gObjectBankIDs[gBattleAnimBankAttacker]; + a = GetBankSide(gBattleAnimBankAttacker); + gTasks[taskId].data[1] = a; + gTasks[taskId].data[2] = 0; + switch (gBattleAnimArgs[0]) + { + default: + DestroyAnimVisualTask(taskId); + break; + case 0: + gTasks[taskId].data[2] = 0; + gTasks[taskId].data[3] = 8; + gTasks[taskId].data[4] = 0; + gTasks[taskId].data[5] = 3; + if (a == 0) + gTasks[taskId].data[5] *= -1; + + gTasks[taskId].func = sub_80CDB60; + break; + case 1: + gTasks[taskId].data[3] = 8; + gTasks[taskId].data[4] = 0x600; + gTasks[taskId].data[5] = 0xC0; + if (a == 0) + { + gTasks[taskId].data[4] = -gTasks[taskId].data[4]; + gTasks[taskId].data[5] = -gTasks[taskId].data[5]; + } + + gTasks[taskId].func = sub_80CDD20; + break; + } +} + +void sub_80CDB60(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + switch (task->data[2]) + { + case 0: + if (task->data[3]) + { + task->data[4] += task->data[5]; + gSprites[task->data[0]].pos2.x = task->data[4]; + task->data[3]--; + } + else + { + task->data[3] = 8; + task->data[4] = 0; + task->data[5] = (task->data[1] == 0) ? -0xC0 : 0xC0; + sub_8078E70(task->data[0], 0); + task->data[2]++; + } + break; + case 1: + if (task->data[3]) + { + task->data[4] += task->data[5]; + obj_id_set_rotscale(task->data[0], 0x100, 0x100, task->data[4]); + sub_8078F9C(task->data[0]); + task->data[3]--; + } + else + { + task->data[3] = 8; + task->data[4] = gSprites[task->data[0]].pos2.x; + task->data[5] = (task->data[1] == 0) ? 0x2 : -0x2; + task->data[6] = 1; + task->data[2]++; + } + break; + case 2: + if (task->data[3]) + { + if (task->data[6]) + { + task->data[6]--; + } + else + { + if (task->data[3] & 1) + gSprites[task->data[0]].pos2.x = task->data[4] + task->data[5]; + else + gSprites[task->data[0]].pos2.x = task->data[4] - task->data[5]; + + task->data[6] = 1; + task->data[3]--; + } + } + else + { + gSprites[task->data[0]].pos2.x = task->data[4]; + task->data[3] = 12; + task->data[2]++; + } + break; + case 3: + if (task->data[3]) + { + task->data[3]--; + } + else + { + task->data[3] = 3; + task->data[4] = gSprites[task->data[0]].pos2.x; + task->data[5] = (task->data[1] == 0) ? 8 : -8; + task->data[2]++; + } + break; + case 4: + if (task->data[3]) + { + task->data[4] += task->data[5]; + gSprites[task->data[0]].pos2.x = task->data[4]; + task->data[3]--; + } + else + { + DestroyAnimVisualTask(taskId); + } + break; + } +} + +void sub_80CDD20(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + if (task->data[3]) + { + task->data[4] -= task->data[5]; + obj_id_set_rotscale(task->data[0], 0x100, 0x100, task->data[4]); + sub_8078F9C(task->data[0]); + task->data[3]--; + } + else + { + sub_8078F40(task->data[0]); + DestroyAnimVisualTask(taskId); + } +} diff --git a/src/anim/money.c b/src/anim/money.c new file mode 100755 index 000000000..91eaf20b1 --- /dev/null +++ b/src/anim/money.c @@ -0,0 +1,62 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +static void sub_80CFF68(struct Sprite* sprite); + +// money +// Used by Pay Day. + +void sub_80CFE9C(struct Sprite* sprite) +{ + s16 r6; + s16 r7; + u16 var; + + sub_80787B0(sprite, 1); + r6 = sub_8077ABC(gBattleAnimBankTarget, 2); + r7 = sub_8077ABC(gBattleAnimBankTarget, 3) + gBattleAnimArgs[3]; + if (GetBankSide(gBattleAnimBankAttacker) != 0) + gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + + r6 += gBattleAnimArgs[2]; + var = sub_80790F0(r6 - sprite->pos1.x, r7 - sprite->pos1.y); + var += 0xC000; + sub_8078FDC(sprite, 0, 0x100, 0x100, var); + sprite->data[0] = gBattleAnimArgs[4]; + sprite->data[2] = r6; + sprite->data[4] = r7; + sprite->callback = sub_8078C00; + StoreSpriteCallbackInData(sprite, move_anim_8072740); +} + +void sub_80CFF50(struct Sprite* sprite) +{ + sprite->data[2] = -16; + sprite->pos1.y += 8; + sprite->callback = sub_80CFF68; +} + +void sub_80CFF68(struct Sprite* sprite) +{ + sprite->data[0] += 0x80; + sprite->pos2.x = sprite->data[0] >> 8; + if (GetBankSide(gBattleAnimBankAttacker) == 0) + sprite->pos2.x = -sprite->pos2.x; + + sprite->pos2.y = Sin(sprite->data[1], sprite->data[2]); + sprite->data[1] += 5; + if (sprite->data[1] > 0x7E) + { + sprite->data[1] = 0; + sprite->data[2] /= 2; + if (++sprite->data[3] == 2) + move_anim_8072740(sprite); + } +} diff --git a/src/anim/moon.c b/src/anim/moon.c new file mode 100755 index 000000000..e2a31d14d --- /dev/null +++ b/src/anim/moon.c @@ -0,0 +1,39 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +static void sub_80CE354(struct Sprite* sprite); + +// moon (shows a moon image.) +// Used in Moonlight. + +void sub_80CE30C(struct Sprite* sprite) +{ + if (NotInBattle()) + { + sprite->pos1.x = 0x30; + sprite->pos1.y = 0x28; + } + else + { + sprite->pos1.x = gBattleAnimArgs[0]; + sprite->pos1.y = gBattleAnimArgs[1]; + } + + sprite->oam.shape = 0; + sprite->oam.size = 3; + sprite->data[0] = 0; + sprite->callback = sub_80CE354; +} + +void sub_80CE354(struct Sprite* sprite) +{ + if (sprite->data[0]) + move_anim_8072740(sprite); +} diff --git a/src/anim/note_rain.c b/src/anim/note_rain.c new file mode 100755 index 000000000..fd62b7176 --- /dev/null +++ b/src/anim/note_rain.c @@ -0,0 +1,37 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +extern u16 gUnknown_083D7A5C[5]; + +// note_rain (notes rain from a source point, usually a bell.) +// Used in Heal Bell. + +void sub_80D1BA8(struct Sprite* sprite, u8 a, u8 b) +{ + u8 tile; + tile = (b & 1); + tile = ((-tile | tile) >> 31) & 32; + sprite->oam.tileNum += tile + (a << 2); + sprite->oam.paletteNum = IndexOfSpritePaletteTag(gUnknown_083D7A5C[b >> 1]); +} + +void sub_80D1C08(struct Sprite* sprite) +{ + sub_80787B0(sprite, 0); + if (GetBankSide(gBattleAnimBankAttacker) != 0) + gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + + sprite->data[0] = gBattleAnimArgs[4]; + sprite->data[2] = sub_8077ABC(gBattleAnimBankAttacker, 0) + gBattleAnimArgs[2]; + sprite->data[4] = sub_8077ABC(gBattleAnimBankAttacker, 1) + gBattleAnimArgs[3]; + sprite->callback = sub_8078B34; + StoreSpriteCallbackInData(sprite, move_anim_8072740); + sub_80D1BA8(sprite, gBattleAnimArgs[5], gBattleAnimArgs[6]); +} diff --git a/src/anim/note_scatter.c b/src/anim/note_scatter.c new file mode 100755 index 000000000..9ff49ee9d --- /dev/null +++ b/src/anim/note_scatter.c @@ -0,0 +1,54 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +static void sub_80CED78(struct Sprite* sprite); + +// note_scatter +// Used by Teeter Dance. + +void sub_80CECE8(struct Sprite* sprite) +{ + int a; + if (GetBankSide(gBattleAnimBankAttacker) == 1) + { + a = gBattleAnimArgs[1]; + (u16)gBattleAnimArgs[1] = -a; + } + + sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 2) + gBattleAnimArgs[1]; + sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 3) + gBattleAnimArgs[2]; + StartSpriteAnim(sprite, gBattleAnimArgs[0]); + sprite->data[2] = 0; + sprite->data[3] = 0; + sprite->data[4] = sprite->pos1.x << 4; + sprite->data[5] = sprite->pos1.y << 4; + sprite->data[6] = (gBattleAnimArgs[1] << 4) / 5; + sprite->data[7] = (gBattleAnimArgs[2] << 7) / 5; + sprite->callback = sub_80CED78; +} + +void sub_80CED78(struct Sprite* sprite) +{ + sprite->data[4] += sprite->data[6]; + sprite->data[5] += sprite->data[7]; + sprite->pos1.x = sprite->data[4] >> 4; + sprite->pos1.y = sprite->data[5] >> 4; + if (sprite->data[0] > 5 && sprite->data[3] == 0) + { + sprite->data[2] = (sprite->data[2] + 16) & 0xFF; + sprite->pos2.x = Cos(sprite->data[2], 18); + sprite->pos2.y = Sin(sprite->data[2], 18); + if (sprite->data[2] == 0) + sprite->data[3] = 1; + } + + if (++sprite->data[0] == 0x30) + move_anim_8074EE0(sprite); +} diff --git a/src/anim/note_scatter_2.c b/src/anim/note_scatter_2.c new file mode 100755 index 000000000..a163aa9a5 --- /dev/null +++ b/src/anim/note_scatter_2.c @@ -0,0 +1,57 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +extern u16 gUnknown_083D712C[4][6]; + +static void sub_80CEEE8(struct Sprite* sprite); + +// note_scatter_2 (slower scatter of notes.) +// Used in Belly Drum. + +void sub_80CEE60(struct Sprite* sprite) +{ + s16 a; + u8 index; + sub_8078650(sprite); + sprite->pos1.y += 8; + StartSpriteAnim(sprite, gBattleAnimArgs[1]); + index = IndexOfSpritePaletteTag(gUnknown_083D712C[gBattleAnimArgs[2]][0]); + if (index != 0xFF) + sprite->oam.paletteNum = index; + + a = (gBattleAnimArgs[0] == 0) ? 0xFFE0 : 0x20; + sprite->data[0] = 40; + sprite->data[1] = sprite->pos1.x; + sprite->data[2] = a + sprite->data[1]; + sprite->data[3] = sprite->pos1.y; + sprite->data[4] = sprite->data[3] - 40; + obj_translate_based_on_private_1_2_3_4(sprite); + sprite->data[5] = gBattleAnimArgs[3]; + sprite->callback = sub_80CEEE8; +} + +void sub_80CEEE8(struct Sprite* sprite) +{ + if (sub_8078B5C(sprite) == 0) + { + s16 a; + a = Sin(sprite->data[5], 8); + if (sprite->pos2.x < 0) + a = -a; + + sprite->pos2.x += a; + sprite->pos2.y += Sin(sprite->data[5], 4); + sprite->data[5] = (sprite->data[5] + 8) & 0xFF; + } + else + { + move_anim_8072740(sprite); + } +} diff --git a/src/anim/note_wave.c b/src/anim/note_wave.c new file mode 100755 index 000000000..4dc3ceb75 --- /dev/null +++ b/src/anim/note_wave.c @@ -0,0 +1,143 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" +#include "palette.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +extern u16 gUnknown_083D712C[4][6]; + +static void sub_80CEBC4(s16 a, s16 b, s16* c, s16* d, s8 e); +static void sub_80CEC1C(struct Sprite* sprite); + +// note_wave +// Used by Grasswhistle, Belly Drum, and Sing. + +// rainbow effect for musical notes +void sub_80CEA20(u8 taskId) +{ + u16 i; + u16 j; + u16 index; + + index = IndexOfSpritePaletteTag(gUnknown_083D712C[0][0]); + if (index != 0xFF) + { + index = (index << 4) + 0x100; + for (i = 1; i < 6; i++) + { + gPlttBufferFaded[index + i] = gUnknown_083D712C[0][i]; + } + } + + for (j = 1; j < 4; j++) + { + index = AllocSpritePalette(gUnknown_083D712C[j][0]); + if (index != 0xFF) + { + index = (index << 4) + 0x100; + for (i = 1; i < 6; i++) + { + gPlttBufferFaded[index + i] = gUnknown_083D712C[j][i]; + } + } + } + DestroyAnimVisualTask(taskId); +} + +// clears the rainbow effect for musical notes. +void sub_80CEAD8(u8 taskId) +{ + u16 i; + for (i = 1; i < 4; i++) + { + FreeSpritePaletteByTag(gUnknown_083D712C[i][0]); + } + + DestroyAnimVisualTask(taskId); +} + +void sub_80CEB0C(struct Sprite* sprite) +{ + u8 index; + u8 a; + u8 b; + sub_8078650(sprite); + StartSpriteAnim(sprite, gBattleAnimArgs[0]); + if ((index = IndexOfSpritePaletteTag(gUnknown_083D712C[gBattleAnimArgs[1]][0])) != 0xFF) + sprite->oam.paletteNum = index; + + sprite->data[1] = gBattleAnimArgs[1]; + sprite->data[2] = 0; + sprite->data[3] = gBattleAnimArgs[2]; + if (NotInBattle()) + { + a = 0x30; + b = 0x28; + } + else + { + a = sub_8077ABC(gBattleAnimBankTarget, 2); + b = sub_8077ABC(gBattleAnimBankTarget, 3); + } + + sprite->data[4] = sprite->pos1.x << 4; + sprite->data[5] = sprite->pos1.y << 4; + sub_80CEBC4(a - sprite->pos1.x, b - sprite->pos1.y, &sprite->data[6], &sprite->data[7], 0x28); + sprite->callback = sub_80CEC1C; +} + +void sub_80CEBC4(s16 a, s16 b, s16* c, s16* d, s8 e) +{ + int f; + int g; + if (a < 0) + e = -e; + + f = a << 8; + g = f / e; + if (g == 0) + g = 1; + + *c = f / g; + *d = (b << 8) / g; +} + +void sub_80CEC1C(struct Sprite* sprite) +{ + int b; + s16 a; + int c; + u8 index; + sprite->data[0]++; + b = sprite->data[0] * 5 - ((sprite->data[0] * 5 / 256) << 8); + sprite->data[4] += sprite->data[6]; + sprite->data[5] += sprite->data[7]; + sprite->pos1.x = sprite->data[4] >> 4; + sprite->pos1.y = sprite->data[5] >> 4; + sprite->pos2.y = Sin(b, 15); + a = (u16)sprite->pos1.y; + c = (u16)sprite->pos1.x; + + if ((u32)((c + 16) << 16) > (0x110) << 16 || a < -16 || a > 0x80) + { + move_anim_8074EE0(sprite); + } + else + { + if (sprite->data[3] && ++sprite->data[2] > sprite->data[3]) + { + sprite->data[2] = 0; + if (++sprite->data[1] > 3) + sprite->data[1] = 0; + + index = IndexOfSpritePaletteTag(gUnknown_083D712C[sprite->data[1]][0]); + if (index != 0xFF) + sprite->oam.paletteNum = index; + } + } +} diff --git a/src/anim/orbit.c b/src/anim/orbit.c new file mode 100755 index 000000000..9b77552fa --- /dev/null +++ b/src/anim/orbit.c @@ -0,0 +1,147 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +static void sub_80CAC44(struct Sprite* sprite); +static void sub_80CADA8(struct Sprite* sprite); +static void sub_80CAE74(struct Sprite* sprite); + +// orbit (The effect of a sprite rotating around another one in a pseudo 3D effect.) +// Used by Spore, Cotton Spore, and Petal Dance. + +void sub_80CABF8(struct Sprite* sprite) +{ + sub_8078764(sprite, 1); + StartSpriteAnim(sprite, gBattleAnimArgs[4]); + if (gBattleAnimArgs[4] == 1) + { + sprite->oam.objMode = 1; + } + + sprite->data[0] = gBattleAnimArgs[3]; + sprite->data[1] = gBattleAnimArgs[2]; + sprite->callback = sub_80CAC44; + sub_80CAC44(sprite); +} + +void sub_80CAC44(struct Sprite* sprite) +{ + u8 var1; + + sprite->pos2.x = Sin(sprite->data[1], 32); + sprite->pos2.y = Cos(sprite->data[1], -3) + ((sprite->data[2] += 24) >> 8); + if ((u16)(sprite->data[1] - 0x40) < 0x80) + { + sprite->oam.priority = (sub_8079ED4(gBattleAnimBankTarget) & 3); + } + else + { + var1 = sub_8079ED4(gBattleAnimBankTarget) + 1; + if (var1 > 3) + { + var1 = 3; + } + + sprite->oam.priority = var1; + } + + sprite->data[1] = (sprite->data[1] + 2) & 0xFF; + sprite->data[0]--; + if (sprite->data[0] == -1) + move_anim_8072740(sprite); +} + +void sub_80CACEC(u8 taskId) +{ + if (NotInBattle() || !IsDoubleBattle()) + { + DestroyAnimVisualTask(taskId); + } + else + { + if (GetBankIdentity_permutated(gBattleAnimBankTarget) == 1) + { + REG_BG2CNT_BITFIELD.priority = 3; + } + else + { + REG_BG1CNT_BITFIELD.priority = 1; + } + + DestroyAnimVisualTask(taskId); + } +} + +void sub_80CAD54(struct Sprite* sprite) +{ + sub_80787B0(sprite, 0); + sprite->data[0] = gBattleAnimArgs[3]; + sprite->data[1] = sprite->pos1.x; + sprite->data[2] = sprite->pos1.x; + sprite->data[3] = sprite->pos1.y; + sprite->data[4] = sub_8077ABC(gBattleAnimBankAttacker, 3) + gBattleAnimArgs[2]; + obj_translate_based_on_private_1_2_3_4(sprite); + sprite->data[5] = 0x40; + sprite->callback = sub_80CADA8; + sub_80CADA8(sprite); +} + +void sub_80CADA8(struct Sprite* sprite) +{ + if (!sub_8078B5C(sprite)) + { + sprite->pos2.x += Sin(sprite->data[5], 32); + sprite->pos2.y += Cos(sprite->data[5], -5); + if ((u16)(sprite->data[5] - 0x40) < 0x80) + { + sprite->subpriority = sub_8079E90(gBattleAnimBankAttacker) - 1; + } + else + { + sprite->subpriority = sub_8079E90(gBattleAnimBankAttacker) + 1; + } + + sprite->data[5] = (sprite->data[5] + 5) & 0xFF; + } + else + { + move_anim_8072740(sprite); + } +} + +void sub_80CAE20(struct Sprite* sprite) +{ + sub_80787B0(sprite, 1); + sprite->data[0] = gBattleAnimArgs[3]; + sprite->data[1] = sprite->pos1.x; + sprite->data[2] = sprite->pos1.x; + sprite->data[3] = sprite->pos1.y; + sprite->data[4] = sub_8077ABC(gBattleAnimBankAttacker, 3) + gBattleAnimArgs[2]; + obj_translate_based_on_private_1_2_3_4(sprite); + sprite->data[5] = 0x40; + sprite->callback = sub_80CAE74; + sub_80CAE74(sprite); +} + +void sub_80CAE74(struct Sprite* sprite) +{ + if (!sub_8078B5C(sprite)) + { + sprite->pos2.x += Sin(sprite->data[5], 8); + if ((u16)(sprite->data[5] - 0x3B) < 5 || (u16)(sprite->data[5] - 0xBB) < 5) + { + sprite->oam.matrixNum ^= 8; + } + + sprite->data[5] = (sprite->data[5] + 5) & 0xFF; + } + else + { + move_anim_8072740(sprite); + } +} diff --git a/src/anim/orbit_fast.c b/src/anim/orbit_fast.c new file mode 100755 index 000000000..30396f398 --- /dev/null +++ b/src/anim/orbit_fast.c @@ -0,0 +1,62 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +static void sub_80D2704(struct Sprite* sprite); + +// orbit_fast (a quickly moving fast circular motion of a sprite around an object.) +// Used by Hidden Power. + +void sub_80D26A4(struct Sprite* sprite) +{ + sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 2); + sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 3); + sprite->affineAnimPaused = 1; + sprite->data[0] = gBattleAnimArgs[0]; + sprite->data[1] = gBattleAnimArgs[1]; + sprite->data[7] = sub_8079E90(gBattleAnimBankAttacker); + sprite->callback = sub_80D2704; + sub_80D2704(sprite); +} + +void sub_80D2704(struct Sprite* sprite) +{ + if ((u16)(sprite->data[1] - 0x40) <= 0x7F) + sprite->subpriority = sprite->data[7] + 1; + else + sprite->subpriority = sprite->data[7] - 1; + + sprite->pos2.x = Sin(sprite->data[1], sprite->data[2] >> 8); + sprite->pos2.y = Cos(sprite->data[1], sprite->data[3] >> 8); + sprite->data[1] = (sprite->data[1] + 9) & 0xFF; + switch (sprite->data[5]) + { + case 1: + sprite->data[2] -= 0x400; + sprite->data[3] -= 0x100; + if (++sprite->data[4] == sprite->data[0]) + { + sprite->data[5] = 2; + return; + } + break; + case 0: + sprite->data[2] += 0x400; + sprite->data[3] += 0x100; + if (++sprite->data[4] == sprite->data[0]) + { + sprite->data[4] = 0; + sprite->data[5] = 1; + } + break; + } + + if ((u16)gBattleAnimArgs[7] == 0xFFFF) + move_anim_8072740(sprite); +} diff --git a/src/anim/orbit_scatter.c b/src/anim/orbit_scatter.c new file mode 100755 index 000000000..6cebc9375 --- /dev/null +++ b/src/anim/orbit_scatter.c @@ -0,0 +1,31 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +static void sub_80D2834(struct Sprite* sprite); + +// orbit_scatter (scatters the objects associated with the fast orbit from the last file.) +// Used in Hidden Power. + +void sub_80D27E0(struct Sprite* sprite) +{ + sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 2); + sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 3); + sprite->data[0] = Sin(gBattleAnimArgs[0], 10); + sprite->data[1] = Cos(gBattleAnimArgs[0], 7); + sprite->callback = sub_80D2834; +} + +void sub_80D2834(struct Sprite* sprite) +{ + sprite->pos2.x += sprite->data[0]; + sprite->pos2.y += sprite->data[1]; + if (sprite->pos1.x + sprite->pos2.x + 16 > 0x110u || sprite->pos1.y + sprite->pos2.y > 0xA0 || sprite->pos1.y + sprite->pos2.y < -16) + move_anim_8072740(sprite); +} diff --git a/src/anim/orbs.c b/src/anim/orbs.c new file mode 100755 index 000000000..c54b5cd73 --- /dev/null +++ b/src/anim/orbs.c @@ -0,0 +1,162 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "rng.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +static void sub_80CA8B4(struct Sprite* sprite); +static void sub_80CA9F8(struct Sprite* sprite); +static void sub_80CAACC(struct Sprite* sprite); + +extern struct SpriteTemplate gSpriteTemplate_83D631C; + +// orbs +// Used by Solar Beam, Absorb, Hyper Beam, and Leech Seed. + +void sub_80CA7B0(struct Sprite* sprite) +{ + sub_80787B0(sprite, 1); + sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[2] = sub_8077ABC(gBattleAnimBankAttacker, 2); + sprite->data[4] = sub_8077ABC(gBattleAnimBankAttacker, 3); + sprite->callback = sub_8078B34; + StoreSpriteCallbackInData(sprite, move_anim_8074EE0); +} + +void sub_80CA800(struct Sprite* sprite) +{ + sub_80787B0(sprite, 1); + StartSpriteAnim(sprite, gBattleAnimArgs[3]); + sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[2] = sub_8077ABC(gBattleAnimBankTarget, 2); + sprite->data[4] = sub_8077ABC(gBattleAnimBankTarget, 3); + sprite->callback = sub_8078B34; + StoreSpriteCallbackInData(sprite, move_anim_8072740); +} + +void sub_80CA858(struct Sprite* sprite) +{ + sub_80787B0(sprite, 1); + sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[1] = sprite->pos1.x; + sprite->data[2] = sub_8077ABC(gBattleAnimBankTarget, 2); + sprite->data[3] = sprite->pos1.y; + sprite->data[4] = sub_8077ABC(gBattleAnimBankTarget, 3); + obj_translate_based_on_private_1_2_3_4(sprite); + sprite->data[5] = gBattleAnimArgs[3]; + sprite->callback = sub_80CA8B4; + sub_80CA8B4(sprite); +} + +void sub_80CA8B4(struct Sprite* sprite) +{ + if (sub_8078B5C(sprite)) + { + DestroySprite(sprite); + } + else + { + if (sprite->data[5] > 0x7F) + { + sprite->subpriority = sub_8079E90(gBattleAnimBankTarget) + 1; + } + else + { + sprite->subpriority = sub_8079E90(gBattleAnimBankTarget) + 6; + } + sprite->pos2.x += Sin(sprite->data[5], 5); + sprite->pos2.y += Cos(sprite->data[5], 14); + sprite->data[5] = (sprite->data[5] + 15) & 0xFF; + } +} + +void sub_80CA928(u8 taskId) +{ + gTasks[taskId].data[0]--; + if (gTasks[taskId].data[0] == -1) + { + gTasks[taskId].data[1]++; + gTasks[taskId].data[0] = 6; + gBattleAnimArgs[0] = 15; + gBattleAnimArgs[1] = 0; + gBattleAnimArgs[2] = 80; + gBattleAnimArgs[3] = 0; + CreateSpriteAndAnimate(&gSpriteTemplate_83D631C, 0, 0, sub_8079E90(gBattleAnimBankTarget) + 1); + } + + if (gTasks[taskId].data[1] == 15) + DestroyAnimVisualTask(taskId); +} + +void sub_80CA9A8(struct Sprite* sprite) +{ + sub_8078764(sprite, 1); + sprite->data[0] = gBattleAnimArgs[3]; + sprite->data[2] = sub_8077ABC(gBattleAnimBankAttacker, 2); + sprite->data[4] = sub_8077ABC(gBattleAnimBankAttacker, 3); + sprite->data[5] = gBattleAnimArgs[2]; + sub_80786EC(sprite); + sprite->callback = sub_80CA9F8; +} + +void sub_80CA9F8(struct Sprite* sprite) +{ + if (sub_8078718(sprite)) + move_anim_8072740(sprite); +} + +void sub_80CAA14(struct Sprite* sprite) +{ + u16 a = Random(); + u16 b; + + StartSpriteAnim(sprite, a & 7); + sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 2); + sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 3); + if (GetBankSide(gBattleAnimBankAttacker)) + { + sprite->pos1.x -= 20; + } + else + { + sprite->pos1.x += 20; + } + + b = Random(); + sprite->data[0] = (b & 31) + 64; + sprite->data[1] = sprite->pos1.x; + sprite->data[2] = sub_8077ABC(gBattleAnimBankTarget, 2); + sprite->data[3] = sprite->pos1.y; + sprite->data[4] = sub_8077ABC(gBattleAnimBankTarget, 3); + sub_8078D60(sprite); + sprite->data[5] = Random() & 0xFF; + sprite->data[6] = sprite->subpriority; + sprite->callback = sub_80CAACC; + sub_80CAACC(sprite); +} + +void sub_80CAACC(struct Sprite* sprite) +{ + if (sub_8078CE8(sprite)) + { + move_anim_8072740(sprite); + } + else + { + sprite->pos2.y += Cos(sprite->data[5], 12); + if (sprite->data[5] <= 0x7E) + { + sprite->subpriority = sprite->data[6]; + } + else + { + sprite->subpriority = sprite->data[6] + 1; + } + + sprite->data[5] = (sprite->data[5] + 24) & 0xFF; + } +} diff --git a/src/anim/osmose.c b/src/anim/osmose.c new file mode 100755 index 000000000..f1f1b25ff --- /dev/null +++ b/src/anim/osmose.c @@ -0,0 +1,29 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +// osmose (I didn't want to use "absorb" as thats confusing) +// Used by Ingrain. + +void sub_80CB768(struct Sprite* sprite) +{ + if (!sprite->data[0]) + { + sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 2) + gBattleAnimArgs[0]; + sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 1) + gBattleAnimArgs[1]; + sprite->data[1] = gBattleAnimArgs[2]; + sprite->data[2] = gBattleAnimArgs[3]; + sprite->data[3] = gBattleAnimArgs[4]; + } + + sprite->data[0]++; + sprite->pos2.x = sprite->data[1] * sprite->data[0]; + sprite->pos2.y = Sin((sprite->data[0] * 20) & 0xFF, sprite->data[2]); + if (sprite->data[0] > sprite->data[3]) + move_anim_8072740(sprite); +} diff --git a/src/anim/perceive.c b/src/anim/perceive.c new file mode 100755 index 000000000..27afcbc0c --- /dev/null +++ b/src/anim/perceive.c @@ -0,0 +1,24 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +// perceive (shows a sparkle in a set of eyes, usually for heightened perception.) +// Used in Glare, Tickle, and Scary Face. + +void sub_80D2904(struct Sprite* sprite) +{ + if (sprite->animEnded) + move_anim_8072740(sprite); +} + +void sub_80D2920(struct Sprite* sprite) +{ + sub_80787B0(sprite, 1); + sprite->callback = sub_80D2904; +} diff --git a/src/anim/powder.c b/src/anim/powder.c new file mode 100755 index 000000000..178a61737 --- /dev/null +++ b/src/anim/powder.c @@ -0,0 +1,48 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; + +static void sub_80CA768(struct Sprite* sprite); + +// powder +// Used by Sleep Powder, Stun Spore, and Poison Powder. + +void sub_80CA710(struct Sprite* sprite) +{ + sprite->pos1.x += gBattleAnimArgs[0]; + sprite->pos1.y += gBattleAnimArgs[1]; + sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[1] = gBattleAnimArgs[3]; + + if (GetBankSide(gBattleAnimBankAttacker)) + { + sprite->data[3] = -gBattleAnimArgs[4]; + } + else + { + sprite->data[3] = gBattleAnimArgs[4]; + } + + sprite->data[4] = gBattleAnimArgs[5]; + sprite->callback = sub_80CA768; +} + +void sub_80CA768(struct Sprite* sprite) +{ + if (sprite->data[0] > 0) + { + sprite->data[0]--; + sprite->pos2.y = sprite->data[2] >> 8; + sprite->data[2] += sprite->data[1]; + sprite->pos2.x = Sin(sprite->data[5], sprite->data[3]); + sprite->data[5] = (sprite->data[5] + sprite->data[4]) & 0xFF; + } + else + { + move_anim_8072740(sprite); + } +} diff --git a/src/anim/ring.c b/src/anim/ring.c new file mode 100755 index 000000000..0a5816b23 --- /dev/null +++ b/src/anim/ring.c @@ -0,0 +1,156 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" +#include "main.h" +#include "blend_palette.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +extern u8 gObjectBankIDs[]; + +static void sub_80D1098(struct Sprite* sprite); + +// ring (a ring that stretches outward from the Pokemon.) +// Used in Aromatherapy and Heal Bell. + +void sub_80D0FD8(struct Sprite* sprite) +{ + u8 bank = 0; + u16 sp0 = 0; + u16 sp1 = 0; + u8 r4; + + if (gBattleAnimArgs[2] == 0) + bank = gBattleAnimBankAttacker; + else + bank = gBattleAnimBankTarget; + + r4 = gBattleAnimArgs[3] ^ 1; + if (IsDoubleBattle() && IsAnimBankSpriteVisible(bank ^ 2)) + { + sub_807A3FC(bank, r4, &sp0, &sp1); + if (r4 == 0) + r4 = sub_8077ABC(bank, 0); + else + r4 = sub_8077ABC(bank, 2); + + if (GetBankSide(bank) != 0) + gBattleAnimArgs[0] -= (sp0 - r4) - gBattleAnimArgs[0]; // This is weird. + else + gBattleAnimArgs[0] = sp0 - r4; + } + + sprite->callback = sub_80793C4; + sub_80793C4(sprite); +} + +void sub_80D1098(struct Sprite* sprite) +{ + if (sub_8078B5C(sprite)) + { + FreeSpriteOamMatrix(sprite); + move_anim_8072740(sprite); + } +} + +void sub_80D10B8(struct Sprite* sprite) +{ + u16 r9 = 0; + u16 r6 = 0; + s16 sp0 = 0; + s16 sp1 = 0; + u8 sp4; + u8 bankr7; + u8 bankr8; + u8 r10; + + if (gBattleAnimArgs[5] == 0) + { + bankr7 = gBattleAnimBankAttacker; + bankr8 = gBattleAnimBankTarget; + } + else + { + bankr7 = gBattleAnimBankTarget; + bankr8 = gBattleAnimBankAttacker; + } + + if (gBattleAnimArgs[6] == 0) + { + r10 = 0; + sp4 = 1; + } + else + { + r10 = 2; + sp4 = 3; + } + + if (GetBankSide(bankr7) != 0) + { + r9 = sub_8077ABC(bankr7, r10) + gBattleAnimArgs[0]; + if (IsAnimBankSpriteVisible(bankr8 ^ 2)) + sprite->subpriority = gSprites[gObjectBankIDs[bankr8 ^ 2]].subpriority - 1; + else + sprite->subpriority = gSprites[gObjectBankIDs[bankr8]].subpriority - 1; + } + else + { + r9 = sub_8077ABC(bankr7, r10) - gBattleAnimArgs[0]; + if (gMain.inBattle && IsAnimBankSpriteVisible(bankr7 ^ 2)) + { + if (gSprites[gObjectBankIDs[bankr7]].pos1.x < gSprites[gObjectBankIDs[bankr7 ^ 2]].pos1.x) + sprite->subpriority = gSprites[gObjectBankIDs[bankr7 ^ 2]].subpriority + 1; + else + sprite->subpriority = gSprites[gObjectBankIDs[bankr7]].subpriority - 1; + } + else + { + sprite->subpriority = gSprites[gObjectBankIDs[bankr7]].subpriority - 1; + } + + } + + r6 = sub_8077ABC(bankr7, sp4) + gBattleAnimArgs[1]; + if (gMain.inBattle && IsAnimBankSpriteVisible(bankr8 ^ 2)) + { + sub_807A3FC(bankr8, gBattleAnimArgs[6], &sp0, &sp1); + } + else + { + sp0 = sub_8077ABC(bankr8, r10); + sp1 = sub_8077ABC(bankr8, sp4); + } + + if (GetBankSide(bankr8)) + sp0 += gBattleAnimArgs[3]; + else + sp0 -= gBattleAnimArgs[3]; + + sp1 += gBattleAnimArgs[4]; + sprite->pos1.x = sprite->data[1] = r9; + sprite->pos1.y = sprite->data[3] = r6; + sprite->data[2] = sp0; + sprite->data[4] = sp1; + sprite->data[0] = gBattleAnimArgs[0]; + obj_translate_based_on_private_1_2_3_4(sprite); + sprite->callback = sub_80D1098; + sub_80D1098(sprite); +} + +void sub_80D1318(struct Sprite* sprite) +{ + u8 index = IndexOfSpritePaletteTag(0x27DB); + if (index != 0xFF) + { + BlendPalette(((index << 20) + 0x1010000) >> 16, 15, gBattleAnimArgs[5], gBattleAnimArgs[4]); + } + + StartSpriteAffineAnim(sprite, 1); + sprite->callback = sub_80793C4; + sub_80793C4(sprite); +} diff --git a/src/anim/roots.c b/src/anim/roots.c new file mode 100755 index 000000000..40c51808a --- /dev/null +++ b/src/anim/roots.c @@ -0,0 +1,67 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +extern s16 gUnknown_03000728[]; + +static void sub_80CB710(struct Sprite* sprite); + +// roots +// Used by Ingrain and Frenzy Plant. + +void sub_80CB59C(struct Sprite* sprite) +{ + if (!sprite->data[0]) + { + sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 2); + sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 1); + sprite->pos2.x = gBattleAnimArgs[0]; + sprite->pos2.y = gBattleAnimArgs[1]; + sprite->subpriority = gBattleAnimArgs[2] + 30; + StartSpriteAnim(sprite, gBattleAnimArgs[3]); + sprite->data[2] = gBattleAnimArgs[4]; + sprite->data[0]++; + if ((sprite->pos1.y + sprite->pos2.y) > 120) + { + sprite->pos1.y += -120 + (sprite->pos2.y + sprite->pos1.y); + } + } + sprite->callback = sub_80CB710; +} + +void sub_80CB620(struct Sprite *sprite) +{ + s16 p1 = sub_8077ABC(gBattleAnimBankAttacker, 2); + s16 p2 = sub_8077ABC(gBattleAnimBankAttacker, 3); + s16 e1 = sub_8077ABC(gBattleAnimBankTarget, 2); + s16 e2 = sub_8077ABC(gBattleAnimBankTarget, 3); + + e1 -= p1; + e2 -= p2; + sprite->pos1.x = p1 + e1 * gBattleAnimArgs[0] / 100; + sprite->pos1.y = p2 + e2 * gBattleAnimArgs[0] / 100; + sprite->pos2.x = gBattleAnimArgs[1]; + sprite->pos2.y = gBattleAnimArgs[2]; + sprite->subpriority = gBattleAnimArgs[3] + 30; + StartSpriteAnim(sprite, gBattleAnimArgs[4]); + sprite->data[2] = gBattleAnimArgs[5]; + sprite->callback = sub_80CB710; + gUnknown_03000728[0] = sprite->pos1.x; + gUnknown_03000728[1] = sprite->pos1.y; + gUnknown_03000728[2] = e1; + gUnknown_03000728[3] = e2; +} + +void sub_80CB710(struct Sprite* sprite) +{ + if (++sprite->data[0] > (sprite->data[2] - 10)) + sprite->invisible = sprite->data[0] % 2; + + if (sprite->data[0] > sprite->data[2]) + move_anim_8072740(sprite); +} diff --git a/src/anim/scan.c b/src/anim/scan.c new file mode 100755 index 000000000..5573758c3 --- /dev/null +++ b/src/anim/scan.c @@ -0,0 +1,200 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" +#include "palette.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +extern s8 gUnknown_083D6DDC[4][2]; + +static void sub_80CD408(struct Sprite* sprite); +static void sub_80CD4B8(struct Sprite* sprite); +static void sub_80CD4EC(struct Sprite* sprite); +static void sub_80CD5A8(struct Sprite* sprite); +static void sub_80CD654(struct Sprite* sprite); +static void sub_80CD67C(struct Sprite* sprite); + +// scan +// Used by Lock-On. + +void sub_80CD3E0(struct Sprite* sprite) +{ + sprite->pos1.x -= 32; + sprite->pos1.y -= 32; + sprite->data[0] = 20; + sprite->callback = sub_80782D8; + StoreSpriteCallbackInData(sprite, sub_80CD408); +} + +void sub_80CD408(struct Sprite* sprite) +{ + switch (sprite->data[5] & 1) + { + case 0: + sprite->data[0] = 1; + sprite->callback = sub_80782D8; + StoreSpriteCallbackInData(sprite, sub_80CD408); + break; + case 1: + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.y = 0; + sprite->pos2.x = 0; + sprite->data[0] = 8; + sprite->data[2] = sprite->pos1.x + gUnknown_083D6DDC[sprite->data[5] >> 8][0]; + sprite->data[4] = sprite->pos1.y + gUnknown_083D6DDC[sprite->data[5] >> 8][1]; + sprite->callback = sub_8078B34; + StoreSpriteCallbackInData(sprite, sub_80CD4B8); + sprite->data[5] += 0x100; + PlaySE12WithPanning(0xD2, sub_8076F98(0x3F)); + break; + } + + sprite->data[5] ^= 1; +} + +void sub_80CD4B8(struct Sprite* sprite) +{ + if ((sprite->data[5] >> 8) == 4) + { + sprite->data[0] = 10; + sprite->callback = sub_80782D8; + StoreSpriteCallbackInData(sprite, sub_80CD4EC); + } + else + { + sprite->callback = sub_80CD408; + } +} + +void sub_80CD4EC(struct Sprite* sprite) +{ + s16 a; + s16 b; + if (sprite->oam.affineParam == 0) + { + sprite->data[0] = 3; + sprite->data[1] = 0; + sprite->data[2] = 0; + sprite->callback = sub_80782D8; + StoreSpriteCallbackInData(sprite, sub_80CD5A8); + } + else + { + switch (sprite->oam.affineParam) + { + case 1: + a = -8; + b = -8; + break; + case 2: + a = -8; + b = 8; + break; + case 3: + a = 8; + b = -8; + break; + default: + a = 8; + b = 8; + break; + } + + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.y = 0; + sprite->pos2.x = 0; + sprite->data[0] = 6; + sprite->data[2] = sub_8077ABC(gBattleAnimBankTarget, 2) + a; + sprite->data[4] = sub_8077ABC(gBattleAnimBankTarget, 3) + b; + sprite->callback = sub_8078B34; + StoreSpriteCallbackInData(sprite, sub_80CD654); + } +} + +void sub_80CD5A8(struct Sprite* sprite) +{ + if (sprite->data[2] == 0) + { + if ((sprite->data[1] += 3) > 16) + sprite->data[1] = 16; + } + else if ((sprite->data[1] -= 3) < 0) + { + sprite->data[1] = 0; + } + + BlendPalettes(sub_80791A8(1, 1, 1, 1, 1, 0, 0), sprite->data[1], 0x7FFF); + if (sprite->data[1] == 16) + { + int pal; + sprite->data[2]++; + pal = sprite->oam.paletteNum; + LoadPalette(&gPlttBufferUnfaded[0x108 + pal * 16], pal * 16 | 0x101, 4); + PlaySE12WithPanning(0xC0, sub_8076F98(0x3F)); + } + else if (sprite->data[1] == 0) + { + sprite->callback = sub_80CD654; + } +} + +void sub_80CD654(struct Sprite* sprite) +{ + if ((u16)gBattleAnimArgs[7] == 0xFFFF) + { + sprite->data[1] = 0; + sprite->data[0] = 0; + sprite->callback = sub_80CD67C; + } +} + +void sub_80CD67C(struct Sprite* sprite) +{ + if (sprite->data[0] % 3 == 0) + { + sprite->data[1]++; + sprite->invisible ^= 1; + } + + sprite->data[0]++; + if (sprite->data[1] == 8) + move_anim_8072740(sprite); +} + +void sub_80CD6CC(struct Sprite* sprite) +{ + sprite->oam.affineParam = gBattleAnimArgs[0]; + if ((s16)sprite->oam.affineParam == 1) + { + sprite->pos1.x -= 0x18; + sprite->pos1.y -= 0x18; + } + else if ((s16)sprite->oam.affineParam == 2) + { + sprite->pos1.x -= 0x18; + sprite->pos1.y += 0x18; + sprite->oam.matrixNum = 16; + } + else if ((s16)sprite->oam.affineParam == 3) + { + sprite->pos1.x += 0x18; + sprite->pos1.y -= 0x18; + sprite->oam.matrixNum = 8; + } + else + { + sprite->pos1.x += 0x18; + sprite->pos1.y += 0x18; + sprite->oam.matrixNum = 24; + } + + sprite->oam.tileNum = (sprite->oam.tileNum + 16); + sprite->callback = sub_80CD3E0; + sub_80CD3E0(sprite); +} diff --git a/src/anim/scary_face.c b/src/anim/scary_face.c new file mode 100755 index 000000000..9f1dfd7d0 --- /dev/null +++ b/src/anim/scary_face.c @@ -0,0 +1,136 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" +#include "decompress.h" +#include "palette.h" + +struct Struct_sub_8078914 +{ + u8 *field_0; + u8 *field_4; + u8 field_8; +}; + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +extern struct INCBIN_U8 gBattleAnimBackgroundTilemap_ScaryFaceContest; +extern struct INCBIN_U8 gBattleAnimBackgroundTilemap_ScaryFacePlayer; +extern struct INCBIN_U8 gBattleAnimBackgroundTilemap_ScaryFaceOpponent; +extern struct INCBIN_U8 gBattleAnimBackgroundImage_ScaryFace; +extern struct INCBIN_U8 gBattleAnimBackgroundPalette_ScaryFace; + +extern u16 gUnknown_030041B4; +extern u16 gUnknown_030042C0; + +static void sub_80D24E0(u8 taskId); + +// scary_face (darkens the screen and shows a scary face.) +// Used in Glare and Scary Face. + +void sub_80D23B4(u8 taskId) +{ + struct Struct_sub_8078914 subStruct; + u8* tempvar; + REG_BLDCNT = 0x3F42; + REG_BLDALPHA = 0x1000; + REG_BG1CNT_BITFIELD.priority = 1; + REG_BG1CNT_BITFIELD.screenSize = 0; + if (!NotInBattle()) + REG_BG1CNT_BITFIELD.charBaseBlock = 1; + + gUnknown_030042C0 = 0; + gUnknown_030041B4 = 0; + REG_BG1HOFS = 0; + REG_BG1VOFS = 0; + sub_8078914(&subStruct); + tempvar = subStruct.field_4; + DmaFill32(3, 0x0, tempvar, 0x1000); + if (NotInBattle()) + LZDecompressVram(&gBattleAnimBackgroundTilemap_ScaryFaceContest, subStruct.field_4); + else if (GetBankSide(gBattleAnimBankTarget) == 1) + LZDecompressVram(&gBattleAnimBackgroundTilemap_ScaryFacePlayer, subStruct.field_4); + else + LZDecompressVram(&gBattleAnimBackgroundTilemap_ScaryFaceOpponent, subStruct.field_4); + + LZDecompressVram(&gBattleAnimBackgroundImage_ScaryFace, subStruct.field_0); + LoadCompressedPalette(&gBattleAnimBackgroundPalette_ScaryFace, subStruct.field_8 << 4, 32); + if (NotInBattle()) + sub_80763FC(subStruct.field_8, (u16 *)subStruct.field_4, 0, 0); + + gTasks[taskId].func = sub_80D24E0; +} + +void sub_80D24E0(u8 taskId) +{ + struct Struct_sub_8078914 subStruct; + + switch (gTasks[taskId].data[12]) + { + case 0: + if (++gTasks[taskId].data[10] == 2) + { + gTasks[taskId].data[10] = 0; + gTasks[taskId].data[11]++; + REG_BLDALPHA = gTasks[taskId].data[11] | ((16 - gTasks[taskId].data[11]) << 8); + if (gTasks[taskId].data[11] == 14) + { + gTasks[taskId].data[12]++; + gTasks[taskId].data[11] = 0; + } + } + break; + case 1: + if (++gTasks[taskId].data[11] == 0x15) + { + gTasks[taskId].data[11] = 14; + gTasks[taskId].data[12]++; + } + break; + case 2: + if (++gTasks[taskId].data[10] == 2) + { + gTasks[taskId].data[10] = 0; + gTasks[taskId].data[11]--; + REG_BLDALPHA = gTasks[taskId].data[11] | ((16 - gTasks[taskId].data[11]) << 8); + if (gTasks[taskId].data[11] == 0) + { + gTasks[taskId].data[12]++; + gTasks[taskId].data[11] = 0; + } + } + break; + case 3: + sub_8078914(&subStruct); + { + u8 *addr = subStruct.field_0; + u32 size = 0x2000; + while (1) + { + DmaFill32(3, 0, addr, 0x1000); + addr += 0x1000; + size -= 0x1000; + if (size <= 0x1000) + { + DmaFill32(3, 0, addr, size); + break; + } + } + } + DmaClear32(3, subStruct.field_4, 0x800); + if (!NotInBattle()) + REG_BG1CNT_BITFIELD.charBaseBlock = 0; + + gTasks[taskId].data[12]++; + // fall through + case 4: + REG_BLDCNT = 0; + REG_BLDALPHA = 0; + REG_BG1CNT_BITFIELD.priority = 1; + DestroyAnimVisualTask(taskId); + break; + } +} diff --git a/src/anim/seed.c b/src/anim/seed.c new file mode 100755 index 000000000..bd072849a --- /dev/null +++ b/src/anim/seed.c @@ -0,0 +1,50 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +static void sub_80CAB88(struct Sprite* sprite); +static void sub_80CABC0(struct Sprite* sprite); + +// seed (sprouts a sapling from a seed.) +// Used by Leech Seed. + +void sub_80CAB18(struct Sprite* sprite) +{ + sub_80787B0(sprite, 1); + if (GetBankSide(gBattleAnimBankAttacker)) + { + gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + } + + sprite->data[0] = gBattleAnimArgs[4]; + sprite->data[2] = sub_8077ABC(gBattleAnimBankTarget, 0) + gBattleAnimArgs[2]; + sprite->data[4] = sub_8077ABC(gBattleAnimBankTarget, 1) + gBattleAnimArgs[3]; + sprite->data[5] = gBattleAnimArgs[5]; + sub_80786EC(sprite); + sprite->callback = sub_80CAB88; +} + +void sub_80CAB88(struct Sprite* sprite) +{ + if (sub_8078718(sprite)) + { + sprite->invisible = 1; + sprite->data[0] = 10; + sprite->callback = sub_80782D8; + StoreSpriteCallbackInData(sprite, sub_80CABC0); + } +} + +void sub_80CABC0(struct Sprite* sprite) +{ + sprite->invisible = 0; + StartSpriteAnim(sprite, 1); + sprite->data[0] = 60; + sprite->callback = sub_80782D8; + StoreSpriteCallbackInData(sprite, move_anim_8072740); +} diff --git a/src/anim/shadow_enlarge.c b/src/anim/shadow_enlarge.c new file mode 100755 index 000000000..bed6c7ea3 --- /dev/null +++ b/src/anim/shadow_enlarge.c @@ -0,0 +1,35 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +static void sub_80D0428(u8 taskId); + +// shadow_enlarge (the magnifying-like shadow over the Pokemon effect) +// Used in Disable. + +void sub_80D03C4(u8 taskId) +{ + u8 spriteId = GetAnimBankSpriteId(1); + sub_8078E70(spriteId, 1); + obj_id_set_rotscale(spriteId, 0xD0, 0xD0, 0); + sub_8079108(gSprites[spriteId].oam.paletteNum + 16, 0); + gTasks[taskId].data[0] = 0x50; + gTasks[taskId].func = sub_80D0428; +} + +void sub_80D0428(u8 taskId) +{ + if (--gTasks[taskId].data[0] == -1) + { + u8 spriteId = GetAnimBankSpriteId(1); + sub_8078F40(spriteId); + sub_8079108(gSprites[spriteId].oam.paletteNum + 16, 1); + DestroyAnimVisualTask(taskId); + } +} diff --git a/src/anim/shadow_minimize.c b/src/anim/shadow_minimize.c new file mode 100755 index 000000000..22ebeab7a --- /dev/null +++ b/src/anim/shadow_minimize.c @@ -0,0 +1,262 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +static void sub_80D04E0(u8 taskId); +void sub_80D0614(struct Task* task, u8 taskId); +void sub_80D0704(struct Sprite* sprite); + +// shadow_minimize (the minimizing-like shadow over the Pokemon effect.) +// Used in Minimize. + +void sub_80D0488(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + u8 spriteId = GetAnimBankSpriteId(0); + task->data[0] = spriteId; + sub_8078E70(spriteId, 0); + task->data[1] = 0; + task->data[2] = 0; + task->data[3] = 0; + task->data[4] = 0x100; + task->data[5] = 0; + task->data[6] = 0; + task->data[7] = sub_8079E90(gBattleAnimBankAttacker); + task->func = sub_80D04E0; +} + +void sub_80D04E0(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + switch (task->data[1]) + { + case 0: + if (task->data[2] == 0 || task->data[2] == 3 || task->data[2] == 6) + sub_80D0614(task, taskId); + task->data[2]++; + task->data[4] += 0x28; + obj_id_set_rotscale(task->data[0], task->data[4], task->data[4], 0); + sub_8079A64(task->data[0]); + if (task->data[2] == 32) + { + task->data[5]++; + task->data[1]++; + } + break; + case 1: + if (task->data[6] == 0) + { + if (task->data[5] == 3) + { + task->data[2] = 0; + task->data[1] = 3; + } + else + { + task->data[2] = 0; + task->data[3] = 0; + task->data[4] = 0x100; + obj_id_set_rotscale(task->data[0], task->data[4], task->data[4], 0); + sub_8079A64(task->data[0]); + task->data[1] = 2; + } + } + break; + case 2: + task->data[1] = 0; + break; + case 3: + if (++task->data[2] > 32) + { + task->data[2] = 0; + task->data[1]++; + } + break; + case 4: + task->data[2] += 2; + task->data[4] -= 0x50; + obj_id_set_rotscale(task->data[0], task->data[4], task->data[4], 0); + sub_8079A64(task->data[0]); + if (task->data[2] == 32) + { + task->data[2] = 0; + task->data[1]++; + } + break; + case 5: + sub_8078F40(task->data[0]); + gSprites[task->data[15]].pos2.y = 0; + DestroyAnimVisualTask(taskId); + break; + } +} + +#ifdef NONMATCHING +void sub_80D0614(struct Task* task, u8 taskId) +{ + s16 r8 = duplicate_obj_of_side_rel2move_in_transparent_mode(0); + if (r8 >= 0) + { + u8 r6 = AllocOamMatrix(); + if (r6 == 0xFF) + { + obj_delete_but_dont_free_vram(&gSprites[r8]); + } + else + { + gSprites[r8].oam.objMode = 1; + gSprites[r8].oam.affineMode = 3; + gSprites[r8].affineAnimPaused = 1; + gSprites[r8].oam.matrixNum = r6; + gSprites[r8].subpriority = task->data[7] - task->data[3]; + task->data[3]++; + task->data[6]++; + gSprites[r8].data[0] = 16; + gSprites[r8].data[1] = taskId; + gSprites[r8].data[2] = 6; + gSprites[r8].callback = sub_80D0704; + obj_id_set_rotscale(r8, task->data[4], task->data[4], 0); + gSprites[r8].oam.affineMode = 1; + CalcCenterToCornerVec(&gSprites[r8], gSprites[r8].oam.shape, gSprites[r8].oam.size, gSprites[r8].oam.affineMode); + } + } +} +#else +__attribute__((naked)) +void sub_80D0614(struct Task* task, u8 taskId) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r9\n\ + mov r6, r8\n\ + push {r6,r7}\n\ + adds r7, r0, 0 @r7 is task\n\ + lsls r1, 24\n\ + lsrs r1, 24\n\ + mov r9, r1 @r9 is taskId\n\ + movs r0, 0\n\ + bl duplicate_obj_of_side_rel2move_in_transparent_mode\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + mov r8, r0\n\ + lsls r0, 16\n\ + asrs r4, r0, 16\n\ + cmp r4, 0\n\ + blt _080D06EE @jump to bottom\n\ + bl AllocOamMatrix\n\ + lsls r0, 24\n\ + lsrs r6, r0, 24\n\ + cmp r6, 0xFF\n\ + bne _080D0658\n\ + lsls r0, r4, 4\n\ + adds r0, r4\n\ + lsls r0, 2\n\ + ldr r1, _080D0654 @ =gSprites\n\ + adds r0, r1\n\ + bl obj_delete_but_dont_free_vram\n\ + b _080D06EE @ jump to bottom\n\ + .align 2, 0\n\ +_080D0654: .4byte gSprites\n\ +_080D0658:\n\ + ldr r5, _080D06FC @ =gSprites\n\ + lsls r3, r4, 4\n\ + adds r3, r4\n\ + lsls r3, 2\n\ + adds r4, r3, r5\n\ + ldrb r1, [r4, 0x1]\n\ + movs r0, 0xD\n\ + negs r0, r0\n\ + ands r0, r1\n\ + movs r1, 0x4\n\ + orrs r0, r1\n\ + movs r1, 0x3\n\ + orrs r0, r1\n\ + strb r0, [r4, 0x1]\n\ + adds r2, r4, 0\n\ + adds r2, 0x2C\n\ + ldrb r0, [r2]\n\ + movs r1, 0x80\n\ + orrs r0, r1\n\ + strb r0, [r2]\n\ + movs r0, 0x1F\n\ + ands r6, r0\n\ + lsls r2, r6, 1\n\ + ldrb r1, [r4, 0x3]\n\ + movs r0, 0x3F\n\ + negs r0, r0\n\ + ands r0, r1\n\ + orrs r0, r2\n\ + strb r0, [r4, 0x3]\n\ + ldrb r0, [r7, 0x16]\n\ + ldrb r1, [r7, 0xE]\n\ + subs r0, r1\n\ + adds r1, r4, 0\n\ + adds r1, 0x43\n\ + strb r0, [r1]\n\ + ldrh r0, [r7, 0xE]\n\ + adds r0, 0x1\n\ + strh r0, [r7, 0xE]\n\ + ldrh r0, [r7, 0x14]\n\ + adds r0, 0x1\n\ + strh r0, [r7, 0x14]\n\ + movs r0, 0x10\n\ + strh r0, [r4, 0x2E]\n\ + mov r0, r9\n\ + strh r0, [r4, 0x30]\n\ + movs r0, 0x6\n\ + strh r0, [r4, 0x32]\n\ + adds r5, 0x1C\n\ + adds r3, r5\n\ + ldr r0, _080D0700 @ =sub_80D0704\n\ + str r0, [r3]\n\ + mov r1, r8 @duplicate_obj_of_side_rel2move_in_transparent_mode(0)\n\ + lsls r0, r1, 24\n\ + lsrs r0, 24\n\ + movs r1, 0x10\n\ + ldrsh r2, [r7, r1]\n\ + adds r1, r2, 0\n\ + movs r3, 0\n\ + bl obj_id_set_rotscale\n\ + ldrb r0, [r4, 0x1]\n\ + movs r3, 0x4\n\ + negs r3, r3\n\ + ands r3, r0\n\ + movs r0, 0x1\n\ + orrs r3, r0\n\ + strb r3, [r4, 0x1]\n\ + lsrs r1, r3, 6\n\ + ldrb r2, [r4, 0x3]\n\ + lsrs r2, 6\n\ + lsls r3, 30\n\ + lsrs r3, 30\n\ + adds r0, r4, 0\n\ + bl CalcCenterToCornerVec\n\ +_080D06EE:\n\ + pop {r3,r4}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_080D06FC: .4byte gSprites\n\ +_080D0700: .4byte sub_80D0704\n\ +.syntax divided\n"); +} +#endif + +void sub_80D0704(struct Sprite* sprite) +{ + if (--sprite->data[0] == 0) + { + gTasks[sprite->data[1]].data[sprite->data[2]]--; + FreeOamMatrix(sprite->oam.matrixNum); + obj_delete_but_dont_free_vram(sprite); + } +} diff --git a/src/anim/shield.c b/src/anim/shield.c new file mode 100755 index 000000000..8ed4f9796 --- /dev/null +++ b/src/anim/shield.c @@ -0,0 +1,81 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" +#include "palette.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +static void sub_80CCE0C(struct Sprite* sprite); + +// shield +// Used by Protect. + +void sub_80CCD24(struct Sprite* sprite) +{ + if (NotInBattle() != 0) + { + gBattleAnimArgs[1] += 8; + } + + sprite->pos1.x = sub_8077EE4(gBattleAnimBankAttacker, 0) + gBattleAnimArgs[0]; + sprite->pos1.y = sub_8077EE4(gBattleAnimBankAttacker, 1) + gBattleAnimArgs[1]; + if (GetBankSide(gBattleAnimBankAttacker) == 0 || NotInBattle()) + sprite->oam.priority = sub_8079ED4(gBattleAnimBankAttacker) + 1; + else + sprite->oam.priority = sub_8079ED4(gBattleAnimBankAttacker); + + sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[2] = (IndexOfSpritePaletteTag(0x2828) << 4) + 0x100; + sprite->data[7] = 16; + REG_BLDCNT = 0x3F40; + REG_BLDALPHA = (sprite->data[7] << 8) | (16 - sprite->data[7]); + sprite->callback = sub_80CCE0C; +} + +void sub_80CCE0C(struct Sprite* sprite) +{ + int a; + int i; + sprite->data[5] += 0x60; + sprite->pos2.x = -(sprite->data[5] >> 8); + sprite->data[1]++; + if (sprite->data[1] > 1) + { + sprite->data[1] = 0; + a = gPlttBufferFaded[sprite->data[2] + 1]; + i = 0; + do + { + gPlttBufferFaded[sprite->data[2] + ++i] = gPlttBufferFaded[sprite->data[2] + i + 1]; + } while ( i <= 5 ); + + gPlttBufferFaded[sprite->data[2] + 7] = a; + } + + if (sprite->data[7] > 6 && sprite->data[0] >0 && ++sprite->data[6] > 1) + { + sprite->data[6] = 0; + sprite->data[7] -= 1; + REG_BLDALPHA = (sprite->data[7] << 8) | (16 - sprite->data[7]);; + } + + if (sprite->data[0] >0) + { + sprite->data[0] -= 1; + } + else if (++sprite->data[6] > 1) + { + sprite->data[6] = 0; + sprite->data[7]++; + REG_BLDALPHA = (sprite->data[7] << 8) | (16 - sprite->data[7]); + if (sprite->data[7] == 16) + { + sprite->invisible = 1; + sprite->callback = sub_807861C; + } + } +} diff --git a/src/anim/shimmer.c b/src/anim/shimmer.c new file mode 100755 index 000000000..ecb3dcdf9 --- /dev/null +++ b/src/anim/shimmer.c @@ -0,0 +1,48 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" +#include "blend_palette.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +extern u16 gUnknown_083D6984[]; + +// shimmer +// Used by Magical Leaf. + +void sub_80CC5F8(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + switch (task->data[0]) + { + case 0: + task->data[8] = IndexOfSpritePaletteTag(0x274f) * 16 + 256; + task->data[12] = IndexOfSpritePaletteTag(0x27b0) * 16 + 256; + task->data[0]++; + break; + case 1: + task->data[9]++; + if (task->data[9] >= 0) + { + task->data[9] = 0; + BlendPalette(task->data[8], 0x10, task->data[10], gUnknown_083D6984[task->data[11]]); + BlendPalette(task->data[12], 0x10, task->data[10], gUnknown_083D6984[task->data[11]]); + task->data[10]++; + if (task->data[10] == 17) + { + task->data[10] = 0; + task->data[11]++; + if (task->data[11] == 7) + task->data[11] = 0; + } + } + break; + } + + if (gBattleAnimArgs[7] == -1) + DestroyAnimVisualTask(taskId); +} diff --git a/src/anim/silhouette.c b/src/anim/silhouette.c new file mode 100755 index 000000000..71ff3dae2 --- /dev/null +++ b/src/anim/silhouette.c @@ -0,0 +1,77 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +static void sub_80CB3A8(u8 taskId); +static void sub_80CB438(u8 taskId); + +// silhouette (the transparent shadow image used for mimic.) +// Only used by Mimic. + +void sub_80CB340(u8 taskId) +{ + u8 spriteId = GetAnimBankSpriteId(1); + if (gSprites[spriteId].invisible) + { + DestroyAnimVisualTask(taskId); + } + else + { + sub_8078E70(spriteId, 1); + gTasks[taskId].data[0] = gBattleAnimArgs[0]; + gTasks[taskId].data[1] = gBattleAnimArgs[1]; + gTasks[taskId].data[11] = 256; + gTasks[taskId].func = sub_80CB3A8; + } +} + +void sub_80CB3A8(u8 taskId) +{ + u8 spriteId = GetAnimBankSpriteId(1); + gTasks[taskId].data[10] += gTasks[taskId].data[0]; + gSprites[spriteId].pos2.x = gTasks[taskId].data[10] >> 8; + if (GetBankSide(gBattleAnimBankTarget)) + { + gSprites[spriteId].pos2.x = -gSprites[spriteId].pos2.x; + } + + gTasks[taskId].data[11] += 16; + obj_id_set_rotscale(spriteId, gTasks[taskId].data[11], gTasks[taskId].data[11], 0); + sub_8079A64(spriteId); + gTasks[taskId].data[1]--; + if (!gTasks[taskId].data[1]) + { + gTasks[taskId].data[0] = 0; + gTasks[taskId].func = sub_80CB438; + } +} + +void sub_80CB438(u8 taskId) +{ + if ((u16)gBattleAnimArgs[7] == 0xFFFF) + { + if (gTasks[taskId].data[0] == 0) + { + u8 spriteId = GetAnimBankSpriteId(1); + sub_8078F40(spriteId); + gSprites[spriteId].pos2.x = 0; + gSprites[spriteId].pos2.y = 0; + gTasks[taskId].data[0]++; + return; + } + } + else + { + if (gTasks[taskId].data[0] == 0) + return; + } + + gTasks[taskId].data[0]++; + if (gTasks[taskId].data[0] == 3) + DestroyAnimVisualTask(taskId); +} diff --git a/src/anim/slash.c b/src/anim/slash.c new file mode 100755 index 000000000..c5869c4ab --- /dev/null +++ b/src/anim/slash.c @@ -0,0 +1,83 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +static void sub_80CDE78(struct Sprite* sprite); +static void sub_80CDEB0(struct Sprite* sprite); +static void sub_80CDEC0(struct Sprite* sprite); + +// slash (a cutting animation) +// Used in Slash and False Swipe. + +void sub_80CDD74(struct Sprite* sprite) +{ + if (gBattleAnimArgs[0] == 0) + { + sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 2) + gBattleAnimArgs[1]; + sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 3) + gBattleAnimArgs[2]; + } + else + { + sprite->pos1.x = sub_8077ABC(gBattleAnimBankTarget, 2) + gBattleAnimArgs[1]; + sprite->pos1.y = sub_8077ABC(gBattleAnimBankTarget, 3) + gBattleAnimArgs[2]; + } + + sprite->data[0] = 0; + sprite->data[1] = 0; + StoreSpriteCallbackInData(sprite, sub_80CDEC0); + sprite->callback = sub_8078600; +} + +void sub_80CDDDC(struct Sprite* sprite) +{ + sprite->pos1.x = sub_8077ABC(gBattleAnimBankTarget, 2) + 0xFFD0; + sprite->pos1.y = sub_8077ABC(gBattleAnimBankTarget, 3); + StoreSpriteCallbackInData(sprite, sub_80CDE78); + sprite->callback = sub_8078600; +} + +void sub_80CDE24(struct Sprite* sprite) +{ + sprite->pos1.x = sprite->pos1.x = sub_8077ABC(gBattleAnimBankTarget, 2) + 0xFFD0 + gBattleAnimArgs[0]; + sprite->pos1.y = sub_8077ABC(gBattleAnimBankTarget, 3); + StartSpriteAnim(sprite, 1); + sprite->data[0] = 0; + sprite->data[1] = 0; + sprite->callback = sub_80CDEC0; +} + +void sub_80CDE78(struct Sprite* sprite) +{ + if (++sprite->data[0] > 8) + { + sprite->data[0] = 12; + sprite->data[1] = 8; + sprite->data[2] = 0; + StoreSpriteCallbackInData(sprite, sub_80CDEB0); + sprite->callback = sub_8078364; + } +} + +void sub_80CDEB0(struct Sprite* sprite) +{ + sprite->data[0] = 0; + sprite->data[1] = 0; + sprite->callback = sub_80CDEC0; +} + +void sub_80CDEC0(struct Sprite* sprite) +{ + if (++sprite->data[0] > 1) + { + sprite->data[0] = 0; + sprite->invisible = !sprite->invisible; + if (++sprite->data[1] > 8) + move_anim_8072740(sprite); + } +} diff --git a/src/anim/sleep.c b/src/anim/sleep.c new file mode 100755 index 000000000..58ecc702f --- /dev/null +++ b/src/anim/sleep.c @@ -0,0 +1,44 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +static void sub_80CD394(struct Sprite* sprite); + +// sleep (the "ZZZ" graphical effect) +// Used by Rest and the sleep turn when the Pokemon is still asleep. + +void sub_80CD328(struct Sprite* sprite) +{ + sub_8078650(sprite); + if (GetBankSide(gBattleAnimBankAttacker) == 0) + { + sprite->pos1.x += gBattleAnimArgs[0]; + sprite->pos1.y += gBattleAnimArgs[1]; + sprite->data[3] = 1; + } + else + { + sprite->pos1.x -= gBattleAnimArgs[0]; + sprite->pos1.y += gBattleAnimArgs[1]; + sprite->data[3] = 0xFFFF; + StartSpriteAffineAnim(sprite, 1); + } + + sprite->callback = sub_80CD394; +} + +void sub_80CD394(struct Sprite* sprite) +{ + sprite->pos2.y = -(sprite->data[0] / 0x28); + sprite->pos2.x = sprite->data[4] / 10; + sprite->data[4] += sprite->data[3] * 2; + sprite->data[0] += sprite->data[1]; + if (++sprite->data[1] > 0x3C) + move_anim_8074EE0(sprite); +} diff --git a/src/anim/slice.c b/src/anim/slice.c new file mode 100755 index 000000000..8e33dcb06 --- /dev/null +++ b/src/anim/slice.c @@ -0,0 +1,111 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +static void sub_80CCB00(struct Sprite* sprite); + +// slice (the cutting animation showing as a yellow line drawn diagonally) +// Used in Cut, Fury Cutter, Aerial Ace, and Air Cutter. + +void sub_80CC914(struct Sprite* sprite) +{ + sprite->pos1.x = sub_8077ABC(gBattleAnimBankTarget, 0); + sprite->pos1.y = sub_8077ABC(gBattleAnimBankTarget, 1); + if (GetBankSide(gBattleAnimBankTarget) == 0) + sprite->pos1.y += 8; + + sprite->callback = sub_80CCB00; + if (gBattleAnimArgs[2] == 0) + { + sprite->pos1.x += gBattleAnimArgs[0]; + } + else + { + sprite->pos1.x -= gBattleAnimArgs[0]; + sprite->hFlip = 1; + } + + sprite->pos1.y += gBattleAnimArgs[1]; + sprite->data[1] -= 0x400; + sprite->data[2] += 0x400; + sprite->data[5] = gBattleAnimArgs[2]; + if (sprite->data[5] == 1) + sprite->data[1] = -sprite->data[1]; +} + +void sub_80CC9BC(struct Sprite* sprite) +{ + u8 a; + u8 b; + switch (gBattleAnimArgs[3]) + { + case 1: + a = sub_8077ABC(gBattleAnimBankTarget ^ 2, 0); + b = sub_8077ABC(gBattleAnimBankTarget ^ 2, 1); + break; + case 2: + a = sub_8077ABC(gBattleAnimBankTarget, 0); + b = sub_8077ABC(gBattleAnimBankTarget, 1); + if (IsAnimBankSpriteVisible(gBattleAnimBankTarget ^ 2)) + { + a = (sub_8077ABC(gBattleAnimBankTarget ^ 2, 0) + a) / 2; + b = (sub_8077ABC(gBattleAnimBankTarget ^ 2, 1) + b) / 2; + } + break; + case 0: + default: + a = sub_8077ABC(gBattleAnimBankTarget, 0); + b = sub_8077ABC(gBattleAnimBankTarget, 1); + break; + } + + sprite->pos1.x = a; + sprite->pos1.y = b; + if (GetBankSide(gBattleAnimBankTarget) == 0) + sprite->pos1.y += 8; + + sprite->callback = sub_80CCB00; + if (gBattleAnimArgs[2] == 0) + { + sprite->pos1.x += gBattleAnimArgs[0]; + } + else + { + sprite->pos1.x -= gBattleAnimArgs[0]; + sprite->hFlip = 1; + } + + sprite->pos1.y += gBattleAnimArgs[1]; + sprite->data[1] -= 0x400; + sprite->data[2] += 0x400; + sprite->data[5] = gBattleAnimArgs[2]; + if (sprite->data[5] == 1) + sprite->data[1] = -sprite->data[1]; +} + +void sub_80CCB00(struct Sprite* sprite) +{ + sprite->data[3] += sprite->data[1]; + sprite->data[4] += sprite->data[2]; + if (sprite->data[5] == 0) + sprite->data[1] += 0x18; + else + sprite->data[1] -= 0x18; + + sprite->data[2] -= 0x18; + sprite->pos2.x = sprite->data[3] >> 8; + sprite->pos2.y = sprite->data[4] >> 8; + sprite->data[0]++; + if (sprite->data[0] == 20) + { + StoreSpriteCallbackInData(sprite, move_anim_8072740); + sprite->data[0] = 3; + sprite->callback = sub_80782D8; + } +} diff --git a/src/anim/smoke.c b/src/anim/smoke.c new file mode 100755 index 000000000..c6ce91b76 --- /dev/null +++ b/src/anim/smoke.c @@ -0,0 +1,22 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +// smoke (smoke on the ground around a sprite.) +// Used in Extremespeed. + +void sub_80D1A70(struct Sprite* sprite) +{ + sprite->invisible = gTasks[sprite->data[0]].data[5]; + if (sprite->animEnded) + { + gTasks[sprite->data[0]].data[sprite->data[1]]--; + DestroySprite(sprite); + } +} diff --git a/src/anim/sonic.c b/src/anim/sonic.c new file mode 100755 index 000000000..684516ba7 --- /dev/null +++ b/src/anim/sonic.c @@ -0,0 +1,136 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" +#include "battle_anim_80CA710.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +// sonic (shoots a projectile towards the target.) +// Used in Sonic Boom and Air Cutter. + +void sub_80CF6DC(struct Sprite* sprite) +{ + s16 a; + s16 b; + u16 c; + + if (NotInBattle()) + { + gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + } + else if (GetBankSide(gBattleAnimBankAttacker) != 0) + { + gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + gBattleAnimArgs[1] = -gBattleAnimArgs[1]; + gBattleAnimArgs[3] = -gBattleAnimArgs[3]; + } + + sub_80787B0(sprite, 1); + a = sub_8077ABC(gBattleAnimBankTarget, 2) + gBattleAnimArgs[2]; + b = sub_8077ABC(gBattleAnimBankTarget, 3) + gBattleAnimArgs[3]; + c = sub_80790F0(a - sprite->pos1.x, b - sprite->pos1.y); + c += 0xF000; + if (NotInBattle()) + c -= 0x6000; + + sub_8078FDC(sprite, 0, 0x100, 0x100, c); + sprite->data[0] = gBattleAnimArgs[4]; + sprite->data[2] = a; + sprite->data[4] = b; + sprite->callback = sub_8078B34; + StoreSpriteCallbackInData(sprite, move_anim_8072740); +} + +void sub_80CF7E0(struct Sprite* sprite) +{ + if (sprite->data[0]-- <= 0) + { + gTasks[sprite->data[7]].data[1]--; + DestroySprite(sprite); + } +} + +void sub_80CF814(struct Sprite* sprite) +{ + struct Task* task = &gTasks[sprite->data[7]]; + if (sprite->data[0] > task->data[5]) + { + sprite->data[5] += sprite->data[3]; + sprite->data[6] += sprite->data[4]; + } + else + { + sprite->data[5] -= sprite->data[3]; + sprite->data[6] -= sprite->data[4]; + } + + sprite->data[1] += sprite->data[5]; + sprite->data[2] += sprite->data[6]; + if (1 & task->data[7]) + sprite->pos2.x = ((u16)sprite->data[1] >> 8) * -1; + else + sprite->pos2.x = (u16)sprite->data[1] >> 8; + + if (1 & task->data[8]) + sprite->pos2.y = ((u16)sprite->data[2] / 256u) * -1; + else + sprite->pos2.y = (u16)sprite->data[2] / 256u; + + if (sprite->data[0]-- <= 0) + { + sprite->data[0] = 30; + sprite->callback = sub_80CF7E0; + } +} + +void sub_80CF8B8(struct Sprite* sprite) +{ + s16 a; + s16 b; + s16 c; + + struct Task* task = &gTasks[sprite->data[7]]; + sprite->data[1] += (-2 & task->data[7]); + sprite->data[2] += (-2 & task->data[8]); + if (1 & task->data[7]) + sprite->pos2.x = ((u16)sprite->data[1] >> 8) * -1; + else + sprite->pos2.x = (u16)sprite->data[1] >> 8; + + if (1 & task->data[8]) + sprite->pos2.y = ((u16)sprite->data[2] / 256u) * -1; + else + sprite->pos2.y = (u16)sprite->data[2] / 256u; + + if (sprite->data[0]-- <= 0) + { + sprite->data[0] = 8; + task->data[5] = 4; + a = sub_81174E0(0x1000); + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.y = 0; + sprite->pos2.x = 0; + if (task->data[11] >= sprite->pos1.x) + b = (task->data[11] - sprite->pos1.x) << 8; + else + b = (sprite->pos1.x - task->data[11]) << 8; + + if (task->data[12] >= sprite->pos1.y) + c = (task->data[12] - sprite->pos1.y) << 8; + else + c = (sprite->pos1.y - task->data[12]) << 8; + + sprite->data[2] = 0; + sprite->data[1] = 0; + sprite->data[6] = 0; + sprite->data[5] = 0; + sprite->data[3] = sub_81174C4(sub_81174C4(b, a), sub_81174E0(0x1C0)); + sprite->data[4] = sub_81174C4(sub_81174C4(c, a), sub_81174E0(0x1C0)); + sprite->callback = sub_80CF814; + } +} diff --git a/src/anim/sonic_task.c b/src/anim/sonic_task.c new file mode 100755 index 000000000..efd13dff6 --- /dev/null +++ b/src/anim/sonic_task.c @@ -0,0 +1,152 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" +#include "battle_anim_80CA710.h" +#include "battle.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +extern u8 gBanksBySide[]; +extern u16 gBattleTypeFlags; +extern struct SpriteTemplate gSpriteTemplate_83D74BC; + +// sonic_task (the task functions for the "sonic" effect.) +// Used in Air Cutter and Sonic Boom. + +void sub_80CF9F8(u8 taskId) +{ + if (gTasks[taskId].data[1] == 0) + DestroyAnimVisualTask(taskId); +} + +void sub_80CFA20(u8 taskId) +{ + if (gTasks[taskId].data[0]-- <= 0) + { + u8 spriteId; + struct Sprite* sprite; + spriteId = CreateSprite(&gSpriteTemplate_83D74BC, gTasks[taskId].data[9], gTasks[taskId].data[10], gTasks[taskId].data[2] - gTasks[taskId].data[1]); + sprite = &gSprites[spriteId]; + switch (gTasks[taskId].data[4]) + { + case 1: + sprite->oam.matrixNum |= 24; + break; + case 2: + sprite->oam.matrixNum = 8; + break; + } + + sprite->data[0] = gTasks[taskId].data[5] - gTasks[taskId].data[6]; + sprite->data[7] = taskId; + gTasks[taskId].data[gTasks[taskId].data[1] + 13] = spriteId; + gTasks[taskId].data[0] = gTasks[taskId].data[3]; + gTasks[taskId].data[1]++; + PlaySE12WithPanning(0x9A, sub_8076F98(-0x3F)); + if (gTasks[taskId].data[1] > 2) + gTasks[taskId].func = sub_80CF9F8; + } +} + +void sub_80CFB04(u8 taskId) +{ + s16 r9 = 0; + s16 r6 = 0; + s16 sp1 = 0; + s16 sp2 = 0; + s16 r4; + + if (NotInBattle()) + { + gTasks[taskId].data[4] = 2; + gBattleAnimArgs[0] = -gBattleAnimArgs[0]; + if (gBattleAnimArgs[2] & 1) + gBattleAnimArgs[2] &= ~1; + else + gBattleAnimArgs[2] |= 1; + } + else + { + if ((gBanksBySide[gBattleAnimBankTarget] & 1) == 0) + { + gTasks[taskId].data[4] = 1; + gBattleAnimArgs[0] = -gBattleAnimArgs[0]; + gBattleAnimArgs[1] = -gBattleAnimArgs[1]; + if (gBattleAnimArgs[2] & 1) + gBattleAnimArgs[2] &= ~1; + else + gBattleAnimArgs[2] |= 1; + } + } + r6 = gTasks[taskId].data[9] = sub_8077ABC(gBattleAnimBankAttacker, 0); + r9 = gTasks[taskId].data[10] = sub_8077ABC(gBattleAnimBankAttacker, 1); + if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + && IsAnimBankSpriteVisible(gBattleAnimBankTarget ^ 2)) + { + sub_807A3FC(gBattleAnimBankTarget, 0, &sp1, &sp2); + } + else + { + sp1 = sub_8077ABC(gBattleAnimBankTarget, 0); + sp2 = sub_8077ABC(gBattleAnimBankTarget, 1); + } + + sp1 = gTasks[taskId].data[11] = sp1 + gBattleAnimArgs[0]; + sp2 = gTasks[taskId].data[12] = sp2 + gBattleAnimArgs[1]; + if (sp1 >= r6) + r4 = sp1 - r6; + else + r4 = r6 - sp1; + + gTasks[taskId].data[5] = sub_81174C4(r4, sub_81174E0(gBattleAnimArgs[2] & ~1)); + gTasks[taskId].data[6] = sub_81174C4(gTasks[taskId].data[5], 0x80); + gTasks[taskId].data[7] = gBattleAnimArgs[2]; + if (sp2 >= r9) + { + r4 = sp2 - r9; + gTasks[taskId].data[8] = sub_81174C4(r4, sub_81174E0(gTasks[taskId].data[5])) & ~1; + } + else + { + r4 = r9 - sp2; + gTasks[taskId].data[8] = sub_81174C4(r4, sub_81174E0(gTasks[taskId].data[5])) | 1; + } + + gTasks[taskId].data[3] = gBattleAnimArgs[3]; + if (gBattleAnimArgs[4] & 0x80) + { + gBattleAnimArgs[4] ^= 0x80; + if (gBattleAnimArgs[4] >= 64) + { + u16 var = sub_8079E90(gBattleAnimBankTarget) + (gBattleAnimArgs[4] - 64); + gTasks[taskId].data[2] = var; + } + else + { + u16 var = sub_8079E90(gBattleAnimBankTarget) - gBattleAnimArgs[4]; + gTasks[taskId].data[2] = var; + } + } + else + { + if (gBattleAnimArgs[4] >= 64) + { + u16 var = sub_8079E90(gBattleAnimBankTarget) + (gBattleAnimArgs[4] - 64); + gTasks[taskId].data[2] = var; + } + else + { + u16 var = sub_8079E90(gBattleAnimBankTarget) - gBattleAnimArgs[4]; + gTasks[taskId].data[2] = var; + } + } + + if (gTasks[taskId].data[2] < 3) + gTasks[taskId].data[2] = 3; + + gTasks[taskId].func = sub_80CFA20; +} diff --git a/src/anim/spin_finger.c b/src/anim/spin_finger.c new file mode 100755 index 000000000..adf41b261 --- /dev/null +++ b/src/anim/spin_finger.c @@ -0,0 +1,73 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +extern void sub_80CF088(struct Sprite* sprite); +static void sub_80CF138(struct Sprite* sprite); +static void sub_80CF158(struct Sprite* sprite); + +// spin_finger +// Used in Follow Me. + +void sub_80CF0BC(struct Sprite* sprite) +{ + u8 bank; + if (gBattleAnimArgs[0] == 0) + bank = gBattleAnimBankAttacker; + else + bank = gBattleAnimBankTarget; + + sprite->pos1.x = sub_8077ABC(bank, 0); + sprite->pos1.y = sub_807A100(bank, 2); + if (sprite->pos1.y <= 9) + sprite->pos1.y = 10; + + sprite->data[0] = 1; + sprite->data[1] = 0; + sprite->data[2] = sprite->subpriority; + sprite->data[3] = sprite->subpriority + 4; + sprite->data[4] = 0; + StoreSpriteCallbackInData(sprite, sub_80CF138); + sprite->callback = sub_80785E4; +} + +void sub_80CF138(struct Sprite* sprite) +{ + if (++sprite->data[4] > 12) + sprite->callback = sub_80CF158; +} + +void sub_80CF158(struct Sprite* sprite) +{ + s16 temp; + s16 temp2; + sprite->data[1] += 4; + if (sprite->data[1] > 0xFE) + { + if (--sprite->data[0] == 0) + { + sprite->pos2.x = 0; + sprite->callback = sub_80CF088; + return; + } + else + { + sprite->data[1] &= 0xFF; + } + } + + if (sprite->data[1] > 0x4F) + sprite->subpriority = sprite->data[3]; + + if (sprite->data[1] > 0x9F) + sprite->subpriority = sprite->data[2]; + + temp = gSineTable[sprite->data[1]]; + sprite->pos2.x = (temp2 = temp >> 3) + (temp2 >> 1); +} diff --git a/src/anim/spit.c b/src/anim/spit.c new file mode 100755 index 000000000..f9ad462ae --- /dev/null +++ b/src/anim/spit.c @@ -0,0 +1,30 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +// spit (hurls sprites outward from the pokemon. Similar to orbit_fast, but takes another argument.) +// Used in Spit Up. + +void sub_80D287C(struct Sprite* sprite) +{ + sprite->pos2.x += sprite->data[0]; + sprite->pos2.y += sprite->data[1]; + if (sprite->data[3]++ >= sprite->data[2]) + move_anim_8072740(sprite); +} + +void sub_80D28AC(struct Sprite* sprite) +{ + sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 2); + sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 3); + sprite->data[0] = Sin(gBattleAnimArgs[0], 10); + sprite->data[1] = Cos(gBattleAnimArgs[0], 7); + sprite->data[2] = gBattleAnimArgs[1]; + sprite->callback = sub_80D287C; +} diff --git a/src/anim/splash.c b/src/anim/splash.c new file mode 100755 index 000000000..1b0ceba93 --- /dev/null +++ b/src/anim/splash.c @@ -0,0 +1,87 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +extern struct AffineAnimFrameCmd gUnknown_083D76F4; + +static void sub_80D07AC(u8 taskId); + +// splash (splash effect of hopping up and down) +// Used in Splash, Mud Sport, and Sketch. + +void sub_80D074C(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + if (gBattleAnimArgs[1] == 0) + { + DestroyAnimVisualTask(taskId); + } + else + { + u8 spriteId = GetAnimBankSpriteId(gBattleAnimArgs[0]); + task->data[0] = spriteId; + task->data[1] = 0; + task->data[2] = gBattleAnimArgs[1]; + task->data[3] = 0; + task->data[4] = 0; + sub_80798F4(task, spriteId, &gUnknown_083D76F4); + task->func = sub_80D07AC; + } +} + +void sub_80D07AC(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + switch (task->data[1]) + { + case 0: + sub_807992C(task); + task->data[4] += 3; + gSprites[task->data[0]].pos2.y += task->data[4]; + if (++task->data[3] > 7) + { + task->data[3] = 0; + task->data[1]++; + } + break; + case 1: + sub_807992C(task); + gSprites[task->data[0]].pos2.y += task->data[4]; + if (++task->data[3] > 7) + { + task->data[3] = 0; + task->data[1]++; + } + break; + case 2: + if (task->data[4] != 0) + { + gSprites[task->data[0]].pos2.y -= 2; + task->data[4] -= 2; + } + else + task->data[1]++; + break; + case 3: + if (!sub_807992C(task)) + { + if (--task->data[2] == 0) + { + gSprites[task->data[0]].pos2.y = 0; + DestroyAnimVisualTask(taskId); + } + else + { + sub_80798F4(task, task->data[0], &gUnknown_083D76F4); + task->data[1] = 0; + } + } + break; + } +} diff --git a/src/anim/startle.c b/src/anim/startle.c new file mode 100755 index 000000000..acbf80fec --- /dev/null +++ b/src/anim/startle.c @@ -0,0 +1,56 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +extern struct AffineAnimFrameCmd gUnknown_083D7A98; + +// startle (the pokemon sprite shrivels upward and restores after a brief time.) +// Used in Fake Out, Trick, and Astonish. + +// opponent +void sub_80D1E38(u8 taskId) +{ + u8 spriteId = GetAnimBankSpriteId(1); + if (++gTasks[taskId].data[0] == 1) + { + sub_80798F4(&gTasks[taskId], GetAnimBankSpriteId(1), &gUnknown_083D7A98); + gSprites[spriteId].pos2.x = 4; + } + else + { + gSprites[spriteId].pos2.x = -gSprites[spriteId].pos2.x; + if (sub_807992C(&gTasks[taskId]) == 0) + { + gSprites[spriteId].pos2.x = 0; + gSprites[spriteId].pos2.y = 0; + DestroyAnimVisualTask(taskId); + } + } +} + +// player +void sub_80D1EC8(u8 taskId) +{ + u8 spriteId = GetAnimBankSpriteId(0); + if (++gTasks[taskId].data[0] == 1) + { + sub_80798F4(&gTasks[taskId], GetAnimBankSpriteId(0), &gUnknown_083D7A98); + gSprites[spriteId].pos2.x = 4; + } + else + { + gSprites[spriteId].pos2.x = -gSprites[spriteId].pos2.x; + if (sub_807992C(&gTasks[taskId]) == 0) + { + gSprites[spriteId].pos2.x = 0; + gSprites[spriteId].pos2.y = 0; + DestroyAnimVisualTask(taskId); + } + } +} diff --git a/src/anim/strike.c b/src/anim/strike.c new file mode 100755 index 000000000..f2fbdb5a4 --- /dev/null +++ b/src/anim/strike.c @@ -0,0 +1,77 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +static void sub_80CE798(struct Sprite* sprite); + +// strike (A red strike towards the opponent.) +// Used in Horn Attack, Fury Attack, and Horn Drill. + +void sub_80CE670(struct Sprite* sprite) +{ + if (gBattleAnimArgs[2] <= 1) + gBattleAnimArgs[2] = 2; + + if (gBattleAnimArgs[2] > 0x7F) + gBattleAnimArgs[2] = 0x7F; + + sprite->data[0] = 0; + sprite->data[1] = gBattleAnimArgs[2]; + sprite->pos1.x = sub_8077ABC(gBattleAnimBankTarget, 2) + gBattleAnimArgs[0]; + sprite->pos1.y = sub_8077ABC(gBattleAnimBankTarget, 3) + gBattleAnimArgs[1]; + sprite->data[6] = sprite->pos1.x; + sprite->data[7] = sprite->pos1.y; + if (NotInBattle() != 0) + { + sprite->oam.matrixNum = 8; + sprite->pos1.x += 40; + sprite->pos1.y += 20; + sprite->data[2] = sprite->pos1.x << 7; + sprite->data[3] = -0x1400 / sprite->data[1]; + sprite->data[4] = sprite->pos1.y << 7; + sprite->data[5] = -0xA00 / sprite->data[1]; + } + else if (GetBankSide(gBattleAnimBankAttacker) == 0) + { + sprite->pos1.x -= 40; + sprite->pos1.y += 20; + sprite->data[2] = sprite->pos1.x << 7; + sprite->data[3] = 0x1400 / sprite->data[1]; + sprite->data[4] = sprite->pos1.y << 7; + sprite->data[5] = -0xA00 / sprite->data[1]; + } + else + { + sprite->pos1.x += 40; + sprite->pos1.y -= 20; + sprite->data[2] = sprite->pos1.x << 7; + sprite->data[3] = -0x1400 / sprite->data[1]; + sprite->data[4] = sprite->pos1.y << 7; + sprite->data[5] = 0xA00 / sprite->data[1]; + sprite->oam.matrixNum = 24; + } + + sprite->callback = sub_80CE798; +} + +void sub_80CE798(struct Sprite* sprite) +{ + sprite->data[2] += sprite->data[3]; + sprite->data[4] += sprite->data[5]; + sprite->pos1.x = sprite->data[2] >> 7; + sprite->pos1.y = sprite->data[4] >> 7; + if (--sprite->data[1] == 1) + { + sprite->pos1.x = sprite->data[6]; + sprite->pos1.y = sprite->data[7]; + } + + if (sprite->data[1] == 0) + move_anim_8072740(sprite); +} diff --git a/src/anim/switch.c b/src/anim/switch.c new file mode 100755 index 000000000..a1be144df --- /dev/null +++ b/src/anim/switch.c @@ -0,0 +1,128 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +extern s8 gUnknown_083D680C[11][3]; + +static void sub_80CBC8C(struct Sprite* sprite); +static void sub_80CBCF8(struct Sprite* sprite); +static void sub_80CBDB0(struct Sprite* sprite); + +// switch (makes an item and circles it from side to side on the field.) +// Used in Trick. + +void sub_80CBBF0(struct Sprite* sprite) +{ + int a; + int b; + + if (sprite->data[0] == 0) + { + if (!NotInBattle()) + { + sprite->data[1] = gBattleAnimArgs[1]; + sprite->pos1.x = 0x78; + } + else + { + a = gBattleAnimArgs[1] - 32; + if (a < 0) + b = gBattleAnimArgs[1] + 0xDF; + else + b = a; + + sprite->data[1] = a - ((b >> 8) << 8); + sprite->pos1.x = 0x46; + } + + sprite->pos1.y = gBattleAnimArgs[0]; + sprite->data[2] = gBattleAnimArgs[0]; + sprite->data[4] = 20; + sprite->pos2.x = Cos(sprite->data[1], 0x3C); + sprite->pos2.y = Sin(sprite->data[1], 20); + sprite->callback = sub_80CBC8C; + if (sprite->data[1] > 0 && sprite->data[1] < 0xC0) + sprite->subpriority = 31; + else + sprite->subpriority = 29; + } +} + +void sub_80CBC8C(struct Sprite* sprite) +{ + switch (sprite->data[3]) + { + case 0: + if (sprite->data[2] > 0x4E) + { + sprite->data[3] = 1; + StartSpriteAffineAnim(sprite, 1); + break; + } + else + { + sprite->data[2] += sprite->data[4] / 10; + sprite->data[4] += 3; + sprite->pos1.y = sprite->data[2]; + break; + } + break; + case 1: + if (sprite->data[3] && sprite->affineAnimEnded) + { + sprite->data[0] = 0; + sprite->data[2] = 0; + sprite->callback = sub_80CBCF8; + } + break; + } +} + +void sub_80CBCF8(struct Sprite* sprite) +{ + if (sprite->data[2] == gUnknown_083D680C[sprite->data[0]][1]) + { + if (gUnknown_083D680C[sprite->data[0]][2] == 0x7F) + { + sprite->data[0] = 0; + sprite->callback = sub_80CBDB0; + } + + sprite->data[2] = 0; + sprite->data[0]++; + } + else + { + sprite->data[2]++; + sprite->data[1] = (gUnknown_083D680C[sprite->data[0]][0] * gUnknown_083D680C[sprite->data[0]][2] + sprite->data[1]) & 0xFF; + if (!NotInBattle()) + { + if ((u16)(sprite->data[1] - 1) <= 0xBE) + { + sprite->subpriority = 31; + } + else + { + sprite->subpriority = 29; + } + } + + sprite->pos2.x = Cos(sprite->data[1], 0x3C); + sprite->pos2.y = Sin(sprite->data[1], 20); + } +} + +void sub_80CBDB0(struct Sprite* sprite) +{ + if (sprite->data[0] > 20) + move_anim_8072740(sprite); + + sprite->invisible = sprite->data[0] % 2; + sprite->data[0]++; +} diff --git a/src/anim/sword.c b/src/anim/sword.c new file mode 100755 index 000000000..536f89b26 --- /dev/null +++ b/src/anim/sword.c @@ -0,0 +1,30 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +static void sub_80CF6B4(struct Sprite* sprite); + +// sword (sword appears and floats upward.) +// Used in Swords Dance. + +void sub_80CF690(struct Sprite* sprite) +{ + sub_80787B0(sprite, 0); + sprite->callback = sub_80785E4; + StoreSpriteCallbackInData(sprite, sub_80CF6B4); +} + +void sub_80CF6B4(struct Sprite* sprite) +{ + sprite->data[0] = 6; + sprite->data[2] = sprite->pos1.x; + sprite->data[4] = sprite->pos1.y - 32; + sprite->callback = sub_8078B34; + StoreSpriteCallbackInData(sprite, move_anim_8072740); +} diff --git a/src/anim/taunt_finger.c b/src/anim/taunt_finger.c new file mode 100755 index 000000000..7024f85a0 --- /dev/null +++ b/src/anim/taunt_finger.c @@ -0,0 +1,56 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +extern void sub_80CEF44(u8 bank, struct Sprite* sprite); +static void sub_80CF228(struct Sprite* sprite); +static void sub_80CF264(struct Sprite* sprite); + +// taunt_finger +// Used in Taunt. + +void sub_80CF1C8(struct Sprite* sprite) +{ + u8 bank; + if (gBattleAnimArgs[0] == 0) + bank = gBattleAnimBankAttacker; + else + bank = gBattleAnimBankTarget; + + sub_80CEF44(bank, sprite); + if (GetBankSide(bank) == 0) + { + StartSpriteAnim(sprite, 0); + sprite->data[0] = 2; + } + else + { + StartSpriteAnim(sprite, 1); + sprite->data[0] = 3; + } + + sprite->callback = sub_80CF228; +} + +void sub_80CF228(struct Sprite* sprite) +{ + if (++sprite->data[1] > 10) + { + sprite->data[1] = 0; + StartSpriteAnim(sprite, sprite->data[0]); + StoreSpriteCallbackInData(sprite, sub_80CF264); + sprite->callback = sub_8078600; + } +} + +void sub_80CF264(struct Sprite* sprite) +{ + if (++sprite->data[1] > 5) + move_anim_8072740(sprite); +} diff --git a/src/anim/tendrils.c b/src/anim/tendrils.c new file mode 100755 index 000000000..ba1014d2f --- /dev/null +++ b/src/anim/tendrils.c @@ -0,0 +1,67 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +static void sub_80CB298(struct Sprite* sprite); +static void sub_80CB2D4(struct Sprite* sprite); + +// tendrils +// Used by Constrict. + +void sub_80CB25C(struct Sprite* sprite) +{ + sub_8078764(sprite, 0); + sprite->affineAnimPaused = 1; + StartSpriteAffineAnim(sprite, gBattleAnimArgs[2]); + sprite->data[6] = gBattleAnimArgs[2]; + sprite->data[7] = gBattleAnimArgs[3]; + sprite->callback = sub_80CB298; +} + +void sub_80CB298(struct Sprite* sprite) +{ + if ((u16)gBattleAnimArgs[7] == 0xFFFF) + { + sprite->affineAnimPaused = 0; + GetAnimBankSpriteId(1); + sprite->data[0] = 0x100; + sprite->callback = sub_80CB2D4; + } +} + +void sub_80CB2D4(struct Sprite* sprite) +{ + GetAnimBankSpriteId(1); + if (!sprite->data[2]) + { + sprite->data[0] += 11; + } + else + { + sprite->data[0] -= 11; + } + sprite->data[1]++; + if (sprite->data[1] == 6) + { + sprite->data[1] = 0; + sprite->data[2] ^= 1; + } + + if (sprite->affineAnimEnded) + { + sprite->data[7]--; + if (sprite->data[7] > 0) + { + StartSpriteAffineAnim(sprite, sprite->data[6]); + } + else + { + move_anim_8072740(sprite); + } + } +} \ No newline at end of file diff --git a/src/anim/thought.c b/src/anim/thought.c new file mode 100755 index 000000000..9cffafe14 --- /dev/null +++ b/src/anim/thought.c @@ -0,0 +1,52 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +static void sub_80CF008(struct Sprite* sprite); + +// thought (thought bubble) +// Used in Metronome and Taunt. + +void sub_80CEF44(u8 bank, struct Sprite* sprite) +{ + if (GetBankSide(bank) == 0) + sprite->pos1.x = sub_807A100(bank, 5) + 8; + else + sprite->pos1.x = sub_807A100(bank, 4) - 8; + + sprite->pos1.y = sub_8077ABC(bank, 3) - (s16)sub_807A100(bank, 0) / 4; +} + +void sub_80CEF9C(struct Sprite* sprite) +{ + u8 a; + u8 bank; + if (gBattleAnimArgs[0] == 0) + bank = gBattleAnimBankAttacker; + else + bank = gBattleAnimBankTarget; + + sub_80CEF44(bank, sprite); + a = (GetBankSide(bank) == 0) ? 0 : 1; + sprite->data[0] = gBattleAnimArgs[1]; + sprite->data[1] = a + 2; + StartSpriteAnim(sprite, a); + StoreSpriteCallbackInData(sprite, sub_80CF008); + sprite->callback = sub_8078600; +} + +void sub_80CF008(struct Sprite* sprite) +{ + if (--sprite->data[0] == 0) + { + StoreSpriteCallbackInData(sprite, move_anim_8072740); + StartSpriteAnim(sprite, sprite->data[1]); + sprite->callback = sub_8078600; + } +} diff --git a/src/anim/thrashing.c b/src/anim/thrashing.c new file mode 100755 index 000000000..9811c546a --- /dev/null +++ b/src/anim/thrashing.c @@ -0,0 +1,111 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +extern struct AffineAnimFrameCmd gUnknown_083D77B0; + +static void sub_80D0A8C(u8 taskId); +static void sub_80D0B3C(u8 taskId); + +// thrashing (the movement of the Pokemon left/right repeatedly, with up/down movements below.) +// Used by Thrash. + +// left/right movements +void sub_80D0A4C(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + u8 spriteId = GetAnimBankSpriteId(0); + task->data[0] = spriteId; + task->data[1] = 0; + sub_80798F4(task, spriteId, &gUnknown_083D77B0); + task->func = sub_80D0A8C; +} + +void sub_80D0A8C(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + if (!sub_807992C(task)) + DestroyAnimVisualTask(taskId); +} + +// up/down movements +void sub_80D0AB8(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + task->data[0] = GetAnimBankSpriteId(0); + task->data[1] = 0; + task->data[2] = 4; + task->data[3] = 7; + task->data[4] = 3; + task->data[5] = gSprites[task->data[0]].pos1.x; + task->data[6] = gSprites[task->data[0]].pos1.y; + task->data[7] = 0; + task->data[8] = 0; + task->data[9] = 2; + if (GetBankSide(gBattleAnimBankAttacker) == 1) + task->data[2] *= -1; + + task->func = sub_80D0B3C; +} + +void sub_80D0B3C(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + if (++task->data[7] > 2) + { + task->data[7] = 0; + task->data[8]++; + if ((task->data[8] & 1) != 0) + { + gSprites[task->data[0]].pos1.y += task->data[9]; + } + else + { + gSprites[task->data[0]].pos1.y -= task->data[9]; + } + } + switch (task->data[1]) + { + case 0: + gSprites[task->data[0]].pos1.x += task->data[2]; + if (--task->data[3] == 0) + { + task->data[3] = 14; + task->data[1] = 1; + } + break; + case 1: + gSprites[task->data[0]].pos1.x -= task->data[2]; + if (--task->data[3] == 0) + { + task->data[3] = 7; + task->data[1] = 2; + } + break; + case 2: + gSprites[task->data[0]].pos1.x += task->data[2]; + if (--task->data[3] == 0) + { + if (--task->data[4] != 0) + { + task->data[3] = 7; + task->data[1] = 0; + } + else + { + if ((task->data[8] & 1) != 0) + { + gSprites[task->data[0]].pos1.y -= task->data[9]; + } + DestroyAnimVisualTask(taskId); + } + } + break; + } +} diff --git a/src/anim/tile_in.c b/src/anim/tile_in.c new file mode 100755 index 000000000..5fcbadbb7 --- /dev/null +++ b/src/anim/tile_in.c @@ -0,0 +1,51 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +// tile_in (flips a white tile from the scene into facing the player.) +// Used in Conversion. + +void sub_80CE09C(struct Sprite* sprite) +{ + if (sprite->data[0] == 0) + { + sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 0) + gBattleAnimArgs[0]; + sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 1) + gBattleAnimArgs[1]; + if (NotInBattle()) + sprite->pos1.y += 10; + sprite->data[0]++; + } + + if ((u16)gBattleAnimArgs[7] == 0xFFFF) + move_anim_8072740(sprite); +} + +void sub_80CE108(u8 taskId) +{ + if (gTasks[taskId].data[2] == 1) + { + gBattleAnimArgs[7] = 0xFFFF; + gTasks[taskId].data[2]++; + } + else if (gTasks[taskId].data[2] == 2) + { + DestroyAnimVisualTask(taskId); + } + else + { + if (++gTasks[taskId].data[0] == 4) + { + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[1]++; + REG_BLDALPHA = (gTasks[taskId].data[1] << 8) | (16 - gTasks[taskId].data[1]); + if (gTasks[taskId].data[1] == 16) + gTasks[taskId].data[2]++; + } + } +} diff --git a/src/anim/tile_out.c b/src/anim/tile_out.c new file mode 100755 index 000000000..8b710268f --- /dev/null +++ b/src/anim/tile_out.c @@ -0,0 +1,81 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" +#include "battle_interface.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +extern u8 gNoOfAllBanks; +extern u8 gHealthboxIDs[]; + +static void sub_80CE1AC(struct Sprite* sprite); + +// tile_out (makes a tile fly inward into a center point.) +// Used in Conversion 2. + +void sub_80CE17C(struct Sprite* sprite) +{ + sub_8078764(sprite, 0); + sprite->animPaused = 1; + sprite->data[0] = gBattleAnimArgs[2]; + sprite->callback = sub_80CE1AC; +} + +void sub_80CE1AC(struct Sprite* sprite) +{ + if (sprite->data[0]) + { + sprite->data[0]--; + } + else + { + sprite->animPaused = 0; + sprite->data[0] = 30; + sprite->data[2] = sub_8077ABC(gBattleAnimBankAttacker, 2); + sprite->data[4] = sub_8077ABC(gBattleAnimBankAttacker, 3); + sprite->callback = sub_8078B34; + StoreSpriteCallbackInData(sprite, move_anim_8072740); + } +} + +void sub_80CE210(u8 taskId) +{ + if (++gTasks[taskId].data[0] == 4) + { + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[1]++; + REG_BLDALPHA = gTasks[taskId].data[1] | ((16 - gTasks[taskId].data[1]) << 8); + if (gTasks[taskId].data[1] == 16) + DestroyAnimVisualTask(taskId); + } +} + +void unref_sub_80CE260(u8 taskId) +{ + u8 i; + for (i = 0; i < gNoOfAllBanks; i++) + { + if (gBattleAnimArgs[0] == 1 && GetBankSide(i) == 0) + sub_8043DB0(gHealthboxIDs[i]); + + if (gBattleAnimArgs[1] == 1 && GetBankSide(i) == 1) + sub_8043DB0(gHealthboxIDs[i]); + } + + DestroyAnimVisualTask(taskId); +} + +void unref_sub_80CE2D4(u8 taskId) +{ + u8 i; + for (i = 0; i < gNoOfAllBanks; i++) + { + sub_8043DFC(gHealthboxIDs[i]); + } + + DestroyAnimVisualTask(taskId); +} diff --git a/src/anim/twinkle.c b/src/anim/twinkle.c new file mode 100755 index 000000000..56095c29d --- /dev/null +++ b/src/anim/twinkle.c @@ -0,0 +1,42 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +static void sub_80CE3B0(struct Sprite* sprite); + +// twinkle (a tiny twinkling star appears above the Pokemon and descends toward the Pokemon.) +// Used in Moonlight. + +void sub_80CE36C(struct Sprite* sprite) +{ + sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 2) + gBattleAnimArgs[0]; + sprite->pos1.y = gBattleAnimArgs[1]; + sprite->data[0] = 0; + sprite->data[1] = 0; + sprite->data[2] = 0; + sprite->data[3] = 0; + sprite->data[4] = 1; + sprite->callback = sub_80CE3B0; +} + +void sub_80CE3B0(struct Sprite* sprite) +{ + if (++sprite->data[1] > 1) + { + sprite->data[1] = 0; + if (sprite->data[2] <= 0x77) + { + sprite->pos1.y++; + sprite->data[2]++; + } + } + + if (sprite->data[0]) + move_anim_8072740(sprite); +} diff --git a/src/anim/unused_1.c b/src/anim/unused_1.c new file mode 100755 index 000000000..fdcef0de9 --- /dev/null +++ b/src/anim/unused_1.c @@ -0,0 +1,25 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +// unused effect file. +// Seems to be a beta effect for Beat Up, possibly. + +void sub_80CC8C8(struct Sprite* sprite) +{ + sprite->pos1.x += gBattleAnimArgs[0]; + sprite->pos1.y += gBattleAnimArgs[1]; + sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[1] = gBattleAnimArgs[3]; + sprite->data[3] = gBattleAnimArgs[4]; + sprite->data[5] = gBattleAnimArgs[5]; + StartSpriteAffineAnim(sprite, gBattleAnimArgs[6]); + StoreSpriteCallbackInData(sprite, move_anim_8074EE0); + sprite->callback = sub_8078504; +} diff --git a/src/anim/unused_2.c b/src/anim/unused_2.c new file mode 100755 index 000000000..f7f5be88d --- /dev/null +++ b/src/anim/unused_2.c @@ -0,0 +1,80 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +static void sub_80CCCB4(struct Sprite* sprite); + +// unused_2 (unknown effect with music notes.) +// possibly another unused effect. Unknown usage. + +void unref_sub_80CCB6C(struct Sprite* sprite) +{ + if (sprite->data[2] > 1) + { + if (sprite->data[3] & 1) + { + sprite->invisible = 0; + gSprites[sprite->data[0]].invisible = 0; + gSprites[sprite->data[1]].invisible = 0; + } + else + { + sprite->invisible = 1; + gSprites[sprite->data[0]].invisible = 1; + gSprites[sprite->data[1]].invisible = 1; + } + + sprite->data[2] = 0; + sprite->data[3]++; + } + else + { + sprite->data[2]++; + } + + if (sprite->data[3] == 10) + { + DestroySprite(&gSprites[sprite->data[0]]); + DestroySprite(&gSprites[sprite->data[1]]); + move_anim_8072740(sprite); + } +} + +void sub_80CCC50(struct Sprite* sprite) +{ + sprite->data[0] = gBattleAnimArgs[2]; + if (GetBankSide(gBattleAnimBankAttacker) != 0) + sprite->pos1.x -= gBattleAnimArgs[0]; + else + sprite->pos1.x += gBattleAnimArgs[0]; + + StartSpriteAnim(sprite, gBattleAnimArgs[5]); + sprite->data[1] = -gBattleAnimArgs[3]; + sprite->pos1.y += gBattleAnimArgs[1]; + sprite->data[3] = gBattleAnimArgs[4]; + sprite->callback = sub_80CCCB4; + sub_80CCCB4(sprite); +} + +void sub_80CCCB4(struct Sprite* sprite) +{ + sprite->pos2.x = Cos(sprite->data[0], 100); + sprite->pos2.y = Sin(sprite->data[0], 20); + if (sprite->data[0] <= 0x7F) + sprite->subpriority = 0; + else + sprite->subpriority = 14; + + sprite->data[0] = (sprite->data[0] + sprite->data[1]) & 0xFF; + sprite->data[5] += 0x82; + sprite->pos2.y += sprite->data[5] >> 8; + sprite->data[2]++; + if (sprite->data[2] == sprite->data[3]) + move_anim_8072740(sprite); +} diff --git a/src/anim/unused_3.c b/src/anim/unused_3.c new file mode 100755 index 000000000..049e0ca1b --- /dev/null +++ b/src/anim/unused_3.c @@ -0,0 +1,45 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +static void sub_80CD2D4(struct Sprite* sprite); + +// unused_3 (seems to be some sort of popping effect with a growing diamond shape) +// yet another unused effect... + +void sub_80CD274(struct Sprite* sprite) +{ + sub_8078650(sprite); + if (GetBankSide(gBattleAnimBankAttacker) == 0) + { + sprite->pos1.x += gBattleAnimArgs[0]; + sprite->pos1.y += gBattleAnimArgs[1]; + } + else + { + sprite->pos1.x -= gBattleAnimArgs[0]; + sprite->pos1.y += gBattleAnimArgs[1]; + StartSpriteAnim(sprite, 1); + } + + sprite->callback = sub_80CD2D4; +} + +void sub_80CD2D4(struct Sprite* sprite) +{ + if (++sprite->data[0] > 30) + { + sprite->pos2.y = (30 - sprite->data[0]) / 3; + sprite->pos2.x = Sin(sprite->data[1] * 4, 3); + sprite->data[1]++; + } + + if (sprite->animEnded) + move_anim_8072740(sprite); +} diff --git a/src/anim/unused_4.c b/src/anim/unused_4.c new file mode 100755 index 000000000..72ecde05c --- /dev/null +++ b/src/anim/unused_4.c @@ -0,0 +1,58 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +extern u8 gObjectBankIDs[]; + +static void sub_80CD9D4(struct Sprite* sprite); + +// unused_4 +// Unknown usage. + +void sub_80CD9C4(struct Sprite* sprite) +{ + sprite->data[0] = 0; + sprite->callback = sub_80CD9D4; +} + +void sub_80CD9D4(struct Sprite* sprite) +{ + switch (sprite->data[0]) + { + case 0: + sprite->data[1] = 0; + sprite->data[2] = gObjectBankIDs[gBattleAnimBankAttacker]; + sprite->data[3] = GetBankSide(gBattleAnimBankAttacker); + sprite->data[4] = (sprite->data[3] != 0) ? 0x200 : -0x200; + sprite->data[5] = 0; + sub_8078E70(sprite->data[2], 0); + sprite->data[0]++; + case 1: + sprite->data[5] += sprite->data[4]; + obj_id_set_rotscale(sprite->data[2], 0x100, 0x100, sprite->data[5]); + sub_8078F9C(sprite->data[2]); + if (++sprite->data[1] > 3) + { + sprite->data[1] = 0; + sprite->data[4] *= -1; + sprite->data[0]++; + } + break; + case 2: + sprite->data[5] += sprite->data[4]; + obj_id_set_rotscale(sprite->data[2], 0x100, 0x100, sprite->data[5]); + sub_8078F9C(sprite->data[2]); + if (++sprite->data[1] > 3) + { + sub_8078F40(sprite->data[2]); + move_anim_8072740(sprite); + } + break; + } +} diff --git a/src/anim/unused_5.c b/src/anim/unused_5.c new file mode 100755 index 000000000..4dc2da70d --- /dev/null +++ b/src/anim/unused_5.c @@ -0,0 +1,25 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +// unused_5 + +void sub_80CF280(struct Sprite* sprite) +{ + sub_8078650(sprite); + sub_807867C(sprite, gBattleAnimArgs[0]); + sprite->pos1.y += gBattleAnimArgs[1]; + sprite->data[1] = gBattleAnimArgs[2]; + sprite->data[2] = gBattleAnimArgs[4]; + sprite->data[3] = gBattleAnimArgs[5]; + sprite->data[4] = gBattleAnimArgs[3]; + StoreSpriteCallbackInData(sprite, move_anim_8074EE0); + sprite->callback = sub_8078278; + sub_8078278(sprite); +} diff --git a/src/anim/unused_6.c b/src/anim/unused_6.c new file mode 100755 index 000000000..f7c87647f --- /dev/null +++ b/src/anim/unused_6.c @@ -0,0 +1,49 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +extern void sub_80CEF44(u8 bank, struct Sprite* sprite); +static void sub_80CF310(struct Sprite* sprite); + +// unused_6 + +void sub_80CF2D0(struct Sprite* sprite) +{ + u8 bank; + if (gBattleAnimArgs[0] == 0) + bank = gBattleAnimBankAttacker; + else + bank = gBattleAnimBankTarget; + + sub_80CEF44(bank, sprite); + sprite->data[0] = 0; + sprite->data[1] = 0; + sprite->callback = sub_80CF310; +} + +void sub_80CF310(struct Sprite* sprite) +{ + switch (sprite->data[0]) + { + case 0: + sprite->pos2.y -= 3; + if (++sprite->data[1] == 6) + sprite->data[0]++; + break; + case 1: + sprite->pos2.y += 3; + if (--sprite->data[1] == 0) + sprite->data[0]++; + break; + case 2: + if (++sprite->data[1] == 0x40) + move_anim_8072740(sprite); + break; + } +} diff --git a/src/anim/unused_7.c b/src/anim/unused_7.c new file mode 100755 index 000000000..3a8998f1d --- /dev/null +++ b/src/anim/unused_7.c @@ -0,0 +1,51 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +extern u8 gObjectBankIDs[]; + +// unused_7 + +void sub_80CF374(struct Sprite* sprite) +{ + s16 temp; + gSprites[sprite->data[2]].pos2.x += sprite->data[1]; + temp = sprite->data[1]; + sprite->data[1] = -temp; + if (sprite->data[0] == 0) + { + gSprites[sprite->data[2]].pos2.x = 0; + move_anim_8074EE0(sprite); + } + + sprite->data[0]--; +} + +void sub_80CF3C4(struct Sprite* sprite) +{ + u8 a; + sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 2); + sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 3); + a = gObjectBankIDs[gBattleAnimBankTarget]; + if (GetBankSide(gBattleAnimBankAttacker) != 0) + { + sprite->pos1.x -= gBattleAnimArgs[0]; + } + else + { + sprite->pos1.x += gBattleAnimArgs[0]; + } + + sprite->pos1.y += gBattleAnimArgs[1]; + sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[1] = gBattleAnimArgs[3]; + sprite->data[2] = a; + sprite->callback = sub_80CF374; + sprite->invisible = 1; +} diff --git a/src/anim/unused_8.c b/src/anim/unused_8.c new file mode 100755 index 000000000..bcebfcd2b --- /dev/null +++ b/src/anim/unused_8.c @@ -0,0 +1,41 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +static void sub_80CF490(struct Sprite* sprite); +static void sub_80CF4B8(struct Sprite* sprite); + +// unused_8 + +void sub_80CF458(struct Sprite* sprite) +{ + sub_80787B0(sprite, 1); + sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[1] = gBattleAnimArgs[3]; + sprite->data[5] = gBattleAnimArgs[4]; + sprite->callback = sub_80782D8; + StoreSpriteCallbackInData(sprite, sub_80CF490); +} + +void sub_80CF490(struct Sprite* sprite) +{ + sprite->data[0] = sprite->data[1]; + sprite->data[2] = sprite->pos1.x; + sprite->data[4] = sprite->pos1.y + 15; + sprite->callback = sub_8078B34; + StoreSpriteCallbackInData(sprite, sub_80CF4B8); +} + +void sub_80CF4B8(struct Sprite* sprite) +{ + if (sprite->data[5] == 0) + move_anim_8072740(sprite); + else + sprite->data[5]--; +} diff --git a/src/anim/unused_9.c b/src/anim/unused_9.c new file mode 100755 index 000000000..579238fbc --- /dev/null +++ b/src/anim/unused_9.c @@ -0,0 +1,113 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +extern struct SpriteTemplate gSpriteTemplate_83D75AC; + +static void sub_80CFE2C(struct Sprite* sprite); + +// unused_9? (Most likely an unused effect.) +// I cannot find any reference to this sprite template used to call this. + +void sub_80CFDFC(struct Sprite* sprite) +{ + sub_80787B0(sprite, 0); + sprite->data[0] = 0x100 + (IndexOfSpritePaletteTag(gSpriteTemplate_83D75AC.paletteTag) << 4); + sprite->callback = sub_80CFE2C; +} + +#ifdef NONMATCHING +void sub_80CFE2C(struct Sprite* sprite) +{ + u16 r7; + u16* r1; + u16* r2; + int i; + if (++sprite->data[1] == 2) + { + sprite->data[1] = 0; + r7 = gPlttBufferFaded[sprite->data[0] + 8]; + r2 = &gPlttBufferFaded[0x10]; + r1 = &gPlttBufferFaded[sprite->data[0] + 9]; + for (i = 7; i >= 0; i--) + { + *r2 = *r1; + r1++; + r2++; + } + + gPlttBufferFaded[sprite->data[0] + 15] = r7; + if (++sprite->data[2] == 0x18) + move_anim_8072740(sprite); + } +} +#else +__attribute__((naked)) +void sub_80CFE2C(struct Sprite* sprite) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + adds r4, r0, 0\n\ + ldrh r0, [r4, 0x30]\n\ + adds r0, 0x1\n\ + strh r0, [r4, 0x30]\n\ + lsls r0, 16\n\ + asrs r0, 16\n\ + cmp r0, 0x2\n\ + bne _080CFE90\n\ + movs r0, 0\n\ + strh r0, [r4, 0x30]\n\ + ldrh r5, [r4, 0x2E]\n\ + ldr r1, _080CFE98 @ =gPlttBufferFaded\n\ + adds r0, r5, 0\n\ + adds r0, 0x8\n\ + lsls r0, 1\n\ + adds r0, r1\n\ + ldrh r7, [r0]\n\ + adds r6, r1, 0 @puts gPlttBufferFaded in r6\n\ + adds r1, r5, 0\n\ + adds r1, 0x9\n\ + lsls r0, r5, 1\n\ + adds r0, r6 \n\ + adds r2, r0, 0\n\ + adds r2, 0x10\n\ + movs r3, 0x7\n\ + lsls r1, 1\n\ + adds r1, r6 \n\ +_080CFE64:\n\ + ldrh r0, [r1]\n\ + strh r0, [r2]\n\ + adds r1, 0x2\n\ + adds r2, 0x2\n\ + subs r3, 0x1\n\ + cmp r3, 0\n\ + bge _080CFE64\n\ + adds r0, r5, 0\n\ + adds r0, 0xF\n\ + lsls r0, 1\n\ + adds r0, r6\n\ + strh r7, [r0]\n\ + ldrh r0, [r4, 0x32]\n\ + adds r0, 0x1\n\ + strh r0, [r4, 0x32]\n\ + lsls r0, 16\n\ + asrs r0, 16\n\ + cmp r0, 0x18\n\ + bne _080CFE90\n\ + adds r0, r4, 0\n\ + bl move_anim_8072740\n\ +_080CFE90:\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_080CFE98: .4byte gPlttBufferFaded\n\ +.syntax divided\n"); +} +#endif diff --git a/src/anim/wave_finger.c b/src/anim/wave_finger.c new file mode 100755 index 000000000..58f0f8778 --- /dev/null +++ b/src/anim/wave_finger.c @@ -0,0 +1,39 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +extern void sub_80CEF44(u8 bank, struct Sprite* sprite); +void sub_80CF088(struct Sprite* sprite); + +// wave_finger +// Used by Metronome. + +void sub_80CF040(struct Sprite* sprite) +{ + u8 bank; + if (gBattleAnimArgs[0] == 0) + bank = gBattleAnimBankAttacker; + else + bank = gBattleAnimBankTarget; + + sub_80CEF44(bank, sprite); + sprite->data[0] = 0; + StoreSpriteCallbackInData(sprite, sub_80CF088); + sprite->callback = sub_80785E4; +} + +void sub_80CF088(struct Sprite* sprite) +{ + if (++sprite->data[0] > 16) + { + StartSpriteAffineAnim(sprite, 1); + StoreSpriteCallbackInData(sprite, move_anim_8074EE0); + sprite->callback = sub_80785E4; + } +} diff --git a/src/anim/whip.c b/src/anim/whip.c new file mode 100755 index 000000000..3aa0758a9 --- /dev/null +++ b/src/anim/whip.c @@ -0,0 +1,46 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +// whip (does a hitting animation that uses a rotating sprite to invoke the sprite getting hit.) +// Used by Slam and Vine Whip. + +void sub_80CC810(struct Sprite* sprite) +{ + if (sprite->animEnded) + move_anim_8072740(sprite); +} + +// unused, beta effect for diagonal sprite movement? +void sub_80CC82C(struct Sprite* sprite) +{ + if (GetBankSide(gBattleAnimBankAttacker) != 0) + { + sprite->pos1.x -= gBattleAnimArgs[0]; + sprite->pos1.y += gBattleAnimArgs[1]; + } + else + { + sprite->pos1.x += gBattleAnimArgs[0]; + sprite->pos1.y += gBattleAnimArgs[1]; + } + + sprite->callback = sub_8078600; + StoreSpriteCallbackInData(sprite, move_anim_8072740); +} + +void sub_80CC884(struct Sprite* sprite) +{ + if (GetBankSide(gBattleAnimBankAttacker) == 0) + StartSpriteAnim(sprite, 1); + + sprite->callback = sub_80CC810; + sub_807867C(sprite, gBattleAnimArgs[0]); + sprite->pos1.y += gBattleAnimArgs[1]; +} diff --git a/src/anim/withdraw.c b/src/anim/withdraw.c new file mode 100755 index 000000000..9abcff32d --- /dev/null +++ b/src/anim/withdraw.c @@ -0,0 +1,69 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +extern u8 gObjectBankIDs[]; + +static void sub_80CF514(u8 taskId); + +// withdraw (where a Pokemon leans inward to mimic the effect of withdrawing into a shell.) +// Used in Withdraw. + +void sub_80CF4D8(u8 taskId) +{ + sub_8078E70(gObjectBankIDs[gBattleAnimBankAttacker], 0); + gTasks[taskId].func = sub_80CF514; +} + +void sub_80CF514(u8 taskId) +{ + u8 a = gObjectBankIDs[gBattleAnimBankAttacker]; + s16 b; + if (GetBankSide(gBattleAnimBankAttacker) == 0) + { + b = -gTasks[taskId].data[0]; + } + else + { + b = gTasks[taskId].data[0]; + } + + obj_id_set_rotscale(a, 0x100, 0x100, b); + if (gTasks[taskId].data[1] == 0) + { + gTasks[taskId].data[0] += 0xB0; + gSprites[a].pos2.y++; + } + else if (gTasks[taskId].data[1] == 1) + { + if (++gTasks[taskId].data[3] == 0x1E) + gTasks[taskId].data[1] = 2; + + return; + } + else + { + gTasks[taskId].data[0] -= 0xB0; + gSprites[a].pos2.y--; + } + + sub_8078F9C(a); + if (gTasks[taskId].data[0] == 0xF20 || gTasks[taskId].data[0] == 0) + { + if (gTasks[taskId].data[1] == 2) + { + sub_8078F40(a); + DestroyAnimVisualTask(taskId); + } + else + { + gTasks[taskId].data[1]++; + } + } +} diff --git a/src/battle_anim_80CA710.c b/src/battle_anim_80CA710.c deleted file mode 100755 index 6e4907888..000000000 --- a/src/battle_anim_80CA710.c +++ /dev/null @@ -1,6258 +0,0 @@ -#include "global.h" -#include "battle.h" -#include "battle_anim.h" -#include "battle_anim_80CA710.h" -#include "battle_interface.h" -#include "blend_palette.h" -#include "decompress.h" -#include "ewram.h" -#include "main.h" -#include "palette.h" -#include "rng.h" -#include "rom_8077ABC.h" -#include "songs.h" -#include "sound.h" -#include "sprite.h" -#include "task.h" -#include "trig.h" -#include "unknown_task.h" - -struct Struct_sub_8078914 -{ - u8 *field_0; - u8 *field_4; - u8 field_8; -}; - -extern u8 gBanksBySide[]; -extern s16 gBattleAnimArgs[8]; -extern u8 gBattleAnimBankAttacker; -extern u8 gBattleAnimBankTarget; -extern struct SpriteTemplate gSpriteTemplate_83D631C; -extern struct SpriteTemplate gSpriteTemplate_83D6884; -extern struct SpriteTemplate gSpriteTemplate_83D74BC; -extern struct SpriteTemplate gSpriteTemplate_83D75AC; -extern struct SpriteTemplate gSpriteTemplate_83D79E8; -extern struct SpriteTemplate gBattleAnimSpriteTemplate_83D6FC8; -extern struct SpriteTemplate gBattleAnimSpriteTemplate_83D6FF8; -extern struct AffineAnimFrameCmd gUnknown_083D76F4; -extern struct AffineAnimFrameCmd gUnknown_083D7714; -extern struct AffineAnimFrameCmd gUnknown_083D77B0; -extern struct AffineAnimFrameCmd gUnknown_083D79BC; -extern struct AffineAnimFrameCmd gUnknown_083D7A98; -extern struct INCBIN_U8 gBattleAnimSpritePalette_206; -extern struct INCBIN_U8 gAttractTilemap; -extern struct INCBIN_U8 gAttractGfx; -extern struct INCBIN_U8 gAttractPal; -extern struct INCBIN_U8 gBattleAnimBackgroundTilemap_ScaryFaceContest; -extern struct INCBIN_U8 gBattleAnimBackgroundTilemap_ScaryFacePlayer; -extern struct INCBIN_U8 gBattleAnimBackgroundTilemap_ScaryFaceOpponent; -extern struct INCBIN_U8 gBattleAnimBackgroundImage_ScaryFace; -extern struct INCBIN_U8 gBattleAnimBackgroundPalette_ScaryFace; -extern s16 gUnknown_03000728[]; -extern s8 gUnknown_083D680C[11][3]; -extern u16 gUnknown_083D6984[]; -extern s8 gUnknown_083D6DDC[4][2]; -extern u8 gObjectBankIDs[]; -extern u8 gNoOfAllBanks; -extern u8 gHealthboxIDs[]; -extern u16 gUnknown_083D712C[4][6]; -extern u16 gBattleTypeFlags; -extern u16 gUnknown_030042C0; -extern u16 gUnknown_03004288; -extern u16 gUnknown_030042C4; -extern u16 gUnknown_03004240; -extern u16 gUnknown_030041B4; -extern s8 gUnknown_083D7A00[4][2]; -extern u16 gUnknown_083D7A5C[5]; - -static void sub_80CA768(struct Sprite* sprite); -static void sub_80CA8B4(struct Sprite* sprite); -static void sub_80CA9F8(struct Sprite* sprite); -static void sub_80CAACC(struct Sprite* sprite); -static void sub_80CAB88(struct Sprite* sprite); -static void sub_80CABC0(struct Sprite* sprite); -static void sub_80CAC44(struct Sprite* sprite); -static void sub_80CADA8(struct Sprite* sprite); -static void sub_80CAE74(struct Sprite* sprite); -static void sub_80CAF20(struct Sprite* sprite); -static void sub_80CAF6C(struct Sprite* sprite); -static void sub_80CB09C(struct Sprite* sprite); -static void sub_80CB1A4(struct Sprite* sprite); -static void sub_80CB298(struct Sprite* sprite); -static void sub_80CB2D4(struct Sprite* sprite); -static void sub_80CB710(struct Sprite* sprite); -static void sub_80CBB60(struct Sprite* sprite); -static void sub_80CBC8C(struct Sprite* sprite); -static void sub_80CBCF8(struct Sprite* sprite); -static void sub_80CBDB0(struct Sprite* sprite); -static void sub_80CC408(struct Sprite* sprite); -static void sub_80CC580(struct Sprite* sprite); -static void sub_80CC7D4(struct Sprite* sprite); -static void sub_80CCB00(struct Sprite* sprite); -static void sub_80CCCB4(struct Sprite* sprite); -static void sub_80CCE0C(struct Sprite* sprite); -static void sub_80CCF70(struct Sprite* sprite); -static void sub_80CD0CC(struct Sprite* sprite, int unk1, int unk2); -static void sub_80CD2D4(struct Sprite* sprite); -static void sub_80CD394(struct Sprite* sprite); -static void sub_80CD408(struct Sprite* sprite); -static void sub_80CD4B8(struct Sprite* sprite); -static void sub_80CD4EC(struct Sprite* sprite); -static void sub_80CD5A8(struct Sprite* sprite); -static void sub_80CD654(struct Sprite* sprite); -static void sub_80CD67C(struct Sprite* sprite); -static void sub_80CD7CC(struct Sprite* sprite); -static void sub_80CD81C(struct Sprite* sprite); -static void sub_80CD8A8(struct Sprite* sprite); -static void sub_80CD8F8(struct Sprite* sprite); -static void sub_80CD91C(struct Sprite* sprite); -static void sub_80CD9B8(struct Sprite* sprite); -static void sub_80CD9D4(struct Sprite* sprite); -static void sub_80CDE78(struct Sprite* sprite); -static void sub_80CDEB0(struct Sprite* sprite); -static void sub_80CDEC0(struct Sprite* sprite); -static void sub_80CDF70(struct Sprite* sprite); -static void sub_80CE000(struct Sprite* sprite); -static void sub_80CE1AC(struct Sprite* sprite); -static void sub_80CE354(struct Sprite* sprite); -static void sub_80CE3B0(struct Sprite* sprite); -static void sub_80CE798(struct Sprite* sprite); -static void sub_80CE974(struct Sprite* sprite); -static void sub_80CEC1C(struct Sprite* sprite); -static void sub_80CED78(struct Sprite* sprite); -static void sub_80CEEE8(struct Sprite* sprite); -static void sub_80CF008(struct Sprite* sprite); -static void sub_80CF088(struct Sprite* sprite); -static void sub_80CF138(struct Sprite* sprite); -static void sub_80CF158(struct Sprite* sprite); -static void sub_80CF228(struct Sprite* sprite); -static void sub_80CF264(struct Sprite* sprite); -static void sub_80CF310(struct Sprite* sprite); -static void sub_80CF490(struct Sprite* sprite); -static void sub_80CF4B8(struct Sprite* sprite); -static void sub_80CF6B4(struct Sprite* sprite); -static void sub_80CFE2C(struct Sprite* sprite); -static void sub_80CFF68(struct Sprite* sprite); -static void sub_80D0030(struct Sprite* sprite); -static void sub_80D00B4(struct Sprite* sprite); -static void sub_80D020C(struct Sprite* sprite); -static void sub_80D02D0(struct Sprite* sprite); -static void sub_80D0344(struct Sprite* sprite); -static void sub_80D03A8(struct Sprite* sprite); -extern void sub_80D0704(struct Sprite* sprite); -static void sub_80D0E8C(struct Sprite* sprite); -static void sub_80D1098(struct Sprite* sprite); -static void sub_80D13AC(struct Sprite* sprite); -static void sub_80D1424(struct Sprite* sprite); -static void sub_80D144C(struct Sprite* sprite); -static void sub_80D14C4(struct Sprite* sprite); -static void sub_80D1504(struct Sprite* sprite); -static void sub_80D154C(struct Sprite* sprite); -static void sub_80D158C(struct Sprite* sprite); -static void sub_80D1FA4(struct Sprite* sprite); -static void sub_80D2094(struct Sprite* sprite); -static void sub_80D2704(struct Sprite* sprite); -static void sub_80D2834(struct Sprite* sprite); -static s16 sub_80CC338(struct Sprite* sprite); -static void sub_80CB3A8(u8 taskId); -static void sub_80CB438(u8 taskId); -static void sub_80CBF5C(u8 taskId); -static void sub_80CDB60(u8 taskId); -static void sub_80CDD20(u8 taskId); -static void sub_80CE4D4(u8 taskId); -static void sub_80CE910(u8 taskId); -static void sub_80CF514(u8 taskId); -static void sub_80D0428(u8 taskId); -static void sub_80D04E0(u8 taskId); -static void sub_80D07AC(u8 taskId); -static void sub_80D0904(u8 taskId); -static void sub_80D0A8C(u8 taskId); -static void sub_80D0B3C(u8 taskId); -static void sub_80D0D68(u8 taskId); -static void sub_80D15E0(u8 taskId); -static void sub_80D16A0(u8 taskId); -static void sub_80D1808(u8 taskId); -static void sub_80D1930(u8 taskId); -static void sub_80D1D48(u8 taskId); -static void sub_80D1D9C(u8 taskId); -static void sub_80D21F0(u8 taskId); -static void sub_80D24E0(u8 taskId); -static void sub_80CC358(struct Task* task, u8 taskId); -extern void sub_80D0614(struct Task* task, u8 taskId); -static void sub_80CEBC4(s16 a, s16 b, s16* c, s16* d, s8 e); - - -void sub_80CA710(struct Sprite* sprite) -{ - sprite->pos1.x += gBattleAnimArgs[0]; - sprite->pos1.y += gBattleAnimArgs[1]; - sprite->data[0] = gBattleAnimArgs[2]; - sprite->data[1] = gBattleAnimArgs[3]; - - if (GetBankSide(gBattleAnimBankAttacker)) - { - sprite->data[3] = -gBattleAnimArgs[4]; - } - else - { - sprite->data[3] = gBattleAnimArgs[4]; - } - - sprite->data[4] = gBattleAnimArgs[5]; - sprite->callback = sub_80CA768; -} - -void sub_80CA768(struct Sprite* sprite) -{ - if (sprite->data[0] > 0) - { - sprite->data[0]--; - sprite->pos2.y = sprite->data[2] >> 8; - sprite->data[2] += sprite->data[1]; - sprite->pos2.x = Sin(sprite->data[5], sprite->data[3]); - sprite->data[5] = (sprite->data[5] + sprite->data[4]) & 0xFF; - } - else - { - move_anim_8072740(sprite); - } -} - -void sub_80CA7B0(struct Sprite* sprite) -{ - sub_80787B0(sprite, 1); - sprite->data[0] = gBattleAnimArgs[2]; - sprite->data[2] = sub_8077ABC(gBattleAnimBankAttacker, 2); - sprite->data[4] = sub_8077ABC(gBattleAnimBankAttacker, 3); - sprite->callback = sub_8078B34; - StoreSpriteCallbackInData(sprite, move_anim_8074EE0); -} - -void sub_80CA800(struct Sprite* sprite) -{ - sub_80787B0(sprite, 1); - StartSpriteAnim(sprite, gBattleAnimArgs[3]); - sprite->data[0] = gBattleAnimArgs[2]; - sprite->data[2] = sub_8077ABC(gBattleAnimBankTarget, 2); - sprite->data[4] = sub_8077ABC(gBattleAnimBankTarget, 3); - sprite->callback = sub_8078B34; - StoreSpriteCallbackInData(sprite, move_anim_8072740); -} - -void sub_80CA858(struct Sprite* sprite) -{ - sub_80787B0(sprite, 1); - sprite->data[0] = gBattleAnimArgs[2]; - sprite->data[1] = sprite->pos1.x; - sprite->data[2] = sub_8077ABC(gBattleAnimBankTarget, 2); - sprite->data[3] = sprite->pos1.y; - sprite->data[4] = sub_8077ABC(gBattleAnimBankTarget, 3); - obj_translate_based_on_private_1_2_3_4(sprite); - sprite->data[5] = gBattleAnimArgs[3]; - sprite->callback = sub_80CA8B4; - sub_80CA8B4(sprite); -} - -void sub_80CA8B4(struct Sprite* sprite) -{ - if (sub_8078B5C(sprite)) - { - DestroySprite(sprite); - } - else - { - if (sprite->data[5] > 0x7F) - { - sprite->subpriority = sub_8079E90(gBattleAnimBankTarget) + 1; - } - else - { - sprite->subpriority = sub_8079E90(gBattleAnimBankTarget) + 6; - } - sprite->pos2.x += Sin(sprite->data[5], 5); - sprite->pos2.y += Cos(sprite->data[5], 14); - sprite->data[5] = (sprite->data[5] + 15) & 0xFF; - } -} - -void sub_80CA928(u8 taskId) -{ - gTasks[taskId].data[0]--; - if (gTasks[taskId].data[0] == -1) - { - gTasks[taskId].data[1]++; - gTasks[taskId].data[0] = 6; - gBattleAnimArgs[0] = 15; - gBattleAnimArgs[1] = 0; - gBattleAnimArgs[2] = 80; - gBattleAnimArgs[3] = 0; - CreateSpriteAndAnimate(&gSpriteTemplate_83D631C, 0, 0, sub_8079E90(gBattleAnimBankTarget) + 1); - } - - if (gTasks[taskId].data[1] == 15) - DestroyAnimVisualTask(taskId); -} - -void sub_80CA9A8(struct Sprite* sprite) -{ - sub_8078764(sprite, 1); - sprite->data[0] = gBattleAnimArgs[3]; - sprite->data[2] = sub_8077ABC(gBattleAnimBankAttacker, 2); - sprite->data[4] = sub_8077ABC(gBattleAnimBankAttacker, 3); - sprite->data[5] = gBattleAnimArgs[2]; - sub_80786EC(sprite); - sprite->callback = sub_80CA9F8; -} - -void sub_80CA9F8(struct Sprite* sprite) -{ - if (sub_8078718(sprite)) - move_anim_8072740(sprite); -} - -void sub_80CAA14(struct Sprite* sprite) -{ - u16 a = Random(); - u16 b; - - StartSpriteAnim(sprite, a & 7); - sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 2); - sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 3); - if (GetBankSide(gBattleAnimBankAttacker)) - { - sprite->pos1.x -= 20; - } - else - { - sprite->pos1.x += 20; - } - - b = Random(); - sprite->data[0] = (b & 31) + 64; - sprite->data[1] = sprite->pos1.x; - sprite->data[2] = sub_8077ABC(gBattleAnimBankTarget, 2); - sprite->data[3] = sprite->pos1.y; - sprite->data[4] = sub_8077ABC(gBattleAnimBankTarget, 3); - sub_8078D60(sprite); - sprite->data[5] = Random() & 0xFF; - sprite->data[6] = sprite->subpriority; - sprite->callback = sub_80CAACC; - sub_80CAACC(sprite); -} - -void sub_80CAACC(struct Sprite* sprite) -{ - if (sub_8078CE8(sprite)) - { - move_anim_8072740(sprite); - } - else - { - sprite->pos2.y += Cos(sprite->data[5], 12); - if (sprite->data[5] <= 0x7E) - { - sprite->subpriority = sprite->data[6]; - } - else - { - sprite->subpriority = sprite->data[6] + 1; - } - - sprite->data[5] = (sprite->data[5] + 24) & 0xFF; - } -} - -void sub_80CAB18(struct Sprite* sprite) -{ - sub_80787B0(sprite, 1); - if (GetBankSide(gBattleAnimBankAttacker)) - { - gBattleAnimArgs[2] = -gBattleAnimArgs[2]; - } - - sprite->data[0] = gBattleAnimArgs[4]; - sprite->data[2] = sub_8077ABC(gBattleAnimBankTarget, 0) + gBattleAnimArgs[2]; - sprite->data[4] = sub_8077ABC(gBattleAnimBankTarget, 1) + gBattleAnimArgs[3]; - sprite->data[5] = gBattleAnimArgs[5]; - sub_80786EC(sprite); - sprite->callback = sub_80CAB88; -} - -void sub_80CAB88(struct Sprite* sprite) -{ - if (sub_8078718(sprite)) - { - sprite->invisible = 1; - sprite->data[0] = 10; - sprite->callback = sub_80782D8; - StoreSpriteCallbackInData(sprite, sub_80CABC0); - } -} - -void sub_80CABC0(struct Sprite* sprite) -{ - sprite->invisible = 0; - StartSpriteAnim(sprite, 1); - sprite->data[0] = 60; - sprite->callback = sub_80782D8; - StoreSpriteCallbackInData(sprite, move_anim_8072740); -} - -void sub_80CABF8(struct Sprite* sprite) -{ - sub_8078764(sprite, 1); - StartSpriteAnim(sprite, gBattleAnimArgs[4]); - if (gBattleAnimArgs[4] == 1) - { - sprite->oam.objMode = 1; - } - - sprite->data[0] = gBattleAnimArgs[3]; - sprite->data[1] = gBattleAnimArgs[2]; - sprite->callback = sub_80CAC44; - sub_80CAC44(sprite); -} - -void sub_80CAC44(struct Sprite* sprite) -{ - u8 var1; - - sprite->pos2.x = Sin(sprite->data[1], 32); - sprite->pos2.y = Cos(sprite->data[1], -3) + ((sprite->data[2] += 24) >> 8); - if ((u16)(sprite->data[1] - 0x40) < 0x80) - { - sprite->oam.priority = (sub_8079ED4(gBattleAnimBankTarget) & 3); - } - else - { - var1 = sub_8079ED4(gBattleAnimBankTarget) + 1; - if (var1 > 3) - { - var1 = 3; - } - - sprite->oam.priority = var1; - } - - sprite->data[1] = (sprite->data[1] + 2) & 0xFF; - sprite->data[0]--; - if (sprite->data[0] == -1) - move_anim_8072740(sprite); -} - -void sub_80CACEC(u8 taskId) -{ - if (NotInBattle() || !IsDoubleBattle()) - { - DestroyAnimVisualTask(taskId); - } - else - { - if (GetBankIdentity_permutated(gBattleAnimBankTarget) == 1) - { - REG_BG2CNT_BITFIELD.priority = 3; - } - else - { - REG_BG1CNT_BITFIELD.priority = 1; - } - - DestroyAnimVisualTask(taskId); - } -} - -void sub_80CAD54(struct Sprite* sprite) -{ - sub_80787B0(sprite, 0); - sprite->data[0] = gBattleAnimArgs[3]; - sprite->data[1] = sprite->pos1.x; - sprite->data[2] = sprite->pos1.x; - sprite->data[3] = sprite->pos1.y; - sprite->data[4] = sub_8077ABC(gBattleAnimBankAttacker, 3) + gBattleAnimArgs[2]; - obj_translate_based_on_private_1_2_3_4(sprite); - sprite->data[5] = 0x40; - sprite->callback = sub_80CADA8; - sub_80CADA8(sprite); -} - -void sub_80CADA8(struct Sprite* sprite) -{ - if (!sub_8078B5C(sprite)) - { - sprite->pos2.x += Sin(sprite->data[5], 32); - sprite->pos2.y += Cos(sprite->data[5], -5); - if ((u16)(sprite->data[5] - 0x40) < 0x80) - { - sprite->subpriority = sub_8079E90(gBattleAnimBankAttacker) - 1; - } - else - { - sprite->subpriority = sub_8079E90(gBattleAnimBankAttacker) + 1; - } - - sprite->data[5] = (sprite->data[5] + 5) & 0xFF; - } - else - { - move_anim_8072740(sprite); - } -} - -void sub_80CAE20(struct Sprite* sprite) -{ - sub_80787B0(sprite, 1); - sprite->data[0] = gBattleAnimArgs[3]; - sprite->data[1] = sprite->pos1.x; - sprite->data[2] = sprite->pos1.x; - sprite->data[3] = sprite->pos1.y; - sprite->data[4] = sub_8077ABC(gBattleAnimBankAttacker, 3) + gBattleAnimArgs[2]; - obj_translate_based_on_private_1_2_3_4(sprite); - sprite->data[5] = 0x40; - sprite->callback = sub_80CAE74; - sub_80CAE74(sprite); -} - -void sub_80CAE74(struct Sprite* sprite) -{ - if (!sub_8078B5C(sprite)) - { - sprite->pos2.x += Sin(sprite->data[5], 8); - if ((u16)(sprite->data[5] - 0x3B) < 5 || (u16)(sprite->data[5] - 0xBB) < 5) - { - sprite->oam.matrixNum ^= 8; - } - - sprite->data[5] = (sprite->data[5] + 5) & 0xFF; - } - else - { - move_anim_8072740(sprite); - } -} - -void sub_80CAED8(struct Sprite* sprite) -{ - sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 2); - sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 3); - sprite->data[0] = gBattleAnimArgs[0]; - sprite->data[1] = gBattleAnimArgs[1]; - sprite->data[2] = gBattleAnimArgs[2]; - sprite->callback = sub_80CAF20; -} - -void sub_80CAF20(struct Sprite* sprite) -{ - if (!sprite->data[2]) - { - if (sprite->data[1] & 1) - { - sprite->data[0] = 0x80; - sprite->data[1] = 0; - sprite->data[2] = 0; - } - else - { - sprite->data[0] = sprite->data[1] & 1; - sprite->data[1] = sprite->data[1] & 1; - sprite->data[2] = sprite->data[1] & 1; - } - sprite->callback = sub_80CAF6C; - } - else - { - sprite->data[2]--; - sprite->pos1.x += sprite->data[0]; - sprite->pos1.y += sprite->data[1]; - } -} - -void sub_80CAF6C(struct Sprite* sprite) -{ - if (GetBankSide(gBattleAnimBankAttacker)) - { - sprite->pos2.x = -Sin(sprite->data[0], 0x19); - } - else - { - sprite->pos2.x = Sin(sprite->data[0], 0x19); - } - - sprite->data[0] = (sprite->data[0] + 2) & 0xFF; - sprite->data[1]++; - if (!(sprite->data[1] & 1)) - { - sprite->pos2.y++; - } - - if (sprite->data[1] > 0x50) - { - move_anim_8072740(sprite); - } -} - -void sub_80CAFD0(struct Sprite* sprite) -{ - sub_80787B0(sprite, 1); - if (GetBankSide(gBattleAnimBankAttacker)) - { - gBattleAnimArgs[2] = -gBattleAnimArgs[2]; - } - - sprite->data[0] = gBattleAnimArgs[4]; - if (!(gBattleAnimArgs[6])) - { - sprite->data[2] = sub_8077ABC(gBattleAnimBankTarget, 2) + gBattleAnimArgs[2]; - sprite->data[4] = sub_8077ABC(gBattleAnimBankTarget, 3) + gBattleAnimArgs[3]; - } - else - { - sub_807A3FC(gBattleAnimBankTarget, 1, &sprite->data[2], &sprite->data[4]); - sprite->data[2] += gBattleAnimArgs[2]; - sprite->data[4] += gBattleAnimArgs[3]; - } - - sprite->data[5] = gBattleAnimArgs[5]; - sub_80786EC(sprite); - if (GetBankSide(gBattleAnimBankAttacker) == GetBankSide(gBattleAnimBankTarget)) - { - sprite->data[0] = 1; - } - else - { - sprite->data[0] = 0; - } - - sprite->callback = sub_80CB09C; -} - -void sub_80CB09C(struct Sprite* sprite) -{ - bool8 c = FALSE; - s16 a = sprite->data[0]; - s16 b = sprite->data[7]; - s16 r0; - - sprite->data[0] = 1; - sub_8078718(sprite); - r0 = sprite->data[7]; - sprite->data[0] = a; - if (b > 0xC8 && r0 <= 0x37 && sprite->oam.affineParam == 0) - sprite->oam.affineParam++; - - if (sprite->oam.affineParam != 0 && sprite->data[0] != 0) - { - sprite->invisible ^= 1; - sprite->oam.affineParam++; - if (sprite->oam.affineParam == 0x1E) - c = TRUE; - } - - if (sprite->pos1.x + sprite->pos2.x > 0x100 - || sprite->pos1.x + sprite->pos2.x < -16 - || sprite->pos1.y + sprite->pos2.y > 0xA0 - || sprite->pos1.y + sprite->pos2.y < -16) - c = TRUE; - - if (c) - move_anim_8072740(sprite); -} - -void sub_80CB144(struct Sprite* sprite) -{ - if (!NotInBattle() && IsDoubleBattle() == TRUE) - { - sub_807A3FC(gBattleAnimBankTarget, 1, &sprite->pos1.x, &sprite->pos1.y); - } - - sprite->pos1.y += 32; - sprite->data[0] = gBattleAnimArgs[0]; - sprite->data[1] = gBattleAnimArgs[1]; - sprite->data[2] = gBattleAnimArgs[2]; - sprite->data[3] = gBattleAnimArgs[3]; - sprite->data[4] = gBattleAnimArgs[4]; - sprite->callback = sub_80CB1A4; -} - -void sub_80CB1A4(struct Sprite* sprite) -{ - if (sprite->data[1] == 0xFF) - { - sprite->pos1.y -= 2; - } - else if (sprite->data[1] > 0) - { - sprite->pos1.y -= 2; - sprite->data[1] -= 2; - } - - sprite->data[5] += sprite->data[2]; - if (sprite->data[0] < sprite->data[4]) - sprite->data[5] += sprite->data[2]; - - sprite->data[5] &= 0xFF; - sprite->pos2.x = Cos(sprite->data[5], sprite->data[3]); - sprite->pos2.y = Sin(sprite->data[5], 5); - if (sprite->data[5] <= 0x7F) - { - sprite->oam.priority = sub_8079ED4(gBattleAnimBankTarget) - 1; - } - else - { - sprite->oam.priority = sub_8079ED4(gBattleAnimBankTarget) + 1; - } - - sprite->data[0]--; - if (!sprite->data[0]) - move_anim_8072740(sprite); -} - -void sub_80CB25C(struct Sprite* sprite) -{ - sub_8078764(sprite, 0); - sprite->affineAnimPaused = 1; - StartSpriteAffineAnim(sprite, gBattleAnimArgs[2]); - sprite->data[6] = gBattleAnimArgs[2]; - sprite->data[7] = gBattleAnimArgs[3]; - sprite->callback = sub_80CB298; -} - -void sub_80CB298(struct Sprite* sprite) -{ - if ((u16)gBattleAnimArgs[7] == 0xFFFF) - { - sprite->affineAnimPaused = 0; - GetAnimBankSpriteId(1); - sprite->data[0] = 0x100; - sprite->callback = sub_80CB2D4; - } -} - -void sub_80CB2D4(struct Sprite* sprite) -{ - GetAnimBankSpriteId(1); - if (!sprite->data[2]) - { - sprite->data[0] += 11; - } - else - { - sprite->data[0] -= 11; - } - sprite->data[1]++; - if (sprite->data[1] == 6) - { - sprite->data[1] = 0; - sprite->data[2] ^= 1; - } - - if (sprite->affineAnimEnded) - { - sprite->data[7]--; - if (sprite->data[7] > 0) - { - StartSpriteAffineAnim(sprite, sprite->data[6]); - } - else - { - move_anim_8072740(sprite); - } - } -} - -void sub_80CB340(u8 taskId) -{ - u8 spriteId = GetAnimBankSpriteId(1); - if (gSprites[spriteId].invisible) - { - DestroyAnimVisualTask(taskId); - } - else - { - sub_8078E70(spriteId, 1); - gTasks[taskId].data[0] = gBattleAnimArgs[0]; - gTasks[taskId].data[1] = gBattleAnimArgs[1]; - gTasks[taskId].data[11] = 256; - gTasks[taskId].func = sub_80CB3A8; - } -} - -void sub_80CB3A8(u8 taskId) -{ - u8 spriteId = GetAnimBankSpriteId(1); - gTasks[taskId].data[10] += gTasks[taskId].data[0]; - gSprites[spriteId].pos2.x = gTasks[taskId].data[10] >> 8; - if (GetBankSide(gBattleAnimBankTarget)) - { - gSprites[spriteId].pos2.x = -gSprites[spriteId].pos2.x; - } - - gTasks[taskId].data[11] += 16; - obj_id_set_rotscale(spriteId, gTasks[taskId].data[11], gTasks[taskId].data[11], 0); - sub_8079A64(spriteId); - gTasks[taskId].data[1]--; - if (!gTasks[taskId].data[1]) - { - gTasks[taskId].data[0] = 0; - gTasks[taskId].func = sub_80CB438; - } -} - -void sub_80CB438(u8 taskId) -{ - if ((u16)gBattleAnimArgs[7] == 0xFFFF) - { - if (gTasks[taskId].data[0] == 0) - { - u8 spriteId = GetAnimBankSpriteId(1); - sub_8078F40(spriteId); - gSprites[spriteId].pos2.x = 0; - gSprites[spriteId].pos2.y = 0; - gTasks[taskId].data[0]++; - return; - } - } - else - { - if (gTasks[taskId].data[0] == 0) - return; - } - - gTasks[taskId].data[0]++; - if (gTasks[taskId].data[0] == 3) - DestroyAnimVisualTask(taskId); -} - -void sub_80CB4CC(struct Sprite* sprite) -{ - switch (sprite->data[0]) - { - case 0: - { - if (GetBankSide(gBattleAnimBankTarget) == 0) - { - s16 a = gBattleAnimArgs[0]; - gBattleAnimArgs[0] = -a; - } - - sprite->pos1.x = sub_8077ABC(gBattleAnimBankTarget, 0) + gBattleAnimArgs[0]; - sprite->pos1.y = sub_8077ABC(gBattleAnimBankTarget, 1) + gBattleAnimArgs[1]; - sprite->invisible = 1; - sprite->data[0]++; - break; - } - case 1: - { - sprite->invisible = 0; - if (sprite->affineAnimEnded) - { - ChangeSpriteAffineAnim(sprite, 1); - sprite->data[0] = 25; - sprite->data[2] = sub_8077ABC(gBattleAnimBankAttacker, 2); - sprite->data[4] = sub_8077ABC(gBattleAnimBankAttacker, 3); - sprite->callback = sub_8078CC0; - StoreSpriteCallbackInData(sprite, move_anim_8072740); - break; - } - } - } -} - -void sub_80CB59C(struct Sprite* sprite) -{ - if (!sprite->data[0]) - { - sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 2); - sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 1); - sprite->pos2.x = gBattleAnimArgs[0]; - sprite->pos2.y = gBattleAnimArgs[1]; - sprite->subpriority = gBattleAnimArgs[2] + 30; - StartSpriteAnim(sprite, gBattleAnimArgs[3]); - sprite->data[2] = gBattleAnimArgs[4]; - sprite->data[0]++; - if ((sprite->pos1.y + sprite->pos2.y) > 120) - { - sprite->pos1.y += -120 + (sprite->pos2.y + sprite->pos1.y); - } - } - sprite->callback = sub_80CB710; -} - -void sub_80CB620(struct Sprite *sprite) -{ - s16 p1 = sub_8077ABC(gBattleAnimBankAttacker, 2); - s16 p2 = sub_8077ABC(gBattleAnimBankAttacker, 3); - s16 e1 = sub_8077ABC(gBattleAnimBankTarget, 2); - s16 e2 = sub_8077ABC(gBattleAnimBankTarget, 3); - - e1 -= p1; - e2 -= p2; - sprite->pos1.x = p1 + e1 * gBattleAnimArgs[0] / 100; - sprite->pos1.y = p2 + e2 * gBattleAnimArgs[0] / 100; - sprite->pos2.x = gBattleAnimArgs[1]; - sprite->pos2.y = gBattleAnimArgs[2]; - sprite->subpriority = gBattleAnimArgs[3] + 30; - StartSpriteAnim(sprite, gBattleAnimArgs[4]); - sprite->data[2] = gBattleAnimArgs[5]; - sprite->callback = sub_80CB710; - gUnknown_03000728[0] = sprite->pos1.x; - gUnknown_03000728[1] = sprite->pos1.y; - gUnknown_03000728[2] = e1; - gUnknown_03000728[3] = e2; -} - -void sub_80CB710(struct Sprite* sprite) -{ - if (++sprite->data[0] > (sprite->data[2] - 10)) - sprite->invisible = sprite->data[0] % 2; - - if (sprite->data[0] > sprite->data[2]) - move_anim_8072740(sprite); -} - -void sub_80CB768(struct Sprite* sprite) -{ - if (!sprite->data[0]) - { - sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 2) + gBattleAnimArgs[0]; - sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 1) + gBattleAnimArgs[1]; - sprite->data[1] = gBattleAnimArgs[2]; - sprite->data[2] = gBattleAnimArgs[3]; - sprite->data[3] = gBattleAnimArgs[4]; - } - - sprite->data[0]++; - sprite->pos2.x = sprite->data[1] * sprite->data[0]; - sprite->pos2.y = Sin((sprite->data[0] * 20) & 0xFF, sprite->data[2]); - if (sprite->data[0] > sprite->data[3]) - move_anim_8072740(sprite); -} - -void sub_80CB7EC(struct Sprite* sprite, s16 c) -{ - s32 a = (sprite->pos1.x * 256) | sprite->pos1.y; - s32 b = (sprite->data[6] * 256) | sprite->data[7]; - c *= 256; - sprite->data[5] = a; - sprite->data[6] = b; - sprite->data[7] = c; -} - -bool8 sub_80CB814(struct Sprite* sprite) -{ - u16 r10 = (u8)(sprite->data[5] >> 8); - u16 r9 = (u8)sprite->data[5]; - s32 r2 = (u8)(sprite->data[6] >> 8); - s32 r4 = (u8)sprite->data[6]; - s16 r6 = sprite->data[7] >> 8; - s16 r3 = sprite->data[7] & 0xFF; - s16 r4_2; - s16 r0; - s32 var1; - s32 var2; - - if (r2 == 0) - { - r2 = -32; - } - else if (r2 == 255) - { - r2 = 0x110; - } - - r4_2 = r4 - r9; - r0 = r2 - r10; - var1 = r0 * r3 / r6; - var2 = r4_2 * r3 / r6; - sprite->pos1.x = var1 + r10; - sprite->pos1.y = var2 + r9; - if (++r3 == r6) - return TRUE; - - sprite->data[7] = (r6 << 8) | r3; - return FALSE; -} - -void sub_80CB8B8(struct Sprite* sprite) -{ - if (sprite->data[0] == 10) - { - StartSpriteAffineAnim(sprite, 1); - } - - sprite->data[0]++; - if (sprite->data[0] > 50) - { - move_anim_8072740(sprite); - } -} - -void sub_80CB8E8(struct Sprite* sprite) -{ - sprite->data[0] += sprite->data[3] * 128 / sprite->data[4]; - if (sprite->data[0] >= 128) - { - sprite->data[1]++; - sprite->data[0] = 0; - } - - sprite->pos2.y = Sin(sprite->data[0] + 128, 30 - sprite->data[1] * 8); - if (sub_80CB814(sprite)) - { - sprite->pos2.y = 0; - sprite->data[0] = 0; - sprite->callback = sub_80CB8B8; - } -} - -void sub_80CB94C(struct Sprite* sprite) -{ - s16 e1; - s16 e2; - sub_80787B0(sprite, 0); - e1 = sub_8077ABC(gBattleAnimBankTarget, 0); - e2 = sub_8077ABC(gBattleAnimBankTarget, 1); - if ((gBattleAnimBankAttacker ^ 2) == gBattleAnimBankTarget) - { - sprite->data[6] = e1; - sprite->data[7] = e2 + 10; - sub_80CB7EC(sprite, 0x3C); - sprite->data[3] = 1; - } - else - { - sprite->data[6] = e1; - sprite->data[7] = e2 + 10; - sub_80CB7EC(sprite, 0x3C); - sprite->data[3] = 3; - } - - sprite->data[4] = 0x3C; - sprite->callback = sub_80CB8E8; -} - -void sub_80CB9C4(struct Sprite* sprite) -{ - int zero; - sprite->data[0] += ((sprite->data[3] * 128) / sprite->data[4]); - zero = 0; - if (sprite->data[0] > 0x7F) - { - sprite->data[1]++; - sprite->data[0] = zero; - } - - sprite->pos2.y = Sin(sprite->data[0] + 0x80, 30 - sprite->data[1] * 8); - if (sub_80CB814(sprite)) - { - sprite->pos2.y = zero; - sprite->data[0] = zero; - move_anim_8072740(sprite); - } -} - -void sub_80CBA28(struct Sprite* sprite) -{ - s16 e = sub_8077ABC(gBattleAnimBankTarget, 1); - if (GetBankSide(gBattleAnimBankTarget) == 0) - { - sprite->data[6] = 0; - sprite->data[7] = e + 10; - sub_80CB7EC(sprite, 0x28); - sprite->data[3] = 3; - sprite->data[4] = 0x3C; - sprite->callback = sub_80CB8E8; - } - else - { - sprite->data[6] = 255; - sprite->data[7] = e + 10; - if (NotInBattle()) - sprite->data[6] = 0; - - sub_80CB7EC(sprite, 0x28); - sprite->data[3] = 3; - sprite->data[4] = 0x3C; - sprite->callback = sub_80CB9C4; - } -} - -void sub_80CBAA4(struct Sprite* sprite) -{ - if (sprite->data[0] == 0) - { - sub_8078764(sprite, 0); - sprite->data[1] = gBattleAnimArgs[2]; - } - - sprite->data[0]++; - sprite->pos2.y = sprite->data[1] * sprite->data[0]; - if (sprite->animEnded) - { - move_anim_8072740(sprite); - } -} - -void sub_80CBAE8(struct Sprite* sprite) -{ - s16 p1; - s16 p2; - sub_8078764(sprite, 0); - p1 = sub_8077ABC(gBattleAnimBankAttacker, 0); - p2 = sub_8077ABC(gBattleAnimBankAttacker, 1); - if ((gBattleAnimBankTarget ^ 2) == gBattleAnimBankAttacker) - { - sprite->data[6] = p1; - sprite->data[7] = p2 + 10; - sub_80CB7EC(sprite, 0x3c); - sprite->data[3] = 1; - } - else - { - sprite->data[6] = p1; - sprite->data[7] = p2 + 10; - sub_80CB7EC(sprite, 0x3c); - sprite->data[3] = 3; - } - - sprite->data[4] = 0x3C; - sprite->callback = sub_80CBB60; -} - -void sub_80CBB60(struct Sprite* sprite) -{ - int zero; - sprite->data[0] += ((sprite->data[3] * 128) / sprite->data[4]); - zero = 0; - if (sprite->data[0] > 0x7F) - { - sprite->data[1]++; - sprite->data[0] = zero; - } - - sprite->pos2.y = Sin(sprite->data[0] + 0x80, 30 - sprite->data[1] * 8); - if (sprite->pos2.y == 0) - { - PlaySE12WithPanning(0x7D, sub_8076F98(0x3F)); - } - - if (sub_80CB814(sprite)) - { - sprite->pos2.y = 0; - sprite->data[0] = 0; - sprite->callback = sub_80CB8B8; - PlaySE12WithPanning(0x7D, sub_8076F98(-0x40)); - } -} - -void sub_80CBBF0(struct Sprite* sprite) -{ - int a; - int b; - - if (sprite->data[0] == 0) - { - if (!NotInBattle()) - { - sprite->data[1] = gBattleAnimArgs[1]; - sprite->pos1.x = 0x78; - } - else - { - a = gBattleAnimArgs[1] - 32; - if (a < 0) - b = gBattleAnimArgs[1] + 0xDF; - else - b = a; - - sprite->data[1] = a - ((b >> 8) << 8); - sprite->pos1.x = 0x46; - } - - sprite->pos1.y = gBattleAnimArgs[0]; - sprite->data[2] = gBattleAnimArgs[0]; - sprite->data[4] = 20; - sprite->pos2.x = Cos(sprite->data[1], 0x3C); - sprite->pos2.y = Sin(sprite->data[1], 20); - sprite->callback = sub_80CBC8C; - if (sprite->data[1] > 0 && sprite->data[1] < 0xC0) - sprite->subpriority = 31; - else - sprite->subpriority = 29; - } -} - -void sub_80CBC8C(struct Sprite* sprite) -{ - switch (sprite->data[3]) - { - case 0: - if (sprite->data[2] > 0x4E) - { - sprite->data[3] = 1; - StartSpriteAffineAnim(sprite, 1); - break; - } - else - { - sprite->data[2] += sprite->data[4] / 10; - sprite->data[4] += 3; - sprite->pos1.y = sprite->data[2]; - break; - } - break; - case 1: - if (sprite->data[3] && sprite->affineAnimEnded) - { - sprite->data[0] = 0; - sprite->data[2] = 0; - sprite->callback = sub_80CBCF8; - } - break; - } -} - - - -void sub_80CBCF8(struct Sprite* sprite) -{ - if (sprite->data[2] == gUnknown_083D680C[sprite->data[0]][1]) - { - if (gUnknown_083D680C[sprite->data[0]][2] == 0x7F) - { - sprite->data[0] = 0; - sprite->callback = sub_80CBDB0; - } - - sprite->data[2] = 0; - sprite->data[0]++; - } - else - { - sprite->data[2]++; - sprite->data[1] = (gUnknown_083D680C[sprite->data[0]][0] * gUnknown_083D680C[sprite->data[0]][2] + sprite->data[1]) & 0xFF; - if (!NotInBattle()) - { - if ((u16)(sprite->data[1] - 1) <= 0xBE) - { - sprite->subpriority = 31; - } - else - { - sprite->subpriority = 29; - } - } - - sprite->pos2.x = Cos(sprite->data[1], 0x3C); - sprite->pos2.y = Sin(sprite->data[1], 20); - } -} - -void sub_80CBDB0(struct Sprite* sprite) -{ - if (sprite->data[0] > 20) - move_anim_8072740(sprite); - - sprite->invisible = sprite->data[0] % 2; - sprite->data[0]++; -} - -void sub_80CBDF4(u8 taskId) -{ - struct Task *task = &gTasks[taskId]; - - task->data[4] = sub_8079E90(gBattleAnimBankTarget) - 1; - task->data[6] = sub_8077ABC(gBattleAnimBankTarget, 2); - task->data[7] = sub_8077ABC(gBattleAnimBankTarget, 3); - task->data[10] = sub_807A100(gBattleAnimBankTarget, 1); - task->data[11] = sub_807A100(gBattleAnimBankTarget, 0); - task->data[5] = (GetBankSide(gBattleAnimBankTarget) == 1) ? 1 : -1; - task->data[9] = 0x38 - (task->data[5] * 64); - task->data[8] = task->data[7] - task->data[9] + task->data[6]; - task->data[2] = CreateSprite(&gSpriteTemplate_83D6884, task->data[8], task->data[9], task->data[4]); - if (task->data[2] == 0x40) - DestroyAnimVisualTask(taskId); - - gSprites[task->data[2]].data[0] = 10; - gSprites[task->data[2]].data[1] = task->data[8]; - gSprites[task->data[2]].data[2] = task->data[6] - (task->data[10] / 2 + 10) * task->data[5]; - gSprites[task->data[2]].data[3] = task->data[9]; - gSprites[task->data[2]].data[4] = task->data[7] + (task->data[11] / 2 + 10) * task->data[5]; - gSprites[task->data[2]].data[5] = sub_80CC338(&gSprites[task->data[2]]); - sub_80786EC(&gSprites[task->data[2]]); - task->func = sub_80CBF5C; -} - -void sub_80CBF5C(u8 taskId) -{ - struct Task* task = &gTasks[taskId]; - struct Sprite* sprite = &gSprites[task->data[2]]; - int a = task->data[0]; - switch (a) - { - case 4: - sub_80CC358(task, taskId); - if (sub_8078718(sprite) == 0) - { - break; - } - else - { - task->data[15] = 5; - task->data[0] = 0xFF; - } - break; - case 8: - sub_80CC358(task, taskId); - if (sub_8078718(sprite) == 0) - { - break; - } - else - { - task->data[15] = 9; - task->data[0] = 0xFF; - } - break; - case 0: - sub_80CC358(task, taskId); - if (sub_8078718(sprite) == 0) - break; - - task->data[15] = 1; - task->data[0] = 0xFF; - break; - case 1: - sprite->pos1.x += sprite->pos2.x; - sprite->pos1.y += sprite->pos2.y; - sprite->pos2.x = 0; - sprite->pos2.y = 0; - sprite->data[0] = 10; - sprite->data[1] = sprite->pos1.x; - sprite->data[2] = task->data[6]; - sprite->data[3] = sprite->pos1.y; - sprite->data[4] = task->data[7]; - sprite->data[5] = sub_80CC338(sprite); - task->data[4] += 2; - task->data[3] = a; - sprite->subpriority = task->data[4]; - StartSpriteAnim(sprite, task->data[3]); - sub_80786EC(sprite); - task->data[0]++; - break; - case 2: - sub_80CC358(task, taskId); - if (sub_8078718(sprite) == 0) - break; - - task->data[15] = 3; - task->data[0] = 0xFF; - break; - case 3: - sprite->pos1.x += sprite->pos2.x; - sprite->pos1.y += sprite->pos2.y; - sprite->pos2.x = 0; - sprite->pos2.y = 0; - sprite->data[0] = 10; - sprite->data[1] = sprite->pos1.x; - sprite->data[2] = task->data[6] - ((task->data[10] / 2) + 10) * task->data[5]; - sprite->data[3] = sprite->pos1.y; - sprite->data[4] = task->data[7] - ((task->data[11] / 2) + 10) * task->data[5]; - sprite->data[5] = sub_80CC338(sprite); - task->data[3] = 2; - sprite->subpriority = task->data[4]; - StartSpriteAnim(sprite, task->data[3]); - sub_80786EC(sprite); - task->data[0]++; - break; - case 5: - sprite->pos1.x += sprite->pos2.x; - sprite->pos1.y += sprite->pos2.y; - sprite->pos2.x = 0; - sprite->pos2.y = 0; - sprite->data[0] = 10; - sprite->data[1] = sprite->pos1.x; - sprite->data[2] = task->data[6] + ((task->data[10] / 2) + 10) * task->data[5]; - sprite->data[3] = sprite->pos1.y; - sprite->data[4] = task->data[7] + ((task->data[11] / 2) + 10) * task->data[5]; - sprite->data[5] = sub_80CC338(sprite); - task->data[4] -= 2; - task->data[3] = 3; - sprite->subpriority = task->data[4]; - StartSpriteAnim(sprite, task->data[3]); - sub_80786EC(sprite); - task->data[0]++; - break; - case 6: - sub_80CC358(task, taskId); - if (sub_8078718(sprite) == 0) - break; - - task->data[15] = 7; - task->data[0] = 0xFF; - break; - case 7: - sprite->pos1.x += sprite->pos2.x; - sprite->pos1.y += sprite->pos2.y; - sprite->pos2.x = 0; - sprite->pos2.y = 0; - sprite->data[0] = 10; - sprite->data[1] = sprite->pos1.x; - sprite->data[2] = task->data[6]; - sprite->data[3] = sprite->pos1.y; - sprite->data[4] = task->data[7]; - sprite->data[5] = sub_80CC338(sprite); - task->data[4] += 2; - task->data[3] = 4; - sprite->subpriority = task->data[4]; - StartSpriteAnim(sprite, task->data[3]); - sub_80786EC(sprite); - task->data[0]++; - break; - case 9: - sprite->pos1.x += sprite->pos2.x; - sprite->pos1.y += sprite->pos2.y; - sprite->pos2.x = 0; - sprite->pos2.y = 0; - sprite->data[0] = 10; - sprite->data[1] = sprite->pos1.x; - sprite->data[2] = task->data[6] - ((task->data[10] / 2) + 10) * task->data[5]; - sprite->data[3] = sprite->pos1.y; - sprite->data[4] = task->data[7] + ((task->data[11] / 2) + 10) * task->data[5]; - sprite->data[5] = sub_80CC338(sprite); - task->data[3] = 5; - sprite->subpriority = task->data[4]; - StartSpriteAnim(sprite, task->data[3]); - sub_80786EC(sprite); - task->data[0]++; - break; - case 10: - sub_80CC358(task, taskId); - if (sub_8078718(sprite) == 0) - { - break; - } - else - { - task->data[15] = 11; - task->data[0] = 0xFF; - } - break; - case 11: - { - sprite->pos1.x += sprite->pos2.x; - sprite->pos1.y += sprite->pos2.y; - sprite->pos2.x = 0; - sprite->pos2.y = 0; - sprite->data[0] = 10; - sprite->data[1] = sprite->pos1.x; - sprite->data[2] = task->data[8]; - sprite->data[3] = sprite->pos1.y; - sprite->data[4] = task->data[9]; - sprite->data[5] = sub_80CC338(sprite); - task->data[4] -= 2; - task->data[3] = 6; - sprite->subpriority = task->data[4]; - StartSpriteAnim(sprite, task->data[3]); - sub_80786EC(sprite); - task->data[0]++; - break; - } - case 12: - sub_80CC358(task, taskId); - if (sub_8078718(sprite) != 0) - { - DestroySprite(sprite); - task->data[0]++; - } - break; - case 13: - if (task->data[12] == 0) - { - DestroyAnimVisualTask(taskId); - } - break; - case 255: - task->data[1]++; - if (task->data[1] > 5) - { - task->data[1] = 0; - task->data[0] = task->data[15]; - } - break; - } -} - -s16 sub_80CC338(struct Sprite* sprite) -{ - s16 var = 8; - if (sprite->data[4] < sprite->pos1.y) - var = -var; - - return var; -} - -void sub_80CC358(struct Task* task, u8 taskId) -{ - task->data[14]++; - if (task->data[14] > 0) - { - u8 spriteId; - s16 spriteX; - s16 spriteY; - task->data[14] = 0; - spriteX = gSprites[task->data[2]].pos1.x + gSprites[task->data[2]].pos2.x; - spriteY = gSprites[task->data[2]].pos1.y + gSprites[task->data[2]].pos2.y; - spriteId = CreateSprite(&gSpriteTemplate_83D6884, spriteX, spriteY, task->data[4]); - if (spriteId != 0x40) - { - gSprites[spriteId].data[6] = taskId; - gSprites[spriteId].data[7] = 12; - gTasks[taskId].data[12]++; - gSprites[spriteId].data[0] = task->data[13] & 1; - gTasks[taskId].data[13]++; - StartSpriteAnim(&gSprites[spriteId], task->data[3]); - gSprites[spriteId].subpriority = task->data[4]; - gSprites[spriteId].callback = sub_80CC408; - } - } -} - -void sub_80CC408(struct Sprite* sprite) -{ - sprite->data[0]++; - if (sprite->data[0] > 1) - { - sprite->data[0] = 0; - sprite->invisible ^= 1; - sprite->data[1]++; - if (sprite->data[1] > 8) - { - gTasks[sprite->data[6]].data[sprite->data[7]]--; - DestroySprite(sprite); - } - } -} - -void sub_80CC474(struct Sprite* sprite) -{ - u8 bank; - if (!gBattleAnimArgs[6]) - bank = gBattleAnimBankAttacker; - else - bank = gBattleAnimBankTarget; - - if (GetBankSide(bank) != 0) - { - sprite->data[4] = 0; - sprite->data[2] = gBattleAnimArgs[3]; - sprite->pos1.x = 0xFFF0; - } - else - { - sprite->data[4] = 1; - sprite->data[2] = -gBattleAnimArgs[3]; - sprite->pos1.x = 0x100; - } - - sprite->data[1] = gBattleAnimArgs[1]; - sprite->data[0] = gBattleAnimArgs[2]; - sprite->data[3] = gBattleAnimArgs[4]; - switch (gBattleAnimArgs[5]) - { - case 0: - sprite->pos1.y = gBattleAnimArgs[0]; - sprite->oam.priority = sub_8079ED4(bank); - break; - case 1: - sprite->pos1.y = gBattleAnimArgs[0]; - sprite->oam.priority = sub_8079ED4(bank) + 1; - break; - case 2: - sprite->pos1.y = sub_8077ABC(bank, 3) + gBattleAnimArgs[0]; - sprite->oam.priority = sub_8079ED4(bank); - break; - case 3: - sprite->pos1.y = sub_8077ABC(gBattleAnimBankTarget, 3) + gBattleAnimArgs[0]; - GetAnimBankSpriteId(1); - sprite->oam.priority = sub_8079ED4(bank) + 1; - break; - } - - sprite->callback = sub_80CC580; -} - -void sub_80CC580(struct Sprite* sprite) -{ - int a = sprite->data[7]; - sprite->data[7]++; - sprite->pos2.y = (sprite->data[1] * gSineTable[sprite->data[0]]) >> 8; - sprite->pos2.x = sprite->data[2] * a; - sprite->data[0] = (sprite->data[3] * a) & 0xFF; - if (sprite->data[4] == 0) - { - if (sprite->pos2.x + sprite->pos1.x <= 0xF7) - return; - } - else - { - if (sprite->pos2.x + sprite->pos1.x > -16) - return; - } - - move_anim_8074EE0(sprite); -} - -void sub_80CC5F8(u8 taskId) -{ - struct Task* task = &gTasks[taskId]; - switch (task->data[0]) - { - case 0: - task->data[8] = IndexOfSpritePaletteTag(0x274f) * 16 + 256; - task->data[12] = IndexOfSpritePaletteTag(0x27b0) * 16 + 256; - task->data[0]++; - break; - case 1: - task->data[9]++; - if (task->data[9] >= 0) - { - task->data[9] = 0; - BlendPalette(task->data[8], 0x10, task->data[10], gUnknown_083D6984[task->data[11]]); - BlendPalette(task->data[12], 0x10, task->data[10], gUnknown_083D6984[task->data[11]]); - task->data[10]++; - if (task->data[10] == 17) - { - task->data[10] = 0; - task->data[11]++; - if (task->data[11] == 7) - task->data[11] = 0; - } - } - break; - } - - if (gBattleAnimArgs[7] == -1) - DestroyAnimVisualTask(taskId); -} - -void sub_80CC6CC(struct Sprite* sprite) -{ - u8 a; - u8 b; - u16 c; - u16 x; - u16 y; - - if (gBattleAnimArgs[4] == 0) - { - move_anim_8072740(sprite); - } - else - { - if (gBattleAnimArgs[0] == 0) - { - a = sub_8077ABC(gBattleAnimBankAttacker, 2); - b = sub_8077ABC(gBattleAnimBankAttacker, 3); - } - else - { - a = sub_8077ABC(gBattleAnimBankTarget, 2); - b = sub_8077ABC(gBattleAnimBankTarget, 3); - } - - sprite->data[0] = gBattleAnimArgs[4]; - if (gBattleAnimArgs[1] == 0) - { - sprite->pos1.x = gBattleAnimArgs[2] + a; - sprite->pos1.y = gBattleAnimArgs[3] + b; - sprite->data[5] = a; - sprite->data[6] = b; - } - else - { - sprite->pos1.x = a; - sprite->pos1.y = b; - sprite->data[5] = gBattleAnimArgs[2] + a; - sprite->data[6] = gBattleAnimArgs[3] + b; - } - - x = sprite->pos1.x; - sprite->data[1] = x * 16; - y = sprite->pos1.y; - sprite->data[2] = y * 16; - sprite->data[3] = (sprite->data[5] - sprite->pos1.x) * 16 / gBattleAnimArgs[4]; - sprite->data[4] = (sprite->data[6] - sprite->pos1.y) * 16 / gBattleAnimArgs[4]; - c = sub_80790F0(sprite->data[5] - x, sprite->data[6] - y); - if (NotInBattle()) - c -= 0x8000; - - sub_8078FDC(sprite, 0, 0x100, 0x100, c); - sprite->callback = sub_80CC7D4; - } -} - -void sub_80CC7D4(struct Sprite* sprite) -{ - if (sprite->data[0]) - { - sprite->data[1] += sprite->data[3]; - sprite->data[2] += sprite->data[4]; - sprite->pos1.x = sprite->data[1] >> 4 ; - sprite->pos1.y = sprite->data[2] >> 4 ; - sprite->data[0]--; - } - else - { - move_anim_8074EE0(sprite); - } -} - -void sub_80CC810(struct Sprite* sprite) -{ - if (sprite->animEnded) - move_anim_8072740(sprite); -} - -void sub_80CC82C(struct Sprite* sprite) -{ - if (GetBankSide(gBattleAnimBankAttacker) != 0) - { - sprite->pos1.x -= gBattleAnimArgs[0]; - sprite->pos1.y += gBattleAnimArgs[1]; - } - else - { - sprite->pos1.x += gBattleAnimArgs[0]; - sprite->pos1.y += gBattleAnimArgs[1]; - } - - sprite->callback = sub_8078600; - StoreSpriteCallbackInData(sprite, move_anim_8072740); -} - -void sub_80CC884(struct Sprite* sprite) -{ - if (GetBankSide(gBattleAnimBankAttacker) == 0) - StartSpriteAnim(sprite, 1); - - sprite->callback = sub_80CC810; - sub_807867C(sprite, gBattleAnimArgs[0]); - sprite->pos1.y += gBattleAnimArgs[1]; -} - -void sub_80CC8C8(struct Sprite* sprite) -{ - sprite->pos1.x += gBattleAnimArgs[0]; - sprite->pos1.y += gBattleAnimArgs[1]; - sprite->data[0] = gBattleAnimArgs[2]; - sprite->data[1] = gBattleAnimArgs[3]; - sprite->data[3] = gBattleAnimArgs[4]; - sprite->data[5] = gBattleAnimArgs[5]; - StartSpriteAffineAnim(sprite, gBattleAnimArgs[6]); - StoreSpriteCallbackInData(sprite, move_anim_8074EE0); - sprite->callback = sub_8078504; -} - -void sub_80CC914(struct Sprite* sprite) -{ - sprite->pos1.x = sub_8077ABC(gBattleAnimBankTarget, 0); - sprite->pos1.y = sub_8077ABC(gBattleAnimBankTarget, 1); - if (GetBankSide(gBattleAnimBankTarget) == 0) - sprite->pos1.y += 8; - - sprite->callback = sub_80CCB00; - if (gBattleAnimArgs[2] == 0) - { - sprite->pos1.x += gBattleAnimArgs[0]; - } - else - { - sprite->pos1.x -= gBattleAnimArgs[0]; - sprite->hFlip = 1; - } - - sprite->pos1.y += gBattleAnimArgs[1]; - sprite->data[1] -= 0x400; - sprite->data[2] += 0x400; - sprite->data[5] = gBattleAnimArgs[2]; - if (sprite->data[5] == 1) - sprite->data[1] = -sprite->data[1]; -} - -void sub_80CC9BC(struct Sprite* sprite) -{ - u8 a; - u8 b; - switch (gBattleAnimArgs[3]) - { - case 1: - a = sub_8077ABC(gBattleAnimBankTarget ^ 2, 0); - b = sub_8077ABC(gBattleAnimBankTarget ^ 2, 1); - break; - case 2: - a = sub_8077ABC(gBattleAnimBankTarget, 0); - b = sub_8077ABC(gBattleAnimBankTarget, 1); - if (IsAnimBankSpriteVisible(gBattleAnimBankTarget ^ 2)) - { - a = (sub_8077ABC(gBattleAnimBankTarget ^ 2, 0) + a) / 2; - b = (sub_8077ABC(gBattleAnimBankTarget ^ 2, 1) + b) / 2; - } - break; - case 0: - default: - a = sub_8077ABC(gBattleAnimBankTarget, 0); - b = sub_8077ABC(gBattleAnimBankTarget, 1); - break; - } - - sprite->pos1.x = a; - sprite->pos1.y = b; - if (GetBankSide(gBattleAnimBankTarget) == 0) - sprite->pos1.y += 8; - - sprite->callback = sub_80CCB00; - if (gBattleAnimArgs[2] == 0) - { - sprite->pos1.x += gBattleAnimArgs[0]; - } - else - { - sprite->pos1.x -= gBattleAnimArgs[0]; - sprite->hFlip = 1; - } - - sprite->pos1.y += gBattleAnimArgs[1]; - sprite->data[1] -= 0x400; - sprite->data[2] += 0x400; - sprite->data[5] = gBattleAnimArgs[2]; - if (sprite->data[5] == 1) - sprite->data[1] = -sprite->data[1]; -} - -void sub_80CCB00(struct Sprite* sprite) -{ - sprite->data[3] += sprite->data[1]; - sprite->data[4] += sprite->data[2]; - if (sprite->data[5] == 0) - sprite->data[1] += 0x18; - else - sprite->data[1] -= 0x18; - - sprite->data[2] -= 0x18; - sprite->pos2.x = sprite->data[3] >> 8; - sprite->pos2.y = sprite->data[4] >> 8; - sprite->data[0]++; - if (sprite->data[0] == 20) - { - StoreSpriteCallbackInData(sprite, move_anim_8072740); - sprite->data[0] = 3; - sprite->callback = sub_80782D8; - } -} - -void unref_sub_80CCB6C(struct Sprite* sprite) -{ - if (sprite->data[2] > 1) - { - if (sprite->data[3] & 1) - { - sprite->invisible = 0; - gSprites[sprite->data[0]].invisible = 0; - gSprites[sprite->data[1]].invisible = 0; - } - else - { - sprite->invisible = 1; - gSprites[sprite->data[0]].invisible = 1; - gSprites[sprite->data[1]].invisible = 1; - } - - sprite->data[2] = 0; - sprite->data[3]++; - } - else - { - sprite->data[2]++; - } - - if (sprite->data[3] == 10) - { - DestroySprite(&gSprites[sprite->data[0]]); - DestroySprite(&gSprites[sprite->data[1]]); - move_anim_8072740(sprite); - } -} - -void sub_80CCC50(struct Sprite* sprite) -{ - sprite->data[0] = gBattleAnimArgs[2]; - if (GetBankSide(gBattleAnimBankAttacker) != 0) - sprite->pos1.x -= gBattleAnimArgs[0]; - else - sprite->pos1.x += gBattleAnimArgs[0]; - - StartSpriteAnim(sprite, gBattleAnimArgs[5]); - sprite->data[1] = -gBattleAnimArgs[3]; - sprite->pos1.y += gBattleAnimArgs[1]; - sprite->data[3] = gBattleAnimArgs[4]; - sprite->callback = sub_80CCCB4; - sub_80CCCB4(sprite); -} - -void sub_80CCCB4(struct Sprite* sprite) -{ - sprite->pos2.x = Cos(sprite->data[0], 100); - sprite->pos2.y = Sin(sprite->data[0], 20); - if (sprite->data[0] <= 0x7F) - sprite->subpriority = 0; - else - sprite->subpriority = 14; - - sprite->data[0] = (sprite->data[0] + sprite->data[1]) & 0xFF; - sprite->data[5] += 0x82; - sprite->pos2.y += sprite->data[5] >> 8; - sprite->data[2]++; - if (sprite->data[2] == sprite->data[3]) - move_anim_8072740(sprite); -} - -void sub_80CCD24(struct Sprite* sprite) -{ - if (NotInBattle() != 0) - { - gBattleAnimArgs[1] += 8; - } - - sprite->pos1.x = sub_8077EE4(gBattleAnimBankAttacker, 0) + gBattleAnimArgs[0]; - sprite->pos1.y = sub_8077EE4(gBattleAnimBankAttacker, 1) + gBattleAnimArgs[1]; - if (GetBankSide(gBattleAnimBankAttacker) == 0 || NotInBattle()) - sprite->oam.priority = sub_8079ED4(gBattleAnimBankAttacker) + 1; - else - sprite->oam.priority = sub_8079ED4(gBattleAnimBankAttacker); - - sprite->data[0] = gBattleAnimArgs[2]; - sprite->data[2] = (IndexOfSpritePaletteTag(0x2828) << 4) + 0x100; - sprite->data[7] = 16; - REG_BLDCNT = 0x3F40; - REG_BLDALPHA = (sprite->data[7] << 8) | (16 - sprite->data[7]); - sprite->callback = sub_80CCE0C; -} - -void sub_80CCE0C(struct Sprite* sprite) -{ - int a; - int i; - sprite->data[5] += 0x60; - sprite->pos2.x = -(sprite->data[5] >> 8); - sprite->data[1]++; - if (sprite->data[1] > 1) - { - sprite->data[1] = 0; - a = gPlttBufferFaded[sprite->data[2] + 1]; - i = 0; - do - { - gPlttBufferFaded[sprite->data[2] + ++i] = gPlttBufferFaded[sprite->data[2] + i + 1]; - } while ( i <= 5 ); - - gPlttBufferFaded[sprite->data[2] + 7] = a; - } - - if (sprite->data[7] > 6 && sprite->data[0] >0 && ++sprite->data[6] > 1) - { - sprite->data[6] = 0; - sprite->data[7] -= 1; - REG_BLDALPHA = (sprite->data[7] << 8) | (16 - sprite->data[7]);; - } - - if (sprite->data[0] >0) - { - sprite->data[0] -= 1; - } - else if (++sprite->data[6] > 1) - { - sprite->data[6] = 0; - sprite->data[7]++; - REG_BLDALPHA = (sprite->data[7] << 8) | (16 - sprite->data[7]); - if (sprite->data[7] == 16) - { - sprite->invisible = 1; - sprite->callback = sub_807861C; - } - } -} - -void sub_80CCF04(struct Sprite* sprite) -{ - sprite->pos1.x = sub_8077ABC(gBattleAnimBankTarget, 2); - sprite->pos1.y = sub_8077ABC(gBattleAnimBankTarget, 3) + 0xFFE8; - sprite->data[0] = 0; - sprite->data[1] = 0; - sprite->data[2] = 0; - sprite->data[3] = 0; - sprite->data[4] = 0; - sprite->data[6] = 0; - sprite->data[7] = 16; - REG_BLDCNT = 0x3F40; - REG_BLDALPHA = (sprite->data[7] << 8) | sprite->data[6]; - sprite->callback = sub_80CCF70; -} - -void sub_80CCF70(struct Sprite* sprite) -{ - switch (sprite->data[0]) - { - case 0: - if (++sprite->data[2] > 0) - { - sprite->data[2] = 0; - if (((++sprite->data[1]) & 1) != 0) - { - if (sprite->data[6] <= 15) - sprite->data[6]++; - } - else if (sprite->data[7] > 0) - sprite->data[7]--; - - REG_BLDALPHA = (sprite->data[7] << 8) | sprite->data[6]; - if (sprite->data[6] == 16 && sprite->data[7] == 0) - { - sprite->data[1] = 0; - sprite->data[0]++; - } - } - break; - case 1: - if (++sprite->data[1] > 8) - { - sprite->data[1] = 0; - StartSpriteAffineAnim(sprite, 1); - sprite->data[0]++; - } - break; - case 2: - sub_80CD0CC(sprite, 16, 4); - if (++sprite->data[1] > 2) - { - sprite->data[1] = 0; - sprite->pos1.y++; - } - - if (++sprite->data[2] <= 29) - break; - - if (sprite->data[2] & 1) - { - if (sprite->data[6] > 0) - sprite->data[6]--; - } - else if (sprite->data[7] <= 15) - { - sprite->data[7]++; - } - - REG_BLDALPHA = (sprite->data[7] << 8) | sprite->data[6]; - if (sprite->data[6] == 0 && sprite->data[7] == 16) - { - sprite->data[1] = 0; - sprite->data[2] = 0; - sprite->data[0]++; - } - break; - case 3: - sprite->invisible = 1; - sprite->data[0]++; - break; - case 4: - REG_BLDCNT = 0; - REG_BLDALPHA = 0; - move_anim_8072740(sprite); - break; - } -} - -void sub_80CD0CC(struct Sprite* sprite, int unk1, int unk2) -{ - if (sprite->data[3] <= 11) - sprite->data[4] += 2; - - if ((u16)(sprite->data[3] - 0x12) <= 0x17) - sprite->data[4] -= 2; - - if ((sprite->data[3]) > 0x2F) - sprite->data[4] += 2; - - sprite->pos2.x = sprite->data[4] / 9; - sprite->pos2.y = sprite->data[4] / 14; - if (sprite->pos2.y < 0) - sprite->pos2.y *= -1; - - sprite->data[3]++; - if (sprite->data[3] > 0x3B) - sprite->data[3] = 0; -} - -void sub_80CD140(struct Sprite* sprite) -{ - if (!gBattleAnimArgs[2]) - sub_8078650(sprite); - - sub_807867C(sprite, gBattleAnimArgs[0]); - sprite->pos1.y += gBattleAnimArgs[1]; - sprite->data[0] = gBattleAnimArgs[5]; - sprite->data[1] = gBattleAnimArgs[3]; - sprite->data[2] = gBattleAnimArgs[4]; - StoreSpriteCallbackInData(sprite, move_anim_8072740); - sprite->callback = sub_8078394; -} - -void sub_80CD190(struct Sprite* sprite) -{ - u8 bank; - if (!gBattleAnimArgs[2]) - bank = gBattleAnimBankAttacker; - else - bank = gBattleAnimBankTarget; - - if (IsDoubleBattle() && IsAnimBankSpriteVisible(bank ^ 2)) - { - sub_807A3FC(bank, gBattleAnimArgs[6], &sprite->pos1.x, &sprite->pos1.y); - sub_807867C(sprite, gBattleAnimArgs[0]); - sprite->pos1.y += gBattleAnimArgs[1]; - } - else - { - if (!gBattleAnimArgs[6]) - { - sprite->pos1.x = sub_8077ABC(bank, 0); - sprite->pos1.y = sub_8077ABC(bank, 1) + gBattleAnimArgs[1]; - } - else - { - sprite->pos1.x = sub_8077ABC(bank, 2); - sprite->pos1.y = sub_8077ABC(bank, 3) + gBattleAnimArgs[1]; - } - - sub_807867C(sprite, gBattleAnimArgs[0]); - } - - sprite->data[0] = gBattleAnimArgs[5]; - sprite->data[1] = gBattleAnimArgs[3]; - sprite->data[2] = gBattleAnimArgs[4]; - StoreSpriteCallbackInData(sprite, move_anim_8072740); - sprite->callback = sub_8078394; -} - -void sub_80CD274(struct Sprite* sprite) -{ - sub_8078650(sprite); - if (GetBankSide(gBattleAnimBankAttacker) == 0) - { - sprite->pos1.x += gBattleAnimArgs[0]; - sprite->pos1.y += gBattleAnimArgs[1]; - } - else - { - sprite->pos1.x -= gBattleAnimArgs[0]; - sprite->pos1.y += gBattleAnimArgs[1]; - StartSpriteAnim(sprite, 1); - } - - sprite->callback = sub_80CD2D4; -} - -void sub_80CD2D4(struct Sprite* sprite) -{ - if (++sprite->data[0] > 30) - { - sprite->pos2.y = (30 - sprite->data[0]) / 3; - sprite->pos2.x = Sin(sprite->data[1] * 4, 3); - sprite->data[1]++; - } - - if (sprite->animEnded) - move_anim_8072740(sprite); -} - -void sub_80CD328(struct Sprite* sprite) -{ - sub_8078650(sprite); - if (GetBankSide(gBattleAnimBankAttacker) == 0) - { - sprite->pos1.x += gBattleAnimArgs[0]; - sprite->pos1.y += gBattleAnimArgs[1]; - sprite->data[3] = 1; - } - else - { - sprite->pos1.x -= gBattleAnimArgs[0]; - sprite->pos1.y += gBattleAnimArgs[1]; - sprite->data[3] = 0xFFFF; - StartSpriteAffineAnim(sprite, 1); - } - - sprite->callback = sub_80CD394; -} - -void sub_80CD394(struct Sprite* sprite) -{ - sprite->pos2.y = -(sprite->data[0] / 0x28); - sprite->pos2.x = sprite->data[4] / 10; - sprite->data[4] += sprite->data[3] * 2; - sprite->data[0] += sprite->data[1]; - if (++sprite->data[1] > 0x3C) - move_anim_8074EE0(sprite); -} - -void sub_80CD3E0(struct Sprite* sprite) -{ - sprite->pos1.x -= 32; - sprite->pos1.y -= 32; - sprite->data[0] = 20; - sprite->callback = sub_80782D8; - StoreSpriteCallbackInData(sprite, sub_80CD408); -} - -void sub_80CD408(struct Sprite* sprite) -{ - switch (sprite->data[5] & 1) - { - case 0: - sprite->data[0] = 1; - sprite->callback = sub_80782D8; - StoreSpriteCallbackInData(sprite, sub_80CD408); - break; - case 1: - sprite->pos1.x += sprite->pos2.x; - sprite->pos1.y += sprite->pos2.y; - sprite->pos2.y = 0; - sprite->pos2.x = 0; - sprite->data[0] = 8; - sprite->data[2] = sprite->pos1.x + gUnknown_083D6DDC[sprite->data[5] >> 8][0]; - sprite->data[4] = sprite->pos1.y + gUnknown_083D6DDC[sprite->data[5] >> 8][1]; - sprite->callback = sub_8078B34; - StoreSpriteCallbackInData(sprite, sub_80CD4B8); - sprite->data[5] += 0x100; - PlaySE12WithPanning(0xD2, sub_8076F98(0x3F)); - break; - } - - sprite->data[5] ^= 1; -} - -void sub_80CD4B8(struct Sprite* sprite) -{ - if ((sprite->data[5] >> 8) == 4) - { - sprite->data[0] = 10; - sprite->callback = sub_80782D8; - StoreSpriteCallbackInData(sprite, sub_80CD4EC); - } - else - { - sprite->callback = sub_80CD408; - } -} - -void sub_80CD4EC(struct Sprite* sprite) -{ - s16 a; - s16 b; - if (sprite->oam.affineParam == 0) - { - sprite->data[0] = 3; - sprite->data[1] = 0; - sprite->data[2] = 0; - sprite->callback = sub_80782D8; - StoreSpriteCallbackInData(sprite, sub_80CD5A8); - } - else - { - switch (sprite->oam.affineParam) - { - case 1: - a = -8; - b = -8; - break; - case 2: - a = -8; - b = 8; - break; - case 3: - a = 8; - b = -8; - break; - default: - a = 8; - b = 8; - break; - } - - sprite->pos1.x += sprite->pos2.x; - sprite->pos1.y += sprite->pos2.y; - sprite->pos2.y = 0; - sprite->pos2.x = 0; - sprite->data[0] = 6; - sprite->data[2] = sub_8077ABC(gBattleAnimBankTarget, 2) + a; - sprite->data[4] = sub_8077ABC(gBattleAnimBankTarget, 3) + b; - sprite->callback = sub_8078B34; - StoreSpriteCallbackInData(sprite, sub_80CD654); - } -} - -void sub_80CD5A8(struct Sprite* sprite) -{ - if (sprite->data[2] == 0) - { - if ((sprite->data[1] += 3) > 16) - sprite->data[1] = 16; - } - else if ((sprite->data[1] -= 3) < 0) - { - sprite->data[1] = 0; - } - - BlendPalettes(sub_80791A8(1, 1, 1, 1, 1, 0, 0), sprite->data[1], 0x7FFF); - if (sprite->data[1] == 16) - { - int pal; - sprite->data[2]++; - pal = sprite->oam.paletteNum; - LoadPalette(&gPlttBufferUnfaded[0x108 + pal * 16], pal * 16 | 0x101, 4); - PlaySE12WithPanning(0xC0, sub_8076F98(0x3F)); - } - else if (sprite->data[1] == 0) - { - sprite->callback = sub_80CD654; - } -} - -void sub_80CD654(struct Sprite* sprite) -{ - if ((u16)gBattleAnimArgs[7] == 0xFFFF) - { - sprite->data[1] = 0; - sprite->data[0] = 0; - sprite->callback = sub_80CD67C; - } -} - -void sub_80CD67C(struct Sprite* sprite) -{ - if (sprite->data[0] % 3 == 0) - { - sprite->data[1]++; - sprite->invisible ^= 1; - } - - sprite->data[0]++; - if (sprite->data[1] == 8) - move_anim_8072740(sprite); -} - -void sub_80CD6CC(struct Sprite* sprite) -{ - sprite->oam.affineParam = gBattleAnimArgs[0]; - if ((s16)sprite->oam.affineParam == 1) - { - sprite->pos1.x -= 0x18; - sprite->pos1.y -= 0x18; - } - else if ((s16)sprite->oam.affineParam == 2) - { - sprite->pos1.x -= 0x18; - sprite->pos1.y += 0x18; - sprite->oam.matrixNum = 16; - } - else if ((s16)sprite->oam.affineParam == 3) - { - sprite->pos1.x += 0x18; - sprite->pos1.y -= 0x18; - sprite->oam.matrixNum = 8; - } - else - { - sprite->pos1.x += 0x18; - sprite->pos1.y += 0x18; - sprite->oam.matrixNum = 24; - } - - sprite->oam.tileNum = (sprite->oam.tileNum + 16); - sprite->callback = sub_80CD3E0; - sub_80CD3E0(sprite); -} - -void sub_80CD774(struct Sprite* sprite) -{ - sprite->invisible = 1; - sprite->data[0] = 0; - switch (gBattleAnimArgs[0]) - { - case 0: - sprite->callback = sub_80CD7CC; - break; - case 1: - sprite->callback = sub_80CD8A8; - break; - case 2: - sprite->callback = sub_80CD8F8; - break; - default: - sprite->callback = sub_80CD9B8; - break; - } -} - -void sub_80CD7CC(struct Sprite* sprite) -{ - sprite->data[0] = 6; - sprite->data[1] = (GetBankSide(gBattleAnimBankAttacker)) ? 2 : -2; - sprite->data[2] = 0; - sprite->data[3] = gObjectBankIDs[gBattleAnimBankAttacker]; - StoreSpriteCallbackInData(sprite, sub_80CD81C); - sprite->callback = sub_8078458; -} - -void sub_80CD81C(struct Sprite* sprite) -{ - if (sprite->data[0] == 0) - { - sprite->data[3] = gObjectBankIDs[gBattleAnimBankAttacker]; - sub_8078E70(sprite->data[3], 0); - sprite->data[4] = (sprite->data[6] = GetBankSide(gBattleAnimBankAttacker)) ? 0x300 : 0xFFFFFD00; - sprite->data[5] = 0; - } - - sprite->data[5] += sprite->data[4]; - obj_id_set_rotscale(sprite->data[3], 0x100, 0x100, sprite->data[5]); - sub_8078F9C(sprite->data[3]); - if (++sprite->data[0] > 3) - { - sprite->data[0] = 0; - sprite->callback = sub_80CD9B8; - } -} - -void sub_80CD8A8(struct Sprite* sprite) -{ - sprite->data[0] = 4; - sprite->data[1] = (GetBankSide(gBattleAnimBankAttacker)) ? -3 : 3; - sprite->data[2] = 0; - sprite->data[3] = gObjectBankIDs[gBattleAnimBankAttacker]; - StoreSpriteCallbackInData(sprite, sub_80CD9B8); - sprite->callback = sub_8078458; -} - -void sub_80CD8F8(struct Sprite* sprite) -{ - if (++sprite->data[0] > 8) - { - sprite->data[0] = 0; - sprite->callback = sub_80CD91C; - } -} - -void sub_80CD91C(struct Sprite* sprite) -{ - if (sprite->data[0] == 0) - { - sprite->data[3] = gObjectBankIDs[gBattleAnimBankAttacker]; - sprite->data[6] = GetBankSide(gBattleAnimBankAttacker); - if (GetBankSide(gBattleAnimBankAttacker)) - { - sprite->data[4] = 0xFC00; - sprite->data[5] = 0xC00; - } - else - { - sprite->data[4] = 0x400; - sprite->data[5] = 0xF400; - } - } - - sprite->data[5] += sprite->data[4]; - obj_id_set_rotscale(sprite->data[3], 0x100, 0x100, sprite->data[5]); - sub_8078F9C(sprite->data[3]); - if (++sprite->data[0] > 2) - { - sub_8078F40(sprite->data[3]); - sprite->callback = sub_80CD9B8; - } -} - -void sub_80CD9B8(struct Sprite* sprite) -{ - move_anim_8072740(sprite); -} - -void sub_80CD9C4(struct Sprite* sprite) -{ - sprite->data[0] = 0; - sprite->callback = sub_80CD9D4; -} - -void sub_80CD9D4(struct Sprite* sprite) -{ - switch (sprite->data[0]) - { - case 0: - sprite->data[1] = 0; - sprite->data[2] = gObjectBankIDs[gBattleAnimBankAttacker]; - sprite->data[3] = GetBankSide(gBattleAnimBankAttacker); - sprite->data[4] = (sprite->data[3] != 0) ? 0x200 : -0x200; - sprite->data[5] = 0; - sub_8078E70(sprite->data[2], 0); - sprite->data[0]++; - case 1: - sprite->data[5] += sprite->data[4]; - obj_id_set_rotscale(sprite->data[2], 0x100, 0x100, sprite->data[5]); - sub_8078F9C(sprite->data[2]); - if (++sprite->data[1] > 3) - { - sprite->data[1] = 0; - sprite->data[4] *= -1; - sprite->data[0]++; - } - break; - case 2: - sprite->data[5] += sprite->data[4]; - obj_id_set_rotscale(sprite->data[2], 0x100, 0x100, sprite->data[5]); - sub_8078F9C(sprite->data[2]); - if (++sprite->data[1] > 3) - { - sub_8078F40(sprite->data[2]); - move_anim_8072740(sprite); - } - break; - } -} - -void sub_80CDAC8(u8 taskId) -{ u8 a; - gTasks[taskId].data[0] = gObjectBankIDs[gBattleAnimBankAttacker]; - a = GetBankSide(gBattleAnimBankAttacker); - gTasks[taskId].data[1] = a; - gTasks[taskId].data[2] = 0; - switch (gBattleAnimArgs[0]) - { - default: - DestroyAnimVisualTask(taskId); - break; - case 0: - gTasks[taskId].data[2] = 0; - gTasks[taskId].data[3] = 8; - gTasks[taskId].data[4] = 0; - gTasks[taskId].data[5] = 3; - if (a == 0) - gTasks[taskId].data[5] *= -1; - - gTasks[taskId].func = sub_80CDB60; - break; - case 1: - gTasks[taskId].data[3] = 8; - gTasks[taskId].data[4] = 0x600; - gTasks[taskId].data[5] = 0xC0; - if (a == 0) - { - gTasks[taskId].data[4] = -gTasks[taskId].data[4]; - gTasks[taskId].data[5] = -gTasks[taskId].data[5]; - } - - gTasks[taskId].func = sub_80CDD20; - break; - } -} - -void sub_80CDB60(u8 taskId) -{ - struct Task *task = &gTasks[taskId]; - switch (task->data[2]) - { - case 0: - if (task->data[3]) - { - task->data[4] += task->data[5]; - gSprites[task->data[0]].pos2.x = task->data[4]; - task->data[3]--; - } - else - { - task->data[3] = 8; - task->data[4] = 0; - task->data[5] = (task->data[1] == 0) ? -0xC0 : 0xC0; - sub_8078E70(task->data[0], 0); - task->data[2]++; - } - break; - case 1: - if (task->data[3]) - { - task->data[4] += task->data[5]; - obj_id_set_rotscale(task->data[0], 0x100, 0x100, task->data[4]); - sub_8078F9C(task->data[0]); - task->data[3]--; - } - else - { - task->data[3] = 8; - task->data[4] = gSprites[task->data[0]].pos2.x; - task->data[5] = (task->data[1] == 0) ? 0x2 : -0x2; - task->data[6] = 1; - task->data[2]++; - } - break; - case 2: - if (task->data[3]) - { - if (task->data[6]) - { - task->data[6]--; - } - else - { - if (task->data[3] & 1) - gSprites[task->data[0]].pos2.x = task->data[4] + task->data[5]; - else - gSprites[task->data[0]].pos2.x = task->data[4] - task->data[5]; - - task->data[6] = 1; - task->data[3]--; - } - } - else - { - gSprites[task->data[0]].pos2.x = task->data[4]; - task->data[3] = 12; - task->data[2]++; - } - break; - case 3: - if (task->data[3]) - { - task->data[3]--; - } - else - { - task->data[3] = 3; - task->data[4] = gSprites[task->data[0]].pos2.x; - task->data[5] = (task->data[1] == 0) ? 8 : -8; - task->data[2]++; - } - break; - case 4: - if (task->data[3]) - { - task->data[4] += task->data[5]; - gSprites[task->data[0]].pos2.x = task->data[4]; - task->data[3]--; - } - else - { - DestroyAnimVisualTask(taskId); - } - break; - } -} - -void sub_80CDD20(u8 taskId) -{ - struct Task* task = &gTasks[taskId]; - if (task->data[3]) - { - task->data[4] -= task->data[5]; - obj_id_set_rotscale(task->data[0], 0x100, 0x100, task->data[4]); - sub_8078F9C(task->data[0]); - task->data[3]--; - } - else - { - sub_8078F40(task->data[0]); - DestroyAnimVisualTask(taskId); - } -} - -void sub_80CDD74(struct Sprite* sprite) -{ - if (gBattleAnimArgs[0] == 0) - { - sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 2) + gBattleAnimArgs[1]; - sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 3) + gBattleAnimArgs[2]; - } - else - { - sprite->pos1.x = sub_8077ABC(gBattleAnimBankTarget, 2) + gBattleAnimArgs[1]; - sprite->pos1.y = sub_8077ABC(gBattleAnimBankTarget, 3) + gBattleAnimArgs[2]; - } - - sprite->data[0] = 0; - sprite->data[1] = 0; - StoreSpriteCallbackInData(sprite, sub_80CDEC0); - sprite->callback = sub_8078600; -} - -void sub_80CDDDC(struct Sprite* sprite) -{ - sprite->pos1.x = sub_8077ABC(gBattleAnimBankTarget, 2) + 0xFFD0; - sprite->pos1.y = sub_8077ABC(gBattleAnimBankTarget, 3); - StoreSpriteCallbackInData(sprite, sub_80CDE78); - sprite->callback = sub_8078600; -} - -void sub_80CDE24(struct Sprite* sprite) -{ - sprite->pos1.x = sprite->pos1.x = sub_8077ABC(gBattleAnimBankTarget, 2) + 0xFFD0 + gBattleAnimArgs[0]; - sprite->pos1.y = sub_8077ABC(gBattleAnimBankTarget, 3); - StartSpriteAnim(sprite, 1); - sprite->data[0] = 0; - sprite->data[1] = 0; - sprite->callback = sub_80CDEC0; -} - -void sub_80CDE78(struct Sprite* sprite) -{ - if (++sprite->data[0] > 8) - { - sprite->data[0] = 12; - sprite->data[1] = 8; - sprite->data[2] = 0; - StoreSpriteCallbackInData(sprite, sub_80CDEB0); - sprite->callback = sub_8078364; - } -} - -void sub_80CDEB0(struct Sprite* sprite) -{ - sprite->data[0] = 0; - sprite->data[1] = 0; - sprite->callback = sub_80CDEC0; -} - -void sub_80CDEC0(struct Sprite* sprite) -{ - if (++sprite->data[0] > 1) - { - sprite->data[0] = 0; - sprite->invisible = !sprite->invisible; - if (++sprite->data[1] > 8) - move_anim_8072740(sprite); - } -} - -void sub_80CDF0C(struct Sprite* sprite) -{ - if (gBattleAnimArgs[0] == 0) - { - sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 0) + gBattleAnimArgs[1]; - sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 1) + gBattleAnimArgs[2]; - } - else - { - sprite->pos1.x = sub_8077ABC(gBattleAnimBankTarget, 0) + gBattleAnimArgs[1]; - sprite->pos1.y = sub_8077ABC(gBattleAnimBankTarget, 1) + gBattleAnimArgs[2]; - } - - sprite->data[0] = 0; - sprite->data[1] = gBattleAnimArgs[3]; - sprite->callback = sub_80CDF70; -} - -void sub_80CDF70(struct Sprite* sprite) -{ - if (++sprite->data[0] > sprite->data[1]) - { - sprite->data[0] = 0; - sprite->pos1.y--; - } - - sprite->pos1.y -= sprite->data[0]; - if (sprite->animEnded) - move_anim_8072740(sprite); -} - -void sub_80CDFB0(struct Sprite* sprite) -{ - sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 2); - sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 3) - 12; - sprite->data[0] = 0; - sprite->data[1] = 2; - sprite->data[2] = 0; - sprite->data[3] = 0; - sprite->data[4] = 0; - sprite->data[5] = sub_8076F98(-0x40); - sprite->callback = sub_80CE000; -} - -void sub_80CE000(struct Sprite* sprite) -{ - if (++sprite->data[0] >= sprite->data[1]) - { - sprite->invisible = !sprite->invisible; - if (!sprite->invisible) - { - sprite->data[4]++; - if (!(sprite->data[4] & 1)) - PlaySE12WithPanning(SE_W207B, sprite->data[5]); - } - - sprite->data[0] = 0; - if (++sprite->data[2] > 1) - { - sprite->data[2] = 0; - sprite->data[1]++; - } - } - - if (sprite->animEnded && sprite->data[1] > 16 && sprite->invisible) - move_anim_8072740(sprite); -} - -void sub_80CE09C(struct Sprite* sprite) -{ - if (sprite->data[0] == 0) - { - sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 0) + gBattleAnimArgs[0]; - sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 1) + gBattleAnimArgs[1]; - if (NotInBattle()) - sprite->pos1.y += 10; - sprite->data[0]++; - } - - if ((u16)gBattleAnimArgs[7] == 0xFFFF) - move_anim_8072740(sprite); -} - -void sub_80CE108(u8 taskId) -{ - if (gTasks[taskId].data[2] == 1) - { - gBattleAnimArgs[7] = 0xFFFF; - gTasks[taskId].data[2]++; - } - else if (gTasks[taskId].data[2] == 2) - { - DestroyAnimVisualTask(taskId); - } - else - { - if (++gTasks[taskId].data[0] == 4) - { - gTasks[taskId].data[0] = 0; - gTasks[taskId].data[1]++; - REG_BLDALPHA = (gTasks[taskId].data[1] << 8) | (16 - gTasks[taskId].data[1]); - if (gTasks[taskId].data[1] == 16) - gTasks[taskId].data[2]++; - } - } -} - -void sub_80CE17C(struct Sprite* sprite) -{ - sub_8078764(sprite, 0); - sprite->animPaused = 1; - sprite->data[0] = gBattleAnimArgs[2]; - sprite->callback = sub_80CE1AC; -} - -void sub_80CE1AC(struct Sprite* sprite) -{ - if (sprite->data[0]) - { - sprite->data[0]--; - } - else - { - sprite->animPaused = 0; - sprite->data[0] = 30; - sprite->data[2] = sub_8077ABC(gBattleAnimBankAttacker, 2); - sprite->data[4] = sub_8077ABC(gBattleAnimBankAttacker, 3); - sprite->callback = sub_8078B34; - StoreSpriteCallbackInData(sprite, move_anim_8072740); - } -} - -void sub_80CE210(u8 taskId) -{ - if (++gTasks[taskId].data[0] == 4) - { - gTasks[taskId].data[0] = 0; - gTasks[taskId].data[1]++; - REG_BLDALPHA = gTasks[taskId].data[1] | ((16 - gTasks[taskId].data[1]) << 8); - if (gTasks[taskId].data[1] == 16) - DestroyAnimVisualTask(taskId); - } -} - -void unref_sub_80CE260(u8 taskId) -{ - u8 i; - for (i = 0; i < gNoOfAllBanks; i++) - { - if (gBattleAnimArgs[0] == 1 && GetBankSide(i) == 0) - sub_8043DB0(gHealthboxIDs[i]); - - if (gBattleAnimArgs[1] == 1 && GetBankSide(i) == 1) - sub_8043DB0(gHealthboxIDs[i]); - } - - DestroyAnimVisualTask(taskId); -} - -void unref_sub_80CE2D4(u8 taskId) -{ - u8 i; - for (i = 0; i < gNoOfAllBanks; i++) - { - sub_8043DFC(gHealthboxIDs[i]); - } - - DestroyAnimVisualTask(taskId); -} - -void sub_80CE30C(struct Sprite* sprite) -{ - if (NotInBattle()) - { - sprite->pos1.x = 0x30; - sprite->pos1.y = 0x28; - } - else - { - sprite->pos1.x = gBattleAnimArgs[0]; - sprite->pos1.y = gBattleAnimArgs[1]; - } - - sprite->oam.shape = 0; - sprite->oam.size = 3; - sprite->data[0] = 0; - sprite->callback = sub_80CE354; -} - -void sub_80CE354(struct Sprite* sprite) -{ - if (sprite->data[0]) - move_anim_8072740(sprite); -} - -void sub_80CE36C(struct Sprite* sprite) -{ - sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 2) + gBattleAnimArgs[0]; - sprite->pos1.y = gBattleAnimArgs[1]; - sprite->data[0] = 0; - sprite->data[1] = 0; - sprite->data[2] = 0; - sprite->data[3] = 0; - sprite->data[4] = 1; - sprite->callback = sub_80CE3B0; -} - -void sub_80CE3B0(struct Sprite* sprite) -{ - if (++sprite->data[1] > 1) - { - sprite->data[1] = 0; - if (sprite->data[2] <= 0x77) - { - sprite->pos1.y++; - sprite->data[2]++; - } - } - - if (sprite->data[0]) - move_anim_8072740(sprite); -} - -void sub_80CE3EC(u8 taskId) -{ - int a = sub_80791A8(1, 0, 0, 0, 0, 0, 0) & 0xFFFF; - int b; - int c; - int d; - - gTasks[taskId].data[0] = 0; - gTasks[taskId].data[1] = 0; - gTasks[taskId].data[2] = 0; - gTasks[taskId].data[3] = a; - gTasks[taskId].data[4] = 0; - gTasks[taskId].data[5] = 0; - gTasks[taskId].data[6] = 0; - gTasks[taskId].data[7] = 13; - gTasks[taskId].data[8] = 14; - gTasks[taskId].data[9] = 15; - b = sub_80792C0(1, 1, 1, 1); - c = a | b; - sub_8079BF4(&gTasks[taskId].data[14], &gTasks[taskId].data[15], (void*)c); - b = b | (0x10000 << IndexOfSpritePaletteTag(0x27D2)); - d = IndexOfSpritePaletteTag(0x27D3); - BeginNormalPaletteFade((0x10000 << d) | b, 0, 0, 0x10, 32699); - gTasks[taskId].func = sub_80CE4D4; - sub_80CE4D4(taskId); -} - -void sub_80CE4D4(u8 taskId) -{ - struct Task* task = &gTasks[taskId]; - switch (task->data[0]) - { - case 0: - if (++task->data[1] > 0) - { - u16 color; - u16 bitmask; - u16 r3; - u16 i; - u16 j; - task->data[1] = 0; - if (++task->data[2] <= 15) - { - u16 red; - u16 green; - u16 blue; - task->data[4] += task->data[7]; - task->data[5] += task->data[8]; - task->data[6] += task->data[9]; - red = task->data[4] >> 3; - green = task->data[5] >> 3; - blue = task->data[6] >> 3; - color = RGB(red, green, blue); - } - else - { - color = RGB(27, 29, 31); - task->data[0]++; - } - - bitmask = 1; - r3 = 0; - for (i = 0; i <= 15; i++) - { - if (task->data[3] & bitmask) - { - for (j = 1; j <= 15; j++) - { - gPlttBufferFaded[r3 + j] = color; - } - } - - bitmask <<= 1; - r3 += 16; - } - } - break; - case 1: - if (!gPaletteFade.active) - { - u8 spriteId; - for (spriteId = 0; spriteId < MAX_SPRITES; spriteId++) - { - if (gSprites[spriteId].template == &gBattleAnimSpriteTemplate_83D6FC8 || gSprites[spriteId].template == &gBattleAnimSpriteTemplate_83D6FF8) - gSprites[spriteId].data[0] = 1; - } - - task->data[1] = 0; - task->data[0]++; - } - break; - case 2: - if (++task->data[1] > 30) - { - BeginNormalPaletteFade((u32)sub_8079BFC(task->data[14], task->data[15]), 0, 16, 0, RGB(27, 29, 31)); - task->data[0]++; - } - break; - case 3: - if (!gPaletteFade.active) - DestroyAnimVisualTask(taskId); - break; - } -} - -void sub_80CE670(struct Sprite* sprite) -{ - if (gBattleAnimArgs[2] <= 1) - gBattleAnimArgs[2] = 2; - - if (gBattleAnimArgs[2] > 0x7F) - gBattleAnimArgs[2] = 0x7F; - - sprite->data[0] = 0; - sprite->data[1] = gBattleAnimArgs[2]; - sprite->pos1.x = sub_8077ABC(gBattleAnimBankTarget, 2) + gBattleAnimArgs[0]; - sprite->pos1.y = sub_8077ABC(gBattleAnimBankTarget, 3) + gBattleAnimArgs[1]; - sprite->data[6] = sprite->pos1.x; - sprite->data[7] = sprite->pos1.y; - if (NotInBattle() != 0) - { - sprite->oam.matrixNum = 8; - sprite->pos1.x += 40; - sprite->pos1.y += 20; - sprite->data[2] = sprite->pos1.x << 7; - sprite->data[3] = -0x1400 / sprite->data[1]; - sprite->data[4] = sprite->pos1.y << 7; - sprite->data[5] = -0xA00 / sprite->data[1]; - } - else if (GetBankSide(gBattleAnimBankAttacker) == 0) - { - sprite->pos1.x -= 40; - sprite->pos1.y += 20; - sprite->data[2] = sprite->pos1.x << 7; - sprite->data[3] = 0x1400 / sprite->data[1]; - sprite->data[4] = sprite->pos1.y << 7; - sprite->data[5] = -0xA00 / sprite->data[1]; - } - else - { - sprite->pos1.x += 40; - sprite->pos1.y -= 20; - sprite->data[2] = sprite->pos1.x << 7; - sprite->data[3] = -0x1400 / sprite->data[1]; - sprite->data[4] = sprite->pos1.y << 7; - sprite->data[5] = 0xA00 / sprite->data[1]; - sprite->oam.matrixNum = 24; - } - - sprite->callback = sub_80CE798; -} - -void sub_80CE798(struct Sprite* sprite) -{ - sprite->data[2] += sprite->data[3]; - sprite->data[4] += sprite->data[5]; - sprite->pos1.x = sprite->data[2] >> 7; - sprite->pos1.y = sprite->data[4] >> 7; - if (--sprite->data[1] == 1) - { - sprite->pos1.x = sprite->data[6]; - sprite->pos1.y = sprite->data[7]; - } - - if (sprite->data[1] == 0) - move_anim_8072740(sprite); -} - -// double team -void sub_80CE7E0(u8 taskId) -{ - u16 i; - int obj; - u16 r3; - u16 r4; - struct Task* task = &gTasks[taskId]; - task->data[0] = GetAnimBankSpriteId(0); - task->data[1] = AllocSpritePalette(0x2771); - r3 = (task->data[1] * 16) + 0x100; - r4 = (gSprites[task->data[0]].oam.paletteNum + 16) << 4; - for (i = 1; i < 16; i++) - { - gPlttBufferUnfaded[r3 + i] = gPlttBufferUnfaded[r4 + i]; - } - - BlendPalette(r3, 16, 11, 0); - task->data[3] = 0; - i = 0; - while (i <= 1 && (obj = duplicate_obj_of_side_rel2move_in_transparent_mode(0)) >= 0) - { - gSprites[obj].oam.paletteNum = task->data[1]; - gSprites[obj].data[0] = 0; - gSprites[obj].data[1] = i << 7; - gSprites[obj].data[2] = taskId; - gSprites[obj].callback = sub_80CE974; - task->data[3]++; - i++; - } - - task->func = sub_80CE910; - if (GetBankIdentity_permutated(gBattleAnimBankAttacker) == 1) - { - REG_DISPCNT &= 0xFDFF; - } - else - { - REG_DISPCNT &= 0xFBFF; - } -} - -void sub_80CE910(u8 taskId) -{ - struct Task* task = &gTasks[taskId]; - if (!task->data[3]) - { - if (GetBankIdentity_permutated(gBattleAnimBankAttacker) == 1) - REG_DISPCNT |= 0x200; - else - REG_DISPCNT |= 0x400; - - FreeSpritePaletteByTag(0x2771); - DestroyAnimVisualTask(taskId); - } -} - -void sub_80CE974(struct Sprite* sprite) -{ - if (++sprite->data[3] > 1) - { - sprite->data[3] = 0; - sprite->data[0]++; - } - - if (sprite->data[0] > 0x40) - { - gTasks[sprite->data[2]].data[3]--; - obj_delete_but_dont_free_vram(sprite); - } - else - { - sprite->data[4] = gSineTable[sprite->data[0]] / 6; - sprite->data[5] = gSineTable[sprite->data[0]] / 13; - sprite->data[1] = (sprite->data[1] + sprite->data[5]) & 0xFF; - sprite->pos2.x = Sin(sprite->data[1], sprite->data[4]); - } -} - -void sub_80CEA04(struct Sprite* sprite) -{ - StoreSpriteCallbackInData(sprite, move_anim_8072740); - sprite->callback = sub_8078600; -} - -// grasswhistle -void sub_80CEA20(u8 taskId) -{ - u16 i; - u16 j; - u16 index; - - index = IndexOfSpritePaletteTag(gUnknown_083D712C[0][0]); - if (index != 0xFF) - { - index = (index << 4) + 0x100; - for (i = 1; i < 6; i++) - { - gPlttBufferFaded[index + i] = gUnknown_083D712C[0][i]; - } - } - - for (j = 1; j < 4; j++) - { - index = AllocSpritePalette(gUnknown_083D712C[j][0]); - if (index != 0xFF) - { - index = (index << 4) + 0x100; - for (i = 1; i < 6; i++) - { - gPlttBufferFaded[index + i] = gUnknown_083D712C[j][i]; - } - } - } - DestroyAnimVisualTask(taskId); -} - -void sub_80CEAD8(u8 taskId) -{ - u16 i; - for (i = 1; i < 4; i++) - { - FreeSpritePaletteByTag(gUnknown_083D712C[i][0]); - } - - DestroyAnimVisualTask(taskId); -} - -void sub_80CEB0C(struct Sprite* sprite) -{ - u8 index; - u8 a; - u8 b; - sub_8078650(sprite); - StartSpriteAnim(sprite, gBattleAnimArgs[0]); - if ((index = IndexOfSpritePaletteTag(gUnknown_083D712C[gBattleAnimArgs[1]][0])) != 0xFF) - sprite->oam.paletteNum = index; - - sprite->data[1] = gBattleAnimArgs[1]; - sprite->data[2] = 0; - sprite->data[3] = gBattleAnimArgs[2]; - if (NotInBattle()) - { - a = 0x30; - b = 0x28; - } - else - { - a = sub_8077ABC(gBattleAnimBankTarget, 2); - b = sub_8077ABC(gBattleAnimBankTarget, 3); - } - - sprite->data[4] = sprite->pos1.x << 4; - sprite->data[5] = sprite->pos1.y << 4; - sub_80CEBC4(a - sprite->pos1.x, b - sprite->pos1.y, &sprite->data[6], &sprite->data[7], 0x28); - sprite->callback = sub_80CEC1C; -} - -void sub_80CEBC4(s16 a, s16 b, s16* c, s16* d, s8 e) -{ - int f; - int g; - if (a < 0) - e = -e; - - f = a << 8; - g = f / e; - if (g == 0) - g = 1; - - *c = f / g; - *d = (b << 8) / g; -} - -//grasswhistle music notes -void sub_80CEC1C(struct Sprite* sprite) -{ - int b; - s16 a; - int c; - u8 index; - sprite->data[0]++; - b = sprite->data[0] * 5 - ((sprite->data[0] * 5 / 256) << 8); - sprite->data[4] += sprite->data[6]; - sprite->data[5] += sprite->data[7]; - sprite->pos1.x = sprite->data[4] >> 4; - sprite->pos1.y = sprite->data[5] >> 4; - sprite->pos2.y = Sin(b, 15); - a = (u16)sprite->pos1.y; - c = (u16)sprite->pos1.x; - - if ((u32)((c + 16) << 16) > (0x110) << 16 || a < -16 || a > 0x80) - { - move_anim_8074EE0(sprite); - } - else - { - if (sprite->data[3] && ++sprite->data[2] > sprite->data[3]) - { - sprite->data[2] = 0; - if (++sprite->data[1] > 3) - sprite->data[1] = 0; - - index = IndexOfSpritePaletteTag(gUnknown_083D712C[sprite->data[1]][0]); - if (index != 0xFF) - sprite->oam.paletteNum = index; - } - } -} - -void sub_80CECE8(struct Sprite* sprite) -{ - int a; - if (GetBankSide(gBattleAnimBankAttacker) == 1) - { - a = gBattleAnimArgs[1]; - (u16)gBattleAnimArgs[1] = -a; - } - - sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 2) + gBattleAnimArgs[1]; - sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 3) + gBattleAnimArgs[2]; - StartSpriteAnim(sprite, gBattleAnimArgs[0]); - sprite->data[2] = 0; - sprite->data[3] = 0; - sprite->data[4] = sprite->pos1.x << 4; - sprite->data[5] = sprite->pos1.y << 4; - sprite->data[6] = (gBattleAnimArgs[1] << 4) / 5; - sprite->data[7] = (gBattleAnimArgs[2] << 7) / 5; - sprite->callback = sub_80CED78; -} - -void sub_80CED78(struct Sprite* sprite) -{ - sprite->data[4] += sprite->data[6]; - sprite->data[5] += sprite->data[7]; - sprite->pos1.x = sprite->data[4] >> 4; - sprite->pos1.y = sprite->data[5] >> 4; - if (sprite->data[0] > 5 && sprite->data[3] == 0) - { - sprite->data[2] = (sprite->data[2] + 16) & 0xFF; - sprite->pos2.x = Cos(sprite->data[2], 18); - sprite->pos2.y = Sin(sprite->data[2], 18); - if (sprite->data[2] == 0) - sprite->data[3] = 1; - } - - if (++sprite->data[0] == 0x30) - move_anim_8074EE0(sprite); -} - -void sub_80CEDF0(struct Sprite* sprite) -{ - s16 a; - if (gBattleAnimArgs[0] == 1) - { - sprite->oam.matrixNum = 8; - a = 16; - } - else - { - a = -16; - } - - sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 2) + a; - sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 3) + 8; - sprite->data[0] = 8; - sprite->callback = sub_80782D8; - StoreSpriteCallbackInData(sprite, move_anim_8072740); -} - -void sub_80CEE60(struct Sprite* sprite) -{ - s16 a; - u8 index; - sub_8078650(sprite); - sprite->pos1.y += 8; - StartSpriteAnim(sprite, gBattleAnimArgs[1]); - index = IndexOfSpritePaletteTag(gUnknown_083D712C[gBattleAnimArgs[2]][0]); - if (index != 0xFF) - sprite->oam.paletteNum = index; - - a = (gBattleAnimArgs[0] == 0) ? 0xFFE0 : 0x20; - sprite->data[0] = 40; - sprite->data[1] = sprite->pos1.x; - sprite->data[2] = a + sprite->data[1]; - sprite->data[3] = sprite->pos1.y; - sprite->data[4] = sprite->data[3] - 40; - obj_translate_based_on_private_1_2_3_4(sprite); - sprite->data[5] = gBattleAnimArgs[3]; - sprite->callback = sub_80CEEE8; -} - -void sub_80CEEE8(struct Sprite* sprite) -{ - if (sub_8078B5C(sprite) == 0) - { - s16 a; - a = Sin(sprite->data[5], 8); - if (sprite->pos2.x < 0) - a = -a; - - sprite->pos2.x += a; - sprite->pos2.y += Sin(sprite->data[5], 4); - sprite->data[5] = (sprite->data[5] + 8) & 0xFF; - } - else - { - move_anim_8072740(sprite); - } -} - -void sub_80CEF44(u8 bank, struct Sprite* sprite) -{ - if (GetBankSide(bank) == 0) - sprite->pos1.x = sub_807A100(bank, 5) + 8; - else - sprite->pos1.x = sub_807A100(bank, 4) - 8; - - sprite->pos1.y = sub_8077ABC(bank, 3) - (s16)sub_807A100(bank, 0) / 4; -} - -void sub_80CEF9C(struct Sprite* sprite) -{ - u8 a; - u8 bank; - if (gBattleAnimArgs[0] == 0) - bank = gBattleAnimBankAttacker; - else - bank = gBattleAnimBankTarget; - - sub_80CEF44(bank, sprite); - a = (GetBankSide(bank) == 0) ? 0 : 1; - sprite->data[0] = gBattleAnimArgs[1]; - sprite->data[1] = a + 2; - StartSpriteAnim(sprite, a); - StoreSpriteCallbackInData(sprite, sub_80CF008); - sprite->callback = sub_8078600; -} - -void sub_80CF008(struct Sprite* sprite) -{ - if (--sprite->data[0] == 0) - { - StoreSpriteCallbackInData(sprite, move_anim_8072740); - StartSpriteAnim(sprite, sprite->data[1]); - sprite->callback = sub_8078600; - } -} - -void sub_80CF040(struct Sprite* sprite) -{ - u8 bank; - if (gBattleAnimArgs[0] == 0) - bank = gBattleAnimBankAttacker; - else - bank = gBattleAnimBankTarget; - - sub_80CEF44(bank, sprite); - sprite->data[0] = 0; - StoreSpriteCallbackInData(sprite, sub_80CF088); - sprite->callback = sub_80785E4; -} - -void sub_80CF088(struct Sprite* sprite) -{ - if (++sprite->data[0] > 16) - { - StartSpriteAffineAnim(sprite, 1); - StoreSpriteCallbackInData(sprite, move_anim_8074EE0); - sprite->callback = sub_80785E4; - } -} - -void sub_80CF0BC(struct Sprite* sprite) -{ - u8 bank; - if (gBattleAnimArgs[0] == 0) - bank = gBattleAnimBankAttacker; - else - bank = gBattleAnimBankTarget; - - sprite->pos1.x = sub_8077ABC(bank, 0); - sprite->pos1.y = sub_807A100(bank, 2); - if (sprite->pos1.y <= 9) - sprite->pos1.y = 10; - - sprite->data[0] = 1; - sprite->data[1] = 0; - sprite->data[2] = sprite->subpriority; - sprite->data[3] = sprite->subpriority + 4; - sprite->data[4] = 0; - StoreSpriteCallbackInData(sprite, sub_80CF138); - sprite->callback = sub_80785E4; -} - -void sub_80CF138(struct Sprite* sprite) -{ - if (++sprite->data[4] > 12) - sprite->callback = sub_80CF158; -} - -void sub_80CF158(struct Sprite* sprite) -{ - s16 temp; - s16 temp2; - sprite->data[1] += 4; - if (sprite->data[1] > 0xFE) - { - if (--sprite->data[0] == 0) - { - sprite->pos2.x = 0; - sprite->callback = sub_80CF088; - return; - } - else - { - sprite->data[1] &= 0xFF; - } - } - - if (sprite->data[1] > 0x4F) - sprite->subpriority = sprite->data[3]; - - if (sprite->data[1] > 0x9F) - sprite->subpriority = sprite->data[2]; - - temp = gSineTable[sprite->data[1]]; - sprite->pos2.x = (temp2 = temp >> 3) + (temp2 >> 1); -} - -void sub_80CF1C8(struct Sprite* sprite) -{ - u8 bank; - if (gBattleAnimArgs[0] == 0) - bank = gBattleAnimBankAttacker; - else - bank = gBattleAnimBankTarget; - - sub_80CEF44(bank, sprite); - if (GetBankSide(bank) == 0) - { - StartSpriteAnim(sprite, 0); - sprite->data[0] = 2; - } - else - { - StartSpriteAnim(sprite, 1); - sprite->data[0] = 3; - } - - sprite->callback = sub_80CF228; -} - -void sub_80CF228(struct Sprite* sprite) -{ - if (++sprite->data[1] > 10) - { - sprite->data[1] = 0; - StartSpriteAnim(sprite, sprite->data[0]); - StoreSpriteCallbackInData(sprite, sub_80CF264); - sprite->callback = sub_8078600; - } -} - -void sub_80CF264(struct Sprite* sprite) -{ - if (++sprite->data[1] > 5) - move_anim_8072740(sprite); -} - -void sub_80CF280(struct Sprite* sprite) -{ - sub_8078650(sprite); - sub_807867C(sprite, gBattleAnimArgs[0]); - sprite->pos1.y += gBattleAnimArgs[1]; - sprite->data[1] = gBattleAnimArgs[2]; - sprite->data[2] = gBattleAnimArgs[4]; - sprite->data[3] = gBattleAnimArgs[5]; - sprite->data[4] = gBattleAnimArgs[3]; - StoreSpriteCallbackInData(sprite, move_anim_8074EE0); - sprite->callback = sub_8078278; - sub_8078278(sprite); -} - -void sub_80CF2D0(struct Sprite* sprite) -{ - u8 bank; - if (gBattleAnimArgs[0] == 0) - bank = gBattleAnimBankAttacker; - else - bank = gBattleAnimBankTarget; - - sub_80CEF44(bank, sprite); - sprite->data[0] = 0; - sprite->data[1] = 0; - sprite->callback = sub_80CF310; -} - -void sub_80CF310(struct Sprite* sprite) -{ - switch (sprite->data[0]) - { - case 0: - sprite->pos2.y -= 3; - if (++sprite->data[1] == 6) - sprite->data[0]++; - break; - case 1: - sprite->pos2.y += 3; - if (--sprite->data[1] == 0) - sprite->data[0]++; - break; - case 2: - if (++sprite->data[1] == 0x40) - move_anim_8072740(sprite); - break; - } -} - -void sub_80CF374(struct Sprite* sprite) -{ - s16 temp; - gSprites[sprite->data[2]].pos2.x += sprite->data[1]; - temp = sprite->data[1]; - sprite->data[1] = -temp; - if (sprite->data[0] == 0) - { - gSprites[sprite->data[2]].pos2.x = 0; - move_anim_8074EE0(sprite); - } - - sprite->data[0]--; -} - -void sub_80CF3C4(struct Sprite* sprite) -{ - u8 a; - sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 2); - sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 3); - a = gObjectBankIDs[gBattleAnimBankTarget]; - if (GetBankSide(gBattleAnimBankAttacker) != 0) - { - sprite->pos1.x -= gBattleAnimArgs[0]; - } - else - { - sprite->pos1.x += gBattleAnimArgs[0]; - } - - sprite->pos1.y += gBattleAnimArgs[1]; - sprite->data[0] = gBattleAnimArgs[2]; - sprite->data[1] = gBattleAnimArgs[3]; - sprite->data[2] = a; - sprite->callback = sub_80CF374; - sprite->invisible = 1; -} - -void sub_80CF458(struct Sprite* sprite) -{ - sub_80787B0(sprite, 1); - sprite->data[0] = gBattleAnimArgs[2]; - sprite->data[1] = gBattleAnimArgs[3]; - sprite->data[5] = gBattleAnimArgs[4]; - sprite->callback = sub_80782D8; - StoreSpriteCallbackInData(sprite, sub_80CF490); -} - -void sub_80CF490(struct Sprite* sprite) -{ - sprite->data[0] = sprite->data[1]; - sprite->data[2] = sprite->pos1.x; - sprite->data[4] = sprite->pos1.y + 15; - sprite->callback = sub_8078B34; - StoreSpriteCallbackInData(sprite, sub_80CF4B8); -} - -void sub_80CF4B8(struct Sprite* sprite) -{ - if (sprite->data[5] == 0) - move_anim_8072740(sprite); - else - sprite->data[5]--; -} - -void sub_80CF4D8(u8 taskId) -{ - sub_8078E70(gObjectBankIDs[gBattleAnimBankAttacker], 0); - gTasks[taskId].func = sub_80CF514; -} - -void sub_80CF514(u8 taskId) -{ - u8 a = gObjectBankIDs[gBattleAnimBankAttacker]; - s16 b; - if (GetBankSide(gBattleAnimBankAttacker) == 0) - { - b = -gTasks[taskId].data[0]; - } - else - { - b = gTasks[taskId].data[0]; - } - - obj_id_set_rotscale(a, 0x100, 0x100, b); - if (gTasks[taskId].data[1] == 0) - { - gTasks[taskId].data[0] += 0xB0; - gSprites[a].pos2.y++; - } - else if (gTasks[taskId].data[1] == 1) - { - if (++gTasks[taskId].data[3] == 0x1E) - gTasks[taskId].data[1] = 2; - - return; - } - else - { - gTasks[taskId].data[0] -= 0xB0; - gSprites[a].pos2.y--; - } - - sub_8078F9C(a); - if (gTasks[taskId].data[0] == 0xF20 || gTasks[taskId].data[0] == 0) - { - if (gTasks[taskId].data[1] == 2) - { - sub_8078F40(a); - DestroyAnimVisualTask(taskId); - } - else - { - gTasks[taskId].data[1]++; - } - } -} - -void sub_80CF610(struct Sprite* sprite) -{ - sub_8078650(sprite); - sub_807867C(sprite, gBattleAnimArgs[0]); - sprite->pos1.y += gBattleAnimArgs[1]; - if (GetBankSide(gBattleAnimBankAttacker) != 0) - { - sprite->hFlip = 1; - if (gBattleAnimArgs[2] != 0) - sprite->vFlip = 1; - } - else - { - if (gBattleAnimArgs[2] != 0) - sprite->vFlip = 1; - } - - sprite->callback = sub_8078600; - StoreSpriteCallbackInData(sprite, move_anim_8072740); -} - -void sub_80CF690(struct Sprite* sprite) -{ - sub_80787B0(sprite, 0); - sprite->callback = sub_80785E4; - StoreSpriteCallbackInData(sprite, sub_80CF6B4); -} - -void sub_80CF6B4(struct Sprite* sprite) -{ - sprite->data[0] = 6; - sprite->data[2] = sprite->pos1.x; - sprite->data[4] = sprite->pos1.y - 32; - sprite->callback = sub_8078B34; - StoreSpriteCallbackInData(sprite, move_anim_8072740); -} - -//sonic boom -void sub_80CF6DC(struct Sprite* sprite) -{ - s16 a; - s16 b; - u16 c; - - if (NotInBattle()) - { - gBattleAnimArgs[2] = -gBattleAnimArgs[2]; - } - else if (GetBankSide(gBattleAnimBankAttacker) != 0) - { - gBattleAnimArgs[2] = -gBattleAnimArgs[2]; - gBattleAnimArgs[1] = -gBattleAnimArgs[1]; - gBattleAnimArgs[3] = -gBattleAnimArgs[3]; - } - - sub_80787B0(sprite, 1); - a = sub_8077ABC(gBattleAnimBankTarget, 2) + gBattleAnimArgs[2]; - b = sub_8077ABC(gBattleAnimBankTarget, 3) + gBattleAnimArgs[3]; - c = sub_80790F0(a - sprite->pos1.x, b - sprite->pos1.y); - c += 0xF000; - if (NotInBattle()) - c -= 0x6000; - - sub_8078FDC(sprite, 0, 0x100, 0x100, c); - sprite->data[0] = gBattleAnimArgs[4]; - sprite->data[2] = a; - sprite->data[4] = b; - sprite->callback = sub_8078B34; - StoreSpriteCallbackInData(sprite, move_anim_8072740); -} - -void sub_80CF7E0(struct Sprite* sprite) -{ - if (sprite->data[0]-- <= 0) - { - gTasks[sprite->data[7]].data[1]--; - DestroySprite(sprite); - } -} - -void sub_80CF814(struct Sprite* sprite) -{ - struct Task* task = &gTasks[sprite->data[7]]; - if (sprite->data[0] > task->data[5]) - { - sprite->data[5] += sprite->data[3]; - sprite->data[6] += sprite->data[4]; - } - else - { - sprite->data[5] -= sprite->data[3]; - sprite->data[6] -= sprite->data[4]; - } - - sprite->data[1] += sprite->data[5]; - sprite->data[2] += sprite->data[6]; - if (1 & task->data[7]) - sprite->pos2.x = ((u16)sprite->data[1] >> 8) * -1; - else - sprite->pos2.x = (u16)sprite->data[1] >> 8; - - if (1 & task->data[8]) - sprite->pos2.y = ((u16)sprite->data[2] / 256u) * -1; - else - sprite->pos2.y = (u16)sprite->data[2] / 256u; - - if (sprite->data[0]-- <= 0) - { - sprite->data[0] = 30; - sprite->callback = sub_80CF7E0; - } -} - -//air cutter -void sub_80CF8B8(struct Sprite* sprite) -{ - s16 a; - s16 b; - s16 c; - - struct Task* task = &gTasks[sprite->data[7]]; - sprite->data[1] += (-2 & task->data[7]); - sprite->data[2] += (-2 & task->data[8]); - if (1 & task->data[7]) - sprite->pos2.x = ((u16)sprite->data[1] >> 8) * -1; - else - sprite->pos2.x = (u16)sprite->data[1] >> 8; - - if (1 & task->data[8]) - sprite->pos2.y = ((u16)sprite->data[2] / 256u) * -1; - else - sprite->pos2.y = (u16)sprite->data[2] / 256u; - - if (sprite->data[0]-- <= 0) - { - sprite->data[0] = 8; - task->data[5] = 4; - a = sub_81174E0(0x1000); - sprite->pos1.x += sprite->pos2.x; - sprite->pos1.y += sprite->pos2.y; - sprite->pos2.y = 0; - sprite->pos2.x = 0; - if (task->data[11] >= sprite->pos1.x) - b = (task->data[11] - sprite->pos1.x) << 8; - else - b = (sprite->pos1.x - task->data[11]) << 8; - - if (task->data[12] >= sprite->pos1.y) - c = (task->data[12] - sprite->pos1.y) << 8; - else - c = (sprite->pos1.y - task->data[12]) << 8; - - sprite->data[2] = 0; - sprite->data[1] = 0; - sprite->data[6] = 0; - sprite->data[5] = 0; - sprite->data[3] = sub_81174C4(sub_81174C4(b, a), sub_81174E0(0x1C0)); - sprite->data[4] = sub_81174C4(sub_81174C4(c, a), sub_81174E0(0x1C0)); - sprite->callback = sub_80CF814; - } -} - -void sub_80CF9F8(u8 taskId) -{ - if (gTasks[taskId].data[1] == 0) - DestroyAnimVisualTask(taskId); -} - -void sub_80CFA20(u8 taskId) -{ - if (gTasks[taskId].data[0]-- <= 0) - { - u8 spriteId; - struct Sprite* sprite; - spriteId = CreateSprite(&gSpriteTemplate_83D74BC, gTasks[taskId].data[9], gTasks[taskId].data[10], gTasks[taskId].data[2] - gTasks[taskId].data[1]); - sprite = &gSprites[spriteId]; - switch (gTasks[taskId].data[4]) - { - case 1: - sprite->oam.matrixNum |= 24; - break; - case 2: - sprite->oam.matrixNum = 8; - break; - } - - sprite->data[0] = gTasks[taskId].data[5] - gTasks[taskId].data[6]; - sprite->data[7] = taskId; - gTasks[taskId].data[gTasks[taskId].data[1] + 13] = spriteId; - gTasks[taskId].data[0] = gTasks[taskId].data[3]; - gTasks[taskId].data[1]++; - PlaySE12WithPanning(0x9A, sub_8076F98(-0x3F)); - if (gTasks[taskId].data[1] > 2) - gTasks[taskId].func = sub_80CF9F8; - } -} - -void sub_80CFB04(u8 taskId) -{ - s16 r9 = 0; - s16 r6 = 0; - s16 sp1 = 0; - s16 sp2 = 0; - s16 r4; - - if (NotInBattle()) - { - gTasks[taskId].data[4] = 2; - gBattleAnimArgs[0] = -gBattleAnimArgs[0]; - if (gBattleAnimArgs[2] & 1) - gBattleAnimArgs[2] &= ~1; - else - gBattleAnimArgs[2] |= 1; - } - else - { - if ((gBanksBySide[gBattleAnimBankTarget] & 1) == 0) - { - gTasks[taskId].data[4] = 1; - gBattleAnimArgs[0] = -gBattleAnimArgs[0]; - gBattleAnimArgs[1] = -gBattleAnimArgs[1]; - if (gBattleAnimArgs[2] & 1) - gBattleAnimArgs[2] &= ~1; - else - gBattleAnimArgs[2] |= 1; - } - } - r6 = gTasks[taskId].data[9] = sub_8077ABC(gBattleAnimBankAttacker, 0); - r9 = gTasks[taskId].data[10] = sub_8077ABC(gBattleAnimBankAttacker, 1); - if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) - && IsAnimBankSpriteVisible(gBattleAnimBankTarget ^ 2)) - { - sub_807A3FC(gBattleAnimBankTarget, 0, &sp1, &sp2); - } - else - { - sp1 = sub_8077ABC(gBattleAnimBankTarget, 0); - sp2 = sub_8077ABC(gBattleAnimBankTarget, 1); - } - - sp1 = gTasks[taskId].data[11] = sp1 + gBattleAnimArgs[0]; - sp2 = gTasks[taskId].data[12] = sp2 + gBattleAnimArgs[1]; - if (sp1 >= r6) - r4 = sp1 - r6; - else - r4 = r6 - sp1; - - gTasks[taskId].data[5] = sub_81174C4(r4, sub_81174E0(gBattleAnimArgs[2] & ~1)); - gTasks[taskId].data[6] = sub_81174C4(gTasks[taskId].data[5], 0x80); - gTasks[taskId].data[7] = gBattleAnimArgs[2]; - if (sp2 >= r9) - { - r4 = sp2 - r9; - gTasks[taskId].data[8] = sub_81174C4(r4, sub_81174E0(gTasks[taskId].data[5])) & ~1; - } - else - { - r4 = r9 - sp2; - gTasks[taskId].data[8] = sub_81174C4(r4, sub_81174E0(gTasks[taskId].data[5])) | 1; - } - - gTasks[taskId].data[3] = gBattleAnimArgs[3]; - if (gBattleAnimArgs[4] & 0x80) - { - gBattleAnimArgs[4] ^= 0x80; - if (gBattleAnimArgs[4] >= 64) - { - u16 var = sub_8079E90(gBattleAnimBankTarget) + (gBattleAnimArgs[4] - 64); - gTasks[taskId].data[2] = var; - } - else - { - u16 var = sub_8079E90(gBattleAnimBankTarget) - gBattleAnimArgs[4]; - gTasks[taskId].data[2] = var; - } - } - else - { - if (gBattleAnimArgs[4] >= 64) - { - u16 var = sub_8079E90(gBattleAnimBankTarget) + (gBattleAnimArgs[4] - 64); - gTasks[taskId].data[2] = var; - } - else - { - u16 var = sub_8079E90(gBattleAnimBankTarget) - gBattleAnimArgs[4]; - gTasks[taskId].data[2] = var; - } - } - - if (gTasks[taskId].data[2] < 3) - gTasks[taskId].data[2] = 3; - - gTasks[taskId].func = sub_80CFA20; -} - -void sub_80CFDFC(struct Sprite* sprite) -{ - sub_80787B0(sprite, 0); - sprite->data[0] = 0x100 + (IndexOfSpritePaletteTag(gSpriteTemplate_83D75AC.paletteTag) << 4); - sprite->callback = sub_80CFE2C; -} - -#ifdef NONMATCHING -void sub_80CFE2C(struct Sprite* sprite) -{ - u16 r7; - u16* r1; - u16* r2; - int i; - if (++sprite->data[1] == 2) - { - sprite->data[1] = 0; - r7 = gPlttBufferFaded[sprite->data[0] + 8]; - r2 = &gPlttBufferFaded[0x10]; - r1 = &gPlttBufferFaded[sprite->data[0] + 9]; - for (i = 7; i >= 0; i--) - { - *r2 = *r1; - r1++; - r2++; - } - - gPlttBufferFaded[sprite->data[0] + 15] = r7; - if (++sprite->data[2] == 0x18) - move_anim_8072740(sprite); - } -} -#else -__attribute__((naked)) -void sub_80CFE2C(struct Sprite* sprite) -{ - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - adds r4, r0, 0\n\ - ldrh r0, [r4, 0x30]\n\ - adds r0, 0x1\n\ - strh r0, [r4, 0x30]\n\ - lsls r0, 16\n\ - asrs r0, 16\n\ - cmp r0, 0x2\n\ - bne _080CFE90\n\ - movs r0, 0\n\ - strh r0, [r4, 0x30]\n\ - ldrh r5, [r4, 0x2E]\n\ - ldr r1, _080CFE98 @ =gPlttBufferFaded\n\ - adds r0, r5, 0\n\ - adds r0, 0x8\n\ - lsls r0, 1\n\ - adds r0, r1\n\ - ldrh r7, [r0]\n\ - adds r6, r1, 0 @puts gPlttBufferFaded in r6\n\ - adds r1, r5, 0\n\ - adds r1, 0x9\n\ - lsls r0, r5, 1\n\ - adds r0, r6 \n\ - adds r2, r0, 0\n\ - adds r2, 0x10\n\ - movs r3, 0x7\n\ - lsls r1, 1\n\ - adds r1, r6 \n\ -_080CFE64:\n\ - ldrh r0, [r1]\n\ - strh r0, [r2]\n\ - adds r1, 0x2\n\ - adds r2, 0x2\n\ - subs r3, 0x1\n\ - cmp r3, 0\n\ - bge _080CFE64\n\ - adds r0, r5, 0\n\ - adds r0, 0xF\n\ - lsls r0, 1\n\ - adds r0, r6\n\ - strh r7, [r0]\n\ - ldrh r0, [r4, 0x32]\n\ - adds r0, 0x1\n\ - strh r0, [r4, 0x32]\n\ - lsls r0, 16\n\ - asrs r0, 16\n\ - cmp r0, 0x18\n\ - bne _080CFE90\n\ - adds r0, r4, 0\n\ - bl move_anim_8072740\n\ -_080CFE90:\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_080CFE98: .4byte gPlttBufferFaded\n\ -.syntax divided\n"); -} -#endif - -void sub_80CFE9C(struct Sprite* sprite) -{ - s16 r6; - s16 r7; - u16 var; - - sub_80787B0(sprite, 1); - r6 = sub_8077ABC(gBattleAnimBankTarget, 2); - r7 = sub_8077ABC(gBattleAnimBankTarget, 3) + gBattleAnimArgs[3]; - if (GetBankSide(gBattleAnimBankAttacker) != 0) - gBattleAnimArgs[2] = -gBattleAnimArgs[2]; - - r6 += gBattleAnimArgs[2]; - var = sub_80790F0(r6 - sprite->pos1.x, r7 - sprite->pos1.y); - var += 0xC000; - sub_8078FDC(sprite, 0, 0x100, 0x100, var); - sprite->data[0] = gBattleAnimArgs[4]; - sprite->data[2] = r6; - sprite->data[4] = r7; - sprite->callback = sub_8078C00; - StoreSpriteCallbackInData(sprite, move_anim_8072740); -} - -void sub_80CFF50(struct Sprite* sprite) -{ - sprite->data[2] = -16; - sprite->pos1.y += 8; - sprite->callback = sub_80CFF68; -} - -void sub_80CFF68(struct Sprite* sprite) -{ - sprite->data[0] += 0x80; - sprite->pos2.x = sprite->data[0] >> 8; - if (GetBankSide(gBattleAnimBankAttacker) == 0) - sprite->pos2.x = -sprite->pos2.x; - - sprite->pos2.y = Sin(sprite->data[1], sprite->data[2]); - sprite->data[1] += 5; - if (sprite->data[1] > 0x7E) - { - sprite->data[1] = 0; - sprite->data[2] /= 2; - if (++sprite->data[3] == 2) - move_anim_8072740(sprite); - } -} - -void sub_80CFFD8(struct Sprite* sprite) -{ - sub_80787B0(sprite, 1); - sprite->data[0] = 20; - sprite->data[2] = sub_8077ABC(gBattleAnimBankTarget, 2); - sprite->data[4] = sub_8077ABC(gBattleAnimBankTarget, 3); - sprite->callback = sub_8078B34; - sprite->affineAnimPaused = 1; - StoreSpriteCallbackInData(sprite, sub_80D0030); -} - -void sub_80D0030(struct Sprite* sprite) -{ - int i; - u16 rand; - s16* ptr; - PlaySE12WithPanning(0xA6, sub_8076F98(0x3F)); - sprite->pos1.x += sprite->pos2.x; - sprite->pos1.y += sprite->pos2.y; - sprite->pos2.y = 0; - sprite->pos2.x = 0; - ptr = &sprite->data[7]; - for (i = 0; i < 8; i++) - { - ptr[i - 7] = 0; - } - - rand = Random(); - sprite->data[6] = 0xFFF4 - (rand & 7); - rand = Random(); - sprite->data[7] = (rand % 0xA0) + 0xA0; - sprite->callback = sub_80D00B4; - sprite->affineAnimPaused = 0; -} - -void sub_80D00B4(struct Sprite* sprite) -{ - sprite->data[0] += sprite->data[7]; - sprite->pos2.x = sprite->data[0] >> 8; - if (sprite->data[7] & 1) - sprite->pos2.x = -sprite->pos2.x; - - sprite->pos2.y = Sin(sprite->data[1], sprite->data[6]); - sprite->data[1] += 8; - if (sprite->data[1] > 0x7E) - { - sprite->data[1] = 0; - sprite->data[2] /= 2; - if (++sprite->data[3] == 1) - move_anim_8072740(sprite); - } -} - -void sub_80D0118(struct Sprite* sprite) -{ - sub_80787B0(sprite, 0); - if (GetBankSide(gBattleAnimBankAttacker) == 0) - sprite->pos1.y += 16; - - sprite->data[0] = gBattleAnimArgs[4]; - sprite->data[1] = gBattleAnimArgs[2]; - sprite->data[2] = gBattleAnimArgs[5]; - sprite->data[3] = gBattleAnimArgs[6]; - sprite->data[4] = gBattleAnimArgs[3]; - sprite->callback = sub_8078114; - StoreSpriteCallbackInData(sprite, move_anim_8072740); - sprite->callback(sprite); -} - -void sub_80D0178(struct Sprite* sprite) -{ - s16 r7 = 32; - s16 r4 = -32; - s16 r8 = 16; - s16 r6 = -16; - if (gBattleAnimArgs[0] != 0) - { - r7 = r4; - r4 = 32; - r8 = r6; - r6 = 16; - StartSpriteAnim(sprite, 1); - } - - sprite->pos1.x += r7; - sprite->pos1.y += r4; - sprite->data[0] = 6; - sprite->data[2] = sub_8077ABC(gBattleAnimBankTarget, 2) + r8; - sprite->data[4] = sub_8077ABC(gBattleAnimBankTarget, 3) + r6; - sprite->callback = sub_8078B34; - StoreSpriteCallbackInData(sprite, sub_80D020C); -} - -void sub_80D020C(struct Sprite* sprite) -{ - if (sprite->animEnded == 1) - move_anim_8072740(sprite); -} - -void sub_80D0228(struct Sprite* sprite) -{ - s16 r8 = 32; - s16 r4 = -32; - s16 r9 = 16; - s16 r6 = -16; - if (gBattleAnimArgs[0] != 0) - { - r8 = r4; - r4 = 32; - r9 = r6; - r6 = 16; - StartSpriteAnim(sprite, gBattleAnimArgs[0]); - } - - sprite->pos1.x += r8; - sprite->pos1.y += r4; - sprite->data[0] = 6; - sprite->data[1] = sprite->pos1.x; - sprite->data[2] = sub_8077ABC(gBattleAnimBankTarget, 2) + r9; - sprite->data[3] = sprite->pos1.y; - sprite->data[4] = sub_8077ABC(gBattleAnimBankTarget, 3) + r6; - obj_translate_based_on_private_1_2_3_4(sprite); - sprite->data[5] = gBattleAnimArgs[0]; - sprite->data[6] = sprite->data[0]; - sprite->callback = sub_80D02D0; -} - -void sub_80D02D0(struct Sprite* sprite) -{ - if (sub_8078B5C(sprite) && sprite->animEnded == 1) - { - SeekSpriteAnim(sprite, 0); - sprite->animPaused = 1; - sprite->pos1.x += sprite->pos2.x; - sprite->pos1.y += sprite->pos2.y; - sprite->pos2.x = 2; - sprite->pos2.y = -2; - sprite->data[0] = sprite->data[6]; - sprite->data[1] ^= 1; - sprite->data[2] ^= 1; - sprite->data[4] = 0; - sprite->data[3] = 0; - sprite->callback = sub_80D0344; - } -} - -void sub_80D0344(struct Sprite* sprite) -{ - if (sprite->data[3]) - { - sprite->pos2.x = -sprite->pos2.x; - sprite->pos2.y = -sprite->pos2.y; - } - - sprite->data[3] ^= 1; - if (++sprite->data[4] == 0x33) - { - sprite->pos2.y = 0; - sprite->pos2.x = 0; - sprite->data[4] = 0; - sprite->data[3] = 0; - sprite->animPaused = 0; - StartSpriteAnim(sprite, sprite->data[5] ^ 1); - sprite->callback = sub_80D03A8; - } -} - -void sub_80D03A8(struct Sprite* sprite) -{ - if (sub_8078B5C(sprite) != 0) - move_anim_8072740(sprite); -} - -void sub_80D03C4(u8 taskId) -{ - u8 spriteId = GetAnimBankSpriteId(1); - sub_8078E70(spriteId, 1); - obj_id_set_rotscale(spriteId, 0xD0, 0xD0, 0); - sub_8079108(gSprites[spriteId].oam.paletteNum + 16, 0); - gTasks[taskId].data[0] = 0x50; - gTasks[taskId].func = sub_80D0428; -} - -void sub_80D0428(u8 taskId) -{ - if (--gTasks[taskId].data[0] == -1) - { - u8 spriteId = GetAnimBankSpriteId(1); - sub_8078F40(spriteId); - sub_8079108(gSprites[spriteId].oam.paletteNum + 16, 1); - DestroyAnimVisualTask(taskId); - } -} - -void sub_80D0488(u8 taskId) -{ - struct Task* task = &gTasks[taskId]; - u8 spriteId = GetAnimBankSpriteId(0); - task->data[0] = spriteId; - sub_8078E70(spriteId, 0); - task->data[1] = 0; - task->data[2] = 0; - task->data[3] = 0; - task->data[4] = 0x100; - task->data[5] = 0; - task->data[6] = 0; - task->data[7] = sub_8079E90(gBattleAnimBankAttacker); - task->func = sub_80D04E0; -} - -void sub_80D04E0(u8 taskId) -{ - struct Task* task = &gTasks[taskId]; - switch (task->data[1]) - { - case 0: - if (task->data[2] == 0 || task->data[2] == 3 || task->data[2] == 6) - sub_80D0614(task, taskId); - task->data[2]++; - task->data[4] += 0x28; - obj_id_set_rotscale(task->data[0], task->data[4], task->data[4], 0); - sub_8079A64(task->data[0]); - if (task->data[2] == 32) - { - task->data[5]++; - task->data[1]++; - } - break; - case 1: - if (task->data[6] == 0) - { - if (task->data[5] == 3) - { - task->data[2] = 0; - task->data[1] = 3; - } - else - { - task->data[2] = 0; - task->data[3] = 0; - task->data[4] = 0x100; - obj_id_set_rotscale(task->data[0], task->data[4], task->data[4], 0); - sub_8079A64(task->data[0]); - task->data[1] = 2; - } - } - break; - case 2: - task->data[1] = 0; - break; - case 3: - if (++task->data[2] > 32) - { - task->data[2] = 0; - task->data[1]++; - } - break; - case 4: - task->data[2] += 2; - task->data[4] -= 0x50; - obj_id_set_rotscale(task->data[0], task->data[4], task->data[4], 0); - sub_8079A64(task->data[0]); - if (task->data[2] == 32) - { - task->data[2] = 0; - task->data[1]++; - } - break; - case 5: - sub_8078F40(task->data[0]); - gSprites[task->data[15]].pos2.y = 0; - DestroyAnimVisualTask(taskId); - break; - } -} - -#ifdef NONMATCHING -void sub_80D0614(struct Task* task, u8 taskId) -{ - s16 r8 = duplicate_obj_of_side_rel2move_in_transparent_mode(0); - if (r8 >= 0) - { - u8 r6 = AllocOamMatrix(); - if (r6 == 0xFF) - { - obj_delete_but_dont_free_vram(&gSprites[r8]); - } - else - { - gSprites[r8].oam.objMode = 1; - gSprites[r8].oam.affineMode = 3; - gSprites[r8].affineAnimPaused = 1; - gSprites[r8].oam.matrixNum = r6; - gSprites[r8].subpriority = task->data[7] - task->data[3]; - task->data[3]++; - task->data[6]++; - gSprites[r8].data[0] = 16; - gSprites[r8].data[1] = taskId; - gSprites[r8].data[2] = 6; - gSprites[r8].callback = sub_80D0704; - obj_id_set_rotscale(r8, task->data[4], task->data[4], 0); - gSprites[r8].oam.affineMode = 1; - CalcCenterToCornerVec(&gSprites[r8], gSprites[r8].oam.shape, gSprites[r8].oam.size, gSprites[r8].oam.affineMode); - } - } -} -#else -__attribute__((naked)) -void sub_80D0614(struct Task* task, u8 taskId) -{ - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r9\n\ - mov r6, r8\n\ - push {r6,r7}\n\ - adds r7, r0, 0 @r7 is task\n\ - lsls r1, 24\n\ - lsrs r1, 24\n\ - mov r9, r1 @r9 is taskId\n\ - movs r0, 0\n\ - bl duplicate_obj_of_side_rel2move_in_transparent_mode\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - mov r8, r0\n\ - lsls r0, 16\n\ - asrs r4, r0, 16\n\ - cmp r4, 0\n\ - blt _080D06EE @jump to bottom\n\ - bl AllocOamMatrix\n\ - lsls r0, 24\n\ - lsrs r6, r0, 24\n\ - cmp r6, 0xFF\n\ - bne _080D0658\n\ - lsls r0, r4, 4\n\ - adds r0, r4\n\ - lsls r0, 2\n\ - ldr r1, _080D0654 @ =gSprites\n\ - adds r0, r1\n\ - bl obj_delete_but_dont_free_vram\n\ - b _080D06EE @ jump to bottom\n\ - .align 2, 0\n\ -_080D0654: .4byte gSprites\n\ -_080D0658:\n\ - ldr r5, _080D06FC @ =gSprites\n\ - lsls r3, r4, 4\n\ - adds r3, r4\n\ - lsls r3, 2\n\ - adds r4, r3, r5\n\ - ldrb r1, [r4, 0x1]\n\ - movs r0, 0xD\n\ - negs r0, r0\n\ - ands r0, r1\n\ - movs r1, 0x4\n\ - orrs r0, r1\n\ - movs r1, 0x3\n\ - orrs r0, r1\n\ - strb r0, [r4, 0x1]\n\ - adds r2, r4, 0\n\ - adds r2, 0x2C\n\ - ldrb r0, [r2]\n\ - movs r1, 0x80\n\ - orrs r0, r1\n\ - strb r0, [r2]\n\ - movs r0, 0x1F\n\ - ands r6, r0\n\ - lsls r2, r6, 1\n\ - ldrb r1, [r4, 0x3]\n\ - movs r0, 0x3F\n\ - negs r0, r0\n\ - ands r0, r1\n\ - orrs r0, r2\n\ - strb r0, [r4, 0x3]\n\ - ldrb r0, [r7, 0x16]\n\ - ldrb r1, [r7, 0xE]\n\ - subs r0, r1\n\ - adds r1, r4, 0\n\ - adds r1, 0x43\n\ - strb r0, [r1]\n\ - ldrh r0, [r7, 0xE]\n\ - adds r0, 0x1\n\ - strh r0, [r7, 0xE]\n\ - ldrh r0, [r7, 0x14]\n\ - adds r0, 0x1\n\ - strh r0, [r7, 0x14]\n\ - movs r0, 0x10\n\ - strh r0, [r4, 0x2E]\n\ - mov r0, r9\n\ - strh r0, [r4, 0x30]\n\ - movs r0, 0x6\n\ - strh r0, [r4, 0x32]\n\ - adds r5, 0x1C\n\ - adds r3, r5\n\ - ldr r0, _080D0700 @ =sub_80D0704\n\ - str r0, [r3]\n\ - mov r1, r8 @duplicate_obj_of_side_rel2move_in_transparent_mode(0)\n\ - lsls r0, r1, 24\n\ - lsrs r0, 24\n\ - movs r1, 0x10\n\ - ldrsh r2, [r7, r1]\n\ - adds r1, r2, 0\n\ - movs r3, 0\n\ - bl obj_id_set_rotscale\n\ - ldrb r0, [r4, 0x1]\n\ - movs r3, 0x4\n\ - negs r3, r3\n\ - ands r3, r0\n\ - movs r0, 0x1\n\ - orrs r3, r0\n\ - strb r3, [r4, 0x1]\n\ - lsrs r1, r3, 6\n\ - ldrb r2, [r4, 0x3]\n\ - lsrs r2, 6\n\ - lsls r3, 30\n\ - lsrs r3, 30\n\ - adds r0, r4, 0\n\ - bl CalcCenterToCornerVec\n\ -_080D06EE:\n\ - pop {r3,r4}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_080D06FC: .4byte gSprites\n\ -_080D0700: .4byte sub_80D0704\n\ -.syntax divided\n"); -} -#endif - -void sub_80D0704(struct Sprite* sprite) -{ - if (--sprite->data[0] == 0) - { - gTasks[sprite->data[1]].data[sprite->data[2]]--; - FreeOamMatrix(sprite->oam.matrixNum); - obj_delete_but_dont_free_vram(sprite); - } -} - -void sub_80D074C(u8 taskId) -{ - struct Task* task = &gTasks[taskId]; - if (gBattleAnimArgs[1] == 0) - { - DestroyAnimVisualTask(taskId); - } - else - { - u8 spriteId = GetAnimBankSpriteId(gBattleAnimArgs[0]); - task->data[0] = spriteId; - task->data[1] = 0; - task->data[2] = gBattleAnimArgs[1]; - task->data[3] = 0; - task->data[4] = 0; - sub_80798F4(task, spriteId, &gUnknown_083D76F4); - task->func = sub_80D07AC; - } -} - -void sub_80D07AC(u8 taskId) -{ - struct Task* task = &gTasks[taskId]; - switch (task->data[1]) - { - case 0: - sub_807992C(task); - task->data[4] += 3; - gSprites[task->data[0]].pos2.y += task->data[4]; - if (++task->data[3] > 7) - { - task->data[3] = 0; - task->data[1]++; - } - break; - case 1: - sub_807992C(task); - gSprites[task->data[0]].pos2.y += task->data[4]; - if (++task->data[3] > 7) - { - task->data[3] = 0; - task->data[1]++; - } - break; - case 2: - if (task->data[4] != 0) - { - gSprites[task->data[0]].pos2.y -= 2; - task->data[4] -= 2; - } - else - task->data[1]++; - break; - case 3: - if (!sub_807992C(task)) - { - if (--task->data[2] == 0) - { - gSprites[task->data[0]].pos2.y = 0; - DestroyAnimVisualTask(taskId); - } - else - { - sub_80798F4(task, task->data[0], &gUnknown_083D76F4); - task->data[1] = 0; - } - } - break; - } -} - -void sub_80D08C8(u8 taskId) -{ - struct Task* task = &gTasks[taskId]; - u8 spriteId = GetAnimBankSpriteId(0); - sub_80798F4(task, spriteId, &gUnknown_083D7714); - task->func = sub_80D0904; -} - -void sub_80D0904(u8 taskId) -{ - struct Task* task = &gTasks[taskId]; - if (!sub_807992C(task)) - DestroyAnimVisualTask(taskId); -} - -void sub_80D0930(struct Sprite* sprite) -{ - if (GetBankSide(gBattleAnimBankAttacker) == 0) - { - StartSpriteAnim(sprite, 0); - sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 2) + 32; - sprite->data[1] = 0x40; - } - else - { - StartSpriteAnim(sprite, 1); - sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 2) - 32; - sprite->data[1] = -0x40; - } - - sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 3); - sprite->data[0] = 0x34; - sprite->data[2] = 0; - sprite->data[3] = 0; - sprite->data[4] = 0; - StoreSpriteCallbackInData(sprite, move_anim_8072740); - sprite->callback = sub_8078394; -} - -void sub_80D09C0(struct Sprite* sprite) -{ - u8 bank; - if (gBattleAnimArgs[0] == 0) - bank = gBattleAnimBankAttacker; - else - bank = gBattleAnimBankTarget; - - if (GetBankSide(bank) == 1) - { - gBattleAnimArgs[1] *= -1; - } - - sprite->pos1.x = sub_8077ABC(bank, 2) + gBattleAnimArgs[1]; - sprite->pos1.y = sub_8077ABC(bank, 3) + gBattleAnimArgs[2]; - if (sprite->pos1.y <= 7) - sprite->pos1.y = 8; - - StoreSpriteCallbackInData(sprite, move_anim_8074EE0); - sprite->callback = sub_80785E4; -} - -void sub_80D0A4C(u8 taskId) -{ - struct Task* task = &gTasks[taskId]; - u8 spriteId = GetAnimBankSpriteId(0); - task->data[0] = spriteId; - task->data[1] = 0; - sub_80798F4(task, spriteId, &gUnknown_083D77B0); - task->func = sub_80D0A8C; -} - -void sub_80D0A8C(u8 taskId) -{ - struct Task* task = &gTasks[taskId]; - if (!sub_807992C(task)) - DestroyAnimVisualTask(taskId); -} - -void sub_80D0AB8(u8 taskId) -{ - struct Task* task = &gTasks[taskId]; - task->data[0] = GetAnimBankSpriteId(0); - task->data[1] = 0; - task->data[2] = 4; - task->data[3] = 7; - task->data[4] = 3; - task->data[5] = gSprites[task->data[0]].pos1.x; - task->data[6] = gSprites[task->data[0]].pos1.y; - task->data[7] = 0; - task->data[8] = 0; - task->data[9] = 2; - if (GetBankSide(gBattleAnimBankAttacker) == 1) - task->data[2] *= -1; - - task->func = sub_80D0B3C; -} - -void sub_80D0B3C(u8 taskId) -{ - struct Task* task = &gTasks[taskId]; - if (++task->data[7] > 2) - { - task->data[7] = 0; - task->data[8]++; - if ((task->data[8] & 1) != 0) - { - gSprites[task->data[0]].pos1.y += task->data[9]; - } - else - { - gSprites[task->data[0]].pos1.y -= task->data[9]; - } - } - switch (task->data[1]) - { - case 0: - gSprites[task->data[0]].pos1.x += task->data[2]; - if (--task->data[3] == 0) - { - task->data[3] = 14; - task->data[1] = 1; - } - break; - case 1: - gSprites[task->data[0]].pos1.x -= task->data[2]; - if (--task->data[3] == 0) - { - task->data[3] = 7; - task->data[1] = 2; - } - break; - case 2: - gSprites[task->data[0]].pos1.x += task->data[2]; - if (--task->data[3] == 0) - { - if (--task->data[4] != 0) - { - task->data[3] = 7; - task->data[1] = 0; - } - else - { - if ((task->data[8] & 1) != 0) - { - gSprites[task->data[0]].pos1.y -= task->data[9]; - } - DestroyAnimVisualTask(taskId); - } - } - break; - } -} - -void sub_80D0C88(u8 taskId) -{ - struct Task* task = &gTasks[taskId]; - struct UnknownTaskStruct sp; - s16 i; - task->data[0] = sub_8077FC0(gBattleAnimBankTarget) + 32; - task->data[1] = 4; - task->data[2] = 0; - task->data[3] = 0; - task->data[4] = 0; - task->data[5] = 0; - task->data[15] = sub_807A100(gBattleAnimBankTarget, 0); - if (GetBankIdentity_permutated(gBattleAnimBankTarget) == 1) - { - task->data[6] = gUnknown_030042C0; - sp.dest = (u16 *)REG_ADDR_BG1HOFS; - } - else - { - task->data[6] = gUnknown_03004288; - sp.dest = (u16 *)REG_ADDR_BG2HOFS; - } - - for (i = task->data[0] - 0x40; i <= task->data[0];i++) - { - if (i >= 0) - { - gUnknown_03004DE0[0][i] = task->data[6] + 0xF0; - gUnknown_03004DE0[1][i] = task->data[6] + 0xF0; - } - } - - sp.control = 0xa2600001; - sp.unk8 = 1; - sp.unk9 = 0; - sub_80895F8(sp); - task->func = sub_80D0D68; -} - -#ifdef NONMATCHING -void sub_80D0D68(u8 taskId) -{ - struct Task* task = &gTasks[taskId]; - - switch (task->data[4]) - { - case 0: - if (++task->data[5] > 20) - task->data[4]++; - break; - case 1: - if (++task->data[1] > 3) - { - task->data[1] = 0; - task->data[2] = task->data[3] & 3; - task->data[5] = task->data[0] - task->data[3]; - switch (task->data[2]) - { - case 0: - break; - case 1: - task->data[5] -= 2; - break; - case 2: - task->data[5] += 1; - break; - case 3: - task->data[5] += 1; - break; - } - - if (task->data[5] >= 0) - { - gUnknown_03004DE0[0][task->data[5]] = task->data[6]; - gUnknown_03004DE0[1][task->data[5]] = task->data[6]; - } - - if (++task->data[3] >= task->data[15]) - { - gUnknown_03004DC0.unk15 = 3; - DestroyAnimVisualTask(taskId); - } - } - break; - } -} -#else -__attribute__((naked)) -void sub_80D0D68(u8 taskId) -{ - asm(".syntax unified\n\ - push {r4,lr}\n\ - lsls r0, 24\n\ - lsrs r4, r0, 24\n\ - lsls r0, r4, 2\n\ - adds r0, r4\n\ - lsls r0, 3\n\ - ldr r1, _080D0D88 @ =gTasks\n\ - adds r3, r0, r1\n\ - movs r1, 0x10\n\ - ldrsh r0, [r3, r1]\n\ - cmp r0, 0\n\ - beq _080D0D8C\n\ - cmp r0, 0x1\n\ - beq _080D0DA2\n\ - b _080D0E22\n\ - .align 2, 0\n\ -_080D0D88: .4byte gTasks\n\ -_080D0D8C:\n\ - ldrh r0, [r3, 0x12]\n\ - adds r0, 0x1\n\ - strh r0, [r3, 0x12]\n\ - lsls r0, 16\n\ - asrs r0, 16\n\ - cmp r0, 0x14\n\ - ble _080D0E22\n\ - ldrh r0, [r3, 0x10]\n\ - adds r0, 0x1\n\ - strh r0, [r3, 0x10]\n\ - b _080D0E22\n\ -_080D0DA2:\n\ - ldrh r0, [r3, 0xA]\n\ - adds r0, 0x1\n\ - strh r0, [r3, 0xA]\n\ - lsls r0, 16\n\ - asrs r0, 16\n\ - cmp r0, 0x3\n\ - ble _080D0E22\n\ - movs r0, 0\n\ - strh r0, [r3, 0xA]\n\ - ldrh r1, [r3, 0xE]\n\ - movs r0, 0x3\n\ - ands r0, r1\n\ - strh r0, [r3, 0xC]\n\ - ldrh r0, [r3, 0x8]\n\ - subs r0, r1\n\ - strh r0, [r3, 0x12]\n\ - movs r2, 0xC\n\ - ldrsh r1, [r3, r2]\n\ - cmp r1, 0x1\n\ - beq _080D0DD8\n\ - cmp r1, 0x1\n\ - ble _080D0DE0\n\ - cmp r1, 0x2\n\ - beq _080D0DDC\n\ - cmp r1, 0x3\n\ - beq _080D0DDC\n\ - b _080D0DE0\n\ -_080D0DD8:\n\ - subs r0, 0x2\n\ - b _080D0DDE\n\ -_080D0DDC:\n\ - adds r0, 0x1\n\ -_080D0DDE:\n\ - strh r0, [r3, 0x12]\n\ -_080D0DE0:\n\ - movs r1, 0x12\n\ - ldrsh r0, [r3, r1]\n\ - cmp r0, 0\n\ - blt _080D0E04\n\ - ldr r2, _080D0E28 @ =gUnknown_03004DE0\n\ - lsls r0, 1\n\ - adds r0, r2\n\ - ldrh r1, [r3, 0x14]\n\ - strh r1, [r0]\n\ - movs r1, 0x12\n\ - ldrsh r0, [r3, r1]\n\ - lsls r0, 1\n\ - movs r1, 0xF0\n\ - lsls r1, 3\n\ - adds r2, r1\n\ - adds r0, r2\n\ - ldrh r1, [r3, 0x14]\n\ - strh r1, [r0]\n\ -_080D0E04:\n\ - ldrh r0, [r3, 0xE]\n\ - adds r0, 0x1\n\ - strh r0, [r3, 0xE]\n\ - lsls r0, 16\n\ - asrs r0, 16\n\ - movs r2, 0x26\n\ - ldrsh r1, [r3, r2]\n\ - cmp r0, r1\n\ - blt _080D0E22\n\ - ldr r1, _080D0E2C @ =gUnknown_03004DC0\n\ - movs r0, 0x3\n\ - strb r0, [r1, 0x15]\n\ - adds r0, r4, 0\n\ - bl DestroyAnimVisualTask\n\ -_080D0E22:\n\ - pop {r4}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_080D0E28: .4byte gUnknown_03004DE0\n\ -_080D0E2C: .4byte gUnknown_03004DC0\n\ -.syntax divided\n"); -} -#endif - -void sub_80D0E30(struct Sprite* sprite) -{ - sprite->pos1.x = sub_8077ABC(gBattleAnimBankTarget, 0) - 16; - sprite->pos1.y = sub_8077FC0(gBattleAnimBankTarget) + 16; - sprite->data[0] = 0; - sprite->data[1] = 0; - sprite->data[2] = 0; - sprite->data[3] = 16; - sprite->data[4] = 0; - sprite->data[5] = sub_807A100(gBattleAnimBankTarget, 0) + 2; - sprite->data[6] = sub_8076F98(0x3F); - sprite->callback = sub_80D0E8C; -} - -void sub_80D0E8C(struct Sprite* sprite) -{ - switch (sprite->data[0]) - { - case 0: - if (++sprite->data[2] > 1) - { - sprite->data[2] = 0; - sprite->invisible = !sprite->invisible; - } - if (++sprite->data[1] > 16) - { - sprite->invisible = 0; - sprite->data[0]++; - } - break; - case 1: - if (++sprite->data[1] > 3 && sprite->data[2] < sprite->data[5]) - { - sprite->data[1] = 0; - sprite->pos1.y -= 1; - sprite->data[2]++; - if (sprite->data[2] % 10 == 0) - PlaySE12WithPanning(0xCD, sprite->data[6]); - } - sprite->data[4] += sprite->data[3]; - if (sprite->data[4] > 31) - { - sprite->data[4] = 0x40 - sprite->data[4]; - sprite->data[3] *= -1; - } - else if (sprite->data[4] <= -32) - { - sprite->data[4] = -0x40 - sprite->data[4]; - sprite->data[3] *= -1; - } - sprite->pos2.x = sprite->data[4]; - if (sprite->data[5] == sprite->data[2]) - { - sprite->data[1] = 0; - sprite->data[2] = 0; - sprite->data[0]++; - } - break; - case 2: - if (++sprite->data[2] > 1) - { - sprite->data[2] = 0; - sprite->invisible = !sprite->invisible; - } - if (++sprite->data[1] > 16) - { - sprite->invisible = 0; - move_anim_8072740(sprite); - } - break; - } -} - -void sub_80D0FD8(struct Sprite* sprite) -{ - u8 bank = 0; - u16 sp0 = 0; - u16 sp1 = 0; - u8 r4; - - if (gBattleAnimArgs[2] == 0) - bank = gBattleAnimBankAttacker; - else - bank = gBattleAnimBankTarget; - - r4 = gBattleAnimArgs[3] ^ 1; - if (IsDoubleBattle() && IsAnimBankSpriteVisible(bank ^ 2)) - { - sub_807A3FC(bank, r4, &sp0, &sp1); - if (r4 == 0) - r4 = sub_8077ABC(bank, 0); - else - r4 = sub_8077ABC(bank, 2); - - if (GetBankSide(bank) != 0) - gBattleAnimArgs[0] -= (sp0 - r4) - gBattleAnimArgs[0]; // This is weird. - else - gBattleAnimArgs[0] = sp0 - r4; - } - - sprite->callback = sub_80793C4; - sub_80793C4(sprite); -} - -void sub_80D1098(struct Sprite* sprite) -{ - if (sub_8078B5C(sprite)) - { - FreeSpriteOamMatrix(sprite); - move_anim_8072740(sprite); - } -} - -void sub_80D10B8(struct Sprite* sprite) -{ - u16 r9 = 0; - u16 r6 = 0; - s16 sp0 = 0; - s16 sp1 = 0; - u8 sp4; - u8 bankr7; - u8 bankr8; - u8 r10; - - if (gBattleAnimArgs[5] == 0) - { - bankr7 = gBattleAnimBankAttacker; - bankr8 = gBattleAnimBankTarget; - } - else - { - bankr7 = gBattleAnimBankTarget; - bankr8 = gBattleAnimBankAttacker; - } - - if (gBattleAnimArgs[6] == 0) - { - r10 = 0; - sp4 = 1; - } - else - { - r10 = 2; - sp4 = 3; - } - - if (GetBankSide(bankr7) != 0) - { - r9 = sub_8077ABC(bankr7, r10) + gBattleAnimArgs[0]; - if (IsAnimBankSpriteVisible(bankr8 ^ 2)) - sprite->subpriority = gSprites[gObjectBankIDs[bankr8 ^ 2]].subpriority - 1; - else - sprite->subpriority = gSprites[gObjectBankIDs[bankr8]].subpriority - 1; - } - else - { - r9 = sub_8077ABC(bankr7, r10) - gBattleAnimArgs[0]; - if (gMain.inBattle && IsAnimBankSpriteVisible(bankr7 ^ 2)) - { - if (gSprites[gObjectBankIDs[bankr7]].pos1.x < gSprites[gObjectBankIDs[bankr7 ^ 2]].pos1.x) - sprite->subpriority = gSprites[gObjectBankIDs[bankr7 ^ 2]].subpriority + 1; - else - sprite->subpriority = gSprites[gObjectBankIDs[bankr7]].subpriority - 1; - } - else - { - sprite->subpriority = gSprites[gObjectBankIDs[bankr7]].subpriority - 1; - } - - } - - r6 = sub_8077ABC(bankr7, sp4) + gBattleAnimArgs[1]; - if (gMain.inBattle && IsAnimBankSpriteVisible(bankr8 ^ 2)) - { - sub_807A3FC(bankr8, gBattleAnimArgs[6], &sp0, &sp1); - } - else - { - sp0 = sub_8077ABC(bankr8, r10); - sp1 = sub_8077ABC(bankr8, sp4); - } - - if (GetBankSide(bankr8)) - sp0 += gBattleAnimArgs[3]; - else - sp0 -= gBattleAnimArgs[3]; - - sp1 += gBattleAnimArgs[4]; - sprite->pos1.x = sprite->data[1] = r9; - sprite->pos1.y = sprite->data[3] = r6; - sprite->data[2] = sp0; - sprite->data[4] = sp1; - sprite->data[0] = gBattleAnimArgs[0]; - obj_translate_based_on_private_1_2_3_4(sprite); - sprite->callback = sub_80D1098; - sub_80D1098(sprite); -} - -void sub_80D1318(struct Sprite* sprite) -{ - u8 index = IndexOfSpritePaletteTag(0x27DB); - if (index != 0xFF) - { - BlendPalette(((index << 20) + 0x1010000) >> 16, 15, gBattleAnimArgs[5], gBattleAnimArgs[4]); - } - - StartSpriteAffineAnim(sprite, 1); - sprite->callback = sub_80793C4; - sub_80793C4(sprite); -} - -void sub_80D1368(struct Sprite* sprite) -{ - s16 r1; - sub_80787B0(sprite, 0); - r1 = (GetBankSide(gBattleAnimBankAttacker)) ? -0xA0 : 0xA0; - sprite->data[0] = 0x380; - sprite->data[1] = r1; - sprite->data[7] = gBattleAnimArgs[2]; - sprite->callback = sub_80D13AC; -} - -void sub_80D13AC(struct Sprite* sprite) -{ - s16 add; - sprite->pos2.y -= (sprite->data[0] >> 8); - sprite->pos2.x = sprite->data[1] >> 8; - sprite->data[0] -= 32; - add = (GetBankSide(gBattleAnimBankAttacker)) ? -0xA0 : 0xA0; - sprite->data[1] += add; - if (sprite->pos2.y > 0) - { - sprite->pos1.y += sprite->pos2.y; - sprite->pos1.x += sprite->pos2.x; - sprite->pos2.y = 0; - sprite->pos2.x = 0; - sprite->data[0] = 0; - StartSpriteAffineAnim(sprite, 1); - sprite->callback = sub_80D1424; - } -} - -void sub_80D1424(struct Sprite* sprite) -{ - if (sprite->data[0]++ > 19) - { - StartSpriteAffineAnim(sprite, 2); - sprite->callback = sub_80D144C; - } -} - -void sub_80D144C(struct Sprite* sprite) -{ - if (sprite->affineAnimEnded) - { - StartSpriteAffineAnim(sprite, 1); - sprite->data[0] = 0; - if (sprite->data[7] == 0) - { - sprite->oam.tileNum += 16; - sprite->callback = sub_80D14C4; - } - else - { - sprite->oam.tileNum += 32; - sprite->callback = sub_80D154C; - } - } -} - -void sub_80D14C4(struct Sprite* sprite) -{ - sprite->pos2.y -= 2; - if (++sprite->data[0] == 9) - { - sprite->data[0] = 16; - sprite->data[1] = 0; - REG_BLDCNT = 0x3F40; - REG_BLDALPHA = sprite->data[0]; - sprite->callback = sub_80D1504; - } -} - -void sub_80D1504(struct Sprite* sprite) -{ - if (sprite->data[1]++ % 3 == 0) - { - sprite->data[0]--; - REG_BLDALPHA = sprite->data[0] | ((16 - sprite->data[0]) << 8); - if (sprite->data[0] == 0) - sprite->callback = sub_80D154C; - } -} - -void sub_80D154C(struct Sprite* sprite) -{ - if ((u16)gBattleAnimArgs[7] == 0xFFFF) - { - sprite->invisible = 1; - if (sprite->data[7] == 0) - sprite->callback = sub_80D158C; - else - sprite->callback = move_anim_8072740; - } -} - -void sub_80D158C(struct Sprite* sprite) -{ - REG_BLDCNT = 0; - REG_BLDALPHA = 0; - move_anim_8072740(sprite); -} - -void sub_80D15A4(u8 taskId) -{ - struct Task* task = &gTasks[taskId]; - u8 spriteId = GetAnimBankSpriteId(0); - task->data[0] = spriteId; - sub_80798F4(task, spriteId, &gUnknown_083D79BC); - task->func = sub_80D15E0; -} - -void sub_80D15E0(u8 taskId) -{ - struct Task* task = &gTasks[taskId]; - if (sub_807992C(task) == 0) - { - gSprites[task->data[0]].pos2.y = 0; - gSprites[task->data[0]].invisible = 1; - DestroyAnimVisualTask(taskId); - } -} - -void sub_80D1638(u8 taskId) -{ - struct Task* task = &gTasks[taskId]; - task->data[0] = 0; - task->data[1] = 0; - task->data[2] = 0; - task->data[3] = 0; - task->data[12] = 3; - if (GetBankSide(gBattleAnimBankTarget) == 0) - { - task->data[13] = 0xFFFF; - task->data[14] = 8; - } - else - { - task->data[13] = 1; - task->data[14] = -8; - } - - task->data[15] = GetAnimBankSpriteId(1); - task->func = sub_80D16A0; -} - -void sub_80D16A0(u8 taskId) -{ - struct Task* task = &gTasks[taskId]; - - switch (task->data[0]) - { - case 0: - gSprites[task->data[15]].pos2.x += task->data[14]; - task->data[1] = 0; - task->data[2] = 0; - task->data[3] = 0; - task->data[0]++; - break; - case 1: - if (++task->data[1] > 1) - { - task->data[1] = 0; - task->data[2]++; - if (task->data[2] & 1) - gSprites[task->data[15]].pos2.x += 6; - else - gSprites[task->data[15]].pos2.x -= 6; - - if (++task->data[3] > 4) - { - if (task->data[2] & 1) - gSprites[task->data[15]].pos2.x -= 6; - - task->data[0]++; - } - } - break; - case 2: - if (--task->data[12] != 0) - task->data[0] = 0; - else - task->data[0]++; - break; - case 3: - gSprites[task->data[15]].pos2.x += task->data[13]; - if (gSprites[task->data[15]].pos2.x == 0) - DestroyAnimVisualTask(taskId); - break; - } -} - -void sub_80D17C4(u8 taskId) -{ - struct Task* task = &gTasks[taskId]; - task->data[0] = 0; - task->data[1] = 0; - task->data[2] = 0; - task->data[3] = 0; - task->data[4] = 1; - task->data[13] = 14; - task->data[14] = 2; - task->data[15] = GetAnimBankSpriteId(0); - task->func = sub_80D1808; -} - -void sub_80D1808(u8 taskId) -{ - struct Task* task = &gTasks[taskId]; - if (task->data[0] == 0 && ++task->data[1] > task->data[4]) - { - task->data[1] = 0; - if (++task->data[2] & 1) - gSprites[task->data[15]].invisible = 0; - else - gSprites[task->data[15]].invisible = 1; - - if (++task->data[3] >= task->data[13]) - { - if (++task->data[4] < task->data[14]) - { - task->data[1] = 0; - task->data[2] = 0; - task->data[3] = 0; - } - else - { - gSprites[task->data[15]].invisible = 0; - DestroyAnimVisualTask(taskId); - } - } - } -} - -void sub_80D18D4(u8 taskId) -{ - struct Task* task = &gTasks[taskId]; - task->data[0] = 0; - task->data[1] = 4; - task->data[2] = 0; - task->data[3] = 0; - task->data[4] = 0; - task->data[5] = 0; - task->data[6] = 0; - task->data[7] = 0; - task->data[8] = 0; - task->data[13] = 0; - task->data[14] = sub_8077ABC(gBattleAnimBankAttacker, 0); - task->data[15] = sub_8077ABC(gBattleAnimBankAttacker, 1); - task->func = sub_80D1930; -} - -void sub_80D1930(u8 taskId) -{ - struct Task* task = &gTasks[taskId]; - switch (task->data[8]) - { - case 0: - if (++task->data[4] > 1) - { - task->data[4] = 0; - task->data[5] = (task->data[5] + 1) & 1; - if (++task->data[6] > 20) - { - if (task->data[7] == 0) - { - task->data[6] = 0; - task->data[8] = 1; - } - else - task->data[8] = 2; - } - } - break; - case 1: - task->data[5] = 0; - if (++task->data[4] > 20) - { - task->data[7] = 1; - task->data[8] = 0; - } - break; - case 2: - task->data[5] = 1; - break; - } - - switch (task->data[0]) - { - case 0: - if (++task->data[1] > 4) - { - u8 spriteId; - task->data[1] = 0; - spriteId = CreateSprite(&gSpriteTemplate_83D79E8, task->data[14], task->data[15], 0); - if (spriteId != MAX_SPRITES) - { - gSprites[spriteId].data[0] = taskId; - gSprites[spriteId].data[1] = 13; - gSprites[spriteId].pos2.x = gUnknown_083D7A00[task->data[2]][0]; - gSprites[spriteId].pos2.y = gUnknown_083D7A00[task->data[2]][1]; - task->data[13]++; - if (++task->data[2] > 3) - { - task->data[2] = 0; - if (++task->data[3] > 5) - task->data[0]++; - } - } - } - break; - case 1: - if (task->data[13] == 0) - DestroyAnimVisualTask(taskId); - break; - } -} - -void sub_80D1A70(struct Sprite* sprite) -{ - sprite->invisible = gTasks[sprite->data[0]].data[5]; - if (sprite->animEnded) - { - gTasks[sprite->data[0]].data[sprite->data[1]]--; - DestroySprite(sprite); - } -} - -void sub_80D1ADC(u8 taskId) -{ - int i; - u8 sp[8]; - void* src; - void* dest; - void* what; - sp[0] = IndexOfSpritePaletteTag(0x27DE); - for (i = 1; i <= 4; i++) - { - sp[i] = AllocSpritePalette(0x2710 - i); - } - - src = &gBattleAnimSpritePalette_206; - dest = (NotInBattle()) ? gSharedMem + 0x18000 - 0x3800: gSharedMem + 0x18000; - LZDecompressWram(src, dest); - for (i = 0; i <= 4; i++) - { - what = ((NotInBattle()) ? gSharedMem + 0x14800 : gSharedMem + 0x18000) + (i << 5); - LoadPalette(what, (u16)((sp[i] << 4) + 0x100), 32); - } - - DestroyAnimVisualTask(taskId); -} - -void sub_80D1B80(u8 taskId) -{ - int i; - for (i = 0; i < 5; i++) - { - FreeSpritePaletteByTag(gUnknown_083D7A5C[i]); - } - - DestroyAnimVisualTask(taskId); -} - -void sub_80D1BA8(struct Sprite* sprite, u8 a, u8 b) -{ - u8 tile; - tile = (b & 1); - tile = ((-tile | tile) >> 31) & 32; - sprite->oam.tileNum += tile + (a << 2); - sprite->oam.paletteNum = IndexOfSpritePaletteTag(gUnknown_083D7A5C[b >> 1]); -} - -void sub_80D1C08(struct Sprite* sprite) -{ - sub_80787B0(sprite, 0); - if (GetBankSide(gBattleAnimBankAttacker) != 0) - gBattleAnimArgs[2] = -gBattleAnimArgs[2]; - - sprite->data[0] = gBattleAnimArgs[4]; - sprite->data[2] = sub_8077ABC(gBattleAnimBankAttacker, 0) + gBattleAnimArgs[2]; - sprite->data[4] = sub_8077ABC(gBattleAnimBankAttacker, 1) + gBattleAnimArgs[3]; - sprite->callback = sub_8078B34; - StoreSpriteCallbackInData(sprite, move_anim_8072740); - sub_80D1BA8(sprite, gBattleAnimArgs[5], gBattleAnimArgs[6]); -} - -void sub_80D1C80(struct Sprite* sprite) -{ - if (++sprite->data[0] == 1) - sub_80787B0(sprite, 0); - - sprite->pos2.x = Sin(sprite->data[1], 8); - sprite->pos2.y = sprite->data[2] >> 8; - sprite->data[1] = (sprite->data[1] + 7) & 0xFF; - sprite->data[2] -= 0x80; - if (sprite->data[0] == 0x3C) - move_anim_8072740(sprite); -} - -void sub_80D1CD0(u8 taskId) -{ - int zero; - bool8 result = NotInBattle(); - u16 var = 0xF0; - if (result) - { - var = 0x98; - zero = 0; - } - else - { - zero = 0; - } - - gUnknown_030042C4 = var; - gUnknown_03004240 = 0xA0; - REG_WIN0H = var; - REG_WIN0V = 0xA0; - REG_WININ = 0x3F1F; - REG_WINOUT = 0x3F3F; - REG_BLDCNT = 0xC8; - REG_BLDY = 0x10; - gTasks[taskId].data[0] = zero; - gTasks[taskId].data[1] = var; - gTasks[taskId].func = sub_80D1D48; -} - -void sub_80D1D48(u8 taskId) -{ - gTasks[taskId].data[0] += 13; - gTasks[taskId].data[1] -= 13; - if (gTasks[taskId].data[0] >= gTasks[taskId].data[1]) - { - gUnknown_030042C4 = 0; - gTasks[taskId].func = sub_80D1D9C; - } - else - { - gUnknown_030042C4 = gTasks[taskId].data[1] | (gTasks[taskId].data[0] << 8); - } -} - -void sub_80D1D9C(u8 taskId) -{ - if (++gTasks[taskId].data[10] == 5) - { - gTasks[taskId].data[11] = 0x88; - RequestSpriteCopy((u8 *)(&gTasks[taskId].data[11]), (u8 *)(®_BLDCNT), 2); - BlendPalettes(sub_80791A8(1, 0, 0, 0, 0, 0, 0), 16, RGB(31, 31, 31)); - } - else if (gTasks[taskId].data[10] > 4) - { - gUnknown_030042C4 = 0; - gUnknown_03004240 = 0; - REG_WININ = 0x3F3F; - REG_WINOUT = 0x3F3F; - REG_BLDCNT = 0; - REG_BLDY = 0; - DestroyAnimVisualTask(taskId); - } -} - -void sub_80D1E38(u8 taskId) -{ - u8 spriteId = GetAnimBankSpriteId(1); - if (++gTasks[taskId].data[0] == 1) - { - sub_80798F4(&gTasks[taskId], GetAnimBankSpriteId(1), &gUnknown_083D7A98); - gSprites[spriteId].pos2.x = 4; - } - else - { - gSprites[spriteId].pos2.x = -gSprites[spriteId].pos2.x; - if (sub_807992C(&gTasks[taskId]) == 0) - { - gSprites[spriteId].pos2.x = 0; - gSprites[spriteId].pos2.y = 0; - DestroyAnimVisualTask(taskId); - } - } -} - -void sub_80D1EC8(u8 taskId) -{ - u8 spriteId = GetAnimBankSpriteId(0); - if (++gTasks[taskId].data[0] == 1) - { - sub_80798F4(&gTasks[taskId], GetAnimBankSpriteId(0), &gUnknown_083D7A98); - gSprites[spriteId].pos2.x = 4; - } - else - { - gSprites[spriteId].pos2.x = -gSprites[spriteId].pos2.x; - if (sub_807992C(&gTasks[taskId]) == 0) - { - gSprites[spriteId].pos2.x = 0; - gSprites[spriteId].pos2.y = 0; - DestroyAnimVisualTask(taskId); - } - } -} - -void sub_80D1F58(struct Sprite* sprite) -{ - sub_80787B0(sprite, 1); - sprite->data[0] = 0x5F; - sprite->data[1] = sprite->pos1.x; - sprite->data[2] = sub_8077ABC(gBattleAnimBankTarget, 2); - sprite->data[3] = sprite->pos1.y; - sprite->data[4] = sub_8077ABC(gBattleAnimBankTarget, 3); - obj_translate_based_on_private_1_2_3_4(sprite); - sprite->callback = sub_80D1FA4; -} - -void sub_80D1FA4(struct Sprite* sprite) -{ - if (sub_8078B5C(sprite) == 0) - { - sprite->pos2.y += Sin(sprite->data[5], 14); - sprite->data[5] = (sprite->data[5] + 4) & 0xFF; - } - else - { - move_anim_8072740(sprite); - } -} - -void sub_80D1FDC(struct Sprite* sprite) -{ - if (sprite->data[0] == 0) - { - sprite->data[1] = gBattleAnimArgs[0]; - sprite->data[2] = gBattleAnimArgs[1]; - sprite->data[0]++; - } - else - { - sprite->data[4] += sprite->data[1]; - sprite->pos2.x = sprite->data[4] >> 8; - sprite->pos2.y = Sin(sprite->data[3], sprite->data[2]); - sprite->data[3] = (sprite->data[3] + 3) & 0xFF; - if (sprite->data[3] > 0x64) - { - sprite->invisible = sprite->data[3] % 2; - } - - if (sprite->data[3] > 0x78) - { - move_anim_8072740(sprite); - } - } -} - -void sub_80D2064(struct Sprite* sprite) -{ - sprite->pos1.x = gBattleAnimArgs[0]; - sprite->pos1.y = 0xA0; - sprite->data[0] = gBattleAnimArgs[2]; - sprite->data[1] = gBattleAnimArgs[1]; - sprite->callback = sub_80782D8; - StoreSpriteCallbackInData(sprite, sub_80D2094); -} - -void sub_80D2094(struct Sprite* sprite) -{ - s16 y; - sprite->data[2] += sprite->data[1]; - sprite->pos2.y = -((u16)sprite->data[2] >> 8); - sprite->pos2.x = Sin(sprite->data[3], 4); - sprite->data[3] = (sprite->data[3] + 3) & 0xFF; - y = sprite->pos1.y + sprite->pos2.y; - if (y <= 0x48) - { - sprite->invisible = sprite->data[3] % 2; - if (y <= 0x40) - move_anim_8072740(sprite); - } -} - -void sub_80D2100(u8 taskId) -{ - struct Struct_sub_8078914 subStruct; - u8* tempvar; - REG_BLDCNT = 0x3F42; - REG_BLDALPHA = 0x1000; - REG_BG1CNT_BITFIELD.priority = 3; - REG_BG1CNT_BITFIELD.screenSize = 0; - if (!NotInBattle()) - REG_BG1CNT_BITFIELD.charBaseBlock = 1; - - gUnknown_030042C0 = 0; - gUnknown_030041B4 = 0; - REG_BG1HOFS = 0; - REG_BG1VOFS = 0; - sub_8078914(&subStruct); - tempvar = subStruct.field_4; - DmaFill32(3, 0x0, tempvar, 0x1000); - LZDecompressVram(&gAttractTilemap, tempvar); - LZDecompressVram(&gAttractGfx, subStruct.field_0); - LoadCompressedPalette(&gAttractPal, subStruct.field_8 << 4, 32); - if (NotInBattle()) - sub_80763FC(subStruct.field_8, (u16 *)subStruct.field_4, 0, 0); - - gTasks[taskId].func = sub_80D21F0; -} - -void sub_80D21F0(u8 taskId) -{ - struct Struct_sub_8078914 subStruct; - - switch (gTasks[taskId].data[12]) - { - case 0: - if (++gTasks[taskId].data[10] == 4) - { - gTasks[taskId].data[10] = 0; - gTasks[taskId].data[11]++; - REG_BLDALPHA = gTasks[taskId].data[11] | ((16 - gTasks[taskId].data[11]) << 8); - if (gTasks[taskId].data[11] == 16) - { - gTasks[taskId].data[12]++; - gTasks[taskId].data[11] = 0; - } - } - break; - case 1: - if (++gTasks[taskId].data[11] == 0x8D) - { - gTasks[taskId].data[11] = 16; - gTasks[taskId].data[12]++; - } - break; - case 2: - if (++gTasks[taskId].data[10] == 4) - { - gTasks[taskId].data[10] = 0; - gTasks[taskId].data[11]--; - REG_BLDALPHA = gTasks[taskId].data[11] | ((16 - gTasks[taskId].data[11]) << 8); - if (gTasks[taskId].data[11] == 0) - { - gTasks[taskId].data[12]++; - gTasks[taskId].data[11] = 0; - } - } - break; - case 3: - sub_8078914(&subStruct); - { - u8 *addr = subStruct.field_0; - u32 size = 0x2000; - while (1) - { - DmaFill32(3, 0, addr, 0x1000); - addr += 0x1000; - size -= 0x1000; - if (size <= 0x1000) - { - DmaFill32(3, 0, addr, size); - break; - } - } - } - DmaClear32(3, subStruct.field_4, 0x800); - if (!NotInBattle()) - REG_BG1CNT_BITFIELD.charBaseBlock = 0; - - gTasks[taskId].data[12]++; - // fall through - case 4: - REG_BLDCNT = 0; - REG_BLDALPHA = 0; - REG_BG1CNT_BITFIELD.priority = 1; - DestroyAnimVisualTask(taskId); - break; - } -} - -void sub_80D23B4(u8 taskId) -{ - struct Struct_sub_8078914 subStruct; - u8* tempvar; - REG_BLDCNT = 0x3F42; - REG_BLDALPHA = 0x1000; - REG_BG1CNT_BITFIELD.priority = 1; - REG_BG1CNT_BITFIELD.screenSize = 0; - if (!NotInBattle()) - REG_BG1CNT_BITFIELD.charBaseBlock = 1; - - gUnknown_030042C0 = 0; - gUnknown_030041B4 = 0; - REG_BG1HOFS = 0; - REG_BG1VOFS = 0; - sub_8078914(&subStruct); - tempvar = subStruct.field_4; - DmaFill32(3, 0x0, tempvar, 0x1000); - if (NotInBattle()) - LZDecompressVram(&gBattleAnimBackgroundTilemap_ScaryFaceContest, subStruct.field_4); - else if (GetBankSide(gBattleAnimBankTarget) == 1) - LZDecompressVram(&gBattleAnimBackgroundTilemap_ScaryFacePlayer, subStruct.field_4); - else - LZDecompressVram(&gBattleAnimBackgroundTilemap_ScaryFaceOpponent, subStruct.field_4); - - LZDecompressVram(&gBattleAnimBackgroundImage_ScaryFace, subStruct.field_0); - LoadCompressedPalette(&gBattleAnimBackgroundPalette_ScaryFace, subStruct.field_8 << 4, 32); - if (NotInBattle()) - sub_80763FC(subStruct.field_8, (u16 *)subStruct.field_4, 0, 0); - - gTasks[taskId].func = sub_80D24E0; -} - -void sub_80D24E0(u8 taskId) -{ - struct Struct_sub_8078914 subStruct; - - switch (gTasks[taskId].data[12]) - { - case 0: - if (++gTasks[taskId].data[10] == 2) - { - gTasks[taskId].data[10] = 0; - gTasks[taskId].data[11]++; - REG_BLDALPHA = gTasks[taskId].data[11] | ((16 - gTasks[taskId].data[11]) << 8); - if (gTasks[taskId].data[11] == 14) - { - gTasks[taskId].data[12]++; - gTasks[taskId].data[11] = 0; - } - } - break; - case 1: - if (++gTasks[taskId].data[11] == 0x15) - { - gTasks[taskId].data[11] = 14; - gTasks[taskId].data[12]++; - } - break; - case 2: - if (++gTasks[taskId].data[10] == 2) - { - gTasks[taskId].data[10] = 0; - gTasks[taskId].data[11]--; - REG_BLDALPHA = gTasks[taskId].data[11] | ((16 - gTasks[taskId].data[11]) << 8); - if (gTasks[taskId].data[11] == 0) - { - gTasks[taskId].data[12]++; - gTasks[taskId].data[11] = 0; - } - } - break; - case 3: - sub_8078914(&subStruct); - { - u8 *addr = subStruct.field_0; - u32 size = 0x2000; - while (1) - { - DmaFill32(3, 0, addr, 0x1000); - addr += 0x1000; - size -= 0x1000; - if (size <= 0x1000) - { - DmaFill32(3, 0, addr, size); - break; - } - } - } - DmaClear32(3, subStruct.field_4, 0x800); - if (!NotInBattle()) - REG_BG1CNT_BITFIELD.charBaseBlock = 0; - - gTasks[taskId].data[12]++; - // fall through - case 4: - REG_BLDCNT = 0; - REG_BLDALPHA = 0; - REG_BG1CNT_BITFIELD.priority = 1; - DestroyAnimVisualTask(taskId); - break; - } -} - -void sub_80D26A4(struct Sprite* sprite) -{ - sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 2); - sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 3); - sprite->affineAnimPaused = 1; - sprite->data[0] = gBattleAnimArgs[0]; - sprite->data[1] = gBattleAnimArgs[1]; - sprite->data[7] = sub_8079E90(gBattleAnimBankAttacker); - sprite->callback = sub_80D2704; - sub_80D2704(sprite); -} - -void sub_80D2704(struct Sprite* sprite) -{ - if ((u16)(sprite->data[1] - 0x40) <= 0x7F) - sprite->subpriority = sprite->data[7] + 1; - else - sprite->subpriority = sprite->data[7] - 1; - - sprite->pos2.x = Sin(sprite->data[1], sprite->data[2] >> 8); - sprite->pos2.y = Cos(sprite->data[1], sprite->data[3] >> 8); - sprite->data[1] = (sprite->data[1] + 9) & 0xFF; - switch (sprite->data[5]) - { - case 1: - sprite->data[2] -= 0x400; - sprite->data[3] -= 0x100; - if (++sprite->data[4] == sprite->data[0]) - { - sprite->data[5] = 2; - return; - } - break; - case 0: - sprite->data[2] += 0x400; - sprite->data[3] += 0x100; - if (++sprite->data[4] == sprite->data[0]) - { - sprite->data[4] = 0; - sprite->data[5] = 1; - } - break; - } - - if ((u16)gBattleAnimArgs[7] == 0xFFFF) - move_anim_8072740(sprite); -} - -void sub_80D27E0(struct Sprite* sprite) -{ - sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 2); - sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 3); - sprite->data[0] = Sin(gBattleAnimArgs[0], 10); - sprite->data[1] = Cos(gBattleAnimArgs[0], 7); - sprite->callback = sub_80D2834; -} - -void sub_80D2834(struct Sprite* sprite) -{ - sprite->pos2.x += sprite->data[0]; - sprite->pos2.y += sprite->data[1]; - if (sprite->pos1.x + sprite->pos2.x + 16 > 0x110u || sprite->pos1.y + sprite->pos2.y > 0xA0 || sprite->pos1.y + sprite->pos2.y < -16) - move_anim_8072740(sprite); -} - -void sub_80D287C(struct Sprite* sprite) -{ - sprite->pos2.x += sprite->data[0]; - sprite->pos2.y += sprite->data[1]; - if (sprite->data[3]++ >= sprite->data[2]) - move_anim_8072740(sprite); -} - -void sub_80D28AC(struct Sprite* sprite) -{ - sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 2); - sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 3); - sprite->data[0] = Sin(gBattleAnimArgs[0], 10); - sprite->data[1] = Cos(gBattleAnimArgs[0], 7); - sprite->data[2] = gBattleAnimArgs[1]; - sprite->callback = sub_80D287C; -} - -void sub_80D2904(struct Sprite* sprite) -{ - if (sprite->animEnded) - move_anim_8072740(sprite); -} - -void sub_80D2920(struct Sprite* sprite) -{ - sub_80787B0(sprite, 1); - sprite->callback = sub_80D2904; -} - -void sub_80D2938(struct Sprite* sprite) -{ - s16 r5; - if (sprite->data[0] == 0) - { - sprite->pos1.x += gBattleAnimArgs[0]; - sprite->pos1.y += gBattleAnimArgs[1]; - } - - sprite->data[0]++; - r5 = (sprite->data[0] * 10) & 0xFF; - sprite->pos2.x = Sin(r5, 0x50) >> 8; - if (sprite->data[0] <= 0x4F) - sprite->pos2.y = (sprite->data[0] / 2) + (Cos(r5, 0x50) >> 8); - - if (sprite->data[0] > 0x5A) - { - sprite->data[2]++; - sprite->pos2.x -= sprite->data[2] / 2; - } - - if (sprite->data[0] > 0x64) - move_anim_8072740(sprite); -} - -void sub_80D29CC(struct Sprite* sprite) -{ - sprite->data[5]++; - sprite->pos2.x = Sin(sprite->data[3], 5); - sprite->pos2.y = sprite->data[5] / 2; - sprite->data[3] = (sprite->data[3] + 3) & 0xFF; - if (sprite->data[5] > 20) - sprite->invisible = sprite->data[5] % 2; - - if (sprite->data[5] > 30) - move_anim_8072740(sprite); -} - -void sub_80D2A38(struct Sprite* sprite) -{ - if (sprite->data[0] == 0) - { - sprite->data[1] = gBattleAnimArgs[0]; - sprite->data[2] = gBattleAnimArgs[1]; - sprite->data[0]++; - } - else - { - sprite->data[4] += sprite->data[1]; - sprite->pos2.x = sprite->data[4] >> 8; - sprite->pos2.y = Sin(sprite->data[3], sprite->data[2]); - sprite->data[3] = (sprite->data[3] + 3) & 0xFF; - if (sprite->data[3] > 0x46) - { - sprite->callback = sub_80D29CC; - sprite->pos1.x += sprite->pos2.x; - sprite->pos1.y += sprite->pos2.y; - sprite->pos2.x = 0; - sprite->pos2.y = 0; - sprite->data[3] = Random() % 0xB4; - } - } -} - -/* void sub_80D2ABC(struct Sprite* sprite) -{ - int var; - s16 var2; - int var3; - if (sprite->data[3] == 0) - { - sprite->pos1.x += gBattleAnimArgs[0]; - sprite->pos1.y += gBattleAnimArgs[1]; - StartSpriteAnim(sprite, 0); - sprite->subpriority = sub_8079E90(gBattleAnimBankTarget) - 1; - sprite->data[2] = 1; - } - - sprite->data[0] += sprite->data[2]; - var = sprite->data[0] * 4; - if (var < 0) - var += 0xFF; - - sprite->data[1] = (sprite->data[0] * 4) -(((var) >> 8) << 8); - if (sprite->data[1] < 0) - sprite->data[1] = 0; - - var3 = sprite->data[1]; - var2 = sprite->data[0]; - var2 /= 4; - sprite->pos2.x = Cos(var3, 30 - var2); - var3 = sprite->data[1]; - var2 = sprite->data[0] / 8; - sprite->pos2.x = Sin(var3, 10 - var2); - if (sprite->data[1] > 0x80 && sprite->data[2] > 0) - sprite->data[2] = 0xFFFF; -} */ \ No newline at end of file -- cgit v1.2.3 From c9a21f43bd074e532c745560b1d7d412f6ea8456 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Sat, 25 Nov 2017 13:11:38 -0600 Subject: split field_weather.c and convert more data --- src/field/field_weather.c | 1640 +++++++++---------------------------------- src/field/field_weather_2.c | 1511 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 1838 insertions(+), 1313 deletions(-) create mode 100644 src/field/field_weather_2.c (limited to 'src') diff --git a/src/field/field_weather.c b/src/field/field_weather.c index acd8b81ff..2d4711b81 100644 --- a/src/field/field_weather.c +++ b/src/field/field_weather.c @@ -26,110 +26,18 @@ struct WeatherPaletteData u16 data[0][0x1000]; // unknown length }; -struct Weather +struct WeatherCallbacks { - struct Sprite *unknown_0[24]; - struct Sprite *unknown_60[0x65]; // snowflakes? - struct Sprite *unknown_1F4[3]; - u8 unknown_200[2][32]; - u8 filler_240[0x460-0x240]; - u8 unk460[2][32]; - u8 filler4A0[0x6B6-0x4A0]; - s8 unknown_6B6; - u8 filler_6B7[0xC0-0xB7]; - s8 unknown_6C0; - s8 unknown_6C1; - u8 unknown_6C2; - u8 unknown_6C3; - u16 unknown_6C4; - u8 unknown_6C6; - u8 unknown_6C7; - u8 unknown_6C8; - u8 unknown_6C9; - u8 unknown_6CA; - u8 unknown_6CB; - u16 unknown_6CC; - u16 unknown_6CE; - u8 unknown_6D0; - u8 unknown_6D1; - u8 unknown_6D2; - u8 unknown_6D3; - u8 unknown_6D4; - u8 unknown_6D5; - u16 unknown_6D6; - u8 unknown_6D8; - u8 unknown_6D9; - u8 unknown_6DA; - u8 unknown_6DB; - u8 unknown_6DC; - u8 unknown_6DD; - u8 unknown_6DE; - u8 filler_6DF[1]; - u16 unknown_6E0; - u16 unknown_6E2; - u8 unknown_6E4; - u8 unknown_6E5; - u16 unknown_6E6; - u16 unknown_6E8; - u8 unknown_6EA; - u8 unknown_6EB; - u8 unknown_6EC; - u8 unknown_6ED; - u16 unknown_6EE; - u16 unknown_6F0; - u16 unknown_6F2; - u8 unknown_6F4[6]; - u8 unknown_6FA; - u8 unknown_6FB; - u8 filler_6FC[4]; - u8 unknown_700; - u8 filler_701[0x15]; - u8 unknown_716; - u8 unknown_717; - u8 filler_718[0xc]; - u8 unknown_724; - u8 filler_725[9]; - u8 unknown_72E; - u8 filler_72F; - u16 unknown_730; - u16 unknown_732; - u16 unknown_734; - u16 unknown_736; - u8 unknown_738; - u8 unknown_739; - u8 unknown_73A; - u8 filler_73B[0x3C-0x3B]; - s16 unknown_73C; - s16 unknown_73E; - s16 unknown_740; - s16 unknown_742; - u8 filler_744[0xD-4]; - s8 unknown_74D; - u8 unknown_74E; + void (*func0)(void); + void (*func1)(void); + void (*func2)(void); + u8 (*func3)(void); }; -#define gWeather gUnknown_0202F7E8 -extern struct Weather gUnknown_0202F7E8; +extern struct Weather gWeather; extern u8 gUnknown_0202FF38[]; extern u16 gUnknown_0202FF58; -extern u8 *gUnknown_083970E8; -extern u8 (*gUnknown_08396FC8[][4])(void); -extern u8 (*gUnknown_083970B8[])(void); IWRAM_DATA const u8 *gUnknown_030006DC; -extern const u8 gUnknown_083970C8[]; - -// This is a pointer to gWeather. All code sub_807DE78 and below uses this pointer, -// while everything above accesses gWeather directly. -extern struct Weather *const gUnknown_08396FC4; - -extern const struct SpriteSheet gUnknown_0839A9D4; -extern const struct SpriteTemplate gSpriteTemplate_839A9F0; -extern const u16 gUnknown_08397108[]; -//extern const s16 gUnknown_0839A9C8[][2]; -extern const struct Coords16 gUnknown_0839A9C8[]; -extern const struct SpriteSheet gUnknown_0839AACC; -extern const struct SpriteTemplate gSpriteTemplate_839AAA4; -extern const struct SpriteTemplate gSpriteTemplate_839AB04; const u8 DroughtPaletteData_0[] = INCBIN_U8("graphics/weather/drought0.bin.lz"); const u8 DroughtPaletteData_1[] = INCBIN_U8("graphics/weather/drought1.bin.lz"); @@ -151,71 +59,202 @@ const u8 *const gUnknown_08396FA8[] = gSharedMem, }; +// This is a pointer to gWeather. All code in this file accesses gWeather directly, +// while code in other field weather files accesses gWeather through this pointer. +// This is likely the result of compiler optimization, since using the pointer in +// this file produces the same result as accessing gWeather directly. +struct Weather *const gWeatherPtr = &gWeather; + +void sub_807CAE8(void); +void nullsub_38(void); +u8 sub_807CB0C(void); +void sub_807DE78(void); +void sub_807DEF4(void); +void sub_807DEC4(void); +u8 sub_807DF54(void); +void sub_807DF9C(void); +void nullsub_55(void); +void sub_807DFC0(void); +u8 sub_807DFD0(void); +void LightRain_InitVars(void); +void sub_807E400(void); +void sub_807E3D0(void); +u8 sub_807E460(void); +void Snow_InitVars(void); +void snowflakes_progress2(void); +void sub_807EA18(void); +u8 sub_807EAC0(void); +void sub_807EE80(void); +void sub_807EFC0(void); +void sub_807EEF4(void); +u8 sub_807F34C(void); +void sub_807F49C(void); +void sub_807F52C(void); +void sub_807F4FC(void); +u8 sub_807F5EC(void); +void sub_807F7F8(void); +void sub_807F888(void); +void sub_807F858(void); +u8 sub_807F934(void); +void sub_807FE9C(void); +void sub_807FF4C(void); +void sub_807FF1C(void); +u8 sub_807FFC8(void); +void sub_807FB24(void); +void sub_807FBD8(void); +void sub_807FBA8(void); +u8 sub_807FC3C(void); +void sub_807F49C(void); +void sub_807F52C(void); +void sub_807F4FC(void); +u8 sub_807F5EC(void); +void sub_8080430(void); +void nullsub_56(void); +void sub_8080460(void); +u8 sub_8080470(void); +void sub_807E110(void); +void sub_807E174(void); +void sub_807E144(void); +u8 sub_807E258(void); +void sub_807EF24(void); +void sub_807EFC0(void); +void sub_807EF90(void); +u8 sub_807F34C(void); +void sub_8080474(void); +void sub_80804F8(void); +void sub_80804C8(void); +u8 sub_808056C(void); + +const struct WeatherCallbacks gUnknown_08396FC8[] = +{ + {sub_807CAE8, nullsub_38, sub_807CAE8, sub_807CB0C}, + {sub_807DE78, sub_807DEF4, sub_807DEC4, sub_807DF54}, + {sub_807DF9C, nullsub_55, sub_807DFC0, sub_807DFD0}, + {LightRain_InitVars, sub_807E400, sub_807E3D0, sub_807E460}, // light rain + {Snow_InitVars, snowflakes_progress2, sub_807EA18, sub_807EAC0}, // snow + {sub_807EE80, sub_807EFC0, sub_807EEF4, sub_807F34C}, + {sub_807F49C, sub_807F52C, sub_807F4FC, sub_807F5EC}, + {sub_807F7F8, sub_807F888, sub_807F858, sub_807F934}, + {sub_807FE9C, sub_807FF4C, sub_807FF1C, sub_807FFC8}, + {sub_807FB24, sub_807FBD8, sub_807FBA8, sub_807FC3C}, + {sub_807F49C, sub_807F52C, sub_807F4FC, sub_807F5EC}, + {sub_8080430, nullsub_56, sub_8080460, sub_8080470}, + {sub_807E110, sub_807E174, sub_807E144, sub_807E258}, + {sub_807EF24, sub_807EFC0, sub_807EF90, sub_807F34C}, + {sub_8080474, sub_80804F8, sub_80804C8, sub_808056C}, +}; + +void (*const gUnknown_083970B8[])(void) = +{ + sub_807CC24, + sub_807CCAC, + nullsub_39, + nullsub_39, +}; + +const u8 gUnknown_083970C8[] = +{ + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 0, + 0, + 2, + 1, + 2, + 2, + 2, + 2, + 1, + 1, + 1, + 1, + 2, + 1, + 1, + 1, + 1, + 1, +}; + +const u16 gUnknown_083970E8[] = INCBIN_U16("graphics/weather/0.gbapal"); + void sub_807C828(void) { u8 index; - if (!FuncIsActiveTask(&sub_807CA34)) + if (!FuncIsActiveTask(sub_807CA34)) { index = AllocSpritePalette(0x1200); - CpuCopy32(&gUnknown_083970E8, &gPlttBufferUnfaded[0x100 + index * 16], 32); + CpuCopy32(gUnknown_083970E8, &gPlttBufferUnfaded[0x100 + index * 16], 32); sub_807CB10(); - gWeather.unknown_6D5 = index; - gWeather.unknown_6D4 = AllocSpritePalette(0x1201); - gWeather.unknown_6DA = 0; - gWeather.unknown_6D8 = 0; - gWeather.unknown_6DE = 0; - gWeather.unknown_6E4 = 0; - gWeather.unknown_700 = 0; - gWeather.unknown_6FB = 0; - gWeather.unknown_724 = 0; - gWeather.unknown_716 = 0; - gWeather.unknown_717 = 0; - gWeather.unknown_72E = 0; - gWeather.unknown_6FA = 0; + gWeatherPtr->unknown_6D5 = index; + gWeatherPtr->unknown_6D4 = AllocSpritePalette(0x1201); + gWeatherPtr->unknown_6DA = 0; + gWeatherPtr->unknown_6D8 = 0; + gWeatherPtr->unknown_6DE = 0; + gWeatherPtr->unknown_6E4 = 0; + gWeatherPtr->unknown_700 = 0; + gWeatherPtr->unknown_6FB = 0; + gWeatherPtr->unknown_724 = 0; + gWeatherPtr->unknown_716 = 0; + gWeatherPtr->unknown_717 = 0; + gWeatherPtr->unknown_72E = 0; + gWeatherPtr->unknown_6FA = 0; sub_807DB64(16, 0); - gWeather.unknown_6D0 = 0; - gWeather.unknown_6C6 = 3; - gWeather.unknown_6C8 = 0; - gWeather.unknown_6D3 = 1; - gWeather.unknown_6C9 = CreateTask(sub_807C9E4, 80); + gWeatherPtr->currWeather = 0; + gWeatherPtr->unknown_6C6 = 3; + gWeatherPtr->unknown_6C8 = 0; + gWeatherPtr->unknown_6D3 = 1; + gWeatherPtr->unknown_6C9 = CreateTask(sub_807C9E4, 80); } } void DoWeatherEffect(u8 effect) { - if (effect != 3 && effect != 5 && effect != 13) + if (effect != WEATHER_RAIN_LIGHT && effect != WEATHER_RAIN_MED && effect != WEATHER_RAIN_HEAVY) { PlayRainSoundEffect(); } - if (gWeather.unknown_6D1 != effect && gWeather.unknown_6D0 == effect) + if (gWeatherPtr->unknown_6D1 != effect && gWeatherPtr->currWeather == effect) { - gUnknown_08396FC8[effect][0](); + gUnknown_08396FC8[effect].func0(); } - gWeather.unknown_6D3 = 0; - gWeather.unknown_6D1 = effect; - gWeather.unknown_6CE = 0; + gWeatherPtr->unknown_6D3 = 0; + gWeatherPtr->unknown_6D1 = effect; + gWeatherPtr->unknown_6CE = 0; } void sub_807C988(u8 effect) { PlayRainSoundEffect(); - gWeather.unknown_6D0 = effect; - gWeather.unknown_6D1 = effect; + gWeatherPtr->currWeather = effect; + gWeatherPtr->unknown_6D1 = effect; } void sub_807C9B4(u8 effect) { PlayRainSoundEffect(); - gWeather.unknown_6D0 = effect; - gWeather.unknown_6D1 = effect; - gWeather.unknown_6C8 = 1; + gWeatherPtr->currWeather = effect; + gWeatherPtr->unknown_6D1 = effect; + gWeatherPtr->unknown_6C8 = 1; } void sub_807C9E4(u8 taskId) { - if (gWeather.unknown_6C8) + if (gWeatherPtr->unknown_6C8) { - gUnknown_08396FC8[gWeather.unknown_6D0][2](); + gUnknown_08396FC8[gWeatherPtr->currWeather].func2(); gTasks[taskId].func = sub_807CA34; } } @@ -223,36 +262,36 @@ void sub_807C9E4(u8 taskId) void sub_807CA34(u8 task) { u8 v1; - if (gWeather.unknown_6D0 != gWeather.unknown_6D1) + if (gWeatherPtr->currWeather != gWeatherPtr->unknown_6D1) { - v1 = gUnknown_08396FC8[gWeather.unknown_6D0][3](); + v1 = gUnknown_08396FC8[gWeatherPtr->currWeather].func3(); if (!v1) { - gUnknown_08396FC8[gWeather.unknown_6D1][0](); - gWeather.unknown_6C3 = 0; // compiler reuses v1 - gWeather.unknown_6C6 = 0; // compiler reuses v1 - gWeather.unknown_6D0 = gWeather.unknown_6D1; - gWeather.unknown_6D3 = 1; + gUnknown_08396FC8[gWeatherPtr->unknown_6D1].func0(); + gWeatherPtr->unknown_6C3 = 0; // compiler reuses v1 + gWeatherPtr->unknown_6C6 = 0; // compiler reuses v1 + gWeatherPtr->currWeather = gWeatherPtr->unknown_6D1; + gWeatherPtr->unknown_6D3 = 1; } } else { - gUnknown_08396FC8[gWeather.unknown_6D0][1](); + gUnknown_08396FC8[gWeatherPtr->currWeather].func1(); } - gUnknown_083970B8[gWeather.unknown_6C6](); + gUnknown_083970B8[gWeatherPtr->unknown_6C6](); } void sub_807CAE8(void) { - gWeather.unknown_6C1 = 0; - gWeather.unknown_6C2 = 0; + gWeatherPtr->unknown_6C1 = 0; + gWeatherPtr->unknown_6C2 = 0; } void nullsub_38(void) { } -u32 sub_807CB0C(void) +u8 sub_807CB0C(void) { return 0; } @@ -274,9 +313,9 @@ void sub_807CB10(void) for (v0 = 0; v0 <= 1; v0++) { if (v0 == 0) - v1 = gWeather.unknown_200; + v1 = gWeatherPtr->unknown_200; else - v1 = gWeather.unk460; + v1 = gWeatherPtr->unk460; for (v2 = 0; (u16)v2 <= 0x1f; v2++) { @@ -332,53 +371,53 @@ void sub_807CB10(void) void sub_807CC24(void) { - if (gWeather.unknown_6C0 == gWeather.unknown_6C1) + if (gWeatherPtr->unknown_6C0 == gWeatherPtr->unknown_6C1) { - gWeather.unknown_6C6 = 3; + gWeatherPtr->unknown_6C6 = 3; } else { - if (++gWeather.unknown_6C3 >= gWeather.unknown_6C2) + if (++gWeatherPtr->unknown_6C3 >= gWeatherPtr->unknown_6C2) { - gWeather.unknown_6C3 = 0; - if (gWeather.unknown_6C0 < gWeather.unknown_6C1) - gWeather.unknown_6C0++; + gWeatherPtr->unknown_6C3 = 0; + if (gWeatherPtr->unknown_6C0 < gWeatherPtr->unknown_6C1) + gWeatherPtr->unknown_6C0++; else - gWeather.unknown_6C0--; - sub_807CEBC(0, 0x20, gWeather.unknown_6C0); + gWeatherPtr->unknown_6C0--; + sub_807CEBC(0, 0x20, gWeatherPtr->unknown_6C0); } } } void sub_807CCAC(void) { - if (++gWeather.unknown_6CB > 1) - gWeather.unknown_6CA = 0; - switch (gWeather.unknown_6D0) + if (++gWeatherPtr->unknown_6CB > 1) + gWeatherPtr->unknown_6CA = 0; + switch (gWeatherPtr->currWeather) { - case 3: - case 4: - case 5: + case WEATHER_RAIN_LIGHT: + case WEATHER_RAIN_MED: + case WEATHER_RAIN_HEAVY: + case WEATHER_SNOW: case 11: - case 13: if (sub_807CDC4() == 0) { - gWeather.unknown_6C0 = 3; - gWeather.unknown_6C6 = 3; + gWeatherPtr->unknown_6C0 = 3; + gWeatherPtr->unknown_6C6 = 3; } break; case 12: if (sub_807CE24() == 0) { - gWeather.unknown_6C0 = -6; - gWeather.unknown_6C6 = 3; + gWeatherPtr->unknown_6C0 = -6; + gWeatherPtr->unknown_6C6 = 3; } break; case 6: if (sub_807CE7C() == 0) { - gWeather.unknown_6C0 = 0; - gWeather.unknown_6C6 = 3; + gWeatherPtr->unknown_6C0 = 0; + gWeatherPtr->unknown_6C6 = 3; } break; case 7: @@ -388,8 +427,8 @@ void sub_807CCAC(void) default: if (!gPaletteFade.active) { - gWeather.unknown_6C0 = gWeather.unknown_6C1; - gWeather.unknown_6C6 = 3; + gWeatherPtr->unknown_6C0 = gWeatherPtr->unknown_6C1; + gWeatherPtr->unknown_6C6 = 3; } break; } @@ -397,38 +436,38 @@ void sub_807CCAC(void) u8 sub_807CDC4(void) { - if (gWeather.unknown_6C7 == 0x10) + if (gWeatherPtr->unknown_6C7 == 0x10) return 0; - if (++gWeather.unknown_6C7 >= 0x10) + if (++gWeatherPtr->unknown_6C7 >= 0x10) { sub_807CEBC(0, 0x20, 3); - gWeather.unknown_6C7 = 0x10; + gWeatherPtr->unknown_6C7 = 0x10; return 0; } - sub_807D1BC(0, 0x20, 3, 0x10 - gWeather.unknown_6C7, gWeather.unknown_6C4); + sub_807D1BC(0, 0x20, 3, 0x10 - gWeatherPtr->unknown_6C7, gWeatherPtr->unknown_6C4); return 1; } u8 sub_807CE24(void) { - if (gWeather.unknown_6C7 == 0x10) + if (gWeatherPtr->unknown_6C7 == 0x10) return 0; - if (++gWeather.unknown_6C7 >= 0x10) + if (++gWeatherPtr->unknown_6C7 >= 0x10) { sub_807CEBC(0, 0x20, -6); - gWeather.unknown_6C7 = 0x10; + gWeatherPtr->unknown_6C7 = 0x10; return 0; } - sub_807D304(-6, 0x10 - gWeather.unknown_6C7, gWeather.unknown_6C4); + sub_807D304(-6, 0x10 - gWeatherPtr->unknown_6C7, gWeatherPtr->unknown_6C4); return 1; } u8 sub_807CE7C(void) { - if (gWeather.unknown_6C7 == 0x10) + if (gWeatherPtr->unknown_6C7 == 0x10) return 0; - ++gWeather.unknown_6C7; - sub_807D424(0x10 - gWeather.unknown_6C7, gWeather.unknown_6C4); + ++gWeatherPtr->unknown_6C7; + sub_807D424(0x10 - gWeatherPtr->unknown_6C7, gWeatherPtr->unknown_6C4); return 1; } @@ -460,10 +499,10 @@ void sub_807CEBC(u8 a, u8 b, s8 c) { u8 r, g, b; - if (gUnknown_030006DC[r4] == 2 || r4 - 16 == gWeather.unknown_6D5) - r6 = gWeather.unk460[c]; + if (gUnknown_030006DC[r4] == 2 || r4 - 16 == gWeatherPtr->unknown_6D5) + r6 = gWeatherPtr->unk460[c]; else - r6 = gWeather.unknown_200[c]; + r6 = gWeatherPtr->unknown_200[c]; if (r4 == 16 || r4 > 0x1B) { for (i = 0; i < 16; i++) @@ -567,9 +606,9 @@ void sub_807D1BC(u8 a1, u8 a2, s8 c, u8 d, u16 e) u8 *r5; if (gUnknown_030006DC[r4] == 1) - r5 = gWeather.unknown_200[c]; + r5 = gWeatherPtr->unknown_200[c]; else - r5 = gWeather.unk460[c]; + r5 = gWeatherPtr->unk460[c]; for (i = 0; i < 16; i++) { @@ -695,10 +734,10 @@ void sub_807D424(u8 a, u16 b) void sub_807D540(u8 a) { - if (gWeather.unknown_6FA < 6) + if (gWeatherPtr->unknown_6FA < 6) { - gWeather.unknown_6F4[gWeather.unknown_6FA] = a; - gWeather.unknown_6FA++; + gWeatherPtr->unknown_6F4[gWeatherPtr->unknown_6FA] = a; + gWeatherPtr->unknown_6FA++; } } @@ -706,9 +745,9 @@ bool8 sub_807D574(u8 a) { u16 i; - for (i = 0; i < gWeather.unknown_6FA; i++) + for (i = 0; i < gWeatherPtr->unknown_6FA; i++) { - if (gWeather.unknown_6F4[i] == a) + if (gWeatherPtr->unknown_6F4[i] == a) return TRUE; } return FALSE; @@ -716,22 +755,22 @@ bool8 sub_807D574(u8 a) void sub_807D5BC(s8 a) { - if (gWeather.unknown_6C6 == 3) + if (gWeatherPtr->unknown_6C6 == 3) { sub_807CEBC(0, 32, a); - gWeather.unknown_6C0 = a; + gWeatherPtr->unknown_6C0 = a; } } void sub_807D5F0(u8 a, u8 b, u8 c) { - if (gWeather.unknown_6C6 == 3) + if (gWeatherPtr->unknown_6C6 == 3) { - gWeather.unknown_6C6 = 0; - gWeather.unknown_6C0 = a; - gWeather.unknown_6C1 = b; - gWeather.unknown_6C3 = 0; - gWeather.unknown_6C2 = c; + gWeatherPtr->unknown_6C6 = 0; + gWeatherPtr->unknown_6C0 = a; + gWeatherPtr->unknown_6C1 = b; + gWeatherPtr->unknown_6C3 = 0; + gWeatherPtr->unknown_6C2 = c; sub_807D5BC(a); } } @@ -764,15 +803,15 @@ void fade_screen(u8 a, u8 b) return; } - switch (gWeather.unknown_6D0) + switch (gWeatherPtr->currWeather) { - case 3: - case 4: - case 5: + case WEATHER_RAIN_LIGHT: + case WEATHER_RAIN_MED: + case WEATHER_RAIN_HEAVY: + case WEATHER_SNOW: case 6: case 11: case 12: - case 13: r2 = 1; break; default: @@ -785,26 +824,26 @@ void fade_screen(u8 a, u8 b) if (r2 != 0) CpuFastCopy(gPlttBufferFaded, gPlttBufferUnfaded, 0x400); BeginNormalPaletteFade(0xFFFFFFFF, b, 0, 16, r4); - gWeather.unknown_6C6 = 2; + gWeatherPtr->unknown_6C6 = 2; } else { - gWeather.unknown_6C4 = r4; + gWeatherPtr->unknown_6C4 = r4; if (r2 != 0) - gWeather.unknown_6C7 = 0; + gWeatherPtr->unknown_6C7 = 0; else BeginNormalPaletteFade(0xFFFFFFFF, b, 16, 0, r4); - gWeather.unknown_6C6 = 1; - gWeather.unknown_6CA = 1; - gWeather.unknown_6CB = 0; - sub_807DB64(gWeather.unknown_730, gWeather.unknown_732); - gWeather.unknown_6C8 = 1; + gWeatherPtr->unknown_6C6 = 1; + gWeatherPtr->unknown_6CA = 1; + gWeatherPtr->unknown_6CB = 0; + sub_807DB64(gWeatherPtr->unknown_730, gWeatherPtr->unknown_732); + gWeatherPtr->unknown_6C8 = 1; } } bool8 sub_807D770(void) { - return gWeather.unknown_6C6 ^ 1 ? TRUE : FALSE; + return gWeatherPtr->unknown_6C6 ^ 1 ? TRUE : FALSE; } void sub_807D78C(u8 a) @@ -812,16 +851,16 @@ void sub_807D78C(u8 a) u16 r4 = 16 + a; u16 i; - switch (gWeather.unknown_6C6) + switch (gWeatherPtr->unknown_6C6) { case 1: - if (gWeather.unknown_6CA != 0) + if (gWeatherPtr->unknown_6CA != 0) { - if (gWeather.unknown_6D0 == 6) + if (gWeatherPtr->currWeather == 6) sub_807D540(r4); r4 *= 16; for (i = 0; i < 16; i++) - gPlttBufferFaded[r4 + i] = gWeather.unknown_6C4; + gPlttBufferFaded[r4 + i] = gWeatherPtr->unknown_6C4; } break; case 2: @@ -830,9 +869,9 @@ void sub_807D78C(u8 a) BlendPalette(r4, 16, gPaletteFade.y, gPaletteFade.blendColor); break; default: - if (gWeather.unknown_6D0 != 6) + if (gWeatherPtr->currWeather != 6) { - sub_807CEBC(r4, 1, gWeather.unknown_6C0); + sub_807CEBC(r4, 1, gWeatherPtr->unknown_6C0); } else { @@ -845,21 +884,21 @@ void sub_807D78C(u8 a) void sub_807D874(u8 a) { - sub_807CEBC(a, 1, gWeather.unknown_6C0); + sub_807CEBC(a, 1, gWeatherPtr->unknown_6C0); } u8 unref_sub_807D894(void) { - if (gWeather.unknown_6C6 == 1) - return gWeather.unknown_6CA; + if (gWeatherPtr->unknown_6C6 == 1) + return gWeatherPtr->unknown_6CA; else return 0; } void sub_807D8C0(const u16 *palette) { - LoadPalette(palette, 0x100 + gWeather.unknown_6D4 * 16, 32); - sub_807D78C(gWeather.unknown_6D4); + LoadPalette(palette, 0x100 + gWeatherPtr->unknown_6D4 * 16, 32); + sub_807D78C(gWeatherPtr->unknown_6D4); } void sub_807D8F0(u8 *a, u8 *b) @@ -893,16 +932,16 @@ void sub_807D8F0(u8 *a, u8 *b) void sub_807D9A8(void) { - gWeather.unknown_74D = 1; - gWeather.unknown_74E = 1; + gWeatherPtr->unknown_74D = 1; + gWeatherPtr->unknown_74E = 1; } bool8 sub_807D9C8(void) { - if (gWeather.unknown_74D < 32) + if (gWeatherPtr->unknown_74D < 32) { - sub_807D8F0(&gWeather.unknown_74D, &gWeather.unknown_74E); - if (gWeather.unknown_74D < 32) + sub_807D8F0(&gWeatherPtr->unknown_74D, &gWeatherPtr->unknown_74E); + if (gWeatherPtr->unknown_74D < 32) return TRUE; } return FALSE; @@ -915,44 +954,44 @@ void sub_807DA04(s8 a) void sub_807DA14(void) { - gWeather.unknown_73C = 0; - gWeather.unknown_740 = 0; - gWeather.unknown_742 = 0; - gWeather.unknown_73E = 0; + gWeatherPtr->unknown_73C = 0; + gWeatherPtr->unknown_740 = 0; + gWeatherPtr->unknown_742 = 0; + gWeatherPtr->unknown_73E = 0; gUnknown_0202FF58 = 5; } void sub_807DA4C(void) { - switch (gWeather.unknown_742) + switch (gWeatherPtr->unknown_742) { case 0: - if (++gWeather.unknown_740 > gUnknown_0202FF58) + if (++gWeatherPtr->unknown_740 > gUnknown_0202FF58) { - gWeather.unknown_740 = 0; - sub_807DA04(gWeather.unknown_73C++); - if (gWeather.unknown_73C > 5) + gWeatherPtr->unknown_740 = 0; + sub_807DA04(gWeatherPtr->unknown_73C++); + if (gWeatherPtr->unknown_73C > 5) { - gWeather.unknown_73E = gWeather.unknown_73C; - gWeather.unknown_742 = 1; - gWeather.unknown_740 = 0x3C; + gWeatherPtr->unknown_73E = gWeatherPtr->unknown_73C; + gWeatherPtr->unknown_742 = 1; + gWeatherPtr->unknown_740 = 0x3C; } } break; case 1: - gWeather.unknown_740 = (gWeather.unknown_740 + 3) & 0x7F; - gWeather.unknown_73C = ((gSineTable[gWeather.unknown_740] - 1) >> 6) + 2; - if (gWeather.unknown_73C != gWeather.unknown_73E) - sub_807DA04(gWeather.unknown_73C); - gWeather.unknown_73E = gWeather.unknown_73C; + gWeatherPtr->unknown_740 = (gWeatherPtr->unknown_740 + 3) & 0x7F; + gWeatherPtr->unknown_73C = ((gSineTable[gWeatherPtr->unknown_740] - 1) >> 6) + 2; + if (gWeatherPtr->unknown_73C != gWeatherPtr->unknown_73E) + sub_807DA04(gWeatherPtr->unknown_73C); + gWeatherPtr->unknown_73E = gWeatherPtr->unknown_73C; break; case 2: - if (++gWeather.unknown_740 > gUnknown_0202FF58) + if (++gWeatherPtr->unknown_740 > gUnknown_0202FF58) { - gWeather.unknown_740 = 0; - sub_807DA04(--gWeather.unknown_73C); - if (gWeather.unknown_73C == 3) - gWeather.unknown_742 = 0; + gWeatherPtr->unknown_740 = 0; + sub_807DA04(--gWeatherPtr->unknown_73C); + if (gWeatherPtr->unknown_73C == 3) + gWeatherPtr->unknown_742 = 0; } break; } @@ -960,49 +999,49 @@ void sub_807DA4C(void) void sub_807DB64(u8 a, u8 b) { - gWeather.unknown_730 = a; - gWeather.unknown_732 = b; - gWeather.unknown_734 = a; - gWeather.unknown_736 = b; + gWeatherPtr->unknown_730 = a; + gWeatherPtr->unknown_732 = b; + gWeatherPtr->unknown_734 = a; + gWeatherPtr->unknown_736 = b; REG_BLDALPHA = (b << 8) | a; } void sub_807DBA4(u8 a, u8 b, int c) { - gWeather.unknown_734 = a; - gWeather.unknown_736 = b; - gWeather.unknown_73A = c; - gWeather.unknown_739 = 0; - gWeather.unknown_738 = 0; + gWeatherPtr->unknown_734 = a; + gWeatherPtr->unknown_736 = b; + gWeatherPtr->unknown_73A = c; + gWeatherPtr->unknown_739 = 0; + gWeatherPtr->unknown_738 = 0; } bool8 sub_807DBE8(void) { - if (gWeather.unknown_730 == gWeather.unknown_734 - && gWeather.unknown_732 == gWeather.unknown_736) + if (gWeatherPtr->unknown_730 == gWeatherPtr->unknown_734 + && gWeatherPtr->unknown_732 == gWeatherPtr->unknown_736) return TRUE; - if (++gWeather.unknown_739 > gWeather.unknown_73A) + if (++gWeatherPtr->unknown_739 > gWeatherPtr->unknown_73A) { - gWeather.unknown_739 = 0; - gWeather.unknown_738++; - if (gWeather.unknown_738 & 1) + gWeatherPtr->unknown_739 = 0; + gWeatherPtr->unknown_738++; + if (gWeatherPtr->unknown_738 & 1) { - if (gWeather.unknown_730 < gWeather.unknown_734) - gWeather.unknown_730++; - else if (gWeather.unknown_730 > gWeather.unknown_734) - gWeather.unknown_730--; + if (gWeatherPtr->unknown_730 < gWeatherPtr->unknown_734) + gWeatherPtr->unknown_730++; + else if (gWeatherPtr->unknown_730 > gWeatherPtr->unknown_734) + gWeatherPtr->unknown_730--; } else { - if (gWeather.unknown_732 < gWeather.unknown_736) - gWeather.unknown_732++; - else if (gWeather.unknown_732 > gWeather.unknown_736) - gWeather.unknown_732--; + if (gWeatherPtr->unknown_732 < gWeatherPtr->unknown_736) + gWeatherPtr->unknown_732++; + else if (gWeatherPtr->unknown_732 > gWeatherPtr->unknown_736) + gWeatherPtr->unknown_732--; } } - REG_BLDALPHA = (gWeather.unknown_732 << 8) | gWeather.unknown_730; - if (gWeather.unknown_730 == gWeather.unknown_734 - && gWeather.unknown_732 == gWeather.unknown_736) + REG_BLDALPHA = (gWeatherPtr->unknown_732 << 8) | gWeatherPtr->unknown_730; + if (gWeatherPtr->unknown_730 == gWeatherPtr->unknown_734 + && gWeatherPtr->unknown_732 == gWeatherPtr->unknown_736) return TRUE; return FALSE; } @@ -1046,23 +1085,23 @@ void unref_sub_807DCB4(u8 a) u8 weather_get_current(void) { - return gWeather.unknown_6D0; + return gWeatherPtr->currWeather; } -void sub_807DD5C(u16 sndEff) +void SetRainStrengthFromSoundEffect(u16 sndEff) { - if (gUnknown_0202F7E8.unknown_6C6 != 2) + if (gWeatherPtr->unknown_6C6 != 2) { switch (sndEff) { case SE_T_KOAME: - gUnknown_0202F7E8.unknown_6DD = 0; + gWeatherPtr->rainStrength = 0; break; case SE_T_OOAME: - gUnknown_0202F7E8.unknown_6DD = 1; + gWeatherPtr->rainStrength = 1; break; case SE_T_AME: - gUnknown_0202F7E8.unknown_6DD = 2; + gWeatherPtr->rainStrength = 2; break; default: return; @@ -1075,17 +1114,17 @@ void PlayRainSoundEffect(void) { if (IsSpecialSEPlaying()) { - switch (gUnknown_0202F7E8.unknown_6DD) + switch (gWeatherPtr->rainStrength) { case 0: - PlaySE(0x56); + PlaySE(SE_T_KOAME_E); break; case 1: - PlaySE(0x54); + PlaySE(SE_T_OOAME_E); break; case 2: default: - PlaySE(0x52); + PlaySE(SE_T_AME_E); break; } } @@ -1093,17 +1132,17 @@ void PlayRainSoundEffect(void) u8 sub_807DDFC(void) { - return gUnknown_0202F7E8.unknown_6D3; + return gWeatherPtr->unknown_6D3; } void sub_807DE10(void) { - gUnknown_0202F7E8.unknown_6C6 = 2; + gWeatherPtr->unknown_6C6 = 2; } void unref_sub_807DE24(void) { - gUnknown_0202F7E8.unknown_6C6 = 3; + gWeatherPtr->unknown_6C6 = 3; } void sub_807DE38(u8 a) @@ -1117,1028 +1156,3 @@ void sub_807DE68(void) { gUnknown_030006DC = gUnknown_083970C8; } - -void sub_807DE78(void) -{ - gUnknown_08396FC4->unknown_6C1 = 0; - gUnknown_08396FC4->unknown_6C2 = 20; - gUnknown_08396FC4->unknown_6D2 = 0; - gUnknown_08396FC4->unknown_6CC = 0; - if (gUnknown_08396FC4->unknown_6DE == 0) - sub_807DB64(0, 16); -} - -void sub_807DEF4(void); - -void sub_807DEC4(void) -{ - sub_807DE78(); - while (gUnknown_08396FC4->unknown_6D2 == 0) - sub_807DEF4(); -} - -void sub_807DFD4(void); - -void sub_807DEF4(void) -{ - switch (gUnknown_08396FC4->unknown_6CC) - { - case 0: - sub_807DFD4(); - gUnknown_08396FC4->unknown_6CC++; - break; - case 1: - sub_807DBA4(12, 8, 1); - gUnknown_08396FC4->unknown_6CC++; - break; - case 2: - if (sub_807DBE8()) - { - gUnknown_08396FC4->unknown_6D2 = 1; - gUnknown_08396FC4->unknown_6CC++; - } - break; - } -} - -void sub_807E0A0(void); - -bool8 sub_807DF54(void) -{ - switch (gUnknown_08396FC4->unknown_6CE) - { - case 0: - sub_807DBA4(0, 16, 1); - gUnknown_08396FC4->unknown_6CE++; - return TRUE; - case 1: - if (sub_807DBE8()) - { - sub_807E0A0(); - gUnknown_08396FC4->unknown_6CE++; - } - return TRUE; - } - return FALSE; -} - -void sub_807DF9C(void) -{ - gUnknown_08396FC4->unknown_6C1 = 0; - gUnknown_08396FC4->unknown_6C2 = 20; -} - -void sub_807DFC0(void) -{ - sub_807DF9C(); -} - -void nullsub_55(void) -{ -} - -int sub_807DFD0(void) -{ - return 0; -} - -void sub_807DFD4(void) -{ - u16 i; - - if (gUnknown_08396FC4->unknown_6DE == 1) - return; - LoadSpriteSheet(&gUnknown_0839A9D4); - sub_807D8C0(gUnknown_08397108); - for (i = 0; i < 3; i++) - { - u8 spriteId = CreateSprite(&gSpriteTemplate_839A9F0, 0, 0, 0xFF); - - if (spriteId != 64) - { - struct Sprite *sprite; - - gUnknown_08396FC4->unknown_1F4[i] = &gSprites[spriteId]; - sprite = gUnknown_08396FC4->unknown_1F4[i]; - sub_80603CC(gUnknown_0839A9C8[i].x + 7, gUnknown_0839A9C8[i].y + 7, &sprite->pos1.x, &sprite->pos1.y); - sprite->coordOffsetEnabled = TRUE; - } - else - { - gUnknown_08396FC4->unknown_1F4[i] = NULL; - } - } - gUnknown_08396FC4->unknown_6DE = 1; -} - -void sub_807E0A0(void) -{ - u16 i; - - if (gUnknown_08396FC4->unknown_6DE == 0) - return; - for (i = 0; i < 3; i++) - { - if (gUnknown_08396FC4->unknown_1F4[i] != NULL) - DestroySprite(gUnknown_08396FC4->unknown_1F4[i]); - } - FreeSpriteTilesByTag(0x1200); - gUnknown_08396FC4->unknown_6DE = 0; -} - -void sub_807E0F4(struct Sprite *sprite) -{ - sprite->data[0] = (sprite->data[0] + 1) & 1; - if (sprite->data[0] != 0) - sprite->pos1.x--; -} - -void sub_807E110(void) -{ - gUnknown_08396FC4->unknown_6CC = 0; - gUnknown_08396FC4->unknown_6D2 = 0; - gUnknown_08396FC4->unknown_6C1 = 0; - gUnknown_08396FC4->unknown_6C2 = 0; -} - -void sub_807E174(void); - -void sub_807E144(void) -{ - sub_807E110(); - while (gUnknown_08396FC4->unknown_6D2 == 0) - sub_807E174(); -} - -void sub_807E174(void) -{ - switch (gUnknown_08396FC4->unknown_6CC) - { - case 0: - if (gUnknown_08396FC4->unknown_6C6 != 0) - gUnknown_08396FC4->unknown_6CC++; - break; - case 1: - sub_807D9A8(); - gUnknown_08396FC4->unknown_6CC++; - break; - case 2: - if (sub_807D9C8() == FALSE) - gUnknown_08396FC4->unknown_6CC++; - break; - case 3: - sub_807DA14(); - gUnknown_08396FC4->unknown_6CC++; - break; - case 4: - sub_807DA4C(); - if (gUnknown_08396FC4->unknown_73C == 6) - { - gUnknown_08396FC4->unknown_6D2 = 1; - gUnknown_08396FC4->unknown_6CC++; - } - break; - default: - sub_807DA4C(); - break; - } -} - -int sub_807E258(void) -{ - return 0; -} - -void task50_0807B6D4(u8); - -void sub_807E25C(void) -{ - CreateTask(task50_0807B6D4, 0x50); -} - -#define tState data[0] -#define tBlendY data[1] -#define tBlendDelay data[2] -#define tWinRange data[3] - -void task50_0807B6D4(u8 taskId) -{ - struct Task *task = &gTasks[taskId]; - - switch (task->tState) - { - case 0: - task->tBlendY = 0; - task->tBlendDelay = 0; - task->tWinRange = REG_WININ; - REG_WININ = WIN_RANGE(63, 63); - REG_BLDCNT = 0x9E; - REG_BLDY = 0; - task->tState++; - // fall through - case 1: - task->tBlendY += 3; - if (task->tBlendY > 16) - task->tBlendY = 16; - REG_BLDY = task->tBlendY; - if (task->tBlendY >= 16) - task->tState++; - break; - case 2: - task->tBlendDelay++; - if (task->tBlendDelay > 9) - { - task->tBlendDelay = 0; - task->tBlendY--; - if (task->tBlendY <= 0) - { - task->tBlendY = 0; - task->tState++; - } - REG_BLDY = task->tBlendY; - } - break; - case 3: - REG_BLDCNT = 0; - REG_BLDY = 0; - REG_WININ = task->tWinRange; - task->tState++; - break; - case 4: - EnableBothScriptContexts(); - DestroyTask(taskId); - break; - } -} - -#undef tState -#undef tBlendY -#undef tBlendDelay -#undef tWinRange - -void sub_807E364(void) -{ - gUnknown_08396FC4->unknown_6CC = 0; - gUnknown_08396FC4->unknown_6D2 = 0; - gUnknown_08396FC4->unknown_6D6 = 0; - gUnknown_08396FC4->unknown_6DB = 8; - gUnknown_08396FC4->unknown_6DC = 0; - gUnknown_08396FC4->unknown_6D9 = 10; - gUnknown_08396FC4->unknown_6C1 = 3; - gUnknown_08396FC4->unknown_6C2 = 20; - sub_807DD5C(SE_T_KOAME); -} - -void sub_807E400(void); - -void sub_807E3D0(void) -{ - sub_807E364(); - while (gUnknown_08396FC4->unknown_6D2 == 0) - sub_807E400(); -} - -void sub_807E7A4(void); -u8 sub_807E7B4(void); -u8 sub_807E8E8(void); - -void sub_807E400(void) -{ - switch (gUnknown_08396FC4->unknown_6CC) - { - case 0: - sub_807E7A4(); - gUnknown_08396FC4->unknown_6CC++; - break; - case 1: - if (sub_807E7B4() == 0) - gUnknown_08396FC4->unknown_6CC++; - break; - case 2: - if (sub_807E8E8() == FALSE) - { - gUnknown_08396FC4->unknown_6D2 = 1; - gUnknown_08396FC4->unknown_6CC++; - } - break; - } -} - -void sub_807E974(void); - -bool8 sub_807E460(void) -{ - switch (gUnknown_08396FC4->unknown_6CE) - { - case 0: - if (gUnknown_08396FC4->unknown_6D1 == 3 - || gUnknown_08396FC4->unknown_6D1 == 5 - || gUnknown_08396FC4->unknown_6D1 == 13) - { - gUnknown_08396FC4->unknown_6CE = 0xFF; - return FALSE; - } - else - { - gUnknown_08396FC4->unknown_6D9 = 0; - gUnknown_08396FC4->unknown_6CE++; - } - // fall through - case 1: - if (sub_807E8E8() == FALSE) - { - sub_807E974(); - gUnknown_08396FC4->unknown_6CE++; - return FALSE; - } - return TRUE; - } - return FALSE; -} - -//extern const struct Coords16 gUnknown_0839AAC4[]; -extern const u16 gUnknown_0839AAC4[][2]; -//extern const struct Coords16 gUnknown_0839AABC[]; -extern const s16 gUnknown_0839AABC[][2]; - -void sub_807E4EC(struct Sprite *sprite) -{ - u32 randVal; - u16 r6; - s32 r4; - s32 r0; - - if (sprite->data[1] == 0) - sprite->data[1] = 361; - randVal = sprite->data[1] * 1103515245 + 12345; - sprite->data[1] = ((randVal & 0x7FFF0000) >> 16) % 600; - - r6 = gUnknown_0839AAC4[gUnknown_08396FC4->unknown_6DC][0]; - - r4 = sprite->data[1] % 30; - sprite->data[2] = r4 * 8; // useless assignment - - r0 = sprite->data[1] / 30; - sprite->data[3] = r0 * 8; // useless assignment - - sprite->data[2] = r4; - sprite->data[2] <<= 7; - - sprite->data[3] = r0; - sprite->data[3] <<= 7; - - sprite->data[2] -= gUnknown_0839AABC[gUnknown_08396FC4->unknown_6DC][0] * r6; - sprite->data[3] -= gUnknown_0839AABC[gUnknown_08396FC4->unknown_6DC][1] * r6; - - StartSpriteAnim(sprite, 0); - sprite->data[4] = 0; - sprite->coordOffsetEnabled = FALSE; - sprite->data[0] = r6; -} - -void sub_807E5C0(struct Sprite *sprite) -{ - if (sprite->data[4] == 0) - { - sprite->data[2] += gUnknown_0839AABC[gUnknown_08396FC4->unknown_6DC][0]; - sprite->data[3] += gUnknown_0839AABC[gUnknown_08396FC4->unknown_6DC][1]; - sprite->pos1.x = sprite->data[2] >> 4; - sprite->pos1.y = sprite->data[3] >> 4; - - if (sprite->data[5] != 0 - && (sprite->pos1.x >= -8 && sprite->pos1.x <= 248) - && sprite->pos1.y >= -16 && sprite->pos1.y <= 176) - sprite->invisible = FALSE; - else - sprite->invisible = TRUE; - - sprite->data[0]--; - if (sprite->data[0] == 0) - { - StartSpriteAnim(sprite, gUnknown_08396FC4->unknown_6DC + 1); - sprite->data[4] = 1; - sprite->pos1.x -= gSpriteCoordOffsetX; - sprite->pos1.y -= gSpriteCoordOffsetY; - sprite->coordOffsetEnabled = TRUE; - } - } - else if (sprite->animEnded) - { - sprite->invisible = TRUE; - sub_807E4EC(sprite); - } -} - -void sub_807E6C4(struct Sprite *sprite) -{ - if (sprite->data[0] == 0) - { - sub_807E4EC(sprite); - sprite->callback = sub_807E5C0; - } - else - { - sprite->data[0]--; - } -} - -void sub_807E6F0(struct Sprite *sprite, u16 b) -{ - u16 r8 = gUnknown_0839AAC4[gUnknown_08396FC4->unknown_6DC][0]; - u16 r6 = b / (gUnknown_0839AAC4[gUnknown_08396FC4->unknown_6DC][1] + r8); - u16 r4 = b % (gUnknown_0839AAC4[gUnknown_08396FC4->unknown_6DC][1] + r8); - - while (--r6 != 0xFFFF) - sub_807E4EC(sprite); - if (r4 < r8) - { - while (--r4 != 0xFFFF) - sub_807E5C0(sprite); - sprite->data[6] = 0; - } - else - { - sprite->data[0] = r4 - r8; - sprite->invisible = TRUE; - sprite->data[6] = 1; - } -} - -void sub_807E7A4(void) -{ - LoadSpriteSheet(&gUnknown_0839AACC); -} - -extern const struct Coords16 gUnknown_0839AA08[]; - -bool8 sub_807E7B4(void) -{ - u8 r7; - u8 spriteId; - - if (gUnknown_08396FC4->unknown_6DA == 24) - return FALSE; - - r7 = gUnknown_08396FC4->unknown_6DA; - spriteId = CreateSpriteAtEnd(&gSpriteTemplate_839AAA4, - gUnknown_0839AA08[r7].x, gUnknown_0839AA08[r7].y, 78); - if (spriteId != 64) - { - gSprites[spriteId].data[5] = 0; - gSprites[spriteId].data[1] = r7 * 145; - while (gSprites[spriteId].data[1] >= 600) - gSprites[spriteId].data[1] -= 600; - sub_807E4EC(&gSprites[spriteId]); - sub_807E6F0(&gSprites[spriteId], r7 * 9); - gSprites[spriteId].invisible = TRUE; - gUnknown_08396FC4->unknown_0[r7] = &gSprites[spriteId]; - } - else - { - gUnknown_08396FC4->unknown_0[r7] = NULL; - } - - if (++gUnknown_08396FC4->unknown_6DA == 24) - { - u16 i; - - for (i = 0; i < 24; i++) - { - if (gUnknown_08396FC4->unknown_0[i] != NULL) - { - if (gUnknown_08396FC4->unknown_0[i]->data[6] == 0) - gUnknown_08396FC4->unknown_0[i]->callback = sub_807E5C0; - else - gUnknown_08396FC4->unknown_0[i]->callback = sub_807E6C4; - } - } - return FALSE; - } - return TRUE; -} - -bool8 sub_807E8E8(void) -{ - if (gUnknown_08396FC4->unknown_6D8 == gUnknown_08396FC4->unknown_6D9) - return FALSE; - - if (++gUnknown_08396FC4->unknown_6D6 > gUnknown_08396FC4->unknown_6DB) - { - gUnknown_08396FC4->unknown_6D6 = 0; - if (gUnknown_08396FC4->unknown_6D8 < gUnknown_08396FC4->unknown_6D9) - { - gUnknown_08396FC4->unknown_0[gUnknown_08396FC4->unknown_6D8++]->data[5] = 1; - } - else - { - gUnknown_08396FC4->unknown_6D8--; - gUnknown_08396FC4->unknown_0[gUnknown_08396FC4->unknown_6D8]->data[5] = 0; - gUnknown_08396FC4->unknown_0[gUnknown_08396FC4->unknown_6D8]->invisible = TRUE; - } - } - return TRUE; -} - -void sub_807E974(void) -{ - u16 i; - - for (i = 0; i < gUnknown_08396FC4->unknown_6DA; i++) - { - if (gUnknown_08396FC4->unknown_0[i] != NULL) - DestroySprite(gUnknown_08396FC4->unknown_0[i]); - } - gUnknown_08396FC4->unknown_6DA = 0; - FreeSpriteTilesByTag(0x1206); -} - -void sub_807E9C8(void) -{ - gUnknown_08396FC4->unknown_6CC = 0; - gUnknown_08396FC4->unknown_6D2 = 0; - gUnknown_08396FC4->unknown_6C1 = 3; - gUnknown_08396FC4->unknown_6C2 = 20; - gUnknown_08396FC4->unknown_6E5 = 16; - gUnknown_08396FC4->unknown_6E0 = 0; -} - -void snowflakes_progress2(void); -void sub_807ED48(struct Sprite *); - -void sub_807EA18(void) -{ - sub_807E9C8(); - while (gUnknown_08396FC4->unknown_6D2 == 0) - { - u16 i; - - snowflakes_progress2(); - for (i = 0; i < gUnknown_08396FC4->unknown_6E4; i++) - { - sub_807ED48(gUnknown_08396FC4->unknown_60[i]); - } - } -} - -u8 snowflakes_progress(void); - -void snowflakes_progress2(void) -{ - if (gUnknown_08396FC4->unknown_6CC == 0 && snowflakes_progress() == FALSE) - { - gUnknown_08396FC4->unknown_6D2 = 1; - gUnknown_08396FC4->unknown_6CC++; - } -} - -bool8 sub_807EAC0(void) -{ - switch (gUnknown_08396FC4->unknown_6CE) - { - case 0: - gUnknown_08396FC4->unknown_6E5 = 0; - gUnknown_08396FC4->unknown_6E0 = 0; - gUnknown_08396FC4->unknown_6CE++; - // fall through - case 1: - if (snowflakes_progress() == FALSE) - { - gUnknown_08396FC4->unknown_6CE++; - return FALSE; - } - return TRUE; - } - return FALSE; -} - -bool8 snowflake_add(void); -bool8 snowflake_remove(void); - -bool8 snowflakes_progress(void) -{ - if (gUnknown_08396FC4->unknown_6E4 == gUnknown_08396FC4->unknown_6E5) - return FALSE; - - gUnknown_08396FC4->unknown_6E0++; - if (gUnknown_08396FC4->unknown_6E0 > 36) - { - gUnknown_08396FC4->unknown_6E0 = 0; - if (gUnknown_08396FC4->unknown_6E4 < gUnknown_08396FC4->unknown_6E5) - snowflake_add(); - else - snowflake_remove(); - } - return (gUnknown_08396FC4->unknown_6E4 != gUnknown_08396FC4->unknown_6E5); -} - -void sub_807EC40(struct Sprite *); - -bool8 snowflake_add(void) -{ - u8 spriteId = CreateSpriteAtEnd(&gSpriteTemplate_839AB04, 0, 0, 78); - - if (spriteId == 64) - return FALSE; - gSprites[spriteId].data[4] = gUnknown_08396FC4->unknown_6E4; - sub_807EC40(&gSprites[spriteId]); - gSprites[spriteId].coordOffsetEnabled = TRUE; - gUnknown_08396FC4->unknown_60[gUnknown_08396FC4->unknown_6E4++] = &gSprites[spriteId]; - return TRUE; -} - -bool8 snowflake_remove(void) -{ - if (gUnknown_08396FC4->unknown_6E4 != 0) - { - DestroySprite(gUnknown_08396FC4->unknown_60[--gUnknown_08396FC4->unknown_6E4]); - return TRUE; - } - return FALSE; -} - -void sub_807EC40(struct Sprite *sprite) -{ - u16 r4 = ((sprite->data[4] * 5) & 7) * 30 + (Random() % 30); - u16 r6; - - sprite->pos1.y = -3 - (gSpriteCoordOffsetY + sprite->centerToCornerVecY); - sprite->pos1.x = r4 - (gSpriteCoordOffsetX + sprite->centerToCornerVecX); - sprite->data[0] = sprite->pos1.y * 128; - sprite->pos2.x = 0; - r6 = Random(); - sprite->data[1] = (r6 & 3) * 5 + 64; - sprite->data[7] = (r6 & 3) * 5 + 64; - StartSpriteAnim(sprite, (r6 & 1) ? 0 : 1); - sprite->data[3] = 0; - sprite->data[2] = ((r6 & 3) == 0) ? 2 : 1; - sprite->data[6] = (r6 & 0x1F) + 210; - sprite->data[5] = 0; -} - -void sub_807ECEC(struct Sprite *sprite) -{ - if (gUnknown_08396FC4->unknown_6E2 > 18) - { - sprite->invisible = FALSE; - sprite->callback = sub_807ED48; - sprite->pos1.y = 0xFA - (gSpriteCoordOffsetY + sprite->centerToCornerVecY); - sprite->data[0] = sprite->pos1.y * 128; - gUnknown_08396FC4->unknown_6E2 = 0; - } -} - -void sub_807ED48(struct Sprite *sprite) -{ - s16 r3; - s16 r2; - - sprite->data[0] += sprite->data[1]; - sprite->pos1.y = sprite->data[0] >> 7; - sprite->data[3] = (sprite->data[3] + sprite->data[2]) & 0xFF; - sprite->pos2.x = gSineTable[sprite->data[3]] / 64; - - r3 = (sprite->pos1.x + sprite->centerToCornerVecX + gSpriteCoordOffsetX) & 0x1FF; - if (r3 & 0x100) - r3 = -0x100 | r3; // hmm... what is this? - if (r3 < -3) - sprite->pos1.x = 242 - (gSpriteCoordOffsetX + sprite->centerToCornerVecX); - else if (r3 > 242) - sprite->pos1.x = -3 - (gSpriteCoordOffsetX + sprite->centerToCornerVecX); - - r2 = (sprite->pos1.y + sprite->centerToCornerVecY + gSpriteCoordOffsetY) & 0xFF; - if (r2 > 163 && r2 < 171) - { - sprite->pos1.y = 250 - (gSpriteCoordOffsetY + sprite->centerToCornerVecY); - sprite->data[0] = sprite->pos1.y * 128; - sprite->data[5] = 0; - sprite->data[6] = 220; - } - else if (r2 > 242 && r2 < 250) - { - sprite->pos1.y = 163; - sprite->data[0] = sprite->pos1.y * 128; - sprite->data[5] = 0; - sprite->data[6] = 220; - sprite->invisible = TRUE; - sprite->callback = sub_807ECEC; - } - - sprite->data[5]++; - if (sprite->data[5] == sprite->data[6]) - { - sub_807EC40(sprite); - sprite->pos1.y = 250; - sprite->invisible = TRUE; - sprite->callback = sub_807ECEC; - } -} - -void sub_807EE80(void) -{ - gUnknown_08396FC4->unknown_6CC = 0; - gUnknown_08396FC4->unknown_6D2 = 0; - gUnknown_08396FC4->unknown_6D6 = 0; - gUnknown_08396FC4->unknown_6DB = 4; - gUnknown_08396FC4->unknown_6DC = 0; - gUnknown_08396FC4->unknown_6D9 = 16; - gUnknown_08396FC4->unknown_6C1 = 3; - gUnknown_08396FC4->unknown_6C2 = 20; - gUnknown_08396FC4->unknown_6D2 = 0; // duplicate assignment - gUnknown_08396FC4->unknown_6ED = 0; - sub_807DD5C(0x51); -} - -void sub_807EFC0(void); - -void sub_807EEF4(void) -{ - sub_807EE80(); - while (gUnknown_08396FC4->unknown_6D2 == 0) - sub_807EFC0(); -} - -void sub_807EF24(void) -{ - gUnknown_08396FC4->unknown_6CC = 0; - gUnknown_08396FC4->unknown_6D2 = 0; - gUnknown_08396FC4->unknown_6D6 = 0; - gUnknown_08396FC4->unknown_6DB = 4; - gUnknown_08396FC4->unknown_6DC = 1; - gUnknown_08396FC4->unknown_6D9 = 24; - gUnknown_08396FC4->unknown_6C1 = 3; - gUnknown_08396FC4->unknown_6C2 = 20; - gUnknown_08396FC4->unknown_6D2 = 0; // duplicate assignment - sub_807DD5C(0x53); -} - -void sub_807EF90(void) -{ - sub_807EF24(); - while (gUnknown_08396FC4->unknown_6D2 == 0) - sub_807EFC0(); -} - -void sub_807F434(void); -void sub_807F3F8(u16); - -void sub_807EFC0(void) -{ - sub_807F434(); - switch (gUnknown_08396FC4->unknown_6CC) - { - case 0: - sub_807E7A4(); - gUnknown_08396FC4->unknown_6CC++; - break; - case 1: - if (sub_807E7B4()) - break; - gUnknown_08396FC4->unknown_6CC++; - break; - case 2: - if (sub_807E8E8()) - break; - gUnknown_08396FC4->unknown_6D2 = 1; - gUnknown_08396FC4->unknown_6CC++; - break; - case 3: - if (gUnknown_08396FC4->unknown_6C6 == 0) - break; - gUnknown_08396FC4->unknown_6CC = 6; - break; - case 4: - gUnknown_08396FC4->unknown_6EA = 1; - gUnknown_08396FC4->unknown_6E6 = (Random() % 360) + 360; - gUnknown_08396FC4->unknown_6CC++; - // fall through - case 5: - if (--gUnknown_08396FC4->unknown_6E6 != 0) - break; - gUnknown_08396FC4->unknown_6CC++; - break; - case 6: - gUnknown_08396FC4->unknown_6EA = 1; - gUnknown_08396FC4->unknown_6EB = Random() % 2; - gUnknown_08396FC4->unknown_6CC++; - break; - case 7: - gUnknown_08396FC4->unknown_6EC = (Random() & 1) + 1; - gUnknown_08396FC4->unknown_6CC++; - // fall through - case 8: - sub_807D5BC(19); - if (gUnknown_08396FC4->unknown_6EB == 0 && gUnknown_08396FC4->unknown_6EC == 1) - sub_807F3F8(20); - gUnknown_08396FC4->unknown_6E6 = (Random() % 3) + 6; - gUnknown_08396FC4->unknown_6CC++; - break; - case 9: - if (--gUnknown_08396FC4->unknown_6E6 != 0) - break; - sub_807D5BC(3); - gUnknown_08396FC4->unknown_6EA = 1; - if (--gUnknown_08396FC4->unknown_6EC != 0) - { - gUnknown_08396FC4->unknown_6E6 = (Random() % 16) + 60; - gUnknown_08396FC4->unknown_6CC = 10; - } - else if (gUnknown_08396FC4->unknown_6EB == 0) - { - gUnknown_08396FC4->unknown_6CC = 4; - } - else - { - gUnknown_08396FC4->unknown_6CC = 11; - } - break; - case 10: - if (--gUnknown_08396FC4->unknown_6E6 != 0) - break; - gUnknown_08396FC4->unknown_6CC = 8; - break; - case 11: - gUnknown_08396FC4->unknown_6E6 = (Random() % 16) + 60; - gUnknown_08396FC4->unknown_6CC++; - break; - case 12: - if (--gUnknown_08396FC4->unknown_6E6 != 0) - break; - sub_807F3F8(100); - sub_807D5BC(19); - // Why use "% 16" everywhere else and "& 0xF" here. So dumb. - gUnknown_08396FC4->unknown_6E6 = (Random() & 0xF) + 30; - gUnknown_08396FC4->unknown_6CC++; - break; - case 13: - if (--gUnknown_08396FC4->unknown_6E6 != 0) - break; - sub_807D5F0(19, 3, 5); - gUnknown_08396FC4->unknown_6CC++; - break; - case 14: - if (gUnknown_08396FC4->unknown_6C6 != 3) - break; - gUnknown_08396FC4->unknown_6EA = 1; - gUnknown_08396FC4->unknown_6CC = 4; - break; - } -} - -bool8 sub_807F34C(void) -{ - switch (gUnknown_08396FC4->unknown_6CE) - { - case 0: - gUnknown_08396FC4->unknown_6EA = 0; - gUnknown_08396FC4->unknown_6CE++; - // fall through - case 1: - sub_807EFC0(); - if (gUnknown_08396FC4->unknown_6EA != 0) - { - if (gUnknown_08396FC4->unknown_6D1 == 3 - || gUnknown_08396FC4->unknown_6D1 == 5 - || gUnknown_08396FC4->unknown_6D1 == 13) - return FALSE; - gUnknown_08396FC4->unknown_6D9 = 0; - gUnknown_08396FC4->unknown_6CE++; - } - break; - case 2: - if (sub_807E8E8()) - break; - sub_807E974(); - gUnknown_08396FC4->unknown_6ED = 0; - gUnknown_08396FC4->unknown_6CE++; - return FALSE; - default: - return FALSE; - } - return TRUE; -} - -void sub_807F3F8(u16 a) -{ - if (gUnknown_08396FC4->unknown_6ED == 0) - { - gUnknown_08396FC4->unknown_6E8 = Random() % a; - gUnknown_08396FC4->unknown_6ED = 1; - } -} - -void sub_807F434(void) -{ - if (gUnknown_08396FC4->unknown_6ED == 1) - { - if (gUnknown_08396FC4->unknown_6E8 == 0) - { - if (IsSEPlaying()) - return; - if (Random() & 1) - PlaySE(0x57); - else - PlaySE(0x58); - gUnknown_08396FC4->unknown_6ED = 0; - } - else - { - gUnknown_08396FC4->unknown_6E8--; - } - } -} - -void sub_807F49C(void) -{ - gUnknown_08396FC4->unknown_6CC = 0; - gUnknown_08396FC4->unknown_6D2 = 0; - gUnknown_08396FC4->unknown_6C1 = 0; - gUnknown_08396FC4->unknown_6C2 = 20; - if (gUnknown_08396FC4->unknown_6FB == 0) - { - gUnknown_08396FC4->unknown_6F0 = 0; - gUnknown_08396FC4->unknown_6F2 = 0; - gUnknown_08396FC4->unknown_6EE = 0; - sub_807DB64(0, 16); - } -} - -void sub_807F52C(void); - -void sub_807F4FC(void) -{ - sub_807F49C(); - while (gUnknown_08396FC4->unknown_6D2 == 0) - sub_807F52C(); -} - -void sub_807F6E8(void); - -void sub_807F52C(void) -{ - gUnknown_08396FC4->unknown_6EE = (gSpriteCoordOffsetX - gUnknown_08396FC4->unknown_6F2) & 0xFF; - if (++gUnknown_08396FC4->unknown_6F0 > 3) - { - gUnknown_08396FC4->unknown_6F0 = 0; - gUnknown_08396FC4->unknown_6F2++; - } - switch (gUnknown_08396FC4->unknown_6CC) - { - case 0: - sub_807F6E8(); - if (gUnknown_08396FC4->unknown_6D0 == 6) - sub_807DBA4(12, 8, 3); - else - sub_807DBA4(4, 16, 0); - gUnknown_08396FC4->unknown_6CC++; - break; - case 1: - if (sub_807DBE8()) - { - gUnknown_08396FC4->unknown_6D2 = 1; - gUnknown_08396FC4->unknown_6CC++; - } - break; - } -} - -void sub_807F7A4(void); - -bool8 sub_807F5EC(void) -{ - gUnknown_08396FC4->unknown_6EE = (gSpriteCoordOffsetX - gUnknown_08396FC4->unknown_6F2) & 0xFF; - if (++gUnknown_08396FC4->unknown_6F0 > 3) - { - gUnknown_08396FC4->unknown_6F0 = 0; - gUnknown_08396FC4->unknown_6F2++; - } - switch (gUnknown_08396FC4->unknown_6CE) - { - case 0: - sub_807DBA4(0, 16, 3); - gUnknown_08396FC4->unknown_6CE++; - break; - case 1: - if (!sub_807DBE8()) - break; - gUnknown_08396FC4->unknown_6CE++; - break; - case 2: - sub_807F7A4(); - gUnknown_08396FC4->unknown_6CE++; - break; - default: - return FALSE; - } - return TRUE; -} - -void sub_807F688(struct Sprite *sprite) -{ - sprite->pos2.y = (u8)gSpriteCoordOffsetY; - sprite->pos1.x = gUnknown_08396FC4->unknown_6EE + 32 + sprite->data[0] * 64; - if (sprite->pos1.x > 0x10F) - { - sprite->pos1.x = 480 + gUnknown_08396FC4->unknown_6EE - (4 - sprite->data[0]) * 64; - sprite->pos1.x &= 0x1FF; - } -} diff --git a/src/field/field_weather_2.c b/src/field/field_weather_2.c new file mode 100644 index 000000000..fa97df459 --- /dev/null +++ b/src/field/field_weather_2.c @@ -0,0 +1,1511 @@ +#include "global.h" +#include "field_map_obj.h" +#include "field_weather.h" +#include "rng.h" +#include "script.h" +#include "songs.h" +#include "sound.h" +#include "sprite.h" +#include "task.h" +#include "trig.h" + +extern struct Weather *const gWeatherPtr; + +//extern const s16 gUnknown_0839A9C8[][2]; +extern const struct SpriteSheet gWeatherCloudSpriteSheet; +extern const struct SpriteTemplate gSpriteTemplate_839A9F0; +extern const struct SpriteTemplate gSpriteTemplate_839AAA4; +extern const struct SpriteTemplate gSpriteTemplate_839AB04; + +const u16 gUnknown_08397108[] = INCBIN_U16("graphics/weather/1.gbapal"); +const u16 gUnknown_08397128[] = INCBIN_U16("graphics/weather/2.gbapal"); +const u8 WeatherFog0Tiles[] = INCBIN_U8("graphics/weather/fog0.4bpp"); +const u8 gWeatherFog1Tiles[] = INCBIN_U8("graphics/weather/fog1.4bpp"); +const u8 WeatherCloudTiles[] = INCBIN_U8("graphics/weather/cloud.4bpp"); +const u8 gSpriteImage_8398948[] = INCBIN_U8("graphics/weather/snow0.4bpp"); +const u8 gSpriteImage_8398968[] = INCBIN_U8("graphics/weather/snow1.4bpp"); +const u8 WeatherBubbleTiles[] = INCBIN_U8("graphics/weather/bubble.4bpp"); +const u8 WeatherAshTiles[] = INCBIN_U8("graphics/weather/ash.4bpp"); +const u8 WeatherRainTiles[] = INCBIN_U8("graphics/weather/rain.4bpp"); +const u8 WeatherSandstormTiles[] = INCBIN_U8("graphics/weather/sandstorm.4bpp"); + +const struct Coords16 gUnknown_0839A9C8[] = +{ + { 0, 66}, + { 5, 73}, + {10, 78}, +}; + +const struct SpriteSheet gWeatherCloudSpriteSheet = {WeatherCloudTiles, 0x800, 0x1200}; + +const struct OamData gOamData_839A9DC = +{ + .y = 0, + .affineMode = 0, + .objMode = 1, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 3, + .paletteNum = 0, + .affineParam = 0, +}; + +const union AnimCmd gSpriteAnim_839A9E4[] = +{ + ANIMCMD_FRAME(0, 16), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_839A9EC[] = +{ + gSpriteAnim_839A9E4, +}; + +void sub_807E0F4(struct Sprite *); +const struct SpriteTemplate gSpriteTemplate_839A9F0 = +{ + .tileTag = 4608, + .paletteTag = 4609, + .oam = &gOamData_839A9DC, + .anims = gSpriteAnimTable_839A9EC, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_807E0F4, +}; + +extern void sub_807D5BC(s8 a); +extern void sub_807D8C0(const u16 *palette); +extern void sub_807D9A8(void); +extern bool8 sub_807D9C8(void); +extern void sub_807DA14(void); +extern void sub_807DA4C(void); +extern void sub_807DBA4(u8 a, u8 b, int c); +extern bool8 sub_807DBE8(void); +extern void SetRainStrengthFromSoundEffect(u16 sndEff); +extern void sub_807D5F0(u8 a, u8 b, u8 c); + +//------------------------------------------------------------------------------ +// Clouds +//------------------------------------------------------------------------------ + +void sub_807DE78(void) +{ + gWeatherPtr->unknown_6C1 = 0; + gWeatherPtr->unknown_6C2 = 20; + gWeatherPtr->unknown_6D2 = 0; + gWeatherPtr->unknown_6CC = 0; + if (gWeatherPtr->unknown_6DE == 0) + sub_807DB64(0, 16); +} + +void sub_807DEF4(void); + +void sub_807DEC4(void) +{ + sub_807DE78(); + while (gWeatherPtr->unknown_6D2 == 0) + sub_807DEF4(); +} + +void sub_807DFD4(void); + +void sub_807DEF4(void) +{ + switch (gWeatherPtr->unknown_6CC) + { + case 0: + sub_807DFD4(); + gWeatherPtr->unknown_6CC++; + break; + case 1: + sub_807DBA4(12, 8, 1); + gWeatherPtr->unknown_6CC++; + break; + case 2: + if (sub_807DBE8()) + { + gWeatherPtr->unknown_6D2 = 1; + gWeatherPtr->unknown_6CC++; + } + break; + } +} + +void sub_807E0A0(void); + +bool8 sub_807DF54(void) +{ + switch (gWeatherPtr->unknown_6CE) + { + case 0: + sub_807DBA4(0, 16, 1); + gWeatherPtr->unknown_6CE++; + return TRUE; + case 1: + if (sub_807DBE8()) + { + sub_807E0A0(); + gWeatherPtr->unknown_6CE++; + } + return TRUE; + } + return FALSE; +} + +void sub_807DF9C(void) +{ + gWeatherPtr->unknown_6C1 = 0; + gWeatherPtr->unknown_6C2 = 20; +} + +void sub_807DFC0(void) +{ + sub_807DF9C(); +} + +void nullsub_55(void) +{ +} + +int sub_807DFD0(void) +{ + return 0; +} + +void sub_807DFD4(void) +{ + u16 i; + + if (gWeatherPtr->unknown_6DE == 1) + return; + LoadSpriteSheet(&gWeatherCloudSpriteSheet); + sub_807D8C0(gUnknown_08397108); + for (i = 0; i < 3; i++) + { + u8 spriteId = CreateSprite(&gSpriteTemplate_839A9F0, 0, 0, 0xFF); + + if (spriteId != 64) + { + struct Sprite *sprite; + + gWeatherPtr->cloudSprites[i] = &gSprites[spriteId]; + sprite = gWeatherPtr->cloudSprites[i]; + sub_80603CC(gUnknown_0839A9C8[i].x + 7, gUnknown_0839A9C8[i].y + 7, &sprite->pos1.x, &sprite->pos1.y); + sprite->coordOffsetEnabled = TRUE; + } + else + { + gWeatherPtr->cloudSprites[i] = NULL; + } + } + gWeatherPtr->unknown_6DE = 1; +} + +void sub_807E0A0(void) +{ + u16 i; + + if (gWeatherPtr->unknown_6DE == 0) + return; + for (i = 0; i < 3; i++) + { + if (gWeatherPtr->cloudSprites[i] != NULL) + DestroySprite(gWeatherPtr->cloudSprites[i]); + } + FreeSpriteTilesByTag(0x1200); + gWeatherPtr->unknown_6DE = 0; +} + +void sub_807E0F4(struct Sprite *sprite) +{ + sprite->data[0] = (sprite->data[0] + 1) & 1; + if (sprite->data[0] != 0) + sprite->pos1.x--; +} + +void sub_807E110(void) +{ + gWeatherPtr->unknown_6CC = 0; + gWeatherPtr->unknown_6D2 = 0; + gWeatherPtr->unknown_6C1 = 0; + gWeatherPtr->unknown_6C2 = 0; +} + +void sub_807E174(void); + +void sub_807E144(void) +{ + sub_807E110(); + while (gWeatherPtr->unknown_6D2 == 0) + sub_807E174(); +} + +void sub_807E174(void) +{ + switch (gWeatherPtr->unknown_6CC) + { + case 0: + if (gWeatherPtr->unknown_6C6 != 0) + gWeatherPtr->unknown_6CC++; + break; + case 1: + sub_807D9A8(); + gWeatherPtr->unknown_6CC++; + break; + case 2: + if (sub_807D9C8() == FALSE) + gWeatherPtr->unknown_6CC++; + break; + case 3: + sub_807DA14(); + gWeatherPtr->unknown_6CC++; + break; + case 4: + sub_807DA4C(); + if (gWeatherPtr->unknown_73C == 6) + { + gWeatherPtr->unknown_6D2 = 1; + gWeatherPtr->unknown_6CC++; + } + break; + default: + sub_807DA4C(); + break; + } +} + +int sub_807E258(void) +{ + return 0; +} + +void task50_0807B6D4(u8); + +void sub_807E25C(void) +{ + CreateTask(task50_0807B6D4, 0x50); +} + +#define tState data[0] +#define tBlendY data[1] +#define tBlendDelay data[2] +#define tWinRange data[3] + +void task50_0807B6D4(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + switch (task->tState) + { + case 0: + task->tBlendY = 0; + task->tBlendDelay = 0; + task->tWinRange = REG_WININ; + REG_WININ = WIN_RANGE(63, 63); + REG_BLDCNT = 0x9E; + REG_BLDY = 0; + task->tState++; + // fall through + case 1: + task->tBlendY += 3; + if (task->tBlendY > 16) + task->tBlendY = 16; + REG_BLDY = task->tBlendY; + if (task->tBlendY >= 16) + task->tState++; + break; + case 2: + task->tBlendDelay++; + if (task->tBlendDelay > 9) + { + task->tBlendDelay = 0; + task->tBlendY--; + if (task->tBlendY <= 0) + { + task->tBlendY = 0; + task->tState++; + } + REG_BLDY = task->tBlendY; + } + break; + case 3: + REG_BLDCNT = 0; + REG_BLDY = 0; + REG_WININ = task->tWinRange; + task->tState++; + break; + case 4: + EnableBothScriptContexts(); + DestroyTask(taskId); + break; + } +} + +#undef tState +#undef tBlendY +#undef tBlendDelay +#undef tWinRange + +//------------------------------------------------------------------------------ +// Light Rain +//------------------------------------------------------------------------------ + +void LightRain_InitVars(void) +{ + gWeatherPtr->unknown_6CC = 0; + gWeatherPtr->unknown_6D2 = 0; + gWeatherPtr->unknown_6D6 = 0; + gWeatherPtr->unknown_6DB = 8; + gWeatherPtr->unknown_6DC = 0; + gWeatherPtr->unknown_6D9 = 10; + gWeatherPtr->unknown_6C1 = 3; + gWeatherPtr->unknown_6C2 = 20; + SetRainStrengthFromSoundEffect(SE_T_KOAME); +} + +void sub_807E400(void); + +void sub_807E3D0(void) +{ + LightRain_InitVars(); + while (gWeatherPtr->unknown_6D2 == 0) + sub_807E400(); +} + +void sub_807E7A4(void); +u8 sub_807E7B4(void); +u8 sub_807E8E8(void); + +void sub_807E400(void) +{ + switch (gWeatherPtr->unknown_6CC) + { + case 0: + sub_807E7A4(); + gWeatherPtr->unknown_6CC++; + break; + case 1: + if (sub_807E7B4() == 0) + gWeatherPtr->unknown_6CC++; + break; + case 2: + if (sub_807E8E8() == FALSE) + { + gWeatherPtr->unknown_6D2 = 1; + gWeatherPtr->unknown_6CC++; + } + break; + } +} + +void sub_807E974(void); + +bool8 sub_807E460(void) +{ + switch (gWeatherPtr->unknown_6CE) + { + case 0: + if (gWeatherPtr->unknown_6D1 == 3 + || gWeatherPtr->unknown_6D1 == 5 + || gWeatherPtr->unknown_6D1 == 13) + { + gWeatherPtr->unknown_6CE = 0xFF; + return FALSE; + } + else + { + gWeatherPtr->unknown_6D9 = 0; + gWeatherPtr->unknown_6CE++; + } + // fall through + case 1: + if (sub_807E8E8() == FALSE) + { + sub_807E974(); + gWeatherPtr->unknown_6CE++; + return FALSE; + } + return TRUE; + } + return FALSE; +} + +// defined below +extern const s16 gUnknown_0839AABC[][2]; +extern const u16 gUnknown_0839AAC4[][2]; + +void sub_807E4EC(struct Sprite *sprite) +{ + u32 randVal; + u16 r6; + s32 r4; + s32 r0; + + if (sprite->data[1] == 0) + sprite->data[1] = 361; + randVal = sprite->data[1] * 1103515245 + 12345; + sprite->data[1] = ((randVal & 0x7FFF0000) >> 16) % 600; + + r6 = gUnknown_0839AAC4[gWeatherPtr->unknown_6DC][0]; + + r4 = sprite->data[1] % 30; + sprite->data[2] = r4 * 8; // useless assignment + + r0 = sprite->data[1] / 30; + sprite->data[3] = r0 * 8; // useless assignment + + sprite->data[2] = r4; + sprite->data[2] <<= 7; + + sprite->data[3] = r0; + sprite->data[3] <<= 7; + + sprite->data[2] -= gUnknown_0839AABC[gWeatherPtr->unknown_6DC][0] * r6; + sprite->data[3] -= gUnknown_0839AABC[gWeatherPtr->unknown_6DC][1] * r6; + + StartSpriteAnim(sprite, 0); + sprite->data[4] = 0; + sprite->coordOffsetEnabled = FALSE; + sprite->data[0] = r6; +} + +void sub_807E5C0(struct Sprite *sprite) +{ + if (sprite->data[4] == 0) + { + sprite->data[2] += gUnknown_0839AABC[gWeatherPtr->unknown_6DC][0]; + sprite->data[3] += gUnknown_0839AABC[gWeatherPtr->unknown_6DC][1]; + sprite->pos1.x = sprite->data[2] >> 4; + sprite->pos1.y = sprite->data[3] >> 4; + + if (sprite->data[5] != 0 + && (sprite->pos1.x >= -8 && sprite->pos1.x <= 248) + && sprite->pos1.y >= -16 && sprite->pos1.y <= 176) + sprite->invisible = FALSE; + else + sprite->invisible = TRUE; + + sprite->data[0]--; + if (sprite->data[0] == 0) + { + StartSpriteAnim(sprite, gWeatherPtr->unknown_6DC + 1); + sprite->data[4] = 1; + sprite->pos1.x -= gSpriteCoordOffsetX; + sprite->pos1.y -= gSpriteCoordOffsetY; + sprite->coordOffsetEnabled = TRUE; + } + } + else if (sprite->animEnded) + { + sprite->invisible = TRUE; + sub_807E4EC(sprite); + } +} + +void sub_807E6C4(struct Sprite *sprite) +{ + if (sprite->data[0] == 0) + { + sub_807E4EC(sprite); + sprite->callback = sub_807E5C0; + } + else + { + sprite->data[0]--; + } +} + +void sub_807E6F0(struct Sprite *sprite, u16 b) +{ + u16 r8 = gUnknown_0839AAC4[gWeatherPtr->unknown_6DC][0]; + u16 r6 = b / (gUnknown_0839AAC4[gWeatherPtr->unknown_6DC][1] + r8); + u16 r4 = b % (gUnknown_0839AAC4[gWeatherPtr->unknown_6DC][1] + r8); + + while (--r6 != 0xFFFF) + sub_807E4EC(sprite); + if (r4 < r8) + { + while (--r4 != 0xFFFF) + sub_807E5C0(sprite); + sprite->data[6] = 0; + } + else + { + sprite->data[0] = r4 - r8; + sprite->invisible = TRUE; + sprite->data[6] = 1; + } +} + +extern const struct SpriteSheet gUnknown_0839AACC; // defined below + +void sub_807E7A4(void) +{ + LoadSpriteSheet(&gUnknown_0839AACC); +} + +const struct Coords16 gUnknown_0839AA08[] = +{ + { 0, 0}, + { 0, 160}, + { 0, 64}, + {144, 224}, + {144, 128}, + { 32, 32}, + { 32, 192}, + { 32, 96}, + { 72, 128}, + { 72, 32}, + { 72, 192}, + {216, 96}, + {216, 0}, + {104, 160}, + {104, 64}, + {104, 224}, + {144, 0}, + {144, 160}, + {144, 64}, + { 32, 224}, + { 32, 128}, + { 72, 32}, + { 72, 192}, + { 48, 96}, +}; + +const struct OamData gOamData_839AA68 = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 1, + .paletteNum = 2, + .affineParam = 0, +}; + +const union AnimCmd gSpriteAnim_839AA70[] = +{ + ANIMCMD_FRAME(0, 16), + ANIMCMD_JUMP(0), +}; + +const union AnimCmd gSpriteAnim_839AA78[] = +{ + ANIMCMD_FRAME(8, 3), + ANIMCMD_FRAME(32, 2), + ANIMCMD_FRAME(40, 2), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_839AA88[] = +{ + ANIMCMD_FRAME(8, 3), + ANIMCMD_FRAME(16, 3), + ANIMCMD_FRAME(24, 4), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_839AA98[] = +{ + gSpriteAnim_839AA70, + gSpriteAnim_839AA78, + gSpriteAnim_839AA88, +}; + +const struct SpriteTemplate gSpriteTemplate_839AAA4 = +{ + .tileTag = 4614, + .paletteTag = 4608, + .oam = &gOamData_839AA68, + .anims = gSpriteAnimTable_839AA98, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_807E5C0, +}; + + +const s16 gUnknown_0839AABC[][2] = +{ + {-104, 208}, + {-160, 320}, +}; + +const u16 gUnknown_0839AAC4[][2] = +{ + {18, 7}, + {12, 10}, +}; + +const struct SpriteSheet gUnknown_0839AACC = {WeatherRainTiles, sizeof(WeatherRainTiles), 0x1206}; + +const struct OamData gOamData_839AAD4 = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 1, + .paletteNum = 0, + .affineParam = 0, +}; + +const struct SpriteFrameImage gSpriteImageTable_839AADC[] = +{ + {gSpriteImage_8398948, sizeof(gSpriteImage_8398948)}, + {gSpriteImage_8398968, sizeof(gSpriteImage_8398968)}, +}; + +const union AnimCmd gSpriteAnim_839AAEC[] = +{ + ANIMCMD_FRAME(0, 16), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_839AAF4[] = +{ + ANIMCMD_FRAME(1, 16), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_839AAFC[] = +{ + gSpriteAnim_839AAEC, + gSpriteAnim_839AAF4, +}; + +void sub_807ED48(struct Sprite *); +const struct SpriteTemplate gSpriteTemplate_839AB04 = +{ + .tileTag = 0xFFFF, + .paletteTag = 4608, + .oam = &gOamData_839AAD4, + .anims = gSpriteAnimTable_839AAFC, + .images = gSpriteImageTable_839AADC, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_807ED48, +}; + +// unused data +const u16 unusedData_839AB1C[] = {0, 6, 6, 12, 18, 42, 300, 300}; + +const struct OamData gOamData_839AB2C = +{ + .y = 0, + .affineMode = 0, + .objMode = 1, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +const union AnimCmd gSpriteAnim_839AB34[] = +{ + ANIMCMD_FRAME(0, 16), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_839AB3C[] = +{ + ANIMCMD_FRAME(32, 16), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_839AB44[] = +{ + ANIMCMD_FRAME(64, 16), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_839AB4C[] = +{ + ANIMCMD_FRAME(96, 16), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_839AB54[] = +{ + ANIMCMD_FRAME(128, 16), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_839AB5C[] = +{ + ANIMCMD_FRAME(160, 16), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_839AB64[] = +{ + gSpriteAnim_839AB34, + gSpriteAnim_839AB3C, + gSpriteAnim_839AB44, + gSpriteAnim_839AB4C, + gSpriteAnim_839AB54, + gSpriteAnim_839AB5C, +}; + +const union AffineAnimCmd gSpriteAffineAnim_839AB7C[] = +{ + AFFINEANIMCMD_FRAME(0x200, 0x200, 0, 0), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_839AB8C[] = +{ + gSpriteAffineAnim_839AB7C, +}; + +void sub_807F688(struct Sprite *); +const struct SpriteTemplate gSpriteTemplate_839AB90 = +{ + .tileTag = 4609, + .paletteTag = 4608, + .oam = &gOamData_839AB2C, + .anims = gSpriteAnimTable_839AB64, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_839AB8C, + .callback = sub_807F688, +}; + +const struct SpriteSheet gWeatherFog1SpriteSheet = {gWeatherFog1Tiles, sizeof(gWeatherFog1Tiles), 0x1201}; +const struct SpriteSheet gWeatherAshSpriteSheet = {WeatherAshTiles, sizeof(WeatherAshTiles), 0x1202}; + +const struct OamData gOamData_839ABB8 = +{ + .y = 0, + .affineMode = 0, + .objMode = 1, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 1, + .paletteNum = 15, + .affineParam = 0, +}; + +const union AnimCmd gSpriteAnim_839ABC0[] = +{ + ANIMCMD_FRAME(0, 60), + ANIMCMD_FRAME(64, 60), + ANIMCMD_JUMP(0), +}; + +const union AnimCmd *const gSpriteAnimTable_839ABCC[] = +{ + gSpriteAnim_839ABC0, +}; + +void sub_807FAA8(struct Sprite *); +const struct SpriteTemplate gSpriteTemplate_839ABD0 = +{ + .tileTag = 4610, + .paletteTag = 4608, + .oam = &gOamData_839ABB8, + .anims = gSpriteAnimTable_839ABCC, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_807FAA8, +}; + +const struct SpriteSheet gWeatherFog0SpriteSheet = {WeatherFog0Tiles, sizeof(WeatherFog0Tiles), 0x1203}; + +const struct OamData gOamData_839ABF0 = +{ + .y = 0, + .affineMode = 0, + .objMode = 1, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +const union AnimCmd gSpriteAnim_839ABF8[] = +{ + ANIMCMD_FRAME(0, 16), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_839AC00[] = +{ + gSpriteAnim_839ABF8, +}; + +void sub_807FE3C(struct Sprite *); +const struct SpriteTemplate gSpriteTemplate_839AC04 = +{ + .tileTag = 4611, + .paletteTag = 4608, + .oam = &gOamData_839ABF0, + .anims = gSpriteAnimTable_839AC00, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_807FE3C, +}; + +const struct OamData gOamData_839AC1C = +{ + .y = 0, + .affineMode = 0, + .objMode = 1, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 1, + .paletteNum = 0, + .affineParam = 0, +}; + +const union AnimCmd gSpriteAnim_839AC24[] = +{ + ANIMCMD_FRAME(0, 3), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_839AC2C[] = +{ + ANIMCMD_FRAME(64, 3), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_839AC34[] = +{ + gSpriteAnim_839AC24, + gSpriteAnim_839AC2C, +}; + +void sub_8080338(struct Sprite *); +const struct SpriteTemplate gSpriteTemplate_839AC3C = +{ + .tileTag = 4612, + .paletteTag = 4609, + .oam = &gOamData_839AC1C, + .anims = gSpriteAnimTable_839AC34, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_8080338, +}; + +const struct SpriteSheet gWeatherSandstormSpriteSheet = {WeatherSandstormTiles, sizeof(WeatherSandstormTiles), 0x1204}; + +bool8 sub_807E7B4(void) +{ + u8 r7; + u8 spriteId; + + if (gWeatherPtr->unknown_6DA == 24) + return FALSE; + + r7 = gWeatherPtr->unknown_6DA; + spriteId = CreateSpriteAtEnd(&gSpriteTemplate_839AAA4, + gUnknown_0839AA08[r7].x, gUnknown_0839AA08[r7].y, 78); + if (spriteId != 64) + { + gSprites[spriteId].data[5] = 0; + gSprites[spriteId].data[1] = r7 * 145; + while (gSprites[spriteId].data[1] >= 600) + gSprites[spriteId].data[1] -= 600; + sub_807E4EC(&gSprites[spriteId]); + sub_807E6F0(&gSprites[spriteId], r7 * 9); + gSprites[spriteId].invisible = TRUE; + gWeatherPtr->unknown_0[r7] = &gSprites[spriteId]; + } + else + { + gWeatherPtr->unknown_0[r7] = NULL; + } + + if (++gWeatherPtr->unknown_6DA == 24) + { + u16 i; + + for (i = 0; i < 24; i++) + { + if (gWeatherPtr->unknown_0[i] != NULL) + { + if (gWeatherPtr->unknown_0[i]->data[6] == 0) + gWeatherPtr->unknown_0[i]->callback = sub_807E5C0; + else + gWeatherPtr->unknown_0[i]->callback = sub_807E6C4; + } + } + return FALSE; + } + return TRUE; +} + +bool8 sub_807E8E8(void) +{ + if (gWeatherPtr->unknown_6D8 == gWeatherPtr->unknown_6D9) + return FALSE; + + if (++gWeatherPtr->unknown_6D6 > gWeatherPtr->unknown_6DB) + { + gWeatherPtr->unknown_6D6 = 0; + if (gWeatherPtr->unknown_6D8 < gWeatherPtr->unknown_6D9) + { + gWeatherPtr->unknown_0[gWeatherPtr->unknown_6D8++]->data[5] = 1; + } + else + { + gWeatherPtr->unknown_6D8--; + gWeatherPtr->unknown_0[gWeatherPtr->unknown_6D8]->data[5] = 0; + gWeatherPtr->unknown_0[gWeatherPtr->unknown_6D8]->invisible = TRUE; + } + } + return TRUE; +} + +void sub_807E974(void) +{ + u16 i; + + for (i = 0; i < gWeatherPtr->unknown_6DA; i++) + { + if (gWeatherPtr->unknown_0[i] != NULL) + DestroySprite(gWeatherPtr->unknown_0[i]); + } + gWeatherPtr->unknown_6DA = 0; + FreeSpriteTilesByTag(0x1206); +} + +//------------------------------------------------------------------------------ +// Snow +//------------------------------------------------------------------------------ + +void Snow_InitVars(void) +{ + gWeatherPtr->unknown_6CC = 0; + gWeatherPtr->unknown_6D2 = 0; + gWeatherPtr->unknown_6C1 = 3; + gWeatherPtr->unknown_6C2 = 20; + gWeatherPtr->unknown_6E5 = 16; + gWeatherPtr->unknown_6E0 = 0; +} + +void snowflakes_progress2(void); +void sub_807ED48(struct Sprite *); + +void sub_807EA18(void) +{ + Snow_InitVars(); + while (gWeatherPtr->unknown_6D2 == 0) + { + u16 i; + + snowflakes_progress2(); + for (i = 0; i < gWeatherPtr->unknown_6E4; i++) + { + sub_807ED48(gWeatherPtr->snowflakeSprites[i]); + } + } +} + +u8 snowflakes_progress(void); + +void snowflakes_progress2(void) +{ + if (gWeatherPtr->unknown_6CC == 0 && snowflakes_progress() == FALSE) + { + gWeatherPtr->unknown_6D2 = 1; + gWeatherPtr->unknown_6CC++; + } +} + +bool8 sub_807EAC0(void) +{ + switch (gWeatherPtr->unknown_6CE) + { + case 0: + gWeatherPtr->unknown_6E5 = 0; + gWeatherPtr->unknown_6E0 = 0; + gWeatherPtr->unknown_6CE++; + // fall through + case 1: + if (snowflakes_progress() == FALSE) + { + gWeatherPtr->unknown_6CE++; + return FALSE; + } + return TRUE; + } + return FALSE; +} + +bool8 snowflake_add(void); +bool8 snowflake_remove(void); + +bool8 snowflakes_progress(void) +{ + if (gWeatherPtr->unknown_6E4 == gWeatherPtr->unknown_6E5) + return FALSE; + + gWeatherPtr->unknown_6E0++; + if (gWeatherPtr->unknown_6E0 > 36) + { + gWeatherPtr->unknown_6E0 = 0; + if (gWeatherPtr->unknown_6E4 < gWeatherPtr->unknown_6E5) + snowflake_add(); + else + snowflake_remove(); + } + return (gWeatherPtr->unknown_6E4 != gWeatherPtr->unknown_6E5); +} + +void sub_807EC40(struct Sprite *); + +bool8 snowflake_add(void) +{ + u8 spriteId = CreateSpriteAtEnd(&gSpriteTemplate_839AB04, 0, 0, 78); + + if (spriteId == 64) + return FALSE; + gSprites[spriteId].data[4] = gWeatherPtr->unknown_6E4; + sub_807EC40(&gSprites[spriteId]); + gSprites[spriteId].coordOffsetEnabled = TRUE; + gWeatherPtr->snowflakeSprites[gWeatherPtr->unknown_6E4++] = &gSprites[spriteId]; + return TRUE; +} + +bool8 snowflake_remove(void) +{ + if (gWeatherPtr->unknown_6E4 != 0) + { + DestroySprite(gWeatherPtr->snowflakeSprites[--gWeatherPtr->unknown_6E4]); + return TRUE; + } + return FALSE; +} + +void sub_807EC40(struct Sprite *sprite) +{ + u16 r4 = ((sprite->data[4] * 5) & 7) * 30 + (Random() % 30); + u16 r6; + + sprite->pos1.y = -3 - (gSpriteCoordOffsetY + sprite->centerToCornerVecY); + sprite->pos1.x = r4 - (gSpriteCoordOffsetX + sprite->centerToCornerVecX); + sprite->data[0] = sprite->pos1.y * 128; + sprite->pos2.x = 0; + r6 = Random(); + sprite->data[1] = (r6 & 3) * 5 + 64; + sprite->data[7] = (r6 & 3) * 5 + 64; + StartSpriteAnim(sprite, (r6 & 1) ? 0 : 1); + sprite->data[3] = 0; + sprite->data[2] = ((r6 & 3) == 0) ? 2 : 1; + sprite->data[6] = (r6 & 0x1F) + 210; + sprite->data[5] = 0; +} + +void sub_807ECEC(struct Sprite *sprite) +{ + if (gWeatherPtr->unknown_6E2 > 18) + { + sprite->invisible = FALSE; + sprite->callback = sub_807ED48; + sprite->pos1.y = 0xFA - (gSpriteCoordOffsetY + sprite->centerToCornerVecY); + sprite->data[0] = sprite->pos1.y * 128; + gWeatherPtr->unknown_6E2 = 0; + } +} + +void sub_807ED48(struct Sprite *sprite) +{ + s16 r3; + s16 r2; + + sprite->data[0] += sprite->data[1]; + sprite->pos1.y = sprite->data[0] >> 7; + sprite->data[3] = (sprite->data[3] + sprite->data[2]) & 0xFF; + sprite->pos2.x = gSineTable[sprite->data[3]] / 64; + + r3 = (sprite->pos1.x + sprite->centerToCornerVecX + gSpriteCoordOffsetX) & 0x1FF; + if (r3 & 0x100) + r3 = -0x100 | r3; // hmm... what is this? + if (r3 < -3) + sprite->pos1.x = 242 - (gSpriteCoordOffsetX + sprite->centerToCornerVecX); + else if (r3 > 242) + sprite->pos1.x = -3 - (gSpriteCoordOffsetX + sprite->centerToCornerVecX); + + r2 = (sprite->pos1.y + sprite->centerToCornerVecY + gSpriteCoordOffsetY) & 0xFF; + if (r2 > 163 && r2 < 171) + { + sprite->pos1.y = 250 - (gSpriteCoordOffsetY + sprite->centerToCornerVecY); + sprite->data[0] = sprite->pos1.y * 128; + sprite->data[5] = 0; + sprite->data[6] = 220; + } + else if (r2 > 242 && r2 < 250) + { + sprite->pos1.y = 163; + sprite->data[0] = sprite->pos1.y * 128; + sprite->data[5] = 0; + sprite->data[6] = 220; + sprite->invisible = TRUE; + sprite->callback = sub_807ECEC; + } + + sprite->data[5]++; + if (sprite->data[5] == sprite->data[6]) + { + sub_807EC40(sprite); + sprite->pos1.y = 250; + sprite->invisible = TRUE; + sprite->callback = sub_807ECEC; + } +} + +//------------------------------------------------------------------------------ +// Medium Rain +//------------------------------------------------------------------------------ + +void sub_807EE80(void) +{ + gWeatherPtr->unknown_6CC = 0; + gWeatherPtr->unknown_6D2 = 0; + gWeatherPtr->unknown_6D6 = 0; + gWeatherPtr->unknown_6DB = 4; + gWeatherPtr->unknown_6DC = 0; + gWeatherPtr->unknown_6D9 = 16; + gWeatherPtr->unknown_6C1 = 3; + gWeatherPtr->unknown_6C2 = 20; + gWeatherPtr->unknown_6D2 = 0; // duplicate assignment + gWeatherPtr->unknown_6ED = 0; + SetRainStrengthFromSoundEffect(SE_T_AME); +} + +void sub_807EFC0(void); + +void sub_807EEF4(void) +{ + sub_807EE80(); + while (gWeatherPtr->unknown_6D2 == 0) + sub_807EFC0(); +} + +//------------------------------------------------------------------------------ +// Heavy Rain +//------------------------------------------------------------------------------ + +void sub_807EF24(void) +{ + gWeatherPtr->unknown_6CC = 0; + gWeatherPtr->unknown_6D2 = 0; + gWeatherPtr->unknown_6D6 = 0; + gWeatherPtr->unknown_6DB = 4; + gWeatherPtr->unknown_6DC = 1; + gWeatherPtr->unknown_6D9 = 24; + gWeatherPtr->unknown_6C1 = 3; + gWeatherPtr->unknown_6C2 = 20; + gWeatherPtr->unknown_6D2 = 0; // duplicate assignment + SetRainStrengthFromSoundEffect(SE_T_OOAME); +} + +void sub_807EF90(void) +{ + sub_807EF24(); + while (gWeatherPtr->unknown_6D2 == 0) + sub_807EFC0(); +} + +void sub_807F434(void); +void sub_807F3F8(u16); + +void sub_807EFC0(void) +{ + sub_807F434(); + switch (gWeatherPtr->unknown_6CC) + { + case 0: + sub_807E7A4(); + gWeatherPtr->unknown_6CC++; + break; + case 1: + if (sub_807E7B4()) + break; + gWeatherPtr->unknown_6CC++; + break; + case 2: + if (sub_807E8E8()) + break; + gWeatherPtr->unknown_6D2 = 1; + gWeatherPtr->unknown_6CC++; + break; + case 3: + if (gWeatherPtr->unknown_6C6 == 0) + break; + gWeatherPtr->unknown_6CC = 6; + break; + case 4: + gWeatherPtr->unknown_6EA = 1; + gWeatherPtr->unknown_6E6 = (Random() % 360) + 360; + gWeatherPtr->unknown_6CC++; + // fall through + case 5: + if (--gWeatherPtr->unknown_6E6 != 0) + break; + gWeatherPtr->unknown_6CC++; + break; + case 6: + gWeatherPtr->unknown_6EA = 1; + gWeatherPtr->unknown_6EB = Random() % 2; + gWeatherPtr->unknown_6CC++; + break; + case 7: + gWeatherPtr->unknown_6EC = (Random() & 1) + 1; + gWeatherPtr->unknown_6CC++; + // fall through + case 8: + sub_807D5BC(19); + if (gWeatherPtr->unknown_6EB == 0 && gWeatherPtr->unknown_6EC == 1) + sub_807F3F8(20); + gWeatherPtr->unknown_6E6 = (Random() % 3) + 6; + gWeatherPtr->unknown_6CC++; + break; + case 9: + if (--gWeatherPtr->unknown_6E6 != 0) + break; + sub_807D5BC(3); + gWeatherPtr->unknown_6EA = 1; + if (--gWeatherPtr->unknown_6EC != 0) + { + gWeatherPtr->unknown_6E6 = (Random() % 16) + 60; + gWeatherPtr->unknown_6CC = 10; + } + else if (gWeatherPtr->unknown_6EB == 0) + { + gWeatherPtr->unknown_6CC = 4; + } + else + { + gWeatherPtr->unknown_6CC = 11; + } + break; + case 10: + if (--gWeatherPtr->unknown_6E6 != 0) + break; + gWeatherPtr->unknown_6CC = 8; + break; + case 11: + gWeatherPtr->unknown_6E6 = (Random() % 16) + 60; + gWeatherPtr->unknown_6CC++; + break; + case 12: + if (--gWeatherPtr->unknown_6E6 != 0) + break; + sub_807F3F8(100); + sub_807D5BC(19); + // Why use "% 16" everywhere else and "& 0xF" here. So dumb. + gWeatherPtr->unknown_6E6 = (Random() & 0xF) + 30; + gWeatherPtr->unknown_6CC++; + break; + case 13: + if (--gWeatherPtr->unknown_6E6 != 0) + break; + sub_807D5F0(19, 3, 5); + gWeatherPtr->unknown_6CC++; + break; + case 14: + if (gWeatherPtr->unknown_6C6 != 3) + break; + gWeatherPtr->unknown_6EA = 1; + gWeatherPtr->unknown_6CC = 4; + break; + } +} + +bool8 sub_807F34C(void) +{ + switch (gWeatherPtr->unknown_6CE) + { + case 0: + gWeatherPtr->unknown_6EA = 0; + gWeatherPtr->unknown_6CE++; + // fall through + case 1: + sub_807EFC0(); + if (gWeatherPtr->unknown_6EA != 0) + { + if (gWeatherPtr->unknown_6D1 == 3 + || gWeatherPtr->unknown_6D1 == 5 + || gWeatherPtr->unknown_6D1 == 13) + return FALSE; + gWeatherPtr->unknown_6D9 = 0; + gWeatherPtr->unknown_6CE++; + } + break; + case 2: + if (sub_807E8E8()) + break; + sub_807E974(); + gWeatherPtr->unknown_6ED = 0; + gWeatherPtr->unknown_6CE++; + return FALSE; + default: + return FALSE; + } + return TRUE; +} + +void sub_807F3F8(u16 a) +{ + if (gWeatherPtr->unknown_6ED == 0) + { + gWeatherPtr->unknown_6E8 = Random() % a; + gWeatherPtr->unknown_6ED = 1; + } +} + +void sub_807F434(void) +{ + if (gWeatherPtr->unknown_6ED == 1) + { + if (gWeatherPtr->unknown_6E8 == 0) + { + if (IsSEPlaying()) + return; + if (Random() & 1) + PlaySE(SE_T_KAMI); + else + PlaySE(SE_T_KAMI2); + gWeatherPtr->unknown_6ED = 0; + } + else + { + gWeatherPtr->unknown_6E8--; + } + } +} + +void sub_807F49C(void) +{ + gWeatherPtr->unknown_6CC = 0; + gWeatherPtr->unknown_6D2 = 0; + gWeatherPtr->unknown_6C1 = 0; + gWeatherPtr->unknown_6C2 = 20; + if (gWeatherPtr->unknown_6FB == 0) + { + gWeatherPtr->unknown_6F0 = 0; + gWeatherPtr->unknown_6F2 = 0; + gWeatherPtr->unknown_6EE = 0; + sub_807DB64(0, 16); + } +} + +void sub_807F52C(void); + +void sub_807F4FC(void) +{ + sub_807F49C(); + while (gWeatherPtr->unknown_6D2 == 0) + sub_807F52C(); +} + +void sub_807F6E8(void); + +void sub_807F52C(void) +{ + gWeatherPtr->unknown_6EE = (gSpriteCoordOffsetX - gWeatherPtr->unknown_6F2) & 0xFF; + if (++gWeatherPtr->unknown_6F0 > 3) + { + gWeatherPtr->unknown_6F0 = 0; + gWeatherPtr->unknown_6F2++; + } + switch (gWeatherPtr->unknown_6CC) + { + case 0: + sub_807F6E8(); + if (gWeatherPtr->currWeather == 6) + sub_807DBA4(12, 8, 3); + else + sub_807DBA4(4, 16, 0); + gWeatherPtr->unknown_6CC++; + break; + case 1: + if (sub_807DBE8()) + { + gWeatherPtr->unknown_6D2 = 1; + gWeatherPtr->unknown_6CC++; + } + break; + } +} + +void sub_807F7A4(void); + +bool8 sub_807F5EC(void) +{ + gWeatherPtr->unknown_6EE = (gSpriteCoordOffsetX - gWeatherPtr->unknown_6F2) & 0xFF; + if (++gWeatherPtr->unknown_6F0 > 3) + { + gWeatherPtr->unknown_6F0 = 0; + gWeatherPtr->unknown_6F2++; + } + switch (gWeatherPtr->unknown_6CE) + { + case 0: + sub_807DBA4(0, 16, 3); + gWeatherPtr->unknown_6CE++; + break; + case 1: + if (!sub_807DBE8()) + break; + gWeatherPtr->unknown_6CE++; + break; + case 2: + sub_807F7A4(); + gWeatherPtr->unknown_6CE++; + break; + default: + return FALSE; + } + return TRUE; +} + +void sub_807F688(struct Sprite *sprite) +{ + sprite->pos2.y = (u8)gSpriteCoordOffsetY; + sprite->pos1.x = gWeatherPtr->unknown_6EE + 32 + sprite->data[0] * 64; + if (sprite->pos1.x > 0x10F) + { + sprite->pos1.x = 480 + gWeatherPtr->unknown_6EE - (4 - sprite->data[0]) * 64; + sprite->pos1.x &= 0x1FF; + } +} -- cgit v1.2.3 From 37418d05c404aec70745e238796c11b464da33ef Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Sat, 25 Nov 2017 18:07:24 -0600 Subject: label and decompile more of field_weather_2 --- src/field/field_weather.c | 255 ++++++------- src/field/field_weather_2.c | 892 +++++++++++++++++++++++++------------------- src/field/overworld.c | 2 +- 3 files changed, 645 insertions(+), 504 deletions(-) (limited to 'src') diff --git a/src/field/field_weather.c b/src/field/field_weather.c index 2d4711b81..edb186b95 100644 --- a/src/field/field_weather.c +++ b/src/field/field_weather.c @@ -28,10 +28,10 @@ struct WeatherPaletteData struct WeatherCallbacks { - void (*func0)(void); - void (*func1)(void); - void (*func2)(void); - u8 (*func3)(void); + void (*initVars)(void); + void (*main)(void); + void (*initAll)(void); + u8 (*finish)(void); }; extern struct Weather gWeather; @@ -48,7 +48,7 @@ const u8 DroughtPaletteData_5[] = INCBIN_U8("graphics/weather/drought5.bin.lz"); extern u8 (*gUnknown_0202FC48)[32]; extern u8 gUnknown_0202F9E8[32]; -const u8 *const gUnknown_08396FA8[] = +static const u8 *const sCompressedDroughtPalettes[] = { DroughtPaletteData_0, DroughtPaletteData_1, @@ -65,34 +65,34 @@ const u8 *const gUnknown_08396FA8[] = // this file produces the same result as accessing gWeather directly. struct Weather *const gWeatherPtr = &gWeather; -void sub_807CAE8(void); -void nullsub_38(void); -u8 sub_807CB0C(void); -void sub_807DE78(void); -void sub_807DEF4(void); -void sub_807DEC4(void); -u8 sub_807DF54(void); +void None_Init(void); +void None_Main(void); +u8 None_Finish(void); +void Clouds_InitVars(void); +void Clouds_Main(void); +void Clouds_InitAll(void); +u8 Clouds_Finish(void); void sub_807DF9C(void); void nullsub_55(void); void sub_807DFC0(void); u8 sub_807DFD0(void); void LightRain_InitVars(void); -void sub_807E400(void); -void sub_807E3D0(void); -u8 sub_807E460(void); +void LightRain_Main(void); +void LightRain_InitAll(void); +u8 LightRain_Finish(void); void Snow_InitVars(void); -void snowflakes_progress2(void); -void sub_807EA18(void); -u8 sub_807EAC0(void); -void sub_807EE80(void); -void sub_807EFC0(void); -void sub_807EEF4(void); -u8 sub_807F34C(void); -void sub_807F49C(void); -void sub_807F52C(void); -void sub_807F4FC(void); -u8 sub_807F5EC(void); -void sub_807F7F8(void); +void Snow_Main(void); +void Snow_InitAll(void); +u8 Snow_Finish(void); +void MedRain_InitVars(void); +void Rain_Main(void); +void MedRain_InitAll(void); +u8 Rain_Finish(void); +void Fog2_InitVars(void); +void Fog2_Main(void); +void Fog2_InitAll(void); +u8 Fog2_Finish(void); +void Fog1_InitVars(void); void sub_807F888(void); void sub_807F858(void); u8 sub_807F934(void); @@ -104,10 +104,10 @@ void sub_807FB24(void); void sub_807FBD8(void); void sub_807FBA8(void); u8 sub_807FC3C(void); -void sub_807F49C(void); -void sub_807F52C(void); -void sub_807F4FC(void); -u8 sub_807F5EC(void); +void Fog2_InitVars(void); +void Fog2_Main(void); +void Fog2_InitAll(void); +u8 Fog2_Finish(void); void sub_8080430(void); void nullsub_56(void); void sub_8080460(void); @@ -116,32 +116,32 @@ void sub_807E110(void); void sub_807E174(void); void sub_807E144(void); u8 sub_807E258(void); -void sub_807EF24(void); -void sub_807EFC0(void); -void sub_807EF90(void); -u8 sub_807F34C(void); +void HeavyRain_InitVars(void); +void Rain_Main(void); +void HeavyRain_InitAll(void); +u8 Rain_Finish(void); void sub_8080474(void); void sub_80804F8(void); void sub_80804C8(void); u8 sub_808056C(void); -const struct WeatherCallbacks gUnknown_08396FC8[] = +static const struct WeatherCallbacks sWeatherFuncs[] = { - {sub_807CAE8, nullsub_38, sub_807CAE8, sub_807CB0C}, - {sub_807DE78, sub_807DEF4, sub_807DEC4, sub_807DF54}, - {sub_807DF9C, nullsub_55, sub_807DFC0, sub_807DFD0}, - {LightRain_InitVars, sub_807E400, sub_807E3D0, sub_807E460}, // light rain - {Snow_InitVars, snowflakes_progress2, sub_807EA18, sub_807EAC0}, // snow - {sub_807EE80, sub_807EFC0, sub_807EEF4, sub_807F34C}, - {sub_807F49C, sub_807F52C, sub_807F4FC, sub_807F5EC}, - {sub_807F7F8, sub_807F888, sub_807F858, sub_807F934}, - {sub_807FE9C, sub_807FF4C, sub_807FF1C, sub_807FFC8}, - {sub_807FB24, sub_807FBD8, sub_807FBA8, sub_807FC3C}, - {sub_807F49C, sub_807F52C, sub_807F4FC, sub_807F5EC}, - {sub_8080430, nullsub_56, sub_8080460, sub_8080470}, - {sub_807E110, sub_807E174, sub_807E144, sub_807E258}, - {sub_807EF24, sub_807EFC0, sub_807EF90, sub_807F34C}, - {sub_8080474, sub_80804F8, sub_80804C8, sub_808056C}, + {None_Init, None_Main, None_Init, None_Finish}, + {Clouds_InitVars, Clouds_Main, Clouds_InitAll, Clouds_Finish}, + {sub_807DF9C, nullsub_55, sub_807DFC0, sub_807DFD0}, + {LightRain_InitVars, LightRain_Main, LightRain_InitAll, LightRain_Finish}, // light rain + {Snow_InitVars, Snow_Main, Snow_InitAll, Snow_Finish}, // snow + {MedRain_InitVars, Rain_Main, MedRain_InitAll, Rain_Finish}, + {Fog2_InitVars, Fog2_Main, Fog2_InitAll, Fog2_Finish}, + {Fog1_InitVars, sub_807F888, sub_807F858, sub_807F934}, // fog 1 + {sub_807FE9C, sub_807FF4C, sub_807FF1C, sub_807FFC8}, + {sub_807FB24, sub_807FBD8, sub_807FBA8, sub_807FC3C}, + {Fog2_InitVars, Fog2_Main, Fog2_InitAll, Fog2_Finish}, + {sub_8080430, nullsub_56, sub_8080460, sub_8080470}, + {sub_807E110, sub_807E174, sub_807E144, sub_807E258}, + {HeavyRain_InitVars, Rain_Main, HeavyRain_InitAll, Rain_Finish}, + {sub_8080474, sub_80804F8, sub_80804C8, sub_808056C}, }; void (*const gUnknown_083970B8[])(void) = @@ -190,10 +190,10 @@ const u8 gUnknown_083970C8[] = const u16 gUnknown_083970E8[] = INCBIN_U16("graphics/weather/0.gbapal"); -void sub_807C828(void) +void StartWeather(void) { u8 index; - if (!FuncIsActiveTask(sub_807CA34)) + if (!FuncIsActiveTask(Task_WeatherMain)) { index = AllocSpritePalette(0x1200); CpuCopy32(gUnknown_083970E8, &gPlttBufferUnfaded[0x100 + index * 16], 32); @@ -202,8 +202,8 @@ void sub_807C828(void) gWeatherPtr->unknown_6D4 = AllocSpritePalette(0x1201); gWeatherPtr->unknown_6DA = 0; gWeatherPtr->unknown_6D8 = 0; - gWeatherPtr->unknown_6DE = 0; - gWeatherPtr->unknown_6E4 = 0; + gWeatherPtr->cloudsActive = 0; + gWeatherPtr->snowflakeSpriteCount = 0; gWeatherPtr->unknown_700 = 0; gWeatherPtr->unknown_6FB = 0; gWeatherPtr->unknown_724 = 0; @@ -211,12 +211,12 @@ void sub_807C828(void) gWeatherPtr->unknown_717 = 0; gWeatherPtr->unknown_72E = 0; gWeatherPtr->unknown_6FA = 0; - sub_807DB64(16, 0); + Weather_SetBlendCoeffs(16, 0); gWeatherPtr->currWeather = 0; gWeatherPtr->unknown_6C6 = 3; gWeatherPtr->unknown_6C8 = 0; gWeatherPtr->unknown_6D3 = 1; - gWeatherPtr->unknown_6C9 = CreateTask(sub_807C9E4, 80); + gWeatherPtr->unknown_6C9 = CreateTask(Task_WeatherInit, 80); } } @@ -226,12 +226,12 @@ void DoWeatherEffect(u8 effect) { PlayRainSoundEffect(); } - if (gWeatherPtr->unknown_6D1 != effect && gWeatherPtr->currWeather == effect) + if (gWeatherPtr->nextWeather != effect && gWeatherPtr->currWeather == effect) { - gUnknown_08396FC8[effect].func0(); + sWeatherFuncs[effect].initVars(); } gWeatherPtr->unknown_6D3 = 0; - gWeatherPtr->unknown_6D1 = effect; + gWeatherPtr->nextWeather = effect; gWeatherPtr->unknown_6CE = 0; } @@ -239,59 +239,57 @@ void sub_807C988(u8 effect) { PlayRainSoundEffect(); gWeatherPtr->currWeather = effect; - gWeatherPtr->unknown_6D1 = effect; + gWeatherPtr->nextWeather = effect; } void sub_807C9B4(u8 effect) { PlayRainSoundEffect(); gWeatherPtr->currWeather = effect; - gWeatherPtr->unknown_6D1 = effect; + gWeatherPtr->nextWeather = effect; gWeatherPtr->unknown_6C8 = 1; } -void sub_807C9E4(u8 taskId) +void Task_WeatherInit(u8 taskId) { if (gWeatherPtr->unknown_6C8) { - gUnknown_08396FC8[gWeatherPtr->currWeather].func2(); - gTasks[taskId].func = sub_807CA34; + sWeatherFuncs[gWeatherPtr->currWeather].initAll(); + gTasks[taskId].func = Task_WeatherMain; } } -void sub_807CA34(u8 task) +void Task_WeatherMain(u8 taskId) { - u8 v1; - if (gWeatherPtr->currWeather != gWeatherPtr->unknown_6D1) + if (gWeatherPtr->currWeather != gWeatherPtr->nextWeather) { - v1 = gUnknown_08396FC8[gWeatherPtr->currWeather].func3(); - if (!v1) + if (!sWeatherFuncs[gWeatherPtr->currWeather].finish()) { - gUnknown_08396FC8[gWeatherPtr->unknown_6D1].func0(); - gWeatherPtr->unknown_6C3 = 0; // compiler reuses v1 - gWeatherPtr->unknown_6C6 = 0; // compiler reuses v1 - gWeatherPtr->currWeather = gWeatherPtr->unknown_6D1; + sWeatherFuncs[gWeatherPtr->nextWeather].initVars(); + gWeatherPtr->unknown_6C3 = 0; + gWeatherPtr->unknown_6C6 = 0; + gWeatherPtr->currWeather = gWeatherPtr->nextWeather; gWeatherPtr->unknown_6D3 = 1; } } else { - gUnknown_08396FC8[gWeatherPtr->currWeather].func1(); + sWeatherFuncs[gWeatherPtr->currWeather].main(); } gUnknown_083970B8[gWeatherPtr->unknown_6C6](); } -void sub_807CAE8(void) +void None_Init(void) { gWeatherPtr->unknown_6C1 = 0; gWeatherPtr->unknown_6C2 = 0; } -void nullsub_38(void) +void None_Main(void) { } -u8 sub_807CB0C(void) +u8 None_Finish(void) { return 0; } @@ -627,14 +625,14 @@ void sub_807D1BC(u8 a1, u8 a2, s8 c, u8 d, u16 e) } } -void sub_807D304(s8 a, u8 arg2, u16 c) +void sub_807D304(s8 a, u8 coeff, u16 c) { struct RGBColor color; u8 r_; u8 g_; u8 b_; u16 r4; - u16 r5; + u16 palOffset; u16 r12; a = -a - 1; @@ -642,13 +640,13 @@ void sub_807D304(s8 a, u8 arg2, u16 c) r_ = color.r; g_ = color.g; b_ = color.b; - r5 = 0; + palOffset = 0; for (r4 = 0; r4 < 32; r4++) { if (gUnknown_030006DC[r4] == 0) { - BlendPalette(r5, 16, arg2, c); - r5 += 16; + BlendPalette(palOffset, 16, coeff, c); + palOffset += 16; } else { @@ -660,7 +658,7 @@ void sub_807D304(s8 a, u8 arg2, u16 c) u8 r1, g1, b1; u8 r2, g2, b2; - color1 = *(struct RGBColor *)&gPlttBufferUnfaded[r5]; + color1 = *(struct RGBColor *)&gPlttBufferUnfaded[palOffset]; r1 = color1.r; g1 = color1.g; b1 = color1.b; @@ -671,11 +669,11 @@ void sub_807D304(s8 a, u8 arg2, u16 c) g2 = color2.g; b2 = color2.b; - r2 += ((r_ - r2) * arg2) >> 4; - g2 += ((g_ - g2) * arg2) >> 4; - b2 += ((b_ - b2) * arg2) >> 4; + r2 += ((r_ - r2) * coeff) >> 4; + g2 += ((g_ - g2) * coeff) >> 4; + b2 += ((b_ - b2) * coeff) >> 4; - gPlttBufferFaded[r5++] = (b2 << 10) | (g2 << 5) | r2; + gPlttBufferFaded[palOffset++] = (b2 << 10) | (g2 << 5) | r2; } } } @@ -775,28 +773,28 @@ void sub_807D5F0(u8 a, u8 b, u8 c) } } -void fade_screen(u8 a, u8 b) +void fade_screen(u8 a, u8 delay) { - u32 r4; + u32 fadeColor; u32 r1; u32 r2; switch (a) { case 0: - r4 = 0; + fadeColor = 0; r1 = 0; break; case 2: - r4 = 0xFFFF; + fadeColor = 0xFFFF; r1 = 0; break; case 1: - r4 = 0; + fadeColor = 0; r1 = 1; break; case 3: - r4 = 0xFFFF; + fadeColor = 0xFFFF; r1 = 1; break; default: @@ -823,20 +821,20 @@ void fade_screen(u8 a, u8 b) { if (r2 != 0) CpuFastCopy(gPlttBufferFaded, gPlttBufferUnfaded, 0x400); - BeginNormalPaletteFade(0xFFFFFFFF, b, 0, 16, r4); + BeginNormalPaletteFade(0xFFFFFFFF, delay, 0, 16, fadeColor); gWeatherPtr->unknown_6C6 = 2; } else { - gWeatherPtr->unknown_6C4 = r4; + gWeatherPtr->unknown_6C4 = fadeColor; if (r2 != 0) gWeatherPtr->unknown_6C7 = 0; else - BeginNormalPaletteFade(0xFFFFFFFF, b, 16, 0, r4); + BeginNormalPaletteFade(0xFFFFFFFF, delay, 16, 0, fadeColor); gWeatherPtr->unknown_6C6 = 1; gWeatherPtr->unknown_6CA = 1; gWeatherPtr->unknown_6CB = 0; - sub_807DB64(gWeatherPtr->unknown_730, gWeatherPtr->unknown_732); + Weather_SetBlendCoeffs(gWeatherPtr->currBlendEVA, gWeatherPtr->currBlendEVB); gWeatherPtr->unknown_6C8 = 1; } } @@ -909,7 +907,7 @@ void sub_807D8F0(u8 *a, u8 *b) if (r4 < 7) { r4--; - LZ77UnCompWram(gUnknown_08396FA8[r4], eWeatherPaletteData.data[r4]); + LZ77UnCompWram(sCompressedDroughtPalettes[r4], eWeatherPaletteData.data[r4]); if (r4 == 0) { eWeatherPaletteData.data[r4][0] = 0x421; @@ -921,8 +919,7 @@ void sub_807D8F0(u8 *a, u8 *b) for (i = 0; i < 0x1000; i++) eWeatherPaletteData.data[r4][i] += eWeatherPaletteData.data[r4 - 1][i]; } - (*a)++; - if (*a == 7) + if (++(*a) == 7) { *a = 32; *b = 32; @@ -997,52 +994,58 @@ void sub_807DA4C(void) } } -void sub_807DB64(u8 a, u8 b) +void Weather_SetBlendCoeffs(u8 eva, u8 evb) { - gWeatherPtr->unknown_730 = a; - gWeatherPtr->unknown_732 = b; - gWeatherPtr->unknown_734 = a; - gWeatherPtr->unknown_736 = b; - REG_BLDALPHA = (b << 8) | a; + gWeatherPtr->currBlendEVA = eva; + gWeatherPtr->currBlendEVB = evb; + gWeatherPtr->targetBlendEVA = eva; + gWeatherPtr->targetBlendEVB = evb; + REG_BLDALPHA = BLDALPHA_BLEND(eva, evb); } -void sub_807DBA4(u8 a, u8 b, int c) +void Weather_SetTargetBlendCoeffs(u8 eva, u8 evb, int delay) { - gWeatherPtr->unknown_734 = a; - gWeatherPtr->unknown_736 = b; - gWeatherPtr->unknown_73A = c; + gWeatherPtr->targetBlendEVA = eva; + gWeatherPtr->targetBlendEVB = evb; + gWeatherPtr->blendDelay = delay; gWeatherPtr->unknown_739 = 0; gWeatherPtr->unknown_738 = 0; } -bool8 sub_807DBE8(void) +bool8 Weather_UpdateBlend(void) { - if (gWeatherPtr->unknown_730 == gWeatherPtr->unknown_734 - && gWeatherPtr->unknown_732 == gWeatherPtr->unknown_736) + if (gWeatherPtr->currBlendEVA == gWeatherPtr->targetBlendEVA + && gWeatherPtr->currBlendEVB == gWeatherPtr->targetBlendEVB) return TRUE; - if (++gWeatherPtr->unknown_739 > gWeatherPtr->unknown_73A) + + if (++gWeatherPtr->unknown_739 > gWeatherPtr->blendDelay) { gWeatherPtr->unknown_739 = 0; gWeatherPtr->unknown_738++; + + // Update currBlendEVA and currBlendEVB on alternate frames if (gWeatherPtr->unknown_738 & 1) { - if (gWeatherPtr->unknown_730 < gWeatherPtr->unknown_734) - gWeatherPtr->unknown_730++; - else if (gWeatherPtr->unknown_730 > gWeatherPtr->unknown_734) - gWeatherPtr->unknown_730--; + if (gWeatherPtr->currBlendEVA < gWeatherPtr->targetBlendEVA) + gWeatherPtr->currBlendEVA++; + else if (gWeatherPtr->currBlendEVA > gWeatherPtr->targetBlendEVA) + gWeatherPtr->currBlendEVA--; } else { - if (gWeatherPtr->unknown_732 < gWeatherPtr->unknown_736) - gWeatherPtr->unknown_732++; - else if (gWeatherPtr->unknown_732 > gWeatherPtr->unknown_736) - gWeatherPtr->unknown_732--; + if (gWeatherPtr->currBlendEVB < gWeatherPtr->targetBlendEVB) + gWeatherPtr->currBlendEVB++; + else if (gWeatherPtr->currBlendEVB > gWeatherPtr->targetBlendEVB) + gWeatherPtr->currBlendEVB--; } } - REG_BLDALPHA = (gWeatherPtr->unknown_732 << 8) | gWeatherPtr->unknown_730; - if (gWeatherPtr->unknown_730 == gWeatherPtr->unknown_734 - && gWeatherPtr->unknown_732 == gWeatherPtr->unknown_736) + + REG_BLDALPHA = BLDALPHA_BLEND(gWeatherPtr->currBlendEVA, gWeatherPtr->currBlendEVB); + + if (gWeatherPtr->currBlendEVA == gWeatherPtr->targetBlendEVA + && gWeatherPtr->currBlendEVB == gWeatherPtr->targetBlendEVB) return TRUE; + return FALSE; } diff --git a/src/field/field_weather_2.c b/src/field/field_weather_2.c index fa97df459..d2ef34f6f 100644 --- a/src/field/field_weather_2.c +++ b/src/field/field_weather_2.c @@ -11,34 +11,28 @@ extern struct Weather *const gWeatherPtr; -//extern const s16 gUnknown_0839A9C8[][2]; -extern const struct SpriteSheet gWeatherCloudSpriteSheet; -extern const struct SpriteTemplate gSpriteTemplate_839A9F0; -extern const struct SpriteTemplate gSpriteTemplate_839AAA4; -extern const struct SpriteTemplate gSpriteTemplate_839AB04; - const u16 gUnknown_08397108[] = INCBIN_U16("graphics/weather/1.gbapal"); const u16 gUnknown_08397128[] = INCBIN_U16("graphics/weather/2.gbapal"); -const u8 WeatherFog0Tiles[] = INCBIN_U8("graphics/weather/fog0.4bpp"); const u8 gWeatherFog1Tiles[] = INCBIN_U8("graphics/weather/fog1.4bpp"); -const u8 WeatherCloudTiles[] = INCBIN_U8("graphics/weather/cloud.4bpp"); -const u8 gSpriteImage_8398948[] = INCBIN_U8("graphics/weather/snow0.4bpp"); -const u8 gSpriteImage_8398968[] = INCBIN_U8("graphics/weather/snow1.4bpp"); -const u8 WeatherBubbleTiles[] = INCBIN_U8("graphics/weather/bubble.4bpp"); -const u8 WeatherAshTiles[] = INCBIN_U8("graphics/weather/ash.4bpp"); -const u8 WeatherRainTiles[] = INCBIN_U8("graphics/weather/rain.4bpp"); -const u8 WeatherSandstormTiles[] = INCBIN_U8("graphics/weather/sandstorm.4bpp"); +const u8 gWeatherFog2Tiles[] = INCBIN_U8("graphics/weather/fog2.4bpp"); +const u8 gWeatherCloudTiles[] = INCBIN_U8("graphics/weather/cloud.4bpp"); +const u8 gWeatherSnow1Tiles[] = INCBIN_U8("graphics/weather/snow0.4bpp"); +const u8 gWeatherSnow2Tiles[] = INCBIN_U8("graphics/weather/snow1.4bpp"); +const u8 gWeatherBubbleTiles[] = INCBIN_U8("graphics/weather/bubble.4bpp"); +const u8 gWeatherAshTiles[] = INCBIN_U8("graphics/weather/ash.4bpp"); +const u8 gWeatherRainTiles[] = INCBIN_U8("graphics/weather/rain.4bpp"); +const u8 gWeatherSandstormTiles[] = INCBIN_U8("graphics/weather/sandstorm.4bpp"); -const struct Coords16 gUnknown_0839A9C8[] = +static const struct Coords16 gUnknown_0839A9C8[] = { { 0, 66}, { 5, 73}, {10, 78}, }; -const struct SpriteSheet gWeatherCloudSpriteSheet = {WeatherCloudTiles, 0x800, 0x1200}; +static const struct SpriteSheet sCloudSpriteSheet = {gWeatherCloudTiles, 0x800, 0x1200}; -const struct OamData gOamData_839A9DC = +static const struct OamData gOamData_839A9DC = { .y = 0, .affineMode = 0, @@ -55,19 +49,19 @@ const struct OamData gOamData_839A9DC = .affineParam = 0, }; -const union AnimCmd gSpriteAnim_839A9E4[] = +static const union AnimCmd gSpriteAnim_839A9E4[] = { ANIMCMD_FRAME(0, 16), ANIMCMD_END, }; -const union AnimCmd *const gSpriteAnimTable_839A9EC[] = +static const union AnimCmd *const gSpriteAnimTable_839A9EC[] = { gSpriteAnim_839A9E4, }; void sub_807E0F4(struct Sprite *); -const struct SpriteTemplate gSpriteTemplate_839A9F0 = +static const struct SpriteTemplate sCloudSpriteTemplate = { .tileTag = 4608, .paletteTag = 4609, @@ -84,8 +78,8 @@ extern void sub_807D9A8(void); extern bool8 sub_807D9C8(void); extern void sub_807DA14(void); extern void sub_807DA4C(void); -extern void sub_807DBA4(u8 a, u8 b, int c); -extern bool8 sub_807DBE8(void); +extern void Weather_SetTargetBlendCoeffs(u8 a, u8 b, int c); +extern bool8 Weather_UpdateBlend(void); extern void SetRainStrengthFromSoundEffect(u16 sndEff); extern void sub_807D5F0(u8 a, u8 b, u8 c); @@ -93,44 +87,44 @@ extern void sub_807D5F0(u8 a, u8 b, u8 c); // Clouds //------------------------------------------------------------------------------ -void sub_807DE78(void) +void Clouds_InitVars(void) { gWeatherPtr->unknown_6C1 = 0; gWeatherPtr->unknown_6C2 = 20; - gWeatherPtr->unknown_6D2 = 0; - gWeatherPtr->unknown_6CC = 0; - if (gWeatherPtr->unknown_6DE == 0) - sub_807DB64(0, 16); + gWeatherPtr->weatherGfxLoaded = FALSE; + gWeatherPtr->initStep = 0; + if (gWeatherPtr->cloudsActive == FALSE) + Weather_SetBlendCoeffs(0, 16); } -void sub_807DEF4(void); +void Clouds_Main(void); -void sub_807DEC4(void) +void Clouds_InitAll(void) { - sub_807DE78(); - while (gWeatherPtr->unknown_6D2 == 0) - sub_807DEF4(); + Clouds_InitVars(); + while (gWeatherPtr->weatherGfxLoaded == FALSE) + Clouds_Main(); } -void sub_807DFD4(void); +void CreateCloudSprites(void); -void sub_807DEF4(void) +void Clouds_Main(void) { - switch (gWeatherPtr->unknown_6CC) + switch (gWeatherPtr->initStep) { case 0: - sub_807DFD4(); - gWeatherPtr->unknown_6CC++; + CreateCloudSprites(); + gWeatherPtr->initStep++; break; case 1: - sub_807DBA4(12, 8, 1); - gWeatherPtr->unknown_6CC++; + Weather_SetTargetBlendCoeffs(12, 8, 1); + gWeatherPtr->initStep++; break; case 2: - if (sub_807DBE8()) + if (Weather_UpdateBlend()) { - gWeatherPtr->unknown_6D2 = 1; - gWeatherPtr->unknown_6CC++; + gWeatherPtr->weatherGfxLoaded = TRUE; + gWeatherPtr->initStep++; } break; } @@ -138,16 +132,16 @@ void sub_807DEF4(void) void sub_807E0A0(void); -bool8 sub_807DF54(void) +bool8 Clouds_Finish(void) { switch (gWeatherPtr->unknown_6CE) { case 0: - sub_807DBA4(0, 16, 1); + Weather_SetTargetBlendCoeffs(0, 16, 1); gWeatherPtr->unknown_6CE++; return TRUE; case 1: - if (sub_807DBE8()) + if (Weather_UpdateBlend()) { sub_807E0A0(); gWeatherPtr->unknown_6CE++; @@ -177,17 +171,17 @@ int sub_807DFD0(void) return 0; } -void sub_807DFD4(void) +void CreateCloudSprites(void) { u16 i; - if (gWeatherPtr->unknown_6DE == 1) + if (gWeatherPtr->cloudsActive == TRUE) return; - LoadSpriteSheet(&gWeatherCloudSpriteSheet); + LoadSpriteSheet(&sCloudSpriteSheet); sub_807D8C0(gUnknown_08397108); for (i = 0; i < 3; i++) { - u8 spriteId = CreateSprite(&gSpriteTemplate_839A9F0, 0, 0, 0xFF); + u8 spriteId = CreateSprite(&sCloudSpriteTemplate, 0, 0, 0xFF); if (spriteId != 64) { @@ -203,14 +197,14 @@ void sub_807DFD4(void) gWeatherPtr->cloudSprites[i] = NULL; } } - gWeatherPtr->unknown_6DE = 1; + gWeatherPtr->cloudsActive = TRUE; } void sub_807E0A0(void) { u16 i; - if (gWeatherPtr->unknown_6DE == 0) + if (gWeatherPtr->cloudsActive == FALSE) return; for (i = 0; i < 3; i++) { @@ -218,7 +212,7 @@ void sub_807E0A0(void) DestroySprite(gWeatherPtr->cloudSprites[i]); } FreeSpriteTilesByTag(0x1200); - gWeatherPtr->unknown_6DE = 0; + gWeatherPtr->cloudsActive = FALSE; } void sub_807E0F4(struct Sprite *sprite) @@ -230,8 +224,8 @@ void sub_807E0F4(struct Sprite *sprite) void sub_807E110(void) { - gWeatherPtr->unknown_6CC = 0; - gWeatherPtr->unknown_6D2 = 0; + gWeatherPtr->initStep = 0; + gWeatherPtr->weatherGfxLoaded = FALSE; gWeatherPtr->unknown_6C1 = 0; gWeatherPtr->unknown_6C2 = 0; } @@ -241,36 +235,36 @@ void sub_807E174(void); void sub_807E144(void) { sub_807E110(); - while (gWeatherPtr->unknown_6D2 == 0) + while (gWeatherPtr->weatherGfxLoaded == FALSE) sub_807E174(); } void sub_807E174(void) { - switch (gWeatherPtr->unknown_6CC) + switch (gWeatherPtr->initStep) { case 0: if (gWeatherPtr->unknown_6C6 != 0) - gWeatherPtr->unknown_6CC++; + gWeatherPtr->initStep++; break; case 1: sub_807D9A8(); - gWeatherPtr->unknown_6CC++; + gWeatherPtr->initStep++; break; case 2: if (sub_807D9C8() == FALSE) - gWeatherPtr->unknown_6CC++; + gWeatherPtr->initStep++; break; case 3: sub_807DA14(); - gWeatherPtr->unknown_6CC++; + gWeatherPtr->initStep++; break; case 4: sub_807DA4C(); if (gWeatherPtr->unknown_73C == 6) { - gWeatherPtr->unknown_6D2 = 1; - gWeatherPtr->unknown_6CC++; + gWeatherPtr->weatherGfxLoaded = TRUE; + gWeatherPtr->initStep++; } break; default: @@ -307,7 +301,8 @@ void task50_0807B6D4(u8 taskId) task->tBlendDelay = 0; task->tWinRange = REG_WININ; REG_WININ = WIN_RANGE(63, 63); - REG_BLDCNT = 0x9E; + REG_BLDCNT = BLDCNT_TGT1_BG1 | BLDCNT_TGT1_BG2 | BLDCNT_TGT1_BG3 | BLDCNT_TGT1_OBJ + | BLDCNT_EFFECT_LIGHTEN; REG_BLDY = 0; task->tState++; // fall through @@ -357,8 +352,8 @@ void task50_0807B6D4(u8 taskId) void LightRain_InitVars(void) { - gWeatherPtr->unknown_6CC = 0; - gWeatherPtr->unknown_6D2 = 0; + gWeatherPtr->initStep = 0; + gWeatherPtr->weatherGfxLoaded = FALSE; gWeatherPtr->unknown_6D6 = 0; gWeatherPtr->unknown_6DB = 8; gWeatherPtr->unknown_6DC = 0; @@ -368,36 +363,36 @@ void LightRain_InitVars(void) SetRainStrengthFromSoundEffect(SE_T_KOAME); } -void sub_807E400(void); +void LightRain_Main(void); -void sub_807E3D0(void) +void LightRain_InitAll(void) { LightRain_InitVars(); - while (gWeatherPtr->unknown_6D2 == 0) - sub_807E400(); + while (gWeatherPtr->weatherGfxLoaded == FALSE) + LightRain_Main(); } -void sub_807E7A4(void); -u8 sub_807E7B4(void); +void LoadRainSpriteSheet(void); +u8 CreateRainSprites(void); u8 sub_807E8E8(void); -void sub_807E400(void) +void LightRain_Main(void) { - switch (gWeatherPtr->unknown_6CC) + switch (gWeatherPtr->initStep) { case 0: - sub_807E7A4(); - gWeatherPtr->unknown_6CC++; + LoadRainSpriteSheet(); + gWeatherPtr->initStep++; break; case 1: - if (sub_807E7B4() == 0) - gWeatherPtr->unknown_6CC++; + if (CreateRainSprites() == 0) + gWeatherPtr->initStep++; break; case 2: if (sub_807E8E8() == FALSE) { - gWeatherPtr->unknown_6D2 = 1; - gWeatherPtr->unknown_6CC++; + gWeatherPtr->weatherGfxLoaded = TRUE; + gWeatherPtr->initStep++; } break; } @@ -405,14 +400,14 @@ void sub_807E400(void) void sub_807E974(void); -bool8 sub_807E460(void) +bool8 LightRain_Finish(void) { switch (gWeatherPtr->unknown_6CE) { case 0: - if (gWeatherPtr->unknown_6D1 == 3 - || gWeatherPtr->unknown_6D1 == 5 - || gWeatherPtr->unknown_6D1 == 13) + if (gWeatherPtr->nextWeather == WEATHER_RAIN_LIGHT + || gWeatherPtr->nextWeather == WEATHER_RAIN_MED + || gWeatherPtr->nextWeather == WEATHER_RAIN_HEAVY) { gWeatherPtr->unknown_6CE = 0xFF; return FALSE; @@ -542,11 +537,11 @@ void sub_807E6F0(struct Sprite *sprite, u16 b) } } -extern const struct SpriteSheet gUnknown_0839AACC; // defined below +extern const struct SpriteSheet sRainSpriteSheet; // defined below -void sub_807E7A4(void) +void LoadRainSpriteSheet(void) { - LoadSpriteSheet(&gUnknown_0839AACC); + LoadSpriteSheet(&sRainSpriteSheet); } const struct Coords16 gUnknown_0839AA08[] = @@ -577,7 +572,7 @@ const struct Coords16 gUnknown_0839AA08[] = { 48, 96}, }; -const struct OamData gOamData_839AA68 = +static const struct OamData gOamData_839AA68 = { .y = 0, .affineMode = 0, @@ -594,13 +589,13 @@ const struct OamData gOamData_839AA68 = .affineParam = 0, }; -const union AnimCmd gSpriteAnim_839AA70[] = +static const union AnimCmd gSpriteAnim_839AA70[] = { ANIMCMD_FRAME(0, 16), ANIMCMD_JUMP(0), }; -const union AnimCmd gSpriteAnim_839AA78[] = +static const union AnimCmd gSpriteAnim_839AA78[] = { ANIMCMD_FRAME(8, 3), ANIMCMD_FRAME(32, 2), @@ -608,7 +603,7 @@ const union AnimCmd gSpriteAnim_839AA78[] = ANIMCMD_END, }; -const union AnimCmd gSpriteAnim_839AA88[] = +static const union AnimCmd gSpriteAnim_839AA88[] = { ANIMCMD_FRAME(8, 3), ANIMCMD_FRAME(16, 3), @@ -616,14 +611,14 @@ const union AnimCmd gSpriteAnim_839AA88[] = ANIMCMD_END, }; -const union AnimCmd *const gSpriteAnimTable_839AA98[] = +static const union AnimCmd *const gSpriteAnimTable_839AA98[] = { gSpriteAnim_839AA70, gSpriteAnim_839AA78, gSpriteAnim_839AA88, }; -const struct SpriteTemplate gSpriteTemplate_839AAA4 = +static const struct SpriteTemplate sRainSpriteTemplate = { .tileTag = 4614, .paletteTag = 4608, @@ -647,9 +642,9 @@ const u16 gUnknown_0839AAC4[][2] = {12, 10}, }; -const struct SpriteSheet gUnknown_0839AACC = {WeatherRainTiles, sizeof(WeatherRainTiles), 0x1206}; +static const struct SpriteSheet sRainSpriteSheet = {gWeatherRainTiles, sizeof(gWeatherRainTiles), 0x1206}; -const struct OamData gOamData_839AAD4 = +static const struct OamData gOamData_839AAD4 = { .y = 0, .affineMode = 0, @@ -666,32 +661,32 @@ const struct OamData gOamData_839AAD4 = .affineParam = 0, }; -const struct SpriteFrameImage gSpriteImageTable_839AADC[] = +static const struct SpriteFrameImage gSpriteImageTable_839AADC[] = { - {gSpriteImage_8398948, sizeof(gSpriteImage_8398948)}, - {gSpriteImage_8398968, sizeof(gSpriteImage_8398968)}, + {gWeatherSnow1Tiles, sizeof(gWeatherSnow1Tiles)}, + {gWeatherSnow2Tiles, sizeof(gWeatherSnow2Tiles)}, }; -const union AnimCmd gSpriteAnim_839AAEC[] = +static const union AnimCmd gSpriteAnim_839AAEC[] = { ANIMCMD_FRAME(0, 16), ANIMCMD_END, }; -const union AnimCmd gSpriteAnim_839AAF4[] = +static const union AnimCmd gSpriteAnim_839AAF4[] = { ANIMCMD_FRAME(1, 16), ANIMCMD_END, }; -const union AnimCmd *const gSpriteAnimTable_839AAFC[] = +static const union AnimCmd *const gSpriteAnimTable_839AAFC[] = { gSpriteAnim_839AAEC, gSpriteAnim_839AAF4, }; void sub_807ED48(struct Sprite *); -const struct SpriteTemplate gSpriteTemplate_839AB04 = +static const struct SpriteTemplate sSnowflakeSpriteTemplate = { .tileTag = 0xFFFF, .paletteTag = 4608, @@ -703,9 +698,9 @@ const struct SpriteTemplate gSpriteTemplate_839AB04 = }; // unused data -const u16 unusedData_839AB1C[] = {0, 6, 6, 12, 18, 42, 300, 300}; +static const u16 unusedData_839AB1C[] = {0, 6, 6, 12, 18, 42, 300, 300}; -const struct OamData gOamData_839AB2C = +static const struct OamData gOamData_839AB2C = { .y = 0, .affineMode = 0, @@ -722,43 +717,43 @@ const struct OamData gOamData_839AB2C = .affineParam = 0, }; -const union AnimCmd gSpriteAnim_839AB34[] = +static const union AnimCmd gSpriteAnim_839AB34[] = { ANIMCMD_FRAME(0, 16), ANIMCMD_END, }; -const union AnimCmd gSpriteAnim_839AB3C[] = +static const union AnimCmd gSpriteAnim_839AB3C[] = { ANIMCMD_FRAME(32, 16), ANIMCMD_END, }; -const union AnimCmd gSpriteAnim_839AB44[] = +static const union AnimCmd gSpriteAnim_839AB44[] = { ANIMCMD_FRAME(64, 16), ANIMCMD_END, }; -const union AnimCmd gSpriteAnim_839AB4C[] = +static const union AnimCmd gSpriteAnim_839AB4C[] = { ANIMCMD_FRAME(96, 16), ANIMCMD_END, }; -const union AnimCmd gSpriteAnim_839AB54[] = +static const union AnimCmd gSpriteAnim_839AB54[] = { ANIMCMD_FRAME(128, 16), ANIMCMD_END, }; -const union AnimCmd gSpriteAnim_839AB5C[] = +static const union AnimCmd gSpriteAnim_839AB5C[] = { ANIMCMD_FRAME(160, 16), ANIMCMD_END, }; -const union AnimCmd *const gSpriteAnimTable_839AB64[] = +static const union AnimCmd *const gSpriteAnimTable_839AB64[] = { gSpriteAnim_839AB34, gSpriteAnim_839AB3C, @@ -768,19 +763,19 @@ const union AnimCmd *const gSpriteAnimTable_839AB64[] = gSpriteAnim_839AB5C, }; -const union AffineAnimCmd gSpriteAffineAnim_839AB7C[] = +static const union AffineAnimCmd gSpriteAffineAnim_839AB7C[] = { AFFINEANIMCMD_FRAME(0x200, 0x200, 0, 0), AFFINEANIMCMD_END, }; -const union AffineAnimCmd *const gSpriteAffineAnimTable_839AB8C[] = +static const union AffineAnimCmd *const gSpriteAffineAnimTable_839AB8C[] = { gSpriteAffineAnim_839AB7C, }; -void sub_807F688(struct Sprite *); -const struct SpriteTemplate gSpriteTemplate_839AB90 = +static void Fog2SpriteCallback(struct Sprite *); +static const struct SpriteTemplate sFog2SpriteTemplate = { .tileTag = 4609, .paletteTag = 4608, @@ -788,145 +783,10 @@ const struct SpriteTemplate gSpriteTemplate_839AB90 = .anims = gSpriteAnimTable_839AB64, .images = NULL, .affineAnims = gSpriteAffineAnimTable_839AB8C, - .callback = sub_807F688, -}; - -const struct SpriteSheet gWeatherFog1SpriteSheet = {gWeatherFog1Tiles, sizeof(gWeatherFog1Tiles), 0x1201}; -const struct SpriteSheet gWeatherAshSpriteSheet = {WeatherAshTiles, sizeof(WeatherAshTiles), 0x1202}; - -const struct OamData gOamData_839ABB8 = -{ - .y = 0, - .affineMode = 0, - .objMode = 1, - .mosaic = 0, - .bpp = 0, - .shape = 0, - .x = 0, - .matrixNum = 0, - .size = 3, - .tileNum = 0, - .priority = 1, - .paletteNum = 15, - .affineParam = 0, -}; - -const union AnimCmd gSpriteAnim_839ABC0[] = -{ - ANIMCMD_FRAME(0, 60), - ANIMCMD_FRAME(64, 60), - ANIMCMD_JUMP(0), -}; - -const union AnimCmd *const gSpriteAnimTable_839ABCC[] = -{ - gSpriteAnim_839ABC0, -}; - -void sub_807FAA8(struct Sprite *); -const struct SpriteTemplate gSpriteTemplate_839ABD0 = -{ - .tileTag = 4610, - .paletteTag = 4608, - .oam = &gOamData_839ABB8, - .anims = gSpriteAnimTable_839ABCC, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_807FAA8, -}; - -const struct SpriteSheet gWeatherFog0SpriteSheet = {WeatherFog0Tiles, sizeof(WeatherFog0Tiles), 0x1203}; - -const struct OamData gOamData_839ABF0 = -{ - .y = 0, - .affineMode = 0, - .objMode = 1, - .mosaic = 0, - .bpp = 0, - .shape = 0, - .x = 0, - .matrixNum = 0, - .size = 3, - .tileNum = 0, - .priority = 2, - .paletteNum = 0, - .affineParam = 0, -}; - -const union AnimCmd gSpriteAnim_839ABF8[] = -{ - ANIMCMD_FRAME(0, 16), - ANIMCMD_END, -}; - -const union AnimCmd *const gSpriteAnimTable_839AC00[] = -{ - gSpriteAnim_839ABF8, -}; - -void sub_807FE3C(struct Sprite *); -const struct SpriteTemplate gSpriteTemplate_839AC04 = -{ - .tileTag = 4611, - .paletteTag = 4608, - .oam = &gOamData_839ABF0, - .anims = gSpriteAnimTable_839AC00, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_807FE3C, -}; - -const struct OamData gOamData_839AC1C = -{ - .y = 0, - .affineMode = 0, - .objMode = 1, - .mosaic = 0, - .bpp = 0, - .shape = 0, - .x = 0, - .matrixNum = 0, - .size = 3, - .tileNum = 0, - .priority = 1, - .paletteNum = 0, - .affineParam = 0, -}; - -const union AnimCmd gSpriteAnim_839AC24[] = -{ - ANIMCMD_FRAME(0, 3), - ANIMCMD_END, -}; - -const union AnimCmd gSpriteAnim_839AC2C[] = -{ - ANIMCMD_FRAME(64, 3), - ANIMCMD_END, -}; - -const union AnimCmd *const gSpriteAnimTable_839AC34[] = -{ - gSpriteAnim_839AC24, - gSpriteAnim_839AC2C, -}; - -void sub_8080338(struct Sprite *); -const struct SpriteTemplate gSpriteTemplate_839AC3C = -{ - .tileTag = 4612, - .paletteTag = 4609, - .oam = &gOamData_839AC1C, - .anims = gSpriteAnimTable_839AC34, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_8080338, + .callback = Fog2SpriteCallback, }; -const struct SpriteSheet gWeatherSandstormSpriteSheet = {WeatherSandstormTiles, sizeof(WeatherSandstormTiles), 0x1204}; - -bool8 sub_807E7B4(void) +bool8 CreateRainSprites(void) { u8 r7; u8 spriteId; @@ -935,7 +795,7 @@ bool8 sub_807E7B4(void) return FALSE; r7 = gWeatherPtr->unknown_6DA; - spriteId = CreateSpriteAtEnd(&gSpriteTemplate_839AAA4, + spriteId = CreateSpriteAtEnd(&sRainSpriteTemplate, gUnknown_0839AA08[r7].x, gUnknown_0839AA08[r7].y, 78); if (spriteId != 64) { @@ -946,11 +806,11 @@ bool8 sub_807E7B4(void) sub_807E4EC(&gSprites[spriteId]); sub_807E6F0(&gSprites[spriteId], r7 * 9); gSprites[spriteId].invisible = TRUE; - gWeatherPtr->unknown_0[r7] = &gSprites[spriteId]; + gWeatherPtr->rainSprites[r7] = &gSprites[spriteId]; } else { - gWeatherPtr->unknown_0[r7] = NULL; + gWeatherPtr->rainSprites[r7] = NULL; } if (++gWeatherPtr->unknown_6DA == 24) @@ -959,12 +819,12 @@ bool8 sub_807E7B4(void) for (i = 0; i < 24; i++) { - if (gWeatherPtr->unknown_0[i] != NULL) + if (gWeatherPtr->rainSprites[i] != NULL) { - if (gWeatherPtr->unknown_0[i]->data[6] == 0) - gWeatherPtr->unknown_0[i]->callback = sub_807E5C0; + if (gWeatherPtr->rainSprites[i]->data[6] == 0) + gWeatherPtr->rainSprites[i]->callback = sub_807E5C0; else - gWeatherPtr->unknown_0[i]->callback = sub_807E6C4; + gWeatherPtr->rainSprites[i]->callback = sub_807E6C4; } } return FALSE; @@ -982,13 +842,13 @@ bool8 sub_807E8E8(void) gWeatherPtr->unknown_6D6 = 0; if (gWeatherPtr->unknown_6D8 < gWeatherPtr->unknown_6D9) { - gWeatherPtr->unknown_0[gWeatherPtr->unknown_6D8++]->data[5] = 1; + gWeatherPtr->rainSprites[gWeatherPtr->unknown_6D8++]->data[5] = 1; } else { gWeatherPtr->unknown_6D8--; - gWeatherPtr->unknown_0[gWeatherPtr->unknown_6D8]->data[5] = 0; - gWeatherPtr->unknown_0[gWeatherPtr->unknown_6D8]->invisible = TRUE; + gWeatherPtr->rainSprites[gWeatherPtr->unknown_6D8]->data[5] = 0; + gWeatherPtr->rainSprites[gWeatherPtr->unknown_6D8]->invisible = TRUE; } } return TRUE; @@ -1000,8 +860,8 @@ void sub_807E974(void) for (i = 0; i < gWeatherPtr->unknown_6DA; i++) { - if (gWeatherPtr->unknown_0[i] != NULL) - DestroySprite(gWeatherPtr->unknown_0[i]); + if (gWeatherPtr->rainSprites[i] != NULL) + DestroySprite(gWeatherPtr->rainSprites[i]); } gWeatherPtr->unknown_6DA = 0; FreeSpriteTilesByTag(0x1206); @@ -1013,26 +873,26 @@ void sub_807E974(void) void Snow_InitVars(void) { - gWeatherPtr->unknown_6CC = 0; - gWeatherPtr->unknown_6D2 = 0; + gWeatherPtr->initStep = 0; + gWeatherPtr->weatherGfxLoaded = FALSE; gWeatherPtr->unknown_6C1 = 3; gWeatherPtr->unknown_6C2 = 20; gWeatherPtr->unknown_6E5 = 16; gWeatherPtr->unknown_6E0 = 0; } -void snowflakes_progress2(void); +void Snow_Main(void); void sub_807ED48(struct Sprite *); -void sub_807EA18(void) +void Snow_InitAll(void) { Snow_InitVars(); - while (gWeatherPtr->unknown_6D2 == 0) + while (gWeatherPtr->weatherGfxLoaded == FALSE) { u16 i; - snowflakes_progress2(); - for (i = 0; i < gWeatherPtr->unknown_6E4; i++) + Snow_Main(); + for (i = 0; i < gWeatherPtr->snowflakeSpriteCount; i++) { sub_807ED48(gWeatherPtr->snowflakeSprites[i]); } @@ -1041,16 +901,16 @@ void sub_807EA18(void) u8 snowflakes_progress(void); -void snowflakes_progress2(void) +void Snow_Main(void) { - if (gWeatherPtr->unknown_6CC == 0 && snowflakes_progress() == FALSE) + if (gWeatherPtr->initStep == 0 && snowflakes_progress() == FALSE) { - gWeatherPtr->unknown_6D2 = 1; - gWeatherPtr->unknown_6CC++; + gWeatherPtr->weatherGfxLoaded = TRUE; + gWeatherPtr->initStep++; } } -bool8 sub_807EAC0(void) +bool8 Snow_Finish(void) { switch (gWeatherPtr->unknown_6CE) { @@ -1070,46 +930,46 @@ bool8 sub_807EAC0(void) return FALSE; } -bool8 snowflake_add(void); -bool8 snowflake_remove(void); +bool8 CreateSnowflakeSprite(void); +bool8 RemoveSnowflakeSprite(void); bool8 snowflakes_progress(void) { - if (gWeatherPtr->unknown_6E4 == gWeatherPtr->unknown_6E5) + if (gWeatherPtr->snowflakeSpriteCount == gWeatherPtr->unknown_6E5) return FALSE; gWeatherPtr->unknown_6E0++; if (gWeatherPtr->unknown_6E0 > 36) { gWeatherPtr->unknown_6E0 = 0; - if (gWeatherPtr->unknown_6E4 < gWeatherPtr->unknown_6E5) - snowflake_add(); + if (gWeatherPtr->snowflakeSpriteCount < gWeatherPtr->unknown_6E5) + CreateSnowflakeSprite(); else - snowflake_remove(); + RemoveSnowflakeSprite(); } - return (gWeatherPtr->unknown_6E4 != gWeatherPtr->unknown_6E5); + return (gWeatherPtr->snowflakeSpriteCount != gWeatherPtr->unknown_6E5); } void sub_807EC40(struct Sprite *); -bool8 snowflake_add(void) +bool8 CreateSnowflakeSprite(void) { - u8 spriteId = CreateSpriteAtEnd(&gSpriteTemplate_839AB04, 0, 0, 78); + u8 spriteId = CreateSpriteAtEnd(&sSnowflakeSpriteTemplate, 0, 0, 78); if (spriteId == 64) return FALSE; - gSprites[spriteId].data[4] = gWeatherPtr->unknown_6E4; + gSprites[spriteId].data[4] = gWeatherPtr->snowflakeSpriteCount; sub_807EC40(&gSprites[spriteId]); gSprites[spriteId].coordOffsetEnabled = TRUE; - gWeatherPtr->snowflakeSprites[gWeatherPtr->unknown_6E4++] = &gSprites[spriteId]; + gWeatherPtr->snowflakeSprites[gWeatherPtr->snowflakeSpriteCount++] = &gSprites[spriteId]; return TRUE; } -bool8 snowflake_remove(void) +bool8 RemoveSnowflakeSprite(void) { - if (gWeatherPtr->unknown_6E4 != 0) + if (gWeatherPtr->snowflakeSpriteCount != 0) { - DestroySprite(gWeatherPtr->snowflakeSprites[--gWeatherPtr->unknown_6E4]); + DestroySprite(gWeatherPtr->snowflakeSprites[--gWeatherPtr->snowflakeSpriteCount]); return TRUE; } return FALSE; @@ -1196,108 +1056,108 @@ void sub_807ED48(struct Sprite *sprite) // Medium Rain //------------------------------------------------------------------------------ -void sub_807EE80(void) +void MedRain_InitVars(void) { - gWeatherPtr->unknown_6CC = 0; - gWeatherPtr->unknown_6D2 = 0; + gWeatherPtr->initStep = 0; + gWeatherPtr->weatherGfxLoaded = FALSE; gWeatherPtr->unknown_6D6 = 0; gWeatherPtr->unknown_6DB = 4; gWeatherPtr->unknown_6DC = 0; gWeatherPtr->unknown_6D9 = 16; gWeatherPtr->unknown_6C1 = 3; gWeatherPtr->unknown_6C2 = 20; - gWeatherPtr->unknown_6D2 = 0; // duplicate assignment + gWeatherPtr->weatherGfxLoaded = FALSE; // duplicate assignment gWeatherPtr->unknown_6ED = 0; SetRainStrengthFromSoundEffect(SE_T_AME); } -void sub_807EFC0(void); +void Rain_Main(void); -void sub_807EEF4(void) +void MedRain_InitAll(void) { - sub_807EE80(); - while (gWeatherPtr->unknown_6D2 == 0) - sub_807EFC0(); + MedRain_InitVars(); + while (gWeatherPtr->weatherGfxLoaded == FALSE) + Rain_Main(); } //------------------------------------------------------------------------------ // Heavy Rain //------------------------------------------------------------------------------ -void sub_807EF24(void) +void HeavyRain_InitVars(void) { - gWeatherPtr->unknown_6CC = 0; - gWeatherPtr->unknown_6D2 = 0; + gWeatherPtr->initStep = 0; + gWeatherPtr->weatherGfxLoaded = FALSE; gWeatherPtr->unknown_6D6 = 0; gWeatherPtr->unknown_6DB = 4; gWeatherPtr->unknown_6DC = 1; gWeatherPtr->unknown_6D9 = 24; gWeatherPtr->unknown_6C1 = 3; gWeatherPtr->unknown_6C2 = 20; - gWeatherPtr->unknown_6D2 = 0; // duplicate assignment + gWeatherPtr->weatherGfxLoaded = FALSE; // duplicate assignment SetRainStrengthFromSoundEffect(SE_T_OOAME); } -void sub_807EF90(void) +void HeavyRain_InitAll(void) { - sub_807EF24(); - while (gWeatherPtr->unknown_6D2 == 0) - sub_807EFC0(); + HeavyRain_InitVars(); + while (gWeatherPtr->weatherGfxLoaded == FALSE) + Rain_Main(); } -void sub_807F434(void); -void sub_807F3F8(u16); +void UpdateThunderSound(void); +void SetThunderCounter(u16); -void sub_807EFC0(void) +void Rain_Main(void) { - sub_807F434(); - switch (gWeatherPtr->unknown_6CC) + UpdateThunderSound(); + switch (gWeatherPtr->initStep) { case 0: - sub_807E7A4(); - gWeatherPtr->unknown_6CC++; + LoadRainSpriteSheet(); + gWeatherPtr->initStep++; break; case 1: - if (sub_807E7B4()) + if (CreateRainSprites()) break; - gWeatherPtr->unknown_6CC++; + gWeatherPtr->initStep++; break; case 2: if (sub_807E8E8()) break; - gWeatherPtr->unknown_6D2 = 1; - gWeatherPtr->unknown_6CC++; + gWeatherPtr->weatherGfxLoaded = TRUE; + gWeatherPtr->initStep++; break; case 3: if (gWeatherPtr->unknown_6C6 == 0) break; - gWeatherPtr->unknown_6CC = 6; + gWeatherPtr->initStep = 6; break; case 4: gWeatherPtr->unknown_6EA = 1; gWeatherPtr->unknown_6E6 = (Random() % 360) + 360; - gWeatherPtr->unknown_6CC++; + gWeatherPtr->initStep++; // fall through case 5: if (--gWeatherPtr->unknown_6E6 != 0) break; - gWeatherPtr->unknown_6CC++; + gWeatherPtr->initStep++; break; case 6: gWeatherPtr->unknown_6EA = 1; gWeatherPtr->unknown_6EB = Random() % 2; - gWeatherPtr->unknown_6CC++; + gWeatherPtr->initStep++; break; case 7: gWeatherPtr->unknown_6EC = (Random() & 1) + 1; - gWeatherPtr->unknown_6CC++; + gWeatherPtr->initStep++; // fall through case 8: sub_807D5BC(19); if (gWeatherPtr->unknown_6EB == 0 && gWeatherPtr->unknown_6EC == 1) - sub_807F3F8(20); + SetThunderCounter(20); gWeatherPtr->unknown_6E6 = (Random() % 3) + 6; - gWeatherPtr->unknown_6CC++; + gWeatherPtr->initStep++; break; case 9: if (--gWeatherPtr->unknown_6E6 != 0) @@ -1307,51 +1167,51 @@ void sub_807EFC0(void) if (--gWeatherPtr->unknown_6EC != 0) { gWeatherPtr->unknown_6E6 = (Random() % 16) + 60; - gWeatherPtr->unknown_6CC = 10; + gWeatherPtr->initStep = 10; } else if (gWeatherPtr->unknown_6EB == 0) { - gWeatherPtr->unknown_6CC = 4; + gWeatherPtr->initStep = 4; } else { - gWeatherPtr->unknown_6CC = 11; + gWeatherPtr->initStep = 11; } break; case 10: if (--gWeatherPtr->unknown_6E6 != 0) break; - gWeatherPtr->unknown_6CC = 8; + gWeatherPtr->initStep = 8; break; case 11: gWeatherPtr->unknown_6E6 = (Random() % 16) + 60; - gWeatherPtr->unknown_6CC++; + gWeatherPtr->initStep++; break; case 12: if (--gWeatherPtr->unknown_6E6 != 0) break; - sub_807F3F8(100); + SetThunderCounter(100); sub_807D5BC(19); // Why use "% 16" everywhere else and "& 0xF" here. So dumb. gWeatherPtr->unknown_6E6 = (Random() & 0xF) + 30; - gWeatherPtr->unknown_6CC++; + gWeatherPtr->initStep++; break; case 13: if (--gWeatherPtr->unknown_6E6 != 0) break; sub_807D5F0(19, 3, 5); - gWeatherPtr->unknown_6CC++; + gWeatherPtr->initStep++; break; case 14: if (gWeatherPtr->unknown_6C6 != 3) break; gWeatherPtr->unknown_6EA = 1; - gWeatherPtr->unknown_6CC = 4; + gWeatherPtr->initStep = 4; break; } } -bool8 sub_807F34C(void) +bool8 Rain_Finish(void) { switch (gWeatherPtr->unknown_6CE) { @@ -1360,12 +1220,12 @@ bool8 sub_807F34C(void) gWeatherPtr->unknown_6CE++; // fall through case 1: - sub_807EFC0(); + Rain_Main(); if (gWeatherPtr->unknown_6EA != 0) { - if (gWeatherPtr->unknown_6D1 == 3 - || gWeatherPtr->unknown_6D1 == 5 - || gWeatherPtr->unknown_6D1 == 13) + if (gWeatherPtr->nextWeather == WEATHER_RAIN_LIGHT + || gWeatherPtr->nextWeather == WEATHER_RAIN_MED + || gWeatherPtr->nextWeather == WEATHER_RAIN_HEAVY) return FALSE; gWeatherPtr->unknown_6D9 = 0; gWeatherPtr->unknown_6CE++; @@ -1384,20 +1244,20 @@ bool8 sub_807F34C(void) return TRUE; } -void sub_807F3F8(u16 a) +void SetThunderCounter(u16 max) { if (gWeatherPtr->unknown_6ED == 0) { - gWeatherPtr->unknown_6E8 = Random() % a; + gWeatherPtr->thunderCounter = Random() % max; gWeatherPtr->unknown_6ED = 1; } } -void sub_807F434(void) +void UpdateThunderSound(void) { if (gWeatherPtr->unknown_6ED == 1) { - if (gWeatherPtr->unknown_6E8 == 0) + if (gWeatherPtr->thunderCounter == 0) { if (IsSEPlaying()) return; @@ -1409,70 +1269,72 @@ void sub_807F434(void) } else { - gWeatherPtr->unknown_6E8--; + gWeatherPtr->thunderCounter--; } } } -void sub_807F49C(void) +//------------------------------------------------------------------------------ +// Fog 2 +//------------------------------------------------------------------------------ + +void Fog2_Main(void); +static void CreateFog2Sprites(void); +static void DestroyFog2Sprites(void); + +void Fog2_InitVars(void) { - gWeatherPtr->unknown_6CC = 0; - gWeatherPtr->unknown_6D2 = 0; + gWeatherPtr->initStep = 0; + gWeatherPtr->weatherGfxLoaded = FALSE; gWeatherPtr->unknown_6C1 = 0; gWeatherPtr->unknown_6C2 = 20; if (gWeatherPtr->unknown_6FB == 0) { gWeatherPtr->unknown_6F0 = 0; gWeatherPtr->unknown_6F2 = 0; - gWeatherPtr->unknown_6EE = 0; - sub_807DB64(0, 16); + gWeatherPtr->fog2ScrollPosX = 0; + Weather_SetBlendCoeffs(0, 16); } } -void sub_807F52C(void); - -void sub_807F4FC(void) +void Fog2_InitAll(void) { - sub_807F49C(); - while (gWeatherPtr->unknown_6D2 == 0) - sub_807F52C(); + Fog2_InitVars(); + while (gWeatherPtr->weatherGfxLoaded == FALSE) + Fog2_Main(); } -void sub_807F6E8(void); - -void sub_807F52C(void) +void Fog2_Main(void) { - gWeatherPtr->unknown_6EE = (gSpriteCoordOffsetX - gWeatherPtr->unknown_6F2) & 0xFF; + gWeatherPtr->fog2ScrollPosX = (gSpriteCoordOffsetX - gWeatherPtr->unknown_6F2) & 0xFF; if (++gWeatherPtr->unknown_6F0 > 3) { gWeatherPtr->unknown_6F0 = 0; gWeatherPtr->unknown_6F2++; } - switch (gWeatherPtr->unknown_6CC) + switch (gWeatherPtr->initStep) { case 0: - sub_807F6E8(); - if (gWeatherPtr->currWeather == 6) - sub_807DBA4(12, 8, 3); + CreateFog2Sprites(); + if (gWeatherPtr->currWeather == WEATHER_FOG_2) + Weather_SetTargetBlendCoeffs(12, 8, 3); else - sub_807DBA4(4, 16, 0); - gWeatherPtr->unknown_6CC++; + Weather_SetTargetBlendCoeffs(4, 16, 0); + gWeatherPtr->initStep++; break; case 1: - if (sub_807DBE8()) + if (Weather_UpdateBlend()) { - gWeatherPtr->unknown_6D2 = 1; - gWeatherPtr->unknown_6CC++; + gWeatherPtr->weatherGfxLoaded = TRUE; + gWeatherPtr->initStep++; } break; } } -void sub_807F7A4(void); - -bool8 sub_807F5EC(void) +bool8 Fog2_Finish(void) { - gWeatherPtr->unknown_6EE = (gSpriteCoordOffsetX - gWeatherPtr->unknown_6F2) & 0xFF; + gWeatherPtr->fog2ScrollPosX = (gSpriteCoordOffsetX - gWeatherPtr->unknown_6F2) & 0xFF; if (++gWeatherPtr->unknown_6F0 > 3) { gWeatherPtr->unknown_6F0 = 0; @@ -1481,16 +1343,16 @@ bool8 sub_807F5EC(void) switch (gWeatherPtr->unknown_6CE) { case 0: - sub_807DBA4(0, 16, 3); + Weather_SetTargetBlendCoeffs(0, 16, 3); gWeatherPtr->unknown_6CE++; break; case 1: - if (!sub_807DBE8()) + if (!Weather_UpdateBlend()) break; gWeatherPtr->unknown_6CE++; break; case 2: - sub_807F7A4(); + DestroyFog2Sprites(); gWeatherPtr->unknown_6CE++; break; default: @@ -1499,13 +1361,289 @@ bool8 sub_807F5EC(void) return TRUE; } -void sub_807F688(struct Sprite *sprite) +#define sprColumn data[0] + +static void Fog2SpriteCallback(struct Sprite *sprite) { sprite->pos2.y = (u8)gSpriteCoordOffsetY; - sprite->pos1.x = gWeatherPtr->unknown_6EE + 32 + sprite->data[0] * 64; + sprite->pos1.x = gWeatherPtr->fog2ScrollPosX + 32 + sprite->sprColumn * 64; if (sprite->pos1.x > 0x10F) { - sprite->pos1.x = 480 + gWeatherPtr->unknown_6EE - (4 - sprite->data[0]) * 64; + sprite->pos1.x = 480 + gWeatherPtr->fog2ScrollPosX - (4 - sprite->sprColumn) * 64; sprite->pos1.x &= 0x1FF; } } + +static void CreateFog2Sprites(void) +{ + u16 i; + + if (gWeatherPtr->unknown_6FB == 0) + { + struct SpriteSheet fog2SpriteSheet = {gWeatherFog2Tiles, sizeof(gWeatherFog2Tiles), 0x1201}; + + LoadSpriteSheet(&fog2SpriteSheet); + for (i = 0; i < 20; i++) + { + u8 spriteId = CreateSpriteAtEnd(&sFog2SpriteTemplate, 0, 0, 0xFF); + + if (spriteId != MAX_SPRITES) + { + struct Sprite *sprite = &gSprites[spriteId]; + + sprite->sprColumn = i % 5; + sprite->pos1.x = (i % 5) * 64 + 32; + sprite->pos1.y = (i / 5) * 64 + 32; + ((struct Weather2 *)gWeatherPtr)->fogSprites[i] = sprite; + } + else + { + ((struct Weather2 *)gWeatherPtr)->fogSprites[i] = NULL; + } + } + gWeatherPtr->unknown_6FB = 1; + } +} + +#undef sprColumn + +static void DestroyFog2Sprites(void) +{ + u16 i; + + if (gWeatherPtr->unknown_6FB != 0) + { + for (i = 0; i < 20; i++) + { + if (((struct Weather2 *)gWeatherPtr)->fogSprites[i] != NULL) + DestroySprite(((struct Weather2 *)gWeatherPtr)->fogSprites[i]); + } + FreeSpriteTilesByTag(0x1201); + gWeatherPtr->unknown_6FB = 0; + } +} + +//------------------------------------------------------------------------------ +// Fog 1 +//------------------------------------------------------------------------------ + +void Fog1_InitVars(void) +{ + gWeatherPtr->initStep = 0; + gWeatherPtr->weatherGfxLoaded = FALSE; + gWeatherPtr->unknown_6C1 = 0; + gWeatherPtr->unknown_6C2 = 20; + gWeatherPtr->unknown_6FE = 20; + if (gWeatherPtr->unknown_700 == 0) + { + Weather_SetBlendCoeffs(0, 16); + REG_BLDALPHA = BLDALPHA_BLEND(64, 63); // Those aren't even valid coefficients! + } +} + +void sub_807F888(void); + +void sub_807F858(void) +{ + Fog1_InitVars(); + while (gWeatherPtr->weatherGfxLoaded == FALSE) + sub_807F888(); +} + +void sub_807F99C(void); +void sub_807F9AC(void); + +void sub_807F888(void) +{ + gWeatherPtr->unknown_6FC = gSpriteCoordOffsetX & 0x1FF; + while (gWeatherPtr->unknown_6FC > 0xEF) + gWeatherPtr->unknown_6FC -= 0xF0; + switch (gWeatherPtr->initStep) + { + case 0: + sub_807F99C(); + gWeatherPtr->initStep++; + break; + case 1: + if (gWeatherPtr->unknown_700 == 0) + sub_807F9AC(); + Weather_SetTargetBlendCoeffs(16, 0, 1); + gWeatherPtr->initStep++; + break; + case 2: + if (!Weather_UpdateBlend()) + break; + gWeatherPtr->weatherGfxLoaded = TRUE; + gWeatherPtr->initStep++; + break; + default: + Weather_UpdateBlend(); + break; + } +} + +void sub_807FA54(void); + +bool8 sub_807F934(void) +{ + switch (gWeatherPtr->unknown_6CE) + { + case 0: + Weather_SetTargetBlendCoeffs(0, 16, 1); + gWeatherPtr->unknown_6CE++; + break; + case 1: + if (!Weather_UpdateBlend()) + break; + sub_807FA54(); + gWeatherPtr->unknown_6CE++; + break; + case 2: + REG_BLDALPHA = 0; + gWeatherPtr->unknown_6CE++; + return FALSE; + default: + return FALSE; + } + return TRUE; +} + +const struct SpriteSheet gWeatherAshSpriteSheet = {gWeatherAshTiles, sizeof(gWeatherAshTiles), 0x1202}; + +void sub_807F99C(void) +{ + LoadSpriteSheet(&gWeatherAshSpriteSheet); +} + +const struct OamData gOamData_839ABB8 = +{ + .y = 0, + .affineMode = 0, + .objMode = 1, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 1, + .paletteNum = 15, + .affineParam = 0, +}; + +const union AnimCmd gSpriteAnim_839ABC0[] = +{ + ANIMCMD_FRAME(0, 60), + ANIMCMD_FRAME(64, 60), + ANIMCMD_JUMP(0), +}; + +const union AnimCmd *const gSpriteAnimTable_839ABCC[] = +{ + gSpriteAnim_839ABC0, +}; + +void sub_807FAA8(struct Sprite *); +const struct SpriteTemplate gSpriteTemplate_839ABD0 = +{ + .tileTag = 4610, + .paletteTag = 4608, + .oam = &gOamData_839ABB8, + .anims = gSpriteAnimTable_839ABCC, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_807FAA8, +}; + +const struct SpriteSheet gWeatherFog1SpriteSheet = {gWeatherFog1Tiles, sizeof(gWeatherFog1Tiles), 0x1203}; + +const struct OamData gOamData_839ABF0 = +{ + .y = 0, + .affineMode = 0, + .objMode = 1, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +const union AnimCmd gSpriteAnim_839ABF8[] = +{ + ANIMCMD_FRAME(0, 16), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_839AC00[] = +{ + gSpriteAnim_839ABF8, +}; + +void sub_807FE3C(struct Sprite *); +const struct SpriteTemplate gSpriteTemplate_839AC04 = +{ + .tileTag = 4611, + .paletteTag = 4608, + .oam = &gOamData_839ABF0, + .anims = gSpriteAnimTable_839AC00, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_807FE3C, +}; + +const struct OamData gOamData_839AC1C = +{ + .y = 0, + .affineMode = 0, + .objMode = 1, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 1, + .paletteNum = 0, + .affineParam = 0, +}; + +const union AnimCmd gSpriteAnim_839AC24[] = +{ + ANIMCMD_FRAME(0, 3), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_839AC2C[] = +{ + ANIMCMD_FRAME(64, 3), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_839AC34[] = +{ + gSpriteAnim_839AC24, + gSpriteAnim_839AC2C, +}; + +void sub_8080338(struct Sprite *); +const struct SpriteTemplate gSpriteTemplate_839AC3C = +{ + .tileTag = 4612, + .paletteTag = 4609, + .oam = &gOamData_839AC1C, + .anims = gSpriteAnimTable_839AC34, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_8080338, +}; + +const struct SpriteSheet gWeatherSandstormSpriteSheet = {gWeatherSandstormTiles, sizeof(gWeatherSandstormTiles), 0x1204}; + diff --git a/src/field/overworld.c b/src/field/overworld.c index 59aac5c33..387745f94 100644 --- a/src/field/overworld.c +++ b/src/field/overworld.c @@ -1737,7 +1737,7 @@ void sub_8054D4C(u32 a1) sub_805C7C4(0); FieldEffectActiveListClear(); InitFieldMessageBox(); - sub_807C828(); + StartWeather(); sub_8080750(); if (!a1) SetUpFieldTasks(); -- cgit v1.2.3 From a8c22a9f1de634d75d8ddc117bcd2fda59aac522 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Sat, 25 Nov 2017 23:33:16 -0600 Subject: finish decompiling field_weather_2 --- src/field/field_weather.c | 32 +- src/field/field_weather_2.c | 712 +++++++++++++++++++++++++++++++++++++++++++- src/field/overworld.c | 4 +- src/field/scrcmd.c | 2 +- 4 files changed, 730 insertions(+), 20 deletions(-) (limited to 'src') diff --git a/src/field/field_weather.c b/src/field/field_weather.c index edb186b95..0cd54d9a4 100644 --- a/src/field/field_weather.c +++ b/src/field/field_weather.c @@ -31,7 +31,7 @@ struct WeatherCallbacks void (*initVars)(void); void (*main)(void); void (*initAll)(void); - u8 (*finish)(void); + bool8 (*finish)(void); }; extern struct Weather gWeather; @@ -67,63 +67,63 @@ struct Weather *const gWeatherPtr = &gWeather; void None_Init(void); void None_Main(void); -u8 None_Finish(void); +bool8 None_Finish(void); void Clouds_InitVars(void); void Clouds_Main(void); void Clouds_InitAll(void); -u8 Clouds_Finish(void); +bool8 Clouds_Finish(void); void sub_807DF9C(void); void nullsub_55(void); void sub_807DFC0(void); -u8 sub_807DFD0(void); +bool8 sub_807DFD0(void); void LightRain_InitVars(void); void LightRain_Main(void); void LightRain_InitAll(void); -u8 LightRain_Finish(void); +bool8 LightRain_Finish(void); void Snow_InitVars(void); void Snow_Main(void); void Snow_InitAll(void); -u8 Snow_Finish(void); +bool8 Snow_Finish(void); void MedRain_InitVars(void); void Rain_Main(void); void MedRain_InitAll(void); -u8 Rain_Finish(void); +bool8 Rain_Finish(void); void Fog2_InitVars(void); void Fog2_Main(void); void Fog2_InitAll(void); -u8 Fog2_Finish(void); +bool8 Fog2_Finish(void); void Fog1_InitVars(void); void sub_807F888(void); void sub_807F858(void); -u8 sub_807F934(void); +bool8 sub_807F934(void); void sub_807FE9C(void); void sub_807FF4C(void); void sub_807FF1C(void); -u8 sub_807FFC8(void); +bool8 sub_807FFC8(void); void sub_807FB24(void); void sub_807FBD8(void); void sub_807FBA8(void); -u8 sub_807FC3C(void); +bool8 sub_807FC3C(void); void Fog2_InitVars(void); void Fog2_Main(void); void Fog2_InitAll(void); -u8 Fog2_Finish(void); +bool8 Fog2_Finish(void); void sub_8080430(void); void nullsub_56(void); void sub_8080460(void); -u8 sub_8080470(void); +bool8 sub_8080470(void); void sub_807E110(void); void sub_807E174(void); void sub_807E144(void); -u8 sub_807E258(void); +bool8 sub_807E258(void); void HeavyRain_InitVars(void); void Rain_Main(void); void HeavyRain_InitAll(void); -u8 Rain_Finish(void); +bool8 Rain_Finish(void); void sub_8080474(void); void sub_80804F8(void); void sub_80804C8(void); -u8 sub_808056C(void); +bool8 sub_808056C(void); static const struct WeatherCallbacks sWeatherFuncs[] = { diff --git a/src/field/field_weather_2.c b/src/field/field_weather_2.c index d2ef34f6f..1ae2d6e56 100644 --- a/src/field/field_weather_2.c +++ b/src/field/field_weather_2.c @@ -1,6 +1,7 @@ #include "global.h" #include "field_map_obj.h" #include "field_weather.h" +#include "overworld.h" #include "rng.h" #include "script.h" #include "songs.h" @@ -1556,7 +1557,197 @@ const struct SpriteTemplate gSpriteTemplate_839ABD0 = .callback = sub_807FAA8, }; -const struct SpriteSheet gWeatherFog1SpriteSheet = {gWeatherFog1Tiles, sizeof(gWeatherFog1Tiles), 0x1203}; +void sub_807F9AC(void) +{ + u8 i; + + if (gWeatherPtr->unknown_700 == 0) + { + for (i = 0; i < 20; i++) + { + u8 spriteId = CreateSpriteAtEnd(&gSpriteTemplate_839ABD0, 0, 0, 0x4E); + + if (spriteId != MAX_SPRITES) + { + struct Sprite *sprite = &gSprites[spriteId]; + + sprite->data[1] = 0; + sprite->data[2] = (u8)(i % 5); + sprite->data[3] = (u8)(i / 5); + sprite->data[0] = sprite->data[3] * 64 + 32; + ((struct Weather2 *)gWeatherPtr)->fog1Sprites[i] = sprite; + } + else + { + ((struct Weather2 *)gWeatherPtr)->fog1Sprites[i] = NULL; + } + } + gWeatherPtr->unknown_700 = 1; + } +} + +void sub_807FA54(void) +{ + u16 i; + + if (gWeatherPtr->unknown_700 != 0) + { + for (i = 0; i < 20; i++) + { + if (((struct Weather2 *)gWeatherPtr)->fog1Sprites[i] != NULL) + DestroySprite(((struct Weather2 *)gWeatherPtr)->fog1Sprites[i]); + } + FreeSpriteTilesByTag(0x1202); + gWeatherPtr->unknown_700 = 0; + } +} + +void sub_807FAA8(struct Sprite *sprite) +{ + sprite->data[1]++; + if (sprite->data[1] > 5) + { + sprite->data[1] = 0; + sprite->data[0]++; + } + sprite->pos1.y = gSpriteCoordOffsetY + sprite->data[0]; + sprite->pos1.x = gWeatherPtr->unknown_6FC + 32 + sprite->data[2] * 64; + if (sprite->pos1.x > 271) + { + sprite->pos1.x = gWeatherPtr->unknown_6FC + 0x1E0 - (4 - sprite->data[2]) * 64; + sprite->pos1.x &= 0x1FF; + } +} + +void sub_807FB24(void) +{ + gWeatherPtr->initStep = 0; + gWeatherPtr->weatherGfxLoaded = 0; + gWeatherPtr->unknown_6C1 = 0; + gWeatherPtr->unknown_6C2 = 20; + gWeatherPtr->unknown_6F0 = 0; + gWeatherPtr->unknown_6F2 = 1; + if (gWeatherPtr->unknown_724 == 0) + { + gWeatherPtr->unknown_71C = 0; + gWeatherPtr->unknown_71E = 0; + gWeatherPtr->unknown_720 = 0; + gWeatherPtr->unknown_722 = 0; + gWeatherPtr->unknown_718 = 0; + gWeatherPtr->unknown_71A = 0; + Weather_SetBlendCoeffs(0, 16); + } +} + +void sub_807FBD8(void); + +void sub_807FBA8(void) +{ + sub_807FB24(); + while (gWeatherPtr->weatherGfxLoaded == FALSE) + sub_807FBD8(); +} + +void sub_807FC9C(void); +void sub_807FD30(void); + +void sub_807FBD8(void) +{ + sub_807FC9C(); + switch (gWeatherPtr->initStep) + { + case 0: + sub_807FD30(); + gWeatherPtr->initStep++; + break; + case 1: + Weather_SetTargetBlendCoeffs(12, 8, 8); + gWeatherPtr->initStep++; + break; + case 2: + if (!Weather_UpdateBlend()) + break; + gWeatherPtr->weatherGfxLoaded = TRUE; + gWeatherPtr->initStep++; + break; + } +} + +void sub_807FDE8(void); + +bool8 sub_807FC3C(void) +{ + sub_807FC9C(); + switch (gWeatherPtr->unknown_6CE) + { + case 0: + Weather_SetTargetBlendCoeffs(0, 16, 1); + gWeatherPtr->unknown_6CE++; + break; + case 1: + if (!Weather_UpdateBlend()) + break; + gWeatherPtr->unknown_6CE++; + break; + case 2: + sub_807FDE8(); + gWeatherPtr->unknown_6CE++; + break; + default: + return FALSE; + } + return TRUE; +} + +void sub_807FC9C(void) +{ + if (++gWeatherPtr->unknown_71C > 2) + { + gWeatherPtr->unknown_720++; + gWeatherPtr->unknown_71C = 0; + } + + if (++gWeatherPtr->unknown_71E > 4) + { + gWeatherPtr->unknown_722++; + gWeatherPtr->unknown_71E = 0; + } + + gWeatherPtr->unknown_718 = (gSpriteCoordOffsetX - gWeatherPtr->unknown_720) & 0xFF; + gWeatherPtr->unknown_71A = gSpriteCoordOffsetY + gWeatherPtr->unknown_722; +} + +extern const struct SpriteTemplate gSpriteTemplate_839AC04; // defined below + +void sub_807FD30(void) +{ + u16 i; + + if (gWeatherPtr->unknown_724 == 0) + { + struct SpriteSheet fog1SpriteSheet = {gWeatherFog1Tiles, sizeof(gWeatherFog1Tiles), 0x1203}; + + LoadSpriteSheet(&fog1SpriteSheet); + for (i = 0; i < 20; i++) + { + u8 spriteId = CreateSpriteAtEnd(&gSpriteTemplate_839AC04, 0, (i / 5) * 64, 0xFF); + + if (spriteId != MAX_SPRITES) + { + struct Sprite *sprite = &gSprites[spriteId]; + + sprite->data[0] = i % 5; + sprite->data[1] = i / 5; + ((struct Weather2 *)gWeatherPtr)->unknown_140[i] = sprite; + } + else + { + ((struct Weather2 *)gWeatherPtr)->unknown_140[i] = NULL; + } + } + gWeatherPtr->unknown_724 = 1; + } +} const struct OamData gOamData_839ABF0 = { @@ -1598,6 +1789,161 @@ const struct SpriteTemplate gSpriteTemplate_839AC04 = .callback = sub_807FE3C, }; +void sub_807FDE8(void) +{ + u16 i; + + if (gWeatherPtr->unknown_724 != 0) + { + for (i = 0; i < 20; i++) + { + if (((struct Weather2 *)gWeatherPtr)->unknown_140[i] != NULL) + DestroySprite(((struct Weather2 *)gWeatherPtr)->unknown_140[i]); + } + FreeSpriteTilesByTag(0x1203); + gWeatherPtr->unknown_724 = 0; + } +} + +void sub_807FE3C(struct Sprite *sprite) +{ + sprite->pos2.y = gWeatherPtr->unknown_71A; + sprite->pos1.x = gWeatherPtr->unknown_718 + 32 + sprite->data[0] * 64; + if (sprite->pos1.x > 271) + { + sprite->pos1.x = gWeatherPtr->unknown_718 + 0x1E0 - (4 - sprite->data[0]) * 64; + sprite->pos1.x &= 0x1FF; + } +} + +void sub_807FE9C(void) +{ + gWeatherPtr->initStep = 0; + gWeatherPtr->weatherGfxLoaded = 0; + gWeatherPtr->unknown_6C1 = 0; + gWeatherPtr->unknown_6C2 = 20; + if (gWeatherPtr->unknown_716 == 0) + { + gWeatherPtr->unknown_704 = gWeatherPtr->unknown_708 = 0; + gWeatherPtr->unknown_712 = 8; + gWeatherPtr->unknown_714 = 0; + // Dead code. How does the compiler not optimize this out? + if (gWeatherPtr->unknown_712 > 0x5F) + gWeatherPtr->unknown_712 = 0x80 - gWeatherPtr->unknown_712; + Weather_SetBlendCoeffs(0, 16); + } +} + +void sub_807FF4C(void); + +void sub_807FF1C(void) +{ + sub_807FE9C(); + while (gWeatherPtr->weatherGfxLoaded == FALSE) + sub_807FF4C(); +} + +void sub_808002C(void); +void sub_8080064(void); +void sub_8080178(void); +void sub_8080238(void); + +void sub_807FF4C(void) +{ + sub_8080064(); + sub_808002C(); + if (gWeatherPtr->unknown_712 > 0x5F) + gWeatherPtr->unknown_712 = 32; + switch (gWeatherPtr->initStep) + { + case 0: + sub_8080178(); + sub_8080238(); + gWeatherPtr->initStep++; + break; + case 1: + Weather_SetTargetBlendCoeffs(16, 0, 0); + gWeatherPtr->initStep++; + break; + case 2: + if (!Weather_UpdateBlend()) + break; + gWeatherPtr->weatherGfxLoaded = TRUE; + gWeatherPtr->initStep++; + break; + } +} + +void sub_80800E4(void); + +bool8 sub_807FFC8(void) +{ + sub_8080064(); + sub_808002C(); + switch (gWeatherPtr->unknown_6CE) + { + case 0: + Weather_SetTargetBlendCoeffs(0, 16, 0); + gWeatherPtr->unknown_6CE++; + break; + case 1: + if (!Weather_UpdateBlend()) + break; + gWeatherPtr->unknown_6CE++; + break; + case 2: + sub_80800E4(); + gWeatherPtr->unknown_6CE++; + break; + default: + return FALSE; + } + return TRUE; +} + +void sub_808002C(void) +{ + if (gWeatherPtr->unknown_714++ > 4) + { + gWeatherPtr->unknown_712++; + gWeatherPtr->unknown_714 = 0; + } +} + +void sub_8080064(void) +{ + gWeatherPtr->unknown_704 -= gSineTable[gWeatherPtr->unknown_712] * 4; + gWeatherPtr->unknown_708 -= gSineTable[gWeatherPtr->unknown_712]; + gWeatherPtr->unknown_70E = (gSpriteCoordOffsetX + (gWeatherPtr->unknown_704 >> 8)) & 0xFF; + gWeatherPtr->unknown_710 = gSpriteCoordOffsetY + (gWeatherPtr->unknown_708 >> 8); +} + +void sub_80800E4(void) +{ + u16 i; + + if (gWeatherPtr->unknown_716 != 0) + { + for (i = 0; i < 20; i++) + { + if (((struct Weather2 *)gWeatherPtr)->unknown_190[i] != NULL) + DestroySprite(((struct Weather2 *)gWeatherPtr)->unknown_190[i]); + } + gWeatherPtr->unknown_716 = 0; + FreeSpriteTilesByTag(0x1204); + } + + if (gWeatherPtr->unknown_717 != 0) + { + for (i = 0; i < 5; i++) + { + if (((struct Weather2 *)gWeatherPtr)->unknown_1E0[i] != NULL) + DestroySprite(((struct Weather2 *)gWeatherPtr)->unknown_1E0[i]); + } + gWeatherPtr->unknown_717 = 0; + } +} + const struct OamData gOamData_839AC1C = { .y = 0, @@ -1647,3 +1993,367 @@ const struct SpriteTemplate gSpriteTemplate_839AC3C = const struct SpriteSheet gWeatherSandstormSpriteSheet = {gWeatherSandstormTiles, sizeof(gWeatherSandstormTiles), 0x1204}; +void sub_8080178(void) +{ + u16 i; + + if (gWeatherPtr->unknown_716 == 0) + { + LoadSpriteSheet(&gWeatherSandstormSpriteSheet); + sub_807D8C0(gUnknown_08397128); + for (i = 0; i < 20; i++) + { + u8 spriteId = CreateSpriteAtEnd(&gSpriteTemplate_839AC3C, 0, (i / 5) * 64, 1); + + if (spriteId != MAX_SPRITES) + { + ((struct Weather2 *)gWeatherPtr)->unknown_190[i] = &gSprites[spriteId]; + ((struct Weather2 *)gWeatherPtr)->unknown_190[i]->data[0] = i % 5; + ((struct Weather2 *)gWeatherPtr)->unknown_190[i]->data[1] = i / 5; + } + else + { + ((struct Weather2 *)gWeatherPtr)->unknown_190[i] = NULL; + } + } + gWeatherPtr->unknown_716 = 1; + } +} + +const u16 gUnknown_0839AC5C[] = {0, 120, 80, 160, 40, 0}; + +void sub_8080398(struct Sprite *); + +void sub_8080238(void) +{ + u16 i; + + if (gWeatherPtr->unknown_717 == 0) + { + for (i = 0; i < 5; i++) + { + u8 spriteId = CreateSpriteAtEnd(&gSpriteTemplate_839AC3C, i * 48 + 0x18, 0xD0, 1); + + if (spriteId != MAX_SPRITES) + { + ((struct Weather2 *)gWeatherPtr)->unknown_1E0[i] = &gSprites[spriteId]; + ((struct Weather2 *)gWeatherPtr)->unknown_1E0[i]->oam.size = 2; + ((struct Weather2 *)gWeatherPtr)->unknown_1E0[i]->data[1] = i * 51; + ((struct Weather2 *)gWeatherPtr)->unknown_1E0[i]->data[0] = 8; + ((struct Weather2 *)gWeatherPtr)->unknown_1E0[i]->data[2] = 0; + ((struct Weather2 *)gWeatherPtr)->unknown_1E0[i]->data[4] = 0x6730; + ((struct Weather2 *)gWeatherPtr)->unknown_1E0[i]->data[3] = gUnknown_0839AC5C[i]; + StartSpriteAnim(((struct Weather2 *)gWeatherPtr)->unknown_1E0[i], 1); + CalcCenterToCornerVec(((struct Weather2 *)gWeatherPtr)->unknown_1E0[i], 0, 2, 0); + ((struct Weather2 *)gWeatherPtr)->unknown_1E0[i]->callback = sub_8080398; + } + else + { + ((struct Weather2 *)gWeatherPtr)->unknown_1E0[i] = NULL; + } + gWeatherPtr->unknown_717 = 1; + } + } +} + +void sub_8080338(struct Sprite *sprite) +{ + sprite->pos2.y = gWeatherPtr->unknown_710; + sprite->pos1.x = gWeatherPtr->unknown_70E + 32 + sprite->data[0] * 64; + if (sprite->pos1.x > 271) + { + sprite->pos1.x = gWeatherPtr->unknown_70E + 0x1E0 - (4 - sprite->data[0]) * 64; + sprite->pos1.x &= 0x1FF; + } +} + +void sub_80803BC(struct Sprite *); + +void sub_8080398(struct Sprite *sprite) +{ + if (--sprite->data[3] == -1) + sprite->callback = sub_80803BC; +} + +void sub_80803BC(struct Sprite *sprite) +{ + u32 x; + u32 y; + + if (--sprite->pos1.y < -48) + { + sprite->pos1.y = 208; + sprite->data[0] = 4; + } + x = sprite->data[0] * gSineTable[sprite->data[1]]; + y = sprite->data[0] * gSineTable[sprite->data[1] + 64]; + sprite->pos2.x = x >> 8; + sprite->pos2.y = y >> 8; + sprite->data[1] = (sprite->data[1] + 10) & 0xFF; + if (++sprite->data[2] > 8) + { + sprite->data[2] = 0; + sprite->data[0]++; + } +} + +void sub_8080430(void) +{ + gWeatherPtr->initStep = 0; + gWeatherPtr->unknown_6C1 = 3; + gWeatherPtr->unknown_6C2 = 20; +} + +void sub_8080460(void) +{ + sub_8080430(); +} + +void nullsub_56(void) +{ +} + +bool8 sub_8080470(void) +{ + return FALSE; +} + +const u8 gUnknown_0839AC68[] = {40, 90, 60, 90, 2, 60, 40, 30}; + +const struct SpriteSheet gWeatherBubbleSpriteSheet = {gWeatherBubbleTiles, sizeof(gWeatherBubbleTiles), 0x1205}; + +void sub_8080474(void) +{ + Fog2_InitVars(); + if (gWeatherPtr->unknown_72E == 0) + { + LoadSpriteSheet(&gWeatherBubbleSpriteSheet); + gWeatherPtr->unknown_728 = 0; + gWeatherPtr->unknown_726 = gUnknown_0839AC68[0]; + gWeatherPtr->unknown_72A = 0; + gWeatherPtr->unknown_72C = 0; + } +} + +void sub_80804F8(void); + +void sub_80804C8(void) +{ + sub_8080474(); + while (gWeatherPtr->weatherGfxLoaded == FALSE) + sub_80804F8(); +} + +void sub_8080588(u16); + +void sub_80804F8(void) +{ + Fog2_Main(); + if (++gWeatherPtr->unknown_726 > gUnknown_0839AC68[gWeatherPtr->unknown_728]) + { + gWeatherPtr->unknown_726 = 0; + if (++gWeatherPtr->unknown_728 > 7) + gWeatherPtr->unknown_728 = 0; + sub_8080588(gWeatherPtr->unknown_72A); + if (++gWeatherPtr->unknown_72A > 12) + gWeatherPtr->unknown_72A = 0; + } +} + +void sub_8080610(void); + +bool8 sub_808056C(void) +{ + if (!Fog2_Finish()) + { + sub_8080610(); + return FALSE; + } + return TRUE; +} + +const s16 gUnknown_0839AC78[][2] = +{ + {120, 160}, + {376, 160}, + { 40, 140}, + {296, 140}, + {180, 130}, + {436, 130}, + { 60, 160}, + {436, 160}, + {220, 180}, + {476, 180}, + { 10, 90}, + {266, 90}, + {256, 160}, +}; + +const union AnimCmd gSpriteAnim_839ACAC[] = +{ + ANIMCMD_FRAME(0, 16), + ANIMCMD_FRAME(1, 16), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_839ACB8[] = +{ + gSpriteAnim_839ACAC, +}; + +extern const struct OamData gOamData_837DF24; + +void unc_0807DAB4(struct Sprite *); +const struct SpriteTemplate gSpriteTemplate_839ACBC = +{ + .tileTag = 4613, + .paletteTag = 4608, + .oam = &gOamData_837DF24, + .anims = gSpriteAnimTable_839ACB8, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = unc_0807DAB4, +}; + +void sub_8080588(u16 a) +{ + s16 x = gUnknown_0839AC78[a][0]; + s16 y = gUnknown_0839AC78[a][1] - gSpriteCoordOffsetY; + u8 spriteId = CreateSpriteAtEnd( + &gSpriteTemplate_839ACBC, + x, + y, + 0); + + if (spriteId != MAX_SPRITES) + { + gSprites[spriteId].oam.priority = 1; + gSprites[spriteId].coordOffsetEnabled = TRUE; + gSprites[spriteId].data[0] = 0; + gSprites[spriteId].data[1] = 0; + gSprites[spriteId].data[2] = 0; + gWeatherPtr->unknown_72C++; + } +} + +void sub_8080610(void) +{ + u16 i; + + for (i = 0; i < 64; i++) + { + if (gSprites[i].template == &gSpriteTemplate_839ACBC) + DestroySprite(&gSprites[i]); + } + FreeSpriteTilesByTag(0x1205); +} + +void unc_0807DAB4(struct Sprite *sprite) +{ + ++sprite->data[0]; + if (++sprite->data[0] > 8) // double increment + { + sprite->data[0] = 0; + if (sprite->data[1] == 0) + { + if (++sprite->pos2.x > 4) + sprite->data[1] = 1; + } + else + { + if (--sprite->pos2.x <= 0) + sprite->data[1] = 0; + } + } + sprite->pos1.y -= 3; + if (++sprite->data[2] > 0x77) + DestroySprite(sprite); +} + +u8 TranslateWeatherNum(u8); +void UpdateRainCounter(u8, u8); + +void SetSav1Weather(u32 weather) +{ + u8 oldWeather = gSaveBlock1.weather; + + gSaveBlock1.weather = TranslateWeatherNum(weather); + UpdateRainCounter(gSaveBlock1.weather, oldWeather); +} + +u8 GetSav1Weather(void) +{ + return gSaveBlock1.weather; +} + +void SetSav1WeatherFromCurrMapHeader(void) +{ + u8 oldWeather = gSaveBlock1.weather; + + gSaveBlock1.weather = TranslateWeatherNum(gMapHeader.weather); + UpdateRainCounter(gSaveBlock1.weather, oldWeather); +} + +void SetWeather(u32 weather) +{ + SetSav1Weather(weather); + DoWeatherEffect(GetSav1Weather()); +} + +void SetWeather_Unused(u32 weather) +{ + SetSav1Weather(weather); + sub_807C988(GetSav1Weather()); +} + +void DoCurrentWeather(void) +{ + DoWeatherEffect(GetSav1Weather()); +} + +void sub_8080750(void) +{ + sub_807C988(GetSav1Weather()); +} + +static const u8 sWeatherCycle1[] = {2, 3, 5, 3}; +static const u8 sWeatherCycle2[] = {2, 2, 3, 2}; + +u8 TranslateWeatherNum(u8 weather) +{ + switch (weather) + { + case 0: return 0; + case 1: return 1; + case 2: return 2; + case 3: return 3; + case 4: return 4; + case 5: return 5; + case 6: return 6; + case 7: return 7; + case 8: return 8; + case 9: return 9; + case 10: return 10; + case 11: return 11; + case 12: return 12; + case 13: return 13; + case 14: return 14; + case 20: return sWeatherCycle1[gSaveBlock1.filler_2F]; + case 21: return sWeatherCycle2[gSaveBlock1.filler_2F]; + default: return 0; + } +} + +void UpdateWeatherPerDay(u16 increment) +{ + u16 weatherStage = gSaveBlock1.filler_2F + increment; + weatherStage %= 4; + gSaveBlock1.filler_2F = weatherStage; +} + +void UpdateRainCounter(u8 newWeather, u8 oldWeather) +{ + if (newWeather != oldWeather + && (newWeather == WEATHER_RAIN_LIGHT || newWeather == WEATHER_RAIN_MED)) + IncrementGameStat(0x28); +} diff --git a/src/field/overworld.c b/src/field/overworld.c index 387745f94..02a5fba10 100644 --- a/src/field/overworld.c +++ b/src/field/overworld.c @@ -602,7 +602,7 @@ void sub_80538F0(u8 mapGroup, u8 mapNum) prev_quest_postbuffer_cursor_backup_reset(); sub_8082BD0(mapGroup, mapNum); DoTimeBasedEvents(); - sub_80806E4(); + SetSav1WeatherFromCurrMapHeader(); ChooseAmbientCrySpecies(); SetDefaultFlashLevel(); Overworld_ClearSavedMusic(); @@ -638,7 +638,7 @@ void sub_8053994(u32 a1) sub_8082BD0(gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum); if (a1 != 1) DoTimeBasedEvents(); - sub_80806E4(); + SetSav1WeatherFromCurrMapHeader(); ChooseAmbientCrySpecies(); if (v2) FlagClear(SYS_USE_FLASH); diff --git a/src/field/scrcmd.c b/src/field/scrcmd.c index 28584d4d0..8b2960038 100644 --- a/src/field/scrcmd.c +++ b/src/field/scrcmd.c @@ -692,7 +692,7 @@ bool8 ScrCmd_setweather(struct ScriptContext *ctx) bool8 ScrCmd_resetweather(struct ScriptContext *ctx) { - sub_80806E4(); + SetSav1WeatherFromCurrMapHeader(); return FALSE; } -- cgit v1.2.3 From 0621797d3414975930335fb124580e9d58104794 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Sat, 25 Nov 2017 23:36:10 -0600 Subject: rename field_weather_2.c to field_weather_effects.c --- src/field/field_weather_2.c | 2359 ------------------------------------- src/field/field_weather_effects.c | 2359 +++++++++++++++++++++++++++++++++++++ 2 files changed, 2359 insertions(+), 2359 deletions(-) delete mode 100644 src/field/field_weather_2.c create mode 100644 src/field/field_weather_effects.c (limited to 'src') diff --git a/src/field/field_weather_2.c b/src/field/field_weather_2.c deleted file mode 100644 index 1ae2d6e56..000000000 --- a/src/field/field_weather_2.c +++ /dev/null @@ -1,2359 +0,0 @@ -#include "global.h" -#include "field_map_obj.h" -#include "field_weather.h" -#include "overworld.h" -#include "rng.h" -#include "script.h" -#include "songs.h" -#include "sound.h" -#include "sprite.h" -#include "task.h" -#include "trig.h" - -extern struct Weather *const gWeatherPtr; - -const u16 gUnknown_08397108[] = INCBIN_U16("graphics/weather/1.gbapal"); -const u16 gUnknown_08397128[] = INCBIN_U16("graphics/weather/2.gbapal"); -const u8 gWeatherFog1Tiles[] = INCBIN_U8("graphics/weather/fog1.4bpp"); -const u8 gWeatherFog2Tiles[] = INCBIN_U8("graphics/weather/fog2.4bpp"); -const u8 gWeatherCloudTiles[] = INCBIN_U8("graphics/weather/cloud.4bpp"); -const u8 gWeatherSnow1Tiles[] = INCBIN_U8("graphics/weather/snow0.4bpp"); -const u8 gWeatherSnow2Tiles[] = INCBIN_U8("graphics/weather/snow1.4bpp"); -const u8 gWeatherBubbleTiles[] = INCBIN_U8("graphics/weather/bubble.4bpp"); -const u8 gWeatherAshTiles[] = INCBIN_U8("graphics/weather/ash.4bpp"); -const u8 gWeatherRainTiles[] = INCBIN_U8("graphics/weather/rain.4bpp"); -const u8 gWeatherSandstormTiles[] = INCBIN_U8("graphics/weather/sandstorm.4bpp"); - -static const struct Coords16 gUnknown_0839A9C8[] = -{ - { 0, 66}, - { 5, 73}, - {10, 78}, -}; - -static const struct SpriteSheet sCloudSpriteSheet = {gWeatherCloudTiles, 0x800, 0x1200}; - -static const struct OamData gOamData_839A9DC = -{ - .y = 0, - .affineMode = 0, - .objMode = 1, - .mosaic = 0, - .bpp = 0, - .shape = 0, - .x = 0, - .matrixNum = 0, - .size = 3, - .tileNum = 0, - .priority = 3, - .paletteNum = 0, - .affineParam = 0, -}; - -static const union AnimCmd gSpriteAnim_839A9E4[] = -{ - ANIMCMD_FRAME(0, 16), - ANIMCMD_END, -}; - -static const union AnimCmd *const gSpriteAnimTable_839A9EC[] = -{ - gSpriteAnim_839A9E4, -}; - -void sub_807E0F4(struct Sprite *); -static const struct SpriteTemplate sCloudSpriteTemplate = -{ - .tileTag = 4608, - .paletteTag = 4609, - .oam = &gOamData_839A9DC, - .anims = gSpriteAnimTable_839A9EC, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_807E0F4, -}; - -extern void sub_807D5BC(s8 a); -extern void sub_807D8C0(const u16 *palette); -extern void sub_807D9A8(void); -extern bool8 sub_807D9C8(void); -extern void sub_807DA14(void); -extern void sub_807DA4C(void); -extern void Weather_SetTargetBlendCoeffs(u8 a, u8 b, int c); -extern bool8 Weather_UpdateBlend(void); -extern void SetRainStrengthFromSoundEffect(u16 sndEff); -extern void sub_807D5F0(u8 a, u8 b, u8 c); - -//------------------------------------------------------------------------------ -// Clouds -//------------------------------------------------------------------------------ - -void Clouds_InitVars(void) -{ - gWeatherPtr->unknown_6C1 = 0; - gWeatherPtr->unknown_6C2 = 20; - gWeatherPtr->weatherGfxLoaded = FALSE; - gWeatherPtr->initStep = 0; - if (gWeatherPtr->cloudsActive == FALSE) - Weather_SetBlendCoeffs(0, 16); -} - -void Clouds_Main(void); - -void Clouds_InitAll(void) -{ - Clouds_InitVars(); - while (gWeatherPtr->weatherGfxLoaded == FALSE) - Clouds_Main(); -} - -void CreateCloudSprites(void); - -void Clouds_Main(void) -{ - switch (gWeatherPtr->initStep) - { - case 0: - CreateCloudSprites(); - gWeatherPtr->initStep++; - break; - case 1: - Weather_SetTargetBlendCoeffs(12, 8, 1); - gWeatherPtr->initStep++; - break; - case 2: - if (Weather_UpdateBlend()) - { - gWeatherPtr->weatherGfxLoaded = TRUE; - gWeatherPtr->initStep++; - } - break; - } -} - -void sub_807E0A0(void); - -bool8 Clouds_Finish(void) -{ - switch (gWeatherPtr->unknown_6CE) - { - case 0: - Weather_SetTargetBlendCoeffs(0, 16, 1); - gWeatherPtr->unknown_6CE++; - return TRUE; - case 1: - if (Weather_UpdateBlend()) - { - sub_807E0A0(); - gWeatherPtr->unknown_6CE++; - } - return TRUE; - } - return FALSE; -} - -void sub_807DF9C(void) -{ - gWeatherPtr->unknown_6C1 = 0; - gWeatherPtr->unknown_6C2 = 20; -} - -void sub_807DFC0(void) -{ - sub_807DF9C(); -} - -void nullsub_55(void) -{ -} - -int sub_807DFD0(void) -{ - return 0; -} - -void CreateCloudSprites(void) -{ - u16 i; - - if (gWeatherPtr->cloudsActive == TRUE) - return; - LoadSpriteSheet(&sCloudSpriteSheet); - sub_807D8C0(gUnknown_08397108); - for (i = 0; i < 3; i++) - { - u8 spriteId = CreateSprite(&sCloudSpriteTemplate, 0, 0, 0xFF); - - if (spriteId != 64) - { - struct Sprite *sprite; - - gWeatherPtr->cloudSprites[i] = &gSprites[spriteId]; - sprite = gWeatherPtr->cloudSprites[i]; - sub_80603CC(gUnknown_0839A9C8[i].x + 7, gUnknown_0839A9C8[i].y + 7, &sprite->pos1.x, &sprite->pos1.y); - sprite->coordOffsetEnabled = TRUE; - } - else - { - gWeatherPtr->cloudSprites[i] = NULL; - } - } - gWeatherPtr->cloudsActive = TRUE; -} - -void sub_807E0A0(void) -{ - u16 i; - - if (gWeatherPtr->cloudsActive == FALSE) - return; - for (i = 0; i < 3; i++) - { - if (gWeatherPtr->cloudSprites[i] != NULL) - DestroySprite(gWeatherPtr->cloudSprites[i]); - } - FreeSpriteTilesByTag(0x1200); - gWeatherPtr->cloudsActive = FALSE; -} - -void sub_807E0F4(struct Sprite *sprite) -{ - sprite->data[0] = (sprite->data[0] + 1) & 1; - if (sprite->data[0] != 0) - sprite->pos1.x--; -} - -void sub_807E110(void) -{ - gWeatherPtr->initStep = 0; - gWeatherPtr->weatherGfxLoaded = FALSE; - gWeatherPtr->unknown_6C1 = 0; - gWeatherPtr->unknown_6C2 = 0; -} - -void sub_807E174(void); - -void sub_807E144(void) -{ - sub_807E110(); - while (gWeatherPtr->weatherGfxLoaded == FALSE) - sub_807E174(); -} - -void sub_807E174(void) -{ - switch (gWeatherPtr->initStep) - { - case 0: - if (gWeatherPtr->unknown_6C6 != 0) - gWeatherPtr->initStep++; - break; - case 1: - sub_807D9A8(); - gWeatherPtr->initStep++; - break; - case 2: - if (sub_807D9C8() == FALSE) - gWeatherPtr->initStep++; - break; - case 3: - sub_807DA14(); - gWeatherPtr->initStep++; - break; - case 4: - sub_807DA4C(); - if (gWeatherPtr->unknown_73C == 6) - { - gWeatherPtr->weatherGfxLoaded = TRUE; - gWeatherPtr->initStep++; - } - break; - default: - sub_807DA4C(); - break; - } -} - -int sub_807E258(void) -{ - return 0; -} - -void task50_0807B6D4(u8); - -void sub_807E25C(void) -{ - CreateTask(task50_0807B6D4, 0x50); -} - -#define tState data[0] -#define tBlendY data[1] -#define tBlendDelay data[2] -#define tWinRange data[3] - -void task50_0807B6D4(u8 taskId) -{ - struct Task *task = &gTasks[taskId]; - - switch (task->tState) - { - case 0: - task->tBlendY = 0; - task->tBlendDelay = 0; - task->tWinRange = REG_WININ; - REG_WININ = WIN_RANGE(63, 63); - REG_BLDCNT = BLDCNT_TGT1_BG1 | BLDCNT_TGT1_BG2 | BLDCNT_TGT1_BG3 | BLDCNT_TGT1_OBJ - | BLDCNT_EFFECT_LIGHTEN; - REG_BLDY = 0; - task->tState++; - // fall through - case 1: - task->tBlendY += 3; - if (task->tBlendY > 16) - task->tBlendY = 16; - REG_BLDY = task->tBlendY; - if (task->tBlendY >= 16) - task->tState++; - break; - case 2: - task->tBlendDelay++; - if (task->tBlendDelay > 9) - { - task->tBlendDelay = 0; - task->tBlendY--; - if (task->tBlendY <= 0) - { - task->tBlendY = 0; - task->tState++; - } - REG_BLDY = task->tBlendY; - } - break; - case 3: - REG_BLDCNT = 0; - REG_BLDY = 0; - REG_WININ = task->tWinRange; - task->tState++; - break; - case 4: - EnableBothScriptContexts(); - DestroyTask(taskId); - break; - } -} - -#undef tState -#undef tBlendY -#undef tBlendDelay -#undef tWinRange - -//------------------------------------------------------------------------------ -// Light Rain -//------------------------------------------------------------------------------ - -void LightRain_InitVars(void) -{ - gWeatherPtr->initStep = 0; - gWeatherPtr->weatherGfxLoaded = FALSE; - gWeatherPtr->unknown_6D6 = 0; - gWeatherPtr->unknown_6DB = 8; - gWeatherPtr->unknown_6DC = 0; - gWeatherPtr->unknown_6D9 = 10; - gWeatherPtr->unknown_6C1 = 3; - gWeatherPtr->unknown_6C2 = 20; - SetRainStrengthFromSoundEffect(SE_T_KOAME); -} - -void LightRain_Main(void); - -void LightRain_InitAll(void) -{ - LightRain_InitVars(); - while (gWeatherPtr->weatherGfxLoaded == FALSE) - LightRain_Main(); -} - -void LoadRainSpriteSheet(void); -u8 CreateRainSprites(void); -u8 sub_807E8E8(void); - -void LightRain_Main(void) -{ - switch (gWeatherPtr->initStep) - { - case 0: - LoadRainSpriteSheet(); - gWeatherPtr->initStep++; - break; - case 1: - if (CreateRainSprites() == 0) - gWeatherPtr->initStep++; - break; - case 2: - if (sub_807E8E8() == FALSE) - { - gWeatherPtr->weatherGfxLoaded = TRUE; - gWeatherPtr->initStep++; - } - break; - } -} - -void sub_807E974(void); - -bool8 LightRain_Finish(void) -{ - switch (gWeatherPtr->unknown_6CE) - { - case 0: - if (gWeatherPtr->nextWeather == WEATHER_RAIN_LIGHT - || gWeatherPtr->nextWeather == WEATHER_RAIN_MED - || gWeatherPtr->nextWeather == WEATHER_RAIN_HEAVY) - { - gWeatherPtr->unknown_6CE = 0xFF; - return FALSE; - } - else - { - gWeatherPtr->unknown_6D9 = 0; - gWeatherPtr->unknown_6CE++; - } - // fall through - case 1: - if (sub_807E8E8() == FALSE) - { - sub_807E974(); - gWeatherPtr->unknown_6CE++; - return FALSE; - } - return TRUE; - } - return FALSE; -} - -// defined below -extern const s16 gUnknown_0839AABC[][2]; -extern const u16 gUnknown_0839AAC4[][2]; - -void sub_807E4EC(struct Sprite *sprite) -{ - u32 randVal; - u16 r6; - s32 r4; - s32 r0; - - if (sprite->data[1] == 0) - sprite->data[1] = 361; - randVal = sprite->data[1] * 1103515245 + 12345; - sprite->data[1] = ((randVal & 0x7FFF0000) >> 16) % 600; - - r6 = gUnknown_0839AAC4[gWeatherPtr->unknown_6DC][0]; - - r4 = sprite->data[1] % 30; - sprite->data[2] = r4 * 8; // useless assignment - - r0 = sprite->data[1] / 30; - sprite->data[3] = r0 * 8; // useless assignment - - sprite->data[2] = r4; - sprite->data[2] <<= 7; - - sprite->data[3] = r0; - sprite->data[3] <<= 7; - - sprite->data[2] -= gUnknown_0839AABC[gWeatherPtr->unknown_6DC][0] * r6; - sprite->data[3] -= gUnknown_0839AABC[gWeatherPtr->unknown_6DC][1] * r6; - - StartSpriteAnim(sprite, 0); - sprite->data[4] = 0; - sprite->coordOffsetEnabled = FALSE; - sprite->data[0] = r6; -} - -void sub_807E5C0(struct Sprite *sprite) -{ - if (sprite->data[4] == 0) - { - sprite->data[2] += gUnknown_0839AABC[gWeatherPtr->unknown_6DC][0]; - sprite->data[3] += gUnknown_0839AABC[gWeatherPtr->unknown_6DC][1]; - sprite->pos1.x = sprite->data[2] >> 4; - sprite->pos1.y = sprite->data[3] >> 4; - - if (sprite->data[5] != 0 - && (sprite->pos1.x >= -8 && sprite->pos1.x <= 248) - && sprite->pos1.y >= -16 && sprite->pos1.y <= 176) - sprite->invisible = FALSE; - else - sprite->invisible = TRUE; - - sprite->data[0]--; - if (sprite->data[0] == 0) - { - StartSpriteAnim(sprite, gWeatherPtr->unknown_6DC + 1); - sprite->data[4] = 1; - sprite->pos1.x -= gSpriteCoordOffsetX; - sprite->pos1.y -= gSpriteCoordOffsetY; - sprite->coordOffsetEnabled = TRUE; - } - } - else if (sprite->animEnded) - { - sprite->invisible = TRUE; - sub_807E4EC(sprite); - } -} - -void sub_807E6C4(struct Sprite *sprite) -{ - if (sprite->data[0] == 0) - { - sub_807E4EC(sprite); - sprite->callback = sub_807E5C0; - } - else - { - sprite->data[0]--; - } -} - -void sub_807E6F0(struct Sprite *sprite, u16 b) -{ - u16 r8 = gUnknown_0839AAC4[gWeatherPtr->unknown_6DC][0]; - u16 r6 = b / (gUnknown_0839AAC4[gWeatherPtr->unknown_6DC][1] + r8); - u16 r4 = b % (gUnknown_0839AAC4[gWeatherPtr->unknown_6DC][1] + r8); - - while (--r6 != 0xFFFF) - sub_807E4EC(sprite); - if (r4 < r8) - { - while (--r4 != 0xFFFF) - sub_807E5C0(sprite); - sprite->data[6] = 0; - } - else - { - sprite->data[0] = r4 - r8; - sprite->invisible = TRUE; - sprite->data[6] = 1; - } -} - -extern const struct SpriteSheet sRainSpriteSheet; // defined below - -void LoadRainSpriteSheet(void) -{ - LoadSpriteSheet(&sRainSpriteSheet); -} - -const struct Coords16 gUnknown_0839AA08[] = -{ - { 0, 0}, - { 0, 160}, - { 0, 64}, - {144, 224}, - {144, 128}, - { 32, 32}, - { 32, 192}, - { 32, 96}, - { 72, 128}, - { 72, 32}, - { 72, 192}, - {216, 96}, - {216, 0}, - {104, 160}, - {104, 64}, - {104, 224}, - {144, 0}, - {144, 160}, - {144, 64}, - { 32, 224}, - { 32, 128}, - { 72, 32}, - { 72, 192}, - { 48, 96}, -}; - -static const struct OamData gOamData_839AA68 = -{ - .y = 0, - .affineMode = 0, - .objMode = 0, - .mosaic = 0, - .bpp = 0, - .shape = 2, - .x = 0, - .matrixNum = 0, - .size = 2, - .tileNum = 0, - .priority = 1, - .paletteNum = 2, - .affineParam = 0, -}; - -static const union AnimCmd gSpriteAnim_839AA70[] = -{ - ANIMCMD_FRAME(0, 16), - ANIMCMD_JUMP(0), -}; - -static const union AnimCmd gSpriteAnim_839AA78[] = -{ - ANIMCMD_FRAME(8, 3), - ANIMCMD_FRAME(32, 2), - ANIMCMD_FRAME(40, 2), - ANIMCMD_END, -}; - -static const union AnimCmd gSpriteAnim_839AA88[] = -{ - ANIMCMD_FRAME(8, 3), - ANIMCMD_FRAME(16, 3), - ANIMCMD_FRAME(24, 4), - ANIMCMD_END, -}; - -static const union AnimCmd *const gSpriteAnimTable_839AA98[] = -{ - gSpriteAnim_839AA70, - gSpriteAnim_839AA78, - gSpriteAnim_839AA88, -}; - -static const struct SpriteTemplate sRainSpriteTemplate = -{ - .tileTag = 4614, - .paletteTag = 4608, - .oam = &gOamData_839AA68, - .anims = gSpriteAnimTable_839AA98, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_807E5C0, -}; - - -const s16 gUnknown_0839AABC[][2] = -{ - {-104, 208}, - {-160, 320}, -}; - -const u16 gUnknown_0839AAC4[][2] = -{ - {18, 7}, - {12, 10}, -}; - -static const struct SpriteSheet sRainSpriteSheet = {gWeatherRainTiles, sizeof(gWeatherRainTiles), 0x1206}; - -static const struct OamData gOamData_839AAD4 = -{ - .y = 0, - .affineMode = 0, - .objMode = 0, - .mosaic = 0, - .bpp = 0, - .shape = 0, - .x = 0, - .matrixNum = 0, - .size = 0, - .tileNum = 0, - .priority = 1, - .paletteNum = 0, - .affineParam = 0, -}; - -static const struct SpriteFrameImage gSpriteImageTable_839AADC[] = -{ - {gWeatherSnow1Tiles, sizeof(gWeatherSnow1Tiles)}, - {gWeatherSnow2Tiles, sizeof(gWeatherSnow2Tiles)}, -}; - -static const union AnimCmd gSpriteAnim_839AAEC[] = -{ - ANIMCMD_FRAME(0, 16), - ANIMCMD_END, -}; - -static const union AnimCmd gSpriteAnim_839AAF4[] = -{ - ANIMCMD_FRAME(1, 16), - ANIMCMD_END, -}; - -static const union AnimCmd *const gSpriteAnimTable_839AAFC[] = -{ - gSpriteAnim_839AAEC, - gSpriteAnim_839AAF4, -}; - -void sub_807ED48(struct Sprite *); -static const struct SpriteTemplate sSnowflakeSpriteTemplate = -{ - .tileTag = 0xFFFF, - .paletteTag = 4608, - .oam = &gOamData_839AAD4, - .anims = gSpriteAnimTable_839AAFC, - .images = gSpriteImageTable_839AADC, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_807ED48, -}; - -// unused data -static const u16 unusedData_839AB1C[] = {0, 6, 6, 12, 18, 42, 300, 300}; - -static const struct OamData gOamData_839AB2C = -{ - .y = 0, - .affineMode = 0, - .objMode = 1, - .mosaic = 0, - .bpp = 0, - .shape = 0, - .x = 0, - .matrixNum = 0, - .size = 3, - .tileNum = 0, - .priority = 2, - .paletteNum = 0, - .affineParam = 0, -}; - -static const union AnimCmd gSpriteAnim_839AB34[] = -{ - ANIMCMD_FRAME(0, 16), - ANIMCMD_END, -}; - -static const union AnimCmd gSpriteAnim_839AB3C[] = -{ - ANIMCMD_FRAME(32, 16), - ANIMCMD_END, -}; - -static const union AnimCmd gSpriteAnim_839AB44[] = -{ - ANIMCMD_FRAME(64, 16), - ANIMCMD_END, -}; - -static const union AnimCmd gSpriteAnim_839AB4C[] = -{ - ANIMCMD_FRAME(96, 16), - ANIMCMD_END, -}; - -static const union AnimCmd gSpriteAnim_839AB54[] = -{ - ANIMCMD_FRAME(128, 16), - ANIMCMD_END, -}; - -static const union AnimCmd gSpriteAnim_839AB5C[] = -{ - ANIMCMD_FRAME(160, 16), - ANIMCMD_END, -}; - -static const union AnimCmd *const gSpriteAnimTable_839AB64[] = -{ - gSpriteAnim_839AB34, - gSpriteAnim_839AB3C, - gSpriteAnim_839AB44, - gSpriteAnim_839AB4C, - gSpriteAnim_839AB54, - gSpriteAnim_839AB5C, -}; - -static const union AffineAnimCmd gSpriteAffineAnim_839AB7C[] = -{ - AFFINEANIMCMD_FRAME(0x200, 0x200, 0, 0), - AFFINEANIMCMD_END, -}; - -static const union AffineAnimCmd *const gSpriteAffineAnimTable_839AB8C[] = -{ - gSpriteAffineAnim_839AB7C, -}; - -static void Fog2SpriteCallback(struct Sprite *); -static const struct SpriteTemplate sFog2SpriteTemplate = -{ - .tileTag = 4609, - .paletteTag = 4608, - .oam = &gOamData_839AB2C, - .anims = gSpriteAnimTable_839AB64, - .images = NULL, - .affineAnims = gSpriteAffineAnimTable_839AB8C, - .callback = Fog2SpriteCallback, -}; - -bool8 CreateRainSprites(void) -{ - u8 r7; - u8 spriteId; - - if (gWeatherPtr->unknown_6DA == 24) - return FALSE; - - r7 = gWeatherPtr->unknown_6DA; - spriteId = CreateSpriteAtEnd(&sRainSpriteTemplate, - gUnknown_0839AA08[r7].x, gUnknown_0839AA08[r7].y, 78); - if (spriteId != 64) - { - gSprites[spriteId].data[5] = 0; - gSprites[spriteId].data[1] = r7 * 145; - while (gSprites[spriteId].data[1] >= 600) - gSprites[spriteId].data[1] -= 600; - sub_807E4EC(&gSprites[spriteId]); - sub_807E6F0(&gSprites[spriteId], r7 * 9); - gSprites[spriteId].invisible = TRUE; - gWeatherPtr->rainSprites[r7] = &gSprites[spriteId]; - } - else - { - gWeatherPtr->rainSprites[r7] = NULL; - } - - if (++gWeatherPtr->unknown_6DA == 24) - { - u16 i; - - for (i = 0; i < 24; i++) - { - if (gWeatherPtr->rainSprites[i] != NULL) - { - if (gWeatherPtr->rainSprites[i]->data[6] == 0) - gWeatherPtr->rainSprites[i]->callback = sub_807E5C0; - else - gWeatherPtr->rainSprites[i]->callback = sub_807E6C4; - } - } - return FALSE; - } - return TRUE; -} - -bool8 sub_807E8E8(void) -{ - if (gWeatherPtr->unknown_6D8 == gWeatherPtr->unknown_6D9) - return FALSE; - - if (++gWeatherPtr->unknown_6D6 > gWeatherPtr->unknown_6DB) - { - gWeatherPtr->unknown_6D6 = 0; - if (gWeatherPtr->unknown_6D8 < gWeatherPtr->unknown_6D9) - { - gWeatherPtr->rainSprites[gWeatherPtr->unknown_6D8++]->data[5] = 1; - } - else - { - gWeatherPtr->unknown_6D8--; - gWeatherPtr->rainSprites[gWeatherPtr->unknown_6D8]->data[5] = 0; - gWeatherPtr->rainSprites[gWeatherPtr->unknown_6D8]->invisible = TRUE; - } - } - return TRUE; -} - -void sub_807E974(void) -{ - u16 i; - - for (i = 0; i < gWeatherPtr->unknown_6DA; i++) - { - if (gWeatherPtr->rainSprites[i] != NULL) - DestroySprite(gWeatherPtr->rainSprites[i]); - } - gWeatherPtr->unknown_6DA = 0; - FreeSpriteTilesByTag(0x1206); -} - -//------------------------------------------------------------------------------ -// Snow -//------------------------------------------------------------------------------ - -void Snow_InitVars(void) -{ - gWeatherPtr->initStep = 0; - gWeatherPtr->weatherGfxLoaded = FALSE; - gWeatherPtr->unknown_6C1 = 3; - gWeatherPtr->unknown_6C2 = 20; - gWeatherPtr->unknown_6E5 = 16; - gWeatherPtr->unknown_6E0 = 0; -} - -void Snow_Main(void); -void sub_807ED48(struct Sprite *); - -void Snow_InitAll(void) -{ - Snow_InitVars(); - while (gWeatherPtr->weatherGfxLoaded == FALSE) - { - u16 i; - - Snow_Main(); - for (i = 0; i < gWeatherPtr->snowflakeSpriteCount; i++) - { - sub_807ED48(gWeatherPtr->snowflakeSprites[i]); - } - } -} - -u8 snowflakes_progress(void); - -void Snow_Main(void) -{ - if (gWeatherPtr->initStep == 0 && snowflakes_progress() == FALSE) - { - gWeatherPtr->weatherGfxLoaded = TRUE; - gWeatherPtr->initStep++; - } -} - -bool8 Snow_Finish(void) -{ - switch (gWeatherPtr->unknown_6CE) - { - case 0: - gWeatherPtr->unknown_6E5 = 0; - gWeatherPtr->unknown_6E0 = 0; - gWeatherPtr->unknown_6CE++; - // fall through - case 1: - if (snowflakes_progress() == FALSE) - { - gWeatherPtr->unknown_6CE++; - return FALSE; - } - return TRUE; - } - return FALSE; -} - -bool8 CreateSnowflakeSprite(void); -bool8 RemoveSnowflakeSprite(void); - -bool8 snowflakes_progress(void) -{ - if (gWeatherPtr->snowflakeSpriteCount == gWeatherPtr->unknown_6E5) - return FALSE; - - gWeatherPtr->unknown_6E0++; - if (gWeatherPtr->unknown_6E0 > 36) - { - gWeatherPtr->unknown_6E0 = 0; - if (gWeatherPtr->snowflakeSpriteCount < gWeatherPtr->unknown_6E5) - CreateSnowflakeSprite(); - else - RemoveSnowflakeSprite(); - } - return (gWeatherPtr->snowflakeSpriteCount != gWeatherPtr->unknown_6E5); -} - -void sub_807EC40(struct Sprite *); - -bool8 CreateSnowflakeSprite(void) -{ - u8 spriteId = CreateSpriteAtEnd(&sSnowflakeSpriteTemplate, 0, 0, 78); - - if (spriteId == 64) - return FALSE; - gSprites[spriteId].data[4] = gWeatherPtr->snowflakeSpriteCount; - sub_807EC40(&gSprites[spriteId]); - gSprites[spriteId].coordOffsetEnabled = TRUE; - gWeatherPtr->snowflakeSprites[gWeatherPtr->snowflakeSpriteCount++] = &gSprites[spriteId]; - return TRUE; -} - -bool8 RemoveSnowflakeSprite(void) -{ - if (gWeatherPtr->snowflakeSpriteCount != 0) - { - DestroySprite(gWeatherPtr->snowflakeSprites[--gWeatherPtr->snowflakeSpriteCount]); - return TRUE; - } - return FALSE; -} - -void sub_807EC40(struct Sprite *sprite) -{ - u16 r4 = ((sprite->data[4] * 5) & 7) * 30 + (Random() % 30); - u16 r6; - - sprite->pos1.y = -3 - (gSpriteCoordOffsetY + sprite->centerToCornerVecY); - sprite->pos1.x = r4 - (gSpriteCoordOffsetX + sprite->centerToCornerVecX); - sprite->data[0] = sprite->pos1.y * 128; - sprite->pos2.x = 0; - r6 = Random(); - sprite->data[1] = (r6 & 3) * 5 + 64; - sprite->data[7] = (r6 & 3) * 5 + 64; - StartSpriteAnim(sprite, (r6 & 1) ? 0 : 1); - sprite->data[3] = 0; - sprite->data[2] = ((r6 & 3) == 0) ? 2 : 1; - sprite->data[6] = (r6 & 0x1F) + 210; - sprite->data[5] = 0; -} - -void sub_807ECEC(struct Sprite *sprite) -{ - if (gWeatherPtr->unknown_6E2 > 18) - { - sprite->invisible = FALSE; - sprite->callback = sub_807ED48; - sprite->pos1.y = 0xFA - (gSpriteCoordOffsetY + sprite->centerToCornerVecY); - sprite->data[0] = sprite->pos1.y * 128; - gWeatherPtr->unknown_6E2 = 0; - } -} - -void sub_807ED48(struct Sprite *sprite) -{ - s16 r3; - s16 r2; - - sprite->data[0] += sprite->data[1]; - sprite->pos1.y = sprite->data[0] >> 7; - sprite->data[3] = (sprite->data[3] + sprite->data[2]) & 0xFF; - sprite->pos2.x = gSineTable[sprite->data[3]] / 64; - - r3 = (sprite->pos1.x + sprite->centerToCornerVecX + gSpriteCoordOffsetX) & 0x1FF; - if (r3 & 0x100) - r3 = -0x100 | r3; // hmm... what is this? - if (r3 < -3) - sprite->pos1.x = 242 - (gSpriteCoordOffsetX + sprite->centerToCornerVecX); - else if (r3 > 242) - sprite->pos1.x = -3 - (gSpriteCoordOffsetX + sprite->centerToCornerVecX); - - r2 = (sprite->pos1.y + sprite->centerToCornerVecY + gSpriteCoordOffsetY) & 0xFF; - if (r2 > 163 && r2 < 171) - { - sprite->pos1.y = 250 - (gSpriteCoordOffsetY + sprite->centerToCornerVecY); - sprite->data[0] = sprite->pos1.y * 128; - sprite->data[5] = 0; - sprite->data[6] = 220; - } - else if (r2 > 242 && r2 < 250) - { - sprite->pos1.y = 163; - sprite->data[0] = sprite->pos1.y * 128; - sprite->data[5] = 0; - sprite->data[6] = 220; - sprite->invisible = TRUE; - sprite->callback = sub_807ECEC; - } - - sprite->data[5]++; - if (sprite->data[5] == sprite->data[6]) - { - sub_807EC40(sprite); - sprite->pos1.y = 250; - sprite->invisible = TRUE; - sprite->callback = sub_807ECEC; - } -} - -//------------------------------------------------------------------------------ -// Medium Rain -//------------------------------------------------------------------------------ - -void MedRain_InitVars(void) -{ - gWeatherPtr->initStep = 0; - gWeatherPtr->weatherGfxLoaded = FALSE; - gWeatherPtr->unknown_6D6 = 0; - gWeatherPtr->unknown_6DB = 4; - gWeatherPtr->unknown_6DC = 0; - gWeatherPtr->unknown_6D9 = 16; - gWeatherPtr->unknown_6C1 = 3; - gWeatherPtr->unknown_6C2 = 20; - gWeatherPtr->weatherGfxLoaded = FALSE; // duplicate assignment - gWeatherPtr->unknown_6ED = 0; - SetRainStrengthFromSoundEffect(SE_T_AME); -} - -void Rain_Main(void); - -void MedRain_InitAll(void) -{ - MedRain_InitVars(); - while (gWeatherPtr->weatherGfxLoaded == FALSE) - Rain_Main(); -} - -//------------------------------------------------------------------------------ -// Heavy Rain -//------------------------------------------------------------------------------ - -void HeavyRain_InitVars(void) -{ - gWeatherPtr->initStep = 0; - gWeatherPtr->weatherGfxLoaded = FALSE; - gWeatherPtr->unknown_6D6 = 0; - gWeatherPtr->unknown_6DB = 4; - gWeatherPtr->unknown_6DC = 1; - gWeatherPtr->unknown_6D9 = 24; - gWeatherPtr->unknown_6C1 = 3; - gWeatherPtr->unknown_6C2 = 20; - gWeatherPtr->weatherGfxLoaded = FALSE; // duplicate assignment - SetRainStrengthFromSoundEffect(SE_T_OOAME); -} - -void HeavyRain_InitAll(void) -{ - HeavyRain_InitVars(); - while (gWeatherPtr->weatherGfxLoaded == FALSE) - Rain_Main(); -} - -void UpdateThunderSound(void); -void SetThunderCounter(u16); - -void Rain_Main(void) -{ - UpdateThunderSound(); - switch (gWeatherPtr->initStep) - { - case 0: - LoadRainSpriteSheet(); - gWeatherPtr->initStep++; - break; - case 1: - if (CreateRainSprites()) - break; - gWeatherPtr->initStep++; - break; - case 2: - if (sub_807E8E8()) - break; - gWeatherPtr->weatherGfxLoaded = TRUE; - gWeatherPtr->initStep++; - break; - case 3: - if (gWeatherPtr->unknown_6C6 == 0) - break; - gWeatherPtr->initStep = 6; - break; - case 4: - gWeatherPtr->unknown_6EA = 1; - gWeatherPtr->unknown_6E6 = (Random() % 360) + 360; - gWeatherPtr->initStep++; - // fall through - case 5: - if (--gWeatherPtr->unknown_6E6 != 0) - break; - gWeatherPtr->initStep++; - break; - case 6: - gWeatherPtr->unknown_6EA = 1; - gWeatherPtr->unknown_6EB = Random() % 2; - gWeatherPtr->initStep++; - break; - case 7: - gWeatherPtr->unknown_6EC = (Random() & 1) + 1; - gWeatherPtr->initStep++; - // fall through - case 8: - sub_807D5BC(19); - if (gWeatherPtr->unknown_6EB == 0 && gWeatherPtr->unknown_6EC == 1) - SetThunderCounter(20); - gWeatherPtr->unknown_6E6 = (Random() % 3) + 6; - gWeatherPtr->initStep++; - break; - case 9: - if (--gWeatherPtr->unknown_6E6 != 0) - break; - sub_807D5BC(3); - gWeatherPtr->unknown_6EA = 1; - if (--gWeatherPtr->unknown_6EC != 0) - { - gWeatherPtr->unknown_6E6 = (Random() % 16) + 60; - gWeatherPtr->initStep = 10; - } - else if (gWeatherPtr->unknown_6EB == 0) - { - gWeatherPtr->initStep = 4; - } - else - { - gWeatherPtr->initStep = 11; - } - break; - case 10: - if (--gWeatherPtr->unknown_6E6 != 0) - break; - gWeatherPtr->initStep = 8; - break; - case 11: - gWeatherPtr->unknown_6E6 = (Random() % 16) + 60; - gWeatherPtr->initStep++; - break; - case 12: - if (--gWeatherPtr->unknown_6E6 != 0) - break; - SetThunderCounter(100); - sub_807D5BC(19); - // Why use "% 16" everywhere else and "& 0xF" here. So dumb. - gWeatherPtr->unknown_6E6 = (Random() & 0xF) + 30; - gWeatherPtr->initStep++; - break; - case 13: - if (--gWeatherPtr->unknown_6E6 != 0) - break; - sub_807D5F0(19, 3, 5); - gWeatherPtr->initStep++; - break; - case 14: - if (gWeatherPtr->unknown_6C6 != 3) - break; - gWeatherPtr->unknown_6EA = 1; - gWeatherPtr->initStep = 4; - break; - } -} - -bool8 Rain_Finish(void) -{ - switch (gWeatherPtr->unknown_6CE) - { - case 0: - gWeatherPtr->unknown_6EA = 0; - gWeatherPtr->unknown_6CE++; - // fall through - case 1: - Rain_Main(); - if (gWeatherPtr->unknown_6EA != 0) - { - if (gWeatherPtr->nextWeather == WEATHER_RAIN_LIGHT - || gWeatherPtr->nextWeather == WEATHER_RAIN_MED - || gWeatherPtr->nextWeather == WEATHER_RAIN_HEAVY) - return FALSE; - gWeatherPtr->unknown_6D9 = 0; - gWeatherPtr->unknown_6CE++; - } - break; - case 2: - if (sub_807E8E8()) - break; - sub_807E974(); - gWeatherPtr->unknown_6ED = 0; - gWeatherPtr->unknown_6CE++; - return FALSE; - default: - return FALSE; - } - return TRUE; -} - -void SetThunderCounter(u16 max) -{ - if (gWeatherPtr->unknown_6ED == 0) - { - gWeatherPtr->thunderCounter = Random() % max; - gWeatherPtr->unknown_6ED = 1; - } -} - -void UpdateThunderSound(void) -{ - if (gWeatherPtr->unknown_6ED == 1) - { - if (gWeatherPtr->thunderCounter == 0) - { - if (IsSEPlaying()) - return; - if (Random() & 1) - PlaySE(SE_T_KAMI); - else - PlaySE(SE_T_KAMI2); - gWeatherPtr->unknown_6ED = 0; - } - else - { - gWeatherPtr->thunderCounter--; - } - } -} - -//------------------------------------------------------------------------------ -// Fog 2 -//------------------------------------------------------------------------------ - -void Fog2_Main(void); -static void CreateFog2Sprites(void); -static void DestroyFog2Sprites(void); - -void Fog2_InitVars(void) -{ - gWeatherPtr->initStep = 0; - gWeatherPtr->weatherGfxLoaded = FALSE; - gWeatherPtr->unknown_6C1 = 0; - gWeatherPtr->unknown_6C2 = 20; - if (gWeatherPtr->unknown_6FB == 0) - { - gWeatherPtr->unknown_6F0 = 0; - gWeatherPtr->unknown_6F2 = 0; - gWeatherPtr->fog2ScrollPosX = 0; - Weather_SetBlendCoeffs(0, 16); - } -} - -void Fog2_InitAll(void) -{ - Fog2_InitVars(); - while (gWeatherPtr->weatherGfxLoaded == FALSE) - Fog2_Main(); -} - -void Fog2_Main(void) -{ - gWeatherPtr->fog2ScrollPosX = (gSpriteCoordOffsetX - gWeatherPtr->unknown_6F2) & 0xFF; - if (++gWeatherPtr->unknown_6F0 > 3) - { - gWeatherPtr->unknown_6F0 = 0; - gWeatherPtr->unknown_6F2++; - } - switch (gWeatherPtr->initStep) - { - case 0: - CreateFog2Sprites(); - if (gWeatherPtr->currWeather == WEATHER_FOG_2) - Weather_SetTargetBlendCoeffs(12, 8, 3); - else - Weather_SetTargetBlendCoeffs(4, 16, 0); - gWeatherPtr->initStep++; - break; - case 1: - if (Weather_UpdateBlend()) - { - gWeatherPtr->weatherGfxLoaded = TRUE; - gWeatherPtr->initStep++; - } - break; - } -} - -bool8 Fog2_Finish(void) -{ - gWeatherPtr->fog2ScrollPosX = (gSpriteCoordOffsetX - gWeatherPtr->unknown_6F2) & 0xFF; - if (++gWeatherPtr->unknown_6F0 > 3) - { - gWeatherPtr->unknown_6F0 = 0; - gWeatherPtr->unknown_6F2++; - } - switch (gWeatherPtr->unknown_6CE) - { - case 0: - Weather_SetTargetBlendCoeffs(0, 16, 3); - gWeatherPtr->unknown_6CE++; - break; - case 1: - if (!Weather_UpdateBlend()) - break; - gWeatherPtr->unknown_6CE++; - break; - case 2: - DestroyFog2Sprites(); - gWeatherPtr->unknown_6CE++; - break; - default: - return FALSE; - } - return TRUE; -} - -#define sprColumn data[0] - -static void Fog2SpriteCallback(struct Sprite *sprite) -{ - sprite->pos2.y = (u8)gSpriteCoordOffsetY; - sprite->pos1.x = gWeatherPtr->fog2ScrollPosX + 32 + sprite->sprColumn * 64; - if (sprite->pos1.x > 0x10F) - { - sprite->pos1.x = 480 + gWeatherPtr->fog2ScrollPosX - (4 - sprite->sprColumn) * 64; - sprite->pos1.x &= 0x1FF; - } -} - -static void CreateFog2Sprites(void) -{ - u16 i; - - if (gWeatherPtr->unknown_6FB == 0) - { - struct SpriteSheet fog2SpriteSheet = {gWeatherFog2Tiles, sizeof(gWeatherFog2Tiles), 0x1201}; - - LoadSpriteSheet(&fog2SpriteSheet); - for (i = 0; i < 20; i++) - { - u8 spriteId = CreateSpriteAtEnd(&sFog2SpriteTemplate, 0, 0, 0xFF); - - if (spriteId != MAX_SPRITES) - { - struct Sprite *sprite = &gSprites[spriteId]; - - sprite->sprColumn = i % 5; - sprite->pos1.x = (i % 5) * 64 + 32; - sprite->pos1.y = (i / 5) * 64 + 32; - ((struct Weather2 *)gWeatherPtr)->fogSprites[i] = sprite; - } - else - { - ((struct Weather2 *)gWeatherPtr)->fogSprites[i] = NULL; - } - } - gWeatherPtr->unknown_6FB = 1; - } -} - -#undef sprColumn - -static void DestroyFog2Sprites(void) -{ - u16 i; - - if (gWeatherPtr->unknown_6FB != 0) - { - for (i = 0; i < 20; i++) - { - if (((struct Weather2 *)gWeatherPtr)->fogSprites[i] != NULL) - DestroySprite(((struct Weather2 *)gWeatherPtr)->fogSprites[i]); - } - FreeSpriteTilesByTag(0x1201); - gWeatherPtr->unknown_6FB = 0; - } -} - -//------------------------------------------------------------------------------ -// Fog 1 -//------------------------------------------------------------------------------ - -void Fog1_InitVars(void) -{ - gWeatherPtr->initStep = 0; - gWeatherPtr->weatherGfxLoaded = FALSE; - gWeatherPtr->unknown_6C1 = 0; - gWeatherPtr->unknown_6C2 = 20; - gWeatherPtr->unknown_6FE = 20; - if (gWeatherPtr->unknown_700 == 0) - { - Weather_SetBlendCoeffs(0, 16); - REG_BLDALPHA = BLDALPHA_BLEND(64, 63); // Those aren't even valid coefficients! - } -} - -void sub_807F888(void); - -void sub_807F858(void) -{ - Fog1_InitVars(); - while (gWeatherPtr->weatherGfxLoaded == FALSE) - sub_807F888(); -} - -void sub_807F99C(void); -void sub_807F9AC(void); - -void sub_807F888(void) -{ - gWeatherPtr->unknown_6FC = gSpriteCoordOffsetX & 0x1FF; - while (gWeatherPtr->unknown_6FC > 0xEF) - gWeatherPtr->unknown_6FC -= 0xF0; - switch (gWeatherPtr->initStep) - { - case 0: - sub_807F99C(); - gWeatherPtr->initStep++; - break; - case 1: - if (gWeatherPtr->unknown_700 == 0) - sub_807F9AC(); - Weather_SetTargetBlendCoeffs(16, 0, 1); - gWeatherPtr->initStep++; - break; - case 2: - if (!Weather_UpdateBlend()) - break; - gWeatherPtr->weatherGfxLoaded = TRUE; - gWeatherPtr->initStep++; - break; - default: - Weather_UpdateBlend(); - break; - } -} - -void sub_807FA54(void); - -bool8 sub_807F934(void) -{ - switch (gWeatherPtr->unknown_6CE) - { - case 0: - Weather_SetTargetBlendCoeffs(0, 16, 1); - gWeatherPtr->unknown_6CE++; - break; - case 1: - if (!Weather_UpdateBlend()) - break; - sub_807FA54(); - gWeatherPtr->unknown_6CE++; - break; - case 2: - REG_BLDALPHA = 0; - gWeatherPtr->unknown_6CE++; - return FALSE; - default: - return FALSE; - } - return TRUE; -} - -const struct SpriteSheet gWeatherAshSpriteSheet = {gWeatherAshTiles, sizeof(gWeatherAshTiles), 0x1202}; - -void sub_807F99C(void) -{ - LoadSpriteSheet(&gWeatherAshSpriteSheet); -} - -const struct OamData gOamData_839ABB8 = -{ - .y = 0, - .affineMode = 0, - .objMode = 1, - .mosaic = 0, - .bpp = 0, - .shape = 0, - .x = 0, - .matrixNum = 0, - .size = 3, - .tileNum = 0, - .priority = 1, - .paletteNum = 15, - .affineParam = 0, -}; - -const union AnimCmd gSpriteAnim_839ABC0[] = -{ - ANIMCMD_FRAME(0, 60), - ANIMCMD_FRAME(64, 60), - ANIMCMD_JUMP(0), -}; - -const union AnimCmd *const gSpriteAnimTable_839ABCC[] = -{ - gSpriteAnim_839ABC0, -}; - -void sub_807FAA8(struct Sprite *); -const struct SpriteTemplate gSpriteTemplate_839ABD0 = -{ - .tileTag = 4610, - .paletteTag = 4608, - .oam = &gOamData_839ABB8, - .anims = gSpriteAnimTable_839ABCC, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_807FAA8, -}; - -void sub_807F9AC(void) -{ - u8 i; - - if (gWeatherPtr->unknown_700 == 0) - { - for (i = 0; i < 20; i++) - { - u8 spriteId = CreateSpriteAtEnd(&gSpriteTemplate_839ABD0, 0, 0, 0x4E); - - if (spriteId != MAX_SPRITES) - { - struct Sprite *sprite = &gSprites[spriteId]; - - sprite->data[1] = 0; - sprite->data[2] = (u8)(i % 5); - sprite->data[3] = (u8)(i / 5); - sprite->data[0] = sprite->data[3] * 64 + 32; - ((struct Weather2 *)gWeatherPtr)->fog1Sprites[i] = sprite; - } - else - { - ((struct Weather2 *)gWeatherPtr)->fog1Sprites[i] = NULL; - } - } - gWeatherPtr->unknown_700 = 1; - } -} - -void sub_807FA54(void) -{ - u16 i; - - if (gWeatherPtr->unknown_700 != 0) - { - for (i = 0; i < 20; i++) - { - if (((struct Weather2 *)gWeatherPtr)->fog1Sprites[i] != NULL) - DestroySprite(((struct Weather2 *)gWeatherPtr)->fog1Sprites[i]); - } - FreeSpriteTilesByTag(0x1202); - gWeatherPtr->unknown_700 = 0; - } -} - -void sub_807FAA8(struct Sprite *sprite) -{ - sprite->data[1]++; - if (sprite->data[1] > 5) - { - sprite->data[1] = 0; - sprite->data[0]++; - } - sprite->pos1.y = gSpriteCoordOffsetY + sprite->data[0]; - sprite->pos1.x = gWeatherPtr->unknown_6FC + 32 + sprite->data[2] * 64; - if (sprite->pos1.x > 271) - { - sprite->pos1.x = gWeatherPtr->unknown_6FC + 0x1E0 - (4 - sprite->data[2]) * 64; - sprite->pos1.x &= 0x1FF; - } -} - -void sub_807FB24(void) -{ - gWeatherPtr->initStep = 0; - gWeatherPtr->weatherGfxLoaded = 0; - gWeatherPtr->unknown_6C1 = 0; - gWeatherPtr->unknown_6C2 = 20; - gWeatherPtr->unknown_6F0 = 0; - gWeatherPtr->unknown_6F2 = 1; - if (gWeatherPtr->unknown_724 == 0) - { - gWeatherPtr->unknown_71C = 0; - gWeatherPtr->unknown_71E = 0; - gWeatherPtr->unknown_720 = 0; - gWeatherPtr->unknown_722 = 0; - gWeatherPtr->unknown_718 = 0; - gWeatherPtr->unknown_71A = 0; - Weather_SetBlendCoeffs(0, 16); - } -} - -void sub_807FBD8(void); - -void sub_807FBA8(void) -{ - sub_807FB24(); - while (gWeatherPtr->weatherGfxLoaded == FALSE) - sub_807FBD8(); -} - -void sub_807FC9C(void); -void sub_807FD30(void); - -void sub_807FBD8(void) -{ - sub_807FC9C(); - switch (gWeatherPtr->initStep) - { - case 0: - sub_807FD30(); - gWeatherPtr->initStep++; - break; - case 1: - Weather_SetTargetBlendCoeffs(12, 8, 8); - gWeatherPtr->initStep++; - break; - case 2: - if (!Weather_UpdateBlend()) - break; - gWeatherPtr->weatherGfxLoaded = TRUE; - gWeatherPtr->initStep++; - break; - } -} - -void sub_807FDE8(void); - -bool8 sub_807FC3C(void) -{ - sub_807FC9C(); - switch (gWeatherPtr->unknown_6CE) - { - case 0: - Weather_SetTargetBlendCoeffs(0, 16, 1); - gWeatherPtr->unknown_6CE++; - break; - case 1: - if (!Weather_UpdateBlend()) - break; - gWeatherPtr->unknown_6CE++; - break; - case 2: - sub_807FDE8(); - gWeatherPtr->unknown_6CE++; - break; - default: - return FALSE; - } - return TRUE; -} - -void sub_807FC9C(void) -{ - if (++gWeatherPtr->unknown_71C > 2) - { - gWeatherPtr->unknown_720++; - gWeatherPtr->unknown_71C = 0; - } - - if (++gWeatherPtr->unknown_71E > 4) - { - gWeatherPtr->unknown_722++; - gWeatherPtr->unknown_71E = 0; - } - - gWeatherPtr->unknown_718 = (gSpriteCoordOffsetX - gWeatherPtr->unknown_720) & 0xFF; - gWeatherPtr->unknown_71A = gSpriteCoordOffsetY + gWeatherPtr->unknown_722; -} - -extern const struct SpriteTemplate gSpriteTemplate_839AC04; // defined below - -void sub_807FD30(void) -{ - u16 i; - - if (gWeatherPtr->unknown_724 == 0) - { - struct SpriteSheet fog1SpriteSheet = {gWeatherFog1Tiles, sizeof(gWeatherFog1Tiles), 0x1203}; - - LoadSpriteSheet(&fog1SpriteSheet); - for (i = 0; i < 20; i++) - { - u8 spriteId = CreateSpriteAtEnd(&gSpriteTemplate_839AC04, 0, (i / 5) * 64, 0xFF); - - if (spriteId != MAX_SPRITES) - { - struct Sprite *sprite = &gSprites[spriteId]; - - sprite->data[0] = i % 5; - sprite->data[1] = i / 5; - ((struct Weather2 *)gWeatherPtr)->unknown_140[i] = sprite; - } - else - { - ((struct Weather2 *)gWeatherPtr)->unknown_140[i] = NULL; - } - } - gWeatherPtr->unknown_724 = 1; - } -} - -const struct OamData gOamData_839ABF0 = -{ - .y = 0, - .affineMode = 0, - .objMode = 1, - .mosaic = 0, - .bpp = 0, - .shape = 0, - .x = 0, - .matrixNum = 0, - .size = 3, - .tileNum = 0, - .priority = 2, - .paletteNum = 0, - .affineParam = 0, -}; - -const union AnimCmd gSpriteAnim_839ABF8[] = -{ - ANIMCMD_FRAME(0, 16), - ANIMCMD_END, -}; - -const union AnimCmd *const gSpriteAnimTable_839AC00[] = -{ - gSpriteAnim_839ABF8, -}; - -void sub_807FE3C(struct Sprite *); -const struct SpriteTemplate gSpriteTemplate_839AC04 = -{ - .tileTag = 4611, - .paletteTag = 4608, - .oam = &gOamData_839ABF0, - .anims = gSpriteAnimTable_839AC00, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_807FE3C, -}; - -void sub_807FDE8(void) -{ - u16 i; - - if (gWeatherPtr->unknown_724 != 0) - { - for (i = 0; i < 20; i++) - { - if (((struct Weather2 *)gWeatherPtr)->unknown_140[i] != NULL) - DestroySprite(((struct Weather2 *)gWeatherPtr)->unknown_140[i]); - } - FreeSpriteTilesByTag(0x1203); - gWeatherPtr->unknown_724 = 0; - } -} - -void sub_807FE3C(struct Sprite *sprite) -{ - sprite->pos2.y = gWeatherPtr->unknown_71A; - sprite->pos1.x = gWeatherPtr->unknown_718 + 32 + sprite->data[0] * 64; - if (sprite->pos1.x > 271) - { - sprite->pos1.x = gWeatherPtr->unknown_718 + 0x1E0 - (4 - sprite->data[0]) * 64; - sprite->pos1.x &= 0x1FF; - } -} - -void sub_807FE9C(void) -{ - gWeatherPtr->initStep = 0; - gWeatherPtr->weatherGfxLoaded = 0; - gWeatherPtr->unknown_6C1 = 0; - gWeatherPtr->unknown_6C2 = 20; - if (gWeatherPtr->unknown_716 == 0) - { - gWeatherPtr->unknown_704 = gWeatherPtr->unknown_708 = 0; - gWeatherPtr->unknown_712 = 8; - gWeatherPtr->unknown_714 = 0; - // Dead code. How does the compiler not optimize this out? - if (gWeatherPtr->unknown_712 > 0x5F) - gWeatherPtr->unknown_712 = 0x80 - gWeatherPtr->unknown_712; - Weather_SetBlendCoeffs(0, 16); - } -} - -void sub_807FF4C(void); - -void sub_807FF1C(void) -{ - sub_807FE9C(); - while (gWeatherPtr->weatherGfxLoaded == FALSE) - sub_807FF4C(); -} - -void sub_808002C(void); -void sub_8080064(void); -void sub_8080178(void); -void sub_8080238(void); - -void sub_807FF4C(void) -{ - sub_8080064(); - sub_808002C(); - if (gWeatherPtr->unknown_712 > 0x5F) - gWeatherPtr->unknown_712 = 32; - switch (gWeatherPtr->initStep) - { - case 0: - sub_8080178(); - sub_8080238(); - gWeatherPtr->initStep++; - break; - case 1: - Weather_SetTargetBlendCoeffs(16, 0, 0); - gWeatherPtr->initStep++; - break; - case 2: - if (!Weather_UpdateBlend()) - break; - gWeatherPtr->weatherGfxLoaded = TRUE; - gWeatherPtr->initStep++; - break; - } -} - -void sub_80800E4(void); - -bool8 sub_807FFC8(void) -{ - sub_8080064(); - sub_808002C(); - switch (gWeatherPtr->unknown_6CE) - { - case 0: - Weather_SetTargetBlendCoeffs(0, 16, 0); - gWeatherPtr->unknown_6CE++; - break; - case 1: - if (!Weather_UpdateBlend()) - break; - gWeatherPtr->unknown_6CE++; - break; - case 2: - sub_80800E4(); - gWeatherPtr->unknown_6CE++; - break; - default: - return FALSE; - } - return TRUE; -} - -void sub_808002C(void) -{ - if (gWeatherPtr->unknown_714++ > 4) - { - gWeatherPtr->unknown_712++; - gWeatherPtr->unknown_714 = 0; - } -} - -void sub_8080064(void) -{ - gWeatherPtr->unknown_704 -= gSineTable[gWeatherPtr->unknown_712] * 4; - gWeatherPtr->unknown_708 -= gSineTable[gWeatherPtr->unknown_712]; - gWeatherPtr->unknown_70E = (gSpriteCoordOffsetX + (gWeatherPtr->unknown_704 >> 8)) & 0xFF; - gWeatherPtr->unknown_710 = gSpriteCoordOffsetY + (gWeatherPtr->unknown_708 >> 8); -} - -void sub_80800E4(void) -{ - u16 i; - - if (gWeatherPtr->unknown_716 != 0) - { - for (i = 0; i < 20; i++) - { - if (((struct Weather2 *)gWeatherPtr)->unknown_190[i] != NULL) - DestroySprite(((struct Weather2 *)gWeatherPtr)->unknown_190[i]); - } - gWeatherPtr->unknown_716 = 0; - FreeSpriteTilesByTag(0x1204); - } - - if (gWeatherPtr->unknown_717 != 0) - { - for (i = 0; i < 5; i++) - { - if (((struct Weather2 *)gWeatherPtr)->unknown_1E0[i] != NULL) - DestroySprite(((struct Weather2 *)gWeatherPtr)->unknown_1E0[i]); - } - gWeatherPtr->unknown_717 = 0; - } -} - -const struct OamData gOamData_839AC1C = -{ - .y = 0, - .affineMode = 0, - .objMode = 1, - .mosaic = 0, - .bpp = 0, - .shape = 0, - .x = 0, - .matrixNum = 0, - .size = 3, - .tileNum = 0, - .priority = 1, - .paletteNum = 0, - .affineParam = 0, -}; - -const union AnimCmd gSpriteAnim_839AC24[] = -{ - ANIMCMD_FRAME(0, 3), - ANIMCMD_END, -}; - -const union AnimCmd gSpriteAnim_839AC2C[] = -{ - ANIMCMD_FRAME(64, 3), - ANIMCMD_END, -}; - -const union AnimCmd *const gSpriteAnimTable_839AC34[] = -{ - gSpriteAnim_839AC24, - gSpriteAnim_839AC2C, -}; - -void sub_8080338(struct Sprite *); -const struct SpriteTemplate gSpriteTemplate_839AC3C = -{ - .tileTag = 4612, - .paletteTag = 4609, - .oam = &gOamData_839AC1C, - .anims = gSpriteAnimTable_839AC34, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_8080338, -}; - -const struct SpriteSheet gWeatherSandstormSpriteSheet = {gWeatherSandstormTiles, sizeof(gWeatherSandstormTiles), 0x1204}; - -void sub_8080178(void) -{ - u16 i; - - if (gWeatherPtr->unknown_716 == 0) - { - LoadSpriteSheet(&gWeatherSandstormSpriteSheet); - sub_807D8C0(gUnknown_08397128); - for (i = 0; i < 20; i++) - { - u8 spriteId = CreateSpriteAtEnd(&gSpriteTemplate_839AC3C, 0, (i / 5) * 64, 1); - - if (spriteId != MAX_SPRITES) - { - ((struct Weather2 *)gWeatherPtr)->unknown_190[i] = &gSprites[spriteId]; - ((struct Weather2 *)gWeatherPtr)->unknown_190[i]->data[0] = i % 5; - ((struct Weather2 *)gWeatherPtr)->unknown_190[i]->data[1] = i / 5; - } - else - { - ((struct Weather2 *)gWeatherPtr)->unknown_190[i] = NULL; - } - } - gWeatherPtr->unknown_716 = 1; - } -} - -const u16 gUnknown_0839AC5C[] = {0, 120, 80, 160, 40, 0}; - -void sub_8080398(struct Sprite *); - -void sub_8080238(void) -{ - u16 i; - - if (gWeatherPtr->unknown_717 == 0) - { - for (i = 0; i < 5; i++) - { - u8 spriteId = CreateSpriteAtEnd(&gSpriteTemplate_839AC3C, i * 48 + 0x18, 0xD0, 1); - - if (spriteId != MAX_SPRITES) - { - ((struct Weather2 *)gWeatherPtr)->unknown_1E0[i] = &gSprites[spriteId]; - ((struct Weather2 *)gWeatherPtr)->unknown_1E0[i]->oam.size = 2; - ((struct Weather2 *)gWeatherPtr)->unknown_1E0[i]->data[1] = i * 51; - ((struct Weather2 *)gWeatherPtr)->unknown_1E0[i]->data[0] = 8; - ((struct Weather2 *)gWeatherPtr)->unknown_1E0[i]->data[2] = 0; - ((struct Weather2 *)gWeatherPtr)->unknown_1E0[i]->data[4] = 0x6730; - ((struct Weather2 *)gWeatherPtr)->unknown_1E0[i]->data[3] = gUnknown_0839AC5C[i]; - StartSpriteAnim(((struct Weather2 *)gWeatherPtr)->unknown_1E0[i], 1); - CalcCenterToCornerVec(((struct Weather2 *)gWeatherPtr)->unknown_1E0[i], 0, 2, 0); - ((struct Weather2 *)gWeatherPtr)->unknown_1E0[i]->callback = sub_8080398; - } - else - { - ((struct Weather2 *)gWeatherPtr)->unknown_1E0[i] = NULL; - } - gWeatherPtr->unknown_717 = 1; - } - } -} - -void sub_8080338(struct Sprite *sprite) -{ - sprite->pos2.y = gWeatherPtr->unknown_710; - sprite->pos1.x = gWeatherPtr->unknown_70E + 32 + sprite->data[0] * 64; - if (sprite->pos1.x > 271) - { - sprite->pos1.x = gWeatherPtr->unknown_70E + 0x1E0 - (4 - sprite->data[0]) * 64; - sprite->pos1.x &= 0x1FF; - } -} - -void sub_80803BC(struct Sprite *); - -void sub_8080398(struct Sprite *sprite) -{ - if (--sprite->data[3] == -1) - sprite->callback = sub_80803BC; -} - -void sub_80803BC(struct Sprite *sprite) -{ - u32 x; - u32 y; - - if (--sprite->pos1.y < -48) - { - sprite->pos1.y = 208; - sprite->data[0] = 4; - } - x = sprite->data[0] * gSineTable[sprite->data[1]]; - y = sprite->data[0] * gSineTable[sprite->data[1] + 64]; - sprite->pos2.x = x >> 8; - sprite->pos2.y = y >> 8; - sprite->data[1] = (sprite->data[1] + 10) & 0xFF; - if (++sprite->data[2] > 8) - { - sprite->data[2] = 0; - sprite->data[0]++; - } -} - -void sub_8080430(void) -{ - gWeatherPtr->initStep = 0; - gWeatherPtr->unknown_6C1 = 3; - gWeatherPtr->unknown_6C2 = 20; -} - -void sub_8080460(void) -{ - sub_8080430(); -} - -void nullsub_56(void) -{ -} - -bool8 sub_8080470(void) -{ - return FALSE; -} - -const u8 gUnknown_0839AC68[] = {40, 90, 60, 90, 2, 60, 40, 30}; - -const struct SpriteSheet gWeatherBubbleSpriteSheet = {gWeatherBubbleTiles, sizeof(gWeatherBubbleTiles), 0x1205}; - -void sub_8080474(void) -{ - Fog2_InitVars(); - if (gWeatherPtr->unknown_72E == 0) - { - LoadSpriteSheet(&gWeatherBubbleSpriteSheet); - gWeatherPtr->unknown_728 = 0; - gWeatherPtr->unknown_726 = gUnknown_0839AC68[0]; - gWeatherPtr->unknown_72A = 0; - gWeatherPtr->unknown_72C = 0; - } -} - -void sub_80804F8(void); - -void sub_80804C8(void) -{ - sub_8080474(); - while (gWeatherPtr->weatherGfxLoaded == FALSE) - sub_80804F8(); -} - -void sub_8080588(u16); - -void sub_80804F8(void) -{ - Fog2_Main(); - if (++gWeatherPtr->unknown_726 > gUnknown_0839AC68[gWeatherPtr->unknown_728]) - { - gWeatherPtr->unknown_726 = 0; - if (++gWeatherPtr->unknown_728 > 7) - gWeatherPtr->unknown_728 = 0; - sub_8080588(gWeatherPtr->unknown_72A); - if (++gWeatherPtr->unknown_72A > 12) - gWeatherPtr->unknown_72A = 0; - } -} - -void sub_8080610(void); - -bool8 sub_808056C(void) -{ - if (!Fog2_Finish()) - { - sub_8080610(); - return FALSE; - } - return TRUE; -} - -const s16 gUnknown_0839AC78[][2] = -{ - {120, 160}, - {376, 160}, - { 40, 140}, - {296, 140}, - {180, 130}, - {436, 130}, - { 60, 160}, - {436, 160}, - {220, 180}, - {476, 180}, - { 10, 90}, - {266, 90}, - {256, 160}, -}; - -const union AnimCmd gSpriteAnim_839ACAC[] = -{ - ANIMCMD_FRAME(0, 16), - ANIMCMD_FRAME(1, 16), - ANIMCMD_END, -}; - -const union AnimCmd *const gSpriteAnimTable_839ACB8[] = -{ - gSpriteAnim_839ACAC, -}; - -extern const struct OamData gOamData_837DF24; - -void unc_0807DAB4(struct Sprite *); -const struct SpriteTemplate gSpriteTemplate_839ACBC = -{ - .tileTag = 4613, - .paletteTag = 4608, - .oam = &gOamData_837DF24, - .anims = gSpriteAnimTable_839ACB8, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = unc_0807DAB4, -}; - -void sub_8080588(u16 a) -{ - s16 x = gUnknown_0839AC78[a][0]; - s16 y = gUnknown_0839AC78[a][1] - gSpriteCoordOffsetY; - u8 spriteId = CreateSpriteAtEnd( - &gSpriteTemplate_839ACBC, - x, - y, - 0); - - if (spriteId != MAX_SPRITES) - { - gSprites[spriteId].oam.priority = 1; - gSprites[spriteId].coordOffsetEnabled = TRUE; - gSprites[spriteId].data[0] = 0; - gSprites[spriteId].data[1] = 0; - gSprites[spriteId].data[2] = 0; - gWeatherPtr->unknown_72C++; - } -} - -void sub_8080610(void) -{ - u16 i; - - for (i = 0; i < 64; i++) - { - if (gSprites[i].template == &gSpriteTemplate_839ACBC) - DestroySprite(&gSprites[i]); - } - FreeSpriteTilesByTag(0x1205); -} - -void unc_0807DAB4(struct Sprite *sprite) -{ - ++sprite->data[0]; - if (++sprite->data[0] > 8) // double increment - { - sprite->data[0] = 0; - if (sprite->data[1] == 0) - { - if (++sprite->pos2.x > 4) - sprite->data[1] = 1; - } - else - { - if (--sprite->pos2.x <= 0) - sprite->data[1] = 0; - } - } - sprite->pos1.y -= 3; - if (++sprite->data[2] > 0x77) - DestroySprite(sprite); -} - -u8 TranslateWeatherNum(u8); -void UpdateRainCounter(u8, u8); - -void SetSav1Weather(u32 weather) -{ - u8 oldWeather = gSaveBlock1.weather; - - gSaveBlock1.weather = TranslateWeatherNum(weather); - UpdateRainCounter(gSaveBlock1.weather, oldWeather); -} - -u8 GetSav1Weather(void) -{ - return gSaveBlock1.weather; -} - -void SetSav1WeatherFromCurrMapHeader(void) -{ - u8 oldWeather = gSaveBlock1.weather; - - gSaveBlock1.weather = TranslateWeatherNum(gMapHeader.weather); - UpdateRainCounter(gSaveBlock1.weather, oldWeather); -} - -void SetWeather(u32 weather) -{ - SetSav1Weather(weather); - DoWeatherEffect(GetSav1Weather()); -} - -void SetWeather_Unused(u32 weather) -{ - SetSav1Weather(weather); - sub_807C988(GetSav1Weather()); -} - -void DoCurrentWeather(void) -{ - DoWeatherEffect(GetSav1Weather()); -} - -void sub_8080750(void) -{ - sub_807C988(GetSav1Weather()); -} - -static const u8 sWeatherCycle1[] = {2, 3, 5, 3}; -static const u8 sWeatherCycle2[] = {2, 2, 3, 2}; - -u8 TranslateWeatherNum(u8 weather) -{ - switch (weather) - { - case 0: return 0; - case 1: return 1; - case 2: return 2; - case 3: return 3; - case 4: return 4; - case 5: return 5; - case 6: return 6; - case 7: return 7; - case 8: return 8; - case 9: return 9; - case 10: return 10; - case 11: return 11; - case 12: return 12; - case 13: return 13; - case 14: return 14; - case 20: return sWeatherCycle1[gSaveBlock1.filler_2F]; - case 21: return sWeatherCycle2[gSaveBlock1.filler_2F]; - default: return 0; - } -} - -void UpdateWeatherPerDay(u16 increment) -{ - u16 weatherStage = gSaveBlock1.filler_2F + increment; - weatherStage %= 4; - gSaveBlock1.filler_2F = weatherStage; -} - -void UpdateRainCounter(u8 newWeather, u8 oldWeather) -{ - if (newWeather != oldWeather - && (newWeather == WEATHER_RAIN_LIGHT || newWeather == WEATHER_RAIN_MED)) - IncrementGameStat(0x28); -} diff --git a/src/field/field_weather_effects.c b/src/field/field_weather_effects.c new file mode 100644 index 000000000..1ae2d6e56 --- /dev/null +++ b/src/field/field_weather_effects.c @@ -0,0 +1,2359 @@ +#include "global.h" +#include "field_map_obj.h" +#include "field_weather.h" +#include "overworld.h" +#include "rng.h" +#include "script.h" +#include "songs.h" +#include "sound.h" +#include "sprite.h" +#include "task.h" +#include "trig.h" + +extern struct Weather *const gWeatherPtr; + +const u16 gUnknown_08397108[] = INCBIN_U16("graphics/weather/1.gbapal"); +const u16 gUnknown_08397128[] = INCBIN_U16("graphics/weather/2.gbapal"); +const u8 gWeatherFog1Tiles[] = INCBIN_U8("graphics/weather/fog1.4bpp"); +const u8 gWeatherFog2Tiles[] = INCBIN_U8("graphics/weather/fog2.4bpp"); +const u8 gWeatherCloudTiles[] = INCBIN_U8("graphics/weather/cloud.4bpp"); +const u8 gWeatherSnow1Tiles[] = INCBIN_U8("graphics/weather/snow0.4bpp"); +const u8 gWeatherSnow2Tiles[] = INCBIN_U8("graphics/weather/snow1.4bpp"); +const u8 gWeatherBubbleTiles[] = INCBIN_U8("graphics/weather/bubble.4bpp"); +const u8 gWeatherAshTiles[] = INCBIN_U8("graphics/weather/ash.4bpp"); +const u8 gWeatherRainTiles[] = INCBIN_U8("graphics/weather/rain.4bpp"); +const u8 gWeatherSandstormTiles[] = INCBIN_U8("graphics/weather/sandstorm.4bpp"); + +static const struct Coords16 gUnknown_0839A9C8[] = +{ + { 0, 66}, + { 5, 73}, + {10, 78}, +}; + +static const struct SpriteSheet sCloudSpriteSheet = {gWeatherCloudTiles, 0x800, 0x1200}; + +static const struct OamData gOamData_839A9DC = +{ + .y = 0, + .affineMode = 0, + .objMode = 1, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 3, + .paletteNum = 0, + .affineParam = 0, +}; + +static const union AnimCmd gSpriteAnim_839A9E4[] = +{ + ANIMCMD_FRAME(0, 16), + ANIMCMD_END, +}; + +static const union AnimCmd *const gSpriteAnimTable_839A9EC[] = +{ + gSpriteAnim_839A9E4, +}; + +void sub_807E0F4(struct Sprite *); +static const struct SpriteTemplate sCloudSpriteTemplate = +{ + .tileTag = 4608, + .paletteTag = 4609, + .oam = &gOamData_839A9DC, + .anims = gSpriteAnimTable_839A9EC, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_807E0F4, +}; + +extern void sub_807D5BC(s8 a); +extern void sub_807D8C0(const u16 *palette); +extern void sub_807D9A8(void); +extern bool8 sub_807D9C8(void); +extern void sub_807DA14(void); +extern void sub_807DA4C(void); +extern void Weather_SetTargetBlendCoeffs(u8 a, u8 b, int c); +extern bool8 Weather_UpdateBlend(void); +extern void SetRainStrengthFromSoundEffect(u16 sndEff); +extern void sub_807D5F0(u8 a, u8 b, u8 c); + +//------------------------------------------------------------------------------ +// Clouds +//------------------------------------------------------------------------------ + +void Clouds_InitVars(void) +{ + gWeatherPtr->unknown_6C1 = 0; + gWeatherPtr->unknown_6C2 = 20; + gWeatherPtr->weatherGfxLoaded = FALSE; + gWeatherPtr->initStep = 0; + if (gWeatherPtr->cloudsActive == FALSE) + Weather_SetBlendCoeffs(0, 16); +} + +void Clouds_Main(void); + +void Clouds_InitAll(void) +{ + Clouds_InitVars(); + while (gWeatherPtr->weatherGfxLoaded == FALSE) + Clouds_Main(); +} + +void CreateCloudSprites(void); + +void Clouds_Main(void) +{ + switch (gWeatherPtr->initStep) + { + case 0: + CreateCloudSprites(); + gWeatherPtr->initStep++; + break; + case 1: + Weather_SetTargetBlendCoeffs(12, 8, 1); + gWeatherPtr->initStep++; + break; + case 2: + if (Weather_UpdateBlend()) + { + gWeatherPtr->weatherGfxLoaded = TRUE; + gWeatherPtr->initStep++; + } + break; + } +} + +void sub_807E0A0(void); + +bool8 Clouds_Finish(void) +{ + switch (gWeatherPtr->unknown_6CE) + { + case 0: + Weather_SetTargetBlendCoeffs(0, 16, 1); + gWeatherPtr->unknown_6CE++; + return TRUE; + case 1: + if (Weather_UpdateBlend()) + { + sub_807E0A0(); + gWeatherPtr->unknown_6CE++; + } + return TRUE; + } + return FALSE; +} + +void sub_807DF9C(void) +{ + gWeatherPtr->unknown_6C1 = 0; + gWeatherPtr->unknown_6C2 = 20; +} + +void sub_807DFC0(void) +{ + sub_807DF9C(); +} + +void nullsub_55(void) +{ +} + +int sub_807DFD0(void) +{ + return 0; +} + +void CreateCloudSprites(void) +{ + u16 i; + + if (gWeatherPtr->cloudsActive == TRUE) + return; + LoadSpriteSheet(&sCloudSpriteSheet); + sub_807D8C0(gUnknown_08397108); + for (i = 0; i < 3; i++) + { + u8 spriteId = CreateSprite(&sCloudSpriteTemplate, 0, 0, 0xFF); + + if (spriteId != 64) + { + struct Sprite *sprite; + + gWeatherPtr->cloudSprites[i] = &gSprites[spriteId]; + sprite = gWeatherPtr->cloudSprites[i]; + sub_80603CC(gUnknown_0839A9C8[i].x + 7, gUnknown_0839A9C8[i].y + 7, &sprite->pos1.x, &sprite->pos1.y); + sprite->coordOffsetEnabled = TRUE; + } + else + { + gWeatherPtr->cloudSprites[i] = NULL; + } + } + gWeatherPtr->cloudsActive = TRUE; +} + +void sub_807E0A0(void) +{ + u16 i; + + if (gWeatherPtr->cloudsActive == FALSE) + return; + for (i = 0; i < 3; i++) + { + if (gWeatherPtr->cloudSprites[i] != NULL) + DestroySprite(gWeatherPtr->cloudSprites[i]); + } + FreeSpriteTilesByTag(0x1200); + gWeatherPtr->cloudsActive = FALSE; +} + +void sub_807E0F4(struct Sprite *sprite) +{ + sprite->data[0] = (sprite->data[0] + 1) & 1; + if (sprite->data[0] != 0) + sprite->pos1.x--; +} + +void sub_807E110(void) +{ + gWeatherPtr->initStep = 0; + gWeatherPtr->weatherGfxLoaded = FALSE; + gWeatherPtr->unknown_6C1 = 0; + gWeatherPtr->unknown_6C2 = 0; +} + +void sub_807E174(void); + +void sub_807E144(void) +{ + sub_807E110(); + while (gWeatherPtr->weatherGfxLoaded == FALSE) + sub_807E174(); +} + +void sub_807E174(void) +{ + switch (gWeatherPtr->initStep) + { + case 0: + if (gWeatherPtr->unknown_6C6 != 0) + gWeatherPtr->initStep++; + break; + case 1: + sub_807D9A8(); + gWeatherPtr->initStep++; + break; + case 2: + if (sub_807D9C8() == FALSE) + gWeatherPtr->initStep++; + break; + case 3: + sub_807DA14(); + gWeatherPtr->initStep++; + break; + case 4: + sub_807DA4C(); + if (gWeatherPtr->unknown_73C == 6) + { + gWeatherPtr->weatherGfxLoaded = TRUE; + gWeatherPtr->initStep++; + } + break; + default: + sub_807DA4C(); + break; + } +} + +int sub_807E258(void) +{ + return 0; +} + +void task50_0807B6D4(u8); + +void sub_807E25C(void) +{ + CreateTask(task50_0807B6D4, 0x50); +} + +#define tState data[0] +#define tBlendY data[1] +#define tBlendDelay data[2] +#define tWinRange data[3] + +void task50_0807B6D4(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + switch (task->tState) + { + case 0: + task->tBlendY = 0; + task->tBlendDelay = 0; + task->tWinRange = REG_WININ; + REG_WININ = WIN_RANGE(63, 63); + REG_BLDCNT = BLDCNT_TGT1_BG1 | BLDCNT_TGT1_BG2 | BLDCNT_TGT1_BG3 | BLDCNT_TGT1_OBJ + | BLDCNT_EFFECT_LIGHTEN; + REG_BLDY = 0; + task->tState++; + // fall through + case 1: + task->tBlendY += 3; + if (task->tBlendY > 16) + task->tBlendY = 16; + REG_BLDY = task->tBlendY; + if (task->tBlendY >= 16) + task->tState++; + break; + case 2: + task->tBlendDelay++; + if (task->tBlendDelay > 9) + { + task->tBlendDelay = 0; + task->tBlendY--; + if (task->tBlendY <= 0) + { + task->tBlendY = 0; + task->tState++; + } + REG_BLDY = task->tBlendY; + } + break; + case 3: + REG_BLDCNT = 0; + REG_BLDY = 0; + REG_WININ = task->tWinRange; + task->tState++; + break; + case 4: + EnableBothScriptContexts(); + DestroyTask(taskId); + break; + } +} + +#undef tState +#undef tBlendY +#undef tBlendDelay +#undef tWinRange + +//------------------------------------------------------------------------------ +// Light Rain +//------------------------------------------------------------------------------ + +void LightRain_InitVars(void) +{ + gWeatherPtr->initStep = 0; + gWeatherPtr->weatherGfxLoaded = FALSE; + gWeatherPtr->unknown_6D6 = 0; + gWeatherPtr->unknown_6DB = 8; + gWeatherPtr->unknown_6DC = 0; + gWeatherPtr->unknown_6D9 = 10; + gWeatherPtr->unknown_6C1 = 3; + gWeatherPtr->unknown_6C2 = 20; + SetRainStrengthFromSoundEffect(SE_T_KOAME); +} + +void LightRain_Main(void); + +void LightRain_InitAll(void) +{ + LightRain_InitVars(); + while (gWeatherPtr->weatherGfxLoaded == FALSE) + LightRain_Main(); +} + +void LoadRainSpriteSheet(void); +u8 CreateRainSprites(void); +u8 sub_807E8E8(void); + +void LightRain_Main(void) +{ + switch (gWeatherPtr->initStep) + { + case 0: + LoadRainSpriteSheet(); + gWeatherPtr->initStep++; + break; + case 1: + if (CreateRainSprites() == 0) + gWeatherPtr->initStep++; + break; + case 2: + if (sub_807E8E8() == FALSE) + { + gWeatherPtr->weatherGfxLoaded = TRUE; + gWeatherPtr->initStep++; + } + break; + } +} + +void sub_807E974(void); + +bool8 LightRain_Finish(void) +{ + switch (gWeatherPtr->unknown_6CE) + { + case 0: + if (gWeatherPtr->nextWeather == WEATHER_RAIN_LIGHT + || gWeatherPtr->nextWeather == WEATHER_RAIN_MED + || gWeatherPtr->nextWeather == WEATHER_RAIN_HEAVY) + { + gWeatherPtr->unknown_6CE = 0xFF; + return FALSE; + } + else + { + gWeatherPtr->unknown_6D9 = 0; + gWeatherPtr->unknown_6CE++; + } + // fall through + case 1: + if (sub_807E8E8() == FALSE) + { + sub_807E974(); + gWeatherPtr->unknown_6CE++; + return FALSE; + } + return TRUE; + } + return FALSE; +} + +// defined below +extern const s16 gUnknown_0839AABC[][2]; +extern const u16 gUnknown_0839AAC4[][2]; + +void sub_807E4EC(struct Sprite *sprite) +{ + u32 randVal; + u16 r6; + s32 r4; + s32 r0; + + if (sprite->data[1] == 0) + sprite->data[1] = 361; + randVal = sprite->data[1] * 1103515245 + 12345; + sprite->data[1] = ((randVal & 0x7FFF0000) >> 16) % 600; + + r6 = gUnknown_0839AAC4[gWeatherPtr->unknown_6DC][0]; + + r4 = sprite->data[1] % 30; + sprite->data[2] = r4 * 8; // useless assignment + + r0 = sprite->data[1] / 30; + sprite->data[3] = r0 * 8; // useless assignment + + sprite->data[2] = r4; + sprite->data[2] <<= 7; + + sprite->data[3] = r0; + sprite->data[3] <<= 7; + + sprite->data[2] -= gUnknown_0839AABC[gWeatherPtr->unknown_6DC][0] * r6; + sprite->data[3] -= gUnknown_0839AABC[gWeatherPtr->unknown_6DC][1] * r6; + + StartSpriteAnim(sprite, 0); + sprite->data[4] = 0; + sprite->coordOffsetEnabled = FALSE; + sprite->data[0] = r6; +} + +void sub_807E5C0(struct Sprite *sprite) +{ + if (sprite->data[4] == 0) + { + sprite->data[2] += gUnknown_0839AABC[gWeatherPtr->unknown_6DC][0]; + sprite->data[3] += gUnknown_0839AABC[gWeatherPtr->unknown_6DC][1]; + sprite->pos1.x = sprite->data[2] >> 4; + sprite->pos1.y = sprite->data[3] >> 4; + + if (sprite->data[5] != 0 + && (sprite->pos1.x >= -8 && sprite->pos1.x <= 248) + && sprite->pos1.y >= -16 && sprite->pos1.y <= 176) + sprite->invisible = FALSE; + else + sprite->invisible = TRUE; + + sprite->data[0]--; + if (sprite->data[0] == 0) + { + StartSpriteAnim(sprite, gWeatherPtr->unknown_6DC + 1); + sprite->data[4] = 1; + sprite->pos1.x -= gSpriteCoordOffsetX; + sprite->pos1.y -= gSpriteCoordOffsetY; + sprite->coordOffsetEnabled = TRUE; + } + } + else if (sprite->animEnded) + { + sprite->invisible = TRUE; + sub_807E4EC(sprite); + } +} + +void sub_807E6C4(struct Sprite *sprite) +{ + if (sprite->data[0] == 0) + { + sub_807E4EC(sprite); + sprite->callback = sub_807E5C0; + } + else + { + sprite->data[0]--; + } +} + +void sub_807E6F0(struct Sprite *sprite, u16 b) +{ + u16 r8 = gUnknown_0839AAC4[gWeatherPtr->unknown_6DC][0]; + u16 r6 = b / (gUnknown_0839AAC4[gWeatherPtr->unknown_6DC][1] + r8); + u16 r4 = b % (gUnknown_0839AAC4[gWeatherPtr->unknown_6DC][1] + r8); + + while (--r6 != 0xFFFF) + sub_807E4EC(sprite); + if (r4 < r8) + { + while (--r4 != 0xFFFF) + sub_807E5C0(sprite); + sprite->data[6] = 0; + } + else + { + sprite->data[0] = r4 - r8; + sprite->invisible = TRUE; + sprite->data[6] = 1; + } +} + +extern const struct SpriteSheet sRainSpriteSheet; // defined below + +void LoadRainSpriteSheet(void) +{ + LoadSpriteSheet(&sRainSpriteSheet); +} + +const struct Coords16 gUnknown_0839AA08[] = +{ + { 0, 0}, + { 0, 160}, + { 0, 64}, + {144, 224}, + {144, 128}, + { 32, 32}, + { 32, 192}, + { 32, 96}, + { 72, 128}, + { 72, 32}, + { 72, 192}, + {216, 96}, + {216, 0}, + {104, 160}, + {104, 64}, + {104, 224}, + {144, 0}, + {144, 160}, + {144, 64}, + { 32, 224}, + { 32, 128}, + { 72, 32}, + { 72, 192}, + { 48, 96}, +}; + +static const struct OamData gOamData_839AA68 = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 1, + .paletteNum = 2, + .affineParam = 0, +}; + +static const union AnimCmd gSpriteAnim_839AA70[] = +{ + ANIMCMD_FRAME(0, 16), + ANIMCMD_JUMP(0), +}; + +static const union AnimCmd gSpriteAnim_839AA78[] = +{ + ANIMCMD_FRAME(8, 3), + ANIMCMD_FRAME(32, 2), + ANIMCMD_FRAME(40, 2), + ANIMCMD_END, +}; + +static const union AnimCmd gSpriteAnim_839AA88[] = +{ + ANIMCMD_FRAME(8, 3), + ANIMCMD_FRAME(16, 3), + ANIMCMD_FRAME(24, 4), + ANIMCMD_END, +}; + +static const union AnimCmd *const gSpriteAnimTable_839AA98[] = +{ + gSpriteAnim_839AA70, + gSpriteAnim_839AA78, + gSpriteAnim_839AA88, +}; + +static const struct SpriteTemplate sRainSpriteTemplate = +{ + .tileTag = 4614, + .paletteTag = 4608, + .oam = &gOamData_839AA68, + .anims = gSpriteAnimTable_839AA98, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_807E5C0, +}; + + +const s16 gUnknown_0839AABC[][2] = +{ + {-104, 208}, + {-160, 320}, +}; + +const u16 gUnknown_0839AAC4[][2] = +{ + {18, 7}, + {12, 10}, +}; + +static const struct SpriteSheet sRainSpriteSheet = {gWeatherRainTiles, sizeof(gWeatherRainTiles), 0x1206}; + +static const struct OamData gOamData_839AAD4 = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 1, + .paletteNum = 0, + .affineParam = 0, +}; + +static const struct SpriteFrameImage gSpriteImageTable_839AADC[] = +{ + {gWeatherSnow1Tiles, sizeof(gWeatherSnow1Tiles)}, + {gWeatherSnow2Tiles, sizeof(gWeatherSnow2Tiles)}, +}; + +static const union AnimCmd gSpriteAnim_839AAEC[] = +{ + ANIMCMD_FRAME(0, 16), + ANIMCMD_END, +}; + +static const union AnimCmd gSpriteAnim_839AAF4[] = +{ + ANIMCMD_FRAME(1, 16), + ANIMCMD_END, +}; + +static const union AnimCmd *const gSpriteAnimTable_839AAFC[] = +{ + gSpriteAnim_839AAEC, + gSpriteAnim_839AAF4, +}; + +void sub_807ED48(struct Sprite *); +static const struct SpriteTemplate sSnowflakeSpriteTemplate = +{ + .tileTag = 0xFFFF, + .paletteTag = 4608, + .oam = &gOamData_839AAD4, + .anims = gSpriteAnimTable_839AAFC, + .images = gSpriteImageTable_839AADC, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_807ED48, +}; + +// unused data +static const u16 unusedData_839AB1C[] = {0, 6, 6, 12, 18, 42, 300, 300}; + +static const struct OamData gOamData_839AB2C = +{ + .y = 0, + .affineMode = 0, + .objMode = 1, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +static const union AnimCmd gSpriteAnim_839AB34[] = +{ + ANIMCMD_FRAME(0, 16), + ANIMCMD_END, +}; + +static const union AnimCmd gSpriteAnim_839AB3C[] = +{ + ANIMCMD_FRAME(32, 16), + ANIMCMD_END, +}; + +static const union AnimCmd gSpriteAnim_839AB44[] = +{ + ANIMCMD_FRAME(64, 16), + ANIMCMD_END, +}; + +static const union AnimCmd gSpriteAnim_839AB4C[] = +{ + ANIMCMD_FRAME(96, 16), + ANIMCMD_END, +}; + +static const union AnimCmd gSpriteAnim_839AB54[] = +{ + ANIMCMD_FRAME(128, 16), + ANIMCMD_END, +}; + +static const union AnimCmd gSpriteAnim_839AB5C[] = +{ + ANIMCMD_FRAME(160, 16), + ANIMCMD_END, +}; + +static const union AnimCmd *const gSpriteAnimTable_839AB64[] = +{ + gSpriteAnim_839AB34, + gSpriteAnim_839AB3C, + gSpriteAnim_839AB44, + gSpriteAnim_839AB4C, + gSpriteAnim_839AB54, + gSpriteAnim_839AB5C, +}; + +static const union AffineAnimCmd gSpriteAffineAnim_839AB7C[] = +{ + AFFINEANIMCMD_FRAME(0x200, 0x200, 0, 0), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd *const gSpriteAffineAnimTable_839AB8C[] = +{ + gSpriteAffineAnim_839AB7C, +}; + +static void Fog2SpriteCallback(struct Sprite *); +static const struct SpriteTemplate sFog2SpriteTemplate = +{ + .tileTag = 4609, + .paletteTag = 4608, + .oam = &gOamData_839AB2C, + .anims = gSpriteAnimTable_839AB64, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_839AB8C, + .callback = Fog2SpriteCallback, +}; + +bool8 CreateRainSprites(void) +{ + u8 r7; + u8 spriteId; + + if (gWeatherPtr->unknown_6DA == 24) + return FALSE; + + r7 = gWeatherPtr->unknown_6DA; + spriteId = CreateSpriteAtEnd(&sRainSpriteTemplate, + gUnknown_0839AA08[r7].x, gUnknown_0839AA08[r7].y, 78); + if (spriteId != 64) + { + gSprites[spriteId].data[5] = 0; + gSprites[spriteId].data[1] = r7 * 145; + while (gSprites[spriteId].data[1] >= 600) + gSprites[spriteId].data[1] -= 600; + sub_807E4EC(&gSprites[spriteId]); + sub_807E6F0(&gSprites[spriteId], r7 * 9); + gSprites[spriteId].invisible = TRUE; + gWeatherPtr->rainSprites[r7] = &gSprites[spriteId]; + } + else + { + gWeatherPtr->rainSprites[r7] = NULL; + } + + if (++gWeatherPtr->unknown_6DA == 24) + { + u16 i; + + for (i = 0; i < 24; i++) + { + if (gWeatherPtr->rainSprites[i] != NULL) + { + if (gWeatherPtr->rainSprites[i]->data[6] == 0) + gWeatherPtr->rainSprites[i]->callback = sub_807E5C0; + else + gWeatherPtr->rainSprites[i]->callback = sub_807E6C4; + } + } + return FALSE; + } + return TRUE; +} + +bool8 sub_807E8E8(void) +{ + if (gWeatherPtr->unknown_6D8 == gWeatherPtr->unknown_6D9) + return FALSE; + + if (++gWeatherPtr->unknown_6D6 > gWeatherPtr->unknown_6DB) + { + gWeatherPtr->unknown_6D6 = 0; + if (gWeatherPtr->unknown_6D8 < gWeatherPtr->unknown_6D9) + { + gWeatherPtr->rainSprites[gWeatherPtr->unknown_6D8++]->data[5] = 1; + } + else + { + gWeatherPtr->unknown_6D8--; + gWeatherPtr->rainSprites[gWeatherPtr->unknown_6D8]->data[5] = 0; + gWeatherPtr->rainSprites[gWeatherPtr->unknown_6D8]->invisible = TRUE; + } + } + return TRUE; +} + +void sub_807E974(void) +{ + u16 i; + + for (i = 0; i < gWeatherPtr->unknown_6DA; i++) + { + if (gWeatherPtr->rainSprites[i] != NULL) + DestroySprite(gWeatherPtr->rainSprites[i]); + } + gWeatherPtr->unknown_6DA = 0; + FreeSpriteTilesByTag(0x1206); +} + +//------------------------------------------------------------------------------ +// Snow +//------------------------------------------------------------------------------ + +void Snow_InitVars(void) +{ + gWeatherPtr->initStep = 0; + gWeatherPtr->weatherGfxLoaded = FALSE; + gWeatherPtr->unknown_6C1 = 3; + gWeatherPtr->unknown_6C2 = 20; + gWeatherPtr->unknown_6E5 = 16; + gWeatherPtr->unknown_6E0 = 0; +} + +void Snow_Main(void); +void sub_807ED48(struct Sprite *); + +void Snow_InitAll(void) +{ + Snow_InitVars(); + while (gWeatherPtr->weatherGfxLoaded == FALSE) + { + u16 i; + + Snow_Main(); + for (i = 0; i < gWeatherPtr->snowflakeSpriteCount; i++) + { + sub_807ED48(gWeatherPtr->snowflakeSprites[i]); + } + } +} + +u8 snowflakes_progress(void); + +void Snow_Main(void) +{ + if (gWeatherPtr->initStep == 0 && snowflakes_progress() == FALSE) + { + gWeatherPtr->weatherGfxLoaded = TRUE; + gWeatherPtr->initStep++; + } +} + +bool8 Snow_Finish(void) +{ + switch (gWeatherPtr->unknown_6CE) + { + case 0: + gWeatherPtr->unknown_6E5 = 0; + gWeatherPtr->unknown_6E0 = 0; + gWeatherPtr->unknown_6CE++; + // fall through + case 1: + if (snowflakes_progress() == FALSE) + { + gWeatherPtr->unknown_6CE++; + return FALSE; + } + return TRUE; + } + return FALSE; +} + +bool8 CreateSnowflakeSprite(void); +bool8 RemoveSnowflakeSprite(void); + +bool8 snowflakes_progress(void) +{ + if (gWeatherPtr->snowflakeSpriteCount == gWeatherPtr->unknown_6E5) + return FALSE; + + gWeatherPtr->unknown_6E0++; + if (gWeatherPtr->unknown_6E0 > 36) + { + gWeatherPtr->unknown_6E0 = 0; + if (gWeatherPtr->snowflakeSpriteCount < gWeatherPtr->unknown_6E5) + CreateSnowflakeSprite(); + else + RemoveSnowflakeSprite(); + } + return (gWeatherPtr->snowflakeSpriteCount != gWeatherPtr->unknown_6E5); +} + +void sub_807EC40(struct Sprite *); + +bool8 CreateSnowflakeSprite(void) +{ + u8 spriteId = CreateSpriteAtEnd(&sSnowflakeSpriteTemplate, 0, 0, 78); + + if (spriteId == 64) + return FALSE; + gSprites[spriteId].data[4] = gWeatherPtr->snowflakeSpriteCount; + sub_807EC40(&gSprites[spriteId]); + gSprites[spriteId].coordOffsetEnabled = TRUE; + gWeatherPtr->snowflakeSprites[gWeatherPtr->snowflakeSpriteCount++] = &gSprites[spriteId]; + return TRUE; +} + +bool8 RemoveSnowflakeSprite(void) +{ + if (gWeatherPtr->snowflakeSpriteCount != 0) + { + DestroySprite(gWeatherPtr->snowflakeSprites[--gWeatherPtr->snowflakeSpriteCount]); + return TRUE; + } + return FALSE; +} + +void sub_807EC40(struct Sprite *sprite) +{ + u16 r4 = ((sprite->data[4] * 5) & 7) * 30 + (Random() % 30); + u16 r6; + + sprite->pos1.y = -3 - (gSpriteCoordOffsetY + sprite->centerToCornerVecY); + sprite->pos1.x = r4 - (gSpriteCoordOffsetX + sprite->centerToCornerVecX); + sprite->data[0] = sprite->pos1.y * 128; + sprite->pos2.x = 0; + r6 = Random(); + sprite->data[1] = (r6 & 3) * 5 + 64; + sprite->data[7] = (r6 & 3) * 5 + 64; + StartSpriteAnim(sprite, (r6 & 1) ? 0 : 1); + sprite->data[3] = 0; + sprite->data[2] = ((r6 & 3) == 0) ? 2 : 1; + sprite->data[6] = (r6 & 0x1F) + 210; + sprite->data[5] = 0; +} + +void sub_807ECEC(struct Sprite *sprite) +{ + if (gWeatherPtr->unknown_6E2 > 18) + { + sprite->invisible = FALSE; + sprite->callback = sub_807ED48; + sprite->pos1.y = 0xFA - (gSpriteCoordOffsetY + sprite->centerToCornerVecY); + sprite->data[0] = sprite->pos1.y * 128; + gWeatherPtr->unknown_6E2 = 0; + } +} + +void sub_807ED48(struct Sprite *sprite) +{ + s16 r3; + s16 r2; + + sprite->data[0] += sprite->data[1]; + sprite->pos1.y = sprite->data[0] >> 7; + sprite->data[3] = (sprite->data[3] + sprite->data[2]) & 0xFF; + sprite->pos2.x = gSineTable[sprite->data[3]] / 64; + + r3 = (sprite->pos1.x + sprite->centerToCornerVecX + gSpriteCoordOffsetX) & 0x1FF; + if (r3 & 0x100) + r3 = -0x100 | r3; // hmm... what is this? + if (r3 < -3) + sprite->pos1.x = 242 - (gSpriteCoordOffsetX + sprite->centerToCornerVecX); + else if (r3 > 242) + sprite->pos1.x = -3 - (gSpriteCoordOffsetX + sprite->centerToCornerVecX); + + r2 = (sprite->pos1.y + sprite->centerToCornerVecY + gSpriteCoordOffsetY) & 0xFF; + if (r2 > 163 && r2 < 171) + { + sprite->pos1.y = 250 - (gSpriteCoordOffsetY + sprite->centerToCornerVecY); + sprite->data[0] = sprite->pos1.y * 128; + sprite->data[5] = 0; + sprite->data[6] = 220; + } + else if (r2 > 242 && r2 < 250) + { + sprite->pos1.y = 163; + sprite->data[0] = sprite->pos1.y * 128; + sprite->data[5] = 0; + sprite->data[6] = 220; + sprite->invisible = TRUE; + sprite->callback = sub_807ECEC; + } + + sprite->data[5]++; + if (sprite->data[5] == sprite->data[6]) + { + sub_807EC40(sprite); + sprite->pos1.y = 250; + sprite->invisible = TRUE; + sprite->callback = sub_807ECEC; + } +} + +//------------------------------------------------------------------------------ +// Medium Rain +//------------------------------------------------------------------------------ + +void MedRain_InitVars(void) +{ + gWeatherPtr->initStep = 0; + gWeatherPtr->weatherGfxLoaded = FALSE; + gWeatherPtr->unknown_6D6 = 0; + gWeatherPtr->unknown_6DB = 4; + gWeatherPtr->unknown_6DC = 0; + gWeatherPtr->unknown_6D9 = 16; + gWeatherPtr->unknown_6C1 = 3; + gWeatherPtr->unknown_6C2 = 20; + gWeatherPtr->weatherGfxLoaded = FALSE; // duplicate assignment + gWeatherPtr->unknown_6ED = 0; + SetRainStrengthFromSoundEffect(SE_T_AME); +} + +void Rain_Main(void); + +void MedRain_InitAll(void) +{ + MedRain_InitVars(); + while (gWeatherPtr->weatherGfxLoaded == FALSE) + Rain_Main(); +} + +//------------------------------------------------------------------------------ +// Heavy Rain +//------------------------------------------------------------------------------ + +void HeavyRain_InitVars(void) +{ + gWeatherPtr->initStep = 0; + gWeatherPtr->weatherGfxLoaded = FALSE; + gWeatherPtr->unknown_6D6 = 0; + gWeatherPtr->unknown_6DB = 4; + gWeatherPtr->unknown_6DC = 1; + gWeatherPtr->unknown_6D9 = 24; + gWeatherPtr->unknown_6C1 = 3; + gWeatherPtr->unknown_6C2 = 20; + gWeatherPtr->weatherGfxLoaded = FALSE; // duplicate assignment + SetRainStrengthFromSoundEffect(SE_T_OOAME); +} + +void HeavyRain_InitAll(void) +{ + HeavyRain_InitVars(); + while (gWeatherPtr->weatherGfxLoaded == FALSE) + Rain_Main(); +} + +void UpdateThunderSound(void); +void SetThunderCounter(u16); + +void Rain_Main(void) +{ + UpdateThunderSound(); + switch (gWeatherPtr->initStep) + { + case 0: + LoadRainSpriteSheet(); + gWeatherPtr->initStep++; + break; + case 1: + if (CreateRainSprites()) + break; + gWeatherPtr->initStep++; + break; + case 2: + if (sub_807E8E8()) + break; + gWeatherPtr->weatherGfxLoaded = TRUE; + gWeatherPtr->initStep++; + break; + case 3: + if (gWeatherPtr->unknown_6C6 == 0) + break; + gWeatherPtr->initStep = 6; + break; + case 4: + gWeatherPtr->unknown_6EA = 1; + gWeatherPtr->unknown_6E6 = (Random() % 360) + 360; + gWeatherPtr->initStep++; + // fall through + case 5: + if (--gWeatherPtr->unknown_6E6 != 0) + break; + gWeatherPtr->initStep++; + break; + case 6: + gWeatherPtr->unknown_6EA = 1; + gWeatherPtr->unknown_6EB = Random() % 2; + gWeatherPtr->initStep++; + break; + case 7: + gWeatherPtr->unknown_6EC = (Random() & 1) + 1; + gWeatherPtr->initStep++; + // fall through + case 8: + sub_807D5BC(19); + if (gWeatherPtr->unknown_6EB == 0 && gWeatherPtr->unknown_6EC == 1) + SetThunderCounter(20); + gWeatherPtr->unknown_6E6 = (Random() % 3) + 6; + gWeatherPtr->initStep++; + break; + case 9: + if (--gWeatherPtr->unknown_6E6 != 0) + break; + sub_807D5BC(3); + gWeatherPtr->unknown_6EA = 1; + if (--gWeatherPtr->unknown_6EC != 0) + { + gWeatherPtr->unknown_6E6 = (Random() % 16) + 60; + gWeatherPtr->initStep = 10; + } + else if (gWeatherPtr->unknown_6EB == 0) + { + gWeatherPtr->initStep = 4; + } + else + { + gWeatherPtr->initStep = 11; + } + break; + case 10: + if (--gWeatherPtr->unknown_6E6 != 0) + break; + gWeatherPtr->initStep = 8; + break; + case 11: + gWeatherPtr->unknown_6E6 = (Random() % 16) + 60; + gWeatherPtr->initStep++; + break; + case 12: + if (--gWeatherPtr->unknown_6E6 != 0) + break; + SetThunderCounter(100); + sub_807D5BC(19); + // Why use "% 16" everywhere else and "& 0xF" here. So dumb. + gWeatherPtr->unknown_6E6 = (Random() & 0xF) + 30; + gWeatherPtr->initStep++; + break; + case 13: + if (--gWeatherPtr->unknown_6E6 != 0) + break; + sub_807D5F0(19, 3, 5); + gWeatherPtr->initStep++; + break; + case 14: + if (gWeatherPtr->unknown_6C6 != 3) + break; + gWeatherPtr->unknown_6EA = 1; + gWeatherPtr->initStep = 4; + break; + } +} + +bool8 Rain_Finish(void) +{ + switch (gWeatherPtr->unknown_6CE) + { + case 0: + gWeatherPtr->unknown_6EA = 0; + gWeatherPtr->unknown_6CE++; + // fall through + case 1: + Rain_Main(); + if (gWeatherPtr->unknown_6EA != 0) + { + if (gWeatherPtr->nextWeather == WEATHER_RAIN_LIGHT + || gWeatherPtr->nextWeather == WEATHER_RAIN_MED + || gWeatherPtr->nextWeather == WEATHER_RAIN_HEAVY) + return FALSE; + gWeatherPtr->unknown_6D9 = 0; + gWeatherPtr->unknown_6CE++; + } + break; + case 2: + if (sub_807E8E8()) + break; + sub_807E974(); + gWeatherPtr->unknown_6ED = 0; + gWeatherPtr->unknown_6CE++; + return FALSE; + default: + return FALSE; + } + return TRUE; +} + +void SetThunderCounter(u16 max) +{ + if (gWeatherPtr->unknown_6ED == 0) + { + gWeatherPtr->thunderCounter = Random() % max; + gWeatherPtr->unknown_6ED = 1; + } +} + +void UpdateThunderSound(void) +{ + if (gWeatherPtr->unknown_6ED == 1) + { + if (gWeatherPtr->thunderCounter == 0) + { + if (IsSEPlaying()) + return; + if (Random() & 1) + PlaySE(SE_T_KAMI); + else + PlaySE(SE_T_KAMI2); + gWeatherPtr->unknown_6ED = 0; + } + else + { + gWeatherPtr->thunderCounter--; + } + } +} + +//------------------------------------------------------------------------------ +// Fog 2 +//------------------------------------------------------------------------------ + +void Fog2_Main(void); +static void CreateFog2Sprites(void); +static void DestroyFog2Sprites(void); + +void Fog2_InitVars(void) +{ + gWeatherPtr->initStep = 0; + gWeatherPtr->weatherGfxLoaded = FALSE; + gWeatherPtr->unknown_6C1 = 0; + gWeatherPtr->unknown_6C2 = 20; + if (gWeatherPtr->unknown_6FB == 0) + { + gWeatherPtr->unknown_6F0 = 0; + gWeatherPtr->unknown_6F2 = 0; + gWeatherPtr->fog2ScrollPosX = 0; + Weather_SetBlendCoeffs(0, 16); + } +} + +void Fog2_InitAll(void) +{ + Fog2_InitVars(); + while (gWeatherPtr->weatherGfxLoaded == FALSE) + Fog2_Main(); +} + +void Fog2_Main(void) +{ + gWeatherPtr->fog2ScrollPosX = (gSpriteCoordOffsetX - gWeatherPtr->unknown_6F2) & 0xFF; + if (++gWeatherPtr->unknown_6F0 > 3) + { + gWeatherPtr->unknown_6F0 = 0; + gWeatherPtr->unknown_6F2++; + } + switch (gWeatherPtr->initStep) + { + case 0: + CreateFog2Sprites(); + if (gWeatherPtr->currWeather == WEATHER_FOG_2) + Weather_SetTargetBlendCoeffs(12, 8, 3); + else + Weather_SetTargetBlendCoeffs(4, 16, 0); + gWeatherPtr->initStep++; + break; + case 1: + if (Weather_UpdateBlend()) + { + gWeatherPtr->weatherGfxLoaded = TRUE; + gWeatherPtr->initStep++; + } + break; + } +} + +bool8 Fog2_Finish(void) +{ + gWeatherPtr->fog2ScrollPosX = (gSpriteCoordOffsetX - gWeatherPtr->unknown_6F2) & 0xFF; + if (++gWeatherPtr->unknown_6F0 > 3) + { + gWeatherPtr->unknown_6F0 = 0; + gWeatherPtr->unknown_6F2++; + } + switch (gWeatherPtr->unknown_6CE) + { + case 0: + Weather_SetTargetBlendCoeffs(0, 16, 3); + gWeatherPtr->unknown_6CE++; + break; + case 1: + if (!Weather_UpdateBlend()) + break; + gWeatherPtr->unknown_6CE++; + break; + case 2: + DestroyFog2Sprites(); + gWeatherPtr->unknown_6CE++; + break; + default: + return FALSE; + } + return TRUE; +} + +#define sprColumn data[0] + +static void Fog2SpriteCallback(struct Sprite *sprite) +{ + sprite->pos2.y = (u8)gSpriteCoordOffsetY; + sprite->pos1.x = gWeatherPtr->fog2ScrollPosX + 32 + sprite->sprColumn * 64; + if (sprite->pos1.x > 0x10F) + { + sprite->pos1.x = 480 + gWeatherPtr->fog2ScrollPosX - (4 - sprite->sprColumn) * 64; + sprite->pos1.x &= 0x1FF; + } +} + +static void CreateFog2Sprites(void) +{ + u16 i; + + if (gWeatherPtr->unknown_6FB == 0) + { + struct SpriteSheet fog2SpriteSheet = {gWeatherFog2Tiles, sizeof(gWeatherFog2Tiles), 0x1201}; + + LoadSpriteSheet(&fog2SpriteSheet); + for (i = 0; i < 20; i++) + { + u8 spriteId = CreateSpriteAtEnd(&sFog2SpriteTemplate, 0, 0, 0xFF); + + if (spriteId != MAX_SPRITES) + { + struct Sprite *sprite = &gSprites[spriteId]; + + sprite->sprColumn = i % 5; + sprite->pos1.x = (i % 5) * 64 + 32; + sprite->pos1.y = (i / 5) * 64 + 32; + ((struct Weather2 *)gWeatherPtr)->fogSprites[i] = sprite; + } + else + { + ((struct Weather2 *)gWeatherPtr)->fogSprites[i] = NULL; + } + } + gWeatherPtr->unknown_6FB = 1; + } +} + +#undef sprColumn + +static void DestroyFog2Sprites(void) +{ + u16 i; + + if (gWeatherPtr->unknown_6FB != 0) + { + for (i = 0; i < 20; i++) + { + if (((struct Weather2 *)gWeatherPtr)->fogSprites[i] != NULL) + DestroySprite(((struct Weather2 *)gWeatherPtr)->fogSprites[i]); + } + FreeSpriteTilesByTag(0x1201); + gWeatherPtr->unknown_6FB = 0; + } +} + +//------------------------------------------------------------------------------ +// Fog 1 +//------------------------------------------------------------------------------ + +void Fog1_InitVars(void) +{ + gWeatherPtr->initStep = 0; + gWeatherPtr->weatherGfxLoaded = FALSE; + gWeatherPtr->unknown_6C1 = 0; + gWeatherPtr->unknown_6C2 = 20; + gWeatherPtr->unknown_6FE = 20; + if (gWeatherPtr->unknown_700 == 0) + { + Weather_SetBlendCoeffs(0, 16); + REG_BLDALPHA = BLDALPHA_BLEND(64, 63); // Those aren't even valid coefficients! + } +} + +void sub_807F888(void); + +void sub_807F858(void) +{ + Fog1_InitVars(); + while (gWeatherPtr->weatherGfxLoaded == FALSE) + sub_807F888(); +} + +void sub_807F99C(void); +void sub_807F9AC(void); + +void sub_807F888(void) +{ + gWeatherPtr->unknown_6FC = gSpriteCoordOffsetX & 0x1FF; + while (gWeatherPtr->unknown_6FC > 0xEF) + gWeatherPtr->unknown_6FC -= 0xF0; + switch (gWeatherPtr->initStep) + { + case 0: + sub_807F99C(); + gWeatherPtr->initStep++; + break; + case 1: + if (gWeatherPtr->unknown_700 == 0) + sub_807F9AC(); + Weather_SetTargetBlendCoeffs(16, 0, 1); + gWeatherPtr->initStep++; + break; + case 2: + if (!Weather_UpdateBlend()) + break; + gWeatherPtr->weatherGfxLoaded = TRUE; + gWeatherPtr->initStep++; + break; + default: + Weather_UpdateBlend(); + break; + } +} + +void sub_807FA54(void); + +bool8 sub_807F934(void) +{ + switch (gWeatherPtr->unknown_6CE) + { + case 0: + Weather_SetTargetBlendCoeffs(0, 16, 1); + gWeatherPtr->unknown_6CE++; + break; + case 1: + if (!Weather_UpdateBlend()) + break; + sub_807FA54(); + gWeatherPtr->unknown_6CE++; + break; + case 2: + REG_BLDALPHA = 0; + gWeatherPtr->unknown_6CE++; + return FALSE; + default: + return FALSE; + } + return TRUE; +} + +const struct SpriteSheet gWeatherAshSpriteSheet = {gWeatherAshTiles, sizeof(gWeatherAshTiles), 0x1202}; + +void sub_807F99C(void) +{ + LoadSpriteSheet(&gWeatherAshSpriteSheet); +} + +const struct OamData gOamData_839ABB8 = +{ + .y = 0, + .affineMode = 0, + .objMode = 1, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 1, + .paletteNum = 15, + .affineParam = 0, +}; + +const union AnimCmd gSpriteAnim_839ABC0[] = +{ + ANIMCMD_FRAME(0, 60), + ANIMCMD_FRAME(64, 60), + ANIMCMD_JUMP(0), +}; + +const union AnimCmd *const gSpriteAnimTable_839ABCC[] = +{ + gSpriteAnim_839ABC0, +}; + +void sub_807FAA8(struct Sprite *); +const struct SpriteTemplate gSpriteTemplate_839ABD0 = +{ + .tileTag = 4610, + .paletteTag = 4608, + .oam = &gOamData_839ABB8, + .anims = gSpriteAnimTable_839ABCC, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_807FAA8, +}; + +void sub_807F9AC(void) +{ + u8 i; + + if (gWeatherPtr->unknown_700 == 0) + { + for (i = 0; i < 20; i++) + { + u8 spriteId = CreateSpriteAtEnd(&gSpriteTemplate_839ABD0, 0, 0, 0x4E); + + if (spriteId != MAX_SPRITES) + { + struct Sprite *sprite = &gSprites[spriteId]; + + sprite->data[1] = 0; + sprite->data[2] = (u8)(i % 5); + sprite->data[3] = (u8)(i / 5); + sprite->data[0] = sprite->data[3] * 64 + 32; + ((struct Weather2 *)gWeatherPtr)->fog1Sprites[i] = sprite; + } + else + { + ((struct Weather2 *)gWeatherPtr)->fog1Sprites[i] = NULL; + } + } + gWeatherPtr->unknown_700 = 1; + } +} + +void sub_807FA54(void) +{ + u16 i; + + if (gWeatherPtr->unknown_700 != 0) + { + for (i = 0; i < 20; i++) + { + if (((struct Weather2 *)gWeatherPtr)->fog1Sprites[i] != NULL) + DestroySprite(((struct Weather2 *)gWeatherPtr)->fog1Sprites[i]); + } + FreeSpriteTilesByTag(0x1202); + gWeatherPtr->unknown_700 = 0; + } +} + +void sub_807FAA8(struct Sprite *sprite) +{ + sprite->data[1]++; + if (sprite->data[1] > 5) + { + sprite->data[1] = 0; + sprite->data[0]++; + } + sprite->pos1.y = gSpriteCoordOffsetY + sprite->data[0]; + sprite->pos1.x = gWeatherPtr->unknown_6FC + 32 + sprite->data[2] * 64; + if (sprite->pos1.x > 271) + { + sprite->pos1.x = gWeatherPtr->unknown_6FC + 0x1E0 - (4 - sprite->data[2]) * 64; + sprite->pos1.x &= 0x1FF; + } +} + +void sub_807FB24(void) +{ + gWeatherPtr->initStep = 0; + gWeatherPtr->weatherGfxLoaded = 0; + gWeatherPtr->unknown_6C1 = 0; + gWeatherPtr->unknown_6C2 = 20; + gWeatherPtr->unknown_6F0 = 0; + gWeatherPtr->unknown_6F2 = 1; + if (gWeatherPtr->unknown_724 == 0) + { + gWeatherPtr->unknown_71C = 0; + gWeatherPtr->unknown_71E = 0; + gWeatherPtr->unknown_720 = 0; + gWeatherPtr->unknown_722 = 0; + gWeatherPtr->unknown_718 = 0; + gWeatherPtr->unknown_71A = 0; + Weather_SetBlendCoeffs(0, 16); + } +} + +void sub_807FBD8(void); + +void sub_807FBA8(void) +{ + sub_807FB24(); + while (gWeatherPtr->weatherGfxLoaded == FALSE) + sub_807FBD8(); +} + +void sub_807FC9C(void); +void sub_807FD30(void); + +void sub_807FBD8(void) +{ + sub_807FC9C(); + switch (gWeatherPtr->initStep) + { + case 0: + sub_807FD30(); + gWeatherPtr->initStep++; + break; + case 1: + Weather_SetTargetBlendCoeffs(12, 8, 8); + gWeatherPtr->initStep++; + break; + case 2: + if (!Weather_UpdateBlend()) + break; + gWeatherPtr->weatherGfxLoaded = TRUE; + gWeatherPtr->initStep++; + break; + } +} + +void sub_807FDE8(void); + +bool8 sub_807FC3C(void) +{ + sub_807FC9C(); + switch (gWeatherPtr->unknown_6CE) + { + case 0: + Weather_SetTargetBlendCoeffs(0, 16, 1); + gWeatherPtr->unknown_6CE++; + break; + case 1: + if (!Weather_UpdateBlend()) + break; + gWeatherPtr->unknown_6CE++; + break; + case 2: + sub_807FDE8(); + gWeatherPtr->unknown_6CE++; + break; + default: + return FALSE; + } + return TRUE; +} + +void sub_807FC9C(void) +{ + if (++gWeatherPtr->unknown_71C > 2) + { + gWeatherPtr->unknown_720++; + gWeatherPtr->unknown_71C = 0; + } + + if (++gWeatherPtr->unknown_71E > 4) + { + gWeatherPtr->unknown_722++; + gWeatherPtr->unknown_71E = 0; + } + + gWeatherPtr->unknown_718 = (gSpriteCoordOffsetX - gWeatherPtr->unknown_720) & 0xFF; + gWeatherPtr->unknown_71A = gSpriteCoordOffsetY + gWeatherPtr->unknown_722; +} + +extern const struct SpriteTemplate gSpriteTemplate_839AC04; // defined below + +void sub_807FD30(void) +{ + u16 i; + + if (gWeatherPtr->unknown_724 == 0) + { + struct SpriteSheet fog1SpriteSheet = {gWeatherFog1Tiles, sizeof(gWeatherFog1Tiles), 0x1203}; + + LoadSpriteSheet(&fog1SpriteSheet); + for (i = 0; i < 20; i++) + { + u8 spriteId = CreateSpriteAtEnd(&gSpriteTemplate_839AC04, 0, (i / 5) * 64, 0xFF); + + if (spriteId != MAX_SPRITES) + { + struct Sprite *sprite = &gSprites[spriteId]; + + sprite->data[0] = i % 5; + sprite->data[1] = i / 5; + ((struct Weather2 *)gWeatherPtr)->unknown_140[i] = sprite; + } + else + { + ((struct Weather2 *)gWeatherPtr)->unknown_140[i] = NULL; + } + } + gWeatherPtr->unknown_724 = 1; + } +} + +const struct OamData gOamData_839ABF0 = +{ + .y = 0, + .affineMode = 0, + .objMode = 1, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +const union AnimCmd gSpriteAnim_839ABF8[] = +{ + ANIMCMD_FRAME(0, 16), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_839AC00[] = +{ + gSpriteAnim_839ABF8, +}; + +void sub_807FE3C(struct Sprite *); +const struct SpriteTemplate gSpriteTemplate_839AC04 = +{ + .tileTag = 4611, + .paletteTag = 4608, + .oam = &gOamData_839ABF0, + .anims = gSpriteAnimTable_839AC00, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_807FE3C, +}; + +void sub_807FDE8(void) +{ + u16 i; + + if (gWeatherPtr->unknown_724 != 0) + { + for (i = 0; i < 20; i++) + { + if (((struct Weather2 *)gWeatherPtr)->unknown_140[i] != NULL) + DestroySprite(((struct Weather2 *)gWeatherPtr)->unknown_140[i]); + } + FreeSpriteTilesByTag(0x1203); + gWeatherPtr->unknown_724 = 0; + } +} + +void sub_807FE3C(struct Sprite *sprite) +{ + sprite->pos2.y = gWeatherPtr->unknown_71A; + sprite->pos1.x = gWeatherPtr->unknown_718 + 32 + sprite->data[0] * 64; + if (sprite->pos1.x > 271) + { + sprite->pos1.x = gWeatherPtr->unknown_718 + 0x1E0 - (4 - sprite->data[0]) * 64; + sprite->pos1.x &= 0x1FF; + } +} + +void sub_807FE9C(void) +{ + gWeatherPtr->initStep = 0; + gWeatherPtr->weatherGfxLoaded = 0; + gWeatherPtr->unknown_6C1 = 0; + gWeatherPtr->unknown_6C2 = 20; + if (gWeatherPtr->unknown_716 == 0) + { + gWeatherPtr->unknown_704 = gWeatherPtr->unknown_708 = 0; + gWeatherPtr->unknown_712 = 8; + gWeatherPtr->unknown_714 = 0; + // Dead code. How does the compiler not optimize this out? + if (gWeatherPtr->unknown_712 > 0x5F) + gWeatherPtr->unknown_712 = 0x80 - gWeatherPtr->unknown_712; + Weather_SetBlendCoeffs(0, 16); + } +} + +void sub_807FF4C(void); + +void sub_807FF1C(void) +{ + sub_807FE9C(); + while (gWeatherPtr->weatherGfxLoaded == FALSE) + sub_807FF4C(); +} + +void sub_808002C(void); +void sub_8080064(void); +void sub_8080178(void); +void sub_8080238(void); + +void sub_807FF4C(void) +{ + sub_8080064(); + sub_808002C(); + if (gWeatherPtr->unknown_712 > 0x5F) + gWeatherPtr->unknown_712 = 32; + switch (gWeatherPtr->initStep) + { + case 0: + sub_8080178(); + sub_8080238(); + gWeatherPtr->initStep++; + break; + case 1: + Weather_SetTargetBlendCoeffs(16, 0, 0); + gWeatherPtr->initStep++; + break; + case 2: + if (!Weather_UpdateBlend()) + break; + gWeatherPtr->weatherGfxLoaded = TRUE; + gWeatherPtr->initStep++; + break; + } +} + +void sub_80800E4(void); + +bool8 sub_807FFC8(void) +{ + sub_8080064(); + sub_808002C(); + switch (gWeatherPtr->unknown_6CE) + { + case 0: + Weather_SetTargetBlendCoeffs(0, 16, 0); + gWeatherPtr->unknown_6CE++; + break; + case 1: + if (!Weather_UpdateBlend()) + break; + gWeatherPtr->unknown_6CE++; + break; + case 2: + sub_80800E4(); + gWeatherPtr->unknown_6CE++; + break; + default: + return FALSE; + } + return TRUE; +} + +void sub_808002C(void) +{ + if (gWeatherPtr->unknown_714++ > 4) + { + gWeatherPtr->unknown_712++; + gWeatherPtr->unknown_714 = 0; + } +} + +void sub_8080064(void) +{ + gWeatherPtr->unknown_704 -= gSineTable[gWeatherPtr->unknown_712] * 4; + gWeatherPtr->unknown_708 -= gSineTable[gWeatherPtr->unknown_712]; + gWeatherPtr->unknown_70E = (gSpriteCoordOffsetX + (gWeatherPtr->unknown_704 >> 8)) & 0xFF; + gWeatherPtr->unknown_710 = gSpriteCoordOffsetY + (gWeatherPtr->unknown_708 >> 8); +} + +void sub_80800E4(void) +{ + u16 i; + + if (gWeatherPtr->unknown_716 != 0) + { + for (i = 0; i < 20; i++) + { + if (((struct Weather2 *)gWeatherPtr)->unknown_190[i] != NULL) + DestroySprite(((struct Weather2 *)gWeatherPtr)->unknown_190[i]); + } + gWeatherPtr->unknown_716 = 0; + FreeSpriteTilesByTag(0x1204); + } + + if (gWeatherPtr->unknown_717 != 0) + { + for (i = 0; i < 5; i++) + { + if (((struct Weather2 *)gWeatherPtr)->unknown_1E0[i] != NULL) + DestroySprite(((struct Weather2 *)gWeatherPtr)->unknown_1E0[i]); + } + gWeatherPtr->unknown_717 = 0; + } +} + +const struct OamData gOamData_839AC1C = +{ + .y = 0, + .affineMode = 0, + .objMode = 1, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 1, + .paletteNum = 0, + .affineParam = 0, +}; + +const union AnimCmd gSpriteAnim_839AC24[] = +{ + ANIMCMD_FRAME(0, 3), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_839AC2C[] = +{ + ANIMCMD_FRAME(64, 3), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_839AC34[] = +{ + gSpriteAnim_839AC24, + gSpriteAnim_839AC2C, +}; + +void sub_8080338(struct Sprite *); +const struct SpriteTemplate gSpriteTemplate_839AC3C = +{ + .tileTag = 4612, + .paletteTag = 4609, + .oam = &gOamData_839AC1C, + .anims = gSpriteAnimTable_839AC34, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_8080338, +}; + +const struct SpriteSheet gWeatherSandstormSpriteSheet = {gWeatherSandstormTiles, sizeof(gWeatherSandstormTiles), 0x1204}; + +void sub_8080178(void) +{ + u16 i; + + if (gWeatherPtr->unknown_716 == 0) + { + LoadSpriteSheet(&gWeatherSandstormSpriteSheet); + sub_807D8C0(gUnknown_08397128); + for (i = 0; i < 20; i++) + { + u8 spriteId = CreateSpriteAtEnd(&gSpriteTemplate_839AC3C, 0, (i / 5) * 64, 1); + + if (spriteId != MAX_SPRITES) + { + ((struct Weather2 *)gWeatherPtr)->unknown_190[i] = &gSprites[spriteId]; + ((struct Weather2 *)gWeatherPtr)->unknown_190[i]->data[0] = i % 5; + ((struct Weather2 *)gWeatherPtr)->unknown_190[i]->data[1] = i / 5; + } + else + { + ((struct Weather2 *)gWeatherPtr)->unknown_190[i] = NULL; + } + } + gWeatherPtr->unknown_716 = 1; + } +} + +const u16 gUnknown_0839AC5C[] = {0, 120, 80, 160, 40, 0}; + +void sub_8080398(struct Sprite *); + +void sub_8080238(void) +{ + u16 i; + + if (gWeatherPtr->unknown_717 == 0) + { + for (i = 0; i < 5; i++) + { + u8 spriteId = CreateSpriteAtEnd(&gSpriteTemplate_839AC3C, i * 48 + 0x18, 0xD0, 1); + + if (spriteId != MAX_SPRITES) + { + ((struct Weather2 *)gWeatherPtr)->unknown_1E0[i] = &gSprites[spriteId]; + ((struct Weather2 *)gWeatherPtr)->unknown_1E0[i]->oam.size = 2; + ((struct Weather2 *)gWeatherPtr)->unknown_1E0[i]->data[1] = i * 51; + ((struct Weather2 *)gWeatherPtr)->unknown_1E0[i]->data[0] = 8; + ((struct Weather2 *)gWeatherPtr)->unknown_1E0[i]->data[2] = 0; + ((struct Weather2 *)gWeatherPtr)->unknown_1E0[i]->data[4] = 0x6730; + ((struct Weather2 *)gWeatherPtr)->unknown_1E0[i]->data[3] = gUnknown_0839AC5C[i]; + StartSpriteAnim(((struct Weather2 *)gWeatherPtr)->unknown_1E0[i], 1); + CalcCenterToCornerVec(((struct Weather2 *)gWeatherPtr)->unknown_1E0[i], 0, 2, 0); + ((struct Weather2 *)gWeatherPtr)->unknown_1E0[i]->callback = sub_8080398; + } + else + { + ((struct Weather2 *)gWeatherPtr)->unknown_1E0[i] = NULL; + } + gWeatherPtr->unknown_717 = 1; + } + } +} + +void sub_8080338(struct Sprite *sprite) +{ + sprite->pos2.y = gWeatherPtr->unknown_710; + sprite->pos1.x = gWeatherPtr->unknown_70E + 32 + sprite->data[0] * 64; + if (sprite->pos1.x > 271) + { + sprite->pos1.x = gWeatherPtr->unknown_70E + 0x1E0 - (4 - sprite->data[0]) * 64; + sprite->pos1.x &= 0x1FF; + } +} + +void sub_80803BC(struct Sprite *); + +void sub_8080398(struct Sprite *sprite) +{ + if (--sprite->data[3] == -1) + sprite->callback = sub_80803BC; +} + +void sub_80803BC(struct Sprite *sprite) +{ + u32 x; + u32 y; + + if (--sprite->pos1.y < -48) + { + sprite->pos1.y = 208; + sprite->data[0] = 4; + } + x = sprite->data[0] * gSineTable[sprite->data[1]]; + y = sprite->data[0] * gSineTable[sprite->data[1] + 64]; + sprite->pos2.x = x >> 8; + sprite->pos2.y = y >> 8; + sprite->data[1] = (sprite->data[1] + 10) & 0xFF; + if (++sprite->data[2] > 8) + { + sprite->data[2] = 0; + sprite->data[0]++; + } +} + +void sub_8080430(void) +{ + gWeatherPtr->initStep = 0; + gWeatherPtr->unknown_6C1 = 3; + gWeatherPtr->unknown_6C2 = 20; +} + +void sub_8080460(void) +{ + sub_8080430(); +} + +void nullsub_56(void) +{ +} + +bool8 sub_8080470(void) +{ + return FALSE; +} + +const u8 gUnknown_0839AC68[] = {40, 90, 60, 90, 2, 60, 40, 30}; + +const struct SpriteSheet gWeatherBubbleSpriteSheet = {gWeatherBubbleTiles, sizeof(gWeatherBubbleTiles), 0x1205}; + +void sub_8080474(void) +{ + Fog2_InitVars(); + if (gWeatherPtr->unknown_72E == 0) + { + LoadSpriteSheet(&gWeatherBubbleSpriteSheet); + gWeatherPtr->unknown_728 = 0; + gWeatherPtr->unknown_726 = gUnknown_0839AC68[0]; + gWeatherPtr->unknown_72A = 0; + gWeatherPtr->unknown_72C = 0; + } +} + +void sub_80804F8(void); + +void sub_80804C8(void) +{ + sub_8080474(); + while (gWeatherPtr->weatherGfxLoaded == FALSE) + sub_80804F8(); +} + +void sub_8080588(u16); + +void sub_80804F8(void) +{ + Fog2_Main(); + if (++gWeatherPtr->unknown_726 > gUnknown_0839AC68[gWeatherPtr->unknown_728]) + { + gWeatherPtr->unknown_726 = 0; + if (++gWeatherPtr->unknown_728 > 7) + gWeatherPtr->unknown_728 = 0; + sub_8080588(gWeatherPtr->unknown_72A); + if (++gWeatherPtr->unknown_72A > 12) + gWeatherPtr->unknown_72A = 0; + } +} + +void sub_8080610(void); + +bool8 sub_808056C(void) +{ + if (!Fog2_Finish()) + { + sub_8080610(); + return FALSE; + } + return TRUE; +} + +const s16 gUnknown_0839AC78[][2] = +{ + {120, 160}, + {376, 160}, + { 40, 140}, + {296, 140}, + {180, 130}, + {436, 130}, + { 60, 160}, + {436, 160}, + {220, 180}, + {476, 180}, + { 10, 90}, + {266, 90}, + {256, 160}, +}; + +const union AnimCmd gSpriteAnim_839ACAC[] = +{ + ANIMCMD_FRAME(0, 16), + ANIMCMD_FRAME(1, 16), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_839ACB8[] = +{ + gSpriteAnim_839ACAC, +}; + +extern const struct OamData gOamData_837DF24; + +void unc_0807DAB4(struct Sprite *); +const struct SpriteTemplate gSpriteTemplate_839ACBC = +{ + .tileTag = 4613, + .paletteTag = 4608, + .oam = &gOamData_837DF24, + .anims = gSpriteAnimTable_839ACB8, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = unc_0807DAB4, +}; + +void sub_8080588(u16 a) +{ + s16 x = gUnknown_0839AC78[a][0]; + s16 y = gUnknown_0839AC78[a][1] - gSpriteCoordOffsetY; + u8 spriteId = CreateSpriteAtEnd( + &gSpriteTemplate_839ACBC, + x, + y, + 0); + + if (spriteId != MAX_SPRITES) + { + gSprites[spriteId].oam.priority = 1; + gSprites[spriteId].coordOffsetEnabled = TRUE; + gSprites[spriteId].data[0] = 0; + gSprites[spriteId].data[1] = 0; + gSprites[spriteId].data[2] = 0; + gWeatherPtr->unknown_72C++; + } +} + +void sub_8080610(void) +{ + u16 i; + + for (i = 0; i < 64; i++) + { + if (gSprites[i].template == &gSpriteTemplate_839ACBC) + DestroySprite(&gSprites[i]); + } + FreeSpriteTilesByTag(0x1205); +} + +void unc_0807DAB4(struct Sprite *sprite) +{ + ++sprite->data[0]; + if (++sprite->data[0] > 8) // double increment + { + sprite->data[0] = 0; + if (sprite->data[1] == 0) + { + if (++sprite->pos2.x > 4) + sprite->data[1] = 1; + } + else + { + if (--sprite->pos2.x <= 0) + sprite->data[1] = 0; + } + } + sprite->pos1.y -= 3; + if (++sprite->data[2] > 0x77) + DestroySprite(sprite); +} + +u8 TranslateWeatherNum(u8); +void UpdateRainCounter(u8, u8); + +void SetSav1Weather(u32 weather) +{ + u8 oldWeather = gSaveBlock1.weather; + + gSaveBlock1.weather = TranslateWeatherNum(weather); + UpdateRainCounter(gSaveBlock1.weather, oldWeather); +} + +u8 GetSav1Weather(void) +{ + return gSaveBlock1.weather; +} + +void SetSav1WeatherFromCurrMapHeader(void) +{ + u8 oldWeather = gSaveBlock1.weather; + + gSaveBlock1.weather = TranslateWeatherNum(gMapHeader.weather); + UpdateRainCounter(gSaveBlock1.weather, oldWeather); +} + +void SetWeather(u32 weather) +{ + SetSav1Weather(weather); + DoWeatherEffect(GetSav1Weather()); +} + +void SetWeather_Unused(u32 weather) +{ + SetSav1Weather(weather); + sub_807C988(GetSav1Weather()); +} + +void DoCurrentWeather(void) +{ + DoWeatherEffect(GetSav1Weather()); +} + +void sub_8080750(void) +{ + sub_807C988(GetSav1Weather()); +} + +static const u8 sWeatherCycle1[] = {2, 3, 5, 3}; +static const u8 sWeatherCycle2[] = {2, 2, 3, 2}; + +u8 TranslateWeatherNum(u8 weather) +{ + switch (weather) + { + case 0: return 0; + case 1: return 1; + case 2: return 2; + case 3: return 3; + case 4: return 4; + case 5: return 5; + case 6: return 6; + case 7: return 7; + case 8: return 8; + case 9: return 9; + case 10: return 10; + case 11: return 11; + case 12: return 12; + case 13: return 13; + case 14: return 14; + case 20: return sWeatherCycle1[gSaveBlock1.filler_2F]; + case 21: return sWeatherCycle2[gSaveBlock1.filler_2F]; + default: return 0; + } +} + +void UpdateWeatherPerDay(u16 increment) +{ + u16 weatherStage = gSaveBlock1.filler_2F + increment; + weatherStage %= 4; + gSaveBlock1.filler_2F = weatherStage; +} + +void UpdateRainCounter(u8 newWeather, u8 oldWeather) +{ + if (newWeather != oldWeather + && (newWeather == WEATHER_RAIN_LIGHT || newWeather == WEATHER_RAIN_MED)) + IncrementGameStat(0x28); +} -- cgit v1.2.3 From 4e1098beb6a84a46f0ac2bff37013a3f675f6750 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Sun, 26 Nov 2017 01:41:51 -0600 Subject: label more functions and variables --- src/field/field_weather.c | 96 +++---- src/field/field_weather_effects.c | 534 ++++++++++++++++++++------------------ 2 files changed, 327 insertions(+), 303 deletions(-) (limited to 'src') diff --git a/src/field/field_weather.c b/src/field/field_weather.c index 0cd54d9a4..100dda956 100644 --- a/src/field/field_weather.c +++ b/src/field/field_weather.c @@ -72,10 +72,10 @@ void Clouds_InitVars(void); void Clouds_Main(void); void Clouds_InitAll(void); bool8 Clouds_Finish(void); -void sub_807DF9C(void); -void nullsub_55(void); -void sub_807DFC0(void); -bool8 sub_807DFD0(void); +void Weather2_InitVars(void); +void Weather2_Main(void); +void Weather2_InitAll(void); +bool8 Weather2_Finish(void); void LightRain_InitVars(void); void LightRain_Main(void); void LightRain_InitAll(void); @@ -88,60 +88,60 @@ void MedRain_InitVars(void); void Rain_Main(void); void MedRain_InitAll(void); bool8 Rain_Finish(void); -void Fog2_InitVars(void); -void Fog2_Main(void); -void Fog2_InitAll(void); -bool8 Fog2_Finish(void); void Fog1_InitVars(void); -void sub_807F888(void); -void sub_807F858(void); -bool8 sub_807F934(void); -void sub_807FE9C(void); -void sub_807FF4C(void); -void sub_807FF1C(void); -bool8 sub_807FFC8(void); -void sub_807FB24(void); -void sub_807FBD8(void); -void sub_807FBA8(void); -bool8 sub_807FC3C(void); +void Fog1_Main(void); +void Fog1_InitAll(void); +bool8 Fog1_Finish(void); +void Ash_InitVars(void); +void Ash_Main(void); +void Ash_InitAll(void); +bool8 Ash_Finish(void); +void Sandstorm_InitVars(void); +void Sandstorm_Main(void); +void Sandstorm_InitAll(void); +bool8 Sandstorm_Finish(void); void Fog2_InitVars(void); void Fog2_Main(void); void Fog2_InitAll(void); bool8 Fog2_Finish(void); -void sub_8080430(void); -void nullsub_56(void); -void sub_8080460(void); -bool8 sub_8080470(void); -void sub_807E110(void); -void sub_807E174(void); -void sub_807E144(void); -bool8 sub_807E258(void); +void Fog1_InitVars(void); +void Fog1_Main(void); +void Fog1_InitAll(void); +bool8 Fog1_Finish(void); +void Weather11_InitVars(void); +void Weather11_Main(void); +void Weather11_InitAll(void); +bool8 Weather11_Finish(void); +void Drought_InitVars(void); +void Drought_Main(void); +void Drought_InitAll(void); +bool8 Drought_Finish(void); void HeavyRain_InitVars(void); void Rain_Main(void); void HeavyRain_InitAll(void); bool8 Rain_Finish(void); -void sub_8080474(void); -void sub_80804F8(void); -void sub_80804C8(void); -bool8 sub_808056C(void); +void Bubbles_InitVars(void); +void Bubbles_Main(void); +void Bubbles_InitAll(void); +bool8 Bubbles_Finish(void); static const struct WeatherCallbacks sWeatherFuncs[] = { {None_Init, None_Main, None_Init, None_Finish}, {Clouds_InitVars, Clouds_Main, Clouds_InitAll, Clouds_Finish}, - {sub_807DF9C, nullsub_55, sub_807DFC0, sub_807DFD0}, + {Weather2_InitVars, Weather2_Main, Weather2_InitAll, Weather2_Finish}, {LightRain_InitVars, LightRain_Main, LightRain_InitAll, LightRain_Finish}, // light rain - {Snow_InitVars, Snow_Main, Snow_InitAll, Snow_Finish}, // snow + {Snow_InitVars, Snow_Main, Snow_InitAll, Snow_Finish}, {MedRain_InitVars, Rain_Main, MedRain_InitAll, Rain_Finish}, + {Fog1_InitVars, Fog1_Main, Fog1_InitAll, Fog1_Finish}, + {Ash_InitVars, Ash_Main, Ash_InitAll, Ash_Finish}, + {Sandstorm_InitVars, Sandstorm_Main, Sandstorm_InitAll, Sandstorm_Finish}, {Fog2_InitVars, Fog2_Main, Fog2_InitAll, Fog2_Finish}, - {Fog1_InitVars, sub_807F888, sub_807F858, sub_807F934}, // fog 1 - {sub_807FE9C, sub_807FF4C, sub_807FF1C, sub_807FFC8}, - {sub_807FB24, sub_807FBD8, sub_807FBA8, sub_807FC3C}, - {Fog2_InitVars, Fog2_Main, Fog2_InitAll, Fog2_Finish}, - {sub_8080430, nullsub_56, sub_8080460, sub_8080470}, - {sub_807E110, sub_807E174, sub_807E144, sub_807E258}, + {Fog1_InitVars, Fog1_Main, Fog1_InitAll, Fog1_Finish}, + {Weather11_InitVars, Weather11_Main, Weather11_InitAll, Weather11_Finish}, + {Drought_InitVars, Drought_Main, Drought_InitAll, Drought_Finish}, {HeavyRain_InitVars, Rain_Main, HeavyRain_InitAll, Rain_Finish}, - {sub_8080474, sub_80804F8, sub_80804C8, sub_808056C}, + {Bubbles_InitVars, Bubbles_Main, Bubbles_InitAll, Bubbles_Finish}, }; void (*const gUnknown_083970B8[])(void) = @@ -200,15 +200,15 @@ void StartWeather(void) sub_807CB10(); gWeatherPtr->unknown_6D5 = index; gWeatherPtr->unknown_6D4 = AllocSpritePalette(0x1201); - gWeatherPtr->unknown_6DA = 0; + gWeatherPtr->rainSpriteCount = 0; gWeatherPtr->unknown_6D8 = 0; - gWeatherPtr->cloudsActive = 0; + gWeatherPtr->cloudSpritesCreated = 0; gWeatherPtr->snowflakeSpriteCount = 0; - gWeatherPtr->unknown_700 = 0; - gWeatherPtr->unknown_6FB = 0; - gWeatherPtr->unknown_724 = 0; - gWeatherPtr->unknown_716 = 0; - gWeatherPtr->unknown_717 = 0; + gWeatherPtr->ashSpritesCreated = 0; + gWeatherPtr->fog1SpritesCreated = 0; + gWeatherPtr->fog2SpritesCreated = 0; + gWeatherPtr->sandstormSprites1Created = 0; + gWeatherPtr->sandstormSprites2Created = 0; gWeatherPtr->unknown_72E = 0; gWeatherPtr->unknown_6FA = 0; Weather_SetBlendCoeffs(16, 0); @@ -232,7 +232,7 @@ void DoWeatherEffect(u8 effect) } gWeatherPtr->unknown_6D3 = 0; gWeatherPtr->nextWeather = effect; - gWeatherPtr->unknown_6CE = 0; + gWeatherPtr->finishStep = 0; } void sub_807C988(u8 effect) diff --git a/src/field/field_weather_effects.c b/src/field/field_weather_effects.c index 1ae2d6e56..24a3e7dd4 100644 --- a/src/field/field_weather_effects.c +++ b/src/field/field_weather_effects.c @@ -14,8 +14,8 @@ extern struct Weather *const gWeatherPtr; const u16 gUnknown_08397108[] = INCBIN_U16("graphics/weather/1.gbapal"); const u16 gUnknown_08397128[] = INCBIN_U16("graphics/weather/2.gbapal"); -const u8 gWeatherFog1Tiles[] = INCBIN_U8("graphics/weather/fog1.4bpp"); const u8 gWeatherFog2Tiles[] = INCBIN_U8("graphics/weather/fog2.4bpp"); +const u8 gWeatherFog1Tiles[] = INCBIN_U8("graphics/weather/fog1.4bpp"); const u8 gWeatherCloudTiles[] = INCBIN_U8("graphics/weather/cloud.4bpp"); const u8 gWeatherSnow1Tiles[] = INCBIN_U8("graphics/weather/snow0.4bpp"); const u8 gWeatherSnow2Tiles[] = INCBIN_U8("graphics/weather/snow1.4bpp"); @@ -31,7 +31,7 @@ static const struct Coords16 gUnknown_0839A9C8[] = {10, 78}, }; -static const struct SpriteSheet sCloudSpriteSheet = {gWeatherCloudTiles, 0x800, 0x1200}; +static const struct SpriteSheet sCloudSpriteSheet = {gWeatherCloudTiles, sizeof(gWeatherCloudTiles), 0x1200}; static const struct OamData gOamData_839A9DC = { @@ -94,7 +94,7 @@ void Clouds_InitVars(void) gWeatherPtr->unknown_6C2 = 20; gWeatherPtr->weatherGfxLoaded = FALSE; gWeatherPtr->initStep = 0; - if (gWeatherPtr->cloudsActive == FALSE) + if (gWeatherPtr->cloudSpritesCreated == FALSE) Weather_SetBlendCoeffs(0, 16); } @@ -135,39 +135,43 @@ void sub_807E0A0(void); bool8 Clouds_Finish(void) { - switch (gWeatherPtr->unknown_6CE) + switch (gWeatherPtr->finishStep) { case 0: Weather_SetTargetBlendCoeffs(0, 16, 1); - gWeatherPtr->unknown_6CE++; + gWeatherPtr->finishStep++; return TRUE; case 1: if (Weather_UpdateBlend()) { sub_807E0A0(); - gWeatherPtr->unknown_6CE++; + gWeatherPtr->finishStep++; } return TRUE; } return FALSE; } -void sub_807DF9C(void) +//------------------------------------------------------------------------------ +// Weather 2 +//------------------------------------------------------------------------------ + +void Weather2_InitVars(void) { gWeatherPtr->unknown_6C1 = 0; gWeatherPtr->unknown_6C2 = 20; } -void sub_807DFC0(void) +void Weather2_InitAll(void) { - sub_807DF9C(); + Weather2_InitVars(); } -void nullsub_55(void) +void Weather2_Main(void) { } -int sub_807DFD0(void) +int Weather2_Finish(void) { return 0; } @@ -176,7 +180,7 @@ void CreateCloudSprites(void) { u16 i; - if (gWeatherPtr->cloudsActive == TRUE) + if (gWeatherPtr->cloudSpritesCreated == TRUE) return; LoadSpriteSheet(&sCloudSpriteSheet); sub_807D8C0(gUnknown_08397108); @@ -188,32 +192,32 @@ void CreateCloudSprites(void) { struct Sprite *sprite; - gWeatherPtr->cloudSprites[i] = &gSprites[spriteId]; - sprite = gWeatherPtr->cloudSprites[i]; + gWeatherPtr->sprites.s1.cloudSprites[i] = &gSprites[spriteId]; + sprite = gWeatherPtr->sprites.s1.cloudSprites[i]; sub_80603CC(gUnknown_0839A9C8[i].x + 7, gUnknown_0839A9C8[i].y + 7, &sprite->pos1.x, &sprite->pos1.y); sprite->coordOffsetEnabled = TRUE; } else { - gWeatherPtr->cloudSprites[i] = NULL; + gWeatherPtr->sprites.s1.cloudSprites[i] = NULL; } } - gWeatherPtr->cloudsActive = TRUE; + gWeatherPtr->cloudSpritesCreated = TRUE; } void sub_807E0A0(void) { u16 i; - if (gWeatherPtr->cloudsActive == FALSE) + if (gWeatherPtr->cloudSpritesCreated == FALSE) return; for (i = 0; i < 3; i++) { - if (gWeatherPtr->cloudSprites[i] != NULL) - DestroySprite(gWeatherPtr->cloudSprites[i]); + if (gWeatherPtr->sprites.s1.cloudSprites[i] != NULL) + DestroySprite(gWeatherPtr->sprites.s1.cloudSprites[i]); } FreeSpriteTilesByTag(0x1200); - gWeatherPtr->cloudsActive = FALSE; + gWeatherPtr->cloudSpritesCreated = FALSE; } void sub_807E0F4(struct Sprite *sprite) @@ -223,7 +227,11 @@ void sub_807E0F4(struct Sprite *sprite) sprite->pos1.x--; } -void sub_807E110(void) +//------------------------------------------------------------------------------ +// Drought +//------------------------------------------------------------------------------ + +void Drought_InitVars(void) { gWeatherPtr->initStep = 0; gWeatherPtr->weatherGfxLoaded = FALSE; @@ -231,16 +239,16 @@ void sub_807E110(void) gWeatherPtr->unknown_6C2 = 0; } -void sub_807E174(void); +void Drought_Main(void); -void sub_807E144(void) +void Drought_InitAll(void) { - sub_807E110(); + Drought_InitVars(); while (gWeatherPtr->weatherGfxLoaded == FALSE) - sub_807E174(); + Drought_Main(); } -void sub_807E174(void) +void Drought_Main(void) { switch (gWeatherPtr->initStep) { @@ -274,7 +282,7 @@ void sub_807E174(void) } } -int sub_807E258(void) +int Drought_Finish(void) { return 0; } @@ -374,7 +382,7 @@ void LightRain_InitAll(void) } void LoadRainSpriteSheet(void); -u8 CreateRainSprites(void); +u8 CreateRainSprite(void); u8 sub_807E8E8(void); void LightRain_Main(void) @@ -386,7 +394,7 @@ void LightRain_Main(void) gWeatherPtr->initStep++; break; case 1: - if (CreateRainSprites() == 0) + if (CreateRainSprite() == 0) gWeatherPtr->initStep++; break; case 2: @@ -399,31 +407,31 @@ void LightRain_Main(void) } } -void sub_807E974(void); +void DestroyRainSprites(void); bool8 LightRain_Finish(void) { - switch (gWeatherPtr->unknown_6CE) + switch (gWeatherPtr->finishStep) { case 0: if (gWeatherPtr->nextWeather == WEATHER_RAIN_LIGHT || gWeatherPtr->nextWeather == WEATHER_RAIN_MED || gWeatherPtr->nextWeather == WEATHER_RAIN_HEAVY) { - gWeatherPtr->unknown_6CE = 0xFF; + gWeatherPtr->finishStep = 0xFF; return FALSE; } else { gWeatherPtr->unknown_6D9 = 0; - gWeatherPtr->unknown_6CE++; + gWeatherPtr->finishStep++; } // fall through case 1: if (sub_807E8E8() == FALSE) { - sub_807E974(); - gWeatherPtr->unknown_6CE++; + DestroyRainSprites(); + gWeatherPtr->finishStep++; return FALSE; } return TRUE; @@ -545,7 +553,7 @@ void LoadRainSpriteSheet(void) LoadSpriteSheet(&sRainSpriteSheet); } -const struct Coords16 gUnknown_0839AA08[] = +static const struct Coords16 sRainSpriteCoords[] = { { 0, 0}, { 0, 160}, @@ -775,8 +783,8 @@ static const union AffineAnimCmd *const gSpriteAffineAnimTable_839AB8C[] = gSpriteAffineAnim_839AB7C, }; -static void Fog2SpriteCallback(struct Sprite *); -static const struct SpriteTemplate sFog2SpriteTemplate = +static void Fog1SpriteCallback(struct Sprite *); +static const struct SpriteTemplate sFog1SpriteTemplate = { .tileTag = 4609, .paletteTag = 4608, @@ -784,48 +792,48 @@ static const struct SpriteTemplate sFog2SpriteTemplate = .anims = gSpriteAnimTable_839AB64, .images = NULL, .affineAnims = gSpriteAffineAnimTable_839AB8C, - .callback = Fog2SpriteCallback, + .callback = Fog1SpriteCallback, }; -bool8 CreateRainSprites(void) +bool8 CreateRainSprite(void) { - u8 r7; + u8 spriteNum; u8 spriteId; - if (gWeatherPtr->unknown_6DA == 24) + if (gWeatherPtr->rainSpriteCount == 24) return FALSE; - r7 = gWeatherPtr->unknown_6DA; + spriteNum = gWeatherPtr->rainSpriteCount; spriteId = CreateSpriteAtEnd(&sRainSpriteTemplate, - gUnknown_0839AA08[r7].x, gUnknown_0839AA08[r7].y, 78); + sRainSpriteCoords[spriteNum].x, sRainSpriteCoords[spriteNum].y, 78); if (spriteId != 64) { gSprites[spriteId].data[5] = 0; - gSprites[spriteId].data[1] = r7 * 145; + gSprites[spriteId].data[1] = spriteNum * 145; while (gSprites[spriteId].data[1] >= 600) gSprites[spriteId].data[1] -= 600; sub_807E4EC(&gSprites[spriteId]); - sub_807E6F0(&gSprites[spriteId], r7 * 9); + sub_807E6F0(&gSprites[spriteId], spriteNum * 9); gSprites[spriteId].invisible = TRUE; - gWeatherPtr->rainSprites[r7] = &gSprites[spriteId]; + gWeatherPtr->sprites.s1.rainSprites[spriteNum] = &gSprites[spriteId]; } else { - gWeatherPtr->rainSprites[r7] = NULL; + gWeatherPtr->sprites.s1.rainSprites[spriteNum] = NULL; } - if (++gWeatherPtr->unknown_6DA == 24) + if (++gWeatherPtr->rainSpriteCount == 24) { u16 i; for (i = 0; i < 24; i++) { - if (gWeatherPtr->rainSprites[i] != NULL) + if (gWeatherPtr->sprites.s1.rainSprites[i] != NULL) { - if (gWeatherPtr->rainSprites[i]->data[6] == 0) - gWeatherPtr->rainSprites[i]->callback = sub_807E5C0; + if (gWeatherPtr->sprites.s1.rainSprites[i]->data[6] == 0) + gWeatherPtr->sprites.s1.rainSprites[i]->callback = sub_807E5C0; else - gWeatherPtr->rainSprites[i]->callback = sub_807E6C4; + gWeatherPtr->sprites.s1.rainSprites[i]->callback = sub_807E6C4; } } return FALSE; @@ -843,28 +851,28 @@ bool8 sub_807E8E8(void) gWeatherPtr->unknown_6D6 = 0; if (gWeatherPtr->unknown_6D8 < gWeatherPtr->unknown_6D9) { - gWeatherPtr->rainSprites[gWeatherPtr->unknown_6D8++]->data[5] = 1; + gWeatherPtr->sprites.s1.rainSprites[gWeatherPtr->unknown_6D8++]->data[5] = 1; } else { gWeatherPtr->unknown_6D8--; - gWeatherPtr->rainSprites[gWeatherPtr->unknown_6D8]->data[5] = 0; - gWeatherPtr->rainSprites[gWeatherPtr->unknown_6D8]->invisible = TRUE; + gWeatherPtr->sprites.s1.rainSprites[gWeatherPtr->unknown_6D8]->data[5] = 0; + gWeatherPtr->sprites.s1.rainSprites[gWeatherPtr->unknown_6D8]->invisible = TRUE; } } return TRUE; } -void sub_807E974(void) +void DestroyRainSprites(void) { u16 i; - for (i = 0; i < gWeatherPtr->unknown_6DA; i++) + for (i = 0; i < gWeatherPtr->rainSpriteCount; i++) { - if (gWeatherPtr->rainSprites[i] != NULL) - DestroySprite(gWeatherPtr->rainSprites[i]); + if (gWeatherPtr->sprites.s1.rainSprites[i] != NULL) + DestroySprite(gWeatherPtr->sprites.s1.rainSprites[i]); } - gWeatherPtr->unknown_6DA = 0; + gWeatherPtr->rainSpriteCount = 0; FreeSpriteTilesByTag(0x1206); } @@ -895,7 +903,7 @@ void Snow_InitAll(void) Snow_Main(); for (i = 0; i < gWeatherPtr->snowflakeSpriteCount; i++) { - sub_807ED48(gWeatherPtr->snowflakeSprites[i]); + sub_807ED48(gWeatherPtr->sprites.s1.snowflakeSprites[i]); } } } @@ -913,17 +921,17 @@ void Snow_Main(void) bool8 Snow_Finish(void) { - switch (gWeatherPtr->unknown_6CE) + switch (gWeatherPtr->finishStep) { case 0: gWeatherPtr->unknown_6E5 = 0; gWeatherPtr->unknown_6E0 = 0; - gWeatherPtr->unknown_6CE++; + gWeatherPtr->finishStep++; // fall through case 1: if (snowflakes_progress() == FALSE) { - gWeatherPtr->unknown_6CE++; + gWeatherPtr->finishStep++; return FALSE; } return TRUE; @@ -962,7 +970,7 @@ bool8 CreateSnowflakeSprite(void) gSprites[spriteId].data[4] = gWeatherPtr->snowflakeSpriteCount; sub_807EC40(&gSprites[spriteId]); gSprites[spriteId].coordOffsetEnabled = TRUE; - gWeatherPtr->snowflakeSprites[gWeatherPtr->snowflakeSpriteCount++] = &gSprites[spriteId]; + gWeatherPtr->sprites.s1.snowflakeSprites[gWeatherPtr->snowflakeSpriteCount++] = &gSprites[spriteId]; return TRUE; } @@ -970,7 +978,7 @@ bool8 RemoveSnowflakeSprite(void) { if (gWeatherPtr->snowflakeSpriteCount != 0) { - DestroySprite(gWeatherPtr->snowflakeSprites[--gWeatherPtr->snowflakeSpriteCount]); + DestroySprite(gWeatherPtr->sprites.s1.snowflakeSprites[--gWeatherPtr->snowflakeSpriteCount]); return TRUE; } return FALSE; @@ -1119,7 +1127,7 @@ void Rain_Main(void) gWeatherPtr->initStep++; break; case 1: - if (CreateRainSprites()) + if (CreateRainSprite()) break; gWeatherPtr->initStep++; break; @@ -1214,11 +1222,11 @@ void Rain_Main(void) bool8 Rain_Finish(void) { - switch (gWeatherPtr->unknown_6CE) + switch (gWeatherPtr->finishStep) { case 0: gWeatherPtr->unknown_6EA = 0; - gWeatherPtr->unknown_6CE++; + gWeatherPtr->finishStep++; // fall through case 1: Rain_Main(); @@ -1229,15 +1237,15 @@ bool8 Rain_Finish(void) || gWeatherPtr->nextWeather == WEATHER_RAIN_HEAVY) return FALSE; gWeatherPtr->unknown_6D9 = 0; - gWeatherPtr->unknown_6CE++; + gWeatherPtr->finishStep++; } break; case 2: if (sub_807E8E8()) break; - sub_807E974(); + DestroyRainSprites(); gWeatherPtr->unknown_6ED = 0; - gWeatherPtr->unknown_6CE++; + gWeatherPtr->finishStep++; return FALSE; default: return FALSE; @@ -1276,38 +1284,38 @@ void UpdateThunderSound(void) } //------------------------------------------------------------------------------ -// Fog 2 +// Fog 1 //------------------------------------------------------------------------------ -void Fog2_Main(void); -static void CreateFog2Sprites(void); -static void DestroyFog2Sprites(void); +void Fog1_Main(void); +static void CreateFog1Sprites(void); +static void DestroyFog1Sprites(void); -void Fog2_InitVars(void) +void Fog1_InitVars(void) { gWeatherPtr->initStep = 0; gWeatherPtr->weatherGfxLoaded = FALSE; gWeatherPtr->unknown_6C1 = 0; gWeatherPtr->unknown_6C2 = 20; - if (gWeatherPtr->unknown_6FB == 0) + if (gWeatherPtr->fog1SpritesCreated == 0) { gWeatherPtr->unknown_6F0 = 0; gWeatherPtr->unknown_6F2 = 0; - gWeatherPtr->fog2ScrollPosX = 0; + gWeatherPtr->fog1ScrollPosX = 0; Weather_SetBlendCoeffs(0, 16); } } -void Fog2_InitAll(void) +void Fog1_InitAll(void) { - Fog2_InitVars(); + Fog1_InitVars(); while (gWeatherPtr->weatherGfxLoaded == FALSE) - Fog2_Main(); + Fog1_Main(); } -void Fog2_Main(void) +void Fog1_Main(void) { - gWeatherPtr->fog2ScrollPosX = (gSpriteCoordOffsetX - gWeatherPtr->unknown_6F2) & 0xFF; + gWeatherPtr->fog1ScrollPosX = (gSpriteCoordOffsetX - gWeatherPtr->unknown_6F2) & 0xFF; if (++gWeatherPtr->unknown_6F0 > 3) { gWeatherPtr->unknown_6F0 = 0; @@ -1316,8 +1324,8 @@ void Fog2_Main(void) switch (gWeatherPtr->initStep) { case 0: - CreateFog2Sprites(); - if (gWeatherPtr->currWeather == WEATHER_FOG_2) + CreateFog1Sprites(); + if (gWeatherPtr->currWeather == WEATHER_FOG_1) Weather_SetTargetBlendCoeffs(12, 8, 3); else Weather_SetTargetBlendCoeffs(4, 16, 0); @@ -1333,28 +1341,28 @@ void Fog2_Main(void) } } -bool8 Fog2_Finish(void) +bool8 Fog1_Finish(void) { - gWeatherPtr->fog2ScrollPosX = (gSpriteCoordOffsetX - gWeatherPtr->unknown_6F2) & 0xFF; + gWeatherPtr->fog1ScrollPosX = (gSpriteCoordOffsetX - gWeatherPtr->unknown_6F2) & 0xFF; if (++gWeatherPtr->unknown_6F0 > 3) { gWeatherPtr->unknown_6F0 = 0; gWeatherPtr->unknown_6F2++; } - switch (gWeatherPtr->unknown_6CE) + switch (gWeatherPtr->finishStep) { case 0: Weather_SetTargetBlendCoeffs(0, 16, 3); - gWeatherPtr->unknown_6CE++; + gWeatherPtr->finishStep++; break; case 1: if (!Weather_UpdateBlend()) break; - gWeatherPtr->unknown_6CE++; + gWeatherPtr->finishStep++; break; case 2: - DestroyFog2Sprites(); - gWeatherPtr->unknown_6CE++; + DestroyFog1Sprites(); + gWeatherPtr->finishStep++; break; default: return FALSE; @@ -1364,29 +1372,29 @@ bool8 Fog2_Finish(void) #define sprColumn data[0] -static void Fog2SpriteCallback(struct Sprite *sprite) +static void Fog1SpriteCallback(struct Sprite *sprite) { sprite->pos2.y = (u8)gSpriteCoordOffsetY; - sprite->pos1.x = gWeatherPtr->fog2ScrollPosX + 32 + sprite->sprColumn * 64; + sprite->pos1.x = gWeatherPtr->fog1ScrollPosX + 32 + sprite->sprColumn * 64; if (sprite->pos1.x > 0x10F) { - sprite->pos1.x = 480 + gWeatherPtr->fog2ScrollPosX - (4 - sprite->sprColumn) * 64; + sprite->pos1.x = 480 + gWeatherPtr->fog1ScrollPosX - (4 - sprite->sprColumn) * 64; sprite->pos1.x &= 0x1FF; } } -static void CreateFog2Sprites(void) +static void CreateFog1Sprites(void) { u16 i; - if (gWeatherPtr->unknown_6FB == 0) + if (!gWeatherPtr->fog1SpritesCreated) { - struct SpriteSheet fog2SpriteSheet = {gWeatherFog2Tiles, sizeof(gWeatherFog2Tiles), 0x1201}; + struct SpriteSheet fog1SpriteSheet = {gWeatherFog1Tiles, sizeof(gWeatherFog1Tiles), 0x1201}; - LoadSpriteSheet(&fog2SpriteSheet); + LoadSpriteSheet(&fog1SpriteSheet); for (i = 0; i < 20; i++) { - u8 spriteId = CreateSpriteAtEnd(&sFog2SpriteTemplate, 0, 0, 0xFF); + u8 spriteId = CreateSpriteAtEnd(&sFog1SpriteTemplate, 0, 0, 0xFF); if (spriteId != MAX_SPRITES) { @@ -1395,66 +1403,66 @@ static void CreateFog2Sprites(void) sprite->sprColumn = i % 5; sprite->pos1.x = (i % 5) * 64 + 32; sprite->pos1.y = (i / 5) * 64 + 32; - ((struct Weather2 *)gWeatherPtr)->fogSprites[i] = sprite; + gWeatherPtr->sprites.s2.fog1Sprites[i] = sprite; } else { - ((struct Weather2 *)gWeatherPtr)->fogSprites[i] = NULL; + gWeatherPtr->sprites.s2.fog1Sprites[i] = NULL; } } - gWeatherPtr->unknown_6FB = 1; + gWeatherPtr->fog1SpritesCreated = TRUE; } } #undef sprColumn -static void DestroyFog2Sprites(void) +static void DestroyFog1Sprites(void) { u16 i; - if (gWeatherPtr->unknown_6FB != 0) + if (gWeatherPtr->fog1SpritesCreated) { for (i = 0; i < 20; i++) { - if (((struct Weather2 *)gWeatherPtr)->fogSprites[i] != NULL) - DestroySprite(((struct Weather2 *)gWeatherPtr)->fogSprites[i]); + if (gWeatherPtr->sprites.s2.fog1Sprites[i] != NULL) + DestroySprite(gWeatherPtr->sprites.s2.fog1Sprites[i]); } FreeSpriteTilesByTag(0x1201); - gWeatherPtr->unknown_6FB = 0; + gWeatherPtr->fog1SpritesCreated = 0; } } //------------------------------------------------------------------------------ -// Fog 1 +// Volcanic ash //------------------------------------------------------------------------------ -void Fog1_InitVars(void) +void Ash_Main(void); +void LoadAshSpriteSheet(void); +void CreateAshSprites(void); +void DestroyAshSprites(void); + +void Ash_InitVars(void) { gWeatherPtr->initStep = 0; gWeatherPtr->weatherGfxLoaded = FALSE; gWeatherPtr->unknown_6C1 = 0; gWeatherPtr->unknown_6C2 = 20; gWeatherPtr->unknown_6FE = 20; - if (gWeatherPtr->unknown_700 == 0) + if (!gWeatherPtr->ashSpritesCreated) { Weather_SetBlendCoeffs(0, 16); REG_BLDALPHA = BLDALPHA_BLEND(64, 63); // Those aren't even valid coefficients! } } -void sub_807F888(void); - -void sub_807F858(void) +void Ash_InitAll(void) { - Fog1_InitVars(); + Ash_InitVars(); while (gWeatherPtr->weatherGfxLoaded == FALSE) - sub_807F888(); + Ash_Main(); } -void sub_807F99C(void); -void sub_807F9AC(void); - -void sub_807F888(void) +void Ash_Main(void) { gWeatherPtr->unknown_6FC = gSpriteCoordOffsetX & 0x1FF; while (gWeatherPtr->unknown_6FC > 0xEF) @@ -1462,12 +1470,12 @@ void sub_807F888(void) switch (gWeatherPtr->initStep) { case 0: - sub_807F99C(); + LoadAshSpriteSheet(); gWeatherPtr->initStep++; break; case 1: - if (gWeatherPtr->unknown_700 == 0) - sub_807F9AC(); + if (!gWeatherPtr->ashSpritesCreated) + CreateAshSprites(); Weather_SetTargetBlendCoeffs(16, 0, 1); gWeatherPtr->initStep++; break; @@ -1483,25 +1491,23 @@ void sub_807F888(void) } } -void sub_807FA54(void); - -bool8 sub_807F934(void) +bool8 Ash_Finish(void) { - switch (gWeatherPtr->unknown_6CE) + switch (gWeatherPtr->finishStep) { case 0: Weather_SetTargetBlendCoeffs(0, 16, 1); - gWeatherPtr->unknown_6CE++; + gWeatherPtr->finishStep++; break; case 1: if (!Weather_UpdateBlend()) break; - sub_807FA54(); - gWeatherPtr->unknown_6CE++; + DestroyAshSprites(); + gWeatherPtr->finishStep++; break; case 2: REG_BLDALPHA = 0; - gWeatherPtr->unknown_6CE++; + gWeatherPtr->finishStep++; return FALSE; default: return FALSE; @@ -1509,11 +1515,11 @@ bool8 sub_807F934(void) return TRUE; } -const struct SpriteSheet gWeatherAshSpriteSheet = {gWeatherAshTiles, sizeof(gWeatherAshTiles), 0x1202}; +static const struct SpriteSheet sAshSpriteSheet = {gWeatherAshTiles, sizeof(gWeatherAshTiles), 0x1202}; -void sub_807F99C(void) +void LoadAshSpriteSheet(void) { - LoadSpriteSheet(&gWeatherAshSpriteSheet); + LoadSpriteSheet(&sAshSpriteSheet); } const struct OamData gOamData_839ABB8 = @@ -1546,7 +1552,7 @@ const union AnimCmd *const gSpriteAnimTable_839ABCC[] = }; void sub_807FAA8(struct Sprite *); -const struct SpriteTemplate gSpriteTemplate_839ABD0 = +static const struct SpriteTemplate sAshSpriteTemplate = { .tileTag = 4610, .paletteTag = 4608, @@ -1557,15 +1563,15 @@ const struct SpriteTemplate gSpriteTemplate_839ABD0 = .callback = sub_807FAA8, }; -void sub_807F9AC(void) +void CreateAshSprites(void) { u8 i; - if (gWeatherPtr->unknown_700 == 0) + if (!gWeatherPtr->ashSpritesCreated) { for (i = 0; i < 20; i++) { - u8 spriteId = CreateSpriteAtEnd(&gSpriteTemplate_839ABD0, 0, 0, 0x4E); + u8 spriteId = CreateSpriteAtEnd(&sAshSpriteTemplate, 0, 0, 0x4E); if (spriteId != MAX_SPRITES) { @@ -1575,30 +1581,30 @@ void sub_807F9AC(void) sprite->data[2] = (u8)(i % 5); sprite->data[3] = (u8)(i / 5); sprite->data[0] = sprite->data[3] * 64 + 32; - ((struct Weather2 *)gWeatherPtr)->fog1Sprites[i] = sprite; + gWeatherPtr->sprites.s2.ashSprites[i] = sprite; } else { - ((struct Weather2 *)gWeatherPtr)->fog1Sprites[i] = NULL; + gWeatherPtr->sprites.s2.ashSprites[i] = NULL; } } - gWeatherPtr->unknown_700 = 1; + gWeatherPtr->ashSpritesCreated = TRUE; } } -void sub_807FA54(void) +void DestroyAshSprites(void) { u16 i; - if (gWeatherPtr->unknown_700 != 0) + if (gWeatherPtr->ashSpritesCreated) { for (i = 0; i < 20; i++) { - if (((struct Weather2 *)gWeatherPtr)->fog1Sprites[i] != NULL) - DestroySprite(((struct Weather2 *)gWeatherPtr)->fog1Sprites[i]); + if (gWeatherPtr->sprites.s2.ashSprites[i] != NULL) + DestroySprite(gWeatherPtr->sprites.s2.ashSprites[i]); } FreeSpriteTilesByTag(0x1202); - gWeatherPtr->unknown_700 = 0; + gWeatherPtr->ashSpritesCreated = FALSE; } } @@ -1619,7 +1625,11 @@ void sub_807FAA8(struct Sprite *sprite) } } -void sub_807FB24(void) +//------------------------------------------------------------------------------ +// Fog 2 +//------------------------------------------------------------------------------ + +void Fog2_InitVars(void) { gWeatherPtr->initStep = 0; gWeatherPtr->weatherGfxLoaded = 0; @@ -1627,7 +1637,7 @@ void sub_807FB24(void) gWeatherPtr->unknown_6C2 = 20; gWeatherPtr->unknown_6F0 = 0; gWeatherPtr->unknown_6F2 = 1; - if (gWeatherPtr->unknown_724 == 0) + if (gWeatherPtr->fog2SpritesCreated == 0) { gWeatherPtr->unknown_71C = 0; gWeatherPtr->unknown_71E = 0; @@ -1639,25 +1649,25 @@ void sub_807FB24(void) } } -void sub_807FBD8(void); +void Fog2_Main(void); -void sub_807FBA8(void) +void Fog2_InitAll(void) { - sub_807FB24(); + Fog2_InitVars(); while (gWeatherPtr->weatherGfxLoaded == FALSE) - sub_807FBD8(); + Fog2_Main(); } void sub_807FC9C(void); -void sub_807FD30(void); +void CreateFog2Sprites(void); -void sub_807FBD8(void) +void Fog2_Main(void) { sub_807FC9C(); switch (gWeatherPtr->initStep) { case 0: - sub_807FD30(); + CreateFog2Sprites(); gWeatherPtr->initStep++; break; case 1: @@ -1673,25 +1683,25 @@ void sub_807FBD8(void) } } -void sub_807FDE8(void); +void DestroyFog2Sprites(void); -bool8 sub_807FC3C(void) +bool8 Fog2_Finish(void) { sub_807FC9C(); - switch (gWeatherPtr->unknown_6CE) + switch (gWeatherPtr->finishStep) { case 0: Weather_SetTargetBlendCoeffs(0, 16, 1); - gWeatherPtr->unknown_6CE++; + gWeatherPtr->finishStep++; break; case 1: if (!Weather_UpdateBlend()) break; - gWeatherPtr->unknown_6CE++; + gWeatherPtr->finishStep++; break; case 2: - sub_807FDE8(); - gWeatherPtr->unknown_6CE++; + DestroyFog2Sprites(); + gWeatherPtr->finishStep++; break; default: return FALSE; @@ -1717,20 +1727,20 @@ void sub_807FC9C(void) gWeatherPtr->unknown_71A = gSpriteCoordOffsetY + gWeatherPtr->unknown_722; } -extern const struct SpriteTemplate gSpriteTemplate_839AC04; // defined below +extern const struct SpriteTemplate sFog2SpriteTemplate; // defined below -void sub_807FD30(void) +void CreateFog2Sprites(void) { u16 i; - if (gWeatherPtr->unknown_724 == 0) + if (!gWeatherPtr->fog2SpritesCreated) { - struct SpriteSheet fog1SpriteSheet = {gWeatherFog1Tiles, sizeof(gWeatherFog1Tiles), 0x1203}; + struct SpriteSheet fog2SpriteSheet = {gWeatherFog2Tiles, sizeof(gWeatherFog2Tiles), 0x1203}; - LoadSpriteSheet(&fog1SpriteSheet); + LoadSpriteSheet(&fog2SpriteSheet); for (i = 0; i < 20; i++) { - u8 spriteId = CreateSpriteAtEnd(&gSpriteTemplate_839AC04, 0, (i / 5) * 64, 0xFF); + u8 spriteId = CreateSpriteAtEnd(&sFog2SpriteTemplate, 0, (i / 5) * 64, 0xFF); if (spriteId != MAX_SPRITES) { @@ -1738,14 +1748,14 @@ void sub_807FD30(void) sprite->data[0] = i % 5; sprite->data[1] = i / 5; - ((struct Weather2 *)gWeatherPtr)->unknown_140[i] = sprite; + gWeatherPtr->sprites.s2.fog2Sprites[i] = sprite; } else { - ((struct Weather2 *)gWeatherPtr)->unknown_140[i] = NULL; + gWeatherPtr->sprites.s2.fog2Sprites[i] = NULL; } } - gWeatherPtr->unknown_724 = 1; + gWeatherPtr->fog2SpritesCreated = TRUE; } } @@ -1777,8 +1787,8 @@ const union AnimCmd *const gSpriteAnimTable_839AC00[] = gSpriteAnim_839ABF8, }; -void sub_807FE3C(struct Sprite *); -const struct SpriteTemplate gSpriteTemplate_839AC04 = +void Fog2SpriteCallback(struct Sprite *); +const struct SpriteTemplate sFog2SpriteTemplate = { .tileTag = 4611, .paletteTag = 4608, @@ -1786,26 +1796,26 @@ const struct SpriteTemplate gSpriteTemplate_839AC04 = .anims = gSpriteAnimTable_839AC00, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_807FE3C, + .callback = Fog2SpriteCallback, }; -void sub_807FDE8(void) +void DestroyFog2Sprites(void) { u16 i; - if (gWeatherPtr->unknown_724 != 0) + if (gWeatherPtr->fog2SpritesCreated) { for (i = 0; i < 20; i++) { - if (((struct Weather2 *)gWeatherPtr)->unknown_140[i] != NULL) - DestroySprite(((struct Weather2 *)gWeatherPtr)->unknown_140[i]); + if (gWeatherPtr->sprites.s2.fog2Sprites[i] != NULL) + DestroySprite(gWeatherPtr->sprites.s2.fog2Sprites[i]); } FreeSpriteTilesByTag(0x1203); - gWeatherPtr->unknown_724 = 0; + gWeatherPtr->fog2SpritesCreated = FALSE; } } -void sub_807FE3C(struct Sprite *sprite) +void Fog2SpriteCallback(struct Sprite *sprite) { sprite->pos2.y = gWeatherPtr->unknown_71A; sprite->pos1.x = gWeatherPtr->unknown_718 + 32 + sprite->data[0] * 64; @@ -1816,13 +1826,17 @@ void sub_807FE3C(struct Sprite *sprite) } } -void sub_807FE9C(void) +//------------------------------------------------------------------------------ +// Sandstorm +//------------------------------------------------------------------------------ + +void Sandstorm_InitVars(void) { gWeatherPtr->initStep = 0; gWeatherPtr->weatherGfxLoaded = 0; gWeatherPtr->unknown_6C1 = 0; gWeatherPtr->unknown_6C2 = 20; - if (gWeatherPtr->unknown_716 == 0) + if (gWeatherPtr->sandstormSprites1Created == 0) { gWeatherPtr->unknown_704 = gWeatherPtr->unknown_708 = 0; gWeatherPtr->unknown_712 = 8; @@ -1834,21 +1848,21 @@ void sub_807FE9C(void) } } -void sub_807FF4C(void); +void Sandstorm_Main(void); -void sub_807FF1C(void) +void Sandstorm_InitAll(void) { - sub_807FE9C(); + Sandstorm_InitVars(); while (gWeatherPtr->weatherGfxLoaded == FALSE) - sub_807FF4C(); + Sandstorm_Main(); } void sub_808002C(void); void sub_8080064(void); -void sub_8080178(void); -void sub_8080238(void); +void CreateSandstormSprites_1(void); +void CreateSandstormSprites_2(void); -void sub_807FF4C(void) +void Sandstorm_Main(void) { sub_8080064(); sub_808002C(); @@ -1857,8 +1871,8 @@ void sub_807FF4C(void) switch (gWeatherPtr->initStep) { case 0: - sub_8080178(); - sub_8080238(); + CreateSandstormSprites_1(); + CreateSandstormSprites_2(); gWeatherPtr->initStep++; break; case 1: @@ -1876,24 +1890,24 @@ void sub_807FF4C(void) void sub_80800E4(void); -bool8 sub_807FFC8(void) +bool8 Sandstorm_Finish(void) { sub_8080064(); sub_808002C(); - switch (gWeatherPtr->unknown_6CE) + switch (gWeatherPtr->finishStep) { case 0: Weather_SetTargetBlendCoeffs(0, 16, 0); - gWeatherPtr->unknown_6CE++; + gWeatherPtr->finishStep++; break; case 1: if (!Weather_UpdateBlend()) break; - gWeatherPtr->unknown_6CE++; + gWeatherPtr->finishStep++; break; case 2: sub_80800E4(); - gWeatherPtr->unknown_6CE++; + gWeatherPtr->finishStep++; break; default: return FALSE; @@ -1922,25 +1936,25 @@ void sub_80800E4(void) { u16 i; - if (gWeatherPtr->unknown_716 != 0) + if (gWeatherPtr->sandstormSprites1Created) { for (i = 0; i < 20; i++) { - if (((struct Weather2 *)gWeatherPtr)->unknown_190[i] != NULL) - DestroySprite(((struct Weather2 *)gWeatherPtr)->unknown_190[i]); + if (gWeatherPtr->sprites.s2.sandstormSprites1[i] != NULL) + DestroySprite(gWeatherPtr->sprites.s2.sandstormSprites1[i]); } - gWeatherPtr->unknown_716 = 0; + gWeatherPtr->sandstormSprites1Created = FALSE; FreeSpriteTilesByTag(0x1204); } - if (gWeatherPtr->unknown_717 != 0) + if (gWeatherPtr->sandstormSprites2Created) { for (i = 0; i < 5; i++) { - if (((struct Weather2 *)gWeatherPtr)->unknown_1E0[i] != NULL) - DestroySprite(((struct Weather2 *)gWeatherPtr)->unknown_1E0[i]); + if (gWeatherPtr->sprites.s2.sandstormSprites2[i] != NULL) + DestroySprite(gWeatherPtr->sprites.s2.sandstormSprites2[i]); } - gWeatherPtr->unknown_717 = 0; + gWeatherPtr->sandstormSprites2Created = FALSE; } } @@ -1979,8 +1993,8 @@ const union AnimCmd *const gSpriteAnimTable_839AC34[] = gSpriteAnim_839AC2C, }; -void sub_8080338(struct Sprite *); -const struct SpriteTemplate gSpriteTemplate_839AC3C = +void SandstormSpriteCallback1(struct Sprite *); +const struct SpriteTemplate sSandstormSpriteTemplate = { .tileTag = 4612, .paletteTag = 4609, @@ -1988,75 +2002,75 @@ const struct SpriteTemplate gSpriteTemplate_839AC3C = .anims = gSpriteAnimTable_839AC34, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_8080338, + .callback = SandstormSpriteCallback1, }; -const struct SpriteSheet gWeatherSandstormSpriteSheet = {gWeatherSandstormTiles, sizeof(gWeatherSandstormTiles), 0x1204}; +static const struct SpriteSheet sSandstormSpriteSheet = {gWeatherSandstormTiles, sizeof(gWeatherSandstormTiles), 0x1204}; -void sub_8080178(void) +void CreateSandstormSprites_1(void) { u16 i; - if (gWeatherPtr->unknown_716 == 0) + if (!gWeatherPtr->sandstormSprites1Created) { - LoadSpriteSheet(&gWeatherSandstormSpriteSheet); + LoadSpriteSheet(&sSandstormSpriteSheet); sub_807D8C0(gUnknown_08397128); for (i = 0; i < 20; i++) { - u8 spriteId = CreateSpriteAtEnd(&gSpriteTemplate_839AC3C, 0, (i / 5) * 64, 1); + u8 spriteId = CreateSpriteAtEnd(&sSandstormSpriteTemplate, 0, (i / 5) * 64, 1); if (spriteId != MAX_SPRITES) { - ((struct Weather2 *)gWeatherPtr)->unknown_190[i] = &gSprites[spriteId]; - ((struct Weather2 *)gWeatherPtr)->unknown_190[i]->data[0] = i % 5; - ((struct Weather2 *)gWeatherPtr)->unknown_190[i]->data[1] = i / 5; + gWeatherPtr->sprites.s2.sandstormSprites1[i] = &gSprites[spriteId]; + gWeatherPtr->sprites.s2.sandstormSprites1[i]->data[0] = i % 5; + gWeatherPtr->sprites.s2.sandstormSprites1[i]->data[1] = i / 5; } else { - ((struct Weather2 *)gWeatherPtr)->unknown_190[i] = NULL; + gWeatherPtr->sprites.s2.sandstormSprites1[i] = NULL; } } - gWeatherPtr->unknown_716 = 1; + gWeatherPtr->sandstormSprites1Created = TRUE; } } const u16 gUnknown_0839AC5C[] = {0, 120, 80, 160, 40, 0}; -void sub_8080398(struct Sprite *); +void SandstormSpriteCallback2(struct Sprite *); -void sub_8080238(void) +void CreateSandstormSprites_2(void) { u16 i; - if (gWeatherPtr->unknown_717 == 0) + if (!gWeatherPtr->sandstormSprites2Created) { for (i = 0; i < 5; i++) { - u8 spriteId = CreateSpriteAtEnd(&gSpriteTemplate_839AC3C, i * 48 + 0x18, 0xD0, 1); + u8 spriteId = CreateSpriteAtEnd(&sSandstormSpriteTemplate, i * 48 + 0x18, 0xD0, 1); if (spriteId != MAX_SPRITES) { - ((struct Weather2 *)gWeatherPtr)->unknown_1E0[i] = &gSprites[spriteId]; - ((struct Weather2 *)gWeatherPtr)->unknown_1E0[i]->oam.size = 2; - ((struct Weather2 *)gWeatherPtr)->unknown_1E0[i]->data[1] = i * 51; - ((struct Weather2 *)gWeatherPtr)->unknown_1E0[i]->data[0] = 8; - ((struct Weather2 *)gWeatherPtr)->unknown_1E0[i]->data[2] = 0; - ((struct Weather2 *)gWeatherPtr)->unknown_1E0[i]->data[4] = 0x6730; - ((struct Weather2 *)gWeatherPtr)->unknown_1E0[i]->data[3] = gUnknown_0839AC5C[i]; - StartSpriteAnim(((struct Weather2 *)gWeatherPtr)->unknown_1E0[i], 1); - CalcCenterToCornerVec(((struct Weather2 *)gWeatherPtr)->unknown_1E0[i], 0, 2, 0); - ((struct Weather2 *)gWeatherPtr)->unknown_1E0[i]->callback = sub_8080398; + gWeatherPtr->sprites.s2.sandstormSprites2[i] = &gSprites[spriteId]; + gWeatherPtr->sprites.s2.sandstormSprites2[i]->oam.size = 2; + gWeatherPtr->sprites.s2.sandstormSprites2[i]->data[1] = i * 51; + gWeatherPtr->sprites.s2.sandstormSprites2[i]->data[0] = 8; + gWeatherPtr->sprites.s2.sandstormSprites2[i]->data[2] = 0; + gWeatherPtr->sprites.s2.sandstormSprites2[i]->data[4] = 0x6730; + gWeatherPtr->sprites.s2.sandstormSprites2[i]->data[3] = gUnknown_0839AC5C[i]; + StartSpriteAnim(gWeatherPtr->sprites.s2.sandstormSprites2[i], 1); + CalcCenterToCornerVec(gWeatherPtr->sprites.s2.sandstormSprites2[i], 0, 2, 0); + gWeatherPtr->sprites.s2.sandstormSprites2[i]->callback = SandstormSpriteCallback2; } else { - ((struct Weather2 *)gWeatherPtr)->unknown_1E0[i] = NULL; + gWeatherPtr->sprites.s2.sandstormSprites2[i] = NULL; } - gWeatherPtr->unknown_717 = 1; + gWeatherPtr->sandstormSprites2Created = TRUE; } } } -void sub_8080338(struct Sprite *sprite) +void SandstormSpriteCallback1(struct Sprite *sprite) { sprite->pos2.y = gWeatherPtr->unknown_710; sprite->pos1.x = gWeatherPtr->unknown_70E + 32 + sprite->data[0] * 64; @@ -2067,15 +2081,15 @@ void sub_8080338(struct Sprite *sprite) } } -void sub_80803BC(struct Sprite *); +void SandstormSpriteCallback3(struct Sprite *); -void sub_8080398(struct Sprite *sprite) +void SandstormSpriteCallback2(struct Sprite *sprite) { if (--sprite->data[3] == -1) - sprite->callback = sub_80803BC; + sprite->callback = SandstormSpriteCallback3; } -void sub_80803BC(struct Sprite *sprite) +void SandstormSpriteCallback3(struct Sprite *sprite) { u32 x; u32 y; @@ -2097,34 +2111,42 @@ void sub_80803BC(struct Sprite *sprite) } } -void sub_8080430(void) +//------------------------------------------------------------------------------ +// Weather 11 +//------------------------------------------------------------------------------ + +void Weather11_InitVars(void) { gWeatherPtr->initStep = 0; gWeatherPtr->unknown_6C1 = 3; gWeatherPtr->unknown_6C2 = 20; } -void sub_8080460(void) +void Weather11_InitAll(void) { - sub_8080430(); + Weather11_InitVars(); } -void nullsub_56(void) +void Weather11_Main(void) { } -bool8 sub_8080470(void) +bool8 Weather11_Finish(void) { return FALSE; } +//------------------------------------------------------------------------------ +// Weather 14 +//------------------------------------------------------------------------------ + const u8 gUnknown_0839AC68[] = {40, 90, 60, 90, 2, 60, 40, 30}; const struct SpriteSheet gWeatherBubbleSpriteSheet = {gWeatherBubbleTiles, sizeof(gWeatherBubbleTiles), 0x1205}; -void sub_8080474(void) +void Bubbles_InitVars(void) { - Fog2_InitVars(); + Fog1_InitVars(); if (gWeatherPtr->unknown_72E == 0) { LoadSpriteSheet(&gWeatherBubbleSpriteSheet); @@ -2135,20 +2157,20 @@ void sub_8080474(void) } } -void sub_80804F8(void); +void Bubbles_Main(void); -void sub_80804C8(void) +void Bubbles_InitAll(void) { - sub_8080474(); + Bubbles_InitVars(); while (gWeatherPtr->weatherGfxLoaded == FALSE) - sub_80804F8(); + Bubbles_Main(); } void sub_8080588(u16); -void sub_80804F8(void) +void Bubbles_Main(void) { - Fog2_Main(); + Fog1_Main(); if (++gWeatherPtr->unknown_726 > gUnknown_0839AC68[gWeatherPtr->unknown_728]) { gWeatherPtr->unknown_726 = 0; @@ -2162,9 +2184,9 @@ void sub_80804F8(void) void sub_8080610(void); -bool8 sub_808056C(void) +bool8 Bubbles_Finish(void) { - if (!Fog2_Finish()) + if (!Fog1_Finish()) { sub_8080610(); return FALSE; @@ -2270,6 +2292,8 @@ void unc_0807DAB4(struct Sprite *sprite) DestroySprite(sprite); } +//------------------------------------------------------------------------------ + u8 TranslateWeatherNum(u8); void UpdateRainCounter(u8, u8); -- cgit v1.2.3 From d373f41c2cbd2dc71ca2287b179c7c8777b9eb02 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Sun, 26 Nov 2017 02:01:36 -0600 Subject: rename rng.c to random.c --- src/battle/battle_2.c | 2 +- src/battle/battle_3.c | 2 +- src/battle/battle_4.c | 2 +- src/battle/battle_ai.c | 2 +- src/battle/battle_setup.c | 2 +- src/battle/battle_transition.c | 2 +- src/battle_anim_80CA710.c | 2 +- src/engine/link.c | 2 +- src/engine/main.c | 2 +- src/engine/random.c | 18 ++++++++++++++++++ src/engine/record_mixing.c | 2 +- src/engine/rng.c | 18 ------------------ src/engine/time_events.c | 2 +- src/field/battle_tower.c | 2 +- src/field/berry.c | 2 +- src/field/daycare.c | 2 +- src/field/dewford_trend.c | 2 +- src/field/easy_chat.c | 2 +- src/field/field_map_obj.c | 2 +- src/field/field_player_avatar.c | 2 +- src/field/field_specials.c | 2 +- src/field/field_weather.c | 2 +- src/field/field_weather_2.c | 2 +- src/field/lottery_corner.c | 2 +- src/field/mauville_man.c | 2 +- src/field/overworld.c | 2 +- src/field/roamer.c | 2 +- src/field/scrcmd.c | 2 +- src/field/tv.c | 4 ++-- src/field/wild_encounter.c | 2 +- src/pokemon/pokedex.c | 2 +- src/pokemon/pokemon_1.c | 2 +- src/pokemon/pokemon_2.c | 2 +- src/pokemon/pokemon_3.c | 2 +- src/scene/berry_blender.c | 2 +- src/scene/contest_painting.c | 2 +- src/scene/credits.c | 2 +- src/scene/egg_hatch.c | 2 +- src/scene/evolution_graphics.c | 2 +- src/scene/hall_of_fame.c | 2 +- src/scene/intro.c | 2 +- src/scene/intro_credits_graphics.c | 2 +- src/scene/new_game.c | 2 +- src/script_pokemon_util_80C4BF0.c | 2 +- 44 files changed, 61 insertions(+), 61 deletions(-) create mode 100644 src/engine/random.c delete mode 100644 src/engine/rng.c (limited to 'src') diff --git a/src/battle/battle_2.c b/src/battle/battle_2.c index 6d406c5e5..a3cd15042 100644 --- a/src/battle/battle_2.c +++ b/src/battle/battle_2.c @@ -13,7 +13,7 @@ #include "pokeball.h" #include "pokedex.h" #include "pokemon.h" -#include "rng.h" +#include "random.h" #include "rom3.h" #include "rom_8077ABC.h" #include "rom_8094928.h" diff --git a/src/battle/battle_3.c b/src/battle/battle_3.c index 958ee0b55..263eb2be5 100644 --- a/src/battle/battle_3.c +++ b/src/battle/battle_3.c @@ -8,7 +8,7 @@ #include "species.h" #include "pokemon.h" #include "data2.h" -#include "rng.h" +#include "random.h" #include "text.h" #include "battle_move_effects.h" #include "string_util.h" diff --git a/src/battle/battle_4.c b/src/battle/battle_4.c index 73530c486..088f30669 100644 --- a/src/battle/battle_4.c +++ b/src/battle/battle_4.c @@ -7,7 +7,7 @@ #include "items.h" #include "data2.h" #include "hold_effects.h" -#include "rng.h" +#include "random.h" #include "rom3.h" #include "species.h" #include "pokemon.h" diff --git a/src/battle/battle_ai.c b/src/battle/battle_ai.c index cb6c10676..0348c3ccd 100644 --- a/src/battle/battle_ai.c +++ b/src/battle/battle_ai.c @@ -7,7 +7,7 @@ #include "item.h" #include "moves.h" #include "pokemon.h" -#include "rng.h" +#include "random.h" #include "rom_8077ABC.h" #include "species.h" #include "util.h" diff --git a/src/battle/battle_setup.c b/src/battle/battle_setup.c index dab87b462..3d63a85c9 100644 --- a/src/battle/battle_setup.c +++ b/src/battle/battle_setup.c @@ -17,7 +17,7 @@ #include "metatile_behavior.h" #include "opponent_constants.h" #include "palette.h" -#include "rng.h" +#include "random.h" #include "overworld.h" #include "safari_zone.h" #include "script.h" diff --git a/src/battle/battle_transition.c b/src/battle/battle_transition.c index 7f6c114f6..f7c8073c5 100644 --- a/src/battle/battle_transition.c +++ b/src/battle/battle_transition.c @@ -6,7 +6,7 @@ #include "palette.h" #include "trig.h" #include "field_effect.h" -#include "rng.h" +#include "random.h" #include "sprite.h" #include "sound.h" #include "songs.h" diff --git a/src/battle_anim_80CA710.c b/src/battle_anim_80CA710.c index 6e4907888..01f445094 100755 --- a/src/battle_anim_80CA710.c +++ b/src/battle_anim_80CA710.c @@ -8,7 +8,7 @@ #include "ewram.h" #include "main.h" #include "palette.h" -#include "rng.h" +#include "random.h" #include "rom_8077ABC.h" #include "songs.h" #include "sound.h" diff --git a/src/engine/link.c b/src/engine/link.c index 002d397d2..441f3707b 100644 --- a/src/engine/link.c +++ b/src/engine/link.c @@ -7,7 +7,7 @@ #include "main.h" #include "menu.h" #include "palette.h" -#include "rng.h" +#include "random.h" #include "save.h" #include "songs.h" #include "sound.h" diff --git a/src/engine/main.c b/src/engine/main.c index ea381cb31..82a5fffb4 100644 --- a/src/engine/main.c +++ b/src/engine/main.c @@ -7,7 +7,7 @@ #include "load_save.h" #include "m4a.h" #include "play_time.h" -#include "rng.h" +#include "random.h" #include "rom3.h" #include "overworld.h" #include "rtc.h" diff --git a/src/engine/random.c b/src/engine/random.c new file mode 100644 index 000000000..8f82b722f --- /dev/null +++ b/src/engine/random.c @@ -0,0 +1,18 @@ +#include "global.h" +#include "random.h" + +// The number 1103515245 comes from the example implementation of rand and srand +// in the ISO C standard. + +u32 gRngValue; + +u16 Random(void) +{ + gRngValue = 1103515245 * gRngValue + 24691; + return gRngValue >> 16; +} + +void SeedRng(u16 seed) +{ + gRngValue = seed; +} diff --git a/src/engine/record_mixing.c b/src/engine/record_mixing.c index cf51bec9e..4b5f1b6d5 100644 --- a/src/engine/record_mixing.c +++ b/src/engine/record_mixing.c @@ -13,7 +13,7 @@ #include "mauville_man.h" #include "menu.h" #include "mystery_event_script.h" -#include "rng.h" +#include "random.h" #include "overworld.h" #include "save.h" #include "script.h" diff --git a/src/engine/rng.c b/src/engine/rng.c deleted file mode 100644 index 7d4b5600e..000000000 --- a/src/engine/rng.c +++ /dev/null @@ -1,18 +0,0 @@ -#include "global.h" -#include "rng.h" - -// The number 1103515245 comes from the example implementation of rand and srand -// in the ISO C standard. - -u32 gRngValue; - -u16 Random(void) -{ - gRngValue = 1103515245 * gRngValue + 24691; - return gRngValue >> 16; -} - -void SeedRng(u16 seed) -{ - gRngValue = seed; -} diff --git a/src/engine/time_events.c b/src/engine/time_events.c index accb03db8..831048add 100644 --- a/src/engine/time_events.c +++ b/src/engine/time_events.c @@ -3,7 +3,7 @@ #include "event_data.h" #include "field_weather.h" #include "pokemon.h" -#include "rng.h" +#include "random.h" #include "overworld.h" #include "rtc.h" #include "script.h" diff --git a/src/field/battle_tower.c b/src/field/battle_tower.c index d6271643c..2b45766dd 100644 --- a/src/field/battle_tower.c +++ b/src/field/battle_tower.c @@ -14,7 +14,7 @@ #include "new_game.h" #include "overworld.h" #include "pokedex.h" -#include "rng.h" +#include "random.h" #include "save.h" #include "script_pokemon_80C4.h" #include "species.h" diff --git a/src/field/berry.c b/src/field/berry.c index cd1fc5c94..973bc56ff 100644 --- a/src/field/berry.c +++ b/src/field/berry.c @@ -8,7 +8,7 @@ #include "item_use.h" #include "items.h" #include "main.h" -#include "rng.h" +#include "random.h" #include "text.h" #define BERRY_NAME_LENGTH 6 diff --git a/src/field/daycare.c b/src/field/daycare.c index 2b58a0d5d..9f7e3b989 100644 --- a/src/field/daycare.c +++ b/src/field/daycare.c @@ -12,7 +12,7 @@ #include "party_menu.h" #include "pokemon.h" #include "pokemon_storage_system.h" -#include "rng.h" +#include "random.h" #include "script.h" #include "songs.h" #include "sound.h" diff --git a/src/field/dewford_trend.c b/src/field/dewford_trend.c index 102784066..bdcd76ec5 100644 --- a/src/field/dewford_trend.c +++ b/src/field/dewford_trend.c @@ -3,7 +3,7 @@ #include "easy_chat.h" #include "event_data.h" #include "link.h" -#include "rng.h" +#include "random.h" #include "text.h" #include "ewram.h" diff --git a/src/field/easy_chat.c b/src/field/easy_chat.c index 8e7413516..7a4ae045e 100644 --- a/src/field/easy_chat.c +++ b/src/field/easy_chat.c @@ -4,7 +4,7 @@ #include "event_data.h" #include "field_message_box.h" #include "pokedex.h" -#include "rng.h" +#include "random.h" #include "string_util.h" #include "strings.h" #include "strings2.h" diff --git a/src/field/field_map_obj.c b/src/field/field_map_obj.c index 98f6fedab..20edbc34f 100644 --- a/src/field/field_map_obj.c +++ b/src/field/field_map_obj.c @@ -10,7 +10,7 @@ #include "field_player_avatar.h" #include "fieldmap.h" #include "palette.h" -#include "rng.h" +#include "random.h" #include "overworld.h" #include "sprite.h" #include "metatile_behavior.h" diff --git a/src/field/field_player_avatar.c b/src/field/field_player_avatar.c index e7da9b1b7..a26638b39 100644 --- a/src/field/field_player_avatar.c +++ b/src/field/field_player_avatar.c @@ -13,7 +13,7 @@ #include "menu.h" #include "metatile_behavior.h" #include "party_menu.h" -#include "rng.h" +#include "random.h" #include "overworld.h" #include "rotating_gate.h" #include "script.h" diff --git a/src/field/field_specials.c b/src/field/field_specials.c index 48e9b44aa..e5bb1b798 100644 --- a/src/field/field_specials.c +++ b/src/field/field_specials.c @@ -34,7 +34,7 @@ #include "battle_tower.h" #include "field_weather.h" #include "pokemon_summary_screen.h" -#include "rng.h" +#include "random.h" #if ENGLISH #define CHAR_DECIMAL_SEPARATOR CHAR_PERIOD diff --git a/src/field/field_weather.c b/src/field/field_weather.c index 2d4711b81..80fe21c4b 100644 --- a/src/field/field_weather.c +++ b/src/field/field_weather.c @@ -3,7 +3,7 @@ #include "field_map_obj.h" #include "field_weather.h" #include "palette.h" -#include "rng.h" +#include "random.h" #include "script.h" #include "songs.h" #include "sound.h" diff --git a/src/field/field_weather_2.c b/src/field/field_weather_2.c index fa97df459..64a5c5dc5 100644 --- a/src/field/field_weather_2.c +++ b/src/field/field_weather_2.c @@ -1,7 +1,7 @@ #include "global.h" #include "field_map_obj.h" #include "field_weather.h" -#include "rng.h" +#include "random.h" #include "script.h" #include "songs.h" #include "sound.h" diff --git a/src/field/lottery_corner.c b/src/field/lottery_corner.c index c2c25b9ac..5f0ce2907 100644 --- a/src/field/lottery_corner.c +++ b/src/field/lottery_corner.c @@ -2,7 +2,7 @@ #include "lottery_corner.h" #include "event_data.h" #include "items.h" -#include "rng.h" +#include "random.h" #include "species.h" #include "string_util.h" #include "text.h" diff --git a/src/field/mauville_man.c b/src/field/mauville_man.c index 33bc39648..a27c54df7 100644 --- a/src/field/mauville_man.c +++ b/src/field/mauville_man.c @@ -7,7 +7,7 @@ #include "m4a.h" #include "menu.h" #include "overworld.h" -#include "rng.h" +#include "random.h" #include "script.h" #include "songs.h" #include "sound.h" diff --git a/src/field/overworld.c b/src/field/overworld.c index 59aac5c33..e6a6a9f11 100644 --- a/src/field/overworld.c +++ b/src/field/overworld.c @@ -32,7 +32,7 @@ #include "new_game.h" #include "palette.h" #include "play_time.h" -#include "rng.h" +#include "random.h" #include "roamer.h" #include "rotating_gate.h" #include "safari_zone.h" diff --git a/src/field/roamer.c b/src/field/roamer.c index c45c87601..d8ea1ef52 100644 --- a/src/field/roamer.c +++ b/src/field/roamer.c @@ -1,7 +1,7 @@ #include "global.h" #include "roamer.h" #include "pokemon.h" -#include "rng.h" +#include "random.h" #include "species.h" #ifdef SAPPHIRE diff --git a/src/field/scrcmd.c b/src/field/scrcmd.c index 28584d4d0..28aa3355a 100644 --- a/src/field/scrcmd.c +++ b/src/field/scrcmd.c @@ -30,7 +30,7 @@ #include "palette.h" #include "party_menu.h" #include "pokemon.h" -#include "rng.h" +#include "random.h" #include "overworld.h" #include "rtc.h" #include "script.h" diff --git a/src/field/tv.c b/src/field/tv.c index 29d012f28..e58adebc9 100644 --- a/src/field/tv.c +++ b/src/field/tv.c @@ -9,7 +9,7 @@ #include "field_message_box.h" #include "field_camera.h" #include "flags.h" -#include "rng.h" +#include "random.h" #include "string_util.h" #include "text.h" #include "species.h" @@ -30,7 +30,7 @@ #include "naming_screen.h" #include "pokedex.h" #include "region_map.h" -#include "rng.h" +#include "random.h" #include "overworld.h" #include "rtc.h" #include "script_menu.h" diff --git a/src/field/wild_encounter.c b/src/field/wild_encounter.c index 390898917..df0b12207 100644 --- a/src/field/wild_encounter.c +++ b/src/field/wild_encounter.c @@ -8,7 +8,7 @@ #include "map_constants.h" #include "metatile_behavior.h" #include "pokeblock.h" -#include "rng.h" +#include "random.h" #include "roamer.h" #include "overworld.h" #include "safari_zone.h" diff --git a/src/pokemon/pokedex.c b/src/pokemon/pokedex.c index cd37c3a93..604085b28 100644 --- a/src/pokemon/pokedex.c +++ b/src/pokemon/pokedex.c @@ -14,7 +14,7 @@ #include "pokedex_area_screen.h" #include "pokedex_cry_screen.h" #include "pokemon.h" -#include "rng.h" +#include "random.h" #include "overworld.h" #include "songs.h" #include "sound.h" diff --git a/src/pokemon/pokemon_1.c b/src/pokemon/pokemon_1.c index 750a9892a..d44a8b61e 100644 --- a/src/pokemon/pokemon_1.c +++ b/src/pokemon/pokemon_1.c @@ -3,7 +3,7 @@ #include "items.h" #include "main.h" #include "pokemon.h" -#include "rng.h" +#include "random.h" #include "overworld.h" #include "species.h" #include "sprite.h" diff --git a/src/pokemon/pokemon_2.c b/src/pokemon/pokemon_2.c index 68923a16e..cedcc2720 100644 --- a/src/pokemon/pokemon_2.c +++ b/src/pokemon/pokemon_2.c @@ -4,7 +4,7 @@ #include "event_data.h" #include "main.h" #include "pokemon.h" -#include "rng.h" +#include "random.h" #include "rom_8077ABC.h" #include "species.h" #include "sprite.h" diff --git a/src/pokemon/pokemon_3.c b/src/pokemon/pokemon_3.c index a8e824b33..40165384d 100644 --- a/src/pokemon/pokemon_3.c +++ b/src/pokemon/pokemon_3.c @@ -10,7 +10,7 @@ #include "m4a.h" #include "main.h" #include "pokemon.h" -#include "rng.h" +#include "random.h" #include "overworld.h" #include "rom_8077ABC.h" #include "rom_8094928.h" diff --git a/src/scene/berry_blender.c b/src/scene/berry_blender.c index 42c79bc99..91b5c10bc 100644 --- a/src/scene/berry_blender.c +++ b/src/scene/berry_blender.c @@ -15,7 +15,7 @@ #include "overworld.h" #include "item.h" #include "items.h" -#include "rng.h" +#include "random.h" #include "save.h" #include "menu_cursor.h" #include "trig.h" diff --git a/src/scene/contest_painting.c b/src/scene/contest_painting.c index 2600076c3..442d8ec26 100644 --- a/src/scene/contest_painting.c +++ b/src/scene/contest_painting.c @@ -6,7 +6,7 @@ #include "main.h" #include "menu.h" #include "palette.h" -#include "rng.h" +#include "random.h" #include "sprite.h" #include "string_util.h" #include "strings.h" diff --git a/src/scene/credits.c b/src/scene/credits.c index ccd4cebc6..fed1d993a 100644 --- a/src/scene/credits.c +++ b/src/scene/credits.c @@ -9,7 +9,7 @@ #include "menu.h" #include "palette.h" #include "pokedex.h" -#include "rng.h" +#include "random.h" #include "songs.h" #include "sound.h" #include "species.h" diff --git a/src/scene/egg_hatch.c b/src/scene/egg_hatch.c index 49cced46a..3675b42cf 100644 --- a/src/scene/egg_hatch.c +++ b/src/scene/egg_hatch.c @@ -11,7 +11,7 @@ #include "overworld.h" #include "palette.h" #include "pokemon.h" -#include "rng.h" +#include "random.h" #include "script.h" #include "songs.h" #include "sound.h" diff --git a/src/scene/evolution_graphics.c b/src/scene/evolution_graphics.c index 66b506fb5..dc0e219c5 100644 --- a/src/scene/evolution_graphics.c +++ b/src/scene/evolution_graphics.c @@ -2,7 +2,7 @@ #include "evolution_graphics.h" #include "sprite.h" #include "trig.h" -#include "rng.h" +#include "random.h" #include "decompress.h" #include "task.h" #include "sound.h" diff --git a/src/scene/hall_of_fame.c b/src/scene/hall_of_fame.c index a1de26c32..63aaf79c9 100644 --- a/src/scene/hall_of_fame.c +++ b/src/scene/hall_of_fame.c @@ -15,7 +15,7 @@ #include "m4a.h" #include "data2.h" #include "decompress.h" -#include "rng.h" +#include "random.h" #include "trig.h" #include "ewram.h" diff --git a/src/scene/intro.c b/src/scene/intro.c index b52fbb3a9..c713071e7 100644 --- a/src/scene/intro.c +++ b/src/scene/intro.c @@ -11,7 +11,7 @@ #include "main.h" #include "new_game.h" #include "palette.h" -#include "rng.h" +#include "random.h" #include "save.h" #include "songs.h" #include "sound.h" diff --git a/src/scene/intro_credits_graphics.c b/src/scene/intro_credits_graphics.c index a150e8dc9..bb80ef3b6 100755 --- a/src/scene/intro_credits_graphics.c +++ b/src/scene/intro_credits_graphics.c @@ -11,7 +11,7 @@ #include "main.h" #include "new_game.h" #include "palette.h" -#include "rng.h" +#include "random.h" #include "save.h" #include "songs.h" #include "sound.h" diff --git a/src/scene/new_game.c b/src/scene/new_game.c index b15282960..ee042a0de 100644 --- a/src/scene/new_game.c +++ b/src/scene/new_game.c @@ -18,7 +18,7 @@ #include "pokedex.h" #include "pokemon_size_record.h" #include "pokemon_storage_system.h" -#include "rng.h" +#include "random.h" #include "roamer.h" #include "overworld.h" #include "rtc.h" diff --git a/src/script_pokemon_util_80C4BF0.c b/src/script_pokemon_util_80C4BF0.c index 1462a985d..9b6265308 100644 --- a/src/script_pokemon_util_80C4BF0.c +++ b/src/script_pokemon_util_80C4BF0.c @@ -17,7 +17,7 @@ #include "menu.h" #include "pokedex.h" #include "pokemon.h" -#include "rng.h" +#include "random.h" #include "overworld.h" #include "script_pokemon_80C4.h" #include "species.h" -- cgit v1.2.3 From 5f242ae6cee377d219defa8290ef1c164b003f52 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Sun, 26 Nov 2017 13:00:26 -0600 Subject: abilities, songs, species constants --- src/battle/battle_2.c | 6 +++--- src/battle/battle_3.c | 4 ++-- src/battle/battle_4.c | 6 +++--- src/battle/battle_7.c | 4 ++-- src/battle/battle_ai.c | 4 ++-- src/battle/battle_controller_linkopponent.c | 2 +- src/battle/battle_controller_linkpartner.c | 2 +- src/battle/battle_controller_opponent.c | 2 +- src/battle/battle_controller_player.c | 2 +- src/battle/battle_controller_safari.c | 2 +- src/battle/battle_controller_wally.c | 2 +- src/battle/battle_interface.c | 2 +- src/battle/battle_party_menu.c | 2 +- src/battle/battle_setup.c | 4 ++-- src/battle/battle_transition.c | 2 +- src/battle/calculate_base_damage.c | 4 ++-- src/battle/pokeball.c | 2 +- src/battle_anim_80CA710.c | 2 +- src/debug/sound_check_menu.c | 2 +- src/engine/cable_club.c | 2 +- src/engine/clear_save_data_menu.c | 2 +- src/engine/decompress.c | 2 +- src/engine/link.c | 2 +- src/engine/main_menu.c | 4 ++-- src/engine/menu.c | 2 +- src/engine/mystery_event_menu.c | 2 +- src/engine/mystery_event_script.c | 2 +- src/engine/naming_screen.c | 2 +- src/engine/record_mixing.c | 2 +- src/engine/reset_rtc_screen.c | 2 +- src/engine/sound.c | 2 +- src/engine/text.c | 2 +- src/engine/trade.c | 4 ++-- src/engine/trainer_card.c | 2 +- src/field/battle_tower.c | 2 +- src/field/berry_tag_screen.c | 2 +- src/field/bike.c | 2 +- src/field/birch_pc.c | 2 +- src/field/braille_puzzles.c | 4 ++-- src/field/choose_party.c | 2 +- src/field/daycare.c | 4 ++-- src/field/decoration.c | 2 +- src/field/field_control_avatar.c | 2 +- src/field/field_door.c | 2 +- src/field/field_effect.c | 2 +- src/field/field_effect_helpers.c | 2 +- src/field/field_fadetransition.c | 2 +- src/field/field_player_avatar.c | 2 +- src/field/field_special_scene.c | 2 +- src/field/field_specials.c | 8 ++++---- src/field/field_tasks.c | 2 +- src/field/field_weather.c | 2 +- src/field/field_weather_effects.c | 2 +- src/field/fldeff_cut.c | 2 +- src/field/fldeff_decoration.c | 2 +- src/field/fldeff_flash.c | 2 +- src/field/fldeff_poison.c | 2 +- src/field/fldeff_secret_base_pc.c | 2 +- src/field/fldeff_secretpower.c | 2 +- src/field/fldeff_softboiled.c | 2 +- src/field/item_menu.c | 2 +- src/field/item_use.c | 2 +- src/field/lottery_corner.c | 2 +- src/field/mauville_man.c | 2 +- src/field/menu_helpers.c | 2 +- src/field/overworld.c | 4 ++-- src/field/party_menu.c | 4 ++-- src/field/player_pc.c | 2 +- src/field/pokeblock.c | 2 +- src/field/region_map.c | 2 +- src/field/roamer.c | 2 +- src/field/rotating_gate.c | 2 +- src/field/script_menu.c | 2 +- src/field/secret_base.c | 6 +++--- src/field/shop.c | 2 +- src/field/start_menu.c | 2 +- src/field/starter_choose.c | 4 ++-- src/field/trader.c | 2 +- src/field/tv.c | 4 ++-- src/field/use_pokeblock.c | 2 +- src/field/wallclock.c | 2 +- src/field/wild_encounter.c | 4 ++-- src/pokemon/learn_move.c | 2 +- src/pokemon/mail_data.c | 2 +- src/pokemon/mon_markings.c | 2 +- src/pokemon/pokedex.c | 4 ++-- src/pokemon/pokemon_1.c | 2 +- src/pokemon/pokemon_2.c | 2 +- src/pokemon/pokemon_3.c | 4 ++-- src/pokemon/pokemon_data.c | 4 ++-- src/pokemon/pokemon_icon.c | 2 +- src/pokemon/pokemon_menu.c | 2 +- src/pokemon/pokemon_size_record.c | 2 +- src/pokenav_before.c | 2 +- src/rom3.c | 2 +- src/rom6.c | 2 +- src/rom_8077ABC.c | 2 +- src/scene/berry_blender.c | 2 +- src/scene/credits.c | 4 ++-- src/scene/egg_hatch.c | 2 +- src/scene/evolution_graphics.c | 2 +- src/scene/evolution_scene.c | 4 ++-- src/scene/hall_of_fame.c | 4 ++-- src/scene/intro.c | 4 ++-- src/scene/intro_credits_graphics.c | 4 ++-- src/script_pokemon_util_80C4BF0.c | 2 +- src/script_pokemon_util_80F99CC.c | 2 +- 107 files changed, 138 insertions(+), 138 deletions(-) (limited to 'src') diff --git a/src/battle/battle_2.c b/src/battle/battle_2.c index a3cd15042..69f168aff 100644 --- a/src/battle/battle_2.c +++ b/src/battle/battle_2.c @@ -1,5 +1,5 @@ #include "global.h" -#include "abilities.h" +#include "constants/abilities.h" #include "battle.h" #include "battle_interface.h" #include "battle_setup.h" @@ -17,9 +17,9 @@ #include "rom3.h" #include "rom_8077ABC.h" #include "rom_8094928.h" -#include "songs.h" +#include "constants/songs.h" #include "sound.h" -#include "species.h" +#include "constants/species.h" #include "sprite.h" #include "task.h" #include "text.h" diff --git a/src/battle/battle_3.c b/src/battle/battle_3.c index 263eb2be5..05fd89d24 100644 --- a/src/battle/battle_3.c +++ b/src/battle/battle_3.c @@ -1,11 +1,11 @@ #include "global.h" -#include "abilities.h" +#include "constants/abilities.h" #include "battle.h" #include "moves.h" #include "item.h" #include "items.h" #include "hold_effects.h" -#include "species.h" +#include "constants/species.h" #include "pokemon.h" #include "data2.h" #include "random.h" diff --git a/src/battle/battle_4.c b/src/battle/battle_4.c index 088f30669..ce9f55039 100644 --- a/src/battle/battle_4.c +++ b/src/battle/battle_4.c @@ -2,19 +2,19 @@ #include "battle.h" #include "battle_move_effects.h" #include "moves.h" -#include "abilities.h" +#include "constants/abilities.h" #include "item.h" #include "items.h" #include "data2.h" #include "hold_effects.h" #include "random.h" #include "rom3.h" -#include "species.h" +#include "constants/species.h" #include "pokemon.h" #include "text.h" #include "palette.h" #include "main.h" -#include "songs.h" +#include "constants/songs.h" #include "sound.h" #include "task.h" #include "decompress.h" diff --git a/src/battle/battle_7.c b/src/battle/battle_7.c index 0728b4b71..5a30e012d 100644 --- a/src/battle/battle_7.c +++ b/src/battle/battle_7.c @@ -11,9 +11,9 @@ #include "pokemon.h" #include "rom_8077ABC.h" #include "rom_8094928.h" -#include "songs.h" +#include "constants/songs.h" #include "sound.h" -#include "species.h" +#include "constants/species.h" #include "sprite.h" #include "task.h" #include "text.h" diff --git a/src/battle/battle_ai.c b/src/battle/battle_ai.c index 0348c3ccd..eab90376e 100644 --- a/src/battle/battle_ai.c +++ b/src/battle/battle_ai.c @@ -1,6 +1,6 @@ #include "global.h" #include "battle_ai.h" -#include "abilities.h" +#include "constants/abilities.h" #include "battle.h" #include "battle_move_effects.h" #include "data2.h" @@ -9,7 +9,7 @@ #include "pokemon.h" #include "random.h" #include "rom_8077ABC.h" -#include "species.h" +#include "constants/species.h" #include "util.h" #include "ewram.h" diff --git a/src/battle/battle_controller_linkopponent.c b/src/battle/battle_controller_linkopponent.c index 88043c60d..3259fc7ee 100644 --- a/src/battle/battle_controller_linkopponent.c +++ b/src/battle/battle_controller_linkopponent.c @@ -8,7 +8,7 @@ #include "palette.h" #include "rom_8077ABC.h" #include "rom3.h" -#include "songs.h" +#include "constants/songs.h" #include "sound.h" #include "sprite.h" #include "string_util.h" diff --git a/src/battle/battle_controller_linkpartner.c b/src/battle/battle_controller_linkpartner.c index 3e6ea4add..fc3fde661 100644 --- a/src/battle/battle_controller_linkpartner.c +++ b/src/battle/battle_controller_linkpartner.c @@ -13,7 +13,7 @@ #include "rom3.h" #include "rom_8077ABC.h" #include "sound.h" -#include "songs.h" +#include "constants/songs.h" #include "sprite.h" #include "string_util.h" #include "task.h" diff --git a/src/battle/battle_controller_opponent.c b/src/battle/battle_controller_opponent.c index 4d4155419..a35687796 100644 --- a/src/battle/battle_controller_opponent.c +++ b/src/battle/battle_controller_opponent.c @@ -14,7 +14,7 @@ #include "rom3.h" #include "rom_8077ABC.h" #include "sound.h" -#include "songs.h" +#include "constants/songs.h" #include "sprite.h" #include "string_util.h" #include "task.h" diff --git a/src/battle/battle_controller_player.c b/src/battle/battle_controller_player.c index 55fc45f95..956809814 100644 --- a/src/battle/battle_controller_player.c +++ b/src/battle/battle_controller_player.c @@ -13,7 +13,7 @@ #include "palette.h" #include "pokemon.h" #include "rom3.h" -#include "songs.h" +#include "constants/songs.h" #include "sound.h" #include "string_util.h" #include "task.h" diff --git a/src/battle/battle_controller_safari.c b/src/battle/battle_controller_safari.c index f83eddc9f..3dcfca948 100644 --- a/src/battle/battle_controller_safari.c +++ b/src/battle/battle_controller_safari.c @@ -8,7 +8,7 @@ #include "menu_cursor.h" #include "palette.h" #include "rom3.h" -#include "songs.h" +#include "constants/songs.h" #include "sound.h" #include "text.h" #include "util.h" diff --git a/src/battle/battle_controller_wally.c b/src/battle/battle_controller_wally.c index 77aa54873..0d698d9a5 100644 --- a/src/battle/battle_controller_wally.c +++ b/src/battle/battle_controller_wally.c @@ -9,7 +9,7 @@ #include "palette.h" #include "pokemon.h" #include "rom3.h" -#include "songs.h" +#include "constants/songs.h" #include "sound.h" #include "sprite.h" #include "item_use.h" diff --git a/src/battle/battle_interface.c b/src/battle/battle_interface.c index d35440246..ea393277e 100644 --- a/src/battle/battle_interface.c +++ b/src/battle/battle_interface.c @@ -7,7 +7,7 @@ #include "pokemon.h" #include "rom_8077ABC.h" #include "safari_zone.h" -#include "songs.h" +#include "constants/songs.h" #include "sound.h" #include "sprite.h" #include "string_util.h" diff --git a/src/battle/battle_party_menu.c b/src/battle/battle_party_menu.c index 97e9dc0fc..237686099 100644 --- a/src/battle/battle_party_menu.c +++ b/src/battle/battle_party_menu.c @@ -12,7 +12,7 @@ #include "pokemon_summary_screen.h" #include "rom_8077ABC.h" #include "rom_8094928.h" -#include "songs.h" +#include "constants/songs.h" #include "sound.h" #include "string_util.h" #include "strings.h" diff --git a/src/battle/battle_setup.c b/src/battle/battle_setup.c index 3d63a85c9..3587c008c 100644 --- a/src/battle/battle_setup.c +++ b/src/battle/battle_setup.c @@ -23,9 +23,9 @@ #include "script.h" #include "script_pokemon_80C4.h" #include "secret_base.h" -#include "songs.h" +#include "constants/songs.h" #include "sound.h" -#include "species.h" +#include "constants/species.h" #include "starter_choose.h" #include "string_util.h" #include "strings.h" diff --git a/src/battle/battle_transition.c b/src/battle/battle_transition.c index f7c8073c5..985f43945 100644 --- a/src/battle/battle_transition.c +++ b/src/battle/battle_transition.c @@ -9,7 +9,7 @@ #include "random.h" #include "sprite.h" #include "sound.h" -#include "songs.h" +#include "constants/songs.h" #include "trainer.h" #include "field_camera.h" #include "ewram.h" diff --git a/src/battle/calculate_base_damage.c b/src/battle/calculate_base_damage.c index 42c26dee0..5f935f2be 100644 --- a/src/battle/calculate_base_damage.c +++ b/src/battle/calculate_base_damage.c @@ -1,5 +1,5 @@ #include "global.h" -#include "abilities.h" +#include "constants/abilities.h" #include "battle.h" #include "berry.h" #include "data2.h" @@ -8,7 +8,7 @@ #include "item.h" #include "items.h" #include "pokemon.h" -#include "species.h" +#include "constants/species.h" #include "moves.h" #include "battle_move_effects.h" #include "ewram.h" diff --git a/src/battle/pokeball.c b/src/battle/pokeball.c index 8271e53ac..12fd5e5d9 100644 --- a/src/battle/pokeball.c +++ b/src/battle/pokeball.c @@ -8,7 +8,7 @@ #include "pokeball.h" #include "pokemon.h" #include "rom_8077ABC.h" -#include "songs.h" +#include "constants/songs.h" #include "sound.h" #include "sprite.h" #include "task.h" diff --git a/src/battle_anim_80CA710.c b/src/battle_anim_80CA710.c index 01f445094..b3ebec9b9 100755 --- a/src/battle_anim_80CA710.c +++ b/src/battle_anim_80CA710.c @@ -10,7 +10,7 @@ #include "palette.h" #include "random.h" #include "rom_8077ABC.h" -#include "songs.h" +#include "constants/songs.h" #include "sound.h" #include "sprite.h" #include "task.h" diff --git a/src/debug/sound_check_menu.c b/src/debug/sound_check_menu.c index 14261b75e..968b047d9 100644 --- a/src/debug/sound_check_menu.c +++ b/src/debug/sound_check_menu.c @@ -6,7 +6,7 @@ #include "main.h" #include "text.h" #include "menu.h" -#include "songs.h" +#include "constants/songs.h" #include "title_screen.h" #include "sound.h" #include "pokedex_cry_screen.h" diff --git a/src/engine/cable_club.c b/src/engine/cable_club.c index ec8acc65f..4dda372f4 100644 --- a/src/engine/cable_club.c +++ b/src/engine/cable_club.c @@ -14,7 +14,7 @@ #include "overworld.h" #include "script.h" #include "script_pokemon_80C4.h" -#include "songs.h" +#include "constants/songs.h" #include "sound.h" #include "start_menu.h" #include "string_util.h" diff --git a/src/engine/clear_save_data_menu.c b/src/engine/clear_save_data_menu.c index 498562fe0..12cde22a7 100644 --- a/src/engine/clear_save_data_menu.c +++ b/src/engine/clear_save_data_menu.c @@ -4,7 +4,7 @@ #include "menu.h" #include "palette.h" #include "save.h" -#include "songs.h" +#include "constants/songs.h" #include "sound.h" #include "sprite.h" #include "strings2.h" diff --git a/src/engine/decompress.c b/src/engine/decompress.c index 0893a8492..69edf01aa 100644 --- a/src/engine/decompress.c +++ b/src/engine/decompress.c @@ -1,7 +1,7 @@ #include "global.h" #include "decompress.h" #include "data2.h" -#include "species.h" +#include "constants/species.h" #include "text.h" #include "ewram.h" diff --git a/src/engine/link.c b/src/engine/link.c index 441f3707b..27afef937 100644 --- a/src/engine/link.c +++ b/src/engine/link.c @@ -9,7 +9,7 @@ #include "palette.h" #include "random.h" #include "save.h" -#include "songs.h" +#include "constants/songs.h" #include "sound.h" #include "sprite.h" #include "strings2.h" diff --git a/src/engine/main_menu.c b/src/engine/main_menu.c index a8375c6dd..909b5676b 100644 --- a/src/engine/main_menu.c +++ b/src/engine/main_menu.c @@ -13,9 +13,9 @@ #include "overworld.h" #include "rtc.h" #include "save_menu_util.h" -#include "songs.h" +#include "constants/songs.h" #include "sound.h" -#include "species.h" +#include "constants/species.h" #include "string_util.h" #include "strings.h" #include "task.h" diff --git a/src/engine/menu.c b/src/engine/menu.c index a9c4aaa43..10988c1d7 100644 --- a/src/engine/menu.c +++ b/src/engine/menu.c @@ -4,7 +4,7 @@ #include "map_obj_lock.h" #include "menu_cursor.h" #include "script.h" -#include "songs.h" +#include "constants/songs.h" #include "sound.h" #include "strings.h" #include "text.h" diff --git a/src/engine/mystery_event_menu.c b/src/engine/mystery_event_menu.c index a472eea3b..b9c3d5ad8 100644 --- a/src/engine/mystery_event_menu.c +++ b/src/engine/mystery_event_menu.c @@ -6,7 +6,7 @@ #include "mystery_event_script.h" #include "palette.h" #include "save.h" -#include "songs.h" +#include "constants/songs.h" #include "sound.h" #include "sprite.h" #include "string_util.h" diff --git a/src/engine/mystery_event_script.c b/src/engine/mystery_event_script.c index 69434710f..12ad329da 100644 --- a/src/engine/mystery_event_script.c +++ b/src/engine/mystery_event_script.c @@ -9,7 +9,7 @@ #include "pokemon.h" #include "pokemon_size_record.h" #include "script.h" -#include "species.h" +#include "constants/species.h" #include "strings.h" #include "string_util.h" #include "text.h" diff --git a/src/engine/naming_screen.c b/src/engine/naming_screen.c index 667a42ac8..4d2545440 100644 --- a/src/engine/naming_screen.c +++ b/src/engine/naming_screen.c @@ -8,7 +8,7 @@ #include "menu.h" #include "palette.h" #include "pokemon_icon.h" -#include "songs.h" +#include "constants/songs.h" #include "sound.h" #include "sprite.h" #include "string_util.h" diff --git a/src/engine/record_mixing.c b/src/engine/record_mixing.c index 4b5f1b6d5..56e999651 100644 --- a/src/engine/record_mixing.c +++ b/src/engine/record_mixing.c @@ -18,7 +18,7 @@ #include "save.h" #include "script.h" #include "secret_base.h" -#include "songs.h" +#include "constants/songs.h" #include "sound.h" #include "string_util.h" #include "strings2.h" diff --git a/src/engine/reset_rtc_screen.c b/src/engine/reset_rtc_screen.c index 5701c1185..67e146899 100644 --- a/src/engine/reset_rtc_screen.c +++ b/src/engine/reset_rtc_screen.c @@ -6,7 +6,7 @@ #include "rtc.h" #include "save.h" #include "sprite.h" -#include "songs.h" +#include "constants/songs.h" #include "sound.h" #include "string_util.h" #include "strings.h" diff --git a/src/engine/sound.c b/src/engine/sound.c index a6a61c0b5..159ad3f70 100644 --- a/src/engine/sound.c +++ b/src/engine/sound.c @@ -5,7 +5,7 @@ #include "m4a.h" #include "main.h" #include "pokemon.h" -#include "songs.h" +#include "constants/songs.h" #include "task.h" struct Fanfare diff --git a/src/engine/text.c b/src/engine/text.c index 1d1d31383..1b158d979 100644 --- a/src/engine/text.c +++ b/src/engine/text.c @@ -3,7 +3,7 @@ #include "battle.h" #include "main.h" #include "palette.h" -#include "songs.h" +#include "constants/songs.h" #include "sound.h" #include "string_util.h" diff --git a/src/engine/trade.c b/src/engine/trade.c index 729791aff..00b88c114 100644 --- a/src/engine/trade.c +++ b/src/engine/trade.c @@ -3,7 +3,7 @@ #include "string_util.h" #include "text.h" #include "main.h" -#include "species.h" +#include "constants/species.h" #include "items.h" #include "moves.h" #include "easy_chat.h" @@ -17,7 +17,7 @@ #include "pokemon_icon.h" #include "cable_club.h" #include "party_menu.h" -#include "songs.h" +#include "constants/songs.h" #include "sound.h" #include "data2.h" #include "pokemon_summary_screen.h" diff --git a/src/engine/trainer_card.c b/src/engine/trainer_card.c index 2045c6b21..468890ca5 100644 --- a/src/engine/trainer_card.c +++ b/src/engine/trainer_card.c @@ -12,7 +12,7 @@ #include "pokedex.h" #include "overworld.h" #include "script_pokemon_80C4.h" -#include "songs.h" +#include "constants/songs.h" #include "sound.h" #include "sprite.h" #include "string_util.h" diff --git a/src/field/battle_tower.c b/src/field/battle_tower.c index 2b45766dd..5f2a84d06 100644 --- a/src/field/battle_tower.c +++ b/src/field/battle_tower.c @@ -17,7 +17,7 @@ #include "random.h" #include "save.h" #include "script_pokemon_80C4.h" -#include "species.h" +#include "constants/species.h" #include "string_util.h" #include "task.h" #include "text.h" diff --git a/src/field/berry_tag_screen.c b/src/field/berry_tag_screen.c index 55405138d..9fe720b36 100644 --- a/src/field/berry_tag_screen.c +++ b/src/field/berry_tag_screen.c @@ -11,7 +11,7 @@ #include "menu_helpers.h" #include "palette.h" #include "overworld.h" -#include "songs.h" +#include "constants/songs.h" #include "sound.h" #include "sprite.h" #include "string_util.h" diff --git a/src/field/bike.c b/src/field/bike.c index e36ae1798..75c99aaa1 100644 --- a/src/field/bike.c +++ b/src/field/bike.c @@ -7,7 +7,7 @@ #include "global.fieldmap.h" #include "metatile_behavior.h" #include "overworld.h" -#include "songs.h" +#include "constants/songs.h" #include "sound.h" extern bool8 gBikeCyclingChallenge; diff --git a/src/field/birch_pc.c b/src/field/birch_pc.c index 9872dd54d..4b0025504 100644 --- a/src/field/birch_pc.c +++ b/src/field/birch_pc.c @@ -2,7 +2,7 @@ #include "event_data.h" #include "field_message_box.h" #include "pokedex.h" -#include "species.h" +#include "constants/species.h" extern u16 gSpecialVar_0x8004; extern u16 gSpecialVar_0x8005; diff --git a/src/field/braille_puzzles.c b/src/field/braille_puzzles.c index b11b1ff3a..c5e12c839 100644 --- a/src/field/braille_puzzles.c +++ b/src/field/braille_puzzles.c @@ -11,9 +11,9 @@ #include "menu.h" #include "rom6.h" #include "script.h" -#include "songs.h" +#include "constants/songs.h" #include "sound.h" -#include "species.h" +#include "constants/species.h" #include "task.h" #include "text.h" diff --git a/src/field/choose_party.c b/src/field/choose_party.c index c3845e48b..8d92719d1 100644 --- a/src/field/choose_party.c +++ b/src/field/choose_party.c @@ -11,7 +11,7 @@ #include "pokemon_summary_screen.h" #include "overworld.h" #include "script.h" -#include "songs.h" +#include "constants/songs.h" #include "sound.h" #include "strings.h" #include "string_util.h" diff --git a/src/field/daycare.c b/src/field/daycare.c index 9f7e3b989..d3c86e812 100644 --- a/src/field/daycare.c +++ b/src/field/daycare.c @@ -14,9 +14,9 @@ #include "pokemon_storage_system.h" #include "random.h" #include "script.h" -#include "songs.h" +#include "constants/songs.h" #include "sound.h" -#include "species.h" +#include "constants/species.h" #include "string_util.h" #include "strings2.h" #include "text.h" diff --git a/src/field/decoration.c b/src/field/decoration.c index 8e6276a2f..89d8cbefd 100644 --- a/src/field/decoration.c +++ b/src/field/decoration.c @@ -3,7 +3,7 @@ #include "map_object_constants.h" #include "overworld.h" #include "sound.h" -#include "songs.h" +#include "constants/songs.h" #include "string_util.h" #include "menu.h" #include "menu_helpers.h" diff --git a/src/field/field_control_avatar.c b/src/field/field_control_avatar.c index c7b4861d5..b7e7ec472 100644 --- a/src/field/field_control_avatar.c +++ b/src/field/field_control_avatar.c @@ -17,7 +17,7 @@ #include "safari_zone.h" #include "script.h" #include "secret_base.h" -#include "songs.h" +#include "constants/songs.h" #include "sound.h" #include "start_menu.h" #include "trainer_see.h" diff --git a/src/field/field_door.c b/src/field/field_door.c index ef349bca7..89dae725c 100644 --- a/src/field/field_door.c +++ b/src/field/field_door.c @@ -3,7 +3,7 @@ #include "field_camera.h" #include "fieldmap.h" #include "metatile_behavior.h" -#include "songs.h" +#include "constants/songs.h" #include "task.h" const u8 DoorAnimTiles_04[][0x100] = diff --git a/src/field/field_effect.c b/src/field/field_effect.c index 0ccbb6230..4337300da 100644 --- a/src/field/field_effect.c +++ b/src/field/field_effect.c @@ -12,7 +12,7 @@ #include "overworld.h" #include "task.h" #include "sound.h" -#include "songs.h" +#include "constants/songs.h" #include "decoration.h" #include "field_player_avatar.h" #include "field_map_obj_helpers.h" diff --git a/src/field/field_effect_helpers.c b/src/field/field_effect_helpers.c index c5b67fd9d..1d831d2e9 100644 --- a/src/field/field_effect_helpers.c +++ b/src/field/field_effect_helpers.c @@ -2,7 +2,7 @@ #include "sprite.h" #include "fieldmap.h" #include "metatile_behavior.h" -#include "songs.h" +#include "constants/songs.h" #include "sound.h" #include "field_map_obj.h" #include "field_camera.h" diff --git a/src/field/field_fadetransition.c b/src/field/field_fadetransition.c index 82776d18c..829ce2dfa 100644 --- a/src/field/field_fadetransition.c +++ b/src/field/field_fadetransition.c @@ -17,7 +17,7 @@ #include "palette.h" #include "overworld.h" #include "script.h" -#include "songs.h" +#include "constants/songs.h" #include "sound.h" #include "start_menu.h" #include "task.h" diff --git a/src/field/field_player_avatar.c b/src/field/field_player_avatar.c index a26638b39..166846ba0 100644 --- a/src/field/field_player_avatar.c +++ b/src/field/field_player_avatar.c @@ -17,7 +17,7 @@ #include "overworld.h" #include "rotating_gate.h" #include "script.h" -#include "songs.h" +#include "constants/songs.h" #include "sound.h" #include "strings2.h" #include "task.h" diff --git a/src/field/field_special_scene.c b/src/field/field_special_scene.c index 5758929b6..6ef98f5e9 100644 --- a/src/field/field_special_scene.c +++ b/src/field/field_special_scene.c @@ -11,7 +11,7 @@ #include "overworld.h" #include "script.h" #include "script_movement.h" -#include "songs.h" +#include "constants/songs.h" #include "sound.h" #include "sprite.h" #include "task.h" diff --git a/src/field/field_specials.c b/src/field/field_specials.c index e5bb1b798..279a7e3f6 100644 --- a/src/field/field_specials.c +++ b/src/field/field_specials.c @@ -14,19 +14,19 @@ #include "map_constants.h" #include "overworld.h" #include "script.h" -#include "songs.h" +#include "constants/songs.h" #include "string_util.h" #include "strings.h" #include "pokeblock.h" -#include "species.h" -#include "abilities.h" +#include "constants/species.h" +#include "constants/abilities.h" #include "moves.h" #include "text.h" #include "wallclock.h" #include "tv.h" #include "rtc.h" #include "link.h" -#include "songs.h" +#include "constants/songs.h" #include "sound.h" #include "menu.h" #include "starter_choose.h" diff --git a/src/field/field_tasks.c b/src/field/field_tasks.c index e938a57ef..2da0f7303 100644 --- a/src/field/field_tasks.c +++ b/src/field/field_tasks.c @@ -16,7 +16,7 @@ #include "fieldmap.h" #include "field_player_avatar.h" #include "field_camera.h" -#include "songs.h" +#include "constants/songs.h" #include "sound.h" #include "field_tasks.h" diff --git a/src/field/field_weather.c b/src/field/field_weather.c index ff7c2e4c4..19ccca3bf 100644 --- a/src/field/field_weather.c +++ b/src/field/field_weather.c @@ -5,7 +5,7 @@ #include "palette.h" #include "random.h" #include "script.h" -#include "songs.h" +#include "constants/songs.h" #include "sound.h" #include "sprite.h" #include "task.h" diff --git a/src/field/field_weather_effects.c b/src/field/field_weather_effects.c index b1dca6396..31eda4393 100644 --- a/src/field/field_weather_effects.c +++ b/src/field/field_weather_effects.c @@ -4,7 +4,7 @@ #include "overworld.h" #include "random.h" #include "script.h" -#include "songs.h" +#include "constants/songs.h" #include "sound.h" #include "sprite.h" #include "task.h" diff --git a/src/field/fldeff_cut.c b/src/field/fldeff_cut.c index 599c916a2..edf38d800 100644 --- a/src/field/fldeff_cut.c +++ b/src/field/fldeff_cut.c @@ -11,7 +11,7 @@ #include "overworld.h" #include "rom6.h" #include "script.h" -#include "songs.h" +#include "constants/songs.h" #include "sound.h" #include "sprite.h" #include "task.h" diff --git a/src/field/fldeff_decoration.c b/src/field/fldeff_decoration.c index b0ac30062..d58f53a3c 100644 --- a/src/field/fldeff_decoration.c +++ b/src/field/fldeff_decoration.c @@ -6,7 +6,7 @@ #include "field_player_avatar.h" #include "fieldmap.h" #include "script.h" -#include "songs.h" +#include "constants/songs.h" #include "sound.h" #include "string_util.h" #include "strings.h" diff --git a/src/field/fldeff_flash.c b/src/field/fldeff_flash.c index 30423a3f9..920791ce2 100644 --- a/src/field/fldeff_flash.c +++ b/src/field/fldeff_flash.c @@ -7,7 +7,7 @@ #include "overworld.h" #include "rom6.h" #include "script.h" -#include "songs.h" +#include "constants/songs.h" #include "sound.h" #include "sprite.h" #include "task.h" diff --git a/src/field/fldeff_poison.c b/src/field/fldeff_poison.c index 0a0cf5539..b0052d59d 100644 --- a/src/field/fldeff_poison.c +++ b/src/field/fldeff_poison.c @@ -1,7 +1,7 @@ #include "global.h" #include "fldeff_poison.h" #include "task.h" -#include "songs.h" +#include "constants/songs.h" #include "sound.h" static void Task_FieldPoisonEffect(u8 taskId) diff --git a/src/field/fldeff_secret_base_pc.c b/src/field/fldeff_secret_base_pc.c index ead970b27..8d71a4fb9 100644 --- a/src/field/fldeff_secret_base_pc.c +++ b/src/field/fldeff_secret_base_pc.c @@ -5,7 +5,7 @@ #include "field_player_avatar.h" #include "fieldmap.h" #include "script.h" -#include "songs.h" +#include "constants/songs.h" #include "sound.h" #include "task.h" diff --git a/src/field/fldeff_secretpower.c b/src/field/fldeff_secretpower.c index 5ec4407ae..cd9a2ae36 100644 --- a/src/field/fldeff_secretpower.c +++ b/src/field/fldeff_secretpower.c @@ -10,7 +10,7 @@ #include "rom6.h" #include "script.h" #include "secret_base.h" -#include "songs.h" +#include "constants/songs.h" #include "sound.h" extern u8 gUnknown_081A2CE6[]; diff --git a/src/field/fldeff_softboiled.c b/src/field/fldeff_softboiled.c index c2a315233..a574232a8 100644 --- a/src/field/fldeff_softboiled.c +++ b/src/field/fldeff_softboiled.c @@ -4,7 +4,7 @@ #include "party_menu.h" #include "pokemon.h" #include "pokemon_menu.h" -#include "songs.h" +#include "constants/songs.h" #include "sound.h" #include "sprite.h" #include "strings.h" diff --git a/src/field/item_menu.c b/src/field/item_menu.c index 67362d5f3..7d4b90bad 100644 --- a/src/field/item_menu.c +++ b/src/field/item_menu.c @@ -25,7 +25,7 @@ #include "pokemon_menu.h" #include "overworld.h" #include "script.h" -#include "songs.h" +#include "constants/songs.h" #include "sound.h" #include "sprite.h" #include "strings.h" diff --git a/src/field/item_use.c b/src/field/item_use.c index 14b13ca3b..764e78800 100644 --- a/src/field/item_use.c +++ b/src/field/item_use.c @@ -29,7 +29,7 @@ #include "overworld.h" #include "rom_8094928.h" #include "script.h" -#include "songs.h" +#include "constants/songs.h" #include "sound.h" #include "string_util.h" #include "strings.h" diff --git a/src/field/lottery_corner.c b/src/field/lottery_corner.c index 5f0ce2907..b3bdeb494 100644 --- a/src/field/lottery_corner.c +++ b/src/field/lottery_corner.c @@ -3,7 +3,7 @@ #include "event_data.h" #include "items.h" #include "random.h" -#include "species.h" +#include "constants/species.h" #include "string_util.h" #include "text.h" diff --git a/src/field/mauville_man.c b/src/field/mauville_man.c index a27c54df7..7c9c072a1 100644 --- a/src/field/mauville_man.c +++ b/src/field/mauville_man.c @@ -9,7 +9,7 @@ #include "overworld.h" #include "random.h" #include "script.h" -#include "songs.h" +#include "constants/songs.h" #include "sound.h" #include "string_util.h" #include "strings.h" diff --git a/src/field/menu_helpers.c b/src/field/menu_helpers.c index 8e13e5546..e49c023c6 100644 --- a/src/field/menu_helpers.c +++ b/src/field/menu_helpers.c @@ -8,7 +8,7 @@ #include "menu.h" #include "menu_helpers.h" #include "overworld.h" -#include "songs.h" +#include "constants/songs.h" #include "sound.h" #include "sprite.h" #include "task.h" diff --git a/src/field/overworld.c b/src/field/overworld.c index ca59426fa..d286a1951 100644 --- a/src/field/overworld.c +++ b/src/field/overworld.c @@ -39,9 +39,9 @@ #include "script.h" #include "script_pokemon_80C4.h" #include "secret_base.h" -#include "songs.h" +#include "constants/songs.h" #include "sound.h" -#include "species.h" +#include "constants/species.h" #include "start_menu.h" #include "task.h" #include "tileset_anim.h" diff --git a/src/field/party_menu.c b/src/field/party_menu.c index a8620570b..a023a42ad 100644 --- a/src/field/party_menu.c +++ b/src/field/party_menu.c @@ -25,9 +25,9 @@ #include "pokemon_summary_screen.h" #include "rom_8077ABC.h" #include "rom_8094928.h" -#include "songs.h" +#include "constants/songs.h" #include "sound.h" -#include "species.h" +#include "constants/species.h" #include "sprite.h" #include "string_util.h" #include "strings.h" diff --git a/src/field/player_pc.c b/src/field/player_pc.c index ce78a88d8..2313d8c97 100644 --- a/src/field/player_pc.c +++ b/src/field/player_pc.c @@ -15,7 +15,7 @@ #include "string_util.h" #include "strings.h" #include "task.h" -#include "songs.h" +#include "constants/songs.h" #include "name_string_util.h" #include "mail.h" #include "overworld.h" diff --git a/src/field/pokeblock.c b/src/field/pokeblock.c index 5aa03ff7a..56b197ca3 100644 --- a/src/field/pokeblock.c +++ b/src/field/pokeblock.c @@ -23,7 +23,7 @@ #include "item.h" #include "items.h" #include "sound.h" -#include "songs.h" +#include "constants/songs.h" #include "safari_zone.h" #include "event_data.h" #include "pokeblock.h" diff --git a/src/field/region_map.c b/src/field/region_map.c index 241b38bf6..df51d6173 100644 --- a/src/field/region_map.c +++ b/src/field/region_map.c @@ -11,7 +11,7 @@ #include "region_map.h" #include "overworld.h" #include "secret_base.h" -#include "songs.h" +#include "constants/songs.h" #include "sprite.h" #include "strings.h" #include "string_util.h" diff --git a/src/field/roamer.c b/src/field/roamer.c index d8ea1ef52..2eb26ef9d 100644 --- a/src/field/roamer.c +++ b/src/field/roamer.c @@ -2,7 +2,7 @@ #include "roamer.h" #include "pokemon.h" #include "random.h" -#include "species.h" +#include "constants/species.h" #ifdef SAPPHIRE #define ROAMER_SPECIES SPECIES_LATIAS diff --git a/src/field/rotating_gate.c b/src/field/rotating_gate.c index a672f3489..c3b6a8a71 100644 --- a/src/field/rotating_gate.c +++ b/src/field/rotating_gate.c @@ -4,7 +4,7 @@ #include "field_map_obj.h" #include "fieldmap.h" #include "map_constants.h" -#include "songs.h" +#include "constants/songs.h" #include "sound.h" #include "sprite.h" diff --git a/src/field/script_menu.c b/src/field/script_menu.c index e25e74d8c..caa1d7562 100644 --- a/src/field/script_menu.c +++ b/src/field/script_menu.c @@ -6,7 +6,7 @@ #include "menu.h" #include "palette.h" #include "script.h" -#include "songs.h" +#include "constants/songs.h" #include "sound.h" #include "sprite.h" #include "strings.h" diff --git a/src/field/secret_base.c b/src/field/secret_base.c index 34352f39a..3ada632dd 100644 --- a/src/field/secret_base.c +++ b/src/field/secret_base.c @@ -1,7 +1,7 @@ #include "global.h" #include "secret_base.h" #include "decoration.h" -#include "species.h" +#include "constants/species.h" #include "items.h" #include "moves.h" #include "event_data.h" @@ -16,7 +16,7 @@ #include "link.h" #include "main.h" #include "sound.h" -#include "songs.h" +#include "constants/songs.h" #include "map_constants.h" #include "map_name_popup.h" #include "menu.h" @@ -27,7 +27,7 @@ #include "overworld.h" #include "script.h" #include "sound.h" -#include "species.h" +#include "constants/species.h" #include "string_util.h" #include "strings.h" #include "task.h" diff --git a/src/field/shop.c b/src/field/shop.c index 493d8c748..cb97ea266 100644 --- a/src/field/shop.c +++ b/src/field/shop.c @@ -22,7 +22,7 @@ #include "item.h" #include "decoration.h" #include "items.h" -#include "songs.h" +#include "constants/songs.h" #include "overworld.h" #include "decoration_inventory.h" #include "field_camera.h" diff --git a/src/field/start_menu.c b/src/field/start_menu.c index 6e44090df..7913e5527 100644 --- a/src/field/start_menu.c +++ b/src/field/start_menu.c @@ -20,7 +20,7 @@ #include "save.h" #include "save_menu_util.h" #include "script.h" -#include "songs.h" +#include "constants/songs.h" #include "sound.h" #include "sprite.h" #include "string_util.h" diff --git a/src/field/starter_choose.c b/src/field/starter_choose.c index 49590f83a..149eaa03d 100644 --- a/src/field/starter_choose.c +++ b/src/field/starter_choose.c @@ -6,9 +6,9 @@ #include "menu.h" #include "palette.h" #include "pokedex.h" -#include "songs.h" +#include "constants/songs.h" #include "sound.h" -#include "species.h" +#include "constants/species.h" #include "sprite.h" #include "string_util.h" #include "strings.h" diff --git a/src/field/trader.c b/src/field/trader.c index 61f48fad8..69eef1152 100644 --- a/src/field/trader.c +++ b/src/field/trader.c @@ -7,7 +7,7 @@ #include "menu.h" #include "menu_helpers.h" #include "script.h" -#include "songs.h" +#include "constants/songs.h" #include "sound.h" #include "string_util.h" #include "strings.h" diff --git a/src/field/tv.c b/src/field/tv.c index e58adebc9..28737ecaa 100644 --- a/src/field/tv.c +++ b/src/field/tv.c @@ -12,7 +12,7 @@ #include "random.h" #include "string_util.h" #include "text.h" -#include "species.h" +#include "constants/species.h" #include "pokedex.h" #include "naming_screen.h" #include "overworld.h" @@ -34,7 +34,7 @@ #include "overworld.h" #include "rtc.h" #include "script_menu.h" -#include "species.h" +#include "constants/species.h" #include "string_util.h" #include "strings.h" #include "text.h" diff --git a/src/field/use_pokeblock.c b/src/field/use_pokeblock.c index d301d93d6..8155b4216 100644 --- a/src/field/use_pokeblock.c +++ b/src/field/use_pokeblock.c @@ -15,7 +15,7 @@ #include "text.h" #include "menu.h" #include "sound.h" -#include "songs.h" +#include "constants/songs.h" #include "pokeblock.h" #define GFX_TAG_CONDITIONUPDOWN 0 diff --git a/src/field/wallclock.c b/src/field/wallclock.c index d86b1bc95..2892d09f9 100644 --- a/src/field/wallclock.c +++ b/src/field/wallclock.c @@ -5,7 +5,7 @@ #include "menu.h" #include "palette.h" #include "rtc.h" -#include "songs.h" +#include "constants/songs.h" #include "sound.h" #include "strings2.h" #include "task.h" diff --git a/src/field/wild_encounter.c b/src/field/wild_encounter.c index df0b12207..b19b1d4c2 100644 --- a/src/field/wild_encounter.c +++ b/src/field/wild_encounter.c @@ -1,6 +1,6 @@ #include "global.h" #include "wild_encounter.h" -#include "abilities.h" +#include "constants/abilities.h" #include "battle_setup.h" #include "event_data.h" #include "field_player_avatar.h" @@ -13,7 +13,7 @@ #include "overworld.h" #include "safari_zone.h" #include "script.h" -#include "species.h" +#include "constants/species.h" #include "tv.h" const struct WildPokemon PetalburgCity_WaterMons [] = diff --git a/src/pokemon/learn_move.c b/src/pokemon/learn_move.c index 55aac840f..8cc7df9d4 100644 --- a/src/pokemon/learn_move.c +++ b/src/pokemon/learn_move.c @@ -8,7 +8,7 @@ #include "pokemon.h" #include "overworld.h" #include "script.h" -#include "songs.h" +#include "constants/songs.h" #include "sound.h" #include "sprite.h" #include "string_util.h" diff --git a/src/pokemon/mail_data.c b/src/pokemon/mail_data.c index ae3f4b3e8..fce796ab0 100644 --- a/src/pokemon/mail_data.c +++ b/src/pokemon/mail_data.c @@ -4,7 +4,7 @@ #include "name_string_util.h" #include "pokemon.h" #include "pokemon_icon.h" -#include "species.h" +#include "constants/species.h" #include "text.h" void ClearMailData(void) diff --git a/src/pokemon/mon_markings.c b/src/pokemon/mon_markings.c index 29e8c5127..d90947c76 100644 --- a/src/pokemon/mon_markings.c +++ b/src/pokemon/mon_markings.c @@ -2,7 +2,7 @@ #include "main.h" #include "menu_cursor.h" #include "text_window.h" -#include "songs.h" +#include "constants/songs.h" #include "sound.h" #include "sprite.h" diff --git a/src/pokemon/pokedex.c b/src/pokemon/pokedex.c index 604085b28..a4d84bebd 100644 --- a/src/pokemon/pokedex.c +++ b/src/pokemon/pokedex.c @@ -16,9 +16,9 @@ #include "pokemon.h" #include "random.h" #include "overworld.h" -#include "songs.h" +#include "constants/songs.h" #include "sound.h" -#include "species.h" +#include "constants/species.h" #include "string_util.h" #include "strings.h" #include "task.h" diff --git a/src/pokemon/pokemon_1.c b/src/pokemon/pokemon_1.c index d44a8b61e..e0c28bdba 100644 --- a/src/pokemon/pokemon_1.c +++ b/src/pokemon/pokemon_1.c @@ -5,7 +5,7 @@ #include "pokemon.h" #include "random.h" #include "overworld.h" -#include "species.h" +#include "constants/species.h" #include "sprite.h" #include "string_util.h" #include "text.h" diff --git a/src/pokemon/pokemon_2.c b/src/pokemon/pokemon_2.c index cedcc2720..8e5d7a33f 100644 --- a/src/pokemon/pokemon_2.c +++ b/src/pokemon/pokemon_2.c @@ -6,7 +6,7 @@ #include "pokemon.h" #include "random.h" #include "rom_8077ABC.h" -#include "species.h" +#include "constants/species.h" #include "sprite.h" #include "string_util.h" #include "strings2.h" diff --git a/src/pokemon/pokemon_3.c b/src/pokemon/pokemon_3.c index 40165384d..a0e73b952 100644 --- a/src/pokemon/pokemon_3.c +++ b/src/pokemon/pokemon_3.c @@ -15,9 +15,9 @@ #include "rom_8077ABC.h" #include "rom_8094928.h" #include "rtc.h" -#include "songs.h" +#include "constants/songs.h" #include "sound.h" -#include "species.h" +#include "constants/species.h" #include "sprite.h" #include "string_util.h" #include "text.h" diff --git a/src/pokemon/pokemon_data.c b/src/pokemon/pokemon_data.c index 3d13a3390..a00cea842 100644 --- a/src/pokemon/pokemon_data.c +++ b/src/pokemon/pokemon_data.c @@ -1,8 +1,8 @@ #include "global.h" #include "pokemon.h" -#include "species.h" +#include "constants/species.h" #include "trainer.h" -#include "abilities.h" +#include "constants/abilities.h" #include "moves.h" #include "hold_effects.h" #include "items.h" diff --git a/src/pokemon/pokemon_icon.c b/src/pokemon/pokemon_icon.c index e83f912ec..b1b462761 100644 --- a/src/pokemon/pokemon_icon.c +++ b/src/pokemon/pokemon_icon.c @@ -1,7 +1,7 @@ #include "global.h" #include "graphics.h" #include "mail_data.h" -#include "species.h" +#include "constants/species.h" #include "sprite.h" #define POKE_ICON_BASE_PAL_TAG 56000 diff --git a/src/pokemon/pokemon_menu.c b/src/pokemon/pokemon_menu.c index 07d7e5322..9811a6f77 100644 --- a/src/pokemon/pokemon_menu.c +++ b/src/pokemon/pokemon_menu.c @@ -5,7 +5,7 @@ #include "palette.h" #include "menu.h" #include "mail_data.h" -#include "songs.h" +#include "constants/songs.h" #include "sound.h" #include "main.h" #include "overworld.h" diff --git a/src/pokemon/pokemon_size_record.c b/src/pokemon/pokemon_size_record.c index a71e6f1fd..260396de0 100644 --- a/src/pokemon/pokemon_size_record.c +++ b/src/pokemon/pokemon_size_record.c @@ -3,7 +3,7 @@ #include "data2.h" #include "event_data.h" #include "pokedex.h" -#include "species.h" +#include "constants/species.h" #include "string_util.h" #include "strings2.h" #include "text.h" diff --git a/src/pokenav_before.c b/src/pokenav_before.c index 5cd1c8942..bf1956187 100644 --- a/src/pokenav_before.c +++ b/src/pokenav_before.c @@ -12,7 +12,7 @@ #include "overworld.h" #include "palette.h" #include "region_map.h" -#include "songs.h" +#include "constants/songs.h" #include "string_util.h" #include "sound.h" #include "task.h" diff --git a/src/rom3.c b/src/rom3.c index 16e605390..b150893d3 100644 --- a/src/rom3.c +++ b/src/rom3.c @@ -11,7 +11,7 @@ #include "pokemon.h" #include "rom3.h" #include "rom_8094928.h" -#include "species.h" +#include "constants/species.h" #include "task.h" #include "util.h" #include "battle_message.h" diff --git a/src/rom6.c b/src/rom6.c index 32b5f52a5..c25f0f9f5 100644 --- a/src/rom6.c +++ b/src/rom6.c @@ -8,7 +8,7 @@ #include "pokemon_menu.h" #include "overworld.h" #include "script.h" -#include "songs.h" +#include "constants/songs.h" #include "sound.h" #include "sprite.h" #include "task.h" diff --git a/src/rom_8077ABC.c b/src/rom_8077ABC.c index e4801a194..42f360b69 100644 --- a/src/rom_8077ABC.c +++ b/src/rom_8077ABC.c @@ -7,7 +7,7 @@ #include "decompress.h" #include "palette.h" #include "pokemon_icon.h" -#include "species.h" +#include "constants/species.h" #include "sprite.h" #include "task.h" #include "trig.h" diff --git a/src/scene/berry_blender.c b/src/scene/berry_blender.c index 91b5c10bc..790549ca4 100644 --- a/src/scene/berry_blender.c +++ b/src/scene/berry_blender.c @@ -7,7 +7,7 @@ #include "menu.h" #include "strings2.h" #include "sound.h" -#include "songs.h" +#include "constants/songs.h" #include "berry.h" #include "string_util.h" #include "link.h" diff --git a/src/scene/credits.c b/src/scene/credits.c index fed1d993a..81be60c9f 100644 --- a/src/scene/credits.c +++ b/src/scene/credits.c @@ -10,9 +10,9 @@ #include "palette.h" #include "pokedex.h" #include "random.h" -#include "songs.h" +#include "constants/songs.h" #include "sound.h" -#include "species.h" +#include "constants/species.h" #include "starter_choose.h" #include "task.h" #include "trig.h" diff --git a/src/scene/egg_hatch.c b/src/scene/egg_hatch.c index 3675b42cf..ef4f5ce78 100644 --- a/src/scene/egg_hatch.c +++ b/src/scene/egg_hatch.c @@ -13,7 +13,7 @@ #include "pokemon.h" #include "random.h" #include "script.h" -#include "songs.h" +#include "constants/songs.h" #include "sound.h" #include "string_util.h" #include "strings2.h" diff --git a/src/scene/evolution_graphics.c b/src/scene/evolution_graphics.c index dc0e219c5..b9ef5b402 100644 --- a/src/scene/evolution_graphics.c +++ b/src/scene/evolution_graphics.c @@ -6,7 +6,7 @@ #include "decompress.h" #include "task.h" #include "sound.h" -#include "songs.h" +#include "constants/songs.h" #include "palette.h" // this file's functions diff --git a/src/scene/evolution_scene.c b/src/scene/evolution_scene.c index 1bbb8d485..f5612f86b 100644 --- a/src/scene/evolution_scene.c +++ b/src/scene/evolution_scene.c @@ -16,9 +16,9 @@ #include "trade.h" #include "menu.h" #include "pokedex.h" -#include "species.h" +#include "constants/species.h" #include "sound.h" -#include "songs.h" +#include "constants/songs.h" #include "overworld.h" #include "battle_message.h" #include "pokemon_summary_screen.h" diff --git a/src/scene/hall_of_fame.c b/src/scene/hall_of_fame.c index 63aaf79c9..1751ee99c 100644 --- a/src/scene/hall_of_fame.c +++ b/src/scene/hall_of_fame.c @@ -3,14 +3,14 @@ #include "task.h" #include "palette.h" #include "sound.h" -#include "songs.h" +#include "constants/songs.h" #include "pokemon.h" #include "text.h" #include "strings.h" #include "string_util.h" #include "menu.h" #include "save.h" -#include "species.h" +#include "constants/species.h" #include "overworld.h" #include "m4a.h" #include "data2.h" diff --git a/src/scene/intro.c b/src/scene/intro.c index c713071e7..9e334d06b 100644 --- a/src/scene/intro.c +++ b/src/scene/intro.c @@ -13,9 +13,9 @@ #include "palette.h" #include "random.h" #include "save.h" -#include "songs.h" +#include "constants/songs.h" #include "sound.h" -#include "species.h" +#include "constants/species.h" #include "task.h" #include "title_screen.h" #include "trig.h" diff --git a/src/scene/intro_credits_graphics.c b/src/scene/intro_credits_graphics.c index bb80ef3b6..05c67696a 100755 --- a/src/scene/intro_credits_graphics.c +++ b/src/scene/intro_credits_graphics.c @@ -13,9 +13,9 @@ #include "palette.h" #include "random.h" #include "save.h" -#include "songs.h" +#include "constants/songs.h" #include "sound.h" -#include "species.h" +#include "constants/species.h" #include "task.h" #include "title_screen.h" #include "trig.h" diff --git a/src/script_pokemon_util_80C4BF0.c b/src/script_pokemon_util_80C4BF0.c index 9b6265308..4a875d58c 100644 --- a/src/script_pokemon_util_80C4BF0.c +++ b/src/script_pokemon_util_80C4BF0.c @@ -20,7 +20,7 @@ #include "random.h" #include "overworld.h" #include "script_pokemon_80C4.h" -#include "species.h" +#include "constants/species.h" #include "task.h" #include "ewram.h" diff --git a/src/script_pokemon_util_80F99CC.c b/src/script_pokemon_util_80F99CC.c index 21ff220d2..95555d167 100644 --- a/src/script_pokemon_util_80F99CC.c +++ b/src/script_pokemon_util_80F99CC.c @@ -12,7 +12,7 @@ #include "overworld.h" #include "script.h" #include "script_pokemon_80F9.h" -#include "songs.h" +#include "constants/songs.h" #include "sound.h" #include "string_util.h" #include "task.h" -- cgit v1.2.3 From 43349392dc4c79494af0e0727065c57ff78e1e92 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Sun, 26 Nov 2017 14:04:00 -0600 Subject: easy_chat constants --- src/engine/trade.c | 2 +- src/field/bard_music.c | 2 +- src/field/battle_tower.c | 1 + src/field/dewford_trend.c | 1 + src/field/easy_chat.c | 1 + src/field/mauville_man.c | 1 + src/field/tv.c | 2 +- 7 files changed, 7 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/engine/trade.c b/src/engine/trade.c index 00b88c114..1079e4749 100644 --- a/src/engine/trade.c +++ b/src/engine/trade.c @@ -6,7 +6,7 @@ #include "constants/species.h" #include "items.h" #include "moves.h" -#include "easy_chat.h" +#include "constants/easy_chat.h" #include "link.h" #include "strings2.h" #include "graphics.h" diff --git a/src/field/bard_music.c b/src/field/bard_music.c index daf003233..335ba974e 100644 --- a/src/field/bard_music.c +++ b/src/field/bard_music.c @@ -1,6 +1,6 @@ #include "global.h" #include "bard_music.h" -#include "easy_chat.h" +#include "constants/easy_chat.h" struct BardSound { diff --git a/src/field/battle_tower.c b/src/field/battle_tower.c index 5f2a84d06..12a2f3f11 100644 --- a/src/field/battle_tower.c +++ b/src/field/battle_tower.c @@ -5,6 +5,7 @@ #include "battle_transition.h" #include "data2.h" #include "easy_chat.h" +#include "constants/easy_chat.h" #include "event_data.h" #include "item.h" #include "items.h" diff --git a/src/field/dewford_trend.c b/src/field/dewford_trend.c index bdcd76ec5..90ea74f77 100644 --- a/src/field/dewford_trend.c +++ b/src/field/dewford_trend.c @@ -1,6 +1,7 @@ #include "global.h" #include "dewford_trend.h" #include "easy_chat.h" +#include "constants/easy_chat.h" #include "event_data.h" #include "link.h" #include "random.h" diff --git a/src/field/easy_chat.c b/src/field/easy_chat.c index 7a4ae045e..1dce5863e 100644 --- a/src/field/easy_chat.c +++ b/src/field/easy_chat.c @@ -1,5 +1,6 @@ #include "global.h" #include "easy_chat.h" +#include "constants/easy_chat.h" #include "data2.h" #include "event_data.h" #include "field_message_box.h" diff --git a/src/field/mauville_man.c b/src/field/mauville_man.c index 7c9c072a1..fad6674db 100644 --- a/src/field/mauville_man.c +++ b/src/field/mauville_man.c @@ -2,6 +2,7 @@ #include "bard_music.h" #include "mauville_man.h" #include "easy_chat.h" +#include "constants/easy_chat.h" #include "event_data.h" #include "field_message_box.h" #include "m4a.h" diff --git a/src/field/tv.c b/src/field/tv.c index 28737ecaa..5c42fc7ec 100644 --- a/src/field/tv.c +++ b/src/field/tv.c @@ -20,7 +20,7 @@ #include "strings.h" #include "battle.h" #include "link.h" -#include "easy_chat.h" +#include "constants/easy_chat.h" #include "field_map_obj.h" #include "field_specials.h" #include "item.h" -- cgit v1.2.3 From e7215091ee44b26d83753104f879671db4224803 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Sun, 26 Nov 2017 14:10:28 -0600 Subject: fix German build --- src/field/bard_music.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/field/bard_music.c b/src/field/bard_music.c index 335ba974e..daf003233 100644 --- a/src/field/bard_music.c +++ b/src/field/bard_music.c @@ -1,6 +1,6 @@ #include "global.h" #include "bard_music.h" -#include "constants/easy_chat.h" +#include "easy_chat.h" struct BardSound { -- cgit v1.2.3 From 3ee36e8fcf7fd5e1739b52b4ddc9e2ac2103c8bb Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Sun, 12 Nov 2017 21:40:18 -0800 Subject: Start decompiling the second half of pokemon_summary_screen --- src/pokemon/pokemon_summary_screen.c | 168 ++++++++++++++++++++++++++++++++++- 1 file changed, 167 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/pokemon/pokemon_summary_screen.c b/src/pokemon/pokemon_summary_screen.c index 70b9b7d94..02c5b7501 100644 --- a/src/pokemon/pokemon_summary_screen.c +++ b/src/pokemon/pokemon_summary_screen.c @@ -1,13 +1,35 @@ #include "global.h" #include "pokemon_summary_screen.h" +#include "data2.h" +#include "ewram.h" +#include "item.h" +#include "items.h" #include "link.h" #include "menu.h" +#include "menu_helpers.h" +#include "party_menu.h" #include "pokemon.h" #include "region_map.h" +#include "species.h" #include "string_util.h" +#include "strings.h" #include "strings2.h" #include "tv.h" -#include "ewram.h" + +struct SummaryScreenStruct +{ + /*0x00*/ u8 filler0[9]; + /*0x09*/ u8 unk9; +}; + +#define ewramSS (*(struct SummaryScreenStruct *)(gSharedMem + 0x18000)) + +extern u8 *sub_80A1E58(u8 *, u8); +static void sub_80A0A2C(struct Pokemon *, u8, u8); +extern void sub_80A1FF8(const u8 *, u8, u8, u8); + +extern const u8 gUnknown_083C15AE[]; +extern const u8 gUnknown_083C15B4[]; bool8 PokemonSummaryScreen_CheckOT(struct Pokemon *mon) { @@ -178,3 +200,147 @@ void PokemonSummaryScreen_PrintTrainerMemo(struct Pokemon *pokemon, u8 left, u8 MenuPrint(gStringVar4, left++, top++); } + +void sub_80A0958(struct Pokemon *pokemon) +{ + u16 species; + u8 *buffer; + u8 level; + + species = GetMonData(pokemon, MON_DATA_SPECIES); + + buffer = gStringVar1; + buffer = sub_80A1E58(buffer, 13); + buffer[0] = EXT_CTRL_CODE_BEGIN; + buffer[1] = 0x11; + buffer[2] = 0x7; + buffer[3] = CHAR_SLASH; + buffer += 4; + buffer = StringCopy(buffer, gSpeciesNames[species]); + + buffer[0] = EXT_CTRL_CODE_BEGIN; + buffer[1] = 0x13; + buffer[2] = 0x50; + buffer[3] = EOS; + + MenuPrint(gStringVar1, 0, 14); + MenuZeroFillWindowRect(3, 16, 9, 17); + + level = GetMonData(pokemon, MON_DATA_LEVEL); + + buffer = sub_80A1E58(gStringVar1, 13); + buffer[0] = 0x34; + buffer += 1; + buffer = ConvertIntToDecimalString(buffer, level); + + buffer[0] = EXT_CTRL_CODE_BEGIN; + buffer[1] = 0x13; + buffer[2] = 0x20; + buffer[3] = EOS; + + MenuPrint(gStringVar1, 3, 16); + sub_80A0A2C(pokemon, 7, 16); +} + +void sub_80A0A2C(struct Pokemon *pokemon, u8 left, u8 top) +{ + const u8 *genderSymbol; + u8 var1; + u8 bottom; + u16 species = GetMonData(pokemon, MON_DATA_SPECIES2); + + if (species != SPECIES_NIDORAN_M && species != SPECIES_NIDORAN_F) + { + u8 gender = GetMonGender(pokemon); + switch (gender) + { + default: + bottom = top + 1; + MenuZeroFillWindowRect(left, top, left, bottom); + return; + case MON_MALE: + genderSymbol = gOtherText_MaleSymbol2; + var1 = 11; + break; + case MON_FEMALE: + genderSymbol = gOtherText_FemaleSymbolAndLv; + var1 = 12; + break; + } + + sub_80A1FF8(genderSymbol, var1, left, top); + } +} + +u8 GetNumRibbons(struct Pokemon *pokemon) +{ + u8 numRibbons = GetMonData(pokemon, MON_DATA_COOL_RIBBON); + numRibbons += GetMonData(pokemon, MON_DATA_BEAUTY_RIBBON); + numRibbons += GetMonData(pokemon, MON_DATA_CUTE_RIBBON); + numRibbons += GetMonData(pokemon, MON_DATA_SMART_RIBBON); + numRibbons += GetMonData(pokemon, MON_DATA_TOUGH_RIBBON); + numRibbons += GetMonData(pokemon, MON_DATA_CHAMPION_RIBBON); + numRibbons += GetMonData(pokemon, MON_DATA_WINNING_RIBBON); + numRibbons += GetMonData(pokemon, MON_DATA_VICTORY_RIBBON); + numRibbons += GetMonData(pokemon, MON_DATA_ARTIST_RIBBON); + numRibbons += GetMonData(pokemon, MON_DATA_EFFORT_RIBBON); + numRibbons += GetMonData(pokemon, MON_DATA_GIFT_RIBBON_1); + numRibbons += GetMonData(pokemon, MON_DATA_GIFT_RIBBON_2); + numRibbons += GetMonData(pokemon, MON_DATA_GIFT_RIBBON_3); + numRibbons += GetMonData(pokemon, MON_DATA_GIFT_RIBBON_4); + numRibbons += GetMonData(pokemon, MON_DATA_GIFT_RIBBON_5); + numRibbons += GetMonData(pokemon, MON_DATA_GIFT_RIBBON_6); + numRibbons += GetMonData(pokemon, MON_DATA_GIFT_RIBBON_7); + + return numRibbons; +} + +void PrintNumRibbons(struct Pokemon *pokemon) +{ + u8 numRibbons = GetNumRibbons(pokemon); + + if (numRibbons == 0) + { + StringCopy(gStringVar1, gOtherText_None); + } + else + { + u8 ribbonsStringLength; + u8 *text; + + StringCopy(gStringVar1, gOtherText_Ribbons00); + ribbonsStringLength = StringLength(gStringVar1); + + text = &gStringVar1[ribbonsStringLength - 2]; + + text[0] = EXT_CTRL_CODE_BEGIN; + text[1] = 0x14; + text[2] = 6; + ConvertIntToDecimalStringN(&text[3], numRibbons, 1, 2); + } + + MenuPrint(gUnknown_083C15AE, 21, 4); +} + +void PrintHeldItemName(u16 itemId, u8 left, u8 top) +{ + if (itemId == ITEM_ENIGMA_BERRY + && sub_80F9344() == TRUE + && IsLinkDoubleBattle() == TRUE + && (ewramSS.unk9 == 1 || ewramSS.unk9 == 4 || ewramSS.unk9 == 5)) + { + StringCopy(gStringVar1, ItemId_GetItem(itemId)->name); + } + else if (itemId == 0) + { + StringCopy(gStringVar1, gOtherText_None); + } + else + { + CopyItemName(itemId, gStringVar1); + } + + MenuPrint(gUnknown_083C15B4, left, top); +} + + -- cgit v1.2.3 From e5a0da4d11fcf6bb1a4ca0ed27da7aaa234c28ac Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Tue, 14 Nov 2017 20:58:19 -0800 Subject: Decompile DrawExperienceProgressBar() --- src/pokemon/pokemon_summary_screen.c | 67 ++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) (limited to 'src') diff --git a/src/pokemon/pokemon_summary_screen.c b/src/pokemon/pokemon_summary_screen.c index 02c5b7501..63f9a9b9e 100644 --- a/src/pokemon/pokemon_summary_screen.c +++ b/src/pokemon/pokemon_summary_screen.c @@ -343,4 +343,71 @@ void PrintHeldItemName(u16 itemId, u8 left, u8 top) MenuPrint(gUnknown_083C15B4, left, top); } +void DrawExperienceProgressBar(struct Pokemon *pokemon, u8 left, u8 top) +{ + u32 curExperience; + u8 level; + u16 species; + u8 i; + u16 *vramAddr; + u32 expToNextLevel = 0; + s64 numExpProgressBarTicks = 0; + + curExperience = GetMonData(pokemon, MON_DATA_EXP); + level = GetMonData(pokemon, MON_DATA_LEVEL); + species = GetMonData(pokemon, MON_DATA_SPECIES); + + // The experience progress bar is shown as empty when the Pokemon is already level 100. + if (level < 100) + { + u32 nextLevelExp; + u32 expSinceLastLevel; + u32 expBetweenLevels; + u32 curLevelExperience; + + nextLevelExp = gExperienceTables[gBaseStats[species].growthRate][level + 1]; + expToNextLevel = nextLevelExp - curExperience; + curLevelExperience = gExperienceTables[gBaseStats[species].growthRate][level]; + expBetweenLevels = (nextLevelExp - curLevelExperience); + expSinceLastLevel = curExperience - curLevelExperience; + + // Calculate the number of 1-pixel "ticks" to illuminate in the experience progress bar. + // There are 8 tiles that make up the bar, and each tile has 8 "ticks". Hence, the numerator + // is multiplied by 64. + numExpProgressBarTicks = (expSinceLastLevel * 64) / expBetweenLevels; + if (numExpProgressBarTicks == 0 && expSinceLastLevel != 0) + { + // Ensure sure some exp. gain is visible in the progress bar. + numExpProgressBarTicks = 1; + } + } + + ConvertIntToDecimalString(gStringVar1, expToNextLevel); + MenuPrint_RightAligned(gStringVar1, left + 6, top); + + // Draw each of the 8 tiles that make up the experience progress bar. + vramAddr = (u16 *)(VRAM + 0x4CAA); + for (i = 0; i < 8; i++) + { + u16 tile; + u16 baseTile = 0x2062; + + if (numExpProgressBarTicks > 7) + { + tile = 0x206A; // full exp. bar block + } + else + { + tile = (numExpProgressBarTicks % 8) + baseTile; + } + + vramAddr[i] = tile; + + numExpProgressBarTicks -= 8; + if (numExpProgressBarTicks < 0) + { + numExpProgressBarTicks = 0; + } + } +} -- cgit v1.2.3 From 34a49a726c6c42803950fc993394be8b96492c71 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Tue, 14 Nov 2017 22:00:53 -0800 Subject: More pokemon_summary_screen decompilation --- src/pokemon/mon_markings.c | 16 +- src/pokemon/pokemon_summary_screen.c | 1964 ++++++++++++++++++++++++++++++++++ src/strings.c | 2 +- 3 files changed, 1973 insertions(+), 9 deletions(-) (limited to 'src') diff --git a/src/pokemon/mon_markings.c b/src/pokemon/mon_markings.c index 29e8c5127..e330fed65 100644 --- a/src/pokemon/mon_markings.c +++ b/src/pokemon/mon_markings.c @@ -45,11 +45,11 @@ extern const union AnimCmd *const gSpriteAnimTable_83E533C[]; static EWRAM_DATA struct PokemonMarkMenu *sMenu = NULL; -void sub_80F761C(s16, s16, u16, u16); -void nullsub_65(struct Sprite *); -void sub_80F78CC(struct Sprite *); -void sub_80F7908(struct Sprite *); -struct Sprite *sub_80F7960(u16, u16, u16 *, u16); +static void sub_80F761C(s16, s16, u16, u16); +static void nullsub_65(struct Sprite *); +static void sub_80F78CC(struct Sprite *); +static void sub_80F7908(struct Sprite *); +static struct Sprite *sub_80F7960(u16, u16, const u16 *, u16); void sub_80F727C(struct PokemonMarkMenu *ptr) { @@ -335,21 +335,21 @@ void sub_80F7908(struct Sprite *sprite) sprite->pos1.y = 16 * sMenu->cursorPos + sMenu->cursorBaseY; } -struct Sprite *sub_80F7920(u16 tileTag, u16 paletteTag, u16 *palette) +struct Sprite *sub_80F7920(u16 tileTag, u16 paletteTag, const u16 *palette) { if (!palette) palette = gUnknown_083E49F4; return sub_80F7960(tileTag, paletteTag, palette, 16); } -struct Sprite *sub_80F7940(u16 tileTag, u16 paletteTag, u16 *palette) +struct Sprite *sub_80F7940(u16 tileTag, u16 paletteTag, const u16 *palette) { if (!palette) palette = gUnknown_083E49F4; return sub_80F7960(tileTag, paletteTag, palette, 1); } -struct Sprite *sub_80F7960(u16 tileTag, u16 paletteTag, u16 *palette, u16 size) +struct Sprite *sub_80F7960(u16 tileTag, u16 paletteTag, const u16 *palette, u16 size) { u8 spriteId; struct SpriteTemplate sprTemplate; diff --git a/src/pokemon/pokemon_summary_screen.c b/src/pokemon/pokemon_summary_screen.c index 63f9a9b9e..8402bcf16 100644 --- a/src/pokemon/pokemon_summary_screen.c +++ b/src/pokemon/pokemon_summary_screen.c @@ -7,29 +7,73 @@ #include "link.h" #include "menu.h" #include "menu_helpers.h" +#include "overworld.h" +#include "palette.h" #include "party_menu.h" +#include "pokeball.h" #include "pokemon.h" #include "region_map.h" +#include "sound.h" #include "species.h" +#include "sprite.h" #include "string_util.h" #include "strings.h" #include "strings2.h" +#include "task.h" #include "tv.h" struct SummaryScreenStruct { /*0x00*/ u8 filler0[9]; /*0x09*/ u8 unk9; + /*0x0A*/ u8 fillerA; + /*0x0B*/ u8 unkB; + /*0x0C*/ u8 fillerC; + /*0x0D*/ u8 unkD; + /*0x0E*/ u8 fillerE[0x2]; + /*0x10*/ struct Pokemon unk10; + /*0x74*/ u8 filler74; + /*0x75*/ u8 unk75; + /*0x76*/ u8 unk76; + /*0x77*/ u8 filler77[0x2]; + /*0x79*/ u8 unk79; + /*0x7A*/ u8 unk7A; + /*0x7B*/ u8 filler7B[0x3]; + /*0x7E*/ u8 unk7E; + /*0x7F*/ u8 unk7F; }; #define ewramSS (*(struct SummaryScreenStruct *)(gSharedMem + 0x18000)) +extern void sub_80A20A8(u8); +extern u8 ball_number_to_ball_processing_index(u16); +extern void sub_809F678(struct Pokemon *); +extern void sub_80A1BC0(struct Sprite *sprite); +extern void sub_80A1888(struct Sprite *); +extern void sub_80A00F4(s16); +extern void sub_80A0428(struct Pokemon *, s16*); +extern void sub_80A18E4(u8); +extern void GetStringCenterAlignXOffset(u8, u8, u8); extern u8 *sub_80A1E58(u8 *, u8); static void sub_80A0A2C(struct Pokemon *, u8, u8); extern void sub_80A1FF8(const u8 *, u8, u8, u8); +extern TaskFunc gUnknown_03005CF0; +extern const u8 gUnknown_083C15BC[]; +extern struct Sprite *gUnknown_020384F4; +extern const u16 gSummaryScreenMonMarkingsPalette[]; +extern struct SpriteTemplate gSpriteTemplate_83C1304; +extern struct SpriteTemplate gSpriteTemplate_83C1280; +extern const u8 gUnknown_083C11D8[]; +extern struct SpriteTemplate gSpriteTemplate_83C11C0; +extern struct SpriteTemplate gUnknown_02024E8C; +extern const u16 gUnknown_08E94510[]; +extern const u16 gUnknown_08E94550[]; +extern const u16 gUnknown_08E94590[]; +extern const u8 gUnknown_08E73E88[]; extern const u8 gUnknown_083C15AE[]; extern const u8 gUnknown_083C15B4[]; +extern const u8 *const gUnknown_083C1068[]; bool8 PokemonSummaryScreen_CheckOT(struct Pokemon *mon) { @@ -411,3 +455,1923 @@ void DrawExperienceProgressBar(struct Pokemon *pokemon, u8 left, u8 top) } } } + +// Prints the text displayed in the top-left or top-right of the screen. +// Each of the 4 summary screens displays different text. +void PrintSummaryWindowHeaderText(void) +{ + u8 *buffer = gStringVar1; + + buffer[0] = EXT_CTRL_CODE_BEGIN; + buffer[1] = 0x12; + buffer[2] = 0x2; + + buffer += 3; + buffer = sub_80A1E58(buffer, 13); + buffer = StringCopy(buffer, gUnknown_083C1068[ewramSS.unk7E]); + + buffer[0] = EXT_CTRL_CODE_BEGIN; + buffer[1] = 0x13; + buffer[2] = 0x58; + buffer[3] = EOS; + + MenuPrint(gStringVar1, 0, 0); + + if (ewramSS.unk7F != 0) + { + GetStringCenterAlignXOffset(5, 23, 0); + GetStringCenterAlignXOffset(6, 24, 0); + } + else + { + MenuZeroFillWindowRect(23, 0, 24, 1); + } + + buffer = gStringVar1; + buffer = sub_80A1E58(buffer, 13); + buffer = StringCopy(buffer, gUnknown_083C1068[ewramSS.unk7F]); + + buffer[0] = EXT_CTRL_CODE_BEGIN; + buffer[1] = 0x13; + buffer[2] = 0x28; + buffer[3] = EOS; + + MenuPrint(gStringVar1, 25, 0); +} + +// If the given pokemon previously had the pokerus virus, a small +// dot will be drawn in between the pokeball and the mon's level. +void DrawPokerusSurvivorDot(struct Pokemon *pokemon) +{ + u16 *vram1 = (u16 *)(VRAM + 0xE444); + u16 *vram2 = (u16 *)(VRAM + 0xEC44); + + if (!CheckPartyPokerus(pokemon, 0) && CheckPartyHasHadPokerus(pokemon, 0)) + { + *vram1 = 0x2C; + *vram2 = 0x2C; + } + else + { + *vram1 = 0x081A; + *vram2 = 0x081A; + } +} + +// Draws the 4 small navigation circles at the top of the pokemon summary screen. +#ifdef NONMATCHING +void DrawSummaryScreenNavigationDots(void) +{ + void *dest; + u16 arr[8]; + u8 i = 0; + struct SummaryScreenStruct *SS = (struct SummaryScreenStruct *)(gSharedMem + 0x18000); + u16 var1 = 0x4040; + u16 var2 = 0x404A; + + for (i = 0; i < 4; i++) + { + if (i < SS->unk75) + { + arr[i * 2] = var1; + arr[(i * 2) + 1] = var1 + 1; + } + else if (i > SS->unk76) + { + arr[i * 2] = var2; + arr[(i * 2) + 1] = var2 + 1; + } + else + { + if (i < SS->unkB) + { + arr[i * 2] = 0x4046; + arr[(i * 2) + 1] = 0x4046 + 1; + } + + if (i == SS->unkB) + { + if (i != SS->unk76) + { + arr[i * 2] = 0x4041; + arr[(i * 2) + 1] = 0x4041 + 1; + } + else + { + arr[i * 2] = 0x404B; + arr[(i * 2) + 1] = 0x404B + 1; + } + } + + if (i > SS->unkB) + { + if (i != SS->unk76) + { + arr[i * 2] = 0x4043; + arr[(i * 2) + 1] = 0x4043 + 1; + } + else + { + arr[i * 2] = 0x4048; + arr[(i * 2) + 1] = 0x4048 + 1; + } + } + } + } + + dest = (void *)(VRAM + 0xE016); + DmaCopy16(3, arr, dest, 16); + + for (i = 0; i < 8; i++) + { + arr[i] += 0x10; + } + + dest = (void *)(VRAM + 0xE056); + DmaCopy16(3, arr, dest, 16); +} +#else +__attribute__((naked)) +void DrawSummaryScreenNavigationDots(void) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, 0x10\n\ + movs r3, 0\n\ + ldr r6, _080A0F24 @ =gSharedMem + 0x18000\n\ + adds r5, r6, 0\n\ + ldr r1, _080A0F28 @ =0x00004040\n\ + mov r8, r1\n\ + ldr r2, _080A0F2C @ =0x0000404a\n\ + mov r10, r2\n\ +_080A0F02:\n\ + adds r0, r5, 0\n\ + adds r0, 0x75\n\ + ldrb r0, [r0]\n\ + cmp r3, r0\n\ + bcs _080A0F30\n\ + lsls r1, r3, 1\n\ + lsls r0, r3, 2\n\ + add r0, sp\n\ + mov r4, r8\n\ + strh r4, [r0]\n\ + adds r1, 0x1\n\ + lsls r1, 1\n\ + mov r7, sp\n\ + adds r0, r7, r1\n\ + strh r4, [r0]\n\ + b _080A0FE2\n\ + .align 2, 0\n\ +_080A0F24: .4byte gSharedMem + 0x18000\n\ +_080A0F28: .4byte 0x00004040\n\ +_080A0F2C: .4byte 0x0000404a\n\ +_080A0F30:\n\ + movs r0, 0x76\n\ + adds r0, r6\n\ + mov r12, r0\n\ + ldrb r1, [r0]\n\ + cmp r3, r1\n\ + bls _080A0F52\n\ + lsls r1, r3, 1\n\ + lsls r0, r3, 2\n\ + add r0, sp\n\ + mov r2, r10\n\ + strh r2, [r0]\n\ + adds r1, 0x1\n\ + lsls r1, 1\n\ + mov r4, sp\n\ + adds r0, r4, r1\n\ + strh r2, [r0]\n\ + b _080A0FE2\n\ +_080A0F52:\n\ + ldrb r4, [r5, 0xB]\n\ + cmp r3, r4\n\ + bcs _080A0F6E\n\ + lsls r1, r3, 1\n\ + lsls r0, r3, 2\n\ + mov r7, sp\n\ + adds r2, r7, r0\n\ + ldr r0, _080A0F88 @ =0x00004046\n\ + strh r0, [r2]\n\ + adds r1, 0x1\n\ + lsls r1, 1\n\ + add r1, sp\n\ + adds r0, 0x1\n\ + strh r0, [r1]\n\ +_080A0F6E:\n\ + cmp r3, r4\n\ + bne _080A0FA6\n\ + mov r0, r12\n\ + ldrb r0, [r0]\n\ + cmp r3, r0\n\ + beq _080A0F90\n\ + lsls r1, r3, 1\n\ + lsls r0, r3, 2\n\ + mov r4, sp\n\ + adds r2, r4, r0\n\ + ldr r0, _080A0F8C @ =0x00004041\n\ + b _080A0F9A\n\ + .align 2, 0\n\ +_080A0F88: .4byte 0x00004046\n\ +_080A0F8C: .4byte 0x00004041\n\ +_080A0F90:\n\ + lsls r1, r3, 1\n\ + lsls r0, r3, 2\n\ + mov r7, sp\n\ + adds r2, r7, r0\n\ + ldr r0, _080A0FC4 @ =0x0000404b\n\ +_080A0F9A:\n\ + strh r0, [r2]\n\ + adds r1, 0x1\n\ + lsls r1, 1\n\ + add r1, sp\n\ + adds r0, 0x1\n\ + strh r0, [r1]\n\ +_080A0FA6:\n\ + ldrb r0, [r5, 0xB]\n\ + cmp r3, r0\n\ + bls _080A0FE2\n\ + adds r0, r6, 0\n\ + adds r0, 0x76\n\ + ldrb r0, [r0]\n\ + cmp r3, r0\n\ + beq _080A0FCC\n\ + lsls r1, r3, 1\n\ + lsls r0, r3, 2\n\ + mov r4, sp\n\ + adds r2, r4, r0\n\ + ldr r0, _080A0FC8 @ =0x00004043\n\ + b _080A0FD6\n\ + .align 2, 0\n\ +_080A0FC4: .4byte 0x0000404b\n\ +_080A0FC8: .4byte 0x00004043\n\ +_080A0FCC:\n\ + lsls r1, r3, 1\n\ + lsls r0, r3, 2\n\ + mov r7, sp\n\ + adds r2, r7, r0\n\ + ldr r0, _080A1034 @ =0x00004048\n\ +_080A0FD6:\n\ + strh r0, [r2]\n\ + adds r1, 0x1\n\ + lsls r1, 1\n\ + add r1, sp\n\ + adds r0, 0x1\n\ + strh r0, [r1]\n\ +_080A0FE2:\n\ + adds r0, r3, 0x1\n\ + lsls r0, 24\n\ + lsrs r3, r0, 24\n\ + cmp r3, 0x3\n\ + bls _080A0F02\n\ + ldr r1, _080A1038 @ =0x0600e016\n\ + ldr r0, _080A103C @ =0x040000d4\n\ + mov r2, sp\n\ + str r2, [r0]\n\ + str r1, [r0, 0x4]\n\ + ldr r1, _080A1040 @ =0x80000008\n\ + str r1, [r0, 0x8]\n\ + ldr r0, [r0, 0x8]\n\ + movs r3, 0\n\ +_080A0FFE:\n\ + lsls r0, r3, 1\n\ + mov r4, sp\n\ + adds r1, r4, r0\n\ + ldrh r0, [r1]\n\ + adds r0, 0x10\n\ + strh r0, [r1]\n\ + adds r0, r3, 0x1\n\ + lsls r0, 24\n\ + lsrs r3, r0, 24\n\ + cmp r3, 0x7\n\ + bls _080A0FFE\n\ + ldr r1, _080A1044 @ =0x0600e056\n\ + ldr r0, _080A103C @ =0x040000d4\n\ + str r4, [r0]\n\ + str r1, [r0, 0x4]\n\ + ldr r1, _080A1040 @ =0x80000008\n\ + str r1, [r0, 0x8]\n\ + ldr r0, [r0, 0x8]\n\ + add sp, 0x10\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_080A1034: .4byte 0x00004048\n\ +_080A1038: .4byte 0x0600e016\n\ +_080A103C: .4byte 0x040000d4\n\ +_080A1040: .4byte 0x80000008\n\ +_080A1044: .4byte 0x0600e056\n\ + .syntax divided\n"); +} +#endif // NONMATCHING + +__attribute__((naked)) +void sub_80A1048(u8 taskId) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r8\n\ + push {r7}\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + mov r8, r0\n\ + lsls r0, 2\n\ + add r0, r8\n\ + lsls r0, 3\n\ + ldr r1, _080A10A0 @ =gTasks + 0x8\n\ + adds r6, r0, r1\n\ + ldrh r0, [r6]\n\ + ldrh r1, [r6, 0x2]\n\ + adds r0, r1\n\ + strh r0, [r6, 0x2]\n\ + lsls r0, 16\n\ + cmp r0, 0\n\ + bne _080A106E\n\ + b _080A1224\n\ +_080A106E:\n\ + movs r5, 0x2\n\ + ldrsh r2, [r6, r5]\n\ + ldr r0, _080A10A4 @ =0x0000024a\n\ + subs r0, r2\n\ + lsls r0, 1\n\ + ldr r1, _080A10A8 @ =gUnknown_08E73508\n\ + adds r4, r0, r1\n\ + ldr r5, _080A10AC @ =0x0600e480\n\ + lsls r2, 1\n\ + movs r0, 0x80\n\ + lsls r0, 5\n\ + adds r7, r1, 0\n\ + cmp r2, r0\n\ + bhi _080A10B4\n\ + ldr r0, _080A10B0 @ =0x040000d4\n\ + str r4, [r0]\n\ + str r5, [r0, 0x4]\n\ + lsrs r1, r2, 1\n\ + movs r2, 0x80\n\ + lsls r2, 24\n\ + orrs r1, r2\n\ + str r1, [r0, 0x8]\n\ + ldr r0, [r0, 0x8]\n\ + b _080A10E0\n\ + .align 2, 0\n\ +_080A10A0: .4byte gTasks + 0x8\n\ +_080A10A4: .4byte 0x0000024a\n\ +_080A10A8: .4byte gUnknown_08E73508\n\ +_080A10AC: .4byte 0x0600e480\n\ +_080A10B0: .4byte 0x040000d4\n\ +_080A10B4:\n\ + ldr r3, _080A110C @ =0x040000d4\n\ + str r4, [r3]\n\ + str r5, [r3, 0x4]\n\ + ldr r0, _080A1110 @ =0x80000800\n\ + str r0, [r3, 0x8]\n\ + ldr r0, [r3, 0x8]\n\ + movs r0, 0x80\n\ + lsls r0, 5\n\ + adds r4, r0\n\ + adds r5, r0\n\ + ldr r1, _080A1114 @ =0xfffff000\n\ + adds r2, r1\n\ + cmp r2, r0\n\ + bhi _080A10B4\n\ + str r4, [r3]\n\ + str r5, [r3, 0x4]\n\ + lsrs r0, r2, 1\n\ + movs r1, 0x80\n\ + lsls r1, 24\n\ + orrs r0, r1\n\ + str r0, [r3, 0x8]\n\ + ldr r0, [r3, 0x8]\n\ +_080A10E0:\n\ + movs r5, 0x2\n\ + ldrsh r0, [r6, r5]\n\ + ldr r1, _080A1118 @ =0x0000026a\n\ + subs r1, r0\n\ + lsls r1, 1\n\ + adds r3, r1, r7\n\ + ldr r4, _080A111C @ =0x0600e4c0\n\ + lsls r1, r0, 1\n\ + movs r0, 0x80\n\ + lsls r0, 5\n\ + cmp r1, r0\n\ + bhi _080A1120\n\ + ldr r0, _080A110C @ =0x040000d4\n\ + str r3, [r0]\n\ + str r4, [r0, 0x4]\n\ + lsrs r1, 1\n\ + movs r2, 0x80\n\ + lsls r2, 24\n\ + orrs r1, r2\n\ + str r1, [r0, 0x8]\n\ + ldr r0, [r0, 0x8]\n\ + b _080A114C\n\ + .align 2, 0\n\ +_080A110C: .4byte 0x040000d4\n\ +_080A1110: .4byte 0x80000800\n\ +_080A1114: .4byte 0xfffff000\n\ +_080A1118: .4byte 0x0000026a\n\ +_080A111C: .4byte 0x0600e4c0\n\ +_080A1120:\n\ + ldr r2, _080A1178 @ =0x040000d4\n\ + str r3, [r2]\n\ + str r4, [r2, 0x4]\n\ + ldr r0, _080A117C @ =0x80000800\n\ + str r0, [r2, 0x8]\n\ + ldr r0, [r2, 0x8]\n\ + movs r0, 0x80\n\ + lsls r0, 5\n\ + adds r3, r0\n\ + adds r4, r0\n\ + ldr r5, _080A1180 @ =0xfffff000\n\ + adds r1, r5\n\ + cmp r1, r0\n\ + bhi _080A1120\n\ + str r3, [r2]\n\ + str r4, [r2, 0x4]\n\ + lsrs r0, r1, 1\n\ + movs r1, 0x80\n\ + lsls r1, 24\n\ + orrs r0, r1\n\ + str r0, [r2, 0x8]\n\ + ldr r0, [r2, 0x8]\n\ +_080A114C:\n\ + movs r1, 0x2\n\ + ldrsh r0, [r6, r1]\n\ + ldr r1, _080A1184 @ =0x0000024a\n\ + subs r1, r0\n\ + lsls r1, 1\n\ + adds r3, r1, r7\n\ + ldr r4, _080A1188 @ =0x0600ec80\n\ + lsls r1, r0, 1\n\ + movs r0, 0x80\n\ + lsls r0, 5\n\ + cmp r1, r0\n\ + bhi _080A118C\n\ + ldr r0, _080A1178 @ =0x040000d4\n\ + str r3, [r0]\n\ + str r4, [r0, 0x4]\n\ + lsrs r1, 1\n\ + movs r2, 0x80\n\ + lsls r2, 24\n\ + orrs r1, r2\n\ + str r1, [r0, 0x8]\n\ + ldr r0, [r0, 0x8]\n\ + b _080A11B8\n\ + .align 2, 0\n\ +_080A1178: .4byte 0x040000d4\n\ +_080A117C: .4byte 0x80000800\n\ +_080A1180: .4byte 0xfffff000\n\ +_080A1184: .4byte 0x0000024a\n\ +_080A1188: .4byte 0x0600ec80\n\ +_080A118C:\n\ + ldr r2, _080A11E4 @ =0x040000d4\n\ + str r3, [r2]\n\ + str r4, [r2, 0x4]\n\ + ldr r0, _080A11E8 @ =0x80000800\n\ + str r0, [r2, 0x8]\n\ + ldr r0, [r2, 0x8]\n\ + movs r0, 0x80\n\ + lsls r0, 5\n\ + adds r3, r0\n\ + adds r4, r0\n\ + ldr r5, _080A11EC @ =0xfffff000\n\ + adds r1, r5\n\ + cmp r1, r0\n\ + bhi _080A118C\n\ + str r3, [r2]\n\ + str r4, [r2, 0x4]\n\ + lsrs r0, r1, 1\n\ + movs r1, 0x80\n\ + lsls r1, 24\n\ + orrs r0, r1\n\ + str r0, [r2, 0x8]\n\ + ldr r0, [r2, 0x8]\n\ +_080A11B8:\n\ + movs r1, 0x2\n\ + ldrsh r0, [r6, r1]\n\ + ldr r1, _080A11F0 @ =0x0000026a\n\ + subs r1, r0\n\ + lsls r1, 1\n\ + adds r3, r1, r7\n\ + ldr r4, _080A11F4 @ =0x0600ecc0\n\ + lsls r1, r0, 1\n\ + movs r0, 0x80\n\ + lsls r0, 5\n\ + cmp r1, r0\n\ + bhi _080A11F8\n\ + ldr r0, _080A11E4 @ =0x040000d4\n\ + str r3, [r0]\n\ + str r4, [r0, 0x4]\n\ + lsrs r1, 1\n\ + movs r2, 0x80\n\ + lsls r2, 24\n\ + orrs r1, r2\n\ + str r1, [r0, 0x8]\n\ + ldr r0, [r0, 0x8]\n\ + b _080A1224\n\ + .align 2, 0\n\ +_080A11E4: .4byte 0x040000d4\n\ +_080A11E8: .4byte 0x80000800\n\ +_080A11EC: .4byte 0xfffff000\n\ +_080A11F0: .4byte 0x0000026a\n\ +_080A11F4: .4byte 0x0600ecc0\n\ +_080A11F8:\n\ + ldr r2, _080A12B0 @ =0x040000d4\n\ + str r3, [r2]\n\ + str r4, [r2, 0x4]\n\ + ldr r0, _080A12B4 @ =0x80000800\n\ + str r0, [r2, 0x8]\n\ + ldr r0, [r2, 0x8]\n\ + movs r0, 0x80\n\ + lsls r0, 5\n\ + adds r3, r0\n\ + adds r4, r0\n\ + ldr r5, _080A12B8 @ =0xfffff000\n\ + adds r1, r5\n\ + cmp r1, r0\n\ + bhi _080A11F8\n\ + str r3, [r2]\n\ + str r4, [r2, 0x4]\n\ + lsrs r0, r1, 1\n\ + movs r1, 0x80\n\ + lsls r1, 24\n\ + orrs r0, r1\n\ + str r0, [r2, 0x8]\n\ + ldr r0, [r2, 0x8]\n\ +_080A1224:\n\ + ldrb r4, [r6, 0x2]\n\ + ldrh r7, [r6, 0x2]\n\ + ldrh r0, [r6]\n\ + mov r12, r0\n\ + cmp r4, 0x9\n\ + bhi _080A1272\n\ + adds r3, r6, 0x4\n\ + ldr r2, _080A12B0 @ =0x040000d4\n\ + ldr r5, _080A12BC @ =0x80000001\n\ +_080A1236:\n\ + lsls r1, r4, 1\n\ + ldr r6, _080A12C0 @ =0x0600e480\n\ + adds r0, r1, r6\n\ + str r3, [r2]\n\ + str r0, [r2, 0x4]\n\ + str r5, [r2, 0x8]\n\ + ldr r0, [r2, 0x8]\n\ + adds r6, 0x40\n\ + adds r0, r1, r6\n\ + str r3, [r2]\n\ + str r0, [r2, 0x4]\n\ + str r5, [r2, 0x8]\n\ + ldr r0, [r2, 0x8]\n\ + ldr r6, _080A12C4 @ =0x0600ec80\n\ + adds r0, r1, r6\n\ + str r3, [r2]\n\ + str r0, [r2, 0x4]\n\ + str r5, [r2, 0x8]\n\ + ldr r0, [r2, 0x8]\n\ + ldr r0, _080A12C8 @ =0x0600ecc0\n\ + adds r1, r0\n\ + str r3, [r2]\n\ + str r1, [r2, 0x4]\n\ + str r5, [r2, 0x8]\n\ + ldr r0, [r2, 0x8]\n\ + adds r0, r4, 0x1\n\ + lsls r0, 24\n\ + lsrs r4, r0, 24\n\ + cmp r4, 0x9\n\ + bls _080A1236\n\ +_080A1272:\n\ + mov r1, r12\n\ + lsls r0, r1, 16\n\ + cmp r0, 0\n\ + beq _080A1286\n\ + lsls r0, r7, 16\n\ + asrs r0, 16\n\ + cmp r0, 0\n\ + ble _080A1286\n\ + cmp r0, 0x9\n\ + ble _080A12A4\n\ +_080A1286:\n\ + lsls r0, r7, 16\n\ + asrs r0, 16\n\ + cmp r0, 0x9\n\ + ble _080A129A\n\ + ldr r0, _080A12CC @ =gOtherText_Status\n\ + movs r1, 0xD\n\ + movs r2, 0x1\n\ + movs r3, 0x12\n\ + bl sub_80A1FF8\n\ +_080A129A:\n\ + bl sub_80A1D18\n\ + mov r0, r8\n\ + bl DestroyTask\n\ +_080A12A4:\n\ + pop {r3}\n\ + mov r8, r3\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_080A12B0: .4byte 0x040000d4\n\ +_080A12B4: .4byte 0x80000800\n\ +_080A12B8: .4byte 0xfffff000\n\ +_080A12BC: .4byte 0x80000001\n\ +_080A12C0: .4byte 0x0600e480\n\ +_080A12C4: .4byte 0x0600ec80\n\ +_080A12C8: .4byte 0x0600ecc0\n\ +_080A12CC: .4byte gOtherText_Status\n\ + .syntax divided\n"); +} + +void sub_80A12D0(u8 taskId) +{ + u8 newTaskId; + + MenuZeroFillWindowRect(1, 18, 5, 19); + sub_80A18E4(29); + + newTaskId = CreateTask(sub_80A1048, 0); + gTasks[newTaskId].data[0] = (s8)taskId; + + if ((s8)taskId < 0) + { + gTasks[newTaskId].data[1] = 10; + } + else + { + gTasks[newTaskId].data[1] = 0; + } + + gTasks[newTaskId].data[2] = 1; +} + +// void sub_80A1334(u8 taskId) +// { +// u8 i; +// s16 var1; + +// gTasks[taskId].data[1] += gTasks[taskId].data[0]; + +// var1 = 0; +// if (gTasks[taskId].data[1] >= 0) +// { +// var1 = 10; +// if (gTasks[taskId].data[1] < 10) +// { +// var1 = gTasks[taskId].data[1]; +// } +// } + +// if (var1 > 0) +// { +// u8 *vramAddr = (u8 *)(VRAM + 0x5B40); +// for (i = 0; i < 7; i++) +// { +// CpuSet(&gUnknown_08E73E88[(i + 13) * 64], vramAddr, var1 & 0x1FFFFF); +// vramAddr += 64; +// } +// } + +// if (var1 <= 9) +// { +// u8 *vramAddr = (u8 *)(VRAM + 0x5B40); +// for (i = 0; i < 64; i++) +// { +// u16 val = gTasks[taskId].data[2]; +// CpuSet(&val, vramAddr, ((10 - var1) & 0x1FFFFF) | 0x800000); +// } +// } +// else +// { +// MenuZeroFillWindowRect(0, 19, 9, 19); +// } + +// if (gTasks[taskId].data[0] == 0 || gTasks[taskId].data[1] < 0) +// { +// if (ewramSS.unkB == 2) +// { +// MenuZeroFillWindowRect(0, 14, 9, 18); +// sub_80A0958(ewramSS.unk10); + +// if (GetMonStatusAndPokerus(ewramSS.unk10)) +// { +// sub_80A1FF8(gOtherText_Status, 13, 1, 18); +// } + +// DestroyTask(taskId); +// } +// } + +// if (gTasks[taskId].data[1] > 9) +// { +// if (ewramSS.unkB == 2) +// { +// sub_80A00F4(gTasks[taskId].data[3]); +// } + +// sub_80A0428(ewramSS.unk10, &gTasks[taskId].data[3]); +// DestroyTask(taskId); +// } +// } +__attribute__((naked)) +void sub_80A1334(u8 taskId) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, 0x4\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + mov r10, r0\n\ + lsls r0, 2\n\ + add r0, r10\n\ + lsls r0, 3\n\ + ldr r1, _080A13E4 @ =gTasks + 0x8\n\ + adds r7, r0, r1\n\ + ldrh r0, [r7]\n\ + ldrh r1, [r7, 0x2]\n\ + adds r0, r1\n\ + strh r0, [r7, 0x2]\n\ + lsls r0, 16\n\ + asrs r1, r0, 16\n\ + movs r0, 0\n\ + cmp r1, 0\n\ + blt _080A136A\n\ + movs r0, 0xA\n\ + cmp r1, 0xA\n\ + bgt _080A136A\n\ + ldrh r0, [r7, 0x2]\n\ +_080A136A:\n\ + lsls r0, 16\n\ + asrs r2, r0, 16\n\ + mov r9, r0\n\ + cmp r2, 0\n\ + ble _080A13A6\n\ + movs r0, 0xA\n\ + subs r0, r2\n\ + lsls r0, 1\n\ + ldr r1, _080A13E8 @ =0x06005b40\n\ + adds r4, r0, r1\n\ + movs r5, 0\n\ + adds r6, r2, 0\n\ + ldr r0, _080A13EC @ =0x001fffff\n\ + mov r8, r0\n\ +_080A1386:\n\ + adds r0, r5, 0\n\ + adds r0, 0xD\n\ + lsls r0, 6\n\ + ldr r1, _080A13F0 @ =gUnknown_08E73E88\n\ + adds r0, r1\n\ + adds r1, r4, 0\n\ + mov r2, r8\n\ + ands r2, r6\n\ + bl CpuSet\n\ + adds r4, 0x40\n\ + adds r0, r5, 0x1\n\ + lsls r0, 24\n\ + lsrs r5, r0, 24\n\ + cmp r5, 0x6\n\ + bls _080A1386\n\ +_080A13A6:\n\ + mov r1, r9\n\ + asrs r2, r1, 16\n\ + cmp r2, 0x9\n\ + bgt _080A13F4\n\ + ldr r4, _080A13E8 @ =0x06005b40\n\ + movs r5, 0\n\ + mov r8, sp\n\ + movs r0, 0xA\n\ + subs r6, r0, r2\n\ + ldr r0, _080A13EC @ =0x001fffff\n\ + ands r6, r0\n\ + movs r0, 0x80\n\ + lsls r0, 17\n\ + mov r9, r0\n\ +_080A13C2:\n\ + ldrh r0, [r7, 0x4]\n\ + mov r1, r8\n\ + strh r0, [r1]\n\ + mov r0, sp\n\ + adds r1, r4, 0\n\ + mov r2, r9\n\ + orrs r2, r6\n\ + bl CpuSet\n\ + adds r4, 0x40\n\ + adds r0, r5, 0x1\n\ + lsls r0, 24\n\ + lsrs r5, r0, 24\n\ + cmp r5, 0x6\n\ + bls _080A13C2\n\ + b _080A1400\n\ + .align 2, 0\n\ +_080A13E4: .4byte gTasks + 0x8\n\ +_080A13E8: .4byte 0x06005b40\n\ +_080A13EC: .4byte 0x001fffff\n\ +_080A13F0: .4byte gUnknown_08E73E88\n\ +_080A13F4:\n\ + movs r0, 0\n\ + movs r1, 0x13\n\ + movs r2, 0x9\n\ + movs r3, 0x13\n\ + bl MenuZeroFillWindowRect\n\ +_080A1400:\n\ + movs r1, 0\n\ + ldrsh r0, [r7, r1]\n\ + cmp r0, 0\n\ + beq _080A1410\n\ + movs r1, 0x2\n\ + ldrsh r0, [r7, r1]\n\ + cmp r0, 0\n\ + bge _080A144A\n\ +_080A1410:\n\ + ldr r4, _080A1480 @ =gSharedMem + 0x18000\n\ + ldrb r0, [r4, 0xB]\n\ + cmp r0, 0x2\n\ + bne _080A1444\n\ + movs r0, 0\n\ + movs r1, 0xE\n\ + movs r2, 0x9\n\ + movs r3, 0x12\n\ + bl MenuZeroFillWindowRect\n\ + adds r4, 0x10\n\ + adds r0, r4, 0\n\ + bl sub_80A0958\n\ + adds r0, r4, 0\n\ + bl GetMonStatusAndPokerus\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _080A1444\n\ + ldr r0, _080A1484 @ =gOtherText_Status\n\ + movs r1, 0xD\n\ + movs r2, 0x1\n\ + movs r3, 0x12\n\ + bl sub_80A1FF8\n\ +_080A1444:\n\ + mov r0, r10\n\ + bl DestroyTask\n\ +_080A144A:\n\ + movs r1, 0x2\n\ + ldrsh r0, [r7, r1]\n\ + cmp r0, 0x9\n\ + ble _080A1470\n\ + ldr r4, _080A1480 @ =gSharedMem + 0x18000\n\ + ldrb r0, [r4, 0xB]\n\ + cmp r0, 0x2\n\ + bne _080A1460\n\ + ldrb r0, [r7, 0x6]\n\ + bl sub_80A00F4\n\ +_080A1460:\n\ + adds r0, r4, 0\n\ + adds r0, 0x10\n\ + adds r1, r7, 0x6\n\ + bl sub_80A0428\n\ + mov r0, r10\n\ + bl DestroyTask\n\ +_080A1470:\n\ + add sp, 0x4\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_080A1480: .4byte gSharedMem + 0x18000\n\ +_080A1484: .4byte gOtherText_Status\n\ + .syntax divided\n"); +} + +// Related to re-drawing the summary area underneath the pokemon's picture +// in all of the summary screen tabs. +void sub_80A1488(u8 a, u8 b) +{ + u8 taskId; + + if (ewramSS.unkB == 2) + { + MenuZeroFillWindowRect(0, 14, 9, 19); + } + + taskId = FindTaskIdByFunc(sub_80A1334); + if (taskId == 0xFF) + { + taskId = CreateTask(sub_80A1334, 0); + } + + gTasks[taskId].data[0] = (s8)a; + + if ((s8)a < 0) + { + gTasks[taskId].data[1] = 10; + } + else + { + gTasks[taskId].data[1] = 0; + } + + gTasks[taskId].data[2] = 0; + gTasks[taskId].data[3] = b; +} + +__attribute__((naked)) +void sub_80A1500(u8 taskId) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, 0x4\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + mov r10, r0\n\ + lsls r0, 2\n\ + add r0, r10\n\ + lsls r0, 3\n\ + ldr r1, _080A15B0 @ =gTasks + 0x8\n\ + adds r7, r0, r1\n\ + ldrh r0, [r7]\n\ + ldrh r1, [r7, 0x2]\n\ + adds r0, r1\n\ + strh r0, [r7, 0x2]\n\ + lsls r0, 16\n\ + asrs r1, r0, 16\n\ + movs r0, 0\n\ + cmp r1, 0\n\ + blt _080A1536\n\ + movs r0, 0xA\n\ + cmp r1, 0xA\n\ + bgt _080A1536\n\ + ldrh r0, [r7, 0x2]\n\ +_080A1536:\n\ + lsls r0, 16\n\ + asrs r2, r0, 16\n\ + mov r9, r0\n\ + cmp r2, 0\n\ + ble _080A1572\n\ + movs r0, 0xA\n\ + subs r0, r2\n\ + lsls r0, 1\n\ + ldr r1, _080A15B4 @ =0x06006b40\n\ + adds r4, r0, r1\n\ + movs r5, 0\n\ + adds r6, r2, 0\n\ + ldr r0, _080A15B8 @ =0x001fffff\n\ + mov r8, r0\n\ +_080A1552:\n\ + adds r0, r5, 0\n\ + adds r0, 0xD\n\ + lsls r0, 6\n\ + ldr r1, _080A15BC @ =gUnknown_08E74688\n\ + adds r0, r1\n\ + adds r1, r4, 0\n\ + mov r2, r8\n\ + ands r2, r6\n\ + bl CpuSet\n\ + adds r4, 0x40\n\ + adds r0, r5, 0x1\n\ + lsls r0, 24\n\ + lsrs r5, r0, 24\n\ + cmp r5, 0x6\n\ + bls _080A1552\n\ +_080A1572:\n\ + mov r1, r9\n\ + asrs r2, r1, 16\n\ + cmp r2, 0x9\n\ + bgt _080A15C0\n\ + ldr r4, _080A15B4 @ =0x06006b40\n\ + movs r5, 0\n\ + mov r8, sp\n\ + movs r0, 0xA\n\ + subs r6, r0, r2\n\ + ldr r0, _080A15B8 @ =0x001fffff\n\ + ands r6, r0\n\ + movs r0, 0x80\n\ + lsls r0, 17\n\ + mov r9, r0\n\ +_080A158E:\n\ + ldrh r0, [r7, 0x4]\n\ + mov r1, r8\n\ + strh r0, [r1]\n\ + mov r0, sp\n\ + adds r1, r4, 0\n\ + mov r2, r9\n\ + orrs r2, r6\n\ + bl CpuSet\n\ + adds r4, 0x40\n\ + adds r0, r5, 0x1\n\ + lsls r0, 24\n\ + lsrs r5, r0, 24\n\ + cmp r5, 0x6\n\ + bls _080A158E\n\ + b _080A15CC\n\ + .align 2, 0\n\ +_080A15B0: .4byte gTasks + 0x8\n\ +_080A15B4: .4byte 0x06006b40\n\ +_080A15B8: .4byte 0x001fffff\n\ +_080A15BC: .4byte gUnknown_08E74688\n\ +_080A15C0:\n\ + movs r0, 0\n\ + movs r1, 0x13\n\ + movs r2, 0x9\n\ + movs r3, 0x13\n\ + bl MenuZeroFillWindowRect\n\ +_080A15CC:\n\ + movs r1, 0\n\ + ldrsh r0, [r7, r1]\n\ + cmp r0, 0\n\ + beq _080A15DC\n\ + movs r1, 0x2\n\ + ldrsh r0, [r7, r1]\n\ + cmp r0, 0\n\ + bge _080A1616\n\ +_080A15DC:\n\ + ldr r4, _080A164C @ =gSharedMem + 0x18000\n\ + ldrb r0, [r4, 0xB]\n\ + cmp r0, 0x3\n\ + bne _080A1610\n\ + movs r0, 0\n\ + movs r1, 0xE\n\ + movs r2, 0x9\n\ + movs r3, 0x12\n\ + bl MenuZeroFillWindowRect\n\ + adds r4, 0x10\n\ + adds r0, r4, 0\n\ + bl sub_80A0958\n\ + adds r0, r4, 0\n\ + bl GetMonStatusAndPokerus\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _080A1610\n\ + ldr r0, _080A1650 @ =gOtherText_Status\n\ + movs r1, 0xD\n\ + movs r2, 0x1\n\ + movs r3, 0x12\n\ + bl sub_80A1FF8\n\ +_080A1610:\n\ + mov r0, r10\n\ + bl DestroyTask\n\ +_080A1616:\n\ + movs r1, 0x2\n\ + ldrsh r0, [r7, r1]\n\ + cmp r0, 0x9\n\ + ble _080A163C\n\ + ldr r4, _080A164C @ =gSharedMem + 0x18000\n\ + ldrb r0, [r4, 0xB]\n\ + cmp r0, 0x3\n\ + bne _080A162C\n\ + ldrb r0, [r7, 0x6]\n\ + bl sub_80A00F4\n\ +_080A162C:\n\ + adds r0, r4, 0\n\ + adds r0, 0x10\n\ + adds r1, r7, 0x6\n\ + bl sub_80A0428\n\ + mov r0, r10\n\ + bl DestroyTask\n\ +_080A163C:\n\ + add sp, 0x4\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_080A164C: .4byte gSharedMem + 0x18000\n\ +_080A1650: .4byte gOtherText_Status\n\ + .syntax divided\n"); +} + +void sub_80A1654(u8 a, u8 b) +{ + u8 taskId; + + if (ewramSS.unkB == 3) + { + MenuZeroFillWindowRect(0, 14, 9, 19); + } + + taskId = FindTaskIdByFunc(sub_80A1500); + if (taskId == 0xFF) + { + taskId = CreateTask(sub_80A1500, 0); + } + + gTasks[taskId].data[0] = (s8)a; + + if ((s8)a < 0) + { + gTasks[taskId].data[1] = 10; + } + else + { + gTasks[taskId].data[1] = 0; + } + + gTasks[taskId].data[2] = 0; + gTasks[taskId].data[3] = b; +} + +#ifdef NONMATCHING +void sub_80A16CC(u8 a) +{ + u8 i; + u16 *vramAddr = (u16 *)(VRAM + 0x6AD4); + + if (a == 0) + { + for (i = 0; i < 20; i++) + { + vramAddr[i] = gUnknown_08E94510[i] + 0x1000; + vramAddr[i + 0x20] = gUnknown_08E94510[i] + 0x1000; + vramAddr[i + 0x40] = gUnknown_08E94550[i] + 0x1000; + } + } + else + { + i = 0; + for (i = 0; i < 20; i++) + { + vramAddr[i] = gUnknown_08E94550[i] + 0x1000; + vramAddr[i + 0x20] = gUnknown_08E94590[i] + 0x1000; + vramAddr[i + 0x40] = gUnknown_08E94590[i] + 0x1000; + } + } + + vramAddr = (u16 *)(VRAM + 0x5AD4); + + if (a == 0) + { + for (i = 0; i < 20; i++) + { + vramAddr[i] = gUnknown_08E94510[i] + 0x3000; + vramAddr[i + 0x20] = gUnknown_08E94510[i] + 0x3000; + vramAddr[i + 0x40] = gUnknown_08E94550[i] + 0x3000; + } + } + else + { + for (i = 0; i < 20; i++) + { + vramAddr[i] = gUnknown_08E94550[i] + 0x3000; + vramAddr[i + 0x20] = gUnknown_08E94590[i] + 0x3000; + vramAddr[i + 0x40] = gUnknown_08E94590[i] + 0x3000; + } + } +} +#else +__attribute__((naked)) +void sub_80A16CC(u8 a) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r9\n\ + mov r6, r8\n\ + push {r6,r7}\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + mov r9, r0\n\ + ldr r0, _080A1724 @ =0x06006ad4\n\ + mov r12, r0\n\ + mov r1, r9\n\ + cmp r1, 0\n\ + bne _080A172C\n\ + movs r5, 0\n\ + ldr r7, _080A1728 @ =gUnknown_08E94510\n\ + movs r0, 0x80\n\ + lsls r0, 5\n\ + adds r6, r0, 0\n\ + movs r1, 0x40\n\ + adds r1, r7\n\ + mov r8, r1\n\ +_080A16F4:\n\ + lsls r2, r5, 1\n\ + mov r0, r12\n\ + adds r3, r2, r0\n\ + adds r4, r2, r7\n\ + ldrh r1, [r4]\n\ + adds r0, r6, r1\n\ + strh r0, [r3]\n\ + adds r1, r3, 0\n\ + adds r1, 0x40\n\ + ldrh r4, [r4]\n\ + adds r0, r6, r4\n\ + strh r0, [r1]\n\ + adds r3, 0x80\n\ + add r2, r8\n\ + ldrh r2, [r2]\n\ + adds r0, r6, r2\n\ + strh r0, [r3]\n\ + adds r0, r5, 0x1\n\ + lsls r0, 24\n\ + lsrs r5, r0, 24\n\ + cmp r5, 0x13\n\ + bls _080A16F4\n\ + b _080A1768\n\ + .align 2, 0\n\ +_080A1724: .4byte 0x06006ad4\n\ +_080A1728: .4byte gUnknown_08E94510\n\ +_080A172C:\n\ + movs r5, 0\n\ + ldr r6, _080A17B0 @ =gUnknown_08E94550\n\ + movs r7, 0x80\n\ + lsls r7, 5\n\ + adds r4, r7, 0\n\ + movs r0, 0x40\n\ + adds r0, r6\n\ + mov r8, r0\n\ +_080A173C:\n\ + lsls r1, r5, 1\n\ + mov r7, r12\n\ + adds r2, r1, r7\n\ + adds r0, r1, r6\n\ + ldrh r0, [r0]\n\ + adds r0, r4, r0\n\ + strh r0, [r2]\n\ + adds r3, r2, 0\n\ + adds r3, 0x40\n\ + add r1, r8\n\ + ldrh r7, [r1]\n\ + adds r0, r4, r7\n\ + strh r0, [r3]\n\ + adds r2, 0x80\n\ + ldrh r1, [r1]\n\ + adds r0, r4, r1\n\ + strh r0, [r2]\n\ + adds r0, r5, 0x1\n\ + lsls r0, 24\n\ + lsrs r5, r0, 24\n\ + cmp r5, 0x13\n\ + bls _080A173C\n\ +_080A1768:\n\ + ldr r0, _080A17B4 @ =0x06005ad4\n\ + mov r12, r0\n\ + mov r1, r9\n\ + cmp r1, 0\n\ + bne _080A17BC\n\ + movs r5, 0\n\ + ldr r7, _080A17B8 @ =gUnknown_08E94510\n\ + movs r0, 0xC0\n\ + lsls r0, 6\n\ + adds r6, r0, 0\n\ + movs r1, 0x40\n\ + adds r1, r7\n\ + mov r8, r1\n\ +_080A1782:\n\ + lsls r2, r5, 1\n\ + mov r0, r12\n\ + adds r3, r2, r0\n\ + adds r4, r2, r7\n\ + ldrh r1, [r4]\n\ + adds r0, r6, r1\n\ + strh r0, [r3]\n\ + adds r1, r3, 0\n\ + adds r1, 0x40\n\ + ldrh r4, [r4]\n\ + adds r0, r6, r4\n\ + strh r0, [r1]\n\ + adds r3, 0x80\n\ + add r2, r8\n\ + ldrh r2, [r2]\n\ + adds r0, r6, r2\n\ + strh r0, [r3]\n\ + adds r0, r5, 0x1\n\ + lsls r0, 24\n\ + lsrs r5, r0, 24\n\ + cmp r5, 0x13\n\ + bls _080A1782\n\ + b _080A17F8\n\ + .align 2, 0\n\ +_080A17B0: .4byte gUnknown_08E94550\n\ +_080A17B4: .4byte 0x06005ad4\n\ +_080A17B8: .4byte gUnknown_08E94510\n\ +_080A17BC:\n\ + movs r5, 0\n\ + ldr r6, _080A1804 @ =gUnknown_08E94550\n\ + movs r7, 0xC0\n\ + lsls r7, 6\n\ + adds r4, r7, 0\n\ + movs r0, 0x40\n\ + adds r0, r6\n\ + mov r8, r0\n\ +_080A17CC:\n\ + lsls r1, r5, 1\n\ + mov r7, r12\n\ + adds r2, r1, r7\n\ + adds r0, r1, r6\n\ + ldrh r0, [r0]\n\ + adds r0, r4, r0\n\ + strh r0, [r2]\n\ + adds r3, r2, 0\n\ + adds r3, 0x40\n\ + add r1, r8\n\ + ldrh r7, [r1]\n\ + adds r0, r4, r7\n\ + strh r0, [r3]\n\ + adds r2, 0x80\n\ + ldrh r1, [r1]\n\ + adds r0, r4, r1\n\ + strh r0, [r2]\n\ + adds r0, r5, 0x1\n\ + lsls r0, 24\n\ + lsrs r5, r0, 24\n\ + cmp r5, 0x13\n\ + bls _080A17CC\n\ +_080A17F8:\n\ + pop {r3,r4}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_080A1804: .4byte gUnknown_08E94550\n\ + .syntax divided\n"); +} +#endif // NONMATCHING + +u8 sub_80A1808(struct Pokemon *pokemon) +{ + u16 species; + u8 spriteId; + + species = GetMonData(pokemon, MON_DATA_SPECIES2); + spriteId = CreateSprite(&gUnknown_02024E8C, 40, 64, 5); + + FreeSpriteOamMatrix(&gSprites[spriteId]); + + gSprites[spriteId].data0 = species; + gSprites[spriteId].callback = sub_80A1888; + + if (!IsPokeSpriteNotFlipped(species)) + { + gSprites[spriteId].hFlip = 1; + } + else + { + gSprites[spriteId].hFlip = 0; + } + + return spriteId; +} + +void sub_80A1888(struct Sprite *sprite) +{ + if (!gPaletteFade.active) + { + sprite->callback = SpriteCallbackDummy; + + if (!GetMonData(&ewramSS.unk10, MON_DATA_IS_EGG)) + { + PlayCry1(sprite->data0, 0); + } + } +} + +void sub_80A18C4(void) +{ + u8 i; + + for (i = 0; i < 30; i++) + { + ewram1A000[i] = 0xFF; + } +} + +void sub_80A18E4(u8 a) +{ + if (ewram1A000[a] != 0xFF) + { + DestroySprite(&gSprites[ewram1A000[a]]); + ewram1A000[a] = 0xFF; + } +} + +void sub_80A1918(u8 a, u8 invisible) +{ + gSprites[ewram1A000[a]].invisible = invisible; +} + +void sub_80A1950(void) +{ + u8 i; + + for (i = 0; i < 5; i++) + { + if (ewram1A000[i] == 0xFF) + { + ewram1A000[i] = CreateSprite(&gSpriteTemplate_83C11C0, 0, 0, 2); + } + + sub_80A1918(i, 1); + } +} + +void sub_80A198C(u8 animNum, u8 x, u8 y, u8 d) +{ + StartSpriteAnim(&gSprites[ewram1A000[d]], animNum); + + gSprites[ewram1A000[d]].oam.paletteNum = gUnknown_083C11D8[animNum]; + gSprites[ewram1A000[d]].pos1.x = x + 16; + gSprites[ewram1A000[d]].pos1.y = y + 8; + + sub_80A1918(d, 0); +} + +void sub_80A1A30(u8 a) +{ + u8 i; + s16 x; + u8 subPriority = 0; + + if (ewramSS.unkB > 1) + { + if (a == 9) + { + subPriority = 1; + } + + for (i = 0; i < 10; i++) + { + x = (i * 16) + 0x58; + ewram1A000[a + i] = CreateSprite(&gSpriteTemplate_83C1280, x, 40, subPriority); + + if (i == 0) + { + StartSpriteAnim(&gSprites[ewram1A000[a]], 4); + } + else if (i == 9) + { + StartSpriteAnim(&gSprites[ewram1A000[a + i]], 5); + } + else + { + StartSpriteAnim(&gSprites[ewram1A000[a + i]], 6); + } + + gSprites[ewram1A000[a + i]].callback = sub_80A1BC0; + gSprites[ewram1A000[a + i]].data0 = a; + gSprites[ewram1A000[a + i]].data1 = 0; + } + } +} + +void sub_80A1B1C(u8 a) +{ + u8 i; + + for (i = 0; i < 10; i++) + { + sub_80A18E4(a + i); + } +} + +#ifdef NONMATCHING +void sub_80A1B40(u8 a) +{ + u8 i; + u8 var1 = a * 3; + + StartSpriteAnim(&gSprites[ewram1A000[9]], var1 + 4); + + for (i = 0; i < 8; i++) + { + StartSpriteAnim(&gSprites[ewram1A000[10 + i]], var1 + 6); + } + + StartSpriteAnim(&gSprites[ewram1A000[18]], var1 + 5); +} +#else +__attribute__((naked)) +void sub_80A1B40(u8 a) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r8\n\ + push {r7}\n\ + lsls r0, 24\n\ + lsrs r7, r0, 24\n\ + lsls r1, r7, 1\n\ + adds r1, r7\n\ + lsls r1, 24\n\ + ldr r0, _080A1BB4 @ =gSharedMem + 0x1A009\n\ + ldrb r2, [r0]\n\ + lsls r0, r2, 4\n\ + adds r0, r2\n\ + lsls r0, 2\n\ + ldr r2, _080A1BB8 @ =gSprites\n\ + adds r0, r2\n\ + lsrs r7, r1, 24\n\ + movs r2, 0x80\n\ + lsls r2, 19\n\ + adds r1, r2\n\ + lsrs r1, 24\n\ + bl StartSpriteAnim\n\ + movs r4, 0\n\ + adds r0, r7, 0x6\n\ + lsls r0, 24\n\ + mov r8, r0\n\ +_080A1B74:\n\ + ldr r6, _080A1BBC @ =gSharedMem + 0x1A00A\n\ + adds r0, r4, r6\n\ + ldrb r1, [r0]\n\ + lsls r0, r1, 4\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + ldr r5, _080A1BB8 @ =gSprites\n\ + adds r0, r5\n\ + mov r2, r8\n\ + lsrs r1, r2, 24\n\ + bl StartSpriteAnim\n\ + adds r0, r4, 0x1\n\ + lsls r0, 24\n\ + lsrs r4, r0, 24\n\ + cmp r4, 0x7\n\ + bls _080A1B74\n\ + ldrb r1, [r6, 0x8]\n\ + lsls r0, r1, 4\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + adds r0, r5\n\ + adds r1, r7, 0x5\n\ + lsls r1, 24\n\ + lsrs r1, 24\n\ + bl StartSpriteAnim\n\ + pop {r3}\n\ + mov r8, r3\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_080A1BB4: .4byte gSharedMem + 0x1A009\n\ +_080A1BB8: .4byte gSprites\n\ +_080A1BBC: .4byte gSharedMem + 0x1A00A\n\ + .syntax divided\n"); +} +#endif // NONMATCHING + +void sub_80A1BC0(struct Sprite *sprite) +{ + u8 animNum = sprite->animNum - 4; + if (animNum < 3) + { + sprite->data1 = (sprite->data1 + 1) & 0x1F; + + if (sprite->data1 > 24) + { + sprite->invisible = 1; + } + else + { + sprite->invisible = 0; + } + } + else + { + sprite->data1 = 0; + sprite->invisible = 0; + } + + if (sprite->data0 == 9) + { + sprite->pos2.y = ewramSS.unk79 * 16; + } + else + { + sprite->pos2.y = ewramSS.unk7A * 16; + } +} + +__attribute__((naked)) +void sub_80A1C30(u8 a) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + lsls r0, 24\n\ + lsrs r4, r0, 24\n\ + lsls r0, r4, 2\n\ + adds r0, r4\n\ + lsls r0, 25\n\ + lsrs r3, r0, 24\n\ + adds r4, r3, 0\n\ + adds r0, r3, 0\n\ + adds r0, 0xA\n\ + cmp r3, r0\n\ + bge _080A1C82\n\ + ldr r5, _080A1C88 @ =gSprites\n\ + movs r7, 0x5\n\ + negs r7, r7\n\ + ldr r6, _080A1C8C @ =gSharedMem + 0x1A009\n\ +_080A1C50:\n\ + adds r2, r3, r6\n\ + ldrb r1, [r2]\n\ + lsls r0, r1, 4\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + adds r0, r5\n\ + movs r1, 0\n\ + strh r1, [r0, 0x30]\n\ + ldrb r0, [r2]\n\ + lsls r1, r0, 4\n\ + adds r1, r0\n\ + lsls r1, 2\n\ + adds r1, r5\n\ + adds r1, 0x3E\n\ + ldrb r2, [r1]\n\ + adds r0, r7, 0\n\ + ands r0, r2\n\ + strb r0, [r1]\n\ + adds r0, r3, 0x1\n\ + lsls r0, 24\n\ + lsrs r3, r0, 24\n\ + adds r0, r4, 0\n\ + adds r0, 0xA\n\ + cmp r3, r0\n\ + blt _080A1C50\n\ +_080A1C82:\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_080A1C88: .4byte gSprites\n\ +_080A1C8C: .4byte gSharedMem + 0x1A009\n\ + .syntax divided\n"); +} + +u8 pokemon_ailments_get_primary(u32 status) +{ + if (status & 0x88) + return 1; + if (status & 0x40) + return 2; + if (status & 0x7) + return 3; + if (status & 0x20) + return 4; + if (status & 0x10) + return 5; + + return 0; +} + +u8 GetMonStatusAndPokerus(struct Pokemon *mon) +{ + u8 statusAilment; + + if (GetMonData(mon, MON_DATA_HP) == 0) + { + return 7; + } + + statusAilment = pokemon_ailments_get_primary(GetMonData(mon, MON_DATA_STATUS)); + if (statusAilment == 0) + { + if (!CheckPartyPokerus(mon, 0)) + { + return 0; + } + else + { + return 6; + } + } + + return statusAilment; +} + +#ifdef NONMATCHING +void sub_80A1D18(void) +{ + struct Pokemon mon; + u8 statusAndPkrs; + u8 statusAndPkrs2; + + sub_809F678(&mon); + statusAndPkrs = GetMonStatusAndPokerus(&mon); + + if (statusAndPkrs) + { + statusAndPkrs2 = statusAndPkrs - 1; + + if (ewram1A000[29] == 0xFF) + { + ewram1A000[29] = CreateSprite(&gSpriteTemplate_83C1304, 64, 152, 0); + } + } + else + { + sub_80A18E4(29); + return; + } + + StartSpriteAnim(&gSprites[ewram1A000[29]], statusAndPkrs2); +} +#else +__attribute__((naked)) +void sub_80A1D18(void) +{ + asm(".syntax unified\n\ + push {r4,r5,lr}\n\ + sub sp, 0x64\n\ + mov r0, sp\n\ + bl sub_809F678\n\ + mov r0, sp\n\ + bl GetMonStatusAndPokerus\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0\n\ + beq _080A1D58\n\ + subs r0, 0x1\n\ + lsls r0, 24\n\ + lsrs r5, r0, 24\n\ + ldr r4, _080A1D50 @ =gSharedMem + 0x1A01D\n\ + ldrb r0, [r4]\n\ + cmp r0, 0xFF\n\ + bne _080A1D60\n\ + ldr r0, _080A1D54 @ =gSpriteTemplate_83C1304\n\ + movs r1, 0x40\n\ + movs r2, 0x98\n\ + movs r3, 0\n\ + bl CreateSprite\n\ + strb r0, [r4]\n\ + b _080A1D60\n\ + .align 2, 0\n\ +_080A1D50: .4byte gSharedMem + 0x1A01D\n\ +_080A1D54: .4byte gSpriteTemplate_83C1304\n\ +_080A1D58:\n\ + movs r0, 0x1D\n\ + bl sub_80A18E4\n\ + b _080A1D74\n\ +_080A1D60:\n\ + ldr r0, _080A1D7C @ =gSharedMem + 0x1A01D\n\ + ldrb r1, [r0]\n\ + lsls r0, r1, 4\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + ldr r1, _080A1D80 @ =gSprites\n\ + adds r0, r1\n\ + adds r1, r5, 0\n\ + bl StartSpriteAnim\n\ +_080A1D74:\n\ + add sp, 0x64\n\ + pop {r4,r5}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_080A1D7C: .4byte gSharedMem + 0x1A01D\n\ +_080A1D80: .4byte gSprites\n\ + .syntax divided\n"); +} +#endif // NONMATCHING + +void sub_80A1D84(struct Pokemon *mon) +{ + struct Sprite *sprite; + + sprite = sub_80F7920(0x7533, 0x7533, gSummaryScreenMonMarkingsPalette); + gUnknown_020384F4 = sprite; + + if (sprite != NULL) + { + u8 markings = GetMonData(mon, MON_DATA_MARKINGS); + StartSpriteAnim(sprite, markings); + + gUnknown_020384F4->pos1.x = 60; + gUnknown_020384F4->pos1.y = 26; + } +} + +void sub_80A1DCC(struct Pokemon *mon) +{ + DestroySprite(gUnknown_020384F4); + sub_80A1D84(mon); +} + +void sub_80A1DE8(struct Pokemon *mon) +{ + u8 ball = ball_number_to_ball_processing_index(GetMonData(mon, MON_DATA_POKEBALL)); + sub_80478DC(ball); + + ewramSS.unkD = CreateSprite(&gBallSpriteTemplates[ball], 6, 136, 0); + gSprites[ewramSS.unkD].callback = SpriteCallbackDummy; + gSprites[ewramSS.unkD].oam.priority = 3; +} + +u8 *sub_80A1E58(u8 *text, u8 id) +{ + if (id != 0xFF) + { + const u8 *ptr = gUnknown_083C15BC; + while (*ptr != 0xFF && *ptr != id) + { + ptr += 4; + } + + text[0] = EXT_CTRL_CODE_BEGIN; + text[1] = 4; + text[2] = ptr[1]; + text[3] = ptr[2]; + text[4] = ptr[3]; + + text += 5; + } + + return text; +} + +u8 *sub_80A1E9C(u8 *dest, const u8 *src, u8 id) +{ + u8 arr[3]; + + sub_8072CD4(&arr[0], &arr[1], &arr[2]); + + dest = sub_80A1E58(dest, id); + dest = StringCopy(dest, src); + + if (id != 0xFF) + { + dest[0] = EXT_CTRL_CODE_BEGIN; + dest[1] = 4; + dest[2] = arr[0]; + dest[3] = arr[1]; + dest[4] = arr[2]; + dest[5] = 0xFF; + + dest += 5; + } + + return dest; +} + +void sub_80A1EF8(const u8 *text, u8 id, u8 left, u16 top, s32 e) +{ + sub_80A1E9C(gStringVar4, text, id); + MenuPrint_PixelCoords(gStringVar4, left, top, (bool8)e); +} + +void sub_80A1F48(const u8 *text, u8 id, u8 c, u8 d, u16 e) +{ + sub_80A1E9C(gStringVar4, text, id); + sub_8072BD8(gStringVar4, c, d, e); +} + +void sub_80A1F98(s32 value, u8 id, u8 n, u8 mode, u8 left, u16 top, s32 e) +{ + ConvertIntToDecimalStringN(gStringVar1, value, mode, n); + sub_80A1EF8(gStringVar1, id, left, top, e); +} + +void sub_80A1FF8(const u8 *text, u8 id, u8 left, u8 top) +{ + sub_80A1E9C(gStringVar4, text, id); + MenuPrint(gStringVar4, left, top); +} + +u8 *PokemonSummaryScreen_CopyPokemonLevel(u8 *dest, u8 level) +{ + u8 buffer[12]; + + dest[0] = 0x34; + dest++; + + if (level == 0) + { + level = 5; + } + + ConvertIntToDecimalString(buffer, level); + dest = sub_80A1E9C(dest, buffer, 14); + dest = StringCopy(dest, gOtherText_Comma); + + return dest; +} + +void sub_80A2078(u32 taskId) +{ + gUnknown_03005CF0 = gTasks[taskId].func; + gTasks[taskId].func = sub_80A20A8; + gTasks[taskId].func((u8)taskId); +} + +void sub_80A20A8(u8 taskId) +{ + if (sub_8055870() != TRUE) + { + gTasks[taskId].func = gUnknown_03005CF0; + } +} diff --git a/src/strings.c b/src/strings.c index 6c8dce9d6..06bbadb8f 100644 --- a/src/strings.c +++ b/src/strings.c @@ -409,7 +409,7 @@ const u8 OtherText_Switch[] = _("SWITCH"); const u8 OtherText_PokeInfo[] = _("POKéMON INFO"); const u8 OtherText_PokeSkills[] = _("POKéMON SKILLS"); const u8 OtherText_BattleMoves[] = _("BATTLE MOVES"); -const u8 OtherText_ContestMoves[] = _("C0NTEST MOVES"); // why the l33t 0, that's stupid +const u8 OtherText_ContestMoves[] = _("C0NTEST MOVES"); // The "O" in "CONTEST" is actually a 0. const u8 OtherText_Info[] = _("INFO"); const u8 gOtherText_EggLongTime[] = _("It looks like this EGG will\ntake a long time to hatch."); -- cgit v1.2.3 From 5a8cd94046983f15eaf6d414d5f431cb296abdc3 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Thu, 23 Nov 2017 13:47:44 -0800 Subject: Lots more pokemon_summary_screen decompilation --- src/pokemon/learn_move.c | 20 +- src/pokemon/pokemon_summary_screen.c | 1144 +++++++++++++++++++++++++++++++++- 2 files changed, 1141 insertions(+), 23 deletions(-) (limited to 'src') diff --git a/src/pokemon/learn_move.c b/src/pokemon/learn_move.c index 55aac840f..2ba708a97 100644 --- a/src/pokemon/learn_move.c +++ b/src/pokemon/learn_move.c @@ -4,6 +4,7 @@ #include "main.h" #include "menu.h" #include "menu_cursor.h" +#include "learn_move.h" #include "palette.h" #include "pokemon.h" #include "overworld.h" @@ -22,26 +23,11 @@ extern u16 gSpecialVar_0x8004; extern u16 gSpecialVar_0x8005; extern u8 gTileBuffer[]; -struct ContestMove -{ - u8 effect; - u8 contestCategory:3; - u8 comboStarterId; - u8 comboMoves[4]; -}; - -struct ContestEffect -{ - u8 effectType; - u8 appeal; - u8 jam; -}; - extern const struct ContestMove gContestMoves[]; extern const struct ContestEffect gContestEffects[]; extern const struct WindowConfig gWindowConfig_81E6CE4; extern const struct WindowConfig gWindowConfig_81E7240; -extern const u8 *const gUnknown_083CADD4[]; +extern const u8 *const gContestEffectStrings[]; extern const u8 *const gMoveDescriptions[]; extern const u8 gTypeNames[][7]; extern const u8 *const gUnknown_083CAF70[]; @@ -1039,7 +1025,7 @@ void sub_8133AEC(bool8 contestInfo, int unused) gSprites[sLearnMoveStruct->spriteIDs[i + 4]].invisible = FALSE; for (i = 0; i < 3; i++) PrintMoveInfo(moveId, gUnknown_08402E24[gUnknown_08402E3D[i]]); - sub_8072AB0(gUnknown_083CADD4[gContestMoves[moveId].effect], 0x58, 0x48, 0x90, 32, 1); + sub_8072AB0(gContestEffectStrings[gContestMoves[moveId].effect], 0x58, 0x48, 0x90, 32, 1); } else { diff --git a/src/pokemon/pokemon_summary_screen.c b/src/pokemon/pokemon_summary_screen.c index 8402bcf16..edbd2998b 100644 --- a/src/pokemon/pokemon_summary_screen.c +++ b/src/pokemon/pokemon_summary_screen.c @@ -1,10 +1,14 @@ #include "global.h" +#include "battle.h" #include "pokemon_summary_screen.h" #include "data2.h" +#include "decompress.h" #include "ewram.h" #include "item.h" #include "items.h" +#include "learn_move.h" #include "link.h" +#include "main.h" #include "menu.h" #include "menu_helpers.h" #include "overworld.h" @@ -24,7 +28,8 @@ struct SummaryScreenStruct { - /*0x00*/ u8 filler0[9]; + /*0x00*/ u8 filler0[8]; + /*0x08*/ u8 unk8; /*0x09*/ u8 unk9; /*0x0A*/ u8 fillerA; /*0x0B*/ u8 unkB; @@ -38,26 +43,66 @@ struct SummaryScreenStruct /*0x77*/ u8 filler77[0x2]; /*0x79*/ u8 unk79; /*0x7A*/ u8 unk7A; - /*0x7B*/ u8 filler7B[0x3]; + /*0x7B*/ u8 filler7B; + /*0x7C*/ u16 unk7C; /*0x7E*/ u8 unk7E; /*0x7F*/ u8 unk7F; }; #define ewramSS (*(struct SummaryScreenStruct *)(gSharedMem + 0x18000)) +extern u8 sub_80A1808(struct Pokemon *); +extern void sub_80A1F98(s32, u8, u8, u8, u8, u16, s32); +static void sub_80A0958(struct Pokemon *); +static void PokemonSummaryScreen_PrintTrainerMemo(struct Pokemon *, u8, u8); +static void PokemonSummaryScreen_PrintEggTrainerMemo(struct Pokemon *, u8, u8); +static void sub_80A1EF8(const u8 *, u8, u8, u16, s32); +static void sub_80A1F48(const u8 *, u8, u8, u8, u16); +static void PrintHeldItemName(u16, u8, u8); +static void PrintNumRibbons(struct Pokemon *); +static void DrawExperienceProgressBar(struct Pokemon *, u8, u8); + +extern void SummaryScreenHandleLeftRightInput(u8, s8); +extern void sub_809E8F0(u8, s8); +extern void sub_809E260(u8); +extern void sub_809F814(u8); +extern void sub_80A1654(s8, u8); +extern void sub_80A1488(s8, u8); +extern void GetStringCenterAlignXOffsetWithLetterSpacing(u8, u8, u8, u8); +extern bool8 sub_809FA94(struct Pokemon *); +extern void sub_809FC34(struct Pokemon *); +extern void sub_809FC0C(void); +extern void sub_809FF64(struct Pokemon *); +extern void sub_809FEB8(void); +extern void sub_80A1918(u8, u8); +extern void sub_80A198C(u8, u8, u8, u8); +extern u16 GetMonMove(struct Pokemon *, u8); +extern void sub_80A04CC(u16); +extern void sub_80A057C(u16); +extern void sub_80A0498(u16); +extern void sub_80A046C(u16); +extern void sub_80A03F0(struct Pokemon *, u8 *); +extern u16 sub_80A03BC(struct Pokemon *, u8); extern void sub_80A20A8(u8); extern u8 ball_number_to_ball_processing_index(u16); extern void sub_809F678(struct Pokemon *); extern void sub_80A1BC0(struct Sprite *sprite); extern void sub_80A1888(struct Sprite *); -extern void sub_80A00F4(s16); -extern void sub_80A0428(struct Pokemon *, s16*); +extern void sub_80A0428(struct Pokemon *, u8 *); extern void sub_80A18E4(u8); extern void GetStringCenterAlignXOffset(u8, u8, u8); extern u8 *sub_80A1E58(u8 *, u8); static void sub_80A0A2C(struct Pokemon *, u8, u8); extern void sub_80A1FF8(const u8 *, u8, u8, u8); +extern const u16 gUnknown_083C157E[]; +extern const u16 gUnknown_083C157C[]; +extern const u8 gAbilityNames[][13]; +extern const u8 * const gAbilityDescriptions[]; +extern const u8 * const gMoveDescriptions[]; +extern const u8 * const gContestEffectStrings[]; +extern const struct ContestMove gContestMoves[]; +extern const struct ContestEffect gContestEffects[]; extern TaskFunc gUnknown_03005CF0; extern const u8 gUnknown_083C15BC[]; extern struct Sprite *gUnknown_020384F4; @@ -75,6 +120,1093 @@ extern const u8 gUnknown_083C15AE[]; extern const u8 gUnknown_083C15B4[]; extern const u8 *const gUnknown_083C1068[]; + +u8 sub_809F6B4(struct Pokemon *mon, u8 *b) +{ + u16 species; + u32 personality; + u32 otId; + const struct CompressedSpritePalette *palette; + + switch (*b) + { + default: + return sub_80A1808(mon); + case 0: + species = GetMonData(mon, MON_DATA_SPECIES2); + personality = GetMonData(mon, MON_DATA_PERSONALITY); + + HandleLoadSpecialPokePic( + &gMonFrontPicTable[species], + gMonFrontPicCoords[species].coords, + gMonFrontPicCoords[species].y_offset, + ewram_addr, + gUnknown_081FAF4C[1], + species, + personality); + *b += 1; + return 0xFF; + case 1: + species = GetMonData(mon, MON_DATA_SPECIES2); + personality = GetMonData(mon, MON_DATA_PERSONALITY); + otId = GetMonData(mon, MON_DATA_OT_ID); + + palette = GetMonSpritePalStructFromOtIdPersonality(species, otId, personality); + LoadCompressedObjectPalette(palette); + GetMonSpriteTemplate_803C56C(palette->tag, 1); + *b += 1; + return 0xFF; + } +} + +u16 GetMonMove(struct Pokemon *mon, u8 moveId) +{ + switch (moveId) + { + case 0: + return GetMonData(mon, MON_DATA_MOVE1); + case 1: + return GetMonData(mon, MON_DATA_MOVE2); + case 2: + return GetMonData(mon, MON_DATA_MOVE3); + default: + return GetMonData(mon, MON_DATA_MOVE4); + } +} + +static u16 GetMonMovePP(struct Pokemon *mon, u8 moveId) +{ + switch (moveId) + { + case 0: + return GetMonData(mon, MON_DATA_PP1); + case 1: + return GetMonData(mon, MON_DATA_PP2); + case 2: + return GetMonData(mon, MON_DATA_PP3); + default: + return GetMonData(mon, MON_DATA_PP4); + } +} + +bool8 sub_809F7D0() +{ + struct Pokemon mon; + u16 move; + + sub_809F678(&mon); + move = GetMonMove(&mon, ewramSS.unk79); + if (IsHMMove(move) == TRUE && ewramSS.unk8 != 3) + { + return FALSE; + } + + return TRUE; +} + +#ifdef NONMATCHING // The two "ewramSS.unk79 = taskData[15];" lines have small register differences. +void sub_809F814(u8 taskId) +{ + u16 var1; + + s16 *taskData = gTasks[taskId].data; + + var1 = taskData[14]; + if (taskData[14] < 4) + { + taskData[14] = var1 + 1; + } + else if (gMain.newKeys & DPAD_UP) + { + gTasks[taskId].func = sub_809E260; + taskData[0] = 4; + taskData[13] = 1; + ewramSS.unk79 = taskData[15]; + sub_809E8F0(taskId, -1); + } + else if (gMain.newKeys & DPAD_DOWN) + { + gTasks[taskId].func = sub_809E260; + taskData[0] = 4; + taskData[13] = 1; + ewramSS.unk79 = taskData[15]; + sub_809E8F0(taskId, 1); + } + else if ((gMain.newKeys & DPAD_LEFT) || sub_80F9284() == 1) + { + if (ewramSS.unkB != 2) + { + if (ewramSS.unkB == 3 && (ewramSS.unk79 != 4 || ewramSS.unk7C != 0)) + { + MenuZeroFillWindowRect(0, 14, 9, 18); + } + + gTasks[taskId].func = sub_809E260; + + SummaryScreenHandleLeftRightInput(taskId, -1); + sub_80A1488(1, taskData[15]); + sub_80A1654(1, taskData[15]); + } + } + else if ((gMain.newKeys & DPAD_RIGHT) || sub_80F9284() == 2) + { + if (ewramSS.unkB != ewramSS.unk76) + { + if (ewramSS.unkB == 2 && (ewramSS.unk79 != 4 || ewramSS.unk7C != 0)) + { + MenuZeroFillWindowRect(0, 14, 9, 18); + } + + gTasks[taskId].func = sub_809E260; + + SummaryScreenHandleLeftRightInput(taskId, 1); + sub_80A1488(1, taskData[15]); + sub_80A1654(1, taskData[15]); + } + } + else if ((gMain.newKeys & A_BUTTON) || (gMain.newKeys & B_BUTTON)) + { + sub_80A1488(2, taskData[15]); + sub_80A1654(2, taskData[15]); + + gTasks[taskId].func = sub_809E260; + } +} +#else +__attribute__((naked)) +void sub_809F814(u8 taskId) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r8\n\ + push {r7}\n\ + lsls r0, 24\n\ + lsrs r5, r0, 24\n\ + lsls r0, r5, 2\n\ + adds r0, r5\n\ + lsls r6, r0, 3\n\ + ldr r0, _0809F83C @ =gTasks + 0x8\n\ + mov r8, r0\n\ + adds r4, r6, r0\n\ + ldrh r1, [r4, 0x1C]\n\ + movs r2, 0x1C\n\ + ldrsh r0, [r4, r2]\n\ + cmp r0, 0x3\n\ + bgt _0809F840\n\ + adds r0, r1, 0x1\n\ + strh r0, [r4, 0x1C]\n\ + b _0809F9C0\n\ + .align 2, 0\n\ +_0809F83C: .4byte gTasks + 0x8\n\ +_0809F840:\n\ + ldr r7, _0809F874 @ =gMain\n\ + ldrh r1, [r7, 0x2E]\n\ + movs r0, 0x40\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _0809F880\n\ + mov r0, r8\n\ + subs r0, 0x8\n\ + adds r0, r6, r0\n\ + ldr r1, _0809F878 @ =sub_809E260\n\ + str r1, [r0]\n\ + movs r0, 0x4\n\ + strh r0, [r4]\n\ + movs r0, 0x1\n\ + strh r0, [r4, 0x1A]\n\ + ldr r2, _0809F87C @ =gSharedMem + 0x18000\n\ + ldrh r0, [r4, 0x1E]\n\ + adds r2, 0x79\n\ + strb r0, [r2]\n\ + movs r1, 0x1\n\ + negs r1, r1\n\ + adds r0, r5, 0\n\ + bl sub_809E8F0\n\ + b _0809F9C0\n\ + .align 2, 0\n\ +_0809F874: .4byte gMain\n\ +_0809F878: .4byte sub_809E260\n\ +_0809F87C: .4byte gSharedMem + 0x18000\n\ +_0809F880:\n\ + movs r0, 0x80\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _0809F8B4\n\ + mov r0, r8\n\ + subs r0, 0x8\n\ + adds r0, r6, r0\n\ + ldr r1, _0809F8AC @ =sub_809E260\n\ + str r1, [r0]\n\ + movs r0, 0x4\n\ + strh r0, [r4]\n\ + movs r0, 0x1\n\ + strh r0, [r4, 0x1A]\n\ + ldr r2, _0809F8B0 @ =gSharedMem + 0x18000\n\ + ldrh r0, [r4, 0x1E]\n\ + adds r2, 0x79\n\ + strb r0, [r2]\n\ + adds r0, r5, 0\n\ + movs r1, 0x1\n\ + bl sub_809E8F0\n\ + b _0809F9C0\n\ + .align 2, 0\n\ +_0809F8AC: .4byte sub_809E260\n\ +_0809F8B0: .4byte gSharedMem + 0x18000\n\ +_0809F8B4:\n\ + movs r0, 0x20\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _0809F8C8\n\ + bl sub_80F9284\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0x1\n\ + bne _0809F918\n\ +_0809F8C8:\n\ + ldr r1, _0809F90C @ =gSharedMem + 0x18000\n\ + ldrb r0, [r1, 0xB]\n\ + cmp r0, 0x2\n\ + beq _0809F9C0\n\ + cmp r0, 0x3\n\ + bne _0809F8F4\n\ + adds r0, r1, 0\n\ + adds r0, 0x79\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x4\n\ + bne _0809F8E8\n\ + adds r0, r1, 0\n\ + adds r0, 0x7C\n\ + ldrh r0, [r0]\n\ + cmp r0, 0\n\ + beq _0809F8F4\n\ +_0809F8E8:\n\ + movs r0, 0\n\ + movs r1, 0xE\n\ + movs r2, 0x9\n\ + movs r3, 0x12\n\ + bl MenuZeroFillWindowRect\n\ +_0809F8F4:\n\ + ldr r1, _0809F910 @ =gTasks\n\ + lsls r0, r5, 2\n\ + adds r0, r5\n\ + lsls r0, 3\n\ + adds r0, r1\n\ + ldr r1, _0809F914 @ =sub_809E260\n\ + str r1, [r0]\n\ + movs r1, 0x1\n\ + negs r1, r1\n\ + adds r0, r5, 0\n\ + b _0809F972\n\ + .align 2, 0\n\ +_0809F90C: .4byte gSharedMem + 0x18000\n\ +_0809F910: .4byte gTasks\n\ +_0809F914: .4byte sub_809E260\n\ +_0809F918:\n\ + ldrh r1, [r7, 0x2E]\n\ + movs r0, 0x10\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _0809F92E\n\ + bl sub_80F9284\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0x2\n\ + bne _0809F994\n\ +_0809F92E:\n\ + ldr r1, _0809F988 @ =gSharedMem + 0x18000\n\ + adds r2, r1, 0\n\ + adds r2, 0x76\n\ + ldrb r0, [r1, 0xB]\n\ + ldrb r2, [r2]\n\ + cmp r0, r2\n\ + beq _0809F9C0\n\ + cmp r0, 0x2\n\ + bne _0809F960\n\ + adds r0, r1, 0\n\ + adds r0, 0x79\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x4\n\ + bne _0809F954\n\ + adds r0, r1, 0\n\ + adds r0, 0x7C\n\ + ldrh r0, [r0]\n\ + cmp r0, 0\n\ + beq _0809F960\n\ +_0809F954:\n\ + movs r0, 0\n\ + movs r1, 0xE\n\ + movs r2, 0x9\n\ + movs r3, 0x12\n\ + bl MenuZeroFillWindowRect\n\ +_0809F960:\n\ + ldr r1, _0809F98C @ =gTasks\n\ + lsls r0, r5, 2\n\ + adds r0, r5\n\ + lsls r0, 3\n\ + adds r0, r1\n\ + ldr r1, _0809F990 @ =sub_809E260\n\ + str r1, [r0]\n\ + adds r0, r5, 0\n\ + movs r1, 0x1\n\ +_0809F972:\n\ + bl SummaryScreenHandleLeftRightInput\n\ + ldrb r1, [r4, 0x1E]\n\ + movs r0, 0x1\n\ + bl sub_80A1488\n\ + ldrb r1, [r4, 0x1E]\n\ + movs r0, 0x1\n\ + bl sub_80A1654\n\ + b _0809F9C0\n\ + .align 2, 0\n\ +_0809F988: .4byte gSharedMem + 0x18000\n\ +_0809F98C: .4byte gTasks\n\ +_0809F990: .4byte sub_809E260\n\ +_0809F994:\n\ + ldrh r1, [r7, 0x2E]\n\ + movs r0, 0x1\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _0809F9A6\n\ + movs r0, 0x2\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _0809F9C0\n\ +_0809F9A6:\n\ + ldrb r1, [r4, 0x1E]\n\ + movs r0, 0x2\n\ + bl sub_80A1488\n\ + ldrb r1, [r4, 0x1E]\n\ + movs r0, 0x2\n\ + bl sub_80A1654\n\ + mov r0, r8\n\ + subs r0, 0x8\n\ + adds r0, r6, r0\n\ + ldr r1, _0809F9CC @ =sub_809E260\n\ + str r1, [r0]\n\ +_0809F9C0:\n\ + pop {r3}\n\ + mov r8, r3\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_0809F9CC: .4byte sub_809E260\n\ + .syntax divided\n"); +} +#endif // NONMATCHING + +void sub_809F9D0(u8 taskId, u8 b) +{ + s16 *taskData = gTasks[taskId].data; + taskData[14] = 0; + taskData[15] = b; + + sub_80A1488(-2, 4); + sub_80A1654(-2, 4); + MenuZeroFillWindowRect(11, 15, 28, 18); + MenuPrint(gOtherText_CantForgetHMs, 11, 15); + + gTasks[taskId].func = sub_809F814; +} + +u8 sub_809FA30(void) +{ + return ewramSS.unk7A; +} + +// void GetStringCenterAlignXOffsetWithLetterSpacing(u8 a, u8 b, u8 c, u8 d) +// { +// u16 *vramAddr = (u16 *)(VRAM + 0xF000); + +// vramAddr[(d * 32) + c] = (b * 0x1000) + (a * 2) + 0x200 + 0x80; +// vramAddr[(d * 32) + c + 32] = (b * 0x1000) + (a * 2) + 0x200 + 0x81; +// } +__attribute__((naked)) +void GetStringCenterAlignXOffsetWithLetterSpacing(u8 a, u8 b, u8 c, u8 d) +{ + asm(".syntax unified\n\ + push {r4,lr}\n\ + lsls r0, 24\n\ + lsls r1, 24\n\ + lsls r2, 24\n\ + lsls r3, 24\n\ + lsrs r2, 23\n\ + lsrs r3, 18\n\ + ldr r4, _0809FA70 @ =0x0600f000\n\ + adds r3, r4\n\ + adds r2, r3\n\ + lsrs r1, 12\n\ + lsrs r0, 23\n\ + movs r4, 0x80\n\ + lsls r4, 2\n\ + adds r3, r4, 0\n\ + adds r0, r3\n\ + adds r1, r0\n\ + adds r0, r1, 0\n\ + adds r0, 0x80\n\ + strh r0, [r2]\n\ + adds r2, 0x40\n\ + adds r1, 0x81\n\ + strh r1, [r2]\n\ + pop {r4}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_0809FA70: .4byte 0x0600f000\n\ + .syntax divided\n"); +} + +void GetStringCenterAlignXOffset(u8 a, u8 b, u8 c) +{ + GetStringCenterAlignXOffsetWithLetterSpacing(a, 15, b, c); +} + +bool8 sub_809FA94(struct Pokemon *mon) +{ + if (!IsShiny(mon)) + { + LoadPalette(gUnknown_083C157C, 4, 2); + return FALSE; + } + else + { + LoadPalette(gUnknown_083C157E, 4, 2); + return TRUE; + } +} + +void sub_809FAC8(struct Pokemon *mon) +{ + bool8 shinyDexNum; + u16 dexNum; + u8 *buffer; + + if (GetMonData(mon, MON_DATA_IS_EGG)) + { + MenuZeroFillWindowRect(1, 2, 4, 3); + MenuZeroFillWindowRect(3, 16, 9, 17); + MenuZeroFillWindowRect(0, 12, 11, 15); + GetMonNickname(mon, gStringVar1); + sub_80A1FF8(gStringVar1, 13, 3, 16); + LoadPalette(gUnknown_083C157C, 4, 2); + } + else + { + shinyDexNum = sub_809FA94(mon); + dexNum = SpeciesToPokedexNum(GetMonData(mon, MON_DATA_SPECIES)); + if (dexNum != 0xFFFF) + { + if (!shinyDexNum) + { + GetStringCenterAlignXOffset(2, 1, 2); + sub_80A1F98(dexNum, 13, 3, 2, 17, 16, 1); + } + else + { + GetStringCenterAlignXOffsetWithLetterSpacing(2, 8, 1, 2); + sub_80A1F98(dexNum, 8, 3, 2, 17, 16, 1); + } + } + else + { + MenuZeroFillWindowRect(1, 2, 4, 3); + } + + buffer = gStringVar1; + buffer = sub_80A1E58(buffer, 13); + buffer = GetMonNickname(mon, buffer); + buffer[0] = EXT_CTRL_CODE_BEGIN; + buffer[1] = 0x13; + buffer[2] = 0x3C; + buffer[3] = EOS; + MenuPrint(gStringVar1, 1, 12); + + sub_80A0958(mon); + } +} + +void sub_809FBE4() +{ + u8 i; + + for (i = 0; i < 28; i++) + { + sub_80A1918(i, 1); + } + + MenuZeroFillWindowRect(11, 4, 29, 18); +} + +void sub_809FC0C(void) +{ + MenuPrint(gOtherText_Type2, 11, 6); + GetStringCenterAlignXOffset(0, 22, 4); + GetStringCenterAlignXOffset(2, 23, 4); +} + +void sub_809FC34(struct Pokemon *mon) +{ + u8 i; + u8 *buffer; + u16 friendship; + u8 language; + u16 species; + u8 ability; + + for (i = 0; i < 5; i++) + { + sub_80A1918(i, 1); + } + + MenuZeroFillWindowRect(11, 9, 28, 12); + if (GetMonData(mon, MON_DATA_IS_EGG)) + { + buffer = gStringVar1; + buffer = sub_80A1E58(buffer, 13); + buffer = StringCopy(buffer, gOtherText_OriginalTrainer); + buffer = StringCopy(buffer, gOtherText_FiveQuestionsAndSlash); + buffer[0] = EXT_CTRL_CODE_BEGIN; + buffer[1] = 0x13; + buffer[2] = 0x4E; + buffer[3] = EOS; + MenuPrint(gStringVar1, 11, 4); + + sub_80A1EF8(gOtherText_FiveQuestionsAndSlash, 13, 193, 32, 1); + sub_80A198C(9, 120, 48, 0); + + friendship = GetMonData(mon, MON_DATA_FRIENDSHIP); + if (friendship < 6) + { + MenuPrint(gOtherText_EggAbout, 11, 9); + } + else if (friendship < 11) + { + MenuPrint(gOtherText_EggSoon, 11, 9); + } + else if (friendship < 41) + { + MenuPrint(gOtherText_EggSomeTime, 11, 9); + } + else + { + MenuPrint(gOtherText_EggLongTime, 11, 9); + } + + PokemonSummaryScreen_PrintEggTrainerMemo(mon, 11, 14); + } + else + { + GetMonData(mon, MON_DATA_OT_NAME, gStringVar2); + language = GetMonData(mon, MON_DATA_LANGUAGE); + ConvertInternationalString(gStringVar2, language); + + buffer = gStringVar1; + buffer = sub_80A1E58(buffer, 13); + buffer = StringCopy(buffer, gOtherText_OriginalTrainer); + + if (GetMonData(mon, MON_DATA_OT_GENDER) == MALE) + { + buffer = sub_80A1E58(buffer, 9); + } + else + { + buffer = sub_80A1E58(buffer, 10); + } + + buffer = StringCopy(buffer, gStringVar2); + buffer[0] = EXT_CTRL_CODE_BEGIN; + buffer[1] = 0x13; + buffer[2] = 0x4E; + buffer[3] = EOS; + MenuPrint(gStringVar1, 11, 4); + + sub_80A1F98(GetMonData(mon, MON_DATA_OT_ID) & 0xFFFF, 13, 5, 2, 193, 32, 1); + + species = GetMonData(mon, MON_DATA_SPECIES); + sub_80A198C(gBaseStats[species].type1, 120, 48, 0); + if (gBaseStats[species].type1 != gBaseStats[species].type2) + { + sub_80A198C(gBaseStats[species].type2, 160, 48, 1); + } + + ability = GetAbilityBySpecies(GetMonData(mon, MON_DATA_SPECIES), GetMonData(mon, MON_DATA_ALT_ABILITY)); + sub_80A1FF8(gAbilityNames[ability], 13, 11, 9); + MenuPrint(gAbilityDescriptions[ability], 11, 11); + + PokemonSummaryScreen_PrintTrainerMemo(mon, 11, 14); + } +} + +void sub_809FE6C(struct Pokemon *mon) +{ + sub_809FC0C(); + sub_809FC34(mon); +} + +void sub_809FE80(void) +{ + MenuZeroFillWindowRect(14, 4, 18, 5); + MenuZeroFillWindowRect(25, 4, 30, 5); + MenuZeroFillWindowRect(11, 9, 28, 12); + MenuZeroFillWindowRect(11, 14, 28, 17); +} + +void sub_809FEB8(void) +{ + sub_80A1FF8(gOtherText_ExpPoints, 13, 11, 14); + sub_80A1FF8(gOtherText_NextLv, 13, 11, 16); + MenuPrint(gOtherText_Terminator18, 21, 16); + + sub_80A1F48(gOtherText_HP, 13, 11, 7, 42); + sub_80A1F48(gOtherText_Attack, 13, 11, 9, 42); + sub_80A1F48(gOtherText_Defense, 13, 11, 11, 42); + sub_80A1F48(gOtherText_SpAtk, 13, 22, 7, 36); + sub_80A1F48(gOtherText_SpDef, 13, 22, 9, 36); + sub_80A1F48(gOtherText_Speed, 13, 22, 11, 36); +} + +void sub_809FF64(struct Pokemon *mon) +{ + u8 i; + u16 heldItem; + u8 *buffer; + + for (i = 0; i < 5; i++) + { + sub_80A1918(i, 1); + } + + heldItem = GetMonData(mon, MON_DATA_HELD_ITEM); + PrintHeldItemName(heldItem, 11, 4); + PrintNumRibbons(mon); + + buffer = gStringVar1; + + ConvertIntToDecimalString(buffer, GetMonData(mon, MON_DATA_EXP)); + MenuPrint_RightAligned(buffer, 29, 14); + DrawExperienceProgressBar(mon, 23, 16); + + ConvertIntToDecimalString(buffer, GetMonData(mon, MON_DATA_ATK)); + sub_8072BD8(buffer, 16, 9, 50); + + ConvertIntToDecimalString(buffer, GetMonData(mon, MON_DATA_DEF)); + sub_8072BD8(buffer, 16, 11, 50); + + ConvertIntToDecimalString(buffer, GetMonData(mon, MON_DATA_SPATK)); + sub_8072BD8(buffer, 27, 7, 18); + + ConvertIntToDecimalString(buffer, GetMonData(mon, MON_DATA_SPDEF)); + sub_8072BD8(buffer, 27, 9, 18); + + ConvertIntToDecimalString(buffer, GetMonData(mon, MON_DATA_SPEED)); + sub_8072BD8(buffer, 27, 11, 18); + + buffer = sub_8072C14(buffer, GetMonData(mon, MON_DATA_HP), 24, 1); + *buffer++ = CHAR_SLASH; + buffer = sub_8072C14(buffer, GetMonData(mon, MON_DATA_MAX_HP), 48, 1); + + MenuPrint_PixelCoords(gStringVar1, 126, 56, 1); +} + +void sub_80A0090(struct Pokemon *mon) +{ + sub_809FEB8(); + sub_809FF64(mon); +} + +void sub_80A00A4(void) +{ + MenuZeroFillWindowRect(11, 4, 19, 5); + MenuZeroFillWindowRect(16, 7, 21, 8); + MenuZeroFillWindowRect(17, 9, 21, 12); + MenuZeroFillWindowRect(27, 7, 29, 12); + MenuZeroFillWindowRect(22, 14, 28, 15); + MenuZeroFillWindowRect(23, 16, 28, 17); +} + +void sub_80A00F4(u8 a) +{ + if (ewramSS.unk7C != 0 || a != 4) + { + if (ewramSS.unkB == 2) + { + sub_80A1FF8(gOtherText_Power2, 13, 1, 15); + sub_80A1FF8(gOtherText_Accuracy2, 13, 1, 17); + } + else + { + sub_80A1FF8(gOtherText_Appeal2, 13, 1, 15); + sub_80A1FF8(gOtherText_Jam2, 13, 1, 17); + } + } +} + +void sub_80A015C(struct Pokemon *mon) +{ + u8 i; + u16 move; + u16 curPP; + u8 ppBonuses; + u8 maxPP; + u8 *buffer; + + for (i = 0; i < 4; i++) + { + move = GetMonMove(mon, i); + curPP = GetMonMovePP(mon, i); + + if (move == 0) + { + sub_80A1918(i, 1); + sub_80A1FF8(gOtherText_OneDash, 13, 15, (2 * i) + 4); + MenuPrint(gOtherText_TwoDashes, 26, (2 * i) + 4); + } + else + { + if (ewramSS.unkB == 2) + { + sub_80A198C(gBattleMoves[move].type, 87, ((2 * i) + 4) * 8, i); + } + else + { + sub_80A198C(gContestMoves[move].contestCategory + 18, 87, ((2 * i) + 4) * 8, i); + } + + sub_80A1FF8(gMoveNames[move], 13, 15, (2 * i) + 4); + GetStringCenterAlignXOffset(1, 24, (2 * i) + 4); + + ppBonuses = GetMonData(mon, MON_DATA_PP_BONUSES); + maxPP = CalculatePPWithBonus(move, ppBonuses, i); + + buffer = gStringVar1; + buffer = sub_8072C14(buffer, curPP, 14, 1); + *buffer++ = CHAR_SLASH; + sub_8072C14(buffer, maxPP, 32, 1); + MenuPrint(gStringVar1, 25, (2 * i) + 4); + } + } +} + +void sub_80A029C(void) +{ + u8 *buffer; + u16 move; + u8 pp; + + if (ewramSS.unk7C == 0) + { + sub_80A1FF8(gOtherText_CancelNoTerminator, 13, 15, 12); + return; + } + + move = ewramSS.unk7C; + + if (ewramSS.unkB == 2) + sub_80A198C(gBattleMoves[move].type, 87, 96, 4); + else + sub_80A198C(gContestMoves[move].contestCategory + 18, 87, 96, 4); + + if (ewramSS.unkB == 2) + sub_80A1FF8(gMoveNames[move], 10, 15, 12); + else + sub_80A1FF8(gMoveNames[move], 9, 15, 12); + + GetStringCenterAlignXOffset(1, 24, 12); + + buffer = gStringVar1; + pp = gBattleMoves[move].pp; + buffer = sub_8072C14(buffer, pp, 14, 1); + *buffer++ = CHAR_SLASH; + buffer = sub_8072C14(buffer, pp, 32, 1); + MenuPrint(gStringVar1, 25, 12); +} + +void sub_80A0390(void) +{ + u8 i; + + for (i = 0; i < MAX_MON_MOVES; i++) + { + MenuZeroFillWindowRect(15, (i * 2) + 4, 28, (i * 2) + 5); + } +} + +u16 sub_80A03BC(struct Pokemon *mon, u8 selectedMoveIndex) +{ + u16 move; + + if (selectedMoveIndex != MAX_MON_MOVES) + { + move = GetMonMove(mon, selectedMoveIndex); + } + else + { + if (ewramSS.unk7C != 0) + { + move = ewramSS.unk7C; + } + else + { + move = 0xFFFF; + } + } + + return move; +} + +void sub_80A03F0(struct Pokemon *mon, u8 *selectedMoveIndex) +{ + u16 move = sub_80A03BC(mon, *selectedMoveIndex); + + if (ewramSS.unkB == 2) + { + sub_80A04CC(move); + sub_80A057C(0xFFFF); + } + else + { + sub_80A057C(move); + } +} + +void sub_80A0428(struct Pokemon *mon, u8 *selectedMoveIndex) +{ + u16 move = sub_80A03BC(mon, *selectedMoveIndex); + MenuZeroFillWindowRect(11, 15, 28, 18); + + if (ewramSS.unkB == 2) + { + sub_80A046C(move); + } + else + { + sub_80A0498(move); + } + + sub_80A03F0(mon, selectedMoveIndex); +} + +void sub_80A046C(u16 move) +{ + if (move == 0xFFFF) return; + + MenuPrint(gMoveDescriptions[move - 1], 11, 15); +} + +void sub_80A0498(u16 move) +{ + if (move == 0xFFFF) return; + + MenuPrint(gContestEffectStrings[gContestMoves[move].effect], 11, 15); +} + +void sub_80A04CC(u16 move) +{ + u8 *buffer; + + if (move == 0xFFFF) return; + + if (gBattleMoves[move].power <= 1) + { + buffer = gStringVar1; + buffer = sub_8072C74(buffer, gOtherText_ThreeDashes2, 21, 1); + MenuPrint(gStringVar1, 7, 15); + } + else + { + buffer = gStringVar1; + buffer = sub_8072C14(buffer, gBattleMoves[move].power, 21, 1); + MenuPrint(gStringVar1, 7, 15); + } + + if (gBattleMoves[move].accuracy == 0) + { + buffer = gStringVar1; + buffer = sub_8072C74(buffer, gOtherText_ThreeDashes2, 21, 1); + MenuPrint(gStringVar1, 7, 17); + } + else + { + buffer = gStringVar1; + buffer = sub_8072C14(buffer, gBattleMoves[move].accuracy, 21, 1); + MenuPrint(gStringVar1, 7, 17); + } +} + +#ifdef NONMATCHING // The two vramAddr lines are non-matching. +void sub_80A057C(u16 move) +{ + u8 appeal; + u8 jam; + u8 i; + u16 *vramAddr = (u16 *)(VRAM + 0x6800); + + if (move == 0xFFFF) return; + + appeal = gContestEffects[gContestMoves[move].effect].appeal; + if (appeal != 0xFF) + { + appeal = appeal / 10; + } + + for (i = 0; i < 8; i++) + { + u16 tile = 0x1039; + int and = 3; + int offset = 0x3CC / 2; + if (appeal != 0xFF && i < appeal) + { + tile = 0x103A; + } + + *(&vramAddr[(i >> 2 << 5) + (i & and)] + offset) = tile; + } + + if (move == 0xFFFF) return; + + jam = gContestEffects[gContestMoves[move].effect].jam; + if (jam != 0xFF) + { + jam = jam / 10; + } + + for (i = 0; i < 8; i++) + { + u16 tile = 0x103D; + int and = 3; + int offset = 0x226; + if (jam != 0xFF && i < jam) + { + tile = 0x103C; + } + + *(&vramAddr[(i >> 2 << 5) + (i & and)] + offset) = tile; + } +} +#else +__attribute__((naked)) +void sub_80A057C(u16 move) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + lsls r0, 16\n\ + lsrs r5, r0, 16\n\ + ldr r0, _080A0648 @ =0x06006800\n\ + mov r8, r0\n\ + ldr r0, _080A064C @ =0x0000ffff\n\ + cmp r5, r0\n\ + beq _080A063A\n\ + ldr r1, _080A0650 @ =gContestEffects\n\ + ldr r2, _080A0654 @ =gContestMoves\n\ + lsls r3, r5, 3\n\ + adds r0, r3, r2\n\ + ldrb r0, [r0]\n\ + lsls r0, 2\n\ + adds r0, r1\n\ + ldrb r4, [r0, 0x1]\n\ + mov r10, r2\n\ + mov r9, r3\n\ + cmp r4, 0xFF\n\ + beq _080A05B8\n\ + adds r0, r4, 0\n\ + movs r1, 0xA\n\ + bl __udivsi3\n\ + lsls r0, 24\n\ + lsrs r4, r0, 24\n\ +_080A05B8:\n\ + movs r2, 0\n\ + movs r7, 0x3\n\ + movs r6, 0xF3\n\ + lsls r6, 2\n\ +_080A05C0:\n\ + ldr r3, _080A0658 @ =0x00001039\n\ + cmp r4, 0xFF\n\ + beq _080A05CC\n\ + cmp r2, r4\n\ + bcs _080A05CC\n\ + adds r3, 0x1\n\ +_080A05CC:\n\ + lsrs r0, r2, 2\n\ + lsls r0, 5\n\ + adds r1, r2, 0\n\ + ands r1, r7\n\ + adds r1, r0\n\ + lsls r1, 1\n\ + add r1, r8\n\ + adds r1, r6\n\ + strh r3, [r1]\n\ + adds r0, r2, 0x1\n\ + lsls r0, 24\n\ + lsrs r2, r0, 24\n\ + cmp r2, 0x7\n\ + bls _080A05C0\n\ + ldr r0, _080A064C @ =0x0000ffff\n\ + cmp r5, r0\n\ + beq _080A063A\n\ + mov r0, r9\n\ + add r0, r10\n\ + ldrb r0, [r0]\n\ + lsls r0, 2\n\ + ldr r1, _080A0650 @ =gContestEffects\n\ + adds r0, r1\n\ + ldrb r4, [r0, 0x2]\n\ + cmp r4, 0xFF\n\ + beq _080A060C\n\ + adds r0, r4, 0\n\ + movs r1, 0xA\n\ + bl __udivsi3\n\ + lsls r0, 24\n\ + lsrs r4, r0, 24\n\ +_080A060C:\n\ + movs r2, 0\n\ + movs r6, 0x3\n\ + ldr r5, _080A065C @ =0x0000044c\n\ +_080A0612:\n\ + ldr r3, _080A0660 @ =0x0000103d\n\ + cmp r4, 0xFF\n\ + beq _080A061E\n\ + cmp r2, r4\n\ + bcs _080A061E\n\ + subs r3, 0x1\n\ +_080A061E:\n\ + lsrs r0, r2, 2\n\ + lsls r0, 5\n\ + adds r1, r2, 0\n\ + ands r1, r6\n\ + adds r1, r0\n\ + lsls r1, 1\n\ + add r1, r8\n\ + adds r1, r5\n\ + strh r3, [r1]\n\ + adds r0, r2, 0x1\n\ + lsls r0, 24\n\ + lsrs r2, r0, 24\n\ + cmp r2, 0x7\n\ + bls _080A0612\n\ +_080A063A:\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_080A0648: .4byte 0x06006800\n\ +_080A064C: .4byte 0x0000ffff\n\ +_080A0650: .4byte gContestEffects\n\ +_080A0654: .4byte gContestMoves\n\ +_080A0658: .4byte 0x00001039\n\ +_080A065C: .4byte 0x0000044c\n\ +_080A0660: .4byte 0x0000103d\n\ + .syntax divided\n"); +} +#endif // NONMATCHING + bool8 PokemonSummaryScreen_CheckOT(struct Pokemon *mon) { u32 trainerId; @@ -1355,7 +2487,7 @@ _080A1484: .4byte gOtherText_Status\n\ // Related to re-drawing the summary area underneath the pokemon's picture // in all of the summary screen tabs. -void sub_80A1488(u8 a, u8 b) +void sub_80A1488(s8 a, u8 b) { u8 taskId; @@ -1557,7 +2689,7 @@ _080A1650: .4byte gOtherText_Status\n\ .syntax divided\n"); } -void sub_80A1654(u8 a, u8 b) +void sub_80A1654(s8 a, u8 b) { u8 taskId; -- cgit v1.2.3 From 00f85341a6d769cc23c4dfbf5fca8ad02835956c Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Sat, 25 Nov 2017 14:40:48 -0800 Subject: Mostly done decompiling pokemon_summary_screen --- src/field/choose_party.c | 1 - src/pokemon/pokemon_summary_screen.c | 2117 +++++++++++++++++++++++++++++++++- 2 files changed, 2080 insertions(+), 38 deletions(-) (limited to 'src') diff --git a/src/field/choose_party.c b/src/field/choose_party.c index c3845e48b..bf4d74c96 100644 --- a/src/field/choose_party.c +++ b/src/field/choose_party.c @@ -32,7 +32,6 @@ EWRAM_DATA u8 gSelectedOrderFromParty[3] = {0}; extern u8 sub_806BD58(u8, u8); extern void PartyMenuPrintMonsLevelOrStatus(void); extern void sub_806BC3C(u8, u8); -extern void ShowPokemonSummaryScreen(struct Pokemon *, u8, u8, void (*)(void), int); extern u8 GetMonStatusAndPokerus(); extern void PartyMenuPrintHP(); extern bool8 sub_80F9344(void); diff --git a/src/pokemon/pokemon_summary_screen.c b/src/pokemon/pokemon_summary_screen.c index edbd2998b..7241b24f0 100644 --- a/src/pokemon/pokemon_summary_screen.c +++ b/src/pokemon/pokemon_summary_screen.c @@ -1,13 +1,14 @@ #include "global.h" #include "battle.h" -#include "pokemon_summary_screen.h" #include "data2.h" #include "decompress.h" +#include "event_data.h" #include "ewram.h" #include "item.h" #include "items.h" #include "learn_move.h" #include "link.h" +#include "m4a.h" #include "main.h" #include "menu.h" #include "menu_helpers.h" @@ -16,6 +17,7 @@ #include "party_menu.h" #include "pokeball.h" #include "pokemon.h" +#include "pokemon_summary_screen.h" #include "region_map.h" #include "sound.h" #include "species.h" @@ -25,32 +27,24 @@ #include "strings2.h" #include "task.h" #include "tv.h" - -struct SummaryScreenStruct -{ - /*0x00*/ u8 filler0[8]; - /*0x08*/ u8 unk8; - /*0x09*/ u8 unk9; - /*0x0A*/ u8 fillerA; - /*0x0B*/ u8 unkB; - /*0x0C*/ u8 fillerC; - /*0x0D*/ u8 unkD; - /*0x0E*/ u8 fillerE[0x2]; - /*0x10*/ struct Pokemon unk10; - /*0x74*/ u8 filler74; - /*0x75*/ u8 unk75; - /*0x76*/ u8 unk76; - /*0x77*/ u8 filler77[0x2]; - /*0x79*/ u8 unk79; - /*0x7A*/ u8 unk7A; - /*0x7B*/ u8 filler7B; - /*0x7C*/ u16 unk7C; - /*0x7E*/ u8 unk7E; - /*0x7F*/ u8 unk7F; -}; +#include "unknown_task.h" #define ewramSS (*(struct SummaryScreenStruct *)(gSharedMem + 0x18000)) +static void sub_809DE44(void); +static void sub_809EB40(u8); +static void sub_809EBC4(void); +static void sub_809E044(void); +static void sub_80A1D84(struct Pokemon *); +static void sub_80A18C4(void); +static bool8 LoadPokemonSummaryScreenGraphics(void); +static bool8 MonKnowsMultipleMoves(struct Pokemon *); +extern void PrintSummaryWindowHeaderText(void); +static void sub_80A1DCC(struct Pokemon *); +static void sub_809FE80(void); +static void sub_80A00A4(void); +static void sub_80A0390(void); +extern void sub_80A015C(struct Pokemon *); extern u8 sub_80A1808(struct Pokemon *); extern void sub_80A1F98(s32, u8, u8, u8, u8, u16, s32); static void sub_80A0958(struct Pokemon *); @@ -61,18 +55,64 @@ static void sub_80A1F48(const u8 *, u8, u8, u8, u16); static void PrintHeldItemName(u16, u8, u8); static void PrintNumRibbons(struct Pokemon *); static void DrawExperienceProgressBar(struct Pokemon *, u8, u8); - +static void sub_809E13C(u8 taskId); +static void sub_80A1950(void); +static void sub_809DA1C(void); +static void sub_809D844(void); + +extern void sub_809D85C(void); +extern void sub_809DE64(void); +extern bool8 sub_809DA84(void); +extern void SummaryScreenHandleAButton(u8); +extern void SummaryScreenHandleUpDownInput(u8, s8); +extern bool8 sub_809F7D0(u8); +extern void sub_809F9D0(u8, u8); +extern void sub_809EAC8(u8); +extern void sub_809E534(u8); +extern void sub_809E83C(u8, s8); +extern void sub_809E7F0(u8); +extern void sub_809E6D8(void); +extern void sub_809E5C4(void); +extern void sub_80A1B40(u8); +extern void sub_80A2078(int); +extern void sub_809E3FC(u8); +extern void SummaryScreenHandleKeyInput(u8); +extern void sub_80A1B1C(u8); +extern void sub_80A16CC(u8); +extern void sub_80A1A30(u8); +extern void DrawSummaryScreenNavigationDots(void); +extern void sub_80A00F4(u8); +extern void sub_80A029C(struct Pokemon *); +extern void sub_809EE74(u8); +extern void sub_809EC38(u8); +extern void sub_809FBE4(void); +extern void sub_809F0D0(u8, s8); +extern void sub_80A1500(u8); +extern void sub_80A1334(u8); +extern u8 StorageSystemGetNextMonIndex(struct BoxPokemon *, u8, u8, u8); +extern void sub_809F43C(u8); +extern s8 sub_809F284(s8); +extern s8 sub_809F3CC(s8); +extern bool8 sub_809F310(struct Pokemon *); +extern s8 sub_809F344(u8); +extern s8 sub_809F388(u8); +extern bool8 sub_809F5F8(void); +extern void sub_80A1DE8(struct Pokemon *); +extern u8 sub_809F6B4(struct Pokemon *, u8 *); +extern void DrawPokerusSurvivorDot(struct Pokemon *); +extern void sub_80A12D0(s8); +extern void sub_809FAC8(struct Pokemon *); extern void SummaryScreenHandleLeftRightInput(u8, s8); -extern void sub_809E8F0(u8, s8); +extern void sub_809E8F0(u8, s8, u8*); extern void sub_809E260(u8); extern void sub_809F814(u8); extern void sub_80A1654(s8, u8); extern void sub_80A1488(s8, u8); extern void GetStringCenterAlignXOffsetWithLetterSpacing(u8, u8, u8, u8); extern bool8 sub_809FA94(struct Pokemon *); -extern void sub_809FC34(struct Pokemon *); +static void sub_809FC34(struct Pokemon *); extern void sub_809FC0C(void); -extern void sub_809FF64(struct Pokemon *); +static void sub_809FF64(struct Pokemon *); extern void sub_809FEB8(void); extern void sub_80A1918(u8, u8); extern void sub_80A198C(u8, u8, u8, u8); @@ -95,6 +135,36 @@ extern u8 *sub_80A1E58(u8 *, u8); static void sub_80A0A2C(struct Pokemon *, u8, u8); extern void sub_80A1FF8(const u8 *, u8, u8, u8); +extern struct MusicPlayerInfo gMPlay_BGM; +extern u8 gUnknown_020384F0; +extern u8 gUnknown_08208238[]; +extern u16 gUnknown_030041B8; +extern u16 gUnknown_03004280; +extern u16 gUnknown_030041B4; +extern u16 gUnknown_030042C0; +extern u16 gUnknown_03004288; +extern u16 gUnknown_030041B0; +extern const u16 gSummaryScreenTextTiles[]; +extern const u16 gSummaryScreenButtonTiles[]; +extern const u8 gMoveTypes_Pal[]; +extern const u8 gStatusScreen_Pal[]; +extern const u8 gStatusScreen_Tilemap[]; +extern const struct CompressedSpritePalette gUnknown_083C1278; +extern const struct CompressedSpritePalette gUnknown_083C12FC; +extern const struct CompressedSpriteSheet gUnknown_083C12F4; +extern const struct CompressedSpriteSheet gUnknown_083C1270; +extern const struct CompressedSpriteSheet gUnknown_083C11B8; +extern const u8 gUnknown_08E74688[]; +extern const u8 gUnknown_08E73E88[]; +extern const u8 gUnknown_08E74E88[]; +extern const u8 gUnknown_08E73508[]; +extern const u8 gStatusScreen_Gfx[]; +extern const u8 gFontDefaultPalette[]; +extern const u8 gUnknownPalette_81E6692[]; +extern const u8 gUnknown_083C15A8[]; +extern const void (*gUnknown_083C1580[])(void); +extern const void (*gUnknown_083C1598[])(struct Pokemon *); +extern const void (*gUnknown_083C1588[])(struct Pokemon *); extern const u16 gUnknown_083C157E[]; extern const u16 gUnknown_083C157C[]; extern const u8 gAbilityNames[][13]; @@ -121,6 +191,1979 @@ extern const u8 gUnknown_083C15B4[]; extern const u8 *const gUnknown_083C1068[]; +void sub_809D844(void) +{ + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +void sub_809D85C(void) +{ + REG_BG1HOFS = gUnknown_030042C0; + REG_BG1VOFS = gUnknown_030041B4; + REG_BG2HOFS = gUnknown_03004288; + REG_BG2VOFS = gUnknown_03004280; + REG_BG3HOFS = gUnknown_030041B0; + REG_BG3VOFS = gUnknown_030041B8; + + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +void ShowPokemonSummaryScreen(struct Pokemon *party, u8 partyIndex, u8 partyCount, MainCallback func, u8 e) +{ + gPaletteFade.bufferTransferDisabled = 1; + + ewramSS.unk0.partyMons = party; + ewramSS.unk8 = e; + ewramSS.unk9 = partyIndex; + ewramSS.unkA = partyCount; + ewramSS.unk4 = func; + ewramSS.unk74 = 0; + ewramSS.unk79 = 4; + ewramSS.unk7C = 0; + ewramSS.unk80 = 0; + ewramSS.unk7B = 0; + + if (e > 4) + { + ewramSS.unkE = 1; + } + else + { + ewramSS.unkE = 0; + } + + switch (e) + { + case 0: + case 5: + ewramSS.unk75 = 0; + ewramSS.unk76 = 3; + ewramSS.unk77 = 0; + ewramSS.unk78 = 0; + ewramSS.unk7E = 1; + ewramSS.unk7F = 7; + break; + case 4: + ewramSS.unk75 = 0; + ewramSS.unk76 = 3; + ewramSS.unk77 = 0; + ewramSS.unk78 = 0; + ewramSS.unk7E = 1; + ewramSS.unk7F = 7; + ewramSS.unk7B = 1; + break; + case 2: + ewramSS.unk75 = 2; + ewramSS.unk76 = 3; + ewramSS.unk77 = 1; + ewramSS.unk78 = 1; + ewramSS.unk7E = 3; + ewramSS.unk7F = 0; + ewramSS.unk79 = 0; + break; + case 1: + case 6: + ewramSS.unk75 = 2; + ewramSS.unk76 = 3; + ewramSS.unk77 = 1; + ewramSS.unk78 = 1; + break; + } + + ewramSS.unkB = ewramSS.unk75; + SetMainCallback2(sub_809DE44); +} + +void sub_809D9F0(struct Pokemon *party, u8 partyIndex, u8 partyCount, MainCallback func, u16 e) +{ + ShowPokemonSummaryScreen(party, partyIndex, partyCount, func, 2); + ewramSS.unk7C = e; +} + +void sub_809DA1C(void) +{ + switch (ewramSS.unk8) + { + case 0: + case 5: + ewramSS.unkF = CreateTask(SummaryScreenHandleKeyInput, 0); + break; + case 4: + ewramSS.unkF = CreateTask(SummaryScreenHandleKeyInput, 0); + break; + case 2: + case 3: + ewramSS.unkF = CreateTask(sub_809EB40, 0); + break; + case 1: + case 6: + ewramSS.unkF = CreateTask(sub_809E3FC, 0); + break; + } +} + +bool8 sub_809DA84(void) +{ + const u16 *src; + void *dest; + + switch (gMain.state) + { + case 0: + SetVBlankCallback(NULL); + ResetSpriteData(); + gMain.state++; + break; + case 1: + remove_some_task(); + gMain.state++; + break; + case 2: + FreeAllSpritePalettes(); + gMain.state++; + break; + case 3: + dest = (void *)VRAM; + DmaClearLarge(3, dest, 0x10000, 0x1000, 32); + gMain.state++; + break; + case 4: + sub_809DE64(); + gMain.state++; + break; + case 5: + SetUpWindowConfig(&gWindowConfig_81E6E6C); + gMain.state++; + break; + case 6: + MultistepInitMenuWindowBegin(&gWindowConfig_81E6E6C); + gMain.state++; + break; + case 7: + if (MultistepInitMenuWindowContinue()) + { + gMain.state++; + } + break; + case 8: + sub_809DA1C(); + gMain.state++; + break; + case 9: + src = gSummaryScreenTextTiles; + dest = (void *)VRAM + 0xD000; + DmaCopy16(3, src, dest, 320); + + src = gSummaryScreenButtonTiles; + dest = (void *)VRAM + 0xD140; + DmaCopy16(3, src, dest, 256); + + ewramSS.unk74 = 0; + gMain.state++; + break; + case 10: + if (LoadPokemonSummaryScreenGraphics()) + { + ewramSS.unk74 = 0; + gMain.state++; + } + break; + case 11: + sub_80A18C4(); + gMain.state++; + break; + case 12: + sub_809F678(&ewramSS.unk10); + if (!GetMonStatusAndPokerus(&ewramSS.unk10)) + { + sub_80A12D0(0); + } + else + { + sub_80A12D0(10); + } + + DrawPokerusSurvivorDot(&ewramSS.unk10); + gMain.state++; + break; + case 13: + sub_80A1950(); + sub_80A1D84(&ewramSS.unk10); + gMain.state++; + break; + case 14: + sub_80A1DE8(&ewramSS.unk10); + ewramSS.unk74 = 0; + gMain.state++; + break; + case 15: + if ((ewramSS.unkC = sub_809F6B4(&ewramSS.unk10, &ewramSS.unk74)) != 0xFF) + { + ewramSS.unk74 = 0; + gMain.state++; + } + break; + case 16: + sub_809E044(); + DrawSummaryScreenNavigationDots(); + gMain.state++; + break; + case 17: + if (ewramSS.unkB < 2) + { + gUnknown_083C1580[ewramSS.unkB](); + } + + gMain.state++; + break; + case 18: + sub_809FAC8(&ewramSS.unk10); + gMain.state++; + break; + case 19: + gUnknown_083C1598[ewramSS.unkB](&ewramSS.unk10); + gMain.state++; + break; + case 20: + if (GetMonData(&ewramSS.unk10, MON_DATA_IS_EGG)) + { + gUnknown_030041B0 = 256; + } + else + { + gUnknown_030041B0 = 0; + } + + gMain.state++; + break; + case 21: + sub_809EBC4(); + if (ewramSS.unk79 != 0) + { + sub_80A1488(0, 0); + sub_80A1654(0, 0); + } + else + { + sub_80A1488(10, 0); + sub_80A1654(10, 0); + } + + PrintSummaryWindowHeaderText(); + gMain.state++; + break; + case 22: + if (sub_8055870() != TRUE) + { + gMain.state++; + } + break; + default: + SetVBlankCallback(sub_809D85C); + BeginHardwarePaletteFade(0xFF, 0, 16, 0, 1); + SetMainCallback2(sub_809D844); + gPaletteFade.bufferTransferDisabled = 0; + return TRUE; + break; + } + + return FALSE; +} + +void sub_809DE44(void) +{ + while (sub_809DA84() != TRUE && sub_80F9344() != TRUE); +} + +void sub_809DE64(void) +{ + REG_BG0CNT = 0x1E08; + REG_BG1CNT = 0x4801; + REG_BG2CNT = 0x4A02; + REG_BG3CNT = 0x5C03; + + gUnknown_030042C0 = 0; + gUnknown_030041B4 = 0; + gUnknown_03004288 = 0; + gUnknown_03004280 = 0; + gUnknown_030041B0 = 0; + gUnknown_030041B8 = 0; + + REG_BG0HOFS = 0; + REG_BG0VOFS = 0; + REG_BG1HOFS = 0; + REG_BG1VOFS = 0; + REG_BG2HOFS = 0; + REG_BG2VOFS = 0; + REG_BG3HOFS = 0; + REG_BG3VOFS = 0; + + REG_BLDCNT = 0; + REG_DISPCNT = 0x1F40; +} + +bool8 LoadPokemonSummaryScreenGraphics(void) +{ + switch (ewramSS.unk74) + { + case 0: + LZDecompressVram(gStatusScreen_Gfx, (void *)VRAM + 0); + break; + case 1: + CpuSet(gUnknown_08E73508, (void *)VRAM + 0xE000, 0x400); + break; + case 2: + LZDecompressVram(gUnknown_08E74E88, (void *)VRAM + 0xE800); + break; + case 3: + LZDecompressVram(gStatusScreen_Tilemap, (void *)VRAM + 0x4800); + break; + case 4: + CpuSet(gUnknown_08E73E88, (void *)VRAM + 0x5800, 0x400); + break; + case 5: + CpuSet(gUnknown_08E74688, (void *)VRAM + 0x6800, 0x400); + break; + case 6: + LoadCompressedPalette(gStatusScreen_Pal, 0, 160); + break; + case 7: + LoadCompressedObjectPic(&gUnknown_083C11B8); + break; + case 8: + LoadCompressedObjectPic(&gUnknown_083C1270); + break; + case 9: + LoadCompressedObjectPic(&gUnknown_083C12F4); + break; + case 10: + LoadCompressedObjectPalette(&gUnknown_083C12FC); + break; + case 11: + LoadCompressedObjectPalette(&gUnknown_083C1278); + break; + case 12: + LoadCompressedPalette(gMoveTypes_Pal, 464, 96); + ewramSS.unk74 = 0; + return TRUE; + } + + ewramSS.unk74++; + return FALSE; +} + +void sub_809E044(void) +{ + LoadPalette(&gUnknownPalette_81E6692[28], 129, 2); + LoadPalette(&gUnknownPalette_81E6692[30], 136, 2); + LoadPalette(&gUnknownPalette_81E6692[28], 143, 2); + LoadPalette(&gUnknownPalette_81E6692[30], 137, 2); + LoadPalette(&gUnknownPalette_81E6692[12], 209, 4); + LoadPalette(&gUnknownPalette_81E6692[20], 211, 4); + LoadPalette(&gUnknownPalette_81E6692[28], 213, 4); + LoadPalette(&gUnknownPalette_81E6692[12], 215, 4); + LoadPalette(&gUnknownPalette_81E6692[8], 217, 4); + LoadPalette(&gUnknownPalette_81E6692[16], 219, 4); + LoadPalette(&gUnknownPalette_81E6692[4], 221, 2); + LoadPalette(&gUnknownPalette_81E6692[6], 222, 2); + LoadPalette(&gUnknownPalette_81E6692[2], 223, 2); + LoadPalette(gFontDefaultPalette, 240, 32); + LoadPalette(&gUnknownPalette_81E6692[6], 249, 2); +} + +void SummaryScreenExit(u8 taskId) +{ + PlaySE(5); + BeginNormalPaletteFade(-1, 0, 0, 16, 0); + gTasks[taskId].func = sub_809E13C; +} + +void sub_809E13C(u8 taskId) +{ + if (sub_8055870() != TRUE && !gPaletteFade.active) + { + gUnknown_020384F0 = ewramSS.unk9; + + ResetSpriteData(); + FreeAllSpritePalettes(); + StopCryAndClearCrySongs(); + m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 0x100); + SetMainCallback2(ewramSS.unk4); + DestroyTask(taskId); + } +} + +void SummaryScreenHandleKeyInput(u8 taskId) +{ + if (gPaletteFade.active) + return; + + if (gMain.newKeys & DPAD_UP) + { + SummaryScreenHandleUpDownInput(taskId, -1); + } + else if (gMain.newKeys & DPAD_DOWN) + { + SummaryScreenHandleUpDownInput(taskId, 1); + } + else if ((gMain.newKeys & DPAD_LEFT) || sub_80F9284() == 1) + { + SummaryScreenHandleLeftRightInput(taskId, -1); + } + else if ((gMain.newKeys & DPAD_RIGHT) || sub_80F9284() == 2) + { + SummaryScreenHandleLeftRightInput(taskId, 1); + } + else if (gMain.newKeys & A_BUTTON) + { + if (ewramSS.unkB > 1) + { + SummaryScreenHandleAButton(taskId); + } + + if (ewramSS.unkB == 0) + { + SummaryScreenExit(taskId); + } + } + else if (gMain.newKeys & B_BUTTON) + { + SummaryScreenExit(taskId); + } +} + +void sub_809E260(u8 taskId) +{ + if (gPaletteFade.active) + return; + + if (gMain.newKeys & DPAD_UP) + { + gTasks[taskId].data[0] = 4; + sub_809E8F0(taskId, -1, &ewramSS.unk79); + } + else if (gMain.newKeys & DPAD_DOWN) + { + gTasks[taskId].data[0] = 4; + sub_809E8F0(taskId, 1, &ewramSS.unk79); + } + else if ((gMain.newKeys & DPAD_LEFT) || sub_80F9284() == 1) + { + if (ewramSS.unkB == 3 && (ewramSS.unk79 != 4 || ewramSS.unk7C != 0)) + { + MenuZeroFillWindowRect(0, 14, 9, 18); + } + + SummaryScreenHandleLeftRightInput(taskId, -1); + } + else if ((gMain.newKeys & DPAD_RIGHT) || sub_80F9284() == 2) + { + if (ewramSS.unkB != ewramSS.unk76) + { + if (ewramSS.unkB == 2 && (ewramSS.unk79 != 4 || ewramSS.unk7C != 0)) + { + MenuZeroFillWindowRect(0, 14, 9, 18); + } + + SummaryScreenHandleLeftRightInput(taskId, 1); + } + } + else if (gMain.newKeys & A_BUTTON) + { + if (sub_809F7D0(taskId) == 1 || ewramSS.unk79 == 4) + { + ewramSS.unk7A = ewramSS.unk79; + gSpecialVar_0x8005 = ewramSS.unk7A; + SummaryScreenExit(taskId); + } + else + { + PlaySE(32); + sub_809F9D0(taskId, ewramSS.unk79); + } + } + else if (gMain.newKeys & B_BUTTON) + { + ewramSS.unk7A = 4; + gSpecialVar_0x8005 = 4; + SummaryScreenExit(taskId); + } +} + +void sub_809E3FC(u8 taskId) +{ + if (gPaletteFade.active) + return; + + if (gMain.newKeys & DPAD_UP) + { + gTasks[taskId].data[0] = 4; + sub_809E8F0(taskId, -1, &ewramSS.unk79); + } + else if (gMain.newKeys & DPAD_DOWN) + { + gTasks[taskId].data[0] = 4; + sub_809E8F0(taskId, 1, &ewramSS.unk79); + } + else if (gMain.newKeys & A_BUTTON) + { + if (ewramSS.unk79 != 4 && ewramSS.unk7B == 0) + { + if (!MonKnowsMultipleMoves(&ewramSS.unk10)) + { + PlaySE(32); + } + else + { + PlaySE(5); + + ewramSS.unk7A = ewramSS.unk79; + sub_80A1B40(1); + sub_80A1A30(19); + + gTasks[taskId].func = sub_809E534; + } + } + else + { + PlaySE(5); + sub_809EAC8(taskId); + } + } + else if (gMain.newKeys & B_BUTTON) + { + PlaySE(5); + sub_809EAC8(taskId); + } + +} + +bool8 MonKnowsMultipleMoves(struct Pokemon *mon) +{ + u8 i; + + for (i = 1; i < 4; i++) + { + if (GetMonMove(mon, i)) + { + return TRUE; + } + } + + return FALSE; +} + +void sub_809E534(u8 taskId) +{ + if (gMain.newKeys & DPAD_UP) + { + gTasks[taskId].data[0] = 3; + sub_809E8F0(taskId, -1, &ewramSS.unk7A); + } + else if (gMain.newKeys & DPAD_DOWN) + { + gTasks[taskId].data[0] = 3; + sub_809E8F0(taskId, 1, &ewramSS.unk7A); + } + else if (gMain.newKeys & A_BUTTON) + { + sub_809E83C(taskId, 1); + } + else if (gMain.newKeys & B_BUTTON) + { + sub_809E83C(taskId, -1); + } +} + +__attribute__((naked)) +void sub_809E5C4(void) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, 0x20\n\ + ldr r1, _0809E6D0 @ =gSharedMem + 0x18000\n\ + ldr r5, [r1]\n\ + ldrb r2, [r1, 0x9]\n\ + movs r0, 0x64\n\ + muls r0, r2\n\ + adds r5, r0\n\ + adds r0, r1, 0\n\ + adds r0, 0x79\n\ + ldrb r0, [r0]\n\ + mov r8, r0\n\ + adds r1, 0x7A\n\ + ldrb r6, [r1]\n\ + adds r0, 0xD\n\ + str r0, [sp, 0x8]\n\ + adds r0, r5, 0\n\ + ldr r1, [sp, 0x8]\n\ + bl GetMonData\n\ + mov r1, sp\n\ + adds r1, 0x2\n\ + str r1, [sp, 0x14]\n\ + strh r0, [r1]\n\ + adds r2, r6, 0\n\ + adds r2, 0xD\n\ + str r2, [sp, 0xC]\n\ + adds r0, r5, 0\n\ + adds r1, r2, 0\n\ + bl GetMonData\n\ + mov r1, sp\n\ + strh r0, [r1]\n\ + mov r3, r8\n\ + adds r3, 0x11\n\ + str r3, [sp, 0x10]\n\ + adds r0, r5, 0\n\ + adds r1, r3, 0\n\ + bl GetMonData\n\ + mov r7, sp\n\ + adds r7, 0x5\n\ + str r7, [sp, 0x18]\n\ + strb r0, [r7]\n\ + adds r0, r6, 0\n\ + adds r0, 0x11\n\ + str r0, [sp, 0x1C]\n\ + adds r0, r5, 0\n\ + ldr r1, [sp, 0x1C]\n\ + bl GetMonData\n\ + add r1, sp, 0x4\n\ + mov r10, r1\n\ + strb r0, [r1]\n\ + adds r0, r5, 0\n\ + movs r1, 0x15\n\ + bl GetMonData\n\ + mov r4, sp\n\ + adds r4, 0x6\n\ + strb r0, [r4]\n\ + ldr r1, _0809E6D4 @ =gUnknown_08208238\n\ + mov r2, r8\n\ + adds r0, r2, r1\n\ + ldrb r0, [r0]\n\ + mov r9, r0\n\ + ldrb r0, [r4]\n\ + adds r2, r0, 0\n\ + mov r3, r9\n\ + ands r2, r3\n\ + mov r7, r8\n\ + lsls r7, 1\n\ + mov r8, r7\n\ + asrs r2, r7\n\ + lsls r2, 24\n\ + lsrs r2, 24\n\ + adds r1, r6, r1\n\ + ldrb r3, [r1]\n\ + adds r1, r0, 0\n\ + ands r1, r3\n\ + lsls r6, 1\n\ + asrs r1, r6\n\ + lsls r1, 24\n\ + lsrs r1, 24\n\ + mov r7, r9\n\ + bics r0, r7\n\ + strb r0, [r4]\n\ + ldrb r0, [r4]\n\ + bics r0, r3\n\ + strb r0, [r4]\n\ + lsls r2, r6\n\ + mov r0, r8\n\ + lsls r1, r0\n\ + adds r2, r1\n\ + ldrb r0, [r4]\n\ + orrs r0, r2\n\ + strb r0, [r4]\n\ + adds r0, r5, 0\n\ + ldr r1, [sp, 0x8]\n\ + mov r2, sp\n\ + bl SetMonData\n\ + adds r0, r5, 0\n\ + ldr r1, [sp, 0xC]\n\ + ldr r2, [sp, 0x14]\n\ + bl SetMonData\n\ + adds r0, r5, 0\n\ + ldr r1, [sp, 0x10]\n\ + mov r2, r10\n\ + bl SetMonData\n\ + adds r0, r5, 0\n\ + ldr r1, [sp, 0x1C]\n\ + ldr r2, [sp, 0x18]\n\ + bl SetMonData\n\ + adds r0, r5, 0\n\ + movs r1, 0x15\n\ + adds r2, r4, 0\n\ + bl SetMonData\n\ + add sp, 0x20\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_0809E6D0: .4byte gSharedMem + 0x18000\n\ +_0809E6D4: .4byte gUnknown_08208238\n\ + .syntax divided\n"); +} + +__attribute__((naked)) +void sub_809E6D8(void) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, 0x20\n\ + ldr r2, _0809E7E8 @ =gSharedMem + 0x18000\n\ + ldr r5, [r2]\n\ + ldrb r1, [r2, 0x9]\n\ + lsls r0, r1, 2\n\ + adds r0, r1\n\ + lsls r0, 4\n\ + adds r5, r0\n\ + adds r0, r2, 0\n\ + adds r0, 0x79\n\ + ldrb r0, [r0]\n\ + mov r8, r0\n\ + adds r2, 0x7A\n\ + ldrb r6, [r2]\n\ + adds r0, 0xD\n\ + str r0, [sp, 0x8]\n\ + adds r0, r5, 0\n\ + ldr r1, [sp, 0x8]\n\ + bl GetBoxMonData\n\ + mov r1, sp\n\ + adds r1, 0x2\n\ + str r1, [sp, 0x14]\n\ + strh r0, [r1]\n\ + adds r2, r6, 0\n\ + adds r2, 0xD\n\ + str r2, [sp, 0xC]\n\ + adds r0, r5, 0\n\ + adds r1, r2, 0\n\ + bl GetBoxMonData\n\ + mov r1, sp\n\ + strh r0, [r1]\n\ + mov r3, r8\n\ + adds r3, 0x11\n\ + str r3, [sp, 0x10]\n\ + adds r0, r5, 0\n\ + adds r1, r3, 0\n\ + bl GetBoxMonData\n\ + mov r7, sp\n\ + adds r7, 0x5\n\ + str r7, [sp, 0x18]\n\ + strb r0, [r7]\n\ + adds r0, r6, 0\n\ + adds r0, 0x11\n\ + str r0, [sp, 0x1C]\n\ + adds r0, r5, 0\n\ + ldr r1, [sp, 0x1C]\n\ + bl GetBoxMonData\n\ + add r1, sp, 0x4\n\ + mov r10, r1\n\ + strb r0, [r1]\n\ + adds r0, r5, 0\n\ + movs r1, 0x15\n\ + bl GetBoxMonData\n\ + mov r4, sp\n\ + adds r4, 0x6\n\ + strb r0, [r4]\n\ + ldr r1, _0809E7EC @ =gUnknown_08208238\n\ + mov r2, r8\n\ + adds r0, r2, r1\n\ + ldrb r0, [r0]\n\ + mov r9, r0\n\ + ldrb r0, [r4]\n\ + adds r2, r0, 0\n\ + mov r3, r9\n\ + ands r2, r3\n\ + mov r7, r8\n\ + lsls r7, 1\n\ + mov r8, r7\n\ + asrs r2, r7\n\ + lsls r2, 24\n\ + lsrs r2, 24\n\ + adds r1, r6, r1\n\ + ldrb r3, [r1]\n\ + adds r1, r0, 0\n\ + ands r1, r3\n\ + lsls r6, 1\n\ + asrs r1, r6\n\ + lsls r1, 24\n\ + lsrs r1, 24\n\ + mov r7, r9\n\ + bics r0, r7\n\ + strb r0, [r4]\n\ + ldrb r0, [r4]\n\ + bics r0, r3\n\ + strb r0, [r4]\n\ + lsls r2, r6\n\ + mov r0, r8\n\ + lsls r1, r0\n\ + adds r2, r1\n\ + ldrb r0, [r4]\n\ + orrs r0, r2\n\ + strb r0, [r4]\n\ + adds r0, r5, 0\n\ + ldr r1, [sp, 0x8]\n\ + mov r2, sp\n\ + bl SetBoxMonData\n\ + adds r0, r5, 0\n\ + ldr r1, [sp, 0xC]\n\ + ldr r2, [sp, 0x14]\n\ + bl SetBoxMonData\n\ + adds r0, r5, 0\n\ + ldr r1, [sp, 0x10]\n\ + mov r2, r10\n\ + bl SetBoxMonData\n\ + adds r0, r5, 0\n\ + ldr r1, [sp, 0x1C]\n\ + ldr r2, [sp, 0x18]\n\ + bl SetBoxMonData\n\ + adds r0, r5, 0\n\ + movs r1, 0x15\n\ + adds r2, r4, 0\n\ + bl SetBoxMonData\n\ + add sp, 0x20\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_0809E7E8: .4byte gSharedMem + 0x18000\n\ +_0809E7EC: .4byte gUnknown_08208238\n\ + .syntax divided\n"); +} + +void sub_809E7F0(u8 taskId) +{ + if (sub_809F5F8()) + { + ewramSS.unk74 = 0; + sub_80A0428(&ewramSS.unk10, &ewramSS.unk79); + gTasks[taskId].func = sub_809E3FC; + sub_80A2078(taskId); + } +} + +void sub_809E83C(u8 taskId, s8 b) +{ + PlaySE(5); + + sub_80A1B1C(19); + sub_80A1B40(0); + + if (b == 1) + { + if (ewramSS.unk79 != ewramSS.unk7A) + { + if (ewramSS.unkE == 0) + { + sub_809E5C4(); + } + else + { + sub_809E6D8(); + } + + ewramSS.unk79 = ewramSS.unk7A; + sub_809F678(&ewramSS.unk10); + ewramSS.unk74 = 1; + + gTasks[taskId].func = sub_809E7F0; + return; + } + } + else + { + sub_80A0428(&ewramSS.unk10, &ewramSS.unk79); + } + + gTasks[taskId].func = sub_809E3FC; + sub_80A2078(taskId); +} + +__attribute__((naked)) +void sub_809E8F0(u8 taskId, s8 direction, u8 *c) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, 0x8\n\ + adds r4, r1, 0\n\ + mov r9, r2\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + mov r8, r0\n\ + lsls r4, 24\n\ + lsrs r4, 24\n\ + movs r0, 0x1\n\ + str r0, [sp]\n\ + movs r0, 0x5\n\ + bl PlaySE\n\ + mov r1, r9\n\ + ldrb r6, [r1]\n\ + ldr r1, _0809E944 @ =gTasks\n\ + mov r2, r8\n\ + lsls r0, r2, 2\n\ + add r0, r8\n\ + lsls r0, 3\n\ + adds r0, r1\n\ + ldrb r0, [r0, 0x8]\n\ + movs r2, 0\n\ + lsls r4, 24\n\ + asrs r4, 24\n\ + mov r10, r4\n\ + lsls r7, r0, 24\n\ +_0809E930:\n\ + lsls r0, r6, 24\n\ + asrs r0, 24\n\ + add r0, r10\n\ + lsls r0, 24\n\ + lsrs r6, r0, 24\n\ + asrs r1, r0, 24\n\ + cmp r0, r7\n\ + ble _0809E948\n\ + movs r6, 0\n\ + b _0809E94E\n\ + .align 2, 0\n\ +_0809E944: .4byte gTasks\n\ +_0809E948:\n\ + cmp r1, 0\n\ + bge _0809E94E\n\ + lsrs r6, r7, 24\n\ +_0809E94E:\n\ + lsls r4, r6, 24\n\ + lsrs r1, r4, 24\n\ + ldr r0, _0809EA10 @ =gSharedMem + 0x18010\n\ + str r2, [sp, 0x4]\n\ + bl GetMonMove\n\ + lsls r0, 16\n\ + adds r5, r4, 0\n\ + ldr r2, [sp, 0x4]\n\ + cmp r0, 0\n\ + bne _0809E97A\n\ + asrs r0, r5, 24\n\ + cmp r0, 0x4\n\ + beq _0809E97A\n\ + lsls r0, r2, 24\n\ + movs r3, 0x80\n\ + lsls r3, 17\n\ + adds r0, r3\n\ + lsrs r2, r0, 24\n\ + asrs r0, 24\n\ + cmp r0, 0x3\n\ + ble _0809E930\n\ +_0809E97A:\n\ + mov r1, r9\n\ + ldrb r0, [r1]\n\ + cmp r0, 0x4\n\ + bne _0809E996\n\ + asrs r0, r5, 24\n\ + cmp r0, 0x4\n\ + beq _0809E996\n\ + ldr r0, _0809EA14 @ =gSharedMem + 0x18000\n\ + adds r0, 0x7C\n\ + ldrh r0, [r0]\n\ + mov r2, r8\n\ + lsls r7, r2, 2\n\ + cmp r0, 0\n\ + beq _0809E9AC\n\ +_0809E996:\n\ + ldr r2, _0809EA18 @ =gTasks\n\ + mov r3, r8\n\ + lsls r1, r3, 2\n\ + adds r0, r1, r3\n\ + lsls r0, 3\n\ + adds r0, r2\n\ + movs r2, 0x22\n\ + ldrsh r0, [r0, r2]\n\ + adds r7, r1, 0\n\ + cmp r0, 0x1\n\ + bne _0809E9D0\n\ +_0809E9AC:\n\ + lsrs r4, r5, 24\n\ + movs r0, 0x2\n\ + adds r1, r4, 0\n\ + bl sub_80A1488\n\ + movs r0, 0x2\n\ + adds r1, r4, 0\n\ + bl sub_80A1654\n\ + ldr r1, _0809EA18 @ =gTasks\n\ + mov r3, r8\n\ + adds r0, r7, r3\n\ + lsls r0, 3\n\ + adds r0, r1\n\ + movs r1, 0\n\ + strh r1, [r0, 0x22]\n\ + movs r0, 0\n\ + str r0, [sp]\n\ +_0809E9D0:\n\ + mov r1, r9\n\ + ldrb r0, [r1]\n\ + cmp r0, 0x4\n\ + beq _0809E9FE\n\ + asrs r0, r5, 24\n\ + cmp r0, 0x4\n\ + bne _0809E9FE\n\ + ldr r0, _0809EA14 @ =gSharedMem + 0x18000\n\ + adds r0, 0x7C\n\ + ldrh r0, [r0]\n\ + cmp r0, 0\n\ + bne _0809E9FE\n\ + movs r4, 0x2\n\ + negs r4, r4\n\ + lsrs r5, 24\n\ + adds r0, r4, 0\n\ + adds r1, r5, 0\n\ + bl sub_80A1488\n\ + adds r0, r4, 0\n\ + adds r1, r5, 0\n\ + bl sub_80A1654\n\ +_0809E9FE:\n\ + mov r2, r9\n\ + strb r6, [r2]\n\ + ldr r0, _0809EA1C @ =gSharedMem + 0x18079\n\ + cmp r9, r0\n\ + bne _0809EA20\n\ + movs r0, 0\n\ + bl sub_80A1C30\n\ + b _0809EA26\n\ + .align 2, 0\n\ +_0809EA10: .4byte gSharedMem + 0x18010\n\ +_0809EA14: .4byte gSharedMem + 0x18000\n\ +_0809EA18: .4byte gTasks\n\ +_0809EA1C: .4byte gSharedMem + 0x18079\n\ +_0809EA20:\n\ + movs r0, 0x1\n\ + bl sub_80A1C30\n\ +_0809EA26:\n\ + ldr r3, [sp]\n\ + cmp r3, 0\n\ + beq _0809EA34\n\ + ldr r0, _0809EA4C @ =gSharedMem + 0x18010\n\ + mov r1, r9\n\ + bl sub_80A0428\n\ +_0809EA34:\n\ + mov r0, r8\n\ + bl sub_80A2078\n\ + add sp, 0x8\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_0809EA4C: .4byte gSharedMem + 0x18010\n\ + .syntax divided\n"); +} + +void SummaryScreenHandleAButton(u8 taskId) +{ + PlaySE(5); + + ewramSS.unk79 = 0; + sub_80A1488(2, 0); + sub_80A1654(2, 0); + + if (ewramSS.unk7B == 0) + { + ewramSS.unk7F = 5; + PrintSummaryWindowHeaderText(); + } + + sub_80A16CC(0); + sub_80A029C(&ewramSS.unk10); + sub_80A1A30(9); + + gTasks[taskId].func = sub_809E3FC; + sub_80A2078(taskId); +} + +void sub_809EAC8(u8 taskId) +{ + if (ewramSS.unk79 != 4) + { + sub_80A1488(-2, 0); + sub_80A1654(-2, 0); + } + + sub_80A1B1C(9); + sub_80A16CC(1); + + MenuZeroFillWindowRect(15, 12, 28, 13); + MenuZeroFillWindowRect(11, 15, 28, 18); + + ewramSS.unk7F = 6; + PrintSummaryWindowHeaderText(); + + gTasks[taskId].func = SummaryScreenHandleKeyInput; +} + +void sub_809EB40(u8 taskId) +{ + switch (gTasks[taskId].data[0]) + { + case 5: + sub_80A1A30(9); + gTasks[taskId].data[0] = 0; + gTasks[taskId].func = sub_809E260; + break; + case 0: + ewramSS.unk79 = 0; + if (ewramSS.unk7C != 0) + { + sub_80A1488(10, 0); + sub_80A1654(10, ewramSS.unk79); + } + + sub_80A16CC(0); + sub_80A029C(&ewramSS.unk10); + // fall through + default: + gTasks[taskId].data[0]++; + break; + } +} + +void sub_809EBC4(void) +{ + if (ewramSS.unkB != 0) + { + DrawSummaryScreenNavigationDots(); + gUnknown_030042C0 = 0x100; + + if (ewramSS.unkB == 1) + REG_BG1CNT = (REG_BG1CNT & 0xE0FF) + 0x800; + + if (ewramSS.unkB == 2) + REG_BG1CNT = (REG_BG1CNT & 0xE0FF) + 0xA00; + + if (ewramSS.unkB == 3) + REG_BG1CNT = (REG_BG1CNT & 0xE0FF) + 0xC00; + } +} + +void sub_809EC38(u8 taskId) +{ + u8 minus2; + s16 *taskData = gTasks[taskId].data; + + switch (taskData[0]) + { + case 0: + if (ewramSS.unk80 == 0) + { + if (ewramSS.unkB != 0) + { + gUnknown_03004288 = 0x100; + } + + if (ewramSS.unkB == 1) + { + REG_BG2CNT = (REG_BG2CNT & 0xE0FF) + 0x800; + } + + if (ewramSS.unkB == 2) + { + REG_BG2CNT = (REG_BG2CNT & 0xE0FF) + 0xA00; + } + } + else + { + if (ewramSS.unkB != 0) + { + gUnknown_030042C0 = 0x100; + } + + if (ewramSS.unkB == 1) + { + REG_BG1CNT = (REG_BG1CNT & 0xE0FF) + 0x800; + } + + if (ewramSS.unkB == 2) + { + REG_BG1CNT = (REG_BG1CNT & 0xE0FF) + 0xA00; + } + } + + taskData[0]++; + break; + case 1: + if (ewramSS.unk80 == 0) + { + int var2 = gUnknown_030042C0 - 0x20; + gUnknown_030042C0 = var2; + if (var2 << 16 == 0) + { + REG_BG1CNT = (REG_BG1CNT & 0xFFFC) + 2; + REG_BG2CNT = (REG_BG2CNT & 0xFFFC) + 1; + taskData[0]++; + } + } + else + { + int var2 = gUnknown_03004288 - 0x20; + gUnknown_03004288 = var2; + if (var2 << 16 == 0) + { + REG_BG1CNT = (REG_BG1CNT & 0xFFFC) + 1; + REG_BG2CNT = (REG_BG2CNT & 0xFFFC) + 2; + taskData[0]++; + } + } + break; + case 2: + ewramSS.unk7E = ewramSS.unkB + 1; + minus2 = ewramSS.unk8 - 2; + if (minus2 < 2) + { + ewramSS.unk7F = 0; + sub_80A029C(&ewramSS.unk10); + sub_80A0428(&ewramSS.unk10, &ewramSS.unk79); + sub_80A00F4(ewramSS.unk79); + } + else + { + if (ewramSS.unkB > 1 && (ewramSS.unk7B == 0 || ewramSS.unk8 == 4)) + { + ewramSS.unk7F = 6; + } + else if (ewramSS.unkB == 0) + { + ewramSS.unk7F = 7; + } + else + { + ewramSS.unk7F = 0; + } + } + + taskData[0]++; + break; + case 3: + DrawSummaryScreenNavigationDots(); + PrintSummaryWindowHeaderText(); + taskData[0]++; + break; + case 4: + gUnknown_083C1598[ewramSS.unkB](&ewramSS.unk10); + ewramSS.unk80 ^= 1; + taskData[0]++; + break; + case 5: + if (sub_8055870() != TRUE) + { + gTasks[taskId].func = gUnknown_03005CF0; + } + break; + } +} + +void sub_809EE74(u8 taskId) +{ + int var1; + u8 minus2; + s16 *taskData = gTasks[taskId].data; + + switch (taskData[0]) + { + case 0: + var1 = ewramSS.unk80; + if (var1 == 0) + { + gUnknown_03004288 = ewramSS.unk80; + taskData[0]++; + } + else + { + gUnknown_030042C0 = 0; + taskData[0]++; + } + break; + case 1: + if (ewramSS.unk80 == 0) + { + if (ewramSS.unkB == 1) + REG_BG2CNT = (REG_BG2CNT & 0xE0FC) + 0x801; + + if (ewramSS.unkB == 2) + REG_BG2CNT = (REG_BG2CNT & 0xE0FC) + 0xA01; + + if (ewramSS.unkB == 3) + REG_BG2CNT = (REG_BG2CNT & 0xE0FC) + 0xC01; + + REG_BG1CNT = (REG_BG1CNT & 0xFFFC) + 2; + } + else + { + if (ewramSS.unkB == 1) + REG_BG1CNT = (REG_BG1CNT & 0xE0FC) + 0x801; + + if (ewramSS.unkB == 2) + REG_BG1CNT = (REG_BG1CNT & 0xE0FC) + 0xA01; + + if (ewramSS.unkB == 3) + REG_BG1CNT = (REG_BG1CNT & 0xE0FC) + 0xC01; + + REG_BG2CNT = (REG_BG2CNT & 0xFFFC) + 2; + } + + taskData[0]++; + break; + case 2: + if (ewramSS.unk80 == 0) + { + int var2 = gUnknown_03004288 + 0x20; + gUnknown_03004288 = var2; + if ((var2 << 16) == 0x1000000) + { + taskData[0]++; + } + } + else + { + int var2 = gUnknown_030042C0 + 0x20; + gUnknown_030042C0 = var2; + if ((var2 << 16) == 0x1000000) + { + taskData[0]++; + } + } + break; + case 3: + ewramSS.unk7E = ewramSS.unkB + 1; + minus2 = ewramSS.unk8 - 2; + if (minus2 < 2) + { + ewramSS.unk7F = 0; + sub_80A029C(&ewramSS.unk10); + sub_80A0428(&ewramSS.unk10, &ewramSS.unk79); + sub_80A00F4(ewramSS.unk79); + } + else + { + if (ewramSS.unkB > 1 && (ewramSS.unk7B == 0 || ewramSS.unk8 == 4)) + { + ewramSS.unk7F = 6; + } + else if (ewramSS.unkB == 0) + { + ewramSS.unk7F = 7; + } + else + { + ewramSS.unk7F = 0; + } + } + + taskData[0]++; + break; + case 4: + DrawSummaryScreenNavigationDots(); + PrintSummaryWindowHeaderText(); + taskData[0]++; + break; + case 5: + gUnknown_083C1598[ewramSS.unkB](&ewramSS.unk10); + ewramSS.unk80 ^= 1; + taskData[0]++; + break; + case 6: + if (sub_8055870() != TRUE) + { + gTasks[taskId].func = gUnknown_03005CF0; + } + break; + } +} + +void sub_809F0D0(u8 taskId, s8 direction) +{ + ewramSS.unkB += direction; + gUnknown_03005CF0 = gTasks[taskId].func; + sub_809FBE4(); + gTasks[taskId].data[0] = 0; + + if (direction == -1) + { + gTasks[taskId].func = sub_809EC38; + } + else + { + gTasks[taskId].func = sub_809EE74; + gTasks[taskId].func(taskId); + } +} + +void SummaryScreenHandleLeftRightInput(u8 taskId, s8 direction) +{ + if (!GetMonData(&ewramSS.unk10, MON_DATA_IS_EGG)) + { + if (direction == -1 && ewramSS.unkB == ewramSS.unk75) return; + if (direction == 1 && ewramSS.unkB == ewramSS.unk76) return; + + if (FindTaskIdByFunc(sub_80A1334) == 0xFF && FindTaskIdByFunc(sub_80A1500) == 0xFF) + { + PlaySE(5); + sub_809F0D0(taskId, direction); + } + } +} + +#ifdef NONMATCHING +void SummaryScreenHandleUpDownInput(u8 taskId, s8 direction) +{ + s8 var3; + u8 var1 = direction; + + if (ewramSS.unkE == 1) + { + if (ewramSS.unkB != 0) + { + var1 = (direction == 1) ? 0 : 1; + } + else + { + var1 = (direction == 1) ? 2 : 3; + } + + var3 = StorageSystemGetNextMonIndex(ewramSS.unk0.boxMons, ewramSS.unk9, ewramSS.unkA, var1); + } + else + { + if (sub_80F9344() == TRUE && IsLinkDoubleBattle() == TRUE) + { + var3 = sub_809F3CC(var1); + } + else + { + var3 = sub_809F284(var1); + } + } + + if (var3 != -1) + { + PlaySE(5); + if (GetMonStatusAndPokerus(&ewramSS.unk10)) + { + sub_80A12D0(-2); + } + + ewramSS.unk9 = var3; + ewramSS.unk84 = gTasks[taskId].func; + gTasks[taskId].func = sub_809F43C; + } +} +#else +__attribute__((naked)) +void SummaryScreenHandleUpDownInput(u8 taskId, s8 direction) +{ + asm(".syntax unified\n\ + push {r4-r6,lr}\n\ + lsls r0, 24\n\ + lsrs r6, r0, 24\n\ + lsls r1, 24\n\ + lsrs r4, r1, 24\n\ + ldr r0, _0809F1E4 @ =gSharedMem + 0x18000\n\ + ldrb r1, [r0, 0xE]\n\ + adds r2, r0, 0\n\ + cmp r1, 0x1\n\ + bne _0809F202\n\ + ldrb r0, [r2, 0xB]\n\ + cmp r0, 0\n\ + beq _0809F1E8\n\ + lsls r1, r4, 24\n\ + asrs r1, 24\n\ + movs r4, 0x1\n\ + eors r1, r4\n\ + negs r0, r1\n\ + orrs r0, r1\n\ + lsrs r4, r0, 31\n\ + b _0809F1F4\n\ + .align 2, 0\n\ +_0809F1E4: .4byte gSharedMem + 0x18000\n\ +_0809F1E8:\n\ + lsls r0, r4, 24\n\ + asrs r0, 24\n\ + movs r4, 0x3\n\ + cmp r0, 0x1\n\ + bne _0809F1F4\n\ + movs r4, 0x2\n\ +_0809F1F4:\n\ + ldr r0, [r2]\n\ + ldrb r1, [r2, 0x9]\n\ + ldrb r2, [r2, 0xA]\n\ + adds r3, r4, 0\n\ + bl StorageSystemGetNextMonIndex\n\ + b _0809F22C\n\ +_0809F202:\n\ + bl sub_80F9344\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0x1\n\ + bne _0809F224\n\ + bl IsLinkDoubleBattle\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0x1\n\ + bne _0809F224\n\ + lsls r0, r4, 24\n\ + asrs r0, 24\n\ + bl sub_809F3CC\n\ + b _0809F22C\n\ +_0809F224:\n\ + lsls r0, r4, 24\n\ + asrs r0, 24\n\ + bl sub_809F284\n\ +_0809F22C:\n\ + lsls r0, 24\n\ + lsrs r4, r0, 24\n\ + lsls r0, r4, 24\n\ + asrs r0, 24\n\ + movs r1, 0x1\n\ + negs r1, r1\n\ + cmp r0, r1\n\ + beq _0809F270\n\ + movs r0, 0x5\n\ + bl PlaySE\n\ + ldr r5, _0809F278 @ =gSharedMem + 0x18010\n\ + adds r0, r5, 0\n\ + bl GetMonStatusAndPokerus\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _0809F258\n\ + movs r0, 0x2\n\ + negs r0, r0\n\ + bl sub_80A12D0\n\ +_0809F258:\n\ + adds r0, r5, 0\n\ + subs r0, 0x10\n\ + strb r4, [r0, 0x9]\n\ + ldr r1, _0809F27C @ =gTasks\n\ + lsls r0, r6, 2\n\ + adds r0, r6\n\ + lsls r0, 3\n\ + adds r0, r1\n\ + ldr r1, [r0]\n\ + str r1, [r5, 0x74]\n\ + ldr r1, _0809F280 @ =sub_809F43C\n\ + str r1, [r0]\n\ +_0809F270:\n\ + pop {r4-r6}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_0809F278: .4byte gSharedMem + 0x18010\n\ +_0809F27C: .4byte gTasks\n\ +_0809F280: .4byte sub_809F43C\n\ + .syntax divided\n"); +} +#endif // NONMATCHING + +// s8 sub_809F284(s8 a) +// { +// struct Pokemon *mons = ewramSS.unk0.partyMons; +// u8 var1 = 0; + +// if (ewramSS.unkB == 0) +// { +// if ((s8)a == -1 || ewramSS.unk9 != 0) +// { +// if ((s8)a == 1 || ewramSS.unk9 < ewramSS.unkA) +// { +// return ewramSS.unk9 + a; +// } +// } + +// return -1; +// } +// else +// { +// while (1) +// { +// var1 += a; + +// if (ewramSS.unk9 + var1 >= 0 || ewramSS.unk9 + var1 > ewramSS.unkA) +// { +// return -1; +// } + +// if (!GetMonData(&mons[ewramSS.unk9 + var1], MON_DATA_IS_EGG)) +// { +// break; +// } +// } + +// return ewramSS.unk9 + var1; +// } + +// } +__attribute__((naked)) +s8 sub_809F284(s8 a) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + lsls r0, 24\n\ + lsrs r3, r0, 24\n\ + ldr r0, _0809F2C0 @ =gSharedMem + 0x18000\n\ + ldr r7, [r0]\n\ + movs r6, 0\n\ + ldrb r1, [r0, 0xB]\n\ + adds r4, r0, 0\n\ + cmp r1, 0\n\ + bne _0809F2C4\n\ + lsls r0, r3, 24\n\ + asrs r2, r0, 24\n\ + movs r1, 0x1\n\ + negs r1, r1\n\ + adds r5, r0, 0\n\ + cmp r2, r1\n\ + bne _0809F2AC\n\ + ldrb r0, [r4, 0x9]\n\ + cmp r0, 0\n\ + beq _0809F2E4\n\ +_0809F2AC:\n\ + asrs r0, r5, 24\n\ + cmp r0, 0x1\n\ + bne _0809F2BA\n\ + ldrb r0, [r4, 0x9]\n\ + ldrb r1, [r4, 0xA]\n\ + cmp r0, r1\n\ + bcs _0809F2E4\n\ +_0809F2BA:\n\ + ldrb r0, [r4, 0x9]\n\ + adds r0, r3\n\ + b _0809F304\n\ + .align 2, 0\n\ +_0809F2C0: .4byte gSharedMem + 0x18000\n\ +_0809F2C4:\n\ + lsls r5, r3, 24\n\ +_0809F2C6:\n\ + lsls r0, r6, 24\n\ + asrs r0, 24\n\ + asrs r1, r5, 24\n\ + adds r0, r1\n\ + lsls r0, 24\n\ + ldr r4, _0809F2EC @ =gSharedMem + 0x18000\n\ + lsrs r6, r0, 24\n\ + asrs r0, 24\n\ + ldrb r2, [r4, 0x9]\n\ + adds r1, r0, r2\n\ + cmp r1, 0\n\ + blt _0809F2E4\n\ + ldrb r0, [r4, 0xA]\n\ + cmp r1, r0\n\ + ble _0809F2F0\n\ +_0809F2E4:\n\ + movs r0, 0x1\n\ + negs r0, r0\n\ + b _0809F308\n\ + .align 2, 0\n\ +_0809F2EC: .4byte gSharedMem + 0x18000\n\ +_0809F2F0:\n\ + movs r0, 0x64\n\ + muls r0, r1\n\ + adds r0, r7, r0\n\ + movs r1, 0x2D\n\ + bl GetMonData\n\ + cmp r0, 0\n\ + bne _0809F2C6\n\ + ldrb r0, [r4, 0x9]\n\ + adds r0, r6\n\ +_0809F304:\n\ + lsls r0, 24\n\ + asrs r0, 24\n\ +_0809F308:\n\ + pop {r4-r7}\n\ + pop {r1}\n\ + bx r1\n\ + .syntax divided\n"); +} + +bool8 sub_809F310(struct Pokemon *mon) +{ + if (GetMonData(mon, MON_DATA_SPECIES)) + { + if (ewramSS.unkB != 0 || !GetMonData(mon, MON_DATA_IS_EGG)) + { + return TRUE; + } + } + + return FALSE; +} + +s8 sub_809F344(u8 partyIndex) +{ + while (1) + { + partyIndex++; + if (partyIndex == PARTY_SIZE) + { + return -1; + } + + if (sub_809F310(&gPlayerParty[gUnknown_083C15A8[partyIndex]]) == TRUE) + { + return gUnknown_083C15A8[partyIndex]; + } + } +} + +s8 sub_809F388(u8 partyIndex) +{ + while (1) + { + if (partyIndex == 0) + { + return -1; + } + + partyIndex--; + if (sub_809F310(&gPlayerParty[gUnknown_083C15A8[partyIndex]]) == TRUE) + { + return gUnknown_083C15A8[partyIndex]; + } + } +} + +#ifdef NONMATCHING // The nested if statements at the end are not matching. +s8 sub_809F3CC(s8 a) +{ + u8 var1 = 0; + u8 i = 0; + + for (i = 0; i < 6; i++) + { + if (gUnknown_083C15A8[i] == ewramSS.unk9) + { + var1 = i; + break; + } + } + + if ((s8)a != -1 || var1 != 0) + { + if ((s8)a != 1) + { + return sub_809F388(var1); + } + else if (var1 != 5) + { + return sub_809F344(var1); + } + } + + return -1; +} +#else +__attribute__((naked)) +s8 sub_809F3CC(s8 a) +{ + asm(".syntax unified\n\ + push {r4-r6,lr}\n\ + lsls r0, 24\n\ + lsrs r6, r0, 24\n\ + movs r2, 0\n\ + movs r1, 0\n\ + ldr r3, _0809F41C @ =gUnknown_083C15A8\n\ + ldr r4, _0809F420 @ =gSharedMem + 0x18000\n\ + ldrb r0, [r3]\n\ + ldrb r5, [r4, 0x9]\n\ + cmp r0, r5\n\ + beq _0809F3FC\n\ + adds r5, r3, 0\n\ + adds r3, r4, 0\n\ +_0809F3E6:\n\ + adds r0, r1, 0x1\n\ + lsls r0, 24\n\ + lsrs r1, r0, 24\n\ + cmp r1, 0x5\n\ + bhi _0809F3FC\n\ + adds r0, r1, r5\n\ + ldrb r0, [r0]\n\ + ldrb r4, [r3, 0x9]\n\ + cmp r0, r4\n\ + bne _0809F3E6\n\ + adds r2, r1, 0\n\ +_0809F3FC:\n\ + lsls r0, r6, 24\n\ + asrs r1, r0, 24\n\ + movs r0, 0x1\n\ + negs r0, r0\n\ + cmp r1, r0\n\ + bne _0809F40C\n\ + cmp r2, 0\n\ + beq _0809F414\n\ +_0809F40C:\n\ + cmp r1, 0x1\n\ + bne _0809F424\n\ + cmp r2, 0x5\n\ + bne _0809F42C\n\ +_0809F414:\n\ + movs r0, 0x1\n\ + negs r0, r0\n\ + b _0809F436\n\ + .align 2, 0\n\ +_0809F41C: .4byte gUnknown_083C15A8\n\ +_0809F420: .4byte gSharedMem + 0x18000\n\ +_0809F424:\n\ + adds r0, r2, 0\n\ + bl sub_809F388\n\ + b _0809F432\n\ +_0809F42C:\n\ + adds r0, r2, 0\n\ + bl sub_809F344\n\ +_0809F432:\n\ + lsls r0, 24\n\ + asrs r0, 24\n\ +_0809F436:\n\ + pop {r4-r6}\n\ + pop {r1}\n\ + bx r1\n\ + .syntax divided\n"); +} +#endif // NONMATCHING + +void sub_809F43C(u8 taskId) +{ + switch (gMain.state) + { + case 0: + StopCryAndClearCrySongs(); + gMain.state++; + break; + case 1: + DestroySpriteAndFreeResources(&gSprites[ewramSS.unkC]); + gMain.state++; + break; + case 2: + DestroySpriteAndFreeResources(&gSprites[ewramSS.unkD]); + gMain.state++; + break; + case 3: + ewramSS.unk74 = 0; + ewramSS.unk79 = 0; + gMain.state++; + break; + case 4: + sub_809F678(&ewramSS.unk10); + if (GetMonStatusAndPokerus(&ewramSS.unk10)) + { + sub_80A12D0(2); + } + + DrawPokerusSurvivorDot(&ewramSS.unk10); + gMain.state++; + break; + case 5: + if ((ewramSS.unkC = sub_809F6B4(&ewramSS.unk10, &ewramSS.unk74)) != 0xFF) + { + ewramSS.unk74 = 0; + if (GetMonData(&ewramSS.unk10, MON_DATA_IS_EGG)) + { + gUnknown_030041B0 = 256; + } + else + { + gUnknown_030041B0 = 0; + } + + gMain.state++; + } + break; + case 6: + sub_80A1DCC(&ewramSS.unk10); + gMain.state++; + break; + case 7: + sub_80A1DE8(&ewramSS.unk10); + gMain.state++; + break; + case 8: + if (sub_809F5F8()) + { + ewramSS.unk74 = 0; + gMain.state++; + } + break; + default: + if (sub_8055870() != TRUE) + { + gMain.state = 0; + gTasks[taskId].func = ewramSS.unk84; + } + break; + } +} + +bool8 sub_809F5F8(void) +{ + if (ewramSS.unk74 == 0) + { + sub_809FAC8(&ewramSS.unk10); + ewramSS.unk74++; + return FALSE; + } + else + { + gUnknown_083C1588[ewramSS.unkB](&ewramSS.unk10); + return TRUE; + } +} + +void sub_809F63C(struct Pokemon *mon) +{ + sub_809FE80(); + sub_809FC34(mon); +} + +void sub_809F650(struct Pokemon *mon) +{ + sub_80A00A4(); + sub_809FF64(mon); +} + +void sub_809F664(struct Pokemon *mon) +{ + sub_80A0390(); + sub_80A015C(mon); +} + +void sub_809F678(struct Pokemon *mon) +{ + if (ewramSS.unkE == 0) + { + struct Pokemon *mons = ewramSS.unk0.partyMons; + *mon = mons[ewramSS.unk9]; + } + else + { + struct BoxPokemon *mons = ewramSS.unk0.boxMons; + sub_803B4B4(&mons[ewramSS.unk9], mon); + } +} + u8 sub_809F6B4(struct Pokemon *mon, u8 *b) { u16 species; @@ -189,7 +2232,7 @@ static u16 GetMonMovePP(struct Pokemon *mon, u8 moveId) } } -bool8 sub_809F7D0() +bool8 sub_809F7D0(u8 taskId) { struct Pokemon mon; u16 move; @@ -222,7 +2265,7 @@ void sub_809F814(u8 taskId) taskData[0] = 4; taskData[13] = 1; ewramSS.unk79 = taskData[15]; - sub_809E8F0(taskId, -1); + sub_809E8F0(taskId, -1, NULL); } else if (gMain.newKeys & DPAD_DOWN) { @@ -230,7 +2273,7 @@ void sub_809F814(u8 taskId) taskData[0] = 4; taskData[13] = 1; ewramSS.unk79 = taskData[15]; - sub_809E8F0(taskId, 1); + sub_809E8F0(taskId, 1, NULL); } else if ((gMain.newKeys & DPAD_LEFT) || sub_80F9284() == 1) { @@ -625,7 +2668,7 @@ void sub_809FAC8(struct Pokemon *mon) } } -void sub_809FBE4() +void sub_809FBE4(void) { u8 i; @@ -887,7 +2930,7 @@ void sub_80A015C(struct Pokemon *mon) } } -void sub_80A029C(void) +void sub_80A029C(struct Pokemon *mon) { u8 *buffer; u16 move; @@ -2223,7 +4266,7 @@ _080A12CC: .4byte gOtherText_Status\n\ .syntax divided\n"); } -void sub_80A12D0(u8 taskId) +void sub_80A12D0(s8 a) { u8 newTaskId; @@ -2231,9 +4274,9 @@ void sub_80A12D0(u8 taskId) sub_80A18E4(29); newTaskId = CreateTask(sub_80A1048, 0); - gTasks[newTaskId].data[0] = (s8)taskId; + gTasks[newTaskId].data[0] = a; - if ((s8)taskId < 0) + if (a < 0) { gTasks[newTaskId].data[1] = 10; } @@ -3493,7 +5536,7 @@ u8 *PokemonSummaryScreen_CopyPokemonLevel(u8 *dest, u8 level) return dest; } -void sub_80A2078(u32 taskId) +void sub_80A2078(int taskId) { gUnknown_03005CF0 = gTasks[taskId].func; gTasks[taskId].func = sub_80A20A8; -- cgit v1.2.3 From b81a94c1edb86459187288ac7f005f4cf1a6c051 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Sat, 25 Nov 2017 18:26:45 -0800 Subject: Label the PokemonSummaryScreenStruct structs members --- src/battle/battle_party_menu.c | 2 +- src/engine/trade.c | 4 +- src/field/choose_party.c | 4 +- src/pokemon/pokemon_menu.c | 2 +- src/pokemon/pokemon_summary_screen.c | 482 +++++++++++++++++------------------ 5 files changed, 247 insertions(+), 247 deletions(-) (limited to 'src') diff --git a/src/battle/battle_party_menu.c b/src/battle/battle_party_menu.c index 97e9dc0fc..5531ead4b 100644 --- a/src/battle/battle_party_menu.c +++ b/src/battle/battle_party_menu.c @@ -625,7 +625,7 @@ static void Task_ShowSummaryScreen(u8 taskId) { DestroyTask(taskId); EWRAM_1B000.unk262 = 1; - ShowPokemonSummaryScreen(gPlayerParty, partySelection, gPlayerPartyCount - 1, Task_809535C, 4); + ShowPokemonSummaryScreen(gPlayerParty, partySelection, gPlayerPartyCount - 1, Task_809535C, PSS_MODE_NO_MOVE_ORDER_EDIT); } } diff --git a/src/engine/trade.c b/src/engine/trade.c index 729791aff..e09942589 100644 --- a/src/engine/trade.c +++ b/src/engine/trade.c @@ -2186,11 +2186,11 @@ static void sub_804997C(void) { if (gUnknown_03004824->tradeMenuCursorPosition < PARTY_SIZE) { - ShowPokemonSummaryScreen(gPlayerParty, gUnknown_03004824->tradeMenuCursorPosition, gUnknown_03004824->partyCounts[0] - 1, sub_80484F4, 4); + ShowPokemonSummaryScreen(gPlayerParty, gUnknown_03004824->tradeMenuCursorPosition, gUnknown_03004824->partyCounts[0] - 1, sub_80484F4, PSS_MODE_NO_MOVE_ORDER_EDIT); } else { - ShowPokemonSummaryScreen(gEnemyParty, gUnknown_03004824->tradeMenuCursorPosition - 6, gUnknown_03004824->partyCounts[1] - 1, sub_80484F4, 4); + ShowPokemonSummaryScreen(gEnemyParty, gUnknown_03004824->tradeMenuCursorPosition - 6, gUnknown_03004824->partyCounts[1] - 1, sub_80484F4, PSS_MODE_NO_MOVE_ORDER_EDIT); } } } diff --git a/src/field/choose_party.c b/src/field/choose_party.c index bf4d74c96..e16da3a58 100644 --- a/src/field/choose_party.c +++ b/src/field/choose_party.c @@ -433,7 +433,7 @@ static void sub_81225D4(u8 taskId) DestroyTask(taskId); ewram1B000.unk262 = 1; - ShowPokemonSummaryScreen(gPlayerParty, r4, gPlayerPartyCount - 1, sub_81225A4, 0); + ShowPokemonSummaryScreen(gPlayerParty, r4, gPlayerPartyCount - 1, sub_81225A4, PSS_MODE_NORMAL); } } @@ -883,7 +883,7 @@ static void sub_8123034(u8 taskId) DestroyTask(taskId); ewram1B000.unk262 = 1; - ShowPokemonSummaryScreen(gPlayerParty, r4, gPlayerPartyCount - 1, sub_8123004, 0); + ShowPokemonSummaryScreen(gPlayerParty, r4, gPlayerPartyCount - 1, sub_8123004, PSS_MODE_NORMAL); } } diff --git a/src/pokemon/pokemon_menu.c b/src/pokemon/pokemon_menu.c index 07d7e5322..ae9fcefea 100644 --- a/src/pokemon/pokemon_menu.c +++ b/src/pokemon/pokemon_menu.c @@ -350,7 +350,7 @@ static void sub_8089F44(u8 taskID) u8 spriteID = gSprites[gTasks[taskID].data[3] >> 8].data[0]; DestroyTask(taskID); ewram1B000_alt.unk262 = 1; - ShowPokemonSummaryScreen(gPlayerParty, spriteID, gPlayerPartyCount - 1, sub_8089F14, 0); + ShowPokemonSummaryScreen(gPlayerParty, spriteID, gPlayerPartyCount - 1, sub_8089F14, PSS_MODE_NORMAL); } } diff --git a/src/pokemon/pokemon_summary_screen.c b/src/pokemon/pokemon_summary_screen.c index 7241b24f0..b7d9e31cb 100644 --- a/src/pokemon/pokemon_summary_screen.c +++ b/src/pokemon/pokemon_summary_screen.c @@ -29,7 +29,7 @@ #include "tv.h" #include "unknown_task.h" -#define ewramSS (*(struct SummaryScreenStruct *)(gSharedMem + 0x18000)) +#define ewramSS (*(struct PokemonSummaryScreenStruct *)(gSharedMem + 0x18000)) static void sub_809DE44(void); static void sub_809EB40(u8); @@ -213,96 +213,96 @@ void sub_809D85C(void) TransferPlttBuffer(); } -void ShowPokemonSummaryScreen(struct Pokemon *party, u8 partyIndex, u8 partyCount, MainCallback func, u8 e) +void ShowPokemonSummaryScreen(struct Pokemon *party, u8 monIndex, u8 maxMonIndex, MainCallback callback, u8 mode) { gPaletteFade.bufferTransferDisabled = 1; - ewramSS.unk0.partyMons = party; - ewramSS.unk8 = e; - ewramSS.unk9 = partyIndex; - ewramSS.unkA = partyCount; - ewramSS.unk4 = func; - ewramSS.unk74 = 0; - ewramSS.unk79 = 4; - ewramSS.unk7C = 0; - ewramSS.unk80 = 0; - ewramSS.unk7B = 0; + ewramSS.monList.partyMons = party; + ewramSS.mode = mode; + ewramSS.monIndex = monIndex; + ewramSS.maxMonIndex = maxMonIndex; + ewramSS.callback = callback; + ewramSS.loadGfxState = 0; + ewramSS.selectedMoveIndex = 4; + ewramSS.moveToLearn = 0; + ewramSS.bgToggle = 0; + ewramSS.disableMoveOrderEditing = FALSE; - if (e > 4) + if (mode >= PSS_MODE_PC_NORMAL) { - ewramSS.unkE = 1; + ewramSS.usingPC = TRUE; } else { - ewramSS.unkE = 0; + ewramSS.usingPC = FALSE; } - switch (e) + switch (mode) { - case 0: - case 5: - ewramSS.unk75 = 0; - ewramSS.unk76 = 3; + case PSS_MODE_NORMAL: + case PSS_MODE_PC_NORMAL: + ewramSS.firstPage = PSS_PAGE_INFO; + ewramSS.lastPage = PSS_PAGE_CONTEST_MOVES; ewramSS.unk77 = 0; ewramSS.unk78 = 0; - ewramSS.unk7E = 1; - ewramSS.unk7F = 7; + ewramSS.headerTextId = 1; + ewramSS.headerActionTextId = 7; break; - case 4: - ewramSS.unk75 = 0; - ewramSS.unk76 = 3; + case PSS_MODE_NO_MOVE_ORDER_EDIT: + ewramSS.firstPage = PSS_PAGE_INFO; + ewramSS.lastPage = PSS_PAGE_CONTEST_MOVES; ewramSS.unk77 = 0; ewramSS.unk78 = 0; - ewramSS.unk7E = 1; - ewramSS.unk7F = 7; - ewramSS.unk7B = 1; + ewramSS.headerTextId = 1; + ewramSS.headerActionTextId = 7; + ewramSS.disableMoveOrderEditing = TRUE; break; - case 2: - ewramSS.unk75 = 2; - ewramSS.unk76 = 3; + case PSS_MODE_SELECT_MOVE: + ewramSS.firstPage = PSS_PAGE_BATTLE_MOVES; + ewramSS.lastPage = PSS_PAGE_CONTEST_MOVES; ewramSS.unk77 = 1; ewramSS.unk78 = 1; - ewramSS.unk7E = 3; - ewramSS.unk7F = 0; - ewramSS.unk79 = 0; + ewramSS.headerTextId = 3; + ewramSS.headerActionTextId = 0; + ewramSS.selectedMoveIndex = 0; break; - case 1: - case 6: - ewramSS.unk75 = 2; - ewramSS.unk76 = 3; + case PSS_MODE_MOVES_ONLY: + case PSS_MODE_PC_MOVES_ONLY: + ewramSS.firstPage = PSS_PAGE_BATTLE_MOVES; + ewramSS.lastPage = PSS_PAGE_CONTEST_MOVES; ewramSS.unk77 = 1; ewramSS.unk78 = 1; break; } - ewramSS.unkB = ewramSS.unk75; + ewramSS.page = ewramSS.firstPage; SetMainCallback2(sub_809DE44); } -void sub_809D9F0(struct Pokemon *party, u8 partyIndex, u8 partyCount, MainCallback func, u16 e) +void sub_809D9F0(struct Pokemon *party, u8 monIndex, u8 maxMonIndex, MainCallback callback, u16 move) { - ShowPokemonSummaryScreen(party, partyIndex, partyCount, func, 2); - ewramSS.unk7C = e; + ShowPokemonSummaryScreen(party, monIndex, maxMonIndex, callback, PSS_MODE_SELECT_MOVE); + ewramSS.moveToLearn = move; } void sub_809DA1C(void) { - switch (ewramSS.unk8) + switch (ewramSS.mode) { - case 0: - case 5: - ewramSS.unkF = CreateTask(SummaryScreenHandleKeyInput, 0); + case PSS_MODE_NORMAL: + case PSS_MODE_PC_NORMAL: + ewramSS.inputHandlingTaskId = CreateTask(SummaryScreenHandleKeyInput, 0); break; - case 4: - ewramSS.unkF = CreateTask(SummaryScreenHandleKeyInput, 0); + case PSS_MODE_NO_MOVE_ORDER_EDIT: + ewramSS.inputHandlingTaskId = CreateTask(SummaryScreenHandleKeyInput, 0); break; - case 2: - case 3: - ewramSS.unkF = CreateTask(sub_809EB40, 0); + case PSS_MODE_SELECT_MOVE: + case PSS_MODE_UNKNOWN: + ewramSS.inputHandlingTaskId = CreateTask(sub_809EB40, 0); break; - case 1: - case 6: - ewramSS.unkF = CreateTask(sub_809E3FC, 0); + case PSS_MODE_MOVES_ONLY: + case PSS_MODE_PC_MOVES_ONLY: + ewramSS.inputHandlingTaskId = CreateTask(sub_809E3FC, 0); break; } } @@ -363,13 +363,13 @@ bool8 sub_809DA84(void) dest = (void *)VRAM + 0xD140; DmaCopy16(3, src, dest, 256); - ewramSS.unk74 = 0; + ewramSS.loadGfxState = 0; gMain.state++; break; case 10: if (LoadPokemonSummaryScreenGraphics()) { - ewramSS.unk74 = 0; + ewramSS.loadGfxState = 0; gMain.state++; } break; @@ -378,8 +378,8 @@ bool8 sub_809DA84(void) gMain.state++; break; case 12: - sub_809F678(&ewramSS.unk10); - if (!GetMonStatusAndPokerus(&ewramSS.unk10)) + sub_809F678(&ewramSS.loadedMon); + if (!GetMonStatusAndPokerus(&ewramSS.loadedMon)) { sub_80A12D0(0); } @@ -388,23 +388,23 @@ bool8 sub_809DA84(void) sub_80A12D0(10); } - DrawPokerusSurvivorDot(&ewramSS.unk10); + DrawPokerusSurvivorDot(&ewramSS.loadedMon); gMain.state++; break; case 13: sub_80A1950(); - sub_80A1D84(&ewramSS.unk10); + sub_80A1D84(&ewramSS.loadedMon); gMain.state++; break; case 14: - sub_80A1DE8(&ewramSS.unk10); - ewramSS.unk74 = 0; + sub_80A1DE8(&ewramSS.loadedMon); + ewramSS.loadGfxState = 0; gMain.state++; break; case 15: - if ((ewramSS.unkC = sub_809F6B4(&ewramSS.unk10, &ewramSS.unk74)) != 0xFF) + if ((ewramSS.monSpriteId = sub_809F6B4(&ewramSS.loadedMon, &ewramSS.loadGfxState)) != 0xFF) { - ewramSS.unk74 = 0; + ewramSS.loadGfxState = 0; gMain.state++; } break; @@ -414,23 +414,23 @@ bool8 sub_809DA84(void) gMain.state++; break; case 17: - if (ewramSS.unkB < 2) + if (ewramSS.page <= PSS_PAGE_SKILLS) { - gUnknown_083C1580[ewramSS.unkB](); + gUnknown_083C1580[ewramSS.page](); } gMain.state++; break; case 18: - sub_809FAC8(&ewramSS.unk10); + sub_809FAC8(&ewramSS.loadedMon); gMain.state++; break; case 19: - gUnknown_083C1598[ewramSS.unkB](&ewramSS.unk10); + gUnknown_083C1598[ewramSS.page](&ewramSS.loadedMon); gMain.state++; break; case 20: - if (GetMonData(&ewramSS.unk10, MON_DATA_IS_EGG)) + if (GetMonData(&ewramSS.loadedMon, MON_DATA_IS_EGG)) { gUnknown_030041B0 = 256; } @@ -443,7 +443,7 @@ bool8 sub_809DA84(void) break; case 21: sub_809EBC4(); - if (ewramSS.unk79 != 0) + if (ewramSS.selectedMoveIndex != 0) { sub_80A1488(0, 0); sub_80A1654(0, 0); @@ -509,7 +509,7 @@ void sub_809DE64(void) bool8 LoadPokemonSummaryScreenGraphics(void) { - switch (ewramSS.unk74) + switch (ewramSS.loadGfxState) { case 0: LZDecompressVram(gStatusScreen_Gfx, (void *)VRAM + 0); @@ -549,11 +549,11 @@ bool8 LoadPokemonSummaryScreenGraphics(void) break; case 12: LoadCompressedPalette(gMoveTypes_Pal, 464, 96); - ewramSS.unk74 = 0; + ewramSS.loadGfxState = 0; return TRUE; } - ewramSS.unk74++; + ewramSS.loadGfxState++; return FALSE; } @@ -587,13 +587,13 @@ void sub_809E13C(u8 taskId) { if (sub_8055870() != TRUE && !gPaletteFade.active) { - gUnknown_020384F0 = ewramSS.unk9; + gUnknown_020384F0 = ewramSS.monIndex; ResetSpriteData(); FreeAllSpritePalettes(); StopCryAndClearCrySongs(); m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 0x100); - SetMainCallback2(ewramSS.unk4); + SetMainCallback2(ewramSS.callback); DestroyTask(taskId); } } @@ -621,12 +621,12 @@ void SummaryScreenHandleKeyInput(u8 taskId) } else if (gMain.newKeys & A_BUTTON) { - if (ewramSS.unkB > 1) + if (ewramSS.page >= PSS_PAGE_BATTLE_MOVES) { SummaryScreenHandleAButton(taskId); } - if (ewramSS.unkB == 0) + if (ewramSS.page == PSS_PAGE_INFO) { SummaryScreenExit(taskId); } @@ -645,16 +645,16 @@ void sub_809E260(u8 taskId) if (gMain.newKeys & DPAD_UP) { gTasks[taskId].data[0] = 4; - sub_809E8F0(taskId, -1, &ewramSS.unk79); + sub_809E8F0(taskId, -1, &ewramSS.selectedMoveIndex); } else if (gMain.newKeys & DPAD_DOWN) { gTasks[taskId].data[0] = 4; - sub_809E8F0(taskId, 1, &ewramSS.unk79); + sub_809E8F0(taskId, 1, &ewramSS.selectedMoveIndex); } else if ((gMain.newKeys & DPAD_LEFT) || sub_80F9284() == 1) { - if (ewramSS.unkB == 3 && (ewramSS.unk79 != 4 || ewramSS.unk7C != 0)) + if (ewramSS.page == PSS_PAGE_CONTEST_MOVES && (ewramSS.selectedMoveIndex != 4 || ewramSS.moveToLearn != 0)) { MenuZeroFillWindowRect(0, 14, 9, 18); } @@ -663,9 +663,9 @@ void sub_809E260(u8 taskId) } else if ((gMain.newKeys & DPAD_RIGHT) || sub_80F9284() == 2) { - if (ewramSS.unkB != ewramSS.unk76) + if (ewramSS.page != ewramSS.lastPage) { - if (ewramSS.unkB == 2 && (ewramSS.unk79 != 4 || ewramSS.unk7C != 0)) + if (ewramSS.page == PSS_PAGE_BATTLE_MOVES && (ewramSS.selectedMoveIndex != 4 || ewramSS.moveToLearn != 0)) { MenuZeroFillWindowRect(0, 14, 9, 18); } @@ -675,21 +675,21 @@ void sub_809E260(u8 taskId) } else if (gMain.newKeys & A_BUTTON) { - if (sub_809F7D0(taskId) == 1 || ewramSS.unk79 == 4) + if (sub_809F7D0(taskId) == TRUE || ewramSS.selectedMoveIndex == 4) { - ewramSS.unk7A = ewramSS.unk79; - gSpecialVar_0x8005 = ewramSS.unk7A; + ewramSS.switchMoveIndex = ewramSS.selectedMoveIndex; + gSpecialVar_0x8005 = ewramSS.switchMoveIndex; SummaryScreenExit(taskId); } else { PlaySE(32); - sub_809F9D0(taskId, ewramSS.unk79); + sub_809F9D0(taskId, ewramSS.selectedMoveIndex); } } else if (gMain.newKeys & B_BUTTON) { - ewramSS.unk7A = 4; + ewramSS.switchMoveIndex = 4; gSpecialVar_0x8005 = 4; SummaryScreenExit(taskId); } @@ -703,18 +703,18 @@ void sub_809E3FC(u8 taskId) if (gMain.newKeys & DPAD_UP) { gTasks[taskId].data[0] = 4; - sub_809E8F0(taskId, -1, &ewramSS.unk79); + sub_809E8F0(taskId, -1, &ewramSS.selectedMoveIndex); } else if (gMain.newKeys & DPAD_DOWN) { gTasks[taskId].data[0] = 4; - sub_809E8F0(taskId, 1, &ewramSS.unk79); + sub_809E8F0(taskId, 1, &ewramSS.selectedMoveIndex); } else if (gMain.newKeys & A_BUTTON) { - if (ewramSS.unk79 != 4 && ewramSS.unk7B == 0) + if (ewramSS.selectedMoveIndex != 4 && !ewramSS.disableMoveOrderEditing) { - if (!MonKnowsMultipleMoves(&ewramSS.unk10)) + if (!MonKnowsMultipleMoves(&ewramSS.loadedMon)) { PlaySE(32); } @@ -722,7 +722,7 @@ void sub_809E3FC(u8 taskId) { PlaySE(5); - ewramSS.unk7A = ewramSS.unk79; + ewramSS.switchMoveIndex = ewramSS.selectedMoveIndex; sub_80A1B40(1); sub_80A1A30(19); @@ -763,12 +763,12 @@ void sub_809E534(u8 taskId) if (gMain.newKeys & DPAD_UP) { gTasks[taskId].data[0] = 3; - sub_809E8F0(taskId, -1, &ewramSS.unk7A); + sub_809E8F0(taskId, -1, &ewramSS.switchMoveIndex); } else if (gMain.newKeys & DPAD_DOWN) { gTasks[taskId].data[0] = 3; - sub_809E8F0(taskId, 1, &ewramSS.unk7A); + sub_809E8F0(taskId, 1, &ewramSS.switchMoveIndex); } else if (gMain.newKeys & A_BUTTON) { @@ -1053,8 +1053,8 @@ void sub_809E7F0(u8 taskId) { if (sub_809F5F8()) { - ewramSS.unk74 = 0; - sub_80A0428(&ewramSS.unk10, &ewramSS.unk79); + ewramSS.loadGfxState = 0; + sub_80A0428(&ewramSS.loadedMon, &ewramSS.selectedMoveIndex); gTasks[taskId].func = sub_809E3FC; sub_80A2078(taskId); } @@ -1069,9 +1069,9 @@ void sub_809E83C(u8 taskId, s8 b) if (b == 1) { - if (ewramSS.unk79 != ewramSS.unk7A) + if (ewramSS.selectedMoveIndex != ewramSS.switchMoveIndex) { - if (ewramSS.unkE == 0) + if (ewramSS.usingPC == FALSE) { sub_809E5C4(); } @@ -1080,9 +1080,9 @@ void sub_809E83C(u8 taskId, s8 b) sub_809E6D8(); } - ewramSS.unk79 = ewramSS.unk7A; - sub_809F678(&ewramSS.unk10); - ewramSS.unk74 = 1; + ewramSS.selectedMoveIndex = ewramSS.switchMoveIndex; + sub_809F678(&ewramSS.loadedMon); + ewramSS.loadGfxState = 1; gTasks[taskId].func = sub_809E7F0; return; @@ -1090,7 +1090,7 @@ void sub_809E83C(u8 taskId, s8 b) } else { - sub_80A0428(&ewramSS.unk10, &ewramSS.unk79); + sub_80A0428(&ewramSS.loadedMon, &ewramSS.selectedMoveIndex); } gTasks[taskId].func = sub_809E3FC; @@ -1281,18 +1281,18 @@ void SummaryScreenHandleAButton(u8 taskId) { PlaySE(5); - ewramSS.unk79 = 0; + ewramSS.selectedMoveIndex = 0; sub_80A1488(2, 0); sub_80A1654(2, 0); - if (ewramSS.unk7B == 0) + if (!ewramSS.disableMoveOrderEditing) { - ewramSS.unk7F = 5; + ewramSS.headerActionTextId = 5; PrintSummaryWindowHeaderText(); } sub_80A16CC(0); - sub_80A029C(&ewramSS.unk10); + sub_80A029C(&ewramSS.loadedMon); sub_80A1A30(9); gTasks[taskId].func = sub_809E3FC; @@ -1301,7 +1301,7 @@ void SummaryScreenHandleAButton(u8 taskId) void sub_809EAC8(u8 taskId) { - if (ewramSS.unk79 != 4) + if (ewramSS.selectedMoveIndex != 4) { sub_80A1488(-2, 0); sub_80A1654(-2, 0); @@ -1313,7 +1313,7 @@ void sub_809EAC8(u8 taskId) MenuZeroFillWindowRect(15, 12, 28, 13); MenuZeroFillWindowRect(11, 15, 28, 18); - ewramSS.unk7F = 6; + ewramSS.headerActionTextId = 6; PrintSummaryWindowHeaderText(); gTasks[taskId].func = SummaryScreenHandleKeyInput; @@ -1329,15 +1329,15 @@ void sub_809EB40(u8 taskId) gTasks[taskId].func = sub_809E260; break; case 0: - ewramSS.unk79 = 0; - if (ewramSS.unk7C != 0) + ewramSS.selectedMoveIndex = 0; + if (ewramSS.moveToLearn != 0) { sub_80A1488(10, 0); - sub_80A1654(10, ewramSS.unk79); + sub_80A1654(10, ewramSS.selectedMoveIndex); } sub_80A16CC(0); - sub_80A029C(&ewramSS.unk10); + sub_80A029C(&ewramSS.loadedMon); // fall through default: gTasks[taskId].data[0]++; @@ -1347,18 +1347,18 @@ void sub_809EB40(u8 taskId) void sub_809EBC4(void) { - if (ewramSS.unkB != 0) + if (ewramSS.page != PSS_PAGE_INFO) { DrawSummaryScreenNavigationDots(); gUnknown_030042C0 = 0x100; - if (ewramSS.unkB == 1) + if (ewramSS.page == PSS_PAGE_SKILLS) REG_BG1CNT = (REG_BG1CNT & 0xE0FF) + 0x800; - if (ewramSS.unkB == 2) + if (ewramSS.page == PSS_PAGE_BATTLE_MOVES) REG_BG1CNT = (REG_BG1CNT & 0xE0FF) + 0xA00; - if (ewramSS.unkB == 3) + if (ewramSS.page == PSS_PAGE_CONTEST_MOVES) REG_BG1CNT = (REG_BG1CNT & 0xE0FF) + 0xC00; } } @@ -1371,36 +1371,36 @@ void sub_809EC38(u8 taskId) switch (taskData[0]) { case 0: - if (ewramSS.unk80 == 0) + if (ewramSS.bgToggle == 0) { - if (ewramSS.unkB != 0) + if (ewramSS.page != PSS_PAGE_INFO) { gUnknown_03004288 = 0x100; } - if (ewramSS.unkB == 1) + if (ewramSS.page == PSS_PAGE_SKILLS) { REG_BG2CNT = (REG_BG2CNT & 0xE0FF) + 0x800; } - if (ewramSS.unkB == 2) + if (ewramSS.page == PSS_PAGE_BATTLE_MOVES) { REG_BG2CNT = (REG_BG2CNT & 0xE0FF) + 0xA00; } } else { - if (ewramSS.unkB != 0) + if (ewramSS.page != PSS_PAGE_INFO) { gUnknown_030042C0 = 0x100; } - if (ewramSS.unkB == 1) + if (ewramSS.page == PSS_PAGE_SKILLS) { REG_BG1CNT = (REG_BG1CNT & 0xE0FF) + 0x800; } - if (ewramSS.unkB == 2) + if (ewramSS.page == PSS_PAGE_BATTLE_MOVES) { REG_BG1CNT = (REG_BG1CNT & 0xE0FF) + 0xA00; } @@ -1409,7 +1409,7 @@ void sub_809EC38(u8 taskId) taskData[0]++; break; case 1: - if (ewramSS.unk80 == 0) + if (ewramSS.bgToggle == 0) { int var2 = gUnknown_030042C0 - 0x20; gUnknown_030042C0 = var2; @@ -1433,28 +1433,28 @@ void sub_809EC38(u8 taskId) } break; case 2: - ewramSS.unk7E = ewramSS.unkB + 1; - minus2 = ewramSS.unk8 - 2; + ewramSS.headerTextId = ewramSS.page + 1; + minus2 = ewramSS.mode - 2; if (minus2 < 2) { - ewramSS.unk7F = 0; - sub_80A029C(&ewramSS.unk10); - sub_80A0428(&ewramSS.unk10, &ewramSS.unk79); - sub_80A00F4(ewramSS.unk79); + ewramSS.headerActionTextId = 0; + sub_80A029C(&ewramSS.loadedMon); + sub_80A0428(&ewramSS.loadedMon, &ewramSS.selectedMoveIndex); + sub_80A00F4(ewramSS.selectedMoveIndex); } else { - if (ewramSS.unkB > 1 && (ewramSS.unk7B == 0 || ewramSS.unk8 == 4)) + if (ewramSS.page >= PSS_PAGE_BATTLE_MOVES && (!ewramSS.disableMoveOrderEditing || ewramSS.mode == PSS_MODE_NO_MOVE_ORDER_EDIT)) { - ewramSS.unk7F = 6; + ewramSS.headerActionTextId = 6; } - else if (ewramSS.unkB == 0) + else if (ewramSS.page == PSS_PAGE_INFO) { - ewramSS.unk7F = 7; + ewramSS.headerActionTextId = 7; } else { - ewramSS.unk7F = 0; + ewramSS.headerActionTextId = 0; } } @@ -1466,8 +1466,8 @@ void sub_809EC38(u8 taskId) taskData[0]++; break; case 4: - gUnknown_083C1598[ewramSS.unkB](&ewramSS.unk10); - ewramSS.unk80 ^= 1; + gUnknown_083C1598[ewramSS.page](&ewramSS.loadedMon); + ewramSS.bgToggle ^= 1; taskData[0]++; break; case 5: @@ -1488,10 +1488,10 @@ void sub_809EE74(u8 taskId) switch (taskData[0]) { case 0: - var1 = ewramSS.unk80; + var1 = ewramSS.bgToggle; if (var1 == 0) { - gUnknown_03004288 = ewramSS.unk80; + gUnknown_03004288 = ewramSS.bgToggle; taskData[0]++; } else @@ -1501,28 +1501,28 @@ void sub_809EE74(u8 taskId) } break; case 1: - if (ewramSS.unk80 == 0) + if (ewramSS.bgToggle == 0) { - if (ewramSS.unkB == 1) + if (ewramSS.page == PSS_PAGE_SKILLS) REG_BG2CNT = (REG_BG2CNT & 0xE0FC) + 0x801; - if (ewramSS.unkB == 2) + if (ewramSS.page == PSS_PAGE_BATTLE_MOVES) REG_BG2CNT = (REG_BG2CNT & 0xE0FC) + 0xA01; - if (ewramSS.unkB == 3) + if (ewramSS.page == PSS_PAGE_CONTEST_MOVES) REG_BG2CNT = (REG_BG2CNT & 0xE0FC) + 0xC01; REG_BG1CNT = (REG_BG1CNT & 0xFFFC) + 2; } else { - if (ewramSS.unkB == 1) + if (ewramSS.page == PSS_PAGE_SKILLS) REG_BG1CNT = (REG_BG1CNT & 0xE0FC) + 0x801; - if (ewramSS.unkB == 2) + if (ewramSS.page == PSS_PAGE_BATTLE_MOVES) REG_BG1CNT = (REG_BG1CNT & 0xE0FC) + 0xA01; - if (ewramSS.unkB == 3) + if (ewramSS.page == PSS_PAGE_CONTEST_MOVES) REG_BG1CNT = (REG_BG1CNT & 0xE0FC) + 0xC01; REG_BG2CNT = (REG_BG2CNT & 0xFFFC) + 2; @@ -1531,7 +1531,7 @@ void sub_809EE74(u8 taskId) taskData[0]++; break; case 2: - if (ewramSS.unk80 == 0) + if (ewramSS.bgToggle == 0) { int var2 = gUnknown_03004288 + 0x20; gUnknown_03004288 = var2; @@ -1551,28 +1551,28 @@ void sub_809EE74(u8 taskId) } break; case 3: - ewramSS.unk7E = ewramSS.unkB + 1; - minus2 = ewramSS.unk8 - 2; + ewramSS.headerTextId = ewramSS.page + 1; + minus2 = ewramSS.mode - 2; if (minus2 < 2) { - ewramSS.unk7F = 0; - sub_80A029C(&ewramSS.unk10); - sub_80A0428(&ewramSS.unk10, &ewramSS.unk79); - sub_80A00F4(ewramSS.unk79); + ewramSS.headerActionTextId = 0; + sub_80A029C(&ewramSS.loadedMon); + sub_80A0428(&ewramSS.loadedMon, &ewramSS.selectedMoveIndex); + sub_80A00F4(ewramSS.selectedMoveIndex); } else { - if (ewramSS.unkB > 1 && (ewramSS.unk7B == 0 || ewramSS.unk8 == 4)) + if (ewramSS.page >= PSS_PAGE_BATTLE_MOVES && (!ewramSS.disableMoveOrderEditing || ewramSS.mode == PSS_MODE_NO_MOVE_ORDER_EDIT)) { - ewramSS.unk7F = 6; + ewramSS.headerActionTextId = 6; } - else if (ewramSS.unkB == 0) + else if (ewramSS.page == PSS_PAGE_INFO) { - ewramSS.unk7F = 7; + ewramSS.headerActionTextId = 7; } else { - ewramSS.unk7F = 0; + ewramSS.headerActionTextId = 0; } } @@ -1584,8 +1584,8 @@ void sub_809EE74(u8 taskId) taskData[0]++; break; case 5: - gUnknown_083C1598[ewramSS.unkB](&ewramSS.unk10); - ewramSS.unk80 ^= 1; + gUnknown_083C1598[ewramSS.page](&ewramSS.loadedMon); + ewramSS.bgToggle ^= 1; taskData[0]++; break; case 6: @@ -1599,7 +1599,7 @@ void sub_809EE74(u8 taskId) void sub_809F0D0(u8 taskId, s8 direction) { - ewramSS.unkB += direction; + ewramSS.page += direction; gUnknown_03005CF0 = gTasks[taskId].func; sub_809FBE4(); gTasks[taskId].data[0] = 0; @@ -1617,10 +1617,10 @@ void sub_809F0D0(u8 taskId, s8 direction) void SummaryScreenHandleLeftRightInput(u8 taskId, s8 direction) { - if (!GetMonData(&ewramSS.unk10, MON_DATA_IS_EGG)) + if (!GetMonData(&ewramSS.loadedMon, MON_DATA_IS_EGG)) { - if (direction == -1 && ewramSS.unkB == ewramSS.unk75) return; - if (direction == 1 && ewramSS.unkB == ewramSS.unk76) return; + if (direction == -1 && ewramSS.page == ewramSS.firstPage) return; + if (direction == 1 && ewramSS.page == ewramSS.lastPage) return; if (FindTaskIdByFunc(sub_80A1334) == 0xFF && FindTaskIdByFunc(sub_80A1500) == 0xFF) { @@ -1636,9 +1636,9 @@ void SummaryScreenHandleUpDownInput(u8 taskId, s8 direction) s8 var3; u8 var1 = direction; - if (ewramSS.unkE == 1) + if (ewramSS.usingPC == TRUE) { - if (ewramSS.unkB != 0) + if (ewramSS.page != PSS_PAGE_INFO) { var1 = (direction == 1) ? 0 : 1; } @@ -1647,7 +1647,7 @@ void SummaryScreenHandleUpDownInput(u8 taskId, s8 direction) var1 = (direction == 1) ? 2 : 3; } - var3 = StorageSystemGetNextMonIndex(ewramSS.unk0.boxMons, ewramSS.unk9, ewramSS.unkA, var1); + var3 = StorageSystemGetNextMonIndex(ewramSS.monList.boxMons, ewramSS.monIndex, ewramSS.maxMonIndex, var1); } else { @@ -1664,12 +1664,12 @@ void SummaryScreenHandleUpDownInput(u8 taskId, s8 direction) if (var3 != -1) { PlaySE(5); - if (GetMonStatusAndPokerus(&ewramSS.unk10)) + if (GetMonStatusAndPokerus(&ewramSS.loadedMon)) { sub_80A12D0(-2); } - ewramSS.unk9 = var3; + ewramSS.monIndex = var3; ewramSS.unk84 = gTasks[taskId].func; gTasks[taskId].func = sub_809F43C; } @@ -1782,16 +1782,16 @@ _0809F280: .4byte sub_809F43C\n\ // s8 sub_809F284(s8 a) // { -// struct Pokemon *mons = ewramSS.unk0.partyMons; +// struct Pokemon *mons = ewramSS.monList.partyMons; // u8 var1 = 0; -// if (ewramSS.unkB == 0) +// if (ewramSS.page == PSS_PAGE_INFO) // { -// if ((s8)a == -1 || ewramSS.unk9 != 0) +// if ((s8)a == -1 || ewramSS.monIndex != 0) // { -// if ((s8)a == 1 || ewramSS.unk9 < ewramSS.unkA) +// if ((s8)a == 1 || ewramSS.monIndex < ewramSS.maxMonIndex) // { -// return ewramSS.unk9 + a; +// return ewramSS.monIndex + a; // } // } @@ -1803,18 +1803,18 @@ _0809F280: .4byte sub_809F43C\n\ // { // var1 += a; -// if (ewramSS.unk9 + var1 >= 0 || ewramSS.unk9 + var1 > ewramSS.unkA) +// if (ewramSS.monIndex + var1 >= 0 || ewramSS.monIndex + var1 > ewramSS.maxMonIndex) // { // return -1; // } -// if (!GetMonData(&mons[ewramSS.unk9 + var1], MON_DATA_IS_EGG)) +// if (!GetMonData(&mons[ewramSS.monIndex + var1], MON_DATA_IS_EGG)) // { // break; // } // } -// return ewramSS.unk9 + var1; +// return ewramSS.monIndex + var1; // } // } @@ -1904,7 +1904,7 @@ bool8 sub_809F310(struct Pokemon *mon) { if (GetMonData(mon, MON_DATA_SPECIES)) { - if (ewramSS.unkB != 0 || !GetMonData(mon, MON_DATA_IS_EGG)) + if (ewramSS.page != PSS_PAGE_INFO || !GetMonData(mon, MON_DATA_IS_EGG)) { return TRUE; } @@ -1955,7 +1955,7 @@ s8 sub_809F3CC(s8 a) for (i = 0; i < 6; i++) { - if (gUnknown_083C15A8[i] == ewramSS.unk9) + if (gUnknown_083C15A8[i] == ewramSS.monIndex) { var1 = i; break; @@ -2054,33 +2054,33 @@ void sub_809F43C(u8 taskId) gMain.state++; break; case 1: - DestroySpriteAndFreeResources(&gSprites[ewramSS.unkC]); + DestroySpriteAndFreeResources(&gSprites[ewramSS.monSpriteId]); gMain.state++; break; case 2: - DestroySpriteAndFreeResources(&gSprites[ewramSS.unkD]); + DestroySpriteAndFreeResources(&gSprites[ewramSS.ballSpriteId]); gMain.state++; break; case 3: - ewramSS.unk74 = 0; - ewramSS.unk79 = 0; + ewramSS.loadGfxState = 0; + ewramSS.selectedMoveIndex = 0; gMain.state++; break; case 4: - sub_809F678(&ewramSS.unk10); - if (GetMonStatusAndPokerus(&ewramSS.unk10)) + sub_809F678(&ewramSS.loadedMon); + if (GetMonStatusAndPokerus(&ewramSS.loadedMon)) { sub_80A12D0(2); } - DrawPokerusSurvivorDot(&ewramSS.unk10); + DrawPokerusSurvivorDot(&ewramSS.loadedMon); gMain.state++; break; case 5: - if ((ewramSS.unkC = sub_809F6B4(&ewramSS.unk10, &ewramSS.unk74)) != 0xFF) + if ((ewramSS.monSpriteId = sub_809F6B4(&ewramSS.loadedMon, &ewramSS.loadGfxState)) != 0xFF) { - ewramSS.unk74 = 0; - if (GetMonData(&ewramSS.unk10, MON_DATA_IS_EGG)) + ewramSS.loadGfxState = 0; + if (GetMonData(&ewramSS.loadedMon, MON_DATA_IS_EGG)) { gUnknown_030041B0 = 256; } @@ -2093,17 +2093,17 @@ void sub_809F43C(u8 taskId) } break; case 6: - sub_80A1DCC(&ewramSS.unk10); + sub_80A1DCC(&ewramSS.loadedMon); gMain.state++; break; case 7: - sub_80A1DE8(&ewramSS.unk10); + sub_80A1DE8(&ewramSS.loadedMon); gMain.state++; break; case 8: if (sub_809F5F8()) { - ewramSS.unk74 = 0; + ewramSS.loadGfxState = 0; gMain.state++; } break; @@ -2119,15 +2119,15 @@ void sub_809F43C(u8 taskId) bool8 sub_809F5F8(void) { - if (ewramSS.unk74 == 0) + if (ewramSS.loadGfxState == 0) { - sub_809FAC8(&ewramSS.unk10); - ewramSS.unk74++; + sub_809FAC8(&ewramSS.loadedMon); + ewramSS.loadGfxState++; return FALSE; } else { - gUnknown_083C1588[ewramSS.unkB](&ewramSS.unk10); + gUnknown_083C1588[ewramSS.page](&ewramSS.loadedMon); return TRUE; } } @@ -2152,15 +2152,15 @@ void sub_809F664(struct Pokemon *mon) void sub_809F678(struct Pokemon *mon) { - if (ewramSS.unkE == 0) + if (ewramSS.usingPC == FALSE) { - struct Pokemon *mons = ewramSS.unk0.partyMons; - *mon = mons[ewramSS.unk9]; + struct Pokemon *mons = ewramSS.monList.partyMons; + *mon = mons[ewramSS.monIndex]; } else { - struct BoxPokemon *mons = ewramSS.unk0.boxMons; - sub_803B4B4(&mons[ewramSS.unk9], mon); + struct BoxPokemon *mons = ewramSS.monList.boxMons; + sub_803B4B4(&mons[ewramSS.monIndex], mon); } } @@ -2238,8 +2238,8 @@ bool8 sub_809F7D0(u8 taskId) u16 move; sub_809F678(&mon); - move = GetMonMove(&mon, ewramSS.unk79); - if (IsHMMove(move) == TRUE && ewramSS.unk8 != 3) + move = GetMonMove(&mon, ewramSS.selectedMoveIndex); + if (IsHMMove(move) == TRUE && ewramSS.mode != PSS_MODE_UNKNOWN) { return FALSE; } @@ -2247,7 +2247,7 @@ bool8 sub_809F7D0(u8 taskId) return TRUE; } -#ifdef NONMATCHING // The two "ewramSS.unk79 = taskData[15];" lines have small register differences. +#ifdef NONMATCHING // The two "ewramSS.selectedMoveIndex = taskData[15];" lines have small register differences. void sub_809F814(u8 taskId) { u16 var1; @@ -2264,7 +2264,7 @@ void sub_809F814(u8 taskId) gTasks[taskId].func = sub_809E260; taskData[0] = 4; taskData[13] = 1; - ewramSS.unk79 = taskData[15]; + ewramSS.selectedMoveIndex = taskData[15]; sub_809E8F0(taskId, -1, NULL); } else if (gMain.newKeys & DPAD_DOWN) @@ -2272,14 +2272,14 @@ void sub_809F814(u8 taskId) gTasks[taskId].func = sub_809E260; taskData[0] = 4; taskData[13] = 1; - ewramSS.unk79 = taskData[15]; + ewramSS.selectedMoveIndex = taskData[15]; sub_809E8F0(taskId, 1, NULL); } else if ((gMain.newKeys & DPAD_LEFT) || sub_80F9284() == 1) { - if (ewramSS.unkB != 2) + if (ewramSS.page != PSS_PAGE_BATTLE_MOVES) { - if (ewramSS.unkB == 3 && (ewramSS.unk79 != 4 || ewramSS.unk7C != 0)) + if (ewramSS.page == PSS_PAGE_CONTEST_MOVES && (ewramSS.selectedMoveIndex != 4 || ewramSS.moveToLearn != 0)) { MenuZeroFillWindowRect(0, 14, 9, 18); } @@ -2293,9 +2293,9 @@ void sub_809F814(u8 taskId) } else if ((gMain.newKeys & DPAD_RIGHT) || sub_80F9284() == 2) { - if (ewramSS.unkB != ewramSS.unk76) + if (ewramSS.page != ewramSS.lastPage) { - if (ewramSS.unkB == 2 && (ewramSS.unk79 != 4 || ewramSS.unk7C != 0)) + if (ewramSS.page == PSS_PAGE_BATTLE_MOVES && (ewramSS.selectedMoveIndex != 4 || ewramSS.moveToLearn != 0)) { MenuZeroFillWindowRect(0, 14, 9, 18); } @@ -2554,7 +2554,7 @@ void sub_809F9D0(u8 taskId, u8 b) u8 sub_809FA30(void) { - return ewramSS.unk7A; + return ewramSS.switchMoveIndex; } // void GetStringCenterAlignXOffsetWithLetterSpacing(u8 a, u8 b, u8 c, u8 d) @@ -2869,9 +2869,9 @@ void sub_80A00A4(void) void sub_80A00F4(u8 a) { - if (ewramSS.unk7C != 0 || a != 4) + if (ewramSS.moveToLearn != 0 || a != 4) { - if (ewramSS.unkB == 2) + if (ewramSS.page == PSS_PAGE_BATTLE_MOVES) { sub_80A1FF8(gOtherText_Power2, 13, 1, 15); sub_80A1FF8(gOtherText_Accuracy2, 13, 1, 17); @@ -2906,7 +2906,7 @@ void sub_80A015C(struct Pokemon *mon) } else { - if (ewramSS.unkB == 2) + if (ewramSS.page == PSS_PAGE_BATTLE_MOVES) { sub_80A198C(gBattleMoves[move].type, 87, ((2 * i) + 4) * 8, i); } @@ -2936,20 +2936,20 @@ void sub_80A029C(struct Pokemon *mon) u16 move; u8 pp; - if (ewramSS.unk7C == 0) + if (ewramSS.moveToLearn == 0) { sub_80A1FF8(gOtherText_CancelNoTerminator, 13, 15, 12); return; } - move = ewramSS.unk7C; + move = ewramSS.moveToLearn; - if (ewramSS.unkB == 2) + if (ewramSS.page == PSS_PAGE_BATTLE_MOVES) sub_80A198C(gBattleMoves[move].type, 87, 96, 4); else sub_80A198C(gContestMoves[move].contestCategory + 18, 87, 96, 4); - if (ewramSS.unkB == 2) + if (ewramSS.page == PSS_PAGE_BATTLE_MOVES) sub_80A1FF8(gMoveNames[move], 10, 15, 12); else sub_80A1FF8(gMoveNames[move], 9, 15, 12); @@ -2984,9 +2984,9 @@ u16 sub_80A03BC(struct Pokemon *mon, u8 selectedMoveIndex) } else { - if (ewramSS.unk7C != 0) + if (ewramSS.moveToLearn != 0) { - move = ewramSS.unk7C; + move = ewramSS.moveToLearn; } else { @@ -3001,7 +3001,7 @@ void sub_80A03F0(struct Pokemon *mon, u8 *selectedMoveIndex) { u16 move = sub_80A03BC(mon, *selectedMoveIndex); - if (ewramSS.unkB == 2) + if (ewramSS.page == PSS_PAGE_BATTLE_MOVES) { sub_80A04CC(move); sub_80A057C(0xFFFF); @@ -3017,7 +3017,7 @@ void sub_80A0428(struct Pokemon *mon, u8 *selectedMoveIndex) u16 move = sub_80A03BC(mon, *selectedMoveIndex); MenuZeroFillWindowRect(11, 15, 28, 18); - if (ewramSS.unkB == 2) + if (ewramSS.page == PSS_PAGE_BATTLE_MOVES) { sub_80A046C(move); } @@ -3546,7 +3546,7 @@ void PrintHeldItemName(u16 itemId, u8 left, u8 top) if (itemId == ITEM_ENIGMA_BERRY && sub_80F9344() == TRUE && IsLinkDoubleBattle() == TRUE - && (ewramSS.unk9 == 1 || ewramSS.unk9 == 4 || ewramSS.unk9 == 5)) + && (ewramSS.monIndex == 1 || ewramSS.monIndex == 4 || ewramSS.monIndex == 5)) { StringCopy(gStringVar1, ItemId_GetItem(itemId)->name); } @@ -3643,7 +3643,7 @@ void PrintSummaryWindowHeaderText(void) buffer += 3; buffer = sub_80A1E58(buffer, 13); - buffer = StringCopy(buffer, gUnknown_083C1068[ewramSS.unk7E]); + buffer = StringCopy(buffer, gUnknown_083C1068[ewramSS.headerTextId]); buffer[0] = EXT_CTRL_CODE_BEGIN; buffer[1] = 0x13; @@ -3652,7 +3652,7 @@ void PrintSummaryWindowHeaderText(void) MenuPrint(gStringVar1, 0, 0); - if (ewramSS.unk7F != 0) + if (ewramSS.headerActionTextId != 0) { GetStringCenterAlignXOffset(5, 23, 0); GetStringCenterAlignXOffset(6, 24, 0); @@ -3664,7 +3664,7 @@ void PrintSummaryWindowHeaderText(void) buffer = gStringVar1; buffer = sub_80A1E58(buffer, 13); - buffer = StringCopy(buffer, gUnknown_083C1068[ewramSS.unk7F]); + buffer = StringCopy(buffer, gUnknown_083C1068[ewramSS.headerActionTextId]); buffer[0] = EXT_CTRL_CODE_BEGIN; buffer[1] = 0x13; @@ -3700,7 +3700,7 @@ void DrawSummaryScreenNavigationDots(void) void *dest; u16 arr[8]; u8 i = 0; - struct SummaryScreenStruct *SS = (struct SummaryScreenStruct *)(gSharedMem + 0x18000); + struct PokemonSummaryScreenStruct *SS = (struct PokemonSummaryScreenStruct *)(gSharedMem + 0x18000); u16 var1 = 0x4040; u16 var2 = 0x404A; @@ -4331,12 +4331,12 @@ void sub_80A12D0(s8 a) // if (gTasks[taskId].data[0] == 0 || gTasks[taskId].data[1] < 0) // { -// if (ewramSS.unkB == 2) +// if (ewramSS.page == PSS_PAGE_BATTLE_MOVES) // { // MenuZeroFillWindowRect(0, 14, 9, 18); -// sub_80A0958(ewramSS.unk10); +// sub_80A0958(ewramSS.loadedMon); -// if (GetMonStatusAndPokerus(ewramSS.unk10)) +// if (GetMonStatusAndPokerus(ewramSS.loadedMon)) // { // sub_80A1FF8(gOtherText_Status, 13, 1, 18); // } @@ -4347,12 +4347,12 @@ void sub_80A12D0(s8 a) // if (gTasks[taskId].data[1] > 9) // { -// if (ewramSS.unkB == 2) +// if (ewramSS.page == PSS_PAGE_BATTLE_MOVES) // { // sub_80A00F4(gTasks[taskId].data[3]); // } -// sub_80A0428(ewramSS.unk10, &gTasks[taskId].data[3]); +// sub_80A0428(ewramSS.loadedMon, &gTasks[taskId].data[3]); // DestroyTask(taskId); // } // } @@ -4534,7 +4534,7 @@ void sub_80A1488(s8 a, u8 b) { u8 taskId; - if (ewramSS.unkB == 2) + if (ewramSS.page == PSS_PAGE_BATTLE_MOVES) { MenuZeroFillWindowRect(0, 14, 9, 19); } @@ -4736,7 +4736,7 @@ void sub_80A1654(s8 a, u8 b) { u8 taskId; - if (ewramSS.unkB == 3) + if (ewramSS.page == PSS_PAGE_CONTEST_MOVES) { MenuZeroFillWindowRect(0, 14, 9, 19); } @@ -5011,7 +5011,7 @@ void sub_80A1888(struct Sprite *sprite) { sprite->callback = SpriteCallbackDummy; - if (!GetMonData(&ewramSS.unk10, MON_DATA_IS_EGG)) + if (!GetMonData(&ewramSS.loadedMon, MON_DATA_IS_EGG)) { PlayCry1(sprite->data0, 0); } @@ -5074,7 +5074,7 @@ void sub_80A1A30(u8 a) s16 x; u8 subPriority = 0; - if (ewramSS.unkB > 1) + if (ewramSS.page >= PSS_PAGE_BATTLE_MOVES) { if (a == 9) { @@ -5224,11 +5224,11 @@ void sub_80A1BC0(struct Sprite *sprite) if (sprite->data0 == 9) { - sprite->pos2.y = ewramSS.unk79 * 16; + sprite->pos2.y = ewramSS.selectedMoveIndex * 16; } else { - sprite->pos2.y = ewramSS.unk7A * 16; + sprite->pos2.y = ewramSS.switchMoveIndex * 16; } } @@ -5442,9 +5442,9 @@ void sub_80A1DE8(struct Pokemon *mon) u8 ball = ball_number_to_ball_processing_index(GetMonData(mon, MON_DATA_POKEBALL)); sub_80478DC(ball); - ewramSS.unkD = CreateSprite(&gBallSpriteTemplates[ball], 6, 136, 0); - gSprites[ewramSS.unkD].callback = SpriteCallbackDummy; - gSprites[ewramSS.unkD].oam.priority = 3; + ewramSS.ballSpriteId = CreateSprite(&gBallSpriteTemplates[ball], 6, 136, 0); + gSprites[ewramSS.ballSpriteId].callback = SpriteCallbackDummy; + gSprites[ewramSS.ballSpriteId].oam.priority = 3; } u8 *sub_80A1E58(u8 *text, u8 id) -- cgit v1.2.3 From 85ab103fa6940af7355117f2197d67eb1ce10dc4 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Sat, 25 Nov 2017 19:33:32 -0800 Subject: Fix some non-matchings and organize header --- src/pokemon/pokemon_summary_screen.c | 330 ++++++++++------------------------- 1 file changed, 89 insertions(+), 241 deletions(-) (limited to 'src') diff --git a/src/pokemon/pokemon_summary_screen.c b/src/pokemon/pokemon_summary_screen.c index b7d9e31cb..9f8021eb5 100644 --- a/src/pokemon/pokemon_summary_screen.c +++ b/src/pokemon/pokemon_summary_screen.c @@ -39,7 +39,7 @@ static void sub_80A1D84(struct Pokemon *); static void sub_80A18C4(void); static bool8 LoadPokemonSummaryScreenGraphics(void); static bool8 MonKnowsMultipleMoves(struct Pokemon *); -extern void PrintSummaryWindowHeaderText(void); +static void PrintSummaryWindowHeaderText(void); static void sub_80A1DCC(struct Pokemon *); static void sub_809FE80(void); static void sub_80A00A4(void); @@ -59,81 +59,63 @@ static void sub_809E13C(u8 taskId); static void sub_80A1950(void); static void sub_809DA1C(void); static void sub_809D844(void); - -extern void sub_809D85C(void); -extern void sub_809DE64(void); -extern bool8 sub_809DA84(void); -extern void SummaryScreenHandleAButton(u8); -extern void SummaryScreenHandleUpDownInput(u8, s8); -extern bool8 sub_809F7D0(u8); -extern void sub_809F9D0(u8, u8); -extern void sub_809EAC8(u8); -extern void sub_809E534(u8); -extern void sub_809E83C(u8, s8); -extern void sub_809E7F0(u8); -extern void sub_809E6D8(void); -extern void sub_809E5C4(void); -extern void sub_80A1B40(u8); -extern void sub_80A2078(int); -extern void sub_809E3FC(u8); -extern void SummaryScreenHandleKeyInput(u8); -extern void sub_80A1B1C(u8); -extern void sub_80A16CC(u8); -extern void sub_80A1A30(u8); -extern void DrawSummaryScreenNavigationDots(void); -extern void sub_80A00F4(u8); -extern void sub_80A029C(struct Pokemon *); -extern void sub_809EE74(u8); -extern void sub_809EC38(u8); -extern void sub_809FBE4(void); -extern void sub_809F0D0(u8, s8); -extern void sub_80A1500(u8); -extern void sub_80A1334(u8); -extern u8 StorageSystemGetNextMonIndex(struct BoxPokemon *, u8, u8, u8); +static void sub_809D85C(void); +static void sub_809DE64(void); +static void SummaryScreenHandleAButton(u8); +static void SummaryScreenHandleUpDownInput(u8, s8); +static bool8 sub_809F7D0(u8); +static void sub_809F9D0(u8, u8); +static void sub_809EAC8(u8); +static void sub_809E534(u8); +static void sub_809E83C(u8, s8); +static void sub_809E5C4(void); +static void sub_80A1B40(u8); +static void sub_80A2078(int); +static void sub_809E3FC(u8); +static void SummaryScreenHandleKeyInput(u8); +static void sub_80A1B1C(u8); +static void sub_80A16CC(u8); +static void sub_80A1A30(u8); +static void DrawSummaryScreenNavigationDots(void); +static void sub_80A00F4(u8); +static void sub_80A029C(struct Pokemon *); +static void sub_809FBE4(void); +static void sub_80A1500(u8); +static void sub_80A1334(u8); extern void sub_809F43C(u8); extern s8 sub_809F284(s8); extern s8 sub_809F3CC(s8); -extern bool8 sub_809F310(struct Pokemon *); -extern s8 sub_809F344(u8); -extern s8 sub_809F388(u8); -extern bool8 sub_809F5F8(void); -extern void sub_80A1DE8(struct Pokemon *); -extern u8 sub_809F6B4(struct Pokemon *, u8 *); -extern void DrawPokerusSurvivorDot(struct Pokemon *); -extern void sub_80A12D0(s8); -extern void sub_809FAC8(struct Pokemon *); -extern void SummaryScreenHandleLeftRightInput(u8, s8); -extern void sub_809E8F0(u8, s8, u8*); -extern void sub_809E260(u8); -extern void sub_809F814(u8); -extern void sub_80A1654(s8, u8); -extern void sub_80A1488(s8, u8); -extern void GetStringCenterAlignXOffsetWithLetterSpacing(u8, u8, u8, u8); -extern bool8 sub_809FA94(struct Pokemon *); +static bool8 sub_809F5F8(void); +static void sub_80A1DE8(struct Pokemon *); +static u8 sub_809F6B4(struct Pokemon *, u8 *); +static void DrawPokerusSurvivorDot(struct Pokemon *); +static void sub_80A12D0(s8); +static void sub_809FAC8(struct Pokemon *); +static void SummaryScreenHandleLeftRightInput(u8, s8); +static void sub_809E8F0(); +static void sub_80A1654(s8, u8); +static void sub_80A1488(s8, u8); static void sub_809FC34(struct Pokemon *); -extern void sub_809FC0C(void); static void sub_809FF64(struct Pokemon *); -extern void sub_809FEB8(void); -extern void sub_80A1918(u8, u8); -extern void sub_80A198C(u8, u8, u8, u8); -extern u16 GetMonMove(struct Pokemon *, u8); -extern void sub_80A04CC(u16); -extern void sub_80A057C(u16); -extern void sub_80A0498(u16); -extern void sub_80A046C(u16); -extern void sub_80A03F0(struct Pokemon *, u8 *); -extern u16 sub_80A03BC(struct Pokemon *, u8); -extern void sub_80A20A8(u8); -extern u8 ball_number_to_ball_processing_index(u16); -extern void sub_809F678(struct Pokemon *); -extern void sub_80A1BC0(struct Sprite *sprite); -extern void sub_80A1888(struct Sprite *); -extern void sub_80A0428(struct Pokemon *, u8 *); -extern void sub_80A18E4(u8); -extern void GetStringCenterAlignXOffset(u8, u8, u8); -extern u8 *sub_80A1E58(u8 *, u8); +static void sub_80A1918(u8, u8); +static void sub_80A198C(u8, u8, u8, u8); +static u16 GetMonMove(struct Pokemon *, u8); +static void sub_80A04CC(u16); +static void sub_80A057C(u16); +static void sub_80A0498(u16); +static void sub_80A046C(u16); +static void sub_80A20A8(u8); +static void sub_809F678(struct Pokemon *); +static void sub_80A1BC0(struct Sprite *sprite); +static void sub_80A1888(struct Sprite *); +static void sub_80A0428(struct Pokemon *, u8 *); +static void sub_80A18E4(u8); +static u8 *sub_80A1E58(u8 *, u8); static void sub_80A0A2C(struct Pokemon *, u8, u8); -extern void sub_80A1FF8(const u8 *, u8, u8, u8); +static void sub_80A1FF8(const u8 *, u8, u8, u8); + +extern u8 ball_number_to_ball_processing_index(u16); +extern u8 StorageSystemGetNextMonIndex(struct BoxPokemon *, u8, u8, u8); extern struct MusicPlayerInfo gMPlay_BGM; extern u8 gUnknown_020384F0; @@ -144,6 +126,13 @@ extern u16 gUnknown_030041B4; extern u16 gUnknown_030042C0; extern u16 gUnknown_03004288; extern u16 gUnknown_030041B0; +extern TaskFunc gUnknown_03005CF0; +extern struct Sprite *gUnknown_020384F4; +extern struct SpriteTemplate gSpriteTemplate_83C1304; +extern struct SpriteTemplate gSpriteTemplate_83C1280; +extern struct SpriteTemplate gSpriteTemplate_83C11C0; +extern struct SpriteTemplate gUnknown_02024E8C; + extern const u16 gSummaryScreenTextTiles[]; extern const u16 gSummaryScreenButtonTiles[]; extern const u8 gMoveTypes_Pal[]; @@ -161,7 +150,7 @@ extern const u8 gUnknown_08E73508[]; extern const u8 gStatusScreen_Gfx[]; extern const u8 gFontDefaultPalette[]; extern const u8 gUnknownPalette_81E6692[]; -extern const u8 gUnknown_083C15A8[]; +extern const u8 gDoubleBattlePartyOrder[]; extern const void (*gUnknown_083C1580[])(void); extern const void (*gUnknown_083C1598[])(struct Pokemon *); extern const void (*gUnknown_083C1588[])(struct Pokemon *); @@ -173,15 +162,9 @@ extern const u8 * const gMoveDescriptions[]; extern const u8 * const gContestEffectStrings[]; extern const struct ContestMove gContestMoves[]; extern const struct ContestEffect gContestEffects[]; -extern TaskFunc gUnknown_03005CF0; extern const u8 gUnknown_083C15BC[]; -extern struct Sprite *gUnknown_020384F4; extern const u16 gSummaryScreenMonMarkingsPalette[]; -extern struct SpriteTemplate gSpriteTemplate_83C1304; -extern struct SpriteTemplate gSpriteTemplate_83C1280; extern const u8 gUnknown_083C11D8[]; -extern struct SpriteTemplate gSpriteTemplate_83C11C0; -extern struct SpriteTemplate gUnknown_02024E8C; extern const u16 gUnknown_08E94510[]; extern const u16 gUnknown_08E94550[]; extern const u16 gUnknown_08E94590[]; @@ -1098,7 +1081,7 @@ void sub_809E83C(u8 taskId, s8 b) } __attribute__((naked)) -void sub_809E8F0(u8 taskId, s8 direction, u8 *c) +void sub_809E8F0(/*u8 taskId, s8 direction, u8 *c*/) { asm(".syntax unified\n\ push {r4-r7,lr}\n\ @@ -1923,9 +1906,9 @@ s8 sub_809F344(u8 partyIndex) return -1; } - if (sub_809F310(&gPlayerParty[gUnknown_083C15A8[partyIndex]]) == TRUE) + if (sub_809F310(&gPlayerParty[gDoubleBattlePartyOrder[partyIndex]]) == TRUE) { - return gUnknown_083C15A8[partyIndex]; + return gDoubleBattlePartyOrder[partyIndex]; } } } @@ -1940,110 +1923,43 @@ s8 sub_809F388(u8 partyIndex) } partyIndex--; - if (sub_809F310(&gPlayerParty[gUnknown_083C15A8[partyIndex]]) == TRUE) + if (sub_809F310(&gPlayerParty[gDoubleBattlePartyOrder[partyIndex]]) == TRUE) { - return gUnknown_083C15A8[partyIndex]; + return gDoubleBattlePartyOrder[partyIndex]; } } } -#ifdef NONMATCHING // The nested if statements at the end are not matching. -s8 sub_809F3CC(s8 a) +s8 sub_809F3CC(s8 direction) { - u8 var1 = 0; - u8 i = 0; + u8 i; + u8 monIndex = 0; - for (i = 0; i < 6; i++) + for (i = 0; i < PARTY_SIZE; i++) { - if (gUnknown_083C15A8[i] == ewramSS.monIndex) + if (gDoubleBattlePartyOrder[i] == ewramSS.monIndex) { - var1 = i; + monIndex = i; break; } } - if ((s8)a != -1 || var1 != 0) + if ((direction == -1 && monIndex == 0) || (direction == 1 && monIndex == 5)) { - if ((s8)a != 1) - { - return sub_809F388(var1); - } - else if (var1 != 5) - { - return sub_809F344(var1); - } + return -1; + } + + if (direction != 1) + { + return sub_809F388(monIndex); + } + else if (monIndex != 5) + { + return sub_809F344(monIndex); } return -1; } -#else -__attribute__((naked)) -s8 sub_809F3CC(s8 a) -{ - asm(".syntax unified\n\ - push {r4-r6,lr}\n\ - lsls r0, 24\n\ - lsrs r6, r0, 24\n\ - movs r2, 0\n\ - movs r1, 0\n\ - ldr r3, _0809F41C @ =gUnknown_083C15A8\n\ - ldr r4, _0809F420 @ =gSharedMem + 0x18000\n\ - ldrb r0, [r3]\n\ - ldrb r5, [r4, 0x9]\n\ - cmp r0, r5\n\ - beq _0809F3FC\n\ - adds r5, r3, 0\n\ - adds r3, r4, 0\n\ -_0809F3E6:\n\ - adds r0, r1, 0x1\n\ - lsls r0, 24\n\ - lsrs r1, r0, 24\n\ - cmp r1, 0x5\n\ - bhi _0809F3FC\n\ - adds r0, r1, r5\n\ - ldrb r0, [r0]\n\ - ldrb r4, [r3, 0x9]\n\ - cmp r0, r4\n\ - bne _0809F3E6\n\ - adds r2, r1, 0\n\ -_0809F3FC:\n\ - lsls r0, r6, 24\n\ - asrs r1, r0, 24\n\ - movs r0, 0x1\n\ - negs r0, r0\n\ - cmp r1, r0\n\ - bne _0809F40C\n\ - cmp r2, 0\n\ - beq _0809F414\n\ -_0809F40C:\n\ - cmp r1, 0x1\n\ - bne _0809F424\n\ - cmp r2, 0x5\n\ - bne _0809F42C\n\ -_0809F414:\n\ - movs r0, 0x1\n\ - negs r0, r0\n\ - b _0809F436\n\ - .align 2, 0\n\ -_0809F41C: .4byte gUnknown_083C15A8\n\ -_0809F420: .4byte gSharedMem + 0x18000\n\ -_0809F424:\n\ - adds r0, r2, 0\n\ - bl sub_809F388\n\ - b _0809F432\n\ -_0809F42C:\n\ - adds r0, r2, 0\n\ - bl sub_809F344\n\ -_0809F432:\n\ - lsls r0, 24\n\ - asrs r0, 24\n\ -_0809F436:\n\ - pop {r4-r6}\n\ - pop {r1}\n\ - bx r1\n\ - .syntax divided\n"); -} -#endif // NONMATCHING void sub_809F43C(u8 taskId) { @@ -2265,7 +2181,7 @@ void sub_809F814(u8 taskId) taskData[0] = 4; taskData[13] = 1; ewramSS.selectedMoveIndex = taskData[15]; - sub_809E8F0(taskId, -1, NULL); + sub_809E8F0(taskId, -1); } else if (gMain.newKeys & DPAD_DOWN) { @@ -2273,7 +2189,7 @@ void sub_809F814(u8 taskId) taskData[0] = 4; taskData[13] = 1; ewramSS.selectedMoveIndex = taskData[15]; - sub_809E8F0(taskId, 1, NULL); + sub_809E8F0(taskId, 1); } else if ((gMain.newKeys & DPAD_LEFT) || sub_80F9284() == 1) { @@ -2315,6 +2231,7 @@ void sub_809F814(u8 taskId) gTasks[taskId].func = sub_809E260; } } + #else __attribute__((naked)) void sub_809F814(u8 taskId) @@ -5116,89 +5033,20 @@ void sub_80A1B1C(u8 a) } } -#ifdef NONMATCHING void sub_80A1B40(u8 a) { u8 i; - u8 var1 = a * 3; + a *= 3; - StartSpriteAnim(&gSprites[ewram1A000[9]], var1 + 4); + StartSpriteAnim(&gSprites[ewram1A000[9]], a + 4); for (i = 0; i < 8; i++) { - StartSpriteAnim(&gSprites[ewram1A000[10 + i]], var1 + 6); + StartSpriteAnim(&gSprites[ewram1A000[10 + i]], a + 6); } - StartSpriteAnim(&gSprites[ewram1A000[18]], var1 + 5); + StartSpriteAnim(&gSprites[ewram1A000[18]], a + 5); } -#else -__attribute__((naked)) -void sub_80A1B40(u8 a) -{ - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r8\n\ - push {r7}\n\ - lsls r0, 24\n\ - lsrs r7, r0, 24\n\ - lsls r1, r7, 1\n\ - adds r1, r7\n\ - lsls r1, 24\n\ - ldr r0, _080A1BB4 @ =gSharedMem + 0x1A009\n\ - ldrb r2, [r0]\n\ - lsls r0, r2, 4\n\ - adds r0, r2\n\ - lsls r0, 2\n\ - ldr r2, _080A1BB8 @ =gSprites\n\ - adds r0, r2\n\ - lsrs r7, r1, 24\n\ - movs r2, 0x80\n\ - lsls r2, 19\n\ - adds r1, r2\n\ - lsrs r1, 24\n\ - bl StartSpriteAnim\n\ - movs r4, 0\n\ - adds r0, r7, 0x6\n\ - lsls r0, 24\n\ - mov r8, r0\n\ -_080A1B74:\n\ - ldr r6, _080A1BBC @ =gSharedMem + 0x1A00A\n\ - adds r0, r4, r6\n\ - ldrb r1, [r0]\n\ - lsls r0, r1, 4\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - ldr r5, _080A1BB8 @ =gSprites\n\ - adds r0, r5\n\ - mov r2, r8\n\ - lsrs r1, r2, 24\n\ - bl StartSpriteAnim\n\ - adds r0, r4, 0x1\n\ - lsls r0, 24\n\ - lsrs r4, r0, 24\n\ - cmp r4, 0x7\n\ - bls _080A1B74\n\ - ldrb r1, [r6, 0x8]\n\ - lsls r0, r1, 4\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - adds r0, r5\n\ - adds r1, r7, 0x5\n\ - lsls r1, 24\n\ - lsrs r1, 24\n\ - bl StartSpriteAnim\n\ - pop {r3}\n\ - mov r8, r3\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_080A1BB4: .4byte gSharedMem + 0x1A009\n\ -_080A1BB8: .4byte gSprites\n\ -_080A1BBC: .4byte gSharedMem + 0x1A00A\n\ - .syntax divided\n"); -} -#endif // NONMATCHING void sub_80A1BC0(struct Sprite *sprite) { -- cgit v1.2.3 From 90dcfa4f1c53d6bab795fd1514868dc25e7f5f76 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Sat, 25 Nov 2017 20:58:46 -0800 Subject: Migrate move_descriptions to src/data/text --- src/data/text/move_descriptions_de.h | 1769 +++++++++++++++++++++++++++++++++ src/data/text/move_descriptions_en.h | 1772 ++++++++++++++++++++++++++++++++++ src/pokemon/pokemon_summary_screen.c | 7 +- 3 files changed, 3547 insertions(+), 1 deletion(-) create mode 100644 src/data/text/move_descriptions_de.h create mode 100644 src/data/text/move_descriptions_en.h (limited to 'src') diff --git a/src/data/text/move_descriptions_de.h b/src/data/text/move_descriptions_de.h new file mode 100644 index 000000000..cb681f6d7 --- /dev/null +++ b/src/data/text/move_descriptions_de.h @@ -0,0 +1,1769 @@ +static const u8 gMoveDescription_Pound[] = _( + "Ein Hieb mit den Vorder-\n" + "beinen oder dem Schweif."); + +static const u8 gMoveDescription_KarateChop[] = _( + "Gute Möglichkeit, einen\n" + "Volltreffer zu landen."); + +static const u8 gMoveDescription_DoubleSlap[] = _( + "Trifft den Gegner 2 - 5-mal\n" + "hintereinander."); + +static const u8 gMoveDescription_CometPunch[] = _( + "Trifft den Gegner 2 - 5-mal\n" + "hintereinander."); + +static const u8 gMoveDescription_MegaPunch[] = _( + "Ein unglaublich kräftiger\n" + "Hieb."); + +static const u8 gMoveDescription_PayDay[] = _( + "Wirft Münzen auf Gegner.\n" + "Geld wird erstattet."); + +static const u8 gMoveDescription_FirePunch[] = _( + "Schlag, der dem Gegner evtl.\n" + "Verbrennungen zufügt."); + +static const u8 gMoveDescription_IcePunch[] = _( + "Ein Schlag, der den Gegner\n" + "evtl. einfriert."); + +static const u8 gMoveDescription_ThunderPunch[] = _( + "Schlag, der den Gegner evtl.\n" + "paralysiert."); + +static const u8 gMoveDescription_Scratch[] = _( + "Der Gegner wird mit\n" + "scharfen Klauen zerkratzt."); + +static const u8 gMoveDescription_ViceGrip[] = _( + "Umklammert den Gegner mit\n" + "großen, kräftigen Zangen."); + +static const u8 gMoveDescription_Guillotine[] = _( + "Kräftige Scheren-Attacke.\n" + "Führt evtl. zum K.O."); + +static const u8 gMoveDescription_RazorWind[] = _( + "Eine Attacke, die auf 2\n" + "Runden basiert."); + +static const u8 gMoveDescription_SwordsDance[] = _( + "Erhöht den Angriffs-Wert\n" + "drastisch."); + +static const u8 gMoveDescription_Cut[] = _( + "Trifft den Gegner mit\n" + "Klauen, Scheren o. ä."); + +static const u8 gMoveDescription_Gust[] = _( + "Trifft den Gegner mit Wind-\n" + "stoß durch Flügelschlag."); + +static const u8 gMoveDescription_WingAttack[] = _( + "Trifft den Gegner mit weit\n" + "gespreizten Flügeln."); + +static const u8 gMoveDescription_Whirlwind[] = _( + "Weht Gegner weg und be-\n" + "endet den Kampf in Wildnis."); + +static const u8 gMoveDescription_Fly[] = _( + "Steigt empor in der 1. Runde\n" + "und trifft Gegner in der 2."); + +static const u8 gMoveDescription_Bind[] = _( + "Umklammert und trifft den\n" + "Gegner 2 - 5-mal."); + +static const u8 gMoveDescription_Slam[] = _( + "Schlag mit einem langen\n" + "Schweif, einer Ranke o. ä."); + +static const u8 gMoveDescription_VineWhip[] = _( + "Peitschenähnlicher Schlag\n" + "mit Ranken."); + +static const u8 gMoveDescription_Stomp[] = _( + "Stampfen mit Fuß. Gegner\n" + "schreckt evtl. zurück."); + +static const u8 gMoveDescription_DoubleKick[] = _( + "Doppeltritt. Der Gegner\n" + "wird zweimal getroffen."); + +static const u8 gMoveDescription_MegaKick[] = _( + "Ein extrem heftiger Tritt.$"static const u8 gMoveDescription_JumpKick[] = (); + "Sprung-Tritt. Selbstschä-\n" + "digung bei Misserfolg."); + +static const u8 gMoveDescription_RollingKick[] = _( + "Schneller Tritt aus der\n" + "Drehung."); + +static const u8 gMoveDescription_SandAttack[] = _( + "Senkt Genauigkeit des Geg-\n" + "ners durch Sand."); + +static const u8 gMoveDescription_Headbutt[] = _( + "Rammt den Gegner und lässt\n" + "ihn evtl. zurückschrecken."); + +static const u8 gMoveDescription_HornAttack[] = _( + "Spießt den Gegner mit\n" + "spitzen Hörnern auf."); + +static const u8 gMoveDescription_FuryAttack[] = _( + "Spießt den Gegner 2 - 5-mal\n" + "mit spitzen Hörnern auf."); + +static const u8 gMoveDescription_HornDrill[] = _( + "K.O.-Attacke, die ein Horn\n" + "als Bohrer einsetzt."); + +static const u8 gMoveDescription_Tackle[] = _( + "Trifft den Gegner mit vollem\n" + "Körpereinsatz."); + +static const u8 gMoveDescription_BodySlam[] = _( + "Körper-Ramme, kann\n" + "Paralyse hervorrufen."); + +static const u8 gMoveDescription_Wrap[] = _( + "Umwickelt Gegner 2 - 5-mal\n" + "mit Ranken o. ä."); + +static const u8 gMoveDescription_TakeDown[] = _( + "Rücksichtslose Attacke,\n" + "mit Selbstschädigung."); + +static const u8 gMoveDescription_Thrash[] = _( + "Attacke in 2 bis 3 Runden,\n" + "die Anwender verwirrt."); + +static const u8 gMoveDescription_DoubleEdge[] = _( + "Lebensgefährlicher Angriff\n" + "mit Selbstschädigung."); + +static const u8 gMoveDescription_TailWhip[] = _( + "Hieb mit dem Schweif, senkt\n" + "die VERT. des Gegners."); + +static const u8 gMoveDescription_PoisonSting[] = _( + "Angriff mit Widerhaken,\n" + "kann Gegner vergiften."); + +static const u8 gMoveDescription_Twineedle[] = _( + "Stacheln an den Vorderbei-\n" + "nen treffen Gegner 2-mal."); + +static const u8 gMoveDescription_PinMissile[] = _( + "Spitze Nadeln treffen den\n" + "Gegner 2 - 5-mal."); + +static const u8 gMoveDescription_Leer[] = _( + "Gegners VERT.-Wert wird\n" + "durch Blick gesenkt."); + +static const u8 gMoveDescription_Bite[] = _( + "Beißt zu und lässt den Geg-\n" + "ner evtl. zurückschrecken."); + +static const u8 gMoveDescription_Growl[] = _( + "Knurren, das den ANGR.-Wert\n" + "des Gegners senkt."); + +static const u8 gMoveDescription_Roar[] = _( + "Verjagt den Gegner und be-\n" + "endet den Kampf in Wildnis."); + +static const u8 gMoveDescription_Sing[] = _( + "Ein Lied, das den Gegner\n" + "in tiefen Schlaf versetzt."); + +static const u8 gMoveDescription_Supersonic[] = _( + "Ausstoß bizarrer Schallwel-\n" + "len. Verwirrt Gegner evtl."); + +static const u8 gMoveDescription_SonicBoom[] = _( + "Schockwellen. Richten immer\n" + "20 KP Schaden an."); + +static const u8 gMoveDescription_Disable[] = _( + "Psycho-Attacke. Blockiert\n" + "eine Attacke des Gegners."); + +static const u8 gMoveDescription_Acid[] = _( + "Versprüht ätzende Flüssig-\n" + "keit, senkt evtl. VERT."); + +static const u8 gMoveDescription_Ember[] = _( + "Schwache Feuer-Attacke.\n" + "Verbrennt Gegner evtl."); + +static const u8 gMoveDescription_Flamethrower[] = _( + "Starke Feuer-Attacke.\n" + "Verbrennt Gegner evtl."); + +static const u8 gMoveDescription_Mist[] = _( + "Nebel, der die Änderung der\n" + "Werte verhindert."); + +static const u8 gMoveDescription_WaterGun[] = _( + "Der Gegner wird mit Wasser\n" + "bespritzt."); + +static const u8 gMoveDescription_HydroPump[] = _( + "Spritzt Wasser mit\n" + "Hochdruck auf den Gegner."); + +static const u8 gMoveDescription_Surf[] = _( + "Eine riesige Welle bricht\n" + "über den Gegner herein."); + +static const u8 gMoveDescription_IceBeam[] = _( + "Gegner wird von Eisstrahl\n" + "getroffen, friert evtl. ein."); + +static const u8 gMoveDescription_Blizzard[] = _( + "Ein Schneesturm, der den\n" + "Gegner einfrieren kann."); + +static const u8 gMoveDescription_Psybeam[] = _( + "Feuert einen Strahl ab, der\n" + "Gegner verwirren kann."); + +static const u8 gMoveDescription_BubbleBeam[] = _( + "Versprüht Blasen, die den\n" + "INIT.-Wert evtl. senken."); + +static const u8 gMoveDescription_AuroraBeam[] = _( + "Regenbogenfarbener Strahl,\n" + "senkt evtl. ANGR.-Wert."); + +static const u8 gMoveDescription_HyperBeam[] = _( + "Starke Attacke. Angreifer\n" + "setzt eine Runde aus."); + +static const u8 gMoveDescription_Peck[] = _( + "Greift Gegner mit dem\n" + "Schnabel an."); + +static const u8 gMoveDescription_DrillPeck[] = _( + "Attacke, bei der der Schna-\n" + "bel als Bohrer dient."); + +static const u8 gMoveDescription_Submission[] = _( + "Rücksichtsloser Rempler. \n" + "Schädigt auch Angreifer."); + +static const u8 gMoveDescription_LowKick[] = _( + "Tritt, der massigen Gegnern\n" + "mehr Schaden zufügt."); + +static const u8 gMoveDescription_Counter[] = _( + "Kontert physischen Tref-\n" + "fer mit doppelter Kraft."); + +static const u8 gMoveDescription_SeismicToss[] = _( + "Richtet Schaden gemäß\n" + "Level d. Angreifers an."); + +static const u8 gMoveDescription_Strength[] = _( + "Erzeugt enorme Kraft und\n" + "rammt den Gegner."); + +static const u8 gMoveDescription_Absorb[] = _( + "Attacke, die die Hälfte des\n" + "Schadens absorbiert."); + +static const u8 gMoveDescription_MegaDrain[] = _( + "Attacke, die die Hälfte des\n" + "Schadens absorbiert."); + +static const u8 gMoveDescription_LeechSeed[] = _( + "Gegner wird bepflanzt und\n" + "verliert jede Runde KP."); + +static const u8 gMoveDescription_Growth[] = _( + "Der Körper wächst und\n" + "SPEZ. ANGR. wird erhöht."); + +static const u8 gMoveDescription_RazorLeaf[] = _( + "Trifft Gegner mit Blättern.\n" + "Hohe Volltrefferquote."); + +static const u8 gMoveDescription_SolarBeam[] = _( + "Absorbiert Licht in der 1.\n" + "Runde, 2. Runde Angriff."); + +static const u8 gMoveDescription_PoisonPowder[] = _( + "Verstreut giftigen Puder,\n" + "der Gegner vergiften kann."); + +static const u8 gMoveDescription_StunSpore[] = _( + "Verstreut Puder, der den\n" + "Gegner evtl. paralysiert."); + +static const u8 gMoveDescription_SleepPowder[] = _( + "Verstreut Puder, der Geg.\n" + "evtl. in Schlaf versetzt."); + +static const u8 gMoveDescription_PetalDance[] = _( + "Angriff in 2-3 Runden.\n" + "Angreifer wird verwirrt."); + +static const u8 gMoveDescription_StringShot[] = _( + "Umwickelt Gegner mit Faden\n" + "und senkt INIT.-Wert."); + +static const u8 gMoveDescription_DragonRage[] = _( + "Stößt Schockwellen aus, die\n" + "40 KP Schaden anrichten."); + +static const u8 gMoveDescription_FireSpin[] = _( + "Schließt Gegner für 2-5\n" + "Runden in Feuerkreis ein."); + +static const u8 gMoveDescription_ThunderShock[] = _( + "Elektro-Attacke. Gegner\n" + "evtl. paralysiert."); + +static const u8 gMoveDescription_Thunderbolt[] = _( + "Starke Elektro-Attacke,\n" + "Gegner evtl. paralysiert."); + +static const u8 gMoveDescription_ThunderWave[] = _( + "Ein schwacher Stromstoß,\n" + "der den Gegner paralysiert."); + +static const u8 gMoveDescription_Thunder[] = _( + "Elektro-Attacke, die den\n" + "Gegner evtl. paralysiert."); + +static const u8 gMoveDescription_RockThrow[] = _( + "Wirft kleine Steine auf den\n" + "Gegner."); + +static const u8 gMoveDescription_Earthquake[] = _( + "Mächtiges Beben. Ist bei\n" + "fliegenden Feinden nutzlos."); + +static const u8 gMoveDescription_Fissure[] = _( + "Sofort-K.O. Wirft Gegner\n" + "in Gebirgsspalte."); + +static const u8 gMoveDescription_Dig[] = _( + "Gräbt sich in der 1. Runde\n" + "ein und trifft in der 2."); + +static const u8 gMoveDescription_Toxic[] = _( + "Vergiftet den Gegner mit \n" + "einem starken Toxin."); + +static const u8 gMoveDescription_Confusion[] = _( + "Psycho-Attacke, die den\n" + "Gegner evtl. verwirrt."); + +static const u8 gMoveDescription_Psychic[] = _( + "Starke Psycho-Attacke, die\n" + "evtl. SPEZ. VERT. senkt."); + +static const u8 gMoveDescription_Hypnosis[] = _( + "Hypno-Attacke, die Gegner\n" + "evtl. in Schlaf versetzt."); + +static const u8 gMoveDescription_Meditate[] = _( + "Friedliche Meditation, um\n" + "ANGR.-Wert zu steigern."); + +static const u8 gMoveDescription_Agility[] = _( + "Entspannt den Körper, um\n" + "INIT.-Wert. zu steigern."); + +static const u8 gMoveDescription_QuickAttack[] = _( + "Sehr schneller Angriff mit\n" + "Erstschlaggarantie."); + +static const u8 gMoveDescription_Rage[] = _( + "Erhöht ANGR. des Anwenders\n" + "bei jedem gegn. Treffer."); + +static const u8 gMoveDescription_Teleport[] = _( + "Psycho-Angriff, um sofort\n" + "aus einem Kampf zu fliehen."); + +static const u8 gMoveDescription_NightShade[] = _( + "Richtet Schaden gemäß\n" + "Level d. Angreifers an."); + +static const u8 gMoveDescription_Mimic[] = _( + "Kopiert eine zuvor ausge-\n" + "führte Attacke d. Gegners."); + +static const u8 gMoveDescription_Screech[] = _( + "Stößt einen Schrei aus, um\n" + "gegn. VERT. zu senken."); + +static const u8 gMoveDescription_DoubleTeam[] = _( + "Erzeugt Ebenbilder, um \n" + "Fluchtwert zu erhöhen."); + +static const u8 gMoveDescription_Recover[] = _( + "Max. KP des Anwenders w.\n" + "bis zur Hälfte aufgefüllt."); + +static const u8 gMoveDescription_Harden[] = _( + "Stärkt die Muskulatur und\n" + "erhöht VERT.-Wert."); + +static const u8 gMoveDescription_Minimize[] = _( + "Anwender schrumpft, um\n" + "Fluchtwert zu erhöhen."); + +static const u8 gMoveDescription_Smokescreen[] = _( + "Senkt Genauigkeit d. Geg-\n" + "ners mit Rauch, Tinte o. ä."); + +static const u8 gMoveDescription_ConfuseRay[] = _( + "Ein fieser Strahl, der den\n" + "Gegner verwirrt."); + +static const u8 gMoveDescription_Withdraw[] = _( + "Rückzug in den harten\n" + "Panzer. Erhöht VERT.-Wert."); + +static const u8 gMoveDescription_DefenseCurl[] = _( + "Verbirgt Schwächen durch\n" + "Einrollen, VERT.-Wert hoch."); + +static const u8 gMoveDescription_Barrier[] = _( + "Erzeugt Barriere, die den\n" + "VERT.-Wert stark erhöht."); + +static const u8 gMoveDescription_LightScreen[] = _( + "Erzeugt Lichtwand u. senkt\n" + "SPEZ. ANGR.-Schaden."); + +static const u8 gMoveDescription_Haze[] = _( + "Erzeugt dunklen Dunst.\n" + "Löscht alle Statusänder."); + +static const u8 gMoveDescription_Reflect[] = _( + "Erzeugt Lichtwand, schützt\n" + "teilweise vor phys. Angr."); + +static const u8 gMoveDescription_FocusEnergy[] = _( + "Bündelt Kraft. Volltreffer-\n" + "chance wird erhöht."); + +static const u8 gMoveDescription_Bide[] = _( + "Erträgt 2 Runden Angriffe,\n" + "schlägt doppelt zurück."); + +static const u8 gMoveDescription_Metronome[] = _( + "Bewegt Finger und wählt\n" + "PKMN-Attacke zufällig aus."); + +static const u8 gMoveDescription_MirrorMove[] = _( + "Erwidert gegn. Angriff mit\n" + "derselben Attacke."); + +static const u8 gMoveDescription_SelfDestruct[] = _( + "Richtet großen Schaden an.\n" + "Anwender wird besiegt."); + +static const u8 gMoveDescription_EggBomb[] = _( + "Ein Ei wird auf den Gegner\n" + "abgefeuert."); + +static const u8 gMoveDescription_Lick[] = _( + "Leck-Attacke mit Zunge.\n" + "Gegner evtl. paralysiert."); + +static const u8 gMoveDescription_Smog[] = _( + "Angriff mit Gas. Gegner wird\n" + "evtl. vergiftet."); + +static const u8 gMoveDescription_Sludge[] = _( + "Wirft Schlamm auf Gegner.\n" + "Evtl. Vergiftung."); + +static const u8 gMoveDescription_BoneClub[] = _( + "Schlägt Gegner mit Keule\n" + "und verschreckt ihn evtl."); + +static const u8 gMoveDescription_FireBlast[] = _( + "Feuersbrunst, die alles ver-\n" + "sengt. Verbrennt Geg. evtl."); + +static const u8 gMoveDescription_Waterfall[] = _( + "Attacke basiert auf Tempo.\n" + "Erklimmt Wasserfälle."); + +static const u8 gMoveDescription_Clamp[] = _( + "Fängt und drückt Gegner\n" + "für 2-5 Runden."); + +static const u8 gMoveDescription_Swift[] = _( + "Verschießt sternförmige\n" + "Strahlen. Treffergarantie!"); + +static const u8 gMoveDescription_SkullBash[] = _( + "Zieht Kopf ein und greift in\n" + "der nächsten Runde an."); + +static const u8 gMoveDescription_SpikeCannon[] = _( + "Verschießt spitze Stacheln\n" + "und trifft 2 - 5-mal."); + +static const u8 gMoveDescription_Constrict[] = _( + "Schmerzvoller Klammergriff.\n" + "Senkt evtl. INIT.-Wert."); + +static const u8 gMoveDescription_Amnesia[] = _( + "Gedächtnisverlust, der\n" + "SPEZ. VERT. deutlich erhöht."); + +static const u8 gMoveDescription_Kinesis[] = _( + "Lenkt Gegner ab und senkt\n" + "evtl. seine Genauigkeit."); + +static const u8 gMoveDescription_SoftBoiled[] = _( + "Max. KP des Anwenders w.\n" + "bis zur Hälfte aufgefüllt."); + +static const u8 gMoveDescription_HiJumpKick[] = _( + "Sprung-Tritt mit Knie. Miss-\n" + "erfolg verletzt Anwender."); + +static const u8 gMoveDescription_Glare[] = _( + "Schüchtert Gegner ein, so\n" + "dass er paralysiert ist."); + +static const u8 gMoveDescription_DreamEater[] = _( + "Schlafendem Gegner wird\n" + "halber Schaden abgezogen."); + +static const u8 gMoveDescription_PoisonGas[] = _( + "Hüllt Gegner in giftiges Gas\n" + "ein, kann vergiften."); + +static const u8 gMoveDescription_Barrage[] = _( + "Wirft 2 - 5-mal runde Gegen-\n" + "stände auf den Gegner."); + +static const u8 gMoveDescription_LeechLife[] = _( + "Ein Angriff, der die Hälfte\n" + "des Schadens saugt."); + +static const u8 gMoveDescription_LovelyKiss[] = _( + "Fordert Kuss mit bösem\n" + "Blick. Evtl. Schlaf."); + +static const u8 gMoveDescription_SkyAttack[] = _( + "Sucht nach Schwächen,\n" + "Treffer nächste Runde."); + +static const u8 gMoveDescription_Transform[] = _( + "Ändert die Anwenderzellen\n" + "für ein Ebenbild d. Gegners."); + +static const u8 gMoveDescription_Bubble[] = _( + "Angriff mit Blasen. INIT.-\n" + "Wert wird evtl. gesenkt."); + +static const u8 gMoveDescription_DizzyPunch[] = _( + "Rhythmischer Schlag, der\n" + "den Gegner verwirren kann."); + +static const u8 gMoveDescription_Spore[] = _( + "Erzeugt eine Wolke aus ein-\n" + "schläfernden Sporen."); + +static const u8 gMoveDescription_Flash[] = _( + "Erzeugt helles Licht, das\n" + "gegn. Genauigkeit senkt."); + +static const u8 gMoveDescription_Psywave[] = _( + "Psycho-Welle mit unter-\n" + "schiedlicher Intensität."); + +static const u8 gMoveDescription_Splash[] = _( + "Nur ein Platscher..., der\n" + "überhaupt nichts bewirkt."); + +static const u8 gMoveDescription_AcidArmor[] = _( + "Verflüssigt Körper d. An-\n" + "wenders. Erhört VERT."); + +static const u8 gMoveDescription_Crabhammer[] = _( + "Schlägt mit Schere zu.\n" + "Volltrefferchance hoch."); + +static const u8 gMoveDescription_Explosion[] = _( + "Richtet großen Schaden an.\n" + "Anwender wird besiegt."); + +static const u8 gMoveDescription_FurySwipes[] = _( + "Beharkt Gegner 2 - 5-mal\n" + "mit scharfen Klauen o. ä."); + +static const u8 gMoveDescription_Bonemerang[] = _( + "Ein Bumerang aus Knochen,\n" + "der zweimal trifft."); + +static const u8 gMoveDescription_Rest[] = _( + "Anwender schläft 2 Runden,\n" + "KP und Status erneuert."); + +static const u8 gMoveDescription_RockSlide[] = _( + "Schleudert riesige Felsen.\n" + "Verschreckt evtl. Gegner."); + +static const u8 gMoveDescription_HyperFang[] = _( + "Angriff mit Zähnen.\n" + "Verschreckt evtl. Gegner."); + +static const u8 gMoveDescription_Sharpen[] = _( + "Reduziert Polygonzahl und\n" + "erhöht ANGR.-Wert."); + +static const u8 gMoveDescription_Conversion[] = _( + "Wandelt Typ d. Anwenders in\n" + "eigenen Attacken-Typ."); + +static const u8 gMoveDescription_TriAttack[] = _( + "Feuert 3 Arten von Strahlen\n" + "gleichzeitig ab."); + +static const u8 gMoveDescription_SuperFang[] = _( + "Greift mit scharfen Zähnen\n" + "an. Halbiert gegnerische KP."); + +static const u8 gMoveDescription_Slash[] = _( + "Hieb mit Klauen o. ä. Hohe\n" + "Volltrefferquote."); + +static const u8 gMoveDescription_Substitute[] = _( + "Lockvogel, der 1/4 der max.\n" + "KP des Anwenders besitzt."); + +static const u8 gMoveDescription_Struggle[] = _( + "Einsatz nur bei verbrauch-\n" + "ten AP. Selbstschädigung!"); + +static const u8 gMoveDescription_Sketch[] = _( + "Kopiert stets den zuletzt\n" + "erlittenen Angriff."); + +static const u8 gMoveDescription_TripleKick[] = _( + "Tritt Gegner 3-mal nach-\n" + "einander. Härte nimmt zu."); + +static const u8 gMoveDescription_Thief[] = _( + "Kann das vom Gegner\n" + "gehaltene Item stehlen."); + +static const u8 gMoveDescription_SpiderWeb[] = _( + "Wickelt Gegner ein. Flucht \n" + "oder Tausch unmöglich."); + +static const u8 gMoveDescription_MindReader[] = _( + "Ahnt gegnerische Aktion.\n" + "Nächste Attacke trifft."); + +static const u8 gMoveDescription_Nightmare[] = _( + "Bewirkt 1/4 Schaden pro\n" + "Zug bei schlafendem Gegner."); + +static const u8 gMoveDescription_FlameWheel[] = _( + "Feuer-Attacke, die Gegner\n" + "evtl. verbrennt."); + +static const u8 gMoveDescription_Snore[] = _( + "Laute Attacke. Kann nur im\n" + "Schlaf benutzt werden."); + +static const u8 gMoveDescription_Curse[] = _( + "Ein Angriff, der bei GEIST-\n" + "PKMN anders funktioniert."); + +static const u8 gMoveDescription_Flail[] = _( + "Richtet mehr Schaden an,\n" + "wenn eigene KP niedrig sind."); + +static const u8 gMoveDescription_Conversion2[] = _( + "Anwender wird resistent\n" + "gegen letzten Angr.-Typ."); + +static const u8 gMoveDescription_Aeroblast[] = _( + "Erzeugt ein Vakuum.\n" + "Hohe Volltrefferquote."); + +static const u8 gMoveDescription_CottonSpore[] = _( + "Sporen heften sich an den\n" + "Gegner. Senkt INIT.-Wert."); + +static const u8 gMoveDescription_Reversal[] = _( + "Richtet mehr Schaden an,\n" + "wenn eigene KP niedrig sind."); + +static const u8 gMoveDescription_Spite[] = _( + "AP des letzten gegner.\n" + "Angriffs werden gesenkt."); + +static const u8 gMoveDescription_PowderSnow[] = _( + "Schnee auf Gegner, der\n" + "evtl. eingefroren wird."); + +static const u8 gMoveDescription_Protect[] = _( + "Weicht Angriff aus.\n" + "Scheitert evtl. bei Wdh."); + +static const u8 gMoveDescription_MachPunch[] = _( + "Schneller Hieb, der stets\n" + "zuerst trifft."); + +static const u8 gMoveDescription_ScaryFace[] = _( + "Erschreckt mit Grimasse. \n" + "INIT.-Wert sinkt deutlich."); + +static const u8 gMoveDescription_FaintAttack[] = _( + "Zieht Gegner heran und\n" + "trifft mit Sicherheit."); + +static const u8 gMoveDescription_SweetKiss[] = _( + "Fordert Kuss mit süßem\n" + "Blick. Verwirrt Gegner evtl."); + +static const u8 gMoveDescription_BellyDrum[] = _( + "Erhöht ANGR.-Wert,\n" + "opfert jedoch KP."); + +static const u8 gMoveDescription_SludgeBomb[] = _( + "Wirft Schlamm auf Gegner\n" + "und vergiftet ihn evtl."); + +static const u8 gMoveDescription_MudSlap[] = _( + "Wirft Gegner Matsch ins Ge-\n" + "sicht. Genauigkeit sinkt."); + +static const u8 gMoveDescription_Octazooka[] = _( + "Verschießt Tinte und senkt\n" + "dadurch Genauigkeit."); + +static const u8 gMoveDescription_Spikes[] = _( + "Richtet bei Tausch Schaden\n" + "mit Stacheln an."); + +static const u8 gMoveDescription_ZapCannon[] = _( + "Kräftige, ungenaue At-\n" + "tacke, die evtl. paralysiert."); + +static const u8 gMoveDescription_Foresight[] = _( + "Verhindert Anstieg von\n" + "gegnerischem Fluchtwert."); + +static const u8 gMoveDescription_DestinyBond[] = _( + "Wird der Angreifer besiegt,\n" + "gilt das auch für d. Gegner."); + +static const u8 gMoveDescription_PerishSong[] = _( + "Wer dieses Lied hört, wird\n" + "nach 3 Runden besiegt."); + +static const u8 gMoveDescription_IcyWind[] = _( + "Eis-Attacke, die den INIT.-\n" + "Wert des Gegners senkt."); + +static const u8 gMoveDescription_Detect[] = _( + "Wendet Attacken ab, Erfolg\n" + "sinkt bei Wiederholung."); + +static const u8 gMoveDescription_BoneRush[] = _( + "Greift Gegner 2 - 5-mal in\n" + "Folge mit einem Knochen an."); + +static const u8 gMoveDescription_LockOn[] = _( + "Visiert Gegner an u. trifft\n" + "in der nächsten Runde."); + +static const u8 gMoveDescription_Outrage[] = _( + "Wiederholt Angriff 2-3 Run-\n" + "den lang. Verwirrt Anwender."); + +static const u8 gMoveDescription_Sandstorm[] = _( + "Erzeugt einen Sandsturm,\n" + "der mehrere Runden wütet."); + +static const u8 gMoveDescription_GigaDrain[] = _( + "Absorbiert die Hälfte des\n" + "angerichteten Schadens."); + +static const u8 gMoveDescription_Endure[] = _( + "Hält jeder Attacke 1 Runde\n" + "stand. 1 KP bleibt stets."); + +static const u8 gMoveDescription_Charm[] = _( + "Betört den Gegner u. redu-\n" + "ziert seinen ANGR. deutlich."); + +static const u8 gMoveDescription_Rollout[] = _( + "Attacke, die 5 Runden\n" + "dauert. Die Härte nimmt zu."); + +static const u8 gMoveDescription_FalseSwipe[] = _( + "Ein Angriff, der dem Gegner\n" + "zumindest 1 KP lässt."); + +static const u8 gMoveDescription_Swagger[] = _( + "Verwirrt den Gegner und\n" + "erhöht ANGR.-Wert deutlich."); + +static const u8 gMoveDescription_MilkDrink[] = _( + "Füllt bis zur Hälfte der max.\n" + "KP des Benutzers auf."); + +static const u8 gMoveDescription_Spark[] = _( + "Elektro-Hieb, der Gegner\n" + "paralysieren kann."); + +static const u8 gMoveDescription_FuryCutter[] = _( + "Eine Attacke, deren Härte\n" + "bei jedem Treffer zunimmt."); + +static const u8 gMoveDescription_SteelWing[] = _( + "Trifft den Gegner hart mit\n" + "ausgebreiteten Flügeln."); + +static const u8 gMoveDescription_MeanLook[] = _( + "Böser Blick, der die Flucht\n" + "des Gegners vereitelt."); + +static const u8 gMoveDescription_Attract[] = _( + "Angriff des anderen Ge-\n" + "schlechts unwahrscheinl."); + +static const u8 gMoveDescription_SleepTalk[] = _( + "Benutzt per Zufall eine\n" + "Attacke im Schlaf."); + +static const u8 gMoveDescription_HealBell[] = _( + "Läutet beruhigend, heilt\n" + "alle Status-Veränderungen."); + +static const u8 gMoveDescription_Return[] = _( + "Angriff, dessen Kraft bei \n" + "Freundschaft größer wird."); + +static const u8 gMoveDescription_Present[] = _( + "Eine Bombe als Geschenk. Es\n" + "kann KP wiederherstellen."); + +static const u8 gMoveDescription_Frustration[] = _( + "Die Attacke ist stärker bei\n" + "verhassten TRAINERn."); + +static const u8 gMoveDescription_Safeguard[] = _( + "Mystische Kraft, die alle\n" + "Statusprobleme verhindert."); + +static const u8 gMoveDescription_PainSplit[] = _( + "Addiert KP v. Anwender u.\n" + "Gegner, teilt gerecht auf."); + +static const u8 gMoveDescription_SacredFire[] = _( + "Mystische Feuer-Attacke, \n" + "die d. Geg. evtl. verbrennt."); + +static const u8 gMoveDescription_Magnitude[] = _( + "Ein erdbebenartiger An-\n" + "griff von zufälliger Stärke."); + +static const u8 gMoveDescription_DynamicPunch[] = _( + "Kräftige Attacke, die ver-\n" + "wirrt, aber ungenau ist."); + +static const u8 gMoveDescription_Megahorn[] = _( + "Brutaler Frontalangriff\n" + "mit spitzen Hörnern."); + +static const u8 gMoveDescription_DragonBreath[] = _( + "Fegt den Gegner mit zer-\n" + "störerisch heißem Atem weg."); + +static const u8 gMoveDescription_BatonPass[] = _( + "Tauscht PKMN aus. Alle Än-\n" + "derungen bleiben bestehen."); + +static const u8 gMoveDescription_Encore[] = _( + "Gegner wiederholt letzten\n" + "Angriff 2 - 6-mal."); + +static const u8 gMoveDescription_Pursuit[] = _( + "Richtet großen Schaden bei\n" + "Austausch des Gegners an."); + +static const u8 gMoveDescription_RapidSpin[] = _( + "Trifft den Gegner durch\n" + "Drehen mit max. Tempo."); + +static const u8 gMoveDescription_SweetScent[] = _( + "Lockt Gegner an und senkt\n" + "seinen Fluchtwert."); + +static const u8 gMoveDescription_IronTail[] = _( + "Att. mit hartem Schweif. \n" + "Senkt evtl. VERT.-Wert."); + +static const u8 gMoveDescription_MetalClaw[] = _( + "Klauen-Attacke. Evtl. Er-\n" + "höhung d. ANGR.-Wert d. Anw."); + +static const u8 gMoveDescription_VitalThrow[] = _( + "Attacke stets gleich, aber\n" + "mit Treffergarantie."); + +static const u8 gMoveDescription_MorningSun[] = _( + "Füllt KP auf. Die Menge\n" + "hängt vom Wetter ab."); + +static const u8 gMoveDescription_Synthesis[] = _( + "Füllt KP auf. Die Menge\n" + "hängt vom Wetter ab."); + +static const u8 gMoveDescription_Moonlight[] = _( + "Füllt KP auf. Die Menge\n" + "hängt vom Wetter ab."); + +static const u8 gMoveDescription_HiddenPower[] = _( + "Die Wirkung dieser Attacke\n" + "hängt vom Benutzer ab."); + +static const u8 gMoveDescription_CrossChop[] = _( + "Doppelter Hieb. Hohe \n" + "Volltrefferquote."); + +static const u8 gMoveDescription_Twister[] = _( + "Trifft Gegner mit\n" + "heftigem Wirbelsturm."); + +static const u8 gMoveDescription_RainDance[] = _( + "Erhöht Stärke von WASSER-\n" + "Attacken 5 Runden lang."); + +static const u8 gMoveDescription_SunnyDay[] = _( + "Erhöht Stärke von FEUER-\n" + "Attacken 5 Runden lang."); + +static const u8 gMoveDescription_Crunch[] = _( + "Beißt mit Reißzähnen zu und\n" + "senkt evtl. SPEZ. VERT."); + +static const u8 gMoveDescription_MirrorCoat[] = _( + "Kontert d. Spezial-Attacke\n" + "d. Geg. mit 2-facher Kraft."); + +static const u8 gMoveDescription_PsychUp[] = _( + "Kopiert Effekte d. Gegners\n" + "u. gibt sie dem Angreifer."); + +static const u8 gMoveDescription_ExtremeSpeed[] = _( + "Extrem schnelle und kraft-\n" + "volle Attacke."); + +static const u8 gMoveDescription_AncientPower[] = _( + "Ein Angriff, der alle\n" + "Status-Werte erhöhen kann."); + +static const u8 gMoveDescription_ShadowBall[] = _( + "Bewirft Gegner und senkt\n" + "evtl. SPEZ. VERT."); + +static const u8 gMoveDescription_FutureSight[] = _( + "Stärkt innere Kraft. Trifft\n" + "2 Runden später."); + +static const u8 gMoveDescription_RockSmash[] = _( + "Zertrümmernder Angriff, \n" + "der evtl. VERT.-Wert senkt."); + +static const u8 gMoveDescription_Whirlpool[] = _( + "Hält Gegner 2-5 Züge in\n" + "einem Strudel gefangen."); + +static const u8 gMoveDescription_BeatUp[] = _( + "Ruft POKéMON hinzu, um an\n" + "dem Angriff teilzuhaben."); + +static const u8 gMoveDescription_FakeOut[] = _( + "Trifft schon mit dem ersten\n" + "Schlag. Verjagt Gegner evtl."); + +static const u8 gMoveDescription_Uproar[] = _( + "Erzeugt für 2-5 Züge einen\n" + "Aufruhr. Verhindert Schlaf."); + +static const u8 gMoveDescription_Stockpile[] = _( + "Lädt Kraft für bis zu 3\n" + "Runden auf."); + +static const u8 gMoveDescription_SpitUp[] = _( + "Entlädt gehortete Kraft.\n" + "Je mehr, desto besser."); + +static const u8 gMoveDescription_Swallow[] = _( + "Absorbiert gehortete\n" + "Kraft. Stellt KP wieder her."); + +static const u8 gMoveDescription_HeatWave[] = _( + "Gegner wird von heißem Atem\n" + "getroffen. Verbrennt evtl."); + +static const u8 gMoveDescription_Hail[] = _( + "Erzeugt Hagelsturm, der in\n" + "jeder Runde trifft."); + +static const u8 gMoveDescription_Torment[] = _( + "Quält Gegner u. verhindert\n" + "Wdh. eines Angriffs."); + +static const u8 gMoveDescription_Flatter[] = _( + "Verwirrt den Gegner, erhöht\n" + "aber dessen SPEZ. ANGR."); + +static const u8 gMoveDescription_WillOWisp[] = _( + "Fügt dem Gegner \n" + "Verbrennungen zu."); + +static const u8 gMoveDescription_Memento[] = _( + "Der Benutzer ist besiegt\n" + "und senkt die gegn. Werte."); + +static const u8 gMoveDescription_Facade[] = _( + "Erhöht ANGR. nach Verbren-\n" + "nung, Paralyse o. Vergift."); + +static const u8 gMoveDescription_FocusPunch[] = _( + "Angriff, der später trifft.\n" + "Ben. schreckt evtl. zurück."); + +static const u8 gMoveDescription_SmellingSalt[] = _( + "Effektiv geg. paralysierte\n" + "Gegner. Heilt sie aber auch."); + +static const u8 gMoveDescription_FollowMe[] = _( + "Zieht Aufmerksamkeit an.\n" + "Gegner greift nur Anw. an."); + +static const u8 gMoveDescription_NaturePower[] = _( + "Die Elementklasse des\n" + "Angriffs hängt vom Ort ab."); + +static const u8 gMoveDescription_Charge[] = _( + "Lädt Energie für den kom-\n" + "menden Elektro-Angr. auf."); + +static const u8 gMoveDescription_Taunt[] = _( + "Legt den Gegner rein. Er\n" + "benutzt nur noch Angriffe."); + +static const u8 gMoveDescription_HelpingHand[] = _( + "Steigert die Kraft der An-\n" + "griffe des Getroffenen."); + +static const u8 gMoveDescription_Trick[] = _( + "Betrügt beim Handel\n" + "mit Gegenständen."); + +static const u8 gMoveDescription_RolePlay[] = _( + "Parodiert Gegner u. kopiert\n" + "seine Spezialfähigkeiten."); + +static const u8 gMoveDescription_Wish[] = _( + "Ein Wunsch, der KP auffüllt.\n" + "Die Erfüllung braucht Zeit."); + +static const u8 gMoveDescription_Assist[] = _( + "Greift zufällig mit einem\n" + "Angriff d. Partners an."); + +static const u8 gMoveDescription_Ingrain[] = _( + "Verwurzelung füllt KP auf.\n" + "Austausch unmöglich."); + +static const u8 gMoveDescription_Superpower[] = _( + "Steigert Stärke deutlich,\n" + "senkt aber Status-Werte."); + +static const u8 gMoveDescription_MagicCoat[] = _( + "Gibt Spezialeffekte zurück\n" + "an Benutzer."); + +static const u8 gMoveDescription_Recycle[] = _( + "Recycling eines\n" + "verwendeten Items."); + +static const u8 gMoveDescription_Revenge[] = _( + "Attacke wird stärker, wenn\n" + "Anwender Schaden nimmt."); + +static const u8 gMoveDescription_BrickBreak[] = _( + "Durchbricht Barrieren und\n" + "verursacht Schaden."); + +static const u8 gMoveDescription_Yawn[] = _( + "Gegner gähnt und schläft\n" + "in der nächsten Runde ein."); + +static const u8 gMoveDescription_KnockOff[] = _( + "Schlägt Gegner Item weg.\n" + "Vereitelt so den Gebrauch."); + +static const u8 gMoveDescription_Endeavor[] = _( + "Wird stärker, wenn Anw.-KP\n" + "geringer als Gegner-KP ist."); + +static const u8 gMoveDescription_Eruption[] = _( + "Je höher KP des Benutzers,\n" + "desto mehr Schaden."); + +static const u8 gMoveDescription_SkillSwap[] = _( + "Anw. tauscht Spezial-\n" + "fähigkeit mit POKéMON."); + +static const u8 gMoveDescription_Imprison[] = _( + "Hindert Gegner an Atta-\n" + "cken, die d. Benutzer kennt."); + +static const u8 gMoveDescription_Refresh[] = _( + "Kuriert Vergiftungen, Para-\n" + "lyse und Verbrennung."); + +static const u8 gMoveDescription_Grudge[] = _( + "Wenn Anw. bes., werden AP\n" + "der Finalattacke gelöscht."); + +static const u8 gMoveDescription_Snatch[] = _( + "Immunität geg. den Effekt\n" + "d. nächsten gegn. Angriffs."); + +static const u8 gMoveDescription_SecretPower[] = _( + "Angriff, dessen Auswirkung\n" + "abhängig vom Ort ist."); + +static const u8 gMoveDescription_Dive[] = _( + "Taucht in der 1. Runde\n" + "unter u. trifft in der 2."); + +static const u8 gMoveDescription_ArmThrust[] = _( + "Schläge mit geradem Arm, die\n" + "Gegner 2 - 5-mal treffen."); + +static const u8 gMoveDescription_Camouflage[] = _( + "Die Elementklasse des\n" + "POKéMON hängt vom Ort ab."); + +static const u8 gMoveDescription_TailGlow[] = _( + "Ein blinkendes Licht. SPEZ.\n" + "ANGR. wird deutlich erhöht."); + +static const u8 gMoveDescription_LusterPurge[] = _( + "Angriff mit grellem Licht.\n" + "Senkt evtl. SPEZ. VERT."); + +static const u8 gMoveDescription_MistBall[] = _( + "Angriff m. Daunengestöber,\n" + "Senkt evtl. SPEZ. ANGR."); + +static const u8 gMoveDescription_FeatherDance[] = _( + "Hüllt Gegner in Daunen und\n" + "senkt ANGR.-Wert deutlich."); + +static const u8 gMoveDescription_TeeterDance[] = _( + "Verwirrt alle POKéMON im \n" + "Kampf."); + +static const u8 gMoveDescription_BlazeKick[] = _( + "Hohe Volltrefferquote. Ver-\n" + "ursacht evtl. Verbrennung."); + +static const u8 gMoveDescription_MudSport[] = _( + "Bedeckt Anw. mit Lehm u. er-\n" + "höht Schutz geg. Elek.-Att."); + +static const u8 gMoveDescription_IceBall[] = _( + "Angriff für 5 Runden. \n" + "Stärker, wenn Treffer."); + +static const u8 gMoveDescription_NeedleArm[] = _( + "Angriff mit dornigen Armen. \n" + "Geg. schreckt evtl. zurück."); + +static const u8 gMoveDescription_SlackOff[] = _( + "Durch Müßiggang wird die\n" + "Hälfte d. max. KP aufgefüllt."); + +static const u8 gMoveDescription_HyperVoice[] = _( + "Laute Attacke mit Schall-\n" + "wellen."); + +static const u8 gMoveDescription_PoisonFang[] = _( + "Angriff mit Reißzähnen. \n" + "Gegner wird evtl. vergiftet."); + +static const u8 gMoveDescription_CrushClaw[] = _( + "Angriff mit scharfen Klau-\n" + "en. Senkt evtl. VERT.-Wert."); + +static const u8 gMoveDescription_BlastBurn[] = _( + "Starker Angriff. Angreifer\n" + "muss eine Runde aussetzen."); + +static const u8 gMoveDescription_HydroCannon[] = _( + "Starker Angriff. Angreifer\n" + "muss eine Runde aussetzen."); + +static const u8 gMoveDescription_MeteorMash[] = _( + "Ein Schlag wie ein Meteor.\n" + "Erhöht evtl. ANGR.-Wert."); + +static const u8 gMoveDescription_Astonish[] = _( + "Angriff, der Gegner evtl.\n" + "zurückschrecken lässt."); + +static const u8 gMoveDescription_WeatherBall[] = _( + "Elementkl. u. Stärke der At-\n" + "tacke sind wetterabhängig."); + +static const u8 gMoveDescription_Aromatherapy[] = _( + "Heilt alle Status-Probleme\n" + "mit beruhigendem Duft."); + +static const u8 gMoveDescription_FakeTears[] = _( + "Täuscht Weinen vor, um\n" + "gegn. SPEZ. VERT. zu senken."); + +static const u8 gMoveDescription_AirCutter[] = _( + "Greift mit heftigem Wind an.\n" + "Hohe Volltrefferquote."); + +static const u8 gMoveDescription_Overheat[] = _( + "Angriff mit voller Kraft.\n" + "SPEZ. ANGR. sinkt deutlich."); + +static const u8 gMoveDescription_OdorSleuth[] = _( + "Hindert Gegner daran, ihren\n" + "Fluchtwert zu erhöhen."); + +static const u8 gMoveDescription_RockTomb[] = _( + "Hält den Feind mit Steinen\n" + "auf u. senkt INIT.-Wert."); + +static const u8 gMoveDescription_SilverWind[] = _( + "Pulver-Attacke, die evtl.\n" + "die Werte erhöht."); + +static const u8 gMoveDescription_MetalSound[] = _( + "Stößt einen spitzen Schrei\n" + "aus. Senkt SPEZ. VERT."); + +static const u8 gMoveDescription_GrassWhistle[] = _( + "Versetzt Gegner mit schö-\n" + "ner Melodie in den Schlaf."); + +static const u8 gMoveDescription_Tickle[] = _( + "Bringt Gegner zum Lachen.\n" + "ANGR. u. VERT. sinken."); + +static const u8 gMoveDescription_CosmicPower[] = _( + "Erhöht VERT. u. SPEZ. VERT.\n" + "durch mystische Kraft."); + +static const u8 gMoveDescription_WaterSpout[] = _( + "Ist wirkungsvoller, wenn KP\n" + "des Benutzers hoch sind."); + +static const u8 gMoveDescription_SignalBeam[] = _( + "Seltsame Strahlenattacke.\n" + "Verwirrt evtl. den Gegner."); + +static const u8 gMoveDescription_ShadowPunch[] = _( + "Schattenhieb. Ausweichen\n" + "unmöglich."); + +static const u8 gMoveDescription_Extrasensory[] = _( + "Besonderer Angriff. Gegner\n" + "schreckt evtl. zurück."); + +static const u8 gMoveDescription_SkyUppercut[] = _( + "Kinnhaken, als würde man in\n" + "die Luft springen."); + +static const u8 gMoveDescription_SandTomb[] = _( + "Gegner leidet für 2-5\n" + "Runden in Sandhose."); + +static const u8 gMoveDescription_SheerCold[] = _( + "Eis-Attacke. Besiegt den\n" + "Gegner, wenn sie trifft."); + +static const u8 gMoveDescription_MuddyWater[] = _( + "Greift mit Matsch an und\n" + "senkt evtl. Genauigkeit."); + +static const u8 gMoveDescription_BulletSeed[] = _( + "Verschießt 2 bis 5 Samen\n" + "gleichzeitig auf Gegner."); + +static const u8 gMoveDescription_AerialAce[] = _( + "Eine extrem schnelle und\n" + "unausweichbare Attacke."); + +static const u8 gMoveDescription_IcicleSpear[] = _( + "Feuert 2-5 Eiszapfen auf\n" + "den Gegner."); + +static const u8 gMoveDescription_IronDefense[] = _( + "Stärkt den Körper.\n" + "Erhöht VERT.-Wert deutlich."); + +static const u8 gMoveDescription_Block[] = _( + "Versperrt den Fluchtweg\n" + "des Gegners."); + +static const u8 gMoveDescription_Howl[] = _( + "Jault, um in sich zu gehen.\n" + "Erhöht ANGR.-Wert."); + +static const u8 gMoveDescription_DragonClaw[] = _( + "Der Gegner wird mit\n" + "scharfen Klauen verletzt."); + +static const u8 gMoveDescription_FrenzyPlant[] = _( + "Starker Angriff. Angreifer\n" + "muss eine Runde aussetzen."); + +static const u8 gMoveDescription_BulkUp[] = _( + "Pumpt den Körper auf. ANGR.\n" + "u. VERT. werden erhöht."); + +static const u8 gMoveDescription_Bounce[] = _( + "Springt hoch u. landet in\n" + "nächstem Zug. Evtl. Para."); + +static const u8 gMoveDescription_MudShot[] = _( + "Bewirft den Gegner mit Lehm\n" + "und senkt INIT.-Wert."); + +static const u8 gMoveDescription_PoisonTail[] = _( + "Hohe Volltrefferquote.\n" + "Gegner evtl. vergiftet."); + +static const u8 gMoveDescription_Covet[] = _( + "Bittet charmant um das ge-\n" + "haltene Item des Gegners."); + +static const u8 gMoveDescription_VoltTackle[] = _( + "Lebensgefährliche Attacke,\n" + "leichte Selbstschädigung."); + +static const u8 gMoveDescription_MagicalLeaf[] = _( + "Magischer Blattangriff.\n" + "Ausweichen unmöglich."); + +static const u8 gMoveDescription_WaterSport[] = _( + "Benutzer wird nass, so dass\n" + "er Feuer besser standhält."); + +static const u8 gMoveDescription_CalmMind[] = _( + "Erhöht SPEZ. ANGR. u. SPEZ.\n" + "VERT. durch Konzentration."); + +static const u8 gMoveDescription_LeafBlade[] = _( + "Hieb mit scharfkantigem\n" + "Blatt. Hohe Volltrefferqu."); + +static const u8 gMoveDescription_DragonDance[] = _( + "Ein mystischer Tanz, der\n" + "ANGR.- u. INIT.-Wert erhöht."); + +static const u8 gMoveDescription_RockBlast[] = _( + "Wirft 2 - 5-mal in Folge\n" + "Felsblöcke auf den Gegner."); + +static const u8 gMoveDescription_ShockWave[] = _( + "Schnelle Elektro-Attacke\n" + "mit Treffergarantie."); + +static const u8 gMoveDescription_WaterPulse[] = _( + "Ultraschallwellen, die den\n" + "Gegner verwirren können."); + +static const u8 gMoveDescription_DoomDesire[] = _( + "Speichert Sonnenenergie.\n" + "Angriff 2 Runden später."); + +static const u8 gMoveDescription_PsychoBoost[] = _( + "Angriff mit voller Kraft.\n" + "SPEZ. ANGR. sinkt deutlich."); + +const u8 * const gMoveDescriptions[] = { + gMoveDescription_Pound, + gMoveDescription_KarateChop, + gMoveDescription_DoubleSlap, + gMoveDescription_CometPunch, + gMoveDescription_MegaPunch, + gMoveDescription_PayDay, + gMoveDescription_FirePunch, + gMoveDescription_IcePunch, + gMoveDescription_ThunderPunch, + gMoveDescription_Scratch, + gMoveDescription_ViceGrip, + gMoveDescription_Guillotine, + gMoveDescription_RazorWind, + gMoveDescription_SwordsDance, + gMoveDescription_Cut, + gMoveDescription_Gust, + gMoveDescription_WingAttack, + gMoveDescription_Whirlwind, + gMoveDescription_Fly, + gMoveDescription_Bind, + gMoveDescription_Slam, + gMoveDescription_VineWhip, + gMoveDescription_Stomp, + gMoveDescription_DoubleKick, + gMoveDescription_MegaKick, + gMoveDescription_JumpKick, + gMoveDescription_RollingKick, + gMoveDescription_SandAttack, + gMoveDescription_Headbutt, + gMoveDescription_HornAttack, + gMoveDescription_FuryAttack, + gMoveDescription_HornDrill, + gMoveDescription_Tackle, + gMoveDescription_BodySlam, + gMoveDescription_Wrap, + gMoveDescription_TakeDown, + gMoveDescription_Thrash, + gMoveDescription_DoubleEdge, + gMoveDescription_TailWhip, + gMoveDescription_PoisonSting, + gMoveDescription_Twineedle, + gMoveDescription_PinMissile, + gMoveDescription_Leer, + gMoveDescription_Bite, + gMoveDescription_Growl, + gMoveDescription_Roar, + gMoveDescription_Sing, + gMoveDescription_Supersonic, + gMoveDescription_SonicBoom, + gMoveDescription_Disable, + gMoveDescription_Acid, + gMoveDescription_Ember, + gMoveDescription_Flamethrower, + gMoveDescription_Mist, + gMoveDescription_WaterGun, + gMoveDescription_HydroPump, + gMoveDescription_Surf, + gMoveDescription_IceBeam, + gMoveDescription_Blizzard, + gMoveDescription_Psybeam, + gMoveDescription_BubbleBeam, + gMoveDescription_AuroraBeam, + gMoveDescription_HyperBeam, + gMoveDescription_Peck, + gMoveDescription_DrillPeck, + gMoveDescription_Submission, + gMoveDescription_LowKick, + gMoveDescription_Counter, + gMoveDescription_SeismicToss, + gMoveDescription_Strength, + gMoveDescription_Absorb, + gMoveDescription_MegaDrain, + gMoveDescription_LeechSeed, + gMoveDescription_Growth, + gMoveDescription_RazorLeaf, + gMoveDescription_SolarBeam, + gMoveDescription_PoisonPowder, + gMoveDescription_StunSpore, + gMoveDescription_SleepPowder, + gMoveDescription_PetalDance, + gMoveDescription_StringShot, + gMoveDescription_DragonRage, + gMoveDescription_FireSpin, + gMoveDescription_ThunderShock, + gMoveDescription_Thunderbolt, + gMoveDescription_ThunderWave, + gMoveDescription_Thunder, + gMoveDescription_RockThrow, + gMoveDescription_Earthquake, + gMoveDescription_Fissure, + gMoveDescription_Dig, + gMoveDescription_Toxic, + gMoveDescription_Confusion, + gMoveDescription_Psychic, + gMoveDescription_Hypnosis, + gMoveDescription_Meditate, + gMoveDescription_Agility, + gMoveDescription_QuickAttack, + gMoveDescription_Rage, + gMoveDescription_Teleport, + gMoveDescription_NightShade, + gMoveDescription_Mimic, + gMoveDescription_Screech, + gMoveDescription_DoubleTeam, + gMoveDescription_Recover, + gMoveDescription_Harden, + gMoveDescription_Minimize, + gMoveDescription_Smokescreen, + gMoveDescription_ConfuseRay, + gMoveDescription_Withdraw, + gMoveDescription_DefenseCurl, + gMoveDescription_Barrier, + gMoveDescription_LightScreen, + gMoveDescription_Haze, + gMoveDescription_Reflect, + gMoveDescription_FocusEnergy, + gMoveDescription_Bide, + gMoveDescription_Metronome, + gMoveDescription_MirrorMove, + gMoveDescription_SelfDestruct, + gMoveDescription_EggBomb, + gMoveDescription_Lick, + gMoveDescription_Smog, + gMoveDescription_Sludge, + gMoveDescription_BoneClub, + gMoveDescription_FireBlast, + gMoveDescription_Waterfall, + gMoveDescription_Clamp, + gMoveDescription_Swift, + gMoveDescription_SkullBash, + gMoveDescription_SpikeCannon, + gMoveDescription_Constrict, + gMoveDescription_Amnesia, + gMoveDescription_Kinesis, + gMoveDescription_SoftBoiled, + gMoveDescription_HiJumpKick, + gMoveDescription_Glare, + gMoveDescription_DreamEater, + gMoveDescription_PoisonGas, + gMoveDescription_Barrage, + gMoveDescription_LeechLife, + gMoveDescription_LovelyKiss, + gMoveDescription_SkyAttack, + gMoveDescription_Transform, + gMoveDescription_Bubble, + gMoveDescription_DizzyPunch, + gMoveDescription_Spore, + gMoveDescription_Flash, + gMoveDescription_Psywave, + gMoveDescription_Splash, + gMoveDescription_AcidArmor, + gMoveDescription_Crabhammer, + gMoveDescription_Explosion, + gMoveDescription_FurySwipes, + gMoveDescription_Bonemerang, + gMoveDescription_Rest, + gMoveDescription_RockSlide, + gMoveDescription_HyperFang, + gMoveDescription_Sharpen, + gMoveDescription_Conversion, + gMoveDescription_TriAttack, + gMoveDescription_SuperFang, + gMoveDescription_Slash, + gMoveDescription_Substitute, + gMoveDescription_Struggle, + gMoveDescription_Sketch, + gMoveDescription_TripleKick, + gMoveDescription_Thief, + gMoveDescription_SpiderWeb, + gMoveDescription_MindReader, + gMoveDescription_Nightmare, + gMoveDescription_FlameWheel, + gMoveDescription_Snore, + gMoveDescription_Curse, + gMoveDescription_Flail, + gMoveDescription_Conversion2, + gMoveDescription_Aeroblast, + gMoveDescription_CottonSpore, + gMoveDescription_Reversal, + gMoveDescription_Spite, + gMoveDescription_PowderSnow, + gMoveDescription_Protect, + gMoveDescription_MachPunch, + gMoveDescription_ScaryFace, + gMoveDescription_FaintAttack, + gMoveDescription_SweetKiss, + gMoveDescription_BellyDrum, + gMoveDescription_SludgeBomb, + gMoveDescription_MudSlap, + gMoveDescription_Octazooka, + gMoveDescription_Spikes, + gMoveDescription_ZapCannon, + gMoveDescription_Foresight, + gMoveDescription_DestinyBond, + gMoveDescription_PerishSong, + gMoveDescription_IcyWind, + gMoveDescription_Detect, + gMoveDescription_BoneRush, + gMoveDescription_LockOn, + gMoveDescription_Outrage, + gMoveDescription_Sandstorm, + gMoveDescription_GigaDrain, + gMoveDescription_Endure, + gMoveDescription_Charm, + gMoveDescription_Rollout, + gMoveDescription_FalseSwipe, + gMoveDescription_Swagger, + gMoveDescription_MilkDrink, + gMoveDescription_Spark, + gMoveDescription_FuryCutter, + gMoveDescription_SteelWing, + gMoveDescription_MeanLook, + gMoveDescription_Attract, + gMoveDescription_SleepTalk, + gMoveDescription_HealBell, + gMoveDescription_Return, + gMoveDescription_Present, + gMoveDescription_Frustration, + gMoveDescription_Safeguard, + gMoveDescription_PainSplit, + gMoveDescription_SacredFire, + gMoveDescription_Magnitude, + gMoveDescription_DynamicPunch, + gMoveDescription_Megahorn, + gMoveDescription_DragonBreath, + gMoveDescription_BatonPass, + gMoveDescription_Encore, + gMoveDescription_Pursuit, + gMoveDescription_RapidSpin, + gMoveDescription_SweetScent, + gMoveDescription_IronTail, + gMoveDescription_MetalClaw, + gMoveDescription_VitalThrow, + gMoveDescription_MorningSun, + gMoveDescription_Synthesis, + gMoveDescription_Moonlight, + gMoveDescription_HiddenPower, + gMoveDescription_CrossChop, + gMoveDescription_Twister, + gMoveDescription_RainDance, + gMoveDescription_SunnyDay, + gMoveDescription_Crunch, + gMoveDescription_MirrorCoat, + gMoveDescription_PsychUp, + gMoveDescription_ExtremeSpeed, + gMoveDescription_AncientPower, + gMoveDescription_ShadowBall, + gMoveDescription_FutureSight, + gMoveDescription_RockSmash, + gMoveDescription_Whirlpool, + gMoveDescription_BeatUp, + gMoveDescription_FakeOut, + gMoveDescription_Uproar, + gMoveDescription_Stockpile, + gMoveDescription_SpitUp, + gMoveDescription_Swallow, + gMoveDescription_HeatWave, + gMoveDescription_Hail, + gMoveDescription_Torment, + gMoveDescription_Flatter, + gMoveDescription_WillOWisp, + gMoveDescription_Memento, + gMoveDescription_Facade, + gMoveDescription_FocusPunch, + gMoveDescription_SmellingSalt, + gMoveDescription_FollowMe, + gMoveDescription_NaturePower, + gMoveDescription_Charge, + gMoveDescription_Taunt, + gMoveDescription_HelpingHand, + gMoveDescription_Trick, + gMoveDescription_RolePlay, + gMoveDescription_Wish, + gMoveDescription_Assist, + gMoveDescription_Ingrain, + gMoveDescription_Superpower, + gMoveDescription_MagicCoat, + gMoveDescription_Recycle, + gMoveDescription_Revenge, + gMoveDescription_BrickBreak, + gMoveDescription_Yawn, + gMoveDescription_KnockOff, + gMoveDescription_Endeavor, + gMoveDescription_Eruption, + gMoveDescription_SkillSwap, + gMoveDescription_Imprison, + gMoveDescription_Refresh, + gMoveDescription_Grudge, + gMoveDescription_Snatch, + gMoveDescription_SecretPower, + gMoveDescription_Dive, + gMoveDescription_ArmThrust, + gMoveDescription_Camouflage, + gMoveDescription_TailGlow, + gMoveDescription_LusterPurge, + gMoveDescription_MistBall, + gMoveDescription_FeatherDance, + gMoveDescription_TeeterDance, + gMoveDescription_BlazeKick, + gMoveDescription_MudSport, + gMoveDescription_IceBall, + gMoveDescription_NeedleArm, + gMoveDescription_SlackOff, + gMoveDescription_HyperVoice, + gMoveDescription_PoisonFang, + gMoveDescription_CrushClaw, + gMoveDescription_BlastBurn, + gMoveDescription_HydroCannon, + gMoveDescription_MeteorMash, + gMoveDescription_Astonish, + gMoveDescription_WeatherBall, + gMoveDescription_Aromatherapy, + gMoveDescription_FakeTears, + gMoveDescription_AirCutter, + gMoveDescription_Overheat, + gMoveDescription_OdorSleuth, + gMoveDescription_RockTomb, + gMoveDescription_SilverWind, + gMoveDescription_MetalSound, + gMoveDescription_GrassWhistle, + gMoveDescription_Tickle, + gMoveDescription_CosmicPower, + gMoveDescription_WaterSpout, + gMoveDescription_SignalBeam, + gMoveDescription_ShadowPunch, + gMoveDescription_Extrasensory, + gMoveDescription_SkyUppercut, + gMoveDescription_SandTomb, + gMoveDescription_SheerCold, + gMoveDescription_MuddyWater, + gMoveDescription_BulletSeed, + gMoveDescription_AerialAce, + gMoveDescription_IcicleSpear, + gMoveDescription_IronDefense, + gMoveDescription_Block, + gMoveDescription_Howl, + gMoveDescription_DragonClaw, + gMoveDescription_FrenzyPlant, + gMoveDescription_BulkUp, + gMoveDescription_Bounce, + gMoveDescription_MudShot, + gMoveDescription_PoisonTail, + gMoveDescription_Covet, + gMoveDescription_VoltTackle, + gMoveDescription_MagicalLeaf, + gMoveDescription_WaterSport, + gMoveDescription_CalmMind, + gMoveDescription_LeafBlade, + gMoveDescription_DragonDance, + gMoveDescription_RockBlast, + gMoveDescription_ShockWave, + gMoveDescription_WaterPulse, + gMoveDescription_DoomDesire, + gMoveDescription_PsychoBoost, +]; diff --git a/src/data/text/move_descriptions_en.h b/src/data/text/move_descriptions_en.h new file mode 100644 index 000000000..0bfb31ff1 --- /dev/null +++ b/src/data/text/move_descriptions_en.h @@ -0,0 +1,1772 @@ +static const u8 gMoveDescription_Pound[] = _( + "Pounds the foe with\n" + "forelegs or tail."); + +static const u8 gMoveDescription_KarateChop[] = _( + "A chopping attack with a\n" + "high critical-hit ratio."); + +static const u8 gMoveDescription_DoubleSlap[] = _( + "Repeatedly slaps the foe\n" + "2 to 5 times."); + +static const u8 gMoveDescription_CometPunch[] = _( + "Repeatedly punches the foe\n" + "2 to 5 times."); + +static const u8 gMoveDescription_MegaPunch[] = _( + "A strong punch thrown with\n" + "incredible power."); + +static const u8 gMoveDescription_PayDay[] = _( + "Throws coins at the foe.\n" + "Money is recovered after."); + +static const u8 gMoveDescription_FirePunch[] = _( + "A fiery punch that may burn\n" + "the foe."); + +static const u8 gMoveDescription_IcePunch[] = _( + "An icy punch that may\n" + "freeze the foe."); + +static const u8 gMoveDescription_ThunderPunch[] = _( + "An electrified punch that\n" + "may paralyze the foe."); + +static const u8 gMoveDescription_Scratch[] = _( + "Scratches the foe with\n" + "sharp claws."); + +static const u8 gMoveDescription_ViceGrip[] = _( + "Grips the foe with large and\n" + "powerful pincers."); + +static const u8 gMoveDescription_Guillotine[] = _( + "A powerful pincer attack\n" + "that may cause fainting."); + +static const u8 gMoveDescription_RazorWind[] = _( + "A 2-turn move that strikes\n" + "the foe on the 2nd turn."); + +static const u8 gMoveDescription_SwordsDance[] = _( + "A fighting dance that\n" + "sharply raises ATTACK."); + +static const u8 gMoveDescription_Cut[] = _( + "Cuts the foe with sharp\n" + "scythes, claws, etc."); + +static const u8 gMoveDescription_Gust[] = _( + "Strikes the foe with a gust\n" + "of wind whipped up by wings."); + +static const u8 gMoveDescription_WingAttack[] = _( + "Strikes the foe with wings\n" + "spread wide."); + +static const u8 gMoveDescription_Whirlwind[] = _( + "Blows away the foe with\n" + "wind and ends the battle."); + +static const u8 gMoveDescription_Fly[] = _( + "Flies up on the first turn,\n" + "then strikes the next turn."); + +static const u8 gMoveDescription_Bind[] = _( + "Binds and squeezes the foe\n" + "for 2 to 5 turns."); + +static const u8 gMoveDescription_Slam[] = _( + "Slams the foe with a long\n" + "tail, vine, etc."); + +static const u8 gMoveDescription_VineWhip[] = _( + "Strikes the foe with\n" + "slender, whiplike vines."); + +static const u8 gMoveDescription_Stomp[] = _( + "Stomps the enemy with a big\n" + "foot. May cause flinching."); + +static const u8 gMoveDescription_DoubleKick[] = _( + "A double-kicking attack\n" + "that strikes the foe twice."); + +static const u8 gMoveDescription_MegaKick[] = _( + "An extremely powerful kick\n" + "with intense force."); + +static const u8 gMoveDescription_JumpKick[] = _( + "A strong jumping kick. May\n" + "miss and hurt the kicker."); + +static const u8 gMoveDescription_RollingKick[] = _( + "A fast kick delivered from\n" + "a rapid spin."); + +static const u8 gMoveDescription_SandAttack[] = _( + "Reduces the foe’s accuracy\n" + "by hurling sand in its face."); + +static const u8 gMoveDescription_Headbutt[] = _( + "A ramming attack that may\n" + "cause flinching."); + +static const u8 gMoveDescription_HornAttack[] = _( + "Jabs the foe with sharp\n" + "horns."); + +static const u8 gMoveDescription_FuryAttack[] = _( + "Jabs the foe 2 to 5 times\n" + "with sharp horns, etc."); + +static const u8 gMoveDescription_HornDrill[] = _( + "A one-hit KO attack that\n" + "uses a horn like a drill."); + +static const u8 gMoveDescription_Tackle[] = _( + "Charges the foe with a full-\n" + "body tackle."); + +static const u8 gMoveDescription_BodySlam[] = _( + "A full-body slam that may\n" + "cause paralysis."); + +static const u8 gMoveDescription_Wrap[] = _( + "Wraps and squeezes the foe\n" + "2 to 5 times with vines, etc."); + +static const u8 gMoveDescription_TakeDown[] = _( + "A reckless charge attack\n" + "that also hurts the user."); + +static const u8 gMoveDescription_Thrash[] = _( + "A rampage of 2 to 3 turns\n" + "that confuses the user."); + +static const u8 gMoveDescription_DoubleEdge[] = _( + "A life-risking tackle that\n" + "also hurts the user."); + +static const u8 gMoveDescription_TailWhip[] = _( + "Wags the tail to lower the\n" + "foe’s DEFENSE."); + +static const u8 gMoveDescription_PoisonSting[] = _( + "A toxic attack with barbs,\n" + "etc., that may poison."); + +static const u8 gMoveDescription_Twineedle[] = _( + "Stingers on the forelegs\n" + "jab the foe twice."); + +static const u8 gMoveDescription_PinMissile[] = _( + "Sharp pins are fired to\n" + "strike 2 to 5 times."); + +static const u8 gMoveDescription_Leer[] = _( + "Frightens the foe with a\n" + "leer to lower DEFENSE."); + +static const u8 gMoveDescription_Bite[] = _( + "Bites with vicious fangs.\n" + "May cause flinching."); + +static const u8 gMoveDescription_Growl[] = _( + "Growls cutely to reduce the\n" + "foe’s ATTACK."); + +static const u8 gMoveDescription_Roar[] = _( + "Makes the foe flee to end\n" + "the battle."); + +static const u8 gMoveDescription_Sing[] = _( + "A soothing song lulls the\n" + "foe into a deep slumber."); + +static const u8 gMoveDescription_Supersonic[] = _( + "Emits bizarre sound waves\n" + "that may confuse the foe."); + +static const u8 gMoveDescription_SonicBoom[] = _( + "Launches shock waves that\n" + "always inflict 20 HP damage."); + +static const u8 gMoveDescription_Disable[] = _( + "Psychically disables one of\n" + "the foe’s moves."); + +static const u8 gMoveDescription_Acid[] = _( + "Sprays a hide-melting acid.\n" + "May lower DEFENSE."); + +static const u8 gMoveDescription_Ember[] = _( + "A weak fire attack that may\n" + "inflict a burn."); + +static const u8 gMoveDescription_Flamethrower[] = _( + "A powerful fire attack that\n" + "may inflict a burn."); + +static const u8 gMoveDescription_Mist[] = _( + "Creates a mist that stops\n" + "reduction of abilities."); + +static const u8 gMoveDescription_WaterGun[] = _( + "Squirts water to attack\n" + "the foe."); + +static const u8 gMoveDescription_HydroPump[] = _( + "Blasts water at high power\n" + "to strike the foe."); + +static const u8 gMoveDescription_Surf[] = _( + "Creates a huge wave, then\n" + "crashes it down on the foe."); + +static const u8 gMoveDescription_IceBeam[] = _( + "Blasts the foe with an icy\n" + "beam that may freeze it."); + +static const u8 gMoveDescription_Blizzard[] = _( + "Hits the foe with an icy\n" + "storm that may freeze it."); + +static const u8 gMoveDescription_Psybeam[] = _( + "Fires a peculiar ray that\n" + "may confuse the foe."); + +static const u8 gMoveDescription_BubbleBeam[] = _( + "Forcefully sprays bubbles\n" + "that may lower SPEED."); + +static const u8 gMoveDescription_AuroraBeam[] = _( + "Fires a rainbow-colored\n" + "beam that may lower ATTACK."); + +static const u8 gMoveDescription_HyperBeam[] = _( + "Powerful, but leaves the\n" + "user immobile the next turn."); + +static const u8 gMoveDescription_Peck[] = _( + "Attacks the foe with a\n" + "jabbing beak, etc."); + +static const u8 gMoveDescription_DrillPeck[] = _( + "A corkscrewing attack with\n" + "the beak acting as a drill."); + +static const u8 gMoveDescription_Submission[] = _( + "A reckless body slam that\n" + "also hurts the user."); + +static const u8 gMoveDescription_LowKick[] = _( + "A kick that inflicts more\n" + "damage on heavier foes."); + +static const u8 gMoveDescription_Counter[] = _( + "Retaliates any physical hit\n" + "with double the power."); + +static const u8 gMoveDescription_SeismicToss[] = _( + "Inflicts damage identical\n" + "to the user’s level."); + +static const u8 gMoveDescription_Strength[] = _( + "Builds enormous power,\n" + "then slams the foe."); + +static const u8 gMoveDescription_Absorb[] = _( + "An attack that absorbs\n" + "half the damage inflicted."); + +static const u8 gMoveDescription_MegaDrain[] = _( + "An attack that absorbs\n" + "half the damage inflicted."); + +static const u8 gMoveDescription_LeechSeed[] = _( + "Plants a seed on the foe to\n" + "steal HP on every turn."); + +static const u8 gMoveDescription_Growth[] = _( + "Forces the body to grow\n" + "and heightens SP. ATK."); + +static const u8 gMoveDescription_RazorLeaf[] = _( + "Cuts the enemy with leaves.\n" + "High critical-hit ratio."); + +static const u8 gMoveDescription_SolarBeam[] = _( + "Absorbs light in one turn,\n" + "then attacks next turn."); + +static const u8 gMoveDescription_PoisonPowder[] = _( + "Scatters a toxic powder\n" + "that may poison the foe."); + +static const u8 gMoveDescription_StunSpore[] = _( + "Scatters a powder that may\n" + "paralyze the foe."); + +static const u8 gMoveDescription_SleepPowder[] = _( + "Scatters a powder that may\n" + "cause the foe to sleep."); + +static const u8 gMoveDescription_PetalDance[] = _( + "A rampage of 2 to 3 turns\n" + "that confuses the user."); + +static const u8 gMoveDescription_StringShot[] = _( + "Binds the foe with string\n" + "to reduce its SPEED."); + +static const u8 gMoveDescription_DragonRage[] = _( + "Launches shock waves that\n" + "always inflict 40 HP damage."); + +static const u8 gMoveDescription_FireSpin[] = _( + "Traps the foe in a ring of\n" + "fire for 2 to 5 turns."); + +static const u8 gMoveDescription_ThunderShock[] = _( + "An electrical attack that\n" + "may paralyze the foe."); + +static const u8 gMoveDescription_Thunderbolt[] = _( + "A strong electrical attack\n" + "that may paralyze the foe."); + +static const u8 gMoveDescription_ThunderWave[] = _( + "A weak jolt of electricity\n" + "that paralyzes the foe."); + +static const u8 gMoveDescription_Thunder[] = _( + "A lightning attack that may\n" + "cause paralysis."); + +static const u8 gMoveDescription_RockThrow[] = _( + "Throws small rocks to\n" + "strike the foe."); + +static const u8 gMoveDescription_Earthquake[] = _( + "A powerful quake, but has\n" + "no effect on flying foes."); + +static const u8 gMoveDescription_Fissure[] = _( + "A one-hit KO move that\n" + "drops the foe in a fissure."); + +static const u8 gMoveDescription_Dig[] = _( + "Digs underground the first\n" + "turn and strikes next turn."); + +static const u8 gMoveDescription_Toxic[] = _( + "Poisons the foe with an\n" + "intensifying toxin."); + +static const u8 gMoveDescription_Confusion[] = _( + "A psychic attack that may\n" + "cause confusion."); + +static const u8 gMoveDescription_Psychic[] = _( + "A powerful psychic attack\n" + "that may lower SP. DEF."); + +static const u8 gMoveDescription_Hypnosis[] = _( + "A hypnotizing move that\n" + "may induce sleep."); + +static const u8 gMoveDescription_Meditate[] = _( + "Meditates in a peaceful\n" + "fashion to raise ATTACK."); + +static const u8 gMoveDescription_Agility[] = _( + "Relaxes the body to sharply\n" + "boost SPEED."); + +static const u8 gMoveDescription_QuickAttack[] = _( + "An extremely fast attack\n" + "that always strikes first."); + +static const u8 gMoveDescription_Rage[] = _( + "Raises the user’s ATTACK\n" + "every time it is hit."); + +static const u8 gMoveDescription_Teleport[] = _( + "A psychic move for fleeing\n" + "from battle instantly."); + +static const u8 gMoveDescription_NightShade[] = _( + "Inflicts damage identical\n" + "to the user’s level."); + +static const u8 gMoveDescription_Mimic[] = _( + "Copies a move used by the\n" + "foe during one battle."); + +static const u8 gMoveDescription_Screech[] = _( + "Emits a screech to sharply\n" + "reduce the foe’s DEFENSE."); + +static const u8 gMoveDescription_DoubleTeam[] = _( + "Creates illusory copies to\n" + "raise evasiveness."); + +static const u8 gMoveDescription_Recover[] = _( + "Recovers up to half the\n" + "user’s maximum HP."); + +static const u8 gMoveDescription_Harden[] = _( + "Stiffens the body’s \n" + "muscles to raise DEFENSE."); + +static const u8 gMoveDescription_Minimize[] = _( + "Minimizes the user’s size\n" + "to raise evasiveness."); + +static const u8 gMoveDescription_Smokescreen[] = _( + "Lowers the foe’s accuracy\n" + "using smoke, ink, etc."); + +static const u8 gMoveDescription_ConfuseRay[] = _( + "A sinister ray that\n" + "confuses the foe."); + +static const u8 gMoveDescription_Withdraw[] = _( + "Withdraws the body into its\n" + "hard shell to raise DEFENSE."); + +static const u8 gMoveDescription_DefenseCurl[] = _( + "Curls up to conceal weak\n" + "spots and raise DEFENSE."); + +static const u8 gMoveDescription_Barrier[] = _( + "Creates a barrier that\n" + "sharply raises DEFENSE."); + +static const u8 gMoveDescription_LightScreen[] = _( + "Creates a wall of light that\n" + "lowers SP. ATK damage."); + +static const u8 gMoveDescription_Haze[] = _( + "Creates a black haze that\n" + "eliminates all stat changes."); + +static const u8 gMoveDescription_Reflect[] = _( + "Creates a wall of light that\n" + "weakens physical attacks."); + +static const u8 gMoveDescription_FocusEnergy[] = _( + "Focuses power to raise the\n" + "critical-hit ratio."); + +static const u8 gMoveDescription_Bide[] = _( + "Endures attack for 2\n" + "turns to retaliate double."); + +static const u8 gMoveDescription_Metronome[] = _( + "Waggles a finger to use any\n" + "POKéMON move at random."); + +static const u8 gMoveDescription_MirrorMove[] = _( + "Counters the foe’s attack\n" + "with the same move."); + +static const u8 gMoveDescription_SelfDestruct[] = _( + "Inflicts severe damage but\n" + "makes the user faint."); + +static const u8 gMoveDescription_EggBomb[] = _( + "An egg is forcibly hurled at\n" + "the foe."); + +static const u8 gMoveDescription_Lick[] = _( + "Licks with a long tongue to\n" + "injure. May also paralyze."); + +static const u8 gMoveDescription_Smog[] = _( + "An exhaust-gas attack\n" + "that may also poison."); + +static const u8 gMoveDescription_Sludge[] = _( + "Sludge is hurled to inflict\n" + "damage. May also poison."); + +static const u8 gMoveDescription_BoneClub[] = _( + "Clubs the foe with a bone.\n" + "May cause flinching."); + +static const u8 gMoveDescription_FireBlast[] = _( + "A fiery blast that scorches\n" + "all. May cause a burn."); + +static const u8 gMoveDescription_Waterfall[] = _( + "Charges the foe with speed\n" + "to climb waterfalls."); + +static const u8 gMoveDescription_Clamp[] = _( + "Traps and squeezes the\n" + "foe for 2 to 5 turns."); + +static const u8 gMoveDescription_Swift[] = _( + "Sprays star-shaped rays\n" + "that never miss."); + +static const u8 gMoveDescription_SkullBash[] = _( + "Tucks in the head, then\n" + "attacks on the next turn."); + +static const u8 gMoveDescription_SpikeCannon[] = _( + "Launches sharp spikes that\n" + "strike 2 to 5 times."); + +static const u8 gMoveDescription_Constrict[] = _( + "Constricts to inflict pain.\n" + "May lower SPEED."); + +static const u8 gMoveDescription_Amnesia[] = _( + "Forgets about something\n" + "and sharply raises SP. DEF."); + +static const u8 gMoveDescription_Kinesis[] = _( + "Distracts the foe.\n" + "May lower accuracy."); + +static const u8 gMoveDescription_SoftBoiled[] = _( + "Recovers up to half the\n" + "user’s maximum HP."); + +static const u8 gMoveDescription_HiJumpKick[] = _( + "A jumping knee kick. If it\n" + "misses, the user is hurt."); + +static const u8 gMoveDescription_Glare[] = _( + "Intimidates and frightens\n" + "the foe into paralysis."); + +static const u8 gMoveDescription_DreamEater[] = _( + "Takes one half the damage\n" + "inflicted on a sleeping foe."); + +static const u8 gMoveDescription_PoisonGas[] = _( + "Envelops the foe in a toxic\n" + "gas that may poison."); + +static const u8 gMoveDescription_Barrage[] = _( + "Hurls round objects at the\n" + "foe 2 to 5 times."); + +static const u8 gMoveDescription_LeechLife[] = _( + "An attack that steals half\n" + "the damage inflicted."); + +static const u8 gMoveDescription_LovelyKiss[] = _( + "Demands a kiss with a scary\n" + "face that induces sleep."); + +static const u8 gMoveDescription_SkyAttack[] = _( + "Searches out weak spots,\n" + "then strikes the next turn."); + +static const u8 gMoveDescription_Transform[] = _( + "Alters the user’s cells to\n" + "become a copy of the foe."); + +static const u8 gMoveDescription_Bubble[] = _( + "An attack using bubbles.\n" + "May lower the foe’s SPEED."); + +static const u8 gMoveDescription_DizzyPunch[] = _( + "A rhythmic punch that may\n" + "confuse the foe."); + +static const u8 gMoveDescription_Spore[] = _( + "Scatters a cloud of spores\n" + "that always induce sleep."); + +static const u8 gMoveDescription_Flash[] = _( + "Looses a powerful blast of\n" + "light that cuts accuracy."); + +static const u8 gMoveDescription_Psywave[] = _( + "Attacks with a psychic\n" + "wave of varying intensity."); + +static const u8 gMoveDescription_Splash[] = _( + "It’s just a splash...\n" + "Has no effect whatsoever."); + +static const u8 gMoveDescription_AcidArmor[] = _( + "Liquifies the user’s body\n" + "to sharply raise DEFENSE."); + +static const u8 gMoveDescription_Crabhammer[] = _( + "Hammers with a pincer. Has a\n" + "high critical-hit ratio."); + +static const u8 gMoveDescription_Explosion[] = _( + "Inflicts severe damage but\n" + "makes the user faint."); + +static const u8 gMoveDescription_FurySwipes[] = _( + "Rakes the foe with sharp\n" + "claws, etc., 2 to 5 times."); + +static const u8 gMoveDescription_Bonemerang[] = _( + "Throws a bone boomerang\n" + "that strikes twice."); + +static const u8 gMoveDescription_Rest[] = _( + "The user sleeps for 2 turns,\n" + "restoring HP and status."); + +static const u8 gMoveDescription_RockSlide[] = _( + "Large boulders are hurled.\n" + "May cause flinching."); + +static const u8 gMoveDescription_HyperFang[] = _( + "Attacks with sharp fangs.\n" + "May cause flinching."); + +static const u8 gMoveDescription_Sharpen[] = _( + "Reduces the polygon count\n" + "and raises ATTACK."); + +static const u8 gMoveDescription_Conversion[] = _( + "Changes the user’s type\n" + "into an own move’s type."); + +static const u8 gMoveDescription_TriAttack[] = _( + "Fires three types of beams\n" + "at the same time."); + +static const u8 gMoveDescription_SuperFang[] = _( + "Attacks with sharp fangs\n" + "and cuts half the foe’s HP."); + +static const u8 gMoveDescription_Slash[] = _( + "Slashes with claws, etc. Has\n" + "a high critical-hit ratio."); + +static const u8 gMoveDescription_Substitute[] = _( + "Creates a decoy using 1/4\n" + "of the user’s maximum HP."); + +static const u8 gMoveDescription_Struggle[] = _( + "Used only if all PP are gone.\n" + "Also hurts the user a little."); + +static const u8 gMoveDescription_Sketch[] = _( + "Copies the foe’s last move\n" + "permanently."); + +static const u8 gMoveDescription_TripleKick[] = _( + "Kicks the foe 3 times in a\n" + "row with rising intensity."); + +static const u8 gMoveDescription_Thief[] = _( + "While attacking, it may\n" + "steal the foe’s held item."); + +static const u8 gMoveDescription_SpiderWeb[] = _( + "Ensnares the foe to stop it\n" + "from fleeing or switching."); + +static const u8 gMoveDescription_MindReader[] = _( + "Senses the foe’s action to\n" + "ensure the next move’s hit."); + +static const u8 gMoveDescription_Nightmare[] = _( + "Inflicts 1/4 damage on a\n" + "sleeping foe every turn."); + +static const u8 gMoveDescription_FlameWheel[] = _( + "A fiery charge attack that\n" + "may inflict a burn."); + +static const u8 gMoveDescription_Snore[] = _( + "A loud attack that can be\n" + "used only while asleep."); + +static const u8 gMoveDescription_Curse[] = _( + "A move that functions\n" + "differently for GHOSTS."); + +static const u8 gMoveDescription_Flail[] = _( + "Inflicts more damage when\n" + "the user’s HP is down."); + +static const u8 gMoveDescription_Conversion2[] = _( + "Makes the user resistant\n" + "to the last attack’s type."); + +static const u8 gMoveDescription_Aeroblast[] = _( + "Launches a vacuumed blast.\n" + "High critical-hit ratio."); + +static const u8 gMoveDescription_CottonSpore[] = _( + "Spores cling to the foe,\n" + "sharply reducing SPEED."); + +static const u8 gMoveDescription_Reversal[] = _( + "Inflicts more damage when\n" + "the user’s HP is down."); + +static const u8 gMoveDescription_Spite[] = _( + "Spitefully cuts the PP\n" + "of the foe’s last move."); + +static const u8 gMoveDescription_PowderSnow[] = _( + "Blasts the foe with a snowy\n" + "gust. May cause freezing."); + +static const u8 gMoveDescription_Protect[] = _( + "Evades attack, but may fail\n" + "if used in succession."); + +static const u8 gMoveDescription_MachPunch[] = _( + "A punch is thrown at wicked\n" + "speed to strike first."); + +static const u8 gMoveDescription_ScaryFace[] = _( + "Frightens with a scary face\n" + "to sharply reduce SPEED."); + +static const u8 gMoveDescription_FaintAttack[] = _( + "Draws the foe close, then\n" + "strikes without fail."); + +static const u8 gMoveDescription_SweetKiss[] = _( + "Demands a kiss with a cute\n" + "look. May cause confusion."); + +static const u8 gMoveDescription_BellyDrum[] = _( + "Maximizes ATTACK while\n" + "sacrificing HP."); + +static const u8 gMoveDescription_SludgeBomb[] = _( + "Sludge is hurled to inflict\n" + "damage. May also poison."); + +static const u8 gMoveDescription_MudSlap[] = _( + "Hurls mud in the foe’s face\n" + "to reduce its accuracy."); + +static const u8 gMoveDescription_Octazooka[] = _( + "Fires a lump of ink to\n" + "damage and cut accuracy."); + +static const u8 gMoveDescription_Spikes[] = _( + "Sets spikes that hurt a \n" + "foe switching out."); + +static const u8 gMoveDescription_ZapCannon[] = _( + "Powerful and sure to cause\n" + "paralysis, but inaccurate."); + +static const u8 gMoveDescription_Foresight[] = _( + "Negates the foe’s efforts\n" + "to heighten evasiveness."); + +static const u8 gMoveDescription_DestinyBond[] = _( + "If the user faints, the foe\n" + "is also made to faint."); + +static const u8 gMoveDescription_PerishSong[] = _( + "Any POKéMON hearing this\n" + "song faints in 3 turns."); + +static const u8 gMoveDescription_IcyWind[] = _( + "A chilling attack that\n" + "lowers the foe’s SPEED."); + +static const u8 gMoveDescription_Detect[] = _( + "Evades attack, but may fail\n" + "if used in succession."); + +static const u8 gMoveDescription_BoneRush[] = _( + "Strikes the foe with a bone\n" + "in hand 2 to 5 times."); + +static const u8 gMoveDescription_LockOn[] = _( + "Locks on to the foe to\n" + "ensure the next move hits."); + +static const u8 gMoveDescription_Outrage[] = _( + "A rampage of 2 to 3 turns\n" + "that confuses the user."); + +static const u8 gMoveDescription_Sandstorm[] = _( + "Causes a sandstorm that\n" + "rages for several turns."); + +static const u8 gMoveDescription_GigaDrain[] = _( + "An attack that steals half\n" + "the damage inflicted."); + +static const u8 gMoveDescription_Endure[] = _( + "Endures any attack for\n" + "1 turn, leaving at least 1HP."); + +static const u8 gMoveDescription_Charm[] = _( + "Charms the foe and sharply\n" + "reduces its ATTACK."); + +static const u8 gMoveDescription_Rollout[] = _( + "An attack lasting 5 turns\n" + "with rising intensity."); + +static const u8 gMoveDescription_FalseSwipe[] = _( + "An attack that leaves the\n" + "foe with at least 1 HP."); + +static const u8 gMoveDescription_Swagger[] = _( + "Confuses the foe, but also\n" + "sharply raises ATTACK."); + +static const u8 gMoveDescription_MilkDrink[] = _( + "Recovers up to half the\n" + "user’s maximum HP."); + +static const u8 gMoveDescription_Spark[] = _( + "An electrified tackle that\n" + "may paralyze the foe."); + +static const u8 gMoveDescription_FuryCutter[] = _( + "An attack that intensifies\n" + "on each successive hit."); + +static const u8 gMoveDescription_SteelWing[] = _( + "Strikes the foe with hard\n" + "wings spread wide."); + +static const u8 gMoveDescription_MeanLook[] = _( + "Fixes the foe with a mean\n" + "look that prevents escape."); + +static const u8 gMoveDescription_Attract[] = _( + "Makes the opposite gender\n" + "less likely to attack."); + +static const u8 gMoveDescription_SleepTalk[] = _( + "Uses an own move randomly\n" + "while asleep."); + +static const u8 gMoveDescription_HealBell[] = _( + "Chimes soothingly to heal\n" + "all status abnormalities."); + +static const u8 gMoveDescription_Return[] = _( + "An attack that increases\n" + "in power with friendship."); + +static const u8 gMoveDescription_Present[] = _( + "A gift in the form of a\n" + "bomb. May restore HP."); + +static const u8 gMoveDescription_Frustration[] = _( + "An attack that is stronger\n" + "if the TRAINER is disliked."); + +static const u8 gMoveDescription_Safeguard[] = _( + "A mystical force prevents\n" + "all status problems."); + +static const u8 gMoveDescription_PainSplit[] = _( + "Adds the user and foe’s HP,\n" + "then shares them equally."); + +static const u8 gMoveDescription_SacredFire[] = _( + "A mystical fire attack that\n" + "may inflict a burn."); + +static const u8 gMoveDescription_Magnitude[] = _( + "A ground-shaking attack\n" + "of random intensity."); + +static const u8 gMoveDescription_DynamicPunch[] = _( + "Powerful and sure to cause\n" + "confusion, but inaccurate."); + +static const u8 gMoveDescription_Megahorn[] = _( + "A brutal ramming attack\n" + "using out-thrust horns."); + +static const u8 gMoveDescription_DragonBreath[] = _( + "Strikes the foe with an\n" + "incredible blast of breath."); + +static const u8 gMoveDescription_BatonPass[] = _( + "Switches out the user while\n" + "keeping effects in play."); + +static const u8 gMoveDescription_Encore[] = _( + "Makes the foe repeat its\n" + "last move over 2 to 6 turns."); + +static const u8 gMoveDescription_Pursuit[] = _( + "Inflicts bad damage if used\n" + "on a foe switching out."); + +static const u8 gMoveDescription_RapidSpin[] = _( + "Spins the body at high\n" + "speed to strike the foe."); + +static const u8 gMoveDescription_SweetScent[] = _( + "Allures the foe to reduce\n" + "evasiveness."); + +static const u8 gMoveDescription_IronTail[] = _( + "Attacks with a rock-hard\n" + "tail. May lower DEFENSE."); + +static const u8 gMoveDescription_MetalClaw[] = _( + "A claw attack that may\n" + "raise the user’s ATTACK."); + +static const u8 gMoveDescription_VitalThrow[] = _( + "Makes the user’s move last,\n" + "but it never misses."); + +static const u8 gMoveDescription_MorningSun[] = _( + "Restores HP. The amount\n" + "varies with the weather."); + +static const u8 gMoveDescription_Synthesis[] = _( + "Restores HP. The amount\n" + "varies with the weather."); + +static const u8 gMoveDescription_Moonlight[] = _( + "Restores HP. The amount\n" + "varies with the weather."); + +static const u8 gMoveDescription_HiddenPower[] = _( + "The effectiveness varies\n" + "with the user."); + +static const u8 gMoveDescription_CrossChop[] = _( + "A double-chopping attack.\n" + "High critical-hit ratio."); + +static const u8 gMoveDescription_Twister[] = _( + "Whips up a vicious twister\n" + "to tear at the foe."); + +static const u8 gMoveDescription_RainDance[] = _( + "Boosts the power of WATER-\n" + "type moves for 5 turns."); + +static const u8 gMoveDescription_SunnyDay[] = _( + "Boosts the power of FIRE-\n" + "type moves for 5 turns."); + +static const u8 gMoveDescription_Crunch[] = _( + "Crunches with sharp fangs.\n" + "May lower SP. DEF."); + +static const u8 gMoveDescription_MirrorCoat[] = _( + "Counters the foe’s special\n" + "attack at double the power."); + +static const u8 gMoveDescription_PsychUp[] = _( + "Copies the foe’s effect(s)\n" + "and gives to the user."); + +static const u8 gMoveDescription_ExtremeSpeed[] = _( + "An extremely fast and\n" + "powerful attack."); + +static const u8 gMoveDescription_AncientPower[] = _( + "An attack that may raise\n" + "all stats."); + +static const u8 gMoveDescription_ShadowBall[] = _( + "Hurls a black blob that may\n" + "lower the foe’s SP. DEF."); + +static const u8 gMoveDescription_FutureSight[] = _( + "Heightens inner power to\n" + "strike 2 turns later."); + +static const u8 gMoveDescription_RockSmash[] = _( + "A rock-crushing attack\n" + "that may lower DEFENSE."); + +static const u8 gMoveDescription_Whirlpool[] = _( + "Traps and hurts the foe in\n" + "a whirlpool for 2 to 5 turns."); + +static const u8 gMoveDescription_BeatUp[] = _( + "Summons party POKéMON to\n" + "join in the attack."); + +static const u8 gMoveDescription_FakeOut[] = _( + "A 1st-turn, 1st-strike move\n" + "that causes flinching."); + +static const u8 gMoveDescription_Uproar[] = _( + "Causes an uproar for 2 to 5\n" + "turns and prevents sleep."); + +static const u8 gMoveDescription_Stockpile[] = _( + "Charges up power for up to\n" + "3 turns."); + +static const u8 gMoveDescription_SpitUp[] = _( + "Releases stockpiled power\n" + "(the more the better)."); + +static const u8 gMoveDescription_Swallow[] = _( + "Absorbs stockpiled power\n" + "and restores HP."); + +static const u8 gMoveDescription_HeatWave[] = _( + "Exhales a hot breath on the\n" + "foe. May inflict a burn."); + +static const u8 gMoveDescription_Hail[] = _( + "Summons a hailstorm that\n" + "strikes every turn."); + +static const u8 gMoveDescription_Torment[] = _( + "Torments the foe and stops\n" + "successive use of a move."); + +static const u8 gMoveDescription_Flatter[] = _( + "Confuses the foe, but\n" + "raises its SP. ATK."); + +static const u8 gMoveDescription_WillOWisp[] = _( + "Inflicts a burn on the foe\n" + "with intense fire."); + +static const u8 gMoveDescription_Memento[] = _( + "The user faints and lowers\n" + "the foe’s abilities."); + +static const u8 gMoveDescription_Facade[] = _( + "Boosts ATTACK when burned,\n" + "paralyzed, or poisoned."); + +static const u8 gMoveDescription_FocusPunch[] = _( + "A powerful loyalty attack.\n" + "The user flinches if hit."); + +static const u8 gMoveDescription_SmellingSalt[] = _( + "Powerful against paralyzed\n" + "foes, but also heals them."); + +static const u8 gMoveDescription_FollowMe[] = _( + "Draws attention to make\n" + "foes attack only the user."); + +static const u8 gMoveDescription_NaturePower[] = _( + "The type of attack varies\n" + "depending on the location."); + +static const u8 gMoveDescription_Charge[] = _( + "Charges power to boost the\n" + "electric move used next."); + +static const u8 gMoveDescription_Taunt[] = _( + "Taunts the foe into only\n" + "using attack moves."); + +static const u8 gMoveDescription_HelpingHand[] = _( + "Boosts the power of the\n" + "recipient’s moves."); + +static const u8 gMoveDescription_Trick[] = _( + "Tricks the foe into trading\n" + "held items."); + +static const u8 gMoveDescription_RolePlay[] = _( + "Mimics the target and\n" + "copies its special ability."); + +static const u8 gMoveDescription_Wish[] = _( + "A wish that restores HP.\n" + "It takes time to work."); + +static const u8 gMoveDescription_Assist[] = _( + "Attacks randomly with one\n" + "of the partner’s moves."); + +static const u8 gMoveDescription_Ingrain[] = _( + "Lays roots that restore HP.\n" + "The user can’t switch out."); + +static const u8 gMoveDescription_Superpower[] = _( + "Boosts strength sharply,\n" + "but lowers abilities."); + +static const u8 gMoveDescription_MagicCoat[] = _( + "Reflects special effects\n" + "back to the attacker."); + +static const u8 gMoveDescription_Recycle[] = _( + "Recycles a used item for\n" + "one more use."); + +static const u8 gMoveDescription_Revenge[] = _( + "An attack that gains power\n" + "if injured by the foe."); + +static const u8 gMoveDescription_BrickBreak[] = _( + "Destroys barriers such as\n" + "REFLECT and causes damage."); + +static const u8 gMoveDescription_Yawn[] = _( + "Lulls the foe into yawning,\n" + "then sleeping next turn."); + +static const u8 gMoveDescription_KnockOff[] = _( + "Knocks down the foe’s held\n" + "item to prevent its use."); + +static const u8 gMoveDescription_Endeavor[] = _( + "Gains power if the user’s HP\n" + "is lower than the foe’s HP."); + +static const u8 gMoveDescription_Eruption[] = _( + "The higher the user’s HP,\n" + "the more damage caused."); + +static const u8 gMoveDescription_SkillSwap[] = _( + "The user swaps special\n" + "abilities with the target."); + +static const u8 gMoveDescription_Imprison[] = _( + "Prevents foes from using\n" + "moves known by the user."); + +static const u8 gMoveDescription_Refresh[] = _( + "Heals poisoning, paralysis,\n" + "or a burn."); + +static const u8 gMoveDescription_Grudge[] = _( + "If the user faints, deletes\n" + "the PP of the final move."); + +static const u8 gMoveDescription_Snatch[] = _( + "Steals the effects of the\n" + "move the foe uses next."); + +static const u8 gMoveDescription_SecretPower[] = _( + "An attack with effects\n" + "that vary by location."); + +static const u8 gMoveDescription_Dive[] = _( + "Dives underwater the first\n" + "turn and strikes next turn."); + +static const u8 gMoveDescription_ArmThrust[] = _( + "Straight-arm punches that\n" + "strike the foe 2 to 5 times."); + +static const u8 gMoveDescription_Camouflage[] = _( + "Alters the POKéMON’s type\n" + "depending on the location."); + +static const u8 gMoveDescription_TailGlow[] = _( + "Flashes a light that sharply\n" + "raises SP. ATK."); + +static const u8 gMoveDescription_LusterPurge[] = _( + "Attacks with a burst of\n" + "light. May lower SP. DEF."); + +static const u8 gMoveDescription_MistBall[] = _( + "Attacks with a flurry of\n" + "down. May lower SP. ATK."); + +static const u8 gMoveDescription_FeatherDance[] = _( + "Envelops the foe with down\n" + "to sharply reduce ATTACK."); + +static const u8 gMoveDescription_TeeterDance[] = _( + "Confuses all POKéMON on\n" + "the scene."); + +static const u8 gMoveDescription_BlazeKick[] = _( + "A kick with a high critical-\n" + "hit ratio. May cause a burn."); + +static const u8 gMoveDescription_MudSport[] = _( + "Covers the user in mud to\n" + "raise electrical resistance."); + +static const u8 gMoveDescription_IceBall[] = _( + "A 5-turn attack that gains\n" + "power on successive hits."); + +static const u8 gMoveDescription_NeedleArm[] = _( + "Attacks with thorny arms.\n" + "May cause flinching."); + +static const u8 gMoveDescription_SlackOff[] = _( + "Slacks off and restores\n" + "half the maximum HP."); + +static const u8 gMoveDescription_HyperVoice[] = _( + "A loud attack that uses\n" + "sound waves to injure."); + +static const u8 gMoveDescription_PoisonFang[] = _( + "A sharp-fanged attack.\n" + "May badly poison the foe."); + +static const u8 gMoveDescription_CrushClaw[] = _( + "Tears at the foe with sharp\n" + "claws. May lower DEFENSE."); + +static const u8 gMoveDescription_BlastBurn[] = _( + "Powerful, but leaves the\n" + "user immobile the next turn."); + +static const u8 gMoveDescription_HydroCannon[] = _( + "Powerful, but leaves the\n" + "user immobile the next turn."); + +static const u8 gMoveDescription_MeteorMash[] = _( + "Fires a meteor-like punch.\n" + "May raise ATTACK."); + +static const u8 gMoveDescription_Astonish[] = _( + "An attack that may shock\n" + "the foe into flinching."); + +static const u8 gMoveDescription_WeatherBall[] = _( + "The move’s type and power\n" + "change with the weather."); + +static const u8 gMoveDescription_Aromatherapy[] = _( + "Heals all status problems\n" + "with a soothing scent."); + +static const u8 gMoveDescription_FakeTears[] = _( + "Feigns crying to sharply\n" + "lower the foe’s SP. DEF."); + +static const u8 gMoveDescription_AirCutter[] = _( + "Hacks with razorlike wind.\n" + "High critical-hit ratio."); + +static const u8 gMoveDescription_Overheat[] = _( + "Allows a full-power attack,\n" + "but sharply lowers SP. ATK."); + +static const u8 gMoveDescription_OdorSleuth[] = _( + "Negates the foe’s efforts\n" + "to heighten evasiveness."); + +static const u8 gMoveDescription_RockTomb[] = _( + "Stops the foe from moving\n" + "with rocks and cuts SPEED."); + +static const u8 gMoveDescription_SilverWind[] = _( + "A powdery attack that may\n" + "raise abilities."); + +static const u8 gMoveDescription_MetalSound[] = _( + "Emits a horrible screech\n" + "that sharply lowers SP. DEF."); + +static const u8 gMoveDescription_GrassWhistle[] = _( + "Lulls the foe into sleep\n" + "with a pleasant melody."); + +static const u8 gMoveDescription_Tickle[] = _( + "Makes the foe laugh to\n" + "lower ATTACK and DEFENSE."); + +static const u8 gMoveDescription_CosmicPower[] = _( + "Raises DEFENSE and SP. DEF\n" + "with a mystic power."); + +static const u8 gMoveDescription_WaterSpout[] = _( + "Inflicts more damage if the\n" + "user’s HP is high."); + +static const u8 gMoveDescription_SignalBeam[] = _( + "A strange beam attack that\n" + "may confuse the foe."); + +static const u8 gMoveDescription_ShadowPunch[] = _( + "An unavoidable punch that\n" + "is thrown from shadows."); + +static const u8 gMoveDescription_Extrasensory[] = _( + "Attacks with a peculiar\n" + "power. May cause flinching."); + +static const u8 gMoveDescription_SkyUppercut[] = _( + "An uppercut thrown as if\n" + "leaping into the sky."); + +static const u8 gMoveDescription_SandTomb[] = _( + "Traps and hurts the foe in\n" + "quicksand for 2 to 5 turns."); + +static const u8 gMoveDescription_SheerCold[] = _( + "A chilling attack that\n" + "causes fainting if it hits."); + +static const u8 gMoveDescription_MuddyWater[] = _( + "Attacks with muddy water.\n" + "May lower accuracy."); + +static const u8 gMoveDescription_BulletSeed[] = _( + "Shoots 2 to 5 seeds in a row\n" + "to strike the foe."); + +static const u8 gMoveDescription_AerialAce[] = _( + "An extremely speedy and\n" + "unavoidable attack."); + +static const u8 gMoveDescription_IcicleSpear[] = _( + "Attacks the foe by firing\n" + "2 to 5 icicles in a row."); + +static const u8 gMoveDescription_IronDefense[] = _( + "Hardens the body’s surface\n" + "to sharply raise DEFENSE."); + +static const u8 gMoveDescription_Block[] = _( + "Blocks the foe’s way to\n" + "prevent escape."); + +static const u8 gMoveDescription_Howl[] = _( + "Howls to raise the spirit\n" + "and boosts ATTACK."); + +static const u8 gMoveDescription_DragonClaw[] = _( + "Slashes the foe with sharp\n" + "claws."); + +static const u8 gMoveDescription_FrenzyPlant[] = _( + "Powerful, but leaves the\n" + "user immobile the next turn."); + +static const u8 gMoveDescription_BulkUp[] = _( + "Bulks up the body to boost\n" + "both ATTACK and DEFENSE."); + +static const u8 gMoveDescription_Bounce[] = _( + "Bounces up, then down the\n" + "next turn. May paralyze."); + +static const u8 gMoveDescription_MudShot[] = _( + "Hurls mud at the foe and\n" + "reduces SPEED."); + +static const u8 gMoveDescription_PoisonTail[] = _( + "Has a high critical-hit\n" + "ratio. May also poison."); + +static const u8 gMoveDescription_Covet[] = _( + "Cutely begs to obtain an\n" + "item held by the foe."); + +static const u8 gMoveDescription_VoltTackle[] = _( + "A life-risking tackle that\n" + "slightly hurts the user."); + +static const u8 gMoveDescription_MagicalLeaf[] = _( + "Attacks with a strange leaf\n" + "that cannot be evaded."); + +static const u8 gMoveDescription_WaterSport[] = _( + "The user becomes soaked to\n" + "raise resistance to fire."); + +static const u8 gMoveDescription_CalmMind[] = _( + "Raises SP. ATK and SP. DEF\n" + "by focusing the mind."); + +static const u8 gMoveDescription_LeafBlade[] = _( + "Slashes with a sharp leaf.\n" + "High critical-hit ratio."); + +static const u8 gMoveDescription_DragonDance[] = _( + "A mystical dance that ups\n" + "ATTACK and SPEED."); + +static const u8 gMoveDescription_RockBlast[] = _( + "Hurls boulders at the foe\n" + "2 to 5 times in a row."); + +static const u8 gMoveDescription_ShockWave[] = _( + "A fast and unavoidable\n" + "electric attack."); + +static const u8 gMoveDescription_WaterPulse[] = _( + "Attacks with ultrasonic\n" + "waves. May confuse the foe"); + +static const u8 gMoveDescription_DoomDesire[] = _( + "Summons strong sunlight to\n" + "attack 2 turns later."); + +static const u8 gMoveDescription_PsychoBoost[] = _( + "Allows a full-power attack,\n" + "but sharply lowers SP. ATK."); + +const u8 * const gMoveDescriptions[] = { + gMoveDescription_Pound, + gMoveDescription_KarateChop, + gMoveDescription_DoubleSlap, + gMoveDescription_CometPunch, + gMoveDescription_MegaPunch, + gMoveDescription_PayDay, + gMoveDescription_FirePunch, + gMoveDescription_IcePunch, + gMoveDescription_ThunderPunch, + gMoveDescription_Scratch, + gMoveDescription_ViceGrip, + gMoveDescription_Guillotine, + gMoveDescription_RazorWind, + gMoveDescription_SwordsDance, + gMoveDescription_Cut, + gMoveDescription_Gust, + gMoveDescription_WingAttack, + gMoveDescription_Whirlwind, + gMoveDescription_Fly, + gMoveDescription_Bind, + gMoveDescription_Slam, + gMoveDescription_VineWhip, + gMoveDescription_Stomp, + gMoveDescription_DoubleKick, + gMoveDescription_MegaKick, + gMoveDescription_JumpKick, + gMoveDescription_RollingKick, + gMoveDescription_SandAttack, + gMoveDescription_Headbutt, + gMoveDescription_HornAttack, + gMoveDescription_FuryAttack, + gMoveDescription_HornDrill, + gMoveDescription_Tackle, + gMoveDescription_BodySlam, + gMoveDescription_Wrap, + gMoveDescription_TakeDown, + gMoveDescription_Thrash, + gMoveDescription_DoubleEdge, + gMoveDescription_TailWhip, + gMoveDescription_PoisonSting, + gMoveDescription_Twineedle, + gMoveDescription_PinMissile, + gMoveDescription_Leer, + gMoveDescription_Bite, + gMoveDescription_Growl, + gMoveDescription_Roar, + gMoveDescription_Sing, + gMoveDescription_Supersonic, + gMoveDescription_SonicBoom, + gMoveDescription_Disable, + gMoveDescription_Acid, + gMoveDescription_Ember, + gMoveDescription_Flamethrower, + gMoveDescription_Mist, + gMoveDescription_WaterGun, + gMoveDescription_HydroPump, + gMoveDescription_Surf, + gMoveDescription_IceBeam, + gMoveDescription_Blizzard, + gMoveDescription_Psybeam, + gMoveDescription_BubbleBeam, + gMoveDescription_AuroraBeam, + gMoveDescription_HyperBeam, + gMoveDescription_Peck, + gMoveDescription_DrillPeck, + gMoveDescription_Submission, + gMoveDescription_LowKick, + gMoveDescription_Counter, + gMoveDescription_SeismicToss, + gMoveDescription_Strength, + gMoveDescription_Absorb, + gMoveDescription_MegaDrain, + gMoveDescription_LeechSeed, + gMoveDescription_Growth, + gMoveDescription_RazorLeaf, + gMoveDescription_SolarBeam, + gMoveDescription_PoisonPowder, + gMoveDescription_StunSpore, + gMoveDescription_SleepPowder, + gMoveDescription_PetalDance, + gMoveDescription_StringShot, + gMoveDescription_DragonRage, + gMoveDescription_FireSpin, + gMoveDescription_ThunderShock, + gMoveDescription_Thunderbolt, + gMoveDescription_ThunderWave, + gMoveDescription_Thunder, + gMoveDescription_RockThrow, + gMoveDescription_Earthquake, + gMoveDescription_Fissure, + gMoveDescription_Dig, + gMoveDescription_Toxic, + gMoveDescription_Confusion, + gMoveDescription_Psychic, + gMoveDescription_Hypnosis, + gMoveDescription_Meditate, + gMoveDescription_Agility, + gMoveDescription_QuickAttack, + gMoveDescription_Rage, + gMoveDescription_Teleport, + gMoveDescription_NightShade, + gMoveDescription_Mimic, + gMoveDescription_Screech, + gMoveDescription_DoubleTeam, + gMoveDescription_Recover, + gMoveDescription_Harden, + gMoveDescription_Minimize, + gMoveDescription_Smokescreen, + gMoveDescription_ConfuseRay, + gMoveDescription_Withdraw, + gMoveDescription_DefenseCurl, + gMoveDescription_Barrier, + gMoveDescription_LightScreen, + gMoveDescription_Haze, + gMoveDescription_Reflect, + gMoveDescription_FocusEnergy, + gMoveDescription_Bide, + gMoveDescription_Metronome, + gMoveDescription_MirrorMove, + gMoveDescription_SelfDestruct, + gMoveDescription_EggBomb, + gMoveDescription_Lick, + gMoveDescription_Smog, + gMoveDescription_Sludge, + gMoveDescription_BoneClub, + gMoveDescription_FireBlast, + gMoveDescription_Waterfall, + gMoveDescription_Clamp, + gMoveDescription_Swift, + gMoveDescription_SkullBash, + gMoveDescription_SpikeCannon, + gMoveDescription_Constrict, + gMoveDescription_Amnesia, + gMoveDescription_Kinesis, + gMoveDescription_SoftBoiled, + gMoveDescription_HiJumpKick, + gMoveDescription_Glare, + gMoveDescription_DreamEater, + gMoveDescription_PoisonGas, + gMoveDescription_Barrage, + gMoveDescription_LeechLife, + gMoveDescription_LovelyKiss, + gMoveDescription_SkyAttack, + gMoveDescription_Transform, + gMoveDescription_Bubble, + gMoveDescription_DizzyPunch, + gMoveDescription_Spore, + gMoveDescription_Flash, + gMoveDescription_Psywave, + gMoveDescription_Splash, + gMoveDescription_AcidArmor, + gMoveDescription_Crabhammer, + gMoveDescription_Explosion, + gMoveDescription_FurySwipes, + gMoveDescription_Bonemerang, + gMoveDescription_Rest, + gMoveDescription_RockSlide, + gMoveDescription_HyperFang, + gMoveDescription_Sharpen, + gMoveDescription_Conversion, + gMoveDescription_TriAttack, + gMoveDescription_SuperFang, + gMoveDescription_Slash, + gMoveDescription_Substitute, + gMoveDescription_Struggle, + gMoveDescription_Sketch, + gMoveDescription_TripleKick, + gMoveDescription_Thief, + gMoveDescription_SpiderWeb, + gMoveDescription_MindReader, + gMoveDescription_Nightmare, + gMoveDescription_FlameWheel, + gMoveDescription_Snore, + gMoveDescription_Curse, + gMoveDescription_Flail, + gMoveDescription_Conversion2, + gMoveDescription_Aeroblast, + gMoveDescription_CottonSpore, + gMoveDescription_Reversal, + gMoveDescription_Spite, + gMoveDescription_PowderSnow, + gMoveDescription_Protect, + gMoveDescription_MachPunch, + gMoveDescription_ScaryFace, + gMoveDescription_FaintAttack, + gMoveDescription_SweetKiss, + gMoveDescription_BellyDrum, + gMoveDescription_SludgeBomb, + gMoveDescription_MudSlap, + gMoveDescription_Octazooka, + gMoveDescription_Spikes, + gMoveDescription_ZapCannon, + gMoveDescription_Foresight, + gMoveDescription_DestinyBond, + gMoveDescription_PerishSong, + gMoveDescription_IcyWind, + gMoveDescription_Detect, + gMoveDescription_BoneRush, + gMoveDescription_LockOn, + gMoveDescription_Outrage, + gMoveDescription_Sandstorm, + gMoveDescription_GigaDrain, + gMoveDescription_Endure, + gMoveDescription_Charm, + gMoveDescription_Rollout, + gMoveDescription_FalseSwipe, + gMoveDescription_Swagger, + gMoveDescription_MilkDrink, + gMoveDescription_Spark, + gMoveDescription_FuryCutter, + gMoveDescription_SteelWing, + gMoveDescription_MeanLook, + gMoveDescription_Attract, + gMoveDescription_SleepTalk, + gMoveDescription_HealBell, + gMoveDescription_Return, + gMoveDescription_Present, + gMoveDescription_Frustration, + gMoveDescription_Safeguard, + gMoveDescription_PainSplit, + gMoveDescription_SacredFire, + gMoveDescription_Magnitude, + gMoveDescription_DynamicPunch, + gMoveDescription_Megahorn, + gMoveDescription_DragonBreath, + gMoveDescription_BatonPass, + gMoveDescription_Encore, + gMoveDescription_Pursuit, + gMoveDescription_RapidSpin, + gMoveDescription_SweetScent, + gMoveDescription_IronTail, + gMoveDescription_MetalClaw, + gMoveDescription_VitalThrow, + gMoveDescription_MorningSun, + gMoveDescription_Synthesis, + gMoveDescription_Moonlight, + gMoveDescription_HiddenPower, + gMoveDescription_CrossChop, + gMoveDescription_Twister, + gMoveDescription_RainDance, + gMoveDescription_SunnyDay, + gMoveDescription_Crunch, + gMoveDescription_MirrorCoat, + gMoveDescription_PsychUp, + gMoveDescription_ExtremeSpeed, + gMoveDescription_AncientPower, + gMoveDescription_ShadowBall, + gMoveDescription_FutureSight, + gMoveDescription_RockSmash, + gMoveDescription_Whirlpool, + gMoveDescription_BeatUp, + gMoveDescription_FakeOut, + gMoveDescription_Uproar, + gMoveDescription_Stockpile, + gMoveDescription_SpitUp, + gMoveDescription_Swallow, + gMoveDescription_HeatWave, + gMoveDescription_Hail, + gMoveDescription_Torment, + gMoveDescription_Flatter, + gMoveDescription_WillOWisp, + gMoveDescription_Memento, + gMoveDescription_Facade, + gMoveDescription_FocusPunch, + gMoveDescription_SmellingSalt, + gMoveDescription_FollowMe, + gMoveDescription_NaturePower, + gMoveDescription_Charge, + gMoveDescription_Taunt, + gMoveDescription_HelpingHand, + gMoveDescription_Trick, + gMoveDescription_RolePlay, + gMoveDescription_Wish, + gMoveDescription_Assist, + gMoveDescription_Ingrain, + gMoveDescription_Superpower, + gMoveDescription_MagicCoat, + gMoveDescription_Recycle, + gMoveDescription_Revenge, + gMoveDescription_BrickBreak, + gMoveDescription_Yawn, + gMoveDescription_KnockOff, + gMoveDescription_Endeavor, + gMoveDescription_Eruption, + gMoveDescription_SkillSwap, + gMoveDescription_Imprison, + gMoveDescription_Refresh, + gMoveDescription_Grudge, + gMoveDescription_Snatch, + gMoveDescription_SecretPower, + gMoveDescription_Dive, + gMoveDescription_ArmThrust, + gMoveDescription_Camouflage, + gMoveDescription_TailGlow, + gMoveDescription_LusterPurge, + gMoveDescription_MistBall, + gMoveDescription_FeatherDance, + gMoveDescription_TeeterDance, + gMoveDescription_BlazeKick, + gMoveDescription_MudSport, + gMoveDescription_IceBall, + gMoveDescription_NeedleArm, + gMoveDescription_SlackOff, + gMoveDescription_HyperVoice, + gMoveDescription_PoisonFang, + gMoveDescription_CrushClaw, + gMoveDescription_BlastBurn, + gMoveDescription_HydroCannon, + gMoveDescription_MeteorMash, + gMoveDescription_Astonish, + gMoveDescription_WeatherBall, + gMoveDescription_Aromatherapy, + gMoveDescription_FakeTears, + gMoveDescription_AirCutter, + gMoveDescription_Overheat, + gMoveDescription_OdorSleuth, + gMoveDescription_RockTomb, + gMoveDescription_SilverWind, + gMoveDescription_MetalSound, + gMoveDescription_GrassWhistle, + gMoveDescription_Tickle, + gMoveDescription_CosmicPower, + gMoveDescription_WaterSpout, + gMoveDescription_SignalBeam, + gMoveDescription_ShadowPunch, + gMoveDescription_Extrasensory, + gMoveDescription_SkyUppercut, + gMoveDescription_SandTomb, + gMoveDescription_SheerCold, + gMoveDescription_MuddyWater, + gMoveDescription_BulletSeed, + gMoveDescription_AerialAce, + gMoveDescription_IcicleSpear, + gMoveDescription_IronDefense, + gMoveDescription_Block, + gMoveDescription_Howl, + gMoveDescription_DragonClaw, + gMoveDescription_FrenzyPlant, + gMoveDescription_BulkUp, + gMoveDescription_Bounce, + gMoveDescription_MudShot, + gMoveDescription_PoisonTail, + gMoveDescription_Covet, + gMoveDescription_VoltTackle, + gMoveDescription_MagicalLeaf, + gMoveDescription_WaterSport, + gMoveDescription_CalmMind, + gMoveDescription_LeafBlade, + gMoveDescription_DragonDance, + gMoveDescription_RockBlast, + gMoveDescription_ShockWave, + gMoveDescription_WaterPulse, + gMoveDescription_DoomDesire, + gMoveDescription_PsychoBoost, +}; diff --git a/src/pokemon/pokemon_summary_screen.c b/src/pokemon/pokemon_summary_screen.c index 9f8021eb5..33034afa4 100644 --- a/src/pokemon/pokemon_summary_screen.c +++ b/src/pokemon/pokemon_summary_screen.c @@ -158,7 +158,6 @@ extern const u16 gUnknown_083C157E[]; extern const u16 gUnknown_083C157C[]; extern const u8 gAbilityNames[][13]; extern const u8 * const gAbilityDescriptions[]; -extern const u8 * const gMoveDescriptions[]; extern const u8 * const gContestEffectStrings[]; extern const struct ContestMove gContestMoves[]; extern const struct ContestEffect gContestEffects[]; @@ -173,6 +172,12 @@ extern const u8 gUnknown_083C15AE[]; extern const u8 gUnknown_083C15B4[]; extern const u8 *const gUnknown_083C1068[]; +#if ENGLISH +#include "../data/text/move_descriptions_en.h" +#elif GERMAN +#include "../data/text/move_descriptions_de.h" +#endif + void sub_809D844(void) { -- cgit v1.2.3 From fee28d4e554d229ddf2585bd103a52953f7cc566 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Sat, 25 Nov 2017 21:17:39 -0800 Subject: Migrate nature_names to src/data/text --- src/data/text/move_descriptions_de.h | 1418 +++++++++++++++++----------------- src/data/text/move_descriptions_en.h | 1416 ++++++++++++++++----------------- src/data/text/nature_names_de.h | 53 ++ src/data/text/nature_names_en.h | 53 ++ src/pokemon/pokemon_summary_screen.c | 2 + 5 files changed, 1525 insertions(+), 1417 deletions(-) create mode 100644 src/data/text/nature_names_de.h create mode 100644 src/data/text/nature_names_en.h (limited to 'src') diff --git a/src/data/text/move_descriptions_de.h b/src/data/text/move_descriptions_de.h index cb681f6d7..37f1ea410 100644 --- a/src/data/text/move_descriptions_de.h +++ b/src/data/text/move_descriptions_de.h @@ -1,1769 +1,1769 @@ -static const u8 gMoveDescription_Pound[] = _( +static const u8 MoveDescription_Pound[] = _( "Ein Hieb mit den Vorder-\n" "beinen oder dem Schweif."); -static const u8 gMoveDescription_KarateChop[] = _( +static const u8 MoveDescription_KarateChop[] = _( "Gute Möglichkeit, einen\n" "Volltreffer zu landen."); -static const u8 gMoveDescription_DoubleSlap[] = _( +static const u8 MoveDescription_DoubleSlap[] = _( "Trifft den Gegner 2 - 5-mal\n" "hintereinander."); -static const u8 gMoveDescription_CometPunch[] = _( +static const u8 MoveDescription_CometPunch[] = _( "Trifft den Gegner 2 - 5-mal\n" "hintereinander."); -static const u8 gMoveDescription_MegaPunch[] = _( +static const u8 MoveDescription_MegaPunch[] = _( "Ein unglaublich kräftiger\n" "Hieb."); -static const u8 gMoveDescription_PayDay[] = _( +static const u8 MoveDescription_PayDay[] = _( "Wirft Münzen auf Gegner.\n" "Geld wird erstattet."); -static const u8 gMoveDescription_FirePunch[] = _( +static const u8 MoveDescription_FirePunch[] = _( "Schlag, der dem Gegner evtl.\n" "Verbrennungen zufügt."); -static const u8 gMoveDescription_IcePunch[] = _( +static const u8 MoveDescription_IcePunch[] = _( "Ein Schlag, der den Gegner\n" "evtl. einfriert."); -static const u8 gMoveDescription_ThunderPunch[] = _( +static const u8 MoveDescription_ThunderPunch[] = _( "Schlag, der den Gegner evtl.\n" "paralysiert."); -static const u8 gMoveDescription_Scratch[] = _( +static const u8 MoveDescription_Scratch[] = _( "Der Gegner wird mit\n" "scharfen Klauen zerkratzt."); -static const u8 gMoveDescription_ViceGrip[] = _( +static const u8 MoveDescription_ViceGrip[] = _( "Umklammert den Gegner mit\n" "großen, kräftigen Zangen."); -static const u8 gMoveDescription_Guillotine[] = _( +static const u8 MoveDescription_Guillotine[] = _( "Kräftige Scheren-Attacke.\n" "Führt evtl. zum K.O."); -static const u8 gMoveDescription_RazorWind[] = _( +static const u8 MoveDescription_RazorWind[] = _( "Eine Attacke, die auf 2\n" "Runden basiert."); -static const u8 gMoveDescription_SwordsDance[] = _( +static const u8 MoveDescription_SwordsDance[] = _( "Erhöht den Angriffs-Wert\n" "drastisch."); -static const u8 gMoveDescription_Cut[] = _( +static const u8 MoveDescription_Cut[] = _( "Trifft den Gegner mit\n" "Klauen, Scheren o. ä."); -static const u8 gMoveDescription_Gust[] = _( +static const u8 MoveDescription_Gust[] = _( "Trifft den Gegner mit Wind-\n" "stoß durch Flügelschlag."); -static const u8 gMoveDescription_WingAttack[] = _( +static const u8 MoveDescription_WingAttack[] = _( "Trifft den Gegner mit weit\n" "gespreizten Flügeln."); -static const u8 gMoveDescription_Whirlwind[] = _( +static const u8 MoveDescription_Whirlwind[] = _( "Weht Gegner weg und be-\n" "endet den Kampf in Wildnis."); -static const u8 gMoveDescription_Fly[] = _( +static const u8 MoveDescription_Fly[] = _( "Steigt empor in der 1. Runde\n" "und trifft Gegner in der 2."); -static const u8 gMoveDescription_Bind[] = _( +static const u8 MoveDescription_Bind[] = _( "Umklammert und trifft den\n" "Gegner 2 - 5-mal."); -static const u8 gMoveDescription_Slam[] = _( +static const u8 MoveDescription_Slam[] = _( "Schlag mit einem langen\n" "Schweif, einer Ranke o. ä."); -static const u8 gMoveDescription_VineWhip[] = _( +static const u8 MoveDescription_VineWhip[] = _( "Peitschenähnlicher Schlag\n" "mit Ranken."); -static const u8 gMoveDescription_Stomp[] = _( +static const u8 MoveDescription_Stomp[] = _( "Stampfen mit Fuß. Gegner\n" "schreckt evtl. zurück."); -static const u8 gMoveDescription_DoubleKick[] = _( +static const u8 MoveDescription_DoubleKick[] = _( "Doppeltritt. Der Gegner\n" "wird zweimal getroffen."); -static const u8 gMoveDescription_MegaKick[] = _( - "Ein extrem heftiger Tritt.$"static const u8 gMoveDescription_JumpKick[] = (); +static const u8 MoveDescription_MegaKick[] = _( + "Ein extrem heftiger Tritt.$"static const u8 MoveDescription_JumpKick[] = (); "Sprung-Tritt. Selbstschä-\n" "digung bei Misserfolg."); -static const u8 gMoveDescription_RollingKick[] = _( +static const u8 MoveDescription_RollingKick[] = _( "Schneller Tritt aus der\n" "Drehung."); -static const u8 gMoveDescription_SandAttack[] = _( +static const u8 MoveDescription_SandAttack[] = _( "Senkt Genauigkeit des Geg-\n" "ners durch Sand."); -static const u8 gMoveDescription_Headbutt[] = _( +static const u8 MoveDescription_Headbutt[] = _( "Rammt den Gegner und lässt\n" "ihn evtl. zurückschrecken."); -static const u8 gMoveDescription_HornAttack[] = _( +static const u8 MoveDescription_HornAttack[] = _( "Spießt den Gegner mit\n" "spitzen Hörnern auf."); -static const u8 gMoveDescription_FuryAttack[] = _( +static const u8 MoveDescription_FuryAttack[] = _( "Spießt den Gegner 2 - 5-mal\n" "mit spitzen Hörnern auf."); -static const u8 gMoveDescription_HornDrill[] = _( +static const u8 MoveDescription_HornDrill[] = _( "K.O.-Attacke, die ein Horn\n" "als Bohrer einsetzt."); -static const u8 gMoveDescription_Tackle[] = _( +static const u8 MoveDescription_Tackle[] = _( "Trifft den Gegner mit vollem\n" "Körpereinsatz."); -static const u8 gMoveDescription_BodySlam[] = _( +static const u8 MoveDescription_BodySlam[] = _( "Körper-Ramme, kann\n" "Paralyse hervorrufen."); -static const u8 gMoveDescription_Wrap[] = _( +static const u8 MoveDescription_Wrap[] = _( "Umwickelt Gegner 2 - 5-mal\n" "mit Ranken o. ä."); -static const u8 gMoveDescription_TakeDown[] = _( +static const u8 MoveDescription_TakeDown[] = _( "Rücksichtslose Attacke,\n" "mit Selbstschädigung."); -static const u8 gMoveDescription_Thrash[] = _( +static const u8 MoveDescription_Thrash[] = _( "Attacke in 2 bis 3 Runden,\n" "die Anwender verwirrt."); -static const u8 gMoveDescription_DoubleEdge[] = _( +static const u8 MoveDescription_DoubleEdge[] = _( "Lebensgefährlicher Angriff\n" "mit Selbstschädigung."); -static const u8 gMoveDescription_TailWhip[] = _( +static const u8 MoveDescription_TailWhip[] = _( "Hieb mit dem Schweif, senkt\n" "die VERT. des Gegners."); -static const u8 gMoveDescription_PoisonSting[] = _( +static const u8 MoveDescription_PoisonSting[] = _( "Angriff mit Widerhaken,\n" "kann Gegner vergiften."); -static const u8 gMoveDescription_Twineedle[] = _( +static const u8 MoveDescription_Twineedle[] = _( "Stacheln an den Vorderbei-\n" "nen treffen Gegner 2-mal."); -static const u8 gMoveDescription_PinMissile[] = _( +static const u8 MoveDescription_PinMissile[] = _( "Spitze Nadeln treffen den\n" "Gegner 2 - 5-mal."); -static const u8 gMoveDescription_Leer[] = _( +static const u8 MoveDescription_Leer[] = _( "Gegners VERT.-Wert wird\n" "durch Blick gesenkt."); -static const u8 gMoveDescription_Bite[] = _( +static const u8 MoveDescription_Bite[] = _( "Beißt zu und lässt den Geg-\n" "ner evtl. zurückschrecken."); -static const u8 gMoveDescription_Growl[] = _( +static const u8 MoveDescription_Growl[] = _( "Knurren, das den ANGR.-Wert\n" "des Gegners senkt."); -static const u8 gMoveDescription_Roar[] = _( +static const u8 MoveDescription_Roar[] = _( "Verjagt den Gegner und be-\n" "endet den Kampf in Wildnis."); -static const u8 gMoveDescription_Sing[] = _( +static const u8 MoveDescription_Sing[] = _( "Ein Lied, das den Gegner\n" "in tiefen Schlaf versetzt."); -static const u8 gMoveDescription_Supersonic[] = _( +static const u8 MoveDescription_Supersonic[] = _( "Ausstoß bizarrer Schallwel-\n" "len. Verwirrt Gegner evtl."); -static const u8 gMoveDescription_SonicBoom[] = _( +static const u8 MoveDescription_SonicBoom[] = _( "Schockwellen. Richten immer\n" "20 KP Schaden an."); -static const u8 gMoveDescription_Disable[] = _( +static const u8 MoveDescription_Disable[] = _( "Psycho-Attacke. Blockiert\n" "eine Attacke des Gegners."); -static const u8 gMoveDescription_Acid[] = _( +static const u8 MoveDescription_Acid[] = _( "Versprüht ätzende Flüssig-\n" "keit, senkt evtl. VERT."); -static const u8 gMoveDescription_Ember[] = _( +static const u8 MoveDescription_Ember[] = _( "Schwache Feuer-Attacke.\n" "Verbrennt Gegner evtl."); -static const u8 gMoveDescription_Flamethrower[] = _( +static const u8 MoveDescription_Flamethrower[] = _( "Starke Feuer-Attacke.\n" "Verbrennt Gegner evtl."); -static const u8 gMoveDescription_Mist[] = _( +static const u8 MoveDescription_Mist[] = _( "Nebel, der die Änderung der\n" "Werte verhindert."); -static const u8 gMoveDescription_WaterGun[] = _( +static const u8 MoveDescription_WaterGun[] = _( "Der Gegner wird mit Wasser\n" "bespritzt."); -static const u8 gMoveDescription_HydroPump[] = _( +static const u8 MoveDescription_HydroPump[] = _( "Spritzt Wasser mit\n" "Hochdruck auf den Gegner."); -static const u8 gMoveDescription_Surf[] = _( +static const u8 MoveDescription_Surf[] = _( "Eine riesige Welle bricht\n" "über den Gegner herein."); -static const u8 gMoveDescription_IceBeam[] = _( +static const u8 MoveDescription_IceBeam[] = _( "Gegner wird von Eisstrahl\n" "getroffen, friert evtl. ein."); -static const u8 gMoveDescription_Blizzard[] = _( +static const u8 MoveDescription_Blizzard[] = _( "Ein Schneesturm, der den\n" "Gegner einfrieren kann."); -static const u8 gMoveDescription_Psybeam[] = _( +static const u8 MoveDescription_Psybeam[] = _( "Feuert einen Strahl ab, der\n" "Gegner verwirren kann."); -static const u8 gMoveDescription_BubbleBeam[] = _( +static const u8 MoveDescription_BubbleBeam[] = _( "Versprüht Blasen, die den\n" "INIT.-Wert evtl. senken."); -static const u8 gMoveDescription_AuroraBeam[] = _( +static const u8 MoveDescription_AuroraBeam[] = _( "Regenbogenfarbener Strahl,\n" "senkt evtl. ANGR.-Wert."); -static const u8 gMoveDescription_HyperBeam[] = _( +static const u8 MoveDescription_HyperBeam[] = _( "Starke Attacke. Angreifer\n" "setzt eine Runde aus."); -static const u8 gMoveDescription_Peck[] = _( +static const u8 MoveDescription_Peck[] = _( "Greift Gegner mit dem\n" "Schnabel an."); -static const u8 gMoveDescription_DrillPeck[] = _( +static const u8 MoveDescription_DrillPeck[] = _( "Attacke, bei der der Schna-\n" "bel als Bohrer dient."); -static const u8 gMoveDescription_Submission[] = _( +static const u8 MoveDescription_Submission[] = _( "Rücksichtsloser Rempler. \n" "Schädigt auch Angreifer."); -static const u8 gMoveDescription_LowKick[] = _( +static const u8 MoveDescription_LowKick[] = _( "Tritt, der massigen Gegnern\n" "mehr Schaden zufügt."); -static const u8 gMoveDescription_Counter[] = _( +static const u8 MoveDescription_Counter[] = _( "Kontert physischen Tref-\n" "fer mit doppelter Kraft."); -static const u8 gMoveDescription_SeismicToss[] = _( +static const u8 MoveDescription_SeismicToss[] = _( "Richtet Schaden gemäß\n" "Level d. Angreifers an."); -static const u8 gMoveDescription_Strength[] = _( +static const u8 MoveDescription_Strength[] = _( "Erzeugt enorme Kraft und\n" "rammt den Gegner."); -static const u8 gMoveDescription_Absorb[] = _( +static const u8 MoveDescription_Absorb[] = _( "Attacke, die die Hälfte des\n" "Schadens absorbiert."); -static const u8 gMoveDescription_MegaDrain[] = _( +static const u8 MoveDescription_MegaDrain[] = _( "Attacke, die die Hälfte des\n" "Schadens absorbiert."); -static const u8 gMoveDescription_LeechSeed[] = _( +static const u8 MoveDescription_LeechSeed[] = _( "Gegner wird bepflanzt und\n" "verliert jede Runde KP."); -static const u8 gMoveDescription_Growth[] = _( +static const u8 MoveDescription_Growth[] = _( "Der Körper wächst und\n" "SPEZ. ANGR. wird erhöht."); -static const u8 gMoveDescription_RazorLeaf[] = _( +static const u8 MoveDescription_RazorLeaf[] = _( "Trifft Gegner mit Blättern.\n" "Hohe Volltrefferquote."); -static const u8 gMoveDescription_SolarBeam[] = _( +static const u8 MoveDescription_SolarBeam[] = _( "Absorbiert Licht in der 1.\n" "Runde, 2. Runde Angriff."); -static const u8 gMoveDescription_PoisonPowder[] = _( +static const u8 MoveDescription_PoisonPowder[] = _( "Verstreut giftigen Puder,\n" "der Gegner vergiften kann."); -static const u8 gMoveDescription_StunSpore[] = _( +static const u8 MoveDescription_StunSpore[] = _( "Verstreut Puder, der den\n" "Gegner evtl. paralysiert."); -static const u8 gMoveDescription_SleepPowder[] = _( +static const u8 MoveDescription_SleepPowder[] = _( "Verstreut Puder, der Geg.\n" "evtl. in Schlaf versetzt."); -static const u8 gMoveDescription_PetalDance[] = _( +static const u8 MoveDescription_PetalDance[] = _( "Angriff in 2-3 Runden.\n" "Angreifer wird verwirrt."); -static const u8 gMoveDescription_StringShot[] = _( +static const u8 MoveDescription_StringShot[] = _( "Umwickelt Gegner mit Faden\n" "und senkt INIT.-Wert."); -static const u8 gMoveDescription_DragonRage[] = _( +static const u8 MoveDescription_DragonRage[] = _( "Stößt Schockwellen aus, die\n" "40 KP Schaden anrichten."); -static const u8 gMoveDescription_FireSpin[] = _( +static const u8 MoveDescription_FireSpin[] = _( "Schließt Gegner für 2-5\n" "Runden in Feuerkreis ein."); -static const u8 gMoveDescription_ThunderShock[] = _( +static const u8 MoveDescription_ThunderShock[] = _( "Elektro-Attacke. Gegner\n" "evtl. paralysiert."); -static const u8 gMoveDescription_Thunderbolt[] = _( +static const u8 MoveDescription_Thunderbolt[] = _( "Starke Elektro-Attacke,\n" "Gegner evtl. paralysiert."); -static const u8 gMoveDescription_ThunderWave[] = _( +static const u8 MoveDescription_ThunderWave[] = _( "Ein schwacher Stromstoß,\n" "der den Gegner paralysiert."); -static const u8 gMoveDescription_Thunder[] = _( +static const u8 MoveDescription_Thunder[] = _( "Elektro-Attacke, die den\n" "Gegner evtl. paralysiert."); -static const u8 gMoveDescription_RockThrow[] = _( +static const u8 MoveDescription_RockThrow[] = _( "Wirft kleine Steine auf den\n" "Gegner."); -static const u8 gMoveDescription_Earthquake[] = _( +static const u8 MoveDescription_Earthquake[] = _( "Mächtiges Beben. Ist bei\n" "fliegenden Feinden nutzlos."); -static const u8 gMoveDescription_Fissure[] = _( +static const u8 MoveDescription_Fissure[] = _( "Sofort-K.O. Wirft Gegner\n" "in Gebirgsspalte."); -static const u8 gMoveDescription_Dig[] = _( +static const u8 MoveDescription_Dig[] = _( "Gräbt sich in der 1. Runde\n" "ein und trifft in der 2."); -static const u8 gMoveDescription_Toxic[] = _( +static const u8 MoveDescription_Toxic[] = _( "Vergiftet den Gegner mit \n" "einem starken Toxin."); -static const u8 gMoveDescription_Confusion[] = _( +static const u8 MoveDescription_Confusion[] = _( "Psycho-Attacke, die den\n" "Gegner evtl. verwirrt."); -static const u8 gMoveDescription_Psychic[] = _( +static const u8 MoveDescription_Psychic[] = _( "Starke Psycho-Attacke, die\n" "evtl. SPEZ. VERT. senkt."); -static const u8 gMoveDescription_Hypnosis[] = _( +static const u8 MoveDescription_Hypnosis[] = _( "Hypno-Attacke, die Gegner\n" "evtl. in Schlaf versetzt."); -static const u8 gMoveDescription_Meditate[] = _( +static const u8 MoveDescription_Meditate[] = _( "Friedliche Meditation, um\n" "ANGR.-Wert zu steigern."); -static const u8 gMoveDescription_Agility[] = _( +static const u8 MoveDescription_Agility[] = _( "Entspannt den Körper, um\n" "INIT.-Wert. zu steigern."); -static const u8 gMoveDescription_QuickAttack[] = _( +static const u8 MoveDescription_QuickAttack[] = _( "Sehr schneller Angriff mit\n" "Erstschlaggarantie."); -static const u8 gMoveDescription_Rage[] = _( +static const u8 MoveDescription_Rage[] = _( "Erhöht ANGR. des Anwenders\n" "bei jedem gegn. Treffer."); -static const u8 gMoveDescription_Teleport[] = _( +static const u8 MoveDescription_Teleport[] = _( "Psycho-Angriff, um sofort\n" "aus einem Kampf zu fliehen."); -static const u8 gMoveDescription_NightShade[] = _( +static const u8 MoveDescription_NightShade[] = _( "Richtet Schaden gemäß\n" "Level d. Angreifers an."); -static const u8 gMoveDescription_Mimic[] = _( +static const u8 MoveDescription_Mimic[] = _( "Kopiert eine zuvor ausge-\n" "führte Attacke d. Gegners."); -static const u8 gMoveDescription_Screech[] = _( +static const u8 MoveDescription_Screech[] = _( "Stößt einen Schrei aus, um\n" "gegn. VERT. zu senken."); -static const u8 gMoveDescription_DoubleTeam[] = _( +static const u8 MoveDescription_DoubleTeam[] = _( "Erzeugt Ebenbilder, um \n" "Fluchtwert zu erhöhen."); -static const u8 gMoveDescription_Recover[] = _( +static const u8 MoveDescription_Recover[] = _( "Max. KP des Anwenders w.\n" "bis zur Hälfte aufgefüllt."); -static const u8 gMoveDescription_Harden[] = _( +static const u8 MoveDescription_Harden[] = _( "Stärkt die Muskulatur und\n" "erhöht VERT.-Wert."); -static const u8 gMoveDescription_Minimize[] = _( +static const u8 MoveDescription_Minimize[] = _( "Anwender schrumpft, um\n" "Fluchtwert zu erhöhen."); -static const u8 gMoveDescription_Smokescreen[] = _( +static const u8 MoveDescription_Smokescreen[] = _( "Senkt Genauigkeit d. Geg-\n" "ners mit Rauch, Tinte o. ä."); -static const u8 gMoveDescription_ConfuseRay[] = _( +static const u8 MoveDescription_ConfuseRay[] = _( "Ein fieser Strahl, der den\n" "Gegner verwirrt."); -static const u8 gMoveDescription_Withdraw[] = _( +static const u8 MoveDescription_Withdraw[] = _( "Rückzug in den harten\n" "Panzer. Erhöht VERT.-Wert."); -static const u8 gMoveDescription_DefenseCurl[] = _( +static const u8 MoveDescription_DefenseCurl[] = _( "Verbirgt Schwächen durch\n" "Einrollen, VERT.-Wert hoch."); -static const u8 gMoveDescription_Barrier[] = _( +static const u8 MoveDescription_Barrier[] = _( "Erzeugt Barriere, die den\n" "VERT.-Wert stark erhöht."); -static const u8 gMoveDescription_LightScreen[] = _( +static const u8 MoveDescription_LightScreen[] = _( "Erzeugt Lichtwand u. senkt\n" "SPEZ. ANGR.-Schaden."); -static const u8 gMoveDescription_Haze[] = _( +static const u8 MoveDescription_Haze[] = _( "Erzeugt dunklen Dunst.\n" "Löscht alle Statusänder."); -static const u8 gMoveDescription_Reflect[] = _( +static const u8 MoveDescription_Reflect[] = _( "Erzeugt Lichtwand, schützt\n" "teilweise vor phys. Angr."); -static const u8 gMoveDescription_FocusEnergy[] = _( +static const u8 MoveDescription_FocusEnergy[] = _( "Bündelt Kraft. Volltreffer-\n" "chance wird erhöht."); -static const u8 gMoveDescription_Bide[] = _( +static const u8 MoveDescription_Bide[] = _( "Erträgt 2 Runden Angriffe,\n" "schlägt doppelt zurück."); -static const u8 gMoveDescription_Metronome[] = _( +static const u8 MoveDescription_Metronome[] = _( "Bewegt Finger und wählt\n" "PKMN-Attacke zufällig aus."); -static const u8 gMoveDescription_MirrorMove[] = _( +static const u8 MoveDescription_MirrorMove[] = _( "Erwidert gegn. Angriff mit\n" "derselben Attacke."); -static const u8 gMoveDescription_SelfDestruct[] = _( +static const u8 MoveDescription_SelfDestruct[] = _( "Richtet großen Schaden an.\n" "Anwender wird besiegt."); -static const u8 gMoveDescription_EggBomb[] = _( +static const u8 MoveDescription_EggBomb[] = _( "Ein Ei wird auf den Gegner\n" "abgefeuert."); -static const u8 gMoveDescription_Lick[] = _( +static const u8 MoveDescription_Lick[] = _( "Leck-Attacke mit Zunge.\n" "Gegner evtl. paralysiert."); -static const u8 gMoveDescription_Smog[] = _( +static const u8 MoveDescription_Smog[] = _( "Angriff mit Gas. Gegner wird\n" "evtl. vergiftet."); -static const u8 gMoveDescription_Sludge[] = _( +static const u8 MoveDescription_Sludge[] = _( "Wirft Schlamm auf Gegner.\n" "Evtl. Vergiftung."); -static const u8 gMoveDescription_BoneClub[] = _( +static const u8 MoveDescription_BoneClub[] = _( "Schlägt Gegner mit Keule\n" "und verschreckt ihn evtl."); -static const u8 gMoveDescription_FireBlast[] = _( +static const u8 MoveDescription_FireBlast[] = _( "Feuersbrunst, die alles ver-\n" "sengt. Verbrennt Geg. evtl."); -static const u8 gMoveDescription_Waterfall[] = _( +static const u8 MoveDescription_Waterfall[] = _( "Attacke basiert auf Tempo.\n" "Erklimmt Wasserfälle."); -static const u8 gMoveDescription_Clamp[] = _( +static const u8 MoveDescription_Clamp[] = _( "Fängt und drückt Gegner\n" "für 2-5 Runden."); -static const u8 gMoveDescription_Swift[] = _( +static const u8 MoveDescription_Swift[] = _( "Verschießt sternförmige\n" "Strahlen. Treffergarantie!"); -static const u8 gMoveDescription_SkullBash[] = _( +static const u8 MoveDescription_SkullBash[] = _( "Zieht Kopf ein und greift in\n" "der nächsten Runde an."); -static const u8 gMoveDescription_SpikeCannon[] = _( +static const u8 MoveDescription_SpikeCannon[] = _( "Verschießt spitze Stacheln\n" "und trifft 2 - 5-mal."); -static const u8 gMoveDescription_Constrict[] = _( +static const u8 MoveDescription_Constrict[] = _( "Schmerzvoller Klammergriff.\n" "Senkt evtl. INIT.-Wert."); -static const u8 gMoveDescription_Amnesia[] = _( +static const u8 MoveDescription_Amnesia[] = _( "Gedächtnisverlust, der\n" "SPEZ. VERT. deutlich erhöht."); -static const u8 gMoveDescription_Kinesis[] = _( +static const u8 MoveDescription_Kinesis[] = _( "Lenkt Gegner ab und senkt\n" "evtl. seine Genauigkeit."); -static const u8 gMoveDescription_SoftBoiled[] = _( +static const u8 MoveDescription_SoftBoiled[] = _( "Max. KP des Anwenders w.\n" "bis zur Hälfte aufgefüllt."); -static const u8 gMoveDescription_HiJumpKick[] = _( +static const u8 MoveDescription_HiJumpKick[] = _( "Sprung-Tritt mit Knie. Miss-\n" "erfolg verletzt Anwender."); -static const u8 gMoveDescription_Glare[] = _( +static const u8 MoveDescription_Glare[] = _( "Schüchtert Gegner ein, so\n" "dass er paralysiert ist."); -static const u8 gMoveDescription_DreamEater[] = _( +static const u8 MoveDescription_DreamEater[] = _( "Schlafendem Gegner wird\n" "halber Schaden abgezogen."); -static const u8 gMoveDescription_PoisonGas[] = _( +static const u8 MoveDescription_PoisonGas[] = _( "Hüllt Gegner in giftiges Gas\n" "ein, kann vergiften."); -static const u8 gMoveDescription_Barrage[] = _( +static const u8 MoveDescription_Barrage[] = _( "Wirft 2 - 5-mal runde Gegen-\n" "stände auf den Gegner."); -static const u8 gMoveDescription_LeechLife[] = _( +static const u8 MoveDescription_LeechLife[] = _( "Ein Angriff, der die Hälfte\n" "des Schadens saugt."); -static const u8 gMoveDescription_LovelyKiss[] = _( +static const u8 MoveDescription_LovelyKiss[] = _( "Fordert Kuss mit bösem\n" "Blick. Evtl. Schlaf."); -static const u8 gMoveDescription_SkyAttack[] = _( +static const u8 MoveDescription_SkyAttack[] = _( "Sucht nach Schwächen,\n" "Treffer nächste Runde."); -static const u8 gMoveDescription_Transform[] = _( +static const u8 MoveDescription_Transform[] = _( "Ändert die Anwenderzellen\n" "für ein Ebenbild d. Gegners."); -static const u8 gMoveDescription_Bubble[] = _( +static const u8 MoveDescription_Bubble[] = _( "Angriff mit Blasen. INIT.-\n" "Wert wird evtl. gesenkt."); -static const u8 gMoveDescription_DizzyPunch[] = _( +static const u8 MoveDescription_DizzyPunch[] = _( "Rhythmischer Schlag, der\n" "den Gegner verwirren kann."); -static const u8 gMoveDescription_Spore[] = _( +static const u8 MoveDescription_Spore[] = _( "Erzeugt eine Wolke aus ein-\n" "schläfernden Sporen."); -static const u8 gMoveDescription_Flash[] = _( +static const u8 MoveDescription_Flash[] = _( "Erzeugt helles Licht, das\n" "gegn. Genauigkeit senkt."); -static const u8 gMoveDescription_Psywave[] = _( +static const u8 MoveDescription_Psywave[] = _( "Psycho-Welle mit unter-\n" "schiedlicher Intensität."); -static const u8 gMoveDescription_Splash[] = _( +static const u8 MoveDescription_Splash[] = _( "Nur ein Platscher..., der\n" "überhaupt nichts bewirkt."); -static const u8 gMoveDescription_AcidArmor[] = _( +static const u8 MoveDescription_AcidArmor[] = _( "Verflüssigt Körper d. An-\n" "wenders. Erhört VERT."); -static const u8 gMoveDescription_Crabhammer[] = _( +static const u8 MoveDescription_Crabhammer[] = _( "Schlägt mit Schere zu.\n" "Volltrefferchance hoch."); -static const u8 gMoveDescription_Explosion[] = _( +static const u8 MoveDescription_Explosion[] = _( "Richtet großen Schaden an.\n" "Anwender wird besiegt."); -static const u8 gMoveDescription_FurySwipes[] = _( +static const u8 MoveDescription_FurySwipes[] = _( "Beharkt Gegner 2 - 5-mal\n" "mit scharfen Klauen o. ä."); -static const u8 gMoveDescription_Bonemerang[] = _( +static const u8 MoveDescription_Bonemerang[] = _( "Ein Bumerang aus Knochen,\n" "der zweimal trifft."); -static const u8 gMoveDescription_Rest[] = _( +static const u8 MoveDescription_Rest[] = _( "Anwender schläft 2 Runden,\n" "KP und Status erneuert."); -static const u8 gMoveDescription_RockSlide[] = _( +static const u8 MoveDescription_RockSlide[] = _( "Schleudert riesige Felsen.\n" "Verschreckt evtl. Gegner."); -static const u8 gMoveDescription_HyperFang[] = _( +static const u8 MoveDescription_HyperFang[] = _( "Angriff mit Zähnen.\n" "Verschreckt evtl. Gegner."); -static const u8 gMoveDescription_Sharpen[] = _( +static const u8 MoveDescription_Sharpen[] = _( "Reduziert Polygonzahl und\n" "erhöht ANGR.-Wert."); -static const u8 gMoveDescription_Conversion[] = _( +static const u8 MoveDescription_Conversion[] = _( "Wandelt Typ d. Anwenders in\n" "eigenen Attacken-Typ."); -static const u8 gMoveDescription_TriAttack[] = _( +static const u8 MoveDescription_TriAttack[] = _( "Feuert 3 Arten von Strahlen\n" "gleichzeitig ab."); -static const u8 gMoveDescription_SuperFang[] = _( +static const u8 MoveDescription_SuperFang[] = _( "Greift mit scharfen Zähnen\n" "an. Halbiert gegnerische KP."); -static const u8 gMoveDescription_Slash[] = _( +static const u8 MoveDescription_Slash[] = _( "Hieb mit Klauen o. ä. Hohe\n" "Volltrefferquote."); -static const u8 gMoveDescription_Substitute[] = _( +static const u8 MoveDescription_Substitute[] = _( "Lockvogel, der 1/4 der max.\n" "KP des Anwenders besitzt."); -static const u8 gMoveDescription_Struggle[] = _( +static const u8 MoveDescription_Struggle[] = _( "Einsatz nur bei verbrauch-\n" "ten AP. Selbstschädigung!"); -static const u8 gMoveDescription_Sketch[] = _( +static const u8 MoveDescription_Sketch[] = _( "Kopiert stets den zuletzt\n" "erlittenen Angriff."); -static const u8 gMoveDescription_TripleKick[] = _( +static const u8 MoveDescription_TripleKick[] = _( "Tritt Gegner 3-mal nach-\n" "einander. Härte nimmt zu."); -static const u8 gMoveDescription_Thief[] = _( +static const u8 MoveDescription_Thief[] = _( "Kann das vom Gegner\n" "gehaltene Item stehlen."); -static const u8 gMoveDescription_SpiderWeb[] = _( +static const u8 MoveDescription_SpiderWeb[] = _( "Wickelt Gegner ein. Flucht \n" "oder Tausch unmöglich."); -static const u8 gMoveDescription_MindReader[] = _( +static const u8 MoveDescription_MindReader[] = _( "Ahnt gegnerische Aktion.\n" "Nächste Attacke trifft."); -static const u8 gMoveDescription_Nightmare[] = _( +static const u8 MoveDescription_Nightmare[] = _( "Bewirkt 1/4 Schaden pro\n" "Zug bei schlafendem Gegner."); -static const u8 gMoveDescription_FlameWheel[] = _( +static const u8 MoveDescription_FlameWheel[] = _( "Feuer-Attacke, die Gegner\n" "evtl. verbrennt."); -static const u8 gMoveDescription_Snore[] = _( +static const u8 MoveDescription_Snore[] = _( "Laute Attacke. Kann nur im\n" "Schlaf benutzt werden."); -static const u8 gMoveDescription_Curse[] = _( +static const u8 MoveDescription_Curse[] = _( "Ein Angriff, der bei GEIST-\n" "PKMN anders funktioniert."); -static const u8 gMoveDescription_Flail[] = _( +static const u8 MoveDescription_Flail[] = _( "Richtet mehr Schaden an,\n" "wenn eigene KP niedrig sind."); -static const u8 gMoveDescription_Conversion2[] = _( +static const u8 MoveDescription_Conversion2[] = _( "Anwender wird resistent\n" "gegen letzten Angr.-Typ."); -static const u8 gMoveDescription_Aeroblast[] = _( +static const u8 MoveDescription_Aeroblast[] = _( "Erzeugt ein Vakuum.\n" "Hohe Volltrefferquote."); -static const u8 gMoveDescription_CottonSpore[] = _( +static const u8 MoveDescription_CottonSpore[] = _( "Sporen heften sich an den\n" "Gegner. Senkt INIT.-Wert."); -static const u8 gMoveDescription_Reversal[] = _( +static const u8 MoveDescription_Reversal[] = _( "Richtet mehr Schaden an,\n" "wenn eigene KP niedrig sind."); -static const u8 gMoveDescription_Spite[] = _( +static const u8 MoveDescription_Spite[] = _( "AP des letzten gegner.\n" "Angriffs werden gesenkt."); -static const u8 gMoveDescription_PowderSnow[] = _( +static const u8 MoveDescription_PowderSnow[] = _( "Schnee auf Gegner, der\n" "evtl. eingefroren wird."); -static const u8 gMoveDescription_Protect[] = _( +static const u8 MoveDescription_Protect[] = _( "Weicht Angriff aus.\n" "Scheitert evtl. bei Wdh."); -static const u8 gMoveDescription_MachPunch[] = _( +static const u8 MoveDescription_MachPunch[] = _( "Schneller Hieb, der stets\n" "zuerst trifft."); -static const u8 gMoveDescription_ScaryFace[] = _( +static const u8 MoveDescription_ScaryFace[] = _( "Erschreckt mit Grimasse. \n" "INIT.-Wert sinkt deutlich."); -static const u8 gMoveDescription_FaintAttack[] = _( +static const u8 MoveDescription_FaintAttack[] = _( "Zieht Gegner heran und\n" "trifft mit Sicherheit."); -static const u8 gMoveDescription_SweetKiss[] = _( +static const u8 MoveDescription_SweetKiss[] = _( "Fordert Kuss mit süßem\n" "Blick. Verwirrt Gegner evtl."); -static const u8 gMoveDescription_BellyDrum[] = _( +static const u8 MoveDescription_BellyDrum[] = _( "Erhöht ANGR.-Wert,\n" "opfert jedoch KP."); -static const u8 gMoveDescription_SludgeBomb[] = _( +static const u8 MoveDescription_SludgeBomb[] = _( "Wirft Schlamm auf Gegner\n" "und vergiftet ihn evtl."); -static const u8 gMoveDescription_MudSlap[] = _( +static const u8 MoveDescription_MudSlap[] = _( "Wirft Gegner Matsch ins Ge-\n" "sicht. Genauigkeit sinkt."); -static const u8 gMoveDescription_Octazooka[] = _( +static const u8 MoveDescription_Octazooka[] = _( "Verschießt Tinte und senkt\n" "dadurch Genauigkeit."); -static const u8 gMoveDescription_Spikes[] = _( +static const u8 MoveDescription_Spikes[] = _( "Richtet bei Tausch Schaden\n" "mit Stacheln an."); -static const u8 gMoveDescription_ZapCannon[] = _( +static const u8 MoveDescription_ZapCannon[] = _( "Kräftige, ungenaue At-\n" "tacke, die evtl. paralysiert."); -static const u8 gMoveDescription_Foresight[] = _( +static const u8 MoveDescription_Foresight[] = _( "Verhindert Anstieg von\n" "gegnerischem Fluchtwert."); -static const u8 gMoveDescription_DestinyBond[] = _( +static const u8 MoveDescription_DestinyBond[] = _( "Wird der Angreifer besiegt,\n" "gilt das auch für d. Gegner."); -static const u8 gMoveDescription_PerishSong[] = _( +static const u8 MoveDescription_PerishSong[] = _( "Wer dieses Lied hört, wird\n" "nach 3 Runden besiegt."); -static const u8 gMoveDescription_IcyWind[] = _( +static const u8 MoveDescription_IcyWind[] = _( "Eis-Attacke, die den INIT.-\n" "Wert des Gegners senkt."); -static const u8 gMoveDescription_Detect[] = _( +static const u8 MoveDescription_Detect[] = _( "Wendet Attacken ab, Erfolg\n" "sinkt bei Wiederholung."); -static const u8 gMoveDescription_BoneRush[] = _( +static const u8 MoveDescription_BoneRush[] = _( "Greift Gegner 2 - 5-mal in\n" "Folge mit einem Knochen an."); -static const u8 gMoveDescription_LockOn[] = _( +static const u8 MoveDescription_LockOn[] = _( "Visiert Gegner an u. trifft\n" "in der nächsten Runde."); -static const u8 gMoveDescription_Outrage[] = _( +static const u8 MoveDescription_Outrage[] = _( "Wiederholt Angriff 2-3 Run-\n" "den lang. Verwirrt Anwender."); -static const u8 gMoveDescription_Sandstorm[] = _( +static const u8 MoveDescription_Sandstorm[] = _( "Erzeugt einen Sandsturm,\n" "der mehrere Runden wütet."); -static const u8 gMoveDescription_GigaDrain[] = _( +static const u8 MoveDescription_GigaDrain[] = _( "Absorbiert die Hälfte des\n" "angerichteten Schadens."); -static const u8 gMoveDescription_Endure[] = _( +static const u8 MoveDescription_Endure[] = _( "Hält jeder Attacke 1 Runde\n" "stand. 1 KP bleibt stets."); -static const u8 gMoveDescription_Charm[] = _( +static const u8 MoveDescription_Charm[] = _( "Betört den Gegner u. redu-\n" "ziert seinen ANGR. deutlich."); -static const u8 gMoveDescription_Rollout[] = _( +static const u8 MoveDescription_Rollout[] = _( "Attacke, die 5 Runden\n" "dauert. Die Härte nimmt zu."); -static const u8 gMoveDescription_FalseSwipe[] = _( +static const u8 MoveDescription_FalseSwipe[] = _( "Ein Angriff, der dem Gegner\n" "zumindest 1 KP lässt."); -static const u8 gMoveDescription_Swagger[] = _( +static const u8 MoveDescription_Swagger[] = _( "Verwirrt den Gegner und\n" "erhöht ANGR.-Wert deutlich."); -static const u8 gMoveDescription_MilkDrink[] = _( +static const u8 MoveDescription_MilkDrink[] = _( "Füllt bis zur Hälfte der max.\n" "KP des Benutzers auf."); -static const u8 gMoveDescription_Spark[] = _( +static const u8 MoveDescription_Spark[] = _( "Elektro-Hieb, der Gegner\n" "paralysieren kann."); -static const u8 gMoveDescription_FuryCutter[] = _( +static const u8 MoveDescription_FuryCutter[] = _( "Eine Attacke, deren Härte\n" "bei jedem Treffer zunimmt."); -static const u8 gMoveDescription_SteelWing[] = _( +static const u8 MoveDescription_SteelWing[] = _( "Trifft den Gegner hart mit\n" "ausgebreiteten Flügeln."); -static const u8 gMoveDescription_MeanLook[] = _( +static const u8 MoveDescription_MeanLook[] = _( "Böser Blick, der die Flucht\n" "des Gegners vereitelt."); -static const u8 gMoveDescription_Attract[] = _( +static const u8 MoveDescription_Attract[] = _( "Angriff des anderen Ge-\n" "schlechts unwahrscheinl."); -static const u8 gMoveDescription_SleepTalk[] = _( +static const u8 MoveDescription_SleepTalk[] = _( "Benutzt per Zufall eine\n" "Attacke im Schlaf."); -static const u8 gMoveDescription_HealBell[] = _( +static const u8 MoveDescription_HealBell[] = _( "Läutet beruhigend, heilt\n" "alle Status-Veränderungen."); -static const u8 gMoveDescription_Return[] = _( +static const u8 MoveDescription_Return[] = _( "Angriff, dessen Kraft bei \n" "Freundschaft größer wird."); -static const u8 gMoveDescription_Present[] = _( +static const u8 MoveDescription_Present[] = _( "Eine Bombe als Geschenk. Es\n" "kann KP wiederherstellen."); -static const u8 gMoveDescription_Frustration[] = _( +static const u8 MoveDescription_Frustration[] = _( "Die Attacke ist stärker bei\n" "verhassten TRAINERn."); -static const u8 gMoveDescription_Safeguard[] = _( +static const u8 MoveDescription_Safeguard[] = _( "Mystische Kraft, die alle\n" "Statusprobleme verhindert."); -static const u8 gMoveDescription_PainSplit[] = _( +static const u8 MoveDescription_PainSplit[] = _( "Addiert KP v. Anwender u.\n" "Gegner, teilt gerecht auf."); -static const u8 gMoveDescription_SacredFire[] = _( +static const u8 MoveDescription_SacredFire[] = _( "Mystische Feuer-Attacke, \n" "die d. Geg. evtl. verbrennt."); -static const u8 gMoveDescription_Magnitude[] = _( +static const u8 MoveDescription_Magnitude[] = _( "Ein erdbebenartiger An-\n" "griff von zufälliger Stärke."); -static const u8 gMoveDescription_DynamicPunch[] = _( +static const u8 MoveDescription_DynamicPunch[] = _( "Kräftige Attacke, die ver-\n" "wirrt, aber ungenau ist."); -static const u8 gMoveDescription_Megahorn[] = _( +static const u8 MoveDescription_Megahorn[] = _( "Brutaler Frontalangriff\n" "mit spitzen Hörnern."); -static const u8 gMoveDescription_DragonBreath[] = _( +static const u8 MoveDescription_DragonBreath[] = _( "Fegt den Gegner mit zer-\n" "störerisch heißem Atem weg."); -static const u8 gMoveDescription_BatonPass[] = _( +static const u8 MoveDescription_BatonPass[] = _( "Tauscht PKMN aus. Alle Än-\n" "derungen bleiben bestehen."); -static const u8 gMoveDescription_Encore[] = _( +static const u8 MoveDescription_Encore[] = _( "Gegner wiederholt letzten\n" "Angriff 2 - 6-mal."); -static const u8 gMoveDescription_Pursuit[] = _( +static const u8 MoveDescription_Pursuit[] = _( "Richtet großen Schaden bei\n" "Austausch des Gegners an."); -static const u8 gMoveDescription_RapidSpin[] = _( +static const u8 MoveDescription_RapidSpin[] = _( "Trifft den Gegner durch\n" "Drehen mit max. Tempo."); -static const u8 gMoveDescription_SweetScent[] = _( +static const u8 MoveDescription_SweetScent[] = _( "Lockt Gegner an und senkt\n" "seinen Fluchtwert."); -static const u8 gMoveDescription_IronTail[] = _( +static const u8 MoveDescription_IronTail[] = _( "Att. mit hartem Schweif. \n" "Senkt evtl. VERT.-Wert."); -static const u8 gMoveDescription_MetalClaw[] = _( +static const u8 MoveDescription_MetalClaw[] = _( "Klauen-Attacke. Evtl. Er-\n" "höhung d. ANGR.-Wert d. Anw."); -static const u8 gMoveDescription_VitalThrow[] = _( +static const u8 MoveDescription_VitalThrow[] = _( "Attacke stets gleich, aber\n" "mit Treffergarantie."); -static const u8 gMoveDescription_MorningSun[] = _( +static const u8 MoveDescription_MorningSun[] = _( "Füllt KP auf. Die Menge\n" "hängt vom Wetter ab."); -static const u8 gMoveDescription_Synthesis[] = _( +static const u8 MoveDescription_Synthesis[] = _( "Füllt KP auf. Die Menge\n" "hängt vom Wetter ab."); -static const u8 gMoveDescription_Moonlight[] = _( +static const u8 MoveDescription_Moonlight[] = _( "Füllt KP auf. Die Menge\n" "hängt vom Wetter ab."); -static const u8 gMoveDescription_HiddenPower[] = _( +static const u8 MoveDescription_HiddenPower[] = _( "Die Wirkung dieser Attacke\n" "hängt vom Benutzer ab."); -static const u8 gMoveDescription_CrossChop[] = _( +static const u8 MoveDescription_CrossChop[] = _( "Doppelter Hieb. Hohe \n" "Volltrefferquote."); -static const u8 gMoveDescription_Twister[] = _( +static const u8 MoveDescription_Twister[] = _( "Trifft Gegner mit\n" "heftigem Wirbelsturm."); -static const u8 gMoveDescription_RainDance[] = _( +static const u8 MoveDescription_RainDance[] = _( "Erhöht Stärke von WASSER-\n" "Attacken 5 Runden lang."); -static const u8 gMoveDescription_SunnyDay[] = _( +static const u8 MoveDescription_SunnyDay[] = _( "Erhöht Stärke von FEUER-\n" "Attacken 5 Runden lang."); -static const u8 gMoveDescription_Crunch[] = _( +static const u8 MoveDescription_Crunch[] = _( "Beißt mit Reißzähnen zu und\n" "senkt evtl. SPEZ. VERT."); -static const u8 gMoveDescription_MirrorCoat[] = _( +static const u8 MoveDescription_MirrorCoat[] = _( "Kontert d. Spezial-Attacke\n" "d. Geg. mit 2-facher Kraft."); -static const u8 gMoveDescription_PsychUp[] = _( +static const u8 MoveDescription_PsychUp[] = _( "Kopiert Effekte d. Gegners\n" "u. gibt sie dem Angreifer."); -static const u8 gMoveDescription_ExtremeSpeed[] = _( +static const u8 MoveDescription_ExtremeSpeed[] = _( "Extrem schnelle und kraft-\n" "volle Attacke."); -static const u8 gMoveDescription_AncientPower[] = _( +static const u8 MoveDescription_AncientPower[] = _( "Ein Angriff, der alle\n" "Status-Werte erhöhen kann."); -static const u8 gMoveDescription_ShadowBall[] = _( +static const u8 MoveDescription_ShadowBall[] = _( "Bewirft Gegner und senkt\n" "evtl. SPEZ. VERT."); -static const u8 gMoveDescription_FutureSight[] = _( +static const u8 MoveDescription_FutureSight[] = _( "Stärkt innere Kraft. Trifft\n" "2 Runden später."); -static const u8 gMoveDescription_RockSmash[] = _( +static const u8 MoveDescription_RockSmash[] = _( "Zertrümmernder Angriff, \n" "der evtl. VERT.-Wert senkt."); -static const u8 gMoveDescription_Whirlpool[] = _( +static const u8 MoveDescription_Whirlpool[] = _( "Hält Gegner 2-5 Züge in\n" "einem Strudel gefangen."); -static const u8 gMoveDescription_BeatUp[] = _( +static const u8 MoveDescription_BeatUp[] = _( "Ruft POKéMON hinzu, um an\n" "dem Angriff teilzuhaben."); -static const u8 gMoveDescription_FakeOut[] = _( +static const u8 MoveDescription_FakeOut[] = _( "Trifft schon mit dem ersten\n" "Schlag. Verjagt Gegner evtl."); -static const u8 gMoveDescription_Uproar[] = _( +static const u8 MoveDescription_Uproar[] = _( "Erzeugt für 2-5 Züge einen\n" "Aufruhr. Verhindert Schlaf."); -static const u8 gMoveDescription_Stockpile[] = _( +static const u8 MoveDescription_Stockpile[] = _( "Lädt Kraft für bis zu 3\n" "Runden auf."); -static const u8 gMoveDescription_SpitUp[] = _( +static const u8 MoveDescription_SpitUp[] = _( "Entlädt gehortete Kraft.\n" "Je mehr, desto besser."); -static const u8 gMoveDescription_Swallow[] = _( +static const u8 MoveDescription_Swallow[] = _( "Absorbiert gehortete\n" "Kraft. Stellt KP wieder her."); -static const u8 gMoveDescription_HeatWave[] = _( +static const u8 MoveDescription_HeatWave[] = _( "Gegner wird von heißem Atem\n" "getroffen. Verbrennt evtl."); -static const u8 gMoveDescription_Hail[] = _( +static const u8 MoveDescription_Hail[] = _( "Erzeugt Hagelsturm, der in\n" "jeder Runde trifft."); -static const u8 gMoveDescription_Torment[] = _( +static const u8 MoveDescription_Torment[] = _( "Quält Gegner u. verhindert\n" "Wdh. eines Angriffs."); -static const u8 gMoveDescription_Flatter[] = _( +static const u8 MoveDescription_Flatter[] = _( "Verwirrt den Gegner, erhöht\n" "aber dessen SPEZ. ANGR."); -static const u8 gMoveDescription_WillOWisp[] = _( +static const u8 MoveDescription_WillOWisp[] = _( "Fügt dem Gegner \n" "Verbrennungen zu."); -static const u8 gMoveDescription_Memento[] = _( +static const u8 MoveDescription_Memento[] = _( "Der Benutzer ist besiegt\n" "und senkt die gegn. Werte."); -static const u8 gMoveDescription_Facade[] = _( +static const u8 MoveDescription_Facade[] = _( "Erhöht ANGR. nach Verbren-\n" "nung, Paralyse o. Vergift."); -static const u8 gMoveDescription_FocusPunch[] = _( +static const u8 MoveDescription_FocusPunch[] = _( "Angriff, der später trifft.\n" "Ben. schreckt evtl. zurück."); -static const u8 gMoveDescription_SmellingSalt[] = _( +static const u8 MoveDescription_SmellingSalt[] = _( "Effektiv geg. paralysierte\n" "Gegner. Heilt sie aber auch."); -static const u8 gMoveDescription_FollowMe[] = _( +static const u8 MoveDescription_FollowMe[] = _( "Zieht Aufmerksamkeit an.\n" "Gegner greift nur Anw. an."); -static const u8 gMoveDescription_NaturePower[] = _( +static const u8 MoveDescription_NaturePower[] = _( "Die Elementklasse des\n" "Angriffs hängt vom Ort ab."); -static const u8 gMoveDescription_Charge[] = _( +static const u8 MoveDescription_Charge[] = _( "Lädt Energie für den kom-\n" "menden Elektro-Angr. auf."); -static const u8 gMoveDescription_Taunt[] = _( +static const u8 MoveDescription_Taunt[] = _( "Legt den Gegner rein. Er\n" "benutzt nur noch Angriffe."); -static const u8 gMoveDescription_HelpingHand[] = _( +static const u8 MoveDescription_HelpingHand[] = _( "Steigert die Kraft der An-\n" "griffe des Getroffenen."); -static const u8 gMoveDescription_Trick[] = _( +static const u8 MoveDescription_Trick[] = _( "Betrügt beim Handel\n" "mit Gegenständen."); -static const u8 gMoveDescription_RolePlay[] = _( +static const u8 MoveDescription_RolePlay[] = _( "Parodiert Gegner u. kopiert\n" "seine Spezialfähigkeiten."); -static const u8 gMoveDescription_Wish[] = _( +static const u8 MoveDescription_Wish[] = _( "Ein Wunsch, der KP auffüllt.\n" "Die Erfüllung braucht Zeit."); -static const u8 gMoveDescription_Assist[] = _( +static const u8 MoveDescription_Assist[] = _( "Greift zufällig mit einem\n" "Angriff d. Partners an."); -static const u8 gMoveDescription_Ingrain[] = _( +static const u8 MoveDescription_Ingrain[] = _( "Verwurzelung füllt KP auf.\n" "Austausch unmöglich."); -static const u8 gMoveDescription_Superpower[] = _( +static const u8 MoveDescription_Superpower[] = _( "Steigert Stärke deutlich,\n" "senkt aber Status-Werte."); -static const u8 gMoveDescription_MagicCoat[] = _( +static const u8 MoveDescription_MagicCoat[] = _( "Gibt Spezialeffekte zurück\n" "an Benutzer."); -static const u8 gMoveDescription_Recycle[] = _( +static const u8 MoveDescription_Recycle[] = _( "Recycling eines\n" "verwendeten Items."); -static const u8 gMoveDescription_Revenge[] = _( +static const u8 MoveDescription_Revenge[] = _( "Attacke wird stärker, wenn\n" "Anwender Schaden nimmt."); -static const u8 gMoveDescription_BrickBreak[] = _( +static const u8 MoveDescription_BrickBreak[] = _( "Durchbricht Barrieren und\n" "verursacht Schaden."); -static const u8 gMoveDescription_Yawn[] = _( +static const u8 MoveDescription_Yawn[] = _( "Gegner gähnt und schläft\n" "in der nächsten Runde ein."); -static const u8 gMoveDescription_KnockOff[] = _( +static const u8 MoveDescription_KnockOff[] = _( "Schlägt Gegner Item weg.\n" "Vereitelt so den Gebrauch."); -static const u8 gMoveDescription_Endeavor[] = _( +static const u8 MoveDescription_Endeavor[] = _( "Wird stärker, wenn Anw.-KP\n" "geringer als Gegner-KP ist."); -static const u8 gMoveDescription_Eruption[] = _( +static const u8 MoveDescription_Eruption[] = _( "Je höher KP des Benutzers,\n" "desto mehr Schaden."); -static const u8 gMoveDescription_SkillSwap[] = _( +static const u8 MoveDescription_SkillSwap[] = _( "Anw. tauscht Spezial-\n" "fähigkeit mit POKéMON."); -static const u8 gMoveDescription_Imprison[] = _( +static const u8 MoveDescription_Imprison[] = _( "Hindert Gegner an Atta-\n" "cken, die d. Benutzer kennt."); -static const u8 gMoveDescription_Refresh[] = _( +static const u8 MoveDescription_Refresh[] = _( "Kuriert Vergiftungen, Para-\n" "lyse und Verbrennung."); -static const u8 gMoveDescription_Grudge[] = _( +static const u8 MoveDescription_Grudge[] = _( "Wenn Anw. bes., werden AP\n" "der Finalattacke gelöscht."); -static const u8 gMoveDescription_Snatch[] = _( +static const u8 MoveDescription_Snatch[] = _( "Immunität geg. den Effekt\n" "d. nächsten gegn. Angriffs."); -static const u8 gMoveDescription_SecretPower[] = _( +static const u8 MoveDescription_SecretPower[] = _( "Angriff, dessen Auswirkung\n" "abhängig vom Ort ist."); -static const u8 gMoveDescription_Dive[] = _( +static const u8 MoveDescription_Dive[] = _( "Taucht in der 1. Runde\n" "unter u. trifft in der 2."); -static const u8 gMoveDescription_ArmThrust[] = _( +static const u8 MoveDescription_ArmThrust[] = _( "Schläge mit geradem Arm, die\n" "Gegner 2 - 5-mal treffen."); -static const u8 gMoveDescription_Camouflage[] = _( +static const u8 MoveDescription_Camouflage[] = _( "Die Elementklasse des\n" "POKéMON hängt vom Ort ab."); -static const u8 gMoveDescription_TailGlow[] = _( +static const u8 MoveDescription_TailGlow[] = _( "Ein blinkendes Licht. SPEZ.\n" "ANGR. wird deutlich erhöht."); -static const u8 gMoveDescription_LusterPurge[] = _( +static const u8 MoveDescription_LusterPurge[] = _( "Angriff mit grellem Licht.\n" "Senkt evtl. SPEZ. VERT."); -static const u8 gMoveDescription_MistBall[] = _( +static const u8 MoveDescription_MistBall[] = _( "Angriff m. Daunengestöber,\n" "Senkt evtl. SPEZ. ANGR."); -static const u8 gMoveDescription_FeatherDance[] = _( +static const u8 MoveDescription_FeatherDance[] = _( "Hüllt Gegner in Daunen und\n" "senkt ANGR.-Wert deutlich."); -static const u8 gMoveDescription_TeeterDance[] = _( +static const u8 MoveDescription_TeeterDance[] = _( "Verwirrt alle POKéMON im \n" "Kampf."); -static const u8 gMoveDescription_BlazeKick[] = _( +static const u8 MoveDescription_BlazeKick[] = _( "Hohe Volltrefferquote. Ver-\n" "ursacht evtl. Verbrennung."); -static const u8 gMoveDescription_MudSport[] = _( +static const u8 MoveDescription_MudSport[] = _( "Bedeckt Anw. mit Lehm u. er-\n" "höht Schutz geg. Elek.-Att."); -static const u8 gMoveDescription_IceBall[] = _( +static const u8 MoveDescription_IceBall[] = _( "Angriff für 5 Runden. \n" "Stärker, wenn Treffer."); -static const u8 gMoveDescription_NeedleArm[] = _( +static const u8 MoveDescription_NeedleArm[] = _( "Angriff mit dornigen Armen. \n" "Geg. schreckt evtl. zurück."); -static const u8 gMoveDescription_SlackOff[] = _( +static const u8 MoveDescription_SlackOff[] = _( "Durch Müßiggang wird die\n" "Hälfte d. max. KP aufgefüllt."); -static const u8 gMoveDescription_HyperVoice[] = _( +static const u8 MoveDescription_HyperVoice[] = _( "Laute Attacke mit Schall-\n" "wellen."); -static const u8 gMoveDescription_PoisonFang[] = _( +static const u8 MoveDescription_PoisonFang[] = _( "Angriff mit Reißzähnen. \n" "Gegner wird evtl. vergiftet."); -static const u8 gMoveDescription_CrushClaw[] = _( +static const u8 MoveDescription_CrushClaw[] = _( "Angriff mit scharfen Klau-\n" "en. Senkt evtl. VERT.-Wert."); -static const u8 gMoveDescription_BlastBurn[] = _( +static const u8 MoveDescription_BlastBurn[] = _( "Starker Angriff. Angreifer\n" "muss eine Runde aussetzen."); -static const u8 gMoveDescription_HydroCannon[] = _( +static const u8 MoveDescription_HydroCannon[] = _( "Starker Angriff. Angreifer\n" "muss eine Runde aussetzen."); -static const u8 gMoveDescription_MeteorMash[] = _( +static const u8 MoveDescription_MeteorMash[] = _( "Ein Schlag wie ein Meteor.\n" "Erhöht evtl. ANGR.-Wert."); -static const u8 gMoveDescription_Astonish[] = _( +static const u8 MoveDescription_Astonish[] = _( "Angriff, der Gegner evtl.\n" "zurückschrecken lässt."); -static const u8 gMoveDescription_WeatherBall[] = _( +static const u8 MoveDescription_WeatherBall[] = _( "Elementkl. u. Stärke der At-\n" "tacke sind wetterabhängig."); -static const u8 gMoveDescription_Aromatherapy[] = _( +static const u8 MoveDescription_Aromatherapy[] = _( "Heilt alle Status-Probleme\n" "mit beruhigendem Duft."); -static const u8 gMoveDescription_FakeTears[] = _( +static const u8 MoveDescription_FakeTears[] = _( "Täuscht Weinen vor, um\n" "gegn. SPEZ. VERT. zu senken."); -static const u8 gMoveDescription_AirCutter[] = _( +static const u8 MoveDescription_AirCutter[] = _( "Greift mit heftigem Wind an.\n" "Hohe Volltrefferquote."); -static const u8 gMoveDescription_Overheat[] = _( +static const u8 MoveDescription_Overheat[] = _( "Angriff mit voller Kraft.\n" "SPEZ. ANGR. sinkt deutlich."); -static const u8 gMoveDescription_OdorSleuth[] = _( +static const u8 MoveDescription_OdorSleuth[] = _( "Hindert Gegner daran, ihren\n" "Fluchtwert zu erhöhen."); -static const u8 gMoveDescription_RockTomb[] = _( +static const u8 MoveDescription_RockTomb[] = _( "Hält den Feind mit Steinen\n" "auf u. senkt INIT.-Wert."); -static const u8 gMoveDescription_SilverWind[] = _( +static const u8 MoveDescription_SilverWind[] = _( "Pulver-Attacke, die evtl.\n" "die Werte erhöht."); -static const u8 gMoveDescription_MetalSound[] = _( +static const u8 MoveDescription_MetalSound[] = _( "Stößt einen spitzen Schrei\n" "aus. Senkt SPEZ. VERT."); -static const u8 gMoveDescription_GrassWhistle[] = _( +static const u8 MoveDescription_GrassWhistle[] = _( "Versetzt Gegner mit schö-\n" "ner Melodie in den Schlaf."); -static const u8 gMoveDescription_Tickle[] = _( +static const u8 MoveDescription_Tickle[] = _( "Bringt Gegner zum Lachen.\n" "ANGR. u. VERT. sinken."); -static const u8 gMoveDescription_CosmicPower[] = _( +static const u8 MoveDescription_CosmicPower[] = _( "Erhöht VERT. u. SPEZ. VERT.\n" "durch mystische Kraft."); -static const u8 gMoveDescription_WaterSpout[] = _( +static const u8 MoveDescription_WaterSpout[] = _( "Ist wirkungsvoller, wenn KP\n" "des Benutzers hoch sind."); -static const u8 gMoveDescription_SignalBeam[] = _( +static const u8 MoveDescription_SignalBeam[] = _( "Seltsame Strahlenattacke.\n" "Verwirrt evtl. den Gegner."); -static const u8 gMoveDescription_ShadowPunch[] = _( +static const u8 MoveDescription_ShadowPunch[] = _( "Schattenhieb. Ausweichen\n" "unmöglich."); -static const u8 gMoveDescription_Extrasensory[] = _( +static const u8 MoveDescription_Extrasensory[] = _( "Besonderer Angriff. Gegner\n" "schreckt evtl. zurück."); -static const u8 gMoveDescription_SkyUppercut[] = _( +static const u8 MoveDescription_SkyUppercut[] = _( "Kinnhaken, als würde man in\n" "die Luft springen."); -static const u8 gMoveDescription_SandTomb[] = _( +static const u8 MoveDescription_SandTomb[] = _( "Gegner leidet für 2-5\n" "Runden in Sandhose."); -static const u8 gMoveDescription_SheerCold[] = _( +static const u8 MoveDescription_SheerCold[] = _( "Eis-Attacke. Besiegt den\n" "Gegner, wenn sie trifft."); -static const u8 gMoveDescription_MuddyWater[] = _( +static const u8 MoveDescription_MuddyWater[] = _( "Greift mit Matsch an und\n" "senkt evtl. Genauigkeit."); -static const u8 gMoveDescription_BulletSeed[] = _( +static const u8 MoveDescription_BulletSeed[] = _( "Verschießt 2 bis 5 Samen\n" "gleichzeitig auf Gegner."); -static const u8 gMoveDescription_AerialAce[] = _( +static const u8 MoveDescription_AerialAce[] = _( "Eine extrem schnelle und\n" "unausweichbare Attacke."); -static const u8 gMoveDescription_IcicleSpear[] = _( +static const u8 MoveDescription_IcicleSpear[] = _( "Feuert 2-5 Eiszapfen auf\n" "den Gegner."); -static const u8 gMoveDescription_IronDefense[] = _( +static const u8 MoveDescription_IronDefense[] = _( "Stärkt den Körper.\n" "Erhöht VERT.-Wert deutlich."); -static const u8 gMoveDescription_Block[] = _( +static const u8 MoveDescription_Block[] = _( "Versperrt den Fluchtweg\n" "des Gegners."); -static const u8 gMoveDescription_Howl[] = _( +static const u8 MoveDescription_Howl[] = _( "Jault, um in sich zu gehen.\n" "Erhöht ANGR.-Wert."); -static const u8 gMoveDescription_DragonClaw[] = _( +static const u8 MoveDescription_DragonClaw[] = _( "Der Gegner wird mit\n" "scharfen Klauen verletzt."); -static const u8 gMoveDescription_FrenzyPlant[] = _( +static const u8 MoveDescription_FrenzyPlant[] = _( "Starker Angriff. Angreifer\n" "muss eine Runde aussetzen."); -static const u8 gMoveDescription_BulkUp[] = _( +static const u8 MoveDescription_BulkUp[] = _( "Pumpt den Körper auf. ANGR.\n" "u. VERT. werden erhöht."); -static const u8 gMoveDescription_Bounce[] = _( +static const u8 MoveDescription_Bounce[] = _( "Springt hoch u. landet in\n" "nächstem Zug. Evtl. Para."); -static const u8 gMoveDescription_MudShot[] = _( +static const u8 MoveDescription_MudShot[] = _( "Bewirft den Gegner mit Lehm\n" "und senkt INIT.-Wert."); -static const u8 gMoveDescription_PoisonTail[] = _( +static const u8 MoveDescription_PoisonTail[] = _( "Hohe Volltrefferquote.\n" "Gegner evtl. vergiftet."); -static const u8 gMoveDescription_Covet[] = _( +static const u8 MoveDescription_Covet[] = _( "Bittet charmant um das ge-\n" "haltene Item des Gegners."); -static const u8 gMoveDescription_VoltTackle[] = _( +static const u8 MoveDescription_VoltTackle[] = _( "Lebensgefährliche Attacke,\n" "leichte Selbstschädigung."); -static const u8 gMoveDescription_MagicalLeaf[] = _( +static const u8 MoveDescription_MagicalLeaf[] = _( "Magischer Blattangriff.\n" "Ausweichen unmöglich."); -static const u8 gMoveDescription_WaterSport[] = _( +static const u8 MoveDescription_WaterSport[] = _( "Benutzer wird nass, so dass\n" "er Feuer besser standhält."); -static const u8 gMoveDescription_CalmMind[] = _( +static const u8 MoveDescription_CalmMind[] = _( "Erhöht SPEZ. ANGR. u. SPEZ.\n" "VERT. durch Konzentration."); -static const u8 gMoveDescription_LeafBlade[] = _( +static const u8 MoveDescription_LeafBlade[] = _( "Hieb mit scharfkantigem\n" "Blatt. Hohe Volltrefferqu."); -static const u8 gMoveDescription_DragonDance[] = _( +static const u8 MoveDescription_DragonDance[] = _( "Ein mystischer Tanz, der\n" "ANGR.- u. INIT.-Wert erhöht."); -static const u8 gMoveDescription_RockBlast[] = _( +static const u8 MoveDescription_RockBlast[] = _( "Wirft 2 - 5-mal in Folge\n" "Felsblöcke auf den Gegner."); -static const u8 gMoveDescription_ShockWave[] = _( +static const u8 MoveDescription_ShockWave[] = _( "Schnelle Elektro-Attacke\n" "mit Treffergarantie."); -static const u8 gMoveDescription_WaterPulse[] = _( +static const u8 MoveDescription_WaterPulse[] = _( "Ultraschallwellen, die den\n" "Gegner verwirren können."); -static const u8 gMoveDescription_DoomDesire[] = _( +static const u8 MoveDescription_DoomDesire[] = _( "Speichert Sonnenenergie.\n" "Angriff 2 Runden später."); -static const u8 gMoveDescription_PsychoBoost[] = _( +static const u8 MoveDescription_PsychoBoost[] = _( "Angriff mit voller Kraft.\n" "SPEZ. ANGR. sinkt deutlich."); -const u8 * const gMoveDescriptions[] = { - gMoveDescription_Pound, - gMoveDescription_KarateChop, - gMoveDescription_DoubleSlap, - gMoveDescription_CometPunch, - gMoveDescription_MegaPunch, - gMoveDescription_PayDay, - gMoveDescription_FirePunch, - gMoveDescription_IcePunch, - gMoveDescription_ThunderPunch, - gMoveDescription_Scratch, - gMoveDescription_ViceGrip, - gMoveDescription_Guillotine, - gMoveDescription_RazorWind, - gMoveDescription_SwordsDance, - gMoveDescription_Cut, - gMoveDescription_Gust, - gMoveDescription_WingAttack, - gMoveDescription_Whirlwind, - gMoveDescription_Fly, - gMoveDescription_Bind, - gMoveDescription_Slam, - gMoveDescription_VineWhip, - gMoveDescription_Stomp, - gMoveDescription_DoubleKick, - gMoveDescription_MegaKick, - gMoveDescription_JumpKick, - gMoveDescription_RollingKick, - gMoveDescription_SandAttack, - gMoveDescription_Headbutt, - gMoveDescription_HornAttack, - gMoveDescription_FuryAttack, - gMoveDescription_HornDrill, - gMoveDescription_Tackle, - gMoveDescription_BodySlam, - gMoveDescription_Wrap, - gMoveDescription_TakeDown, - gMoveDescription_Thrash, - gMoveDescription_DoubleEdge, - gMoveDescription_TailWhip, - gMoveDescription_PoisonSting, - gMoveDescription_Twineedle, - gMoveDescription_PinMissile, - gMoveDescription_Leer, - gMoveDescription_Bite, - gMoveDescription_Growl, - gMoveDescription_Roar, - gMoveDescription_Sing, - gMoveDescription_Supersonic, - gMoveDescription_SonicBoom, - gMoveDescription_Disable, - gMoveDescription_Acid, - gMoveDescription_Ember, - gMoveDescription_Flamethrower, - gMoveDescription_Mist, - gMoveDescription_WaterGun, - gMoveDescription_HydroPump, - gMoveDescription_Surf, - gMoveDescription_IceBeam, - gMoveDescription_Blizzard, - gMoveDescription_Psybeam, - gMoveDescription_BubbleBeam, - gMoveDescription_AuroraBeam, - gMoveDescription_HyperBeam, - gMoveDescription_Peck, - gMoveDescription_DrillPeck, - gMoveDescription_Submission, - gMoveDescription_LowKick, - gMoveDescription_Counter, - gMoveDescription_SeismicToss, - gMoveDescription_Strength, - gMoveDescription_Absorb, - gMoveDescription_MegaDrain, - gMoveDescription_LeechSeed, - gMoveDescription_Growth, - gMoveDescription_RazorLeaf, - gMoveDescription_SolarBeam, - gMoveDescription_PoisonPowder, - gMoveDescription_StunSpore, - gMoveDescription_SleepPowder, - gMoveDescription_PetalDance, - gMoveDescription_StringShot, - gMoveDescription_DragonRage, - gMoveDescription_FireSpin, - gMoveDescription_ThunderShock, - gMoveDescription_Thunderbolt, - gMoveDescription_ThunderWave, - gMoveDescription_Thunder, - gMoveDescription_RockThrow, - gMoveDescription_Earthquake, - gMoveDescription_Fissure, - gMoveDescription_Dig, - gMoveDescription_Toxic, - gMoveDescription_Confusion, - gMoveDescription_Psychic, - gMoveDescription_Hypnosis, - gMoveDescription_Meditate, - gMoveDescription_Agility, - gMoveDescription_QuickAttack, - gMoveDescription_Rage, - gMoveDescription_Teleport, - gMoveDescription_NightShade, - gMoveDescription_Mimic, - gMoveDescription_Screech, - gMoveDescription_DoubleTeam, - gMoveDescription_Recover, - gMoveDescription_Harden, - gMoveDescription_Minimize, - gMoveDescription_Smokescreen, - gMoveDescription_ConfuseRay, - gMoveDescription_Withdraw, - gMoveDescription_DefenseCurl, - gMoveDescription_Barrier, - gMoveDescription_LightScreen, - gMoveDescription_Haze, - gMoveDescription_Reflect, - gMoveDescription_FocusEnergy, - gMoveDescription_Bide, - gMoveDescription_Metronome, - gMoveDescription_MirrorMove, - gMoveDescription_SelfDestruct, - gMoveDescription_EggBomb, - gMoveDescription_Lick, - gMoveDescription_Smog, - gMoveDescription_Sludge, - gMoveDescription_BoneClub, - gMoveDescription_FireBlast, - gMoveDescription_Waterfall, - gMoveDescription_Clamp, - gMoveDescription_Swift, - gMoveDescription_SkullBash, - gMoveDescription_SpikeCannon, - gMoveDescription_Constrict, - gMoveDescription_Amnesia, - gMoveDescription_Kinesis, - gMoveDescription_SoftBoiled, - gMoveDescription_HiJumpKick, - gMoveDescription_Glare, - gMoveDescription_DreamEater, - gMoveDescription_PoisonGas, - gMoveDescription_Barrage, - gMoveDescription_LeechLife, - gMoveDescription_LovelyKiss, - gMoveDescription_SkyAttack, - gMoveDescription_Transform, - gMoveDescription_Bubble, - gMoveDescription_DizzyPunch, - gMoveDescription_Spore, - gMoveDescription_Flash, - gMoveDescription_Psywave, - gMoveDescription_Splash, - gMoveDescription_AcidArmor, - gMoveDescription_Crabhammer, - gMoveDescription_Explosion, - gMoveDescription_FurySwipes, - gMoveDescription_Bonemerang, - gMoveDescription_Rest, - gMoveDescription_RockSlide, - gMoveDescription_HyperFang, - gMoveDescription_Sharpen, - gMoveDescription_Conversion, - gMoveDescription_TriAttack, - gMoveDescription_SuperFang, - gMoveDescription_Slash, - gMoveDescription_Substitute, - gMoveDescription_Struggle, - gMoveDescription_Sketch, - gMoveDescription_TripleKick, - gMoveDescription_Thief, - gMoveDescription_SpiderWeb, - gMoveDescription_MindReader, - gMoveDescription_Nightmare, - gMoveDescription_FlameWheel, - gMoveDescription_Snore, - gMoveDescription_Curse, - gMoveDescription_Flail, - gMoveDescription_Conversion2, - gMoveDescription_Aeroblast, - gMoveDescription_CottonSpore, - gMoveDescription_Reversal, - gMoveDescription_Spite, - gMoveDescription_PowderSnow, - gMoveDescription_Protect, - gMoveDescription_MachPunch, - gMoveDescription_ScaryFace, - gMoveDescription_FaintAttack, - gMoveDescription_SweetKiss, - gMoveDescription_BellyDrum, - gMoveDescription_SludgeBomb, - gMoveDescription_MudSlap, - gMoveDescription_Octazooka, - gMoveDescription_Spikes, - gMoveDescription_ZapCannon, - gMoveDescription_Foresight, - gMoveDescription_DestinyBond, - gMoveDescription_PerishSong, - gMoveDescription_IcyWind, - gMoveDescription_Detect, - gMoveDescription_BoneRush, - gMoveDescription_LockOn, - gMoveDescription_Outrage, - gMoveDescription_Sandstorm, - gMoveDescription_GigaDrain, - gMoveDescription_Endure, - gMoveDescription_Charm, - gMoveDescription_Rollout, - gMoveDescription_FalseSwipe, - gMoveDescription_Swagger, - gMoveDescription_MilkDrink, - gMoveDescription_Spark, - gMoveDescription_FuryCutter, - gMoveDescription_SteelWing, - gMoveDescription_MeanLook, - gMoveDescription_Attract, - gMoveDescription_SleepTalk, - gMoveDescription_HealBell, - gMoveDescription_Return, - gMoveDescription_Present, - gMoveDescription_Frustration, - gMoveDescription_Safeguard, - gMoveDescription_PainSplit, - gMoveDescription_SacredFire, - gMoveDescription_Magnitude, - gMoveDescription_DynamicPunch, - gMoveDescription_Megahorn, - gMoveDescription_DragonBreath, - gMoveDescription_BatonPass, - gMoveDescription_Encore, - gMoveDescription_Pursuit, - gMoveDescription_RapidSpin, - gMoveDescription_SweetScent, - gMoveDescription_IronTail, - gMoveDescription_MetalClaw, - gMoveDescription_VitalThrow, - gMoveDescription_MorningSun, - gMoveDescription_Synthesis, - gMoveDescription_Moonlight, - gMoveDescription_HiddenPower, - gMoveDescription_CrossChop, - gMoveDescription_Twister, - gMoveDescription_RainDance, - gMoveDescription_SunnyDay, - gMoveDescription_Crunch, - gMoveDescription_MirrorCoat, - gMoveDescription_PsychUp, - gMoveDescription_ExtremeSpeed, - gMoveDescription_AncientPower, - gMoveDescription_ShadowBall, - gMoveDescription_FutureSight, - gMoveDescription_RockSmash, - gMoveDescription_Whirlpool, - gMoveDescription_BeatUp, - gMoveDescription_FakeOut, - gMoveDescription_Uproar, - gMoveDescription_Stockpile, - gMoveDescription_SpitUp, - gMoveDescription_Swallow, - gMoveDescription_HeatWave, - gMoveDescription_Hail, - gMoveDescription_Torment, - gMoveDescription_Flatter, - gMoveDescription_WillOWisp, - gMoveDescription_Memento, - gMoveDescription_Facade, - gMoveDescription_FocusPunch, - gMoveDescription_SmellingSalt, - gMoveDescription_FollowMe, - gMoveDescription_NaturePower, - gMoveDescription_Charge, - gMoveDescription_Taunt, - gMoveDescription_HelpingHand, - gMoveDescription_Trick, - gMoveDescription_RolePlay, - gMoveDescription_Wish, - gMoveDescription_Assist, - gMoveDescription_Ingrain, - gMoveDescription_Superpower, - gMoveDescription_MagicCoat, - gMoveDescription_Recycle, - gMoveDescription_Revenge, - gMoveDescription_BrickBreak, - gMoveDescription_Yawn, - gMoveDescription_KnockOff, - gMoveDescription_Endeavor, - gMoveDescription_Eruption, - gMoveDescription_SkillSwap, - gMoveDescription_Imprison, - gMoveDescription_Refresh, - gMoveDescription_Grudge, - gMoveDescription_Snatch, - gMoveDescription_SecretPower, - gMoveDescription_Dive, - gMoveDescription_ArmThrust, - gMoveDescription_Camouflage, - gMoveDescription_TailGlow, - gMoveDescription_LusterPurge, - gMoveDescription_MistBall, - gMoveDescription_FeatherDance, - gMoveDescription_TeeterDance, - gMoveDescription_BlazeKick, - gMoveDescription_MudSport, - gMoveDescription_IceBall, - gMoveDescription_NeedleArm, - gMoveDescription_SlackOff, - gMoveDescription_HyperVoice, - gMoveDescription_PoisonFang, - gMoveDescription_CrushClaw, - gMoveDescription_BlastBurn, - gMoveDescription_HydroCannon, - gMoveDescription_MeteorMash, - gMoveDescription_Astonish, - gMoveDescription_WeatherBall, - gMoveDescription_Aromatherapy, - gMoveDescription_FakeTears, - gMoveDescription_AirCutter, - gMoveDescription_Overheat, - gMoveDescription_OdorSleuth, - gMoveDescription_RockTomb, - gMoveDescription_SilverWind, - gMoveDescription_MetalSound, - gMoveDescription_GrassWhistle, - gMoveDescription_Tickle, - gMoveDescription_CosmicPower, - gMoveDescription_WaterSpout, - gMoveDescription_SignalBeam, - gMoveDescription_ShadowPunch, - gMoveDescription_Extrasensory, - gMoveDescription_SkyUppercut, - gMoveDescription_SandTomb, - gMoveDescription_SheerCold, - gMoveDescription_MuddyWater, - gMoveDescription_BulletSeed, - gMoveDescription_AerialAce, - gMoveDescription_IcicleSpear, - gMoveDescription_IronDefense, - gMoveDescription_Block, - gMoveDescription_Howl, - gMoveDescription_DragonClaw, - gMoveDescription_FrenzyPlant, - gMoveDescription_BulkUp, - gMoveDescription_Bounce, - gMoveDescription_MudShot, - gMoveDescription_PoisonTail, - gMoveDescription_Covet, - gMoveDescription_VoltTackle, - gMoveDescription_MagicalLeaf, - gMoveDescription_WaterSport, - gMoveDescription_CalmMind, - gMoveDescription_LeafBlade, - gMoveDescription_DragonDance, - gMoveDescription_RockBlast, - gMoveDescription_ShockWave, - gMoveDescription_WaterPulse, - gMoveDescription_DoomDesire, - gMoveDescription_PsychoBoost, +const u8 * const MoveDescriptions[] = { + MoveDescription_Pound, + MoveDescription_KarateChop, + MoveDescription_DoubleSlap, + MoveDescription_CometPunch, + MoveDescription_MegaPunch, + MoveDescription_PayDay, + MoveDescription_FirePunch, + MoveDescription_IcePunch, + MoveDescription_ThunderPunch, + MoveDescription_Scratch, + MoveDescription_ViceGrip, + MoveDescription_Guillotine, + MoveDescription_RazorWind, + MoveDescription_SwordsDance, + MoveDescription_Cut, + MoveDescription_Gust, + MoveDescription_WingAttack, + MoveDescription_Whirlwind, + MoveDescription_Fly, + MoveDescription_Bind, + MoveDescription_Slam, + MoveDescription_VineWhip, + MoveDescription_Stomp, + MoveDescription_DoubleKick, + MoveDescription_MegaKick, + MoveDescription_JumpKick, + MoveDescription_RollingKick, + MoveDescription_SandAttack, + MoveDescription_Headbutt, + MoveDescription_HornAttack, + MoveDescription_FuryAttack, + MoveDescription_HornDrill, + MoveDescription_Tackle, + MoveDescription_BodySlam, + MoveDescription_Wrap, + MoveDescription_TakeDown, + MoveDescription_Thrash, + MoveDescription_DoubleEdge, + MoveDescription_TailWhip, + MoveDescription_PoisonSting, + MoveDescription_Twineedle, + MoveDescription_PinMissile, + MoveDescription_Leer, + MoveDescription_Bite, + MoveDescription_Growl, + MoveDescription_Roar, + MoveDescription_Sing, + MoveDescription_Supersonic, + MoveDescription_SonicBoom, + MoveDescription_Disable, + MoveDescription_Acid, + MoveDescription_Ember, + MoveDescription_Flamethrower, + MoveDescription_Mist, + MoveDescription_WaterGun, + MoveDescription_HydroPump, + MoveDescription_Surf, + MoveDescription_IceBeam, + MoveDescription_Blizzard, + MoveDescription_Psybeam, + MoveDescription_BubbleBeam, + MoveDescription_AuroraBeam, + MoveDescription_HyperBeam, + MoveDescription_Peck, + MoveDescription_DrillPeck, + MoveDescription_Submission, + MoveDescription_LowKick, + MoveDescription_Counter, + MoveDescription_SeismicToss, + MoveDescription_Strength, + MoveDescription_Absorb, + MoveDescription_MegaDrain, + MoveDescription_LeechSeed, + MoveDescription_Growth, + MoveDescription_RazorLeaf, + MoveDescription_SolarBeam, + MoveDescription_PoisonPowder, + MoveDescription_StunSpore, + MoveDescription_SleepPowder, + MoveDescription_PetalDance, + MoveDescription_StringShot, + MoveDescription_DragonRage, + MoveDescription_FireSpin, + MoveDescription_ThunderShock, + MoveDescription_Thunderbolt, + MoveDescription_ThunderWave, + MoveDescription_Thunder, + MoveDescription_RockThrow, + MoveDescription_Earthquake, + MoveDescription_Fissure, + MoveDescription_Dig, + MoveDescription_Toxic, + MoveDescription_Confusion, + MoveDescription_Psychic, + MoveDescription_Hypnosis, + MoveDescription_Meditate, + MoveDescription_Agility, + MoveDescription_QuickAttack, + MoveDescription_Rage, + MoveDescription_Teleport, + MoveDescription_NightShade, + MoveDescription_Mimic, + MoveDescription_Screech, + MoveDescription_DoubleTeam, + MoveDescription_Recover, + MoveDescription_Harden, + MoveDescription_Minimize, + MoveDescription_Smokescreen, + MoveDescription_ConfuseRay, + MoveDescription_Withdraw, + MoveDescription_DefenseCurl, + MoveDescription_Barrier, + MoveDescription_LightScreen, + MoveDescription_Haze, + MoveDescription_Reflect, + MoveDescription_FocusEnergy, + MoveDescription_Bide, + MoveDescription_Metronome, + MoveDescription_MirrorMove, + MoveDescription_SelfDestruct, + MoveDescription_EggBomb, + MoveDescription_Lick, + MoveDescription_Smog, + MoveDescription_Sludge, + MoveDescription_BoneClub, + MoveDescription_FireBlast, + MoveDescription_Waterfall, + MoveDescription_Clamp, + MoveDescription_Swift, + MoveDescription_SkullBash, + MoveDescription_SpikeCannon, + MoveDescription_Constrict, + MoveDescription_Amnesia, + MoveDescription_Kinesis, + MoveDescription_SoftBoiled, + MoveDescription_HiJumpKick, + MoveDescription_Glare, + MoveDescription_DreamEater, + MoveDescription_PoisonGas, + MoveDescription_Barrage, + MoveDescription_LeechLife, + MoveDescription_LovelyKiss, + MoveDescription_SkyAttack, + MoveDescription_Transform, + MoveDescription_Bubble, + MoveDescription_DizzyPunch, + MoveDescription_Spore, + MoveDescription_Flash, + MoveDescription_Psywave, + MoveDescription_Splash, + MoveDescription_AcidArmor, + MoveDescription_Crabhammer, + MoveDescription_Explosion, + MoveDescription_FurySwipes, + MoveDescription_Bonemerang, + MoveDescription_Rest, + MoveDescription_RockSlide, + MoveDescription_HyperFang, + MoveDescription_Sharpen, + MoveDescription_Conversion, + MoveDescription_TriAttack, + MoveDescription_SuperFang, + MoveDescription_Slash, + MoveDescription_Substitute, + MoveDescription_Struggle, + MoveDescription_Sketch, + MoveDescription_TripleKick, + MoveDescription_Thief, + MoveDescription_SpiderWeb, + MoveDescription_MindReader, + MoveDescription_Nightmare, + MoveDescription_FlameWheel, + MoveDescription_Snore, + MoveDescription_Curse, + MoveDescription_Flail, + MoveDescription_Conversion2, + MoveDescription_Aeroblast, + MoveDescription_CottonSpore, + MoveDescription_Reversal, + MoveDescription_Spite, + MoveDescription_PowderSnow, + MoveDescription_Protect, + MoveDescription_MachPunch, + MoveDescription_ScaryFace, + MoveDescription_FaintAttack, + MoveDescription_SweetKiss, + MoveDescription_BellyDrum, + MoveDescription_SludgeBomb, + MoveDescription_MudSlap, + MoveDescription_Octazooka, + MoveDescription_Spikes, + MoveDescription_ZapCannon, + MoveDescription_Foresight, + MoveDescription_DestinyBond, + MoveDescription_PerishSong, + MoveDescription_IcyWind, + MoveDescription_Detect, + MoveDescription_BoneRush, + MoveDescription_LockOn, + MoveDescription_Outrage, + MoveDescription_Sandstorm, + MoveDescription_GigaDrain, + MoveDescription_Endure, + MoveDescription_Charm, + MoveDescription_Rollout, + MoveDescription_FalseSwipe, + MoveDescription_Swagger, + MoveDescription_MilkDrink, + MoveDescription_Spark, + MoveDescription_FuryCutter, + MoveDescription_SteelWing, + MoveDescription_MeanLook, + MoveDescription_Attract, + MoveDescription_SleepTalk, + MoveDescription_HealBell, + MoveDescription_Return, + MoveDescription_Present, + MoveDescription_Frustration, + MoveDescription_Safeguard, + MoveDescription_PainSplit, + MoveDescription_SacredFire, + MoveDescription_Magnitude, + MoveDescription_DynamicPunch, + MoveDescription_Megahorn, + MoveDescription_DragonBreath, + MoveDescription_BatonPass, + MoveDescription_Encore, + MoveDescription_Pursuit, + MoveDescription_RapidSpin, + MoveDescription_SweetScent, + MoveDescription_IronTail, + MoveDescription_MetalClaw, + MoveDescription_VitalThrow, + MoveDescription_MorningSun, + MoveDescription_Synthesis, + MoveDescription_Moonlight, + MoveDescription_HiddenPower, + MoveDescription_CrossChop, + MoveDescription_Twister, + MoveDescription_RainDance, + MoveDescription_SunnyDay, + MoveDescription_Crunch, + MoveDescription_MirrorCoat, + MoveDescription_PsychUp, + MoveDescription_ExtremeSpeed, + MoveDescription_AncientPower, + MoveDescription_ShadowBall, + MoveDescription_FutureSight, + MoveDescription_RockSmash, + MoveDescription_Whirlpool, + MoveDescription_BeatUp, + MoveDescription_FakeOut, + MoveDescription_Uproar, + MoveDescription_Stockpile, + MoveDescription_SpitUp, + MoveDescription_Swallow, + MoveDescription_HeatWave, + MoveDescription_Hail, + MoveDescription_Torment, + MoveDescription_Flatter, + MoveDescription_WillOWisp, + MoveDescription_Memento, + MoveDescription_Facade, + MoveDescription_FocusPunch, + MoveDescription_SmellingSalt, + MoveDescription_FollowMe, + MoveDescription_NaturePower, + MoveDescription_Charge, + MoveDescription_Taunt, + MoveDescription_HelpingHand, + MoveDescription_Trick, + MoveDescription_RolePlay, + MoveDescription_Wish, + MoveDescription_Assist, + MoveDescription_Ingrain, + MoveDescription_Superpower, + MoveDescription_MagicCoat, + MoveDescription_Recycle, + MoveDescription_Revenge, + MoveDescription_BrickBreak, + MoveDescription_Yawn, + MoveDescription_KnockOff, + MoveDescription_Endeavor, + MoveDescription_Eruption, + MoveDescription_SkillSwap, + MoveDescription_Imprison, + MoveDescription_Refresh, + MoveDescription_Grudge, + MoveDescription_Snatch, + MoveDescription_SecretPower, + MoveDescription_Dive, + MoveDescription_ArmThrust, + MoveDescription_Camouflage, + MoveDescription_TailGlow, + MoveDescription_LusterPurge, + MoveDescription_MistBall, + MoveDescription_FeatherDance, + MoveDescription_TeeterDance, + MoveDescription_BlazeKick, + MoveDescription_MudSport, + MoveDescription_IceBall, + MoveDescription_NeedleArm, + MoveDescription_SlackOff, + MoveDescription_HyperVoice, + MoveDescription_PoisonFang, + MoveDescription_CrushClaw, + MoveDescription_BlastBurn, + MoveDescription_HydroCannon, + MoveDescription_MeteorMash, + MoveDescription_Astonish, + MoveDescription_WeatherBall, + MoveDescription_Aromatherapy, + MoveDescription_FakeTears, + MoveDescription_AirCutter, + MoveDescription_Overheat, + MoveDescription_OdorSleuth, + MoveDescription_RockTomb, + MoveDescription_SilverWind, + MoveDescription_MetalSound, + MoveDescription_GrassWhistle, + MoveDescription_Tickle, + MoveDescription_CosmicPower, + MoveDescription_WaterSpout, + MoveDescription_SignalBeam, + MoveDescription_ShadowPunch, + MoveDescription_Extrasensory, + MoveDescription_SkyUppercut, + MoveDescription_SandTomb, + MoveDescription_SheerCold, + MoveDescription_MuddyWater, + MoveDescription_BulletSeed, + MoveDescription_AerialAce, + MoveDescription_IcicleSpear, + MoveDescription_IronDefense, + MoveDescription_Block, + MoveDescription_Howl, + MoveDescription_DragonClaw, + MoveDescription_FrenzyPlant, + MoveDescription_BulkUp, + MoveDescription_Bounce, + MoveDescription_MudShot, + MoveDescription_PoisonTail, + MoveDescription_Covet, + MoveDescription_VoltTackle, + MoveDescription_MagicalLeaf, + MoveDescription_WaterSport, + MoveDescription_CalmMind, + MoveDescription_LeafBlade, + MoveDescription_DragonDance, + MoveDescription_RockBlast, + MoveDescription_ShockWave, + MoveDescription_WaterPulse, + MoveDescription_DoomDesire, + MoveDescription_PsychoBoost, ]; diff --git a/src/data/text/move_descriptions_en.h b/src/data/text/move_descriptions_en.h index 0bfb31ff1..3c3a961d1 100644 --- a/src/data/text/move_descriptions_en.h +++ b/src/data/text/move_descriptions_en.h @@ -1,1772 +1,1772 @@ -static const u8 gMoveDescription_Pound[] = _( +static const u8 MoveDescription_Pound[] = _( "Pounds the foe with\n" "forelegs or tail."); -static const u8 gMoveDescription_KarateChop[] = _( +static const u8 MoveDescription_KarateChop[] = _( "A chopping attack with a\n" "high critical-hit ratio."); -static const u8 gMoveDescription_DoubleSlap[] = _( +static const u8 MoveDescription_DoubleSlap[] = _( "Repeatedly slaps the foe\n" "2 to 5 times."); -static const u8 gMoveDescription_CometPunch[] = _( +static const u8 MoveDescription_CometPunch[] = _( "Repeatedly punches the foe\n" "2 to 5 times."); -static const u8 gMoveDescription_MegaPunch[] = _( +static const u8 MoveDescription_MegaPunch[] = _( "A strong punch thrown with\n" "incredible power."); -static const u8 gMoveDescription_PayDay[] = _( +static const u8 MoveDescription_PayDay[] = _( "Throws coins at the foe.\n" "Money is recovered after."); -static const u8 gMoveDescription_FirePunch[] = _( +static const u8 MoveDescription_FirePunch[] = _( "A fiery punch that may burn\n" "the foe."); -static const u8 gMoveDescription_IcePunch[] = _( +static const u8 MoveDescription_IcePunch[] = _( "An icy punch that may\n" "freeze the foe."); -static const u8 gMoveDescription_ThunderPunch[] = _( +static const u8 MoveDescription_ThunderPunch[] = _( "An electrified punch that\n" "may paralyze the foe."); -static const u8 gMoveDescription_Scratch[] = _( +static const u8 MoveDescription_Scratch[] = _( "Scratches the foe with\n" "sharp claws."); -static const u8 gMoveDescription_ViceGrip[] = _( +static const u8 MoveDescription_ViceGrip[] = _( "Grips the foe with large and\n" "powerful pincers."); -static const u8 gMoveDescription_Guillotine[] = _( +static const u8 MoveDescription_Guillotine[] = _( "A powerful pincer attack\n" "that may cause fainting."); -static const u8 gMoveDescription_RazorWind[] = _( +static const u8 MoveDescription_RazorWind[] = _( "A 2-turn move that strikes\n" "the foe on the 2nd turn."); -static const u8 gMoveDescription_SwordsDance[] = _( +static const u8 MoveDescription_SwordsDance[] = _( "A fighting dance that\n" "sharply raises ATTACK."); -static const u8 gMoveDescription_Cut[] = _( +static const u8 MoveDescription_Cut[] = _( "Cuts the foe with sharp\n" "scythes, claws, etc."); -static const u8 gMoveDescription_Gust[] = _( +static const u8 MoveDescription_Gust[] = _( "Strikes the foe with a gust\n" "of wind whipped up by wings."); -static const u8 gMoveDescription_WingAttack[] = _( +static const u8 MoveDescription_WingAttack[] = _( "Strikes the foe with wings\n" "spread wide."); -static const u8 gMoveDescription_Whirlwind[] = _( +static const u8 MoveDescription_Whirlwind[] = _( "Blows away the foe with\n" "wind and ends the battle."); -static const u8 gMoveDescription_Fly[] = _( +static const u8 MoveDescription_Fly[] = _( "Flies up on the first turn,\n" "then strikes the next turn."); -static const u8 gMoveDescription_Bind[] = _( +static const u8 MoveDescription_Bind[] = _( "Binds and squeezes the foe\n" "for 2 to 5 turns."); -static const u8 gMoveDescription_Slam[] = _( +static const u8 MoveDescription_Slam[] = _( "Slams the foe with a long\n" "tail, vine, etc."); -static const u8 gMoveDescription_VineWhip[] = _( +static const u8 MoveDescription_VineWhip[] = _( "Strikes the foe with\n" "slender, whiplike vines."); -static const u8 gMoveDescription_Stomp[] = _( +static const u8 MoveDescription_Stomp[] = _( "Stomps the enemy with a big\n" "foot. May cause flinching."); -static const u8 gMoveDescription_DoubleKick[] = _( +static const u8 MoveDescription_DoubleKick[] = _( "A double-kicking attack\n" "that strikes the foe twice."); -static const u8 gMoveDescription_MegaKick[] = _( +static const u8 MoveDescription_MegaKick[] = _( "An extremely powerful kick\n" "with intense force."); -static const u8 gMoveDescription_JumpKick[] = _( +static const u8 MoveDescription_JumpKick[] = _( "A strong jumping kick. May\n" "miss and hurt the kicker."); -static const u8 gMoveDescription_RollingKick[] = _( +static const u8 MoveDescription_RollingKick[] = _( "A fast kick delivered from\n" "a rapid spin."); -static const u8 gMoveDescription_SandAttack[] = _( +static const u8 MoveDescription_SandAttack[] = _( "Reduces the foe’s accuracy\n" "by hurling sand in its face."); -static const u8 gMoveDescription_Headbutt[] = _( +static const u8 MoveDescription_Headbutt[] = _( "A ramming attack that may\n" "cause flinching."); -static const u8 gMoveDescription_HornAttack[] = _( +static const u8 MoveDescription_HornAttack[] = _( "Jabs the foe with sharp\n" "horns."); -static const u8 gMoveDescription_FuryAttack[] = _( +static const u8 MoveDescription_FuryAttack[] = _( "Jabs the foe 2 to 5 times\n" "with sharp horns, etc."); -static const u8 gMoveDescription_HornDrill[] = _( +static const u8 MoveDescription_HornDrill[] = _( "A one-hit KO attack that\n" "uses a horn like a drill."); -static const u8 gMoveDescription_Tackle[] = _( +static const u8 MoveDescription_Tackle[] = _( "Charges the foe with a full-\n" "body tackle."); -static const u8 gMoveDescription_BodySlam[] = _( +static const u8 MoveDescription_BodySlam[] = _( "A full-body slam that may\n" "cause paralysis."); -static const u8 gMoveDescription_Wrap[] = _( +static const u8 MoveDescription_Wrap[] = _( "Wraps and squeezes the foe\n" "2 to 5 times with vines, etc."); -static const u8 gMoveDescription_TakeDown[] = _( +static const u8 MoveDescription_TakeDown[] = _( "A reckless charge attack\n" "that also hurts the user."); -static const u8 gMoveDescription_Thrash[] = _( +static const u8 MoveDescription_Thrash[] = _( "A rampage of 2 to 3 turns\n" "that confuses the user."); -static const u8 gMoveDescription_DoubleEdge[] = _( +static const u8 MoveDescription_DoubleEdge[] = _( "A life-risking tackle that\n" "also hurts the user."); -static const u8 gMoveDescription_TailWhip[] = _( +static const u8 MoveDescription_TailWhip[] = _( "Wags the tail to lower the\n" "foe’s DEFENSE."); -static const u8 gMoveDescription_PoisonSting[] = _( +static const u8 MoveDescription_PoisonSting[] = _( "A toxic attack with barbs,\n" "etc., that may poison."); -static const u8 gMoveDescription_Twineedle[] = _( +static const u8 MoveDescription_Twineedle[] = _( "Stingers on the forelegs\n" "jab the foe twice."); -static const u8 gMoveDescription_PinMissile[] = _( +static const u8 MoveDescription_PinMissile[] = _( "Sharp pins are fired to\n" "strike 2 to 5 times."); -static const u8 gMoveDescription_Leer[] = _( +static const u8 MoveDescription_Leer[] = _( "Frightens the foe with a\n" "leer to lower DEFENSE."); -static const u8 gMoveDescription_Bite[] = _( +static const u8 MoveDescription_Bite[] = _( "Bites with vicious fangs.\n" "May cause flinching."); -static const u8 gMoveDescription_Growl[] = _( +static const u8 MoveDescription_Growl[] = _( "Growls cutely to reduce the\n" "foe’s ATTACK."); -static const u8 gMoveDescription_Roar[] = _( +static const u8 MoveDescription_Roar[] = _( "Makes the foe flee to end\n" "the battle."); -static const u8 gMoveDescription_Sing[] = _( +static const u8 MoveDescription_Sing[] = _( "A soothing song lulls the\n" "foe into a deep slumber."); -static const u8 gMoveDescription_Supersonic[] = _( +static const u8 MoveDescription_Supersonic[] = _( "Emits bizarre sound waves\n" "that may confuse the foe."); -static const u8 gMoveDescription_SonicBoom[] = _( +static const u8 MoveDescription_SonicBoom[] = _( "Launches shock waves that\n" "always inflict 20 HP damage."); -static const u8 gMoveDescription_Disable[] = _( +static const u8 MoveDescription_Disable[] = _( "Psychically disables one of\n" "the foe’s moves."); -static const u8 gMoveDescription_Acid[] = _( +static const u8 MoveDescription_Acid[] = _( "Sprays a hide-melting acid.\n" "May lower DEFENSE."); -static const u8 gMoveDescription_Ember[] = _( +static const u8 MoveDescription_Ember[] = _( "A weak fire attack that may\n" "inflict a burn."); -static const u8 gMoveDescription_Flamethrower[] = _( +static const u8 MoveDescription_Flamethrower[] = _( "A powerful fire attack that\n" "may inflict a burn."); -static const u8 gMoveDescription_Mist[] = _( +static const u8 MoveDescription_Mist[] = _( "Creates a mist that stops\n" "reduction of abilities."); -static const u8 gMoveDescription_WaterGun[] = _( +static const u8 MoveDescription_WaterGun[] = _( "Squirts water to attack\n" "the foe."); -static const u8 gMoveDescription_HydroPump[] = _( +static const u8 MoveDescription_HydroPump[] = _( "Blasts water at high power\n" "to strike the foe."); -static const u8 gMoveDescription_Surf[] = _( +static const u8 MoveDescription_Surf[] = _( "Creates a huge wave, then\n" "crashes it down on the foe."); -static const u8 gMoveDescription_IceBeam[] = _( +static const u8 MoveDescription_IceBeam[] = _( "Blasts the foe with an icy\n" "beam that may freeze it."); -static const u8 gMoveDescription_Blizzard[] = _( +static const u8 MoveDescription_Blizzard[] = _( "Hits the foe with an icy\n" "storm that may freeze it."); -static const u8 gMoveDescription_Psybeam[] = _( +static const u8 MoveDescription_Psybeam[] = _( "Fires a peculiar ray that\n" "may confuse the foe."); -static const u8 gMoveDescription_BubbleBeam[] = _( +static const u8 MoveDescription_BubbleBeam[] = _( "Forcefully sprays bubbles\n" "that may lower SPEED."); -static const u8 gMoveDescription_AuroraBeam[] = _( +static const u8 MoveDescription_AuroraBeam[] = _( "Fires a rainbow-colored\n" "beam that may lower ATTACK."); -static const u8 gMoveDescription_HyperBeam[] = _( +static const u8 MoveDescription_HyperBeam[] = _( "Powerful, but leaves the\n" "user immobile the next turn."); -static const u8 gMoveDescription_Peck[] = _( +static const u8 MoveDescription_Peck[] = _( "Attacks the foe with a\n" "jabbing beak, etc."); -static const u8 gMoveDescription_DrillPeck[] = _( +static const u8 MoveDescription_DrillPeck[] = _( "A corkscrewing attack with\n" "the beak acting as a drill."); -static const u8 gMoveDescription_Submission[] = _( +static const u8 MoveDescription_Submission[] = _( "A reckless body slam that\n" "also hurts the user."); -static const u8 gMoveDescription_LowKick[] = _( +static const u8 MoveDescription_LowKick[] = _( "A kick that inflicts more\n" "damage on heavier foes."); -static const u8 gMoveDescription_Counter[] = _( +static const u8 MoveDescription_Counter[] = _( "Retaliates any physical hit\n" "with double the power."); -static const u8 gMoveDescription_SeismicToss[] = _( +static const u8 MoveDescription_SeismicToss[] = _( "Inflicts damage identical\n" "to the user’s level."); -static const u8 gMoveDescription_Strength[] = _( +static const u8 MoveDescription_Strength[] = _( "Builds enormous power,\n" "then slams the foe."); -static const u8 gMoveDescription_Absorb[] = _( +static const u8 MoveDescription_Absorb[] = _( "An attack that absorbs\n" "half the damage inflicted."); -static const u8 gMoveDescription_MegaDrain[] = _( +static const u8 MoveDescription_MegaDrain[] = _( "An attack that absorbs\n" "half the damage inflicted."); -static const u8 gMoveDescription_LeechSeed[] = _( +static const u8 MoveDescription_LeechSeed[] = _( "Plants a seed on the foe to\n" "steal HP on every turn."); -static const u8 gMoveDescription_Growth[] = _( +static const u8 MoveDescription_Growth[] = _( "Forces the body to grow\n" "and heightens SP. ATK."); -static const u8 gMoveDescription_RazorLeaf[] = _( +static const u8 MoveDescription_RazorLeaf[] = _( "Cuts the enemy with leaves.\n" "High critical-hit ratio."); -static const u8 gMoveDescription_SolarBeam[] = _( +static const u8 MoveDescription_SolarBeam[] = _( "Absorbs light in one turn,\n" "then attacks next turn."); -static const u8 gMoveDescription_PoisonPowder[] = _( +static const u8 MoveDescription_PoisonPowder[] = _( "Scatters a toxic powder\n" "that may poison the foe."); -static const u8 gMoveDescription_StunSpore[] = _( +static const u8 MoveDescription_StunSpore[] = _( "Scatters a powder that may\n" "paralyze the foe."); -static const u8 gMoveDescription_SleepPowder[] = _( +static const u8 MoveDescription_SleepPowder[] = _( "Scatters a powder that may\n" "cause the foe to sleep."); -static const u8 gMoveDescription_PetalDance[] = _( +static const u8 MoveDescription_PetalDance[] = _( "A rampage of 2 to 3 turns\n" "that confuses the user."); -static const u8 gMoveDescription_StringShot[] = _( +static const u8 MoveDescription_StringShot[] = _( "Binds the foe with string\n" "to reduce its SPEED."); -static const u8 gMoveDescription_DragonRage[] = _( +static const u8 MoveDescription_DragonRage[] = _( "Launches shock waves that\n" "always inflict 40 HP damage."); -static const u8 gMoveDescription_FireSpin[] = _( +static const u8 MoveDescription_FireSpin[] = _( "Traps the foe in a ring of\n" "fire for 2 to 5 turns."); -static const u8 gMoveDescription_ThunderShock[] = _( +static const u8 MoveDescription_ThunderShock[] = _( "An electrical attack that\n" "may paralyze the foe."); -static const u8 gMoveDescription_Thunderbolt[] = _( +static const u8 MoveDescription_Thunderbolt[] = _( "A strong electrical attack\n" "that may paralyze the foe."); -static const u8 gMoveDescription_ThunderWave[] = _( +static const u8 MoveDescription_ThunderWave[] = _( "A weak jolt of electricity\n" "that paralyzes the foe."); -static const u8 gMoveDescription_Thunder[] = _( +static const u8 MoveDescription_Thunder[] = _( "A lightning attack that may\n" "cause paralysis."); -static const u8 gMoveDescription_RockThrow[] = _( +static const u8 MoveDescription_RockThrow[] = _( "Throws small rocks to\n" "strike the foe."); -static const u8 gMoveDescription_Earthquake[] = _( +static const u8 MoveDescription_Earthquake[] = _( "A powerful quake, but has\n" "no effect on flying foes."); -static const u8 gMoveDescription_Fissure[] = _( +static const u8 MoveDescription_Fissure[] = _( "A one-hit KO move that\n" "drops the foe in a fissure."); -static const u8 gMoveDescription_Dig[] = _( +static const u8 MoveDescription_Dig[] = _( "Digs underground the first\n" "turn and strikes next turn."); -static const u8 gMoveDescription_Toxic[] = _( +static const u8 MoveDescription_Toxic[] = _( "Poisons the foe with an\n" "intensifying toxin."); -static const u8 gMoveDescription_Confusion[] = _( +static const u8 MoveDescription_Confusion[] = _( "A psychic attack that may\n" "cause confusion."); -static const u8 gMoveDescription_Psychic[] = _( +static const u8 MoveDescription_Psychic[] = _( "A powerful psychic attack\n" "that may lower SP. DEF."); -static const u8 gMoveDescription_Hypnosis[] = _( +static const u8 MoveDescription_Hypnosis[] = _( "A hypnotizing move that\n" "may induce sleep."); -static const u8 gMoveDescription_Meditate[] = _( +static const u8 MoveDescription_Meditate[] = _( "Meditates in a peaceful\n" "fashion to raise ATTACK."); -static const u8 gMoveDescription_Agility[] = _( +static const u8 MoveDescription_Agility[] = _( "Relaxes the body to sharply\n" "boost SPEED."); -static const u8 gMoveDescription_QuickAttack[] = _( +static const u8 MoveDescription_QuickAttack[] = _( "An extremely fast attack\n" "that always strikes first."); -static const u8 gMoveDescription_Rage[] = _( +static const u8 MoveDescription_Rage[] = _( "Raises the user’s ATTACK\n" "every time it is hit."); -static const u8 gMoveDescription_Teleport[] = _( +static const u8 MoveDescription_Teleport[] = _( "A psychic move for fleeing\n" "from battle instantly."); -static const u8 gMoveDescription_NightShade[] = _( +static const u8 MoveDescription_NightShade[] = _( "Inflicts damage identical\n" "to the user’s level."); -static const u8 gMoveDescription_Mimic[] = _( +static const u8 MoveDescription_Mimic[] = _( "Copies a move used by the\n" "foe during one battle."); -static const u8 gMoveDescription_Screech[] = _( +static const u8 MoveDescription_Screech[] = _( "Emits a screech to sharply\n" "reduce the foe’s DEFENSE."); -static const u8 gMoveDescription_DoubleTeam[] = _( +static const u8 MoveDescription_DoubleTeam[] = _( "Creates illusory copies to\n" "raise evasiveness."); -static const u8 gMoveDescription_Recover[] = _( +static const u8 MoveDescription_Recover[] = _( "Recovers up to half the\n" "user’s maximum HP."); -static const u8 gMoveDescription_Harden[] = _( +static const u8 MoveDescription_Harden[] = _( "Stiffens the body’s \n" "muscles to raise DEFENSE."); -static const u8 gMoveDescription_Minimize[] = _( +static const u8 MoveDescription_Minimize[] = _( "Minimizes the user’s size\n" "to raise evasiveness."); -static const u8 gMoveDescription_Smokescreen[] = _( +static const u8 MoveDescription_Smokescreen[] = _( "Lowers the foe’s accuracy\n" "using smoke, ink, etc."); -static const u8 gMoveDescription_ConfuseRay[] = _( +static const u8 MoveDescription_ConfuseRay[] = _( "A sinister ray that\n" "confuses the foe."); -static const u8 gMoveDescription_Withdraw[] = _( +static const u8 MoveDescription_Withdraw[] = _( "Withdraws the body into its\n" "hard shell to raise DEFENSE."); -static const u8 gMoveDescription_DefenseCurl[] = _( +static const u8 MoveDescription_DefenseCurl[] = _( "Curls up to conceal weak\n" "spots and raise DEFENSE."); -static const u8 gMoveDescription_Barrier[] = _( +static const u8 MoveDescription_Barrier[] = _( "Creates a barrier that\n" "sharply raises DEFENSE."); -static const u8 gMoveDescription_LightScreen[] = _( +static const u8 MoveDescription_LightScreen[] = _( "Creates a wall of light that\n" "lowers SP. ATK damage."); -static const u8 gMoveDescription_Haze[] = _( +static const u8 MoveDescription_Haze[] = _( "Creates a black haze that\n" "eliminates all stat changes."); -static const u8 gMoveDescription_Reflect[] = _( +static const u8 MoveDescription_Reflect[] = _( "Creates a wall of light that\n" "weakens physical attacks."); -static const u8 gMoveDescription_FocusEnergy[] = _( +static const u8 MoveDescription_FocusEnergy[] = _( "Focuses power to raise the\n" "critical-hit ratio."); -static const u8 gMoveDescription_Bide[] = _( +static const u8 MoveDescription_Bide[] = _( "Endures attack for 2\n" "turns to retaliate double."); -static const u8 gMoveDescription_Metronome[] = _( +static const u8 MoveDescription_Metronome[] = _( "Waggles a finger to use any\n" "POKéMON move at random."); -static const u8 gMoveDescription_MirrorMove[] = _( +static const u8 MoveDescription_MirrorMove[] = _( "Counters the foe’s attack\n" "with the same move."); -static const u8 gMoveDescription_SelfDestruct[] = _( +static const u8 MoveDescription_SelfDestruct[] = _( "Inflicts severe damage but\n" "makes the user faint."); -static const u8 gMoveDescription_EggBomb[] = _( +static const u8 MoveDescription_EggBomb[] = _( "An egg is forcibly hurled at\n" "the foe."); -static const u8 gMoveDescription_Lick[] = _( +static const u8 MoveDescription_Lick[] = _( "Licks with a long tongue to\n" "injure. May also paralyze."); -static const u8 gMoveDescription_Smog[] = _( +static const u8 MoveDescription_Smog[] = _( "An exhaust-gas attack\n" "that may also poison."); -static const u8 gMoveDescription_Sludge[] = _( +static const u8 MoveDescription_Sludge[] = _( "Sludge is hurled to inflict\n" "damage. May also poison."); -static const u8 gMoveDescription_BoneClub[] = _( +static const u8 MoveDescription_BoneClub[] = _( "Clubs the foe with a bone.\n" "May cause flinching."); -static const u8 gMoveDescription_FireBlast[] = _( +static const u8 MoveDescription_FireBlast[] = _( "A fiery blast that scorches\n" "all. May cause a burn."); -static const u8 gMoveDescription_Waterfall[] = _( +static const u8 MoveDescription_Waterfall[] = _( "Charges the foe with speed\n" "to climb waterfalls."); -static const u8 gMoveDescription_Clamp[] = _( +static const u8 MoveDescription_Clamp[] = _( "Traps and squeezes the\n" "foe for 2 to 5 turns."); -static const u8 gMoveDescription_Swift[] = _( +static const u8 MoveDescription_Swift[] = _( "Sprays star-shaped rays\n" "that never miss."); -static const u8 gMoveDescription_SkullBash[] = _( +static const u8 MoveDescription_SkullBash[] = _( "Tucks in the head, then\n" "attacks on the next turn."); -static const u8 gMoveDescription_SpikeCannon[] = _( +static const u8 MoveDescription_SpikeCannon[] = _( "Launches sharp spikes that\n" "strike 2 to 5 times."); -static const u8 gMoveDescription_Constrict[] = _( +static const u8 MoveDescription_Constrict[] = _( "Constricts to inflict pain.\n" "May lower SPEED."); -static const u8 gMoveDescription_Amnesia[] = _( +static const u8 MoveDescription_Amnesia[] = _( "Forgets about something\n" "and sharply raises SP. DEF."); -static const u8 gMoveDescription_Kinesis[] = _( +static const u8 MoveDescription_Kinesis[] = _( "Distracts the foe.\n" "May lower accuracy."); -static const u8 gMoveDescription_SoftBoiled[] = _( +static const u8 MoveDescription_SoftBoiled[] = _( "Recovers up to half the\n" "user’s maximum HP."); -static const u8 gMoveDescription_HiJumpKick[] = _( +static const u8 MoveDescription_HiJumpKick[] = _( "A jumping knee kick. If it\n" "misses, the user is hurt."); -static const u8 gMoveDescription_Glare[] = _( +static const u8 MoveDescription_Glare[] = _( "Intimidates and frightens\n" "the foe into paralysis."); -static const u8 gMoveDescription_DreamEater[] = _( +static const u8 MoveDescription_DreamEater[] = _( "Takes one half the damage\n" "inflicted on a sleeping foe."); -static const u8 gMoveDescription_PoisonGas[] = _( +static const u8 MoveDescription_PoisonGas[] = _( "Envelops the foe in a toxic\n" "gas that may poison."); -static const u8 gMoveDescription_Barrage[] = _( +static const u8 MoveDescription_Barrage[] = _( "Hurls round objects at the\n" "foe 2 to 5 times."); -static const u8 gMoveDescription_LeechLife[] = _( +static const u8 MoveDescription_LeechLife[] = _( "An attack that steals half\n" "the damage inflicted."); -static const u8 gMoveDescription_LovelyKiss[] = _( +static const u8 MoveDescription_LovelyKiss[] = _( "Demands a kiss with a scary\n" "face that induces sleep."); -static const u8 gMoveDescription_SkyAttack[] = _( +static const u8 MoveDescription_SkyAttack[] = _( "Searches out weak spots,\n" "then strikes the next turn."); -static const u8 gMoveDescription_Transform[] = _( +static const u8 MoveDescription_Transform[] = _( "Alters the user’s cells to\n" "become a copy of the foe."); -static const u8 gMoveDescription_Bubble[] = _( +static const u8 MoveDescription_Bubble[] = _( "An attack using bubbles.\n" "May lower the foe’s SPEED."); -static const u8 gMoveDescription_DizzyPunch[] = _( +static const u8 MoveDescription_DizzyPunch[] = _( "A rhythmic punch that may\n" "confuse the foe."); -static const u8 gMoveDescription_Spore[] = _( +static const u8 MoveDescription_Spore[] = _( "Scatters a cloud of spores\n" "that always induce sleep."); -static const u8 gMoveDescription_Flash[] = _( +static const u8 MoveDescription_Flash[] = _( "Looses a powerful blast of\n" "light that cuts accuracy."); -static const u8 gMoveDescription_Psywave[] = _( +static const u8 MoveDescription_Psywave[] = _( "Attacks with a psychic\n" "wave of varying intensity."); -static const u8 gMoveDescription_Splash[] = _( +static const u8 MoveDescription_Splash[] = _( "It’s just a splash...\n" "Has no effect whatsoever."); -static const u8 gMoveDescription_AcidArmor[] = _( +static const u8 MoveDescription_AcidArmor[] = _( "Liquifies the user’s body\n" "to sharply raise DEFENSE."); -static const u8 gMoveDescription_Crabhammer[] = _( +static const u8 MoveDescription_Crabhammer[] = _( "Hammers with a pincer. Has a\n" "high critical-hit ratio."); -static const u8 gMoveDescription_Explosion[] = _( +static const u8 MoveDescription_Explosion[] = _( "Inflicts severe damage but\n" "makes the user faint."); -static const u8 gMoveDescription_FurySwipes[] = _( +static const u8 MoveDescription_FurySwipes[] = _( "Rakes the foe with sharp\n" "claws, etc., 2 to 5 times."); -static const u8 gMoveDescription_Bonemerang[] = _( +static const u8 MoveDescription_Bonemerang[] = _( "Throws a bone boomerang\n" "that strikes twice."); -static const u8 gMoveDescription_Rest[] = _( +static const u8 MoveDescription_Rest[] = _( "The user sleeps for 2 turns,\n" "restoring HP and status."); -static const u8 gMoveDescription_RockSlide[] = _( +static const u8 MoveDescription_RockSlide[] = _( "Large boulders are hurled.\n" "May cause flinching."); -static const u8 gMoveDescription_HyperFang[] = _( +static const u8 MoveDescription_HyperFang[] = _( "Attacks with sharp fangs.\n" "May cause flinching."); -static const u8 gMoveDescription_Sharpen[] = _( +static const u8 MoveDescription_Sharpen[] = _( "Reduces the polygon count\n" "and raises ATTACK."); -static const u8 gMoveDescription_Conversion[] = _( +static const u8 MoveDescription_Conversion[] = _( "Changes the user’s type\n" "into an own move’s type."); -static const u8 gMoveDescription_TriAttack[] = _( +static const u8 MoveDescription_TriAttack[] = _( "Fires three types of beams\n" "at the same time."); -static const u8 gMoveDescription_SuperFang[] = _( +static const u8 MoveDescription_SuperFang[] = _( "Attacks with sharp fangs\n" "and cuts half the foe’s HP."); -static const u8 gMoveDescription_Slash[] = _( +static const u8 MoveDescription_Slash[] = _( "Slashes with claws, etc. Has\n" "a high critical-hit ratio."); -static const u8 gMoveDescription_Substitute[] = _( +static const u8 MoveDescription_Substitute[] = _( "Creates a decoy using 1/4\n" "of the user’s maximum HP."); -static const u8 gMoveDescription_Struggle[] = _( +static const u8 MoveDescription_Struggle[] = _( "Used only if all PP are gone.\n" "Also hurts the user a little."); -static const u8 gMoveDescription_Sketch[] = _( +static const u8 MoveDescription_Sketch[] = _( "Copies the foe’s last move\n" "permanently."); -static const u8 gMoveDescription_TripleKick[] = _( +static const u8 MoveDescription_TripleKick[] = _( "Kicks the foe 3 times in a\n" "row with rising intensity."); -static const u8 gMoveDescription_Thief[] = _( +static const u8 MoveDescription_Thief[] = _( "While attacking, it may\n" "steal the foe’s held item."); -static const u8 gMoveDescription_SpiderWeb[] = _( +static const u8 MoveDescription_SpiderWeb[] = _( "Ensnares the foe to stop it\n" "from fleeing or switching."); -static const u8 gMoveDescription_MindReader[] = _( +static const u8 MoveDescription_MindReader[] = _( "Senses the foe’s action to\n" "ensure the next move’s hit."); -static const u8 gMoveDescription_Nightmare[] = _( +static const u8 MoveDescription_Nightmare[] = _( "Inflicts 1/4 damage on a\n" "sleeping foe every turn."); -static const u8 gMoveDescription_FlameWheel[] = _( +static const u8 MoveDescription_FlameWheel[] = _( "A fiery charge attack that\n" "may inflict a burn."); -static const u8 gMoveDescription_Snore[] = _( +static const u8 MoveDescription_Snore[] = _( "A loud attack that can be\n" "used only while asleep."); -static const u8 gMoveDescription_Curse[] = _( +static const u8 MoveDescription_Curse[] = _( "A move that functions\n" "differently for GHOSTS."); -static const u8 gMoveDescription_Flail[] = _( +static const u8 MoveDescription_Flail[] = _( "Inflicts more damage when\n" "the user’s HP is down."); -static const u8 gMoveDescription_Conversion2[] = _( +static const u8 MoveDescription_Conversion2[] = _( "Makes the user resistant\n" "to the last attack’s type."); -static const u8 gMoveDescription_Aeroblast[] = _( +static const u8 MoveDescription_Aeroblast[] = _( "Launches a vacuumed blast.\n" "High critical-hit ratio."); -static const u8 gMoveDescription_CottonSpore[] = _( +static const u8 MoveDescription_CottonSpore[] = _( "Spores cling to the foe,\n" "sharply reducing SPEED."); -static const u8 gMoveDescription_Reversal[] = _( +static const u8 MoveDescription_Reversal[] = _( "Inflicts more damage when\n" "the user’s HP is down."); -static const u8 gMoveDescription_Spite[] = _( +static const u8 MoveDescription_Spite[] = _( "Spitefully cuts the PP\n" "of the foe’s last move."); -static const u8 gMoveDescription_PowderSnow[] = _( +static const u8 MoveDescription_PowderSnow[] = _( "Blasts the foe with a snowy\n" "gust. May cause freezing."); -static const u8 gMoveDescription_Protect[] = _( +static const u8 MoveDescription_Protect[] = _( "Evades attack, but may fail\n" "if used in succession."); -static const u8 gMoveDescription_MachPunch[] = _( +static const u8 MoveDescription_MachPunch[] = _( "A punch is thrown at wicked\n" "speed to strike first."); -static const u8 gMoveDescription_ScaryFace[] = _( +static const u8 MoveDescription_ScaryFace[] = _( "Frightens with a scary face\n" "to sharply reduce SPEED."); -static const u8 gMoveDescription_FaintAttack[] = _( +static const u8 MoveDescription_FaintAttack[] = _( "Draws the foe close, then\n" "strikes without fail."); -static const u8 gMoveDescription_SweetKiss[] = _( +static const u8 MoveDescription_SweetKiss[] = _( "Demands a kiss with a cute\n" "look. May cause confusion."); -static const u8 gMoveDescription_BellyDrum[] = _( +static const u8 MoveDescription_BellyDrum[] = _( "Maximizes ATTACK while\n" "sacrificing HP."); -static const u8 gMoveDescription_SludgeBomb[] = _( +static const u8 MoveDescription_SludgeBomb[] = _( "Sludge is hurled to inflict\n" "damage. May also poison."); -static const u8 gMoveDescription_MudSlap[] = _( +static const u8 MoveDescription_MudSlap[] = _( "Hurls mud in the foe’s face\n" "to reduce its accuracy."); -static const u8 gMoveDescription_Octazooka[] = _( +static const u8 MoveDescription_Octazooka[] = _( "Fires a lump of ink to\n" "damage and cut accuracy."); -static const u8 gMoveDescription_Spikes[] = _( +static const u8 MoveDescription_Spikes[] = _( "Sets spikes that hurt a \n" "foe switching out."); -static const u8 gMoveDescription_ZapCannon[] = _( +static const u8 MoveDescription_ZapCannon[] = _( "Powerful and sure to cause\n" "paralysis, but inaccurate."); -static const u8 gMoveDescription_Foresight[] = _( +static const u8 MoveDescription_Foresight[] = _( "Negates the foe’s efforts\n" "to heighten evasiveness."); -static const u8 gMoveDescription_DestinyBond[] = _( +static const u8 MoveDescription_DestinyBond[] = _( "If the user faints, the foe\n" "is also made to faint."); -static const u8 gMoveDescription_PerishSong[] = _( +static const u8 MoveDescription_PerishSong[] = _( "Any POKéMON hearing this\n" "song faints in 3 turns."); -static const u8 gMoveDescription_IcyWind[] = _( +static const u8 MoveDescription_IcyWind[] = _( "A chilling attack that\n" "lowers the foe’s SPEED."); -static const u8 gMoveDescription_Detect[] = _( +static const u8 MoveDescription_Detect[] = _( "Evades attack, but may fail\n" "if used in succession."); -static const u8 gMoveDescription_BoneRush[] = _( +static const u8 MoveDescription_BoneRush[] = _( "Strikes the foe with a bone\n" "in hand 2 to 5 times."); -static const u8 gMoveDescription_LockOn[] = _( +static const u8 MoveDescription_LockOn[] = _( "Locks on to the foe to\n" "ensure the next move hits."); -static const u8 gMoveDescription_Outrage[] = _( +static const u8 MoveDescription_Outrage[] = _( "A rampage of 2 to 3 turns\n" "that confuses the user."); -static const u8 gMoveDescription_Sandstorm[] = _( +static const u8 MoveDescription_Sandstorm[] = _( "Causes a sandstorm that\n" "rages for several turns."); -static const u8 gMoveDescription_GigaDrain[] = _( +static const u8 MoveDescription_GigaDrain[] = _( "An attack that steals half\n" "the damage inflicted."); -static const u8 gMoveDescription_Endure[] = _( +static const u8 MoveDescription_Endure[] = _( "Endures any attack for\n" "1 turn, leaving at least 1HP."); -static const u8 gMoveDescription_Charm[] = _( +static const u8 MoveDescription_Charm[] = _( "Charms the foe and sharply\n" "reduces its ATTACK."); -static const u8 gMoveDescription_Rollout[] = _( +static const u8 MoveDescription_Rollout[] = _( "An attack lasting 5 turns\n" "with rising intensity."); -static const u8 gMoveDescription_FalseSwipe[] = _( +static const u8 MoveDescription_FalseSwipe[] = _( "An attack that leaves the\n" "foe with at least 1 HP."); -static const u8 gMoveDescription_Swagger[] = _( +static const u8 MoveDescription_Swagger[] = _( "Confuses the foe, but also\n" "sharply raises ATTACK."); -static const u8 gMoveDescription_MilkDrink[] = _( +static const u8 MoveDescription_MilkDrink[] = _( "Recovers up to half the\n" "user’s maximum HP."); -static const u8 gMoveDescription_Spark[] = _( +static const u8 MoveDescription_Spark[] = _( "An electrified tackle that\n" "may paralyze the foe."); -static const u8 gMoveDescription_FuryCutter[] = _( +static const u8 MoveDescription_FuryCutter[] = _( "An attack that intensifies\n" "on each successive hit."); -static const u8 gMoveDescription_SteelWing[] = _( +static const u8 MoveDescription_SteelWing[] = _( "Strikes the foe with hard\n" "wings spread wide."); -static const u8 gMoveDescription_MeanLook[] = _( +static const u8 MoveDescription_MeanLook[] = _( "Fixes the foe with a mean\n" "look that prevents escape."); -static const u8 gMoveDescription_Attract[] = _( +static const u8 MoveDescription_Attract[] = _( "Makes the opposite gender\n" "less likely to attack."); -static const u8 gMoveDescription_SleepTalk[] = _( +static const u8 MoveDescription_SleepTalk[] = _( "Uses an own move randomly\n" "while asleep."); -static const u8 gMoveDescription_HealBell[] = _( +static const u8 MoveDescription_HealBell[] = _( "Chimes soothingly to heal\n" "all status abnormalities."); -static const u8 gMoveDescription_Return[] = _( +static const u8 MoveDescription_Return[] = _( "An attack that increases\n" "in power with friendship."); -static const u8 gMoveDescription_Present[] = _( +static const u8 MoveDescription_Present[] = _( "A gift in the form of a\n" "bomb. May restore HP."); -static const u8 gMoveDescription_Frustration[] = _( +static const u8 MoveDescription_Frustration[] = _( "An attack that is stronger\n" "if the TRAINER is disliked."); -static const u8 gMoveDescription_Safeguard[] = _( +static const u8 MoveDescription_Safeguard[] = _( "A mystical force prevents\n" "all status problems."); -static const u8 gMoveDescription_PainSplit[] = _( +static const u8 MoveDescription_PainSplit[] = _( "Adds the user and foe’s HP,\n" "then shares them equally."); -static const u8 gMoveDescription_SacredFire[] = _( +static const u8 MoveDescription_SacredFire[] = _( "A mystical fire attack that\n" "may inflict a burn."); -static const u8 gMoveDescription_Magnitude[] = _( +static const u8 MoveDescription_Magnitude[] = _( "A ground-shaking attack\n" "of random intensity."); -static const u8 gMoveDescription_DynamicPunch[] = _( +static const u8 MoveDescription_DynamicPunch[] = _( "Powerful and sure to cause\n" "confusion, but inaccurate."); -static const u8 gMoveDescription_Megahorn[] = _( +static const u8 MoveDescription_Megahorn[] = _( "A brutal ramming attack\n" "using out-thrust horns."); -static const u8 gMoveDescription_DragonBreath[] = _( +static const u8 MoveDescription_DragonBreath[] = _( "Strikes the foe with an\n" "incredible blast of breath."); -static const u8 gMoveDescription_BatonPass[] = _( +static const u8 MoveDescription_BatonPass[] = _( "Switches out the user while\n" "keeping effects in play."); -static const u8 gMoveDescription_Encore[] = _( +static const u8 MoveDescription_Encore[] = _( "Makes the foe repeat its\n" "last move over 2 to 6 turns."); -static const u8 gMoveDescription_Pursuit[] = _( +static const u8 MoveDescription_Pursuit[] = _( "Inflicts bad damage if used\n" "on a foe switching out."); -static const u8 gMoveDescription_RapidSpin[] = _( +static const u8 MoveDescription_RapidSpin[] = _( "Spins the body at high\n" "speed to strike the foe."); -static const u8 gMoveDescription_SweetScent[] = _( +static const u8 MoveDescription_SweetScent[] = _( "Allures the foe to reduce\n" "evasiveness."); -static const u8 gMoveDescription_IronTail[] = _( +static const u8 MoveDescription_IronTail[] = _( "Attacks with a rock-hard\n" "tail. May lower DEFENSE."); -static const u8 gMoveDescription_MetalClaw[] = _( +static const u8 MoveDescription_MetalClaw[] = _( "A claw attack that may\n" "raise the user’s ATTACK."); -static const u8 gMoveDescription_VitalThrow[] = _( +static const u8 MoveDescription_VitalThrow[] = _( "Makes the user’s move last,\n" "but it never misses."); -static const u8 gMoveDescription_MorningSun[] = _( +static const u8 MoveDescription_MorningSun[] = _( "Restores HP. The amount\n" "varies with the weather."); -static const u8 gMoveDescription_Synthesis[] = _( +static const u8 MoveDescription_Synthesis[] = _( "Restores HP. The amount\n" "varies with the weather."); -static const u8 gMoveDescription_Moonlight[] = _( +static const u8 MoveDescription_Moonlight[] = _( "Restores HP. The amount\n" "varies with the weather."); -static const u8 gMoveDescription_HiddenPower[] = _( +static const u8 MoveDescription_HiddenPower[] = _( "The effectiveness varies\n" "with the user."); -static const u8 gMoveDescription_CrossChop[] = _( +static const u8 MoveDescription_CrossChop[] = _( "A double-chopping attack.\n" "High critical-hit ratio."); -static const u8 gMoveDescription_Twister[] = _( +static const u8 MoveDescription_Twister[] = _( "Whips up a vicious twister\n" "to tear at the foe."); -static const u8 gMoveDescription_RainDance[] = _( +static const u8 MoveDescription_RainDance[] = _( "Boosts the power of WATER-\n" "type moves for 5 turns."); -static const u8 gMoveDescription_SunnyDay[] = _( +static const u8 MoveDescription_SunnyDay[] = _( "Boosts the power of FIRE-\n" "type moves for 5 turns."); -static const u8 gMoveDescription_Crunch[] = _( +static const u8 MoveDescription_Crunch[] = _( "Crunches with sharp fangs.\n" "May lower SP. DEF."); -static const u8 gMoveDescription_MirrorCoat[] = _( +static const u8 MoveDescription_MirrorCoat[] = _( "Counters the foe’s special\n" "attack at double the power."); -static const u8 gMoveDescription_PsychUp[] = _( +static const u8 MoveDescription_PsychUp[] = _( "Copies the foe’s effect(s)\n" "and gives to the user."); -static const u8 gMoveDescription_ExtremeSpeed[] = _( +static const u8 MoveDescription_ExtremeSpeed[] = _( "An extremely fast and\n" "powerful attack."); -static const u8 gMoveDescription_AncientPower[] = _( +static const u8 MoveDescription_AncientPower[] = _( "An attack that may raise\n" "all stats."); -static const u8 gMoveDescription_ShadowBall[] = _( +static const u8 MoveDescription_ShadowBall[] = _( "Hurls a black blob that may\n" "lower the foe’s SP. DEF."); -static const u8 gMoveDescription_FutureSight[] = _( +static const u8 MoveDescription_FutureSight[] = _( "Heightens inner power to\n" "strike 2 turns later."); -static const u8 gMoveDescription_RockSmash[] = _( +static const u8 MoveDescription_RockSmash[] = _( "A rock-crushing attack\n" "that may lower DEFENSE."); -static const u8 gMoveDescription_Whirlpool[] = _( +static const u8 MoveDescription_Whirlpool[] = _( "Traps and hurts the foe in\n" "a whirlpool for 2 to 5 turns."); -static const u8 gMoveDescription_BeatUp[] = _( +static const u8 MoveDescription_BeatUp[] = _( "Summons party POKéMON to\n" "join in the attack."); -static const u8 gMoveDescription_FakeOut[] = _( +static const u8 MoveDescription_FakeOut[] = _( "A 1st-turn, 1st-strike move\n" "that causes flinching."); -static const u8 gMoveDescription_Uproar[] = _( +static const u8 MoveDescription_Uproar[] = _( "Causes an uproar for 2 to 5\n" "turns and prevents sleep."); -static const u8 gMoveDescription_Stockpile[] = _( +static const u8 MoveDescription_Stockpile[] = _( "Charges up power for up to\n" "3 turns."); -static const u8 gMoveDescription_SpitUp[] = _( +static const u8 MoveDescription_SpitUp[] = _( "Releases stockpiled power\n" "(the more the better)."); -static const u8 gMoveDescription_Swallow[] = _( +static const u8 MoveDescription_Swallow[] = _( "Absorbs stockpiled power\n" "and restores HP."); -static const u8 gMoveDescription_HeatWave[] = _( +static const u8 MoveDescription_HeatWave[] = _( "Exhales a hot breath on the\n" "foe. May inflict a burn."); -static const u8 gMoveDescription_Hail[] = _( +static const u8 MoveDescription_Hail[] = _( "Summons a hailstorm that\n" "strikes every turn."); -static const u8 gMoveDescription_Torment[] = _( +static const u8 MoveDescription_Torment[] = _( "Torments the foe and stops\n" "successive use of a move."); -static const u8 gMoveDescription_Flatter[] = _( +static const u8 MoveDescription_Flatter[] = _( "Confuses the foe, but\n" "raises its SP. ATK."); -static const u8 gMoveDescription_WillOWisp[] = _( +static const u8 MoveDescription_WillOWisp[] = _( "Inflicts a burn on the foe\n" "with intense fire."); -static const u8 gMoveDescription_Memento[] = _( +static const u8 MoveDescription_Memento[] = _( "The user faints and lowers\n" "the foe’s abilities."); -static const u8 gMoveDescription_Facade[] = _( +static const u8 MoveDescription_Facade[] = _( "Boosts ATTACK when burned,\n" "paralyzed, or poisoned."); -static const u8 gMoveDescription_FocusPunch[] = _( +static const u8 MoveDescription_FocusPunch[] = _( "A powerful loyalty attack.\n" "The user flinches if hit."); -static const u8 gMoveDescription_SmellingSalt[] = _( +static const u8 MoveDescription_SmellingSalt[] = _( "Powerful against paralyzed\n" "foes, but also heals them."); -static const u8 gMoveDescription_FollowMe[] = _( +static const u8 MoveDescription_FollowMe[] = _( "Draws attention to make\n" "foes attack only the user."); -static const u8 gMoveDescription_NaturePower[] = _( +static const u8 MoveDescription_NaturePower[] = _( "The type of attack varies\n" "depending on the location."); -static const u8 gMoveDescription_Charge[] = _( +static const u8 MoveDescription_Charge[] = _( "Charges power to boost the\n" "electric move used next."); -static const u8 gMoveDescription_Taunt[] = _( +static const u8 MoveDescription_Taunt[] = _( "Taunts the foe into only\n" "using attack moves."); -static const u8 gMoveDescription_HelpingHand[] = _( +static const u8 MoveDescription_HelpingHand[] = _( "Boosts the power of the\n" "recipient’s moves."); -static const u8 gMoveDescription_Trick[] = _( +static const u8 MoveDescription_Trick[] = _( "Tricks the foe into trading\n" "held items."); -static const u8 gMoveDescription_RolePlay[] = _( +static const u8 MoveDescription_RolePlay[] = _( "Mimics the target and\n" "copies its special ability."); -static const u8 gMoveDescription_Wish[] = _( +static const u8 MoveDescription_Wish[] = _( "A wish that restores HP.\n" "It takes time to work."); -static const u8 gMoveDescription_Assist[] = _( +static const u8 MoveDescription_Assist[] = _( "Attacks randomly with one\n" "of the partner’s moves."); -static const u8 gMoveDescription_Ingrain[] = _( +static const u8 MoveDescription_Ingrain[] = _( "Lays roots that restore HP.\n" "The user can’t switch out."); -static const u8 gMoveDescription_Superpower[] = _( +static const u8 MoveDescription_Superpower[] = _( "Boosts strength sharply,\n" "but lowers abilities."); -static const u8 gMoveDescription_MagicCoat[] = _( +static const u8 MoveDescription_MagicCoat[] = _( "Reflects special effects\n" "back to the attacker."); -static const u8 gMoveDescription_Recycle[] = _( +static const u8 MoveDescription_Recycle[] = _( "Recycles a used item for\n" "one more use."); -static const u8 gMoveDescription_Revenge[] = _( +static const u8 MoveDescription_Revenge[] = _( "An attack that gains power\n" "if injured by the foe."); -static const u8 gMoveDescription_BrickBreak[] = _( +static const u8 MoveDescription_BrickBreak[] = _( "Destroys barriers such as\n" "REFLECT and causes damage."); -static const u8 gMoveDescription_Yawn[] = _( +static const u8 MoveDescription_Yawn[] = _( "Lulls the foe into yawning,\n" "then sleeping next turn."); -static const u8 gMoveDescription_KnockOff[] = _( +static const u8 MoveDescription_KnockOff[] = _( "Knocks down the foe’s held\n" "item to prevent its use."); -static const u8 gMoveDescription_Endeavor[] = _( +static const u8 MoveDescription_Endeavor[] = _( "Gains power if the user’s HP\n" "is lower than the foe’s HP."); -static const u8 gMoveDescription_Eruption[] = _( +static const u8 MoveDescription_Eruption[] = _( "The higher the user’s HP,\n" "the more damage caused."); -static const u8 gMoveDescription_SkillSwap[] = _( +static const u8 MoveDescription_SkillSwap[] = _( "The user swaps special\n" "abilities with the target."); -static const u8 gMoveDescription_Imprison[] = _( +static const u8 MoveDescription_Imprison[] = _( "Prevents foes from using\n" "moves known by the user."); -static const u8 gMoveDescription_Refresh[] = _( +static const u8 MoveDescription_Refresh[] = _( "Heals poisoning, paralysis,\n" "or a burn."); -static const u8 gMoveDescription_Grudge[] = _( +static const u8 MoveDescription_Grudge[] = _( "If the user faints, deletes\n" "the PP of the final move."); -static const u8 gMoveDescription_Snatch[] = _( +static const u8 MoveDescription_Snatch[] = _( "Steals the effects of the\n" "move the foe uses next."); -static const u8 gMoveDescription_SecretPower[] = _( +static const u8 MoveDescription_SecretPower[] = _( "An attack with effects\n" "that vary by location."); -static const u8 gMoveDescription_Dive[] = _( +static const u8 MoveDescription_Dive[] = _( "Dives underwater the first\n" "turn and strikes next turn."); -static const u8 gMoveDescription_ArmThrust[] = _( +static const u8 MoveDescription_ArmThrust[] = _( "Straight-arm punches that\n" "strike the foe 2 to 5 times."); -static const u8 gMoveDescription_Camouflage[] = _( +static const u8 MoveDescription_Camouflage[] = _( "Alters the POKéMON’s type\n" "depending on the location."); -static const u8 gMoveDescription_TailGlow[] = _( +static const u8 MoveDescription_TailGlow[] = _( "Flashes a light that sharply\n" "raises SP. ATK."); -static const u8 gMoveDescription_LusterPurge[] = _( +static const u8 MoveDescription_LusterPurge[] = _( "Attacks with a burst of\n" "light. May lower SP. DEF."); -static const u8 gMoveDescription_MistBall[] = _( +static const u8 MoveDescription_MistBall[] = _( "Attacks with a flurry of\n" "down. May lower SP. ATK."); -static const u8 gMoveDescription_FeatherDance[] = _( +static const u8 MoveDescription_FeatherDance[] = _( "Envelops the foe with down\n" "to sharply reduce ATTACK."); -static const u8 gMoveDescription_TeeterDance[] = _( +static const u8 MoveDescription_TeeterDance[] = _( "Confuses all POKéMON on\n" "the scene."); -static const u8 gMoveDescription_BlazeKick[] = _( +static const u8 MoveDescription_BlazeKick[] = _( "A kick with a high critical-\n" "hit ratio. May cause a burn."); -static const u8 gMoveDescription_MudSport[] = _( +static const u8 MoveDescription_MudSport[] = _( "Covers the user in mud to\n" "raise electrical resistance."); -static const u8 gMoveDescription_IceBall[] = _( +static const u8 MoveDescription_IceBall[] = _( "A 5-turn attack that gains\n" "power on successive hits."); -static const u8 gMoveDescription_NeedleArm[] = _( +static const u8 MoveDescription_NeedleArm[] = _( "Attacks with thorny arms.\n" "May cause flinching."); -static const u8 gMoveDescription_SlackOff[] = _( +static const u8 MoveDescription_SlackOff[] = _( "Slacks off and restores\n" "half the maximum HP."); -static const u8 gMoveDescription_HyperVoice[] = _( +static const u8 MoveDescription_HyperVoice[] = _( "A loud attack that uses\n" "sound waves to injure."); -static const u8 gMoveDescription_PoisonFang[] = _( +static const u8 MoveDescription_PoisonFang[] = _( "A sharp-fanged attack.\n" "May badly poison the foe."); -static const u8 gMoveDescription_CrushClaw[] = _( +static const u8 MoveDescription_CrushClaw[] = _( "Tears at the foe with sharp\n" "claws. May lower DEFENSE."); -static const u8 gMoveDescription_BlastBurn[] = _( +static const u8 MoveDescription_BlastBurn[] = _( "Powerful, but leaves the\n" "user immobile the next turn."); -static const u8 gMoveDescription_HydroCannon[] = _( +static const u8 MoveDescription_HydroCannon[] = _( "Powerful, but leaves the\n" "user immobile the next turn."); -static const u8 gMoveDescription_MeteorMash[] = _( +static const u8 MoveDescription_MeteorMash[] = _( "Fires a meteor-like punch.\n" "May raise ATTACK."); -static const u8 gMoveDescription_Astonish[] = _( +static const u8 MoveDescription_Astonish[] = _( "An attack that may shock\n" "the foe into flinching."); -static const u8 gMoveDescription_WeatherBall[] = _( +static const u8 MoveDescription_WeatherBall[] = _( "The move’s type and power\n" "change with the weather."); -static const u8 gMoveDescription_Aromatherapy[] = _( +static const u8 MoveDescription_Aromatherapy[] = _( "Heals all status problems\n" "with a soothing scent."); -static const u8 gMoveDescription_FakeTears[] = _( +static const u8 MoveDescription_FakeTears[] = _( "Feigns crying to sharply\n" "lower the foe’s SP. DEF."); -static const u8 gMoveDescription_AirCutter[] = _( +static const u8 MoveDescription_AirCutter[] = _( "Hacks with razorlike wind.\n" "High critical-hit ratio."); -static const u8 gMoveDescription_Overheat[] = _( +static const u8 MoveDescription_Overheat[] = _( "Allows a full-power attack,\n" "but sharply lowers SP. ATK."); -static const u8 gMoveDescription_OdorSleuth[] = _( +static const u8 MoveDescription_OdorSleuth[] = _( "Negates the foe’s efforts\n" "to heighten evasiveness."); -static const u8 gMoveDescription_RockTomb[] = _( +static const u8 MoveDescription_RockTomb[] = _( "Stops the foe from moving\n" "with rocks and cuts SPEED."); -static const u8 gMoveDescription_SilverWind[] = _( +static const u8 MoveDescription_SilverWind[] = _( "A powdery attack that may\n" "raise abilities."); -static const u8 gMoveDescription_MetalSound[] = _( +static const u8 MoveDescription_MetalSound[] = _( "Emits a horrible screech\n" "that sharply lowers SP. DEF."); -static const u8 gMoveDescription_GrassWhistle[] = _( +static const u8 MoveDescription_GrassWhistle[] = _( "Lulls the foe into sleep\n" "with a pleasant melody."); -static const u8 gMoveDescription_Tickle[] = _( +static const u8 MoveDescription_Tickle[] = _( "Makes the foe laugh to\n" "lower ATTACK and DEFENSE."); -static const u8 gMoveDescription_CosmicPower[] = _( +static const u8 MoveDescription_CosmicPower[] = _( "Raises DEFENSE and SP. DEF\n" "with a mystic power."); -static const u8 gMoveDescription_WaterSpout[] = _( +static const u8 MoveDescription_WaterSpout[] = _( "Inflicts more damage if the\n" "user’s HP is high."); -static const u8 gMoveDescription_SignalBeam[] = _( +static const u8 MoveDescription_SignalBeam[] = _( "A strange beam attack that\n" "may confuse the foe."); -static const u8 gMoveDescription_ShadowPunch[] = _( +static const u8 MoveDescription_ShadowPunch[] = _( "An unavoidable punch that\n" "is thrown from shadows."); -static const u8 gMoveDescription_Extrasensory[] = _( +static const u8 MoveDescription_Extrasensory[] = _( "Attacks with a peculiar\n" "power. May cause flinching."); -static const u8 gMoveDescription_SkyUppercut[] = _( +static const u8 MoveDescription_SkyUppercut[] = _( "An uppercut thrown as if\n" "leaping into the sky."); -static const u8 gMoveDescription_SandTomb[] = _( +static const u8 MoveDescription_SandTomb[] = _( "Traps and hurts the foe in\n" "quicksand for 2 to 5 turns."); -static const u8 gMoveDescription_SheerCold[] = _( +static const u8 MoveDescription_SheerCold[] = _( "A chilling attack that\n" "causes fainting if it hits."); -static const u8 gMoveDescription_MuddyWater[] = _( +static const u8 MoveDescription_MuddyWater[] = _( "Attacks with muddy water.\n" "May lower accuracy."); -static const u8 gMoveDescription_BulletSeed[] = _( +static const u8 MoveDescription_BulletSeed[] = _( "Shoots 2 to 5 seeds in a row\n" "to strike the foe."); -static const u8 gMoveDescription_AerialAce[] = _( +static const u8 MoveDescription_AerialAce[] = _( "An extremely speedy and\n" "unavoidable attack."); -static const u8 gMoveDescription_IcicleSpear[] = _( +static const u8 MoveDescription_IcicleSpear[] = _( "Attacks the foe by firing\n" "2 to 5 icicles in a row."); -static const u8 gMoveDescription_IronDefense[] = _( +static const u8 MoveDescription_IronDefense[] = _( "Hardens the body’s surface\n" "to sharply raise DEFENSE."); -static const u8 gMoveDescription_Block[] = _( +static const u8 MoveDescription_Block[] = _( "Blocks the foe’s way to\n" "prevent escape."); -static const u8 gMoveDescription_Howl[] = _( +static const u8 MoveDescription_Howl[] = _( "Howls to raise the spirit\n" "and boosts ATTACK."); -static const u8 gMoveDescription_DragonClaw[] = _( +static const u8 MoveDescription_DragonClaw[] = _( "Slashes the foe with sharp\n" "claws."); -static const u8 gMoveDescription_FrenzyPlant[] = _( +static const u8 MoveDescription_FrenzyPlant[] = _( "Powerful, but leaves the\n" "user immobile the next turn."); -static const u8 gMoveDescription_BulkUp[] = _( +static const u8 MoveDescription_BulkUp[] = _( "Bulks up the body to boost\n" "both ATTACK and DEFENSE."); -static const u8 gMoveDescription_Bounce[] = _( +static const u8 MoveDescription_Bounce[] = _( "Bounces up, then down the\n" "next turn. May paralyze."); -static const u8 gMoveDescription_MudShot[] = _( +static const u8 MoveDescription_MudShot[] = _( "Hurls mud at the foe and\n" "reduces SPEED."); -static const u8 gMoveDescription_PoisonTail[] = _( +static const u8 MoveDescription_PoisonTail[] = _( "Has a high critical-hit\n" "ratio. May also poison."); -static const u8 gMoveDescription_Covet[] = _( +static const u8 MoveDescription_Covet[] = _( "Cutely begs to obtain an\n" "item held by the foe."); -static const u8 gMoveDescription_VoltTackle[] = _( +static const u8 MoveDescription_VoltTackle[] = _( "A life-risking tackle that\n" "slightly hurts the user."); -static const u8 gMoveDescription_MagicalLeaf[] = _( +static const u8 MoveDescription_MagicalLeaf[] = _( "Attacks with a strange leaf\n" "that cannot be evaded."); -static const u8 gMoveDescription_WaterSport[] = _( +static const u8 MoveDescription_WaterSport[] = _( "The user becomes soaked to\n" "raise resistance to fire."); -static const u8 gMoveDescription_CalmMind[] = _( +static const u8 MoveDescription_CalmMind[] = _( "Raises SP. ATK and SP. DEF\n" "by focusing the mind."); -static const u8 gMoveDescription_LeafBlade[] = _( +static const u8 MoveDescription_LeafBlade[] = _( "Slashes with a sharp leaf.\n" "High critical-hit ratio."); -static const u8 gMoveDescription_DragonDance[] = _( +static const u8 MoveDescription_DragonDance[] = _( "A mystical dance that ups\n" "ATTACK and SPEED."); -static const u8 gMoveDescription_RockBlast[] = _( +static const u8 MoveDescription_RockBlast[] = _( "Hurls boulders at the foe\n" "2 to 5 times in a row."); -static const u8 gMoveDescription_ShockWave[] = _( +static const u8 MoveDescription_ShockWave[] = _( "A fast and unavoidable\n" "electric attack."); -static const u8 gMoveDescription_WaterPulse[] = _( +static const u8 MoveDescription_WaterPulse[] = _( "Attacks with ultrasonic\n" "waves. May confuse the foe"); -static const u8 gMoveDescription_DoomDesire[] = _( +static const u8 MoveDescription_DoomDesire[] = _( "Summons strong sunlight to\n" "attack 2 turns later."); -static const u8 gMoveDescription_PsychoBoost[] = _( +static const u8 MoveDescription_PsychoBoost[] = _( "Allows a full-power attack,\n" "but sharply lowers SP. ATK."); const u8 * const gMoveDescriptions[] = { - gMoveDescription_Pound, - gMoveDescription_KarateChop, - gMoveDescription_DoubleSlap, - gMoveDescription_CometPunch, - gMoveDescription_MegaPunch, - gMoveDescription_PayDay, - gMoveDescription_FirePunch, - gMoveDescription_IcePunch, - gMoveDescription_ThunderPunch, - gMoveDescription_Scratch, - gMoveDescription_ViceGrip, - gMoveDescription_Guillotine, - gMoveDescription_RazorWind, - gMoveDescription_SwordsDance, - gMoveDescription_Cut, - gMoveDescription_Gust, - gMoveDescription_WingAttack, - gMoveDescription_Whirlwind, - gMoveDescription_Fly, - gMoveDescription_Bind, - gMoveDescription_Slam, - gMoveDescription_VineWhip, - gMoveDescription_Stomp, - gMoveDescription_DoubleKick, - gMoveDescription_MegaKick, - gMoveDescription_JumpKick, - gMoveDescription_RollingKick, - gMoveDescription_SandAttack, - gMoveDescription_Headbutt, - gMoveDescription_HornAttack, - gMoveDescription_FuryAttack, - gMoveDescription_HornDrill, - gMoveDescription_Tackle, - gMoveDescription_BodySlam, - gMoveDescription_Wrap, - gMoveDescription_TakeDown, - gMoveDescription_Thrash, - gMoveDescription_DoubleEdge, - gMoveDescription_TailWhip, - gMoveDescription_PoisonSting, - gMoveDescription_Twineedle, - gMoveDescription_PinMissile, - gMoveDescription_Leer, - gMoveDescription_Bite, - gMoveDescription_Growl, - gMoveDescription_Roar, - gMoveDescription_Sing, - gMoveDescription_Supersonic, - gMoveDescription_SonicBoom, - gMoveDescription_Disable, - gMoveDescription_Acid, - gMoveDescription_Ember, - gMoveDescription_Flamethrower, - gMoveDescription_Mist, - gMoveDescription_WaterGun, - gMoveDescription_HydroPump, - gMoveDescription_Surf, - gMoveDescription_IceBeam, - gMoveDescription_Blizzard, - gMoveDescription_Psybeam, - gMoveDescription_BubbleBeam, - gMoveDescription_AuroraBeam, - gMoveDescription_HyperBeam, - gMoveDescription_Peck, - gMoveDescription_DrillPeck, - gMoveDescription_Submission, - gMoveDescription_LowKick, - gMoveDescription_Counter, - gMoveDescription_SeismicToss, - gMoveDescription_Strength, - gMoveDescription_Absorb, - gMoveDescription_MegaDrain, - gMoveDescription_LeechSeed, - gMoveDescription_Growth, - gMoveDescription_RazorLeaf, - gMoveDescription_SolarBeam, - gMoveDescription_PoisonPowder, - gMoveDescription_StunSpore, - gMoveDescription_SleepPowder, - gMoveDescription_PetalDance, - gMoveDescription_StringShot, - gMoveDescription_DragonRage, - gMoveDescription_FireSpin, - gMoveDescription_ThunderShock, - gMoveDescription_Thunderbolt, - gMoveDescription_ThunderWave, - gMoveDescription_Thunder, - gMoveDescription_RockThrow, - gMoveDescription_Earthquake, - gMoveDescription_Fissure, - gMoveDescription_Dig, - gMoveDescription_Toxic, - gMoveDescription_Confusion, - gMoveDescription_Psychic, - gMoveDescription_Hypnosis, - gMoveDescription_Meditate, - gMoveDescription_Agility, - gMoveDescription_QuickAttack, - gMoveDescription_Rage, - gMoveDescription_Teleport, - gMoveDescription_NightShade, - gMoveDescription_Mimic, - gMoveDescription_Screech, - gMoveDescription_DoubleTeam, - gMoveDescription_Recover, - gMoveDescription_Harden, - gMoveDescription_Minimize, - gMoveDescription_Smokescreen, - gMoveDescription_ConfuseRay, - gMoveDescription_Withdraw, - gMoveDescription_DefenseCurl, - gMoveDescription_Barrier, - gMoveDescription_LightScreen, - gMoveDescription_Haze, - gMoveDescription_Reflect, - gMoveDescription_FocusEnergy, - gMoveDescription_Bide, - gMoveDescription_Metronome, - gMoveDescription_MirrorMove, - gMoveDescription_SelfDestruct, - gMoveDescription_EggBomb, - gMoveDescription_Lick, - gMoveDescription_Smog, - gMoveDescription_Sludge, - gMoveDescription_BoneClub, - gMoveDescription_FireBlast, - gMoveDescription_Waterfall, - gMoveDescription_Clamp, - gMoveDescription_Swift, - gMoveDescription_SkullBash, - gMoveDescription_SpikeCannon, - gMoveDescription_Constrict, - gMoveDescription_Amnesia, - gMoveDescription_Kinesis, - gMoveDescription_SoftBoiled, - gMoveDescription_HiJumpKick, - gMoveDescription_Glare, - gMoveDescription_DreamEater, - gMoveDescription_PoisonGas, - gMoveDescription_Barrage, - gMoveDescription_LeechLife, - gMoveDescription_LovelyKiss, - gMoveDescription_SkyAttack, - gMoveDescription_Transform, - gMoveDescription_Bubble, - gMoveDescription_DizzyPunch, - gMoveDescription_Spore, - gMoveDescription_Flash, - gMoveDescription_Psywave, - gMoveDescription_Splash, - gMoveDescription_AcidArmor, - gMoveDescription_Crabhammer, - gMoveDescription_Explosion, - gMoveDescription_FurySwipes, - gMoveDescription_Bonemerang, - gMoveDescription_Rest, - gMoveDescription_RockSlide, - gMoveDescription_HyperFang, - gMoveDescription_Sharpen, - gMoveDescription_Conversion, - gMoveDescription_TriAttack, - gMoveDescription_SuperFang, - gMoveDescription_Slash, - gMoveDescription_Substitute, - gMoveDescription_Struggle, - gMoveDescription_Sketch, - gMoveDescription_TripleKick, - gMoveDescription_Thief, - gMoveDescription_SpiderWeb, - gMoveDescription_MindReader, - gMoveDescription_Nightmare, - gMoveDescription_FlameWheel, - gMoveDescription_Snore, - gMoveDescription_Curse, - gMoveDescription_Flail, - gMoveDescription_Conversion2, - gMoveDescription_Aeroblast, - gMoveDescription_CottonSpore, - gMoveDescription_Reversal, - gMoveDescription_Spite, - gMoveDescription_PowderSnow, - gMoveDescription_Protect, - gMoveDescription_MachPunch, - gMoveDescription_ScaryFace, - gMoveDescription_FaintAttack, - gMoveDescription_SweetKiss, - gMoveDescription_BellyDrum, - gMoveDescription_SludgeBomb, - gMoveDescription_MudSlap, - gMoveDescription_Octazooka, - gMoveDescription_Spikes, - gMoveDescription_ZapCannon, - gMoveDescription_Foresight, - gMoveDescription_DestinyBond, - gMoveDescription_PerishSong, - gMoveDescription_IcyWind, - gMoveDescription_Detect, - gMoveDescription_BoneRush, - gMoveDescription_LockOn, - gMoveDescription_Outrage, - gMoveDescription_Sandstorm, - gMoveDescription_GigaDrain, - gMoveDescription_Endure, - gMoveDescription_Charm, - gMoveDescription_Rollout, - gMoveDescription_FalseSwipe, - gMoveDescription_Swagger, - gMoveDescription_MilkDrink, - gMoveDescription_Spark, - gMoveDescription_FuryCutter, - gMoveDescription_SteelWing, - gMoveDescription_MeanLook, - gMoveDescription_Attract, - gMoveDescription_SleepTalk, - gMoveDescription_HealBell, - gMoveDescription_Return, - gMoveDescription_Present, - gMoveDescription_Frustration, - gMoveDescription_Safeguard, - gMoveDescription_PainSplit, - gMoveDescription_SacredFire, - gMoveDescription_Magnitude, - gMoveDescription_DynamicPunch, - gMoveDescription_Megahorn, - gMoveDescription_DragonBreath, - gMoveDescription_BatonPass, - gMoveDescription_Encore, - gMoveDescription_Pursuit, - gMoveDescription_RapidSpin, - gMoveDescription_SweetScent, - gMoveDescription_IronTail, - gMoveDescription_MetalClaw, - gMoveDescription_VitalThrow, - gMoveDescription_MorningSun, - gMoveDescription_Synthesis, - gMoveDescription_Moonlight, - gMoveDescription_HiddenPower, - gMoveDescription_CrossChop, - gMoveDescription_Twister, - gMoveDescription_RainDance, - gMoveDescription_SunnyDay, - gMoveDescription_Crunch, - gMoveDescription_MirrorCoat, - gMoveDescription_PsychUp, - gMoveDescription_ExtremeSpeed, - gMoveDescription_AncientPower, - gMoveDescription_ShadowBall, - gMoveDescription_FutureSight, - gMoveDescription_RockSmash, - gMoveDescription_Whirlpool, - gMoveDescription_BeatUp, - gMoveDescription_FakeOut, - gMoveDescription_Uproar, - gMoveDescription_Stockpile, - gMoveDescription_SpitUp, - gMoveDescription_Swallow, - gMoveDescription_HeatWave, - gMoveDescription_Hail, - gMoveDescription_Torment, - gMoveDescription_Flatter, - gMoveDescription_WillOWisp, - gMoveDescription_Memento, - gMoveDescription_Facade, - gMoveDescription_FocusPunch, - gMoveDescription_SmellingSalt, - gMoveDescription_FollowMe, - gMoveDescription_NaturePower, - gMoveDescription_Charge, - gMoveDescription_Taunt, - gMoveDescription_HelpingHand, - gMoveDescription_Trick, - gMoveDescription_RolePlay, - gMoveDescription_Wish, - gMoveDescription_Assist, - gMoveDescription_Ingrain, - gMoveDescription_Superpower, - gMoveDescription_MagicCoat, - gMoveDescription_Recycle, - gMoveDescription_Revenge, - gMoveDescription_BrickBreak, - gMoveDescription_Yawn, - gMoveDescription_KnockOff, - gMoveDescription_Endeavor, - gMoveDescription_Eruption, - gMoveDescription_SkillSwap, - gMoveDescription_Imprison, - gMoveDescription_Refresh, - gMoveDescription_Grudge, - gMoveDescription_Snatch, - gMoveDescription_SecretPower, - gMoveDescription_Dive, - gMoveDescription_ArmThrust, - gMoveDescription_Camouflage, - gMoveDescription_TailGlow, - gMoveDescription_LusterPurge, - gMoveDescription_MistBall, - gMoveDescription_FeatherDance, - gMoveDescription_TeeterDance, - gMoveDescription_BlazeKick, - gMoveDescription_MudSport, - gMoveDescription_IceBall, - gMoveDescription_NeedleArm, - gMoveDescription_SlackOff, - gMoveDescription_HyperVoice, - gMoveDescription_PoisonFang, - gMoveDescription_CrushClaw, - gMoveDescription_BlastBurn, - gMoveDescription_HydroCannon, - gMoveDescription_MeteorMash, - gMoveDescription_Astonish, - gMoveDescription_WeatherBall, - gMoveDescription_Aromatherapy, - gMoveDescription_FakeTears, - gMoveDescription_AirCutter, - gMoveDescription_Overheat, - gMoveDescription_OdorSleuth, - gMoveDescription_RockTomb, - gMoveDescription_SilverWind, - gMoveDescription_MetalSound, - gMoveDescription_GrassWhistle, - gMoveDescription_Tickle, - gMoveDescription_CosmicPower, - gMoveDescription_WaterSpout, - gMoveDescription_SignalBeam, - gMoveDescription_ShadowPunch, - gMoveDescription_Extrasensory, - gMoveDescription_SkyUppercut, - gMoveDescription_SandTomb, - gMoveDescription_SheerCold, - gMoveDescription_MuddyWater, - gMoveDescription_BulletSeed, - gMoveDescription_AerialAce, - gMoveDescription_IcicleSpear, - gMoveDescription_IronDefense, - gMoveDescription_Block, - gMoveDescription_Howl, - gMoveDescription_DragonClaw, - gMoveDescription_FrenzyPlant, - gMoveDescription_BulkUp, - gMoveDescription_Bounce, - gMoveDescription_MudShot, - gMoveDescription_PoisonTail, - gMoveDescription_Covet, - gMoveDescription_VoltTackle, - gMoveDescription_MagicalLeaf, - gMoveDescription_WaterSport, - gMoveDescription_CalmMind, - gMoveDescription_LeafBlade, - gMoveDescription_DragonDance, - gMoveDescription_RockBlast, - gMoveDescription_ShockWave, - gMoveDescription_WaterPulse, - gMoveDescription_DoomDesire, - gMoveDescription_PsychoBoost, + MoveDescription_Pound, + MoveDescription_KarateChop, + MoveDescription_DoubleSlap, + MoveDescription_CometPunch, + MoveDescription_MegaPunch, + MoveDescription_PayDay, + MoveDescription_FirePunch, + MoveDescription_IcePunch, + MoveDescription_ThunderPunch, + MoveDescription_Scratch, + MoveDescription_ViceGrip, + MoveDescription_Guillotine, + MoveDescription_RazorWind, + MoveDescription_SwordsDance, + MoveDescription_Cut, + MoveDescription_Gust, + MoveDescription_WingAttack, + MoveDescription_Whirlwind, + MoveDescription_Fly, + MoveDescription_Bind, + MoveDescription_Slam, + MoveDescription_VineWhip, + MoveDescription_Stomp, + MoveDescription_DoubleKick, + MoveDescription_MegaKick, + MoveDescription_JumpKick, + MoveDescription_RollingKick, + MoveDescription_SandAttack, + MoveDescription_Headbutt, + MoveDescription_HornAttack, + MoveDescription_FuryAttack, + MoveDescription_HornDrill, + MoveDescription_Tackle, + MoveDescription_BodySlam, + MoveDescription_Wrap, + MoveDescription_TakeDown, + MoveDescription_Thrash, + MoveDescription_DoubleEdge, + MoveDescription_TailWhip, + MoveDescription_PoisonSting, + MoveDescription_Twineedle, + MoveDescription_PinMissile, + MoveDescription_Leer, + MoveDescription_Bite, + MoveDescription_Growl, + MoveDescription_Roar, + MoveDescription_Sing, + MoveDescription_Supersonic, + MoveDescription_SonicBoom, + MoveDescription_Disable, + MoveDescription_Acid, + MoveDescription_Ember, + MoveDescription_Flamethrower, + MoveDescription_Mist, + MoveDescription_WaterGun, + MoveDescription_HydroPump, + MoveDescription_Surf, + MoveDescription_IceBeam, + MoveDescription_Blizzard, + MoveDescription_Psybeam, + MoveDescription_BubbleBeam, + MoveDescription_AuroraBeam, + MoveDescription_HyperBeam, + MoveDescription_Peck, + MoveDescription_DrillPeck, + MoveDescription_Submission, + MoveDescription_LowKick, + MoveDescription_Counter, + MoveDescription_SeismicToss, + MoveDescription_Strength, + MoveDescription_Absorb, + MoveDescription_MegaDrain, + MoveDescription_LeechSeed, + MoveDescription_Growth, + MoveDescription_RazorLeaf, + MoveDescription_SolarBeam, + MoveDescription_PoisonPowder, + MoveDescription_StunSpore, + MoveDescription_SleepPowder, + MoveDescription_PetalDance, + MoveDescription_StringShot, + MoveDescription_DragonRage, + MoveDescription_FireSpin, + MoveDescription_ThunderShock, + MoveDescription_Thunderbolt, + MoveDescription_ThunderWave, + MoveDescription_Thunder, + MoveDescription_RockThrow, + MoveDescription_Earthquake, + MoveDescription_Fissure, + MoveDescription_Dig, + MoveDescription_Toxic, + MoveDescription_Confusion, + MoveDescription_Psychic, + MoveDescription_Hypnosis, + MoveDescription_Meditate, + MoveDescription_Agility, + MoveDescription_QuickAttack, + MoveDescription_Rage, + MoveDescription_Teleport, + MoveDescription_NightShade, + MoveDescription_Mimic, + MoveDescription_Screech, + MoveDescription_DoubleTeam, + MoveDescription_Recover, + MoveDescription_Harden, + MoveDescription_Minimize, + MoveDescription_Smokescreen, + MoveDescription_ConfuseRay, + MoveDescription_Withdraw, + MoveDescription_DefenseCurl, + MoveDescription_Barrier, + MoveDescription_LightScreen, + MoveDescription_Haze, + MoveDescription_Reflect, + MoveDescription_FocusEnergy, + MoveDescription_Bide, + MoveDescription_Metronome, + MoveDescription_MirrorMove, + MoveDescription_SelfDestruct, + MoveDescription_EggBomb, + MoveDescription_Lick, + MoveDescription_Smog, + MoveDescription_Sludge, + MoveDescription_BoneClub, + MoveDescription_FireBlast, + MoveDescription_Waterfall, + MoveDescription_Clamp, + MoveDescription_Swift, + MoveDescription_SkullBash, + MoveDescription_SpikeCannon, + MoveDescription_Constrict, + MoveDescription_Amnesia, + MoveDescription_Kinesis, + MoveDescription_SoftBoiled, + MoveDescription_HiJumpKick, + MoveDescription_Glare, + MoveDescription_DreamEater, + MoveDescription_PoisonGas, + MoveDescription_Barrage, + MoveDescription_LeechLife, + MoveDescription_LovelyKiss, + MoveDescription_SkyAttack, + MoveDescription_Transform, + MoveDescription_Bubble, + MoveDescription_DizzyPunch, + MoveDescription_Spore, + MoveDescription_Flash, + MoveDescription_Psywave, + MoveDescription_Splash, + MoveDescription_AcidArmor, + MoveDescription_Crabhammer, + MoveDescription_Explosion, + MoveDescription_FurySwipes, + MoveDescription_Bonemerang, + MoveDescription_Rest, + MoveDescription_RockSlide, + MoveDescription_HyperFang, + MoveDescription_Sharpen, + MoveDescription_Conversion, + MoveDescription_TriAttack, + MoveDescription_SuperFang, + MoveDescription_Slash, + MoveDescription_Substitute, + MoveDescription_Struggle, + MoveDescription_Sketch, + MoveDescription_TripleKick, + MoveDescription_Thief, + MoveDescription_SpiderWeb, + MoveDescription_MindReader, + MoveDescription_Nightmare, + MoveDescription_FlameWheel, + MoveDescription_Snore, + MoveDescription_Curse, + MoveDescription_Flail, + MoveDescription_Conversion2, + MoveDescription_Aeroblast, + MoveDescription_CottonSpore, + MoveDescription_Reversal, + MoveDescription_Spite, + MoveDescription_PowderSnow, + MoveDescription_Protect, + MoveDescription_MachPunch, + MoveDescription_ScaryFace, + MoveDescription_FaintAttack, + MoveDescription_SweetKiss, + MoveDescription_BellyDrum, + MoveDescription_SludgeBomb, + MoveDescription_MudSlap, + MoveDescription_Octazooka, + MoveDescription_Spikes, + MoveDescription_ZapCannon, + MoveDescription_Foresight, + MoveDescription_DestinyBond, + MoveDescription_PerishSong, + MoveDescription_IcyWind, + MoveDescription_Detect, + MoveDescription_BoneRush, + MoveDescription_LockOn, + MoveDescription_Outrage, + MoveDescription_Sandstorm, + MoveDescription_GigaDrain, + MoveDescription_Endure, + MoveDescription_Charm, + MoveDescription_Rollout, + MoveDescription_FalseSwipe, + MoveDescription_Swagger, + MoveDescription_MilkDrink, + MoveDescription_Spark, + MoveDescription_FuryCutter, + MoveDescription_SteelWing, + MoveDescription_MeanLook, + MoveDescription_Attract, + MoveDescription_SleepTalk, + MoveDescription_HealBell, + MoveDescription_Return, + MoveDescription_Present, + MoveDescription_Frustration, + MoveDescription_Safeguard, + MoveDescription_PainSplit, + MoveDescription_SacredFire, + MoveDescription_Magnitude, + MoveDescription_DynamicPunch, + MoveDescription_Megahorn, + MoveDescription_DragonBreath, + MoveDescription_BatonPass, + MoveDescription_Encore, + MoveDescription_Pursuit, + MoveDescription_RapidSpin, + MoveDescription_SweetScent, + MoveDescription_IronTail, + MoveDescription_MetalClaw, + MoveDescription_VitalThrow, + MoveDescription_MorningSun, + MoveDescription_Synthesis, + MoveDescription_Moonlight, + MoveDescription_HiddenPower, + MoveDescription_CrossChop, + MoveDescription_Twister, + MoveDescription_RainDance, + MoveDescription_SunnyDay, + MoveDescription_Crunch, + MoveDescription_MirrorCoat, + MoveDescription_PsychUp, + MoveDescription_ExtremeSpeed, + MoveDescription_AncientPower, + MoveDescription_ShadowBall, + MoveDescription_FutureSight, + MoveDescription_RockSmash, + MoveDescription_Whirlpool, + MoveDescription_BeatUp, + MoveDescription_FakeOut, + MoveDescription_Uproar, + MoveDescription_Stockpile, + MoveDescription_SpitUp, + MoveDescription_Swallow, + MoveDescription_HeatWave, + MoveDescription_Hail, + MoveDescription_Torment, + MoveDescription_Flatter, + MoveDescription_WillOWisp, + MoveDescription_Memento, + MoveDescription_Facade, + MoveDescription_FocusPunch, + MoveDescription_SmellingSalt, + MoveDescription_FollowMe, + MoveDescription_NaturePower, + MoveDescription_Charge, + MoveDescription_Taunt, + MoveDescription_HelpingHand, + MoveDescription_Trick, + MoveDescription_RolePlay, + MoveDescription_Wish, + MoveDescription_Assist, + MoveDescription_Ingrain, + MoveDescription_Superpower, + MoveDescription_MagicCoat, + MoveDescription_Recycle, + MoveDescription_Revenge, + MoveDescription_BrickBreak, + MoveDescription_Yawn, + MoveDescription_KnockOff, + MoveDescription_Endeavor, + MoveDescription_Eruption, + MoveDescription_SkillSwap, + MoveDescription_Imprison, + MoveDescription_Refresh, + MoveDescription_Grudge, + MoveDescription_Snatch, + MoveDescription_SecretPower, + MoveDescription_Dive, + MoveDescription_ArmThrust, + MoveDescription_Camouflage, + MoveDescription_TailGlow, + MoveDescription_LusterPurge, + MoveDescription_MistBall, + MoveDescription_FeatherDance, + MoveDescription_TeeterDance, + MoveDescription_BlazeKick, + MoveDescription_MudSport, + MoveDescription_IceBall, + MoveDescription_NeedleArm, + MoveDescription_SlackOff, + MoveDescription_HyperVoice, + MoveDescription_PoisonFang, + MoveDescription_CrushClaw, + MoveDescription_BlastBurn, + MoveDescription_HydroCannon, + MoveDescription_MeteorMash, + MoveDescription_Astonish, + MoveDescription_WeatherBall, + MoveDescription_Aromatherapy, + MoveDescription_FakeTears, + MoveDescription_AirCutter, + MoveDescription_Overheat, + MoveDescription_OdorSleuth, + MoveDescription_RockTomb, + MoveDescription_SilverWind, + MoveDescription_MetalSound, + MoveDescription_GrassWhistle, + MoveDescription_Tickle, + MoveDescription_CosmicPower, + MoveDescription_WaterSpout, + MoveDescription_SignalBeam, + MoveDescription_ShadowPunch, + MoveDescription_Extrasensory, + MoveDescription_SkyUppercut, + MoveDescription_SandTomb, + MoveDescription_SheerCold, + MoveDescription_MuddyWater, + MoveDescription_BulletSeed, + MoveDescription_AerialAce, + MoveDescription_IcicleSpear, + MoveDescription_IronDefense, + MoveDescription_Block, + MoveDescription_Howl, + MoveDescription_DragonClaw, + MoveDescription_FrenzyPlant, + MoveDescription_BulkUp, + MoveDescription_Bounce, + MoveDescription_MudShot, + MoveDescription_PoisonTail, + MoveDescription_Covet, + MoveDescription_VoltTackle, + MoveDescription_MagicalLeaf, + MoveDescription_WaterSport, + MoveDescription_CalmMind, + MoveDescription_LeafBlade, + MoveDescription_DragonDance, + MoveDescription_RockBlast, + MoveDescription_ShockWave, + MoveDescription_WaterPulse, + MoveDescription_DoomDesire, + MoveDescription_PsychoBoost, }; diff --git a/src/data/text/nature_names_de.h b/src/data/text/nature_names_de.h new file mode 100644 index 000000000..695b0b62c --- /dev/null +++ b/src/data/text/nature_names_de.h @@ -0,0 +1,53 @@ +static const u8 NatureName_Hardy[] = _("ROBUST"); +static const u8 NatureName_Lonely[] = _("SOLO"); +static const u8 NatureName_Brave[] = _("MUTIG"); +static const u8 NatureName_Adamant[] = _("HART"); +static const u8 NatureName_Naughty[] = _("FRECH"); +static const u8 NatureName_Bold[] = _("KÜHN"); +static const u8 NatureName_Docile[] = _("SANFT"); +static const u8 NatureName_Relaxed[] = _("LOCKER"); +static const u8 NatureName_Impish[] = _("PFIFFIG"); +static const u8 NatureName_Lax[] = _("LASCH"); +static const u8 NatureName_Timid[] = _("SCHEU"); +static const u8 NatureName_Hasty[] = _("HASTIG"); +static const u8 NatureName_Serious[] = _("ERNST"); +static const u8 NatureName_Jolly[] = _("FROH"); +static const u8 NatureName_Naive[] = _("NAIV"); +static const u8 NatureName_Modest[] = _("MÄSSIG"); +static const u8 NatureName_Mild[] = _("MILD"); +static const u8 NatureName_Quiet[] = _("RUHIG"); +static const u8 NatureName_Bashful[] = _("ZAGHAFT"); +static const u8 NatureName_Rash[] = _("HITZIG"); +static const u8 NatureName_Calm[] = _("STILL"); +static const u8 NatureName_Gentle[] = _("ZART"); +static const u8 NatureName_Sassy[] = _("FORSCH"); +static const u8 NatureName_Careful[] = _("SACHT"); +static const u8 NatureName_Quirky[] = _("KAUZIG"); + +const u8 * const gNatureNames[] = { + NatureName_Hardy, + NatureName_Lonely, + NatureName_Brave, + NatureName_Adamant, + NatureName_Naughty, + NatureName_Bold, + NatureName_Docile, + NatureName_Relaxed, + NatureName_Impish, + NatureName_Lax, + NatureName_Timid, + NatureName_Hasty, + NatureName_Serious, + NatureName_Jolly, + NatureName_Naive, + NatureName_Modest, + NatureName_Mild, + NatureName_Quiet, + NatureName_Bashful, + NatureName_Rash, + NatureName_Calm, + NatureName_Gentle, + NatureName_Sassy, + NatureName_Careful, + NatureName_Quirky, +}; diff --git a/src/data/text/nature_names_en.h b/src/data/text/nature_names_en.h new file mode 100644 index 000000000..305b43690 --- /dev/null +++ b/src/data/text/nature_names_en.h @@ -0,0 +1,53 @@ +static const u8 NatureName_Hardy[] = _("HARDY"); +static const u8 NatureName_Lonely[] = _("LONELY"); +static const u8 NatureName_Brave[] = _("BRAVE"); +static const u8 NatureName_Adamant[] = _("ADAMANT"); +static const u8 NatureName_Naughty[] = _("NAUGHTY"); +static const u8 NatureName_Bold[] = _("BOLD"); +static const u8 NatureName_Docile[] = _("DOCILE"); +static const u8 NatureName_Relaxed[] = _("RELAXED"); +static const u8 NatureName_Impish[] = _("IMPISH"); +static const u8 NatureName_Lax[] = _("LAX"); +static const u8 NatureName_Timid[] = _("TIMID"); +static const u8 NatureName_Hasty[] = _("HASTY"); +static const u8 NatureName_Serious[] = _("SERIOUS"); +static const u8 NatureName_Jolly[] = _("JOLLY"); +static const u8 NatureName_Naive[] = _("NAIVE"); +static const u8 NatureName_Modest[] = _("MODEST"); +static const u8 NatureName_Mild[] = _("MILD"); +static const u8 NatureName_Quiet[] = _("QUIET"); +static const u8 NatureName_Bashful[] = _("BASHFUL"); +static const u8 NatureName_Rash[] = _("RASH"); +static const u8 NatureName_Calm[] = _("CALM"); +static const u8 NatureName_Gentle[] = _("GENTLE"); +static const u8 NatureName_Sassy[] = _("SASSY"); +static const u8 NatureName_Careful[] = _("CAREFUL"); +static const u8 NatureName_Quirky[] = _("QUIRKY"); + +const u8 * const gNatureNames[] = { + NatureName_Hardy, + NatureName_Lonely, + NatureName_Brave, + NatureName_Adamant, + NatureName_Naughty, + NatureName_Bold, + NatureName_Docile, + NatureName_Relaxed, + NatureName_Impish, + NatureName_Lax, + NatureName_Timid, + NatureName_Hasty, + NatureName_Serious, + NatureName_Jolly, + NatureName_Naive, + NatureName_Modest, + NatureName_Mild, + NatureName_Quiet, + NatureName_Bashful, + NatureName_Rash, + NatureName_Calm, + NatureName_Gentle, + NatureName_Sassy, + NatureName_Careful, + NatureName_Quirky, +}; diff --git a/src/pokemon/pokemon_summary_screen.c b/src/pokemon/pokemon_summary_screen.c index 33034afa4..8f6ff07a0 100644 --- a/src/pokemon/pokemon_summary_screen.c +++ b/src/pokemon/pokemon_summary_screen.c @@ -174,8 +174,10 @@ extern const u8 *const gUnknown_083C1068[]; #if ENGLISH #include "../data/text/move_descriptions_en.h" +#include "../data/text/nature_names_en.h" #elif GERMAN #include "../data/text/move_descriptions_de.h" +#include "../data/text/nature_names_de.h" #endif -- cgit v1.2.3 From 8ad0f966993f4b87fcf30ddc217400164550f193 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Sun, 26 Nov 2017 12:51:11 -0800 Subject: Move summary_screen data into src --- src/pokemon/pokemon_summary_screen.c | 506 +++++++++++++++++++++++++++++++---- 1 file changed, 451 insertions(+), 55 deletions(-) (limited to 'src') diff --git a/src/pokemon/pokemon_summary_screen.c b/src/pokemon/pokemon_summary_screen.c index 8f6ff07a0..fb486727f 100644 --- a/src/pokemon/pokemon_summary_screen.c +++ b/src/pokemon/pokemon_summary_screen.c @@ -31,6 +31,16 @@ #define ewramSS (*(struct PokemonSummaryScreenStruct *)(gSharedMem + 0x18000)) +static void sub_809FC0C(void); +static void sub_809FEB8(void); +static void sub_809F63C(struct Pokemon *); +static void sub_809F650(struct Pokemon *); +static void sub_809F664(struct Pokemon *); +static void sub_809F664(struct Pokemon *); +static void sub_809FE6C(struct Pokemon *); +static void sub_80A0090(struct Pokemon *); +static void sub_80A015C(struct Pokemon *); +static void sub_80A015C(struct Pokemon *); static void sub_809DE44(void); static void sub_809EB40(u8); static void sub_809EBC4(void); @@ -128,49 +138,31 @@ extern u16 gUnknown_03004288; extern u16 gUnknown_030041B0; extern TaskFunc gUnknown_03005CF0; extern struct Sprite *gUnknown_020384F4; -extern struct SpriteTemplate gSpriteTemplate_83C1304; -extern struct SpriteTemplate gSpriteTemplate_83C1280; -extern struct SpriteTemplate gSpriteTemplate_83C11C0; extern struct SpriteTemplate gUnknown_02024E8C; -extern const u16 gSummaryScreenTextTiles[]; -extern const u16 gSummaryScreenButtonTiles[]; +extern const u8 gStatusPal_Icons[]; +extern const u8 gStatusGfx_Icons[]; +extern const u8 gMenuSummaryPal[]; +extern const u8 gMenuSummaryGfx[]; +extern const u8 gMoveTypes_Gfx[]; extern const u8 gMoveTypes_Pal[]; extern const u8 gStatusScreen_Pal[]; extern const u8 gStatusScreen_Tilemap[]; -extern const struct CompressedSpritePalette gUnknown_083C1278; -extern const struct CompressedSpritePalette gUnknown_083C12FC; -extern const struct CompressedSpriteSheet gUnknown_083C12F4; -extern const struct CompressedSpriteSheet gUnknown_083C1270; -extern const struct CompressedSpriteSheet gUnknown_083C11B8; extern const u8 gUnknown_08E74688[]; -extern const u8 gUnknown_08E73E88[]; extern const u8 gUnknown_08E74E88[]; extern const u8 gUnknown_08E73508[]; extern const u8 gStatusScreen_Gfx[]; extern const u8 gFontDefaultPalette[]; extern const u8 gUnknownPalette_81E6692[]; -extern const u8 gDoubleBattlePartyOrder[]; -extern const void (*gUnknown_083C1580[])(void); -extern const void (*gUnknown_083C1598[])(struct Pokemon *); -extern const void (*gUnknown_083C1588[])(struct Pokemon *); -extern const u16 gUnknown_083C157E[]; -extern const u16 gUnknown_083C157C[]; extern const u8 gAbilityNames[][13]; extern const u8 * const gAbilityDescriptions[]; extern const u8 * const gContestEffectStrings[]; extern const struct ContestMove gContestMoves[]; extern const struct ContestEffect gContestEffects[]; -extern const u8 gUnknown_083C15BC[]; -extern const u16 gSummaryScreenMonMarkingsPalette[]; -extern const u8 gUnknown_083C11D8[]; extern const u16 gUnknown_08E94510[]; extern const u16 gUnknown_08E94550[]; extern const u16 gUnknown_08E94590[]; extern const u8 gUnknown_08E73E88[]; -extern const u8 gUnknown_083C15AE[]; -extern const u8 gUnknown_083C15B4[]; -extern const u8 *const gUnknown_083C1068[]; #if ENGLISH #include "../data/text/move_descriptions_en.h" @@ -180,6 +172,410 @@ extern const u8 *const gUnknown_083C1068[]; #include "../data/text/nature_names_de.h" #endif +static const u8 * const sPageHeaderTexts[] = { + gEmptyString_81E72B0, + OtherText_PokeInfo, + OtherText_PokeSkills, + OtherText_BattleMoves, + OtherText_ContestMoves, + OtherText_Switch, + OtherText_Info, + gOtherText_CancelNoTerminator, +}; + +static const union AffineAnimCmd sUnusedSpriteAffineAnim[] = { + AFFINEANIMCMD_FRAME(0xFF00, 0x100, 0, 0), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd *const sUnsuedSpriteAffineAnimTable[] = { + sUnusedSpriteAffineAnim, +}; + +static const struct OamData sOamData_83C109C = { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 1, + .paletteNum = 0, + .affineParam = 0, +}; + +static const union AnimCmd sSpriteAnim_83C10A4[] = { + ANIMCMD_FRAME(0, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sSpriteAnim_83C10AC[] = { + ANIMCMD_FRAME(8, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sSpriteAnim_83C10B4[] = { + ANIMCMD_FRAME(16, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sSpriteAnim_83C10BC[] = { + ANIMCMD_FRAME(24, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sSpriteAnim_83C10C4[] = { + ANIMCMD_FRAME(32, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sSpriteAnim_83C10CC[] = { + ANIMCMD_FRAME(40, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sSpriteAnim_83C10D4[] = { + ANIMCMD_FRAME(48, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sSpriteAnim_83C10DC[] = { + ANIMCMD_FRAME(56, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sSpriteAnim_83C10E4[] = { + ANIMCMD_FRAME(64, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sSpriteAnim_83C10EC[] = { + ANIMCMD_FRAME(72, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sSpriteAnim_83C10F4[] = { + ANIMCMD_FRAME(80, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sSpriteAnim_83C10FC[] = { + ANIMCMD_FRAME(88, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sSpriteAnim_83C1104[] = { + ANIMCMD_FRAME(96, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sSpriteAnim_83C110C[] = { + ANIMCMD_FRAME(104, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sSpriteAnim_83C1114[] = { + ANIMCMD_FRAME(112, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sSpriteAnim_83C111C[] = { + ANIMCMD_FRAME(120, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sSpriteAnim_83C1124[] = { + ANIMCMD_FRAME(128, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sSpriteAnim_83C112C[] = { + ANIMCMD_FRAME(136, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sSpriteAnim_83C1134[] = { + ANIMCMD_FRAME(144, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sSpriteAnim_83C113C[] = { + ANIMCMD_FRAME(152, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sSpriteAnim_83C1144[] = { + ANIMCMD_FRAME(160, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sSpriteAnim_83C114C[] = { + ANIMCMD_FRAME(168, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sSpriteAnim_83C1154[] = { + ANIMCMD_FRAME(176, 0), + ANIMCMD_END, +}; + +static const union AnimCmd *const sSpriteAnimTable_83C115C[] = { + sSpriteAnim_83C10A4, + sSpriteAnim_83C10AC, + sSpriteAnim_83C10B4, + sSpriteAnim_83C10BC, + sSpriteAnim_83C10C4, + sSpriteAnim_83C10CC, + sSpriteAnim_83C10D4, + sSpriteAnim_83C10DC, + sSpriteAnim_83C10E4, + sSpriteAnim_83C10EC, + sSpriteAnim_83C10F4, + sSpriteAnim_83C10FC, + sSpriteAnim_83C1104, + sSpriteAnim_83C110C, + sSpriteAnim_83C1114, + sSpriteAnim_83C111C, + sSpriteAnim_83C1124, + sSpriteAnim_83C112C, + sSpriteAnim_83C1134, + sSpriteAnim_83C113C, + sSpriteAnim_83C1144, + sSpriteAnim_83C114C, + sSpriteAnim_83C1154, +}; + +static const struct CompressedSpriteSheet sUnknown_083C11B8 = { gMoveTypes_Gfx, 0x1700, 30002 }; + +static const struct SpriteTemplate sSpriteTemplate_83C11C0 = { + .tileTag = 30002, + .paletteTag = 30002, + .oam = &sOamData_83C109C, + .anims = sSpriteAnimTable_83C115C, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const u8 sUnknown_PaletteNums[] = { 0xD, 0xD, 0xE, 0xE, 0xD, 0xD, 0xF, 0xE, 0xD, 0xF, 0xD, 0xE, 0xF, 0xD, 0xE, 0xE, 0xF, 0xD, 0xD, 0xE, 0xE, 0xF, 0xD }; + +static const struct OamData sOamData_83C11F0 = { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 1, + .paletteNum = 0, + .affineParam = 0, +}; + +static const union AnimCmd sSpriteAnim_83C11F8[] = { + ANIMCMD_FRAME(0, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sSpriteAnim_83C1200[] = { + ANIMCMD_FRAME(4, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sSpriteAnim_83C1208[] = { + ANIMCMD_FRAME(8, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sSpriteAnim_83C1210[] = { + ANIMCMD_FRAME(12, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sSpriteAnim_83C1218[] = { + ANIMCMD_FRAME(16, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sSpriteAnim_83C1220[] = { + ANIMCMD_FRAME(16, 0, .hFlip = TRUE), + ANIMCMD_END, +}; + +static const union AnimCmd sSpriteAnim_83C1228[] = { + ANIMCMD_FRAME(20, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sSpriteAnim_83C1230[] = { + ANIMCMD_FRAME(24, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sSpriteAnim_83C1238[] = { + ANIMCMD_FRAME(24, 0, .hFlip = TRUE), + ANIMCMD_END, +}; + +static const union AnimCmd sSpriteAnim_83C1240[] = { + ANIMCMD_FRAME(28, 0), + ANIMCMD_END, +}; + +static const union AnimCmd *const sSpriteAnimTable_83C1248[] = { + sSpriteAnim_83C11F8, + sSpriteAnim_83C1200, + sSpriteAnim_83C1208, + sSpriteAnim_83C1210, + sSpriteAnim_83C1218, + sSpriteAnim_83C1220, + sSpriteAnim_83C1228, + sSpriteAnim_83C1230, + sSpriteAnim_83C1238, + sSpriteAnim_83C1240, +}; + +static const struct CompressedSpriteSheet sUnknown_083C1270 = { gMenuSummaryGfx, 0x400, 30000 }; +static const struct CompressedSpritePalette sUnknown_083C1278 = { gMenuSummaryPal, 30000 }; + +static const struct SpriteTemplate sSpriteTemplate_83C1280 = { + .tileTag = 30000, + .paletteTag = 30000, + .oam = &sOamData_83C11F0, + .anims = sSpriteAnimTable_83C1248, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct OamData sOamData_83C1298 = { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 3, + .paletteNum = 0, + .affineParam = 0, +}; + +static const union AnimCmd sSpriteAnim_83C12A0[] = { + ANIMCMD_FRAME(0, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sSpriteAnim_83C12A8[] = { + ANIMCMD_FRAME(4, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sSpriteAnim_83C12B0[] = { + ANIMCMD_FRAME(8, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sSpriteAnim_83C12B8[] = { + ANIMCMD_FRAME(12, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sSpriteAnim_83C12C0[] = { + ANIMCMD_FRAME(16, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sSpriteAnim_83C12C8[] = { + ANIMCMD_FRAME(20, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sSpriteAnim_83C12D0[] = { + ANIMCMD_FRAME(24, 0), + ANIMCMD_END, +}; + +static const union AnimCmd *const sSpriteAnimTable_83C12D8[] = { + sSpriteAnim_83C12A0, + sSpriteAnim_83C12A8, + sSpriteAnim_83C12B0, + sSpriteAnim_83C12B8, + sSpriteAnim_83C12C0, + sSpriteAnim_83C12C8, + sSpriteAnim_83C12D0, +}; + +static const struct CompressedSpriteSheet sUnknown_083C12F4 = { gStatusGfx_Icons, 0x380, 30001 }; +static const struct CompressedSpritePalette sUnknown_083C12FC = { gStatusPal_Icons, 30001 }; + +static const struct SpriteTemplate sSpriteTemplate_83C1304 = { + .tileTag = 30001, + .paletteTag = 30001, + .oam = &sOamData_83C1298, + .anims = sSpriteAnimTable_83C12D8, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const u16 sSummaryScreenMonMarkingsPalette[] = INCBIN_U16("graphics/summary_screen/mon_markings.gbapal"); + +#if ENGLISH +static const u16 sSummaryScreenTextTiles[] = INCBIN_U16("graphics/summary_screen/text.4bpp"); +#endif + +static const u16 sSummaryScreenButtonTiles[] = INCBIN_U16("graphics/summary_screen/buttons.4bpp"); + +static const u16 sUnknown_083C157C[] = { RGB(26, 26, 23) }; +static const u16 sUnknown_083C157E[] = { RGB(30, 30, 27) }; + +static void (*const sUnknown_083C1580[])(void) = { + sub_809FC0C, + sub_809FEB8, +}; + +static void (*const sUnknown_083C1588[])(struct Pokemon *) = { + sub_809F63C, + sub_809F650, + sub_809F664, + sub_809F664, +}; + +static void (*const sUnknown_083C1598[])(struct Pokemon *) = { + sub_809FE6C, + sub_80A0090, + sub_80A015C, + sub_80A015C, +}; + +static const u8 sDoubleBattlePartyOrder[] = { 0, 2, 3, 1, 4, 5 }; + +static const u8 sUnknown_083C15AE[] = _("{STR_VAR_1}{CLEAR_TO 64}"); +static const u8 sUnknown_083C15B4[] = _("{STR_VAR_1}{CLEAR_TO 72}"); + +asm(".align 2"); // TODO: this array is probably not correctly-typed +static const u8 sUnknown_083C15BC[] = { + 9, 1, 0, 2, + 10, 3, 0, 4, + 8, 5, 0, 6, + 11, 7, 0, 8, + 14, 9, 0, 10, + 12, 11, 0, 12, + 13, 13, 0, 14, + -1, 15, 0, 10, +}; + void sub_809D844(void) { @@ -345,11 +741,11 @@ bool8 sub_809DA84(void) gMain.state++; break; case 9: - src = gSummaryScreenTextTiles; + src = sSummaryScreenTextTiles; dest = (void *)VRAM + 0xD000; DmaCopy16(3, src, dest, 320); - src = gSummaryScreenButtonTiles; + src = sSummaryScreenButtonTiles; dest = (void *)VRAM + 0xD140; DmaCopy16(3, src, dest, 256); @@ -406,7 +802,7 @@ bool8 sub_809DA84(void) case 17: if (ewramSS.page <= PSS_PAGE_SKILLS) { - gUnknown_083C1580[ewramSS.page](); + sUnknown_083C1580[ewramSS.page](); } gMain.state++; @@ -416,7 +812,7 @@ bool8 sub_809DA84(void) gMain.state++; break; case 19: - gUnknown_083C1598[ewramSS.page](&ewramSS.loadedMon); + sUnknown_083C1598[ewramSS.page](&ewramSS.loadedMon); gMain.state++; break; case 20: @@ -523,19 +919,19 @@ bool8 LoadPokemonSummaryScreenGraphics(void) LoadCompressedPalette(gStatusScreen_Pal, 0, 160); break; case 7: - LoadCompressedObjectPic(&gUnknown_083C11B8); + LoadCompressedObjectPic(&sUnknown_083C11B8); break; case 8: - LoadCompressedObjectPic(&gUnknown_083C1270); + LoadCompressedObjectPic(&sUnknown_083C1270); break; case 9: - LoadCompressedObjectPic(&gUnknown_083C12F4); + LoadCompressedObjectPic(&sUnknown_083C12F4); break; case 10: - LoadCompressedObjectPalette(&gUnknown_083C12FC); + LoadCompressedObjectPalette(&sUnknown_083C12FC); break; case 11: - LoadCompressedObjectPalette(&gUnknown_083C1278); + LoadCompressedObjectPalette(&sUnknown_083C1278); break; case 12: LoadCompressedPalette(gMoveTypes_Pal, 464, 96); @@ -1456,7 +1852,7 @@ void sub_809EC38(u8 taskId) taskData[0]++; break; case 4: - gUnknown_083C1598[ewramSS.page](&ewramSS.loadedMon); + sUnknown_083C1598[ewramSS.page](&ewramSS.loadedMon); ewramSS.bgToggle ^= 1; taskData[0]++; break; @@ -1574,7 +1970,7 @@ void sub_809EE74(u8 taskId) taskData[0]++; break; case 5: - gUnknown_083C1598[ewramSS.page](&ewramSS.loadedMon); + sUnknown_083C1598[ewramSS.page](&ewramSS.loadedMon); ewramSS.bgToggle ^= 1; taskData[0]++; break; @@ -1913,9 +2309,9 @@ s8 sub_809F344(u8 partyIndex) return -1; } - if (sub_809F310(&gPlayerParty[gDoubleBattlePartyOrder[partyIndex]]) == TRUE) + if (sub_809F310(&gPlayerParty[sDoubleBattlePartyOrder[partyIndex]]) == TRUE) { - return gDoubleBattlePartyOrder[partyIndex]; + return sDoubleBattlePartyOrder[partyIndex]; } } } @@ -1930,9 +2326,9 @@ s8 sub_809F388(u8 partyIndex) } partyIndex--; - if (sub_809F310(&gPlayerParty[gDoubleBattlePartyOrder[partyIndex]]) == TRUE) + if (sub_809F310(&gPlayerParty[sDoubleBattlePartyOrder[partyIndex]]) == TRUE) { - return gDoubleBattlePartyOrder[partyIndex]; + return sDoubleBattlePartyOrder[partyIndex]; } } } @@ -1944,7 +2340,7 @@ s8 sub_809F3CC(s8 direction) for (i = 0; i < PARTY_SIZE; i++) { - if (gDoubleBattlePartyOrder[i] == ewramSS.monIndex) + if (sDoubleBattlePartyOrder[i] == ewramSS.monIndex) { monIndex = i; break; @@ -2050,7 +2446,7 @@ bool8 sub_809F5F8(void) } else { - gUnknown_083C1588[ewramSS.page](&ewramSS.loadedMon); + sUnknown_083C1588[ewramSS.page](&ewramSS.loadedMon); return TRUE; } } @@ -2532,12 +2928,12 @@ bool8 sub_809FA94(struct Pokemon *mon) { if (!IsShiny(mon)) { - LoadPalette(gUnknown_083C157C, 4, 2); + LoadPalette(sUnknown_083C157C, 4, 2); return FALSE; } else { - LoadPalette(gUnknown_083C157E, 4, 2); + LoadPalette(sUnknown_083C157E, 4, 2); return TRUE; } } @@ -2555,7 +2951,7 @@ void sub_809FAC8(struct Pokemon *mon) MenuZeroFillWindowRect(0, 12, 11, 15); GetMonNickname(mon, gStringVar1); sub_80A1FF8(gStringVar1, 13, 3, 16); - LoadPalette(gUnknown_083C157C, 4, 2); + LoadPalette(sUnknown_083C157C, 4, 2); } else { @@ -3462,7 +3858,7 @@ void PrintNumRibbons(struct Pokemon *pokemon) ConvertIntToDecimalStringN(&text[3], numRibbons, 1, 2); } - MenuPrint(gUnknown_083C15AE, 21, 4); + MenuPrint(sUnknown_083C15AE, 21, 4); } void PrintHeldItemName(u16 itemId, u8 left, u8 top) @@ -3483,7 +3879,7 @@ void PrintHeldItemName(u16 itemId, u8 left, u8 top) CopyItemName(itemId, gStringVar1); } - MenuPrint(gUnknown_083C15B4, left, top); + MenuPrint(sUnknown_083C15B4, left, top); } void DrawExperienceProgressBar(struct Pokemon *pokemon, u8 left, u8 top) @@ -3567,7 +3963,7 @@ void PrintSummaryWindowHeaderText(void) buffer += 3; buffer = sub_80A1E58(buffer, 13); - buffer = StringCopy(buffer, gUnknown_083C1068[ewramSS.headerTextId]); + buffer = StringCopy(buffer, sPageHeaderTexts[ewramSS.headerTextId]); buffer[0] = EXT_CTRL_CODE_BEGIN; buffer[1] = 0x13; @@ -3588,7 +3984,7 @@ void PrintSummaryWindowHeaderText(void) buffer = gStringVar1; buffer = sub_80A1E58(buffer, 13); - buffer = StringCopy(buffer, gUnknown_083C1068[ewramSS.headerActionTextId]); + buffer = StringCopy(buffer, sPageHeaderTexts[ewramSS.headerActionTextId]); buffer[0] = EXT_CTRL_CODE_BEGIN; buffer[1] = 0x13; @@ -4974,7 +5370,7 @@ void sub_80A1950(void) { if (ewram1A000[i] == 0xFF) { - ewram1A000[i] = CreateSprite(&gSpriteTemplate_83C11C0, 0, 0, 2); + ewram1A000[i] = CreateSprite(&sSpriteTemplate_83C11C0, 0, 0, 2); } sub_80A1918(i, 1); @@ -4985,7 +5381,7 @@ void sub_80A198C(u8 animNum, u8 x, u8 y, u8 d) { StartSpriteAnim(&gSprites[ewram1A000[d]], animNum); - gSprites[ewram1A000[d]].oam.paletteNum = gUnknown_083C11D8[animNum]; + gSprites[ewram1A000[d]].oam.paletteNum = sUnknown_PaletteNums[animNum]; gSprites[ewram1A000[d]].pos1.x = x + 16; gSprites[ewram1A000[d]].pos1.y = y + 8; @@ -5008,7 +5404,7 @@ void sub_80A1A30(u8 a) for (i = 0; i < 10; i++) { x = (i * 16) + 0x58; - ewram1A000[a + i] = CreateSprite(&gSpriteTemplate_83C1280, x, 40, subPriority); + ewram1A000[a + i] = CreateSprite(&sSpriteTemplate_83C1280, x, 40, subPriority); if (i == 0) { @@ -5200,7 +5596,7 @@ void sub_80A1D18(void) if (ewram1A000[29] == 0xFF) { - ewram1A000[29] = CreateSprite(&gSpriteTemplate_83C1304, 64, 152, 0); + ewram1A000[29] = CreateSprite(&sSpriteTemplate_83C1304, 64, 152, 0); } } else @@ -5233,7 +5629,7 @@ void sub_80A1D18(void) ldrb r0, [r4]\n\ cmp r0, 0xFF\n\ bne _080A1D60\n\ - ldr r0, _080A1D54 @ =gSpriteTemplate_83C1304\n\ + ldr r0, _080A1D54 @ =sSpriteTemplate_83C1304\n\ movs r1, 0x40\n\ movs r2, 0x98\n\ movs r3, 0\n\ @@ -5242,7 +5638,7 @@ void sub_80A1D18(void) b _080A1D60\n\ .align 2, 0\n\ _080A1D50: .4byte gSharedMem + 0x1A01D\n\ -_080A1D54: .4byte gSpriteTemplate_83C1304\n\ +_080A1D54: .4byte sSpriteTemplate_83C1304\n\ _080A1D58:\n\ movs r0, 0x1D\n\ bl sub_80A18E4\n\ @@ -5273,7 +5669,7 @@ void sub_80A1D84(struct Pokemon *mon) { struct Sprite *sprite; - sprite = sub_80F7920(0x7533, 0x7533, gSummaryScreenMonMarkingsPalette); + sprite = sub_80F7920(0x7533, 0x7533, sSummaryScreenMonMarkingsPalette); gUnknown_020384F4 = sprite; if (sprite != NULL) @@ -5306,7 +5702,7 @@ u8 *sub_80A1E58(u8 *text, u8 id) { if (id != 0xFF) { - const u8 *ptr = gUnknown_083C15BC; + const u8 *ptr = sUnknown_083C15BC; while (*ptr != 0xFF && *ptr != id) { ptr += 4; -- cgit v1.2.3 From 3339dbf0ea8c635abd2159732e9e55882b8b629c Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Sun, 26 Nov 2017 13:01:51 -0800 Subject: Fix sprite data accesses --- src/pokemon/pokemon_summary_screen.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) (limited to 'src') diff --git a/src/pokemon/pokemon_summary_screen.c b/src/pokemon/pokemon_summary_screen.c index fb486727f..1344f9f6e 100644 --- a/src/pokemon/pokemon_summary_screen.c +++ b/src/pokemon/pokemon_summary_screen.c @@ -5310,7 +5310,7 @@ u8 sub_80A1808(struct Pokemon *pokemon) FreeSpriteOamMatrix(&gSprites[spriteId]); - gSprites[spriteId].data0 = species; + gSprites[spriteId].data[0] = species; gSprites[spriteId].callback = sub_80A1888; if (!IsPokeSpriteNotFlipped(species)) @@ -5333,7 +5333,7 @@ void sub_80A1888(struct Sprite *sprite) if (!GetMonData(&ewramSS.loadedMon, MON_DATA_IS_EGG)) { - PlayCry1(sprite->data0, 0); + PlayCry1(sprite->data[0], 0); } } } @@ -5420,8 +5420,8 @@ void sub_80A1A30(u8 a) } gSprites[ewram1A000[a + i]].callback = sub_80A1BC0; - gSprites[ewram1A000[a + i]].data0 = a; - gSprites[ewram1A000[a + i]].data1 = 0; + gSprites[ewram1A000[a + i]].data[0] = a; + gSprites[ewram1A000[a + i]].data[1] = 0; } } } @@ -5456,9 +5456,9 @@ void sub_80A1BC0(struct Sprite *sprite) u8 animNum = sprite->animNum - 4; if (animNum < 3) { - sprite->data1 = (sprite->data1 + 1) & 0x1F; + sprite->data[1] = (sprite->data[1] + 1) & 0x1F; - if (sprite->data1 > 24) + if (sprite->data[1] > 24) { sprite->invisible = 1; } @@ -5469,11 +5469,11 @@ void sub_80A1BC0(struct Sprite *sprite) } else { - sprite->data1 = 0; + sprite->data[1] = 0; sprite->invisible = 0; } - if (sprite->data0 == 9) + if (sprite->data[0] == 9) { sprite->pos2.y = ewramSS.selectedMoveIndex * 16; } -- cgit v1.2.3 From 026e017a16df44806b95435403a8e3b8dbe78084 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Sun, 26 Nov 2017 15:10:56 -0600 Subject: flag, vars, items constants --- src/battle/battle_2.c | 2 +- src/battle/battle_3.c | 7 ++++--- src/battle/battle_4.c | 4 ++-- src/battle/battle_ai.c | 2 +- src/battle/battle_controller_player.c | 4 ++-- src/battle/battle_message.c | 5 +++-- src/battle/calculate_base_damage.c | 4 ++-- src/data/battle_strings_de.h | 2 +- src/data/battle_strings_en.h | 2 +- src/engine/record_mixing.c | 2 +- src/engine/trade.c | 4 ++-- src/field/battle_tower.c | 6 +++--- src/field/berry.c | 2 +- src/field/berry_tag_screen.c | 2 +- src/field/bike.c | 2 +- src/field/braille_puzzles.c | 2 +- src/field/daycare.c | 4 ++-- src/field/field_control_avatar.c | 4 ++-- src/field/field_specials.c | 2 +- src/field/field_tasks.c | 4 ++-- src/field/item.c | 2 +- src/field/item_menu.c | 2 +- src/field/item_use.c | 4 ++-- src/field/lottery_corner.c | 2 +- src/field/menu_helpers.c | 2 +- src/field/party_menu.c | 4 ++-- src/field/player_pc.c | 2 +- src/field/pokeblock.c | 2 +- src/field/secret_base.c | 6 +++--- src/field/shop.c | 2 +- src/field/tv.c | 6 +++--- src/pokemon/mail.c | 2 +- src/pokemon/mail_data.c | 2 +- src/pokemon/pokemon_1.c | 2 +- src/pokemon/pokemon_3.c | 2 +- src/pokemon/pokemon_data.c | 4 ++-- src/pokemon/pokemon_menu.c | 2 +- src/pokenav_before.c | 3 ++- src/rom3.c | 2 +- src/scene/berry_blender.c | 2 +- src/scene/egg_hatch.c | 2 +- src/script_pokemon_util_80C4BF0.c | 2 +- 42 files changed, 64 insertions(+), 61 deletions(-) (limited to 'src') diff --git a/src/battle/battle_2.c b/src/battle/battle_2.c index 69f168aff..5b283483c 100644 --- a/src/battle/battle_2.c +++ b/src/battle/battle_2.c @@ -26,7 +26,7 @@ #include "trig.h" #include "unknown_task.h" #include "util.h" -#include "items.h" +#include "constants/items.h" #include "hold_effects.h" #include "battle_move_effects.h" #include "ewram.h" diff --git a/src/battle/battle_3.c b/src/battle/battle_3.c index 05fd89d24..0d9e8c41d 100644 --- a/src/battle/battle_3.c +++ b/src/battle/battle_3.c @@ -1,9 +1,10 @@ #include "global.h" #include "constants/abilities.h" #include "battle.h" -#include "moves.h" +#include "constants/moves.h" #include "item.h" -#include "items.h" +#include "constants/items.h" +#include "event_data.h" #include "hold_effects.h" #include "constants/species.h" #include "pokemon.h" @@ -12,7 +13,7 @@ #include "text.h" #include "battle_move_effects.h" #include "string_util.h" -#include "flags.h" +#include "constants/flags.h" #include "ewram.h" extern u8* gBattlescriptCurrInstr; diff --git a/src/battle/battle_4.c b/src/battle/battle_4.c index ce9f55039..59a187cda 100644 --- a/src/battle/battle_4.c +++ b/src/battle/battle_4.c @@ -1,10 +1,10 @@ #include "global.h" #include "battle.h" #include "battle_move_effects.h" -#include "moves.h" +#include "constants/moves.h" #include "constants/abilities.h" #include "item.h" -#include "items.h" +#include "constants/items.h" #include "data2.h" #include "hold_effects.h" #include "random.h" diff --git a/src/battle/battle_ai.c b/src/battle/battle_ai.c index eab90376e..276563202 100644 --- a/src/battle/battle_ai.c +++ b/src/battle/battle_ai.c @@ -5,7 +5,7 @@ #include "battle_move_effects.h" #include "data2.h" #include "item.h" -#include "moves.h" +#include "constants/moves.h" #include "pokemon.h" #include "random.h" #include "rom_8077ABC.h" diff --git a/src/battle/battle_controller_player.c b/src/battle/battle_controller_player.c index 956809814..653f0938c 100644 --- a/src/battle/battle_controller_player.c +++ b/src/battle/battle_controller_player.c @@ -4,12 +4,12 @@ #include "battle_interface.h" #include "battle_message.h" #include "item.h" -#include "items.h" +#include "constants/items.h" #include "link.h" #include "m4a.h" #include "main.h" #include "menu_cursor.h" -#include "moves.h" +#include "constants/moves.h" #include "palette.h" #include "pokemon.h" #include "rom3.h" diff --git a/src/battle/battle_message.c b/src/battle/battle_message.c index eac92a78d..fb045c8a7 100644 --- a/src/battle/battle_message.c +++ b/src/battle/battle_message.c @@ -3,7 +3,8 @@ #include "battle_message.h" #include "battle_tower.h" #include "item.h" -#include "items.h" +#include "event_data.h" +#include "constants/items.h" #include "pokemon.h" #include "data2.h" #include "text.h" @@ -11,7 +12,7 @@ #include "link.h" #include "battle_setup.h" #include "battle_tower.h" -#include "flags.h" +#include "constants/flags.h" #include "ewram.h" #define BATTLESTRING_TO_SUB 12 diff --git a/src/battle/calculate_base_damage.c b/src/battle/calculate_base_damage.c index 5f935f2be..153e96078 100644 --- a/src/battle/calculate_base_damage.c +++ b/src/battle/calculate_base_damage.c @@ -6,10 +6,10 @@ #include "event_data.h" #include "hold_effects.h" #include "item.h" -#include "items.h" +#include "constants/items.h" #include "pokemon.h" #include "constants/species.h" -#include "moves.h" +#include "constants/moves.h" #include "battle_move_effects.h" #include "ewram.h" diff --git a/src/data/battle_strings_de.h b/src/data/battle_strings_de.h index 5289ce4e0..f78d0bf14 100755 --- a/src/data/battle_strings_de.h +++ b/src/data/battle_strings_de.h @@ -1,4 +1,4 @@ -#include "moves.h" +#include "constants/moves.h" enum { diff --git a/src/data/battle_strings_en.h b/src/data/battle_strings_en.h index 7f0481b50..26523d2e0 100755 --- a/src/data/battle_strings_en.h +++ b/src/data/battle_strings_en.h @@ -1,4 +1,4 @@ -#include "moves.h" +#include "constants/moves.h" enum { diff --git a/src/engine/record_mixing.c b/src/engine/record_mixing.c index 56e999651..2624837c7 100644 --- a/src/engine/record_mixing.c +++ b/src/engine/record_mixing.c @@ -7,7 +7,7 @@ #include "event_data.h" #include "fldeff_recordmixing.h" #include "item.h" -#include "items.h" +#include "constants/items.h" #include "load_save.h" #include "link.h" #include "mauville_man.h" diff --git a/src/engine/trade.c b/src/engine/trade.c index 1079e4749..dab1d3885 100644 --- a/src/engine/trade.c +++ b/src/engine/trade.c @@ -4,8 +4,8 @@ #include "text.h" #include "main.h" #include "constants/species.h" -#include "items.h" -#include "moves.h" +#include "constants/items.h" +#include "constants/moves.h" #include "constants/easy_chat.h" #include "link.h" #include "strings2.h" diff --git a/src/field/battle_tower.c b/src/field/battle_tower.c index 12a2f3f11..37ef10c24 100644 --- a/src/field/battle_tower.c +++ b/src/field/battle_tower.c @@ -8,10 +8,10 @@ #include "constants/easy_chat.h" #include "event_data.h" #include "item.h" -#include "items.h" +#include "constants/items.h" #include "main.h" #include "map_object_constants.h" -#include "moves.h" +#include "constants/moves.h" #include "new_game.h" #include "overworld.h" #include "pokedex.h" @@ -24,7 +24,7 @@ #include "text.h" #include "trainer.h" #include "tv.h" -#include "vars.h" +#include "constants/vars.h" #include "ewram.h" #if ENGLISH diff --git a/src/field/berry.c b/src/field/berry.c index 973bc56ff..874a60aa7 100644 --- a/src/field/berry.c +++ b/src/field/berry.c @@ -6,7 +6,7 @@ #include "item.h" #include "item_menu.h" #include "item_use.h" -#include "items.h" +#include "constants/items.h" #include "main.h" #include "random.h" #include "text.h" diff --git a/src/field/berry_tag_screen.c b/src/field/berry_tag_screen.c index 9fe720b36..694599680 100644 --- a/src/field/berry_tag_screen.c +++ b/src/field/berry_tag_screen.c @@ -4,7 +4,7 @@ #include "decompress.h" #include "field_map_obj.h" #include "item_menu.h" -#include "items.h" +#include "constants/items.h" #include "item_use.h" #include "main.h" #include "menu.h" diff --git a/src/field/bike.c b/src/field/bike.c index 75c99aaa1..8db01b4b4 100644 --- a/src/field/bike.c +++ b/src/field/bike.c @@ -3,7 +3,7 @@ #include "field_map_obj.h" #include "field_player_avatar.h" #include "fieldmap.h" -#include "flags.h" +#include "constants/flags.h" #include "global.fieldmap.h" #include "metatile_behavior.h" #include "overworld.h" diff --git a/src/field/braille_puzzles.c b/src/field/braille_puzzles.c index c5e12c839..f5bb28a73 100644 --- a/src/field/braille_puzzles.c +++ b/src/field/braille_puzzles.c @@ -4,7 +4,7 @@ #include "field_camera.h" #include "field_effect.h" #include "fieldmap.h" -#include "flags.h" +#include "constants/flags.h" #include "main.h" #include "map_constants.h" #include "map_obj_lock.h" diff --git a/src/field/daycare.c b/src/field/daycare.c index d3c86e812..9ac63b3c7 100644 --- a/src/field/daycare.c +++ b/src/field/daycare.c @@ -2,11 +2,11 @@ #include "daycare.h" #include "event_data.h" #include "field_effect.h" -#include "items.h" +#include "constants/items.h" #include "mail_data.h" #include "main.h" #include "menu.h" -#include "moves.h" +#include "constants/moves.h" #include "name_string_util.h" #include "overworld.h" #include "party_menu.h" diff --git a/src/field/field_control_avatar.c b/src/field/field_control_avatar.c index b7e7ec472..c4e53b13f 100644 --- a/src/field/field_control_avatar.c +++ b/src/field/field_control_avatar.c @@ -10,7 +10,7 @@ #include "field_poison.h" #include "field_specials.h" #include "fieldmap.h" -#include "flags.h" +#include "constants/flags.h" #include "item_menu.h" #include "metatile_behavior.h" #include "overworld.h" @@ -21,7 +21,7 @@ #include "sound.h" #include "start_menu.h" #include "trainer_see.h" -#include "vars.h" +#include "constants/vars.h" #include "wild_encounter.h" struct Coords32 diff --git a/src/field/field_specials.c b/src/field/field_specials.c index 279a7e3f6..f98c81041 100644 --- a/src/field/field_specials.c +++ b/src/field/field_specials.c @@ -20,7 +20,7 @@ #include "pokeblock.h" #include "constants/species.h" #include "constants/abilities.h" -#include "moves.h" +#include "constants/moves.h" #include "text.h" #include "wallclock.h" #include "tv.h" diff --git a/src/field/field_tasks.c b/src/field/field_tasks.c index 2da0f7303..108ba64ba 100644 --- a/src/field/field_tasks.c +++ b/src/field/field_tasks.c @@ -1,10 +1,10 @@ #include "global.h" #include "task.h" #include "main.h" -#include "vars.h" +#include "constants/vars.h" #include "bike.h" #include "item.h" -#include "items.h" +#include "constants/items.h" #include "event_data.h" #include "overworld.h" #include "clock.h" diff --git a/src/field/item.c b/src/field/item.c index fd49f5c39..cf7d8bd42 100644 --- a/src/field/item.c +++ b/src/field/item.c @@ -1,7 +1,7 @@ #include "global.h" #include "hold_effects.h" #include "item.h" -#include "items.h" +#include "constants/items.h" #include "item_use.h" #include "berry.h" #include "string_util.h" diff --git a/src/field/item_menu.c b/src/field/item_menu.c index 7d4b90bad..8f7cb3d90 100644 --- a/src/field/item_menu.c +++ b/src/field/item_menu.c @@ -8,7 +8,7 @@ #include "field_player_avatar.h" #include "graphics.h" #include "item.h" -#include "items.h" +#include "constants/items.h" #include "item_menu.h" #include "item_use.h" #include "link.h" diff --git a/src/field/item_use.c b/src/field/item_use.c index 764e78800..48b159c1c 100644 --- a/src/field/item_use.c +++ b/src/field/item_use.c @@ -14,7 +14,7 @@ #include "fieldmap.h" #include "item.h" #include "item_menu.h" -#include "items.h" +#include "constants/items.h" #include "mail.h" #include "main.h" #include "map_obj_lock.h" @@ -34,7 +34,7 @@ #include "string_util.h" #include "strings.h" #include "task.h" -#include "vars.h" +#include "constants/vars.h" extern void (*gFieldItemUseCallback)(u8); extern void (*gFieldCallback)(void); diff --git a/src/field/lottery_corner.c b/src/field/lottery_corner.c index b3bdeb494..2cfdb7f88 100644 --- a/src/field/lottery_corner.c +++ b/src/field/lottery_corner.c @@ -1,7 +1,7 @@ #include "global.h" #include "lottery_corner.h" #include "event_data.h" -#include "items.h" +#include "constants/items.h" #include "random.h" #include "constants/species.h" #include "string_util.h" diff --git a/src/field/menu_helpers.c b/src/field/menu_helpers.c index e49c023c6..4d5c6478c 100644 --- a/src/field/menu_helpers.c +++ b/src/field/menu_helpers.c @@ -1,6 +1,6 @@ #include "global.h" #include "item_menu.h" -#include "items.h" +#include "constants/items.h" #include "link.h" #include "mail_data.h" #include "main.h" diff --git a/src/field/party_menu.c b/src/field/party_menu.c index a023a42ad..11dd1dd90 100644 --- a/src/field/party_menu.c +++ b/src/field/party_menu.c @@ -11,12 +11,12 @@ #include "item.h" #include "item_use.h" #include "item_menu.h" -#include "items.h" +#include "constants/items.h" #include "mail_data.h" #include "main.h" #include "menu.h" #include "menu_helpers.h" -#include "moves.h" +#include "constants/moves.h" #include "palette.h" #include "pokemon.h" #include "pokemon_icon.h" diff --git a/src/field/player_pc.c b/src/field/player_pc.c index 2313d8c97..d92d13ce4 100644 --- a/src/field/player_pc.c +++ b/src/field/player_pc.c @@ -5,7 +5,7 @@ #include "field_weather.h" #include "item.h" #include "item_menu.h" -#include "items.h" +#include "constants/items.h" #include "main.h" #include "menu.h" #include "menu_helpers.h" diff --git a/src/field/pokeblock.c b/src/field/pokeblock.c index 56b197ca3..3b70e7d76 100644 --- a/src/field/pokeblock.c +++ b/src/field/pokeblock.c @@ -21,7 +21,7 @@ #include "item_menu.h" #include "item_use.h" #include "item.h" -#include "items.h" +#include "constants/items.h" #include "sound.h" #include "constants/songs.h" #include "safari_zone.h" diff --git a/src/field/secret_base.c b/src/field/secret_base.c index 3ada632dd..257fe4ee7 100644 --- a/src/field/secret_base.c +++ b/src/field/secret_base.c @@ -2,8 +2,8 @@ #include "secret_base.h" #include "decoration.h" #include "constants/species.h" -#include "items.h" -#include "moves.h" +#include "constants/items.h" +#include "constants/moves.h" #include "event_data.h" #include "field_camera.h" #include "field_effect.h" @@ -32,7 +32,7 @@ #include "strings.h" #include "task.h" #include "text.h" -#include "vars.h" +#include "constants/vars.h" static void sub_80BC7D8(u8 taskId); diff --git a/src/field/shop.c b/src/field/shop.c index cb97ea266..23d668fc7 100644 --- a/src/field/shop.c +++ b/src/field/shop.c @@ -21,7 +21,7 @@ #include "fieldmap.h" #include "item.h" #include "decoration.h" -#include "items.h" +#include "constants/items.h" #include "constants/songs.h" #include "overworld.h" #include "decoration_inventory.h" diff --git a/src/field/tv.c b/src/field/tv.c index 5c42fc7ec..2d345eb6c 100644 --- a/src/field/tv.c +++ b/src/field/tv.c @@ -8,7 +8,7 @@ #include "fieldmap.h" #include "field_message_box.h" #include "field_camera.h" -#include "flags.h" +#include "constants/flags.h" #include "random.h" #include "string_util.h" #include "text.h" @@ -24,7 +24,7 @@ #include "field_map_obj.h" #include "field_specials.h" #include "item.h" -#include "items.h" +#include "constants/items.h" #include "link.h" #include "map_constants.h" #include "naming_screen.h" @@ -39,7 +39,7 @@ #include "strings.h" #include "text.h" #include "ewram.h" -#include "moves.h" +#include "constants/moves.h" #include "region_map_sections.h" struct UnkTvStruct diff --git a/src/pokemon/mail.c b/src/pokemon/mail.c index 13129bf7f..b876c887d 100644 --- a/src/pokemon/mail.c +++ b/src/pokemon/mail.c @@ -1,7 +1,7 @@ #include "global.h" #include "mail.h" #include "easy_chat.h" -#include "items.h" +#include "constants/items.h" #include "mail_data.h" #include "menu.h" #include "menu_helpers.h" diff --git a/src/pokemon/mail_data.c b/src/pokemon/mail_data.c index fce796ab0..4249b9f48 100644 --- a/src/pokemon/mail_data.c +++ b/src/pokemon/mail_data.c @@ -1,6 +1,6 @@ #include "global.h" #include "mail_data.h" -#include "items.h" +#include "constants/items.h" #include "name_string_util.h" #include "pokemon.h" #include "pokemon_icon.h" diff --git a/src/pokemon/pokemon_1.c b/src/pokemon/pokemon_1.c index e0c28bdba..f4d227f7f 100644 --- a/src/pokemon/pokemon_1.c +++ b/src/pokemon/pokemon_1.c @@ -1,6 +1,6 @@ #include "global.h" #include "data2.h" -#include "items.h" +#include "constants/items.h" #include "main.h" #include "pokemon.h" #include "random.h" diff --git a/src/pokemon/pokemon_3.c b/src/pokemon/pokemon_3.c index a0e73b952..b824aee90 100644 --- a/src/pokemon/pokemon_3.c +++ b/src/pokemon/pokemon_3.c @@ -5,7 +5,7 @@ #include "event_data.h" #include "hold_effects.h" #include "item.h" -#include "items.h" +#include "constants/items.h" #include "link.h" #include "m4a.h" #include "main.h" diff --git a/src/pokemon/pokemon_data.c b/src/pokemon/pokemon_data.c index a00cea842..2688e090b 100644 --- a/src/pokemon/pokemon_data.c +++ b/src/pokemon/pokemon_data.c @@ -3,9 +3,9 @@ #include "constants/species.h" #include "trainer.h" #include "constants/abilities.h" -#include "moves.h" +#include "constants/moves.h" #include "hold_effects.h" -#include "items.h" +#include "constants/items.h" #include "sprite.h" #include "data2.h" diff --git a/src/pokemon/pokemon_menu.c b/src/pokemon/pokemon_menu.c index 9811a6f77..9803aa071 100644 --- a/src/pokemon/pokemon_menu.c +++ b/src/pokemon/pokemon_menu.c @@ -11,7 +11,7 @@ #include "overworld.h" #include "menu_helpers.h" #include "pokemon_summary_screen.h" -#include "moves.h" +#include "constants/moves.h" #include "data2.h" #include "strings.h" #include "item_use.h" diff --git a/src/pokenav_before.c b/src/pokenav_before.c index bf1956187..bab6648de 100644 --- a/src/pokenav_before.c +++ b/src/pokenav_before.c @@ -5,7 +5,8 @@ #include "battle.h" #include "data2.h" #include "de_rom_8040FE0.h" -#include "flags.h" +#include "event_data.h" +#include "constants/flags.h" #include "landmark.h" #include "link.h" #include "menu.h" diff --git a/src/rom3.c b/src/rom3.c index b150893d3..dd520a839 100644 --- a/src/rom3.c +++ b/src/rom3.c @@ -6,7 +6,7 @@ #include "battle_anim_81258BC.h" #include "battle_anim_8137220.h" #include "cable_club.h" -#include "items.h" +#include "constants/items.h" #include "link.h" #include "pokemon.h" #include "rom3.h" diff --git a/src/scene/berry_blender.c b/src/scene/berry_blender.c index 790549ca4..47ed314a8 100644 --- a/src/scene/berry_blender.c +++ b/src/scene/berry_blender.c @@ -14,7 +14,7 @@ #include "task.h" #include "overworld.h" #include "item.h" -#include "items.h" +#include "constants/items.h" #include "random.h" #include "save.h" #include "menu_cursor.h" diff --git a/src/scene/egg_hatch.c b/src/scene/egg_hatch.c index ef4f5ce78..c0111de7d 100644 --- a/src/scene/egg_hatch.c +++ b/src/scene/egg_hatch.c @@ -4,7 +4,7 @@ #include "decompress.h" #include "event_data.h" #include "ewram.h" -#include "items.h" +#include "constants/items.h" #include "main.h" #include "menu.h" #include "naming_screen.h" diff --git a/src/script_pokemon_util_80C4BF0.c b/src/script_pokemon_util_80C4BF0.c index 4a875d58c..9d1aaa125 100644 --- a/src/script_pokemon_util_80C4BF0.c +++ b/src/script_pokemon_util_80C4BF0.c @@ -10,7 +10,7 @@ #include "debug.h" #include "decompress.h" #include "event_data.h" -#include "items.h" +#include "constants/items.h" #include "link.h" #include "load_save.h" #include "main.h" -- cgit v1.2.3 From 1829f7e7195575e872eb378722a56b344e2a1cd7 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Sun, 26 Nov 2017 13:35:08 -0800 Subject: Cleanup pokemon_summary_screen --- src/battle/battle_4.c | 4 +- src/field/party_menu.c | 2 +- src/pokemon/learn_move.c | 4 +- src/pokemon/pokemon_summary_screen.c | 651 +++++++++++++++++------------------ src/scene/evolution_scene.c | 4 +- src/script_pokemon_util_80F99CC.c | 2 +- 6 files changed, 329 insertions(+), 338 deletions(-) (limited to 'src') diff --git a/src/battle/battle_4.c b/src/battle/battle_4.c index 088f30669..4483c252a 100644 --- a/src/battle/battle_4.c +++ b/src/battle/battle_4.c @@ -18,6 +18,7 @@ #include "sound.h" #include "task.h" #include "decompress.h" +#include "pokemon_summary_screen.h" #include "naming_screen.h" #include "ewram.h" @@ -139,7 +140,6 @@ u16 GetPokedexHeightWeight(u16 national_num, u8 heightweight); u8 sub_814A5C0(u8 a1, u16 a2, u8 a3, u16 a4, u8 a5); void DestroyMenuCursor(void); void sub_802BC6C(void); -void sub_809D9F0(struct Pokemon *party, u8, u8, void *, u32); u8 sub_809FA30(void); bool32 IsHMMove2(u16 move); void sub_802BBD4(u8 r0, u8 r1, u8 r2, u8 r3, u8 sp0); @@ -10833,7 +10833,7 @@ static void atk5A(void) case 2: if (!gPaletteFade.active) { - sub_809D9F0(gPlayerParty, BATTLE_STRUCT->expGetterID, gPlayerPartyCount - 1, ReshowBattleScreenAfterMenu, gMoveToLearn); + ShowSelectMovePokemonSummaryScreen(gPlayerParty, BATTLE_STRUCT->expGetterID, gPlayerPartyCount - 1, ReshowBattleScreenAfterMenu, gMoveToLearn); BATTLE_STRUCT->atk5A_StateTracker++; } break; diff --git a/src/field/party_menu.c b/src/field/party_menu.c index a8620570b..bee64fb27 100644 --- a/src/field/party_menu.c +++ b/src/field/party_menu.c @@ -4292,7 +4292,7 @@ void sub_806F3FC(u8 taskId) { if (!gPaletteFade.active) { - sub_809D9F0(gPlayerParty, ewram1C000.unk5, gPlayerPartyCount - 1, sub_808B564, ewram1C000.unk8); + ShowSelectMovePokemonSummaryScreen(gPlayerParty, ewram1C000.unk5, gPlayerPartyCount - 1, sub_808B564, ewram1C000.unk8); DestroyTask(taskId); } } diff --git a/src/pokemon/learn_move.c b/src/pokemon/learn_move.c index 2ba708a97..730717965 100644 --- a/src/pokemon/learn_move.c +++ b/src/pokemon/learn_move.c @@ -7,6 +7,7 @@ #include "learn_move.h" #include "palette.h" #include "pokemon.h" +#include "pokemon_summary_screen.h" #include "overworld.h" #include "script.h" #include "songs.h" @@ -36,7 +37,6 @@ extern const u8 *const gUnknown_083CAF70[]; extern const u8 deuOtherText_ForgotAndLearned[]; #endif -extern void sub_809D9F0(struct Pokemon *, u8, u8, void *, u32); struct LearnMoveStruct { @@ -543,7 +543,7 @@ void LearnMoveMain(void) case 20: if (!gPaletteFade.active) { - sub_809D9F0(gPlayerParty, sLearnMoveStruct->partyMon, gPlayerPartyCount - 1, sub_81327A4, sLearnMoveStruct->movesToLearn[sLearnMoveStruct->menuSelection]); + ShowSelectMovePokemonSummaryScreen(gPlayerParty, sLearnMoveStruct->partyMon, gPlayerPartyCount - 1, sub_81327A4, sLearnMoveStruct->movesToLearn[sLearnMoveStruct->menuSelection]); sLearnMoveStruct->state = 28; } break; diff --git a/src/pokemon/pokemon_summary_screen.c b/src/pokemon/pokemon_summary_screen.c index 1344f9f6e..c7bdab069 100644 --- a/src/pokemon/pokemon_summary_screen.c +++ b/src/pokemon/pokemon_summary_screen.c @@ -29,18 +29,14 @@ #include "tv.h" #include "unknown_task.h" -#define ewramSS (*(struct PokemonSummaryScreenStruct *)(gSharedMem + 0x18000)) - static void sub_809FC0C(void); static void sub_809FEB8(void); static void sub_809F63C(struct Pokemon *); static void sub_809F650(struct Pokemon *); static void sub_809F664(struct Pokemon *); -static void sub_809F664(struct Pokemon *); static void sub_809FE6C(struct Pokemon *); static void sub_80A0090(struct Pokemon *); static void sub_80A015C(struct Pokemon *); -static void sub_80A015C(struct Pokemon *); static void sub_809DE44(void); static void sub_809EB40(u8); static void sub_809EBC4(void); @@ -54,9 +50,8 @@ static void sub_80A1DCC(struct Pokemon *); static void sub_809FE80(void); static void sub_80A00A4(void); static void sub_80A0390(void); -extern void sub_80A015C(struct Pokemon *); extern u8 sub_80A1808(struct Pokemon *); -extern void sub_80A1F98(s32, u8, u8, u8, u8, u16, s32); +static void sub_80A1F98(s32, u8, u8, u8, u8, u16, s32); static void sub_80A0958(struct Pokemon *); static void PokemonSummaryScreen_PrintTrainerMemo(struct Pokemon *, u8, u8); static void PokemonSummaryScreen_PrintEggTrainerMemo(struct Pokemon *, u8, u8); @@ -67,9 +62,6 @@ static void PrintNumRibbons(struct Pokemon *); static void DrawExperienceProgressBar(struct Pokemon *, u8, u8); static void sub_809E13C(u8 taskId); static void sub_80A1950(void); -static void sub_809DA1C(void); -static void sub_809D844(void); -static void sub_809D85C(void); static void sub_809DE64(void); static void SummaryScreenHandleAButton(u8); static void SummaryScreenHandleUpDownInput(u8, s8); @@ -78,7 +70,6 @@ static void sub_809F9D0(u8, u8); static void sub_809EAC8(u8); static void sub_809E534(u8); static void sub_809E83C(u8, s8); -static void sub_809E5C4(void); static void sub_80A1B40(u8); static void sub_80A2078(int); static void sub_809E3FC(u8); @@ -603,92 +594,92 @@ void ShowPokemonSummaryScreen(struct Pokemon *party, u8 monIndex, u8 maxMonIndex { gPaletteFade.bufferTransferDisabled = 1; - ewramSS.monList.partyMons = party; - ewramSS.mode = mode; - ewramSS.monIndex = monIndex; - ewramSS.maxMonIndex = maxMonIndex; - ewramSS.callback = callback; - ewramSS.loadGfxState = 0; - ewramSS.selectedMoveIndex = 4; - ewramSS.moveToLearn = 0; - ewramSS.bgToggle = 0; - ewramSS.disableMoveOrderEditing = FALSE; + pssData.monList.partyMons = party; + pssData.mode = mode; + pssData.monIndex = monIndex; + pssData.maxMonIndex = maxMonIndex; + pssData.callback = callback; + pssData.loadGfxState = 0; + pssData.selectedMoveIndex = 4; + pssData.moveToLearn = 0; + pssData.bgToggle = 0; + pssData.disableMoveOrderEditing = FALSE; if (mode >= PSS_MODE_PC_NORMAL) { - ewramSS.usingPC = TRUE; + pssData.usingPC = TRUE; } else { - ewramSS.usingPC = FALSE; + pssData.usingPC = FALSE; } switch (mode) { case PSS_MODE_NORMAL: case PSS_MODE_PC_NORMAL: - ewramSS.firstPage = PSS_PAGE_INFO; - ewramSS.lastPage = PSS_PAGE_CONTEST_MOVES; - ewramSS.unk77 = 0; - ewramSS.unk78 = 0; - ewramSS.headerTextId = 1; - ewramSS.headerActionTextId = 7; + pssData.firstPage = PSS_PAGE_INFO; + pssData.lastPage = PSS_PAGE_CONTEST_MOVES; + pssData.unk77 = 0; + pssData.unk78 = 0; + pssData.headerTextId = 1; + pssData.headerActionTextId = 7; break; case PSS_MODE_NO_MOVE_ORDER_EDIT: - ewramSS.firstPage = PSS_PAGE_INFO; - ewramSS.lastPage = PSS_PAGE_CONTEST_MOVES; - ewramSS.unk77 = 0; - ewramSS.unk78 = 0; - ewramSS.headerTextId = 1; - ewramSS.headerActionTextId = 7; - ewramSS.disableMoveOrderEditing = TRUE; + pssData.firstPage = PSS_PAGE_INFO; + pssData.lastPage = PSS_PAGE_CONTEST_MOVES; + pssData.unk77 = 0; + pssData.unk78 = 0; + pssData.headerTextId = 1; + pssData.headerActionTextId = 7; + pssData.disableMoveOrderEditing = TRUE; break; case PSS_MODE_SELECT_MOVE: - ewramSS.firstPage = PSS_PAGE_BATTLE_MOVES; - ewramSS.lastPage = PSS_PAGE_CONTEST_MOVES; - ewramSS.unk77 = 1; - ewramSS.unk78 = 1; - ewramSS.headerTextId = 3; - ewramSS.headerActionTextId = 0; - ewramSS.selectedMoveIndex = 0; + pssData.firstPage = PSS_PAGE_BATTLE_MOVES; + pssData.lastPage = PSS_PAGE_CONTEST_MOVES; + pssData.unk77 = 1; + pssData.unk78 = 1; + pssData.headerTextId = 3; + pssData.headerActionTextId = 0; + pssData.selectedMoveIndex = 0; break; case PSS_MODE_MOVES_ONLY: case PSS_MODE_PC_MOVES_ONLY: - ewramSS.firstPage = PSS_PAGE_BATTLE_MOVES; - ewramSS.lastPage = PSS_PAGE_CONTEST_MOVES; - ewramSS.unk77 = 1; - ewramSS.unk78 = 1; + pssData.firstPage = PSS_PAGE_BATTLE_MOVES; + pssData.lastPage = PSS_PAGE_CONTEST_MOVES; + pssData.unk77 = 1; + pssData.unk78 = 1; break; } - ewramSS.page = ewramSS.firstPage; + pssData.page = pssData.firstPage; SetMainCallback2(sub_809DE44); } -void sub_809D9F0(struct Pokemon *party, u8 monIndex, u8 maxMonIndex, MainCallback callback, u16 move) +void ShowSelectMovePokemonSummaryScreen(struct Pokemon *party, u8 monIndex, u8 maxMonIndex, MainCallback callback, u16 move) { ShowPokemonSummaryScreen(party, monIndex, maxMonIndex, callback, PSS_MODE_SELECT_MOVE); - ewramSS.moveToLearn = move; + pssData.moveToLearn = move; } void sub_809DA1C(void) { - switch (ewramSS.mode) + switch (pssData.mode) { case PSS_MODE_NORMAL: case PSS_MODE_PC_NORMAL: - ewramSS.inputHandlingTaskId = CreateTask(SummaryScreenHandleKeyInput, 0); + pssData.inputHandlingTaskId = CreateTask(SummaryScreenHandleKeyInput, 0); break; case PSS_MODE_NO_MOVE_ORDER_EDIT: - ewramSS.inputHandlingTaskId = CreateTask(SummaryScreenHandleKeyInput, 0); + pssData.inputHandlingTaskId = CreateTask(SummaryScreenHandleKeyInput, 0); break; case PSS_MODE_SELECT_MOVE: case PSS_MODE_UNKNOWN: - ewramSS.inputHandlingTaskId = CreateTask(sub_809EB40, 0); + pssData.inputHandlingTaskId = CreateTask(sub_809EB40, 0); break; case PSS_MODE_MOVES_ONLY: case PSS_MODE_PC_MOVES_ONLY: - ewramSS.inputHandlingTaskId = CreateTask(sub_809E3FC, 0); + pssData.inputHandlingTaskId = CreateTask(sub_809E3FC, 0); break; } } @@ -749,13 +740,13 @@ bool8 sub_809DA84(void) dest = (void *)VRAM + 0xD140; DmaCopy16(3, src, dest, 256); - ewramSS.loadGfxState = 0; + pssData.loadGfxState = 0; gMain.state++; break; case 10: if (LoadPokemonSummaryScreenGraphics()) { - ewramSS.loadGfxState = 0; + pssData.loadGfxState = 0; gMain.state++; } break; @@ -764,8 +755,8 @@ bool8 sub_809DA84(void) gMain.state++; break; case 12: - sub_809F678(&ewramSS.loadedMon); - if (!GetMonStatusAndPokerus(&ewramSS.loadedMon)) + sub_809F678(&pssData.loadedMon); + if (!GetMonStatusAndPokerus(&pssData.loadedMon)) { sub_80A12D0(0); } @@ -774,23 +765,23 @@ bool8 sub_809DA84(void) sub_80A12D0(10); } - DrawPokerusSurvivorDot(&ewramSS.loadedMon); + DrawPokerusSurvivorDot(&pssData.loadedMon); gMain.state++; break; case 13: sub_80A1950(); - sub_80A1D84(&ewramSS.loadedMon); + sub_80A1D84(&pssData.loadedMon); gMain.state++; break; case 14: - sub_80A1DE8(&ewramSS.loadedMon); - ewramSS.loadGfxState = 0; + sub_80A1DE8(&pssData.loadedMon); + pssData.loadGfxState = 0; gMain.state++; break; case 15: - if ((ewramSS.monSpriteId = sub_809F6B4(&ewramSS.loadedMon, &ewramSS.loadGfxState)) != 0xFF) + if ((pssData.monSpriteId = sub_809F6B4(&pssData.loadedMon, &pssData.loadGfxState)) != 0xFF) { - ewramSS.loadGfxState = 0; + pssData.loadGfxState = 0; gMain.state++; } break; @@ -800,23 +791,23 @@ bool8 sub_809DA84(void) gMain.state++; break; case 17: - if (ewramSS.page <= PSS_PAGE_SKILLS) + if (pssData.page <= PSS_PAGE_SKILLS) { - sUnknown_083C1580[ewramSS.page](); + sUnknown_083C1580[pssData.page](); } gMain.state++; break; case 18: - sub_809FAC8(&ewramSS.loadedMon); + sub_809FAC8(&pssData.loadedMon); gMain.state++; break; case 19: - sUnknown_083C1598[ewramSS.page](&ewramSS.loadedMon); + sUnknown_083C1598[pssData.page](&pssData.loadedMon); gMain.state++; break; case 20: - if (GetMonData(&ewramSS.loadedMon, MON_DATA_IS_EGG)) + if (GetMonData(&pssData.loadedMon, MON_DATA_IS_EGG)) { gUnknown_030041B0 = 256; } @@ -829,7 +820,7 @@ bool8 sub_809DA84(void) break; case 21: sub_809EBC4(); - if (ewramSS.selectedMoveIndex != 0) + if (pssData.selectedMoveIndex != 0) { sub_80A1488(0, 0); sub_80A1654(0, 0); @@ -861,12 +852,12 @@ bool8 sub_809DA84(void) return FALSE; } -void sub_809DE44(void) +static void sub_809DE44(void) { while (sub_809DA84() != TRUE && sub_80F9344() != TRUE); } -void sub_809DE64(void) +static void sub_809DE64(void) { REG_BG0CNT = 0x1E08; REG_BG1CNT = 0x4801; @@ -893,9 +884,9 @@ void sub_809DE64(void) REG_DISPCNT = 0x1F40; } -bool8 LoadPokemonSummaryScreenGraphics(void) +static bool8 LoadPokemonSummaryScreenGraphics(void) { - switch (ewramSS.loadGfxState) + switch (pssData.loadGfxState) { case 0: LZDecompressVram(gStatusScreen_Gfx, (void *)VRAM + 0); @@ -935,15 +926,15 @@ bool8 LoadPokemonSummaryScreenGraphics(void) break; case 12: LoadCompressedPalette(gMoveTypes_Pal, 464, 96); - ewramSS.loadGfxState = 0; + pssData.loadGfxState = 0; return TRUE; } - ewramSS.loadGfxState++; + pssData.loadGfxState++; return FALSE; } -void sub_809E044(void) +static void sub_809E044(void) { LoadPalette(&gUnknownPalette_81E6692[28], 129, 2); LoadPalette(&gUnknownPalette_81E6692[30], 136, 2); @@ -962,29 +953,29 @@ void sub_809E044(void) LoadPalette(&gUnknownPalette_81E6692[6], 249, 2); } -void SummaryScreenExit(u8 taskId) +static void SummaryScreenExit(u8 taskId) { PlaySE(5); BeginNormalPaletteFade(-1, 0, 0, 16, 0); gTasks[taskId].func = sub_809E13C; } -void sub_809E13C(u8 taskId) +static void sub_809E13C(u8 taskId) { if (sub_8055870() != TRUE && !gPaletteFade.active) { - gUnknown_020384F0 = ewramSS.monIndex; + gUnknown_020384F0 = pssData.monIndex; ResetSpriteData(); FreeAllSpritePalettes(); StopCryAndClearCrySongs(); m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 0x100); - SetMainCallback2(ewramSS.callback); + SetMainCallback2(pssData.callback); DestroyTask(taskId); } } -void SummaryScreenHandleKeyInput(u8 taskId) +static void SummaryScreenHandleKeyInput(u8 taskId) { if (gPaletteFade.active) return; @@ -1007,12 +998,12 @@ void SummaryScreenHandleKeyInput(u8 taskId) } else if (gMain.newKeys & A_BUTTON) { - if (ewramSS.page >= PSS_PAGE_BATTLE_MOVES) + if (pssData.page >= PSS_PAGE_BATTLE_MOVES) { SummaryScreenHandleAButton(taskId); } - if (ewramSS.page == PSS_PAGE_INFO) + if (pssData.page == PSS_PAGE_INFO) { SummaryScreenExit(taskId); } @@ -1023,7 +1014,7 @@ void SummaryScreenHandleKeyInput(u8 taskId) } } -void sub_809E260(u8 taskId) +static void sub_809E260(u8 taskId) { if (gPaletteFade.active) return; @@ -1031,16 +1022,16 @@ void sub_809E260(u8 taskId) if (gMain.newKeys & DPAD_UP) { gTasks[taskId].data[0] = 4; - sub_809E8F0(taskId, -1, &ewramSS.selectedMoveIndex); + sub_809E8F0(taskId, -1, &pssData.selectedMoveIndex); } else if (gMain.newKeys & DPAD_DOWN) { gTasks[taskId].data[0] = 4; - sub_809E8F0(taskId, 1, &ewramSS.selectedMoveIndex); + sub_809E8F0(taskId, 1, &pssData.selectedMoveIndex); } else if ((gMain.newKeys & DPAD_LEFT) || sub_80F9284() == 1) { - if (ewramSS.page == PSS_PAGE_CONTEST_MOVES && (ewramSS.selectedMoveIndex != 4 || ewramSS.moveToLearn != 0)) + if (pssData.page == PSS_PAGE_CONTEST_MOVES && (pssData.selectedMoveIndex != 4 || pssData.moveToLearn != 0)) { MenuZeroFillWindowRect(0, 14, 9, 18); } @@ -1049,9 +1040,9 @@ void sub_809E260(u8 taskId) } else if ((gMain.newKeys & DPAD_RIGHT) || sub_80F9284() == 2) { - if (ewramSS.page != ewramSS.lastPage) + if (pssData.page != pssData.lastPage) { - if (ewramSS.page == PSS_PAGE_BATTLE_MOVES && (ewramSS.selectedMoveIndex != 4 || ewramSS.moveToLearn != 0)) + if (pssData.page == PSS_PAGE_BATTLE_MOVES && (pssData.selectedMoveIndex != 4 || pssData.moveToLearn != 0)) { MenuZeroFillWindowRect(0, 14, 9, 18); } @@ -1061,27 +1052,27 @@ void sub_809E260(u8 taskId) } else if (gMain.newKeys & A_BUTTON) { - if (sub_809F7D0(taskId) == TRUE || ewramSS.selectedMoveIndex == 4) + if (sub_809F7D0(taskId) == TRUE || pssData.selectedMoveIndex == 4) { - ewramSS.switchMoveIndex = ewramSS.selectedMoveIndex; - gSpecialVar_0x8005 = ewramSS.switchMoveIndex; + pssData.switchMoveIndex = pssData.selectedMoveIndex; + gSpecialVar_0x8005 = pssData.switchMoveIndex; SummaryScreenExit(taskId); } else { PlaySE(32); - sub_809F9D0(taskId, ewramSS.selectedMoveIndex); + sub_809F9D0(taskId, pssData.selectedMoveIndex); } } else if (gMain.newKeys & B_BUTTON) { - ewramSS.switchMoveIndex = 4; + pssData.switchMoveIndex = 4; gSpecialVar_0x8005 = 4; SummaryScreenExit(taskId); } } -void sub_809E3FC(u8 taskId) +static void sub_809E3FC(u8 taskId) { if (gPaletteFade.active) return; @@ -1089,18 +1080,18 @@ void sub_809E3FC(u8 taskId) if (gMain.newKeys & DPAD_UP) { gTasks[taskId].data[0] = 4; - sub_809E8F0(taskId, -1, &ewramSS.selectedMoveIndex); + sub_809E8F0(taskId, -1, &pssData.selectedMoveIndex); } else if (gMain.newKeys & DPAD_DOWN) { gTasks[taskId].data[0] = 4; - sub_809E8F0(taskId, 1, &ewramSS.selectedMoveIndex); + sub_809E8F0(taskId, 1, &pssData.selectedMoveIndex); } else if (gMain.newKeys & A_BUTTON) { - if (ewramSS.selectedMoveIndex != 4 && !ewramSS.disableMoveOrderEditing) + if (pssData.selectedMoveIndex != 4 && !pssData.disableMoveOrderEditing) { - if (!MonKnowsMultipleMoves(&ewramSS.loadedMon)) + if (!MonKnowsMultipleMoves(&pssData.loadedMon)) { PlaySE(32); } @@ -1108,7 +1099,7 @@ void sub_809E3FC(u8 taskId) { PlaySE(5); - ewramSS.switchMoveIndex = ewramSS.selectedMoveIndex; + pssData.switchMoveIndex = pssData.selectedMoveIndex; sub_80A1B40(1); sub_80A1A30(19); @@ -1129,7 +1120,7 @@ void sub_809E3FC(u8 taskId) } -bool8 MonKnowsMultipleMoves(struct Pokemon *mon) +static bool8 MonKnowsMultipleMoves(struct Pokemon *mon) { u8 i; @@ -1144,17 +1135,17 @@ bool8 MonKnowsMultipleMoves(struct Pokemon *mon) return FALSE; } -void sub_809E534(u8 taskId) +static void sub_809E534(u8 taskId) { if (gMain.newKeys & DPAD_UP) { gTasks[taskId].data[0] = 3; - sub_809E8F0(taskId, -1, &ewramSS.switchMoveIndex); + sub_809E8F0(taskId, -1, &pssData.switchMoveIndex); } else if (gMain.newKeys & DPAD_DOWN) { gTasks[taskId].data[0] = 3; - sub_809E8F0(taskId, 1, &ewramSS.switchMoveIndex); + sub_809E8F0(taskId, 1, &pssData.switchMoveIndex); } else if (gMain.newKeys & A_BUTTON) { @@ -1167,7 +1158,7 @@ void sub_809E534(u8 taskId) } __attribute__((naked)) -void sub_809E5C4(void) +static void sub_809E5C4(void) { asm(".syntax unified\n\ push {r4-r7,lr}\n\ @@ -1439,14 +1430,14 @@ void sub_809E7F0(u8 taskId) { if (sub_809F5F8()) { - ewramSS.loadGfxState = 0; - sub_80A0428(&ewramSS.loadedMon, &ewramSS.selectedMoveIndex); + pssData.loadGfxState = 0; + sub_80A0428(&pssData.loadedMon, &pssData.selectedMoveIndex); gTasks[taskId].func = sub_809E3FC; sub_80A2078(taskId); } } -void sub_809E83C(u8 taskId, s8 b) +static void sub_809E83C(u8 taskId, s8 b) { PlaySE(5); @@ -1455,9 +1446,9 @@ void sub_809E83C(u8 taskId, s8 b) if (b == 1) { - if (ewramSS.selectedMoveIndex != ewramSS.switchMoveIndex) + if (pssData.selectedMoveIndex != pssData.switchMoveIndex) { - if (ewramSS.usingPC == FALSE) + if (pssData.usingPC == FALSE) { sub_809E5C4(); } @@ -1466,9 +1457,9 @@ void sub_809E83C(u8 taskId, s8 b) sub_809E6D8(); } - ewramSS.selectedMoveIndex = ewramSS.switchMoveIndex; - sub_809F678(&ewramSS.loadedMon); - ewramSS.loadGfxState = 1; + pssData.selectedMoveIndex = pssData.switchMoveIndex; + sub_809F678(&pssData.loadedMon); + pssData.loadGfxState = 1; gTasks[taskId].func = sub_809E7F0; return; @@ -1476,7 +1467,7 @@ void sub_809E83C(u8 taskId, s8 b) } else { - sub_80A0428(&ewramSS.loadedMon, &ewramSS.selectedMoveIndex); + sub_80A0428(&pssData.loadedMon, &pssData.selectedMoveIndex); } gTasks[taskId].func = sub_809E3FC; @@ -1484,7 +1475,7 @@ void sub_809E83C(u8 taskId, s8 b) } __attribute__((naked)) -void sub_809E8F0(/*u8 taskId, s8 direction, u8 *c*/) +static void sub_809E8F0(/*u8 taskId, s8 direction, u8 *c*/) { asm(".syntax unified\n\ push {r4-r7,lr}\n\ @@ -1663,31 +1654,31 @@ _0809EA4C: .4byte gSharedMem + 0x18010\n\ .syntax divided\n"); } -void SummaryScreenHandleAButton(u8 taskId) +static void SummaryScreenHandleAButton(u8 taskId) { PlaySE(5); - ewramSS.selectedMoveIndex = 0; + pssData.selectedMoveIndex = 0; sub_80A1488(2, 0); sub_80A1654(2, 0); - if (!ewramSS.disableMoveOrderEditing) + if (!pssData.disableMoveOrderEditing) { - ewramSS.headerActionTextId = 5; + pssData.headerActionTextId = 5; PrintSummaryWindowHeaderText(); } sub_80A16CC(0); - sub_80A029C(&ewramSS.loadedMon); + sub_80A029C(&pssData.loadedMon); sub_80A1A30(9); gTasks[taskId].func = sub_809E3FC; sub_80A2078(taskId); } -void sub_809EAC8(u8 taskId) +static void sub_809EAC8(u8 taskId) { - if (ewramSS.selectedMoveIndex != 4) + if (pssData.selectedMoveIndex != 4) { sub_80A1488(-2, 0); sub_80A1654(-2, 0); @@ -1699,13 +1690,13 @@ void sub_809EAC8(u8 taskId) MenuZeroFillWindowRect(15, 12, 28, 13); MenuZeroFillWindowRect(11, 15, 28, 18); - ewramSS.headerActionTextId = 6; + pssData.headerActionTextId = 6; PrintSummaryWindowHeaderText(); gTasks[taskId].func = SummaryScreenHandleKeyInput; } -void sub_809EB40(u8 taskId) +static void sub_809EB40(u8 taskId) { switch (gTasks[taskId].data[0]) { @@ -1715,15 +1706,15 @@ void sub_809EB40(u8 taskId) gTasks[taskId].func = sub_809E260; break; case 0: - ewramSS.selectedMoveIndex = 0; - if (ewramSS.moveToLearn != 0) + pssData.selectedMoveIndex = 0; + if (pssData.moveToLearn != 0) { sub_80A1488(10, 0); - sub_80A1654(10, ewramSS.selectedMoveIndex); + sub_80A1654(10, pssData.selectedMoveIndex); } sub_80A16CC(0); - sub_80A029C(&ewramSS.loadedMon); + sub_80A029C(&pssData.loadedMon); // fall through default: gTasks[taskId].data[0]++; @@ -1731,20 +1722,20 @@ void sub_809EB40(u8 taskId) } } -void sub_809EBC4(void) +static void sub_809EBC4(void) { - if (ewramSS.page != PSS_PAGE_INFO) + if (pssData.page != PSS_PAGE_INFO) { DrawSummaryScreenNavigationDots(); gUnknown_030042C0 = 0x100; - if (ewramSS.page == PSS_PAGE_SKILLS) + if (pssData.page == PSS_PAGE_SKILLS) REG_BG1CNT = (REG_BG1CNT & 0xE0FF) + 0x800; - if (ewramSS.page == PSS_PAGE_BATTLE_MOVES) + if (pssData.page == PSS_PAGE_BATTLE_MOVES) REG_BG1CNT = (REG_BG1CNT & 0xE0FF) + 0xA00; - if (ewramSS.page == PSS_PAGE_CONTEST_MOVES) + if (pssData.page == PSS_PAGE_CONTEST_MOVES) REG_BG1CNT = (REG_BG1CNT & 0xE0FF) + 0xC00; } } @@ -1757,36 +1748,36 @@ void sub_809EC38(u8 taskId) switch (taskData[0]) { case 0: - if (ewramSS.bgToggle == 0) + if (pssData.bgToggle == 0) { - if (ewramSS.page != PSS_PAGE_INFO) + if (pssData.page != PSS_PAGE_INFO) { gUnknown_03004288 = 0x100; } - if (ewramSS.page == PSS_PAGE_SKILLS) + if (pssData.page == PSS_PAGE_SKILLS) { REG_BG2CNT = (REG_BG2CNT & 0xE0FF) + 0x800; } - if (ewramSS.page == PSS_PAGE_BATTLE_MOVES) + if (pssData.page == PSS_PAGE_BATTLE_MOVES) { REG_BG2CNT = (REG_BG2CNT & 0xE0FF) + 0xA00; } } else { - if (ewramSS.page != PSS_PAGE_INFO) + if (pssData.page != PSS_PAGE_INFO) { gUnknown_030042C0 = 0x100; } - if (ewramSS.page == PSS_PAGE_SKILLS) + if (pssData.page == PSS_PAGE_SKILLS) { REG_BG1CNT = (REG_BG1CNT & 0xE0FF) + 0x800; } - if (ewramSS.page == PSS_PAGE_BATTLE_MOVES) + if (pssData.page == PSS_PAGE_BATTLE_MOVES) { REG_BG1CNT = (REG_BG1CNT & 0xE0FF) + 0xA00; } @@ -1795,7 +1786,7 @@ void sub_809EC38(u8 taskId) taskData[0]++; break; case 1: - if (ewramSS.bgToggle == 0) + if (pssData.bgToggle == 0) { int var2 = gUnknown_030042C0 - 0x20; gUnknown_030042C0 = var2; @@ -1819,28 +1810,28 @@ void sub_809EC38(u8 taskId) } break; case 2: - ewramSS.headerTextId = ewramSS.page + 1; - minus2 = ewramSS.mode - 2; + pssData.headerTextId = pssData.page + 1; + minus2 = pssData.mode - 2; if (minus2 < 2) { - ewramSS.headerActionTextId = 0; - sub_80A029C(&ewramSS.loadedMon); - sub_80A0428(&ewramSS.loadedMon, &ewramSS.selectedMoveIndex); - sub_80A00F4(ewramSS.selectedMoveIndex); + pssData.headerActionTextId = 0; + sub_80A029C(&pssData.loadedMon); + sub_80A0428(&pssData.loadedMon, &pssData.selectedMoveIndex); + sub_80A00F4(pssData.selectedMoveIndex); } else { - if (ewramSS.page >= PSS_PAGE_BATTLE_MOVES && (!ewramSS.disableMoveOrderEditing || ewramSS.mode == PSS_MODE_NO_MOVE_ORDER_EDIT)) + if (pssData.page >= PSS_PAGE_BATTLE_MOVES && (!pssData.disableMoveOrderEditing || pssData.mode == PSS_MODE_NO_MOVE_ORDER_EDIT)) { - ewramSS.headerActionTextId = 6; + pssData.headerActionTextId = 6; } - else if (ewramSS.page == PSS_PAGE_INFO) + else if (pssData.page == PSS_PAGE_INFO) { - ewramSS.headerActionTextId = 7; + pssData.headerActionTextId = 7; } else { - ewramSS.headerActionTextId = 0; + pssData.headerActionTextId = 0; } } @@ -1852,8 +1843,8 @@ void sub_809EC38(u8 taskId) taskData[0]++; break; case 4: - sUnknown_083C1598[ewramSS.page](&ewramSS.loadedMon); - ewramSS.bgToggle ^= 1; + sUnknown_083C1598[pssData.page](&pssData.loadedMon); + pssData.bgToggle ^= 1; taskData[0]++; break; case 5: @@ -1874,10 +1865,10 @@ void sub_809EE74(u8 taskId) switch (taskData[0]) { case 0: - var1 = ewramSS.bgToggle; + var1 = pssData.bgToggle; if (var1 == 0) { - gUnknown_03004288 = ewramSS.bgToggle; + gUnknown_03004288 = pssData.bgToggle; taskData[0]++; } else @@ -1887,28 +1878,28 @@ void sub_809EE74(u8 taskId) } break; case 1: - if (ewramSS.bgToggle == 0) + if (pssData.bgToggle == 0) { - if (ewramSS.page == PSS_PAGE_SKILLS) + if (pssData.page == PSS_PAGE_SKILLS) REG_BG2CNT = (REG_BG2CNT & 0xE0FC) + 0x801; - if (ewramSS.page == PSS_PAGE_BATTLE_MOVES) + if (pssData.page == PSS_PAGE_BATTLE_MOVES) REG_BG2CNT = (REG_BG2CNT & 0xE0FC) + 0xA01; - if (ewramSS.page == PSS_PAGE_CONTEST_MOVES) + if (pssData.page == PSS_PAGE_CONTEST_MOVES) REG_BG2CNT = (REG_BG2CNT & 0xE0FC) + 0xC01; REG_BG1CNT = (REG_BG1CNT & 0xFFFC) + 2; } else { - if (ewramSS.page == PSS_PAGE_SKILLS) + if (pssData.page == PSS_PAGE_SKILLS) REG_BG1CNT = (REG_BG1CNT & 0xE0FC) + 0x801; - if (ewramSS.page == PSS_PAGE_BATTLE_MOVES) + if (pssData.page == PSS_PAGE_BATTLE_MOVES) REG_BG1CNT = (REG_BG1CNT & 0xE0FC) + 0xA01; - if (ewramSS.page == PSS_PAGE_CONTEST_MOVES) + if (pssData.page == PSS_PAGE_CONTEST_MOVES) REG_BG1CNT = (REG_BG1CNT & 0xE0FC) + 0xC01; REG_BG2CNT = (REG_BG2CNT & 0xFFFC) + 2; @@ -1917,7 +1908,7 @@ void sub_809EE74(u8 taskId) taskData[0]++; break; case 2: - if (ewramSS.bgToggle == 0) + if (pssData.bgToggle == 0) { int var2 = gUnknown_03004288 + 0x20; gUnknown_03004288 = var2; @@ -1937,28 +1928,28 @@ void sub_809EE74(u8 taskId) } break; case 3: - ewramSS.headerTextId = ewramSS.page + 1; - minus2 = ewramSS.mode - 2; + pssData.headerTextId = pssData.page + 1; + minus2 = pssData.mode - 2; if (minus2 < 2) { - ewramSS.headerActionTextId = 0; - sub_80A029C(&ewramSS.loadedMon); - sub_80A0428(&ewramSS.loadedMon, &ewramSS.selectedMoveIndex); - sub_80A00F4(ewramSS.selectedMoveIndex); + pssData.headerActionTextId = 0; + sub_80A029C(&pssData.loadedMon); + sub_80A0428(&pssData.loadedMon, &pssData.selectedMoveIndex); + sub_80A00F4(pssData.selectedMoveIndex); } else { - if (ewramSS.page >= PSS_PAGE_BATTLE_MOVES && (!ewramSS.disableMoveOrderEditing || ewramSS.mode == PSS_MODE_NO_MOVE_ORDER_EDIT)) + if (pssData.page >= PSS_PAGE_BATTLE_MOVES && (!pssData.disableMoveOrderEditing || pssData.mode == PSS_MODE_NO_MOVE_ORDER_EDIT)) { - ewramSS.headerActionTextId = 6; + pssData.headerActionTextId = 6; } - else if (ewramSS.page == PSS_PAGE_INFO) + else if (pssData.page == PSS_PAGE_INFO) { - ewramSS.headerActionTextId = 7; + pssData.headerActionTextId = 7; } else { - ewramSS.headerActionTextId = 0; + pssData.headerActionTextId = 0; } } @@ -1970,8 +1961,8 @@ void sub_809EE74(u8 taskId) taskData[0]++; break; case 5: - sUnknown_083C1598[ewramSS.page](&ewramSS.loadedMon); - ewramSS.bgToggle ^= 1; + sUnknown_083C1598[pssData.page](&pssData.loadedMon); + pssData.bgToggle ^= 1; taskData[0]++; break; case 6: @@ -1985,7 +1976,7 @@ void sub_809EE74(u8 taskId) void sub_809F0D0(u8 taskId, s8 direction) { - ewramSS.page += direction; + pssData.page += direction; gUnknown_03005CF0 = gTasks[taskId].func; sub_809FBE4(); gTasks[taskId].data[0] = 0; @@ -2001,12 +1992,12 @@ void sub_809F0D0(u8 taskId, s8 direction) } } -void SummaryScreenHandleLeftRightInput(u8 taskId, s8 direction) +static void SummaryScreenHandleLeftRightInput(u8 taskId, s8 direction) { - if (!GetMonData(&ewramSS.loadedMon, MON_DATA_IS_EGG)) + if (!GetMonData(&pssData.loadedMon, MON_DATA_IS_EGG)) { - if (direction == -1 && ewramSS.page == ewramSS.firstPage) return; - if (direction == 1 && ewramSS.page == ewramSS.lastPage) return; + if (direction == -1 && pssData.page == pssData.firstPage) return; + if (direction == 1 && pssData.page == pssData.lastPage) return; if (FindTaskIdByFunc(sub_80A1334) == 0xFF && FindTaskIdByFunc(sub_80A1500) == 0xFF) { @@ -2017,14 +2008,14 @@ void SummaryScreenHandleLeftRightInput(u8 taskId, s8 direction) } #ifdef NONMATCHING -void SummaryScreenHandleUpDownInput(u8 taskId, s8 direction) +static void SummaryScreenHandleUpDownInput(u8 taskId, s8 direction) { s8 var3; u8 var1 = direction; - if (ewramSS.usingPC == TRUE) + if (pssData.usingPC == TRUE) { - if (ewramSS.page != PSS_PAGE_INFO) + if (pssData.page != PSS_PAGE_INFO) { var1 = (direction == 1) ? 0 : 1; } @@ -2033,7 +2024,7 @@ void SummaryScreenHandleUpDownInput(u8 taskId, s8 direction) var1 = (direction == 1) ? 2 : 3; } - var3 = StorageSystemGetNextMonIndex(ewramSS.monList.boxMons, ewramSS.monIndex, ewramSS.maxMonIndex, var1); + var3 = StorageSystemGetNextMonIndex(pssData.monList.boxMons, pssData.monIndex, pssData.maxMonIndex, var1); } else { @@ -2050,19 +2041,19 @@ void SummaryScreenHandleUpDownInput(u8 taskId, s8 direction) if (var3 != -1) { PlaySE(5); - if (GetMonStatusAndPokerus(&ewramSS.loadedMon)) + if (GetMonStatusAndPokerus(&pssData.loadedMon)) { sub_80A12D0(-2); } - ewramSS.monIndex = var3; - ewramSS.unk84 = gTasks[taskId].func; + pssData.monIndex = var3; + pssData.unk84 = gTasks[taskId].func; gTasks[taskId].func = sub_809F43C; } } #else __attribute__((naked)) -void SummaryScreenHandleUpDownInput(u8 taskId, s8 direction) +static void SummaryScreenHandleUpDownInput(u8 taskId, s8 direction) { asm(".syntax unified\n\ push {r4-r6,lr}\n\ @@ -2168,16 +2159,16 @@ _0809F280: .4byte sub_809F43C\n\ // s8 sub_809F284(s8 a) // { -// struct Pokemon *mons = ewramSS.monList.partyMons; +// struct Pokemon *mons = pssData.monList.partyMons; // u8 var1 = 0; -// if (ewramSS.page == PSS_PAGE_INFO) +// if (pssData.page == PSS_PAGE_INFO) // { -// if ((s8)a == -1 || ewramSS.monIndex != 0) +// if ((s8)a == -1 || pssData.monIndex != 0) // { -// if ((s8)a == 1 || ewramSS.monIndex < ewramSS.maxMonIndex) +// if ((s8)a == 1 || pssData.monIndex < pssData.maxMonIndex) // { -// return ewramSS.monIndex + a; +// return pssData.monIndex + a; // } // } @@ -2189,18 +2180,18 @@ _0809F280: .4byte sub_809F43C\n\ // { // var1 += a; -// if (ewramSS.monIndex + var1 >= 0 || ewramSS.monIndex + var1 > ewramSS.maxMonIndex) +// if (pssData.monIndex + var1 >= 0 || pssData.monIndex + var1 > pssData.maxMonIndex) // { // return -1; // } -// if (!GetMonData(&mons[ewramSS.monIndex + var1], MON_DATA_IS_EGG)) +// if (!GetMonData(&mons[pssData.monIndex + var1], MON_DATA_IS_EGG)) // { // break; // } // } -// return ewramSS.monIndex + var1; +// return pssData.monIndex + var1; // } // } @@ -2290,7 +2281,7 @@ bool8 sub_809F310(struct Pokemon *mon) { if (GetMonData(mon, MON_DATA_SPECIES)) { - if (ewramSS.page != PSS_PAGE_INFO || !GetMonData(mon, MON_DATA_IS_EGG)) + if (pssData.page != PSS_PAGE_INFO || !GetMonData(mon, MON_DATA_IS_EGG)) { return TRUE; } @@ -2340,7 +2331,7 @@ s8 sub_809F3CC(s8 direction) for (i = 0; i < PARTY_SIZE; i++) { - if (sDoubleBattlePartyOrder[i] == ewramSS.monIndex) + if (sDoubleBattlePartyOrder[i] == pssData.monIndex) { monIndex = i; break; @@ -2373,33 +2364,33 @@ void sub_809F43C(u8 taskId) gMain.state++; break; case 1: - DestroySpriteAndFreeResources(&gSprites[ewramSS.monSpriteId]); + DestroySpriteAndFreeResources(&gSprites[pssData.monSpriteId]); gMain.state++; break; case 2: - DestroySpriteAndFreeResources(&gSprites[ewramSS.ballSpriteId]); + DestroySpriteAndFreeResources(&gSprites[pssData.ballSpriteId]); gMain.state++; break; case 3: - ewramSS.loadGfxState = 0; - ewramSS.selectedMoveIndex = 0; + pssData.loadGfxState = 0; + pssData.selectedMoveIndex = 0; gMain.state++; break; case 4: - sub_809F678(&ewramSS.loadedMon); - if (GetMonStatusAndPokerus(&ewramSS.loadedMon)) + sub_809F678(&pssData.loadedMon); + if (GetMonStatusAndPokerus(&pssData.loadedMon)) { sub_80A12D0(2); } - DrawPokerusSurvivorDot(&ewramSS.loadedMon); + DrawPokerusSurvivorDot(&pssData.loadedMon); gMain.state++; break; case 5: - if ((ewramSS.monSpriteId = sub_809F6B4(&ewramSS.loadedMon, &ewramSS.loadGfxState)) != 0xFF) + if ((pssData.monSpriteId = sub_809F6B4(&pssData.loadedMon, &pssData.loadGfxState)) != 0xFF) { - ewramSS.loadGfxState = 0; - if (GetMonData(&ewramSS.loadedMon, MON_DATA_IS_EGG)) + pssData.loadGfxState = 0; + if (GetMonData(&pssData.loadedMon, MON_DATA_IS_EGG)) { gUnknown_030041B0 = 256; } @@ -2412,17 +2403,17 @@ void sub_809F43C(u8 taskId) } break; case 6: - sub_80A1DCC(&ewramSS.loadedMon); + sub_80A1DCC(&pssData.loadedMon); gMain.state++; break; case 7: - sub_80A1DE8(&ewramSS.loadedMon); + sub_80A1DE8(&pssData.loadedMon); gMain.state++; break; case 8: if (sub_809F5F8()) { - ewramSS.loadGfxState = 0; + pssData.loadGfxState = 0; gMain.state++; } break; @@ -2430,60 +2421,60 @@ void sub_809F43C(u8 taskId) if (sub_8055870() != TRUE) { gMain.state = 0; - gTasks[taskId].func = ewramSS.unk84; + gTasks[taskId].func = pssData.unk84; } break; } } -bool8 sub_809F5F8(void) +static bool8 sub_809F5F8(void) { - if (ewramSS.loadGfxState == 0) + if (pssData.loadGfxState == 0) { - sub_809FAC8(&ewramSS.loadedMon); - ewramSS.loadGfxState++; + sub_809FAC8(&pssData.loadedMon); + pssData.loadGfxState++; return FALSE; } else { - sUnknown_083C1588[ewramSS.page](&ewramSS.loadedMon); + sUnknown_083C1588[pssData.page](&pssData.loadedMon); return TRUE; } } -void sub_809F63C(struct Pokemon *mon) +static void sub_809F63C(struct Pokemon *mon) { sub_809FE80(); sub_809FC34(mon); } -void sub_809F650(struct Pokemon *mon) +static void sub_809F650(struct Pokemon *mon) { sub_80A00A4(); sub_809FF64(mon); } -void sub_809F664(struct Pokemon *mon) +static void sub_809F664(struct Pokemon *mon) { sub_80A0390(); sub_80A015C(mon); } -void sub_809F678(struct Pokemon *mon) +static void sub_809F678(struct Pokemon *mon) { - if (ewramSS.usingPC == FALSE) + if (pssData.usingPC == FALSE) { - struct Pokemon *mons = ewramSS.monList.partyMons; - *mon = mons[ewramSS.monIndex]; + struct Pokemon *mons = pssData.monList.partyMons; + *mon = mons[pssData.monIndex]; } else { - struct BoxPokemon *mons = ewramSS.monList.boxMons; - sub_803B4B4(&mons[ewramSS.monIndex], mon); + struct BoxPokemon *mons = pssData.monList.boxMons; + sub_803B4B4(&mons[pssData.monIndex], mon); } } -u8 sub_809F6B4(struct Pokemon *mon, u8 *b) +static u8 sub_809F6B4(struct Pokemon *mon, u8 *b) { u16 species; u32 personality; @@ -2521,7 +2512,7 @@ u8 sub_809F6B4(struct Pokemon *mon, u8 *b) } } -u16 GetMonMove(struct Pokemon *mon, u8 moveId) +static u16 GetMonMove(struct Pokemon *mon, u8 moveId) { switch (moveId) { @@ -2551,14 +2542,14 @@ static u16 GetMonMovePP(struct Pokemon *mon, u8 moveId) } } -bool8 sub_809F7D0(u8 taskId) +static bool8 sub_809F7D0(u8 taskId) { struct Pokemon mon; u16 move; sub_809F678(&mon); - move = GetMonMove(&mon, ewramSS.selectedMoveIndex); - if (IsHMMove(move) == TRUE && ewramSS.mode != PSS_MODE_UNKNOWN) + move = GetMonMove(&mon, pssData.selectedMoveIndex); + if (IsHMMove(move) == TRUE && pssData.mode != PSS_MODE_UNKNOWN) { return FALSE; } @@ -2566,7 +2557,7 @@ bool8 sub_809F7D0(u8 taskId) return TRUE; } -#ifdef NONMATCHING // The two "ewramSS.selectedMoveIndex = taskData[15];" lines have small register differences. +#ifdef NONMATCHING // The two "pssData.selectedMoveIndex = taskData[15];" lines have small register differences. void sub_809F814(u8 taskId) { u16 var1; @@ -2583,7 +2574,7 @@ void sub_809F814(u8 taskId) gTasks[taskId].func = sub_809E260; taskData[0] = 4; taskData[13] = 1; - ewramSS.selectedMoveIndex = taskData[15]; + pssData.selectedMoveIndex = taskData[15]; sub_809E8F0(taskId, -1); } else if (gMain.newKeys & DPAD_DOWN) @@ -2591,14 +2582,14 @@ void sub_809F814(u8 taskId) gTasks[taskId].func = sub_809E260; taskData[0] = 4; taskData[13] = 1; - ewramSS.selectedMoveIndex = taskData[15]; + pssData.selectedMoveIndex = taskData[15]; sub_809E8F0(taskId, 1); } else if ((gMain.newKeys & DPAD_LEFT) || sub_80F9284() == 1) { - if (ewramSS.page != PSS_PAGE_BATTLE_MOVES) + if (pssData.page != PSS_PAGE_BATTLE_MOVES) { - if (ewramSS.page == PSS_PAGE_CONTEST_MOVES && (ewramSS.selectedMoveIndex != 4 || ewramSS.moveToLearn != 0)) + if (pssData.page == PSS_PAGE_CONTEST_MOVES && (pssData.selectedMoveIndex != 4 || pssData.moveToLearn != 0)) { MenuZeroFillWindowRect(0, 14, 9, 18); } @@ -2612,9 +2603,9 @@ void sub_809F814(u8 taskId) } else if ((gMain.newKeys & DPAD_RIGHT) || sub_80F9284() == 2) { - if (ewramSS.page != ewramSS.lastPage) + if (pssData.page != pssData.lastPage) { - if (ewramSS.page == PSS_PAGE_BATTLE_MOVES && (ewramSS.selectedMoveIndex != 4 || ewramSS.moveToLearn != 0)) + if (pssData.page == PSS_PAGE_BATTLE_MOVES && (pssData.selectedMoveIndex != 4 || pssData.moveToLearn != 0)) { MenuZeroFillWindowRect(0, 14, 9, 18); } @@ -2858,7 +2849,7 @@ _0809F9CC: .4byte sub_809E260\n\ } #endif // NONMATCHING -void sub_809F9D0(u8 taskId, u8 b) +static void sub_809F9D0(u8 taskId, u8 b) { s16 *taskData = gTasks[taskId].data; taskData[14] = 0; @@ -2874,7 +2865,7 @@ void sub_809F9D0(u8 taskId, u8 b) u8 sub_809FA30(void) { - return ewramSS.switchMoveIndex; + return pssData.switchMoveIndex; } // void GetStringCenterAlignXOffsetWithLetterSpacing(u8 a, u8 b, u8 c, u8 d) @@ -2938,7 +2929,7 @@ bool8 sub_809FA94(struct Pokemon *mon) } } -void sub_809FAC8(struct Pokemon *mon) +static void sub_809FAC8(struct Pokemon *mon) { bool8 shinyDexNum; u16 dexNum; @@ -2988,7 +2979,7 @@ void sub_809FAC8(struct Pokemon *mon) } } -void sub_809FBE4(void) +static void sub_809FBE4(void) { u8 i; @@ -3000,14 +2991,14 @@ void sub_809FBE4(void) MenuZeroFillWindowRect(11, 4, 29, 18); } -void sub_809FC0C(void) +static void sub_809FC0C(void) { MenuPrint(gOtherText_Type2, 11, 6); GetStringCenterAlignXOffset(0, 22, 4); GetStringCenterAlignXOffset(2, 23, 4); } -void sub_809FC34(struct Pokemon *mon) +static void sub_809FC34(struct Pokemon *mon) { u8 i; u8 *buffer; @@ -3100,13 +3091,13 @@ void sub_809FC34(struct Pokemon *mon) } } -void sub_809FE6C(struct Pokemon *mon) +static void sub_809FE6C(struct Pokemon *mon) { sub_809FC0C(); sub_809FC34(mon); } -void sub_809FE80(void) +static void sub_809FE80(void) { MenuZeroFillWindowRect(14, 4, 18, 5); MenuZeroFillWindowRect(25, 4, 30, 5); @@ -3114,7 +3105,7 @@ void sub_809FE80(void) MenuZeroFillWindowRect(11, 14, 28, 17); } -void sub_809FEB8(void) +static void sub_809FEB8(void) { sub_80A1FF8(gOtherText_ExpPoints, 13, 11, 14); sub_80A1FF8(gOtherText_NextLv, 13, 11, 16); @@ -3128,7 +3119,7 @@ void sub_809FEB8(void) sub_80A1F48(gOtherText_Speed, 13, 22, 11, 36); } -void sub_809FF64(struct Pokemon *mon) +static void sub_809FF64(struct Pokemon *mon) { u8 i; u16 heldItem; @@ -3171,13 +3162,13 @@ void sub_809FF64(struct Pokemon *mon) MenuPrint_PixelCoords(gStringVar1, 126, 56, 1); } -void sub_80A0090(struct Pokemon *mon) +static void sub_80A0090(struct Pokemon *mon) { sub_809FEB8(); sub_809FF64(mon); } -void sub_80A00A4(void) +static void sub_80A00A4(void) { MenuZeroFillWindowRect(11, 4, 19, 5); MenuZeroFillWindowRect(16, 7, 21, 8); @@ -3187,11 +3178,11 @@ void sub_80A00A4(void) MenuZeroFillWindowRect(23, 16, 28, 17); } -void sub_80A00F4(u8 a) +static void sub_80A00F4(u8 a) { - if (ewramSS.moveToLearn != 0 || a != 4) + if (pssData.moveToLearn != 0 || a != 4) { - if (ewramSS.page == PSS_PAGE_BATTLE_MOVES) + if (pssData.page == PSS_PAGE_BATTLE_MOVES) { sub_80A1FF8(gOtherText_Power2, 13, 1, 15); sub_80A1FF8(gOtherText_Accuracy2, 13, 1, 17); @@ -3204,7 +3195,7 @@ void sub_80A00F4(u8 a) } } -void sub_80A015C(struct Pokemon *mon) +static void sub_80A015C(struct Pokemon *mon) { u8 i; u16 move; @@ -3226,7 +3217,7 @@ void sub_80A015C(struct Pokemon *mon) } else { - if (ewramSS.page == PSS_PAGE_BATTLE_MOVES) + if (pssData.page == PSS_PAGE_BATTLE_MOVES) { sub_80A198C(gBattleMoves[move].type, 87, ((2 * i) + 4) * 8, i); } @@ -3250,26 +3241,26 @@ void sub_80A015C(struct Pokemon *mon) } } -void sub_80A029C(struct Pokemon *mon) +static void sub_80A029C(struct Pokemon *mon) { u8 *buffer; u16 move; u8 pp; - if (ewramSS.moveToLearn == 0) + if (pssData.moveToLearn == 0) { sub_80A1FF8(gOtherText_CancelNoTerminator, 13, 15, 12); return; } - move = ewramSS.moveToLearn; + move = pssData.moveToLearn; - if (ewramSS.page == PSS_PAGE_BATTLE_MOVES) + if (pssData.page == PSS_PAGE_BATTLE_MOVES) sub_80A198C(gBattleMoves[move].type, 87, 96, 4); else sub_80A198C(gContestMoves[move].contestCategory + 18, 87, 96, 4); - if (ewramSS.page == PSS_PAGE_BATTLE_MOVES) + if (pssData.page == PSS_PAGE_BATTLE_MOVES) sub_80A1FF8(gMoveNames[move], 10, 15, 12); else sub_80A1FF8(gMoveNames[move], 9, 15, 12); @@ -3284,7 +3275,7 @@ void sub_80A029C(struct Pokemon *mon) MenuPrint(gStringVar1, 25, 12); } -void sub_80A0390(void) +static void sub_80A0390(void) { u8 i; @@ -3304,9 +3295,9 @@ u16 sub_80A03BC(struct Pokemon *mon, u8 selectedMoveIndex) } else { - if (ewramSS.moveToLearn != 0) + if (pssData.moveToLearn != 0) { - move = ewramSS.moveToLearn; + move = pssData.moveToLearn; } else { @@ -3321,7 +3312,7 @@ void sub_80A03F0(struct Pokemon *mon, u8 *selectedMoveIndex) { u16 move = sub_80A03BC(mon, *selectedMoveIndex); - if (ewramSS.page == PSS_PAGE_BATTLE_MOVES) + if (pssData.page == PSS_PAGE_BATTLE_MOVES) { sub_80A04CC(move); sub_80A057C(0xFFFF); @@ -3332,12 +3323,12 @@ void sub_80A03F0(struct Pokemon *mon, u8 *selectedMoveIndex) } } -void sub_80A0428(struct Pokemon *mon, u8 *selectedMoveIndex) +static void sub_80A0428(struct Pokemon *mon, u8 *selectedMoveIndex) { u16 move = sub_80A03BC(mon, *selectedMoveIndex); MenuZeroFillWindowRect(11, 15, 28, 18); - if (ewramSS.page == PSS_PAGE_BATTLE_MOVES) + if (pssData.page == PSS_PAGE_BATTLE_MOVES) { sub_80A046C(move); } @@ -3349,21 +3340,21 @@ void sub_80A0428(struct Pokemon *mon, u8 *selectedMoveIndex) sub_80A03F0(mon, selectedMoveIndex); } -void sub_80A046C(u16 move) +static void sub_80A046C(u16 move) { if (move == 0xFFFF) return; MenuPrint(gMoveDescriptions[move - 1], 11, 15); } -void sub_80A0498(u16 move) +static void sub_80A0498(u16 move) { if (move == 0xFFFF) return; MenuPrint(gContestEffectStrings[gContestMoves[move].effect], 11, 15); } -void sub_80A04CC(u16 move) +static void sub_80A04CC(u16 move) { u8 *buffer; @@ -3397,7 +3388,7 @@ void sub_80A04CC(u16 move) } #ifdef NONMATCHING // The two vramAddr lines are non-matching. -void sub_80A057C(u16 move) +static void sub_80A057C(u16 move) { u8 appeal; u8 jam; @@ -3448,7 +3439,7 @@ void sub_80A057C(u16 move) } #else __attribute__((naked)) -void sub_80A057C(u16 move) +static void sub_80A057C(u16 move) { asm(".syntax unified\n\ push {r4-r7,lr}\n\ @@ -3598,7 +3589,7 @@ bool8 PokemonSummaryScreen_CheckOT(struct Pokemon *mon) return FALSE; } -void PokemonSummaryScreen_PrintEggTrainerMemo(struct Pokemon *mon, u8 left, u8 top) +static void PokemonSummaryScreen_PrintEggTrainerMemo(struct Pokemon *mon, u8 left, u8 top) { u8 locationMet; u8 gameMet = GetMonData(mon, MON_DATA_MET_GAME); @@ -3635,7 +3626,7 @@ void PokemonSummaryScreen_PrintEggTrainerMemo(struct Pokemon *mon, u8 left, u8 t MenuPrint(gOtherText_EggDayCare, left, top); } -void PokemonSummaryScreen_PrintTrainerMemo(struct Pokemon *pokemon, u8 left, u8 top) +static void PokemonSummaryScreen_PrintTrainerMemo(struct Pokemon *pokemon, u8 left, u8 top) { u8 locationMet; u8 gameMet; @@ -3740,7 +3731,7 @@ void PokemonSummaryScreen_PrintTrainerMemo(struct Pokemon *pokemon, u8 left, u8 MenuPrint(gStringVar4, left++, top++); } -void sub_80A0958(struct Pokemon *pokemon) +static void sub_80A0958(struct Pokemon *pokemon) { u16 species; u8 *buffer; @@ -3781,7 +3772,7 @@ void sub_80A0958(struct Pokemon *pokemon) sub_80A0A2C(pokemon, 7, 16); } -void sub_80A0A2C(struct Pokemon *pokemon, u8 left, u8 top) +static void sub_80A0A2C(struct Pokemon *pokemon, u8 left, u8 top) { const u8 *genderSymbol; u8 var1; @@ -3834,7 +3825,7 @@ u8 GetNumRibbons(struct Pokemon *pokemon) return numRibbons; } -void PrintNumRibbons(struct Pokemon *pokemon) +static void PrintNumRibbons(struct Pokemon *pokemon) { u8 numRibbons = GetNumRibbons(pokemon); @@ -3861,12 +3852,12 @@ void PrintNumRibbons(struct Pokemon *pokemon) MenuPrint(sUnknown_083C15AE, 21, 4); } -void PrintHeldItemName(u16 itemId, u8 left, u8 top) +static void PrintHeldItemName(u16 itemId, u8 left, u8 top) { if (itemId == ITEM_ENIGMA_BERRY && sub_80F9344() == TRUE && IsLinkDoubleBattle() == TRUE - && (ewramSS.monIndex == 1 || ewramSS.monIndex == 4 || ewramSS.monIndex == 5)) + && (pssData.monIndex == 1 || pssData.monIndex == 4 || pssData.monIndex == 5)) { StringCopy(gStringVar1, ItemId_GetItem(itemId)->name); } @@ -3882,7 +3873,7 @@ void PrintHeldItemName(u16 itemId, u8 left, u8 top) MenuPrint(sUnknown_083C15B4, left, top); } -void DrawExperienceProgressBar(struct Pokemon *pokemon, u8 left, u8 top) +static void DrawExperienceProgressBar(struct Pokemon *pokemon, u8 left, u8 top) { u32 curExperience; u8 level; @@ -3953,7 +3944,7 @@ void DrawExperienceProgressBar(struct Pokemon *pokemon, u8 left, u8 top) // Prints the text displayed in the top-left or top-right of the screen. // Each of the 4 summary screens displays different text. -void PrintSummaryWindowHeaderText(void) +static void PrintSummaryWindowHeaderText(void) { u8 *buffer = gStringVar1; @@ -3963,7 +3954,7 @@ void PrintSummaryWindowHeaderText(void) buffer += 3; buffer = sub_80A1E58(buffer, 13); - buffer = StringCopy(buffer, sPageHeaderTexts[ewramSS.headerTextId]); + buffer = StringCopy(buffer, sPageHeaderTexts[pssData.headerTextId]); buffer[0] = EXT_CTRL_CODE_BEGIN; buffer[1] = 0x13; @@ -3972,7 +3963,7 @@ void PrintSummaryWindowHeaderText(void) MenuPrint(gStringVar1, 0, 0); - if (ewramSS.headerActionTextId != 0) + if (pssData.headerActionTextId != 0) { GetStringCenterAlignXOffset(5, 23, 0); GetStringCenterAlignXOffset(6, 24, 0); @@ -3984,7 +3975,7 @@ void PrintSummaryWindowHeaderText(void) buffer = gStringVar1; buffer = sub_80A1E58(buffer, 13); - buffer = StringCopy(buffer, sPageHeaderTexts[ewramSS.headerActionTextId]); + buffer = StringCopy(buffer, sPageHeaderTexts[pssData.headerActionTextId]); buffer[0] = EXT_CTRL_CODE_BEGIN; buffer[1] = 0x13; @@ -3996,7 +3987,7 @@ void PrintSummaryWindowHeaderText(void) // If the given pokemon previously had the pokerus virus, a small // dot will be drawn in between the pokeball and the mon's level. -void DrawPokerusSurvivorDot(struct Pokemon *pokemon) +static void DrawPokerusSurvivorDot(struct Pokemon *pokemon) { u16 *vram1 = (u16 *)(VRAM + 0xE444); u16 *vram2 = (u16 *)(VRAM + 0xEC44); @@ -4015,7 +4006,7 @@ void DrawPokerusSurvivorDot(struct Pokemon *pokemon) // Draws the 4 small navigation circles at the top of the pokemon summary screen. #ifdef NONMATCHING -void DrawSummaryScreenNavigationDots(void) +static void DrawSummaryScreenNavigationDots(void) { void *dest; u16 arr[8]; @@ -4087,7 +4078,7 @@ void DrawSummaryScreenNavigationDots(void) } #else __attribute__((naked)) -void DrawSummaryScreenNavigationDots(void) +static void DrawSummaryScreenNavigationDots(void) { asm(".syntax unified\n\ push {r4-r7,lr}\n\ @@ -4586,7 +4577,7 @@ _080A12CC: .4byte gOtherText_Status\n\ .syntax divided\n"); } -void sub_80A12D0(s8 a) +static void sub_80A12D0(s8 a) { u8 newTaskId; @@ -4651,12 +4642,12 @@ void sub_80A12D0(s8 a) // if (gTasks[taskId].data[0] == 0 || gTasks[taskId].data[1] < 0) // { -// if (ewramSS.page == PSS_PAGE_BATTLE_MOVES) +// if (pssData.page == PSS_PAGE_BATTLE_MOVES) // { // MenuZeroFillWindowRect(0, 14, 9, 18); -// sub_80A0958(ewramSS.loadedMon); +// sub_80A0958(pssData.loadedMon); -// if (GetMonStatusAndPokerus(ewramSS.loadedMon)) +// if (GetMonStatusAndPokerus(pssData.loadedMon)) // { // sub_80A1FF8(gOtherText_Status, 13, 1, 18); // } @@ -4667,17 +4658,17 @@ void sub_80A12D0(s8 a) // if (gTasks[taskId].data[1] > 9) // { -// if (ewramSS.page == PSS_PAGE_BATTLE_MOVES) +// if (pssData.page == PSS_PAGE_BATTLE_MOVES) // { // sub_80A00F4(gTasks[taskId].data[3]); // } -// sub_80A0428(ewramSS.loadedMon, &gTasks[taskId].data[3]); +// sub_80A0428(pssData.loadedMon, &gTasks[taskId].data[3]); // DestroyTask(taskId); // } // } __attribute__((naked)) -void sub_80A1334(u8 taskId) +static void sub_80A1334(u8 taskId) { asm(".syntax unified\n\ push {r4-r7,lr}\n\ @@ -4850,11 +4841,11 @@ _080A1484: .4byte gOtherText_Status\n\ // Related to re-drawing the summary area underneath the pokemon's picture // in all of the summary screen tabs. -void sub_80A1488(s8 a, u8 b) +static void sub_80A1488(s8 a, u8 b) { u8 taskId; - if (ewramSS.page == PSS_PAGE_BATTLE_MOVES) + if (pssData.page == PSS_PAGE_BATTLE_MOVES) { MenuZeroFillWindowRect(0, 14, 9, 19); } @@ -4881,7 +4872,7 @@ void sub_80A1488(s8 a, u8 b) } __attribute__((naked)) -void sub_80A1500(u8 taskId) +static void sub_80A1500(u8 taskId) { asm(".syntax unified\n\ push {r4-r7,lr}\n\ @@ -5052,11 +5043,11 @@ _080A1650: .4byte gOtherText_Status\n\ .syntax divided\n"); } -void sub_80A1654(s8 a, u8 b) +static void sub_80A1654(s8 a, u8 b) { u8 taskId; - if (ewramSS.page == PSS_PAGE_CONTEST_MOVES) + if (pssData.page == PSS_PAGE_CONTEST_MOVES) { MenuZeroFillWindowRect(0, 14, 9, 19); } @@ -5083,7 +5074,7 @@ void sub_80A1654(s8 a, u8 b) } #ifdef NONMATCHING -void sub_80A16CC(u8 a) +static void sub_80A16CC(u8 a) { u8 i; u16 *vramAddr = (u16 *)(VRAM + 0x6AD4); @@ -5131,7 +5122,7 @@ void sub_80A16CC(u8 a) } #else __attribute__((naked)) -void sub_80A16CC(u8 a) +static void sub_80A16CC(u8 a) { asm(".syntax unified\n\ push {r4-r7,lr}\n\ @@ -5325,20 +5316,20 @@ u8 sub_80A1808(struct Pokemon *pokemon) return spriteId; } -void sub_80A1888(struct Sprite *sprite) +static void sub_80A1888(struct Sprite *sprite) { if (!gPaletteFade.active) { sprite->callback = SpriteCallbackDummy; - if (!GetMonData(&ewramSS.loadedMon, MON_DATA_IS_EGG)) + if (!GetMonData(&pssData.loadedMon, MON_DATA_IS_EGG)) { PlayCry1(sprite->data[0], 0); } } } -void sub_80A18C4(void) +static void sub_80A18C4(void) { u8 i; @@ -5348,7 +5339,7 @@ void sub_80A18C4(void) } } -void sub_80A18E4(u8 a) +static void sub_80A18E4(u8 a) { if (ewram1A000[a] != 0xFF) { @@ -5357,12 +5348,12 @@ void sub_80A18E4(u8 a) } } -void sub_80A1918(u8 a, u8 invisible) +static void sub_80A1918(u8 a, u8 invisible) { gSprites[ewram1A000[a]].invisible = invisible; } -void sub_80A1950(void) +static void sub_80A1950(void) { u8 i; @@ -5377,7 +5368,7 @@ void sub_80A1950(void) } } -void sub_80A198C(u8 animNum, u8 x, u8 y, u8 d) +static void sub_80A198C(u8 animNum, u8 x, u8 y, u8 d) { StartSpriteAnim(&gSprites[ewram1A000[d]], animNum); @@ -5388,13 +5379,13 @@ void sub_80A198C(u8 animNum, u8 x, u8 y, u8 d) sub_80A1918(d, 0); } -void sub_80A1A30(u8 a) +static void sub_80A1A30(u8 a) { u8 i; s16 x; u8 subPriority = 0; - if (ewramSS.page >= PSS_PAGE_BATTLE_MOVES) + if (pssData.page >= PSS_PAGE_BATTLE_MOVES) { if (a == 9) { @@ -5426,7 +5417,7 @@ void sub_80A1A30(u8 a) } } -void sub_80A1B1C(u8 a) +static void sub_80A1B1C(u8 a) { u8 i; @@ -5436,7 +5427,7 @@ void sub_80A1B1C(u8 a) } } -void sub_80A1B40(u8 a) +static void sub_80A1B40(u8 a) { u8 i; a *= 3; @@ -5451,7 +5442,7 @@ void sub_80A1B40(u8 a) StartSpriteAnim(&gSprites[ewram1A000[18]], a + 5); } -void sub_80A1BC0(struct Sprite *sprite) +static void sub_80A1BC0(struct Sprite *sprite) { u8 animNum = sprite->animNum - 4; if (animNum < 3) @@ -5475,11 +5466,11 @@ void sub_80A1BC0(struct Sprite *sprite) if (sprite->data[0] == 9) { - sprite->pos2.y = ewramSS.selectedMoveIndex * 16; + sprite->pos2.y = pssData.selectedMoveIndex * 16; } else { - sprite->pos2.y = ewramSS.switchMoveIndex * 16; + sprite->pos2.y = pssData.switchMoveIndex * 16; } } @@ -5665,7 +5656,7 @@ _080A1D80: .4byte gSprites\n\ } #endif // NONMATCHING -void sub_80A1D84(struct Pokemon *mon) +static void sub_80A1D84(struct Pokemon *mon) { struct Sprite *sprite; @@ -5682,23 +5673,23 @@ void sub_80A1D84(struct Pokemon *mon) } } -void sub_80A1DCC(struct Pokemon *mon) +static void sub_80A1DCC(struct Pokemon *mon) { DestroySprite(gUnknown_020384F4); sub_80A1D84(mon); } -void sub_80A1DE8(struct Pokemon *mon) +static void sub_80A1DE8(struct Pokemon *mon) { u8 ball = ball_number_to_ball_processing_index(GetMonData(mon, MON_DATA_POKEBALL)); sub_80478DC(ball); - ewramSS.ballSpriteId = CreateSprite(&gBallSpriteTemplates[ball], 6, 136, 0); - gSprites[ewramSS.ballSpriteId].callback = SpriteCallbackDummy; - gSprites[ewramSS.ballSpriteId].oam.priority = 3; + pssData.ballSpriteId = CreateSprite(&gBallSpriteTemplates[ball], 6, 136, 0); + gSprites[pssData.ballSpriteId].callback = SpriteCallbackDummy; + gSprites[pssData.ballSpriteId].oam.priority = 3; } -u8 *sub_80A1E58(u8 *text, u8 id) +static u8 *sub_80A1E58(u8 *text, u8 id) { if (id != 0xFF) { @@ -5744,25 +5735,25 @@ u8 *sub_80A1E9C(u8 *dest, const u8 *src, u8 id) return dest; } -void sub_80A1EF8(const u8 *text, u8 id, u8 left, u16 top, s32 e) +static void sub_80A1EF8(const u8 *text, u8 id, u8 left, u16 top, s32 e) { sub_80A1E9C(gStringVar4, text, id); MenuPrint_PixelCoords(gStringVar4, left, top, (bool8)e); } -void sub_80A1F48(const u8 *text, u8 id, u8 c, u8 d, u16 e) +static void sub_80A1F48(const u8 *text, u8 id, u8 c, u8 d, u16 e) { sub_80A1E9C(gStringVar4, text, id); sub_8072BD8(gStringVar4, c, d, e); } -void sub_80A1F98(s32 value, u8 id, u8 n, u8 mode, u8 left, u16 top, s32 e) +static void sub_80A1F98(s32 value, u8 id, u8 n, u8 mode, u8 left, u16 top, s32 e) { ConvertIntToDecimalStringN(gStringVar1, value, mode, n); sub_80A1EF8(gStringVar1, id, left, top, e); } -void sub_80A1FF8(const u8 *text, u8 id, u8 left, u8 top) +static void sub_80A1FF8(const u8 *text, u8 id, u8 left, u8 top) { sub_80A1E9C(gStringVar4, text, id); MenuPrint(gStringVar4, left, top); @@ -5787,14 +5778,14 @@ u8 *PokemonSummaryScreen_CopyPokemonLevel(u8 *dest, u8 level) return dest; } -void sub_80A2078(int taskId) +static void sub_80A2078(int taskId) { gUnknown_03005CF0 = gTasks[taskId].func; gTasks[taskId].func = sub_80A20A8; gTasks[taskId].func((u8)taskId); } -void sub_80A20A8(u8 taskId) +static void sub_80A20A8(u8 taskId) { if (sub_8055870() != TRUE) { diff --git a/src/scene/evolution_scene.c b/src/scene/evolution_scene.c index 1bbb8d485..d4c6417c7 100644 --- a/src/scene/evolution_scene.c +++ b/src/scene/evolution_scene.c @@ -817,7 +817,7 @@ static void Task_EvolutionScene(u8 taskID) case 5: if (!gPaletteFade.active) { - sub_809D9F0(gPlayerParty, gTasks[taskID].tPartyID, + ShowSelectMovePokemonSummaryScreen(gPlayerParty, gTasks[taskID].tPartyID, gPlayerPartyCount - 1, CB2_EvolutionSceneLoadGraphics, gMoveToLearn); gTasks[taskID].tLearnMoveState++; @@ -1137,7 +1137,7 @@ static void Task_TradeEvolutionScene(u8 taskID) case 5: if (!gPaletteFade.active) { - sub_809D9F0(gPlayerParty, gTasks[taskID].tPartyID, + ShowSelectMovePokemonSummaryScreen(gPlayerParty, gTasks[taskID].tPartyID, gPlayerPartyCount - 1, CB2_TradeEvolutionSceneLoadGraphics, gMoveToLearn); gTasks[taskID].tLearnMoveState++; diff --git a/src/script_pokemon_util_80F99CC.c b/src/script_pokemon_util_80F99CC.c index 21ff220d2..d95a0ed39 100644 --- a/src/script_pokemon_util_80F99CC.c +++ b/src/script_pokemon_util_80F99CC.c @@ -272,7 +272,7 @@ void HandleMoveTutorPartyMenu(u8 var) void sub_80F9EEC(void) { - sub_809D9F0(&gPlayerParty[0], gSpecialVar_0x8004, gPlayerPartyCount - 1, c2_exit_to_overworld_2_switch, 0); + ShowSelectMovePokemonSummaryScreen(&gPlayerParty[0], gSpecialVar_0x8004, gPlayerPartyCount - 1, c2_exit_to_overworld_2_switch, 0); UNK_2018000_STRUCT.unk8 = 3; gFieldCallback = sub_8080990; } -- cgit v1.2.3 From b80d40fb6977e58d5b001e063314c4e4faac5a02 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Sun, 26 Nov 2017 16:00:01 -0600 Subject: map constants --- src/battle/battle_setup.c | 228 ++++++++++++++++++++++---------------------- src/field/braille_puzzles.c | 10 +- src/field/field_map_obj.c | 6 +- src/field/field_specials.c | 36 +++---- src/field/heal_location.c | 46 ++++----- src/field/menu_helpers.c | 4 +- src/field/overworld.c | 52 +++++----- src/field/region_map.c | 8 +- src/field/rotating_gate.c | 10 +- src/field/secret_base.c | 54 +++++------ src/field/tv.c | 28 +++--- src/field/wild_encounter.c | 6 +- 12 files changed, 244 insertions(+), 244 deletions(-) (limited to 'src') diff --git a/src/battle/battle_setup.c b/src/battle/battle_setup.c index 3587c008c..21a1fdb09 100644 --- a/src/battle/battle_setup.c +++ b/src/battle/battle_setup.c @@ -13,7 +13,7 @@ #include "fieldmap.h" #include "fldeff_poison.h" #include "main.h" -#include "map_constants.h" +#include "constants/maps.h" #include "metatile_behavior.h" #include "opponent_constants.h" #include "palette.h" @@ -161,283 +161,283 @@ const struct TrainerEyeTrainer gTrainerEyeTrainers[] = { { {OPPONENT_ROSE_1, OPPONENT_ROSE_2, OPPONENT_ROSE_3, OPPONENT_ROSE_4, OPPONENT_ROSE_5}, - MAP_GROUP_ROUTE118, - MAP_ID_ROUTE118, + MAP_GROUP(MAP_ROUTE118), + MAP_NUM(MAP_ROUTE118), }, { {OPPONENT_DUSTY_1, OPPONENT_DUSTY_2, OPPONENT_DUSTY_3, OPPONENT_DUSTY_4, OPPONENT_DUSTY_5}, - MAP_GROUP_ROUTE111, - MAP_ID_ROUTE111, + MAP_GROUP(MAP_ROUTE111), + MAP_NUM(MAP_ROUTE111), }, { {OPPONENT_LOLA_1, OPPONENT_LOLA_2, OPPONENT_LOLA_3, OPPONENT_LOLA_4, OPPONENT_LOLA_5}, - MAP_GROUP_ROUTE109, - MAP_ID_ROUTE109, + MAP_GROUP(MAP_ROUTE109), + MAP_NUM(MAP_ROUTE109), }, { {OPPONENT_RICKY_1, OPPONENT_RICKY_2, OPPONENT_RICKY_3, OPPONENT_RICKY_4, OPPONENT_RICKY_5}, - MAP_GROUP_ROUTE109, - MAP_ID_ROUTE109, + MAP_GROUP(MAP_ROUTE109), + MAP_NUM(MAP_ROUTE109), }, { {OPPONENT_RITA_AND_SAM_1, OPPONENT_RITA_AND_SAM_2, OPPONENT_RITA_AND_SAM_3, OPPONENT_RITA_AND_SAM_4, OPPONENT_RITA_AND_SAM_5}, - MAP_GROUP_ROUTE124, - MAP_ID_ROUTE124, + MAP_GROUP(MAP_ROUTE124), + MAP_NUM(MAP_ROUTE124), }, { {OPPONENT_BROOKE_1, OPPONENT_BROOKE_2, OPPONENT_BROOKE_3, OPPONENT_BROOKE_4, OPPONENT_BROOKE_5}, - MAP_GROUP_ROUTE111, - MAP_ID_ROUTE111, + MAP_GROUP(MAP_ROUTE111), + MAP_NUM(MAP_ROUTE111), }, { {OPPONENT_WILTON_1, OPPONENT_WILTON_2, OPPONENT_WILTON_3, OPPONENT_WILTON_4, OPPONENT_WILTON_5}, - MAP_GROUP_ROUTE111, - MAP_ID_ROUTE111, + MAP_GROUP(MAP_ROUTE111), + MAP_NUM(MAP_ROUTE111), }, { {OPPONENT_VALERIE_1, OPPONENT_VALERIE_2, OPPONENT_VALERIE_3, OPPONENT_VALERIE_4, OPPONENT_VALERIE_5}, - MAP_GROUP_MT_PYRE_6F, - MAP_ID_MT_PYRE_6F, + MAP_GROUP(MAP_MT_PYRE_6F), + MAP_NUM(MAP_MT_PYRE_6F), }, { {OPPONENT_CINDY_1, OPPONENT_CINDY_3, OPPONENT_CINDY_4, OPPONENT_CINDY_5, OPPONENT_CINDY_6}, - MAP_GROUP_ROUTE104, - MAP_ID_ROUTE104, + MAP_GROUP(MAP_ROUTE104), + MAP_NUM(MAP_ROUTE104), }, { {OPPONENT_JESSICA_1, OPPONENT_JESSICA_2, OPPONENT_JESSICA_3, OPPONENT_JESSICA_4, OPPONENT_JESSICA_5}, - MAP_GROUP_ROUTE121, - MAP_ID_ROUTE121, + MAP_GROUP(MAP_ROUTE121), + MAP_NUM(MAP_ROUTE121), }, { {OPPONENT_WINSTON_1, OPPONENT_WINSTON_2, OPPONENT_WINSTON_3, OPPONENT_WINSTON_4, OPPONENT_WINSTON_5}, - MAP_GROUP_ROUTE104, - MAP_ID_ROUTE104, + MAP_GROUP(MAP_ROUTE104), + MAP_NUM(MAP_ROUTE104), }, { {OPPONENT_STEVE_1, OPPONENT_STEVE_2, OPPONENT_STEVE_3, OPPONENT_STEVE_4, OPPONENT_STEVE_5}, - MAP_GROUP_ROUTE114, - MAP_ID_ROUTE114, + MAP_GROUP(MAP_ROUTE114), + MAP_NUM(MAP_ROUTE114), }, { {OPPONENT_TONY_1, OPPONENT_TONY_2, OPPONENT_TONY_3, OPPONENT_TONY_4, OPPONENT_TONY_5}, - MAP_GROUP_ROUTE107, - MAP_ID_ROUTE107, + MAP_GROUP(MAP_ROUTE107), + MAP_NUM(MAP_ROUTE107), }, { {OPPONENT_NOB_1, OPPONENT_NOB_2, OPPONENT_NOB_3, OPPONENT_NOB_4, OPPONENT_NOB_5}, - MAP_GROUP_ROUTE115, - MAP_ID_ROUTE115, + MAP_GROUP(MAP_ROUTE115), + MAP_NUM(MAP_ROUTE115), }, { {OPPONENT_DALTON_1, OPPONENT_DALTON_2, OPPONENT_DALTON_3, OPPONENT_DALTON_4, OPPONENT_DALTON_5}, - MAP_GROUP_ROUTE118, - MAP_ID_ROUTE118, + MAP_GROUP(MAP_ROUTE118), + MAP_NUM(MAP_ROUTE118), }, { {OPPONENT_BERNIE_1, OPPONENT_BERNIE_2, OPPONENT_BERNIE_3, OPPONENT_BERNIE_4, OPPONENT_BERNIE_5}, - MAP_GROUP_ROUTE114, - MAP_ID_ROUTE114, + MAP_GROUP(MAP_ROUTE114), + MAP_NUM(MAP_ROUTE114), }, { {OPPONENT_ETHAN_1, OPPONENT_ETHAN_2, OPPONENT_ETHAN_3, OPPONENT_ETHAN_4, OPPONENT_ETHAN_5}, - MAP_GROUP_JAGGED_PASS, - MAP_ID_JAGGED_PASS, + MAP_GROUP(MAP_JAGGED_PASS), + MAP_NUM(MAP_JAGGED_PASS), }, { {OPPONENT_JOHN_AND_JAY_1, OPPONENT_JOHN_AND_JAY_2, OPPONENT_JOHN_AND_JAY_3, OPPONENT_JOHN_AND_JAY_4, OPPONENT_JOHN_AND_JAY_5}, - MAP_GROUP_METEOR_FALLS_1F_2R, - MAP_ID_METEOR_FALLS_1F_2R, + MAP_GROUP(MAP_METEOR_FALLS_1F_2R), + MAP_NUM(MAP_METEOR_FALLS_1F_2R), }, { {OPPONENT_BRANDON_1, OPPONENT_BRANDON_2, OPPONENT_BRANDON_3, OPPONENT_BRANDON_4, OPPONENT_BRANDON_5}, - MAP_GROUP_ROUTE120, - MAP_ID_ROUTE120, + MAP_GROUP(MAP_ROUTE120), + MAP_NUM(MAP_ROUTE120), }, { {OPPONENT_CAMERON_1, OPPONENT_CAMERON_2, OPPONENT_CAMERON_3, OPPONENT_CAMERON_4, OPPONENT_CAMERON_5}, - MAP_GROUP_ROUTE123, - MAP_ID_ROUTE123, + MAP_GROUP(MAP_ROUTE123), + MAP_NUM(MAP_ROUTE123), }, { {OPPONENT_JACKI_1, OPPONENT_JACKI_2, OPPONENT_JACKI_3, OPPONENT_JACKI_4, OPPONENT_JACKI_5}, - MAP_GROUP_ROUTE123, - MAP_ID_ROUTE123, + MAP_GROUP(MAP_ROUTE123), + MAP_NUM(MAP_ROUTE123), }, { {OPPONENT_WALTER_1, OPPONENT_WALTER_2, OPPONENT_WALTER_3, OPPONENT_WALTER_4, OPPONENT_WALTER_5}, - MAP_GROUP_ROUTE121, - MAP_ID_ROUTE121, + MAP_GROUP(MAP_ROUTE121), + MAP_NUM(MAP_ROUTE121), }, { {OPPONENT_KAREN_1, OPPONENT_KAREN_2, OPPONENT_KAREN_3, OPPONENT_KAREN_4, OPPONENT_KAREN_5}, - MAP_GROUP_ROUTE116, - MAP_ID_ROUTE116, + MAP_GROUP(MAP_ROUTE116), + MAP_NUM(MAP_ROUTE116), }, { {OPPONENT_JERRY_1, OPPONENT_JERRY_2, OPPONENT_JERRY_3, OPPONENT_JERRY_4, OPPONENT_JERRY_5}, - MAP_GROUP_ROUTE116, - MAP_ID_ROUTE116, + MAP_GROUP(MAP_ROUTE116), + MAP_NUM(MAP_ROUTE116), }, { {OPPONENT_ANNA_AND_MEG_1, OPPONENT_ANNA_AND_MEG_2, OPPONENT_ANNA_AND_MEG_3, OPPONENT_ANNA_AND_MEG_4, OPPONENT_ANNA_AND_MEG_5}, - MAP_GROUP_ROUTE117, - MAP_ID_ROUTE117, + MAP_GROUP(MAP_ROUTE117), + MAP_NUM(MAP_ROUTE117), }, { {OPPONENT_ISABEL_1, OPPONENT_ISABEL_2, OPPONENT_ISABEL_3, OPPONENT_ISABEL_4, OPPONENT_ISABEL_5}, - MAP_GROUP_ROUTE110, - MAP_ID_ROUTE110, + MAP_GROUP(MAP_ROUTE110), + MAP_NUM(MAP_ROUTE110), }, { {OPPONENT_MIGUEL_1, OPPONENT_MIGUEL_2, OPPONENT_MIGUEL_3, OPPONENT_MIGUEL_4, OPPONENT_MIGUEL_5}, - MAP_GROUP_ROUTE103, - MAP_ID_ROUTE103, + MAP_GROUP(MAP_ROUTE103), + MAP_NUM(MAP_ROUTE103), }, { {OPPONENT_TIMOTHY_1, OPPONENT_TIMOTHY_2, OPPONENT_TIMOTHY_3, OPPONENT_TIMOTHY_4, OPPONENT_TIMOTHY_5}, - MAP_GROUP_ROUTE115, - MAP_ID_ROUTE115, + MAP_GROUP(MAP_ROUTE115), + MAP_NUM(MAP_ROUTE115), }, { {OPPONENT_SHELBY_1, OPPONENT_SHELBY_2, OPPONENT_SHELBY_3, OPPONENT_SHELBY_4, OPPONENT_SHELBY_5}, - MAP_GROUP_MT_CHIMNEY, - MAP_ID_MT_CHIMNEY, + MAP_GROUP(MAP_MT_CHIMNEY), + MAP_NUM(MAP_MT_CHIMNEY), }, { {OPPONENT_CALVIN_1, OPPONENT_CALVIN_2, OPPONENT_CALVIN_3, OPPONENT_CALVIN_4, OPPONENT_CALVIN_5}, - MAP_GROUP_ROUTE102, - MAP_ID_ROUTE102, + MAP_GROUP(MAP_ROUTE102), + MAP_NUM(MAP_ROUTE102), }, { {OPPONENT_ELLIOT_1, OPPONENT_ELLIOT_2, OPPONENT_ELLIOT_3, OPPONENT_ELLIOT_4, OPPONENT_ELLIOT_5}, - MAP_GROUP_ROUTE106, - MAP_ID_ROUTE106, + MAP_GROUP(MAP_ROUTE106), + MAP_NUM(MAP_ROUTE106), }, { {OPPONENT_ABIGAIL_1, OPPONENT_ABIGAIL_2, OPPONENT_ABIGAIL_3, OPPONENT_ABIGAIL_4, OPPONENT_ABIGAIL_5}, - MAP_GROUP_ROUTE110, - MAP_ID_ROUTE110, + MAP_GROUP(MAP_ROUTE110), + MAP_NUM(MAP_ROUTE110), }, { {OPPONENT_BENJAMIN_1, OPPONENT_BENJAMIN_2, OPPONENT_BENJAMIN_3, OPPONENT_BENJAMIN_4, OPPONENT_BENJAMIN_5}, - MAP_GROUP_ROUTE110, - MAP_ID_ROUTE110, + MAP_GROUP(MAP_ROUTE110), + MAP_NUM(MAP_ROUTE110), }, { {OPPONENT_ISAIAH_1, OPPONENT_ISAIAH_2, OPPONENT_ISAIAH_3, OPPONENT_ISAIAH_4, OPPONENT_ISAIAH_5}, - MAP_GROUP_ROUTE128, - MAP_ID_ROUTE128, + MAP_GROUP(MAP_ROUTE128), + MAP_NUM(MAP_ROUTE128), }, { {OPPONENT_KATELYN_1, OPPONENT_KATELYN_2, OPPONENT_KATELYN_3, OPPONENT_KATELYN_4, OPPONENT_KATELYN_5}, - MAP_GROUP_ROUTE128, - MAP_ID_ROUTE128, + MAP_GROUP(MAP_ROUTE128), + MAP_NUM(MAP_ROUTE128), }, { {OPPONENT_MARIA_1, OPPONENT_MARIA_2, OPPONENT_MARIA_3, OPPONENT_MARIA_4, OPPONENT_MARIA_5}, - MAP_GROUP_ROUTE117, - MAP_ID_ROUTE117, + MAP_GROUP(MAP_ROUTE117), + MAP_NUM(MAP_ROUTE117), }, { {OPPONENT_DYLAN_1, OPPONENT_DYLAN_2, OPPONENT_DYLAN_3, OPPONENT_DYLAN_4, OPPONENT_DYLAN_5}, - MAP_GROUP_ROUTE117, - MAP_ID_ROUTE117, + MAP_GROUP(MAP_ROUTE117), + MAP_NUM(MAP_ROUTE117), }, { {OPPONENT_NICOLAS_1, OPPONENT_NICOLAS_2, OPPONENT_NICOLAS_3, OPPONENT_NICOLAS_4, OPPONENT_NICOLAS_5}, - MAP_GROUP_METEOR_FALLS_1F_2R, - MAP_ID_METEOR_FALLS_1F_2R, + MAP_GROUP(MAP_METEOR_FALLS_1F_2R), + MAP_NUM(MAP_METEOR_FALLS_1F_2R), }, { {OPPONENT_ROBERT_1, OPPONENT_ROBERT_2, OPPONENT_ROBERT_3, OPPONENT_ROBERT_4, OPPONENT_ROBERT_5}, - MAP_GROUP_ROUTE120, - MAP_ID_ROUTE120, + MAP_GROUP(MAP_ROUTE120), + MAP_NUM(MAP_ROUTE120), }, { {OPPONENT_LAO_1, OPPONENT_LAO_2, OPPONENT_LAO_3, OPPONENT_LAO_4, OPPONENT_LAO_5}, - MAP_GROUP_ROUTE113, - MAP_ID_ROUTE113, + MAP_GROUP(MAP_ROUTE113), + MAP_NUM(MAP_ROUTE113), }, { {OPPONENT_CYNDY_1, OPPONENT_CYNDY_2, OPPONENT_CYNDY_3, OPPONENT_CYNDY_4, OPPONENT_CYNDY_5}, - MAP_GROUP_ROUTE115, - MAP_ID_ROUTE115, + MAP_GROUP(MAP_ROUTE115), + MAP_NUM(MAP_ROUTE115), }, { {OPPONENT_MADELINE_1, OPPONENT_MADELINE_2, OPPONENT_MADELINE_3, OPPONENT_MADELINE_4, OPPONENT_MADELINE_5}, - MAP_GROUP_ROUTE113, - MAP_ID_ROUTE113, + MAP_GROUP(MAP_ROUTE113), + MAP_NUM(MAP_ROUTE113), }, { {OPPONENT_JENNY_1, OPPONENT_JENNY_2, OPPONENT_JENNY_3, OPPONENT_JENNY_4, OPPONENT_JENNY_5}, - MAP_GROUP_ROUTE124, - MAP_ID_ROUTE124, + MAP_GROUP(MAP_ROUTE124), + MAP_NUM(MAP_ROUTE124), }, { {OPPONENT_DIANA_1, OPPONENT_DIANA_2, OPPONENT_DIANA_3, OPPONENT_DIANA_4, OPPONENT_DIANA_5}, - MAP_GROUP_JAGGED_PASS, - MAP_ID_JAGGED_PASS, + MAP_GROUP(MAP_JAGGED_PASS), + MAP_NUM(MAP_JAGGED_PASS), }, { {OPPONENT_AMY_AND_LIV_1, OPPONENT_AMY_AND_LIV_2, OPPONENT_AMY_AND_LIV_4, OPPONENT_AMY_AND_LIV_5, OPPONENT_AMY_AND_LIV_6}, - MAP_GROUP_ROUTE103, - MAP_ID_ROUTE103, + MAP_GROUP(MAP_ROUTE103), + MAP_NUM(MAP_ROUTE103), }, { {OPPONENT_ERNEST_1, OPPONENT_ERNEST_2, OPPONENT_ERNEST_3, OPPONENT_ERNEST_4, OPPONENT_ERNEST_5}, - MAP_GROUP_ROUTE125, - MAP_ID_ROUTE125, + MAP_GROUP(MAP_ROUTE125), + MAP_NUM(MAP_ROUTE125), }, { {OPPONENT_EDWIN_1, OPPONENT_EDWIN_2, OPPONENT_EDWIN_3, OPPONENT_EDWIN_4, OPPONENT_EDWIN_5}, - MAP_GROUP_ROUTE110, - MAP_ID_ROUTE110, + MAP_GROUP(MAP_ROUTE110), + MAP_NUM(MAP_ROUTE110), }, { {OPPONENT_LYDIA_1, OPPONENT_LYDIA_2, OPPONENT_LYDIA_3, OPPONENT_LYDIA_4, OPPONENT_LYDIA_5}, - MAP_GROUP_ROUTE117, - MAP_ID_ROUTE117, + MAP_GROUP(MAP_ROUTE117), + MAP_NUM(MAP_ROUTE117), }, { {OPPONENT_ISAAC_1, OPPONENT_ISAAC_2, OPPONENT_ISAAC_3, OPPONENT_ISAAC_4, OPPONENT_ISAAC_5}, - MAP_GROUP_ROUTE117, - MAP_ID_ROUTE117, + MAP_GROUP(MAP_ROUTE117), + MAP_NUM(MAP_ROUTE117), }, { {OPPONENT_CATHERINE_1, OPPONENT_CATHERINE_2, OPPONENT_CATHERINE_3, OPPONENT_CATHERINE_4, OPPONENT_CATHERINE_5}, - MAP_GROUP_ROUTE119, - MAP_ID_ROUTE119, + MAP_GROUP(MAP_ROUTE119), + MAP_NUM(MAP_ROUTE119), }, { {OPPONENT_JACKSON_1, OPPONENT_JACKSON_2, OPPONENT_JACKSON_3, OPPONENT_JACKSON_4, OPPONENT_JACKSON_5}, - MAP_GROUP_ROUTE119, - MAP_ID_ROUTE119, + MAP_GROUP(MAP_ROUTE119), + MAP_NUM(MAP_ROUTE119), }, { {OPPONENT_HALEY_1, OPPONENT_HALEY_2, OPPONENT_HALEY_3, OPPONENT_HALEY_4, OPPONENT_HALEY_5}, - MAP_GROUP_ROUTE104, - MAP_ID_ROUTE104, + MAP_GROUP(MAP_ROUTE104), + MAP_NUM(MAP_ROUTE104), }, { {OPPONENT_JAMES_1, OPPONENT_JAMES_2, OPPONENT_JAMES_3, OPPONENT_JAMES_4, OPPONENT_JAMES_5}, - MAP_GROUP_PETALBURG_WOODS, - MAP_ID_PETALBURG_WOODS, + MAP_GROUP(MAP_PETALBURG_WOODS), + MAP_NUM(MAP_PETALBURG_WOODS), }, { {OPPONENT_TRENT_1, OPPONENT_TRENT_2, OPPONENT_TRENT_3, OPPONENT_TRENT_4, OPPONENT_TRENT_5}, - MAP_GROUP_ROUTE112, - MAP_ID_ROUTE112, + MAP_GROUP(MAP_ROUTE112), + MAP_NUM(MAP_ROUTE112), }, { {OPPONENT_LOIS_AND_HAL_1, OPPONENT_LOIS_AND_HAL_2, OPPONENT_LOIS_AND_HAL_3, OPPONENT_LOIS_AND_HAL_4, OPPONENT_LOIS_AND_HAL_5}, - MAP_GROUP_ABANDONED_SHIP_ROOMS2_1F, - MAP_ID_ABANDONED_SHIP_ROOMS2_1F, + MAP_GROUP(MAP_ABANDONED_SHIP_ROOMS2_1F), + MAP_NUM(MAP_ABANDONED_SHIP_ROOMS2_1F), }, { {OPPONENT_WALLY_3, OPPONENT_WALLY_4, OPPONENT_WALLY_5, OPPONENT_WALLY_6, OPPONENT_NONE}, - MAP_GROUP_VICTORY_ROAD_1F, - MAP_ID_VICTORY_ROAD_1F, + MAP_GROUP(MAP_VICTORY_ROAD_1F), + MAP_NUM(MAP_VICTORY_ROAD_1F), }, }; @@ -682,7 +682,7 @@ s8 BattleSetup_GetTerrain(void) if (MetatileBehavior_IsBridge(tileBehavior) == TRUE) return BATTLE_TERRAIN_WATER; } - if (gSaveBlock1.location.mapGroup == MAP_GROUP_ROUTE113 && gSaveBlock1.location.mapNum == MAP_ID_ROUTE113) + if (gSaveBlock1.location.mapGroup == MAP_GROUP(MAP_ROUTE113) && gSaveBlock1.location.mapNum == MAP_NUM(MAP_ROUTE113)) return BATTLE_TERRAIN_SAND; if (GetSav1Weather() == 8) return BATTLE_TERRAIN_SAND; diff --git a/src/field/braille_puzzles.c b/src/field/braille_puzzles.c index f5bb28a73..122747928 100644 --- a/src/field/braille_puzzles.c +++ b/src/field/braille_puzzles.c @@ -6,7 +6,7 @@ #include "fieldmap.h" #include "constants/flags.h" #include "main.h" -#include "map_constants.h" +#include "constants/maps.h" #include "map_obj_lock.h" #include "menu.h" #include "rom6.h" @@ -25,8 +25,8 @@ extern u8 S_OpenRegiceChamber[]; // regiice event script bool8 ShouldDoBrailleDigEffect(void) { if (!FlagGet(SYS_BRAILLE_DIG) - && (gSaveBlock1.location.mapGroup == MAP_GROUP_SEALED_CHAMBER_OUTER_ROOM - && gSaveBlock1.location.mapNum == MAP_ID_SEALED_CHAMBER_OUTER_ROOM)) + && (gSaveBlock1.location.mapGroup == MAP_GROUP(MAP_SEALED_CHAMBER_OUTER_ROOM) + && gSaveBlock1.location.mapNum == MAP_NUM(MAP_SEALED_CHAMBER_OUTER_ROOM))) { if (gSaveBlock1.pos.x == 10 && gSaveBlock1.pos.y == 3) return TRUE; @@ -68,7 +68,7 @@ bool8 CheckRelicanthWailord(void) bool8 ShouldDoBrailleStrengthEffect(void) { - if (!FlagGet(SYS_BRAILLE_STRENGTH) && (gSaveBlock1.location.mapGroup == MAP_GROUP_DESERT_RUINS && gSaveBlock1.location.mapNum == MAP_ID_DESERT_RUINS)) + if (!FlagGet(SYS_BRAILLE_STRENGTH) && (gSaveBlock1.location.mapGroup == MAP_GROUP(MAP_DESERT_RUINS) && gSaveBlock1.location.mapNum == MAP_NUM(MAP_DESERT_RUINS))) { if (gSaveBlock1.pos.x == 10 && gSaveBlock1.pos.y == 23) return TRUE; @@ -98,7 +98,7 @@ void DoBrailleStrengthEffect(void) bool8 ShouldDoBrailleFlyEffect(void) { - if (!FlagGet(SYS_BRAILLE_FLY) && (gSaveBlock1.location.mapGroup == MAP_GROUP_ANCIENT_TOMB && gSaveBlock1.location.mapNum == MAP_ID_ANCIENT_TOMB)) + if (!FlagGet(SYS_BRAILLE_FLY) && (gSaveBlock1.location.mapGroup == MAP_GROUP(MAP_ANCIENT_TOMB) && gSaveBlock1.location.mapNum == MAP_NUM(MAP_ANCIENT_TOMB))) { if (gSaveBlock1.pos.x == 8 && gSaveBlock1.pos.y == 25) return TRUE; diff --git a/src/field/field_map_obj.c b/src/field/field_map_obj.c index 20edbc34f..816de8917 100644 --- a/src/field/field_map_obj.c +++ b/src/field/field_map_obj.c @@ -14,7 +14,7 @@ #include "overworld.h" #include "sprite.h" #include "metatile_behavior.h" -#include "map_constants.h" +#include "constants/maps.h" #include "map_object_constants.h" #include "trainer_see.h" @@ -7054,7 +7054,7 @@ bool8 sub_8062088(struct MapObject *mapObject, struct Sprite *sprite) bool8 sub_80620B0(struct MapObject *mapObject, struct Sprite *sprite) { u8 objectId; - if (!TryGetFieldObjectIdByLocalIdAndMap(0xFF, MAP_GROUP_PETALBURG_CITY, MAP_ID_PETALBURG_CITY, &objectId)) + if (!TryGetFieldObjectIdByLocalIdAndMap(0xFF, MAP_GROUP(MAP_PETALBURG_CITY), MAP_NUM(MAP_PETALBURG_CITY), &objectId)) { an_look_any(mapObject, sprite, sub_805FE90(mapObject->coords2.x, mapObject->coords2.y, gMapObjects[objectId].coords2.x, gMapObjects[objectId].coords2.y)); } @@ -7065,7 +7065,7 @@ bool8 sub_80620B0(struct MapObject *mapObject, struct Sprite *sprite) bool8 sub_806210C(struct MapObject *mapObject, struct Sprite *sprite) { u8 objectId; - if (!TryGetFieldObjectIdByLocalIdAndMap(0xFF, MAP_GROUP_PETALBURG_CITY, MAP_ID_PETALBURG_CITY, &objectId)) + if (!TryGetFieldObjectIdByLocalIdAndMap(0xFF, MAP_GROUP(MAP_PETALBURG_CITY), MAP_NUM(MAP_PETALBURG_CITY), &objectId)) { an_look_any(mapObject, sprite, GetOppositeDirection(sub_805FE90(mapObject->coords2.x, mapObject->coords2.y, gMapObjects[objectId].coords2.x, gMapObjects[objectId].coords2.y))); } diff --git a/src/field/field_specials.c b/src/field/field_specials.c index f98c81041..41fa146a5 100644 --- a/src/field/field_specials.c +++ b/src/field/field_specials.c @@ -11,7 +11,7 @@ #include "field_camera.h" #include "field_player_avatar.h" #include "main.h" -#include "map_constants.h" +#include "constants/maps.h" #include "overworld.h" #include "script.h" #include "constants/songs.h" @@ -207,7 +207,7 @@ u16 GetRecordedCyclingRoadResults(void) { } void UpdateCyclingRoadState(void) { - if (gUnknown_020297F0.mapNum == MAP_ID_ROUTE110_SEASIDE_CYCLING_ROAD_NORTH_ENTRANCE && gUnknown_020297F0.mapGroup == MAP_GROUP_ROUTE110_SEASIDE_CYCLING_ROAD_NORTH_ENTRANCE) + if (gUnknown_020297F0.mapNum == MAP_NUM(MAP_ROUTE110_SEASIDE_CYCLING_ROAD_NORTH_ENTRANCE) && gUnknown_020297F0.mapGroup == MAP_GROUP(MAP_ROUTE110_SEASIDE_CYCLING_ROAD_NORTH_ENTRANCE)) { return; } @@ -259,38 +259,38 @@ u8 GetSSTidalLocation(s8 *mapGroup, s8 *mapNum, s16 *x, s16 *y) case 2: if (*varCruiseStepCount < 60) { - *mapNum = MAP_ID_ROUTE134; + *mapNum = MAP_NUM(MAP_ROUTE134); *x = *varCruiseStepCount + 19; } else if (*varCruiseStepCount < 140) { - *mapNum = MAP_ID_ROUTE133; + *mapNum = MAP_NUM(MAP_ROUTE133); *x = *varCruiseStepCount - 60; } else { - *mapNum = MAP_ID_ROUTE132; + *mapNum = MAP_NUM(MAP_ROUTE132); *x = *varCruiseStepCount - 140; } break; case 7: if (*varCruiseStepCount < 66) { - *mapNum = MAP_ID_ROUTE132; + *mapNum = MAP_NUM(MAP_ROUTE132); *x = 65 - *varCruiseStepCount; } else if (*varCruiseStepCount < 146) { - *mapNum = MAP_ID_ROUTE133; + *mapNum = MAP_NUM(MAP_ROUTE133); *x = 145 - *varCruiseStepCount; } else { - *mapNum = MAP_ID_ROUTE134; + *mapNum = MAP_NUM(MAP_ROUTE134); *x = 224 - *varCruiseStepCount; } break; } - *mapGroup = MAP_GROUP_ROUTE132; + *mapGroup = MAP_GROUP(MAP_ROUTE132); *y = 20; return 0; } @@ -702,11 +702,11 @@ void CableCarWarp(void) { if (gSpecialVar_0x8004 != 0) { - Overworld_SetWarpDestination(MAP_GROUP_ROUTE112_CABLE_CAR_STATION, MAP_ID_ROUTE112_CABLE_CAR_STATION, -1, 6, 4); + Overworld_SetWarpDestination(MAP_GROUP(MAP_ROUTE112_CABLE_CAR_STATION), MAP_NUM(MAP_ROUTE112_CABLE_CAR_STATION), -1, 6, 4); } else { - Overworld_SetWarpDestination(MAP_GROUP_MT_CHIMNEY_CABLE_CAR_STATION, MAP_ID_MT_CHIMNEY_CABLE_CAR_STATION, -1, 6, 4); + Overworld_SetWarpDestination(MAP_GROUP(MAP_MT_CHIMNEY_CABLE_CAR_STATION), MAP_NUM(MAP_MT_CHIMNEY_CABLE_CAR_STATION), -1, 6, 4); } } @@ -1001,22 +1001,22 @@ void SetDepartmentStoreFloorVar(void) u8 deptStoreFloor; switch (gSaveBlock1.warp2.mapNum) { - case MAP_ID_LILYCOVE_CITY_DEPARTMENT_STORE_1F: + case MAP_NUM(MAP_LILYCOVE_CITY_DEPARTMENT_STORE_1F): deptStoreFloor = 0; break; - case MAP_ID_LILYCOVE_CITY_DEPARTMENT_STORE_2F: + case MAP_NUM(MAP_LILYCOVE_CITY_DEPARTMENT_STORE_2F): deptStoreFloor = 1; break; - case MAP_ID_LILYCOVE_CITY_DEPARTMENT_STORE_3F: + case MAP_NUM(MAP_LILYCOVE_CITY_DEPARTMENT_STORE_3F): deptStoreFloor = 2; break; - case MAP_ID_LILYCOVE_CITY_DEPARTMENT_STORE_4F: + case MAP_NUM(MAP_LILYCOVE_CITY_DEPARTMENT_STORE_4F): deptStoreFloor = 3; break; - case MAP_ID_LILYCOVE_CITY_DEPARTMENT_STORE_5F: + case MAP_NUM(MAP_LILYCOVE_CITY_DEPARTMENT_STORE_5F): deptStoreFloor = 4; break; - case MAP_ID_LILYCOVE_CITY_DEPARTMENT_STORE_ROOFTOP: + case MAP_NUM(MAP_LILYCOVE_CITY_DEPARTMENT_STORE_ROOFTOP): deptStoreFloor = 15; break; default: @@ -1881,7 +1881,7 @@ bool8 ScrSpecial_AreLeadMonEVsMaxedOut(void) u8 sub_810F5BC(void) { - if (!FlagGet(0xc7) && gSaveBlock1.location.mapGroup == MAP_GROUP_RUSTURF_TUNNEL && gSaveBlock1.location.mapNum == MAP_ID_RUSTURF_TUNNEL) + if (!FlagGet(0xc7) && gSaveBlock1.location.mapGroup == MAP_GROUP(MAP_RUSTURF_TUNNEL) && gSaveBlock1.location.mapNum == MAP_NUM(MAP_RUSTURF_TUNNEL)) { if (FlagGet(0x3a3)) { diff --git a/src/field/heal_location.c b/src/field/heal_location.c index 42bc18567..0b13f251f 100644 --- a/src/field/heal_location.c +++ b/src/field/heal_location.c @@ -1,33 +1,33 @@ #include "global.h" #include "heal_location.h" -#include "map_constants.h" +#include "constants/maps.h" #define NUM_HEAL_LOCATIONS 22 static const struct HealLocation sHealLocations[] = { - {MAP_GROUP_LITTLEROOT_TOWN_BRENDANS_HOUSE_2F, MAP_ID_LITTLEROOT_TOWN_BRENDANS_HOUSE_2F, 4, 2}, - {MAP_GROUP_LITTLEROOT_TOWN_MAYS_HOUSE_2F, MAP_ID_LITTLEROOT_TOWN_MAYS_HOUSE_2F, 4, 2}, - {MAP_GROUP_PETALBURG_CITY, MAP_ID_PETALBURG_CITY, 20, 17}, - {MAP_GROUP_SLATEPORT_CITY, MAP_ID_SLATEPORT_CITY, 19, 20}, - {MAP_GROUP_MAUVILLE_CITY, MAP_ID_MAUVILLE_CITY, 22, 6}, - {MAP_GROUP_RUSTBORO_CITY, MAP_ID_RUSTBORO_CITY, 16, 39}, - {MAP_GROUP_FORTREE_CITY, MAP_ID_FORTREE_CITY, 5, 7}, - {MAP_GROUP_LILYCOVE_CITY, MAP_ID_LILYCOVE_CITY, 24, 15}, - {MAP_GROUP_MOSSDEEP_CITY, MAP_ID_MOSSDEEP_CITY, 28, 17}, - {MAP_GROUP_SOOTOPOLIS_CITY, MAP_ID_SOOTOPOLIS_CITY, 43, 32}, - {MAP_GROUP_EVER_GRANDE_CITY, MAP_ID_EVER_GRANDE_CITY, 27, 49}, - {MAP_GROUP_LITTLEROOT_TOWN, MAP_ID_LITTLEROOT_TOWN, 5, 9}, - {MAP_GROUP_LITTLEROOT_TOWN, MAP_ID_LITTLEROOT_TOWN, 14, 9}, - {MAP_GROUP_OLDALE_TOWN, MAP_ID_OLDALE_TOWN, 6, 17}, - {MAP_GROUP_DEWFORD_TOWN, MAP_ID_DEWFORD_TOWN, 2, 11}, - {MAP_GROUP_LAVARIDGE_TOWN, MAP_ID_LAVARIDGE_TOWN, 9, 7}, - {MAP_GROUP_FALLARBOR_TOWN, MAP_ID_FALLARBOR_TOWN, 14, 8}, - {MAP_GROUP_VERDANTURF_TOWN, MAP_ID_VERDANTURF_TOWN, 16, 4}, - {MAP_GROUP_PACIFIDLOG_TOWN, MAP_ID_PACIFIDLOG_TOWN, 8, 16}, - {MAP_GROUP_EVER_GRANDE_CITY, MAP_ID_EVER_GRANDE_CITY, 18, 6}, - {MAP_GROUP_BATTLE_TOWER_OUTSIDE, MAP_ID_BATTLE_TOWER_OUTSIDE, 14, 9}, - {MAP_GROUP_SOUTHERN_ISLAND_EXTERIOR, MAP_ID_SOUTHERN_ISLAND_EXTERIOR, 15, 20}, + {MAP_GROUP(MAP_LITTLEROOT_TOWN_BRENDANS_HOUSE_2F), MAP_NUM(MAP_LITTLEROOT_TOWN_BRENDANS_HOUSE_2F), 4, 2}, + {MAP_GROUP(MAP_LITTLEROOT_TOWN_MAYS_HOUSE_2F), MAP_NUM(MAP_LITTLEROOT_TOWN_MAYS_HOUSE_2F), 4, 2}, + {MAP_GROUP(MAP_PETALBURG_CITY), MAP_NUM(MAP_PETALBURG_CITY), 20, 17}, + {MAP_GROUP(MAP_SLATEPORT_CITY), MAP_NUM(MAP_SLATEPORT_CITY), 19, 20}, + {MAP_GROUP(MAP_MAUVILLE_CITY), MAP_NUM(MAP_MAUVILLE_CITY), 22, 6}, + {MAP_GROUP(MAP_RUSTBORO_CITY), MAP_NUM(MAP_RUSTBORO_CITY), 16, 39}, + {MAP_GROUP(MAP_FORTREE_CITY), MAP_NUM(MAP_FORTREE_CITY), 5, 7}, + {MAP_GROUP(MAP_LILYCOVE_CITY), MAP_NUM(MAP_LILYCOVE_CITY), 24, 15}, + {MAP_GROUP(MAP_MOSSDEEP_CITY), MAP_NUM(MAP_MOSSDEEP_CITY), 28, 17}, + {MAP_GROUP(MAP_SOOTOPOLIS_CITY), MAP_NUM(MAP_SOOTOPOLIS_CITY), 43, 32}, + {MAP_GROUP(MAP_EVER_GRANDE_CITY), MAP_NUM(MAP_EVER_GRANDE_CITY), 27, 49}, + {MAP_GROUP(MAP_LITTLEROOT_TOWN), MAP_NUM(MAP_LITTLEROOT_TOWN), 5, 9}, + {MAP_GROUP(MAP_LITTLEROOT_TOWN), MAP_NUM(MAP_LITTLEROOT_TOWN), 14, 9}, + {MAP_GROUP(MAP_OLDALE_TOWN), MAP_NUM(MAP_OLDALE_TOWN), 6, 17}, + {MAP_GROUP(MAP_DEWFORD_TOWN), MAP_NUM(MAP_DEWFORD_TOWN), 2, 11}, + {MAP_GROUP(MAP_LAVARIDGE_TOWN), MAP_NUM(MAP_LAVARIDGE_TOWN), 9, 7}, + {MAP_GROUP(MAP_FALLARBOR_TOWN), MAP_NUM(MAP_FALLARBOR_TOWN), 14, 8}, + {MAP_GROUP(MAP_VERDANTURF_TOWN), MAP_NUM(MAP_VERDANTURF_TOWN), 16, 4}, + {MAP_GROUP(MAP_PACIFIDLOG_TOWN), MAP_NUM(MAP_PACIFIDLOG_TOWN), 8, 16}, + {MAP_GROUP(MAP_EVER_GRANDE_CITY), MAP_NUM(MAP_EVER_GRANDE_CITY), 18, 6}, + {MAP_GROUP(MAP_BATTLE_TOWER_OUTSIDE), MAP_NUM(MAP_BATTLE_TOWER_OUTSIDE), 14, 9}, + {MAP_GROUP(MAP_SOUTHERN_ISLAND_EXTERIOR), MAP_NUM(MAP_SOUTHERN_ISLAND_EXTERIOR), 15, 20}, }; u32 GetHealLocationIndexByMap(u16 mapGroup, u16 mapNum) diff --git a/src/field/menu_helpers.c b/src/field/menu_helpers.c index 4d5c6478c..b9d694bec 100644 --- a/src/field/menu_helpers.c +++ b/src/field/menu_helpers.c @@ -4,7 +4,7 @@ #include "link.h" #include "mail_data.h" #include "main.h" -#include "map_constants.h" +#include "constants/maps.h" #include "menu.h" #include "menu_helpers.h" #include "overworld.h" @@ -261,7 +261,7 @@ bool8 sub_80F92F4(u16 itemId) return TRUE; } - if (!(gSaveBlock1.location.mapGroup == MAP_GROUP_TRADE_CENTER && gSaveBlock1.location.mapNum == MAP_ID_TRADE_CENTER)) + if (!(gSaveBlock1.location.mapGroup == MAP_GROUP(MAP_TRADE_CENTER) && gSaveBlock1.location.mapNum == MAP_NUM(MAP_TRADE_CENTER))) { return TRUE; } diff --git a/src/field/overworld.c b/src/field/overworld.c index d286a1951..d27d8e06e 100644 --- a/src/field/overworld.c +++ b/src/field/overworld.c @@ -25,7 +25,7 @@ #include "link.h" #include "load_save.h" #include "main.h" -#include "map_constants.h" +#include "constants/maps.h" #include "map_name_popup.h" #include "menu.h" #include "metatile_behavior.h" @@ -738,9 +738,9 @@ u16 cur_mapdata_block_role_at_screen_center_acc_to_sav1(void) bool32 Overworld_IsBikingAllowed(void) { // is player in cycling road entrance? - if (gSaveBlock1.location.mapGroup == MAP_GROUP_ROUTE110_SEASIDE_CYCLING_ROAD_SOUTH_ENTRANCE - && (gSaveBlock1.location.mapNum == MAP_ID_ROUTE110_SEASIDE_CYCLING_ROAD_SOUTH_ENTRANCE - || gSaveBlock1.location.mapNum == MAP_ID_ROUTE110_SEASIDE_CYCLING_ROAD_NORTH_ENTRANCE)) + if (gSaveBlock1.location.mapGroup == MAP_GROUP(MAP_ROUTE110_SEASIDE_CYCLING_ROAD_SOUTH_ENTRANCE) + && (gSaveBlock1.location.mapNum == MAP_NUM(MAP_ROUTE110_SEASIDE_CYCLING_ROAD_SOUTH_ENTRANCE) + || gSaveBlock1.location.mapNum == MAP_NUM(MAP_ROUTE110_SEASIDE_CYCLING_ROAD_NORTH_ENTRANCE))) return TRUE; // is player indoor, in a secret base, or underwater? @@ -752,11 +752,11 @@ bool32 Overworld_IsBikingAllowed(void) return FALSE; // Thou shalt not bike on the sacred resting grounds of Kyogre/Groudon. - if (gSaveBlock1.location.mapGroup == MAP_GROUP_SEAFLOOR_CAVERN_ROOM9 - && gSaveBlock1.location.mapNum == MAP_ID_SEAFLOOR_CAVERN_ROOM9) + if (gSaveBlock1.location.mapGroup == MAP_GROUP(MAP_SEAFLOOR_CAVERN_ROOM9) + && gSaveBlock1.location.mapNum == MAP_NUM(MAP_SEAFLOOR_CAVERN_ROOM9)) return FALSE; - if (gSaveBlock1.location.mapGroup == MAP_GROUP_CAVE_OF_ORIGIN_B4F - && gSaveBlock1.location.mapNum == MAP_ID_CAVE_OF_ORIGIN_B4F) + if (gSaveBlock1.location.mapGroup == MAP_GROUP(MAP_CAVE_OF_ORIGIN_B4F) + && gSaveBlock1.location.mapNum == MAP_NUM(MAP_CAVE_OF_ORIGIN_B4F)) return FALSE; return TRUE; @@ -798,16 +798,16 @@ static bool16 ShouldLegendaryMusicPlayAtLocation(struct WarpData *warp) { switch (warp->mapNum) { - case MAP_ID_LILYCOVE_CITY: - case MAP_ID_MOSSDEEP_CITY: - case MAP_ID_SOOTOPOLIS_CITY: - case MAP_ID_EVER_GRANDE_CITY: + case MAP_NUM(MAP_LILYCOVE_CITY): + case MAP_NUM(MAP_MOSSDEEP_CITY): + case MAP_NUM(MAP_SOOTOPOLIS_CITY): + case MAP_NUM(MAP_EVER_GRANDE_CITY): return TRUE; - case MAP_ID_ROUTE124: - case MAP_ID_ROUTE125: - case MAP_ID_ROUTE126: - case MAP_ID_ROUTE127: - case MAP_ID_ROUTE128: + case MAP_NUM(MAP_ROUTE124): + case MAP_NUM(MAP_ROUTE125): + case MAP_NUM(MAP_ROUTE126): + case MAP_NUM(MAP_ROUTE127): + case MAP_NUM(MAP_ROUTE128): return TRUE; } } @@ -818,10 +818,10 @@ static bool16 IsInfiltratedWeatherInstitute(struct WarpData *warp) { if (VarGet(VAR_WEATHER_INSTITUTE_CLEARED)) return FALSE; - if (warp->mapGroup != MAP_GROUP_ROUTE119_WEATHER_INSTITUTE_1F) + if (warp->mapGroup != MAP_GROUP(MAP_ROUTE119_WEATHER_INSTITUTE_1F)) return FALSE; - if (warp->mapNum == MAP_ID_ROUTE119_WEATHER_INSTITUTE_1F - || warp->mapNum == MAP_ID_ROUTE119_WEATHER_INSTITUTE_2F) + if (warp->mapNum == MAP_NUM(MAP_ROUTE119_WEATHER_INSTITUTE_1F) + || warp->mapNum == MAP_NUM(MAP_ROUTE119_WEATHER_INSTITUTE_2F)) return TRUE; return FALSE; } @@ -841,8 +841,8 @@ u16 GetCurrLocationDefaultMusic(void) u16 music; // Play the desert music only when the sandstorm is active on Route 111. - if (gSaveBlock1.location.mapGroup == MAP_GROUP_ROUTE111 - && gSaveBlock1.location.mapNum == MAP_ID_ROUTE111 + if (gSaveBlock1.location.mapGroup == MAP_GROUP(MAP_ROUTE111) + && gSaveBlock1.location.mapNum == MAP_NUM(MAP_ROUTE111) && GetSav1Weather() == 8) return BGM_ASHROAD; @@ -869,8 +869,8 @@ u16 GetWarpDestinationMusic(void) } else { - if (gSaveBlock1.location.mapGroup == MAP_GROUP_MAUVILLE_CITY - && gSaveBlock1.location.mapNum == MAP_ID_MAUVILLE_CITY) + if (gSaveBlock1.location.mapGroup == MAP_GROUP(MAP_MAUVILLE_CITY) + && gSaveBlock1.location.mapNum == MAP_NUM(MAP_MAUVILLE_CITY)) return BGM_DOORO_X1; else return BGM_GRANROAD; @@ -1024,8 +1024,8 @@ void UpdateAmbientCry(s16 *state, u16 *delayCounter) void ChooseAmbientCrySpecies(void) { - if ((gSaveBlock1.location.mapGroup == MAP_GROUP_ROUTE130 - && gSaveBlock1.location.mapNum == MAP_ID_ROUTE130) + if ((gSaveBlock1.location.mapGroup == MAP_GROUP(MAP_ROUTE130) + && gSaveBlock1.location.mapNum == MAP_NUM(MAP_ROUTE130)) && !IsMirageIslandPresent()) { // Only play water pokemon cries on this route diff --git a/src/field/region_map.c b/src/field/region_map.c index df51d6173..5fbe930e1 100644 --- a/src/field/region_map.c +++ b/src/field/region_map.c @@ -4,7 +4,7 @@ #include "field_specials.h" #include "m4a.h" #include "main.h" -#include "map_constants.h" +#include "constants/maps.h" #include "menu.h" #include "palette.h" #include "pokemon_menu.h" @@ -707,9 +707,9 @@ static void InitializeCursorPosition(void) u16 r9; if (gSaveBlock1.location.mapGroup == 25 - && (gSaveBlock1.location.mapNum == MAP_ID_SS_TIDAL_CORRIDOR - || gSaveBlock1.location.mapNum == MAP_ID_SS_TIDAL_LOWER_DECK - || gSaveBlock1.location.mapNum == MAP_ID_SS_TIDAL_ROOMS)) + && (gSaveBlock1.location.mapNum == MAP_NUM(MAP_SS_TIDAL_CORRIDOR) + || gSaveBlock1.location.mapNum == MAP_NUM(MAP_SS_TIDAL_LOWER_DECK) + || gSaveBlock1.location.mapNum == MAP_NUM(MAP_SS_TIDAL_ROOMS))) { sub_80FB600(); return; diff --git a/src/field/rotating_gate.c b/src/field/rotating_gate.c index c3b6a8a71..c17b604c2 100644 --- a/src/field/rotating_gate.c +++ b/src/field/rotating_gate.c @@ -3,7 +3,7 @@ #include "event_data.h" #include "field_map_obj.h" #include "fieldmap.h" -#include "map_constants.h" +#include "constants/maps.h" #include "constants/songs.h" #include "sound.h" #include "sprite.h" @@ -622,14 +622,14 @@ static EWRAM_DATA u8 gRotatingGate_PuzzleCount = 0; static int GetCurrentMapRotatingGatePuzzleType(void) { - if (gSaveBlock1.location.mapGroup == MAP_GROUP_FORTREE_CITY_GYM && - gSaveBlock1.location.mapNum == MAP_ID_FORTREE_CITY_GYM) + if (gSaveBlock1.location.mapGroup == MAP_GROUP(MAP_FORTREE_CITY_GYM) && + gSaveBlock1.location.mapNum == MAP_NUM(MAP_FORTREE_CITY_GYM)) { return PUZZLE_FORTREE_CITY_GYM; } - if (gSaveBlock1.location.mapGroup == MAP_GROUP_ROUTE110_TRICK_HOUSE_PUZZLE6 && - gSaveBlock1.location.mapNum == MAP_ID_ROUTE110_TRICK_HOUSE_PUZZLE6) + if (gSaveBlock1.location.mapGroup == MAP_GROUP(MAP_ROUTE110_TRICK_HOUSE_PUZZLE6) && + gSaveBlock1.location.mapNum == MAP_NUM(MAP_ROUTE110_TRICK_HOUSE_PUZZLE6)) { return PUZZLE_ROUTE110_TRICK_HOUSE_PUZZLE6; } diff --git a/src/field/secret_base.c b/src/field/secret_base.c index 257fe4ee7..c1ca10c1f 100644 --- a/src/field/secret_base.c +++ b/src/field/secret_base.c @@ -17,7 +17,7 @@ #include "main.h" #include "sound.h" #include "constants/songs.h" -#include "map_constants.h" +#include "constants/maps.h" #include "map_name_popup.h" #include "menu.h" #include "menu_helpers.h" @@ -68,30 +68,30 @@ const struct const u8 gUnknown_083D1374[] = { - MAP_ID_SECRET_BASE_RED_CAVE1, 0, 1, 3, - MAP_ID_SECRET_BASE_RED_CAVE2, 0, 5, 9, - MAP_ID_SECRET_BASE_RED_CAVE3, 0, 1, 3, - MAP_ID_SECRET_BASE_RED_CAVE4, 0, 7, 13, - MAP_ID_SECRET_BASE_BROWN_CAVE1, 0, 2, 3, - MAP_ID_SECRET_BASE_BROWN_CAVE2, 0, 9, 2, - MAP_ID_SECRET_BASE_BROWN_CAVE3, 0, 13, 4, - MAP_ID_SECRET_BASE_BROWN_CAVE4, 0, 1, 2, - MAP_ID_SECRET_BASE_BLUE_CAVE1, 0, 1, 3, - MAP_ID_SECRET_BASE_BLUE_CAVE2, 0, 1, 2, - MAP_ID_SECRET_BASE_BLUE_CAVE3, 0, 3, 15, - MAP_ID_SECRET_BASE_BLUE_CAVE4, 0, 3, 14, - MAP_ID_SECRET_BASE_YELLOW_CAVE1, 0, 9, 3, - MAP_ID_SECRET_BASE_YELLOW_CAVE2, 0, 8, 7, - MAP_ID_SECRET_BASE_YELLOW_CAVE3, 0, 3, 6, - MAP_ID_SECRET_BASE_YELLOW_CAVE4, 0, 5, 9, - MAP_ID_SECRET_BASE_TREE1, 0, 2, 3, - MAP_ID_SECRET_BASE_TREE2, 0, 5, 6, - MAP_ID_SECRET_BASE_TREE3, 0, 15, 3, - MAP_ID_SECRET_BASE_TREE4, 0, 4, 10, - MAP_ID_SECRET_BASE_SHRUB1, 0, 3, 3, - MAP_ID_SECRET_BASE_SHRUB2, 0, 1, 2, - MAP_ID_SECRET_BASE_SHRUB3, 0, 7, 8, - MAP_ID_SECRET_BASE_SHRUB4, 0, 9, 6 + MAP_NUM(MAP_SECRET_BASE_RED_CAVE1), 0, 1, 3, + MAP_NUM(MAP_SECRET_BASE_RED_CAVE2), 0, 5, 9, + MAP_NUM(MAP_SECRET_BASE_RED_CAVE3), 0, 1, 3, + MAP_NUM(MAP_SECRET_BASE_RED_CAVE4), 0, 7, 13, + MAP_NUM(MAP_SECRET_BASE_BROWN_CAVE1), 0, 2, 3, + MAP_NUM(MAP_SECRET_BASE_BROWN_CAVE2), 0, 9, 2, + MAP_NUM(MAP_SECRET_BASE_BROWN_CAVE3), 0, 13, 4, + MAP_NUM(MAP_SECRET_BASE_BROWN_CAVE4), 0, 1, 2, + MAP_NUM(MAP_SECRET_BASE_BLUE_CAVE1), 0, 1, 3, + MAP_NUM(MAP_SECRET_BASE_BLUE_CAVE2), 0, 1, 2, + MAP_NUM(MAP_SECRET_BASE_BLUE_CAVE3), 0, 3, 15, + MAP_NUM(MAP_SECRET_BASE_BLUE_CAVE4), 0, 3, 14, + MAP_NUM(MAP_SECRET_BASE_YELLOW_CAVE1), 0, 9, 3, + MAP_NUM(MAP_SECRET_BASE_YELLOW_CAVE2), 0, 8, 7, + MAP_NUM(MAP_SECRET_BASE_YELLOW_CAVE3), 0, 3, 6, + MAP_NUM(MAP_SECRET_BASE_YELLOW_CAVE4), 0, 5, 9, + MAP_NUM(MAP_SECRET_BASE_TREE1), 0, 2, 3, + MAP_NUM(MAP_SECRET_BASE_TREE2), 0, 5, 6, + MAP_NUM(MAP_SECRET_BASE_TREE3), 0, 15, 3, + MAP_NUM(MAP_SECRET_BASE_TREE4), 0, 4, 10, + MAP_NUM(MAP_SECRET_BASE_SHRUB1), 0, 3, 3, + MAP_NUM(MAP_SECRET_BASE_SHRUB2), 0, 1, 2, + MAP_NUM(MAP_SECRET_BASE_SHRUB3), 0, 7, 8, + MAP_NUM(MAP_SECRET_BASE_SHRUB4), 0, 9, 6 }; const struct MenuAction2 gUnknown_083D13D4[] = { @@ -316,7 +316,7 @@ void sub_80BB970(struct MapEvents *events) void sub_80BBA14(void) { s8 idx = 4 * (gUnknown_020387DC / 10); - warp1_set_2(MAP_GROUP_SECRET_BASE_RED_CAVE1, gUnknown_083D1374[idx], gUnknown_083D1374[idx + 1]); + warp1_set_2(MAP_GROUP(MAP_SECRET_BASE_RED_CAVE1), gUnknown_083D1374[idx], gUnknown_083D1374[idx + 1]); } void sub_80BBA48(u8 taskid) @@ -401,7 +401,7 @@ void sub_80BBC78(void) bool8 CurrentMapIsSecretBase(void) { - if (gSaveBlock1.location.mapGroup == MAP_GROUP_SECRET_BASE_SHRUB4 && (u8)(gSaveBlock1.location.mapNum) <= MAP_ID_SECRET_BASE_SHRUB4) + if (gSaveBlock1.location.mapGroup == MAP_GROUP(MAP_SECRET_BASE_SHRUB4) && (u8)(gSaveBlock1.location.mapNum) <= MAP_NUM(MAP_SECRET_BASE_SHRUB4)) return TRUE; return FALSE; } diff --git a/src/field/tv.c b/src/field/tv.c index 2d345eb6c..15a3f4d4d 100644 --- a/src/field/tv.c +++ b/src/field/tv.c @@ -16,7 +16,7 @@ #include "pokedex.h" #include "naming_screen.h" #include "overworld.h" -#include "map_constants.h" +#include "constants/maps.h" #include "strings.h" #include "battle.h" #include "link.h" @@ -26,7 +26,7 @@ #include "item.h" #include "constants/items.h" #include "link.h" -#include "map_constants.h" +#include "constants/maps.h" #include "naming_screen.h" #include "pokedex.h" #include "region_map.h" @@ -551,8 +551,8 @@ void UpdateTVScreensOnMap(int width, int height) case 2: break; default: - if (gSaveBlock1.location.mapGroup == MAP_GROUP_LILYCOVE_CITY_COVE_LILY_MOTEL_1F - && gSaveBlock1.location.mapNum == MAP_ID_LILYCOVE_CITY_COVE_LILY_MOTEL_1F) + if (gSaveBlock1.location.mapGroup == MAP_GROUP(MAP_LILYCOVE_CITY_COVE_LILY_MOTEL_1F) + && gSaveBlock1.location.mapNum == MAP_NUM(MAP_LILYCOVE_CITY_COVE_LILY_MOTEL_1F)) { SetTVMetatilesOnMap(width, height, 0x3); } @@ -1460,16 +1460,16 @@ bool8 IsPriceDiscounted(u8 arg0) switch (arg0) { case 1: - if (gSaveBlock1.location.mapGroup == MAP_GROUP_SLATEPORT_CITY - && gSaveBlock1.location.mapNum == MAP_ID_SLATEPORT_CITY + if (gSaveBlock1.location.mapGroup == MAP_GROUP(MAP_SLATEPORT_CITY) + && gSaveBlock1.location.mapNum == MAP_NUM(MAP_SLATEPORT_CITY) && gScriptLastTalked == 0x1a) return TRUE; else return FALSE; break; case 3: - if (gSaveBlock1.location.mapGroup == MAP_GROUP_LILYCOVE_CITY_DEPARTMENT_STORE_ROOFTOP - && gSaveBlock1.location.mapNum == MAP_ID_LILYCOVE_CITY_DEPARTMENT_STORE_ROOFTOP) + if (gSaveBlock1.location.mapGroup == MAP_GROUP(MAP_LILYCOVE_CITY_DEPARTMENT_STORE_ROOFTOP) + && gSaveBlock1.location.mapNum == MAP_NUM(MAP_LILYCOVE_CITY_DEPARTMENT_STORE_ROOFTOP)) return TRUE; else return FALSE; @@ -2121,16 +2121,16 @@ u32 GetPlayerTrainerId(void) u8 CheckForBigMovieOrEmergencyNewsOnTV(void) { - if (gSaveBlock1.location.mapGroup != MAP_GROUP_LITTLEROOT_TOWN_BRENDANS_HOUSE_1F) + if (gSaveBlock1.location.mapGroup != MAP_GROUP(MAP_LITTLEROOT_TOWN_BRENDANS_HOUSE_1F)) return 0; if (gSaveBlock2.playerGender == MALE) { - if (gSaveBlock1.location.mapNum != MAP_ID_LITTLEROOT_TOWN_BRENDANS_HOUSE_1F) + if (gSaveBlock1.location.mapNum != MAP_NUM(MAP_LITTLEROOT_TOWN_BRENDANS_HOUSE_1F)) return 0; } else { - if (gSaveBlock1.location.mapNum != MAP_ID_LITTLEROOT_TOWN_MAYS_HOUSE_1F) + if (gSaveBlock1.location.mapNum != MAP_NUM(MAP_LITTLEROOT_TOWN_MAYS_HOUSE_1F)) return 0; } if (FlagGet(SYS_TV_LATI) == 1) @@ -2142,11 +2142,11 @@ u8 CheckForBigMovieOrEmergencyNewsOnTV(void) void GetMomOrDadStringForTVMessage(void) { - if (gSaveBlock1.location.mapGroup == MAP_GROUP_LITTLEROOT_TOWN_BRENDANS_HOUSE_1F) + if (gSaveBlock1.location.mapGroup == MAP_GROUP(MAP_LITTLEROOT_TOWN_BRENDANS_HOUSE_1F)) { if (gSaveBlock2.playerGender == MALE) { - if (gSaveBlock1.location.mapNum == MAP_ID_LITTLEROOT_TOWN_BRENDANS_HOUSE_1F) + if (gSaveBlock1.location.mapNum == MAP_NUM(MAP_LITTLEROOT_TOWN_BRENDANS_HOUSE_1F)) { StringCopy(gStringVar1, gOtherText_Mom); VarSet(VAR_0x4003, 1); @@ -2154,7 +2154,7 @@ void GetMomOrDadStringForTVMessage(void) } else { - if (gSaveBlock1.location.mapNum == MAP_ID_LITTLEROOT_TOWN_MAYS_HOUSE_1F) + if (gSaveBlock1.location.mapNum == MAP_NUM(MAP_LITTLEROOT_TOWN_MAYS_HOUSE_1F)) { StringCopy(gStringVar1, gOtherText_Mom); VarSet(VAR_0x4003, 1); diff --git a/src/field/wild_encounter.c b/src/field/wild_encounter.c index b19b1d4c2..2376f582c 100644 --- a/src/field/wild_encounter.c +++ b/src/field/wild_encounter.c @@ -5,7 +5,7 @@ #include "event_data.h" #include "field_player_avatar.h" #include "fieldmap.h" -#include "map_constants.h" +#include "constants/maps.h" #include "metatile_behavior.h" #include "pokeblock.h" #include "random.h" @@ -2953,8 +2953,8 @@ static bool8 CheckFeebas(void) u8 route119section = 0; u16 waterTileNum; - if (gSaveBlock1.location.mapGroup == MAP_GROUP_ROUTE119 - && gSaveBlock1.location.mapNum == MAP_ID_ROUTE119) + if (gSaveBlock1.location.mapGroup == MAP_GROUP(MAP_ROUTE119) + && gSaveBlock1.location.mapNum == MAP_NUM(MAP_ROUTE119)) { GetXYCoordsOneStepInFrontOfPlayer(&x, &y); x -= 7; -- cgit v1.2.3 From 611984671904aa19cf678c59ff2a8682cba09224 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Sun, 26 Nov 2017 17:01:50 -0600 Subject: opponents, map_objects, hold_effects, game_stat, decorations, battle_move_effects constants --- src/battle/battle_2.c | 4 ++-- src/battle/battle_3.c | 4 ++-- src/battle/battle_4.c | 4 ++-- src/battle/battle_ai.c | 2 +- src/battle/battle_records.c | 2 +- src/battle/battle_setup.c | 2 +- src/battle/calculate_base_damage.c | 4 ++-- src/field/battle_tower.c | 2 +- src/field/decoration.c | 3 ++- src/field/decoration_inventory.c | 5 +---- src/field/field_map_obj.c | 2 +- src/field/field_player_avatar.c | 2 +- src/field/item.c | 2 +- src/field/secret_base.c | 1 + src/field/trader.c | 1 + src/pokemon/pokemon_3.c | 2 +- src/pokemon/pokemon_data.c | 2 +- 17 files changed, 22 insertions(+), 22 deletions(-) (limited to 'src') diff --git a/src/battle/battle_2.c b/src/battle/battle_2.c index 5b283483c..ff3df7235 100644 --- a/src/battle/battle_2.c +++ b/src/battle/battle_2.c @@ -27,8 +27,8 @@ #include "unknown_task.h" #include "util.h" #include "constants/items.h" -#include "hold_effects.h" -#include "battle_move_effects.h" +#include "constants/hold_effects.h" +#include "constants/battle_move_effects.h" #include "ewram.h" struct UnknownStruct7 diff --git a/src/battle/battle_3.c b/src/battle/battle_3.c index 0d9e8c41d..342395c34 100644 --- a/src/battle/battle_3.c +++ b/src/battle/battle_3.c @@ -5,13 +5,13 @@ #include "item.h" #include "constants/items.h" #include "event_data.h" -#include "hold_effects.h" +#include "constants/hold_effects.h" #include "constants/species.h" #include "pokemon.h" #include "data2.h" #include "random.h" #include "text.h" -#include "battle_move_effects.h" +#include "constants/battle_move_effects.h" #include "string_util.h" #include "constants/flags.h" #include "ewram.h" diff --git a/src/battle/battle_4.c b/src/battle/battle_4.c index 59a187cda..6821adca3 100644 --- a/src/battle/battle_4.c +++ b/src/battle/battle_4.c @@ -1,12 +1,12 @@ #include "global.h" #include "battle.h" -#include "battle_move_effects.h" +#include "constants/battle_move_effects.h" #include "constants/moves.h" #include "constants/abilities.h" #include "item.h" #include "constants/items.h" #include "data2.h" -#include "hold_effects.h" +#include "constants/hold_effects.h" #include "random.h" #include "rom3.h" #include "constants/species.h" diff --git a/src/battle/battle_ai.c b/src/battle/battle_ai.c index 276563202..1fa7a2ed2 100644 --- a/src/battle/battle_ai.c +++ b/src/battle/battle_ai.c @@ -2,7 +2,7 @@ #include "battle_ai.h" #include "constants/abilities.h" #include "battle.h" -#include "battle_move_effects.h" +#include "constants/battle_move_effects.h" #include "data2.h" #include "item.h" #include "constants/moves.h" diff --git a/src/battle/battle_records.c b/src/battle/battle_records.c index 54697593b..97740e3da 100644 --- a/src/battle/battle_records.c +++ b/src/battle/battle_records.c @@ -1,6 +1,6 @@ #include "global.h" #include "battle_records.h" -#include "game_stat.h" +#include "constants/game_stat.h" #include "link.h" #include "menu.h" #include "overworld.h" diff --git a/src/battle/battle_setup.c b/src/battle/battle_setup.c index 21a1fdb09..eb5b98421 100644 --- a/src/battle/battle_setup.c +++ b/src/battle/battle_setup.c @@ -15,7 +15,7 @@ #include "main.h" #include "constants/maps.h" #include "metatile_behavior.h" -#include "opponent_constants.h" +#include "constants/opponents.h" #include "palette.h" #include "random.h" #include "overworld.h" diff --git a/src/battle/calculate_base_damage.c b/src/battle/calculate_base_damage.c index 153e96078..f9ac03075 100644 --- a/src/battle/calculate_base_damage.c +++ b/src/battle/calculate_base_damage.c @@ -4,13 +4,13 @@ #include "berry.h" #include "data2.h" #include "event_data.h" -#include "hold_effects.h" +#include "constants/hold_effects.h" #include "item.h" #include "constants/items.h" #include "pokemon.h" #include "constants/species.h" #include "constants/moves.h" -#include "battle_move_effects.h" +#include "constants/battle_move_effects.h" #include "ewram.h" extern u16 gBattleTypeFlags; diff --git a/src/field/battle_tower.c b/src/field/battle_tower.c index 37ef10c24..db822f71b 100644 --- a/src/field/battle_tower.c +++ b/src/field/battle_tower.c @@ -10,7 +10,7 @@ #include "item.h" #include "constants/items.h" #include "main.h" -#include "map_object_constants.h" +#include "constants/map_objects.h" #include "constants/moves.h" #include "new_game.h" #include "overworld.h" diff --git a/src/field/decoration.c b/src/field/decoration.c index 89d8cbefd..c7647f98d 100644 --- a/src/field/decoration.c +++ b/src/field/decoration.c @@ -1,6 +1,7 @@ #include "global.h" +#include "constants/decorations.h" #include "main.h" -#include "map_object_constants.h" +#include "constants/map_objects.h" #include "overworld.h" #include "sound.h" #include "constants/songs.h" diff --git a/src/field/decoration_inventory.c b/src/field/decoration_inventory.c index 687589373..dd0e972aa 100644 --- a/src/field/decoration_inventory.c +++ b/src/field/decoration_inventory.c @@ -1,8 +1,5 @@ -// - -// - #include "global.h" +#include "constants/decorations.h" #include "sprite.h" #include "task.h" #include "decoration.h" diff --git a/src/field/field_map_obj.c b/src/field/field_map_obj.c index 816de8917..0768092b1 100644 --- a/src/field/field_map_obj.c +++ b/src/field/field_map_obj.c @@ -15,7 +15,7 @@ #include "sprite.h" #include "metatile_behavior.h" #include "constants/maps.h" -#include "map_object_constants.h" +#include "constants/map_objects.h" #include "trainer_see.h" // rodata diff --git a/src/field/field_player_avatar.c b/src/field/field_player_avatar.c index 166846ba0..437d16208 100644 --- a/src/field/field_player_avatar.c +++ b/src/field/field_player_avatar.c @@ -9,7 +9,7 @@ #include "field_map_obj_helpers.h" #include "fieldmap.h" #include "main.h" -#include "map_object_constants.h" +#include "constants/map_objects.h" #include "menu.h" #include "metatile_behavior.h" #include "party_menu.h" diff --git a/src/field/item.c b/src/field/item.c index cf7d8bd42..66d7d65df 100644 --- a/src/field/item.c +++ b/src/field/item.c @@ -1,5 +1,5 @@ #include "global.h" -#include "hold_effects.h" +#include "constants/hold_effects.h" #include "item.h" #include "constants/items.h" #include "item_use.h" diff --git a/src/field/secret_base.c b/src/field/secret_base.c index c1ca10c1f..b3591564d 100644 --- a/src/field/secret_base.c +++ b/src/field/secret_base.c @@ -1,4 +1,5 @@ #include "global.h" +#include "constants/decorations.h" #include "secret_base.h" #include "decoration.h" #include "constants/species.h" diff --git a/src/field/trader.c b/src/field/trader.c index 69eef1152..c4fe73ba1 100644 --- a/src/field/trader.c +++ b/src/field/trader.c @@ -1,4 +1,5 @@ #include "global.h" +#include "constants/decorations.h" #include "decoration.h" #include "decoration_inventory.h" #include "event_data.h" diff --git a/src/pokemon/pokemon_3.c b/src/pokemon/pokemon_3.c index b824aee90..d659ed680 100644 --- a/src/pokemon/pokemon_3.c +++ b/src/pokemon/pokemon_3.c @@ -3,7 +3,7 @@ #include "battle_message.h" #include "data2.h" #include "event_data.h" -#include "hold_effects.h" +#include "constants/hold_effects.h" #include "item.h" #include "constants/items.h" #include "link.h" diff --git a/src/pokemon/pokemon_data.c b/src/pokemon/pokemon_data.c index 2688e090b..82e452158 100644 --- a/src/pokemon/pokemon_data.c +++ b/src/pokemon/pokemon_data.c @@ -4,7 +4,7 @@ #include "trainer.h" #include "constants/abilities.h" #include "constants/moves.h" -#include "hold_effects.h" +#include "constants/hold_effects.h" #include "constants/items.h" #include "sprite.h" #include "data2.h" -- cgit v1.2.3 From 6f0feb7ca09511df0a1d13c99a1ec5c9a46ed06b Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Sun, 26 Nov 2017 17:06:07 -0600 Subject: don't require MAP_ prefix on MAP_GROUP and MAP_NUM macros --- src/battle/battle_setup.c | 226 ++++++++++++++++++++++---------------------- src/field/braille_puzzles.c | 8 +- src/field/field_map_obj.c | 4 +- src/field/field_specials.c | 34 +++---- src/field/heal_location.c | 44 ++++----- src/field/menu_helpers.c | 2 +- src/field/overworld.c | 50 +++++----- src/field/region_map.c | 6 +- src/field/rotating_gate.c | 8 +- src/field/secret_base.c | 52 +++++----- src/field/tv.c | 24 ++--- src/field/wild_encounter.c | 4 +- 12 files changed, 231 insertions(+), 231 deletions(-) (limited to 'src') diff --git a/src/battle/battle_setup.c b/src/battle/battle_setup.c index eb5b98421..9f51c2878 100644 --- a/src/battle/battle_setup.c +++ b/src/battle/battle_setup.c @@ -161,283 +161,283 @@ const struct TrainerEyeTrainer gTrainerEyeTrainers[] = { { {OPPONENT_ROSE_1, OPPONENT_ROSE_2, OPPONENT_ROSE_3, OPPONENT_ROSE_4, OPPONENT_ROSE_5}, - MAP_GROUP(MAP_ROUTE118), - MAP_NUM(MAP_ROUTE118), + MAP_GROUP(ROUTE118), + MAP_NUM(ROUTE118), }, { {OPPONENT_DUSTY_1, OPPONENT_DUSTY_2, OPPONENT_DUSTY_3, OPPONENT_DUSTY_4, OPPONENT_DUSTY_5}, - MAP_GROUP(MAP_ROUTE111), - MAP_NUM(MAP_ROUTE111), + MAP_GROUP(ROUTE111), + MAP_NUM(ROUTE111), }, { {OPPONENT_LOLA_1, OPPONENT_LOLA_2, OPPONENT_LOLA_3, OPPONENT_LOLA_4, OPPONENT_LOLA_5}, - MAP_GROUP(MAP_ROUTE109), - MAP_NUM(MAP_ROUTE109), + MAP_GROUP(ROUTE109), + MAP_NUM(ROUTE109), }, { {OPPONENT_RICKY_1, OPPONENT_RICKY_2, OPPONENT_RICKY_3, OPPONENT_RICKY_4, OPPONENT_RICKY_5}, - MAP_GROUP(MAP_ROUTE109), - MAP_NUM(MAP_ROUTE109), + MAP_GROUP(ROUTE109), + MAP_NUM(ROUTE109), }, { {OPPONENT_RITA_AND_SAM_1, OPPONENT_RITA_AND_SAM_2, OPPONENT_RITA_AND_SAM_3, OPPONENT_RITA_AND_SAM_4, OPPONENT_RITA_AND_SAM_5}, - MAP_GROUP(MAP_ROUTE124), - MAP_NUM(MAP_ROUTE124), + MAP_GROUP(ROUTE124), + MAP_NUM(ROUTE124), }, { {OPPONENT_BROOKE_1, OPPONENT_BROOKE_2, OPPONENT_BROOKE_3, OPPONENT_BROOKE_4, OPPONENT_BROOKE_5}, - MAP_GROUP(MAP_ROUTE111), - MAP_NUM(MAP_ROUTE111), + MAP_GROUP(ROUTE111), + MAP_NUM(ROUTE111), }, { {OPPONENT_WILTON_1, OPPONENT_WILTON_2, OPPONENT_WILTON_3, OPPONENT_WILTON_4, OPPONENT_WILTON_5}, - MAP_GROUP(MAP_ROUTE111), - MAP_NUM(MAP_ROUTE111), + MAP_GROUP(ROUTE111), + MAP_NUM(ROUTE111), }, { {OPPONENT_VALERIE_1, OPPONENT_VALERIE_2, OPPONENT_VALERIE_3, OPPONENT_VALERIE_4, OPPONENT_VALERIE_5}, - MAP_GROUP(MAP_MT_PYRE_6F), - MAP_NUM(MAP_MT_PYRE_6F), + MAP_GROUP(MT_PYRE_6F), + MAP_NUM(MT_PYRE_6F), }, { {OPPONENT_CINDY_1, OPPONENT_CINDY_3, OPPONENT_CINDY_4, OPPONENT_CINDY_5, OPPONENT_CINDY_6}, - MAP_GROUP(MAP_ROUTE104), - MAP_NUM(MAP_ROUTE104), + MAP_GROUP(ROUTE104), + MAP_NUM(ROUTE104), }, { {OPPONENT_JESSICA_1, OPPONENT_JESSICA_2, OPPONENT_JESSICA_3, OPPONENT_JESSICA_4, OPPONENT_JESSICA_5}, - MAP_GROUP(MAP_ROUTE121), - MAP_NUM(MAP_ROUTE121), + MAP_GROUP(ROUTE121), + MAP_NUM(ROUTE121), }, { {OPPONENT_WINSTON_1, OPPONENT_WINSTON_2, OPPONENT_WINSTON_3, OPPONENT_WINSTON_4, OPPONENT_WINSTON_5}, - MAP_GROUP(MAP_ROUTE104), - MAP_NUM(MAP_ROUTE104), + MAP_GROUP(ROUTE104), + MAP_NUM(ROUTE104), }, { {OPPONENT_STEVE_1, OPPONENT_STEVE_2, OPPONENT_STEVE_3, OPPONENT_STEVE_4, OPPONENT_STEVE_5}, - MAP_GROUP(MAP_ROUTE114), - MAP_NUM(MAP_ROUTE114), + MAP_GROUP(ROUTE114), + MAP_NUM(ROUTE114), }, { {OPPONENT_TONY_1, OPPONENT_TONY_2, OPPONENT_TONY_3, OPPONENT_TONY_4, OPPONENT_TONY_5}, - MAP_GROUP(MAP_ROUTE107), - MAP_NUM(MAP_ROUTE107), + MAP_GROUP(ROUTE107), + MAP_NUM(ROUTE107), }, { {OPPONENT_NOB_1, OPPONENT_NOB_2, OPPONENT_NOB_3, OPPONENT_NOB_4, OPPONENT_NOB_5}, - MAP_GROUP(MAP_ROUTE115), - MAP_NUM(MAP_ROUTE115), + MAP_GROUP(ROUTE115), + MAP_NUM(ROUTE115), }, { {OPPONENT_DALTON_1, OPPONENT_DALTON_2, OPPONENT_DALTON_3, OPPONENT_DALTON_4, OPPONENT_DALTON_5}, - MAP_GROUP(MAP_ROUTE118), - MAP_NUM(MAP_ROUTE118), + MAP_GROUP(ROUTE118), + MAP_NUM(ROUTE118), }, { {OPPONENT_BERNIE_1, OPPONENT_BERNIE_2, OPPONENT_BERNIE_3, OPPONENT_BERNIE_4, OPPONENT_BERNIE_5}, - MAP_GROUP(MAP_ROUTE114), - MAP_NUM(MAP_ROUTE114), + MAP_GROUP(ROUTE114), + MAP_NUM(ROUTE114), }, { {OPPONENT_ETHAN_1, OPPONENT_ETHAN_2, OPPONENT_ETHAN_3, OPPONENT_ETHAN_4, OPPONENT_ETHAN_5}, - MAP_GROUP(MAP_JAGGED_PASS), - MAP_NUM(MAP_JAGGED_PASS), + MAP_GROUP(JAGGED_PASS), + MAP_NUM(JAGGED_PASS), }, { {OPPONENT_JOHN_AND_JAY_1, OPPONENT_JOHN_AND_JAY_2, OPPONENT_JOHN_AND_JAY_3, OPPONENT_JOHN_AND_JAY_4, OPPONENT_JOHN_AND_JAY_5}, - MAP_GROUP(MAP_METEOR_FALLS_1F_2R), - MAP_NUM(MAP_METEOR_FALLS_1F_2R), + MAP_GROUP(METEOR_FALLS_1F_2R), + MAP_NUM(METEOR_FALLS_1F_2R), }, { {OPPONENT_BRANDON_1, OPPONENT_BRANDON_2, OPPONENT_BRANDON_3, OPPONENT_BRANDON_4, OPPONENT_BRANDON_5}, - MAP_GROUP(MAP_ROUTE120), - MAP_NUM(MAP_ROUTE120), + MAP_GROUP(ROUTE120), + MAP_NUM(ROUTE120), }, { {OPPONENT_CAMERON_1, OPPONENT_CAMERON_2, OPPONENT_CAMERON_3, OPPONENT_CAMERON_4, OPPONENT_CAMERON_5}, - MAP_GROUP(MAP_ROUTE123), - MAP_NUM(MAP_ROUTE123), + MAP_GROUP(ROUTE123), + MAP_NUM(ROUTE123), }, { {OPPONENT_JACKI_1, OPPONENT_JACKI_2, OPPONENT_JACKI_3, OPPONENT_JACKI_4, OPPONENT_JACKI_5}, - MAP_GROUP(MAP_ROUTE123), - MAP_NUM(MAP_ROUTE123), + MAP_GROUP(ROUTE123), + MAP_NUM(ROUTE123), }, { {OPPONENT_WALTER_1, OPPONENT_WALTER_2, OPPONENT_WALTER_3, OPPONENT_WALTER_4, OPPONENT_WALTER_5}, - MAP_GROUP(MAP_ROUTE121), - MAP_NUM(MAP_ROUTE121), + MAP_GROUP(ROUTE121), + MAP_NUM(ROUTE121), }, { {OPPONENT_KAREN_1, OPPONENT_KAREN_2, OPPONENT_KAREN_3, OPPONENT_KAREN_4, OPPONENT_KAREN_5}, - MAP_GROUP(MAP_ROUTE116), - MAP_NUM(MAP_ROUTE116), + MAP_GROUP(ROUTE116), + MAP_NUM(ROUTE116), }, { {OPPONENT_JERRY_1, OPPONENT_JERRY_2, OPPONENT_JERRY_3, OPPONENT_JERRY_4, OPPONENT_JERRY_5}, - MAP_GROUP(MAP_ROUTE116), - MAP_NUM(MAP_ROUTE116), + MAP_GROUP(ROUTE116), + MAP_NUM(ROUTE116), }, { {OPPONENT_ANNA_AND_MEG_1, OPPONENT_ANNA_AND_MEG_2, OPPONENT_ANNA_AND_MEG_3, OPPONENT_ANNA_AND_MEG_4, OPPONENT_ANNA_AND_MEG_5}, - MAP_GROUP(MAP_ROUTE117), - MAP_NUM(MAP_ROUTE117), + MAP_GROUP(ROUTE117), + MAP_NUM(ROUTE117), }, { {OPPONENT_ISABEL_1, OPPONENT_ISABEL_2, OPPONENT_ISABEL_3, OPPONENT_ISABEL_4, OPPONENT_ISABEL_5}, - MAP_GROUP(MAP_ROUTE110), - MAP_NUM(MAP_ROUTE110), + MAP_GROUP(ROUTE110), + MAP_NUM(ROUTE110), }, { {OPPONENT_MIGUEL_1, OPPONENT_MIGUEL_2, OPPONENT_MIGUEL_3, OPPONENT_MIGUEL_4, OPPONENT_MIGUEL_5}, - MAP_GROUP(MAP_ROUTE103), - MAP_NUM(MAP_ROUTE103), + MAP_GROUP(ROUTE103), + MAP_NUM(ROUTE103), }, { {OPPONENT_TIMOTHY_1, OPPONENT_TIMOTHY_2, OPPONENT_TIMOTHY_3, OPPONENT_TIMOTHY_4, OPPONENT_TIMOTHY_5}, - MAP_GROUP(MAP_ROUTE115), - MAP_NUM(MAP_ROUTE115), + MAP_GROUP(ROUTE115), + MAP_NUM(ROUTE115), }, { {OPPONENT_SHELBY_1, OPPONENT_SHELBY_2, OPPONENT_SHELBY_3, OPPONENT_SHELBY_4, OPPONENT_SHELBY_5}, - MAP_GROUP(MAP_MT_CHIMNEY), - MAP_NUM(MAP_MT_CHIMNEY), + MAP_GROUP(MT_CHIMNEY), + MAP_NUM(MT_CHIMNEY), }, { {OPPONENT_CALVIN_1, OPPONENT_CALVIN_2, OPPONENT_CALVIN_3, OPPONENT_CALVIN_4, OPPONENT_CALVIN_5}, - MAP_GROUP(MAP_ROUTE102), - MAP_NUM(MAP_ROUTE102), + MAP_GROUP(ROUTE102), + MAP_NUM(ROUTE102), }, { {OPPONENT_ELLIOT_1, OPPONENT_ELLIOT_2, OPPONENT_ELLIOT_3, OPPONENT_ELLIOT_4, OPPONENT_ELLIOT_5}, - MAP_GROUP(MAP_ROUTE106), - MAP_NUM(MAP_ROUTE106), + MAP_GROUP(ROUTE106), + MAP_NUM(ROUTE106), }, { {OPPONENT_ABIGAIL_1, OPPONENT_ABIGAIL_2, OPPONENT_ABIGAIL_3, OPPONENT_ABIGAIL_4, OPPONENT_ABIGAIL_5}, - MAP_GROUP(MAP_ROUTE110), - MAP_NUM(MAP_ROUTE110), + MAP_GROUP(ROUTE110), + MAP_NUM(ROUTE110), }, { {OPPONENT_BENJAMIN_1, OPPONENT_BENJAMIN_2, OPPONENT_BENJAMIN_3, OPPONENT_BENJAMIN_4, OPPONENT_BENJAMIN_5}, - MAP_GROUP(MAP_ROUTE110), - MAP_NUM(MAP_ROUTE110), + MAP_GROUP(ROUTE110), + MAP_NUM(ROUTE110), }, { {OPPONENT_ISAIAH_1, OPPONENT_ISAIAH_2, OPPONENT_ISAIAH_3, OPPONENT_ISAIAH_4, OPPONENT_ISAIAH_5}, - MAP_GROUP(MAP_ROUTE128), - MAP_NUM(MAP_ROUTE128), + MAP_GROUP(ROUTE128), + MAP_NUM(ROUTE128), }, { {OPPONENT_KATELYN_1, OPPONENT_KATELYN_2, OPPONENT_KATELYN_3, OPPONENT_KATELYN_4, OPPONENT_KATELYN_5}, - MAP_GROUP(MAP_ROUTE128), - MAP_NUM(MAP_ROUTE128), + MAP_GROUP(ROUTE128), + MAP_NUM(ROUTE128), }, { {OPPONENT_MARIA_1, OPPONENT_MARIA_2, OPPONENT_MARIA_3, OPPONENT_MARIA_4, OPPONENT_MARIA_5}, - MAP_GROUP(MAP_ROUTE117), - MAP_NUM(MAP_ROUTE117), + MAP_GROUP(ROUTE117), + MAP_NUM(ROUTE117), }, { {OPPONENT_DYLAN_1, OPPONENT_DYLAN_2, OPPONENT_DYLAN_3, OPPONENT_DYLAN_4, OPPONENT_DYLAN_5}, - MAP_GROUP(MAP_ROUTE117), - MAP_NUM(MAP_ROUTE117), + MAP_GROUP(ROUTE117), + MAP_NUM(ROUTE117), }, { {OPPONENT_NICOLAS_1, OPPONENT_NICOLAS_2, OPPONENT_NICOLAS_3, OPPONENT_NICOLAS_4, OPPONENT_NICOLAS_5}, - MAP_GROUP(MAP_METEOR_FALLS_1F_2R), - MAP_NUM(MAP_METEOR_FALLS_1F_2R), + MAP_GROUP(METEOR_FALLS_1F_2R), + MAP_NUM(METEOR_FALLS_1F_2R), }, { {OPPONENT_ROBERT_1, OPPONENT_ROBERT_2, OPPONENT_ROBERT_3, OPPONENT_ROBERT_4, OPPONENT_ROBERT_5}, - MAP_GROUP(MAP_ROUTE120), - MAP_NUM(MAP_ROUTE120), + MAP_GROUP(ROUTE120), + MAP_NUM(ROUTE120), }, { {OPPONENT_LAO_1, OPPONENT_LAO_2, OPPONENT_LAO_3, OPPONENT_LAO_4, OPPONENT_LAO_5}, - MAP_GROUP(MAP_ROUTE113), - MAP_NUM(MAP_ROUTE113), + MAP_GROUP(ROUTE113), + MAP_NUM(ROUTE113), }, { {OPPONENT_CYNDY_1, OPPONENT_CYNDY_2, OPPONENT_CYNDY_3, OPPONENT_CYNDY_4, OPPONENT_CYNDY_5}, - MAP_GROUP(MAP_ROUTE115), - MAP_NUM(MAP_ROUTE115), + MAP_GROUP(ROUTE115), + MAP_NUM(ROUTE115), }, { {OPPONENT_MADELINE_1, OPPONENT_MADELINE_2, OPPONENT_MADELINE_3, OPPONENT_MADELINE_4, OPPONENT_MADELINE_5}, - MAP_GROUP(MAP_ROUTE113), - MAP_NUM(MAP_ROUTE113), + MAP_GROUP(ROUTE113), + MAP_NUM(ROUTE113), }, { {OPPONENT_JENNY_1, OPPONENT_JENNY_2, OPPONENT_JENNY_3, OPPONENT_JENNY_4, OPPONENT_JENNY_5}, - MAP_GROUP(MAP_ROUTE124), - MAP_NUM(MAP_ROUTE124), + MAP_GROUP(ROUTE124), + MAP_NUM(ROUTE124), }, { {OPPONENT_DIANA_1, OPPONENT_DIANA_2, OPPONENT_DIANA_3, OPPONENT_DIANA_4, OPPONENT_DIANA_5}, - MAP_GROUP(MAP_JAGGED_PASS), - MAP_NUM(MAP_JAGGED_PASS), + MAP_GROUP(JAGGED_PASS), + MAP_NUM(JAGGED_PASS), }, { {OPPONENT_AMY_AND_LIV_1, OPPONENT_AMY_AND_LIV_2, OPPONENT_AMY_AND_LIV_4, OPPONENT_AMY_AND_LIV_5, OPPONENT_AMY_AND_LIV_6}, - MAP_GROUP(MAP_ROUTE103), - MAP_NUM(MAP_ROUTE103), + MAP_GROUP(ROUTE103), + MAP_NUM(ROUTE103), }, { {OPPONENT_ERNEST_1, OPPONENT_ERNEST_2, OPPONENT_ERNEST_3, OPPONENT_ERNEST_4, OPPONENT_ERNEST_5}, - MAP_GROUP(MAP_ROUTE125), - MAP_NUM(MAP_ROUTE125), + MAP_GROUP(ROUTE125), + MAP_NUM(ROUTE125), }, { {OPPONENT_EDWIN_1, OPPONENT_EDWIN_2, OPPONENT_EDWIN_3, OPPONENT_EDWIN_4, OPPONENT_EDWIN_5}, - MAP_GROUP(MAP_ROUTE110), - MAP_NUM(MAP_ROUTE110), + MAP_GROUP(ROUTE110), + MAP_NUM(ROUTE110), }, { {OPPONENT_LYDIA_1, OPPONENT_LYDIA_2, OPPONENT_LYDIA_3, OPPONENT_LYDIA_4, OPPONENT_LYDIA_5}, - MAP_GROUP(MAP_ROUTE117), - MAP_NUM(MAP_ROUTE117), + MAP_GROUP(ROUTE117), + MAP_NUM(ROUTE117), }, { {OPPONENT_ISAAC_1, OPPONENT_ISAAC_2, OPPONENT_ISAAC_3, OPPONENT_ISAAC_4, OPPONENT_ISAAC_5}, - MAP_GROUP(MAP_ROUTE117), - MAP_NUM(MAP_ROUTE117), + MAP_GROUP(ROUTE117), + MAP_NUM(ROUTE117), }, { {OPPONENT_CATHERINE_1, OPPONENT_CATHERINE_2, OPPONENT_CATHERINE_3, OPPONENT_CATHERINE_4, OPPONENT_CATHERINE_5}, - MAP_GROUP(MAP_ROUTE119), - MAP_NUM(MAP_ROUTE119), + MAP_GROUP(ROUTE119), + MAP_NUM(ROUTE119), }, { {OPPONENT_JACKSON_1, OPPONENT_JACKSON_2, OPPONENT_JACKSON_3, OPPONENT_JACKSON_4, OPPONENT_JACKSON_5}, - MAP_GROUP(MAP_ROUTE119), - MAP_NUM(MAP_ROUTE119), + MAP_GROUP(ROUTE119), + MAP_NUM(ROUTE119), }, { {OPPONENT_HALEY_1, OPPONENT_HALEY_2, OPPONENT_HALEY_3, OPPONENT_HALEY_4, OPPONENT_HALEY_5}, - MAP_GROUP(MAP_ROUTE104), - MAP_NUM(MAP_ROUTE104), + MAP_GROUP(ROUTE104), + MAP_NUM(ROUTE104), }, { {OPPONENT_JAMES_1, OPPONENT_JAMES_2, OPPONENT_JAMES_3, OPPONENT_JAMES_4, OPPONENT_JAMES_5}, - MAP_GROUP(MAP_PETALBURG_WOODS), - MAP_NUM(MAP_PETALBURG_WOODS), + MAP_GROUP(PETALBURG_WOODS), + MAP_NUM(PETALBURG_WOODS), }, { {OPPONENT_TRENT_1, OPPONENT_TRENT_2, OPPONENT_TRENT_3, OPPONENT_TRENT_4, OPPONENT_TRENT_5}, - MAP_GROUP(MAP_ROUTE112), - MAP_NUM(MAP_ROUTE112), + MAP_GROUP(ROUTE112), + MAP_NUM(ROUTE112), }, { {OPPONENT_LOIS_AND_HAL_1, OPPONENT_LOIS_AND_HAL_2, OPPONENT_LOIS_AND_HAL_3, OPPONENT_LOIS_AND_HAL_4, OPPONENT_LOIS_AND_HAL_5}, - MAP_GROUP(MAP_ABANDONED_SHIP_ROOMS2_1F), - MAP_NUM(MAP_ABANDONED_SHIP_ROOMS2_1F), + MAP_GROUP(ABANDONED_SHIP_ROOMS2_1F), + MAP_NUM(ABANDONED_SHIP_ROOMS2_1F), }, { {OPPONENT_WALLY_3, OPPONENT_WALLY_4, OPPONENT_WALLY_5, OPPONENT_WALLY_6, OPPONENT_NONE}, - MAP_GROUP(MAP_VICTORY_ROAD_1F), - MAP_NUM(MAP_VICTORY_ROAD_1F), + MAP_GROUP(VICTORY_ROAD_1F), + MAP_NUM(VICTORY_ROAD_1F), }, }; @@ -682,7 +682,7 @@ s8 BattleSetup_GetTerrain(void) if (MetatileBehavior_IsBridge(tileBehavior) == TRUE) return BATTLE_TERRAIN_WATER; } - if (gSaveBlock1.location.mapGroup == MAP_GROUP(MAP_ROUTE113) && gSaveBlock1.location.mapNum == MAP_NUM(MAP_ROUTE113)) + if (gSaveBlock1.location.mapGroup == MAP_GROUP(ROUTE113) && gSaveBlock1.location.mapNum == MAP_NUM(ROUTE113)) return BATTLE_TERRAIN_SAND; if (GetSav1Weather() == 8) return BATTLE_TERRAIN_SAND; diff --git a/src/field/braille_puzzles.c b/src/field/braille_puzzles.c index 122747928..e6ab316d2 100644 --- a/src/field/braille_puzzles.c +++ b/src/field/braille_puzzles.c @@ -25,8 +25,8 @@ extern u8 S_OpenRegiceChamber[]; // regiice event script bool8 ShouldDoBrailleDigEffect(void) { if (!FlagGet(SYS_BRAILLE_DIG) - && (gSaveBlock1.location.mapGroup == MAP_GROUP(MAP_SEALED_CHAMBER_OUTER_ROOM) - && gSaveBlock1.location.mapNum == MAP_NUM(MAP_SEALED_CHAMBER_OUTER_ROOM))) + && (gSaveBlock1.location.mapGroup == MAP_GROUP(SEALED_CHAMBER_OUTER_ROOM) + && gSaveBlock1.location.mapNum == MAP_NUM(SEALED_CHAMBER_OUTER_ROOM))) { if (gSaveBlock1.pos.x == 10 && gSaveBlock1.pos.y == 3) return TRUE; @@ -68,7 +68,7 @@ bool8 CheckRelicanthWailord(void) bool8 ShouldDoBrailleStrengthEffect(void) { - if (!FlagGet(SYS_BRAILLE_STRENGTH) && (gSaveBlock1.location.mapGroup == MAP_GROUP(MAP_DESERT_RUINS) && gSaveBlock1.location.mapNum == MAP_NUM(MAP_DESERT_RUINS))) + if (!FlagGet(SYS_BRAILLE_STRENGTH) && (gSaveBlock1.location.mapGroup == MAP_GROUP(DESERT_RUINS) && gSaveBlock1.location.mapNum == MAP_NUM(DESERT_RUINS))) { if (gSaveBlock1.pos.x == 10 && gSaveBlock1.pos.y == 23) return TRUE; @@ -98,7 +98,7 @@ void DoBrailleStrengthEffect(void) bool8 ShouldDoBrailleFlyEffect(void) { - if (!FlagGet(SYS_BRAILLE_FLY) && (gSaveBlock1.location.mapGroup == MAP_GROUP(MAP_ANCIENT_TOMB) && gSaveBlock1.location.mapNum == MAP_NUM(MAP_ANCIENT_TOMB))) + if (!FlagGet(SYS_BRAILLE_FLY) && (gSaveBlock1.location.mapGroup == MAP_GROUP(ANCIENT_TOMB) && gSaveBlock1.location.mapNum == MAP_NUM(ANCIENT_TOMB))) { if (gSaveBlock1.pos.x == 8 && gSaveBlock1.pos.y == 25) return TRUE; diff --git a/src/field/field_map_obj.c b/src/field/field_map_obj.c index 0768092b1..0e6794ed7 100644 --- a/src/field/field_map_obj.c +++ b/src/field/field_map_obj.c @@ -7054,7 +7054,7 @@ bool8 sub_8062088(struct MapObject *mapObject, struct Sprite *sprite) bool8 sub_80620B0(struct MapObject *mapObject, struct Sprite *sprite) { u8 objectId; - if (!TryGetFieldObjectIdByLocalIdAndMap(0xFF, MAP_GROUP(MAP_PETALBURG_CITY), MAP_NUM(MAP_PETALBURG_CITY), &objectId)) + if (!TryGetFieldObjectIdByLocalIdAndMap(0xFF, MAP_GROUP(PETALBURG_CITY), MAP_NUM(PETALBURG_CITY), &objectId)) { an_look_any(mapObject, sprite, sub_805FE90(mapObject->coords2.x, mapObject->coords2.y, gMapObjects[objectId].coords2.x, gMapObjects[objectId].coords2.y)); } @@ -7065,7 +7065,7 @@ bool8 sub_80620B0(struct MapObject *mapObject, struct Sprite *sprite) bool8 sub_806210C(struct MapObject *mapObject, struct Sprite *sprite) { u8 objectId; - if (!TryGetFieldObjectIdByLocalIdAndMap(0xFF, MAP_GROUP(MAP_PETALBURG_CITY), MAP_NUM(MAP_PETALBURG_CITY), &objectId)) + if (!TryGetFieldObjectIdByLocalIdAndMap(0xFF, MAP_GROUP(PETALBURG_CITY), MAP_NUM(PETALBURG_CITY), &objectId)) { an_look_any(mapObject, sprite, GetOppositeDirection(sub_805FE90(mapObject->coords2.x, mapObject->coords2.y, gMapObjects[objectId].coords2.x, gMapObjects[objectId].coords2.y))); } diff --git a/src/field/field_specials.c b/src/field/field_specials.c index 41fa146a5..d654d10f5 100644 --- a/src/field/field_specials.c +++ b/src/field/field_specials.c @@ -207,7 +207,7 @@ u16 GetRecordedCyclingRoadResults(void) { } void UpdateCyclingRoadState(void) { - if (gUnknown_020297F0.mapNum == MAP_NUM(MAP_ROUTE110_SEASIDE_CYCLING_ROAD_NORTH_ENTRANCE) && gUnknown_020297F0.mapGroup == MAP_GROUP(MAP_ROUTE110_SEASIDE_CYCLING_ROAD_NORTH_ENTRANCE)) + if (gUnknown_020297F0.mapNum == MAP_NUM(ROUTE110_SEASIDE_CYCLING_ROAD_NORTH_ENTRANCE) && gUnknown_020297F0.mapGroup == MAP_GROUP(ROUTE110_SEASIDE_CYCLING_ROAD_NORTH_ENTRANCE)) { return; } @@ -259,38 +259,38 @@ u8 GetSSTidalLocation(s8 *mapGroup, s8 *mapNum, s16 *x, s16 *y) case 2: if (*varCruiseStepCount < 60) { - *mapNum = MAP_NUM(MAP_ROUTE134); + *mapNum = MAP_NUM(ROUTE134); *x = *varCruiseStepCount + 19; } else if (*varCruiseStepCount < 140) { - *mapNum = MAP_NUM(MAP_ROUTE133); + *mapNum = MAP_NUM(ROUTE133); *x = *varCruiseStepCount - 60; } else { - *mapNum = MAP_NUM(MAP_ROUTE132); + *mapNum = MAP_NUM(ROUTE132); *x = *varCruiseStepCount - 140; } break; case 7: if (*varCruiseStepCount < 66) { - *mapNum = MAP_NUM(MAP_ROUTE132); + *mapNum = MAP_NUM(ROUTE132); *x = 65 - *varCruiseStepCount; } else if (*varCruiseStepCount < 146) { - *mapNum = MAP_NUM(MAP_ROUTE133); + *mapNum = MAP_NUM(ROUTE133); *x = 145 - *varCruiseStepCount; } else { - *mapNum = MAP_NUM(MAP_ROUTE134); + *mapNum = MAP_NUM(ROUTE134); *x = 224 - *varCruiseStepCount; } break; } - *mapGroup = MAP_GROUP(MAP_ROUTE132); + *mapGroup = MAP_GROUP(ROUTE132); *y = 20; return 0; } @@ -702,11 +702,11 @@ void CableCarWarp(void) { if (gSpecialVar_0x8004 != 0) { - Overworld_SetWarpDestination(MAP_GROUP(MAP_ROUTE112_CABLE_CAR_STATION), MAP_NUM(MAP_ROUTE112_CABLE_CAR_STATION), -1, 6, 4); + Overworld_SetWarpDestination(MAP_GROUP(ROUTE112_CABLE_CAR_STATION), MAP_NUM(ROUTE112_CABLE_CAR_STATION), -1, 6, 4); } else { - Overworld_SetWarpDestination(MAP_GROUP(MAP_MT_CHIMNEY_CABLE_CAR_STATION), MAP_NUM(MAP_MT_CHIMNEY_CABLE_CAR_STATION), -1, 6, 4); + Overworld_SetWarpDestination(MAP_GROUP(MT_CHIMNEY_CABLE_CAR_STATION), MAP_NUM(MT_CHIMNEY_CABLE_CAR_STATION), -1, 6, 4); } } @@ -1001,22 +1001,22 @@ void SetDepartmentStoreFloorVar(void) u8 deptStoreFloor; switch (gSaveBlock1.warp2.mapNum) { - case MAP_NUM(MAP_LILYCOVE_CITY_DEPARTMENT_STORE_1F): + case MAP_NUM(LILYCOVE_CITY_DEPARTMENT_STORE_1F): deptStoreFloor = 0; break; - case MAP_NUM(MAP_LILYCOVE_CITY_DEPARTMENT_STORE_2F): + case MAP_NUM(LILYCOVE_CITY_DEPARTMENT_STORE_2F): deptStoreFloor = 1; break; - case MAP_NUM(MAP_LILYCOVE_CITY_DEPARTMENT_STORE_3F): + case MAP_NUM(LILYCOVE_CITY_DEPARTMENT_STORE_3F): deptStoreFloor = 2; break; - case MAP_NUM(MAP_LILYCOVE_CITY_DEPARTMENT_STORE_4F): + case MAP_NUM(LILYCOVE_CITY_DEPARTMENT_STORE_4F): deptStoreFloor = 3; break; - case MAP_NUM(MAP_LILYCOVE_CITY_DEPARTMENT_STORE_5F): + case MAP_NUM(LILYCOVE_CITY_DEPARTMENT_STORE_5F): deptStoreFloor = 4; break; - case MAP_NUM(MAP_LILYCOVE_CITY_DEPARTMENT_STORE_ROOFTOP): + case MAP_NUM(LILYCOVE_CITY_DEPARTMENT_STORE_ROOFTOP): deptStoreFloor = 15; break; default: @@ -1881,7 +1881,7 @@ bool8 ScrSpecial_AreLeadMonEVsMaxedOut(void) u8 sub_810F5BC(void) { - if (!FlagGet(0xc7) && gSaveBlock1.location.mapGroup == MAP_GROUP(MAP_RUSTURF_TUNNEL) && gSaveBlock1.location.mapNum == MAP_NUM(MAP_RUSTURF_TUNNEL)) + if (!FlagGet(0xc7) && gSaveBlock1.location.mapGroup == MAP_GROUP(RUSTURF_TUNNEL) && gSaveBlock1.location.mapNum == MAP_NUM(RUSTURF_TUNNEL)) { if (FlagGet(0x3a3)) { diff --git a/src/field/heal_location.c b/src/field/heal_location.c index 0b13f251f..a10c7a7b8 100644 --- a/src/field/heal_location.c +++ b/src/field/heal_location.c @@ -6,28 +6,28 @@ static const struct HealLocation sHealLocations[] = { - {MAP_GROUP(MAP_LITTLEROOT_TOWN_BRENDANS_HOUSE_2F), MAP_NUM(MAP_LITTLEROOT_TOWN_BRENDANS_HOUSE_2F), 4, 2}, - {MAP_GROUP(MAP_LITTLEROOT_TOWN_MAYS_HOUSE_2F), MAP_NUM(MAP_LITTLEROOT_TOWN_MAYS_HOUSE_2F), 4, 2}, - {MAP_GROUP(MAP_PETALBURG_CITY), MAP_NUM(MAP_PETALBURG_CITY), 20, 17}, - {MAP_GROUP(MAP_SLATEPORT_CITY), MAP_NUM(MAP_SLATEPORT_CITY), 19, 20}, - {MAP_GROUP(MAP_MAUVILLE_CITY), MAP_NUM(MAP_MAUVILLE_CITY), 22, 6}, - {MAP_GROUP(MAP_RUSTBORO_CITY), MAP_NUM(MAP_RUSTBORO_CITY), 16, 39}, - {MAP_GROUP(MAP_FORTREE_CITY), MAP_NUM(MAP_FORTREE_CITY), 5, 7}, - {MAP_GROUP(MAP_LILYCOVE_CITY), MAP_NUM(MAP_LILYCOVE_CITY), 24, 15}, - {MAP_GROUP(MAP_MOSSDEEP_CITY), MAP_NUM(MAP_MOSSDEEP_CITY), 28, 17}, - {MAP_GROUP(MAP_SOOTOPOLIS_CITY), MAP_NUM(MAP_SOOTOPOLIS_CITY), 43, 32}, - {MAP_GROUP(MAP_EVER_GRANDE_CITY), MAP_NUM(MAP_EVER_GRANDE_CITY), 27, 49}, - {MAP_GROUP(MAP_LITTLEROOT_TOWN), MAP_NUM(MAP_LITTLEROOT_TOWN), 5, 9}, - {MAP_GROUP(MAP_LITTLEROOT_TOWN), MAP_NUM(MAP_LITTLEROOT_TOWN), 14, 9}, - {MAP_GROUP(MAP_OLDALE_TOWN), MAP_NUM(MAP_OLDALE_TOWN), 6, 17}, - {MAP_GROUP(MAP_DEWFORD_TOWN), MAP_NUM(MAP_DEWFORD_TOWN), 2, 11}, - {MAP_GROUP(MAP_LAVARIDGE_TOWN), MAP_NUM(MAP_LAVARIDGE_TOWN), 9, 7}, - {MAP_GROUP(MAP_FALLARBOR_TOWN), MAP_NUM(MAP_FALLARBOR_TOWN), 14, 8}, - {MAP_GROUP(MAP_VERDANTURF_TOWN), MAP_NUM(MAP_VERDANTURF_TOWN), 16, 4}, - {MAP_GROUP(MAP_PACIFIDLOG_TOWN), MAP_NUM(MAP_PACIFIDLOG_TOWN), 8, 16}, - {MAP_GROUP(MAP_EVER_GRANDE_CITY), MAP_NUM(MAP_EVER_GRANDE_CITY), 18, 6}, - {MAP_GROUP(MAP_BATTLE_TOWER_OUTSIDE), MAP_NUM(MAP_BATTLE_TOWER_OUTSIDE), 14, 9}, - {MAP_GROUP(MAP_SOUTHERN_ISLAND_EXTERIOR), MAP_NUM(MAP_SOUTHERN_ISLAND_EXTERIOR), 15, 20}, + {MAP_GROUP(LITTLEROOT_TOWN_BRENDANS_HOUSE_2F), MAP_NUM(LITTLEROOT_TOWN_BRENDANS_HOUSE_2F), 4, 2}, + {MAP_GROUP(LITTLEROOT_TOWN_MAYS_HOUSE_2F), MAP_NUM(LITTLEROOT_TOWN_MAYS_HOUSE_2F), 4, 2}, + {MAP_GROUP(PETALBURG_CITY), MAP_NUM(PETALBURG_CITY), 20, 17}, + {MAP_GROUP(SLATEPORT_CITY), MAP_NUM(SLATEPORT_CITY), 19, 20}, + {MAP_GROUP(MAUVILLE_CITY), MAP_NUM(MAUVILLE_CITY), 22, 6}, + {MAP_GROUP(RUSTBORO_CITY), MAP_NUM(RUSTBORO_CITY), 16, 39}, + {MAP_GROUP(FORTREE_CITY), MAP_NUM(FORTREE_CITY), 5, 7}, + {MAP_GROUP(LILYCOVE_CITY), MAP_NUM(LILYCOVE_CITY), 24, 15}, + {MAP_GROUP(MOSSDEEP_CITY), MAP_NUM(MOSSDEEP_CITY), 28, 17}, + {MAP_GROUP(SOOTOPOLIS_CITY), MAP_NUM(SOOTOPOLIS_CITY), 43, 32}, + {MAP_GROUP(EVER_GRANDE_CITY), MAP_NUM(EVER_GRANDE_CITY), 27, 49}, + {MAP_GROUP(LITTLEROOT_TOWN), MAP_NUM(LITTLEROOT_TOWN), 5, 9}, + {MAP_GROUP(LITTLEROOT_TOWN), MAP_NUM(LITTLEROOT_TOWN), 14, 9}, + {MAP_GROUP(OLDALE_TOWN), MAP_NUM(OLDALE_TOWN), 6, 17}, + {MAP_GROUP(DEWFORD_TOWN), MAP_NUM(DEWFORD_TOWN), 2, 11}, + {MAP_GROUP(LAVARIDGE_TOWN), MAP_NUM(LAVARIDGE_TOWN), 9, 7}, + {MAP_GROUP(FALLARBOR_TOWN), MAP_NUM(FALLARBOR_TOWN), 14, 8}, + {MAP_GROUP(VERDANTURF_TOWN), MAP_NUM(VERDANTURF_TOWN), 16, 4}, + {MAP_GROUP(PACIFIDLOG_TOWN), MAP_NUM(PACIFIDLOG_TOWN), 8, 16}, + {MAP_GROUP(EVER_GRANDE_CITY), MAP_NUM(EVER_GRANDE_CITY), 18, 6}, + {MAP_GROUP(BATTLE_TOWER_OUTSIDE), MAP_NUM(BATTLE_TOWER_OUTSIDE), 14, 9}, + {MAP_GROUP(SOUTHERN_ISLAND_EXTERIOR), MAP_NUM(SOUTHERN_ISLAND_EXTERIOR), 15, 20}, }; u32 GetHealLocationIndexByMap(u16 mapGroup, u16 mapNum) diff --git a/src/field/menu_helpers.c b/src/field/menu_helpers.c index b9d694bec..e3ef0c790 100644 --- a/src/field/menu_helpers.c +++ b/src/field/menu_helpers.c @@ -261,7 +261,7 @@ bool8 sub_80F92F4(u16 itemId) return TRUE; } - if (!(gSaveBlock1.location.mapGroup == MAP_GROUP(MAP_TRADE_CENTER) && gSaveBlock1.location.mapNum == MAP_NUM(MAP_TRADE_CENTER))) + if (!(gSaveBlock1.location.mapGroup == MAP_GROUP(TRADE_CENTER) && gSaveBlock1.location.mapNum == MAP_NUM(TRADE_CENTER))) { return TRUE; } diff --git a/src/field/overworld.c b/src/field/overworld.c index d27d8e06e..21f3f98ef 100644 --- a/src/field/overworld.c +++ b/src/field/overworld.c @@ -738,9 +738,9 @@ u16 cur_mapdata_block_role_at_screen_center_acc_to_sav1(void) bool32 Overworld_IsBikingAllowed(void) { // is player in cycling road entrance? - if (gSaveBlock1.location.mapGroup == MAP_GROUP(MAP_ROUTE110_SEASIDE_CYCLING_ROAD_SOUTH_ENTRANCE) - && (gSaveBlock1.location.mapNum == MAP_NUM(MAP_ROUTE110_SEASIDE_CYCLING_ROAD_SOUTH_ENTRANCE) - || gSaveBlock1.location.mapNum == MAP_NUM(MAP_ROUTE110_SEASIDE_CYCLING_ROAD_NORTH_ENTRANCE))) + if (gSaveBlock1.location.mapGroup == MAP_GROUP(ROUTE110_SEASIDE_CYCLING_ROAD_SOUTH_ENTRANCE) + && (gSaveBlock1.location.mapNum == MAP_NUM(ROUTE110_SEASIDE_CYCLING_ROAD_SOUTH_ENTRANCE) + || gSaveBlock1.location.mapNum == MAP_NUM(ROUTE110_SEASIDE_CYCLING_ROAD_NORTH_ENTRANCE))) return TRUE; // is player indoor, in a secret base, or underwater? @@ -752,11 +752,11 @@ bool32 Overworld_IsBikingAllowed(void) return FALSE; // Thou shalt not bike on the sacred resting grounds of Kyogre/Groudon. - if (gSaveBlock1.location.mapGroup == MAP_GROUP(MAP_SEAFLOOR_CAVERN_ROOM9) - && gSaveBlock1.location.mapNum == MAP_NUM(MAP_SEAFLOOR_CAVERN_ROOM9)) + if (gSaveBlock1.location.mapGroup == MAP_GROUP(SEAFLOOR_CAVERN_ROOM9) + && gSaveBlock1.location.mapNum == MAP_NUM(SEAFLOOR_CAVERN_ROOM9)) return FALSE; - if (gSaveBlock1.location.mapGroup == MAP_GROUP(MAP_CAVE_OF_ORIGIN_B4F) - && gSaveBlock1.location.mapNum == MAP_NUM(MAP_CAVE_OF_ORIGIN_B4F)) + if (gSaveBlock1.location.mapGroup == MAP_GROUP(CAVE_OF_ORIGIN_B4F) + && gSaveBlock1.location.mapNum == MAP_NUM(CAVE_OF_ORIGIN_B4F)) return FALSE; return TRUE; @@ -798,16 +798,16 @@ static bool16 ShouldLegendaryMusicPlayAtLocation(struct WarpData *warp) { switch (warp->mapNum) { - case MAP_NUM(MAP_LILYCOVE_CITY): - case MAP_NUM(MAP_MOSSDEEP_CITY): - case MAP_NUM(MAP_SOOTOPOLIS_CITY): - case MAP_NUM(MAP_EVER_GRANDE_CITY): + case MAP_NUM(LILYCOVE_CITY): + case MAP_NUM(MOSSDEEP_CITY): + case MAP_NUM(SOOTOPOLIS_CITY): + case MAP_NUM(EVER_GRANDE_CITY): return TRUE; - case MAP_NUM(MAP_ROUTE124): - case MAP_NUM(MAP_ROUTE125): - case MAP_NUM(MAP_ROUTE126): - case MAP_NUM(MAP_ROUTE127): - case MAP_NUM(MAP_ROUTE128): + case MAP_NUM(ROUTE124): + case MAP_NUM(ROUTE125): + case MAP_NUM(ROUTE126): + case MAP_NUM(ROUTE127): + case MAP_NUM(ROUTE128): return TRUE; } } @@ -818,10 +818,10 @@ static bool16 IsInfiltratedWeatherInstitute(struct WarpData *warp) { if (VarGet(VAR_WEATHER_INSTITUTE_CLEARED)) return FALSE; - if (warp->mapGroup != MAP_GROUP(MAP_ROUTE119_WEATHER_INSTITUTE_1F)) + if (warp->mapGroup != MAP_GROUP(ROUTE119_WEATHER_INSTITUTE_1F)) return FALSE; - if (warp->mapNum == MAP_NUM(MAP_ROUTE119_WEATHER_INSTITUTE_1F) - || warp->mapNum == MAP_NUM(MAP_ROUTE119_WEATHER_INSTITUTE_2F)) + if (warp->mapNum == MAP_NUM(ROUTE119_WEATHER_INSTITUTE_1F) + || warp->mapNum == MAP_NUM(ROUTE119_WEATHER_INSTITUTE_2F)) return TRUE; return FALSE; } @@ -841,8 +841,8 @@ u16 GetCurrLocationDefaultMusic(void) u16 music; // Play the desert music only when the sandstorm is active on Route 111. - if (gSaveBlock1.location.mapGroup == MAP_GROUP(MAP_ROUTE111) - && gSaveBlock1.location.mapNum == MAP_NUM(MAP_ROUTE111) + if (gSaveBlock1.location.mapGroup == MAP_GROUP(ROUTE111) + && gSaveBlock1.location.mapNum == MAP_NUM(ROUTE111) && GetSav1Weather() == 8) return BGM_ASHROAD; @@ -869,8 +869,8 @@ u16 GetWarpDestinationMusic(void) } else { - if (gSaveBlock1.location.mapGroup == MAP_GROUP(MAP_MAUVILLE_CITY) - && gSaveBlock1.location.mapNum == MAP_NUM(MAP_MAUVILLE_CITY)) + if (gSaveBlock1.location.mapGroup == MAP_GROUP(MAUVILLE_CITY) + && gSaveBlock1.location.mapNum == MAP_NUM(MAUVILLE_CITY)) return BGM_DOORO_X1; else return BGM_GRANROAD; @@ -1024,8 +1024,8 @@ void UpdateAmbientCry(s16 *state, u16 *delayCounter) void ChooseAmbientCrySpecies(void) { - if ((gSaveBlock1.location.mapGroup == MAP_GROUP(MAP_ROUTE130) - && gSaveBlock1.location.mapNum == MAP_NUM(MAP_ROUTE130)) + if ((gSaveBlock1.location.mapGroup == MAP_GROUP(ROUTE130) + && gSaveBlock1.location.mapNum == MAP_NUM(ROUTE130)) && !IsMirageIslandPresent()) { // Only play water pokemon cries on this route diff --git a/src/field/region_map.c b/src/field/region_map.c index 5fbe930e1..f2e4b3251 100644 --- a/src/field/region_map.c +++ b/src/field/region_map.c @@ -707,9 +707,9 @@ static void InitializeCursorPosition(void) u16 r9; if (gSaveBlock1.location.mapGroup == 25 - && (gSaveBlock1.location.mapNum == MAP_NUM(MAP_SS_TIDAL_CORRIDOR) - || gSaveBlock1.location.mapNum == MAP_NUM(MAP_SS_TIDAL_LOWER_DECK) - || gSaveBlock1.location.mapNum == MAP_NUM(MAP_SS_TIDAL_ROOMS))) + && (gSaveBlock1.location.mapNum == MAP_NUM(SS_TIDAL_CORRIDOR) + || gSaveBlock1.location.mapNum == MAP_NUM(SS_TIDAL_LOWER_DECK) + || gSaveBlock1.location.mapNum == MAP_NUM(SS_TIDAL_ROOMS))) { sub_80FB600(); return; diff --git a/src/field/rotating_gate.c b/src/field/rotating_gate.c index c17b604c2..00008c69c 100644 --- a/src/field/rotating_gate.c +++ b/src/field/rotating_gate.c @@ -622,14 +622,14 @@ static EWRAM_DATA u8 gRotatingGate_PuzzleCount = 0; static int GetCurrentMapRotatingGatePuzzleType(void) { - if (gSaveBlock1.location.mapGroup == MAP_GROUP(MAP_FORTREE_CITY_GYM) && - gSaveBlock1.location.mapNum == MAP_NUM(MAP_FORTREE_CITY_GYM)) + if (gSaveBlock1.location.mapGroup == MAP_GROUP(FORTREE_CITY_GYM) && + gSaveBlock1.location.mapNum == MAP_NUM(FORTREE_CITY_GYM)) { return PUZZLE_FORTREE_CITY_GYM; } - if (gSaveBlock1.location.mapGroup == MAP_GROUP(MAP_ROUTE110_TRICK_HOUSE_PUZZLE6) && - gSaveBlock1.location.mapNum == MAP_NUM(MAP_ROUTE110_TRICK_HOUSE_PUZZLE6)) + if (gSaveBlock1.location.mapGroup == MAP_GROUP(ROUTE110_TRICK_HOUSE_PUZZLE6) && + gSaveBlock1.location.mapNum == MAP_NUM(ROUTE110_TRICK_HOUSE_PUZZLE6)) { return PUZZLE_ROUTE110_TRICK_HOUSE_PUZZLE6; } diff --git a/src/field/secret_base.c b/src/field/secret_base.c index b3591564d..fee79a18c 100644 --- a/src/field/secret_base.c +++ b/src/field/secret_base.c @@ -69,30 +69,30 @@ const struct const u8 gUnknown_083D1374[] = { - MAP_NUM(MAP_SECRET_BASE_RED_CAVE1), 0, 1, 3, - MAP_NUM(MAP_SECRET_BASE_RED_CAVE2), 0, 5, 9, - MAP_NUM(MAP_SECRET_BASE_RED_CAVE3), 0, 1, 3, - MAP_NUM(MAP_SECRET_BASE_RED_CAVE4), 0, 7, 13, - MAP_NUM(MAP_SECRET_BASE_BROWN_CAVE1), 0, 2, 3, - MAP_NUM(MAP_SECRET_BASE_BROWN_CAVE2), 0, 9, 2, - MAP_NUM(MAP_SECRET_BASE_BROWN_CAVE3), 0, 13, 4, - MAP_NUM(MAP_SECRET_BASE_BROWN_CAVE4), 0, 1, 2, - MAP_NUM(MAP_SECRET_BASE_BLUE_CAVE1), 0, 1, 3, - MAP_NUM(MAP_SECRET_BASE_BLUE_CAVE2), 0, 1, 2, - MAP_NUM(MAP_SECRET_BASE_BLUE_CAVE3), 0, 3, 15, - MAP_NUM(MAP_SECRET_BASE_BLUE_CAVE4), 0, 3, 14, - MAP_NUM(MAP_SECRET_BASE_YELLOW_CAVE1), 0, 9, 3, - MAP_NUM(MAP_SECRET_BASE_YELLOW_CAVE2), 0, 8, 7, - MAP_NUM(MAP_SECRET_BASE_YELLOW_CAVE3), 0, 3, 6, - MAP_NUM(MAP_SECRET_BASE_YELLOW_CAVE4), 0, 5, 9, - MAP_NUM(MAP_SECRET_BASE_TREE1), 0, 2, 3, - MAP_NUM(MAP_SECRET_BASE_TREE2), 0, 5, 6, - MAP_NUM(MAP_SECRET_BASE_TREE3), 0, 15, 3, - MAP_NUM(MAP_SECRET_BASE_TREE4), 0, 4, 10, - MAP_NUM(MAP_SECRET_BASE_SHRUB1), 0, 3, 3, - MAP_NUM(MAP_SECRET_BASE_SHRUB2), 0, 1, 2, - MAP_NUM(MAP_SECRET_BASE_SHRUB3), 0, 7, 8, - MAP_NUM(MAP_SECRET_BASE_SHRUB4), 0, 9, 6 + MAP_NUM(SECRET_BASE_RED_CAVE1), 0, 1, 3, + MAP_NUM(SECRET_BASE_RED_CAVE2), 0, 5, 9, + MAP_NUM(SECRET_BASE_RED_CAVE3), 0, 1, 3, + MAP_NUM(SECRET_BASE_RED_CAVE4), 0, 7, 13, + MAP_NUM(SECRET_BASE_BROWN_CAVE1), 0, 2, 3, + MAP_NUM(SECRET_BASE_BROWN_CAVE2), 0, 9, 2, + MAP_NUM(SECRET_BASE_BROWN_CAVE3), 0, 13, 4, + MAP_NUM(SECRET_BASE_BROWN_CAVE4), 0, 1, 2, + MAP_NUM(SECRET_BASE_BLUE_CAVE1), 0, 1, 3, + MAP_NUM(SECRET_BASE_BLUE_CAVE2), 0, 1, 2, + MAP_NUM(SECRET_BASE_BLUE_CAVE3), 0, 3, 15, + MAP_NUM(SECRET_BASE_BLUE_CAVE4), 0, 3, 14, + MAP_NUM(SECRET_BASE_YELLOW_CAVE1), 0, 9, 3, + MAP_NUM(SECRET_BASE_YELLOW_CAVE2), 0, 8, 7, + MAP_NUM(SECRET_BASE_YELLOW_CAVE3), 0, 3, 6, + MAP_NUM(SECRET_BASE_YELLOW_CAVE4), 0, 5, 9, + MAP_NUM(SECRET_BASE_TREE1), 0, 2, 3, + MAP_NUM(SECRET_BASE_TREE2), 0, 5, 6, + MAP_NUM(SECRET_BASE_TREE3), 0, 15, 3, + MAP_NUM(SECRET_BASE_TREE4), 0, 4, 10, + MAP_NUM(SECRET_BASE_SHRUB1), 0, 3, 3, + MAP_NUM(SECRET_BASE_SHRUB2), 0, 1, 2, + MAP_NUM(SECRET_BASE_SHRUB3), 0, 7, 8, + MAP_NUM(SECRET_BASE_SHRUB4), 0, 9, 6 }; const struct MenuAction2 gUnknown_083D13D4[] = { @@ -317,7 +317,7 @@ void sub_80BB970(struct MapEvents *events) void sub_80BBA14(void) { s8 idx = 4 * (gUnknown_020387DC / 10); - warp1_set_2(MAP_GROUP(MAP_SECRET_BASE_RED_CAVE1), gUnknown_083D1374[idx], gUnknown_083D1374[idx + 1]); + warp1_set_2(MAP_GROUP(SECRET_BASE_RED_CAVE1), gUnknown_083D1374[idx], gUnknown_083D1374[idx + 1]); } void sub_80BBA48(u8 taskid) @@ -402,7 +402,7 @@ void sub_80BBC78(void) bool8 CurrentMapIsSecretBase(void) { - if (gSaveBlock1.location.mapGroup == MAP_GROUP(MAP_SECRET_BASE_SHRUB4) && (u8)(gSaveBlock1.location.mapNum) <= MAP_NUM(MAP_SECRET_BASE_SHRUB4)) + if (gSaveBlock1.location.mapGroup == MAP_GROUP(SECRET_BASE_SHRUB4) && (u8)(gSaveBlock1.location.mapNum) <= MAP_NUM(SECRET_BASE_SHRUB4)) return TRUE; return FALSE; } diff --git a/src/field/tv.c b/src/field/tv.c index 15a3f4d4d..71d6455bd 100644 --- a/src/field/tv.c +++ b/src/field/tv.c @@ -551,8 +551,8 @@ void UpdateTVScreensOnMap(int width, int height) case 2: break; default: - if (gSaveBlock1.location.mapGroup == MAP_GROUP(MAP_LILYCOVE_CITY_COVE_LILY_MOTEL_1F) - && gSaveBlock1.location.mapNum == MAP_NUM(MAP_LILYCOVE_CITY_COVE_LILY_MOTEL_1F)) + if (gSaveBlock1.location.mapGroup == MAP_GROUP(LILYCOVE_CITY_COVE_LILY_MOTEL_1F) + && gSaveBlock1.location.mapNum == MAP_NUM(LILYCOVE_CITY_COVE_LILY_MOTEL_1F)) { SetTVMetatilesOnMap(width, height, 0x3); } @@ -1460,16 +1460,16 @@ bool8 IsPriceDiscounted(u8 arg0) switch (arg0) { case 1: - if (gSaveBlock1.location.mapGroup == MAP_GROUP(MAP_SLATEPORT_CITY) - && gSaveBlock1.location.mapNum == MAP_NUM(MAP_SLATEPORT_CITY) + if (gSaveBlock1.location.mapGroup == MAP_GROUP(SLATEPORT_CITY) + && gSaveBlock1.location.mapNum == MAP_NUM(SLATEPORT_CITY) && gScriptLastTalked == 0x1a) return TRUE; else return FALSE; break; case 3: - if (gSaveBlock1.location.mapGroup == MAP_GROUP(MAP_LILYCOVE_CITY_DEPARTMENT_STORE_ROOFTOP) - && gSaveBlock1.location.mapNum == MAP_NUM(MAP_LILYCOVE_CITY_DEPARTMENT_STORE_ROOFTOP)) + if (gSaveBlock1.location.mapGroup == MAP_GROUP(LILYCOVE_CITY_DEPARTMENT_STORE_ROOFTOP) + && gSaveBlock1.location.mapNum == MAP_NUM(LILYCOVE_CITY_DEPARTMENT_STORE_ROOFTOP)) return TRUE; else return FALSE; @@ -2121,16 +2121,16 @@ u32 GetPlayerTrainerId(void) u8 CheckForBigMovieOrEmergencyNewsOnTV(void) { - if (gSaveBlock1.location.mapGroup != MAP_GROUP(MAP_LITTLEROOT_TOWN_BRENDANS_HOUSE_1F)) + if (gSaveBlock1.location.mapGroup != MAP_GROUP(LITTLEROOT_TOWN_BRENDANS_HOUSE_1F)) return 0; if (gSaveBlock2.playerGender == MALE) { - if (gSaveBlock1.location.mapNum != MAP_NUM(MAP_LITTLEROOT_TOWN_BRENDANS_HOUSE_1F)) + if (gSaveBlock1.location.mapNum != MAP_NUM(LITTLEROOT_TOWN_BRENDANS_HOUSE_1F)) return 0; } else { - if (gSaveBlock1.location.mapNum != MAP_NUM(MAP_LITTLEROOT_TOWN_MAYS_HOUSE_1F)) + if (gSaveBlock1.location.mapNum != MAP_NUM(LITTLEROOT_TOWN_MAYS_HOUSE_1F)) return 0; } if (FlagGet(SYS_TV_LATI) == 1) @@ -2142,11 +2142,11 @@ u8 CheckForBigMovieOrEmergencyNewsOnTV(void) void GetMomOrDadStringForTVMessage(void) { - if (gSaveBlock1.location.mapGroup == MAP_GROUP(MAP_LITTLEROOT_TOWN_BRENDANS_HOUSE_1F)) + if (gSaveBlock1.location.mapGroup == MAP_GROUP(LITTLEROOT_TOWN_BRENDANS_HOUSE_1F)) { if (gSaveBlock2.playerGender == MALE) { - if (gSaveBlock1.location.mapNum == MAP_NUM(MAP_LITTLEROOT_TOWN_BRENDANS_HOUSE_1F)) + if (gSaveBlock1.location.mapNum == MAP_NUM(LITTLEROOT_TOWN_BRENDANS_HOUSE_1F)) { StringCopy(gStringVar1, gOtherText_Mom); VarSet(VAR_0x4003, 1); @@ -2154,7 +2154,7 @@ void GetMomOrDadStringForTVMessage(void) } else { - if (gSaveBlock1.location.mapNum == MAP_NUM(MAP_LITTLEROOT_TOWN_MAYS_HOUSE_1F)) + if (gSaveBlock1.location.mapNum == MAP_NUM(LITTLEROOT_TOWN_MAYS_HOUSE_1F)) { StringCopy(gStringVar1, gOtherText_Mom); VarSet(VAR_0x4003, 1); diff --git a/src/field/wild_encounter.c b/src/field/wild_encounter.c index 2376f582c..9b3db1a52 100644 --- a/src/field/wild_encounter.c +++ b/src/field/wild_encounter.c @@ -2953,8 +2953,8 @@ static bool8 CheckFeebas(void) u8 route119section = 0; u16 waterTileNum; - if (gSaveBlock1.location.mapGroup == MAP_GROUP(MAP_ROUTE119) - && gSaveBlock1.location.mapNum == MAP_NUM(MAP_ROUTE119)) + if (gSaveBlock1.location.mapGroup == MAP_GROUP(ROUTE119) + && gSaveBlock1.location.mapNum == MAP_NUM(ROUTE119)) { GetXYCoordsOneStepInFrontOfPlayer(&x, &y); x -= 7; -- cgit v1.2.3 From 410fbfe7fe0e3ab1f367ab83fbea4a8145bf82fc Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Sun, 26 Nov 2017 13:53:34 -0800 Subject: Fix German build --- src/data/text/move_descriptions_de.h | 8 +++++--- src/pokemon/pokemon_summary_screen.c | 6 ++++-- 2 files changed, 9 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/data/text/move_descriptions_de.h b/src/data/text/move_descriptions_de.h index 37f1ea410..854336295 100644 --- a/src/data/text/move_descriptions_de.h +++ b/src/data/text/move_descriptions_de.h @@ -95,7 +95,9 @@ static const u8 MoveDescription_DoubleKick[] = _( "wird zweimal getroffen."); static const u8 MoveDescription_MegaKick[] = _( - "Ein extrem heftiger Tritt.$"static const u8 MoveDescription_JumpKick[] = (); + "Ein extrem heftiger Tritt."); + +static const u8 MoveDescription_JumpKick[] = _( "Sprung-Tritt. Selbstschä-\n" "digung bei Misserfolg."); @@ -1411,7 +1413,7 @@ static const u8 MoveDescription_PsychoBoost[] = _( "Angriff mit voller Kraft.\n" "SPEZ. ANGR. sinkt deutlich."); -const u8 * const MoveDescriptions[] = { +const u8 * const gMoveDescriptions[] = { MoveDescription_Pound, MoveDescription_KarateChop, MoveDescription_DoubleSlap, @@ -1766,4 +1768,4 @@ const u8 * const MoveDescriptions[] = { MoveDescription_WaterPulse, MoveDescription_DoomDesire, MoveDescription_PsychoBoost, -]; +}; diff --git a/src/pokemon/pokemon_summary_screen.c b/src/pokemon/pokemon_summary_screen.c index c7bdab069..f141f1c19 100644 --- a/src/pokemon/pokemon_summary_screen.c +++ b/src/pokemon/pokemon_summary_screen.c @@ -523,7 +523,9 @@ static const struct SpriteTemplate sSpriteTemplate_83C1304 = { static const u16 sSummaryScreenMonMarkingsPalette[] = INCBIN_U16("graphics/summary_screen/mon_markings.gbapal"); #if ENGLISH -static const u16 sSummaryScreenTextTiles[] = INCBIN_U16("graphics/summary_screen/text.4bpp"); +static const u16 gSummaryScreenTextTiles[] = INCBIN_U16("graphics/summary_screen/text.4bpp"); +#elif GERMAN +extern const u16 gSummaryScreenTextTiles[]; #endif static const u16 sSummaryScreenButtonTiles[] = INCBIN_U16("graphics/summary_screen/buttons.4bpp"); @@ -732,7 +734,7 @@ bool8 sub_809DA84(void) gMain.state++; break; case 9: - src = sSummaryScreenTextTiles; + src = gSummaryScreenTextTiles; dest = (void *)VRAM + 0xD000; DmaCopy16(3, src, dest, 320); -- cgit v1.2.3 From e23d43ecb06b6fd5f8e6f72accf7787895833ea6 Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Sun, 26 Nov 2017 19:37:57 -0500 Subject: move src/anim to src/battle/anim. --- src/anim/alert.c | 33 ----- src/anim/angel.c | 37 ----- src/anim/angel_kiss.c | 87 ----------- src/anim/anger.c | 34 ----- src/anim/blow_kiss.c | 39 ----- src/anim/bottle.c | 125 ---------------- src/anim/brace.c | 45 ------ src/anim/breath.c | 36 ----- src/anim/bullet.c | 69 --------- src/anim/copy_orb.c | 46 ------ src/anim/cube.c | 52 ------- src/anim/curtain.c | 82 ----------- src/anim/cutter.c | 130 ----------------- src/anim/cyclone.c | 28 ---- src/anim/draw.c | 292 ------------------------------------- src/anim/drum.c | 32 ----- src/anim/egg.c | 122 ---------------- src/anim/espeed.c | 241 ------------------------------- src/anim/evasion.c | 95 ------------ src/anim/fang.c | 19 --- src/anim/flash.c | 123 ---------------- src/anim/flying_hearts.c | 40 ------ src/anim/flying_path.c | 296 -------------------------------------- src/anim/flying_petals.c | 83 ----------- src/anim/glitter.c | 63 -------- src/anim/glow.c | 55 ------- src/anim/grip.c | 44 ------ src/anim/grow.c | 31 ---- src/anim/guillotine.c | 90 ------------ src/anim/heal.c | 27 ---- src/anim/heart_1.c | 25 ---- src/anim/homing.c | 86 ----------- src/anim/hop.c | 160 --------------------- src/anim/hop_2.c | 70 --------- src/anim/kiss_fountain.c | 38 ----- src/anim/leaf.c | 74 ---------- src/anim/love_bg.c | 128 ----------------- src/anim/lunge_1.c | 124 ---------------- src/anim/lunge_2.c | 163 --------------------- src/anim/money.c | 62 -------- src/anim/moon.c | 39 ----- src/anim/note_rain.c | 37 ----- src/anim/note_scatter.c | 54 ------- src/anim/note_scatter_2.c | 57 -------- src/anim/note_wave.c | 143 ------------------ src/anim/orbit.c | 147 ------------------- src/anim/orbit_fast.c | 62 -------- src/anim/orbit_scatter.c | 31 ---- src/anim/orbs.c | 162 --------------------- src/anim/osmose.c | 29 ---- src/anim/perceive.c | 24 ---- src/anim/powder.c | 48 ------- src/anim/ring.c | 156 -------------------- src/anim/roots.c | 67 --------- src/anim/scan.c | 200 -------------------------- src/anim/scary_face.c | 136 ------------------ src/anim/seed.c | 50 ------- src/anim/shadow_enlarge.c | 35 ----- src/anim/shadow_minimize.c | 262 --------------------------------- src/anim/shield.c | 81 ----------- src/anim/shimmer.c | 48 ------- src/anim/silhouette.c | 77 ---------- src/anim/slash.c | 83 ----------- src/anim/sleep.c | 44 ------ src/anim/slice.c | 111 -------------- src/anim/smoke.c | 22 --- src/anim/sonic.c | 136 ------------------ src/anim/sonic_task.c | 152 -------------------- src/anim/spin_finger.c | 73 ---------- src/anim/spit.c | 30 ---- src/anim/splash.c | 87 ----------- src/anim/startle.c | 56 -------- src/anim/strike.c | 77 ---------- src/anim/switch.c | 128 ----------------- src/anim/sword.c | 30 ---- src/anim/taunt_finger.c | 56 -------- src/anim/tendrils.c | 67 --------- src/anim/thought.c | 52 ------- src/anim/thrashing.c | 111 -------------- src/anim/tile_in.c | 51 ------- src/anim/tile_out.c | 81 ----------- src/anim/twinkle.c | 42 ------ src/anim/unused_1.c | 25 ---- src/anim/unused_2.c | 80 ----------- src/anim/unused_3.c | 45 ------ src/anim/unused_4.c | 58 -------- src/anim/unused_5.c | 25 ---- src/anim/unused_6.c | 49 ------- src/anim/unused_7.c | 51 ------- src/anim/unused_8.c | 41 ------ src/anim/unused_9.c | 113 --------------- src/anim/wave_finger.c | 39 ----- src/anim/whip.c | 46 ------ src/anim/withdraw.c | 69 --------- src/battle/anim/alert.c | 33 +++++ src/battle/anim/angel.c | 37 +++++ src/battle/anim/angel_kiss.c | 87 +++++++++++ src/battle/anim/anger.c | 34 +++++ src/battle/anim/blow_kiss.c | 39 +++++ src/battle/anim/bottle.c | 125 ++++++++++++++++ src/battle/anim/brace.c | 45 ++++++ src/battle/anim/breath.c | 36 +++++ src/battle/anim/bullet.c | 69 +++++++++ src/battle/anim/copy_orb.c | 46 ++++++ src/battle/anim/cube.c | 52 +++++++ src/battle/anim/curtain.c | 82 +++++++++++ src/battle/anim/cutter.c | 130 +++++++++++++++++ src/battle/anim/cyclone.c | 28 ++++ src/battle/anim/draw.c | 292 +++++++++++++++++++++++++++++++++++++ src/battle/anim/drum.c | 32 +++++ src/battle/anim/egg.c | 122 ++++++++++++++++ src/battle/anim/espeed.c | 241 +++++++++++++++++++++++++++++++ src/battle/anim/evasion.c | 95 ++++++++++++ src/battle/anim/fang.c | 19 +++ src/battle/anim/flash.c | 123 ++++++++++++++++ src/battle/anim/flying_hearts.c | 40 ++++++ src/battle/anim/flying_path.c | 296 ++++++++++++++++++++++++++++++++++++++ src/battle/anim/flying_petals.c | 83 +++++++++++ src/battle/anim/glitter.c | 63 ++++++++ src/battle/anim/glow.c | 55 +++++++ src/battle/anim/grip.c | 44 ++++++ src/battle/anim/grow.c | 31 ++++ src/battle/anim/guillotine.c | 90 ++++++++++++ src/battle/anim/heal.c | 27 ++++ src/battle/anim/heart_1.c | 25 ++++ src/battle/anim/homing.c | 86 +++++++++++ src/battle/anim/hop.c | 160 +++++++++++++++++++++ src/battle/anim/hop_2.c | 70 +++++++++ src/battle/anim/kiss_fountain.c | 38 +++++ src/battle/anim/leaf.c | 74 ++++++++++ src/battle/anim/love_bg.c | 128 +++++++++++++++++ src/battle/anim/lunge_1.c | 124 ++++++++++++++++ src/battle/anim/lunge_2.c | 163 +++++++++++++++++++++ src/battle/anim/money.c | 62 ++++++++ src/battle/anim/moon.c | 39 +++++ src/battle/anim/note_rain.c | 37 +++++ src/battle/anim/note_scatter.c | 54 +++++++ src/battle/anim/note_scatter_2.c | 57 ++++++++ src/battle/anim/note_wave.c | 143 ++++++++++++++++++ src/battle/anim/orbit.c | 147 +++++++++++++++++++ src/battle/anim/orbit_fast.c | 62 ++++++++ src/battle/anim/orbit_scatter.c | 31 ++++ src/battle/anim/orbs.c | 162 +++++++++++++++++++++ src/battle/anim/osmose.c | 29 ++++ src/battle/anim/perceive.c | 24 ++++ src/battle/anim/powder.c | 48 +++++++ src/battle/anim/ring.c | 156 ++++++++++++++++++++ src/battle/anim/roots.c | 67 +++++++++ src/battle/anim/scan.c | 200 ++++++++++++++++++++++++++ src/battle/anim/scary_face.c | 136 ++++++++++++++++++ src/battle/anim/seed.c | 50 +++++++ src/battle/anim/shadow_enlarge.c | 35 +++++ src/battle/anim/shadow_minimize.c | 262 +++++++++++++++++++++++++++++++++ src/battle/anim/shield.c | 81 +++++++++++ src/battle/anim/shimmer.c | 48 +++++++ src/battle/anim/silhouette.c | 77 ++++++++++ src/battle/anim/slash.c | 83 +++++++++++ src/battle/anim/sleep.c | 44 ++++++ src/battle/anim/slice.c | 111 ++++++++++++++ src/battle/anim/smoke.c | 22 +++ src/battle/anim/sonic.c | 136 ++++++++++++++++++ src/battle/anim/sonic_task.c | 152 ++++++++++++++++++++ src/battle/anim/spin_finger.c | 73 ++++++++++ src/battle/anim/spit.c | 30 ++++ src/battle/anim/splash.c | 87 +++++++++++ src/battle/anim/startle.c | 56 ++++++++ src/battle/anim/strike.c | 77 ++++++++++ src/battle/anim/switch.c | 128 +++++++++++++++++ src/battle/anim/sword.c | 30 ++++ src/battle/anim/taunt_finger.c | 56 ++++++++ src/battle/anim/tendrils.c | 67 +++++++++ src/battle/anim/thought.c | 52 +++++++ src/battle/anim/thrashing.c | 111 ++++++++++++++ src/battle/anim/tile_in.c | 51 +++++++ src/battle/anim/tile_out.c | 81 +++++++++++ src/battle/anim/twinkle.c | 42 ++++++ src/battle/anim/unused_1.c | 25 ++++ src/battle/anim/unused_2.c | 80 +++++++++++ src/battle/anim/unused_3.c | 45 ++++++ src/battle/anim/unused_4.c | 58 ++++++++ src/battle/anim/unused_5.c | 25 ++++ src/battle/anim/unused_6.c | 49 +++++++ src/battle/anim/unused_7.c | 51 +++++++ src/battle/anim/unused_8.c | 41 ++++++ src/battle/anim/unused_9.c | 113 +++++++++++++++ src/battle/anim/wave_finger.c | 39 +++++ src/battle/anim/whip.c | 46 ++++++ src/battle/anim/withdraw.c | 69 +++++++++ 188 files changed, 7501 insertions(+), 7501 deletions(-) delete mode 100755 src/anim/alert.c delete mode 100755 src/anim/angel.c delete mode 100755 src/anim/angel_kiss.c delete mode 100755 src/anim/anger.c delete mode 100755 src/anim/blow_kiss.c delete mode 100755 src/anim/bottle.c delete mode 100755 src/anim/brace.c delete mode 100755 src/anim/breath.c delete mode 100755 src/anim/bullet.c delete mode 100755 src/anim/copy_orb.c delete mode 100755 src/anim/cube.c delete mode 100755 src/anim/curtain.c delete mode 100755 src/anim/cutter.c delete mode 100755 src/anim/cyclone.c delete mode 100755 src/anim/draw.c delete mode 100755 src/anim/drum.c delete mode 100755 src/anim/egg.c delete mode 100755 src/anim/espeed.c delete mode 100755 src/anim/evasion.c delete mode 100755 src/anim/fang.c delete mode 100755 src/anim/flash.c delete mode 100755 src/anim/flying_hearts.c delete mode 100755 src/anim/flying_path.c delete mode 100755 src/anim/flying_petals.c delete mode 100755 src/anim/glitter.c delete mode 100755 src/anim/glow.c delete mode 100755 src/anim/grip.c delete mode 100755 src/anim/grow.c delete mode 100755 src/anim/guillotine.c delete mode 100755 src/anim/heal.c delete mode 100755 src/anim/heart_1.c delete mode 100755 src/anim/homing.c delete mode 100755 src/anim/hop.c delete mode 100755 src/anim/hop_2.c delete mode 100755 src/anim/kiss_fountain.c delete mode 100755 src/anim/leaf.c delete mode 100755 src/anim/love_bg.c delete mode 100755 src/anim/lunge_1.c delete mode 100755 src/anim/lunge_2.c delete mode 100755 src/anim/money.c delete mode 100755 src/anim/moon.c delete mode 100755 src/anim/note_rain.c delete mode 100755 src/anim/note_scatter.c delete mode 100755 src/anim/note_scatter_2.c delete mode 100755 src/anim/note_wave.c delete mode 100755 src/anim/orbit.c delete mode 100755 src/anim/orbit_fast.c delete mode 100755 src/anim/orbit_scatter.c delete mode 100755 src/anim/orbs.c delete mode 100755 src/anim/osmose.c delete mode 100755 src/anim/perceive.c delete mode 100755 src/anim/powder.c delete mode 100755 src/anim/ring.c delete mode 100755 src/anim/roots.c delete mode 100755 src/anim/scan.c delete mode 100755 src/anim/scary_face.c delete mode 100755 src/anim/seed.c delete mode 100755 src/anim/shadow_enlarge.c delete mode 100755 src/anim/shadow_minimize.c delete mode 100755 src/anim/shield.c delete mode 100755 src/anim/shimmer.c delete mode 100755 src/anim/silhouette.c delete mode 100755 src/anim/slash.c delete mode 100755 src/anim/sleep.c delete mode 100755 src/anim/slice.c delete mode 100755 src/anim/smoke.c delete mode 100755 src/anim/sonic.c delete mode 100755 src/anim/sonic_task.c delete mode 100755 src/anim/spin_finger.c delete mode 100755 src/anim/spit.c delete mode 100755 src/anim/splash.c delete mode 100755 src/anim/startle.c delete mode 100755 src/anim/strike.c delete mode 100755 src/anim/switch.c delete mode 100755 src/anim/sword.c delete mode 100755 src/anim/taunt_finger.c delete mode 100755 src/anim/tendrils.c delete mode 100755 src/anim/thought.c delete mode 100755 src/anim/thrashing.c delete mode 100755 src/anim/tile_in.c delete mode 100755 src/anim/tile_out.c delete mode 100755 src/anim/twinkle.c delete mode 100755 src/anim/unused_1.c delete mode 100755 src/anim/unused_2.c delete mode 100755 src/anim/unused_3.c delete mode 100755 src/anim/unused_4.c delete mode 100755 src/anim/unused_5.c delete mode 100755 src/anim/unused_6.c delete mode 100755 src/anim/unused_7.c delete mode 100755 src/anim/unused_8.c delete mode 100755 src/anim/unused_9.c delete mode 100755 src/anim/wave_finger.c delete mode 100755 src/anim/whip.c delete mode 100755 src/anim/withdraw.c create mode 100755 src/battle/anim/alert.c create mode 100755 src/battle/anim/angel.c create mode 100755 src/battle/anim/angel_kiss.c create mode 100755 src/battle/anim/anger.c create mode 100755 src/battle/anim/blow_kiss.c create mode 100755 src/battle/anim/bottle.c create mode 100755 src/battle/anim/brace.c create mode 100755 src/battle/anim/breath.c create mode 100755 src/battle/anim/bullet.c create mode 100755 src/battle/anim/copy_orb.c create mode 100755 src/battle/anim/cube.c create mode 100755 src/battle/anim/curtain.c create mode 100755 src/battle/anim/cutter.c create mode 100755 src/battle/anim/cyclone.c create mode 100755 src/battle/anim/draw.c create mode 100755 src/battle/anim/drum.c create mode 100755 src/battle/anim/egg.c create mode 100755 src/battle/anim/espeed.c create mode 100755 src/battle/anim/evasion.c create mode 100755 src/battle/anim/fang.c create mode 100755 src/battle/anim/flash.c create mode 100755 src/battle/anim/flying_hearts.c create mode 100755 src/battle/anim/flying_path.c create mode 100755 src/battle/anim/flying_petals.c create mode 100755 src/battle/anim/glitter.c create mode 100755 src/battle/anim/glow.c create mode 100755 src/battle/anim/grip.c create mode 100755 src/battle/anim/grow.c create mode 100755 src/battle/anim/guillotine.c create mode 100755 src/battle/anim/heal.c create mode 100755 src/battle/anim/heart_1.c create mode 100755 src/battle/anim/homing.c create mode 100755 src/battle/anim/hop.c create mode 100755 src/battle/anim/hop_2.c create mode 100755 src/battle/anim/kiss_fountain.c create mode 100755 src/battle/anim/leaf.c create mode 100755 src/battle/anim/love_bg.c create mode 100755 src/battle/anim/lunge_1.c create mode 100755 src/battle/anim/lunge_2.c create mode 100755 src/battle/anim/money.c create mode 100755 src/battle/anim/moon.c create mode 100755 src/battle/anim/note_rain.c create mode 100755 src/battle/anim/note_scatter.c create mode 100755 src/battle/anim/note_scatter_2.c create mode 100755 src/battle/anim/note_wave.c create mode 100755 src/battle/anim/orbit.c create mode 100755 src/battle/anim/orbit_fast.c create mode 100755 src/battle/anim/orbit_scatter.c create mode 100755 src/battle/anim/orbs.c create mode 100755 src/battle/anim/osmose.c create mode 100755 src/battle/anim/perceive.c create mode 100755 src/battle/anim/powder.c create mode 100755 src/battle/anim/ring.c create mode 100755 src/battle/anim/roots.c create mode 100755 src/battle/anim/scan.c create mode 100755 src/battle/anim/scary_face.c create mode 100755 src/battle/anim/seed.c create mode 100755 src/battle/anim/shadow_enlarge.c create mode 100755 src/battle/anim/shadow_minimize.c create mode 100755 src/battle/anim/shield.c create mode 100755 src/battle/anim/shimmer.c create mode 100755 src/battle/anim/silhouette.c create mode 100755 src/battle/anim/slash.c create mode 100755 src/battle/anim/sleep.c create mode 100755 src/battle/anim/slice.c create mode 100755 src/battle/anim/smoke.c create mode 100755 src/battle/anim/sonic.c create mode 100755 src/battle/anim/sonic_task.c create mode 100755 src/battle/anim/spin_finger.c create mode 100755 src/battle/anim/spit.c create mode 100755 src/battle/anim/splash.c create mode 100755 src/battle/anim/startle.c create mode 100755 src/battle/anim/strike.c create mode 100755 src/battle/anim/switch.c create mode 100755 src/battle/anim/sword.c create mode 100755 src/battle/anim/taunt_finger.c create mode 100755 src/battle/anim/tendrils.c create mode 100755 src/battle/anim/thought.c create mode 100755 src/battle/anim/thrashing.c create mode 100755 src/battle/anim/tile_in.c create mode 100755 src/battle/anim/tile_out.c create mode 100755 src/battle/anim/twinkle.c create mode 100755 src/battle/anim/unused_1.c create mode 100755 src/battle/anim/unused_2.c create mode 100755 src/battle/anim/unused_3.c create mode 100755 src/battle/anim/unused_4.c create mode 100755 src/battle/anim/unused_5.c create mode 100755 src/battle/anim/unused_6.c create mode 100755 src/battle/anim/unused_7.c create mode 100755 src/battle/anim/unused_8.c create mode 100755 src/battle/anim/unused_9.c create mode 100755 src/battle/anim/wave_finger.c create mode 100755 src/battle/anim/whip.c create mode 100755 src/battle/anim/withdraw.c (limited to 'src') diff --git a/src/anim/alert.c b/src/anim/alert.c deleted file mode 100755 index 538008be0..000000000 --- a/src/anim/alert.c +++ /dev/null @@ -1,33 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gBattleAnimBankAttacker; -extern u8 gBattleAnimBankTarget; - -// alert (red thunder from the sides of a Pokemon, simulating more alert behavior.) -// Used in Kinesis. - -void sub_80CF610(struct Sprite* sprite) -{ - sub_8078650(sprite); - sub_807867C(sprite, gBattleAnimArgs[0]); - sprite->pos1.y += gBattleAnimArgs[1]; - if (GetBankSide(gBattleAnimBankAttacker) != 0) - { - sprite->hFlip = 1; - if (gBattleAnimArgs[2] != 0) - sprite->vFlip = 1; - } - else - { - if (gBattleAnimArgs[2] != 0) - sprite->vFlip = 1; - } - - sprite->callback = sub_8078600; - StoreSpriteCallbackInData(sprite, move_anim_8072740); -} diff --git a/src/anim/angel.c b/src/anim/angel.c deleted file mode 100755 index 916ebfdfd..000000000 --- a/src/anim/angel.c +++ /dev/null @@ -1,37 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gBattleAnimBankAttacker; -extern u8 gBattleAnimBankTarget; - -// angel (a little angel descends from somewhere towards a position) -// Used in Sweet Kiss. - -void sub_80D2938(struct Sprite* sprite) -{ - s16 r5; - if (sprite->data[0] == 0) - { - sprite->pos1.x += gBattleAnimArgs[0]; - sprite->pos1.y += gBattleAnimArgs[1]; - } - - sprite->data[0]++; - r5 = (sprite->data[0] * 10) & 0xFF; - sprite->pos2.x = Sin(r5, 0x50) >> 8; - if (sprite->data[0] <= 0x4F) - sprite->pos2.y = (sprite->data[0] / 2) + (Cos(r5, 0x50) >> 8); - - if (sprite->data[0] > 0x5A) - { - sprite->data[2]++; - sprite->pos2.x -= sprite->data[2] / 2; - } - - if (sprite->data[0] > 0x64) - move_anim_8072740(sprite); -} diff --git a/src/anim/angel_kiss.c b/src/anim/angel_kiss.c deleted file mode 100755 index 453c4d802..000000000 --- a/src/anim/angel_kiss.c +++ /dev/null @@ -1,87 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" -#include "random.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gBattleAnimBankAttacker; -extern u8 gBattleAnimBankTarget; - -// angel_kiss (a different variation of kiss_fountain.) -// Used in Sweet Kiss. - -void sub_80D29CC(struct Sprite* sprite) -{ - sprite->data[5]++; - sprite->pos2.x = Sin(sprite->data[3], 5); - sprite->pos2.y = sprite->data[5] / 2; - sprite->data[3] = (sprite->data[3] + 3) & 0xFF; - if (sprite->data[5] > 20) - sprite->invisible = sprite->data[5] % 2; - - if (sprite->data[5] > 30) - move_anim_8072740(sprite); -} - -void sub_80D2A38(struct Sprite* sprite) -{ - if (sprite->data[0] == 0) - { - sprite->data[1] = gBattleAnimArgs[0]; - sprite->data[2] = gBattleAnimArgs[1]; - sprite->data[0]++; - } - else - { - sprite->data[4] += sprite->data[1]; - sprite->pos2.x = sprite->data[4] >> 8; - sprite->pos2.y = Sin(sprite->data[3], sprite->data[2]); - sprite->data[3] = (sprite->data[3] + 3) & 0xFF; - if (sprite->data[3] > 0x46) - { - sprite->callback = sub_80D29CC; - sprite->pos1.x += sprite->pos2.x; - sprite->pos1.y += sprite->pos2.y; - sprite->pos2.x = 0; - sprite->pos2.y = 0; - sprite->data[3] = Random() % 0xB4; - } - } -} - -// this is for the next file, but i didnt feel like deleting it from the original 80C file. -/* void sub_80D2ABC(struct Sprite* sprite) -{ - int var; - s16 var2; - int var3; - if (sprite->data[3] == 0) - { - sprite->pos1.x += gBattleAnimArgs[0]; - sprite->pos1.y += gBattleAnimArgs[1]; - StartSpriteAnim(sprite, 0); - sprite->subpriority = sub_8079E90(gBattleAnimBankTarget) - 1; - sprite->data[2] = 1; - } - - sprite->data[0] += sprite->data[2]; - var = sprite->data[0] * 4; - if (var < 0) - var += 0xFF; - - sprite->data[1] = (sprite->data[0] * 4) -(((var) >> 8) << 8); - if (sprite->data[1] < 0) - sprite->data[1] = 0; - - var3 = sprite->data[1]; - var2 = sprite->data[0]; - var2 /= 4; - sprite->pos2.x = Cos(var3, 30 - var2); - var3 = sprite->data[1]; - var2 = sprite->data[0] / 8; - sprite->pos2.x = Sin(var3, 10 - var2); - if (sprite->data[1] > 0x80 && sprite->data[2] > 0) - sprite->data[2] = 0xFFFF; -} */ diff --git a/src/anim/anger.c b/src/anim/anger.c deleted file mode 100755 index 8962e0855..000000000 --- a/src/anim/anger.c +++ /dev/null @@ -1,34 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gBattleAnimBankAttacker; -extern u8 gBattleAnimBankTarget; - -// anger (anger emotes, usually above the Pokemon's head, indicating annoyed emotions.) -// Used in Frustration, Rage, Swagger, Torment, and Taunt. - -void sub_80D09C0(struct Sprite* sprite) -{ - u8 bank; - if (gBattleAnimArgs[0] == 0) - bank = gBattleAnimBankAttacker; - else - bank = gBattleAnimBankTarget; - - if (GetBankSide(bank) == 1) - { - gBattleAnimArgs[1] *= -1; - } - - sprite->pos1.x = sub_8077ABC(bank, 2) + gBattleAnimArgs[1]; - sprite->pos1.y = sub_8077ABC(bank, 3) + gBattleAnimArgs[2]; - if (sprite->pos1.y <= 7) - sprite->pos1.y = 8; - - StoreSpriteCallbackInData(sprite, move_anim_8074EE0); - sprite->callback = sub_80785E4; -} diff --git a/src/anim/blow_kiss.c b/src/anim/blow_kiss.c deleted file mode 100755 index e63f7189d..000000000 --- a/src/anim/blow_kiss.c +++ /dev/null @@ -1,39 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gBattleAnimBankAttacker; -extern u8 gBattleAnimBankTarget; - -static void sub_80D1FA4(struct Sprite* sprite); - -// blow_kiss (a heart floating across the screen.) -// Used in Attract. - -void sub_80D1F58(struct Sprite* sprite) -{ - sub_80787B0(sprite, 1); - sprite->data[0] = 0x5F; - sprite->data[1] = sprite->pos1.x; - sprite->data[2] = sub_8077ABC(gBattleAnimBankTarget, 2); - sprite->data[3] = sprite->pos1.y; - sprite->data[4] = sub_8077ABC(gBattleAnimBankTarget, 3); - obj_translate_based_on_private_1_2_3_4(sprite); - sprite->callback = sub_80D1FA4; -} - -void sub_80D1FA4(struct Sprite* sprite) -{ - if (sub_8078B5C(sprite) == 0) - { - sprite->pos2.y += Sin(sprite->data[5], 14); - sprite->data[5] = (sprite->data[5] + 4) & 0xFF; - } - else - { - move_anim_8072740(sprite); - } -} diff --git a/src/anim/bottle.c b/src/anim/bottle.c deleted file mode 100755 index ac5e51881..000000000 --- a/src/anim/bottle.c +++ /dev/null @@ -1,125 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gBattleAnimBankAttacker; -extern u8 gBattleAnimBankTarget; - -static void sub_80CCF70(struct Sprite* sprite); -static void sub_80CD0CC(struct Sprite* sprite, int unk1, int unk2); - -// bottle (shows a bottle swinging back and forth.) -// Used by Milk Drink. - -void sub_80CCF04(struct Sprite* sprite) -{ - sprite->pos1.x = sub_8077ABC(gBattleAnimBankTarget, 2); - sprite->pos1.y = sub_8077ABC(gBattleAnimBankTarget, 3) + 0xFFE8; - sprite->data[0] = 0; - sprite->data[1] = 0; - sprite->data[2] = 0; - sprite->data[3] = 0; - sprite->data[4] = 0; - sprite->data[6] = 0; - sprite->data[7] = 16; - REG_BLDCNT = 0x3F40; - REG_BLDALPHA = (sprite->data[7] << 8) | sprite->data[6]; - sprite->callback = sub_80CCF70; -} - -void sub_80CCF70(struct Sprite* sprite) -{ - switch (sprite->data[0]) - { - case 0: - if (++sprite->data[2] > 0) - { - sprite->data[2] = 0; - if (((++sprite->data[1]) & 1) != 0) - { - if (sprite->data[6] <= 15) - sprite->data[6]++; - } - else if (sprite->data[7] > 0) - sprite->data[7]--; - - REG_BLDALPHA = (sprite->data[7] << 8) | sprite->data[6]; - if (sprite->data[6] == 16 && sprite->data[7] == 0) - { - sprite->data[1] = 0; - sprite->data[0]++; - } - } - break; - case 1: - if (++sprite->data[1] > 8) - { - sprite->data[1] = 0; - StartSpriteAffineAnim(sprite, 1); - sprite->data[0]++; - } - break; - case 2: - sub_80CD0CC(sprite, 16, 4); - if (++sprite->data[1] > 2) - { - sprite->data[1] = 0; - sprite->pos1.y++; - } - - if (++sprite->data[2] <= 29) - break; - - if (sprite->data[2] & 1) - { - if (sprite->data[6] > 0) - sprite->data[6]--; - } - else if (sprite->data[7] <= 15) - { - sprite->data[7]++; - } - - REG_BLDALPHA = (sprite->data[7] << 8) | sprite->data[6]; - if (sprite->data[6] == 0 && sprite->data[7] == 16) - { - sprite->data[1] = 0; - sprite->data[2] = 0; - sprite->data[0]++; - } - break; - case 3: - sprite->invisible = 1; - sprite->data[0]++; - break; - case 4: - REG_BLDCNT = 0; - REG_BLDALPHA = 0; - move_anim_8072740(sprite); - break; - } -} - -void sub_80CD0CC(struct Sprite* sprite, int unk1, int unk2) -{ - if (sprite->data[3] <= 11) - sprite->data[4] += 2; - - if ((u16)(sprite->data[3] - 0x12) <= 0x17) - sprite->data[4] -= 2; - - if ((sprite->data[3]) > 0x2F) - sprite->data[4] += 2; - - sprite->pos2.x = sprite->data[4] / 9; - sprite->pos2.y = sprite->data[4] / 14; - if (sprite->pos2.y < 0) - sprite->pos2.y *= -1; - - sprite->data[3]++; - if (sprite->data[3] > 0x3B) - sprite->data[3] = 0; -} diff --git a/src/anim/brace.c b/src/anim/brace.c deleted file mode 100755 index 7b084efbb..000000000 --- a/src/anim/brace.c +++ /dev/null @@ -1,45 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gBattleAnimBankAttacker; -extern u8 gBattleAnimBankTarget; - -static void sub_80CDF70(struct Sprite* sprite); - -// brace (the Pokemon prepares to endure a hit) -// Used in Endure. - -void sub_80CDF0C(struct Sprite* sprite) -{ - if (gBattleAnimArgs[0] == 0) - { - sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 0) + gBattleAnimArgs[1]; - sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 1) + gBattleAnimArgs[2]; - } - else - { - sprite->pos1.x = sub_8077ABC(gBattleAnimBankTarget, 0) + gBattleAnimArgs[1]; - sprite->pos1.y = sub_8077ABC(gBattleAnimBankTarget, 1) + gBattleAnimArgs[2]; - } - - sprite->data[0] = 0; - sprite->data[1] = gBattleAnimArgs[3]; - sprite->callback = sub_80CDF70; -} - -void sub_80CDF70(struct Sprite* sprite) -{ - if (++sprite->data[0] > sprite->data[1]) - { - sprite->data[0] = 0; - sprite->pos1.y--; - } - - sprite->pos1.y -= sprite->data[0]; - if (sprite->animEnded) - move_anim_8072740(sprite); -} diff --git a/src/anim/breath.c b/src/anim/breath.c deleted file mode 100755 index 0fcc7fa08..000000000 --- a/src/anim/breath.c +++ /dev/null @@ -1,36 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gBattleAnimBankAttacker; -extern u8 gBattleAnimBankTarget; - -// breath (a puff of smoke, usually from the mouth or nose of the Pokemon.) -// Used in Swagger and Bulk Up. - -void sub_80D0930(struct Sprite* sprite) -{ - if (GetBankSide(gBattleAnimBankAttacker) == 0) - { - StartSpriteAnim(sprite, 0); - sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 2) + 32; - sprite->data[1] = 0x40; - } - else - { - StartSpriteAnim(sprite, 1); - sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 2) - 32; - sprite->data[1] = -0x40; - } - - sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 3); - sprite->data[0] = 0x34; - sprite->data[2] = 0; - sprite->data[3] = 0; - sprite->data[4] = 0; - StoreSpriteCallbackInData(sprite, move_anim_8072740); - sprite->callback = sub_8078394; -} diff --git a/src/anim/bullet.c b/src/anim/bullet.c deleted file mode 100755 index 11306873a..000000000 --- a/src/anim/bullet.c +++ /dev/null @@ -1,69 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" -#include "random.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gBattleAnimBankAttacker; -extern u8 gBattleAnimBankTarget; - -static void sub_80D0030(struct Sprite* sprite); -static void sub_80D00B4(struct Sprite* sprite); - -// bullet (shoot seeds as ammunition.) -// Used by Bullet Seed. - -void sub_80CFFD8(struct Sprite* sprite) -{ - sub_80787B0(sprite, 1); - sprite->data[0] = 20; - sprite->data[2] = sub_8077ABC(gBattleAnimBankTarget, 2); - sprite->data[4] = sub_8077ABC(gBattleAnimBankTarget, 3); - sprite->callback = sub_8078B34; - sprite->affineAnimPaused = 1; - StoreSpriteCallbackInData(sprite, sub_80D0030); -} - -void sub_80D0030(struct Sprite* sprite) -{ - int i; - u16 rand; - s16* ptr; - PlaySE12WithPanning(0xA6, sub_8076F98(0x3F)); - sprite->pos1.x += sprite->pos2.x; - sprite->pos1.y += sprite->pos2.y; - sprite->pos2.y = 0; - sprite->pos2.x = 0; - ptr = &sprite->data[7]; - for (i = 0; i < 8; i++) - { - ptr[i - 7] = 0; - } - - rand = Random(); - sprite->data[6] = 0xFFF4 - (rand & 7); - rand = Random(); - sprite->data[7] = (rand % 0xA0) + 0xA0; - sprite->callback = sub_80D00B4; - sprite->affineAnimPaused = 0; -} - -void sub_80D00B4(struct Sprite* sprite) -{ - sprite->data[0] += sprite->data[7]; - sprite->pos2.x = sprite->data[0] >> 8; - if (sprite->data[7] & 1) - sprite->pos2.x = -sprite->pos2.x; - - sprite->pos2.y = Sin(sprite->data[1], sprite->data[6]); - sprite->data[1] += 8; - if (sprite->data[1] > 0x7E) - { - sprite->data[1] = 0; - sprite->data[2] /= 2; - if (++sprite->data[3] == 1) - move_anim_8072740(sprite); - } -} diff --git a/src/anim/copy_orb.c b/src/anim/copy_orb.c deleted file mode 100755 index 96d2910f0..000000000 --- a/src/anim/copy_orb.c +++ /dev/null @@ -1,46 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gBattleAnimBankAttacker; -extern u8 gBattleAnimBankTarget; - -// copy_orb -// Used in Mimic. - -void sub_80CB4CC(struct Sprite* sprite) -{ - switch (sprite->data[0]) - { - case 0: - { - if (GetBankSide(gBattleAnimBankTarget) == 0) - { - s16 a = gBattleAnimArgs[0]; - gBattleAnimArgs[0] = -a; - } - - sprite->pos1.x = sub_8077ABC(gBattleAnimBankTarget, 0) + gBattleAnimArgs[0]; - sprite->pos1.y = sub_8077ABC(gBattleAnimBankTarget, 1) + gBattleAnimArgs[1]; - sprite->invisible = 1; - sprite->data[0]++; - break; - } - case 1: - { - sprite->invisible = 0; - if (sprite->affineAnimEnded) - { - ChangeSpriteAffineAnim(sprite, 1); - sprite->data[0] = 25; - sprite->data[2] = sub_8077ABC(gBattleAnimBankAttacker, 2); - sprite->data[4] = sub_8077ABC(gBattleAnimBankAttacker, 3); - sprite->callback = sub_8078CC0; - StoreSpriteCallbackInData(sprite, move_anim_8072740); - break; - } - } - } -} diff --git a/src/anim/cube.c b/src/anim/cube.c deleted file mode 100755 index 250e3f2d1..000000000 --- a/src/anim/cube.c +++ /dev/null @@ -1,52 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" -#include "songs.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gBattleAnimBankAttacker; -extern u8 gBattleAnimBankTarget; - -static void sub_80CE000(struct Sprite* sprite); - -// cube (shows a sphere sharpening into a cube.) -// Used in Sharpen. - -void sub_80CDFB0(struct Sprite* sprite) -{ - sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 2); - sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 3) - 12; - sprite->data[0] = 0; - sprite->data[1] = 2; - sprite->data[2] = 0; - sprite->data[3] = 0; - sprite->data[4] = 0; - sprite->data[5] = sub_8076F98(-0x40); - sprite->callback = sub_80CE000; -} - -void sub_80CE000(struct Sprite* sprite) -{ - if (++sprite->data[0] >= sprite->data[1]) - { - sprite->invisible = !sprite->invisible; - if (!sprite->invisible) - { - sprite->data[4]++; - if (!(sprite->data[4] & 1)) - PlaySE12WithPanning(SE_W207B, sprite->data[5]); - } - - sprite->data[0] = 0; - if (++sprite->data[2] > 1) - { - sprite->data[2] = 0; - sprite->data[1]++; - } - } - - if (sprite->animEnded && sprite->data[1] > 16 && sprite->invisible) - move_anim_8072740(sprite); -} diff --git a/src/anim/curtain.c b/src/anim/curtain.c deleted file mode 100755 index 1f34cb173..000000000 --- a/src/anim/curtain.c +++ /dev/null @@ -1,82 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" -#include "palette.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gBattleAnimBankAttacker; -extern u8 gBattleAnimBankTarget; - -extern u16 gUnknown_03004240; -extern u16 gUnknown_030042C4; - -static void sub_80D1D48(u8 taskId); -static void sub_80D1D9C(u8 taskId); - -// curtain (a sweeping blackening curtain in the BG) -// Used in Fake Out. - -void sub_80D1CD0(u8 taskId) -{ - int zero; - bool8 result = NotInBattle(); - u16 var = 0xF0; - if (result) - { - var = 0x98; - zero = 0; - } - else - { - zero = 0; - } - - gUnknown_030042C4 = var; - gUnknown_03004240 = 0xA0; - REG_WIN0H = var; - REG_WIN0V = 0xA0; - REG_WININ = 0x3F1F; - REG_WINOUT = 0x3F3F; - REG_BLDCNT = 0xC8; - REG_BLDY = 0x10; - gTasks[taskId].data[0] = zero; - gTasks[taskId].data[1] = var; - gTasks[taskId].func = sub_80D1D48; -} - -void sub_80D1D48(u8 taskId) -{ - gTasks[taskId].data[0] += 13; - gTasks[taskId].data[1] -= 13; - if (gTasks[taskId].data[0] >= gTasks[taskId].data[1]) - { - gUnknown_030042C4 = 0; - gTasks[taskId].func = sub_80D1D9C; - } - else - { - gUnknown_030042C4 = gTasks[taskId].data[1] | (gTasks[taskId].data[0] << 8); - } -} - -void sub_80D1D9C(u8 taskId) -{ - if (++gTasks[taskId].data[10] == 5) - { - gTasks[taskId].data[11] = 0x88; - RequestSpriteCopy((u8 *)(&gTasks[taskId].data[11]), (u8 *)(®_BLDCNT), 2); - BlendPalettes(sub_80791A8(1, 0, 0, 0, 0, 0, 0), 16, RGB(31, 31, 31)); - } - else if (gTasks[taskId].data[10] > 4) - { - gUnknown_030042C4 = 0; - gUnknown_03004240 = 0; - REG_WININ = 0x3F3F; - REG_WINOUT = 0x3F3F; - REG_BLDCNT = 0; - REG_BLDY = 0; - DestroyAnimVisualTask(taskId); - } -} diff --git a/src/anim/cutter.c b/src/anim/cutter.c deleted file mode 100755 index 9859497e5..000000000 --- a/src/anim/cutter.c +++ /dev/null @@ -1,130 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gBattleAnimBankAttacker; -extern u8 gBattleAnimBankTarget; - -static void sub_80CB09C(struct Sprite* sprite); -static void sub_80CB1A4(struct Sprite* sprite); - -// cutter (the cresent shaped leaf used in throwing projectiles for the listed moves.) -// Used by Razor Leaf and Magical Leaf. - -void sub_80CAFD0(struct Sprite* sprite) -{ - sub_80787B0(sprite, 1); - if (GetBankSide(gBattleAnimBankAttacker)) - { - gBattleAnimArgs[2] = -gBattleAnimArgs[2]; - } - - sprite->data[0] = gBattleAnimArgs[4]; - if (!(gBattleAnimArgs[6])) - { - sprite->data[2] = sub_8077ABC(gBattleAnimBankTarget, 2) + gBattleAnimArgs[2]; - sprite->data[4] = sub_8077ABC(gBattleAnimBankTarget, 3) + gBattleAnimArgs[3]; - } - else - { - sub_807A3FC(gBattleAnimBankTarget, 1, &sprite->data[2], &sprite->data[4]); - sprite->data[2] += gBattleAnimArgs[2]; - sprite->data[4] += gBattleAnimArgs[3]; - } - - sprite->data[5] = gBattleAnimArgs[5]; - sub_80786EC(sprite); - if (GetBankSide(gBattleAnimBankAttacker) == GetBankSide(gBattleAnimBankTarget)) - { - sprite->data[0] = 1; - } - else - { - sprite->data[0] = 0; - } - - sprite->callback = sub_80CB09C; -} - -void sub_80CB09C(struct Sprite* sprite) -{ - bool8 c = FALSE; - s16 a = sprite->data[0]; - s16 b = sprite->data[7]; - s16 r0; - - sprite->data[0] = 1; - sub_8078718(sprite); - r0 = sprite->data[7]; - sprite->data[0] = a; - if (b > 0xC8 && r0 <= 0x37 && sprite->oam.affineParam == 0) - sprite->oam.affineParam++; - - if (sprite->oam.affineParam != 0 && sprite->data[0] != 0) - { - sprite->invisible ^= 1; - sprite->oam.affineParam++; - if (sprite->oam.affineParam == 0x1E) - c = TRUE; - } - - if (sprite->pos1.x + sprite->pos2.x > 0x100 - || sprite->pos1.x + sprite->pos2.x < -16 - || sprite->pos1.y + sprite->pos2.y > 0xA0 - || sprite->pos1.y + sprite->pos2.y < -16) - c = TRUE; - - if (c) - move_anim_8072740(sprite); -} - -void sub_80CB144(struct Sprite* sprite) -{ - if (!NotInBattle() && IsDoubleBattle() == TRUE) - { - sub_807A3FC(gBattleAnimBankTarget, 1, &sprite->pos1.x, &sprite->pos1.y); - } - - sprite->pos1.y += 32; - sprite->data[0] = gBattleAnimArgs[0]; - sprite->data[1] = gBattleAnimArgs[1]; - sprite->data[2] = gBattleAnimArgs[2]; - sprite->data[3] = gBattleAnimArgs[3]; - sprite->data[4] = gBattleAnimArgs[4]; - sprite->callback = sub_80CB1A4; -} - -void sub_80CB1A4(struct Sprite* sprite) -{ - if (sprite->data[1] == 0xFF) - { - sprite->pos1.y -= 2; - } - else if (sprite->data[1] > 0) - { - sprite->pos1.y -= 2; - sprite->data[1] -= 2; - } - - sprite->data[5] += sprite->data[2]; - if (sprite->data[0] < sprite->data[4]) - sprite->data[5] += sprite->data[2]; - - sprite->data[5] &= 0xFF; - sprite->pos2.x = Cos(sprite->data[5], sprite->data[3]); - sprite->pos2.y = Sin(sprite->data[5], 5); - if (sprite->data[5] <= 0x7F) - { - sprite->oam.priority = sub_8079ED4(gBattleAnimBankTarget) - 1; - } - else - { - sprite->oam.priority = sub_8079ED4(gBattleAnimBankTarget) + 1; - } - - sprite->data[0]--; - if (!sprite->data[0]) - move_anim_8072740(sprite); -} diff --git a/src/anim/cyclone.c b/src/anim/cyclone.c deleted file mode 100755 index b19304f17..000000000 --- a/src/anim/cyclone.c +++ /dev/null @@ -1,28 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gBattleAnimBankAttacker; -extern u8 gBattleAnimBankTarget; - -// cyclone (creates a circling motion like a cyclone, usually a wind sprite.) -// Used in Razor Wind. - -void sub_80D0118(struct Sprite* sprite) -{ - sub_80787B0(sprite, 0); - if (GetBankSide(gBattleAnimBankAttacker) == 0) - sprite->pos1.y += 16; - - sprite->data[0] = gBattleAnimArgs[4]; - sprite->data[1] = gBattleAnimArgs[2]; - sprite->data[2] = gBattleAnimArgs[5]; - sprite->data[3] = gBattleAnimArgs[6]; - sprite->data[4] = gBattleAnimArgs[3]; - sprite->callback = sub_8078114; - StoreSpriteCallbackInData(sprite, move_anim_8072740); - sprite->callback(sprite); -} diff --git a/src/anim/draw.c b/src/anim/draw.c deleted file mode 100755 index c075af097..000000000 --- a/src/anim/draw.c +++ /dev/null @@ -1,292 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" -#include "unknown_task.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gBattleAnimBankAttacker; -extern u8 gBattleAnimBankTarget; - -extern u16 gUnknown_03004288; -extern u16 gUnknown_030042C0; - -static void sub_80D0D68(u8 taskId); -static void sub_80D0E8C(struct Sprite* sprite); - -// draw (draws the Pokemon into the world using a pencil.) -// Used in Sketch. - -void sub_80D0C88(u8 taskId) -{ - struct Task* task = &gTasks[taskId]; - struct UnknownTaskStruct sp; - s16 i; - task->data[0] = sub_8077FC0(gBattleAnimBankTarget) + 32; - task->data[1] = 4; - task->data[2] = 0; - task->data[3] = 0; - task->data[4] = 0; - task->data[5] = 0; - task->data[15] = sub_807A100(gBattleAnimBankTarget, 0); - if (GetBankIdentity_permutated(gBattleAnimBankTarget) == 1) - { - task->data[6] = gUnknown_030042C0; - sp.dest = (u16 *)REG_ADDR_BG1HOFS; - } - else - { - task->data[6] = gUnknown_03004288; - sp.dest = (u16 *)REG_ADDR_BG2HOFS; - } - - for (i = task->data[0] - 0x40; i <= task->data[0];i++) - { - if (i >= 0) - { - gUnknown_03004DE0[0][i] = task->data[6] + 0xF0; - gUnknown_03004DE0[1][i] = task->data[6] + 0xF0; - } - } - - sp.control = 0xa2600001; - sp.unk8 = 1; - sp.unk9 = 0; - sub_80895F8(sp); - task->func = sub_80D0D68; -} - -#ifdef NONMATCHING -void sub_80D0D68(u8 taskId) -{ - struct Task* task = &gTasks[taskId]; - - switch (task->data[4]) - { - case 0: - if (++task->data[5] > 20) - task->data[4]++; - break; - case 1: - if (++task->data[1] > 3) - { - task->data[1] = 0; - task->data[2] = task->data[3] & 3; - task->data[5] = task->data[0] - task->data[3]; - switch (task->data[2]) - { - case 0: - break; - case 1: - task->data[5] -= 2; - break; - case 2: - task->data[5] += 1; - break; - case 3: - task->data[5] += 1; - break; - } - - if (task->data[5] >= 0) - { - gUnknown_03004DE0[0][task->data[5]] = task->data[6]; - gUnknown_03004DE0[1][task->data[5]] = task->data[6]; - } - - if (++task->data[3] >= task->data[15]) - { - gUnknown_03004DC0.unk15 = 3; - DestroyAnimVisualTask(taskId); - } - } - break; - } -} -#else -__attribute__((naked)) -void sub_80D0D68(u8 taskId) -{ - asm(".syntax unified\n\ - push {r4,lr}\n\ - lsls r0, 24\n\ - lsrs r4, r0, 24\n\ - lsls r0, r4, 2\n\ - adds r0, r4\n\ - lsls r0, 3\n\ - ldr r1, _080D0D88 @ =gTasks\n\ - adds r3, r0, r1\n\ - movs r1, 0x10\n\ - ldrsh r0, [r3, r1]\n\ - cmp r0, 0\n\ - beq _080D0D8C\n\ - cmp r0, 0x1\n\ - beq _080D0DA2\n\ - b _080D0E22\n\ - .align 2, 0\n\ -_080D0D88: .4byte gTasks\n\ -_080D0D8C:\n\ - ldrh r0, [r3, 0x12]\n\ - adds r0, 0x1\n\ - strh r0, [r3, 0x12]\n\ - lsls r0, 16\n\ - asrs r0, 16\n\ - cmp r0, 0x14\n\ - ble _080D0E22\n\ - ldrh r0, [r3, 0x10]\n\ - adds r0, 0x1\n\ - strh r0, [r3, 0x10]\n\ - b _080D0E22\n\ -_080D0DA2:\n\ - ldrh r0, [r3, 0xA]\n\ - adds r0, 0x1\n\ - strh r0, [r3, 0xA]\n\ - lsls r0, 16\n\ - asrs r0, 16\n\ - cmp r0, 0x3\n\ - ble _080D0E22\n\ - movs r0, 0\n\ - strh r0, [r3, 0xA]\n\ - ldrh r1, [r3, 0xE]\n\ - movs r0, 0x3\n\ - ands r0, r1\n\ - strh r0, [r3, 0xC]\n\ - ldrh r0, [r3, 0x8]\n\ - subs r0, r1\n\ - strh r0, [r3, 0x12]\n\ - movs r2, 0xC\n\ - ldrsh r1, [r3, r2]\n\ - cmp r1, 0x1\n\ - beq _080D0DD8\n\ - cmp r1, 0x1\n\ - ble _080D0DE0\n\ - cmp r1, 0x2\n\ - beq _080D0DDC\n\ - cmp r1, 0x3\n\ - beq _080D0DDC\n\ - b _080D0DE0\n\ -_080D0DD8:\n\ - subs r0, 0x2\n\ - b _080D0DDE\n\ -_080D0DDC:\n\ - adds r0, 0x1\n\ -_080D0DDE:\n\ - strh r0, [r3, 0x12]\n\ -_080D0DE0:\n\ - movs r1, 0x12\n\ - ldrsh r0, [r3, r1]\n\ - cmp r0, 0\n\ - blt _080D0E04\n\ - ldr r2, _080D0E28 @ =gUnknown_03004DE0\n\ - lsls r0, 1\n\ - adds r0, r2\n\ - ldrh r1, [r3, 0x14]\n\ - strh r1, [r0]\n\ - movs r1, 0x12\n\ - ldrsh r0, [r3, r1]\n\ - lsls r0, 1\n\ - movs r1, 0xF0\n\ - lsls r1, 3\n\ - adds r2, r1\n\ - adds r0, r2\n\ - ldrh r1, [r3, 0x14]\n\ - strh r1, [r0]\n\ -_080D0E04:\n\ - ldrh r0, [r3, 0xE]\n\ - adds r0, 0x1\n\ - strh r0, [r3, 0xE]\n\ - lsls r0, 16\n\ - asrs r0, 16\n\ - movs r2, 0x26\n\ - ldrsh r1, [r3, r2]\n\ - cmp r0, r1\n\ - blt _080D0E22\n\ - ldr r1, _080D0E2C @ =gUnknown_03004DC0\n\ - movs r0, 0x3\n\ - strb r0, [r1, 0x15]\n\ - adds r0, r4, 0\n\ - bl DestroyAnimVisualTask\n\ -_080D0E22:\n\ - pop {r4}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_080D0E28: .4byte gUnknown_03004DE0\n\ -_080D0E2C: .4byte gUnknown_03004DC0\n\ -.syntax divided\n"); -} -#endif - -void sub_80D0E30(struct Sprite* sprite) -{ - sprite->pos1.x = sub_8077ABC(gBattleAnimBankTarget, 0) - 16; - sprite->pos1.y = sub_8077FC0(gBattleAnimBankTarget) + 16; - sprite->data[0] = 0; - sprite->data[1] = 0; - sprite->data[2] = 0; - sprite->data[3] = 16; - sprite->data[4] = 0; - sprite->data[5] = sub_807A100(gBattleAnimBankTarget, 0) + 2; - sprite->data[6] = sub_8076F98(0x3F); - sprite->callback = sub_80D0E8C; -} - -void sub_80D0E8C(struct Sprite* sprite) -{ - switch (sprite->data[0]) - { - case 0: - if (++sprite->data[2] > 1) - { - sprite->data[2] = 0; - sprite->invisible = !sprite->invisible; - } - if (++sprite->data[1] > 16) - { - sprite->invisible = 0; - sprite->data[0]++; - } - break; - case 1: - if (++sprite->data[1] > 3 && sprite->data[2] < sprite->data[5]) - { - sprite->data[1] = 0; - sprite->pos1.y -= 1; - sprite->data[2]++; - if (sprite->data[2] % 10 == 0) - PlaySE12WithPanning(0xCD, sprite->data[6]); - } - sprite->data[4] += sprite->data[3]; - if (sprite->data[4] > 31) - { - sprite->data[4] = 0x40 - sprite->data[4]; - sprite->data[3] *= -1; - } - else if (sprite->data[4] <= -32) - { - sprite->data[4] = -0x40 - sprite->data[4]; - sprite->data[3] *= -1; - } - sprite->pos2.x = sprite->data[4]; - if (sprite->data[5] == sprite->data[2]) - { - sprite->data[1] = 0; - sprite->data[2] = 0; - sprite->data[0]++; - } - break; - case 2: - if (++sprite->data[2] > 1) - { - sprite->data[2] = 0; - sprite->invisible = !sprite->invisible; - } - if (++sprite->data[1] > 16) - { - sprite->invisible = 0; - move_anim_8072740(sprite); - } - break; - } -} diff --git a/src/anim/drum.c b/src/anim/drum.c deleted file mode 100755 index 60cb2acc1..000000000 --- a/src/anim/drum.c +++ /dev/null @@ -1,32 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gBattleAnimBankAttacker; -extern u8 gBattleAnimBankTarget; - -// drum (using hands to slap the Pokemon's belly in a rhythm.) -// Used in Belly Drum. - -void sub_80CEDF0(struct Sprite* sprite) -{ - s16 a; - if (gBattleAnimArgs[0] == 1) - { - sprite->oam.matrixNum = 8; - a = 16; - } - else - { - a = -16; - } - - sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 2) + a; - sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 3) + 8; - sprite->data[0] = 8; - sprite->callback = sub_80782D8; - StoreSpriteCallbackInData(sprite, move_anim_8072740); -} diff --git a/src/anim/egg.c b/src/anim/egg.c deleted file mode 100755 index a5bcffa6d..000000000 --- a/src/anim/egg.c +++ /dev/null @@ -1,122 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gBattleAnimBankAttacker; -extern u8 gBattleAnimBankTarget; - -static void sub_80D13AC(struct Sprite* sprite); -static void sub_80D1424(struct Sprite* sprite); -static void sub_80D144C(struct Sprite* sprite); -static void sub_80D14C4(struct Sprite* sprite); -static void sub_80D1504(struct Sprite* sprite); -static void sub_80D154C(struct Sprite* sprite); -static void sub_80D158C(struct Sprite* sprite); - -// egg (a hatching egg) -// Used in Softboiled. - -void sub_80D1368(struct Sprite* sprite) -{ - s16 r1; - sub_80787B0(sprite, 0); - r1 = (GetBankSide(gBattleAnimBankAttacker)) ? -0xA0 : 0xA0; - sprite->data[0] = 0x380; - sprite->data[1] = r1; - sprite->data[7] = gBattleAnimArgs[2]; - sprite->callback = sub_80D13AC; -} - -void sub_80D13AC(struct Sprite* sprite) -{ - s16 add; - sprite->pos2.y -= (sprite->data[0] >> 8); - sprite->pos2.x = sprite->data[1] >> 8; - sprite->data[0] -= 32; - add = (GetBankSide(gBattleAnimBankAttacker)) ? -0xA0 : 0xA0; - sprite->data[1] += add; - if (sprite->pos2.y > 0) - { - sprite->pos1.y += sprite->pos2.y; - sprite->pos1.x += sprite->pos2.x; - sprite->pos2.y = 0; - sprite->pos2.x = 0; - sprite->data[0] = 0; - StartSpriteAffineAnim(sprite, 1); - sprite->callback = sub_80D1424; - } -} - -void sub_80D1424(struct Sprite* sprite) -{ - if (sprite->data[0]++ > 19) - { - StartSpriteAffineAnim(sprite, 2); - sprite->callback = sub_80D144C; - } -} - -void sub_80D144C(struct Sprite* sprite) -{ - if (sprite->affineAnimEnded) - { - StartSpriteAffineAnim(sprite, 1); - sprite->data[0] = 0; - if (sprite->data[7] == 0) - { - sprite->oam.tileNum += 16; - sprite->callback = sub_80D14C4; - } - else - { - sprite->oam.tileNum += 32; - sprite->callback = sub_80D154C; - } - } -} - -void sub_80D14C4(struct Sprite* sprite) -{ - sprite->pos2.y -= 2; - if (++sprite->data[0] == 9) - { - sprite->data[0] = 16; - sprite->data[1] = 0; - REG_BLDCNT = 0x3F40; - REG_BLDALPHA = sprite->data[0]; - sprite->callback = sub_80D1504; - } -} - -void sub_80D1504(struct Sprite* sprite) -{ - if (sprite->data[1]++ % 3 == 0) - { - sprite->data[0]--; - REG_BLDALPHA = sprite->data[0] | ((16 - sprite->data[0]) << 8); - if (sprite->data[0] == 0) - sprite->callback = sub_80D154C; - } -} - -void sub_80D154C(struct Sprite* sprite) -{ - if ((u16)gBattleAnimArgs[7] == 0xFFFF) - { - sprite->invisible = 1; - if (sprite->data[7] == 0) - sprite->callback = sub_80D158C; - else - sprite->callback = move_anim_8072740; - } -} - -void sub_80D158C(struct Sprite* sprite) -{ - REG_BLDCNT = 0; - REG_BLDALPHA = 0; - move_anim_8072740(sprite); -} diff --git a/src/anim/espeed.c b/src/anim/espeed.c deleted file mode 100755 index 621d386e1..000000000 --- a/src/anim/espeed.c +++ /dev/null @@ -1,241 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gBattleAnimBankAttacker; -extern u8 gBattleAnimBankTarget; - -extern s8 gUnknown_083D7A00[4][2]; - -extern struct AffineAnimFrameCmd gUnknown_083D79BC; -extern struct SpriteTemplate gSpriteTemplate_83D79E8; - -static void sub_80D15E0(u8 taskId); -static void sub_80D16A0(u8 taskId); -static void sub_80D1808(u8 taskId); -static void sub_80D1930(u8 taskId); - -// espeed (the Pokemon's width decreases as the sprite becomes vertically compressed) -// Used in Extremespeed. - -// apply espeed -void sub_80D15A4(u8 taskId) -{ - struct Task* task = &gTasks[taskId]; - u8 spriteId = GetAnimBankSpriteId(0); - task->data[0] = spriteId; - sub_80798F4(task, spriteId, &gUnknown_083D79BC); - task->func = sub_80D15E0; -} - -void sub_80D15E0(u8 taskId) -{ - struct Task* task = &gTasks[taskId]; - if (sub_807992C(task) == 0) - { - gSprites[task->data[0]].pos2.y = 0; - gSprites[task->data[0]].invisible = 1; - DestroyAnimVisualTask(taskId); - } -} - -// espeed hit effect -void sub_80D1638(u8 taskId) -{ - struct Task* task = &gTasks[taskId]; - task->data[0] = 0; - task->data[1] = 0; - task->data[2] = 0; - task->data[3] = 0; - task->data[12] = 3; - if (GetBankSide(gBattleAnimBankTarget) == 0) - { - task->data[13] = 0xFFFF; - task->data[14] = 8; - } - else - { - task->data[13] = 1; - task->data[14] = -8; - } - - task->data[15] = GetAnimBankSpriteId(1); - task->func = sub_80D16A0; -} - -void sub_80D16A0(u8 taskId) -{ - struct Task* task = &gTasks[taskId]; - - switch (task->data[0]) - { - case 0: - gSprites[task->data[15]].pos2.x += task->data[14]; - task->data[1] = 0; - task->data[2] = 0; - task->data[3] = 0; - task->data[0]++; - break; - case 1: - if (++task->data[1] > 1) - { - task->data[1] = 0; - task->data[2]++; - if (task->data[2] & 1) - gSprites[task->data[15]].pos2.x += 6; - else - gSprites[task->data[15]].pos2.x -= 6; - - if (++task->data[3] > 4) - { - if (task->data[2] & 1) - gSprites[task->data[15]].pos2.x -= 6; - - task->data[0]++; - } - } - break; - case 2: - if (--task->data[12] != 0) - task->data[0] = 0; - else - task->data[0]++; - break; - case 3: - gSprites[task->data[15]].pos2.x += task->data[13]; - if (gSprites[task->data[15]].pos2.x == 0) - DestroyAnimVisualTask(taskId); - break; - } -} - -// espeed poke flicker in -void sub_80D17C4(u8 taskId) -{ - struct Task* task = &gTasks[taskId]; - task->data[0] = 0; - task->data[1] = 0; - task->data[2] = 0; - task->data[3] = 0; - task->data[4] = 1; - task->data[13] = 14; - task->data[14] = 2; - task->data[15] = GetAnimBankSpriteId(0); - task->func = sub_80D1808; -} - -void sub_80D1808(u8 taskId) -{ - struct Task* task = &gTasks[taskId]; - if (task->data[0] == 0 && ++task->data[1] > task->data[4]) - { - task->data[1] = 0; - if (++task->data[2] & 1) - gSprites[task->data[15]].invisible = 0; - else - gSprites[task->data[15]].invisible = 1; - - if (++task->data[3] >= task->data[13]) - { - if (++task->data[4] < task->data[14]) - { - task->data[1] = 0; - task->data[2] = 0; - task->data[3] = 0; - } - else - { - gSprites[task->data[15]].invisible = 0; - DestroyAnimVisualTask(taskId); - } - } - } -} - -// espeed smoke flicker -void sub_80D18D4(u8 taskId) -{ - struct Task* task = &gTasks[taskId]; - task->data[0] = 0; - task->data[1] = 4; - task->data[2] = 0; - task->data[3] = 0; - task->data[4] = 0; - task->data[5] = 0; - task->data[6] = 0; - task->data[7] = 0; - task->data[8] = 0; - task->data[13] = 0; - task->data[14] = sub_8077ABC(gBattleAnimBankAttacker, 0); - task->data[15] = sub_8077ABC(gBattleAnimBankAttacker, 1); - task->func = sub_80D1930; -} - -void sub_80D1930(u8 taskId) -{ - struct Task* task = &gTasks[taskId]; - switch (task->data[8]) - { - case 0: - if (++task->data[4] > 1) - { - task->data[4] = 0; - task->data[5] = (task->data[5] + 1) & 1; - if (++task->data[6] > 20) - { - if (task->data[7] == 0) - { - task->data[6] = 0; - task->data[8] = 1; - } - else - task->data[8] = 2; - } - } - break; - case 1: - task->data[5] = 0; - if (++task->data[4] > 20) - { - task->data[7] = 1; - task->data[8] = 0; - } - break; - case 2: - task->data[5] = 1; - break; - } - - switch (task->data[0]) - { - case 0: - if (++task->data[1] > 4) - { - u8 spriteId; - task->data[1] = 0; - spriteId = CreateSprite(&gSpriteTemplate_83D79E8, task->data[14], task->data[15], 0); - if (spriteId != MAX_SPRITES) - { - gSprites[spriteId].data[0] = taskId; - gSprites[spriteId].data[1] = 13; - gSprites[spriteId].pos2.x = gUnknown_083D7A00[task->data[2]][0]; - gSprites[spriteId].pos2.y = gUnknown_083D7A00[task->data[2]][1]; - task->data[13]++; - if (++task->data[2] > 3) - { - task->data[2] = 0; - if (++task->data[3] > 5) - task->data[0]++; - } - } - } - break; - case 1: - if (task->data[13] == 0) - DestroyAnimVisualTask(taskId); - break; - } -} diff --git a/src/anim/evasion.c b/src/anim/evasion.c deleted file mode 100755 index b4e81009b..000000000 --- a/src/anim/evasion.c +++ /dev/null @@ -1,95 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" -#include "palette.h" -#include "blend_palette.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gBattleAnimBankAttacker; -extern u8 gBattleAnimBankTarget; - -static void sub_80CE910(u8 taskId); -static void sub_80CE974(struct Sprite* sprite); - -// evasion (the shadow seen during evasion increases, mainly Double Team.) -// Used by Double Team. - -void sub_80CE7E0(u8 taskId) -{ - u16 i; - int obj; - u16 r3; - u16 r4; - struct Task* task = &gTasks[taskId]; - task->data[0] = GetAnimBankSpriteId(0); - task->data[1] = AllocSpritePalette(0x2771); - r3 = (task->data[1] * 16) + 0x100; - r4 = (gSprites[task->data[0]].oam.paletteNum + 16) << 4; - for (i = 1; i < 16; i++) - { - gPlttBufferUnfaded[r3 + i] = gPlttBufferUnfaded[r4 + i]; - } - - BlendPalette(r3, 16, 11, 0); - task->data[3] = 0; - i = 0; - while (i <= 1 && (obj = duplicate_obj_of_side_rel2move_in_transparent_mode(0)) >= 0) - { - gSprites[obj].oam.paletteNum = task->data[1]; - gSprites[obj].data[0] = 0; - gSprites[obj].data[1] = i << 7; - gSprites[obj].data[2] = taskId; - gSprites[obj].callback = sub_80CE974; - task->data[3]++; - i++; - } - - task->func = sub_80CE910; - if (GetBankIdentity_permutated(gBattleAnimBankAttacker) == 1) - { - REG_DISPCNT &= 0xFDFF; - } - else - { - REG_DISPCNT &= 0xFBFF; - } -} - -void sub_80CE910(u8 taskId) -{ - struct Task* task = &gTasks[taskId]; - if (!task->data[3]) - { - if (GetBankIdentity_permutated(gBattleAnimBankAttacker) == 1) - REG_DISPCNT |= 0x200; - else - REG_DISPCNT |= 0x400; - - FreeSpritePaletteByTag(0x2771); - DestroyAnimVisualTask(taskId); - } -} - -void sub_80CE974(struct Sprite* sprite) -{ - if (++sprite->data[3] > 1) - { - sprite->data[3] = 0; - sprite->data[0]++; - } - - if (sprite->data[0] > 0x40) - { - gTasks[sprite->data[2]].data[3]--; - obj_delete_but_dont_free_vram(sprite); - } - else - { - sprite->data[4] = gSineTable[sprite->data[0]] / 6; - sprite->data[5] = gSineTable[sprite->data[0]] / 13; - sprite->data[1] = (sprite->data[1] + sprite->data[5]) & 0xFF; - sprite->pos2.x = Sin(sprite->data[1], sprite->data[4]); - } -} diff --git a/src/anim/fang.c b/src/anim/fang.c deleted file mode 100755 index 4df450691..000000000 --- a/src/anim/fang.c +++ /dev/null @@ -1,19 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gBattleAnimBankAttacker; -extern u8 gBattleAnimBankTarget; - -// fang -// Used by Super Fang (and probably Hyper Fang, but the actual callbacks are not in this file.) -// (Look into this one later.) - -void sub_80CEA04(struct Sprite* sprite) -{ - StoreSpriteCallbackInData(sprite, move_anim_8072740); - sprite->callback = sub_8078600; -} diff --git a/src/anim/flash.c b/src/anim/flash.c deleted file mode 100755 index 0e087ec2d..000000000 --- a/src/anim/flash.c +++ /dev/null @@ -1,123 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" -#include "palette.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gBattleAnimBankAttacker; -extern u8 gBattleAnimBankTarget; - -extern struct SpriteTemplate gBattleAnimSpriteTemplate_83D6FC8; -extern struct SpriteTemplate gBattleAnimSpriteTemplate_83D6FF8; - -static void sub_80CE4D4(u8 taskId); - -// flash (a "ting!" flash effect.) -// Used in Moonlight. - -void sub_80CE3EC(u8 taskId) -{ - int a = sub_80791A8(1, 0, 0, 0, 0, 0, 0) & 0xFFFF; - int b; - int c; - int d; - - gTasks[taskId].data[0] = 0; - gTasks[taskId].data[1] = 0; - gTasks[taskId].data[2] = 0; - gTasks[taskId].data[3] = a; - gTasks[taskId].data[4] = 0; - gTasks[taskId].data[5] = 0; - gTasks[taskId].data[6] = 0; - gTasks[taskId].data[7] = 13; - gTasks[taskId].data[8] = 14; - gTasks[taskId].data[9] = 15; - b = sub_80792C0(1, 1, 1, 1); - c = a | b; - sub_8079BF4(&gTasks[taskId].data[14], &gTasks[taskId].data[15], (void*)c); - b = b | (0x10000 << IndexOfSpritePaletteTag(0x27D2)); - d = IndexOfSpritePaletteTag(0x27D3); - BeginNormalPaletteFade((0x10000 << d) | b, 0, 0, 0x10, 32699); - gTasks[taskId].func = sub_80CE4D4; - sub_80CE4D4(taskId); -} - -void sub_80CE4D4(u8 taskId) -{ - struct Task* task = &gTasks[taskId]; - switch (task->data[0]) - { - case 0: - if (++task->data[1] > 0) - { - u16 color; - u16 bitmask; - u16 r3; - u16 i; - u16 j; - task->data[1] = 0; - if (++task->data[2] <= 15) - { - u16 red; - u16 green; - u16 blue; - task->data[4] += task->data[7]; - task->data[5] += task->data[8]; - task->data[6] += task->data[9]; - red = task->data[4] >> 3; - green = task->data[5] >> 3; - blue = task->data[6] >> 3; - color = RGB(red, green, blue); - } - else - { - color = RGB(27, 29, 31); - task->data[0]++; - } - - bitmask = 1; - r3 = 0; - for (i = 0; i <= 15; i++) - { - if (task->data[3] & bitmask) - { - for (j = 1; j <= 15; j++) - { - gPlttBufferFaded[r3 + j] = color; - } - } - - bitmask <<= 1; - r3 += 16; - } - } - break; - case 1: - if (!gPaletteFade.active) - { - u8 spriteId; - for (spriteId = 0; spriteId < MAX_SPRITES; spriteId++) - { - if (gSprites[spriteId].template == &gBattleAnimSpriteTemplate_83D6FC8 || gSprites[spriteId].template == &gBattleAnimSpriteTemplate_83D6FF8) - gSprites[spriteId].data[0] = 1; - } - - task->data[1] = 0; - task->data[0]++; - } - break; - case 2: - if (++task->data[1] > 30) - { - BeginNormalPaletteFade((u32)sub_8079BFC(task->data[14], task->data[15]), 0, 16, 0, RGB(27, 29, 31)); - task->data[0]++; - } - break; - case 3: - if (!gPaletteFade.active) - DestroyAnimVisualTask(taskId); - break; - } -} diff --git a/src/anim/flying_hearts.c b/src/anim/flying_hearts.c deleted file mode 100755 index 5b7d31a51..000000000 --- a/src/anim/flying_hearts.c +++ /dev/null @@ -1,40 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gBattleAnimBankAttacker; -extern u8 gBattleAnimBankTarget; - -static void sub_80D2094(struct Sprite* sprite); - -// flying_hearts (hearts float upward from the bottom of the screen.) -// Used in Attract. - -void sub_80D2064(struct Sprite* sprite) -{ - sprite->pos1.x = gBattleAnimArgs[0]; - sprite->pos1.y = 0xA0; - sprite->data[0] = gBattleAnimArgs[2]; - sprite->data[1] = gBattleAnimArgs[1]; - sprite->callback = sub_80782D8; - StoreSpriteCallbackInData(sprite, sub_80D2094); -} - -void sub_80D2094(struct Sprite* sprite) -{ - s16 y; - sprite->data[2] += sprite->data[1]; - sprite->pos2.y = -((u16)sprite->data[2] >> 8); - sprite->pos2.x = Sin(sprite->data[3], 4); - sprite->data[3] = (sprite->data[3] + 3) & 0xFF; - y = sprite->pos1.y + sprite->pos2.y; - if (y <= 0x48) - { - sprite->invisible = sprite->data[3] % 2; - if (y <= 0x40) - move_anim_8072740(sprite); - } -} diff --git a/src/anim/flying_path.c b/src/anim/flying_path.c deleted file mode 100755 index 017f89858..000000000 --- a/src/anim/flying_path.c +++ /dev/null @@ -1,296 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gBattleAnimBankAttacker; -extern u8 gBattleAnimBankTarget; - -extern struct SpriteTemplate gSpriteTemplate_83D6884; - -static void sub_80CBF5C(u8 taskId); -static s16 sub_80CC338(struct Sprite* sprite); -static void sub_80CC358(struct Task* task, u8 taskId); -static void sub_80CC408(struct Sprite* sprite); - -// flying_path (guides a sprite along a specific path.) -// Used by Leaf Blade. - -void sub_80CBDF4(u8 taskId) -{ - struct Task *task = &gTasks[taskId]; - - task->data[4] = sub_8079E90(gBattleAnimBankTarget) - 1; - task->data[6] = sub_8077ABC(gBattleAnimBankTarget, 2); - task->data[7] = sub_8077ABC(gBattleAnimBankTarget, 3); - task->data[10] = sub_807A100(gBattleAnimBankTarget, 1); - task->data[11] = sub_807A100(gBattleAnimBankTarget, 0); - task->data[5] = (GetBankSide(gBattleAnimBankTarget) == 1) ? 1 : -1; - task->data[9] = 0x38 - (task->data[5] * 64); - task->data[8] = task->data[7] - task->data[9] + task->data[6]; - task->data[2] = CreateSprite(&gSpriteTemplate_83D6884, task->data[8], task->data[9], task->data[4]); - if (task->data[2] == 0x40) - DestroyAnimVisualTask(taskId); - - gSprites[task->data[2]].data[0] = 10; - gSprites[task->data[2]].data[1] = task->data[8]; - gSprites[task->data[2]].data[2] = task->data[6] - (task->data[10] / 2 + 10) * task->data[5]; - gSprites[task->data[2]].data[3] = task->data[9]; - gSprites[task->data[2]].data[4] = task->data[7] + (task->data[11] / 2 + 10) * task->data[5]; - gSprites[task->data[2]].data[5] = sub_80CC338(&gSprites[task->data[2]]); - sub_80786EC(&gSprites[task->data[2]]); - task->func = sub_80CBF5C; -} - -void sub_80CBF5C(u8 taskId) -{ - struct Task* task = &gTasks[taskId]; - struct Sprite* sprite = &gSprites[task->data[2]]; - int a = task->data[0]; - switch (a) - { - case 4: - sub_80CC358(task, taskId); - if (sub_8078718(sprite) == 0) - { - break; - } - else - { - task->data[15] = 5; - task->data[0] = 0xFF; - } - break; - case 8: - sub_80CC358(task, taskId); - if (sub_8078718(sprite) == 0) - { - break; - } - else - { - task->data[15] = 9; - task->data[0] = 0xFF; - } - break; - case 0: - sub_80CC358(task, taskId); - if (sub_8078718(sprite) == 0) - break; - - task->data[15] = 1; - task->data[0] = 0xFF; - break; - case 1: - sprite->pos1.x += sprite->pos2.x; - sprite->pos1.y += sprite->pos2.y; - sprite->pos2.x = 0; - sprite->pos2.y = 0; - sprite->data[0] = 10; - sprite->data[1] = sprite->pos1.x; - sprite->data[2] = task->data[6]; - sprite->data[3] = sprite->pos1.y; - sprite->data[4] = task->data[7]; - sprite->data[5] = sub_80CC338(sprite); - task->data[4] += 2; - task->data[3] = a; - sprite->subpriority = task->data[4]; - StartSpriteAnim(sprite, task->data[3]); - sub_80786EC(sprite); - task->data[0]++; - break; - case 2: - sub_80CC358(task, taskId); - if (sub_8078718(sprite) == 0) - break; - - task->data[15] = 3; - task->data[0] = 0xFF; - break; - case 3: - sprite->pos1.x += sprite->pos2.x; - sprite->pos1.y += sprite->pos2.y; - sprite->pos2.x = 0; - sprite->pos2.y = 0; - sprite->data[0] = 10; - sprite->data[1] = sprite->pos1.x; - sprite->data[2] = task->data[6] - ((task->data[10] / 2) + 10) * task->data[5]; - sprite->data[3] = sprite->pos1.y; - sprite->data[4] = task->data[7] - ((task->data[11] / 2) + 10) * task->data[5]; - sprite->data[5] = sub_80CC338(sprite); - task->data[3] = 2; - sprite->subpriority = task->data[4]; - StartSpriteAnim(sprite, task->data[3]); - sub_80786EC(sprite); - task->data[0]++; - break; - case 5: - sprite->pos1.x += sprite->pos2.x; - sprite->pos1.y += sprite->pos2.y; - sprite->pos2.x = 0; - sprite->pos2.y = 0; - sprite->data[0] = 10; - sprite->data[1] = sprite->pos1.x; - sprite->data[2] = task->data[6] + ((task->data[10] / 2) + 10) * task->data[5]; - sprite->data[3] = sprite->pos1.y; - sprite->data[4] = task->data[7] + ((task->data[11] / 2) + 10) * task->data[5]; - sprite->data[5] = sub_80CC338(sprite); - task->data[4] -= 2; - task->data[3] = 3; - sprite->subpriority = task->data[4]; - StartSpriteAnim(sprite, task->data[3]); - sub_80786EC(sprite); - task->data[0]++; - break; - case 6: - sub_80CC358(task, taskId); - if (sub_8078718(sprite) == 0) - break; - - task->data[15] = 7; - task->data[0] = 0xFF; - break; - case 7: - sprite->pos1.x += sprite->pos2.x; - sprite->pos1.y += sprite->pos2.y; - sprite->pos2.x = 0; - sprite->pos2.y = 0; - sprite->data[0] = 10; - sprite->data[1] = sprite->pos1.x; - sprite->data[2] = task->data[6]; - sprite->data[3] = sprite->pos1.y; - sprite->data[4] = task->data[7]; - sprite->data[5] = sub_80CC338(sprite); - task->data[4] += 2; - task->data[3] = 4; - sprite->subpriority = task->data[4]; - StartSpriteAnim(sprite, task->data[3]); - sub_80786EC(sprite); - task->data[0]++; - break; - case 9: - sprite->pos1.x += sprite->pos2.x; - sprite->pos1.y += sprite->pos2.y; - sprite->pos2.x = 0; - sprite->pos2.y = 0; - sprite->data[0] = 10; - sprite->data[1] = sprite->pos1.x; - sprite->data[2] = task->data[6] - ((task->data[10] / 2) + 10) * task->data[5]; - sprite->data[3] = sprite->pos1.y; - sprite->data[4] = task->data[7] + ((task->data[11] / 2) + 10) * task->data[5]; - sprite->data[5] = sub_80CC338(sprite); - task->data[3] = 5; - sprite->subpriority = task->data[4]; - StartSpriteAnim(sprite, task->data[3]); - sub_80786EC(sprite); - task->data[0]++; - break; - case 10: - sub_80CC358(task, taskId); - if (sub_8078718(sprite) == 0) - { - break; - } - else - { - task->data[15] = 11; - task->data[0] = 0xFF; - } - break; - case 11: - { - sprite->pos1.x += sprite->pos2.x; - sprite->pos1.y += sprite->pos2.y; - sprite->pos2.x = 0; - sprite->pos2.y = 0; - sprite->data[0] = 10; - sprite->data[1] = sprite->pos1.x; - sprite->data[2] = task->data[8]; - sprite->data[3] = sprite->pos1.y; - sprite->data[4] = task->data[9]; - sprite->data[5] = sub_80CC338(sprite); - task->data[4] -= 2; - task->data[3] = 6; - sprite->subpriority = task->data[4]; - StartSpriteAnim(sprite, task->data[3]); - sub_80786EC(sprite); - task->data[0]++; - break; - } - case 12: - sub_80CC358(task, taskId); - if (sub_8078718(sprite) != 0) - { - DestroySprite(sprite); - task->data[0]++; - } - break; - case 13: - if (task->data[12] == 0) - { - DestroyAnimVisualTask(taskId); - } - break; - case 255: - task->data[1]++; - if (task->data[1] > 5) - { - task->data[1] = 0; - task->data[0] = task->data[15]; - } - break; - } -} - -s16 sub_80CC338(struct Sprite* sprite) -{ - s16 var = 8; - if (sprite->data[4] < sprite->pos1.y) - var = -var; - - return var; -} - -void sub_80CC358(struct Task* task, u8 taskId) -{ - task->data[14]++; - if (task->data[14] > 0) - { - u8 spriteId; - s16 spriteX; - s16 spriteY; - task->data[14] = 0; - spriteX = gSprites[task->data[2]].pos1.x + gSprites[task->data[2]].pos2.x; - spriteY = gSprites[task->data[2]].pos1.y + gSprites[task->data[2]].pos2.y; - spriteId = CreateSprite(&gSpriteTemplate_83D6884, spriteX, spriteY, task->data[4]); - if (spriteId != 0x40) - { - gSprites[spriteId].data[6] = taskId; - gSprites[spriteId].data[7] = 12; - gTasks[taskId].data[12]++; - gSprites[spriteId].data[0] = task->data[13] & 1; - gTasks[taskId].data[13]++; - StartSpriteAnim(&gSprites[spriteId], task->data[3]); - gSprites[spriteId].subpriority = task->data[4]; - gSprites[spriteId].callback = sub_80CC408; - } - } -} - -void sub_80CC408(struct Sprite* sprite) -{ - sprite->data[0]++; - if (sprite->data[0] > 1) - { - sprite->data[0] = 0; - sprite->invisible ^= 1; - sprite->data[1]++; - if (sprite->data[1] > 8) - { - gTasks[sprite->data[6]].data[sprite->data[7]]--; - DestroySprite(sprite); - } - } -} diff --git a/src/anim/flying_petals.c b/src/anim/flying_petals.c deleted file mode 100755 index ed6497b7a..000000000 --- a/src/anim/flying_petals.c +++ /dev/null @@ -1,83 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gBattleAnimBankAttacker; -extern u8 gBattleAnimBankTarget; - -static void sub_80CC580(struct Sprite* sprite); - -// flying_petals (petals fly across the screen.) -// Used by Aromatherapy. - -void sub_80CC474(struct Sprite* sprite) -{ - u8 bank; - if (!gBattleAnimArgs[6]) - bank = gBattleAnimBankAttacker; - else - bank = gBattleAnimBankTarget; - - if (GetBankSide(bank) != 0) - { - sprite->data[4] = 0; - sprite->data[2] = gBattleAnimArgs[3]; - sprite->pos1.x = 0xFFF0; - } - else - { - sprite->data[4] = 1; - sprite->data[2] = -gBattleAnimArgs[3]; - sprite->pos1.x = 0x100; - } - - sprite->data[1] = gBattleAnimArgs[1]; - sprite->data[0] = gBattleAnimArgs[2]; - sprite->data[3] = gBattleAnimArgs[4]; - switch (gBattleAnimArgs[5]) - { - case 0: - sprite->pos1.y = gBattleAnimArgs[0]; - sprite->oam.priority = sub_8079ED4(bank); - break; - case 1: - sprite->pos1.y = gBattleAnimArgs[0]; - sprite->oam.priority = sub_8079ED4(bank) + 1; - break; - case 2: - sprite->pos1.y = sub_8077ABC(bank, 3) + gBattleAnimArgs[0]; - sprite->oam.priority = sub_8079ED4(bank); - break; - case 3: - sprite->pos1.y = sub_8077ABC(gBattleAnimBankTarget, 3) + gBattleAnimArgs[0]; - GetAnimBankSpriteId(1); - sprite->oam.priority = sub_8079ED4(bank) + 1; - break; - } - - sprite->callback = sub_80CC580; -} - -void sub_80CC580(struct Sprite* sprite) -{ - int a = sprite->data[7]; - sprite->data[7]++; - sprite->pos2.y = (sprite->data[1] * gSineTable[sprite->data[0]]) >> 8; - sprite->pos2.x = sprite->data[2] * a; - sprite->data[0] = (sprite->data[3] * a) & 0xFF; - if (sprite->data[4] == 0) - { - if (sprite->pos2.x + sprite->pos1.x <= 0xF7) - return; - } - else - { - if (sprite->pos2.x + sprite->pos1.x > -16) - return; - } - - move_anim_8074EE0(sprite); -} diff --git a/src/anim/glitter.c b/src/anim/glitter.c deleted file mode 100755 index 548397932..000000000 --- a/src/anim/glitter.c +++ /dev/null @@ -1,63 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gBattleAnimBankAttacker; -extern u8 gBattleAnimBankTarget; - -// glitter (the sparkling effect seen on Pokemon, usually after healing or a beneficial effect.) -// Used by Heal Bell, Cosmic Power, and Aromatherapy. - -void sub_80CD140(struct Sprite* sprite) -{ - if (!gBattleAnimArgs[2]) - sub_8078650(sprite); - - sub_807867C(sprite, gBattleAnimArgs[0]); - sprite->pos1.y += gBattleAnimArgs[1]; - sprite->data[0] = gBattleAnimArgs[5]; - sprite->data[1] = gBattleAnimArgs[3]; - sprite->data[2] = gBattleAnimArgs[4]; - StoreSpriteCallbackInData(sprite, move_anim_8072740); - sprite->callback = sub_8078394; -} - -void sub_80CD190(struct Sprite* sprite) -{ - u8 bank; - if (!gBattleAnimArgs[2]) - bank = gBattleAnimBankAttacker; - else - bank = gBattleAnimBankTarget; - - if (IsDoubleBattle() && IsAnimBankSpriteVisible(bank ^ 2)) - { - sub_807A3FC(bank, gBattleAnimArgs[6], &sprite->pos1.x, &sprite->pos1.y); - sub_807867C(sprite, gBattleAnimArgs[0]); - sprite->pos1.y += gBattleAnimArgs[1]; - } - else - { - if (!gBattleAnimArgs[6]) - { - sprite->pos1.x = sub_8077ABC(bank, 0); - sprite->pos1.y = sub_8077ABC(bank, 1) + gBattleAnimArgs[1]; - } - else - { - sprite->pos1.x = sub_8077ABC(bank, 2); - sprite->pos1.y = sub_8077ABC(bank, 3) + gBattleAnimArgs[1]; - } - - sub_807867C(sprite, gBattleAnimArgs[0]); - } - - sprite->data[0] = gBattleAnimArgs[5]; - sprite->data[1] = gBattleAnimArgs[3]; - sprite->data[2] = gBattleAnimArgs[4]; - StoreSpriteCallbackInData(sprite, move_anim_8072740); - sprite->callback = sub_8078394; -} diff --git a/src/anim/glow.c b/src/anim/glow.c deleted file mode 100755 index 6038825af..000000000 --- a/src/anim/glow.c +++ /dev/null @@ -1,55 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" -#include "ewram.h" -#include "palette.h" -#include "decompress.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gBattleAnimBankAttacker; -extern u8 gBattleAnimBankTarget; - -extern u16 gUnknown_083D7A5C[5]; - -extern struct INCBIN_U8 gBattleAnimSpritePalette_206; - -// glow (a whitening effect where the Pokemon glows white in a cycle.) -// Used in Heal Bell. - -void sub_80D1ADC(u8 taskId) -{ - int i; - u8 sp[8]; - void* src; - void* dest; - void* what; - sp[0] = IndexOfSpritePaletteTag(0x27DE); - for (i = 1; i <= 4; i++) - { - sp[i] = AllocSpritePalette(0x2710 - i); - } - - src = &gBattleAnimSpritePalette_206; - dest = (NotInBattle()) ? gSharedMem + 0x18000 - 0x3800: gSharedMem + 0x18000; - LZDecompressWram(src, dest); - for (i = 0; i <= 4; i++) - { - what = ((NotInBattle()) ? gSharedMem + 0x14800 : gSharedMem + 0x18000) + (i << 5); - LoadPalette(what, (u16)((sp[i] << 4) + 0x100), 32); - } - - DestroyAnimVisualTask(taskId); -} - -void sub_80D1B80(u8 taskId) -{ - int i; - for (i = 0; i < 5; i++) - { - FreeSpritePaletteByTag(gUnknown_083D7A5C[i]); - } - - DestroyAnimVisualTask(taskId); -} diff --git a/src/anim/grip.c b/src/anim/grip.c deleted file mode 100755 index 93c3dba96..000000000 --- a/src/anim/grip.c +++ /dev/null @@ -1,44 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gBattleAnimBankAttacker; -extern u8 gBattleAnimBankTarget; - -static void sub_80D020C(struct Sprite* sprite); - -// grip (does a slash which is capable of mirroring for the effect of "gripping".) -// Used in Vice Grip. - -void sub_80D0178(struct Sprite* sprite) -{ - s16 r7 = 32; - s16 r4 = -32; - s16 r8 = 16; - s16 r6 = -16; - if (gBattleAnimArgs[0] != 0) - { - r7 = r4; - r4 = 32; - r8 = r6; - r6 = 16; - StartSpriteAnim(sprite, 1); - } - - sprite->pos1.x += r7; - sprite->pos1.y += r4; - sprite->data[0] = 6; - sprite->data[2] = sub_8077ABC(gBattleAnimBankTarget, 2) + r8; - sprite->data[4] = sub_8077ABC(gBattleAnimBankTarget, 3) + r6; - sprite->callback = sub_8078B34; - StoreSpriteCallbackInData(sprite, sub_80D020C); -} - -void sub_80D020C(struct Sprite* sprite) -{ - if (sprite->animEnded == 1) - move_anim_8072740(sprite); -} diff --git a/src/anim/grow.c b/src/anim/grow.c deleted file mode 100755 index 35047c8b0..000000000 --- a/src/anim/grow.c +++ /dev/null @@ -1,31 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gBattleAnimBankAttacker; -extern u8 gBattleAnimBankTarget; - -extern struct AffineAnimFrameCmd gUnknown_083D7714; - -static void sub_80D0904(u8 taskId); - -// grow (grows a Pokemon then shrinks back to normal size.) -// Used in Swagger and Bulk Up. - -void sub_80D08C8(u8 taskId) -{ - struct Task* task = &gTasks[taskId]; - u8 spriteId = GetAnimBankSpriteId(0); - sub_80798F4(task, spriteId, &gUnknown_083D7714); - task->func = sub_80D0904; -} - -void sub_80D0904(u8 taskId) -{ - struct Task* task = &gTasks[taskId]; - if (!sub_807992C(task)) - DestroyAnimVisualTask(taskId); -} diff --git a/src/anim/guillotine.c b/src/anim/guillotine.c deleted file mode 100755 index b710f372a..000000000 --- a/src/anim/guillotine.c +++ /dev/null @@ -1,90 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gBattleAnimBankAttacker; -extern u8 gBattleAnimBankTarget; - -static void sub_80D02D0(struct Sprite* sprite); -static void sub_80D0344(struct Sprite* sprite); -static void sub_80D03A8(struct Sprite* sprite); - -// guillotine (does a reverse grip where the slices can reverse at a given period.) -// Used in Guillotine. - -void sub_80D0228(struct Sprite* sprite) -{ - s16 r8 = 32; - s16 r4 = -32; - s16 r9 = 16; - s16 r6 = -16; - if (gBattleAnimArgs[0] != 0) - { - r8 = r4; - r4 = 32; - r9 = r6; - r6 = 16; - StartSpriteAnim(sprite, gBattleAnimArgs[0]); - } - - sprite->pos1.x += r8; - sprite->pos1.y += r4; - sprite->data[0] = 6; - sprite->data[1] = sprite->pos1.x; - sprite->data[2] = sub_8077ABC(gBattleAnimBankTarget, 2) + r9; - sprite->data[3] = sprite->pos1.y; - sprite->data[4] = sub_8077ABC(gBattleAnimBankTarget, 3) + r6; - obj_translate_based_on_private_1_2_3_4(sprite); - sprite->data[5] = gBattleAnimArgs[0]; - sprite->data[6] = sprite->data[0]; - sprite->callback = sub_80D02D0; -} - -void sub_80D02D0(struct Sprite* sprite) -{ - if (sub_8078B5C(sprite) && sprite->animEnded == 1) - { - SeekSpriteAnim(sprite, 0); - sprite->animPaused = 1; - sprite->pos1.x += sprite->pos2.x; - sprite->pos1.y += sprite->pos2.y; - sprite->pos2.x = 2; - sprite->pos2.y = -2; - sprite->data[0] = sprite->data[6]; - sprite->data[1] ^= 1; - sprite->data[2] ^= 1; - sprite->data[4] = 0; - sprite->data[3] = 0; - sprite->callback = sub_80D0344; - } -} - -void sub_80D0344(struct Sprite* sprite) -{ - if (sprite->data[3]) - { - sprite->pos2.x = -sprite->pos2.x; - sprite->pos2.y = -sprite->pos2.y; - } - - sprite->data[3] ^= 1; - if (++sprite->data[4] == 0x33) - { - sprite->pos2.y = 0; - sprite->pos2.x = 0; - sprite->data[4] = 0; - sprite->data[3] = 0; - sprite->animPaused = 0; - StartSpriteAnim(sprite, sprite->data[5] ^ 1); - sprite->callback = sub_80D03A8; - } -} - -void sub_80D03A8(struct Sprite* sprite) -{ - if (sub_8078B5C(sprite) != 0) - move_anim_8072740(sprite); -} diff --git a/src/anim/heal.c b/src/anim/heal.c deleted file mode 100755 index c5950650c..000000000 --- a/src/anim/heal.c +++ /dev/null @@ -1,27 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gBattleAnimBankAttacker; -extern u8 gBattleAnimBankTarget; - -// heal (healing sparkles on a Pokemon) -// Used in Present, if the move heals instead of damages. - -void sub_80CBAA4(struct Sprite* sprite) -{ - if (sprite->data[0] == 0) - { - sub_8078764(sprite, 0); - sprite->data[1] = gBattleAnimArgs[2]; - } - - sprite->data[0]++; - sprite->pos2.y = sprite->data[1] * sprite->data[0]; - if (sprite->animEnded) - { - move_anim_8072740(sprite); - } -} diff --git a/src/anim/heart_1.c b/src/anim/heart_1.c deleted file mode 100755 index 1ab83136c..000000000 --- a/src/anim/heart_1.c +++ /dev/null @@ -1,25 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gBattleAnimBankAttacker; -extern u8 gBattleAnimBankTarget; - -// heart_1 (a floating heart in a wave pattern upward.) -// Used in Charm, Covet, and when a Pokemon is infatuated. - -void sub_80D1C80(struct Sprite* sprite) -{ - if (++sprite->data[0] == 1) - sub_80787B0(sprite, 0); - - sprite->pos2.x = Sin(sprite->data[1], 8); - sprite->pos2.y = sprite->data[2] >> 8; - sprite->data[1] = (sprite->data[1] + 7) & 0xFF; - sprite->data[2] -= 0x80; - if (sprite->data[0] == 0x3C) - move_anim_8072740(sprite); -} diff --git a/src/anim/homing.c b/src/anim/homing.c deleted file mode 100755 index c5e372d78..000000000 --- a/src/anim/homing.c +++ /dev/null @@ -1,86 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gBattleAnimBankAttacker; -extern u8 gBattleAnimBankTarget; - -static void sub_80CC7D4(struct Sprite* sprite); - -// homing (the spinning effect of sprites going inward in a static rotation.) -// Used by Needle Arm. - -void sub_80CC6CC(struct Sprite* sprite) -{ - u8 a; - u8 b; - u16 c; - u16 x; - u16 y; - - if (gBattleAnimArgs[4] == 0) - { - move_anim_8072740(sprite); - } - else - { - if (gBattleAnimArgs[0] == 0) - { - a = sub_8077ABC(gBattleAnimBankAttacker, 2); - b = sub_8077ABC(gBattleAnimBankAttacker, 3); - } - else - { - a = sub_8077ABC(gBattleAnimBankTarget, 2); - b = sub_8077ABC(gBattleAnimBankTarget, 3); - } - - sprite->data[0] = gBattleAnimArgs[4]; - if (gBattleAnimArgs[1] == 0) - { - sprite->pos1.x = gBattleAnimArgs[2] + a; - sprite->pos1.y = gBattleAnimArgs[3] + b; - sprite->data[5] = a; - sprite->data[6] = b; - } - else - { - sprite->pos1.x = a; - sprite->pos1.y = b; - sprite->data[5] = gBattleAnimArgs[2] + a; - sprite->data[6] = gBattleAnimArgs[3] + b; - } - - x = sprite->pos1.x; - sprite->data[1] = x * 16; - y = sprite->pos1.y; - sprite->data[2] = y * 16; - sprite->data[3] = (sprite->data[5] - sprite->pos1.x) * 16 / gBattleAnimArgs[4]; - sprite->data[4] = (sprite->data[6] - sprite->pos1.y) * 16 / gBattleAnimArgs[4]; - c = sub_80790F0(sprite->data[5] - x, sprite->data[6] - y); - if (NotInBattle()) - c -= 0x8000; - - sub_8078FDC(sprite, 0, 0x100, 0x100, c); - sprite->callback = sub_80CC7D4; - } -} - -void sub_80CC7D4(struct Sprite* sprite) -{ - if (sprite->data[0]) - { - sprite->data[1] += sprite->data[3]; - sprite->data[2] += sprite->data[4]; - sprite->pos1.x = sprite->data[1] >> 4 ; - sprite->pos1.y = sprite->data[2] >> 4 ; - sprite->data[0]--; - } - else - { - move_anim_8074EE0(sprite); - } -} diff --git a/src/anim/hop.c b/src/anim/hop.c deleted file mode 100755 index 60f3b8a48..000000000 --- a/src/anim/hop.c +++ /dev/null @@ -1,160 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gBattleAnimBankAttacker; -extern u8 gBattleAnimBankTarget; - -// hop (where a sprite "hops" across the screen) -// Used by Present, Trick, and the item knock off effect. - -void sub_80CB7EC(struct Sprite* sprite, s16 c) -{ - s32 a = (sprite->pos1.x * 256) | sprite->pos1.y; - s32 b = (sprite->data[6] * 256) | sprite->data[7]; - c *= 256; - sprite->data[5] = a; - sprite->data[6] = b; - sprite->data[7] = c; -} - -bool8 sub_80CB814(struct Sprite* sprite) -{ - u16 r10 = (u8)(sprite->data[5] >> 8); - u16 r9 = (u8)sprite->data[5]; - s32 r2 = (u8)(sprite->data[6] >> 8); - s32 r4 = (u8)sprite->data[6]; - s16 r6 = sprite->data[7] >> 8; - s16 r3 = sprite->data[7] & 0xFF; - s16 r4_2; - s16 r0; - s32 var1; - s32 var2; - - if (r2 == 0) - { - r2 = -32; - } - else if (r2 == 255) - { - r2 = 0x110; - } - - r4_2 = r4 - r9; - r0 = r2 - r10; - var1 = r0 * r3 / r6; - var2 = r4_2 * r3 / r6; - sprite->pos1.x = var1 + r10; - sprite->pos1.y = var2 + r9; - if (++r3 == r6) - return TRUE; - - sprite->data[7] = (r6 << 8) | r3; - return FALSE; -} - -void sub_80CB8B8(struct Sprite* sprite) -{ - if (sprite->data[0] == 10) - { - StartSpriteAffineAnim(sprite, 1); - } - - sprite->data[0]++; - if (sprite->data[0] > 50) - { - move_anim_8072740(sprite); - } -} - -void sub_80CB8E8(struct Sprite* sprite) -{ - sprite->data[0] += sprite->data[3] * 128 / sprite->data[4]; - if (sprite->data[0] >= 128) - { - sprite->data[1]++; - sprite->data[0] = 0; - } - - sprite->pos2.y = Sin(sprite->data[0] + 128, 30 - sprite->data[1] * 8); - if (sub_80CB814(sprite)) - { - sprite->pos2.y = 0; - sprite->data[0] = 0; - sprite->callback = sub_80CB8B8; - } -} - -void sub_80CB94C(struct Sprite* sprite) -{ - s16 e1; - s16 e2; - sub_80787B0(sprite, 0); - e1 = sub_8077ABC(gBattleAnimBankTarget, 0); - e2 = sub_8077ABC(gBattleAnimBankTarget, 1); - if ((gBattleAnimBankAttacker ^ 2) == gBattleAnimBankTarget) - { - sprite->data[6] = e1; - sprite->data[7] = e2 + 10; - sub_80CB7EC(sprite, 0x3C); - sprite->data[3] = 1; - } - else - { - sprite->data[6] = e1; - sprite->data[7] = e2 + 10; - sub_80CB7EC(sprite, 0x3C); - sprite->data[3] = 3; - } - - sprite->data[4] = 0x3C; - sprite->callback = sub_80CB8E8; -} - -void sub_80CB9C4(struct Sprite* sprite) -{ - int zero; - sprite->data[0] += ((sprite->data[3] * 128) / sprite->data[4]); - zero = 0; - if (sprite->data[0] > 0x7F) - { - sprite->data[1]++; - sprite->data[0] = zero; - } - - sprite->pos2.y = Sin(sprite->data[0] + 0x80, 30 - sprite->data[1] * 8); - if (sub_80CB814(sprite)) - { - sprite->pos2.y = zero; - sprite->data[0] = zero; - move_anim_8072740(sprite); - } -} - -void sub_80CBA28(struct Sprite* sprite) -{ - s16 e = sub_8077ABC(gBattleAnimBankTarget, 1); - if (GetBankSide(gBattleAnimBankTarget) == 0) - { - sprite->data[6] = 0; - sprite->data[7] = e + 10; - sub_80CB7EC(sprite, 0x28); - sprite->data[3] = 3; - sprite->data[4] = 0x3C; - sprite->callback = sub_80CB8E8; - } - else - { - sprite->data[6] = 255; - sprite->data[7] = e + 10; - if (NotInBattle()) - sprite->data[6] = 0; - - sub_80CB7EC(sprite, 0x28); - sprite->data[3] = 3; - sprite->data[4] = 0x3C; - sprite->callback = sub_80CB9C4; - } -} diff --git a/src/anim/hop_2.c b/src/anim/hop_2.c deleted file mode 100755 index 5458c4599..000000000 --- a/src/anim/hop_2.c +++ /dev/null @@ -1,70 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gBattleAnimBankAttacker; -extern u8 gBattleAnimBankTarget; - -extern void sub_80CB7EC(struct Sprite* sprite, s16 c); -extern bool8 sub_80CB814(struct Sprite* sprite); -extern void sub_80CB8B8(struct Sprite* sprite); - -static void sub_80CBB60(struct Sprite* sprite); - -// hop_2 -// Used in item steal. - -void sub_80CBAE8(struct Sprite* sprite) -{ - s16 p1; - s16 p2; - sub_8078764(sprite, 0); - p1 = sub_8077ABC(gBattleAnimBankAttacker, 0); - p2 = sub_8077ABC(gBattleAnimBankAttacker, 1); - if ((gBattleAnimBankTarget ^ 2) == gBattleAnimBankAttacker) - { - sprite->data[6] = p1; - sprite->data[7] = p2 + 10; - sub_80CB7EC(sprite, 0x3c); - sprite->data[3] = 1; - } - else - { - sprite->data[6] = p1; - sprite->data[7] = p2 + 10; - sub_80CB7EC(sprite, 0x3c); - sprite->data[3] = 3; - } - - sprite->data[4] = 0x3C; - sprite->callback = sub_80CBB60; -} - -void sub_80CBB60(struct Sprite* sprite) -{ - int zero; - sprite->data[0] += ((sprite->data[3] * 128) / sprite->data[4]); - zero = 0; - if (sprite->data[0] > 0x7F) - { - sprite->data[1]++; - sprite->data[0] = zero; - } - - sprite->pos2.y = Sin(sprite->data[0] + 0x80, 30 - sprite->data[1] * 8); - if (sprite->pos2.y == 0) - { - PlaySE12WithPanning(0x7D, sub_8076F98(0x3F)); - } - - if (sub_80CB814(sprite)) - { - sprite->pos2.y = 0; - sprite->data[0] = 0; - sprite->callback = sub_80CB8B8; - PlaySE12WithPanning(0x7D, sub_8076F98(-0x40)); - } -} diff --git a/src/anim/kiss_fountain.c b/src/anim/kiss_fountain.c deleted file mode 100755 index 2e7f64c11..000000000 --- a/src/anim/kiss_fountain.c +++ /dev/null @@ -1,38 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gBattleAnimBankAttacker; -extern u8 gBattleAnimBankTarget; - -// kiss_fountain (a series of hearts pour out of a target Pokemon.) -// Used in Attract and Sweet Kiss. - -void sub_80D1FDC(struct Sprite* sprite) -{ - if (sprite->data[0] == 0) - { - sprite->data[1] = gBattleAnimArgs[0]; - sprite->data[2] = gBattleAnimArgs[1]; - sprite->data[0]++; - } - else - { - sprite->data[4] += sprite->data[1]; - sprite->pos2.x = sprite->data[4] >> 8; - sprite->pos2.y = Sin(sprite->data[3], sprite->data[2]); - sprite->data[3] = (sprite->data[3] + 3) & 0xFF; - if (sprite->data[3] > 0x64) - { - sprite->invisible = sprite->data[3] % 2; - } - - if (sprite->data[3] > 0x78) - { - move_anim_8072740(sprite); - } - } -} diff --git a/src/anim/leaf.c b/src/anim/leaf.c deleted file mode 100755 index 13d1bc9f5..000000000 --- a/src/anim/leaf.c +++ /dev/null @@ -1,74 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gBattleAnimBankAttacker; -extern u8 gBattleAnimBankTarget; - -static void sub_80CAF20(struct Sprite* sprite); -static void sub_80CAF6C(struct Sprite* sprite); - -// leaf -// Used by Razor Leaf and Twister. - -void sub_80CAED8(struct Sprite* sprite) -{ - sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 2); - sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 3); - sprite->data[0] = gBattleAnimArgs[0]; - sprite->data[1] = gBattleAnimArgs[1]; - sprite->data[2] = gBattleAnimArgs[2]; - sprite->callback = sub_80CAF20; -} - -void sub_80CAF20(struct Sprite* sprite) -{ - if (!sprite->data[2]) - { - if (sprite->data[1] & 1) - { - sprite->data[0] = 0x80; - sprite->data[1] = 0; - sprite->data[2] = 0; - } - else - { - sprite->data[0] = sprite->data[1] & 1; - sprite->data[1] = sprite->data[1] & 1; - sprite->data[2] = sprite->data[1] & 1; - } - sprite->callback = sub_80CAF6C; - } - else - { - sprite->data[2]--; - sprite->pos1.x += sprite->data[0]; - sprite->pos1.y += sprite->data[1]; - } -} - -void sub_80CAF6C(struct Sprite* sprite) -{ - if (GetBankSide(gBattleAnimBankAttacker)) - { - sprite->pos2.x = -Sin(sprite->data[0], 0x19); - } - else - { - sprite->pos2.x = Sin(sprite->data[0], 0x19); - } - - sprite->data[0] = (sprite->data[0] + 2) & 0xFF; - sprite->data[1]++; - if (!(sprite->data[1] & 1)) - { - sprite->pos2.y++; - } - - if (sprite->data[1] > 0x50) - { - move_anim_8072740(sprite); - } -} diff --git a/src/anim/love_bg.c b/src/anim/love_bg.c deleted file mode 100755 index c5659463e..000000000 --- a/src/anim/love_bg.c +++ /dev/null @@ -1,128 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" -#include "decompress.h" -#include "palette.h" - -struct Struct_sub_8078914 -{ - u8 *field_0; - u8 *field_4; - u8 field_8; -}; - -extern s16 gBattleAnimArgs[]; -extern u8 gBattleAnimBankAttacker; -extern u8 gBattleAnimBankTarget; - -extern struct INCBIN_U8 gAttractTilemap; -extern struct INCBIN_U8 gAttractGfx; -extern struct INCBIN_U8 gAttractPal; - -extern u16 gUnknown_030041B4; -extern u16 gUnknown_030042C0; - -static void sub_80D21F0(u8 taskId); - -// love_bg (makes the BG a background of hearts.) -// Used in Attract. - -void sub_80D2100(u8 taskId) -{ - struct Struct_sub_8078914 subStruct; - u8* tempvar; - REG_BLDCNT = 0x3F42; - REG_BLDALPHA = 0x1000; - REG_BG1CNT_BITFIELD.priority = 3; - REG_BG1CNT_BITFIELD.screenSize = 0; - if (!NotInBattle()) - REG_BG1CNT_BITFIELD.charBaseBlock = 1; - - gUnknown_030042C0 = 0; - gUnknown_030041B4 = 0; - REG_BG1HOFS = 0; - REG_BG1VOFS = 0; - sub_8078914(&subStruct); - tempvar = subStruct.field_4; - DmaFill32(3, 0x0, tempvar, 0x1000); - LZDecompressVram(&gAttractTilemap, tempvar); - LZDecompressVram(&gAttractGfx, subStruct.field_0); - LoadCompressedPalette(&gAttractPal, subStruct.field_8 << 4, 32); - if (NotInBattle()) - sub_80763FC(subStruct.field_8, (u16 *)subStruct.field_4, 0, 0); - - gTasks[taskId].func = sub_80D21F0; -} - -void sub_80D21F0(u8 taskId) -{ - struct Struct_sub_8078914 subStruct; - - switch (gTasks[taskId].data[12]) - { - case 0: - if (++gTasks[taskId].data[10] == 4) - { - gTasks[taskId].data[10] = 0; - gTasks[taskId].data[11]++; - REG_BLDALPHA = gTasks[taskId].data[11] | ((16 - gTasks[taskId].data[11]) << 8); - if (gTasks[taskId].data[11] == 16) - { - gTasks[taskId].data[12]++; - gTasks[taskId].data[11] = 0; - } - } - break; - case 1: - if (++gTasks[taskId].data[11] == 0x8D) - { - gTasks[taskId].data[11] = 16; - gTasks[taskId].data[12]++; - } - break; - case 2: - if (++gTasks[taskId].data[10] == 4) - { - gTasks[taskId].data[10] = 0; - gTasks[taskId].data[11]--; - REG_BLDALPHA = gTasks[taskId].data[11] | ((16 - gTasks[taskId].data[11]) << 8); - if (gTasks[taskId].data[11] == 0) - { - gTasks[taskId].data[12]++; - gTasks[taskId].data[11] = 0; - } - } - break; - case 3: - sub_8078914(&subStruct); - { - u8 *addr = subStruct.field_0; - u32 size = 0x2000; - while (1) - { - DmaFill32(3, 0, addr, 0x1000); - addr += 0x1000; - size -= 0x1000; - if (size <= 0x1000) - { - DmaFill32(3, 0, addr, size); - break; - } - } - } - DmaClear32(3, subStruct.field_4, 0x800); - if (!NotInBattle()) - REG_BG1CNT_BITFIELD.charBaseBlock = 0; - - gTasks[taskId].data[12]++; - // fall through - case 4: - REG_BLDCNT = 0; - REG_BLDALPHA = 0; - REG_BG1CNT_BITFIELD.priority = 1; - DestroyAnimVisualTask(taskId); - break; - } -} diff --git a/src/anim/lunge_1.c b/src/anim/lunge_1.c deleted file mode 100755 index f1e1e35b6..000000000 --- a/src/anim/lunge_1.c +++ /dev/null @@ -1,124 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gBattleAnimBankAttacker; -extern u8 gBattleAnimBankTarget; - -extern u8 gObjectBankIDs[]; - -static void sub_80CD7CC(struct Sprite* sprite); -static void sub_80CD81C(struct Sprite* sprite); -static void sub_80CD8A8(struct Sprite* sprite); -static void sub_80CD8F8(struct Sprite* sprite); -static void sub_80CD91C(struct Sprite* sprite); -static void sub_80CD9B8(struct Sprite* sprite); - -// lunge_1 (makes the pokemon sprite do a "lunge" where it leans back to attack, usually with its head or horn.) -// Used in Drill Peck, Headbutt, Horn Attack, and Horn Drill. - -void sub_80CD774(struct Sprite* sprite) -{ - sprite->invisible = 1; - sprite->data[0] = 0; - switch (gBattleAnimArgs[0]) - { - case 0: - sprite->callback = sub_80CD7CC; - break; - case 1: - sprite->callback = sub_80CD8A8; - break; - case 2: - sprite->callback = sub_80CD8F8; - break; - default: - sprite->callback = sub_80CD9B8; - break; - } -} - -void sub_80CD7CC(struct Sprite* sprite) -{ - sprite->data[0] = 6; - sprite->data[1] = (GetBankSide(gBattleAnimBankAttacker)) ? 2 : -2; - sprite->data[2] = 0; - sprite->data[3] = gObjectBankIDs[gBattleAnimBankAttacker]; - StoreSpriteCallbackInData(sprite, sub_80CD81C); - sprite->callback = sub_8078458; -} - -void sub_80CD81C(struct Sprite* sprite) -{ - if (sprite->data[0] == 0) - { - sprite->data[3] = gObjectBankIDs[gBattleAnimBankAttacker]; - sub_8078E70(sprite->data[3], 0); - sprite->data[4] = (sprite->data[6] = GetBankSide(gBattleAnimBankAttacker)) ? 0x300 : 0xFFFFFD00; - sprite->data[5] = 0; - } - - sprite->data[5] += sprite->data[4]; - obj_id_set_rotscale(sprite->data[3], 0x100, 0x100, sprite->data[5]); - sub_8078F9C(sprite->data[3]); - if (++sprite->data[0] > 3) - { - sprite->data[0] = 0; - sprite->callback = sub_80CD9B8; - } -} - -void sub_80CD8A8(struct Sprite* sprite) -{ - sprite->data[0] = 4; - sprite->data[1] = (GetBankSide(gBattleAnimBankAttacker)) ? -3 : 3; - sprite->data[2] = 0; - sprite->data[3] = gObjectBankIDs[gBattleAnimBankAttacker]; - StoreSpriteCallbackInData(sprite, sub_80CD9B8); - sprite->callback = sub_8078458; -} - -void sub_80CD8F8(struct Sprite* sprite) -{ - if (++sprite->data[0] > 8) - { - sprite->data[0] = 0; - sprite->callback = sub_80CD91C; - } -} - -void sub_80CD91C(struct Sprite* sprite) -{ - if (sprite->data[0] == 0) - { - sprite->data[3] = gObjectBankIDs[gBattleAnimBankAttacker]; - sprite->data[6] = GetBankSide(gBattleAnimBankAttacker); - if (GetBankSide(gBattleAnimBankAttacker)) - { - sprite->data[4] = 0xFC00; - sprite->data[5] = 0xC00; - } - else - { - sprite->data[4] = 0x400; - sprite->data[5] = 0xF400; - } - } - - sprite->data[5] += sprite->data[4]; - obj_id_set_rotscale(sprite->data[3], 0x100, 0x100, sprite->data[5]); - sub_8078F9C(sprite->data[3]); - if (++sprite->data[0] > 2) - { - sub_8078F40(sprite->data[3]); - sprite->callback = sub_80CD9B8; - } -} - -void sub_80CD9B8(struct Sprite* sprite) -{ - move_anim_8072740(sprite); -} diff --git a/src/anim/lunge_2.c b/src/anim/lunge_2.c deleted file mode 100755 index 3972bee59..000000000 --- a/src/anim/lunge_2.c +++ /dev/null @@ -1,163 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gBattleAnimBankAttacker; -extern u8 gBattleAnimBankTarget; - -extern u8 gObjectBankIDs[]; - -static void sub_80CDB60(u8 taskId); -static void sub_80CDD20(u8 taskId); - -// lunge_2 -// Drill Peck - -void sub_80CDAC8(u8 taskId) -{ - u8 a; - - gTasks[taskId].data[0] = gObjectBankIDs[gBattleAnimBankAttacker]; - a = GetBankSide(gBattleAnimBankAttacker); - gTasks[taskId].data[1] = a; - gTasks[taskId].data[2] = 0; - switch (gBattleAnimArgs[0]) - { - default: - DestroyAnimVisualTask(taskId); - break; - case 0: - gTasks[taskId].data[2] = 0; - gTasks[taskId].data[3] = 8; - gTasks[taskId].data[4] = 0; - gTasks[taskId].data[5] = 3; - if (a == 0) - gTasks[taskId].data[5] *= -1; - - gTasks[taskId].func = sub_80CDB60; - break; - case 1: - gTasks[taskId].data[3] = 8; - gTasks[taskId].data[4] = 0x600; - gTasks[taskId].data[5] = 0xC0; - if (a == 0) - { - gTasks[taskId].data[4] = -gTasks[taskId].data[4]; - gTasks[taskId].data[5] = -gTasks[taskId].data[5]; - } - - gTasks[taskId].func = sub_80CDD20; - break; - } -} - -void sub_80CDB60(u8 taskId) -{ - struct Task *task = &gTasks[taskId]; - switch (task->data[2]) - { - case 0: - if (task->data[3]) - { - task->data[4] += task->data[5]; - gSprites[task->data[0]].pos2.x = task->data[4]; - task->data[3]--; - } - else - { - task->data[3] = 8; - task->data[4] = 0; - task->data[5] = (task->data[1] == 0) ? -0xC0 : 0xC0; - sub_8078E70(task->data[0], 0); - task->data[2]++; - } - break; - case 1: - if (task->data[3]) - { - task->data[4] += task->data[5]; - obj_id_set_rotscale(task->data[0], 0x100, 0x100, task->data[4]); - sub_8078F9C(task->data[0]); - task->data[3]--; - } - else - { - task->data[3] = 8; - task->data[4] = gSprites[task->data[0]].pos2.x; - task->data[5] = (task->data[1] == 0) ? 0x2 : -0x2; - task->data[6] = 1; - task->data[2]++; - } - break; - case 2: - if (task->data[3]) - { - if (task->data[6]) - { - task->data[6]--; - } - else - { - if (task->data[3] & 1) - gSprites[task->data[0]].pos2.x = task->data[4] + task->data[5]; - else - gSprites[task->data[0]].pos2.x = task->data[4] - task->data[5]; - - task->data[6] = 1; - task->data[3]--; - } - } - else - { - gSprites[task->data[0]].pos2.x = task->data[4]; - task->data[3] = 12; - task->data[2]++; - } - break; - case 3: - if (task->data[3]) - { - task->data[3]--; - } - else - { - task->data[3] = 3; - task->data[4] = gSprites[task->data[0]].pos2.x; - task->data[5] = (task->data[1] == 0) ? 8 : -8; - task->data[2]++; - } - break; - case 4: - if (task->data[3]) - { - task->data[4] += task->data[5]; - gSprites[task->data[0]].pos2.x = task->data[4]; - task->data[3]--; - } - else - { - DestroyAnimVisualTask(taskId); - } - break; - } -} - -void sub_80CDD20(u8 taskId) -{ - struct Task* task = &gTasks[taskId]; - if (task->data[3]) - { - task->data[4] -= task->data[5]; - obj_id_set_rotscale(task->data[0], 0x100, 0x100, task->data[4]); - sub_8078F9C(task->data[0]); - task->data[3]--; - } - else - { - sub_8078F40(task->data[0]); - DestroyAnimVisualTask(taskId); - } -} diff --git a/src/anim/money.c b/src/anim/money.c deleted file mode 100755 index 91eaf20b1..000000000 --- a/src/anim/money.c +++ /dev/null @@ -1,62 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gBattleAnimBankAttacker; -extern u8 gBattleAnimBankTarget; - -static void sub_80CFF68(struct Sprite* sprite); - -// money -// Used by Pay Day. - -void sub_80CFE9C(struct Sprite* sprite) -{ - s16 r6; - s16 r7; - u16 var; - - sub_80787B0(sprite, 1); - r6 = sub_8077ABC(gBattleAnimBankTarget, 2); - r7 = sub_8077ABC(gBattleAnimBankTarget, 3) + gBattleAnimArgs[3]; - if (GetBankSide(gBattleAnimBankAttacker) != 0) - gBattleAnimArgs[2] = -gBattleAnimArgs[2]; - - r6 += gBattleAnimArgs[2]; - var = sub_80790F0(r6 - sprite->pos1.x, r7 - sprite->pos1.y); - var += 0xC000; - sub_8078FDC(sprite, 0, 0x100, 0x100, var); - sprite->data[0] = gBattleAnimArgs[4]; - sprite->data[2] = r6; - sprite->data[4] = r7; - sprite->callback = sub_8078C00; - StoreSpriteCallbackInData(sprite, move_anim_8072740); -} - -void sub_80CFF50(struct Sprite* sprite) -{ - sprite->data[2] = -16; - sprite->pos1.y += 8; - sprite->callback = sub_80CFF68; -} - -void sub_80CFF68(struct Sprite* sprite) -{ - sprite->data[0] += 0x80; - sprite->pos2.x = sprite->data[0] >> 8; - if (GetBankSide(gBattleAnimBankAttacker) == 0) - sprite->pos2.x = -sprite->pos2.x; - - sprite->pos2.y = Sin(sprite->data[1], sprite->data[2]); - sprite->data[1] += 5; - if (sprite->data[1] > 0x7E) - { - sprite->data[1] = 0; - sprite->data[2] /= 2; - if (++sprite->data[3] == 2) - move_anim_8072740(sprite); - } -} diff --git a/src/anim/moon.c b/src/anim/moon.c deleted file mode 100755 index e2a31d14d..000000000 --- a/src/anim/moon.c +++ /dev/null @@ -1,39 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gBattleAnimBankAttacker; -extern u8 gBattleAnimBankTarget; - -static void sub_80CE354(struct Sprite* sprite); - -// moon (shows a moon image.) -// Used in Moonlight. - -void sub_80CE30C(struct Sprite* sprite) -{ - if (NotInBattle()) - { - sprite->pos1.x = 0x30; - sprite->pos1.y = 0x28; - } - else - { - sprite->pos1.x = gBattleAnimArgs[0]; - sprite->pos1.y = gBattleAnimArgs[1]; - } - - sprite->oam.shape = 0; - sprite->oam.size = 3; - sprite->data[0] = 0; - sprite->callback = sub_80CE354; -} - -void sub_80CE354(struct Sprite* sprite) -{ - if (sprite->data[0]) - move_anim_8072740(sprite); -} diff --git a/src/anim/note_rain.c b/src/anim/note_rain.c deleted file mode 100755 index fd62b7176..000000000 --- a/src/anim/note_rain.c +++ /dev/null @@ -1,37 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gBattleAnimBankAttacker; -extern u8 gBattleAnimBankTarget; - -extern u16 gUnknown_083D7A5C[5]; - -// note_rain (notes rain from a source point, usually a bell.) -// Used in Heal Bell. - -void sub_80D1BA8(struct Sprite* sprite, u8 a, u8 b) -{ - u8 tile; - tile = (b & 1); - tile = ((-tile | tile) >> 31) & 32; - sprite->oam.tileNum += tile + (a << 2); - sprite->oam.paletteNum = IndexOfSpritePaletteTag(gUnknown_083D7A5C[b >> 1]); -} - -void sub_80D1C08(struct Sprite* sprite) -{ - sub_80787B0(sprite, 0); - if (GetBankSide(gBattleAnimBankAttacker) != 0) - gBattleAnimArgs[2] = -gBattleAnimArgs[2]; - - sprite->data[0] = gBattleAnimArgs[4]; - sprite->data[2] = sub_8077ABC(gBattleAnimBankAttacker, 0) + gBattleAnimArgs[2]; - sprite->data[4] = sub_8077ABC(gBattleAnimBankAttacker, 1) + gBattleAnimArgs[3]; - sprite->callback = sub_8078B34; - StoreSpriteCallbackInData(sprite, move_anim_8072740); - sub_80D1BA8(sprite, gBattleAnimArgs[5], gBattleAnimArgs[6]); -} diff --git a/src/anim/note_scatter.c b/src/anim/note_scatter.c deleted file mode 100755 index 9ff49ee9d..000000000 --- a/src/anim/note_scatter.c +++ /dev/null @@ -1,54 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gBattleAnimBankAttacker; -extern u8 gBattleAnimBankTarget; - -static void sub_80CED78(struct Sprite* sprite); - -// note_scatter -// Used by Teeter Dance. - -void sub_80CECE8(struct Sprite* sprite) -{ - int a; - if (GetBankSide(gBattleAnimBankAttacker) == 1) - { - a = gBattleAnimArgs[1]; - (u16)gBattleAnimArgs[1] = -a; - } - - sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 2) + gBattleAnimArgs[1]; - sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 3) + gBattleAnimArgs[2]; - StartSpriteAnim(sprite, gBattleAnimArgs[0]); - sprite->data[2] = 0; - sprite->data[3] = 0; - sprite->data[4] = sprite->pos1.x << 4; - sprite->data[5] = sprite->pos1.y << 4; - sprite->data[6] = (gBattleAnimArgs[1] << 4) / 5; - sprite->data[7] = (gBattleAnimArgs[2] << 7) / 5; - sprite->callback = sub_80CED78; -} - -void sub_80CED78(struct Sprite* sprite) -{ - sprite->data[4] += sprite->data[6]; - sprite->data[5] += sprite->data[7]; - sprite->pos1.x = sprite->data[4] >> 4; - sprite->pos1.y = sprite->data[5] >> 4; - if (sprite->data[0] > 5 && sprite->data[3] == 0) - { - sprite->data[2] = (sprite->data[2] + 16) & 0xFF; - sprite->pos2.x = Cos(sprite->data[2], 18); - sprite->pos2.y = Sin(sprite->data[2], 18); - if (sprite->data[2] == 0) - sprite->data[3] = 1; - } - - if (++sprite->data[0] == 0x30) - move_anim_8074EE0(sprite); -} diff --git a/src/anim/note_scatter_2.c b/src/anim/note_scatter_2.c deleted file mode 100755 index a163aa9a5..000000000 --- a/src/anim/note_scatter_2.c +++ /dev/null @@ -1,57 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gBattleAnimBankAttacker; -extern u8 gBattleAnimBankTarget; - -extern u16 gUnknown_083D712C[4][6]; - -static void sub_80CEEE8(struct Sprite* sprite); - -// note_scatter_2 (slower scatter of notes.) -// Used in Belly Drum. - -void sub_80CEE60(struct Sprite* sprite) -{ - s16 a; - u8 index; - sub_8078650(sprite); - sprite->pos1.y += 8; - StartSpriteAnim(sprite, gBattleAnimArgs[1]); - index = IndexOfSpritePaletteTag(gUnknown_083D712C[gBattleAnimArgs[2]][0]); - if (index != 0xFF) - sprite->oam.paletteNum = index; - - a = (gBattleAnimArgs[0] == 0) ? 0xFFE0 : 0x20; - sprite->data[0] = 40; - sprite->data[1] = sprite->pos1.x; - sprite->data[2] = a + sprite->data[1]; - sprite->data[3] = sprite->pos1.y; - sprite->data[4] = sprite->data[3] - 40; - obj_translate_based_on_private_1_2_3_4(sprite); - sprite->data[5] = gBattleAnimArgs[3]; - sprite->callback = sub_80CEEE8; -} - -void sub_80CEEE8(struct Sprite* sprite) -{ - if (sub_8078B5C(sprite) == 0) - { - s16 a; - a = Sin(sprite->data[5], 8); - if (sprite->pos2.x < 0) - a = -a; - - sprite->pos2.x += a; - sprite->pos2.y += Sin(sprite->data[5], 4); - sprite->data[5] = (sprite->data[5] + 8) & 0xFF; - } - else - { - move_anim_8072740(sprite); - } -} diff --git a/src/anim/note_wave.c b/src/anim/note_wave.c deleted file mode 100755 index 4dc3ceb75..000000000 --- a/src/anim/note_wave.c +++ /dev/null @@ -1,143 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" -#include "palette.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gBattleAnimBankAttacker; -extern u8 gBattleAnimBankTarget; - -extern u16 gUnknown_083D712C[4][6]; - -static void sub_80CEBC4(s16 a, s16 b, s16* c, s16* d, s8 e); -static void sub_80CEC1C(struct Sprite* sprite); - -// note_wave -// Used by Grasswhistle, Belly Drum, and Sing. - -// rainbow effect for musical notes -void sub_80CEA20(u8 taskId) -{ - u16 i; - u16 j; - u16 index; - - index = IndexOfSpritePaletteTag(gUnknown_083D712C[0][0]); - if (index != 0xFF) - { - index = (index << 4) + 0x100; - for (i = 1; i < 6; i++) - { - gPlttBufferFaded[index + i] = gUnknown_083D712C[0][i]; - } - } - - for (j = 1; j < 4; j++) - { - index = AllocSpritePalette(gUnknown_083D712C[j][0]); - if (index != 0xFF) - { - index = (index << 4) + 0x100; - for (i = 1; i < 6; i++) - { - gPlttBufferFaded[index + i] = gUnknown_083D712C[j][i]; - } - } - } - DestroyAnimVisualTask(taskId); -} - -// clears the rainbow effect for musical notes. -void sub_80CEAD8(u8 taskId) -{ - u16 i; - for (i = 1; i < 4; i++) - { - FreeSpritePaletteByTag(gUnknown_083D712C[i][0]); - } - - DestroyAnimVisualTask(taskId); -} - -void sub_80CEB0C(struct Sprite* sprite) -{ - u8 index; - u8 a; - u8 b; - sub_8078650(sprite); - StartSpriteAnim(sprite, gBattleAnimArgs[0]); - if ((index = IndexOfSpritePaletteTag(gUnknown_083D712C[gBattleAnimArgs[1]][0])) != 0xFF) - sprite->oam.paletteNum = index; - - sprite->data[1] = gBattleAnimArgs[1]; - sprite->data[2] = 0; - sprite->data[3] = gBattleAnimArgs[2]; - if (NotInBattle()) - { - a = 0x30; - b = 0x28; - } - else - { - a = sub_8077ABC(gBattleAnimBankTarget, 2); - b = sub_8077ABC(gBattleAnimBankTarget, 3); - } - - sprite->data[4] = sprite->pos1.x << 4; - sprite->data[5] = sprite->pos1.y << 4; - sub_80CEBC4(a - sprite->pos1.x, b - sprite->pos1.y, &sprite->data[6], &sprite->data[7], 0x28); - sprite->callback = sub_80CEC1C; -} - -void sub_80CEBC4(s16 a, s16 b, s16* c, s16* d, s8 e) -{ - int f; - int g; - if (a < 0) - e = -e; - - f = a << 8; - g = f / e; - if (g == 0) - g = 1; - - *c = f / g; - *d = (b << 8) / g; -} - -void sub_80CEC1C(struct Sprite* sprite) -{ - int b; - s16 a; - int c; - u8 index; - sprite->data[0]++; - b = sprite->data[0] * 5 - ((sprite->data[0] * 5 / 256) << 8); - sprite->data[4] += sprite->data[6]; - sprite->data[5] += sprite->data[7]; - sprite->pos1.x = sprite->data[4] >> 4; - sprite->pos1.y = sprite->data[5] >> 4; - sprite->pos2.y = Sin(b, 15); - a = (u16)sprite->pos1.y; - c = (u16)sprite->pos1.x; - - if ((u32)((c + 16) << 16) > (0x110) << 16 || a < -16 || a > 0x80) - { - move_anim_8074EE0(sprite); - } - else - { - if (sprite->data[3] && ++sprite->data[2] > sprite->data[3]) - { - sprite->data[2] = 0; - if (++sprite->data[1] > 3) - sprite->data[1] = 0; - - index = IndexOfSpritePaletteTag(gUnknown_083D712C[sprite->data[1]][0]); - if (index != 0xFF) - sprite->oam.paletteNum = index; - } - } -} diff --git a/src/anim/orbit.c b/src/anim/orbit.c deleted file mode 100755 index 9b77552fa..000000000 --- a/src/anim/orbit.c +++ /dev/null @@ -1,147 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gBattleAnimBankAttacker; -extern u8 gBattleAnimBankTarget; - -static void sub_80CAC44(struct Sprite* sprite); -static void sub_80CADA8(struct Sprite* sprite); -static void sub_80CAE74(struct Sprite* sprite); - -// orbit (The effect of a sprite rotating around another one in a pseudo 3D effect.) -// Used by Spore, Cotton Spore, and Petal Dance. - -void sub_80CABF8(struct Sprite* sprite) -{ - sub_8078764(sprite, 1); - StartSpriteAnim(sprite, gBattleAnimArgs[4]); - if (gBattleAnimArgs[4] == 1) - { - sprite->oam.objMode = 1; - } - - sprite->data[0] = gBattleAnimArgs[3]; - sprite->data[1] = gBattleAnimArgs[2]; - sprite->callback = sub_80CAC44; - sub_80CAC44(sprite); -} - -void sub_80CAC44(struct Sprite* sprite) -{ - u8 var1; - - sprite->pos2.x = Sin(sprite->data[1], 32); - sprite->pos2.y = Cos(sprite->data[1], -3) + ((sprite->data[2] += 24) >> 8); - if ((u16)(sprite->data[1] - 0x40) < 0x80) - { - sprite->oam.priority = (sub_8079ED4(gBattleAnimBankTarget) & 3); - } - else - { - var1 = sub_8079ED4(gBattleAnimBankTarget) + 1; - if (var1 > 3) - { - var1 = 3; - } - - sprite->oam.priority = var1; - } - - sprite->data[1] = (sprite->data[1] + 2) & 0xFF; - sprite->data[0]--; - if (sprite->data[0] == -1) - move_anim_8072740(sprite); -} - -void sub_80CACEC(u8 taskId) -{ - if (NotInBattle() || !IsDoubleBattle()) - { - DestroyAnimVisualTask(taskId); - } - else - { - if (GetBankIdentity_permutated(gBattleAnimBankTarget) == 1) - { - REG_BG2CNT_BITFIELD.priority = 3; - } - else - { - REG_BG1CNT_BITFIELD.priority = 1; - } - - DestroyAnimVisualTask(taskId); - } -} - -void sub_80CAD54(struct Sprite* sprite) -{ - sub_80787B0(sprite, 0); - sprite->data[0] = gBattleAnimArgs[3]; - sprite->data[1] = sprite->pos1.x; - sprite->data[2] = sprite->pos1.x; - sprite->data[3] = sprite->pos1.y; - sprite->data[4] = sub_8077ABC(gBattleAnimBankAttacker, 3) + gBattleAnimArgs[2]; - obj_translate_based_on_private_1_2_3_4(sprite); - sprite->data[5] = 0x40; - sprite->callback = sub_80CADA8; - sub_80CADA8(sprite); -} - -void sub_80CADA8(struct Sprite* sprite) -{ - if (!sub_8078B5C(sprite)) - { - sprite->pos2.x += Sin(sprite->data[5], 32); - sprite->pos2.y += Cos(sprite->data[5], -5); - if ((u16)(sprite->data[5] - 0x40) < 0x80) - { - sprite->subpriority = sub_8079E90(gBattleAnimBankAttacker) - 1; - } - else - { - sprite->subpriority = sub_8079E90(gBattleAnimBankAttacker) + 1; - } - - sprite->data[5] = (sprite->data[5] + 5) & 0xFF; - } - else - { - move_anim_8072740(sprite); - } -} - -void sub_80CAE20(struct Sprite* sprite) -{ - sub_80787B0(sprite, 1); - sprite->data[0] = gBattleAnimArgs[3]; - sprite->data[1] = sprite->pos1.x; - sprite->data[2] = sprite->pos1.x; - sprite->data[3] = sprite->pos1.y; - sprite->data[4] = sub_8077ABC(gBattleAnimBankAttacker, 3) + gBattleAnimArgs[2]; - obj_translate_based_on_private_1_2_3_4(sprite); - sprite->data[5] = 0x40; - sprite->callback = sub_80CAE74; - sub_80CAE74(sprite); -} - -void sub_80CAE74(struct Sprite* sprite) -{ - if (!sub_8078B5C(sprite)) - { - sprite->pos2.x += Sin(sprite->data[5], 8); - if ((u16)(sprite->data[5] - 0x3B) < 5 || (u16)(sprite->data[5] - 0xBB) < 5) - { - sprite->oam.matrixNum ^= 8; - } - - sprite->data[5] = (sprite->data[5] + 5) & 0xFF; - } - else - { - move_anim_8072740(sprite); - } -} diff --git a/src/anim/orbit_fast.c b/src/anim/orbit_fast.c deleted file mode 100755 index 30396f398..000000000 --- a/src/anim/orbit_fast.c +++ /dev/null @@ -1,62 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gBattleAnimBankAttacker; -extern u8 gBattleAnimBankTarget; - -static void sub_80D2704(struct Sprite* sprite); - -// orbit_fast (a quickly moving fast circular motion of a sprite around an object.) -// Used by Hidden Power. - -void sub_80D26A4(struct Sprite* sprite) -{ - sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 2); - sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 3); - sprite->affineAnimPaused = 1; - sprite->data[0] = gBattleAnimArgs[0]; - sprite->data[1] = gBattleAnimArgs[1]; - sprite->data[7] = sub_8079E90(gBattleAnimBankAttacker); - sprite->callback = sub_80D2704; - sub_80D2704(sprite); -} - -void sub_80D2704(struct Sprite* sprite) -{ - if ((u16)(sprite->data[1] - 0x40) <= 0x7F) - sprite->subpriority = sprite->data[7] + 1; - else - sprite->subpriority = sprite->data[7] - 1; - - sprite->pos2.x = Sin(sprite->data[1], sprite->data[2] >> 8); - sprite->pos2.y = Cos(sprite->data[1], sprite->data[3] >> 8); - sprite->data[1] = (sprite->data[1] + 9) & 0xFF; - switch (sprite->data[5]) - { - case 1: - sprite->data[2] -= 0x400; - sprite->data[3] -= 0x100; - if (++sprite->data[4] == sprite->data[0]) - { - sprite->data[5] = 2; - return; - } - break; - case 0: - sprite->data[2] += 0x400; - sprite->data[3] += 0x100; - if (++sprite->data[4] == sprite->data[0]) - { - sprite->data[4] = 0; - sprite->data[5] = 1; - } - break; - } - - if ((u16)gBattleAnimArgs[7] == 0xFFFF) - move_anim_8072740(sprite); -} diff --git a/src/anim/orbit_scatter.c b/src/anim/orbit_scatter.c deleted file mode 100755 index 6cebc9375..000000000 --- a/src/anim/orbit_scatter.c +++ /dev/null @@ -1,31 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gBattleAnimBankAttacker; -extern u8 gBattleAnimBankTarget; - -static void sub_80D2834(struct Sprite* sprite); - -// orbit_scatter (scatters the objects associated with the fast orbit from the last file.) -// Used in Hidden Power. - -void sub_80D27E0(struct Sprite* sprite) -{ - sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 2); - sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 3); - sprite->data[0] = Sin(gBattleAnimArgs[0], 10); - sprite->data[1] = Cos(gBattleAnimArgs[0], 7); - sprite->callback = sub_80D2834; -} - -void sub_80D2834(struct Sprite* sprite) -{ - sprite->pos2.x += sprite->data[0]; - sprite->pos2.y += sprite->data[1]; - if (sprite->pos1.x + sprite->pos2.x + 16 > 0x110u || sprite->pos1.y + sprite->pos2.y > 0xA0 || sprite->pos1.y + sprite->pos2.y < -16) - move_anim_8072740(sprite); -} diff --git a/src/anim/orbs.c b/src/anim/orbs.c deleted file mode 100755 index 22e7d3895..000000000 --- a/src/anim/orbs.c +++ /dev/null @@ -1,162 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "random.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gBattleAnimBankAttacker; -extern u8 gBattleAnimBankTarget; - -static void sub_80CA8B4(struct Sprite* sprite); -static void sub_80CA9F8(struct Sprite* sprite); -static void sub_80CAACC(struct Sprite* sprite); - -extern struct SpriteTemplate gSpriteTemplate_83D631C; - -// orbs -// Used by Solar Beam, Absorb, Hyper Beam, and Leech Seed. - -void sub_80CA7B0(struct Sprite* sprite) -{ - sub_80787B0(sprite, 1); - sprite->data[0] = gBattleAnimArgs[2]; - sprite->data[2] = sub_8077ABC(gBattleAnimBankAttacker, 2); - sprite->data[4] = sub_8077ABC(gBattleAnimBankAttacker, 3); - sprite->callback = sub_8078B34; - StoreSpriteCallbackInData(sprite, move_anim_8074EE0); -} - -void sub_80CA800(struct Sprite* sprite) -{ - sub_80787B0(sprite, 1); - StartSpriteAnim(sprite, gBattleAnimArgs[3]); - sprite->data[0] = gBattleAnimArgs[2]; - sprite->data[2] = sub_8077ABC(gBattleAnimBankTarget, 2); - sprite->data[4] = sub_8077ABC(gBattleAnimBankTarget, 3); - sprite->callback = sub_8078B34; - StoreSpriteCallbackInData(sprite, move_anim_8072740); -} - -void sub_80CA858(struct Sprite* sprite) -{ - sub_80787B0(sprite, 1); - sprite->data[0] = gBattleAnimArgs[2]; - sprite->data[1] = sprite->pos1.x; - sprite->data[2] = sub_8077ABC(gBattleAnimBankTarget, 2); - sprite->data[3] = sprite->pos1.y; - sprite->data[4] = sub_8077ABC(gBattleAnimBankTarget, 3); - obj_translate_based_on_private_1_2_3_4(sprite); - sprite->data[5] = gBattleAnimArgs[3]; - sprite->callback = sub_80CA8B4; - sub_80CA8B4(sprite); -} - -void sub_80CA8B4(struct Sprite* sprite) -{ - if (sub_8078B5C(sprite)) - { - DestroySprite(sprite); - } - else - { - if (sprite->data[5] > 0x7F) - { - sprite->subpriority = sub_8079E90(gBattleAnimBankTarget) + 1; - } - else - { - sprite->subpriority = sub_8079E90(gBattleAnimBankTarget) + 6; - } - sprite->pos2.x += Sin(sprite->data[5], 5); - sprite->pos2.y += Cos(sprite->data[5], 14); - sprite->data[5] = (sprite->data[5] + 15) & 0xFF; - } -} - -void sub_80CA928(u8 taskId) -{ - gTasks[taskId].data[0]--; - if (gTasks[taskId].data[0] == -1) - { - gTasks[taskId].data[1]++; - gTasks[taskId].data[0] = 6; - gBattleAnimArgs[0] = 15; - gBattleAnimArgs[1] = 0; - gBattleAnimArgs[2] = 80; - gBattleAnimArgs[3] = 0; - CreateSpriteAndAnimate(&gSpriteTemplate_83D631C, 0, 0, sub_8079E90(gBattleAnimBankTarget) + 1); - } - - if (gTasks[taskId].data[1] == 15) - DestroyAnimVisualTask(taskId); -} - -void sub_80CA9A8(struct Sprite* sprite) -{ - sub_8078764(sprite, 1); - sprite->data[0] = gBattleAnimArgs[3]; - sprite->data[2] = sub_8077ABC(gBattleAnimBankAttacker, 2); - sprite->data[4] = sub_8077ABC(gBattleAnimBankAttacker, 3); - sprite->data[5] = gBattleAnimArgs[2]; - sub_80786EC(sprite); - sprite->callback = sub_80CA9F8; -} - -void sub_80CA9F8(struct Sprite* sprite) -{ - if (sub_8078718(sprite)) - move_anim_8072740(sprite); -} - -void sub_80CAA14(struct Sprite* sprite) -{ - u16 a = Random(); - u16 b; - - StartSpriteAnim(sprite, a & 7); - sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 2); - sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 3); - if (GetBankSide(gBattleAnimBankAttacker)) - { - sprite->pos1.x -= 20; - } - else - { - sprite->pos1.x += 20; - } - - b = Random(); - sprite->data[0] = (b & 31) + 64; - sprite->data[1] = sprite->pos1.x; - sprite->data[2] = sub_8077ABC(gBattleAnimBankTarget, 2); - sprite->data[3] = sprite->pos1.y; - sprite->data[4] = sub_8077ABC(gBattleAnimBankTarget, 3); - sub_8078D60(sprite); - sprite->data[5] = Random() & 0xFF; - sprite->data[6] = sprite->subpriority; - sprite->callback = sub_80CAACC; - sub_80CAACC(sprite); -} - -void sub_80CAACC(struct Sprite* sprite) -{ - if (sub_8078CE8(sprite)) - { - move_anim_8072740(sprite); - } - else - { - sprite->pos2.y += Cos(sprite->data[5], 12); - if (sprite->data[5] <= 0x7E) - { - sprite->subpriority = sprite->data[6]; - } - else - { - sprite->subpriority = sprite->data[6] + 1; - } - - sprite->data[5] = (sprite->data[5] + 24) & 0xFF; - } -} diff --git a/src/anim/osmose.c b/src/anim/osmose.c deleted file mode 100755 index f1f1b25ff..000000000 --- a/src/anim/osmose.c +++ /dev/null @@ -1,29 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gBattleAnimBankAttacker; -extern u8 gBattleAnimBankTarget; - -// osmose (I didn't want to use "absorb" as thats confusing) -// Used by Ingrain. - -void sub_80CB768(struct Sprite* sprite) -{ - if (!sprite->data[0]) - { - sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 2) + gBattleAnimArgs[0]; - sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 1) + gBattleAnimArgs[1]; - sprite->data[1] = gBattleAnimArgs[2]; - sprite->data[2] = gBattleAnimArgs[3]; - sprite->data[3] = gBattleAnimArgs[4]; - } - - sprite->data[0]++; - sprite->pos2.x = sprite->data[1] * sprite->data[0]; - sprite->pos2.y = Sin((sprite->data[0] * 20) & 0xFF, sprite->data[2]); - if (sprite->data[0] > sprite->data[3]) - move_anim_8072740(sprite); -} diff --git a/src/anim/perceive.c b/src/anim/perceive.c deleted file mode 100755 index 27afcbc0c..000000000 --- a/src/anim/perceive.c +++ /dev/null @@ -1,24 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gBattleAnimBankAttacker; -extern u8 gBattleAnimBankTarget; - -// perceive (shows a sparkle in a set of eyes, usually for heightened perception.) -// Used in Glare, Tickle, and Scary Face. - -void sub_80D2904(struct Sprite* sprite) -{ - if (sprite->animEnded) - move_anim_8072740(sprite); -} - -void sub_80D2920(struct Sprite* sprite) -{ - sub_80787B0(sprite, 1); - sprite->callback = sub_80D2904; -} diff --git a/src/anim/powder.c b/src/anim/powder.c deleted file mode 100755 index 178a61737..000000000 --- a/src/anim/powder.c +++ /dev/null @@ -1,48 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gBattleAnimBankAttacker; - -static void sub_80CA768(struct Sprite* sprite); - -// powder -// Used by Sleep Powder, Stun Spore, and Poison Powder. - -void sub_80CA710(struct Sprite* sprite) -{ - sprite->pos1.x += gBattleAnimArgs[0]; - sprite->pos1.y += gBattleAnimArgs[1]; - sprite->data[0] = gBattleAnimArgs[2]; - sprite->data[1] = gBattleAnimArgs[3]; - - if (GetBankSide(gBattleAnimBankAttacker)) - { - sprite->data[3] = -gBattleAnimArgs[4]; - } - else - { - sprite->data[3] = gBattleAnimArgs[4]; - } - - sprite->data[4] = gBattleAnimArgs[5]; - sprite->callback = sub_80CA768; -} - -void sub_80CA768(struct Sprite* sprite) -{ - if (sprite->data[0] > 0) - { - sprite->data[0]--; - sprite->pos2.y = sprite->data[2] >> 8; - sprite->data[2] += sprite->data[1]; - sprite->pos2.x = Sin(sprite->data[5], sprite->data[3]); - sprite->data[5] = (sprite->data[5] + sprite->data[4]) & 0xFF; - } - else - { - move_anim_8072740(sprite); - } -} diff --git a/src/anim/ring.c b/src/anim/ring.c deleted file mode 100755 index 0a5816b23..000000000 --- a/src/anim/ring.c +++ /dev/null @@ -1,156 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" -#include "main.h" -#include "blend_palette.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gBattleAnimBankAttacker; -extern u8 gBattleAnimBankTarget; - -extern u8 gObjectBankIDs[]; - -static void sub_80D1098(struct Sprite* sprite); - -// ring (a ring that stretches outward from the Pokemon.) -// Used in Aromatherapy and Heal Bell. - -void sub_80D0FD8(struct Sprite* sprite) -{ - u8 bank = 0; - u16 sp0 = 0; - u16 sp1 = 0; - u8 r4; - - if (gBattleAnimArgs[2] == 0) - bank = gBattleAnimBankAttacker; - else - bank = gBattleAnimBankTarget; - - r4 = gBattleAnimArgs[3] ^ 1; - if (IsDoubleBattle() && IsAnimBankSpriteVisible(bank ^ 2)) - { - sub_807A3FC(bank, r4, &sp0, &sp1); - if (r4 == 0) - r4 = sub_8077ABC(bank, 0); - else - r4 = sub_8077ABC(bank, 2); - - if (GetBankSide(bank) != 0) - gBattleAnimArgs[0] -= (sp0 - r4) - gBattleAnimArgs[0]; // This is weird. - else - gBattleAnimArgs[0] = sp0 - r4; - } - - sprite->callback = sub_80793C4; - sub_80793C4(sprite); -} - -void sub_80D1098(struct Sprite* sprite) -{ - if (sub_8078B5C(sprite)) - { - FreeSpriteOamMatrix(sprite); - move_anim_8072740(sprite); - } -} - -void sub_80D10B8(struct Sprite* sprite) -{ - u16 r9 = 0; - u16 r6 = 0; - s16 sp0 = 0; - s16 sp1 = 0; - u8 sp4; - u8 bankr7; - u8 bankr8; - u8 r10; - - if (gBattleAnimArgs[5] == 0) - { - bankr7 = gBattleAnimBankAttacker; - bankr8 = gBattleAnimBankTarget; - } - else - { - bankr7 = gBattleAnimBankTarget; - bankr8 = gBattleAnimBankAttacker; - } - - if (gBattleAnimArgs[6] == 0) - { - r10 = 0; - sp4 = 1; - } - else - { - r10 = 2; - sp4 = 3; - } - - if (GetBankSide(bankr7) != 0) - { - r9 = sub_8077ABC(bankr7, r10) + gBattleAnimArgs[0]; - if (IsAnimBankSpriteVisible(bankr8 ^ 2)) - sprite->subpriority = gSprites[gObjectBankIDs[bankr8 ^ 2]].subpriority - 1; - else - sprite->subpriority = gSprites[gObjectBankIDs[bankr8]].subpriority - 1; - } - else - { - r9 = sub_8077ABC(bankr7, r10) - gBattleAnimArgs[0]; - if (gMain.inBattle && IsAnimBankSpriteVisible(bankr7 ^ 2)) - { - if (gSprites[gObjectBankIDs[bankr7]].pos1.x < gSprites[gObjectBankIDs[bankr7 ^ 2]].pos1.x) - sprite->subpriority = gSprites[gObjectBankIDs[bankr7 ^ 2]].subpriority + 1; - else - sprite->subpriority = gSprites[gObjectBankIDs[bankr7]].subpriority - 1; - } - else - { - sprite->subpriority = gSprites[gObjectBankIDs[bankr7]].subpriority - 1; - } - - } - - r6 = sub_8077ABC(bankr7, sp4) + gBattleAnimArgs[1]; - if (gMain.inBattle && IsAnimBankSpriteVisible(bankr8 ^ 2)) - { - sub_807A3FC(bankr8, gBattleAnimArgs[6], &sp0, &sp1); - } - else - { - sp0 = sub_8077ABC(bankr8, r10); - sp1 = sub_8077ABC(bankr8, sp4); - } - - if (GetBankSide(bankr8)) - sp0 += gBattleAnimArgs[3]; - else - sp0 -= gBattleAnimArgs[3]; - - sp1 += gBattleAnimArgs[4]; - sprite->pos1.x = sprite->data[1] = r9; - sprite->pos1.y = sprite->data[3] = r6; - sprite->data[2] = sp0; - sprite->data[4] = sp1; - sprite->data[0] = gBattleAnimArgs[0]; - obj_translate_based_on_private_1_2_3_4(sprite); - sprite->callback = sub_80D1098; - sub_80D1098(sprite); -} - -void sub_80D1318(struct Sprite* sprite) -{ - u8 index = IndexOfSpritePaletteTag(0x27DB); - if (index != 0xFF) - { - BlendPalette(((index << 20) + 0x1010000) >> 16, 15, gBattleAnimArgs[5], gBattleAnimArgs[4]); - } - - StartSpriteAffineAnim(sprite, 1); - sprite->callback = sub_80793C4; - sub_80793C4(sprite); -} diff --git a/src/anim/roots.c b/src/anim/roots.c deleted file mode 100755 index 40c51808a..000000000 --- a/src/anim/roots.c +++ /dev/null @@ -1,67 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gBattleAnimBankAttacker; -extern u8 gBattleAnimBankTarget; - -extern s16 gUnknown_03000728[]; - -static void sub_80CB710(struct Sprite* sprite); - -// roots -// Used by Ingrain and Frenzy Plant. - -void sub_80CB59C(struct Sprite* sprite) -{ - if (!sprite->data[0]) - { - sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 2); - sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 1); - sprite->pos2.x = gBattleAnimArgs[0]; - sprite->pos2.y = gBattleAnimArgs[1]; - sprite->subpriority = gBattleAnimArgs[2] + 30; - StartSpriteAnim(sprite, gBattleAnimArgs[3]); - sprite->data[2] = gBattleAnimArgs[4]; - sprite->data[0]++; - if ((sprite->pos1.y + sprite->pos2.y) > 120) - { - sprite->pos1.y += -120 + (sprite->pos2.y + sprite->pos1.y); - } - } - sprite->callback = sub_80CB710; -} - -void sub_80CB620(struct Sprite *sprite) -{ - s16 p1 = sub_8077ABC(gBattleAnimBankAttacker, 2); - s16 p2 = sub_8077ABC(gBattleAnimBankAttacker, 3); - s16 e1 = sub_8077ABC(gBattleAnimBankTarget, 2); - s16 e2 = sub_8077ABC(gBattleAnimBankTarget, 3); - - e1 -= p1; - e2 -= p2; - sprite->pos1.x = p1 + e1 * gBattleAnimArgs[0] / 100; - sprite->pos1.y = p2 + e2 * gBattleAnimArgs[0] / 100; - sprite->pos2.x = gBattleAnimArgs[1]; - sprite->pos2.y = gBattleAnimArgs[2]; - sprite->subpriority = gBattleAnimArgs[3] + 30; - StartSpriteAnim(sprite, gBattleAnimArgs[4]); - sprite->data[2] = gBattleAnimArgs[5]; - sprite->callback = sub_80CB710; - gUnknown_03000728[0] = sprite->pos1.x; - gUnknown_03000728[1] = sprite->pos1.y; - gUnknown_03000728[2] = e1; - gUnknown_03000728[3] = e2; -} - -void sub_80CB710(struct Sprite* sprite) -{ - if (++sprite->data[0] > (sprite->data[2] - 10)) - sprite->invisible = sprite->data[0] % 2; - - if (sprite->data[0] > sprite->data[2]) - move_anim_8072740(sprite); -} diff --git a/src/anim/scan.c b/src/anim/scan.c deleted file mode 100755 index 5573758c3..000000000 --- a/src/anim/scan.c +++ /dev/null @@ -1,200 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" -#include "palette.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gBattleAnimBankAttacker; -extern u8 gBattleAnimBankTarget; - -extern s8 gUnknown_083D6DDC[4][2]; - -static void sub_80CD408(struct Sprite* sprite); -static void sub_80CD4B8(struct Sprite* sprite); -static void sub_80CD4EC(struct Sprite* sprite); -static void sub_80CD5A8(struct Sprite* sprite); -static void sub_80CD654(struct Sprite* sprite); -static void sub_80CD67C(struct Sprite* sprite); - -// scan -// Used by Lock-On. - -void sub_80CD3E0(struct Sprite* sprite) -{ - sprite->pos1.x -= 32; - sprite->pos1.y -= 32; - sprite->data[0] = 20; - sprite->callback = sub_80782D8; - StoreSpriteCallbackInData(sprite, sub_80CD408); -} - -void sub_80CD408(struct Sprite* sprite) -{ - switch (sprite->data[5] & 1) - { - case 0: - sprite->data[0] = 1; - sprite->callback = sub_80782D8; - StoreSpriteCallbackInData(sprite, sub_80CD408); - break; - case 1: - sprite->pos1.x += sprite->pos2.x; - sprite->pos1.y += sprite->pos2.y; - sprite->pos2.y = 0; - sprite->pos2.x = 0; - sprite->data[0] = 8; - sprite->data[2] = sprite->pos1.x + gUnknown_083D6DDC[sprite->data[5] >> 8][0]; - sprite->data[4] = sprite->pos1.y + gUnknown_083D6DDC[sprite->data[5] >> 8][1]; - sprite->callback = sub_8078B34; - StoreSpriteCallbackInData(sprite, sub_80CD4B8); - sprite->data[5] += 0x100; - PlaySE12WithPanning(0xD2, sub_8076F98(0x3F)); - break; - } - - sprite->data[5] ^= 1; -} - -void sub_80CD4B8(struct Sprite* sprite) -{ - if ((sprite->data[5] >> 8) == 4) - { - sprite->data[0] = 10; - sprite->callback = sub_80782D8; - StoreSpriteCallbackInData(sprite, sub_80CD4EC); - } - else - { - sprite->callback = sub_80CD408; - } -} - -void sub_80CD4EC(struct Sprite* sprite) -{ - s16 a; - s16 b; - if (sprite->oam.affineParam == 0) - { - sprite->data[0] = 3; - sprite->data[1] = 0; - sprite->data[2] = 0; - sprite->callback = sub_80782D8; - StoreSpriteCallbackInData(sprite, sub_80CD5A8); - } - else - { - switch (sprite->oam.affineParam) - { - case 1: - a = -8; - b = -8; - break; - case 2: - a = -8; - b = 8; - break; - case 3: - a = 8; - b = -8; - break; - default: - a = 8; - b = 8; - break; - } - - sprite->pos1.x += sprite->pos2.x; - sprite->pos1.y += sprite->pos2.y; - sprite->pos2.y = 0; - sprite->pos2.x = 0; - sprite->data[0] = 6; - sprite->data[2] = sub_8077ABC(gBattleAnimBankTarget, 2) + a; - sprite->data[4] = sub_8077ABC(gBattleAnimBankTarget, 3) + b; - sprite->callback = sub_8078B34; - StoreSpriteCallbackInData(sprite, sub_80CD654); - } -} - -void sub_80CD5A8(struct Sprite* sprite) -{ - if (sprite->data[2] == 0) - { - if ((sprite->data[1] += 3) > 16) - sprite->data[1] = 16; - } - else if ((sprite->data[1] -= 3) < 0) - { - sprite->data[1] = 0; - } - - BlendPalettes(sub_80791A8(1, 1, 1, 1, 1, 0, 0), sprite->data[1], 0x7FFF); - if (sprite->data[1] == 16) - { - int pal; - sprite->data[2]++; - pal = sprite->oam.paletteNum; - LoadPalette(&gPlttBufferUnfaded[0x108 + pal * 16], pal * 16 | 0x101, 4); - PlaySE12WithPanning(0xC0, sub_8076F98(0x3F)); - } - else if (sprite->data[1] == 0) - { - sprite->callback = sub_80CD654; - } -} - -void sub_80CD654(struct Sprite* sprite) -{ - if ((u16)gBattleAnimArgs[7] == 0xFFFF) - { - sprite->data[1] = 0; - sprite->data[0] = 0; - sprite->callback = sub_80CD67C; - } -} - -void sub_80CD67C(struct Sprite* sprite) -{ - if (sprite->data[0] % 3 == 0) - { - sprite->data[1]++; - sprite->invisible ^= 1; - } - - sprite->data[0]++; - if (sprite->data[1] == 8) - move_anim_8072740(sprite); -} - -void sub_80CD6CC(struct Sprite* sprite) -{ - sprite->oam.affineParam = gBattleAnimArgs[0]; - if ((s16)sprite->oam.affineParam == 1) - { - sprite->pos1.x -= 0x18; - sprite->pos1.y -= 0x18; - } - else if ((s16)sprite->oam.affineParam == 2) - { - sprite->pos1.x -= 0x18; - sprite->pos1.y += 0x18; - sprite->oam.matrixNum = 16; - } - else if ((s16)sprite->oam.affineParam == 3) - { - sprite->pos1.x += 0x18; - sprite->pos1.y -= 0x18; - sprite->oam.matrixNum = 8; - } - else - { - sprite->pos1.x += 0x18; - sprite->pos1.y += 0x18; - sprite->oam.matrixNum = 24; - } - - sprite->oam.tileNum = (sprite->oam.tileNum + 16); - sprite->callback = sub_80CD3E0; - sub_80CD3E0(sprite); -} diff --git a/src/anim/scary_face.c b/src/anim/scary_face.c deleted file mode 100755 index 9f1dfd7d0..000000000 --- a/src/anim/scary_face.c +++ /dev/null @@ -1,136 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" -#include "decompress.h" -#include "palette.h" - -struct Struct_sub_8078914 -{ - u8 *field_0; - u8 *field_4; - u8 field_8; -}; - -extern s16 gBattleAnimArgs[]; -extern u8 gBattleAnimBankAttacker; -extern u8 gBattleAnimBankTarget; - -extern struct INCBIN_U8 gBattleAnimBackgroundTilemap_ScaryFaceContest; -extern struct INCBIN_U8 gBattleAnimBackgroundTilemap_ScaryFacePlayer; -extern struct INCBIN_U8 gBattleAnimBackgroundTilemap_ScaryFaceOpponent; -extern struct INCBIN_U8 gBattleAnimBackgroundImage_ScaryFace; -extern struct INCBIN_U8 gBattleAnimBackgroundPalette_ScaryFace; - -extern u16 gUnknown_030041B4; -extern u16 gUnknown_030042C0; - -static void sub_80D24E0(u8 taskId); - -// scary_face (darkens the screen and shows a scary face.) -// Used in Glare and Scary Face. - -void sub_80D23B4(u8 taskId) -{ - struct Struct_sub_8078914 subStruct; - u8* tempvar; - REG_BLDCNT = 0x3F42; - REG_BLDALPHA = 0x1000; - REG_BG1CNT_BITFIELD.priority = 1; - REG_BG1CNT_BITFIELD.screenSize = 0; - if (!NotInBattle()) - REG_BG1CNT_BITFIELD.charBaseBlock = 1; - - gUnknown_030042C0 = 0; - gUnknown_030041B4 = 0; - REG_BG1HOFS = 0; - REG_BG1VOFS = 0; - sub_8078914(&subStruct); - tempvar = subStruct.field_4; - DmaFill32(3, 0x0, tempvar, 0x1000); - if (NotInBattle()) - LZDecompressVram(&gBattleAnimBackgroundTilemap_ScaryFaceContest, subStruct.field_4); - else if (GetBankSide(gBattleAnimBankTarget) == 1) - LZDecompressVram(&gBattleAnimBackgroundTilemap_ScaryFacePlayer, subStruct.field_4); - else - LZDecompressVram(&gBattleAnimBackgroundTilemap_ScaryFaceOpponent, subStruct.field_4); - - LZDecompressVram(&gBattleAnimBackgroundImage_ScaryFace, subStruct.field_0); - LoadCompressedPalette(&gBattleAnimBackgroundPalette_ScaryFace, subStruct.field_8 << 4, 32); - if (NotInBattle()) - sub_80763FC(subStruct.field_8, (u16 *)subStruct.field_4, 0, 0); - - gTasks[taskId].func = sub_80D24E0; -} - -void sub_80D24E0(u8 taskId) -{ - struct Struct_sub_8078914 subStruct; - - switch (gTasks[taskId].data[12]) - { - case 0: - if (++gTasks[taskId].data[10] == 2) - { - gTasks[taskId].data[10] = 0; - gTasks[taskId].data[11]++; - REG_BLDALPHA = gTasks[taskId].data[11] | ((16 - gTasks[taskId].data[11]) << 8); - if (gTasks[taskId].data[11] == 14) - { - gTasks[taskId].data[12]++; - gTasks[taskId].data[11] = 0; - } - } - break; - case 1: - if (++gTasks[taskId].data[11] == 0x15) - { - gTasks[taskId].data[11] = 14; - gTasks[taskId].data[12]++; - } - break; - case 2: - if (++gTasks[taskId].data[10] == 2) - { - gTasks[taskId].data[10] = 0; - gTasks[taskId].data[11]--; - REG_BLDALPHA = gTasks[taskId].data[11] | ((16 - gTasks[taskId].data[11]) << 8); - if (gTasks[taskId].data[11] == 0) - { - gTasks[taskId].data[12]++; - gTasks[taskId].data[11] = 0; - } - } - break; - case 3: - sub_8078914(&subStruct); - { - u8 *addr = subStruct.field_0; - u32 size = 0x2000; - while (1) - { - DmaFill32(3, 0, addr, 0x1000); - addr += 0x1000; - size -= 0x1000; - if (size <= 0x1000) - { - DmaFill32(3, 0, addr, size); - break; - } - } - } - DmaClear32(3, subStruct.field_4, 0x800); - if (!NotInBattle()) - REG_BG1CNT_BITFIELD.charBaseBlock = 0; - - gTasks[taskId].data[12]++; - // fall through - case 4: - REG_BLDCNT = 0; - REG_BLDALPHA = 0; - REG_BG1CNT_BITFIELD.priority = 1; - DestroyAnimVisualTask(taskId); - break; - } -} diff --git a/src/anim/seed.c b/src/anim/seed.c deleted file mode 100755 index bd072849a..000000000 --- a/src/anim/seed.c +++ /dev/null @@ -1,50 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gBattleAnimBankAttacker; -extern u8 gBattleAnimBankTarget; - -static void sub_80CAB88(struct Sprite* sprite); -static void sub_80CABC0(struct Sprite* sprite); - -// seed (sprouts a sapling from a seed.) -// Used by Leech Seed. - -void sub_80CAB18(struct Sprite* sprite) -{ - sub_80787B0(sprite, 1); - if (GetBankSide(gBattleAnimBankAttacker)) - { - gBattleAnimArgs[2] = -gBattleAnimArgs[2]; - } - - sprite->data[0] = gBattleAnimArgs[4]; - sprite->data[2] = sub_8077ABC(gBattleAnimBankTarget, 0) + gBattleAnimArgs[2]; - sprite->data[4] = sub_8077ABC(gBattleAnimBankTarget, 1) + gBattleAnimArgs[3]; - sprite->data[5] = gBattleAnimArgs[5]; - sub_80786EC(sprite); - sprite->callback = sub_80CAB88; -} - -void sub_80CAB88(struct Sprite* sprite) -{ - if (sub_8078718(sprite)) - { - sprite->invisible = 1; - sprite->data[0] = 10; - sprite->callback = sub_80782D8; - StoreSpriteCallbackInData(sprite, sub_80CABC0); - } -} - -void sub_80CABC0(struct Sprite* sprite) -{ - sprite->invisible = 0; - StartSpriteAnim(sprite, 1); - sprite->data[0] = 60; - sprite->callback = sub_80782D8; - StoreSpriteCallbackInData(sprite, move_anim_8072740); -} diff --git a/src/anim/shadow_enlarge.c b/src/anim/shadow_enlarge.c deleted file mode 100755 index bed6c7ea3..000000000 --- a/src/anim/shadow_enlarge.c +++ /dev/null @@ -1,35 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gBattleAnimBankAttacker; -extern u8 gBattleAnimBankTarget; - -static void sub_80D0428(u8 taskId); - -// shadow_enlarge (the magnifying-like shadow over the Pokemon effect) -// Used in Disable. - -void sub_80D03C4(u8 taskId) -{ - u8 spriteId = GetAnimBankSpriteId(1); - sub_8078E70(spriteId, 1); - obj_id_set_rotscale(spriteId, 0xD0, 0xD0, 0); - sub_8079108(gSprites[spriteId].oam.paletteNum + 16, 0); - gTasks[taskId].data[0] = 0x50; - gTasks[taskId].func = sub_80D0428; -} - -void sub_80D0428(u8 taskId) -{ - if (--gTasks[taskId].data[0] == -1) - { - u8 spriteId = GetAnimBankSpriteId(1); - sub_8078F40(spriteId); - sub_8079108(gSprites[spriteId].oam.paletteNum + 16, 1); - DestroyAnimVisualTask(taskId); - } -} diff --git a/src/anim/shadow_minimize.c b/src/anim/shadow_minimize.c deleted file mode 100755 index 22ebeab7a..000000000 --- a/src/anim/shadow_minimize.c +++ /dev/null @@ -1,262 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gBattleAnimBankAttacker; -extern u8 gBattleAnimBankTarget; - -static void sub_80D04E0(u8 taskId); -void sub_80D0614(struct Task* task, u8 taskId); -void sub_80D0704(struct Sprite* sprite); - -// shadow_minimize (the minimizing-like shadow over the Pokemon effect.) -// Used in Minimize. - -void sub_80D0488(u8 taskId) -{ - struct Task* task = &gTasks[taskId]; - u8 spriteId = GetAnimBankSpriteId(0); - task->data[0] = spriteId; - sub_8078E70(spriteId, 0); - task->data[1] = 0; - task->data[2] = 0; - task->data[3] = 0; - task->data[4] = 0x100; - task->data[5] = 0; - task->data[6] = 0; - task->data[7] = sub_8079E90(gBattleAnimBankAttacker); - task->func = sub_80D04E0; -} - -void sub_80D04E0(u8 taskId) -{ - struct Task* task = &gTasks[taskId]; - switch (task->data[1]) - { - case 0: - if (task->data[2] == 0 || task->data[2] == 3 || task->data[2] == 6) - sub_80D0614(task, taskId); - task->data[2]++; - task->data[4] += 0x28; - obj_id_set_rotscale(task->data[0], task->data[4], task->data[4], 0); - sub_8079A64(task->data[0]); - if (task->data[2] == 32) - { - task->data[5]++; - task->data[1]++; - } - break; - case 1: - if (task->data[6] == 0) - { - if (task->data[5] == 3) - { - task->data[2] = 0; - task->data[1] = 3; - } - else - { - task->data[2] = 0; - task->data[3] = 0; - task->data[4] = 0x100; - obj_id_set_rotscale(task->data[0], task->data[4], task->data[4], 0); - sub_8079A64(task->data[0]); - task->data[1] = 2; - } - } - break; - case 2: - task->data[1] = 0; - break; - case 3: - if (++task->data[2] > 32) - { - task->data[2] = 0; - task->data[1]++; - } - break; - case 4: - task->data[2] += 2; - task->data[4] -= 0x50; - obj_id_set_rotscale(task->data[0], task->data[4], task->data[4], 0); - sub_8079A64(task->data[0]); - if (task->data[2] == 32) - { - task->data[2] = 0; - task->data[1]++; - } - break; - case 5: - sub_8078F40(task->data[0]); - gSprites[task->data[15]].pos2.y = 0; - DestroyAnimVisualTask(taskId); - break; - } -} - -#ifdef NONMATCHING -void sub_80D0614(struct Task* task, u8 taskId) -{ - s16 r8 = duplicate_obj_of_side_rel2move_in_transparent_mode(0); - if (r8 >= 0) - { - u8 r6 = AllocOamMatrix(); - if (r6 == 0xFF) - { - obj_delete_but_dont_free_vram(&gSprites[r8]); - } - else - { - gSprites[r8].oam.objMode = 1; - gSprites[r8].oam.affineMode = 3; - gSprites[r8].affineAnimPaused = 1; - gSprites[r8].oam.matrixNum = r6; - gSprites[r8].subpriority = task->data[7] - task->data[3]; - task->data[3]++; - task->data[6]++; - gSprites[r8].data[0] = 16; - gSprites[r8].data[1] = taskId; - gSprites[r8].data[2] = 6; - gSprites[r8].callback = sub_80D0704; - obj_id_set_rotscale(r8, task->data[4], task->data[4], 0); - gSprites[r8].oam.affineMode = 1; - CalcCenterToCornerVec(&gSprites[r8], gSprites[r8].oam.shape, gSprites[r8].oam.size, gSprites[r8].oam.affineMode); - } - } -} -#else -__attribute__((naked)) -void sub_80D0614(struct Task* task, u8 taskId) -{ - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r9\n\ - mov r6, r8\n\ - push {r6,r7}\n\ - adds r7, r0, 0 @r7 is task\n\ - lsls r1, 24\n\ - lsrs r1, 24\n\ - mov r9, r1 @r9 is taskId\n\ - movs r0, 0\n\ - bl duplicate_obj_of_side_rel2move_in_transparent_mode\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - mov r8, r0\n\ - lsls r0, 16\n\ - asrs r4, r0, 16\n\ - cmp r4, 0\n\ - blt _080D06EE @jump to bottom\n\ - bl AllocOamMatrix\n\ - lsls r0, 24\n\ - lsrs r6, r0, 24\n\ - cmp r6, 0xFF\n\ - bne _080D0658\n\ - lsls r0, r4, 4\n\ - adds r0, r4\n\ - lsls r0, 2\n\ - ldr r1, _080D0654 @ =gSprites\n\ - adds r0, r1\n\ - bl obj_delete_but_dont_free_vram\n\ - b _080D06EE @ jump to bottom\n\ - .align 2, 0\n\ -_080D0654: .4byte gSprites\n\ -_080D0658:\n\ - ldr r5, _080D06FC @ =gSprites\n\ - lsls r3, r4, 4\n\ - adds r3, r4\n\ - lsls r3, 2\n\ - adds r4, r3, r5\n\ - ldrb r1, [r4, 0x1]\n\ - movs r0, 0xD\n\ - negs r0, r0\n\ - ands r0, r1\n\ - movs r1, 0x4\n\ - orrs r0, r1\n\ - movs r1, 0x3\n\ - orrs r0, r1\n\ - strb r0, [r4, 0x1]\n\ - adds r2, r4, 0\n\ - adds r2, 0x2C\n\ - ldrb r0, [r2]\n\ - movs r1, 0x80\n\ - orrs r0, r1\n\ - strb r0, [r2]\n\ - movs r0, 0x1F\n\ - ands r6, r0\n\ - lsls r2, r6, 1\n\ - ldrb r1, [r4, 0x3]\n\ - movs r0, 0x3F\n\ - negs r0, r0\n\ - ands r0, r1\n\ - orrs r0, r2\n\ - strb r0, [r4, 0x3]\n\ - ldrb r0, [r7, 0x16]\n\ - ldrb r1, [r7, 0xE]\n\ - subs r0, r1\n\ - adds r1, r4, 0\n\ - adds r1, 0x43\n\ - strb r0, [r1]\n\ - ldrh r0, [r7, 0xE]\n\ - adds r0, 0x1\n\ - strh r0, [r7, 0xE]\n\ - ldrh r0, [r7, 0x14]\n\ - adds r0, 0x1\n\ - strh r0, [r7, 0x14]\n\ - movs r0, 0x10\n\ - strh r0, [r4, 0x2E]\n\ - mov r0, r9\n\ - strh r0, [r4, 0x30]\n\ - movs r0, 0x6\n\ - strh r0, [r4, 0x32]\n\ - adds r5, 0x1C\n\ - adds r3, r5\n\ - ldr r0, _080D0700 @ =sub_80D0704\n\ - str r0, [r3]\n\ - mov r1, r8 @duplicate_obj_of_side_rel2move_in_transparent_mode(0)\n\ - lsls r0, r1, 24\n\ - lsrs r0, 24\n\ - movs r1, 0x10\n\ - ldrsh r2, [r7, r1]\n\ - adds r1, r2, 0\n\ - movs r3, 0\n\ - bl obj_id_set_rotscale\n\ - ldrb r0, [r4, 0x1]\n\ - movs r3, 0x4\n\ - negs r3, r3\n\ - ands r3, r0\n\ - movs r0, 0x1\n\ - orrs r3, r0\n\ - strb r3, [r4, 0x1]\n\ - lsrs r1, r3, 6\n\ - ldrb r2, [r4, 0x3]\n\ - lsrs r2, 6\n\ - lsls r3, 30\n\ - lsrs r3, 30\n\ - adds r0, r4, 0\n\ - bl CalcCenterToCornerVec\n\ -_080D06EE:\n\ - pop {r3,r4}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_080D06FC: .4byte gSprites\n\ -_080D0700: .4byte sub_80D0704\n\ -.syntax divided\n"); -} -#endif - -void sub_80D0704(struct Sprite* sprite) -{ - if (--sprite->data[0] == 0) - { - gTasks[sprite->data[1]].data[sprite->data[2]]--; - FreeOamMatrix(sprite->oam.matrixNum); - obj_delete_but_dont_free_vram(sprite); - } -} diff --git a/src/anim/shield.c b/src/anim/shield.c deleted file mode 100755 index 8ed4f9796..000000000 --- a/src/anim/shield.c +++ /dev/null @@ -1,81 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" -#include "palette.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gBattleAnimBankAttacker; -extern u8 gBattleAnimBankTarget; - -static void sub_80CCE0C(struct Sprite* sprite); - -// shield -// Used by Protect. - -void sub_80CCD24(struct Sprite* sprite) -{ - if (NotInBattle() != 0) - { - gBattleAnimArgs[1] += 8; - } - - sprite->pos1.x = sub_8077EE4(gBattleAnimBankAttacker, 0) + gBattleAnimArgs[0]; - sprite->pos1.y = sub_8077EE4(gBattleAnimBankAttacker, 1) + gBattleAnimArgs[1]; - if (GetBankSide(gBattleAnimBankAttacker) == 0 || NotInBattle()) - sprite->oam.priority = sub_8079ED4(gBattleAnimBankAttacker) + 1; - else - sprite->oam.priority = sub_8079ED4(gBattleAnimBankAttacker); - - sprite->data[0] = gBattleAnimArgs[2]; - sprite->data[2] = (IndexOfSpritePaletteTag(0x2828) << 4) + 0x100; - sprite->data[7] = 16; - REG_BLDCNT = 0x3F40; - REG_BLDALPHA = (sprite->data[7] << 8) | (16 - sprite->data[7]); - sprite->callback = sub_80CCE0C; -} - -void sub_80CCE0C(struct Sprite* sprite) -{ - int a; - int i; - sprite->data[5] += 0x60; - sprite->pos2.x = -(sprite->data[5] >> 8); - sprite->data[1]++; - if (sprite->data[1] > 1) - { - sprite->data[1] = 0; - a = gPlttBufferFaded[sprite->data[2] + 1]; - i = 0; - do - { - gPlttBufferFaded[sprite->data[2] + ++i] = gPlttBufferFaded[sprite->data[2] + i + 1]; - } while ( i <= 5 ); - - gPlttBufferFaded[sprite->data[2] + 7] = a; - } - - if (sprite->data[7] > 6 && sprite->data[0] >0 && ++sprite->data[6] > 1) - { - sprite->data[6] = 0; - sprite->data[7] -= 1; - REG_BLDALPHA = (sprite->data[7] << 8) | (16 - sprite->data[7]);; - } - - if (sprite->data[0] >0) - { - sprite->data[0] -= 1; - } - else if (++sprite->data[6] > 1) - { - sprite->data[6] = 0; - sprite->data[7]++; - REG_BLDALPHA = (sprite->data[7] << 8) | (16 - sprite->data[7]); - if (sprite->data[7] == 16) - { - sprite->invisible = 1; - sprite->callback = sub_807861C; - } - } -} diff --git a/src/anim/shimmer.c b/src/anim/shimmer.c deleted file mode 100755 index ecb3dcdf9..000000000 --- a/src/anim/shimmer.c +++ /dev/null @@ -1,48 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" -#include "blend_palette.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gBattleAnimBankAttacker; -extern u8 gBattleAnimBankTarget; - -extern u16 gUnknown_083D6984[]; - -// shimmer -// Used by Magical Leaf. - -void sub_80CC5F8(u8 taskId) -{ - struct Task* task = &gTasks[taskId]; - switch (task->data[0]) - { - case 0: - task->data[8] = IndexOfSpritePaletteTag(0x274f) * 16 + 256; - task->data[12] = IndexOfSpritePaletteTag(0x27b0) * 16 + 256; - task->data[0]++; - break; - case 1: - task->data[9]++; - if (task->data[9] >= 0) - { - task->data[9] = 0; - BlendPalette(task->data[8], 0x10, task->data[10], gUnknown_083D6984[task->data[11]]); - BlendPalette(task->data[12], 0x10, task->data[10], gUnknown_083D6984[task->data[11]]); - task->data[10]++; - if (task->data[10] == 17) - { - task->data[10] = 0; - task->data[11]++; - if (task->data[11] == 7) - task->data[11] = 0; - } - } - break; - } - - if (gBattleAnimArgs[7] == -1) - DestroyAnimVisualTask(taskId); -} diff --git a/src/anim/silhouette.c b/src/anim/silhouette.c deleted file mode 100755 index 71ff3dae2..000000000 --- a/src/anim/silhouette.c +++ /dev/null @@ -1,77 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gBattleAnimBankAttacker; -extern u8 gBattleAnimBankTarget; - -static void sub_80CB3A8(u8 taskId); -static void sub_80CB438(u8 taskId); - -// silhouette (the transparent shadow image used for mimic.) -// Only used by Mimic. - -void sub_80CB340(u8 taskId) -{ - u8 spriteId = GetAnimBankSpriteId(1); - if (gSprites[spriteId].invisible) - { - DestroyAnimVisualTask(taskId); - } - else - { - sub_8078E70(spriteId, 1); - gTasks[taskId].data[0] = gBattleAnimArgs[0]; - gTasks[taskId].data[1] = gBattleAnimArgs[1]; - gTasks[taskId].data[11] = 256; - gTasks[taskId].func = sub_80CB3A8; - } -} - -void sub_80CB3A8(u8 taskId) -{ - u8 spriteId = GetAnimBankSpriteId(1); - gTasks[taskId].data[10] += gTasks[taskId].data[0]; - gSprites[spriteId].pos2.x = gTasks[taskId].data[10] >> 8; - if (GetBankSide(gBattleAnimBankTarget)) - { - gSprites[spriteId].pos2.x = -gSprites[spriteId].pos2.x; - } - - gTasks[taskId].data[11] += 16; - obj_id_set_rotscale(spriteId, gTasks[taskId].data[11], gTasks[taskId].data[11], 0); - sub_8079A64(spriteId); - gTasks[taskId].data[1]--; - if (!gTasks[taskId].data[1]) - { - gTasks[taskId].data[0] = 0; - gTasks[taskId].func = sub_80CB438; - } -} - -void sub_80CB438(u8 taskId) -{ - if ((u16)gBattleAnimArgs[7] == 0xFFFF) - { - if (gTasks[taskId].data[0] == 0) - { - u8 spriteId = GetAnimBankSpriteId(1); - sub_8078F40(spriteId); - gSprites[spriteId].pos2.x = 0; - gSprites[spriteId].pos2.y = 0; - gTasks[taskId].data[0]++; - return; - } - } - else - { - if (gTasks[taskId].data[0] == 0) - return; - } - - gTasks[taskId].data[0]++; - if (gTasks[taskId].data[0] == 3) - DestroyAnimVisualTask(taskId); -} diff --git a/src/anim/slash.c b/src/anim/slash.c deleted file mode 100755 index c5869c4ab..000000000 --- a/src/anim/slash.c +++ /dev/null @@ -1,83 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gBattleAnimBankAttacker; -extern u8 gBattleAnimBankTarget; - -static void sub_80CDE78(struct Sprite* sprite); -static void sub_80CDEB0(struct Sprite* sprite); -static void sub_80CDEC0(struct Sprite* sprite); - -// slash (a cutting animation) -// Used in Slash and False Swipe. - -void sub_80CDD74(struct Sprite* sprite) -{ - if (gBattleAnimArgs[0] == 0) - { - sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 2) + gBattleAnimArgs[1]; - sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 3) + gBattleAnimArgs[2]; - } - else - { - sprite->pos1.x = sub_8077ABC(gBattleAnimBankTarget, 2) + gBattleAnimArgs[1]; - sprite->pos1.y = sub_8077ABC(gBattleAnimBankTarget, 3) + gBattleAnimArgs[2]; - } - - sprite->data[0] = 0; - sprite->data[1] = 0; - StoreSpriteCallbackInData(sprite, sub_80CDEC0); - sprite->callback = sub_8078600; -} - -void sub_80CDDDC(struct Sprite* sprite) -{ - sprite->pos1.x = sub_8077ABC(gBattleAnimBankTarget, 2) + 0xFFD0; - sprite->pos1.y = sub_8077ABC(gBattleAnimBankTarget, 3); - StoreSpriteCallbackInData(sprite, sub_80CDE78); - sprite->callback = sub_8078600; -} - -void sub_80CDE24(struct Sprite* sprite) -{ - sprite->pos1.x = sprite->pos1.x = sub_8077ABC(gBattleAnimBankTarget, 2) + 0xFFD0 + gBattleAnimArgs[0]; - sprite->pos1.y = sub_8077ABC(gBattleAnimBankTarget, 3); - StartSpriteAnim(sprite, 1); - sprite->data[0] = 0; - sprite->data[1] = 0; - sprite->callback = sub_80CDEC0; -} - -void sub_80CDE78(struct Sprite* sprite) -{ - if (++sprite->data[0] > 8) - { - sprite->data[0] = 12; - sprite->data[1] = 8; - sprite->data[2] = 0; - StoreSpriteCallbackInData(sprite, sub_80CDEB0); - sprite->callback = sub_8078364; - } -} - -void sub_80CDEB0(struct Sprite* sprite) -{ - sprite->data[0] = 0; - sprite->data[1] = 0; - sprite->callback = sub_80CDEC0; -} - -void sub_80CDEC0(struct Sprite* sprite) -{ - if (++sprite->data[0] > 1) - { - sprite->data[0] = 0; - sprite->invisible = !sprite->invisible; - if (++sprite->data[1] > 8) - move_anim_8072740(sprite); - } -} diff --git a/src/anim/sleep.c b/src/anim/sleep.c deleted file mode 100755 index 58ecc702f..000000000 --- a/src/anim/sleep.c +++ /dev/null @@ -1,44 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gBattleAnimBankAttacker; -extern u8 gBattleAnimBankTarget; - -static void sub_80CD394(struct Sprite* sprite); - -// sleep (the "ZZZ" graphical effect) -// Used by Rest and the sleep turn when the Pokemon is still asleep. - -void sub_80CD328(struct Sprite* sprite) -{ - sub_8078650(sprite); - if (GetBankSide(gBattleAnimBankAttacker) == 0) - { - sprite->pos1.x += gBattleAnimArgs[0]; - sprite->pos1.y += gBattleAnimArgs[1]; - sprite->data[3] = 1; - } - else - { - sprite->pos1.x -= gBattleAnimArgs[0]; - sprite->pos1.y += gBattleAnimArgs[1]; - sprite->data[3] = 0xFFFF; - StartSpriteAffineAnim(sprite, 1); - } - - sprite->callback = sub_80CD394; -} - -void sub_80CD394(struct Sprite* sprite) -{ - sprite->pos2.y = -(sprite->data[0] / 0x28); - sprite->pos2.x = sprite->data[4] / 10; - sprite->data[4] += sprite->data[3] * 2; - sprite->data[0] += sprite->data[1]; - if (++sprite->data[1] > 0x3C) - move_anim_8074EE0(sprite); -} diff --git a/src/anim/slice.c b/src/anim/slice.c deleted file mode 100755 index 8e33dcb06..000000000 --- a/src/anim/slice.c +++ /dev/null @@ -1,111 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gBattleAnimBankAttacker; -extern u8 gBattleAnimBankTarget; - -static void sub_80CCB00(struct Sprite* sprite); - -// slice (the cutting animation showing as a yellow line drawn diagonally) -// Used in Cut, Fury Cutter, Aerial Ace, and Air Cutter. - -void sub_80CC914(struct Sprite* sprite) -{ - sprite->pos1.x = sub_8077ABC(gBattleAnimBankTarget, 0); - sprite->pos1.y = sub_8077ABC(gBattleAnimBankTarget, 1); - if (GetBankSide(gBattleAnimBankTarget) == 0) - sprite->pos1.y += 8; - - sprite->callback = sub_80CCB00; - if (gBattleAnimArgs[2] == 0) - { - sprite->pos1.x += gBattleAnimArgs[0]; - } - else - { - sprite->pos1.x -= gBattleAnimArgs[0]; - sprite->hFlip = 1; - } - - sprite->pos1.y += gBattleAnimArgs[1]; - sprite->data[1] -= 0x400; - sprite->data[2] += 0x400; - sprite->data[5] = gBattleAnimArgs[2]; - if (sprite->data[5] == 1) - sprite->data[1] = -sprite->data[1]; -} - -void sub_80CC9BC(struct Sprite* sprite) -{ - u8 a; - u8 b; - switch (gBattleAnimArgs[3]) - { - case 1: - a = sub_8077ABC(gBattleAnimBankTarget ^ 2, 0); - b = sub_8077ABC(gBattleAnimBankTarget ^ 2, 1); - break; - case 2: - a = sub_8077ABC(gBattleAnimBankTarget, 0); - b = sub_8077ABC(gBattleAnimBankTarget, 1); - if (IsAnimBankSpriteVisible(gBattleAnimBankTarget ^ 2)) - { - a = (sub_8077ABC(gBattleAnimBankTarget ^ 2, 0) + a) / 2; - b = (sub_8077ABC(gBattleAnimBankTarget ^ 2, 1) + b) / 2; - } - break; - case 0: - default: - a = sub_8077ABC(gBattleAnimBankTarget, 0); - b = sub_8077ABC(gBattleAnimBankTarget, 1); - break; - } - - sprite->pos1.x = a; - sprite->pos1.y = b; - if (GetBankSide(gBattleAnimBankTarget) == 0) - sprite->pos1.y += 8; - - sprite->callback = sub_80CCB00; - if (gBattleAnimArgs[2] == 0) - { - sprite->pos1.x += gBattleAnimArgs[0]; - } - else - { - sprite->pos1.x -= gBattleAnimArgs[0]; - sprite->hFlip = 1; - } - - sprite->pos1.y += gBattleAnimArgs[1]; - sprite->data[1] -= 0x400; - sprite->data[2] += 0x400; - sprite->data[5] = gBattleAnimArgs[2]; - if (sprite->data[5] == 1) - sprite->data[1] = -sprite->data[1]; -} - -void sub_80CCB00(struct Sprite* sprite) -{ - sprite->data[3] += sprite->data[1]; - sprite->data[4] += sprite->data[2]; - if (sprite->data[5] == 0) - sprite->data[1] += 0x18; - else - sprite->data[1] -= 0x18; - - sprite->data[2] -= 0x18; - sprite->pos2.x = sprite->data[3] >> 8; - sprite->pos2.y = sprite->data[4] >> 8; - sprite->data[0]++; - if (sprite->data[0] == 20) - { - StoreSpriteCallbackInData(sprite, move_anim_8072740); - sprite->data[0] = 3; - sprite->callback = sub_80782D8; - } -} diff --git a/src/anim/smoke.c b/src/anim/smoke.c deleted file mode 100755 index c6ce91b76..000000000 --- a/src/anim/smoke.c +++ /dev/null @@ -1,22 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gBattleAnimBankAttacker; -extern u8 gBattleAnimBankTarget; - -// smoke (smoke on the ground around a sprite.) -// Used in Extremespeed. - -void sub_80D1A70(struct Sprite* sprite) -{ - sprite->invisible = gTasks[sprite->data[0]].data[5]; - if (sprite->animEnded) - { - gTasks[sprite->data[0]].data[sprite->data[1]]--; - DestroySprite(sprite); - } -} diff --git a/src/anim/sonic.c b/src/anim/sonic.c deleted file mode 100755 index 684516ba7..000000000 --- a/src/anim/sonic.c +++ /dev/null @@ -1,136 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" -#include "battle_anim_80CA710.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gBattleAnimBankAttacker; -extern u8 gBattleAnimBankTarget; - -// sonic (shoots a projectile towards the target.) -// Used in Sonic Boom and Air Cutter. - -void sub_80CF6DC(struct Sprite* sprite) -{ - s16 a; - s16 b; - u16 c; - - if (NotInBattle()) - { - gBattleAnimArgs[2] = -gBattleAnimArgs[2]; - } - else if (GetBankSide(gBattleAnimBankAttacker) != 0) - { - gBattleAnimArgs[2] = -gBattleAnimArgs[2]; - gBattleAnimArgs[1] = -gBattleAnimArgs[1]; - gBattleAnimArgs[3] = -gBattleAnimArgs[3]; - } - - sub_80787B0(sprite, 1); - a = sub_8077ABC(gBattleAnimBankTarget, 2) + gBattleAnimArgs[2]; - b = sub_8077ABC(gBattleAnimBankTarget, 3) + gBattleAnimArgs[3]; - c = sub_80790F0(a - sprite->pos1.x, b - sprite->pos1.y); - c += 0xF000; - if (NotInBattle()) - c -= 0x6000; - - sub_8078FDC(sprite, 0, 0x100, 0x100, c); - sprite->data[0] = gBattleAnimArgs[4]; - sprite->data[2] = a; - sprite->data[4] = b; - sprite->callback = sub_8078B34; - StoreSpriteCallbackInData(sprite, move_anim_8072740); -} - -void sub_80CF7E0(struct Sprite* sprite) -{ - if (sprite->data[0]-- <= 0) - { - gTasks[sprite->data[7]].data[1]--; - DestroySprite(sprite); - } -} - -void sub_80CF814(struct Sprite* sprite) -{ - struct Task* task = &gTasks[sprite->data[7]]; - if (sprite->data[0] > task->data[5]) - { - sprite->data[5] += sprite->data[3]; - sprite->data[6] += sprite->data[4]; - } - else - { - sprite->data[5] -= sprite->data[3]; - sprite->data[6] -= sprite->data[4]; - } - - sprite->data[1] += sprite->data[5]; - sprite->data[2] += sprite->data[6]; - if (1 & task->data[7]) - sprite->pos2.x = ((u16)sprite->data[1] >> 8) * -1; - else - sprite->pos2.x = (u16)sprite->data[1] >> 8; - - if (1 & task->data[8]) - sprite->pos2.y = ((u16)sprite->data[2] / 256u) * -1; - else - sprite->pos2.y = (u16)sprite->data[2] / 256u; - - if (sprite->data[0]-- <= 0) - { - sprite->data[0] = 30; - sprite->callback = sub_80CF7E0; - } -} - -void sub_80CF8B8(struct Sprite* sprite) -{ - s16 a; - s16 b; - s16 c; - - struct Task* task = &gTasks[sprite->data[7]]; - sprite->data[1] += (-2 & task->data[7]); - sprite->data[2] += (-2 & task->data[8]); - if (1 & task->data[7]) - sprite->pos2.x = ((u16)sprite->data[1] >> 8) * -1; - else - sprite->pos2.x = (u16)sprite->data[1] >> 8; - - if (1 & task->data[8]) - sprite->pos2.y = ((u16)sprite->data[2] / 256u) * -1; - else - sprite->pos2.y = (u16)sprite->data[2] / 256u; - - if (sprite->data[0]-- <= 0) - { - sprite->data[0] = 8; - task->data[5] = 4; - a = sub_81174E0(0x1000); - sprite->pos1.x += sprite->pos2.x; - sprite->pos1.y += sprite->pos2.y; - sprite->pos2.y = 0; - sprite->pos2.x = 0; - if (task->data[11] >= sprite->pos1.x) - b = (task->data[11] - sprite->pos1.x) << 8; - else - b = (sprite->pos1.x - task->data[11]) << 8; - - if (task->data[12] >= sprite->pos1.y) - c = (task->data[12] - sprite->pos1.y) << 8; - else - c = (sprite->pos1.y - task->data[12]) << 8; - - sprite->data[2] = 0; - sprite->data[1] = 0; - sprite->data[6] = 0; - sprite->data[5] = 0; - sprite->data[3] = sub_81174C4(sub_81174C4(b, a), sub_81174E0(0x1C0)); - sprite->data[4] = sub_81174C4(sub_81174C4(c, a), sub_81174E0(0x1C0)); - sprite->callback = sub_80CF814; - } -} diff --git a/src/anim/sonic_task.c b/src/anim/sonic_task.c deleted file mode 100755 index efd13dff6..000000000 --- a/src/anim/sonic_task.c +++ /dev/null @@ -1,152 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" -#include "battle_anim_80CA710.h" -#include "battle.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gBattleAnimBankAttacker; -extern u8 gBattleAnimBankTarget; - -extern u8 gBanksBySide[]; -extern u16 gBattleTypeFlags; -extern struct SpriteTemplate gSpriteTemplate_83D74BC; - -// sonic_task (the task functions for the "sonic" effect.) -// Used in Air Cutter and Sonic Boom. - -void sub_80CF9F8(u8 taskId) -{ - if (gTasks[taskId].data[1] == 0) - DestroyAnimVisualTask(taskId); -} - -void sub_80CFA20(u8 taskId) -{ - if (gTasks[taskId].data[0]-- <= 0) - { - u8 spriteId; - struct Sprite* sprite; - spriteId = CreateSprite(&gSpriteTemplate_83D74BC, gTasks[taskId].data[9], gTasks[taskId].data[10], gTasks[taskId].data[2] - gTasks[taskId].data[1]); - sprite = &gSprites[spriteId]; - switch (gTasks[taskId].data[4]) - { - case 1: - sprite->oam.matrixNum |= 24; - break; - case 2: - sprite->oam.matrixNum = 8; - break; - } - - sprite->data[0] = gTasks[taskId].data[5] - gTasks[taskId].data[6]; - sprite->data[7] = taskId; - gTasks[taskId].data[gTasks[taskId].data[1] + 13] = spriteId; - gTasks[taskId].data[0] = gTasks[taskId].data[3]; - gTasks[taskId].data[1]++; - PlaySE12WithPanning(0x9A, sub_8076F98(-0x3F)); - if (gTasks[taskId].data[1] > 2) - gTasks[taskId].func = sub_80CF9F8; - } -} - -void sub_80CFB04(u8 taskId) -{ - s16 r9 = 0; - s16 r6 = 0; - s16 sp1 = 0; - s16 sp2 = 0; - s16 r4; - - if (NotInBattle()) - { - gTasks[taskId].data[4] = 2; - gBattleAnimArgs[0] = -gBattleAnimArgs[0]; - if (gBattleAnimArgs[2] & 1) - gBattleAnimArgs[2] &= ~1; - else - gBattleAnimArgs[2] |= 1; - } - else - { - if ((gBanksBySide[gBattleAnimBankTarget] & 1) == 0) - { - gTasks[taskId].data[4] = 1; - gBattleAnimArgs[0] = -gBattleAnimArgs[0]; - gBattleAnimArgs[1] = -gBattleAnimArgs[1]; - if (gBattleAnimArgs[2] & 1) - gBattleAnimArgs[2] &= ~1; - else - gBattleAnimArgs[2] |= 1; - } - } - r6 = gTasks[taskId].data[9] = sub_8077ABC(gBattleAnimBankAttacker, 0); - r9 = gTasks[taskId].data[10] = sub_8077ABC(gBattleAnimBankAttacker, 1); - if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) - && IsAnimBankSpriteVisible(gBattleAnimBankTarget ^ 2)) - { - sub_807A3FC(gBattleAnimBankTarget, 0, &sp1, &sp2); - } - else - { - sp1 = sub_8077ABC(gBattleAnimBankTarget, 0); - sp2 = sub_8077ABC(gBattleAnimBankTarget, 1); - } - - sp1 = gTasks[taskId].data[11] = sp1 + gBattleAnimArgs[0]; - sp2 = gTasks[taskId].data[12] = sp2 + gBattleAnimArgs[1]; - if (sp1 >= r6) - r4 = sp1 - r6; - else - r4 = r6 - sp1; - - gTasks[taskId].data[5] = sub_81174C4(r4, sub_81174E0(gBattleAnimArgs[2] & ~1)); - gTasks[taskId].data[6] = sub_81174C4(gTasks[taskId].data[5], 0x80); - gTasks[taskId].data[7] = gBattleAnimArgs[2]; - if (sp2 >= r9) - { - r4 = sp2 - r9; - gTasks[taskId].data[8] = sub_81174C4(r4, sub_81174E0(gTasks[taskId].data[5])) & ~1; - } - else - { - r4 = r9 - sp2; - gTasks[taskId].data[8] = sub_81174C4(r4, sub_81174E0(gTasks[taskId].data[5])) | 1; - } - - gTasks[taskId].data[3] = gBattleAnimArgs[3]; - if (gBattleAnimArgs[4] & 0x80) - { - gBattleAnimArgs[4] ^= 0x80; - if (gBattleAnimArgs[4] >= 64) - { - u16 var = sub_8079E90(gBattleAnimBankTarget) + (gBattleAnimArgs[4] - 64); - gTasks[taskId].data[2] = var; - } - else - { - u16 var = sub_8079E90(gBattleAnimBankTarget) - gBattleAnimArgs[4]; - gTasks[taskId].data[2] = var; - } - } - else - { - if (gBattleAnimArgs[4] >= 64) - { - u16 var = sub_8079E90(gBattleAnimBankTarget) + (gBattleAnimArgs[4] - 64); - gTasks[taskId].data[2] = var; - } - else - { - u16 var = sub_8079E90(gBattleAnimBankTarget) - gBattleAnimArgs[4]; - gTasks[taskId].data[2] = var; - } - } - - if (gTasks[taskId].data[2] < 3) - gTasks[taskId].data[2] = 3; - - gTasks[taskId].func = sub_80CFA20; -} diff --git a/src/anim/spin_finger.c b/src/anim/spin_finger.c deleted file mode 100755 index adf41b261..000000000 --- a/src/anim/spin_finger.c +++ /dev/null @@ -1,73 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gBattleAnimBankAttacker; -extern u8 gBattleAnimBankTarget; - -extern void sub_80CF088(struct Sprite* sprite); -static void sub_80CF138(struct Sprite* sprite); -static void sub_80CF158(struct Sprite* sprite); - -// spin_finger -// Used in Follow Me. - -void sub_80CF0BC(struct Sprite* sprite) -{ - u8 bank; - if (gBattleAnimArgs[0] == 0) - bank = gBattleAnimBankAttacker; - else - bank = gBattleAnimBankTarget; - - sprite->pos1.x = sub_8077ABC(bank, 0); - sprite->pos1.y = sub_807A100(bank, 2); - if (sprite->pos1.y <= 9) - sprite->pos1.y = 10; - - sprite->data[0] = 1; - sprite->data[1] = 0; - sprite->data[2] = sprite->subpriority; - sprite->data[3] = sprite->subpriority + 4; - sprite->data[4] = 0; - StoreSpriteCallbackInData(sprite, sub_80CF138); - sprite->callback = sub_80785E4; -} - -void sub_80CF138(struct Sprite* sprite) -{ - if (++sprite->data[4] > 12) - sprite->callback = sub_80CF158; -} - -void sub_80CF158(struct Sprite* sprite) -{ - s16 temp; - s16 temp2; - sprite->data[1] += 4; - if (sprite->data[1] > 0xFE) - { - if (--sprite->data[0] == 0) - { - sprite->pos2.x = 0; - sprite->callback = sub_80CF088; - return; - } - else - { - sprite->data[1] &= 0xFF; - } - } - - if (sprite->data[1] > 0x4F) - sprite->subpriority = sprite->data[3]; - - if (sprite->data[1] > 0x9F) - sprite->subpriority = sprite->data[2]; - - temp = gSineTable[sprite->data[1]]; - sprite->pos2.x = (temp2 = temp >> 3) + (temp2 >> 1); -} diff --git a/src/anim/spit.c b/src/anim/spit.c deleted file mode 100755 index f9ad462ae..000000000 --- a/src/anim/spit.c +++ /dev/null @@ -1,30 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gBattleAnimBankAttacker; -extern u8 gBattleAnimBankTarget; - -// spit (hurls sprites outward from the pokemon. Similar to orbit_fast, but takes another argument.) -// Used in Spit Up. - -void sub_80D287C(struct Sprite* sprite) -{ - sprite->pos2.x += sprite->data[0]; - sprite->pos2.y += sprite->data[1]; - if (sprite->data[3]++ >= sprite->data[2]) - move_anim_8072740(sprite); -} - -void sub_80D28AC(struct Sprite* sprite) -{ - sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 2); - sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 3); - sprite->data[0] = Sin(gBattleAnimArgs[0], 10); - sprite->data[1] = Cos(gBattleAnimArgs[0], 7); - sprite->data[2] = gBattleAnimArgs[1]; - sprite->callback = sub_80D287C; -} diff --git a/src/anim/splash.c b/src/anim/splash.c deleted file mode 100755 index 1b0ceba93..000000000 --- a/src/anim/splash.c +++ /dev/null @@ -1,87 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gBattleAnimBankAttacker; -extern u8 gBattleAnimBankTarget; - -extern struct AffineAnimFrameCmd gUnknown_083D76F4; - -static void sub_80D07AC(u8 taskId); - -// splash (splash effect of hopping up and down) -// Used in Splash, Mud Sport, and Sketch. - -void sub_80D074C(u8 taskId) -{ - struct Task* task = &gTasks[taskId]; - if (gBattleAnimArgs[1] == 0) - { - DestroyAnimVisualTask(taskId); - } - else - { - u8 spriteId = GetAnimBankSpriteId(gBattleAnimArgs[0]); - task->data[0] = spriteId; - task->data[1] = 0; - task->data[2] = gBattleAnimArgs[1]; - task->data[3] = 0; - task->data[4] = 0; - sub_80798F4(task, spriteId, &gUnknown_083D76F4); - task->func = sub_80D07AC; - } -} - -void sub_80D07AC(u8 taskId) -{ - struct Task* task = &gTasks[taskId]; - switch (task->data[1]) - { - case 0: - sub_807992C(task); - task->data[4] += 3; - gSprites[task->data[0]].pos2.y += task->data[4]; - if (++task->data[3] > 7) - { - task->data[3] = 0; - task->data[1]++; - } - break; - case 1: - sub_807992C(task); - gSprites[task->data[0]].pos2.y += task->data[4]; - if (++task->data[3] > 7) - { - task->data[3] = 0; - task->data[1]++; - } - break; - case 2: - if (task->data[4] != 0) - { - gSprites[task->data[0]].pos2.y -= 2; - task->data[4] -= 2; - } - else - task->data[1]++; - break; - case 3: - if (!sub_807992C(task)) - { - if (--task->data[2] == 0) - { - gSprites[task->data[0]].pos2.y = 0; - DestroyAnimVisualTask(taskId); - } - else - { - sub_80798F4(task, task->data[0], &gUnknown_083D76F4); - task->data[1] = 0; - } - } - break; - } -} diff --git a/src/anim/startle.c b/src/anim/startle.c deleted file mode 100755 index acbf80fec..000000000 --- a/src/anim/startle.c +++ /dev/null @@ -1,56 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gBattleAnimBankAttacker; -extern u8 gBattleAnimBankTarget; - -extern struct AffineAnimFrameCmd gUnknown_083D7A98; - -// startle (the pokemon sprite shrivels upward and restores after a brief time.) -// Used in Fake Out, Trick, and Astonish. - -// opponent -void sub_80D1E38(u8 taskId) -{ - u8 spriteId = GetAnimBankSpriteId(1); - if (++gTasks[taskId].data[0] == 1) - { - sub_80798F4(&gTasks[taskId], GetAnimBankSpriteId(1), &gUnknown_083D7A98); - gSprites[spriteId].pos2.x = 4; - } - else - { - gSprites[spriteId].pos2.x = -gSprites[spriteId].pos2.x; - if (sub_807992C(&gTasks[taskId]) == 0) - { - gSprites[spriteId].pos2.x = 0; - gSprites[spriteId].pos2.y = 0; - DestroyAnimVisualTask(taskId); - } - } -} - -// player -void sub_80D1EC8(u8 taskId) -{ - u8 spriteId = GetAnimBankSpriteId(0); - if (++gTasks[taskId].data[0] == 1) - { - sub_80798F4(&gTasks[taskId], GetAnimBankSpriteId(0), &gUnknown_083D7A98); - gSprites[spriteId].pos2.x = 4; - } - else - { - gSprites[spriteId].pos2.x = -gSprites[spriteId].pos2.x; - if (sub_807992C(&gTasks[taskId]) == 0) - { - gSprites[spriteId].pos2.x = 0; - gSprites[spriteId].pos2.y = 0; - DestroyAnimVisualTask(taskId); - } - } -} diff --git a/src/anim/strike.c b/src/anim/strike.c deleted file mode 100755 index f2fbdb5a4..000000000 --- a/src/anim/strike.c +++ /dev/null @@ -1,77 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gBattleAnimBankAttacker; -extern u8 gBattleAnimBankTarget; - -static void sub_80CE798(struct Sprite* sprite); - -// strike (A red strike towards the opponent.) -// Used in Horn Attack, Fury Attack, and Horn Drill. - -void sub_80CE670(struct Sprite* sprite) -{ - if (gBattleAnimArgs[2] <= 1) - gBattleAnimArgs[2] = 2; - - if (gBattleAnimArgs[2] > 0x7F) - gBattleAnimArgs[2] = 0x7F; - - sprite->data[0] = 0; - sprite->data[1] = gBattleAnimArgs[2]; - sprite->pos1.x = sub_8077ABC(gBattleAnimBankTarget, 2) + gBattleAnimArgs[0]; - sprite->pos1.y = sub_8077ABC(gBattleAnimBankTarget, 3) + gBattleAnimArgs[1]; - sprite->data[6] = sprite->pos1.x; - sprite->data[7] = sprite->pos1.y; - if (NotInBattle() != 0) - { - sprite->oam.matrixNum = 8; - sprite->pos1.x += 40; - sprite->pos1.y += 20; - sprite->data[2] = sprite->pos1.x << 7; - sprite->data[3] = -0x1400 / sprite->data[1]; - sprite->data[4] = sprite->pos1.y << 7; - sprite->data[5] = -0xA00 / sprite->data[1]; - } - else if (GetBankSide(gBattleAnimBankAttacker) == 0) - { - sprite->pos1.x -= 40; - sprite->pos1.y += 20; - sprite->data[2] = sprite->pos1.x << 7; - sprite->data[3] = 0x1400 / sprite->data[1]; - sprite->data[4] = sprite->pos1.y << 7; - sprite->data[5] = -0xA00 / sprite->data[1]; - } - else - { - sprite->pos1.x += 40; - sprite->pos1.y -= 20; - sprite->data[2] = sprite->pos1.x << 7; - sprite->data[3] = -0x1400 / sprite->data[1]; - sprite->data[4] = sprite->pos1.y << 7; - sprite->data[5] = 0xA00 / sprite->data[1]; - sprite->oam.matrixNum = 24; - } - - sprite->callback = sub_80CE798; -} - -void sub_80CE798(struct Sprite* sprite) -{ - sprite->data[2] += sprite->data[3]; - sprite->data[4] += sprite->data[5]; - sprite->pos1.x = sprite->data[2] >> 7; - sprite->pos1.y = sprite->data[4] >> 7; - if (--sprite->data[1] == 1) - { - sprite->pos1.x = sprite->data[6]; - sprite->pos1.y = sprite->data[7]; - } - - if (sprite->data[1] == 0) - move_anim_8072740(sprite); -} diff --git a/src/anim/switch.c b/src/anim/switch.c deleted file mode 100755 index a1be144df..000000000 --- a/src/anim/switch.c +++ /dev/null @@ -1,128 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gBattleAnimBankAttacker; -extern u8 gBattleAnimBankTarget; - -extern s8 gUnknown_083D680C[11][3]; - -static void sub_80CBC8C(struct Sprite* sprite); -static void sub_80CBCF8(struct Sprite* sprite); -static void sub_80CBDB0(struct Sprite* sprite); - -// switch (makes an item and circles it from side to side on the field.) -// Used in Trick. - -void sub_80CBBF0(struct Sprite* sprite) -{ - int a; - int b; - - if (sprite->data[0] == 0) - { - if (!NotInBattle()) - { - sprite->data[1] = gBattleAnimArgs[1]; - sprite->pos1.x = 0x78; - } - else - { - a = gBattleAnimArgs[1] - 32; - if (a < 0) - b = gBattleAnimArgs[1] + 0xDF; - else - b = a; - - sprite->data[1] = a - ((b >> 8) << 8); - sprite->pos1.x = 0x46; - } - - sprite->pos1.y = gBattleAnimArgs[0]; - sprite->data[2] = gBattleAnimArgs[0]; - sprite->data[4] = 20; - sprite->pos2.x = Cos(sprite->data[1], 0x3C); - sprite->pos2.y = Sin(sprite->data[1], 20); - sprite->callback = sub_80CBC8C; - if (sprite->data[1] > 0 && sprite->data[1] < 0xC0) - sprite->subpriority = 31; - else - sprite->subpriority = 29; - } -} - -void sub_80CBC8C(struct Sprite* sprite) -{ - switch (sprite->data[3]) - { - case 0: - if (sprite->data[2] > 0x4E) - { - sprite->data[3] = 1; - StartSpriteAffineAnim(sprite, 1); - break; - } - else - { - sprite->data[2] += sprite->data[4] / 10; - sprite->data[4] += 3; - sprite->pos1.y = sprite->data[2]; - break; - } - break; - case 1: - if (sprite->data[3] && sprite->affineAnimEnded) - { - sprite->data[0] = 0; - sprite->data[2] = 0; - sprite->callback = sub_80CBCF8; - } - break; - } -} - -void sub_80CBCF8(struct Sprite* sprite) -{ - if (sprite->data[2] == gUnknown_083D680C[sprite->data[0]][1]) - { - if (gUnknown_083D680C[sprite->data[0]][2] == 0x7F) - { - sprite->data[0] = 0; - sprite->callback = sub_80CBDB0; - } - - sprite->data[2] = 0; - sprite->data[0]++; - } - else - { - sprite->data[2]++; - sprite->data[1] = (gUnknown_083D680C[sprite->data[0]][0] * gUnknown_083D680C[sprite->data[0]][2] + sprite->data[1]) & 0xFF; - if (!NotInBattle()) - { - if ((u16)(sprite->data[1] - 1) <= 0xBE) - { - sprite->subpriority = 31; - } - else - { - sprite->subpriority = 29; - } - } - - sprite->pos2.x = Cos(sprite->data[1], 0x3C); - sprite->pos2.y = Sin(sprite->data[1], 20); - } -} - -void sub_80CBDB0(struct Sprite* sprite) -{ - if (sprite->data[0] > 20) - move_anim_8072740(sprite); - - sprite->invisible = sprite->data[0] % 2; - sprite->data[0]++; -} diff --git a/src/anim/sword.c b/src/anim/sword.c deleted file mode 100755 index 536f89b26..000000000 --- a/src/anim/sword.c +++ /dev/null @@ -1,30 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gBattleAnimBankAttacker; -extern u8 gBattleAnimBankTarget; - -static void sub_80CF6B4(struct Sprite* sprite); - -// sword (sword appears and floats upward.) -// Used in Swords Dance. - -void sub_80CF690(struct Sprite* sprite) -{ - sub_80787B0(sprite, 0); - sprite->callback = sub_80785E4; - StoreSpriteCallbackInData(sprite, sub_80CF6B4); -} - -void sub_80CF6B4(struct Sprite* sprite) -{ - sprite->data[0] = 6; - sprite->data[2] = sprite->pos1.x; - sprite->data[4] = sprite->pos1.y - 32; - sprite->callback = sub_8078B34; - StoreSpriteCallbackInData(sprite, move_anim_8072740); -} diff --git a/src/anim/taunt_finger.c b/src/anim/taunt_finger.c deleted file mode 100755 index 7024f85a0..000000000 --- a/src/anim/taunt_finger.c +++ /dev/null @@ -1,56 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gBattleAnimBankAttacker; -extern u8 gBattleAnimBankTarget; - -extern void sub_80CEF44(u8 bank, struct Sprite* sprite); -static void sub_80CF228(struct Sprite* sprite); -static void sub_80CF264(struct Sprite* sprite); - -// taunt_finger -// Used in Taunt. - -void sub_80CF1C8(struct Sprite* sprite) -{ - u8 bank; - if (gBattleAnimArgs[0] == 0) - bank = gBattleAnimBankAttacker; - else - bank = gBattleAnimBankTarget; - - sub_80CEF44(bank, sprite); - if (GetBankSide(bank) == 0) - { - StartSpriteAnim(sprite, 0); - sprite->data[0] = 2; - } - else - { - StartSpriteAnim(sprite, 1); - sprite->data[0] = 3; - } - - sprite->callback = sub_80CF228; -} - -void sub_80CF228(struct Sprite* sprite) -{ - if (++sprite->data[1] > 10) - { - sprite->data[1] = 0; - StartSpriteAnim(sprite, sprite->data[0]); - StoreSpriteCallbackInData(sprite, sub_80CF264); - sprite->callback = sub_8078600; - } -} - -void sub_80CF264(struct Sprite* sprite) -{ - if (++sprite->data[1] > 5) - move_anim_8072740(sprite); -} diff --git a/src/anim/tendrils.c b/src/anim/tendrils.c deleted file mode 100755 index ba1014d2f..000000000 --- a/src/anim/tendrils.c +++ /dev/null @@ -1,67 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gBattleAnimBankAttacker; -extern u8 gBattleAnimBankTarget; - -static void sub_80CB298(struct Sprite* sprite); -static void sub_80CB2D4(struct Sprite* sprite); - -// tendrils -// Used by Constrict. - -void sub_80CB25C(struct Sprite* sprite) -{ - sub_8078764(sprite, 0); - sprite->affineAnimPaused = 1; - StartSpriteAffineAnim(sprite, gBattleAnimArgs[2]); - sprite->data[6] = gBattleAnimArgs[2]; - sprite->data[7] = gBattleAnimArgs[3]; - sprite->callback = sub_80CB298; -} - -void sub_80CB298(struct Sprite* sprite) -{ - if ((u16)gBattleAnimArgs[7] == 0xFFFF) - { - sprite->affineAnimPaused = 0; - GetAnimBankSpriteId(1); - sprite->data[0] = 0x100; - sprite->callback = sub_80CB2D4; - } -} - -void sub_80CB2D4(struct Sprite* sprite) -{ - GetAnimBankSpriteId(1); - if (!sprite->data[2]) - { - sprite->data[0] += 11; - } - else - { - sprite->data[0] -= 11; - } - sprite->data[1]++; - if (sprite->data[1] == 6) - { - sprite->data[1] = 0; - sprite->data[2] ^= 1; - } - - if (sprite->affineAnimEnded) - { - sprite->data[7]--; - if (sprite->data[7] > 0) - { - StartSpriteAffineAnim(sprite, sprite->data[6]); - } - else - { - move_anim_8072740(sprite); - } - } -} \ No newline at end of file diff --git a/src/anim/thought.c b/src/anim/thought.c deleted file mode 100755 index 9cffafe14..000000000 --- a/src/anim/thought.c +++ /dev/null @@ -1,52 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gBattleAnimBankAttacker; -extern u8 gBattleAnimBankTarget; - -static void sub_80CF008(struct Sprite* sprite); - -// thought (thought bubble) -// Used in Metronome and Taunt. - -void sub_80CEF44(u8 bank, struct Sprite* sprite) -{ - if (GetBankSide(bank) == 0) - sprite->pos1.x = sub_807A100(bank, 5) + 8; - else - sprite->pos1.x = sub_807A100(bank, 4) - 8; - - sprite->pos1.y = sub_8077ABC(bank, 3) - (s16)sub_807A100(bank, 0) / 4; -} - -void sub_80CEF9C(struct Sprite* sprite) -{ - u8 a; - u8 bank; - if (gBattleAnimArgs[0] == 0) - bank = gBattleAnimBankAttacker; - else - bank = gBattleAnimBankTarget; - - sub_80CEF44(bank, sprite); - a = (GetBankSide(bank) == 0) ? 0 : 1; - sprite->data[0] = gBattleAnimArgs[1]; - sprite->data[1] = a + 2; - StartSpriteAnim(sprite, a); - StoreSpriteCallbackInData(sprite, sub_80CF008); - sprite->callback = sub_8078600; -} - -void sub_80CF008(struct Sprite* sprite) -{ - if (--sprite->data[0] == 0) - { - StoreSpriteCallbackInData(sprite, move_anim_8072740); - StartSpriteAnim(sprite, sprite->data[1]); - sprite->callback = sub_8078600; - } -} diff --git a/src/anim/thrashing.c b/src/anim/thrashing.c deleted file mode 100755 index 9811c546a..000000000 --- a/src/anim/thrashing.c +++ /dev/null @@ -1,111 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gBattleAnimBankAttacker; -extern u8 gBattleAnimBankTarget; - -extern struct AffineAnimFrameCmd gUnknown_083D77B0; - -static void sub_80D0A8C(u8 taskId); -static void sub_80D0B3C(u8 taskId); - -// thrashing (the movement of the Pokemon left/right repeatedly, with up/down movements below.) -// Used by Thrash. - -// left/right movements -void sub_80D0A4C(u8 taskId) -{ - struct Task* task = &gTasks[taskId]; - u8 spriteId = GetAnimBankSpriteId(0); - task->data[0] = spriteId; - task->data[1] = 0; - sub_80798F4(task, spriteId, &gUnknown_083D77B0); - task->func = sub_80D0A8C; -} - -void sub_80D0A8C(u8 taskId) -{ - struct Task* task = &gTasks[taskId]; - if (!sub_807992C(task)) - DestroyAnimVisualTask(taskId); -} - -// up/down movements -void sub_80D0AB8(u8 taskId) -{ - struct Task* task = &gTasks[taskId]; - task->data[0] = GetAnimBankSpriteId(0); - task->data[1] = 0; - task->data[2] = 4; - task->data[3] = 7; - task->data[4] = 3; - task->data[5] = gSprites[task->data[0]].pos1.x; - task->data[6] = gSprites[task->data[0]].pos1.y; - task->data[7] = 0; - task->data[8] = 0; - task->data[9] = 2; - if (GetBankSide(gBattleAnimBankAttacker) == 1) - task->data[2] *= -1; - - task->func = sub_80D0B3C; -} - -void sub_80D0B3C(u8 taskId) -{ - struct Task* task = &gTasks[taskId]; - if (++task->data[7] > 2) - { - task->data[7] = 0; - task->data[8]++; - if ((task->data[8] & 1) != 0) - { - gSprites[task->data[0]].pos1.y += task->data[9]; - } - else - { - gSprites[task->data[0]].pos1.y -= task->data[9]; - } - } - switch (task->data[1]) - { - case 0: - gSprites[task->data[0]].pos1.x += task->data[2]; - if (--task->data[3] == 0) - { - task->data[3] = 14; - task->data[1] = 1; - } - break; - case 1: - gSprites[task->data[0]].pos1.x -= task->data[2]; - if (--task->data[3] == 0) - { - task->data[3] = 7; - task->data[1] = 2; - } - break; - case 2: - gSprites[task->data[0]].pos1.x += task->data[2]; - if (--task->data[3] == 0) - { - if (--task->data[4] != 0) - { - task->data[3] = 7; - task->data[1] = 0; - } - else - { - if ((task->data[8] & 1) != 0) - { - gSprites[task->data[0]].pos1.y -= task->data[9]; - } - DestroyAnimVisualTask(taskId); - } - } - break; - } -} diff --git a/src/anim/tile_in.c b/src/anim/tile_in.c deleted file mode 100755 index 5fcbadbb7..000000000 --- a/src/anim/tile_in.c +++ /dev/null @@ -1,51 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gBattleAnimBankAttacker; -extern u8 gBattleAnimBankTarget; - -// tile_in (flips a white tile from the scene into facing the player.) -// Used in Conversion. - -void sub_80CE09C(struct Sprite* sprite) -{ - if (sprite->data[0] == 0) - { - sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 0) + gBattleAnimArgs[0]; - sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 1) + gBattleAnimArgs[1]; - if (NotInBattle()) - sprite->pos1.y += 10; - sprite->data[0]++; - } - - if ((u16)gBattleAnimArgs[7] == 0xFFFF) - move_anim_8072740(sprite); -} - -void sub_80CE108(u8 taskId) -{ - if (gTasks[taskId].data[2] == 1) - { - gBattleAnimArgs[7] = 0xFFFF; - gTasks[taskId].data[2]++; - } - else if (gTasks[taskId].data[2] == 2) - { - DestroyAnimVisualTask(taskId); - } - else - { - if (++gTasks[taskId].data[0] == 4) - { - gTasks[taskId].data[0] = 0; - gTasks[taskId].data[1]++; - REG_BLDALPHA = (gTasks[taskId].data[1] << 8) | (16 - gTasks[taskId].data[1]); - if (gTasks[taskId].data[1] == 16) - gTasks[taskId].data[2]++; - } - } -} diff --git a/src/anim/tile_out.c b/src/anim/tile_out.c deleted file mode 100755 index 8b710268f..000000000 --- a/src/anim/tile_out.c +++ /dev/null @@ -1,81 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" -#include "battle_interface.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gBattleAnimBankAttacker; -extern u8 gBattleAnimBankTarget; - -extern u8 gNoOfAllBanks; -extern u8 gHealthboxIDs[]; - -static void sub_80CE1AC(struct Sprite* sprite); - -// tile_out (makes a tile fly inward into a center point.) -// Used in Conversion 2. - -void sub_80CE17C(struct Sprite* sprite) -{ - sub_8078764(sprite, 0); - sprite->animPaused = 1; - sprite->data[0] = gBattleAnimArgs[2]; - sprite->callback = sub_80CE1AC; -} - -void sub_80CE1AC(struct Sprite* sprite) -{ - if (sprite->data[0]) - { - sprite->data[0]--; - } - else - { - sprite->animPaused = 0; - sprite->data[0] = 30; - sprite->data[2] = sub_8077ABC(gBattleAnimBankAttacker, 2); - sprite->data[4] = sub_8077ABC(gBattleAnimBankAttacker, 3); - sprite->callback = sub_8078B34; - StoreSpriteCallbackInData(sprite, move_anim_8072740); - } -} - -void sub_80CE210(u8 taskId) -{ - if (++gTasks[taskId].data[0] == 4) - { - gTasks[taskId].data[0] = 0; - gTasks[taskId].data[1]++; - REG_BLDALPHA = gTasks[taskId].data[1] | ((16 - gTasks[taskId].data[1]) << 8); - if (gTasks[taskId].data[1] == 16) - DestroyAnimVisualTask(taskId); - } -} - -void unref_sub_80CE260(u8 taskId) -{ - u8 i; - for (i = 0; i < gNoOfAllBanks; i++) - { - if (gBattleAnimArgs[0] == 1 && GetBankSide(i) == 0) - sub_8043DB0(gHealthboxIDs[i]); - - if (gBattleAnimArgs[1] == 1 && GetBankSide(i) == 1) - sub_8043DB0(gHealthboxIDs[i]); - } - - DestroyAnimVisualTask(taskId); -} - -void unref_sub_80CE2D4(u8 taskId) -{ - u8 i; - for (i = 0; i < gNoOfAllBanks; i++) - { - sub_8043DFC(gHealthboxIDs[i]); - } - - DestroyAnimVisualTask(taskId); -} diff --git a/src/anim/twinkle.c b/src/anim/twinkle.c deleted file mode 100755 index 56095c29d..000000000 --- a/src/anim/twinkle.c +++ /dev/null @@ -1,42 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gBattleAnimBankAttacker; -extern u8 gBattleAnimBankTarget; - -static void sub_80CE3B0(struct Sprite* sprite); - -// twinkle (a tiny twinkling star appears above the Pokemon and descends toward the Pokemon.) -// Used in Moonlight. - -void sub_80CE36C(struct Sprite* sprite) -{ - sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 2) + gBattleAnimArgs[0]; - sprite->pos1.y = gBattleAnimArgs[1]; - sprite->data[0] = 0; - sprite->data[1] = 0; - sprite->data[2] = 0; - sprite->data[3] = 0; - sprite->data[4] = 1; - sprite->callback = sub_80CE3B0; -} - -void sub_80CE3B0(struct Sprite* sprite) -{ - if (++sprite->data[1] > 1) - { - sprite->data[1] = 0; - if (sprite->data[2] <= 0x77) - { - sprite->pos1.y++; - sprite->data[2]++; - } - } - - if (sprite->data[0]) - move_anim_8072740(sprite); -} diff --git a/src/anim/unused_1.c b/src/anim/unused_1.c deleted file mode 100755 index fdcef0de9..000000000 --- a/src/anim/unused_1.c +++ /dev/null @@ -1,25 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gBattleAnimBankAttacker; -extern u8 gBattleAnimBankTarget; - -// unused effect file. -// Seems to be a beta effect for Beat Up, possibly. - -void sub_80CC8C8(struct Sprite* sprite) -{ - sprite->pos1.x += gBattleAnimArgs[0]; - sprite->pos1.y += gBattleAnimArgs[1]; - sprite->data[0] = gBattleAnimArgs[2]; - sprite->data[1] = gBattleAnimArgs[3]; - sprite->data[3] = gBattleAnimArgs[4]; - sprite->data[5] = gBattleAnimArgs[5]; - StartSpriteAffineAnim(sprite, gBattleAnimArgs[6]); - StoreSpriteCallbackInData(sprite, move_anim_8074EE0); - sprite->callback = sub_8078504; -} diff --git a/src/anim/unused_2.c b/src/anim/unused_2.c deleted file mode 100755 index f7f5be88d..000000000 --- a/src/anim/unused_2.c +++ /dev/null @@ -1,80 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gBattleAnimBankAttacker; -extern u8 gBattleAnimBankTarget; - -static void sub_80CCCB4(struct Sprite* sprite); - -// unused_2 (unknown effect with music notes.) -// possibly another unused effect. Unknown usage. - -void unref_sub_80CCB6C(struct Sprite* sprite) -{ - if (sprite->data[2] > 1) - { - if (sprite->data[3] & 1) - { - sprite->invisible = 0; - gSprites[sprite->data[0]].invisible = 0; - gSprites[sprite->data[1]].invisible = 0; - } - else - { - sprite->invisible = 1; - gSprites[sprite->data[0]].invisible = 1; - gSprites[sprite->data[1]].invisible = 1; - } - - sprite->data[2] = 0; - sprite->data[3]++; - } - else - { - sprite->data[2]++; - } - - if (sprite->data[3] == 10) - { - DestroySprite(&gSprites[sprite->data[0]]); - DestroySprite(&gSprites[sprite->data[1]]); - move_anim_8072740(sprite); - } -} - -void sub_80CCC50(struct Sprite* sprite) -{ - sprite->data[0] = gBattleAnimArgs[2]; - if (GetBankSide(gBattleAnimBankAttacker) != 0) - sprite->pos1.x -= gBattleAnimArgs[0]; - else - sprite->pos1.x += gBattleAnimArgs[0]; - - StartSpriteAnim(sprite, gBattleAnimArgs[5]); - sprite->data[1] = -gBattleAnimArgs[3]; - sprite->pos1.y += gBattleAnimArgs[1]; - sprite->data[3] = gBattleAnimArgs[4]; - sprite->callback = sub_80CCCB4; - sub_80CCCB4(sprite); -} - -void sub_80CCCB4(struct Sprite* sprite) -{ - sprite->pos2.x = Cos(sprite->data[0], 100); - sprite->pos2.y = Sin(sprite->data[0], 20); - if (sprite->data[0] <= 0x7F) - sprite->subpriority = 0; - else - sprite->subpriority = 14; - - sprite->data[0] = (sprite->data[0] + sprite->data[1]) & 0xFF; - sprite->data[5] += 0x82; - sprite->pos2.y += sprite->data[5] >> 8; - sprite->data[2]++; - if (sprite->data[2] == sprite->data[3]) - move_anim_8072740(sprite); -} diff --git a/src/anim/unused_3.c b/src/anim/unused_3.c deleted file mode 100755 index 049e0ca1b..000000000 --- a/src/anim/unused_3.c +++ /dev/null @@ -1,45 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gBattleAnimBankAttacker; -extern u8 gBattleAnimBankTarget; - -static void sub_80CD2D4(struct Sprite* sprite); - -// unused_3 (seems to be some sort of popping effect with a growing diamond shape) -// yet another unused effect... - -void sub_80CD274(struct Sprite* sprite) -{ - sub_8078650(sprite); - if (GetBankSide(gBattleAnimBankAttacker) == 0) - { - sprite->pos1.x += gBattleAnimArgs[0]; - sprite->pos1.y += gBattleAnimArgs[1]; - } - else - { - sprite->pos1.x -= gBattleAnimArgs[0]; - sprite->pos1.y += gBattleAnimArgs[1]; - StartSpriteAnim(sprite, 1); - } - - sprite->callback = sub_80CD2D4; -} - -void sub_80CD2D4(struct Sprite* sprite) -{ - if (++sprite->data[0] > 30) - { - sprite->pos2.y = (30 - sprite->data[0]) / 3; - sprite->pos2.x = Sin(sprite->data[1] * 4, 3); - sprite->data[1]++; - } - - if (sprite->animEnded) - move_anim_8072740(sprite); -} diff --git a/src/anim/unused_4.c b/src/anim/unused_4.c deleted file mode 100755 index 72ecde05c..000000000 --- a/src/anim/unused_4.c +++ /dev/null @@ -1,58 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gBattleAnimBankAttacker; -extern u8 gBattleAnimBankTarget; - -extern u8 gObjectBankIDs[]; - -static void sub_80CD9D4(struct Sprite* sprite); - -// unused_4 -// Unknown usage. - -void sub_80CD9C4(struct Sprite* sprite) -{ - sprite->data[0] = 0; - sprite->callback = sub_80CD9D4; -} - -void sub_80CD9D4(struct Sprite* sprite) -{ - switch (sprite->data[0]) - { - case 0: - sprite->data[1] = 0; - sprite->data[2] = gObjectBankIDs[gBattleAnimBankAttacker]; - sprite->data[3] = GetBankSide(gBattleAnimBankAttacker); - sprite->data[4] = (sprite->data[3] != 0) ? 0x200 : -0x200; - sprite->data[5] = 0; - sub_8078E70(sprite->data[2], 0); - sprite->data[0]++; - case 1: - sprite->data[5] += sprite->data[4]; - obj_id_set_rotscale(sprite->data[2], 0x100, 0x100, sprite->data[5]); - sub_8078F9C(sprite->data[2]); - if (++sprite->data[1] > 3) - { - sprite->data[1] = 0; - sprite->data[4] *= -1; - sprite->data[0]++; - } - break; - case 2: - sprite->data[5] += sprite->data[4]; - obj_id_set_rotscale(sprite->data[2], 0x100, 0x100, sprite->data[5]); - sub_8078F9C(sprite->data[2]); - if (++sprite->data[1] > 3) - { - sub_8078F40(sprite->data[2]); - move_anim_8072740(sprite); - } - break; - } -} diff --git a/src/anim/unused_5.c b/src/anim/unused_5.c deleted file mode 100755 index 4dc2da70d..000000000 --- a/src/anim/unused_5.c +++ /dev/null @@ -1,25 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gBattleAnimBankAttacker; -extern u8 gBattleAnimBankTarget; - -// unused_5 - -void sub_80CF280(struct Sprite* sprite) -{ - sub_8078650(sprite); - sub_807867C(sprite, gBattleAnimArgs[0]); - sprite->pos1.y += gBattleAnimArgs[1]; - sprite->data[1] = gBattleAnimArgs[2]; - sprite->data[2] = gBattleAnimArgs[4]; - sprite->data[3] = gBattleAnimArgs[5]; - sprite->data[4] = gBattleAnimArgs[3]; - StoreSpriteCallbackInData(sprite, move_anim_8074EE0); - sprite->callback = sub_8078278; - sub_8078278(sprite); -} diff --git a/src/anim/unused_6.c b/src/anim/unused_6.c deleted file mode 100755 index f7c87647f..000000000 --- a/src/anim/unused_6.c +++ /dev/null @@ -1,49 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gBattleAnimBankAttacker; -extern u8 gBattleAnimBankTarget; - -extern void sub_80CEF44(u8 bank, struct Sprite* sprite); -static void sub_80CF310(struct Sprite* sprite); - -// unused_6 - -void sub_80CF2D0(struct Sprite* sprite) -{ - u8 bank; - if (gBattleAnimArgs[0] == 0) - bank = gBattleAnimBankAttacker; - else - bank = gBattleAnimBankTarget; - - sub_80CEF44(bank, sprite); - sprite->data[0] = 0; - sprite->data[1] = 0; - sprite->callback = sub_80CF310; -} - -void sub_80CF310(struct Sprite* sprite) -{ - switch (sprite->data[0]) - { - case 0: - sprite->pos2.y -= 3; - if (++sprite->data[1] == 6) - sprite->data[0]++; - break; - case 1: - sprite->pos2.y += 3; - if (--sprite->data[1] == 0) - sprite->data[0]++; - break; - case 2: - if (++sprite->data[1] == 0x40) - move_anim_8072740(sprite); - break; - } -} diff --git a/src/anim/unused_7.c b/src/anim/unused_7.c deleted file mode 100755 index 3a8998f1d..000000000 --- a/src/anim/unused_7.c +++ /dev/null @@ -1,51 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gBattleAnimBankAttacker; -extern u8 gBattleAnimBankTarget; - -extern u8 gObjectBankIDs[]; - -// unused_7 - -void sub_80CF374(struct Sprite* sprite) -{ - s16 temp; - gSprites[sprite->data[2]].pos2.x += sprite->data[1]; - temp = sprite->data[1]; - sprite->data[1] = -temp; - if (sprite->data[0] == 0) - { - gSprites[sprite->data[2]].pos2.x = 0; - move_anim_8074EE0(sprite); - } - - sprite->data[0]--; -} - -void sub_80CF3C4(struct Sprite* sprite) -{ - u8 a; - sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 2); - sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 3); - a = gObjectBankIDs[gBattleAnimBankTarget]; - if (GetBankSide(gBattleAnimBankAttacker) != 0) - { - sprite->pos1.x -= gBattleAnimArgs[0]; - } - else - { - sprite->pos1.x += gBattleAnimArgs[0]; - } - - sprite->pos1.y += gBattleAnimArgs[1]; - sprite->data[0] = gBattleAnimArgs[2]; - sprite->data[1] = gBattleAnimArgs[3]; - sprite->data[2] = a; - sprite->callback = sub_80CF374; - sprite->invisible = 1; -} diff --git a/src/anim/unused_8.c b/src/anim/unused_8.c deleted file mode 100755 index bcebfcd2b..000000000 --- a/src/anim/unused_8.c +++ /dev/null @@ -1,41 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gBattleAnimBankAttacker; -extern u8 gBattleAnimBankTarget; - -static void sub_80CF490(struct Sprite* sprite); -static void sub_80CF4B8(struct Sprite* sprite); - -// unused_8 - -void sub_80CF458(struct Sprite* sprite) -{ - sub_80787B0(sprite, 1); - sprite->data[0] = gBattleAnimArgs[2]; - sprite->data[1] = gBattleAnimArgs[3]; - sprite->data[5] = gBattleAnimArgs[4]; - sprite->callback = sub_80782D8; - StoreSpriteCallbackInData(sprite, sub_80CF490); -} - -void sub_80CF490(struct Sprite* sprite) -{ - sprite->data[0] = sprite->data[1]; - sprite->data[2] = sprite->pos1.x; - sprite->data[4] = sprite->pos1.y + 15; - sprite->callback = sub_8078B34; - StoreSpriteCallbackInData(sprite, sub_80CF4B8); -} - -void sub_80CF4B8(struct Sprite* sprite) -{ - if (sprite->data[5] == 0) - move_anim_8072740(sprite); - else - sprite->data[5]--; -} diff --git a/src/anim/unused_9.c b/src/anim/unused_9.c deleted file mode 100755 index 579238fbc..000000000 --- a/src/anim/unused_9.c +++ /dev/null @@ -1,113 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gBattleAnimBankAttacker; -extern u8 gBattleAnimBankTarget; - -extern struct SpriteTemplate gSpriteTemplate_83D75AC; - -static void sub_80CFE2C(struct Sprite* sprite); - -// unused_9? (Most likely an unused effect.) -// I cannot find any reference to this sprite template used to call this. - -void sub_80CFDFC(struct Sprite* sprite) -{ - sub_80787B0(sprite, 0); - sprite->data[0] = 0x100 + (IndexOfSpritePaletteTag(gSpriteTemplate_83D75AC.paletteTag) << 4); - sprite->callback = sub_80CFE2C; -} - -#ifdef NONMATCHING -void sub_80CFE2C(struct Sprite* sprite) -{ - u16 r7; - u16* r1; - u16* r2; - int i; - if (++sprite->data[1] == 2) - { - sprite->data[1] = 0; - r7 = gPlttBufferFaded[sprite->data[0] + 8]; - r2 = &gPlttBufferFaded[0x10]; - r1 = &gPlttBufferFaded[sprite->data[0] + 9]; - for (i = 7; i >= 0; i--) - { - *r2 = *r1; - r1++; - r2++; - } - - gPlttBufferFaded[sprite->data[0] + 15] = r7; - if (++sprite->data[2] == 0x18) - move_anim_8072740(sprite); - } -} -#else -__attribute__((naked)) -void sub_80CFE2C(struct Sprite* sprite) -{ - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - adds r4, r0, 0\n\ - ldrh r0, [r4, 0x30]\n\ - adds r0, 0x1\n\ - strh r0, [r4, 0x30]\n\ - lsls r0, 16\n\ - asrs r0, 16\n\ - cmp r0, 0x2\n\ - bne _080CFE90\n\ - movs r0, 0\n\ - strh r0, [r4, 0x30]\n\ - ldrh r5, [r4, 0x2E]\n\ - ldr r1, _080CFE98 @ =gPlttBufferFaded\n\ - adds r0, r5, 0\n\ - adds r0, 0x8\n\ - lsls r0, 1\n\ - adds r0, r1\n\ - ldrh r7, [r0]\n\ - adds r6, r1, 0 @puts gPlttBufferFaded in r6\n\ - adds r1, r5, 0\n\ - adds r1, 0x9\n\ - lsls r0, r5, 1\n\ - adds r0, r6 \n\ - adds r2, r0, 0\n\ - adds r2, 0x10\n\ - movs r3, 0x7\n\ - lsls r1, 1\n\ - adds r1, r6 \n\ -_080CFE64:\n\ - ldrh r0, [r1]\n\ - strh r0, [r2]\n\ - adds r1, 0x2\n\ - adds r2, 0x2\n\ - subs r3, 0x1\n\ - cmp r3, 0\n\ - bge _080CFE64\n\ - adds r0, r5, 0\n\ - adds r0, 0xF\n\ - lsls r0, 1\n\ - adds r0, r6\n\ - strh r7, [r0]\n\ - ldrh r0, [r4, 0x32]\n\ - adds r0, 0x1\n\ - strh r0, [r4, 0x32]\n\ - lsls r0, 16\n\ - asrs r0, 16\n\ - cmp r0, 0x18\n\ - bne _080CFE90\n\ - adds r0, r4, 0\n\ - bl move_anim_8072740\n\ -_080CFE90:\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_080CFE98: .4byte gPlttBufferFaded\n\ -.syntax divided\n"); -} -#endif diff --git a/src/anim/wave_finger.c b/src/anim/wave_finger.c deleted file mode 100755 index 58f0f8778..000000000 --- a/src/anim/wave_finger.c +++ /dev/null @@ -1,39 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gBattleAnimBankAttacker; -extern u8 gBattleAnimBankTarget; - -extern void sub_80CEF44(u8 bank, struct Sprite* sprite); -void sub_80CF088(struct Sprite* sprite); - -// wave_finger -// Used by Metronome. - -void sub_80CF040(struct Sprite* sprite) -{ - u8 bank; - if (gBattleAnimArgs[0] == 0) - bank = gBattleAnimBankAttacker; - else - bank = gBattleAnimBankTarget; - - sub_80CEF44(bank, sprite); - sprite->data[0] = 0; - StoreSpriteCallbackInData(sprite, sub_80CF088); - sprite->callback = sub_80785E4; -} - -void sub_80CF088(struct Sprite* sprite) -{ - if (++sprite->data[0] > 16) - { - StartSpriteAffineAnim(sprite, 1); - StoreSpriteCallbackInData(sprite, move_anim_8074EE0); - sprite->callback = sub_80785E4; - } -} diff --git a/src/anim/whip.c b/src/anim/whip.c deleted file mode 100755 index 3aa0758a9..000000000 --- a/src/anim/whip.c +++ /dev/null @@ -1,46 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gBattleAnimBankAttacker; -extern u8 gBattleAnimBankTarget; - -// whip (does a hitting animation that uses a rotating sprite to invoke the sprite getting hit.) -// Used by Slam and Vine Whip. - -void sub_80CC810(struct Sprite* sprite) -{ - if (sprite->animEnded) - move_anim_8072740(sprite); -} - -// unused, beta effect for diagonal sprite movement? -void sub_80CC82C(struct Sprite* sprite) -{ - if (GetBankSide(gBattleAnimBankAttacker) != 0) - { - sprite->pos1.x -= gBattleAnimArgs[0]; - sprite->pos1.y += gBattleAnimArgs[1]; - } - else - { - sprite->pos1.x += gBattleAnimArgs[0]; - sprite->pos1.y += gBattleAnimArgs[1]; - } - - sprite->callback = sub_8078600; - StoreSpriteCallbackInData(sprite, move_anim_8072740); -} - -void sub_80CC884(struct Sprite* sprite) -{ - if (GetBankSide(gBattleAnimBankAttacker) == 0) - StartSpriteAnim(sprite, 1); - - sprite->callback = sub_80CC810; - sub_807867C(sprite, gBattleAnimArgs[0]); - sprite->pos1.y += gBattleAnimArgs[1]; -} diff --git a/src/anim/withdraw.c b/src/anim/withdraw.c deleted file mode 100755 index 9abcff32d..000000000 --- a/src/anim/withdraw.c +++ /dev/null @@ -1,69 +0,0 @@ -#include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" -#include "battle_anim.h" -#include "sound.h" - -extern s16 gBattleAnimArgs[]; -extern u8 gBattleAnimBankAttacker; -extern u8 gBattleAnimBankTarget; - -extern u8 gObjectBankIDs[]; - -static void sub_80CF514(u8 taskId); - -// withdraw (where a Pokemon leans inward to mimic the effect of withdrawing into a shell.) -// Used in Withdraw. - -void sub_80CF4D8(u8 taskId) -{ - sub_8078E70(gObjectBankIDs[gBattleAnimBankAttacker], 0); - gTasks[taskId].func = sub_80CF514; -} - -void sub_80CF514(u8 taskId) -{ - u8 a = gObjectBankIDs[gBattleAnimBankAttacker]; - s16 b; - if (GetBankSide(gBattleAnimBankAttacker) == 0) - { - b = -gTasks[taskId].data[0]; - } - else - { - b = gTasks[taskId].data[0]; - } - - obj_id_set_rotscale(a, 0x100, 0x100, b); - if (gTasks[taskId].data[1] == 0) - { - gTasks[taskId].data[0] += 0xB0; - gSprites[a].pos2.y++; - } - else if (gTasks[taskId].data[1] == 1) - { - if (++gTasks[taskId].data[3] == 0x1E) - gTasks[taskId].data[1] = 2; - - return; - } - else - { - gTasks[taskId].data[0] -= 0xB0; - gSprites[a].pos2.y--; - } - - sub_8078F9C(a); - if (gTasks[taskId].data[0] == 0xF20 || gTasks[taskId].data[0] == 0) - { - if (gTasks[taskId].data[1] == 2) - { - sub_8078F40(a); - DestroyAnimVisualTask(taskId); - } - else - { - gTasks[taskId].data[1]++; - } - } -} diff --git a/src/battle/anim/alert.c b/src/battle/anim/alert.c new file mode 100755 index 000000000..538008be0 --- /dev/null +++ b/src/battle/anim/alert.c @@ -0,0 +1,33 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +// alert (red thunder from the sides of a Pokemon, simulating more alert behavior.) +// Used in Kinesis. + +void sub_80CF610(struct Sprite* sprite) +{ + sub_8078650(sprite); + sub_807867C(sprite, gBattleAnimArgs[0]); + sprite->pos1.y += gBattleAnimArgs[1]; + if (GetBankSide(gBattleAnimBankAttacker) != 0) + { + sprite->hFlip = 1; + if (gBattleAnimArgs[2] != 0) + sprite->vFlip = 1; + } + else + { + if (gBattleAnimArgs[2] != 0) + sprite->vFlip = 1; + } + + sprite->callback = sub_8078600; + StoreSpriteCallbackInData(sprite, move_anim_8072740); +} diff --git a/src/battle/anim/angel.c b/src/battle/anim/angel.c new file mode 100755 index 000000000..916ebfdfd --- /dev/null +++ b/src/battle/anim/angel.c @@ -0,0 +1,37 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +// angel (a little angel descends from somewhere towards a position) +// Used in Sweet Kiss. + +void sub_80D2938(struct Sprite* sprite) +{ + s16 r5; + if (sprite->data[0] == 0) + { + sprite->pos1.x += gBattleAnimArgs[0]; + sprite->pos1.y += gBattleAnimArgs[1]; + } + + sprite->data[0]++; + r5 = (sprite->data[0] * 10) & 0xFF; + sprite->pos2.x = Sin(r5, 0x50) >> 8; + if (sprite->data[0] <= 0x4F) + sprite->pos2.y = (sprite->data[0] / 2) + (Cos(r5, 0x50) >> 8); + + if (sprite->data[0] > 0x5A) + { + sprite->data[2]++; + sprite->pos2.x -= sprite->data[2] / 2; + } + + if (sprite->data[0] > 0x64) + move_anim_8072740(sprite); +} diff --git a/src/battle/anim/angel_kiss.c b/src/battle/anim/angel_kiss.c new file mode 100755 index 000000000..453c4d802 --- /dev/null +++ b/src/battle/anim/angel_kiss.c @@ -0,0 +1,87 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" +#include "random.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +// angel_kiss (a different variation of kiss_fountain.) +// Used in Sweet Kiss. + +void sub_80D29CC(struct Sprite* sprite) +{ + sprite->data[5]++; + sprite->pos2.x = Sin(sprite->data[3], 5); + sprite->pos2.y = sprite->data[5] / 2; + sprite->data[3] = (sprite->data[3] + 3) & 0xFF; + if (sprite->data[5] > 20) + sprite->invisible = sprite->data[5] % 2; + + if (sprite->data[5] > 30) + move_anim_8072740(sprite); +} + +void sub_80D2A38(struct Sprite* sprite) +{ + if (sprite->data[0] == 0) + { + sprite->data[1] = gBattleAnimArgs[0]; + sprite->data[2] = gBattleAnimArgs[1]; + sprite->data[0]++; + } + else + { + sprite->data[4] += sprite->data[1]; + sprite->pos2.x = sprite->data[4] >> 8; + sprite->pos2.y = Sin(sprite->data[3], sprite->data[2]); + sprite->data[3] = (sprite->data[3] + 3) & 0xFF; + if (sprite->data[3] > 0x46) + { + sprite->callback = sub_80D29CC; + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.x = 0; + sprite->pos2.y = 0; + sprite->data[3] = Random() % 0xB4; + } + } +} + +// this is for the next file, but i didnt feel like deleting it from the original 80C file. +/* void sub_80D2ABC(struct Sprite* sprite) +{ + int var; + s16 var2; + int var3; + if (sprite->data[3] == 0) + { + sprite->pos1.x += gBattleAnimArgs[0]; + sprite->pos1.y += gBattleAnimArgs[1]; + StartSpriteAnim(sprite, 0); + sprite->subpriority = sub_8079E90(gBattleAnimBankTarget) - 1; + sprite->data[2] = 1; + } + + sprite->data[0] += sprite->data[2]; + var = sprite->data[0] * 4; + if (var < 0) + var += 0xFF; + + sprite->data[1] = (sprite->data[0] * 4) -(((var) >> 8) << 8); + if (sprite->data[1] < 0) + sprite->data[1] = 0; + + var3 = sprite->data[1]; + var2 = sprite->data[0]; + var2 /= 4; + sprite->pos2.x = Cos(var3, 30 - var2); + var3 = sprite->data[1]; + var2 = sprite->data[0] / 8; + sprite->pos2.x = Sin(var3, 10 - var2); + if (sprite->data[1] > 0x80 && sprite->data[2] > 0) + sprite->data[2] = 0xFFFF; +} */ diff --git a/src/battle/anim/anger.c b/src/battle/anim/anger.c new file mode 100755 index 000000000..8962e0855 --- /dev/null +++ b/src/battle/anim/anger.c @@ -0,0 +1,34 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +// anger (anger emotes, usually above the Pokemon's head, indicating annoyed emotions.) +// Used in Frustration, Rage, Swagger, Torment, and Taunt. + +void sub_80D09C0(struct Sprite* sprite) +{ + u8 bank; + if (gBattleAnimArgs[0] == 0) + bank = gBattleAnimBankAttacker; + else + bank = gBattleAnimBankTarget; + + if (GetBankSide(bank) == 1) + { + gBattleAnimArgs[1] *= -1; + } + + sprite->pos1.x = sub_8077ABC(bank, 2) + gBattleAnimArgs[1]; + sprite->pos1.y = sub_8077ABC(bank, 3) + gBattleAnimArgs[2]; + if (sprite->pos1.y <= 7) + sprite->pos1.y = 8; + + StoreSpriteCallbackInData(sprite, move_anim_8074EE0); + sprite->callback = sub_80785E4; +} diff --git a/src/battle/anim/blow_kiss.c b/src/battle/anim/blow_kiss.c new file mode 100755 index 000000000..e63f7189d --- /dev/null +++ b/src/battle/anim/blow_kiss.c @@ -0,0 +1,39 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +static void sub_80D1FA4(struct Sprite* sprite); + +// blow_kiss (a heart floating across the screen.) +// Used in Attract. + +void sub_80D1F58(struct Sprite* sprite) +{ + sub_80787B0(sprite, 1); + sprite->data[0] = 0x5F; + sprite->data[1] = sprite->pos1.x; + sprite->data[2] = sub_8077ABC(gBattleAnimBankTarget, 2); + sprite->data[3] = sprite->pos1.y; + sprite->data[4] = sub_8077ABC(gBattleAnimBankTarget, 3); + obj_translate_based_on_private_1_2_3_4(sprite); + sprite->callback = sub_80D1FA4; +} + +void sub_80D1FA4(struct Sprite* sprite) +{ + if (sub_8078B5C(sprite) == 0) + { + sprite->pos2.y += Sin(sprite->data[5], 14); + sprite->data[5] = (sprite->data[5] + 4) & 0xFF; + } + else + { + move_anim_8072740(sprite); + } +} diff --git a/src/battle/anim/bottle.c b/src/battle/anim/bottle.c new file mode 100755 index 000000000..ac5e51881 --- /dev/null +++ b/src/battle/anim/bottle.c @@ -0,0 +1,125 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +static void sub_80CCF70(struct Sprite* sprite); +static void sub_80CD0CC(struct Sprite* sprite, int unk1, int unk2); + +// bottle (shows a bottle swinging back and forth.) +// Used by Milk Drink. + +void sub_80CCF04(struct Sprite* sprite) +{ + sprite->pos1.x = sub_8077ABC(gBattleAnimBankTarget, 2); + sprite->pos1.y = sub_8077ABC(gBattleAnimBankTarget, 3) + 0xFFE8; + sprite->data[0] = 0; + sprite->data[1] = 0; + sprite->data[2] = 0; + sprite->data[3] = 0; + sprite->data[4] = 0; + sprite->data[6] = 0; + sprite->data[7] = 16; + REG_BLDCNT = 0x3F40; + REG_BLDALPHA = (sprite->data[7] << 8) | sprite->data[6]; + sprite->callback = sub_80CCF70; +} + +void sub_80CCF70(struct Sprite* sprite) +{ + switch (sprite->data[0]) + { + case 0: + if (++sprite->data[2] > 0) + { + sprite->data[2] = 0; + if (((++sprite->data[1]) & 1) != 0) + { + if (sprite->data[6] <= 15) + sprite->data[6]++; + } + else if (sprite->data[7] > 0) + sprite->data[7]--; + + REG_BLDALPHA = (sprite->data[7] << 8) | sprite->data[6]; + if (sprite->data[6] == 16 && sprite->data[7] == 0) + { + sprite->data[1] = 0; + sprite->data[0]++; + } + } + break; + case 1: + if (++sprite->data[1] > 8) + { + sprite->data[1] = 0; + StartSpriteAffineAnim(sprite, 1); + sprite->data[0]++; + } + break; + case 2: + sub_80CD0CC(sprite, 16, 4); + if (++sprite->data[1] > 2) + { + sprite->data[1] = 0; + sprite->pos1.y++; + } + + if (++sprite->data[2] <= 29) + break; + + if (sprite->data[2] & 1) + { + if (sprite->data[6] > 0) + sprite->data[6]--; + } + else if (sprite->data[7] <= 15) + { + sprite->data[7]++; + } + + REG_BLDALPHA = (sprite->data[7] << 8) | sprite->data[6]; + if (sprite->data[6] == 0 && sprite->data[7] == 16) + { + sprite->data[1] = 0; + sprite->data[2] = 0; + sprite->data[0]++; + } + break; + case 3: + sprite->invisible = 1; + sprite->data[0]++; + break; + case 4: + REG_BLDCNT = 0; + REG_BLDALPHA = 0; + move_anim_8072740(sprite); + break; + } +} + +void sub_80CD0CC(struct Sprite* sprite, int unk1, int unk2) +{ + if (sprite->data[3] <= 11) + sprite->data[4] += 2; + + if ((u16)(sprite->data[3] - 0x12) <= 0x17) + sprite->data[4] -= 2; + + if ((sprite->data[3]) > 0x2F) + sprite->data[4] += 2; + + sprite->pos2.x = sprite->data[4] / 9; + sprite->pos2.y = sprite->data[4] / 14; + if (sprite->pos2.y < 0) + sprite->pos2.y *= -1; + + sprite->data[3]++; + if (sprite->data[3] > 0x3B) + sprite->data[3] = 0; +} diff --git a/src/battle/anim/brace.c b/src/battle/anim/brace.c new file mode 100755 index 000000000..7b084efbb --- /dev/null +++ b/src/battle/anim/brace.c @@ -0,0 +1,45 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +static void sub_80CDF70(struct Sprite* sprite); + +// brace (the Pokemon prepares to endure a hit) +// Used in Endure. + +void sub_80CDF0C(struct Sprite* sprite) +{ + if (gBattleAnimArgs[0] == 0) + { + sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 0) + gBattleAnimArgs[1]; + sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 1) + gBattleAnimArgs[2]; + } + else + { + sprite->pos1.x = sub_8077ABC(gBattleAnimBankTarget, 0) + gBattleAnimArgs[1]; + sprite->pos1.y = sub_8077ABC(gBattleAnimBankTarget, 1) + gBattleAnimArgs[2]; + } + + sprite->data[0] = 0; + sprite->data[1] = gBattleAnimArgs[3]; + sprite->callback = sub_80CDF70; +} + +void sub_80CDF70(struct Sprite* sprite) +{ + if (++sprite->data[0] > sprite->data[1]) + { + sprite->data[0] = 0; + sprite->pos1.y--; + } + + sprite->pos1.y -= sprite->data[0]; + if (sprite->animEnded) + move_anim_8072740(sprite); +} diff --git a/src/battle/anim/breath.c b/src/battle/anim/breath.c new file mode 100755 index 000000000..0fcc7fa08 --- /dev/null +++ b/src/battle/anim/breath.c @@ -0,0 +1,36 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +// breath (a puff of smoke, usually from the mouth or nose of the Pokemon.) +// Used in Swagger and Bulk Up. + +void sub_80D0930(struct Sprite* sprite) +{ + if (GetBankSide(gBattleAnimBankAttacker) == 0) + { + StartSpriteAnim(sprite, 0); + sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 2) + 32; + sprite->data[1] = 0x40; + } + else + { + StartSpriteAnim(sprite, 1); + sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 2) - 32; + sprite->data[1] = -0x40; + } + + sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 3); + sprite->data[0] = 0x34; + sprite->data[2] = 0; + sprite->data[3] = 0; + sprite->data[4] = 0; + StoreSpriteCallbackInData(sprite, move_anim_8072740); + sprite->callback = sub_8078394; +} diff --git a/src/battle/anim/bullet.c b/src/battle/anim/bullet.c new file mode 100755 index 000000000..11306873a --- /dev/null +++ b/src/battle/anim/bullet.c @@ -0,0 +1,69 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" +#include "random.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +static void sub_80D0030(struct Sprite* sprite); +static void sub_80D00B4(struct Sprite* sprite); + +// bullet (shoot seeds as ammunition.) +// Used by Bullet Seed. + +void sub_80CFFD8(struct Sprite* sprite) +{ + sub_80787B0(sprite, 1); + sprite->data[0] = 20; + sprite->data[2] = sub_8077ABC(gBattleAnimBankTarget, 2); + sprite->data[4] = sub_8077ABC(gBattleAnimBankTarget, 3); + sprite->callback = sub_8078B34; + sprite->affineAnimPaused = 1; + StoreSpriteCallbackInData(sprite, sub_80D0030); +} + +void sub_80D0030(struct Sprite* sprite) +{ + int i; + u16 rand; + s16* ptr; + PlaySE12WithPanning(0xA6, sub_8076F98(0x3F)); + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.y = 0; + sprite->pos2.x = 0; + ptr = &sprite->data[7]; + for (i = 0; i < 8; i++) + { + ptr[i - 7] = 0; + } + + rand = Random(); + sprite->data[6] = 0xFFF4 - (rand & 7); + rand = Random(); + sprite->data[7] = (rand % 0xA0) + 0xA0; + sprite->callback = sub_80D00B4; + sprite->affineAnimPaused = 0; +} + +void sub_80D00B4(struct Sprite* sprite) +{ + sprite->data[0] += sprite->data[7]; + sprite->pos2.x = sprite->data[0] >> 8; + if (sprite->data[7] & 1) + sprite->pos2.x = -sprite->pos2.x; + + sprite->pos2.y = Sin(sprite->data[1], sprite->data[6]); + sprite->data[1] += 8; + if (sprite->data[1] > 0x7E) + { + sprite->data[1] = 0; + sprite->data[2] /= 2; + if (++sprite->data[3] == 1) + move_anim_8072740(sprite); + } +} diff --git a/src/battle/anim/copy_orb.c b/src/battle/anim/copy_orb.c new file mode 100755 index 000000000..96d2910f0 --- /dev/null +++ b/src/battle/anim/copy_orb.c @@ -0,0 +1,46 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +// copy_orb +// Used in Mimic. + +void sub_80CB4CC(struct Sprite* sprite) +{ + switch (sprite->data[0]) + { + case 0: + { + if (GetBankSide(gBattleAnimBankTarget) == 0) + { + s16 a = gBattleAnimArgs[0]; + gBattleAnimArgs[0] = -a; + } + + sprite->pos1.x = sub_8077ABC(gBattleAnimBankTarget, 0) + gBattleAnimArgs[0]; + sprite->pos1.y = sub_8077ABC(gBattleAnimBankTarget, 1) + gBattleAnimArgs[1]; + sprite->invisible = 1; + sprite->data[0]++; + break; + } + case 1: + { + sprite->invisible = 0; + if (sprite->affineAnimEnded) + { + ChangeSpriteAffineAnim(sprite, 1); + sprite->data[0] = 25; + sprite->data[2] = sub_8077ABC(gBattleAnimBankAttacker, 2); + sprite->data[4] = sub_8077ABC(gBattleAnimBankAttacker, 3); + sprite->callback = sub_8078CC0; + StoreSpriteCallbackInData(sprite, move_anim_8072740); + break; + } + } + } +} diff --git a/src/battle/anim/cube.c b/src/battle/anim/cube.c new file mode 100755 index 000000000..250e3f2d1 --- /dev/null +++ b/src/battle/anim/cube.c @@ -0,0 +1,52 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" +#include "songs.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +static void sub_80CE000(struct Sprite* sprite); + +// cube (shows a sphere sharpening into a cube.) +// Used in Sharpen. + +void sub_80CDFB0(struct Sprite* sprite) +{ + sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 2); + sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 3) - 12; + sprite->data[0] = 0; + sprite->data[1] = 2; + sprite->data[2] = 0; + sprite->data[3] = 0; + sprite->data[4] = 0; + sprite->data[5] = sub_8076F98(-0x40); + sprite->callback = sub_80CE000; +} + +void sub_80CE000(struct Sprite* sprite) +{ + if (++sprite->data[0] >= sprite->data[1]) + { + sprite->invisible = !sprite->invisible; + if (!sprite->invisible) + { + sprite->data[4]++; + if (!(sprite->data[4] & 1)) + PlaySE12WithPanning(SE_W207B, sprite->data[5]); + } + + sprite->data[0] = 0; + if (++sprite->data[2] > 1) + { + sprite->data[2] = 0; + sprite->data[1]++; + } + } + + if (sprite->animEnded && sprite->data[1] > 16 && sprite->invisible) + move_anim_8072740(sprite); +} diff --git a/src/battle/anim/curtain.c b/src/battle/anim/curtain.c new file mode 100755 index 000000000..1f34cb173 --- /dev/null +++ b/src/battle/anim/curtain.c @@ -0,0 +1,82 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" +#include "palette.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +extern u16 gUnknown_03004240; +extern u16 gUnknown_030042C4; + +static void sub_80D1D48(u8 taskId); +static void sub_80D1D9C(u8 taskId); + +// curtain (a sweeping blackening curtain in the BG) +// Used in Fake Out. + +void sub_80D1CD0(u8 taskId) +{ + int zero; + bool8 result = NotInBattle(); + u16 var = 0xF0; + if (result) + { + var = 0x98; + zero = 0; + } + else + { + zero = 0; + } + + gUnknown_030042C4 = var; + gUnknown_03004240 = 0xA0; + REG_WIN0H = var; + REG_WIN0V = 0xA0; + REG_WININ = 0x3F1F; + REG_WINOUT = 0x3F3F; + REG_BLDCNT = 0xC8; + REG_BLDY = 0x10; + gTasks[taskId].data[0] = zero; + gTasks[taskId].data[1] = var; + gTasks[taskId].func = sub_80D1D48; +} + +void sub_80D1D48(u8 taskId) +{ + gTasks[taskId].data[0] += 13; + gTasks[taskId].data[1] -= 13; + if (gTasks[taskId].data[0] >= gTasks[taskId].data[1]) + { + gUnknown_030042C4 = 0; + gTasks[taskId].func = sub_80D1D9C; + } + else + { + gUnknown_030042C4 = gTasks[taskId].data[1] | (gTasks[taskId].data[0] << 8); + } +} + +void sub_80D1D9C(u8 taskId) +{ + if (++gTasks[taskId].data[10] == 5) + { + gTasks[taskId].data[11] = 0x88; + RequestSpriteCopy((u8 *)(&gTasks[taskId].data[11]), (u8 *)(®_BLDCNT), 2); + BlendPalettes(sub_80791A8(1, 0, 0, 0, 0, 0, 0), 16, RGB(31, 31, 31)); + } + else if (gTasks[taskId].data[10] > 4) + { + gUnknown_030042C4 = 0; + gUnknown_03004240 = 0; + REG_WININ = 0x3F3F; + REG_WINOUT = 0x3F3F; + REG_BLDCNT = 0; + REG_BLDY = 0; + DestroyAnimVisualTask(taskId); + } +} diff --git a/src/battle/anim/cutter.c b/src/battle/anim/cutter.c new file mode 100755 index 000000000..9859497e5 --- /dev/null +++ b/src/battle/anim/cutter.c @@ -0,0 +1,130 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +static void sub_80CB09C(struct Sprite* sprite); +static void sub_80CB1A4(struct Sprite* sprite); + +// cutter (the cresent shaped leaf used in throwing projectiles for the listed moves.) +// Used by Razor Leaf and Magical Leaf. + +void sub_80CAFD0(struct Sprite* sprite) +{ + sub_80787B0(sprite, 1); + if (GetBankSide(gBattleAnimBankAttacker)) + { + gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + } + + sprite->data[0] = gBattleAnimArgs[4]; + if (!(gBattleAnimArgs[6])) + { + sprite->data[2] = sub_8077ABC(gBattleAnimBankTarget, 2) + gBattleAnimArgs[2]; + sprite->data[4] = sub_8077ABC(gBattleAnimBankTarget, 3) + gBattleAnimArgs[3]; + } + else + { + sub_807A3FC(gBattleAnimBankTarget, 1, &sprite->data[2], &sprite->data[4]); + sprite->data[2] += gBattleAnimArgs[2]; + sprite->data[4] += gBattleAnimArgs[3]; + } + + sprite->data[5] = gBattleAnimArgs[5]; + sub_80786EC(sprite); + if (GetBankSide(gBattleAnimBankAttacker) == GetBankSide(gBattleAnimBankTarget)) + { + sprite->data[0] = 1; + } + else + { + sprite->data[0] = 0; + } + + sprite->callback = sub_80CB09C; +} + +void sub_80CB09C(struct Sprite* sprite) +{ + bool8 c = FALSE; + s16 a = sprite->data[0]; + s16 b = sprite->data[7]; + s16 r0; + + sprite->data[0] = 1; + sub_8078718(sprite); + r0 = sprite->data[7]; + sprite->data[0] = a; + if (b > 0xC8 && r0 <= 0x37 && sprite->oam.affineParam == 0) + sprite->oam.affineParam++; + + if (sprite->oam.affineParam != 0 && sprite->data[0] != 0) + { + sprite->invisible ^= 1; + sprite->oam.affineParam++; + if (sprite->oam.affineParam == 0x1E) + c = TRUE; + } + + if (sprite->pos1.x + sprite->pos2.x > 0x100 + || sprite->pos1.x + sprite->pos2.x < -16 + || sprite->pos1.y + sprite->pos2.y > 0xA0 + || sprite->pos1.y + sprite->pos2.y < -16) + c = TRUE; + + if (c) + move_anim_8072740(sprite); +} + +void sub_80CB144(struct Sprite* sprite) +{ + if (!NotInBattle() && IsDoubleBattle() == TRUE) + { + sub_807A3FC(gBattleAnimBankTarget, 1, &sprite->pos1.x, &sprite->pos1.y); + } + + sprite->pos1.y += 32; + sprite->data[0] = gBattleAnimArgs[0]; + sprite->data[1] = gBattleAnimArgs[1]; + sprite->data[2] = gBattleAnimArgs[2]; + sprite->data[3] = gBattleAnimArgs[3]; + sprite->data[4] = gBattleAnimArgs[4]; + sprite->callback = sub_80CB1A4; +} + +void sub_80CB1A4(struct Sprite* sprite) +{ + if (sprite->data[1] == 0xFF) + { + sprite->pos1.y -= 2; + } + else if (sprite->data[1] > 0) + { + sprite->pos1.y -= 2; + sprite->data[1] -= 2; + } + + sprite->data[5] += sprite->data[2]; + if (sprite->data[0] < sprite->data[4]) + sprite->data[5] += sprite->data[2]; + + sprite->data[5] &= 0xFF; + sprite->pos2.x = Cos(sprite->data[5], sprite->data[3]); + sprite->pos2.y = Sin(sprite->data[5], 5); + if (sprite->data[5] <= 0x7F) + { + sprite->oam.priority = sub_8079ED4(gBattleAnimBankTarget) - 1; + } + else + { + sprite->oam.priority = sub_8079ED4(gBattleAnimBankTarget) + 1; + } + + sprite->data[0]--; + if (!sprite->data[0]) + move_anim_8072740(sprite); +} diff --git a/src/battle/anim/cyclone.c b/src/battle/anim/cyclone.c new file mode 100755 index 000000000..b19304f17 --- /dev/null +++ b/src/battle/anim/cyclone.c @@ -0,0 +1,28 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +// cyclone (creates a circling motion like a cyclone, usually a wind sprite.) +// Used in Razor Wind. + +void sub_80D0118(struct Sprite* sprite) +{ + sub_80787B0(sprite, 0); + if (GetBankSide(gBattleAnimBankAttacker) == 0) + sprite->pos1.y += 16; + + sprite->data[0] = gBattleAnimArgs[4]; + sprite->data[1] = gBattleAnimArgs[2]; + sprite->data[2] = gBattleAnimArgs[5]; + sprite->data[3] = gBattleAnimArgs[6]; + sprite->data[4] = gBattleAnimArgs[3]; + sprite->callback = sub_8078114; + StoreSpriteCallbackInData(sprite, move_anim_8072740); + sprite->callback(sprite); +} diff --git a/src/battle/anim/draw.c b/src/battle/anim/draw.c new file mode 100755 index 000000000..c075af097 --- /dev/null +++ b/src/battle/anim/draw.c @@ -0,0 +1,292 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" +#include "unknown_task.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +extern u16 gUnknown_03004288; +extern u16 gUnknown_030042C0; + +static void sub_80D0D68(u8 taskId); +static void sub_80D0E8C(struct Sprite* sprite); + +// draw (draws the Pokemon into the world using a pencil.) +// Used in Sketch. + +void sub_80D0C88(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + struct UnknownTaskStruct sp; + s16 i; + task->data[0] = sub_8077FC0(gBattleAnimBankTarget) + 32; + task->data[1] = 4; + task->data[2] = 0; + task->data[3] = 0; + task->data[4] = 0; + task->data[5] = 0; + task->data[15] = sub_807A100(gBattleAnimBankTarget, 0); + if (GetBankIdentity_permutated(gBattleAnimBankTarget) == 1) + { + task->data[6] = gUnknown_030042C0; + sp.dest = (u16 *)REG_ADDR_BG1HOFS; + } + else + { + task->data[6] = gUnknown_03004288; + sp.dest = (u16 *)REG_ADDR_BG2HOFS; + } + + for (i = task->data[0] - 0x40; i <= task->data[0];i++) + { + if (i >= 0) + { + gUnknown_03004DE0[0][i] = task->data[6] + 0xF0; + gUnknown_03004DE0[1][i] = task->data[6] + 0xF0; + } + } + + sp.control = 0xa2600001; + sp.unk8 = 1; + sp.unk9 = 0; + sub_80895F8(sp); + task->func = sub_80D0D68; +} + +#ifdef NONMATCHING +void sub_80D0D68(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + + switch (task->data[4]) + { + case 0: + if (++task->data[5] > 20) + task->data[4]++; + break; + case 1: + if (++task->data[1] > 3) + { + task->data[1] = 0; + task->data[2] = task->data[3] & 3; + task->data[5] = task->data[0] - task->data[3]; + switch (task->data[2]) + { + case 0: + break; + case 1: + task->data[5] -= 2; + break; + case 2: + task->data[5] += 1; + break; + case 3: + task->data[5] += 1; + break; + } + + if (task->data[5] >= 0) + { + gUnknown_03004DE0[0][task->data[5]] = task->data[6]; + gUnknown_03004DE0[1][task->data[5]] = task->data[6]; + } + + if (++task->data[3] >= task->data[15]) + { + gUnknown_03004DC0.unk15 = 3; + DestroyAnimVisualTask(taskId); + } + } + break; + } +} +#else +__attribute__((naked)) +void sub_80D0D68(u8 taskId) +{ + asm(".syntax unified\n\ + push {r4,lr}\n\ + lsls r0, 24\n\ + lsrs r4, r0, 24\n\ + lsls r0, r4, 2\n\ + adds r0, r4\n\ + lsls r0, 3\n\ + ldr r1, _080D0D88 @ =gTasks\n\ + adds r3, r0, r1\n\ + movs r1, 0x10\n\ + ldrsh r0, [r3, r1]\n\ + cmp r0, 0\n\ + beq _080D0D8C\n\ + cmp r0, 0x1\n\ + beq _080D0DA2\n\ + b _080D0E22\n\ + .align 2, 0\n\ +_080D0D88: .4byte gTasks\n\ +_080D0D8C:\n\ + ldrh r0, [r3, 0x12]\n\ + adds r0, 0x1\n\ + strh r0, [r3, 0x12]\n\ + lsls r0, 16\n\ + asrs r0, 16\n\ + cmp r0, 0x14\n\ + ble _080D0E22\n\ + ldrh r0, [r3, 0x10]\n\ + adds r0, 0x1\n\ + strh r0, [r3, 0x10]\n\ + b _080D0E22\n\ +_080D0DA2:\n\ + ldrh r0, [r3, 0xA]\n\ + adds r0, 0x1\n\ + strh r0, [r3, 0xA]\n\ + lsls r0, 16\n\ + asrs r0, 16\n\ + cmp r0, 0x3\n\ + ble _080D0E22\n\ + movs r0, 0\n\ + strh r0, [r3, 0xA]\n\ + ldrh r1, [r3, 0xE]\n\ + movs r0, 0x3\n\ + ands r0, r1\n\ + strh r0, [r3, 0xC]\n\ + ldrh r0, [r3, 0x8]\n\ + subs r0, r1\n\ + strh r0, [r3, 0x12]\n\ + movs r2, 0xC\n\ + ldrsh r1, [r3, r2]\n\ + cmp r1, 0x1\n\ + beq _080D0DD8\n\ + cmp r1, 0x1\n\ + ble _080D0DE0\n\ + cmp r1, 0x2\n\ + beq _080D0DDC\n\ + cmp r1, 0x3\n\ + beq _080D0DDC\n\ + b _080D0DE0\n\ +_080D0DD8:\n\ + subs r0, 0x2\n\ + b _080D0DDE\n\ +_080D0DDC:\n\ + adds r0, 0x1\n\ +_080D0DDE:\n\ + strh r0, [r3, 0x12]\n\ +_080D0DE0:\n\ + movs r1, 0x12\n\ + ldrsh r0, [r3, r1]\n\ + cmp r0, 0\n\ + blt _080D0E04\n\ + ldr r2, _080D0E28 @ =gUnknown_03004DE0\n\ + lsls r0, 1\n\ + adds r0, r2\n\ + ldrh r1, [r3, 0x14]\n\ + strh r1, [r0]\n\ + movs r1, 0x12\n\ + ldrsh r0, [r3, r1]\n\ + lsls r0, 1\n\ + movs r1, 0xF0\n\ + lsls r1, 3\n\ + adds r2, r1\n\ + adds r0, r2\n\ + ldrh r1, [r3, 0x14]\n\ + strh r1, [r0]\n\ +_080D0E04:\n\ + ldrh r0, [r3, 0xE]\n\ + adds r0, 0x1\n\ + strh r0, [r3, 0xE]\n\ + lsls r0, 16\n\ + asrs r0, 16\n\ + movs r2, 0x26\n\ + ldrsh r1, [r3, r2]\n\ + cmp r0, r1\n\ + blt _080D0E22\n\ + ldr r1, _080D0E2C @ =gUnknown_03004DC0\n\ + movs r0, 0x3\n\ + strb r0, [r1, 0x15]\n\ + adds r0, r4, 0\n\ + bl DestroyAnimVisualTask\n\ +_080D0E22:\n\ + pop {r4}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_080D0E28: .4byte gUnknown_03004DE0\n\ +_080D0E2C: .4byte gUnknown_03004DC0\n\ +.syntax divided\n"); +} +#endif + +void sub_80D0E30(struct Sprite* sprite) +{ + sprite->pos1.x = sub_8077ABC(gBattleAnimBankTarget, 0) - 16; + sprite->pos1.y = sub_8077FC0(gBattleAnimBankTarget) + 16; + sprite->data[0] = 0; + sprite->data[1] = 0; + sprite->data[2] = 0; + sprite->data[3] = 16; + sprite->data[4] = 0; + sprite->data[5] = sub_807A100(gBattleAnimBankTarget, 0) + 2; + sprite->data[6] = sub_8076F98(0x3F); + sprite->callback = sub_80D0E8C; +} + +void sub_80D0E8C(struct Sprite* sprite) +{ + switch (sprite->data[0]) + { + case 0: + if (++sprite->data[2] > 1) + { + sprite->data[2] = 0; + sprite->invisible = !sprite->invisible; + } + if (++sprite->data[1] > 16) + { + sprite->invisible = 0; + sprite->data[0]++; + } + break; + case 1: + if (++sprite->data[1] > 3 && sprite->data[2] < sprite->data[5]) + { + sprite->data[1] = 0; + sprite->pos1.y -= 1; + sprite->data[2]++; + if (sprite->data[2] % 10 == 0) + PlaySE12WithPanning(0xCD, sprite->data[6]); + } + sprite->data[4] += sprite->data[3]; + if (sprite->data[4] > 31) + { + sprite->data[4] = 0x40 - sprite->data[4]; + sprite->data[3] *= -1; + } + else if (sprite->data[4] <= -32) + { + sprite->data[4] = -0x40 - sprite->data[4]; + sprite->data[3] *= -1; + } + sprite->pos2.x = sprite->data[4]; + if (sprite->data[5] == sprite->data[2]) + { + sprite->data[1] = 0; + sprite->data[2] = 0; + sprite->data[0]++; + } + break; + case 2: + if (++sprite->data[2] > 1) + { + sprite->data[2] = 0; + sprite->invisible = !sprite->invisible; + } + if (++sprite->data[1] > 16) + { + sprite->invisible = 0; + move_anim_8072740(sprite); + } + break; + } +} diff --git a/src/battle/anim/drum.c b/src/battle/anim/drum.c new file mode 100755 index 000000000..60cb2acc1 --- /dev/null +++ b/src/battle/anim/drum.c @@ -0,0 +1,32 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +// drum (using hands to slap the Pokemon's belly in a rhythm.) +// Used in Belly Drum. + +void sub_80CEDF0(struct Sprite* sprite) +{ + s16 a; + if (gBattleAnimArgs[0] == 1) + { + sprite->oam.matrixNum = 8; + a = 16; + } + else + { + a = -16; + } + + sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 2) + a; + sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 3) + 8; + sprite->data[0] = 8; + sprite->callback = sub_80782D8; + StoreSpriteCallbackInData(sprite, move_anim_8072740); +} diff --git a/src/battle/anim/egg.c b/src/battle/anim/egg.c new file mode 100755 index 000000000..a5bcffa6d --- /dev/null +++ b/src/battle/anim/egg.c @@ -0,0 +1,122 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +static void sub_80D13AC(struct Sprite* sprite); +static void sub_80D1424(struct Sprite* sprite); +static void sub_80D144C(struct Sprite* sprite); +static void sub_80D14C4(struct Sprite* sprite); +static void sub_80D1504(struct Sprite* sprite); +static void sub_80D154C(struct Sprite* sprite); +static void sub_80D158C(struct Sprite* sprite); + +// egg (a hatching egg) +// Used in Softboiled. + +void sub_80D1368(struct Sprite* sprite) +{ + s16 r1; + sub_80787B0(sprite, 0); + r1 = (GetBankSide(gBattleAnimBankAttacker)) ? -0xA0 : 0xA0; + sprite->data[0] = 0x380; + sprite->data[1] = r1; + sprite->data[7] = gBattleAnimArgs[2]; + sprite->callback = sub_80D13AC; +} + +void sub_80D13AC(struct Sprite* sprite) +{ + s16 add; + sprite->pos2.y -= (sprite->data[0] >> 8); + sprite->pos2.x = sprite->data[1] >> 8; + sprite->data[0] -= 32; + add = (GetBankSide(gBattleAnimBankAttacker)) ? -0xA0 : 0xA0; + sprite->data[1] += add; + if (sprite->pos2.y > 0) + { + sprite->pos1.y += sprite->pos2.y; + sprite->pos1.x += sprite->pos2.x; + sprite->pos2.y = 0; + sprite->pos2.x = 0; + sprite->data[0] = 0; + StartSpriteAffineAnim(sprite, 1); + sprite->callback = sub_80D1424; + } +} + +void sub_80D1424(struct Sprite* sprite) +{ + if (sprite->data[0]++ > 19) + { + StartSpriteAffineAnim(sprite, 2); + sprite->callback = sub_80D144C; + } +} + +void sub_80D144C(struct Sprite* sprite) +{ + if (sprite->affineAnimEnded) + { + StartSpriteAffineAnim(sprite, 1); + sprite->data[0] = 0; + if (sprite->data[7] == 0) + { + sprite->oam.tileNum += 16; + sprite->callback = sub_80D14C4; + } + else + { + sprite->oam.tileNum += 32; + sprite->callback = sub_80D154C; + } + } +} + +void sub_80D14C4(struct Sprite* sprite) +{ + sprite->pos2.y -= 2; + if (++sprite->data[0] == 9) + { + sprite->data[0] = 16; + sprite->data[1] = 0; + REG_BLDCNT = 0x3F40; + REG_BLDALPHA = sprite->data[0]; + sprite->callback = sub_80D1504; + } +} + +void sub_80D1504(struct Sprite* sprite) +{ + if (sprite->data[1]++ % 3 == 0) + { + sprite->data[0]--; + REG_BLDALPHA = sprite->data[0] | ((16 - sprite->data[0]) << 8); + if (sprite->data[0] == 0) + sprite->callback = sub_80D154C; + } +} + +void sub_80D154C(struct Sprite* sprite) +{ + if ((u16)gBattleAnimArgs[7] == 0xFFFF) + { + sprite->invisible = 1; + if (sprite->data[7] == 0) + sprite->callback = sub_80D158C; + else + sprite->callback = move_anim_8072740; + } +} + +void sub_80D158C(struct Sprite* sprite) +{ + REG_BLDCNT = 0; + REG_BLDALPHA = 0; + move_anim_8072740(sprite); +} diff --git a/src/battle/anim/espeed.c b/src/battle/anim/espeed.c new file mode 100755 index 000000000..621d386e1 --- /dev/null +++ b/src/battle/anim/espeed.c @@ -0,0 +1,241 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +extern s8 gUnknown_083D7A00[4][2]; + +extern struct AffineAnimFrameCmd gUnknown_083D79BC; +extern struct SpriteTemplate gSpriteTemplate_83D79E8; + +static void sub_80D15E0(u8 taskId); +static void sub_80D16A0(u8 taskId); +static void sub_80D1808(u8 taskId); +static void sub_80D1930(u8 taskId); + +// espeed (the Pokemon's width decreases as the sprite becomes vertically compressed) +// Used in Extremespeed. + +// apply espeed +void sub_80D15A4(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + u8 spriteId = GetAnimBankSpriteId(0); + task->data[0] = spriteId; + sub_80798F4(task, spriteId, &gUnknown_083D79BC); + task->func = sub_80D15E0; +} + +void sub_80D15E0(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + if (sub_807992C(task) == 0) + { + gSprites[task->data[0]].pos2.y = 0; + gSprites[task->data[0]].invisible = 1; + DestroyAnimVisualTask(taskId); + } +} + +// espeed hit effect +void sub_80D1638(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + task->data[0] = 0; + task->data[1] = 0; + task->data[2] = 0; + task->data[3] = 0; + task->data[12] = 3; + if (GetBankSide(gBattleAnimBankTarget) == 0) + { + task->data[13] = 0xFFFF; + task->data[14] = 8; + } + else + { + task->data[13] = 1; + task->data[14] = -8; + } + + task->data[15] = GetAnimBankSpriteId(1); + task->func = sub_80D16A0; +} + +void sub_80D16A0(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + + switch (task->data[0]) + { + case 0: + gSprites[task->data[15]].pos2.x += task->data[14]; + task->data[1] = 0; + task->data[2] = 0; + task->data[3] = 0; + task->data[0]++; + break; + case 1: + if (++task->data[1] > 1) + { + task->data[1] = 0; + task->data[2]++; + if (task->data[2] & 1) + gSprites[task->data[15]].pos2.x += 6; + else + gSprites[task->data[15]].pos2.x -= 6; + + if (++task->data[3] > 4) + { + if (task->data[2] & 1) + gSprites[task->data[15]].pos2.x -= 6; + + task->data[0]++; + } + } + break; + case 2: + if (--task->data[12] != 0) + task->data[0] = 0; + else + task->data[0]++; + break; + case 3: + gSprites[task->data[15]].pos2.x += task->data[13]; + if (gSprites[task->data[15]].pos2.x == 0) + DestroyAnimVisualTask(taskId); + break; + } +} + +// espeed poke flicker in +void sub_80D17C4(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + task->data[0] = 0; + task->data[1] = 0; + task->data[2] = 0; + task->data[3] = 0; + task->data[4] = 1; + task->data[13] = 14; + task->data[14] = 2; + task->data[15] = GetAnimBankSpriteId(0); + task->func = sub_80D1808; +} + +void sub_80D1808(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + if (task->data[0] == 0 && ++task->data[1] > task->data[4]) + { + task->data[1] = 0; + if (++task->data[2] & 1) + gSprites[task->data[15]].invisible = 0; + else + gSprites[task->data[15]].invisible = 1; + + if (++task->data[3] >= task->data[13]) + { + if (++task->data[4] < task->data[14]) + { + task->data[1] = 0; + task->data[2] = 0; + task->data[3] = 0; + } + else + { + gSprites[task->data[15]].invisible = 0; + DestroyAnimVisualTask(taskId); + } + } + } +} + +// espeed smoke flicker +void sub_80D18D4(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + task->data[0] = 0; + task->data[1] = 4; + task->data[2] = 0; + task->data[3] = 0; + task->data[4] = 0; + task->data[5] = 0; + task->data[6] = 0; + task->data[7] = 0; + task->data[8] = 0; + task->data[13] = 0; + task->data[14] = sub_8077ABC(gBattleAnimBankAttacker, 0); + task->data[15] = sub_8077ABC(gBattleAnimBankAttacker, 1); + task->func = sub_80D1930; +} + +void sub_80D1930(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + switch (task->data[8]) + { + case 0: + if (++task->data[4] > 1) + { + task->data[4] = 0; + task->data[5] = (task->data[5] + 1) & 1; + if (++task->data[6] > 20) + { + if (task->data[7] == 0) + { + task->data[6] = 0; + task->data[8] = 1; + } + else + task->data[8] = 2; + } + } + break; + case 1: + task->data[5] = 0; + if (++task->data[4] > 20) + { + task->data[7] = 1; + task->data[8] = 0; + } + break; + case 2: + task->data[5] = 1; + break; + } + + switch (task->data[0]) + { + case 0: + if (++task->data[1] > 4) + { + u8 spriteId; + task->data[1] = 0; + spriteId = CreateSprite(&gSpriteTemplate_83D79E8, task->data[14], task->data[15], 0); + if (spriteId != MAX_SPRITES) + { + gSprites[spriteId].data[0] = taskId; + gSprites[spriteId].data[1] = 13; + gSprites[spriteId].pos2.x = gUnknown_083D7A00[task->data[2]][0]; + gSprites[spriteId].pos2.y = gUnknown_083D7A00[task->data[2]][1]; + task->data[13]++; + if (++task->data[2] > 3) + { + task->data[2] = 0; + if (++task->data[3] > 5) + task->data[0]++; + } + } + } + break; + case 1: + if (task->data[13] == 0) + DestroyAnimVisualTask(taskId); + break; + } +} diff --git a/src/battle/anim/evasion.c b/src/battle/anim/evasion.c new file mode 100755 index 000000000..b4e81009b --- /dev/null +++ b/src/battle/anim/evasion.c @@ -0,0 +1,95 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" +#include "palette.h" +#include "blend_palette.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +static void sub_80CE910(u8 taskId); +static void sub_80CE974(struct Sprite* sprite); + +// evasion (the shadow seen during evasion increases, mainly Double Team.) +// Used by Double Team. + +void sub_80CE7E0(u8 taskId) +{ + u16 i; + int obj; + u16 r3; + u16 r4; + struct Task* task = &gTasks[taskId]; + task->data[0] = GetAnimBankSpriteId(0); + task->data[1] = AllocSpritePalette(0x2771); + r3 = (task->data[1] * 16) + 0x100; + r4 = (gSprites[task->data[0]].oam.paletteNum + 16) << 4; + for (i = 1; i < 16; i++) + { + gPlttBufferUnfaded[r3 + i] = gPlttBufferUnfaded[r4 + i]; + } + + BlendPalette(r3, 16, 11, 0); + task->data[3] = 0; + i = 0; + while (i <= 1 && (obj = duplicate_obj_of_side_rel2move_in_transparent_mode(0)) >= 0) + { + gSprites[obj].oam.paletteNum = task->data[1]; + gSprites[obj].data[0] = 0; + gSprites[obj].data[1] = i << 7; + gSprites[obj].data[2] = taskId; + gSprites[obj].callback = sub_80CE974; + task->data[3]++; + i++; + } + + task->func = sub_80CE910; + if (GetBankIdentity_permutated(gBattleAnimBankAttacker) == 1) + { + REG_DISPCNT &= 0xFDFF; + } + else + { + REG_DISPCNT &= 0xFBFF; + } +} + +void sub_80CE910(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + if (!task->data[3]) + { + if (GetBankIdentity_permutated(gBattleAnimBankAttacker) == 1) + REG_DISPCNT |= 0x200; + else + REG_DISPCNT |= 0x400; + + FreeSpritePaletteByTag(0x2771); + DestroyAnimVisualTask(taskId); + } +} + +void sub_80CE974(struct Sprite* sprite) +{ + if (++sprite->data[3] > 1) + { + sprite->data[3] = 0; + sprite->data[0]++; + } + + if (sprite->data[0] > 0x40) + { + gTasks[sprite->data[2]].data[3]--; + obj_delete_but_dont_free_vram(sprite); + } + else + { + sprite->data[4] = gSineTable[sprite->data[0]] / 6; + sprite->data[5] = gSineTable[sprite->data[0]] / 13; + sprite->data[1] = (sprite->data[1] + sprite->data[5]) & 0xFF; + sprite->pos2.x = Sin(sprite->data[1], sprite->data[4]); + } +} diff --git a/src/battle/anim/fang.c b/src/battle/anim/fang.c new file mode 100755 index 000000000..4df450691 --- /dev/null +++ b/src/battle/anim/fang.c @@ -0,0 +1,19 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +// fang +// Used by Super Fang (and probably Hyper Fang, but the actual callbacks are not in this file.) +// (Look into this one later.) + +void sub_80CEA04(struct Sprite* sprite) +{ + StoreSpriteCallbackInData(sprite, move_anim_8072740); + sprite->callback = sub_8078600; +} diff --git a/src/battle/anim/flash.c b/src/battle/anim/flash.c new file mode 100755 index 000000000..0e087ec2d --- /dev/null +++ b/src/battle/anim/flash.c @@ -0,0 +1,123 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" +#include "palette.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +extern struct SpriteTemplate gBattleAnimSpriteTemplate_83D6FC8; +extern struct SpriteTemplate gBattleAnimSpriteTemplate_83D6FF8; + +static void sub_80CE4D4(u8 taskId); + +// flash (a "ting!" flash effect.) +// Used in Moonlight. + +void sub_80CE3EC(u8 taskId) +{ + int a = sub_80791A8(1, 0, 0, 0, 0, 0, 0) & 0xFFFF; + int b; + int c; + int d; + + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[1] = 0; + gTasks[taskId].data[2] = 0; + gTasks[taskId].data[3] = a; + gTasks[taskId].data[4] = 0; + gTasks[taskId].data[5] = 0; + gTasks[taskId].data[6] = 0; + gTasks[taskId].data[7] = 13; + gTasks[taskId].data[8] = 14; + gTasks[taskId].data[9] = 15; + b = sub_80792C0(1, 1, 1, 1); + c = a | b; + sub_8079BF4(&gTasks[taskId].data[14], &gTasks[taskId].data[15], (void*)c); + b = b | (0x10000 << IndexOfSpritePaletteTag(0x27D2)); + d = IndexOfSpritePaletteTag(0x27D3); + BeginNormalPaletteFade((0x10000 << d) | b, 0, 0, 0x10, 32699); + gTasks[taskId].func = sub_80CE4D4; + sub_80CE4D4(taskId); +} + +void sub_80CE4D4(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + switch (task->data[0]) + { + case 0: + if (++task->data[1] > 0) + { + u16 color; + u16 bitmask; + u16 r3; + u16 i; + u16 j; + task->data[1] = 0; + if (++task->data[2] <= 15) + { + u16 red; + u16 green; + u16 blue; + task->data[4] += task->data[7]; + task->data[5] += task->data[8]; + task->data[6] += task->data[9]; + red = task->data[4] >> 3; + green = task->data[5] >> 3; + blue = task->data[6] >> 3; + color = RGB(red, green, blue); + } + else + { + color = RGB(27, 29, 31); + task->data[0]++; + } + + bitmask = 1; + r3 = 0; + for (i = 0; i <= 15; i++) + { + if (task->data[3] & bitmask) + { + for (j = 1; j <= 15; j++) + { + gPlttBufferFaded[r3 + j] = color; + } + } + + bitmask <<= 1; + r3 += 16; + } + } + break; + case 1: + if (!gPaletteFade.active) + { + u8 spriteId; + for (spriteId = 0; spriteId < MAX_SPRITES; spriteId++) + { + if (gSprites[spriteId].template == &gBattleAnimSpriteTemplate_83D6FC8 || gSprites[spriteId].template == &gBattleAnimSpriteTemplate_83D6FF8) + gSprites[spriteId].data[0] = 1; + } + + task->data[1] = 0; + task->data[0]++; + } + break; + case 2: + if (++task->data[1] > 30) + { + BeginNormalPaletteFade((u32)sub_8079BFC(task->data[14], task->data[15]), 0, 16, 0, RGB(27, 29, 31)); + task->data[0]++; + } + break; + case 3: + if (!gPaletteFade.active) + DestroyAnimVisualTask(taskId); + break; + } +} diff --git a/src/battle/anim/flying_hearts.c b/src/battle/anim/flying_hearts.c new file mode 100755 index 000000000..5b7d31a51 --- /dev/null +++ b/src/battle/anim/flying_hearts.c @@ -0,0 +1,40 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +static void sub_80D2094(struct Sprite* sprite); + +// flying_hearts (hearts float upward from the bottom of the screen.) +// Used in Attract. + +void sub_80D2064(struct Sprite* sprite) +{ + sprite->pos1.x = gBattleAnimArgs[0]; + sprite->pos1.y = 0xA0; + sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[1] = gBattleAnimArgs[1]; + sprite->callback = sub_80782D8; + StoreSpriteCallbackInData(sprite, sub_80D2094); +} + +void sub_80D2094(struct Sprite* sprite) +{ + s16 y; + sprite->data[2] += sprite->data[1]; + sprite->pos2.y = -((u16)sprite->data[2] >> 8); + sprite->pos2.x = Sin(sprite->data[3], 4); + sprite->data[3] = (sprite->data[3] + 3) & 0xFF; + y = sprite->pos1.y + sprite->pos2.y; + if (y <= 0x48) + { + sprite->invisible = sprite->data[3] % 2; + if (y <= 0x40) + move_anim_8072740(sprite); + } +} diff --git a/src/battle/anim/flying_path.c b/src/battle/anim/flying_path.c new file mode 100755 index 000000000..017f89858 --- /dev/null +++ b/src/battle/anim/flying_path.c @@ -0,0 +1,296 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +extern struct SpriteTemplate gSpriteTemplate_83D6884; + +static void sub_80CBF5C(u8 taskId); +static s16 sub_80CC338(struct Sprite* sprite); +static void sub_80CC358(struct Task* task, u8 taskId); +static void sub_80CC408(struct Sprite* sprite); + +// flying_path (guides a sprite along a specific path.) +// Used by Leaf Blade. + +void sub_80CBDF4(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + task->data[4] = sub_8079E90(gBattleAnimBankTarget) - 1; + task->data[6] = sub_8077ABC(gBattleAnimBankTarget, 2); + task->data[7] = sub_8077ABC(gBattleAnimBankTarget, 3); + task->data[10] = sub_807A100(gBattleAnimBankTarget, 1); + task->data[11] = sub_807A100(gBattleAnimBankTarget, 0); + task->data[5] = (GetBankSide(gBattleAnimBankTarget) == 1) ? 1 : -1; + task->data[9] = 0x38 - (task->data[5] * 64); + task->data[8] = task->data[7] - task->data[9] + task->data[6]; + task->data[2] = CreateSprite(&gSpriteTemplate_83D6884, task->data[8], task->data[9], task->data[4]); + if (task->data[2] == 0x40) + DestroyAnimVisualTask(taskId); + + gSprites[task->data[2]].data[0] = 10; + gSprites[task->data[2]].data[1] = task->data[8]; + gSprites[task->data[2]].data[2] = task->data[6] - (task->data[10] / 2 + 10) * task->data[5]; + gSprites[task->data[2]].data[3] = task->data[9]; + gSprites[task->data[2]].data[4] = task->data[7] + (task->data[11] / 2 + 10) * task->data[5]; + gSprites[task->data[2]].data[5] = sub_80CC338(&gSprites[task->data[2]]); + sub_80786EC(&gSprites[task->data[2]]); + task->func = sub_80CBF5C; +} + +void sub_80CBF5C(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + struct Sprite* sprite = &gSprites[task->data[2]]; + int a = task->data[0]; + switch (a) + { + case 4: + sub_80CC358(task, taskId); + if (sub_8078718(sprite) == 0) + { + break; + } + else + { + task->data[15] = 5; + task->data[0] = 0xFF; + } + break; + case 8: + sub_80CC358(task, taskId); + if (sub_8078718(sprite) == 0) + { + break; + } + else + { + task->data[15] = 9; + task->data[0] = 0xFF; + } + break; + case 0: + sub_80CC358(task, taskId); + if (sub_8078718(sprite) == 0) + break; + + task->data[15] = 1; + task->data[0] = 0xFF; + break; + case 1: + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.x = 0; + sprite->pos2.y = 0; + sprite->data[0] = 10; + sprite->data[1] = sprite->pos1.x; + sprite->data[2] = task->data[6]; + sprite->data[3] = sprite->pos1.y; + sprite->data[4] = task->data[7]; + sprite->data[5] = sub_80CC338(sprite); + task->data[4] += 2; + task->data[3] = a; + sprite->subpriority = task->data[4]; + StartSpriteAnim(sprite, task->data[3]); + sub_80786EC(sprite); + task->data[0]++; + break; + case 2: + sub_80CC358(task, taskId); + if (sub_8078718(sprite) == 0) + break; + + task->data[15] = 3; + task->data[0] = 0xFF; + break; + case 3: + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.x = 0; + sprite->pos2.y = 0; + sprite->data[0] = 10; + sprite->data[1] = sprite->pos1.x; + sprite->data[2] = task->data[6] - ((task->data[10] / 2) + 10) * task->data[5]; + sprite->data[3] = sprite->pos1.y; + sprite->data[4] = task->data[7] - ((task->data[11] / 2) + 10) * task->data[5]; + sprite->data[5] = sub_80CC338(sprite); + task->data[3] = 2; + sprite->subpriority = task->data[4]; + StartSpriteAnim(sprite, task->data[3]); + sub_80786EC(sprite); + task->data[0]++; + break; + case 5: + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.x = 0; + sprite->pos2.y = 0; + sprite->data[0] = 10; + sprite->data[1] = sprite->pos1.x; + sprite->data[2] = task->data[6] + ((task->data[10] / 2) + 10) * task->data[5]; + sprite->data[3] = sprite->pos1.y; + sprite->data[4] = task->data[7] + ((task->data[11] / 2) + 10) * task->data[5]; + sprite->data[5] = sub_80CC338(sprite); + task->data[4] -= 2; + task->data[3] = 3; + sprite->subpriority = task->data[4]; + StartSpriteAnim(sprite, task->data[3]); + sub_80786EC(sprite); + task->data[0]++; + break; + case 6: + sub_80CC358(task, taskId); + if (sub_8078718(sprite) == 0) + break; + + task->data[15] = 7; + task->data[0] = 0xFF; + break; + case 7: + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.x = 0; + sprite->pos2.y = 0; + sprite->data[0] = 10; + sprite->data[1] = sprite->pos1.x; + sprite->data[2] = task->data[6]; + sprite->data[3] = sprite->pos1.y; + sprite->data[4] = task->data[7]; + sprite->data[5] = sub_80CC338(sprite); + task->data[4] += 2; + task->data[3] = 4; + sprite->subpriority = task->data[4]; + StartSpriteAnim(sprite, task->data[3]); + sub_80786EC(sprite); + task->data[0]++; + break; + case 9: + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.x = 0; + sprite->pos2.y = 0; + sprite->data[0] = 10; + sprite->data[1] = sprite->pos1.x; + sprite->data[2] = task->data[6] - ((task->data[10] / 2) + 10) * task->data[5]; + sprite->data[3] = sprite->pos1.y; + sprite->data[4] = task->data[7] + ((task->data[11] / 2) + 10) * task->data[5]; + sprite->data[5] = sub_80CC338(sprite); + task->data[3] = 5; + sprite->subpriority = task->data[4]; + StartSpriteAnim(sprite, task->data[3]); + sub_80786EC(sprite); + task->data[0]++; + break; + case 10: + sub_80CC358(task, taskId); + if (sub_8078718(sprite) == 0) + { + break; + } + else + { + task->data[15] = 11; + task->data[0] = 0xFF; + } + break; + case 11: + { + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.x = 0; + sprite->pos2.y = 0; + sprite->data[0] = 10; + sprite->data[1] = sprite->pos1.x; + sprite->data[2] = task->data[8]; + sprite->data[3] = sprite->pos1.y; + sprite->data[4] = task->data[9]; + sprite->data[5] = sub_80CC338(sprite); + task->data[4] -= 2; + task->data[3] = 6; + sprite->subpriority = task->data[4]; + StartSpriteAnim(sprite, task->data[3]); + sub_80786EC(sprite); + task->data[0]++; + break; + } + case 12: + sub_80CC358(task, taskId); + if (sub_8078718(sprite) != 0) + { + DestroySprite(sprite); + task->data[0]++; + } + break; + case 13: + if (task->data[12] == 0) + { + DestroyAnimVisualTask(taskId); + } + break; + case 255: + task->data[1]++; + if (task->data[1] > 5) + { + task->data[1] = 0; + task->data[0] = task->data[15]; + } + break; + } +} + +s16 sub_80CC338(struct Sprite* sprite) +{ + s16 var = 8; + if (sprite->data[4] < sprite->pos1.y) + var = -var; + + return var; +} + +void sub_80CC358(struct Task* task, u8 taskId) +{ + task->data[14]++; + if (task->data[14] > 0) + { + u8 spriteId; + s16 spriteX; + s16 spriteY; + task->data[14] = 0; + spriteX = gSprites[task->data[2]].pos1.x + gSprites[task->data[2]].pos2.x; + spriteY = gSprites[task->data[2]].pos1.y + gSprites[task->data[2]].pos2.y; + spriteId = CreateSprite(&gSpriteTemplate_83D6884, spriteX, spriteY, task->data[4]); + if (spriteId != 0x40) + { + gSprites[spriteId].data[6] = taskId; + gSprites[spriteId].data[7] = 12; + gTasks[taskId].data[12]++; + gSprites[spriteId].data[0] = task->data[13] & 1; + gTasks[taskId].data[13]++; + StartSpriteAnim(&gSprites[spriteId], task->data[3]); + gSprites[spriteId].subpriority = task->data[4]; + gSprites[spriteId].callback = sub_80CC408; + } + } +} + +void sub_80CC408(struct Sprite* sprite) +{ + sprite->data[0]++; + if (sprite->data[0] > 1) + { + sprite->data[0] = 0; + sprite->invisible ^= 1; + sprite->data[1]++; + if (sprite->data[1] > 8) + { + gTasks[sprite->data[6]].data[sprite->data[7]]--; + DestroySprite(sprite); + } + } +} diff --git a/src/battle/anim/flying_petals.c b/src/battle/anim/flying_petals.c new file mode 100755 index 000000000..ed6497b7a --- /dev/null +++ b/src/battle/anim/flying_petals.c @@ -0,0 +1,83 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +static void sub_80CC580(struct Sprite* sprite); + +// flying_petals (petals fly across the screen.) +// Used by Aromatherapy. + +void sub_80CC474(struct Sprite* sprite) +{ + u8 bank; + if (!gBattleAnimArgs[6]) + bank = gBattleAnimBankAttacker; + else + bank = gBattleAnimBankTarget; + + if (GetBankSide(bank) != 0) + { + sprite->data[4] = 0; + sprite->data[2] = gBattleAnimArgs[3]; + sprite->pos1.x = 0xFFF0; + } + else + { + sprite->data[4] = 1; + sprite->data[2] = -gBattleAnimArgs[3]; + sprite->pos1.x = 0x100; + } + + sprite->data[1] = gBattleAnimArgs[1]; + sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[3] = gBattleAnimArgs[4]; + switch (gBattleAnimArgs[5]) + { + case 0: + sprite->pos1.y = gBattleAnimArgs[0]; + sprite->oam.priority = sub_8079ED4(bank); + break; + case 1: + sprite->pos1.y = gBattleAnimArgs[0]; + sprite->oam.priority = sub_8079ED4(bank) + 1; + break; + case 2: + sprite->pos1.y = sub_8077ABC(bank, 3) + gBattleAnimArgs[0]; + sprite->oam.priority = sub_8079ED4(bank); + break; + case 3: + sprite->pos1.y = sub_8077ABC(gBattleAnimBankTarget, 3) + gBattleAnimArgs[0]; + GetAnimBankSpriteId(1); + sprite->oam.priority = sub_8079ED4(bank) + 1; + break; + } + + sprite->callback = sub_80CC580; +} + +void sub_80CC580(struct Sprite* sprite) +{ + int a = sprite->data[7]; + sprite->data[7]++; + sprite->pos2.y = (sprite->data[1] * gSineTable[sprite->data[0]]) >> 8; + sprite->pos2.x = sprite->data[2] * a; + sprite->data[0] = (sprite->data[3] * a) & 0xFF; + if (sprite->data[4] == 0) + { + if (sprite->pos2.x + sprite->pos1.x <= 0xF7) + return; + } + else + { + if (sprite->pos2.x + sprite->pos1.x > -16) + return; + } + + move_anim_8074EE0(sprite); +} diff --git a/src/battle/anim/glitter.c b/src/battle/anim/glitter.c new file mode 100755 index 000000000..548397932 --- /dev/null +++ b/src/battle/anim/glitter.c @@ -0,0 +1,63 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +// glitter (the sparkling effect seen on Pokemon, usually after healing or a beneficial effect.) +// Used by Heal Bell, Cosmic Power, and Aromatherapy. + +void sub_80CD140(struct Sprite* sprite) +{ + if (!gBattleAnimArgs[2]) + sub_8078650(sprite); + + sub_807867C(sprite, gBattleAnimArgs[0]); + sprite->pos1.y += gBattleAnimArgs[1]; + sprite->data[0] = gBattleAnimArgs[5]; + sprite->data[1] = gBattleAnimArgs[3]; + sprite->data[2] = gBattleAnimArgs[4]; + StoreSpriteCallbackInData(sprite, move_anim_8072740); + sprite->callback = sub_8078394; +} + +void sub_80CD190(struct Sprite* sprite) +{ + u8 bank; + if (!gBattleAnimArgs[2]) + bank = gBattleAnimBankAttacker; + else + bank = gBattleAnimBankTarget; + + if (IsDoubleBattle() && IsAnimBankSpriteVisible(bank ^ 2)) + { + sub_807A3FC(bank, gBattleAnimArgs[6], &sprite->pos1.x, &sprite->pos1.y); + sub_807867C(sprite, gBattleAnimArgs[0]); + sprite->pos1.y += gBattleAnimArgs[1]; + } + else + { + if (!gBattleAnimArgs[6]) + { + sprite->pos1.x = sub_8077ABC(bank, 0); + sprite->pos1.y = sub_8077ABC(bank, 1) + gBattleAnimArgs[1]; + } + else + { + sprite->pos1.x = sub_8077ABC(bank, 2); + sprite->pos1.y = sub_8077ABC(bank, 3) + gBattleAnimArgs[1]; + } + + sub_807867C(sprite, gBattleAnimArgs[0]); + } + + sprite->data[0] = gBattleAnimArgs[5]; + sprite->data[1] = gBattleAnimArgs[3]; + sprite->data[2] = gBattleAnimArgs[4]; + StoreSpriteCallbackInData(sprite, move_anim_8072740); + sprite->callback = sub_8078394; +} diff --git a/src/battle/anim/glow.c b/src/battle/anim/glow.c new file mode 100755 index 000000000..6038825af --- /dev/null +++ b/src/battle/anim/glow.c @@ -0,0 +1,55 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" +#include "ewram.h" +#include "palette.h" +#include "decompress.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +extern u16 gUnknown_083D7A5C[5]; + +extern struct INCBIN_U8 gBattleAnimSpritePalette_206; + +// glow (a whitening effect where the Pokemon glows white in a cycle.) +// Used in Heal Bell. + +void sub_80D1ADC(u8 taskId) +{ + int i; + u8 sp[8]; + void* src; + void* dest; + void* what; + sp[0] = IndexOfSpritePaletteTag(0x27DE); + for (i = 1; i <= 4; i++) + { + sp[i] = AllocSpritePalette(0x2710 - i); + } + + src = &gBattleAnimSpritePalette_206; + dest = (NotInBattle()) ? gSharedMem + 0x18000 - 0x3800: gSharedMem + 0x18000; + LZDecompressWram(src, dest); + for (i = 0; i <= 4; i++) + { + what = ((NotInBattle()) ? gSharedMem + 0x14800 : gSharedMem + 0x18000) + (i << 5); + LoadPalette(what, (u16)((sp[i] << 4) + 0x100), 32); + } + + DestroyAnimVisualTask(taskId); +} + +void sub_80D1B80(u8 taskId) +{ + int i; + for (i = 0; i < 5; i++) + { + FreeSpritePaletteByTag(gUnknown_083D7A5C[i]); + } + + DestroyAnimVisualTask(taskId); +} diff --git a/src/battle/anim/grip.c b/src/battle/anim/grip.c new file mode 100755 index 000000000..93c3dba96 --- /dev/null +++ b/src/battle/anim/grip.c @@ -0,0 +1,44 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +static void sub_80D020C(struct Sprite* sprite); + +// grip (does a slash which is capable of mirroring for the effect of "gripping".) +// Used in Vice Grip. + +void sub_80D0178(struct Sprite* sprite) +{ + s16 r7 = 32; + s16 r4 = -32; + s16 r8 = 16; + s16 r6 = -16; + if (gBattleAnimArgs[0] != 0) + { + r7 = r4; + r4 = 32; + r8 = r6; + r6 = 16; + StartSpriteAnim(sprite, 1); + } + + sprite->pos1.x += r7; + sprite->pos1.y += r4; + sprite->data[0] = 6; + sprite->data[2] = sub_8077ABC(gBattleAnimBankTarget, 2) + r8; + sprite->data[4] = sub_8077ABC(gBattleAnimBankTarget, 3) + r6; + sprite->callback = sub_8078B34; + StoreSpriteCallbackInData(sprite, sub_80D020C); +} + +void sub_80D020C(struct Sprite* sprite) +{ + if (sprite->animEnded == 1) + move_anim_8072740(sprite); +} diff --git a/src/battle/anim/grow.c b/src/battle/anim/grow.c new file mode 100755 index 000000000..35047c8b0 --- /dev/null +++ b/src/battle/anim/grow.c @@ -0,0 +1,31 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +extern struct AffineAnimFrameCmd gUnknown_083D7714; + +static void sub_80D0904(u8 taskId); + +// grow (grows a Pokemon then shrinks back to normal size.) +// Used in Swagger and Bulk Up. + +void sub_80D08C8(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + u8 spriteId = GetAnimBankSpriteId(0); + sub_80798F4(task, spriteId, &gUnknown_083D7714); + task->func = sub_80D0904; +} + +void sub_80D0904(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + if (!sub_807992C(task)) + DestroyAnimVisualTask(taskId); +} diff --git a/src/battle/anim/guillotine.c b/src/battle/anim/guillotine.c new file mode 100755 index 000000000..b710f372a --- /dev/null +++ b/src/battle/anim/guillotine.c @@ -0,0 +1,90 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +static void sub_80D02D0(struct Sprite* sprite); +static void sub_80D0344(struct Sprite* sprite); +static void sub_80D03A8(struct Sprite* sprite); + +// guillotine (does a reverse grip where the slices can reverse at a given period.) +// Used in Guillotine. + +void sub_80D0228(struct Sprite* sprite) +{ + s16 r8 = 32; + s16 r4 = -32; + s16 r9 = 16; + s16 r6 = -16; + if (gBattleAnimArgs[0] != 0) + { + r8 = r4; + r4 = 32; + r9 = r6; + r6 = 16; + StartSpriteAnim(sprite, gBattleAnimArgs[0]); + } + + sprite->pos1.x += r8; + sprite->pos1.y += r4; + sprite->data[0] = 6; + sprite->data[1] = sprite->pos1.x; + sprite->data[2] = sub_8077ABC(gBattleAnimBankTarget, 2) + r9; + sprite->data[3] = sprite->pos1.y; + sprite->data[4] = sub_8077ABC(gBattleAnimBankTarget, 3) + r6; + obj_translate_based_on_private_1_2_3_4(sprite); + sprite->data[5] = gBattleAnimArgs[0]; + sprite->data[6] = sprite->data[0]; + sprite->callback = sub_80D02D0; +} + +void sub_80D02D0(struct Sprite* sprite) +{ + if (sub_8078B5C(sprite) && sprite->animEnded == 1) + { + SeekSpriteAnim(sprite, 0); + sprite->animPaused = 1; + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.x = 2; + sprite->pos2.y = -2; + sprite->data[0] = sprite->data[6]; + sprite->data[1] ^= 1; + sprite->data[2] ^= 1; + sprite->data[4] = 0; + sprite->data[3] = 0; + sprite->callback = sub_80D0344; + } +} + +void sub_80D0344(struct Sprite* sprite) +{ + if (sprite->data[3]) + { + sprite->pos2.x = -sprite->pos2.x; + sprite->pos2.y = -sprite->pos2.y; + } + + sprite->data[3] ^= 1; + if (++sprite->data[4] == 0x33) + { + sprite->pos2.y = 0; + sprite->pos2.x = 0; + sprite->data[4] = 0; + sprite->data[3] = 0; + sprite->animPaused = 0; + StartSpriteAnim(sprite, sprite->data[5] ^ 1); + sprite->callback = sub_80D03A8; + } +} + +void sub_80D03A8(struct Sprite* sprite) +{ + if (sub_8078B5C(sprite) != 0) + move_anim_8072740(sprite); +} diff --git a/src/battle/anim/heal.c b/src/battle/anim/heal.c new file mode 100755 index 000000000..c5950650c --- /dev/null +++ b/src/battle/anim/heal.c @@ -0,0 +1,27 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +// heal (healing sparkles on a Pokemon) +// Used in Present, if the move heals instead of damages. + +void sub_80CBAA4(struct Sprite* sprite) +{ + if (sprite->data[0] == 0) + { + sub_8078764(sprite, 0); + sprite->data[1] = gBattleAnimArgs[2]; + } + + sprite->data[0]++; + sprite->pos2.y = sprite->data[1] * sprite->data[0]; + if (sprite->animEnded) + { + move_anim_8072740(sprite); + } +} diff --git a/src/battle/anim/heart_1.c b/src/battle/anim/heart_1.c new file mode 100755 index 000000000..1ab83136c --- /dev/null +++ b/src/battle/anim/heart_1.c @@ -0,0 +1,25 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +// heart_1 (a floating heart in a wave pattern upward.) +// Used in Charm, Covet, and when a Pokemon is infatuated. + +void sub_80D1C80(struct Sprite* sprite) +{ + if (++sprite->data[0] == 1) + sub_80787B0(sprite, 0); + + sprite->pos2.x = Sin(sprite->data[1], 8); + sprite->pos2.y = sprite->data[2] >> 8; + sprite->data[1] = (sprite->data[1] + 7) & 0xFF; + sprite->data[2] -= 0x80; + if (sprite->data[0] == 0x3C) + move_anim_8072740(sprite); +} diff --git a/src/battle/anim/homing.c b/src/battle/anim/homing.c new file mode 100755 index 000000000..c5e372d78 --- /dev/null +++ b/src/battle/anim/homing.c @@ -0,0 +1,86 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +static void sub_80CC7D4(struct Sprite* sprite); + +// homing (the spinning effect of sprites going inward in a static rotation.) +// Used by Needle Arm. + +void sub_80CC6CC(struct Sprite* sprite) +{ + u8 a; + u8 b; + u16 c; + u16 x; + u16 y; + + if (gBattleAnimArgs[4] == 0) + { + move_anim_8072740(sprite); + } + else + { + if (gBattleAnimArgs[0] == 0) + { + a = sub_8077ABC(gBattleAnimBankAttacker, 2); + b = sub_8077ABC(gBattleAnimBankAttacker, 3); + } + else + { + a = sub_8077ABC(gBattleAnimBankTarget, 2); + b = sub_8077ABC(gBattleAnimBankTarget, 3); + } + + sprite->data[0] = gBattleAnimArgs[4]; + if (gBattleAnimArgs[1] == 0) + { + sprite->pos1.x = gBattleAnimArgs[2] + a; + sprite->pos1.y = gBattleAnimArgs[3] + b; + sprite->data[5] = a; + sprite->data[6] = b; + } + else + { + sprite->pos1.x = a; + sprite->pos1.y = b; + sprite->data[5] = gBattleAnimArgs[2] + a; + sprite->data[6] = gBattleAnimArgs[3] + b; + } + + x = sprite->pos1.x; + sprite->data[1] = x * 16; + y = sprite->pos1.y; + sprite->data[2] = y * 16; + sprite->data[3] = (sprite->data[5] - sprite->pos1.x) * 16 / gBattleAnimArgs[4]; + sprite->data[4] = (sprite->data[6] - sprite->pos1.y) * 16 / gBattleAnimArgs[4]; + c = sub_80790F0(sprite->data[5] - x, sprite->data[6] - y); + if (NotInBattle()) + c -= 0x8000; + + sub_8078FDC(sprite, 0, 0x100, 0x100, c); + sprite->callback = sub_80CC7D4; + } +} + +void sub_80CC7D4(struct Sprite* sprite) +{ + if (sprite->data[0]) + { + sprite->data[1] += sprite->data[3]; + sprite->data[2] += sprite->data[4]; + sprite->pos1.x = sprite->data[1] >> 4 ; + sprite->pos1.y = sprite->data[2] >> 4 ; + sprite->data[0]--; + } + else + { + move_anim_8074EE0(sprite); + } +} diff --git a/src/battle/anim/hop.c b/src/battle/anim/hop.c new file mode 100755 index 000000000..60f3b8a48 --- /dev/null +++ b/src/battle/anim/hop.c @@ -0,0 +1,160 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +// hop (where a sprite "hops" across the screen) +// Used by Present, Trick, and the item knock off effect. + +void sub_80CB7EC(struct Sprite* sprite, s16 c) +{ + s32 a = (sprite->pos1.x * 256) | sprite->pos1.y; + s32 b = (sprite->data[6] * 256) | sprite->data[7]; + c *= 256; + sprite->data[5] = a; + sprite->data[6] = b; + sprite->data[7] = c; +} + +bool8 sub_80CB814(struct Sprite* sprite) +{ + u16 r10 = (u8)(sprite->data[5] >> 8); + u16 r9 = (u8)sprite->data[5]; + s32 r2 = (u8)(sprite->data[6] >> 8); + s32 r4 = (u8)sprite->data[6]; + s16 r6 = sprite->data[7] >> 8; + s16 r3 = sprite->data[7] & 0xFF; + s16 r4_2; + s16 r0; + s32 var1; + s32 var2; + + if (r2 == 0) + { + r2 = -32; + } + else if (r2 == 255) + { + r2 = 0x110; + } + + r4_2 = r4 - r9; + r0 = r2 - r10; + var1 = r0 * r3 / r6; + var2 = r4_2 * r3 / r6; + sprite->pos1.x = var1 + r10; + sprite->pos1.y = var2 + r9; + if (++r3 == r6) + return TRUE; + + sprite->data[7] = (r6 << 8) | r3; + return FALSE; +} + +void sub_80CB8B8(struct Sprite* sprite) +{ + if (sprite->data[0] == 10) + { + StartSpriteAffineAnim(sprite, 1); + } + + sprite->data[0]++; + if (sprite->data[0] > 50) + { + move_anim_8072740(sprite); + } +} + +void sub_80CB8E8(struct Sprite* sprite) +{ + sprite->data[0] += sprite->data[3] * 128 / sprite->data[4]; + if (sprite->data[0] >= 128) + { + sprite->data[1]++; + sprite->data[0] = 0; + } + + sprite->pos2.y = Sin(sprite->data[0] + 128, 30 - sprite->data[1] * 8); + if (sub_80CB814(sprite)) + { + sprite->pos2.y = 0; + sprite->data[0] = 0; + sprite->callback = sub_80CB8B8; + } +} + +void sub_80CB94C(struct Sprite* sprite) +{ + s16 e1; + s16 e2; + sub_80787B0(sprite, 0); + e1 = sub_8077ABC(gBattleAnimBankTarget, 0); + e2 = sub_8077ABC(gBattleAnimBankTarget, 1); + if ((gBattleAnimBankAttacker ^ 2) == gBattleAnimBankTarget) + { + sprite->data[6] = e1; + sprite->data[7] = e2 + 10; + sub_80CB7EC(sprite, 0x3C); + sprite->data[3] = 1; + } + else + { + sprite->data[6] = e1; + sprite->data[7] = e2 + 10; + sub_80CB7EC(sprite, 0x3C); + sprite->data[3] = 3; + } + + sprite->data[4] = 0x3C; + sprite->callback = sub_80CB8E8; +} + +void sub_80CB9C4(struct Sprite* sprite) +{ + int zero; + sprite->data[0] += ((sprite->data[3] * 128) / sprite->data[4]); + zero = 0; + if (sprite->data[0] > 0x7F) + { + sprite->data[1]++; + sprite->data[0] = zero; + } + + sprite->pos2.y = Sin(sprite->data[0] + 0x80, 30 - sprite->data[1] * 8); + if (sub_80CB814(sprite)) + { + sprite->pos2.y = zero; + sprite->data[0] = zero; + move_anim_8072740(sprite); + } +} + +void sub_80CBA28(struct Sprite* sprite) +{ + s16 e = sub_8077ABC(gBattleAnimBankTarget, 1); + if (GetBankSide(gBattleAnimBankTarget) == 0) + { + sprite->data[6] = 0; + sprite->data[7] = e + 10; + sub_80CB7EC(sprite, 0x28); + sprite->data[3] = 3; + sprite->data[4] = 0x3C; + sprite->callback = sub_80CB8E8; + } + else + { + sprite->data[6] = 255; + sprite->data[7] = e + 10; + if (NotInBattle()) + sprite->data[6] = 0; + + sub_80CB7EC(sprite, 0x28); + sprite->data[3] = 3; + sprite->data[4] = 0x3C; + sprite->callback = sub_80CB9C4; + } +} diff --git a/src/battle/anim/hop_2.c b/src/battle/anim/hop_2.c new file mode 100755 index 000000000..5458c4599 --- /dev/null +++ b/src/battle/anim/hop_2.c @@ -0,0 +1,70 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +extern void sub_80CB7EC(struct Sprite* sprite, s16 c); +extern bool8 sub_80CB814(struct Sprite* sprite); +extern void sub_80CB8B8(struct Sprite* sprite); + +static void sub_80CBB60(struct Sprite* sprite); + +// hop_2 +// Used in item steal. + +void sub_80CBAE8(struct Sprite* sprite) +{ + s16 p1; + s16 p2; + sub_8078764(sprite, 0); + p1 = sub_8077ABC(gBattleAnimBankAttacker, 0); + p2 = sub_8077ABC(gBattleAnimBankAttacker, 1); + if ((gBattleAnimBankTarget ^ 2) == gBattleAnimBankAttacker) + { + sprite->data[6] = p1; + sprite->data[7] = p2 + 10; + sub_80CB7EC(sprite, 0x3c); + sprite->data[3] = 1; + } + else + { + sprite->data[6] = p1; + sprite->data[7] = p2 + 10; + sub_80CB7EC(sprite, 0x3c); + sprite->data[3] = 3; + } + + sprite->data[4] = 0x3C; + sprite->callback = sub_80CBB60; +} + +void sub_80CBB60(struct Sprite* sprite) +{ + int zero; + sprite->data[0] += ((sprite->data[3] * 128) / sprite->data[4]); + zero = 0; + if (sprite->data[0] > 0x7F) + { + sprite->data[1]++; + sprite->data[0] = zero; + } + + sprite->pos2.y = Sin(sprite->data[0] + 0x80, 30 - sprite->data[1] * 8); + if (sprite->pos2.y == 0) + { + PlaySE12WithPanning(0x7D, sub_8076F98(0x3F)); + } + + if (sub_80CB814(sprite)) + { + sprite->pos2.y = 0; + sprite->data[0] = 0; + sprite->callback = sub_80CB8B8; + PlaySE12WithPanning(0x7D, sub_8076F98(-0x40)); + } +} diff --git a/src/battle/anim/kiss_fountain.c b/src/battle/anim/kiss_fountain.c new file mode 100755 index 000000000..2e7f64c11 --- /dev/null +++ b/src/battle/anim/kiss_fountain.c @@ -0,0 +1,38 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +// kiss_fountain (a series of hearts pour out of a target Pokemon.) +// Used in Attract and Sweet Kiss. + +void sub_80D1FDC(struct Sprite* sprite) +{ + if (sprite->data[0] == 0) + { + sprite->data[1] = gBattleAnimArgs[0]; + sprite->data[2] = gBattleAnimArgs[1]; + sprite->data[0]++; + } + else + { + sprite->data[4] += sprite->data[1]; + sprite->pos2.x = sprite->data[4] >> 8; + sprite->pos2.y = Sin(sprite->data[3], sprite->data[2]); + sprite->data[3] = (sprite->data[3] + 3) & 0xFF; + if (sprite->data[3] > 0x64) + { + sprite->invisible = sprite->data[3] % 2; + } + + if (sprite->data[3] > 0x78) + { + move_anim_8072740(sprite); + } + } +} diff --git a/src/battle/anim/leaf.c b/src/battle/anim/leaf.c new file mode 100755 index 000000000..13d1bc9f5 --- /dev/null +++ b/src/battle/anim/leaf.c @@ -0,0 +1,74 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +static void sub_80CAF20(struct Sprite* sprite); +static void sub_80CAF6C(struct Sprite* sprite); + +// leaf +// Used by Razor Leaf and Twister. + +void sub_80CAED8(struct Sprite* sprite) +{ + sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 2); + sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 3); + sprite->data[0] = gBattleAnimArgs[0]; + sprite->data[1] = gBattleAnimArgs[1]; + sprite->data[2] = gBattleAnimArgs[2]; + sprite->callback = sub_80CAF20; +} + +void sub_80CAF20(struct Sprite* sprite) +{ + if (!sprite->data[2]) + { + if (sprite->data[1] & 1) + { + sprite->data[0] = 0x80; + sprite->data[1] = 0; + sprite->data[2] = 0; + } + else + { + sprite->data[0] = sprite->data[1] & 1; + sprite->data[1] = sprite->data[1] & 1; + sprite->data[2] = sprite->data[1] & 1; + } + sprite->callback = sub_80CAF6C; + } + else + { + sprite->data[2]--; + sprite->pos1.x += sprite->data[0]; + sprite->pos1.y += sprite->data[1]; + } +} + +void sub_80CAF6C(struct Sprite* sprite) +{ + if (GetBankSide(gBattleAnimBankAttacker)) + { + sprite->pos2.x = -Sin(sprite->data[0], 0x19); + } + else + { + sprite->pos2.x = Sin(sprite->data[0], 0x19); + } + + sprite->data[0] = (sprite->data[0] + 2) & 0xFF; + sprite->data[1]++; + if (!(sprite->data[1] & 1)) + { + sprite->pos2.y++; + } + + if (sprite->data[1] > 0x50) + { + move_anim_8072740(sprite); + } +} diff --git a/src/battle/anim/love_bg.c b/src/battle/anim/love_bg.c new file mode 100755 index 000000000..c5659463e --- /dev/null +++ b/src/battle/anim/love_bg.c @@ -0,0 +1,128 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" +#include "decompress.h" +#include "palette.h" + +struct Struct_sub_8078914 +{ + u8 *field_0; + u8 *field_4; + u8 field_8; +}; + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +extern struct INCBIN_U8 gAttractTilemap; +extern struct INCBIN_U8 gAttractGfx; +extern struct INCBIN_U8 gAttractPal; + +extern u16 gUnknown_030041B4; +extern u16 gUnknown_030042C0; + +static void sub_80D21F0(u8 taskId); + +// love_bg (makes the BG a background of hearts.) +// Used in Attract. + +void sub_80D2100(u8 taskId) +{ + struct Struct_sub_8078914 subStruct; + u8* tempvar; + REG_BLDCNT = 0x3F42; + REG_BLDALPHA = 0x1000; + REG_BG1CNT_BITFIELD.priority = 3; + REG_BG1CNT_BITFIELD.screenSize = 0; + if (!NotInBattle()) + REG_BG1CNT_BITFIELD.charBaseBlock = 1; + + gUnknown_030042C0 = 0; + gUnknown_030041B4 = 0; + REG_BG1HOFS = 0; + REG_BG1VOFS = 0; + sub_8078914(&subStruct); + tempvar = subStruct.field_4; + DmaFill32(3, 0x0, tempvar, 0x1000); + LZDecompressVram(&gAttractTilemap, tempvar); + LZDecompressVram(&gAttractGfx, subStruct.field_0); + LoadCompressedPalette(&gAttractPal, subStruct.field_8 << 4, 32); + if (NotInBattle()) + sub_80763FC(subStruct.field_8, (u16 *)subStruct.field_4, 0, 0); + + gTasks[taskId].func = sub_80D21F0; +} + +void sub_80D21F0(u8 taskId) +{ + struct Struct_sub_8078914 subStruct; + + switch (gTasks[taskId].data[12]) + { + case 0: + if (++gTasks[taskId].data[10] == 4) + { + gTasks[taskId].data[10] = 0; + gTasks[taskId].data[11]++; + REG_BLDALPHA = gTasks[taskId].data[11] | ((16 - gTasks[taskId].data[11]) << 8); + if (gTasks[taskId].data[11] == 16) + { + gTasks[taskId].data[12]++; + gTasks[taskId].data[11] = 0; + } + } + break; + case 1: + if (++gTasks[taskId].data[11] == 0x8D) + { + gTasks[taskId].data[11] = 16; + gTasks[taskId].data[12]++; + } + break; + case 2: + if (++gTasks[taskId].data[10] == 4) + { + gTasks[taskId].data[10] = 0; + gTasks[taskId].data[11]--; + REG_BLDALPHA = gTasks[taskId].data[11] | ((16 - gTasks[taskId].data[11]) << 8); + if (gTasks[taskId].data[11] == 0) + { + gTasks[taskId].data[12]++; + gTasks[taskId].data[11] = 0; + } + } + break; + case 3: + sub_8078914(&subStruct); + { + u8 *addr = subStruct.field_0; + u32 size = 0x2000; + while (1) + { + DmaFill32(3, 0, addr, 0x1000); + addr += 0x1000; + size -= 0x1000; + if (size <= 0x1000) + { + DmaFill32(3, 0, addr, size); + break; + } + } + } + DmaClear32(3, subStruct.field_4, 0x800); + if (!NotInBattle()) + REG_BG1CNT_BITFIELD.charBaseBlock = 0; + + gTasks[taskId].data[12]++; + // fall through + case 4: + REG_BLDCNT = 0; + REG_BLDALPHA = 0; + REG_BG1CNT_BITFIELD.priority = 1; + DestroyAnimVisualTask(taskId); + break; + } +} diff --git a/src/battle/anim/lunge_1.c b/src/battle/anim/lunge_1.c new file mode 100755 index 000000000..f1e1e35b6 --- /dev/null +++ b/src/battle/anim/lunge_1.c @@ -0,0 +1,124 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +extern u8 gObjectBankIDs[]; + +static void sub_80CD7CC(struct Sprite* sprite); +static void sub_80CD81C(struct Sprite* sprite); +static void sub_80CD8A8(struct Sprite* sprite); +static void sub_80CD8F8(struct Sprite* sprite); +static void sub_80CD91C(struct Sprite* sprite); +static void sub_80CD9B8(struct Sprite* sprite); + +// lunge_1 (makes the pokemon sprite do a "lunge" where it leans back to attack, usually with its head or horn.) +// Used in Drill Peck, Headbutt, Horn Attack, and Horn Drill. + +void sub_80CD774(struct Sprite* sprite) +{ + sprite->invisible = 1; + sprite->data[0] = 0; + switch (gBattleAnimArgs[0]) + { + case 0: + sprite->callback = sub_80CD7CC; + break; + case 1: + sprite->callback = sub_80CD8A8; + break; + case 2: + sprite->callback = sub_80CD8F8; + break; + default: + sprite->callback = sub_80CD9B8; + break; + } +} + +void sub_80CD7CC(struct Sprite* sprite) +{ + sprite->data[0] = 6; + sprite->data[1] = (GetBankSide(gBattleAnimBankAttacker)) ? 2 : -2; + sprite->data[2] = 0; + sprite->data[3] = gObjectBankIDs[gBattleAnimBankAttacker]; + StoreSpriteCallbackInData(sprite, sub_80CD81C); + sprite->callback = sub_8078458; +} + +void sub_80CD81C(struct Sprite* sprite) +{ + if (sprite->data[0] == 0) + { + sprite->data[3] = gObjectBankIDs[gBattleAnimBankAttacker]; + sub_8078E70(sprite->data[3], 0); + sprite->data[4] = (sprite->data[6] = GetBankSide(gBattleAnimBankAttacker)) ? 0x300 : 0xFFFFFD00; + sprite->data[5] = 0; + } + + sprite->data[5] += sprite->data[4]; + obj_id_set_rotscale(sprite->data[3], 0x100, 0x100, sprite->data[5]); + sub_8078F9C(sprite->data[3]); + if (++sprite->data[0] > 3) + { + sprite->data[0] = 0; + sprite->callback = sub_80CD9B8; + } +} + +void sub_80CD8A8(struct Sprite* sprite) +{ + sprite->data[0] = 4; + sprite->data[1] = (GetBankSide(gBattleAnimBankAttacker)) ? -3 : 3; + sprite->data[2] = 0; + sprite->data[3] = gObjectBankIDs[gBattleAnimBankAttacker]; + StoreSpriteCallbackInData(sprite, sub_80CD9B8); + sprite->callback = sub_8078458; +} + +void sub_80CD8F8(struct Sprite* sprite) +{ + if (++sprite->data[0] > 8) + { + sprite->data[0] = 0; + sprite->callback = sub_80CD91C; + } +} + +void sub_80CD91C(struct Sprite* sprite) +{ + if (sprite->data[0] == 0) + { + sprite->data[3] = gObjectBankIDs[gBattleAnimBankAttacker]; + sprite->data[6] = GetBankSide(gBattleAnimBankAttacker); + if (GetBankSide(gBattleAnimBankAttacker)) + { + sprite->data[4] = 0xFC00; + sprite->data[5] = 0xC00; + } + else + { + sprite->data[4] = 0x400; + sprite->data[5] = 0xF400; + } + } + + sprite->data[5] += sprite->data[4]; + obj_id_set_rotscale(sprite->data[3], 0x100, 0x100, sprite->data[5]); + sub_8078F9C(sprite->data[3]); + if (++sprite->data[0] > 2) + { + sub_8078F40(sprite->data[3]); + sprite->callback = sub_80CD9B8; + } +} + +void sub_80CD9B8(struct Sprite* sprite) +{ + move_anim_8072740(sprite); +} diff --git a/src/battle/anim/lunge_2.c b/src/battle/anim/lunge_2.c new file mode 100755 index 000000000..3972bee59 --- /dev/null +++ b/src/battle/anim/lunge_2.c @@ -0,0 +1,163 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +extern u8 gObjectBankIDs[]; + +static void sub_80CDB60(u8 taskId); +static void sub_80CDD20(u8 taskId); + +// lunge_2 +// Drill Peck + +void sub_80CDAC8(u8 taskId) +{ + u8 a; + + gTasks[taskId].data[0] = gObjectBankIDs[gBattleAnimBankAttacker]; + a = GetBankSide(gBattleAnimBankAttacker); + gTasks[taskId].data[1] = a; + gTasks[taskId].data[2] = 0; + switch (gBattleAnimArgs[0]) + { + default: + DestroyAnimVisualTask(taskId); + break; + case 0: + gTasks[taskId].data[2] = 0; + gTasks[taskId].data[3] = 8; + gTasks[taskId].data[4] = 0; + gTasks[taskId].data[5] = 3; + if (a == 0) + gTasks[taskId].data[5] *= -1; + + gTasks[taskId].func = sub_80CDB60; + break; + case 1: + gTasks[taskId].data[3] = 8; + gTasks[taskId].data[4] = 0x600; + gTasks[taskId].data[5] = 0xC0; + if (a == 0) + { + gTasks[taskId].data[4] = -gTasks[taskId].data[4]; + gTasks[taskId].data[5] = -gTasks[taskId].data[5]; + } + + gTasks[taskId].func = sub_80CDD20; + break; + } +} + +void sub_80CDB60(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + switch (task->data[2]) + { + case 0: + if (task->data[3]) + { + task->data[4] += task->data[5]; + gSprites[task->data[0]].pos2.x = task->data[4]; + task->data[3]--; + } + else + { + task->data[3] = 8; + task->data[4] = 0; + task->data[5] = (task->data[1] == 0) ? -0xC0 : 0xC0; + sub_8078E70(task->data[0], 0); + task->data[2]++; + } + break; + case 1: + if (task->data[3]) + { + task->data[4] += task->data[5]; + obj_id_set_rotscale(task->data[0], 0x100, 0x100, task->data[4]); + sub_8078F9C(task->data[0]); + task->data[3]--; + } + else + { + task->data[3] = 8; + task->data[4] = gSprites[task->data[0]].pos2.x; + task->data[5] = (task->data[1] == 0) ? 0x2 : -0x2; + task->data[6] = 1; + task->data[2]++; + } + break; + case 2: + if (task->data[3]) + { + if (task->data[6]) + { + task->data[6]--; + } + else + { + if (task->data[3] & 1) + gSprites[task->data[0]].pos2.x = task->data[4] + task->data[5]; + else + gSprites[task->data[0]].pos2.x = task->data[4] - task->data[5]; + + task->data[6] = 1; + task->data[3]--; + } + } + else + { + gSprites[task->data[0]].pos2.x = task->data[4]; + task->data[3] = 12; + task->data[2]++; + } + break; + case 3: + if (task->data[3]) + { + task->data[3]--; + } + else + { + task->data[3] = 3; + task->data[4] = gSprites[task->data[0]].pos2.x; + task->data[5] = (task->data[1] == 0) ? 8 : -8; + task->data[2]++; + } + break; + case 4: + if (task->data[3]) + { + task->data[4] += task->data[5]; + gSprites[task->data[0]].pos2.x = task->data[4]; + task->data[3]--; + } + else + { + DestroyAnimVisualTask(taskId); + } + break; + } +} + +void sub_80CDD20(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + if (task->data[3]) + { + task->data[4] -= task->data[5]; + obj_id_set_rotscale(task->data[0], 0x100, 0x100, task->data[4]); + sub_8078F9C(task->data[0]); + task->data[3]--; + } + else + { + sub_8078F40(task->data[0]); + DestroyAnimVisualTask(taskId); + } +} diff --git a/src/battle/anim/money.c b/src/battle/anim/money.c new file mode 100755 index 000000000..91eaf20b1 --- /dev/null +++ b/src/battle/anim/money.c @@ -0,0 +1,62 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +static void sub_80CFF68(struct Sprite* sprite); + +// money +// Used by Pay Day. + +void sub_80CFE9C(struct Sprite* sprite) +{ + s16 r6; + s16 r7; + u16 var; + + sub_80787B0(sprite, 1); + r6 = sub_8077ABC(gBattleAnimBankTarget, 2); + r7 = sub_8077ABC(gBattleAnimBankTarget, 3) + gBattleAnimArgs[3]; + if (GetBankSide(gBattleAnimBankAttacker) != 0) + gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + + r6 += gBattleAnimArgs[2]; + var = sub_80790F0(r6 - sprite->pos1.x, r7 - sprite->pos1.y); + var += 0xC000; + sub_8078FDC(sprite, 0, 0x100, 0x100, var); + sprite->data[0] = gBattleAnimArgs[4]; + sprite->data[2] = r6; + sprite->data[4] = r7; + sprite->callback = sub_8078C00; + StoreSpriteCallbackInData(sprite, move_anim_8072740); +} + +void sub_80CFF50(struct Sprite* sprite) +{ + sprite->data[2] = -16; + sprite->pos1.y += 8; + sprite->callback = sub_80CFF68; +} + +void sub_80CFF68(struct Sprite* sprite) +{ + sprite->data[0] += 0x80; + sprite->pos2.x = sprite->data[0] >> 8; + if (GetBankSide(gBattleAnimBankAttacker) == 0) + sprite->pos2.x = -sprite->pos2.x; + + sprite->pos2.y = Sin(sprite->data[1], sprite->data[2]); + sprite->data[1] += 5; + if (sprite->data[1] > 0x7E) + { + sprite->data[1] = 0; + sprite->data[2] /= 2; + if (++sprite->data[3] == 2) + move_anim_8072740(sprite); + } +} diff --git a/src/battle/anim/moon.c b/src/battle/anim/moon.c new file mode 100755 index 000000000..e2a31d14d --- /dev/null +++ b/src/battle/anim/moon.c @@ -0,0 +1,39 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +static void sub_80CE354(struct Sprite* sprite); + +// moon (shows a moon image.) +// Used in Moonlight. + +void sub_80CE30C(struct Sprite* sprite) +{ + if (NotInBattle()) + { + sprite->pos1.x = 0x30; + sprite->pos1.y = 0x28; + } + else + { + sprite->pos1.x = gBattleAnimArgs[0]; + sprite->pos1.y = gBattleAnimArgs[1]; + } + + sprite->oam.shape = 0; + sprite->oam.size = 3; + sprite->data[0] = 0; + sprite->callback = sub_80CE354; +} + +void sub_80CE354(struct Sprite* sprite) +{ + if (sprite->data[0]) + move_anim_8072740(sprite); +} diff --git a/src/battle/anim/note_rain.c b/src/battle/anim/note_rain.c new file mode 100755 index 000000000..fd62b7176 --- /dev/null +++ b/src/battle/anim/note_rain.c @@ -0,0 +1,37 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +extern u16 gUnknown_083D7A5C[5]; + +// note_rain (notes rain from a source point, usually a bell.) +// Used in Heal Bell. + +void sub_80D1BA8(struct Sprite* sprite, u8 a, u8 b) +{ + u8 tile; + tile = (b & 1); + tile = ((-tile | tile) >> 31) & 32; + sprite->oam.tileNum += tile + (a << 2); + sprite->oam.paletteNum = IndexOfSpritePaletteTag(gUnknown_083D7A5C[b >> 1]); +} + +void sub_80D1C08(struct Sprite* sprite) +{ + sub_80787B0(sprite, 0); + if (GetBankSide(gBattleAnimBankAttacker) != 0) + gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + + sprite->data[0] = gBattleAnimArgs[4]; + sprite->data[2] = sub_8077ABC(gBattleAnimBankAttacker, 0) + gBattleAnimArgs[2]; + sprite->data[4] = sub_8077ABC(gBattleAnimBankAttacker, 1) + gBattleAnimArgs[3]; + sprite->callback = sub_8078B34; + StoreSpriteCallbackInData(sprite, move_anim_8072740); + sub_80D1BA8(sprite, gBattleAnimArgs[5], gBattleAnimArgs[6]); +} diff --git a/src/battle/anim/note_scatter.c b/src/battle/anim/note_scatter.c new file mode 100755 index 000000000..9ff49ee9d --- /dev/null +++ b/src/battle/anim/note_scatter.c @@ -0,0 +1,54 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +static void sub_80CED78(struct Sprite* sprite); + +// note_scatter +// Used by Teeter Dance. + +void sub_80CECE8(struct Sprite* sprite) +{ + int a; + if (GetBankSide(gBattleAnimBankAttacker) == 1) + { + a = gBattleAnimArgs[1]; + (u16)gBattleAnimArgs[1] = -a; + } + + sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 2) + gBattleAnimArgs[1]; + sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 3) + gBattleAnimArgs[2]; + StartSpriteAnim(sprite, gBattleAnimArgs[0]); + sprite->data[2] = 0; + sprite->data[3] = 0; + sprite->data[4] = sprite->pos1.x << 4; + sprite->data[5] = sprite->pos1.y << 4; + sprite->data[6] = (gBattleAnimArgs[1] << 4) / 5; + sprite->data[7] = (gBattleAnimArgs[2] << 7) / 5; + sprite->callback = sub_80CED78; +} + +void sub_80CED78(struct Sprite* sprite) +{ + sprite->data[4] += sprite->data[6]; + sprite->data[5] += sprite->data[7]; + sprite->pos1.x = sprite->data[4] >> 4; + sprite->pos1.y = sprite->data[5] >> 4; + if (sprite->data[0] > 5 && sprite->data[3] == 0) + { + sprite->data[2] = (sprite->data[2] + 16) & 0xFF; + sprite->pos2.x = Cos(sprite->data[2], 18); + sprite->pos2.y = Sin(sprite->data[2], 18); + if (sprite->data[2] == 0) + sprite->data[3] = 1; + } + + if (++sprite->data[0] == 0x30) + move_anim_8074EE0(sprite); +} diff --git a/src/battle/anim/note_scatter_2.c b/src/battle/anim/note_scatter_2.c new file mode 100755 index 000000000..a163aa9a5 --- /dev/null +++ b/src/battle/anim/note_scatter_2.c @@ -0,0 +1,57 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +extern u16 gUnknown_083D712C[4][6]; + +static void sub_80CEEE8(struct Sprite* sprite); + +// note_scatter_2 (slower scatter of notes.) +// Used in Belly Drum. + +void sub_80CEE60(struct Sprite* sprite) +{ + s16 a; + u8 index; + sub_8078650(sprite); + sprite->pos1.y += 8; + StartSpriteAnim(sprite, gBattleAnimArgs[1]); + index = IndexOfSpritePaletteTag(gUnknown_083D712C[gBattleAnimArgs[2]][0]); + if (index != 0xFF) + sprite->oam.paletteNum = index; + + a = (gBattleAnimArgs[0] == 0) ? 0xFFE0 : 0x20; + sprite->data[0] = 40; + sprite->data[1] = sprite->pos1.x; + sprite->data[2] = a + sprite->data[1]; + sprite->data[3] = sprite->pos1.y; + sprite->data[4] = sprite->data[3] - 40; + obj_translate_based_on_private_1_2_3_4(sprite); + sprite->data[5] = gBattleAnimArgs[3]; + sprite->callback = sub_80CEEE8; +} + +void sub_80CEEE8(struct Sprite* sprite) +{ + if (sub_8078B5C(sprite) == 0) + { + s16 a; + a = Sin(sprite->data[5], 8); + if (sprite->pos2.x < 0) + a = -a; + + sprite->pos2.x += a; + sprite->pos2.y += Sin(sprite->data[5], 4); + sprite->data[5] = (sprite->data[5] + 8) & 0xFF; + } + else + { + move_anim_8072740(sprite); + } +} diff --git a/src/battle/anim/note_wave.c b/src/battle/anim/note_wave.c new file mode 100755 index 000000000..4dc3ceb75 --- /dev/null +++ b/src/battle/anim/note_wave.c @@ -0,0 +1,143 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" +#include "palette.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +extern u16 gUnknown_083D712C[4][6]; + +static void sub_80CEBC4(s16 a, s16 b, s16* c, s16* d, s8 e); +static void sub_80CEC1C(struct Sprite* sprite); + +// note_wave +// Used by Grasswhistle, Belly Drum, and Sing. + +// rainbow effect for musical notes +void sub_80CEA20(u8 taskId) +{ + u16 i; + u16 j; + u16 index; + + index = IndexOfSpritePaletteTag(gUnknown_083D712C[0][0]); + if (index != 0xFF) + { + index = (index << 4) + 0x100; + for (i = 1; i < 6; i++) + { + gPlttBufferFaded[index + i] = gUnknown_083D712C[0][i]; + } + } + + for (j = 1; j < 4; j++) + { + index = AllocSpritePalette(gUnknown_083D712C[j][0]); + if (index != 0xFF) + { + index = (index << 4) + 0x100; + for (i = 1; i < 6; i++) + { + gPlttBufferFaded[index + i] = gUnknown_083D712C[j][i]; + } + } + } + DestroyAnimVisualTask(taskId); +} + +// clears the rainbow effect for musical notes. +void sub_80CEAD8(u8 taskId) +{ + u16 i; + for (i = 1; i < 4; i++) + { + FreeSpritePaletteByTag(gUnknown_083D712C[i][0]); + } + + DestroyAnimVisualTask(taskId); +} + +void sub_80CEB0C(struct Sprite* sprite) +{ + u8 index; + u8 a; + u8 b; + sub_8078650(sprite); + StartSpriteAnim(sprite, gBattleAnimArgs[0]); + if ((index = IndexOfSpritePaletteTag(gUnknown_083D712C[gBattleAnimArgs[1]][0])) != 0xFF) + sprite->oam.paletteNum = index; + + sprite->data[1] = gBattleAnimArgs[1]; + sprite->data[2] = 0; + sprite->data[3] = gBattleAnimArgs[2]; + if (NotInBattle()) + { + a = 0x30; + b = 0x28; + } + else + { + a = sub_8077ABC(gBattleAnimBankTarget, 2); + b = sub_8077ABC(gBattleAnimBankTarget, 3); + } + + sprite->data[4] = sprite->pos1.x << 4; + sprite->data[5] = sprite->pos1.y << 4; + sub_80CEBC4(a - sprite->pos1.x, b - sprite->pos1.y, &sprite->data[6], &sprite->data[7], 0x28); + sprite->callback = sub_80CEC1C; +} + +void sub_80CEBC4(s16 a, s16 b, s16* c, s16* d, s8 e) +{ + int f; + int g; + if (a < 0) + e = -e; + + f = a << 8; + g = f / e; + if (g == 0) + g = 1; + + *c = f / g; + *d = (b << 8) / g; +} + +void sub_80CEC1C(struct Sprite* sprite) +{ + int b; + s16 a; + int c; + u8 index; + sprite->data[0]++; + b = sprite->data[0] * 5 - ((sprite->data[0] * 5 / 256) << 8); + sprite->data[4] += sprite->data[6]; + sprite->data[5] += sprite->data[7]; + sprite->pos1.x = sprite->data[4] >> 4; + sprite->pos1.y = sprite->data[5] >> 4; + sprite->pos2.y = Sin(b, 15); + a = (u16)sprite->pos1.y; + c = (u16)sprite->pos1.x; + + if ((u32)((c + 16) << 16) > (0x110) << 16 || a < -16 || a > 0x80) + { + move_anim_8074EE0(sprite); + } + else + { + if (sprite->data[3] && ++sprite->data[2] > sprite->data[3]) + { + sprite->data[2] = 0; + if (++sprite->data[1] > 3) + sprite->data[1] = 0; + + index = IndexOfSpritePaletteTag(gUnknown_083D712C[sprite->data[1]][0]); + if (index != 0xFF) + sprite->oam.paletteNum = index; + } + } +} diff --git a/src/battle/anim/orbit.c b/src/battle/anim/orbit.c new file mode 100755 index 000000000..9b77552fa --- /dev/null +++ b/src/battle/anim/orbit.c @@ -0,0 +1,147 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +static void sub_80CAC44(struct Sprite* sprite); +static void sub_80CADA8(struct Sprite* sprite); +static void sub_80CAE74(struct Sprite* sprite); + +// orbit (The effect of a sprite rotating around another one in a pseudo 3D effect.) +// Used by Spore, Cotton Spore, and Petal Dance. + +void sub_80CABF8(struct Sprite* sprite) +{ + sub_8078764(sprite, 1); + StartSpriteAnim(sprite, gBattleAnimArgs[4]); + if (gBattleAnimArgs[4] == 1) + { + sprite->oam.objMode = 1; + } + + sprite->data[0] = gBattleAnimArgs[3]; + sprite->data[1] = gBattleAnimArgs[2]; + sprite->callback = sub_80CAC44; + sub_80CAC44(sprite); +} + +void sub_80CAC44(struct Sprite* sprite) +{ + u8 var1; + + sprite->pos2.x = Sin(sprite->data[1], 32); + sprite->pos2.y = Cos(sprite->data[1], -3) + ((sprite->data[2] += 24) >> 8); + if ((u16)(sprite->data[1] - 0x40) < 0x80) + { + sprite->oam.priority = (sub_8079ED4(gBattleAnimBankTarget) & 3); + } + else + { + var1 = sub_8079ED4(gBattleAnimBankTarget) + 1; + if (var1 > 3) + { + var1 = 3; + } + + sprite->oam.priority = var1; + } + + sprite->data[1] = (sprite->data[1] + 2) & 0xFF; + sprite->data[0]--; + if (sprite->data[0] == -1) + move_anim_8072740(sprite); +} + +void sub_80CACEC(u8 taskId) +{ + if (NotInBattle() || !IsDoubleBattle()) + { + DestroyAnimVisualTask(taskId); + } + else + { + if (GetBankIdentity_permutated(gBattleAnimBankTarget) == 1) + { + REG_BG2CNT_BITFIELD.priority = 3; + } + else + { + REG_BG1CNT_BITFIELD.priority = 1; + } + + DestroyAnimVisualTask(taskId); + } +} + +void sub_80CAD54(struct Sprite* sprite) +{ + sub_80787B0(sprite, 0); + sprite->data[0] = gBattleAnimArgs[3]; + sprite->data[1] = sprite->pos1.x; + sprite->data[2] = sprite->pos1.x; + sprite->data[3] = sprite->pos1.y; + sprite->data[4] = sub_8077ABC(gBattleAnimBankAttacker, 3) + gBattleAnimArgs[2]; + obj_translate_based_on_private_1_2_3_4(sprite); + sprite->data[5] = 0x40; + sprite->callback = sub_80CADA8; + sub_80CADA8(sprite); +} + +void sub_80CADA8(struct Sprite* sprite) +{ + if (!sub_8078B5C(sprite)) + { + sprite->pos2.x += Sin(sprite->data[5], 32); + sprite->pos2.y += Cos(sprite->data[5], -5); + if ((u16)(sprite->data[5] - 0x40) < 0x80) + { + sprite->subpriority = sub_8079E90(gBattleAnimBankAttacker) - 1; + } + else + { + sprite->subpriority = sub_8079E90(gBattleAnimBankAttacker) + 1; + } + + sprite->data[5] = (sprite->data[5] + 5) & 0xFF; + } + else + { + move_anim_8072740(sprite); + } +} + +void sub_80CAE20(struct Sprite* sprite) +{ + sub_80787B0(sprite, 1); + sprite->data[0] = gBattleAnimArgs[3]; + sprite->data[1] = sprite->pos1.x; + sprite->data[2] = sprite->pos1.x; + sprite->data[3] = sprite->pos1.y; + sprite->data[4] = sub_8077ABC(gBattleAnimBankAttacker, 3) + gBattleAnimArgs[2]; + obj_translate_based_on_private_1_2_3_4(sprite); + sprite->data[5] = 0x40; + sprite->callback = sub_80CAE74; + sub_80CAE74(sprite); +} + +void sub_80CAE74(struct Sprite* sprite) +{ + if (!sub_8078B5C(sprite)) + { + sprite->pos2.x += Sin(sprite->data[5], 8); + if ((u16)(sprite->data[5] - 0x3B) < 5 || (u16)(sprite->data[5] - 0xBB) < 5) + { + sprite->oam.matrixNum ^= 8; + } + + sprite->data[5] = (sprite->data[5] + 5) & 0xFF; + } + else + { + move_anim_8072740(sprite); + } +} diff --git a/src/battle/anim/orbit_fast.c b/src/battle/anim/orbit_fast.c new file mode 100755 index 000000000..30396f398 --- /dev/null +++ b/src/battle/anim/orbit_fast.c @@ -0,0 +1,62 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +static void sub_80D2704(struct Sprite* sprite); + +// orbit_fast (a quickly moving fast circular motion of a sprite around an object.) +// Used by Hidden Power. + +void sub_80D26A4(struct Sprite* sprite) +{ + sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 2); + sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 3); + sprite->affineAnimPaused = 1; + sprite->data[0] = gBattleAnimArgs[0]; + sprite->data[1] = gBattleAnimArgs[1]; + sprite->data[7] = sub_8079E90(gBattleAnimBankAttacker); + sprite->callback = sub_80D2704; + sub_80D2704(sprite); +} + +void sub_80D2704(struct Sprite* sprite) +{ + if ((u16)(sprite->data[1] - 0x40) <= 0x7F) + sprite->subpriority = sprite->data[7] + 1; + else + sprite->subpriority = sprite->data[7] - 1; + + sprite->pos2.x = Sin(sprite->data[1], sprite->data[2] >> 8); + sprite->pos2.y = Cos(sprite->data[1], sprite->data[3] >> 8); + sprite->data[1] = (sprite->data[1] + 9) & 0xFF; + switch (sprite->data[5]) + { + case 1: + sprite->data[2] -= 0x400; + sprite->data[3] -= 0x100; + if (++sprite->data[4] == sprite->data[0]) + { + sprite->data[5] = 2; + return; + } + break; + case 0: + sprite->data[2] += 0x400; + sprite->data[3] += 0x100; + if (++sprite->data[4] == sprite->data[0]) + { + sprite->data[4] = 0; + sprite->data[5] = 1; + } + break; + } + + if ((u16)gBattleAnimArgs[7] == 0xFFFF) + move_anim_8072740(sprite); +} diff --git a/src/battle/anim/orbit_scatter.c b/src/battle/anim/orbit_scatter.c new file mode 100755 index 000000000..6cebc9375 --- /dev/null +++ b/src/battle/anim/orbit_scatter.c @@ -0,0 +1,31 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +static void sub_80D2834(struct Sprite* sprite); + +// orbit_scatter (scatters the objects associated with the fast orbit from the last file.) +// Used in Hidden Power. + +void sub_80D27E0(struct Sprite* sprite) +{ + sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 2); + sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 3); + sprite->data[0] = Sin(gBattleAnimArgs[0], 10); + sprite->data[1] = Cos(gBattleAnimArgs[0], 7); + sprite->callback = sub_80D2834; +} + +void sub_80D2834(struct Sprite* sprite) +{ + sprite->pos2.x += sprite->data[0]; + sprite->pos2.y += sprite->data[1]; + if (sprite->pos1.x + sprite->pos2.x + 16 > 0x110u || sprite->pos1.y + sprite->pos2.y > 0xA0 || sprite->pos1.y + sprite->pos2.y < -16) + move_anim_8072740(sprite); +} diff --git a/src/battle/anim/orbs.c b/src/battle/anim/orbs.c new file mode 100755 index 000000000..22e7d3895 --- /dev/null +++ b/src/battle/anim/orbs.c @@ -0,0 +1,162 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "random.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +static void sub_80CA8B4(struct Sprite* sprite); +static void sub_80CA9F8(struct Sprite* sprite); +static void sub_80CAACC(struct Sprite* sprite); + +extern struct SpriteTemplate gSpriteTemplate_83D631C; + +// orbs +// Used by Solar Beam, Absorb, Hyper Beam, and Leech Seed. + +void sub_80CA7B0(struct Sprite* sprite) +{ + sub_80787B0(sprite, 1); + sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[2] = sub_8077ABC(gBattleAnimBankAttacker, 2); + sprite->data[4] = sub_8077ABC(gBattleAnimBankAttacker, 3); + sprite->callback = sub_8078B34; + StoreSpriteCallbackInData(sprite, move_anim_8074EE0); +} + +void sub_80CA800(struct Sprite* sprite) +{ + sub_80787B0(sprite, 1); + StartSpriteAnim(sprite, gBattleAnimArgs[3]); + sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[2] = sub_8077ABC(gBattleAnimBankTarget, 2); + sprite->data[4] = sub_8077ABC(gBattleAnimBankTarget, 3); + sprite->callback = sub_8078B34; + StoreSpriteCallbackInData(sprite, move_anim_8072740); +} + +void sub_80CA858(struct Sprite* sprite) +{ + sub_80787B0(sprite, 1); + sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[1] = sprite->pos1.x; + sprite->data[2] = sub_8077ABC(gBattleAnimBankTarget, 2); + sprite->data[3] = sprite->pos1.y; + sprite->data[4] = sub_8077ABC(gBattleAnimBankTarget, 3); + obj_translate_based_on_private_1_2_3_4(sprite); + sprite->data[5] = gBattleAnimArgs[3]; + sprite->callback = sub_80CA8B4; + sub_80CA8B4(sprite); +} + +void sub_80CA8B4(struct Sprite* sprite) +{ + if (sub_8078B5C(sprite)) + { + DestroySprite(sprite); + } + else + { + if (sprite->data[5] > 0x7F) + { + sprite->subpriority = sub_8079E90(gBattleAnimBankTarget) + 1; + } + else + { + sprite->subpriority = sub_8079E90(gBattleAnimBankTarget) + 6; + } + sprite->pos2.x += Sin(sprite->data[5], 5); + sprite->pos2.y += Cos(sprite->data[5], 14); + sprite->data[5] = (sprite->data[5] + 15) & 0xFF; + } +} + +void sub_80CA928(u8 taskId) +{ + gTasks[taskId].data[0]--; + if (gTasks[taskId].data[0] == -1) + { + gTasks[taskId].data[1]++; + gTasks[taskId].data[0] = 6; + gBattleAnimArgs[0] = 15; + gBattleAnimArgs[1] = 0; + gBattleAnimArgs[2] = 80; + gBattleAnimArgs[3] = 0; + CreateSpriteAndAnimate(&gSpriteTemplate_83D631C, 0, 0, sub_8079E90(gBattleAnimBankTarget) + 1); + } + + if (gTasks[taskId].data[1] == 15) + DestroyAnimVisualTask(taskId); +} + +void sub_80CA9A8(struct Sprite* sprite) +{ + sub_8078764(sprite, 1); + sprite->data[0] = gBattleAnimArgs[3]; + sprite->data[2] = sub_8077ABC(gBattleAnimBankAttacker, 2); + sprite->data[4] = sub_8077ABC(gBattleAnimBankAttacker, 3); + sprite->data[5] = gBattleAnimArgs[2]; + sub_80786EC(sprite); + sprite->callback = sub_80CA9F8; +} + +void sub_80CA9F8(struct Sprite* sprite) +{ + if (sub_8078718(sprite)) + move_anim_8072740(sprite); +} + +void sub_80CAA14(struct Sprite* sprite) +{ + u16 a = Random(); + u16 b; + + StartSpriteAnim(sprite, a & 7); + sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 2); + sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 3); + if (GetBankSide(gBattleAnimBankAttacker)) + { + sprite->pos1.x -= 20; + } + else + { + sprite->pos1.x += 20; + } + + b = Random(); + sprite->data[0] = (b & 31) + 64; + sprite->data[1] = sprite->pos1.x; + sprite->data[2] = sub_8077ABC(gBattleAnimBankTarget, 2); + sprite->data[3] = sprite->pos1.y; + sprite->data[4] = sub_8077ABC(gBattleAnimBankTarget, 3); + sub_8078D60(sprite); + sprite->data[5] = Random() & 0xFF; + sprite->data[6] = sprite->subpriority; + sprite->callback = sub_80CAACC; + sub_80CAACC(sprite); +} + +void sub_80CAACC(struct Sprite* sprite) +{ + if (sub_8078CE8(sprite)) + { + move_anim_8072740(sprite); + } + else + { + sprite->pos2.y += Cos(sprite->data[5], 12); + if (sprite->data[5] <= 0x7E) + { + sprite->subpriority = sprite->data[6]; + } + else + { + sprite->subpriority = sprite->data[6] + 1; + } + + sprite->data[5] = (sprite->data[5] + 24) & 0xFF; + } +} diff --git a/src/battle/anim/osmose.c b/src/battle/anim/osmose.c new file mode 100755 index 000000000..f1f1b25ff --- /dev/null +++ b/src/battle/anim/osmose.c @@ -0,0 +1,29 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +// osmose (I didn't want to use "absorb" as thats confusing) +// Used by Ingrain. + +void sub_80CB768(struct Sprite* sprite) +{ + if (!sprite->data[0]) + { + sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 2) + gBattleAnimArgs[0]; + sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 1) + gBattleAnimArgs[1]; + sprite->data[1] = gBattleAnimArgs[2]; + sprite->data[2] = gBattleAnimArgs[3]; + sprite->data[3] = gBattleAnimArgs[4]; + } + + sprite->data[0]++; + sprite->pos2.x = sprite->data[1] * sprite->data[0]; + sprite->pos2.y = Sin((sprite->data[0] * 20) & 0xFF, sprite->data[2]); + if (sprite->data[0] > sprite->data[3]) + move_anim_8072740(sprite); +} diff --git a/src/battle/anim/perceive.c b/src/battle/anim/perceive.c new file mode 100755 index 000000000..27afcbc0c --- /dev/null +++ b/src/battle/anim/perceive.c @@ -0,0 +1,24 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +// perceive (shows a sparkle in a set of eyes, usually for heightened perception.) +// Used in Glare, Tickle, and Scary Face. + +void sub_80D2904(struct Sprite* sprite) +{ + if (sprite->animEnded) + move_anim_8072740(sprite); +} + +void sub_80D2920(struct Sprite* sprite) +{ + sub_80787B0(sprite, 1); + sprite->callback = sub_80D2904; +} diff --git a/src/battle/anim/powder.c b/src/battle/anim/powder.c new file mode 100755 index 000000000..178a61737 --- /dev/null +++ b/src/battle/anim/powder.c @@ -0,0 +1,48 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; + +static void sub_80CA768(struct Sprite* sprite); + +// powder +// Used by Sleep Powder, Stun Spore, and Poison Powder. + +void sub_80CA710(struct Sprite* sprite) +{ + sprite->pos1.x += gBattleAnimArgs[0]; + sprite->pos1.y += gBattleAnimArgs[1]; + sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[1] = gBattleAnimArgs[3]; + + if (GetBankSide(gBattleAnimBankAttacker)) + { + sprite->data[3] = -gBattleAnimArgs[4]; + } + else + { + sprite->data[3] = gBattleAnimArgs[4]; + } + + sprite->data[4] = gBattleAnimArgs[5]; + sprite->callback = sub_80CA768; +} + +void sub_80CA768(struct Sprite* sprite) +{ + if (sprite->data[0] > 0) + { + sprite->data[0]--; + sprite->pos2.y = sprite->data[2] >> 8; + sprite->data[2] += sprite->data[1]; + sprite->pos2.x = Sin(sprite->data[5], sprite->data[3]); + sprite->data[5] = (sprite->data[5] + sprite->data[4]) & 0xFF; + } + else + { + move_anim_8072740(sprite); + } +} diff --git a/src/battle/anim/ring.c b/src/battle/anim/ring.c new file mode 100755 index 000000000..0a5816b23 --- /dev/null +++ b/src/battle/anim/ring.c @@ -0,0 +1,156 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" +#include "main.h" +#include "blend_palette.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +extern u8 gObjectBankIDs[]; + +static void sub_80D1098(struct Sprite* sprite); + +// ring (a ring that stretches outward from the Pokemon.) +// Used in Aromatherapy and Heal Bell. + +void sub_80D0FD8(struct Sprite* sprite) +{ + u8 bank = 0; + u16 sp0 = 0; + u16 sp1 = 0; + u8 r4; + + if (gBattleAnimArgs[2] == 0) + bank = gBattleAnimBankAttacker; + else + bank = gBattleAnimBankTarget; + + r4 = gBattleAnimArgs[3] ^ 1; + if (IsDoubleBattle() && IsAnimBankSpriteVisible(bank ^ 2)) + { + sub_807A3FC(bank, r4, &sp0, &sp1); + if (r4 == 0) + r4 = sub_8077ABC(bank, 0); + else + r4 = sub_8077ABC(bank, 2); + + if (GetBankSide(bank) != 0) + gBattleAnimArgs[0] -= (sp0 - r4) - gBattleAnimArgs[0]; // This is weird. + else + gBattleAnimArgs[0] = sp0 - r4; + } + + sprite->callback = sub_80793C4; + sub_80793C4(sprite); +} + +void sub_80D1098(struct Sprite* sprite) +{ + if (sub_8078B5C(sprite)) + { + FreeSpriteOamMatrix(sprite); + move_anim_8072740(sprite); + } +} + +void sub_80D10B8(struct Sprite* sprite) +{ + u16 r9 = 0; + u16 r6 = 0; + s16 sp0 = 0; + s16 sp1 = 0; + u8 sp4; + u8 bankr7; + u8 bankr8; + u8 r10; + + if (gBattleAnimArgs[5] == 0) + { + bankr7 = gBattleAnimBankAttacker; + bankr8 = gBattleAnimBankTarget; + } + else + { + bankr7 = gBattleAnimBankTarget; + bankr8 = gBattleAnimBankAttacker; + } + + if (gBattleAnimArgs[6] == 0) + { + r10 = 0; + sp4 = 1; + } + else + { + r10 = 2; + sp4 = 3; + } + + if (GetBankSide(bankr7) != 0) + { + r9 = sub_8077ABC(bankr7, r10) + gBattleAnimArgs[0]; + if (IsAnimBankSpriteVisible(bankr8 ^ 2)) + sprite->subpriority = gSprites[gObjectBankIDs[bankr8 ^ 2]].subpriority - 1; + else + sprite->subpriority = gSprites[gObjectBankIDs[bankr8]].subpriority - 1; + } + else + { + r9 = sub_8077ABC(bankr7, r10) - gBattleAnimArgs[0]; + if (gMain.inBattle && IsAnimBankSpriteVisible(bankr7 ^ 2)) + { + if (gSprites[gObjectBankIDs[bankr7]].pos1.x < gSprites[gObjectBankIDs[bankr7 ^ 2]].pos1.x) + sprite->subpriority = gSprites[gObjectBankIDs[bankr7 ^ 2]].subpriority + 1; + else + sprite->subpriority = gSprites[gObjectBankIDs[bankr7]].subpriority - 1; + } + else + { + sprite->subpriority = gSprites[gObjectBankIDs[bankr7]].subpriority - 1; + } + + } + + r6 = sub_8077ABC(bankr7, sp4) + gBattleAnimArgs[1]; + if (gMain.inBattle && IsAnimBankSpriteVisible(bankr8 ^ 2)) + { + sub_807A3FC(bankr8, gBattleAnimArgs[6], &sp0, &sp1); + } + else + { + sp0 = sub_8077ABC(bankr8, r10); + sp1 = sub_8077ABC(bankr8, sp4); + } + + if (GetBankSide(bankr8)) + sp0 += gBattleAnimArgs[3]; + else + sp0 -= gBattleAnimArgs[3]; + + sp1 += gBattleAnimArgs[4]; + sprite->pos1.x = sprite->data[1] = r9; + sprite->pos1.y = sprite->data[3] = r6; + sprite->data[2] = sp0; + sprite->data[4] = sp1; + sprite->data[0] = gBattleAnimArgs[0]; + obj_translate_based_on_private_1_2_3_4(sprite); + sprite->callback = sub_80D1098; + sub_80D1098(sprite); +} + +void sub_80D1318(struct Sprite* sprite) +{ + u8 index = IndexOfSpritePaletteTag(0x27DB); + if (index != 0xFF) + { + BlendPalette(((index << 20) + 0x1010000) >> 16, 15, gBattleAnimArgs[5], gBattleAnimArgs[4]); + } + + StartSpriteAffineAnim(sprite, 1); + sprite->callback = sub_80793C4; + sub_80793C4(sprite); +} diff --git a/src/battle/anim/roots.c b/src/battle/anim/roots.c new file mode 100755 index 000000000..40c51808a --- /dev/null +++ b/src/battle/anim/roots.c @@ -0,0 +1,67 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +extern s16 gUnknown_03000728[]; + +static void sub_80CB710(struct Sprite* sprite); + +// roots +// Used by Ingrain and Frenzy Plant. + +void sub_80CB59C(struct Sprite* sprite) +{ + if (!sprite->data[0]) + { + sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 2); + sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 1); + sprite->pos2.x = gBattleAnimArgs[0]; + sprite->pos2.y = gBattleAnimArgs[1]; + sprite->subpriority = gBattleAnimArgs[2] + 30; + StartSpriteAnim(sprite, gBattleAnimArgs[3]); + sprite->data[2] = gBattleAnimArgs[4]; + sprite->data[0]++; + if ((sprite->pos1.y + sprite->pos2.y) > 120) + { + sprite->pos1.y += -120 + (sprite->pos2.y + sprite->pos1.y); + } + } + sprite->callback = sub_80CB710; +} + +void sub_80CB620(struct Sprite *sprite) +{ + s16 p1 = sub_8077ABC(gBattleAnimBankAttacker, 2); + s16 p2 = sub_8077ABC(gBattleAnimBankAttacker, 3); + s16 e1 = sub_8077ABC(gBattleAnimBankTarget, 2); + s16 e2 = sub_8077ABC(gBattleAnimBankTarget, 3); + + e1 -= p1; + e2 -= p2; + sprite->pos1.x = p1 + e1 * gBattleAnimArgs[0] / 100; + sprite->pos1.y = p2 + e2 * gBattleAnimArgs[0] / 100; + sprite->pos2.x = gBattleAnimArgs[1]; + sprite->pos2.y = gBattleAnimArgs[2]; + sprite->subpriority = gBattleAnimArgs[3] + 30; + StartSpriteAnim(sprite, gBattleAnimArgs[4]); + sprite->data[2] = gBattleAnimArgs[5]; + sprite->callback = sub_80CB710; + gUnknown_03000728[0] = sprite->pos1.x; + gUnknown_03000728[1] = sprite->pos1.y; + gUnknown_03000728[2] = e1; + gUnknown_03000728[3] = e2; +} + +void sub_80CB710(struct Sprite* sprite) +{ + if (++sprite->data[0] > (sprite->data[2] - 10)) + sprite->invisible = sprite->data[0] % 2; + + if (sprite->data[0] > sprite->data[2]) + move_anim_8072740(sprite); +} diff --git a/src/battle/anim/scan.c b/src/battle/anim/scan.c new file mode 100755 index 000000000..5573758c3 --- /dev/null +++ b/src/battle/anim/scan.c @@ -0,0 +1,200 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" +#include "palette.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +extern s8 gUnknown_083D6DDC[4][2]; + +static void sub_80CD408(struct Sprite* sprite); +static void sub_80CD4B8(struct Sprite* sprite); +static void sub_80CD4EC(struct Sprite* sprite); +static void sub_80CD5A8(struct Sprite* sprite); +static void sub_80CD654(struct Sprite* sprite); +static void sub_80CD67C(struct Sprite* sprite); + +// scan +// Used by Lock-On. + +void sub_80CD3E0(struct Sprite* sprite) +{ + sprite->pos1.x -= 32; + sprite->pos1.y -= 32; + sprite->data[0] = 20; + sprite->callback = sub_80782D8; + StoreSpriteCallbackInData(sprite, sub_80CD408); +} + +void sub_80CD408(struct Sprite* sprite) +{ + switch (sprite->data[5] & 1) + { + case 0: + sprite->data[0] = 1; + sprite->callback = sub_80782D8; + StoreSpriteCallbackInData(sprite, sub_80CD408); + break; + case 1: + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.y = 0; + sprite->pos2.x = 0; + sprite->data[0] = 8; + sprite->data[2] = sprite->pos1.x + gUnknown_083D6DDC[sprite->data[5] >> 8][0]; + sprite->data[4] = sprite->pos1.y + gUnknown_083D6DDC[sprite->data[5] >> 8][1]; + sprite->callback = sub_8078B34; + StoreSpriteCallbackInData(sprite, sub_80CD4B8); + sprite->data[5] += 0x100; + PlaySE12WithPanning(0xD2, sub_8076F98(0x3F)); + break; + } + + sprite->data[5] ^= 1; +} + +void sub_80CD4B8(struct Sprite* sprite) +{ + if ((sprite->data[5] >> 8) == 4) + { + sprite->data[0] = 10; + sprite->callback = sub_80782D8; + StoreSpriteCallbackInData(sprite, sub_80CD4EC); + } + else + { + sprite->callback = sub_80CD408; + } +} + +void sub_80CD4EC(struct Sprite* sprite) +{ + s16 a; + s16 b; + if (sprite->oam.affineParam == 0) + { + sprite->data[0] = 3; + sprite->data[1] = 0; + sprite->data[2] = 0; + sprite->callback = sub_80782D8; + StoreSpriteCallbackInData(sprite, sub_80CD5A8); + } + else + { + switch (sprite->oam.affineParam) + { + case 1: + a = -8; + b = -8; + break; + case 2: + a = -8; + b = 8; + break; + case 3: + a = 8; + b = -8; + break; + default: + a = 8; + b = 8; + break; + } + + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.y = 0; + sprite->pos2.x = 0; + sprite->data[0] = 6; + sprite->data[2] = sub_8077ABC(gBattleAnimBankTarget, 2) + a; + sprite->data[4] = sub_8077ABC(gBattleAnimBankTarget, 3) + b; + sprite->callback = sub_8078B34; + StoreSpriteCallbackInData(sprite, sub_80CD654); + } +} + +void sub_80CD5A8(struct Sprite* sprite) +{ + if (sprite->data[2] == 0) + { + if ((sprite->data[1] += 3) > 16) + sprite->data[1] = 16; + } + else if ((sprite->data[1] -= 3) < 0) + { + sprite->data[1] = 0; + } + + BlendPalettes(sub_80791A8(1, 1, 1, 1, 1, 0, 0), sprite->data[1], 0x7FFF); + if (sprite->data[1] == 16) + { + int pal; + sprite->data[2]++; + pal = sprite->oam.paletteNum; + LoadPalette(&gPlttBufferUnfaded[0x108 + pal * 16], pal * 16 | 0x101, 4); + PlaySE12WithPanning(0xC0, sub_8076F98(0x3F)); + } + else if (sprite->data[1] == 0) + { + sprite->callback = sub_80CD654; + } +} + +void sub_80CD654(struct Sprite* sprite) +{ + if ((u16)gBattleAnimArgs[7] == 0xFFFF) + { + sprite->data[1] = 0; + sprite->data[0] = 0; + sprite->callback = sub_80CD67C; + } +} + +void sub_80CD67C(struct Sprite* sprite) +{ + if (sprite->data[0] % 3 == 0) + { + sprite->data[1]++; + sprite->invisible ^= 1; + } + + sprite->data[0]++; + if (sprite->data[1] == 8) + move_anim_8072740(sprite); +} + +void sub_80CD6CC(struct Sprite* sprite) +{ + sprite->oam.affineParam = gBattleAnimArgs[0]; + if ((s16)sprite->oam.affineParam == 1) + { + sprite->pos1.x -= 0x18; + sprite->pos1.y -= 0x18; + } + else if ((s16)sprite->oam.affineParam == 2) + { + sprite->pos1.x -= 0x18; + sprite->pos1.y += 0x18; + sprite->oam.matrixNum = 16; + } + else if ((s16)sprite->oam.affineParam == 3) + { + sprite->pos1.x += 0x18; + sprite->pos1.y -= 0x18; + sprite->oam.matrixNum = 8; + } + else + { + sprite->pos1.x += 0x18; + sprite->pos1.y += 0x18; + sprite->oam.matrixNum = 24; + } + + sprite->oam.tileNum = (sprite->oam.tileNum + 16); + sprite->callback = sub_80CD3E0; + sub_80CD3E0(sprite); +} diff --git a/src/battle/anim/scary_face.c b/src/battle/anim/scary_face.c new file mode 100755 index 000000000..9f1dfd7d0 --- /dev/null +++ b/src/battle/anim/scary_face.c @@ -0,0 +1,136 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" +#include "decompress.h" +#include "palette.h" + +struct Struct_sub_8078914 +{ + u8 *field_0; + u8 *field_4; + u8 field_8; +}; + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +extern struct INCBIN_U8 gBattleAnimBackgroundTilemap_ScaryFaceContest; +extern struct INCBIN_U8 gBattleAnimBackgroundTilemap_ScaryFacePlayer; +extern struct INCBIN_U8 gBattleAnimBackgroundTilemap_ScaryFaceOpponent; +extern struct INCBIN_U8 gBattleAnimBackgroundImage_ScaryFace; +extern struct INCBIN_U8 gBattleAnimBackgroundPalette_ScaryFace; + +extern u16 gUnknown_030041B4; +extern u16 gUnknown_030042C0; + +static void sub_80D24E0(u8 taskId); + +// scary_face (darkens the screen and shows a scary face.) +// Used in Glare and Scary Face. + +void sub_80D23B4(u8 taskId) +{ + struct Struct_sub_8078914 subStruct; + u8* tempvar; + REG_BLDCNT = 0x3F42; + REG_BLDALPHA = 0x1000; + REG_BG1CNT_BITFIELD.priority = 1; + REG_BG1CNT_BITFIELD.screenSize = 0; + if (!NotInBattle()) + REG_BG1CNT_BITFIELD.charBaseBlock = 1; + + gUnknown_030042C0 = 0; + gUnknown_030041B4 = 0; + REG_BG1HOFS = 0; + REG_BG1VOFS = 0; + sub_8078914(&subStruct); + tempvar = subStruct.field_4; + DmaFill32(3, 0x0, tempvar, 0x1000); + if (NotInBattle()) + LZDecompressVram(&gBattleAnimBackgroundTilemap_ScaryFaceContest, subStruct.field_4); + else if (GetBankSide(gBattleAnimBankTarget) == 1) + LZDecompressVram(&gBattleAnimBackgroundTilemap_ScaryFacePlayer, subStruct.field_4); + else + LZDecompressVram(&gBattleAnimBackgroundTilemap_ScaryFaceOpponent, subStruct.field_4); + + LZDecompressVram(&gBattleAnimBackgroundImage_ScaryFace, subStruct.field_0); + LoadCompressedPalette(&gBattleAnimBackgroundPalette_ScaryFace, subStruct.field_8 << 4, 32); + if (NotInBattle()) + sub_80763FC(subStruct.field_8, (u16 *)subStruct.field_4, 0, 0); + + gTasks[taskId].func = sub_80D24E0; +} + +void sub_80D24E0(u8 taskId) +{ + struct Struct_sub_8078914 subStruct; + + switch (gTasks[taskId].data[12]) + { + case 0: + if (++gTasks[taskId].data[10] == 2) + { + gTasks[taskId].data[10] = 0; + gTasks[taskId].data[11]++; + REG_BLDALPHA = gTasks[taskId].data[11] | ((16 - gTasks[taskId].data[11]) << 8); + if (gTasks[taskId].data[11] == 14) + { + gTasks[taskId].data[12]++; + gTasks[taskId].data[11] = 0; + } + } + break; + case 1: + if (++gTasks[taskId].data[11] == 0x15) + { + gTasks[taskId].data[11] = 14; + gTasks[taskId].data[12]++; + } + break; + case 2: + if (++gTasks[taskId].data[10] == 2) + { + gTasks[taskId].data[10] = 0; + gTasks[taskId].data[11]--; + REG_BLDALPHA = gTasks[taskId].data[11] | ((16 - gTasks[taskId].data[11]) << 8); + if (gTasks[taskId].data[11] == 0) + { + gTasks[taskId].data[12]++; + gTasks[taskId].data[11] = 0; + } + } + break; + case 3: + sub_8078914(&subStruct); + { + u8 *addr = subStruct.field_0; + u32 size = 0x2000; + while (1) + { + DmaFill32(3, 0, addr, 0x1000); + addr += 0x1000; + size -= 0x1000; + if (size <= 0x1000) + { + DmaFill32(3, 0, addr, size); + break; + } + } + } + DmaClear32(3, subStruct.field_4, 0x800); + if (!NotInBattle()) + REG_BG1CNT_BITFIELD.charBaseBlock = 0; + + gTasks[taskId].data[12]++; + // fall through + case 4: + REG_BLDCNT = 0; + REG_BLDALPHA = 0; + REG_BG1CNT_BITFIELD.priority = 1; + DestroyAnimVisualTask(taskId); + break; + } +} diff --git a/src/battle/anim/seed.c b/src/battle/anim/seed.c new file mode 100755 index 000000000..bd072849a --- /dev/null +++ b/src/battle/anim/seed.c @@ -0,0 +1,50 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +static void sub_80CAB88(struct Sprite* sprite); +static void sub_80CABC0(struct Sprite* sprite); + +// seed (sprouts a sapling from a seed.) +// Used by Leech Seed. + +void sub_80CAB18(struct Sprite* sprite) +{ + sub_80787B0(sprite, 1); + if (GetBankSide(gBattleAnimBankAttacker)) + { + gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + } + + sprite->data[0] = gBattleAnimArgs[4]; + sprite->data[2] = sub_8077ABC(gBattleAnimBankTarget, 0) + gBattleAnimArgs[2]; + sprite->data[4] = sub_8077ABC(gBattleAnimBankTarget, 1) + gBattleAnimArgs[3]; + sprite->data[5] = gBattleAnimArgs[5]; + sub_80786EC(sprite); + sprite->callback = sub_80CAB88; +} + +void sub_80CAB88(struct Sprite* sprite) +{ + if (sub_8078718(sprite)) + { + sprite->invisible = 1; + sprite->data[0] = 10; + sprite->callback = sub_80782D8; + StoreSpriteCallbackInData(sprite, sub_80CABC0); + } +} + +void sub_80CABC0(struct Sprite* sprite) +{ + sprite->invisible = 0; + StartSpriteAnim(sprite, 1); + sprite->data[0] = 60; + sprite->callback = sub_80782D8; + StoreSpriteCallbackInData(sprite, move_anim_8072740); +} diff --git a/src/battle/anim/shadow_enlarge.c b/src/battle/anim/shadow_enlarge.c new file mode 100755 index 000000000..bed6c7ea3 --- /dev/null +++ b/src/battle/anim/shadow_enlarge.c @@ -0,0 +1,35 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +static void sub_80D0428(u8 taskId); + +// shadow_enlarge (the magnifying-like shadow over the Pokemon effect) +// Used in Disable. + +void sub_80D03C4(u8 taskId) +{ + u8 spriteId = GetAnimBankSpriteId(1); + sub_8078E70(spriteId, 1); + obj_id_set_rotscale(spriteId, 0xD0, 0xD0, 0); + sub_8079108(gSprites[spriteId].oam.paletteNum + 16, 0); + gTasks[taskId].data[0] = 0x50; + gTasks[taskId].func = sub_80D0428; +} + +void sub_80D0428(u8 taskId) +{ + if (--gTasks[taskId].data[0] == -1) + { + u8 spriteId = GetAnimBankSpriteId(1); + sub_8078F40(spriteId); + sub_8079108(gSprites[spriteId].oam.paletteNum + 16, 1); + DestroyAnimVisualTask(taskId); + } +} diff --git a/src/battle/anim/shadow_minimize.c b/src/battle/anim/shadow_minimize.c new file mode 100755 index 000000000..22ebeab7a --- /dev/null +++ b/src/battle/anim/shadow_minimize.c @@ -0,0 +1,262 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +static void sub_80D04E0(u8 taskId); +void sub_80D0614(struct Task* task, u8 taskId); +void sub_80D0704(struct Sprite* sprite); + +// shadow_minimize (the minimizing-like shadow over the Pokemon effect.) +// Used in Minimize. + +void sub_80D0488(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + u8 spriteId = GetAnimBankSpriteId(0); + task->data[0] = spriteId; + sub_8078E70(spriteId, 0); + task->data[1] = 0; + task->data[2] = 0; + task->data[3] = 0; + task->data[4] = 0x100; + task->data[5] = 0; + task->data[6] = 0; + task->data[7] = sub_8079E90(gBattleAnimBankAttacker); + task->func = sub_80D04E0; +} + +void sub_80D04E0(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + switch (task->data[1]) + { + case 0: + if (task->data[2] == 0 || task->data[2] == 3 || task->data[2] == 6) + sub_80D0614(task, taskId); + task->data[2]++; + task->data[4] += 0x28; + obj_id_set_rotscale(task->data[0], task->data[4], task->data[4], 0); + sub_8079A64(task->data[0]); + if (task->data[2] == 32) + { + task->data[5]++; + task->data[1]++; + } + break; + case 1: + if (task->data[6] == 0) + { + if (task->data[5] == 3) + { + task->data[2] = 0; + task->data[1] = 3; + } + else + { + task->data[2] = 0; + task->data[3] = 0; + task->data[4] = 0x100; + obj_id_set_rotscale(task->data[0], task->data[4], task->data[4], 0); + sub_8079A64(task->data[0]); + task->data[1] = 2; + } + } + break; + case 2: + task->data[1] = 0; + break; + case 3: + if (++task->data[2] > 32) + { + task->data[2] = 0; + task->data[1]++; + } + break; + case 4: + task->data[2] += 2; + task->data[4] -= 0x50; + obj_id_set_rotscale(task->data[0], task->data[4], task->data[4], 0); + sub_8079A64(task->data[0]); + if (task->data[2] == 32) + { + task->data[2] = 0; + task->data[1]++; + } + break; + case 5: + sub_8078F40(task->data[0]); + gSprites[task->data[15]].pos2.y = 0; + DestroyAnimVisualTask(taskId); + break; + } +} + +#ifdef NONMATCHING +void sub_80D0614(struct Task* task, u8 taskId) +{ + s16 r8 = duplicate_obj_of_side_rel2move_in_transparent_mode(0); + if (r8 >= 0) + { + u8 r6 = AllocOamMatrix(); + if (r6 == 0xFF) + { + obj_delete_but_dont_free_vram(&gSprites[r8]); + } + else + { + gSprites[r8].oam.objMode = 1; + gSprites[r8].oam.affineMode = 3; + gSprites[r8].affineAnimPaused = 1; + gSprites[r8].oam.matrixNum = r6; + gSprites[r8].subpriority = task->data[7] - task->data[3]; + task->data[3]++; + task->data[6]++; + gSprites[r8].data[0] = 16; + gSprites[r8].data[1] = taskId; + gSprites[r8].data[2] = 6; + gSprites[r8].callback = sub_80D0704; + obj_id_set_rotscale(r8, task->data[4], task->data[4], 0); + gSprites[r8].oam.affineMode = 1; + CalcCenterToCornerVec(&gSprites[r8], gSprites[r8].oam.shape, gSprites[r8].oam.size, gSprites[r8].oam.affineMode); + } + } +} +#else +__attribute__((naked)) +void sub_80D0614(struct Task* task, u8 taskId) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r9\n\ + mov r6, r8\n\ + push {r6,r7}\n\ + adds r7, r0, 0 @r7 is task\n\ + lsls r1, 24\n\ + lsrs r1, 24\n\ + mov r9, r1 @r9 is taskId\n\ + movs r0, 0\n\ + bl duplicate_obj_of_side_rel2move_in_transparent_mode\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + mov r8, r0\n\ + lsls r0, 16\n\ + asrs r4, r0, 16\n\ + cmp r4, 0\n\ + blt _080D06EE @jump to bottom\n\ + bl AllocOamMatrix\n\ + lsls r0, 24\n\ + lsrs r6, r0, 24\n\ + cmp r6, 0xFF\n\ + bne _080D0658\n\ + lsls r0, r4, 4\n\ + adds r0, r4\n\ + lsls r0, 2\n\ + ldr r1, _080D0654 @ =gSprites\n\ + adds r0, r1\n\ + bl obj_delete_but_dont_free_vram\n\ + b _080D06EE @ jump to bottom\n\ + .align 2, 0\n\ +_080D0654: .4byte gSprites\n\ +_080D0658:\n\ + ldr r5, _080D06FC @ =gSprites\n\ + lsls r3, r4, 4\n\ + adds r3, r4\n\ + lsls r3, 2\n\ + adds r4, r3, r5\n\ + ldrb r1, [r4, 0x1]\n\ + movs r0, 0xD\n\ + negs r0, r0\n\ + ands r0, r1\n\ + movs r1, 0x4\n\ + orrs r0, r1\n\ + movs r1, 0x3\n\ + orrs r0, r1\n\ + strb r0, [r4, 0x1]\n\ + adds r2, r4, 0\n\ + adds r2, 0x2C\n\ + ldrb r0, [r2]\n\ + movs r1, 0x80\n\ + orrs r0, r1\n\ + strb r0, [r2]\n\ + movs r0, 0x1F\n\ + ands r6, r0\n\ + lsls r2, r6, 1\n\ + ldrb r1, [r4, 0x3]\n\ + movs r0, 0x3F\n\ + negs r0, r0\n\ + ands r0, r1\n\ + orrs r0, r2\n\ + strb r0, [r4, 0x3]\n\ + ldrb r0, [r7, 0x16]\n\ + ldrb r1, [r7, 0xE]\n\ + subs r0, r1\n\ + adds r1, r4, 0\n\ + adds r1, 0x43\n\ + strb r0, [r1]\n\ + ldrh r0, [r7, 0xE]\n\ + adds r0, 0x1\n\ + strh r0, [r7, 0xE]\n\ + ldrh r0, [r7, 0x14]\n\ + adds r0, 0x1\n\ + strh r0, [r7, 0x14]\n\ + movs r0, 0x10\n\ + strh r0, [r4, 0x2E]\n\ + mov r0, r9\n\ + strh r0, [r4, 0x30]\n\ + movs r0, 0x6\n\ + strh r0, [r4, 0x32]\n\ + adds r5, 0x1C\n\ + adds r3, r5\n\ + ldr r0, _080D0700 @ =sub_80D0704\n\ + str r0, [r3]\n\ + mov r1, r8 @duplicate_obj_of_side_rel2move_in_transparent_mode(0)\n\ + lsls r0, r1, 24\n\ + lsrs r0, 24\n\ + movs r1, 0x10\n\ + ldrsh r2, [r7, r1]\n\ + adds r1, r2, 0\n\ + movs r3, 0\n\ + bl obj_id_set_rotscale\n\ + ldrb r0, [r4, 0x1]\n\ + movs r3, 0x4\n\ + negs r3, r3\n\ + ands r3, r0\n\ + movs r0, 0x1\n\ + orrs r3, r0\n\ + strb r3, [r4, 0x1]\n\ + lsrs r1, r3, 6\n\ + ldrb r2, [r4, 0x3]\n\ + lsrs r2, 6\n\ + lsls r3, 30\n\ + lsrs r3, 30\n\ + adds r0, r4, 0\n\ + bl CalcCenterToCornerVec\n\ +_080D06EE:\n\ + pop {r3,r4}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_080D06FC: .4byte gSprites\n\ +_080D0700: .4byte sub_80D0704\n\ +.syntax divided\n"); +} +#endif + +void sub_80D0704(struct Sprite* sprite) +{ + if (--sprite->data[0] == 0) + { + gTasks[sprite->data[1]].data[sprite->data[2]]--; + FreeOamMatrix(sprite->oam.matrixNum); + obj_delete_but_dont_free_vram(sprite); + } +} diff --git a/src/battle/anim/shield.c b/src/battle/anim/shield.c new file mode 100755 index 000000000..8ed4f9796 --- /dev/null +++ b/src/battle/anim/shield.c @@ -0,0 +1,81 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" +#include "palette.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +static void sub_80CCE0C(struct Sprite* sprite); + +// shield +// Used by Protect. + +void sub_80CCD24(struct Sprite* sprite) +{ + if (NotInBattle() != 0) + { + gBattleAnimArgs[1] += 8; + } + + sprite->pos1.x = sub_8077EE4(gBattleAnimBankAttacker, 0) + gBattleAnimArgs[0]; + sprite->pos1.y = sub_8077EE4(gBattleAnimBankAttacker, 1) + gBattleAnimArgs[1]; + if (GetBankSide(gBattleAnimBankAttacker) == 0 || NotInBattle()) + sprite->oam.priority = sub_8079ED4(gBattleAnimBankAttacker) + 1; + else + sprite->oam.priority = sub_8079ED4(gBattleAnimBankAttacker); + + sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[2] = (IndexOfSpritePaletteTag(0x2828) << 4) + 0x100; + sprite->data[7] = 16; + REG_BLDCNT = 0x3F40; + REG_BLDALPHA = (sprite->data[7] << 8) | (16 - sprite->data[7]); + sprite->callback = sub_80CCE0C; +} + +void sub_80CCE0C(struct Sprite* sprite) +{ + int a; + int i; + sprite->data[5] += 0x60; + sprite->pos2.x = -(sprite->data[5] >> 8); + sprite->data[1]++; + if (sprite->data[1] > 1) + { + sprite->data[1] = 0; + a = gPlttBufferFaded[sprite->data[2] + 1]; + i = 0; + do + { + gPlttBufferFaded[sprite->data[2] + ++i] = gPlttBufferFaded[sprite->data[2] + i + 1]; + } while ( i <= 5 ); + + gPlttBufferFaded[sprite->data[2] + 7] = a; + } + + if (sprite->data[7] > 6 && sprite->data[0] >0 && ++sprite->data[6] > 1) + { + sprite->data[6] = 0; + sprite->data[7] -= 1; + REG_BLDALPHA = (sprite->data[7] << 8) | (16 - sprite->data[7]);; + } + + if (sprite->data[0] >0) + { + sprite->data[0] -= 1; + } + else if (++sprite->data[6] > 1) + { + sprite->data[6] = 0; + sprite->data[7]++; + REG_BLDALPHA = (sprite->data[7] << 8) | (16 - sprite->data[7]); + if (sprite->data[7] == 16) + { + sprite->invisible = 1; + sprite->callback = sub_807861C; + } + } +} diff --git a/src/battle/anim/shimmer.c b/src/battle/anim/shimmer.c new file mode 100755 index 000000000..ecb3dcdf9 --- /dev/null +++ b/src/battle/anim/shimmer.c @@ -0,0 +1,48 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" +#include "blend_palette.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +extern u16 gUnknown_083D6984[]; + +// shimmer +// Used by Magical Leaf. + +void sub_80CC5F8(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + switch (task->data[0]) + { + case 0: + task->data[8] = IndexOfSpritePaletteTag(0x274f) * 16 + 256; + task->data[12] = IndexOfSpritePaletteTag(0x27b0) * 16 + 256; + task->data[0]++; + break; + case 1: + task->data[9]++; + if (task->data[9] >= 0) + { + task->data[9] = 0; + BlendPalette(task->data[8], 0x10, task->data[10], gUnknown_083D6984[task->data[11]]); + BlendPalette(task->data[12], 0x10, task->data[10], gUnknown_083D6984[task->data[11]]); + task->data[10]++; + if (task->data[10] == 17) + { + task->data[10] = 0; + task->data[11]++; + if (task->data[11] == 7) + task->data[11] = 0; + } + } + break; + } + + if (gBattleAnimArgs[7] == -1) + DestroyAnimVisualTask(taskId); +} diff --git a/src/battle/anim/silhouette.c b/src/battle/anim/silhouette.c new file mode 100755 index 000000000..71ff3dae2 --- /dev/null +++ b/src/battle/anim/silhouette.c @@ -0,0 +1,77 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +static void sub_80CB3A8(u8 taskId); +static void sub_80CB438(u8 taskId); + +// silhouette (the transparent shadow image used for mimic.) +// Only used by Mimic. + +void sub_80CB340(u8 taskId) +{ + u8 spriteId = GetAnimBankSpriteId(1); + if (gSprites[spriteId].invisible) + { + DestroyAnimVisualTask(taskId); + } + else + { + sub_8078E70(spriteId, 1); + gTasks[taskId].data[0] = gBattleAnimArgs[0]; + gTasks[taskId].data[1] = gBattleAnimArgs[1]; + gTasks[taskId].data[11] = 256; + gTasks[taskId].func = sub_80CB3A8; + } +} + +void sub_80CB3A8(u8 taskId) +{ + u8 spriteId = GetAnimBankSpriteId(1); + gTasks[taskId].data[10] += gTasks[taskId].data[0]; + gSprites[spriteId].pos2.x = gTasks[taskId].data[10] >> 8; + if (GetBankSide(gBattleAnimBankTarget)) + { + gSprites[spriteId].pos2.x = -gSprites[spriteId].pos2.x; + } + + gTasks[taskId].data[11] += 16; + obj_id_set_rotscale(spriteId, gTasks[taskId].data[11], gTasks[taskId].data[11], 0); + sub_8079A64(spriteId); + gTasks[taskId].data[1]--; + if (!gTasks[taskId].data[1]) + { + gTasks[taskId].data[0] = 0; + gTasks[taskId].func = sub_80CB438; + } +} + +void sub_80CB438(u8 taskId) +{ + if ((u16)gBattleAnimArgs[7] == 0xFFFF) + { + if (gTasks[taskId].data[0] == 0) + { + u8 spriteId = GetAnimBankSpriteId(1); + sub_8078F40(spriteId); + gSprites[spriteId].pos2.x = 0; + gSprites[spriteId].pos2.y = 0; + gTasks[taskId].data[0]++; + return; + } + } + else + { + if (gTasks[taskId].data[0] == 0) + return; + } + + gTasks[taskId].data[0]++; + if (gTasks[taskId].data[0] == 3) + DestroyAnimVisualTask(taskId); +} diff --git a/src/battle/anim/slash.c b/src/battle/anim/slash.c new file mode 100755 index 000000000..c5869c4ab --- /dev/null +++ b/src/battle/anim/slash.c @@ -0,0 +1,83 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +static void sub_80CDE78(struct Sprite* sprite); +static void sub_80CDEB0(struct Sprite* sprite); +static void sub_80CDEC0(struct Sprite* sprite); + +// slash (a cutting animation) +// Used in Slash and False Swipe. + +void sub_80CDD74(struct Sprite* sprite) +{ + if (gBattleAnimArgs[0] == 0) + { + sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 2) + gBattleAnimArgs[1]; + sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 3) + gBattleAnimArgs[2]; + } + else + { + sprite->pos1.x = sub_8077ABC(gBattleAnimBankTarget, 2) + gBattleAnimArgs[1]; + sprite->pos1.y = sub_8077ABC(gBattleAnimBankTarget, 3) + gBattleAnimArgs[2]; + } + + sprite->data[0] = 0; + sprite->data[1] = 0; + StoreSpriteCallbackInData(sprite, sub_80CDEC0); + sprite->callback = sub_8078600; +} + +void sub_80CDDDC(struct Sprite* sprite) +{ + sprite->pos1.x = sub_8077ABC(gBattleAnimBankTarget, 2) + 0xFFD0; + sprite->pos1.y = sub_8077ABC(gBattleAnimBankTarget, 3); + StoreSpriteCallbackInData(sprite, sub_80CDE78); + sprite->callback = sub_8078600; +} + +void sub_80CDE24(struct Sprite* sprite) +{ + sprite->pos1.x = sprite->pos1.x = sub_8077ABC(gBattleAnimBankTarget, 2) + 0xFFD0 + gBattleAnimArgs[0]; + sprite->pos1.y = sub_8077ABC(gBattleAnimBankTarget, 3); + StartSpriteAnim(sprite, 1); + sprite->data[0] = 0; + sprite->data[1] = 0; + sprite->callback = sub_80CDEC0; +} + +void sub_80CDE78(struct Sprite* sprite) +{ + if (++sprite->data[0] > 8) + { + sprite->data[0] = 12; + sprite->data[1] = 8; + sprite->data[2] = 0; + StoreSpriteCallbackInData(sprite, sub_80CDEB0); + sprite->callback = sub_8078364; + } +} + +void sub_80CDEB0(struct Sprite* sprite) +{ + sprite->data[0] = 0; + sprite->data[1] = 0; + sprite->callback = sub_80CDEC0; +} + +void sub_80CDEC0(struct Sprite* sprite) +{ + if (++sprite->data[0] > 1) + { + sprite->data[0] = 0; + sprite->invisible = !sprite->invisible; + if (++sprite->data[1] > 8) + move_anim_8072740(sprite); + } +} diff --git a/src/battle/anim/sleep.c b/src/battle/anim/sleep.c new file mode 100755 index 000000000..58ecc702f --- /dev/null +++ b/src/battle/anim/sleep.c @@ -0,0 +1,44 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +static void sub_80CD394(struct Sprite* sprite); + +// sleep (the "ZZZ" graphical effect) +// Used by Rest and the sleep turn when the Pokemon is still asleep. + +void sub_80CD328(struct Sprite* sprite) +{ + sub_8078650(sprite); + if (GetBankSide(gBattleAnimBankAttacker) == 0) + { + sprite->pos1.x += gBattleAnimArgs[0]; + sprite->pos1.y += gBattleAnimArgs[1]; + sprite->data[3] = 1; + } + else + { + sprite->pos1.x -= gBattleAnimArgs[0]; + sprite->pos1.y += gBattleAnimArgs[1]; + sprite->data[3] = 0xFFFF; + StartSpriteAffineAnim(sprite, 1); + } + + sprite->callback = sub_80CD394; +} + +void sub_80CD394(struct Sprite* sprite) +{ + sprite->pos2.y = -(sprite->data[0] / 0x28); + sprite->pos2.x = sprite->data[4] / 10; + sprite->data[4] += sprite->data[3] * 2; + sprite->data[0] += sprite->data[1]; + if (++sprite->data[1] > 0x3C) + move_anim_8074EE0(sprite); +} diff --git a/src/battle/anim/slice.c b/src/battle/anim/slice.c new file mode 100755 index 000000000..8e33dcb06 --- /dev/null +++ b/src/battle/anim/slice.c @@ -0,0 +1,111 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +static void sub_80CCB00(struct Sprite* sprite); + +// slice (the cutting animation showing as a yellow line drawn diagonally) +// Used in Cut, Fury Cutter, Aerial Ace, and Air Cutter. + +void sub_80CC914(struct Sprite* sprite) +{ + sprite->pos1.x = sub_8077ABC(gBattleAnimBankTarget, 0); + sprite->pos1.y = sub_8077ABC(gBattleAnimBankTarget, 1); + if (GetBankSide(gBattleAnimBankTarget) == 0) + sprite->pos1.y += 8; + + sprite->callback = sub_80CCB00; + if (gBattleAnimArgs[2] == 0) + { + sprite->pos1.x += gBattleAnimArgs[0]; + } + else + { + sprite->pos1.x -= gBattleAnimArgs[0]; + sprite->hFlip = 1; + } + + sprite->pos1.y += gBattleAnimArgs[1]; + sprite->data[1] -= 0x400; + sprite->data[2] += 0x400; + sprite->data[5] = gBattleAnimArgs[2]; + if (sprite->data[5] == 1) + sprite->data[1] = -sprite->data[1]; +} + +void sub_80CC9BC(struct Sprite* sprite) +{ + u8 a; + u8 b; + switch (gBattleAnimArgs[3]) + { + case 1: + a = sub_8077ABC(gBattleAnimBankTarget ^ 2, 0); + b = sub_8077ABC(gBattleAnimBankTarget ^ 2, 1); + break; + case 2: + a = sub_8077ABC(gBattleAnimBankTarget, 0); + b = sub_8077ABC(gBattleAnimBankTarget, 1); + if (IsAnimBankSpriteVisible(gBattleAnimBankTarget ^ 2)) + { + a = (sub_8077ABC(gBattleAnimBankTarget ^ 2, 0) + a) / 2; + b = (sub_8077ABC(gBattleAnimBankTarget ^ 2, 1) + b) / 2; + } + break; + case 0: + default: + a = sub_8077ABC(gBattleAnimBankTarget, 0); + b = sub_8077ABC(gBattleAnimBankTarget, 1); + break; + } + + sprite->pos1.x = a; + sprite->pos1.y = b; + if (GetBankSide(gBattleAnimBankTarget) == 0) + sprite->pos1.y += 8; + + sprite->callback = sub_80CCB00; + if (gBattleAnimArgs[2] == 0) + { + sprite->pos1.x += gBattleAnimArgs[0]; + } + else + { + sprite->pos1.x -= gBattleAnimArgs[0]; + sprite->hFlip = 1; + } + + sprite->pos1.y += gBattleAnimArgs[1]; + sprite->data[1] -= 0x400; + sprite->data[2] += 0x400; + sprite->data[5] = gBattleAnimArgs[2]; + if (sprite->data[5] == 1) + sprite->data[1] = -sprite->data[1]; +} + +void sub_80CCB00(struct Sprite* sprite) +{ + sprite->data[3] += sprite->data[1]; + sprite->data[4] += sprite->data[2]; + if (sprite->data[5] == 0) + sprite->data[1] += 0x18; + else + sprite->data[1] -= 0x18; + + sprite->data[2] -= 0x18; + sprite->pos2.x = sprite->data[3] >> 8; + sprite->pos2.y = sprite->data[4] >> 8; + sprite->data[0]++; + if (sprite->data[0] == 20) + { + StoreSpriteCallbackInData(sprite, move_anim_8072740); + sprite->data[0] = 3; + sprite->callback = sub_80782D8; + } +} diff --git a/src/battle/anim/smoke.c b/src/battle/anim/smoke.c new file mode 100755 index 000000000..c6ce91b76 --- /dev/null +++ b/src/battle/anim/smoke.c @@ -0,0 +1,22 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +// smoke (smoke on the ground around a sprite.) +// Used in Extremespeed. + +void sub_80D1A70(struct Sprite* sprite) +{ + sprite->invisible = gTasks[sprite->data[0]].data[5]; + if (sprite->animEnded) + { + gTasks[sprite->data[0]].data[sprite->data[1]]--; + DestroySprite(sprite); + } +} diff --git a/src/battle/anim/sonic.c b/src/battle/anim/sonic.c new file mode 100755 index 000000000..684516ba7 --- /dev/null +++ b/src/battle/anim/sonic.c @@ -0,0 +1,136 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" +#include "battle_anim_80CA710.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +// sonic (shoots a projectile towards the target.) +// Used in Sonic Boom and Air Cutter. + +void sub_80CF6DC(struct Sprite* sprite) +{ + s16 a; + s16 b; + u16 c; + + if (NotInBattle()) + { + gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + } + else if (GetBankSide(gBattleAnimBankAttacker) != 0) + { + gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + gBattleAnimArgs[1] = -gBattleAnimArgs[1]; + gBattleAnimArgs[3] = -gBattleAnimArgs[3]; + } + + sub_80787B0(sprite, 1); + a = sub_8077ABC(gBattleAnimBankTarget, 2) + gBattleAnimArgs[2]; + b = sub_8077ABC(gBattleAnimBankTarget, 3) + gBattleAnimArgs[3]; + c = sub_80790F0(a - sprite->pos1.x, b - sprite->pos1.y); + c += 0xF000; + if (NotInBattle()) + c -= 0x6000; + + sub_8078FDC(sprite, 0, 0x100, 0x100, c); + sprite->data[0] = gBattleAnimArgs[4]; + sprite->data[2] = a; + sprite->data[4] = b; + sprite->callback = sub_8078B34; + StoreSpriteCallbackInData(sprite, move_anim_8072740); +} + +void sub_80CF7E0(struct Sprite* sprite) +{ + if (sprite->data[0]-- <= 0) + { + gTasks[sprite->data[7]].data[1]--; + DestroySprite(sprite); + } +} + +void sub_80CF814(struct Sprite* sprite) +{ + struct Task* task = &gTasks[sprite->data[7]]; + if (sprite->data[0] > task->data[5]) + { + sprite->data[5] += sprite->data[3]; + sprite->data[6] += sprite->data[4]; + } + else + { + sprite->data[5] -= sprite->data[3]; + sprite->data[6] -= sprite->data[4]; + } + + sprite->data[1] += sprite->data[5]; + sprite->data[2] += sprite->data[6]; + if (1 & task->data[7]) + sprite->pos2.x = ((u16)sprite->data[1] >> 8) * -1; + else + sprite->pos2.x = (u16)sprite->data[1] >> 8; + + if (1 & task->data[8]) + sprite->pos2.y = ((u16)sprite->data[2] / 256u) * -1; + else + sprite->pos2.y = (u16)sprite->data[2] / 256u; + + if (sprite->data[0]-- <= 0) + { + sprite->data[0] = 30; + sprite->callback = sub_80CF7E0; + } +} + +void sub_80CF8B8(struct Sprite* sprite) +{ + s16 a; + s16 b; + s16 c; + + struct Task* task = &gTasks[sprite->data[7]]; + sprite->data[1] += (-2 & task->data[7]); + sprite->data[2] += (-2 & task->data[8]); + if (1 & task->data[7]) + sprite->pos2.x = ((u16)sprite->data[1] >> 8) * -1; + else + sprite->pos2.x = (u16)sprite->data[1] >> 8; + + if (1 & task->data[8]) + sprite->pos2.y = ((u16)sprite->data[2] / 256u) * -1; + else + sprite->pos2.y = (u16)sprite->data[2] / 256u; + + if (sprite->data[0]-- <= 0) + { + sprite->data[0] = 8; + task->data[5] = 4; + a = sub_81174E0(0x1000); + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.y = 0; + sprite->pos2.x = 0; + if (task->data[11] >= sprite->pos1.x) + b = (task->data[11] - sprite->pos1.x) << 8; + else + b = (sprite->pos1.x - task->data[11]) << 8; + + if (task->data[12] >= sprite->pos1.y) + c = (task->data[12] - sprite->pos1.y) << 8; + else + c = (sprite->pos1.y - task->data[12]) << 8; + + sprite->data[2] = 0; + sprite->data[1] = 0; + sprite->data[6] = 0; + sprite->data[5] = 0; + sprite->data[3] = sub_81174C4(sub_81174C4(b, a), sub_81174E0(0x1C0)); + sprite->data[4] = sub_81174C4(sub_81174C4(c, a), sub_81174E0(0x1C0)); + sprite->callback = sub_80CF814; + } +} diff --git a/src/battle/anim/sonic_task.c b/src/battle/anim/sonic_task.c new file mode 100755 index 000000000..efd13dff6 --- /dev/null +++ b/src/battle/anim/sonic_task.c @@ -0,0 +1,152 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" +#include "battle_anim_80CA710.h" +#include "battle.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +extern u8 gBanksBySide[]; +extern u16 gBattleTypeFlags; +extern struct SpriteTemplate gSpriteTemplate_83D74BC; + +// sonic_task (the task functions for the "sonic" effect.) +// Used in Air Cutter and Sonic Boom. + +void sub_80CF9F8(u8 taskId) +{ + if (gTasks[taskId].data[1] == 0) + DestroyAnimVisualTask(taskId); +} + +void sub_80CFA20(u8 taskId) +{ + if (gTasks[taskId].data[0]-- <= 0) + { + u8 spriteId; + struct Sprite* sprite; + spriteId = CreateSprite(&gSpriteTemplate_83D74BC, gTasks[taskId].data[9], gTasks[taskId].data[10], gTasks[taskId].data[2] - gTasks[taskId].data[1]); + sprite = &gSprites[spriteId]; + switch (gTasks[taskId].data[4]) + { + case 1: + sprite->oam.matrixNum |= 24; + break; + case 2: + sprite->oam.matrixNum = 8; + break; + } + + sprite->data[0] = gTasks[taskId].data[5] - gTasks[taskId].data[6]; + sprite->data[7] = taskId; + gTasks[taskId].data[gTasks[taskId].data[1] + 13] = spriteId; + gTasks[taskId].data[0] = gTasks[taskId].data[3]; + gTasks[taskId].data[1]++; + PlaySE12WithPanning(0x9A, sub_8076F98(-0x3F)); + if (gTasks[taskId].data[1] > 2) + gTasks[taskId].func = sub_80CF9F8; + } +} + +void sub_80CFB04(u8 taskId) +{ + s16 r9 = 0; + s16 r6 = 0; + s16 sp1 = 0; + s16 sp2 = 0; + s16 r4; + + if (NotInBattle()) + { + gTasks[taskId].data[4] = 2; + gBattleAnimArgs[0] = -gBattleAnimArgs[0]; + if (gBattleAnimArgs[2] & 1) + gBattleAnimArgs[2] &= ~1; + else + gBattleAnimArgs[2] |= 1; + } + else + { + if ((gBanksBySide[gBattleAnimBankTarget] & 1) == 0) + { + gTasks[taskId].data[4] = 1; + gBattleAnimArgs[0] = -gBattleAnimArgs[0]; + gBattleAnimArgs[1] = -gBattleAnimArgs[1]; + if (gBattleAnimArgs[2] & 1) + gBattleAnimArgs[2] &= ~1; + else + gBattleAnimArgs[2] |= 1; + } + } + r6 = gTasks[taskId].data[9] = sub_8077ABC(gBattleAnimBankAttacker, 0); + r9 = gTasks[taskId].data[10] = sub_8077ABC(gBattleAnimBankAttacker, 1); + if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + && IsAnimBankSpriteVisible(gBattleAnimBankTarget ^ 2)) + { + sub_807A3FC(gBattleAnimBankTarget, 0, &sp1, &sp2); + } + else + { + sp1 = sub_8077ABC(gBattleAnimBankTarget, 0); + sp2 = sub_8077ABC(gBattleAnimBankTarget, 1); + } + + sp1 = gTasks[taskId].data[11] = sp1 + gBattleAnimArgs[0]; + sp2 = gTasks[taskId].data[12] = sp2 + gBattleAnimArgs[1]; + if (sp1 >= r6) + r4 = sp1 - r6; + else + r4 = r6 - sp1; + + gTasks[taskId].data[5] = sub_81174C4(r4, sub_81174E0(gBattleAnimArgs[2] & ~1)); + gTasks[taskId].data[6] = sub_81174C4(gTasks[taskId].data[5], 0x80); + gTasks[taskId].data[7] = gBattleAnimArgs[2]; + if (sp2 >= r9) + { + r4 = sp2 - r9; + gTasks[taskId].data[8] = sub_81174C4(r4, sub_81174E0(gTasks[taskId].data[5])) & ~1; + } + else + { + r4 = r9 - sp2; + gTasks[taskId].data[8] = sub_81174C4(r4, sub_81174E0(gTasks[taskId].data[5])) | 1; + } + + gTasks[taskId].data[3] = gBattleAnimArgs[3]; + if (gBattleAnimArgs[4] & 0x80) + { + gBattleAnimArgs[4] ^= 0x80; + if (gBattleAnimArgs[4] >= 64) + { + u16 var = sub_8079E90(gBattleAnimBankTarget) + (gBattleAnimArgs[4] - 64); + gTasks[taskId].data[2] = var; + } + else + { + u16 var = sub_8079E90(gBattleAnimBankTarget) - gBattleAnimArgs[4]; + gTasks[taskId].data[2] = var; + } + } + else + { + if (gBattleAnimArgs[4] >= 64) + { + u16 var = sub_8079E90(gBattleAnimBankTarget) + (gBattleAnimArgs[4] - 64); + gTasks[taskId].data[2] = var; + } + else + { + u16 var = sub_8079E90(gBattleAnimBankTarget) - gBattleAnimArgs[4]; + gTasks[taskId].data[2] = var; + } + } + + if (gTasks[taskId].data[2] < 3) + gTasks[taskId].data[2] = 3; + + gTasks[taskId].func = sub_80CFA20; +} diff --git a/src/battle/anim/spin_finger.c b/src/battle/anim/spin_finger.c new file mode 100755 index 000000000..adf41b261 --- /dev/null +++ b/src/battle/anim/spin_finger.c @@ -0,0 +1,73 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +extern void sub_80CF088(struct Sprite* sprite); +static void sub_80CF138(struct Sprite* sprite); +static void sub_80CF158(struct Sprite* sprite); + +// spin_finger +// Used in Follow Me. + +void sub_80CF0BC(struct Sprite* sprite) +{ + u8 bank; + if (gBattleAnimArgs[0] == 0) + bank = gBattleAnimBankAttacker; + else + bank = gBattleAnimBankTarget; + + sprite->pos1.x = sub_8077ABC(bank, 0); + sprite->pos1.y = sub_807A100(bank, 2); + if (sprite->pos1.y <= 9) + sprite->pos1.y = 10; + + sprite->data[0] = 1; + sprite->data[1] = 0; + sprite->data[2] = sprite->subpriority; + sprite->data[3] = sprite->subpriority + 4; + sprite->data[4] = 0; + StoreSpriteCallbackInData(sprite, sub_80CF138); + sprite->callback = sub_80785E4; +} + +void sub_80CF138(struct Sprite* sprite) +{ + if (++sprite->data[4] > 12) + sprite->callback = sub_80CF158; +} + +void sub_80CF158(struct Sprite* sprite) +{ + s16 temp; + s16 temp2; + sprite->data[1] += 4; + if (sprite->data[1] > 0xFE) + { + if (--sprite->data[0] == 0) + { + sprite->pos2.x = 0; + sprite->callback = sub_80CF088; + return; + } + else + { + sprite->data[1] &= 0xFF; + } + } + + if (sprite->data[1] > 0x4F) + sprite->subpriority = sprite->data[3]; + + if (sprite->data[1] > 0x9F) + sprite->subpriority = sprite->data[2]; + + temp = gSineTable[sprite->data[1]]; + sprite->pos2.x = (temp2 = temp >> 3) + (temp2 >> 1); +} diff --git a/src/battle/anim/spit.c b/src/battle/anim/spit.c new file mode 100755 index 000000000..f9ad462ae --- /dev/null +++ b/src/battle/anim/spit.c @@ -0,0 +1,30 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +// spit (hurls sprites outward from the pokemon. Similar to orbit_fast, but takes another argument.) +// Used in Spit Up. + +void sub_80D287C(struct Sprite* sprite) +{ + sprite->pos2.x += sprite->data[0]; + sprite->pos2.y += sprite->data[1]; + if (sprite->data[3]++ >= sprite->data[2]) + move_anim_8072740(sprite); +} + +void sub_80D28AC(struct Sprite* sprite) +{ + sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 2); + sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 3); + sprite->data[0] = Sin(gBattleAnimArgs[0], 10); + sprite->data[1] = Cos(gBattleAnimArgs[0], 7); + sprite->data[2] = gBattleAnimArgs[1]; + sprite->callback = sub_80D287C; +} diff --git a/src/battle/anim/splash.c b/src/battle/anim/splash.c new file mode 100755 index 000000000..1b0ceba93 --- /dev/null +++ b/src/battle/anim/splash.c @@ -0,0 +1,87 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +extern struct AffineAnimFrameCmd gUnknown_083D76F4; + +static void sub_80D07AC(u8 taskId); + +// splash (splash effect of hopping up and down) +// Used in Splash, Mud Sport, and Sketch. + +void sub_80D074C(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + if (gBattleAnimArgs[1] == 0) + { + DestroyAnimVisualTask(taskId); + } + else + { + u8 spriteId = GetAnimBankSpriteId(gBattleAnimArgs[0]); + task->data[0] = spriteId; + task->data[1] = 0; + task->data[2] = gBattleAnimArgs[1]; + task->data[3] = 0; + task->data[4] = 0; + sub_80798F4(task, spriteId, &gUnknown_083D76F4); + task->func = sub_80D07AC; + } +} + +void sub_80D07AC(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + switch (task->data[1]) + { + case 0: + sub_807992C(task); + task->data[4] += 3; + gSprites[task->data[0]].pos2.y += task->data[4]; + if (++task->data[3] > 7) + { + task->data[3] = 0; + task->data[1]++; + } + break; + case 1: + sub_807992C(task); + gSprites[task->data[0]].pos2.y += task->data[4]; + if (++task->data[3] > 7) + { + task->data[3] = 0; + task->data[1]++; + } + break; + case 2: + if (task->data[4] != 0) + { + gSprites[task->data[0]].pos2.y -= 2; + task->data[4] -= 2; + } + else + task->data[1]++; + break; + case 3: + if (!sub_807992C(task)) + { + if (--task->data[2] == 0) + { + gSprites[task->data[0]].pos2.y = 0; + DestroyAnimVisualTask(taskId); + } + else + { + sub_80798F4(task, task->data[0], &gUnknown_083D76F4); + task->data[1] = 0; + } + } + break; + } +} diff --git a/src/battle/anim/startle.c b/src/battle/anim/startle.c new file mode 100755 index 000000000..acbf80fec --- /dev/null +++ b/src/battle/anim/startle.c @@ -0,0 +1,56 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +extern struct AffineAnimFrameCmd gUnknown_083D7A98; + +// startle (the pokemon sprite shrivels upward and restores after a brief time.) +// Used in Fake Out, Trick, and Astonish. + +// opponent +void sub_80D1E38(u8 taskId) +{ + u8 spriteId = GetAnimBankSpriteId(1); + if (++gTasks[taskId].data[0] == 1) + { + sub_80798F4(&gTasks[taskId], GetAnimBankSpriteId(1), &gUnknown_083D7A98); + gSprites[spriteId].pos2.x = 4; + } + else + { + gSprites[spriteId].pos2.x = -gSprites[spriteId].pos2.x; + if (sub_807992C(&gTasks[taskId]) == 0) + { + gSprites[spriteId].pos2.x = 0; + gSprites[spriteId].pos2.y = 0; + DestroyAnimVisualTask(taskId); + } + } +} + +// player +void sub_80D1EC8(u8 taskId) +{ + u8 spriteId = GetAnimBankSpriteId(0); + if (++gTasks[taskId].data[0] == 1) + { + sub_80798F4(&gTasks[taskId], GetAnimBankSpriteId(0), &gUnknown_083D7A98); + gSprites[spriteId].pos2.x = 4; + } + else + { + gSprites[spriteId].pos2.x = -gSprites[spriteId].pos2.x; + if (sub_807992C(&gTasks[taskId]) == 0) + { + gSprites[spriteId].pos2.x = 0; + gSprites[spriteId].pos2.y = 0; + DestroyAnimVisualTask(taskId); + } + } +} diff --git a/src/battle/anim/strike.c b/src/battle/anim/strike.c new file mode 100755 index 000000000..f2fbdb5a4 --- /dev/null +++ b/src/battle/anim/strike.c @@ -0,0 +1,77 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +static void sub_80CE798(struct Sprite* sprite); + +// strike (A red strike towards the opponent.) +// Used in Horn Attack, Fury Attack, and Horn Drill. + +void sub_80CE670(struct Sprite* sprite) +{ + if (gBattleAnimArgs[2] <= 1) + gBattleAnimArgs[2] = 2; + + if (gBattleAnimArgs[2] > 0x7F) + gBattleAnimArgs[2] = 0x7F; + + sprite->data[0] = 0; + sprite->data[1] = gBattleAnimArgs[2]; + sprite->pos1.x = sub_8077ABC(gBattleAnimBankTarget, 2) + gBattleAnimArgs[0]; + sprite->pos1.y = sub_8077ABC(gBattleAnimBankTarget, 3) + gBattleAnimArgs[1]; + sprite->data[6] = sprite->pos1.x; + sprite->data[7] = sprite->pos1.y; + if (NotInBattle() != 0) + { + sprite->oam.matrixNum = 8; + sprite->pos1.x += 40; + sprite->pos1.y += 20; + sprite->data[2] = sprite->pos1.x << 7; + sprite->data[3] = -0x1400 / sprite->data[1]; + sprite->data[4] = sprite->pos1.y << 7; + sprite->data[5] = -0xA00 / sprite->data[1]; + } + else if (GetBankSide(gBattleAnimBankAttacker) == 0) + { + sprite->pos1.x -= 40; + sprite->pos1.y += 20; + sprite->data[2] = sprite->pos1.x << 7; + sprite->data[3] = 0x1400 / sprite->data[1]; + sprite->data[4] = sprite->pos1.y << 7; + sprite->data[5] = -0xA00 / sprite->data[1]; + } + else + { + sprite->pos1.x += 40; + sprite->pos1.y -= 20; + sprite->data[2] = sprite->pos1.x << 7; + sprite->data[3] = -0x1400 / sprite->data[1]; + sprite->data[4] = sprite->pos1.y << 7; + sprite->data[5] = 0xA00 / sprite->data[1]; + sprite->oam.matrixNum = 24; + } + + sprite->callback = sub_80CE798; +} + +void sub_80CE798(struct Sprite* sprite) +{ + sprite->data[2] += sprite->data[3]; + sprite->data[4] += sprite->data[5]; + sprite->pos1.x = sprite->data[2] >> 7; + sprite->pos1.y = sprite->data[4] >> 7; + if (--sprite->data[1] == 1) + { + sprite->pos1.x = sprite->data[6]; + sprite->pos1.y = sprite->data[7]; + } + + if (sprite->data[1] == 0) + move_anim_8072740(sprite); +} diff --git a/src/battle/anim/switch.c b/src/battle/anim/switch.c new file mode 100755 index 000000000..a1be144df --- /dev/null +++ b/src/battle/anim/switch.c @@ -0,0 +1,128 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +extern s8 gUnknown_083D680C[11][3]; + +static void sub_80CBC8C(struct Sprite* sprite); +static void sub_80CBCF8(struct Sprite* sprite); +static void sub_80CBDB0(struct Sprite* sprite); + +// switch (makes an item and circles it from side to side on the field.) +// Used in Trick. + +void sub_80CBBF0(struct Sprite* sprite) +{ + int a; + int b; + + if (sprite->data[0] == 0) + { + if (!NotInBattle()) + { + sprite->data[1] = gBattleAnimArgs[1]; + sprite->pos1.x = 0x78; + } + else + { + a = gBattleAnimArgs[1] - 32; + if (a < 0) + b = gBattleAnimArgs[1] + 0xDF; + else + b = a; + + sprite->data[1] = a - ((b >> 8) << 8); + sprite->pos1.x = 0x46; + } + + sprite->pos1.y = gBattleAnimArgs[0]; + sprite->data[2] = gBattleAnimArgs[0]; + sprite->data[4] = 20; + sprite->pos2.x = Cos(sprite->data[1], 0x3C); + sprite->pos2.y = Sin(sprite->data[1], 20); + sprite->callback = sub_80CBC8C; + if (sprite->data[1] > 0 && sprite->data[1] < 0xC0) + sprite->subpriority = 31; + else + sprite->subpriority = 29; + } +} + +void sub_80CBC8C(struct Sprite* sprite) +{ + switch (sprite->data[3]) + { + case 0: + if (sprite->data[2] > 0x4E) + { + sprite->data[3] = 1; + StartSpriteAffineAnim(sprite, 1); + break; + } + else + { + sprite->data[2] += sprite->data[4] / 10; + sprite->data[4] += 3; + sprite->pos1.y = sprite->data[2]; + break; + } + break; + case 1: + if (sprite->data[3] && sprite->affineAnimEnded) + { + sprite->data[0] = 0; + sprite->data[2] = 0; + sprite->callback = sub_80CBCF8; + } + break; + } +} + +void sub_80CBCF8(struct Sprite* sprite) +{ + if (sprite->data[2] == gUnknown_083D680C[sprite->data[0]][1]) + { + if (gUnknown_083D680C[sprite->data[0]][2] == 0x7F) + { + sprite->data[0] = 0; + sprite->callback = sub_80CBDB0; + } + + sprite->data[2] = 0; + sprite->data[0]++; + } + else + { + sprite->data[2]++; + sprite->data[1] = (gUnknown_083D680C[sprite->data[0]][0] * gUnknown_083D680C[sprite->data[0]][2] + sprite->data[1]) & 0xFF; + if (!NotInBattle()) + { + if ((u16)(sprite->data[1] - 1) <= 0xBE) + { + sprite->subpriority = 31; + } + else + { + sprite->subpriority = 29; + } + } + + sprite->pos2.x = Cos(sprite->data[1], 0x3C); + sprite->pos2.y = Sin(sprite->data[1], 20); + } +} + +void sub_80CBDB0(struct Sprite* sprite) +{ + if (sprite->data[0] > 20) + move_anim_8072740(sprite); + + sprite->invisible = sprite->data[0] % 2; + sprite->data[0]++; +} diff --git a/src/battle/anim/sword.c b/src/battle/anim/sword.c new file mode 100755 index 000000000..536f89b26 --- /dev/null +++ b/src/battle/anim/sword.c @@ -0,0 +1,30 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +static void sub_80CF6B4(struct Sprite* sprite); + +// sword (sword appears and floats upward.) +// Used in Swords Dance. + +void sub_80CF690(struct Sprite* sprite) +{ + sub_80787B0(sprite, 0); + sprite->callback = sub_80785E4; + StoreSpriteCallbackInData(sprite, sub_80CF6B4); +} + +void sub_80CF6B4(struct Sprite* sprite) +{ + sprite->data[0] = 6; + sprite->data[2] = sprite->pos1.x; + sprite->data[4] = sprite->pos1.y - 32; + sprite->callback = sub_8078B34; + StoreSpriteCallbackInData(sprite, move_anim_8072740); +} diff --git a/src/battle/anim/taunt_finger.c b/src/battle/anim/taunt_finger.c new file mode 100755 index 000000000..7024f85a0 --- /dev/null +++ b/src/battle/anim/taunt_finger.c @@ -0,0 +1,56 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +extern void sub_80CEF44(u8 bank, struct Sprite* sprite); +static void sub_80CF228(struct Sprite* sprite); +static void sub_80CF264(struct Sprite* sprite); + +// taunt_finger +// Used in Taunt. + +void sub_80CF1C8(struct Sprite* sprite) +{ + u8 bank; + if (gBattleAnimArgs[0] == 0) + bank = gBattleAnimBankAttacker; + else + bank = gBattleAnimBankTarget; + + sub_80CEF44(bank, sprite); + if (GetBankSide(bank) == 0) + { + StartSpriteAnim(sprite, 0); + sprite->data[0] = 2; + } + else + { + StartSpriteAnim(sprite, 1); + sprite->data[0] = 3; + } + + sprite->callback = sub_80CF228; +} + +void sub_80CF228(struct Sprite* sprite) +{ + if (++sprite->data[1] > 10) + { + sprite->data[1] = 0; + StartSpriteAnim(sprite, sprite->data[0]); + StoreSpriteCallbackInData(sprite, sub_80CF264); + sprite->callback = sub_8078600; + } +} + +void sub_80CF264(struct Sprite* sprite) +{ + if (++sprite->data[1] > 5) + move_anim_8072740(sprite); +} diff --git a/src/battle/anim/tendrils.c b/src/battle/anim/tendrils.c new file mode 100755 index 000000000..ba1014d2f --- /dev/null +++ b/src/battle/anim/tendrils.c @@ -0,0 +1,67 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +static void sub_80CB298(struct Sprite* sprite); +static void sub_80CB2D4(struct Sprite* sprite); + +// tendrils +// Used by Constrict. + +void sub_80CB25C(struct Sprite* sprite) +{ + sub_8078764(sprite, 0); + sprite->affineAnimPaused = 1; + StartSpriteAffineAnim(sprite, gBattleAnimArgs[2]); + sprite->data[6] = gBattleAnimArgs[2]; + sprite->data[7] = gBattleAnimArgs[3]; + sprite->callback = sub_80CB298; +} + +void sub_80CB298(struct Sprite* sprite) +{ + if ((u16)gBattleAnimArgs[7] == 0xFFFF) + { + sprite->affineAnimPaused = 0; + GetAnimBankSpriteId(1); + sprite->data[0] = 0x100; + sprite->callback = sub_80CB2D4; + } +} + +void sub_80CB2D4(struct Sprite* sprite) +{ + GetAnimBankSpriteId(1); + if (!sprite->data[2]) + { + sprite->data[0] += 11; + } + else + { + sprite->data[0] -= 11; + } + sprite->data[1]++; + if (sprite->data[1] == 6) + { + sprite->data[1] = 0; + sprite->data[2] ^= 1; + } + + if (sprite->affineAnimEnded) + { + sprite->data[7]--; + if (sprite->data[7] > 0) + { + StartSpriteAffineAnim(sprite, sprite->data[6]); + } + else + { + move_anim_8072740(sprite); + } + } +} \ No newline at end of file diff --git a/src/battle/anim/thought.c b/src/battle/anim/thought.c new file mode 100755 index 000000000..9cffafe14 --- /dev/null +++ b/src/battle/anim/thought.c @@ -0,0 +1,52 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +static void sub_80CF008(struct Sprite* sprite); + +// thought (thought bubble) +// Used in Metronome and Taunt. + +void sub_80CEF44(u8 bank, struct Sprite* sprite) +{ + if (GetBankSide(bank) == 0) + sprite->pos1.x = sub_807A100(bank, 5) + 8; + else + sprite->pos1.x = sub_807A100(bank, 4) - 8; + + sprite->pos1.y = sub_8077ABC(bank, 3) - (s16)sub_807A100(bank, 0) / 4; +} + +void sub_80CEF9C(struct Sprite* sprite) +{ + u8 a; + u8 bank; + if (gBattleAnimArgs[0] == 0) + bank = gBattleAnimBankAttacker; + else + bank = gBattleAnimBankTarget; + + sub_80CEF44(bank, sprite); + a = (GetBankSide(bank) == 0) ? 0 : 1; + sprite->data[0] = gBattleAnimArgs[1]; + sprite->data[1] = a + 2; + StartSpriteAnim(sprite, a); + StoreSpriteCallbackInData(sprite, sub_80CF008); + sprite->callback = sub_8078600; +} + +void sub_80CF008(struct Sprite* sprite) +{ + if (--sprite->data[0] == 0) + { + StoreSpriteCallbackInData(sprite, move_anim_8072740); + StartSpriteAnim(sprite, sprite->data[1]); + sprite->callback = sub_8078600; + } +} diff --git a/src/battle/anim/thrashing.c b/src/battle/anim/thrashing.c new file mode 100755 index 000000000..9811c546a --- /dev/null +++ b/src/battle/anim/thrashing.c @@ -0,0 +1,111 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +extern struct AffineAnimFrameCmd gUnknown_083D77B0; + +static void sub_80D0A8C(u8 taskId); +static void sub_80D0B3C(u8 taskId); + +// thrashing (the movement of the Pokemon left/right repeatedly, with up/down movements below.) +// Used by Thrash. + +// left/right movements +void sub_80D0A4C(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + u8 spriteId = GetAnimBankSpriteId(0); + task->data[0] = spriteId; + task->data[1] = 0; + sub_80798F4(task, spriteId, &gUnknown_083D77B0); + task->func = sub_80D0A8C; +} + +void sub_80D0A8C(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + if (!sub_807992C(task)) + DestroyAnimVisualTask(taskId); +} + +// up/down movements +void sub_80D0AB8(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + task->data[0] = GetAnimBankSpriteId(0); + task->data[1] = 0; + task->data[2] = 4; + task->data[3] = 7; + task->data[4] = 3; + task->data[5] = gSprites[task->data[0]].pos1.x; + task->data[6] = gSprites[task->data[0]].pos1.y; + task->data[7] = 0; + task->data[8] = 0; + task->data[9] = 2; + if (GetBankSide(gBattleAnimBankAttacker) == 1) + task->data[2] *= -1; + + task->func = sub_80D0B3C; +} + +void sub_80D0B3C(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + if (++task->data[7] > 2) + { + task->data[7] = 0; + task->data[8]++; + if ((task->data[8] & 1) != 0) + { + gSprites[task->data[0]].pos1.y += task->data[9]; + } + else + { + gSprites[task->data[0]].pos1.y -= task->data[9]; + } + } + switch (task->data[1]) + { + case 0: + gSprites[task->data[0]].pos1.x += task->data[2]; + if (--task->data[3] == 0) + { + task->data[3] = 14; + task->data[1] = 1; + } + break; + case 1: + gSprites[task->data[0]].pos1.x -= task->data[2]; + if (--task->data[3] == 0) + { + task->data[3] = 7; + task->data[1] = 2; + } + break; + case 2: + gSprites[task->data[0]].pos1.x += task->data[2]; + if (--task->data[3] == 0) + { + if (--task->data[4] != 0) + { + task->data[3] = 7; + task->data[1] = 0; + } + else + { + if ((task->data[8] & 1) != 0) + { + gSprites[task->data[0]].pos1.y -= task->data[9]; + } + DestroyAnimVisualTask(taskId); + } + } + break; + } +} diff --git a/src/battle/anim/tile_in.c b/src/battle/anim/tile_in.c new file mode 100755 index 000000000..5fcbadbb7 --- /dev/null +++ b/src/battle/anim/tile_in.c @@ -0,0 +1,51 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +// tile_in (flips a white tile from the scene into facing the player.) +// Used in Conversion. + +void sub_80CE09C(struct Sprite* sprite) +{ + if (sprite->data[0] == 0) + { + sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 0) + gBattleAnimArgs[0]; + sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 1) + gBattleAnimArgs[1]; + if (NotInBattle()) + sprite->pos1.y += 10; + sprite->data[0]++; + } + + if ((u16)gBattleAnimArgs[7] == 0xFFFF) + move_anim_8072740(sprite); +} + +void sub_80CE108(u8 taskId) +{ + if (gTasks[taskId].data[2] == 1) + { + gBattleAnimArgs[7] = 0xFFFF; + gTasks[taskId].data[2]++; + } + else if (gTasks[taskId].data[2] == 2) + { + DestroyAnimVisualTask(taskId); + } + else + { + if (++gTasks[taskId].data[0] == 4) + { + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[1]++; + REG_BLDALPHA = (gTasks[taskId].data[1] << 8) | (16 - gTasks[taskId].data[1]); + if (gTasks[taskId].data[1] == 16) + gTasks[taskId].data[2]++; + } + } +} diff --git a/src/battle/anim/tile_out.c b/src/battle/anim/tile_out.c new file mode 100755 index 000000000..8b710268f --- /dev/null +++ b/src/battle/anim/tile_out.c @@ -0,0 +1,81 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" +#include "battle_interface.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +extern u8 gNoOfAllBanks; +extern u8 gHealthboxIDs[]; + +static void sub_80CE1AC(struct Sprite* sprite); + +// tile_out (makes a tile fly inward into a center point.) +// Used in Conversion 2. + +void sub_80CE17C(struct Sprite* sprite) +{ + sub_8078764(sprite, 0); + sprite->animPaused = 1; + sprite->data[0] = gBattleAnimArgs[2]; + sprite->callback = sub_80CE1AC; +} + +void sub_80CE1AC(struct Sprite* sprite) +{ + if (sprite->data[0]) + { + sprite->data[0]--; + } + else + { + sprite->animPaused = 0; + sprite->data[0] = 30; + sprite->data[2] = sub_8077ABC(gBattleAnimBankAttacker, 2); + sprite->data[4] = sub_8077ABC(gBattleAnimBankAttacker, 3); + sprite->callback = sub_8078B34; + StoreSpriteCallbackInData(sprite, move_anim_8072740); + } +} + +void sub_80CE210(u8 taskId) +{ + if (++gTasks[taskId].data[0] == 4) + { + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[1]++; + REG_BLDALPHA = gTasks[taskId].data[1] | ((16 - gTasks[taskId].data[1]) << 8); + if (gTasks[taskId].data[1] == 16) + DestroyAnimVisualTask(taskId); + } +} + +void unref_sub_80CE260(u8 taskId) +{ + u8 i; + for (i = 0; i < gNoOfAllBanks; i++) + { + if (gBattleAnimArgs[0] == 1 && GetBankSide(i) == 0) + sub_8043DB0(gHealthboxIDs[i]); + + if (gBattleAnimArgs[1] == 1 && GetBankSide(i) == 1) + sub_8043DB0(gHealthboxIDs[i]); + } + + DestroyAnimVisualTask(taskId); +} + +void unref_sub_80CE2D4(u8 taskId) +{ + u8 i; + for (i = 0; i < gNoOfAllBanks; i++) + { + sub_8043DFC(gHealthboxIDs[i]); + } + + DestroyAnimVisualTask(taskId); +} diff --git a/src/battle/anim/twinkle.c b/src/battle/anim/twinkle.c new file mode 100755 index 000000000..56095c29d --- /dev/null +++ b/src/battle/anim/twinkle.c @@ -0,0 +1,42 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +static void sub_80CE3B0(struct Sprite* sprite); + +// twinkle (a tiny twinkling star appears above the Pokemon and descends toward the Pokemon.) +// Used in Moonlight. + +void sub_80CE36C(struct Sprite* sprite) +{ + sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 2) + gBattleAnimArgs[0]; + sprite->pos1.y = gBattleAnimArgs[1]; + sprite->data[0] = 0; + sprite->data[1] = 0; + sprite->data[2] = 0; + sprite->data[3] = 0; + sprite->data[4] = 1; + sprite->callback = sub_80CE3B0; +} + +void sub_80CE3B0(struct Sprite* sprite) +{ + if (++sprite->data[1] > 1) + { + sprite->data[1] = 0; + if (sprite->data[2] <= 0x77) + { + sprite->pos1.y++; + sprite->data[2]++; + } + } + + if (sprite->data[0]) + move_anim_8072740(sprite); +} diff --git a/src/battle/anim/unused_1.c b/src/battle/anim/unused_1.c new file mode 100755 index 000000000..fdcef0de9 --- /dev/null +++ b/src/battle/anim/unused_1.c @@ -0,0 +1,25 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +// unused effect file. +// Seems to be a beta effect for Beat Up, possibly. + +void sub_80CC8C8(struct Sprite* sprite) +{ + sprite->pos1.x += gBattleAnimArgs[0]; + sprite->pos1.y += gBattleAnimArgs[1]; + sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[1] = gBattleAnimArgs[3]; + sprite->data[3] = gBattleAnimArgs[4]; + sprite->data[5] = gBattleAnimArgs[5]; + StartSpriteAffineAnim(sprite, gBattleAnimArgs[6]); + StoreSpriteCallbackInData(sprite, move_anim_8074EE0); + sprite->callback = sub_8078504; +} diff --git a/src/battle/anim/unused_2.c b/src/battle/anim/unused_2.c new file mode 100755 index 000000000..f7f5be88d --- /dev/null +++ b/src/battle/anim/unused_2.c @@ -0,0 +1,80 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +static void sub_80CCCB4(struct Sprite* sprite); + +// unused_2 (unknown effect with music notes.) +// possibly another unused effect. Unknown usage. + +void unref_sub_80CCB6C(struct Sprite* sprite) +{ + if (sprite->data[2] > 1) + { + if (sprite->data[3] & 1) + { + sprite->invisible = 0; + gSprites[sprite->data[0]].invisible = 0; + gSprites[sprite->data[1]].invisible = 0; + } + else + { + sprite->invisible = 1; + gSprites[sprite->data[0]].invisible = 1; + gSprites[sprite->data[1]].invisible = 1; + } + + sprite->data[2] = 0; + sprite->data[3]++; + } + else + { + sprite->data[2]++; + } + + if (sprite->data[3] == 10) + { + DestroySprite(&gSprites[sprite->data[0]]); + DestroySprite(&gSprites[sprite->data[1]]); + move_anim_8072740(sprite); + } +} + +void sub_80CCC50(struct Sprite* sprite) +{ + sprite->data[0] = gBattleAnimArgs[2]; + if (GetBankSide(gBattleAnimBankAttacker) != 0) + sprite->pos1.x -= gBattleAnimArgs[0]; + else + sprite->pos1.x += gBattleAnimArgs[0]; + + StartSpriteAnim(sprite, gBattleAnimArgs[5]); + sprite->data[1] = -gBattleAnimArgs[3]; + sprite->pos1.y += gBattleAnimArgs[1]; + sprite->data[3] = gBattleAnimArgs[4]; + sprite->callback = sub_80CCCB4; + sub_80CCCB4(sprite); +} + +void sub_80CCCB4(struct Sprite* sprite) +{ + sprite->pos2.x = Cos(sprite->data[0], 100); + sprite->pos2.y = Sin(sprite->data[0], 20); + if (sprite->data[0] <= 0x7F) + sprite->subpriority = 0; + else + sprite->subpriority = 14; + + sprite->data[0] = (sprite->data[0] + sprite->data[1]) & 0xFF; + sprite->data[5] += 0x82; + sprite->pos2.y += sprite->data[5] >> 8; + sprite->data[2]++; + if (sprite->data[2] == sprite->data[3]) + move_anim_8072740(sprite); +} diff --git a/src/battle/anim/unused_3.c b/src/battle/anim/unused_3.c new file mode 100755 index 000000000..049e0ca1b --- /dev/null +++ b/src/battle/anim/unused_3.c @@ -0,0 +1,45 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +static void sub_80CD2D4(struct Sprite* sprite); + +// unused_3 (seems to be some sort of popping effect with a growing diamond shape) +// yet another unused effect... + +void sub_80CD274(struct Sprite* sprite) +{ + sub_8078650(sprite); + if (GetBankSide(gBattleAnimBankAttacker) == 0) + { + sprite->pos1.x += gBattleAnimArgs[0]; + sprite->pos1.y += gBattleAnimArgs[1]; + } + else + { + sprite->pos1.x -= gBattleAnimArgs[0]; + sprite->pos1.y += gBattleAnimArgs[1]; + StartSpriteAnim(sprite, 1); + } + + sprite->callback = sub_80CD2D4; +} + +void sub_80CD2D4(struct Sprite* sprite) +{ + if (++sprite->data[0] > 30) + { + sprite->pos2.y = (30 - sprite->data[0]) / 3; + sprite->pos2.x = Sin(sprite->data[1] * 4, 3); + sprite->data[1]++; + } + + if (sprite->animEnded) + move_anim_8072740(sprite); +} diff --git a/src/battle/anim/unused_4.c b/src/battle/anim/unused_4.c new file mode 100755 index 000000000..72ecde05c --- /dev/null +++ b/src/battle/anim/unused_4.c @@ -0,0 +1,58 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +extern u8 gObjectBankIDs[]; + +static void sub_80CD9D4(struct Sprite* sprite); + +// unused_4 +// Unknown usage. + +void sub_80CD9C4(struct Sprite* sprite) +{ + sprite->data[0] = 0; + sprite->callback = sub_80CD9D4; +} + +void sub_80CD9D4(struct Sprite* sprite) +{ + switch (sprite->data[0]) + { + case 0: + sprite->data[1] = 0; + sprite->data[2] = gObjectBankIDs[gBattleAnimBankAttacker]; + sprite->data[3] = GetBankSide(gBattleAnimBankAttacker); + sprite->data[4] = (sprite->data[3] != 0) ? 0x200 : -0x200; + sprite->data[5] = 0; + sub_8078E70(sprite->data[2], 0); + sprite->data[0]++; + case 1: + sprite->data[5] += sprite->data[4]; + obj_id_set_rotscale(sprite->data[2], 0x100, 0x100, sprite->data[5]); + sub_8078F9C(sprite->data[2]); + if (++sprite->data[1] > 3) + { + sprite->data[1] = 0; + sprite->data[4] *= -1; + sprite->data[0]++; + } + break; + case 2: + sprite->data[5] += sprite->data[4]; + obj_id_set_rotscale(sprite->data[2], 0x100, 0x100, sprite->data[5]); + sub_8078F9C(sprite->data[2]); + if (++sprite->data[1] > 3) + { + sub_8078F40(sprite->data[2]); + move_anim_8072740(sprite); + } + break; + } +} diff --git a/src/battle/anim/unused_5.c b/src/battle/anim/unused_5.c new file mode 100755 index 000000000..4dc2da70d --- /dev/null +++ b/src/battle/anim/unused_5.c @@ -0,0 +1,25 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +// unused_5 + +void sub_80CF280(struct Sprite* sprite) +{ + sub_8078650(sprite); + sub_807867C(sprite, gBattleAnimArgs[0]); + sprite->pos1.y += gBattleAnimArgs[1]; + sprite->data[1] = gBattleAnimArgs[2]; + sprite->data[2] = gBattleAnimArgs[4]; + sprite->data[3] = gBattleAnimArgs[5]; + sprite->data[4] = gBattleAnimArgs[3]; + StoreSpriteCallbackInData(sprite, move_anim_8074EE0); + sprite->callback = sub_8078278; + sub_8078278(sprite); +} diff --git a/src/battle/anim/unused_6.c b/src/battle/anim/unused_6.c new file mode 100755 index 000000000..f7c87647f --- /dev/null +++ b/src/battle/anim/unused_6.c @@ -0,0 +1,49 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +extern void sub_80CEF44(u8 bank, struct Sprite* sprite); +static void sub_80CF310(struct Sprite* sprite); + +// unused_6 + +void sub_80CF2D0(struct Sprite* sprite) +{ + u8 bank; + if (gBattleAnimArgs[0] == 0) + bank = gBattleAnimBankAttacker; + else + bank = gBattleAnimBankTarget; + + sub_80CEF44(bank, sprite); + sprite->data[0] = 0; + sprite->data[1] = 0; + sprite->callback = sub_80CF310; +} + +void sub_80CF310(struct Sprite* sprite) +{ + switch (sprite->data[0]) + { + case 0: + sprite->pos2.y -= 3; + if (++sprite->data[1] == 6) + sprite->data[0]++; + break; + case 1: + sprite->pos2.y += 3; + if (--sprite->data[1] == 0) + sprite->data[0]++; + break; + case 2: + if (++sprite->data[1] == 0x40) + move_anim_8072740(sprite); + break; + } +} diff --git a/src/battle/anim/unused_7.c b/src/battle/anim/unused_7.c new file mode 100755 index 000000000..3a8998f1d --- /dev/null +++ b/src/battle/anim/unused_7.c @@ -0,0 +1,51 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +extern u8 gObjectBankIDs[]; + +// unused_7 + +void sub_80CF374(struct Sprite* sprite) +{ + s16 temp; + gSprites[sprite->data[2]].pos2.x += sprite->data[1]; + temp = sprite->data[1]; + sprite->data[1] = -temp; + if (sprite->data[0] == 0) + { + gSprites[sprite->data[2]].pos2.x = 0; + move_anim_8074EE0(sprite); + } + + sprite->data[0]--; +} + +void sub_80CF3C4(struct Sprite* sprite) +{ + u8 a; + sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 2); + sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 3); + a = gObjectBankIDs[gBattleAnimBankTarget]; + if (GetBankSide(gBattleAnimBankAttacker) != 0) + { + sprite->pos1.x -= gBattleAnimArgs[0]; + } + else + { + sprite->pos1.x += gBattleAnimArgs[0]; + } + + sprite->pos1.y += gBattleAnimArgs[1]; + sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[1] = gBattleAnimArgs[3]; + sprite->data[2] = a; + sprite->callback = sub_80CF374; + sprite->invisible = 1; +} diff --git a/src/battle/anim/unused_8.c b/src/battle/anim/unused_8.c new file mode 100755 index 000000000..bcebfcd2b --- /dev/null +++ b/src/battle/anim/unused_8.c @@ -0,0 +1,41 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +static void sub_80CF490(struct Sprite* sprite); +static void sub_80CF4B8(struct Sprite* sprite); + +// unused_8 + +void sub_80CF458(struct Sprite* sprite) +{ + sub_80787B0(sprite, 1); + sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[1] = gBattleAnimArgs[3]; + sprite->data[5] = gBattleAnimArgs[4]; + sprite->callback = sub_80782D8; + StoreSpriteCallbackInData(sprite, sub_80CF490); +} + +void sub_80CF490(struct Sprite* sprite) +{ + sprite->data[0] = sprite->data[1]; + sprite->data[2] = sprite->pos1.x; + sprite->data[4] = sprite->pos1.y + 15; + sprite->callback = sub_8078B34; + StoreSpriteCallbackInData(sprite, sub_80CF4B8); +} + +void sub_80CF4B8(struct Sprite* sprite) +{ + if (sprite->data[5] == 0) + move_anim_8072740(sprite); + else + sprite->data[5]--; +} diff --git a/src/battle/anim/unused_9.c b/src/battle/anim/unused_9.c new file mode 100755 index 000000000..579238fbc --- /dev/null +++ b/src/battle/anim/unused_9.c @@ -0,0 +1,113 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +extern struct SpriteTemplate gSpriteTemplate_83D75AC; + +static void sub_80CFE2C(struct Sprite* sprite); + +// unused_9? (Most likely an unused effect.) +// I cannot find any reference to this sprite template used to call this. + +void sub_80CFDFC(struct Sprite* sprite) +{ + sub_80787B0(sprite, 0); + sprite->data[0] = 0x100 + (IndexOfSpritePaletteTag(gSpriteTemplate_83D75AC.paletteTag) << 4); + sprite->callback = sub_80CFE2C; +} + +#ifdef NONMATCHING +void sub_80CFE2C(struct Sprite* sprite) +{ + u16 r7; + u16* r1; + u16* r2; + int i; + if (++sprite->data[1] == 2) + { + sprite->data[1] = 0; + r7 = gPlttBufferFaded[sprite->data[0] + 8]; + r2 = &gPlttBufferFaded[0x10]; + r1 = &gPlttBufferFaded[sprite->data[0] + 9]; + for (i = 7; i >= 0; i--) + { + *r2 = *r1; + r1++; + r2++; + } + + gPlttBufferFaded[sprite->data[0] + 15] = r7; + if (++sprite->data[2] == 0x18) + move_anim_8072740(sprite); + } +} +#else +__attribute__((naked)) +void sub_80CFE2C(struct Sprite* sprite) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + adds r4, r0, 0\n\ + ldrh r0, [r4, 0x30]\n\ + adds r0, 0x1\n\ + strh r0, [r4, 0x30]\n\ + lsls r0, 16\n\ + asrs r0, 16\n\ + cmp r0, 0x2\n\ + bne _080CFE90\n\ + movs r0, 0\n\ + strh r0, [r4, 0x30]\n\ + ldrh r5, [r4, 0x2E]\n\ + ldr r1, _080CFE98 @ =gPlttBufferFaded\n\ + adds r0, r5, 0\n\ + adds r0, 0x8\n\ + lsls r0, 1\n\ + adds r0, r1\n\ + ldrh r7, [r0]\n\ + adds r6, r1, 0 @puts gPlttBufferFaded in r6\n\ + adds r1, r5, 0\n\ + adds r1, 0x9\n\ + lsls r0, r5, 1\n\ + adds r0, r6 \n\ + adds r2, r0, 0\n\ + adds r2, 0x10\n\ + movs r3, 0x7\n\ + lsls r1, 1\n\ + adds r1, r6 \n\ +_080CFE64:\n\ + ldrh r0, [r1]\n\ + strh r0, [r2]\n\ + adds r1, 0x2\n\ + adds r2, 0x2\n\ + subs r3, 0x1\n\ + cmp r3, 0\n\ + bge _080CFE64\n\ + adds r0, r5, 0\n\ + adds r0, 0xF\n\ + lsls r0, 1\n\ + adds r0, r6\n\ + strh r7, [r0]\n\ + ldrh r0, [r4, 0x32]\n\ + adds r0, 0x1\n\ + strh r0, [r4, 0x32]\n\ + lsls r0, 16\n\ + asrs r0, 16\n\ + cmp r0, 0x18\n\ + bne _080CFE90\n\ + adds r0, r4, 0\n\ + bl move_anim_8072740\n\ +_080CFE90:\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_080CFE98: .4byte gPlttBufferFaded\n\ +.syntax divided\n"); +} +#endif diff --git a/src/battle/anim/wave_finger.c b/src/battle/anim/wave_finger.c new file mode 100755 index 000000000..58f0f8778 --- /dev/null +++ b/src/battle/anim/wave_finger.c @@ -0,0 +1,39 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +extern void sub_80CEF44(u8 bank, struct Sprite* sprite); +void sub_80CF088(struct Sprite* sprite); + +// wave_finger +// Used by Metronome. + +void sub_80CF040(struct Sprite* sprite) +{ + u8 bank; + if (gBattleAnimArgs[0] == 0) + bank = gBattleAnimBankAttacker; + else + bank = gBattleAnimBankTarget; + + sub_80CEF44(bank, sprite); + sprite->data[0] = 0; + StoreSpriteCallbackInData(sprite, sub_80CF088); + sprite->callback = sub_80785E4; +} + +void sub_80CF088(struct Sprite* sprite) +{ + if (++sprite->data[0] > 16) + { + StartSpriteAffineAnim(sprite, 1); + StoreSpriteCallbackInData(sprite, move_anim_8074EE0); + sprite->callback = sub_80785E4; + } +} diff --git a/src/battle/anim/whip.c b/src/battle/anim/whip.c new file mode 100755 index 000000000..3aa0758a9 --- /dev/null +++ b/src/battle/anim/whip.c @@ -0,0 +1,46 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +// whip (does a hitting animation that uses a rotating sprite to invoke the sprite getting hit.) +// Used by Slam and Vine Whip. + +void sub_80CC810(struct Sprite* sprite) +{ + if (sprite->animEnded) + move_anim_8072740(sprite); +} + +// unused, beta effect for diagonal sprite movement? +void sub_80CC82C(struct Sprite* sprite) +{ + if (GetBankSide(gBattleAnimBankAttacker) != 0) + { + sprite->pos1.x -= gBattleAnimArgs[0]; + sprite->pos1.y += gBattleAnimArgs[1]; + } + else + { + sprite->pos1.x += gBattleAnimArgs[0]; + sprite->pos1.y += gBattleAnimArgs[1]; + } + + sprite->callback = sub_8078600; + StoreSpriteCallbackInData(sprite, move_anim_8072740); +} + +void sub_80CC884(struct Sprite* sprite) +{ + if (GetBankSide(gBattleAnimBankAttacker) == 0) + StartSpriteAnim(sprite, 1); + + sprite->callback = sub_80CC810; + sub_807867C(sprite, gBattleAnimArgs[0]); + sprite->pos1.y += gBattleAnimArgs[1]; +} diff --git a/src/battle/anim/withdraw.c b/src/battle/anim/withdraw.c new file mode 100755 index 000000000..9abcff32d --- /dev/null +++ b/src/battle/anim/withdraw.c @@ -0,0 +1,69 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +extern u8 gObjectBankIDs[]; + +static void sub_80CF514(u8 taskId); + +// withdraw (where a Pokemon leans inward to mimic the effect of withdrawing into a shell.) +// Used in Withdraw. + +void sub_80CF4D8(u8 taskId) +{ + sub_8078E70(gObjectBankIDs[gBattleAnimBankAttacker], 0); + gTasks[taskId].func = sub_80CF514; +} + +void sub_80CF514(u8 taskId) +{ + u8 a = gObjectBankIDs[gBattleAnimBankAttacker]; + s16 b; + if (GetBankSide(gBattleAnimBankAttacker) == 0) + { + b = -gTasks[taskId].data[0]; + } + else + { + b = gTasks[taskId].data[0]; + } + + obj_id_set_rotscale(a, 0x100, 0x100, b); + if (gTasks[taskId].data[1] == 0) + { + gTasks[taskId].data[0] += 0xB0; + gSprites[a].pos2.y++; + } + else if (gTasks[taskId].data[1] == 1) + { + if (++gTasks[taskId].data[3] == 0x1E) + gTasks[taskId].data[1] = 2; + + return; + } + else + { + gTasks[taskId].data[0] -= 0xB0; + gSprites[a].pos2.y--; + } + + sub_8078F9C(a); + if (gTasks[taskId].data[0] == 0xF20 || gTasks[taskId].data[0] == 0) + { + if (gTasks[taskId].data[1] == 2) + { + sub_8078F40(a); + DestroyAnimVisualTask(taskId); + } + else + { + gTasks[taskId].data[1]++; + } + } +} -- cgit v1.2.3 From 617971cb63ec445b84d13b837e3adc0592b3057f Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Sun, 26 Nov 2017 19:01:16 -0800 Subject: Use song constants and 'mon' instead of 'pokemon' --- src/pokemon/pokemon_summary_screen.c | 111 ++++++++++++++++++----------------- 1 file changed, 56 insertions(+), 55 deletions(-) (limited to 'src') diff --git a/src/pokemon/pokemon_summary_screen.c b/src/pokemon/pokemon_summary_screen.c index f141f1c19..33d4f2951 100644 --- a/src/pokemon/pokemon_summary_screen.c +++ b/src/pokemon/pokemon_summary_screen.c @@ -19,6 +19,7 @@ #include "pokemon.h" #include "pokemon_summary_screen.h" #include "region_map.h" +#include "songs.h" #include "sound.h" #include "species.h" #include "sprite.h" @@ -957,7 +958,7 @@ static void sub_809E044(void) static void SummaryScreenExit(u8 taskId) { - PlaySE(5); + PlaySE(SE_SELECT); BeginNormalPaletteFade(-1, 0, 0, 16, 0); gTasks[taskId].func = sub_809E13C; } @@ -1062,7 +1063,7 @@ static void sub_809E260(u8 taskId) } else { - PlaySE(32); + PlaySE(SE_HAZURE); sub_809F9D0(taskId, pssData.selectedMoveIndex); } } @@ -1095,11 +1096,11 @@ static void sub_809E3FC(u8 taskId) { if (!MonKnowsMultipleMoves(&pssData.loadedMon)) { - PlaySE(32); + PlaySE(SE_HAZURE); } else { - PlaySE(5); + PlaySE(SE_SELECT); pssData.switchMoveIndex = pssData.selectedMoveIndex; sub_80A1B40(1); @@ -1110,13 +1111,13 @@ static void sub_809E3FC(u8 taskId) } else { - PlaySE(5); + PlaySE(SE_SELECT); sub_809EAC8(taskId); } } else if (gMain.newKeys & B_BUTTON) { - PlaySE(5); + PlaySE(SE_SELECT); sub_809EAC8(taskId); } @@ -1441,7 +1442,7 @@ void sub_809E7F0(u8 taskId) static void sub_809E83C(u8 taskId, s8 b) { - PlaySE(5); + PlaySE(SE_SELECT); sub_80A1B1C(19); sub_80A1B40(0); @@ -1658,7 +1659,7 @@ _0809EA4C: .4byte gSharedMem + 0x18010\n\ static void SummaryScreenHandleAButton(u8 taskId) { - PlaySE(5); + PlaySE(SE_SELECT); pssData.selectedMoveIndex = 0; sub_80A1488(2, 0); @@ -2003,7 +2004,7 @@ static void SummaryScreenHandleLeftRightInput(u8 taskId, s8 direction) if (FindTaskIdByFunc(sub_80A1334) == 0xFF && FindTaskIdByFunc(sub_80A1500) == 0xFF) { - PlaySE(5); + PlaySE(SE_SELECT); sub_809F0D0(taskId, direction); } } @@ -2042,7 +2043,7 @@ static void SummaryScreenHandleUpDownInput(u8 taskId, s8 direction) if (var3 != -1) { - PlaySE(5); + PlaySE(SE_SELECT); if (GetMonStatusAndPokerus(&pssData.loadedMon)) { sub_80A12D0(-2); @@ -3628,12 +3629,12 @@ static void PokemonSummaryScreen_PrintEggTrainerMemo(struct Pokemon *mon, u8 lef MenuPrint(gOtherText_EggDayCare, left, top); } -static void PokemonSummaryScreen_PrintTrainerMemo(struct Pokemon *pokemon, u8 left, u8 top) +static void PokemonSummaryScreen_PrintTrainerMemo(struct Pokemon *mon, u8 left, u8 top) { u8 locationMet; u8 gameMet; u8 *ptr = gStringVar4; - u8 nature = GetNature(pokemon); + u8 nature = GetNature(mon); #if ENGLISH ptr = sub_80A1E9C(ptr, gNatureNames[nature], 14); @@ -3650,11 +3651,11 @@ static void PokemonSummaryScreen_PrintTrainerMemo(struct Pokemon *pokemon, u8 le ptr = StringCopy(ptr, gOtherText_Terminator4); #endif - if (PokemonSummaryScreen_CheckOT(pokemon) == TRUE) + if (PokemonSummaryScreen_CheckOT(mon) == TRUE) { - locationMet = GetMonData(pokemon, MON_DATA_MET_LOCATION); + locationMet = GetMonData(mon, MON_DATA_MET_LOCATION); - if (GetMonData(pokemon, MON_DATA_MET_LEVEL) == 0) + if (GetMonData(mon, MON_DATA_MET_LEVEL) == 0) { ptr = PokemonSummaryScreen_CopyPokemonLevel(ptr, 5); *ptr = CHAR_NEWLINE; @@ -3673,7 +3674,7 @@ static void PokemonSummaryScreen_PrintTrainerMemo(struct Pokemon *pokemon, u8 le } else { - u8 levelMet = GetMonData(pokemon, MON_DATA_MET_LEVEL); + u8 levelMet = GetMonData(mon, MON_DATA_MET_LEVEL); ptr = PokemonSummaryScreen_CopyPokemonLevel(ptr, levelMet); *ptr = CHAR_NEWLINE; @@ -3686,7 +3687,7 @@ static void PokemonSummaryScreen_PrintTrainerMemo(struct Pokemon *pokemon, u8 le } else { - gameMet = GetMonData(pokemon, MON_DATA_MET_GAME); + gameMet = GetMonData(mon, MON_DATA_MET_GAME); if (!(gameMet == VERSION_RUBY || gameMet == VERSION_SAPPHIRE || gameMet == VERSION_EMERALD)) { @@ -3697,10 +3698,10 @@ static void PokemonSummaryScreen_PrintTrainerMemo(struct Pokemon *pokemon, u8 le } else { - locationMet = GetMonData(pokemon, MON_DATA_MET_LOCATION); + locationMet = GetMonData(mon, MON_DATA_MET_LOCATION); if (locationMet == 0xFF) { - u8 levelMet = GetMonData(pokemon, MON_DATA_MET_LEVEL); + u8 levelMet = GetMonData(mon, MON_DATA_MET_LEVEL); ptr = PokemonSummaryScreen_CopyPokemonLevel(ptr, levelMet); *ptr = CHAR_NEWLINE; @@ -3717,7 +3718,7 @@ static void PokemonSummaryScreen_PrintTrainerMemo(struct Pokemon *pokemon, u8 le } else { - u8 levelMet = GetMonData(pokemon, MON_DATA_MET_LEVEL); + u8 levelMet = GetMonData(mon, MON_DATA_MET_LEVEL); ptr = PokemonSummaryScreen_CopyPokemonLevel(ptr, levelMet); *ptr = CHAR_NEWLINE; @@ -3733,13 +3734,13 @@ static void PokemonSummaryScreen_PrintTrainerMemo(struct Pokemon *pokemon, u8 le MenuPrint(gStringVar4, left++, top++); } -static void sub_80A0958(struct Pokemon *pokemon) +static void sub_80A0958(struct Pokemon *mon) { u16 species; u8 *buffer; u8 level; - species = GetMonData(pokemon, MON_DATA_SPECIES); + species = GetMonData(mon, MON_DATA_SPECIES); buffer = gStringVar1; buffer = sub_80A1E58(buffer, 13); @@ -3758,7 +3759,7 @@ static void sub_80A0958(struct Pokemon *pokemon) MenuPrint(gStringVar1, 0, 14); MenuZeroFillWindowRect(3, 16, 9, 17); - level = GetMonData(pokemon, MON_DATA_LEVEL); + level = GetMonData(mon, MON_DATA_LEVEL); buffer = sub_80A1E58(gStringVar1, 13); buffer[0] = 0x34; @@ -3771,19 +3772,19 @@ static void sub_80A0958(struct Pokemon *pokemon) buffer[3] = EOS; MenuPrint(gStringVar1, 3, 16); - sub_80A0A2C(pokemon, 7, 16); + sub_80A0A2C(mon, 7, 16); } -static void sub_80A0A2C(struct Pokemon *pokemon, u8 left, u8 top) +static void sub_80A0A2C(struct Pokemon *mon, u8 left, u8 top) { const u8 *genderSymbol; u8 var1; u8 bottom; - u16 species = GetMonData(pokemon, MON_DATA_SPECIES2); + u16 species = GetMonData(mon, MON_DATA_SPECIES2); if (species != SPECIES_NIDORAN_M && species != SPECIES_NIDORAN_F) { - u8 gender = GetMonGender(pokemon); + u8 gender = GetMonGender(mon); switch (gender) { default: @@ -3804,32 +3805,32 @@ static void sub_80A0A2C(struct Pokemon *pokemon, u8 left, u8 top) } } -u8 GetNumRibbons(struct Pokemon *pokemon) +u8 GetNumRibbons(struct Pokemon *mon) { - u8 numRibbons = GetMonData(pokemon, MON_DATA_COOL_RIBBON); - numRibbons += GetMonData(pokemon, MON_DATA_BEAUTY_RIBBON); - numRibbons += GetMonData(pokemon, MON_DATA_CUTE_RIBBON); - numRibbons += GetMonData(pokemon, MON_DATA_SMART_RIBBON); - numRibbons += GetMonData(pokemon, MON_DATA_TOUGH_RIBBON); - numRibbons += GetMonData(pokemon, MON_DATA_CHAMPION_RIBBON); - numRibbons += GetMonData(pokemon, MON_DATA_WINNING_RIBBON); - numRibbons += GetMonData(pokemon, MON_DATA_VICTORY_RIBBON); - numRibbons += GetMonData(pokemon, MON_DATA_ARTIST_RIBBON); - numRibbons += GetMonData(pokemon, MON_DATA_EFFORT_RIBBON); - numRibbons += GetMonData(pokemon, MON_DATA_GIFT_RIBBON_1); - numRibbons += GetMonData(pokemon, MON_DATA_GIFT_RIBBON_2); - numRibbons += GetMonData(pokemon, MON_DATA_GIFT_RIBBON_3); - numRibbons += GetMonData(pokemon, MON_DATA_GIFT_RIBBON_4); - numRibbons += GetMonData(pokemon, MON_DATA_GIFT_RIBBON_5); - numRibbons += GetMonData(pokemon, MON_DATA_GIFT_RIBBON_6); - numRibbons += GetMonData(pokemon, MON_DATA_GIFT_RIBBON_7); + u8 numRibbons = GetMonData(mon, MON_DATA_COOL_RIBBON); + numRibbons += GetMonData(mon, MON_DATA_BEAUTY_RIBBON); + numRibbons += GetMonData(mon, MON_DATA_CUTE_RIBBON); + numRibbons += GetMonData(mon, MON_DATA_SMART_RIBBON); + numRibbons += GetMonData(mon, MON_DATA_TOUGH_RIBBON); + numRibbons += GetMonData(mon, MON_DATA_CHAMPION_RIBBON); + numRibbons += GetMonData(mon, MON_DATA_WINNING_RIBBON); + numRibbons += GetMonData(mon, MON_DATA_VICTORY_RIBBON); + numRibbons += GetMonData(mon, MON_DATA_ARTIST_RIBBON); + numRibbons += GetMonData(mon, MON_DATA_EFFORT_RIBBON); + numRibbons += GetMonData(mon, MON_DATA_GIFT_RIBBON_1); + numRibbons += GetMonData(mon, MON_DATA_GIFT_RIBBON_2); + numRibbons += GetMonData(mon, MON_DATA_GIFT_RIBBON_3); + numRibbons += GetMonData(mon, MON_DATA_GIFT_RIBBON_4); + numRibbons += GetMonData(mon, MON_DATA_GIFT_RIBBON_5); + numRibbons += GetMonData(mon, MON_DATA_GIFT_RIBBON_6); + numRibbons += GetMonData(mon, MON_DATA_GIFT_RIBBON_7); return numRibbons; } -static void PrintNumRibbons(struct Pokemon *pokemon) +static void PrintNumRibbons(struct Pokemon *mon) { - u8 numRibbons = GetNumRibbons(pokemon); + u8 numRibbons = GetNumRibbons(mon); if (numRibbons == 0) { @@ -3875,7 +3876,7 @@ static void PrintHeldItemName(u16 itemId, u8 left, u8 top) MenuPrint(sUnknown_083C15B4, left, top); } -static void DrawExperienceProgressBar(struct Pokemon *pokemon, u8 left, u8 top) +static void DrawExperienceProgressBar(struct Pokemon *mon, u8 left, u8 top) { u32 curExperience; u8 level; @@ -3885,9 +3886,9 @@ static void DrawExperienceProgressBar(struct Pokemon *pokemon, u8 left, u8 top) u32 expToNextLevel = 0; s64 numExpProgressBarTicks = 0; - curExperience = GetMonData(pokemon, MON_DATA_EXP); - level = GetMonData(pokemon, MON_DATA_LEVEL); - species = GetMonData(pokemon, MON_DATA_SPECIES); + curExperience = GetMonData(mon, MON_DATA_EXP); + level = GetMonData(mon, MON_DATA_LEVEL); + species = GetMonData(mon, MON_DATA_SPECIES); // The experience progress bar is shown as empty when the Pokemon is already level 100. if (level < 100) @@ -3989,12 +3990,12 @@ static void PrintSummaryWindowHeaderText(void) // If the given pokemon previously had the pokerus virus, a small // dot will be drawn in between the pokeball and the mon's level. -static void DrawPokerusSurvivorDot(struct Pokemon *pokemon) +static void DrawPokerusSurvivorDot(struct Pokemon *mon) { u16 *vram1 = (u16 *)(VRAM + 0xE444); u16 *vram2 = (u16 *)(VRAM + 0xEC44); - if (!CheckPartyPokerus(pokemon, 0) && CheckPartyHasHadPokerus(pokemon, 0)) + if (!CheckPartyPokerus(mon, 0) && CheckPartyHasHadPokerus(mon, 0)) { *vram1 = 0x2C; *vram2 = 0x2C; @@ -5293,12 +5294,12 @@ _080A1804: .4byte gUnknown_08E94550\n\ } #endif // NONMATCHING -u8 sub_80A1808(struct Pokemon *pokemon) +u8 sub_80A1808(struct Pokemon *mon) { u16 species; u8 spriteId; - species = GetMonData(pokemon, MON_DATA_SPECIES2); + species = GetMonData(mon, MON_DATA_SPECIES2); spriteId = CreateSprite(&gUnknown_02024E8C, 40, 64, 5); FreeSpriteOamMatrix(&gSprites[spriteId]); -- cgit v1.2.3 From 10704a135e3738b49d9175531d32bfde877f3b6b Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Sun, 26 Nov 2017 20:41:27 -0800 Subject: Fix some non-matching functions. Thanks cam --- src/pokemon/pokemon_summary_screen.c | 378 ++++++++--------------------------- 1 file changed, 79 insertions(+), 299 deletions(-) (limited to 'src') diff --git a/src/pokemon/pokemon_summary_screen.c b/src/pokemon/pokemon_summary_screen.c index 33d4f2951..c0f643818 100644 --- a/src/pokemon/pokemon_summary_screen.c +++ b/src/pokemon/pokemon_summary_screen.c @@ -1160,273 +1160,64 @@ static void sub_809E534(u8 taskId) } } -__attribute__((naked)) static void sub_809E5C4(void) { - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r10\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5-r7}\n\ - sub sp, 0x20\n\ - ldr r1, _0809E6D0 @ =gSharedMem + 0x18000\n\ - ldr r5, [r1]\n\ - ldrb r2, [r1, 0x9]\n\ - movs r0, 0x64\n\ - muls r0, r2\n\ - adds r5, r0\n\ - adds r0, r1, 0\n\ - adds r0, 0x79\n\ - ldrb r0, [r0]\n\ - mov r8, r0\n\ - adds r1, 0x7A\n\ - ldrb r6, [r1]\n\ - adds r0, 0xD\n\ - str r0, [sp, 0x8]\n\ - adds r0, r5, 0\n\ - ldr r1, [sp, 0x8]\n\ - bl GetMonData\n\ - mov r1, sp\n\ - adds r1, 0x2\n\ - str r1, [sp, 0x14]\n\ - strh r0, [r1]\n\ - adds r2, r6, 0\n\ - adds r2, 0xD\n\ - str r2, [sp, 0xC]\n\ - adds r0, r5, 0\n\ - adds r1, r2, 0\n\ - bl GetMonData\n\ - mov r1, sp\n\ - strh r0, [r1]\n\ - mov r3, r8\n\ - adds r3, 0x11\n\ - str r3, [sp, 0x10]\n\ - adds r0, r5, 0\n\ - adds r1, r3, 0\n\ - bl GetMonData\n\ - mov r7, sp\n\ - adds r7, 0x5\n\ - str r7, [sp, 0x18]\n\ - strb r0, [r7]\n\ - adds r0, r6, 0\n\ - adds r0, 0x11\n\ - str r0, [sp, 0x1C]\n\ - adds r0, r5, 0\n\ - ldr r1, [sp, 0x1C]\n\ - bl GetMonData\n\ - add r1, sp, 0x4\n\ - mov r10, r1\n\ - strb r0, [r1]\n\ - adds r0, r5, 0\n\ - movs r1, 0x15\n\ - bl GetMonData\n\ - mov r4, sp\n\ - adds r4, 0x6\n\ - strb r0, [r4]\n\ - ldr r1, _0809E6D4 @ =gUnknown_08208238\n\ - mov r2, r8\n\ - adds r0, r2, r1\n\ - ldrb r0, [r0]\n\ - mov r9, r0\n\ - ldrb r0, [r4]\n\ - adds r2, r0, 0\n\ - mov r3, r9\n\ - ands r2, r3\n\ - mov r7, r8\n\ - lsls r7, 1\n\ - mov r8, r7\n\ - asrs r2, r7\n\ - lsls r2, 24\n\ - lsrs r2, 24\n\ - adds r1, r6, r1\n\ - ldrb r3, [r1]\n\ - adds r1, r0, 0\n\ - ands r1, r3\n\ - lsls r6, 1\n\ - asrs r1, r6\n\ - lsls r1, 24\n\ - lsrs r1, 24\n\ - mov r7, r9\n\ - bics r0, r7\n\ - strb r0, [r4]\n\ - ldrb r0, [r4]\n\ - bics r0, r3\n\ - strb r0, [r4]\n\ - lsls r2, r6\n\ - mov r0, r8\n\ - lsls r1, r0\n\ - adds r2, r1\n\ - ldrb r0, [r4]\n\ - orrs r0, r2\n\ - strb r0, [r4]\n\ - adds r0, r5, 0\n\ - ldr r1, [sp, 0x8]\n\ - mov r2, sp\n\ - bl SetMonData\n\ - adds r0, r5, 0\n\ - ldr r1, [sp, 0xC]\n\ - ldr r2, [sp, 0x14]\n\ - bl SetMonData\n\ - adds r0, r5, 0\n\ - ldr r1, [sp, 0x10]\n\ - mov r2, r10\n\ - bl SetMonData\n\ - adds r0, r5, 0\n\ - ldr r1, [sp, 0x1C]\n\ - ldr r2, [sp, 0x18]\n\ - bl SetMonData\n\ - adds r0, r5, 0\n\ - movs r1, 0x15\n\ - adds r2, r4, 0\n\ - bl SetMonData\n\ - add sp, 0x20\n\ - pop {r3-r5}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - mov r10, r5\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_0809E6D0: .4byte gSharedMem + 0x18000\n\ -_0809E6D4: .4byte gUnknown_08208238\n\ - .syntax divided\n"); + struct Pokemon *party = pssData.monList.partyMons; + struct Pokemon *pkmn = &party[pssData.monIndex]; + u8 moveIndex1 = pssData.selectedMoveIndex; + u8 moveIndex2 = pssData.switchMoveIndex; + + u16 move1 = GetMonData(pkmn, MON_DATA_MOVE1 + moveIndex1); + u16 move2 = GetMonData(pkmn, MON_DATA_MOVE1 + moveIndex2); + u8 move1pp = GetMonData(pkmn, MON_DATA_PP1 + moveIndex1); + u8 move2pp = GetMonData(pkmn, MON_DATA_PP1 + moveIndex2); + u8 ppBonuses = GetMonData(pkmn, MON_DATA_PP_BONUSES); + + // Calculate PP bonuses + u8 r9 = gUnknown_08208238[moveIndex1]; + u8 r2 = (ppBonuses & r9) >> (moveIndex1 * 2); + u8 r3 = gUnknown_08208238[moveIndex2]; + u8 r1 = (ppBonuses & r3) >> (moveIndex2 * 2); + ppBonuses &= ~r9; + ppBonuses &= ~r3; + ppBonuses |= (r2 << (moveIndex2 * 2)) + (r1 << (moveIndex1 * 2)); + + // Swap the moves + SetMonData(pkmn, MON_DATA_MOVE1 + moveIndex1, &move2); + SetMonData(pkmn, MON_DATA_MOVE1 + moveIndex2, &move1); + SetMonData(pkmn, MON_DATA_PP1 + moveIndex1, &move2pp); + SetMonData(pkmn, MON_DATA_PP1 + moveIndex2, &move1pp); + SetMonData(pkmn, MON_DATA_PP_BONUSES, &ppBonuses); } -__attribute__((naked)) -void sub_809E6D8(void) +static void sub_809E6D8(void) { - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r10\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5-r7}\n\ - sub sp, 0x20\n\ - ldr r2, _0809E7E8 @ =gSharedMem + 0x18000\n\ - ldr r5, [r2]\n\ - ldrb r1, [r2, 0x9]\n\ - lsls r0, r1, 2\n\ - adds r0, r1\n\ - lsls r0, 4\n\ - adds r5, r0\n\ - adds r0, r2, 0\n\ - adds r0, 0x79\n\ - ldrb r0, [r0]\n\ - mov r8, r0\n\ - adds r2, 0x7A\n\ - ldrb r6, [r2]\n\ - adds r0, 0xD\n\ - str r0, [sp, 0x8]\n\ - adds r0, r5, 0\n\ - ldr r1, [sp, 0x8]\n\ - bl GetBoxMonData\n\ - mov r1, sp\n\ - adds r1, 0x2\n\ - str r1, [sp, 0x14]\n\ - strh r0, [r1]\n\ - adds r2, r6, 0\n\ - adds r2, 0xD\n\ - str r2, [sp, 0xC]\n\ - adds r0, r5, 0\n\ - adds r1, r2, 0\n\ - bl GetBoxMonData\n\ - mov r1, sp\n\ - strh r0, [r1]\n\ - mov r3, r8\n\ - adds r3, 0x11\n\ - str r3, [sp, 0x10]\n\ - adds r0, r5, 0\n\ - adds r1, r3, 0\n\ - bl GetBoxMonData\n\ - mov r7, sp\n\ - adds r7, 0x5\n\ - str r7, [sp, 0x18]\n\ - strb r0, [r7]\n\ - adds r0, r6, 0\n\ - adds r0, 0x11\n\ - str r0, [sp, 0x1C]\n\ - adds r0, r5, 0\n\ - ldr r1, [sp, 0x1C]\n\ - bl GetBoxMonData\n\ - add r1, sp, 0x4\n\ - mov r10, r1\n\ - strb r0, [r1]\n\ - adds r0, r5, 0\n\ - movs r1, 0x15\n\ - bl GetBoxMonData\n\ - mov r4, sp\n\ - adds r4, 0x6\n\ - strb r0, [r4]\n\ - ldr r1, _0809E7EC @ =gUnknown_08208238\n\ - mov r2, r8\n\ - adds r0, r2, r1\n\ - ldrb r0, [r0]\n\ - mov r9, r0\n\ - ldrb r0, [r4]\n\ - adds r2, r0, 0\n\ - mov r3, r9\n\ - ands r2, r3\n\ - mov r7, r8\n\ - lsls r7, 1\n\ - mov r8, r7\n\ - asrs r2, r7\n\ - lsls r2, 24\n\ - lsrs r2, 24\n\ - adds r1, r6, r1\n\ - ldrb r3, [r1]\n\ - adds r1, r0, 0\n\ - ands r1, r3\n\ - lsls r6, 1\n\ - asrs r1, r6\n\ - lsls r1, 24\n\ - lsrs r1, 24\n\ - mov r7, r9\n\ - bics r0, r7\n\ - strb r0, [r4]\n\ - ldrb r0, [r4]\n\ - bics r0, r3\n\ - strb r0, [r4]\n\ - lsls r2, r6\n\ - mov r0, r8\n\ - lsls r1, r0\n\ - adds r2, r1\n\ - ldrb r0, [r4]\n\ - orrs r0, r2\n\ - strb r0, [r4]\n\ - adds r0, r5, 0\n\ - ldr r1, [sp, 0x8]\n\ - mov r2, sp\n\ - bl SetBoxMonData\n\ - adds r0, r5, 0\n\ - ldr r1, [sp, 0xC]\n\ - ldr r2, [sp, 0x14]\n\ - bl SetBoxMonData\n\ - adds r0, r5, 0\n\ - ldr r1, [sp, 0x10]\n\ - mov r2, r10\n\ - bl SetBoxMonData\n\ - adds r0, r5, 0\n\ - ldr r1, [sp, 0x1C]\n\ - ldr r2, [sp, 0x18]\n\ - bl SetBoxMonData\n\ - adds r0, r5, 0\n\ - movs r1, 0x15\n\ - adds r2, r4, 0\n\ - bl SetBoxMonData\n\ - add sp, 0x20\n\ - pop {r3-r5}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - mov r10, r5\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_0809E7E8: .4byte gSharedMem + 0x18000\n\ -_0809E7EC: .4byte gUnknown_08208238\n\ - .syntax divided\n"); + struct BoxPokemon *boxMons = pssData.monList.boxMons; + struct BoxPokemon *pkmn = &boxMons[pssData.monIndex]; + u8 moveIndex1 = pssData.selectedMoveIndex; + u8 moveIndex2 = pssData.switchMoveIndex; + + u16 move1 = GetBoxMonData(pkmn, MON_DATA_MOVE1 + moveIndex1); + u16 move2 = GetBoxMonData(pkmn, MON_DATA_MOVE1 + moveIndex2); + u8 move1pp = GetBoxMonData(pkmn, MON_DATA_PP1 + moveIndex1); + u8 move2pp = GetBoxMonData(pkmn, MON_DATA_PP1 + moveIndex2); + u8 ppBonuses = GetBoxMonData(pkmn, MON_DATA_PP_BONUSES); + + // Calculate PP bonuses + u8 r9 = gUnknown_08208238[moveIndex1]; + u8 r2 = (ppBonuses & r9) >> (moveIndex1 * 2); + u8 r3 = gUnknown_08208238[moveIndex2]; + u8 r1 = (ppBonuses & r3) >> (moveIndex2 * 2); + ppBonuses &= ~r9; + ppBonuses &= ~r3; + ppBonuses |= (r2 << (moveIndex2 * 2)) + (r1 << (moveIndex1 * 2)); + + // Swap the moves + SetBoxMonData(pkmn, MON_DATA_MOVE1 + moveIndex1, &move2); + SetBoxMonData(pkmn, MON_DATA_MOVE1 + moveIndex2, &move1); + SetBoxMonData(pkmn, MON_DATA_PP1 + moveIndex1, &move2pp); + SetBoxMonData(pkmn, MON_DATA_PP1 + moveIndex2, &move1pp); + SetBoxMonData(pkmn, MON_DATA_PP_BONUSES, &ppBonuses); } void sub_809E7F0(u8 taskId) @@ -2160,44 +1951,32 @@ _0809F280: .4byte sub_809F43C\n\ } #endif // NONMATCHING -// s8 sub_809F284(s8 a) -// { -// struct Pokemon *mons = pssData.monList.partyMons; -// u8 var1 = 0; - -// if (pssData.page == PSS_PAGE_INFO) -// { -// if ((s8)a == -1 || pssData.monIndex != 0) -// { -// if ((s8)a == 1 || pssData.monIndex < pssData.maxMonIndex) -// { -// return pssData.monIndex + a; -// } -// } - -// return -1; -// } -// else -// { -// while (1) -// { -// var1 += a; - -// if (pssData.monIndex + var1 >= 0 || pssData.monIndex + var1 > pssData.maxMonIndex) -// { -// return -1; -// } - -// if (!GetMonData(&mons[pssData.monIndex + var1], MON_DATA_IS_EGG)) -// { -// break; -// } -// } - -// return pssData.monIndex + var1; -// } +#ifdef NONMATCHING +s8 sub_809F284(s8 a) +{ + struct Pokemon *mons = pssData.monList.partyMons; + s8 r6 = 0; -// } + if (pssData.page == PSS_PAGE_INFO) + { + if (a == -1 && pssData.monIndex == 0) + return -1; + if (a == 1 && pssData.monIndex >= pssData.maxMonIndex) + return -1; + return pssData.monIndex + a; + } + else + { + do + { + r6 += a; + if (pssData.monIndex + r6 < 0 || pssData.monIndex + r6 > pssData.maxMonIndex) + return -1; + } while (GetMonData(&mons[pssData.monIndex + r6], MON_DATA_IS_EGG) != 0); + return pssData.monIndex + r6; + } +} +#else __attribute__((naked)) s8 sub_809F284(s8 a) { @@ -2279,6 +2058,7 @@ _0809F308:\n\ bx r1\n\ .syntax divided\n"); } +#endif // NONMATCHING bool8 sub_809F310(struct Pokemon *mon) { -- cgit v1.2.3 From 8fd1e16862f119cf9cb25b7411cda0c8f7c4e354 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Mon, 27 Nov 2017 17:17:00 -0600 Subject: convert landmark data to C --- src/field/landmark.c | 366 +++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 355 insertions(+), 11 deletions(-) (limited to 'src') diff --git a/src/field/landmark.c b/src/field/landmark.c index 6a53716bb..1b7805e96 100644 --- a/src/field/landmark.c +++ b/src/field/landmark.c @@ -1,12 +1,11 @@ #include "global.h" #include "landmark.h" #include "event_data.h" - -#define MAPSEC_NONE 0x58 +#include "region_map_sections.h" struct Landmark { - u8 *name; + const u8 *name; u16 flag; }; @@ -14,16 +13,361 @@ struct LandmarkList { u8 mapSection; u8 id; - const struct Landmark **landmarks; + const struct Landmark *const *landmarks; +}; + +extern const u8 gLandmarkName_FlowerShop[]; +extern const u8 gLandmarkName_PetalburgWoods[]; +extern const u8 gLandmarkName_MrBrineysCottage[]; +extern const u8 gLandmarkName_AbandonedShip[]; +extern const u8 gLandmarkName_SeashoreHouse[]; +extern const u8 gLandmarkName_SlateportBeach[]; +extern const u8 gLandmarkName_CyclingRoad[]; +extern const u8 gLandmarkName_NewMauville[]; +extern const u8 gLandmarkName_TrickHouse[]; +extern const u8 gLandmarkName_OldLadysRestShop[]; +extern const u8 gLandmarkName_Desert[]; +extern const u8 gLandmarkName_WinstrateFamily[]; +extern const u8 gLandmarkName_CableCar[]; +extern const u8 gLandmarkName_GlassWorkshop[]; +extern const u8 gLandmarkName_WeatherInstitute[]; +extern const u8 gLandmarkName_MeteorFalls[]; +extern const u8 gLandmarkName_TunnelersRestHouse[]; +extern const u8 gLandmarkName_RusturfTunnel[]; +extern const u8 gLandmarkName_PokemonDayCare[]; +extern const u8 gLandmarkName_SafariZoneEntrance[]; +extern const u8 gLandmarkName_MtPyre[]; +extern const u8 gLandmarkName_ShoalCave[]; +extern const u8 gLandmarkName_SeafloorCavern[]; +extern const u8 gLandmarkName_GraniteCave[]; +extern const u8 gLandmarkName_OceanCurrent[]; +extern const u8 gLandmarkName_LanettesHouse[]; +extern const u8 gLandmarkName_FieryPath[]; +extern const u8 gLandmarkName_JaggedPass[]; +extern const u8 gLandmarkName_BerryMastersHouse[]; +extern const u8 gLandmarkName_IslandCave[]; +extern const u8 gLandmarkName_DesertRuins[]; +extern const u8 gLandmarkName_ScorchedSlab[]; +extern const u8 gLandmarkName_AncientTomb[]; +extern const u8 gLandmarkName_SealedChamber[]; +extern const u8 gLandmarkName_FossilManiacsHouse[]; +extern const u8 gLandmarkName_HuntersHouse[]; +extern const u8 gLandmarkName_SkyPillar[]; + +static const struct Landmark Landmark_FlowerShop = {gLandmarkName_FlowerShop, 2108}; +static const struct Landmark Landmark_PetalburgWoods = {gLandmarkName_PetalburgWoods, -1}; +static const struct Landmark Landmark_MrBrineysCottage = {gLandmarkName_MrBrineysCottage, 2109}; +static const struct Landmark Landmark_AbandonedShip = {gLandmarkName_AbandonedShip, 2110}; +static const struct Landmark Landmark_SeashoreHouse = {gLandmarkName_SeashoreHouse, 2111}; +static const struct Landmark Landmark_SlateportBeach = {gLandmarkName_SlateportBeach, -1}; +static const struct Landmark Landmark_CyclingRoad = {gLandmarkName_CyclingRoad, -1}; +static const struct Landmark Landmark_NewMauville = {gLandmarkName_NewMauville, 2112}; +static const struct Landmark Landmark_TrickHouse = {gLandmarkName_TrickHouse, 2114}; +static const struct Landmark Landmark_OldLadysRestShop = {gLandmarkName_OldLadysRestShop, 2113}; +static const struct Landmark Landmark_Desert = {gLandmarkName_Desert, -1}; +static const struct Landmark Landmark_WinstrateFamily = {gLandmarkName_WinstrateFamily, 2115}; +static const struct Landmark Landmark_CableCar = {gLandmarkName_CableCar, -1}; +static const struct Landmark Landmark_GlassWorkshop = {gLandmarkName_GlassWorkshop, 2116}; +static const struct Landmark Landmark_WeatherInstitute = {gLandmarkName_WeatherInstitute, -1}; +static const struct Landmark Landmark_MeteorFalls = {gLandmarkName_MeteorFalls, -1}; +static const struct Landmark Landmark_TunnelersRestHouse = {gLandmarkName_TunnelersRestHouse, 2138}; +static const struct Landmark Landmark_RusturfTunnel = {gLandmarkName_RusturfTunnel, -1}; +static const struct Landmark Landmark_PokemonDayCare = {gLandmarkName_PokemonDayCare, 2118}; +static const struct Landmark Landmark_SafariZoneEntrance = {gLandmarkName_SafariZoneEntrance, -1}; +static const struct Landmark Landmark_MtPyre = {gLandmarkName_MtPyre, -1}; +static const struct Landmark Landmark_ShoalCave = {gLandmarkName_ShoalCave, -1}; +static const struct Landmark Landmark_SeafloorCavern = {gLandmarkName_SeafloorCavern, 2119}; +static const struct Landmark Landmark_GraniteCave = {gLandmarkName_GraniteCave, -1}; +static const struct Landmark Landmark_OceanCurrent = {gLandmarkName_OceanCurrent, -1}; +static const struct Landmark Landmark_LanettesHouse = {gLandmarkName_LanettesHouse, 2117}; +static const struct Landmark Landmark_FieryPath = {gLandmarkName_FieryPath, 2122}; +static const struct Landmark Landmark_JaggedPass = {gLandmarkName_JaggedPass, -1}; +static const struct Landmark Landmark_BerryMastersHouse = {gLandmarkName_BerryMastersHouse, 2147}; +static const struct Landmark Landmark_IslandCave = {gLandmarkName_IslandCave, 2133}; +static const struct Landmark Landmark_DesertRuins = {gLandmarkName_DesertRuins, 2134}; +static const struct Landmark Landmark_ScorchedSlab = {gLandmarkName_ScorchedSlab, 2136}; +static const struct Landmark Landmark_AncientTomb = {gLandmarkName_AncientTomb, 2137}; +static const struct Landmark Landmark_SealedChamber = {gLandmarkName_SealedChamber, 2140}; +static const struct Landmark Landmark_FossilManiacsHouse = {gLandmarkName_FossilManiacsHouse, 2135}; +static const struct Landmark Landmark_HuntersHouse = {gLandmarkName_HuntersHouse, 2139}; +static const struct Landmark Landmark_SkyPillar = {gLandmarkName_SkyPillar, 2142}; + +static const struct Landmark *const Landmarks_Route104_0[] = +{ + &Landmark_FlowerShop, + NULL, +}; + +static const struct Landmark *const Landmarks_Route104_1[] = +{ + &Landmark_PetalburgWoods, + &Landmark_MrBrineysCottage, + NULL, +}; + +static const struct Landmark *const Landmarks_Route105_0[] = +{ + &Landmark_IslandCave, + NULL, +}; + +static const struct Landmark *const Landmarks_Route106_1[] = +{ + &Landmark_GraniteCave, + NULL, +}; + +static const struct Landmark *const Landmarks_Route108_0[] = +{ + &Landmark_AbandonedShip, + NULL, +}; + +static const struct Landmark *const Landmarks_Route109_0[] = +{ + &Landmark_SeashoreHouse, + &Landmark_SlateportBeach, + NULL, +}; + +static const struct Landmark *const Landmarks_Route110_0[] = +{ + &Landmark_CyclingRoad, + &Landmark_NewMauville, + NULL, +}; + +static const struct Landmark *const Landmarks_Route110_1[] = +{ + &Landmark_CyclingRoad, + NULL, +}; + +static const struct Landmark *const Landmarks_Route110_2[] = +{ + &Landmark_CyclingRoad, + &Landmark_TrickHouse, + NULL, +}; + +static const struct Landmark *const Landmarks_Route111_0[] = +{ + &Landmark_OldLadysRestShop, + NULL, +}; + +static const struct Landmark *const Landmarks_Route111_1[] = +{ + &Landmark_Desert, + NULL, +}; + +static const struct Landmark *const Landmarks_Route111_3[] = +{ + &Landmark_DesertRuins, + &Landmark_Desert, + NULL, +}; + +static const struct Landmark *const Landmarks_Route111_4[] = +{ + &Landmark_WinstrateFamily, + &Landmark_Desert, + NULL, +}; + +static const struct Landmark *const Landmarks_Route112_0[] = +{ + &Landmark_FieryPath, + &Landmark_JaggedPass, + NULL, +}; + +static const struct Landmark *const Landmarks_Route112_1[] = +{ + &Landmark_CableCar, + &Landmark_FieryPath, + NULL, +}; + +static const struct Landmark *const Landmarks_Route113_1[] = +{ + &Landmark_GlassWorkshop, + NULL, +}; + +static const struct Landmark *const Landmarks_Route114_1[] = +{ + &Landmark_FossilManiacsHouse, + NULL, +}; + +static const struct Landmark *const Landmarks_Route114_2[] = +{ + &Landmark_LanettesHouse, + NULL, +}; + +static const struct Landmark *const Landmarks_MeteorFalls[] = +{ + &Landmark_MeteorFalls, + NULL, +}; + +static const struct Landmark *const Landmarks_Route116_1[] = +{ + &Landmark_TunnelersRestHouse, + &Landmark_RusturfTunnel, + NULL, +}; + +static const struct Landmark *const Landmarks_Route116_2[] = +{ + &Landmark_RusturfTunnel, + NULL, +}; + +static const struct Landmark *const Landmarks_Route117_2[] = +{ + &Landmark_PokemonDayCare, + NULL, }; -extern const struct LandmarkList gLandmarkLists[]; +static const struct Landmark *const Landmarks_Route119_1[] = +{ + &Landmark_WeatherInstitute, + NULL, +}; + +static const struct Landmark *const Landmarks_Route120_0[] = +{ + &Landmark_ScorchedSlab, + NULL, +}; + +static const struct Landmark *const Landmarks_Route120_2[] = +{ + &Landmark_AncientTomb, + NULL, +}; + +static const struct Landmark *const Landmarks_Route121_2[] = +{ + &Landmark_SafariZoneEntrance, + NULL, +}; + +static const struct Landmark *const Landmarks_Route122_0[] = +{ + &Landmark_MtPyre, + NULL, +}; + +static const struct Landmark *const Landmarks_Route123_0[] = +{ + &Landmark_BerryMastersHouse, + NULL, +}; + +static const struct Landmark *const Landmarks_Route124_7[] = +{ + &Landmark_HuntersHouse, + NULL, +}; + +static const struct Landmark *const Landmarks_Route125_2[] = +{ + &Landmark_ShoalCave, + NULL, +}; + +static const struct Landmark *const Landmarks_Route128_1[] = +{ + &Landmark_SeafloorCavern, + NULL, +}; + +static const struct Landmark *const Landmarks_Route131_1[] = +{ + &Landmark_SkyPillar, + NULL, +}; + +static const struct Landmark *const Landmarks_OceanCurrent[] = +{ + &Landmark_OceanCurrent, + NULL, +}; + +static const struct Landmark *const Landmarks_Route134_2[] = +{ + &Landmark_SealedChamber, + &Landmark_OceanCurrent, + NULL, +}; + +static const struct Landmark *const Landmarks_MtChimney_2[] = +{ + &Landmark_CableCar, + &Landmark_JaggedPass, + NULL, +}; + +static const struct LandmarkList gLandmarkLists[] = +{ + {MAPSEC_Route104, 0, Landmarks_Route104_0}, + {MAPSEC_Route104, 1, Landmarks_Route104_1}, + {MAPSEC_Route105, 0, Landmarks_Route105_0}, + {MAPSEC_Route106, 1, Landmarks_Route106_1}, + {MAPSEC_Route108, 0, Landmarks_Route108_0}, + {MAPSEC_Route109, 0, Landmarks_Route109_0}, + {MAPSEC_Route110, 0, Landmarks_Route110_0}, + {MAPSEC_Route110, 1, Landmarks_Route110_1}, + {MAPSEC_Route110, 2, Landmarks_Route110_2}, + {MAPSEC_Route111, 0, Landmarks_Route111_0}, + {MAPSEC_Route111, 1, Landmarks_Route111_1}, + {MAPSEC_Route111, 2, Landmarks_Route111_1}, + {MAPSEC_Route111, 3, Landmarks_Route111_3}, + {MAPSEC_Route111, 4, Landmarks_Route111_4}, + {MAPSEC_Route112, 0, Landmarks_Route112_0}, + {MAPSEC_Route112, 1, Landmarks_Route112_1}, + {MAPSEC_Route113, 1, Landmarks_Route113_1}, + {MAPSEC_Route114, 1, Landmarks_Route114_1}, + {MAPSEC_Route114, 2, Landmarks_Route114_2}, + {MAPSEC_Route114, 3, Landmarks_MeteorFalls}, + {MAPSEC_Route115, 0, Landmarks_MeteorFalls}, + {MAPSEC_Route115, 1, Landmarks_MeteorFalls}, + {MAPSEC_Route116, 1, Landmarks_Route116_1}, + {MAPSEC_Route116, 2, Landmarks_Route116_2}, + {MAPSEC_Route117, 2, Landmarks_Route117_2}, + {MAPSEC_Route119, 1, Landmarks_Route119_1}, + {MAPSEC_Route120, 0, Landmarks_Route120_0}, + {MAPSEC_Route120, 2, Landmarks_Route120_2}, + {MAPSEC_Route121, 2, Landmarks_Route121_2}, + {MAPSEC_Route122, 0, Landmarks_Route122_0}, + {MAPSEC_Route123, 0, Landmarks_Route123_0}, + {MAPSEC_Route122, 1, Landmarks_Route122_0}, + {MAPSEC_Route124, 7, Landmarks_Route124_7}, + {MAPSEC_Route125, 2, Landmarks_Route125_2}, + {MAPSEC_Route128, 1, Landmarks_Route128_1}, + {MAPSEC_Route131, 1, Landmarks_Route131_1}, + {MAPSEC_Route132, 0, Landmarks_OceanCurrent}, + {MAPSEC_Route132, 1, Landmarks_OceanCurrent}, + {MAPSEC_Route133, 0, Landmarks_OceanCurrent}, + {MAPSEC_Route133, 1, Landmarks_OceanCurrent}, + {MAPSEC_Route133, 2, Landmarks_OceanCurrent}, + {MAPSEC_Route134, 0, Landmarks_OceanCurrent}, + {MAPSEC_Route134, 1, Landmarks_OceanCurrent}, + {MAPSEC_Route134, 2, Landmarks_Route134_2}, + {MAPSEC_MtChimney, 2, Landmarks_MtChimney_2}, + {MAPSEC_Nothing, 0, NULL}, +}; -static const struct Landmark **GetLandmarks(u8 mapSection, u8 id); +static const struct Landmark *const *GetLandmarks(u8 mapSection, u8 id); -u8 *GetLandmarkName(u8 mapSection, u8 id, u8 count) +const u8 *GetLandmarkName(u8 mapSection, u8 id, u8 count) { - const struct Landmark **landmarks = GetLandmarks(mapSection, id); + const struct Landmark *const *landmarks = GetLandmarks(mapSection, id); if (!landmarks) return NULL; @@ -48,11 +392,11 @@ u8 *GetLandmarkName(u8 mapSection, u8 id, u8 count) return (*landmarks)->name; } -static const struct Landmark **GetLandmarks(u8 mapSection, u8 id) +static const struct Landmark *const *GetLandmarks(u8 mapSection, u8 id) { u16 i = 0; - for (; gLandmarkLists[i].mapSection != MAPSEC_NONE; i++) + for (; gLandmarkLists[i].mapSection != MAPSEC_Nothing; i++) { if (gLandmarkLists[i].mapSection > mapSection) return NULL; @@ -60,7 +404,7 @@ static const struct Landmark **GetLandmarks(u8 mapSection, u8 id) break; } - if (gLandmarkLists[i].mapSection == MAPSEC_NONE) + if (gLandmarkLists[i].mapSection == MAPSEC_Nothing) return NULL; for (; gLandmarkLists[i].mapSection == mapSection; i++) -- cgit v1.2.3 From bc8f4541f3fe290e7deee61954f38c23c011169f Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Mon, 27 Nov 2017 17:54:49 -0600 Subject: convert wild_encounter data to C --- src/field/wild_encounter.c | 814 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 804 insertions(+), 10 deletions(-) (limited to 'src') diff --git a/src/field/wild_encounter.c b/src/field/wild_encounter.c index 9b3db1a52..64c88694c 100644 --- a/src/field/wild_encounter.c +++ b/src/field/wild_encounter.c @@ -2898,10 +2898,804 @@ const struct WildPokemon Underwater2_WaterMons [] = }; const struct WildPokemonInfo Underwater2_WaterMonsInfo = {4, Underwater2_WaterMons}; +const struct WildPokemonHeader gWildMonHeaders[] = +{ + { + .mapGroup = MAP_GROUP(PETALBURG_CITY), + .mapNum = MAP_NUM(PETALBURG_CITY), + .landMonsInfo = NULL, + .waterMonsInfo = &PetalburgCity_WaterMonsInfo, + .rockSmashMonsInfo = NULL, + .fishingMonsInfo = &PetalburgCity_FishingMonsInfo, + }, + { + .mapGroup = MAP_GROUP(SLATEPORT_CITY), + .mapNum = MAP_NUM(SLATEPORT_CITY), + .landMonsInfo = NULL, + .waterMonsInfo = &SlateportCity_WaterMonsInfo, + .rockSmashMonsInfo = NULL, + .fishingMonsInfo = &SlateportCity_FishingMonsInfo, + }, + { + .mapGroup = MAP_GROUP(LILYCOVE_CITY), + .mapNum = MAP_NUM(LILYCOVE_CITY), + .landMonsInfo = NULL, + .waterMonsInfo = &LilycoveCity_WaterMonsInfo, + .rockSmashMonsInfo = NULL, + .fishingMonsInfo = &LilycoveCity_FishingMonsInfo, + }, + { + .mapGroup = MAP_GROUP(MOSSDEEP_CITY), + .mapNum = MAP_NUM(MOSSDEEP_CITY), + .landMonsInfo = NULL, + .waterMonsInfo = &MossdeepCity_WaterMonsInfo, + .rockSmashMonsInfo = NULL, + .fishingMonsInfo = &MossdeepCity_FishingMonsInfo, + }, + { + .mapGroup = MAP_GROUP(SOOTOPOLIS_CITY), + .mapNum = MAP_NUM(SOOTOPOLIS_CITY), + .landMonsInfo = NULL, + .waterMonsInfo = &SootopolisCity_WaterMonsInfo, + .rockSmashMonsInfo = NULL, + .fishingMonsInfo = &SootopolisCity_FishingMonsInfo, + }, + { + .mapGroup = MAP_GROUP(EVER_GRANDE_CITY), + .mapNum = MAP_NUM(EVER_GRANDE_CITY), + .landMonsInfo = NULL, + .waterMonsInfo = &EverGrandeCity_WaterMonsInfo, + .rockSmashMonsInfo = NULL, + .fishingMonsInfo = &EverGrandeCity_FishingMonsInfo, + }, + { + .mapGroup = MAP_GROUP(METEOR_FALLS_1F_1R), + .mapNum = MAP_NUM(METEOR_FALLS_1F_1R), + .landMonsInfo = &MeteorFalls_1F_1R_LandMonsInfo, + .waterMonsInfo = &MeteorFalls_1F_1R_WaterMonsInfo, + .rockSmashMonsInfo = NULL, + .fishingMonsInfo = &MeteorFalls_1F_1R_FishingMonsInfo, + }, + { + .mapGroup = MAP_GROUP(METEOR_FALLS_1F_2R), + .mapNum = MAP_NUM(METEOR_FALLS_1F_2R), + .landMonsInfo = &MeteorFalls_1F_2R_LandMonsInfo, + .waterMonsInfo = &MeteorFalls_1F_2R_WaterMonsInfo, + .rockSmashMonsInfo = NULL, + .fishingMonsInfo = &MeteorFalls_1F_2R_FishingMonsInfo, + }, + { + .mapGroup = MAP_GROUP(METEOR_FALLS_B1F_1R), + .mapNum = MAP_NUM(METEOR_FALLS_B1F_1R), + .landMonsInfo = &MeteorFalls_B1F_1R_LandMonsInfo, + .waterMonsInfo = &MeteorFalls_B1F_1R_WaterMonsInfo, + .rockSmashMonsInfo = NULL, + .fishingMonsInfo = &MeteorFalls_B1F_1R_FishingMonsInfo, + }, + { + .mapGroup = MAP_GROUP(METEOR_FALLS_B1F_2R), + .mapNum = MAP_NUM(METEOR_FALLS_B1F_2R), + .landMonsInfo = &MeteorFalls_B1F_2R_LandMonsInfo, + .waterMonsInfo = &MeteorFalls_B1F_2R_WaterMonsInfo, + .rockSmashMonsInfo = NULL, + .fishingMonsInfo = &MeteorFalls_B1F_2R_FishingMonsInfo, + }, + { + .mapGroup = MAP_GROUP(RUSTURF_TUNNEL), + .mapNum = MAP_NUM(RUSTURF_TUNNEL), + .landMonsInfo = &RusturfTunnel_LandMonsInfo, + .waterMonsInfo = NULL, + .rockSmashMonsInfo = NULL, + .fishingMonsInfo = NULL, + }, + { + .mapGroup = MAP_GROUP(GRANITE_CAVE_1F), + .mapNum = MAP_NUM(GRANITE_CAVE_1F), + .landMonsInfo = &GraniteCave_1F_LandMonsInfo, + .waterMonsInfo = NULL, + .rockSmashMonsInfo = NULL, + .fishingMonsInfo = NULL, + }, + { + .mapGroup = MAP_GROUP(GRANITE_CAVE_B1F), + .mapNum = MAP_NUM(GRANITE_CAVE_B1F), + .landMonsInfo = &GraniteCave_B1F_LandMonsInfo, + .waterMonsInfo = NULL, + .rockSmashMonsInfo = NULL, + .fishingMonsInfo = NULL, + }, + { + .mapGroup = MAP_GROUP(GRANITE_CAVE_B2F), + .mapNum = MAP_NUM(GRANITE_CAVE_B2F), + .landMonsInfo = &GraniteCave_B2F_LandMonsInfo, + .waterMonsInfo = NULL, + .rockSmashMonsInfo = &GraniteCave_B2F_RockSmashMonsInfo, + .fishingMonsInfo = NULL, + }, + { + .mapGroup = MAP_GROUP(GRANITE_CAVE_STEVENS_ROOM), + .mapNum = MAP_NUM(GRANITE_CAVE_STEVENS_ROOM), + .landMonsInfo = &GraniteCave_StevensRoom_LandMonsInfo, + .waterMonsInfo = NULL, + .rockSmashMonsInfo = NULL, + .fishingMonsInfo = NULL, + }, + { + .mapGroup = MAP_GROUP(PETALBURG_WOODS), + .mapNum = MAP_NUM(PETALBURG_WOODS), + .landMonsInfo = &PetalburgWoods_LandMonsInfo, + .waterMonsInfo = NULL, + .rockSmashMonsInfo = NULL, + .fishingMonsInfo = NULL, + }, + { + .mapGroup = MAP_GROUP(JAGGED_PASS), + .mapNum = MAP_NUM(JAGGED_PASS), + .landMonsInfo = &JaggedPass_LandMonsInfo, + .waterMonsInfo = NULL, + .rockSmashMonsInfo = NULL, + .fishingMonsInfo = NULL, + }, + { + .mapGroup = MAP_GROUP(FIERY_PATH), + .mapNum = MAP_NUM(FIERY_PATH), + .landMonsInfo = &FieryPath_LandMonsInfo, + .waterMonsInfo = NULL, + .rockSmashMonsInfo = NULL, + .fishingMonsInfo = NULL, + }, + { + .mapGroup = MAP_GROUP(MT_PYRE_1F), + .mapNum = MAP_NUM(MT_PYRE_1F), + .landMonsInfo = &MtPyre_1F_LandMonsInfo, + .waterMonsInfo = NULL, + .rockSmashMonsInfo = NULL, + .fishingMonsInfo = NULL, + }, + { + .mapGroup = MAP_GROUP(MT_PYRE_2F), + .mapNum = MAP_NUM(MT_PYRE_2F), + .landMonsInfo = &MtPyre_2F_LandMonsInfo, + .waterMonsInfo = NULL, + .rockSmashMonsInfo = NULL, + .fishingMonsInfo = NULL, + }, + { + .mapGroup = MAP_GROUP(MT_PYRE_3F), + .mapNum = MAP_NUM(MT_PYRE_3F), + .landMonsInfo = &MtPyre_3F_LandMonsInfo, + .waterMonsInfo = NULL, + .rockSmashMonsInfo = NULL, + .fishingMonsInfo = NULL, + }, + { + .mapGroup = MAP_GROUP(MT_PYRE_4F), + .mapNum = MAP_NUM(MT_PYRE_4F), + .landMonsInfo = &MtPyre_4F_LandMonsInfo, + .waterMonsInfo = NULL, + .rockSmashMonsInfo = NULL, + .fishingMonsInfo = NULL, + }, + { + .mapGroup = MAP_GROUP(MT_PYRE_5F), + .mapNum = MAP_NUM(MT_PYRE_5F), + .landMonsInfo = &MtPyre_5F_LandMonsInfo, + .waterMonsInfo = NULL, + .rockSmashMonsInfo = NULL, + .fishingMonsInfo = NULL, + }, + { + .mapGroup = MAP_GROUP(MT_PYRE_6F), + .mapNum = MAP_NUM(MT_PYRE_6F), + .landMonsInfo = &MtPyre_6F_LandMonsInfo, + .waterMonsInfo = NULL, + .rockSmashMonsInfo = NULL, + .fishingMonsInfo = NULL, + }, + { + .mapGroup = MAP_GROUP(MT_PYRE_EXTERIOR), + .mapNum = MAP_NUM(MT_PYRE_EXTERIOR), + .landMonsInfo = &MtPyre_Exterior_LandMonsInfo, + .waterMonsInfo = NULL, + .rockSmashMonsInfo = NULL, + .fishingMonsInfo = NULL, + }, + { + .mapGroup = MAP_GROUP(MT_PYRE_SUMMIT), + .mapNum = MAP_NUM(MT_PYRE_SUMMIT), + .landMonsInfo = &MtPyre_Summit_LandMonsInfo, + .waterMonsInfo = NULL, + .rockSmashMonsInfo = NULL, + .fishingMonsInfo = NULL, + }, + { + .mapGroup = MAP_GROUP(SEAFLOOR_CAVERN_ENTRANCE), + .mapNum = MAP_NUM(SEAFLOOR_CAVERN_ENTRANCE), + .landMonsInfo = NULL, + .waterMonsInfo = &SeafloorCavern_Entrance_WaterMonsInfo, + .rockSmashMonsInfo = NULL, + .fishingMonsInfo = &SeafloorCavern_Entrance_FishingMonsInfo, + }, + { + .mapGroup = MAP_GROUP(SEAFLOOR_CAVERN_ROOM1), + .mapNum = MAP_NUM(SEAFLOOR_CAVERN_ROOM1), + .landMonsInfo = &SeafloorCavern_Room1_LandMonsInfo, + .waterMonsInfo = NULL, + .rockSmashMonsInfo = NULL, + .fishingMonsInfo = NULL, + }, + { + .mapGroup = MAP_GROUP(SEAFLOOR_CAVERN_ROOM2), + .mapNum = MAP_NUM(SEAFLOOR_CAVERN_ROOM2), + .landMonsInfo = &SeafloorCavern_Room2_LandMonsInfo, + .waterMonsInfo = NULL, + .rockSmashMonsInfo = NULL, + .fishingMonsInfo = NULL, + }, + { + .mapGroup = MAP_GROUP(SEAFLOOR_CAVERN_ROOM3), + .mapNum = MAP_NUM(SEAFLOOR_CAVERN_ROOM3), + .landMonsInfo = &SeafloorCavern_Room3_LandMonsInfo, + .waterMonsInfo = NULL, + .rockSmashMonsInfo = NULL, + .fishingMonsInfo = NULL, + }, + { + .mapGroup = MAP_GROUP(SEAFLOOR_CAVERN_ROOM4), + .mapNum = MAP_NUM(SEAFLOOR_CAVERN_ROOM4), + .landMonsInfo = &SeafloorCavern_Room4_LandMonsInfo, + .waterMonsInfo = NULL, + .rockSmashMonsInfo = NULL, + .fishingMonsInfo = NULL, + }, + { + .mapGroup = MAP_GROUP(SEAFLOOR_CAVERN_ROOM5), + .mapNum = MAP_NUM(SEAFLOOR_CAVERN_ROOM5), + .landMonsInfo = &SeafloorCavern_Room5_LandMonsInfo, + .waterMonsInfo = NULL, + .rockSmashMonsInfo = NULL, + .fishingMonsInfo = NULL, + }, + { + .mapGroup = MAP_GROUP(SEAFLOOR_CAVERN_ROOM6), + .mapNum = MAP_NUM(SEAFLOOR_CAVERN_ROOM6), + .landMonsInfo = &SeafloorCavern_Room6_LandMonsInfo, + .waterMonsInfo = &SeafloorCavern_Room6_WaterMonsInfo, + .rockSmashMonsInfo = NULL, + .fishingMonsInfo = &SeafloorCavern_Room6_FishingMonsInfo, + }, + { + .mapGroup = MAP_GROUP(SEAFLOOR_CAVERN_ROOM7), + .mapNum = MAP_NUM(SEAFLOOR_CAVERN_ROOM7), + .landMonsInfo = &SeafloorCavern_Room7_LandMonsInfo, + .waterMonsInfo = &SeafloorCavern_Room7_WaterMonsInfo, + .rockSmashMonsInfo = NULL, + .fishingMonsInfo = &SeafloorCavern_Room7_FishingMonsInfo, + }, + { + .mapGroup = MAP_GROUP(SEAFLOOR_CAVERN_ROOM8), + .mapNum = MAP_NUM(SEAFLOOR_CAVERN_ROOM8), + .landMonsInfo = &SeafloorCavern_Room8_LandMonsInfo, + .waterMonsInfo = NULL, + .rockSmashMonsInfo = NULL, + .fishingMonsInfo = NULL, + }, + { + .mapGroup = MAP_GROUP(CAVE_OF_ORIGIN_ENTRANCE), + .mapNum = MAP_NUM(CAVE_OF_ORIGIN_ENTRANCE), + .landMonsInfo = &CaveOfOrigin_Entrance_LandMonsInfo, + .waterMonsInfo = NULL, + .rockSmashMonsInfo = NULL, + .fishingMonsInfo = NULL, + }, + { + .mapGroup = MAP_GROUP(CAVE_OF_ORIGIN_1F), + .mapNum = MAP_NUM(CAVE_OF_ORIGIN_1F), + .landMonsInfo = &CaveOfOrigin_1F_LandMonsInfo, + .waterMonsInfo = NULL, + .rockSmashMonsInfo = NULL, + .fishingMonsInfo = NULL, + }, + { + .mapGroup = MAP_GROUP(CAVE_OF_ORIGIN_B1F), + .mapNum = MAP_NUM(CAVE_OF_ORIGIN_B1F), + .landMonsInfo = &CaveOfOrigin_B1F_LandMonsInfo, + .waterMonsInfo = NULL, + .rockSmashMonsInfo = NULL, + .fishingMonsInfo = NULL, + }, + { + .mapGroup = MAP_GROUP(CAVE_OF_ORIGIN_B2F), + .mapNum = MAP_NUM(CAVE_OF_ORIGIN_B2F), + .landMonsInfo = &CaveOfOrigin_B2F_LandMonsInfo, + .waterMonsInfo = NULL, + .rockSmashMonsInfo = NULL, + .fishingMonsInfo = NULL, + }, + { + .mapGroup = MAP_GROUP(CAVE_OF_ORIGIN_B3F), + .mapNum = MAP_NUM(CAVE_OF_ORIGIN_B3F), + .landMonsInfo = &CaveOfOrigin_B3F_LandMonsInfo, + .waterMonsInfo = NULL, + .rockSmashMonsInfo = NULL, + .fishingMonsInfo = NULL, + }, + { + .mapGroup = MAP_GROUP(VICTORY_ROAD_1F), + .mapNum = MAP_NUM(VICTORY_ROAD_1F), + .landMonsInfo = &VictoryRoad_1F_LandMonsInfo, + .waterMonsInfo = NULL, + .rockSmashMonsInfo = NULL, + .fishingMonsInfo = NULL, + }, + { + .mapGroup = MAP_GROUP(VICTORY_ROAD_B1F), + .mapNum = MAP_NUM(VICTORY_ROAD_B1F), + .landMonsInfo = &VictoryRoad_B1F_LandMonsInfo, + .waterMonsInfo = NULL, + .rockSmashMonsInfo = &VictoryRoad_B1F_RockSmashMonsInfo, + .fishingMonsInfo = NULL, + }, + { + .mapGroup = MAP_GROUP(VICTORY_ROAD_B2F), + .mapNum = MAP_NUM(VICTORY_ROAD_B2F), + .landMonsInfo = &VictoryRoad_B2F_LandMonsInfo, + .waterMonsInfo = &VictoryRoad_B2F_WaterMonsInfo, + .rockSmashMonsInfo = NULL, + .fishingMonsInfo = &VictoryRoad_B2F_FishingMonsInfo, + }, + { + .mapGroup = MAP_GROUP(SHOAL_CAVE_LOW_TIDE_ENTRANCE_ROOM), + .mapNum = MAP_NUM(SHOAL_CAVE_LOW_TIDE_ENTRANCE_ROOM), + .landMonsInfo = &ShoalCave_LowTideEntranceRoom_LandMonsInfo, + .waterMonsInfo = &ShoalCave_LowTideEntranceRoom_WaterMonsInfo, + .rockSmashMonsInfo = NULL, + .fishingMonsInfo = &ShoalCave_LowTideEntranceRoom_FishingMonsInfo, + }, + { + .mapGroup = MAP_GROUP(SHOAL_CAVE_LOW_TIDE_INNER_ROOM), + .mapNum = MAP_NUM(SHOAL_CAVE_LOW_TIDE_INNER_ROOM), + .landMonsInfo = &ShoalCave_LowTideInnerRoom_LandMonsInfo, + .waterMonsInfo = &ShoalCave_LowTideInnerRoom_WaterMonsInfo, + .rockSmashMonsInfo = NULL, + .fishingMonsInfo = &ShoalCave_LowTideInnerRoom_FishingMonsInfo, + }, + { + .mapGroup = MAP_GROUP(SHOAL_CAVE_LOW_TIDE_STAIRS_ROOM), + .mapNum = MAP_NUM(SHOAL_CAVE_LOW_TIDE_STAIRS_ROOM), + .landMonsInfo = &ShoalCave_LowTideStairsRoom_LandMonsInfo, + .waterMonsInfo = NULL, + .rockSmashMonsInfo = NULL, + .fishingMonsInfo = NULL, + }, + { + .mapGroup = MAP_GROUP(SHOAL_CAVE_LOW_TIDE_LOWER_ROOM), + .mapNum = MAP_NUM(SHOAL_CAVE_LOW_TIDE_LOWER_ROOM), + .landMonsInfo = &ShoalCave_LowTideLowerRoom_LandMonsInfo, + .waterMonsInfo = NULL, + .rockSmashMonsInfo = NULL, + .fishingMonsInfo = NULL, + }, + { + .mapGroup = MAP_GROUP(SHOAL_CAVE_LOW_TIDE_ICE_ROOM), + .mapNum = MAP_NUM(SHOAL_CAVE_LOW_TIDE_ICE_ROOM), + .landMonsInfo = &ShoalCave_LowTideIceRoom_LandMonsInfo, + .waterMonsInfo = NULL, + .rockSmashMonsInfo = NULL, + .fishingMonsInfo = NULL, + }, + { + .mapGroup = MAP_GROUP(NEW_MAUVILLE_ENTRANCE), + .mapNum = MAP_NUM(NEW_MAUVILLE_ENTRANCE), + .landMonsInfo = &NewMauville_Entrance_LandMonsInfo, + .waterMonsInfo = NULL, + .rockSmashMonsInfo = NULL, + .fishingMonsInfo = NULL, + }, + { + .mapGroup = MAP_GROUP(NEW_MAUVILLE_INSIDE), + .mapNum = MAP_NUM(NEW_MAUVILLE_INSIDE), + .landMonsInfo = &NewMauville_Inside_LandMonsInfo, + .waterMonsInfo = NULL, + .rockSmashMonsInfo = NULL, + .fishingMonsInfo = NULL, + }, + { + .mapGroup = MAP_GROUP(ABANDONED_SHIP_ROOMS_B1F), + .mapNum = MAP_NUM(ABANDONED_SHIP_ROOMS_B1F), + .landMonsInfo = NULL, + .waterMonsInfo = &AbandonedShip_Rooms_B1F_WaterMonsInfo, + .rockSmashMonsInfo = NULL, + .fishingMonsInfo = &AbandonedShip_Rooms_B1F_FishingMonsInfo, + }, + { + .mapGroup = MAP_GROUP(ABANDONED_SHIP_HIDDEN_FLOOR_CORRIDORS), + .mapNum = MAP_NUM(ABANDONED_SHIP_HIDDEN_FLOOR_CORRIDORS), + .landMonsInfo = NULL, + .waterMonsInfo = &AbandonedShip_HiddenFloorCorridors_WaterMonsInfo, + .rockSmashMonsInfo = NULL, + .fishingMonsInfo = &AbandonedShip_HiddenFloorCorridors_FishingMonsInfo, + }, + { + .mapGroup = MAP_GROUP(SKY_PILLAR_1F), + .mapNum = MAP_NUM(SKY_PILLAR_1F), + .landMonsInfo = &SkyPillar_1F_LandMonsInfo, + .waterMonsInfo = NULL, + .rockSmashMonsInfo = NULL, + .fishingMonsInfo = NULL, + }, + { + .mapGroup = MAP_GROUP(SKY_PILLAR_3F), + .mapNum = MAP_NUM(SKY_PILLAR_3F), + .landMonsInfo = &SkyPillar_3F_LandMonsInfo, + .waterMonsInfo = NULL, + .rockSmashMonsInfo = NULL, + .fishingMonsInfo = NULL, + }, + { + .mapGroup = MAP_GROUP(SKY_PILLAR_5F), + .mapNum = MAP_NUM(SKY_PILLAR_5F), + .landMonsInfo = &SkyPillar_5F_LandMonsInfo, + .waterMonsInfo = NULL, + .rockSmashMonsInfo = NULL, + .fishingMonsInfo = NULL, + }, + { + .mapGroup = MAP_GROUP(ROUTE101), + .mapNum = MAP_NUM(ROUTE101), + .landMonsInfo = &Route101_LandMonsInfo, + .waterMonsInfo = NULL, + .rockSmashMonsInfo = NULL, + .fishingMonsInfo = NULL, + }, + { + .mapGroup = MAP_GROUP(ROUTE102), + .mapNum = MAP_NUM(ROUTE102), + .landMonsInfo = &Route102_LandMonsInfo, + .waterMonsInfo = &Route102_WaterMonsInfo, + .rockSmashMonsInfo = NULL, + .fishingMonsInfo = &Route102_FishingMonsInfo, + }, + { + .mapGroup = MAP_GROUP(ROUTE103), + .mapNum = MAP_NUM(ROUTE103), + .landMonsInfo = &Route103_LandMonsInfo, + .waterMonsInfo = &Route103_WaterMonsInfo, + .rockSmashMonsInfo = NULL, + .fishingMonsInfo = &Route103_FishingMonsInfo, + }, + { + .mapGroup = MAP_GROUP(ROUTE104), + .mapNum = MAP_NUM(ROUTE104), + .landMonsInfo = &Route104_LandMonsInfo, + .waterMonsInfo = &Route104_WaterMonsInfo, + .rockSmashMonsInfo = NULL, + .fishingMonsInfo = &Route104_FishingMonsInfo, + }, + { + .mapGroup = MAP_GROUP(ROUTE105), + .mapNum = MAP_NUM(ROUTE105), + .landMonsInfo = NULL, + .waterMonsInfo = &Route105_WaterMonsInfo, + .rockSmashMonsInfo = NULL, + .fishingMonsInfo = &Route105_FishingMonsInfo, + }, + { + .mapGroup = MAP_GROUP(ROUTE106), + .mapNum = MAP_NUM(ROUTE106), + .landMonsInfo = NULL, + .waterMonsInfo = &Route106_WaterMonsInfo, + .rockSmashMonsInfo = NULL, + .fishingMonsInfo = &Route106_FishingMonsInfo, + }, + { + .mapGroup = MAP_GROUP(ROUTE107), + .mapNum = MAP_NUM(ROUTE107), + .landMonsInfo = NULL, + .waterMonsInfo = &Route107_WaterMonsInfo, + .rockSmashMonsInfo = NULL, + .fishingMonsInfo = &Route107_FishingMonsInfo, + }, + { + .mapGroup = MAP_GROUP(ROUTE108), + .mapNum = MAP_NUM(ROUTE108), + .landMonsInfo = NULL, + .waterMonsInfo = &Route108_WaterMonsInfo, + .rockSmashMonsInfo = NULL, + .fishingMonsInfo = &Route108_FishingMonsInfo, + }, + { + .mapGroup = MAP_GROUP(ROUTE109), + .mapNum = MAP_NUM(ROUTE109), + .landMonsInfo = NULL, + .waterMonsInfo = &Route109_WaterMonsInfo, + .rockSmashMonsInfo = NULL, + .fishingMonsInfo = &Route109_FishingMonsInfo, + }, + { + .mapGroup = MAP_GROUP(ROUTE110), + .mapNum = MAP_NUM(ROUTE110), + .landMonsInfo = &Route110_LandMonsInfo, + .waterMonsInfo = &Route110_WaterMonsInfo, + .rockSmashMonsInfo = NULL, + .fishingMonsInfo = &Route110_FishingMonsInfo, + }, + { + .mapGroup = MAP_GROUP(ROUTE111), + .mapNum = MAP_NUM(ROUTE111), + .landMonsInfo = &Route111_LandMonsInfo, + .waterMonsInfo = &Route111_WaterMonsInfo, + .rockSmashMonsInfo = &Route111_RockSmashMonsInfo, + .fishingMonsInfo = &Route111_FishingMonsInfo, + }, + { + .mapGroup = MAP_GROUP(ROUTE112), + .mapNum = MAP_NUM(ROUTE112), + .landMonsInfo = &Route112_LandMonsInfo, + .waterMonsInfo = NULL, + .rockSmashMonsInfo = NULL, + .fishingMonsInfo = NULL, + }, + { + .mapGroup = MAP_GROUP(ROUTE113), + .mapNum = MAP_NUM(ROUTE113), + .landMonsInfo = &Route113_LandMonsInfo, + .waterMonsInfo = NULL, + .rockSmashMonsInfo = NULL, + .fishingMonsInfo = NULL, + }, + { + .mapGroup = MAP_GROUP(ROUTE114), + .mapNum = MAP_NUM(ROUTE114), + .landMonsInfo = &Route114_LandMonsInfo, + .waterMonsInfo = &Route114_WaterMonsInfo, + .rockSmashMonsInfo = &Route114_RockSmashMonsInfo, + .fishingMonsInfo = &Route114_FishingMonsInfo, + }, + { + .mapGroup = MAP_GROUP(ROUTE115), + .mapNum = MAP_NUM(ROUTE115), + .landMonsInfo = &Route115_LandMonsInfo, + .waterMonsInfo = &Route115_WaterMonsInfo, + .rockSmashMonsInfo = NULL, + .fishingMonsInfo = &Route115_FishingMonsInfo, + }, + { + .mapGroup = MAP_GROUP(ROUTE116), + .mapNum = MAP_NUM(ROUTE116), + .landMonsInfo = &Route116_LandMonsInfo, + .waterMonsInfo = NULL, + .rockSmashMonsInfo = NULL, + .fishingMonsInfo = NULL, + }, + { + .mapGroup = MAP_GROUP(ROUTE117), + .mapNum = MAP_NUM(ROUTE117), + .landMonsInfo = &Route117_LandMonsInfo, + .waterMonsInfo = &Route117_WaterMonsInfo, + .rockSmashMonsInfo = NULL, + .fishingMonsInfo = &Route117_FishingMonsInfo, + }, + { + .mapGroup = MAP_GROUP(ROUTE118), + .mapNum = MAP_NUM(ROUTE118), + .landMonsInfo = &Route118_LandMonsInfo, + .waterMonsInfo = &Route118_WaterMonsInfo, + .rockSmashMonsInfo = NULL, + .fishingMonsInfo = &Route118_FishingMonsInfo, + }, + { + .mapGroup = MAP_GROUP(ROUTE119), + .mapNum = MAP_NUM(ROUTE119), + .landMonsInfo = &Route119_LandMonsInfo, + .waterMonsInfo = &Route119_WaterMonsInfo, + .rockSmashMonsInfo = NULL, + .fishingMonsInfo = &Route119_FishingMonsInfo, + }, + { + .mapGroup = MAP_GROUP(ROUTE120), + .mapNum = MAP_NUM(ROUTE120), + .landMonsInfo = &Route120_LandMonsInfo, + .waterMonsInfo = &Route120_WaterMonsInfo, + .rockSmashMonsInfo = NULL, + .fishingMonsInfo = &Route120_FishingMonsInfo, + }, + { + .mapGroup = MAP_GROUP(ROUTE121), + .mapNum = MAP_NUM(ROUTE121), + .landMonsInfo = &Route121_LandMonsInfo, + .waterMonsInfo = &Route121_WaterMonsInfo, + .rockSmashMonsInfo = NULL, + .fishingMonsInfo = &Route121_FishingMonsInfo, + }, + { + .mapGroup = MAP_GROUP(ROUTE122), + .mapNum = MAP_NUM(ROUTE122), + .landMonsInfo = NULL, + .waterMonsInfo = &Route122_WaterMonsInfo, + .rockSmashMonsInfo = NULL, + .fishingMonsInfo = &Route122_FishingMonsInfo, + }, + { + .mapGroup = MAP_GROUP(ROUTE123), + .mapNum = MAP_NUM(ROUTE123), + .landMonsInfo = &Route123_LandMonsInfo, + .waterMonsInfo = &Route123_WaterMonsInfo, + .rockSmashMonsInfo = NULL, + .fishingMonsInfo = &Route123_FishingMonsInfo, + }, + { + .mapGroup = MAP_GROUP(ROUTE124), + .mapNum = MAP_NUM(ROUTE124), + .landMonsInfo = NULL, + .waterMonsInfo = &Route124_WaterMonsInfo, + .rockSmashMonsInfo = NULL, + .fishingMonsInfo = &Route124_FishingMonsInfo, + }, + { + .mapGroup = MAP_GROUP(ROUTE125), + .mapNum = MAP_NUM(ROUTE125), + .landMonsInfo = NULL, + .waterMonsInfo = &Route125_WaterMonsInfo, + .rockSmashMonsInfo = NULL, + .fishingMonsInfo = &Route125_FishingMonsInfo, + }, + { + .mapGroup = MAP_GROUP(ROUTE126), + .mapNum = MAP_NUM(ROUTE126), + .landMonsInfo = NULL, + .waterMonsInfo = &Route126_WaterMonsInfo, + .rockSmashMonsInfo = NULL, + .fishingMonsInfo = &Route126_FishingMonsInfo, + }, + { + .mapGroup = MAP_GROUP(ROUTE127), + .mapNum = MAP_NUM(ROUTE127), + .landMonsInfo = NULL, + .waterMonsInfo = &Route127_WaterMonsInfo, + .rockSmashMonsInfo = NULL, + .fishingMonsInfo = &Route127_FishingMonsInfo, + }, + { + .mapGroup = MAP_GROUP(ROUTE128), + .mapNum = MAP_NUM(ROUTE128), + .landMonsInfo = NULL, + .waterMonsInfo = &Route128_WaterMonsInfo, + .rockSmashMonsInfo = NULL, + .fishingMonsInfo = &Route128_FishingMonsInfo, + }, + { + .mapGroup = MAP_GROUP(ROUTE129), + .mapNum = MAP_NUM(ROUTE129), + .landMonsInfo = NULL, + .waterMonsInfo = &Route129_WaterMonsInfo, + .rockSmashMonsInfo = NULL, + .fishingMonsInfo = &Route129_FishingMonsInfo, + }, + { + .mapGroup = MAP_GROUP(ROUTE130), + .mapNum = MAP_NUM(ROUTE130), + .landMonsInfo = &Route130_LandMonsInfo, + .waterMonsInfo = &Route130_WaterMonsInfo, + .rockSmashMonsInfo = NULL, + .fishingMonsInfo = &Route130_FishingMonsInfo, + }, + { + .mapGroup = MAP_GROUP(ROUTE131), + .mapNum = MAP_NUM(ROUTE131), + .landMonsInfo = NULL, + .waterMonsInfo = &Route131_WaterMonsInfo, + .rockSmashMonsInfo = NULL, + .fishingMonsInfo = &Route131_FishingMonsInfo, + }, + { + .mapGroup = MAP_GROUP(ROUTE132), + .mapNum = MAP_NUM(ROUTE132), + .landMonsInfo = NULL, + .waterMonsInfo = &Route132_WaterMonsInfo, + .rockSmashMonsInfo = NULL, + .fishingMonsInfo = &Route132_FishingMonsInfo, + }, + { + .mapGroup = MAP_GROUP(ROUTE133), + .mapNum = MAP_NUM(ROUTE133), + .landMonsInfo = NULL, + .waterMonsInfo = &Route133_WaterMonsInfo, + .rockSmashMonsInfo = NULL, + .fishingMonsInfo = &Route133_FishingMonsInfo, + }, + { + .mapGroup = MAP_GROUP(ROUTE134), + .mapNum = MAP_NUM(ROUTE134), + .landMonsInfo = NULL, + .waterMonsInfo = &Route134_WaterMonsInfo, + .rockSmashMonsInfo = NULL, + .fishingMonsInfo = &Route134_FishingMonsInfo, + }, + { + .mapGroup = MAP_GROUP(SAFARI_ZONE_NORTHWEST), + .mapNum = MAP_NUM(SAFARI_ZONE_NORTHWEST), + .landMonsInfo = &SafariZone_Northwest_LandMonsInfo, + .waterMonsInfo = &SafariZone_Northwest_WaterMonsInfo, + .rockSmashMonsInfo = NULL, + .fishingMonsInfo = &SafariZone_Northwest_FishingMonsInfo, + }, + { + .mapGroup = MAP_GROUP(SAFARI_ZONE_NORTHEAST), + .mapNum = MAP_NUM(SAFARI_ZONE_NORTHEAST), + .landMonsInfo = &SafariZone_Northeast_LandMonsInfo, + .waterMonsInfo = NULL, + .rockSmashMonsInfo = &SafariZone_Northeast_RockSmashMonsInfo, + .fishingMonsInfo = NULL, + }, + { + .mapGroup = MAP_GROUP(SAFARI_ZONE_SOUTHWEST), + .mapNum = MAP_NUM(SAFARI_ZONE_SOUTHWEST), + .landMonsInfo = &SafariZone_Southwest_LandMonsInfo, + .waterMonsInfo = &SafariZone_Southwest_WaterMonsInfo, + .rockSmashMonsInfo = NULL, + .fishingMonsInfo = &SafariZone_Southwest_FishingMonsInfo, + }, + { + .mapGroup = MAP_GROUP(SAFARI_ZONE_SOUTHEAST), + .mapNum = MAP_NUM(SAFARI_ZONE_SOUTHEAST), + .landMonsInfo = &SafariZone_Southeast_LandMonsInfo, + .waterMonsInfo = NULL, + .rockSmashMonsInfo = NULL, + .fishingMonsInfo = NULL, + }, + { + .mapGroup = MAP_GROUP(DEWFORD_TOWN), + .mapNum = MAP_NUM(DEWFORD_TOWN), + .landMonsInfo = NULL, + .waterMonsInfo = &DewfordTown_WaterMonsInfo, + .rockSmashMonsInfo = NULL, + .fishingMonsInfo = &DewfordTown_FishingMonsInfo, + }, + { + .mapGroup = MAP_GROUP(PACIFIDLOG_TOWN), + .mapNum = MAP_NUM(PACIFIDLOG_TOWN), + .landMonsInfo = NULL, + .waterMonsInfo = &PacifidlogTown_WaterMonsInfo, + .rockSmashMonsInfo = NULL, + .fishingMonsInfo = &PacifidlogTown_FishingMonsInfo, + }, + { + .mapGroup = MAP_GROUP(UNDERWATER1), + .mapNum = MAP_NUM(UNDERWATER1), + .landMonsInfo = NULL, + .waterMonsInfo = &Underwater1_WaterMonsInfo, + .rockSmashMonsInfo = NULL, + .fishingMonsInfo = NULL, + }, + { + .mapGroup = MAP_GROUP(UNDERWATER2), + .mapNum = MAP_NUM(UNDERWATER2), + .landMonsInfo = NULL, + .waterMonsInfo = &Underwater2_WaterMonsInfo, + .rockSmashMonsInfo = NULL, + .fishingMonsInfo = NULL, + }, + { + .mapGroup = MAP_GROUP(UNDEFINED), + .mapNum = MAP_NUM(UNDEFINED), + .landMonsInfo = NULL, + .waterMonsInfo = NULL, + .rockSmashMonsInfo = NULL, + .fishingMonsInfo = NULL, + }, +}; + +const struct WildPokemon gWildFeebasRoute119Data = {20, 25, SPECIES_FEEBAS}; + +const u16 gRoute119WaterTileData[] = +{ + 0, 0x2D, 0, + 0x2E, 0x5B, 0x83, + 0x5C, 0x8B, 0x12A, +}; -extern u16 gRoute119WaterTileData[]; extern u16 gScriptResult; -extern struct WildPokemon gWildFeebasRoute119Data; extern u8 S_RepelWoreOff[]; EWRAM_DATA static u8 sWildEncountersDisabled = 0; @@ -2967,7 +3761,7 @@ static bool8 CheckFeebas(void) route119section = 2; #else { - register u16 *arr asm("r0"); + register const u16 *arr asm("r0"); if (y >= (arr = gRoute119WaterTileData)[3 * 1 + 0] && y <= arr[3 * 1 + 1]) route119section = 1; if (y >= arr[3 * 2 + 0] && y <= arr[3 * 2 + 1]) @@ -3177,7 +3971,7 @@ static void CreateWildMon(u16 species, u8 b) CreateMonWithNature(&gEnemyParty[0], species, b, 0x20, PickWildMonNature()); } -static bool8 GenerateWildMon(struct WildPokemonInfo *wildMonInfo, u8 area, bool8 checkRepel) +static bool8 GenerateWildMon(const struct WildPokemonInfo *wildMonInfo, u8 area, bool8 checkRepel) { u8 wildMonIndex = 0; u8 level; @@ -3204,7 +3998,7 @@ static bool8 GenerateWildMon(struct WildPokemonInfo *wildMonInfo, u8 area, bool8 } } -static u16 GenerateFishingWildMon(struct WildPokemonInfo *wildMonInfo, u8 rod) +static u16 GenerateFishingWildMon(const struct WildPokemonInfo *wildMonInfo, u8 rod) { u8 wildMonIndex = ChooseWildMonIndex_Fishing(rod); u8 level = ChooseWildMonLevel(&wildMonInfo->wildPokemon[wildMonIndex]); @@ -3369,7 +4163,7 @@ void ScrSpecial_RockSmashWildEncounter(void) if (headerNum != 0xFFFF) { - struct WildPokemonInfo *wildPokemonInfo = gWildMonHeaders[headerNum].rockSmashMonsInfo; + const struct WildPokemonInfo *wildPokemonInfo = gWildMonHeaders[headerNum].rockSmashMonsInfo; if (wildPokemonInfo == NULL) { @@ -3393,7 +4187,7 @@ bool8 SweetScentWildEncounter(void) s16 x; s16 y; u16 headerNum; - struct WildPokemonInfo *wildPokemonInfo; + const struct WildPokemonInfo *wildPokemonInfo; PlayerGetDestCoords(&x, &y); if ((headerNum = GetCurrentMapWildMonHeader()) != 0xFFFF) @@ -3468,8 +4262,8 @@ void FishingWildEncounter(u8 rod) u16 GetLocalWildMon(bool8 *isWaterMon) { u16 headerNum; - struct WildPokemonInfo *landMonsInfo; - struct WildPokemonInfo *waterMonsInfo; + const struct WildPokemonInfo *landMonsInfo; + const struct WildPokemonInfo *waterMonsInfo; *isWaterMon = FALSE; headerNum = GetCurrentMapWildMonHeader(); @@ -3505,7 +4299,7 @@ u16 GetLocalWaterMon(void) if (headerNum != 0xFFFF) { - struct WildPokemonInfo *waterMonsInfo = gWildMonHeaders[headerNum].waterMonsInfo; + const struct WildPokemonInfo *waterMonsInfo = gWildMonHeaders[headerNum].waterMonsInfo; if (waterMonsInfo) return waterMonsInfo->wildPokemon[ChooseWildMonIndex_Water()].species; -- cgit v1.2.3 From 8215d028078128c6b28119fe2420229cb1828e6b Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Mon, 27 Nov 2017 23:09:02 -0600 Subject: fldeff_cut.c data --- src/field/field_map_obj.c | 2 +- src/field/fldeff_cut.c | 53 +++++++++++++++++++++++++++++++++++++++++++---- 2 files changed, 50 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/field/field_map_obj.c b/src/field/field_map_obj.c index 0e6794ed7..81c0c5854 100644 --- a/src/field/field_map_obj.c +++ b/src/field/field_map_obj.c @@ -1354,7 +1354,7 @@ const u32 gFieldEffectPic_ShadowMedium[] = INCBIN_U32("graphics/field_effect_obj const u32 gFieldEffectPic_ShadowLarge[] = INCBIN_U32("graphics/field_effect_objects/pics/shadow_large.4bpp"); const u32 gFieldEffectPic_ShadowExtraLarge[] = INCBIN_U32("graphics/field_effect_objects/pics/shadow_extra_large.4bpp"); const u32 filler_8368A08[0x48] = {}; -const u32 gFieldEffectPic_CutGrass[] = INCBIN_U32("graphics/field_effect_objects/pics/cut_grass.4bpp"); +const u8 gFieldEffectPic_CutGrass[] = INCBIN_U8("graphics/field_effect_objects/pics/cut_grass.4bpp"); const u32 FieldEffectPic_CutGrass_Copy[] = INCBIN_U32("graphics/field_effect_objects/pics/cut_grass.4bpp"); const u16 gFieldEffectObjectPalette6[] = INCBIN_U16("graphics/field_effect_objects/palettes/06.gbapal"); const u32 gFieldEffectPic_Ripple_0[] = INCBIN_U32("graphics/field_effect_objects/pics/ripple/0.4bpp"); diff --git a/src/field/fldeff_cut.c b/src/field/fldeff_cut.c index edf38d800..e4328acfc 100644 --- a/src/field/fldeff_cut.c +++ b/src/field/fldeff_cut.c @@ -2,6 +2,7 @@ #include "fldeff_cut.h" #include "field_camera.h" #include "field_effect.h" +#include "field_map_obj.h" #include "field_player_avatar.h" #include "fieldmap.h" #include "map_obj_lock.h" @@ -20,12 +21,56 @@ extern void (*gFieldCallback)(void); extern void (*gUnknown_03005CE4)(void); +extern u8 gLastFieldPokeMenuOpened; -extern struct SpriteTemplate gSpriteTemplate_CutGrass; +extern const u8 S_UseCut[]; -extern u8 gLastFieldPokeMenuOpened; +const struct OamData gOamData_CutGrass = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 1, + .priority = 1, + .paletteNum = 1, + .affineParam = 0, +}; -extern u8 S_UseCut[]; +const union AnimCmd gSpriteAnim_CutGrass[] = +{ + ANIMCMD_FRAME(0, 30), + ANIMCMD_JUMP(0), +}; + +const union AnimCmd *const gSpriteAnimTable_CutGrass[] = +{ + gSpriteAnim_CutGrass, +}; + +const struct SpriteFrameImage gSpriteImageTable_CutGrass[] = +{ + {gFieldEffectPic_CutGrass, 0x20}, +}; + +const struct SpritePalette gFieldEffectObjectPaletteInfo6 = {gFieldEffectObjectPalette6, 0x1000}; + +static void sub_80A2A48(struct Sprite *); +static const struct SpriteTemplate gSpriteTemplate_CutGrass = +{ + .tileTag = 0xFFFF, + .paletteTag = 0x1000, + .oam = &gOamData_CutGrass, + .anims = gSpriteAnimTable_CutGrass, + .images = gSpriteImageTable_CutGrass, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80A2A48, +}; bool8 SetUpFieldMove_Cut(void) { @@ -238,7 +283,7 @@ void sub_80A28F4(s16 x, s16 y) } } -void sub_80A2A48(struct Sprite *sprite) +static void sub_80A2A48(struct Sprite *sprite) { sprite->data[0] = 8; sprite->data[1] = 0; -- cgit v1.2.3 From 356c1f87c3a787013123b2f36ddcaa3fae1db8d8 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Mon, 27 Nov 2017 23:39:25 -0600 Subject: convert fldeff data to C --- src/field/fldeff_decoration.c | 63 +++++++++++++- src/field/fldeff_secretpower.c | 186 ++++++++++++++++++++++++++++++++++++++++- 2 files changed, 242 insertions(+), 7 deletions(-) (limited to 'src') diff --git a/src/field/fldeff_decoration.c b/src/field/fldeff_decoration.c index d58f53a3c..7c8ff44db 100644 --- a/src/field/fldeff_decoration.c +++ b/src/field/fldeff_decoration.c @@ -13,14 +13,69 @@ #include "task.h" #include "text.h" -extern const struct SpriteTemplate *const gFieldEffectObjectTemplatePointers[36]; -extern const struct SpriteTemplate gSpriteTemplate_83D26A0; +extern const u8 gSpriteImage_83D21EC[]; +extern const u8 gSpriteImage_83D22EC[]; +extern const u8 gSpriteImage_83D23EC[]; +extern const u16 gTilesetPalettes_SecretBase[][16]; + +const struct OamData gOamData_83D266C = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +const union AnimCmd gSpriteAnim_83D2674[] = +{ + ANIMCMD_FRAME(0, 6), + ANIMCMD_FRAME(1, 6), + ANIMCMD_FRAME(2, 6), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_83D2684[] = +{ + gSpriteAnim_83D2674, +}; + +const struct SpriteFrameImage gSpriteImageTable_83D2688[] = +{ + {gSpriteImage_83D21EC, 0x100}, + {gSpriteImage_83D22EC, 0x100}, + {gSpriteImage_83D23EC, 0x100}, +}; -static void sub_80C68EC(u8); -static void DoBalloonSoundEffect(s16); void SpriteCB_SandPillar_0(struct Sprite *); void SpriteCB_SandPillar_1(struct Sprite *); void SpriteCB_SandPillar_2(struct Sprite *); +const struct SpriteTemplate gSpriteTemplate_83D26A0 = +{ + .tileTag = 0xFFFF, + .paletteTag = 4110, + .oam = &gOamData_83D266C, + .anims = gSpriteAnimTable_83D2684, + .images = gSpriteImageTable_83D2688, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_SandPillar_0, +}; + +// This uses one of the secret base palettes, so there is no "09.pal" file. +const struct SpritePalette gFieldEffectObjectPaletteInfo9 = {gTilesetPalettes_SecretBase[5], 0x100E}; + +extern const struct SpriteTemplate *const gFieldEffectObjectTemplatePointers[36]; + +static void sub_80C68EC(u8); +static void DoBalloonSoundEffect(s16); void sub_80C68A4(s16 metatileId, s16 x, s16 y) { diff --git a/src/field/fldeff_secretpower.c b/src/field/fldeff_secretpower.c index cd9a2ae36..9bcfaa8c4 100644 --- a/src/field/fldeff_secretpower.c +++ b/src/field/fldeff_secretpower.c @@ -17,9 +17,189 @@ extern u8 gUnknown_081A2CE6[]; extern u8 gUnknown_081A2D3E[]; extern u8 gUnknown_081A2D96[]; -extern struct SpriteTemplate gSpriteTemplate_83D2614; -extern struct SpriteTemplate gSpriteTemplate_83D262C; -extern struct SpriteTemplate gSpriteTemplate_83D2644; +const u8 gSpriteImage_83D198C[] = INCBIN_U8("graphics/unknown_sprites/83D259C/0.4bpp"); +const u8 gSpriteImage_83D1A0C[] = INCBIN_U8("graphics/unknown_sprites/83D259C/1.4bpp"); +const u8 gSpriteImage_83D1A8C[] = INCBIN_U8("graphics/unknown_sprites/83D259C/2.4bpp"); +const u8 gSpriteImage_83D1B0C[] = INCBIN_U8("graphics/unknown_sprites/83D259C/3.4bpp"); +const u8 gSpriteImage_83D1B8C[] = INCBIN_U8("graphics/unknown_sprites/83D259C/4.4bpp"); +const u8 gUnusedEmptySpace_83D1C0C[32] = {0}; +const u16 gFieldEffectObjectPalette7[] = INCBIN_U16("graphics/field_effect_objects/palettes/07.gbapal"); +const u8 gSpriteImage_83D1C4C[] = INCBIN_U8("graphics/unknown_sprites/83D25EC/0.4bpp"); +const u8 gSpriteImage_83D1CCC[] = INCBIN_U8("graphics/unknown_sprites/83D25EC/1.4bpp"); +const u8 gSpriteImage_83D1D4C[] = INCBIN_U8("graphics/unknown_sprites/83D25EC/2.4bpp"); +const u8 gSpriteImage_83D1DCC[] = INCBIN_U8("graphics/unknown_sprites/83D25EC/3.4bpp"); +const u8 gSpriteImage_83D1E4C[] = INCBIN_U8("graphics/unknown_sprites/83D25EC/4.4bpp"); +const u8 gSpriteImage_83D1ECC[] = INCBIN_U8("graphics/unknown_sprites/83D25C4/0.4bpp"); +const u8 gSpriteImage_83D1F4C[] = INCBIN_U8("graphics/unknown_sprites/83D25C4/1.4bpp"); +const u8 gSpriteImage_83D1FCC[] = INCBIN_U8("graphics/unknown_sprites/83D25C4/2.4bpp"); +const u8 gSpriteImage_83D204C[] = INCBIN_U8("graphics/unknown_sprites/83D25C4/3.4bpp"); +const u8 gSpriteImage_83D20CC[] = INCBIN_U8("graphics/unknown_sprites/83D25C4/4.4bpp"); +const u8 gSpriteImage_83D214C[] = INCBIN_U8("graphics/unknown_sprites/83D25C4/5.4bpp"); // unused +const u16 gFieldEffectObjectPalette8[] = INCBIN_U16("graphics/field_effect_objects/palettes/08.gbapal"); +const u8 gSpriteImage_83D21EC[] = INCBIN_U8("graphics/unknown_sprites/83D2688/0.4bpp"); +const u8 gSpriteImage_83D22EC[] = INCBIN_U8("graphics/unknown_sprites/83D2688/1.4bpp"); +const u8 gSpriteImage_83D23EC[] = INCBIN_U8("graphics/unknown_sprites/83D2688/2.4bpp"); + +const struct OamData gOamData_83D24EC = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +const union AnimCmd gSpriteAnim_83D24F4[] = +{ + ANIMCMD_FRAME(0, 8), + ANIMCMD_FRAME(1, 8), + ANIMCMD_FRAME(2, 8), + ANIMCMD_FRAME(3, 8), + ANIMCMD_FRAME(4, 8), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83D250C[] = +{ + ANIMCMD_FRAME(0, 8), + ANIMCMD_FRAME(1, 8), + ANIMCMD_FRAME(2, 8), + ANIMCMD_FRAME(3, 8), + ANIMCMD_FRAME(4, 8), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83D2524[] = +{ + ANIMCMD_FRAME(4, 8), + ANIMCMD_FRAME(3, 8), + ANIMCMD_FRAME(2, 8), + ANIMCMD_FRAME(1, 8), + ANIMCMD_FRAME(0, 8), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83D253C[] = +{ + ANIMCMD_FRAME(0, 8, .hFlip = TRUE), + ANIMCMD_FRAME(1, 8, .hFlip = TRUE), + ANIMCMD_FRAME(2, 8, .hFlip = TRUE), + ANIMCMD_FRAME(3, 8, .hFlip = TRUE), + ANIMCMD_FRAME(4, 8, .hFlip = TRUE), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83D2554[] = +{ + ANIMCMD_FRAME(4, 8, .hFlip = TRUE), + ANIMCMD_FRAME(3, 8, .hFlip = TRUE), + ANIMCMD_FRAME(2, 8, .hFlip = TRUE), + ANIMCMD_FRAME(1, 8, .hFlip = TRUE), + ANIMCMD_FRAME(0, 8, .hFlip = TRUE), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83D256C[] = +{ + ANIMCMD_FRAME(0, 8), + ANIMCMD_FRAME(1, 8), + ANIMCMD_FRAME(2, 8), + ANIMCMD_FRAME(3, 8), + ANIMCMD_FRAME(4, 8), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_83D2584[] = +{ + gSpriteAnim_83D24F4, +}; + +const union AnimCmd *const gSpriteAnimTable_83D2588[] = +{ + gSpriteAnim_83D250C, + gSpriteAnim_83D2524, + gSpriteAnim_83D253C, + gSpriteAnim_83D2554, +}; + +const union AnimCmd *const gSpriteAnimTable_83D2598[] = +{ + gSpriteAnim_83D256C, +}; + +const struct SpriteFrameImage gSpriteImageTable_83D259C[] = +{ + {gSpriteImage_83D198C, 0x80}, + {gSpriteImage_83D1A0C, 0x80}, + {gSpriteImage_83D1A8C, 0x80}, + {gSpriteImage_83D1B0C, 0x80}, + {gSpriteImage_83D1B8C, 0x80}, +}; + +const struct SpriteFrameImage gSpriteImageTable_83D25C4[] = +{ + {gSpriteImage_83D1ECC, 0x80}, + {gSpriteImage_83D1F4C, 0x80}, + {gSpriteImage_83D1FCC, 0x80}, + {gSpriteImage_83D204C, 0x80}, + {gSpriteImage_83D20CC, 0x80}, +}; + +const struct SpriteFrameImage gSpriteImageTable_83D25EC[] = +{ + {gSpriteImage_83D1C4C, 0x80}, + {gSpriteImage_83D1CCC, 0x80}, + {gSpriteImage_83D1D4C, 0x80}, + {gSpriteImage_83D1DCC, 0x80}, + {gSpriteImage_83D1E4C, 0x80}, +}; + +void sub_80C644C(struct Sprite *); +const struct SpriteTemplate gSpriteTemplate_83D2614 = +{ + .tileTag = 0xFFFF, + .paletteTag = 4099, + .oam = &gOamData_83D24EC, + .anims = gSpriteAnimTable_83D2584, + .images = gSpriteImageTable_83D259C, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80C644C, +}; + +void sub_80C6598(struct Sprite *); +const struct SpriteTemplate gSpriteTemplate_83D262C = +{ + .tileTag = 0xFFFF, + .paletteTag = 4104, + .oam = &gOamData_83D24EC, + .anims = gSpriteAnimTable_83D2588, + .images = gSpriteImageTable_83D25C4, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80C6598, +}; + +void sub_80C66BC(struct Sprite *); +const struct SpriteTemplate gSpriteTemplate_83D2644 = +{ + .tileTag = 0xFFFF, + .paletteTag = 4104, + .oam = &gOamData_83D24EC, + .anims = gSpriteAnimTable_83D2598, + .images = gSpriteImageTable_83D25EC, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80C66BC, +}; + +const struct SpritePalette gFieldEffectObjectPaletteInfo7 = {gFieldEffectObjectPalette7, 0x1003}; +const struct SpritePalette gFieldEffectObjectPaletteInfo8 = {gFieldEffectObjectPalette8, 0x1008}; void sub_80C639C(void); void sub_80C63E8(void); -- cgit v1.2.3 From 121cb02ff64bd8b8bd637d415e30d8782abb1717 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Tue, 28 Nov 2017 00:24:54 -0600 Subject: convert mail data to C --- src/pokemon/mail.c | 182 ++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 173 insertions(+), 9 deletions(-) (limited to 'src') diff --git a/src/pokemon/mail.c b/src/pokemon/mail.c index b876c887d..2ab05ca2b 100644 --- a/src/pokemon/mail.c +++ b/src/pokemon/mail.c @@ -2,6 +2,7 @@ #include "mail.h" #include "easy_chat.h" #include "constants/items.h" +#include "graphics.h" #include "mail_data.h" #include "menu.h" #include "menu_helpers.h" @@ -31,7 +32,7 @@ struct MailLayout u8 var2; u8 var3_0:4; u8 var3_4:4; - struct UnkMailStruct *var4; + const struct UnkMailStruct *var4; }; struct Unk2000000 @@ -53,25 +54,188 @@ struct Unk2000000 u8 pad101[3]; /*0x104*/ MainCallback var104; /*0x108*/ MainCallback var108; - /*0x10C*/ struct MailLayout *var10C; + /*0x10C*/ const struct MailLayout *var10C; }; struct MailGraphics { - u16 (*palette)[]; - u8 (*tiles)[]; - u8 (*tileMap)[]; + const u16 *palette; + const u8 *tiles; + const u8 *tileMap; u16 var0C; u16 var0E; u16 color10; u16 color12; }; -extern struct MailGraphics gMailGraphicsTable[]; -extern u16 gUnknown_083E562C[][2]; +const u16 gUnknown_083E562C[][2] = +{ + {0x6ACD, 0x51A5}, + {0x45FC, 0x38D4}, +}; + +const struct MailGraphics gMailGraphicsTable[] = +{ + { + .palette = gMailPalette_Orange, + .tiles = gMailTiles_Orange, + .tileMap = gMailTilemap_Orange, + .var0C = 0x2C0, + .var0E = 0, + .color10 = 0x294A, + .color12 = 0x6739, + }, + { + .palette = gMailPalette_Harbor, + .tiles = gMailTiles_Harbor, + .tileMap = gMailTilemap_Harbor, + .var0C = 0x2E0, + .var0E = 0, + .color10 = 0x7FFF, + .color12 = 0x4631, + }, + { + .palette = gMailPalette_Glitter, + .tiles = gMailTiles_Glitter, + .tileMap = gMailTilemap_Glitter, + .var0C = 0x400, + .var0E = 0, + .color10 = 0x294A, + .color12 = 0x6739, + }, + { + .palette = gMailPalette_Mech, + .tiles = gMailTiles_Mech, + .tileMap = gMailTilemap_Mech, + .var0C = 0x1E0, + .var0E = 0, + .color10 = 0x7FFF, + .color12 = 0x4631, + }, + { + .palette = gMailPalette_Wood, + .tiles = gMailTiles_Wood, + .tileMap = gMailTilemap_Wood, + .var0C = 0x2E0, + .var0E = 0, + .color10 = 0x7FFF, + .color12 = 0x4631, + }, + { + .palette = gMailPalette_Wave, + .tiles = gMailTiles_Wave, + .tileMap = gMailTilemap_Wave, + .var0C = 0x300, + .var0E = 0, + .color10 = 0x294A, + .color12 = 0x6739, + }, + { + .palette = gMailPalette_Bead, + .tiles = gMailTiles_Bead, + .tileMap = gMailTilemap_Bead, + .var0C = 0x140, + .var0E = 0, + .color10 = 0x7FFF, + .color12 = 0x4631, + }, + { + .palette = gMailPalette_Shadow, + .tiles = gMailTiles_Shadow, + .tileMap = gMailTilemap_Shadow, + .var0C = 0x300, + .var0E = 0, + .color10 = 0x7FFF, + .color12 = 0x4631, + }, + { + .palette = gMailPalette_Tropic, + .tiles = gMailTiles_Tropic, + .tileMap = gMailTilemap_Tropic, + .var0C = 0x220, + .var0E = 0, + .color10 = 0x294A, + .color12 = 0x6739, + }, + { + .palette = gMailPalette_Dream, + .tiles = gMailTiles_Dream, + .tileMap = gMailTilemap_Dream, + .var0C = 0x340, + .var0E = 0, + .color10 = 0x294A, + .color12 = 0x6739, + }, + { + .palette = gMailPalette_Fab, + .tiles = gMailTiles_Fab, + .tileMap = gMailTilemap_Fab, + .var0C = 0x2A0, + .var0E = 0, + .color10 = 0x294A, + .color12 = 0x6739, + }, + { + .palette = gMailPalette_Retro, + .tiles = gMailTiles_Retro, + .tileMap = gMailTilemap_Retro, + .var0C = 0x520, + .var0E = 0, + .color10 = 0x294A, + .color12 = 0x6739, + }, +}; + +const struct UnkMailStruct Unknown_3E5724[] = +{ + {0, 3, 0}, + {0, 3, 0}, + {0, 3, 0}, +}; + +const struct MailLayout gUnknown_083E5730[] = +{ + {3, 15, 27, 4, 3, Unknown_3E5724}, + {3, 15, 27, 4, 3, Unknown_3E5724}, + {3, 15, 27, 4, 3, Unknown_3E5724}, + {3, 15, 27, 4, 3, Unknown_3E5724}, + {3, 15, 27, 4, 3, Unknown_3E5724}, + {3, 15, 27, 4, 3, Unknown_3E5724}, + {3, 15, 27, 4, 3, Unknown_3E5724}, + {3, 15, 27, 4, 3, Unknown_3E5724}, + {3, 15, 27, 4, 3, Unknown_3E5724}, + {3, 15, 27, 4, 3, Unknown_3E5724}, + {3, 16, 27, 4, 3, Unknown_3E5724}, + {3, 15, 27, 4, 3, Unknown_3E5724}, +}; + +const struct UnkMailStruct Unknown_3E5790[] = +{ + {0, 2, 0}, + {0, 2, 0}, + {0, 2, 0}, + {0, 2, 0}, + {0, 1, 0}, +}; + +const struct MailLayout gUnknown_083E57A4[] = +{ + {5, 15, 15, 4, 3, Unknown_3E5790}, + {5, 15, 15, 4, 3, Unknown_3E5790}, + {5, 15, 16, 4, 3, Unknown_3E5790}, + {5, 15, 15, 4, 3, Unknown_3E5790}, + {5, 15, 15, 4, 3, Unknown_3E5790}, + {5, 15, 16, 4, 3, Unknown_3E5790}, + {5, 15, 16, 4, 3, Unknown_3E5790}, + {5, 15, 15, 4, 3, Unknown_3E5790}, + {5, 15, 15, 4, 3, Unknown_3E5790}, + {5, 15, 15, 4, 3, Unknown_3E5790}, + {5, 16, 15, 4, 3, Unknown_3E5790}, + {5, 15, 15, 4, 3, Unknown_3E5790}, +}; -extern struct MailLayout gUnknown_083E5730[]; -extern struct MailLayout gUnknown_083E57A4[]; +// XXX: what is this? +static u8 *const sSharedMemPtr = gSharedMem; static u8 sub_80F8A28(void); static void sub_80F8D50(void); -- cgit v1.2.3 From c8c4b27d70fd1bf01a048636873465753cc34e0d Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Tue, 28 Nov 2017 00:42:11 -0600 Subject: mon_markings data --- src/pokemon/mon_markings.c | 271 +++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 262 insertions(+), 9 deletions(-) (limited to 'src') diff --git a/src/pokemon/mon_markings.c b/src/pokemon/mon_markings.c index 18bbef89b..b4144ea34 100644 --- a/src/pokemon/mon_markings.c +++ b/src/pokemon/mon_markings.c @@ -34,14 +34,267 @@ struct PokemonMarkMenu extern u8 gPokenavConditionMenuMisc_Gfx[]; extern u16 gUnknown_08E966B8[]; -extern u16 gUnknown_083E49F4[]; -extern u8 gUnknown_083E4A14[]; -extern struct OamData gOamData_83E5214; -extern struct OamData gOamData_83E521C; -extern const union AnimCmd *const gSpriteAnimTable_83E5274[]; -extern const union AnimCmd *const gSpriteAnimTable_83E52AC[]; -extern struct OamData gOamData_83E52B4; -extern const union AnimCmd *const gSpriteAnimTable_83E533C[]; +const u16 gUnknown_083E49F4[] = INCBIN_U16("graphics/misc/mon_markings.gbapal"); +const u8 gUnknown_083E4A14[] = INCBIN_U8("graphics/misc/mon_markings.4bpp"); + +const struct OamData gOamData_83E5214 = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + .affineParam = 0, +}; + +const struct OamData gOamData_83E521C = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + .affineParam = 0, +}; + +const union AnimCmd gSpriteAnim_83E5224[] = +{ + ANIMCMD_FRAME(0, 5), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83E522C[] = +{ + ANIMCMD_FRAME(1, 5), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83E5234[] = +{ + ANIMCMD_FRAME(2, 5), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83E523C[] = +{ + ANIMCMD_FRAME(3, 5), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83E5244[] = +{ + ANIMCMD_FRAME(4, 5), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83E524C[] = +{ + ANIMCMD_FRAME(5, 5), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83E5254[] = +{ + ANIMCMD_FRAME(6, 5), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83E525C[] = +{ + ANIMCMD_FRAME(7, 5), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83E5264[] = +{ + ANIMCMD_FRAME(8, 5), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83E526C[] = +{ + ANIMCMD_FRAME(9, 5), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_83E5274[] = +{ + gSpriteAnim_83E5224, + gSpriteAnim_83E522C, + gSpriteAnim_83E5234, + gSpriteAnim_83E523C, + gSpriteAnim_83E5244, + gSpriteAnim_83E524C, + gSpriteAnim_83E5254, + gSpriteAnim_83E525C, + gSpriteAnim_83E5264, + gSpriteAnim_83E526C, +}; + +const union AnimCmd gSpriteAnim_83E529C[] = +{ + ANIMCMD_FRAME(0, 5), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83E52A4[] = +{ + ANIMCMD_FRAME(64, 5), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_83E52AC[] = +{ + gSpriteAnim_83E529C, + gSpriteAnim_83E52A4, +}; + +const struct OamData gOamData_83E52B4 = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + .affineParam = 0, +}; + +const union AnimCmd gSpriteAnim_83E52BC[] = +{ + ANIMCMD_FRAME(0, 5), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83E52C4[] = +{ + ANIMCMD_FRAME(4, 5), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83E52CC[] = +{ + ANIMCMD_FRAME(8, 5), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83E52D4[] = +{ + ANIMCMD_FRAME(12, 5), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83E52DC[] = +{ + ANIMCMD_FRAME(16, 5), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83E52E4[] = +{ + ANIMCMD_FRAME(20, 5), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83E52EC[] = +{ + ANIMCMD_FRAME(24, 5), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83E52F4[] = +{ + ANIMCMD_FRAME(28, 5), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83E52FC[] = +{ + ANIMCMD_FRAME(32, 5), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83E5304[] = +{ + ANIMCMD_FRAME(36, 5), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83E530C[] = +{ + ANIMCMD_FRAME(40, 5), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83E5314[] = +{ + ANIMCMD_FRAME(44, 5), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83E531C[] = +{ + ANIMCMD_FRAME(48, 5), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83E5324[] = +{ + ANIMCMD_FRAME(52, 5), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83E532C[] = +{ + ANIMCMD_FRAME(56, 5), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83E5334[] = +{ + ANIMCMD_FRAME(60, 5), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_83E533C[] = +{ + gSpriteAnim_83E52BC, + gSpriteAnim_83E52C4, + gSpriteAnim_83E52CC, + gSpriteAnim_83E52D4, + gSpriteAnim_83E52DC, + gSpriteAnim_83E52E4, + gSpriteAnim_83E52EC, + gSpriteAnim_83E52F4, + gSpriteAnim_83E52FC, + gSpriteAnim_83E5304, + gSpriteAnim_83E530C, + gSpriteAnim_83E5314, + gSpriteAnim_83E531C, + gSpriteAnim_83E5324, + gSpriteAnim_83E532C, + gSpriteAnim_83E5334, +}; static EWRAM_DATA struct PokemonMarkMenu *sMenu = NULL; @@ -378,6 +631,6 @@ struct Sprite *sub_80F7960(u16 tileTag, u16 paletteTag, const u16 *palette, u16 void sub_80F7A10(u8 markings, void *dest) { - void *src = gUnknown_083E4A14 + markings * 0x80; + const void *src = gUnknown_083E4A14 + markings * 0x80; DmaCopy16(3, src, dest, 0x80); } -- cgit v1.2.3 From 7d353cd17aa70626a792fdd451046f9603ffabc3 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Mon, 11 Dec 2017 21:22:00 -0600 Subject: decompile aurora --- src/battle/anim/aurora.c | 72 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 src/battle/anim/aurora.c (limited to 'src') diff --git a/src/battle/anim/aurora.c b/src/battle/anim/aurora.c new file mode 100644 index 000000000..1ca5e649f --- /dev/null +++ b/src/battle/anim/aurora.c @@ -0,0 +1,72 @@ +#include "global.h" +#include "battle_anim.h" +#include "palette.h" +#include "rom_8077ABC.h" +#include "sprite.h" +#include "task.h" + +extern s16 gBattleAnimArgs[8]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +static void sub_80D344C(struct Sprite *); +static void sub_80D34D4(u8); + +void sub_80D33B4(struct Sprite *sprite) +{ + s16 r6; + + sub_80787B0(sprite, 1); + if (GetBankSide(gBattleAnimBankAttacker) != 0) + r6 = -gBattleAnimArgs[2]; + else + r6 = gBattleAnimArgs[2]; + sprite->data[0] = gBattleAnimArgs[4]; + sprite->data[1] = sprite->pos1.x; + sprite->data[2] = sub_8077ABC(gBattleAnimBankTarget, 2) + r6; + sprite->data[3] = sprite->pos1.y; + sprite->data[4] = sub_8077ABC(gBattleAnimBankTarget, 3) + gBattleAnimArgs[3]; + obj_translate_based_on_private_1_2_3_4(sprite); + sprite->callback = sub_80D344C; + sprite->affineAnimPaused = TRUE; + sprite->callback(sprite); +} + +static void sub_80D344C(struct Sprite *sprite) +{ + if ((u16)gBattleAnimArgs[7] == 0xFFFF) + { + StartSpriteAnim(sprite, 1); + sprite->affineAnimPaused = FALSE; + } + if (sub_8078B5C(sprite) != 0) + move_anim_8072740(sprite); +} + +void sub_80D3490(u8 taskId) +{ + gTasks[taskId].data[0] = gBattleAnimArgs[0]; + gTasks[taskId].data[2] = 0x100 + IndexOfSpritePaletteTag(0x279C) * 16; + gTasks[taskId].func = sub_80D34D4; +} + +static void sub_80D34D4(u8 taskId) +{ + gTasks[taskId].data[10]++; + if (gTasks[taskId].data[10] == 3) + { + u16 r5; + u16 r6; + s32 i; + + gTasks[taskId].data[10] = 0; + r5 = gTasks[taskId].data[2] + 1; + r6 = gPlttBufferFaded[r5]; + for (i = 1; i < 8; i++) + gPlttBufferFaded[r5 + i - 1] = gPlttBufferFaded[r5 + i]; + gPlttBufferFaded[r5 + 7] = r6; + } + gTasks[taskId].data[11]++; + if (gTasks[taskId].data[11] == gTasks[taskId].data[0]) + DestroyAnimVisualTask(taskId); +} -- cgit v1.2.3 From 7c939bcdb9b9eeac3e544250185e44904d70bbb8 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Mon, 11 Dec 2017 22:06:35 -0600 Subject: decompile devil --- src/battle/anim/devil.c | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 src/battle/anim/devil.c (limited to 'src') diff --git a/src/battle/anim/devil.c b/src/battle/anim/devil.c new file mode 100644 index 000000000..345ee53ea --- /dev/null +++ b/src/battle/anim/devil.c @@ -0,0 +1,37 @@ +#include "global.h" +#include "battle_anim.h" +#include "rom_8077ABC.h" +#include "sprite.h" +#include "trig.h" + +extern s16 gBattleAnimArgs[8]; +extern u8 gBattleAnimBankTarget; + +void sub_80D2ABC(struct Sprite *sprite) +{ + if (sprite->data[3] == 0) + { + sprite->pos1.x += gBattleAnimArgs[0]; + sprite->pos1.y += gBattleAnimArgs[1]; + StartSpriteAnim(sprite, 0); + sprite->subpriority = sub_8079E90(gBattleAnimBankTarget) - 1; + sprite->data[2] = 1; + } + sprite->data[0] += sprite->data[2]; + sprite->data[1] = (sprite->data[0] * 4) % 256; + if (sprite->data[1] < 0) + sprite->data[1] = 0; + sprite->pos2.x = Cos(sprite->data[1], 30 - sprite->data[0] / 4); + sprite->pos2.y = Sin(sprite->data[1], 10 - sprite->data[0] / 8); + if (sprite->data[1] > 128 && sprite->data[2] > 0) + sprite->data[2] = -1; + if (sprite->data[1] == 0 && sprite->data[2] < 0) + sprite->data[2] = 1; + sprite->data[3]++; + if (sprite->data[3] < 10 || sprite->data[3] > 0x50) + sprite->invisible = sprite->data[0] % 2; + else + sprite->invisible = FALSE; + if (sprite->data[3] > 0x5A) + move_anim_8072740(sprite); +} -- cgit v1.2.3 From c5be44afe7173c2a2b7be9b370ca404c8df18b2e Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Mon, 11 Dec 2017 22:53:08 -0600 Subject: decompile struggle, swipe, and uproar --- src/battle/anim/struggle.c | 52 ++++++++++++++++++++++++++++++++++++++++++++++ src/battle/anim/swipe.c | 20 ++++++++++++++++++ src/battle/anim/uproar.c | 25 ++++++++++++++++++++++ src/rom_8077ABC.c | 4 ++-- 4 files changed, 99 insertions(+), 2 deletions(-) create mode 100644 src/battle/anim/struggle.c create mode 100644 src/battle/anim/swipe.c create mode 100644 src/battle/anim/uproar.c (limited to 'src') diff --git a/src/battle/anim/struggle.c b/src/battle/anim/struggle.c new file mode 100644 index 000000000..63a01a79e --- /dev/null +++ b/src/battle/anim/struggle.c @@ -0,0 +1,52 @@ +#include "global.h" +#include "battle_anim.h" +#include "rom_8077ABC.h" +#include "sprite.h" + +extern s16 gBattleAnimArgs[8]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +static void sub_80D2CC4(struct Sprite *); + +void sub_80D2C38(struct Sprite *sprite) +{ + if (gBattleAnimArgs[2] == 0) + { + move_anim_8072740(sprite); + } + else + { + if (gBattleAnimArgs[0] == 0) + { + sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 2); + sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 3); + } + else + { + sprite->pos1.x = sub_8077ABC(gBattleAnimBankTarget, 2); + sprite->pos1.y = sub_8077ABC(gBattleAnimBankTarget, 3); + } + + if (gBattleAnimArgs[1] == 0) + sprite->pos1.x += 32; + else + sprite->pos1.x -= 32; + + sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[1] = gBattleAnimArgs[1]; + StartSpriteAnim(sprite, sprite->data[1]); + sprite->callback = sub_80D2CC4; + } +} + +static void sub_80D2CC4(struct Sprite *sprite) +{ + if (sprite->animEnded) + { + if (--sprite->data[0] != 0) + StartSpriteAnim(sprite, sprite->data[1]); + else + move_anim_8072740(sprite); + } +} diff --git a/src/battle/anim/swipe.c b/src/battle/anim/swipe.c new file mode 100644 index 000000000..15bee06ee --- /dev/null +++ b/src/battle/anim/swipe.c @@ -0,0 +1,20 @@ +#include "global.h" +#include "battle_anim.h" +#include "sprite.h" + +extern s16 gBattleAnimArgs[8]; + +void sub_80D2BE8(struct Sprite *sprite) +{ + if (sprite->data[0] == 0) + { + sprite->pos1.x += gBattleAnimArgs[0]; + sprite->pos1.y += gBattleAnimArgs[1]; + StartSpriteAnim(sprite, gBattleAnimArgs[2]); + sprite->data[0]++; + } + else if (sprite->animEnded) + { + move_anim_8072740(sprite); + } +} diff --git a/src/battle/anim/uproar.c b/src/battle/anim/uproar.c new file mode 100644 index 000000000..03cc65bc0 --- /dev/null +++ b/src/battle/anim/uproar.c @@ -0,0 +1,25 @@ +#include "global.h" +#include "battle_anim.h" +#include "rom_8077ABC.h" +#include "sprite.h" +#include "task.h" + +extern s16 gBattleAnimArgs[8]; + +extern const union AffineAnimCmd gUnknown_083D7CA8[]; + +void sub_80D2D3C(u8); + +void sub_80D2CF8(u8 taskId) +{ + u8 spriteId = GetAnimBankSpriteId(gBattleAnimArgs[0]); + + sub_80798F4(&gTasks[taskId], spriteId, gUnknown_083D7CA8); + gTasks[taskId].func = sub_80D2D3C; +} + +void sub_80D2D3C(u8 taskId) +{ + if (!sub_807992C(&gTasks[taskId])) + DestroyAnimVisualTask(taskId); +} diff --git a/src/rom_8077ABC.c b/src/rom_8077ABC.c index 42f360b69..8fea7f710 100644 --- a/src/rom_8077ABC.c +++ b/src/rom_8077ABC.c @@ -1435,7 +1435,7 @@ void sub_80798AC(u8 task) { sub_80797EC(&gTasks[task]); } -void sub_80798F4(struct Task *task, u8 a2, void *a3) { +void sub_80798F4(struct Task *task, u8 a2, const void *a3) { task->data[7] = 0; task->data[8] = 0; task->data[9] = 0; @@ -1564,7 +1564,7 @@ u16 sub_8079B10(u8 sprite) { return 0x40; } -void sub_8079BF4(s16 *bottom, s16 *top, void *ptr) { +void sub_8079BF4(s16 *bottom, s16 *top, const void *ptr) { *bottom = ((intptr_t) ptr) & 0xffff; *top = (((intptr_t) ptr) >> 16) & 0xffff; } -- cgit v1.2.3 From b14cdde8bd4afda2b0b73bb72b3cffc6961a5790 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Fri, 15 Dec 2017 14:59:25 -0800 Subject: Label landmark and daily flags. --- src/engine/clock.c | 2 +- src/field/decoration.c | 6 +++--- src/field/event_data.c | 6 +++--- src/field/field_specials.c | 8 ++++---- src/field/landmark.c | 46 +++++++++++++++++++++++----------------------- src/field/region_map.c | 6 +++--- src/field/secret_base.c | 8 ++++---- src/field/tv.c | 2 +- 8 files changed, 42 insertions(+), 42 deletions(-) (limited to 'src') diff --git a/src/engine/clock.c b/src/engine/clock.c index cb8af64a8..8f123c29c 100644 --- a/src/engine/clock.c +++ b/src/engine/clock.c @@ -45,7 +45,7 @@ static void UpdatePerDay(struct Time *time) if (days != time->days && days <= time->days) { newDays = time->days - days; - ClearUpperFlags(); + ClearDailyFlags(); UpdateDewfordTrendPerDay(newDays); UpdateTVShowsPerDay(newDays); UpdateWeatherPerDay(newDays); diff --git a/src/field/decoration.c b/src/field/decoration.c index c7647f98d..c36c10a08 100644 --- a/src/field/decoration.c +++ b/src/field/decoration.c @@ -2322,12 +2322,12 @@ void sub_80FF474(void) u8 j; for (i=0; i<14; i++) { - if (FlagGet(i + 0xae) == 1) + if (FlagGet(i + FLAG_DECORATION_2) == 1) { - FlagClear(i + 0xae); + FlagClear(i + FLAG_DECORATION_2); for (j=0; jmapObjectCount; j++) { - if (gMapHeader.events->mapObjects[j].flagId == i + 0xae) + if (gMapHeader.events->mapObjects[j].flagId == i + FLAG_DECORATION_2) { break; } diff --git a/src/field/event_data.c b/src/field/event_data.c index 43d49c417..5c8b7d7e5 100644 --- a/src/field/event_data.c +++ b/src/field/event_data.c @@ -3,7 +3,7 @@ #include "pokedex.h" #define TEMP_FLAGS_SIZE 0x4 -#define TEMP_UPPER_FLAGS_SIZE 0x8 +#define DAILY_FLAGS_SIZE 0x8 #define TEMP_VARS_SIZE 0x20 EWRAM_DATA u16 gSpecialVar_0x8000 = 0; @@ -43,9 +43,9 @@ void ClearTempFieldEventData(void) } // probably had different flag splits at one point. -void ClearUpperFlags(void) +void ClearDailyFlags(void) { - memset(gSaveBlock1.flags + 0x118, 0, TEMP_UPPER_FLAGS_SIZE); + memset(gSaveBlock1.flags + (DAILY_FLAGS_START / 8), 0, DAILY_FLAGS_SIZE); } void DisableNationalPokedex(void) diff --git a/src/field/field_specials.c b/src/field/field_specials.c index d654d10f5..9a286dd6e 100644 --- a/src/field/field_specials.c +++ b/src/field/field_specials.c @@ -1881,14 +1881,14 @@ bool8 ScrSpecial_AreLeadMonEVsMaxedOut(void) u8 sub_810F5BC(void) { - if (!FlagGet(0xc7) && gSaveBlock1.location.mapGroup == MAP_GROUP(RUSTURF_TUNNEL) && gSaveBlock1.location.mapNum == MAP_NUM(RUSTURF_TUNNEL)) + if (!FlagGet(FLAG_RUSTURF_TUNNEL_OPENED) && gSaveBlock1.location.mapGroup == MAP_GROUP(RUSTURF_TUNNEL) && gSaveBlock1.location.mapNum == MAP_NUM(RUSTURF_TUNNEL)) { - if (FlagGet(0x3a3)) + if (FlagGet(FLAG_HIDE_RUSTURF_TUNNEL_ROCK_1)) { VarSet(VAR_0x409a, 4); return TRUE; } - else if (FlagGet(0x3a4)) + else if (FlagGet(FLAG_HIDE_RUSTURF_TUNNEL_ROCK_2)) { VarSet(VAR_0x409a, 5); return TRUE; @@ -2002,7 +2002,7 @@ static void sub_810F814(u8 taskId) bool8 sub_810F828(void) { - return FlagGet(0x2b8); + return FlagGet(FLAG_UNKNOWN_2B8); } void SetRoute119Weather(void) diff --git a/src/field/landmark.c b/src/field/landmark.c index 1b7805e96..476821ec6 100644 --- a/src/field/landmark.c +++ b/src/field/landmark.c @@ -54,43 +54,43 @@ extern const u8 gLandmarkName_FossilManiacsHouse[]; extern const u8 gLandmarkName_HuntersHouse[]; extern const u8 gLandmarkName_SkyPillar[]; -static const struct Landmark Landmark_FlowerShop = {gLandmarkName_FlowerShop, 2108}; +static const struct Landmark Landmark_FlowerShop = {gLandmarkName_FlowerShop, FLAG_LANDMARK_FLOWER_SHOP}; static const struct Landmark Landmark_PetalburgWoods = {gLandmarkName_PetalburgWoods, -1}; -static const struct Landmark Landmark_MrBrineysCottage = {gLandmarkName_MrBrineysCottage, 2109}; -static const struct Landmark Landmark_AbandonedShip = {gLandmarkName_AbandonedShip, 2110}; -static const struct Landmark Landmark_SeashoreHouse = {gLandmarkName_SeashoreHouse, 2111}; +static const struct Landmark Landmark_MrBrineysCottage = {gLandmarkName_MrBrineysCottage, FLAG_LANDMARK_MR_BRINEY_HOUSE}; +static const struct Landmark Landmark_AbandonedShip = {gLandmarkName_AbandonedShip, FLAG_LANDMARK_ABANDONED_SHIP}; +static const struct Landmark Landmark_SeashoreHouse = {gLandmarkName_SeashoreHouse, FLAG_LANDMARK_SEASHORE_HOUSE}; static const struct Landmark Landmark_SlateportBeach = {gLandmarkName_SlateportBeach, -1}; static const struct Landmark Landmark_CyclingRoad = {gLandmarkName_CyclingRoad, -1}; -static const struct Landmark Landmark_NewMauville = {gLandmarkName_NewMauville, 2112}; -static const struct Landmark Landmark_TrickHouse = {gLandmarkName_TrickHouse, 2114}; -static const struct Landmark Landmark_OldLadysRestShop = {gLandmarkName_OldLadysRestShop, 2113}; +static const struct Landmark Landmark_NewMauville = {gLandmarkName_NewMauville, FLAG_LANDMARK_NEW_MAUVILLE}; +static const struct Landmark Landmark_TrickHouse = {gLandmarkName_TrickHouse, FLAG_LANDMARK_TRICK_HOUSE}; +static const struct Landmark Landmark_OldLadysRestShop = {gLandmarkName_OldLadysRestShop, FLAG_LANDMARK_OLD_LADY_REST_SHOP}; static const struct Landmark Landmark_Desert = {gLandmarkName_Desert, -1}; -static const struct Landmark Landmark_WinstrateFamily = {gLandmarkName_WinstrateFamily, 2115}; +static const struct Landmark Landmark_WinstrateFamily = {gLandmarkName_WinstrateFamily, FLAG_LANDMARK_WINSTRATE_FAMILY}; static const struct Landmark Landmark_CableCar = {gLandmarkName_CableCar, -1}; -static const struct Landmark Landmark_GlassWorkshop = {gLandmarkName_GlassWorkshop, 2116}; +static const struct Landmark Landmark_GlassWorkshop = {gLandmarkName_GlassWorkshop, FLAG_LANDMARK_GLASS_WORKSHOP}; static const struct Landmark Landmark_WeatherInstitute = {gLandmarkName_WeatherInstitute, -1}; static const struct Landmark Landmark_MeteorFalls = {gLandmarkName_MeteorFalls, -1}; -static const struct Landmark Landmark_TunnelersRestHouse = {gLandmarkName_TunnelersRestHouse, 2138}; +static const struct Landmark Landmark_TunnelersRestHouse = {gLandmarkName_TunnelersRestHouse, FLAG_LANDMARK_TUNNELERS_REST_HOUSE}; static const struct Landmark Landmark_RusturfTunnel = {gLandmarkName_RusturfTunnel, -1}; -static const struct Landmark Landmark_PokemonDayCare = {gLandmarkName_PokemonDayCare, 2118}; +static const struct Landmark Landmark_PokemonDayCare = {gLandmarkName_PokemonDayCare, FLAG_LANDMARK_POKEMON_DAYCARE}; static const struct Landmark Landmark_SafariZoneEntrance = {gLandmarkName_SafariZoneEntrance, -1}; static const struct Landmark Landmark_MtPyre = {gLandmarkName_MtPyre, -1}; static const struct Landmark Landmark_ShoalCave = {gLandmarkName_ShoalCave, -1}; -static const struct Landmark Landmark_SeafloorCavern = {gLandmarkName_SeafloorCavern, 2119}; +static const struct Landmark Landmark_SeafloorCavern = {gLandmarkName_SeafloorCavern, FLAG_LANDMARK_SEAFLOOR_CAVERN}; static const struct Landmark Landmark_GraniteCave = {gLandmarkName_GraniteCave, -1}; static const struct Landmark Landmark_OceanCurrent = {gLandmarkName_OceanCurrent, -1}; -static const struct Landmark Landmark_LanettesHouse = {gLandmarkName_LanettesHouse, 2117}; -static const struct Landmark Landmark_FieryPath = {gLandmarkName_FieryPath, 2122}; +static const struct Landmark Landmark_LanettesHouse = {gLandmarkName_LanettesHouse, FLAG_LANDMARK_LANETTES_HOUSE}; +static const struct Landmark Landmark_FieryPath = {gLandmarkName_FieryPath, FLAG_LANDMARK_FIERY_PATH}; static const struct Landmark Landmark_JaggedPass = {gLandmarkName_JaggedPass, -1}; -static const struct Landmark Landmark_BerryMastersHouse = {gLandmarkName_BerryMastersHouse, 2147}; -static const struct Landmark Landmark_IslandCave = {gLandmarkName_IslandCave, 2133}; -static const struct Landmark Landmark_DesertRuins = {gLandmarkName_DesertRuins, 2134}; -static const struct Landmark Landmark_ScorchedSlab = {gLandmarkName_ScorchedSlab, 2136}; -static const struct Landmark Landmark_AncientTomb = {gLandmarkName_AncientTomb, 2137}; -static const struct Landmark Landmark_SealedChamber = {gLandmarkName_SealedChamber, 2140}; -static const struct Landmark Landmark_FossilManiacsHouse = {gLandmarkName_FossilManiacsHouse, 2135}; -static const struct Landmark Landmark_HuntersHouse = {gLandmarkName_HuntersHouse, 2139}; -static const struct Landmark Landmark_SkyPillar = {gLandmarkName_SkyPillar, 2142}; +static const struct Landmark Landmark_BerryMastersHouse = {gLandmarkName_BerryMastersHouse, FLAG_LANDMARK_BERRY_MASTERS_HOUSE}; +static const struct Landmark Landmark_IslandCave = {gLandmarkName_IslandCave, FLAG_LANDMARK_ISLAND_CAVE}; +static const struct Landmark Landmark_DesertRuins = {gLandmarkName_DesertRuins, FLAG_LANDMARK_DESERT_RUINS}; +static const struct Landmark Landmark_ScorchedSlab = {gLandmarkName_ScorchedSlab, FLAG_LANDMARK_SCORCHED_SLAB}; +static const struct Landmark Landmark_AncientTomb = {gLandmarkName_AncientTomb, FLAG_LANDMARK_ANCIENT_TOMB}; +static const struct Landmark Landmark_SealedChamber = {gLandmarkName_SealedChamber, FLAG_LANDMARK_SEALED_CHAMBER}; +static const struct Landmark Landmark_FossilManiacsHouse = {gLandmarkName_FossilManiacsHouse, FLAG_LANDMARK_FOSSIL_MANIACS_HOUSE}; +static const struct Landmark Landmark_HuntersHouse = {gLandmarkName_HuntersHouse, FLAG_LANDMARK_HUNTERS_HOUSE}; +static const struct Landmark Landmark_SkyPillar = {gLandmarkName_SkyPillar, FLAG_LANDMARK_SKY_PILLAR}; static const struct Landmark *const Landmarks_Route104_0[] = { diff --git a/src/field/region_map.c b/src/field/region_map.c index f2e4b3251..12bf1a5f2 100644 --- a/src/field/region_map.c +++ b/src/field/region_map.c @@ -916,9 +916,9 @@ static u16 sub_80FB758(u16 mapSectionId) return FlagGet(FLAG_VISITED_EVER_GRANDE_CITY) ? 2 : 3; case MAPSEC_BATTLE_TOWER: - return FlagGet(FLAG_UNLOCK_BATTLE_TOWER) ? 4 : 0; + return FlagGet(FLAG_LANDMARK_BATTLE_TOWER) ? 4 : 0; case MAPSEC_SOUTHERN_ISLAND: - return FlagGet(FLAG_UNLOCK_SOUTHERN_ISLAND) ? 1 : 0; + return FlagGet(FLAG_LANDMARK_SOUTHERN_ISLAND) ? 1 : 0; default: return 1; } @@ -1822,7 +1822,7 @@ static void sub_80FC69C(void) sub_8053538((gSaveBlock2.playerGender == MALE) ? 12 : 13); break; case MAPSEC_EVER_GRANDE_CITY: - sub_8053538((FlagGet(0x854) && ewram0_3.regionMap.everGrandeCityArea == 0) ? 20 : 11); + sub_8053538((FlagGet(SYS_POKEMON_LEAGUE_FLY) && ewram0_3.regionMap.everGrandeCityArea == 0) ? 20 : 11); break; default: if (sUnknown_083E7920[ewram0_3.regionMap.mapSectionId][2] != 0) diff --git a/src/field/secret_base.c b/src/field/secret_base.c index fee79a18c..bb7716190 100644 --- a/src/field/secret_base.c +++ b/src/field/secret_base.c @@ -877,7 +877,7 @@ void sub_80BC56C(void) void sub_80BC5BC(void) { gSaveBlock1.secretBases[sub_80BC14C(gUnknown_020387DC)].sbr_field_1_6 ^= 1; - FlagSet(0x10C); + FlagSet(FLAG_DECORATION_16); } void SecretBasePC_Decoration(void) @@ -1244,7 +1244,7 @@ void sub_80BCE90() { u16 curBaseIndex = VarGet(VAR_0x4054); - if (!FlagGet(0x8C2)) + if (!FlagGet(FLAG_DAILY_UNKNOWN_8C2)) { u8 i; @@ -1253,7 +1253,7 @@ void sub_80BCE90() gSaveBlock1.secretBases[i].sbr_field_1_5 = 0; } - FlagSet(0x8C2); + FlagSet(FLAG_DAILY_UNKNOWN_8C2); } gSpecialVar_0x8004 = sub_80BCCA4(curBaseIndex); @@ -1650,7 +1650,7 @@ void sub_80BD610(struct SecretBaseRecord *basesA, struct SecretBaseRecord *bases void sub_80BD674(void *playerRecords, u32 size, u8 c) { - if (FlagGet(0x60)) + if (FlagGet(FLAG_RECEIVED_SECRET_POWER)) { u16 i; u8 numLinkedPlayers = GetLinkPlayerCount(); diff --git a/src/field/tv.c b/src/field/tv.c index 71d6455bd..c3141e0b5 100644 --- a/src/field/tv.c +++ b/src/field/tv.c @@ -674,7 +674,7 @@ void GabbyAndTyBeforeInterview(void) TakeTVShowInSearchOfTrainersOffTheAir(); if (gSaveBlock1.gabbyAndTyData.lastMove == 0) - FlagSet(1); + FlagSet(FLAG_TEMP_1); } void sub_80BDC14(void) -- cgit v1.2.3 From 88716f4c0e053a984eeb4bef92fefa42027dd22a Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Sun, 17 Dec 2017 20:07:53 -0800 Subject: Use FLAG_ prefix for all flags --- src/battle/battle_3.c | 8 +++--- src/battle/battle_message.c | 2 +- src/battle/battle_setup.c | 12 +++++++- src/battle/calculate_base_damage.c | 8 +++--- src/battle/post_battle_event_funcs.c | 6 ++-- src/engine/clock.c | 4 +-- src/engine/record_mixing.c | 4 +-- src/engine/save_menu_util.c | 6 ++-- src/engine/time_events.c | 4 +-- src/engine/trade.c | 2 +- src/engine/trainer_card.c | 6 ++-- src/field/braille_puzzles.c | 14 ++++----- src/field/dewford_trend.c | 6 ++-- src/field/event_data.c | 26 ++++++++--------- src/field/field_control_avatar.c | 8 +++--- src/field/field_player_avatar.c | 4 +-- src/field/field_special_scene.c | 2 +- src/field/field_specials.c | 8 +++--- src/field/fldeff_flash.c | 4 +-- src/field/item_use.c | 10 +++---- src/field/overworld.c | 56 ++++++++++++++++++------------------ src/field/party_menu.c | 6 ++-- src/field/region_map.c | 4 +-- src/field/safari_zone.c | 6 ++-- src/field/script_menu.c | 4 +-- src/field/start_menu.c | 8 +++--- src/field/tv.c | 20 ++++++------- src/field/wild_encounter.c | 4 +-- src/pokemon/pokemon_menu.c | 2 +- src/pokemon/pokemon_size_record.c | 2 +- src/pokenav_before.c | 2 +- 31 files changed, 134 insertions(+), 124 deletions(-) (limited to 'src') diff --git a/src/battle/battle_3.c b/src/battle/battle_3.c index 342395c34..f627e50f0 100644 --- a/src/battle/battle_3.c +++ b/src/battle/battle_3.c @@ -3137,15 +3137,15 @@ u8 IsPokeDisobedient(void) if (gBattleTypeFlags & BATTLE_TYPE_LINK || GetBankSide(gBankAttacker) == 1 || !IsOtherTrainer(gBattleMons[gBankAttacker].otId, gBattleMons[gBankAttacker].otName) - || FlagGet(BADGE08_GET)) + || FlagGet(FLAG_BADGE08_GET)) return 0; obedienceLevel = 10; - if (FlagGet(BADGE02_GET)) + if (FlagGet(FLAG_BADGE02_GET)) obedienceLevel = 30; - if (FlagGet(BADGE04_GET)) + if (FlagGet(FLAG_BADGE04_GET)) obedienceLevel = 50; - if (FlagGet(BADGE06_GET)) + if (FlagGet(FLAG_BADGE06_GET)) obedienceLevel = 70; if (gBattleMons[gBankAttacker].level <= obedienceLevel) diff --git a/src/battle/battle_message.c b/src/battle/battle_message.c index fb045c8a7..6faa3ace3 100644 --- a/src/battle/battle_message.c +++ b/src/battle/battle_message.c @@ -762,7 +762,7 @@ u32 StrCpyDecodeBattle(const u8* src, u8* dst) HANDLE_NICKNAME_STRING_CASE(BATTLE_STRUCT->scriptingActive, BATTLE_STRUCT->unk1605E) break; case 35: // lanette pc - if (FlagGet(SYS_PC_LANETTE)) + if (FlagGet(FLAG_SYS_PC_LANETTE)) toCpy = BattleText_Lanette; else toCpy = BattleText_Someone; diff --git a/src/battle/battle_setup.c b/src/battle/battle_setup.c index 9f51c2878..6baf47dee 100644 --- a/src/battle/battle_setup.c +++ b/src/battle/battle_setup.c @@ -441,7 +441,17 @@ const struct TrainerEyeTrainer gTrainerEyeTrainers[] = }, }; -static const u16 sBadgeFlags[] = {BADGE01_GET, BADGE02_GET, BADGE03_GET, BADGE04_GET, BADGE05_GET, BADGE06_GET, BADGE07_GET, BADGE08_GET}; +static const u16 sBadgeFlags[] = +{ + FLAG_BADGE01_GET, + FLAG_BADGE02_GET, + FLAG_BADGE03_GET, + FLAG_BADGE04_GET, + FLAG_BADGE05_GET, + FLAG_BADGE06_GET, + FLAG_BADGE07_GET, + FLAG_BADGE08_GET, +}; static void DoStandardWildBattle(void); static void DoSafariBattle(void); diff --git a/src/battle/calculate_base_damage.c b/src/battle/calculate_base_damage.c index f9ac03075..5c91b3657 100644 --- a/src/battle/calculate_base_damage.c +++ b/src/battle/calculate_base_damage.c @@ -90,7 +90,7 @@ s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *de { if ((gBattleTypeFlags & BATTLE_TYPE_TRAINER) && gTrainerBattleOpponent != 1024 - && FlagGet(BADGE01_GET) + && FlagGet(FLAG_BADGE01_GET) && !GetBankSide(bankAtk)) attack = (110 * attack) / 100; } @@ -98,7 +98,7 @@ s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *de { if ((gBattleTypeFlags & BATTLE_TYPE_TRAINER) && gTrainerBattleOpponent != 1024 - && FlagGet(BADGE05_GET) + && FlagGet(FLAG_BADGE05_GET) && !GetBankSide(bankDef)) defense = (110 * defense) / 100; } @@ -106,7 +106,7 @@ s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *de { if ((gBattleTypeFlags & BATTLE_TYPE_TRAINER) && gTrainerBattleOpponent != 1024 - && FlagGet(BADGE07_GET) + && FlagGet(FLAG_BADGE07_GET) && !GetBankSide(bankAtk)) spAttack = (110 * spAttack) / 100; } @@ -114,7 +114,7 @@ s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *de { if ((gBattleTypeFlags & BATTLE_TYPE_TRAINER) && gTrainerBattleOpponent != 1024 - && FlagGet(BADGE07_GET) + && FlagGet(FLAG_BADGE07_GET) && !GetBankSide(bankDef)) spDefense = (110 * spDefense) / 100; } diff --git a/src/battle/post_battle_event_funcs.c b/src/battle/post_battle_event_funcs.c index 27d7022fe..0617763f6 100644 --- a/src/battle/post_battle_event_funcs.c +++ b/src/battle/post_battle_event_funcs.c @@ -16,14 +16,14 @@ int GameClear(void) ScrSpecial_HealPlayerParty(); - if (FlagGet(SYS_GAME_CLEAR) == TRUE) + if (FlagGet(FLAG_SYS_GAME_CLEAR) == TRUE) { gUnknown_02039324 = 1; } else { gUnknown_02039324 = 0; - FlagSet(SYS_GAME_CLEAR); + FlagSet(FLAG_SYS_GAME_CLEAR); } if (!GetGameStat(1)) @@ -55,7 +55,7 @@ int GameClear(void) if (ribbonGet == TRUE) { IncrementGameStat(42); - FlagSet(SYS_RIBBON_GET); + FlagSet(FLAG_SYS_RIBBON_GET); } SetMainCallback2(sub_8141F90); diff --git a/src/engine/clock.c b/src/engine/clock.c index 8f123c29c..416aaa6bb 100644 --- a/src/engine/clock.c +++ b/src/engine/clock.c @@ -20,7 +20,7 @@ static void ReturnFromStartWallClock(void); static void InitTimeBasedEvents(void) { - FlagSet(SYS_CLOCK_SET); + FlagSet(FLAG_SYS_CLOCK_SET); RtcCalcLocalTime(); gSaveBlock2.lastBerryTreeUpdate = gLocalTime; VarSet(VAR_DAYS, gLocalTime.days); @@ -28,7 +28,7 @@ static void InitTimeBasedEvents(void) void DoTimeBasedEvents(void) { - if (FlagGet(SYS_CLOCK_SET)) + if (FlagGet(FLAG_SYS_CLOCK_SET)) { RtcCalcLocalTime(); UpdatePerDay(&gLocalTime); diff --git a/src/engine/record_mixing.c b/src/engine/record_mixing.c index 2624837c7..6cb1e54b2 100644 --- a/src/engine/record_mixing.c +++ b/src/engine/record_mixing.c @@ -131,7 +131,7 @@ void Task_RecordMixing_Main(u8 taskId) if (!gTasks[data[10]].isActive) { tState = 2; - FlagSet(SYS_MIX_RECORD); + FlagSet(FLAG_SYS_MIX_RECORD); DestroyRecordMixingSprite(); DestroyTask(tSndEffTaskId); } @@ -1019,7 +1019,7 @@ void sub_80B9F3C(u16 *a, u8 b) VarSet(VAR_0x4001, *a); StringCopy(gStringVar1, gLinkPlayers[0].name); if (*a == ITEM_EON_TICKET) - FlagSet(SYS_HAS_EON_TICKET); + FlagSet(FLAG_SYS_HAS_EON_TICKET); } else { diff --git a/src/engine/save_menu_util.c b/src/engine/save_menu_util.c index a2d17bd36..771cb72c7 100644 --- a/src/engine/save_menu_util.c +++ b/src/engine/save_menu_util.c @@ -15,7 +15,7 @@ void HandleDrawSaveWindowInfo(s16 left, s16 top) if (IsResizeSaveWindowEnabled()) width = 13; - if (FlagGet(SYS_POKEDEX_GET)) + if (FlagGet(FLAG_SYS_POKEDEX_GET)) { // print info + dex information. MenuDrawTextWindow(left, top, left + width, top + 11); @@ -44,7 +44,7 @@ void HandleCloseSaveWindow(u16 left, u16 top) if (IsResizeSaveWindowEnabled()) width = 13; - if (FlagGet(SYS_POKEDEX_GET)) + if (FlagGet(FLAG_SYS_POKEDEX_GET)) MenuZeroFillWindowRect(left, top, left + width, top + 11); else MenuZeroFillWindowRect(left, top, left + width, top + 9); @@ -106,7 +106,7 @@ u8 GetBadgeCount(void) u8 badgeCount = 0; int badgeFlag; - for (badgeFlag = BADGE01_GET; badgeFlag <= BADGE08_GET; badgeFlag++) + for (badgeFlag = FLAG_BADGE01_GET; badgeFlag <= FLAG_BADGE08_GET; badgeFlag++) if (FlagGet(badgeFlag)) badgeCount++; diff --git a/src/engine/time_events.c b/src/engine/time_events.c index 831048add..3e3054aa3 100644 --- a/src/engine/time_events.c +++ b/src/engine/time_events.c @@ -85,9 +85,9 @@ void UpdateShoalTideFlag(void) { RtcCalcLocalTime(); if (tide[gLocalTime.hours]) - FlagSet(SYS_SHOAL_TIDE); + FlagSet(FLAG_SYS_SHOAL_TIDE); else - FlagClear(SYS_SHOAL_TIDE); + FlagClear(FLAG_SYS_SHOAL_TIDE); } } diff --git a/src/engine/trade.c b/src/engine/trade.c index 06a6b96c7..0567b4d2f 100644 --- a/src/engine/trade.c +++ b/src/engine/trade.c @@ -5696,7 +5696,7 @@ static void sub_804E1DC(void) numRibbons += GetMonData(&gEnemyParty[gUnknown_020297D8[1] % 6], MON_DATA_CHAMPION_RIBBON + i); } if (numRibbons != 0) - FlagSet(SYS_RIBBON_GET); + FlagSet(FLAG_SYS_RIBBON_GET); } void sub_804E22C(void) diff --git a/src/engine/trainer_card.c b/src/engine/trainer_card.c index 468890ca5..207fa5f77 100644 --- a/src/engine/trainer_card.c +++ b/src/engine/trainer_card.c @@ -323,7 +323,7 @@ void sub_8093390(struct TrainerCard *trainerCard) trainerCard->firstHallOfFameB = (playTime >> 8) & 0xFF; trainerCard->firstHallOfFameC = playTime & 0xFF; - trainerCard->hasPokedex = FlagGet(SYS_POKEDEX_GET); + trainerCard->hasPokedex = FlagGet(FLAG_SYS_POKEDEX_GET); trainerCard->var_3 = sub_8090FC0(); trainerCard->pokedexSeen = GetPokedexSeenCount(); @@ -543,14 +543,14 @@ void sub_80936D4(void) u32 badgeFlag; int i = 0; - badgeFlag = BADGE01_GET; + badgeFlag = FLAG_BADGE01_GET; while (1) { if (FlagGet(badgeFlag)) ewram0_2.var_e[i]++; badgeFlag++; i++; - if (badgeFlag > BADGE08_GET) + if (badgeFlag > FLAG_BADGE08_GET) { break; } diff --git a/src/field/braille_puzzles.c b/src/field/braille_puzzles.c index e6ab316d2..0d304714d 100644 --- a/src/field/braille_puzzles.c +++ b/src/field/braille_puzzles.c @@ -24,7 +24,7 @@ extern u8 S_OpenRegiceChamber[]; // regiice event script bool8 ShouldDoBrailleDigEffect(void) { - if (!FlagGet(SYS_BRAILLE_DIG) + if (!FlagGet(FLAG_SYS_BRAILLE_DIG) && (gSaveBlock1.location.mapGroup == MAP_GROUP(SEALED_CHAMBER_OUTER_ROOM) && gSaveBlock1.location.mapNum == MAP_NUM(SEALED_CHAMBER_OUTER_ROOM))) { @@ -49,7 +49,7 @@ void DoBrailleDigEffect(void) MapGridSetMetatileIdAt(18, 9, 3636); DrawWholeMapView(); PlaySE(SE_BAN); - FlagSet(SYS_BRAILLE_DIG); + FlagSet(FLAG_SYS_BRAILLE_DIG); ScriptContext2_Disable(); } @@ -68,7 +68,7 @@ bool8 CheckRelicanthWailord(void) bool8 ShouldDoBrailleStrengthEffect(void) { - if (!FlagGet(SYS_BRAILLE_STRENGTH) && (gSaveBlock1.location.mapGroup == MAP_GROUP(DESERT_RUINS) && gSaveBlock1.location.mapNum == MAP_NUM(DESERT_RUINS))) + if (!FlagGet(FLAG_SYS_BRAILLE_STRENGTH) && (gSaveBlock1.location.mapGroup == MAP_GROUP(DESERT_RUINS) && gSaveBlock1.location.mapNum == MAP_NUM(DESERT_RUINS))) { if (gSaveBlock1.pos.x == 10 && gSaveBlock1.pos.y == 23) return TRUE; @@ -92,13 +92,13 @@ void DoBrailleStrengthEffect(void) MapGridSetMetatileIdAt(16, 27, 3636); DrawWholeMapView(); PlaySE(SE_BAN); - FlagSet(SYS_BRAILLE_STRENGTH); + FlagSet(FLAG_SYS_BRAILLE_STRENGTH); ScriptContext2_Disable(); } bool8 ShouldDoBrailleFlyEffect(void) { - if (!FlagGet(SYS_BRAILLE_FLY) && (gSaveBlock1.location.mapGroup == MAP_GROUP(ANCIENT_TOMB) && gSaveBlock1.location.mapNum == MAP_NUM(ANCIENT_TOMB))) + if (!FlagGet(FLAG_SYS_BRAILLE_FLY) && (gSaveBlock1.location.mapGroup == MAP_GROUP(ANCIENT_TOMB) && gSaveBlock1.location.mapNum == MAP_NUM(ANCIENT_TOMB))) { if (gSaveBlock1.pos.x == 8 && gSaveBlock1.pos.y == 25) return TRUE; @@ -138,13 +138,13 @@ void UseFlyAncientTomb_Finish(void) MapGridSetMetatileIdAt(16, 27, 3636); DrawWholeMapView(); PlaySE(SE_BAN); - FlagSet(SYS_BRAILLE_FLY); + FlagSet(FLAG_SYS_BRAILLE_FLY); ScriptContext2_Disable(); } void DoBrailleWait(void) { - if (!FlagGet(SYS_BRAILLE_WAIT)) + if (!FlagGet(FLAG_SYS_BRAILLE_WAIT)) CreateTask(Task_BrailleWait, 0x50); } diff --git a/src/field/dewford_trend.c b/src/field/dewford_trend.c index 90ea74f77..b36459655 100644 --- a/src/field/dewford_trend.c +++ b/src/field/dewford_trend.c @@ -101,10 +101,10 @@ bool8 sub_80FA364(u16 *a) if (!SB1ContainsWords(a)) { - if (!FlagGet(SYS_POPWORD_INPUT)) + if (!FlagGet(FLAG_SYS_POPWORD_INPUT)) { - FlagSet(SYS_POPWORD_INPUT); - if (!FlagGet(SYS_MIX_RECORD)) + FlagSet(FLAG_SYS_POPWORD_INPUT); + if (!FlagGet(FLAG_SYS_MIX_RECORD)) { gSaveBlock1.easyChatPairs[0].words[0] = a[0]; gSaveBlock1.easyChatPairs[0].words[1] = a[1]; diff --git a/src/field/event_data.c b/src/field/event_data.c index 5c8b7d7e5..3b3ac7bca 100644 --- a/src/field/event_data.c +++ b/src/field/event_data.c @@ -36,10 +36,10 @@ void ClearTempFieldEventData(void) { memset(gSaveBlock1.flags, 0, TEMP_FLAGS_SIZE); memset(gSaveBlock1.vars, 0, TEMP_VARS_SIZE); - FlagClear(SYS_ENC_UP_ITEM); - FlagClear(SYS_ENC_DOWN_ITEM); - FlagClear(SYS_USE_STRENGTH); - FlagClear(SYS_CTRL_OBJ_DELETE); + FlagClear(FLAG_SYS_ENC_UP_ITEM); + FlagClear(FLAG_SYS_ENC_DOWN_ITEM); + FlagClear(FLAG_SYS_USE_STRENGTH); + FlagClear(FLAG_SYS_CTRL_OBJ_DELETE); } // probably had different flag splits at one point. @@ -53,7 +53,7 @@ void DisableNationalPokedex(void) u16 *nationalDexVar = GetVarPointer(VAR_NATIONAL_DEX); gSaveBlock2.pokedex.nationalMagic = 0; *nationalDexVar = 0; - FlagClear(SYS_NATIONAL_DEX); + FlagClear(FLAG_SYS_NATIONAL_DEX); } void EnableNationalPokedex(void) @@ -61,7 +61,7 @@ void EnableNationalPokedex(void) u16 *nationalDexVar = GetVarPointer(VAR_NATIONAL_DEX); gSaveBlock2.pokedex.nationalMagic = 0xDA; *nationalDexVar = 0x302; - FlagSet(SYS_NATIONAL_DEX); + FlagSet(FLAG_SYS_NATIONAL_DEX); gSaveBlock2.pokedex.unknown1 = 1; gSaveBlock2.pokedex.order = 0; sub_808C0A0(); @@ -69,7 +69,7 @@ void EnableNationalPokedex(void) bool32 IsNationalPokedexEnabled(void) { - if (gSaveBlock2.pokedex.nationalMagic == 0xDA && VarGet(VAR_NATIONAL_DEX) == 0x302 && FlagGet(SYS_NATIONAL_DEX)) + if (gSaveBlock2.pokedex.nationalMagic == 0xDA && VarGet(VAR_NATIONAL_DEX) == 0x302 && FlagGet(FLAG_SYS_NATIONAL_DEX)) return TRUE; else return FALSE; @@ -77,34 +77,34 @@ bool32 IsNationalPokedexEnabled(void) void DisableMysteryGift(void) { - FlagClear(SYS_EXDATA_ENABLE); + FlagClear(FLAG_SYS_EXDATA_ENABLE); } void EnableMysteryGift(void) { - FlagSet(SYS_EXDATA_ENABLE); + FlagSet(FLAG_SYS_EXDATA_ENABLE); } bool32 IsMysteryGiftEnabled(void) { - return FlagGet(SYS_EXDATA_ENABLE); + return FlagGet(FLAG_SYS_EXDATA_ENABLE); } void DisableResetRTC(void) { VarSet(VAR_RESET_RTC_ENABLE, 0); - FlagClear(SYS_RESET_RTC_ENABLE); + FlagClear(FLAG_SYS_RESET_RTC_ENABLE); } void EnableResetRTC(void) { VarSet(VAR_RESET_RTC_ENABLE, 0x920); - FlagSet(SYS_RESET_RTC_ENABLE); + FlagSet(FLAG_SYS_RESET_RTC_ENABLE); } bool32 CanResetRTC(void) { - if (FlagGet(SYS_RESET_RTC_ENABLE) && VarGet(VAR_RESET_RTC_ENABLE) == 0x920) + if (FlagGet(FLAG_SYS_RESET_RTC_ENABLE) && VarGet(VAR_RESET_RTC_ENABLE) == 0x920) return TRUE; else return FALSE; diff --git a/src/field/field_control_avatar.c b/src/field/field_control_avatar.c index c4e53b13f..dd29e9df5 100644 --- a/src/field/field_control_avatar.c +++ b/src/field/field_control_avatar.c @@ -423,11 +423,11 @@ static u8 *sub_8068500(struct MapPosition *position, u8 b, u8 c) static u8 *TryGetFieldMoveScript(struct MapPosition *unused1, u8 b, u8 unused2) { - if (FlagGet(BADGE05_GET) == TRUE && PartyHasMonWithSurf() == TRUE && IsPlayerFacingSurfableFishableWater() == TRUE) + if (FlagGet(FLAG_BADGE05_GET) == TRUE && PartyHasMonWithSurf() == TRUE && IsPlayerFacingSurfableFishableWater() == TRUE) return UseSurfScript; if (MetatileBehavior_IsWaterfall(b) == TRUE) { - if (FlagGet(BADGE08_GET) == TRUE && IsPlayerSurfingNorth() == TRUE) + if (FlagGet(FLAG_BADGE08_GET) == TRUE && IsPlayerSurfingNorth() == TRUE) return S_UseWaterfall; else return S_CannotUseWaterfall; @@ -437,7 +437,7 @@ static u8 *TryGetFieldMoveScript(struct MapPosition *unused1, u8 b, u8 unused2) static bool32 sub_8068770(void) { - if (FlagGet(BADGE07_GET) && sub_8068F18() == 2) + if (FlagGet(FLAG_BADGE07_GET) && sub_8068F18() == 2) { ScriptContext1_SetupScript(UseDiveScript); return TRUE; @@ -447,7 +447,7 @@ static bool32 sub_8068770(void) static bool32 sub_80687A4(void) { - if (FlagGet(BADGE07_GET) && gMapHeader.mapType == MAP_TYPE_UNDERWATER && sub_8068F18() == 1) + if (FlagGet(FLAG_BADGE07_GET) && gMapHeader.mapType == MAP_TYPE_UNDERWATER && sub_8068F18() == 1) { ScriptContext1_SetupScript(S_UseDiveUnderwater); return TRUE; diff --git a/src/field/field_player_avatar.c b/src/field/field_player_avatar.c index 437d16208..d80076be4 100644 --- a/src/field/field_player_avatar.c +++ b/src/field/field_player_avatar.c @@ -490,7 +490,7 @@ void sub_8058D0C(u8 direction, u16 heldKeys) PlayerGoSpeed2(direction); return; } - if (!(gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_4) && (heldKeys & B_BUTTON) && FlagGet(SYS_B_DASH) + if (!(gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_4) && (heldKeys & B_BUTTON) && FlagGet(FLAG_SYS_B_DASH) && IsRunningDisallowed(gMapObjects[gPlayerAvatar.mapObjectId].mapobj_unk_1E) == 0) { sub_805940C(direction); @@ -563,7 +563,7 @@ static bool8 ShouldJumpLedge(s16 a, s16 b, u8 c) static u8 sub_8058F6C(s16 a, s16 b, u8 c) { - if (FlagGet(SYS_USE_STRENGTH)) + if (FlagGet(FLAG_SYS_USE_STRENGTH)) { u8 mapObjectId = GetFieldObjectIdByXY(a, b); diff --git a/src/field/field_special_scene.c b/src/field/field_special_scene.c index 6ef98f5e9..0b7fe336e 100644 --- a/src/field/field_special_scene.c +++ b/src/field/field_special_scene.c @@ -373,7 +373,7 @@ void sub_80C791C(void) void sub_80C7958(void) { - FlagSet(SYS_CRUISE_MODE); + FlagSet(FLAG_SYS_CRUISE_MODE); FlagSet(0x4001); FlagSet(0x4000); saved_warp2_set(0, gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum, -1); diff --git a/src/field/field_specials.c b/src/field/field_specials.c index 9a286dd6e..78c60c94e 100644 --- a/src/field/field_specials.c +++ b/src/field/field_specials.c @@ -221,18 +221,18 @@ void UpdateCyclingRoadState(void) { void SetSSTidalFlag(void) { - FlagSet(SYS_CRUISE_MODE); + FlagSet(FLAG_SYS_CRUISE_MODE); *GetVarPointer(VAR_CRUISE_STEP_COUNT) = 0; } void ResetSSTidalFlag(void) { - FlagClear(SYS_CRUISE_MODE); + FlagClear(FLAG_SYS_CRUISE_MODE); } bool32 CountSSTidalStep(u16 delta) { - if (!FlagGet(SYS_CRUISE_MODE) || (*GetVarPointer(VAR_CRUISE_STEP_COUNT) += delta) <= 0xcc) + if (!FlagGet(FLAG_SYS_CRUISE_MODE) || (*GetVarPointer(VAR_CRUISE_STEP_COUNT) += delta) <= 0xcc) { return FALSE; } @@ -1865,7 +1865,7 @@ void GivLeadMonEffortRibbon(void) { bool8 ribbonSet; IncrementGameStat(GAME_STAT_RECEIVED_RIBBONS); - FlagSet(SYS_RIBBON_GET); + FlagSet(FLAG_SYS_RIBBON_GET); ribbonSet = TRUE; SetMonData(&gPlayerParty[GetLeadMonIndex()], MON_DATA_EFFORT_RIBBON, &ribbonSet); } diff --git a/src/field/fldeff_flash.c b/src/field/fldeff_flash.c index 920791ce2..22f170184 100644 --- a/src/field/fldeff_flash.c +++ b/src/field/fldeff_flash.c @@ -73,7 +73,7 @@ static const u8 gCaveTransitionTiles[] = INCBIN_U8("graphics/misc/cave_transitio bool8 SetUpFieldMove_Flash(void) { - if (gMapHeader.cave == TRUE && !FlagGet(SYS_USE_FLASH)) + if (gMapHeader.cave == TRUE && !FlagGet(FLAG_SYS_USE_FLASH)) { gFieldCallback = FieldCallback_Teleport; gUnknown_03005CE4 = sub_810CBFC; @@ -94,7 +94,7 @@ void sub_810CBFC(void) void sub_810CC34(void) { PlaySE(SE_W115); - FlagSet(SYS_USE_FLASH); + FlagSet(FLAG_SYS_USE_FLASH); ScriptContext1_SetupScript(gUnknown_081B694A); } diff --git a/src/field/item_use.c b/src/field/item_use.c index 48b159c1c..c2e71070c 100644 --- a/src/field/item_use.c +++ b/src/field/item_use.c @@ -177,7 +177,7 @@ void ItemUseOutOfBattle_Bike(u8 taskId) PlayerGetDestCoords(&x, &y); tileBehavior = MapGridGetMetatileBehaviorAt(x, y); - if (FlagGet(SYS_CYCLING_ROAD) == TRUE // on cycling road? + if (FlagGet(FLAG_SYS_CYCLING_ROAD) == TRUE // on cycling road? || MetatileBehavior_IsVerticalRail(tileBehavior) == TRUE || MetatileBehavior_IsHorizontalRail(tileBehavior) == TRUE || MetatileBehavior_IsIsolatedVerticalRail(tileBehavior) == TRUE @@ -952,8 +952,8 @@ void ItemUseOutOfBattle_BlackWhiteFlute(u8 taskId) { if (gScriptItemId == ITEM_WHITE_FLUTE) { - FlagSet(SYS_ENC_UP_ITEM); - FlagClear(SYS_ENC_DOWN_ITEM); + FlagSet(FLAG_SYS_ENC_UP_ITEM); + FlagClear(FLAG_SYS_ENC_DOWN_ITEM); sub_80CA07C(); StringExpandPlaceholders(gStringVar4, gOtherText_UsedFlute); gTasks[taskId].func = sub_80CA098; @@ -961,8 +961,8 @@ void ItemUseOutOfBattle_BlackWhiteFlute(u8 taskId) } else if (gScriptItemId == ITEM_BLACK_FLUTE) { - FlagSet(SYS_ENC_DOWN_ITEM); - FlagClear(SYS_ENC_UP_ITEM); + FlagSet(FLAG_SYS_ENC_DOWN_ITEM); + FlagClear(FLAG_SYS_ENC_UP_ITEM); sub_80CA07C(); StringExpandPlaceholders(gStringVar4, gOtherText_UsedRepel); gTasks[taskId].func = sub_80CA098; diff --git a/src/field/overworld.c b/src/field/overworld.c index 21f3f98ef..834a2afa4 100644 --- a/src/field/overworld.c +++ b/src/field/overworld.c @@ -203,47 +203,47 @@ static void DoWhiteOut(void) void Overworld_ResetStateAfterFly(void) { player_avatar_init_params_reset(); - FlagClear(SYS_CYCLING_ROAD); - FlagClear(SYS_CRUISE_MODE); - FlagClear(SYS_SAFARI_MODE); - FlagClear(SYS_USE_STRENGTH); - FlagClear(SYS_USE_FLASH); + FlagClear(FLAG_SYS_CYCLING_ROAD); + FlagClear(FLAG_SYS_CRUISE_MODE); + FlagClear(FLAG_SYS_SAFARI_MODE); + FlagClear(FLAG_SYS_USE_STRENGTH); + FlagClear(FLAG_SYS_USE_FLASH); } void Overworld_ResetStateAfterTeleport(void) { player_avatar_init_params_reset(); - FlagClear(SYS_CYCLING_ROAD); - FlagClear(SYS_CRUISE_MODE); - FlagClear(SYS_SAFARI_MODE); - FlagClear(SYS_USE_STRENGTH); - FlagClear(SYS_USE_FLASH); + FlagClear(FLAG_SYS_CYCLING_ROAD); + FlagClear(FLAG_SYS_CRUISE_MODE); + FlagClear(FLAG_SYS_SAFARI_MODE); + FlagClear(FLAG_SYS_USE_STRENGTH); + FlagClear(FLAG_SYS_USE_FLASH); ScriptContext2_RunNewScript(gUnknown_0819FC9F); } void Overworld_ResetStateAfterDigEscRope(void) { player_avatar_init_params_reset(); - FlagClear(SYS_CYCLING_ROAD); - FlagClear(SYS_CRUISE_MODE); - FlagClear(SYS_SAFARI_MODE); - FlagClear(SYS_USE_STRENGTH); - FlagClear(SYS_USE_FLASH); + FlagClear(FLAG_SYS_CYCLING_ROAD); + FlagClear(FLAG_SYS_CRUISE_MODE); + FlagClear(FLAG_SYS_SAFARI_MODE); + FlagClear(FLAG_SYS_USE_STRENGTH); + FlagClear(FLAG_SYS_USE_FLASH); } void Overworld_ResetStateAfterWhiteOut(void) { player_avatar_init_params_reset(); - FlagClear(SYS_CYCLING_ROAD); - FlagClear(SYS_CRUISE_MODE); - FlagClear(SYS_SAFARI_MODE); - FlagClear(SYS_USE_STRENGTH); - FlagClear(SYS_USE_FLASH); + FlagClear(FLAG_SYS_CYCLING_ROAD); + FlagClear(FLAG_SYS_CRUISE_MODE); + FlagClear(FLAG_SYS_SAFARI_MODE); + FlagClear(FLAG_SYS_USE_STRENGTH); + FlagClear(FLAG_SYS_USE_FLASH); } void sub_805308C(void) { - FlagClear(SYS_SAFARI_MODE); + FlagClear(FLAG_SYS_SAFARI_MODE); ChooseAmbientCrySpecies(); ResetCyclingRoadChallengeData(); UpdateLocationHistoryForRoamer(); @@ -641,7 +641,7 @@ void sub_8053994(u32 a1) SetSav1WeatherFromCurrMapHeader(); ChooseAmbientCrySpecies(); if (v2) - FlagClear(SYS_USE_FLASH); + FlagClear(FLAG_SYS_USE_FLASH); SetDefaultFlashLevel(); Overworld_ClearSavedMusic(); mapheader_run_script_with_tag_x3(); @@ -691,7 +691,7 @@ struct UnkPlayerStruct *sub_8053AA8(void) u8 sub_8053B00(struct UnkPlayerStruct *playerStruct, u16 a2, u8 a3) { - if (a3 != 8 && FlagGet(SYS_CRUISE_MODE)) + if (a3 != 8 && FlagGet(FLAG_SYS_CRUISE_MODE)) return 1; if (a3 == 5) return 16; @@ -708,7 +708,7 @@ u8 sub_8053B00(struct UnkPlayerStruct *playerStruct, u16 a2, u8 a3) u8 sub_8053B60(struct UnkPlayerStruct *playerStruct, u8 a2, u16 a3, u8 a4) { - if (FlagGet(SYS_CRUISE_MODE) && a4 == 6) + if (FlagGet(FLAG_SYS_CRUISE_MODE) && a4 == 6) return 4; if (MetatileBehavior_IsDeepSouthWarp(a3) == TRUE) return 2; @@ -766,7 +766,7 @@ void SetDefaultFlashLevel(void) { if (!gMapHeader.cave) gSaveBlock1.flashLevel = 0; - else if (FlagGet(SYS_USE_FLASH)) + else if (FlagGet(FLAG_SYS_USE_FLASH)) gSaveBlock1.flashLevel = 1; else gSaveBlock1.flashLevel = gMaxFlashLevel; @@ -792,7 +792,7 @@ void sub_8053D14(u16 mapDataId) static bool16 ShouldLegendaryMusicPlayAtLocation(struct WarpData *warp) { - if (!FlagGet(SYS_WEATHER_CTRL)) + if (!FlagGet(FLAG_SYS_WEATHER_CTRL)) return FALSE; if (warp->mapGroup == 0) { @@ -912,7 +912,7 @@ void Overworld_ClearSavedMusic(void) void sub_8053F0C(void) { - if (FlagGet(SPECIAL_FLAG_1) != TRUE) + if (FlagGet(FLAG_SPECIAL_FLAG_1) != TRUE) { u16 newMusic = GetWarpDestinationMusic(); u16 currentMusic = GetCurrentMapMusic(); @@ -959,7 +959,7 @@ u8 GetMapMusicFadeoutSpeed(void) void sub_8053FF8(void) { u16 music = GetWarpDestinationMusic(); - if (FlagGet(SPECIAL_FLAG_1) != TRUE && music != GetCurrentMapMusic()) + if (FlagGet(FLAG_SPECIAL_FLAG_1) != TRUE && music != GetCurrentMapMusic()) { u8 speed = GetMapMusicFadeoutSpeed(); FadeOutMapMusic(speed); diff --git a/src/field/party_menu.c b/src/field/party_menu.c index dc817f8c9..7d21c365a 100644 --- a/src/field/party_menu.c +++ b/src/field/party_menu.c @@ -5643,7 +5643,7 @@ _08070F8A:\n\ void unref_sub_8070F90(void) { - FlagSet(SYS_POKEDEX_GET); - FlagSet(SYS_POKEMON_GET); - FlagSet(SYS_POKENAV_GET); + FlagSet(FLAG_SYS_POKEDEX_GET); + FlagSet(FLAG_SYS_POKEMON_GET); + FlagSet(FLAG_SYS_POKENAV_GET); } diff --git a/src/field/region_map.c b/src/field/region_map.c index 12bf1a5f2..07e77e389 100644 --- a/src/field/region_map.c +++ b/src/field/region_map.c @@ -1422,7 +1422,7 @@ static const u8 *const sEverGrandeCityAreaNames[] = {OtherText_PokeLeague, Other static const struct UnknownStruct4 sUnknown_083E79C0[1] = { - {sEverGrandeCityAreaNames, MAPSEC_EVER_GRANDE_CITY, SYS_POKEMON_LEAGUE_FLY}, + {sEverGrandeCityAreaNames, MAPSEC_EVER_GRANDE_CITY, FLAG_SYS_POKEMON_LEAGUE_FLY}, }; // XXX: what is this? @@ -1822,7 +1822,7 @@ static void sub_80FC69C(void) sub_8053538((gSaveBlock2.playerGender == MALE) ? 12 : 13); break; case MAPSEC_EVER_GRANDE_CITY: - sub_8053538((FlagGet(SYS_POKEMON_LEAGUE_FLY) && ewram0_3.regionMap.everGrandeCityArea == 0) ? 20 : 11); + sub_8053538((FlagGet(FLAG_SYS_POKEMON_LEAGUE_FLY) && ewram0_3.regionMap.everGrandeCityArea == 0) ? 20 : 11); break; default: if (sUnknown_083E7920[ewram0_3.regionMap.mapSectionId][2] != 0) diff --git a/src/field/safari_zone.c b/src/field/safari_zone.c index 14fd1ddc4..73fb01f3e 100644 --- a/src/field/safari_zone.c +++ b/src/field/safari_zone.c @@ -41,17 +41,17 @@ extern u16 gScriptResult; bool32 GetSafariZoneFlag(void) { - return FlagGet(SYS_SAFARI_MODE); + return FlagGet(FLAG_SYS_SAFARI_MODE); } void SetSafariZoneFlag(void) { - FlagSet(SYS_SAFARI_MODE); + FlagSet(FLAG_SYS_SAFARI_MODE); } void ResetSafariZoneFlag(void) { - FlagClear(SYS_SAFARI_MODE); + FlagClear(FLAG_SYS_SAFARI_MODE); } void EnterSafariMode(void) diff --git a/src/field/script_menu.c b/src/field/script_menu.c index caa1d7562..1f8c2c45e 100644 --- a/src/field/script_menu.c +++ b/src/field/script_menu.c @@ -906,7 +906,7 @@ void ScriptMenu_CreatePCMenu(void) else width = 8; - if (FlagGet(SYS_GAME_CLEAR)) // player has cleared game? + if (FlagGet(FLAG_SYS_GAME_CLEAR)) // player has cleared game? { numChoices = 4; MenuDrawTextWindow(0, 0, width + 2, 9); @@ -920,7 +920,7 @@ void ScriptMenu_CreatePCMenu(void) MenuPrint(gPCText_LogOff, 1, 5); } - if (FlagGet(SYS_PC_LANETTE)) // player met lanette? + if (FlagGet(FLAG_SYS_PC_LANETTE)) // player met lanette? MenuPrint(gPCText_LanettesPC, 1, 1); else MenuPrint(gPCText_SomeonesPC, 1, 1); diff --git a/src/field/start_menu.c b/src/field/start_menu.c index 7913e5527..9f4eacd09 100644 --- a/src/field/start_menu.c +++ b/src/field/start_menu.c @@ -154,12 +154,12 @@ static void AddStartMenuAction(u8 action) static void BuildStartMenuActions_Normal(void) { - if (FlagGet(SYS_POKEDEX_GET) == TRUE) + if (FlagGet(FLAG_SYS_POKEDEX_GET) == TRUE) AddStartMenuAction(MENU_ACTION_POKEDEX); - if (FlagGet(SYS_POKEMON_GET) == TRUE) + if (FlagGet(FLAG_SYS_POKEMON_GET) == TRUE) AddStartMenuAction(MENU_ACTION_POKEMON); AddStartMenuAction(MENU_ACTION_BAG); - if (FlagGet(SYS_POKENAV_GET) == TRUE) + if (FlagGet(FLAG_SYS_POKENAV_GET) == TRUE) AddStartMenuAction(MENU_ACTION_POKENAV); AddStartMenuAction(MENU_ACTION_PLAYER); AddStartMenuAction(MENU_ACTION_SAVE); @@ -182,7 +182,7 @@ static void BuildStartMenuActions_Link(void) { AddStartMenuAction(MENU_ACTION_POKEMON); AddStartMenuAction(MENU_ACTION_BAG); - if (FlagGet(SYS_POKENAV_GET) == TRUE) + if (FlagGet(FLAG_SYS_POKENAV_GET) == TRUE) AddStartMenuAction(MENU_ACTION_POKENAV); AddStartMenuAction(MENU_ACTION_PLAYER_LINK); AddStartMenuAction(MENU_ACTION_OPTION); diff --git a/src/field/tv.c b/src/field/tv.c index c3141e0b5..db96775e3 100644 --- a/src/field/tv.c +++ b/src/field/tv.c @@ -542,7 +542,7 @@ bool8 IsTVShowInSearchOfTrainersAiring(void); void UpdateTVScreensOnMap(int width, int height) { - FlagSet(SYS_TV_WATCH); + FlagSet(FLAG_SYS_TV_WATCH); switch (CheckForBigMovieOrEmergencyNewsOnTV()) { case 1: @@ -556,9 +556,9 @@ void UpdateTVScreensOnMap(int width, int height) { SetTVMetatilesOnMap(width, height, 0x3); } - else if (FlagGet(SYS_TV_START) && (sub_80BD8B8() != 0xff || sub_80BECA0() != 0xff || IsTVShowInSearchOfTrainersAiring())) + else if (FlagGet(FLAG_SYS_TV_START) && (sub_80BD8B8() != 0xff || sub_80BECA0() != 0xff || IsTVShowInSearchOfTrainersAiring())) { - FlagClear(SYS_TV_WATCH); + FlagClear(FLAG_SYS_TV_WATCH); SetTVMetatilesOnMap(width, height, 0x3); } break; @@ -1138,7 +1138,7 @@ void nullsub_21(void) void sub_80BE778(void) { - if (FlagGet(SYS_GAME_CLEAR)) + if (FlagGet(FLAG_SYS_GAME_CLEAR)) { u8 i; @@ -1331,7 +1331,7 @@ void sub_80BEB20(void) { u16 rval; - if (FlagGet(SYS_GAME_CLEAR) != 0) + if (FlagGet(FLAG_SYS_GAME_CLEAR) != 0) { gUnknown_03005D38.var0 = sub_80BEBC8(gSaveBlock1.unknown_2ABC); if (gUnknown_03005D38.var0 != -1 && sub_80BF77C(0x28f) != 1) @@ -1507,7 +1507,7 @@ void sub_80BEE84(u16 var0) } else { - if (!gSaveBlock1.unknown_2ABC[i].val1 && FlagGet(SYS_GAME_CLEAR) == 1) + if (!gSaveBlock1.unknown_2ABC[i].val1 && FlagGet(FLAG_SYS_GAME_CLEAR) == 1) gSaveBlock1.unknown_2ABC[i].val1 = 1; gSaveBlock1.unknown_2ABC[i].val2 -= var0; } @@ -2133,9 +2133,9 @@ u8 CheckForBigMovieOrEmergencyNewsOnTV(void) if (gSaveBlock1.location.mapNum != MAP_NUM(LITTLEROOT_TOWN_MAYS_HOUSE_1F)) return 0; } - if (FlagGet(SYS_TV_LATI) == 1) + if (FlagGet(FLAG_SYS_TV_LATI) == 1) return 1; - if (FlagGet(SYS_TV_HOME) == 1) + if (FlagGet(FLAG_SYS_TV_HOME) == 1) return 2; return 1; } @@ -2650,7 +2650,7 @@ void sub_80C0408(void) { u16 i; - if (FlagGet(SYS_GAME_CLEAR) == TRUE) + if (FlagGet(FLAG_SYS_GAME_CLEAR) == TRUE) return; for (i = 0; i < 24; i++) { @@ -2801,7 +2801,7 @@ void sub_80C0788(void) { u8 i; - if (FlagGet(SYS_GAME_CLEAR) != 1) + if (FlagGet(FLAG_SYS_GAME_CLEAR) != 1) { for (i = 0; i < 16; i++) gSaveBlock1.unknown_2ABC[i].val1 = 0; diff --git a/src/field/wild_encounter.c b/src/field/wild_encounter.c index 64c88694c..cc4468728 100644 --- a/src/field/wild_encounter.c +++ b/src/field/wild_encounter.c @@ -4353,9 +4353,9 @@ static bool8 IsWildLevelAllowedByRepel(u8 wildLevel) static void ApplyFluteEncounterRateMod(u32 *encRate) { - if (FlagGet(SYS_ENC_UP_ITEM) == TRUE) + if (FlagGet(FLAG_SYS_ENC_UP_ITEM) == TRUE) *encRate += *encRate / 2; - else if (FlagGet(SYS_ENC_DOWN_ITEM) == TRUE) + else if (FlagGet(FLAG_SYS_ENC_DOWN_ITEM) == TRUE) *encRate = *encRate / 2; } diff --git a/src/pokemon/pokemon_menu.c b/src/pokemon/pokemon_menu.c index ea33cd3e6..f6f5e24e7 100644 --- a/src/pokemon/pokemon_menu.c +++ b/src/pokemon/pokemon_menu.c @@ -722,7 +722,7 @@ static void PokemonMenu_FieldMove(u8 taskID) PrintPartyMenuPromptText(sFieldMoveFuncs[tFieldMoveId].field_1, 0); gTasks[taskID].func = sub_808ABF4; } - else if (tFieldMoveId <= 7 && FlagGet(BADGE01_GET + tFieldMoveId) != TRUE) + else if (tFieldMoveId <= 7 && FlagGet(FLAG_BADGE01_GET + tFieldMoveId) != TRUE) { // can't use a field HM move without a proper badge MenuZeroFillWindowRect(19, 0, 29, 19); diff --git a/src/pokemon/pokemon_size_record.c b/src/pokemon/pokemon_size_record.c index 260396de0..2ab289416 100644 --- a/src/pokemon/pokemon_size_record.c +++ b/src/pokemon/pokemon_size_record.c @@ -212,6 +212,6 @@ void GiveGiftRibbonToParty(u8 index, u8 ribbonId) } } if (gotRibbon) - FlagSet(SYS_RIBBON_GET); + FlagSet(FLAG_SYS_RIBBON_GET); } } diff --git a/src/pokenav_before.c b/src/pokenav_before.c index bab6648de..6e83c6f97 100644 --- a/src/pokenav_before.c +++ b/src/pokenav_before.c @@ -401,7 +401,7 @@ void sub_80EBCA8() { ewram0_10.var6db2[1] = 2; ewram0_10.var6db2[2] = 3; - if (FlagGet(SYS_RIBBON_GET)) { + if (FlagGet(FLAG_SYS_RIBBON_GET)) { ewram0_10.var6db2[3] = 4; } else { -- cgit v1.2.3 From 16f22f851658d423600af99787a343df6cab6254 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Mon, 18 Dec 2017 12:01:51 -0600 Subject: Decompile battle_anim bubble --- src/battle/anim/bubble.c | 102 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 src/battle/anim/bubble.c (limited to 'src') diff --git a/src/battle/anim/bubble.c b/src/battle/anim/bubble.c new file mode 100644 index 000000000..5da0d9929 --- /dev/null +++ b/src/battle/anim/bubble.c @@ -0,0 +1,102 @@ +#include "global.h" +#include "battle_anim.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "util.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +static void sub_80D32E8(struct Sprite *sprite); +static void sub_80D3370(struct Sprite *sprite); +static void sub_80D3398(struct Sprite *sprite); + +// bubble (indidivual bubble that floats around) +// Used in Bubble and Bubblebeam + +void sub_80D31C8(struct Sprite* sprite) +{ + u8 newSpriteId; + + if (GetBankSide(gBattleAnimBankAttacker) != 0) + { + sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 2) - gBattleAnimArgs[0]; + sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 3) + gBattleAnimArgs[1]; + } + else + { + sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 2) + gBattleAnimArgs[0]; + sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 3) + gBattleAnimArgs[1]; + } + + sprite->animPaused = 1; + + if (GetBankSide(gBattleAnimBankAttacker) != 0) + { + gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + } + + sprite->data[0] = gBattleAnimArgs[6]; + sprite->data[1] = sprite->pos1.x; + sprite->data[2] = sub_8077ABC(gBattleAnimBankTarget, 2); + sprite->data[3] = sprite->pos1.y; + sprite->data[4] = sub_8077ABC(gBattleAnimBankTarget, 3); + + obj_translate_based_on_private_1_2_3_4(sprite); + + newSpriteId = CreateInvisibleSpriteWithCallback(SpriteCallbackDummy); + sprite->data[5] = newSpriteId; + + sprite->pos1.x -= Sin((u8)gBattleAnimArgs[4], gBattleAnimArgs[2]); + sprite->pos1.y -= Cos((u8)gBattleAnimArgs[4], gBattleAnimArgs[3]); + + gSprites[newSpriteId].data[0] = gBattleAnimArgs[2]; + gSprites[newSpriteId].data[1] = gBattleAnimArgs[3]; + gSprites[newSpriteId].data[2] = gBattleAnimArgs[5]; + gSprites[newSpriteId].data[3] = (u8)gBattleAnimArgs[4] * 256; + gSprites[newSpriteId].data[4] = gBattleAnimArgs[6]; + + sprite->callback = sub_80D32E8; + sprite->callback(sprite); +} + +static void sub_80D32E8(struct Sprite *sprite) +{ + u8 spriteId = sprite->data[5]; + + u8 counter = gSprites[spriteId].data[4]; + u16 index = gSprites[spriteId].data[3]; + + sprite->data[0] = 1; + sub_8078B5C(sprite); + + sprite->pos2.x += Sin(index / 256, gSprites[spriteId].data[0]); + sprite->pos2.y += Cos(index / 256, gSprites[spriteId].data[1]); + + gSprites[spriteId].data[3] = gSprites[spriteId].data[2] + index; + + if (--counter != 0) + { + gSprites[spriteId].data[4] = counter; + } + else + { + sprite->callback = sub_80D3370; + DestroySprite(&gSprites[spriteId]); + } +} + +static void sub_80D3370(struct Sprite *sprite) +{ + sprite->animPaused = 0; + sprite->callback = sub_8078600; + StoreSpriteCallbackInData(sprite, sub_80D3398); +} + +static void sub_80D3398(struct Sprite *sprite) +{ + sprite->data[0] = 10; + sprite->callback = sub_80782D8; + StoreSpriteCallbackInData(sprite, move_anim_8074EE0); +} -- cgit v1.2.3 From 4ebb3fdcc56abfcacf4a78aa10a2ea74b0d1b4d0 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Mon, 18 Dec 2017 15:47:05 -0600 Subject: Start decompiling water --- src/battle/anim/love_bg.c | 7 - src/battle/anim/scary_face.c | 7 - src/battle/anim/water.c | 371 +++++++++++++++++++++++++++++++++++++++++++ src/rom_8077ABC.c | 6 - 4 files changed, 371 insertions(+), 20 deletions(-) create mode 100644 src/battle/anim/water.c (limited to 'src') diff --git a/src/battle/anim/love_bg.c b/src/battle/anim/love_bg.c index c5659463e..1e49b536c 100755 --- a/src/battle/anim/love_bg.c +++ b/src/battle/anim/love_bg.c @@ -6,13 +6,6 @@ #include "decompress.h" #include "palette.h" -struct Struct_sub_8078914 -{ - u8 *field_0; - u8 *field_4; - u8 field_8; -}; - extern s16 gBattleAnimArgs[]; extern u8 gBattleAnimBankAttacker; extern u8 gBattleAnimBankTarget; diff --git a/src/battle/anim/scary_face.c b/src/battle/anim/scary_face.c index 9f1dfd7d0..0c5056704 100755 --- a/src/battle/anim/scary_face.c +++ b/src/battle/anim/scary_face.c @@ -6,13 +6,6 @@ #include "decompress.h" #include "palette.h" -struct Struct_sub_8078914 -{ - u8 *field_0; - u8 *field_4; - u8 field_8; -}; - extern s16 gBattleAnimArgs[]; extern u8 gBattleAnimBankAttacker; extern u8 gBattleAnimBankTarget; diff --git a/src/battle/anim/water.c b/src/battle/anim/water.c new file mode 100644 index 000000000..396a4637d --- /dev/null +++ b/src/battle/anim/water.c @@ -0,0 +1,371 @@ +#include "global.h" +#include "battle_anim.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "util.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +static void sub_80D3874(struct Sprite *); + +void sub_80D37FC(struct Sprite *sprite) +{ + sub_8078764(sprite, 1); + + sprite->data[0] = gBattleAnimArgs[4]; + sprite->data[2] = sprite->pos1.x + gBattleAnimArgs[2]; + sprite->data[4] = sprite->pos1.y + gBattleAnimArgs[4]; + + sprite->callback = sub_8078B34; + StoreSpriteCallbackInData(sprite, move_anim_8072740); +} + +void sub_80D3838(struct Sprite *sprite) +{ + if (gBattleAnimArgs[3] != 0) + { + sub_8078764(sprite, 1); + } + else + { + sub_80787B0(sprite, 1); + } + + sprite->data[7] = gBattleAnimArgs[2]; + sprite->callback = sub_80D3874; +} + +static void sub_80D3874(struct Sprite *sprite) +{ + sprite->data[0] = (sprite->data[0] + 11) & 0xFF; + sprite->pos2.x = Sin(sprite->data[0], 4); + + sprite->data[1] += 48; + sprite->pos2.y = -(sprite->data[1] >> 8); + + if (--sprite->data[7] == -1) + { + move_anim_8072740(sprite); + } +} + +__attribute__((naked)) +void sub_80D38BC(u8 taskId) +{ + asm(".syntax unified\n\ + .equ REG_BLDCNT, 0x4000050\n\ + .equ REG_BG1CNT, 0x400000A\n\ + .equ REG_BG1HOFS, 0x4000014\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, 0x14\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + mov r10, r0\n\ + ldr r1, _080D398C @ =REG_BLDCNT\n\ + ldr r2, _080D3990 @ =0x00003f42\n\ + adds r0, r2, 0\n\ + strh r0, [r1]\n\ + adds r1, 0x2\n\ + movs r3, 0x80\n\ + lsls r3, 5\n\ + adds r0, r3, 0\n\ + strh r0, [r1]\n\ + ldr r2, _080D3994 @ =REG_BG1CNT\n\ + ldrb r1, [r2]\n\ + movs r0, 0x4\n\ + negs r0, r0\n\ + ands r0, r1\n\ + movs r1, 0x1\n\ + orrs r0, r1\n\ + strb r0, [r2]\n\ + ldrb r1, [r2, 0x1]\n\ + movs r0, 0x3F\n\ + ands r0, r1\n\ + movs r1, 0x40\n\ + orrs r0, r1\n\ + strb r0, [r2, 0x1]\n\ + mov r0, sp\n\ + bl sub_8078914\n\ + ldr r2, [sp]\n\ + movs r3, 0x80\n\ + lsls r3, 6\n\ + add r6, sp, 0x10\n\ + add r0, sp, 0xC\n\ + mov r12, r0\n\ + movs r5, 0\n\ + ldr r1, _080D3998 @ =0x040000d4\n\ + movs r4, 0x80\n\ + lsls r4, 5\n\ + mov r8, r6\n\ + ldr r7, _080D399C @ =0x85000400\n\ + movs r0, 0x85\n\ + lsls r0, 24\n\ + mov r9, r0\n\ +_080D3920:\n\ + str r5, [sp, 0x10]\n\ + mov r0, r8\n\ + str r0, [r1]\n\ + str r2, [r1, 0x4]\n\ + str r7, [r1, 0x8]\n\ + ldr r0, [r1, 0x8]\n\ + adds r2, r4\n\ + subs r3, r4\n\ + cmp r3, r4\n\ + bhi _080D3920\n\ + str r5, [sp, 0x10]\n\ + str r6, [r1]\n\ + str r2, [r1, 0x4]\n\ + lsrs r0, r3, 2\n\ + mov r2, r9\n\ + orrs r0, r2\n\ + str r0, [r1, 0x8]\n\ + ldr r0, [r1, 0x8]\n\ + movs r0, 0\n\ + mov r3, r12\n\ + strb r0, [r3]\n\ + strb r0, [r3]\n\ + ldr r1, [sp, 0x4]\n\ + movs r0, 0\n\ + str r0, [sp, 0x10]\n\ + ldr r0, _080D3998 @ =0x040000d4\n\ + str r6, [r0]\n\ + str r1, [r0, 0x4]\n\ + ldr r1, _080D399C @ =0x85000400\n\ + str r1, [r0, 0x8]\n\ + ldr r0, [r0, 0x8]\n\ + bl NotInBattle\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + bne _080D39B8\n\ + ldr r2, _080D3994 @ =REG_BG1CNT\n\ + ldrb r1, [r2]\n\ + movs r0, 0xD\n\ + negs r0, r0\n\ + ands r0, r1\n\ + movs r1, 0x4\n\ + orrs r0, r1\n\ + strb r0, [r2]\n\ + ldr r0, _080D39A0 @ =gBattleAnimBankAttacker\n\ + ldrb r0, [r0]\n\ + bl GetBankSide\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0x1\n\ + bne _080D39A8\n\ + ldr r0, _080D39A4 @ =gUnknown_08E70968\n\ + b _080D39AA\n\ + .align 2, 0\n\ +_080D398C: .4byte REG_BLDCNT\n\ +_080D3990: .4byte 0x00003f42\n\ +_080D3994: .4byte REG_BG1CNT\n\ +_080D3998: .4byte 0x040000d4\n\ +_080D399C: .4byte 0x85000400\n\ +_080D39A0: .4byte gBattleAnimBankAttacker\n\ +_080D39A4: .4byte gUnknown_08E70968\n\ +_080D39A8:\n\ + ldr r0, _080D39B4 @ =gUnknown_08E70C38\n\ +_080D39AA:\n\ + ldr r1, [sp, 0x4]\n\ + bl LZDecompressVram\n\ + b _080D39CE\n\ + .align 2, 0\n\ +_080D39B4: .4byte gUnknown_08E70C38\n\ +_080D39B8:\n\ + ldr r0, _080D39F0 @ =gUnknown_08E70F0C\n\ + ldr r1, [sp, 0x4]\n\ + bl LZDecompressVram\n\ + mov r0, sp\n\ + ldrb r0, [r0, 0x8]\n\ + ldr r1, [sp, 0x4]\n\ + movs r2, 0\n\ + movs r3, 0x1\n\ + bl sub_80763FC\n\ +_080D39CE:\n\ + ldr r0, _080D39F4 @ =gBattleAnimBackgroundImage_Surf\n\ + ldr r1, [sp]\n\ + bl LZDecompressVram\n\ + ldr r0, _080D39F8 @ =gBattleAnimArgs\n\ + movs r1, 0\n\ + ldrsh r0, [r0, r1]\n\ + cmp r0, 0\n\ + bne _080D3A00\n\ + ldr r0, _080D39FC @ =gBattleAnimBackgroundPalette_Surf\n\ + mov r1, sp\n\ + ldrb r1, [r1, 0x8]\n\ + lsls r1, 4\n\ + movs r2, 0x20\n\ + bl LoadCompressedPalette\n\ + b _080D3A0E\n\ + .align 2, 0\n\ +_080D39F0: .4byte gUnknown_08E70F0C\n\ +_080D39F4: .4byte gBattleAnimBackgroundImage_Surf\n\ +_080D39F8: .4byte gBattleAnimArgs\n\ +_080D39FC: .4byte gBattleAnimBackgroundPalette_Surf\n\ +_080D3A00:\n\ + ldr r0, _080D3A78 @ =gBattleAnimBackgroundImageMuddyWater_Pal\n\ + mov r1, sp\n\ + ldrb r1, [r1, 0x8]\n\ + lsls r1, 4\n\ + movs r2, 0x20\n\ + bl LoadCompressedPalette\n\ +_080D3A0E:\n\ + ldr r0, _080D3A7C @ =sub_80D3D68\n\ + ldr r4, _080D3A80 @ =gTasks\n\ + mov r2, r10\n\ + lsls r5, r2, 2\n\ + adds r1, r5, r2\n\ + lsls r1, 3\n\ + adds r6, r1, r4\n\ + ldrb r1, [r6, 0x7]\n\ + adds r1, 0x1\n\ + lsls r1, 24\n\ + lsrs r1, 24\n\ + bl CreateTask\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + mov r8, r0\n\ + movs r3, 0\n\ + mov r9, r3\n\ + mov r0, r8\n\ + strh r0, [r6, 0x26]\n\ + mov r1, r8\n\ + lsls r0, r1, 2\n\ + add r0, r8\n\ + lsls r0, 3\n\ + adds r7, r0, r4\n\ + mov r2, r9\n\ + strh r2, [r7, 0x8]\n\ + movs r0, 0x80\n\ + lsls r0, 5\n\ + strh r0, [r7, 0xA]\n\ + strh r0, [r7, 0xC]\n\ + bl NotInBattle\n\ + lsls r0, 24\n\ + lsrs r4, r0, 24\n\ + cmp r4, 0\n\ + beq _080D3A94\n\ + ldr r3, _080D3A84 @ =0x0000ffb0\n\ + adds r0, r3, 0\n\ + ldr r1, _080D3A88 @ =gUnknown_030042C0\n\ + strh r0, [r1]\n\ + ldr r2, _080D3A8C @ =0x0000ffd0\n\ + adds r0, r2, 0\n\ + ldr r3, _080D3A90 @ =gUnknown_030041B4\n\ + strh r0, [r3]\n\ + movs r0, 0x2\n\ + strh r0, [r6, 0x8]\n\ + movs r0, 0x1\n\ + strh r0, [r6, 0xA]\n\ + mov r0, r9\n\ + strh r0, [r7, 0xE]\n\ + b _080D3AEE\n\ + .align 2, 0\n\ +_080D3A78: .4byte gBattleAnimBackgroundImageMuddyWater_Pal\n\ +_080D3A7C: .4byte sub_80D3D68\n\ +_080D3A80: .4byte gTasks\n\ +_080D3A84: .4byte 0x0000ffb0\n\ +_080D3A88: .4byte gUnknown_030042C0\n\ +_080D3A8C: .4byte 0x0000ffd0\n\ +_080D3A90: .4byte gUnknown_030041B4\n\ +_080D3A94:\n\ + ldr r0, _080D3AC4 @ =gBattleAnimBankAttacker\n\ + ldrb r0, [r0]\n\ + bl GetBankSide\n\ + lsls r0, 24\n\ + lsrs r1, r0, 24\n\ + cmp r1, 0x1\n\ + bne _080D3AD8\n\ + ldr r2, _080D3AC8 @ =0x0000ff20\n\ + adds r0, r2, 0\n\ + ldr r3, _080D3ACC @ =gUnknown_030042C0\n\ + strh r0, [r3]\n\ + movs r2, 0x80\n\ + lsls r2, 1\n\ + adds r0, r2, 0\n\ + ldr r3, _080D3AD0 @ =gUnknown_030041B4\n\ + strh r0, [r3]\n\ + movs r0, 0x2\n\ + strh r0, [r6, 0x8]\n\ + ldr r0, _080D3AD4 @ =0x0000ffff\n\ + strh r0, [r6, 0xA]\n\ + strh r1, [r7, 0xE]\n\ + b _080D3AEE\n\ + .align 2, 0\n\ +_080D3AC4: .4byte gBattleAnimBankAttacker\n\ +_080D3AC8: .4byte 0x0000ff20\n\ +_080D3ACC: .4byte gUnknown_030042C0\n\ +_080D3AD0: .4byte gUnknown_030041B4\n\ +_080D3AD4: .4byte 0x0000ffff\n\ +_080D3AD8:\n\ + ldr r0, _080D3B1C @ =gUnknown_030042C0\n\ + strh r4, [r0]\n\ + ldr r1, _080D3B20 @ =0x0000ffd0\n\ + adds r0, r1, 0\n\ + ldr r2, _080D3B24 @ =gUnknown_030041B4\n\ + strh r0, [r2]\n\ + ldr r0, _080D3B28 @ =0x0000fffe\n\ + strh r0, [r6, 0x8]\n\ + movs r0, 0x1\n\ + strh r0, [r6, 0xA]\n\ + strh r4, [r7, 0xE]\n\ +_080D3AEE:\n\ + ldr r1, _080D3B2C @ =REG_BG1HOFS\n\ + ldr r3, _080D3B1C @ =gUnknown_030042C0\n\ + ldrh r0, [r3]\n\ + strh r0, [r1]\n\ + adds r1, 0x2\n\ + ldr r2, _080D3B24 @ =gUnknown_030041B4\n\ + ldrh r0, [r2]\n\ + strh r0, [r1]\n\ + ldr r1, _080D3B30 @ =gTasks\n\ + mov r3, r8\n\ + lsls r0, r3, 2\n\ + add r0, r8\n\ + lsls r0, 3\n\ + adds r2, r0, r1\n\ + movs r3, 0xE\n\ + ldrsh r0, [r2, r3]\n\ + cmp r0, 0\n\ + bne _080D3B34\n\ + movs r0, 0x30\n\ + strh r0, [r2, 0x10]\n\ + movs r0, 0x70\n\ + b _080D3B38\n\ + .align 2, 0\n\ +_080D3B1C: .4byte gUnknown_030042C0\n\ +_080D3B20: .4byte 0x0000ffd0\n\ +_080D3B24: .4byte gUnknown_030041B4\n\ +_080D3B28: .4byte 0x0000fffe\n\ +_080D3B2C: .4byte REG_BG1HOFS\n\ +_080D3B30: .4byte gTasks\n\ +_080D3B34:\n\ + movs r0, 0\n\ + strh r0, [r2, 0x10]\n\ +_080D3B38:\n\ + strh r0, [r2, 0x12]\n\ + mov r2, r10\n\ + adds r0, r5, r2\n\ + lsls r0, 3\n\ + adds r0, r1\n\ + movs r1, 0x1\n\ + strh r1, [r0, 0x14]\n\ + ldr r1, _080D3B5C @ =sub_80D3B60\n\ + str r1, [r0]\n\ + add sp, 0x14\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_080D3B5C: .4byte sub_80D3B60\n\ + .syntax divided\n"); +} diff --git a/src/rom_8077ABC.c b/src/rom_8077ABC.c index 8fea7f710..ec7d5fdb8 100644 --- a/src/rom_8077ABC.c +++ b/src/rom_8077ABC.c @@ -70,12 +70,6 @@ struct Color { u16 b:5; }; -struct Struct_sub_8078914 { - u8 *field_0; - u8 *field_4; - u8 field_8; -}; - struct BGCnt { u16 priority:2; u16 charBase:2; -- cgit v1.2.3 From 66c2dccd72f7b0d00517bab91af61a2d58126059 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Mon, 18 Dec 2017 17:14:25 -0600 Subject: Decompile battle_anim noise --- src/battle/anim/noise.c | 56 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 src/battle/anim/noise.c (limited to 'src') diff --git a/src/battle/anim/noise.c b/src/battle/anim/noise.c new file mode 100644 index 000000000..78953d96a --- /dev/null +++ b/src/battle/anim/noise.c @@ -0,0 +1,56 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "battle_anim.h" + +extern s16 gBattleAnimArgs[8]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +static void sub_80D2E30(struct Sprite *); + +// noise (moving music note) +// Used in Uproar. + +void sub_80D2D68(struct Sprite* sprite) +{ + int var1; + u8 slot = gBattleAnimArgs[0] == 0 ? gBattleAnimBankAttacker : gBattleAnimBankTarget; + + if (GetBankSide(slot) == 1) + { + gBattleAnimArgs[1] *= -1; + } + + sprite->pos1.x = sub_8077ABC(slot, 2) + gBattleAnimArgs[1]; + sprite->pos1.y = sub_8077ABC(slot, 3) + gBattleAnimArgs[2]; + sprite->data[0] = 0; + sprite->data[1] = (u16)sprite->pos1.x << 3; + sprite->data[2] = (u16)sprite->pos1.y << 3; + + var1 = gBattleAnimArgs[1] << 3; + if (var1 < 0) + var1 += 7; + sprite->data[3] = var1 >> 3; + + var1 = gBattleAnimArgs[2] << 3; + if (var1 < 0) + var1 += 7; + sprite->data[4] = var1 >> 3; + + sprite->oam.tileNum += gBattleAnimArgs[3] * 16; + sprite->callback = sub_80D2E30; +} + +static void sub_80D2E30(struct Sprite *sprite) +{ + sprite->data[1] += sprite->data[3]; + sprite->data[2] += sprite->data[4]; + + sprite->pos1.x = sprite->data[1] >> 3; + sprite->pos1.y = sprite->data[2] >> 3; + + if (++sprite->data[0] > 16) + { + move_anim_8072740(sprite); + } +} -- cgit v1.2.3 From e7a3951dafdf167f3e9d01a83320df701e81dda8 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Mon, 18 Dec 2017 20:46:26 -0600 Subject: Decompile battle_anim note_spin --- src/battle/anim/note_spin.c | 110 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 src/battle/anim/note_spin.c (limited to 'src') diff --git a/src/battle/anim/note_spin.c b/src/battle/anim/note_spin.c new file mode 100644 index 000000000..bdc0f4615 --- /dev/null +++ b/src/battle/anim/note_spin.c @@ -0,0 +1,110 @@ +#include "global.h" +#include "battle_anim.h" +#include "rom_8077ABC.h" +#include "trig.h" + +extern s16 gBattleAnimArgs[8]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +static void sub_80D2F80(struct Sprite *); +static void sub_80D2FA4(struct Sprite *); + +// note_spin (spins music notes around, and rotates them) +// Used in Perish Song. + +void sub_80D2E68(struct Sprite *sprite) +{ + if (sprite->data[0] == 0) + { + sprite->data[1] = 120 - gBattleAnimArgs[0]; + sprite->invisible = 1; + } + + if (++sprite->data[0] == sprite->data[1]) + { + sub_8079108(sprite->oam.paletteNum + 16, 0); + } + + if (sprite->data[0] == sprite->data[1] + 80) + { + move_anim_8072740(sprite); + } +} + +void sub_80D2EC8(struct Sprite *sprite) +{ + int index; + int var2; + + if (sprite->data[0] == 0) + { + sprite->pos1.x = 120; + sprite->pos1.y = (gBattleAnimArgs[0] + (((u16)gBattleAnimArgs[0]) >> 31)) / 2 - 15; + + StartSpriteAnim(sprite, gBattleAnimArgs[1]); + + sprite->data[5] = 120; + sprite->data[3] = gBattleAnimArgs[2]; + } + + sprite->data[0]++; + + sprite->data[1] = (sprite->data[0] + ((u16)sprite->data[0] >> 31)) / 2; + index = ((sprite->data[0] * 3) + (u16)sprite->data[3]); + var2 = 0xFF; + sprite->data[6] = (sprite->data[6] + 10) & 0xFF; + + index &= var2; + sprite->pos2.x = Cos(index, 100); + + sprite->pos2.y = sprite->data[1] + Sin(index, 10) + Cos(sprite->data[6], 4); + + if (sprite->data[0] > sprite->data[5]) + { + sprite->callback = sub_80D2F80; + + sprite->data[0] = 0; + oamt_add_pos2_onto_pos1(sprite); + sprite->data[2] = 5; + sprite->data[4] = 0; + sprite->data[3] = 0; + + StartSpriteAffineAnim(sprite, 1); + } +} + +static void sub_80D2F80(struct Sprite *sprite) +{ + if (++sprite->data[0] > 10) + { + sprite->data[0] = 0; + sprite->callback = sub_80D2FA4; + } +} + +static void sub_80D2FA4(struct Sprite *sprite) +{ + sprite->data[3] += sprite->data[2]; + sprite->pos2.y = sprite->data[3]; + + sprite->data[2]++; + + if (sprite->data[3] > 48 && sprite->data[2] > 0) + { + sprite->data[2] = sprite->data[4] - 5; + sprite->data[4]++; + } + + if (sprite->data[4] > 3) + { + int var1 = sprite->data[2]; + sprite->invisible = var1 - (((s32)(var1 + ((u32)var1 >> 31)) >> 1) << 1); + move_anim_8072740(sprite); + } + + if (sprite->data[4] == 4) + { + move_anim_8072740(sprite); + } +} -- cgit v1.2.3 From 9d648402ebc070e9f3f0ab245d667e30bf8e54b2 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Mon, 18 Dec 2017 21:16:02 -0600 Subject: Decompile battle_anim guard --- src/battle/anim/guard.c | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 src/battle/anim/guard.c (limited to 'src') diff --git a/src/battle/anim/guard.c b/src/battle/anim/guard.c new file mode 100644 index 000000000..4769db2e4 --- /dev/null +++ b/src/battle/anim/guard.c @@ -0,0 +1,34 @@ +#include "global.h" +#include "battle_anim.h" +#include "rom_8077ABC.h" + +extern s16 gBattleAnimArgs[8]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; +extern u16 gBattleTypeFlags; + +// guard (moves guard rings upwards) +// Used in Safeguard. + +void sub_80D3014(struct Sprite *sprite) +{ + if ((gBattleTypeFlags & 1) && IsAnimBankSpriteVisible(gBattleAnimBankAttacker ^ 2)) + { + sub_807A3FC(gBattleAnimBankAttacker, 0, &sprite->pos1.x, &sprite->pos1.y); + sprite->pos1.y += 40; + + StartSpriteAffineAnim(sprite, 1); + } + else + { + sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 0); + sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 1) + 40; + } + + sprite->data[0] = 13; + sprite->data[2] = sprite->pos1.x; + sprite->data[4] = sprite->pos1.y - 72; + + sprite->callback = sub_8078B34; + StoreSpriteCallbackInData(sprite, move_anim_8072740); +} -- cgit v1.2.3 From 1e40c9572a59aa1a178ba634a5b130bb7b511a04 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Tue, 19 Dec 2017 10:01:24 -0600 Subject: Decompile battle_anim fury_cutter_count --- src/battle/anim/fury_cutter_count.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 src/battle/anim/fury_cutter_count.c (limited to 'src') diff --git a/src/battle/anim/fury_cutter_count.c b/src/battle/anim/fury_cutter_count.c new file mode 100644 index 000000000..17b084585 --- /dev/null +++ b/src/battle/anim/fury_cutter_count.c @@ -0,0 +1,20 @@ +#include "global.h" +#include "battle_anim.h" + +extern s16 gBattleAnimArgs[8]; +extern u8 *gDisableStructMoveAnim; // TODO: this is declared with a different type in different files + +// fury_cutter (updates the direction and count of the fury cutter animation) +// Used in Fury Cutter. + +void UpdateFuryCutterAnimDirection(u8 taskId) +{ + gBattleAnimArgs[7] = gDisableStructMoveAnim[16] & 1; + DestroyAnimVisualTask(taskId); +} + +void UpdateFuryCutterAnimCount(u8 taskId) +{ + gBattleAnimArgs[7] = gDisableStructMoveAnim[16]; + DestroyAnimVisualTask(taskId); +} -- cgit v1.2.3 From 48d4388347e885038609766d044b8aaaad38dc5a Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Tue, 19 Dec 2017 10:26:58 -0600 Subject: Decompile battle_anim rain --- src/battle/anim/rain.c | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 src/battle/anim/rain.c (limited to 'src') diff --git a/src/battle/anim/rain.c b/src/battle/anim/rain.c new file mode 100644 index 000000000..b38233e3c --- /dev/null +++ b/src/battle/anim/rain.c @@ -0,0 +1,56 @@ +#include "global.h" +#include "battle_anim.h" +#include "random.h" +#include "sprite.h" +#include "task.h" + +extern s16 gBattleAnimArgs[8]; +extern const struct SpriteTemplate gSpriteTemplate_83D9130[]; + +static void MoveAnimRaindrop(struct Sprite *); + +// rain (spawns and animates raindrops) +// Used in Rain Dance and general rain animation. + +void CreateAnimRaindrops(u8 taskId) +{ + if (gTasks[taskId].data[0] == 0) + { + gTasks[taskId].data[1] = gBattleAnimArgs[0]; + gTasks[taskId].data[2] = gBattleAnimArgs[1]; + gTasks[taskId].data[3] = gBattleAnimArgs[2]; + } + + gTasks[taskId].data[0]++; + + if (gTasks[taskId].data[0] % gTasks[taskId].data[2] == 1) + { + u8 x = Random() % 240; + u8 y = Random() % 80; + CreateSprite(gSpriteTemplate_83D9130, x, y, 4); + } + + if (gTasks[taskId].data[0] == gTasks[taskId].data[3]) + { + DestroyAnimVisualTask(taskId); + } +} + +void SetAnimRaindropCallback(struct Sprite *sprite) +{ + sprite->callback = MoveAnimRaindrop; +} + +static void MoveAnimRaindrop(struct Sprite *sprite) +{ + if (++sprite->data[0] <= 13) + { + sprite->pos2.x++; + sprite->pos2.y += 4; + } + + if (sprite->animEnded) + { + DestroySprite(sprite); + } +} -- cgit v1.2.3 From 652ea061a1795b78e9b066381df33a53292c8d9a Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Tue, 19 Dec 2017 11:53:13 -0600 Subject: Decompile battle_anim energy_wave --- src/battle/anim/energy_wave.c | 162 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 162 insertions(+) create mode 100644 src/battle/anim/energy_wave.c (limited to 'src') diff --git a/src/battle/anim/energy_wave.c b/src/battle/anim/energy_wave.c new file mode 100644 index 000000000..ffba5c300 --- /dev/null +++ b/src/battle/anim/energy_wave.c @@ -0,0 +1,162 @@ +#include "global.h" +#include "battle_anim.h" +#include "rom_8077ABC.h" +#include "sprite.h" +#include "task.h" +#include "trig.h" + +extern s16 gBattleAnimArgs[8]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; +extern const struct SpriteTemplate gSpriteTemplate_83D9130[]; + +static void sub_80D35DC(struct Sprite *); +static void sub_80D365C(u8); +static void sub_80D370C(struct Sprite *); + +// energy_wave (animates steady "waves" of energy) +// Used in Hydro Pump, Mud Shot, Signal Beam, Flamethrower, Psywave, and +// Hydro Cannon. + +void sub_80D3554(struct Sprite *sprite) +{ + sub_80787B0(sprite, 1); + + sprite->data[0] = 30; + sprite->data[1] = sprite->pos1.x; + sprite->data[2] = sub_8077ABC(gBattleAnimBankTarget, 2); + sprite->data[3] = sprite->pos1.y; + sprite->data[4] = sub_8077ABC(gBattleAnimBankTarget, 3); + + obj_translate_based_on_private_1_2_3_4(sprite); + + sprite->data[5] = 0xD200 / sprite->data[0]; + sprite->data[7] = gBattleAnimArgs[3]; + + if (gBattleAnimArgs[7] > 127) + { + sprite->data[6] = (gBattleAnimArgs[7] - 127) << 8; + sprite->data[7] = -sprite->data[7]; + } + else + { + sprite->data[6] = gBattleAnimArgs[7] << 8; + } + + sprite->callback = sub_80D35DC; + sprite->callback(sprite); +} + +static void sub_80D35DC(struct Sprite *sprite) +{ + if (sub_8078B5C(sprite)) + { + move_anim_8072740(sprite); + } + + sprite->pos2.y += Sin(sprite->data[6] >> 8, sprite->data[7]); + if (((sprite->data[6] + sprite->data[5]) >> 8) > 127) + { + sprite->data[6] = 0; + sprite->data[7] = -sprite->data[7]; + } + else + { + sprite->data[6] += sprite->data[5]; + } +} + +void sub_80D3630(u8 taskId) +{ + gTasks[taskId].data[0] = gBattleAnimArgs[0]; + gBattleAnimArgs[7] = 0; + gTasks[taskId].func = sub_80D365C; +} + +static void sub_80D365C(u8 taskId) +{ + gBattleAnimArgs[7] = (gBattleAnimArgs[7] + 3) & 0xFF; + if (--gTasks[taskId].data[0] == 0) + { + DestroyAnimVisualTask(taskId); + } +} + +void sub_80D3698(struct Sprite *sprite) +{ + u8 subpriority; + + sprite->pos1.x = sub_8077ABC(gBattleAnimBankAttacker, 0); + sprite->pos1.y = sub_8077ABC(gBattleAnimBankAttacker, 1); + sprite->pos2.y = -10; + + subpriority = sub_8079E90(gBattleAnimBankAttacker); + + if (!NotInBattle()) + { + if (GetBankSide(gBattleAnimBankAttacker) == 0) + { + sprite->pos2.x = 10; + sprite->subpriority = subpriority + 2; + } + else + { + sprite->pos2.x = -10; + sprite->subpriority = subpriority - 2; + } + } + else + { + sprite->pos2.x = -10; + sprite->subpriority = subpriority + 2; + } + + sprite->callback = sub_80D370C; +} + +static void sub_80D370C(struct Sprite *sprite) +{ + if (sprite->affineAnimEnded) + { + move_anim_8072740(sprite); + } +} + +void sub_80D3728(struct Sprite *sprite) +{ + int var1, var2; + + if (GetBankSide(gBattleAnimBankAttacker) == GetBankSide(gBattleAnimBankTarget)) + { + gBattleAnimArgs[0] *= -1; + + if (GetBankIdentity(gBattleAnimBankAttacker) == 0 || GetBankIdentity(gBattleAnimBankAttacker) == 1) + { + gBattleAnimArgs[0] *= -1; + } + + } + + if ((gBattleAnimArgs[5] & 0xFF00) == 0) + var1 = 1; + else + var1 = 0; + + if ((u8)gBattleAnimArgs[5] == 0) + var2 = 3; + else + var2 = 1; + + sub_80787B0(sprite, var1); + + if (GetBankSide(gBattleAnimBankAttacker) != 0) + { + gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + } + + sprite->data[0] = gBattleAnimArgs[4]; + sprite->data[2] = sub_8077ABC(gBattleAnimBankTarget, 2) + gBattleAnimArgs[2]; + sprite->data[4] = sub_8077ABC(gBattleAnimBankTarget, var2) + gBattleAnimArgs[3]; + sprite->callback = sub_8078B34; + StoreSpriteCallbackInData(sprite, move_anim_8072740); +} -- cgit v1.2.3 From 5cdafb90dda83aa270b8fcf34051478da9ec82d9 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Tue, 19 Dec 2017 12:00:05 -0600 Subject: Decompile battle_anim sunlight --- src/battle/anim/sunlight.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 src/battle/anim/sunlight.c (limited to 'src') diff --git a/src/battle/anim/sunlight.c b/src/battle/anim/sunlight.c new file mode 100644 index 000000000..f6cb8a077 --- /dev/null +++ b/src/battle/anim/sunlight.c @@ -0,0 +1,17 @@ +#include "global.h" +#include "battle_anim.h" +#include "rom_8077ABC.h" + +// sunlight (creates sunlight orbs) +// Used in Sunny Day + +void sub_80D517C(struct Sprite *sprite) +{ + sprite->pos1.x = 0; + sprite->pos1.y = 0; + sprite->data[0] = 60; + sprite->data[2] = 140; + sprite->data[4] = 80; + sprite->callback = sub_8078B34; + StoreSpriteCallbackInData(sprite, move_anim_8072740); +} -- cgit v1.2.3 From 030611fd93070a802f581c0cbb882fc21d553307 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Tue, 19 Dec 2017 14:51:10 -0600 Subject: Decompile battle_anim heated_rock --- src/battle/anim/heated_rock.c | 205 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 205 insertions(+) create mode 100644 src/battle/anim/heated_rock.c (limited to 'src') diff --git a/src/battle/anim/heated_rock.c b/src/battle/anim/heated_rock.c new file mode 100644 index 000000000..1d59669cf --- /dev/null +++ b/src/battle/anim/heated_rock.c @@ -0,0 +1,205 @@ +#include "global.h" +#include "battle_anim.h" +#include "rom_8077ABC.h" + +extern s16 gBattleAnimArgs[8]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; +extern u16 gBattleTypeFlags; + +void sub_80D59B0(struct Sprite *); +static void sub_80D5A74(struct Sprite *); + +// heated_rock (moves heated rock sprites) +// Used in Eruption. + +void sub_80D58FC(struct Sprite *sprite) +{ + sub_80D59B0(sprite); + + if (sprite->invisible) + { + gTasks[sprite->data[6]].data[sprite->data[7]]--; + DestroySprite(sprite); + } +} + +u16 sub_80D5940(u8 spriteId) +{ + u16 var1 = gSprites[spriteId].pos1.y + gSprites[spriteId].pos2.y + gSprites[spriteId].centerToCornerVecY; + + if (GetBankSide(gBattleAnimBankAttacker) == 0) + { + var1 = ((var1 << 16) + 0x4A0000) >> 16; + } + else + { + var1 = ((var1 << 16) + 0x2C0000) >> 16; + } + + return var1; +} + +void sub_80D5994(struct Sprite *sprite, s16 x, s16 y) +{ + sprite->data[0] = 0; + sprite->data[1] = 0; + sprite->data[2] = (u16)sprite->pos1.x * 8; + sprite->data[3] = (u16)sprite->pos1.y * 8; + sprite->data[4] = x * 8; + sprite->data[5] = y * 8; +} + +#ifdef NONMATCHING +void sub_80D59B0(struct Sprite *sprite) +{ + int var1; + int var2; + + if (++sprite->data[0] > 2) + { + sprite->data[0] = 0; + ++sprite->data[1]; + sprite->data[3] += ((u16)sprite->data[1] * (u16)sprite->data[1]); + } + + var1 = (u16)sprite->data[4] + (u16)sprite->data[2]; + sprite->data[2] = var1; + var1 = (s16)var1 >> 3; + sprite->pos1.x = var1; + + var2 = (u16)sprite->data[5] + (u16)sprite->data[3]; + sprite->data[3] = var2; + var2 = (s16)var2 >> 3; + sprite->pos1.y = var2; + + if ((u32)((var1 + 8) << 16) > 0x1000000 || var2 < -8 || var2 > 120) + { + sprite->invisible = 1; + } +} +#else +__attribute__((naked)) +void sub_80D59B0(struct Sprite *sprite) +{ + asm(".syntax unified\n\ + push {lr}\n\ + adds r2, r0, 0\n\ + ldrh r0, [r2, 0x2E]\n\ + adds r0, 0x1\n\ + strh r0, [r2, 0x2E]\n\ + lsls r0, 16\n\ + asrs r0, 16\n\ + cmp r0, 0x2\n\ + ble _080D59DA\n\ + movs r0, 0\n\ + strh r0, [r2, 0x2E]\n\ + ldrh r0, [r2, 0x30]\n\ + adds r0, 0x1\n\ + strh r0, [r2, 0x30]\n\ + ldrh r0, [r2, 0x30]\n\ + adds r1, r0, 0\n\ + muls r1, r0\n\ + adds r0, r1, 0\n\ + ldrh r3, [r2, 0x34]\n\ + adds r0, r3\n\ + strh r0, [r2, 0x34]\n\ +_080D59DA:\n\ + ldrh r0, [r2, 0x36]\n\ + ldrh r1, [r2, 0x32]\n\ + adds r0, r1\n\ + strh r0, [r2, 0x32]\n\ + lsls r0, 16\n\ + asrs r0, 19\n\ + strh r0, [r2, 0x20]\n\ + ldrh r1, [r2, 0x38]\n\ + ldrh r3, [r2, 0x34]\n\ + adds r1, r3\n\ + strh r1, [r2, 0x34]\n\ + lsls r1, 16\n\ + asrs r3, r1, 19\n\ + strh r3, [r2, 0x22]\n\ + adds r0, 0x8\n\ + lsls r0, 16\n\ + movs r1, 0x80\n\ + lsls r1, 17\n\ + cmp r0, r1\n\ + bhi _080D5A10\n\ + adds r1, r3, 0\n\ + movs r0, 0x8\n\ + negs r0, r0\n\ + cmp r1, r0\n\ + blt _080D5A10\n\ + cmp r1, 0x78\n\ + ble _080D5A1C\n\ +_080D5A10:\n\ + adds r0, r2, 0\n\ + adds r0, 0x3E\n\ + ldrb r1, [r0]\n\ + movs r2, 0x4\n\ + orrs r1, r2\n\ + strb r1, [r0]\n\ +_080D5A1C:\n\ + pop {r0}\n\ + bx r0\n\ + .syntax divided\n"); +} +#endif // NONMATCHING + +void sub_80D5A20(struct Sprite *sprite) +{ + sprite->pos1.x = gBattleAnimArgs[0]; + sprite->pos1.y = gBattleAnimArgs[1]; + + sprite->data[0] = 0; + sprite->data[1] = 0; + sprite->data[2] = 0; + sprite->data[6] = gBattleAnimArgs[2]; + sprite->data[7] = gBattleAnimArgs[3]; + + sprite->oam.tileNum += gBattleAnimArgs[4] * 16; + sprite->callback = sub_80D5A74; +} + +static void sub_80D5A74(struct Sprite *sprite) +{ + switch (sprite->data[0]) + { + case 0: + if (sprite->data[6] != 0) + { + sprite->data[6]--; + return; + } + + sprite->data[0]++; + // fall through + case 1: + sprite->pos1.y += 8; + if (sprite->pos1.y >= sprite->data[7]) + { + sprite->pos1.y = sprite->data[7]; + sprite->data[0]++; + } + break; + case 2: + if (++sprite->data[1] > 1) + { + sprite->data[1] = 0; + if ((++sprite->data[2] & 1) != 0) + { + sprite->pos2.y = -3; + } + else + { + sprite->pos2.y = 3; + } + } + + if (++sprite->data[3] > 16) + { + move_anim_8072740(sprite); + } + break; + } +} -- cgit v1.2.3 From f17a25cdc3a944be2a8ea5d8ec97f75047e99e2c Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Tue, 19 Dec 2017 15:44:14 -0600 Subject: Decompile battle_anim wisp_orb --- src/battle/anim/wisp_orb.c | 105 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 src/battle/anim/wisp_orb.c (limited to 'src') diff --git a/src/battle/anim/wisp_orb.c b/src/battle/anim/wisp_orb.c new file mode 100644 index 000000000..0e13fa119 --- /dev/null +++ b/src/battle/anim/wisp_orb.c @@ -0,0 +1,105 @@ +#include "global.h" +#include "battle_anim.h" +#include "constants/songs.h" +#include "rom_8077ABC.h" +#include "sound.h" +#include "trig.h" + +extern s16 gBattleAnimArgs[8]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; +extern u16 gBattleTypeFlags; +extern u8 gUnknown_0202F7D2; + +static void sub_80D5C5C(struct Sprite *); + +// wisp_orb (animates the wisp orbs) +// Used in Will-O-Wisp + +void sub_80D5B0C(struct Sprite *sprite) +{ + switch (sprite->data[0]) + { + case 0: + sub_80787B0(sprite, 0); + StartSpriteAnim(sprite, gBattleAnimArgs[2]); + sprite->data[7] = gBattleAnimArgs[2]; + + if (GetBankSide(gBattleAnimBankAttacker) != 0) + { + sprite->data[4] = 4; + } + else + { + sprite->data[4] = -4; + } + + sprite->oam.priority = sub_8079ED4(gBattleAnimBankTarget); + sprite->data[0]++; + break; + case 1: + sprite->data[1] += 192; + if (GetBankSide(gBattleAnimBankAttacker) != 0) + { + sprite->pos2.y = -(sprite->data[1] >> 8); + } + else + { + sprite->pos2.y = sprite->data[1] >> 8; + } + + sprite->pos2.x = Sin(sprite->data[2], sprite->data[4]); + sprite->data[2] = (sprite->data[2] + 4) & 0xFF; + + if (++sprite->data[3] == 1) + { + sprite->data[3] = 0; + sprite->data[0]++; + } + break; + case 2: + sprite->pos2.x = Sin(sprite->data[2], sprite->data[4]); + sprite->data[2] = (sprite->data[2] + 4) & 0xFF; + + if (++sprite->data[3] == 31) + { + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.y = 0; + sprite->pos2.x = 0; + + sprite->data[0] = 256; + sprite->data[1] = sprite->pos1.x; + sprite->data[2] = sub_8077ABC(gBattleAnimBankTarget, 2); + sprite->data[3] = sprite->pos1.y; + sprite->data[4] = sub_8077ABC(gBattleAnimBankTarget, 3); + + sub_8078BD4(sprite); + sprite->callback = sub_80D5C5C; + } + break; + } +} + +static void sub_80D5C5C(struct Sprite *sprite) +{ + s16 initialData5; + s16 newData5; + + if (!sub_8078B5C(sprite)) + { + sprite->pos2.x += Sin(sprite->data[5], 16); + initialData5 = sprite->data[5]; + sprite->data[5] = (sprite->data[5] + 4) & 0xFF; + newData5 = sprite->data[5]; + + if ((initialData5 == 0 || initialData5 > 196) && newData5 > 0 && sprite->data[7] == 0) + { + PlaySE12WithPanning(SE_W172, gUnknown_0202F7D2); + } + } + else + { + move_anim_8072740(sprite); + } +} -- cgit v1.2.3 From 5f32e88a6abb90507ddcac68673e35de8b4d8c26 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Tue, 19 Dec 2017 20:43:18 -0600 Subject: Decompile battle_anim thunder --- src/battle/anim/thunder.c | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 src/battle/anim/thunder.c (limited to 'src') diff --git a/src/battle/anim/thunder.c b/src/battle/anim/thunder.c new file mode 100644 index 000000000..5064148ef --- /dev/null +++ b/src/battle/anim/thunder.c @@ -0,0 +1,36 @@ +#include "global.h" +#include "battle_anim.h" +#include "rom_8077ABC.h" + +extern s16 gBattleAnimArgs[8]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; +extern u16 gBattleTypeFlags; + +static void sub_80D6218(struct Sprite *); + +// thunder (positions the lightning bolts) +// Used in Thunder, Thunder Punch, and Tri Attack. + +void sub_80D61C8(struct Sprite *sprite) +{ + if (GetBankSide(gBattleAnimBankAttacker) != 0) + { + sprite->pos1.x -= gBattleAnimArgs[0]; + } + else + { + sprite->pos1.x += gBattleAnimArgs[0]; + } + + sprite->pos1.y += gBattleAnimArgs[1]; + sprite->callback = sub_80D6218; +} + +static void sub_80D6218(struct Sprite *sprite) +{ + if (sprite->animEnded) + { + move_anim_8072740(sprite); + } +} -- cgit v1.2.3 From ad33b833f35800ff2cfc13aaca09e2e57842703a Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Wed, 20 Dec 2017 11:25:54 -0600 Subject: Decompile battle_anim shock --- src/battle/anim/shock.c | 106 ++++++++++++++++++++++++++++++++++++++++++++++++ src/engine/sprite.c | 8 ---- src/rom_8077ABC.c | 7 ---- 3 files changed, 106 insertions(+), 15 deletions(-) create mode 100644 src/battle/anim/shock.c (limited to 'src') diff --git a/src/battle/anim/shock.c b/src/battle/anim/shock.c new file mode 100644 index 000000000..35c380f23 --- /dev/null +++ b/src/battle/anim/shock.c @@ -0,0 +1,106 @@ +#include "global.h" +#include "battle_anim.h" +#include "rom_8077ABC.h" +#include "trig.h" + +extern s16 gBattleAnimArgs[8]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; +extern struct OamMatrix gOamMatrices[]; + +extern void sub_80DA48C(struct Sprite *); + +// shock (moves the little electricity lines) +// Used in Shock. + +void sub_80D6294(struct Sprite *sprite) +{ + sprite->pos1.x = sub_8077ABC(gBattleAnimBankTarget, 2); + sprite->pos1.y = sub_8077ABC(gBattleAnimBankTarget, 3); + + if (GetBankSide(gBattleAnimBankAttacker) != 0) + { + sprite->pos1.x -= gBattleAnimArgs[0]; + sprite->pos1.y -= gBattleAnimArgs[1]; + } + else + { + sprite->pos1.x += gBattleAnimArgs[0]; + sprite->pos1.y += gBattleAnimArgs[1]; + } + + sprite->data[0] = 0; + sprite->data[1] = gBattleAnimArgs[2]; + sprite->data[2] = gBattleAnimArgs[3]; + sprite->data[3] = gBattleAnimArgs[4]; + + StoreSpriteCallbackInData(sprite, move_anim_8074EE0); + sprite->callback = sub_8078114; +} + +void sub_80D6328(struct Sprite *sprite) +{ + u8 slot; + u32 matrixNum; + s16 sineVal; + + switch (gBattleAnimArgs[4]) + { + case 0: + slot = gBattleAnimBankAttacker; + break; + case 1: + default: + slot = gBattleAnimBankTarget; + break; + case 2: + if (!IsAnimBankSpriteVisible(gBattleAnimBankAttacker ^ 2)) + { + slot = gBattleAnimBankAttacker; + } + else + { + slot = gBattleAnimBankAttacker ^ 2; + } + break; + case 3: + if (IsAnimBankSpriteVisible(gBattleAnimBankAttacker ^ 2)) + { + slot = gBattleAnimBankTarget ^ 2; + } + else + { + slot = gBattleAnimBankTarget; + } + break; + } + + if (gBattleAnimArgs[5] == 0) + { + sprite->pos1.x = sub_8077ABC(slot, 0); + sprite->pos1.y = sub_8077ABC(slot, 1); + } + else + { + sprite->pos1.x = sub_8077ABC(slot, 2); + sprite->pos1.y = sub_8077ABC(slot, 3); + } + + sprite->pos2.x = (gSineTable[gBattleAnimArgs[0]] * gBattleAnimArgs[1]) >> 8; + sprite->pos2.y = (gSineTable[gBattleAnimArgs[0] + 64] * gBattleAnimArgs[1]) >> 8; + + if (gBattleAnimArgs[6] & 1) + { + sprite->oam.priority = sub_8079ED4(slot) + 1; + } + + matrixNum = sprite->oam.matrixNum; + sineVal = gSineTable[gBattleAnimArgs[2]]; + + gOamMatrices[matrixNum].a = gOamMatrices[matrixNum].d = gSineTable[gBattleAnimArgs[2] + 64]; + gOamMatrices[matrixNum].b = sineVal; + gOamMatrices[matrixNum].c = -sineVal; + + sprite->data[0] = gBattleAnimArgs[3]; + sprite->callback = sub_80DA48C; +} diff --git a/src/engine/sprite.c b/src/engine/sprite.c index 69fa860c1..c1bb36917 100644 --- a/src/engine/sprite.c +++ b/src/engine/sprite.c @@ -26,14 +26,6 @@ #define SPRITE_TILE_IS_ALLOCATED(n) ((gSpriteTileAllocBitmap[(n) / 8] >> ((n) % 8)) & 1) -struct OamMatrix -{ - s16 a; - s16 b; - s16 c; - s16 d; -}; - struct SpriteCopyRequest { const u8 *src; diff --git a/src/rom_8077ABC.c b/src/rom_8077ABC.c index ec7d5fdb8..0ecaa9dcb 100644 --- a/src/rom_8077ABC.c +++ b/src/rom_8077ABC.c @@ -51,13 +51,6 @@ struct Struct_gUnknown_0837F578 { u8 field_1; }; -struct OamMatrix { - s16 a; - s16 b; - s16 c; - s16 d; -}; - struct Struct_2017810 { u8 filler_0[6]; u8 field_6; -- cgit v1.2.3 From 5e6bfe67a87e041ebdc9e0b573d1ae1f22b79d59 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Wed, 20 Dec 2017 11:34:56 -0600 Subject: Decompile battle_anim beta_beat_up --- src/battle/anim/beta_beat_up.c | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 src/battle/anim/beta_beat_up.c (limited to 'src') diff --git a/src/battle/anim/beta_beat_up.c b/src/battle/anim/beta_beat_up.c new file mode 100644 index 000000000..499e52a80 --- /dev/null +++ b/src/battle/anim/beta_beat_up.c @@ -0,0 +1,34 @@ +#include "global.h" +#include "battle_anim.h" +#include "rom_8077ABC.h" +#include "trig.h" + +extern s16 gBattleAnimArgs[8]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +static void sub_80D6278(struct Sprite *); + +// beta_beat_up + +void sub_80D6234(struct Sprite *sprite) +{ + if (GetBankSide(gBattleAnimBankAttacker) != 0) + { + sprite->pos1.x -= gBattleAnimArgs[0]; + } + else + { + sprite->pos1.x += gBattleAnimArgs[0]; + } + + sprite->callback = sub_80D6278; +} + +static void sub_80D6278(struct Sprite *sprite) +{ + if (sprite->affineAnimEnded) + { + move_anim_8074EE0(sprite); + } +} -- cgit v1.2.3 From a753c44277c050fb24aaf97a8947c7f54e0dacd7 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Wed, 20 Dec 2017 19:58:17 -0600 Subject: Use event script macro names from pokeemerald --- src/field/scrcmd.c | 102 ++++++++++++++++++++++++++--------------------------- 1 file changed, 51 insertions(+), 51 deletions(-) (limited to 'src') diff --git a/src/field/scrcmd.c b/src/field/scrcmd.c index e6305d9c4..f0cafcf1a 100644 --- a/src/field/scrcmd.c +++ b/src/field/scrcmd.c @@ -483,7 +483,7 @@ bool8 ScrCmd_random(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_additem(struct ScriptContext *ctx) +bool8 ScrCmd_giveitem(struct ScriptContext *ctx) { u16 itemId = VarGet(ScriptReadHalfword(ctx)); u32 quantity = VarGet(ScriptReadHalfword(ctx)); @@ -492,7 +492,7 @@ bool8 ScrCmd_additem(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_removeitem(struct ScriptContext *ctx) +bool8 ScrCmd_takeitem(struct ScriptContext *ctx) { u16 itemId = VarGet(ScriptReadHalfword(ctx)); u32 quantity = VarGet(ScriptReadHalfword(ctx)); @@ -527,7 +527,7 @@ bool8 ScrCmd_checkitemtype(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_addpcitem(struct ScriptContext *ctx) +bool8 ScrCmd_givepcitem(struct ScriptContext *ctx) { u16 itemId = VarGet(ScriptReadHalfword(ctx)); u16 quantity = VarGet(ScriptReadHalfword(ctx)); @@ -545,23 +545,23 @@ bool8 ScrCmd_checkpcitem(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_adddecor(struct ScriptContext *ctx) +bool8 ScrCmd_givedecoration(struct ScriptContext *ctx) { - u32 decorId = VarGet(ScriptReadHalfword(ctx)); + u32 decoration = VarGet(ScriptReadHalfword(ctx)); - gScriptResult = IsThereStorageSpaceForDecoration(decorId); + gScriptResult = IsThereStorageSpaceForDecoration(decoration); return FALSE; } -bool8 ScrCmd_removedecor(struct ScriptContext *ctx) +bool8 ScrCmd_takedecoration(struct ScriptContext *ctx) { - u32 decorId = VarGet(ScriptReadHalfword(ctx)); + u32 decoration = VarGet(ScriptReadHalfword(ctx)); - gScriptResult = sub_81340A8(decorId); + gScriptResult = sub_81340A8(decoration); return FALSE; } -bool8 ScrCmd_checkdecor(struct ScriptContext *ctx) +bool8 ScrCmd_checkdecorspace(struct ScriptContext *ctx) { u32 decorId = VarGet(ScriptReadHalfword(ctx)); @@ -569,7 +569,7 @@ bool8 ScrCmd_checkdecor(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_hasdecor(struct ScriptContext *ctx) +bool8 ScrCmd_checkdecor(struct ScriptContext *ctx) { u32 decorId = VarGet(ScriptReadHalfword(ctx)); @@ -601,14 +601,14 @@ bool8 ScrCmd_incrementgamestat(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_animdarklevel(struct ScriptContext *ctx) +bool8 ScrCmd_animateflash(struct ScriptContext *ctx) { sub_8081594(ScriptReadByte(ctx)); ScriptContext1_Stop(); return TRUE; } -bool8 ScrCmd_setdarklevel(struct ScriptContext *ctx) +bool8 ScrCmd_setflashradius(struct ScriptContext *ctx) { u16 flashLevel = VarGet(ScriptReadHalfword(ctx)); @@ -631,7 +631,7 @@ bool8 ScrCmd_fadescreen(struct ScriptContext *ctx) return TRUE; } -bool8 ScrCmd_fadescreendelay(struct ScriptContext *ctx) +bool8 ScrCmd_fadescreenspeed(struct ScriptContext *ctx) { u8 duration = ScriptReadByte(ctx); u8 delay = ScriptReadByte(ctx); @@ -702,7 +702,7 @@ bool8 ScrCmd_doweather(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_tileeffect(struct ScriptContext *ctx) +bool8 ScrCmd_setstepcallback(struct ScriptContext *ctx) { ActivatePerStepCallback(ScriptReadByte(ctx)); return FALSE; @@ -859,7 +859,7 @@ bool8 ScrCmd_getplayerxy(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_countpokemon(struct ScriptContext *ctx) +bool8 ScrCmd_getpartysize(struct ScriptContext *ctx) { gScriptResult = CalculatePlayerPartyCount(); return FALSE; @@ -1073,7 +1073,7 @@ bool8 ScrCmd_moveobjectoffscreen(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_showobject(struct ScriptContext *ctx) +bool8 ScrCmd_showobjectat(struct ScriptContext *ctx) { u16 localId = VarGet(ScriptReadHalfword(ctx)); u8 mapGroup = ScriptReadByte(ctx); @@ -1083,7 +1083,7 @@ bool8 ScrCmd_showobject(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_hideobject(struct ScriptContext *ctx) +bool8 ScrCmd_hideobjectat(struct ScriptContext *ctx) { u16 localId = VarGet(ScriptReadHalfword(ctx)); u8 mapGroup = ScriptReadByte(ctx); @@ -1267,7 +1267,7 @@ static bool8 WaitForAorBPress(void) return FALSE; } -bool8 ScrCmd_waitbutton(struct ScriptContext *ctx) +bool8 ScrCmd_waitbuttonpress(struct ScriptContext *ctx) { SetupNativeScript(ctx, WaitForAorBPress); return TRUE; @@ -1386,7 +1386,7 @@ bool8 ScrCmd_drawboxtext(struct ScriptContext *ctx) } } -bool8 ScrCmd_drawpokepic(struct ScriptContext *ctx) +bool8 ScrCmd_drawmonpic(struct ScriptContext *ctx) { u16 species = VarGet(ScriptReadHalfword(ctx)); u8 x = ScriptReadByte(ctx); @@ -1396,7 +1396,7 @@ bool8 ScrCmd_drawpokepic(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_erasepokepic(struct ScriptContext *ctx) +bool8 ScrCmd_erasemonpic(struct ScriptContext *ctx) { bool8 (*func)(void) = ScriptMenu_GetPicboxWaitFunc(); @@ -1441,7 +1441,7 @@ bool8 ScrCmd_vmessage(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_getspeciesname(struct ScriptContext *ctx) +bool8 ScrCmd_bufferspeciesname(struct ScriptContext *ctx) { u8 stringVarIndex = ScriptReadByte(ctx); u16 species = VarGet(ScriptReadHalfword(ctx)); @@ -1450,7 +1450,7 @@ bool8 ScrCmd_getspeciesname(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_getfirstpartypokename(struct ScriptContext *ctx) +bool8 ScrCmd_bufferleadmonspeciesname(struct ScriptContext *ctx) { u8 stringVarIndex = ScriptReadByte(ctx); @@ -1461,7 +1461,7 @@ bool8 ScrCmd_getfirstpartypokename(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_getpartypokename(struct ScriptContext *ctx) +bool8 ScrCmd_bufferpartymonnick(struct ScriptContext *ctx) { u8 stringVarIndex = ScriptReadByte(ctx); u16 partyIndex = VarGet(ScriptReadHalfword(ctx)); @@ -1471,7 +1471,7 @@ bool8 ScrCmd_getpartypokename(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_getitemname(struct ScriptContext *ctx) +bool8 ScrCmd_bufferitemname(struct ScriptContext *ctx) { u8 stringVarIndex = ScriptReadByte(ctx); u16 itemId = VarGet(ScriptReadHalfword(ctx)); @@ -1480,7 +1480,7 @@ bool8 ScrCmd_getitemname(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_getdecorname(struct ScriptContext *ctx) +bool8 ScrCmd_bufferdecorationname(struct ScriptContext *ctx) { u8 stringVarIndex = ScriptReadByte(ctx); u16 decorId = VarGet(ScriptReadHalfword(ctx)); @@ -1489,7 +1489,7 @@ bool8 ScrCmd_getdecorname(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_getmovename(struct ScriptContext *ctx) +bool8 ScrCmd_buffermovename(struct ScriptContext *ctx) { u8 stringVarIndex = ScriptReadByte(ctx); u16 moveId = VarGet(ScriptReadHalfword(ctx)); @@ -1498,7 +1498,7 @@ bool8 ScrCmd_getmovename(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_getnumberstring(struct ScriptContext *ctx) +bool8 ScrCmd_buffernumberstring(struct ScriptContext *ctx) { u8 stringVarIndex = ScriptReadByte(ctx); u16 v1 = VarGet(ScriptReadHalfword(ctx)); @@ -1508,7 +1508,7 @@ bool8 ScrCmd_getnumberstring(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_getstdstring(struct ScriptContext *ctx) +bool8 ScrCmd_bufferstdstring(struct ScriptContext *ctx) { u8 stringVarIndex = ScriptReadByte(ctx); u16 index = VarGet(ScriptReadHalfword(ctx)); @@ -1517,7 +1517,7 @@ bool8 ScrCmd_getstdstring(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_getstring(struct ScriptContext *ctx) +bool8 ScrCmd_bufferstring(struct ScriptContext *ctx) { u8 stringVarIndex = ScriptReadByte(ctx); u8 *text = (u8 *)ScriptReadWord(ctx); @@ -1526,7 +1526,7 @@ bool8 ScrCmd_getstring(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_vloadword(struct ScriptContext *ctx) +bool8 ScrCmd_vloadptr(struct ScriptContext *ctx) { u8 *ptr = (u8 *)(ScriptReadWord(ctx) - gUnknown_0202E8B0); @@ -1534,7 +1534,7 @@ bool8 ScrCmd_vloadword(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_vgetstring(struct ScriptContext *ctx) +bool8 ScrCmd_vbufferstring(struct ScriptContext *ctx) { u8 stringVarIndex = ScriptReadByte(ctx); u32 addr = ScriptReadWord(ctx); @@ -1545,7 +1545,7 @@ bool8 ScrCmd_vgetstring(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_givepoke(struct ScriptContext *ctx) +bool8 ScrCmd_givemon(struct ScriptContext *ctx) { u16 species = VarGet(ScriptReadHalfword(ctx)); u8 level = ScriptReadByte(ctx); @@ -1566,7 +1566,7 @@ bool8 ScrCmd_giveegg(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_setpokemove(struct ScriptContext *ctx) +bool8 ScrCmd_setmonmove(struct ScriptContext *ctx) { u8 partyIndex = ScriptReadByte(ctx); u8 slot = ScriptReadByte(ctx); @@ -1576,13 +1576,13 @@ bool8 ScrCmd_setpokemove(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_checkpokemove(struct ScriptContext *ctx) +bool8 ScrCmd_checkpartymove(struct ScriptContext *ctx) { u8 i; u16 moveId = ScriptReadHalfword(ctx); gScriptResult = 6; - for (i = 0; i < 6; i++) + for (i = 0; i < PARTY_SIZE; i++) { u16 species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES, NULL); if (!species) @@ -1692,19 +1692,19 @@ bool8 ScrCmd_trainerbattle(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_battlebegin(struct ScriptContext *ctx) +bool8 ScrCmd_trainerbattlebegin(struct ScriptContext *ctx) { BattleSetup_StartTrainerBattle(); return TRUE; } -bool8 ScrCmd_ontrainerbattleend(struct ScriptContext *ctx) +bool8 ScrCmd_gotopostbattlescript(struct ScriptContext *ctx) { ctx->scriptPtr = BattleSetup_GetScriptAddrAfterBattle(); return FALSE; } -bool8 ScrCmd_ontrainerbattleendgoto(struct ScriptContext *ctx) +bool8 ScrCmd_gotobeatenscript(struct ScriptContext *ctx) { ctx->scriptPtr = BattleSetup_GetTrainerPostBattleScript(); return FALSE; @@ -1760,7 +1760,7 @@ bool8 ScrCmd_pokemart(struct ScriptContext *ctx) return TRUE; } -bool8 ScrCmd_pokemartdecor(struct ScriptContext *ctx) +bool8 ScrCmd_pokemartdecoration(struct ScriptContext *ctx) { void *ptr = (void *)ScriptReadWord(ctx); @@ -1769,7 +1769,7 @@ bool8 ScrCmd_pokemartdecor(struct ScriptContext *ctx) return TRUE; } -bool8 ScrCmd_pokemartbp(struct ScriptContext *ctx) +bool8 ScrCmd_pokemartdecoration2(struct ScriptContext *ctx) { void *ptr = (void *)ScriptReadWord(ctx); @@ -1787,7 +1787,7 @@ bool8 ScrCmd_playslotmachine(struct ScriptContext *ctx) return TRUE; } -bool8 ScrCmd_plantberrytree(struct ScriptContext *ctx) +bool8 ScrCmd_setberrytree(struct ScriptContext *ctx) { u8 treeId = ScriptReadByte(ctx); u8 berry = ScriptReadByte(ctx); @@ -1808,7 +1808,7 @@ bool8 ScrCmd_getpricereduction(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_choosecontestpkmn(struct ScriptContext *ctx) +bool8 ScrCmd_choosecontestmon(struct ScriptContext *ctx) { sub_80F99CC(); ScriptContext1_Stop(); @@ -1845,7 +1845,7 @@ bool8 ScrCmd_dofieldeffect(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_setfieldeffect(struct ScriptContext *ctx) +bool8 ScrCmd_setfieldeffectargument(struct ScriptContext *ctx) { u8 argNum = ScriptReadByte(ctx); @@ -1868,7 +1868,7 @@ bool8 ScrCmd_waitfieldeffect(struct ScriptContext *ctx) return TRUE; } -bool8 ScrCmd_sethealplace(struct ScriptContext *ctx) +bool8 ScrCmd_setrespawn(struct ScriptContext *ctx) { u16 healLocationId = VarGet(ScriptReadHalfword(ctx)); @@ -1882,7 +1882,7 @@ bool8 ScrCmd_checkplayergender(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_playpokecry(struct ScriptContext *ctx) +bool8 ScrCmd_playmoncry(struct ScriptContext *ctx) { u16 species = VarGet(ScriptReadHalfword(ctx)); u16 mode = VarGet(ScriptReadHalfword(ctx)); @@ -1891,25 +1891,25 @@ bool8 ScrCmd_playpokecry(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_waitpokecry(struct ScriptContext *ctx) +bool8 ScrCmd_waitmoncry(struct ScriptContext *ctx) { SetupNativeScript(ctx, IsCryFinished); return TRUE; } -bool8 ScrCmd_setmaptile(struct ScriptContext *ctx) +bool8 ScrCmd_setmetatile(struct ScriptContext *ctx) { u16 x = VarGet(ScriptReadHalfword(ctx)); u16 y = VarGet(ScriptReadHalfword(ctx)); - u16 tileId = VarGet(ScriptReadHalfword(ctx)); + u16 metatileId = VarGet(ScriptReadHalfword(ctx)); u16 v8 = VarGet(ScriptReadHalfword(ctx)); x += 7; y += 7; if (!v8) - MapGridSetMetatileIdAt(x, y, tileId); + MapGridSetMetatileIdAt(x, y, metatileId); else - MapGridSetMetatileIdAt(x, y, tileId | 0xC00); + MapGridSetMetatileIdAt(x, y, metatileId | 0xC00); return FALSE; } -- cgit v1.2.3 From 754e911b4e95205bafa5dc93242da9cee3f2c5c6 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Thu, 21 Dec 2017 11:40:26 -0600 Subject: Rename gScript* vars to gSpecialVar_* --- src/battle/battle_controller_player.c | 4 +- src/battle/battle_controller_safari.c | 4 +- src/battle/battle_controller_wally.c | 2 +- src/battle/battle_party_menu.c | 8 ++-- src/battle/battle_setup.c | 12 +++--- src/debug/matsuda_debug_menu.c | 32 +++++++-------- src/engine/cable_club.c | 26 ++++++------ src/engine/link.c | 2 +- src/field/battle_tower.c | 42 ++++++++++---------- src/field/berry.c | 8 ++-- src/field/berry_tag_screen.c | 14 +++---- src/field/daycare.c | 4 +- src/field/decoration.c | 4 +- src/field/dewford_trend.c | 6 +-- src/field/event_data.c | 6 +-- src/field/field_control_avatar.c | 14 +++---- src/field/field_poison.c | 6 +-- src/field/field_screen_effect.c | 6 +-- src/field/field_specials.c | 38 +++++++++--------- src/field/fldeff_decoration.c | 10 ++--- src/field/fldeff_secretpower.c | 2 +- src/field/fldeff_strength.c | 6 +-- src/field/item_menu.c | 70 ++++++++++++++++----------------- src/field/item_use.c | 52 ++++++++++++------------ src/field/lottery_corner.c | 8 ++-- src/field/map_obj_lock.c | 4 +- src/field/mauville_man.c | 24 ++++++------ src/field/party_menu.c | 4 +- src/field/pokeblock.c | 32 +++++++-------- src/field/safari_zone.c | 22 +++++------ src/field/scrcmd.c | 62 ++++++++++++++--------------- src/field/script_menu.c | 28 ++++++------- src/field/secret_base.c | 36 ++++++++--------- src/field/start_menu.c | 6 +-- src/field/starter_choose.c | 4 +- src/field/trader.c | 10 ++--- src/field/tv.c | 74 +++++++++++++++++------------------ src/field/use_pokeblock.c | 4 +- src/field/wild_encounter.c | 8 ++-- src/pokemon/pokeblock_feed.c | 4 +- src/pokemon/pokemon_menu.c | 34 ++++++++-------- src/pokemon/pokemon_size_record.c | 10 ++--- src/rom6.c | 4 +- src/scene/berry_blender.c | 12 +++--- src/script_pokemon_util_80C4BF0.c | 34 ++++++++-------- src/script_pokemon_util_80F99CC.c | 10 ++--- 46 files changed, 406 insertions(+), 406 deletions(-) (limited to 'src') diff --git a/src/battle/battle_controller_player.c b/src/battle/battle_controller_player.c index 653f0938c..c2d34db0d 100644 --- a/src/battle/battle_controller_player.c +++ b/src/battle/battle_controller_player.c @@ -162,7 +162,7 @@ extern u8 gUnknown_0300434C[]; extern u8 gUnknown_0202E8F4; extern u8 gUnknown_0202E8F5; extern u8 gUnknown_02038470[]; -extern u16 gScriptItemId; +extern u16 gSpecialVar_ItemId; extern u8 gDisplayedStringBattle[]; extern const u8 BattleText_LinkStandby[]; @@ -1522,7 +1522,7 @@ void sub_802E03C(void) { if (gMain.callback2 == sub_800F808 && !gPaletteFade.active) { - Emitcmd35(1, gScriptItemId); + Emitcmd35(1, gSpecialVar_ItemId); PlayerBufferExecCompleted(); } } diff --git a/src/battle/battle_controller_safari.c b/src/battle/battle_controller_safari.c index 3dcfca948..6f6286945 100644 --- a/src/battle/battle_controller_safari.c +++ b/src/battle/battle_controller_safari.c @@ -31,7 +31,7 @@ extern u8 gObjectBankIDs[]; extern struct SpriteTemplate gUnknown_02024E8C; extern u16 gBattleTypeFlags; extern u32 gBattleExecBuffer; -extern u16 gScriptItemId; +extern u16 gSpecialVar_ItemId; extern MainCallback gPreBattleCallback1; extern u8 gBankInMenu; extern u8 gHealthboxIDs[]; @@ -315,7 +315,7 @@ void sub_812B758(void) { if (gMain.callback2 == sub_800F808 && !gPaletteFade.active) { - Emitcmd35(1, gScriptItemId); + Emitcmd35(1, gSpecialVar_ItemId); SafariBufferExecCompleted(); } } diff --git a/src/battle/battle_controller_wally.c b/src/battle/battle_controller_wally.c index 0d698d9a5..d81c43381 100644 --- a/src/battle/battle_controller_wally.c +++ b/src/battle/battle_controller_wally.c @@ -367,7 +367,7 @@ void sub_81374FC(void) if (gMain.callback2 == sub_800F808 && !gPaletteFade.active) { - Emitcmd35(1, gScriptItemId); + Emitcmd35(1, gSpecialVar_ItemId); WallyBufferExecCompleted(); } } diff --git a/src/battle/battle_party_menu.c b/src/battle/battle_party_menu.c index 5decf8a7b..d4dcae0ca 100644 --- a/src/battle/battle_party_menu.c +++ b/src/battle/battle_party_menu.c @@ -426,7 +426,7 @@ bool8 SetUpBattlePartyMenu(void) case 10: if (gUnknown_02038473 == 3) { - if (GetItemEffectType(gScriptItemId) == 10) + if (GetItemEffectType(gSpecialVar_ItemId) == 10) ewram1B000.promptTextId = 0xFF; else ewram1B000.promptTextId = 3; @@ -464,9 +464,9 @@ void HandleBattlePartyMenu(u8 taskId) { if (!gPaletteFade.active) { - if (gUnknown_02038473 == 3 && GetItemEffectType(gScriptItemId) == 10) + if (gUnknown_02038473 == 3 && GetItemEffectType(gSpecialVar_ItemId) == 10) { - gUnknown_03004AE4(taskId, gScriptItemId, Task_80952E4); + gUnknown_03004AE4(taskId, gSpecialVar_ItemId, Task_80952E4); return; } @@ -480,7 +480,7 @@ void HandleBattlePartyMenu(u8 taskId) else { sub_806D5A4(); - gUnknown_03004AE4(taskId, gScriptItemId, Task_80952E4); + gUnknown_03004AE4(taskId, gSpecialVar_ItemId, Task_80952E4); } } else diff --git a/src/battle/battle_setup.c b/src/battle/battle_setup.c index 6baf47dee..f71aad090 100644 --- a/src/battle/battle_setup.c +++ b/src/battle/battle_setup.c @@ -33,7 +33,7 @@ #include "text.h" #include "trainer.h" -extern u16 gScriptResult; +extern u16 gSpecialVar_Result; extern void (*gFieldCallback)(void); @@ -48,7 +48,7 @@ EWRAM_DATA static u8 *sTrainerBattleScriptRetAddr = NULL; EWRAM_DATA static u8 *sTrainerBattleEndScript = NULL; extern u16 gBattleTypeFlags; -extern u16 gScriptLastTalked; +extern u16 gSpecialVar_LastTalked; extern u8 gBattleOutcome; extern struct MapObject gMapObjects[]; @@ -858,8 +858,8 @@ static void CB2_GiveStarter(void) { u16 starterPoke; - *GetVarPointer(0x4023) = gScriptResult; - starterPoke = GetStarterPokemon(gScriptResult); + *GetVarPointer(0x4023) = gSpecialVar_Result; + starterPoke = GetStarterPokemon(gSpecialVar_Result); ScriptGiveMon(starterPoke, 5, 0, 0, 0, 0); ResetTasks(); sub_80408BC(); @@ -980,7 +980,7 @@ static void battle_80801F0(void) { if (sTrainerMapObjectLocalId) { - gScriptLastTalked = sTrainerMapObjectLocalId; + gSpecialVar_LastTalked = sTrainerMapObjectLocalId; gSelectedMapObject = GetFieldObjectIdByLocalIdAndMap(sTrainerMapObjectLocalId, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup); } } @@ -1029,7 +1029,7 @@ u8 *BattleSetup_ConfigureTrainerBattle(const u8 *data) void TrainerWantsBattle(u8 trainerMapObjId, u8 *trainerScript) { gSelectedMapObject = trainerMapObjId; - gScriptLastTalked = gMapObjects[trainerMapObjId].localId; + gSpecialVar_LastTalked = gMapObjects[trainerMapObjId].localId; BattleSetup_ConfigureTrainerBattle(trainerScript + 1); ScriptContext1_SetupScript(gUnknown_0819F80B); ScriptContext2_Enable(); diff --git a/src/debug/matsuda_debug_menu.c b/src/debug/matsuda_debug_menu.c index 0f77d2814..595491d5d 100644 --- a/src/debug/matsuda_debug_menu.c +++ b/src/debug/matsuda_debug_menu.c @@ -27,8 +27,8 @@ extern u8 gUnknown_02038694; extern u8 gIsLinkContest; extern u8 gUnknown_0203869B; extern u8 gContestPlayerMonIndex; -extern u16 gScriptContestCategory; -extern u16 gScriptContestRank; +extern u16 gSpecialVar_ContestCategory; +extern u16 gSpecialVar_ContestRank; extern u16 gUnknown_030042A4; extern u16 gUnknown_030042A0; @@ -360,7 +360,7 @@ static void sub_80A9D58(u8 taskId) dest[i] = gTasks[taskId].data[5 + i]; gUnknown_0203869B = sub_80C4B34(dest); - sub_80AE82C((u8)gScriptContestCategory); + sub_80AE82C((u8)gSpecialVar_ContestCategory); sub_80B0F28(0); SetTaskFuncWithFollowupFunc(taskId, sub_80C8EBC, sub_80A9DBC); } @@ -552,10 +552,10 @@ static void sub_80AA10C(void) gMatsudaDebugMenuContestTopLeft[i][1]); } - gScriptContestCategory = gScriptContestRank = 0; + gSpecialVar_ContestCategory = gSpecialVar_ContestRank = 0; zero = 0; // it's possible this was some assignment that matsuda used to quickly edit and test things without changing whats passed to the later functions. sub_80AA5BC(zero); - sub_80AA5E8(gScriptContestRank); + sub_80AA5E8(gSpecialVar_ContestRank); sub_8003460(&gMenuWindow, gMatsudaDebugMenu_GoBackText, 0xD6, 0x12, 0x12); sub_8003460(&gMenuWindow, gMatsudaDebugMenu_BattlePointsText, 0xDC, zero, 0xC); LoadSpriteSheet(gUnknown_083C92B4); @@ -873,8 +873,8 @@ void sub_80AABF0(struct Sprite *sprite, s8 var2) r4 = 4; sub_80AA5BC(r4); sprite->data[3] = r4; - gScriptContestCategory = sprite->data[3]; - sub_80AE398(sprite->data[3], gScriptContestRank); + gSpecialVar_ContestCategory = sprite->data[3]; + sub_80AE398(sprite->data[3], gSpecialVar_ContestRank); sub_80AA280(sprite->data[2]); sub_80AA658(sprite->data[2]); } @@ -882,13 +882,13 @@ void sub_80AABF0(struct Sprite *sprite, s8 var2) void sub_80AAC5C(struct Sprite *sprite, s8 var2) { if (var2 > 0) - gScriptContestRank++; - else if (gScriptContestRank != 0) - gScriptContestRank--; - if (gScriptContestRank > 3) - gScriptContestRank = 3; - sub_80AA5E8(gScriptContestRank); - sub_80AE398(gScriptContestCategory, gScriptContestRank); + gSpecialVar_ContestRank++; + else if (gSpecialVar_ContestRank != 0) + gSpecialVar_ContestRank--; + if (gSpecialVar_ContestRank > 3) + gSpecialVar_ContestRank = 3; + sub_80AA5E8(gSpecialVar_ContestRank); + sub_80AE398(gSpecialVar_ContestCategory, gSpecialVar_ContestRank); sub_80AA280(sprite->data[2]); sub_80AA658(sprite->data[2]); } @@ -923,7 +923,7 @@ void sub_80AAD44(struct Sprite *sprite, s8 var2) SetDebugMonForContest(); for (i = 0; i < 4; i++) - gUnknown_02038670[i] = sub_80AE770(i, gScriptContestCategory); + gUnknown_02038670[i] = sub_80AE770(i, gSpecialVar_ContestCategory); SetMainCallback2(sub_805469C); } } @@ -1204,7 +1204,7 @@ u8 MatsudaDebugMenu_SetArtMuseumItems(void) sub_80AE098(0); for (i = 3; i > -1; i--) gUnknown_02038690[i] = 3 - i; - for (gScriptContestCategory = 0; gScriptContestCategory < 5; gScriptContestCategory++) + for (gSpecialVar_ContestCategory = 0; gSpecialVar_ContestCategory < 5; gSpecialVar_ContestCategory++) sub_80B2A7C(0xFF); CloseMenu(); return 1; diff --git a/src/engine/cable_club.c b/src/engine/cable_club.c index 4dda372f4..3187de7ed 100644 --- a/src/engine/cable_club.c +++ b/src/engine/cable_club.c @@ -23,7 +23,7 @@ #include "text.h" #include "trainer_card.h" -extern u16 gScriptResult; +extern u16 gSpecialVar_Result; extern struct TrainerCard gTrainerCards[4]; extern u8 gUnknown_03004860; extern u8 gFieldLinkPlayerCount; @@ -343,8 +343,8 @@ static void sub_8083188(u8 taskId) } else { - gScriptResult = sub_8082D9C(local1, local2); - if (gScriptResult != 0) + gSpecialVar_Result = sub_8082D9C(local1, local2); + if (gSpecialVar_Result != 0) gTasks[taskId].func = sub_8083288; } } @@ -360,10 +360,10 @@ void sub_80831F8(u8 taskId) || sub_8082DF4(taskId) == TRUE) return; - gScriptResult = sub_8082D9C(local1, local2); - if (gScriptResult == 0) + gSpecialVar_Result = sub_8082D9C(local1, local2); + if (gSpecialVar_Result == 0) return; - if (gScriptResult == 3) + if (gSpecialVar_Result == 3) { sub_800832C(); HideFieldMessageBox(); @@ -384,7 +384,7 @@ static void sub_8083288(u8 taskId) if (sub_8082DF4(taskId) == TRUE) return; - if (gScriptResult == 3) + if (gSpecialVar_Result == 3) { sub_800832C(); HideFieldMessageBox(); @@ -425,7 +425,7 @@ static void sub_8083314(u8 taskId) ResetBlockReceivedFlags(); HideFieldMessageBox(); - if (gScriptResult == 1) + if (gSpecialVar_Result == 1) { #if ENGLISH u16 linkType; @@ -461,7 +461,7 @@ static void sub_80833C4(u8 taskId) static void sub_80833EC(u8 taskId) { - gScriptResult = 5; + gSpecialVar_Result = 5; sub_8082D4C(); HideFieldMessageBox(); EnableBothScriptContexts(); @@ -470,7 +470,7 @@ static void sub_80833EC(u8 taskId) static void sub_8083418(u8 taskId) { - gScriptResult = 6; + gSpecialVar_Result = 6; sub_8082D4C(); HideFieldMessageBox(); EnableBothScriptContexts(); @@ -523,7 +523,7 @@ void sub_80834E4(void) void sub_808350C(void) { - gScriptResult = 0; + gSpecialVar_Result = 0; gLinkType = 0x3311; gBattleTypeFlags = 0; sub_8082CD4(2, 4); @@ -537,14 +537,14 @@ static void sub_808353C(u8 taskId) switch (gTasks[taskId].data[0]) { case 0: - if (gScriptResult == 1) + if (gSpecialVar_Result == 1) { playerCount = GetLinkPlayerCount(); for (i = 0; i < playerCount; i++) { if (gLinkPlayers[i].language == LANGUAGE_JAPANESE) { - gScriptResult = 7; + gSpecialVar_Result = 7; sub_8008480(); gTasks[taskId].data[0] = 1; return; diff --git a/src/engine/link.c b/src/engine/link.c index 27afef937..28323207c 100644 --- a/src/engine/link.c +++ b/src/engine/link.c @@ -635,7 +635,7 @@ static void BuildSendCmd(u16 code) break; case 0xAAAB: gSendCmd[0] = 0xAAAB; - gSendCmd[1] = gScriptItemId; + gSendCmd[1] = gSpecialVar_ItemId; break; case 0xCCCC: gSendCmd[0] = 0xCCCC; diff --git a/src/field/battle_tower.c b/src/field/battle_tower.c index db822f71b..6b6064c16 100644 --- a/src/field/battle_tower.c +++ b/src/field/battle_tower.c @@ -350,7 +350,7 @@ bool8 ShouldBattleEReaderTrainer(u8 levelType, u16 winStreak) ValidateEReaderTrainer(); - if (gScriptResult != 0 || gSaveBlock2.battleTower.ereaderTrainer.winStreak != winStreak) + if (gSpecialVar_Result != 0 || gSaveBlock2.battleTower.ereaderTrainer.winStreak != winStreak) { return FALSE; } @@ -1516,7 +1516,7 @@ void CheckPartyBattleTowerBanlist(void) level = GetMonData(&gPlayerParty[i], MON_DATA_LEVEL); hp = GetMonData(&gPlayerParty[i], MON_DATA_HP); - CheckMonBattleTowerBanlist(species2, heldItem, hp, gScriptResult, level, validPartySpecies, validPartyHeldItems, &counter); + CheckMonBattleTowerBanlist(species2, heldItem, hp, gSpecialVar_Result, level, validPartySpecies, validPartyHeldItems, &counter); } if (counter < 3) @@ -1549,7 +1549,7 @@ void CheckPartyBattleTowerBanlist(void) else { gSpecialVar_0x8004 = 0; - gSaveBlock2.battleTower.battleTowerLevelType = gScriptResult; + gSaveBlock2.battleTower.battleTowerLevelType = gSpecialVar_Result; } } @@ -1700,7 +1700,7 @@ void sub_8135668(void) gSaveBlock2.battleTower.curChallengeBattleNum[battleTowerLevelType]++; sub_8135A3C(); - gScriptResult = gSaveBlock2.battleTower.curChallengeBattleNum[battleTowerLevelType]; + gSpecialVar_Result = gSaveBlock2.battleTower.curChallengeBattleNum[battleTowerLevelType]; gStringVar1[0] = gSaveBlock2.battleTower.curChallengeBattleNum[battleTowerLevelType] + 0xA1; gStringVar1[1] = 0xFF; @@ -1712,7 +1712,7 @@ void sub_8135668(void) } sub_8135A3C(); - gScriptResult = gSaveBlock2.battleTower.curStreakChallengesNum[battleTowerLevelType]; + gSpecialVar_Result = gSaveBlock2.battleTower.curStreakChallengesNum[battleTowerLevelType]; break; case 8: gSaveBlock2.battleTower.unk_554 = gSpecialVar_0x8005; @@ -1747,29 +1747,29 @@ void sub_81358A4(void) switch (gSpecialVar_0x8004) { case 0: - gScriptResult = gSaveBlock2.battleTower.var_4AE[battleTowerLevelType]; + gSpecialVar_Result = gSaveBlock2.battleTower.var_4AE[battleTowerLevelType]; break; case 1: - gScriptResult = gSaveBlock2.battleTower.battleTowerLevelType; + gSpecialVar_Result = gSaveBlock2.battleTower.battleTowerLevelType; break; case 2: - gScriptResult = gSaveBlock2.battleTower.curChallengeBattleNum[battleTowerLevelType]; + gSpecialVar_Result = gSaveBlock2.battleTower.curChallengeBattleNum[battleTowerLevelType]; break; case 3: - gScriptResult = gSaveBlock2.battleTower.curStreakChallengesNum[battleTowerLevelType]; + gSpecialVar_Result = gSaveBlock2.battleTower.curStreakChallengesNum[battleTowerLevelType]; break; case 4: - gScriptResult = gSaveBlock2.battleTower.battleTowerTrainerId; + gSpecialVar_Result = gSaveBlock2.battleTower.battleTowerTrainerId; break; case 5: case 6: case 7: break; case 8: - gScriptResult = gSaveBlock2.battleTower.unk_554; + gSpecialVar_Result = gSaveBlock2.battleTower.unk_554; break; case 9: - gScriptResult = GetCurrentBattleTowerWinStreak(battleTowerLevelType); + gSpecialVar_Result = GetCurrentBattleTowerWinStreak(battleTowerLevelType); break; case 10: SetGameStat(GAME_STAT_BATTLE_TOWER_BEST_STREAK, gSaveBlock2.battleTower.bestBattleTowerWinStreak); @@ -2149,11 +2149,11 @@ void GiveBattleTowerPrize(void) if (AddBagItem(gSaveBlock2.battleTower.prizeItem, 1) == TRUE) { CopyItemName(gSaveBlock2.battleTower.prizeItem, gStringVar1); - gScriptResult = 1; + gSpecialVar_Result = 1; } else { - gScriptResult = 0; + gSpecialVar_Result = 0; gSaveBlock2.battleTower.var_4AE[battleTowerLevelType] = 6; } } @@ -2172,7 +2172,7 @@ void AwardBattleTowerRibbons(void) ribbonType = MON_DATA_VICTORY_RIBBON; } - gScriptResult = 0; + gSpecialVar_Result = 0; if (GetCurrentBattleTowerWinStreak(battleTowerLevelType) > 55) { @@ -2182,13 +2182,13 @@ void AwardBattleTowerRibbons(void) pokemon = &gPlayerParty[partyIndex]; if (!GetMonData(pokemon, ribbonType)) { - gScriptResult = 1; - SetMonData(pokemon, ribbonType, &gScriptResult); + gSpecialVar_Result = 1; + SetMonData(pokemon, ribbonType, &gSpecialVar_Result); } } } - if (gScriptResult != 0) + if (gSpecialVar_Result != 0) { IncrementGameStat(GAME_STAT_RECEIVED_RIBBONS); } @@ -2266,7 +2266,7 @@ void ValidateEReaderTrainer(void) u32 checksum; struct BattleTowerEReaderTrainer *ereaderTrainer; - gScriptResult = 0; + gSpecialVar_Result = 0; ereaderTrainer = &gSaveBlock2.battleTower.ereaderTrainer; checksum = 0; @@ -2277,7 +2277,7 @@ void ValidateEReaderTrainer(void) if (checksum == 0) { - gScriptResult = 1; + gSpecialVar_Result = 1; return; } @@ -2290,7 +2290,7 @@ void ValidateEReaderTrainer(void) if (gSaveBlock2.battleTower.ereaderTrainer.checksum != checksum) { ClearEReaderTrainer(&gSaveBlock2.battleTower.ereaderTrainer); - gScriptResult = 1; + gSpecialVar_Result = 1; } } diff --git a/src/field/berry.c b/src/field/berry.c index 874a60aa7..088267ad0 100644 --- a/src/field/berry.c +++ b/src/field/berry.c @@ -981,7 +981,7 @@ const struct Berry gBerries[] = static const struct BerryTree gBlankBerryTree = {0}; extern u8 S_BerryTree[]; -extern u16 gScriptLastTalked; +extern u16 gSpecialVar_LastTalked; extern u16 gSpecialVar_0x8004; extern u16 gSpecialVar_0x8005; extern u16 gSpecialVar_0x8006; @@ -1368,7 +1368,7 @@ void FieldObjectInteractionGetBerryTreeData(void) id = FieldObjectGetBerryTreeId(gSelectedMapObject); berry = GetBerryTypeByBerryTreeId(id); ResetBerryTreeSparkleFlag(id); - localId = gScriptLastTalked; + localId = gSpecialVar_LastTalked; num = gSaveBlock1.location.mapNum; group = gSaveBlock1.location.mapGroup; if (IsBerryTreeSparkling(localId, num, group)) @@ -1392,7 +1392,7 @@ void Berry_FadeAndGoToBerryBagMenu(void) void FieldObjectInteractionPlantBerryTree(void) { - u8 berry = ItemIdToBerryType(gScriptItemId); + u8 berry = ItemIdToBerryType(gSpecialVar_ItemId); PlantBerryTree(FieldObjectGetBerryTreeId(gSelectedMapObject), berry, 1, TRUE); FieldObjectInteractionGetBerryTreeData(); @@ -1409,7 +1409,7 @@ void FieldObjectInteractionPickBerryTree(void) void FieldObjectInteractionRemoveBerryTree(void) { RemoveBerryTree(FieldObjectGetBerryTreeId(gSelectedMapObject)); - sub_8060288(gScriptLastTalked, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup); + sub_8060288(gSpecialVar_LastTalked, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup); } bool8 PlayerHasBerries(void) diff --git a/src/field/berry_tag_screen.c b/src/field/berry_tag_screen.c index 694599680..2abbac287 100644 --- a/src/field/berry_tag_screen.c +++ b/src/field/berry_tag_screen.c @@ -133,12 +133,12 @@ static bool8 sub_8146058(void) gMain.state += 1; break; case 8: - berry = gScriptItemId + OFFSET_7B; + berry = gSpecialVar_ItemId + OFFSET_7B; gUnknown_0203932C = CreateBerrySprite(berry, 56, 64); gMain.state += 1; break; case 9: - sub_8146600(gScriptItemId + OFFSET_7B); + sub_8146600(gSpecialVar_ItemId + OFFSET_7B); gMain.state += 1; break; case 10: @@ -277,9 +277,9 @@ static void sub_81464E4(void) u8 buffer[16]; #endif - berryInfo = GetBerryInfo(gScriptItemId + OFFSET_7B + 1); + berryInfo = GetBerryInfo(gSpecialVar_ItemId + OFFSET_7B + 1); - ConvertIntToDecimalStringN(gStringVar1, gScriptItemId - FIRST_BERRY + 1, STR_CONV_MODE_LEADING_ZEROS, 2); + ConvertIntToDecimalStringN(gStringVar1, gSpecialVar_ItemId - FIRST_BERRY + 1, STR_CONV_MODE_LEADING_ZEROS, 2); MenuPrint(gStringVar1, 12, 4); #if ENGLISH @@ -437,7 +437,7 @@ static void sub_8146810(s8 berry) gBagPocketScrollStates[berryPocket].cursorPos += berry; } } - gScriptItemId = gCurrentBagPocketItemSlots[gBagPocketScrollStates[berryPocket].scrollTop + gBagPocketScrollStates[berryPocket].cursorPos].itemId; + gSpecialVar_ItemId = gCurrentBagPocketItemSlots[gBagPocketScrollStates[berryPocket].scrollTop + gBagPocketScrollStates[berryPocket].cursorPos].itemId; DestroySprite(&gSprites[gUnknown_0203932C]); sub_81466A0(); sub_80A7DD4(); @@ -449,7 +449,7 @@ static void sub_81468BC(void) sub_81464E4(); // center of berry sprite - gUnknown_0203932C = CreateBerrySprite(gScriptItemId + OFFSET_7B, 56, 64); + gUnknown_0203932C = CreateBerrySprite(gSpecialVar_ItemId + OFFSET_7B, 56, 64); - sub_8146600(gScriptItemId + OFFSET_7B); + sub_8146600(gSpecialVar_ItemId + OFFSET_7B); } diff --git a/src/field/daycare.c b/src/field/daycare.c index 9ac63b3c7..c28bc65ca 100644 --- a/src/field/daycare.c +++ b/src/field/daycare.c @@ -1758,7 +1758,7 @@ static void HandleDaycareLevelMenuInput(u8 taskId) { HandleDestroyMenuCursors(); PlaySE(SE_SELECT); - gLastFieldPokeMenuOpened = gScriptResult = gTasks[taskId].data[0]; + gLastFieldPokeMenuOpened = gSpecialVar_Result = gTasks[taskId].data[0]; DestroyTask(taskId); MenuZeroFillWindowRect(15, 6, 29, 13); EnableBothScriptContexts(); @@ -1766,7 +1766,7 @@ static void HandleDaycareLevelMenuInput(u8 taskId) else if (gMain.newKeys & B_BUTTON) { HandleDestroyMenuCursors(); - gLastFieldPokeMenuOpened = gScriptResult = 2; + gLastFieldPokeMenuOpened = gSpecialVar_Result = 2; DestroyTask(taskId); MenuZeroFillWindowRect(15, 6, 29, 13); EnableBothScriptContexts(); diff --git a/src/field/decoration.c b/src/field/decoration.c index c36c10a08..8b774afc3 100644 --- a/src/field/decoration.c +++ b/src/field/decoration.c @@ -3647,10 +3647,10 @@ void sub_8100A7C(void) { u16 i; gSpecialVar_0x8005 = 0; - gScriptResult = 0; + gSpecialVar_Result = 0; if (gSpecialVar_0x8004 == gUnknown_02039234) { - gScriptResult = 1; + gSpecialVar_Result = 1; } else if (gDecorations[ewram_1f000.items[gUnknown_020391B4[gSpecialVar_0x8004].decorId]].permission == DECORPERM_SOLID_MAT) { gSpecialVar_0x8005 = gUnknown_020391B4[gSpecialVar_0x8004].flagId; diff --git a/src/field/dewford_trend.c b/src/field/dewford_trend.c index b36459655..b67f3a2bd 100644 --- a/src/field/dewford_trend.c +++ b/src/field/dewford_trend.c @@ -8,7 +8,7 @@ #include "text.h" #include "ewram.h" -extern u16 gScriptResult; +extern u16 gSpecialVar_Result; extern u16 gSpecialVar_0x8004; static void sub_80FA46C(struct EasyChatPair *s, u16 b, u8 c); @@ -219,12 +219,12 @@ void sub_80FA5E4(void) if (!gSaveBlock1.easyChatPairs[0].unk1_6 && gSaveBlock1.easyChatPairs[1].unk1_6) result = 1; } - gScriptResult = result; + gSpecialVar_Result = result; } void sub_80FA648(void) { - gScriptResult = (gSaveBlock1.easyChatPairs[0].words[0] + gSaveBlock1.easyChatPairs[0].words[1]) & 7; + gSpecialVar_Result = (gSaveBlock1.easyChatPairs[0].words[0] + gSaveBlock1.easyChatPairs[0].words[1]) & 7; } static bool8 sub_80FA670(struct EasyChatPair *a, struct EasyChatPair *b, u8 c) diff --git a/src/field/event_data.c b/src/field/event_data.c index 3b3ac7bca..587da8138 100644 --- a/src/field/event_data.c +++ b/src/field/event_data.c @@ -18,9 +18,9 @@ EWRAM_DATA u16 gSpecialVar_0x8008 = 0; EWRAM_DATA u16 gSpecialVar_0x8009 = 0; EWRAM_DATA u16 gSpecialVar_0x800A = 0; EWRAM_DATA u16 gSpecialVar_0x800B = 0; -EWRAM_DATA u16 gScriptResult = 0; -EWRAM_DATA u16 gScriptLastTalked = 0; -EWRAM_DATA u16 gScriptFacing = 0; +EWRAM_DATA u16 gSpecialVar_Result = 0; +EWRAM_DATA u16 gSpecialVar_LastTalked = 0; +EWRAM_DATA u16 gSpecialVar_Facing = 0; EWRAM_DATA u8 gUnknown_0202E8E2[16] = {0}; extern u16 *gSpecialVars[]; diff --git a/src/field/field_control_avatar.c b/src/field/field_control_avatar.c index dd29e9df5..cd7d3a2e2 100644 --- a/src/field/field_control_avatar.c +++ b/src/field/field_control_avatar.c @@ -30,8 +30,8 @@ struct Coords32 s32 y; }; -extern u16 gScriptLastTalked; -extern u16 gScriptFacing; +extern u16 gSpecialVar_LastTalked; +extern u16 gSpecialVar_Facing; extern struct LinkPlayerMapObject gLinkPlayerMapObjects[]; extern u16 gSpecialVar_0x8004; extern u16 gSpecialVar_0x8005; @@ -295,8 +295,8 @@ u8 *sub_80682A8(struct MapPosition *position, u8 unused, u8 c) return NULL; } gSelectedMapObject = r3; - gScriptLastTalked = gMapObjects[r3].localId; - gScriptFacing = c; + gSpecialVar_LastTalked = gMapObjects[r3].localId; + gSpecialVar_Facing = c; return GetFieldObjectScriptPointerByFieldObjectId(r3); } @@ -316,10 +316,10 @@ static u8 *sub_8068364(struct MapPosition *position, u8 b, u8 c) } //_080683E8 gSelectedMapObject = r3; - gScriptLastTalked = gMapObjects[r3].localId; - gScriptFacing = c; + gSpecialVar_LastTalked = gMapObjects[r3].localId; + gSpecialVar_Facing = c; script = GetFieldObjectScriptPointerByFieldObjectId(r3); - script = GetRamScript(gScriptLastTalked, script); + script = GetRamScript(gSpecialVar_LastTalked, script); return script; } diff --git a/src/field/field_poison.c b/src/field/field_poison.c index 74d70cb36..49678f269 100644 --- a/src/field/field_poison.c +++ b/src/field/field_poison.c @@ -9,7 +9,7 @@ #include "task.h" #include "text.h" -extern u16 gScriptResult; +extern u16 gSpecialVar_Result; extern u8 fieldPoisonText_PokemonFainted[]; bool32 CheckMonIsValid(struct Pokemon *pkmn) @@ -93,9 +93,9 @@ void Task_WhiteOut(u8 taskId) break; case 2: //Done checking Pokemon if (AllMonsFainted()) - gScriptResult = 1; + gSpecialVar_Result = 1; else - gScriptResult = 0; + gSpecialVar_Result = 0; EnableBothScriptContexts(); DestroyTask(taskId); break; diff --git a/src/field/field_screen_effect.c b/src/field/field_screen_effect.c index a18190809..a472d5a9c 100644 --- a/src/field/field_screen_effect.c +++ b/src/field/field_screen_effect.c @@ -283,17 +283,17 @@ void sub_80818A4(void) u8 taskId = CreateTask(sub_80816A8, 80); s16 *data = gTasks[taskId].data; - if (gScriptResult == 0) + if (gSpecialVar_Result == 0) { data[1] = 0; data[2] = 104; } - else if (gScriptResult == 1) + else if (gSpecialVar_Result == 1) { data[1] = 1; data[2] = 104; } - else if (gScriptResult == 2) + else if (gSpecialVar_Result == 2) { data[1] = 0; data[2] = 120; diff --git a/src/field/field_specials.c b/src/field/field_specials.c index 78c60c94e..87a9e2d5d 100644 --- a/src/field/field_specials.c +++ b/src/field/field_specials.c @@ -46,7 +46,7 @@ extern struct WarpData gUnknown_020297F0; extern u8 gBattleOutcome; extern u16 gSpecialVar_0x8004; extern u16 gSpecialVar_0x8005; -extern u16 gScriptResult; +extern u16 gSpecialVar_Result; extern u8 *const gUnknown_083D1464[3]; @@ -169,7 +169,7 @@ static void DetermineCyclingRoadResults(u32 arg0, u8 arg1) } - gScriptResult = result; + gSpecialVar_Result = result; } void FinishCyclingRoadChallenge(void) { @@ -1112,17 +1112,17 @@ void sub_810E984(u8 taskId) saved_warp2_set_2(0, gUnknown_03000760[gUnknown_0203925B].var1, gUnknown_03000760[gUnknown_0203925B].var2, -1, 2, 1); if (gSpecialVar_0x8005 == gUnknown_0203925B) { - gScriptResult = 0; + gSpecialVar_Result = 0; PlaySE(SE_SELECT); MenuZeroFillWindowRect(0, 0, 29, 12); sub_810EC9C(taskId); } else { - gScriptResult = 1; + gSpecialVar_Result = 1; gSpecialVar_0x8005 = gUnknown_0203925B; sub_810EBEC(); - FieldObjectTurnByLocalIdAndMap(gScriptLastTalked, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, DIR_SOUTH); + FieldObjectTurnByLocalIdAndMap(gSpecialVar_LastTalked, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, DIR_SOUTH); sub_810EEDC(); MenuZeroFillScreen(); DestroyTask(taskId); @@ -1130,7 +1130,7 @@ void sub_810E984(u8 taskId) } else if (gMain.newKeys & B_BUTTON) { - gScriptResult = 0; + gSpecialVar_Result = 0; PlaySE(SE_SELECT); sub_810EEDC(); MenuZeroFillWindowRect(0, 0, 29, 12); @@ -1516,12 +1516,12 @@ void IsGrassTypeInParty(void) species = GetMonData(pokemon, MON_DATA_SPECIES); if (gBaseStats[species].type1 == TYPE_GRASS || gBaseStats[species].type2 == TYPE_GRASS) { - gScriptResult = TRUE; + gSpecialVar_Result = TRUE; return; } } } - gScriptResult = FALSE; + gSpecialVar_Result = FALSE; } const u8 *const gUnknown_083F83C0[] = { @@ -1579,7 +1579,7 @@ void sub_810F118(u8 taskId) if (gMain.newKeys & A_BUTTON) { HandleDestroyMenuCursors(); - gScriptResult = gUnknown_0203925B; + gSpecialVar_Result = gUnknown_0203925B; PlaySE(SE_SELECT); sub_810EEDC(); MenuZeroFillWindowRect(0, 0, 29, 12); @@ -1588,7 +1588,7 @@ void sub_810F118(u8 taskId) if (gMain.newKeys & B_BUTTON) { HandleDestroyMenuCursors(); - gScriptResult = 0x7f; + gSpecialVar_Result = 0x7f; PlaySE(SE_SELECT); sub_810EEDC(); MenuZeroFillWindowRect(0, 0, 29, 12); @@ -2077,27 +2077,27 @@ bool8 sub_810F96C(void) void sub_810F9AC(void) { - if (gScriptResult >= 10000) + if (gSpecialVar_Result >= 10000) { - sub_80BF088(0, gScriptResult); + sub_80BF088(0, gSpecialVar_Result); } - else if (gScriptResult >= 1000) + else if (gSpecialVar_Result >= 1000) { gStringVar1[0] = CHAR_0; - ConvertIntToDecimalStringN(gStringVar1 + 1, gScriptResult, 0, sub_80BF0B8(gScriptResult)); + ConvertIntToDecimalStringN(gStringVar1 + 1, gSpecialVar_Result, 0, sub_80BF0B8(gSpecialVar_Result)); } - else if (gScriptResult >= 100) + else if (gSpecialVar_Result >= 100) { gStringVar1[0] = CHAR_0; gStringVar1[1] = CHAR_0; - ConvertIntToDecimalStringN(gStringVar1 + 2, gScriptResult, 0, sub_80BF0B8(gScriptResult)); + ConvertIntToDecimalStringN(gStringVar1 + 2, gSpecialVar_Result, 0, sub_80BF0B8(gSpecialVar_Result)); } - else if (gScriptResult >= 10) + else if (gSpecialVar_Result >= 10) { gStringVar1[0] = CHAR_0; gStringVar1[1] = CHAR_0; gStringVar1[2] = CHAR_0; - ConvertIntToDecimalStringN(gStringVar1 + 3, gScriptResult, 0, sub_80BF0B8(gScriptResult)); + ConvertIntToDecimalStringN(gStringVar1 + 3, gSpecialVar_Result, 0, sub_80BF0B8(gSpecialVar_Result)); } else { @@ -2105,7 +2105,7 @@ void sub_810F9AC(void) gStringVar1[1] = CHAR_0; gStringVar1[2] = CHAR_0; gStringVar1[3] = CHAR_0; - ConvertIntToDecimalStringN(gStringVar1 + 4, gScriptResult, 0, sub_80BF0B8(gScriptResult)); + ConvertIntToDecimalStringN(gStringVar1 + 4, gSpecialVar_Result, 0, sub_80BF0B8(gSpecialVar_Result)); } } diff --git a/src/field/fldeff_decoration.c b/src/field/fldeff_decoration.c index 7c8ff44db..37f024b9f 100644 --- a/src/field/fldeff_decoration.c +++ b/src/field/fldeff_decoration.c @@ -344,21 +344,21 @@ void GetShieldToyTVDecorationInfo(void) case 822: ConvertIntToDecimalStringN(gStringVar1, 100, STR_CONV_MODE_LEFT_ALIGN, 3); StringCopy(gStringVar2, gSecretBaseText_GoldRank); - gScriptResult = 0; + gSpecialVar_Result = 0; break; case 734: ConvertIntToDecimalStringN(gStringVar1, 50, STR_CONV_MODE_LEFT_ALIGN, 2); StringCopy(gStringVar2, gSecretBaseText_SilverRank); - gScriptResult = 0; + gSpecialVar_Result = 0; break; case 756: - gScriptResult = 1; + gSpecialVar_Result = 1; break; case 757: - gScriptResult = 2; + gSpecialVar_Result = 2; break; case 758: - gScriptResult = 3; + gSpecialVar_Result = 3; break; } } diff --git a/src/field/fldeff_secretpower.c b/src/field/fldeff_secretpower.c index 9bcfaa8c4..bf8e98403 100644 --- a/src/field/fldeff_secretpower.c +++ b/src/field/fldeff_secretpower.c @@ -249,7 +249,7 @@ bool8 SetUpFieldMove_SecretPower(void) sub_80BB63C(); - if (gScriptResult == 1 || player_get_direction_lower_nybble() != DIR_NORTH) + if (gSpecialVar_Result == 1 || player_get_direction_lower_nybble() != DIR_NORTH) return FALSE; GetXYCoordsOneStepInFrontOfPlayer(&gUnknown_0203923C.x, &gUnknown_0203923C.y); diff --git a/src/field/fldeff_strength.c b/src/field/fldeff_strength.c index d9603d094..565ac1651 100644 --- a/src/field/fldeff_strength.c +++ b/src/field/fldeff_strength.c @@ -14,7 +14,7 @@ static void sub_811AA38(void); static void sub_811AA9C(void); extern u8 gLastFieldPokeMenuOpened; -extern u16 gScriptResult; +extern u16 gSpecialVar_Result; extern void (*gFieldCallback)(void); extern void (*gUnknown_03005CE4)(void); @@ -24,7 +24,7 @@ bool8 SetUpFieldMove_Strength(void) { if (ShouldDoBrailleStrengthEffect()) { - gScriptResult = gLastFieldPokeMenuOpened; + gSpecialVar_Result = gLastFieldPokeMenuOpened; gFieldCallback = FieldCallback_Teleport; gUnknown_03005CE4 = sub_811AA38; } @@ -32,7 +32,7 @@ bool8 SetUpFieldMove_Strength(void) { if (npc_before_player_of_type(87) != TRUE) return 0; - gScriptResult = gLastFieldPokeMenuOpened; + gSpecialVar_Result = gLastFieldPokeMenuOpened; gFieldCallback = FieldCallback_Teleport; gUnknown_03005CE4 = sub_811AA18; } diff --git a/src/field/item_menu.c b/src/field/item_menu.c index 8f7cb3d90..4e283ffe9 100644 --- a/src/field/item_menu.c +++ b/src/field/item_menu.c @@ -138,7 +138,7 @@ EWRAM_DATA static s8 sCurrentBagPocket = 0; EWRAM_DATA static u8 gUnknown_0203855A = 0; EWRAM_DATA static s8 gUnknown_0203855B = 0; EWRAM_DATA static s8 gUnknown_0203855C = 0; -EWRAM_DATA u16 gScriptItemId = 0; +EWRAM_DATA u16 gSpecialVar_ItemId = 0; EWRAM_DATA u8 gUnknown_02038560 = 0; EWRAM_DATA u8 gUnknown_02038561 = 0; EWRAM_DATA static u8 gUnknown_02038562 = 0; @@ -1662,7 +1662,7 @@ static void sub_80A4BF0(u16 *a) const u8 *text; if (i == 0) - text = sub_80A4B90(gScriptItemId); + text = sub_80A4B90(gSpecialVar_ItemId); else text = sItemPopupMenuActions[sPopupMenuActionList[i]].text; MenuPrint(text, 1 + (i / 2) * 6, 8 + (i % 2) * 2); @@ -1849,7 +1849,7 @@ static void sub_80A50C8(u8 taskId) { if (r5[10] == 0) { - gScriptItemId = 0; + gSpecialVar_ItemId = 0; gUnknown_083C16BC[sReturnLocation].onBagClose(taskId); } else @@ -1864,7 +1864,7 @@ static void sub_80A50C8(u8 taskId) { PlaySE(SE_SELECT); gUnknown_02038560 = gBagPocketScrollStates[sCurrentBagPocket].scrollTop + gBagPocketScrollStates[sCurrentBagPocket].cursorPos; - gScriptItemId = gCurrentBagPocketItemSlots[gUnknown_02038560].itemId; + gSpecialVar_ItemId = gCurrentBagPocketItemSlots[gUnknown_02038560].itemId; gUnknown_083C16BC[sReturnLocation].onItemSelect(taskId); sub_80F98A4(0); sub_80F98A4(1); @@ -1887,7 +1887,7 @@ static void sub_80A50C8(u8 taskId) { if (sReturnLocation != RETURN_TO_FIELD_5) { - gScriptItemId = 0; + gSpecialVar_ItemId = 0; gUnknown_083C16BC[sReturnLocation].onBagClose(taskId); } } @@ -2527,7 +2527,7 @@ static void sub_80A57C4(void) gUnknown_02038564 = 1; r5 = 9; } - else if (sub_80F92F4(gScriptItemId) == 0) + else if (sub_80F92F4(gSpecialVar_ItemId) == 0) { sPopupMenuActionList = gUnknown_083C16AE[4]; gUnknown_02038564 = 1; @@ -2654,10 +2654,10 @@ void sub_80A5B40(void) static void HandlePopupMenuAction_UseOnField(u8 taskId) { - if (ItemId_GetFieldFunc(gScriptItemId) != NULL) + if (ItemId_GetFieldFunc(gSpecialVar_ItemId) != NULL) { PlaySE(SE_SELECT); - if (CalculatePlayerPartyCount() == 0 && ItemId_GetType(gScriptItemId) == 1) + if (CalculatePlayerPartyCount() == 0 && ItemId_GetType(gSpecialVar_ItemId) == 1) { sub_80A5BF8(taskId); } @@ -2665,7 +2665,7 @@ static void HandlePopupMenuAction_UseOnField(u8 taskId) { gTasks[taskId].data[2] = 0; if (sCurrentBagPocket != BAG_POCKET_BERRIES) - ItemId_GetFieldFunc(gScriptItemId)(taskId); + ItemId_GetFieldFunc(gSpecialVar_ItemId)(taskId); else sub_80C9C7C(taskId); } @@ -2793,7 +2793,7 @@ static void sub_80A5EA0(u8 taskId) if (gMain.newKeys & A_BUTTON) { PlaySE(SE_SELECT); - sub_80A5DA0(gScriptItemId, gTasks[taskId].data[1]); + sub_80A5DA0(gSpecialVar_ItemId, gTasks[taskId].data[1]); DoYesNoFuncWithChoice(taskId, &gUnknown_083C16F4); } else if (gMain.newKeys & B_BUTTON) @@ -2827,7 +2827,7 @@ static void sub_80A5F80(u8 taskId) static void HandlePopupMenuAction_Register(u8 taskId) { PlaySE(SE_SELECT); - if (gSaveBlock1.registeredItem == gScriptItemId) + if (gSaveBlock1.registeredItem == gSpecialVar_ItemId) { // Un-register the registered item RemoveSelectIconFromRegisteredItem(); @@ -2836,7 +2836,7 @@ static void HandlePopupMenuAction_Register(u8 taskId) else { AddSelectIconToRegisteredItem(); - gSaveBlock1.registeredItem = gScriptItemId; + gSaveBlock1.registeredItem = gSpecialVar_ItemId; } sub_80A7528(0); sub_80A41D4(taskId); @@ -2865,7 +2865,7 @@ static void sub_80A6024(u8 taskId) static void DisplayCannotBeHeldMessage(u8 taskId) { sub_80A73FC(); - CopyItemName(gScriptItemId, gStringVar1); + CopyItemName(gSpecialVar_ItemId, gStringVar1); StringExpandPlaceholders(gStringVar4, gOtherText_CantBeHeld); sub_80A7590(); DisplayCannotUseItemMessage(taskId, gStringVar4, sub_80A6024, 1); @@ -2874,13 +2874,13 @@ static void DisplayCannotBeHeldMessage(u8 taskId) static void HandlePopupMenuAction_Give(u8 taskId) { PlaySE(SE_SELECT); - if (sub_80F931C(gScriptItemId) == 0) + if (sub_80F931C(gSpecialVar_ItemId) == 0) { sub_80A73FC(); sub_80A7590(); DisplayCannotUseItemMessage(taskId, gOtherText_CantWriteMail, sub_80A6024, 1); } - else if (ItemId_GetImportance(gScriptItemId) == 0) + else if (ItemId_GetImportance(gSpecialVar_ItemId) == 0) { if (CalculatePlayerPartyCount() == 0) { @@ -2931,21 +2931,21 @@ static void OnItemSelect_PkmnList(u8 taskId) { u8 r6 = sCurrentBagPocket + 1; - if (sub_80F931C(gScriptItemId) == 0) + if (sub_80F931C(gSpecialVar_ItemId) == 0) { sub_80A73FC(); sub_80A7590(); DisplayCannotUseItemMessage(taskId, gOtherText_CantWriteMail, sub_80A6024, 1); } - else if (sub_80F92F4(gScriptItemId) == 0) + else if (sub_80F92F4(gSpecialVar_ItemId) == 0) { sub_80A73FC(); - CopyItemName(gScriptItemId, gStringVar1); + CopyItemName(gSpecialVar_ItemId, gStringVar1); StringExpandPlaceholders(gStringVar4, gOtherText_CantBeHeldHere); sub_80A7590(); DisplayCannotUseItemMessage(taskId, gStringVar4, sub_80A6024, 1); } - else if (r6 != 5 && ItemId_GetImportance(gScriptItemId) == 0) + else if (r6 != 5 && ItemId_GetImportance(gSpecialVar_ItemId) == 0) { gTasks[taskId].data[8] = (u32)sub_808A3F8 >> 16; gTasks[taskId].data[9] = (u32)sub_808A3F8; @@ -2983,8 +2983,8 @@ static void OnItemSelect_Shop(u8 taskId) gTasks[taskId].data[10] = gBagPocketScrollStates[sCurrentBagPocket].scrollTop + gBagPocketScrollStates[sCurrentBagPocket].cursorPos + 1; sub_80A48E8(taskId, gBagPocketScrollStates[sCurrentBagPocket].cursorPos, gBagPocketScrollStates[sCurrentBagPocket].cursorPos); sub_80A73FC(); - CopyItemName(gScriptItemId, gStringVar2); - if (ItemId_GetPrice(gScriptItemId) == 0) + CopyItemName(gSpecialVar_ItemId, gStringVar2); + if (ItemId_GetPrice(gSpecialVar_ItemId) == 0) { StringExpandPlaceholders(gStringVar4, gOtherText_CantBuyThat); DisplayCannotUseItemMessage(taskId, gStringVar4, sub_80A6444, 1); @@ -3025,7 +3025,7 @@ static void sub_80A648C(u8 taskId) sub_80A418C(1, 1, 1, 11, 3); else sub_80A418C(1, 1, 1, 11, 2); - BuyMenuDisplayMessage(gScriptItemId, 1); + BuyMenuDisplayMessage(gSpecialVar_ItemId, 1); sub_80A683C(); } @@ -3047,7 +3047,7 @@ static void sub_80A6548(u8 taskId) static void sub_80A6574(u8 taskId) { PlaySE(SE_REGI); - sub_80A6870(gScriptItemId, gTasks[taskId].data[1]); + sub_80A6870(gSpecialVar_ItemId, gTasks[taskId].data[1]); gTasks[taskId].func = sub_80A6548; } @@ -3055,7 +3055,7 @@ static void sub_80A65AC(u8 taskId) { MenuZeroFillWindowRect(7, 6, 13, 12); sub_80A36B8(gBGTilemapBuffers[1], 7, 6, 6, 6); - CopyItemName(gScriptItemId, gStringVar2); + CopyItemName(gSpecialVar_ItemId, gStringVar2); StringExpandPlaceholders(gStringVar4, gOtherText_SoldItem); DisplayCannotUseItemMessage(taskId, gStringVar4, sub_80A6574, 1); sub_80A3D5C(taskId); @@ -3079,14 +3079,14 @@ static void Task_BuyHowManyDialogueHandleInput(u8 taskId) if (sub_80A5350(taskId) == TRUE) { MenuZeroFillWindowRect(6, 11, 12, 11); - BuyMenuDisplayMessage(gScriptItemId, gTasks[taskId].data[1]); + BuyMenuDisplayMessage(gSpecialVar_ItemId, gTasks[taskId].data[1]); } else if (gMain.newKeys & A_BUTTON) { PlaySE(SE_SELECT); MenuZeroFillWindowRect(0, 10, 13, 13); sub_80A36B8(gBGTilemapBuffers[1], 0, 10, 13, 3); - ConvertIntToDecimalStringN(gStringVar1, ItemId_GetPrice(gScriptItemId) / 2 * gTasks[taskId].data[1], STR_CONV_MODE_LEFT_ALIGN, 6); + ConvertIntToDecimalStringN(gStringVar1, ItemId_GetPrice(gSpecialVar_ItemId) / 2 * gTasks[taskId].data[1], STR_CONV_MODE_LEFT_ALIGN, 6); StringExpandPlaceholders(gStringVar4, gOtherText_CanPay); DisplayCannotUseItemMessage(taskId, gStringVar4, sub_80A6650, 1); } @@ -3227,7 +3227,7 @@ static void sub_80A6A84(u8 taskId) s16 *taskData = gTasks[taskId].data; sub_80A4DA4(gBGTilemapBuffers[1]); - CopyItemName(gScriptItemId, gStringVar1); + CopyItemName(gSpecialVar_ItemId, gStringVar1); ConvertIntToDecimalStringN(gStringVar2, taskData[1], STR_CONV_MODE_LEFT_ALIGN, 3); MenuZeroFillWindowRect(7, 6, 11, 13); sub_80A7528(7); @@ -3250,14 +3250,14 @@ static void sub_80A6B64(u8 taskId) { s16 *taskData = gTasks[taskId].data; - if (ItemId_GetImportance(gScriptItemId) == 2) + if (ItemId_GetImportance(gSpecialVar_ItemId) == 2) { gTasks[taskId].func = sub_80A6B00; sub_80A7528(9); } else { - if (AddPCItem(gScriptItemId, taskData[1]) == TRUE) + if (AddPCItem(gSpecialVar_ItemId, taskData[1]) == TRUE) { sub_80A6A84(taskId); } @@ -3325,7 +3325,7 @@ bool32 sub_80A6D1C(void) FreezeMapObjects(); sub_80594C0(); sub_80597F4(); - gScriptItemId = gSaveBlock1.registeredItem; + gSpecialVar_ItemId = gSaveBlock1.registeredItem; taskId = CreateTask(ItemId_GetFieldFunc(gSaveBlock1.registeredItem), 8); gTasks[taskId].data[2] = 1; return TRUE; @@ -3415,7 +3415,7 @@ static const u8 gUnknown_083C170A[] = {5, 0}; static void sub_80A6FDC(void) { - if (ItemId_GetBattleUsage(gScriptItemId) != 0) + if (ItemId_GetBattleUsage(gSpecialVar_ItemId) != 0) { sPopupMenuActionList = gUnknown_083C1708; gUnknown_02038564 = 2; @@ -3454,10 +3454,10 @@ static void OnBagClose_Battle(u8 taskId) static void HandlePopupMenuAction_UseInBattle(u8 taskId) { - if (ItemId_GetBattleFunc(gScriptItemId) != NULL) + if (ItemId_GetBattleFunc(gSpecialVar_ItemId) != NULL) { PlaySE(SE_SELECT); - ItemId_GetBattleFunc(gScriptItemId)(taskId); + ItemId_GetBattleFunc(gSpecialVar_ItemId)(taskId); } } @@ -3525,7 +3525,7 @@ static void sub_80A7230(u8 taskId) PlaySE(SE_SELECT); sub_80F98A4(2); sub_80F98A4(3); - gScriptItemId = ITEM_POKE_BALL; + gSpecialVar_ItemId = ITEM_POKE_BALL; sPopupMenuActionList = gUnknown_083C1708; gUnknown_02038564 = 2; gTasks[taskId].data[10] = gBagPocketScrollStates[sCurrentBagPocket].scrollTop + gBagPocketScrollStates[sCurrentBagPocket].cursorPos + 1; @@ -3824,7 +3824,7 @@ static void sub_80A7768(void) int var; if (r4->unk1 == 1) - text = sub_80A4B90(gScriptItemId); + text = sub_80A4B90(gSpecialVar_ItemId); else text = sItemPopupMenuActions[sPopupMenuActionList[r4->unk1 - 1]].text; var = r4->unk1 - 1; diff --git a/src/field/item_use.c b/src/field/item_use.c index c2e71070c..37cd8ba78 100644 --- a/src/field/item_use.c +++ b/src/field/item_use.c @@ -80,10 +80,10 @@ void ExecuteSwitchToOverworldFromItemUse(u8 taskId) { u8 taskData; - if (gScriptItemId == 0xAF) + if (gSpecialVar_ItemId == 0xAF) taskData = gTasks[taskId].data[15] - 1; else - taskData = ItemId_GetType(gScriptItemId) - 1; + taskData = ItemId_GetType(gSpecialVar_ItemId) - 1; gTasks[taskId].data[8] = (u32)gExitToOverworldFuncList[taskData] >> 16; gTasks[taskId].data[9] = (u32)gExitToOverworldFuncList[taskData]; @@ -157,7 +157,7 @@ void ItemMenu_ReadMail(u8 taskId) if (!gPaletteFade.active) { - mailStruct.itemId = gScriptItemId; + mailStruct.itemId = gSpecialVar_ItemId; HandleReadMail(&mailStruct, sub_80A5D04, 0); DestroyTask(taskId); } @@ -199,9 +199,9 @@ void ItemUseOutOfBattle_Bike(u8 taskId) void ItemUseOnFieldCB_Bike(u8 taskId) { - if (ItemId_GetSecondaryId(gScriptItemId) == 0) + if (ItemId_GetSecondaryId(gSpecialVar_ItemId) == 0) GetOnOffBike(2); - if (ItemId_GetSecondaryId(gScriptItemId) == 1) + if (ItemId_GetSecondaryId(gSpecialVar_ItemId) == 1) GetOnOffBike(4); sub_8064E2C(); @@ -252,7 +252,7 @@ void ItemUseOutOfBattle_Rod(u8 taskId) void ItemUseOnFieldCB_Rod(u8 taskId) { - StartFishing(ItemId_GetSecondaryId(gScriptItemId)); + StartFishing(ItemId_GetSecondaryId(gSpecialVar_ItemId)); DestroyTask(taskId); } @@ -770,11 +770,11 @@ void ItemUseOutOfBattle_SSTicket(u8 taskId) if (gTasks[taskId].data[2] == 0) { MenuZeroFillWindowRect(0, 0xD, 0xD, 0x14); - DisplayItemMessageOnField(taskId, gUnknown_083D61DC[ItemId_GetSecondaryId(gScriptItemId)], sub_80C9BB8, 1); + DisplayItemMessageOnField(taskId, gUnknown_083D61DC[ItemId_GetSecondaryId(gSpecialVar_ItemId)], sub_80C9BB8, 1); } else { - DisplayItemMessageOnField(taskId, gUnknown_083D61DC[ItemId_GetSecondaryId(gScriptItemId)], sub_80C9BD8, 0); + DisplayItemMessageOnField(taskId, gUnknown_083D61DC[ItemId_GetSecondaryId(gSpecialVar_ItemId)], sub_80C9BD8, 0); } } @@ -791,13 +791,13 @@ void sub_80C9C7C(u8 taskId) } else { - ItemId_GetFieldFunc(gScriptItemId)(taskId); + ItemId_GetFieldFunc(gSpecialVar_ItemId)(taskId); } } void sub_80C9D00(u8 taskId) { - RemoveBagItem(gScriptItemId, 1); + RemoveBagItem(gSpecialVar_ItemId, 1); ScriptContext2_Enable(); ScriptContext1_SetupScript(gUnknown_081A1654); DestroyTask(taskId); @@ -876,7 +876,7 @@ void ItemUseOutOfBattle_TMHM(u8 taskId) { MenuZeroFillWindowRect(0, 0xD, 0xD, 0x14); - if (gScriptItemId >= ITEM_HM01) + if (gSpecialVar_ItemId >= ITEM_HM01) DisplayItemMessageOnField(taskId, gOtherText_BootedHM, sub_80C9EE4, 1); // HM else DisplayItemMessageOnField(taskId, gOtherText_BootedTM, sub_80C9EE4, 1); // TM @@ -892,7 +892,7 @@ void sub_80C9F10(u8 taskId) { if (gMain.newKeys & A_BUTTON || gMain.newKeys & B_BUTTON) { - StringCopy(gStringVar1, gMoveNames[ItemIdToBattleMoveId(gScriptItemId)]); + StringCopy(gStringVar1, gMoveNames[ItemIdToBattleMoveId(gSpecialVar_ItemId)]); StringExpandPlaceholders(gStringVar4, gOtherText_ContainsMove); DisplayItemMessageOnField(taskId, gStringVar4, sub_80C9F80, 1); } @@ -913,9 +913,9 @@ void sub_80C9FC0(u8 var) static void PrepareItemUseMessage(void) { - RemoveBagItem(gScriptItemId, 1); + RemoveBagItem(gSpecialVar_ItemId, 1); sub_80A3E0C(); - CopyItemName(gScriptItemId, gStringVar2); + CopyItemName(gSpecialVar_ItemId, gStringVar2); StringExpandPlaceholders(gStringVar4, gOtherText_UsedItem); } @@ -923,7 +923,7 @@ void ItemUseOutOfBattle_Repel(u8 var) { if (VarGet(VAR_REPEL_STEP_COUNT) == FALSE) { - VarSet(VAR_REPEL_STEP_COUNT, ItemId_GetHoldEffectParam(gScriptItemId)); + VarSet(VAR_REPEL_STEP_COUNT, ItemId_GetHoldEffectParam(gSpecialVar_ItemId)); PrepareItemUseMessage(); DisplayItemMessageOnField(var, gStringVar4, CleanUpItemMenuMessage, 1); } @@ -936,7 +936,7 @@ void ItemUseOutOfBattle_Repel(u8 var) void sub_80CA07C(void) { sub_80A3E0C(); - CopyItemName(gScriptItemId, gStringVar2); + CopyItemName(gSpecialVar_ItemId, gStringVar2); } void sub_80CA098(u8 taskId) @@ -950,7 +950,7 @@ void sub_80CA098(u8 taskId) void ItemUseOutOfBattle_BlackWhiteFlute(u8 taskId) { - if (gScriptItemId == ITEM_WHITE_FLUTE) + if (gSpecialVar_ItemId == ITEM_WHITE_FLUTE) { FlagSet(FLAG_SYS_ENC_UP_ITEM); FlagClear(FLAG_SYS_ENC_DOWN_ITEM); @@ -959,7 +959,7 @@ void ItemUseOutOfBattle_BlackWhiteFlute(u8 taskId) gTasks[taskId].func = sub_80CA098; gTasks[taskId].data[15] = 0; } - else if (gScriptItemId == ITEM_BLACK_FLUTE) + else if (gSpecialVar_ItemId == ITEM_BLACK_FLUTE) { FlagSet(FLAG_SYS_ENC_DOWN_ITEM); FlagClear(FLAG_SYS_ENC_UP_ITEM); @@ -1016,7 +1016,7 @@ void ItemUseInBattle_PokeBall(u8 var) { if (PlayerPartyAndPokemonStorageFull() == FALSE) // have room for mon? { - RemoveBagItem(gScriptItemId, 1); + RemoveBagItem(gSpecialVar_ItemId, 1); sub_80A7094(var); } else @@ -1037,8 +1037,8 @@ void sub_80CA2BC(u8 taskId) if(++gTasks[taskId].data[15] > 7) { PlaySE(SE_KAIFUKU); - RemoveBagItem(gScriptItemId, 1); - DisplayItemMessageOnField(taskId, sub_803F378(gScriptItemId), sub_80CA294, 1); + RemoveBagItem(gSpecialVar_ItemId, 1); + DisplayItemMessageOnField(taskId, sub_803F378(gSpecialVar_ItemId), sub_80CA294, 1); } } @@ -1048,7 +1048,7 @@ void ItemUseInBattle_StatIncrease(u8 taskId) MenuZeroFillWindowRect(0, 0xD, 0xD, 0x14); - if (ExecuteTableBasedItemEffect_(&gPlayerParty[partyId], gScriptItemId, partyId, 0) != FALSE) + if (ExecuteTableBasedItemEffect_(&gPlayerParty[partyId], gSpecialVar_ItemId, partyId, 0) != FALSE) { DisplayItemMessageOnField(taskId, gOtherText_WontHaveAnyEffect, CleanUpItemMenuMessage, 1); } @@ -1097,9 +1097,9 @@ void unref_sub_80CA448(u8 var) { MenuZeroFillWindowRect(0, 0xD, 0xD, 0x14); - if (ExecuteTableBasedItemEffect__(0, gScriptItemId, 0) == FALSE) + if (ExecuteTableBasedItemEffect__(0, gSpecialVar_ItemId, 0) == FALSE) { - RemoveBagItem(gScriptItemId, 1); + RemoveBagItem(gSpecialVar_ItemId, 1); GetMonNickname(&gPlayerParty[0], gStringVar1); StringExpandPlaceholders(gStringVar4, gOtherText_SnapConfusion); DisplayItemMessageOnField(var, gStringVar4, sub_80A7094, 1); @@ -1127,7 +1127,7 @@ void ItemUseInBattle_Escape(u8 taskId) void ItemUseOutOfBattle_EnigmaBerry(u8 taskId) { - switch (GetItemEffectType(gScriptItemId) - 1) + switch (GetItemEffectType(gSpecialVar_ItemId) - 1) { case 1: case 2: @@ -1170,7 +1170,7 @@ void ItemUseOutOfBattle_EnigmaBerry(u8 taskId) void ItemUseInBattle_EnigmaBerry(u8 taskId) { - switch (GetItemEffectType(gScriptItemId)) + switch (GetItemEffectType(gSpecialVar_ItemId)) { case 0: ItemUseInBattle_StatIncrease(taskId); diff --git a/src/field/lottery_corner.c b/src/field/lottery_corner.c index 2cfdb7f88..83febc56e 100644 --- a/src/field/lottery_corner.c +++ b/src/field/lottery_corner.c @@ -7,7 +7,7 @@ #include "string_util.h" #include "text.h" -extern u16 gScriptResult; +extern u16 gSpecialVar_Result; extern u16 gSpecialVar_0x8004; extern struct PokemonStorage gPokemonStorage; extern u16 gSpecialVar_0x8005; @@ -46,7 +46,7 @@ void SetRandomLotteryNumber(u16 i) void RetrieveLotteryNumber(void) { u16 lottoNumber = GetLotteryNumber(); - gScriptResult = lottoNumber; + gSpecialVar_Result = lottoNumber; } void PickLotteryCornerTicket(void) @@ -70,7 +70,7 @@ void PickLotteryCornerTicket(void) if (!GetMonData(pkmn, MON_DATA_IS_EGG)) { u32 otId = GetMonData(pkmn, MON_DATA_OT_ID); - u8 numMatchingDigits = GetMatchingDigits(gScriptResult, otId); + u8 numMatchingDigits = GetMatchingDigits(gSpecialVar_Result, otId); if (numMatchingDigits > gSpecialVar_0x8004 && numMatchingDigits > 1) { @@ -97,7 +97,7 @@ void PickLotteryCornerTicket(void) !GetBoxMonData(pkmn, MON_DATA_IS_EGG)) { u32 otId = GetBoxMonData(pkmn, MON_DATA_OT_ID); - u8 numMatchingDigits = GetMatchingDigits(gScriptResult, otId); + u8 numMatchingDigits = GetMatchingDigits(gSpecialVar_Result, otId); if (numMatchingDigits > gSpecialVar_0x8004 && numMatchingDigits > 1) { diff --git a/src/field/map_obj_lock.c b/src/field/map_obj_lock.c index 91feaf177..954fcb446 100644 --- a/src/field/map_obj_lock.c +++ b/src/field/map_obj_lock.c @@ -6,7 +6,7 @@ #include "script_movement.h" #include "task.h" -extern u16 gScriptFacing; +extern u16 gSpecialVar_Facing; bool8 walkrun_is_standing_still(void) { @@ -109,7 +109,7 @@ void unref_sub_8064E5C(void) void sub_8064EAC(void) { - FieldObjectFaceOppositeDirection(&gMapObjects[gSelectedMapObject], gScriptFacing); + FieldObjectFaceOppositeDirection(&gMapObjects[gSelectedMapObject], gSpecialVar_Facing); } void sub_8064ED4(void) diff --git a/src/field/mauville_man.c b/src/field/mauville_man.c index fad6674db..30f6f5233 100644 --- a/src/field/mauville_man.c +++ b/src/field/mauville_man.c @@ -21,7 +21,7 @@ extern struct MusicPlayerInfo gMPlay_SE2; -extern u16 gScriptResult; +extern u16 gSpecialVar_Result; extern u16 gSpecialVar_0x8004; extern const u8 gTextStoryteller_Story1Title[]; @@ -258,12 +258,12 @@ static u8 GetCurrentMauvilleOldMan(void) void ScrSpecial_GetCurrentMauvilleMan(void) { - gScriptResult = GetCurrentMauvilleOldMan(); + gSpecialVar_Result = GetCurrentMauvilleOldMan(); } void ScrSpecial_HasBardSongBeenChanged(void) { - u16 *scriptResult = &gScriptResult; // why?? + u16 *scriptResult = &gSpecialVar_Result; // why?? struct MauvilleManBard *bard = &gSaveBlock1.mauvilleMan.bard; *scriptResult = bard->hasChangedSong; @@ -350,7 +350,7 @@ void ScrSpecial_PlayBardSong(void) void ScrSpecial_GetHipsterSpokenFlag(void) { - u16 *scriptResult = &gScriptResult; // again?? + u16 *scriptResult = &gSpecialVar_Result; // again?? struct MauvilleManHipster *hipster = &gSaveBlock1.mauvilleMan.hipster; *scriptResult = hipster->alreadySpoken; @@ -369,12 +369,12 @@ void ScrSpecial_HipsterTeachWord(void) if (var == 0xFFFF) { - gScriptResult = FALSE; + gSpecialVar_Result = FALSE; } else { EasyChat_GetWordText(gStringVar1, var); - gScriptResult = TRUE; + gSpecialVar_Result = TRUE; } } @@ -384,12 +384,12 @@ void ScrSpecial_GiddyShouldTellAnotherTale(void) if (giddy->taleCounter == 10) { - gScriptResult = FALSE; + gSpecialVar_Result = FALSE; giddy->taleCounter = 0; } else { - gScriptResult = TRUE; + gSpecialVar_Result = TRUE; } } @@ -421,7 +421,7 @@ void ScrSpecial_GenerateGiddyLine(void) else giddy->taleCounter++; - gScriptResult = TRUE; + gSpecialVar_Result = TRUE; } #ifdef NONMATCHING @@ -1251,11 +1251,11 @@ static void Task_StoryListMenu(u8 taskId) break; if (selection == -1 || selection == GetFreeStorySlot()) { - gScriptResult = 0; + gSpecialVar_Result = 0; } else { - gScriptResult = 1; + gSpecialVar_Result = 1; gUnknown_03000748 = selection; } HandleDestroyMenuCursors(); @@ -1266,7 +1266,7 @@ static void Task_StoryListMenu(u8 taskId) } } -// Sets gScriptResult to TRUE if player selected a story +// Sets gSpecialVar_Result to TRUE if player selected a story void ScrSpecial_StorytellerStoryListMenu(void) { CreateTask(Task_StoryListMenu, 0x50); diff --git a/src/field/party_menu.c b/src/field/party_menu.c index 7d21c365a..089f93f9e 100644 --- a/src/field/party_menu.c +++ b/src/field/party_menu.c @@ -4314,7 +4314,7 @@ void TaughtMove(u8 taskId) u16 r4; gTasks[taskId].func = TaskDummy; - sub_806E8D0(taskId, gScriptItemId, sub_808B508); + sub_806E8D0(taskId, gSpecialVar_ItemId, sub_808B508); moveIndex = sub_809FA30(); r4 = GetMonData(ewram1C000.pokemon, MON_DATA_MOVE1 + moveIndex); GetMonNickname(ewram1C000.pokemon, gStringVar1); @@ -4340,7 +4340,7 @@ void StopTryingToTeachMove_806F588(u8 taskId) if (!gPaletteFade.active) { gTasks[taskId].func = TaskDummy; - sub_806E8D0(taskId, gScriptItemId, sub_808B508); + sub_806E8D0(taskId, gSpecialVar_ItemId, sub_808B508); StringCopy(gStringVar2, gMoveNames[ewram1C000.unk8]); StringExpandPlaceholders(gStringVar4, gOtherText_StopTryingTo); sub_806E834(gStringVar4, 1); diff --git a/src/field/pokeblock.c b/src/field/pokeblock.c index 3b70e7d76..4a904fbb1 100644 --- a/src/field/pokeblock.c +++ b/src/field/pokeblock.c @@ -664,7 +664,7 @@ static void sub_810BF7C(u8 taskId) PlaySE(SE_SELECT); if (gUnknown_02039248.unk1 + gUnknown_02039248.unk0 == gUnknown_02039248.unk2) { - gScriptResult = 0xffff; + gSpecialVar_Result = 0xffff; sub_810C31C(taskId); } else @@ -675,7 +675,7 @@ static void sub_810BF7C(u8 taskId) else if (gMain.newKeys & B_BUTTON) { PlaySE(SE_SELECT); - gScriptResult = 0xffff; + gSpecialVar_Result = 0xffff; sub_810C31C(taskId); } } @@ -800,7 +800,7 @@ static void sub_810C31C(u8 taskId) BeginNormalPaletteFade(-1, 0, 0, 16, 0); if (gUnknown_02039244 > 1) { - gScriptItemId = ITEM_NONE; + gSpecialVar_ItemId = ITEM_NONE; } gTasks[taskId].func = sub_810C2C8; } @@ -816,7 +816,7 @@ static void sub_810C368(u8 taskId) MenuDrawTextWindow(7, v0 + 4, 13, 11); PrintMenuItemsReordered(8, v0 + 5, gUnknown_0203924C, gUnknown_083F7EF4, gUnknown_03000758); InitMenu(0, 8, v0 + 5, gUnknown_0203924C, 0, 5); - gScriptItemId = gUnknown_02039248.unk0 + gUnknown_02039248.unk1; + gSpecialVar_ItemId = gUnknown_02039248.unk0 + gUnknown_02039248.unk1; gTasks[taskId].func = sub_810C40C; } @@ -855,7 +855,7 @@ static void sub_810C4C4(u8 taskId) if (!gPaletteFade.active) { sub_810C2B0(); - sub_8136130(&gSaveBlock1.pokeblocks[gScriptItemId], sub_810B96C); + sub_8136130(&gSaveBlock1.pokeblocks[gSpecialVar_ItemId], sub_810B96C); DestroyTask(taskId); } } @@ -939,21 +939,21 @@ static void sub_810C748(u8 taskId) static void sub_810C788(u8 taskId) { - s16 v0 = PokeblockGetGain(GetNature(&gEnemyParty[0]), &gSaveBlock1.pokeblocks[gScriptItemId]); - StringCopy(gBattleTextBuff1, gPokeblockNames[gSaveBlock1.pokeblocks[gScriptItemId].color]); - PokeblockClearIfExists(gScriptItemId); - gScriptItemId = gSaveBlock1.pokeblocks[gScriptItemId].color << 8; + s16 v0 = PokeblockGetGain(GetNature(&gEnemyParty[0]), &gSaveBlock1.pokeblocks[gSpecialVar_ItemId]); + StringCopy(gBattleTextBuff1, gPokeblockNames[gSaveBlock1.pokeblocks[gSpecialVar_ItemId].color]); + PokeblockClearIfExists(gSpecialVar_ItemId); + gSpecialVar_ItemId = gSaveBlock1.pokeblocks[gSpecialVar_ItemId].color << 8; if (v0 == 0) { - gScriptItemId += 1; + gSpecialVar_ItemId += 1; } if (v0 > 0) { - gScriptItemId += 2; + gSpecialVar_ItemId += 2; } if (v0 < 0) { - gScriptItemId += 3; + gSpecialVar_ItemId += 3; } BeginNormalPaletteFade(-1, 0, 0, 16, 0); gTasks[taskId].func = sub_810C2C8; @@ -961,10 +961,10 @@ static void sub_810C788(u8 taskId) static void sub_810C854(u8 taskId) { - SafariZoneActivatePokeblockFeeder(gScriptItemId); - StringCopy(gStringVar1, gPokeblockNames[gSaveBlock1.pokeblocks[gScriptItemId].color]); - gScriptResult = gScriptItemId; - PokeblockClearIfExists(gScriptItemId); + SafariZoneActivatePokeblockFeeder(gSpecialVar_ItemId); + StringCopy(gStringVar1, gPokeblockNames[gSaveBlock1.pokeblocks[gSpecialVar_ItemId].color]); + gSpecialVar_Result = gSpecialVar_ItemId; + PokeblockClearIfExists(gSpecialVar_ItemId); BeginNormalPaletteFade(-1, 0, 0, 16, 0); gTasks[taskId].func = sub_810C2C8; } diff --git a/src/field/safari_zone.c b/src/field/safari_zone.c index 73fb01f3e..e9ca3a9f9 100644 --- a/src/field/safari_zone.c +++ b/src/field/safari_zone.c @@ -37,7 +37,7 @@ extern u8 gUnknown_081C3448; extern u8 gUnknown_081C3459; extern u8 *gPokeblockNames[]; -extern u16 gScriptResult; +extern u16 gSpecialVar_Result; bool32 GetSafariZoneFlag(void) { @@ -137,13 +137,13 @@ void SafariZoneGetPokeblockNameInFeeder(void) && gPokeblockFeeders[i].x == x && gPokeblockFeeders[i].y == y) { - gScriptResult = i; + gSpecialVar_Result = i; StringCopy(gStringVar1, gPokeblockNames[gPokeblockFeeders[i].pokeblock.color]); return; } } - gScriptResult = -1; + gSpecialVar_Result = -1; } static void GetPokeblockFeederWithinRange(void) @@ -166,23 +166,23 @@ static void GetPokeblockFeederWithinRange(void) y *= -1; if ((x + y) <= 5) { - gScriptResult = i; + gSpecialVar_Result = i; return; } } } - gScriptResult = -1; + gSpecialVar_Result = -1; } struct Pokeblock *unref_sub_80C8418(void) { SafariZoneGetPokeblockNameInFeeder(); - if (gScriptResult == 0xFFFF) + if (gSpecialVar_Result == 0xFFFF) return NULL; else - return &gPokeblockFeeders[gScriptResult].pokeblock; + return &gPokeblockFeeders[gSpecialVar_Result].pokeblock; } @@ -190,10 +190,10 @@ struct Pokeblock *SafariZoneGetActivePokeblock(void) { GetPokeblockFeederWithinRange(); - if (gScriptResult == 0xFFFF) + if (gSpecialVar_Result == 0xFFFF) return NULL; else - return &gPokeblockFeeders[gScriptResult].pokeblock; + return &gPokeblockFeeders[gSpecialVar_Result].pokeblock; } @@ -240,13 +240,13 @@ bool8 unref_sub_80C853C(void) { SafariZoneGetPokeblockNameInFeeder(); - if (gScriptResult == 0xFFFF) + if (gSpecialVar_Result == 0xFFFF) { return FALSE; } ConvertIntToDecimalStringN(gStringVar2, - gPokeblockFeeders[gScriptResult].stepCounter, + gPokeblockFeeders[gSpecialVar_Result].stepCounter, STR_CONV_MODE_LEADING_ZEROS, 3); return TRUE; diff --git a/src/field/scrcmd.c b/src/field/scrcmd.c index f0cafcf1a..d5fc56e8d 100644 --- a/src/field/scrcmd.c +++ b/src/field/scrcmd.c @@ -61,9 +61,9 @@ extern u16 gSpecialVar_0x8001; extern u16 gSpecialVar_0x8002; extern u16 gSpecialVar_0x8004; -extern u16 gScriptResult; +extern u16 gSpecialVar_Result; -extern u16 gScriptContestCategory; +extern u16 gSpecialVar_ContestCategory; extern SpecialFunc gSpecials[]; extern u8 *gStdScripts[]; @@ -479,7 +479,7 @@ bool8 ScrCmd_random(struct ScriptContext *ctx) { u16 max = VarGet(ScriptReadHalfword(ctx)); - gScriptResult = Random() % max; + gSpecialVar_Result = Random() % max; return FALSE; } @@ -488,7 +488,7 @@ bool8 ScrCmd_giveitem(struct ScriptContext *ctx) u16 itemId = VarGet(ScriptReadHalfword(ctx)); u32 quantity = VarGet(ScriptReadHalfword(ctx)); - gScriptResult = AddBagItem(itemId, (u8)quantity); + gSpecialVar_Result = AddBagItem(itemId, (u8)quantity); return FALSE; } @@ -497,7 +497,7 @@ bool8 ScrCmd_takeitem(struct ScriptContext *ctx) u16 itemId = VarGet(ScriptReadHalfword(ctx)); u32 quantity = VarGet(ScriptReadHalfword(ctx)); - gScriptResult = RemoveBagItem(itemId, (u8)quantity); + gSpecialVar_Result = RemoveBagItem(itemId, (u8)quantity); return FALSE; } @@ -506,7 +506,7 @@ bool8 ScrCmd_checkitemspace(struct ScriptContext *ctx) u16 itemId = VarGet(ScriptReadHalfword(ctx)); u32 quantity = VarGet(ScriptReadHalfword(ctx)); - gScriptResult = CheckBagHasSpace(itemId, (u8)quantity); + gSpecialVar_Result = CheckBagHasSpace(itemId, (u8)quantity); return FALSE; } @@ -515,7 +515,7 @@ bool8 ScrCmd_checkitem(struct ScriptContext *ctx) u16 itemId = VarGet(ScriptReadHalfword(ctx)); u32 quantity = VarGet(ScriptReadHalfword(ctx)); - gScriptResult = CheckBagHasItem(itemId, (u8)quantity); + gSpecialVar_Result = CheckBagHasItem(itemId, (u8)quantity); return FALSE; } @@ -523,7 +523,7 @@ bool8 ScrCmd_checkitemtype(struct ScriptContext *ctx) { u16 itemId = VarGet(ScriptReadHalfword(ctx)); - gScriptResult = GetPocketByItemId(itemId); + gSpecialVar_Result = GetPocketByItemId(itemId); return FALSE; } @@ -532,7 +532,7 @@ bool8 ScrCmd_givepcitem(struct ScriptContext *ctx) u16 itemId = VarGet(ScriptReadHalfword(ctx)); u16 quantity = VarGet(ScriptReadHalfword(ctx)); - gScriptResult = AddPCItem(itemId, quantity); + gSpecialVar_Result = AddPCItem(itemId, quantity); return FALSE; } @@ -541,7 +541,7 @@ bool8 ScrCmd_checkpcitem(struct ScriptContext *ctx) u16 itemId = VarGet(ScriptReadHalfword(ctx)); u16 quantity = VarGet(ScriptReadHalfword(ctx)); - gScriptResult = CheckPCHasItem(itemId, quantity); + gSpecialVar_Result = CheckPCHasItem(itemId, quantity); return FALSE; } @@ -549,7 +549,7 @@ bool8 ScrCmd_givedecoration(struct ScriptContext *ctx) { u32 decoration = VarGet(ScriptReadHalfword(ctx)); - gScriptResult = IsThereStorageSpaceForDecoration(decoration); + gSpecialVar_Result = IsThereStorageSpaceForDecoration(decoration); return FALSE; } @@ -557,7 +557,7 @@ bool8 ScrCmd_takedecoration(struct ScriptContext *ctx) { u32 decoration = VarGet(ScriptReadHalfword(ctx)); - gScriptResult = sub_81340A8(decoration); + gSpecialVar_Result = sub_81340A8(decoration); return FALSE; } @@ -565,7 +565,7 @@ bool8 ScrCmd_checkdecorspace(struct ScriptContext *ctx) { u32 decorId = VarGet(ScriptReadHalfword(ctx)); - gScriptResult = sub_8134074(decorId); + gSpecialVar_Result = sub_8134074(decorId); return FALSE; } @@ -573,7 +573,7 @@ bool8 ScrCmd_checkdecor(struct ScriptContext *ctx) { u32 decorId = VarGet(ScriptReadHalfword(ctx)); - gScriptResult = sub_8133FE4(decorId); + gSpecialVar_Result = sub_8133FE4(decorId); return FALSE; } @@ -641,7 +641,7 @@ bool8 ScrCmd_fadescreenspeed(struct ScriptContext *ctx) return TRUE; } -bool8 s28_pause_asm() +bool8 RunPauseTimer() { sPauseCounter--; @@ -654,7 +654,7 @@ bool8 s28_pause_asm() bool8 ScrCmd_delay(struct ScriptContext *ctx) { sPauseCounter = ScriptReadHalfword(ctx); - SetupNativeScript(ctx, s28_pause_asm); + SetupNativeScript(ctx, RunPauseTimer); return TRUE; } @@ -861,7 +861,7 @@ bool8 ScrCmd_getplayerxy(struct ScriptContext *ctx) bool8 ScrCmd_getpartysize(struct ScriptContext *ctx) { - gScriptResult = CalculatePlayerPartyCount(); + gSpecialVar_Result = CalculatePlayerPartyCount(); return FALSE; } @@ -871,7 +871,7 @@ bool8 ScrCmd_playse(struct ScriptContext *ctx) return FALSE; } -static bool8 WaitForSoundEffectFinish() +static bool8 WaitForSoundEffectFinish(void) { if (!IsSEPlaying()) return TRUE; @@ -891,7 +891,7 @@ bool8 ScrCmd_playfanfare(struct ScriptContext *ctx) return FALSE; } -static bool8 WaitForFanfareFinish() +static bool8 WaitForFanfareFinish(void) { return IsFanfareTaskInactive(); } @@ -1554,7 +1554,7 @@ bool8 ScrCmd_givemon(struct ScriptContext *ctx) u32 unkParam2 = ScriptReadWord(ctx); u8 unkParam3 = ScriptReadByte(ctx); - gScriptResult = ScriptGiveMon(species, level, item, unkParam1, unkParam2, unkParam3); + gSpecialVar_Result = ScriptGiveMon(species, level, item, unkParam1, unkParam2, unkParam3); return FALSE; } @@ -1562,7 +1562,7 @@ bool8 ScrCmd_giveegg(struct ScriptContext *ctx) { u16 species = VarGet(ScriptReadHalfword(ctx)); - gScriptResult = ScriptGiveEgg(species); + gSpecialVar_Result = ScriptGiveEgg(species); return FALSE; } @@ -1581,7 +1581,7 @@ bool8 ScrCmd_checkpartymove(struct ScriptContext *ctx) u8 i; u16 moveId = ScriptReadHalfword(ctx); - gScriptResult = 6; + gSpecialVar_Result = 6; for (i = 0; i < PARTY_SIZE; i++) { u16 species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES, NULL); @@ -1590,7 +1590,7 @@ bool8 ScrCmd_checkpartymove(struct ScriptContext *ctx) // UB: GetMonData() arguments don't match function definition if (!GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG) && pokemon_has_move(&gPlayerParty[i], moveId) == TRUE) { - gScriptResult = i; + gSpecialVar_Result = i; gSpecialVar_0x8004 = species; break; } @@ -1624,7 +1624,7 @@ bool8 ScrCmd_checkmoney(struct ScriptContext *ctx) u8 ignore = ScriptReadByte(ctx); if (!ignore) - gScriptResult = IsEnoughMoney(gSaveBlock1.money, amount); + gSpecialVar_Result = IsEnoughMoney(gSaveBlock1.money, amount); return FALSE; } @@ -1804,7 +1804,7 @@ bool8 ScrCmd_getpricereduction(struct ScriptContext *ctx) { u16 value = VarGet(ScriptReadHalfword(ctx)); - gScriptResult = GetPriceReduction(value); + gSpecialVar_Result = GetPriceReduction(value); return FALSE; } @@ -1831,7 +1831,7 @@ bool8 ScrCmd_showcontestresults(struct ScriptContext *ctx) bool8 ScrCmd_contestlinktransfer(struct ScriptContext *ctx) { - sub_80C4980(gScriptContestCategory); + sub_80C4980(gSpecialVar_ContestCategory); ScriptContext1_Stop(); return TRUE; } @@ -1878,7 +1878,7 @@ bool8 ScrCmd_setrespawn(struct ScriptContext *ctx) bool8 ScrCmd_checkplayergender(struct ScriptContext *ctx) { - gScriptResult = gSaveBlock2.playerGender; + gSpecialVar_Result = gSaveBlock2.playerGender; return FALSE; } @@ -2002,9 +2002,9 @@ bool8 ScrCmd_givecoins(struct ScriptContext *ctx) u16 coins = VarGet(ScriptReadHalfword(ctx)); if (GiveCoins(coins) == TRUE) - gScriptResult = 0; + gSpecialVar_Result = 0; else - gScriptResult = 1; + gSpecialVar_Result = 1; return FALSE; } @@ -2013,8 +2013,8 @@ bool8 ScrCmd_takecoins(struct ScriptContext *ctx) u16 coins = VarGet(ScriptReadHalfword(ctx)); if (TakeCoins(coins) == TRUE) - gScriptResult = 0; + gSpecialVar_Result = 0; else - gScriptResult = 1; + gSpecialVar_Result = 1; return FALSE; } diff --git a/src/field/script_menu.c b/src/field/script_menu.c index 1f8c2c45e..9f3ab75cc 100644 --- a/src/field/script_menu.c +++ b/src/field/script_menu.c @@ -580,7 +580,7 @@ const u8 *const gUnknown_083CE048[] = extern u8 gPCText_WhichPCShouldBeAccessed[]; -extern u16 gScriptResult; +extern u16 gSpecialVar_Result; static void Task_HandleMultichoiceInput(u8); static void Task_HandleYesNoInput(u8); @@ -599,7 +599,7 @@ bool8 ScriptMenu_Multichoice(u8 left, u8 top, u8 multichoiceId, u8 ignoreBPress) } else { - gScriptResult = 0xFF; + gSpecialVar_Result = 0xFF; DrawMultichoiceMenu(left, top, gMultichoiceLists[multichoiceId].count, gMultichoiceLists[multichoiceId].list, ignoreBPress, 0); return TRUE; } @@ -613,7 +613,7 @@ bool8 ScriptMenu_MultichoiceWithDefault(u8 left, u8 top, u8 multichoiceId, u8 ig } else { - gScriptResult = 0xFF; + gSpecialVar_Result = 0xFF; DrawMultichoiceMenu(left, top, gMultichoiceLists[multichoiceId].count, gMultichoiceLists[multichoiceId].list, ignoreBPress, defaultChoice); return TRUE; } @@ -698,11 +698,11 @@ static void Task_HandleMultichoiceInput(u8 taskId) if (gTasks[taskId].tIgnoreBPress) return; PlaySE(SE_SELECT); - gScriptResult = 127; + gSpecialVar_Result = 127; } else { - gScriptResult = selection; + gSpecialVar_Result = selection; } HandleDestroyMenuCursors(); MenuZeroFillWindowRect(gTasks[taskId].tLeft, gTasks[taskId].tTop, gTasks[taskId].tRight, gTasks[taskId].tBottom); @@ -720,7 +720,7 @@ bool8 Multichoice(u8 left, u8 top, u8 multichoiceId, u8 ignoreBPress) } else { - gScriptResult = 0xFF; + gSpecialVar_Result = 0xFF; sub_80B53B4(left, top, gMultichoiceLists[multichoiceId].count, gMultichoiceLists[multichoiceId].list, ignoreBPress); return TRUE; } @@ -760,7 +760,7 @@ bool8 ScriptMenu_YesNo(u8 left, u8 top) } else { - gScriptResult = 0xFF; + gSpecialVar_Result = 0xFF; DisplayYesNoMenu(left, top, 1); taskId = CreateTask(Task_HandleYesNoInput, 0x50); gTasks[taskId].tLeft = left; @@ -772,7 +772,7 @@ bool8 ScriptMenu_YesNo(u8 left, u8 top) // unused bool8 IsScriptActive(void) { - if (gScriptResult == 0xFF) + if (gSpecialVar_Result == 0xFF) return FALSE; else return TRUE; @@ -795,10 +795,10 @@ static void Task_HandleYesNoInput(u8 taskId) case -1: case 1: PlaySE(SE_SELECT); - gScriptResult = 0; + gSpecialVar_Result = 0; break; case 0: - gScriptResult = 1; + gSpecialVar_Result = 1; break; } @@ -823,7 +823,7 @@ bool8 ScriptMenu_MultichoiceGrid(u8 left, u8 top, u8 multichoiceId, u8 ignoreBPr u8 taskId; u8 width; - gScriptResult = 0xFF; + gSpecialVar_Result = 0xFF; sub_807274C(left, top, gMultichoiceLists[multichoiceId].count, 0, gMultichoiceLists[multichoiceId].list, columnCount, 0); @@ -860,11 +860,11 @@ static void Task_HandleMultichoiceGridInput(u8 taskId) if (gTasks[taskId].tIgnoreBPress) return; PlaySE(SE_SELECT); - gScriptResult = 127; + gSpecialVar_Result = 127; } else { - gScriptResult = selection; + gSpecialVar_Result = selection; } HandleDestroyMenuCursors(); MenuZeroFillWindowRect(gTasks[taskId].tLeft, gTasks[taskId].tTop, gTasks[taskId].tRight, gTasks[taskId].tBottom); @@ -888,7 +888,7 @@ bool8 ScrSpecial_CreatePCMenu(void) } else { - gScriptResult = 0xFF; + gSpecialVar_Result = 0xFF; ScriptMenu_CreatePCMenu(); return TRUE; } diff --git a/src/field/secret_base.c b/src/field/secret_base.c index bb7716190..7589ab1e3 100644 --- a/src/field/secret_base.c +++ b/src/field/secret_base.c @@ -175,11 +175,11 @@ void sub_80BB5D0(void) void sub_80BB5E4(void) { u16 i; - gScriptResult = 0; + gSpecialVar_Result = 0; for (i = 0; i < MAX_SECRET_BASES; i++) { if (gUnknown_020387DC != gSaveBlock1.secretBases[i].secretBaseId) continue; - gScriptResult = 1; + gSpecialVar_Result = 1; VarSet(VAR_0x4054, i); break; } @@ -188,9 +188,9 @@ void sub_80BB5E4(void) void sub_80BB63C(void) // 80bb63c { if (gSaveBlock1.secretBases[0].secretBaseId) - gScriptResult = 1; + gSpecialVar_Result = 1; else - gScriptResult = 0; + gSpecialVar_Result = 0; } u8 sub_80BB66C(void) // 80bb66c @@ -462,13 +462,13 @@ void sub_80BBDD0(void) gSpecialVar_0x8007 = roomdecorpos[decidx] & 0xF; metatile = MapGridGetMetatileBehaviorAt(gSpecialVar_0x8006 + 7, gSpecialVar_0x8007 + 7); if (sub_80572D8(metatile) == TRUE || sub_80572EC(metatile) == TRUE) { - gScriptResult = gMapHeader.events->mapObjects[objid].graphicsId + VAR_0x3F20; - VarSet(gScriptResult, gDecorations[roomdecor[decidx]].tiles[0]); - gScriptResult = gMapHeader.events->mapObjects[objid].localId; + gSpecialVar_Result = gMapHeader.events->mapObjects[objid].graphicsId + VAR_0x3F20; + VarSet(gSpecialVar_Result, gDecorations[roomdecor[decidx]].tiles[0]); + gSpecialVar_Result = gMapHeader.events->mapObjects[objid].localId; FlagClear(gSpecialVar_0x8004 + 0xAE); - show_sprite(gScriptResult, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup); - sub_805C0F8(gScriptResult, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, gSpecialVar_0x8006, gSpecialVar_0x8007); - sub_805C78C(gScriptResult, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup); + show_sprite(gSpecialVar_Result, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup); + sub_805C0F8(gSpecialVar_Result, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, gSpecialVar_0x8006, gSpecialVar_0x8007); + sub_805C78C(gSpecialVar_Result, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup); gSpecialVar_0x8004 ++; } } @@ -504,7 +504,7 @@ bool8 sub_80BC050(void) { sub_80BB5D0(); sub_80BB5E4(); - if (gScriptResult == 1) + if (gSpecialVar_Result == 1) return FALSE; return TRUE; } @@ -539,9 +539,9 @@ void sub_80BC0F8(void) { void sub_80BC114(void) { if (gSaveBlock1.secretBases[0].secretBaseId != gUnknown_020387DC) - gScriptResult = 1; + gSpecialVar_Result = 1; else - gScriptResult = 0; + gSpecialVar_Result = 0; } u8 sub_80BC14C(u8 sbid) @@ -862,15 +862,15 @@ void sub_80BC56C(void) u8 secretBaseIndex = sub_80BC14C(gUnknown_020387DC); if (sub_80BC268(secretBaseIndex) == TRUE) { - gScriptResult = 1; + gSpecialVar_Result = 1; } else if (sub_80BC538() > 9) { - gScriptResult = 2; + gSpecialVar_Result = 2; } else { - gScriptResult = 0; + gSpecialVar_Result = 0; } } @@ -1237,7 +1237,7 @@ void sub_80BCE1C(void) void sub_80BCE4C() { - gSaveBlock1.secretBases[VarGet(VAR_0x4054)].sbr_field_1_5 = gScriptResult; + gSaveBlock1.secretBases[VarGet(VAR_0x4054)].sbr_field_1_5 = gSpecialVar_Result; } void sub_80BCE90() @@ -1257,7 +1257,7 @@ void sub_80BCE90() } gSpecialVar_0x8004 = sub_80BCCA4(curBaseIndex); - gScriptResult = gSaveBlock1.secretBases[curBaseIndex].sbr_field_1_5; + gSpecialVar_Result = gSaveBlock1.secretBases[curBaseIndex].sbr_field_1_5; } void sub_80BCF1C(u8 taskId) diff --git a/src/field/start_menu.c b/src/field/start_menu.c index 9f4eacd09..dccf1714e 100644 --- a/src/field/start_menu.c +++ b/src/field/start_menu.c @@ -50,7 +50,7 @@ static bool8 savingComplete; extern bool8 gDifferentSaveFile; extern u16 gSaveFileStatus; -extern u16 gScriptResult; +extern u16 gSpecialVar_Result; extern u8 gUnknown_03004860; @@ -528,10 +528,10 @@ static void Task_SaveDialog(u8 taskId) { case SAVE_CANCELED: case SAVE_ERROR: - gScriptResult = 0; + gSpecialVar_Result = 0; break; case SAVE_SUCCESS: - gScriptResult = status; + gSpecialVar_Result = status; break; case SAVE_IN_PROGRESS: return; diff --git a/src/field/starter_choose.c b/src/field/starter_choose.c index 149eaa03d..701d4087a 100644 --- a/src/field/starter_choose.c +++ b/src/field/starter_choose.c @@ -16,7 +16,7 @@ #include "trig.h" #include "unknown_task.h" -extern u16 gScriptResult; +extern u16 gSpecialVar_Result; extern struct SpriteTemplate gUnknown_02024E8C; //-------------------------------------------------- @@ -439,7 +439,7 @@ static void Task_StarterChoose5(u8 taskId) { case 0: // YES //Return the starter choice and exit. - gScriptResult = gTasks[taskId].tStarterSelection; + gSpecialVar_Result = gTasks[taskId].tStarterSelection; SetMainCallback2(gMain.savedCallback); break; case 1: // NO diff --git a/src/field/trader.c b/src/field/trader.c index c4fe73ba1..61cb0b4a2 100644 --- a/src/field/trader.c +++ b/src/field/trader.c @@ -179,7 +179,7 @@ void Task_HandleGetDecorationMenuInput(u8 taskId) void ScrSpecial_GetTraderTradedFlag(void) { struct MauvilleManTrader *trader = &gSaveBlock1.mauvilleMan.trader; - gScriptResult = trader->alreadyTraded; + gSpecialVar_Result = trader->alreadyTraded; } void ScrSpecial_DoesPlayerHaveNoDecorations(void) @@ -190,21 +190,21 @@ void ScrSpecial_DoesPlayerHaveNoDecorations(void) { if (sub_8134194(i)) { - gScriptResult = FALSE; + gSpecialVar_Result = FALSE; return; } } - gScriptResult = TRUE; + gSpecialVar_Result = TRUE; } void ScrSpecial_IsDecorationFull(void) { - gScriptResult = FALSE; + gSpecialVar_Result = FALSE; if (gDecorations[gSpecialVar_0x8004].category != gDecorations[gSpecialVar_0x8006].category && sub_8133F9C(gDecorations[gSpecialVar_0x8004].category) == -1) { sub_80FE7D4(gStringVar2, gDecorations[gSpecialVar_0x8004].category); - gScriptResult = TRUE; + gSpecialVar_Result = TRUE; } } diff --git a/src/field/tv.c b/src/field/tv.c index db96775e3..1d5bf929c 100644 --- a/src/field/tv.c +++ b/src/field/tv.c @@ -68,10 +68,10 @@ extern struct TVSaleItem gUnknown_02038724[3]; struct UnkTvStruct gUnknown_03005D38; -extern u16 gScriptLastTalked; +extern u16 gSpecialVar_LastTalked; -extern u8 gScriptContestCategory; -extern u8 gScriptContestRank; +extern u8 gSpecialVar_ContestCategory; +extern u8 gSpecialVar_ContestRank; extern u8 gUnknown_03004316[11]; extern u8 gBattleOutcome; @@ -447,8 +447,8 @@ void ClearTVShowData(void) bool8 sub_80BF1B4(u8); void sub_80BF20C(void); -extern u8 gScriptContestCategory; -extern u8 gScriptContestRank; +extern u8 gSpecialVar_ContestCategory; +extern u8 gSpecialVar_ContestRank; extern u8 gUnknown_03004316[11]; extern u8 gBattleOutcome; @@ -983,8 +983,8 @@ void sub_80BE284(u8 a0) if (gUnknown_03005D38.var0 != -1) { bravoTrainer->contestResult = a0; - bravoTrainer->contestCategory = gScriptContestCategory; - bravoTrainer->contestRank = gScriptContestRank; + bravoTrainer->contestCategory = gSpecialVar_ContestCategory; + bravoTrainer->contestRank = gSpecialVar_ContestRank; bravoTrainer->species = GetMonData(&gPlayerParty[gUnknown_02038694], MON_DATA_SPECIES, NULL); GetMonData(&gPlayerParty[gUnknown_02038694], MON_DATA_NICKNAME, bravoTrainer->pokemonNickname); } @@ -1047,7 +1047,7 @@ void sub_80BE3BC(void) void sub_80BE478(void) { sub_80BF478(); - if (gScriptResult == 1) + if (gSpecialVar_Result == 1) return; GetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_NICKNAME, gStringVar1); @@ -1414,7 +1414,7 @@ void sub_80BECE8(void) arg0 = sub_80BECA0(); if (arg0 == 0xff) { - gScriptResult = 0; + gSpecialVar_Result = 0; return; } if (gSaveBlock1.unknown_2ABC[arg0].val2 == 0) @@ -1433,7 +1433,7 @@ void sub_80BECE8(void) gSaveBlock1.unknown_2ABC[arg0].val1 = 0; ShowFieldMessage(gTVNewsTextGroup1[gSaveBlock1.unknown_2ABC[arg0].val0]); } - gScriptResult = 1; + gSpecialVar_Result = 1; } bool8 GetPriceReduction(u8 arg0) @@ -1462,7 +1462,7 @@ bool8 IsPriceDiscounted(u8 arg0) case 1: if (gSaveBlock1.location.mapGroup == MAP_GROUP(SLATEPORT_CITY) && gSaveBlock1.location.mapNum == MAP_NUM(SLATEPORT_CITY) - && gScriptLastTalked == 0x1a) + && gSpecialVar_LastTalked == 0x1a) return TRUE; else return FALSE; @@ -1660,7 +1660,7 @@ void sub_80BF25C(u8 showType) { if(gSaveBlock1.tvShows[i].common.var01 == 1) { - gScriptResult = 1; + gSpecialVar_Result = 1; } else { @@ -1676,7 +1676,7 @@ void sub_80BF25C(u8 showType) void sub_80BF2C4(void) { - gScriptResult = 0; + gSpecialVar_Result = 0; switch (gSpecialVar_0x8005) { case TVSHOW_FAN_CLUB_LETTER: @@ -1708,7 +1708,7 @@ void sub_80BF334(void) struct TVShowFanClubLetter *fanclubLetter; sub_80BF25C(TVSHOW_FAN_CLUB_LETTER); - if (gScriptResult == 0) + if (gSpecialVar_Result == 0) { StringCopy(gStringVar1, gSpeciesNames[GetMonData(&gPlayerParty[GetLeadMonIndex()], MON_DATA_SPECIES, 0)]); fanclubLetter = &gSaveBlock1.tvShows[gUnknown_03005D38.var0].fanclubLetter; @@ -1721,7 +1721,7 @@ void sub_80BF3A4(void) struct TVShowRecentHappenings *recentHappenings; sub_80BF25C(TVSHOW_RECENT_HAPPENINGS); - if (gScriptResult == 0) + if (gSpecialVar_Result == 0) { recentHappenings = &gSaveBlock1.tvShows[gUnknown_03005D38.var0].recentHappenings; sub_80EB6FC(recentHappenings->var04, 6); @@ -1733,7 +1733,7 @@ void sub_80BF3DC(void) struct TVShowFanclubOpinions *fanclubOpinions; sub_80BF25C(TVSHOW_PKMN_FAN_CLUB_OPINIONS); - if (gScriptResult == 0) + if (gSpecialVar_Result == 0) { StringCopy(gStringVar1, gSpeciesNames[GetMonData(&gPlayerParty[GetLeadMonIndex()], MON_DATA_SPECIES, 0)]); GetMonData(&gPlayerParty[GetLeadMonIndex()], MON_DATA_NICKNAME, gStringVar2); @@ -1745,7 +1745,7 @@ void sub_80BF3DC(void) void sub_80BF46C(void) { - gScriptResult = 1; + gSpecialVar_Result = 1; } void sub_80BF478(void) @@ -1758,7 +1758,7 @@ void sub_80BF484(void) struct TVShowBravoTrainerPokemonProfiles *bravoTrainer; sub_80BF25C(TVSHOW_BRAVO_TRAINER_POKEMON_PROFILE); - if (gScriptResult == 0) + if (gSpecialVar_Result == 0) { bravoTrainer = &gSaveBlock1.tvShows[gUnknown_03005D38.var0].bravoTrainer; sub_80EB6FC(bravoTrainer->var04, 2); @@ -1770,7 +1770,7 @@ void sub_80BF4BC(void) struct TVShowBravoTrainerBattleTowerSpotlight *bravoTrainerTower; sub_80BF25C(TVSHOW_BRAVO_TRAINER_BATTLE_TOWER_PROFILE); - if (gScriptResult == 0) + if (gSpecialVar_Result == 0) { bravoTrainerTower = &gSaveBlock1.tvShows[gUnknown_03005D38.var0].bravoTrainerTower; sub_80EB6FC(bravoTrainerTower->var18, 1); // wrong struct ident, fix later @@ -1898,9 +1898,9 @@ void sub_80BF6D8(void) gUnknown_03005D38.var0 = sub_80BF720(gSaveBlock1.tvShows); gSpecialVar_0x8006 = gUnknown_03005D38.var0; if (gUnknown_03005D38.var0 == -1) - gScriptResult = 1; + gSpecialVar_Result = 1; else - gScriptResult = 0; + gSpecialVar_Result = 0; } s8 sub_80BF720(TVShow tvShow[]) @@ -2095,9 +2095,9 @@ void sub_80BFAE0(void) void sub_80BFB10(void) { if (GetPlayerTrainerId() == GetMonData(&(gPlayerParty[gSpecialVar_0x8004]), MON_DATA_OT_ID, 0)) - gScriptResult = 0; + gSpecialVar_Result = 0; else - gScriptResult = 1; + gSpecialVar_Result = 1; } u8 sub_80BFB54(u8 arg0) @@ -2869,7 +2869,7 @@ void DoTVShowBravoTrainerPokemonProfile(void) struct TVShowBravoTrainerPokemonProfiles *bravoTrainer = &gSaveBlock1.tvShows[gSpecialVar_0x8004].bravoTrainer; u8 state; - gScriptResult = 0; + gSpecialVar_Result = 0; state = gUnknown_020387E8; switch(state) { @@ -2940,7 +2940,7 @@ void DoTVShowBravoTrainerBattleTowerProfile(void) struct TVShowBravoTrainerBattleTowerSpotlight *bravoTrainerTower = &gSaveBlock1.tvShows[gSpecialVar_0x8004].bravoTrainerTower; u8 state; - gScriptResult = 0; + gSpecialVar_Result = 0; state = gUnknown_020387E8; switch(state) { @@ -3029,7 +3029,7 @@ void DoTVShowTodaysSmartShopper(void) struct TVShowSmartShopper *smartShopper = &gSaveBlock1.tvShows[gSpecialVar_0x8004].smartshopperShow; u8 state; - gScriptResult = 0; + gSpecialVar_Result = 0; state = gUnknown_020387E8; switch(state) { @@ -3117,7 +3117,7 @@ void DoTVShowTheNameRaterShow(void) struct TVShowNameRaterShow *nameRaterShow = &gSaveBlock1.tvShows[gSpecialVar_0x8004].nameRaterShow; u8 state; - gScriptResult = 0; + gSpecialVar_Result = 0; state = gUnknown_020387E8; switch (state) { @@ -3213,7 +3213,7 @@ void DoTVShowPokemonTodaySuccessfulCapture(void) struct TVShowPokemonToday *pokemonToday = &gSaveBlock1.tvShows[gSpecialVar_0x8004].pokemonToday; u8 state; - gScriptResult = 0; + gSpecialVar_Result = 0; state = gUnknown_020387E8; switch (state) { @@ -3282,7 +3282,7 @@ void DoTVShowPokemonTodayFailedCapture(void) struct TVShowPokemonTodayFailed *pokemonTodayFailed = &gSaveBlock1.tvShows[gSpecialVar_0x8004].pokemonTodayFailed; u8 state; - gScriptResult = 0; + gSpecialVar_Result = 0; state = gUnknown_020387E8; switch (state) { @@ -3327,7 +3327,7 @@ void DoTVShowPokemonFanClubLetter(void) u8 state; u16 rval; - gScriptResult = 0; + gSpecialVar_Result = 0; state = gUnknown_020387E8; switch (state) { @@ -3379,7 +3379,7 @@ void DoTVShowRecentHappenings(void) struct TVShowRecentHappenings *recentHappenings = &gSaveBlock1.tvShows[gSpecialVar_0x8004].recentHappenings; u8 state; - gScriptResult = 0; + gSpecialVar_Result = 0; state = gUnknown_020387E8; switch (state) { @@ -3413,7 +3413,7 @@ void DoTVShowPokemonFanClubOpinions(void) struct TVShowFanclubOpinions *fanclubOpinions = &gSaveBlock1.tvShows[gSpecialVar_0x8004].fanclubOpinions; u8 state; - gScriptResult = 0; + gSpecialVar_Result = 0; state = gUnknown_020387E8; switch (state) { @@ -3459,7 +3459,7 @@ void DoTVShowInSearchOfTrainers(void) { u8 state; - gScriptResult = 0; + gSpecialVar_Result = 0; state = gUnknown_020387E8; switch (state) { @@ -3501,7 +3501,7 @@ void DoTVShowInSearchOfTrainers(void) EasyChat_GetWordText(gStringVar1, gSaveBlock1.gabbyAndTyData.quote); StringCopy(gStringVar2, gSpeciesNames[gSaveBlock1.gabbyAndTyData.mon1]); StringCopy(gStringVar3, gSpeciesNames[gSaveBlock1.gabbyAndTyData.mon2]); - gScriptResult = 1; + gSpecialVar_Result = 1; gUnknown_020387E8 = 0;; TakeTVShowInSearchOfTrainersOffTheAir(); break; @@ -3514,7 +3514,7 @@ void DoTVShowPokemonAngler(void) struct TVShowPokemonAngler *pokemonAngler = &gSaveBlock1.tvShows[gSpecialVar_0x8004].pokemonAngler; u8 state; - gScriptResult = 0; + gSpecialVar_Result = 0; if (pokemonAngler->var02 < pokemonAngler->var03) gUnknown_020387E8 = 0; else @@ -3543,7 +3543,7 @@ void DoTVShowTheWorldOfMasters(void) struct TVShowWorldOfMasters *worldOfMasters = &gSaveBlock1.tvShows[gSpecialVar_0x8004].worldOfMasters; u8 state; - gScriptResult = 0; + gSpecialVar_Result = 0; state = gUnknown_020387E8; switch (state) { @@ -3571,7 +3571,7 @@ void DoTVShowTheWorldOfMasters(void) void TVShowDone(void) { - gScriptResult = 1; + gSpecialVar_Result = 1; gUnknown_020387E8 = 0; gSaveBlock1.tvShows[gSpecialVar_0x8004].common.var01 = 0; } diff --git a/src/field/use_pokeblock.c b/src/field/use_pokeblock.c index 8155b4216..7253ac901 100644 --- a/src/field/use_pokeblock.c +++ b/src/field/use_pokeblock.c @@ -105,7 +105,7 @@ EWRAM_DATA u8 gPokeblockMonID = 0; EWRAM_DATA s16 gPokeblockGain = 0; extern u16 gKeyRepeatStartDelay; -extern u16 gScriptItemId; // FIXME: remove after merge of #349 Pokeblock +extern u16 gSpecialVar_ItemId; // FIXME: remove after merge of #349 Pokeblock static void launch_c3_walk_stairs_and_run_once(void (*const)(void)); static void sub_81361E4(void); @@ -574,7 +574,7 @@ static void sub_81369CC(void) case 5: if (gMain.newKeys & (A_BUTTON | B_BUTTON) && !sub_8136D00()) { - PokeblockClearIfExists((u8)gScriptItemId); + PokeblockClearIfExists((u8)gSpecialVar_ItemId); launch_c3_walk_stairs_and_run_once(sub_8136B44); } break; diff --git a/src/field/wild_encounter.c b/src/field/wild_encounter.c index cc4468728..4bf83cad8 100644 --- a/src/field/wild_encounter.c +++ b/src/field/wild_encounter.c @@ -3695,7 +3695,7 @@ const u16 gRoute119WaterTileData[] = 0x5C, 0x8B, 0x12A, }; -extern u16 gScriptResult; +extern u16 gSpecialVar_Result; extern u8 S_RepelWoreOff[]; EWRAM_DATA static u8 sWildEncountersDisabled = 0; @@ -4167,18 +4167,18 @@ void ScrSpecial_RockSmashWildEncounter(void) if (wildPokemonInfo == NULL) { - gScriptResult = 0; + gSpecialVar_Result = 0; return; } else if (DoWildEncounterTest(wildPokemonInfo->encounterRate, 1) == TRUE && GenerateWildMon(wildPokemonInfo, 2, TRUE) == TRUE) { BattleSetup_StartWildBattle(); - gScriptResult = 1; + gSpecialVar_Result = 1; return; } } - gScriptResult = 0; + gSpecialVar_Result = 0; return; } diff --git a/src/pokemon/pokeblock_feed.c b/src/pokemon/pokeblock_feed.c index 389c4bb25..8e3adda12 100644 --- a/src/pokemon/pokeblock_feed.c +++ b/src/pokemon/pokeblock_feed.c @@ -645,7 +645,7 @@ static bool8 sub_8147B20(struct Pokemon* mon) ewram1FFFF++; break; case 5: - SetPokeblockFeedSpritePal(gScriptItemId); + SetPokeblockFeedSpritePal(gSpecialVar_ItemId); LoadCompressedObjectPalette(&sPokeblockFeedSpritePal); ewram1FFFF++; break; @@ -722,7 +722,7 @@ static void Task_WaitForAtePokeblockText(u8 taskID) static void Task_PrintAtePokeblockText(u8 taskID) { struct Pokemon* mon = &gPlayerParty[gPokeblockMonID]; - struct Pokeblock* pokeblock = &gSaveBlock1.pokeblocks[gScriptItemId]; + struct Pokeblock* pokeblock = &gSaveBlock1.pokeblocks[gSpecialVar_ItemId]; gPokeblockGain = PokeblockGetGain(GetNature(mon), pokeblock); GetMonNickname(mon, gStringVar1); diff --git a/src/pokemon/pokemon_menu.c b/src/pokemon/pokemon_menu.c index f6f5e24e7..d2a5197a0 100644 --- a/src/pokemon/pokemon_menu.c +++ b/src/pokemon/pokemon_menu.c @@ -435,7 +435,7 @@ static void sub_808A1E0(u8 taskID) static void sub_808A228(u8 taskID) { - if (ItemIsMail(gScriptItemId) && gUnknown_0202E8F4 != 0) + if (ItemIsMail(gSpecialVar_ItemId) && gUnknown_0202E8F4 != 0) { BeginNormalPaletteFade(-1, 0, 0, 0x10, 0); gTasks[taskID].func = sub_808A180; @@ -451,7 +451,7 @@ static void sub_808A228(u8 taskID) static void sub_808A2AC(u8 taskID) { if (!gPaletteFade.active) - PartyMenuTryGiveMonHeldItem(taskID, gScriptItemId, sub_808A228); + PartyMenuTryGiveMonHeldItem(taskID, gSpecialVar_ItemId, sub_808A228); } static void sub_808A2DC(u8 taskID) @@ -463,7 +463,7 @@ static void sub_808A2DC(u8 taskID) static void sub_808A330(u8 taskID) { - PartyMenuTryGiveMonHeldItem(taskID, gScriptItemId, sub_808A2DC); + PartyMenuTryGiveMonHeldItem(taskID, gSpecialVar_ItemId, sub_808A2DC); } static void sub_808A34C(void) @@ -507,7 +507,7 @@ static void sub_808A3A4(void) void sub_808A3F8(void) { - if (ItemIsMail(gScriptItemId)) + if (ItemIsMail(gSpecialVar_ItemId)) { u8 taskID = CreateTask(sub_808A330, 0); gPaletteFade.bufferTransferDisabled = 1; @@ -523,7 +523,7 @@ void sub_808A3F8(void) DestroyTask(taskID); } gPaletteFade.bufferTransferDisabled = 1; - if (gScriptItemId) + if (gSpecialVar_ItemId) { SetPartyMenuSettings(PARTY_MENU_TYPE_STANDARD, 0xFF, sub_808A2AC, 0xFF); SetMainCallback2(sub_808A358); @@ -554,7 +554,7 @@ static void sub_808A4D4(void) void sub_808A520(void) { gPaletteFade.bufferTransferDisabled = 1; - if (gScriptResult == 0) + if (gSpecialVar_Result == 0) { if (gUnknown_0202E8F8) RemoveBagItem(gUnknown_0202E8F8, 1); @@ -572,7 +572,7 @@ static void sub_808A5BC(u8 taskID) { if (!gPaletteFade.active) { - DisplayGiveHeldItemMessage(gLastFieldPokeMenuOpened, gScriptItemId, 0); + DisplayGiveHeldItemMessage(gLastFieldPokeMenuOpened, gSpecialVar_ItemId, 0); gTasks[taskID].func = sub_808A1E0; } } @@ -915,7 +915,7 @@ static bool8 SetUpFieldMove_Waterfall(void) static void sub_808AE8C(void) { u8 i; - u8 arg = gScriptItemId - 33; + u8 arg = gSpecialVar_ItemId - 33; for (i = 0; i < 6; i++) { if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES)) @@ -923,7 +923,7 @@ static void sub_808AE8C(void) sub_806D668(i); if (GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG) || !CanMonLearnTMHM(&gPlayerParty[i], arg)) sub_806BC3C(i, 0x9A); - else if (pokemon_has_move(&gPlayerParty[i], ItemIdToBattleMoveId(gScriptItemId))) + else if (pokemon_has_move(&gPlayerParty[i], ItemIdToBattleMoveId(gSpecialVar_ItemId))) sub_806BC3C(i, 0xA8); else sub_806BC3C(i, 0x8C); @@ -938,7 +938,7 @@ static void sub_808AF20(void) { if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES)) { - if (GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG) || !GetEvolutionTargetSpecies(&gPlayerParty[i], 3, gScriptItemId)) + if (GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG) || !GetEvolutionTargetSpecies(&gPlayerParty[i], 3, gSpecialVar_ItemId)) { sub_806D668(i); sub_806BC3C(i, 0); @@ -955,7 +955,7 @@ static void sub_808AF80(void) { if (gUnknown_02038561 == 0) { - switch (CheckIfItemIsTMHMOrEvolutionStone(gScriptItemId)) + switch (CheckIfItemIsTMHMOrEvolutionStone(gSpecialVar_ItemId)) { case 1: sub_808AE8C(); @@ -983,7 +983,7 @@ void sub_808B020(void) switch (gUnknown_02038561) { case 0: - if (CheckIfItemIsTMHMOrEvolutionStone(gScriptItemId) == 1) + if (CheckIfItemIsTMHMOrEvolutionStone(gSpecialVar_ItemId) == 1) SetPartyMenuSettings(PARTY_MENU_TYPE_STANDARD, 0, sub_808B0C0, 20); else SetPartyMenuSettings(PARTY_MENU_TYPE_STANDARD, 0, sub_808B0C0, 3); @@ -1013,11 +1013,11 @@ void sub_808B0C0(u8 taskID) { sub_806D5A4(); if (gUnknown_02038561 == 0) - gUnknown_03004AE4(taskID, gScriptItemId, sub_808B224); + gUnknown_03004AE4(taskID, gSpecialVar_ItemId, sub_808B224); if (gUnknown_02038561 == 1) { PlaySE(SE_SELECT); - PartyMenuTryGiveMonHeldItem(taskID, gScriptItemId, sub_808B2EC); + PartyMenuTryGiveMonHeldItem(taskID, gSpecialVar_ItemId, sub_808B2EC); } if (gUnknown_02038561 == 3) { @@ -1042,7 +1042,7 @@ void sub_808B0C0(u8 taskID) static void sub_808B1EC(u8 taskID) { if (!gPaletteFade.active) - gUnknown_03004AE4(taskID, gScriptItemId, sub_808B224); + gUnknown_03004AE4(taskID, gSpecialVar_ItemId, sub_808B224); } static void sub_808B224(u8 taskID) @@ -1120,7 +1120,7 @@ static void sub_808B3EC(void) IntrCallback callback; gPaletteFade.bufferTransferDisabled = 1; - if (gScriptResult == 0) + if (gSpecialVar_Result == 0) { if (gUnknown_0202E8F8) RemoveBagItem(gUnknown_0202E8F8, 1); @@ -1143,7 +1143,7 @@ static void sub_808B4A4(u8 taskID) { if (!gPaletteFade.active) { - DisplayGiveHeldItemMessage(gLastFieldPokeMenuOpened, gScriptItemId, 1); + DisplayGiveHeldItemMessage(gLastFieldPokeMenuOpened, gSpecialVar_ItemId, 1); gTasks[taskID].func = sub_808B4EC; } } diff --git a/src/pokemon/pokemon_size_record.c b/src/pokemon/pokemon_size_record.c index 2ab289416..f92a95bfb 100644 --- a/src/pokemon/pokemon_size_record.c +++ b/src/pokemon/pokemon_size_record.c @@ -15,7 +15,7 @@ struct UnknownStruct u16 unk4; }; -extern u16 gScriptResult; +extern u16 gSpecialVar_Result; static const struct UnknownStruct sBigMonSizeTable[] = { @@ -104,13 +104,13 @@ static void FormatMonSizeRecord(u8 *string, u32 size) static u8 CompareMonSize(u16 species, u16 *sizeRecord) { - if (gScriptResult == 0xFF) + if (gSpecialVar_Result == 0xFF) { return 0; } else { - struct Pokemon *pkmn = &gPlayerParty[gScriptResult]; + struct Pokemon *pkmn = &gPlayerParty[gSpecialVar_Result]; // UB: Too few arguments for function 'GetMonData' if (GetMonData(pkmn, MON_DATA_IS_EGG) == TRUE || GetMonData(pkmn, MON_DATA_SPECIES) != species) @@ -169,7 +169,7 @@ void CompareShroomishSize(void) { u16 *sizeRecord = GetVarPointer(VAR_SHROOMISH_SIZE_RECORD); - gScriptResult = CompareMonSize(SPECIES_SHROOMISH, sizeRecord); + gSpecialVar_Result = CompareMonSize(SPECIES_SHROOMISH, sizeRecord); } void InitBarboachSizeRecord(void) @@ -188,7 +188,7 @@ void CompareBarboachSize(void) { u16 *sizeRecord = GetVarPointer(VAR_BARBOACH_SIZE_RECORD); - gScriptResult = CompareMonSize(SPECIES_BARBOACH, sizeRecord); + gSpecialVar_Result = CompareMonSize(SPECIES_BARBOACH, sizeRecord); } void GiveGiftRibbonToParty(u8 index, u8 ribbonId) diff --git a/src/rom6.c b/src/rom6.c index c25f0f9f5..e71484b0a 100644 --- a/src/rom6.c +++ b/src/rom6.c @@ -13,7 +13,7 @@ #include "sprite.h" #include "task.h" -extern u16 gScriptLastTalked; +extern u16 gSpecialVar_LastTalked; extern void (*gFieldCallback)(void); extern u8 gLastFieldPokeMenuOpened; extern void (*gUnknown_03005CE4)(void); @@ -43,7 +43,7 @@ bool8 npc_before_player_of_type(u8 a) } else { - gScriptLastTalked = gMapObjects[mapObjId].localId; + gSpecialVar_LastTalked = gMapObjects[mapObjId].localId; return TRUE; } } diff --git a/src/scene/berry_blender.c b/src/scene/berry_blender.c index 47ed314a8..d147d11ce 100644 --- a/src/scene/berry_blender.c +++ b/src/scene/berry_blender.c @@ -208,7 +208,7 @@ extern void de_sub_8073110(); extern struct MusicPlayerInfo gMPlay_SE2; extern struct MusicPlayerInfo gMPlay_BGM; -extern u16 gScriptItemId; +extern u16 gSpecialVar_ItemId; extern u8 gUnknown_020297ED; extern u8 byte_3002A68; @@ -1192,7 +1192,7 @@ static void sub_804E9F8(void) case 8: gBerryBlenderData->field_0++; gBerryBlenderData->field_13C = 0; - Blender_CopyBerryData(&gBerryBlenderData->blendedBerries[0], gScriptItemId); + Blender_CopyBerryData(&gBerryBlenderData->blendedBerries[0], gSpecialVar_ItemId); memcpy(gBlockSendBuffer, &gBerryBlenderData->blendedBerries[0], sizeof(struct BlenderBerry)); sub_80084A4(); gBerryBlenderData->framesToWait = 0; @@ -1438,9 +1438,9 @@ static void sub_804F378(void) { case 0: sub_804F0F4(); - Blender_SetBankBerryData(0, gScriptItemId); - Blender_CopyBerryData(&gBerryBlenderData->blendedBerries[0], gScriptItemId); - sub_804F1BC(gScriptItemId, gBerryBlenderData->playersNo, &gBerryBlenderData->blendedBerries[0]); + Blender_SetBankBerryData(0, gSpecialVar_ItemId); + Blender_CopyBerryData(&gBerryBlenderData->blendedBerries[0], gSpecialVar_ItemId); + sub_804F1BC(gSpecialVar_ItemId, gBerryBlenderData->playersNo, &gBerryBlenderData->blendedBerries[0]); for (i = 0; i < BLENDER_MAX_PLAYERS; i++) { gBerryBlenderData->field_70[i] = 0; @@ -3431,7 +3431,7 @@ static bool8 Blender_PrintBlendingResults(void) Blender_PrintMadePokeblockString(&pokeblock, gBerryBlenderData->stringVar); CreateTask(sub_8052BD0, 6); MenuPrintMessage(gBerryBlenderData->stringVar, 1, 15); - RemoveBagItem(gScriptItemId, 1); + RemoveBagItem(gSpecialVar_ItemId, 1); sub_810CA34(&pokeblock); gBerryBlenderData->field_0++; break; diff --git a/src/script_pokemon_util_80C4BF0.c b/src/script_pokemon_util_80C4BF0.c index 9d1aaa125..3ac2dc7a7 100644 --- a/src/script_pokemon_util_80C4BF0.c +++ b/src/script_pokemon_util_80C4BF0.c @@ -38,9 +38,9 @@ extern u16 gSpecialVar_0x8004; extern u16 gSpecialVar_0x8005; extern u16 gSpecialVar_0x8006; -extern u16 gScriptContestCategory; -extern u16 gScriptContestRank; -extern u16 gScriptResult; +extern u16 gSpecialVar_ContestCategory; +extern u16 gSpecialVar_ContestRank; +extern u16 gSpecialVar_Result; extern u32 gUnknown_03005D28; @@ -91,7 +91,7 @@ void sub_80C4C78(void) u16 var; u16 returnVar; - switch(gScriptContestCategory) + switch(gSpecialVar_ContestCategory) { case 0: var = 8; @@ -127,7 +127,7 @@ void sub_80C4CEC(void) void sub_80C4CF8(void) { if(!gUnknown_02038690[gContestPlayerMonIndex] - && gScriptContestRank == 3 + && gSpecialVar_ContestRank == 3 && (s16)gUnknown_02038678[gContestPlayerMonIndex] >= 800) { gSpecialVar_0x8004 = 1; @@ -388,7 +388,7 @@ bool8 GiveMonArtistRibbon(void) if(ribbon == FALSE && gUnknown_02038690[gContestPlayerMonIndex] == 0 - && gScriptContestRank == 3 + && gSpecialVar_ContestRank == 3 && (s16)gUnknown_02038678[gContestPlayerMonIndex] >= 800) { ribbon = TRUE; @@ -488,9 +488,9 @@ void sub_80C5190(u8 taskId) void ScriptGetMultiplayerId(void) { if(gIsLinkContest & 1) - gScriptResult = GetMultiplayerId(); + gSpecialVar_Result = GetMultiplayerId(); else - gScriptResult = 4; + gSpecialVar_Result = 4; } void ScriptRandom(void) @@ -502,11 +502,11 @@ void ScriptRandom(void) { gUnknown_03005D28 = 1103515245 * gUnknown_03005D28 + 24691; random = gUnknown_03005D28 >> 16; - scriptPtr = &gScriptResult; + scriptPtr = &gSpecialVar_Result; } else { - scriptPtr = &gScriptResult; + scriptPtr = &gSpecialVar_Result; random = Random(); } *scriptPtr = random % *scriptPtr; @@ -587,13 +587,13 @@ void CheckForAlivePartyMons(void) switch(var) { case 1: - gScriptResult = var; + gSpecialVar_Result = var; break; case 0: - gScriptResult = var; + gSpecialVar_Result = var; break; case 2: - gScriptResult = var; + gSpecialVar_Result = var; break; } } @@ -657,10 +657,10 @@ void sub_80C5580(void) switch(var) { case 0: - gScriptResult = 0; + gSpecialVar_Result = 0; break; default: - gScriptResult = 1; + gSpecialVar_Result = 1; break; } @@ -681,11 +681,11 @@ void SetBattleTowerPlayerParty(void) { case 0: // player quit battle tower? LoadPlayerParty(); - gScriptResult = 0; + gSpecialVar_Result = 0; break; default: // load battle tower. ReducePlayerPartyToThree(); - gScriptResult = 1; + gSpecialVar_Result = 1; break; } diff --git a/src/script_pokemon_util_80F99CC.c b/src/script_pokemon_util_80F99CC.c index aed11bb7e..33e7620f7 100644 --- a/src/script_pokemon_util_80F99CC.c +++ b/src/script_pokemon_util_80F99CC.c @@ -23,7 +23,7 @@ extern u8 gPlayerPartyCount; extern u16 gSpecialVar_0x8004; extern u16 gSpecialVar_0x8005; extern u8 gUnknown_02038694; -extern u16 gScriptResult; +extern u16 gSpecialVar_Result; extern void (*gFieldCallback)(void); @@ -281,11 +281,11 @@ void ScrSpecial_CountPokemonMoves(void) // count pokemon moves { u8 i; - gScriptResult = 0; + gSpecialVar_Result = 0; for (i = 0; i < 4; i++) // checks MOVE1-MOVE4 if (GetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_MOVE1 + i)) - gScriptResult++; + gSpecialVar_Result++; } void ScrSpecial_GetPokemonNicknameAndMoveName(void) @@ -437,8 +437,8 @@ void sub_80FA0DC(void) void sub_80FA148(void) { struct Pokemon *party = &gPlayerParty[gSpecialVar_0x8004]; - gScriptResult = 0; + gSpecialVar_Result = 0; if (GetMonData(party, MON_DATA_IS_EGG)) - gScriptResult = 1; + gSpecialVar_Result = 1; } -- cgit v1.2.3