diff options
-rw-r--r-- | asm/battle_2.s | 2 | ||||
-rw-r--r-- | asm/pokemon_3.s | 318 | ||||
-rw-r--r-- | asm/pokemon_summary_screen.s | 2 | ||||
-rw-r--r-- | data/pokemon.s | 7 | ||||
-rw-r--r-- | data/text/battle_strings.inc | 2 | ||||
-rw-r--r-- | ld_script.txt | 2 | ||||
-rw-r--r-- | src/pokemon_3.c | 113 |
7 files changed, 119 insertions, 327 deletions
diff --git a/asm/battle_2.s b/asm/battle_2.s index c29f10487..a28ae518c 100644 --- a/asm/battle_2.s +++ b/asm/battle_2.s @@ -196,7 +196,7 @@ _0800E97E: ldr r1, _0800E9D8 @ =gTrainerBattleOpponent ldrh r1, [r1] bl sub_800F8E8 - bl sub_8040C38 + bl SetWildMonHeldItem _0800E998: ldr r0, _0800E9DC @ =gMain ldr r1, _0800E9E0 @ =0x0000043d diff --git a/asm/pokemon_3.s b/asm/pokemon_3.s deleted file mode 100644 index b1e3d1d02..000000000 --- a/asm/pokemon_3.s +++ /dev/null @@ -1,318 +0,0 @@ - .include "constants/gba_constants.inc" - .include "constants/species_constants.inc" - .include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start sub_8040B8C -sub_8040B8C: @ 8040B8C - push {r4,r5,lr} - ldr r1, _08040BCC @ =byte_2024C06 - ldr r2, _08040BD0 @ =0x02000000 - ldr r3, _08040BD4 @ =0x000160c0 - adds r0, r2, r3 - ldrb r0, [r0] - strb r0, [r1] - ldr r5, _08040BD8 @ =gUnknown_030041C0 - movs r0, 0xFD - strb r0, [r5] - movs r0, 0x4 - strb r0, [r5, 0x1] - ldr r0, _08040BDC @ =0x00016054 - adds r4, r2, r0 - ldrb r0, [r4] - strb r0, [r5, 0x2] - movs r0, 0xFF - strb r0, [r5, 0x4] - ldrb r0, [r4] - bl battle_side_get_owner - lsls r0, 24 - cmp r0, 0 - bne _08040BE4 - ldr r1, _08040BE0 @ =gUnknown_02024A6A - ldrb r0, [r4] - lsls r0, 1 - adds r0, r1 - ldrb r0, [r0] - bl pokemon_order_func - b _08040BEE - .align 2, 0 -_08040BCC: .4byte byte_2024C06 -_08040BD0: .4byte 0x02000000 -_08040BD4: .4byte 0x000160c0 -_08040BD8: .4byte gUnknown_030041C0 -_08040BDC: .4byte 0x00016054 -_08040BE0: .4byte gUnknown_02024A6A -_08040BE4: - ldr r0, _08040C24 @ =gUnknown_02024A6A - ldrb r1, [r4] - lsls r1, 1 - adds r1, r0 - ldrh r0, [r1] -_08040BEE: - strb r0, [r5, 0x3] - ldr r4, _08040C28 @ =gUnknown_03004290 - movs r0, 0xFD - strb r0, [r4] - movs r0, 0x4 - strb r0, [r4, 0x1] - ldr r1, _08040C2C @ =gUnknown_02024E6C - ldrb r0, [r1] - strb r0, [r4, 0x2] - ldr r2, _08040C24 @ =gUnknown_02024A6A - ldrb r0, [r1] - lsls r0, 1 - adds r0, r2 - ldrb r0, [r0] - bl pokemon_order_func - strb r0, [r4, 0x3] - movs r0, 0xFF - strb r0, [r4, 0x4] - ldr r0, _08040C30 @ =gUnknown_083FFCCA - ldr r1, _08040C34 @ =gStringVar4 - bl sub_8120FFC - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08040C24: .4byte gUnknown_02024A6A -_08040C28: .4byte gUnknown_03004290 -_08040C2C: .4byte gUnknown_02024E6C -_08040C30: .4byte gUnknown_083FFCCA -_08040C34: .4byte gStringVar4 - thumb_func_end sub_8040B8C - - thumb_func_start sub_8040C38 -sub_8040C38: @ 8040C38 - push {r4,r5,lr} - ldr r0, _08040C90 @ =gBattleTypeFlags - ldrh r1, [r0] - ldr r0, _08040C94 @ =0x00002008 - ands r0, r1 - cmp r0, 0 - bne _08040CAC - bl Random - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x64 - bl __umodsi3 - lsls r0, 16 - lsrs r5, r0, 16 - ldr r4, _08040C98 @ =gEnemyParty - adds r0, r4, 0 - movs r1, 0xB - movs r2, 0 - bl GetMonData - lsls r0, 16 - lsrs r0, 16 - ldr r2, _08040C9C @ =gBaseStats - lsls r1, r0, 3 - subs r1, r0 - lsls r3, r1, 2 - adds r1, r3, r2 - ldrh r0, [r1, 0xC] - ldrh r1, [r1, 0xE] - cmp r0, r1 - beq _08040C82 - cmp r5, 0x2C - bls _08040CAC - cmp r5, 0x5E - bhi _08040CA0 -_08040C82: - adds r2, 0xC - adds r2, r3, r2 - adds r0, r4, 0 - movs r1, 0xC - bl SetMonData - b _08040CAC - .align 2, 0 -_08040C90: .4byte gBattleTypeFlags -_08040C94: .4byte 0x00002008 -_08040C98: .4byte gEnemyParty -_08040C9C: .4byte gBaseStats -_08040CA0: - adds r2, 0xE - adds r2, r3, r2 - adds r0, r4, 0 - movs r1, 0xC - bl SetMonData -_08040CAC: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_8040C38 - - thumb_func_start sub_8040CB4 -sub_8040CB4: @ 8040CB4 - push {r4,r5,lr} - adds r4, r0, 0 - movs r1, 0x1 - movs r2, 0 - bl GetMonData - adds r5, r0, 0 - adds r0, r4, 0 - movs r1, 0 - movs r2, 0 - bl GetMonData - adds r1, r0, 0 - adds r0, r5, 0 - bl sub_8040CE0 - lsls r0, 24 - lsrs r0, 24 - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_8040CB4 - - thumb_func_start sub_8040CE0 -sub_8040CE0: @ 8040CE0 - push {r4,lr} - movs r4, 0 - lsrs r2, r0, 16 - ldr r3, _08040D04 @ =0x0000ffff - ands r0, r3 - eors r2, r0 - lsrs r0, r1, 16 - eors r2, r0 - ands r1, r3 - eors r2, r1 - cmp r2, 0x7 - bhi _08040CFA - movs r4, 0x1 -_08040CFA: - adds r0, r4, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_08040D04: .4byte 0x0000ffff - thumb_func_end sub_8040CE0 - - thumb_func_start sub_8040D08 -sub_8040D08: @ 8040D08 - push {r4,lr} - bl GetMultiplayerId - lsls r0, 24 - lsrs r0, 24 - ldr r4, _08040D38 @ =gLinkPlayers - lsls r1, r0, 3 - subs r1, r0 - lsls r1, 2 - adds r1, r4 - ldrh r1, [r1, 0x18] - movs r0, 0x2 - eors r0, r1 - bl sub_803FC34 - adds r1, r0, 0 - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - adds r4, 0x8 - adds r0, r4 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_08040D38: .4byte gLinkPlayers - thumb_func_end sub_8040D08 - - thumb_func_start sub_8040D3C -sub_8040D3C: @ 8040D3C - push {r4,lr} - adds r4, r1, 0 - lsls r0, 16 - lsrs r1, r0, 16 - adds r0, r1, 0 - lsls r2, 24 - lsrs r2, 24 - movs r3, 0 - cmp r1, 0x20 - beq _08040D54 - cmp r1, 0x1D - bne _08040D7E -_08040D54: - cmp r2, 0x2 - bne _08040D68 - movs r0, 0xB - muls r1, r0 - ldr r0, _08040D64 @ =gSpeciesNames - adds r1, r0 - b _08040D70 - .align 2, 0 -_08040D64: .4byte gSpeciesNames -_08040D68: - ldr r1, _08040D88 @ =gUnknown_08208337 - cmp r0, 0x20 - bne _08040D70 - subs r1, 0xB -_08040D70: - adds r0, r4, 0 - bl StringCompareWithoutExtCtrlCodes - movs r3, 0 - cmp r0, 0 - bne _08040D7E - movs r3, 0x1 -_08040D7E: - adds r0, r3, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_08040D88: .4byte gUnknown_08208337 - thumb_func_end sub_8040D3C - - thumb_func_start sub_8040D8C -sub_8040D8C: @ 8040D8C - push {lr} - lsls r0, 16 - lsrs r3, r0, 16 - movs r2, 0x2 - ldrb r0, [r1] - cmp r0, 0xFC - bne _08040DA2 - ldrb r0, [r1, 0x1] - cmp r0, 0x15 - bne _08040DA2 - movs r2, 0x1 -_08040DA2: - adds r0, r3, 0 - bl sub_8040D3C - pop {r1} - bx r1 - thumb_func_end sub_8040D8C - - thumb_func_start unref_sub_8040DAC -unref_sub_8040DAC: @ 8040DAC - push {r4-r6,lr} - sub sp, 0xC - adds r6, r0, 0 - movs r1, 0xB - movs r2, 0 - bl GetMonData - adds r5, r0, 0 - lsls r5, 16 - lsrs r5, 16 - adds r0, r6, 0 - movs r1, 0x3 - movs r2, 0 - bl GetMonData - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - adds r0, r6, 0 - movs r1, 0x2 - mov r2, sp - bl GetMonData - adds r0, r5, 0 - mov r1, sp - adds r2, r4, 0 - bl sub_8040D3C - add sp, 0xC - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end unref_sub_8040DAC - - .align 2, 0 @ Don't pad with nop. diff --git a/asm/pokemon_summary_screen.s b/asm/pokemon_summary_screen.s index 25144558d..20231a0bb 100644 --- a/asm/pokemon_summary_screen.s +++ b/asm/pokemon_summary_screen.s @@ -4311,7 +4311,7 @@ GetStringCenterAlignXOffset: @ 809FA74 thumb_func_start sub_809FA94 sub_809FA94: @ 809FA94 push {lr} - bl sub_8040CB4 + bl IsShiny lsls r0, 24 cmp r0, 0 beq _0809FAB4 diff --git a/data/pokemon.s b/data/pokemon.s index cae39c0f2..2229512a4 100644 --- a/data/pokemon.s +++ b/data/pokemon.s @@ -126,9 +126,6 @@ gHMMoves:: @ 820831A .2byte MOVE_DIVE .2byte 0xFFFF -@ "Nidoran♂" Japanese name +gJapaneseNidoranNames:: @ 820832C .string "ニドラン♂$", 11 - -@ "Nidoran♀" Japanese name -gUnknown_08208337:: @ 8208337 - .string "ニドラン♀$", 13 + .string "ニドラン♀$", 11 diff --git a/data/text/battle_strings.inc b/data/text/battle_strings.inc index 35c3d7d6b..d1aca1dee 100644 --- a/data/text/battle_strings.inc +++ b/data/text/battle_strings.inc @@ -480,7 +480,7 @@ BattleText_TookAttack2: .string "{DEFENDING_MON}’s {STRING 22}\ntook the attack!$" gUnknown_083FFCCA:: @ 83FFCCA -BattleText_PreventedSwitch: +BattleText_PreventedSwitch:: .string "{STRING 0}’s {STRING 20}\nprevents switching!\p$" BattleText_PreventedOther: .string "{DEFENDING_MON}’s {STRING 22}\nprevented {STRING 16}’s\l{STRING 0} from working!$" diff --git a/ld_script.txt b/ld_script.txt index 6209a3584..d294a4db4 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -65,7 +65,6 @@ SECTIONS { src/pokemon_2.o(.text); asm/pokemon_item_effect.o(.text); src/pokemon_3.o(.text); - asm/pokemon_3.o(.text); src/trig.o(.text); src/rng.o(.text); src/util.o(.text); @@ -333,6 +332,7 @@ SECTIONS { data/main_menu.o(.rodata); data/data2.o(.rodata); data/pokemon.o(.rodata); + . = ALIGN(4); data/trig.o(.rodata); data/util.o(.rodata); data/daycare.o(.rodata); diff --git a/src/pokemon_3.c b/src/pokemon_3.c index bbf083a86..899c9c713 100644 --- a/src/pokemon_3.c +++ b/src/pokemon_3.c @@ -54,6 +54,8 @@ struct SpindaSpot }; extern void get_battle_strings_(u8 *); +extern void sub_8120FFC(const u8 *, u8 *); +extern u8 pokemon_order_func(u8); extern u8 gPlayerPartyCount; extern struct Pokemon gPlayerParty[6]; @@ -94,6 +96,10 @@ extern const struct SpritePalette gMonPaletteTable[]; extern const struct SpritePalette gMonShinyPaletteTable[]; extern const u16 gHMMoves[]; extern s8 gUnknown_083F7E28[]; +extern u8 byte_2024C06; +extern const u8 BattleText_PreventedSwitch[]; +extern u16 gUnknown_02024A6A[]; +extern u8 gJapaneseNidoranNames[][11]; extern u8 gUnknown_082082F8[]; extern u8 gUnknown_083FFDB3[]; @@ -1320,3 +1326,110 @@ void BoxMonRestorePP(struct BoxPokemon *boxMon) } } } + +void sub_8040B8C(void) +{ + byte_2024C06 = BATTLE_STRUCT->filler1_2[0x37]; + gUnknown_030041C0[0] = 0xFD; + gUnknown_030041C0[1] = 4; + gUnknown_030041C0[2] = BATTLE_STRUCT->filler1[0x34]; + gUnknown_030041C0[4] = EOS; + if (!battle_side_get_owner(BATTLE_STRUCT->filler1[0x34])) + gUnknown_030041C0[3] = pokemon_order_func(gUnknown_02024A6A[BATTLE_STRUCT->filler1[0x34]]); + else + gUnknown_030041C0[3] = gUnknown_02024A6A[BATTLE_STRUCT->filler1[0x34]]; + gUnknown_03004290[0] = 0xFD; + gUnknown_03004290[1] = 4; + gUnknown_03004290[2] = gUnknown_02024E6C; + gUnknown_03004290[3] = pokemon_order_func(gUnknown_02024A6A[gUnknown_02024E6C]); + gUnknown_03004290[4] = EOS; + sub_8120FFC(BattleText_PreventedSwitch, gStringVar4); +} + +void SetWildMonHeldItem(void) +{ + if (!(gBattleTypeFlags & (BATTLE_TYPE_LEGENDARY | BATTLE_TYPE_TRAINER))) + { + u16 rnd = Random() % 100; + 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); + return; + } + + if (rnd > 44) + { + if (rnd <= 94) + SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, (u8 *)&gBaseStats[species].item1); + else + SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, (u8 *)&gBaseStats[species].item2); + } + } +} + +bool8 IsShinyOtIdPersonality(u32, u32); + +bool8 IsShiny(struct Pokemon *mon) +{ + u32 otId = GetMonData(mon, MON_DATA_OT_ID, 0); + u32 personality = GetMonData(mon, MON_DATA_PERSONALITY, 0); + return IsShinyOtIdPersonality(otId, personality); +} + +bool8 IsShinyOtIdPersonality(u32 otId, u32 personality) +{ + bool8 retVal = FALSE; + u32 shinyValue = HIHALF(otId) ^ LOHALF(otId) ^ HIHALF(personality) ^ LOHALF(personality); + if (shinyValue < 8) + retVal = TRUE; + return retVal; +} + +u8 *sub_8040D08(void) +{ + u8 id = GetMultiplayerId(); + return gLinkPlayers[sub_803FC34(gLinkPlayers[id].lp_field_18 ^ 2)].name; +} + +bool32 sub_8040D3C(u16 species, u8 *name, u8 language) +{ + bool32 retVal = FALSE; + if (species == SPECIES_NIDORAN_M || species == SPECIES_NIDORAN_F) + { + u8 *speciesName; + if (language == GAME_LANGUAGE) + { + speciesName = gSpeciesNames[species]; + } + else + { + if (species == SPECIES_NIDORAN_M) + speciesName = gJapaneseNidoranNames[0]; + else + speciesName = gJapaneseNidoranNames[1]; + } + if (!StringCompareWithoutExtCtrlCodes(name, speciesName)) + retVal = TRUE; + else + retVal = FALSE; + } + return retVal; +} + +bool32 sub_8040D8C(u16 species, u8 *name) +{ + u8 language = GAME_LANGUAGE; + if (name[0] == 0xFC && name[1] == 21) + language = LANGUAGE_JAPANESE; + return sub_8040D3C(species, name, language); +} + +bool32 unref_sub_8040DAC(struct Pokemon *mon) +{ + u8 name[12]; + u16 species = GetMonData(mon, MON_DATA_SPECIES, 0); + u8 language = GetMonData(mon, MON_DATA_LANGUAGE, 0); + GetMonData(mon, MON_DATA_NICKNAME, name); + return sub_8040D3C(species, name, language); +} |