diff --git a/asm/nonmatchings/code_08073E2C/sub_08073EE8.s b/asm/nonmatchings/code_08073E2C/sub_08073EE8.s deleted file mode 100644 index 6315d13c..00000000 --- a/asm/nonmatchings/code_08073E2C/sub_08073EE8.s +++ /dev/null @@ -1,309 +0,0 @@ - thumb_func_start sub_08073EE8 -sub_08073EE8: @ 0x08073EE8 - push {r4, r5, r6, r7, lr} - mov r7, sl - mov r6, r9 - mov r5, r8 - push {r5, r6, r7} - sub sp, #0xc - str r1, [sp, #4] - lsls r0, r0, #0x10 - lsrs r0, r0, #0x10 - str r0, [sp, #0] - bl sub_080020F4 - movs r1, #0xa6 - lsls r1, r1, #1 - muls r1, r0, r1 - ldr r0, _08074014 - adds r7, r1, r0 - ldr r0, _08074018 - mov sl, r0 - movs r1, #1 - negs r1, r1 - mov r8, r1 - bl sub_0800CF80 - cmp r0, #0 - bne _08073F1E - b _08074020 -_08073F1E: - bl sub_08002164 - mov r9, r0 - movs r6, #0 - cmp r6, r9 - bhs _08073FFA - movs r2, #0xa4 - lsls r2, r2, #1 - adds r2, r7, r2 - str r2, [sp, #8] -_08073F32: - movs r0, #0xa6 - lsls r0, r0, #1 - adds r1, r6, #0 - muls r1, r0, r1 - ldr r0, _08074014 - adds r2, r1, r0 - adds r0, r7, #0 - adds r0, #0x68 - adds r1, r2, #0 - adds r1, #0x68 - ldrb r0, [r0, #0] - ldrb r1, [r1, #0] - cmp r0, r1 - beq _08073FF4 - cmp r1, #0 - beq _08073FF4 - movs r3, #0xa4 - lsls r3, r3, #1 - adds r0, r2, r3 - ldr r2, [r0, #0] - ldrh r1, [r2, #0] - lsrs r1, r1, #4 - adds r0, r7, #0 - adds r0, #0x8c - ldr r0, [r0, #0] - asrs r0, r0, #8 - subs r5, r1, r0 - ldrh r1, [r2, #2] - lsls r1, r1, #0x14 - lsrs r1, r1, #0x14 - adds r0, r7, #0 - adds r0, #0x90 - ldr r0, [r0, #0] - asrs r0, r0, #8 - subs r4, r1, r0 - lsls r0, r5, #0x10 - asrs r0, r0, #0x10 - lsls r1, r4, #0x10 - asrs r1, r1, #0x10 - bl ArcTan2 - lsls r0, r0, #0x10 - lsrs r0, r0, #0x10 - movs r1, #0x80 - lsls r1, r1, #3 - adds r0, r0, r1 - ldr r2, _0807401C - ldr r3, [sp, #8] - ldr r1, [r3, #0] - ldrb r1, [r1, #3] - lsrs r1, r1, #4 - lsls r1, r1, #1 - adds r1, r1, r2 - ldrh r1, [r1, #0] - lsrs r0, r0, #0xc - subs r0, r0, r1 - lsls r0, r0, #0x10 - lsrs r2, r0, #0x10 - asrs r0, r0, #0x10 - cmp r0, #8 - ble _08073FB2 - subs r0, #0x10 - lsls r0, r0, #0x10 - lsrs r2, r0, #0x10 -_08073FB2: - lsls r0, r2, #0x10 - asrs r0, r0, #0x10 - movs r1, #8 - negs r1, r1 - cmp r0, r1 - bge _08073FC4 - adds r0, #0x10 - lsls r0, r0, #0x10 - lsrs r2, r0, #0x10 -_08073FC4: - lsls r0, r2, #0x10 - asrs r0, r0, #0x10 - cmp r0, #0 - bge _08073FCE - negs r0, r0 -_08073FCE: - ldr r2, [sp, #0] - cmp r0, r2 - bgt _08073FF4 - adds r0, r5, #0 - muls r0, r5, r0 - adds r1, r4, #0 - muls r1, r4, r1 - adds r0, r0, r1 - bl Sqrt - lsls r0, r0, #0x10 - lsrs r0, r0, #0x10 - ldr r3, [sp, #4] - cmp r3, r0 - bls _08073FF4 - cmp sl, r0 - bls _08073FF4 - mov sl, r0 - mov r8, r6 -_08073FF4: - adds r6, #1 - cmp r6, r9 - blo _08073F32 -_08073FFA: - movs r0, #1 - negs r0, r0 - cmp r8, r0 - beq _08074020 - movs r0, #0xa6 - lsls r0, r0, #1 - mov r1, r8 - muls r1, r0, r1 - ldr r0, _08074014 - adds r2, r1, r0 - ldrh r0, [r2, #0] - b _0807413A - .2byte 0x0000 -_08074014: .4byte gUnk_03003CE0 -_08074018: .4byte 0x0000FFFF -_0807401C: .4byte gUnk_0849E730 -_08074020: - ldr r0, _08074128 - mov sl, r0 - movs r1, #1 - negs r1, r1 - mov r8, r1 - movs r6, #0 - mov r9, r6 -_0807402E: - ldr r0, _0807412C - movs r1, #1 - lsls r1, r6 - ldr r0, [r0, #0] - ands r0, r1 - cmp r0, #0 - beq _080740FC - ldr r0, _08074130 - ldr r0, [r0, #0] - mov r3, r9 - adds r2, r0, r3 - ldrh r0, [r2, #0xc] - cmp r0, #0xb - beq _080740FC - adds r0, r2, #0 - adds r0, #0x5c - movs r1, #0 - ldrsh r0, [r0, r1] - cmp r0, #0 - beq _080740FC - movs r3, #0xee - lsls r3, r3, #1 - adds r0, r2, r3 - ldrb r0, [r0, #0] - cmp r0, #0 - beq _080740FC - adds r1, r7, #0 - adds r1, #0x8c - ldr r0, [r2, #0x14] - ldr r1, [r1, #0] - subs r0, r0, r1 - asrs r5, r0, #8 - adds r1, r7, #0 - adds r1, #0x90 - ldr r0, [r2, #0x18] - ldr r1, [r1, #0] - subs r0, r0, r1 - asrs r4, r0, #8 - lsls r0, r5, #0x10 - asrs r0, r0, #0x10 - lsls r1, r4, #0x10 - asrs r1, r1, #0x10 - bl ArcTan2 - lsls r0, r0, #0x10 - lsrs r0, r0, #0x10 - movs r1, #0x80 - lsls r1, r1, #3 - adds r0, r0, r1 - ldr r2, _08074134 - movs r3, #0xa4 - lsls r3, r3, #1 - adds r1, r7, r3 - ldr r1, [r1, #0] - ldrb r1, [r1, #3] - lsrs r1, r1, #4 - lsls r1, r1, #1 - adds r1, r1, r2 - ldrh r1, [r1, #0] - lsrs r0, r0, #0xc - subs r0, r0, r1 - lsls r0, r0, #0x10 - lsrs r2, r0, #0x10 - asrs r0, r0, #0x10 - cmp r0, #8 - ble _080740B8 - subs r0, #0x10 - lsls r0, r0, #0x10 - lsrs r2, r0, #0x10 -_080740B8: - lsls r0, r2, #0x10 - asrs r1, r0, #0x10 - movs r0, #8 - negs r0, r0 - cmp r1, r0 - bge _080740CC - adds r0, r1, #0 - adds r0, #0x10 - lsls r0, r0, #0x10 - lsrs r2, r0, #0x10 -_080740CC: - lsls r0, r2, #0x10 - asrs r0, r0, #0x10 - cmp r0, #0 - bge _080740D6 - negs r0, r0 -_080740D6: - ldr r1, [sp, #0] - cmp r0, r1 - bgt _080740FC - adds r0, r5, #0 - muls r0, r5, r0 - adds r1, r4, #0 - muls r1, r4, r1 - adds r0, r0, r1 - bl Sqrt - lsls r0, r0, #0x10 - lsrs r0, r0, #0x10 - ldr r2, [sp, #4] - cmp r2, r0 - bls _080740FC - cmp sl, r0 - bls _080740FC - mov sl, r0 - mov r8, r6 -_080740FC: - movs r3, #0xb8 - lsls r3, r3, #2 - add r9, r3 - adds r6, #1 - cmp r6, #4 - bls _0807402E - movs r0, #1 - negs r0, r0 - cmp r8, r0 - beq _08074138 - ldr r1, _08074130 - mov r2, r8 - lsls r0, r2, #1 - add r0, r8 - lsls r0, r0, #3 - subs r0, r0, r2 - lsls r0, r0, #5 - ldr r1, [r1, #0] - adds r2, r1, r0 - ldrh r0, [r2, #2] - b _0807413A - .2byte 0x0000 -_08074128: .4byte 0x0000FFFF -_0807412C: .4byte gUnk_030056FC -_08074130: .4byte gUnk_030056F4 -_08074134: .4byte gUnk_0849E730 -_08074138: - movs r0, #0xff -_0807413A: - add sp, #0xc - pop {r3, r4, r5} - mov r8, r3 - mov r9, r4 - mov sl, r5 - pop {r4, r5, r6, r7} - pop {r1} - bx r1 - thumb_func_end sub_08073EE8 diff --git a/asm/nonmatchings/code_08073E2C/sub_0807414C.s b/asm/nonmatchings/code_08073E2C/sub_0807414C.s deleted file mode 100644 index 660a1d3d..00000000 --- a/asm/nonmatchings/code_08073E2C/sub_0807414C.s +++ /dev/null @@ -1,297 +0,0 @@ - thumb_func_start sub_0807414C -sub_0807414C: @ 0x0807414C - push {r4, r5, r6, r7, lr} - mov r7, sl - mov r6, r9 - mov r5, r8 - push {r5, r6, r7} - sub sp, #0xc - mov r8, r0 - str r2, [sp, #4] - lsls r1, r1, #0x10 - lsrs r1, r1, #0x10 - str r1, [sp, #0] - ldr r0, _08074260 - str r0, [sp, #8] - movs r1, #1 - negs r1, r1 - mov r9, r1 - bl sub_0800CF80 - cmp r0, #0 - beq _0807426C - bl sub_08002164 - mov sl, r0 - movs r6, #0 - cmp r6, sl - bhs _08074246 - movs r7, #0xa4 - lsls r7, r7, #1 - add r7, r8 -_08074186: - movs r0, #0xa6 - lsls r0, r0, #1 - adds r1, r6, #0 - muls r1, r0, r1 - ldr r0, _08074264 - adds r2, r1, r0 - mov r0, r8 - adds r0, #0x68 - adds r1, r2, #0 - adds r1, #0x68 - ldrb r0, [r0, #0] - ldrb r1, [r1, #0] - cmp r0, r1 - beq _08074240 - cmp r1, #0 - beq _08074240 - movs r1, #0xa4 - lsls r1, r1, #1 - adds r0, r2, r1 - ldr r2, [r0, #0] - ldrh r1, [r2, #0] - lsrs r1, r1, #4 - ldr r3, [r7, #0] - ldrh r0, [r3, #0] - lsrs r0, r0, #4 - subs r5, r1, r0 - ldrh r1, [r2, #2] - lsls r1, r1, #0x14 - lsrs r1, r1, #0x14 - ldrh r0, [r3, #2] - lsls r0, r0, #0x14 - lsrs r0, r0, #0x14 - subs r4, r1, r0 - adds r0, r5, #0 - adds r1, r4, #0 - bl ArcTan2 - lsls r0, r0, #0x10 - lsrs r0, r0, #0x10 - movs r2, #0x80 - lsls r2, r2, #3 - adds r0, r0, r2 - ldr r2, _08074268 - ldr r1, [r7, #0] - ldrb r1, [r1, #3] - lsrs r1, r1, #4 - lsls r1, r1, #1 - adds r1, r1, r2 - ldrh r1, [r1, #0] - lsrs r0, r0, #0xc - subs r0, r0, r1 - lsls r0, r0, #0x10 - lsrs r2, r0, #0x10 - asrs r0, r0, #0x10 - cmp r0, #8 - ble _080741FC - subs r0, #0x10 - lsls r0, r0, #0x10 - lsrs r2, r0, #0x10 -_080741FC: - lsls r0, r2, #0x10 - asrs r0, r0, #0x10 - movs r1, #8 - negs r1, r1 - cmp r0, r1 - bge _0807420E - adds r0, #0x10 - lsls r0, r0, #0x10 - lsrs r2, r0, #0x10 -_0807420E: - lsls r0, r2, #0x10 - asrs r0, r0, #0x10 - cmp r0, #0 - bge _08074218 - negs r0, r0 -_08074218: - ldr r2, [sp, #0] - cmp r0, r2 - bgt _08074240 - adds r0, r5, #0 - muls r0, r5, r0 - adds r1, r4, #0 - muls r1, r4, r1 - adds r0, r0, r1 - bl Sqrt - lsls r0, r0, #0x10 - lsrs r0, r0, #0x10 - ldr r1, [sp, #4] - cmp r1, r0 - bls _08074240 - ldr r2, [sp, #8] - cmp r2, r0 - bls _08074240 - str r0, [sp, #8] - mov r9, r6 -_08074240: - adds r6, #1 - cmp r6, sl - blo _08074186 -_08074246: - movs r0, #1 - negs r0, r0 - cmp r9, r0 - beq _0807426C - movs r0, #0xa6 - lsls r0, r0, #1 - mov r1, r9 - muls r1, r0, r1 - ldr r0, _08074264 - adds r2, r1, r0 - ldrh r0, [r2, #0] - b _08074386 - .2byte 0x0000 -_08074260: .4byte 0x0000FFFF -_08074264: .4byte gUnk_03003CE0 -_08074268: .4byte gUnk_0849E730 -_0807426C: - ldr r0, _08074374 - str r0, [sp, #8] - movs r1, #1 - negs r1, r1 - mov r9, r1 - movs r6, #0 - movs r7, #0xa4 - lsls r7, r7, #1 - add r7, r8 - mov r8, r6 -_08074280: - ldr r0, _08074378 - movs r1, #1 - lsls r1, r6 - ldr r0, [r0, #0] - ands r0, r1 - cmp r0, #0 - beq _0807434A - ldr r0, _0807437C - ldr r0, [r0, #0] - mov r2, r8 - adds r3, r0, r2 - ldrh r0, [r3, #0xc] - cmp r0, #0xb - beq _0807434A - adds r0, r3, #0 - adds r0, #0x5c - movs r1, #0 - ldrsh r0, [r0, r1] - cmp r0, #0 - beq _0807434A - movs r2, #0xee - lsls r2, r2, #1 - adds r0, r3, r2 - ldrb r0, [r0, #0] - cmp r0, #0 - beq _0807434A - ldr r1, [r3, #0x14] - asrs r1, r1, #8 - ldr r2, [r7, #0] - ldrh r0, [r2, #0] - lsrs r0, r0, #4 - subs r5, r1, r0 - ldr r1, [r3, #0x18] - asrs r1, r1, #8 - ldrh r0, [r2, #2] - lsls r0, r0, #0x14 - lsrs r0, r0, #0x14 - subs r4, r1, r0 - lsls r0, r5, #0x10 - asrs r0, r0, #0x10 - lsls r1, r4, #0x10 - asrs r1, r1, #0x10 - bl ArcTan2 - lsls r0, r0, #0x10 - lsrs r0, r0, #0x10 - movs r1, #0x80 - lsls r1, r1, #3 - adds r0, r0, r1 - ldr r2, _08074380 - ldr r1, [r7, #0] - ldrb r1, [r1, #3] - lsrs r1, r1, #4 - lsls r1, r1, #1 - adds r1, r1, r2 - ldrh r1, [r1, #0] - lsrs r0, r0, #0xc - subs r0, r0, r1 - lsls r0, r0, #0x10 - lsrs r2, r0, #0x10 - asrs r0, r0, #0x10 - cmp r0, #8 - ble _08074304 - subs r0, #0x10 - lsls r0, r0, #0x10 - lsrs r2, r0, #0x10 -_08074304: - lsls r0, r2, #0x10 - asrs r1, r0, #0x10 - movs r0, #8 - negs r0, r0 - cmp r1, r0 - bge _08074318 - adds r0, r1, #0 - adds r0, #0x10 - lsls r0, r0, #0x10 - lsrs r2, r0, #0x10 -_08074318: - lsls r0, r2, #0x10 - asrs r0, r0, #0x10 - cmp r0, #0 - bge _08074322 - negs r0, r0 -_08074322: - ldr r2, [sp, #0] - cmp r0, r2 - bgt _0807434A - adds r0, r5, #0 - muls r0, r5, r0 - adds r1, r4, #0 - muls r1, r4, r1 - adds r0, r0, r1 - bl Sqrt - lsls r0, r0, #0x10 - lsrs r0, r0, #0x10 - ldr r1, [sp, #4] - cmp r1, r0 - bls _0807434A - ldr r2, [sp, #8] - cmp r2, r0 - bls _0807434A - str r0, [sp, #8] - mov r9, r6 -_0807434A: - movs r0, #0xb8 - lsls r0, r0, #2 - add r8, r0 - adds r6, #1 - cmp r6, #4 - bls _08074280 - movs r0, #1 - negs r0, r0 - cmp r9, r0 - beq _08074384 - ldr r1, _0807437C - mov r2, r9 - lsls r0, r2, #1 - add r0, r9 - lsls r0, r0, #3 - subs r0, r0, r2 - lsls r0, r0, #5 - ldr r1, [r1, #0] - adds r3, r1, r0 - ldrh r0, [r3, #2] - b _08074386 -_08074374: .4byte 0x0000FFFF -_08074378: .4byte gUnk_030056FC -_0807437C: .4byte gUnk_030056F4 -_08074380: .4byte gUnk_0849E730 -_08074384: - movs r0, #0xff -_08074386: - add sp, #0xc - pop {r3, r4, r5} - mov r8, r3 - mov r9, r4 - mov sl, r5 - pop {r4, r5, r6, r7} - pop {r1} - bx r1 - thumb_func_end sub_0807414C diff --git a/src/code_08073E2C.c b/src/code_08073E2C.c index b7ccd2f8..5babfad2 100644 --- a/src/code_08073E2C.c +++ b/src/code_08073E2C.c @@ -54,7 +54,6 @@ void sub_08073E2C_v(u32 a, u32 b, u32 c, u32 d) sub_08000274_2(t, gInfo3E2C + off); gMask3E2C |= 1 << i; } -#ifdef NONMATCHING struct Pos076EE8 { u16 x; u16 y; }; struct Ply076EE8 { u16 f0; u8 pad2[0x66]; u8 team; u8 pad69[0x23]; s32 x; s32 y; u8 pad94[0xB4]; struct Pos076EE8 *pos; }; struct Ene076EE8 { u8 pad0[2]; u16 f2; u8 pad4[8]; u16 state; u8 padE[6]; s32 x; s32 y; u8 pad1C[0x40]; s16 hp; u8 pad5E[0x17E]; u8 alive; u8 pad1DD[0x103]; }; @@ -102,17 +101,30 @@ u16 sub_08073EE8(u16 width, s32 range) dx = (cand->pos->x >> 4) - (player->x >> 8); dy = ((u32)(cand->pos->y << 20) >> 20) - (player->y >> 8); d = diffEE8(angEE8(dx, dy), dirEE8(&player->pos)); - if (d <= width) { - dist = Sqrt(dx * dx + dy * dy); - if ((u32)range > dist && best > dist) { - best = dist; - nearest = i; - } + { + /* The ROM reloads the spilled limits into r2/r3 here. */ + register u32 w asm("r2") = width; + asm("" : "+r"(w)); + if (d > (s32)w) + continue; + } + dist = Sqrt(dx * dx + dy * dy); + { + register u32 rg asm("r3") = range; + asm("" : "+r"(rg)); + if (rg <= dist) + continue; + } + if (best > dist) { + best = dist; + nearest = i; } } } - if (nearest != -1) - return players076EE8[nearest].f0; + if (nearest != -1) { + cand = &players076EE8[nearest]; + return cand->f0; + } } best = 0xFFFF; nearest = -1; @@ -142,10 +154,6 @@ u16 sub_08073EE8(u16 width, s32 range) e = &enemies076EE8[nearest]; return e->f2; } -#else -INCLUDE_ASM("asm/nonmatchings/code_08073E2C", sub_08073EE8); -#endif -#ifdef NONMATCHING extern struct Ply076EE8 players07614C[] asm("gUnk_03003CE0"); extern struct Ene076EE8 *enemies07614C asm("gUnk_030056F4"); extern u32 active07614C asm("gUnk_030056FC"); @@ -182,17 +190,32 @@ s32 sub_0807414C(struct Ply076EE8 *player, u16 width, u32 range) dx = (cand->pos->x >> 4) - (player->pos->x >> 4); dy = ((u32)(cand->pos->y << 20) >> 20) - ((u32)(player->pos->y << 20) >> 20); d = diffB414C(ang414C(dx, dy), dir414C(&player->pos)); - if (d <= width) { - dist = Sqrt(dx * dx + dy * dy); - if (range > dist && best > dist) { - best = dist; - nearest = i; - } + { + /* The ROM reloads the spilled limits into r2/r1/r2 here. */ + register u32 w asm("r2") = width; + asm("" : "+r"(w)); + if (d > (s32)w) + continue; } + dist = Sqrt(dx * dx + dy * dy); + { + register u32 rg asm("r1") = range; + if (rg <= dist) + continue; + } + { + register u32 b asm("r2") = best; + if (b <= dist) + continue; + } + best = dist; + nearest = i; } } - if (nearest != -1) - return players07614C[nearest].f0; + if (nearest != -1) { + cand = &players07614C[nearest]; + return cand->f0; + } } best = 0xFFFF; nearest = -1; @@ -220,9 +243,6 @@ s32 sub_0807414C(struct Ply076EE8 *player, u16 width, u32 range) e = &enemies07614C[nearest]; return e->f2; } -#else -INCLUDE_ASM("asm/nonmatchings/code_08073E2C", sub_0807414C); -#endif struct Position076398 {u16 x,y;}; struct Player076398 {u16 id;u8 pad2[0x66];u8 team;u8 pad69[0xDF];struct Position076398 *position;}; extern struct Player076398 players076398[] asm("gUnk_03003CE0");