-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathunhidden-power.asm
executable file
·152 lines (116 loc) · 3.58 KB
/
unhidden-power.asm
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
.include "config.s"
.include "labels.s"
.include "constants.s"
// -----------------------------------------------------------------------------
.gba
.thumb
.open input_rom, output_rom, 0x08000000
// -----------------------------------------------------------------------------
.org free_space
.align 2
MoveSelectionDisplayMoveType_hook:
@@main: // r1 := move_id
push {r3-r7}
mov r7, lr
lsl r0, r1, #2
lsl r1, r1, #3
add r0, r1 // r0 := sizeof(move_t) * move_id
ldr r1, =gBattleMovesPtr
ldr r1, [r1]
add r1, r0 // [r1] := data for current move
ldrb r0, [r1, #2] // r0 := recorded type
ldrb r2, [r1, #0] // r2 := move effect id
cmp r2, #EFFECT_HIDDEN_POWER
bne @@return
ldrb r0, [r5] // r0 := slot
lsl r0, #1 // r0 := slot << 1
ldr r1, =gBattlerPartyIndexes
add r0, r1
ldrb r0, [r0] // r0 := index in party
mov r1, #100
mul r0, r1 // r0 := offset from gPlayerParty
ldr r1, =gPlayerParty
add r0, r1 // [r0] := pokemon
bl hp_type_decode
@@return:
mov lr, r7
pop {r3-r7}
ldr r1, =MoveSelectionDisplayMoveType_hook_return |1
bx r1
// -----------------------------------------------------------------------------
sub_81367E8_hook:
@@main: // r2, r5 := move_id, moves
push {r0, r3-r7}
mov r7, lr
lsl r0, r2, #2
lsl r1, r2, #3
add r0, r1 // r0 := 12 * move_id
add r0, r5 // [r0] := data for current move
ldrb r1, [r0, #2] // r1 := type
ldrb r2, [r0, #0] // r2 := effect_id
cmp r2, #EFFECT_HIDDEN_POWER
bne @@return
ldr r0, =sMonSummaryScreen
ldr r0, [r0]
ldr r1, =0x3290
add r0, r1 // [r0] := pokemon
bl hp_type_decode
mov r1, r0
@@return:
mov lr, r7
pop {r0, r3-r7}
ldr r2, =sub_81367E8_hook_return |1
bx r2
// -----------------------------------------------------------------------------
// u8 hp_type_decode(struct Pokemon *)
hp_type_decode:
@@main:
push {r4-r7, lr}
mov r6, r0 // [r6] := pokemon
mov r4, #0 // r4 := type calculation
mov r7, #0 // r7 := iv index
ldr r5, =GetMonData |1
@@loop:
mov r0, r6 // [r0] := pokemon
mov r1, #0x27 // GET_HP_IV
add r1, r7
bl @@call
mov r1, #1
and r0, r1 // r0 := LSB of IV
lsl r0, r7
orr r4, r0
add r7, #1
@@test:
cmp r7, #6
bne @@loop
@@floor:
mov r0, #15
mul r0, r4
mov r1, #63
swi #0x6
@@decode: // add 2 if below 8, 1 otherwise
cmp r0, #8
blo @@L1
add r0, #1
@@L1:
add r0, #1
pop {r4-r7, pc}
@@call:
bx r5
.pool
// -----------------------------------------------------------------------------
.org 0x08030984
ldr r0, =MoveSelectionDisplayMoveType_hook |1
bx r0
.pool
.org 0x081368CC
ldr r1, =sub_81367E8_hook |1
bx r1
.pool
// -----------------------------------------------------------------------------
.if change_hp_static_type
.org readu32(input_rom, gBattleMovesPtr & 0x1FFFFFF) + 0xED * 12 +2
.byte 0x9
.endif
// -----------------------------------------------------------------------------
.close