summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/fieldmap.s237
-rw-r--r--asm/overworld.s22
-rw-r--r--include/fieldmap.h6
-rw-r--r--ld_script.txt1
-rw-r--r--src/fieldmap.c94
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