diff options
-rw-r--r-- | asm/fieldmap.s | 237 | ||||
-rw-r--r-- | asm/overworld.s | 22 | ||||
-rw-r--r-- | include/fieldmap.h | 6 | ||||
-rw-r--r-- | ld_script.txt | 1 | ||||
-rw-r--r-- | src/fieldmap.c | 94 |
5 files changed, 106 insertions, 254 deletions
diff --git a/asm/fieldmap.s b/asm/fieldmap.s deleted file mode 100644 index f5793b7a4..000000000 --- a/asm/fieldmap.s +++ /dev/null @@ -1,237 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - thumb_func_start sub_8059948 -sub_8059948: @ 8059948 - push {r4-r6,lr} - lsls r0, 24 - lsrs r4, r0, 24 - lsls r1, 24 - lsrs r6, r1, 24 - ldr r0, _08059968 @ =gUnknown_2036E28 - ldrb r0, [r0] - cmp r0, 0x1 - beq _0805996C - cmp r0, 0x1 - ble _080599B8 - cmp r0, 0x2 - beq _08059980 - cmp r0, 0x3 - beq _08059994 - b _080599B8 - .align 2, 0 -_08059968: .4byte gUnknown_2036E28 -_0805996C: - lsls r4, 5 - ldr r0, _0805997C @ =gPlttBufferUnfaded - adds r0, r4, r0 - lsls r1, r6, 4 - bl TintPalette_GrayScale - b _080599AA - .align 2, 0 -_0805997C: .4byte gPlttBufferUnfaded -_08059980: - lsls r4, 5 - ldr r0, _08059990 @ =gPlttBufferUnfaded - adds r0, r4, r0 - lsls r1, r6, 4 - bl TintPalette_SepiaTone - b _080599AA - .align 2, 0 -_08059990: .4byte gPlttBufferUnfaded -_08059994: - lsls r0, r4, 4 - lsls r5, r6, 4 - adds r1, r5, 0 - bl sub_8111F38 - lsls r4, 5 - ldr r0, _080599C0 @ =gPlttBufferUnfaded - adds r0, r4, r0 - adds r1, r5, 0 - bl TintPalette_GrayScale -_080599AA: - ldr r0, _080599C0 @ =gPlttBufferUnfaded - adds r0, r4, r0 - ldr r1, _080599C4 @ =gPlttBufferFaded - adds r1, r4, r1 - lsls r2, r6, 3 - bl CpuFastSet -_080599B8: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080599C0: .4byte gPlttBufferUnfaded -_080599C4: .4byte gPlttBufferFaded - thumb_func_end sub_8059948 - - thumb_func_start apply_map_tileset_palette -apply_map_tileset_palette: @ 80599C8 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x4 - adds r4, r0, 0 - lsls r1, 16 - lsrs r5, r1, 16 - mov r8, r5 - lsls r6, r2, 16 - lsrs r7, r6, 16 - adds r2, r7, 0 - movs r1, 0 - mov r0, sp - strh r1, [r0] - cmp r4, 0 - beq _08059A46 - ldrb r0, [r4, 0x1] - cmp r0, 0 - bne _08059A1C - mov r0, sp - adds r1, r5, 0 - movs r2, 0x2 - bl LoadPalette - ldr r0, [r4, 0x8] - adds r0, 0x2 - adds r5, 0x1 - lsls r5, 16 - lsrs r5, 16 - subs r4, r7, 0x2 - lsls r2, r4, 16 - lsrs r2, 16 - adds r1, r5, 0 - bl LoadPalette - lsls r4, 15 - lsrs r4, 16 - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_80598CC - b _08059A46 -_08059A1C: - cmp r0, 0x1 - bne _08059A36 - ldr r0, [r4, 0x8] - adds r0, 0xE0 - adds r1, r5, 0 - adds r2, r7, 0 - bl LoadPalette - lsrs r1, r6, 17 - adds r0, r5, 0 - bl sub_80598CC - b _08059A46 -_08059A36: - ldr r0, [r4, 0x8] - mov r1, r8 - bl LoadCompressedPalette - lsrs r1, r6, 17 - mov r0, r8 - bl sub_80598CC -_08059A46: - add sp, 0x4 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end apply_map_tileset_palette - - thumb_func_start sub_8059A54 -sub_8059A54: @ 8059A54 - push {lr} - ldr r0, [r0, 0x10] - movs r1, 0xA0 - lsls r1, 2 - movs r2, 0 - bl copy_tileset_patterns_to_vram - pop {r0} - bx r0 - thumb_func_end sub_8059A54 - - thumb_func_start sub_8059A68 -sub_8059A68: @ 8059A68 - push {lr} - ldr r0, [r0, 0x14] - movs r1, 0xC0 - lsls r1, 1 - movs r2, 0xA0 - lsls r2, 2 - bl copy_tileset_patterns_to_vram - pop {r0} - bx r0 - thumb_func_end sub_8059A68 - - thumb_func_start copy_map_tileset2_to_vram_2 -copy_map_tileset2_to_vram_2: @ 8059A7C - push {lr} - ldr r0, [r0, 0x14] - movs r1, 0xC0 - lsls r1, 1 - movs r2, 0xA0 - lsls r2, 2 - bl copy_tileset_patterns_to_vram2 - pop {r0} - bx r0 - thumb_func_end copy_map_tileset2_to_vram_2 - - thumb_func_start sub_8059A90 -sub_8059A90: @ 8059A90 - push {lr} - ldr r0, [r0, 0x10] - movs r1, 0 - movs r2, 0xE0 - bl apply_map_tileset_palette - pop {r0} - bx r0 - thumb_func_end sub_8059A90 - - thumb_func_start sub_8059AA0 -sub_8059AA0: @ 8059AA0 - push {lr} - ldr r0, [r0, 0x14] - movs r1, 0x70 - movs r2, 0xC0 - bl apply_map_tileset_palette - pop {r0} - bx r0 - thumb_func_end sub_8059AA0 - - thumb_func_start copy_map_tileset1_tileset2_to_vram -copy_map_tileset1_tileset2_to_vram: @ 8059AB0 - push {r4,r5,lr} - adds r5, r0, 0 - cmp r5, 0 - beq _08059AD2 - ldr r0, [r5, 0x10] - movs r4, 0xA0 - lsls r4, 2 - adds r1, r4, 0 - movs r2, 0 - bl copy_tileset_patterns_to_vram2 - ldr r0, [r5, 0x14] - movs r1, 0xC0 - lsls r1, 1 - adds r2, r4, 0 - bl copy_tileset_patterns_to_vram2 -_08059AD2: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end copy_map_tileset1_tileset2_to_vram - - thumb_func_start apply_map_tileset1_tileset2_palette -apply_map_tileset1_tileset2_palette: @ 8059AD8 - push {r4,lr} - adds r4, r0, 0 - cmp r4, 0 - beq _08059AEA - bl sub_8059A90 - adds r0, r4, 0 - bl sub_8059AA0 -_08059AEA: - pop {r4} - pop {r0} - bx r0 - thumb_func_end apply_map_tileset1_tileset2_palette - - .align 2, 0 @ Don't pad with nop. diff --git a/asm/overworld.s b/asm/overworld.s index ad3b8820d..679203034 100644 --- a/asm/overworld.s +++ b/asm/overworld.s @@ -1723,7 +1723,7 @@ sub_8055864: @ 8055864 ldr r0, [r4] bl copy_map_tileset2_to_vram_2 ldr r0, [r4] - bl sub_8059AA0 + bl apply_map_tileset2_palette movs r4, 0x7 _080558D4: lsls r0, r4, 24 @@ -4024,14 +4024,14 @@ _08056AEE: _08056AF4: ldr r0, _08056B00 @ =gMapHeader ldr r0, [r0] - bl sub_8059A54 + bl copy_map_tileset1_to_vram b _08056B62 .align 2, 0 _08056B00: .4byte gMapHeader _08056B04: ldr r0, _08056B10 @ =gMapHeader ldr r0, [r0] - bl sub_8059A68 + bl copy_map_tileset2_to_vram b _08056B62 .align 2, 0 _08056B10: .4byte gMapHeader @@ -4166,14 +4166,14 @@ _08056C2A: _08056C30: ldr r0, _08056C3C @ =gMapHeader ldr r0, [r0] - bl sub_8059A54 + bl copy_map_tileset1_to_vram b _08056CCA .align 2, 0 _08056C3C: .4byte gMapHeader _08056C40: ldr r0, _08056C4C @ =gMapHeader ldr r0, [r0] - bl sub_8059A68 + bl copy_map_tileset2_to_vram b _08056CCA .align 2, 0 _08056C4C: .4byte gMapHeader @@ -4355,14 +4355,14 @@ _08056DCA: _08056DD0: ldr r0, _08056DDC @ =gMapHeader ldr r0, [r0] - bl sub_8059A54 + bl copy_map_tileset1_to_vram b _08056E3E .align 2, 0 _08056DDC: .4byte gMapHeader _08056DE0: ldr r0, _08056DEC @ =gMapHeader ldr r0, [r0] - bl sub_8059A68 + bl copy_map_tileset2_to_vram b _08056E3E .align 2, 0 _08056DEC: .4byte gMapHeader @@ -5066,14 +5066,14 @@ _080573C2: _080573C8: ldr r0, _080573D4 @ =gMapHeader ldr r0, [r0] - bl sub_8059A54 + bl copy_map_tileset1_to_vram b _08057412 .align 2, 0 _080573D4: .4byte gMapHeader _080573D8: ldr r0, _080573E4 @ =gMapHeader ldr r0, [r0] - bl sub_8059A68 + bl copy_map_tileset2_to_vram b _08057412 .align 2, 0 _080573E4: .4byte gMapHeader @@ -5415,14 +5415,14 @@ _080576CC: _080576D2: ldr r0, _080576DC @ =gMapHeader ldr r0, [r0] - bl sub_8059A54 + bl copy_map_tileset1_to_vram b _0805772A .align 2, 0 _080576DC: .4byte gMapHeader _080576E0: ldr r0, _080576EC @ =gMapHeader ldr r0, [r0] - bl sub_8059A68 + bl copy_map_tileset2_to_vram b _0805772A .align 2, 0 _080576EC: .4byte gMapHeader diff --git a/include/fieldmap.h b/include/fieldmap.h index 1ce83ee38..24e85aace 100644 --- a/include/fieldmap.h +++ b/include/fieldmap.h @@ -3,11 +3,11 @@ #include "global.h" -#define NUM_TILES_IN_PRIMARY 512 +#define NUM_TILES_IN_PRIMARY 640 #define NUM_TILES_TOTAL 1024 -#define NUM_METATILES_IN_PRIMARY 512 +#define NUM_METATILES_IN_PRIMARY 640 #define NUM_METATILES_TOTAL 1024 -#define NUM_PALS_IN_PRIMARY 6 +#define NUM_PALS_IN_PRIMARY 7 #define NUM_PALS_TOTAL 13 #define VIRTUAL_MAP_SIZE 0x2800 diff --git a/ld_script.txt b/ld_script.txt index 1e6f87e23..7d2adefe7 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -92,7 +92,6 @@ SECTIONS { asm/new_game.o(.text); asm/overworld.o(.text); src/fieldmap.o(.text); - asm/fieldmap.o(.text); src/metatile_behavior.o(.text); asm/field_camera.o(.text); asm/field_door.o(.text); diff --git a/src/fieldmap.c b/src/fieldmap.c index 559506829..2984465c7 100644 --- a/src/fieldmap.c +++ b/src/fieldmap.c @@ -509,7 +509,7 @@ u32 GetBehaviorByMetatileIdAndMapData(struct MapData *mapData, u16 metatile, u8 { u32 * attributes; - if (metatile < 0x280) + if (metatile < NUM_METATILES_IN_PRIMARY) { attributes = mapData->primaryTileset->metatileAttributes; return sub_8058F1C(attributes[metatile], attr); @@ -517,7 +517,7 @@ u32 GetBehaviorByMetatileIdAndMapData(struct MapData *mapData, u16 metatile, u8 else if (metatile < 0x400) { attributes = mapData->secondaryTileset->metatileAttributes; - return sub_8058F1C(attributes[metatile - 0x280], attr); + return sub_8058F1C(attributes[metatile - NUM_METATILES_IN_PRIMARY], attr); } else { @@ -932,3 +932,93 @@ void sub_80598CC(u16 a0, u16 a1) } CpuCopy16(gPlttBufferUnfaded + a0, gPlttBufferFaded + a0, a1 * sizeof(u16)); } + +void sub_8059948(u8 a0, u8 a1) +{ + switch (gUnknown_2036E28) + { + case 0: + return; + case 1: + TintPalette_GrayScale(gPlttBufferUnfaded + a0 * 16, a1 * 16); + break; + case 2: + TintPalette_SepiaTone(gPlttBufferUnfaded + a0 * 16, a1 * 16); + break; + case 3: + sub_8111F38(a0 * 16, a1 * 16); + TintPalette_GrayScale(gPlttBufferUnfaded + a0 * 16, a1 * 16); + break; + default: + return; + } + CpuFastCopy(gPlttBufferUnfaded + a0 * 16, gPlttBufferFaded + a0 * 16, a1 * 16 * sizeof(u16)); +} + +void apply_map_tileset_palette(struct Tileset const *tileset, u16 destOffset, u16 size) +{ + u16 black = RGB_BLACK; + + if (tileset) + { + if (tileset->isSecondary == FALSE) + { + LoadPalette(&black, destOffset, 2); + LoadPalette(((u16*)tileset->palettes) + 1, destOffset + 1, size - 2); + sub_80598CC(destOffset + 1, (size - 2) >> 1); + } + else if (tileset->isSecondary == TRUE) + { + LoadPalette(((u16*)tileset->palettes) + (NUM_PALS_IN_PRIMARY * 16), destOffset, size); + sub_80598CC(destOffset, size >> 1); + } + else + { + LoadCompressedPalette((u32*)tileset->palettes, destOffset, size); + sub_80598CC(destOffset, size >> 1); + } + } +} + +void copy_map_tileset1_to_vram(const struct MapData *mapData) +{ + copy_tileset_patterns_to_vram(mapData->primaryTileset, NUM_TILES_IN_PRIMARY, 0); +} + +void copy_map_tileset2_to_vram(const struct MapData *mapData) +{ + copy_tileset_patterns_to_vram(mapData->secondaryTileset, NUM_TILES_TOTAL - NUM_TILES_IN_PRIMARY, NUM_TILES_IN_PRIMARY); +} + +void copy_map_tileset2_to_vram_2(const struct MapData *mapData) +{ + copy_tileset_patterns_to_vram2(mapData->secondaryTileset, NUM_TILES_TOTAL - NUM_TILES_IN_PRIMARY, NUM_TILES_IN_PRIMARY); +} + +void apply_map_tileset1_palette(const struct MapData *mapData) +{ + apply_map_tileset_palette(mapData->primaryTileset, 0, NUM_PALS_IN_PRIMARY * 16 * 2); +} + +void apply_map_tileset2_palette(const struct MapData *mapData) +{ + apply_map_tileset_palette(mapData->secondaryTileset, NUM_PALS_IN_PRIMARY * 16, (NUM_PALS_TOTAL - NUM_PALS_IN_PRIMARY) * 16 * 2); +} + +void copy_map_tileset1_tileset2_to_vram(struct MapData const *mapData) +{ + if (mapData) + { + copy_tileset_patterns_to_vram2(mapData->primaryTileset, NUM_TILES_IN_PRIMARY, 0); + copy_tileset_patterns_to_vram2(mapData->secondaryTileset, NUM_TILES_TOTAL - NUM_TILES_IN_PRIMARY, NUM_TILES_IN_PRIMARY); + } +} + +void apply_map_tileset1_tileset2_palette(struct MapData const *mapData) +{ + if (mapData) + { + apply_map_tileset1_palette(mapData); + apply_map_tileset2_palette(mapData); + } +}
\ No newline at end of file |