From eafaebbd149e96ce2d3d60a02083f46ff1b13336 Mon Sep 17 00:00:00 2001 From: Skeli Date: Mon, 5 Oct 2020 20:42:19 -0400 Subject: [PATCH] Shadow Warrior + Manaphy Egg -Also update Skuntank & Drapion Hidden Abilities --- BPRE.ld | 4 + assembly/manaphy_egg_hooks.s | 200 ++++++++++++++++++++ graphics/egg_hatch/ManaphyEggHatch.png | Bin 0 -> 590 bytes graphics/egg_hatch/ManaphyEggShards.png | Bin 0 -> 205 bytes graphics/egg_hatch/gritflags.txt | 1 + graphics/frontspr/gSpriteManaphyEgg.png | Bin 0 -> 411 bytes graphics/frontspr/gSpriteShadowWarrior.png | Bin 0 -> 608 bytes graphics/pokeicon/gIconSpriteManaphyEgg.png | Bin 0 -> 270 bytes hooks | 17 ++ include/species.h | 1 + include/sprite_data.h | 9 +- scripts/build.py | 3 + src/Back_Pic_Coords_Table.c | 6 +- src/Back_Pic_Table.c | 4 +- src/Base_Stats.c | 17 +- src/Enemy_Elevation_Table.c | 2 +- src/Footprint_Table.c | 2 +- src/Front_Pic_Coords_Table.c | 6 +- src/Front_Pic_Table.c | 4 +- src/Icon_Palette_Table.c | 2 +- src/Icon_Table.c | 2 +- src/Item_Animation_Table.c | 2 +- src/Palette_Table.c | 4 +- src/Shiny_Palette_Table.c | 4 +- src/Species_To_Pokdex_Table.c | 3 +- src/updated_code.c | 55 +++++- 26 files changed, 316 insertions(+), 32 deletions(-) create mode 100644 assembly/manaphy_egg_hooks.s create mode 100644 graphics/egg_hatch/ManaphyEggHatch.png create mode 100644 graphics/egg_hatch/ManaphyEggShards.png create mode 100644 graphics/egg_hatch/gritflags.txt create mode 100644 graphics/frontspr/gSpriteManaphyEgg.png create mode 100644 graphics/frontspr/gSpriteShadowWarrior.png create mode 100644 graphics/pokeicon/gIconSpriteManaphyEgg.png diff --git a/BPRE.ld b/BPRE.ld index 4f76b41..32d7797 100644 --- a/BPRE.ld +++ b/BPRE.ld @@ -7,9 +7,13 @@ __umodsi3 = 0x081E4684|1; memcpy_ = 0x081E5E78|1; memset_ = 0x081E5ED8|1; +gPlayerParty = 0x2024284; gPokedexScreenDataPtr = 0x203ACF0; gMain = 0x30030F0; +sEggHatchData = 0x3000E74; +LoadSpriteSheet = 0x80086DC | 1; +LoadSpritePalette = 0x8008928 | 1; GetGenderFromSpeciesAndPersonality = 0x803F78C | 1; GetMonData = 0x803FBE8 | 1; SpeciesToNationalPokedexNum = 0x8043298 | 1; diff --git a/assembly/manaphy_egg_hooks.s b/assembly/manaphy_egg_hooks.s new file mode 100644 index 0000000..9855501 --- /dev/null +++ b/assembly/manaphy_egg_hooks.s @@ -0,0 +1,200 @@ +.thumb +.align 2 + +.pool +@0x8122214 with r0 +PartyMenuManaphyEggHook: + lsl r4, #0x10 + lsr r4, #0x10 + mov r0, r5 @Mon + mov r1, r4 @Species + bl TryReplaceSpeciesWithManaphyEgg + mov r4, r0 + mov r0, r5 + mov r1, #0x0 + ldr r2, =0x812221C | 1 +bxr2: + bx r2 + +.pool +@0x8139978 with r1 +SummaryScreenManaphyEggHook: + lsl r0, r0, #0x10 + lsr r7, r0, #0x10 + ldr r0, [r5] + add r0, r4 @Mon + mov r1, r7 @Species + bl TryReplaceSpeciesWithManaphyEgg + mov r7, r0 + ldr r0, [r5] + add r0, r4 + ldr r1, =0x8139980 | 1 +bxr1: + bx r1 + +.pool +@0x80471A8 with r0 +EggHatchManaphyEggHook: + ldr r0, =sEggHatchData + ldr r0, [r0] + ldrb r0, [r0, #0x4] @partyId + bl IsPartyMonManaphy + cmp r0, #0x0 + bne EggHatchLoadManaphyEggSprite + ldr r0, =0x826011C @EggHatch_Sheet + ldr r1, =LoadSpriteSheet + bl bxr1 + ldr r0, =0x8260124 @EggShards_Sheet + ldr r1, =0x080471B0 | 1 + bx r1 + +EggHatchLoadManaphyEggSprite: + ldr r0, =sManaphyEgg_Sheet + ldr r1, =LoadSpriteSheet + bl bxr1 + ldr r0, =sManaphyEggShards_Sheet + ldr r1, =LoadSpriteSheet + bl bxr1 + ldr r0, =sManaphyEgg_SpritePalette + ldr r1, =LoadSpritePalette + bl bxr1 + ldr r0, =0x804724A | 1 +bxr0: + bx r0 + +.align 2 +sManaphyEgg_Sheet: +.word ManaphyEggHatchTiles +.hword 2048, 12345 + +sManaphyEggShards_Sheet: +.word ManaphyEggShardsTiles +.hword 128, 23456 + +sManaphyEgg_SpritePalette: +.word ManaphyEggHatchPal +.hword 54321, 0 + +.pool +@0x809008E with r1 +PokemonStorageSystemManaphyEggHook1: + mov r1, r0 @Species + mov r0, r4 @Mon + bl TryReplaceSpeciesWithManaphyEgg + mov r4, r0 + ldr r0, =0x8090058 | 1 + bl bxr0 + ldr r1, =0x8090098 | 1 + bx r1 + +.pool +@0x80900F4 with r0 +PokemonStorageSystemManaphyEggHook2: + mov r0, r9 @Box Id + mov r1, r6 @Box Position + bl GetBoxMonSpeciesAt_HandleManaphyEgg + ldr r1, =0x80900FE | 1 + bx r1 + +.pool +@0x80901F8 with r0 +PokemonStorageSystemManaphyEggHook3: + mov r0, r7 @Box Position + bl GetCurrentBoxMonSpeciesAt_HandleManaphyEgg + ldr r1, =0x8090200 | 1 + bx r1 + +.pool +@0x80907B2 with r0 +PokemonStorageSystemManaphyEggHook4: + mov r0, r6 @Box Id + mov r1, r4 @Box Position + bl GetBoxMonSpeciesAt_HandleManaphyEgg + ldr r1, =0x80907BC | 1 + bx r1 + +.pool +@0x80908A4 with r1 +PokemonStorageSystemManaphyEggHook5: + mov r1, r0 @Species + mov r0, r4 @Mon + bl TryReplaceSpeciesWithManaphyEgg + mov r5, r0 + mov r0, r4 + mov r1, #0x0 + ldr r2, =0x80908AC | 1 + bx r2 + +.pool +@0x80908E0 with r2 +PokemonStorageSystemManaphyEggHook6: + ldr r2, =GetMonData + bl bxr2 + mov r1, r0 @Species + mov r0, r4 @Mon + bl TryReplaceSpeciesWithManaphyEgg + mov r5, r0 + ldr r0, =0x80908E8 | 1 + bx r0 + +.pool +@0x80956BC with r0 +PokemonStorageSystemManaphyEggHook7: + mov r0, r4 @Box Position + bl GetCurrentBoxMonSpeciesAt_HandleManaphyEgg + ldr r1, =0x80956C4 | 1 + bx r1 + +.pool +@0x80440C8 with r1 +PokemonStorageSystemManaphyEggHook8: @Mon Pic Palette in Party + mov r1, r0 @Species + mov r0, r5 @Mon + bl TryReplaceSpeciesWithManaphyEgg + mov r4, r0 + mov r0, r5 + ldr r1, =0x080440D0 | 1 + bx r1 + +.pool +@0x8093C94 with r3 +PokemonStorageSystemManaphyEggHook9: @Mon Pic Palette in Box + str r2, [r0] + sub r4, #0xA + add r1, r4 + ldrh r0, [r1] + push {r0-r2} + mov r1, r0 @Species + mov r0, r7 @Mon + bl TryReplaceSpeciesWithManaphyEgg + mov r3, r0 + pop {r0-r2} + mov r0, r3 + ldr r1, =0x8093C9C | 1 + bx r1 + +.pool +@0x808F414 with r1 +PokemonStorageSystemManaphyEggHook10: @Mon Pic Gfx + push {r3} + ldr r0, [r6] + ldr r1, =.xCD8 + ldr r1, [r1] + add r0, r1 + ldr r0, [r0] + mov r1, r2 + bl ChangeSpeciesIfManaphyEggPalette + mov r2, r0 @Species + pop {r3} + lsl r0, r2, #0x3 + ldr r1, =gMonFrontPicTable + add r0, r1 + ldr r5, =.x22BC + ldr r5, [r5] + add r1, r4, r5 + ldr r4, =0x808F41C | 1 + bx r4 + +.align 2 +.x22BC: .word 0x22BC +.xCD8: .word 0xCD8 diff --git a/graphics/egg_hatch/ManaphyEggHatch.png b/graphics/egg_hatch/ManaphyEggHatch.png new file mode 100644 index 0000000000000000000000000000000000000000..cb1e46a698b784d28ef33632461f73d7ff0a5ef9 GIT binary patch literal 590 zcmV-U0YE90%|lIu~MelRz&O1U1lH)&^-hNQ-X4SMULZii3kfvHAje00-&l zBxF*2f_84mH5DiC8NAEC-u>5R0D{6u4KDuVW8Ejv@^U*ZJM;%vmk%x2ho*$}$< zjEQX$y!&JnL1^wg*kK;j8W@Ksw~xaR<8*4hVUq39cpO|3do9j`lQFNM6pTa=NWqN= z?w7&F;6@3y{J}s95Z&;PMN3fJj`}<}7k|lvx$pZt2(C!O%5KX8|Ll6mHxw@evBZ2P zLa#hXmzr-(3`w`FS$R+|wjLMnK(lu#PVknNcsadnK#1`~XVPOM#tVI0-R=VVm;)aM z^x;%|c)*9_03V0b_kSP%KC*@%_=wt3r1)@2Lf&N`Vua+QgB``kI`lCIK3K&^0)1E& zAB)~^`e5-g5YO#GA5`(-95Ka*$9>Sacn7Lk&A5q0el8$f`A05TV zOK1Tf{e!;hqdB_kt>%NJKx7}M(8oo^$D8osNj{kHkw72rsy;l`hvzcY2TOnt7y2-u c593Q8A8fYUI1a2*wEzGB07*qoM6N<$f{t1hS^xk5 literal 0 HcmV?d00001 diff --git a/graphics/egg_hatch/ManaphyEggShards.png b/graphics/egg_hatch/ManaphyEggShards.png new file mode 100644 index 0000000000000000000000000000000000000000..b1baaeac26a2ff286e17405d18898c040c4179ce GIT binary patch literal 205 zcmeAS@N?(olHy`uVBq!ia0vp^96+qV!VDzu-cxxDqznRlLR{xuT@rQlzvY_$65anL zlD6!<_rH6}+5cPa{hu=BTUORLOUrNnIj;WasD8GWgM)*i`kR3MrYAtX5uPrNAr*5{ z`waOGC~&ymfAA)?AkTBpe_5Yh*B9;%o3K>#u)l)-duGqZs3|H%1)V*j>5I=Z{>(cf zF+J;`z*6Zs^F{3^-1zfOYx=Hx-DOY3OG5kkOT;C=Gue4-{`~3md^OMx22WQ%mvv4F FO#q-$R#*T4 literal 0 HcmV?d00001 diff --git a/graphics/egg_hatch/gritflags.txt b/graphics/egg_hatch/gritflags.txt new file mode 100644 index 0000000..3692ad7 --- /dev/null +++ b/graphics/egg_hatch/gritflags.txt @@ -0,0 +1 @@ +-g -gB4 -fts -p -pe16 -gu8 -fh! diff --git a/graphics/frontspr/gSpriteManaphyEgg.png b/graphics/frontspr/gSpriteManaphyEgg.png new file mode 100644 index 0000000000000000000000000000000000000000..bcc71816c641de9e352ed5d81df04281d39f555b GIT binary patch literal 411 zcmV;M0c8G(P)O2mk;8&dAbV0003d zNkl1p=6hyahEm#Y8!Jyp)0!|FtU%CkzM(4fET9*W+bF*ZVsoQCY32rRWFa{5v<&?!N= zmMoT1Wi$Yy&67Q1mcBf*suz}=n`&B7(xi=!cD$=tk$O8{u> z?a4I)Fv^T+R<9prV@$ARl3BXm)OGblZX9aKz^aDI2(V$GiU3;%-eh1>Y@@)HFNz4D z+KGQ)i%R-itp~8?uMmJQ?>&I(nX-8hNC5c9mlBH!R_Fm9ozPLKZvfpWg++0RZnZjG z0U5um783BG{kxD7V3G67N<{;u&LGmWdrw-IEw92`)flNlH&aGuOF zP@tY_7bqGhMI`H8LfJt(M0BQ9D?j`qf05K`_1}+kZaH2{!5hpoUUkGg;cELy{R2yB!( zsG5MV5d>6J=f*<80#Y5ijag8Ts(-gJ1rKc7_IqsjD}GkJ@<7G_ovo3$!Fff0Sj0sQ&I zY%%J{sV6VazXjv}fDfO8ap7CmxBbVv9~VIYXNCO!&YiIUC8>Akr@e- zczC$Du=x1+aB#?=sPM3WSm?lrz^Ewj@F?(LP>^`Yz@W&uD41YiSU^BP_Fwts0001) zNkligoc8cwxApnjO$Ppefe@f-sx>T UAY@CFc>n+a07*qoM6N<$f;kv>i~s-t literal 0 HcmV?d00001 diff --git a/hooks b/hooks index 5f1e447..412a453 100644 --- a/hooks +++ b/hooks @@ -10,6 +10,7 @@ GetFrontSpritePalFromSpeciesAndPersonality 80440F4 3 GetMonSpritePalStructFromOtIdPersonality 8044180 3 GetEggSpecies 8045970 1 GetEggMoves 8045C28 2 +EggHatchManaphyEggHook 80471A8 0 CreateMonSprite_PicBoxHook 808398C 1 GetRegionalPokedexCount 8088EDC 1 HasAllRegionalMons 8088F58 0 @@ -22,3 +23,19 @@ DisplayRegionalDexNumHook 8104A66 1 CountSpeciesInDex 8104BBC 2 AlternateDexEntriesHook 8105CBC 0 SummaryScreenIconPalHook 8139DDC 1 + +##Manaphy Egg Hooks +PokemonStorageSystemManaphyEggHook1 809008E 1 +PokemonStorageSystemManaphyEggHook2 80900F4 0 +PokemonStorageSystemManaphyEggHook3 80901F8 0 +PokemonStorageSystemManaphyEggHook4 80907B2 0 +PokemonStorageSystemManaphyEggHook5 80908A4 1 +PokemonStorageSystemManaphyEggHook6 80908E0 2 +PokemonStorageSystemManaphyEggHook7 80956BC 0 +PokemonStorageSystemManaphyEggHook8 80440C8 1 +PokemonStorageSystemManaphyEggHook9 8093C94 3 +PokemonStorageSystemManaphyEggHook10 808F414 1 +PartyMenuManaphyEggHook 8122214 0 +SummaryScreenManaphyEggHook 8139978 1 + + diff --git a/include/species.h b/include/species.h index 1c3d793..c05bf21 100644 --- a/include/species.h +++ b/include/species.h @@ -255,6 +255,7 @@ #define SPECIES_LUGIA 0xF9 #define SPECIES_HO_OH 0xFA #define SPECIES_CELEBI 0xFB +#define SPECIES_MANAPHY_EGG 0xFC #define SPECIES_TREECKO 0x115 #define SPECIES_GROVYLE 0x116 diff --git a/include/sprite_data.h b/include/sprite_data.h index ca92bfd..b664491 100644 --- a/include/sprite_data.h +++ b/include/sprite_data.h @@ -519,6 +519,7 @@ extern const u8 gFrontSprite540GiratinaTiles[]; extern const u8 gFrontSprite541CresseliaTiles[]; extern const u8 gFrontSprite542PhioneTiles[]; extern const u8 gFrontSprite543ManaphyTiles[]; +extern const u8 gSpriteManaphyEggTiles[]; extern const u8 gFrontSprite544DarkraiTiles[]; extern const u8 gFrontSprite545ShayminTiles[]; extern const u8 gFrontSprite546ArceusTiles[]; @@ -681,7 +682,7 @@ extern const u8 gFrontSprite702GenesectTiles[]; extern const u8 gFrontSprite703UnfezantFTiles[]; extern const u8 gFrontSprite704FrillishFTiles[]; extern const u8 gFrontSprite705JellicentFTiles[]; -extern const u8 gFrontSprite706ShadowWarriorTiles[]; +extern const u8 gSpriteShadowWarriorTiles[]; extern const u8 gFrontSprite707BurmySandyTiles[]; extern const u8 gFrontSprite708BurmyTrashTiles[]; extern const u8 gFrontSprite709WormadamSandyTiles[]; @@ -1921,7 +1922,6 @@ extern const u8 gBackShinySprite702GenesectTiles[]; extern const u8 gBackShinySprite703UnfezantFTiles[]; extern const u8 gBackShinySprite704FrillishFTiles[]; extern const u8 gBackShinySprite705JellicentFTiles[]; -extern const u8 gBackShinySprite706ShadowWarriorTiles[]; extern const u8 gBackShinySprite707BurmySandyTiles[]; extern const u8 gBackShinySprite708BurmyTrashTiles[]; extern const u8 gBackShinySprite709WormadamSandyTiles[]; @@ -3000,6 +3000,7 @@ extern const u8 gFrontSprite540GiratinaPal[]; extern const u8 gFrontSprite541CresseliaPal[]; extern const u8 gFrontSprite542PhionePal[]; extern const u8 gFrontSprite543ManaphyPal[]; +extern const u8 gSpriteManaphyEggPal[]; extern const u8 gFrontSprite544DarkraiPal[]; extern const u8 gFrontSprite545ShayminPal[]; extern const u8 gFrontSprite546ArceusPal[]; @@ -3162,7 +3163,7 @@ extern const u8 gFrontSprite702GenesectPal[]; extern const u8 gFrontSprite703UnfezantFPal[]; extern const u8 gFrontSprite704FrillishFPal[]; extern const u8 gFrontSprite705JellicentFPal[]; -extern const u8 gFrontSprite706ShadowWarriorPal[]; +extern const u8 gSpriteShadowWarriorPal[]; extern const u8 gFrontSprite707BurmySandyPal[]; extern const u8 gFrontSprite708BurmyTrashPal[]; extern const u8 gFrontSprite709WormadamSandyPal[]; @@ -4401,7 +4402,6 @@ extern const u8 gBackShinySprite702GenesectPal[]; extern const u8 gBackShinySprite703UnfezantFPal[]; extern const u8 gBackShinySprite704FrillishFPal[]; extern const u8 gBackShinySprite705JellicentFPal[]; -extern const u8 gBackShinySprite706ShadowWarriorPal[]; extern const u8 gBackShinySprite707BurmySandyPal[]; extern const u8 gBackShinySprite708BurmyTrashPal[]; extern const u8 gBackShinySprite709WormadamSandyPal[]; @@ -5478,6 +5478,7 @@ extern const u8 gIconSprite540GiratinaTiles[]; extern const u8 gIconSprite541CresseliaTiles[]; extern const u8 gIconSprite542PhioneTiles[]; extern const u8 gIconSprite543ManaphyTiles[]; +extern const u8 gIconSpriteManaphyEggTiles[]; extern const u8 gIconSprite544DarkraiTiles[]; extern const u8 gIconSprite545ShayminTiles[]; extern const u8 gIconSprite546ArceusTiles[]; diff --git a/scripts/build.py b/scripts/build.py index 4347ba0..9c75c4f 100644 --- a/scripts/build.py +++ b/scripts/build.py @@ -284,16 +284,19 @@ def ProcessSpriteGraphics(): backFlags = GetFlagsFromFlagFile(GRAPHICS + "/backspriteflags.grit") iconFlags = GetFlagsFromFlagFile(GRAPHICS + "/iconspriteflags.grit") castformFlags = GetFlagsFromFlagFile(GRAPHICS + "/castform/gritflags.txt") + egghatchFlags = GetFlagsFromFlagFile(GRAPHICS + "/egg_hatch/gritflags.txt") backsprites = [file for file in glob(GRAPHICS + "/backspr" + "**/*.png", recursive=True)] frontsprites = [file for file in glob(GRAPHICS + "/frontspr" + "**/*.png", recursive=True)] iconsprites = [file for file in glob(GRAPHICS + "/pokeicon" + "**/*.png", recursive=True)] castformsprites = [file for file in glob(GRAPHICS + "/castform" + "**/*.png", recursive=True)] + egghatchsprites = [file for file in glob(GRAPHICS + "/egg_hatch" + "**/*.png", recursive=True)] ProcessSpriteSet(frontsprites, frontFlags, 'frontsprites.s', "Front Sprites") ProcessSpriteSet(backsprites, backFlags, 'backsprites.s', "Back Sprites") ProcessSpriteSet(iconsprites, iconFlags, 'iconsprites.s', "Icon Sprites") ProcessSpriteSet(castformsprites, castformFlags, 'castformsprites.s', "Castform Sprites") + ProcessSpriteSet(egghatchsprites, egghatchFlags, 'egghatchsprites.s', "Egg Hatch Sprites") def ProcessAudio(audioFile: str) -> str: diff --git a/src/Back_Pic_Coords_Table.c b/src/Back_Pic_Coords_Table.c index 1f4279f..5ee82b2 100644 --- a/src/Back_Pic_Coords_Table.c +++ b/src/Back_Pic_Coords_Table.c @@ -1263,10 +1263,10 @@ const struct MonCoords gMonBackPicCoords[NUM_SPECIES] = .size = 0x66, .y_offset = 0x7, }, - [252] = + [SPECIES_MANAPHY_EGG] = { .size = 0x88, - .y_offset = 0x1, + .y_offset = 0x10, }, [253] = { @@ -3536,7 +3536,7 @@ const struct MonCoords gMonBackPicCoords[NUM_SPECIES] = [SPECIES_SHADOW_WARRIOR] = { .size = 0x0, - .y_offset = 0x0, + .y_offset = 0x3, }, [SPECIES_BURMY_SANDY] = { diff --git a/src/Back_Pic_Table.c b/src/Back_Pic_Table.c index 4690d6d..11a51d9 100644 --- a/src/Back_Pic_Table.c +++ b/src/Back_Pic_Table.c @@ -256,7 +256,7 @@ const struct CompressedSpriteSheet gMonBackPicTable[NUM_SPECIES] = [SPECIES_LUGIA] = {gBackShinySprite249LugiaTiles, (64 * 64) / 2, SPECIES_LUGIA}, [SPECIES_HO_OH] = {gBackShinySprite250HoOhTiles, (64 * 64) / 2, SPECIES_HO_OH}, [SPECIES_CELEBI] = {gBackShinySprite251CelebiTiles, (64 * 64) / 2, SPECIES_CELEBI}, - [252] = {gBackShinySprite252Tiles, (64 * 64) / 2, 0xfc}, + [SPECIES_MANAPHY_EGG] = {gSpriteManaphyEggTiles, (64 * 64) / 2, SPECIES_MANAPHY_EGG}, [253] = {gBackShinySprite252Tiles, (64 * 64) / 2, 0xfd}, [254] = {gBackShinySprite252Tiles, (64 * 64) / 2, 0xfe}, [255] = {gBackShinySprite252Tiles, (64 * 64) / 2, 0xff}, @@ -712,7 +712,7 @@ const struct CompressedSpriteSheet gMonBackPicTable[NUM_SPECIES] = [SPECIES_UNFEZANT_F] = {gBackShinySprite703UnfezantFTiles, (64 * 64) / 2, SPECIES_UNFEZANT_F}, [SPECIES_FRILLISH_F] = {gBackShinySprite704FrillishFTiles, (64 * 64) / 2, SPECIES_FRILLISH_F}, [SPECIES_JELLICENT_F] = {gBackShinySprite705JellicentFTiles, (64 * 64) / 2, SPECIES_JELLICENT_F}, - [SPECIES_SHADOW_WARRIOR] = {gBackShinySprite000NoneTiles/*gBackShinySprite706ShadowWarriorTiles*/, (64 * 64) / 2, SPECIES_SHADOW_WARRIOR}, + [SPECIES_SHADOW_WARRIOR] = {gSpriteShadowWarriorTiles, (64 * 64) / 2, SPECIES_SHADOW_WARRIOR}, [SPECIES_BURMY_SANDY] = {gBackShinySprite707BurmySandyTiles, (64 * 64) / 2, SPECIES_BURMY_SANDY}, [SPECIES_BURMY_TRASH] = {gBackShinySprite708BurmyTrashTiles, (64 * 64) / 2, SPECIES_BURMY_TRASH}, [SPECIES_WORMADAM_SANDY] = {gBackShinySprite709WormadamSandyTiles, (64 * 64) / 2, SPECIES_WORMADAM_SANDY}, diff --git a/src/Base_Stats.c b/src/Base_Stats.c index 84562c1..6ac2e1e 100644 --- a/src/Base_Stats.c +++ b/src/Base_Stats.c @@ -8294,6 +8294,11 @@ const struct BaseStats gBaseStats[] = .noFlip = TRUE, }, + [SPECIES_MANAPHY_EGG] = + { + .noFlip = TRUE, + }, + [SPECIES_TREECKO] = { .baseHP = 40, @@ -15286,7 +15291,7 @@ const struct BaseStats gBaseStats[] = .ability1 = ABILITY_STENCH, .ability2 = ABILITY_AFTERMATH, .safariZoneFleeRate = 0, - .hiddenAbility = ABILITY_KEENEYE, + .hiddenAbility = ABILITY_POISONTOUCH, .noFlip = TRUE, }, @@ -15847,7 +15852,7 @@ const struct BaseStats gBaseStats[] = .ability1 = ABILITY_BATTLEARMOR, .ability2 = ABILITY_SNIPER, .safariZoneFleeRate = 0, - .hiddenAbility = ABILITY_KEENEYE, + .hiddenAbility = ABILITY_SUPERLUCK, .noFlip = TRUE, }, @@ -22263,7 +22268,7 @@ const struct BaseStats gBaseStats[] = .baseSpeed = 108, .type1 = TYPE_WATER, .type2 = TYPE_FIGHTING, - .catchRate = 3, + .catchRate = 6, .expYield = 255, .evYield_HP = 0, .evYield_Attack = 0, @@ -22455,9 +22460,9 @@ const struct BaseStats gBaseStats[] = { .baseHP = 60, .baseAttack = 115, - .baseDefense = 65, + .baseDefense = 85, .baseSpAttack = 80, - .baseSpDefense = 65, + .baseSpDefense = 85, .baseSpeed = 115, .type1 = TYPE_GHOST, .type2 = TYPE_DARK, @@ -22479,7 +22484,7 @@ const struct BaseStats gBaseStats[] = .ability1 = ABILITY_TOUGHCLAWS, .ability2 = ABILITY_NONE, .safariZoneFleeRate = 0, - .hiddenAbility = ABILITY_NONE, + .hiddenAbility = ABILITY_WONDERGUARD, .noFlip = TRUE, }, diff --git a/src/Enemy_Elevation_Table.c b/src/Enemy_Elevation_Table.c index 0510ed4..044d7b2 100644 --- a/src/Enemy_Elevation_Table.c +++ b/src/Enemy_Elevation_Table.c @@ -254,7 +254,7 @@ const u8 gEnemyMonElevation[NUM_SPECIES] = [SPECIES_LUGIA] = 0x7, [SPECIES_HO_OH] = 0x7, [SPECIES_CELEBI] = 0xe, - [252] = 0x0, + [SPECIES_MANAPHY_EGG] = 0x0, [253] = 0x0, [254] = 0x0, [255] = 0x0, diff --git a/src/Footprint_Table.c b/src/Footprint_Table.c index eaee92a..8bc7844 100644 --- a/src/Footprint_Table.c +++ b/src/Footprint_Table.c @@ -256,7 +256,7 @@ const u32 gMonFootprintTable[NUM_SPECIES] = [SPECIES_LUGIA] = 0x8740500, [SPECIES_HO_OH] = 0x8740500, [SPECIES_CELEBI] = 0x8740500, - [252] = 0x8740500, + [SPECIES_MANAPHY_EGG] = 0x8740500, [253] = 0x8740500, [254] = 0x8740500, [255] = 0x8740500, diff --git a/src/Front_Pic_Coords_Table.c b/src/Front_Pic_Coords_Table.c index c8a89e9..4456a6e 100644 --- a/src/Front_Pic_Coords_Table.c +++ b/src/Front_Pic_Coords_Table.c @@ -1263,10 +1263,10 @@ const struct MonCoords gMonFrontPicCoords[NUM_SPECIES] = .size = 0x55, .y_offset = 0xc, }, - [252] = + [SPECIES_MANAPHY_EGG] = { .size = 0x88, - .y_offset = 0x6, + .y_offset = 0x10, }, [253] = { @@ -3536,7 +3536,7 @@ const struct MonCoords gMonFrontPicCoords[NUM_SPECIES] = [SPECIES_SHADOW_WARRIOR] = { .size = 0x0, - .y_offset = 0x0, + .y_offset = 0x3, }, [SPECIES_BURMY_SANDY] = { diff --git a/src/Front_Pic_Table.c b/src/Front_Pic_Table.c index 956c94a..7661ebd 100644 --- a/src/Front_Pic_Table.c +++ b/src/Front_Pic_Table.c @@ -256,7 +256,7 @@ const struct CompressedSpriteSheet gMonFrontPicTable[NUM_SPECIES] = [SPECIES_LUGIA] = {gFrontSprite249LugiaTiles, (64 * 64) / 2, SPECIES_LUGIA}, [SPECIES_HO_OH] = {gFrontSprite250HoOhTiles, (64 * 64) / 2, SPECIES_HO_OH}, [SPECIES_CELEBI] = {gFrontSprite251CelebiTiles, (64 * 64) / 2, SPECIES_CELEBI}, - [252] = {gFrontSprite252Tiles, (64 * 64) / 2, 0xfc}, + [SPECIES_MANAPHY_EGG] = {gSpriteManaphyEggTiles, (64 * 64) / 2, SPECIES_MANAPHY_EGG}, [253] = {gFrontSprite252Tiles, (64 * 64) / 2, 0xfd}, [254] = {gFrontSprite252Tiles, (64 * 64) / 2, 0xfe}, [255] = {gFrontSprite252Tiles, (64 * 64) / 2, 0xff}, @@ -712,7 +712,7 @@ const struct CompressedSpriteSheet gMonFrontPicTable[NUM_SPECIES] = [SPECIES_UNFEZANT_F] = {gFrontSprite703UnfezantFTiles, (64 * 64) / 2, SPECIES_UNFEZANT_F}, [SPECIES_FRILLISH_F] = {gFrontSprite704FrillishFTiles, (64 * 64) / 2, SPECIES_FRILLISH_F}, [SPECIES_JELLICENT_F] = {gFrontSprite705JellicentFTiles, (64 * 64) / 2, SPECIES_JELLICENT_F}, - [SPECIES_SHADOW_WARRIOR] = {gFrontSprite000NoneTiles/*gFrontSprite706ShadowWarriorTiles*/, (64 * 64) / 2, SPECIES_SHADOW_WARRIOR}, + [SPECIES_SHADOW_WARRIOR] = {gSpriteShadowWarriorTiles, (64 * 64) / 2, SPECIES_SHADOW_WARRIOR}, [SPECIES_BURMY_SANDY] = {gFrontSprite707BurmySandyTiles, (64 * 64) / 2, SPECIES_BURMY_SANDY}, [SPECIES_BURMY_TRASH] = {gFrontSprite708BurmyTrashTiles, (64 * 64) / 2, SPECIES_BURMY_TRASH}, [SPECIES_WORMADAM_SANDY] = {gFrontSprite709WormadamSandyTiles, (64 * 64) / 2, SPECIES_WORMADAM_SANDY}, diff --git a/src/Icon_Palette_Table.c b/src/Icon_Palette_Table.c index 99eeb6d..f3de258 100644 --- a/src/Icon_Palette_Table.c +++ b/src/Icon_Palette_Table.c @@ -254,7 +254,7 @@ const u8 gMonIconPaletteIndices[NUM_SPECIES] = [SPECIES_LUGIA] = 0x0, [SPECIES_HO_OH] = 0x1, [SPECIES_CELEBI] = 0x1, - [252] = 0x0, + [SPECIES_MANAPHY_EGG] = 0x2, [253] = 0x0, [254] = 0x0, [255] = 0x0, diff --git a/src/Icon_Table.c b/src/Icon_Table.c index cfde516..79a4009 100644 --- a/src/Icon_Table.c +++ b/src/Icon_Table.c @@ -255,7 +255,7 @@ const u8* const gMonIconTable[NUM_SPECIES] = [SPECIES_LUGIA] = gIconSprite249LugiaTiles, [SPECIES_HO_OH] = gIconSprite250HoOhTiles, [SPECIES_CELEBI] = gIconSprite251CelebiTiles, - [252] = gIconSprite000NoneTiles, + [SPECIES_MANAPHY_EGG] = gIconSpriteManaphyEggTiles, [253] = gIconSprite000NoneTiles, [254] = gIconSprite000NoneTiles, [255] = gIconSprite000NoneTiles, diff --git a/src/Item_Animation_Table.c b/src/Item_Animation_Table.c index bd33818..e89db7d 100644 --- a/src/Item_Animation_Table.c +++ b/src/Item_Animation_Table.c @@ -263,7 +263,7 @@ const struct ItemAnimation gItemAnimationTable[NUM_SPECIES] = [SPECIES_LUGIA] = {0xd, 0x25, 0x8, 0xe, 0x34}, [SPECIES_HO_OH] = {0x15, 0x21, 0x8, 0x1a, 0x2b}, [SPECIES_CELEBI] = {0x1f, 0x12, 0x8, 0x1e, 0x1c}, - [252] = {0x20, 0x17, 0x8, 0x1f, 0x21}, + [SPECIES_MANAPHY_EGG] = {0x20, 0x23, 0x8, 0x20, 0x2d}, [253] = {0x1c, 0x19, 0x8, 0x1b, 0x23}, [254] = {0x21, 0x19, 0x8, 0x20, 0x23}, [255] = {0x1b, 0x13, 0x8, 0x1a, 0x1d}, diff --git a/src/Palette_Table.c b/src/Palette_Table.c index b3d5a72..272c1ec 100644 --- a/src/Palette_Table.c +++ b/src/Palette_Table.c @@ -256,7 +256,7 @@ const struct CompressedSpritePalette gMonPaletteTable[NUM_SPECIES] = [SPECIES_LUGIA] = {gFrontSprite249LugiaPal, SPECIES_LUGIA, 0x0}, [SPECIES_HO_OH] = {gFrontSprite250HoOhPal, SPECIES_HO_OH, 0x0}, [SPECIES_CELEBI] = {gFrontSprite251CelebiPal, SPECIES_CELEBI, 0x0}, - [252] = {gFrontSprite252Pal, 0xfc, 0x0}, + [SPECIES_MANAPHY_EGG] = {gSpriteManaphyEggPal, SPECIES_MANAPHY_EGG, 0x0}, [253] = {gFrontSprite252Pal, 0xfd, 0x0}, [254] = {gFrontSprite252Pal, 0xfe, 0x0}, [255] = {gFrontSprite252Pal, 0xff, 0x0}, @@ -712,7 +712,7 @@ const struct CompressedSpritePalette gMonPaletteTable[NUM_SPECIES] = [SPECIES_UNFEZANT_F] = {gFrontSprite703UnfezantFPal, SPECIES_UNFEZANT_F, 0x0}, [SPECIES_FRILLISH_F] = {gFrontSprite704FrillishFPal, SPECIES_FRILLISH_F, 0x0}, [SPECIES_JELLICENT_F] = {gFrontSprite705JellicentFPal, SPECIES_JELLICENT_F, 0x0}, - [SPECIES_SHADOW_WARRIOR] = {gFrontSprite000NonePal/*gFrontSprite706ShadowWarriorPal*/, SPECIES_SHADOW_WARRIOR, 0x0}, + [SPECIES_SHADOW_WARRIOR] = {gSpriteShadowWarriorPal, SPECIES_SHADOW_WARRIOR, 0x0}, [SPECIES_BURMY_SANDY] = {gFrontSprite707BurmySandyPal, SPECIES_BURMY_SANDY, 0x0}, [SPECIES_BURMY_TRASH] = {gFrontSprite708BurmyTrashPal, SPECIES_BURMY_TRASH, 0x0}, [SPECIES_WORMADAM_SANDY] = {gFrontSprite709WormadamSandyPal, SPECIES_WORMADAM_SANDY, 0x0}, diff --git a/src/Shiny_Palette_Table.c b/src/Shiny_Palette_Table.c index 31a9aed..55847b8 100644 --- a/src/Shiny_Palette_Table.c +++ b/src/Shiny_Palette_Table.c @@ -256,7 +256,7 @@ const struct CompressedSpritePalette gMonShinyPaletteTable[NUM_SPECIES] = [SPECIES_LUGIA] = {gBackShinySprite249LugiaPal, SPECIES_LUGIA + NUM_SPECIES, 0x0}, [SPECIES_HO_OH] = {gBackShinySprite250HoOhPal, SPECIES_HO_OH + NUM_SPECIES, 0x0}, [SPECIES_CELEBI] = {gBackShinySprite251CelebiPal, SPECIES_CELEBI + NUM_SPECIES, 0x0}, - [252] = {gBackShinySprite252Pal, 0xfc + NUM_SPECIES, 0x0}, + [SPECIES_MANAPHY_EGG] = {gSpriteManaphyEggPal, SPECIES_MANAPHY_EGG + NUM_SPECIES, 0x0}, [253] = {gBackShinySprite252Pal, 0xfd + NUM_SPECIES, 0x0}, [254] = {gBackShinySprite252Pal, 0xfe + NUM_SPECIES, 0x0}, [255] = {gBackShinySprite252Pal, 0xff + NUM_SPECIES, 0x0}, @@ -712,7 +712,7 @@ const struct CompressedSpritePalette gMonShinyPaletteTable[NUM_SPECIES] = [SPECIES_UNFEZANT_F] = {gBackShinySprite703UnfezantFPal, SPECIES_UNFEZANT_F + NUM_SPECIES, 0x0}, [SPECIES_FRILLISH_F] = {gBackShinySprite704FrillishFPal, SPECIES_FRILLISH_F + NUM_SPECIES, 0x0}, [SPECIES_JELLICENT_F] = {gBackShinySprite705JellicentFPal, SPECIES_JELLICENT_F + NUM_SPECIES, 0x0}, - [SPECIES_SHADOW_WARRIOR] = {gBackShinySprite000NonePal/*gBackShinySprite706ShadowWarriorPal*/, SPECIES_SHADOW_WARRIOR + NUM_SPECIES, 0x0}, + [SPECIES_SHADOW_WARRIOR] = {gSpriteShadowWarriorPal, SPECIES_SHADOW_WARRIOR + NUM_SPECIES, 0x0}, [SPECIES_BURMY_SANDY] = {gBackShinySprite707BurmySandyPal, SPECIES_BURMY_SANDY + NUM_SPECIES, 0x0}, [SPECIES_BURMY_TRASH] = {gBackShinySprite708BurmyTrashPal, SPECIES_BURMY_TRASH + NUM_SPECIES, 0x0}, [SPECIES_WORMADAM_SANDY] = {gBackShinySprite709WormadamSandyPal, SPECIES_WORMADAM_SANDY + NUM_SPECIES, 0x0}, diff --git a/src/Species_To_Pokdex_Table.c b/src/Species_To_Pokdex_Table.c index aa3c1c5..7e3a279 100644 --- a/src/Species_To_Pokdex_Table.c +++ b/src/Species_To_Pokdex_Table.c @@ -254,7 +254,7 @@ const u16 gSpeciesToNationalPokedexNum[NUM_SPECIES - 1] = [SPECIES_LUGIA - 1] = NATIONAL_DEX_LUGIA, [SPECIES_HO_OH - 1] = NATIONAL_DEX_HO_OH, [SPECIES_CELEBI - 1] = NATIONAL_DEX_CELEBI, - [252 - 1] = NATIONAL_DEX_NONE, + [SPECIES_MANAPHY_EGG - 1] = NATIONAL_DEX_NONE, [253 - 1] = NATIONAL_DEX_NONE, [254 - 1] = NATIONAL_DEX_NONE, [255 - 1] = NATIONAL_DEX_NONE, @@ -708,7 +708,6 @@ const u16 gSpeciesToNationalPokedexNum[NUM_SPECIES - 1] = [SPECIES_UNFEZANT_F - 1] = NATIONAL_DEX_UNFEZANT, [SPECIES_FRILLISH_F - 1] = NATIONAL_DEX_FRILLISH, [SPECIES_JELLICENT_F - 1] = NATIONAL_DEX_JELLICENT, - [SPECIES_SHADOW_WARRIOR - 1] = NATIONAL_DEX_CRESSELIA, [SPECIES_BURMY_SANDY - 1] = NATIONAL_DEX_BURMY, [SPECIES_BURMY_TRASH - 1] = NATIONAL_DEX_BURMY, [SPECIES_WORMADAM_SANDY - 1] = NATIONAL_DEX_WORMADAM, diff --git a/src/updated_code.c b/src/updated_code.c index 6a56ff2..c677407 100644 --- a/src/updated_code.c +++ b/src/updated_code.c @@ -6,9 +6,17 @@ //Backsprite battle start +struct Pokemon +{ + u8 data[0x20]; + u16 species; + u8 data2[0x42]; +}; + extern const u8 gSpeciesNames[][POKEMON_NAME_LENGTH + 1]; extern const u16 gSpeciesIdToCryId[]; extern const u16 gSpeciesToNationalPokedexNum[]; +extern struct Pokemon gPlayerParty[6]; extern const u16 gPokedexOrder_Regional[]; extern const u16 gRegionalDexCount; @@ -30,6 +38,12 @@ extern const struct CompressedSpritePalette gMonShinyPaletteTable[]; const u16 gNumSpecies = NUM_SPECIES; const u16 gNumDexEntries = FINAL_DEX_ENTRY; +#define MON_DATA_SPECIES 11 +#define MON_DATA_SPECIES2 65 + +typedef u32 (*GetBoxMonDataAt_T) (u8 boxId, u8 boxPosition, s32 request); +#define GetBoxMonDataAt ((GetBoxMonDataAt_T) (0x0808BA18 |1)) + u8 __attribute__((long_call)) GetGenderFromSpeciesAndPersonality(u16 species, u32 personality); u8 __attribute__((long_call)) GetUnownLetterFromPersonality(u32 personality); bool8 __attribute__((long_call)) GetSetPokedexFlag(u16 nationalNum, u8 caseID); @@ -221,12 +235,51 @@ u16 GetIconSpecies(u16 species, u32 personality) return result; } +u16 TryReplaceSpeciesWithManaphyEgg(struct Pokemon* mon, u16 species) +{ + if (species == SPECIES_EGG) + { + if (mon->species == SPECIES_MANAPHY) + return SPECIES_MANAPHY_EGG; + } + + return species; +} + +bool8 IsPartyMonManaphy(u8 partyId) +{ + return gPlayerParty[partyId].species == SPECIES_MANAPHY; +} + +u16 GetBoxMonSpeciesAt_HandleManaphyEgg(u8 boxId, u8 boxPosition) +{ + u16 species2 = GetBoxMonDataAt(boxId, boxPosition, MON_DATA_SPECIES2); + + if (species2 == SPECIES_EGG && GetBoxMonDataAt(boxId, boxPosition, MON_DATA_SPECIES) == SPECIES_MANAPHY) + return SPECIES_MANAPHY_EGG; + + return species2; +} + +#define gCurrentBoxMonId *((u8*) *((u32*) 0x3005010)) +u16 GetCurrentBoxMonSpeciesAt_HandleManaphyEgg(u8 boxPosition) +{ + return GetBoxMonSpeciesAt_HandleManaphyEgg(gCurrentBoxMonId, boxPosition); +} + +u16 ChangeSpeciesIfManaphyEggPalette(const u8* palette, u16 species) +{ + if (palette == gMonPaletteTable[SPECIES_MANAPHY_EGG].data) + species = SPECIES_MANAPHY_EGG; + + return species; +} + bool8 IsInBattle(void) { return gMain.inBattle; } - u16 CountSpeciesInDex(u8 caseId, bool8 whichDex) { u16 count = 0;