diff --git a/asm/code_80130A8.s b/asm/code_80130A8.s index 93f2eaa6a..21bee0f90 100644 --- a/asm/code_80130A8.s +++ b/asm/code_80130A8.s @@ -6,1283 +6,6 @@ .text - thumb_func_start sub_8013134 -sub_8013134: - push {r4,lr} - adds r4, r0, 0 - lsls r0, r2, 3 - adds r0, r2 - lsls r0, 3 - ldr r3, _0801315C - adds r0, r3 - str r2, [r4] - movs r2, 0 - strh r2, [r4, 0x18] - strh r1, [r4, 0x1A] - strh r1, [r4, 0x1C] - strh r2, [r4, 0x1E] - strh r2, [r4, 0x4] - ldr r0, [r0, 0xC] - cmp r0, 0x6 - bne _08013160 - movs r0, 0x10 - b _08013162 - .align 2, 0 -_0801315C: .4byte gUnknown_2027370 -_08013160: - movs r0, 0x2 -_08013162: - strh r0, [r4, 0x6] - movs r0, 0 - strh r0, [r4, 0xC] - strh r0, [r4, 0xE] - strh r0, [r4, 0x14] - strh r0, [r4, 0x24] - adds r0, r4, 0 - adds r0, 0x28 - bl sub_801317C - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8013134 - - thumb_func_start sub_801317C -sub_801317C: - push {lr} - movs r1, 0 - strb r1, [r0] - strb r1, [r0, 0x1] - strb r1, [r0, 0x2] - strb r1, [r0, 0x4] - strb r1, [r0, 0x3] - ldr r1, _080131A4 - strh r1, [r0, 0x8] - movs r1, 0x1 - negs r1, r1 - strh r1, [r0, 0xA] - adds r0, 0x8 - bl nullsub_7 - bl ResetUnusedInputStruct - pop {r0} - bx r0 - .align 2, 0 -_080131A4: .4byte 0x0000ffff - thumb_func_end sub_801317C - - thumb_func_start AddMenuCursorSprite -AddMenuCursorSprite: - push {lr} - movs r1, 0 - bl AddMenuCursorSprite_ - pop {r0} - bx r0 - thumb_func_end AddMenuCursorSprite - - thumb_func_start AddMenuCursorSprite_ -AddMenuCursorSprite_: - push {r4-r6,lr} - sub sp, 0x8 - adds r6, r0, 0 - movs r0, 0 - movs r1, 0 - str r0, [sp] - str r1, [sp, 0x4] - movs r1, 0x1A - ldrsh r0, [r6, r1] - cmp r0, 0 - bgt _080131CC - b _080132D6 -_080131CC: - adds r0, r6, 0 - bl UpdateMenuCursorSpriteCoords - ldrh r1, [r6, 0x24] - movs r0, 0x8 - ands r0, r1 - cmp r0, 0 - bne _080132D6 - mov r0, sp - ldrh r0, [r0] - ldr r1, _080132FC - ands r1, r0 - ldr r3, _08013300 - ldr r0, [sp] - ands r0, r3 - orrs r0, r1 - str r0, [sp] - mov r1, sp - ldrh r1, [r1] - adds r2, r3, 0 - ands r2, r0 - orrs r2, r1 - str r2, [sp] - mov r0, sp - ldrh r1, [r0] - ldr r0, _08013304 - ands r0, r1 - adds r1, r3, 0 - ands r1, r2 - orrs r1, r0 - str r1, [sp] - mov r0, sp - ldrh r0, [r0] - adds r2, r3, 0 - ands r2, r1 - orrs r2, r0 - str r2, [sp] - mov r0, sp - ldrh r1, [r0] - ldr r4, _08013308 - adds r0, r4, 0 - ands r0, r1 - adds r1, r3, 0 - ands r1, r2 - orrs r1, r0 - str r1, [sp] - mov r0, sp - ldrh r0, [r0] - adds r2, r3, 0 - ands r2, r1 - orrs r2, r0 - str r2, [sp] - mov r0, sp - ldrh r1, [r0] - ldr r0, _0801330C - ands r0, r1 - adds r1, r3, 0 - ands r1, r2 - orrs r1, r0 - str r1, [sp] - mov r0, sp - ldrh r0, [r0] - adds r2, r3, 0 - ands r2, r1 - orrs r2, r0 - str r2, [sp] - mov r0, sp - ldrh r1, [r0] - ldr r0, _08013310 - ands r0, r1 - adds r1, r3, 0 - ands r1, r2 - orrs r1, r0 - str r1, [sp] - mov r0, sp - ldrh r0, [r0] - adds r2, r3, 0 - ands r2, r1 - orrs r2, r0 - str r2, [sp] - mov r0, sp - ldrh r1, [r0] - ldr r0, _08013314 - ands r0, r1 - adds r1, r3, 0 - ands r1, r2 - orrs r1, r0 - str r1, [sp] - mov r0, sp - ldrh r0, [r0] - ands r3, r1 - orrs r3, r0 - str r3, [sp] - mov r3, sp - movs r2, 0xFD - lsls r2, 2 - ldrh r1, [r3, 0x4] - movs r0, 0xFC - lsls r0, 8 - ands r0, r1 - orrs r0, r2 - ands r0, r4 - movs r5, 0xF - movs r1, 0xF0 - lsls r1, 8 - ldr r4, _08013318 - ands r0, r4 - orrs r0, r1 - strh r0, [r3, 0x4] - ldrh r0, [r3, 0x6] - ldr r1, _0801331C - ands r1, r0 - ldr r0, _08013320 - ands r1, r0 - movs r2, 0x8 - ldrsh r0, [r6, r2] - ldr r2, _08013324 - ands r0, r2 - strh r0, [r3, 0x2] - movs r2, 0xA - ldrsh r0, [r6, r2] - adds r0, 0x1 - ands r0, r4 - lsls r0, 4 - ands r1, r5 - orrs r1, r0 - strh r1, [r3, 0x6] - mov r0, sp - movs r1, 0xFF - movs r2, 0 - movs r3, 0 - bl AddSprite -_080132D6: - adds r0, r6, 0 - bl sub_8013470 - movs r1, 0x14 - ldrsh r0, [r6, r1] - cmp r0, 0 - beq _080132EC - adds r0, r6, 0 - adds r0, 0x14 - bl sub_801332C -_080132EC: - ldrh r0, [r6, 0x24] - adds r0, 0x1 - strh r0, [r6, 0x24] - add sp, 0x8 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080132FC: .4byte 0x0000feff -_08013300: .4byte 0xffff0000 -_08013304: .4byte 0x0000fdff -_08013308: .4byte 0x0000f3ff -_0801330C: .4byte 0x0000efff -_08013310: .4byte 0x0000dfff -_08013314: .4byte 0x00003fff -_08013318: .4byte 0x00000fff -_0801331C: .4byte 0x0000fffe -_08013320: .4byte 0x0000fffd -_08013324: .4byte 0x000001ff - thumb_func_end AddMenuCursorSprite_ - - thumb_func_start nullsub_34 -nullsub_34: - bx lr - thumb_func_end nullsub_34 - - thumb_func_start sub_801332C -sub_801332C: - push {r4-r6,lr} - sub sp, 0x8 - movs r1, 0 - movs r2, 0 - str r1, [sp] - str r2, [sp, 0x4] - mov r1, sp - ldrh r1, [r1] - ldr r2, _08013440 - ands r2, r1 - ldr r4, _08013444 - ldr r1, [sp] - ands r1, r4 - orrs r1, r2 - str r1, [sp] - mov r2, sp - ldrh r2, [r2] - adds r3, r4, 0 - ands r3, r1 - orrs r3, r2 - str r3, [sp] - mov r1, sp - ldrh r2, [r1] - ldr r1, _08013448 - ands r1, r2 - adds r2, r4, 0 - ands r2, r3 - orrs r2, r1 - str r2, [sp] - mov r1, sp - ldrh r1, [r1] - adds r3, r4, 0 - ands r3, r2 - orrs r3, r1 - str r3, [sp] - movs r5, 0x80 - lsls r5, 3 - mov r1, sp - ldrh r2, [r1] - ldr r6, _0801344C - adds r1, r6, 0 - ands r1, r2 - adds r2, r4, 0 - ands r2, r3 - orrs r2, r1 - str r2, [sp] - mov r1, sp - ldrh r1, [r1] - orrs r5, r1 - adds r3, r4, 0 - ands r3, r2 - orrs r3, r5 - str r3, [sp] - mov r1, sp - ldrh r2, [r1] - ldr r1, _08013450 - ands r1, r2 - adds r2, r4, 0 - ands r2, r3 - orrs r2, r1 - str r2, [sp] - mov r1, sp - ldrh r1, [r1] - adds r3, r4, 0 - ands r3, r2 - orrs r3, r1 - str r3, [sp] - mov r1, sp - ldrh r2, [r1] - ldr r1, _08013454 - ands r1, r2 - adds r2, r4, 0 - ands r2, r3 - orrs r2, r1 - str r2, [sp] - mov r1, sp - ldrh r1, [r1] - adds r3, r4, 0 - ands r3, r2 - orrs r3, r1 - str r3, [sp] - mov r1, sp - ldrh r2, [r1] - ldr r1, _08013458 - ands r1, r2 - adds r2, r4, 0 - ands r2, r3 - orrs r2, r1 - str r2, [sp] - mov r1, sp - ldrh r1, [r1] - ands r4, r2 - orrs r4, r1 - str r4, [sp] - mov r4, sp - ldr r3, _0801345C - ldrh r2, [r4, 0x4] - movs r1, 0xFC - lsls r1, 8 - ands r1, r2 - orrs r1, r3 - ands r1, r6 - movs r6, 0xF - movs r2, 0xF0 - lsls r2, 8 - ldr r5, _08013460 - ands r1, r5 - orrs r1, r2 - strh r1, [r4, 0x4] - ldrh r1, [r4, 0x6] - ldr r2, _08013464 - ands r2, r1 - ldr r1, _08013468 - ands r2, r1 - movs r3, 0 - ldrsh r1, [r0, r3] - ldr r3, _0801346C - ands r1, r3 - strh r1, [r4, 0x2] - movs r1, 0x2 - ldrsh r0, [r0, r1] - adds r0, 0x1 - ands r0, r5 - lsls r0, 4 - ands r2, r6 - orrs r2, r0 - strh r2, [r4, 0x6] - mov r0, sp - movs r1, 0xFF - movs r2, 0 - movs r3, 0 - bl AddSprite - add sp, 0x8 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08013440: .4byte 0x0000feff -_08013444: .4byte 0xffff0000 -_08013448: .4byte 0x0000fdff -_0801344C: .4byte 0x0000f3ff -_08013450: .4byte 0x0000efff -_08013454: .4byte 0x0000dfff -_08013458: .4byte 0x00003fff -_0801345C: .4byte 0x000003f5 -_08013460: .4byte 0x00000fff -_08013464: .4byte 0x0000fffe -_08013468: .4byte 0x0000fffd -_0801346C: .4byte 0x000001ff - thumb_func_end sub_801332C - - thumb_func_start sub_8013470 -sub_8013470: - push {r4-r6,lr} - sub sp, 0x8 - adds r6, r0, 0 - movs r0, 0 - movs r1, 0 - str r0, [sp] - str r1, [sp, 0x4] - movs r1, 0xC - ldrsh r0, [r6, r1] - cmp r0, 0 - bne _08013488 - b _08013624 -_08013488: - movs r2, 0x1E - ldrsh r0, [r6, r2] - cmp r0, 0 - beq _08013586 - mov r0, sp - ldrh r0, [r0] - ldr r1, _0801362C - ands r1, r0 - ldr r3, _08013630 - ldr r0, [sp] - ands r0, r3 - orrs r0, r1 - str r0, [sp] - mov r1, sp - ldrh r1, [r1] - adds r2, r3, 0 - ands r2, r0 - orrs r2, r1 - str r2, [sp] - mov r0, sp - ldrh r1, [r0] - ldr r0, _08013634 - ands r0, r1 - adds r1, r3, 0 - ands r1, r2 - orrs r1, r0 - str r1, [sp] - mov r0, sp - ldrh r0, [r0] - adds r2, r3, 0 - ands r2, r1 - orrs r2, r0 - str r2, [sp] - mov r0, sp - ldrh r1, [r0] - ldr r4, _08013638 - adds r0, r4, 0 - ands r0, r1 - adds r1, r3, 0 - ands r1, r2 - orrs r1, r0 - str r1, [sp] - mov r0, sp - ldrh r0, [r0] - adds r2, r3, 0 - ands r2, r1 - orrs r2, r0 - str r2, [sp] - mov r0, sp - ldrh r1, [r0] - ldr r0, _0801363C - ands r0, r1 - adds r1, r3, 0 - ands r1, r2 - orrs r1, r0 - str r1, [sp] - mov r0, sp - ldrh r0, [r0] - adds r2, r3, 0 - ands r2, r1 - orrs r2, r0 - str r2, [sp] - mov r0, sp - ldrh r1, [r0] - ldr r0, _08013640 - ands r0, r1 - adds r1, r3, 0 - ands r1, r2 - orrs r1, r0 - str r1, [sp] - mov r0, sp - ldrh r0, [r0] - adds r2, r3, 0 - ands r2, r1 - orrs r2, r0 - str r2, [sp] - mov r0, sp - ldrh r1, [r0] - ldr r0, _08013644 - ands r0, r1 - adds r1, r3, 0 - ands r1, r2 - orrs r1, r0 - str r1, [sp] - mov r0, sp - ldrh r0, [r0] - ands r3, r1 - orrs r3, r0 - str r3, [sp] - mov r3, sp - ldr r2, _08013648 - ldrh r1, [r3, 0x4] - movs r0, 0xFC - lsls r0, 8 - ands r0, r1 - orrs r0, r2 - ands r0, r4 - movs r5, 0xF - movs r1, 0xF0 - lsls r1, 8 - ldr r4, _0801364C - ands r0, r4 - orrs r0, r1 - strh r0, [r3, 0x4] - ldrh r0, [r3, 0x6] - ldr r1, _08013650 - ands r1, r0 - ldr r0, _08013654 - ands r1, r0 - movs r2, 0xC - ldrsh r0, [r6, r2] - ldr r2, _08013658 - ands r0, r2 - strh r0, [r3, 0x2] - movs r2, 0xE - ldrsh r0, [r6, r2] - ands r0, r4 - lsls r0, 4 - ands r1, r5 - orrs r1, r0 - strh r1, [r3, 0x6] - mov r0, sp - movs r1, 0xFF - movs r2, 0 - movs r3, 0 - bl AddSprite -_08013586: - movs r1, 0x20 - ldrsh r0, [r6, r1] - cmp r0, 0 - beq _08013624 - adds r1, r0, 0 - movs r2, 0x1E - ldrsh r0, [r6, r2] - adds r0, 0x1 - cmp r1, r0 - beq _08013624 - mov r0, sp - ldrh r0, [r0] - ldr r1, _0801362C - ands r1, r0 - mov r0, sp - strh r1, [r0] - strh r1, [r0] - ldr r0, _08013634 - ands r0, r1 - mov r1, sp - strh r0, [r1] - strh r0, [r1] - ldr r4, _08013638 - ands r0, r4 - strh r0, [r1] - strh r0, [r1] - ldr r1, _0801363C - ands r1, r0 - mov r0, sp - strh r1, [r0] - strh r1, [r0] - ldr r2, _08013640 - ands r2, r1 - strh r2, [r0] - strh r2, [r0] - ldr r0, _08013644 - ands r0, r2 - mov r1, sp - strh r0, [r1] - strh r0, [r1] - mov r3, sp - ldr r2, _0801365C - ldrh r1, [r3, 0x4] - movs r0, 0xFC - lsls r0, 8 - ands r0, r1 - orrs r0, r2 - ands r0, r4 - movs r5, 0xF - movs r1, 0xF0 - lsls r1, 8 - ldr r4, _0801364C - ands r0, r4 - orrs r0, r1 - strh r0, [r3, 0x4] - ldrh r0, [r3, 0x6] - ldr r1, _08013650 - ands r1, r0 - ldr r0, _08013654 - ands r1, r0 - movs r2, 0xC - ldrsh r0, [r6, r2] - adds r0, 0xA - ldr r2, _08013658 - ands r0, r2 - strh r0, [r3, 0x2] - movs r2, 0xE - ldrsh r0, [r6, r2] - ands r0, r4 - lsls r0, 4 - ands r1, r5 - orrs r1, r0 - strh r1, [r3, 0x6] - mov r0, sp - movs r1, 0xFF - movs r2, 0 - movs r3, 0 - bl AddSprite -_08013624: - add sp, 0x8 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0801362C: .4byte 0x0000feff -_08013630: .4byte 0xffff0000 -_08013634: .4byte 0x0000fdff -_08013638: .4byte 0x0000f3ff -_0801363C: .4byte 0x0000efff -_08013640: .4byte 0x0000dfff -_08013644: .4byte 0x00003fff -_08013648: .4byte 0x000003f2 -_0801364C: .4byte 0x00000fff -_08013650: .4byte 0x0000fffe -_08013654: .4byte 0x0000fffd -_08013658: .4byte 0x000001ff -_0801365C: .4byte 0x000003f3 - thumb_func_end sub_8013470 - - thumb_func_start sub_8013660 -sub_8013660: - push {r4,lr} - adds r4, r0, 0 - movs r1, 0x1A - ldrsh r0, [r4, r1] - cmp r0, 0 - ble _0801367A - adds r0, r4, 0 - bl UpdateMenuCursorSpriteCoords - adds r0, r4, 0 - adds r0, 0x8 - bl sub_801332C -_0801367A: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8013660 - - thumb_func_start UpdateMenuCursorSpriteCoords -UpdateMenuCursorSpriteCoords: - push {r4,r5,lr} - adds r5, r0, 0 - ldr r0, [r5] - lsls r4, r0, 3 - adds r4, r0 - lsls r4, 3 - ldr r0, _080136B8 - adds r4, r0 - movs r1, 0 - ldrsh r0, [r4, r1] - lsls r0, 3 - ldrh r2, [r5, 0x4] - adds r0, r2 - strh r0, [r5, 0x8] - movs r0, 0x18 - ldrsh r1, [r5, r0] - adds r0, r5, 0 - bl sub_8013800 - movs r2, 0x2 - ldrsh r1, [r4, r2] - lsls r1, 3 - adds r1, r0 - strh r1, [r5, 0xA] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080136B8: .4byte gUnknown_2027370 - thumb_func_end UpdateMenuCursorSpriteCoords - - thumb_func_start MoveMenuCursorDown -MoveMenuCursorDown: - push {lr} - adds r1, r0, 0 - movs r3, 0 - strh r3, [r1, 0x24] - movs r0, 0x1A - ldrsh r2, [r1, r0] - cmp r2, 0 - ble _080136DA - ldrh r0, [r1, 0x18] - adds r0, 0x1 - strh r0, [r1, 0x18] - lsls r0, 16 - asrs r0, 16 - cmp r0, r2 - blt _080136DC -_080136DA: - strh r3, [r1, 0x18] -_080136DC: - pop {r0} - bx r0 - thumb_func_end MoveMenuCursorDown - - thumb_func_start sub_80136E0 -sub_80136E0: - push {r4,r5,lr} - adds r2, r0, 0 - lsls r1, 24 - lsrs r5, r1, 24 - movs r1, 0 - strh r1, [r2, 0x24] - ldrh r4, [r2, 0x1A] - movs r0, 0x1A - ldrsh r3, [r2, r0] - cmp r3, 0 - ble _08013708 - ldrh r0, [r2, 0x18] - adds r0, 0x1 - strh r0, [r2, 0x18] - lsls r0, 16 - asrs r0, 16 - cmp r0, r3 - blt _08013710 - cmp r5, 0 - beq _0801370C -_08013708: - strh r1, [r2, 0x18] - b _08013710 -_0801370C: - subs r0, r4, 0x1 - strh r0, [r2, 0x18] -_08013710: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_80136E0 - - thumb_func_start MoveMenuCursorUp -MoveMenuCursorUp: - push {r4,lr} - adds r1, r0, 0 - movs r2, 0 - strh r2, [r1, 0x24] - ldrh r3, [r1, 0x1A] - movs r4, 0x1A - ldrsh r0, [r1, r4] - cmp r0, 0 - bgt _0801372E - strh r2, [r1, 0x18] - b _0801373E -_0801372E: - ldrh r0, [r1, 0x18] - subs r0, 0x1 - strh r0, [r1, 0x18] - lsls r0, 16 - cmp r0, 0 - bge _0801373E - subs r0, r3, 0x1 - strh r0, [r1, 0x18] -_0801373E: - pop {r4} - pop {r0} - bx r0 - thumb_func_end MoveMenuCursorUp - - thumb_func_start sub_8013744 -sub_8013744: - push {r4-r6,lr} - adds r2, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r5, r1, 0 - movs r3, 0 - strh r3, [r2, 0x24] - ldrh r4, [r2, 0x1A] - movs r6, 0x1A - ldrsh r0, [r2, r6] - cmp r0, 0 - bgt _08013760 - strh r3, [r2, 0x18] - b _08013778 -_08013760: - ldrh r0, [r2, 0x18] - subs r0, 0x1 - strh r0, [r2, 0x18] - lsls r0, 16 - cmp r0, 0 - bge _08013778 - cmp r1, 0 - beq _08013776 - subs r0, r4, 0x1 - strh r0, [r2, 0x18] - b _08013778 -_08013776: - strh r5, [r2, 0x18] -_08013778: - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_8013744 - - thumb_func_start sub_8013780 -sub_8013780: - push {lr} - adds r2, r0, 0 - cmp r1, 0 - bge _0801378E - movs r0, 0 - strh r0, [r2, 0x18] - b _080137A0 -_0801378E: - movs r3, 0x1A - ldrsh r0, [r2, r3] - cmp r1, r0 - blt _0801379E - ldrh r0, [r2, 0x1A] - subs r0, 0x1 - strh r0, [r2, 0x18] - b _080137A0 -_0801379E: - strh r1, [r2, 0x18] -_080137A0: - movs r0, 0 - strh r0, [r2, 0x24] - pop {r0} - bx r0 - thumb_func_end sub_8013780 - - thumb_func_start sub_80137A8 -sub_80137A8: - movs r1, 0x18 - ldrsh r0, [r0, r1] - bx lr - thumb_func_end sub_80137A8 - - thumb_func_start sub_80137B0 -sub_80137B0: - push {r4,lr} - adds r4, r0, 0 - cmp r1, 0 - ble _080137BC - lsls r0, r1, 8 - b _080137E2 -_080137BC: - ldr r3, _080137F4 - ldr r1, [r4] - lsls r0, r1, 3 - adds r0, r1 - lsls r1, r0, 3 - adds r0, r3, 0 - adds r0, 0xC - adds r0, r1, r0 - ldr r0, [r0] - movs r2, 0 - cmp r0, 0x6 - bne _080137D6 - movs r2, 0x10 -_080137D6: - adds r0, r1, r3 - movs r1, 0x6 - ldrsh r0, [r0, r1] - lsls r0, 3 - subs r0, r2 - lsls r0, 8 -_080137E2: - movs r2, 0x1C - ldrsh r1, [r4, r2] - bl __divsi3 - str r0, [r4, 0x10] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080137F4: .4byte gUnknown_2027370 - thumb_func_end sub_80137B0 - - thumb_func_start sub_80137F8 -sub_80137F8: - lsls r1, 8 - str r1, [r0, 0x10] - bx lr - thumb_func_end sub_80137F8 - - thumb_func_start sub_8013800 -sub_8013800: - push {lr} - movs r3, 0x6 - ldrsh r2, [r0, r3] - ldr r0, [r0, 0x10] - muls r0, r1 - cmp r0, 0 - bge _08013810 - adds r0, 0xFF -_08013810: - asrs r0, 8 - adds r0, r2, r0 - pop {r1} - bx r1 - thumb_func_end sub_8013800 - - thumb_func_start sub_8013818 -sub_8013818: - push {r4,lr} - adds r4, r0, 0 - str r3, [r4] - movs r0, 0 - strh r1, [r4, 0x22] - strh r2, [r4, 0x1C] - strh r0, [r4, 0x14] - strh r0, [r4, 0x24] - strh r0, [r4, 0x18] - strh r0, [r4, 0x1E] - adds r0, r4, 0 - adds r0, 0x28 - bl sub_801317C - adds r0, r4, 0 - bl sub_8013984 - adds r0, r4, 0 - movs r1, 0xC - bl sub_80137F8 - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8013818 - - thumb_func_start sub_8013848 -sub_8013848: - push {r4,lr} - adds r4, r0, 0 - str r3, [r4] - movs r0, 0 - strh r1, [r4, 0x22] - strh r2, [r4, 0x1C] - strh r0, [r4, 0x14] - strh r0, [r4, 0x24] - strh r0, [r4, 0x18] - strh r0, [r4, 0x1E] - adds r0, r4, 0 - adds r0, 0x28 - bl sub_801317C - adds r0, r4, 0 - bl sub_8013984 - adds r0, r4, 0 - movs r1, 0x18 - bl sub_80137F8 - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8013848 - - thumb_func_start sub_8013878 -sub_8013878: - push {r4-r6,lr} - adds r5, r0, 0 - adds r6, r1, 0 - cmp r6, 0 - bge _08013886 - movs r6, 0 - b _08013890 -_08013886: - movs r1, 0x22 - ldrsh r0, [r5, r1] - cmp r6, r0 - blt _08013890 - subs r6, r0, 0x1 -_08013890: - movs r0, 0x1C - ldrsh r1, [r5, r0] - adds r0, r6, 0 - bl __divsi3 - movs r4, 0 - strh r0, [r5, 0x1E] - movs r0, 0x1C - ldrsh r1, [r5, r0] - adds r0, r6, 0 - bl __modsi3 - strh r0, [r5, 0x18] - strh r4, [r5, 0x24] - adds r0, r5, 0 - bl sub_8013984 - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_8013878 - - thumb_func_start sub_80138B8 -sub_80138B8: - push {r4-r7,lr} - adds r5, r0, 0 - lsls r4, r1, 24 - lsrs r4, 24 - movs r0, 0x1E - ldrsh r7, [r5, r0] - movs r1, 0x18 - ldrsh r6, [r5, r1] - adds r0, r5, 0 - bl AddMenuCursorSprite - cmp r4, 0 - beq _0801391C - adds r0, r5, 0 - bl GetKeyPress - cmp r0, 0x8 - beq _080138F8 - cmp r0, 0x8 - bgt _080138E6 - cmp r0, 0x7 - beq _080138F0 - b _0801391C -_080138E6: - cmp r0, 0x9 - beq _0801390E - cmp r0, 0xA - beq _08013916 - b _0801391C -_080138F0: - adds r0, r5, 0 - bl MoveMenuCursorUp - b _080138FE -_080138F8: - adds r0, r5, 0 - bl MoveMenuCursorDown -_080138FE: - movs r1, 0x18 - ldrsh r0, [r5, r1] - cmp r6, r0 - beq _0801391C - movs r0, 0x3 - bl PlayMenuSoundEffect - b _0801391C -_0801390E: - adds r0, r5, 0 - bl sub_8013A7C - b _0801391C -_08013916: - adds r0, r5, 0 - bl sub_8013A54 -_0801391C: - movs r1, 0x1E - ldrsh r0, [r5, r1] - cmp r7, r0 - bne _08013928 - movs r0, 0 - b _08013930 -_08013928: - movs r0, 0x4 - bl PlayMenuSoundEffect - movs r0, 0x1 -_08013930: - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_80138B8 - - thumb_func_start sub_8013938 -sub_8013938: - push {r4,r5,lr} - adds r4, r0, 0 - movs r0, 0x1E - ldrsh r5, [r4, r0] - movs r0, 0 - strh r0, [r4, 0x1A] - strh r0, [r4, 0x14] - adds r0, r4, 0 - bl AddMenuCursorSprite - adds r0, r4, 0 - bl GetKeyPress - cmp r0, 0x9 - beq _0801395C - cmp r0, 0xA - beq _08013964 - b _0801396A -_0801395C: - adds r0, r4, 0 - bl sub_8013A7C - b _0801396A -_08013964: - adds r0, r4, 0 - bl sub_8013A54 -_0801396A: - movs r1, 0x1E - ldrsh r0, [r4, r1] - cmp r5, r0 - bne _08013976 - movs r0, 0 - b _0801397E -_08013976: - movs r0, 0x4 - bl PlayMenuSoundEffect - movs r0, 0x1 -_0801397E: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_8013938 - - thumb_func_start sub_8013984 -sub_8013984: - push {r4-r6,lr} - adds r4, r0, 0 - ldr r1, [r4] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 3 - ldr r1, _08013A20 - adds r6, r0, r1 - ldrh r1, [r4, 0x1C] - movs r2, 0x1C - ldrsh r0, [r4, r2] - cmp r0, 0 - bne _080139A2 - adds r0, r1, 0x1 - strh r0, [r4, 0x1C] -_080139A2: - movs r1, 0x22 - ldrsh r0, [r4, r1] - movs r2, 0x1C - ldrsh r1, [r4, r2] - bl __divsi3 - adds r5, r0, 0 - strh r5, [r4, 0x20] - movs r1, 0x22 - ldrsh r0, [r4, r1] - movs r2, 0x1C - ldrsh r1, [r4, r2] - bl __modsi3 - cmp r0, 0 - beq _080139C6 - adds r0, r5, 0x1 - strh r0, [r4, 0x20] -_080139C6: - movs r0, 0x1E - ldrsh r1, [r4, r0] - movs r2, 0x20 - ldrsh r0, [r4, r2] - subs r0, 0x1 - ldrh r5, [r4, 0x20] - cmp r1, r0 - ble _080139DA - subs r0, r5, 0x1 - strh r0, [r4, 0x1E] -_080139DA: - movs r0, 0x1E - ldrsh r1, [r4, r0] - movs r2, 0x20 - ldrsh r0, [r4, r2] - subs r0, 0x1 - cmp r1, r0 - bne _080139F8 - movs r1, 0x22 - ldrsh r0, [r4, r1] - movs r2, 0x1C - ldrsh r1, [r4, r2] - bl __modsi3 - cmp r0, 0 - bne _080139FA -_080139F8: - ldrh r0, [r4, 0x1C] -_080139FA: - strh r0, [r4, 0x1A] - movs r0, 0x18 - ldrsh r1, [r4, r0] - movs r2, 0x1A - ldrsh r0, [r4, r2] - subs r0, 0x1 - cmp r1, r0 - ble _08013A10 - ldrh r0, [r4, 0x1A] - subs r0, 0x1 - strh r0, [r4, 0x18] -_08013A10: - movs r1, 0 - strh r1, [r4, 0x4] - ldr r0, [r6, 0xC] - cmp r0, 0x6 - bne _08013A24 - movs r0, 0x10 - strh r0, [r4, 0x6] - b _08013A26 - .align 2, 0 -_08013A20: .4byte gUnknown_2027370 -_08013A24: - strh r1, [r4, 0x6] -_08013A26: - lsls r0, r5, 16 - asrs r0, 16 - cmp r0, 0x1 - bgt _08013A32 - movs r0, 0 - b _08013A40 -_08013A32: - movs r1, 0 - ldrsh r0, [r6, r1] - movs r2, 0x4 - ldrsh r1, [r6, r2] - adds r0, r1 - subs r0, 0x2 - lsls r0, 3 -_08013A40: - strh r0, [r4, 0xC] - movs r1, 0x2 - ldrsh r0, [r6, r1] - adds r0, 0x1 - lsls r0, 3 - subs r0, 0x2 - strh r0, [r4, 0xE] - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_8013984 - - thumb_func_start sub_8013A54 -sub_8013A54: - push {lr} - adds r2, r0, 0 - movs r0, 0x1E - ldrsh r1, [r2, r0] - movs r3, 0x20 - ldrsh r0, [r2, r3] - subs r0, 0x1 - cmp r1, r0 - bge _08013A6C - ldrh r0, [r2, 0x1E] - adds r0, 0x1 - b _08013A6E -_08013A6C: - movs r0, 0 -_08013A6E: - strh r0, [r2, 0x1E] - adds r0, r2, 0 - bl sub_8013984 - pop {r0} - bx r0 - thumb_func_end sub_8013A54 - - thumb_func_start sub_8013A7C -sub_8013A7C: - push {lr} - adds r1, r0, 0 - ldrh r2, [r1, 0x1E] - movs r3, 0x1E - ldrsh r0, [r1, r3] - cmp r0, 0 - bgt _08013A90 - ldrh r0, [r1, 0x20] - subs r0, 0x1 - b _08013A92 -_08013A90: - subs r0, r2, 0x1 -_08013A92: - strh r0, [r1, 0x1E] - adds r0, r1, 0 - bl sub_8013984 - pop {r0} - bx r0 - thumb_func_end sub_8013A7C - thumb_func_start sub_8013AA0 sub_8013AA0: push {r4,r5,lr} diff --git a/asm/code_801B3C0.s b/asm/code_801B3C0.s deleted file mode 100644 index 9aeef9e0b..000000000 --- a/asm/code_801B3C0.s +++ /dev/null @@ -1,112 +0,0 @@ - #include "asm/constants/gba_constants.inc" - #include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start sub_801BB5C -sub_801BB5C: - push {r4-r7,lr} - ldr r4, _0801BBEC - ldr r2, [r4] - adds r1, r2, 0 - adds r1, 0xCC - ldr r0, _0801BBF0 - str r0, [r1] - adds r1, 0x4 - movs r0, 0x6 - str r0, [r1] - ldr r0, [r2, 0x24] - bl sub_801ADA0 - lsls r0, 24 - cmp r0, 0 - bne _0801BB86 - ldr r0, [r4] - adds r0, 0xD0 - movs r1, 0x1 - negs r1, r1 - str r1, [r0] -_0801BB86: - ldr r0, [r4] - mov r12, r0 - movs r3, 0x1 - movs r2, 0x8 - mov r1, r12 - adds r1, 0xD4 - ldr r0, _0801BBF4 - str r0, [r1] - adds r1, 0x4 - movs r0, 0x7 - str r0, [r1] - adds r1, 0x4 - ldr r0, _0801BBF8 - ldr r0, [r0] - str r0, [r1] - mov r0, r12 - adds r0, 0xE0 - str r2, [r0] - movs r5, 0x3 - adds r1, 0x8 - movs r0, 0 - str r0, [r1] - mov r0, r12 - adds r0, 0xE8 - str r3, [r0] - movs r3, 0 - adds r6, r4, 0 - movs r7, 0x1 - negs r7, r7 - mov r4, r12 - adds r4, 0xC8 - subs r1, 0x14 -_0801BBC6: - ldr r2, [r1] - cmp r2, r7 - beq _0801BBD2 - ldr r0, [r4] - cmp r2, r0 - beq _0801BC1C -_0801BBD2: - adds r1, 0x8 - adds r3, 0x1 - cmp r3, r5 - blt _0801BBC6 - movs r3, 0 - cmp r3, r5 - bge _0801BC1C - ldr r2, [r6] - adds r0, r2, 0 - adds r0, 0xD0 - ldr r1, [r0] - b _0801BC0E - .align 2, 0 -_0801BBEC: .4byte gUnknown_203B234 -_0801BBF0: .4byte gKangaskhanStorage -_0801BBF4: .4byte gKangaskhanTrash -_0801BBF8: .4byte gUnknown_80D4970 -_0801BBFC: - adds r3, 0x1 - cmp r3, r5 - bge _0801BC1C - ldr r2, [r6] - lsls r0, r3, 3 - adds r1, r2, 0 - adds r1, 0xD0 - adds r1, r0 - ldr r1, [r1] -_0801BC0E: - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - beq _0801BBFC - adds r0, r2, 0 - adds r0, 0xC8 - str r1, [r0] -_0801BC1C: - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_801BB5C - - .align 2,0 diff --git a/asm/code_801C620.s b/asm/code_801C620.s index 3708b441b..787cee983 100644 --- a/asm/code_801C620.s +++ b/asm/code_801C620.s @@ -204,354 +204,4 @@ _0801D384: _0801D3A4: .4byte gUnknown_203B250 thumb_func_end sub_801D220 - thumb_func_start sub_801D3A8 -sub_801D3A8: - push {r4-r6,lr} - sub sp, 0x8 - ldr r1, _0801D3C4 - ldr r0, [r1] - ldr r0, [r0, 0x10] - adds r6, r1, 0 - cmp r0, 0xC - bls _0801D3BA - b _0801D4B6 -_0801D3BA: - lsls r0, 2 - ldr r1, _0801D3C8 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0801D3C4: .4byte gUnknown_203B250 -_0801D3C8: .4byte _0801D3CC - .align 2, 0 -_0801D3CC: - .4byte _0801D400 - .4byte _0801D400 - .4byte _0801D4B6 - .4byte _0801D458 - .4byte _0801D462 - .4byte _0801D468 - .4byte _0801D472 - .4byte _0801D47A - .4byte _0801D482 - .4byte _0801D490 - .4byte _0801D49C - .4byte _0801D4AA - .4byte _0801D4B2 -_0801D400: - ldr r0, [r6] - ldr r5, [r0] - cmp r5, 0 - beq _0801D438 - ldr r4, _0801D434 - adds r0, r4, 0 - adds r1, r5, 0 - movs r2, 0x7 - bl PrintColoredPokeNameToBuffer - ldr r2, [r6] - str r4, [r2, 0x18] - adds r0, r2, 0 - adds r0, 0x18 - adds r1, r2, 0 - adds r1, 0x68 - adds r3, r2, 0 - adds r3, 0xA8 - ldr r2, [r2, 0x14] - str r2, [sp] - movs r2, 0 - str r2, [sp, 0x4] - bl sub_8012D60 - b _0801D4B6 - .align 2, 0 -_0801D434: .4byte gAvailablePokemonNames -_0801D438: - bl sub_801D894 - ldr r2, [r6] - adds r0, r2, 0 - adds r0, 0x18 - adds r1, r2, 0 - adds r1, 0x68 - adds r3, r2, 0 - adds r3, 0xA8 - ldr r2, [r2, 0x14] - str r2, [sp] - str r5, [sp, 0x4] - movs r2, 0 - bl sub_8012D60 - b _0801D4B6 -_0801D458: - ldr r0, [r6] - ldr r0, [r0] - bl sub_80227B8 - b _0801D4B6 -_0801D462: - bl sub_8027074 - b _0801D4B6 -_0801D468: - ldr r0, [r6] - ldr r0, [r0] - bl sub_8025EF4 - b _0801D4B6 -_0801D472: - movs r0, 0 - bl sub_80252F0 - b _0801D4B6 -_0801D47A: - movs r0, 0x1 - bl sub_80252F0 - b _0801D4B6 -_0801D482: - ldr r0, [r6] - movs r1, 0x4 - ldrsh r0, [r0, r1] - movs r1, 0x2 - bl sub_8024458 - b _0801D4B6 -_0801D490: - ldr r0, [r6] - movs r1, 0x4 - ldrsh r0, [r0, r1] - bl sub_801BEEC - b _0801D4B6 -_0801D49C: - ldr r0, [r6] - ldrb r0, [r0, 0x6] - movs r1, 0x1 - movs r2, 0x2 - bl sub_8021774 - b _0801D4B6 -_0801D4AA: - movs r0, 0 - bl InitializeJobListMenu - b _0801D4B6 -_0801D4B2: - bl sub_801DCC4 -_0801D4B6: - add sp, 0x8 - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_801D3A8 - - thumb_func_start sub_801D4C0 -sub_801D4C0: - push {r4-r7,lr} - movs r6, 0 - ldr r4, _0801D554 - ldr r0, [r4] - adds r0, 0xA8 - movs r1, 0 - movs r2, 0x10 - bl MemoryFill16 - ldr r0, [r4] - ldrb r0, [r0, 0x6] - cmp r0, 0 - bne _0801D568 - bl sub_8096E2C - lsls r0, 24 - cmp r0, 0 - beq _0801D534 - ldr r1, [r4] - movs r0, 0x2 - str r0, [r1, 0x6C] - ldr r0, _0801D558 - str r0, [r1, 0x68] - bl GetNumberOfFilledInventorySlots - cmp r0, 0 - bne _0801D4FE - ldr r0, [r4] - adds r0, 0xA8 - movs r1, 0x1 - strh r1, [r0] -_0801D4FE: - ldr r1, [r4] - ldr r0, _0801D55C - str r0, [r1, 0x70] - movs r0, 0x4 - str r0, [r1, 0x74] - movs r6, 0x2 - movs r0, 0x2 - bl sub_80023E4 - lsls r0, 24 - cmp r0, 0 - beq _0801D534 - ldr r1, [r4] - ldr r0, _0801D560 - str r0, [r1, 0x78] - movs r0, 0x9 - str r0, [r1, 0x7C] - bl HasNoAcceptedJobs - lsls r0, 24 - cmp r0, 0 - beq _0801D532 - ldr r0, [r4] - adds r0, 0xAC - movs r1, 0x1 - strh r1, [r0] -_0801D532: - movs r6, 0x3 -_0801D534: - ldr r4, _0801D554 - ldr r2, [r4] - lsls r3, r6, 3 - adds r0, r2, 0 - adds r0, 0x68 - adds r0, r3 - ldr r1, _0801D564 - str r1, [r0] - adds r2, 0x6C - adds r2, r3 - movs r0, 0xB - str r0, [r2] - adds r6, 0x1 - adds r7, r4, 0 - b _0801D5E6 - .align 2, 0 -_0801D554: .4byte gUnknown_203B250 -_0801D558: .4byte gMenuItems -_0801D55C: .4byte gMenuTeam -_0801D560: .4byte gMenuJobList -_0801D564: .4byte gMenuOthers -_0801D568: - ldr r0, _0801D63C - ldr r1, _0801D640 - bl strcpy - bl sub_8096E2C - lsls r0, 24 - cmp r0, 0 - beq _0801D5B6 - ldr r1, [r4] - ldr r0, _0801D644 - ldr r0, [r0] - str r0, [r1, 0x68] - movs r0, 0x5 - str r0, [r1, 0x6C] - movs r0, 0x4 - bl sub_8024108 - lsls r0, 24 - cmp r0, 0 - beq _0801D59A - ldr r0, [r4] - adds r0, 0xA8 - movs r1, 0x1 - strh r1, [r0] -_0801D59A: - movs r6, 0x1 - ldr r1, [r4] - movs r0, 0x2 - str r0, [r1, 0x74] - ldr r0, _0801D648 - str r0, [r1, 0x70] - bl GetNumberOfFilledInventorySlots - cmp r0, 0 - bne _0801D5B4 - ldr r0, [r4] - adds r0, 0xAA - strh r6, [r0] -_0801D5B4: - movs r6, 0x2 -_0801D5B6: - ldr r5, _0801D64C - ldr r1, [r5] - lsls r2, r6, 3 - adds r3, r1, 0 - adds r3, 0x68 - adds r4, r3, r2 - ldr r0, _0801D650 - ldr r0, [r0] - str r0, [r4] - adds r1, 0x6C - adds r2, r1, r2 - movs r0, 0x8 - str r0, [r2] - adds r6, 0x1 - lsls r2, r6, 3 - adds r3, r2 - ldr r0, _0801D654 - ldr r0, [r0] - str r0, [r3] - adds r1, r2 - movs r0, 0xA - str r0, [r1] - adds r6, 0x1 - adds r7, r5, 0 -_0801D5E6: - ldr r4, [r7] - lsls r2, r6, 3 - adds r0, r4, 0 - adds r0, 0x68 - adds r0, r2 - movs r1, 0 - str r1, [r0] - adds r1, r4, 0 - adds r1, 0x6C - adds r2, r1, r2 - movs r0, 0x1 - str r0, [r2] - movs r3, 0 - cmp r3, r6 - bge _0801D622 - adds r5, r4, 0 - adds r4, 0xA8 - adds r2, r1, 0 -_0801D60A: - ldrh r0, [r4] - cmp r0, 0 - bne _0801D618 - ldr r1, [r2] - ldr r0, [r5, 0x14] - cmp r1, r0 - beq _0801D67A -_0801D618: - adds r4, 0x2 - adds r2, 0x8 - adds r3, 0x1 - cmp r3, r6 - blt _0801D60A -_0801D622: - movs r3, 0 - cmp r3, r6 - bge _0801D67A - ldr r1, [r7] - adds r0, r1, 0 - adds r0, 0xA8 - ldrh r0, [r0] - cmp r0, 0 - bne _0801D658 - ldr r0, [r1, 0x6C] - str r0, [r1, 0x14] - b _0801D67A - .align 2, 0 -_0801D63C: .4byte gAvailablePokemonNames -_0801D640: .4byte gUnknown_80DBF34 -_0801D644: .4byte gUnknown_80D49A8 -_0801D648: .4byte gMenuItems -_0801D64C: .4byte gUnknown_203B250 -_0801D650: .4byte gUnknown_80D4970 -_0801D654: .4byte gUnknown_80D49B4 -_0801D658: - adds r3, 0x1 - cmp r3, r6 - bge _0801D67A - ldr r2, [r7] - lsls r0, r3, 1 - adds r1, r2, 0 - adds r1, 0xA8 - adds r1, r0 - ldrh r0, [r1] - cmp r0, 0 - bne _0801D658 - lsls r0, r3, 3 - adds r1, r2, 0 - adds r1, 0x6C - adds r1, r0 - ldr r0, [r1] - str r0, [r2, 0x14] -_0801D67A: - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_801D4C0 - .align 2,0 diff --git a/asm/code_801EE10.s b/asm/code_801EE10.s index 2c059b251..710fb1457 100644 --- a/asm/code_801EE10.s +++ b/asm/code_801EE10.s @@ -605,34 +605,4 @@ _0801F3F0: .4byte gUnknown_203B270 _0801F3F4: .4byte gUnknown_80DC2A0 thumb_func_end sub_801F280 - thumb_func_start sub_801F3F8 -sub_801F3F8: - push {r4,r5,lr} - movs r4, 0 - ldr r0, _0801F424 - ldr r0, [r0] - movs r5, 0x1 - ldr r2, [r0, 0x10] - movs r3, 0x7 -_0801F406: - ldrb r1, [r2] - adds r0, r5, 0 - ands r0, r1 - cmp r0, 0 - beq _0801F412 - adds r4, 0x1 -_0801F412: - adds r2, 0x8 - subs r3, 0x1 - cmp r3, 0 - bge _0801F406 - adds r0, r4, 0 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_0801F424: .4byte gUnknown_203B270 - thumb_func_end sub_801F3F8 - - .align 2,0 diff --git a/asm/code_801EE10_1.s b/asm/code_801EE10_1.s index bf1877a8d..beedcfd3d 100644 --- a/asm/code_801EE10_1.s +++ b/asm/code_801EE10_1.s @@ -5,405 +5,6 @@ .text - thumb_func_start sub_8023420 -sub_8023420: - push {r4,r5,lr} - ldr r4, _080234A8 - ldr r0, [r4] - movs r1, 0xFE - lsls r1, 2 - adds r0, r1 - movs r2, 0 - movs r1, 0x1 - strb r1, [r0] - ldr r0, [r4] - ldr r1, _080234AC - adds r0, r1 - strb r2, [r0] - ldr r0, [r4] - adds r1, 0x1 - adds r0, r1 - movs r1, 0xC - strb r1, [r0] - ldr r0, [r4] - ldr r1, _080234B0 - adds r0, r1 - strb r2, [r0] - ldr r0, [r4] - ldr r2, _080234B4 - adds r0, r2 - movs r1, 0 - ldrsh r0, [r0, r1] - movs r1, 0xC - bl sub_80095E4 - adds r0, 0x2 - ldr r3, [r4] - movs r2, 0xE4 - lsls r2, 2 - adds r5, r3, r2 - ldr r2, [r5] - lsls r1, r2, 1 - adds r1, r2 - lsls r1, 3 - adds r1, r3, r1 - ldr r2, _080234B8 - adds r1, r2 - lsls r0, 16 - lsrs r0, 16 - strh r0, [r1] - ldr r2, [r5] - lsls r1, r2, 1 - adds r1, r2 - lsls r1, 3 - adds r3, r1 - movs r1, 0xEA - lsls r1, 2 - adds r3, r1 - strh r0, [r3] - bl ResetUnusedInputStruct - ldr r0, [r4] - movs r2, 0xE6 - lsls r2, 2 - adds r0, r2 - movs r1, 0x1 - movs r2, 0x1 - bl sub_800641C - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080234A8: .4byte gUnknown_3001B5C -_080234AC: .4byte 0x000003f9 -_080234B0: .4byte 0x000003fb -_080234B4: .4byte 0x00000376 -_080234B8: .4byte 0x000003a6 - thumb_func_end sub_8023420 - - thumb_func_start sub_80234BC -sub_80234BC: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x178 - ldr r5, _0802368C - ldr r0, [r5] - movs r4, 0xE4 - lsls r4, 2 - adds r0, r4 - ldr r0, [r0] - bl sub_8008C54 - ldr r0, [r5] - adds r0, r4 - ldr r0, [r0] - bl sub_80073B8 - ldr r2, _08023690 - ldr r0, [r5] - adds r0, r4 - ldr r3, [r0] - movs r0, 0 - str r0, [sp] - movs r0, 0xA - movs r1, 0 - bl xxx_call_draw_string - ldr r3, [r5] - ldr r1, _08023694 - adds r0, r3, r1 - ldrb r0, [r0] - lsls r0, 3 - adds r0, 0x4 - ldr r2, _08023698 - adds r1, r3, r2 - movs r6, 0 - ldrsh r2, [r1, r6] - adds r2, 0x1 - movs r1, 0x7 - str r1, [sp] - adds r3, r4 - ldr r1, [r3] - str r1, [sp, 0x4] - movs r1, 0 - movs r3, 0x2 - bl sub_8012BC4 - movs r0, 0 - mov r10, r0 - ldr r0, [r5] - ldr r1, _0802369C - adds r0, r1 - movs r2, 0 - ldrsh r0, [r0, r2] - cmp r10, r0 - blt _08023532 - b _0802366C -_08023532: - ldr r3, _0802368C - ldr r0, [r3] - movs r6, 0xD7 - lsls r6, 2 - adds r0, r6 - mov r1, r10 - bl sub_8013800 - mov r8, r0 - ldr r0, _0802368C - ldr r1, [r0] - ldr r2, _08023698 - adds r0, r1, r2 - movs r3, 0 - ldrsh r2, [r0, r3] - adds r6, 0x1C - adds r0, r1, r6 - movs r3, 0 - ldrsh r0, [r0, r3] - muls r0, r2 - add r0, r10 - lsls r0, 1 - adds r1, 0xC - adds r1, r0 - movs r6, 0 - ldrsh r5, [r1, r6] - adds r0, r5, 0 - bl GetFriendArea - lsls r0, 24 - lsrs r0, 24 - add r4, sp, 0x16C - adds r1, r4, 0 - movs r2, 0 - movs r3, 0 - bl sub_8092638 - movs r7, 0x7 - ldrb r0, [r4, 0x4] - cmp r0, 0 - beq _08023594 - adds r0, r5, 0 - bl HasRecruitedMon - lsls r0, 24 - movs r7, 0x4 - cmp r0, 0 - beq _08023594 - movs r7, 0x5 -_08023594: - adds r0, r5, 0 - movs r1, 0 - bl GetDexInternalNo - lsls r0, 16 - asrs r4, r0, 16 - adds r0, r4, 0 - movs r1, 0xA - bl __modsi3 - adds r2, r0, 0 - adds r2, 0x30 - lsls r2, 24 - lsrs r2, 24 - ldr r6, _0802368C - ldr r0, [r6] - movs r1, 0xE4 - lsls r1, 2 - mov r9, r1 - add r0, r9 - ldr r0, [r0] - str r0, [sp] - movs r0, 0x14 - mov r1, r8 - adds r3, r7, 0 - bl sub_8012C60 - cmp r4, 0x9 - ble _08023628 - adds r0, r4, 0 - movs r1, 0xA - bl __divsi3 - adds r4, r0, 0 - movs r1, 0xA - bl __modsi3 - adds r2, r0, 0 - adds r2, 0x30 - lsls r2, 24 - lsrs r2, 24 - ldr r0, [r6] - movs r3, 0xE4 - lsls r3, 2 - adds r0, r3 - ldr r0, [r0] - str r0, [sp] - movs r0, 0xD - mov r1, r8 - adds r3, r7, 0 - bl sub_8012C60 - cmp r4, 0x9 - ble _08023628 - adds r0, r4, 0 - movs r1, 0xA - bl __divsi3 - movs r1, 0xA - bl __modsi3 - adds r2, r0, 0 - adds r2, 0x30 - lsls r2, 24 - lsrs r2, 24 - ldr r0, [r6] - add r0, r9 - ldr r0, [r0] - str r0, [sp] - movs r0, 0x6 - mov r1, r8 - adds r3, r7, 0 - bl sub_8012C60 -_08023628: - add r4, sp, 0x108 - adds r0, r4, 0 - adds r1, r5, 0 - bl sub_808D930 - add r0, sp, 0x8 - ldr r1, _080236A0 - adds r2, r7, 0 - adds r3, r4, 0 - bl sprintfStatic - ldr r6, _0802368C - ldr r0, [r6] - movs r1, 0xE4 - lsls r1, 2 - adds r0, r1 - ldr r3, [r0] - movs r0, 0 - str r0, [sp] - movs r0, 0x24 - mov r1, r8 - add r2, sp, 0x8 - bl xxx_call_draw_string - movs r2, 0x1 - add r10, r2 - ldr r0, [r6] - ldr r3, _0802369C - adds r0, r3 - movs r6, 0 - ldrsh r0, [r0, r6] - cmp r10, r0 - bge _0802366C - b _08023532 -_0802366C: - ldr r0, _0802368C - ldr r0, [r0] - movs r1, 0xE4 - lsls r1, 2 - adds r0, r1 - ldr r0, [r0] - bl sub_80073E0 - add sp, 0x178 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0802368C: .4byte gUnknown_3001B5C -_08023690: .4byte gUnknown_80DC934 -_08023694: .4byte 0x000003fa -_08023698: .4byte 0x0000037a -_0802369C: .4byte 0x00000376 -_080236A0: .4byte gUnknown_80DC93C - thumb_func_end sub_80234BC - - thumb_func_start sub_80236A4 -sub_80236A4: - push {r4,r5,lr} - ldr r0, _080236FC - ldr r1, [r0] - movs r0, 0 - str r0, [r1, 0x8] - movs r5, 0 -_080236B0: - lsls r0, r5, 16 - asrs r4, r0, 16 - adds r0, r4, 0 - bl sub_8098134 - lsls r0, 24 - cmp r0, 0 - beq _080236E2 - adds r0, r4, 0 - bl GetBaseSpeciesNoUnown - lsls r0, 16 - asrs r0, 16 - cmp r4, r0 - bne _080236E2 - ldr r0, _080236FC - ldr r3, [r0] - ldr r1, [r3, 0x8] - lsls r2, r1, 1 - adds r0, r3, 0 - adds r0, 0xC - adds r0, r2 - strh r5, [r0] - adds r1, 0x1 - str r1, [r3, 0x8] -_080236E2: - adds r5, 0x1 - ldr r0, _08023700 - cmp r5, r0 - ble _080236B0 - bl sub_8023730 - ldr r0, _080236FC - ldr r0, [r0] - ldr r0, [r0, 0x8] - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_080236FC: .4byte gUnknown_3001B5C -_08023700: .4byte 0x000001a7 - thumb_func_end sub_80236A4 - - thumb_func_start sub_8023704 -sub_8023704: - push {r4,lr} - movs r4, 0 -_08023708: - lsls r0, r4, 16 - asrs r0, 16 - bl sub_8098134 - lsls r0, 24 - cmp r0, 0 - beq _0802371A - movs r0, 0 - b _08023724 -_0802371A: - adds r4, 0x1 - ldr r0, _0802372C - cmp r4, r0 - ble _08023708 - movs r0, 0x1 -_08023724: - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_0802372C: .4byte 0x000001a7 - thumb_func_end sub_8023704 - - thumb_func_start sub_8023730 -sub_8023730: - push {lr} - ldr r0, _08023744 - ldr r0, [r0] - ldr r0, [r0, 0x4] - cmp r0, 0x1 - beq _08023748 - cmp r0, 0x2 - beq _0802374E - b _08023752 - .align 2, 0 -_08023744: .4byte gUnknown_3001B5C -_08023748: - bl sub_8023758 - b _08023752 -_0802374E: - bl sub_80237E0 -_08023752: - pop {r0} - bx r0 - thumb_func_end sub_8023730 - thumb_func_start sub_8023758 sub_8023758: push {r4-r7,lr} diff --git a/asm/code_8031D70.s b/asm/code_8031D70.s deleted file mode 100644 index b88957114..000000000 --- a/asm/code_8031D70.s +++ /dev/null @@ -1,266 +0,0 @@ - #include "asm/constants/gba_constants.inc" - #include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start sub_8031D70 -sub_8031D70: - push {r4-r6,lr} - adds r6, r0, 0 - adds r4, r1, 0 - ldr r5, _08031DC4 - movs r0, 0x7C - movs r1, 0x8 - bl MemoryAlloc - str r0, [r5] - stm r0!, {r6} - bl sub_801317C - ldr r0, [r5] - str r4, [r0, 0x10] - lsls r1, r4, 1 - adds r1, r4 - lsls r1, 3 - adds r1, 0x18 - adds r1, r0, r1 - str r1, [r0, 0x14] - adds r0, 0x18 - bl sub_8006518 - ldr r1, [r5] - ldr r2, [r1, 0x10] - lsls r0, r2, 1 - adds r0, r2 - lsls r0, 3 - adds r1, r0 - adds r1, 0x18 - ldr r0, _08031DC8 - ldm r0!, {r2-r4} - stm r1!, {r2-r4} - ldm r0!, {r2-r4} - stm r1!, {r2-r4} - bl sub_8031E00 - movs r0, 0x1 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_08031DC4: .4byte gUnknown_203B334 -_08031DC8: .4byte gUnknown_80E1FC4 - thumb_func_end sub_8031D70 - - thumb_func_start sub_8031DCC -sub_8031DCC: - push {lr} - ldr r0, _08031DEC - ldr r1, [r0] - adds r0, r1, 0x4 - ldr r1, [r1, 0x10] - bl sub_8012A64 - cmp r0, 0x1 - beq _08031DF0 - cmp r0, 0x2 - bne _08031DFA - movs r0, 0x1 - bl PlayMenuSoundEffect - movs r0, 0x2 - b _08031DFC - .align 2, 0 -_08031DEC: .4byte gUnknown_203B334 -_08031DF0: - movs r0, 0 - bl PlayMenuSoundEffect - movs r0, 0x3 - b _08031DFC -_08031DFA: - movs r0, 0 -_08031DFC: - pop {r1} - bx r1 - thumb_func_end sub_8031DCC - - thumb_func_start sub_8031E00 -sub_8031E00: - push {lr} - bl sub_8031E58 - bl sub_8031E74 - pop {r0} - bx r0 - thumb_func_end sub_8031E00 - - thumb_func_start sub_8031E10 -sub_8031E10: - push {r4,r5,lr} - ldr r4, _08031E50 - ldr r2, [r4] - cmp r2, 0 - beq _08031E4A - ldr r0, [r2, 0x10] - lsls r1, r0, 1 - adds r1, r0 - lsls r1, 3 - adds r1, r2, r1 - adds r1, 0x18 - ldr r0, _08031E54 - ldm r0!, {r2,r3,r5} - stm r1!, {r2,r3,r5} - ldm r0!, {r2,r3,r5} - stm r1!, {r2,r3,r5} - bl ResetUnusedInputStruct - ldr r0, [r4] - adds r0, 0x18 - movs r1, 0x1 - movs r2, 0x1 - bl sub_800641C - ldr r0, [r4] - bl MemoryFree - movs r0, 0 - str r0, [r4] -_08031E4A: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08031E50: .4byte gUnknown_203B334 -_08031E54: .4byte gUnknown_80E1FA8 - thumb_func_end sub_8031E10 - - thumb_func_start sub_8031E58 -sub_8031E58: - push {lr} - bl ResetUnusedInputStruct - ldr r0, _08031E70 - ldr r0, [r0] - adds r0, 0x18 - movs r1, 0x1 - movs r2, 0x1 - bl sub_800641C - pop {r0} - bx r0 - .align 2, 0 -_08031E70: .4byte gUnknown_203B334 - thumb_func_end sub_8031E58 - - thumb_func_start sub_8031E74 -sub_8031E74: - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x3C - ldr r3, _08031EC0 - ldr r5, _08031EC4 - ldr r2, [r5] - ldr r1, [r2] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 4 - ldr r4, [r3] - adds r4, r0 - ldr r0, [r2, 0x10] - bl sub_80073B8 - ldr r2, _08031EC8 - ldr r0, [r5] - ldr r3, [r0, 0x10] - movs r0, 0 - str r0, [sp] - movs r0, 0x14 - movs r1, 0 - bl xxx_call_draw_string - add r0, sp, 0x4 - adds r1, r4, 0 - bl sub_803D2C0 - movs r7, 0 - mov r8, r5 -_08031EB2: - cmp r7, 0x4 - ble _08031ED0 - cmp r7, 0xC - bgt _08031ECC - movs r6, 0x6 - movs r5, 0x16 - b _08031F00 - .align 2, 0 -_08031EC0: .4byte gUnknown_203B480 -_08031EC4: .4byte gUnknown_203B334 -_08031EC8: .4byte gUnknown_80E1FDC -_08031ECC: - cmp r7, 0x11 - bgt _08031ED6 -_08031ED0: - movs r6, 0x7 - movs r5, 0x15 - b _08031F00 -_08031ED6: - cmp r7, 0x16 - ble _08031EE8 - cmp r7, 0x1E - bgt _08031EE4 - movs r6, 0x6 - movs r5, 0x25 - b _08031F00 -_08031EE4: - cmp r7, 0x23 - bgt _08031EEE -_08031EE8: - movs r6, 0x7 - movs r5, 0x24 - b _08031F00 -_08031EEE: - cmp r7, 0x28 - ble _08031EFC - cmp r7, 0x30 - bgt _08031EFC - movs r6, 0x6 - movs r5, 0x34 - b _08031F00 -_08031EFC: - movs r6, 0x7 - movs r5, 0x33 -_08031F00: - adds r0, r7, 0 - movs r1, 0x12 - bl __modsi3 - movs r1, 0xB - adds r4, r0, 0 - muls r4, r1 - adds r4, 0x6 - mov r0, sp - adds r0, r7 - adds r0, 0x4 - ldrb r2, [r0] - mov r1, r8 - ldr r0, [r1] - ldr r0, [r0, 0x10] - str r0, [sp] - adds r0, r4, 0 - adds r1, r5, 0 - adds r3, r6, 0 - bl sub_8012C60 - mov r1, r8 - ldr r0, [r1] - ldr r0, [r0, 0x10] - adds r2, r5, 0 - adds r2, 0xA - movs r1, 0x5 - str r1, [sp] - adds r1, r4, 0 - movs r3, 0xA - bl sub_80078A4 - adds r7, 0x1 - cmp r7, 0x35 - ble _08031EB2 - ldr r0, _08031F5C - ldr r0, [r0] - ldr r0, [r0, 0x10] - bl sub_80073E0 - add sp, 0x3C - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08031F5C: .4byte gUnknown_203B334 - thumb_func_end sub_8031E74 - - .align 2,0 diff --git a/asm/code_8040094.s b/asm/code_8040094.s index 106a7cbce..3af8ed32e 100644 --- a/asm/code_8040094.s +++ b/asm/code_8040094.s @@ -1311,7 +1311,7 @@ _08040B4C: bx r0 .align 2, 0 _08040B58: .4byte 0x0000e0b8 -_08040B5C: .4byte gUnknown_202B03A +_08040B5C: .4byte gUnknown_202B038 + 2 thumb_func_end sub_8040ABC thumb_func_start sub_8040B60 diff --git a/asm/code_80495E4.s b/asm/code_80495E4.s index 709733851..b5af22572 100644 --- a/asm/code_80495E4.s +++ b/asm/code_80495E4.s @@ -1937,346 +1937,4 @@ _0804AA46: _0804AA5C: .4byte 0x00013554 thumb_func_end sub_804A728 - thumb_func_start sub_804AA60 -sub_804AA60: - push {r4,lr} - movs r1, 0 - ldr r0, _0804AAA0 - movs r3, 0 - movs r2, 0x80 - lsls r2, 5 - adds r4, r0, r2 -_0804AA6E: - lsls r0, r1, 6 - adds r2, r1, 0x1 - movs r1, 0x1F - adds r0, r4 - adds r0, 0x3E -_0804AA78: - strh r3, [r0] - subs r0, 0x2 - subs r1, 0x1 - cmp r1, 0 - bge _0804AA78 - adds r1, r2, 0 - cmp r1, 0x1F - ble _0804AA6E - movs r4, 0 - movs r0, 0x2 - bl sub_80098F8 - ldr r0, _0804AAA4 - ldr r0, [r0] - ldr r1, _0804AAA8 - adds r0, r1 - strb r4, [r0] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0804AAA0: .4byte gUnknown_202B038 -_0804AAA4: .4byte gDungeon -_0804AAA8: .4byte 0x0001821a - thumb_func_end sub_804AA60 - - thumb_func_start sub_804AAAC -sub_804AAAC: - push {r4-r7,lr} - movs r5, 0 - movs r7, 0 -_0804AAB2: - movs r4, 0 - adds r6, r5, 0x1 -_0804AAB6: - adds r0, r4, 0 - adds r1, r5, 0 - bl GetTileSafe - strh r7, [r0, 0x4] - adds r4, 0x1 - cmp r4, 0x37 - ble _0804AAB6 - adds r5, r6, 0 - cmp r5, 0x1F - ble _0804AAB2 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_804AAAC - - thumb_func_start sub_804AAD4 -sub_804AAD4: - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - ldr r4, _0804AC04 - movs r0, 0 - mov r8, r0 - ldr r6, _0804AC08 - ldr r5, _0804AC0C - movs r2, 0 - movs r3, 0x1F -_0804AAEA: - ldr r0, [r4] - adds r0, r2 - ldr r1, _0804AC10 - adds r0, r1 - mov r7, r8 - strb r7, [r0] - ldr r0, [r4] - adds r0, r2 - adds r1, 0x1 - adds r0, r1 - strb r7, [r0] - ldr r0, [r4] - adds r0, r2 - ldr r7, _0804AC14 - adds r1, r0, r7 - strh r6, [r1] - adds r7, 0x2 - adds r1, r0, r7 - strh r6, [r1] - adds r7, 0x2 - adds r1, r0, r7 - strh r5, [r1] - ldr r1, _0804AC18 - adds r0, r1 - strh r5, [r0] - adds r2, 0x1C - subs r3, 0x1 - cmp r3, 0 - bge _0804AAEA - movs r4, 0 - mov r9, r4 - movs r6, 0 - ldr r7, _0804AC04 - mov r8, r7 -_0804AB2E: - movs r4, 0 - adds r5, r6, 0x1 -_0804AB32: - adds r0, r4, 0 - adds r1, r6, 0 - bl GetTile - ldrb r2, [r0, 0x9] - adds r3, r4, 0x1 - cmp r2, 0xFF - beq _0804AB84 - lsls r0, r2, 3 - subs r0, r2 - lsls r0, 2 - ldr r1, _0804AC10 - adds r0, r1 - mov r7, r8 - ldr r1, [r7] - adds r1, r0 - movs r0, 0x1 - strb r0, [r1] - movs r7, 0x2 - ldrsh r0, [r1, r7] - cmp r0, r4 - ble _0804AB60 - strh r4, [r1, 0x2] -_0804AB60: - movs r4, 0x4 - ldrsh r0, [r1, r4] - cmp r0, r6 - ble _0804AB6A - strh r6, [r1, 0x4] -_0804AB6A: - movs r7, 0x6 - ldrsh r0, [r1, r7] - cmp r0, r3 - bge _0804AB74 - strh r3, [r1, 0x6] -_0804AB74: - movs r4, 0x8 - ldrsh r0, [r1, r4] - cmp r0, r5 - bge _0804AB7E - strh r5, [r1, 0x8] -_0804AB7E: - cmp r9, r2 - bge _0804AB84 - mov r9, r2 -_0804AB84: - adds r4, r3, 0 - cmp r4, 0x37 - ble _0804AB32 - adds r6, r5, 0 - cmp r6, 0x1F - ble _0804AB2E - ldr r7, _0804AC04 - mov r8, r7 - mov r5, r9 - adds r5, 0x1 - mov r6, r8 - movs r4, 0 - movs r3, 0x1F -_0804AB9E: - ldr r1, _0804AC10 - adds r0, r4, r1 - ldr r1, [r6] - adds r2, r1, r0 - ldrb r0, [r2] - cmp r0, 0 - beq _0804ABE4 - movs r7, 0x2 - ldrsh r1, [r2, r7] - subs r1, 0x1 - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 3 - str r0, [r2, 0xC] - movs r0, 0x4 - ldrsh r1, [r2, r0] - subs r1, 0x1 - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 3 - str r0, [r2, 0x10] - movs r7, 0x6 - ldrsh r1, [r2, r7] - adds r1, 0x1 - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 3 - str r0, [r2, 0x14] - movs r0, 0x8 - ldrsh r1, [r2, r0] - adds r1, 0x1 - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 3 - str r0, [r2, 0x18] -_0804ABE4: - adds r4, 0x1C - subs r3, 0x1 - cmp r3, 0 - bge _0804AB9E - mov r1, r8 - ldr r0, [r1] - ldr r4, _0804AC1C - adds r0, r4 - strb r5, [r0] - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0804AC04: .4byte gDungeon -_0804AC08: .4byte 0x0000270f -_0804AC0C: .4byte 0x0000d8f1 -_0804AC10: .4byte 0x000104c4 -_0804AC14: .4byte 0x000104c6 -_0804AC18: .4byte 0x000104cc -_0804AC1C: .4byte 0x000104c0 - thumb_func_end sub_804AAD4 - - thumb_func_start sub_804AC20 -sub_804AC20: - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - adds r4, r0, 0 - movs r1, 0 - ldrsh r0, [r4, r1] - movs r2, 0x2 - ldrsh r1, [r4, r2] - bl GetTile - ldrb r1, [r0, 0x9] - ldr r0, _0804AC6C - ldr r3, [r0] - ldr r5, _0804AC70 - adds r0, r3, r5 - ldrb r2, [r0] - adds r5, 0x1 - adds r0, r3, r5 - ldrb r0, [r0] - cmp r0, 0 - bne _0804ACD4 - cmp r2, 0 - bne _0804AC52 - movs r2, 0x2 -_0804AC52: - cmp r1, 0xFF - bne _0804AC74 - movs r0, 0 - ldrsh r1, [r4, r0] - subs r3, r1, r2 - mov r9, r3 - movs r5, 0x2 - ldrsh r0, [r4, r5] - subs r3, r0, r2 - adds r6, r1, r2 - adds r0, r2 - mov r8, r0 - b _0804ACA2 - .align 2, 0 -_0804AC6C: .4byte gDungeon -_0804AC70: .4byte 0x00018209 -_0804AC74: - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - ldr r1, _0804ACE0 - adds r0, r1 - adds r2, r3, r0 - ldrb r0, [r2, 0x1] - cmp r0, 0 - bne _0804ACD4 - movs r0, 0x1 - strb r0, [r2, 0x1] - movs r3, 0x2 - ldrsh r0, [r2, r3] - subs r0, 0x1 - mov r9, r0 - movs r5, 0x4 - ldrsh r0, [r2, r5] - subs r3, r0, 0x1 - movs r0, 0x6 - ldrsh r6, [r2, r0] - movs r5, 0x8 - ldrsh r1, [r2, r5] - mov r8, r1 -_0804ACA2: - adds r5, r3, 0 - cmp r5, r8 - bgt _0804ACD4 -_0804ACA8: - mov r4, r9 - adds r7, r5, 0x1 - cmp r4, r6 - bgt _0804ACCE -_0804ACB0: - adds r0, r4, 0 - adds r1, r5, 0 - bl GetTileSafe - ldrh r2, [r0, 0x4] - movs r1, 0x3 - orrs r1, r2 - strh r1, [r0, 0x4] - adds r0, r4, 0 - adds r1, r5, 0 - bl sub_80402AC - adds r4, 0x1 - cmp r4, r6 - ble _0804ACB0 -_0804ACCE: - adds r5, r7, 0 - cmp r5, r8 - ble _0804ACA8 -_0804ACD4: - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0804ACE0: .4byte 0x000104c4 - thumb_func_end sub_804AC20 - .align 2, 0 diff --git a/asm/code_8069E0C.s b/asm/code_8069E0C.s index 1f15fc7dc..c8e843e95 100644 --- a/asm/code_8069E0C.s +++ b/asm/code_8069E0C.s @@ -5347,200 +5347,4 @@ _0806CC08: .4byte 0x000001ff _0806CC0C: .4byte 0x00000fff thumb_func_end sub_806C51C - thumb_func_start sub_806CC10 -sub_806CC10: - push {r4,r5,lr} - movs r5, 0 -_0806CC14: - ldr r0, _0806CC68 - ldr r0, [r0] - lsls r1, r5, 2 - ldr r2, _0806CC6C - adds r0, r2 - adds r0, r1 - ldr r4, [r0] - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _0806CC5C - ldr r2, [r4, 0x70] - movs r1, 0xB3 - lsls r1, 1 - adds r0, r2, r1 - ldrb r1, [r0] - cmp r1, 0 - beq _0806CC5C - subs r1, 0x1 - strb r1, [r0] - movs r0, 0x1 - ands r1, r0 - cmp r1, 0 - bne _0806CC5C - adds r0, r2, 0 - adds r0, 0x46 - ldrb r2, [r0] - subs r2, 0x1 - movs r0, 0x7 - ands r2, r0 - adds r0, r4, 0 - movs r1, 0 - bl sub_806CDD4 -_0806CC5C: - adds r5, 0x1 - cmp r5, 0x13 - ble _0806CC14 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0806CC68: .4byte gDungeon -_0806CC6C: .4byte 0x000135cc - thumb_func_end sub_806CC10 - - thumb_func_start sub_806CC70 -sub_806CC70: - push {r4,r5,lr} - movs r5, 0 -_0806CC74: - ldr r0, _0806CCAC - ldr r0, [r0] - lsls r1, r5, 2 - ldr r2, _0806CCB0 - adds r0, r2 - adds r0, r1 - ldr r4, [r0] - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _0806CCA0 - adds r0, r4, 0 - bl sub_806CEBC - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl sub_806CCB4 -_0806CCA0: - adds r5, 0x1 - cmp r5, 0x13 - ble _0806CC74 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0806CCAC: .4byte gDungeon -_0806CCB0: .4byte 0x000135cc - thumb_func_end sub_806CC70 - - thumb_func_start sub_806CCB4 -sub_806CCB4: - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0xC - adds r5, r0, 0 - lsls r1, 24 - lsrs r4, r1, 24 - ldr r7, [r5, 0x70] - ldr r0, _0806CD40 - ldr r0, [r0] - ldr r2, _0806CD44 - adds r1, r0, r2 - ldrb r6, [r1] - ldr r3, _0806CD48 - adds r0, r3 - ldr r0, [r0] - cmp r5, r0 - bne _0806CCDC - movs r6, 0 -_0806CCDC: - adds r0, r5, 0 - adds r0, 0x6B - movs r3, 0 - strb r4, [r0] - adds r2, r5, 0 - adds r2, 0x6A - strb r4, [r2] - adds r4, r7, 0 - adds r4, 0x46 - ldrb r0, [r4] - adds r1, r5, 0 - adds r1, 0x6D - strb r0, [r1] - ldrb r0, [r4] - subs r1, 0x1 - strb r0, [r1] - adds r0, r5, 0 - adds r0, 0x6F - strb r3, [r0] - subs r0, 0x7 - movs r3, 0 - ldrsh r4, [r0, r3] - mov r9, r4 - adds r0, r7, 0 - adds r0, 0xC8 - ldrb r0, [r0] - adds r7, r2, 0 - mov r8, r1 - cmp r0, 0x2 - beq _0806CD4C - cmp r6, 0 - bne _0806CD4C - bl Rand32Bit - movs r4, 0x3 - ands r4, r0 - adds r0, r5, 0 - adds r0, 0x28 - ldr r1, [r5, 0x64] - ldrb r2, [r7] - mov r7, r8 - ldrb r3, [r7] - mov r7, r9 - str r7, [sp] - str r4, [sp, 0x4] - str r6, [sp, 0x8] - bl sub_80053AC - b _0806CD76 - .align 2, 0 -_0806CD40: .4byte gDungeon -_0806CD44: .4byte 0x00018210 -_0806CD48: .4byte 0x000181f8 -_0806CD4C: - ldr r0, _0806CD8C - bl sub_80687D0 - adds r4, r0, 0 - bl Rand32Bit - movs r1, 0x3 - ands r1, r0 - adds r0, r5, 0 - adds r0, 0x28 - ldrb r2, [r7] - mov r6, r8 - ldrb r3, [r6] - mov r7, r9 - str r7, [sp] - str r1, [sp, 0x4] - movs r1, 0 - str r1, [sp, 0x8] - adds r1, r4, 0 - bl sub_80053AC -_0806CD76: - adds r1, r5, 0 - adds r1, 0x6E - movs r0, 0 - strb r0, [r1] - add sp, 0xC - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0806CD8C: .4byte 0x000001a5 - thumb_func_end sub_806CCB4 - .align 2,0 diff --git a/asm/code_80848F0.s b/asm/code_80848F0.s index f6cf9bc34..61632dfa1 100644 --- a/asm/code_80848F0.s +++ b/asm/code_80848F0.s @@ -269,201 +269,4 @@ _0808546E: _0808547C: .4byte gUnknown_80F4598 thumb_func_end sub_8085374 - thumb_func_start xxx_call_GetLeader -xxx_call_GetLeader: - push {lr} - bl GetLeader - pop {r1} - bx r1 - thumb_func_end xxx_call_GetLeader - - thumb_func_start GetPartnerEntity -GetPartnerEntity: - push {r4,r5,lr} - movs r5, 0 -_08085490: - ldr r0, _080854B8 - ldr r0, [r0] - lsls r1, r5, 2 - ldr r2, _080854BC - adds r0, r2 - adds r0, r1 - ldr r4, [r0] - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _080854C0 - ldr r0, [r4, 0x70] - adds r0, 0x40 - ldrb r0, [r0] - cmp r0, 0x41 - bne _080854C0 - adds r0, r4, 0 - b _080854CC - .align 2, 0 -_080854B8: .4byte gDungeon -_080854BC: .4byte 0x0001357c -_080854C0: - adds r5, 0x1 - cmp r5, 0x3 - ble _08085490 - movs r0, 0x2 - bl GetEntityFromClientType -_080854CC: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end GetPartnerEntity - - thumb_func_start sub_80854D4 -sub_80854D4: - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x20 - movs r6, 0 - movs r5, 0 - add r0, sp, 0x10 - mov r8, r0 - mov r7, sp -_080854E6: - ldr r0, _080855D8 - ldr r0, [r0] - lsls r1, r5, 2 - ldr r2, _080855DC - adds r0, r2 - adds r0, r1 - ldr r4, [r0] - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _08085504 - stm r7!, {r4} - adds r6, 0x1 -_08085504: - adds r5, 0x1 - cmp r5, 0x3 - ble _080854E6 - cmp r6, 0x3 - bgt _0808551C - movs r1, 0 - lsls r0, r6, 2 - add r0, sp -_08085514: - stm r0!, {r1} - adds r6, 0x1 - cmp r6, 0x3 - ble _08085514 -_0808551C: - movs r6, 0 - movs r4, 0 - mov r2, sp - mov r3, r8 - movs r5, 0x3 -_08085526: - ldr r1, [r2] - cmp r1, 0 - beq _0808553A - ldr r0, [r1, 0x70] - ldrb r0, [r0, 0x7] - cmp r0, 0 - beq _0808553A - str r4, [r2] - stm r3!, {r1} - adds r6, 0x1 -_0808553A: - adds r2, 0x4 - subs r5, 0x1 - cmp r5, 0 - bge _08085526 - movs r4, 0 - mov r2, sp - lsls r0, r6, 2 - mov r1, r8 - adds r3, r0, r1 - movs r5, 0x3 -_0808554E: - ldr r1, [r2] - cmp r1, 0 - beq _08085564 - ldr r0, [r1, 0x70] - adds r0, 0x40 - ldrb r0, [r0] - cmp r0, 0x41 - bne _08085564 - str r4, [r2] - stm r3!, {r1} - adds r6, 0x1 -_08085564: - adds r2, 0x4 - subs r5, 0x1 - cmp r5, 0 - bge _0808554E - movs r3, 0 - mov r2, sp - lsls r0, r6, 2 - add r0, r8 - movs r5, 0x3 -_08085576: - ldr r1, [r2] - cmp r1, 0 - beq _08085582 - str r3, [r2] - stm r0!, {r1} - adds r6, 0x1 -_08085582: - adds r2, 0x4 - subs r5, 0x1 - cmp r5, 0 - bge _08085576 - cmp r6, 0x3 - bgt _0808559C - movs r1, 0 - lsls r0, r6, 2 - add r0, r8 -_08085594: - stm r0!, {r1} - adds r6, 0x1 - cmp r6, 0x3 - ble _08085594 -_0808559C: - movs r5, 0 - mov r4, r8 -_080855A0: - lsls r1, r5, 2 - ldr r3, [r4] - cmp r3, 0 - beq _080855C4 - ldr r0, _080855D8 - ldr r0, [r0] - adds r0, r1 - ldr r2, _080855E0 - adds r1, r0, r2 - movs r6, 0 - ldrsh r1, [r1, r6] - adds r2, 0x2 - adds r0, r2 - movs r6, 0 - ldrsh r2, [r0, r6] - adds r0, r3, 0 - bl sub_80856C8 -_080855C4: - adds r4, 0x4 - adds r5, 0x1 - cmp r5, 0x3 - ble _080855A0 - add sp, 0x20 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080855D8: .4byte gDungeon -_080855DC: .4byte 0x0001357c -_080855E0: .4byte 0x0000e220 - thumb_func_end sub_80854D4 - .align 2, 0 diff --git a/asm/code_8086A3C.s b/asm/code_8086A3C.s index b169933f4..73589b544 100644 --- a/asm/code_8086A3C.s +++ b/asm/code_8086A3C.s @@ -5,459 +5,6 @@ .text - thumb_func_start sub_8086F54 -sub_8086F54: - push {r4-r6,lr} - lsls r0, 24 - lsrs r6, r0, 24 - lsls r1, 24 - movs r0, 0xFC - lsls r0, 24 - adds r1, r0 - lsrs r1, 24 - cmp r1, 0x1 - bhi _08086FA8 - movs r5, 0 -_08086F6A: - ldr r0, _08086FB0 - ldr r0, [r0] - lsls r1, r5, 2 - ldr r2, _08086FB4 - adds r0, r2 - adds r0, r1 - ldr r4, [r0] - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _08086F8E - ldr r0, [r4, 0x70] - adds r0, 0xA4 - ldrb r0, [r0] - cmp r0, r6 - bne _08086FA8 -_08086F8E: - adds r5, 0x1 - cmp r5, 0xF - ble _08086F6A - movs r0, 0 - cmp r0, 0 - bne _08086FA8 - movs r0, 0x3 - bl sub_8097FA8 - ldr r0, _08086FB0 - ldr r1, [r0] - movs r0, 0x1 - strb r0, [r1, 0x2] -_08086FA8: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08086FB0: .4byte gDungeon -_08086FB4: .4byte 0x0001358c - thumb_func_end sub_8086F54 - - thumb_func_start TeamMeaniesPreFightDialogue -TeamMeaniesPreFightDialogue: - push {r4,lr} - bl xxx_call_GetLeader - adds r4, r0, 0 - bl sub_8086448 - movs r0, 0xA - movs r1, 0x46 - bl sub_803E708 - ldr r0, _08087048 - bl DisplayDungeonDialogue - movs r0, 0xA - movs r1, 0x46 - bl sub_803E708 - ldr r0, _0808704C - bl DisplayDungeonDialogue - movs r0, 0xA - movs r1, 0x46 - bl sub_803E708 - bl sub_8087144 - movs r0, 0xA - bl DungeonStartNewBGM - ldr r0, _08087050 - bl DisplayDungeonDialogue - movs r0, 0xA - movs r1, 0x46 - bl sub_803E708 - ldr r0, _08087054 - bl DisplayDungeonDialogue - movs r0, 0xA - movs r1, 0x46 - bl sub_803E708 - ldr r0, _08087058 - bl DisplayDungeonDialogue - movs r0, 0xA - movs r1, 0x46 - bl sub_803E708 - ldr r0, _0808705C - bl DisplayDungeonDialogue - movs r0, 0xA - movs r1, 0x46 - bl sub_803E708 - ldr r0, _08087060 - bl DisplayDungeonDialogue - movs r0, 0xA - movs r1, 0x46 - bl sub_803E708 - adds r4, 0xC - adds r0, r4, 0 - movs r1, 0x10 - bl ShiftCameraToPosition - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08087048: .4byte gTeamMeaniesPreFightDialogue_1 -_0808704C: .4byte gTeamMeaniesPreFightDialogue_2 -_08087050: .4byte gTeamMeaniesPreFightDialogue_3 -_08087054: .4byte gTeamMeaniesPreFightDialogue_4 -_08087058: .4byte gTeamMeaniesPreFightDialogue_5 -_0808705C: .4byte gTeamMeaniesPreFightDialogue_6 -_08087060: .4byte gTeamMeaniesPreFightDialogue_7 - thumb_func_end TeamMeaniesPreFightDialogue - - thumb_func_start TeamMeaniesReFightDialogue -TeamMeaniesReFightDialogue: - push {r4,r5,lr} - bl xxx_call_GetLeader - adds r4, r0, 0 - bl GetPartnerEntity - adds r5, r0, 0 - bl sub_8086448 - ldr r0, _08087118 - bl DisplayDungeonDialogue - movs r0, 0xA - movs r1, 0x46 - bl sub_803E708 - ldr r0, _0808711C - bl DisplayDungeonDialogue - movs r0, 0xA - movs r1, 0x46 - bl sub_803E708 - bl sub_8087144 - movs r0, 0xA - movs r1, 0x46 - bl sub_803E708 - ldr r0, _08087120 - bl DisplayDungeonDialogue - movs r0, 0xA - movs r1, 0x46 - bl sub_803E708 - ldr r0, _08087124 - bl DisplayDungeonDialogue - movs r0, 0xA - movs r1, 0x46 - bl sub_803E708 - adds r0, r4, 0 - movs r1, 0x6 - movs r2, 0x4 - bl sub_806CDD4 - adds r0, r5, 0 - movs r1, 0x6 - movs r2, 0x4 - bl sub_806CDD4 - movs r0, 0xA - movs r1, 0x46 - bl sub_803E708 - adds r0, r4, 0 - movs r1, 0x7 - movs r2, 0x4 - bl sub_806CDD4 - adds r0, r5, 0 - movs r1, 0x7 - movs r2, 0x4 - bl sub_806CDD4 - movs r0, 0xA - movs r1, 0x46 - bl sub_803E708 - ldr r0, _08087128 - bl DisplayDungeonDialogue - ldr r0, _0808712C - bl DisplayDungeonDialogue - movs r0, 0xA - movs r1, 0x46 - bl sub_803E708 - adds r4, 0xC - adds r0, r4, 0 - movs r1, 0x10 - bl ShiftCameraToPosition - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08087118: .4byte gTeamMeaniesReFightDialogue_1 -_0808711C: .4byte gTeamMeaniesPreFightDialogue_2 -_08087120: .4byte gTeamMeaniesReFightDialogue_2 -_08087124: .4byte gTeamMeaniesReFightDialogue_3 -_08087128: .4byte gTeamMeaniesReFightDialogue_4 -_0808712C: .4byte gTeamMeaniesReFightDialogue_5 - thumb_func_end TeamMeaniesReFightDialogue - - thumb_func_start sub_8087130 -sub_8087130: - push {lr} - bl sub_8086448 - ldr r0, _08087140 - bl sub_80866C4 - pop {r0} - bx r0 - .align 2, 0 -_08087140: .4byte gUnknown_8101440 - thumb_func_end sub_8087130 - - thumb_func_start sub_8087144 -sub_8087144: - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0xF0 - movs r0, 0x5 - bl GetEntityFromClientType - adds r7, r0, 0 - movs r0, 0x6 - bl GetEntityFromClientType - mov r8, r0 - movs r0, 0x7 - bl GetEntityFromClientType - mov r9, r0 - ldr r1, _080871E0 - mov r0, sp - movs r2, 0x38 - bl memcpy - add r6, sp, 0x38 - ldr r1, _080871E4 - adds r0, r6, 0 - movs r2, 0x38 - bl memcpy - add r4, sp, 0x70 - ldr r1, _080871E8 - adds r0, r4, 0 - movs r2, 0x38 - bl memcpy - add r5, sp, 0xA8 - mov r0, sp - str r0, [r5] - str r6, [r5, 0x4] - str r4, [r5, 0x8] - add r4, sp, 0xB4 - str r7, [r4] - mov r3, r8 - str r3, [r4, 0x4] - mov r0, r9 - str r0, [r4, 0x8] - movs r0, 0xA - bl DungeonStartNewBGM - adds r0, r7, 0 - bl sub_8086A54 - mov r0, r8 - bl sub_8086A54 - mov r0, r9 - bl sub_8086A54 - add r6, sp, 0xC0 - adds r0, r6, 0 - adds r1, r5, 0 - adds r2, r4, 0 - movs r3, 0x3 - bl sub_8085B4C - ldr r0, [r7, 0x70] - ldr r2, _080871EC - adds r0, r2 - movs r1, 0x1 - strb r1, [r0] - mov r3, r8 - ldr r0, [r3, 0x70] - adds r0, r2 - strb r1, [r0] - mov r3, r9 - ldr r0, [r3, 0x70] - adds r0, r2 - strb r1, [r0] - b _080871F6 - .align 2, 0 -_080871E0: .4byte gUnknown_810739C -_080871E4: .4byte gUnknown_81073D4 -_080871E8: .4byte gUnknown_810740C -_080871EC: .4byte 0x0000015f -_080871F0: - movs r0, 0x46 - bl sub_803E46C -_080871F6: - adds r0, r6, 0 - bl sub_8085B80 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0 - bne _080871F0 - ldr r0, [r7, 0x70] - ldr r1, _0808722C - adds r0, r1 - strb r2, [r0] - mov r3, r8 - ldr r0, [r3, 0x70] - adds r0, r1 - strb r2, [r0] - mov r3, r9 - ldr r0, [r3, 0x70] - adds r0, r1 - strb r2, [r0] - add sp, 0xF0 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0808722C: .4byte 0x0000015f - thumb_func_end sub_8087144 - - thumb_func_start sub_8087230 -sub_8087230: - push {r4-r6,lr} - bl xxx_call_GetLeader - adds r6, r0, 0 - movs r0, 0x8 - bl GetEntityFromClientType - adds r5, r0, 0 - movs r0, 0x72 - bl DungeonStartNewBGM - bl sub_8085374 - bl sub_80854D4 - movs r0, 0x4 - bl sub_8085930 - ldr r4, _08087294 - adds r0, r4, 0 - bl sub_80855E4 - adds r0, r5, 0 - movs r1, 0 - bl SetFacingDirection - adds r0, r5, 0 - bl _call_via_r4 - movs r1, 0x4 - ldrsh r0, [r6, r1] - movs r2, 0x6 - ldrsh r1, [r6, r2] - subs r1, 0x3 - bl sub_8085860 - ldr r4, _08087298 - movs r1, 0x96 - lsls r1, 1 - adds r0, r4, 0 - bl CopyMonsterNametoBuffer - adds r4, 0x50 - adds r0, r4, 0 - movs r1, 0x91 - bl CopyMonsterNametoBuffer - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08087294: .4byte sub_8086A3C -_08087298: .4byte gUnknown_202E038 - thumb_func_end sub_8087230 - - thumb_func_start sub_808729C -sub_808729C: - push {r4-r6,lr} - sub sp, 0x4 - bl xxx_call_GetLeader - adds r5, r0, 0 - movs r0, 0x8 - bl GetEntityFromClientType - adds r4, r0, 0 - bl sub_80854D4 - movs r0, 0x4 - bl sub_8085930 - ldr r6, _080872DC - adds r0, r6, 0 - bl sub_80855E4 - movs r0, 0x91 - bl sub_8086AE4 - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0 - beq _080872E0 - movs r1, 0x87 - lsls r1, 2 - adds r0, r4, 0 - movs r2, 0 - bl sub_8068FE0 - b _08087300 - .align 2, 0 -_080872DC: .4byte sub_8086A3C -_080872E0: - ldr r0, _0808732C - movs r3, 0 - ldrsh r2, [r0, r3] - str r1, [sp] - adds r0, r4, 0 - adds r1, r4, 0 - movs r3, 0 - bl sub_8072008 - adds r0, r4, 0 - movs r1, 0 - bl SetFacingDirection - adds r0, r4, 0 - bl _call_via_r6 -_08087300: - movs r1, 0x4 - ldrsh r0, [r5, r1] - movs r2, 0x6 - ldrsh r1, [r5, r2] - subs r1, 0x3 - bl sub_8085860 - ldr r4, _08087330 - movs r1, 0x96 - lsls r1, 1 - adds r0, r4, 0 - bl CopyMonsterNametoBuffer - adds r4, 0x50 - adds r0, r4, 0 - movs r1, 0x91 - bl CopyMonsterNametoBuffer - add sp, 0x4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0808732C: .4byte gUnknown_80F57CC -_08087330: .4byte gUnknown_202E038 - thumb_func_end sub_808729C - - thumb_func_start sub_8087334 -sub_8087334: - push {lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, 24 - movs r2, 0xF9 - lsls r2, 24 - adds r1, r2 - lsrs r1, 24 - cmp r1, 0x2 - bhi _0808735A - cmp r0, 0x8 - bne _0808735A - movs r0, 0x5 - bl sub_8097FA8 - ldr r0, _08087360 - ldr r1, [r0] - movs r0, 0x1 - strb r0, [r1, 0x2] -_0808735A: - pop {r0} - bx r0 - .align 2, 0 -_08087360: .4byte gDungeon - thumb_func_end sub_8087334 - thumb_func_start ZapdosPreFightDialogue ZapdosPreFightDialogue: push {r4-r7,lr} diff --git a/asm/code_8097318.s b/asm/code_8097318.s deleted file mode 100644 index cd9e11dbc..000000000 --- a/asm/code_8097318.s +++ /dev/null @@ -1,123 +0,0 @@ - #include "asm/constants/gba_constants.inc" - #include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start sub_80973A8 -sub_80973A8: - push {r4-r6,lr} - lsls r0, 16 - asrs r0, 16 - lsls r1, 24 - lsrs r6, r1, 24 - cmp r0, 0xD - beq _080973EE - lsls r5, r0, 16 - cmp r6, 0 - beq _080973E2 - bl sub_80A26B8 - lsls r0, 16 - asrs r4, r0, 16 - lsrs r2, r5, 16 - movs r0, 0 - movs r1, 0x2B - movs r3, 0 - bl sub_800199C - movs r0, 0x1 - negs r0, r0 - cmp r4, r0 - beq _080973E2 - movs r0, 0 - movs r1, 0x12 - adds r2, r4, 0 - bl sub_80018D8 -_080973E2: - lsrs r2, r5, 16 - movs r0, 0 - movs r1, 0x2C - adds r3, r6, 0 - bl sub_800199C -_080973EE: - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_80973A8 - - thumb_func_start sub_80973F4 -sub_80973F4: - push {lr} - lsls r0, 16 - asrs r0, 16 - cmp r0, 0xD - bne _08097402 - movs r0, 0 - b _08097414 -_08097402: - lsls r2, r0, 16 - lsrs r2, 16 - movs r0, 0 - movs r1, 0x2D - bl sub_8001784 - cmp r0, 0 - beq _08097414 - movs r0, 0x1 -_08097414: - pop {r1} - bx r1 - thumb_func_end sub_80973F4 - - thumb_func_start sub_8097418 -sub_8097418: - push {r4-r7,lr} - lsls r0, 16 - asrs r5, r0, 16 - lsls r1, 24 - lsrs r7, r1, 24 - cmp r5, 0xD - beq _08097470 - lsls r6, r5, 16 - cmp r7, 0 - beq _08097464 - lsrs r2, r6, 16 - movs r0, 0 - movs r1, 0x2C - movs r3, 0 - bl sub_800199C - cmp r5, 0x1E - bgt _08097464 - lsls r0, r5, 3 - ldr r1, _08097478 - adds r4, r0, r1 - ldrb r0, [r4, 0x4] - cmp r0, 0xFF - beq _0809744C - bl sub_8097FA8 -_0809744C: - ldrb r0, [r4, 0x5] - cmp r0, 0xFF - beq _08097456 - bl sub_8097FA8 -_08097456: - cmp r5, 0x9 - bne _08097460 - movs r0, 0x1F - bl sub_8097FA8 -_08097460: - bl sub_8097FF8 -_08097464: - lsrs r2, r6, 16 - movs r0, 0 - movs r1, 0x2D - adds r3, r7, 0 - bl sub_800199C -_08097470: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08097478: .4byte gStoryMissionText - thumb_func_end sub_8097418 - - .align 2,0 diff --git a/asm/menu_input.s b/asm/menu_input.s new file mode 100644 index 000000000..d13df4a6d --- /dev/null +++ b/asm/menu_input.s @@ -0,0 +1,585 @@ + #include "asm/constants/gba_constants.inc" + #include "asm/macros.inc" + + .syntax unified + + .text + + thumb_func_start AddMenuCursorSprite_ +AddMenuCursorSprite_: + push {r4-r6,lr} + sub sp, 0x8 + adds r6, r0, 0 + movs r0, 0 + movs r1, 0 + str r0, [sp] + str r1, [sp, 0x4] + movs r1, 0x1A + ldrsh r0, [r6, r1] + cmp r0, 0 + bgt _080131CC + b _080132D6 +_080131CC: + adds r0, r6, 0 + bl UpdateMenuCursorSpriteCoords + ldrh r1, [r6, 0x24] + movs r0, 0x8 + ands r0, r1 + cmp r0, 0 + bne _080132D6 + mov r0, sp + ldrh r0, [r0] + ldr r1, _080132FC + ands r1, r0 + ldr r3, _08013300 + ldr r0, [sp] + ands r0, r3 + orrs r0, r1 + str r0, [sp] + mov r1, sp + ldrh r1, [r1] + adds r2, r3, 0 + ands r2, r0 + orrs r2, r1 + str r2, [sp] + mov r0, sp + ldrh r1, [r0] + ldr r0, _08013304 + ands r0, r1 + adds r1, r3, 0 + ands r1, r2 + orrs r1, r0 + str r1, [sp] + mov r0, sp + ldrh r0, [r0] + adds r2, r3, 0 + ands r2, r1 + orrs r2, r0 + str r2, [sp] + mov r0, sp + ldrh r1, [r0] + ldr r4, _08013308 + adds r0, r4, 0 + ands r0, r1 + adds r1, r3, 0 + ands r1, r2 + orrs r1, r0 + str r1, [sp] + mov r0, sp + ldrh r0, [r0] + adds r2, r3, 0 + ands r2, r1 + orrs r2, r0 + str r2, [sp] + mov r0, sp + ldrh r1, [r0] + ldr r0, _0801330C + ands r0, r1 + adds r1, r3, 0 + ands r1, r2 + orrs r1, r0 + str r1, [sp] + mov r0, sp + ldrh r0, [r0] + adds r2, r3, 0 + ands r2, r1 + orrs r2, r0 + str r2, [sp] + mov r0, sp + ldrh r1, [r0] + ldr r0, _08013310 + ands r0, r1 + adds r1, r3, 0 + ands r1, r2 + orrs r1, r0 + str r1, [sp] + mov r0, sp + ldrh r0, [r0] + adds r2, r3, 0 + ands r2, r1 + orrs r2, r0 + str r2, [sp] + mov r0, sp + ldrh r1, [r0] + ldr r0, _08013314 + ands r0, r1 + adds r1, r3, 0 + ands r1, r2 + orrs r1, r0 + str r1, [sp] + mov r0, sp + ldrh r0, [r0] + ands r3, r1 + orrs r3, r0 + str r3, [sp] + mov r3, sp + movs r2, 0xFD + lsls r2, 2 + ldrh r1, [r3, 0x4] + movs r0, 0xFC + lsls r0, 8 + ands r0, r1 + orrs r0, r2 + ands r0, r4 + movs r5, 0xF + movs r1, 0xF0 + lsls r1, 8 + ldr r4, _08013318 + ands r0, r4 + orrs r0, r1 + strh r0, [r3, 0x4] + ldrh r0, [r3, 0x6] + ldr r1, _0801331C + ands r1, r0 + ldr r0, _08013320 + ands r1, r0 + movs r2, 0x8 + ldrsh r0, [r6, r2] + ldr r2, _08013324 + ands r0, r2 + strh r0, [r3, 0x2] + movs r2, 0xA + ldrsh r0, [r6, r2] + adds r0, 0x1 + ands r0, r4 + lsls r0, 4 + ands r1, r5 + orrs r1, r0 + strh r1, [r3, 0x6] + mov r0, sp + movs r1, 0xFF + movs r2, 0 + movs r3, 0 + bl AddSprite +_080132D6: + adds r0, r6, 0 + bl sub_8013470 + movs r1, 0x14 + ldrsh r0, [r6, r1] + cmp r0, 0 + beq _080132EC + adds r0, r6, 0 + adds r0, 0x14 + bl sub_801332C +_080132EC: + ldrh r0, [r6, 0x24] + adds r0, 0x1 + strh r0, [r6, 0x24] + add sp, 0x8 + pop {r4-r6} + pop {r0} + bx r0 + .align 2, 0 +_080132FC: .4byte 0x0000feff +_08013300: .4byte 0xffff0000 +_08013304: .4byte 0x0000fdff +_08013308: .4byte 0x0000f3ff +_0801330C: .4byte 0x0000efff +_08013310: .4byte 0x0000dfff +_08013314: .4byte 0x00003fff +_08013318: .4byte 0x00000fff +_0801331C: .4byte 0x0000fffe +_08013320: .4byte 0x0000fffd +_08013324: .4byte 0x000001ff + thumb_func_end AddMenuCursorSprite_ + + thumb_func_start nullsub_34 +nullsub_34: + bx lr + thumb_func_end nullsub_34 + + thumb_func_start sub_801332C +sub_801332C: + push {r4-r6,lr} + sub sp, 0x8 + movs r1, 0 + movs r2, 0 + str r1, [sp] + str r2, [sp, 0x4] + mov r1, sp + ldrh r1, [r1] + ldr r2, _08013440 + ands r2, r1 + ldr r4, _08013444 + ldr r1, [sp] + ands r1, r4 + orrs r1, r2 + str r1, [sp] + mov r2, sp + ldrh r2, [r2] + adds r3, r4, 0 + ands r3, r1 + orrs r3, r2 + str r3, [sp] + mov r1, sp + ldrh r2, [r1] + ldr r1, _08013448 + ands r1, r2 + adds r2, r4, 0 + ands r2, r3 + orrs r2, r1 + str r2, [sp] + mov r1, sp + ldrh r1, [r1] + adds r3, r4, 0 + ands r3, r2 + orrs r3, r1 + str r3, [sp] + movs r5, 0x80 + lsls r5, 3 + mov r1, sp + ldrh r2, [r1] + ldr r6, _0801344C + adds r1, r6, 0 + ands r1, r2 + adds r2, r4, 0 + ands r2, r3 + orrs r2, r1 + str r2, [sp] + mov r1, sp + ldrh r1, [r1] + orrs r5, r1 + adds r3, r4, 0 + ands r3, r2 + orrs r3, r5 + str r3, [sp] + mov r1, sp + ldrh r2, [r1] + ldr r1, _08013450 + ands r1, r2 + adds r2, r4, 0 + ands r2, r3 + orrs r2, r1 + str r2, [sp] + mov r1, sp + ldrh r1, [r1] + adds r3, r4, 0 + ands r3, r2 + orrs r3, r1 + str r3, [sp] + mov r1, sp + ldrh r2, [r1] + ldr r1, _08013454 + ands r1, r2 + adds r2, r4, 0 + ands r2, r3 + orrs r2, r1 + str r2, [sp] + mov r1, sp + ldrh r1, [r1] + adds r3, r4, 0 + ands r3, r2 + orrs r3, r1 + str r3, [sp] + mov r1, sp + ldrh r2, [r1] + ldr r1, _08013458 + ands r1, r2 + adds r2, r4, 0 + ands r2, r3 + orrs r2, r1 + str r2, [sp] + mov r1, sp + ldrh r1, [r1] + ands r4, r2 + orrs r4, r1 + str r4, [sp] + mov r4, sp + ldr r3, _0801345C + ldrh r2, [r4, 0x4] + movs r1, 0xFC + lsls r1, 8 + ands r1, r2 + orrs r1, r3 + ands r1, r6 + movs r6, 0xF + movs r2, 0xF0 + lsls r2, 8 + ldr r5, _08013460 + ands r1, r5 + orrs r1, r2 + strh r1, [r4, 0x4] + ldrh r1, [r4, 0x6] + ldr r2, _08013464 + ands r2, r1 + ldr r1, _08013468 + ands r2, r1 + movs r3, 0 + ldrsh r1, [r0, r3] + ldr r3, _0801346C + ands r1, r3 + strh r1, [r4, 0x2] + movs r1, 0x2 + ldrsh r0, [r0, r1] + adds r0, 0x1 + ands r0, r5 + lsls r0, 4 + ands r2, r6 + orrs r2, r0 + strh r2, [r4, 0x6] + mov r0, sp + movs r1, 0xFF + movs r2, 0 + movs r3, 0 + bl AddSprite + add sp, 0x8 + pop {r4-r6} + pop {r0} + bx r0 + .align 2, 0 +_08013440: .4byte 0x0000feff +_08013444: .4byte 0xffff0000 +_08013448: .4byte 0x0000fdff +_0801344C: .4byte 0x0000f3ff +_08013450: .4byte 0x0000efff +_08013454: .4byte 0x0000dfff +_08013458: .4byte 0x00003fff +_0801345C: .4byte 0x000003f5 +_08013460: .4byte 0x00000fff +_08013464: .4byte 0x0000fffe +_08013468: .4byte 0x0000fffd +_0801346C: .4byte 0x000001ff + thumb_func_end sub_801332C + + thumb_func_start sub_8013470 +sub_8013470: + push {r4-r6,lr} + sub sp, 0x8 + adds r6, r0, 0 + movs r0, 0 + movs r1, 0 + str r0, [sp] + str r1, [sp, 0x4] + movs r1, 0xC + ldrsh r0, [r6, r1] + cmp r0, 0 + bne _08013488 + b _08013624 +_08013488: + movs r2, 0x1E + ldrsh r0, [r6, r2] + cmp r0, 0 + beq _08013586 + mov r0, sp + ldrh r0, [r0] + ldr r1, _0801362C + ands r1, r0 + ldr r3, _08013630 + ldr r0, [sp] + ands r0, r3 + orrs r0, r1 + str r0, [sp] + mov r1, sp + ldrh r1, [r1] + adds r2, r3, 0 + ands r2, r0 + orrs r2, r1 + str r2, [sp] + mov r0, sp + ldrh r1, [r0] + ldr r0, _08013634 + ands r0, r1 + adds r1, r3, 0 + ands r1, r2 + orrs r1, r0 + str r1, [sp] + mov r0, sp + ldrh r0, [r0] + adds r2, r3, 0 + ands r2, r1 + orrs r2, r0 + str r2, [sp] + mov r0, sp + ldrh r1, [r0] + ldr r4, _08013638 + adds r0, r4, 0 + ands r0, r1 + adds r1, r3, 0 + ands r1, r2 + orrs r1, r0 + str r1, [sp] + mov r0, sp + ldrh r0, [r0] + adds r2, r3, 0 + ands r2, r1 + orrs r2, r0 + str r2, [sp] + mov r0, sp + ldrh r1, [r0] + ldr r0, _0801363C + ands r0, r1 + adds r1, r3, 0 + ands r1, r2 + orrs r1, r0 + str r1, [sp] + mov r0, sp + ldrh r0, [r0] + adds r2, r3, 0 + ands r2, r1 + orrs r2, r0 + str r2, [sp] + mov r0, sp + ldrh r1, [r0] + ldr r0, _08013640 + ands r0, r1 + adds r1, r3, 0 + ands r1, r2 + orrs r1, r0 + str r1, [sp] + mov r0, sp + ldrh r0, [r0] + adds r2, r3, 0 + ands r2, r1 + orrs r2, r0 + str r2, [sp] + mov r0, sp + ldrh r1, [r0] + ldr r0, _08013644 + ands r0, r1 + adds r1, r3, 0 + ands r1, r2 + orrs r1, r0 + str r1, [sp] + mov r0, sp + ldrh r0, [r0] + ands r3, r1 + orrs r3, r0 + str r3, [sp] + mov r3, sp + ldr r2, _08013648 + ldrh r1, [r3, 0x4] + movs r0, 0xFC + lsls r0, 8 + ands r0, r1 + orrs r0, r2 + ands r0, r4 + movs r5, 0xF + movs r1, 0xF0 + lsls r1, 8 + ldr r4, _0801364C + ands r0, r4 + orrs r0, r1 + strh r0, [r3, 0x4] + ldrh r0, [r3, 0x6] + ldr r1, _08013650 + ands r1, r0 + ldr r0, _08013654 + ands r1, r0 + movs r2, 0xC + ldrsh r0, [r6, r2] + ldr r2, _08013658 + ands r0, r2 + strh r0, [r3, 0x2] + movs r2, 0xE + ldrsh r0, [r6, r2] + ands r0, r4 + lsls r0, 4 + ands r1, r5 + orrs r1, r0 + strh r1, [r3, 0x6] + mov r0, sp + movs r1, 0xFF + movs r2, 0 + movs r3, 0 + bl AddSprite +_08013586: + movs r1, 0x20 + ldrsh r0, [r6, r1] + cmp r0, 0 + beq _08013624 + adds r1, r0, 0 + movs r2, 0x1E + ldrsh r0, [r6, r2] + adds r0, 0x1 + cmp r1, r0 + beq _08013624 + mov r0, sp + ldrh r0, [r0] + ldr r1, _0801362C + ands r1, r0 + mov r0, sp + strh r1, [r0] + strh r1, [r0] + ldr r0, _08013634 + ands r0, r1 + mov r1, sp + strh r0, [r1] + strh r0, [r1] + ldr r4, _08013638 + ands r0, r4 + strh r0, [r1] + strh r0, [r1] + ldr r1, _0801363C + ands r1, r0 + mov r0, sp + strh r1, [r0] + strh r1, [r0] + ldr r2, _08013640 + ands r2, r1 + strh r2, [r0] + strh r2, [r0] + ldr r0, _08013644 + ands r0, r2 + mov r1, sp + strh r0, [r1] + strh r0, [r1] + mov r3, sp + ldr r2, _0801365C + ldrh r1, [r3, 0x4] + movs r0, 0xFC + lsls r0, 8 + ands r0, r1 + orrs r0, r2 + ands r0, r4 + movs r5, 0xF + movs r1, 0xF0 + lsls r1, 8 + ldr r4, _0801364C + ands r0, r4 + orrs r0, r1 + strh r0, [r3, 0x4] + ldrh r0, [r3, 0x6] + ldr r1, _08013650 + ands r1, r0 + ldr r0, _08013654 + ands r1, r0 + movs r2, 0xC + ldrsh r0, [r6, r2] + adds r0, 0xA + ldr r2, _08013658 + ands r0, r2 + strh r0, [r3, 0x2] + movs r2, 0xE + ldrsh r0, [r6, r2] + ands r0, r4 + lsls r0, 4 + ands r1, r5 + orrs r1, r0 + strh r1, [r3, 0x6] + mov r0, sp + movs r1, 0xFF + movs r2, 0 + movs r3, 0 + bl AddSprite +_08013624: + add sp, 0x8 + pop {r4-r6} + pop {r0} + bx r0 + .align 2, 0 +_0801362C: .4byte 0x0000feff +_08013630: .4byte 0xffff0000 +_08013634: .4byte 0x0000fdff +_08013638: .4byte 0x0000f3ff +_0801363C: .4byte 0x0000efff +_08013640: .4byte 0x0000dfff +_08013644: .4byte 0x00003fff +_08013648: .4byte 0x000003f2 +_0801364C: .4byte 0x00000fff +_08013650: .4byte 0x0000fffe +_08013654: .4byte 0x0000fffd +_08013658: .4byte 0x000001ff +_0801365C: .4byte 0x000003f3 + thumb_func_end sub_8013470 + + .align 2,0 diff --git a/data/data_80E1F30.s b/data/data_80E1F30.s deleted file mode 100644 index b5aa47826..000000000 --- a/data/data_80E1F30.s +++ /dev/null @@ -1,31 +0,0 @@ - .section .rodata - - .global gUnknown_80E1FA8 -gUnknown_80E1FA8: @ 80E1FA8 - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x03, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - - .global gUnkData_80E1FC0 - gUnkData_80E1FC0: - .byte 0x01, 0x00, 0x0A, 0x00 - - .global gUnknown_80E1FC4 -gUnknown_80E1FC4: @ 80E1FC4 - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x06, 0x00, 0x00, 0x00 - .byte 0x02, 0x00, 0x02, 0x00 - .byte 0x1a, 0x00, 0x0a, 0x00 - .byte 0x0a, 0x00, 0x00, 0x00 - - .4byte gUnkData_80E1FC0 - - .global gUnknown_80E1FDC -gUnknown_80E1FDC: @ 80E1FDC - .string "Password\0" - .align 2,0 - .string "pksdir0\0" - .align 2,0 diff --git a/include/code_801EE10.h b/include/code_801EE10.h new file mode 100644 index 000000000..b6ff7142e --- /dev/null +++ b/include/code_801EE10.h @@ -0,0 +1,23 @@ +#ifndef CODE_801EE10_H +#define CODE_801EE10_H + +struct unkStruct_203B270 +{ + // size 0xBC + u32 unk0; + u8 unk4; + u8 unk5; + u8 unk6; + u8 unk7; + /* 0x8 */ struct PokemonStruct *pokeStruct; + /* 0xC */ u8 isTeamLeader; + /* 0x10 */ struct Move *moves; + u8 fill14[0x1C - 0x14]; + struct MenuInputStruct input; + u32 unk50; + u32 unk54; + struct UnkTextStruct2 unk58[4]; + u8 *unkB8; +}; + +#endif diff --git a/include/constants/dungeon.h b/include/constants/dungeon.h index 7a4c7bd44..a1e7b834e 100644 --- a/include/constants/dungeon.h +++ b/include/constants/dungeon.h @@ -3,6 +3,8 @@ #define NUM_DUNGEON_MAZE (NUM_DUNGEONS - DUNGEON_NORMAL_MAZE_2) +#define NUM_BASIC_DUNGEON_MAZE (DUNGEON_STEEL_MAZE - DUNGEON_NORMAL_MAZE_2 + 1) + enum DungeonID { DUNGEON_TINY_WOODS = 0, diff --git a/include/dungeon_entity.h b/include/dungeon_entity.h index 435304f03..8ac25103e 100644 --- a/include/dungeon_entity.h +++ b/include/dungeon_entity.h @@ -294,7 +294,7 @@ struct Entity /* 0x54 */ u16 spriteGlobalIndex; u8 fill56[0x64 - 0x56]; u32 unk64; - u16 unk68; + s16 unk68; /* 0x6A */ u8 unk6A; /* 0x6A */ u8 unk6B; /* 0x6C */ u8 direction; @@ -346,6 +346,7 @@ enum ClientType { CLIENT_TYPE_NONE = 0, CLIENT_TYPE_CLIENT = 1, // Used for mission clients that need rescuing. + CLIENT_TYPE_PARTNER, CLIENT_TYPE_DONT_MOVE = 4 // Used for Diglett in the Skarmory boss fight. }; diff --git a/include/dungeon_global_data.h b/include/dungeon_global_data.h index a46ceddea..8acca082f 100644 --- a/include/dungeon_global_data.h +++ b/include/dungeon_global_data.h @@ -136,9 +136,11 @@ struct Dungeon u8 fill3A10[0x3A14 - 0x3A12]; /* 0x3A14 */ s16 bossBattleIndex; /* 0x3A18 */ struct Tile tiles[DUNGEON_MAX_SIZE_Y][DUNGEON_MAX_SIZE_X]; - u8 fillE218[0xE23C - 0xE218]; - s16 unkE23C; - s16 unkE23E; + u8 fillE218[0xE220 - 0xE218]; + struct Position unkE220[4]; + u8 unkE230[0xE23C - 0xE230]; + s16 unkE23C; // x coord of some kind + s16 unkE23E; // y coord of some kind u8 fillE240[0xE264 - 0xE240]; /* 0xE264 */ u8 weather; // Uses the weather constants in weather.h. u8 unkE265; // Uses the weather constants in weather.h @@ -155,7 +157,7 @@ struct Dungeon /* 0xE279 */ bool8 nullifyWeather; // Air Lock and Cloud Nine toggle this to disable weather effects u8 fillE27A[0xE8C0 - 0xE27A]; /* 0xE8C0 */ struct Tile* tilePointers[DUNGEON_MAX_SIZE_Y][DUNGEON_MAX_SIZE_X]; - u8 fill104C0[0x104C4 - 0x104C0]; + u8 unk104C0; /* 0x104C4 */ struct RoomData roomData[MAX_ROOM_COUNT]; u8 fill10764[0x10844 - 0x10764]; /* 0x10844 */ s16 naturalJunctionListCounts[MAX_ROOM_COUNT]; @@ -206,7 +208,9 @@ struct Dungeon /* 0x18210 */ bool8 hallucinating; // Displays Substitute and flower sprites when the player has the Cross-Eyed status. u8 fill18211[0x18217 - 0x18211]; u8 unk18217; - u8 fill18218[0x1C578 - 0x18218]; + u8 fill18218[0x1821A - 0x18218]; + u8 unk1821A; + u8 fill1821B[0x1C578 - 0x1821B]; u8 unk1C578; u8 fill1C579[0x1C57E - 0x1C579]; u8 unk1C57E; diff --git a/include/dungeon_util_1.h b/include/dungeon_util_1.h index 4d80e86d3..22c39c81a 100644 --- a/include/dungeon_util_1.h +++ b/include/dungeon_util_1.h @@ -3,6 +3,9 @@ #include "dungeon_entity.h" +struct Entity *xxx_call_GetLeader(void); +struct Entity *GetPartnerEntity(void); +void sub_80854D4(void); struct Entity *GetEntityFromClientType(u8 entityType); void sub_80856C8(struct Entity * pokemon, s32 x, s32 y); void sub_80856E0(struct Entity * pokemon, s32 direction); diff --git a/include/friend_list_menu.h b/include/friend_list_menu.h new file mode 100644 index 000000000..1a9cced79 --- /dev/null +++ b/include/friend_list_menu.h @@ -0,0 +1,9 @@ +#ifndef INCLUDE_FRIEND_LIST_MENU_H +#define INCLUDE_FRIEND_LIST_MENU_H + +bool8 sub_80252F0(s32 param_1); +u32 sub_8025354(void); +u8 sub_802540C(void); +void sub_8025418(void); + +#endif diff --git a/include/input.h b/include/input.h index 083c4ccc5..c66080997 100644 --- a/include/input.h +++ b/include/input.h @@ -48,26 +48,39 @@ struct UnusedInputStruct /* 0x2A..0x2B - padding */ }; -struct UnkInputStruct +struct MenuInputStructSub { - /* 0x0 */ u8 unk0; - /* 0x1 */ u8 unk1; - /* 0x2 */ u8 unk2; - /* 0x3 */ u8 unk3; - /* 0x4 */ u8 unk4; - /* 0x8 */ u32 unk8; - /* 0xC */ u32 unkC; + u8 unk0; + /* 0x1 */ u8 a_button; + /* 0x2 */ u8 b_button; + /* 0x3 */ u8 dpad_right; + /* 0x4 */ u8 dpad_left; + u8 fill5[3]; + u16 unk8; + s16 unkA; +}; + +struct MenuInputStruct +{ + s32 unk0; + /* 0x4 */ u16 unk4; + /* 0x6 */ s16 unk6; + /* 0x8 */ u16 unk8; + /* 0x8 */ u16 unkA; + /* 0xC */ u16 unkC; + /* 0xE */ u16 unkE; /* 0x10 */ u32 unk10; - /* 0x14 */ u32 unk14; - /* 0x18 */ u32 unk18; - /* 0x1C */ u32 unk1C; - /* 0x20 */ u32 unk20; - /* 0x24 */ u32 unk24; - /* 0x28 */ u8 unk28; - /* 0x29 */ u8 a_button; - /* 0x2A */ u8 b_button; - /* 0x2B */ u8 dpad_right; - /* 0x2C */ u8 dpad_left; + /* 0x14 */ s16 unk14; + /* 0x16 */ u16 unk16; + /* 0x18 */ s16 menuIndex; + /* 0x1A */ s16 unk1A; + /* 0x1C */ s16 unk1C; + /* 0x1E */ s16 unk1E; + /* 0x20 */ s16 unk20; + /* 0x22 */ s16 unk22; + /* 0x24 */ u16 unk24; + u16 unk26; + /* 0x28 */ struct MenuInputStructSub unk28; }; diff --git a/include/item.h b/include/item.h index e805ec6da..277827e50 100644 --- a/include/item.h +++ b/include/item.h @@ -129,6 +129,7 @@ s32 FindItemInInventory(u8 id); bool8 IsHMItem(u8 id); bool8 IsEdibleItem(u8 id); u8 xxx_bit_lut_lookup_8091E50(u8 i0, u8 i1); +bool8 IsInvalidItemReward(u8 itemID); void RestoreHeldItem(struct unkStruct_8094924*, struct BulkItem*); void SaveHeldItem(struct unkStruct_8094924*, struct BulkItem*); diff --git a/include/kecleon_items.h b/include/kecleon_items.h index c489b983c..5d5b3cf08 100644 --- a/include/kecleon_items.h +++ b/include/kecleon_items.h @@ -41,17 +41,8 @@ struct unkStruct_203B224 { // size: 0xF4 u32 unk0; - u32 unk4[INVENTORY_SIZE]; - u32 unk54; - u8 fill58[0x6C - 0x58]; - s16 unk6C; - s16 unk6E; - s16 unk70; - s16 unk72; - u16 unk74; - u16 unk76; - u8 fill78[0x88 - 0x78]; + /* 0x54 */ struct MenuInputStruct input; u32 unk88; struct UnkTextStruct2 *unk8C; struct UnkTextStruct2 unk90[4]; diff --git a/include/map.h b/include/map.h index 34061dcb2..9141bd6a7 100644 --- a/include/map.h +++ b/include/map.h @@ -48,14 +48,19 @@ struct Tile struct RoomData { - u8 fill0[0x2 - 0x0]; + u8 unk0; + u8 unk1; // All coordinates are inclusive. // These are not aligned properly to use the Position struct. /* 0x2 */ s16 bottomRightCornerX; /* 0x4 */ s16 bottomRightCornerY; /* 0x6 */ s16 topLeftCornerX; /* 0x8 */ s16 topLeftCornerY; - u8 fillA[0x1A - 0xA]; + u8 fillA[0xC - 0xA]; + u32 unkC; // bottom right x + u32 unk10; // bottom right y + u32 unk14; // top left x + u32 unk18; // top left y }; #endif diff --git a/include/menu.h b/include/menu.h index 4c8a93ba7..a678c2c08 100644 --- a/include/menu.h +++ b/include/menu.h @@ -1,6 +1,8 @@ #ifndef GUARD_MENU_H #define GUARD_MENU_H +#include "input.h" + struct MenuItem { const u8 *text; @@ -15,13 +17,7 @@ struct MenuStruct const u32 *menuTextColorArray; u16 *unkC; /* 0x10 */ s32 index; - /* 0x14 */ u32 unk14; - u8 fill18[0x2C - 0x18]; - /* 0x2C */ s16 menuIndex; - s16 unk2E; - u8 fill30[0x38 - 0x30]; - u16 unk38; - u8 fill3A[0x48 - 0x3A]; + /* 0x14 */ struct MenuInputStruct input; /* 0x48 */ s32 menuAction; bool8 unk4C; bool8 unk4D; diff --git a/include/menu_input.h b/include/menu_input.h index e0c72c9bd..ca1030025 100644 --- a/include/menu_input.h +++ b/include/menu_input.h @@ -1,7 +1,7 @@ #include "menu.h" -void sub_8012BC4(u32 x, u32 y, s32 n, s32 len, u32 param_5, u32 param_6); -void sub_8012C60(u32 x, u32 y, u32 param_3, u32 param_4, u32 param_5); +void sub_8012BC4(u32 x, u32 y, s32 n, s32 len, u32 color, u32 param_6); +void sub_8012C60(u32 x, u32 y, u32 param_3, u32 color, u32 param_5); void sub_8012CAC(struct UnkTextStruct2 *param_1, const struct MenuItem *param_2); void sub_8012D08(struct UnkTextStruct2 *param_1, s32 param_2); void sub_8012D34(struct UnkTextStruct2 *param_1, s32 param_2); diff --git a/include/personality_test.h b/include/personality_test.h index 75c35c3e0..2b90ff5b3 100644 --- a/include/personality_test.h +++ b/include/personality_test.h @@ -49,13 +49,7 @@ struct PersonalityStruct_203B404 /* 0x0 */ s16 StarterID; /* 0x2 */ s16 PartnerArray[NUM_PARTNERS]; u8 unk16; - /* 0x18 */ struct UnkInputStruct *unk18; // something menu related (seems to be some struct) - u8 padding[0x30 - 0x1C]; - /* 0x30 */ s16 currPartnerSelection; - s16 unk32; - u8 padding2[0x3A - 0x34]; - /* 0x3A */ s16 numPartners; - u8 padding3[0x4C - 0x3C]; + /* 0x18 */ struct MenuInputStruct input; u32 unk4C; /* 0x50 */ struct UnkTextStruct2 *unk50; /* 0x54 */ struct UnkTextStruct2 unk54[4]; diff --git a/include/pokemon.h b/include/pokemon.h index e2e19709f..8fcbc6189 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -209,7 +209,7 @@ bool8 CanMove(s16 index); u8 GetChanceAsleep(s16 index); u32 GetWeight(s16 index); u32 GetSize(s16 index); -u8 GetFriendArea(s16 index); +u8 GetFriendArea(s32 index); u16 GetBaseHP(s16 index); bool8 IsToolboxEnabled(s16 index); u8 GetUnk12(s16 index); @@ -218,7 +218,7 @@ u16 GetBaseOffensiveStat(s16 index, u32 r1); u16 GetBaseDefensiveStat(s16 index, u32 r1); u8 GetPokemonType(s32 index, u32 typeIndex); u8 GetPokemonAbility(s16 index, u32 abilityIndex); -s16 GetDexInternalNo(s16 index, u32 r1); +s16 GetDexInternalNo(s32 index, u32 r1); s16 GetRecruitRate(s16 index); s16 GetAlphabetParentNo(s16 index, s32 r1); s16 GetInternalNo(s16 index); diff --git a/include/pokemon_3.h b/include/pokemon_3.h index 6d579a8e5..87f7cc7ec 100644 --- a/include/pokemon_3.h +++ b/include/pokemon_3.h @@ -1,6 +1,7 @@ #ifndef GUARD_POKEMON_3_H #define GUARD_POKEMON_3_H +s16 GetBaseSpeciesNoUnown(s16 index); bool8 TacticsTargetLeader(u8 tactic); bool8 HasIQForSkill(s32 pokeIQ, u8 IQSkillIndex); void SetIQSkill(u8 *param_1, u32 skillIndex); diff --git a/include/text.h b/include/text.h index 13413d659..a04486e70 100644 --- a/include/text.h +++ b/include/text.h @@ -2,9 +2,10 @@ #define GUARD_TEXT_H struct UnkTextStruct1 { - u8 fill00[4]; - u16 unk04; - u8 fill06[2]; + s16 unk0; + s16 unk2; + s16 unk04; + s16 unk6; u16 unk08; u16 fillA; u32 unkC; diff --git a/include/wonder_mail_2_1.h b/include/wonder_mail_2_1.h index 810e8d2ea..6914f1ded 100644 --- a/include/wonder_mail_2_1.h +++ b/include/wonder_mail_2_1.h @@ -2,16 +2,7 @@ struct unkStruct_203B2E8 { // size: 0xA8 u8 pelipperBoardSlots[MAX_ACCEPTED_JOBS]; - u32 unk8; - u8 fillC[0x20 - 0xC]; - s16 unk20; - s16 unk22; - s16 unk24; - s16 unk26; - u16 unk28; - u16 acceptedJobs; - u16 unk2C; - u8 fill2E[0x3C - 0x2E]; + struct MenuInputStruct input; u32 unk3C; struct UnkTextStruct2 *unk40; struct UnkTextStruct2 unk44[4]; diff --git a/include/wonder_mail_3.h b/include/wonder_mail_3.h index 47689a8dd..f31f88cc7 100644 --- a/include/wonder_mail_3.h +++ b/include/wonder_mail_3.h @@ -1,13 +1,7 @@ #include "menu.h" struct unkStruct_203B2F4 { - u8 fill0[0x18]; - u8 unk18; - u8 unk19; - s16 unk1A; - s16 unk1C; - s16 unk1E; - u8 fill20[0x34 - 0x20]; + struct MenuInputStruct input; u32 unk34; struct UnkTextStruct2 *unk38; struct UnkTextStruct2 unk3C[4]; diff --git a/ld_script.txt b/ld_script.txt index 897757750..2a168de35 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -94,6 +94,8 @@ SECTIONS { src/code_8012A18.o(.text); src/more_input.o(.text); src/menu_input.o(.text); + asm/menu_input.o(.text); + src/menu_input_1.o(.text); asm/code_80130A8.o(.text); src/code_8012A18_1.o(.text); src/felicity_bank.o(.text); @@ -107,7 +109,6 @@ SECTIONS { src/kecleon_items_1.o(.text); src/code_801AFA4.o(.text); src/code_801B3C0.o(.text); - asm/code_801B3C0.o(.text); src/code_801C620.o(.text); asm/code_801C620.o(.text); src/code_801D760.o(.text); @@ -150,7 +151,7 @@ SECTIONS { src/wonder_mail_5.o(.text); src/wonder_mail_6.o(.text); src/post_office_guide.o(.text); - asm/code_8031D70.o(.text); + src/code_8031D70.o(.text); src/adventure_log.o(.text); src/friend_rescue.o(.text); asm/friend_rescue.o(.text); @@ -203,6 +204,7 @@ SECTIONS { src/dungeon_ai_item_weight.o(.text); src/dungeon_map_access.o(.text); asm/code_80495E4.o(.text); + src/dungeon_map_access_1.o(.text); src/tile_types.o(.text); asm/code_804AFAC.o(.text); src/code_80521D0.o(.text); @@ -307,8 +309,6 @@ SECTIONS { src/code_80958E8_1.o(.text); asm/code_8096AF8.o(.text); src/code_80972F4.o(.text); - asm/code_8097318.o(.text); - src/code_809747C.o(.text); src/code_8097670.o(.text); asm/code_8097670.o(.text); src/code_8097DD0.o(.text); @@ -434,7 +434,7 @@ SECTIONS { src/wonder_mail_5.o(.rodata); src/wonder_mail_6.o(.rodata); src/post_office_guide.o(.rodata); - data/data_80E1F30.o(.rodata); + src/code_8031D70.o(.rodata); src/adventure_log.o(.rodata); data/data_80E2068.o(.rodata); src/main_menu.o(.rodata); diff --git a/src/adventure_log.c b/src/adventure_log.c index 4aad16264..95f50c71e 100644 --- a/src/adventure_log.c +++ b/src/adventure_log.c @@ -8,12 +8,7 @@ struct AdventureLog { // size: 0xA0 - u8 fill0[0x1A]; - /* 0x1A */ s16 unk1A; - /* 0x1C */ s16 unk1C; - /* 0x1E */ s16 currPage; - s16 unk20; - u8 fill22[0x34 - 0x22]; + struct MenuInputStruct input; u32 unk34; struct UnkTextStruct2 *unk38; struct UnkTextStruct2 unk3C[4]; @@ -47,10 +42,10 @@ const u8 fill_adven[] = "pksdir0"; void sub_8032084(); void DisplayAdventureLog(); extern void sub_8013818(void *, u32, u32, u32); -extern bool8 sub_8013938(void *); -extern void sub_8013660(void *); +extern bool8 sub_8013938(struct MenuInputStruct *); +extern void sub_8013660(struct MenuInputStruct *); extern void PlayMenuSoundEffect(u32); -extern u32 GetKeyPress(void *); +extern u32 GetKeyPress(struct MenuInputStruct *); extern bool8 sub_8097710(u8); extern s16 sub_80978B8(); @@ -88,11 +83,11 @@ u32 CreateAdventureLogScreen(u32 param_1) u32 HandleAdventureLogInput(u8 param_1) { if (param_1 == 0) { - sub_8013660(gAdventureLog); + sub_8013660(&gAdventureLog->input); return 0; } else { - switch(GetKeyPress(gAdventureLog)) + switch(GetKeyPress(&gAdventureLog->input)) { case INPUT_B_BUTTON: PlayMenuSoundEffect(1); @@ -101,7 +96,7 @@ u32 HandleAdventureLogInput(u8 param_1) PlayMenuSoundEffect(0); return 3; default: - if (sub_8013938(gAdventureLog)) { + if (sub_8013938(&gAdventureLog->input)) { sub_8032084(); DisplayAdventureLog(); return 1; @@ -131,11 +126,11 @@ void sub_8032084(void) u32 sVar2; gAdventureLog->unk9C[0] = gAdventureLog->unk20; - gAdventureLog->unk9C[1]= gAdventureLog->currPage; + gAdventureLog->unk9C[1]= gAdventureLog->unk0.unk1E; gAdventureLog->unk9C[2]= 0xb; gAdventureLog->unk9C[3]= 0; // So a sign extend.. - sVar2 = sub_80095E4(gAdventureLog->unk1A,0xc) + 2 << 0x10; + sVar2 = sub_80095E4(gAdventureLog->unk0.unk1A,0xc) + 2 << 0x10; // TODO needs asr r3, r0, r16 // and lsr r0, r0, r16 gAdventureLog->unk3C[gAdventureLog->unk34].unkE = sVar2; @@ -215,7 +210,7 @@ void DisplayAdventureLog(void) sub_8008C54(gAdventureLog->unk34); sub_80073B8(gAdventureLog->unk34); - r4 = gAdventureLog->currPage * 8; + r4 = gAdventureLog->input.unk1E * 8; r6 = r4; r6 += 10; // Draw Header @@ -223,11 +218,11 @@ void DisplayAdventureLog(void) r4 += 4; r6 = r4 + gAdventureLog->unk9C[2] * 8; // Draw Page # - sub_8012BC4(r6, 0, gAdventureLog->currPage + 1, 1, 7, gAdventureLog->unk34); + sub_8012BC4(r6, 0, gAdventureLog->input.unk1E + 1, 1, 7, gAdventureLog->unk34); - for(counter = 0; counter < gAdventureLog->unk1A; counter++) + for(counter = 0; counter < gAdventureLog->input.unk1A; counter++) { - temp = gAdventureLog->currPage * gAdventureLog->unk1C + counter; + temp = gAdventureLog->input.unk1E * gAdventureLog->input.unk1C + counter; if(sub_8097710(temp)){ switch(temp) { case 0xc: diff --git a/src/code_80001DC.c b/src/code_80001DC.c index da97e8e06..5b4068230 100644 --- a/src/code_80001DC.c +++ b/src/code_80001DC.c @@ -1,4 +1,3 @@ -#include "gba/defines.h" #include "global.h" IWRAM_DATA u32 gUnknown_3004000 = {0}; diff --git a/src/code_8009804.c b/src/code_8009804.c index 845192ad3..d06bf6949 100644 --- a/src/code_8009804.c +++ b/src/code_8009804.c @@ -3,10 +3,7 @@ extern u8 gUnknown_202D238[4]; extern s32 gUnknown_202D23C; -extern u16 gUnknown_202B038[2][32][32]; -extern u8 gUnknown_202B838[0x800]; -extern u8 gUnknown_202C038[0x800]; -extern u8 gUnknown_202C838[0x720]; +extern u16 gUnknown_202B038[4][32][32]; struct unkStruct_202D240 { @@ -99,41 +96,34 @@ void sub_80098F8(u32 r0) void sub_8009908(void) { s32 index; - u32 iVar3; - index = 0; - if (index < gUnknown_202D23C) { - iVar3 = 0; - do { - CpuCopy(gUnknown_202D240[index].unk0,gUnknown_202D240[index].unk4,gUnknown_202D240[index].size); - iVar3 += sizeof(struct unkStruct_202D240); - index++; - } while (index < gUnknown_202D23C); + for(index = 0; index < gUnknown_202D23C; index++) + { + CpuCopy(gUnknown_202D240[index].unk0, gUnknown_202D240[index].unk4, gUnknown_202D240[index].size); } gUnknown_202D23C = 0; if (gUnknown_202D238[0] != 0) { gUnknown_202D238[0] = 0; - CpuCopy(BG_SCREEN_ADDR(12),gUnknown_202B038, BG_SCREEN_SIZE); + CpuCopy(BG_SCREEN_ADDR(12), gUnknown_202B038[0], BG_SCREEN_SIZE); } if (gUnknown_202D238[1] != 0) { gUnknown_202D238[1] = 0; - CpuCopy(BG_SCREEN_ADDR(13),gUnknown_202B838, BG_SCREEN_SIZE); + CpuCopy(BG_SCREEN_ADDR(13), gUnknown_202B038[1], BG_SCREEN_SIZE); } if (gUnknown_202D238[2] != 0) { gUnknown_202D238[2] = 0; - CpuCopy(BG_SCREEN_ADDR(14),gUnknown_202C038, BG_SCREEN_SIZE); + CpuCopy(BG_SCREEN_ADDR(14), gUnknown_202B038[2], BG_SCREEN_SIZE); } if (gUnknown_202D238[3] != 0) { gUnknown_202D238[3] = 0; - CpuCopy(BG_SCREEN_ADDR(15),gUnknown_202C838, BG_SCREEN_SIZE); + CpuCopy(BG_SCREEN_ADDR(15), gUnknown_202B038[3], BG_SCREEN_SIZE); } } void sub_80099C0(void) { - CpuCopy(BG_SCREEN_ADDR(12),gUnknown_202B038, BG_SCREEN_SIZE); - // TODO shouldn't this be 202B838? It didn't match... might need raw address - CpuCopy(BG_SCREEN_ADDR(13),gUnknown_202B038 + 0x1, BG_SCREEN_SIZE); + CpuCopy(BG_SCREEN_ADDR(12), gUnknown_202B038[0], BG_SCREEN_SIZE); + CpuCopy(BG_SCREEN_ADDR(13), gUnknown_202B038[1], BG_SCREEN_SIZE); } void sub_80099F0(u32 r0) diff --git a/src/code_801B3C0.c b/src/code_801B3C0.c index adbe68178..348219efd 100644 --- a/src/code_801B3C0.c +++ b/src/code_801B3C0.c @@ -66,6 +66,20 @@ extern u8 gUnknown_80DBB08[]; extern u8 gUnknown_80DBB38[]; extern u8 gKangaskhanTrashToolboxItem[]; extern u8 gKangaskhanTrashReceivedItem[]; +extern u8 gKangaskhanStorage[]; +extern u8 gKangaskhanTrash[]; +extern u8 *gUnknown_80D4970[]; +extern u8 gUnknown_202DEA8[]; +extern u8 *gUnknown_80D4920[]; +extern u8 *gUnknown_80D4928[]; + +extern s32 sub_80144A4(s32 *); +extern u32 sub_801A6E8(u32); +extern u32 sub_801A8AC(); +extern void sub_8099690(u32); +extern void sub_801A928(void); + +extern bool8 sub_801ADA0(s32); extern struct UnkTextStruct2 gUnknown_80DBA58; extern struct UnkTextStruct2 gUnknown_80DBA88; extern struct UnkTextStruct2 gUnknown_80DBA70; @@ -508,3 +522,206 @@ void sub_801BB20(void) gUnknown_203B234->unkCC[loopMax].text = NULL; gUnknown_203B234->unkCC[loopMax].menuAction = -1; } + +void sub_801BB5C(void) +{ + int index; + s32 loopMax = 0; + + gUnknown_203B234->unkCC[loopMax].text = gKangaskhanStorage; + gUnknown_203B234->unkCC[loopMax].menuAction = 6; + if (!sub_801ADA0(gUnknown_203B234->unk24)) { + gUnknown_203B234->unkCC[loopMax].menuAction = -1; + } + + loopMax++; + gUnknown_203B234->unkCC[loopMax].text = gKangaskhanTrash; + gUnknown_203B234->unkCC[loopMax].menuAction = 7; + + loopMax++; + gUnknown_203B234->unkCC[loopMax].text = *gUnknown_80D4970; + gUnknown_203B234->unkCC[loopMax].menuAction = 8; + + loopMax++; + gUnknown_203B234->unkCC[loopMax].text = 0; + gUnknown_203B234->unkCC[loopMax].menuAction = 1; + + + for(index = 0; index < loopMax; index++) + { + if(gUnknown_203B234->unkCC[index].menuAction != -1) + if(gUnknown_203B234->unkCC[index].menuAction == gUnknown_203B234->menuAction) + return; + } + + for(index = 0; index < loopMax; index++) + { + if(gUnknown_203B234->unkCC[index].menuAction != -1) + { + gUnknown_203B234->menuAction = gUnknown_203B234->unkCC[index].menuAction; + break; + } + } +} + +void sub_801BC24(void) +{ + s32 loopMax; + loopMax = 0; + gUnknown_203B234->unkCC[loopMax].text = *gUnknown_80D4920; + gUnknown_203B234->unkCC[loopMax].menuAction = 2; + loopMax += 1; + gUnknown_203B234->unkCC[loopMax].text = *gUnknown_80D4928; + gUnknown_203B234->unkCC[loopMax].menuAction = 3; + loopMax += 1; + gUnknown_203B234->unkCC[loopMax].text = NULL; + gUnknown_203B234->unkCC[loopMax].menuAction = 1; +} + +void sub_801BC64(void) +{ + s32 temp; + if(sub_80144A4(&temp)== 0) + { + switch(temp) + { + case 4: + sub_801B748(0x8); + break; + case 5: + sub_801B748(0x7); + break; + } + } +} + +void sub_801BC94(void) +{ + s32 temp; + if(sub_80144A4(&temp) == 0) + { + switch(temp) + { + case 2: + sub_801B748(0xD); + break; + case 1: + case 3: + sub_801B748(0x6); + break; + } + } +} + +void sub_801BCCC(void) +{ + switch(sub_801A6E8(1)) + { + case 0: + case 1: + break; + case 3: + gUnknown_203B234->unk24 = sub_801A8AC(); + gUnknown_203B234->unk20 = gTeamInventory_203B460->teamItems[gUnknown_203B234->unk24]; + sub_8090E14(gUnknown_202DEA8, &gUnknown_203B234->unk20, &gUnknown_203B234->unk14); + sub_801B748(0xA); + break; + case 4: + gUnknown_203B234->unk24 = sub_801A8AC(); + gUnknown_203B234->unk20 = gTeamInventory_203B460->teamItems[gUnknown_203B234->unk24]; + sub_8090E14(gUnknown_202DEA8, &gUnknown_203B234->unk20, &gUnknown_203B234->unk14); + sub_8099690(0); + sub_801B748(0xB); + break; + case 2: + sub_801A928(); + sub_801B748(6); + break; + } +} + +void sub_801BD80(void) +{ + s32 menuAction; + + menuAction = 0; + sub_801A6E8(0); + if (!sub_8012FD8(&gUnknown_203B234->unk28)) { + sub_8013114(&gUnknown_203B234->unk28,&menuAction); + if (menuAction != 1) gUnknown_203B234->menuAction = menuAction; + } + switch(menuAction) + { + case 6: + MoveToStorage(&gUnknown_203B234->unk20); + ShiftItemsDownFrom(gUnknown_203B234->unk24); + AddItemToInventory(&gUnknown_203B234->unk10); + FillInventoryGaps(); + PlaySound(0xcb); + sub_8099690(0); + sub_801A928(); + sub_801B748(0xE); + break; + case 7: + sub_801B748(0xC); + break; + case 8: + sub_8099690(0); + sub_801B748(0xB); + break; + case 1: + sub_801B748(0x9); + break; + } +} + +void sub_801BE30(void) +{ + s32 menuAction; + + menuAction = 0; + sub_801A6E8(0); + sub_8012FD8(&gUnknown_203B234->unk28); + if (!sub_8012FD8(&gUnknown_203B234->unk78)) { + sub_8013114(&gUnknown_203B234->unk78,&menuAction); + } + switch(menuAction) + { + case 1: + case 3: + sub_801B748(9); + break; + case 2: + ShiftItemsDownFrom(gUnknown_203B234->unk24); + AddItemToInventory(&gUnknown_203B234->unk10); + FillInventoryGaps(); + PlaySound(0xcb); + sub_801A928(); + sub_801B748(0xf); + break; + } +} + +void sub_801BEAC(void) +{ + switch(sub_801B410()) + { + case 2: + case 3: + sub_801B450(); + sub_801B748(9); + case 0: + case 1: + break; + } +} + +void sub_801BEC8(void) +{ + s32 temp; + if(sub_80144A4(&temp) == 0) + { + sub_801B748(gUnknown_203B234->fallbackState); + } +} + diff --git a/src/code_801C620.c b/src/code_801C620.c index 0af5935df..517f24954 100644 --- a/src/code_801C620.c +++ b/src/code_801C620.c @@ -11,27 +11,6 @@ #include "subStruct_203B240.h" #include "menu_input.h" -struct unkStruct_203B234 -{ - // size: 0x154 - u32 unk0; - u32 state; - u32 fallbackState; - u8 unkC; - struct Item unk10; - struct unkStruct_8090F58 unk14; - struct Item unk20; - u32 unk24; - struct MenuStruct unk28; - struct MenuStruct unk78; - u32 menuAction; - struct MenuItem unkCC[5]; - struct UnkTextStruct2 unkF4[4]; -}; - -extern struct unkStruct_203B234 *gUnknown_203B234; - - struct unkStruct_203B238 { // size: 0x124 @@ -55,17 +34,7 @@ struct unkStruct_203B23C /* 0x4 */ struct PokemonStruct *pokeStruct; /* 0x8 */ u8 iqSkills[NUM_IQ_SKILLS]; /* 0x20 */ s32 numIQSkills; - /* 0x24 */ u32 unk24; - u8 fill28[0x3C - 0x28]; - s16 unk3C; - s16 unk3E; - s16 unk40; - s16 unk42; - s16 unk44; - s16 unk46; - u8 fill48[0x52 - 0x48]; - u8 unk52; - u8 fill52[0x58 - 0x53]; + /* 0x24 */ struct MenuInputStruct input; u32 unk58; /* 0x5C */ struct UnkTextStruct2 *unk5C; /* 0x60 */ struct UnkTextStruct2 unk60[4]; @@ -98,15 +67,7 @@ struct unkStruct_203B244 u32 unk0; u8 itemIDs[NUMBER_OF_ITEM_IDS]; u32 unkF4[NUMBER_OF_ITEM_IDS]; - u32 unk4B4; - u8 fill4B8[0x4CC - 0x4B8]; - s16 unk4CC; - s16 unk4CE; - s16 unk4D0; - s16 unk4D2; - s16 unk4D4; - s16 itemCount; - u8 fill4D8[0x4E8 - 0x4D8]; + struct MenuInputStruct input; u32 unk4E8; struct UnkTextStruct2 * unk4EC; struct UnkTextStruct2 unk4F0[4]; @@ -115,7 +76,7 @@ struct unkStruct_203B244 struct unk_203B250 { - struct PokemonStruct *unk0; + struct PokemonStruct *pokeStruct; s16 index; /* 0x6 */ u8 currFriendAreaLocation; // 0 when not in a friend area u8 unk7; @@ -182,9 +143,9 @@ extern u8 *gUnknown_80D4970[]; void sub_8007B7C(s32, s32, s32, s32, s32); extern bool8 sub_801CF14(s32); -extern void sub_8013818(u32 *, u32, u32, u32); +extern void sub_8013818(struct MenuInputStruct *, u32, u32, u32); extern u32 sub_801CE58(void); -extern void sub_8013984(void *); +extern void sub_8013984(struct MenuInputStruct *); extern void sub_801CC38(void); extern void sub_801CCD8(void); extern void sub_801CF94(void); @@ -204,14 +165,14 @@ extern void sub_8013C68(u32 *); extern void xxx_call_draw_string(u32, u32, const u8 *, u32, u32); extern char * GetIQSkillName(u8 r0); extern void xxx_format_and_draw(u32, u32, const u8 *, u32, u32); -extern s32 sub_8013800(u32 *, s32); +extern s32 sub_8013800(struct MenuInputStruct *, s32); extern u32 sub_80095E4(s16, u32); extern void sub_801C440(void); extern void sub_801C4C8(void); -extern void AddMenuCursorSprite(u32 *); -extern u8 sub_80138B8(u32 *, u32); -extern void sub_8013660(u32 *); -extern s32 GetKeyPress(u32 *); +extern void AddMenuCursorSprite(struct MenuInputStruct *); +extern u8 sub_80138B8(struct MenuInputStruct *, u32); +extern void sub_8013660(struct MenuInputStruct *); +extern s32 GetKeyPress(struct MenuInputStruct *); extern bool8 HasNoAvailIQSkills(s16 species); extern u32 sub_801C674(void); extern void sub_801C6B4(void); @@ -239,188 +200,12 @@ void sub_801C118(); void sub_801C1A0(); void sub_801C228(); -void sub_801B748(u32); - - -extern s32 sub_80144A4(s32 *); -extern u32 sub_801B410(void); -extern void sub_801B450(void); -extern u32 sub_801A6E8(u32); -extern void sub_801A928(void); -extern void sub_8099690(u32); -extern u32 sub_801A8AC(); extern u8 sub_801CB24(); extern u32 sub_801CFE0(u8); extern s32 sub_801CFB8(void); extern void sub_801D220(); extern void sub_801D3A8(); -extern u8 *gUnknown_80D4920[]; -extern u8 *gUnknown_80D4928[]; - -void sub_801BC24(void) -{ - struct unkStruct_203B234 *puVar1; - u8 *nullText; - u32 menuAction; - - puVar1 = gUnknown_203B234; - nullText = NULL; - puVar1->unkCC[0].text = *gUnknown_80D4920; - gUnknown_203B234->unkCC[0].menuAction = 2; - menuAction = 1; - gUnknown_203B234->unkCC[1].text = *gUnknown_80D4928; - gUnknown_203B234->unkCC[1].menuAction = 3; - gUnknown_203B234->unkCC[2].text = nullText; - gUnknown_203B234->unkCC[2].menuAction = menuAction; -} - -void sub_801BC64(void) -{ - s32 temp; - if(sub_80144A4(&temp)== 0) - { - switch(temp) - { - case 4: - sub_801B748(0x8); - break; - case 5: - sub_801B748(0x7); - break; - } - } -} - -void sub_801BC94(void) -{ - s32 temp; - if(sub_80144A4(&temp) == 0) - { - switch(temp) - { - case 2: - sub_801B748(0xD); - break; - case 1: - case 3: - sub_801B748(0x6); - break; - } - } -} - -void sub_801BCCC(void) -{ - switch(sub_801A6E8(1)) - { - case 0: - case 1: - break; - case 3: - gUnknown_203B234->unk24 = sub_801A8AC(); - gUnknown_203B234->unk20 = gTeamInventory_203B460->teamItems[gUnknown_203B234->unk24]; - sub_8090E14(gUnknown_202DEA8, &gUnknown_203B234->unk20, &gUnknown_203B234->unk14); - sub_801B748(0xA); - break; - case 4: - gUnknown_203B234->unk24 = sub_801A8AC(); - gUnknown_203B234->unk20 = gTeamInventory_203B460->teamItems[gUnknown_203B234->unk24]; - sub_8090E14(gUnknown_202DEA8, &gUnknown_203B234->unk20, &gUnknown_203B234->unk14); - sub_8099690(0); - sub_801B748(0xB); - break; - case 2: - sub_801A928(); - sub_801B748(6); - break; - } -} - -void sub_801BD80(void) -{ - s32 menuAction; - - menuAction = 0; - sub_801A6E8(0); - if (sub_8012FD8(&gUnknown_203B234->unk28) == '\0') { - sub_8013114(&gUnknown_203B234->unk28,&menuAction); - if (menuAction != 1) gUnknown_203B234->menuAction = menuAction; - } - switch(menuAction) - { - case 6: - MoveToStorage(&gUnknown_203B234->unk20); - ShiftItemsDownFrom(gUnknown_203B234->unk24); - AddItemToInventory(&gUnknown_203B234->unk10); - FillInventoryGaps(); - PlaySound(0xcb); - sub_8099690(0); - sub_801A928(); - sub_801B748(0xE); - break; - case 7: - sub_801B748(0xC); - break; - case 8: - sub_8099690(0); - sub_801B748(0xB); - break; - case 1: - sub_801B748(0x9); - break; - } -} - -void sub_801BE30(void) -{ - s32 menuAction; - - menuAction = 0; - sub_801A6E8(0); - sub_8012FD8(&gUnknown_203B234->unk28); - if (sub_8012FD8(&gUnknown_203B234->unk78) == '\0') { - sub_8013114(&gUnknown_203B234->unk78,&menuAction); - } - switch(menuAction) - { - case 1: - case 3: - sub_801B748(9); - break; - case 2: - ShiftItemsDownFrom(gUnknown_203B234->unk24); - AddItemToInventory(&gUnknown_203B234->unk10); - FillInventoryGaps(); - PlaySound(0xcb); - sub_801A928(); - sub_801B748(0xf); - break; - } -} - -void sub_801BEAC(void) -{ - switch(sub_801B410()) - { - case 2: - case 3: - sub_801B450(); - sub_801B748(9); - case 0: - case 1: - break; - } -} - -void sub_801BEC8(void) -{ - s32 temp; - if(sub_80144A4(&temp) == 0) - { - sub_801B748(gUnknown_203B234->fallbackState); - } -} bool8 sub_801BEEC(s16 species) { @@ -638,7 +423,7 @@ bool8 sub_801C244(s16 species, u32 index, u32 param_3) sub_8012D08(gUnknown_203B23C->unk5C,param_3); ResetUnusedInputStruct(); sub_800641C(gUnknown_203B23C->unk60,1,1); - sub_8013818(&gUnknown_203B23C->unk24,gUnknown_203B23C->numIQSkills,param_3,index); + sub_8013818(&gUnknown_203B23C->input,gUnknown_203B23C->numIQSkills,param_3,index); sub_801C440(); sub_801C4C8(); return TRUE; @@ -649,10 +434,10 @@ u32 sub_801C308(u8 r0) { if(r0 == 0) { - sub_8013660(&gUnknown_203B23C->unk24); + sub_8013660(&gUnknown_203B23C->input); return 0; } - switch(GetKeyPress(&gUnknown_203B23C->unk24)) + switch(GetKeyPress(&gUnknown_203B23C->input)) { case 2: PlayMenuSoundEffect(1); @@ -664,7 +449,7 @@ u32 sub_801C308(u8 r0) PlayMenuSoundEffect(4); return 4; default: - if(sub_80138B8(&gUnknown_203B23C->unk24, 1) != 0) + if(sub_80138B8(&gUnknown_203B23C->input, 1) != 0) { sub_801C440(); sub_801C4C8(); @@ -677,19 +462,19 @@ u32 sub_801C308(u8 r0) s32 sub_801C390(void) { - return (gUnknown_203B23C->unk42 * gUnknown_203B23C->unk40) + gUnknown_203B23C->unk3C; + return (gUnknown_203B23C->input.unk1E * gUnknown_203B23C->input.unk1C) + gUnknown_203B23C->input.menuIndex; } void sub_801C3B0(u8 r0) { ResetUnusedInputStruct(); sub_800641C(gUnknown_203B23C->unk60, 0, 0); - gUnknown_203B23C->unk46 = gUnknown_203B23C->numIQSkills; - sub_8013984(&gUnknown_203B23C->unk24); + gUnknown_203B23C->input.unk22 = gUnknown_203B23C->numIQSkills; + sub_8013984(&gUnknown_203B23C->input); sub_801C440(); sub_801C4C8(); if(r0) - AddMenuCursorSprite(&gUnknown_203B23C->unk24); + AddMenuCursorSprite(&gUnknown_203B23C->input); } void sub_801C3F8(void) @@ -710,13 +495,13 @@ void sub_801C440(void) { u16 sVar2; - gUnknown_203B23C->unkC0 = gUnknown_203B23C->unk44; - gUnknown_203B23C->unkC1 = gUnknown_203B23C->unk42; + gUnknown_203B23C->unkC0 = gUnknown_203B23C->unk24.unk20; + gUnknown_203B23C->unkC1 = gUnknown_203B23C->unk24.unk1E; gUnknown_203B23C->unkC2 = 0xA; gUnknown_203B23C->unkC3 = 0; ResetUnusedInputStruct(); sub_800641C(gUnknown_203B23C->unk60, 1, 1); - sVar2 = sub_80095E4(gUnknown_203B23C->unk3E, 0xc) + 2; + sVar2 = sub_80095E4(gUnknown_203B23C->unk24.unk1A, 0xc) + 2; gUnknown_203B23C->unk60[gUnknown_203B23C->unk58].unkE = sVar2; gUnknown_203B23C->unk60[gUnknown_203B23C->unk58].unk10 = sVar2; ResetUnusedInputStruct(); @@ -804,18 +589,18 @@ void sub_801C4C8(void) sub_8008C54(gUnknown_203B23C->unk58); sub_80073B8(gUnknown_203B23C->unk58); - x = gUnknown_203B23C->unk42 * 8; + x = gUnknown_203B23C->input.unk1E * 8; x2 = x; x2 += 10; xxx_call_draw_string(x2,0,gUnknown_80DBE08,gUnknown_203B23C->unk58,0); x += 4; x2 = x + gUnknown_203B23C->unkC2 * 8; - sub_8012BC4(x2,0,gUnknown_203B23C->unk42 + 1,1,7, + sub_8012BC4(x2,0,gUnknown_203B23C->input.unk1E + 1,1,7, gUnknown_203B23C->unk58); - for (counter = 0; counter < gUnknown_203B23C->unk3E; counter++) { + for (counter = 0; counter < gUnknown_203B23C->input.unk1A; counter++) { skillIndex = gUnknown_203B23C->iqSkills - [gUnknown_203B23C->unk42 * gUnknown_203B23C->unk40 + counter]; - y = sub_8013800(&gUnknown_203B23C->unk24,counter); + [gUnknown_203B23C->input.unk1E * gUnknown_203B23C->input.unk1C + counter]; + y = sub_8013800(&gUnknown_203B23C->input,counter); strncpy(gUnknown_202DEA8,GetIQSkillName(skillIndex),0x50); if (IsIQSkillSet((u8 *)&gUnknown_203B23C->pokeStruct->IQSkills,1 << skillIndex)) { strcpy(gUnknown_202DEA8 - 0x50,gUnknown_80DBE14); @@ -1002,11 +787,11 @@ bool8 sub_801C8C4(s32 param_1, s32 param_2, struct UnkTextStruct2_sub *param_3, sub_8012D08(gUnknown_203B244->unk4EC, param_4); ResetUnusedInputStruct(); sub_800641C(gUnknown_203B244->unk4F0,1,1); - sub_8013818(&gUnknown_203B244->unk4B4, sub_801CE58(), param_4, param_2); + sub_8013818(&gUnknown_203B244->input, sub_801CE58(), param_4, param_2); if (gUnknown_203B248 == gUnknown_203B244->unk0) { - gUnknown_203B244->unk4CC = gUnknown_203B24C; - gUnknown_203B244->unk4D2 = gUnknown_203B24E; - sub_8013984(&gUnknown_203B244->unk4B4); + gUnknown_203B244->input.menuIndex = gUnknown_203B24C; + gUnknown_203B244->input.unk1E = gUnknown_203B24E; + sub_8013984(&gUnknown_203B244->input); } sub_801CC38(); sub_801CCD8(); @@ -1021,10 +806,10 @@ bool8 sub_801CA08(u8 param_1) u32 flag; if (param_1 == 0) { - sub_8013660(&gUnknown_203B244->unk4B4); + sub_8013660(&gUnknown_203B244->input); return 0; } - switch(GetKeyPress(&(gUnknown_203B244->unk4B4))) + switch(GetKeyPress(&(gUnknown_203B244->input))) { case 2: PlayMenuSoundEffect(1); @@ -1039,7 +824,7 @@ bool8 sub_801CA08(u8 param_1) if ((temp = sub_801CFE0(index), flag = FALSE, temp != 0) || (flag = (INVENTORY_SIZE > GetNumberOfFilledInventorySlots() + sub_801CFB8())) || flag != 0 ) { PlayMenuSoundEffect(6); gUnknown_203B244->unkF4[index] = gUnknown_203B244->unkF4[index] ^ 1; - sub_80138B8(&gUnknown_203B244->unk4B4,0); + sub_80138B8(&gUnknown_203B244->input,0); sub_801CCD8(); return 1; } @@ -1053,7 +838,7 @@ bool8 sub_801CA08(u8 param_1) return 4; default: _0801CAF2: - if (sub_80138B8(&gUnknown_203B244->unk4B4,1) != 0) { + if (sub_80138B8(&gUnknown_203B244->input,1) != 0) { sub_801CC38(); sub_801CCD8(); return 1; @@ -1066,19 +851,19 @@ _0801CAF2: } u8 sub_801CB24(void) { - return gUnknown_203B244->itemIDs[(gUnknown_203B244->unk4D2 * gUnknown_203B244->unk4D0) + gUnknown_203B244->unk4CC]; + return gUnknown_203B244->itemIDs[(gUnknown_203B244->input.unk1E * gUnknown_203B244->input.unk1C) + gUnknown_203B244->input.menuIndex]; } void sub_801CB5C(u8 r0) { ResetUnusedInputStruct(); sub_800641C(gUnknown_203B244->unk4F0, 0, 0); - gUnknown_203B244->itemCount = sub_801CE58(); - sub_8013984(&gUnknown_203B244->unk4B4); + gUnknown_203B244->input.unk22 = sub_801CE58(); + sub_8013984(&gUnknown_203B244->input); sub_801CC38(); sub_801CCD8(); if(r0) { - AddMenuCursorSprite(&gUnknown_203B244->unk4B4); + AddMenuCursorSprite(&gUnknown_203B244->input); } } @@ -1086,8 +871,8 @@ void sub_801CBB8(void) { if(gUnknown_203B244 != NULL) { gUnknown_203B248 = gUnknown_203B244->unk0; - gUnknown_203B24C = gUnknown_203B244->unk4CC; - gUnknown_203B24E = gUnknown_203B244->unk4D2; + gUnknown_203B24C = gUnknown_203B244->input.menuIndex; + gUnknown_203B24E = gUnknown_203B244->input.unk1E; gUnknown_203B244->unk4F0[gUnknown_203B244->unk4E8] = gUnknown_80DBE3C; ResetUnusedInputStruct(); sub_800641C(gUnknown_203B244->unk4F0, 1, 1); @@ -1186,17 +971,17 @@ void sub_801CCD8(void) sub_80073B8(gUnknown_203B244->unk4E8); xxx_call_draw_string(10,0,gUnknown_80DBE6C,gUnknown_203B244->unk4E8,0); sub_8012BC4(gUnknown_203B244->unk550[2] * 8 + 4,0, - gUnknown_203B244->unk4D2 + 1,2,7,gUnknown_203B244->unk4E8); - for(index = 0; index < gUnknown_203B244->unk4CE; index++) { - uVar3 = gUnknown_203B244->itemIDs[(gUnknown_203B244->unk4D2 * gUnknown_203B244->unk4D0) + index]; + gUnknown_203B244->input.unk1E + 1,2,7,gUnknown_203B244->unk4E8); + for(index = 0; index < gUnknown_203B244->input.unk1A; index++) { + uVar3 = gUnknown_203B244->itemIDs[(gUnknown_203B244->input.unk1E * gUnknown_203B244->input.unk1C) + index]; sub_8090DC4(buffer,uVar3,0); - y = sub_8013800(&gUnknown_203B244->unk4B4,index); + y = sub_8013800(&gUnknown_203B244->input,index); xxx_call_draw_string(8,y,buffer,gUnknown_203B244->unk4E8,0); - y2 = sub_8013800(&gUnknown_203B244->unk4B4,index); + y2 = sub_8013800(&gUnknown_203B244->input,index); sub_8012BC4((gUnknown_203B244->unk4EC->unkC << 3) - 2,y2, gTeamInventory_203B460->teamStorage[uVar3],3,5,gUnknown_203B244->unk4E8); if ((sub_801CFE0(uVar3) & 1) != 0) { - sub_8007B7C(gUnknown_203B244->unk4E8,0x8,sub_8013800(&gUnknown_203B244->unk4B4,index), (gUnknown_203B244->unk4EC->unkC + -1) * '\b',10); + sub_8007B7C(gUnknown_203B244->unk4E8,0x8,sub_8013800(&gUnknown_203B244->input,index), (gUnknown_203B244->unk4EC->unkC + -1) * '\b',10); } } sub_80073E0(gUnknown_203B244->unk4E8); @@ -1307,42 +1092,42 @@ struct unkStruct_203B244 *sub_801D008(void) bool8 sub_801D014(struct PokemonStruct *param_1) { - s32 index; - struct PokemonStruct *pokemon; - struct unk_203B250 *preload; - - ResetUnusedInputStruct(); - sub_800641C(0,1,1); - gUnknown_203B250 = MemoryAlloc(sizeof(struct unk_203B250), 8); - gUnknown_203B250->menuAction = gUnknown_203B254; - gUnknown_203B250->unk0 = param_1; - if (gUnknown_203B250->unk0 != NULL) { - for(index = 0; index < NUM_MONSTERS; index++) - { - preload = gUnknown_203B250; - pokemon = &gRecruitedPokemonRef->pokemon[(s16)index]; // cast is needed here - if(preload->unk0 == pokemon) + s32 index; + struct PokemonStruct *pokemon; + struct unk_203B250 *preload; + + ResetUnusedInputStruct(); + sub_800641C(0,1,1); + gUnknown_203B250 = MemoryAlloc(sizeof(struct unk_203B250), 8); + gUnknown_203B250->menuAction = gUnknown_203B254; + gUnknown_203B250->pokeStruct = param_1; + if (gUnknown_203B250->pokeStruct != NULL) { + for(index = 0; index < NUM_MONSTERS; index++) { - preload->index = index; - break; + preload = gUnknown_203B250; + pokemon = &gRecruitedPokemonRef->pokemon[(s16)index]; // cast is needed here + if(preload->pokeStruct == pokemon) + { + preload->index = index; + break; + } } - } - } - else { - gUnknown_203B250->index = NUM_MONSTERS; - } - gUnknown_203B250->currFriendAreaLocation = sub_8002658(sub_80A5728()); - gUnknown_203B250->unk8 = 0; - gUnknown_203B250->unk9 = 0; - gUnknown_203B250->unkC = GetPlayerPokemonStruct(); - gUnknown_203B250->unk7 = 0; - if (gUnknown_203B250->unk0 != 0) { - sub_801D208(5); - } - else { - sub_801D208(0); - } - return 1; + } + else { + gUnknown_203B250->index = NUM_MONSTERS; + } + gUnknown_203B250->currFriendAreaLocation = sub_8002658(sub_80A5728()); + gUnknown_203B250->unk8 = 0; + gUnknown_203B250->unk9 = 0; + gUnknown_203B250->unkC = GetPlayerPokemonStruct(); + gUnknown_203B250->unk7 = 0; + if (gUnknown_203B250->pokeStruct != NULL) { + sub_801D208(5); + } + else { + sub_801D208(0); + } + return 1; } u32 sub_801D0DC(void) @@ -1390,10 +1175,8 @@ u32 sub_801D0DC(void) u32 sub_801D178(void) { - struct unk_203B250 *preload; struct PokemonStruct *pokeStruct; - preload = gUnknown_203B250; if (gUnknown_203B250->unk9 != 0) { return 2; @@ -1406,12 +1189,12 @@ u32 sub_801D178(void) { return 1; } - else if (preload->unkC != GetPlayerPokemonStruct()) + else if (gUnknown_203B250->unkC != GetPlayerPokemonStruct()) { goto _ret4; } else if (sub_80A7AE8(7) < 0) - { + { return 0; } else if((pokeStruct = sub_808D3F8(), (pokeStruct->unk0 >> 1 & 1) == 0)) diff --git a/src/code_801D760.c b/src/code_801D760.c index fd1da7a00..7966dbbfb 100644 --- a/src/code_801D760.c +++ b/src/code_801D760.c @@ -3,8 +3,10 @@ #include "constants/friend_area.h" #include "constants/input.h" #include "file_system.h" +#include "friend_list_menu.h" #include "item.h" #include "menu.h" +#include "pokemon.h" #include "team_inventory.h" #include "memory.h" #include "input.h" @@ -16,14 +18,7 @@ struct unkStruct_203B258 { // size: 0xA0 - u8 fill0[0x18]; - u16 unk18; - u16 unk1A; - s16 unk1C; - s16 unk1E; - s16 unk20; - u16 unk22; - u8 unk24[0x34 - 0x24]; + struct MenuInputStruct input; u32 unk34; struct UnkTextStruct2 *unk38; struct UnkTextStruct2 unk3C[4]; @@ -34,15 +29,15 @@ extern struct unkStruct_203B258 *gUnknown_203B258; extern struct UnkTextStruct2 gUnknown_80DBF88; extern struct UnkTextStruct2 gUnknown_80DBF70; -extern void sub_8013818(void *, u32, u32, u32); -extern void sub_8013878(void *, s32); -extern u8 sub_80138B8(void *, u32); -extern u32 GetKeyPress(void *); +extern void sub_8013818(struct MenuInputStruct*, u32, u32, u32); +extern void sub_8013878(struct MenuInputStruct *, s32); +extern u8 sub_80138B8(struct MenuInputStruct *, u32); +extern u32 GetKeyPress(struct MenuInputStruct *); extern void PlayMenuSoundEffect(u32); extern void sub_801DB54(); extern void sub_801DBD4(); -extern void sub_8013984(void *); -extern void AddMenuCursorSprite(void *); +extern void sub_8013984(struct MenuInputStruct *); +extern void AddMenuCursorSprite(struct MenuInputStruct *); extern u32 sub_801BF48(void); extern void sub_801BF98(void); @@ -55,9 +50,6 @@ extern u32 sub_8022860(); extern void sub_8022908(); extern u32 sub_80244E4(void); extern void sub_802453C(void); -extern u32 sub_8025354(void); -extern u8 sub_802540C(void); -extern void sub_8025418(void); extern u32 sub_8025F68(); extern u8 sub_802604C(); extern void sub_8026058(); @@ -65,6 +57,7 @@ extern void sub_8027168(); extern u32 sub_80270A4(); extern u32 sub_802C898(void); extern void sub_802C8F4(void); +extern void InitializeJobListMenu(u32); extern const char *sub_8098FB4(); extern void xxx_format_string(const char *, u8 *, u32 **, u32); @@ -80,8 +73,18 @@ extern void sub_8007E20(u32, u32, u32, u32, u32, u8 *, u32); extern struct FileArchive gTitleMenuFileArchive; extern const char gTeamRankBadgeFileName; +extern u8 gAvailablePokemonNames[]; + extern char gUnknown_80DBF3C[]; extern char gUnknown_80DBF4C[]; +extern u8 gMenuItems[]; +extern u8 gMenuJobList[]; +extern u8 gMenuTeam[]; +extern u8 gMenuOthers[]; +extern u8 *gUnknown_80D49B4[]; +extern u8 gUnknown_80DBF34[]; +extern u8 *gUnknown_80D49A8[]; +extern u8 *gUnknown_80D4970[]; struct TeamBadgeData { @@ -91,13 +94,12 @@ struct TeamBadgeData struct unk_203B250 { - u32 unk0; - u16 unk4; + struct PokemonStruct *pokeStruct; + s16 index; /* 0x6 */ u8 currFriendAreaLocation; // 0 when not in a friend area u8 unk7; u8 unk8; u8 unk9; - u8 fillA[0xC - 0xA]; struct PokemonStruct *unkC; u32 state; u32 menuAction; @@ -109,13 +111,154 @@ struct unk_203B250 struct unk_203B250 *gUnknown_203B250; +extern bool8 HasNoAcceptedJobs(void); +extern bool8 sub_8024108(u32); +extern bool8 sub_8096E2C(void); +extern bool8 sub_80023E4(u32); +extern u32 sub_801DCC4(void); +extern u32 sub_8027074(void); +extern void sub_80227B8(struct PokemonStruct *); +extern bool8 sub_8024458(s16, u32); +extern bool8 sub_801BEEC(s16); +extern void sub_8021774(u8, u32, u32); +void sub_801D894(void); +u32 sub_8025EF4(struct PokemonStruct *); + +void sub_801D3A8(void) +{ + switch(gUnknown_203B250->state) + { + case 0: + case 1: + if(gUnknown_203B250->pokeStruct != NULL) + { + PrintColoredPokeNameToBuffer(gAvailablePokemonNames, gUnknown_203B250->pokeStruct, 7); + gUnknown_203B250->unk18.unk0 = gAvailablePokemonNames; + sub_8012D60(&gUnknown_203B250->unk18, gUnknown_203B250->unk68, 0, gUnknown_203B250->unkA8, gUnknown_203B250->menuAction, 0); + } + else { + sub_801D894(); + sub_8012D60(&gUnknown_203B250->unk18, gUnknown_203B250->unk68, 0, gUnknown_203B250->unkA8, gUnknown_203B250->menuAction, 0); + } + break; + case 3: + sub_80227B8(gUnknown_203B250->pokeStruct); + break; + case 4: + sub_8027074(); + break; + case 5: + sub_8025EF4(gUnknown_203B250->pokeStruct); + break; + case 6: + sub_80252F0(0); + break; + case 7: + sub_80252F0(1); + break; + case 8: + sub_8024458(gUnknown_203B250->index, 2); + break; + case 9: + sub_801BEEC(gUnknown_203B250->index); + break; + case 10: + sub_8021774(gUnknown_203B250->currFriendAreaLocation, 1, 2); + break; + case 11: + InitializeJobListMenu(0); + break; + case 12: + sub_801DCC4(); + break; + } +} + +void sub_801D4C0(void) +{ + s32 index; + s32 loopMax; + + loopMax = 0; + MemoryFill16(gUnknown_203B250->unkA8,0,sizeof(gUnknown_203B250->unkA8)); + if (gUnknown_203B250->currFriendAreaLocation == 0) { + if (sub_8096E2C()) { + gUnknown_203B250->unk68[loopMax].menuAction = 2; + gUnknown_203B250->unk68[loopMax].text = gMenuItems; + if (GetNumberOfFilledInventorySlots() == 0) { + gUnknown_203B250->unkA8[loopMax] = 1; + } + loopMax++; + gUnknown_203B250->unk68[loopMax].text = gMenuTeam; + gUnknown_203B250->unk68[loopMax].menuAction = 4; + loopMax++; + if (sub_80023E4(2)) { + gUnknown_203B250->unk68[loopMax].text = gMenuJobList; + gUnknown_203B250->unk68[loopMax].menuAction = 9; + if (HasNoAcceptedJobs()) { + gUnknown_203B250->unkA8[loopMax] = 1; + } + loopMax++; + } + } + gUnknown_203B250->unk68[loopMax].text = gMenuOthers; + gUnknown_203B250->unk68[loopMax].menuAction = 0xb; + loopMax++; + } + else { + strcpy(gAvailablePokemonNames,gUnknown_80DBF34); + if (sub_8096E2C()) { + gUnknown_203B250->unk68[loopMax].text = *gUnknown_80D49A8; + gUnknown_203B250->unk68[loopMax].menuAction = 5; + if (sub_8024108(4)) { + gUnknown_203B250->unkA8[loopMax] = 1; + } + loopMax++; + gUnknown_203B250->unk68[loopMax].menuAction = 2; + gUnknown_203B250->unk68[loopMax].text = gMenuItems; + if (GetNumberOfFilledInventorySlots() == 0) { + gUnknown_203B250->unkA8[loopMax] = 1; + } + loopMax++; + } + + gUnknown_203B250->unk68[loopMax].text = *gUnknown_80D4970; + gUnknown_203B250->unk68[loopMax].menuAction = 8; + loopMax++; + gUnknown_203B250->unk68[loopMax].text = *gUnknown_80D49B4; + gUnknown_203B250->unk68[loopMax].menuAction = 10; + loopMax++; + } + gUnknown_203B250->unk68[loopMax].text = NULL; + gUnknown_203B250->unk68[loopMax].menuAction = 1; + + for(index = 0; index < loopMax; index++) + { + if(gUnknown_203B250->unkA8[index] == 0) + { + if(gUnknown_203B250->unk68[index].menuAction == gUnknown_203B250->menuAction) + { + return; + } + } + } + + for(index = 0; index < loopMax; index++) + { + if(gUnknown_203B250->unkA8[index] == 0) + { + gUnknown_203B250->menuAction = gUnknown_203B250->unk68[index].menuAction; + break; + } + } +} void sub_801D680(void) { int menuAction; menuAction = 0; - if ((sub_8012FD8(&gUnknown_203B250->unk18) == '\0') && (sub_8013114(&gUnknown_203B250->unk18,&menuAction), menuAction != 1)) { + if (!(sub_8012FD8(&gUnknown_203B250->unk18)) && (sub_8013114(&gUnknown_203B250->unk18,&menuAction), menuAction != 1)) { gUnknown_203B250->menuAction = menuAction; } switch(menuAction) { @@ -381,7 +524,7 @@ u32 sub_801D9E4(void) gUnknown_203B258->unk38->unk14 = gUnknown_203B258->unk9C; ResetUnusedInputStruct(); sub_800641C(gUnknown_203B258->unk3C,1,1); - sub_8013818(gUnknown_203B258,0xe5,10,gUnknown_203B258->unk34); + sub_8013818(&gUnknown_203B258->input,0xe5,10,gUnknown_203B258->unk34); sub_801DB54(); sub_801DBD4(); return 1; @@ -391,14 +534,14 @@ void sub_801DA58(s16 param_0) { s32 cast; cast = param_0; - sub_8013878(gUnknown_203B258, cast); + sub_8013878(&gUnknown_203B258->input, cast); sub_801DB54(); sub_801DBD4(); } u32 sub_801DA78(void) { - switch(GetKeyPress(gUnknown_203B258)) + switch(GetKeyPress(&gUnknown_203B258->input)) { case INPUT_B_BUTTON: PlayMenuSoundEffect(1); @@ -406,7 +549,7 @@ u32 sub_801DA78(void) case INPUT_A_BUTTON: return 3; default: - if(sub_80138B8(gUnknown_203B258, 1) != 0) + if(sub_80138B8(&gUnknown_203B258->input, 1) != 0) { sub_801DB54(); sub_801DBD4(); @@ -420,17 +563,17 @@ u32 sub_801DA78(void) s16 sub_801DAC0(void) { - return (gUnknown_203B258->unk1E * gUnknown_203B258->unk1C) + gUnknown_203B258->unk18; + return (gUnknown_203B258->input.unk1E * gUnknown_203B258->input.unk1C) + gUnknown_203B258->input.menuIndex; } void sub_801DADC(u8 r0) { - gUnknown_203B258->unk22 = 0xE5; - sub_8013984(gUnknown_203B258); + gUnknown_203B258->input.unk22 = 0xE5; + sub_8013984(&gUnknown_203B258->input); sub_801DB54(); sub_801DBD4(); if(r0) - AddMenuCursorSprite(gUnknown_203B258); + AddMenuCursorSprite(&gUnknown_203B258->input); } void sub_801DB0C(void) diff --git a/src/code_801EE10.c b/src/code_801EE10.c index b00ac1ec7..ea6e5a000 100644 --- a/src/code_801EE10.c +++ b/src/code_801EE10.c @@ -3,26 +3,7 @@ #include "text.h" #include "memory.h" #include "input.h" - -struct unkStruct_203B270 -{ - // size 0xBC - u32 unk0; - u8 unk4; - u8 unk5; - u8 unk6; - u8 unk7; - /* 0x8 */ struct PokemonStruct *pokeStruct; - /* 0xC */ u8 isTeamLeader; - /* 0x10 */ struct Move *moves; - u8 fill14[0x1C - 0x14]; - u32 unk1C; - u8 fill20[0x50 - 0x20]; - u32 unk50; - u32 unk54; - struct UnkTextStruct2 unk58[4]; - u32 unkB8; -}; +#include "code_801EE10.h" extern struct unkStruct_203B270 *gUnknown_203B270; extern struct UnkTextStruct2 gUnknown_80DC25C; @@ -32,10 +13,10 @@ extern void sub_8012D08(void *, u32); extern void sub_8013818(void *, u32, u32, u32); u32 sub_8006544(u32 index); s32 sub_801F3F8(void); -void sub_8013780(u32 *, u32); +void sub_8013780(struct MenuInputStruct*, u32); void sub_801F280(u32); -u8 sub_801EE10(u32 param_1,s16 species,struct Move *moves,u32 param_4,u32 param_5,u32 param_6) +u8 sub_801EE10(u32 param_1,s16 species,struct Move *moves,u32 param_4,u8 *param_5,u32 param_6) { s32 iVar5; s32 iVar8; @@ -82,8 +63,8 @@ u8 sub_801EE10(u32 param_1,s16 species,struct Move *moves,u32 param_4,u32 param_ sub_8012D08(&gUnknown_203B270->unk58[gUnknown_203B270->unk50],iVar8); ResetUnusedInputStruct(); sub_800641C(gUnknown_203B270->unk58,1,1); - sub_8013818(&gUnknown_203B270->unk1C,iVar5,iVar5,param_6); - sub_8013780(&gUnknown_203B270->unk1C,0); + sub_8013818(&gUnknown_203B270->input,iVar5,iVar5,param_6); + sub_8013780(&gUnknown_203B270->input,0); sub_801F280(1); return 1; } diff --git a/src/code_801EE10_1.c b/src/code_801EE10_1.c index ec3f969d6..046722ee7 100644 --- a/src/code_801EE10_1.c +++ b/src/code_801EE10_1.c @@ -8,10 +8,7 @@ struct unkStruct_203B2AC { - u8 unk0[0x1E]; - s16 unk1E; - s16 unk20; - u8 unk22[0x34 - 0x22]; + struct MenuInputStruct input; u32 unk34[3]; u8 unk40[0x48 - 0x40]; s16 speciesNum; @@ -48,15 +45,15 @@ extern struct unkStruct_3001B60 *gUnknown_3001B60; extern struct UnkTextStruct2 gUnknown_80DC9B0; extern struct UnkTextStruct2 gUnknown_80DC9C8; -extern void sub_8013818(void *, u32, u32, u32); +extern void sub_8013818(struct MenuInputStruct*, u32, u32, u32); extern bool8 sub_80023E4(u32); extern void sub_808FF20(u32 *, struct PokemonStruct *, bool8); extern void CreatePokemonInfoTabScreen(u32, s16, u32 *, u32 *, u32); -extern s32 GetKeyPress(void *); -extern bool8 sub_8013938(void *); +extern s32 GetKeyPress(struct MenuInputStruct*); +extern bool8 sub_8013938(struct MenuInputStruct*); extern void sub_802452C(void); extern void PlayMenuSoundEffect(u32); -extern void sub_8013984(void *); +extern void sub_8013984(struct MenuInputStruct*); void sub_80922B4(u8 *buffer, u8 *string, s32 size); bool8 ComparePokemonNames(s16 a1, s16 a2); @@ -237,13 +234,13 @@ bool8 sub_8024458(s16 speciesNum, s32 param_2) gUnknown_203B2AC->unk148[2] = 10; sub_8024604(); sub_802452C(); - sub_8013984(gUnknown_203B2AC); + sub_8013984(&gUnknown_203B2AC->input); return TRUE; } u8 sub_80244E4(void) { - switch(GetKeyPress(gUnknown_203B2AC)) + switch(GetKeyPress(&gUnknown_203B2AC->input)) { case INPUT_B_BUTTON: PlayMenuSoundEffect(1); @@ -252,7 +249,7 @@ u8 sub_80244E4(void) PlayMenuSoundEffect(0); return 3; default: - if (sub_8013938(gUnknown_203B2AC) != 0) { + if (sub_8013938(&gUnknown_203B2AC->input) != 0) { sub_802452C(); return 1; } @@ -282,8 +279,8 @@ void sub_802453C(void) void sub_8024588(void) { - gUnknown_203B2AC->unk148[0] = gUnknown_203B2AC->unk20; - gUnknown_203B2AC->unk148[1] = gUnknown_203B2AC->unk1E; + gUnknown_203B2AC->unk148[0] = gUnknown_203B2AC->input.unk20; + gUnknown_203B2AC->unk148[1] = gUnknown_203B2AC->input.unk1E; gUnknown_203B2AC->unk148[3] = 0; ResetUnusedInputStruct(); sub_800641C(gUnknown_203B2AC->unkE8,1,1); @@ -292,8 +289,8 @@ void sub_8024588(void) void sub_80245D0(void) { CreatePokemonInfoTabScreen - (gUnknown_203B2AC->unk34[gUnknown_203B2AC->unk1E], - gUnknown_203B2AC->unk1E,&gUnknown_203B2AC->unk4C, + (gUnknown_203B2AC->unk34[gUnknown_203B2AC->input.unk1E], + gUnknown_203B2AC->input.unk1E,&gUnknown_203B2AC->unk4C, &gUnknown_203B2AC->unkB0,gUnknown_203B2AC->unkE0); } @@ -305,7 +302,7 @@ void sub_8024604(void) gUnknown_203B2AC->unk34[0] = 2; gUnknown_203B2AC->unk34[1] = 3; gUnknown_203B2AC->unk34[2] = 5; - sub_8013818(gUnknown_203B2AC,3,1,gUnknown_203B2AC->unkE0); + sub_8013818(&gUnknown_203B2AC->input,3,1,gUnknown_203B2AC->unkE0); iVar3 = &gUnknown_203B2AC->unk4C; pokeStruct = &gRecruitedPokemonRef->pokemon[gUnknown_203B2AC->speciesNum]; sub_808FF20(iVar3,pokeStruct, sub_80023E4(7)); diff --git a/src/code_801EE10_mid.c b/src/code_801EE10_mid.c index c9946fbfc..c25df5096 100644 --- a/src/code_801EE10_mid.c +++ b/src/code_801EE10_mid.c @@ -5,6 +5,9 @@ #include "input.h" #include "code_800D090.h" #include "moves.h" +#include "code_801EE10.h" + +extern struct unkStruct_203B270 *gUnknown_203B270; struct unkStruct_203B274 { @@ -12,14 +15,7 @@ struct unkStruct_203B274 struct PokemonStruct *pokeStruct; struct unkStruct_808E218_arg *unk4; struct unkStruct_808E218_arg unk8; - u32 unk348; - u8 fill34C[0x360 - 0x34C]; - s16 unk360; - s16 unk362; - s16 unk364; - s16 unk366; - s16 unk368; - u8 fill36A[0x37C - 0x36A]; + struct MenuInputStruct input; s32 unk37C; struct UnkTextStruct2 *unk380; struct UnkTextStruct2 unk384[4]; @@ -31,23 +27,40 @@ extern struct UnkTextStruct2 gUnknown_80DC2AC; extern u8 gUnknown_80DC2DC[]; -extern void sub_8013818(u32 *, u32, u32, u32); -extern s32 GetKeyPress(void *); -extern void sub_8013660(void *); -extern void AddMenuCursorSprite(void *); -extern u8 sub_80138B8(u32 *, u32); +extern void sub_8013818(struct MenuInputStruct*, u32, u32, u32); +extern s32 GetKeyPress(struct MenuInputStruct*); +extern void sub_8013660(struct MenuInputStruct*); +extern void AddMenuCursorSprite(struct MenuInputStruct*); +extern u8 sub_80138B8(struct MenuInputStruct*, u32); extern void PlayMenuSoundEffect(u32); -extern void sub_8013984(void *); +extern void sub_8013984(struct MenuInputStruct*); extern void sub_8008C54(u32); extern void sub_80073B8(u32); extern void sub_80073E0(u32); -extern s32 sub_8013800(u32 *, s32); +extern s32 sub_8013800(struct MenuInputStruct*, s32); extern void xxx_call_draw_string(s32, s32, u8 *, s32, s32); u32 sub_801F7E4(void); void sub_801F690(void); void sub_801F700(void); +s32 sub_801F3F8(void) +{ + struct Move *move; + int index; + s32 counter; + + counter = 0; + for(index = 0; index < 8; index++) + { + move = &gUnknown_203B270->moves[index]; + if ((move->moveFlags & MOVE_FLAG_EXISTS)) { + counter++; + } + } + return counter; +} + bool8 sub_801F428(s16 index, s32 param_2) { s32 index_s32 = index; @@ -65,7 +78,7 @@ bool8 sub_801F428(s16 index, s32 param_2) { gUnknown_203B274->unk3E4[3] = 0; ResetUnusedInputStruct(); sub_800641C(gUnknown_203B274->unk384, 1, 1); - sub_8013818(&gUnknown_203B274->unk348, sub_801F7E4(), 4, param_2); + sub_8013818(&gUnknown_203B274->input, sub_801F7E4(), 4, param_2); sub_801F690(); sub_801F700(); return 1; @@ -74,11 +87,11 @@ bool8 sub_801F428(s16 index, s32 param_2) { u32 sub_801F520(u8 param_1) { if (param_1 == 0) { - sub_8013660(&gUnknown_203B274->unk348); + sub_8013660(&gUnknown_203B274->input); return 0; } else { - switch(GetKeyPress(&gUnknown_203B274->unk348)) + switch(GetKeyPress(&gUnknown_203B274->input)) { case 2: PlayMenuSoundEffect(1); @@ -92,7 +105,7 @@ u32 sub_801F520(u8 param_1) default: break; } - if (sub_80138B8(&gUnknown_203B274->unk348,1) != 0) { + if (sub_80138B8(&gUnknown_203B274->input,1) != 0) { sub_801F690(); sub_801F700(); return 1; @@ -105,18 +118,18 @@ u32 sub_801F520(u8 param_1) u16 sub_801F5B4(void) { - return gUnknown_203B274->unk4->unk0[gUnknown_203B274->unk366 * gUnknown_203B274->unk364 + gUnknown_203B274->unk360]; + return gUnknown_203B274->unk4->unk0[gUnknown_203B274->input.unk1E * gUnknown_203B274->input.unk1C + gUnknown_203B274->input.menuIndex]; } void sub_801F5F0(u8 r0) { ResetUnusedInputStruct(); sub_800641C(gUnknown_203B274->unk384, 0, 0); - sub_8013984(&gUnknown_203B274->unk348); + sub_8013984(&gUnknown_203B274->input); sub_801F690(); sub_801F700(); if(r0) - AddMenuCursorSprite(&gUnknown_203B274->unk348); + AddMenuCursorSprite(&gUnknown_203B274->input); } void sub_801F63C(void) @@ -196,12 +209,12 @@ void sub_801F700(void) sub_8008C54(gUnknown_203B274->unk37C); sub_80073B8(gUnknown_203B274->unk37C); - sprintfStatic(buffer1,gUnknown_80DC2DC,gUnknown_203B274->unk366 + 1,gUnknown_203B274->unk368); // Moves Page: %d/%d + sprintfStatic(buffer1,gUnknown_80DC2DC,gUnknown_203B274->input.unk1E + 1,gUnknown_203B274->input.unk20); // Moves Page: %d/%d xxx_call_draw_string(0x10,0,buffer1,gUnknown_203B274->unk37C,0); - for(index = 0; index < gUnknown_203B274->unk362; index++) + for(index = 0; index < gUnknown_203B274->input.unk1A; index++) { - sub_8092C84(buffer2,gUnknown_203B274->unk4->unk0[gUnknown_203B274->unk366 * gUnknown_203B274->unk364 + index]); - y = sub_8013800(&gUnknown_203B274->unk348, index); + sub_8092C84(buffer2,gUnknown_203B274->unk4->unk0[gUnknown_203B274->input.unk1E * gUnknown_203B274->input.unk1C + index]); + y = sub_8013800(&gUnknown_203B274->input, index); xxx_call_draw_string(8,y,buffer2,gUnknown_203B274->unk37C,0); } sub_80073E0(gUnknown_203B274->unk37C); diff --git a/src/code_8023144.c b/src/code_8023144.c index 05f3b6f93..c1ebc4486 100644 --- a/src/code_8023144.c +++ b/src/code_8023144.c @@ -4,6 +4,7 @@ #include "memory.h" #include "menu.h" #include "pokemon.h" +#include "pokemon_3.h" #include "team_inventory.h" #include "text.h" #include "input.h" @@ -21,13 +22,7 @@ struct unkStruct_3001B5C u8 fill14[0x354 - 0x14]; u8 unk354; u8 fill355[0x35C - 0x355]; - u8 unk35C; - u8 fill35D[0x374 - 0x35D]; - s16 unk374; - s16 unk376; - s16 unk378; - s16 unk37A; - u8 fill37C[0x390 - 0x37C]; + struct MenuInputStruct input; u32 unk390; struct UnkTextStruct2 *unk394; struct UnkTextStruct2 unk398[4]; @@ -42,17 +37,21 @@ extern u16 gUnknown_203B29E; extern struct UnkTextStruct2 gUnknown_80DC91C; extern struct UnkTextStruct2 gUnknown_80DC904; +void sub_8023758(void); +void sub_80237E0(void); +extern bool8 sub_8098134(s32); +extern void sub_8023730(void); extern u8 sub_8023704(u8); -extern void sub_8013818(void *, u32, u32, u32); -extern void sub_8013984(u8 *); +extern void sub_8013818(struct MenuInputStruct*, u32, u32, u32); +extern void sub_8013984(struct MenuInputStruct*); extern void sub_8023420(void); extern void sub_80234BC(void); extern u32 sub_80236A4(void); -extern u8 sub_80138B8(void *, u32); +extern u8 sub_80138B8(struct MenuInputStruct*, u32); extern void PlayMenuSoundEffect(u32); -extern s32 GetKeyPress(void *); -extern void sub_8013660(void *); -extern void AddMenuCursorSprite(void *); +extern s32 GetKeyPress(struct MenuInputStruct*); +extern void sub_8013660(struct MenuInputStruct*); +extern void AddMenuCursorSprite(struct MenuInputStruct*); struct unkStruct_203B294 { @@ -331,10 +330,10 @@ bool8 sub_8023144(s32 param_1, s32 index, struct UnkTextStruct2_sub *sub, u32 pa sub_8012D08(gUnknown_3001B5C->unk394,param_4); ResetUnusedInputStruct(); sub_800641C(gUnknown_3001B5C->unk398,1,1); - sub_8013818(&gUnknown_3001B5C->unk35C,sub_80236A4(),param_4,index); - gUnknown_3001B5C->unk374 = gUnknown_203B29C; - gUnknown_3001B5C->unk37A = gUnknown_203B29E; - sub_8013984(&gUnknown_3001B5C->unk35C); + sub_8013818(&gUnknown_3001B5C->input,sub_80236A4(),param_4,index); + gUnknown_3001B5C->input.menuIndex = gUnknown_203B29C; + gUnknown_3001B5C->input.unk1E = gUnknown_203B29E; + sub_8013984(&gUnknown_3001B5C->input); sub_8023420(); sub_80234BC(); return 1; @@ -347,10 +346,10 @@ u8 sub_8023278(u8 param_1) u32 temp; if (param_1 == 0) { - sub_8013660(&gUnknown_3001B5C->unk35C); + sub_8013660(&gUnknown_3001B5C->input); return 0; } - switch(GetKeyPress(&gUnknown_3001B5C->unk35C)) + switch(GetKeyPress(&gUnknown_3001B5C->input)) { case INPUT_B_BUTTON: PlayMenuSoundEffect(1); @@ -367,7 +366,7 @@ u8 sub_8023278(u8 param_1) sub_80236A4(); break; default: - if (sub_80138B8(&gUnknown_3001B5C->unk35C, 1) == 0) { + if (sub_80138B8(&gUnknown_3001B5C->input, 1) == 0) { return 0; } break; @@ -379,18 +378,18 @@ u8 sub_8023278(u8 param_1) s16 sub_802331C(void) { - return gUnknown_3001B5C->unkC[gUnknown_3001B5C->unk37A * gUnknown_3001B5C->unk378 + gUnknown_3001B5C->unk374]; + return gUnknown_3001B5C->unkC[gUnknown_3001B5C->input.unk1E * gUnknown_3001B5C->input.unk1C + gUnknown_3001B5C->input.menuIndex]; } void sub_8023354(u8 param_1) { ResetUnusedInputStruct(); sub_800641C(gUnknown_3001B5C->unk398,0,0); - sub_8013984(&gUnknown_3001B5C->unk35C); + sub_8013984(&gUnknown_3001B5C->input); sub_8023420(); sub_80234BC(); if (param_1 != 0) { - AddMenuCursorSprite(&gUnknown_3001B5C->unk35C); + AddMenuCursorSprite(&gUnknown_3001B5C->input); } } @@ -399,8 +398,8 @@ void sub_80233A0(void) { if (gUnknown_3001B5C != NULL) { gUnknown_203B298 = gUnknown_3001B5C->unk4; - gUnknown_203B29C = gUnknown_3001B5C->unk374; - gUnknown_203B29E = gUnknown_3001B5C->unk37A; + gUnknown_203B29C = gUnknown_3001B5C->input.menuIndex; + gUnknown_203B29E = gUnknown_3001B5C->input.unk1E; gUnknown_3001B5C->unk398[gUnknown_3001B5C->unk390] = gUnknown_80DC904; ResetUnusedInputStruct(); sub_800641C(gUnknown_3001B5C->unk398,1,1); @@ -408,3 +407,192 @@ void sub_80233A0(void) gUnknown_3001B5C = NULL; } } + +NAKED +void sub_8023420(void) +{ + asm_unified( + "\tpush {r4,r5,lr}\n" + "\tldr r4, _080234A8\n" + "\tldr r0, [r4]\n" + "\tmovs r1, 0xFE\n" + "\tlsls r1, 2\n" + "\tadds r0, r1\n" + "\tmovs r2, 0\n" + "\tmovs r1, 0x1\n" + "\tstrb r1, [r0]\n" + "\tldr r0, [r4]\n" + "\tldr r1, _080234AC\n" + "\tadds r0, r1\n" + "\tstrb r2, [r0]\n" + "\tldr r0, [r4]\n" + "\tadds r1, 0x1\n" + "\tadds r0, r1\n" + "\tmovs r1, 0xC\n" + "\tstrb r1, [r0]\n" + "\tldr r0, [r4]\n" + "\tldr r1, _080234B0\n" + "\tadds r0, r1\n" + "\tstrb r2, [r0]\n" + "\tldr r0, [r4]\n" + "\tldr r2, _080234B4\n" + "\tadds r0, r2\n" + "\tmovs r1, 0\n" + "\tldrsh r0, [r0, r1]\n" + "\tmovs r1, 0xC\n" + "\tbl sub_80095E4\n" + "\tadds r0, 0x2\n" + "\tldr r3, [r4]\n" + "\tmovs r2, 0xE4\n" + "\tlsls r2, 2\n" + "\tadds r5, r3, r2\n" + "\tldr r2, [r5]\n" + "\tlsls r1, r2, 1\n" + "\tadds r1, r2\n" + "\tlsls r1, 3\n" + "\tadds r1, r3, r1\n" + "\tldr r2, _080234B8\n" + "\tadds r1, r2\n" + "\tlsls r0, 16\n" + "\tlsrs r0, 16\n" + "\tstrh r0, [r1]\n" + "\tldr r2, [r5]\n" + "\tlsls r1, r2, 1\n" + "\tadds r1, r2\n" + "\tlsls r1, 3\n" + "\tadds r3, r1\n" + "\tmovs r1, 0xEA\n" + "\tlsls r1, 2\n" + "\tadds r3, r1\n" + "\tstrh r0, [r3]\n" + "\tbl ResetUnusedInputStruct\n" + "\tldr r0, [r4]\n" + "\tmovs r2, 0xE6\n" + "\tlsls r2, 2\n" + "\tadds r0, r2\n" + "\tmovs r1, 0x1\n" + "\tmovs r2, 0x1\n" + "\tbl sub_800641C\n" + "\tpop {r4,r5}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" +"_080234A8: .4byte gUnknown_3001B5C\n" +"_080234AC: .4byte 0x000003f9\n" +"_080234B0: .4byte 0x000003fb\n" +"_080234B4: .4byte 0x00000376\n" +"_080234B8: .4byte 0x000003a6"); +} + +extern u8 gUnknown_80DC934[]; + +struct unkStruct_8092638 +{ + u32 unk0; + u8 unk4; + u32 unk5; +}; +extern void sub_8092638(u8,struct unkStruct_8092638 *, u32, u32); +extern void xxx_call_draw_string(u32, u32, const u8 *, u32, u32); +extern void sub_8008C54(u32); +extern void sub_80073B8(u32); +extern void sub_80073E0(u32); +void sub_808D930(u8 *buffer, s32 index); +extern s32 sub_8013800(void *, u32); +bool8 HasRecruitedMon(s16 species_); +extern u8 gUnknown_80DC93C[]; +void sprintfStatic(char *buffer, const char *text, ...); + +void sub_80234BC(void) +{ + u8 cVar2; + u32 y; + s32 uVar3; + s32 iVar4; + s32 species; + u32 color; + s32 index; + u8 buffer2 [256]; + u8 buffer1 [100]; + struct unkStruct_8092638 auStack_2c; + + sub_8008C54(gUnknown_3001B5C->unk390); + sub_80073B8(gUnknown_3001B5C->unk390); + xxx_call_draw_string(10,0,gUnknown_80DC934,gUnknown_3001B5C->unk390,0); // Pokemon + sub_8012BC4(gUnknown_3001B5C->unk3F8[2] * 8 + 4,0, + gUnknown_3001B5C->input.unk1E + 1,2,7,gUnknown_3001B5C->unk390); + for(index = 0; index < gUnknown_3001B5C->input.unk1A; index++) + { + y = sub_8013800(&gUnknown_3001B5C->input,index); + species = gUnknown_3001B5C->unkC[(gUnknown_3001B5C->input.unk1E * gUnknown_3001B5C->input.unk1C + index)]; + sub_8092638(GetFriendArea(species),&auStack_2c,0,0); + color = 7; + if (auStack_2c.unk4 != 0) { + color = HasRecruitedMon(species) ? 5 : 4; + } + iVar4 = GetDexInternalNo(species,0); + cVar2 = (iVar4 % 10) + 0x30; + sub_8012C60(0x14,y,cVar2,color,gUnknown_3001B5C->unk390); + if (9 < iVar4) { + iVar4 /= 10; + cVar2 = (iVar4 % 10) + 0x30; + sub_8012C60(0xd,y,cVar2,color,gUnknown_3001B5C->unk390); + if (9 < iVar4) { + uVar3 = iVar4 / 10; + cVar2 = (uVar3 % 10) + 0x30; + sub_8012C60(6,y,cVar2,color,gUnknown_3001B5C->unk390); + } + } + sub_808D930(buffer1,species); + sprintfStatic(buffer2,gUnknown_80DC93C,color,buffer1); // {COLOR_2}%c%s + xxx_call_draw_string(0x24,y,buffer2,gUnknown_3001B5C->unk390,0); + } + sub_80073E0(gUnknown_3001B5C->unk390); +} + +u32 sub_80236A4(void) +{ + s16 index_s32; + int index; + s32 temp; + + gUnknown_3001B5C->unk8 = 0; + for(index = 0; index < 0x1a8; index++) + { + index_s32 = index; + if ((sub_8098134(index_s32)) && + (index_s32 == GetBaseSpeciesNoUnown(index_s32))) { + temp = gUnknown_3001B5C->unk8; + gUnknown_3001B5C->unkC[gUnknown_3001B5C->unk8] = index; + gUnknown_3001B5C->unk8 = temp + 1; + } + } + sub_8023730(); + return gUnknown_3001B5C->unk8; +} + +bool8 sub_8023704(u8 unused) +{ + s32 index; + + for(index = 0; index < 0x1a8; index++) + { + if (sub_8098134((s16)index)) + return FALSE; + } + return TRUE; +} + +void sub_8023730(void) +{ + switch(gUnknown_3001B5C->unk4) + { + case 1: + sub_8023758(); + break; + case 2: + sub_80237E0(); + break; + + } +} diff --git a/src/code_8031D70.c b/src/code_8031D70.c new file mode 100644 index 000000000..2feeea604 --- /dev/null +++ b/src/code_8031D70.c @@ -0,0 +1,184 @@ +#include "global.h" +#include "constants/wonder_mail.h" +#include "constants/colors.h" +#include "input.h" +#include "memory.h" +#include "text.h" +#include "dungeon_global_data.h" +#include "pokemon.h" +#include "code_8094F88.h" +#include "menu_input.h" + +struct unkStruct_203B334 +{ + // size: 0x7C + u32 mailIndex; + u32 unk4; + u8 fill8[0x10 - 0x8]; + u32 unk10; + struct UnkTextStruct2 *unk14; + struct UnkTextStruct2 unk18[4]; + u8 unk78[4]; +}; + +EWRAM_DATA_2 struct unkStruct_203B334 *gUnknown_203B334 = {0}; +extern struct unkStruct_203B480 *gUnknown_203B480; + +const struct UnkTextStruct2 gUnknown_80E1FA8 = { + 0, 0, 0, 0, + 3, + 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, + 0x0, 0, + NULL +}; + +const u8 gUnkData_80E1FC0[4] = {0x01, 0x00, 0x0A, 0x00}; +const struct UnkTextStruct2 gUnknown_80E1FC4 = { + 0, 0, 0, 0, + 6, + 0x2, 0x0, 0x2, 0x0, + 0x1A, 0xA, + 0xA, 0, + gUnkData_80E1FC0 +}; + +ALIGNED(4) const u8 gUnknown_80E1FDC[] = "Password"; +ALIGNED(4) static const u8 fill0[] = "pksdir0"; + +extern void xxx_call_draw_string(s32, s32, const u8 *, s32, s32); +extern void sub_8008C54(u32); +extern void sub_80073B8(u32); +extern void sub_80073E0(u32); +extern void sub_80078A4(u32, u32, u32, u32, u32); +extern void sub_803D2C0(u8 *, struct unkStruct_203B480 *); +extern void sub_801317C(u32 *); +extern u32 sub_8012A64(u32 *, u32); +extern void PlayMenuSoundEffect(u32); + +void sub_8031E00(void); +void sub_8031E58(void); +void DrawSOSPasswordScreen(void); + +bool8 sub_8031D70(u32 mailIndex, s32 param_2) +{ + gUnknown_203B334 = MemoryAlloc(sizeof(struct unkStruct_203B334),8); + gUnknown_203B334->mailIndex = mailIndex; + sub_801317C(&gUnknown_203B334->unk4); + gUnknown_203B334->unk10 = param_2; + gUnknown_203B334->unk14 = &gUnknown_203B334->unk18[param_2]; + sub_8006518(gUnknown_203B334->unk18); + gUnknown_203B334->unk18[gUnknown_203B334->unk10] = gUnknown_80E1FC4; + sub_8031E00(); + return TRUE; +} + +u32 sub_8031DCC(void) +{ + switch(sub_8012A64(&gUnknown_203B334->unk4, gUnknown_203B334->unk10)) + { + case 2: + PlayMenuSoundEffect(1); + return 2; + case 1: + PlayMenuSoundEffect(0); + return 3; + default: + return 0; + } +} + +void sub_8031E00(void) +{ + sub_8031E58(); + DrawSOSPasswordScreen(); +} + +void sub_8031E10(void) +{ + if(gUnknown_203B334) + { + gUnknown_203B334->unk18[gUnknown_203B334->unk10] = gUnknown_80E1FA8; + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B334->unk18, 1, 1); + MemoryFree(gUnknown_203B334); + gUnknown_203B334 = NULL; + } +} + +void sub_8031E58(void) +{ + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B334->unk18, 1, 1); +} + +void DrawSOSPasswordScreen(void) +{ + int rowIndex; + u32 x; + u32 y; + u32 color; + s32 index; + u8 buffer [PASSWORD_BUFFER_SIZE + 2]; + struct unkStruct_203B480 *mail; + + mail = &gUnknown_203B480[gUnknown_203B334->mailIndex]; + sub_80073B8(gUnknown_203B334->unk10); + xxx_call_draw_string(0x14,0,gUnknown_80E1FDC,gUnknown_203B334->unk10,0); // Password + sub_803D2C0(buffer, mail); + for(index = 0; index < PASSWORD_BUFFER_SIZE; index++) + { + if (index < 5) { + color = COLOR_WHITE_2; + y = 0x15; + } + else if (index < 0xd) { + color = COLOR_YELLOW; + y = 0x16; + } + else if (index < 0x12) + { + color = COLOR_WHITE_2; + y = 0x15; + } + else if (index < 0x17) { + color = COLOR_WHITE_2; + y = 0x24; + } + else if (index < 0x1f) { + color = COLOR_YELLOW; + y = 0x25; + } + else if (index < 0x24) + { + color = COLOR_WHITE_2; + y = 0x24; + } + else + { + if(index > 0x28) + { + if(index < 0x31) + { + color = COLOR_YELLOW; + y = 0x34; + } + else + { + color = COLOR_WHITE_2; + y = 0x33; + } + } + else + { + color = COLOR_WHITE_2; + y = 0x33; + } + } + rowIndex = index % 0x12; + x = rowIndex * 0xb + 6; + sub_8012C60(x,y,buffer[index],color,gUnknown_203B334->unk10); // Draw character + sub_80078A4(gUnknown_203B334->unk10,x,y + 0xA,10,COLOR_CYAN); // Draw underscore beneath character + } + sub_80073E0(gUnknown_203B334->unk10); +} diff --git a/src/code_8057824_1.c b/src/code_8057824_1.c index 84cc80260..a4d848f85 100644 --- a/src/code_8057824_1.c +++ b/src/code_8057824_1.c @@ -408,7 +408,7 @@ extern void sub_808692C(); extern void sub_80868F4(); extern void sub_8086910(); -extern u32 sub_8085EC8(u32, u32, u32, u32 *, u32); +extern u32 sub_8085EC8(u32, u32, u32, struct Position *, u32); extern void sub_808680C(); extern void sub_808682C(); extern void sub_8086854(); @@ -417,7 +417,7 @@ extern void sub_8086838(u32, u32, u32); extern void sub_80426C8(u32, u32); extern void sub_807EAA0(u32, u32); -extern void sub_808BCE4(void); +extern void CreateJirachiWishWarpTile(void); extern u8 sub_8098100(u32); extern void sub_8086794(); @@ -447,7 +447,6 @@ extern u8 sub_8086AE4(u32); extern void sub_8072008(struct Entity *, struct Entity *, s16, u32, u32); -extern struct Entity *GetPartnerEntity(); extern void sub_80869E4(struct Entity *, u32, u32, u32); extern void sub_806CDD4(struct Entity *, u32, u32); extern void sub_8085374(); @@ -486,9 +485,9 @@ void ZapdosScreenFlash(int param_1); extern s32 sub_8052C68(u32, u8 *, u32 *, u32); extern void sub_80861A8(void); extern void sub_8045C28(struct Item *, u8 , u8 *); -extern void sub_808BD38(void); -extern void sub_808BB3C(s16 *); -extern void sub_8046860(struct Entity *, s32 *, struct Item *, u32); +extern void EnableJirachiWishWarpTile(void); +extern void sub_808BB3C(struct Position *); +extern void sub_8046860(struct Entity *, struct Position *, struct Item *, u32); extern u32 sub_803D73C(u32); void ZapdosReFightDialogue(void) @@ -562,20 +561,20 @@ void ZapdosDropInEffect(struct Entity *zapdosEntity) sub_803E708(0x1e,0x46); } -void ZapdosScreenFlash(s32 param_1) +void ZapdosScreenFlash(s32 numFlashes) { s32 iVar1; s32 iVar2; PlaySoundEffect(0x1f6); - if (2 < param_1) { + if (2 < numFlashes) { for(iVar2 = 250; iVar2 > 199; iVar2 -= 10) { SetDungeonBGColorRGB(iVar2,iVar2,iVar2 / 2,1,1); sub_803E46C(0x46); } } - if (1 < param_1) { + if (1 < numFlashes) { for(iVar2 = 250; iVar2 > 199; iVar2 -= 10) { SetDungeonBGColorRGB(iVar2,iVar2,iVar2 / 2,1,1); @@ -594,8 +593,6 @@ void ZapdosScreenFlash(s32 param_1) sub_8085EB0(); } - - void sub_80877E8(void) { struct Entity * LeaderEntity; @@ -643,11 +640,9 @@ void sub_8087848(void) CopyMonsterNametoBuffer(gUnknown_202E038,MONSTER_MOLTRES); } - - -void sub_80878F4(char param_1, s32 param_2) +void sub_80878F4(u8 param_1, u8 param_2) { - if ((((param_2 * 0x1000000) + 0xF6000000U) >> 0x18 < 3) && (param_1 == 0x9)) { + if ((param_2 == 0xA || param_2 == 0xB || param_2 == 0xC) && (param_1 == 0x9)) { sub_8097FA8(0x7); gDungeon->unk2 = 1; } @@ -1062,11 +1057,9 @@ void sub_8087FF8(void) CopyMonsterNametoBuffer(gUnknown_202E038, MONSTER_ARTICUNO); } - - -void sub_8088088(char param_1, s32 param_2) +void sub_8088088(u8 param_1, u8 param_2) { - if ((((param_2 * 0x1000000) + 0xF3000000U) >> 0x18 < 3) && (param_1 == 0xD)) { + if ((param_2 == 0xD || param_2 == 0xE || param_2 == 0xF) && (param_1 == 0xD)) { sub_8097FA8(0x9); gDungeon->unk2 = 1; } @@ -1376,9 +1369,9 @@ void sub_808875C(void) CopyMonsterNametoBuffer(gUnknown_202E038 + 0x50, MONSTER_ALAKAZAM); } -void sub_8088818(char param_1, s32 param_2) +void sub_8088818(u8 param_1, u8 param_2) { - if ((((param_2 * 0x1000000) + 0xEE000000U) >> 0x18 < 3) && (param_1 == 0xE)) { + if ((param_2 == 0x12 || param_2 == 0x13 || param_2 == 0x14) && (param_1 == 0xE)) { sub_8097FA8(0xC); gDungeon->unk2 = 1; } @@ -1924,9 +1917,9 @@ void sub_8089328(void) CopyMonsterNametoBuffer(gUnknown_202E038,MONSTER_RAYQUAZA); } -void sub_80893B4(char param_1, s32 param_2) +void sub_80893B4(u8 param_1, u8 param_2) { - if ((((param_2 * 0x1000000) + 0xE9000000U) >> 0x18 < 3) && (param_1 == 0xF)) { + if ((param_2 == 0x17 || param_2 == 0x18 || param_2 == 0x19) && (param_1 == 0xF)) { sub_8097FA8(0xF); gDungeon->unk2 = 1; } @@ -2098,19 +2091,19 @@ void sub_808974C(void) sub_8085860(LeaderEntity->pos.x,LeaderEntity->pos.y + -3); } -void sub_8089788(struct Entity *param_1, u8 param_2, s32 param_3) +void sub_8089788(struct Entity *entity, u8 param_2, u8 param_3) { - struct Entity *iVar2; - s32 iVar3; + struct Entity *monEntity; + s32 index; u32 unk1; unk1 = 0; - if ((((param_3 * 0x1000000) + 0xe6000000U) >> 0x18) < 2) { - for(iVar3 = 0; iVar3 < DUNGEON_MAX_WILD_POKEMON; iVar3++) + if (param_3 == 0x1A || param_3 == 0x1B) { + for(index = 0; index < DUNGEON_MAX_WILD_POKEMON; index++) { - iVar2 = gDungeon->wildPokemon[iVar3]; - if ((EntityExists(iVar2) != '\0') && (iVar2 != param_1) && (iVar2->info->clientType == param_2)) { + monEntity = gDungeon->wildPokemon[index]; + if ((EntityExists(monEntity)) && (monEntity != entity) && (monEntity->info->clientType == param_2)) { return; } } @@ -2235,9 +2228,9 @@ void sub_8089978(void) CopyMonsterNametoBuffer(gUnknown_202E038,MONSTER_MEWTWO); } -void sub_8089A00(char param_1, s32 param_2) +void sub_8089A00(u8 param_1, u8 param_2) { - if ((((param_2 * 0x1000000) + 0xE3000000U) >> 0x18 < 3) && (param_1 == 0x11)) { + if ((param_2 == 0x1d || param_2 == 0x1e || param_2 == 0x1f) && (param_1 == 0x11)) { sub_8097FA8(0x13); gDungeon->unk2 = 1; } @@ -2381,16 +2374,14 @@ void sub_8089C90(void) CopyMonsterNametoBuffer(gUnknown_202E038, MONSTER_ENTEI); } - -void sub_8089CFC(char param_1,int param_2) +void sub_8089CFC(u8 param_1, u8 param_2) { - if ((((param_2 * 0x1000000) + 0xE0000000U) >> 0x18 < 3) && (param_1 == 0x12)) { + if ((param_2 == 0x20 || param_2 == 0x21 || param_2 == 0x22) && (param_1 == 0x12)) { sub_8097FA8(0x15); gDungeon->unk2 = 1; } } - void EnteiPreFightDialogue(void) { struct Entity * LeaderEntity; @@ -2528,15 +2519,14 @@ void sub_8089F8C(void) CopyMonsterNametoBuffer(gUnknown_202E038, MONSTER_RAIKOU); } -void sub_8089FF0(char param_1,int param_2) +void sub_8089FF0(u8 param_1, u8 param_2) { - if ((((param_2 * 0x1000000) + 0xdD000000U) >> 0x18 < 3) && (param_1 == 0x13)) { + if ((param_2 == 0x23 || param_2 == 0x24 || param_2 == 0x25) && (param_1 == 0x13)) { sub_8097FA8(0x17); gDungeon->unk2 = 1; } } - void RaikouPreFightDialogue(void) { struct Entity * LeaderEntity; @@ -2684,9 +2674,9 @@ void sub_808A308(void) CopyMonsterNametoBuffer(gUnknown_202E038, MONSTER_SUICUNE); } -void sub_808A36C(char param_1,int param_2) +void sub_808A36C(u8 param_1, u8 param_2) { - if ((((param_2 * 0x1000000) + 0xda000000U) >> 0x18 < 3) && (param_1 == 0x14)) { + if ((param_2 == 0x26 || param_2 == 0x27 || param_2 == 0x28) && (param_1 == 0x14)) { sub_8097FA8(0x19); gDungeon->unk2 = 1; } @@ -2848,15 +2838,14 @@ void sub_808A668(void) CopyMonsterNametoBuffer(gUnknown_202E038, MONSTER_HO_OH); } -void sub_808A6E8(char param_1, s32 param_2) +void sub_808A6E8(u8 param_1, u8 param_2) { - if ((((param_2 * 0x1000000) + 0xd7000000U) >> 0x18 < 2) && (param_1 == 0x15)) { + if ((param_2 == 0x29 || param_2 == 0x2A) && (param_1 == 0x15)) { sub_8097FA8(0x1A); gDungeon->unk2 = 1; } } - void sub_808A718(void) { sub_8086854(); @@ -3034,10 +3023,10 @@ void sub_808AA94(void) CopyMonsterNametoBuffer(gUnknown_202E038, MONSTER_LATIOS); } -void sub_808AAF0(char param_1, s32 param_2) +void sub_808AAF0(u8 param_1, u8 param_2) { - if ((((param_2 * 0x1000000) + 0xd5000000U) >> 0x18 < 3) && (param_1 == 0x16)) { - sub_8097FA8(0x1c); + if ((param_2 == 0x2B || param_2 == 0x2C || param_2 == 0x2D) && (param_1 == 0x16)) { + sub_8097FA8(0x1C); gDungeon->unk2 = 1; } } @@ -3047,14 +3036,15 @@ void LatiosPreFightDialogue(void) struct Entity * LeaderEntity; struct Entity * LatiosEntity; struct Position32 local_18; - u32 local_19; + struct Position local_19; LeaderEntity = xxx_call_GetLeader(); LatiosEntity = GetEntityFromClientType(0x16); local_18.x = LatiosEntity->pixelPos.x; local_18.y = LatiosEntity->pixelPos.y + (0x80 << 6); - local_19 = 0x7000fc; + local_19.y = 0x70; + local_19.x = 0xFC; sub_8085EC8(0x1bd,0,0,&local_19,1); sub_803E708(0x1e,70); @@ -3504,7 +3494,7 @@ void sub_808B2F4(void) LeaderEntity = xxx_call_GetLeader(); JirachiEntity = GetEntityFromClientType(0x1a); DungeonStartNewBGM(MUS_FRIEND_AREA_FOREST); - sub_808BCE4(); + CreateJirachiWishWarpTile(); sub_8049ED4(); sub_80854D4(); sub_8085930(DIRECTION_NORTH); @@ -3532,7 +3522,7 @@ void sub_808B35C(void) else { SetFacingDirection(JirachiEntity, DIRECTION_SOUTH); sub_8086A3C(JirachiEntity); - sub_808BCE4(); + CreateJirachiWishWarpTile(); sub_8049ED4(); } @@ -3540,94 +3530,30 @@ void sub_808B35C(void) CopyMonsterNametoBuffer(gUnknown_202E038, MONSTER_JIRACHI); } -#ifdef NONMATCHING -void sub_808B3E4(u8 param_1,u8 param_2,u8 param_3) +void sub_808B3E4(u8 param_1, u8 param_2, u8 param_3) { u8 uVar1; - - // TODO R1 and R2 shifts are switched ordering but matches - if (((((param_2 * 0x1000000) + 0xcf000000U) >> 0x18) < 2) && (param_1 == 0x1A)){ - sub_8097FA8(0x1e); - if (param_3 != 0) { - gDungeon->unk2 = 1; + if ((param_2 == 0x31 || param_2 == 0x32) && (param_1 == 0x1A)) { + sub_8097FA8(0x1E); + if(param_3 != 0) + { + gDungeon->unk2 = 1; } else { - uVar1 = gDungeon->unk1356C; - if (sub_80860A8(0x36) != 0) { - JirachiWish(); - } - else { - sub_808B50C(); - } - gDungeon->unk1356C = uVar1; - sub_8040A84(); + uVar1 = gDungeon->unk1356C; + if(sub_80860A8(0x36) != 0) + { + JirachiWish(); + } + else + { + sub_808B50C(); + } + gDungeon->unk1356C = uVar1; + sub_8040A84(); } } } -#else -NAKED -void sub_808B3E4(u8 param_1, u8 param_2, u8 param_3) -{ - asm_unified( - "\tpush {r4,lr}\n" - "\tlsls r0, 24\n" - "\tlsrs r0, 24\n" - "\tlsls r1, 24\n" - "\tlsls r2, 24\n" - "\tlsrs r4, r2, 24\n" - "\tmovs r2, 0xCF\n" - "\tlsls r2, 24\n" - "\tadds r1, r2\n" - "\tlsrs r1, 24\n" - "\tcmp r1, 0x1\n" - "\tbhi _0808B44E\n" - "\tcmp r0, 0x1A\n" - "\tbne _0808B44E\n" - "\tmovs r0, 0x1E\n" - "\tbl sub_8097FA8\n" - "\tcmp r4, 0\n" - "\tbeq _0808B418\n" - "\tldr r0, _0808B414\n" - "\tldr r1, [r0]\n" - "\tmovs r0, 0x1\n" - "\tstrb r0, [r1, 0x2]\n" - "\tb _0808B44E\n" - "\t.align 2, 0\n" -"_0808B414: .4byte gDungeon\n" -"_0808B418:\n" - "\tldr r0, _0808B434\n" - "\tldr r0, [r0]\n" - "\tldr r1, _0808B438\n" - "\tadds r0, r1\n" - "\tldrb r4, [r0]\n" - "\tmovs r0, 0x36\n" - "\tbl sub_80860A8\n" - "\tlsls r0, 24\n" - "\tcmp r0, 0\n" - "\tbeq _0808B43C\n" - "\tbl JirachiWish\n" - "\tb _0808B440\n" - "\t.align 2, 0\n" -"_0808B434: .4byte gDungeon\n" -"_0808B438: .4byte 0x0001356c\n" -"_0808B43C:\n" - "\tbl sub_808B50C\n" -"_0808B440:\n" - "\tldr r0, _0808B454\n" - "\tldr r0, [r0]\n" - "\tldr r2, _0808B458\n" - "\tadds r0, r2\n" - "\tstrb r4, [r0]\n" - "\tbl sub_8040A84\n" -"_0808B44E:\n" - "\tpop {r4}\n" - "\tpop {r0}\n" - "\tbx r0\n" - "\t.align 2, 0\n" -"_0808B454: .4byte gDungeon\n" -"_0808B458: .4byte 0x0001356c"); -} -#endif void JirachiPreFightDialogue(void) { @@ -3694,15 +3620,12 @@ void JirachiWish(void) s32 counter; u32 direction; s32 index; - struct Item money [9]; + struct Item auStack152 [9]; struct Item itemStack [9]; struct Item strengthItems [9]; - s32 local_2c; - s32 local_28; - s32 local_24; - s32 temp; - s32 temp2; - s32 temp3; + struct Position pos1; + struct Position pos2; + struct Position pos3; JirachiEntity = GetEntityFromClientType(0x1a); CopyMonsterNametoBuffer(gUnknown_202E038, MONSTER_JIRACHI); @@ -3749,25 +3672,20 @@ void JirachiWish(void) DisplayDungeonDialogue(&gUnknown_810581C); sub_803E708(10,0x46); JirachiWishGrantDialogue(JirachiEntity); - + for(counter = 0; counter < 6; counter = r8) { r8 = counter + 1; for(index = 0; index < 9; index++) { - sub_8045C28(&money[index], 0x69, 0); + sub_8045C28(&auStack152[index], ITEM_POKE, 0); } - temp = (u16)(((((u16)JirachiEntity->pos.x + DungeonRandInt(3)) - 1) << 16) >> 16); - local_2c &= 0xffff0000; - local_2c |= temp; - - temp = ((u16)JirachiEntity->pos.y + DungeonRandInt(3) + -1) * 0x10000; - local_2c &= 0xffff; - local_2c |= temp; - if ((GetTileSafe((s16)local_2c, local_2c >> 16)->terrainType & 3) != 0) { + pos1.x = (JirachiEntity->pos.x + DungeonRandInt(3) - 1); + pos1.y = (JirachiEntity->pos.y + DungeonRandInt(3) + -1); + if ((GetTileSafe(pos1.x, pos1.y)->terrainType & 3) != 0) { PlaySoundEffect(0x14c); - sub_808BB3C((s16 *)&local_2c); - sub_8046860(JirachiEntity,&local_2c,money,9); + sub_808BB3C(&pos1); + sub_8046860(JirachiEntity,&pos1,auStack152,9); } } JirachiEntity->info->unk15D = 0; @@ -3787,17 +3705,13 @@ void JirachiWish(void) { sub_8045C28(&itemStack[index], sub_803D73C(0),0); } - temp2 = (u16)(((((u16)JirachiEntity->pos.x + DungeonRandInt(3)) - 1) << 16) >> 16); - local_28 &= 0xffff0000; - local_28 |= temp2; - - temp2 = ((u16)JirachiEntity->pos.y + DungeonRandInt(3) + -1) * 0x10000; - local_28 &= 0xffff; - local_28 |= temp2; - if ((GetTileSafe((s16)local_28, local_28 >> 16)->terrainType & 3) != 0) { + pos2.x = (JirachiEntity->pos.x + DungeonRandInt(3) - 1); + pos2.y = (JirachiEntity->pos.y + DungeonRandInt(3) + -1); + + if ((GetTileSafe(pos2.x, pos2.y)->terrainType & 3) != 0) { PlaySoundEffect(400); - sub_808BB3C((s16 *)&local_28); - sub_8046860(JirachiEntity,&local_28,itemStack,9); + sub_808BB3C(&pos2); + sub_8046860(JirachiEntity,&pos2,itemStack,9); } } JirachiEntity->info->unk15D = 0; @@ -3836,25 +3750,22 @@ void JirachiWish(void) DisplayDungeonDialogue(&gUnknown_8105BA8); sub_803E708(10,0x46); JirachiWishGrantDialogue(JirachiEntity); - + for(counter = 0; counter < 5; counter++) { - + for(index = 0; index < 4; index++) { sub_8045C28(&strengthItems[index],gUnknown_81074FC[DungeonRandInt(8)],0); } - temp3 = (u16)(((((u16)JirachiEntity->pos.x + DungeonRandInt(3)) - 1) << 16) >> 16); - local_24 &= 0xffff0000; - local_24 |= temp3; - temp3 = ((u16)JirachiEntity->pos.y + DungeonRandInt(3) + -1) * 0x10000; - local_24 &= 0xffff; - local_24 |= temp3; - if ((GetTileSafe((s16)local_24, local_24 >> 16)->terrainType & 3) != 0) { + pos3.x = (JirachiEntity->pos.x + DungeonRandInt(3) - 1); + pos3.y = (JirachiEntity->pos.y + DungeonRandInt(3) + -1); + + if ((GetTileSafe(pos3.x, pos3.y)->terrainType & 3) != 0) { PlaySoundEffect(400); - sub_808BB3C((s16 *)&local_24); - sub_8046860(JirachiEntity,&local_24,strengthItems,4); + sub_808BB3C(&pos3); + sub_8046860(JirachiEntity,&pos3,strengthItems,4); } } JirachiEntity->info->unk15D = 0; @@ -3885,7 +3796,7 @@ void JirachiWish(void) sub_803E708(10,0x46); DisplayDungeonDialogue(&gUnknown_810593C); sub_803E708(10,0x46); - sub_808BD38(); + EnableJirachiWishWarpTile(); } void JirachiReFightDialogue(void) @@ -3931,37 +3842,27 @@ void JirachiWishGrantFlash(void) sub_8085EB0(); } -void sub_808BB3C(s16 *param_1) +void sub_808BB3C(struct Position *param_1) { #ifndef NONMATCHING register s32 iVar1 asm("r0"); #else s32 iVar1; #endif - s32 uVar2; - u32 local_8; + struct Position local_8; - iVar1 = param_1[0] * 0x1800 + 0xc00; + iVar1 = param_1->x * 0x1800 + 0xc00; + if (iVar1 < 0) { + iVar1 += 0xff; + } + local_8.x = iVar1 >> 8; + + iVar1 = param_1->y * 0x1800 + 0x1000; if (iVar1 < 0) { iVar1 += 0xff; } - iVar1 <<= 8; - iVar1 = (u16)(iVar1 >> 16); - - uVar2 = (local_8 & 0xffff0000) | iVar1; - local_8 = uVar2; - - iVar1 = param_1[1] * 0x1800 + 0x1000; - if (iVar1 < 0) { - iVar1 += 0xff; - } - - iVar1 <<= 8; - iVar1 = (u16)(iVar1 >> 0x10); - iVar1 <<= 0x10; - - local_8 = (iVar1) | (uVar2 & 0x0000ffff); + local_8.y = iVar1 >> 8; sub_8085EC8(100,0,0,&local_8,0); } @@ -4027,30 +3928,31 @@ void JirachiWishGrantDialogue(struct Entity *jirachiEntity) JirachiWishGrantFlash(); } -void sub_808BCE4(void) +// Warp Tile is created but not enabled until the Wish is done with EnableJirachiWishWarpTile +void CreateJirachiWishWarpTile(void) { - struct Tile *puVar1; + struct Tile *tile; - puVar1 = GetTileSafe(gDungeon->unkE23C, gDungeon->unkE23E); - puVar1->terrainType &= ~(TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY); - puVar1->terrainType |= TERRAIN_TYPE_IMPASSABLE_WALL; - puVar1->terrainType &= ~TERRAIN_TYPE_STAIRS; + tile = GetTileSafe(gDungeon->unkE23C, gDungeon->unkE23E); + tile->terrainType &= ~(TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY); + tile->terrainType |= TERRAIN_TYPE_IMPASSABLE_WALL; + tile->terrainType &= ~TERRAIN_TYPE_STAIRS; sub_8049884(); sub_8049B8C(); sub_8049ED4(); sub_8040A84(); } -void sub_808BD38(void) +void EnableJirachiWishWarpTile(void) { - struct Tile *puVar1; + struct Tile *tile; - puVar1 = GetTileSafe(gDungeon->unkE23C, gDungeon->unkE23E); - puVar1->terrainType &= ~(TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY); - puVar1->terrainType |= TERRAIN_TYPE_NORMAL; - puVar1->terrainType &= ~TERRAIN_TYPE_IMPASSABLE_WALL; - puVar1->terrainType |= TERRAIN_TYPE_STAIRS; - puVar1->unk8 = 1; + tile = GetTileSafe(gDungeon->unkE23C, gDungeon->unkE23E); + tile->terrainType &= ~(TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY); + tile->terrainType |= TERRAIN_TYPE_NORMAL; + tile->terrainType &= ~TERRAIN_TYPE_IMPASSABLE_WALL; + tile->terrainType |= TERRAIN_TYPE_STAIRS; + tile->unk8 = 1; sub_8049884(); sub_8049B8C(); sub_8049ED4(); @@ -4472,8 +4374,7 @@ void sub_808C5C0(void) CopyMonsterNametoBuffer(gUnknown_202E038, MONSTER_CELEBI); } -// Dummy Celebi Fight Dialogue?? -void nullsub_100(u32 r0, u32 r1, u32 r2) +void nullsub_100(u8 r0, u8 r1, u32 r2) { } @@ -4906,17 +4807,17 @@ void sub_808C938(void) sub_80855E4(sub_808C9B0); } -void sub_808C948(struct Entity *param_1, u8 param_2) +void sub_808C948(struct Entity *entity, u8 param_2) { bool8 flag; s32 index; - struct Entity *iVar2; + struct Entity *pokeEntity; if (param_2 == 0x37) { flag = FALSE; for(index = 0; index < DUNGEON_MAX_WILD_POKEMON; index++){ - iVar2 = gDungeon->wildPokemon[index]; - if ((iVar2 != param_1) && (EntityExists(iVar2) != 0)) { + pokeEntity = gDungeon->wildPokemon[index]; + if ((pokeEntity != entity) && (EntityExists(pokeEntity))) { flag = TRUE; break; } diff --git a/src/code_805A120.c b/src/code_805A120.c index be9239d3c..7bec68cfc 100644 --- a/src/code_805A120.c +++ b/src/code_805A120.c @@ -17,6 +17,8 @@ #include "item.h" #include "moves.h" #include "move_effects_target.h" +#include "move_util.h" +#include "number_util.h" #include "status.h" #include "status_actions.h" #include "tile_types.h" @@ -94,14 +96,12 @@ extern s16 gUnknown_80F501A[]; extern u32 sub_8055864(struct Entity *pokemon, struct Entity *target, struct Move *param_3, s32 param_4, s32 param_5); extern void sub_80943A0(void*, s32); -s32 RoundUpFixedPoint(s32 fixedPointNumber); extern s16 sub_8057600(struct Move*, u32); extern void sub_806CDD4(struct Entity *, u32, u32); extern u8 sub_8044B28(void); extern u8 sub_803F428(struct Position *pos); extern void IncreaseEntityPixelPos(struct Entity *, u32, u32); extern void sub_803E46C(u32); -bool8 sub_80571F0(struct Entity * pokemon, struct Move *move); extern void sub_807EC28(u32); extern void sub_806F370(struct Entity *r0, struct Entity *r1, u32, u32, u8 *, u8, s32, u32, u32, u32); void sub_8075900(struct Entity *pokemon, u8 r1); @@ -116,11 +116,9 @@ void sub_80522F4(struct Entity *r0, struct Entity *r1, char r2[]); extern void sub_806A6E8(struct Entity *); extern u32 sub_8055640(struct Entity *, struct Entity *, struct Move *, u32, u32); extern void sub_807EA30(u32); -extern bool8 sub_805727C(struct Entity *, struct Entity *, s16); extern void sub_806ABAC(struct Entity *, struct Entity *); extern u8 sub_807EAA0(u32, u32); extern void sub_8045C28(struct Item *, u8 , u8); -extern u8 sub_8057308(struct Entity *, u32); extern void sub_805A7D4(struct Entity *, struct Entity *, struct Item *, struct Position *); extern void sub_8045394(struct Entity *, s32, s32); extern void sub_804652C(struct Entity *, struct Entity *, struct Item *, u32, struct Position *); diff --git a/src/code_8069E0C.c b/src/code_8069E0C.c index ed25ad2b6..9b6d5a74e 100644 --- a/src/code_8069E0C.c +++ b/src/code_8069E0C.c @@ -8,6 +8,7 @@ #include "dungeon_pokemon_attributes.h" #include "dungeon_random.h" #include "dungeon_util.h" +#include "move_effects_target.h" #include "pokemon.h" #include "weather.h" #include "game_options.h" @@ -36,7 +37,6 @@ void sub_80522F4(struct Entity *r0, struct Entity *r1, const char r2[]); extern void sub_8042900(struct Entity *r0); extern void sub_8042968(struct Entity *r0); extern void sub_806ABAC(struct Entity *, struct Entity *); -extern void PausedStatusTarget(struct Entity *, struct Entity *,u32,u32,u32); void sub_8041BBC(struct Entity *r0); extern u8 sub_8045888(struct Entity *); extern void sub_806A2BC(struct Entity *, u8); diff --git a/src/code_806CD90.c b/src/code_806CD90.c index ff13c233a..7e8cba71e 100644 --- a/src/code_806CD90.c +++ b/src/code_806CD90.c @@ -6,16 +6,77 @@ #include "dungeon_util.h" #include "pokemon.h" #include "tile_types.h" +#include "random.h" extern u8 sub_806CEBC(struct Entity *); extern void sub_806CCB4(struct Entity *, u8); extern void sub_803E46C(u32); extern bool8 sub_808DA44(s32 a1_, u32 a2_); extern u32 sub_806CF98(struct Entity *); +extern u32 sub_80687D0(s16); +void sub_80053AC(u8 *, s32, u32, u32, u32, u32, u8); +void sub_806CDD4(struct Entity *, u8, u32); extern const u8 gUnknown_8106EEF[]; extern const u8 gDungeonWaterType[]; +void sub_806CC10(void) +{ + struct EntityInfo *entityInfo; + struct Entity *entity; + s32 index; + + for(index = 0; index < DUNGEON_MAX_POKEMON; index++) + { + entity = gDungeon->allPokemon[index]; + if (EntityExists(entity)) { + entityInfo = entity->info; + + if ((entityInfo->unk166 != 0) && (entityInfo->unk166--, (entityInfo->unk166 & 1) == 0)) { + sub_806CDD4(entity,0, (entityInfo->action.direction - 1) & 7); + } + } + } +} + +void sub_806CC70(void) +{ + s32 index; + struct Entity *entity; + for(index = 0; index < DUNGEON_MAX_POKEMON; index++) + { + entity = gDungeon->allPokemon[index]; + if(EntityExists(entity)) + sub_806CCB4(entity, sub_806CEBC(entity)); + } +} + +void sub_806CCB4(struct Entity *entity, u8 param_2) +{ + s32 sVar1; + bool8 flag; + struct EntityInfo *info; + + info = entity->info; + flag = gDungeon->hallucinating; + if (entity == gDungeon->cameraTarget) { + flag = FALSE; + } + entity->unk6B = param_2; + entity->unk6A = param_2; + entity->direction2 = info->action.direction; + entity->direction = info->action.direction; + entity->unk6F = 0; + sVar1 = entity->unk68; + if ((info->waitingStatus != STATUS_DECOY) && (!flag)) { + sub_80053AC(entity->fill28,entity->unk64,entity->unk6A,entity->direction,sVar1,Rand32Bit() & 3,0); + } + else { + sub_80053AC(entity->fill28,sub_80687D0(0x1a5),entity->unk6A,entity->direction,sVar1,Rand32Bit() & 3,0); + } + entity->unk6E = 0; +} + void sub_806CD90(void) { s32 index; @@ -28,22 +89,22 @@ void sub_806CD90(void) } } -void sub_806CDD4(struct Entity *r0, u8 r1, u32 r2) +void sub_806CDD4(struct Entity *entity, u8 r1, u32 r2) { - if(GetEntityType(r0) == ENTITY_MONSTER) + if(GetEntityType(entity) == ENTITY_MONSTER) { - r0->unk6A = r1; - if(r2 < NUM_DIRECTIONS) r0->direction = r2; + entity->unk6A = r1; + if(r2 < NUM_DIRECTIONS) entity->direction = r2; } } -void sub_806CDFC(struct Entity *r0, u8 r1, u32 r2) +void sub_806CDFC(struct Entity *entity, u8 r1, u32 r2) { - if(GetEntityType(r0) == ENTITY_MONSTER) + if(GetEntityType(entity) == ENTITY_MONSTER) { - if(r0->unk6B == r1) + if(entity->unk6B == r1) { - if(r0->direction2 == r2) + if(entity->direction2 == r2) return; else goto change_dir; @@ -51,57 +112,57 @@ void sub_806CDFC(struct Entity *r0, u8 r1, u32 r2) else { change_dir: - sub_806CDD4(r0, r1, r2); + sub_806CDD4(entity, r1, r2); } } } -void sub_806CE34(struct Entity *r0, u32 newDir) +void sub_806CE34(struct Entity *entity, u32 newDir) { - if(GetEntityType(r0) == ENTITY_MONSTER) + if(GetEntityType(entity) == ENTITY_MONSTER) { - r0->unk6A = sub_806CEBC(r0); + entity->unk6A = sub_806CEBC(entity); if(newDir < NUM_DIRECTIONS) { - r0->info->action.direction = newDir & DIRECTION_MASK; - r0->direction = newDir & DIRECTION_MASK; + entity->info->action.direction = newDir & DIRECTION_MASK; + entity->direction = newDir & DIRECTION_MASK; } } } -void sub_806CE68(struct Entity *r0, u32 newDir) +void sub_806CE68(struct Entity *entity, u32 newDir) { - if(GetEntityType(r0) == ENTITY_MONSTER) + if(GetEntityType(entity) == ENTITY_MONSTER) { - r0->unk6A = sub_806CEBC(r0); + entity->unk6A = sub_806CEBC(entity); if(newDir < NUM_DIRECTIONS) { - r0->direction = newDir; + entity->direction = newDir; } } } -void sub_806CE94(struct Entity *r0, u32 newDir) +void sub_806CE94(struct Entity *entity, u32 newDir) { - if(GetEntityType(r0) == ENTITY_MONSTER) + if(GetEntityType(entity) == ENTITY_MONSTER) { - r0->unk6A = 6; + entity->unk6A = 6; if(newDir < NUM_DIRECTIONS) { - r0->direction = newDir; + entity->direction = newDir; } } } -u8 sub_806CEBC(struct Entity *param_1) +u8 sub_806CEBC(struct Entity *entity) { u8 sleep; struct EntityInfo * entityInfo1; struct EntityInfo * entityInfo2; // NOTE: copy needed to match - entityInfo1 = param_1->info; - entityInfo2 = param_1->info; + entityInfo1 = entity->info; + entityInfo2 = entity->info; sleep = entityInfo1->sleep; if ((sleep == STATUS_SLEEP) || (sleep == STATUS_NAPPING) || (sleep == STATUS_NIGHTMARE)) { @@ -117,57 +178,57 @@ u8 sub_806CEBC(struct Entity *param_1) return 0x7; } -void sub_806CEFC(struct Entity *param_1, u32 newDir) +void sub_806CEFC(struct Entity *entity, u32 newDir) { - param_1->info->action.direction = newDir & DIRECTION_MASK; - sub_806CE68(param_1, (newDir & DIRECTION_MASK)); + entity->info->action.direction = newDir & DIRECTION_MASK; + sub_806CE68(entity, (newDir & DIRECTION_MASK)); } -void sub_806CF18(struct Entity *param_1) +void sub_806CF18(struct Entity *entity) { s32 index; struct EntityInfo *entityInfo; - if (EntityExists(param_1)) { - entityInfo = param_1->info; + if (EntityExists(entity)) { + entityInfo = entity->info; for (index = 0; index < 100; index++) { sub_803E46C(0x21); - if (!sub_808DA44(entityInfo->apparentID, param_1->unk6B)) { + if (!sub_808DA44(entityInfo->apparentID, entity->unk6B)) { break; } } } } -u8 sub_806CF54(struct Entity *param_1) +u8 sub_806CF54(struct Entity *entity) { - return param_1->info->unk204; + return entity->info->unk204; } void sub_806CF60(void) { - struct Entity *uVar2; + struct Entity *entity; s32 index; for(index = 0; index < DUNGEON_MAX_POKEMON; index++) { - uVar2 = gDungeon->allPokemon[index]; - if (EntityExists(uVar2)) { - sub_806CF98(uVar2); + entity = gDungeon->allPokemon[index]; + if (EntityExists(entity)) { + sub_806CF98(entity); } } } -u32 sub_806CF98(struct Entity *param_1) +u32 sub_806CF98(struct Entity *entity) { struct Tile *mapTile; u32 uVar3; u16 terrainType; struct EntityInfo *entityInfo; - mapTile = GetTileAtEntitySafe(param_1); + mapTile = GetTileAtEntitySafe(entity); terrainType = mapTile->terrainType & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY); - entityInfo = param_1->info; + entityInfo = entity->info; uVar3 = GetShadowSize(entityInfo->apparentID); if (terrainType == (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY)) { return 6; diff --git a/src/code_80848F0.c b/src/code_80848F0.c index 44a3c8141..506cf141c 100644 --- a/src/code_80848F0.c +++ b/src/code_80848F0.c @@ -357,7 +357,6 @@ void sub_80848F0(void) void DisplayPreFightDialogue(void) { - switch(gDungeon->unk3A0D) { case 0: break; @@ -545,10 +544,9 @@ void DisplayPreFightDialogue(void) sub_8097FF8(); } -void sub_8084E00(struct Entity *param_1,char param_2,char param_3) +void sub_8084E00(struct Entity *entity, u8 param_2, u8 param_3) { - - if (param_2 != '\0') { + if (param_2 != 0) { switch(gDungeon->unk3A0D) { case 0: break; @@ -587,7 +585,7 @@ void sub_8084E00(struct Entity *param_1,char param_2,char param_3) break; case 0x1a: case 0x1b: - sub_8089788(param_1,param_2,gDungeon->unk3A0D); + sub_8089788(entity,param_2,gDungeon->unk3A0D); break; case 0x1d: case 0x1e: @@ -619,13 +617,13 @@ void sub_8084E00(struct Entity *param_1,char param_2,char param_3) sub_808AAF0(param_2,gDungeon->unk3A0D); break; case 0x2e: - sub_808AE54(param_2,gDungeon->unk3A0D,¶m_1->pos.x); + sub_808AE54(param_2,gDungeon->unk3A0D,&entity->pos.x); break; case 0x2f: - sub_808AEC8(param_2,gDungeon->unk3A0D,¶m_1->pos.x); + sub_808AEC8(param_2,gDungeon->unk3A0D,&entity->pos.x); break; case 0x30: - sub_808AF3C(param_2,gDungeon->unk3A0D,¶m_1->pos.x); + sub_808AF3C(param_2,gDungeon->unk3A0D,&entity->pos.x); break; case 0x31: case 0x32: @@ -644,7 +642,7 @@ void sub_8084E00(struct Entity *param_1,char param_2,char param_3) nullsub_100(param_2,gDungeon->unk3A0D,param_3); break; case 0x37: - sub_808C948(param_1,gDungeon->unk3A0D); + sub_808C948(entity,gDungeon->unk3A0D); break; case 0x38: case 0x39: @@ -653,7 +651,7 @@ void sub_8084E00(struct Entity *param_1,char param_2,char param_3) case 0x3C: break; } - if ((param_3 == '\0') && (gDungeon->unk2 != '\0')) { + if ((param_3 == 0) && (gDungeon->unk2 != 0)) { DungeonStartNewBGM(999); } } diff --git a/src/code_80869E4.c b/src/code_80869E4.c index bc0d654ed..2894058bb 100644 --- a/src/code_80869E4.c +++ b/src/code_80869E4.c @@ -1,8 +1,9 @@ #include "global.h" +#include "constants/direction.h" #include "dungeon_entity.h" #include "dungeon_global_data.h" +#include "dungeon_util_1.h" #include "random.h" -#include "constants/direction.h" struct unkStruct_202F3D0 { @@ -19,12 +20,10 @@ EWRAM_DATA struct unkStruct_202F3D0 gUnknown_202F3D0; s8 sub_8002984(s8, u8); void sub_803E708(u32, u32); void sub_80869E4(struct Entity *entity, u32, u8, s8); -extern void sub_80859F0(u32); extern void sub_803E46C(u32); extern void sub_803E9D0(void); extern void SetDungeonBGColorRGB(u32, u32, u32, u32, u32); extern void PlaySoundEffect(u32); -extern struct Entity *xxx_call_GetLeader(void); void SpriteLookAroundEffect(struct Entity *entity); extern void DisplayDungeonDialogue(u32); void sub_8086494(); @@ -40,7 +39,6 @@ extern s32 GetCameraXPos(void); extern s32 GetCameraYPos(void); extern void sub_803F878(u32, u32); extern void sub_8086384(struct Entity *entity); -extern void sub_8085930(u32); extern void IncreaseEntityPixelPos(struct Entity *, u32, u32); extern void sub_806CE68(struct Entity *, u32); extern void sub_806CDD4(struct Entity *, u8, u32); @@ -60,7 +58,7 @@ void sub_80862DC(struct Entity *entity) { struct Position32 pos; pos.x = entity->pixelPos.x; - pos.y = entity->pixelPos.y + (0xE0 << 6); + pos.y = entity->pixelPos.y + 0x3800; sub_804535C(entity, &pos); sub_806CDD4(entity, 0, DIRECTION_NORTH); @@ -71,7 +69,7 @@ void sub_8086310(struct Entity *entity) { struct Position32 pos; pos.x = entity->pixelPos.x; - pos.y = entity->pixelPos.y + (0x90 << 8); + pos.y = entity->pixelPos.y + 0x9000; sub_804535C(entity, &pos); sub_806CE68(entity, DIRECTION_SOUTH); @@ -82,8 +80,8 @@ void sub_8086310(struct Entity *entity) void sub_8086348(struct Entity *entity) { struct Position32 pos; - pos.x = entity->pixelPos.x + (0xF0 << 7); - pos.y = entity->pixelPos.y + 0xffffe000; + pos.x = entity->pixelPos.x + 0x7800; + pos.y = entity->pixelPos.y - 0x2000; sub_804535C(entity, &pos); sub_806CDD4(entity, 0, DIRECTION_WEST); @@ -93,7 +91,7 @@ void sub_8086348(struct Entity *entity) void sub_8086384(struct Entity *entity) { struct Position32 pos; - pos.x = entity->pixelPos.x + (0xF0 << 7); + pos.x = entity->pixelPos.x + 0x7800; pos.y = entity->pixelPos.y; sub_804535C(entity, &pos); @@ -133,17 +131,17 @@ void sub_8086404(struct Entity *entity) void sub_8086410(struct Entity *entity) { - IncreaseEntityPixelPos(entity, 0, 0xffffff00); + IncreaseEntityPixelPos(entity, 0, -0x100); } void sub_8086424(struct Entity *entity) { - IncreaseEntityPixelPos(entity, 0, 0x80 << 1); + IncreaseEntityPixelPos(entity, 0, 0x100); } void sub_8086434(struct Entity *entity) { - IncreaseEntityPixelPos(entity, 0xffffff00, 0); + IncreaseEntityPixelPos(entity, -0x100, 0); } void sub_8086448(void) @@ -306,12 +304,12 @@ void sub_8086690(void) } -void sub_80866C4(u32 entity) +void sub_80866C4(u32 dialogue) { SpriteLookAroundEffect(xxx_call_GetLeader()); sub_803E708(0xA, 0x46); - DisplayDungeonDialogue(entity); + DisplayDungeonDialogue(dialogue); sub_803E708(0xA, 0x46); sub_8086494(); gDungeon->unk2 = 1; diff --git a/src/code_8086A3C.c b/src/code_8086A3C.c index 7ee1402ae..af126aa8e 100644 --- a/src/code_8086A3C.c +++ b/src/code_8086A3C.c @@ -1,22 +1,21 @@ +#include "constants/monster.h" #include "global.h" #include "constants/bg_music.h" #include "constants/direction.h" #include "dungeon_entity.h" #include "dungeon_global_data.h" #include "dungeon_music.h" +#include "dungeon_pokemon_attributes.h" #include "pokemon.h" #include "dungeon_util_1.h" +#include "dungeon_util.h" -extern void LoadIQSkills(struct Entity *); -extern struct Entity *GetPartnerEntity(); -extern struct Entity *xxx_call_GetLeader(void); extern void SetDefaultIQSkills(u8 *param_1, u8 param_2); extern void sub_8097FF8(void); extern u8 sub_8044B28(void); extern u8 HasRecruitedMon(u32); extern u8 gUnknown_202E038[]; extern void sub_8085374(); -extern void sub_80854D4(); extern void sub_80855E4(void *); extern void sub_8068FE0(struct Entity *, u32, u32); extern void sub_8097FA8(u32); @@ -30,7 +29,18 @@ extern void SkarmoryEntry(struct Entity *); extern void SpriteLookAroundEffect(struct Entity *); extern void sub_8086A54(struct Entity *); extern void sub_808563C(void *); +extern void sub_8087144(); +void sub_80866C4(u8 *); +extern void sub_8072008(struct Entity *pokemon, struct Entity *r1, u32 r2, u8 r3, u32); +extern bool8 sub_8085B80(u8 *); +extern void sub_8085B4C(u8 *, void *, struct Entity **, u32); +extern void sub_803E46C(u32); +extern u8 gUnknown_810739C[]; +extern u8 gUnknown_81073D4[]; +extern u8 gUnknown_810740C[]; +extern s16 gUnknown_80F57CC; +extern u8 gUnknown_8101440[]; extern u8 gSkarmoryPreFightDialogue_1; extern u8 gSkarmoryPreFightDialogue_2; extern u8 gSkarmoryPreFightDialogue_3; @@ -43,6 +53,19 @@ extern u8 gSkarmoryPreFightDialogue_9; extern u8 gSkarmoryReFightDialogue_1; extern u8 gSkarmoryReFightDialogue_2; extern u8 gSkarmoryReFightDialogue_3; +extern u8 gTeamMeaniesPreFightDialogue_1; +extern u8 gTeamMeaniesPreFightDialogue_2; +extern u8 gTeamMeaniesPreFightDialogue_3; +extern u8 gTeamMeaniesPreFightDialogue_4; +extern u8 gTeamMeaniesPreFightDialogue_5; +extern u8 gTeamMeaniesPreFightDialogue_6; +extern u8 gTeamMeaniesPreFightDialogue_7; +extern u8 gTeamMeaniesReFightDialogue_1; +extern u8 gTeamMeaniesReFightDialogue_2; +extern u8 gTeamMeaniesReFightDialogue_3; +extern u8 gTeamMeaniesReFightDialogue_4; +extern u8 gTeamMeaniesReFightDialogue_5; + extern u8 gUnknown_8100D3C; void sub_8086A3C(struct Entity *pokemon) @@ -117,7 +140,7 @@ void sub_8086B14(void) sub_80855E4(sub_8086A3C); sub_8086A3C(SkarmoryEntity); DiglettEntity->info->unk15C = 1; - sub_8085860(LeaderEntity->pos.x,LeaderEntity->pos.y + -2); + sub_8085860(LeaderEntity->pos.x,LeaderEntity->pos.y - 2); CopyMonsterNametoBuffer(gUnknown_202E038,MONSTER_DIGLETT); CopyMonsterNametoBuffer(gUnknown_202E038 + 0x50, MONSTER_SKARMORY); } @@ -279,3 +302,186 @@ void sub_8086F00(void) CopyMonsterNametoBuffer(gUnknown_202E038 + 0x50, MONSTER_GENGAR); CopyMonsterNametoBuffer(gUnknown_202E038 + 0xA0, MONSTER_CATERPIE); } + +// From @jiangzhengwenjz: +// Matches this way for -O2 but can match w/o this hack on -O1 +// https://decomp.me/scratch/BTqWo +void sub_8086F54(u8 param_1, u8 param_2) +{ + struct Entity *entity; + s32 index; + u32 unk1 = 0; + + + if (param_2 == 4 || param_2 == 5) { + void *labels[2]; + labels[0] = labels[1] = &&label; + + for(index = 0; index < 0x10; index++) + { + entity = gDungeon->wildPokemon[index]; + if ((EntityExists(entity)) && (entity->info->clientType != param_1)) { + return; + } + } + if(!unk1) + { + sub_8097FA8(3); + label: + gDungeon->unk2 = 1; + } + } +} + +void TeamMeaniesPreFightDialogue(void) +{ + struct Entity *LeaderEntity; + + LeaderEntity = xxx_call_GetLeader(); + sub_8086448(); + sub_803E708(10, 0x46); + DisplayDungeonDialogue(&gTeamMeaniesPreFightDialogue_1); + sub_803E708(10, 0x46); + DisplayDungeonDialogue(&gTeamMeaniesPreFightDialogue_2); + sub_803E708(10, 0x46); + sub_8087144(); + DungeonStartNewBGM(MUS_THERES_TROUBLE); + DisplayDungeonDialogue(&gTeamMeaniesPreFightDialogue_3); + sub_803E708(10, 0x46); + DisplayDungeonDialogue(&gTeamMeaniesPreFightDialogue_4); + sub_803E708(10, 0x46); + DisplayDungeonDialogue(&gTeamMeaniesPreFightDialogue_5); + sub_803E708(10, 0x46); + DisplayDungeonDialogue(&gTeamMeaniesPreFightDialogue_6); + sub_803E708(10, 0x46); + DisplayDungeonDialogue(&gTeamMeaniesPreFightDialogue_7); + sub_803E708(10, 0x46); + ShiftCameraToPosition(&LeaderEntity->pixelPos, 0x10); +} + +void TeamMeaniesReFightDialogue(void) +{ + struct Entity *LeaderEntity; + struct Entity *PartnerEntity; + + LeaderEntity = xxx_call_GetLeader(); + PartnerEntity = GetPartnerEntity(); + sub_8086448(); + DisplayDungeonDialogue(&gTeamMeaniesReFightDialogue_1); + sub_803E708(10, 0x46); + DisplayDungeonDialogue(&gTeamMeaniesPreFightDialogue_2); + sub_803E708(10, 0x46); + sub_8087144(); + sub_803E708(10, 0x46); + DisplayDungeonDialogue(&gTeamMeaniesReFightDialogue_2); + sub_803E708(10, 0x46); + DisplayDungeonDialogue(&gTeamMeaniesReFightDialogue_3); + sub_803E708(10, 0x46); + sub_806CDD4(LeaderEntity, 6, 4); + sub_806CDD4(PartnerEntity, 6, 4); + sub_803E708(10, 0x46); + sub_806CDD4(LeaderEntity, 7, 4); + sub_806CDD4(PartnerEntity, 7, 4); + sub_803E708(10, 0x46); + DisplayDungeonDialogue(&gTeamMeaniesReFightDialogue_4); + DisplayDungeonDialogue(&gTeamMeaniesReFightDialogue_5); + sub_803E708(10, 0x46); + ShiftCameraToPosition(&LeaderEntity->pixelPos, 0x10); +} + +void sub_8087130(void) +{ + sub_8086448(); + sub_80866C4(gUnknown_8101440); +} + +void sub_8087144(void) +{ + struct Entity *iVar2; + struct Entity *iVar3; + struct Entity *iVar4; + u8 auStack_10c [56]; + u8 puStack_60[56]; + u8 puStack_5c[56]; + u8 *puStack_64[3]; + struct Entity *pEStack_58[3]; + u8 auStack_4c [48]; + + iVar2 = GetEntityFromClientType(5); + iVar3 = GetEntityFromClientType(6); + iVar4 = GetEntityFromClientType(7); + memcpy(auStack_10c,gUnknown_810739C, 0x38); + memcpy(puStack_60, gUnknown_81073D4, 0x38); + memcpy(puStack_5c, gUnknown_810740C, 0x38); + puStack_64[0] = auStack_10c; + puStack_64[1] = puStack_60; + puStack_64[2] = puStack_5c; + pEStack_58[0] = iVar2; + pEStack_58[1] = iVar3; + pEStack_58[2] = iVar4; + DungeonStartNewBGM(MUS_THERES_TROUBLE); + sub_8086A54(iVar2); + sub_8086A54(iVar3); + sub_8086A54(iVar4); + sub_8085B4C(auStack_4c,puStack_64,pEStack_58,3); + iVar2->info->unk15F = 1; + iVar3->info->unk15F = 1; + iVar4->info->unk15F = 1; + while( TRUE ) { + if (!sub_8085B80(auStack_4c)) break; + sub_803E46C(0x46); + } + iVar2->info->unk15F = 0; + iVar3->info->unk15F = 0; + iVar4->info->unk15F = 0; +} + +void sub_8087230(void) +{ + struct Entity *LeaderEntity; + struct Entity *ZapdosEntity; + + LeaderEntity = xxx_call_GetLeader(); + ZapdosEntity = GetEntityFromClientType(0x8); + DungeonStartNewBGM(MUS_IN_THE_DEPTHS_OF_THE_PIT); + sub_8085374(); + sub_80854D4(); + sub_8085930(4); + sub_80855E4(sub_8086A3C); + SetFacingDirection(ZapdosEntity, 0); + sub_8086A3C(ZapdosEntity); + sub_8085860(LeaderEntity->pos.x, LeaderEntity->pos.y - 3); + CopyMonsterNametoBuffer(gUnknown_202E038, MONSTER_SHIFTRY); + CopyMonsterNametoBuffer(gUnknown_202E038 + 0x50, MONSTER_ZAPDOS); +} + +void sub_808729C(void) +{ + struct Entity *LeaderEntity; + struct Entity *ZapdosEntity; + + LeaderEntity = xxx_call_GetLeader(); + ZapdosEntity = GetEntityFromClientType(8); + sub_80854D4(); + sub_8085930(4); + sub_80855E4(sub_8086A3C); + if (sub_8086AE4(0x91) != 0) { + sub_8068FE0(ZapdosEntity,0x21c,0); + } + else { + sub_8072008(ZapdosEntity,ZapdosEntity,gUnknown_80F57CC,0,0); + SetFacingDirection(ZapdosEntity,0); + sub_8086A3C(ZapdosEntity); + } + sub_8085860(LeaderEntity->pos.x,LeaderEntity->pos.y - 3); + CopyMonsterNametoBuffer(gUnknown_202E038, MONSTER_SHIFTRY); + CopyMonsterNametoBuffer(gUnknown_202E038 + 0x50, MONSTER_ZAPDOS); +} + +void sub_8087334(u8 param_1, u8 param_2) +{ + if ((param_2 == 7 || param_2 == 8 || param_2 == 9) && (param_1 == 8)) { + sub_8097FA8(5); + gDungeon->unk2 = 1; + } +} diff --git a/src/code_8094F88.c b/src/code_8094F88.c index 6b5148152..00912dd0a 100644 --- a/src/code_8094F88.c +++ b/src/code_8094F88.c @@ -8,15 +8,15 @@ #include "save.h" #include "text_util.h" -extern struct unkStruct_203B480 gUnknown_2038C88; -extern struct unkStruct_203B480 *gUnknown_203B480; -extern struct unkStruct_203B484 gUnknown_2039288; -extern struct unkStruct_203B484 *gUnknown_203B484; -extern struct unkStruct_203B48C gUnknown_20393C0; -extern struct unkStruct_203B48C *gUnknown_203B48C; -extern u32 *gUnknown_203B488; -extern u32 gUnknown_20392E8; +EWRAM_DATA_2 struct unkStruct_203B480 *gUnknown_203B480 = {0}; +EWRAM_DATA_2 struct unkStruct_203B484 *gUnknown_203B484 = {0}; +EWRAM_DATA_2 u32 *gUnknown_203B488 = {0}; +EWRAM_DATA_2 struct unkStruct_203B48C *gUnknown_203B48C = {0}; +extern struct unkStruct_203B480 gUnknown_2038C88; +extern struct unkStruct_203B484 gUnknown_2039288; +extern u32 gUnknown_20392E8; +extern struct unkStruct_203B48C gUnknown_20393C0; extern void SaveDungeonLocation(struct unkStruct_8094924*, struct DungeonLocation*); extern void RestoreDungeonLocation(struct unkStruct_8094924*, struct DungeonLocation*); diff --git a/src/code_80958E8.c b/src/code_80958E8.c index 30a8c4af5..6aeed7d62 100644 --- a/src/code_80958E8.c +++ b/src/code_80958E8.c @@ -13,10 +13,7 @@ extern s32 GetDungeonFloorCount(u8); extern bool8 sub_809017C(struct DungeonLocation *); extern s16 GetBaseSpecies(s16); -extern bool8 IsInvalidItemReward(u8); extern u8 sub_803C1D0(struct DungeonLocation *, u8); -extern bool8 IsNotMoneyOrUsedTMItem(u8); -extern u8 xxx_bit_lut_lookup_8091E50(u8 ,u8 ); extern u32 GetMaxItemsAllowed(u8); extern bool8 sub_803C0DC(s16); extern void ResetMailboxSlot(u8); @@ -24,7 +21,7 @@ extern void ResetPelipperBoardSlot(u8); extern void ResetJobSlot(u8); extern bool8 ValidateWonderMail(struct WonderMail *); -extern struct unkStruct_203B490 *gUnknown_203B490; +EWRAM_DATA_2 struct unkStruct_203B490 *gUnknown_203B490 = {0}; extern struct unkStruct_203B490 gUnknown_2039448; void LoadMailInfo(void) diff --git a/src/code_80972F4.c b/src/code_80972F4.c index 685cd0d2a..8e463a75f 100644 --- a/src/code_80972F4.c +++ b/src/code_80972F4.c @@ -1,17 +1,44 @@ #include "global.h" +#include "constants/dungeon.h" #include "pokemon.h" #include "wonder_mail.h" #include "code_80958E8.h" +#include "dungeon.h" + +struct MissionText +{ + u8 *text; + u8 unk4; + u8 unk5; + u8 unk6; + u8 unk7; +}; +extern struct MissionText gStoryMissionText[]; +extern const char gFinalScenarioText[]; +extern const char gMeetNinetalesText[]; +extern const char gAvoidCaptureText[]; +extern const u8 gUnknown_8109CC0[]; +extern const u8 gDummyScenarioText[]; +extern u8 sub_80A270C(); + +extern void sub_8097FA8(u32); +extern void sub_8097FF8(void); +extern u8 sub_80A2728(s16); +extern bool8 sub_8001D08(u32, u32 ,s32); +extern u32 sub_8001784(u32, u32, u16); +extern void sub_800199C(u8, u8, u16, s32); +extern bool8 sub_80023E4(u32); void SaveWonderMail(struct unkStruct_8094924 *a, struct WonderMail *b); void RestoreWonderMail(struct unkStruct_8094924 *a, struct WonderMail *b); extern s32 sub_8096EB0(struct WonderMail *); extern void SaveDungeonLocation(struct unkStruct_8094924*, struct DungeonLocation*); extern void RestoreDungeonLocation(struct unkStruct_8094924*, struct DungeonLocation*); -extern void sub_80015C0(u32, u32); +extern void sub_80015C0(u8, u8); extern u32 sub_8001784(u32, u32, u16); extern void GeneratePelipperJobs(void); -extern void sub_800199C(u32, s32, u32, s32); +s16 sub_80A26B8(s16); +extern void sub_80018D8(u8, u8, u32); bool8 sub_8096F50(struct WonderMail *mail) { @@ -221,3 +248,228 @@ bool32 sub_8097384(s16 param_1) } return iVar1; } + +void sub_80973A8(s16 param_1,u32 param_2) +{ + s32 sVar1; + s32 param_1_s32 = param_1; + u8 param_2_u32 = param_2; + + if (param_1_s32 != 0xd) { + if (param_2_u32 != 0) { + sVar1 = sub_80A26B8(param_1); + sub_800199C(0,0x2b,param_1_s32,0); + if (sVar1 != -1) { + sub_80018D8(0,0x12,sVar1); + } + } + sub_800199C(0,0x2c,param_1_s32,param_2_u32); + } +} + +s32 sub_80973F4(s32 param_1) +{ + s32 iVar1; + s16 param_1_u16 = param_1; + + if (param_1_u16 == 0xd) { + iVar1 = 0; + } + else { + s32 param_1_s32 = param_1_u16; + u16 param_1_temp = param_1_s32; + iVar1 = sub_8001784(0,0x2d,param_1_temp); + if (iVar1 != 0) { + iVar1 = 1; + } + } + return iVar1; +} + +void sub_8097418(s16 index,u32 param_2) +{ + int index_s32 = index; + u8 param_2_u8 = param_2; + if (index_s32 != 0xd) { + if ((param_2_u8 != 0) && (sub_800199C(0,0x2c,index_s32,0), index_s32 < 0x1f)) { + struct MissionText *mt = &gStoryMissionText[index_s32]; + if (mt->unk4 != 0xFF) { + sub_8097FA8(mt->unk4); + } + if (mt->unk5 != 0xFF) { + sub_8097FA8(mt->unk5); + } + if (index_s32 == 9) { + sub_8097FA8(0x1f); + } + sub_8097FF8(); + } + sub_800199C(0,0x2d,index_s32,param_2_u8); + } +} + +const u8 *sub_809747C(s16 index) +{ + if(index == 0xD) + { + return gDummyScenarioText; + } + else + { + return GetDungeonName1(sub_80A270C(index)); + } +} + +const u8 *sub_80974A0(s16 index) +{ + if(index == 0xD) + { + return gDummyScenarioText; + } + else + { + return GetDungeonName1(sub_80A270C(index)); + } +} + +const u8 *GetCurrentMissionText(s16 index) +{ + if(index < 0x1F) + { + struct MissionText *mt = &gStoryMissionText[index]; + return mt->text; + } + else + { + return gUnknown_8109CC0; + } +} + +void sub_80974E8(void) +{ + sub_80015C0(0, 0x2E); + sub_80015C0(0, 0x2F); +} + +void nullsub_208(void) +{ +} + +bool8 sub_8097504(s16 mazeIndex) +{ + s32 mazeIndex_s32; + +#ifndef NONMATCHING + register s32 mazeIndex_s32_1 asm("r1"); +#else + s32 mazeIndex_s32_1; +#endif + s32 uVar3; + + mazeIndex_s32 = mazeIndex; + mazeIndex_s32_1 = mazeIndex_s32; + + if(mazeIndex_s32 < 17) + { + switch(mazeIndex_s32) { + case 2: + case 10: + case 11: + case 12: + uVar3 = 14; + break; + case 0: + case 1: + case 5: + case 7: + case 9: + case 14: + uVar3 = 15; + break; + case 3: + case 4: + case 6: + case 8: + return TRUE; + case 13: + uVar3 = 6; + break; + default: + return TRUE; + } + } + else + { + if (mazeIndex_s32_1 > 22) return FALSE; + if (mazeIndex_s32_1 == 22) return FALSE; + if (mazeIndex_s32_1 == 21) return FALSE; + uVar3 = 6; + } + + if (!sub_80023E4(uVar3)) { + return FALSE; + } + else { + return TRUE; + } +} + +// TODO: this should probably be bool8 but can't get a match just yet +bool32 IsMazeCompleted(s16 mazeIndex) +{ + bool32 mazeCompletion; + + mazeCompletion = sub_8001784(0, 0x2e, mazeIndex); + if (mazeCompletion) { + mazeCompletion = TRUE; + } + return mazeCompletion; +} + +void sub_80975A8(s16 param_1,u8 param_2) +{ + u16 param_1_u16 = param_1; + sub_800199C(0,0x2e,param_1_u16,param_2); +} + +const u8 *sub_80975C4(s16 index) +{ + return GetDungeonName1(sub_80A2728(index)); +} + +const char *sub_80975DC(u32 r0) +{ + // TODO: slight hack but matches + r0 <<= 16; + if((0xffe90000 + r0) >> 16 < 2) + if(sub_8001D08(0x3, 0xE, -1)) + return gMeetNinetalesText; + else + return gAvoidCaptureText; + else + return gFinalScenarioText; +} + +bool8 HasCompletedAllMazes(void) +{ + s32 index; + for(index = 0; index < NUM_BASIC_DUNGEON_MAZE; index++) + { + if(!(bool8)IsMazeCompleted(index)) + return FALSE; + } + return TRUE; +} + +bool8 sub_8097640(void) +{ + if(sub_8001784(0, 0x2E, 0x1F) == 0 && HasCompletedAllMazes()) + { + sub_800199C(0, 0x2E, 0x1F, 1); + return TRUE; + } + else + { + return FALSE; + } +} diff --git a/src/code_809747C.c b/src/code_809747C.c deleted file mode 100644 index 85576a46a..000000000 --- a/src/code_809747C.c +++ /dev/null @@ -1,193 +0,0 @@ -#include "global.h" -#include "dungeon.h" - - -struct MissionText -{ - u8 *text; - u8 unk4; - u8 unk5; - u8 unk6; - u8 unk7; -}; - -extern struct MissionText gStoryMissionText[]; -extern const u8 gUnknown_8109CC0[]; -extern const u8 gDummyScenarioText[]; -extern const char gFinalScenarioText[]; -extern const char gMeetNinetalesText[]; -extern const char gAvoidCaptureText[]; - -extern u8 sub_80A270C(); -extern void sub_80015C0(u8, u8); -extern u8 sub_80A2728(s16); -extern bool8 sub_8001D08(u32, u32 ,s32); -extern u32 sub_8001784(u32, u32, u16); -extern void sub_800199C(u32, u32, u32, u32); -extern bool8 sub_80023E4(u32); - -const u8 *sub_809747C(s16 index) -{ - if(index == 0xD) - { - return gDummyScenarioText; - } - else - { - return GetDungeonName1(sub_80A270C(index)); - } -} - -const u8 *sub_80974A0(s16 index) -{ - if(index == 0xD) - { - return gDummyScenarioText; - } - else - { - return GetDungeonName1(sub_80A270C(index)); - } -} - -const u8 *GetCurrentMissionText(s16 index) -{ - if(index < 0x1F) - { - struct MissionText *mt = &gStoryMissionText[index]; - return mt->text; - } - else - { - return gUnknown_8109CC0; - } -} - -void sub_80974E8(void) -{ - sub_80015C0(0, 0x2E); - sub_80015C0(0, 0x2F); -} - -void nullsub_208(void) -{ -} - -bool8 sub_8097504(s16 mazeIndex) -{ - s32 mazeIndex_s32; - -#ifndef NONMATCHING - register s32 mazeIndex_s32_1 asm("r1"); -#else - s32 mazeIndex_s32_1; -#endif - s32 uVar3; - - mazeIndex_s32 = mazeIndex; - mazeIndex_s32_1 = mazeIndex_s32; - - if(mazeIndex_s32 < 17) - { - switch(mazeIndex_s32) { - case 2: - case 10: - case 11: - case 12: - uVar3 = 14; - break; - case 0: - case 1: - case 5: - case 7: - case 9: - case 14: - uVar3 = 15; - break; - case 3: - case 4: - case 6: - case 8: - return TRUE; - case 13: - uVar3 = 6; - break; - default: - return TRUE; - } - } - else - { - if (mazeIndex_s32_1 > 22) return FALSE; - if (mazeIndex_s32_1 == 22) return FALSE; - if (mazeIndex_s32_1 == 21) return FALSE; - uVar3 = 6; - } - - if (!sub_80023E4(uVar3)) { - return FALSE; - } - else { - return TRUE; - } -} - -// TODO: this should probably be bool8 but can't get a match just yet -bool32 IsMazeCompleted(s16 mazeIndex) -{ - bool32 mazeCompletion; - - mazeCompletion = sub_8001784(0, 0x2e, mazeIndex); - if (mazeCompletion) { - mazeCompletion = TRUE; - } - return mazeCompletion; -} - -void sub_80975A8(s16 param_1,u8 param_2) -{ - u16 param_1_u16 = param_1; - sub_800199C(0,0x2e,param_1_u16,param_2); -} - -const u8 *sub_80975C4(s16 index) -{ - return GetDungeonName1(sub_80A2728(index)); -} - -const char *sub_80975DC(u32 r0) -{ - // TODO: slight hack but matches - r0 <<= 16; - if((0xffe90000 + r0) >> 16 < 2) - if(sub_8001D08(0x3, 0xE, -1)) - return gMeetNinetalesText; - else - return gAvoidCaptureText; - else - return gFinalScenarioText; -} - -bool8 HasCompletedAllMazes(void) -{ - s32 index; - for(index = 0; index < 17; index++) - { - if(!(bool8)IsMazeCompleted(index)) - return FALSE; - } - return TRUE; -} - -bool8 sub_8097640(void) -{ - if(sub_8001784(0, 0x2E, 0x1F) == 0 && HasCompletedAllMazes()) - { - sub_800199C(0, 0x2E, 0x1F, 1); - return TRUE; - } - else - { - return FALSE; - } -} diff --git a/src/code_8097670.c b/src/code_8097670.c index a86f829e2..8cbb9883f 100644 --- a/src/code_8097670.c +++ b/src/code_8097670.c @@ -3,7 +3,7 @@ struct unkStruct_203B494 { - // size: 0xC8? + // size: 0xC4 u32 unk0; // 32 bit bitfield, I think s32 numAdventures; s32 unk8; @@ -18,8 +18,8 @@ struct unkStruct_203B494 s32 unkC0; }; -extern struct unkStruct_203B494 *gUnknown_203B494; -extern struct unkStruct_203B494 gUnknown_2039778; +EWRAM_DATA_2 struct unkStruct_203B494 *gUnknown_203B494 = {0}; +EWRAM_DATA struct unkStruct_203B494 gUnknown_2039778 = {0}; extern const u8 *gAdventureLogText[]; s16 GetBaseSpeciesNoUnown(s16 index); diff --git a/src/debug_menu.c b/src/debug_menu.c index 03303a073..4ac0b2f0b 100644 --- a/src/debug_menu.c +++ b/src/debug_menu.c @@ -11,7 +11,7 @@ #include "text_util.h" #include "menu_input.h" -extern struct DebugMenu *gUnknown_203B3EC; +EWRAM_DATA_2 struct DebugMenu *gUnknown_203B3EC = {0}; const struct UnkTextStruct2 gUnknown_80E7D40 = { diff --git a/src/dungeon_map_access_1.c b/src/dungeon_map_access_1.c new file mode 100644 index 000000000..e318adf4e --- /dev/null +++ b/src/dungeon_map_access_1.c @@ -0,0 +1,156 @@ +#include "global.h" +#include "dungeon_map_access.h" + +#include "dungeon_global_data.h" +#include "file_system.h" +#include "tile_types.h" +#include "random.h" +#include "dungeon_engine.h" + +extern u16 gUnknown_202B038[4][32][32]; + +extern void sub_80402AC(s32, s32); +extern void sub_80098F8(u32); + +void sub_804AA60(void) { + s32 i; + s32 j; + for(i = 0; i < 0x20; i++) + { + for(j = 0; j < 0x20; j++) + { + gUnknown_202B038[2][i][j] = 0; + } + } + sub_80098F8(2); + gDungeon->unk1821A = 0; +} + +void sub_804AAAC(void) +{ + s32 x; + s32 y; + struct Tile *tile; + for(y = 0; y < DUNGEON_MAX_SIZE_Y; y++) + { + for(x = 0; x < DUNGEON_MAX_SIZE_X; x++) + { + tile = GetTileSafe(x,y); + tile->unk4 = 0; + } + } +} + +void sub_804AAD4(void) +{ + struct Tile *tile; + struct RoomData *room1; + struct RoomData *room2; + s32 roomIndex; + int x; + int y; + s32 maxRooms; + s32 index; + + for(index = 0; index < 0x20; index++) + { + gDungeon->roomData[index].unk0 = 0; + gDungeon->roomData[index].unk1 = 0; + gDungeon->roomData[index].bottomRightCornerX = 9999; + gDungeon->roomData[index].bottomRightCornerY = 9999; + gDungeon->roomData[index].topLeftCornerX = 0xd8f1; + gDungeon->roomData[index].topLeftCornerY = 0xd8f1; + } + + maxRooms = 0; + for(y = 0; y < DUNGEON_MAX_SIZE_Y; y++) + { + for(x = 0; x < DUNGEON_MAX_SIZE_X; x++) + { + tile = GetTile(x,y); + roomIndex = tile->room; + if (roomIndex != CORRIDOR_ROOM) { + room1 = &gDungeon->roomData[roomIndex]; + room1->unk0 = 1; + if (room1->bottomRightCornerX > x) { + room1->bottomRightCornerX = x; + } + if (room1->bottomRightCornerY > y) { + room1->bottomRightCornerY = y; + } + if (room1->topLeftCornerX < x + 1) { + room1->topLeftCornerX = x + 1; + } + if (room1->topLeftCornerY < y + 1) { + room1->topLeftCornerY = y + 1; + } + if (maxRooms < roomIndex) { + maxRooms = roomIndex; + } + } + } + } + + + for(index = 0; index < 0x20; index++) + { + room2 = &gDungeon->roomData[index]; + if(room2 ->unk0 != 0) + { + room2->unkC = (room2->bottomRightCornerX - 1) * 24; + room2->unk10 = (room2->bottomRightCornerY - 1) * 24; + room2->unk14 = (room2->topLeftCornerX + 1) * 24; + room2->unk18 = (room2->topLeftCornerY + 1) * 24; + } + } + + gDungeon->unk104C0 = maxRooms + 1; +} + +void sub_804AC20(struct Position *pos) +{ + s32 y; + struct Tile *tile2; + struct Tile *tile; + s32 yMax; + u32 visibilityRange; + s32 xMin; + s32 x; + s32 xMax; + s32 yMin; + s32 roomIndex; + struct RoomData *room; + + tile2 = GetTile(pos->x,pos->y); + roomIndex = tile2->room; + visibilityRange = gDungeon->visibilityRange; + if (!gDungeon->blinded) { + if (visibilityRange == 0) { + visibilityRange = 2; + } + if (roomIndex == CORRIDOR_ROOM) { + xMin = pos->x - visibilityRange; + yMin = pos->y - visibilityRange; + xMax = pos->x + visibilityRange; + yMax = pos->y + visibilityRange; + } + else { + room = &gDungeon->roomData[roomIndex]; + if (room->unk1 != 0) { + return; + } + room->unk1 = 1; + xMin = room->bottomRightCornerX - 1; + yMin = room->bottomRightCornerY - 1; + xMax = room->topLeftCornerX; + yMax = room->topLeftCornerY; + } + for (y = yMin; y <= yMax; y++) { + for (x = xMin; x <= xMax; x++) { + tile = GetTileSafe(x,y); + tile->unk4 = tile->unk4 | 3; + sub_80402AC(x,y); + } + } + } +} diff --git a/src/dungeon_util_1.c b/src/dungeon_util_1.c index 7a171962d..c9bbd4e0a 100644 --- a/src/dungeon_util_1.c +++ b/src/dungeon_util_1.c @@ -2,7 +2,9 @@ #include "dungeon_util_1.h" #include "constants/direction.h" +#include "constants/dungeon.h" #include "dungeon_global_data.h" +#include "dungeon_leader.h" #include "dungeon_util.h" #include "random.h" @@ -21,10 +23,97 @@ extern void sub_8068FE0(struct Entity *, u32, u8 *); extern void sub_80457DC(u8 *); extern void sub_80861D4(struct Entity *, u32, s32 direction); extern void sub_80694C0(struct Entity *, s32, s32, u32); -extern struct Entity *GetPartnerEntity(); typedef void (*DungeonCallback)(struct Entity *); +struct Entity *xxx_call_GetLeader(void) +{ + return GetLeader(); +} + +struct Entity *GetPartnerEntity(void) +{ + s32 counter; + struct Entity *entity; + for(counter = 0; counter < MAX_TEAM_MEMBERS; counter++) + { + entity = gDungeon->teamPokemon[counter]; + if(EntityExists(entity) && entity->info->joinedAt == DUNGEON_JOIN_LOCATION_PARTNER) + { + return entity; + } + } + return GetEntityFromClientType(CLIENT_TYPE_PARTNER); +} + +void sub_80854D4(void) +{ + struct Entity *stack1[MAX_TEAM_MEMBERS]; + struct Entity *stack2[MAX_TEAM_MEMBERS]; + s32 counter = 0; + s32 index; + struct Entity *entity; + struct Entity *entity2; + struct Entity *entity3; + struct Entity *entity4; + struct Entity *entity5; + + for(index = 0; index < MAX_TEAM_MEMBERS; index++) + { + entity = gDungeon->teamPokemon[index]; + if(EntityExists(entity)) + { + stack1[counter] = entity; + counter++; + } + } + for(; counter < MAX_TEAM_MEMBERS; counter++) + { + stack1[counter] = NULL; + } + counter = 0; + for(index = 0; index < MAX_TEAM_MEMBERS; index++) + { + entity2 = stack1[index]; + if(entity2 != NULL && entity2->info->isTeamLeader) + { + stack1[index] = NULL; + stack2[counter] = entity2; + counter++; + } + } + for(index = 0; index < MAX_TEAM_MEMBERS; index++) + { + entity3 = stack1[index]; + if(entity3 != NULL && entity3->info->joinedAt == DUNGEON_JOIN_LOCATION_PARTNER) + { + stack1[index] = NULL; + stack2[counter] = entity3; + counter++; + } + } + for(index = 0; index < MAX_TEAM_MEMBERS; index++) + { + entity4 = stack1[index]; + if(entity4 != NULL) + { + stack1[index] = NULL; + stack2[counter] = entity4; + counter++; + } + } + for(; counter < MAX_TEAM_MEMBERS; counter++) + { + stack2[counter] = NULL; + } + for(index = 0; index < MAX_TEAM_MEMBERS; index++) + { + entity5 = stack2[index]; + if(entity5 != NULL) + sub_80856C8(entity5, gDungeon->unkE220[index].x, gDungeon->unkE220[index].y); + } +} + void sub_80855E4(DungeonCallback func) { bool8 flag; @@ -37,7 +126,7 @@ void sub_80855E4(DungeonCallback func) { entity = gDungeon->teamPokemon[index]; if (EntityExists(entity)) { - if (entity->info->joinedAt == 0x41) { + if (entity->info->joinedAt == DUNGEON_JOIN_LOCATION_PARTNER) { flag = TRUE; } func(entity); @@ -116,7 +205,7 @@ void sub_8085764(void) for(index = 0; index < DUNGEON_MAX_WILD_POKEMON; index++) { entity = gDungeon->wildPokemon[index]; - if ((EntityExists(entity)) && (entity->info->clientType == 2)) { + if ((EntityExists(entity)) && (entity->info->clientType == CLIENT_TYPE_PARTNER)) { sub_8068FE0(entity,0x207,auStack128); } } @@ -215,7 +304,7 @@ void sub_8085930(s32 direction) entity = gDungeon->wildPokemon[index]; if(EntityExists(entity)) { - if(entity->info->clientType == 2) + if(entity->info->clientType == CLIENT_TYPE_PARTNER) { if(direction >= NUM_DIRECTIONS) { @@ -291,7 +380,7 @@ bool8 IsMovingClient(struct Entity *pokemon) case 0x24: return TRUE; case CLIENT_TYPE_NONE: - case 0x2: + case CLIENT_TYPE_PARTNER: case CLIENT_TYPE_DONT_MOVE: case 0xA: case 0xB: diff --git a/src/friend_area_action_menu_1.c b/src/friend_area_action_menu_1.c index fa2b1bcf5..22a863f1f 100644 --- a/src/friend_area_action_menu_1.c +++ b/src/friend_area_action_menu_1.c @@ -1,4 +1,5 @@ #include "global.h" +#include "constants/dungeon.h" #include "memory.h" #include "text.h" #include "input.h" @@ -268,7 +269,7 @@ void sub_8027A5C(void) } static inline bool8 sub_8027A78_sub(void) { - if (gUnknown_203B2BC->pokeStruct->dungeonLocation.id == 0x44 || gUnknown_203B2BC->pokeStruct->dungeonLocation.id == 0x45) + if (gUnknown_203B2BC->pokeStruct->dungeonLocation.id == DUNGEON_HOWLING_FOREST_2 || gUnknown_203B2BC->pokeStruct->dungeonLocation.id == DUNGEON_POKEMON_SQUARE) return TRUE; else return FALSE; @@ -459,7 +460,7 @@ bool8 sub_8027D9C(struct PokemonStruct *pokeStruct) if(!pokeStruct->isTeamLeader) { var1 = 0; - if(pokeStruct->dungeonLocation.id == 0x41) + if(pokeStruct->dungeonLocation.id == DUNGEON_JOIN_LOCATION_PARTNER) var1 = 1; if(var1 != 0) { @@ -480,7 +481,7 @@ bool8 sub_8027DCC(struct PokemonStruct *pokeStruct) if(!pokeStruct->isTeamLeader) { var1 = 0; - if(pokeStruct->dungeonLocation.id == 0x41) + if(pokeStruct->dungeonLocation.id == DUNGEON_JOIN_LOCATION_PARTNER) var1 = 1; if(var1 != 0) { diff --git a/src/friend_list_menu.c b/src/friend_list_menu.c index 265a9e38c..827fc8318 100644 --- a/src/friend_list_menu.c +++ b/src/friend_list_menu.c @@ -1,4 +1,5 @@ #include "global.h" +#include "constants/dungeon.h" #include "memory.h" #include "text.h" #include "input.h" @@ -115,7 +116,6 @@ extern void sub_8008C54(u32); extern void sub_80073B8(u32); extern void sub_80073E0(u32); extern void xxx_format_and_draw(s32, s32, const u8 *, ...); -bool8 sub_8025EC4(struct PokemonStruct *); extern u32 sub_8023A94(u32); extern s16 sub_8023B44(void); extern void sub_8023C60(void); @@ -123,22 +123,6 @@ extern void sub_80141B4(const char *r0, u32, struct OpenedFile **r1, u32); extern s16 sub_80A5728(void); extern u8 sub_8002658(s16); extern bool8 sub_8024108(u32); -extern void sub_8025434(s32); -extern void sub_80259F0(void); -extern void sub_8025A84(void); -extern void sub_8025BCC(void); -extern void sub_8025BE8(void); -extern void sub_8025C04(void); -extern void sub_8025CB4(void); -extern void sub_8025D90(void); -extern void sub_8025DAC(void); -extern void sub_8025E08(void); -extern void sub_8025E24(void); -extern void sub_8025E44(void); -extern void sub_802544C(void); -extern void sub_8025518(void); -extern void sub_8025728(void); -extern void sub_802591C(void); extern u32 sub_801B3C0(struct Item *param_1); extern void sub_8023868(u32, u32, u32, u32); extern void sub_801F1B0(u32, u32); @@ -164,8 +148,7 @@ extern u32 sub_801F194(void); extern void sub_801F214(void); extern void sub_801EE10(u32, s16, struct Move *, u32, u32, u32); extern void sub_801F808(u16 *); -u32 sub_801602C(u32 r0, u8 *name); -void sub_8025E68(u32 , struct BulkItem *); +extern u32 sub_801602C(u32 r0, u8 *name); extern u32 sub_801A6E8(u32); extern u32 sub_801A8AC(void); extern void sub_8099690(u32); @@ -177,10 +160,29 @@ extern u32 sub_8016080(void); extern s32 sub_80144A4(s32 *); extern bool8 sub_80023E4(u32); +void sub_8025434(s32); +void sub_802544C(void); +void sub_8025518(void); +void sub_8025728(void); +void sub_802591C(void); +void sub_80259F0(void); +void sub_8025A84(void); +void sub_8025BCC(void); +void sub_8025BE8(void); +void sub_8025C04(void); +void sub_8025CB4(void); +void sub_8025D90(void); +void sub_8025DAC(void); +void sub_8025E08(void); +void sub_8025E24(void); +void sub_8025E44(void); +void sub_8025E68(u32 , struct BulkItem *); +bool8 sub_8025EC4(struct PokemonStruct *); + + bool8 sub_80252F0(s32 param_1) { - - if ((param_1 == 2) && (sub_8024108(4) != '\0')) { + if ((param_1 == 2) && (sub_8024108(4) != 0)) { return FALSE; } else { @@ -770,17 +772,17 @@ void sub_8025E68(u32 r0, struct BulkItem *heldItem) sub_80073E0(r0); } -bool8 sub_8025EC4(struct PokemonStruct *param_1) +bool8 sub_8025EC4(struct PokemonStruct *pokeStruct) { bool32 flag; - if (param_1->isTeamLeader) + if (pokeStruct->isTeamLeader) { return FALSE; } else { flag = FALSE; - if(param_1->dungeonLocation.id == 0x41) + if(pokeStruct->dungeonLocation.id == DUNGEON_JOIN_LOCATION_PARTNER) flag = TRUE; if(flag && !sub_80023E4(8)) return FALSE; diff --git a/src/game_options.c b/src/game_options.c index a662e5199..e83099501 100644 --- a/src/game_options.c +++ b/src/game_options.c @@ -1,4 +1,3 @@ -#include "gba/defines.h" #include "global.h" #include "game_options.h" #include "code_8092334.h" diff --git a/src/ground_link.c b/src/ground_link.c index ccdc052e5..b8ee8853f 100644 --- a/src/ground_link.c +++ b/src/ground_link.c @@ -13,7 +13,7 @@ struct unkStruct_203B4B8 u32 unk0; }; -extern struct unkStruct_203B4B8 gUnknown_203B4B8; +EWRAM_DATA_2 struct unkStruct_203B4B8 gUnknown_203B4B8 = {0}; extern struct DebugLocation gUnknown_8118798; extern struct unkStruct_80A77D0 *sub_80A77D0(s16 r0, struct DebugLocation *r1); diff --git a/src/hints_menu.c b/src/hints_menu.c index 789e58489..4ac53dc58 100644 --- a/src/hints_menu.c +++ b/src/hints_menu.c @@ -14,11 +14,7 @@ struct Hints struct unkStruct_203B268 { // size: 0xA0 - u32 unk0; - u8 fill4[0x1E - 0x4]; - s16 helpPageIndex; - u16 unk20; - u8 fill22[0x34 - 0x22]; + struct MenuInputStruct input; u32 unk34; struct UnkTextStruct2 *unk38; struct UnkTextStruct2 unk3C[4]; @@ -28,14 +24,7 @@ struct unkStruct_203B268 struct unkStruct_203B264 { // size: 0x9C - u32 unk0; - u8 fill4[0x18 - 0x4]; - s16 unk18; - s16 unk1A; - s16 unk1C; - s16 unk1E; - u16 unk20; - u8 fill22[0x34 - 0x22]; + struct MenuInputStruct input; u32 unk34; struct UnkTextStruct2 *unk38; struct UnkTextStruct2 unk3C[4]; @@ -53,9 +42,9 @@ extern struct Hints gGameHints[MAX_HINTS]; extern u8 gUnknown_80DC0D4[MAX_HINTS]; extern void sub_801E714(void); -extern void sub_8013818(void *, u32, u32, u32); -extern bool8 sub_8013938(void *); -extern s32 GetKeyPress(void *); +extern void sub_8013818(struct MenuInputStruct *, u32, u32, u32); +extern bool8 sub_8013938(struct MenuInputStruct *); +extern s32 GetKeyPress(struct MenuInputStruct *); extern void PlayMenuSoundEffect(u32); extern void sub_801E714(void); extern void sub_801E76C(void); @@ -63,14 +52,14 @@ extern void DisplayChosenHint(void); extern void xxx_call_draw_string(s32, u32, u8 *, u32, u32); extern void sub_80073E0(u32); extern void sub_80073B8(u32); -extern s32 sub_8013800(void *, u32); +extern s32 sub_8013800(struct MenuInputStruct *, u32); extern void sub_8008C54(u32); void DrawHintSelectionMenu(void); void sub_801E594(void); -void sub_8013984(void *); -void AddMenuCursorSprite(void *); -extern u8 sub_80138B8(void *, u32); -extern void sub_8013660(void *); +void sub_8013984(struct MenuInputStruct *); +void AddMenuCursorSprite(struct MenuInputStruct *); +extern u8 sub_80138B8(struct MenuInputStruct *, u32); +extern void sub_8013660(struct MenuInputStruct *); extern void sub_8012D08(struct UnkTextStruct2 *, u32); u32 sub_801E3F0(u32 r0) @@ -84,7 +73,7 @@ u32 sub_801E3F0(u32 r0) sub_8012D08(gUnknown_203B264->unk38, 0xA); ResetUnusedInputStruct(); sub_800641C(gUnknown_203B264->unk3C, 1, 1); - sub_8013818(gUnknown_203B264, 0x5, 0xA, r0); + sub_8013818(&gUnknown_203B264->input, 0x5, 0xA, r0); sub_801E594(); DrawHintSelectionMenu(); return 1; @@ -94,10 +83,10 @@ u32 sub_801E474(u8 r0) { if(r0 == 0) { - sub_8013660(gUnknown_203B264); + sub_8013660(&gUnknown_203B264->input); return 0; } - switch(GetKeyPress(gUnknown_203B264)) + switch(GetKeyPress(&gUnknown_203B264->input)) { case 2: PlayMenuSoundEffect(1); @@ -109,7 +98,7 @@ u32 sub_801E474(u8 r0) PlayMenuSoundEffect(4); return 4; default: - if(sub_80138B8(gUnknown_203B264, 1)) + if(sub_80138B8(&gUnknown_203B264->input, 1)) { sub_801E594(); DrawHintSelectionMenu(); @@ -122,18 +111,18 @@ u32 sub_801E474(u8 r0) s32 GetChosenHintIndex(void) { - return (gUnknown_203B264->unk1E * gUnknown_203B264->unk1C) + gUnknown_203B264->unk18; + return (gUnknown_203B264->input.unk1E * gUnknown_203B264->input.unk1C) + gUnknown_203B264->input.menuIndex; } void CreateHintSelectionScreen(u8 r0) { ResetUnusedInputStruct(); sub_800641C(gUnknown_203B264->unk3C, 0, 0); - sub_8013984(gUnknown_203B264); + sub_8013984(&gUnknown_203B264->input); sub_801E594(); DrawHintSelectionMenu(); if(r0) - AddMenuCursorSprite(gUnknown_203B264); + AddMenuCursorSprite(&gUnknown_203B264->input); } void sub_801E54C(void) @@ -202,7 +191,7 @@ void DrawHintSelectionMenu(void) xxx_call_draw_string(16, 0, gUnknown_80DC0D4, gUnknown_203B264->unk34, 0); for(hintIndex = 0; hintIndex < MAX_HINTS; hintIndex++) { - y = sub_8013800(gUnknown_203B264, hintIndex); + y = sub_8013800(&gUnknown_203B264->input, hintIndex); xxx_call_draw_string(10, y, gGameHints[hintIndex].heading, gUnknown_203B264->unk34, 0); } sub_80073E0(gUnknown_203B264->unk34); @@ -218,8 +207,8 @@ u32 CreateHintDisplayScreen(u32 index) gUnknown_203B268->unk38->unk14 = gUnknown_203B268->unk9C; ResetUnusedInputStruct(); sub_800641C(gUnknown_203B268->unk3C, 1, 1); - sub_8013818(gUnknown_203B268, 5, 1, gUnknown_203B268->unk34); - gUnknown_203B268->helpPageIndex = index; + sub_8013818(&gUnknown_203B268->input, 5, 1, gUnknown_203B268->unk34); + gUnknown_203B268->input.unk1E = index; sub_801E714(); return 1; @@ -227,7 +216,7 @@ u32 CreateHintDisplayScreen(u32 index) u32 HandleHintDisplayScreenInput(void) { - switch(GetKeyPress(gUnknown_203B268)) + switch(GetKeyPress(&gUnknown_203B268->input)) { case 2: PlayMenuSoundEffect(1); @@ -236,7 +225,7 @@ u32 HandleHintDisplayScreenInput(void) PlayMenuSoundEffect(0); return 3; default: - if(sub_8013938(gUnknown_203B268)){ + if(sub_8013938(&gUnknown_203B268->input)){ sub_801E714(); return 1; } @@ -265,8 +254,8 @@ void DestroyHintDisplayScreen(void) void sub_801E76C(void) { - gUnknown_203B268->unk9C[0] = gUnknown_203B268->unk20; - gUnknown_203B268->unk9C[1] = gUnknown_203B268->helpPageIndex; + gUnknown_203B268->unk9C[0] = gUnknown_203B268->input.unk20; + gUnknown_203B268->unk9C[1] = gUnknown_203B268->input.unk1E; gUnknown_203B268->unk9C[2] = 0xF; gUnknown_203B268->unk9C[3] = 0; ResetUnusedInputStruct(); @@ -276,7 +265,7 @@ void sub_801E76C(void) void DisplayChosenHint(void) { sub_80073B8(gUnknown_203B268->unk34); - xxx_call_draw_string((gUnknown_203B268->helpPageIndex << 3) + 0x10, 0, gGameHints[gUnknown_203B268->helpPageIndex].heading, gUnknown_203B268->unk34, 0); - xxx_call_draw_string(0xA, 0x14, gGameHints[gUnknown_203B268->helpPageIndex].body, gUnknown_203B268->unk34, 0); + xxx_call_draw_string((gUnknown_203B268->input.unk1E << 3) + 0x10, 0, gGameHints[gUnknown_203B268->input.unk1E].heading, gUnknown_203B268->unk34, 0); + xxx_call_draw_string(0xA, 0x14, gGameHints[gUnknown_203B268->input.unk1E].body, gUnknown_203B268->unk34, 0); sub_80073E0(gUnknown_203B268->unk34); } diff --git a/src/items.c b/src/items.c index 5b3c956e9..89b5b5e62 100644 --- a/src/items.c +++ b/src/items.c @@ -1,4 +1,5 @@ #include "global.h" +#include "constants/colors.h" #include "file_system.h" #include "item.h" #include "moves.h" @@ -703,7 +704,7 @@ u32 sub_80913E0(struct Item* slot, u32 a2, struct subStruct_203B240 ** a3) u32 result; InitPokemonMove(buffer8, move); - sub_80078A4(a2, 4, 82, 200, 7); + sub_80078A4(a2, 4, 82, 200, COLOR_WHITE_2); xxx_format_and_draw(4, 84, gPtrTypeText, a2, 0); moves_data = GetMoveType(buffer8); typestring = GetUnformattedTypeString(moves_data); @@ -1500,7 +1501,7 @@ void ClearAllItems_8091FB4() { } } -bool32 IsInvalidItemReward(u8 itemID) +bool8 IsInvalidItemReward(u8 itemID) { s32 index; diff --git a/src/kecleon_items_1.c b/src/kecleon_items_1.c index 54de26d19..933b07d0d 100644 --- a/src/kecleon_items_1.c +++ b/src/kecleon_items_1.c @@ -45,7 +45,7 @@ extern void DrawTeamMoneyBox(u32); extern void sub_8008C54(u32); extern void sub_80073B8(u32); extern void sub_80073E0(u32); -extern s32 sub_8013800(void *, u32); +extern s32 sub_8013800(struct MenuInputStruct *, u32); extern void xxx_call_draw_string(s32 x, s32, u8 *, u32, u32); extern void xxx_format_and_draw(u32, u32, u8 *, u32, u32); extern s32 sub_801AED0(s32); @@ -64,14 +64,7 @@ extern struct unkStruct_203B224 *gUnknown_203B224; struct unkStruct_203B214 {; // size: 0xA0 - u8 fill0[0x18]; - u16 unk18; - s16 unk1A; - s16 unk1C; - s16 unk1E; - s16 unk20; - u16 shopItemCount; - u8 fill24[0x34 - 0x24]; + struct MenuInputStruct input; u32 unk34; struct UnkTextStruct2 *unk38; struct UnkTextStruct2 unk3C[4]; @@ -81,14 +74,14 @@ struct unkStruct_203B214 extern struct unkStruct_203B214 *gUnknown_203B214; extern struct unkStruct_203B214 *gUnknown_203B21C; -extern void sub_8013818(void *, u32, u32, u32); +extern void sub_8013818(struct MenuInputStruct *, u32, u32, u32); extern u8 sub_8019FB0(void); -extern u8 sub_80138B8(void *, u32); +extern u8 sub_80138B8(struct MenuInputStruct *, u32); extern void PlayMenuSoundEffect(u32); -extern s32 GetKeyPress(void *); -extern void sub_8013660(void *); +extern s32 GetKeyPress(struct MenuInputStruct *); +extern void sub_8013660(struct MenuInputStruct *); extern struct UnkTextStruct2 gUnknown_80DB8CC; extern struct UnkTextStruct2 gUnknown_80DB8B4; @@ -98,10 +91,10 @@ extern struct UnkTextStruct2 gUnknown_80DB95C; extern const struct UnkTextStruct2 gUnknown_80DB914; extern void sub_801A430(void); extern void sub_801A4A4(void); -extern void sub_8013984(u8 *); +extern void sub_8013984(struct MenuInputStruct*); extern void sub_801A064(void); extern void sub_801A0D8(void); -extern void AddMenuCursorSprite(void *); +extern void AddMenuCursorSprite(struct MenuInputStruct *); extern u8 sub_801A37C(void); extern void sub_801A010(void); @@ -616,9 +609,9 @@ u32 sub_8019E40(u32 r0) gUnknown_203B214->unk38->unk14 = gUnknown_203B214->unk9C; ResetUnusedInputStruct(); sub_800641C(gUnknown_203B214->unk3C, 1, 1); - sub_8013818(gUnknown_203B214, CountKecleonShopItems(), 0xA, r0); - gUnknown_203B214->unk18 = gUnknown_203B218; - sub_8013984((u8 *)gUnknown_203B214); + sub_8013818(&gUnknown_203B214->input, CountKecleonShopItems(), 0xA, r0); + gUnknown_203B214->input.menuIndex = gUnknown_203B218; + sub_8013984(&gUnknown_203B214->input); sub_801A064(); sub_801A0D8(); return 1; @@ -632,12 +625,12 @@ u32 sub_8019EDC(u8 r0) if(r0 == 0) { - sub_8013660(gUnknown_203B214); + sub_8013660(&gUnknown_203B214->input); return 0; } else { - switch(GetKeyPress(gUnknown_203B214)) + switch(GetKeyPress(&gUnknown_203B214->input)) { case INPUT_B_BUTTON: PlayMenuSoundEffect(1); @@ -659,7 +652,7 @@ u32 sub_8019EDC(u8 r0) PlayMenuSoundEffect(4); return 4; default: - if(sub_80138B8(gUnknown_203B214, 1) != 0) + if(sub_80138B8(&gUnknown_203B214->input, 1) != 0) { sub_801A064(); sub_801A0D8(); @@ -675,26 +668,26 @@ u32 sub_8019EDC(u8 r0) u8 sub_8019FB0(void) { - return (gUnknown_203B214->unk1E * gUnknown_203B214->unk1C) + (u8)gUnknown_203B214->unk18; + return (gUnknown_203B214->input.unk1E * gUnknown_203B214->input.unk1C) + (u8)gUnknown_203B214->input.menuIndex; } void sub_8019FCC(u8 r0) { ResetUnusedInputStruct(); sub_800641C(gUnknown_203B214->unk3C, 0, 0); - gUnknown_203B214->shopItemCount = CountKecleonShopItems(); - sub_8013984((u8 *)gUnknown_203B214); + gUnknown_203B214->input.unk22 = CountKecleonShopItems(); + sub_8013984(&gUnknown_203B214->input); sub_801A064(); sub_801A0D8(); if(r0) - AddMenuCursorSprite(gUnknown_203B214); + AddMenuCursorSprite(&gUnknown_203B214->input); } void sub_801A010(void) { if(gUnknown_203B214 != NULL) { - gUnknown_203B218 = gUnknown_203B214->unk18; + gUnknown_203B218 = gUnknown_203B214->input.menuIndex; gUnknown_203B214->unk3C[gUnknown_203B214->unk34] = gUnknown_80DB8B4; ResetUnusedInputStruct(); sub_800641C(gUnknown_203B214->unk3C, 1, 1); @@ -775,18 +768,14 @@ void sub_801A0D8(void) struct Item item; u8 temp_calc; - // Needed for the shifts.. - u32 index_shift; - u32 quantity_shift; - sub_8008C54(gUnknown_203B214->unk34); sub_80073B8(gUnknown_203B214->unk34); - xxx_call_draw_string(gUnknown_203B214->unk1E * 8 + 10,0,gUnknown_80DB8E4, + xxx_call_draw_string(gUnknown_203B214->input.unk1E * 8 + 10,0,gUnknown_80DB8E4, gUnknown_203B214->unk34,0); - for(index = 0; index < gUnknown_203B214->unk1A; index++) + for(index = 0; index < gUnknown_203B214->input.unk1A; index++) { - temp_calc = (gUnknown_203B214->unk1E * gUnknown_203B214->unk1C) + index; + temp_calc = (gUnknown_203B214->input.unk1E * gUnknown_203B214->input.unk1C) + index; heldItem = GetKecleonShopItem(temp_calc); item.id = heldItem->id; item.quantity = heldItem->quantity; @@ -798,12 +787,12 @@ void sub_801A0D8(void) sub_8090E14(auStack204,&item,&local_7c); buyPrice = GetStackBuyPrice(&item); if (buyPrice <= gTeamInventory_203B460->teamMoney) { - y = sub_8013800(gUnknown_203B214,index); + y = sub_8013800(&gUnknown_203B214->input,index); xxx_call_draw_string(8,y,auStack204,gUnknown_203B214->unk34,0); } else { sprintfStatic(auStack112,gUnknown_80DB8EC,auStack204); - y = sub_8013800(gUnknown_203B214,index); + y = sub_8013800(&gUnknown_203B214->input,index); xxx_call_draw_string(8,y,auStack112,gUnknown_203B214->unk34,0); } } @@ -826,9 +815,9 @@ u32 sub_801A20C(u32 r0) gUnknown_203B21C->unk38->unk14 = gUnknown_203B21C->unk9C; ResetUnusedInputStruct(); sub_800641C(gUnknown_203B21C->unk3C, 1, 1); - sub_8013818(gUnknown_203B21C, CountKecleonWareItems(), 0xA, r0); - gUnknown_203B21C->unk18 = gUnknown_203B220; - sub_8013984((u8 *)gUnknown_203B21C); + sub_8013818(&gUnknown_203B21C->input, CountKecleonWareItems(), 0xA, r0); + gUnknown_203B21C->input.menuIndex = gUnknown_203B220; + sub_8013984(&gUnknown_203B21C->input); sub_801A430(); sub_801A4A4(); return 1; @@ -842,12 +831,12 @@ u32 sub_801A2A8(u8 r0) if(r0 == 0) { - sub_8013660(gUnknown_203B21C); + sub_8013660(&gUnknown_203B21C->input); return 0; } else { - switch(GetKeyPress(gUnknown_203B21C)) + switch(GetKeyPress(&gUnknown_203B21C->input)) { case INPUT_B_BUTTON: PlayMenuSoundEffect(1); @@ -871,7 +860,7 @@ u32 sub_801A2A8(u8 r0) PlayMenuSoundEffect(4); return 4; default: - if(sub_80138B8(gUnknown_203B21C, 1) != 0) + if(sub_80138B8(&gUnknown_203B21C->input, 1) != 0) { sub_801A430(); sub_801A4A4(); @@ -887,26 +876,26 @@ u32 sub_801A2A8(u8 r0) u8 sub_801A37C(void) { - return (gUnknown_203B21C->unk1E * gUnknown_203B21C->unk1C) + gUnknown_203B21C->unk18; + return (gUnknown_203B21C->input.unk1E * gUnknown_203B21C->input.unk1C) + gUnknown_203B21C->input.menuIndex; } void sub_801A398(u8 r0) { ResetUnusedInputStruct(); sub_800641C(gUnknown_203B21C->unk3C, 0, 0); - gUnknown_203B21C->shopItemCount = CountKecleonWareItems(); - sub_8013984((u8 *)gUnknown_203B21C); + gUnknown_203B21C->input.unk22 = CountKecleonWareItems(); + sub_8013984(&gUnknown_203B21C->input); sub_801A430(); sub_801A4A4(); if(r0) - AddMenuCursorSprite(gUnknown_203B21C); + AddMenuCursorSprite(&gUnknown_203B21C->input); } void sub_801A3DC(void) { if(gUnknown_203B21C != NULL) { - gUnknown_203B220 = gUnknown_203B21C->unk18; + gUnknown_203B220 = gUnknown_203B21C->input.menuIndex; gUnknown_203B21C->unk3C[gUnknown_203B21C->unk34] = gUnknown_80DB8FC; ResetUnusedInputStruct(); sub_800641C(gUnknown_203B21C->unk3C, 1, 1); @@ -986,18 +975,14 @@ void sub_801A4A4(void) struct Item item; u8 temp_calc; - // Needed for the shifts.. - u32 index_shift; - u32 quantity_shift; - sub_8008C54(gUnknown_203B21C->unk34); sub_80073B8(gUnknown_203B21C->unk34); - xxx_call_draw_string(gUnknown_203B21C->unk1E * 8 + 10,0,gUnknown_80DB92C, + xxx_call_draw_string(gUnknown_203B21C->input.unk1E * 8 + 10,0,gUnknown_80DB92C, gUnknown_203B21C->unk34,0); - for(index = 0; index < gUnknown_203B21C->unk1A; index++) + for(index = 0; index < gUnknown_203B21C->input.unk1A; index++) { - temp_calc = (gUnknown_203B21C->unk1E * gUnknown_203B21C->unk1C) + index; + temp_calc = (gUnknown_203B21C->input.unk1E * gUnknown_203B21C->input.unk1C) + index; heldItem = GetKecleonWareItem(temp_calc); item.id = heldItem->id; item.quantity = heldItem->quantity; @@ -1006,15 +991,15 @@ void sub_801A4A4(void) local_7c.unk4 = 0; local_7c.unk6 = 0x58; local_7c.unk8 = 1; - sub_8090E14(buffer1,(struct Item *)&item,&local_7c); - buyPrice = GetStackBuyPrice((struct Item *)&item); + sub_8090E14(buffer1,&item,&local_7c); + buyPrice = GetStackBuyPrice(&item); if (buyPrice <= gTeamInventory_203B460->teamMoney) { - y = sub_8013800(gUnknown_203B21C,index); + y = sub_8013800(&gUnknown_203B21C->input,index); xxx_call_draw_string(8,y,buffer1,gUnknown_203B21C->unk34,0); } else { sprintfStatic(buffer2,gUnknown_80DB934,buffer1); - y = sub_8013800(gUnknown_203B21C,index); + y = sub_8013800(&gUnknown_203B21C->input,index); xxx_call_draw_string(8,y,buffer2,gUnknown_203B21C->unk34,0); } } @@ -1049,10 +1034,10 @@ u32 sub_801A5D8(u32 param_1,int param_2,struct UnkTextStruct2_sub *param_3,u32 p sub_8099690(1); ResetUnusedInputStruct(); sub_800641C(gUnknown_203B224->unk90,1,1); - sub_8013818(&gUnknown_203B224->unk54,GetNumberOfFilledInventorySlots(),param_4,param_2); - gUnknown_203B224->unk6C = gUnknown_203B228; - gUnknown_203B224->unk72 = gUnknown_203B22A; - sub_8013984((u8 *)&gUnknown_203B224->unk54); + sub_8013818(&gUnknown_203B224->input,GetNumberOfFilledInventorySlots(),param_4,param_2); + gUnknown_203B224->input.menuIndex = gUnknown_203B228; + gUnknown_203B224->input.unk1E = gUnknown_203B22A; + sub_8013984(&gUnknown_203B224->input); sub_801A998(); sub_801A9E0(); return 1; @@ -1065,10 +1050,10 @@ u32 sub_801A6E8(u8 param_1) struct Item item; if (param_1 == 0) { - sub_8013660(&gUnknown_203B224->unk54); + sub_8013660(&gUnknown_203B224->input); return 0; } - switch(GetKeyPress(&gUnknown_203B224->unk54)) { + switch(GetKeyPress(&gUnknown_203B224->input)) { case INPUT_B_BUTTON: PlayMenuSoundEffect(1); return 2; @@ -1110,7 +1095,7 @@ u32 sub_801A6E8(u8 param_1) if ((gUnknown_203B224->unk4[index] != 0) || (sub_801ADA0(index) != 0)) { PlayMenuSoundEffect(6); gUnknown_203B224->unk4[index] ^= 1; - sub_80138B8(&gUnknown_203B224->unk54,0); + sub_80138B8(&gUnknown_203B224->input,0); sub_801A9E0(); return 1; } @@ -1128,7 +1113,7 @@ u32 sub_801A6E8(u8 param_1) // NOTE: fallthrough needed here default: _0801A87C: - if (sub_80138B8(&gUnknown_203B224->unk54,1) != '\0') { + if (sub_80138B8(&gUnknown_203B224->input,1) != '\0') { sub_801A998(); sub_801A9E0(); return 1; @@ -1142,7 +1127,7 @@ _0801A87C: s32 sub_801A8AC(void) { - return (gUnknown_203B224->unk72 * gUnknown_203B224->unk70) + gUnknown_203B224->unk6C; + return (gUnknown_203B224->input.unk1E * gUnknown_203B224->input.unk1C) + gUnknown_203B224->input.menuIndex; } void sub_801A8D0(u8 r0) @@ -1151,20 +1136,20 @@ void sub_801A8D0(u8 r0) ResetUnusedInputStruct(); sub_800641C(gUnknown_203B224->unk90, 0, 0); FillInventoryGaps(); - gUnknown_203B224->unk76 = GetNumberOfFilledInventorySlots(); - sub_8013984((u8 *)&gUnknown_203B224->unk54); + gUnknown_203B224->input.unk22 = GetNumberOfFilledInventorySlots(); + sub_8013984(&gUnknown_203B224->input); sub_801A998(); sub_801A9E0(); if(r0) - AddMenuCursorSprite((u8 *)&gUnknown_203B224->unk54); + AddMenuCursorSprite(&gUnknown_203B224->input); } void sub_801A928(void) { if(gUnknown_203B224 != NULL) { - gUnknown_203B228 = gUnknown_203B224->unk6C; - gUnknown_203B22A = gUnknown_203B224->unk72; + gUnknown_203B228 = gUnknown_203B224->input.menuIndex; + gUnknown_203B22A = gUnknown_203B224->input.unk1E; gUnknown_203B224->unk90[gUnknown_203B224->unk88] = gUnknown_80DB944; sub_8099690(0); ResetUnusedInputStruct(); @@ -1176,8 +1161,8 @@ void sub_801A928(void) void sub_801A998(void) { - gUnknown_203B224->unkF0[0] = gUnknown_203B224->unk74; - gUnknown_203B224->unkF0[1] = gUnknown_203B224->unk72; + gUnknown_203B224->unkF0[0] = gUnknown_203B224->input.unk20; + gUnknown_203B224->unkF0[1] = gUnknown_203B224->input.unk1E; gUnknown_203B224->unkF0[2] = 0xB; gUnknown_203B224->unkF0[3] = 0; ResetUnusedInputStruct(); @@ -1201,21 +1186,21 @@ void sub_801A9E0(void) sub_8008C54(gUnknown_203B224->unk88); sub_80073B8(gUnknown_203B224->unk88); - x = gUnknown_203B224->unk72 * 8 + 10; - if (gUnknown_203B224->unk72 == 0) { + x = gUnknown_203B224->input.unk1E * 8 + 10; + if (gUnknown_203B224->input.unk1E == 0) { xxx_call_draw_string(x,0,gTeamToolboxA,gUnknown_203B224->unk88,0); } else { xxx_call_draw_string(x,0,gTeamToolboxB,gUnknown_203B224->unk88,0); } - for(r7 = 0; r7 < gUnknown_203B224->unk6E; r7++) + for(r7 = 0; r7 < gUnknown_203B224->input.unk1A; r7++) { - teamItemIndex = (gUnknown_203B224->unk72 * gUnknown_203B224->unk70) + r7; + teamItemIndex = (gUnknown_203B224->input.unk1E * gUnknown_203B224->input.unk1C) + r7; item = gTeamInventory_203B460->teamItems[teamItemIndex]; switch(gUnknown_203B224->unk0) { case 0: sub_8090E14(buffer1,&item,0); - xxx_call_draw_string(8,sub_8013800(&gUnknown_203B224->unk54,r7),buffer1,gUnknown_203B224->unk88,0); + xxx_call_draw_string(8,sub_8013800(&gUnknown_203B224->input,r7),buffer1,gUnknown_203B224->unk88,0); break; case 1: case 2: @@ -1224,7 +1209,7 @@ void sub_801A9E0(void) stack.unk8 = 1; item.flags = 1; sub_8090E14(buffer1,&item, &stack); - xxx_call_draw_string(8,sub_8013800(&gUnknown_203B224->unk54,r7),buffer1,gUnknown_203B224->unk88,0); + xxx_call_draw_string(8,sub_8013800(&gUnknown_203B224->input,r7),buffer1,gUnknown_203B224->unk88,0); break; case 3: stack1.unk0 = 0; @@ -1233,12 +1218,12 @@ void sub_801A9E0(void) item.flags = 1; sub_8090E14(buffer1,&item,&stack1); if (gUnknown_203B224->unk4[teamItemIndex] != 0 || sub_801ADA0(teamItemIndex) != '\0'){ - xxx_call_draw_string(8,sub_8013800(&gUnknown_203B224->unk54,r7),buffer1,gUnknown_203B224->unk88,0); + xxx_call_draw_string(8,sub_8013800(&gUnknown_203B224->input,r7),buffer1,gUnknown_203B224->unk88,0); } else { strncpy(gUnknown_202DE58,buffer1,0x50); - xxx_format_and_draw(8,sub_8013800(&gUnknown_203B224->unk54,r7),gUnknown_80DB994,gUnknown_203B224->unk88,0); + xxx_format_and_draw(8,sub_8013800(&gUnknown_203B224->input,r7),gUnknown_80DB994,gUnknown_203B224->unk88,0); } break; case 4: @@ -1252,15 +1237,15 @@ void sub_801A9E0(void) if (GetStackSellPrice(&item) + gTeamInventory_203B460->teamMoney > MAX_TEAM_MONEY){ // very dumb but this matches... sprintfStatic((char *)&stack3,gUnknown_80DB9A0,buffer1); - xxx_call_draw_string(8,sub_8013800(&gUnknown_203B224->unk54,r7),(u8 *)&stack3,gUnknown_203B224->unk88,0); + xxx_call_draw_string(8,sub_8013800(&gUnknown_203B224->input,r7),(u8 *)&stack3,gUnknown_203B224->unk88,0); } else - xxx_call_draw_string(8,sub_8013800(&gUnknown_203B224->unk54,r7),buffer1,gUnknown_203B224->unk88,0);; + xxx_call_draw_string(8,sub_8013800(&gUnknown_203B224->input,r7),buffer1,gUnknown_203B224->unk88,0);; } else { sub_8090E14(buffer1,&item, 0); strncpy(gUnknown_202DE58,buffer1,0x50); - xxx_format_and_draw(8,sub_8013800(&gUnknown_203B224->unk54,r7),gUnknown_80DB994,gUnknown_203B224->unk88,0); + xxx_format_and_draw(8,sub_8013800(&gUnknown_203B224->input,r7),gUnknown_80DB994,gUnknown_203B224->unk88,0); } break; case 5: @@ -1270,17 +1255,17 @@ void sub_801A9E0(void) item.flags = 1; sub_8090E14(buffer1,&item,&stack3); if (IsGummiItem(item.id)) { - xxx_call_draw_string(8,sub_8013800(&gUnknown_203B224->unk54,r7),buffer1,gUnknown_203B224->unk88,0); + xxx_call_draw_string(8,sub_8013800(&gUnknown_203B224->input,r7),buffer1,gUnknown_203B224->unk88,0); } else { strncpy(gUnknown_202DE58,buffer1,0x50); - xxx_format_and_draw(8,sub_8013800(&gUnknown_203B224->unk54,r7),gUnknown_80DB994,gUnknown_203B224->unk88,0); + xxx_format_and_draw(8,sub_8013800(&gUnknown_203B224->input,r7),gUnknown_80DB994,gUnknown_203B224->unk88,0); } break; } if ((sub_801AED0(teamItemIndex) & 1) != 0) { - sub_8007B7C(gUnknown_203B224->unk88,8,sub_8013800(&gUnknown_203B224->unk54,r7),(gUnknown_203B224->unk8C->unkC - 2) * 8,10); + sub_8007B7C(gUnknown_203B224->unk88,8,sub_8013800(&gUnknown_203B224->input,r7),(gUnknown_203B224->unk8C->unkC - 2) * 8,10); } } sub_80073E0(gUnknown_203B224->unk88); diff --git a/src/luminous_cave.c b/src/luminous_cave.c index 51aeda626..8625acd8e 100644 --- a/src/luminous_cave.c +++ b/src/luminous_cave.c @@ -1,4 +1,3 @@ -#include "gba/defines.h" #include "global.h" #include "constants/bg_music.h" #include "constants/colors.h" diff --git a/src/mailbox.c b/src/mailbox.c index 317e79a51..f7fc3dbbf 100644 --- a/src/mailbox.c +++ b/src/mailbox.c @@ -7,22 +7,7 @@ #include "wonder_mail.h" #include "menu_input.h" - -extern u8 *gUnknown_80D4990[]; -extern u8 *gUnknown_80D4970[]; - -extern bool8 IsMailinJobSlot(struct WonderMail *mail); - -void sub_802E578(void); -void HandleMailActionMenu(void); -void HandleMailboxMenu(void); -void nullsub_133(void); -void sub_802E0A0(void); -void sub_802E1AC(void); -void sub_802E73C(void); -void sub_802E758(void); -void sub_802E774(void); -void sub_802E7D0(void); +EWRAM_DATA_2 struct unkStruct_203B304 *gUnknown_203B304 = {0}; const struct UnkTextStruct2 gUnknown_80E0284 = { @@ -73,11 +58,24 @@ const u8 gMailAccepted[] = "Accepted"; const u8 gUnknown_80E0324[] = "/"; static const u8 mailbox_fill[] = "pksdir0"; -extern struct unkStruct_203B304 *gUnknown_203B304; +extern u8 *gUnknown_80D4990[]; +extern u8 *gUnknown_80D4970[]; + +extern bool8 IsMailinJobSlot(struct WonderMail *mail); + +void sub_802E578(void); +void HandleMailActionMenu(void); +void HandleMailboxMenu(void); +void nullsub_133(void); +void sub_802E0A0(void); +void sub_802E1AC(void); +void sub_802E73C(void); +void sub_802E758(void); +void sub_802E774(void); +void sub_802E7D0(void); extern void sub_802E088(u32); extern void CreateMailboxMenu(void); extern void CreateMailActionMenu(void); - extern void sub_802BD14(u32, u32, u32); extern void sub_802BE94(u32); extern void CreateMailMenu(void); diff --git a/src/main_menu.c b/src/main_menu.c index 1e5842db0..10ca9c985 100644 --- a/src/main_menu.c +++ b/src/main_menu.c @@ -881,7 +881,7 @@ bool8 SetMainMenuText(void) // Have to load the pointer before the index preload = gUnknown_203B34C->unk4[0].menuItems; - menuChoice = preload[gUnknown_203B34C->unk4[0].menuIndex].menuAction; // chosen menu action? + menuChoice = preload[gUnknown_203B34C->unk4[0].input.menuIndex].menuAction; // chosen menu action? if (gUnknown_203B34C->currMenuChoice == menuChoice) { return FALSE; } diff --git a/src/makuhita_dojo_1.c b/src/makuhita_dojo_1.c index e2b7536b7..a82b5257c 100644 --- a/src/makuhita_dojo_1.c +++ b/src/makuhita_dojo_1.c @@ -15,15 +15,7 @@ struct unkStruct_203B31C { // Size: 0xD0 s16 unk0[NUM_DUNGEON_MAZE]; - u32 unk30; - u8 fill34[0x48 - 0x34]; - s16 unk48; - s16 unk4A; - s16 unk4C; - s16 unk4E; - u16 unk50; - u16 unk52; - u8 fill54[0x64 - 0x54]; + struct MenuInputStruct input; u32 unk64; struct UnkTextStruct2 *unk68; struct UnkTextStruct2 unk6C[4]; @@ -72,9 +64,9 @@ extern s16 sub_80A2668(u32 r0); extern s32 sub_8013800(void *, u32); extern bool8 IsMazeCompleted(s32); extern s32 sub_8030668(void); -extern void sub_8013984(u32 *); +extern void sub_8013984(void *); extern void sub_80304C8(); -extern void AddMenuCursorSprite(u32 *); +extern void AddMenuCursorSprite(struct MenuInputStruct *); extern void DrawDojoCourseList(void); extern u8 sub_80138B8(void *, u32); @@ -201,7 +193,7 @@ bool8 sub_80302E8(int param_1, struct UnkTextStruct2_sub *param_2, u32 param_3) sub_8012D08(gUnknown_203B31C->unk68,param_3); ResetUnusedInputStruct(); sub_800641C(gUnknown_203B31C->unk6C,1,1); - sub_8013818(&gUnknown_203B31C->unk30,sub_8030668(),param_3,param_1); + sub_8013818(&gUnknown_203B31C->input,sub_8030668(),param_3,param_1); sub_80304C8(); DrawDojoCourseList(); return 1; @@ -211,10 +203,10 @@ bool8 sub_80302E8(int param_1, struct UnkTextStruct2_sub *param_2, u32 param_3) u32 sub_80303AC(u8 param_1) { if (param_1 == 0) { - sub_8013660(&gUnknown_203B31C->unk30); + sub_8013660(&gUnknown_203B31C->input); return 0; } - switch(GetKeyPress(&gUnknown_203B31C->unk30)) + switch(GetKeyPress(&gUnknown_203B31C->input)) { case INPUT_B_BUTTON: PlayMenuSoundEffect(1); @@ -223,7 +215,7 @@ u32 sub_80303AC(u8 param_1) PlayMenuSoundEffect(0); return 3; default: - if (sub_80138B8(&gUnknown_203B31C->unk30, 1)) { + if (sub_80138B8(&gUnknown_203B31C->input, 1)) { sub_80304C8(); DrawDojoCourseList(); return 1; @@ -234,16 +226,16 @@ u32 sub_80303AC(u8 param_1) } s16 sub_8030418(void) { - return gUnknown_203B31C->unk0[(gUnknown_203B31C->unk4E * gUnknown_203B31C->unk4C) + gUnknown_203B31C->unk48]; + return gUnknown_203B31C->unk0[(gUnknown_203B31C->input.unk1E * gUnknown_203B31C->input.unk1C) + gUnknown_203B31C->input.menuIndex]; } void sub_8030444(u8 r0) { - gUnknown_203B31C->unk52 = sub_8030668(); - sub_8013984(&gUnknown_203B31C->unk30); + gUnknown_203B31C->input.unk22 = sub_8030668(); + sub_8013984(&gUnknown_203B31C->input); sub_80304C8(); DrawDojoCourseList(); if(r0) - AddMenuCursorSprite(&gUnknown_203B31C->unk30); + AddMenuCursorSprite(&gUnknown_203B31C->input); } void sub_8030480(void) { @@ -331,15 +323,15 @@ void DrawDojoCourseList(void) sub_80073B8(gUnknown_203B31C->unk64); xxx_call_draw_string(10,0,gMakuhitaDojoHeader,gUnknown_203B31C->unk64,0); // Courses sub_8012BC4(gUnknown_203B31C->unkCC[2] * 8 + 4,0, - gUnknown_203B31C->unk4E + 1,2,7,gUnknown_203B31C->unk64); - for (index = 0; index < gUnknown_203B31C->unk4A; index++) + gUnknown_203B31C->input.unk1E + 1,2,7,gUnknown_203B31C->unk64); + for (index = 0; index < gUnknown_203B31C->input.unk1A; index++) { - iVar6 = gUnknown_203B31C->unk0[gUnknown_203B31C->unk4E * gUnknown_203B31C->unk4C + index]; + iVar6 = gUnknown_203B31C->unk0[gUnknown_203B31C->input.unk1E * gUnknown_203B31C->input.unk1C + index]; dungeonIndex = sub_80A2740(iVar6); mazeIndex = sub_80A2668(iVar6); - y = sub_8013800(&gUnknown_203B31C->unk30, index); + y = sub_8013800(&gUnknown_203B31C->input, index); color = COLOR_WHITE_2; // COLOR_WHITE again? if (IsMazeCompleted(mazeIndex)) { xxx_call_draw_string(8,y,gUnknown_80E0824,gUnknown_203B31C->unk64,0); // Draw Star symbol diff --git a/src/menu_input.c b/src/menu_input.c index 0798fc4a5..48aa55d82 100644 --- a/src/menu_input.c +++ b/src/menu_input.c @@ -17,28 +17,31 @@ extern struct UnkTextStruct1 gUnknown_2027370[4]; extern u8 gUnknown_80D4828[]; extern void PlayMenuSoundEffect(u32); -extern s32 GetKeyPress(u32 *); -extern u32 sub_80137A8(u32 *); -void MoveMenuCursorUp(u32 *); -void MoveMenuCursorDown(u32 *); +extern s32 GetKeyPress(struct MenuInputStruct *); +extern u32 sub_80137A8(struct MenuInputStruct *); +void MoveMenuCursorUp(struct MenuInputStruct *); +void MoveMenuCursorDown(struct MenuInputStruct *); extern void sub_80073B8(u32); extern s32 sub_8008ED0(const u8 *); extern void xxx_format_and_draw(u32, u32, const u8 *, u32, u32); -extern s32 sub_8013800(u32 *, s32); +extern s32 sub_8013800(struct MenuInputStruct *, s32); extern void sub_80073E0(u32); -extern void sub_8013660(u32 *); -void AddMenuCursorSprite(void *); +extern void sub_8013660(struct MenuInputStruct *); +void AddMenuCursorSprite(struct MenuInputStruct *); +void AddMenuCursorSprite_(struct MenuInputStruct *, u32); void sub_8012EBC(struct MenuStruct *param_1); -extern void sub_8013134(u32 *, u32, u32); -extern void sub_80137B0(u32 *, u32); +extern void sub_8013134(struct MenuInputStruct *, u32, u32); +extern void sub_80137B0(struct MenuInputStruct *, u32); extern s16 sub_8009614(u32, u32); extern u32 ReturnIntFromChar2(u8); struct unkChar *GetCharacter(u32); extern void xxx_call_draw_char(u32, u32, u32, u32, u32); +extern void sub_801317C(struct MenuInputStructSub *); +extern void nullsub_7(u16 *); const u32 gDefaultMenuTextColors[] = { COLOR_WHITE_2, COLOR_RED, COLOR_RED }; -void sub_8012BC4(u32 x, u32 y, s32 n, s32 len, u32 param_5, u32 param_6) +void sub_8012BC4(u32 x, u32 y, s32 n, s32 len, u32 color, u32 param_6) { s32 iVar1; u32 uVar2; @@ -74,7 +77,7 @@ void sub_8012BC4(u32 x, u32 y, s32 n, s32 len, u32 param_5, u32 param_6) uVar2 = ReturnIntFromChar2(iVar1 + 0x30); iVar3 = GetCharacter(uVar2); total_x += iVar3->unk6; - xxx_call_draw_char(x - total_x,y,uVar2,param_5,param_6); + xxx_call_draw_char(x - total_x,y,uVar2,color,param_6); counter++; if (counter >= len) { break; @@ -83,7 +86,7 @@ void sub_8012BC4(u32 x, u32 y, s32 n, s32 len, u32 param_5, u32 param_6) } } -void sub_8012C60(u32 x,u32 y,u32 param_3,u32 param_4,u32 param_5) +void sub_8012C60(u32 x,u32 y,u32 param_3,u32 color,u32 param_5) { u32 add_x; struct unkChar *iVar3; @@ -97,7 +100,7 @@ void sub_8012C60(u32 x,u32 y,u32 param_3,u32 param_4,u32 param_5) else { add_x = 0; } - xxx_call_draw_char(x + add_x,y,uVar2,param_4,param_5); + xxx_call_draw_char(x + add_x,y,uVar2,color,param_5); } void sub_8012CAC(struct UnkTextStruct2 *param_1, const struct MenuItem *param_2) @@ -228,9 +231,9 @@ void sub_8012D60(struct MenuStruct *param_1,const struct MenuItem *menuItems,u32 if (menuIndex < 0) { menuIndex = iVar1; } - sub_8013134(¶m_1->unk14,counter,index); - param_1->menuIndex = menuIndex; - sub_80137B0(¶m_1->unk14,0); + sub_8013134(¶m_1->input,counter,index); + param_1->input.menuIndex = menuIndex; + sub_80137B0(¶m_1->input,0); param_1->unk4C = TRUE; param_1->unk4D = TRUE; param_1->unk4E = TRUE; @@ -268,9 +271,9 @@ void sub_8012E04(struct MenuStruct *param_1,const struct MenuItem *menuItems,u32 if (menuIndex < 0) { menuIndex = iVar1; } - sub_8013134(¶m_1->unk14,counter,index); - param_1->menuIndex = menuIndex; - sub_80137B0(¶m_1->unk14,0); + sub_8013134(¶m_1->input,counter,index); + param_1->input.menuIndex = menuIndex; + sub_80137B0(¶m_1->input,0); param_1->index = index; param_1->menuTextColorArray = colorArray; if (colorArray == NULL) { @@ -341,7 +344,7 @@ void sub_8012EBC(struct MenuStruct *param_1) color = colorArray[0]; } sprintfStatic(buffer,gUnknown_80D4828,color,textPtr); - y = sub_8013800(¶m_1->unk14,counter); + y = sub_8013800(¶m_1->input,counter); xxx_format_and_draw(8,y,buffer,param_1->index,0); menuItemsPtr++; counter++; @@ -352,10 +355,10 @@ void sub_8012EBC(struct MenuStruct *param_1) } if (param_1->unk4E) { if (param_1->unk4C) { - AddMenuCursorSprite(¶m_1->unk14); + AddMenuCursorSprite(¶m_1->input); } else { - sub_8013660(¶m_1->unk14); + sub_8013660(¶m_1->input); } } } @@ -366,31 +369,31 @@ bool8 sub_8012FD8(struct MenuStruct *param_1) s32 index; const struct MenuItem *item; - prevMenuIndex = param_1->menuIndex; + prevMenuIndex = param_1->input.menuIndex; if (param_1->unk4C) { - switch(GetKeyPress(¶m_1->unk14)) + switch(GetKeyPress(¶m_1->input)) { case INPUT_DPAD_DOWN: - MoveMenuCursorDown(¶m_1->unk14); - if (prevMenuIndex != param_1->menuIndex) { + MoveMenuCursorDown(¶m_1->input); + if (prevMenuIndex != param_1->input.menuIndex) { PlayMenuSoundEffect(3); } break; case INPUT_DPAD_UP: - MoveMenuCursorUp(¶m_1->unk14); - if (prevMenuIndex != param_1->menuIndex) { + MoveMenuCursorUp(¶m_1->input); + if (prevMenuIndex != param_1->input.menuIndex) { PlayMenuSoundEffect(3); } break; case INPUT_A_BUTTON: - index = sub_80137A8(¶m_1->unk14); + index = sub_80137A8(¶m_1->input); item = ¶m_1->menuItems[index]; if ((-1 < item->menuAction) && ((param_1->unkC == NULL || (param_1->unkC[index] != 1)))) { param_1->menuAction = item->menuAction; ++param_1; --param_1; param_1->unk4C = FALSE; - param_1->unk38 = 0; + param_1->input.unk24 = 0; } else { @@ -404,8 +407,8 @@ bool8 sub_8012FD8(struct MenuStruct *param_1) PlayMenuSoundEffect(0); break; case INPUT_B_BUTTON: - if (-1 < param_1->menuItems[param_1->unk2E].menuAction) { - param_1->menuAction = param_1->menuItems[param_1->unk2E].menuAction; + if (-1 < param_1->menuItems[param_1->input.unk1A].menuAction) { + param_1->menuAction = param_1->menuItems[param_1->input.unk1A].menuAction; param_1->unk4C = FALSE; PlayMenuSoundEffect(1); } @@ -424,18 +427,18 @@ bool8 sub_80130A8(struct MenuStruct *param_1) if (param_1->unk4C) { - switch(GetKeyPress(¶m_1->unk14)) + switch(GetKeyPress(¶m_1->input)) { case INPUT_A_BUTTON: - index = sub_80137A8(¶m_1->unk14); + index = sub_80137A8(¶m_1->input); menuItem = ¶m_1->menuItems[index]; param_1->menuAction = menuItem->menuAction; param_1->unk4C = FALSE; - param_1->unk38 = 0; + param_1->input.unk24 = 0; PlayMenuSoundEffect(0); break; case INPUT_B_BUTTON: - if(menuAction = param_1->menuItems[param_1->unk2E].menuAction, -1 < menuAction) { + if(menuAction = param_1->menuItems[param_1->input.unk1A].menuAction, -1 < menuAction) { param_1->menuAction = menuAction; param_1->unk4C = FALSE; PlayMenuSoundEffect(0); @@ -457,3 +460,51 @@ bool8 sub_8013114(struct MenuStruct *param_1, s32 *menuAction) } return FALSE; } + +void sub_8013134(struct MenuInputStruct *param_1, u32 menuItemCounter, u32 index) { + + struct UnkTextStruct1 *temp; + + temp = &gUnknown_2027370[index]; + + param_1->unk0 = index; + param_1->menuIndex = 0; + param_1->unk1A = menuItemCounter; + param_1->unk1C = menuItemCounter; + param_1->unk1E = 0; + param_1->unk4 = 0; + + if(temp->unkC == 6) + { + param_1->unk6 = 0x10; + } + else + { + param_1->unk6 = 0x2; + } + + + param_1->unkC = 0; + param_1->unkE = 0; + param_1->unk14 = 0; + param_1->unk24 = 0; + sub_801317C(¶m_1->unk28); +} + +void sub_801317C(struct MenuInputStructSub *param_1) +{ + param_1->unk0 = 0; + param_1->a_button = 0; + param_1->b_button = 0; + param_1->dpad_left = 0; + param_1->dpad_right = 0; + param_1->unk8 = -1; + param_1->unkA = -1; + nullsub_7(¶m_1->unk8); + ResetUnusedInputStruct(); +} + +void AddMenuCursorSprite(struct MenuInputStruct *param_1) +{ + AddMenuCursorSprite_(param_1, 0); +} diff --git a/src/menu_input_1.c b/src/menu_input_1.c new file mode 100644 index 000000000..106d4297b --- /dev/null +++ b/src/menu_input_1.c @@ -0,0 +1,350 @@ +#include "global.h" +#include "constants/input.h" +#include "input.h" +#include "text.h" + +extern struct UnkTextStruct1 gUnknown_2027370[4]; +extern void PlayMenuSoundEffect(u32); +extern void AddMenuCursorSprite(struct MenuInputStruct *); +extern void sub_8013A7C(struct MenuInputStruct *); +extern void sub_8013A54(struct MenuInputStruct *); +extern s32 GetKeyPress(struct MenuInputStruct *); +extern void MoveMenuCursorUp(struct MenuInputStruct *); +extern void MoveMenuCursorDown(struct MenuInputStruct *); +void sub_8013984(struct MenuInputStruct *); +void sub_801317C(struct MenuInputStructSub *); +void sub_80137F8(struct MenuInputStruct *, u32); +s32 sub_8013800(struct MenuInputStruct *param_1, s32 param_2); +void UpdateMenuCursorSpriteCoords(struct MenuInputStruct *param_1); +void sub_801332C(u16 *); + +void sub_8013660(struct MenuInputStruct *param_1) +{ + if (0 < param_1->unk1A) + { + UpdateMenuCursorSpriteCoords(param_1); + sub_801332C(¶m_1->unk8); + } +} + +void UpdateMenuCursorSpriteCoords(struct MenuInputStruct *param_1) +{ + s32 index; + struct UnkTextStruct1 *temp; + + index = param_1->unk0; + temp = &gUnknown_2027370[index]; + param_1->unk8 = temp->unk0 * 8 + param_1->unk4; + param_1->unkA = temp->unk2 * 8 + sub_8013800(param_1, param_1->menuIndex); +} + +void MoveMenuCursorDown(struct MenuInputStruct *param_1) +{ + param_1->unk24 = 0; + if (param_1->unk1A < 1) { + param_1->menuIndex = 0; + } + else { + param_1->menuIndex++; + if (param_1->menuIndex >= param_1->unk1A) { + param_1->menuIndex = 0; + } + } +} + +void sub_80136E0(struct MenuInputStruct *param_1, u8 param_2) +{ + param_1->unk24 = 0; + if (param_1->unk1A < 1) { + param_1->menuIndex = 0; + } + else { + param_1->menuIndex++; + if (param_1->menuIndex >= param_1->unk1A) { + if (param_2 != 0) { + param_1->menuIndex = 0; + } + else + { + param_1->menuIndex = param_1->unk1A - 1; + } + } + } +} + +void MoveMenuCursorUp(struct MenuInputStruct *param_1) +{ + param_1->unk24 = 0; + if (param_1->unk1A < 1) { + param_1->menuIndex = 0; + } + else { + param_1->menuIndex--; + if (param_1->menuIndex < 0) { + param_1->menuIndex = param_1->unk1A + -1; + } + } +} + +void sub_8013744(struct MenuInputStruct *param_1, u8 param_2) +{ + param_1->unk24 = 0; + if (param_1->unk1A < 1) { + param_1->menuIndex = 0; + } + else { + param_1->menuIndex--; + if (param_1->menuIndex < 0) { + if (param_2 != 0) { + param_1->menuIndex = param_1->unk1A + -1; + } + else { + param_1->menuIndex = 0; + } + } + } +} + +void sub_8013780(struct MenuInputStruct *param_1, s32 param_2) +{ + if (param_2 < 0) { + param_1->menuIndex = 0; + } + else if (param_2 >= param_1->unk1A) { + param_1->menuIndex = param_1->unk1A - 1; + } + else { + param_1->menuIndex = param_2; + } + param_1->unk24 = 0; +} + +s32 sub_80137A8(struct MenuInputStruct *param_1) +{ + return param_1->menuIndex; +} + +void sub_80137B0(struct MenuInputStruct *param_1, s32 param_2) +{ + s32 iVar1; +#ifndef NONMATCHING + register s32 iVar2 asm("r0"); +#else + s32 iVar2; +#endif + + if (param_2 >= 1) { + iVar2 = param_2 << 8; + } + else + { + if (gUnknown_2027370[param_1->unk0].unkC == 6) + { + iVar1 = 0x10; + } + else + { + iVar1 = 0; + } + iVar2 = (gUnknown_2027370[param_1->unk0].unk6 * 8 - iVar1); + iVar2 <<= 8; + } + param_1->unk10 = iVar2 / param_1->unk1C; +} + +void sub_80137F8(struct MenuInputStruct *param_1, u32 param_2) +{ + param_1->unk10 = param_2 << 8; +} + +s32 sub_8013800(struct MenuInputStruct *param_1, s32 param_2) +{ + s32 iVar1; + s32 iVar2; + + iVar2 = param_1->unk6; + iVar1 = param_2 * param_1->unk10; + if (iVar1 < 0) { + iVar1 = iVar1 + 0xff; + } + return (iVar2 + (iVar1 >> 8)); +} + +void sub_8013818(struct MenuInputStruct *param_1, short param_2, u16 param_3, s32 param_4) +{ + param_1->unk0 = param_4; + param_1->unk22 = param_2; + param_1->unk1C = param_3; + param_1->unk14 = 0; + param_1->unk24 = 0; + param_1->menuIndex = 0; + param_1->unk1E = 0; + sub_801317C(¶m_1->unk28); + sub_8013984(param_1); + sub_80137F8(param_1,0xC); +} + + +void sub_8013848(struct MenuInputStruct *param_1, short param_2, u16 param_3, s32 param_4) +{ + param_1->unk0 = param_4; + param_1->unk22 = param_2; + param_1->unk1C = param_3; + param_1->unk14 = 0; + param_1->unk24 = 0; + param_1->menuIndex = 0; + param_1->unk1E = 0; + sub_801317C(¶m_1->unk28); + sub_8013984(param_1); + sub_80137F8(param_1,0x18); +} + +void sub_8013878(struct MenuInputStruct *param_1, int param_2) +{ + if (param_2 < 0) { + param_2 = 0; + } + else if (param_2 >= param_1->unk22) { + param_2 = param_1->unk22 + -1; + } + param_1->unk1E = param_2 / param_1->unk1C; + param_1->menuIndex = param_2 % param_1->unk1C; + param_1->unk24 = 0; + sub_8013984(param_1); +} + +bool8 sub_80138B8(struct MenuInputStruct *param_1, bool8 param_2) +{ + s32 sVar1; + s32 oldIndex; + + sVar1 = param_1->unk1E; + oldIndex = param_1->menuIndex; + AddMenuCursorSprite(param_1); + if(param_2) + { + switch(GetKeyPress(param_1)) + { + case INPUT_DPAD_UP: + MoveMenuCursorUp(param_1); + if(oldIndex != param_1->menuIndex) + PlayMenuSoundEffect(3); + break; + case INPUT_DPAD_DOWN: + MoveMenuCursorDown(param_1); + if(oldIndex != param_1->menuIndex) + PlayMenuSoundEffect(3); + break; + case INPUT_DPAD_LEFT: + sub_8013A7C(param_1); + break; + case INPUT_DPAD_RIGHT: + sub_8013A54(param_1); + break; + } + } + if (sVar1 != param_1->unk1E) { + PlayMenuSoundEffect(4); + return TRUE; + } + else + { + return FALSE; + } +} + +bool8 sub_8013938(struct MenuInputStruct *param_1) +{ + s32 sVar1; + + sVar1 = param_1->unk1E; + param_1->unk1A = 0; + param_1->unk14 = 0; + AddMenuCursorSprite(param_1); + switch(GetKeyPress(param_1)) + { + case INPUT_DPAD_LEFT: + sub_8013A7C(param_1); + break; + case INPUT_DPAD_RIGHT: + sub_8013A54(param_1); + break; + } + if (sVar1 != param_1->unk1E) { + PlayMenuSoundEffect(4); + return TRUE; + } + else + { + return FALSE; + } +} + +void sub_8013984(struct MenuInputStruct * param_1) { + s32 iVar2; + s32 iVar4; + struct UnkTextStruct1 *ptr; + + iVar4 = param_1->unk0; + ptr = &gUnknown_2027370[iVar4]; + if (param_1->unk1C == 0) { + param_1->unk1C++; + } + param_1->unk20 = param_1->unk22 / param_1->unk1C; + iVar2 = (param_1->unk22 % param_1->unk1C); + if (iVar2 != 0) { + param_1->unk20++; + } + if (param_1->unk1E > param_1->unk20 - 1) { + param_1->unk1E = param_1->unk20 - 1; + } + if ((param_1->unk1E != param_1->unk20 - 1) || (param_1->unk22 % param_1->unk1C == 0)) + { + param_1->unk1A = param_1->unk1C; + } + else + { + param_1->unk1A = param_1->unk22 % param_1->unk1C; + } + if (param_1->menuIndex > param_1->unk1A - 1) { + param_1->menuIndex = param_1->unk1A - 1; + } + param_1->unk4 = 0; + if (ptr->unkC == 6) { + param_1->unk6 = 0x10; + } + else { + param_1->unk6 = 0; + } + if (param_1->unk20 < 2) { + param_1->unkC = 0; + } + else { + param_1->unkC = (ptr->unk0 + ptr->unk04 + -2) * 8; + } + param_1->unkE = ((ptr->unk2) + 1) * 8 + -2; +} + +void sub_8013A54(struct MenuInputStruct *param_1) +{ + if (param_1->unk1E < param_1->unk20 - 1) { + param_1->unk1E++; + } + else + { + param_1->unk1E = 0; + } + sub_8013984(param_1); +} + +void sub_8013A7C(struct MenuInputStruct *param_1) +{ + if (param_1->unk1E < 1) { + param_1->unk1E = param_1->unk20 - 1; + } + else + { + param_1->unk1E--; + } + sub_8013984(param_1); +} diff --git a/src/more_input.c b/src/more_input.c index 4d02d4bed..8b4deee92 100644 --- a/src/more_input.c +++ b/src/more_input.c @@ -1,12 +1,12 @@ -#include "constants/input.h" #include "global.h" +#include "constants/input.h" #include "input.h" -extern void nullsub_34(struct UnkInputStruct *r0); +extern void nullsub_34(struct MenuInputStructSub *r0); u32 sub_8012AE8(void); -u32 sub_8012A64(struct UnkInputStruct *r0, u32 r1) +u32 sub_8012A64(struct MenuInputStructSub *r0, u32 r1) { if(r0 == NULL) { @@ -16,36 +16,39 @@ u32 sub_8012A64(struct UnkInputStruct *r0, u32 r1) { nullsub_34(r0); } - if(r0->unk1 != 0) + if(r0->a_button != 0) { - r0->unk1 = 0; - return 1; + r0->a_button = 0; + return INPUT_A_BUTTON; } - if(r0->unk2 == 0) + else if(r0->b_button == 0) { return sub_8012AE8(); } - r0->unk2 = r0->unk1; - return 2; + else + { + r0->b_button = 0; + return INPUT_B_BUTTON; + } } -u32 GetKeyPress(struct UnkInputStruct *r0) +u32 GetKeyPress(struct MenuInputStruct *r0) { if(r0 != NULL) { - if(r0->a_button != 0) + if(r0->unk28.a_button != 0) { return INPUT_A_BUTTON; } - if(r0->b_button != 0) + if(r0->unk28.b_button != 0) { return INPUT_B_BUTTON; } - if(r0->dpad_left != 0) + if(r0->unk28.dpad_left != 0) { return INPUT_DPAD_LEFT; } - if(r0->dpad_right != 0) + if(r0->unk28.dpad_right != 0) { return INPUT_DPAD_RIGHT; } diff --git a/src/moves.c b/src/moves.c index 86df447e2..0ece94741 100644 --- a/src/moves.c +++ b/src/moves.c @@ -7,6 +7,7 @@ #include "code_809447C.h" #include "text_util.h" +#include "constants/colors.h" #include "constants/monster.h" #include "file_system.h" #include "code_800D090.h" @@ -1451,7 +1452,7 @@ void unk_MovePrintData(struct Move* move, int y) { s32 power; const char* text; - sub_80078A4(y, 4, 72, 200, 7); + sub_80078A4(y, 4, 72, 200, COLOR_WHITE_2); sub_8092D54(gAvailablePokemonNames, move); xxx_format_and_draw(4, 74, gUnknown_810CF00, y, 0); xxx_format_and_draw(4, 86, gPtrTypeText, y, 0); diff --git a/src/options_menu.c b/src/options_menu.c index a5dd399b9..9e8a9c4a3 100644 --- a/src/options_menu.c +++ b/src/options_menu.c @@ -1,5 +1,6 @@ #include "global.h" #include "constants/input.h" +#include "constants/colors.h" #include "input.h" #include "memory.h" #include "text.h" @@ -662,17 +663,17 @@ void CreateOptionsMenu(void) case WINDOW_COLOR_BLUE: length = sub_8008ED0(gWindowBGBlueString); sub_80078A4(gUnknown_203B260->unk44,gUnknown_203B260->optionsMenu->windowColor * 0x28 + 0x50, - y + 0xA,length,7); + y + 0xA,length,COLOR_WHITE_2); break; case WINDOW_COLOR_RED: length = sub_8008ED0(gWindowBGRedString); sub_80078A4(gUnknown_203B260->unk44,gUnknown_203B260->optionsMenu->windowColor * 0x28 + 0x50, - y + 0xA,length,7); + y + 0xA,length,COLOR_WHITE_2); break; case WINDOW_COLOR_GREEN: length = sub_8008ED0(gWindowBGGreenString); sub_80078A4(gUnknown_203B260->unk44,gUnknown_203B260->optionsMenu->windowColor * 0x28 + 0x50, - y + 0xA,length,7); + y + 0xA,length,COLOR_WHITE_2); break; } sub_80073E0(gUnknown_203B260->unk44); diff --git a/src/party_list_menu.c b/src/party_list_menu.c index 810403234..78482869d 100644 --- a/src/party_list_menu.c +++ b/src/party_list_menu.c @@ -1,4 +1,3 @@ -#include "gba/defines.h" #include "global.h" #include "constants/dungeon.h" #include "item.h" diff --git a/src/personality_test.c b/src/personality_test.c index be6930cff..6f3259ded 100644 --- a/src/personality_test.c +++ b/src/personality_test.c @@ -1,4 +1,5 @@ #include "global.h" +#include "input.h" #include "personality_test.h" #include "constants/emotions.h" #include "constants/input.h" @@ -6,7 +7,6 @@ #include "random.h" #include "file_system.h" #include "pokemon.h" -#include "input.h" #include "save.h" #include "memory.h" #include "game_options.h" @@ -62,16 +62,16 @@ extern void sub_800836C(u32, u8 *r0, u32); extern void SetBGPaletteBufferColorArray(s32 index, u8 *colorArray); extern void RedrawPartnerSelectionMenu(void); -extern void sub_8013818(struct UnkInputStruct **r0, s32, u32, u32); +extern void sub_8013818(struct MenuInputStruct *r0, s32, u32, u32); -extern u32 GetKeyPress(struct UnkInputStruct **r0); -extern u8 sub_80138B8(struct UnkInputStruct **r0, u32); +extern u32 GetKeyPress(struct MenuInputStruct *r0); +extern u8 sub_80138B8(struct MenuInputStruct *r0, u32); extern void PlayMenuSoundEffect(u32); -extern void sub_8013984(struct UnkInputStruct **r0); -u32 sub_8013800(struct UnkInputStruct **r0, u32); -extern void AddMenuCursorSprite(struct UnkInputStruct **r0); +extern void sub_8013984(struct MenuInputStruct *r0); +u32 sub_8013800(struct MenuInputStruct *r0, u32); +extern void AddMenuCursorSprite(struct MenuInputStruct *r0); extern void xxx_call_draw_string(u32 x, u32 y, const char *text, u32, u32); extern u32 sub_80095E4(s16, u32); @@ -791,7 +791,7 @@ void CreatePartnerSelectionMenu(s16 starterID) gUnknown_203B404->unkb4[3] = 0; ResetUnusedInputStruct(); sub_800641C(gUnknown_203B404->unk54, 1, 1); - sub_8013818(&gUnknown_203B404->unk18, GetValidPartners(), 0xA, gUnknown_203B404->unk4C); + sub_8013818(&gUnknown_203B404->input, GetValidPartners(), 0xA, gUnknown_203B404->unk4C); RedrawPartnerSelectionMenu(); PersonalityTest_DisplayPartnerSprite(); } @@ -801,17 +801,17 @@ u16 HandlePartnerSelectionInput(void) { s32 partnerID; - partnerID = gUnknown_203B404->currPartnerSelection; + partnerID = gUnknown_203B404->input.menuIndex; gUnknown_203B404->unk16 = 0; - if (GetKeyPress(&gUnknown_203B404->unk18) == INPUT_A_BUTTON) { + if (GetKeyPress(&gUnknown_203B404->input) == INPUT_A_BUTTON) { PlayMenuSoundEffect(0); - return gUnknown_203B404->PartnerArray[gUnknown_203B404->currPartnerSelection]; + return gUnknown_203B404->PartnerArray[gUnknown_203B404->input.menuIndex]; } else { - if (sub_80138B8(&gUnknown_203B404->unk18, 1) != '\0') { + if (sub_80138B8(&gUnknown_203B404->input, 1) != '\0') { RedrawPartnerSelectionMenu(); } - if (partnerID != gUnknown_203B404->currPartnerSelection) { + if (partnerID != gUnknown_203B404->input.menuIndex) { PersonalityTest_DisplayPartnerSprite(); } if (gUnknown_203B404->unk16 != '\0') { @@ -825,12 +825,12 @@ u16 HandlePartnerSelectionInput(void) void sub_803CE34(u8 param_1) { - gUnknown_203B404->numPartners = GetValidPartners(); - sub_8013984(&gUnknown_203B404->unk18); + gUnknown_203B404->input.unk22 = GetValidPartners(); + sub_8013984(&gUnknown_203B404->input); RedrawPartnerSelectionMenu(); PersonalityTest_DisplayPartnerSprite(); if (param_1 != 0) { - AddMenuCursorSprite(&gUnknown_203B404->unk18); + AddMenuCursorSprite(&gUnknown_203B404->input); } } @@ -1006,7 +1006,7 @@ void PersonalityTest_DisplayPartnerSprite(void) u8 *r6; u32 faceIndex; - partnerID = gUnknown_203B404->PartnerArray[gUnknown_203B404->currPartnerSelection]; + partnerID = gUnknown_203B404->PartnerArray[gUnknown_203B404->input.menuIndex]; sub_8008C54(1); sub_80073B8(1); faceFile = GetDialogueSpriteDataPtr(partnerID); diff --git a/src/pokemon_3.c b/src/pokemon_3.c index de11d4a11..5b0ba490b 100644 --- a/src/pokemon_3.c +++ b/src/pokemon_3.c @@ -192,7 +192,7 @@ s32 GetBaseSpecies(s16 index) { return index; } -s32 GetBaseSpeciesNoUnown(s16 index) { +s16 GetBaseSpeciesNoUnown(s16 index) { register s32 a1_ asm("r2") = index; if (index == MONSTER_CASTFORM_SNOWY) { return MONSTER_CASTFORM; diff --git a/src/pokemon_mid.c b/src/pokemon_mid.c index bc56660ac..7c30f4a0f 100644 --- a/src/pokemon_mid.c +++ b/src/pokemon_mid.c @@ -246,20 +246,21 @@ void CopyCyanMonsterNametoBuffer(u8 *buffer, s16 index) sprintfStatic(buffer, gUnknown_8107608, gMonsterParameters[new_index].species); // {COLOR_2 CYAN}%s{END_COLOR_TEXT_2} } -void sub_808D930(u8 *buffer, s16 index) +void sub_808D930(u8 *buffer, s32 index) { char *unownString; s32 unownIndex; const char *preload; + s16 index_s16 = index; - if (GetBaseSpecies(index) == MONSTER_UNOWN) { + if (GetBaseSpecies(index_s16) == MONSTER_UNOWN) { preload = gUnknown_8107630; // %s%c unownString = GetMonSpecies(MONSTER_UNOWN); - unownIndex = GetUnownIndex(index); + unownIndex = GetUnownIndex(index_s16); sprintfStatic(buffer,preload,unownString,gUnownLetters[unownIndex]); // ABCDEFGHIJKLMNOPQRSTUVWXYZ!? } else { - sprintfStatic(buffer,gUnknown_8107638, gMonsterParameters[index].species); // %s + sprintfStatic(buffer,gUnknown_8107638, gMonsterParameters[index_s16].species); // %s } } @@ -376,9 +377,10 @@ u32 GetSize(s16 index) return gMonsterParameters[index].size; } -u8 GetFriendArea(s16 index) +u8 GetFriendArea(s32 index) { - return gMonsterParameters[index].friendArea; + s16 index_s32 = index; + return gMonsterParameters[index_s32].friendArea; } u16 GetBaseHP(s16 index) @@ -422,9 +424,10 @@ u8 GetPokemonAbility(s16 index, u32 abilityIndex) return gMonsterParameters[index].abilities[abilityIndex]; } -s16 GetDexInternalNo(s16 index, u32 r1) +s16 GetDexInternalNo(s32 index, u32 r1) { - return gMonsterParameters[index].dexInternal[r1]; + s16 index_s16 = index; + return gMonsterParameters[index_s16].dexInternal[r1]; } s16 GetRecruitRate(s16 index) @@ -617,7 +620,7 @@ void sub_808DFDC(s32 a1, struct PokemonStruct2* a2) } } -void GetPokemonLevelData(struct LevelData* a1, s16 _id, s32 a3) +void GetPokemonLevelData(struct LevelData* a1, s16 _id, s32 level) { u8 buffer[12]; s32 id = _id; @@ -633,11 +636,11 @@ void GetPokemonLevelData(struct LevelData* a1, s16 _id, s32 a3) DecompressATFile((char*)gLevelCurrentData, 0, file); CloseFile(file); } - a3 -= 1; - if ( a3 < 0 ) - a3 = 0; + level -= 1; + if ( level < 0 ) + level = 0; - *a1 = gLevelCurrentData[a3]; + *a1 = gLevelCurrentData[level]; } u8* DecompressMoveID(u8* a1, u16* moveID) diff --git a/src/pokemon_news.c b/src/pokemon_news.c index 457c92fbf..8f54f5a4e 100644 --- a/src/pokemon_news.c +++ b/src/pokemon_news.c @@ -14,22 +14,8 @@ struct unkStruct_203B2CC { // size: 0xD4; u8 receivedNewsletters[NUM_POKEMON_NEWS]; - - u32 unk38; - u8 fill3C[0x50 - 0x3C]; - - s16 unk50; - s16 unk52; - s16 unk54; - s16 unk56; - - u16 unk58; - u16 numPKMNNews; - - u8 fill5C[0x6C - 0x5C]; - + struct MenuInputStruct input; u32 unk6C; - struct UnkTextStruct2 *unk70; struct UnkTextStruct2 unk74[4]; }; @@ -55,15 +41,7 @@ struct unkStruct_203B2D8 { // size: 0xA4 u8 unk0[4]; - u32 unk4; - u8 fill8[0x1C - 0x8]; - s16 unk1C; - s16 unk1E; - s16 unk20; - s16 unk22; - s16 fill24; - /* 0x26 */ s16 emptyMailSlots; - u8 fill28[0x38 - 0x28]; + struct MenuInputStruct input; u32 unk38; struct UnkTextStruct2 *unk3C; struct UnkTextStruct2 unk40[4]; @@ -180,9 +158,9 @@ extern void CreatePKMNNewsMenu(void); extern void sub_8013818(void *, u32, u32, u32); extern u8 sub_80138B8(void *, u32); extern void PlayMenuSoundEffect(u32); -extern s32 GetKeyPress(u32 *); -extern void sub_8013660(u32 *); -extern void AddMenuCursorSprite(u32 *); +extern s32 GetKeyPress(struct MenuInputStruct *); +extern void sub_8013660(struct MenuInputStruct *); +extern void AddMenuCursorSprite(struct MenuInputStruct *); extern void sub_802BCC4(void); extern void sub_802BB14(u32); extern void sub_801317C(u32 *); @@ -190,7 +168,7 @@ extern u8 HasNoMailinMailbox(void); extern void sub_802BF30(void); extern void CreateMailMenu(void); extern s32 CountEmptyMailSlots(void); -extern void sub_8013848(u32 *, s32, u32, u32); +extern void sub_8013848(struct MenuInputStruct*, s32, u32, u32); void sub_802BB28(void); extern void sub_802BB98(void); extern void sub_802BC08(void); @@ -206,8 +184,8 @@ extern void sub_80073E0(u32); extern void xxx_call_draw_string(s32 x, u32 y, const u8 *, u32 , u32); extern void xxx_format_and_draw(u32, u32, const u8 *, u32, u32); extern void sub_803B6B0(u32, u32, u32, u32); -extern s32 sub_8013800(u32 *, s32); -extern void sub_8013984(u32 *); +extern s32 sub_8013800(struct MenuInputStruct *, s32); +extern void sub_8013984(struct MenuInputStruct *); extern struct PokemonStruct *sub_808D3BC(void); extern void PrintPokeNameToBuffer(u8 *buffer, struct PokemonStruct *pokemon); @@ -240,12 +218,12 @@ u32 sub_802B640(u32 r0, struct UnkTextStruct2_sub *r1, u32 r2) ResetUnusedInputStruct(); sub_800641C(gUnknown_203B2CC->unk74, 1, 1); - sub_8013818(&gUnknown_203B2CC->unk38, GetNumPKMNNews(), r2, r0); + sub_8013818(&gUnknown_203B2CC->input, GetNumPKMNNews(), r2, r0); - gUnknown_203B2CC->unk50 = gUnknown_203B2D0; - gUnknown_203B2CC->unk56 = gUnknown_203B2D2; + gUnknown_203B2CC->input.menuIndex = gUnknown_203B2D0; + gUnknown_203B2CC->input.unk1E = gUnknown_203B2D2; - sub_8013984(&gUnknown_203B2CC->unk38); + sub_8013984(&gUnknown_203B2CC->input); sub_802B880(); CreatePKMNNewsMenu(); @@ -257,12 +235,12 @@ u32 sub_802B720(u8 r0) { if(r0 == 0) { - sub_8013660(&gUnknown_203B2CC->unk38); + sub_8013660(&gUnknown_203B2CC->input); return 0; } else { - switch(GetKeyPress(&gUnknown_203B2CC->unk38)) + switch(GetKeyPress(&gUnknown_203B2CC->input)) { case INPUT_B_BUTTON: PlayMenuSoundEffect(1); @@ -274,7 +252,7 @@ u32 sub_802B720(u8 r0) PlayMenuSoundEffect(4); return 4; } - if(sub_80138B8(&gUnknown_203B2CC->unk38, 1) != 0) + if(sub_80138B8(&gUnknown_203B2CC->input, 1) != 0) { sub_802B880(); CreatePKMNNewsMenu(); @@ -287,7 +265,7 @@ u32 sub_802B720(u8 r0) u8 GetPokemonNewsIndex(void) { - return gUnknown_203B2CC->receivedNewsletters[(gUnknown_203B2CC->unk56 * gUnknown_203B2CC->unk54) + gUnknown_203B2CC->unk50]; + return gUnknown_203B2CC->receivedNewsletters[(gUnknown_203B2CC->input.unk1E * gUnknown_203B2CC->input.unk1C) + gUnknown_203B2CC->input.menuIndex]; } void sub_802B7D0(u8 r0) @@ -295,14 +273,14 @@ void sub_802B7D0(u8 r0) ResetUnusedInputStruct(); sub_800641C(gUnknown_203B2CC->unk74, 0, 0); - gUnknown_203B2CC->numPKMNNews = GetNumPKMNNews(); - sub_8013984(&gUnknown_203B2CC->unk38); + gUnknown_203B2CC->input.unk22 = GetNumPKMNNews(); + sub_8013984(&gUnknown_203B2CC->input); sub_802B880(); CreatePKMNNewsMenu(); if(r0 != 0) { - AddMenuCursorSprite(&gUnknown_203B2CC->unk38); + AddMenuCursorSprite(&gUnknown_203B2CC->input); } } @@ -310,9 +288,9 @@ void sub_802B81C(void) { if(gUnknown_203B2CC != NULL) { - gUnknown_203B2D0 = gUnknown_203B2CC->unk50; + gUnknown_203B2D0 = gUnknown_203B2CC->input.menuIndex; - gUnknown_203B2D2 = gUnknown_203B2CC->unk56; + gUnknown_203B2D2 = gUnknown_203B2CC->input.unk1E; gUnknown_203B2CC->unk74[gUnknown_203B2CC->unk6C] = gUnknown_80DFBD0; @@ -380,11 +358,11 @@ void CreatePKMNNewsMenu(void) sub_8008C54(gUnknown_203B2CC->unk6C); sub_80073B8(gUnknown_203B2CC->unk6C); xxx_call_draw_string(0xA, 0, gUnknown_80DFC04, gUnknown_203B2CC->unk6C, 0); - sub_8012BC4(((gUnknown_80DFBE8[2] << 3) + 4), 0, gUnknown_203B2CC->unk56 + 1, 2, 7, gUnknown_203B2CC->unk6C); - for(index = 0; index < gUnknown_203B2CC->unk52; index++) + sub_8012BC4(((gUnknown_80DFBE8[2] << 3) + 4), 0, gUnknown_203B2CC->input.unk1E + 1, 2, 7, gUnknown_203B2CC->unk6C); + for(index = 0; index < gUnknown_203B2CC->input.unk1A; index++) { - y = sub_8013800(&gUnknown_203B2CC->unk38, index); - new_index = (gUnknown_203B2CC->unk56 * gUnknown_203B2CC->unk54) + index; + y = sub_8013800(&gUnknown_203B2CC->input, index); + new_index = (gUnknown_203B2CC->input.unk1E * gUnknown_203B2CC->input.unk1C) + index; mailIndex = gUnknown_203B2CC->receivedNewsletters[new_index]; sub_803B6B0(0xA, y, 6, gUnknown_203B2CC->unk6C); sub_802BC7C(); @@ -607,9 +585,9 @@ u32 sub_802BD14(s32 param_1, struct UnkTextStruct2_sub *param_2, u32 param_3) sub_8012D34(gUnknown_203B2D8->unk3C,param_3); ResetUnusedInputStruct(); sub_800641C(gUnknown_203B2D8->unk40,1,1); - sub_8013848(&gUnknown_203B2D8->unk4,CountEmptyMailSlots(),param_3,param_1); - gUnknown_203B2D8->unk1C = gUnknown_203B2DC; - sub_8013984(&gUnknown_203B2D8->unk4); + sub_8013848(&gUnknown_203B2D8->input,CountEmptyMailSlots(),param_3,param_1); + gUnknown_203B2D8->input.menuIndex = gUnknown_203B2DC; + sub_8013984(&gUnknown_203B2D8->input); sub_802BF30(); CreateMailMenu(); return 1; @@ -620,10 +598,10 @@ u32 sub_802BDEC(u8 r0) { if(r0 == 0) { - sub_8013660(&gUnknown_203B2D8->unk4); + sub_8013660(&gUnknown_203B2D8->input); return 0; } - switch(GetKeyPress(&gUnknown_203B2D8->unk4)) + switch(GetKeyPress(&gUnknown_203B2D8->input)) { case INPUT_B_BUTTON: PlayMenuSoundEffect(1); @@ -635,7 +613,7 @@ u32 sub_802BDEC(u8 r0) PlayMenuSoundEffect(4); return 4; default: - if(sub_80138B8(&gUnknown_203B2D8->unk4, 1) != 0) + if(sub_80138B8(&gUnknown_203B2D8->input, 1) != 0) { sub_802BF30(); CreateMailMenu(); @@ -647,7 +625,7 @@ u32 sub_802BDEC(u8 r0) } u8 sub_802BE74(void) { - return gUnknown_203B2D8->unk0[(gUnknown_203B2D8->unk22 * gUnknown_203B2D8->unk20) + gUnknown_203B2D8->unk1C]; + return gUnknown_203B2D8->unk0[(gUnknown_203B2D8->input.unk1E * gUnknown_203B2D8->input.unk1C) + gUnknown_203B2D8->input.menuIndex]; } void sub_802BE94(u8 r0) @@ -655,14 +633,14 @@ void sub_802BE94(u8 r0) ResetUnusedInputStruct(); sub_800641C(gUnknown_203B2D8->unk40, 0, 0); - gUnknown_203B2D8->emptyMailSlots = CountEmptyMailSlots(); - sub_8013984(&gUnknown_203B2D8->unk4); + gUnknown_203B2D8->input.unk22 = CountEmptyMailSlots(); + sub_8013984(&gUnknown_203B2D8->input); sub_802BF30(); CreateMailMenu(); if(r0 != 0) { - AddMenuCursorSprite(&gUnknown_203B2D8->unk4); + AddMenuCursorSprite(&gUnknown_203B2D8->input); } } @@ -670,7 +648,7 @@ void sub_802BEDC(void) { if(gUnknown_203B2D8 != NULL) { - gUnknown_203B2DC = gUnknown_203B2D8->unk1C; + gUnknown_203B2DC = gUnknown_203B2D8->input.menuIndex; gUnknown_203B2D8->unk40[gUnknown_203B2D8->unk38] = gUnknown_80DFC5C; ResetUnusedInputStruct(); sub_800641C(gUnknown_203B2D8->unk40, 1, 1); diff --git a/src/post_office_guide.c b/src/post_office_guide.c index 8b662ecb8..41c626f26 100644 --- a/src/post_office_guide.c +++ b/src/post_office_guide.c @@ -29,8 +29,7 @@ EWRAM_DATA_2 struct PostOfficeHelper *gPostOfficeHelper = {0}; struct unkStruct_203B330 { // size: 0x78 - struct UnkInputStruct *unk0; - u8 fill4[0x8]; + struct MenuInputStructSub input; u8 unkC; u8 dungeonIndex; u8 fillE[2]; @@ -179,7 +178,7 @@ extern u8 gAvailablePokemonNames[]; extern void sub_80141B4(const char *r0, u32, struct OpenedFile **r1, u32); extern void sub_8014248(const char *r0, u32, u32, const struct MenuItem *r4, u32, u32, u32, struct OpenedFile **r5, u32); -extern u32 sub_8012A64(struct UnkInputStruct**, u32); +extern u32 sub_8012A64(struct MenuInputStructSub *, u32); extern void PlayMenuSoundEffect(u32); extern void sub_8031A84(); extern void DisplayMissionObjectives(); @@ -536,7 +535,7 @@ u32 sub_80319A4(u8 param_1,u8 dungeon,int param_3) gUnknown_203B330 = MemoryAlloc(sizeof(struct unkStruct_203B330),8); gUnknown_203B330->unkC = param_1; gUnknown_203B330->dungeonIndex = dungeon; - sub_801317C(&gUnknown_203B330->unk0); + sub_801317C(&gUnknown_203B330->input); gUnknown_203B330->unk10 = param_3; gUnknown_203B330->unk14 = &gUnknown_203B330->unk18[param_3]; sub_8031A2C(); @@ -545,7 +544,7 @@ u32 sub_80319A4(u8 param_1,u8 dungeon,int param_3) u32 sub_80319F8(void) { - switch(sub_8012A64(&gUnknown_203B330->unk0, gUnknown_203B330->unk10)) + switch(sub_8012A64(&gUnknown_203B330->input, gUnknown_203B330->unk10)) { case 2: PlayMenuSoundEffect(1); diff --git a/src/rescue_password_menu.c b/src/rescue_password_menu.c index b5306b8a6..d98e5c491 100644 --- a/src/rescue_password_menu.c +++ b/src/rescue_password_menu.c @@ -273,7 +273,6 @@ extern struct MainMenu *GetMainMenu(void); extern void SetMenuItems(struct MenuStruct *, struct UnkTextStruct2 *, u32, const struct UnkTextStruct2 *, const struct MenuItem *, u32, u32, u32); extern void sub_8035CF4(struct MenuStruct *r0, u32, u32); -bool8 IsInvalidItemReward(u8); bool8 sub_8095298(s32); bool8 sub_803D204(u8 *, struct unkStruct_203B480 *); extern s32 GetDungeonFloorCount(u8); diff --git a/src/save_menu.c b/src/save_menu.c index 3ac86cb41..7d941ef54 100644 --- a/src/save_menu.c +++ b/src/save_menu.c @@ -1,4 +1,3 @@ -#include "gba/defines.h" #include "global.h" #include "input.h" #include "menu.h" diff --git a/src/status_actions.c b/src/status_actions.c index 28e28fbac..4c6ddd44c 100644 --- a/src/status_actions.c +++ b/src/status_actions.c @@ -1030,7 +1030,7 @@ bool8 TrapbustOrbAction(struct Entity * pokemon,struct Entity * target) } else { - if (tile->room == 0xFF) { + if (tile->room == CORRIDOR_ROOM) { bottomRightCornerX = target->pos.x - gDungeon->visibilityRange; bottomRightCornerY = target->pos.y - gDungeon->visibilityRange; topLeftCornerX = bottomRightCornerX + gDungeon->visibilityRange; diff --git a/src/wonder_mail_2_1.c b/src/wonder_mail_2_1.c index 8392a2325..c8fccdfaf 100644 --- a/src/wonder_mail_2_1.c +++ b/src/wonder_mail_2_1.c @@ -98,23 +98,23 @@ extern void sub_802CAA4(void); extern u8 IsJobSlotEmpty(u8); extern void sub_8008C54(u32); extern void sub_80073B8(u32); -extern void sub_8013C68(u32 *); +extern void sub_8013C68(struct MenuInputStruct*); extern void sub_80073E0(u32); extern struct WonderMail* GetJobSlotInfo(u8); -extern s32 sub_8013800(void *, u32); +extern s32 sub_8013800(struct MenuInputStruct*, u32); extern void sub_803B35C(struct WonderMail *, struct unkStruct_802C39C *); extern void xxx_call_draw_string(u32, u32, const u8 *, u32, u32); extern void CreateRescueTitle(struct unkStruct_802C39C *); -extern void sub_8013984(u32 *); +extern void sub_8013984(struct MenuInputStruct*); extern void sub_802C6DC(void); extern void DrawJobListMenu(void); -extern void AddMenuCursorSprite(u32 *); -extern u8 sub_80138B8(void *, u32); -extern s32 GetKeyPress(void *); +extern void AddMenuCursorSprite(struct MenuInputStruct*); +extern u8 sub_80138B8(struct MenuInputStruct*, u32); +extern s32 GetKeyPress(struct MenuInputStruct*); extern void PlayMenuSoundEffect(u32); extern void sub_8013660(void *); -extern void sub_8013848(u32 *, s32, u32, u32); +extern void sub_8013848(struct MenuInputStruct*, s32, u32, u32); extern bool8 IsPelipperBoardSlotEmpty(u8); extern void SetJobListState(u32); extern void sub_802CC00(void); @@ -176,9 +176,9 @@ bool8 sub_802C4C8(int param_1,struct UnkTextStruct2_sub *param_2,u32 param_3) sub_8012D34(gUnknown_203B2E8->unk40,param_3); ResetUnusedInputStruct(); sub_800641C(gUnknown_203B2E8->unk44,1,1); - sub_8013848(&gUnknown_203B2E8->unk8,CountAcceptedJobs(),param_3,param_1); - gUnknown_203B2E8->unk20 = gUnknown_203B2EC; - sub_8013984(&gUnknown_203B2E8->unk8); + sub_8013848(&gUnknown_203B2E8->input,CountAcceptedJobs(),param_3,param_1); + gUnknown_203B2E8->input.menuIndex = gUnknown_203B2EC; + sub_8013984(&gUnknown_203B2E8->input); sub_802C6DC(); DrawJobListMenu(); return TRUE; @@ -188,11 +188,11 @@ bool8 sub_802C4C8(int param_1,struct UnkTextStruct2_sub *param_2,u32 param_3) u32 sub_802C598(u8 param_1) { if (param_1 == '\0') { - sub_8013660(&gUnknown_203B2E8->unk8); + sub_8013660(&gUnknown_203B2E8->input); return 0; } else { - switch(GetKeyPress(&gUnknown_203B2E8->unk8)) + switch(GetKeyPress(&gUnknown_203B2E8->input)) { case INPUT_B_BUTTON: PlayMenuSoundEffect(1); @@ -204,7 +204,7 @@ u32 sub_802C598(u8 param_1) PlayMenuSoundEffect(4); return 4; } - if (sub_80138B8(&gUnknown_203B2E8->unk8, 1) != '\0') { + if (sub_80138B8(&gUnknown_203B2E8->input, 1) != '\0') { sub_802C6DC(); DrawJobListMenu(); return 1; @@ -217,26 +217,26 @@ u32 sub_802C598(u8 param_1) u8 GetPelipperBoardSlotIndex(void) { - return gUnknown_203B2E8->pelipperBoardSlots[gUnknown_203B2E8->unk26 * gUnknown_203B2E8->unk24 + gUnknown_203B2E8->unk20]; + return gUnknown_203B2E8->pelipperBoardSlots[gUnknown_203B2E8->input.unk1E * gUnknown_203B2E8->input.unk1C + gUnknown_203B2E8->input.menuIndex]; } void sub_802C640(u8 r0) { ResetUnusedInputStruct(); sub_800641C(gUnknown_203B2E8->unk44, 0, 0); - gUnknown_203B2E8->acceptedJobs = CountAcceptedJobs(); - sub_8013984(&gUnknown_203B2E8->unk8); + gUnknown_203B2E8->input.unk22 = CountAcceptedJobs(); + sub_8013984(&gUnknown_203B2E8->input); sub_802C6DC(); DrawJobListMenu(); if(r0) - AddMenuCursorSprite(&gUnknown_203B2E8->unk8); + AddMenuCursorSprite(&gUnknown_203B2E8->input); } void sub_802C688(void) { if(gUnknown_203B2E8 != NULL) { - gUnknown_203B2EC = gUnknown_203B2E8->unk20; + gUnknown_203B2EC = gUnknown_203B2E8->input.menuIndex; gUnknown_203B2E8->unk44[gUnknown_203B2E8->unk3C] = gUnknown_80DFCE4; ResetUnusedInputStruct(); sub_800641C(gUnknown_203B2E8->unk44, 1, 1); @@ -315,19 +315,19 @@ void DrawJobListMenu(void) sub_8008C54(gUnknown_203B2E8->unk3C); sub_80073B8(gUnknown_203B2E8->unk3C); - r4 = gUnknown_203B2E8->unk26 * 8; + r4 = gUnknown_203B2E8->input.unk1E * 8; r5 = r4; r5 += 10; xxx_call_draw_string(r5,0,gUnknown_80DFD14,gUnknown_203B2E8->unk3C,0); // "Job List" r4 += 4; r5 = r4 + gUnknown_203B2E8->unkA4[2] * 8; - sub_8012BC4(r5,0,gUnknown_203B2E8->unk26 + 1,2,7,gUnknown_203B2E8->unk3C); + sub_8012BC4(r5,0,gUnknown_203B2E8->input.unk1E + 1,2,7,gUnknown_203B2E8->unk3C); - for(index = 0; index < gUnknown_203B2E8->unk22; index++) + for(index = 0; index < gUnknown_203B2E8->input.unk1A; index++) { - mail = GetJobSlotInfo(gUnknown_203B2E8->pelipperBoardSlots[gUnknown_203B2E8->unk26 * gUnknown_203B2E8->unk24 + index]); + mail = GetJobSlotInfo(gUnknown_203B2E8->pelipperBoardSlots[gUnknown_203B2E8->input.unk1E * gUnknown_203B2E8->input.unk1C + index]); local.unk0[0] = gUnknown_203B2E8->unk3C; - local.y = sub_8013800(&gUnknown_203B2E8->unk8,index); + local.y = sub_8013800(&gUnknown_203B2E8->input,index); sub_803B35C(mail,&local); CreateRescueTitle(&local); } diff --git a/src/wonder_mail_2_mid.c b/src/wonder_mail_2_mid.c index 345dd3c99..c1eb56a61 100644 --- a/src/wonder_mail_2_mid.c +++ b/src/wonder_mail_2_mid.c @@ -12,21 +12,21 @@ bool8 IsMailSlotEmpty(u8); extern void sub_8013984(void *); -extern void sub_8013848(u32 *, s32, u32, u32); +extern void sub_8013848(struct MenuInputStruct *, s32, u32, u32); extern s32 CountPelipperBoardSlots(void); extern void sub_802C328(void); extern void DrawPelipperBoardJobMenu(void); extern void PlayMenuSoundEffect(u32); -extern void sub_8013660(u32 *); -extern s32 GetKeyPress(u32 *); -extern bool8 sub_80138B8(u32 *, u32); -extern void AddMenuCursorSprite(u32 *); +extern void sub_8013660(struct MenuInputStruct *); +extern s32 GetKeyPress(struct MenuInputStruct *); +extern bool8 sub_80138B8(struct MenuInputStruct *, u32); +extern void AddMenuCursorSprite(struct MenuInputStruct *); extern u8 HasNoPelipperBoardJobs(void); extern void sub_8008C54(u32); extern void sub_80073B8(u32); extern void sub_80073E0(u32); -extern s32 sub_8013800(u32 *, s32); +extern s32 sub_8013800(struct MenuInputStruct *, s32); extern struct WonderMail *GetPelipperBoardSlotInfo(u32); extern void sub_803B35C(struct WonderMail *, u32 *); extern u8 gBulletinBoardText[]; @@ -39,37 +39,20 @@ struct unkStruct_203B2D8 { // size: 0xA4 u8 unk0[4]; - u32 unk4; - u8 fill8[0x1C - 0x8]; - s16 unk1C; - s16 unk1E; - s16 unk20; - s16 unk22; - s16 fill24; - /* 0x26 */ s16 emptyMailSlots; - u8 fill28[0x38 - 0x28]; + struct MenuInputStruct input; u32 unk38; struct UnkTextStruct2 *unk3C; struct UnkTextStruct2 unk40[4]; u8 unkA0[4]; }; - extern struct unkStruct_203B2D8 *gUnknown_203B2D8; struct unkStruct_203B2E0 { // size: 0xA8 u8 unk0[0x8]; - u32 unk8; - u8 unkC[0x20 - 0xC]; - s16 unk20; - s16 unk22; - s16 unk24; - s16 unk26; - s16 unk28; - s16 pelipperBoardSlots; - u8 fill22[0x3C - 0x2C]; + struct MenuInputStruct input; s32 unk3C; struct UnkTextStruct2 *unk40; struct UnkTextStruct2 unk44[4]; @@ -99,13 +82,13 @@ void CreateMailMenu(void) sub_8008C54(gUnknown_203B2D8->unk38); sub_80073B8(gUnknown_203B2D8->unk38); - xxx_call_draw_string(gUnknown_203B2D8->unk22 * 8 + 10,0,gMailboxText,gUnknown_203B2D8->unk38,0); - for (index = 0; index < gUnknown_203B2D8->unk1E; index++) { - mail = GetMailboxSlotInfo(gUnknown_203B2D8->unk0[(gUnknown_203B2D8->unk22 * gUnknown_203B2D8->unk20) + index]); + xxx_call_draw_string(gUnknown_203B2D8->input.unk1E * 8 + 10,0,gMailboxText,gUnknown_203B2D8->unk38,0); + for (index = 0; index < gUnknown_203B2D8->input.unk1A; index++) { + mail = GetMailboxSlotInfo(gUnknown_203B2D8->unk0[(gUnknown_203B2D8->input.unk1E * gUnknown_203B2D8->input.unk1C) + index]); local.unk0[0] = gUnknown_203B2D8->unk38; - local.y = sub_8013800(&gUnknown_203B2D8->unk4, index); + local.y = sub_8013800(&gUnknown_203B2D8->input, index); if (mail->mailType == MAIL_TYPE_UNK1) { - y = sub_8013800(&gUnknown_203B2D8->unk4, index); + y = sub_8013800(&gUnknown_203B2D8->input, index); sub_803B6B0(10,y,6,gUnknown_203B2D8->unk38); PrintPokeNameToBuffer(gAvailablePokemonNames, GetPlayerPokemonStruct()); sprintfStatic(buffer, GetPokemonMailHeadline(mail->dungeon.floor), gAvailablePokemonNames); @@ -173,9 +156,9 @@ bool8 sub_802C10C(s32 param_1,struct UnkTextStruct2_sub *param_2,s32 param_3) sub_8012D34(gUnknown_203B2E0->unk40,param_3); ResetUnusedInputStruct(); sub_800641C(gUnknown_203B2E0->unk44,1,1); - sub_8013848(&gUnknown_203B2E0->unk8,CountPelipperBoardSlots(),param_3,param_1); - gUnknown_203B2E0->unk20 = gUnknown_203B2E4; - sub_8013984(&gUnknown_203B2E0->unk8); + sub_8013848(&gUnknown_203B2E0->input,CountPelipperBoardSlots(),param_3,param_1); + gUnknown_203B2E0->input.menuIndex = gUnknown_203B2E4; + sub_8013984(&gUnknown_203B2E0->input); sub_802C328(); DrawPelipperBoardJobMenu(); return TRUE; @@ -185,11 +168,11 @@ bool8 sub_802C10C(s32 param_1,struct UnkTextStruct2_sub *param_2,s32 param_3) u32 sub_802C1E4(u8 param_1) { if (param_1 == '\0') { - sub_8013660(&gUnknown_203B2E0->unk8); + sub_8013660(&gUnknown_203B2E0->input); return 0; } else { - switch(GetKeyPress(&gUnknown_203B2E0->unk8)) + switch(GetKeyPress(&gUnknown_203B2E0->input)) { case INPUT_B_BUTTON: PlayMenuSoundEffect(1); @@ -201,7 +184,7 @@ u32 sub_802C1E4(u8 param_1) PlayMenuSoundEffect(4); return 4; default: - if (sub_80138B8(&gUnknown_203B2E0->unk8,1)) { + if (sub_80138B8(&gUnknown_203B2E0->input,1)) { sub_802C328(); DrawPelipperBoardJobMenu(); return 1; @@ -215,26 +198,26 @@ u32 sub_802C1E4(u8 param_1) u8 sub_802C26C(void) { - return gUnknown_203B2E0->unk0[(gUnknown_203B2E0->unk26 * gUnknown_203B2E0->unk24) + gUnknown_203B2E0->unk20]; + return gUnknown_203B2E0->unk0[(gUnknown_203B2E0->input.unk1E * gUnknown_203B2E0->input.unk1C) + gUnknown_203B2E0->input.menuIndex]; } void sub_802C28C(u8 r0) { ResetUnusedInputStruct(); sub_800641C(gUnknown_203B2E0->unk44, 0, 0); - gUnknown_203B2E0->pelipperBoardSlots = CountPelipperBoardSlots(); - sub_8013984(&gUnknown_203B2E0->unk8); + gUnknown_203B2E0->input.unk22 = CountPelipperBoardSlots(); + sub_8013984(&gUnknown_203B2E0->input); sub_802C328(); DrawPelipperBoardJobMenu(); if(r0) - AddMenuCursorSprite(&gUnknown_203B2E0->unk8); + AddMenuCursorSprite(&gUnknown_203B2E0->input); } void sub_802C2D4(void) { if(gUnknown_203B2E0 != NULL) { - gUnknown_203B2E4 = gUnknown_203B2E0->unk20; + gUnknown_203B2E4 = gUnknown_203B2E0->input.menuIndex; gUnknown_203B2E0->unk44[gUnknown_203B2E0->unk3C] = gUnknown_80DFC9C; ResetUnusedInputStruct(); sub_800641C(gUnknown_203B2E0->unk44, 1, 1); @@ -314,20 +297,20 @@ void DrawPelipperBoardJobMenu(void) sub_8008C54(gUnknown_203B2E0->unk3C); sub_80073B8(gUnknown_203B2E0->unk3C); - iVar4 = gUnknown_203B2E0->unk26 * 8; + iVar4 = gUnknown_203B2E0->input.unk1E * 8; x = iVar4; x += 10; xxx_call_draw_string(x,0,gBulletinBoardText,gUnknown_203B2E0->unk3C,0); iVar4 += 4; x = iVar4 + gUnknown_203B2E0->unkA4[2] * 8; - sub_8012BC4(x,0,gUnknown_203B2E0->unk26 + 1,2,7,gUnknown_203B2E0->unk3C); + sub_8012BC4(x,0,gUnknown_203B2E0->input.unk1E + 1,2,7,gUnknown_203B2E0->unk3C); - for(index = 0; index < gUnknown_203B2E0->unk22; index++) + for(index = 0; index < gUnknown_203B2E0->input.unk1A; index++) { - slotIndex = (gUnknown_203B2E0->unk0[gUnknown_203B2E0->unk26 * gUnknown_203B2E0->unk24 + index]); + slotIndex = (gUnknown_203B2E0->unk0[gUnknown_203B2E0->input.unk1E * gUnknown_203B2E0->input.unk1C + index]); mail = GetPelipperBoardSlotInfo(slotIndex); local.unk0[0] = gUnknown_203B2E0->unk3C; - local.y = sub_8013800(&gUnknown_203B2E0->unk8,index); + local.y = sub_8013800(&gUnknown_203B2E0->input,index); sub_803B35C(mail,local.unk0); if (IsMailinJobSlot(GetPelipperBoardSlotInfo(slotIndex))) { local.unk43 = 2; diff --git a/src/wonder_mail_3.c b/src/wonder_mail_3.c index 955155cf3..7d331d851 100644 --- a/src/wonder_mail_3.c +++ b/src/wonder_mail_3.c @@ -154,17 +154,17 @@ extern void sub_8008C54(u32); extern void sub_80073B8(u32); extern void sub_80073E0(u32); extern void CreateRescueTitle(struct unkStruct_802C39C *); -extern s32 sub_8013800(void *, u32); +extern s32 sub_8013800(struct MenuInputStruct *, u32); extern u8 gUnknown_80DFDBC[]; extern void sub_802CF5C(void); extern void sub_802CFD0(void); -extern void sub_8013984(void *); -extern void AddMenuCursorSprite(void *); -extern u8 sub_80138B8(void *, u32); -extern void sub_8013660(void *); -extern u32 GetKeyPress(void *); +extern void sub_8013984(struct MenuInputStruct *); +extern void AddMenuCursorSprite(struct MenuInputStruct *); +extern u8 sub_80138B8(struct MenuInputStruct *, u32); +extern void sub_8013660(struct MenuInputStruct *); +extern u32 GetKeyPress(struct MenuInputStruct *); extern void PlayMenuSoundEffect(u32); -extern void sub_8013848(void *, s32, u32, u32); +extern void sub_8013848(struct MenuInputStruct *, s32, u32, u32); extern void sub_802DF24(void); extern void SetJobListState(u32); @@ -375,7 +375,7 @@ bool8 sub_802CDD4(u32 r0) sub_8012D34(gUnknown_203B2F4->unk38, 4); ResetUnusedInputStruct(); sub_800641C(gUnknown_203B2F4->unk3C, 1, 1); - sub_8013848(gUnknown_203B2F4, 5, 4, r0); + sub_8013848(&gUnknown_203B2F4->input, 5, 4, r0); sub_802CF5C(); sub_802CFD0(); return TRUE; @@ -385,12 +385,12 @@ u32 sub_802CE5C(u8 r0) { if(r0 == 0) { - sub_8013660(gUnknown_203B2F4); + sub_8013660(&gUnknown_203B2F4->input); return 0; } else { - switch(GetKeyPress(gUnknown_203B2F4)) + switch(GetKeyPress(&gUnknown_203B2F4->input)) { case INPUT_B_BUTTON: PlayMenuSoundEffect(1); @@ -398,7 +398,7 @@ u32 sub_802CE5C(u8 r0) case INPUT_A_BUTTON: return 3; default: - if(sub_80138B8(gUnknown_203B2F4, 1) != 0) + if(sub_80138B8(&gUnknown_203B2F4->input, 1) != 0) { sub_802CF5C(); sub_802CFD0(); @@ -414,18 +414,18 @@ u32 sub_802CE5C(u8 r0) u8 sub_802CEBC(void) { - return (gUnknown_203B2F4->unk1E * gUnknown_203B2F4->unk1C) + gUnknown_203B2F4->unk18; + return (gUnknown_203B2F4->input.unk1E * gUnknown_203B2F4->input.unk1C) + gUnknown_203B2F4->input.menuIndex; } void sub_802CED8(u8 r0) { ResetUnusedInputStruct(); sub_800641C(gUnknown_203B2F4->unk3C, 0, 0); - sub_8013984(gUnknown_203B2F4); + sub_8013984(&gUnknown_203B2F4->input); sub_802CF5C(); sub_802CFD0(); if(r0) - AddMenuCursorSprite(gUnknown_203B2F4); + AddMenuCursorSprite(&gUnknown_203B2F4->input); } void sub_802CF14(void) @@ -510,17 +510,17 @@ void sub_802CFD0(void) sub_8008C54(gUnknown_203B2F4->unk34); sub_80073B8(gUnknown_203B2F4->unk34); - r5 = r4 = gUnknown_203B2F4->unk1E * 8 + 10; + r5 = r4 = gUnknown_203B2F4->input.unk1E * 8 + 10; xxx_call_draw_string(r5,0,gUnknown_80DFDBC,gUnknown_203B2F4->unk34,0); // RESCUE EVENT r4 -= 6; r5 = r4 + (gUnknown_203B2F4->unk9C[2] * 8); - sub_8012BC4(r5,0,gUnknown_203B2F4->unk1E + 1,2,7,gUnknown_203B2F4->unk34); + sub_8012BC4(r5,0,gUnknown_203B2F4->input.unk1E + 1,2,7,gUnknown_203B2F4->unk34); - for(r5 = 0; r5 < gUnknown_203B2F4->unk1A; r5++) + for(r5 = 0; r5 < gUnknown_203B2F4->input.unk1A; r5++) { - iVar1 = sub_803B344(gUnknown_203B2F4->unk1E * gUnknown_203B2F4->unk1C + r5); + iVar1 = sub_803B344(gUnknown_203B2F4->input.unk1E * gUnknown_203B2F4->input.unk1C + r5); local.unk0[0] = gUnknown_203B2F4->unk34; - local.y = sub_8013800(gUnknown_203B2F4, r5); + local.y = sub_8013800(&gUnknown_203B2F4->input, r5); sub_803B35C(&iVar1->mail,&local); local.unk43 = 1; local.unk4C = iVar1->unk14; diff --git a/src/wonder_mail_3_mid.c b/src/wonder_mail_3_mid.c index fb02dab38..4e5d0c0e3 100644 --- a/src/wonder_mail_3_mid.c +++ b/src/wonder_mail_3_mid.c @@ -69,15 +69,7 @@ struct unkStruct_203B314 u8 unkB9; u8 unkBA; u8 unkBB; - u32 unkBC; - u8 fillC0[0xD4 - 0xC0]; - s16 unkD4; - s16 unkD6; - s16 unkD8; - s16 unkDA; - s16 unkDC; - s16 unkDE; - u8 fillDF[0xF0 - 0xE0]; + struct MenuInputStruct input; u32 unkF0; struct UnkTextStruct2 *unkF4; struct UnkTextStruct2 unkF8[4]; @@ -103,12 +95,12 @@ enum FriendRewardStates { extern u8 sub_802FCF0(u32); extern void sub_802F9C0(void); extern void sub_802FA50(void); -extern void sub_8013818(u32 *, u32, u32, u32); +extern void sub_8013818(struct MenuInputStruct*, u32, u32, u32); extern u32 sub_802FBF4(void); -extern void sub_8013878(u32 *, s32); +extern void sub_8013878(struct MenuInputStruct *, s32); -extern void AddMenuCursorSprite(u32 *); -extern void sub_8013984(u32 *); +extern void AddMenuCursorSprite(struct MenuInputStruct *); +extern void sub_8013984(struct MenuInputStruct *); extern void SetRewardSceneState(u32); extern void sub_802EFEC(u32); extern void sub_802F148(void); @@ -134,9 +126,9 @@ extern void PrintPokeNameToBuffer(u8 *buffer, struct PokemonStruct *pokemon); extern struct PokemonStruct *GetPlayerPokemonStruct(void); extern void sub_802F6FC(void); extern void ProceedToNextRewardSceneState(void); -extern u8 sub_80138B8(u32 *, u32); -extern void sub_8013660(u32 *); -extern u32 GetKeyPress(u32 *); +extern u8 sub_80138B8(struct MenuInputStruct*, u32); +extern void sub_8013660(struct MenuInputStruct *); +extern u32 GetKeyPress(struct MenuInputStruct *); extern void PlayMenuSoundEffect(u32); extern void sub_802F300(void); extern void PlaySound(u32); @@ -145,7 +137,7 @@ extern void sub_80141B4(const u8 *, u32, struct OpenedFile **, u32); extern u32 sub_801B60C(u32, u8, u8); extern void sub_8092578(u8 *buffer, u8 index, u8 r2); void HandleMissionReward(void); -extern s32 sub_8013800(u32 *, s32); +extern s32 sub_8013800(struct MenuInputStruct *, s32); extern void xxx_call_draw_string(s32, s32, const u8 *, s32, s32); extern void sub_8008C54(u32); extern void sub_80073B8(u32); @@ -754,7 +746,7 @@ u32 sub_802F73C(u32 r0, struct UnkTextStruct2_sub *r1, u32 r2, u8 r3) sub_8012D08(gUnknown_203B314->unkF4, r2); ResetUnusedInputStruct(); sub_800641C(gUnknown_203B314->unkF8, 1, 1); - sub_8013818(&gUnknown_203B314->unkBC, sub_802FBF4(), r2, r0); + sub_8013818(&gUnknown_203B314->input, sub_802FBF4(), r2, r0); sub_802F9C0(); sub_802FA50(); return 1; @@ -768,15 +760,15 @@ u32 sub_802F848(s16 param_1) param_1_32 = param_1; // cast needed - for( index = 0; index < gUnknown_203B314->unkDE; index++ ) { + for( index = 0; index < gUnknown_203B314->input.unk22; index++ ) { if (gUnknown_203B314->unk0[index] == param_1_32) { - sub_8013878(&gUnknown_203B314->unkBC,index); + sub_8013878(&gUnknown_203B314->input,index); sub_802F9C0(); sub_802FA50(); return 1; } } - sub_8013878(&gUnknown_203B314->unkBC,0); + sub_8013878(&gUnknown_203B314->input,0); return 0; } @@ -784,12 +776,12 @@ u32 sub_802F8A0(u8 r0) { if(r0 == 0) { - sub_8013660(&gUnknown_203B314->unkBC); + sub_8013660(&gUnknown_203B314->input); return 0; } else { - switch(GetKeyPress(&gUnknown_203B314->unkBC)) + switch(GetKeyPress(&gUnknown_203B314->input)) { case INPUT_B_BUTTON: PlayMenuSoundEffect(1); @@ -798,7 +790,7 @@ u32 sub_802F8A0(u8 r0) PlayMenuSoundEffect(0); return 3; default: - if(sub_80138B8(&gUnknown_203B314->unkBC, 1) != 0) + if(sub_80138B8(&gUnknown_203B314->input, 1) != 0) { sub_802F9C0(); sub_802FA50(); @@ -814,18 +806,18 @@ u32 sub_802F8A0(u8 r0) s16 sub_802F90C(void) { - return gUnknown_203B314->unk0[(gUnknown_203B314->unkDA * gUnknown_203B314->unkD8) + gUnknown_203B314->unkD4]; + return gUnknown_203B314->unk0[(gUnknown_203B314->input.unk1E * gUnknown_203B314->input.unk1C) + gUnknown_203B314->input.menuIndex]; } void sub_802F938(u8 r0) { - gUnknown_203B314->unkDE = sub_802FBF4(); - sub_8013984(&gUnknown_203B314->unkBC); + gUnknown_203B314->input.unk22 = sub_802FBF4(); + sub_8013984(&gUnknown_203B314->input); sub_802F9C0(); sub_802FA50(); if(r0 != 0) - AddMenuCursorSprite(&gUnknown_203B314->unkBC); + AddMenuCursorSprite(&gUnknown_203B314->input); } void sub_802F974(void) @@ -925,12 +917,12 @@ void sub_802FA50(void) sub_8008C54(gUnknown_203B314->unkF0); sub_80073B8(gUnknown_203B314->unkF0); xxx_call_draw_string(10,0,gUnknown_80E0744,gUnknown_203B314->unkF0,0); - sub_8012BC4(gUnknown_203B314->unk158[2] * 8 + 4,0,gUnknown_203B314->unkDA + 1,2,7,gUnknown_203B314->unkF0); + sub_8012BC4(gUnknown_203B314->unk158[2] * 8 + 4,0,gUnknown_203B314->input.unk1E + 1,2,7,gUnknown_203B314->unkF0); if (gUnknown_203B314->unkB8 != 0) { - for(counter = 0; counter < gUnknown_203B314->unkD6; counter++) + for(counter = 0; counter < gUnknown_203B314->input.unk1A; counter++) { - y = sub_8013800(&gUnknown_203B314->unkBC,counter); - index = gUnknown_203B314->unkDA * gUnknown_203B314->unkD8 + counter; + y = sub_8013800(&gUnknown_203B314->input,counter); + index = gUnknown_203B314->input.unk1E * gUnknown_203B314->input.unk1C + counter; sVar1 = gUnknown_203B314->unk0[index]; if (gUnknown_203B314->unk5C[index] != 0) { xxx_call_draw_string(10,y,gUnknown_80E0750,gUnknown_203B314->unkF0,0); @@ -942,10 +934,10 @@ void sub_802FA50(void) } } else { - for(counter = 0; counter < gUnknown_203B314->unkD6; counter++) + for(counter = 0; counter < gUnknown_203B314->input.unk1A; counter++) { - y2 = sub_8013800(&gUnknown_203B314->unkBC,counter); - text = sub_80974A0(gUnknown_203B314->unk0[gUnknown_203B314->unkDA * gUnknown_203B314->unkD8 + counter]); + y2 = sub_8013800(&gUnknown_203B314->input,counter); + text = sub_80974A0(gUnknown_203B314->unk0[gUnknown_203B314->input.unk1E * gUnknown_203B314->input.unk1C + counter]); xxx_call_draw_string(8,y2,text,gUnknown_203B314->unkF0,0); } } diff --git a/src/wonder_mail_4.c b/src/wonder_mail_4.c index 8a975dda3..44011b132 100644 --- a/src/wonder_mail_4.c +++ b/src/wonder_mail_4.c @@ -15,15 +15,7 @@ struct unkStruct_203B320 // size: 0xC4 u8 unk0[0x20]; u32 wonderMailType; - u32 unk24; - u8 fill28[0x3C - 0x28]; - s16 unk3C; - s16 unk3E; - s16 unk40; - s16 unk42; - s16 unk44; - s16 unk46; - u8 fill48[0x58 - 0x48]; + struct MenuInputStruct input; u32 unk58; struct UnkTextStruct2 *unk5C; struct UnkTextStruct2 unk60[4]; @@ -88,15 +80,15 @@ extern s32 sub_8030A74(void); extern void sub_80308A0(void); extern void sub_803092C(void); extern void sub_8012D08(struct UnkTextStruct2 *, s32); -extern void sub_8013818(void *, u32, u32, u32); +extern void sub_8013818(struct MenuInputStruct*, u32, u32, u32); -extern u8 sub_80138B8(u32 *, u32); -extern void sub_8013660(u32 *); -extern s32 GetKeyPress(u32 *); +extern u8 sub_80138B8(struct MenuInputStruct*, u32); +extern void sub_8013660(struct MenuInputStruct*); +extern s32 GetKeyPress(struct MenuInputStruct*); extern void PlayMenuSoundEffect(u32); -extern void sub_8013984(u32 *); -extern void AddMenuCursorSprite(u32 *); -extern s32 sub_8013800(void *, u32); +extern void sub_8013984(struct MenuInputStruct*); +extern void AddMenuCursorSprite(struct MenuInputStruct*); +extern s32 sub_8013800(struct MenuInputStruct*, u32); extern void xxx_call_draw_string(u32, u32, const u8 *, u32, u32); extern void sub_8008C54(u32); extern void sub_80073B8(u32); @@ -126,7 +118,7 @@ u32 sub_80306A8(u32 wonderMailType, u32 r1, struct UnkTextStruct2_sub *r2, u32 r sub_8012D08(gUnknown_203B320->unk5C, r3); ResetUnusedInputStruct(); sub_800641C(gUnknown_203B320->unk60, 1, 1); - sub_8013818(&gUnknown_203B320->unk24, sub_8030A74(), r3, r1); + sub_8013818(&gUnknown_203B320->input, sub_8030A74(), r3, r1); sub_80308A0(); sub_803092C(); return 1; @@ -136,10 +128,10 @@ u32 sub_8030768(u8 r0) { if(r0 == 0) { - sub_8013660(&gUnknown_203B320->unk24); + sub_8013660(&gUnknown_203B320->input); return 0; } - switch(GetKeyPress(&gUnknown_203B320->unk24)) + switch(GetKeyPress(&gUnknown_203B320->input)) { case INPUT_START_BUTTON: PlayMenuSoundEffect(4); @@ -151,7 +143,7 @@ u32 sub_8030768(u8 r0) PlayMenuSoundEffect(0); return 3; default: - if(sub_80138B8(&gUnknown_203B320->unk24, 1) != 0) + if(sub_80138B8(&gUnknown_203B320->input, 1) != 0) { sub_80308A0(); sub_803092C(); @@ -164,18 +156,18 @@ u32 sub_8030768(u8 r0) u8 sub_80307EC(void) { - return gUnknown_203B320->unk0[(gUnknown_203B320->unk42 * gUnknown_203B320->unk40) + gUnknown_203B320->unk3C]; + return gUnknown_203B320->unk0[(gUnknown_203B320->input.unk1E * gUnknown_203B320->input.unk1C) + gUnknown_203B320->input.menuIndex]; } void sub_8030810(u8 r0) { - gUnknown_203B320->unk46 = sub_8030A74(); - sub_8013984(&gUnknown_203B320->unk24); + gUnknown_203B320->input.unk22 = sub_8030A74(); + sub_8013984(&gUnknown_203B320->input); sub_80308A0(); sub_803092C(); if(r0 != 0) - AddMenuCursorSprite(&gUnknown_203B320->unk24); + AddMenuCursorSprite(&gUnknown_203B320->input); } void sub_803084C() @@ -275,18 +267,18 @@ void sub_803092C(void) sub_8008C54(gUnknown_203B320->unk58); sub_80073B8(gUnknown_203B320->unk58); - r4 = gUnknown_203B320->unk42 * 8; + r4 = gUnknown_203B320->input.unk1E * 8; r5 = r4; r5 += 10; xxx_call_draw_string(r5,0,gUnknown_80E086C[gUnknown_203B320->wonderMailType],gUnknown_203B320->unk58,0); r4 += 4; r5 = r4 + gUnknown_203B320->unkC0[2] * 8; - sub_8012BC4(r5,0,gUnknown_203B320->unk42 + 1,1,7,gUnknown_203B320->unk58); + sub_8012BC4(r5,0,gUnknown_203B320->input.unk1E + 1,1,7,gUnknown_203B320->unk58); - for (index = 0; index < gUnknown_203B320->unk3E; index++) { - mail = GetMailatIndex(gUnknown_203B320->unk0[(gUnknown_203B320->unk42 * gUnknown_203B320->unk40) + index]); + for (index = 0; index < gUnknown_203B320->input.unk1A; index++) { + mail = GetMailatIndex(gUnknown_203B320->unk0[(gUnknown_203B320->input.unk1E * gUnknown_203B320->input.unk1C) + index]); local.unk0[0] = gUnknown_203B320->unk58; - local.y = sub_8013800(&gUnknown_203B320->unk24,index); + local.y = sub_8013800(&gUnknown_203B320->input,index); local.unk40 = 7; local.unk42 = 0; local.unk44 = 0; diff --git a/src/wonder_mail_main_menu.c b/src/wonder_mail_main_menu.c index cfb7500cc..37ab0ef44 100644 --- a/src/wonder_mail_main_menu.c +++ b/src/wonder_mail_main_menu.c @@ -118,7 +118,7 @@ struct unkStruct_203B3E8 bool8 wonderMailAccepted; }; -EWRAM_DATA struct unkStruct_203B3E8 *gUnknown_203B3E8; +EWRAM_DATA_2 struct unkStruct_203B3E8 *gUnknown_203B3E8 = {0}; extern u32 sub_80144A4(s32 *); extern u32 sub_8011C1C(void); diff --git a/sym_ewram.txt b/sym_ewram.txt index 00b89057e..8d0152375 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -167,10 +167,7 @@ gUnknown_202B034: /* 202B034 */ .space 0x4 gUnknown_202B038: /* 202B038 */ - .space 0x2 - -gUnknown_202B03A: /* 202B03A */ - .space 0x7FE + .space 0x800 gUnknown_202B838: /* 202B838 */ .space 0x800 @@ -829,9 +826,8 @@ gUnknown_20393C0: /* 20393C0 */ gUnknown_2039448: /* 2039448 */ .space 0x330 -gUnknown_2039778: /* 2039778 */ - .space 0xC8 - +.include "src/code_8097670.o" +.space 0x4 .include "src/exclusive_pokemon.o" .space 0x4 diff --git a/sym_ewram2.txt b/sym_ewram2.txt index ca63191a1..43a5ab052 100644 --- a/sym_ewram2.txt +++ b/sym_ewram2.txt @@ -341,9 +341,7 @@ gUnknown_203B2FC: /* 203B2FC */ gUnknown_203B300: /* 203B300 */ .space 0x4 -gUnknown_203B304: /* 203B304 */ - .space 0x4 - +.include "src/mailbox.o" .include "src/pelipper_board.o" gUnknown_203B30C: /* 203B30C */ @@ -371,10 +369,7 @@ gUnknown_203B328: /* 203B328 */ .space 0x4 .include "src/post_office_guide.o" - -gUnknown_203B334: /* 203B334 */ - .space 0x4 - +.include "src/code_8031D70.o" .include "src/adventure_log.o" .include "src/friend_rescue.o" @@ -398,14 +393,9 @@ gUnknown_203B364: /* 203B364 */ .space 0x4 .include "src/rescue_password_menu.o" - .include "src/load_screen.o" - -gUnknown_203B3E8: /* 203B3E8 */ - .space 0x4 - -gUnknown_203B3EC: /* 203B3EC */ - .space 0x4 +.include "src/wonder_mail_main_menu.o" +.include "src/debug_menu.o" gUnknown_203B3F0: /* 203B3F0 */ .space 0x4 @@ -484,27 +474,10 @@ gUnknown_203B474: /* 203B474 */ .space 0x8 .include "src/play_time.o" - -gUnknown_203B480: /* 203B480 */ - .space 0x4 - -gUnknown_203B484: /* 203B484 */ - .space 0x4 - -gUnknown_203B488: /* 203B488 */ - .space 0x4 - -gUnknown_203B48C: /* 203B48C */ - .space 0x4 - -gUnknown_203B490: /* 203B490 */ - .space 0x4 - -gUnknown_203B494: /* 203B494 */ - .space 0x4 - + .include "src/code_8094F88.o" + .include "src/code_80958E8.o" + .include "src/code_8097670.o" .include "src/exclusive_pokemon.o" - .include "src/ground_main.o" .space 0x2 @@ -520,5 +493,4 @@ gUnknown_203B4B0: /* 203B4B0 */ gUnknown_203B4B4: /* 203B4B4 */ .space 0x4 -gUnknown_203B4B8: /* 203B4B8 */ - .space 0x4 +.include "src/ground_link.o"