diff --git a/asm/ground_script.s b/asm/ground_script.s deleted file mode 100644 index 808df9384..000000000 --- a/asm/ground_script.s +++ /dev/null @@ -1,1713 +0,0 @@ - #include "asm/constants/gba_constants.inc" - #include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start sub_80A14E8 -sub_80A14E8: - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - ldr r4, _080A1514 - add sp, r4 - adds r6, r0, 0 - adds r5, r2, 0 - adds r7, r3, 0 - lsls r1, 24 - lsrs r1, 24 - subs r0, r1, 0x1 - cmp r0, 0x49 - bls _080A1508 - bl _080A236A -_080A1508: - lsls r0, 2 - ldr r1, _080A1518 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080A1514: .4byte 0xfffffc80 -_080A1518: .4byte _080A151C - .align 2, 0 -_080A151C: - .4byte _080A1644 - .4byte _080A164C - .4byte _080A1672 - .4byte _080A167A - .4byte _080A1680 - .4byte _080A1688 - .4byte _080A1690 - .4byte _080A1698 - .4byte _080A169E - .4byte _080A16C6 - .4byte _080A1730 - .4byte _080A1756 - .4byte _080A178C - .4byte _080A1792 - .4byte _080A17C0 - .4byte _080A17C6 - .4byte _080A1800 - .4byte _080A1814 - .4byte _080A1824 - .4byte _080A1840 - .4byte _080A185E - .4byte _080A18C2 - .4byte _080A18E2 @ Wigglytuff Club Opening - .4byte _080A18F2 - .4byte _080A1904 - .4byte _080A197C - .4byte _080A1988 - .4byte _080A19DC - .4byte _080A19FC - .4byte _080A1A0E - .4byte _080A1A18 - .4byte _080A1A70 - .4byte _080A1AF8 - .4byte _080A1B20 - .4byte _080A1B36 - .4byte _080A1B58 - .4byte _080A1B64 - .4byte _080A1BD8 - .4byte _080A1BE4 - .4byte _080A1C30 - .4byte _080A1C84 - .4byte _080A1DEC - .4byte _080A1E30 - .4byte _080A1E3C - .4byte _080A1ED0 - .4byte _080A1ED6 - .4byte _080A1F28 - .4byte _080A1F3C - .4byte _080A1F44 - .4byte _080A1F50 - .4byte _080A1F80 - .4byte _080A1FDA - .4byte _080A202C - .4byte _080A2054 - .4byte _080A2060 - .4byte _080A204A - .4byte _080A206C - .4byte _080A2076 - .4byte _080A207C - .4byte _080A2082 - .4byte _080A20D4 - .4byte _080A20F4 - .4byte _080A21E4 - .4byte _080A228C - .4byte _080A229E - .4byte _080A2298 - .4byte _080A22AE - .4byte _080A22CC - .4byte _080A22E4 - .4byte _080A2304 - .4byte _080A2320 - .4byte _080A232E - .4byte _080A233A - .4byte _080A2346 -_080A1644: - bl sub_8098C58 - bl _080A236A -_080A164C: - bl sub_8011C34 - movs r1, 0x1 - negs r1, r1 - cmp r0, r1 - bne _080A1660 - bl Rand32Bit - bl sub_8011C40 -_080A1660: - movs r0, 0x1 - bl sub_8011C28 - bl sub_8001064 - bl sub_809965C - bl _080A236A -_080A1672: - bl sub_8098CC8 - bl _080A236A -_080A167A: - bl sub_80961D8 - b _080A1804 -_080A1680: - bl ResetMailbox - bl _080A236A -_080A1688: - bl sub_80963FC - bl _080A236A -_080A1690: - bl sub_8096488 - bl _080A236A -_080A1698: - bl sub_80964B4 - b _080A1804 -_080A169E: - movs r0, 0x8 - bl sub_80023E4 - lsls r0, 24 - cmp r0, 0 - bne _080A16B0 - bl sub_808D4B0 - b _080A16B4 -_080A16B0: - bl sub_808D500 -_080A16B4: - lsls r0, 24 - lsrs r4, r0, 24 - bl nullsub_104 - negs r0, r4 - orrs r0, r4 - lsrs r0, 31 - bl _080A236C -_080A16C6: - movs r1, 0xC - ldrsh r0, [r6, r1] - cmp r0, 0x1 - beq _080A16D2 - bl _080A236A -_080A16D2: - movs r2, 0xE - ldrsh r0, [r6, r2] - add r1, sp, 0x314 - bl sub_80A8C4C - lsls r0, 16 - asrs r1, r0, 16 - cmp r1, 0 - bne _080A16E8 - bl _080A236A -_080A16E8: - add r0, sp, 0x314 - ldrb r0, [r0] - cmp r0, 0x44 - bne _080A16FC - movs r0, 0x82 - lsls r0, 1 - cmp r1, r0 - bne _080A16FC - bl _080A203C -_080A16FC: - movs r3, 0xE - ldrsh r0, [r6, r3] - bl sub_80A90C8 - lsls r0, 16 - ldr r1, _080A172C - asrs r0, 14 - adds r0, r1 - ldr r1, [r0] - add r0, sp, 0x4 - bl strcpy - movs r0, 0 - movs r1, 0x1 - add r2, sp, 0x4 - bl ScriptPrintText -_080A171E: - lsls r0, 24 -_080A1720: - cmp r0, 0 - beq _080A1726 - b _080A1EBE -_080A1726: - bl _080A236A - .align 2, 0 -_080A172C: .4byte gFriendAreaDialogue -_080A1730: - movs r0, 0 - movs r1, 0x14 - bl GetScriptVarValue - lsls r0, 16 - asrs r0, 16 - bl sub_80A2740 - lsls r0, 24 - lsrs r0, 24 - bl CountJobsinDungeon - movs r1, 0 - cmp r0, 0 - ble _080A1750 - movs r1, 0x1 -_080A1750: - adds r0, r1, 0 - bl _080A236C -_080A1756: - add r4, sp, 0x104 - adds r0, r4, 0 - bl sub_8099394 - lsls r0, 24 - cmp r0, 0 - bne _080A1768 - bl _080A236A -_080A1768: - ldr r0, _080A1788 - ldr r1, [r0] - ldrb r2, [r4] - lsls r0, r2, 1 - adds r0, r2 - lsls r0, 4 - adds r1, r0 - adds r1, 0x2C - movs r0, 0 - ldrsb r0, [r1, r0] -_080A177C: - cmp r0, 0 - ble _080A1782 - b _080A1EBE -_080A1782: - bl _080A236A - .align 2, 0 -_080A1788: .4byte gUnknown_203B480 -_080A178C: - bl sub_8097640 - b _080A1804 -_080A1792: - movs r5, 0x11 -_080A1794: - lsls r4, r5, 16 - asrs r0, r4, 16 - bl IsMazeCompleted - lsls r0, 24 - cmp r0, 0 - beq _080A17B6 - lsrs r4, 16 - movs r0, 0 - movs r1, 0x2F - adds r2, r4, 0 - bl GetScriptVarArrayValue - cmp r0, 0 - bne _080A17B6 - bl _080A234E -_080A17B6: - adds r5, 0x1 - cmp r5, 0x16 - ble _080A1794 - bl _080A236A -_080A17C0: - bl sub_80964E4 - b _080A1804 -_080A17C6: - movs r4, 0x8 - ldrsh r0, [r6, r4] - cmp r0, 0x1 - beq _080A17D2 - bl _080A236A -_080A17D2: - movs r5, 0xA - ldrsh r0, [r6, r5] - cmp r0, 0 - beq _080A17DE - bl _080A236A -_080A17DE: - movs r1, 0xC - ldrsh r0, [r6, r1] - cmp r0, 0x1 - beq _080A17EA - bl _080A236A -_080A17EA: - movs r2, 0xA - ldrsh r4, [r6, r2] - movs r3, 0xE - ldrsh r0, [r6, r3] - bl sub_80A8E9C - adds r1, r0, 0 - adds r0, r4, 0 - bl sub_80A87E0 - b _080A171E -_080A1800: - bl sub_80A8D20 -_080A1804: - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - negs r0, r1 - orrs r0, r1 - lsrs r0, 31 - bl _080A236C -_080A1814: - ldr r0, _080A1820 - ldrh r0, [r0] - movs r1, 0xC0 - lsls r1, 2 - ands r0, r1 - b _080A1720 - .align 2, 0 -_080A1820: .4byte gRealInputs -_080A1824: - lsls r0, r5, 16 - asrs r0, 16 - bl sub_80A8D54 - cmp r0, 0 - bne _080A1834 - bl _080A236A -_080A1834: - ldrh r0, [r0] - lsrs r0, 1 - movs r1, 0x1 - ands r0, r1 - bl _080A236C -_080A1840: - movs r4, 0x8 - ldrsh r0, [r6, r4] - cmp r0, 0x1 - beq _080A184C - bl _080A236A -_080A184C: - movs r5, 0xA - ldrsh r0, [r6, r5] - bl sub_80A8BFC - lsls r0, 16 - asrs r0, 16 - bl GetCanMoveFlag - b _080A171E -_080A185E: - lsls r0, r5, 16 - asrs r0, 16 - bl sub_80A7AE8 - lsls r0, 16 - asrs r5, r0, 16 - cmp r5, 0 - bge _080A1872 - bl _080A236A -_080A1872: - lsls r4, r7, 8 - ldr r1, [r6] - ldr r0, [r6, 0x4] - add r7, sp, 0x318 - ldr r2, [r1, 0xC] - adds r1, r7, 0 - bl _call_via_r2 - add r6, sp, 0x320 - adds r0, r5, 0 - adds r1, r6, 0 - bl sub_80A8FD8 - add r0, sp, 0x318 - ldr r3, [r0] - subs r1, r3, r4 - add r0, sp, 0x320 - ldr r2, [r0] - cmp r1, r2 - ble _080A189E - bl _080A236A -_080A189E: - adds r0, r3, r4 - cmp r0, r2 - bge _080A18A8 - bl _080A236A -_080A18A8: - ldr r2, [r7, 0x4] - subs r0, r2, r4 - ldr r1, [r6, 0x4] - cmp r0, r1 - ble _080A18B6 - bl _080A236A -_080A18B6: - adds r0, r2, r4 - cmp r0, r1 - blt _080A18BE - b _080A1EBE -_080A18BE: - bl _080A236A -_080A18C2: - movs r0, 0x1 - bl sub_80A8D54 - cmp r0, 0 - bne _080A18D0 - bl _080A236A -_080A18D0: - adds r1, r0, 0 - adds r1, 0x4C - movs r2, 0 - adds r0, 0x55 -_080A18D8: - strb r2, [r0] - subs r0, 0x1 - cmp r0, r1 - bge _080A18D8 - b _080A1EBE -_080A18E2: @ Wigglytuff Guild Opening - movs r0, 0xC @ Wild Plains - bl UnlockFriendArea - movs r0, 0x12 @ Mist-Rise Forest - bl UnlockFriendArea - bl _080A236A -_080A18F2: - ldr r0, _080A1900 - movs r1, 0x3C -_080A18F6: - movs r2, 0xA - bl sub_80A8F50 - bl _080A236A - .align 2, 0 -_080A1900: .4byte gUnknown_2039D98 -_080A1904: - movs r0, 0x51 - bl GetFriendArea - lsls r0, 24 - lsrs r0, 24 - bl UnlockFriendArea - add r1, sp, 0x4 - ldr r0, _080A1970 - ldm r0!, {r2,r3,r6} - stm r1!, {r2,r3,r6} - ldm r0!, {r2,r4,r6} - stm r1!, {r2,r4,r6} - ldm r0!, {r3,r4,r6} - stm r1!, {r3,r4,r6} - ldr r0, [r0] - str r0, [r1] - add r4, sp, 0x2C - adds r0, r4, 0 - add r1, sp, 0x4 - bl sub_808D144 - adds r0, r4, 0 - bl sub_808D1DC - cmp r0, 0 - bne _080A193C - b _080A1EBE -_080A193C: - movs r3, 0 - ldr r1, _080A1974 - mov r8, r1 - lsls r6, r5, 2 - ldr r2, _080A1978 - adds r4, r0, 0 - adds r4, 0x4C - mov r7, r8 -_080A194C: - adds r0, r4, r3 - adds r1, r3, r7 - ldrb r1, [r1] - strb r1, [r0] - adds r3, 0x1 - cmp r3, 0x9 - ble _080A194C -_080A195A: - adds r0, r6, r5 - lsls r0, 4 - adds r0, r2 - mov r1, r8 - movs r2, 0xA - bl sub_80922B4 -_080A1968: - bl IncrementAdventureNumJoined - bl _080A236A - .align 2, 0 -_080A1970: .4byte gUnknown_8116710 -_080A1974: .4byte gUnknown_2039D98 -_080A1978: .4byte gFormatBuffer_Names -_080A197C: - ldr r0, _080A1984 - movs r1, 0x53 - b _080A18F6 - .align 2, 0 -_080A1984: .4byte gUnknown_2039D98 -_080A1988: - ldr r0, _080A19D4 - bl GetFriendArea - lsls r0, 24 - lsrs r0, 24 - bl UnlockFriendArea - add r1, sp, 0x84 - adds r2, r1, 0 - ldr r0, _080A19D8 - ldm r0!, {r3-r5} - stm r2!, {r3-r5} - ldm r0!, {r3,r4,r6} - stm r2!, {r3,r4,r6} - ldm r0!, {r3,r5,r6} - stm r2!, {r3,r5,r6} - ldr r0, [r0] - str r0, [r2] - add r4, sp, 0xAC - adds r0, r4, 0 - bl sub_808D144 - adds r0, r4, 0 - bl sub_808D1DC - adds r4, r0, 0 - cmp r4, 0 - bne _080A19C2 - b _080A1EBE -_080A19C2: - bl IncrementAdventureNumJoined - ldrh r1, [r4] - movs r0, 0x2 - orrs r0, r1 - strh r0, [r4] - bl _080A236A - .align 2, 0 -_080A19D4: .4byte 0x00000183 -_080A19D8: .4byte gUnknown_8116738 -_080A19DC: - ldr r0, _080A19F8 - movs r1, 0 - bl sub_808D434 - adds r2, r0, 0 - cmp r2, 0 - bne _080A19EC - b _080A1EBE -_080A19EC: - ldrh r1, [r2] - movs r0, 0x2 - orrs r0, r1 - strh r0, [r2] - bl _080A236A - .align 2, 0 -_080A19F8: .4byte 0x00000183 -_080A19FC: - movs r0, 0x82 - lsls r0, 1 -_080A1A00: - bl sub_808D278 - cmp r0, 0 - bne _080A1A0A - b _080A1EBE -_080A1A0A: - bl _080A236A -_080A1A0E: - ldr r0, _080A1A14 - movs r1, 0x7C - b _080A18F6 - .align 2, 0 -_080A1A14: .4byte gUnknown_2039D98 -_080A1A18: - add r1, sp, 0x108 - adds r2, r1, 0 - ldr r0, _080A1A64 - ldm r0!, {r3,r4,r6} - stm r2!, {r3,r4,r6} - ldm r0!, {r3,r4,r6} - stm r2!, {r3,r4,r6} - ldm r0!, {r3,r4,r6} - stm r2!, {r3,r4,r6} - ldr r0, [r0] - str r0, [r2] - add r4, sp, 0x130 - adds r0, r4, 0 - bl sub_808D144 - adds r0, r4, 0 - bl sub_808D1DC - cmp r0, 0 - bne _080A1A42 - b _080A1EBE -_080A1A42: - movs r3, 0 - ldr r4, _080A1A68 - mov r8, r4 - lsls r6, r5, 2 - ldr r2, _080A1A6C - adds r4, r0, 0 - adds r4, 0x4C - mov r7, r8 -_080A1A52: - adds r0, r4, r3 - adds r1, r3, r7 - ldrb r1, [r1] - strb r1, [r0] - adds r3, 0x1 - cmp r3, 0x9 - ble _080A1A52 - b _080A195A - .align 2, 0 -_080A1A64: .4byte gUnknown_8116760 -_080A1A68: .4byte gUnknown_2039D98 -_080A1A6C: .4byte gFormatBuffer_Names -_080A1A70: - movs r0, 0x9E - movs r1, 0x1 - bl sub_80026E8 - movs r0, 0x91 - movs r1, 0 - bl sub_808D434 - cmp r0, 0 - bne _080A1A9A - ldr r3, _080A1AEC - str r0, [sp] - movs r0, 0x91 - movs r1, 0 - movs r2, 0 - bl sub_808D2E8 - cmp r0, 0 - beq _080A1A9A - bl IncrementAdventureNumJoined -_080A1A9A: - movs r0, 0x92 - movs r1, 0 - bl sub_808D434 - cmp r0, 0 - bne _080A1ABC - ldr r3, _080A1AF0 - str r0, [sp] - movs r0, 0x92 - movs r1, 0 - movs r2, 0 - bl sub_808D2E8 - cmp r0, 0 - beq _080A1ABC - bl IncrementAdventureNumJoined -_080A1ABC: - movs r0, 0x90 - movs r1, 0 - bl sub_808D434 - cmp r0, 0 - beq _080A1ACC - bl _080A236A -_080A1ACC: - ldr r3, _080A1AF4 - str r0, [sp] - movs r0, 0x90 - movs r1, 0 - movs r2, 0 - bl sub_808D2E8 - cmp r0, 0 - bne _080A1AE2 - bl _080A236A -_080A1AE2: - bl IncrementAdventureNumJoined - bl _080A236A - .align 2, 0 -_080A1AEC: .4byte gUnknown_8116788 -_080A1AF0: .4byte gUnknown_811678C -_080A1AF4: .4byte gUnknown_8116790 -_080A1AF8: - movs r0, 0x90 - bl HasRecruitedMon - lsls r0, 24 - cmp r0, 0 - bne _080A1B08 - bl _080A236A -_080A1B08: - movs r0, 0x91 - bl HasRecruitedMon - lsls r0, 24 - cmp r0, 0 - bne _080A1B18 - bl _080A236A -_080A1B18: - movs r0, 0x92 - bl HasRecruitedMon - b _080A171E -_080A1B20: - bl GetPlayerPokemonStruct - ldrh r0, [r0, 0x8] - subs r0, 0x90 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x2 - bls _080A1B32 - b _080A1EBE -_080A1B32: - bl _080A236A -_080A1B36: - bl GetPlayerPokemonStruct - cmp r0, 0 - beq _080A1B4A - movs r5, 0x8 - ldrsh r1, [r0, r5] - ldr r0, _080A1B54 - cmp r1, r0 - bne _080A1B4A - b _080A203C -_080A1B4A: - ldr r0, _080A1B54 - bl sub_8098134 - b _080A171E - .align 2, 0 -_080A1B54: .4byte 0x00000113 -_080A1B58: - ldr r0, _080A1B60 - movs r1, 0x79 - b _080A18F6 - .align 2, 0 -_080A1B60: .4byte gUnknown_2039D98 -_080A1B64: - ldr r4, _080A1BCC - adds r0, r4, 0 - bl GetFriendArea - lsls r0, 24 - lsrs r0, 24 - bl GetFriendAreaStatus - lsls r0, 24 - cmp r0, 0 - bne _080A1B88 - adds r0, r4, 0 - bl GetFriendArea - lsls r0, 24 - lsrs r0, 24 - bl UnlockFriendArea -_080A1B88: - add r1, sp, 0x188 - adds r2, r1, 0 - ldr r0, _080A1BD0 - ldm r0!, {r3,r4,r6} - stm r2!, {r3,r4,r6} - ldm r0!, {r3,r5,r6} - stm r2!, {r3,r5,r6} - ldm r0!, {r4-r6} - stm r2!, {r4-r6} - ldr r0, [r0] - str r0, [r2] - add r4, sp, 0x1B0 - adds r0, r4, 0 - bl sub_808D144 - adds r0, r4, 0 - bl sub_808D1DC - cmp r0, 0 - bne _080A1BB2 - b _080A1EBE -_080A1BB2: - movs r2, 0 - adds r3, r0, 0 - adds r3, 0x4C - ldr r4, _080A1BD4 -_080A1BBA: - adds r0, r3, r2 - adds r1, r2, r4 - ldrb r1, [r1] - strb r1, [r0] - adds r2, 0x1 - cmp r2, 0x9 - ble _080A1BBA - b _080A1968 - .align 2, 0 -_080A1BCC: .4byte 0x00000199 -_080A1BD0: .4byte gUnknown_8116794 -_080A1BD4: .4byte gUnknown_2039D98 -_080A1BD8: - ldr r0, _080A1BE0 - movs r1, 0x7A - b _080A18F6 - .align 2, 0 -_080A1BE0: .4byte gUnknown_2039D98 -_080A1BE4: - add r1, sp, 0x208 - adds r2, r1, 0 - ldr r0, _080A1C28 - ldm r0!, {r3-r5} - stm r2!, {r3-r5} - ldm r0!, {r3,r4,r6} - stm r2!, {r3,r4,r6} - ldm r0!, {r3,r5,r6} - stm r2!, {r3,r5,r6} - ldr r0, [r0] - str r0, [r2] - add r4, sp, 0x230 - adds r0, r4, 0 - bl sub_808D144 - adds r0, r4, 0 - bl sub_808D1DC - cmp r0, 0 - bne _080A1C0E - b _080A1EBE -_080A1C0E: - movs r2, 0 - adds r3, r0, 0 - adds r3, 0x4C - ldr r4, _080A1C2C -_080A1C16: - adds r0, r3, r2 - adds r1, r2, r4 - ldrb r1, [r1] - strb r1, [r0] - adds r2, 0x1 - cmp r2, 0x9 - ble _080A1C16 - b _080A1968 - .align 2, 0 -_080A1C28: .4byte gUnknown_81167BC -_080A1C2C: .4byte gUnknown_2039D98 -_080A1C30: - bl GetNumberOfFilledInventorySlots - cmp r0, 0x13 - ble _080A1C70 - ldr r0, _080A1C64 - ldrb r4, [r0, 0x2] - adds r0, r4, 0 - bl IsNotMoneyOrUsedTMItem - lsls r0, 24 - cmp r0, 0 - bne _080A1C4A - b _080A236A -_080A1C4A: - ldr r0, _080A1C68 - ldr r0, [r0] - lsls r1, r4, 1 - adds r0, 0x50 - adds r1, r0, r1 - ldrh r2, [r1] - ldr r0, _080A1C6C - cmp r2, r0 - bls _080A1C5E - b _080A236A -_080A1C5E: - adds r0, r2, 0x1 - strh r0, [r1] - b _080A236A - .align 2, 0 -_080A1C64: .4byte gUnknown_81167E4 -_080A1C68: .4byte gTeamInventoryRef -_080A1C6C: .4byte 0x000003e6 -_080A1C70: - ldr r0, _080A1C80 - ldrb r0, [r0, 0x2] - movs r1, 0 - bl sub_809124C - bl FillInventoryGaps - b _080A236A - .align 2, 0 -_080A1C80: .4byte gUnknown_81167E4 -_080A1C84: - movs r0, 0xD1 - lsls r0, 1 - bl RandInt - adds r0, 0x1 - lsls r0, 16 - asrs r5, r0, 16 - movs r0, 0x20 - bl RandInt - adds r4, r0, 0 - movs r7, 0xD2 - lsls r7, 1 - movs r6, 0 - ldr r0, _080A1DE0 - mov r8, r0 -_080A1CA4: - adds r0, r5, 0x1 - lsls r0, 16 - asrs r5, r0, 16 - cmp r5, r8 - ble _080A1CB0 - movs r5, 0x1 -_080A1CB0: - subs r7, 0x1 - cmp r7, 0 - bge _080A1CCC - cmp r6, 0 - bne _080A1CBC - b _080A2360 -_080A1CBC: - cmp r4, r6 - blt _080A1CCC - adds r0, r6, 0 - bl RandInt - adds r4, r0, 0 - movs r7, 0xD2 - lsls r7, 1 -_080A1CCC: - adds r0, r5, 0 - subs r0, 0x90 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x2 - bls _080A1CA4 - ldr r0, _080A1DE4 - cmp r5, r0 - beq _080A1CA4 - adds r0, 0x1 - cmp r5, r0 - beq _080A1CA4 - adds r0, 0xB - cmp r5, r0 - beq _080A1CA4 - subs r0, 0xD - cmp r5, r0 - beq _080A1CA4 - subs r0, 0x88 - cmp r5, r0 - beq _080A1CA4 - adds r0, 0x67 - cmp r5, r0 - beq _080A1CA4 - adds r0, 0x1 - cmp r5, r0 - beq _080A1CA4 - adds r0, 0x1 - cmp r5, r0 - beq _080A1CA4 - adds r0, 0x23 - cmp r5, r0 - beq _080A1CA4 - adds r0, 0x3 - cmp r5, r0 - beq _080A1CA4 - adds r0, 0x1 - cmp r5, r0 - beq _080A1CA4 - cmp r5, r8 - beq _080A1CA4 - cmp r5, 0x96 - beq _080A1CA4 - subs r0, 0x5 - cmp r5, r0 - beq _080A1CA4 - cmp r5, 0x97 - beq _080A1CA4 - subs r0, 0x5 - cmp r5, r0 - beq _080A1CA4 - adds r0, 0x1 - cmp r5, r0 - beq _080A1CA4 - subs r0, 0x8C - cmp r5, r0 - beq _080A1CA4 - subs r0, 0x1 - cmp r5, r0 - beq _080A1CA4 - adds r0, 0x2 - cmp r5, r0 - beq _080A1CA4 - adds r0, 0x5 - cmp r5, r0 - beq _080A1CA4 - adds r0, 0x82 - cmp r5, r0 - beq _080A1CA4 - adds r0, 0x1 - cmp r5, r0 - beq _080A1CA4 - adds r0, 0x1 - cmp r5, r0 - beq _080A1CA4 - subs r0, 0x83 - cmp r5, r0 - beq _080A1CA4 - adds r0, r5, 0 - bl IsExclusivePokemonUnlocked - lsls r0, 24 - cmp r0, 0 - beq _080A1CA4 - adds r0, r5, 0 - bl GetFriendArea - lsls r0, 24 - lsrs r0, 24 - bl GetFriendAreaStatus - lsls r0, 24 - cmp r0, 0 - beq _080A1D9E - adds r0, r5, 0 - bl HasRecruitedMon - lsls r0, 24 - cmp r0, 0 - bne _080A1CA4 - adds r0, r5, 0 - bl sub_808D278 - cmp r0, 0 - beq _080A1CA4 -_080A1D9E: - adds r6, 0x1 - subs r4, 0x1 - cmp r4, 0 - blt _080A1DA8 - b _080A1CA4 -_080A1DA8: - movs r0, 0 - movs r1, 0x1F - adds r2, r5, 0 - bl SetScriptVarValue - ldr r4, _080A1DE8 - adds r0, r5, 0 - bl GetFriendArea - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - movs r2, 0 - bl WriteFriendAreaName - adds r0, r5, 0 - bl GetFriendArea - lsls r0, 24 - lsrs r0, 24 - bl GetFriendAreaStatus - lsls r0, 24 - cmp r0, 0 - bne _080A1EBE - b _080A203C - .align 2, 0 -_080A1DE0: .4byte 0x000001a3 -_080A1DE4: .4byte 0x0000019b -_080A1DE8: .4byte gFormatBuffer_FriendArea -_080A1DEC: - movs r0, 0 - movs r1, 0x1F - bl GetScriptVarValue - lsls r0, 16 - asrs r5, r0, 16 - ldr r4, _080A1E2C - adds r0, r5, 0 - bl GetFriendArea - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - movs r2, 0 - bl WriteFriendAreaName - cmp r5, 0 - bne _080A1E14 - b _080A236A -_080A1E14: - adds r0, r5, 0 - bl GetFriendArea - lsls r0, 24 - lsrs r0, 24 - bl GetFriendAreaStatus - lsls r0, 24 - cmp r0, 0 - bne _080A1EBE - b _080A203C - .align 2, 0 -_080A1E2C: .4byte gFormatBuffer_FriendArea -_080A1E30: - ldr r0, _080A1E38 - movs r1, 0x20 - b _080A18F6 - .align 2, 0 -_080A1E38: .4byte gUnknown_2039D98 -_080A1E3C: - cmp r5, 0 - bne _080A1E42 - b _080A2360 -_080A1E42: - movs r0, 0 - movs r1, 0x1F - bl GetScriptVarValue - lsls r0, 16 - asrs r5, r0, 16 - adds r6, r5, 0 - ldr r4, _080A1EC4 - adds r0, r5, 0 - bl GetFriendArea - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - movs r2, 0 - bl WriteFriendAreaName - cmp r5, 0 - bne _080A1E6C - b _080A236A -_080A1E6C: - adds r0, r5, 0 - bl GetFriendArea - lsls r0, 24 - lsrs r0, 24 - bl GetFriendAreaStatus - lsls r0, 24 - cmp r0, 0 - bne _080A1E8E - adds r0, r5, 0 - bl GetFriendArea - lsls r0, 24 - lsrs r0, 24 - bl UnlockFriendArea -_080A1E8E: - ldr r3, _080A1EC8 - movs r0, 0 - str r0, [sp] - adds r0, r6, 0 - movs r1, 0 - movs r2, 0 - bl sub_808D2E8 - cmp r0, 0 - bne _080A1EA4 - b _080A236A -_080A1EA4: - movs r2, 0 - adds r3, r0, 0 - adds r3, 0x4C - ldr r4, _080A1ECC -_080A1EAC: - adds r0, r3, r2 - adds r1, r2, r4 - ldrb r1, [r1] - strb r1, [r0] - adds r2, 0x1 - cmp r2, 0x9 - ble _080A1EAC - bl IncrementAdventureNumJoined -_080A1EBE: - movs r0, 0x1 - b _080A236C - .align 2, 0 -_080A1EC4: .4byte gFormatBuffer_FriendArea -_080A1EC8: .4byte gUnknown_81167E8 -_080A1ECC: .4byte gUnknown_2039D98 -_080A1ED0: - bl GetPtsToNextRank - b _080A177C -_080A1ED6: - bl GetRescueTeamRank - lsls r0, 24 - lsrs r4, r0, 24 - bl GetPtsToNextRank - cmp r0, 0 - bgt _080A1EE8 - b _080A236A -_080A1EE8: - bl AddToTeamRankPts - bl GetRescueTeamRank - adds r5, r0, 0 - lsls r5, 24 - lsrs r5, 24 - adds r0, r4, 0 - bl GetTeamRankString - adds r1, r0, 0 - ldr r4, _080A1F30 - adds r0, r4, 0 - bl strcpy - adds r0, r5, 0 - bl GetTeamRankString - adds r1, r0, 0 - adds r4, 0x50 - adds r0, r4, 0 - bl strcpy - movs r1, 0x1 - negs r1, r1 - ldr r2, _080A1F34 - movs r0, 0 - bl ScriptPrintText - lsls r0, 24 - cmp r0, 0 - bne _080A1EBE -_080A1F28: - ldr r0, _080A1F38 - bl AddToTeamMoney - b _080A236A - .align 2, 0 -_080A1F30: .4byte gFormatBuffer_Items -_080A1F34: .4byte gUnknown_81167EC -_080A1F38: .4byte 0x00002710 -_080A1F3C: - ldr r0, _080A1F40 - b _080A1A00 - .align 2, 0 -_080A1F40: .4byte 0x00000133 -_080A1F44: - ldr r0, _080A1F4C - movs r1, 0x52 - b _080A18F6 - .align 2, 0 -_080A1F4C: .4byte gUnknown_2039D98 -_080A1F50: - add r1, sp, 0x288 - adds r2, r1, 0 - ldr r0, _080A1F7C - ldm r0!, {r3-r5} - stm r2!, {r3-r5} - ldm r0!, {r3,r4,r6} - stm r2!, {r3,r4,r6} - ldm r0!, {r3,r5,r6} - stm r2!, {r3,r5,r6} - ldr r0, [r0] - str r0, [r2] - add r4, sp, 0x2B0 - adds r0, r4, 0 - bl sub_808D144 - adds r0, r4, 0 - bl sub_808D1DC - cmp r0, 0 - beq _080A1EBE - b _080A1968 - .align 2, 0 -_080A1F7C: .4byte gUnknown_811681C -_080A1F80: - movs r2, 0x1 - negs r2, r2 - movs r0, 0x3 - movs r1, 0x12 - bl ScriptVarScenarioAfter - lsls r0, 24 - cmp r0, 0 - bne _080A1F94 - b _080A236A -_080A1F94: - movs r0, 0 - movs r1, 0xF - bl GetScriptVarValue - cmp r0, 0x4 - bne _080A1FA2 - b _080A236A -_080A1FA2: - movs r0, 0 - movs r1, 0x42 - movs r2, 0 - bl GetScriptVarArrayValue - cmp r0, 0 - ble _080A1FB2 - b _080A236A -_080A1FB2: - movs r0, 0x80 - lsls r0, 1 - bl OtherRandInt - cmp r0, 0 - bne _080A1FCC - movs r0, 0 - movs r1, 0x42 - movs r2, 0 - movs r3, 0x4 - bl SetScriptVarArrayValue - b _080A1EBE -_080A1FCC: - movs r0, 0 - movs r1, 0x42 - movs r2, 0 - movs r3, 0x1 - bl SetScriptVarArrayValue - b _080A236A -_080A1FDA: - ldr r6, _080A200C - ldr r7, _080A2010 - movs r5, 0x2 -_080A1FE0: - bl GetNumberOfFilledInventorySlots - cmp r0, 0x13 - ble _080A2018 - ldrb r4, [r6, 0x2] - adds r0, r4, 0 - bl IsNotMoneyOrUsedTMItem - lsls r0, 24 - cmp r0, 0 - beq _080A2024 - ldr r0, _080A2014 - ldr r0, [r0] - lsls r1, r4, 1 - adds r0, 0x50 - adds r1, r0, r1 - ldrh r0, [r1] - cmp r0, r7 - bhi _080A2024 - adds r0, 0x1 - strh r0, [r1] - b _080A2024 - .align 2, 0 -_080A200C: .4byte gUnknown_8116844 -_080A2010: .4byte 0x000003e6 -_080A2014: .4byte gTeamInventoryRef -_080A2018: - ldrb r0, [r6, 0x2] - movs r1, 0 - bl sub_809124C - bl FillInventoryGaps -_080A2024: - subs r5, 0x1 - cmp r5, 0 - bge _080A1FE0 - b _080A236A -_080A202C: - bl GetPlayerPokemonStruct - cmp r0, 0 - beq _080A2040 - movs r4, 0x8 - ldrsh r0, [r0, r4] - cmp r0, 0x71 - bne _080A2040 -_080A203C: - movs r0, 0x2 - b _080A236C -_080A2040: - movs r0, 0x71 - bl sub_8098134 - bl _080A171E -_080A204A: - movs r0, 0 - movs r1, 0x1 - bl sub_80A56A0 - b _080A236A -_080A2054: - add r0, sp, 0x328 - str r5, [r0] - str r7, [r0, 0x4] - bl sub_80A56F0 - b _080A236A -_080A2060: - add r0, sp, 0x330 - str r5, [r0] - str r7, [r0, 0x4] - bl sub_80A5704 - b _080A236A -_080A206C: - lsls r0, r5, 16 - lsrs r0, 16 - bl sub_809C6CC - b _080A236A -_080A2076: - bl sub_809C6EC - b _080A236A -_080A207C: - bl sub_809C760 - b _080A236A -_080A2082: - movs r0, 0 - movs r4, 0x80 - lsls r4, 9 -_080A2088: - movs r1, 0x80 - lsls r1, 15 - bl sub_80A86C8 - adds r0, r4, 0 - movs r5, 0x80 - lsls r5, 9 - adds r4, r5 - asrs r0, 16 - cmp r0, 0x17 - ble _080A2088 - movs r0, 0 - adds r4, r5, 0 -_080A20A2: - movs r1, 0x80 - lsls r1, 15 - bl sub_80AC1B0 - adds r0, r4, 0 - movs r6, 0x80 - lsls r6, 9 - adds r4, r6 - asrs r0, 16 - cmp r0, 0xF - ble _080A20A2 - movs r0, 0 - adds r4, r6, 0 -_080A20BC: - movs r1, 0x80 - lsls r1, 15 - bl sub_80AD0C8 - adds r0, r4, 0 - movs r1, 0x80 - lsls r1, 9 - adds r4, r1 - asrs r0, 16 - cmp r0, 0xF - ble _080A20BC - b _080A236A -_080A20D4: - add r0, sp, 0x338 - str r5, [r0] - adds r4, r0, 0 - str r7, [r4, 0x4] - movs r0, 0x1 - adds r1, r4, 0 - bl sub_80A5984 - adds r2, r0, 0 - lsls r2, 16 - lsrs r2, 16 - movs r0, 0 - adds r1, r4, 0 - bl sub_80A59A0 - b _080A236A -_080A20F4: - add r1, sp, 0x308 - movs r2, 0 - movs r0, 0x1 - strb r0, [r1] - strb r2, [r1, 0x1] - strb r0, [r1, 0x2] - strb r0, [r1, 0x3] - str r2, [r1, 0x4] - ldr r0, _080A21D8 - ldr r2, _080A21DC - adds r0, r2 - ldr r0, [r0] - str r0, [r1, 0x8] - movs r0, 0x1 - negs r0, r0 - lsls r2, r5, 16 - asrs r2, 16 - lsls r3, r7, 24 - asrs r3, 24 - bl GroundEffect_Add - lsls r0, 16 - asrs r0, 16 - cmp r0, 0 - bge _080A2128 - b _080A236A -_080A2128: - bl sub_80AD158 - adds r7, r0, 0 - add r4, sp, 0x340 - add r5, sp, 0x348 - adds r0, r4, 0 - adds r1, r5, 0 - bl sub_80A579C - ldr r0, [r4, 0x4] - movs r1, 0xC0 - lsls r1, 4 - adds r0, r1 - str r0, [r4, 0x4] - ldr r0, [r5, 0x4] - adds r0, r1 - str r0, [r5, 0x4] - ldr r1, [r6] - ldr r0, [r6, 0x4] - add r6, sp, 0x350 - ldr r2, [r1, 0xC] - adds r1, r6, 0 - bl _call_via_r2 - add r1, sp, 0x350 - ldr r2, [r1] - add r0, sp, 0x340 - ldr r0, [r0] - cmp r2, r0 - blt _080A216E - add r0, sp, 0x348 - ldr r0, [r0] - cmp r2, r0 - blt _080A2170 - subs r0, 0x1 -_080A216E: - str r0, [r1] -_080A2170: - ldr r1, [r6, 0x4] - ldr r0, [r4, 0x4] - cmp r1, r0 - blt _080A2180 - ldr r0, [r5, 0x4] - cmp r1, r0 - blt _080A2182 - subs r0, 0x1 -_080A2180: - str r0, [r6, 0x4] -_080A2182: - add r1, sp, 0x340 - ldr r0, [r1] - ldr r2, _080A21E0 - adds r0, r2 - str r0, [r1] - ldr r0, [r4, 0x4] - adds r0, r2 - str r0, [r4, 0x4] - add r1, sp, 0x348 - ldr r0, [r1] - movs r2, 0x80 - lsls r2, 3 - adds r0, r2 - str r0, [r1] - ldr r0, [r5, 0x4] - adds r0, r2 - str r0, [r5, 0x4] - ldr r1, [r7] - ldr r0, [r7, 0x4] - ldr r3, [r1, 0x20] - adds r1, r4, 0 - adds r2, r5, 0 - bl _call_via_r3 - ldr r1, [r7] - ldr r0, [r7, 0x4] - ldr r2, [r1, 0x24] - adds r1, r6, 0 - bl _call_via_r2 - movs r0, 0 - movs r1, 0 - add r2, sp, 0x358 - str r0, [r2] - str r1, [r2, 0x4] - ldr r2, [r7] - ldr r0, [r7, 0x4] - add r1, sp, 0x358 - ldr r2, [r2, 0x48] - bl _call_via_r2 - b _080A1EBE - .align 2, 0 -_080A21D8: .4byte gFunctionScriptTable -_080A21DC: .4byte 0x00001310 -_080A21E0: .4byte 0xfffffc00 -_080A21E4: - ldr r0, _080A2288 - ldrh r4, [r0] - ldrh r0, [r0, 0x2] - movs r1, 0xC - ands r0, r1 - cmp r0, 0 - beq _080A21F4 - b _080A236A -_080A21F4: - adds r0, r4, 0 - bl sub_809CFE8 - lsls r0, 24 - asrs r1, r0, 24 - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - beq _080A2282 - movs r2, 0x80 - lsls r2, 1 - add r0, sp, 0x360 - bl SetVecFromDirectionSpeed - add r0, sp, 0x360 - ldr r1, [r0, 0x4] - ldr r0, [r0] - add r2, sp, 0x368 - str r0, [r2] - str r1, [r2, 0x4] - movs r0, 0x2 - ands r4, r0 - cmp r4, 0 - beq _080A2226 - movs r0, 0x4 -_080A2226: - cmp r0, 0 - beq _080A2282 - movs r3, 0xDA - lsls r3, 2 - add r3, sp - mov r9, r3 - add r7, sp, 0x370 - add r4, sp, 0x378 - mov r8, r0 -_080A2238: - ldr r1, [r6] - ldr r0, [r6, 0x4] - ldr r2, [r1, 0x48] - mov r1, r9 - bl _call_via_r2 - cmp r0, 0 - beq _080A2276 - movs r5, 0 - str r5, [r7] - mov r1, r9 - ldr r0, [r1, 0x4] - str r0, [r7, 0x4] - ldr r1, [r6] - ldr r0, [r6, 0x4] - ldr r2, [r1, 0x48] - adds r1, r7, 0 - bl _call_via_r2 - cmp r0, 0 - beq _080A2276 - mov r2, r9 - ldr r0, [r2] - str r0, [r4] - str r5, [r4, 0x4] - ldr r1, [r6] - ldr r0, [r6, 0x4] - ldr r2, [r1, 0x48] - adds r1, r4, 0 - bl _call_via_r2 -_080A2276: - movs r3, 0x1 - negs r3, r3 - add r8, r3 - mov r5, r8 - cmp r5, 0 - bne _080A2238 -_080A2282: - movs r0, 0x1 - negs r0, r0 - b _080A236C - .align 2, 0 -_080A2288: .4byte gRealInputs -_080A228C: - negs r0, r5 - orrs r0, r5 - lsrs r0, 31 - bl sub_80993C0 - b _080A236A -_080A2298: - movs r0, 0x1 - bl sub_8011C28 -_080A229E: - adds r0, r5, 0 - bl GroundMainGameEndRequest - lsls r0, r5, 16 - lsrs r0, 16 - bl FadeOutAllMusic - b _080A236A -_080A22AE: - bl GetCurrentBGSong - ldr r1, _080A22C4 - strh r0, [r1] - lsls r0, 16 - ldr r1, _080A22C8 - cmp r0, r1 - beq _080A22C0 - b _080A1EBE -_080A22C0: - b _080A236A - .align 2, 0 -_080A22C4: .4byte gUnknown_2039DA8 -_080A22C8: .4byte 0x03e70000 -_080A22CC: - ldr r4, _080A22DC - ldrh r0, [r4] - ldr r5, _080A22E0 - cmp r0, r5 - beq _080A236A - bl xxx_call_start_new_bgm - b _080A2312 - .align 2, 0 -_080A22DC: .4byte gUnknown_2039DA8 -_080A22E0: .4byte 0x000003e7 -_080A22E4: - ldr r4, _080A22FC - ldrh r0, [r4] - ldr r6, _080A2300 - cmp r0, r6 - beq _080A236A - lsls r1, r5, 16 - lsrs r1, 16 - bl xxx_call_fade_in_new_bgm - strh r6, [r4] - b _080A1EBE - .align 2, 0 -_080A22FC: .4byte gUnknown_2039DA8 -_080A2300: .4byte 0x000003e7 -_080A2304: - ldr r4, _080A2318 - ldrh r0, [r4] - ldr r5, _080A231C - cmp r0, r5 - beq _080A236A - bl xxx_call_queue_bgm -_080A2312: - strh r5, [r4] - b _080A1EBE - .align 2, 0 -_080A2318: .4byte gUnknown_2039DA8 -_080A231C: .4byte 0x000003e7 -_080A2320: - lsls r0, r5, 16 - lsrs r0, 16 - lsls r1, r7, 16 - lsrs r1, 16 - bl sub_80997F4 - b _080A236A -_080A232E: - lsls r1, r5, 16 - lsrs r1, 16 - movs r0, 0x1E - bl sub_80997F4 - b _080A236A -_080A233A: - lsls r1, r5, 16 - lsrs r1, 16 - movs r0, 0 - bl GroundSprite_ExtendPaletteAdd - b _080A236A -_080A2346: - movs r0, 0 - bl GroundSprite_ExtendPaletteDelete - b _080A236A -_080A234E: - movs r0, 0 - movs r1, 0x2F - adds r2, r4, 0 - movs r3, 0x1 - bl SetScriptVarArrayValue - adds r0, r5, 0 - subs r0, 0x10 - b _080A236C -_080A2360: - movs r0, 0 - movs r1, 0x1F - movs r2, 0 - bl SetScriptVarValue -_080A236A: - movs r0, 0 -_080A236C: - movs r3, 0xE0 - lsls r3, 2 - add sp, r3 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_80A14E8 - - .align 2,0 diff --git a/include/code_80A26CC.h b/include/code_80A26CC.h index 02c5ca143..20f5372f4 100644 --- a/include/code_80A26CC.h +++ b/include/code_80A26CC.h @@ -32,7 +32,7 @@ s16 sub_80A26B8(s16); s16 sub_80A26CC(s16); u8 sub_80A270C(s16 index); u8 sub_80A2728(s16 index); -u8 sub_80A2740(s32 index); +u8 sub_80A2740(s16 index); s16 sub_80A2750(s16); bool8 sub_80A27CC(s16); bool8 sub_80A2824(u8 index); diff --git a/include/ground_lives.h b/include/ground_lives.h index 6d11a7793..58ca3ca03 100644 --- a/include/ground_lives.h +++ b/include/ground_lives.h @@ -1,7 +1,10 @@ #ifndef GUARD_GROUND_LIVES_H #define GUARD_GROUND_LIVES_H -// ground_lives.s -s16 sub_80A7AE8(s32); +#include "structs/str_position.h" -#endif // GUARD_GROUND_LIVES_H \ No newline at end of file +// ground_lives.s +s16 sub_80A7AE8(s16); +s16 sub_80A8FD8(s32, PixelPos*); + +#endif // GUARD_GROUND_LIVES_H diff --git a/include/ground_map_1.h b/include/ground_map_1.h index 505dd1749..9000d073e 100644 --- a/include/ground_map_1.h +++ b/include/ground_map_1.h @@ -3,7 +3,7 @@ void GroundMap_ExecuteEnter(s16); void GroundMap_ExecuteEvent(s16 scriptIndex, u32); -void GroundMap_ExecuteStation(s16, s16, s8, u32); +void GroundMap_ExecuteStation(s32 _map, s32 _group, s32 _sector, bool32 _setScriptState); bool8 GroundMapNotifyAll(s16); bool8 sub_80A4D48(s16 index); @@ -11,4 +11,4 @@ bool8 sub_80A4D48(s16 index); // ground_map_1.s extern s16 sub_80A5728(void); -#endif // GUARD_GROUND_MAP_1_H \ No newline at end of file +#endif // GUARD_GROUND_MAP_1_H diff --git a/include/pokemon.h b/include/pokemon.h index 3b5e0c5d2..48851851c 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -107,6 +107,7 @@ const u8* DecompressMoveID(const u8* a1, u16* moveID); bool8 sub_808DA44(s32, u32); void sub_808D144(PokemonStruct1 *pokemon, struct unkStruct_808D144 *r1); void sub_808CE74(s16 _species, bool32 _isLeader, u8* name); +PokemonStruct1 *sub_808D278(s32 species); static inline bool8 PokemonFlag1(PokemonStruct1 *mon) { diff --git a/include/rescue_team_info.h b/include/rescue_team_info.h index 169a9184d..31f4ab6e2 100644 --- a/include/rescue_team_info.h +++ b/include/rescue_team_info.h @@ -33,7 +33,7 @@ s32 GetPtsToNextRank(void); void SetTeamRankPoints(s32 newPts); void AddToTeamRankPts(s32 newPts); u8 GetRescueTeamRank(void); -const u8 *GetTeamRankString(u8 index); +const u8 *GetTeamRankString(u32 index); u8 GetIsTeamRenamed(void); u32 SaveRescueTeamInfo(u8 *param_1,u32 param_2); u32 ReadRescueTeamInfo(u8 *param_1, u32 param_2); diff --git a/include/structs/dungeon_entity.h b/include/structs/dungeon_entity.h index 6c81e5506..016c693bb 100644 --- a/include/structs/dungeon_entity.h +++ b/include/structs/dungeon_entity.h @@ -80,7 +80,7 @@ typedef struct BurnClassStatus /* 0x0 */ u8 status; /* 0x1 */ u8 turns; /* 0x2 */ u8 damageCountdown; - /* 0x3 */ u8 unk4; + /* 0x3 */ u8 badlyPoisonedDamageCount; } BurnClassStatus; // Useful when checking if a mon is poisoned without having to check for Poison and Bad Poison every time. diff --git a/ld_script.txt b/ld_script.txt index ec53bb618..598621af9 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -314,8 +314,6 @@ SECTIONS { asm/code_809C5C4.o(.text); src/code_809D148.o(.text); src/ground_script.o(.text); - asm/ground_script.o(.text); - src/ground_script_2.o(.text); src/code_80A26CC.o(.text); asm/code_80A26CC_1.o(.text); src/ground_map.o(.text); diff --git a/src/code_8069E0C.c b/src/code_8069E0C.c index f19beb49c..f7891b70a 100644 --- a/src/code_8069E0C.c +++ b/src/code_8069E0C.c @@ -867,7 +867,7 @@ void ResetMonEntityData(EntityInfo *entInfo, bool8 setStatsToOne) entInfo->burnClassStatus.status = 0; entInfo->burnClassStatus.turns = 0; entInfo->burnClassStatus.damageCountdown = 0; - entInfo->burnClassStatus.unk4 = 0; + entInfo->burnClassStatus.badlyPoisonedDamageCount = 0; entInfo->frozenClassStatus.status = 0; entInfo->frozenClassStatus.turns = 0; entInfo->frozenClassStatus.damageCountdown = 0; diff --git a/src/code_8073CF0.c b/src/code_8073CF0.c index d203df0c0..98068ecc8 100644 --- a/src/code_8073CF0.c +++ b/src/code_8073CF0.c @@ -239,9 +239,9 @@ void sub_8074094(Entity *entity) } else if (entityInfo->burnClassStatus.status == STATUS_BADLY_POISONED) { if (entityInfo->burnClassStatus.damageCountdown == 0 || --entityInfo->burnClassStatus.damageCountdown == 0) { - s32 turns = entityInfo->burnClassStatus.unk4; - if (entityInfo->burnClassStatus.unk4 < BAD_POISON_DMG_TURN_VALUES_COUNT - 1) - entityInfo->burnClassStatus.unk4++; + s32 turns = entityInfo->burnClassStatus.badlyPoisonedDamageCount; + if (entityInfo->burnClassStatus.badlyPoisonedDamageCount < BAD_POISON_DMG_TURN_VALUES_COUNT - 1) + entityInfo->burnClassStatus.badlyPoisonedDamageCount++; entityInfo->burnClassStatus.damageCountdown = gBadPoisonDmgCountdown; if (turns >= BAD_POISON_DMG_TURN_VALUES_COUNT - 1) turns = BAD_POISON_DMG_TURN_VALUES_COUNT - 1; diff --git a/src/code_809A560.c b/src/code_809A560.c index 2a404dae0..1faf272a8 100644 --- a/src/code_809A560.c +++ b/src/code_809A560.c @@ -12,6 +12,7 @@ #include "felicity_bank.h" #include "flash.h" #include "friend_list_menu.h" +#include "ground_lives.h" #include "ground_main.h" #include "ground_script.h" #include "gulpin_shop_801FB50.h" @@ -55,7 +56,6 @@ PokemonStruct1 *sub_808D3F8(void); PokemonStruct1 *sub_80A8D54(s16); void sub_80A7DDC(s16 *, s16*); u8 sub_80A8CF0(s16); -s16 sub_80A7AE8(s16); s16 sub_80A8BFC(s32); struct Unk8116040Struct diff --git a/src/code_80A26CC.c b/src/code_80A26CC.c index a74272d88..8425b167f 100644 --- a/src/code_80A26CC.c +++ b/src/code_80A26CC.c @@ -179,11 +179,14 @@ u8 sub_80A2728(s16 index) return temp->dungeonIndex; } -u8 sub_80A2740(s32 index) +u8 sub_80A2740(s16 index) { const DungeonInfo *temp; + s32 index_s32; - temp = GetDungeonInfo_80A2608((s16) index); + index_s32 = index; + + temp = GetDungeonInfo_80A2608(index_s32); return temp->dungeonIndex; } diff --git a/src/dungeon_serializer.c b/src/dungeon_serializer.c index b7d9caefb..8ebdfd491 100644 --- a/src/dungeon_serializer.c +++ b/src/dungeon_serializer.c @@ -579,7 +579,7 @@ static void WriteBurnClassStatus(DataSerializer *seri, BurnClassStatus *src) WriteBytes(seri, &src->status, 1); WriteU8(seri, src->turns); WriteU8(seri, src->damageCountdown); - WriteU8(seri, src->unk4); + WriteU8(seri, src->badlyPoisonedDamageCount); } static void WriteFrozenClassStatus(DataSerializer *seri, FrozenClassStatus *src) @@ -1370,7 +1370,7 @@ static void ReadBurnClassStatus(DataSerializer *seri, BurnClassStatus *dst) ReadBytes(seri, &dst->status, 1); dst->turns = ReadU8(seri); dst->damageCountdown = ReadU8(seri); - dst->unk4 = ReadU8(seri); + dst->badlyPoisonedDamageCount = ReadU8(seri); } static void ReadFrozenClassStatus(DataSerializer *seri, FrozenClassStatus *dst) diff --git a/src/ground_map.c b/src/ground_map.c index fd8b6c72a..38a123e2f 100644 --- a/src/ground_map.c +++ b/src/ground_map.c @@ -129,22 +129,22 @@ void GroundMap_ExecuteEvent(s16 scriptIndex, u32 param_2) GroundScript_ExecutePP(&gGroundMapAction->action, 0, &script, &gUnknown_81175E0); } -void GroundMap_ExecuteStation(s16 param_1, s16 param_2, s8 param_3, u32 param_4) +void GroundMap_ExecuteStation(s32 _map, s32 _group, s32 _sector, bool32 _setScriptState) { ScriptInfoSmall script; - s32 iVar1; - s32 iVar2; - s32 iVar3; - u8 iVar4; + s32 map; + s32 group; + s32 sector; + bool8 setScriptState; - iVar1 = param_1; - iVar2 = param_2; - iVar3 = param_3; - iVar4 = param_4; + map = (s16)_map; + group = (s16)_group; + sector = (s8)_sector; + setScriptState = (bool8)_setScriptState; - Log(0, gUnknown_81175EC, iVar1, iVar2, iVar3, iVar4); // GroundMap ExecuteStation %3d %3d %3d %d - GroundMap_GetStationScript(&script, iVar1, iVar2, iVar3); - if (iVar4 != 0) + Log(0, gUnknown_81175EC, map, group, sector, setScriptState); // GroundMap ExecuteStation %3d %3d %3d %d + GroundMap_GetStationScript(&script, map, group, sector); + if (setScriptState != 0) script.state = 5; GroundScript_ExecutePP(&gGroundMapAction->action, 0, &script, &gUnknown_8117644); diff --git a/src/ground_script.c b/src/ground_script.c index 61dca0cd5..8ea4017e3 100644 --- a/src/ground_script.c +++ b/src/ground_script.c @@ -1,31 +1,49 @@ #include "global.h" +#include "ground_script.h" +#include "constants/dungeon.h" +#include "constants/friend_area.h" +#include "constants/item.h" +#include "constants/monster.h" +#include "constants/move_id.h" #include "code_8002774.h" #include "code_80118A4.h" +#include "code_8099360.h" +#include "code_8094F88.h" +#include "code_80958E8.h" +#include "code_80972F4.h" #include "code_8097670.h" #include "code_80A26CC.h" #include "debug.h" #include "dungeon.h" #include "event_flag.h" #include "exclusive_pokemon.h" +#include "friend_area.h" #include "ground_link.h" -#include "ground_script.h" -#include "ground_sprite.h" +#include "ground_lives.h" #include "ground_main.h" #include "ground_map.h" +#include "ground_map_1.h" +#include "ground_script.h" +#include "ground_sprite.h" +#include "input.h" #include "items.h" +#include "main_loops.h" #include "math.h" +#include "music.h" #include "other_random.h" +#include "random.h" #include "rescue_team_info.h" +#include "save.h" #include "string_format.h" +#include "text_util.h" +#include "pokemon.h" #include "wigglytuff_shop1.h" #include "wonder_mail.h" + void GroundMap_Select(s16); void GroundMap_SelectDungeon(s16, DungeonLocation*, u8); -void GroundMap_ExecuteEnter(s16); -void GroundMap_ExecuteEvent(s16, bool8); void GroundMap_GetStationScript(ScriptInfoSmall *out, s16, s32, s32); -void GroundMap_ExecuteStation(s32, s32, s32, bool8); void GroundLives_ExecuteScript(s32, s16 *, ScriptInfoSmall *); void GroundObject_ExecuteScript(s32, s16 *, ScriptInfoSmall *); void GroundEffect_ExecuteScript(s32, s16 *, ScriptInfoSmall *); @@ -53,17 +71,12 @@ bool8 sub_802FCF0(void); void sub_809733C(s16, bool8); void sub_80973A8(s16, bool8); -void sub_8097418(s16, bool8); void sub_80975A8(s16, bool8); -void sub_8098D1C(s32, u32, s32); -void sub_8098E18(s32, s32); u32 sub_80999E8(); void sub_80999FC(s32); u32 sub_8099A10(); u32 sub_8099A34(); u32 sub_8099A48(); -u32 sub_8099A5C(); -u32 sub_8099AFC(); u32 sub_809A6E4(); u32 sub_809A6F8(); u32 sub_809A738(); @@ -94,10 +107,8 @@ void sub_809D1CC(s32, PixelPos*, s32); void sub_809D1E4(s32, s32, s32); void sub_809D208(s32, PixelPos*, s32); void sub_809D220(s32, s32, s32); -bool8 GroundCancelAllEntities(void); void GroundScriptLockJumpZero(s16); s16 GetAdjustedGroundMap(s32); -s16 sub_80A7AE8(s16); void sub_80A87AC(s32, s32); void sub_80A8BD8(s16, s32*); u32 sub_80A8C2C(); @@ -117,14 +128,10 @@ void DeleteGroundObjects(void); void DeleteGroundEffects(void); s32 ExecuteScriptCommand(Action *action); bool8 IsFanfareSEPlaying_1(u16 songIndex); -bool8 sub_8099B94(void); bool8 IsEqualtoBGTrack(u16 songIndex); -s32 ExecuteScriptCommand(Action *action); -void InitScriptData(ScriptData *); bool8 sub_8099B94(void); s8 VecDirection8Radial(PixelPos*); PixelPos SetVecFromDirectionSpeed(s8, s32); -void CopyStringtoBuffer(u8 *buffer, u8 *string); bool8 sub_8098DCC(u32 speed); extern const PixelPos gUnknown_81164DC; extern u32 gUnknown_2039DA4; @@ -132,30 +139,14 @@ extern char *gUnknown_203B4B0; extern char gUnknown_2039D98[10]; void sub_8099220(void *param_1, s32 param_2); extern u32 gUnlockBranchLabels[]; -u8 ScriptPrintNullTextbox(void); s16 sub_8002694(u8 param_1); // value -> GroundEnter lookup bool8 sub_809B260(void *dst); bool8 sub_809B18C(s32 *sp); bool8 sub_809AFFC(u8 *); -u8 GroundScriptCheckLockCondition(Action *param_1, s16 param_2); bool8 sub_809D234(void); -s32 GroundLink_GetPos(s32 _arg0, PixelPos *pos); -void sub_80999FC(s32); -bool8 sub_809B1C0(s32, s32, char[12]); -bool8 sub_80023E4(u32 param_1); // some kind of helper for predefined scenario checks -s32 sub_80A14E8(Action *, u8, s32, s32); -void sub_80A87AC(s32, s32); -const ScriptCommand *FindLabel(Action *action, s32 r1); -void SetRescueTeamName(u8 *buffer); -s32 GetScriptVarValue(u8 *localVarBuf, s32 varId); -s32 GetScriptVarArrayValue(u8 *localVarBuf, s32 varId, s32 idx); -void SetScriptVarValue(u8 *localVarBuf, s32 varId, s32 val); -void SetScriptVarArrayValue(u8 *localVarBuf, s32 varId, s32 idx, s32 val); -unkStruct_203B480 * GetMailatIndex(u8 index); +s32 sub_80A14E8(Action *, u8, u32, s32); u8 sub_80990EC(struct unkStruct_20398C8 *param_1, s32 param_2); -s32 sub_80A14E8(Action *, u8, s32, s32); - extern s16 gCurrentMap; extern s16 gUnknown_2039A32; extern s16 gUnknown_2039A34; @@ -196,9 +187,69 @@ extern u8 GroundObjectsCancellAll(void); extern u8 GroundEffectsCancelAll(void); extern u8 GroundLivesCancelAll(void); extern u8 IsTextboxOpen_809A750(void); -extern s32 sub_80A882C(s16); -extern s32 sub_80AC240(s16); -extern s32 sub_80AD158(s16); +extern Action *sub_80A882C(s16); +extern Action *sub_80AC240(s16); +extern Action *sub_80AD158(s16); + +extern u8 gUnknown_8116848[]; + +bool8 GroundLivesNotifyAll(s16); +bool8 GroundObjectsNotifyAll(s16); +bool8 GroundEffectsNotifyAll(s16); + +void sub_8098C58(void); +void sub_8098CC8(void); +bool8 sub_80961D8(void); +void ResetMailbox(void); +void sub_80963FC(void); +void sub_8096488(void); +bool8 sub_80964B4(void); +extern void nullsub_104(void); +s16 sub_80A8C4C(); +s16 sub_80A90C8(); +bool8 sub_8097640(); +u8 sub_80964E4(); +s32 sub_80A8E9C(); +u8 sub_80A8D20(); +bool8 sub_80A87E0(); +s16 sub_80A8BFC(s16); +void sub_80A8F50(const u8 *buffer, s32, s32 size); + +extern const u8 *gFriendAreaDialogue[]; +extern struct unkStruct_808D144 gUnknown_8116710; +extern struct unkStruct_808D144 gUnknown_8116760; +extern struct unkStruct_808D144 gUnknown_8116794; +extern struct unkStruct_808D144 gUnknown_81167BC; +extern struct unkStruct_808D144 gUnknown_8116738; +extern struct unkStruct_808D144 gUnknown_811681C; +extern DungeonLocation gUnknown_81167E8; +extern DungeonLocation gUnknown_8116788; +extern DungeonLocation gUnknown_811678C; +extern DungeonLocation gUnknown_8116790; +extern u16 gUnknown_2039DA8; + +PokemonStruct1 *sub_808D2E8(s32 species, u8 *name, u32 _itemID, DungeonLocation *location, u16 *moveID); +bool8 HasRecruitedMon(s32 species); +extern Item gUnknown_8116844; +extern Item gUnknown_81167E4; +bool8 sub_809124C(u8 id, u8 param_3); +extern const u8 gUnknown_81167EC[]; +void sub_80A56A0(s32, s32); +void sub_80A56F0(); +void sub_80A5704(); +void sub_809C760(void); +void sub_809C6EC(void); +void sub_809C6CC(u16 param_1); +void sub_80A86C8(s16, s32); +void sub_80AC1B0(s16, s32); +void sub_80AD0C8(s16, s32); +s32 sub_80A5984(); +void sub_80A59A0(s32, s32 *, u16); +void GroundSprite_ExtendPaletteAdd(u32, u16); +void GroundSprite_ExtendPaletteDelete(u32); +extern void sub_80997F4(u16, u16); +s32 sub_809CFE8(u16 param_1); +extern bool8 sub_80A579C(PixelPos *a0, PixelPos *a1); EWRAM_INIT static int sNumChoices = 0; @@ -210,7 +261,7 @@ void sub_809D520(void *a0) *ptr = v; } -s32 sub_809D52C(void *a0) +Action *sub_809D52C(void *a0) { s16 *ptr = a0; @@ -3048,3 +3099,883 @@ UNUSED bool8 GroundScript_ExecuteTrigger(s16 r0) else return FALSE; } + +s32 sub_80A14E8(Action *action, u8 idx, u32 r2, s32 r3) +{ + switch(idx) + { + case 1: + sub_8098C58(); + return 0; + case 2: + if(sub_8011C34() == -1) + sub_8011C40(Rand32Bit()); + sub_8011C28(1); + sub_8001064(); + sub_809965C(); + return 0; + case 3: + sub_8098CC8(); + return 0; + case 4: + return sub_80961D8() == 0 ? 0 : 1; + case 5: + ResetMailbox(); + return 0; + case 6: + sub_80963FC(); + return 0; + case 7: + sub_8096488(); + return 0; + case 8: + return sub_80964B4() == 0 ? 0 : 1; + case 9: + { + u8 var; + if (sub_80023E4(8) == 0) { + var = sub_808D4B0(); + } + else { + var = sub_808D500(); + } + nullsub_104(); + return var != 0; + } + break; + case 0xA: + { + s32 ret; + s32 ret2; + if ((action->unkC).arr[0] == 1) + { + u8 text[0x100]; + DungeonLocation dungLocation; + ret = sub_80A8C4C((action->unkC).arr[1], &dungLocation); + if(ret != 0) + { + if (dungLocation.id == DUNGEON_HOWLING_FOREST_2 && ret == 0x104) { + return 2; + } + + ret2 = sub_80A90C8((action->unkC).arr[1]); + InlineStrcpy(text, gFriendAreaDialogue[ret2]); + if (ScriptPrintText(0, 1, text) != 0) + return 1; + } + } + } + return 0; + case 0xB: + return (CountJobsinDungeon(sub_80A2740(GetScriptVarValue(0, DUNGEON_ENTER_INDEX))) > 0); + case 0xC: + { + u8 sp_104; + if(sub_8099394(&sp_104) != 0) + { + unkStruct_203B480 *p = gUnknown_203B480; + p += sp_104; + if(p->rescuesAllowed > 0) + return 1; + } + } + return 0; + case 0xD: + return sub_8097640() ? 1 : 0; + break; + case 0xE: + { + s32 index; + for(index = 0x11; index < NUM_DUNGEON_MAZE; index++) + { + if (IsMazeCompleted((s16) index)) { + if (!GetScriptVarArrayValue(0, TRAINING_PRESENT_LIST, (u16) index)) { + SetScriptVarArrayValue(0, TRAINING_PRESENT_LIST, (u16) index, 1); + return index - 0x10; + } + } + } + return 0; + } + case 0xF: + return sub_80964E4() == 0 ? 0 : 1; + case 0x10: + if(action->unk8[0] == 1) + if(action->unk8[1] == 0) + if(action->unkC.arr[0] == 1) + { + if(sub_80A87E0(action->unk8[1], sub_80A8E9C(action->unkC.arr[1])) != 0) + return 1; + } + return 0; + case 0x11: + return sub_80A8D20() == 0 ? 0 : 1; + case 0x12: + { + s32 held = gRealInputs.held; + if((held & (R_BUTTON | L_BUTTON))) + return 1; + else + return 0; + } + + case 0x13: + { + PokemonStruct1 *ptr; + + ptr = sub_80A8D54(r2); + if(ptr) + return PokemonFlag2(ptr); + } + return 0; + case 0x14: + if(action->unk8[0] == 1) { + if(GetCanMoveFlag(sub_80A8BFC(action->unk8[1]))) + return 1; + } + return 0; + case 0x15: + { + s32 r4; + PixelPos sp_318; + PixelPos sp_320; + s32 r5 = sub_80A7AE8(r2); + if(r5 >= 0) { + r4 = (r3 << 8); + action->callbacks->getHitboxCenter(action->parentObject, &sp_318); + sub_80A8FD8(r5, &sp_320); + + if(sp_318.x - r4 <= sp_320.x + && sp_318.x + r4 >= sp_320.x + && sp_318.y - r4 <= sp_320.y + && sp_318.y + r4 >= sp_320.y) + { + return 1; + } + } + } + return 0; + case 0x16: + { + s32 index; + PokemonStruct1 *ptr; ptr = sub_80A8D54(1); + if(ptr) + { + for(index = 0; index < POKEMON_NAME_LENGTH; index++) + { + ptr->name[index] = 0; + } + return 1; + } + } + return 0; + case 0x17: + UnlockFriendArea(WILD_PLAINS); + UnlockFriendArea(MIST_RISE_FOREST); + return 0; + case 0x18: + sub_80A8F50(gUnknown_2039D98, 0x3C, POKEMON_NAME_LENGTH); + return 0; + case 0x19: + { + struct unkStruct_808D144 sp_4; + PokemonStruct1 sp_2c; + PokemonStruct1 *ptr; + s32 index; + + + UnlockFriendArea(GetFriendArea(MONSTER_MAGNEMITE)); + sp_4 = gUnknown_8116710; + sub_808D144(&sp_2c, &sp_4); + ptr = sub_808D1DC(&sp_2c); + if (ptr == NULL) return 1; + for(index = 0; index < POKEMON_NAME_LENGTH; index++) + { + ptr->name[index] = gUnknown_2039D98[index]; + } + sub_80922B4(gFormatBuffer_Names[r2], gUnknown_2039D98, POKEMON_NAME_LENGTH); + IncrementAdventureNumJoined(); + return 0; + } + break; + + case 0x1A: + sub_80A8F50(gUnknown_2039D98, 0x53, POKEMON_NAME_LENGTH); + return 0; + + case 0x1B: + { + PokemonStruct1 *pokemon; + struct unkStruct_808D144 sp_84; + PokemonStruct1 sp_ac; + + UnlockFriendArea(GetFriendArea(MONSTER_ABSOL)); + sp_84 = gUnknown_8116738; + sub_808D144(&sp_ac, &sp_84); + pokemon = sub_808D1DC(&sp_ac); + if(pokemon == NULL) return 1; + IncrementAdventureNumJoined(); + pokemon->unk0 |= FLAG_ON_TEAM; + return 0; + } + case 0x1C: + { + PokemonStruct1 *pokemon = sub_808D434(MONSTER_ABSOL, 0); + if(pokemon == NULL) return 1; + pokemon->unk0 |= FLAG_ON_TEAM; + return 0; + } + case 0x1D: + { + if( sub_808D278(MONSTER_SMEARGLE) == 0) + return 1; + else + return 0; + } + case 0x1E: + sub_80A8F50(gUnknown_2039D98, 0x7C, POKEMON_NAME_LENGTH); + return 0; + + case 0x1F: + { + PokemonStruct1 *pokemon; + s32 index; + struct unkStruct_808D144 sp_108; + PokemonStruct1 sp_130; + + sp_108 = gUnknown_8116760; + sub_808D144(&sp_130, &sp_108); + pokemon = sub_808D1DC(&sp_130); + if(!pokemon) return 1; + for(index = 0; index < POKEMON_NAME_LENGTH; index++) + { + pokemon->name[index] = gUnknown_2039D98[index]; + } + sub_80922B4(gFormatBuffer_Names[r2], gUnknown_2039D98, POKEMON_NAME_LENGTH); + IncrementAdventureNumJoined(); + return 0; + + } + break; + + case 0x20: + { + sub_80026E8(0x9E, 0x1); + if(sub_808D434(MONSTER_ZAPDOS, 0) == NULL) + { + if(sub_808D2E8(MONSTER_ZAPDOS, NULL, ITEM_NOTHING, &gUnknown_8116788, NULL)) + IncrementAdventureNumJoined(); + } + if(sub_808D434(MONSTER_MOLTRES, 0) == NULL) + { + if(sub_808D2E8(MONSTER_MOLTRES, NULL, ITEM_NOTHING, &gUnknown_811678C, NULL)) + IncrementAdventureNumJoined(); + } + if(sub_808D434(MONSTER_ARTICUNO, 0) == NULL) + { + if(sub_808D2E8(MONSTER_ARTICUNO, NULL, ITEM_NOTHING, &gUnknown_8116790, NULL)) + IncrementAdventureNumJoined(); + } + return 0; + } + break; + + + case 0x21: + if(HasRecruitedMon(MONSTER_ARTICUNO)) + if(HasRecruitedMon(MONSTER_ZAPDOS)) + if(HasRecruitedMon(MONSTER_MOLTRES)) + return 1; + return 0; + case 0x22: + { + PokemonStruct1 *pokemon = GetPlayerPokemonStruct(); + + if(pokemon->speciesNum != MONSTER_ARTICUNO && pokemon->speciesNum != MONSTER_ZAPDOS && pokemon->speciesNum != MONSTER_MOLTRES) + return 1; + } + return 0; + case 0x23: + { + PokemonStruct1 *pokemon; + pokemon = GetPlayerPokemonStruct(); + if (pokemon != NULL && pokemon->speciesNum == MONSTER_HO_OH) + return 2; + else if (sub_8098134(MONSTER_HO_OH) != 0) + return 1; + } + return 0; + case 0x24: + sub_80A8F50(gUnknown_2039D98, 0x79, POKEMON_NAME_LENGTH); + return 0; + + case 0x25: + { + PokemonStruct1 *pokemon; + s32 index; + struct unkStruct_808D144 sp_188; + PokemonStruct1 sp_1b0; + + if(!GetFriendAreaStatus(GetFriendArea(MONSTER_LATIOS))) + UnlockFriendArea(GetFriendArea(MONSTER_LATIOS)); + sp_188 = gUnknown_8116794; + sub_808D144(&sp_1b0, &sp_188); + pokemon = sub_808D1DC(&sp_1b0); + if(pokemon == NULL) return 1; + for(index = 0; index < POKEMON_NAME_LENGTH; index++) + { + pokemon->name[index] = gUnknown_2039D98[index]; + } + IncrementAdventureNumJoined(); + return 0; + } + + break; + case 0x26: + sub_80A8F50(gUnknown_2039D98, 0x7A, POKEMON_NAME_LENGTH); + return 0; + case 0x27: + { + PokemonStruct1 *pokemon; + s32 index; + struct unkStruct_808D144 sp_208; + PokemonStruct1 sp_230; + + sp_208 = gUnknown_81167BC; + sub_808D144(&sp_230, &sp_208); + pokemon = sub_808D1DC(&sp_230); + if(pokemon == NULL) return 1; + for(index = 0; index < POKEMON_NAME_LENGTH; index++) + { + pokemon->name[index] = gUnknown_2039D98[index]; + } + IncrementAdventureNumJoined(); + return 0; + } + break; + + case 0x28: + { + if(GetNumberOfFilledInventorySlots() >= INVENTORY_SIZE) + { + Item *item = &gUnknown_81167E4; + s32 id = item->id; + if(IsNotMoneyOrUsedTMItem(id)) + if(gTeamInventoryRef->teamStorage[id] < 999) + gTeamInventoryRef->teamStorage[id] += 1; + + } + else + { + Item *item = &gUnknown_81167E4; + sub_809124C(item->id, 0); + FillInventoryGaps(); + } + } + return 0; + + case 0x29: + { + s32 index = (s16)(RandInt(0x1A2) + 1); + s32 r4 = RandInt(0x20); + s32 r7 = 0x1A4; + s32 r6 = 0; + + while (1) + { + s16 indexS16; + index = (s16)(index + 1); + if (index >= 0x1a4) { + index = 1; + } + if (--r7 < 0) { + if (r6 == 0) { + SetScriptVarValue(NULL, NEW_FRIEND_KIND, 0); + return 0; + } + if (r4 >= r6) { + r4 = RandInt(r6); + r7 = 0x1A4; + } + } + // S16 memes AGAIN... + indexS16 = index; + index = indexS16; + if (indexS16 == MONSTER_ARTICUNO || indexS16 == MONSTER_ZAPDOS || indexS16 == MONSTER_MOLTRES + || indexS16 == MONSTER_GROUDON + || indexS16 == MONSTER_RAYQUAZA + || indexS16 == MONSTER_RAYQUAZA_CUTSCENE + || indexS16 == MONSTER_KYOGRE + || indexS16 == MONSTER_LUGIA + || indexS16 == MONSTER_CASTFORM_SNOWY + || indexS16 == MONSTER_CASTFORM_SUNNY + || indexS16 == MONSTER_CASTFORM_RAINY + || indexS16 == MONSTER_DEOXYS_NORMAL + || indexS16 == MONSTER_DEOXYS_ATTACK + || indexS16 == MONSTER_DEOXYS_DEFENSE + || indexS16 == MONSTER_DEOXYS_SPEED + || indexS16 == MONSTER_MEWTWO + || indexS16 == MONSTER_JIRACHI + || indexS16 == MONSTER_MEW + || indexS16 == MONSTER_LATIAS + || indexS16 == MONSTER_LATIOS + || indexS16 == MONSTER_ENTEI + || indexS16 == MONSTER_RAIKOU + || indexS16 == MONSTER_SUICUNE + || indexS16 == MONSTER_HO_OH + || indexS16 == MONSTER_REGIROCK + || indexS16 == MONSTER_REGICE + || indexS16 == MONSTER_REGISTEEL + || indexS16 == MONSTER_CELEBI + ) + continue; + if(!IsExclusivePokemonUnlocked(index)) continue; + if(GetFriendAreaStatus(GetFriendArea(index))) { + if(HasRecruitedMon(index)) continue; + if(sub_808D278(index) == 0) continue; + } + + r6++; + r4--; + if (r4 < 0) + break; + } + + SetScriptVarValue(NULL, NEW_FRIEND_KIND, index); + WriteFriendAreaName(gFormatBuffer_FriendArea, GetFriendArea(index), FALSE); + if (GetFriendAreaStatus(GetFriendArea(index)) != 0) + return 1; + else + return 2; + } + case 0x2A: + { + s32 id = (s16) GetScriptVarValue(0, NEW_FRIEND_KIND); + WriteFriendAreaName(gFormatBuffer_FriendArea,(GetFriendArea(id)), FALSE); + if (id == 0) + return 0; + else if(GetFriendAreaStatus(GetFriendArea(id)) != 0) + return 1; + else + return 2; + } + break; + case 0x2B: + sub_80A8F50(gUnknown_2039D98, 0x20, POKEMON_NAME_LENGTH); + return 0; + case 0x2C: + { + PokemonStruct1 *pokemon; + s32 index; + if(r2 != 0) + { + s32 id = (s16) GetScriptVarValue(0, NEW_FRIEND_KIND); + s32 matchMe = id; + WriteFriendAreaName(gFormatBuffer_FriendArea,(GetFriendArea((s16) id)), FALSE); + if(id == 0) + return 0; + + if(!GetFriendAreaStatus(GetFriendArea(id))) + UnlockFriendArea(GetFriendArea(id)); + pokemon = sub_808D2E8(matchMe, NULL ,ITEM_NOTHING, &gUnknown_81167E8, MOVE_NOTHING); + if(pokemon == NULL) + return 0; + + for(index = 0; index < POKEMON_NAME_LENGTH; index++) + pokemon->name[index] = gUnknown_2039D98[index]; + IncrementAdventureNumJoined(); + return 1; + } + else + { + SetScriptVarValue(NULL, NEW_FRIEND_KIND, 0); + return 0; + } + } + + case 0x2D: + if(GetPtsToNextRank() > 0) + return 1; + else + return 0; + case 0x2E: + { + s32 rankBefore = GetRescueTeamRank(); + s32 points = GetPtsToNextRank(); + if(points > 0) { + s32 rankAfter; + AddToTeamRankPts(points); + rankAfter = GetRescueTeamRank(); + InlineStrcpy(gFormatBuffer_Items[0], GetTeamRankString(rankBefore)); + InlineStrcpy(gFormatBuffer_Items[1], GetTeamRankString(rankAfter)); + if(ScriptPrintText(0, -1, gUnknown_81167EC) != 0) + return 1; + } + else { + return 0; + } + } + // breakthrough + case 0x2F: + AddToTeamMoney(0x2710); + return 0; + case 0x30: + { + if(sub_808D278(MONSTER_GARDEVOIR) == 0) + return 1; + else + return 0; + } + break; + case 0x31: + sub_80A8F50(gUnknown_2039D98, 0x52, POKEMON_NAME_LENGTH); + return 0; + + case 0x32: + { + struct unkStruct_808D144 sp_288; + PokemonStruct1 sp_2b0; + sp_288 = gUnknown_811681C; + sub_808D144(&sp_2b0, &sp_288); + if(sub_808D1DC(&sp_2b0) == 0) { + return 1; + } + else { + IncrementAdventureNumJoined(); + return 0; + } + } + case 0x33: + if(ScriptVarScenarioAfter(SCENARIO_MAIN, 0x12, -1)) + { + if(GetScriptVarValue(0, GROUND_GETOUT) != 4) + { + if (GetScriptVarArrayValue(0, EVENT_GONBE, 0) <= 0) + { + if(OtherRandInt(0x100) == 0) + { + SetScriptVarArrayValue(0, EVENT_GONBE, 0, 4); + return 1; + } + else + SetScriptVarArrayValue(0, EVENT_GONBE, 0, 1); + } + } + } + return 0; + + case 0x34: + { + s32 index; + s32 id; + Item *item = &gUnknown_8116844; + for(index = 0; index < 3; index++) + { + if(GetNumberOfFilledInventorySlots() >= INVENTORY_SIZE) + { + id = item->id; + if(IsNotMoneyOrUsedTMItem(id)) + if(gTeamInventoryRef->teamStorage[id] < 999) + gTeamInventoryRef->teamStorage[id] += 1; + + } + else + { + sub_809124C(item->id, 0); + FillInventoryGaps(); + } + } + } + return 0; + case 0x35: + { + PokemonStruct1 *pokemon = GetPlayerPokemonStruct(); + if(pokemon != NULL && pokemon->speciesNum == MONSTER_CHANSEY) + return 2; + else + if(sub_8098134(MONSTER_CHANSEY) != 0) + return 1; + else + return 0; + } + break; + + case 0x38: + sub_80A56A0(0, 1); + return 0; + case 0x36: { + s32 sp_328[2]; + sp_328[0] = r2; + sp_328[1] = r3; + sub_80A56F0(sp_328); + return 0; + } + case 0x37: { + s32 sp_330[2]; + sp_330[0] = r2; + sp_330[1] = r3; + sub_80A5704(sp_330); + return 0; + } + case 0x39: + sub_809C6CC(r2); + return 0; + case 0x3A: + sub_809C6EC(); + return 0; + case 0x3B: + sub_809C760(); + return 0; + case 0x3C: + { + s32 index; + index = 0; + for(index = 0; index < 0x18; index = (s16)(index + 1)) + { + sub_80A86C8(index, 0x400000); + } + for (index = 0; index < 0x10; index = (s16)(index + 1)) + { + sub_80AC1B0(index, 0x400000); + } + for (index = 0; index < 0x10; index = (s16)(index + 1)) + { + sub_80AD0C8(index, 0x400000); + } + } + return 0; + case 0x3D: { + s32 sp_338[2]; + sp_338[0] = r2; + sp_338[1] = r3; + sub_80A59A0(0, sp_338, sub_80A5984(1, sp_338)); + return 0; + } + case 0x3E: + { + s32 ret; + Action *r7; + GroundEffectData sp_308; + PixelPos sp_340; + PixelPos sp_348; + PixelPos sp_350; + PixelPos sp_358; + + sp_308.kind = 1; + sp_308.unk1 = 0; + sp_308.width = 1; + sp_308.height = 1; + sp_308.pos = (CompactPos) {0}; + sp_308.script = gFunctionScriptTable[406].script; // MOVE_DEBUG_CAMERA + ret = GroundEffect_Add(-1, &sp_308, r2, r3); + if(ret < 0) break; + r7 = sub_80AD158(ret); + sub_80A579C(&sp_340, &sp_348); + sp_340.y += 0xC00; + sp_348.y += 0xC00; + action->callbacks->getHitboxCenter(action->parentObject, &sp_350); + if(sp_350.x < sp_340.x) + sp_350.x = sp_340.x; + else if (sp_350.x >= sp_348.x) + sp_350.x = sp_348.x - 1; + if(sp_350.y < sp_340.y) + sp_350.y = sp_340.y; + else if (sp_350.y >= sp_348.y) + sp_350.y = sp_348.y - 1; + + sp_340.x -= 1024; + sp_340.y -= 1024; + sp_348.x += 1024; + sp_348.y += 1024; + + r7->callbacks->setPositionBounds(r7->parentObject, &sp_340, &sp_348); + r7->callbacks->moveReal(r7->parentObject, &sp_350); + sp_358 = (PixelPos) {0}; + r7->callbacks->moveRelative(r7->parentObject, &sp_358); + return 1; + } + break; + + case 0x3F: + { + s32 index; + s32 ret; + s32 held = gRealInputs.held; + s32 pressed = gRealInputs.pressed; + if(!(pressed & (START_BUTTON | SELECT_BUTTON))) + { + PixelPos sp_368; + ret = sub_809CFE8(held); + if((s8)ret != -1) + { + s32 to; + sp_368 = SetVecFromDirectionSpeed(ret,0x100); + + to = 2; + if(held & B_BUTTON) { + to = 4; + } + + for(index = 0; index < to; index++) + { + if(action->callbacks->moveRelative(action->parentObject, &sp_368) != 0) + { + PixelPos pixelPos = {0, sp_368.y}; + if(action->callbacks->moveRelative(action->parentObject, &pixelPos) != 0) + { + PixelPos pixelPos = {sp_368.x, 0}; + action->callbacks->moveRelative(action->parentObject, &pixelPos); + } + } + } + } + return -1; + } + } + break; + + case 0x40: + sub_80993C0(r2 == 0 ? 0 : 1); + return 0; + case 0x42: + sub_8011C28(1); + GroundMainGameEndRequest(r2); + FadeOutAllMusic(r2); + return 0; + case 0x41: + GroundMainGameEndRequest(r2); + FadeOutAllMusic(r2); + return 0; + case 0x43: + gUnknown_2039DA8 = GetCurrentBGSong(); + if(gUnknown_2039DA8 != STOP_BGM) + return 1; + return 0; + case 0x44: + if (gUnknown_2039DA8 != STOP_BGM) + { + xxx_call_start_new_bgm(gUnknown_2039DA8); + gUnknown_2039DA8 = STOP_BGM; + return 1; + } + return 0; + case 0x45: + if (gUnknown_2039DA8 != STOP_BGM) + { + xxx_call_fade_in_new_bgm(gUnknown_2039DA8, r2); + gUnknown_2039DA8 = STOP_BGM; + return 1; + } + return 0; + case 0x46: + if (gUnknown_2039DA8 != STOP_BGM) + { + xxx_call_queue_bgm(gUnknown_2039DA8); + gUnknown_2039DA8 = STOP_BGM; + return 1; + } + return 0; + case 0x47: + sub_80997F4(r2, r3); + return 0; + case 0x48: + sub_80997F4(0x1E, r2); + return 0; + case 0x49: + GroundSprite_ExtendPaletteAdd(0, r2); + return 0; + case 0x4A: + GroundSprite_ExtendPaletteDelete(0); + return 0; + } + + return 0; +} + +void GroundScript_Unlock(void) +{ + s32 index; + bool8 cond; + + if(gAnyScriptLocked == 0) return; + + gAnyScriptLocked = 0; + index = 0; + for (index = 0; index <= 0x80; index++) { + if(gScriptLocks[index] != 0) { + Log(1, gUnknown_8116848, index); + cond = GroundMapNotifyAll(index); + cond |= GroundLivesNotifyAll(index); + cond |= GroundObjectsNotifyAll(index); + cond |= GroundEffectsNotifyAll(index); + + if(gScriptLockConds[index] != 0) { + if (cond) { + GroundMapNotifyAll(index | 0x80); + GroundLivesNotifyAll(index | 0x80); + GroundObjectsNotifyAll(index | 0x80); + GroundEffectsNotifyAll(index | 0x80); + gScriptLocks[index] = gScriptLockConds[index] = 0; + } + } else { + gScriptLocks[index] = 0; + } + } + } +} + +const ScriptCommand *FindLabel(Action *action, s32 r1) +{ + ScriptCommand script; + const ScriptCommand *scriptPtr2; + const ScriptCommand *scriptPtr; + + scriptPtr2 = action->scriptData.script.ptr2; + scriptPtr = scriptPtr2 + 1; + + while(1) { + script = *scriptPtr; + scriptPtr++; + + if(script.op == 0xF4 && r1 == script.argShort) break; + + // DS: Assert(script.op != 0, "script search label error %d", label) + // DS: Assert(script.op != 0xF6, "script search label error %d", label) + } + return scriptPtr; +} + +const ScriptCommand *ResolveJump(Action *action, s32 r1) +{ + ScriptCommand script; + const ScriptCommand *scriptPtr; + s32 temp; + + scriptPtr = action->scriptData.script.ptr; + + while(1) { + script = *scriptPtr; + + if (script.op == 0xCC) + { + if(FlagJudge(r1, script.arg1, JUDGE_EQ)) + return FindLabel(action, script.argShort); + } + else if (script.op == 0xCD) + { + if(FlagJudge(r1, script.arg1, script.argByte)) + return FindLabel(action, script.argShort); + } + else if (script.op == 0xCE) + { + temp = GetScriptVarValue(action->scriptData.localVars.buf, (s16)script.arg1); + if(FlagJudge(r1, temp, script.argByte)) + return FindLabel(action, script.argShort); + } + else + { + return scriptPtr; + } + scriptPtr++; + } +} diff --git a/src/ground_script_2.c b/src/ground_script_2.c deleted file mode 100644 index c973ff38f..000000000 --- a/src/ground_script_2.c +++ /dev/null @@ -1,103 +0,0 @@ -#include "global.h" -#include "debug.h" -#include "event_flag.h" -#include "ground_map_1.h" -#include "ground_script.h" - -extern u8 gAnyScriptLocked; -extern u8 gScriptLocks[]; -extern u8 gScriptLockConds[]; -extern u8 gUnknown_8116848[]; - -bool8 GroundLivesNotifyAll(s16); -bool8 GroundObjectsNotifyAll(s16); -bool8 GroundEffectsNotifyAll(s16); - -void GroundScript_Unlock(void) -{ - s32 index; - bool8 cond; - - if(gAnyScriptLocked == 0) return; - - gAnyScriptLocked = 0; - index = 0; - for (index = 0; index <= 0x80; index++) { - if(gScriptLocks[index] != 0) { - Log(1, gUnknown_8116848, index); - cond = GroundMapNotifyAll(index); - cond |= GroundLivesNotifyAll(index); - cond |= GroundObjectsNotifyAll(index); - cond |= GroundEffectsNotifyAll(index); - - if(gScriptLockConds[index] != 0) { - if (cond) { - GroundMapNotifyAll(index | 0x80); - GroundLivesNotifyAll(index | 0x80); - GroundObjectsNotifyAll(index | 0x80); - GroundEffectsNotifyAll(index | 0x80); - gScriptLocks[index] = gScriptLockConds[index] = 0; - } - } else { - gScriptLocks[index] = 0; - } - } - } -} - -const ScriptCommand *FindLabel(Action *action, s32 r1) -{ - ScriptCommand script; - const ScriptCommand *scriptPtr2; - const ScriptCommand *scriptPtr; - - scriptPtr2 = action->scriptData.script.ptr2; - scriptPtr = scriptPtr2 + 1; - - while(1) { - script = *scriptPtr; - scriptPtr++; - - if(script.op == 0xF4 && r1 == script.argShort) break; - - // DS: Assert(script.op != 0, "script search label error %d", label) - // DS: Assert(script.op != 0xF6, "script search label error %d", label) - } - return scriptPtr; -} - -const ScriptCommand *ResolveJump(Action *action, s32 r1) -{ - ScriptCommand script; - const ScriptCommand *scriptPtr; - s32 temp; - - scriptPtr = action->scriptData.script.ptr; - - while(1) { - script = *scriptPtr; - - if (script.op == 0xCC) - { - if(FlagJudge(r1, script.arg1, JUDGE_EQ)) - return FindLabel(action, script.argShort); - } - else if (script.op == 0xCD) - { - if(FlagJudge(r1, script.arg1, script.argByte)) - return FindLabel(action, script.argShort); - } - else if (script.op == 0xCE) - { - temp = GetScriptVarValue(action->scriptData.localVars.buf, (s16)script.arg1); - if(FlagJudge(r1, temp, script.argByte)) - return FindLabel(action, script.argShort); - } - else - { - return scriptPtr; - } - scriptPtr++; - } -} - diff --git a/src/move_orb_effects_1.c b/src/move_orb_effects_1.c index 4019c7d0b..6177cc583 100644 --- a/src/move_orb_effects_1.c +++ b/src/move_orb_effects_1.c @@ -412,7 +412,7 @@ void BurnedStatusTarget(Entity * pokemon, Entity * target, u8 param_3, bool8 dis entityInfo->burnClassStatus.status = STATUS_BURN; entityInfo->burnClassStatus.turns = CalculateStatusTurns(target,gBurnTurnRange,TRUE) + 1; entityInfo->burnClassStatus.damageCountdown = 0; - entityInfo->burnClassStatus.unk4 = 0; + entityInfo->burnClassStatus.badlyPoisonedDamageCount = 0; isNotBurned = FALSE; if (param_3 != 0) { sub_8041C34(target); @@ -501,7 +501,7 @@ void PoisonedStatusTarget(Entity * pokemon, Entity * target, bool8 displayMessag entityInfo->burnClassStatus.status = STATUS_POISONED; entityInfo->burnClassStatus.turns = CalculateStatusTurns(target,gPoisonTurnRange,TRUE) + 1; entityInfo->burnClassStatus.damageCountdown = 0; - entityInfo->burnClassStatus.unk4 = 0; + entityInfo->burnClassStatus.badlyPoisonedDamageCount = 0; isNotPoisoned = FALSE; sub_8041C6C(target); TryDisplayDungeonLoggableMessage3(pokemon,target,gUnknown_80FB598); @@ -588,7 +588,7 @@ void BadlyPoisonedStatusTarget(Entity * pokemon, Entity * target, bool8 displayM entityInfo->burnClassStatus.status = STATUS_BADLY_POISONED; entityInfo->burnClassStatus.turns = CalculateStatusTurns(target,gBadPoisonTurnRange,TRUE) + 1; entityInfo->burnClassStatus.damageCountdown = 0; - entityInfo->burnClassStatus.unk4 = 0; + entityInfo->burnClassStatus.badlyPoisonedDamageCount = 0; isNotBadlyPoisoned = FALSE; sub_8041C7C(target); TryDisplayDungeonLoggableMessage3(pokemon,target,gUnknown_80FB5B4); @@ -1341,7 +1341,7 @@ void ParalyzeStatusTarget(Entity * pokemon, Entity * target, bool8 displayMessag entityInfo->burnClassStatus.status = STATUS_PARALYSIS; entityInfo->burnClassStatus.turns = CalculateStatusTurns(target,gParalysisTurnRange,TRUE) + 1; entityInfo->burnClassStatus.damageCountdown = 0; - entityInfo->burnClassStatus.unk4 = 0; + entityInfo->burnClassStatus.badlyPoisonedDamageCount = 0; bVar6 = FALSE; TryDisplayDungeonLoggableMessage3(pokemon,target,gUnknown_80FB2AC); sub_8041C1C(target); diff --git a/src/pokemon.c b/src/pokemon.c index 8e7899039..c3fddc7f5 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -280,12 +280,14 @@ PokemonStruct1 *sub_808D1DC(PokemonStruct1 *pokemon) return NULL; } -PokemonStruct1 *sub_808D278(s16 species, PokemonStruct1 *pokemon) +PokemonStruct1 *sub_808D278(s32 species) { u32 friendArea; s32 i; - friendArea = gMonsterParameters[species].friendArea; + s16 species_s16 = (s16)species; + + friendArea = gMonsterParameters[species_s16].friendArea; if(!gFriendAreas[friendArea]) return NULL; for (i = 0; i < NUM_MONSTERS; i++) { diff --git a/src/rescue_team_info.c b/src/rescue_team_info.c index df4a3e2de..54d400208 100644 --- a/src/rescue_team_info.c +++ b/src/rescue_team_info.c @@ -98,9 +98,10 @@ u8 GetRescueTeamRank(void) return LUCARIO_RANK; } -const u8 *GetTeamRankString(u8 index) +const u8 *GetTeamRankString(u32 index) { - return gRescueTeamRanks[index]; + u8 index_u8 = (u8)index; + return gRescueTeamRanks[index_u8]; } // Unused diff --git a/src/text_1.c b/src/text_1.c index 7fb2877e5..a99630f59 100644 --- a/src/text_1.c +++ b/src/text_1.c @@ -116,14 +116,14 @@ static const u32 sFadeInDungeon[8] = {0x88888888, 0x88888888, 0x88888888, 0x8888 static const u32 sUnknown_80B8804[4] = {0, 1, 2, 3}; static const u32 sUnknown_80B8814[4] = {1, 2, 3, 0}; -static void AddWindow(Window *windows, u32 *vram, u32 *, u16 *, u32 windowId, const WindowTemplate *winTemplate, bool8, s32 firstBlockId, DungeonPos *positionModifier, u8); +static void AddWindow(Window *windows, u32 *vram, u32 *, u16 tilemaps[4][32][32], u32 windowId, const WindowTemplate *winTemplate, bool8, s32 firstBlockId, DungeonPos *positionModifier, u8); static void ShowWindowsInternal(const WindowTemplates *winTemplates, bool8, bool8, DungeonPos *positionModifier); -static void sub_800677C(Window *window, s32, u16 *, u8); -static void sub_80069CC(Window *window, s32, s32, s32, u16 *); -static void sub_8006AC4(Window *window, s32, s32, s32, u16 *); -static void sub_8006B70(Window *window, s32, s32, s32, u16 *); -static void sub_8006C44(Window *window, s32, u16 *, u8); -static void sub_8006E94(Window *, s32, u32, const WindowHeader *, u16 *); +static void PutWindowTopBorderTilemap(Window *window, s32 y, u16 tilemaps[4][32][32], u8 a3); +static void PutWindowLeftBorderTilemap(Window *window, s32 x, s32 y, s32 a3, u16 tilemaps[4][32][32]); +static void PutWindowFillTilemap(Window *window, s32 x, s32 y, s32 a3, u16 tilemaps[4][32][32]); +static void PutWindowRightBorderTilemap(Window *window, s32 x, s32 y, s32 a3, u16 tilemaps[4][32][32]); +static void PutWindowBottomBorderTilemap(Window *window, s32, u16 tilemaps[4][32][32], u8); +static void PutHeaderWindowTopBorderTilemap(Window *window, s32 y, u32 a2, const WindowHeader *winHeader, u16 tilemaps[4][32][32]); // arm9.bin::02005448 void LoadCharmaps(void) @@ -263,7 +263,7 @@ static void ShowWindowsInternal(const WindowTemplates *winTemplates, bool8 a1, b sSavedWindows.id[i] = winTemplates->id[i]; if (winTemplates->id[i].width != 0) { - AddWindow(gWindows, (u32 *)VRAM, sUnknown_20274B4, &gBgTilemaps[0][0][0], sUnknown_80B8804[i], &winTemplates->id[i], a1, area, positionModifier, 0); + AddWindow(gWindows, (u32 *)VRAM, sUnknown_20274B4, gBgTilemaps, sUnknown_80B8804[i], &winTemplates->id[i], a1, area, positionModifier, 0); sub_80089AC(&winTemplates->id[i], positionModifier); area += winTemplates->id[i].width * winTemplates->id[i].unk10; } @@ -306,7 +306,7 @@ u32 sub_8006544(u32 index) } // arm9.bin::02004D54 -static void AddWindow(Window *windows, u32 *vram, u32 *a2, u16 *a3, u32 windowId, const WindowTemplate *winTemplate, bool8 a6, s32 firstBlockId, DungeonPos *positionModifier, u8 a9) +static void AddWindow(Window *windows, u32 *vram, u32 *a2, u16 tilemaps[4][32][32], u32 windowId, const WindowTemplate *winTemplate, bool8 a6, s32 firstBlockId, DungeonPos *positionModifier, u8 a9) { Window *newWindow; s32 x, y; @@ -349,43 +349,43 @@ static void AddWindow(Window *windows, u32 *vram, u32 *a2, u16 *a3, u32 windowId return; if ((winTemplate->unk0 & 0xA0) != 0x80) { - s32 newY = y - 1; + s32 workingY = y - 1; s32 i, j; if (newWindow->type == WINDOW_TYPE_WITH_HEADER) { uVar1 = a6 ? newWindow->unk14 : 0; - sub_8006E94(newWindow, newY, uVar1, winTemplate->header, a3); + PutHeaderWindowTopBorderTilemap(newWindow, workingY, uVar1, winTemplate->header, tilemaps); - newY = y + 2; + workingY = y + 2; uVar1 = a6 ? newWindow->unk14 + newWindow->width * (winTemplate->unk12 + 2) : 0; numI = newWindow->height - 2; } else { - sub_800677C(newWindow, newY, a3, a9); + PutWindowTopBorderTilemap(newWindow, workingY, tilemaps, a9); - newY = y; + workingY = y; uVar1 = a6 ? newWindow->unk14 : 0; numI = newWindow->height; } for (i = 0; i < numI; i++) { - s32 newX = x - 1; - sub_80069CC(newWindow, newX, newY, i, a3); - newX = x; + s32 workingX = x - 1; + PutWindowLeftBorderTilemap(newWindow, workingX, workingY, i, tilemaps); + workingX = x; for (j = 0; j < newWindow->width; j++) { - sub_8006AC4(newWindow, newX, newY, uVar1, a3); + PutWindowFillTilemap(newWindow, workingX, workingY, uVar1, tilemaps); - newX++; + workingX++; if (a6) uVar1++; } - sub_8006B70(newWindow, newX, newY, i, a3); - newY++; + PutWindowRightBorderTilemap(newWindow, workingX, workingY, i, tilemaps); + workingY++; } - sub_8006C44(newWindow, newY, a3, a9); + PutWindowBottomBorderTilemap(newWindow, workingY, tilemaps, a9); } if ((winTemplate->unk0 & 0x80) == 0) @@ -395,16 +395,16 @@ static void AddWindow(Window *windows, u32 *vram, u32 *a2, u16 *a3, u32 windowId } // arm9.bin::02004B0C -static void sub_800677C(Window *window, s32 a1, u16 *a2, u8 a3) +static void PutWindowTopBorderTilemap(Window *window, s32 y, u16 tilemaps[4][32][32], u8 a3) { - s32 iVar5; + s32 x; s32 i; - iVar5 = window->x - 1; + x = window->x - 1; - if (a1 > 28) + if (y > 28) return; - if (a1 < 0) + if (y < 0) return; switch (window->type) { @@ -414,66 +414,66 @@ static void sub_800677C(Window *window, s32 a1, u16 *a2, u8 a3) case WINDOW_TYPE_WITH_HEADER: break; case WINDOW_TYPE_NORMAL: - (a2 + a1 * 0x20)[iVar5] = 0xF2D8; + tilemaps[0][y][x] = TILEMAP_TILE_NUM(0x2D8) | TILEMAP_PAL(15); if (a3 != 0) - (a2 + a1 * 0x20)[iVar5 + 0x400] = 0xF293; + tilemaps[1][y][x] = TILEMAP_TILE_NUM(0x293) | TILEMAP_PAL(15); else - (a2 + a1 * 0x20)[iVar5 + 0x400] = 0xF2DB; - iVar5++; + tilemaps[1][y][x] = TILEMAP_TILE_NUM(0x2DB) | TILEMAP_PAL(15); + x++; for (i = 0; i < window->width; i++) { - (a2 + a1 * 0x20)[iVar5] = 0xF2D9; - (a2 + a1 * 0x20)[iVar5 + 0x400] = 0xF2DB; - iVar5++; + tilemaps[0][y][x] = TILEMAP_TILE_NUM(0x2D9) | TILEMAP_PAL(15); + tilemaps[1][y][x] = TILEMAP_TILE_NUM(0x2DB) | TILEMAP_PAL(15); + x++; } - (a2 + a1 * 0x20)[iVar5] = 0xF6D8; + tilemaps[0][y][x] = TILEMAP_TILE_NUM(0x2D8) | TILEMAP_PAL(15) | TILEMAP_FLIP_HORIZONTAL(1); if (a3 != 0) - (a2 + a1 * 0x20)[iVar5 + 0x400] = 0xF693; + tilemaps[1][y][x] = TILEMAP_TILE_NUM(0x293) | TILEMAP_PAL(15) | TILEMAP_FLIP_HORIZONTAL(1); else - (a2 + a1 * 0x20)[iVar5 + 0x400] = 0xF2DB; + tilemaps[1][y][x] = TILEMAP_TILE_NUM(0x2DB) | TILEMAP_PAL(15); break; case WINDOW_TYPE_4: - (a2 + a1 * 0x20)[iVar5] = 0xF2E8; - (a2 + a1 * 0x20)[iVar5 + 0x400] = 0xF2DB; - iVar5++; + tilemaps[0][y][x] = TILEMAP_TILE_NUM(0x2E8) | TILEMAP_PAL(15); + tilemaps[1][y][x] = TILEMAP_TILE_NUM(0x2DB) | TILEMAP_PAL(15); + x++; for (i = 0; i < window->width; i++) { - (a2 + a1 * 0x20)[iVar5] = 0xF2E9; - (a2 + a1 * 0x20)[iVar5 + 0x400] = 0xF2DB; - iVar5++; + tilemaps[0][y][x] = TILEMAP_TILE_NUM(0x2E9) | TILEMAP_PAL(15); + tilemaps[1][y][x] = TILEMAP_TILE_NUM(0x2DB) | TILEMAP_PAL(15); + x++; } - (a2 + a1 * 0x20)[iVar5] = 0xF6E8; - (a2 + a1 * 0x20)[iVar5 + 0x400] = 0xF2DB; + tilemaps[0][y][x] = TILEMAP_TILE_NUM(0x2E8) | TILEMAP_PAL(15) | TILEMAP_FLIP_HORIZONTAL(1); + tilemaps[1][y][x] = TILEMAP_TILE_NUM(0x2DB) | TILEMAP_PAL(15); break; case WINDOW_TYPE_FILL_TRANSPARENT: - (a2 + a1 * 0x20)[iVar5] = 0xF2DC; - iVar5++; + tilemaps[0][y][x] = TILEMAP_TILE_NUM(0x2DC) | TILEMAP_PAL(15); + x++; for (i = 0; i < window->width; i++) { - (a2 + a1 * 0x20)[iVar5] = 0xF2DD; - iVar5++; + tilemaps[0][y][x] = TILEMAP_TILE_NUM(0x2DD) | TILEMAP_PAL(15); + x++; } - (a2 + a1 * 0x20)[iVar5] = 0xF6DC; + tilemaps[0][y][x] = TILEMAP_TILE_NUM(0x2DC) | TILEMAP_PAL(15) | TILEMAP_FLIP_HORIZONTAL(1); break; case WINDOW_TYPE_7: - (a2 + a1 * 0x20)[iVar5] = 0xF293; - iVar5++; + tilemaps[0][y][x] = TILEMAP_TILE_NUM(0x293) | TILEMAP_PAL(15); + x++; for (i = 0; i < window->width; i++) { - (a2 + a1 * 0x20)[iVar5] = 0xF297; - iVar5++; + tilemaps[0][y][x] = TILEMAP_TILE_NUM(0x297) | TILEMAP_PAL(15); + x++; } - (a2 + a1 * 0x20)[iVar5] = 0xF693; + tilemaps[0][y][x] = TILEMAP_TILE_NUM(0x293) | TILEMAP_PAL(15) | TILEMAP_FLIP_HORIZONTAL(1); break; } } // arm9.bin::020049D0 -static void sub_80069CC(Window *window, s32 a1, s32 a2, s32 a3, u16 *a4) +static void PutWindowLeftBorderTilemap(Window *window, s32 x, s32 y, s32 a3, u16 tilemaps[4][32][32]) { - if (a2 > 28) + if (y > 28) return; - if (a2 < 0) + if (y < 0) return; switch (window->type) { @@ -482,68 +482,68 @@ static void sub_80069CC(Window *window, s32 a1, s32 a2, s32 a3, u16 *a4) break; case WINDOW_TYPE_0: if (a3 == 0) { - (a4 + a2 * 0x20)[a1] = 0xF297; - (a4 + a2 * 0x20)[a1 + 0x400] = 0xF2DB; + tilemaps[0][y][x] = TILEMAP_TILE_NUM(0x297) | TILEMAP_PAL(15); + tilemaps[1][y][x] = TILEMAP_TILE_NUM(0x2DB) | TILEMAP_PAL(15); break; } if (a3 == window->height - 1) { - (a4 + a2 * 0x20)[a1] = 0xFA97; - (a4 + a2 * 0x20)[a1 + 0x400] = 0xF2DB; + tilemaps[0][y][x] = TILEMAP_TILE_NUM(0x297) | TILEMAP_PAL(15) | TILEMAP_FLIP_VERTICAL(1); + tilemaps[1][y][x] = TILEMAP_TILE_NUM(0x2DB) | TILEMAP_PAL(15); break; } // Fallthrough case WINDOW_TYPE_NORMAL: case WINDOW_TYPE_WITH_HEADER: - (a4 + a2 * 0x20)[a1] = 0xF2DA; - (a4 + a2 * 0x20)[a1 + 0x400] = 0xF2DB; + tilemaps[0][y][x] = TILEMAP_TILE_NUM(0x2DA) | TILEMAP_PAL(15); + tilemaps[1][y][x] = TILEMAP_TILE_NUM(0x2DB) | TILEMAP_PAL(15); break; case WINDOW_TYPE_4: - (a4 + a2 * 0x20)[a1] = 0xF2EA; - (a4 + a2 * 0x20)[a1 + 0x400] = 0xF2DB; + tilemaps[0][y][x] = TILEMAP_TILE_NUM(0x2EA) | TILEMAP_PAL(15); + tilemaps[1][y][x] = TILEMAP_TILE_NUM(0x2DB) | TILEMAP_PAL(15); break; case WINDOW_TYPE_FILL_TRANSPARENT: - (a4 + a2 * 0x20)[a1] = 0xF2DE; + tilemaps[0][y][x] = TILEMAP_TILE_NUM(0x2DE) | TILEMAP_PAL(15); break; case WINDOW_TYPE_7: - (a4 + a2 * 0x20)[a1] = 0xF2B6; + tilemaps[0][y][x] = TILEMAP_TILE_NUM(0x2B6) | TILEMAP_PAL(15); break; } } // arm9.bin::020048F0 -static void sub_8006AC4(Window *window, s32 a1, s32 a2, s32 a3, u16 *a4) +static void PutWindowFillTilemap(Window *window, s32 x, s32 y, s32 a3, u16 tilemaps[4][32][32]) { - if (a2 > 28) + if (y > 28) return; - if (a2 < 0) + if (y < 0) return; switch (window->type) { case WINDOW_TYPE_2: - (a4 + a2 * 0x20)[a1] = a3 | 0xF000; - (a4 + a2 * 0x20)[a1 + 0x400] = 0xF278; + tilemaps[0][y][x] = a3 | TILEMAP_PAL(15); + tilemaps[1][y][x] = TILEMAP_TILE_NUM(0x278) | TILEMAP_PAL(15); break; case WINDOW_TYPE_0: case WINDOW_TYPE_WITHOUT_BORDER: case WINDOW_TYPE_NORMAL: case WINDOW_TYPE_4: case WINDOW_TYPE_WITH_HEADER: - (a4 + a2 * 0x20)[a1] = a3 | 0xF000; - (a4 + a2 * 0x20)[a1 + 0x400] = 0xF2DB; + tilemaps[0][y][x] = a3 | TILEMAP_PAL(15); + tilemaps[1][y][x] = TILEMAP_TILE_NUM(0x2DB) | TILEMAP_PAL(15); break; case WINDOW_TYPE_FILL_TRANSPARENT: case WINDOW_TYPE_7: - (a4 + a2 * 0x20)[a1] = a3 | 0xF000; + tilemaps[0][y][x] = a3 | TILEMAP_PAL(15); break; } } // arm9.bin::020047B4 -static void sub_8006B70(Window *window, s32 a1, s32 a2, s32 a3, u16 *a4) +static void PutWindowRightBorderTilemap(Window *window, s32 x, s32 y, s32 a3, u16 tilemaps[4][32][32]) { - if (a2 > 28) + if (y > 28) return; - if (a2 < 0) + if (y < 0) return; switch (window->type) { @@ -552,45 +552,45 @@ static void sub_8006B70(Window *window, s32 a1, s32 a2, s32 a3, u16 *a4) break; case WINDOW_TYPE_0: if (a3 == 0) { - (a4 + a2 * 0x20)[a1] = 0xF697; - (a4 + a2 * 0x20)[a1 + 0x400] = 0xF2DB; + tilemaps[0][y][x] = TILEMAP_TILE_NUM(0x297) | TILEMAP_PAL(15) | TILEMAP_FLIP_HORIZONTAL(1); + tilemaps[1][y][x] = TILEMAP_TILE_NUM(0x2DB) | TILEMAP_PAL(15); break; } if (a3 == window->height - 1) { - (a4 + a2 * 0x20)[a1] = 0xFE97; - (a4 + a2 * 0x20)[a1 + 0x400] = 0xF2DB; + tilemaps[0][y][x] = TILEMAP_TILE_NUM(0x297) | TILEMAP_PAL(15) | TILEMAP_FLIP_HORIZONTAL(1) | TILEMAP_FLIP_VERTICAL(1); + tilemaps[1][y][x] = TILEMAP_TILE_NUM(0x2DB) | TILEMAP_PAL(15); break; } // Fallthrough case WINDOW_TYPE_NORMAL: case WINDOW_TYPE_WITH_HEADER: - (a4 + a2 * 0x20)[a1] = 0xF6DA; - (a4 + a2 * 0x20)[a1 + 0x400] = 0xF2DB; + tilemaps[0][y][x] = TILEMAP_TILE_NUM(0x2DA) | TILEMAP_PAL(15) | TILEMAP_FLIP_HORIZONTAL(1); + tilemaps[1][y][x] = TILEMAP_TILE_NUM(0x2DB) | TILEMAP_PAL(15); break; case WINDOW_TYPE_4: - (a4 + a2 * 0x20)[a1] = 0xF6EA; - (a4 + a2 * 0x20)[a1 + 0x400] = 0xF2DB; + tilemaps[0][y][x] = TILEMAP_TILE_NUM(0x2EA) | TILEMAP_PAL(15) | TILEMAP_FLIP_HORIZONTAL(1); + tilemaps[1][y][x] = TILEMAP_TILE_NUM(0x2DB) | TILEMAP_PAL(15); break; case WINDOW_TYPE_FILL_TRANSPARENT: - (a4 + a2 * 0x20)[a1] = 0xF6DE; + tilemaps[0][y][x] = TILEMAP_TILE_NUM(0x2DE) | TILEMAP_PAL(15) | TILEMAP_FLIP_HORIZONTAL(1); break; case WINDOW_TYPE_7: - (a4 + a2 * 0x20)[a1] = 0xF6B6; + tilemaps[0][y][x] = TILEMAP_TILE_NUM(0x2B6) | TILEMAP_PAL(15) | TILEMAP_FLIP_HORIZONTAL(1); break; } } // arm9.bin::0200456C -static void sub_8006C44(Window *window, s32 a1, u16 *a2, u8 a3) +static void PutWindowBottomBorderTilemap(Window *window, s32 y, u16 tilemaps[4][32][32], u8 a3) { - s32 iVar5; + s32 x; s32 i; - iVar5 = window->x - 1; + x = window->x - 1; - if (a1 > 28) + if (y > 28) return; - if (a1 < 0) + if (y < 0) return; switch (window->type) { @@ -600,148 +600,159 @@ static void sub_8006C44(Window *window, s32 a1, u16 *a2, u8 a3) break; case WINDOW_TYPE_NORMAL: case WINDOW_TYPE_WITH_HEADER: - (a2 + a1 * 0x20)[iVar5] = 0xFAD8; + tilemaps[0][y][x] = TILEMAP_TILE_NUM(0x2D8) | TILEMAP_PAL(15) | TILEMAP_FLIP_VERTICAL(1); if (a3 != 0) - (a2 + a1 * 0x20)[iVar5 + 0x400] = 0xFA93; + tilemaps[1][y][x] = TILEMAP_TILE_NUM(0x293) | TILEMAP_PAL(15) | TILEMAP_FLIP_VERTICAL(1); else - (a2 + a1 * 0x20)[iVar5 + 0x400] = 0xF2DB; - iVar5++; + tilemaps[1][y][x] = TILEMAP_TILE_NUM(0x2DB) | TILEMAP_PAL(15); + x++; for (i = 0; i < window->width; i++) { - (a2 + a1 * 0x20)[iVar5] = 0xFAD9; - (a2 + a1 * 0x20)[iVar5 + 0x400] = 0xF2DB; - iVar5++; + tilemaps[0][y][x] = TILEMAP_TILE_NUM(0x2D9) | TILEMAP_PAL(15) | TILEMAP_FLIP_VERTICAL(1); + tilemaps[1][y][x] = TILEMAP_TILE_NUM(0x2DB) | TILEMAP_PAL(15); + x++; } - (a2 + a1 * 0x20)[iVar5] = 0xFED8; + tilemaps[0][y][x] = TILEMAP_TILE_NUM(0x2D8) | TILEMAP_PAL(15) | TILEMAP_FLIP_VERTICAL(1) | TILEMAP_FLIP_HORIZONTAL(1); if (a3 != 0) - (a2 + a1 * 0x20)[iVar5 + 0x400] = 0xFE93; + tilemaps[1][y][x] = TILEMAP_TILE_NUM(0x293) | TILEMAP_PAL(15) | TILEMAP_FLIP_VERTICAL(1) | TILEMAP_FLIP_HORIZONTAL(1); else - (a2 + a1 * 0x20)[iVar5 + 0x400] = 0xF2DB; + tilemaps[1][y][x] = TILEMAP_TILE_NUM(0x2DB) | TILEMAP_PAL(15); break; case WINDOW_TYPE_4: - (a2 + a1 * 0x20)[iVar5] = 0xFAE8; - (a2 + a1 * 0x20)[iVar5 + 0x400] = 0xF2DB; - iVar5++; + tilemaps[0][y][x] = TILEMAP_TILE_NUM(0x2E8) | TILEMAP_PAL(15) | TILEMAP_FLIP_VERTICAL(1); + tilemaps[1][y][x] = TILEMAP_TILE_NUM(0x2DB) | TILEMAP_PAL(15); + x++; for (i = 0; i < window->width; i++) { - (a2 + a1 * 0x20)[iVar5] = 0xFAE9; - (a2 + a1 * 0x20)[iVar5 + 0x400] = 0xF2DB; - iVar5++; + tilemaps[0][y][x] = TILEMAP_TILE_NUM(0x2E9) | TILEMAP_PAL(15) | TILEMAP_FLIP_VERTICAL(1); + tilemaps[1][y][x] = TILEMAP_TILE_NUM(0x2DB) | TILEMAP_PAL(15); + x++; } - (a2 + a1 * 0x20)[iVar5] = 0xFEE8; - (a2 + a1 * 0x20)[iVar5 + 0x400] = 0xF2DB; + tilemaps[0][y][x] = TILEMAP_TILE_NUM(0x2E8) | TILEMAP_PAL(15) | TILEMAP_FLIP_VERTICAL(1) | TILEMAP_FLIP_HORIZONTAL(1); + tilemaps[1][y][x] = TILEMAP_TILE_NUM(0x2DB) | TILEMAP_PAL(15); break; case WINDOW_TYPE_FILL_TRANSPARENT: - (a2 + a1 * 0x20)[iVar5] = 0xFADC; - iVar5++; + tilemaps[0][y][x] = TILEMAP_TILE_NUM(0x2DC) | TILEMAP_PAL(15) | TILEMAP_FLIP_VERTICAL(1); + x++; for (i = 0; i < window->width; i++) { - (a2 + a1 * 0x20)[iVar5] = 0xFADD; - iVar5++; + tilemaps[0][y][x] = TILEMAP_TILE_NUM(0x2DD) | TILEMAP_PAL(15) | TILEMAP_FLIP_VERTICAL(1); + x++; } - (a2 + a1 * 0x20)[iVar5] = 0xFEDC; + tilemaps[0][y][x] = TILEMAP_TILE_NUM(0x2DC) | TILEMAP_PAL(15) | TILEMAP_FLIP_VERTICAL(1) | TILEMAP_FLIP_HORIZONTAL(1); break; case WINDOW_TYPE_7: - (a2 + a1 * 0x20)[iVar5] = 0xFA93; - iVar5++; + tilemaps[0][y][x] = TILEMAP_TILE_NUM(0x293) | TILEMAP_PAL(15) | TILEMAP_FLIP_VERTICAL(1); + x++; for (i = 0; i < window->width; i++) { - (a2 + a1 * 0x20)[iVar5] = 0xFA97; - iVar5++; + tilemaps[0][y][x] = TILEMAP_TILE_NUM(0x297) | TILEMAP_PAL(15) | TILEMAP_FLIP_VERTICAL(1); + x++; } - (a2 + a1 * 0x20)[iVar5] = 0xFE93; + tilemaps[0][y][x] = TILEMAP_TILE_NUM(0x293) | TILEMAP_PAL(15) | TILEMAP_FLIP_VERTICAL(1) | TILEMAP_FLIP_HORIZONTAL(1); break; } } -// Not even close but I don't feel like continuing atm https://decomp.me/scratch/F58jg // arm9.bin::02004054 -/* -static void sub_8006E94(Window *a0, s32 a1, u32 a2, const WindowHeader *a3, u16 *a4) +static void PutHeaderWindowTopBorderTilemap(Window *window, s32 y, u32 a2, const WindowHeader *winHeader, u16 tilemaps[4][32][32]) { - s32 bVar1; - s32 iVar2; + // a2: color or tile type of some sort? + bool8 currHeaderDone; + s32 x; s32 iVar3; - s32 sVar4; - u16 *puVar5; - u16 *puVar6; - u16 *puVar7; - s32 iVar8; - u16 *puVar9; - u16 *puVar10; - u16 *puVar11; - s32 local_44; - u32 local_3c; - u16 *local_30; - s32 local_2c; - u16 *local_24; + s32 i, j; - iVar2 = a0->unk0; - bVar1 = -1; + x = window->x - 1; + currHeaderDone = FALSE; - if (a1 > 28) + if (y > 28) return; - if (a1 < 0) + if (y < 0) return; - (a4 + a1 * 0x20)[iVar2 - 1] = 0xF278; - (a4 + a1 * 0x20)[iVar2 - 1 + 0x400] = 0xF27A; - (a4 + a1 * 0x20)[iVar2 - 1 + 0x20] = 0xF278; - (a4 + a1 * 0x20)[iVar2 - 1 + 0x420] = 0xF27A; - (a4 + a1 * 0x20)[iVar2 - 1 + 0x40] = 0xF2D8; - (a4 + a1 * 0x20)[iVar2 - 1 + 0x440] = 0xF2DB; + tilemaps[0][y ][x] = TILEMAP_TILE_NUM(0x278) | TILEMAP_PAL(15); + tilemaps[1][y ][x] = TILEMAP_TILE_NUM(0x27A) | TILEMAP_PAL(15); + tilemaps[0][y+1][x] = TILEMAP_TILE_NUM(0x278) | TILEMAP_PAL(15); + tilemaps[1][y+1][x] = TILEMAP_TILE_NUM(0x27A) | TILEMAP_PAL(15); + tilemaps[0][y+2][x] = TILEMAP_TILE_NUM(0x2D8) | TILEMAP_PAL(15); + tilemaps[1][y+2][x] = TILEMAP_TILE_NUM(0x2DB) | TILEMAP_PAL(15); + x++; - local_2c = iVar2 * 2; - puVar5 = a4 + a1 * 0x20 + iVar2 + 0x40; - puVar7 = a4 + a1 * 0x20 + iVar2 + 0x20; - local_30 = a4 + a1 * 0x20 + iVar2 + 0x400; - puVar11 = a4 + a1 * 0x20 + iVar2 + 0x420; - puVar9 = a4 + a1 * 0x20 + iVar2; - iVar8 = a1 * 0x40; + for (i = 0; i < winHeader->count; i++) { + if (i != winHeader->currId) { + s32 tilemapNum; + if (!currHeaderDone) { + if ((winHeader->f3 >> (i) & 1)) { + tilemapNum = i == 0 ? 27 : 31; - for (local_3c = 0; local_3c < a3[0]; local_3c++) { - if (local_3c == a3[1]) { - bVar1 = TRUE; - *puVar9 = 0xF2E0; - *local_30 = 0xF2E2; - *puVar7 = 0xF2DA; - *puVar11 = 0xF2DB; - *puVar5 = 0xF6E7; - puVar9[0x440] = 0xF2DB; - puVar5++; - puVar7++; - local_30++; - puVar11++; - puVar9++; - local_2c += 2; - iVar2++; + tilemaps[0][y ][x] = (tilemapNum + 0x278) | TILEMAP_PAL(15) | TILEMAP_FLIP_HORIZONTAL(1); + tilemaps[0][y+1][x] = TILEMAP_TILE_NUM(0x2B6) | TILEMAP_PAL(15); + tilemaps[0][y+2][x] = TILEMAP_TILE_NUM(0x2D9) | TILEMAP_PAL(15); + } + else { + tilemapNum = i == 0 ? 103 : 107; - if (a2 == 0 || ++a2 == 0) - iVar3 = 0; + tilemaps[0][y ][x] = (tilemapNum + 0x278) | TILEMAP_PAL(15) | TILEMAP_FLIP_HORIZONTAL(1); + tilemaps[0][y+1][x] = TILEMAP_TILE_NUM(0x2EF) | TILEMAP_PAL(15); + tilemaps[0][y+2][x] = TILEMAP_TILE_NUM(0x2D9) | TILEMAP_PAL(15); + } + tilemaps[1][y ][x] = TILEMAP_TILE_NUM(0x27A) | TILEMAP_PAL(15); + tilemaps[1][y+1][x] = TILEMAP_TILE_NUM(0x2DB) | TILEMAP_PAL(15); + tilemaps[1][y+2][x] = TILEMAP_TILE_NUM(0x2DB) | TILEMAP_PAL(15); + } + else { + if ((winHeader->f3 >> (i) & 1)) { + tilemapNum = i == winHeader->count - 1 ? 27 : 31; + + tilemaps[0][y ][x] = (tilemapNum + 0x278) | TILEMAP_PAL(15); + tilemaps[0][y+1][x] = TILEMAP_TILE_NUM(0x2B6) | TILEMAP_PAL(15) | TILEMAP_FLIP_HORIZONTAL(1); + tilemaps[0][y+2][x] = TILEMAP_TILE_NUM(0x2D9) | TILEMAP_PAL(15); + } + else { + tilemapNum = i == winHeader->count - 1 ? 103 : 107; + + tilemaps[0][y ][x] = (tilemapNum + 0x278) | TILEMAP_PAL(15); + tilemaps[0][y+1][x] = TILEMAP_TILE_NUM(0x2EF) | TILEMAP_PAL(15) | TILEMAP_FLIP_HORIZONTAL(1); + tilemaps[0][y+2][x] = TILEMAP_TILE_NUM(0x2D9) | TILEMAP_PAL(15); + } + tilemaps[1][y ][x] = TILEMAP_TILE_NUM(0x27A) | TILEMAP_PAL(15); + tilemaps[1][y+1][x] = TILEMAP_TILE_NUM(0x2DB) | TILEMAP_PAL(15) | TILEMAP_FLIP_HORIZONTAL(1); + tilemaps[1][y+2][x] = TILEMAP_TILE_NUM(0x2DB) | TILEMAP_PAL(15); + } + x++; + if (a2) a2++; + } + else { + currHeaderDone = TRUE; + + tilemaps[0][y ][x] = TILEMAP_TILE_NUM(0x2E0) | TILEMAP_PAL(15); + tilemaps[1][y ][x] = TILEMAP_TILE_NUM(0x2E2) | TILEMAP_PAL(15); + tilemaps[0][y+1][x] = TILEMAP_TILE_NUM(0x2DA) | TILEMAP_PAL(15); + tilemaps[1][y+1][x] = TILEMAP_TILE_NUM(0x2DB) | TILEMAP_PAL(15); + tilemaps[0][y+2][x] = TILEMAP_TILE_NUM(0x2E7) | TILEMAP_PAL(15) | TILEMAP_FLIP_HORIZONTAL(1); + tilemaps[1][y+2][x] = TILEMAP_TILE_NUM(0x2DB) | TILEMAP_PAL(15); + x++; + + if (a2) a2++; + + if (a2) + iVar3 = a2 + window->width; else - iVar3 = a2 + a0->unk4; + iVar3 = 0; - local_24 = a4 + local_2c + iVar8 + 0x80; - puVar10 = a4 + local_2c + iVar8 + 0x40; - puVar6 = a4 + local_2c + iVar8; + for (j = 0; j < winHeader->width; j++) { + u32 bits; + + tilemaps[0][y ][x] = TILEMAP_TILE_NUM(0x2E1) | TILEMAP_PAL(15); + tilemaps[1][y ][x] = TILEMAP_TILE_NUM(0x2E2) | TILEMAP_PAL(15); + bits = ~(TILEMAP_TILE_NUM(0x3FF) | TILEMAP_FLIP_HORIZONTAL(1) | TILEMAP_FLIP_VERTICAL(1)); // Clear all bits except pal + tilemaps[0][y+1][x] = bits | a2; + tilemaps[1][y+1][x] = TILEMAP_TILE_NUM(0x2DB) | TILEMAP_PAL(15); + tilemaps[0][y+2][x] = bits | iVar3; + tilemaps[1][y+2][x] = TILEMAP_TILE_NUM(0x2DB) | TILEMAP_PAL(15); + x++; - for (local_44 = 0; local_44 < a3[2]; local_44++) { - *puVar6 = 0xF2E1; - puVar6[0x400] = 0xF2E2; - *puVar10 = a2 | 0xF000; - puVar6[0x420] = 0xF2DB; - *local_24 = iVar3 | 0xF000; - puVar6[0x440] = 0xF2DB; - local_24++; - puVar10++; - puVar6++; - puVar5++; - puVar7++; - local_30++; - puVar11++; - puVar9++; - local_2c += 2; - iVar2++; if (a2 != 0) a2++; @@ -749,691 +760,37 @@ static void sub_8006E94(Window *a0, s32 a1, u32 a2, const WindowHeader *a3, u16 iVar3++; } - *puVar9 = 0xF6E0; - *local_30 = 0xF2E2; - *puVar7 = 0xF6DA; - *puVar11 = 0xF2DB; - *puVar5 = 0xF2E7; - puVar9[0x440] = 0xF2DB; - } - else { - if (bVar1) { - if ((a3[3] >> (local_3c & 0xFF) & 1) == 0) { - sVar4 = 107; - if (local_3c == a3[0] - 1) - sVar4 = 103; + tilemaps[0][y ][x] = TILEMAP_TILE_NUM(0x2E0) | TILEMAP_PAL(15) | TILEMAP_FLIP_HORIZONTAL(1); + tilemaps[1][y ][x] = TILEMAP_TILE_NUM(0x2E2) | TILEMAP_PAL(15); + tilemaps[0][y+1][x] = TILEMAP_TILE_NUM(0x2DA) | TILEMAP_PAL(15) | TILEMAP_FLIP_HORIZONTAL(1); + tilemaps[1][y+1][x] = TILEMAP_TILE_NUM(0x2DB) | TILEMAP_PAL(15); + tilemaps[0][y+2][x] = TILEMAP_TILE_NUM(0x2E7) | TILEMAP_PAL(15); + tilemaps[1][y+2][x] = TILEMAP_TILE_NUM(0x2DB) | TILEMAP_PAL(15); + x++; - *puVar9 = (sVar4 + 0x278) | 0xF000; - *puVar7 = 0xF6EF; - *puVar5 = 0xF2D9; - } - else { - sVar4 = 31; - if (local_3c == a3[0] - 1) - sVar4 = 27; - - *puVar9 = (sVar4 + 0x278) | 0xF000; - *puVar7 = 0xF6B6; - *puVar5 = 0xF2D9; - } - *local_30 = 0xF27A; - *puVar11 = 0xF6DB; - } - else { - if ((a3[3] >> (local_3c & 0xFF) & 1) == 0) { - sVar4 = 107; - if (local_3c == 0) - sVar4 = 103; - - *puVar9 = (sVar4 + 0x278) | 0xF400; - *puVar7 = 0xF2EF; - *puVar5 = 0xF2D9; - } - else { - sVar4 = 31; - if (local_3c == 0) - sVar4 = 27; - - *puVar9 = (sVar4 + 0x278) | 0xF400; - *puVar7 = 0xF2B6; - *puVar5 = 0xF2D9; - } - *local_30 = 0xF27A; - *puVar11 = 0xF2DB; - } - puVar9[0x440] = 0xF2DB; - } - - local_2c += 2; - local_30++; - iVar2++; - puVar11++; - puVar5++; - puVar7++; - puVar9++; - if (a2 != 0) - a2++; - } - - iVar8 = a0->unk0 + a0->unk4; - if (iVar2 < iVar8) { - for (iVar3 = iVar8 - iVar2; iVar3 != 0; iVar3--) { - (a4 + a1 * 0x20)[iVar2 + iVar3] = 0xF278; - (a4 + a1 * 0x20)[iVar2 + 0x400 + iVar3] = 0xF27A; - (a4 + a1 * 0x20)[iVar2 + 0x20 + iVar3] = 0xF278; - (a4 + a1 * 0x20)[iVar2 + 0x420 + iVar3] = 0xF27A; - (a4 + a1 * 0x20)[iVar2 + 0x40 + iVar3] = 0xF2D9; - (a4 + a1 * 0x20)[iVar2 + 0x440 + iVar3] = 0xF2DB; - - if (a2 != 0) - a2++; - - iVar2 = iVar8; + if (a2) a2++; } } - (a4 + a1 * 0x20)[iVar2] = 0xF278; - (a4 + a1 * 0x20)[iVar2 + 0x400] = 0xF27A; - (a4 + a1 * 0x20)[iVar2 + 0x20] = 0xF278; - (a4 + a1 * 0x20)[iVar2 + 0x420] = 0xF27A; - (a4 + a1 * 0x20)[iVar2 + 0x40] = 0xF6D8; - (a4 + a1 * 0x20)[iVar2 + 0x440] = 0xF2DB; -} -*/ -NAKED -static void sub_8006E94(Window *a0, s32 a1, u32 a2, const WindowHeader *a3, u16 *a4) -{ - asm_unified( - "\tpush {r4-r7,lr}\n" - "\tmov r7, r10\n" - "\tmov r6, r9\n" - "\tmov r5, r8\n" - "\tpush {r5-r7}\n" - "\tsub sp, 0x30\n" - "\tstr r0, [sp]\n" - "\tadds r4, r1, 0\n" - "\tadds r7, r2, 0\n" - "\tstr r3, [sp, 0x4]\n" - "\tmovs r1, 0\n" - "\tldrsh r0, [r0, r1]\n" - "\tmov r10, r0\n" - "\tmovs r2, 0x1\n" - "\tnegs r2, r2\n" - "\tadd r2, r10\n" - "\tmovs r3, 0\n" - "\tstr r3, [sp, 0x8]\n" - "\tcmp r4, 0x1C\n" - "\tble _08006EBE\n" - "\tb _080072FE\n" -"_08006EBE:\n" - "\tcmp r4, 0\n" - "\tbge _08006EC4\n" - "\tb _080072FE\n" -"_08006EC4:\n" - "\tlsls r1, r2, 1\n" - "\tlsls r4, 6\n" - "\tldr r6, [sp, 0x50]\n" - "\tadds r5, r4, r6\n" - "\tadds r1, r5\n" - "\tldr r0, _08006F9C\n" - "\tadds r3, r0, 0\n" - "\tstrh r3, [r1]\n" - "\tmovs r2, 0x80\n" - "\tlsls r2, 4\n" - "\tadds r0, r1, r2\n" - "\tldr r6, _08006FA0\n" - "\tadds r2, r6, 0\n" - "\tstrh r2, [r0]\n" - "\tadds r0, r1, 0\n" - "\tadds r0, 0x40\n" - "\tstrh r3, [r0]\n" - "\tmovs r0, 0x84\n" - "\tlsls r0, 4\n" - "\tadds r0, r1, r0\n" - "\tstrh r2, [r0]\n" - "\tadds r2, r1, 0\n" - "\tadds r2, 0x80\n" - "\tldr r3, _08006FA4\n" - "\tadds r0, r3, 0\n" - "\tstrh r0, [r2]\n" - "\tmovs r6, 0x88\n" - "\tlsls r6, 4\n" - "\tadds r1, r6\n" - "\tldr r2, _08006FA8\n" - "\tadds r0, r2, 0\n" - "\tstrh r0, [r1]\n" - "\tmov r12, r10\n" - "\tmovs r3, 0\n" - "\tstr r4, [sp, 0x18]\n" - "\tldr r4, [sp, 0x4]\n" - "\tldrb r4, [r4]\n" - "\tcmp r3, r4\n" - "\tblt _08006F14\n" - "\tb _08007238\n" -"_08006F14:\n" - "\tadds r2, r5, 0\n" - "\tmov r5, r12\n" - "\tlsls r1, r5, 1\n" - "\tldr r0, [sp, 0x50]\n" - "\tadds r0, 0x80\n" - "\tldr r6, [sp, 0x18]\n" - "\tadds r0, r6, r0\n" - "\tadds r0, r1\n" - "\tmov r9, r0\n" - "\tldr r0, [sp, 0x50]\n" - "\tadds r0, 0x40\n" - "\tadds r0, r6, r0\n" - "\tadds r0, r1\n" - "\tmov r8, r0\n" - "\tldr r4, [sp, 0x50]\n" - "\tmovs r5, 0x80\n" - "\tlsls r5, 4\n" - "\tadds r0, r4, r5\n" - "\tadds r0, r6, r0\n" - "\tadds r0, r1, r0\n" - "\tstr r0, [sp, 0x20]\n" - "\tmovs r6, 0x84\n" - "\tlsls r6, 4\n" - "\tadds r0, r4, r6\n" - "\tldr r4, [sp, 0x18]\n" - "\tadds r0, r4, r0\n" - "\tadds r0, r1\n" - "\tmov r10, r0\n" - "\tadds r4, r1, r2\n" - "\tldr r5, [sp, 0x18]\n" - "\tstr r5, [sp, 0x10]\n" - "\tstr r2, [sp, 0x1C]\n" - "\tstr r1, [sp, 0x24]\n" -"_08006F56:\n" - "\tldr r6, [sp, 0x4]\n" - "\tldrb r6, [r6, 0x1]\n" - "\tcmp r3, r6\n" - "\tbne _08006F60\n" - "\tb _080070C8\n" -"_08006F60:\n" - "\tldr r0, [sp, 0x8]\n" - "\tcmp r0, 0\n" - "\tbne _08007008\n" - "\tldr r1, [sp, 0x4]\n" - "\tldrb r0, [r1, 0x3]\n" - "\tasrs r0, r3\n" - "\tmovs r1, 0x1\n" - "\tands r0, r1\n" - "\tcmp r0, 0\n" - "\tbeq _08006FB8\n" - "\tmovs r1, 0x1F\n" - "\tcmp r3, 0\n" - "\tbne _08006F7C\n" - "\tmovs r1, 0x1B\n" -"_08006F7C:\n" - "\tmovs r2, 0x9E\n" - "\tlsls r2, 2\n" - "\tadds r0, r1, r2\n" - "\tldr r5, _08006FAC\n" - "\tadds r1, r5, 0\n" - "\torrs r0, r1\n" - "\tstrh r0, [r4]\n" - "\tldr r6, _08006FB0\n" - "\tadds r0, r6, 0\n" - "\tmov r1, r8\n" - "\tstrh r0, [r1]\n" - "\tldr r5, _08006FB4\n" - "\tmov r2, r9\n" - "\tstrh r5, [r2]\n" - "\tb _08006FDC\n" - "\t.align 2, 0\n" -"_08006F9C: .4byte 0x0000f278\n" -"_08006FA0: .4byte 0x0000f27a\n" -"_08006FA4: .4byte 0x0000f2d8\n" -"_08006FA8: .4byte 0x0000f2db\n" -"_08006FAC: .4byte 0xfffff400\n" -"_08006FB0: .4byte 0x0000f2b6\n" -"_08006FB4: .4byte 0x0000f2d9\n" -"_08006FB8:\n" - "\tmovs r1, 0x6B\n" - "\tcmp r3, 0\n" - "\tbne _08006FC0\n" - "\tmovs r1, 0x67\n" -"_08006FC0:\n" - "\tmovs r6, 0x9E\n" - "\tlsls r6, 2\n" - "\tadds r0, r1, r6\n" - "\tldr r2, _08006FF4\n" - "\tadds r1, r2, 0\n" - "\torrs r0, r1\n" - "\tstrh r0, [r4]\n" - "\tldr r5, _08006FF8\n" - "\tadds r0, r5, 0\n" - "\tmov r6, r8\n" - "\tstrh r0, [r6]\n" - "\tldr r1, _08006FFC\n" - "\tmov r0, r9\n" - "\tstrh r1, [r0]\n" -"_08006FDC:\n" - "\tldr r2, _08007000\n" - "\tadds r0, r2, 0\n" - "\tldr r5, [sp, 0x20]\n" - "\tstrh r0, [r5]\n" - "\tldr r0, _08007004\n" - "\tmov r6, r10\n" - "\tstrh r0, [r6]\n" - "\tmovs r1, 0x88\n" - "\tlsls r1, 4\n" - "\tadds r0, r4, r1\n" - "\tadds r2, 0x61\n" - "\tb _0800708E\n" - "\t.align 2, 0\n" -"_08006FF4: .4byte 0xfffff400\n" -"_08006FF8: .4byte 0x0000f2ef\n" -"_08006FFC: .4byte 0x0000f2d9\n" -"_08007000: .4byte 0x0000f27a\n" -"_08007004: .4byte 0x0000f2db\n" -"_08007008:\n" - "\tldr r5, [sp, 0x4]\n" - "\tldrb r0, [r5, 0x3]\n" - "\tasrs r0, r3\n" - "\tmovs r1, 0x1\n" - "\tands r0, r1\n" - "\tcmp r0, 0\n" - "\tbeq _0800704C\n" - "\tldrb r0, [r5]\n" - "\tsubs r0, 0x1\n" - "\tmovs r1, 0x1F\n" - "\tcmp r3, r0\n" - "\tbne _08007022\n" - "\tmovs r1, 0x1B\n" -"_08007022:\n" - "\tmovs r6, 0x9E\n" - "\tlsls r6, 2\n" - "\tadds r0, r1, r6\n" - "\tldr r2, _08007040\n" - "\tadds r1, r2, 0\n" - "\torrs r0, r1\n" - "\tstrh r0, [r4]\n" - "\tldr r5, _08007044\n" - "\tadds r0, r5, 0\n" - "\tmov r6, r8\n" - "\tstrh r0, [r6]\n" - "\tldr r1, _08007048\n" - "\tmov r0, r9\n" - "\tstrh r1, [r0]\n" - "\tb _08007076\n" - "\t.align 2, 0\n" -"_08007040: .4byte 0xfffff000\n" -"_08007044: .4byte 0x0000f6b6\n" -"_08007048: .4byte 0x0000f2d9\n" -"_0800704C:\n" - "\tldr r2, [sp, 0x4]\n" - "\tldrb r0, [r2]\n" - "\tsubs r0, 0x1\n" - "\tmovs r1, 0x6B\n" - "\tcmp r3, r0\n" - "\tbne _0800705A\n" - "\tmovs r1, 0x67\n" -"_0800705A:\n" - "\tmovs r5, 0x9E\n" - "\tlsls r5, 2\n" - "\tadds r0, r1, r5\n" - "\tldr r6, _080070B0\n" - "\tadds r1, r6, 0\n" - "\torrs r0, r1\n" - "\tstrh r0, [r4]\n" - "\tldr r1, _080070B4\n" - "\tadds r0, r1, 0\n" - "\tmov r2, r8\n" - "\tstrh r0, [r2]\n" - "\tldr r6, _080070B8\n" - "\tmov r5, r9\n" - "\tstrh r6, [r5]\n" -"_08007076:\n" - "\tldr r1, _080070BC\n" - "\tadds r0, r1, 0\n" - "\tldr r2, [sp, 0x20]\n" - "\tstrh r0, [r2]\n" - "\tldr r5, _080070C0\n" - "\tadds r0, r5, 0\n" - "\tmov r6, r10\n" - "\tstrh r0, [r6]\n" - "\tmovs r1, 0x88\n" - "\tlsls r1, 4\n" - "\tadds r0, r4, r1\n" - "\tldr r2, _080070C4\n" -"_0800708E:\n" - "\tstrh r2, [r0]\n" - "\tmovs r5, 0x2\n" - "\tadd r9, r5\n" - "\tadd r8, r5\n" - "\tldr r6, [sp, 0x20]\n" - "\tadds r6, 0x2\n" - "\tstr r6, [sp, 0x20]\n" - "\tadd r10, r5\n" - "\tadds r4, 0x2\n" - "\tldr r0, [sp, 0x24]\n" - "\tadds r0, 0x2\n" - "\tstr r0, [sp, 0x24]\n" - "\tmovs r1, 0x1\n" - "\tadd r12, r1\n" - "\tadds r3, 0x1\n" - "\tstr r3, [sp, 0x14]\n" - "\tb _08007226\n" - "\t.align 2, 0\n" -"_080070B0: .4byte 0xfffff000\n" -"_080070B4: .4byte 0x0000f6ef\n" -"_080070B8: .4byte 0x0000f2d9\n" -"_080070BC: .4byte 0x0000f27a\n" -"_080070C0: .4byte 0x0000f6db\n" -"_080070C4: .4byte 0x0000f2db\n" -"_080070C8:\n" - "\tmovs r2, 0x1\n" - "\tstr r2, [sp, 0x8]\n" - "\tldr r5, _08007128\n" - "\tadds r0, r5, 0\n" - "\tstrh r0, [r4]\n" - "\tldr r6, _0800712C\n" - "\tadds r0, r6, 0\n" - "\tldr r1, [sp, 0x20]\n" - "\tstrh r0, [r1]\n" - "\tldr r2, _08007130\n" - "\tadds r0, r2, 0\n" - "\tmov r5, r8\n" - "\tstrh r0, [r5]\n" - "\tldr r0, _08007134\n" - "\tmov r6, r10\n" - "\tstrh r0, [r6]\n" - "\tldr r1, _08007138\n" - "\tadds r0, r1, 0\n" - "\tmov r2, r9\n" - "\tstrh r0, [r2]\n" - "\tmovs r5, 0x88\n" - "\tlsls r5, 4\n" - "\tadds r0, r4, r5\n" - "\tldr r6, _08007134\n" - "\tstrh r6, [r0]\n" - "\tmovs r0, 0x2\n" - "\tadd r9, r0\n" - "\tadd r8, r0\n" - "\tldr r1, [sp, 0x20]\n" - "\tadds r1, 0x2\n" - "\tstr r1, [sp, 0x20]\n" - "\tadd r10, r0\n" - "\tadds r4, 0x2\n" - "\tldr r2, [sp, 0x24]\n" - "\tadds r2, 0x2\n" - "\tstr r2, [sp, 0x24]\n" - "\tmovs r5, 0x1\n" - "\tadd r12, r5\n" - "\tcmp r7, 0\n" - "\tbeq _0800713C\n" - "\tadds r7, 0x1\n" - "\tcmp r7, 0\n" - "\tbeq _0800713C\n" - "\tldr r6, [sp]\n" - "\tmovs r1, 0x4\n" - "\tldrsh r0, [r6, r1]\n" - "\tadds r2, r7, r0\n" - "\tb _0800713E\n" - "\t.align 2, 0\n" -"_08007128: .4byte 0x0000f2e0\n" -"_0800712C: .4byte 0x0000f2e2\n" -"_08007130: .4byte 0x0000f2da\n" -"_08007134: .4byte 0x0000f2db\n" -"_08007138: .4byte 0x0000f6e7\n" -"_0800713C:\n" - "\tmovs r2, 0\n" -"_0800713E:\n" - "\tmovs r5, 0\n" - "\tstr r5, [sp, 0xC]\n" - "\tadds r3, 0x1\n" - "\tstr r3, [sp, 0x14]\n" - "\tldr r6, [sp, 0x4]\n" - "\tldrb r6, [r6, 0x2]\n" - "\tcmp r5, r6\n" - "\tbge _080071E0\n" - "\tldr r0, [sp, 0x50]\n" - "\tadds r0, 0x80\n" - "\tldr r1, [sp, 0x10]\n" - "\tadds r0, r1, r0\n" - "\tldr r3, [sp, 0x24]\n" - "\tadds r0, r3, r0\n" - "\tstr r0, [sp, 0x2C]\n" - "\tldr r0, [sp, 0x50]\n" - "\tadds r0, 0x40\n" - "\tadds r0, r1, r0\n" - "\tadds r5, r3, r0\n" - "\tldr r6, [sp, 0x1C]\n" - "\tadds r3, r6\n" -"_08007168:\n" - "\tldr r1, _08007310\n" - "\tadds r0, r1, 0\n" - "\tstrh r0, [r3]\n" - "\tmovs r6, 0x80\n" - "\tlsls r6, 4\n" - "\tadds r6, r3, r6\n" - "\tstr r6, [sp, 0x28]\n" - "\tadds r1, 0x1\n" - "\tadds r0, r1, 0\n" - "\tstrh r0, [r6]\n" - "\tadds r0, r7, 0\n" - "\tldr r6, _08007314\n" - "\torrs r0, r6\n" - "\tstrh r0, [r5]\n" - "\tmovs r1, 0x84\n" - "\tlsls r1, 4\n" - "\tadds r0, r3, r1\n" - "\tldr r6, _08007318\n" - "\tstrh r6, [r0]\n" - "\tadds r0, r2, 0\n" - "\tldr r1, _08007314\n" - "\torrs r0, r1\n" - "\tldr r6, [sp, 0x2C]\n" - "\tstrh r0, [r6]\n" - "\tmovs r1, 0x88\n" - "\tlsls r1, 4\n" - "\tadds r0, r3, r1\n" - "\tldr r6, _08007318\n" - "\tstrh r6, [r0]\n" - "\tldr r0, [sp, 0x2C]\n" - "\tadds r0, 0x2\n" - "\tstr r0, [sp, 0x2C]\n" - "\tadds r5, 0x2\n" - "\tadds r3, 0x2\n" - "\tmovs r1, 0x2\n" - "\tadd r9, r1\n" - "\tadd r8, r1\n" - "\tldr r6, [sp, 0x20]\n" - "\tadds r6, 0x2\n" - "\tstr r6, [sp, 0x20]\n" - "\tadd r10, r1\n" - "\tadds r4, 0x2\n" - "\tldr r0, [sp, 0x24]\n" - "\tadds r0, 0x2\n" - "\tstr r0, [sp, 0x24]\n" - "\tmovs r1, 0x1\n" - "\tadd r12, r1\n" - "\tcmp r7, 0\n" - "\tbeq _080071CC\n" - "\tadds r7, 0x1\n" -"_080071CC:\n" - "\tcmp r2, 0\n" - "\tbeq _080071D2\n" - "\tadds r2, 0x1\n" -"_080071D2:\n" - "\tldr r6, [sp, 0xC]\n" - "\tadds r6, 0x1\n" - "\tstr r6, [sp, 0xC]\n" - "\tldr r0, [sp, 0x4]\n" - "\tldrb r0, [r0, 0x2]\n" - "\tcmp r6, r0\n" - "\tblt _08007168\n" -"_080071E0:\n" - "\tldr r1, _0800731C\n" - "\tadds r0, r1, 0\n" - "\tstrh r0, [r4]\n" - "\tldr r2, _08007320\n" - "\tadds r0, r2, 0\n" - "\tldr r3, [sp, 0x20]\n" - "\tstrh r0, [r3]\n" - "\tldr r5, _08007324\n" - "\tadds r0, r5, 0\n" - "\tmov r6, r8\n" - "\tstrh r0, [r6]\n" - "\tldr r1, _08007318\n" - "\tmov r0, r10\n" - "\tstrh r1, [r0]\n" - "\tadds r2, 0x5\n" - "\tadds r0, r2, 0\n" - "\tmov r3, r9\n" - "\tstrh r0, [r3]\n" - "\tmovs r5, 0x88\n" - "\tlsls r5, 4\n" - "\tadds r0, r4, r5\n" - "\tstrh r1, [r0]\n" - "\tmovs r6, 0x2\n" - "\tadd r9, r6\n" - "\tadd r8, r6\n" - "\tldr r0, [sp, 0x20]\n" - "\tadds r0, 0x2\n" - "\tstr r0, [sp, 0x20]\n" - "\tadd r10, r6\n" - "\tadds r4, 0x2\n" - "\tldr r1, [sp, 0x24]\n" - "\tadds r1, 0x2\n" - "\tstr r1, [sp, 0x24]\n" - "\tmovs r2, 0x1\n" - "\tadd r12, r2\n" -"_08007226:\n" - "\tcmp r7, 0\n" - "\tbeq _0800722C\n" - "\tadds r7, 0x1\n" -"_0800722C:\n" - "\tldr r3, [sp, 0x14]\n" - "\tldr r5, [sp, 0x4]\n" - "\tldrb r5, [r5]\n" - "\tcmp r3, r5\n" - "\tbge _08007238\n" - "\tb _08006F56\n" -"_08007238:\n" - "\tldr r6, [sp]\n" - "\tmovs r0, 0\n" - "\tldrsh r1, [r6, r0]\n" - "\tmovs r2, 0x4\n" - "\tldrsh r0, [r6, r2]\n" - "\tadds r0, r1, r0\n" - "\tcmp r12, r0\n" - "\tbge _080072BC\n" - "\tldr r3, _08007328\n" - "\tadds r4, r3, 0\n" - "\tmov r8, r0\n" - "\tmov r5, r12\n" - "\tlsls r1, r5, 1\n" - "\tldr r0, [sp, 0x50]\n" - "\tadds r0, 0x80\n" - "\tldr r6, [sp, 0x18]\n" - "\tadds r0, r6, r0\n" - "\tadds r5, r1, r0\n" - "\tldr r0, [sp, 0x50]\n" - "\tadds r0, 0x40\n" - "\tadds r0, r6, r0\n" - "\tadds r3, r1, r0\n" - "\tldr r0, [sp, 0x50]\n" - "\tadds r6, r0\n" - "\tadds r2, r1, r6\n" - "\tmovs r1, 0x80\n" - "\tlsls r1, 4\n" - "\tmov r10, r1\n" - "\tmovs r6, 0x84\n" - "\tlsls r6, 4\n" - "\tmov r9, r6\n" - "\tmov r0, r8\n" - "\tmov r1, r12\n" - "\tsubs r0, r1\n" - "\tmov r12, r0\n" -"_0800727E:\n" - "\tstrh r4, [r2]\n" - "\tmov r6, r10\n" - "\tadds r0, r2, r6\n" - "\tldr r1, _0800732C\n" - "\tstrh r1, [r0]\n" - "\tstrh r4, [r3]\n" - "\tmov r6, r9\n" - "\tadds r0, r2, r6\n" - "\tstrh r1, [r0]\n" - "\tadds r1, 0x5F\n" - "\tadds r0, r1, 0\n" - "\tstrh r0, [r5]\n" - "\tmovs r6, 0x88\n" - "\tlsls r6, 4\n" - "\tadds r1, r2, r6\n" - "\tldr r6, _08007318\n" - "\tadds r0, r6, 0\n" - "\tstrh r0, [r1]\n" - "\tadds r5, 0x2\n" - "\tadds r3, 0x2\n" - "\tadds r2, 0x2\n" - "\tmovs r0, 0x1\n" - "\tnegs r0, r0\n" - "\tadd r12, r0\n" - "\tcmp r7, 0\n" - "\tbeq _080072B4\n" - "\tadds r7, 0x1\n" -"_080072B4:\n" - "\tmov r1, r12\n" - "\tcmp r1, 0\n" - "\tbne _0800727E\n" - "\tmov r12, r8\n" -"_080072BC:\n" - "\tmov r2, r12\n" - "\tlsls r1, r2, 1\n" - "\tldr r3, [sp, 0x18]\n" - "\tldr r4, [sp, 0x50]\n" - "\tadds r0, r3, r4\n" - "\tadds r1, r0\n" - "\tldr r5, _08007328\n" - "\tadds r3, r5, 0\n" - "\tstrh r3, [r1]\n" - "\tmovs r6, 0x80\n" - "\tlsls r6, 4\n" - "\tadds r0, r1, r6\n" - "\tldr r4, _0800732C\n" - "\tadds r2, r4, 0\n" - "\tstrh r2, [r0]\n" - "\tadds r0, r1, 0\n" - "\tadds r0, 0x40\n" - "\tstrh r3, [r0]\n" - "\tmovs r5, 0x84\n" - "\tlsls r5, 4\n" - "\tadds r0, r1, r5\n" - "\tstrh r2, [r0]\n" - "\tadds r2, r1, 0\n" - "\tadds r2, 0x80\n" - "\tldr r6, _08007330\n" - "\tadds r0, r6, 0\n" - "\tstrh r0, [r2]\n" - "\tmovs r0, 0x88\n" - "\tlsls r0, 4\n" - "\tadds r1, r0\n" - "\tldr r2, _08007318\n" - "\tadds r0, r2, 0\n" - "\tstrh r0, [r1]\n" -"_080072FE:\n" - "\tadd sp, 0x30\n" - "\tpop {r3-r5}\n" - "\tmov r8, r3\n" - "\tmov r9, r4\n" - "\tmov r10, r5\n" - "\tpop {r4-r7}\n" - "\tpop {r0}\n" - "\tbx r0\n" - "\t.align 2, 0\n" -"_08007310: .4byte 0x0000f2e1\n" -"_08007314: .4byte 0xfffff000\n" -"_08007318: .4byte 0x0000f2db\n" -"_0800731C: .4byte 0x0000f6e0\n" -"_08007320: .4byte 0x0000f2e2\n" -"_08007324: .4byte 0x0000f6da\n" -"_08007328: .4byte 0x0000f278\n" -"_0800732C: .4byte 0x0000f27a\n" -"_08007330: .4byte 0x0000f6d8"); + while (x < window->x + window->width) { + tilemaps[0][y ][x] = TILEMAP_TILE_NUM(0x278) | TILEMAP_PAL(15); + tilemaps[1][y ][x] = TILEMAP_TILE_NUM(0x27A) | TILEMAP_PAL(15); + tilemaps[0][y+1][x] = TILEMAP_TILE_NUM(0x278) | TILEMAP_PAL(15); + tilemaps[1][y+1][x] = TILEMAP_TILE_NUM(0x27A) | TILEMAP_PAL(15); + tilemaps[0][y+2][x] = TILEMAP_TILE_NUM(0x2D9) | TILEMAP_PAL(15); + tilemaps[1][y+2][x] = TILEMAP_TILE_NUM(0x2DB) | TILEMAP_PAL(15); + x++; + + if (a2) a2++; + } + + tilemaps[0][y ][x] = TILEMAP_TILE_NUM(0x278) | TILEMAP_PAL(15); + tilemaps[1][y ][x] = TILEMAP_TILE_NUM(0x27A) | TILEMAP_PAL(15); + tilemaps[0][y+1][x] = TILEMAP_TILE_NUM(0x278) | TILEMAP_PAL(15); + tilemaps[1][y+1][x] = TILEMAP_TILE_NUM(0x27A) | TILEMAP_PAL(15); + tilemaps[0][y+2][x] = TILEMAP_TILE_NUM(0x2D8) | TILEMAP_PAL(15) | TILEMAP_FLIP_HORIZONTAL(1); + tilemaps[1][y+2][x] = TILEMAP_TILE_NUM(0x2DB) | TILEMAP_PAL(15); + x++; } // arm9.bin::02003FB0