summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2018-01-05 22:15:05 -0700
committerPikalaxALT <pikalaxalt@gmail.com>2018-01-05 22:15:05 -0700
commit8d035c81528d172570338ec82c07770e7ebcfe50 (patch)
tree2a4c18fa41cdcf4727381cb3758cac9734db8a0e
parente28c11ef9518c80e23ce0076b8ba9be4cb140015 (diff)
cable car util
-rw-r--r--asm/cable_car_util.s162
-rw-r--r--include/cable_car_util.h4
-rw-r--r--ld_script.txt2
-rw-r--r--src/engine/cable_car_util.c46
-rw-r--r--src/scene/cable_car.c48
5 files changed, 73 insertions, 189 deletions
diff --git a/asm/cable_car_util.s b/asm/cable_car_util.s
deleted file mode 100644
index 50ef19dec..000000000
--- a/asm/cable_car_util.s
+++ /dev/null
@@ -1,162 +0,0 @@
- .include "constants/gba_constants.inc"
- .include "asm/macros.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_8124E7C
-sub_8124E7C: @ 8124E7C
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- mov r10, r0
- ldr r0, [sp, 0x24]
- ldr r4, [sp, 0x28]
- lsls r1, 16
- lsrs r1, 16
- mov r9, r1
- lsls r2, 24
- lsrs r2, 24
- str r2, [sp]
- lsls r3, 24
- lsls r0, 24
- lsrs r7, r0, 24
- lsls r4, 24
- lsrs r4, 24
- mov r8, r4
- movs r0, 0
- lsrs r4, r3, 24
- cmp r0, r8
- bcs _08124EF6
-_08124EAE:
- ldr r2, [sp]
- movs r3, 0
- adds r6, r4, 0x1
- adds r0, 0x1
- mov r12, r0
- cmp r3, r7
- bcs _08124EE0
- lsls r5, r4, 6
-_08124EBE:
- lsls r0, r2, 1
- adds r0, r5
- add r0, r10
- mov r1, r9
- strh r1, [r0]
- adds r1, r2, 0x1
- adds r0, r1, 0
- asrs r0, 5
- lsls r0, 5
- subs r0, r1, r0
- lsls r0, 24
- lsrs r2, r0, 24
- adds r0, r3, 0x1
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r3, r7
- bcc _08124EBE
-_08124EE0:
- adds r0, r6, 0
- asrs r0, 5
- lsls r0, 5
- subs r0, r6, r0
- lsls r0, 24
- lsrs r4, r0, 24
- mov r1, r12
- lsls r0, r1, 24
- lsrs r0, 24
- cmp r0, r8
- bcc _08124EAE
-_08124EF6:
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_8124E7C
-
- thumb_func_start sub_8124F08
-sub_8124F08: @ 8124F08
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- mov r10, r0
- ldr r0, [sp, 0x24]
- ldr r4, [sp, 0x28]
- lsls r2, 24
- lsrs r2, 24
- str r2, [sp]
- lsls r3, 24
- lsls r0, 24
- lsrs r0, 24
- mov r12, r0
- lsls r4, 24
- lsrs r4, 24
- mov r9, r4
- movs r0, 0
- adds r5, r1, 0
- lsrs r4, r3, 24
- cmp r0, r9
- bcs _08124F82
-_08124F38:
- ldr r2, [sp]
- movs r3, 0
- adds r7, r4, 0x1
- adds r0, 0x1
- mov r8, r0
- cmp r3, r12
- bcs _08124F6C
- lsls r6, r4, 6
-_08124F48:
- lsls r0, r2, 1
- adds r0, r6
- add r0, r10
- ldrh r1, [r5]
- strh r1, [r0]
- adds r5, 0x2
- adds r1, r2, 0x1
- adds r0, r1, 0
- asrs r0, 5
- lsls r0, 5
- subs r0, r1, r0
- lsls r0, 24
- lsrs r2, r0, 24
- adds r0, r3, 0x1
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r3, r12
- bcc _08124F48
-_08124F6C:
- adds r0, r7, 0
- asrs r0, 5
- lsls r0, 5
- subs r0, r7, r0
- lsls r0, 24
- lsrs r4, r0, 24
- mov r1, r8
- lsls r0, r1, 24
- lsrs r0, 24
- cmp r0, r9
- bcc _08124F38
-_08124F82:
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_8124F08
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/include/cable_car_util.h b/include/cable_car_util.h
index f1f52bb3c..7126331a1 100644
--- a/include/cable_car_util.h
+++ b/include/cable_car_util.h
@@ -7,7 +7,7 @@
// Exported ROM declarations
-void sub_8124F08(u16 dest[][32], const u16 *src, u8 x, u8 y, u8 width, u8 height);
-void sub_8124E7C(u16 dest[][32], u16 a1, u8 a2, u8 a3, u8 a4, u8 a5);
+void CableCarUtil_FillWrapped(void *dest, u16 value, u8 x, u8 y, u8 width, u8 height);
+void CableCarUtil_CopyWrapped(void *dest, const u16 *src, u8 x, u8 y, u8 width, u8 height);
#endif //GUARD_CABLE_CAR_UTIL_H
diff --git a/ld_script.txt b/ld_script.txt
index 07345eb18..dc7f4784f 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -349,7 +349,7 @@ SECTIONS {
src/field/choose_party.o(.text);
src/scene/cable_car.o(.text);
asm/roulette_util.o(.text);
- asm/cable_car_util.o(.text);
+ src/engine/cable_car_util.o(.text);
src/unused_8124F94.o(.text);
src/engine/save.o(.text);
src/engine/mystery_event_script.o(.text);
diff --git a/src/engine/cable_car_util.c b/src/engine/cable_car_util.c
new file mode 100644
index 000000000..27f703b42
--- /dev/null
+++ b/src/engine/cable_car_util.c
@@ -0,0 +1,46 @@
+#include "global.h"
+#include "cable_car_util.h"
+
+// static types
+
+// static declarations
+
+// rodata
+
+// text
+
+void CableCarUtil_FillWrapped(void *dest, u16 value, u8 x, u8 y, u8 width, u8 height)
+{
+ u8 i;
+ u8 j;
+ u8 _x;
+ u8 _y;
+
+ for (i = 0, _y = y; i < height; i++)
+ {
+ for (_x = x, j = 0; j < width; j++)
+ {
+ *(u16 *)&((u8 *)dest)[_y * 64 + _x * 2] = value;
+ _x = (_x + 1) % 32;
+ }
+ _y = (_y + 1) % 32;
+ }
+}
+void CableCarUtil_CopyWrapped(void *dest, const u16 *src, u8 x, u8 y, u8 width, u8 height)
+{
+ u8 i;
+ u8 j;
+ u8 _x;
+ u8 _y;
+ const u16 *_src;
+
+ for (i = 0, _src = src, _y = y; i < height; i++)
+ {
+ for (_x = x, j = 0; j < width; j++)
+ {
+ *(u16 *)&((u8 *)dest)[_y * 64 + _x * 2] = *_src++;
+ _x = (_x + 1) % 32;
+ }
+ _y = (_y + 1) % 32;
+ }
+}
diff --git a/src/scene/cable_car.c b/src/scene/cable_car.c
index f57233556..52a0aeebf 100644
--- a/src/scene/cable_car.c
+++ b/src/scene/cable_car.c
@@ -268,22 +268,22 @@ static void CableCarMainCallback_Setup(void)
}
break;
case 5:
- sub_8124F08((void *)BG_SCREEN_ADDR(29), eCableCar2->treeTilemap, 0, 17, 32, 15);
- sub_8124F08((void *)BG_SCREEN_ADDR(30), eCableCar2->mountainTilemap, 0, 0, 30, 20);
- sub_8124F08(sCableCarPtr->unk_08fc, gCableCarPylonHookTilemapEntries, 0, 0, 5, 2);
- sub_8124F08(sCableCarPtr->unk_08fc, eCableCar2->pylonStemTilemap, 0, 2, 2, 20);
+ CableCarUtil_CopyWrapped((void *)BG_SCREEN_ADDR(29), eCableCar2->treeTilemap, 0, 17, 32, 15);
+ CableCarUtil_CopyWrapped((void *)BG_SCREEN_ADDR(30), eCableCar2->mountainTilemap, 0, 0, 30, 20);
+ CableCarUtil_CopyWrapped(sCableCarPtr->unk_08fc, gCableCarPylonHookTilemapEntries, 0, 0, 5, 2);
+ CableCarUtil_CopyWrapped(sCableCarPtr->unk_08fc, eCableCar2->pylonStemTilemap, 0, 2, 2, 20);
gMain.state++;
break;
case 6:
sub_81248AC(gSpecialVar_0x8004);
- sub_8124F08(sCableCarPtr->unk_00fc, eCableCar2->mtChimneyTilemap + 0x48, 0, 14, 12, 3);
- sub_8124F08(sCableCarPtr->unk_00fc, eCableCar2->mtChimneyTilemap + 0x6C, 12, 17, 12, 3);
- sub_8124F08(sCableCarPtr->unk_00fc, eCableCar2->mtChimneyTilemap + 0x90, 24, 20, 12, 3);
- sub_8124F08(sCableCarPtr->unk_00fc, eCableCar2->mtChimneyTilemap + 0x00, 0, 17, 12, 3);
- sub_8124F08(sCableCarPtr->unk_00fc, eCableCar2->mtChimneyTilemap + 0x24, 0, 20, 12, 3);
- sub_8124F08(sCableCarPtr->unk_00fc, eCableCar2->mtChimneyTilemap + 0x00, 12, 20, 12, 3);
- sub_8124F08(sCableCarPtr->unk_00fc, eCableCar2->mtChimneyTilemap + 0x24, 12, 23, 12, 3);
- sub_8124F08(sCableCarPtr->unk_00fc, eCableCar2->mtChimneyTilemap + 0x00, 24, 23, 12, 3);
+ CableCarUtil_CopyWrapped(sCableCarPtr->unk_00fc, eCableCar2->mtChimneyTilemap + 0x48, 0, 14, 12, 3);
+ CableCarUtil_CopyWrapped(sCableCarPtr->unk_00fc, eCableCar2->mtChimneyTilemap + 0x6C, 12, 17, 12, 3);
+ CableCarUtil_CopyWrapped(sCableCarPtr->unk_00fc, eCableCar2->mtChimneyTilemap + 0x90, 24, 20, 12, 3);
+ CableCarUtil_CopyWrapped(sCableCarPtr->unk_00fc, eCableCar2->mtChimneyTilemap + 0x00, 0, 17, 12, 3);
+ CableCarUtil_CopyWrapped(sCableCarPtr->unk_00fc, eCableCar2->mtChimneyTilemap + 0x24, 0, 20, 12, 3);
+ CableCarUtil_CopyWrapped(sCableCarPtr->unk_00fc, eCableCar2->mtChimneyTilemap + 0x00, 12, 20, 12, 3);
+ CableCarUtil_CopyWrapped(sCableCarPtr->unk_00fc, eCableCar2->mtChimneyTilemap + 0x24, 12, 23, 12, 3);
+ CableCarUtil_CopyWrapped(sCableCarPtr->unk_00fc, eCableCar2->mtChimneyTilemap + 0x00, 24, 23, 12, 3);
gMain.state++;
break;
case 7:
@@ -435,17 +435,17 @@ static void sub_81239E4(u8 taskId)
switch (sCableCarPtr->unk_0014)
{
case 175:
- sub_8124E7C(sCableCarPtr->unk_08fc, 0, 0, 22, 2, 10);
+ CableCarUtil_FillWrapped(sCableCarPtr->unk_08fc, 0, 0, 22, 2, 10);
break;
case 40:
- sub_8124E7C(sCableCarPtr->unk_08fc, 0, 3, 0, 2, 2);
+ CableCarUtil_FillWrapped(sCableCarPtr->unk_08fc, 0, 3, 0, 2, 2);
break;
case 32:
- sub_8124E7C(sCableCarPtr->unk_08fc, 0, 2, 0, 1, 2);
+ CableCarUtil_FillWrapped(sCableCarPtr->unk_08fc, 0, 2, 0, 1, 2);
break;
case 16:
- sub_8124F08(sCableCarPtr->unk_08fc, gCableCarPylonHookTilemapEntries, 0, 0, 5, 2);
- sub_8124F08(sCableCarPtr->unk_08fc, eCableCar2->pylonStemTilemap, 0, 2, 2, 30);
+ CableCarUtil_CopyWrapped(sCableCarPtr->unk_08fc, gCableCarPylonHookTilemapEntries, 0, 0, 5, 2);
+ CableCarUtil_CopyWrapped(sCableCarPtr->unk_08fc, eCableCar2->pylonStemTilemap, 0, 2, 2, 30);
sCableCarPtr->unk_0015 = 64;
break;
}
@@ -471,11 +471,11 @@ static void sub_8123AF8(u8 taskId)
switch (sCableCarPtr->unk_0014)
{
case 176:
- sub_8124F08(sCableCarPtr->unk_08fc, eCableCar2->pylonStemTilemap, 0, 2, 2, 30);
+ CableCarUtil_CopyWrapped(sCableCarPtr->unk_08fc, eCableCar2->pylonStemTilemap, 0, 2, 2, 30);
break;
case 16:
- sub_8124E7C(sCableCarPtr->unk_08fc, 0, 2, 0, 3, 2);
- sub_8124E7C(sCableCarPtr->unk_08fc, 0, 0, 22, 2, 10);
+ CableCarUtil_FillWrapped(sCableCarPtr->unk_08fc, 0, 2, 0, 3, 2);
+ CableCarUtil_FillWrapped(sCableCarPtr->unk_08fc, 0, 0, 22, 2, 10);
sCableCarPtr->unk_0015 = 192;
break;
case 32:
@@ -772,7 +772,7 @@ static void LoadSprites(void)
sub_807C9B4(2);
break;
case 1:
- sub_8124F08(sCableCarPtr->unk_00fc, eCableCar2->mtChimneyTilemap + 0x24, 0x18, 0x1a, 0x0c, 0x03);
+ CableCarUtil_CopyWrapped(sCableCarPtr->unk_00fc, eCableCar2->mtChimneyTilemap + 0x24, 0x18, 0x1a, 0x0c, 0x03);
spriteId = AddPseudoFieldObject(playerGraphicsIds[gSaveBlock2.playerGender], sub_8123D98, 0x80, 0x27, 0x66);
if (spriteId != MAX_SPRITES)
{
@@ -914,14 +914,14 @@ static void sub_81245F4(void)
sCableCarPtr->unk_00fc[gUnknown_02039279][gUnknown_02039278] = sCableCarPtr->unk_0022[i][sCableCarPtr->unk_0018 + 1];
}
gUnknown_02039278 = (sCableCarPtr->unk_0019 + 30) % 32;
- sub_8124E7C(sCableCarPtr->unk_00fc, 0, gUnknown_02039278, 0, 2, 32);
+ CableCarUtil_FillWrapped(sCableCarPtr->unk_00fc, 0, gUnknown_02039278, 0, 2, 32);
if (sCableCarPtr->unk_0018 == 0)
{
sCableCarPtr->unk_001a = (sCableCarPtr->unk_001a + 29) % 32;
sCableCarPtr->unk_0018 = 12;
sub_812446C();
gUnknown_02039278 = (sCableCarPtr->unk_001a + 1) % 32;
- sub_8124E7C(sCableCarPtr->unk_00fc, 0, 0, gUnknown_02039278, 32, 9);
+ CableCarUtil_FillWrapped(sCableCarPtr->unk_00fc, 0, 0, gUnknown_02039278, 32, 9);
}
}
@@ -944,7 +944,7 @@ static void sub_812476C(void)
sCableCarPtr->unk_00fc[gUnknown_0203927C][gUnknown_0203927B] = sCableCarPtr->unk_0022[i][sCableCarPtr->unk_0018 + 1];
}
gUnknown_0203927C = (sCableCarPtr->unk_001a + 23) % 32;
- sub_8124E7C(sCableCarPtr->unk_00fc, 0, sCableCarPtr->unk_0019, gUnknown_0203927C, 2, 9);
+ CableCarUtil_FillWrapped(sCableCarPtr->unk_00fc, 0, sCableCarPtr->unk_0019, gUnknown_0203927C, 2, 9);
if (sCableCarPtr->unk_0018 == 10)
{
sCableCarPtr->unk_001a = (sCableCarPtr->unk_001a + 3) % 32;