diff options
-rw-r--r-- | asm/battle_ai.s | 4 | ||||
-rw-r--r-- | asm/rom3.s | 4 | ||||
-rw-r--r-- | asm/rom_800D42C.s | 110 | ||||
-rw-r--r-- | include/hold_effects.h | 72 | ||||
-rw-r--r-- | include/pokemon.h | 19 | ||||
-rw-r--r-- | src/calculate_base_damage.c | 82 | ||||
-rw-r--r-- | src/pokemon_2.c | 2 | ||||
-rw-r--r-- | sym_ewram.txt | 2 |
8 files changed, 194 insertions, 101 deletions
diff --git a/asm/battle_ai.s b/asm/battle_ai.s index 89950f005..5df4635b2 100644 --- a/asm/battle_ai.s +++ b/asm/battle_ai.s @@ -212,7 +212,7 @@ _08108AE8: .4byte gAIScriptPtr thumb_func_start BattleAICmd_unk_36 BattleAICmd_unk_36: @ 8108AEC push {lr} - ldr r2, _08108B3C @ =word_2024DB8 + ldr r2, _08108B3C @ =gBattleWeather ldrh r1, [r2] movs r0, 0x7 ands r0, r1 @@ -255,7 +255,7 @@ _08108B2E: pop {r0} bx r0 .align 2, 0 -_08108B3C: .4byte word_2024DB8 +_08108B3C: .4byte gBattleWeather _08108B40: .4byte 0x02016800 _08108B44: .4byte gAIScriptPtr thumb_func_end BattleAICmd_unk_36 diff --git a/asm/rom3.s b/asm/rom3.s index 823ac4e0c..f5238ddb5 100644 --- a/asm/rom3.s +++ b/asm/rom3.s @@ -2133,7 +2133,7 @@ dp01_build_cmdbuf_x0F_aa_b_cc_dddd_e_mlc_weather_00_x1Cbytes: @ 800C870 lsls r0, 24 cmp r0, 0 bne _0800C910 - ldr r0, _0800C90C @ =word_2024DB8 + ldr r0, _0800C90C @ =gBattleWeather ldrh r0, [r0] strb r0, [r7, 0xC] ands r6, r0 @@ -2144,7 +2144,7 @@ dp01_build_cmdbuf_x0F_aa_b_cc_dddd_e_mlc_weather_00_x1Cbytes: @ 800C870 .align 2, 0 _0800C904: .4byte gUnknown_03004040 _0800C908: .4byte gUnknown_02024C0E -_0800C90C: .4byte word_2024DB8 +_0800C90C: .4byte gBattleWeather _0800C910: ldr r0, _0800C944 @ =gUnknown_03004040 movs r1, 0 diff --git a/asm/rom_800D42C.s b/asm/rom_800D42C.s index db4158af6..1b0ef2731 100644 --- a/asm/rom_800D42C.s +++ b/asm/rom_800D42C.s @@ -6574,7 +6574,7 @@ _08010906: strb r1, [r2] ldr r3, _08010B00 @ =gUnknown_02024C08 strb r1, [r3] - ldr r4, _08010B04 @ =word_2024DB8 + ldr r4, _08010B04 @ =gBattleWeather strh r1, [r4] ldr r1, _08010B08 @ =gUnknown_02024DBC movs r2, 0 @@ -6804,7 +6804,7 @@ _08010AF4: .4byte gUnknown_02024C80 _08010AF8: .4byte gUnknown_02024C7A _08010AFC: .4byte gUnknown_02024C07 _08010B00: .4byte gUnknown_02024C08 -_08010B04: .4byte word_2024DB8 +_08010B04: .4byte gBattleWeather _08010B08: .4byte gUnknown_02024DBC _08010B0C: .4byte gUnknown_02024C6C _08010B10: .4byte gUnknown_020239F8 @@ -11323,7 +11323,7 @@ b_first_side: @ 8012FF0 ldrb r3, [r0] cmp r3, 0x21 bne _0801305C - ldr r0, _08013074 @ =word_2024DB8 + ldr r0, _08013074 @ =gBattleWeather ldrh r1, [r0] movs r0, 0x7 ands r0, r1 @@ -11332,7 +11332,7 @@ b_first_side: @ 8012FF0 _0801305C: cmp r3, 0x22 bne _08013078 - ldr r0, _08013074 @ =word_2024DB8 + ldr r0, _08013074 @ =gBattleWeather ldrh r1, [r0] movs r0, 0x60 ands r0, r1 @@ -11343,7 +11343,7 @@ _0801306C: b _0801307A .align 2, 0 _08013070: .4byte gBattleMons -_08013074: .4byte word_2024DB8 +_08013074: .4byte gBattleWeather _08013078: movs r3, 0x1 _0801307A: @@ -11357,7 +11357,7 @@ _0801307A: ldrb r2, [r0] cmp r2, 0x21 bne _0801309A - ldr r0, _080130B4 @ =word_2024DB8 + ldr r0, _080130B4 @ =gBattleWeather ldrh r1, [r0] movs r0, 0x7 ands r0, r1 @@ -11366,7 +11366,7 @@ _0801307A: _0801309A: cmp r2, 0x22 bne _080130BA - ldr r0, _080130B4 @ =word_2024DB8 + ldr r0, _080130B4 @ =gBattleWeather ldrh r1, [r0] movs r0, 0x60 ands r0, r1 @@ -11377,7 +11377,7 @@ _080130AA: b _080130BC .align 2, 0 _080130B0: .4byte gBattleMons -_080130B4: .4byte word_2024DB8 +_080130B4: .4byte gBattleWeather _080130B8: movs r3, 0x1 _080130BA: @@ -17566,7 +17566,7 @@ _08016318: .4byte gUnknown_081D939A _0801631C: .4byte 0x02000000 _08016320: .4byte 0x0001600e _08016324: - ldr r3, _0801635C @ =word_2024DB8 + ldr r3, _0801635C @ =gBattleWeather ldrh r2, [r3] movs r0, 0x7 ands r0, r2 @@ -17596,7 +17596,7 @@ _08016332: strb r0, [r1, 0x5] b _0801639C .align 2, 0 -_0801635C: .4byte word_2024DB8 +_0801635C: .4byte gBattleWeather _08016360: .4byte gUnknown_02024DBC _08016364: .4byte 0x0000fffe _08016368: .4byte 0x0000fffd @@ -17633,7 +17633,7 @@ _0801639C: _080163A0: .4byte gUnknown_02024D1E _080163A4: .4byte gUnknown_081D8F62 _080163A8: - ldr r3, _080163DC @ =word_2024DB8 + ldr r3, _080163DC @ =gBattleWeather ldrh r2, [r3] movs r0, 0x18 ands r0, r2 @@ -17660,7 +17660,7 @@ _080163B6: ldr r0, _080163EC @ =gUnknown_081D8FFF b _080163F4 .align 2, 0 -_080163DC: .4byte word_2024DB8 +_080163DC: .4byte gBattleWeather _080163E0: .4byte gUnknown_02024DBC _080163E4: .4byte 0x0000fff7 _080163E8: .4byte gUnknown_02024C10 @@ -17687,7 +17687,7 @@ _08016414: .4byte 0x02000000 _08016418: .4byte 0x000160a4 _0801641C: .4byte gUnknown_02024D1E _08016420: - ldr r3, _08016450 @ =word_2024DB8 + ldr r3, _08016450 @ =gBattleWeather ldrh r2, [r3] movs r0, 0x60 ands r0, r2 @@ -17712,7 +17712,7 @@ _08016420: ldr r0, _08016460 @ =gUnknown_081D9016 b _08016468 .align 2, 0 -_08016450: .4byte word_2024DB8 +_08016450: .4byte gBattleWeather _08016454: .4byte gUnknown_02024DBC _08016458: .4byte 0x0000ffdf _0801645C: .4byte gUnknown_02024C10 @@ -17741,7 +17741,7 @@ _08016488: .4byte gUnknown_081D9008 _0801648C: .4byte 0x02000000 _08016490: .4byte 0x0001600e _08016494: - ldr r3, _080164BC @ =word_2024DB8 + ldr r3, _080164BC @ =gBattleWeather ldrh r2, [r3] movs r0, 0x80 ands r0, r2 @@ -17762,7 +17762,7 @@ _08016494: ldr r0, _080164CC @ =gUnknown_081D8FFF b _080164D4 .align 2, 0 -_080164BC: .4byte word_2024DB8 +_080164BC: .4byte gBattleWeather _080164C0: .4byte gUnknown_02024DBC _080164C4: .4byte 0x0000ff7f _080164C8: .4byte gUnknown_02024C10 @@ -21347,7 +21347,7 @@ _0801825C: movs r0, 0 b _08018314 _08018260: - ldr r1, _0801831C @ =word_2024DB8 + ldr r1, _0801831C @ =gBattleWeather ldrh r0, [r1] movs r2, 0xE7 ands r2, r0 @@ -21447,7 +21447,7 @@ _08018314: pop {r1} bx r1 .align 2, 0 -_0801831C: .4byte word_2024DB8 +_0801831C: .4byte gBattleWeather _08018320: .4byte gBattleMons thumb_func_end castform_switch @@ -21766,7 +21766,7 @@ _080185A4: .4byte _08018620 .4byte _080185D0 _080185D0: - ldr r2, _080185EC @ =word_2024DB8 + ldr r2, _080185EC @ =gBattleWeather ldrh r1, [r2] movs r0, 0x7 ands r0, r1 @@ -21780,11 +21780,11 @@ _080185D0: movs r1, 0xA b _08018638 .align 2, 0 -_080185EC: .4byte word_2024DB8 +_080185EC: .4byte gBattleWeather _080185F0: .4byte 0x02000000 _080185F4: .4byte 0x000160a4 _080185F8: - ldr r3, _08018614 @ =word_2024DB8 + ldr r3, _08018614 @ =gBattleWeather ldrh r1, [r3] movs r2, 0x18 adds r0, r2, 0 @@ -21798,11 +21798,11 @@ _080185F8: movs r1, 0xC b _08018638 .align 2, 0 -_08018614: .4byte word_2024DB8 +_08018614: .4byte gBattleWeather _08018618: .4byte 0x02000000 _0801861C: .4byte 0x000160a4 _08018620: - ldr r3, _08018668 @ =word_2024DB8 + ldr r3, _08018668 @ =gBattleWeather ldrh r1, [r3] movs r2, 0x60 adds r0, r2, 0 @@ -21838,14 +21838,14 @@ _08018656: bl b_push_move_exec bl _08019F76 .align 2, 0 -_08018668: .4byte word_2024DB8 +_08018668: .4byte gBattleWeather _0801866C: .4byte 0x02000000 _08018670: .4byte 0x000160a4 _08018674: .4byte 0x00016003 _08018678: .4byte gUnknown_02024D1E _0801867C: .4byte gUnknown_081D901D _08018680: - ldr r2, _080186A8 @ =word_2024DB8 + ldr r2, _080186A8 @ =gBattleWeather ldrh r1, [r2] movs r0, 0x4 ands r0, r1 @@ -21864,12 +21864,12 @@ _08018690: strb r5, [r0] bl _08019F22 .align 2, 0 -_080186A8: .4byte word_2024DB8 +_080186A8: .4byte gBattleWeather _080186AC: .4byte gUnknown_081D9704 _080186B0: .4byte 0x02000000 _080186B4: .4byte 0x00016003 _080186B8: - ldr r2, _080186E0 @ =word_2024DB8 + ldr r2, _080186E0 @ =gBattleWeather ldrh r1, [r2] movs r0, 0x10 ands r0, r1 @@ -21888,12 +21888,12 @@ _080186C8: strb r2, [r0] bl _08019F22 .align 2, 0 -_080186E0: .4byte word_2024DB8 +_080186E0: .4byte gBattleWeather _080186E4: .4byte gUnknown_081D9744 _080186E8: .4byte 0x02000000 _080186EC: .4byte 0x00016003 _080186F0: - ldr r2, _08018718 @ =word_2024DB8 + ldr r2, _08018718 @ =gBattleWeather ldrh r1, [r2] movs r0, 0x40 ands r0, r1 @@ -21912,7 +21912,7 @@ _08018700: strb r5, [r0] bl _08019F22 .align 2, 0 -_08018718: .4byte word_2024DB8 +_08018718: .4byte gBattleWeather _0801871C: .4byte gUnknown_081D97FE _08018720: .4byte 0x02000000 _08018724: .4byte 0x00016003 @@ -22086,7 +22086,7 @@ _08018876: beq _0801888E bl _08019F76 _0801888E: - ldr r0, _080188D0 @ =word_2024DB8 + ldr r0, _080188D0 @ =gBattleWeather ldrh r1, [r0] movs r0, 0x7 ands r0, r1 @@ -22118,7 +22118,7 @@ _080188C4: str r0, [r1] bl _08019F22 .align 2, 0 -_080188D0: .4byte word_2024DB8 +_080188D0: .4byte gBattleWeather _080188D4: .4byte gUnknown_081D9730 _080188D8: .4byte gUnknown_02024BEC _080188DC: @@ -28938,7 +28938,7 @@ _0801C22E: lsls r0, 24 cmp r0, 0 bne _0801C27E - ldr r0, _0801C2A8 @ =word_2024DB8 + ldr r0, _0801C2A8 @ =gBattleWeather ldrh r1, [r0] movs r0, 0x7 ands r0, r1 @@ -28971,7 +28971,7 @@ _0801C290: _0801C29C: .4byte 0xfffeffff _0801C2A0: .4byte 0xfffdffff _0801C2A4: .4byte 0xfffbffff -_0801C2A8: .4byte word_2024DB8 +_0801C2A8: .4byte gBattleWeather _0801C2AC: .4byte gBattleMoves _0801C2B0: movs r0, 0 @@ -29197,7 +29197,7 @@ _0801C430: lsls r0, 24 cmp r0, 0 bne _0801C482 - ldr r0, _0801C574 @ =word_2024DB8 + ldr r0, _0801C574 @ =gBattleWeather ldrh r1, [r0] movs r0, 0x60 ands r0, r1 @@ -29267,7 +29267,7 @@ _0801C4C0: ldrb r0, [r0] cmp r0, 0x8 bne _0801C518 - ldr r0, _0801C574 @ =word_2024DB8 + ldr r0, _0801C574 @ =gBattleWeather ldrh r1, [r0] movs r0, 0x18 ands r0, r1 @@ -29325,7 +29325,7 @@ _0801C544: .align 2, 0 _0801C56C: .4byte gUnknown_02024C07 _0801C570: .4byte gBattleMoves -_0801C574: .4byte word_2024DB8 +_0801C574: .4byte gBattleWeather _0801C578: .4byte gAccuracyStageRatios _0801C57C: .4byte gBattleMons _0801C580: .4byte gUnknown_02024C08 @@ -33722,7 +33722,7 @@ _0801E7EA: lsls r0, 24 cmp r0, 0 bne _0801E826 - ldr r0, _0801E87C @ =word_2024DB8 + ldr r0, _0801E87C @ =gBattleWeather ldrh r1, [r0] movs r0, 0x60 ands r0, r1 @@ -33778,7 +33778,7 @@ _0801E86E: mov r10, r3 b _0801EA14 .align 2, 0 -_0801E87C: .4byte word_2024DB8 +_0801E87C: .4byte gBattleWeather _0801E880: .4byte gBattleMons _0801E884: .4byte gUnknown_02024C0A _0801E888: @@ -47354,7 +47354,7 @@ _080256CC: .4byte gUnknown_02024C10 thumb_func_start sub_80256D0 sub_80256D0: @ 80256D0 push {lr} - ldr r2, _080256F0 @ =word_2024DB8 + ldr r2, _080256F0 @ =gBattleWeather ldrh r0, [r2] movs r1, 0x7 ands r1, r0 @@ -47370,7 +47370,7 @@ sub_80256D0: @ 80256D0 strb r0, [r1, 0x5] b _0802570C .align 2, 0 -_080256F0: .4byte word_2024DB8 +_080256F0: .4byte gBattleWeather _080256F4: .4byte gUnknown_02024C68 _080256F8: .4byte gUnknown_02024D1E _080256FC: @@ -50358,7 +50358,7 @@ _08026E90: .4byte gUnknown_02024C10 thumb_func_start sub_8026E94 sub_8026E94: @ 8026E94 push {lr} - ldr r2, _08026EB4 @ =word_2024DB8 + ldr r2, _08026EB4 @ =gBattleWeather ldrh r1, [r2] movs r0, 0x18 ands r0, r1 @@ -50374,7 +50374,7 @@ sub_8026E94: @ 8026E94 strb r0, [r1, 0x5] b _08026ED2 .align 2, 0 -_08026EB4: .4byte word_2024DB8 +_08026EB4: .4byte gBattleWeather _08026EB8: .4byte gUnknown_02024C68 _08026EBC: .4byte gUnknown_02024D1E _08026EC0: @@ -50428,7 +50428,7 @@ _08026F0A: beq _08026F20 b _0802701C _08026F20: - ldr r2, _08026F94 @ =word_2024DB8 + ldr r2, _08026F94 @ =gBattleWeather ldrh r1, [r2] movs r0, 0x18 ands r0, r1 @@ -50486,7 +50486,7 @@ _08026F20: movs r0, 0x1 b _08026FAC .align 2, 0 -_08026F94: .4byte word_2024DB8 +_08026F94: .4byte gBattleWeather _08026F98: .4byte gUnknown_02024C07 _08026F9C: .4byte gBattleMons _08026FA0: .4byte gUnknown_02024C98 @@ -53030,7 +53030,7 @@ move_weather_interaction: @ 80283B4 adds r3, r1, 0 cmp r0, 0x97 bne _080283D8 - ldr r0, _08028410 @ =word_2024DB8 + ldr r0, _08028410 @ =gBattleWeather ldrh r1, [r0] movs r0, 0x60 ands r0, r1 @@ -53066,7 +53066,7 @@ _080283FA: b _0802841A .align 2, 0 _0802840C: .4byte gBattleMoves -_08028410: .4byte word_2024DB8 +_08028410: .4byte gBattleWeather _08028414: .4byte gUnknown_02024C6C _08028418: movs r0, 0x2 @@ -55063,7 +55063,7 @@ _080293E4: .4byte gUnknown_02024C10 thumb_func_start sub_80293E8 sub_80293E8: @ 80293E8 push {lr} - ldr r2, _08029408 @ =word_2024DB8 + ldr r2, _08029408 @ =gBattleWeather ldrh r1, [r2] movs r0, 0x60 ands r0, r1 @@ -55079,7 +55079,7 @@ sub_80293E8: @ 80293E8 strb r0, [r1, 0x5] b _08029426 .align 2, 0 -_08029408: .4byte word_2024DB8 +_08029408: .4byte gBattleWeather _0802940C: .4byte gUnknown_02024C68 _08029410: .4byte gUnknown_02024D1E _08029414: @@ -55398,7 +55398,7 @@ atkC0_recoverbasedonsunlight: @ 802967C ldrh r0, [r0, 0x2C] cmp r1, r0 beq _0802975C - ldr r4, _080296F4 @ =word_2024DB8 + ldr r4, _080296F4 @ =gBattleWeather ldrh r0, [r4] cmp r0, 0 beq _080296CE @@ -55439,7 +55439,7 @@ _080296CE: _080296E8: .4byte gUnknown_02024C08 _080296EC: .4byte gUnknown_02024C07 _080296F0: .4byte gBattleMons -_080296F4: .4byte word_2024DB8 +_080296F4: .4byte gBattleWeather _080296F8: .4byte gUnknown_02024BEC _080296FC: ldrh r1, [r4] @@ -56293,7 +56293,7 @@ _08029DA8: .4byte gUnknown_02024C10 thumb_func_start sub_8029DAC sub_8029DAC: @ 8029DAC push {lr} - ldr r3, _08029DD0 @ =word_2024DB8 + ldr r3, _08029DD0 @ =gBattleWeather ldrh r1, [r3] movs r2, 0x80 adds r0, r2, 0 @@ -56310,7 +56310,7 @@ sub_8029DAC: @ 8029DAC strb r0, [r1, 0x5] b _08029DEA .align 2, 0 -_08029DD0: .4byte word_2024DB8 +_08029DD0: .4byte gBattleWeather _08029DD4: .4byte gUnknown_02024C68 _08029DD8: .4byte gUnknown_02024D1E _08029DDC: @@ -58875,7 +58875,7 @@ sub_802B1C0: @ 802B1C0 lsls r0, 24 cmp r0, 0 bne _0802B276 - ldr r3, _0802B218 @ =word_2024DB8 + ldr r3, _0802B218 @ =gBattleWeather ldrb r0, [r3] ldr r2, _0802B21C @ =0x02000000 cmp r0, 0 @@ -58896,7 +58896,7 @@ _0802B202: strb r0, [r1] b _0802B276 .align 2, 0 -_0802B218: .4byte word_2024DB8 +_0802B218: .4byte gBattleWeather _0802B21C: .4byte 0x02000000 _0802B220: .4byte 0x0001601f _0802B224: .4byte 0x0001601c diff --git a/include/hold_effects.h b/include/hold_effects.h new file mode 100644 index 000000000..b653f5a92 --- /dev/null +++ b/include/hold_effects.h @@ -0,0 +1,72 @@ +#ifndef GUARD_HOLD_EFFECTS_H +#define GUARD_HOLD_EFFECTS_H + +#define HOLD_EFFECT_NONE 0 +#define HOLD_EFFECT_RESTORE_HP 1 +#define HOLD_EFFECT_CURE_PAR 2 +#define HOLD_EFFECT_CURE_SLP 3 +#define HOLD_EFFECT_CURE_PSN 4 +#define HOLD_EFFECT_CURE_BRN 5 +#define HOLD_EFFECT_CURE_FRZ 6 +#define HOLD_EFFECT_RESTORE_PP 7 +#define HOLD_EFFECT_CURE_CONFUSION 8 +#define HOLD_EFFECT_CURE_STATUS 9 +#define HOLD_EFFECT_CONFUSE_SPICY 10 +#define HOLD_EFFECT_CONFUSE_DRY 11 +#define HOLD_EFFECT_CONFUSE_SWEET 12 +#define HOLD_EFFECT_CONFUSE_BITTER 13 +#define HOLD_EFFECT_CONFUSE_SOUR 14 +#define HOLD_EFFECT_ATTACK_UP 15 +#define HOLD_EFFECT_DEFENSE_UP 16 +#define HOLD_EFFECT_SPEED_UP 17 +#define HOLD_EFFECT_SP_ATTACK_UP 18 +#define HOLD_EFFECT_SP_DEFENSE_UP 19 +#define HOLD_EFFECT_CRITICAL_UP 20 +#define HOLD_EFFECT_RANDOM_STAT_UP 21 +#define HOLD_EFFECT_EVASION_UP 22 +#define HOLD_EFFECT_RESTORE_STATS 23 +#define HOLD_EFFECT_MACHO_BRACE 24 +#define HOLD_EFFECT_EXP_SHARE 25 +#define HOLD_EFFECT_QUICK_CLAW 26 +#define HOLD_EFFECT_HAPPINESS_UP 27 +#define HOLD_EFFECT_CURE_ATTRACT 28 +#define HOLD_EFFECT_CHOICE_BAND 29 +#define HOLD_EFFECT_FLINCH 30 +#define HOLD_EFFECT_BUG_POWER 31 +#define HOLD_EFFECT_DOUBLE_PRIZE 32 +#define HOLD_EFFECT_REPEL 33 +#define HOLD_EFFECT_SOUL_DEW 34 +#define HOLD_EFFECT_DEEP_SEA_TOOTH 35 +#define HOLD_EFFECT_DEEP_SEA_SCALE 36 +#define HOLD_EFFECT_CAN_ALWAYS_RUN 37 +#define HOLD_EFFECT_PREVENT_EVOLVE 38 +#define HOLD_EFFECT_FOCUS_BAND 39 +#define HOLD_EFFECT_LUCKY_EGG 40 +#define HOLD_EFFECT_SCOPE_LENS 41 +#define HOLD_EFFECT_STEEL_POWER 42 +#define HOLD_EFFECT_LEFTOVERS 43 +#define HOLD_EFFECT_DRAGON_SCALE 44 +#define HOLD_EFFECT_LIGHT_BALL 45 +#define HOLD_EFFECT_GROUND_POWER 46 +#define HOLD_EFFECT_ROCK_POWER 47 +#define HOLD_EFFECT_GRASS_POWER 48 +#define HOLD_EFFECT_DARK_POWER 49 +#define HOLD_EFFECT_FIGHTING_POWER 50 +#define HOLD_EFFECT_ELECTRIC_POWER 51 +#define HOLD_EFFECT_WATER_POWER 52 +#define HOLD_EFFECT_FLYING_POWER 53 +#define HOLD_EFFECT_POISON_POWER 54 +#define HOLD_EFFECT_ICE_POWER 55 +#define HOLD_EFFECT_GHOST_POWER 56 +#define HOLD_EFFECT_PSYCHIC_POWER 57 +#define HOLD_EFFECT_FIRE_POWER 58 +#define HOLD_EFFECT_DRAGON_POWER 59 +#define HOLD_EFFECT_NORMAL_POWER 60 +#define HOLD_EFFECT_UP_GRADE 61 +#define HOLD_EFFECT_SHELL_BELL 62 +#define HOLD_EFFECT_LUCKY_PUNCH 63 +#define HOLD_EFFECT_METAL_POWDER 64 +#define HOLD_EFFECT_THICK_CLUB 65 +#define HOLD_EFFECT_STICK 66 + +#endif // GUARD_HOLD_EFFECTS_H diff --git a/include/pokemon.h b/include/pokemon.h index dd80e1ea1..ee141dcc5 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -95,6 +95,25 @@ #define MON_FEMALE 0xFE #define MON_GENDERLESS 0xFF +#define TYPE_NORMAL 0x00 +#define TYPE_FIGHTING 0x01 +#define TYPE_FLYING 0x02 +#define TYPE_POISON 0x03 +#define TYPE_GROUND 0x04 +#define TYPE_ROCK 0x05 +#define TYPE_BUG 0x06 +#define TYPE_GHOST 0x07 +#define TYPE_STEEL 0x08 +#define TYPE_MYSTERY 0x09 +#define TYPE_FIRE 0x0a +#define TYPE_WATER 0x0b +#define TYPE_GRASS 0x0c +#define TYPE_ELECTRIC 0x0d +#define TYPE_PSYCHIC 0x0e +#define TYPE_ICE 0x0f +#define TYPE_DRAGON 0x10 +#define TYPE_DARK 0x11 + struct PokemonSubstruct0 { u16 species; diff --git a/src/calculate_base_damage.c b/src/calculate_base_damage.c index 37fc15414..186fa062c 100644 --- a/src/calculate_base_damage.c +++ b/src/calculate_base_damage.c @@ -7,6 +7,9 @@ #include "sprite.h" #include "berry.h" #include "item.h" +#include "abilities.h" +#include "hold_effects.h" +#include "flag.h" extern u8 gPlayerPartyCount; extern struct Pokemon gPlayerParty[6]; @@ -21,7 +24,7 @@ extern struct BattlePokemon gBattleMons[4]; extern u16 gUnknown_02024BE6; extern u8 byte_2024C06; extern u8 gCritMultiplier; -extern u16 word_2024DB8; +extern u16 gBattleWeather; extern struct BattleEnigmaBerry gEnigmaBerries[]; extern u16 gBattleMovePower; extern struct SpriteTemplate gUnknown_02024E8C; @@ -47,7 +50,6 @@ extern u8 gStatStageRatios[]; extern u8 gHoldEffectToType[][2]; extern u8 battle_side_get_owner(u8); -extern u8 FlagGet(u16); extern u8 sub_8018324(u8, u8, u8, u8, u16); extern u8 sub_803C348(u8); @@ -108,14 +110,14 @@ s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *de defenderHoldEffectParam = ItemId_GetHoldEffectParam(defender->item); } - if (attacker->ability == 37 || attacker->ability == 74) + if (attacker->ability == ABILITY_HUGE_POWER || attacker->ability == ABILITY_PURE_POWER) attack *= 2; if (!(gUnknown_020239F8 & 0x902)) { if ((gUnknown_020239F8 & 8) && gTrainerBattleOpponent != 1024 - && FlagGet(2055) + && FlagGet(BADGE01_GET) && !battle_side_get_owner(a7)) attack = (110 * attack) / 100; @@ -123,7 +125,7 @@ s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *de { if ((gUnknown_020239F8 & 8) && gTrainerBattleOpponent != 1024 - && FlagGet(2059) + && FlagGet(BADGE05_GET) && !battle_side_get_owner(a8)) defense = (110 * defense) / 100; @@ -131,7 +133,7 @@ s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *de { if ((gUnknown_020239F8 & 8) && gTrainerBattleOpponent != 1024 - && FlagGet(2061) + && FlagGet(BADGE07_GET) && !battle_side_get_owner(a7)) spAttack = (110 * spAttack) / 100; @@ -139,7 +141,7 @@ s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *de { if ((gUnknown_020239F8 & 8) && gTrainerBattleOpponent != 1024 - && FlagGet(2061) + && FlagGet(BADGE07_GET) && !battle_side_get_owner(a8)) spDefense = (110 * spDefense) / 100; } @@ -160,45 +162,45 @@ s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *de } } - if (attackerHoldEffect == 29) + if (attackerHoldEffect == HOLD_EFFECT_CHOICE_BAND) attack = (150 * attack) / 100; - if (attackerHoldEffect == 34 && !(gUnknown_020239F8 & 0x100) && (attacker->species == SPECIES_LATIAS || attacker->species == SPECIES_LATIOS)) + if (attackerHoldEffect == HOLD_EFFECT_SOUL_DEW && !(gUnknown_020239F8 & 0x100) && (attacker->species == SPECIES_LATIAS || attacker->species == SPECIES_LATIOS)) spAttack = (150 * spAttack) / 100; - if (defenderHoldEffect == 34 && !(gUnknown_020239F8 & 0x100) && (defender->species == SPECIES_LATIAS || defender->species == SPECIES_LATIOS)) + if (defenderHoldEffect == HOLD_EFFECT_SOUL_DEW && !(gUnknown_020239F8 & 0x100) && (defender->species == SPECIES_LATIAS || defender->species == SPECIES_LATIOS)) spDefense = (150 * spDefense) / 100; - if (attackerHoldEffect == 35 && attacker->species == 373) + if (attackerHoldEffect == HOLD_EFFECT_DEEP_SEA_TOOTH && attacker->species == SPECIES_CLAMPERL) spAttack *= 2; - if (defenderHoldEffect == 36 && defender->species == 373) + if (defenderHoldEffect == HOLD_EFFECT_DEEP_SEA_SCALE && defender->species == SPECIES_CLAMPERL) spDefense *= 2; - if (attackerHoldEffect == 45 && attacker->species == 25) + if (attackerHoldEffect == HOLD_EFFECT_LIGHT_BALL && attacker->species == SPECIES_PIKACHU) spAttack *= 2; - if (defenderHoldEffect == 64 && defender->species == 132) + if (defenderHoldEffect == HOLD_EFFECT_METAL_POWDER && defender->species == SPECIES_DITTO) defense *= 2; - if (attackerHoldEffect == 65 && (attacker->species == SPECIES_CUBONE || attacker->species == SPECIES_MAROWAK)) + if (attackerHoldEffect == HOLD_EFFECT_THICK_CLUB && (attacker->species == SPECIES_CUBONE || attacker->species == SPECIES_MAROWAK)) attack *= 2; - if (defender->ability == 47 && (type == 10 || type == 15)) + if (defender->ability == ABILITY_THICK_FAT && (type == TYPE_FIRE || type == TYPE_ICE)) spAttack /= 2; - if (attacker->ability == 55) + if (attacker->ability == ABILITY_HUSTLE) attack = (150 * attack) / 100; - if (attacker->ability == 57 && sub_8018324(0xE, 0, 0x3A, 0, 0)) + if (attacker->ability == ABILITY_PLUS && sub_8018324(0xE, 0, ABILITY_MINUS, 0, 0)) spAttack = (150 * spAttack) / 100; - if (attacker->ability == 58 && sub_8018324(0xE, 0, 0x39, 0, 0)) + if (attacker->ability == ABILITY_MINUS && sub_8018324(0xE, 0, ABILITY_PLUS, 0, 0)) spAttack = (150 * spAttack) / 100; - if (attacker->ability == 62 && attacker->status1) + if (attacker->ability == ABILITY_GUTS && attacker->status1) attack = (150 * attack) / 100; - if (defender->ability == 63 && defender->status1) + if (defender->ability == ABILITY_MARVEL_SCALE && defender->status1) defense = (150 * defense) / 100; - if (type == 13 && sub_8018324(0xE, 0, 0, 0xFD, 0)) + if (type == TYPE_ELECTRIC && sub_8018324(0xE, 0, 0, 0xFD, 0)) gBattleMovePower /= 2; - if (type == 10 && sub_8018324(0xE, 0, 0, 0xFE, 0)) + if (type == TYPE_FIRE && sub_8018324(0xE, 0, 0, 0xFE, 0)) gBattleMovePower /= 2; - if (type == 12 && attacker->ability == 65 && attacker->hp <= (attacker->maxHP / 3)) + if (type == TYPE_GRASS && attacker->ability == ABILITY_OVERGROW && attacker->hp <= (attacker->maxHP / 3)) gBattleMovePower = (150 * gBattleMovePower) / 100; - if (type == 10 && attacker->ability == 66 && attacker->hp <= (attacker->maxHP / 3)) + if (type == TYPE_FIRE && attacker->ability == ABILITY_BLAZE && attacker->hp <= (attacker->maxHP / 3)) gBattleMovePower = (150 * gBattleMovePower) / 100; - if (type == 11 && attacker->ability == 67 && attacker->hp <= (attacker->maxHP / 3)) + if (type == TYPE_WATER && attacker->ability == ABILITY_TORRENT && attacker->hp <= (attacker->maxHP / 3)) gBattleMovePower = (150 * gBattleMovePower) / 100; - if (type == 6 && attacker->ability == 68 && attacker->hp <= (attacker->maxHP / 3)) + if (type == TYPE_BUG && attacker->ability == ABILITY_SWARM && attacker->hp <= (attacker->maxHP / 3)) gBattleMovePower = (150 * gBattleMovePower) / 100; if (gBattleMoves[gUnknown_02024BE6].effect == 7) defense /= 2; @@ -229,7 +231,7 @@ s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *de damage = (a / b) / 50; - if ((attacker->status1 & 0x10) && attacker->ability != 62) + if ((attacker->status1 & 0x10) && attacker->ability != ABILITY_GUTS) damage /= 2; if ((a4 & 1) && gCritMultiplier == 1) @@ -284,37 +286,37 @@ s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *de damage /= 2; } - if ((gUnknown_020239F8 & 1) && gBattleMoves[move].target == 8 && sub_803C348(2u) == 2) + if ((gUnknown_020239F8 & 1) && gBattleMoves[move].target == 8 && sub_803C348(2) == 2) damage /= 2; - if (!sub_8018324(0xE, 0, 0xD, 0, 0) && !sub_8018324(0xE, 0, 0x4D, 0, 0)) + if (!sub_8018324(0xE, 0, ABILITY_CLOUD_NINE, 0, 0) && !sub_8018324(0xE, 0, ABILITY_AIR_LOCK, 0, 0)) { - if (word_2024DB8 & 1) + if (gBattleWeather & 1) { - if (type == 10) + if (type == TYPE_FIRE) { damage /= 2; } - else if (type == 11) + else if (type == TYPE_WATER) { damage = (15 * damage) / 10; } } - if ((word_2024DB8 & 0x9F) && gUnknown_02024BE6 == 76) + if ((gBattleWeather & 0x9F) && gUnknown_02024BE6 == 76) damage /= 2; - if (word_2024DB8 & 0x60) + if (gBattleWeather & 0x60) { - if (type == 10) + if (type == TYPE_FIRE) { damage = (15 * damage) / 10; } - else if (type == 11) + else if (type == TYPE_WATER) { damage /= 2; } } } - if ((dword_2017100[a7] & 1) && type == 10) + if ((dword_2017100[a7] & 1) && type == TYPE_FIRE) damage = (15 * damage) / 10; } @@ -1381,7 +1383,7 @@ _0803C25C:\n\ lsls r0, 24\n\ cmp r0, 0\n\ bne _0803C30C\n\ - ldr r2, _0803C2AC @ =word_2024DB8\n\ + ldr r2, _0803C2AC @ =gBattleWeather\n\ ldrh r1, [r2]\n\ movs r0, 0x1\n\ ands r0, r1\n\ @@ -1397,7 +1399,7 @@ _0803C25C:\n\ .align 2, 0\n\ _0803C2A4: .4byte gUnknown_020239F8\n\ _0803C2A8: .4byte gBattleMoves\n\ -_0803C2AC: .4byte word_2024DB8\n\ +_0803C2AC: .4byte gBattleWeather\n\ _0803C2B0:\n\ lsrs r0, r5, 31\n\ adds r0, r5, r0\n\ diff --git a/src/pokemon_2.c b/src/pokemon_2.c index 251459571..2baf1155e 100644 --- a/src/pokemon_2.c +++ b/src/pokemon_2.c @@ -26,7 +26,7 @@ extern u8 gUnknown_02024C07; extern u8 gUnknown_02024C08; extern u8 gUnknown_02024C0C; extern u8 gXXX_CritRelated; -extern u16 word_2024DB8; +extern u16 gBattleWeather; extern struct BattleEnigmaBerry gEnigmaBerries[]; extern u16 gBattleMovePower; extern struct SpriteTemplate gUnknown_02024E8C; diff --git a/sym_ewram.txt b/sym_ewram.txt index b96fae641..d76fc1e13 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -246,7 +246,7 @@ gUnknown_02024D28: @ 2024D28 gUnknown_02024D68: @ 2024D68 .space 0x50 -word_2024DB8: @ 2024DB8 +gBattleWeather: @ 2024DB8 .space 0x4 gUnknown_02024DBC: @ 2024DBC |