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
|
#include "global.h"
#include "asm.h"
typedef struct BardSound {
u8 pad_00[48];
} BardSound;
typedef struct UnkBard {
/* 0x00 */ u8 var00;
/* 0x01 */ s8 var01;
/* 0x02 */ u16 var02;
/* 0x04 */ u16 var04;
/* 0x06 */ u16 var06;
} UnkBard;
typedef struct UnkBard3 {
/* 0x00 */ u16 var00;
/* 0x02 */ u16 var02;
/* 0x04 */ s16 var04;
/* 0x06 */ u16 var06;
} UnkBard3;
typedef struct UnkBard2 {
/* 0x00 */ u8 var00;
/* 0x01 */ u8 var01;
/* 0x02 */ u8 var02;
/* 0x03 */ u8 var03;
/* 0x04 */ u16 var04;
u8 pad06[4];
/* 0x0A */ u16 var0A;
u8 pad0C[12];
/* 0x18 */ UnkBard3 var18[6];
} UnkBard2;
extern BardSound *gBardMusicTable[];
extern s16 *gUnknown_08417068[];
extern u32 gUnknown_084170F4[];
s16 sub_814A2B8(u32 arg0, u32 arg1) {
return gUnknown_08417068[arg0][arg1];
}
BardSound *sub_814A2D0(u16 arg0, u16 arg1) {
BardSound *sounds;
sounds = gBardMusicTable[arg0];
return &sounds[arg1];
}
#ifdef NONMATCHING
int sub_814A2EC(UnkBard2 *dest, UnkBard *src, u16 arg2) {
int i;
int n;
for (i = 0; i < 6; i++) {
s8 var01;
dest->var18[i].var00 = src[i].var00;
if (src[i].var00 == 0xFF) {
continue;
}
var01 = src[i].var01;
dest->var18[i].var02 = var01 + gUnknown_084170F4[src[i].var00];
dest->var18[i].var06 = src[i].var04;
dest->var04 += 1;
}
i = 6;
for (n = 0; n < i; n++) {
dest->var18[n].var04 = sub_814A2B8(30 + arg2, n);
}
dest->var00 += 1;
dest->var01 = 0;
dest->var02 = 0;
dest->var03 = 0;
dest->var0A = 0;
}
#else
__attribute__((naked))
void sub_814A2EC(void) {
asm(".syntax unified\n\
push {r4-r7,lr}\n\
mov r7, r9\n\
mov r6, r8\n\
push {r6,r7}\n\
adds r6, r0, 0\n\
lsls r2, 16\n\
lsrs r2, 16\n\
mov r9, r2\n\
ldr r4, _0814A370 @ =gUnknown_084170F4\n\
adds r2, r1, 0\n\
adds r3, r6, 0\n\
adds r3, 0x18\n\
movs r7, 0x5\n\
_0814A306:\n\
ldrb r0, [r2]\n\
strh r0, [r3]\n\
ldrb r0, [r2]\n\
cmp r0, 0xFF\n\
beq _0814A328\n\
movs r1, 0x1\n\
ldrsb r1, [r2, r1]\n\
lsls r0, 2\n\
adds r0, r4\n\
ldr r0, [r0]\n\
adds r1, r0\n\
strh r1, [r3, 0x2]\n\
ldrh r0, [r2, 0x4]\n\
strh r0, [r3, 0x6]\n\
ldrh r0, [r6, 0x4]\n\
adds r0, r1\n\
strh r0, [r6, 0x4]\n\
_0814A328:\n\
adds r2, 0x8\n\
adds r3, 0x8\n\
subs r7, 0x1\n\
cmp r7, 0\n\
bge _0814A306\n\
movs r7, 0x6\n\
movs r5, 0\n\
movs r0, 0x1E\n\
mov r8, r0\n\
adds r4, r6, 0\n\
_0814A33C:\n\
mov r0, r8\n\
add r0, r9\n\
adds r1, r5, 0\n\
bl sub_814A2B8\n\
adds r1, r0, 0\n\
strh r1, [r4, 0x1C]\n\
adds r4, 0x8\n\
adds r5, 0x1\n\
cmp r5, r7\n\
blt _0814A33C\n\
ldrb r1, [r6]\n\
adds r1, 0x1\n\
movs r2, 0\n\
strb r1, [r6]\n\
strb r2, [r6, 0x1]\n\
strb r2, [r6, 0x2]\n\
strb r2, [r6, 0x3]\n\
strh r2, [r6, 0xA]\n\
pop {r3,r4}\n\
mov r8, r3\n\
mov r9, r4\n\
pop {r4-r7}\n\
pop {r1}\n\
bx r1\n\
.align 2, 0\n\
_0814A370: .4byte gUnknown_084170F4\n\
.syntax divided\n");
}
#endif
|