Skip to content

Commit 66bf9d7

Browse files
johnwinstonclaude
andcommitted
gm_gm_16F1: decompile fn_8016F870
100% instruction byte match (78/78). Data relocation symbol differs (lbl_803D5648 vs ...data.0) due to split-tool vs MWCC anchor naming - both resolve to same address. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 5ab0122 commit 66bf9d7

2 files changed

Lines changed: 55 additions & 2 deletions

File tree

src/melee/gm/gm_16F1.c

Lines changed: 54 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,60 @@ void fn_8016F344(struct lbl_8046B6A0_24C_t* arg0)
152152

153153
/// #fn_8016F740
154154

155-
/// #fn_8016F870
155+
int fn_8016F870(void* arg0, u16 arg1, u8 mask, u8 player_id)
156+
{
157+
struct lbl_803D5A4C_t* curr;
158+
int kind;
159+
u8 flags;
160+
int i;
161+
162+
if (arg1 > 0x101 || arg1 == 0) {
163+
return -1;
164+
}
165+
166+
for (i = arg1 - 1; i >= 0; i--) {
167+
kind = lbl_803D5A4C[i].kind;
168+
169+
if (kind < 0xD7) {
170+
curr = lbl_803D5A4C;
171+
while (curr->kind != i) {
172+
if (curr->kind == 0x29A) {
173+
flags = 0;
174+
goto check1;
175+
}
176+
curr++;
177+
}
178+
flags = curr->x4;
179+
180+
check1:
181+
if ((u8) mask & flags) {
182+
if (pl_80039418(player_id, i) != 0) {
183+
return i;
184+
}
185+
}
186+
} else {
187+
curr = lbl_803D5A4C;
188+
while (curr->kind != i) {
189+
if (curr->kind == 0x29A) {
190+
flags = 0;
191+
goto check2;
192+
}
193+
curr++;
194+
}
195+
flags = curr->x4;
196+
197+
check2:
198+
if ((u8) mask & flags) {
199+
if ((unsigned) fn_801701C0(arg0, player_id, i) != 0) {
200+
return i;
201+
}
202+
}
203+
}
204+
}
205+
206+
return -1;
207+
PAD_STACK(8);
208+
}
156209

157210
/// #fn_8016F9A8
158211

src/melee/gm/gm_16F1.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ struct lbl_804D65A8_t;
2424
/* 16F39C */ UNK_RET fn_8016F39C(UNK_PARAMS);
2525
/* 16F548 */ UNK_RET fn_8016F548(UNK_PARAMS);
2626
/* 16F740 */ UNK_RET fn_8016F740(UNK_PARAMS);
27-
/* 16F870 */ UNK_RET fn_8016F870(UNK_PARAMS);
27+
/* 16F870 */ int fn_8016F870(void*, u16, u8, u8);
2828
/* 16F9A8 */ UNK_RET fn_8016F9A8(UNK_PARAMS);
2929
/* 16FAD4 */ int fn_8016FAD4(UNK_T, u16, int, u8);
3030
/* 16FFD4 */ void fn_8016FFD4(struct lbl_8046B6A0_24C_t*, int, int);

0 commit comments

Comments
 (0)