diff --git a/asm/non_matching/objectB9/sub_080A1270.inc b/asm/non_matching/objectB9/sub_080A1270.inc new file mode 100644 index 00000000..5079781b --- /dev/null +++ b/asm/non_matching/objectB9/sub_080A1270.inc @@ -0,0 +1,144 @@ + .syntax unified + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #8 + mov sb, r0 + movs r6, #0 + ldr r0, [r0, #0x64] + str r0, [sp, #4] + mov r4, sb + adds r4, #0x70 + ldr r0, _080A12F8 @ =gRoomControls + movs r2, #0xd8 + lsls r2, r2, #2 + adds r1, r2, #0 + ldrh r3, [r0, #6] + adds r1, r1, r3 + movs r7, #0xd4 + lsls r7, r7, #2 + adds r2, r7, #0 + ldrh r0, [r0, #8] + adds r2, r2, r0 + lsls r1, r1, #0x10 + asrs r1, r1, #0x10 + mov r8, r1 + lsls r2, r2, #0x10 + asrs r3, r2, #0x10 + movs r0, #9 + mov sl, r0 + movs r1, #1 + rsbs r1, r1, #0 + adds r5, r1, #0 +_080A12B2: + ldr r7, [sp, #4] + ldr r2, [r7] + movs r0, #0 + ldrsb r0, [r4, r0] + cmp r0, #0 + bne _080A1300 + ldr r0, [r2, #4] + cmp r0, #0 + beq _080A132C + cmp r2, #0 + beq _080A132C + movs r1, #0x2e + ldrsh r0, [r2, r1] + cmp r8, r0 + bgt _080A132E + movs r7, #0x32 + ldrsh r0, [r2, r7] + cmp r3, r0 + bgt _080A132E + ldrb r0, [r2, #0xa] + adds r0, #1 + strb r0, [r4] + movs r0, #1 + strb r0, [r2, #0xb] + adds r6, #1 + ldr r1, _080A12FC @ =CuccoMinigame_Sounds + ldrb r0, [r2, #0xa] + lsls r0, r0, #1 + adds r0, r0, r1 + ldrh r0, [r0] + str r3, [sp] + bl SoundReq + ldr r3, [sp] + b _080A132E + .align 2, 0 +_080A12F8: .4byte gRoomControls +_080A12FC: .4byte CuccoMinigame_Sounds +_080A1300: + cmp r0, #0 + ble _080A132E + adds r6, #1 + ldr r0, [r2, #4] + cmp r0, #0 + beq _080A132C + cmp r2, #0 + beq _080A132C + mov r1, r8 + adds r1, #4 + movs r7, #0x2e + ldrsh r0, [r2, r7] + cmp r1, r0 + ble _080A131E + strh r1, [r2, #0x2e] +_080A131E: + adds r1, r3, #4 + movs r7, #0x32 + ldrsh r0, [r2, r7] + cmp r1, r0 + ble _080A132E + strh r1, [r2, #0x32] + b _080A132E +_080A132C: + strb r5, [r4] +_080A132E: + movs r0, #1 + rsbs r0, r0, #0 + add sl, r0 + adds r4, #1 + ldr r1, [sp, #4] + adds r1, #4 + str r1, [sp, #4] + mov r2, sl + cmp r2, #0 + bge _080A12B2 + mov r0, sb + adds r0, #0x6a + strh r6, [r0] + ldr r0, _080A136C @ =gPlayerState + adds r0, #0x27 + movs r1, #0xff + strb r1, [r0] + mov r1, sb + adds r1, #0x68 + ldrh r0, [r1] + subs r0, #1 + strh r0, [r1] + lsls r0, r0, #0x10 + cmp r0, #0 + bgt _080A1370 + movs r0, #0xe2 + bl SoundReq + bl sub_08050384 + b _080A1376 + .align 2, 0 +_080A136C: .4byte gPlayerState +_080A1370: + ldr r1, _080A1384 @ =gActiveScriptInfo + movs r0, #0 + strb r0, [r1, #6] +_080A1376: + add sp, #8 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7, pc} + .align 2, 0 + _080A1384: .4byte gActiveScriptInfo + .syntax divided diff --git a/asm/object/objectB9.s b/asm/object/objectB9.s deleted file mode 100644 index 4741530f..00000000 --- a/asm/object/objectB9.s +++ /dev/null @@ -1,638 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start ObjectB9 -ObjectB9: @ 0x080A1204 - push {r4, r5, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - adds r5, r0, #0 - cmp r5, #0 - bne _080A1260 - adds r0, #1 - strb r0, [r4, #0xc] - bl sub_080A1514 - lsls r0, r0, #2 - ldr r1, _080A126C @ =gUnk_08124C20 - adds r0, r0, r1 - ldrh r2, [r0] - lsls r1, r2, #4 - subs r1, r1, r2 - lsls r1, r1, #2 - adds r2, r4, #0 - adds r2, #0x68 - strh r1, [r2] - adds r1, r4, #0 - adds r1, #0x6a - strh r5, [r1] - ldrh r1, [r0, #2] - adds r0, r4, #0 - adds r0, #0x6c - strh r1, [r0] - adds r1, r4, #0 - adds r1, #0x6e - movs r0, #1 - strh r0, [r1] - adds r0, r4, #0 - adds r0, #0x70 - movs r2, #0 - movs r1, #9 -_080A124A: - strb r2, [r0] - adds r0, #1 - subs r1, #1 - cmp r1, #0 - bge _080A124A - adds r0, r4, #0 - bl sub_0807DD64 - adds r0, r4, #0 - bl sub_0806EC20 -_080A1260: - adds r0, r4, #0 - movs r1, #0 - bl sub_0807DD94 - pop {r4, r5, pc} - .align 2, 0 -_080A126C: .4byte gUnk_08124C20 - - thumb_func_start sub_080A1270 -sub_080A1270: @ 0x080A1270 - push {r4, r5, r6, r7, lr} - mov r7, sl - mov r6, sb - mov r5, r8 - push {r5, r6, r7} - sub sp, #8 - mov sb, r0 - movs r6, #0 - ldr r0, [r0, #0x64] - str r0, [sp, #4] - mov r4, sb - adds r4, #0x70 - ldr r0, _080A12F8 @ =gRoomControls - movs r2, #0xd8 - lsls r2, r2, #2 - adds r1, r2, #0 - ldrh r3, [r0, #6] - adds r1, r1, r3 - movs r7, #0xd4 - lsls r7, r7, #2 - adds r2, r7, #0 - ldrh r0, [r0, #8] - adds r2, r2, r0 - lsls r1, r1, #0x10 - asrs r1, r1, #0x10 - mov r8, r1 - lsls r2, r2, #0x10 - asrs r3, r2, #0x10 - movs r0, #9 - mov sl, r0 - movs r1, #1 - rsbs r1, r1, #0 - adds r5, r1, #0 -_080A12B2: - ldr r7, [sp, #4] - ldr r2, [r7] - movs r0, #0 - ldrsb r0, [r4, r0] - cmp r0, #0 - bne _080A1300 - ldr r0, [r2, #4] - cmp r0, #0 - beq _080A132C - cmp r2, #0 - beq _080A132C - movs r1, #0x2e - ldrsh r0, [r2, r1] - cmp r8, r0 - bgt _080A132E - movs r7, #0x32 - ldrsh r0, [r2, r7] - cmp r3, r0 - bgt _080A132E - ldrb r0, [r2, #0xa] - adds r0, #1 - strb r0, [r4] - movs r0, #1 - strb r0, [r2, #0xb] - adds r6, #1 - ldr r1, _080A12FC @ =gUnk_08124EC8 - ldrb r0, [r2, #0xa] - lsls r0, r0, #1 - adds r0, r0, r1 - ldrh r0, [r0] - str r3, [sp] - bl SoundReq - ldr r3, [sp] - b _080A132E - .align 2, 0 -_080A12F8: .4byte gRoomControls -_080A12FC: .4byte gUnk_08124EC8 -_080A1300: - cmp r0, #0 - ble _080A132E - adds r6, #1 - ldr r0, [r2, #4] - cmp r0, #0 - beq _080A132C - cmp r2, #0 - beq _080A132C - mov r1, r8 - adds r1, #4 - movs r7, #0x2e - ldrsh r0, [r2, r7] - cmp r1, r0 - ble _080A131E - strh r1, [r2, #0x2e] -_080A131E: - adds r1, r3, #4 - movs r7, #0x32 - ldrsh r0, [r2, r7] - cmp r1, r0 - ble _080A132E - strh r1, [r2, #0x32] - b _080A132E -_080A132C: - strb r5, [r4] -_080A132E: - movs r0, #1 - rsbs r0, r0, #0 - add sl, r0 - adds r4, #1 - ldr r1, [sp, #4] - adds r1, #4 - str r1, [sp, #4] - mov r2, sl - cmp r2, #0 - bge _080A12B2 - mov r0, sb - adds r0, #0x6a - strh r6, [r0] - ldr r0, _080A136C @ =gPlayerState - adds r0, #0x27 - movs r1, #0xff - strb r1, [r0] - mov r1, sb - adds r1, #0x68 - ldrh r0, [r1] - subs r0, #1 - strh r0, [r1] - lsls r0, r0, #0x10 - cmp r0, #0 - bgt _080A1370 - movs r0, #0xe2 - bl SoundReq - bl sub_08050384 - b _080A1376 - .align 2, 0 -_080A136C: .4byte gPlayerState -_080A1370: - ldr r1, _080A1384 @ =gActiveScriptInfo - movs r0, #0 - strb r0, [r1, #6] -_080A1376: - add sp, #8 - pop {r3, r4, r5} - mov r8, r3 - mov sb, r4 - mov sl, r5 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_080A1384: .4byte gActiveScriptInfo - - thumb_func_start sub_080A1388 -sub_080A1388: @ 0x080A1388 - push {r4, r5, r6, lr} - adds r5, r0, #0 - adds r5, #0x70 - ldr r4, [r0, #0x64] - movs r6, #9 -_080A1392: - ldr r1, [r4] - movs r0, #0 - ldrsb r0, [r5, r0] - cmp r0, #0 - blt _080A13A6 - cmp r1, #0 - beq _080A13A6 - adds r0, r1, #0 - bl DeleteEntityAny -_080A13A6: - subs r6, #1 - adds r5, #1 - adds r4, #4 - cmp r6, #0 - bge _080A1392 - pop {r4, r5, r6, pc} - .align 2, 0 - - thumb_func_start sub_080A13B4 -sub_080A13B4: @ 0x080A13B4 - push {r4, lr} - adds r4, r1, #0 - adds r1, r0, #0 - adds r1, #0x6a - adds r0, #0x6c - movs r2, #0 - ldrsh r1, [r1, r2] - movs r2, #0 - ldrsh r0, [r0, r2] - cmp r1, r0 - blt _080A13D8 - ldr r0, _080A13D4 @ =0x0000300C - bl MessageFromTarget - movs r0, #1 - b _080A13E0 - .align 2, 0 -_080A13D4: .4byte 0x0000300C -_080A13D8: - ldr r0, _080A13E4 @ =0x00003005 - bl MessageFromTarget - movs r0, #0 -_080A13E0: - str r0, [r4, #0x14] - pop {r4, pc} - .align 2, 0 -_080A13E4: .4byte 0x00003005 - - thumb_func_start sub_080A13E8 -sub_080A13E8: @ 0x080A13E8 - push {r4, r5, r6, lr} - adds r5, r0, #0 - bl sub_080A1514 - lsls r0, r0, #2 - ldr r1, _080A1408 @ =gUnk_08124EA0 - adds r4, r0, r1 - movs r6, #0 - ldrb r0, [r4] - cmp r0, #0x5c - beq _080A141C - cmp r0, #0x5c - bgt _080A140C - cmp r0, #0x3f - beq _080A1412 - b _080A1444 - .align 2, 0 -_080A1408: .4byte gUnk_08124EA0 -_080A140C: - cmp r0, #0x63 - beq _080A1430 - b _080A1444 -_080A1412: - ldr r0, _080A1418 @ =gSave - adds r0, #0xbb - b _080A1424 - .align 2, 0 -_080A1418: .4byte gSave -_080A141C: - ldr r0, _080A142C @ =gSave - movs r1, #0x8b - lsls r1, r1, #1 - adds r0, r0, r1 -_080A1424: - ldrb r0, [r0] - cmp r0, #0 - beq _080A1444 - b _080A1454 - .align 2, 0 -_080A142C: .4byte gSave -_080A1430: - movs r0, #0x4f - bl CheckGlobalFlag - cmp r0, #0 - bne _080A1442 - movs r0, #0x4f - bl SetGlobalFlag - b _080A1444 -_080A1442: - movs r6, #1 -_080A1444: - cmp r6, #0 - bne _080A1454 - ldrb r0, [r4] - ldrb r1, [r4, #1] - movs r2, #0 - bl sub_080A7C18 - b _080A145C -_080A1454: - adds r1, r5, #0 - adds r1, #0x6e - movs r0, #2 - strh r0, [r1] -_080A145C: - pop {r4, r5, r6, pc} - .align 2, 0 - - thumb_func_start sub_080A1460 -sub_080A1460: @ 0x080A1460 - push {r4, r5, lr} - adds r5, r0, #0 - bl sub_080A1514 - adds r1, r5, #0 - adds r1, #0x70 - movs r4, #0 - ldr r3, _080A149C @ =gUnk_08124ECC - movs r2, #9 -_080A1472: - movs r0, #0 - ldrsb r0, [r1, r0] - adds r0, r0, r3 - ldrb r0, [r0] - adds r4, r4, r0 - adds r1, #1 - subs r2, #1 - cmp r2, #0 - bge _080A1472 - adds r0, r4, #0 - bl ModRupees - ldr r0, _080A14A0 @ =0x00003007 - adds r1, r5, #0 - bl MessageNoOverlap - ldr r1, _080A14A4 @ =gMessage - lsls r0, r4, #0x10 - lsrs r0, r0, #0x10 - str r0, [r1, #0x10] - pop {r4, r5, pc} - .align 2, 0 -_080A149C: .4byte gUnk_08124ECC -_080A14A0: .4byte 0x00003007 -_080A14A4: .4byte gMessage - - thumb_func_start sub_080A14A8 -sub_080A14A8: @ 0x080A14A8 - push {r4, lr} - bl sub_080A1514 - adds r4, r0, #0 - adds r4, #1 - cmp r4, #9 - ble _080A14B8 - movs r4, #9 -_080A14B8: - movs r0, #1 - ands r0, r4 - cmp r0, #0 - beq _080A14C8 - movs r0, #0x4b - bl SetGlobalFlag - b _080A14CE -_080A14C8: - movs r0, #0x4b - bl ClearGlobalFlag -_080A14CE: - movs r0, #2 - ands r0, r4 - cmp r0, #0 - beq _080A14DE - movs r0, #0x4c - bl SetGlobalFlag - b _080A14E4 -_080A14DE: - movs r0, #0x4c - bl ClearGlobalFlag -_080A14E4: - movs r0, #4 - ands r0, r4 - cmp r0, #0 - beq _080A14F4 - movs r0, #0x4d - bl SetGlobalFlag - b _080A14FA -_080A14F4: - movs r0, #0x4d - bl ClearGlobalFlag -_080A14FA: - movs r0, #8 - ands r0, r4 - cmp r0, #0 - beq _080A150A - movs r0, #0x4e - bl SetGlobalFlag - b _080A1510 -_080A150A: - movs r0, #0x4e - bl ClearGlobalFlag -_080A1510: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_080A1514 -sub_080A1514: @ 0x080A1514 - push {r4, lr} - movs r0, #0x4b - bl CheckGlobalFlag - rsbs r1, r0, #0 - orrs r1, r0 - lsrs r4, r1, #0x1f - movs r0, #0x4c - bl CheckGlobalFlag - cmp r0, #0 - beq _080A1530 - movs r0, #2 - orrs r4, r0 -_080A1530: - movs r0, #0x4d - bl CheckGlobalFlag - cmp r0, #0 - beq _080A153E - movs r0, #4 - orrs r4, r0 -_080A153E: - movs r0, #0x4e - bl CheckGlobalFlag - cmp r0, #0 - beq _080A154C - movs r0, #8 - orrs r4, r0 -_080A154C: - adds r0, r4, #0 - pop {r4, pc} - - thumb_func_start sub_080A1550 -sub_080A1550: @ 0x080A1550 - push {r4, r5, r6, r7, lr} - mov r7, sb - mov r6, r8 - push {r6, r7} - mov r8, r1 - movs r0, #0 - str r0, [r1, #0x14] - movs r0, #0xb9 - movs r1, #0 - movs r2, #0 - bl CreateObject - adds r4, r0, #0 - cmp r4, #0 - beq _080A15FE - movs r0, #0x28 - bl zMalloc - str r0, [r4, #0x64] - cmp r0, #0 - bne _080A1582 - adds r0, r4, #0 - bl DeleteEntityAny - b _080A15FE -_080A1582: - mov r0, r8 - ldr r1, [r0, #4] - adds r0, r4, #0 - bl StartCutscene - adds r1, r4, #0 - adds r1, #0x84 - str r0, [r1] - bl sub_080A1514 - lsls r1, r0, #4 - subs r1, r1, r0 - lsls r1, r1, #2 - ldr r0, _080A15B4 @ =gUnk_08124C48 - adds r5, r1, r0 - ldr r4, [r4, #0x64] - mov sb, r4 - ldr r7, _080A15B8 @ =gRoomControls - movs r6, #9 -_080A15A8: - movs r1, #0 - ldrsh r0, [r5, r1] - cmp r0, #0 - bgt _080A15BC - movs r4, #0 - b _080A15E6 - .align 2, 0 -_080A15B4: .4byte gUnk_08124C48 -_080A15B8: .4byte gRoomControls -_080A15BC: - movs r0, #0 - ldrsh r1, [r5, r0] - subs r1, #1 - movs r0, #0x41 - bl CreateEnemy - adds r4, r0, #0 - cmp r4, #0 - beq _080A15E6 - ldrh r0, [r5, #2] - ldrh r1, [r7, #6] - adds r0, r0, r1 - strh r0, [r4, #0x2e] - ldrh r0, [r5, #4] - ldrh r1, [r7, #8] - adds r0, r0, r1 - strh r0, [r4, #0x32] - adds r1, r4, #0 - adds r1, #0x38 - movs r0, #1 - strb r0, [r1] -_080A15E6: - mov r0, sb - adds r0, #4 - mov sb, r0 - subs r0, #4 - stm r0!, {r4} - subs r6, #1 - adds r5, #6 - cmp r6, #0 - bge _080A15A8 - movs r0, #1 - mov r1, r8 - str r0, [r1, #0x14] -_080A15FE: - pop {r3, r4} - mov r8, r3 - mov sb, r4 - pop {r4, r5, r6, r7, pc} - .align 2, 0 - - thumb_func_start sub_080A1608 -sub_080A1608: @ 0x080A1608 - push {r4, lr} - ldr r4, _080A163C @ =0x00003002 - movs r0, #1 - bl CheckRoomFlag - cmp r0, #0 - beq _080A1618 - adds r4, #4 -_080A1618: - adds r0, r4, #0 - bl MessageFromTarget - ldr r4, _080A1640 @ =gMessage - movs r1, #0 - movs r0, #1 - strb r0, [r4, #6] - strb r1, [r4, #7] - bl sub_080A1514 - lsls r0, r0, #2 - ldr r1, _080A1644 @ =gUnk_08124C20 - adds r0, r0, r1 - ldrh r1, [r0] - str r1, [r4, #0x10] - ldrh r0, [r0, #2] - str r0, [r4, #0x14] - pop {r4, pc} - .align 2, 0 -_080A163C: .4byte 0x00003002 -_080A1640: .4byte gMessage -_080A1644: .4byte gUnk_08124C20 - - thumb_func_start sub_080A1648 -sub_080A1648: @ 0x080A1648 - push {r4, lr} - ldr r4, _080A1684 @ =0x0000407F - ldr r1, _080A1688 @ =0x00000D36 - adds r0, r4, #0 - movs r2, #1 - bl SetTileType - ldr r1, _080A168C @ =0x00000D37 - adds r0, r4, #0 - movs r2, #1 - bl SetTileType - ldr r1, _080A1690 @ =0x00000D38 - adds r0, r4, #0 - movs r2, #1 - bl SetTileType - subs r4, #1 - ldr r1, _080A1694 @ =0x00000D75 - adds r0, r4, #0 - movs r2, #1 - bl SetTileType - ldr r1, _080A1698 @ =0x00000E75 - adds r0, r4, #0 - movs r2, #1 - bl SetTileType - pop {r4, pc} - .align 2, 0 -_080A1684: .4byte 0x0000407F -_080A1688: .4byte 0x00000D36 -_080A168C: .4byte 0x00000D37 -_080A1690: .4byte 0x00000D38 -_080A1694: .4byte 0x00000D75 -_080A1698: .4byte 0x00000E75 - - thumb_func_start sub_080A169C -sub_080A169C: @ 0x080A169C - push {lr} - ldr r0, _080A16C8 @ =0x00000D36 - movs r1, #1 - bl sub_0807BA8C - ldr r0, _080A16CC @ =0x00000D37 - movs r1, #1 - bl sub_0807BA8C - ldr r0, _080A16D0 @ =0x00000D38 - movs r1, #1 - bl sub_0807BA8C - ldr r0, _080A16D4 @ =0x00000D75 - movs r1, #1 - bl sub_0807BA8C - ldr r0, _080A16D8 @ =0x00000E75 - movs r1, #1 - bl sub_0807BA8C - pop {pc} - .align 2, 0 -_080A16C8: .4byte 0x00000D36 -_080A16CC: .4byte 0x00000D37 -_080A16D0: .4byte 0x00000D38 -_080A16D4: .4byte 0x00000D75 -_080A16D8: .4byte 0x00000E75 diff --git a/assets/assets.json b/assets/assets.json index d50b6ab8..72b7e899 100644 --- a/assets/assets.json +++ b/assets/assets.json @@ -45043,31 +45043,6 @@ "size": 83, "type": "animation" }, - { - "path": "objectB9/gUnk_08124C20.bin", - "start": 1199136, - "size": 40 - }, - { - "path": "objectB9/gUnk_08124C48.bin", - "start": 1199176, - "size": 600 - }, - { - "path": "objectB9/gUnk_08124EA0.bin", - "start": 1199776, - "size": 40 - }, - { - "path": "objectB9/gUnk_08124EC8.bin", - "start": 1199816, - "size": 4 - }, - { - "path": "objectB9/gUnk_08124ECC.bin", - "start": 1199820, - "size": 4 - }, { "path": "windcrest/gUnk_08125010.bin", "start": 1200144, diff --git a/data/const/object/objectB9.s b/data/const/object/objectB9.s deleted file mode 100644 index 7a5da340..00000000 --- a/data/const/object/objectB9.s +++ /dev/null @@ -1,21 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_08124C20:: @ 08124C20 - .incbin "objectB9/gUnk_08124C20.bin" - -gUnk_08124C48:: @ 08124C48 - .incbin "objectB9/gUnk_08124C48.bin" - -gUnk_08124EA0:: @ 08124EA0 - .incbin "objectB9/gUnk_08124EA0.bin" - -gUnk_08124EC8:: @ 08124EC8 - .incbin "objectB9/gUnk_08124EC8.bin" - -gUnk_08124ECC:: @ 08124ECC - .incbin "objectB9/gUnk_08124ECC.bin" - diff --git a/data/scripts/hyruleTown/script_Anju.inc b/data/scripts/hyruleTown/script_Anju.inc index 627bc9b1..b6cb6bb4 100644 --- a/data/scripts/hyruleTown/script_Anju.inc +++ b/data/scripts/hyruleTown/script_Anju.inc @@ -19,7 +19,7 @@ script_0801015A: Call sub_080A1608 WaitUntilTextboxCloses EnablePlayerControl - CallWithArg sub_080A1550, script_080101AC + CallWithArg CuccoMinigame_Init, script_080101AC JumpIfNot script_0801015A PlayBgm BGM_CUCCO_MINIGAME SetRoomFlag 0x0001 @@ -49,7 +49,7 @@ script_080101AC: Call sub_0807FB74 _0807E8E4_1 Call SetPlayerCollisionLayer1 - Call sub_080A1388 + Call CuccoMinigame_Cleanup Call sub_0806EC38 BeginBlock MoveEntityToPlayer diff --git a/include/message.h b/include/message.h index c0164810..d0fc84a9 100644 --- a/include/message.h +++ b/include/message.h @@ -17,7 +17,7 @@ typedef struct { u16 textIndex; u16 unk2; // HI? u32 field_0xc; - u32 field_0x10; + u32 rupees; u32 field_0x14; u32 field_0x18; u32 field_0x1c; diff --git a/include/object.h b/include/object.h index 5d6cb713..ef3d2d08 100644 --- a/include/object.h +++ b/include/object.h @@ -215,7 +215,7 @@ typedef enum { OBJECT_B6, WELL, WIND_TRIBE_TELEPORTER, - OBJECT_B9, + CUCCO_MINIGAME, GYORG_BOSS_OBJECT, WINDCREST, LIT_AREA, diff --git a/linker.ld b/linker.ld index a05b5662..f7c36179 100644 --- a/linker.ld +++ b/linker.ld @@ -810,7 +810,7 @@ SECTIONS { src/object/objectB6.o(.text); src/object/well.o(.text); src/object/windTribeTeleporter.o(.text); - asm/object/objectB9.o(.text); + src/object/cuccoMinigame.o(.text); src/object/gyorgBossObject.o(.text); src/object/windcrest.o(.text); src/object/litArea.o(.text); @@ -1565,7 +1565,7 @@ SECTIONS { data/animations/object/objectB4.o(.rodata); data/const/object/well.o(.rodata); src/object/windTribeTeleporter.o(.rodata); - data/const/object/objectB9.o(.rodata); + src/object/cuccoMinigame.o(.rodata); src/object/gyorgBossObject.o(.rodata); data/const/object/windcrest.o(.rodata); src/object/objectBD.o(.rodata); diff --git a/src/enemy/businessScrub.c b/src/enemy/businessScrub.c index 8283894b..45cf55b8 100644 --- a/src/enemy/businessScrub.c +++ b/src/enemy/businessScrub.c @@ -384,7 +384,7 @@ void sub_08028F0C(Entity* this) { SetPlayerControl(1); } MessageFromTarget(dialog); - gMessage.field_0x10 = offer->price; + gMessage.rupees = offer->price; } } diff --git a/src/message.c b/src/message.c index b10d00a1..d19e9f9f 100644 --- a/src/message.c +++ b/src/message.c @@ -818,7 +818,7 @@ void sub_08056F88(u32 unk_1, u32 unk_2) { } static void sub_08056FBC(TextRender* ctb) { - sub_08056FEC(ctb->message.field_0x10, &ctb->_66[0x2]); + sub_08056FEC(ctb->message.rupees, &ctb->_66[0x2]); sub_08056FEC(ctb->message.field_0x14, &ctb->_66[0xa]); sub_08056FEC(ctb->message.field_0x18, &ctb->_77[0x1]); sub_08056FEC(ctb->message.field_0x1c, &ctb->_77[0x9]); diff --git a/src/npc/goronMerchant.c b/src/npc/goronMerchant.c index 9a0cf266..3cb1a668 100644 --- a/src/npc/goronMerchant.c +++ b/src/npc/goronMerchant.c @@ -77,7 +77,7 @@ void sub_08069654(Entity* this) { void sub_08069660(Entity* this) { MessageNoOverlap(0x2c1c, this); - gMessage.field_0x10 = (u16)GoronMerchant_GetSalePrice(this); + gMessage.rupees = (u16)GoronMerchant_GetSalePrice(this); } void sub_08069684(void) { diff --git a/src/npc/picolyteBottle.c b/src/npc/picolyteBottle.c index 6dbf5010..dec3e542 100644 --- a/src/npc/picolyteBottle.c +++ b/src/npc/picolyteBottle.c @@ -175,7 +175,7 @@ void sub_0806E140(PicolyteBottleEntity* this, ScriptExecutionContext* context) { MessageFromTarget(0x421b); } else { MessageFromTarget(0x4218); - gMessage.field_0x10 = this->unk76; + gMessage.rupees = this->unk76; } } else { context->condition = 0; @@ -201,7 +201,7 @@ void sub_0806E1FC(PicolyteBottleEntity* this) { void sub_0806E20C(void) { if (gRoomTransition.field_0x6 != 0) { MessageFromTarget(0x421f); - gMessage.field_0x10 = gRoomTransition.field_0x6; + gMessage.rupees = gRoomTransition.field_0x6; } else { MessageFromTarget(0x4220); } diff --git a/src/npc/stockwell.c b/src/npc/stockwell.c index e72cb9c0..d305d835 100644 --- a/src/npc/stockwell.c +++ b/src/npc/stockwell.c @@ -66,7 +66,7 @@ void sub_080650CC(Entity* this) { MessageNoOverlap(confirmMsgId, this); //! @bug itemPrice (r8) is not initialized if gRoomVars.shopItemType == 0 - gMessage.field_0x10 = (u16)itemPrice; + gMessage.rupees = (u16)itemPrice; } else if ((this->frame & 0x40)) { InitializeAnimation(this, gUnk_0810FDB8[Random() & 0xf]); } else { diff --git a/src/npc/tingleSiblings.c b/src/npc/tingleSiblings.c index 82eb9ee2..d7628afe 100644 --- a/src/npc/tingleSiblings.c +++ b/src/npc/tingleSiblings.c @@ -171,7 +171,7 @@ void sub_08064F28(Entity* this, ScriptExecutionContext* context) { } MessageNoOverlap(TingleSiblings_MessageIndices[this->type][uVar5], this); if (iVar4 > 0) { - gMessage.field_0x10 = (u16)iVar4; + gMessage.rupees = (u16)iVar4; } if (CheckRoomFlag(roomFlag) == 0) { diff --git a/src/object.c b/src/object.c index da1eb312..060876d7 100644 --- a/src/object.c +++ b/src/object.c @@ -187,7 +187,7 @@ void (*const gObjectFunctions[])(Entity*) = { [OBJECT_B6] = ObjectB6, [WELL] = Well, [WIND_TRIBE_TELEPORTER] = WindTribeTeleporter, - [OBJECT_B9] = ObjectB9, + [CUCCO_MINIGAME] = ObjectB9, [GYORG_BOSS_OBJECT] = GyorgBossObject, [WINDCREST] = Windcrest, [LIT_AREA] = LitArea, diff --git a/src/object/cuccoMinigame.c b/src/object/cuccoMinigame.c new file mode 100644 index 00000000..19f63c3f --- /dev/null +++ b/src/object/cuccoMinigame.c @@ -0,0 +1,358 @@ +#define NENT_DEPRECATED +#include "entity.h" +#include "script.h" +#include "npc.h" +#include "fileselect.h" +#include "functions.h" +#include "object.h" +#include "enemy.h" + +typedef struct { + Entity base; + s16 unk68; + s16 unk6a; + s16 unk6c; + u16 unk6e; + u8 unk70[0x18]; +} ObjectB9Entity; + +typedef Entity* ObjectB9Heap[10]; + +u32 sub_080A1514(); + +const u16 gUnk_08124C20[] = { + 25, 0x2, 25, 0x3, 30, 0x4, 45, 0x5, 50, 0x5, 45, 0x5, 50, 0x6, 60, 0x7, 55, 0x2, 55, 0x3, +}; + +static const u16 pObjectB9_MinigameCuccoDefs[][30] = { + { 0x0001, 0x02E9, 0x0318, 0x0001, 0x0280, 0x0380, 0x0002, 0x0277, 0x0314, 0x0001, + 0x0332, 0x0248, 0x0001, 0x0257, 0x028C, 0x0001, 0x0199, 0x031B, 0x0001, 0x0321, + 0x01B4, 0x0002, 0x02DF, 0x01D8, 0x0001, 0x03AD, 0x02DE, 0x0001, 0x0216, 0x01CC }, + { 0x0001, 0x02E9, 0x0318, 0x0001, 0x0280, 0x0380, 0x0002, 0x0277, 0x0314, 0x0001, + 0x0332, 0x0248, 0x0001, 0x0257, 0x028C, 0x0001, 0x0199, 0x031B, 0x0001, 0x0321, + 0x01B4, 0x0002, 0x02DF, 0x01D8, 0x0001, 0x03AD, 0x02DE, 0x0001, 0x0216, 0x01CC }, + { 0x0001, 0x02E9, 0x0318, 0x0001, 0x0280, 0x0380, 0x0002, 0x0277, 0x0314, 0x0001, + 0x0332, 0x0248, 0x0001, 0x0257, 0x028C, 0x0001, 0x0199, 0x031B, 0x0001, 0x0321, + 0x01B4, 0x0002, 0x02DF, 0x01D8, 0x0001, 0x03AD, 0x02DE, 0x0001, 0x0216, 0x01CC }, + { + 0x0002, 0x02F6, 0x0346, 0x0001, 0x0266, 0x033C, 0x0001, 0x0319, 0x0296, 0x0001, + 0x0284, 0x0284, 0x0002, 0x0216, 0x0284, 0x0001, 0x0142, 0x0330, 0x0002, 0x0179, + 0x039F, 0x0001, 0x03A6, 0x0280, 0x0001, 0x039A, 0x015D, 0x0001, 0x031E, 0x01E5, + }, + { 0x0001, 0x0296, 0x0314, 0x0001, 0x02E6, 0x0231, 0x0001, 0x0254, 0x0290, 0x0001, + 0x01F8, 0x0325, 0x0001, 0x0185, 0x0367, 0x0001, 0x0320, 0x01D6, 0x0002, 0x01F8, + 0x0287, 0x0002, 0x029D, 0x01B1, 0x0002, 0x01F9, 0x022D, 0x0002, 0x0114, 0x0321 }, + { 0x0002, 0x02F6, 0x0346, 0x0001, 0x0266, 0x033C, 0x0001, 0x0319, 0x0296, 0x0001, + 0x0284, 0x0284, 0x0002, 0x0216, 0x0284, 0x0001, 0x0142, 0x0330, 0x0002, 0x0179, + 0x039F, 0x0002, 0x022D, 0x01CB, 0x0001, 0x039A, 0x015D, 0x0001, 0x031E, 0x01E5 }, + { 0x0001, 0x02E9, 0x0318, 0x0001, 0x0280, 0x0380, 0x0002, 0x0277, 0x0314, 0x0001, + 0x0332, 0x0248, 0x0001, 0x0257, 0x028C, 0x0001, 0x0199, 0x031B, 0x0001, 0x0321, + 0x01B4, 0x0002, 0x02DF, 0x01D8, 0x0001, 0x03AD, 0x02DE, 0x0001, 0x0216, 0x01CC }, + { 0x0001, 0x02E9, 0x0318, 0x0002, 0x0280, 0x0380, 0x0002, 0x0277, 0x0314, 0x0001, + 0x0332, 0x0248, 0x0001, 0x0257, 0x028C, 0x0001, 0x0199, 0x031B, 0x0001, 0x0321, + 0x01B4, 0x0002, 0x02DF, 0x01D8, 0x0002, 0x03AD, 0x02DE, 0x0001, 0x0216, 0x01CC }, + { 0x0001, 0x004D, 0x00F3, 0x0001, 0x011A, 0x0247, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 }, + { 0x0001, 0x0051, 0x0328, 0x0002, 0x0114, 0x0321, 0x0002, 0x0332, 0x0248, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 } +}; + +static const u8 gUnk_08124EA0[] = { 0x3F, 0x0A, 0x01, 0x00, 0x3F, 0x0A, 0x01, 0x00, 0x3F, 0x14, 0x01, 0x00, 0x3F, 0x14, + 0x01, 0x00, 0x3F, 0x1E, 0x01, 0x00, 0x3F, 0x1E, 0x01, 0x00, 0x5C, 0x6E, 0x01, 0x00, + 0x5C, 0x6F, 0x01, 0x00, 0x5C, 0x70, 0x01, 0x00, 0x63, 0x00, 0x01, 0x00 }; + +static const u16 CuccoMinigame_Sounds[] = { SFX_VO_CUCCO5, SFX_VO_CUCCO_CALL }; + +static const u8 CuccoMinigameRupees[] = { 0, 10, 50, 0 }; + +void ObjectB9(ObjectB9Entity* this) { + int index; + u32 val; + u8* puVar2; + const u16* ptr; + + if (super->action == 0) { + super->action++; + ptr = gUnk_08124C20 + sub_080A1514() * 2; + this->unk68 = ptr[0] * 0x3c; + this->unk6a = 0; + this->unk6c = ptr[1]; + this->unk6e = 1; + + for (puVar2 = this->unk70, val = 0, index = 9; index >= 0; index--) { + *puVar2++ = val; + } + sub_0807DD64(super); + sub_0806EC20(super); + } + sub_0807DD94(super, 0); +} + +NONMATCH("asm/non_matching/objectB9/sub_080A1270.inc", void sub_080A1270(ObjectB9Entity* this)) { + s32 iVar1; + int iVar2; + s32 iVar4; + s32 sVar6; + int iVar7; + s8* ptr; + s32 val; + Entity* pEnt; + Entity** entArray; + + sVar6 = 0; + entArray = ((Entity**)super->myHeap); + ptr = this->unk70; + iVar1 = (gRoomControls.origin_x + 0x360); + iVar4 = (gRoomControls.origin_y + 0x350); + iVar1 = (iVar1 << 16) >> 16; + iVar4 = (iVar4 << 16) >> 16; + val = -1; + + for (iVar7 = 0; iVar7 < 9; iVar7++) { + pEnt = entArray[iVar7]; + if (((s8*)ptr)[iVar7] == 0) { + if (pEnt->next != NULL && pEnt != NULL) { + if ((iVar1 <= pEnt->x.HALF.HI) && (iVar4 <= pEnt->y.HALF.HI)) { + ptr[iVar7] = pEnt->type + 1; + pEnt->type2 = 1; + sVar6++; + SoundReq(CuccoMinigame_Sounds[pEnt->type]); + } + } else { + ((s8*)ptr)[iVar7] = val; + } + } else if (0 < (s8)ptr[iVar7]) { + sVar6++; + if (pEnt->next != NULL && pEnt != NULL) { + iVar2 = iVar1 + 4; + if (iVar2 > pEnt->x.HALF.HI) { + pEnt->x.HALF.HI = iVar2; + } + iVar2 = iVar4 + 4; + if (iVar2 > pEnt->y.HALF.HI) { + pEnt->y.HALF.HI = iVar2; + } + } else { + ((s8*)ptr)[iVar7] = val; + } + } + } + + this->unk6a = sVar6; + gPlayerState.field_0x27[0] = 0xff; + if (--this->unk68 < 1) { + SoundReq(SFX_CUCCO_MINIGAME_BELL); + sub_08050384(); + } else { + gActiveScriptInfo.commandSize = 0; + } +} +END_NONMATCH + +void CuccoMinigame_Cleanup(ObjectB9Entity* this) { + Entity** puVar1; + s8* pcVar2; + int index; + + pcVar2 = this->unk70; + puVar1 = super->myHeap; + + for (index = 9; index >= 0; index--, pcVar2++, puVar1++) { + Entity* pEnt = *puVar1; + if (*pcVar2 >= 0 && pEnt != NULL) { + DeleteEntityAny(pEnt); + } + } +} + +void sub_080A13B4(ObjectB9Entity* this, ScriptExecutionContext* context) { + if (this->unk6a >= this->unk6c) { + MessageFromTarget(0x300c); + context->condition = 1; + } else { + MessageFromTarget(0x3005); + context->condition = 0; + } +} + +void sub_080A13E8(ObjectB9Entity* this) { + bool32 bVar2; + const u8* ptr = &gUnk_08124EA0[sub_080A1514() * 4]; + + bVar2 = 0; + switch (ptr[0]) { + case 0x3f: + if (gSave.stats.hasAllFigurines) { + bVar2 = 1; + } + break; + case 0x5c: + if (gSave.didAllFusions) { + bVar2 = 1; + } + break; + case 0x63: + if (!CheckGlobalFlag(0x4f)) { + SetGlobalFlag(0x4f); + break; + } + bVar2 = 1; + break; + } + + if (!bVar2) { + sub_080A7C18(ptr[0], ptr[1], 0); + } else { + this->unk6e = 2; + } +} + +void sub_080A1460(ObjectB9Entity* this) { + s8* pcVar1; + int iVar2; + s32 rupees; + const u8* ptr; + + sub_080A1514(); + pcVar1 = this->unk70; + rupees = 0; + ptr = CuccoMinigameRupees; + + for (iVar2 = 9; iVar2 >= 0; iVar2--) { + // Weird register addition + // ptr[*pcVar1] translates to add r0,r3,r0 but should be add r0,r3 + u32 temp = *pcVar1; + temp += (int)ptr; + rupees += *(u8*)temp; + pcVar1++; + } + ModRupees(rupees); + MessageNoOverlap(0x3007, super); + gMessage.rupees = (u16)rupees; +} + +void sub_080A14A8(void) { + int iVar1; + + iVar1 = sub_080A1514(); + iVar1++; + if (iVar1 > 9) { + iVar1 = 9; + } + + if (iVar1 & 1) { + SetGlobalFlag(0x4b); + } else { + ClearGlobalFlag(0x4b); + } + + if (iVar1 & 2) { + SetGlobalFlag(0x4c); + } else { + ClearGlobalFlag(0x4c); + } + + if (iVar1 & 4) { + SetGlobalFlag(0x4d); + } else { + ClearGlobalFlag(0x4d); + } + + if (iVar1 & 8) { + SetGlobalFlag(0x4e); + } else { + ClearGlobalFlag(0x4e); + } +} + +u32 sub_080A1514(void) { + u32 rv = 0; + + if (CheckGlobalFlag(0x4b)) { + rv = 1; + } + + if (CheckGlobalFlag(0x4c)) { + rv |= 2; + } + + if (CheckGlobalFlag(0x4d)) { + rv |= 4; + } + + if (CheckGlobalFlag(0x4e)) { + rv |= 8; + } + return rv; +} + +void CuccoMinigame_Init(Entity* this, ScriptExecutionContext* context) { + Entity* pEnt; + const short* pCuccoMinigameDef; + int index; + Entity** ppEVar5; + RoomControls* room; + + context->condition = 0; + pEnt = CreateObject(CUCCO_MINIGAME, 0, 0); + if (pEnt != NULL) { + pEnt->myHeap = (u32*)zMalloc(sizeof(ObjectB9Heap)); + if (pEnt->myHeap == NULL) { + DeleteEntityAny(pEnt); + } else { + *(ScriptExecutionContext**)&((GenericEntity*)pEnt)->cutsceneBeh = + (ScriptExecutionContext*)StartCutscene(pEnt, (u16*)context->intVariable); + pCuccoMinigameDef = pObjectB9_MinigameCuccoDefs[sub_080A1514()]; + ppEVar5 = (Entity**)pEnt->myHeap; + room = &gRoomControls; + for (index = 9; index >= 0; index--, pCuccoMinigameDef += 3) { + if (pCuccoMinigameDef[0] < 1) { + pEnt = NULL; + } else { + pEnt = (Entity*)CreateEnemy(CUCCO_AGGR, pCuccoMinigameDef[0] - 1); + if (pEnt != NULL) { + pEnt->x.HALF.HI = room->origin_x + pCuccoMinigameDef[1]; + pEnt->y.HALF.HI = room->origin_y + pCuccoMinigameDef[2]; + pEnt->collisionLayer = 1; + } + } + *ppEVar5++ = pEnt; + } + context->condition = 1; + } + } +} + +void sub_080A1608(void) { + u16 messageIndex; + const u16* ptr; + + messageIndex = 0x3002; + if (CheckRoomFlag(1)) { + messageIndex = 0x3006; + } + MessageFromTarget(messageIndex); + gMessage.textWindowPosX = 1; + gMessage.textWindowPosY = 0; + ptr = &gUnk_08124C20[sub_080A1514() * 2]; + gMessage.rupees = ptr[0]; + gMessage.field_0x14 = ptr[1]; +} + +void sub_080A1648(void) { + SetTileType(0x407f, 0xd36, 1); + SetTileType(0x407f, 0xd37, 1); + SetTileType(0x407f, 0xd38, 1); + SetTileType(0x407e, 0xd75, 1); + SetTileType(0x407e, 0xe75, 1); +} + +void sub_080A169C(void) { + sub_0807BA8C(0xd36, 1); + sub_0807BA8C(0xd37, 1); + sub_0807BA8C(0xd38, 1); + sub_0807BA8C(0xd75, 1); + sub_0807BA8C(0xe75, 1); +} diff --git a/src/object/figurineDevice.c b/src/object/figurineDevice.c index df7dbdc5..22c63ddc 100644 --- a/src/object/figurineDevice.c +++ b/src/object/figurineDevice.c @@ -303,7 +303,7 @@ void FigurineDevice_Action4(FigurineDeviceEntity* this) { gMessage.textWindowPosX = 1; gMessage.textWindowPosY = 0xc; #endif - gMessage.field_0x10 = this->unk_81; + gMessage.rupees = this->unk_81; break; } } @@ -477,7 +477,7 @@ void sub_08088478(void) { gMessage.textWindowPosX = 1; gMessage.textWindowPosY = 0xc; if (set0x10) { - gMessage.field_0x10 = 5; + gMessage.rupees = 5; } #ifndef EU gPlayerEntity.animationState = 6; diff --git a/src/object/objectB.c b/src/object/objectB.c index f0cfc4e5..fbf4ef50 100644 --- a/src/object/objectB.c +++ b/src/object/objectB.c @@ -124,7 +124,7 @@ void ObjectB_Action2(ObjectBEntity* this) { break; } MessageFromTarget(messageIndex); - gMessage.field_0x10 = super->type2; + gMessage.rupees = super->type2; } } } diff --git a/src/script.c b/src/script.c index a6a4e36c..8fb780b8 100644 --- a/src/script.c +++ b/src/script.c @@ -1884,7 +1884,7 @@ void sub_0807F78C(Entity* entity, ScriptExecutionContext* context) { msg = GetSaleItemConfirmMessageID(item); price = GetItemPrice(item); MessageNoOverlap(msg, entity); - gMessage.field_0x10 = (u16)price; + gMessage.rupees = (u16)price; } void sub_0807F7C4(Entity* entity, ScriptExecutionContext* context) { @@ -1929,7 +1929,7 @@ void sub_0807F854(Entity* entity, ScriptExecutionContext* context) { switch (idx) { case 0: case 1: - gMessage.field_0x10 = value; + gMessage.rupees = value; break; case 2: gMessage.field_0x14 = value;