diff --git a/asm/non_matching/engine/sub_800724C.inc b/asm/non_matching/engine/sub_800724C.inc deleted file mode 100644 index 7281f4c54e..0000000000 --- a/asm/non_matching/engine/sub_800724C.inc +++ /dev/null @@ -1,473 +0,0 @@ -.syntax unified -.text - push {r4, r5, r6, r7, lr} - mov r7, sl - mov r6, sb - mov r5, r8 - push {r5, r6, r7} - sub sp, #0x20 - mov sl, r1 @ sl = param1 - lsls r0, r0, #0x18 - lsrs r7, r0, #0x18 @ r7 = bg - add r6, sp, #4 @ r6 = sp04 - ldr r1, _080072A8 @ =gUnknown_080984F4 - adds r0, r6, #0 - movs r2, #4 - bl memcpy - add r5, sp, #0xc - adds r0, r5, #0 - movs r1, #0 - movs r2, #4 - bl memset - add r4, sp, #0x10 - adds r0, r4, #0 - movs r1, #0 - movs r2, #4 - bl memset - ldr r1, _080072AC @ =gFlags - ldr r0, [r1] - movs r2, #4 - orrs r0, r2 - str r0, [r1] - mov r8, r6 @ r8 = r6 = sp08 - cmp r7, #1 - bls _080072C4 - ldr r1, _080072B0 @ =gHBlankCopySize - strb r2, [r1] - movs r0, #1 - ands r0, r7 - cmp r0, #0 - beq _080072B8 - ldr r0, _080072B4 @ =gBgOffsetsHBlank - ldr r0, [r0] - adds r5, r0, #2 - b _080072EC - .align 2, 0 -_080072A8: .4byte gUnknown_080984F4 -_080072AC: .4byte gFlags -_080072B0: .4byte gHBlankCopySize -_080072B4: .4byte gBgOffsetsHBlank -_080072B8: - ldr r0, _080072C0 @ =gBgOffsetsHBlank - ldr r5, [r0] - b _080072EC - .align 2, 0 -_080072C0: .4byte gBgOffsetsHBlank -_080072C4: - ldr r1, _080072DC @ =gHBlankCopySize - movs r0, #2 - strb r0, [r1] - ldr r0, _080072E0 @ =gBgOffsetsHBlank - ldr r5, [r0] - movs r0, #1 - ands r0, r7 - cmp r0, #0 - beq _080072EC - ldr r1, _080072E4 @ =gHBlankCopyTarget - ldr r0, _080072E8 @ =0x04000042 - b _080072F0 - .align 2, 0 -_080072DC: .4byte gHBlankCopySize -_080072E0: .4byte gBgOffsetsHBlank -_080072E4: .4byte gHBlankCopyTarget -_080072E8: .4byte 0x04000042 -_080072EC: - ldr r1, _08007400 @ =gHBlankCopyTarget - ldr r0, _08007404 @ =0x04000040 -_080072F0: - str r0, [r1] - mov r1, sl @ r1 = sl = param1 - ldrb r0, [r1, #5] - ldrb r2, [r1, #1] - adds r7, r2, #0 - adds r1, r0, #0 - cmp r0, r7 - bls _08007302 - adds r0, r2, #0 -_08007302: - adds r4, r0, #0 - lsls r0, r1, #0x18 - lsrs r0, r0, #0x18 - mov sb, r0 - cmp sb, r7 - bhs _08007310 - adds r1, r2, #0 -_08007310: - lsls r0, r1, #0x18 - lsrs r0, r0, #0x18 - str r0, [sp, #0x18] - ldr r2, _08007408 @ =gHBlankCopySize - ldrb r0, [r2] - muls r0, r4, r0 - adds r5, r5, r0 - mov r2, sp - mov r3, sl @ r3 = sl = param1 - ldrb r0, [r3, #2] - ldrb r1, [r3] - subs r0, r0, r1 - strh r0, [r2] - mov r3, r8 @ r3 = r8 = &sp[1] - mov r6, sl @ r6 = sl = param1 - ldrb r0, [r6, #3] - ldrb r1, [r6, #1] - subs r0, r0, r1 - strh r0, [r3] - mov r0, sp - movs r1, #0 - ldrsh r0, [r0, r1] - cmp r0, #0 - bge _08007342 - rsbs r0, r0, #0 -_08007342: - lsls r0, r0, #1 - mov r2, sp - strh r0, [r2, #0xc] - movs r6, #0 - ldrsh r0, [r3, r6] - cmp r0, #0 - bge _08007352 - rsbs r0, r0, #0 -_08007352: - lsls r0, r0, #1 - mov r1, sp - strh r0, [r1, #0x10] - mov r2, sp - mov r6, sl @ r6 = sl = param1 - ldrb r0, [r6, #6] - ldrb r1, [r6, #4] - subs r0, r0, r1 - strh r0, [r2, #2] - ldrb r0, [r6, #7] - ldrb r1, [r6, #5] - subs r0, r0, r1 - strh r0, [r3, #2] - mov r0, sp - movs r1, #2 - ldrsh r0, [r0, r1] - cmp r0, #0 - bge _08007378 - rsbs r0, r0, #0 -_08007378: - lsls r0, r0, #1 - mov r2, sp - strh r0, [r2, #0xe] - movs r6, #2 - ldrsh r0, [r3, r6] - cmp r0, #0 - bge _08007388 - rsbs r0, r0, #0 -_08007388: - lsls r0, r0, #1 - mov r1, sp - strh r0, [r1, #0x12] - add r2, sp, #0x14 - mov r3, sl @ r3 = sl = param1 - ldrb r0, [r3] - strb r0, [r2] - ldrb r0, [r3, #4] - strb r0, [r2, #1] - add r1, sp, #8 - mov r6, r8 - ldrh r0, [r6] - rsbs r0, r0, #0 - strh r0, [r1] - ldrh r0, [r6, #2] - rsbs r0, r0, #0 - strh r0, [r1, #2] - mov r8, r2 @ r8 = sp14 - mov ip, r1 @ ip = r1 = sp08 - ldr r0, [sp, #0x18] - cmp r4, r0 - bne _080073B6 - b _080074C8 -_080073B6: - cmp r7, sb - bhs _08007448 - cmp r4, r0 - blo _080073C0 - b _080074C8 -_080073C0: - movs r0, #0xf0 - strb r0, [r5] - mov r1, r8 - ldrb r0, [r1] - strb r0, [r5, #1] - add r2, sp, #8 - mov r3, sp - ldrh r0, [r3, #0xc] - ldrh r6, [r2] - adds r0, r0, r6 - strh r0, [r2] - lsls r0, r0, #0x10 - adds r4, #1 - mov sb, r4 - cmp r0, #0 - blt _08007430 - mov r3, r8 - add r4, sp, #0x10 - mov r6, ip @ r6 = ip = sp08 -_080073E6: - mov r0, sp - movs r7, #0 - ldrsh r0, [r0, r7] - cmp r0, #0 - ble _0800740C - ldrb r0, [r3] - adds r0, #1 - strb r0, [r3] - ldrh r0, [r2] - ldrh r1, [r4] - subs r0, r0, r1 - strh r0, [r2] - b _08007426 - .align 2, 0 -_08007400: .4byte gHBlankCopyTarget -_08007404: .4byte 0x04000040 -_08007408: .4byte gHBlankCopySize -_0800740C: - ldrb r0, [r3] - subs r0, #1 - strb r0, [r3] - ldrh r0, [r6] - ldrh r1, [r4] - subs r0, r0, r1 - strh r0, [r6] - lsls r0, r0, #0x10 - cmp r0, #0 - blt _08007426 - mov r1, r8 @ r1 = r8 = sp14 - ldrb r0, [r1] - strb r0, [r5, #1] -_08007426: - mov r2, ip - movs r7, #0 - ldrsh r0, [r2, r7] - cmp r0, #0 - bge _080073E6 -_08007430: - ldr r1, _08007444 @ =gHBlankCopySize - ldrb r0, [r1] - adds r5, r5, r0 - mov r2, sb - lsls r0, r2, #0x18 - lsrs r4, r0, #0x18 - ldr r3, [sp, #0x18] - cmp r4, r3 - blo _080073C0 - b _080074C8 - .align 2, 0 -_08007444: .4byte gHBlankCopySize -_08007448: - ldr r6, [sp, #0x18] - cmp r4, r6 - bhs _080074C8 - mov r7, ip @ r7 = ip = sp08 -_08007450: - mov r1, r8 - ldrb r0, [r1, #1] - strb r0, [r5] - movs r0, #0 - strb r0, [r5, #1] - adds r2, r7, #0 - ldrh r1, [r2, #2] - mov r3, sp - ldrh r0, [r3, #0xe] - adds r1, r1, r0 - strh r1, [r2, #2] - lsls r1, r1, #0x10 - adds r4, #1 - mov sb, r4 - cmp r1, #0 - blt _080074B6 - mov r3, r8 - add r4, sp, #0x10 - mov r6, ip -_08007476: - mov r0, sp - ldrh r0, [r0, #2] - lsls r0, r0, #0x10 - cmp r0, #0 - ble _0800749E - ldrb r0, [r3, #1] - adds r0, #1 - strb r0, [r3, #1] - ldrh r0, [r2, #2] - ldrh r1, [r4, #2] - subs r0, r0, r1 - strh r0, [r2, #2] - lsls r0, r0, #0x10 - cmp r0, #0 - blt _080074AC - mov r1, r8 - ldrb r0, [r1, #1] - adds r0, #1 - strb r0, [r5] - b _080074AC -_0800749E: - ldrb r0, [r3, #1] - subs r0, #1 - strb r0, [r3, #1] - ldrh r0, [r6, #2] - ldrh r1, [r4, #2] - subs r0, r0, r1 - strh r0, [r6, #2] -_080074AC: - mov r2, ip - ldrh r0, [r2, #2] - lsls r0, r0, #0x10 - cmp r0, #0 - bge _08007476 -_080074B6: - ldr r2, _0800752C @ =gHBlankCopySize - ldrb r0, [r2] - adds r5, r5, r0 - mov r3, sb - lsls r0, r3, #0x18 - lsrs r4, r0, #0x18 - ldr r6, [sp, #0x18] - cmp r4, r6 - blo _08007450 -_080074C8: - mov r7, sl @ r7 = sl = param1 - ldrb r0, [r7, #7] - ldrb r1, [r7, #3] - cmp r0, r1 - bls _080074D4 - adds r0, r1, #0 -_080074D4: - str r0, [sp, #0x18] - cmp r4, r0 - bhs _080075BA - mov r7, ip @ r7 = ip = sp08 - add r0, sp, #0xc - mov sl, r0 @ sl = sp0C -_080074E0: - mov r1, r8 @ r1 = r8 = sp14 - ldrb r0, [r1, #1] - strb r0, [r5] - ldrb r0, [r1] - strb r0, [r5, #1] - adds r3, r7, #0 @ r3 = r7 = sp08 - mov r6, sl @ r6 = sl = sp0C - ldrh r2, [r6] - ldrh r0, [r7] - adds r2, r2, r0 - strh r2, [r7] - ldrh r0, [r7, #2] - ldrh r1, [r6, #2] - adds r0, r0, r1 - strh r0, [r7, #2] - lsls r2, r2, #0x10 - adds r4, #1 - mov sb, r4 - cmp r2, #0 - blt _08007558 - mov r2, r8 @ r2 = r8 = sp14 - add r4, sp, #0x10 @ r4 = sp10 - mov r1, ip @ r1 = ip = sp08 - str r1, [sp, #0x1c] -_08007510: - mov r0, sp - movs r6, #0 - ldrsh r0, [r0, r6] - cmp r0, #0 - ble _08007530 - ldrb r0, [r2] - adds r0, #1 - strb r0, [r2] - ldrh r0, [r3] - ldrh r1, [r4] - subs r0, r0, r1 - strh r0, [r3] - b _0800754E - .align 2, 0 -_0800752C: .4byte gHBlankCopySize -_08007530: - ldrb r0, [r2] - subs r0, #1 - strb r0, [r2] - ldr r1, [sp, #0x1c] - ldrh r0, [r1] - ldrh r1, [r4] - subs r0, r0, r1 - ldr r3, [sp, #0x1c] - strh r0, [r3] - lsls r0, r0, #0x10 - cmp r0, #0 - blt _0800754E - mov r6, r8 - ldrb r0, [r6] - strb r0, [r5, #1] -_0800754E: - mov r3, ip - movs r1, #0 - ldrsh r0, [r3, r1] - cmp r0, #0 - bge _08007510 -_08007558: - adds r2, r7, #0 @ r2 = r7 = sp08 - ldrh r0, [r2, #2] - lsls r0, r0, #0x10 - cmp r0, #0 - blt _080075A8 - mov r3, r8 @ r3 = r8 = sp14 - add r4, sp, #0x10 @ r4 = sp10 - mov r6, ip @ r6 = ip = sp08 -_08007568: - mov r0, sp - ldrh r0, [r0, #2] - lsls r0, r0, #0x10 - cmp r0, #0 - ble _08007590 - ldrb r0, [r3, #1] - adds r0, #1 - strb r0, [r3, #1] - ldrh r0, [r2, #2] - ldrh r1, [r4, #2] - subs r0, r0, r1 - strh r0, [r2, #2] - lsls r0, r0, #0x10 - cmp r0, #0 - blt _0800759E - mov r2, r8 - ldrb r0, [r2, #1] - adds r0, #1 - strb r0, [r5] - b _0800759E -_08007590: - ldrb r0, [r3, #1] - subs r0, #1 - strb r0, [r3, #1] - ldrh r0, [r6, #2] - ldrh r1, [r4, #2] - subs r0, r0, r1 - strh r0, [r6, #2] -_0800759E: - mov r2, ip - ldrh r0, [r2, #2] - lsls r0, r0, #0x10 - cmp r0, #0 - bge _08007568 -_080075A8: - ldr r3, _080075CC @ =gHBlankCopySize - ldrb r0, [r3] - adds r5, r5, r0 - mov r6, sb - lsls r0, r6, #0x18 - lsrs r4, r0, #0x18 - ldr r0, [sp, #0x18] - cmp r4, r0 - blo _080074E0 -_080075BA: - add sp, #0x20 - pop {r3, r4, r5} - mov r8, r3 - mov sb, r4 - mov sl, r5 - pop {r4, r5, r6, r7} - pop {r0} - bx r0 - .align 2, 0 -_080075CC: .4byte gHBlankCopySize - -.syntax divided diff --git a/asm/non_matching/engine/unused_sub_8006DB4.inc b/asm/non_matching/engine/unused_sub_8006DB4.inc deleted file mode 100644 index d6b9f20ef2..0000000000 --- a/asm/non_matching/engine/unused_sub_8006DB4.inc +++ /dev/null @@ -1,640 +0,0 @@ -.syntax unified -.text - push {r4, r5, r6, r7, lr} - mov r7, sl - mov r6, sb - mov r5, r8 - push {r5, r6, r7} - sub sp, #0x20 - mov sl, r1 - mov sb, r3 - lsls r0, r0, #0x18 - lsrs r7, r0, #0x18 - add r6, sp, #4 - ldr r1, _08006E10 @ =gUnknown_080984F4 - adds r0, r6, #0 - movs r2, #4 - bl memcpy - add r5, sp, #0xc - adds r0, r5, #0 - movs r1, #0 - movs r2, #4 - bl memset - add r4, sp, #0x10 - adds r0, r4, #0 - movs r1, #0 - movs r2, #4 - bl memset - ldr r1, _08006E14 @ =gFlags - ldr r0, [r1] - movs r2, #4 - orrs r0, r2 - str r0, [r1] - cmp r7, #1 - bls _08006E2C - ldr r1, _08006E18 @ =gHBlankCopySize - strb r2, [r1] - movs r0, #1 - ands r0, r7 - cmp r0, #0 - beq _08006E20 - ldr r0, _08006E1C @ =gBgOffsetsHBlank - ldr r0, [r0] - adds r4, r0, #2 - b _08006E54 - .align 2, 0 -_08006E10: .4byte gUnknown_080984F4 -_08006E14: .4byte gFlags -_08006E18: .4byte gHBlankCopySize -_08006E1C: .4byte gBgOffsetsHBlank -_08006E20: - ldr r0, _08006E28 @ =gBgOffsetsHBlank - ldr r4, [r0] - b _08006E54 - .align 2, 0 -_08006E28: .4byte gBgOffsetsHBlank -_08006E2C: - ldr r1, _08006E44 @ =gHBlankCopySize - movs r0, #2 - strb r0, [r1] - ldr r0, _08006E48 @ =gBgOffsetsHBlank - ldr r4, [r0] - movs r0, #1 - ands r0, r7 - cmp r0, #0 - beq _08006E54 - ldr r1, _08006E4C @ =gHBlankCopyTarget - ldr r0, _08006E50 @ =0x04000042 - b _08006E58 - .align 2, 0 -_08006E44: .4byte gHBlankCopySize -_08006E48: .4byte gBgOffsetsHBlank -_08006E4C: .4byte gHBlankCopyTarget -_08006E50: .4byte 0x04000042 -_08006E54: - ldr r1, _08006F68 @ =gHBlankCopyTarget - ldr r0, _08006F6C @ =0x04000040 -_08006E58: - str r0, [r1] - mov r1, sl - ldrb r0, [r1, #5] - ldrb r2, [r1, #1] - adds r5, r2, #0 - adds r1, r0, #0 - cmp r0, r5 - bls _08006E6A - adds r0, r2, #0 -_08006E6A: - adds r3, r0, #0 - lsls r0, r1, #0x18 - lsrs r0, r0, #0x18 - mov ip, r0 - cmp ip, r5 - bhs _08006E78 - adds r1, r2, #0 -_08006E78: - lsls r0, r1, #0x18 - lsrs r0, r0, #0x18 - mov r8, r0 - ldr r2, _08006F70 @ =gHBlankCopySize - ldrb r0, [r2] - muls r0, r3, r0 - adds r4, r4, r0 - mov r2, sp - mov r7, sl - ldrb r0, [r7, #2] - ldrb r1, [r7] - subs r0, r0, r1 - strh r0, [r2] - adds r7, r6, #0 - mov r1, sl - ldrb r0, [r1, #3] - ldrb r1, [r1, #1] - subs r0, r0, r1 - strh r0, [r7] - mov r0, sp - movs r2, #0 - ldrsh r0, [r0, r2] - cmp r0, #0 - bge _08006EAA - rsbs r0, r0, #0 -_08006EAA: - lsls r0, r0, #1 - mov r1, sp - strh r0, [r1, #0xc] - movs r2, #0 - ldrsh r0, [r7, r2] - cmp r0, #0 - bge _08006EBA - rsbs r0, r0, #0 -_08006EBA: - lsls r0, r0, #1 - mov r1, sp - strh r0, [r1, #0x10] - mov r2, sp - mov r1, sl - ldrb r0, [r1, #6] - ldrb r1, [r1, #4] - subs r0, r0, r1 - strh r0, [r2, #2] - mov r2, sl - ldrb r0, [r2, #7] - ldrb r1, [r2, #5] - subs r0, r0, r1 - strh r0, [r7, #2] - mov r0, sp - movs r1, #2 - ldrsh r0, [r0, r1] - cmp r0, #0 - bge _08006EE2 - rsbs r0, r0, #0 -_08006EE2: - lsls r0, r0, #1 - mov r2, sp - strh r0, [r2, #0xe] - movs r1, #2 - ldrsh r0, [r7, r1] - cmp r0, #0 - bge _08006EF2 - rsbs r0, r0, #0 -_08006EF2: - lsls r0, r0, #1 - mov r2, sp - strh r0, [r2, #0x12] - add r2, sp, #0x14 - mov r7, sl - ldrb r0, [r7] - strb r0, [r2] - ldrb r0, [r7, #4] - strb r0, [r2, #1] - add r1, sp, #8 - ldrh r0, [r6] - rsbs r0, r0, #0 - strh r0, [r1] - ldrh r0, [r6, #2] - rsbs r0, r0, #0 - strh r0, [r1, #2] - adds r6, r2, #0 - cmp r3, r8 - bne _08006F1A - b _0800702C -_08006F1A: - cmp r5, ip - bhs _08006FB0 - cmp r3, r8 - blo _08006F24 - b _0800702C -_08006F24: - adds r7, r6, #0 - adds r5, r1, #0 -_08006F28: - mov r0, sb - strb r0, [r4] - ldrb r0, [r7] - strb r0, [r4, #1] - mov r1, sp - ldrh r0, [r1, #0xc] - ldrh r2, [r5] - adds r0, r0, r2 - strh r0, [r5] - lsls r0, r0, #0x10 - adds r3, #1 - mov ip, r3 - cmp r0, #0 - blt _08006F98 - add r2, sp, #8 - add r3, sp, #0x10 -_08006F48: - mov r0, sp - movs r1, #0 - ldrsh r0, [r0, r1] - cmp r0, #0 - ble _08006F74 - ldrb r0, [r7] - cmp sb, r0 - ble _08006F5C - adds r0, #1 - strb r0, [r6] -_08006F5C: - ldrh r0, [r2] - ldrh r1, [r3] - subs r0, r0, r1 - strh r0, [r2] - b _08006F90 - .align 2, 0 -_08006F68: .4byte gHBlankCopyTarget -_08006F6C: .4byte 0x04000040 -_08006F70: .4byte gHBlankCopySize -_08006F74: - ldrb r0, [r6] - cmp r0, #0 - beq _08006F7E - subs r0, #1 - strb r0, [r6] -_08006F7E: - ldrh r0, [r2] - ldrh r1, [r3] - subs r0, r0, r1 - strh r0, [r2] - lsls r0, r0, #0x10 - cmp r0, #0 - blt _08006F90 - ldrb r0, [r6] - strb r0, [r4, #1] -_08006F90: - movs r1, #0 - ldrsh r0, [r2, r1] - cmp r0, #0 - bge _08006F48 -_08006F98: - ldr r2, _08006FAC @ =gHBlankCopySize - ldrb r0, [r2] - adds r4, r4, r0 - mov r1, ip - lsls r0, r1, #0x18 - lsrs r3, r0, #0x18 - cmp r3, r8 - blo _08006F28 - b _0800702C - .align 2, 0 -_08006FAC: .4byte gHBlankCopySize -_08006FB0: - cmp r3, r8 - bhs _0800702C - adds r7, r6, #0 - add r5, sp, #8 -_08006FB8: - ldrb r0, [r7, #1] - strb r0, [r4] - movs r0, #0 - strb r0, [r4, #1] - ldrh r1, [r5, #2] - mov r2, sp - ldrh r0, [r2, #0xe] - adds r1, r1, r0 - strh r1, [r5, #2] - lsls r1, r1, #0x10 - adds r3, #1 - mov ip, r3 - cmp r1, #0 - blt _0800701C - add r2, sp, #8 - add r3, sp, #0x10 -_08006FD8: - mov r0, sp - ldrh r0, [r0, #2] - lsls r0, r0, #0x10 - cmp r0, #0 - ble _08007002 - ldrb r0, [r6, #1] - cmp sb, r0 - ble _08006FEC - adds r0, #1 - strb r0, [r6, #1] -_08006FEC: - ldrh r0, [r2, #2] - ldrh r1, [r3, #2] - subs r0, r0, r1 - strh r0, [r2, #2] - lsls r0, r0, #0x10 - cmp r0, #0 - blt _08007014 - ldrb r0, [r6, #1] - adds r0, #1 - strb r0, [r4] - b _08007014 -_08007002: - ldrb r0, [r7, #1] - cmp r0, #0 - beq _0800700C - subs r0, #1 - strb r0, [r6, #1] -_0800700C: - ldrh r0, [r2, #2] - ldrh r1, [r3, #2] - subs r0, r0, r1 - strh r0, [r2, #2] -_08007014: - ldrh r0, [r2, #2] - lsls r0, r0, #0x10 - cmp r0, #0 - bge _08006FD8 -_0800701C: - ldr r1, _08007090 @ =gHBlankCopySize - ldrb r0, [r1] - adds r4, r4, r0 - mov r2, ip - lsls r0, r2, #0x18 - lsrs r3, r0, #0x18 - cmp r3, r8 - blo _08006FB8 -_0800702C: - mov r7, sl - ldrb r0, [r7, #7] - ldrb r1, [r7, #3] - cmp r0, r1 - bls _08007038 - adds r0, r1, #0 -_08007038: - mov r8, r0 - cmp r3, r8 - bhs _08007118 - adds r7, r6, #0 - add r5, sp, #8 - mov r0, sp - adds r0, #0xc - str r0, [sp, #0x18] -_08007048: - ldrb r0, [r7, #1] - strb r0, [r4] - ldrb r0, [r7] - strb r0, [r4, #1] - ldr r1, [sp, #0x18] - ldrh r2, [r1] - ldrh r0, [r5] - adds r2, r2, r0 - strh r2, [r5] - ldrh r1, [r1, #2] - mov ip, r1 - ldrh r0, [r5, #2] - add r0, ip - strh r0, [r5, #2] - lsls r2, r2, #0x10 - adds r3, #1 - mov ip, r3 - cmp r2, #0 - blt _080070B8 - add r2, sp, #8 - add r3, sp, #0x10 -_08007072: - mov r0, sp - movs r1, #0 - ldrsh r0, [r0, r1] - cmp r0, #0 - ble _08007094 - ldrb r0, [r7] - cmp sb, r0 - ble _08007086 - adds r0, #1 - strb r0, [r6] -_08007086: - ldrh r0, [r2] - ldrh r1, [r3] - subs r0, r0, r1 - strh r0, [r2] - b _080070B0 - .align 2, 0 -_08007090: .4byte gHBlankCopySize -_08007094: - ldrb r0, [r6] - cmp r0, #0 - beq _0800709E - subs r0, #1 - strb r0, [r6] -_0800709E: - ldrh r0, [r2] - ldrh r1, [r3] - subs r0, r0, r1 - strh r0, [r2] - lsls r0, r0, #0x10 - cmp r0, #0 - blt _080070B0 - ldrb r0, [r6] - strb r0, [r4, #1] -_080070B0: - movs r1, #0 - ldrsh r0, [r2, r1] - cmp r0, #0 - bge _08007072 -_080070B8: - ldrh r0, [r5, #2] - lsls r0, r0, #0x10 - cmp r0, #0 - blt _08007108 - add r2, sp, #8 - add r3, sp, #0x10 -_080070C4: - mov r0, sp - ldrh r0, [r0, #2] - lsls r0, r0, #0x10 - cmp r0, #0 - ble _080070EE - ldrb r0, [r6, #1] - cmp sb, r0 - ble _080070D8 - adds r0, #1 - strb r0, [r6, #1] -_080070D8: - ldrh r0, [r2, #2] - ldrh r1, [r3, #2] - subs r0, r0, r1 - strh r0, [r2, #2] - lsls r0, r0, #0x10 - cmp r0, #0 - blt _08007100 - ldrb r0, [r6, #1] - adds r0, #1 - strb r0, [r4] - b _08007100 -_080070EE: - ldrb r0, [r7, #1] - cmp r0, #0 - beq _080070F8 - subs r0, #1 - strb r0, [r6, #1] -_080070F8: - ldrh r0, [r2, #2] - ldrh r1, [r3, #2] - subs r0, r0, r1 - strh r0, [r2, #2] -_08007100: - ldrh r0, [r2, #2] - lsls r0, r0, #0x10 - cmp r0, #0 - bge _080070C4 -_08007108: - ldr r2, _08007188 @ =gHBlankCopySize - ldrb r0, [r2] - adds r4, r4, r0 - mov r1, ip - lsls r0, r1, #0x18 - lsrs r3, r0, #0x18 - cmp r3, r8 - blo _08007048 -_08007118: - mov r2, sl - ldrb r0, [r2, #7] - ldrb r1, [r2, #3] - adds r2, r1, #0 - adds r7, r0, #0 - cmp r0, r2 - bhs _08007128 - adds r0, r1, #0 -_08007128: - mov r8, r0 - lsls r0, r7, #0x18 - lsrs r0, r0, #0x18 - cmp r2, r0 - bhi _080071BC - cmp r3, r8 - blo _08007138 - b _08007238 -_08007138: - adds r7, r6, #0 - add r5, sp, #8 -_0800713C: - ldrb r0, [r7, #1] - strb r0, [r4] - movs r0, #0 - strb r0, [r4, #1] - ldrh r1, [r5, #2] - mov r2, sp - ldrh r0, [r2, #0xe] - adds r1, r1, r0 - strh r1, [r5, #2] - lsls r1, r1, #0x10 - adds r3, #1 - mov ip, r3 - cmp r1, #0 - blt _080071A6 - add r2, sp, #8 - add r3, sp, #0x10 -_0800715C: - mov r0, sp - ldrh r0, [r0, #2] - lsls r0, r0, #0x10 - cmp r0, #0 - ble _0800718C - ldrb r0, [r6, #1] - cmp sb, r0 - ble _08007170 - adds r0, #1 - strb r0, [r6, #1] -_08007170: - ldrh r0, [r2, #2] - ldrh r1, [r3, #2] - subs r0, r0, r1 - strh r0, [r2, #2] - lsls r0, r0, #0x10 - cmp r0, #0 - blt _0800719E - ldrb r0, [r6, #1] - adds r0, #1 - strb r0, [r4] - b _0800719E - .align 2, 0 -_08007188: .4byte gHBlankCopySize -_0800718C: - ldrb r0, [r7, #1] - cmp r0, #0 - beq _08007196 - subs r0, #1 - strb r0, [r6, #1] -_08007196: - ldrh r0, [r2, #2] - ldrh r1, [r3, #2] - subs r0, r0, r1 - strh r0, [r2, #2] -_0800719E: - ldrh r0, [r2, #2] - lsls r0, r0, #0x10 - cmp r0, #0 - bge _0800715C -_080071A6: - ldr r1, _080071B8 @ =gHBlankCopySize - ldrb r0, [r1] - adds r4, r4, r0 - mov r2, ip - lsls r0, r2, #0x18 - lsrs r3, r0, #0x18 - cmp r3, r8 - blo _0800713C - b _08007238 - .align 2, 0 -_080071B8: .4byte gHBlankCopySize -_080071BC: - cmp r3, r8 - bhs _08007238 - adds r7, r6, #0 - add r5, sp, #8 -_080071C4: - mov r0, sb - strb r0, [r4] - ldrb r0, [r7] - strb r0, [r4, #1] - mov r1, sp - ldrh r0, [r1, #0xc] - ldrh r2, [r5] - adds r0, r0, r2 - strh r0, [r5] - lsls r0, r0, #0x10 - adds r3, #1 - mov ip, r3 - cmp r0, #0 - blt _08007228 - add r2, sp, #8 - add r3, sp, #0x10 -_080071E4: - mov r0, sp - movs r1, #0 - ldrsh r0, [r0, r1] - cmp r0, #0 - ble _08007202 - ldrb r0, [r7] - cmp sb, r0 - ble _080071F8 - adds r0, #1 - strb r0, [r6] -_080071F8: - ldrh r0, [r2] - ldrh r1, [r3] - subs r0, r0, r1 - strh r0, [r2] - b _08007220 -_08007202: - adds r1, r6, #0 - ldrb r0, [r1] - cmp r0, #0 - beq _0800720E - subs r0, #1 - strb r0, [r1] -_0800720E: - ldrh r0, [r2] - ldrh r1, [r3] - subs r0, r0, r1 - strh r0, [r2] - lsls r0, r0, #0x10 - cmp r0, #0 - blt _08007220 - ldrb r0, [r6] - strb r0, [r4, #1] -_08007220: - movs r1, #0 - ldrsh r0, [r2, r1] - cmp r0, #0 - bge _080071E4 -_08007228: - ldr r2, _08007248 @ =gHBlankCopySize - ldrb r0, [r2] - adds r4, r4, r0 - mov r1, ip - lsls r0, r1, #0x18 - lsrs r3, r0, #0x18 - cmp r3, r8 - blo _080071C4 -_08007238: - add sp, #0x20 - pop {r3, r4, r5} - mov r8, r3 - mov sb, r4 - mov sl, r5 - pop {r4, r5, r6, r7} - pop {r0} - bx r0 - .align 2, 0 -_08007248: .4byte gHBlankCopySize - -.if 0 -.endif - -.syntax divided diff --git a/include/flags.h b/include/flags.h index ff8b13cd15..7bbc5ac367 100644 --- a/include/flags.h +++ b/include/flags.h @@ -10,7 +10,7 @@ #define FLAGS_EXECUTE_HBLANK_CALLBACKS 0x8 #define FLAGS_10 0x10 #define FLAGS_20 0x20 -#define FLAGS_EXECUTE_HBLANK_COPY0 0x40 +#define FLAGS_40 0x40 #define FLAGS_80 0x80 #define FLAGS_NO_FLASH_MEMORY 0x100 #define FLAGS_200 0x200 diff --git a/include/game/sa1_sa2_shared/spot_light_beam_task.h b/include/game/sa1_sa2_shared/spot_light_beam_task.h index bf60c9b437..c299d33c8a 100644 --- a/include/game/sa1_sa2_shared/spot_light_beam_task.h +++ b/include/game/sa1_sa2_shared/spot_light_beam_task.h @@ -8,9 +8,9 @@ typedef struct { s16 unk4; s16 unk6; s16 unk8; - u8 unkA; + u8 bg; u8 unkB; -} StageUnkTask; /* size: 0xC */ +} SpotlightBeamTask; /* size: 0xC */ struct Task *CreateSpotlightBeamTask(void); diff --git a/src/bg_triangles.c b/src/bg_triangles.c index 3fbdc9fffb..2f56654c10 100644 --- a/src/bg_triangles.c +++ b/src/bg_triangles.c @@ -9,61 +9,16 @@ /* TODO: Rename this module to something background-related */ #include "bg_triangles.h" -#ifndef COLLECT_RINGS_ROM -const u16 gUnknown_080984F4[] = { - // Zone 1 - 0x0001, - 0x0001, - 0x2430, - 0x0000, - - // Zone 2 - 0x0004, - 0x0024, - 0x0300, - 0x0080, - - // Zone 3 - 0x0200, - 0x0098, - 0x2430, - 0x0000, - - // Zone 4 - 0x0004, - 0x0024, - 0x0300, - 0x0080, - - // Zone 5 - 0x0200, - 0x0098, - 0x2430, - 0x0000, - - // Zone 6 - 0x0004, - 0x0024, - 0x0300, - 0x0080, +#ifndef NON_MATCHING +#define MATCH_BREAK asm("") +#else +/* No asm block needed, better for optimization */ +#define MATCH_BREAK +#endif - // Zone 7 - 0x0200, - 0x0098, - 0x2430, - 0x0000, - - // Zone Extra - 0x0004, - 0x0024, - 0x0300, - 0x0080, - - // Dummies? - 0x0200, - 0x0098, -}; +#define IncCursor(cur, offset) (int_vcount *)(((u8 *)(cur)) + (offset)) +#ifndef COLLECT_RINGS_ROM typedef struct { s16 x; s16 y; @@ -75,7 +30,7 @@ END_NONMATCH NONMATCH("asm/non_matching/engine/unused_sub_8005FB4.inc", void sub_8005FB4()) { } END_NONMATCH -void sub_8006228(u8 bg, u8 param1, u8 param2, u8 param3, u8 param4, u8 param5) +void SA2_LABEL(sub_8006228)(u8 bg, u8 param1, u8 param2, u8 param3, u8 param4, u8 param5) { int_vcount *cursor; s16 r1, r2, r4, r5, r7, r8; @@ -83,10 +38,10 @@ void sub_8006228(u8 bg, u8 param1, u8 param2, u8 param3, u8 param4, u8 param5) gFlags |= FLAGS_EXECUTE_HBLANK_COPY; if (bg >= 2) { - gHBlankCopySize = sizeof(winreg_t) * 2; + gHBlankCopySize = sizeof(REG_WIN0H) * 2; if (bg & 1) { - cursor = (int_vcount *)gBgOffsetsHBlank + sizeof(winreg_t); + cursor = (int_vcount *)gBgOffsetsHBlank + sizeof(REG_WIN0H); gHBlankCopyTarget = (void *)®_WIN0H; } else { cursor = (int_vcount *)gBgOffsetsHBlank; @@ -94,7 +49,7 @@ void sub_8006228(u8 bg, u8 param1, u8 param2, u8 param3, u8 param4, u8 param5) } } else { volatile winreg_t *reg; - gHBlankCopySize = sizeof(winreg_t); + gHBlankCopySize = sizeof(REG_WIN0H); cursor = (int_vcount *)gBgOffsetsHBlank; // Required for match @@ -114,10 +69,9 @@ void sub_8006228(u8 bg, u8 param1, u8 param2, u8 param3, u8 param4, u8 param5) r8 = ABS(r2) * 2; r7 = ABS(r4) * 2; - cursor += (gHBlankCopySize * param2); + cursor = IncCursor(cursor, param2 * gHBlankCopySize); if (ABS(r2) > ABS(r4)) { - // _0800630A+8 r4 = -r2; if (r2 > 0) { @@ -130,7 +84,7 @@ void sub_8006228(u8 bg, u8 param1, u8 param2, u8 param3, u8 param4, u8 param5) if (r4 >= 0) { r4 = ((r4 << 16) >> 16) - r8; cursor[0] = param1; - cursor += gHBlankCopySize; + cursor = IncCursor(cursor, gHBlankCopySize); cursor[1] = param5; } } @@ -163,10 +117,8 @@ void sub_8006228(u8 bg, u8 param1, u8 param2, u8 param3, u8 param4, u8 param5) } else { r4 = -r4; - // _080063DC if (r2 > 0) { for (r2 = 0; r2 < ABS(r5); r2++) { - // _080063F6 *cursor = param1 + 1; cursor++; *cursor = param5; @@ -184,7 +136,6 @@ void sub_8006228(u8 bg, u8 param1, u8 param2, u8 param3, u8 param4, u8 param5) } } } else { - // _08006450 for (r2 = 0; r2 < ABS(r5); r2++) { *cursor = param1 + 1; cursor++; @@ -207,7 +158,7 @@ void sub_8006228(u8 bg, u8 param1, u8 param2, u8 param3, u8 param4, u8 param5) } } -void sub_80064A8(u8 bg, u8 param1, u8 param2, u8 param3, u8 param4, u8 param5) +void SA2_LABEL(sub_80064A8)(u8 bg, u8 param1, u8 param2, u8 param3, u8 param4, u8 param5) { int_vcount *cursor; s16 r1, r2, r4, r5, r7, r8; @@ -215,7 +166,7 @@ void sub_80064A8(u8 bg, u8 param1, u8 param2, u8 param3, u8 param4, u8 param5) gFlags |= FLAGS_EXECUTE_HBLANK_COPY; if (bg >= 2) { - gHBlankCopySize = sizeof(winreg_t) * 2; + gHBlankCopySize = sizeof(REG_WIN0H) * 2; if (bg & 1) { cursor = (int_vcount *)gBgOffsetsHBlank + sizeof(winreg_t); @@ -226,7 +177,7 @@ void sub_80064A8(u8 bg, u8 param1, u8 param2, u8 param3, u8 param4, u8 param5) } } else { volatile winreg_t *reg; - gHBlankCopySize = sizeof(winreg_t); + gHBlankCopySize = sizeof(REG_WIN0H); cursor = (int_vcount *)gBgOffsetsHBlank; // Required for match @@ -246,7 +197,7 @@ void sub_80064A8(u8 bg, u8 param1, u8 param2, u8 param3, u8 param4, u8 param5) r8 = ABS(r2) * 2; r7 = ABS(r4) * 2; - cursor += (gHBlankCopySize * param2); + cursor = IncCursor(cursor, param2 * gHBlankCopySize); if (ABS(r2) > ABS(r4)) { r4 = -r2; @@ -261,7 +212,7 @@ void sub_80064A8(u8 bg, u8 param1, u8 param2, u8 param3, u8 param4, u8 param5) if (r4 >= 0) { r4 -= r8; cursor[0] = param5; - cursor += gHBlankCopySize; + cursor = IncCursor(cursor, gHBlankCopySize); cursor[1] = param1; } } @@ -338,155 +289,382 @@ void sub_80064A8(u8 bg, u8 param1, u8 param2, u8 param3, u8 param4, u8 param5) NONMATCH("asm/non_matching/engine/unused_sub_800672C.inc", void sub_800672C()) { } END_NONMATCH -NONMATCH("asm/non_matching/engine/unused_sub_8006DB4.inc", void sub_8006DB4()) { } -END_NONMATCH - -// When this function is called, the background layer that is -// "lightened" by spot lights is fully lit. -// This function filters out all non-lit parts to display them normally. -// TODO: validate type of param1! -// (84.94%) https://decomp.me/scratch/00RIv -NONMATCH("asm/non_matching/engine/sub_800724C.inc", void sub_800724C(u8 bg, TriParam1 *param1)) +void SA2_LABEL(sub_8006DB4)(u8 bg, u8 *arg1, s32 unused, s32 arg3) { - s16 sp00[2]; - s16 sp04[2]; + s16 sp0[2]; + s16 sp4[2] = { 1, 1 }; s16 sp8[2]; - s16 spC[2]; - Unknown sp10; - s8 sp14[2]; - u8 sp18; - s16 *sp1C; - u8 var_r4; - void *var_r0; - void *cursor; - - memcpy(&sp04, &gUnknown_080984F4, sizeof(sp04)); - memset(&spC, 0, 4); - memset(&sp10, 0, 4); + s16 spC[2] = { 0 }; + s16 sp10[2] = { 0 }; + u8 sp14[2]; + s16 maxVal2; + s32 var_r0_5; + u8 var_r0_6; + u8 maxVal; + u8 minVal; + int_vcount *cursor; gFlags |= FLAGS_EXECUTE_HBLANK_COPY; - if (bg > 1U) { - gHBlankCopySize = 2 * sizeof(u16); - if (bg & 0x1) { - cursor = gBgOffsetsHBlank + 2; + if (bg >= 2) { + gHBlankCopySize = sizeof(REG_WIN0H) * 2; + + if (bg & 1) { + cursor = &((int_vcount *)gBgOffsetsHBlank)[2]; + gHBlankCopyTarget = (void *)®_WIN0H; } else { - cursor = gBgOffsetsHBlank; + cursor = &((int_vcount *)gBgOffsetsHBlank)[0]; + gHBlankCopyTarget = (void *)®_WIN0H; } - - gHBlankCopyTarget = (void *)®_WIN0H; } else { - gHBlankCopySize = 1 * sizeof(u16); - cursor = gBgOffsetsHBlank; - if (bg & 0x1) { + gHBlankCopySize = sizeof(REG_WIN0H); + cursor = &((int_vcount *)gBgOffsetsHBlank)[0]; + + if (bg & 1) { gHBlankCopyTarget = (void *)®_WIN1H; } else { gHBlankCopyTarget = (void *)®_WIN0H; } } - var_r4 = (param1->unk5 > param1->unk1) ? param1->unk1 : param1->unk5; - sp18 = (param1->unk5 < param1->unk1) ? param1->unk1 : param1->unk5; - cursor += (var_r4 * gHBlankCopySize); - sp00[0] = param1->unk2 - param1->unk0; - sp04[0] = param1->unk3 - param1->unk1; - spC[0] = ABS(sp00[0]) * 2; - sp10.x = ABS(sp04[0]) * 2; - sp00[1] = param1->unk6 - param1->unk4; - sp04[1] = param1->unk7 - param1->unk5; - spC[1] = ABS(sp00[1]) * 2; - sp10.y = ABS(sp04[1]) * 2; - sp14[0] = param1->unk0; - sp14[1] = param1->unk4; - sp8[0] = -sp04[0]; - sp8[1] = -sp04[1]; - - if (var_r4 == sp18) { - - } else if (param1->unk1 < param1->unk5) { - for (; var_r4 < sp18; var_r4++) { - ((u8 *)cursor)[0] = 240; - ((u8 *)cursor)[1] = sp14[0]; + minVal = MIN(arg1[1], arg1[5]); + maxVal = MAX(arg1[1], arg1[5]); + + cursor = IncCursor(cursor, minVal * gHBlankCopySize); + sp0[0] = (arg1[2] - arg1[0]); + sp4[0] = (arg1[3] - arg1[1]); + spC[0] = (ABS(sp0[0]) * 2); + sp10[0] = (ABS(sp4[0]) * 2); + sp0[1] = (arg1[6] - arg1[4]); + sp4[1] = (arg1[7] - arg1[5]); + + spC[1] = (ABS(sp0[1]) * 2); + var_r0_5 = ABS(sp4[1]); + sp10[1] = (var_r0_5 * 2); + sp14[0] = arg1[0]; + sp14[1] = arg1[4]; + sp8[0] = -sp4[0]; + sp8[1] = -sp4[1]; + + if ((minVal != maxVal) && (arg1[1] < arg1[5])) { + while (minVal < maxVal) { + cursor[0] = arg3; + cursor[1] = sp14[0]; sp8[0] += spC[0]; + while (sp8[0] >= 0) { - if (sp00[0] > 0) { - sp14[0]++; - sp8[0] -= sp10.x; + if (sp0[0] > 0) { + if (arg3 > sp14[0]) { + sp14[0]++; + } + sp8[0] -= sp10[0]; } else { - sp14[0]--; - sp8[0] -= sp10.x; + if (sp14[0] != 0) { + sp14[0]--; + } + + sp8[0] -= sp10[0]; if (sp8[0] >= 0) { - ((u8 *)cursor)[1] = sp14[0]; + cursor[1] = sp14[0]; } } + MATCH_BREAK; } - cursor += gHBlankCopySize; + + cursor = IncCursor(cursor, gHBlankCopySize); + minVal++; } } else { - for (; var_r4 < sp18; var_r4++) { - ((u8 *)cursor)[0] = sp14[1]; - ((u8 *)cursor)[1] = 0; + while (minVal < maxVal) { + cursor[0] = sp14[1]; + cursor[1] = 0; sp8[1] += spC[1]; + if (sp8[1] >= 0) { + while (sp8[1] >= 0) { + if (sp0[1] > 0) { + if (arg3 > sp14[1]) { + sp14[1]++; + } + + sp8[1] -= sp10[1]; + if (sp8[1] >= 0) { + cursor[0] = (sp14[1] + 1); + } + } else { + if (sp14[1] != 0) { + sp14[1]--; + } + sp8[1] -= sp10[1]; + } - while (sp8[1] >= 0) { - if (sp00[1] > 0) { + MATCH_BREAK; + } + } + + cursor = IncCursor(cursor, gHBlankCopySize); + minVal++; + } + } + + maxVal = MIN(arg1[3], arg1[7]); + + while (minVal < maxVal) { + cursor[0] = sp14[1]; + cursor[1] = sp14[0]; + sp8[0] += spC[0]; + sp8[1] += spC[1]; + + while (sp8[0] >= 0) { + if (sp0[0] > 0) { + if (arg3 > sp14[0]) { + sp14[0]++; + } + sp8[0] -= sp10[0]; + } else { + if (sp14[0] != 0) { + sp14[0]--; + } + + sp8[0] -= sp10[0]; + if (sp8[0] >= 0) { + cursor[1] = sp14[0]; + } + } + MATCH_BREAK; + } + while (sp8[1] >= 0) { + if (sp0[1] > 0) { + if (arg3 > sp14[1]) { sp14[1]++; - sp8[1] -= sp10.y; + } + + sp8[1] -= sp10[1]; + if (sp8[1] >= 0) { + cursor[0] = (sp14[1] + 1); + } + } else { + if (sp14[1] != 0) { + sp14[1]--; + } + sp8[1] -= sp10[1]; + } + MATCH_BREAK; + } + + cursor = IncCursor(cursor, gHBlankCopySize); + minVal++; + } + + maxVal = MAX(arg1[3], arg1[7]); + + if (arg1[3] <= arg1[7]) { + while (minVal < maxVal) { + cursor[0] = sp14[1]; + cursor[1] = 0; + sp8[1] += spC[1]; + + while (sp8[1] >= 0) { + if (sp0[1] > 0) { + if (arg3 > sp14[1]) { + sp14[1]++; + } + sp8[1] -= sp10[1]; if (sp8[1] >= 0) { - ((u8 *)cursor)[0] = (sp14[1] + 1); + cursor[0] = (sp14[1] + 1); } } else { - sp14[1]--; - sp8[1] -= sp10.y; + if (sp14[1] != 0) { + sp14[1]--; + } + sp8[1] -= sp10[1]; + } + MATCH_BREAK; + } + + cursor = IncCursor(cursor, gHBlankCopySize); + minVal++; + } + } else { + while (minVal < maxVal) { + cursor[0] = arg3; + cursor[1] = sp14[0]; + sp8[0] += spC[0]; + + while (sp8[0] >= 0) { + if (sp0[0] > 0) { + if (arg3 > sp14[0]) { + sp14[0]++; + } + sp8[0] = (sp8[0] - sp10[0]); + } else { + if (sp14[0] != 0) { + sp14[0]--; + } + sp8[0] -= sp10[0]; + if (sp8[0] >= 0) { + cursor[1] = sp14[0]; + } } + MATCH_BREAK; } - cursor += gHBlankCopySize; + + cursor = IncCursor(cursor, gHBlankCopySize); + minVal++; } } +} - sp18 = (param1->unk7 > param1->unk3) ? param1->unk3 : param1->unk7; - for (; var_r4 < sp18; var_r4++) { - ((u8 *)cursor)[0] = sp14[1]; - ((u8 *)cursor)[1] = sp14[0]; +// When this function is called, the background layer that is +// "lightened" by spot lights is fully lit. +void SA2_LABEL(sub_800724C)(u8 bg, TriParam1 *arg1) +{ + s16 sp0[2]; + s16 sp4[2] = { 1, 1 }; + s16 sp8[2]; + s16 spC[2] = { 0 }; + s16 sp10[2] = { 0 }; + int_vcount sp14[2]; + int_vcount *cursor; + int_vcount minVal; + int_vcount maxVal; - sp8[0] += spC[0]; - sp8[1] += spC[1]; + gFlags |= FLAGS_EXECUTE_HBLANK_COPY; + + if (bg >= 2) { + gHBlankCopySize = sizeof(REG_WIN0H) * 2; + + if (bg & 1) { + cursor = &((int_vcount *)gBgOffsetsHBlank)[2]; + gHBlankCopyTarget = (void *)®_WIN0H; + } else { + cursor = &((int_vcount *)gBgOffsetsHBlank)[0]; + gHBlankCopyTarget = (void *)®_WIN0H; + } + } else { + gHBlankCopySize = sizeof(REG_WIN0H); + cursor = &((int_vcount *)gBgOffsetsHBlank)[0]; + + if (bg & 1) { + gHBlankCopyTarget = (void *)®_WIN1H; + } else { + gHBlankCopyTarget = (void *)®_WIN0H; + } + } + + minVal = MIN(arg1->unk1, arg1->unk5); + maxVal = MAX(arg1->unk1, arg1->unk5); + + cursor = IncCursor(cursor, minVal * gHBlankCopySize); + sp0[0] = (arg1->unk2 - arg1->unk0); + sp4[0] = (arg1->unk3 - arg1->unk1); + spC[0] = (ABS(sp0[0]) * 2); + sp10[0] = (ABS(sp4[0]) * 2); + sp0[1] = (arg1->unk6 - arg1->unk4); + sp4[1] = (arg1->unk7 - arg1->unk5); + + spC[1] = (ABS(sp0[1]) * 2); + sp10[1] = (ABS(sp4[1]) * 2); + sp14[0] = arg1->unk0; + sp14[1] = arg1->unk4; + sp8[0] = -sp4[0]; + sp8[1] = -sp4[1]; + + if ((minVal != maxVal) && (arg1->unk1 < arg1->unk5)) { + while (minVal < maxVal) { + cursor[0] = DISPLAY_WIDTH; + cursor[1] = sp14[0]; + sp8[0] += spC[0]; - if (sp8[0] >= 0) { while (sp8[0] >= 0) { - sp1C = &sp8[0]; - if (sp00[0] > 0) { + if (sp0[0] > 0) { sp14[0]++; - sp8[0] -= sp10.x; + sp8[0] -= sp10[0]; } else { sp14[0]--; - *sp1C -= sp10.x; - if (*sp1C >= 0) { - ((u8 *)cursor)[1] = sp14[0]; + + sp8[0] -= sp10[0]; + if (sp8[0] >= 0) { + cursor[1] = sp14[0]; } } + MATCH_BREAK; + } + + cursor = IncCursor(cursor, gHBlankCopySize); + minVal++; + } + } else { + while (minVal < maxVal) { + cursor[0] = sp14[1]; + cursor[1] = 0; + sp8[1] += spC[1]; + if (sp8[1] >= 0) { + while (sp8[1] >= 0) { + if (sp0[1] > 0) { + sp14[1]++; + + sp8[1] -= sp10[1]; + if (sp8[1] >= 0) { + cursor[0] = (sp14[1] + 1); + } + } else { + sp14[1]--; + sp8[1] -= sp10[1]; + } + + MATCH_BREAK; + } + } + + cursor = IncCursor(cursor, gHBlankCopySize); + minVal++; + } + } + + maxVal = MIN(arg1->unk3, arg1->unk7); + + while (minVal < maxVal) { + cursor[0] = sp14[1]; + cursor[1] = sp14[0]; + sp8[0] += spC[0]; + sp8[1] += spC[1]; + + while (sp8[0] >= 0) { + if (sp0[0] > 0) { + sp14[0]++; + sp8[0] -= sp10[0]; + } else { + sp14[0]--; + + sp8[0] -= sp10[0]; + if (sp8[0] >= 0) { + cursor[1] = sp14[0]; + } } + MATCH_BREAK; } while (sp8[1] >= 0) { - if (sp00[1] > 0) { + if (sp0[1] > 0) { sp14[1]++; - sp8[1] -= sp10.y; + + sp8[1] -= sp10[1]; if (sp8[1] >= 0) { - ((u8 *)cursor)[0] = (sp14[1] + 1); + cursor[0] = (sp14[1] + 1); } } else { sp14[1]--; - sp8[1] = ((u16)sp8[1] - sp10.y); + sp8[1] -= sp10[1]; } + MATCH_BREAK; } - cursor += gHBlankCopySize; + + cursor = IncCursor(cursor, gHBlankCopySize); + minVal++; } } -END_NONMATCH -// TODO: param2 might be horizontal -void sub_80075D0(u8 bg, u8 param1, u8 param2, s16 param3, s16 param4, u16 param5) +void SA2_LABEL(sub_80075D0)(u8 bg, u8 param1, u8 param2, s16 param3, s16 param4, u16 param5) { int_vcount *cursor; s16 r1; @@ -495,7 +673,7 @@ void sub_80075D0(u8 bg, u8 param1, u8 param2, s16 param3, s16 param4, u16 param5 gFlags |= FLAGS_EXECUTE_HBLANK_COPY; if (bg >= 2) { - gHBlankCopySize = 4; + gHBlankCopySize = sizeof(REG_WIN0H) * 2; if (bg & 1) { cursor = &((int_vcount *)gBgOffsetsHBlank)[2]; @@ -505,7 +683,7 @@ void sub_80075D0(u8 bg, u8 param1, u8 param2, s16 param3, s16 param4, u16 param5 gHBlankCopyTarget = (void *)®_WIN0H; } } else { - gHBlankCopySize = 2; + gHBlankCopySize = sizeof(REG_WIN0H); cursor = &((int_vcount *)gBgOffsetsHBlank)[0]; if (bg & 1) { @@ -525,7 +703,7 @@ void sub_80075D0(u8 bg, u8 param1, u8 param2, s16 param3, s16 param4, u16 param5 param2 = (param4 + param5); } - cursor += (gHBlankCopySize * param1); + cursor = IncCursor(cursor, param1 * gHBlankCopySize); for (; param1 < param2; param1++) { s16 num = param1 - param4; @@ -558,19 +736,19 @@ void sub_80075D0(u8 bg, u8 param1, u8 param2, s16 param3, s16 param4, u16 param5 cursor++; } - cursor += (gHBlankCopySize - 2); + cursor = IncCursor(cursor, gHBlankCopySize - sizeof(REG_WIN0H)); } } -void sub_8007738(u8 bg, int_vcount minY, int_vcount maxY, u16 param3, u8 param4, u8 param5, u16 param6, u8 param7, u8 param8, s16 param9, - s16 param10) +void SA2_LABEL(sub_8007738)(u8 bg, int_vcount minY, int_vcount maxY, u16 param3, u8 param4, u8 param5, u16 param6, u8 param7, u8 param8, + s16 param9, s16 param10) { u16 *cursor; gFlags |= FLAGS_EXECUTE_HBLANK_COPY; gHBlankCopyTarget = (void *)&((u8 *)®_BG0HOFS)[bg * 4]; - gHBlankCopySize = 4; + gHBlankCopySize = 2 * sizeof(REG_BG0HOFS); cursor = &((u16 *)gBgOffsetsHBlank)[minY * 2]; @@ -587,14 +765,14 @@ void sub_8007738(u8 bg, int_vcount minY, int_vcount maxY, u16 param3, u8 param4, } } -void sub_8007858(u8 param0, int_vcount minY, int_vcount maxY, u16 param3, u16 param4) +void SA2_LABEL(sub_8007858)(u8 param0, int_vcount minY, int_vcount maxY, u16 param3, u16 param4) { u16 *cursor; gFlags |= FLAGS_EXECUTE_HBLANK_COPY; gHBlankCopyTarget = (void *)&((u8 *)®_BG0HOFS)[param0 * 4]; - gHBlankCopySize = 4; + gHBlankCopySize = 2 * sizeof(REG_BG0HOFS); cursor = &((u16 *)gBgOffsetsHBlank)[minY * 2]; @@ -610,16 +788,44 @@ void sub_8007858(u8 param0, int_vcount minY, int_vcount maxY, u16 param3, u16 pa minY++; } } + +// NOTE: Has to be below the code for matching... +// But it is unused, so it might actually go somewhere else?. +const u16 gUnknown_080984F8[] = { + // Zone 1 + 0x2430, 0x0000, 0x0004, 0x0024, + + // Zone 2 + 0x0300, 0x0080, 0x0200, 0x0098, + + // Zone 3 + 0x2430, 0x0000, 0x0004, 0x0024, + + // Zone 4 + 0x0300, 0x0080, 0x0200, 0x0098, + + // Zone 5 + 0x2430, 0x0000, 0x0004, 0x0024, + + // Zone 6 + 0x0300, 0x0080, 0x0200, 0x0098, + + // Zone 7 + 0x2430, 0x0000, 0x0004, 0x0024, + + // Zone Extra + 0x0300, 0x0080, 0x0200, 0x0098 +}; #endif -void sub_80078D4(u8 bg, int_vcount minY, int_vcount maxY, u16 offsetEven, u16 offsetOdd) +void SA2_LABEL(sub_80078D4)(u8 bg, int_vcount minY, int_vcount maxY, u16 offsetEven, u16 offsetOdd) { s32 fillVal; gFlags |= FLAGS_EXECUTE_HBLANK_COPY; gHBlankCopyTarget = (void *)&((u8 *)®_BG0HOFS)[bg * 4]; - gHBlankCopySize = 4; + gHBlankCopySize = 2 * sizeof(REG_BG0HOFS); if (minY < maxY) { fillVal = (offsetEven %= 512u) | ((offsetOdd % 512u) << 16); @@ -629,14 +835,14 @@ void sub_80078D4(u8 bg, int_vcount minY, int_vcount maxY, u16 offsetEven, u16 of } #ifndef COLLECT_RINGS_ROM -void sub_8007958(u8 bg, int_vcount minY, int_vcount maxY, s16 param3, s8 param4, u16 param5, u16 param6) +void SA2_LABEL(sub_8007958)(u8 bg, int_vcount minY, int_vcount maxY, s16 param3, s8 param4, u16 param5, u16 param6) { u16 *cursor; gFlags |= FLAGS_EXECUTE_HBLANK_COPY; gHBlankCopyTarget = (void *)&((u8 *)®_BG0HOFS)[bg * 4]; - gHBlankCopySize = 4; + gHBlankCopySize = 2 * sizeof(REG_BG0HOFS); cursor = &((u16 *)gBgOffsetsHBlank)[minY * 2]; @@ -653,14 +859,14 @@ void sub_8007958(u8 bg, int_vcount minY, int_vcount maxY, s16 param3, s8 param4, } } -void sub_8007A08(u8 bg, u8 param1, u8 param2, u8 param3, u8 param4) +void SA2_LABEL(sub_8007A08)(u8 bg, u8 param1, u8 param2, u8 param3, u8 param4) { u8 *cursor; gFlags |= FLAGS_EXECUTE_HBLANK_COPY; if (bg >= 2) { - gHBlankCopySize = 4; + gHBlankCopySize = sizeof(REG_WIN0H) * 2; if (bg & 1) { cursor = &((u8 *)gBgOffsetsHBlank)[2]; @@ -670,7 +876,7 @@ void sub_8007A08(u8 bg, u8 param1, u8 param2, u8 param3, u8 param4) gHBlankCopyTarget = (void *)®_WIN0H; } } else { - gHBlankCopySize = 2; + gHBlankCopySize = sizeof(REG_WIN0H); cursor = &((u8 *)gBgOffsetsHBlank)[0]; if (bg & 1) { @@ -706,7 +912,7 @@ void sub_8007A08(u8 bg, u8 param1, u8 param2, u8 param3, u8 param4) } #if ((GAME == GAME_SA1) || (GAME == GAME_SA2)) -void sub_8007AC0(u8 affineBg, int_vcount minY, int_vcount maxY) +void SA2_LABEL(sub_8007AC0)(u8 affineBg, int_vcount minY, int_vcount maxY) { u16 *cursor; u16 affine; @@ -725,7 +931,7 @@ void sub_8007AC0(u8 affineBg, int_vcount minY, int_vcount maxY) #endif *ptr = (void *)(REG_ADDR_BG2PA + bg); - gHBlankCopySize = 2; + gHBlankCopySize = sizeof(REG_BG2PA); cursor = &((u16 *)gBgOffsetsHBlank)[minY]; @@ -743,4 +949,4 @@ void sub_8007AC0(u8 affineBg, int_vcount minY, int_vcount maxY) } } #endif -#endif +#endif // COLLECT_RINGS_ROM diff --git a/src/core.c b/src/core.c index b576d71f63..babbf61e7b 100644 --- a/src/core.c +++ b/src/core.c @@ -679,7 +679,7 @@ static void VBlankIntr(void) gHBlankCopyTarget = NULL; } - if (gFlagsPreVBlank & FLAGS_EXECUTE_HBLANK_COPY0) { + if (gFlagsPreVBlank & FLAGS_40) { REG_DISPSTAT |= DISPSTAT_VCOUNT_INTR; REG_DISPSTAT &= 0xff; REG_DISPSTAT |= gUnknown_03002874 << 8; diff --git a/src/game/sa1_sa2_shared/spot_light.c b/src/game/sa1_sa2_shared/spot_light.c index a6ba82f18c..76aba40b6d 100644 --- a/src/game/sa1_sa2_shared/spot_light.c +++ b/src/game/sa1_sa2_shared/spot_light.c @@ -26,32 +26,32 @@ bool32 CreateSpotLightBeams(void) { struct Task *t = TaskCreate(Task_SpotLightMain, sizeof(StageSpotLight), 0x2000, 0, TaskDestructor_SpotLightMain); StageSpotLight *spotLight = TASK_DATA(t); - StageUnkTask *ut; + SpotlightBeamTask *beam; spotLight->unk8 = 0x600; spotLight->unkC = 0; spotLight->t0 = CreateSpotlightBeamTask(); - ut = TASK_DATA(spotLight->t0); - ut->unk6 = 60; - ut->unk8 = 200; - ut->unk0 = 0; - ut->unk2 = 32; - ut->unk4 = 0x400; - ut->unkA = 2; - ut->unkB = 0; + beam = TASK_DATA(spotLight->t0); + beam->unk6 = 60; + beam->unk8 = 200; + beam->unk0 = 0; + beam->unk2 = 32; + beam->unk4 = 0x400; + beam->bg = 2; + beam->unkB = 0; spotLight->t1 = CreateSpotlightBeamTask(); - ut = TASK_DATA(spotLight->t1); - ut->unk6 = 200; - ut->unk8 = 240; - ut->unk0 = 0; - ut->unk2 = 16; - ut->unk4 = 0x300; - ut->unkA = 3; - ut->unkB = 0; + beam = TASK_DATA(spotLight->t1); + beam->unk6 = 200; + beam->unk8 = 240; + beam->unk0 = 0; + beam->unk2 = 16; + beam->unk4 = 0x300; + beam->bg = 3; + beam->unkB = 0; return TRUE; } @@ -59,27 +59,27 @@ bool32 CreateSpotLightBeams(void) void Task_SpotLightMain(void) { StageSpotLight *spotLight = TASK_DATA(gCurTask); - StageUnkTask *ut; + SpotlightBeamTask *beam; s32 unkC; if (!(gStageFlags & STAGE_FLAG__100)) { - ut = TASK_DATA(spotLight->t0); + beam = TASK_DATA(spotLight->t0); - if (((gStageTime & 0x7) == 0) && (ut->unkB != 0) && (gDispCnt & DISPCNT_BG0_ON)) { + if (((gStageTime & 0x7) == 0) && (beam->unkB != 0) && (gDispCnt & DISPCNT_BG0_ON)) { - if (ut->unkB < 32) - ut->unkB++; + if (beam->unkB < 32) + beam->unkB++; - ut = TASK_DATA(spotLight->t1); + beam = TASK_DATA(spotLight->t1); - if (ut->unkB < 16) - ut->unkB++; + if (beam->unkB < 16) + beam->unkB++; } else if (!(gDispCnt & DISPCNT_BG0_ON)) { - if (ut->unkB == 0) { - ut->unkB = 4; + if (beam->unkB == 0) { + beam->unkB = 4; - ut = TASK_DATA(spotLight->t1); - ut->unkB = 4; + beam = TASK_DATA(spotLight->t1); + beam->unkB = 4; } else { // _0800A7F4 gDispCnt |= DISPCNT_BG0_ON; @@ -120,20 +120,20 @@ void Task_800A8E0(void) { bool32 boolR5 = FALSE; StageSpotLight *spotLight = TASK_DATA(gCurTask); - StageUnkTask *ut; + SpotlightBeamTask *beam; s32 unkC; - ut = TASK_DATA(spotLight->t0); - if (!(gStageTime & 0x1) && (ut->unkB != 0)) { - ut->unkB -= 2; - if (ut->unkB < 5) + beam = TASK_DATA(spotLight->t0); + if (!(gStageTime & 0x1) && (beam->unkB != 0)) { + beam->unkB -= 2; + if (beam->unkB < 5) boolR5 = TRUE; } - ut = TASK_DATA(spotLight->t1); - if (!(gStageTime & 0x1) && (ut->unkB != 0)) { - ut->unkB -= 1; - if (ut->unkB < 3) + beam = TASK_DATA(spotLight->t1); + if (!(gStageTime & 0x1) && (beam->unkB != 0)) { + beam->unkB -= 1; + if (beam->unkB < 3) boolR5 = TRUE; } diff --git a/src/game/sa1_sa2_shared/spot_light_beam_task.c b/src/game/sa1_sa2_shared/spot_light_beam_task.c index 39ef18ac33..8944efba1e 100644 --- a/src/game/sa1_sa2_shared/spot_light_beam_task.c +++ b/src/game/sa1_sa2_shared/spot_light_beam_task.c @@ -15,16 +15,16 @@ void TaskDestructor_SpotlightBeamTask(struct Task *); struct Task *CreateSpotlightBeamTask(void) { - struct Task *t = TaskCreate(Task_SpotlightBeamTask, sizeof(StageUnkTask), 0x2000, 0, TaskDestructor_SpotlightBeamTask); - StageUnkTask *ut = TASK_DATA(t); + struct Task *t = TaskCreate(Task_SpotlightBeamTask, sizeof(SpotlightBeamTask), 0x2000, 0, TaskDestructor_SpotlightBeamTask); + SpotlightBeamTask *beam = TASK_DATA(t); - ut->unk6 = 120; - ut->unk8 = 200; - ut->unk0 = 0; - ut->unk2 = 64; - ut->unk4 = 0x800; - ut->unkA = 0; - ut->unkB = 32; + beam->unk6 = 120; + beam->unk8 = 200; + beam->unk0 = 0; + beam->unk2 = 64; + beam->unk4 = 0x800; + beam->bg = 0; + beam->unkB = 32; return t; } @@ -65,7 +65,7 @@ NONMATCH("asm/non_matching/game/stage/Task_SpotlightBeamTask.inc", void Task_Spo u32 temp_r5; u32 temp_r5_2; - StageUnkTask *beam = TASK_DATA(gCurTask); + SpotlightBeamTask *beam = TASK_DATA(gCurTask); if (beam->unkB == 0) { return; @@ -171,40 +171,40 @@ NONMATCH("asm/non_matching/game/stage/Task_SpotlightBeamTask.inc", void Task_Spo return; } if (sp10.unk2 > (DISPLAY_HEIGHT - 1)) { - if (1 & beam->unkA) { + if (1 & beam->bg) { gWinRegs[WINREG_WIN1V] = WIN_RANGE(sp8.unk5, DISPLAY_HEIGHT); } else { gWinRegs[WINREG_WIN0V] = WIN_RANGE(sp8.unk5, DISPLAY_HEIGHT); } - sub_8006228(beam->unkA, sp8.unk4, sp8.unk5, sp8.unk6, sp8.unk7, 0); + sub_8006228(beam->bg, sp8.unk4, sp8.unk5, sp8.unk6, sp8.unk7, 0); return; } - if (1 & beam->unkA) { + if (1 & beam->bg) { gWinRegs[WINREG_WIN1V] = WIN_RANGE(sp8.unk5, DISPLAY_HEIGHT); } else { gWinRegs[WINREG_WIN0V] = WIN_RANGE(sp8.unk5, DISPLAY_HEIGHT); } - sub_800724C(beam->unkA, &sp8); + sub_800724C(beam->bg, &sp8); return; } if (sp10.unk2 <= (DISPLAY_HEIGHT - 1)) { if (sp14.unk2 > (DISPLAY_HEIGHT - 1)) { - if (beam->unkA & 0x1) { + if (beam->bg & 0x1) { gWinRegs[WINREG_WIN1V] = WIN_RANGE(sp8.unk1, DISPLAY_HEIGHT); } else { gWinRegs[WINREG_WIN0V] = WIN_RANGE(sp8.unk1, DISPLAY_HEIGHT); } - sub_80064A8(beam->unkA, sp8.unk0, sp8.unk1, sp8.unk2, (s32)sp8.unk3, 0); + sub_80064A8(beam->bg, sp8.unk0, sp8.unk1, sp8.unk2, (s32)sp8.unk3, 0); } else { - if (beam->unkA & 0x1) { + if (beam->bg & 0x1) { gWinRegs[WINREG_WIN1V] = WIN_RANGE(sp8.unk1, DISPLAY_HEIGHT); } else { gWinRegs[WINREG_WIN0V] = WIN_RANGE(sp8.unk1, DISPLAY_HEIGHT); } - sub_800724C(beam->unkA, &sp8); + sub_800724C(beam->bg, &sp8); } } } diff --git a/src/game/stage/camera.c b/src/game/stage/camera.c index 58e397902d..26e659913b 100644 --- a/src/game/stage/camera.c +++ b/src/game/stage/camera.c @@ -852,7 +852,7 @@ void StageBgUpdate_Zone1Acts12(s32 UNUSED a, s32 UNUSED b) } gBgScrollRegs[0][1] = gCamera.y >> 9; - gFlags |= 4; + gFlags |= FLAGS_EXECUTE_HBLANK_COPY; gHBlankCopyTarget = (void *)REG_ADDR_BG3HOFS; gHBlankCopySize = 4; cursor = gBgOffsetsHBlank; @@ -2235,9 +2235,9 @@ void TaskDestructor_Camera(struct Task *unused) } #ifndef COLLECT_RINGS_ROM - if (IS_EXTRA_STAGE(gCurrentLevel) && (gFlags & FLAGS_EXECUTE_HBLANK_COPY0)) { + if (IS_EXTRA_STAGE(gCurrentLevel) && (gFlags & FLAGS_40)) { gIntrTable[INTR_INDEX_VCOUNT] = gIntrTableTemplate[INTR_INDEX_VCOUNT]; - gFlags &= ~FLAGS_EXECUTE_HBLANK_COPY0; + gFlags &= ~FLAGS_40; } #endif diff --git a/src/game/title_screen.c b/src/game/title_screen.c index 3a28388ccf..bbf82522bc 100644 --- a/src/game/title_screen.c +++ b/src/game/title_screen.c @@ -1472,7 +1472,7 @@ static void WavesBackgroundAnim(TitleScreen *titleScreen) gFlags |= FLAGS_EXECUTE_HBLANK_CALLBACKS; gFlags |= FLAGS_EXECUTE_HBLANK_COPY; - gHBlankCopySize = 16; + gHBlankCopySize = sizeof(BgAffineReg); gHBlankCopyTarget = (void *)REG_ADDR_BG2PA; // TODO: not sure unk3F4 is the correct type diff --git a/src/game/water_effects.c b/src/game/water_effects.c index ca4fdf2157..42fa8b34a8 100644 --- a/src/game/water_effects.c +++ b/src/game/water_effects.c @@ -235,10 +235,10 @@ static void Task_StageWaterTask(void) if ((unk2_2 = unk2_0 - 1) < DISPLAY_HEIGHT - 1) { gIntrTable[INTR_INDEX_VCOUNT] = VCountIntr_8011ACC; gUnknown_03002874 = unk2_2; - gFlags |= FLAGS_EXECUTE_HBLANK_COPY0; + gFlags |= FLAGS_40; } else { gIntrTable[INTR_INDEX_VCOUNT] = gIntrTableTemplate[INTR_INDEX_VCOUNT]; - gFlags &= ~FLAGS_EXECUTE_HBLANK_COPY0; + gFlags &= ~FLAGS_40; } } @@ -325,7 +325,7 @@ static void TaskDestructor_WaterSurface(struct Task *t) { Water *water = &gWater; - gFlags &= ~FLAGS_EXECUTE_HBLANK_COPY0; + gFlags &= ~FLAGS_40; gIntrTable[INTR_INDEX_VCOUNT] = gIntrTableTemplate[INTR_INDEX_VCOUNT]; water->t = NULL; }