diff options
-rw-r--r-- | asm/region_map.s | 293 | ||||
-rw-r--r-- | src/region_map.c | 132 |
2 files changed, 121 insertions, 304 deletions
diff --git a/asm/region_map.s b/asm/region_map.s index a91d4bd7e..ac9ceeefd 100644 --- a/asm/region_map.s +++ b/asm/region_map.s @@ -5,299 +5,6 @@ .text - thumb_func_start sub_80C4164 -sub_80C4164: @ 80C4164 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - adds r5, r0, 0 - lsls r1, 24 - lsrs r4, r1, 24 - lsls r2, 16 - lsrs r2, 16 - lsls r3, 16 - lsrs r1, r3, 16 - cmp r0, 0x1 - beq _080C4198 - cmp r0, 0x1 - bgt _080C4186 - cmp r0, 0 - beq _080C4190 - b _080C41D0 -_080C4186: - cmp r5, 0x2 - beq _080C41A0 - cmp r5, 0x3 - beq _080C41A8 - b _080C41D0 -_080C4190: - ldr r3, _080C4194 @ =gUnknown_83F2490 - b _080C41AA - .align 2, 0 -_080C4194: .4byte gUnknown_83F2490 -_080C4198: - ldr r3, _080C419C @ =gUnknown_83F2724 - b _080C41AA - .align 2, 0 -_080C419C: .4byte gUnknown_83F2724 -_080C41A0: - ldr r3, _080C41A4 @ =gUnknown_83F29B8 - b _080C41AA - .align 2, 0 -_080C41A4: .4byte gUnknown_83F29B8 -_080C41A8: - ldr r3, _080C41CC @ =gUnknown_83F2C4C -_080C41AA: - lsls r1, 16 - asrs r1, 16 - lsls r0, r2, 16 - asrs r0, 16 - movs r2, 0x16 - muls r0, r2 - adds r1, r0 - lsls r0, r4, 2 - adds r0, r4 - lsls r2, r0, 5 - adds r0, r2 - lsls r0, 1 - adds r1, r0 - adds r1, r3 - ldrb r0, [r1] - b _080C41D2 - .align 2, 0 -_080C41CC: .4byte gUnknown_83F2C4C -_080C41D0: - movs r0, 0xC5 -_080C41D2: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_80C4164 - - thumb_func_start sub_80C41D8 -sub_80C41D8: @ 80C41D8 - push {r4-r6,lr} - lsls r0, 16 - lsrs r6, r0, 16 - lsls r1, 16 - lsrs r5, r1, 16 - ldr r4, _080C4204 @ =gUnknown_20399E8 - movs r0, 0x8C - bl AllocZeroed - adds r1, r0, 0 - str r1, [r4] - ldr r0, _080C4208 @ =gSaveBlock2Ptr - ldr r0, [r0] - ldrb r0, [r0, 0x8] - cmp r0, 0x1 - bne _080C4210 - ldr r0, _080C420C @ =gUnknown_83EF59C - adds r1, 0xC - bl LZ77UnCompWram - b _080C4218 - .align 2, 0 -_080C4204: .4byte gUnknown_20399E8 -_080C4208: .4byte gSaveBlock2Ptr -_080C420C: .4byte gUnknown_83EF59C -_080C4210: - ldr r0, _080C423C @ =gUnknown_83EF524 - adds r1, 0xC - bl LZ77UnCompWram -_080C4218: - ldr r4, _080C4240 @ =gUnknown_20399E8 - ldr r0, [r4] - strh r6, [r0, 0x8] - strh r5, [r0, 0xA] - bl sub_80C3508 - ldr r1, [r4] - strh r0, [r1] - bl sub_80C3514 - ldr r1, [r4] - strh r0, [r1, 0x2] - bl sub_80C4244 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080C423C: .4byte gUnknown_83EF524 -_080C4240: .4byte gUnknown_20399E8 - thumb_func_end sub_80C41D8 - - thumb_func_start sub_80C4244 -sub_80C4244: @ 80C4244 - push {r4-r6,lr} - sub sp, 0x40 - ldr r6, _080C42FC @ =gUnknown_20399E8 - ldr r2, [r6] - adds r0, r2, 0 - adds r0, 0xC - str r0, [sp, 0x30] - movs r1, 0x80 - add r5, sp, 0x30 - str r1, [r5, 0x4] - ldrh r0, [r2, 0x8] - lsls r0, 16 - orrs r0, r1 - str r0, [r5, 0x4] - ldr r0, _080C4300 @ =gUnknown_83EF27C - str r0, [sp, 0x38] - ldrh r3, [r2, 0xA] - ldr r1, _080C4304 @ =0xffff0000 - add r4, sp, 0x38 - ldr r0, [r4, 0x4] - ands r0, r1 - orrs r0, r3 - str r0, [r4, 0x4] - ldrh r0, [r2, 0x8] - add r1, sp, 0x18 - movs r3, 0 - strh r0, [r1] - ldrh r2, [r2, 0xA] - mov r0, sp - adds r0, 0x1A - strh r2, [r0] - ldr r0, _080C4308 @ =gUnknown_83F1C54 - str r0, [sp, 0x1C] - ldr r0, _080C430C @ =gUnknown_83F1C64 - str r0, [sp, 0x20] - str r3, [sp, 0x24] - ldr r0, _080C4310 @ =gDummySpriteAffineAnimTable - str r0, [sp, 0x28] - ldr r0, _080C4314 @ =SpriteCallbackDummy - str r0, [sp, 0x2C] - mov r0, sp - movs r2, 0x18 - bl memcpy - ldr r0, _080C4318 @ =gSaveBlock2Ptr - ldr r0, [r0] - ldrb r0, [r0, 0x8] - cmp r0, 0x1 - bne _080C42AA - ldr r0, _080C431C @ =gUnknown_83EF29C - str r0, [sp, 0x38] -_080C42AA: - adds r0, r5, 0 - bl LoadSpriteSheet - adds r0, r4, 0 - bl LoadSpritePalette - ldr r0, [r6] - movs r2, 0 - ldrsh r1, [r0, r2] - lsls r1, 19 - movs r3, 0x90 - lsls r3, 14 - adds r1, r3 - asrs r1, 16 - movs r3, 0x2 - ldrsh r2, [r0, r3] - lsls r2, 19 - movs r0, 0x90 - lsls r0, 14 - adds r2, r0 - asrs r2, 16 - mov r0, sp - movs r3, 0x2 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - ldr r2, [r6] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - ldr r0, _080C4320 @ =gSprites - adds r1, r0 - str r1, [r2, 0x4] - movs r0, 0x1 - bl sub_80C4324 - add sp, 0x40 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080C42FC: .4byte gUnknown_20399E8 -_080C4300: .4byte gUnknown_83EF27C -_080C4304: .4byte 0xffff0000 -_080C4308: .4byte gUnknown_83F1C54 -_080C430C: .4byte gUnknown_83F1C64 -_080C4310: .4byte gDummySpriteAffineAnimTable -_080C4314: .4byte SpriteCallbackDummy -_080C4318: .4byte gSaveBlock2Ptr -_080C431C: .4byte gUnknown_83EF29C -_080C4320: .4byte gSprites - thumb_func_end sub_80C4244 - - thumb_func_start sub_80C4324 -sub_80C4324: @ 80C4324 - lsls r0, 24 - lsrs r0, 24 - ldr r1, _080C4344 @ =gUnknown_20399E8 - ldr r1, [r1] - ldr r2, [r1, 0x4] - adds r2, 0x3E - movs r1, 0x1 - ands r0, r1 - lsls r0, 2 - ldrb r3, [r2] - movs r1, 0x5 - negs r1, r1 - ands r1, r3 - orrs r1, r0 - strb r1, [r2] - bx lr - .align 2, 0 -_080C4344: .4byte gUnknown_20399E8 - thumb_func_end sub_80C4324 - - thumb_func_start sub_80C4348 -sub_80C4348: @ 80C4348 - push {r4,lr} - ldr r4, _080C437C @ =gUnknown_20399E8 - ldr r0, [r4] - ldr r0, [r0, 0x4] - cmp r0, 0 - beq _080C4368 - bl DestroySprite - ldr r0, [r4] - ldrh r0, [r0, 0x8] - bl FreeSpriteTilesByTag - ldr r0, [r4] - ldrh r0, [r0, 0xA] - bl FreeSpritePaletteByTag -_080C4368: - ldr r0, [r4] - cmp r0, 0 - beq _080C4376 - bl Free - movs r0, 0 - str r0, [r4] -_080C4376: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080C437C: .4byte gUnknown_20399E8 - thumb_func_end sub_80C4348 - - thumb_func_start sub_80C4380 -sub_80C4380: @ 80C4380 - ldr r0, _080C4388 @ =gUnknown_20399E8 - ldr r0, [r0] - ldrh r0, [r0] - bx lr - .align 2, 0 -_080C4388: .4byte gUnknown_20399E8 - thumb_func_end sub_80C4380 - - thumb_func_start sub_80C438C -sub_80C438C: @ 80C438C - ldr r0, _080C4394 @ =gUnknown_20399E8 - ldr r0, [r0] - ldrh r0, [r0, 0x2] - bx lr - .align 2, 0 -_080C4394: .4byte gUnknown_20399E8 - thumb_func_end sub_80C438C - thumb_func_start sub_80C4398 sub_80C4398: @ 80C4398 push {r4-r6,lr} diff --git a/src/region_map.c b/src/region_map.c index 40dbadf0e..7ce44b421 100644 --- a/src/region_map.c +++ b/src/region_map.c @@ -163,12 +163,22 @@ struct UnkStruct_20399E4 u16 field_024[0x080]; }; +struct UnkStruct_20399E8 +{ + s16 field_00; + s16 field_02; + struct Sprite * field_04; + u16 field_08; + u16 field_0A; + u16 field_0C[0x40]; +}; + EWRAM_DATA struct UnkStruct_20399D4 * gUnknown_20399D4 = NULL; EWRAM_DATA struct UnkStruct_20399D8 * gUnknown_20399D8 = NULL; EWRAM_DATA struct UnkStruct_20399DC * gUnknown_20399DC = NULL; EWRAM_DATA struct UnkStruct_20399E0 * gUnknown_20399E0 = NULL; EWRAM_DATA struct UnkStruct_20399E4 * gUnknown_20399E4 = NULL; -EWRAM_DATA void * gUnknown_20399E8 = NULL; +EWRAM_DATA struct UnkStruct_20399E8 * gUnknown_20399E8 = NULL; EWRAM_DATA void * gUnknown_20399EC = NULL; EWRAM_DATA void * gUnknown_20399F0[3] = {}; EWRAM_DATA void * gUnknown_20399FC = NULL; @@ -232,14 +242,18 @@ u8 sub_80C31C0(void); u8 sub_80C3348(void); u8 sub_80C3400(void); void sub_80C3418(void); +u16 sub_80C3508(void); +u16 sub_80C3514(void); u16 sub_80C3520(void); +u16 sub_80C3580(void); u8 sub_80C35DC(u8 a0); u8 sub_80C3878(u8 a0); u8 sub_80C3AC8(u8 a0); void sub_80C3D40(void); u8 sub_80C4164(u8 a0, u8 a1, s16 a2, s16 a3); void sub_80C41D8(u16 a0, u16 a1); -void sub_80C4324(u8 a0); +void sub_80C4244(void); +void sub_80C4324(bool8 a0); void sub_80C4348(void); u16 sub_80C4380(); u16 sub_80C438C(); @@ -262,19 +276,20 @@ void sub_80C4E18(const u8 *str); void sub_80C4E74(const u8 *str); void sub_80C4ED0(bool8 a0); void sub_80C4F08(u8 taskId); -u16 sub_80C3508(void); -u16 sub_80C3514(void); -u16 sub_80C3580(void); #include "data/text/map_section_names.h" extern const u16 gUnknown_83EF23C[]; extern const u16 gUnknown_83EF25C[]; +extern const u16 gUnknown_83EF27C[]; +extern const u16 gUnknown_83EF29C[]; extern const u16 gUnknown_83EF2DC[]; extern const u16 gUnknown_83EF384[]; extern const u16 gUnknown_83EF3A4[]; extern const u32 gUnknown_83EF3C4[]; extern const u32 gUnknown_83EF450[]; extern const u32 gUnknown_83EF4E0[]; +extern const u32 gUnknown_83EF524[]; +extern const u32 gUnknown_83EF59C[]; extern const u32 gUnknown_83EF61C[]; extern const u32 gUnknown_83F0330[]; extern const u32 gUnknown_83F0E0C[]; @@ -310,9 +325,15 @@ extern const union AnimCmd *const gUnknown_83F1C30[]; extern const struct UnkStruct_80C4CF0 gUnknown_83F1C34; extern const struct OamData gUnknown_83F1C3C; extern const union AnimCmd *const gUnknown_83F1C50[]; +extern const struct OamData gUnknown_83F1C54; +extern const union AnimCmd *const gUnknown_83F1C64[]; extern const u8 *const gUnknown_83F1CAC[]; extern const u16 gUnknown_83F1E60[][2]; extern const u16 gUnknown_83F2178[][2]; +extern const u8 gUnknown_83F2490[][15][22]; +extern const u8 gUnknown_83F2724[][15][22]; +extern const u8 gUnknown_83F29B8[][15][22]; +extern const u8 gUnknown_83F2C4C[][15][22]; static void RegionMap_DarkenPalette(u16 *pal, u16 size, u16 tint) { @@ -580,7 +601,7 @@ void sub_80C04E4(u8 taskId) sub_80C4E18(gUnknown_8418EB5); sub_80C4E74(gUnknown_8418E8B); sub_80C4ED0(FALSE); - sub_80C4324(0); + sub_80C4324(FALSE); sub_80C3154(FALSE); sub_80C48BC(sub_80C0E20(), 25, 0); sub_80C4960(sub_80C0E20(), 25, 0); @@ -1054,7 +1075,7 @@ void sub_80C1098(u8 taskId) sub_80C0E48(gUnknown_20399D8->field_1CCA); if (sub_80C0E34() == gUnknown_20399D8->field_1CCA) { - sub_80C4324(0); + sub_80C4324(FALSE); sub_80C48BC(gUnknown_20399D8->field_1CCA, 25, 0); sub_80C4960(gUnknown_20399D8->field_1CCA, 25, 0); } @@ -1205,9 +1226,9 @@ bool8 sub_80C1478(void) sub_80C4960(gUnknown_20399D8->field_1CCA, 25, 0); } if (gUnknown_20399D8->field_1CCA != sub_80C0E34()) - sub_80C4324(1); + sub_80C4324(TRUE); else - sub_80C4324(0); + sub_80C4324(FALSE); sub_80C4CF0(1, &data); return FALSE; } @@ -1766,7 +1787,7 @@ void sub_80C267C(u8 taskId) gUnknown_20399E0->field_CCC++; break; case 7: - sub_80C4324(0); + sub_80C4324(FALSE); sub_80C3154(FALSE); gUnknown_20399E0->field_CCC++; break; @@ -1946,7 +1967,7 @@ void sub_80C2C7C(u8 taskId) break; case 3: sub_80C22C4(6, FALSE); - sub_80C4324(1); + sub_80C4324(TRUE); sub_80C3154(TRUE); sub_80C4960(255, 25, 1); sub_80C48BC(255, 25, 1); @@ -2719,3 +2740,92 @@ void sub_80C3D40(void) } gUnknown_20399E4->field_014 = sub_80C4164(sub_80C0E20(), 0, gUnknown_20399E4->field_002, gUnknown_20399E4->field_000); } + +u8 sub_80C4164(u8 a0, u8 a1, s16 a2, s16 a3) +{ + switch (a0) + { + case 0: + return gUnknown_83F2490[a1][a2][a3]; + case 1: + return gUnknown_83F2724[a1][a2][a3]; + case 2: + return gUnknown_83F29B8[a1][a2][a3]; + case 3: + return gUnknown_83F2C4C[a1][a2][a3]; + default: + return MAPSEC_NONE; + } +} + +void sub_80C41D8(u16 a0, u16 a1) +{ + gUnknown_20399E8 = AllocZeroed(sizeof(struct UnkStruct_20399E8)); + if (gSaveBlock2Ptr->playerGender == FEMALE) + LZ77UnCompWram(gUnknown_83EF59C, gUnknown_20399E8->field_0C); + else + LZ77UnCompWram(gUnknown_83EF524, gUnknown_20399E8->field_0C); + gUnknown_20399E8->field_08 = a0; + gUnknown_20399E8->field_0A = a1; + gUnknown_20399E8->field_00 = sub_80C3508(); + gUnknown_20399E8->field_02 = sub_80C3514(); + sub_80C4244(); +} + +void sub_80C4244(void) +{ + u8 spriteId; + struct SpriteSheet spriteSheet = { + .data = gUnknown_20399E8->field_0C, + .size = 0x80, + .tag = gUnknown_20399E8->field_08 + }; + struct SpritePalette spritePalette = { + .data = gUnknown_83EF27C, + .tag = gUnknown_20399E8->field_0A + }; + struct SpriteTemplate template = { + .tileTag = gUnknown_20399E8->field_08, + .paletteTag = gUnknown_20399E8->field_0A, + .oam = &gUnknown_83F1C54, + .anims = gUnknown_83F1C64, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy + }; + + if (gSaveBlock2Ptr->playerGender == FEMALE) + spritePalette.data = gUnknown_83EF29C; + + LoadSpriteSheet(&spriteSheet); + LoadSpritePalette(&spritePalette); + spriteId = CreateSprite(&template, 8 * gUnknown_20399E8->field_00 + 36, 8 * gUnknown_20399E8->field_02 + 36, 2); + gUnknown_20399E8->field_04 = &gSprites[spriteId]; + sub_80C4324(TRUE); +} + +void sub_80C4324(bool8 a0) +{ + gUnknown_20399E8->field_04->invisible = a0; +} + +void sub_80C4348(void) +{ + if (gUnknown_20399E8->field_04 != NULL) + { + DestroySprite(gUnknown_20399E8->field_04); + FreeSpriteTilesByTag(gUnknown_20399E8->field_08); + FreeSpritePaletteByTag(gUnknown_20399E8->field_0A); + } + FREE_IF_NOT_NULL(gUnknown_20399E8); +} + +u16 sub_80C4380(void) +{ + return gUnknown_20399E8->field_00; +} + +u16 sub_80C438C(void) +{ + return gUnknown_20399E8->field_02; +} |