summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2017-10-14 23:07:27 -0400
committerPikalaxALT <pikalaxalt@gmail.com>2017-10-14 23:07:27 -0400
commit89904a0f2492e9e579b7478c4a66cc547027cf48 (patch)
tree83e7ae2f62daadca91b6bfb8cd99222caa2ee2ce
parentb833bf304963f92de2670529d1d9083180ade9ba (diff)
sub_8123878
-rw-r--r--asm/cable_car.s192
-rw-r--r--include/field_weather.h9
-rw-r--r--src/scene/cable_car.c85
3 files changed, 83 insertions, 203 deletions
diff --git a/asm/cable_car.s b/asm/cable_car.s
index d1f2ba5a1..0b8a701f6 100644
--- a/asm/cable_car.s
+++ b/asm/cable_car.s
@@ -6,198 +6,6 @@
.text
- thumb_func_start sub_8123878
-sub_8123878: @ 8123878
- push {r4-r7,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r6, r0, 24
- movs r4, 0
- ldr r5, _081238A4 @ =gUnknown_02039274
- ldr r3, [r5]
- ldrh r0, [r3, 0x6]
- adds r0, 0x1
- strh r0, [r3, 0x6]
- ldrb r2, [r3, 0x1]
- adds r7, r5, 0
- cmp r2, 0x2
- beq _0812397E
- cmp r2, 0x2
- bgt _081238A8
- cmp r2, 0
- beq _081238B6
- cmp r2, 0x1
- beq _081238D0
- b _081239D6
- .align 2, 0
-_081238A4: .4byte gUnknown_02039274
-_081238A8:
- cmp r2, 0x3
- bne _081238AE
- b _081239A4
-_081238AE:
- cmp r2, 0xFF
- bne _081238B4
- b _081239BC
-_081238B4:
- b _081239D6
-_081238B6:
- lsls r0, 16
- lsrs r0, 16
- ldrh r1, [r3, 0x4]
- cmp r0, r1
- beq _081238C2
- b _081239D6
-_081238C2:
- ldrb r0, [r3, 0x2]
- bl DoWeatherEffect
- ldr r1, [r5]
- movs r0, 0x1
- strb r0, [r1, 0x1]
- b _081239D6
-_081238D0:
- ldrb r0, [r3, 0x2]
- cmp r0, 0x2
- beq _08123924
- cmp r0, 0x7
- beq _081238DC
- b _081239D6
-_081238DC:
- ldr r0, _08123920 @ =gUnknown_08396FC4
- ldr r0, [r0]
- adds r2, r0, 0
- adds r2, 0xF0
- ldr r0, [r2]
- cmp r0, 0
- beq _081239D6
- ldrb r1, [r0, 0x5]
- movs r0, 0xC
- ands r0, r1
- cmp r0, 0
- beq _081239D6
- adds r3, r2, 0
- movs r5, 0xD
- negs r5, r5
-_081238FA:
- lsls r0, r4, 2
- adds r0, r3, r0
- ldr r2, [r0]
- cmp r2, 0
- beq _0812390C
- ldrb r1, [r2, 0x5]
- adds r0, r5, 0
- ands r0, r1
- strb r0, [r2, 0x5]
-_0812390C:
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x13
- bls _081238FA
- ldr r1, [r7]
- movs r0, 0x2
- strb r0, [r1, 0x1]
- b _081239D6
- .align 2, 0
-_08123920: .4byte gUnknown_08396FC4
-_08123924:
- ldr r0, _08123938 @ =gUnknown_08396FC4
- ldr r2, [r0]
- movs r1, 0xDA
- lsls r1, 3
- adds r0, r2, r1
- ldrb r0, [r0]
- cmp r0, 0x2
- bne _0812393C
- strb r0, [r3, 0x1]
- b _081239D6
- .align 2, 0
-_08123938: .4byte gUnknown_08396FC4
-_0812393C:
- ldrh r1, [r3, 0x6]
- ldrh r0, [r3, 0x4]
- adds r0, 0x8
- cmp r1, r0
- blt _081239D6
- adds r6, r2, 0
- adds r6, 0xF0
- movs r5, 0x1
- movs r7, 0x5
- negs r7, r7
-_08123950:
- lsls r0, r4, 2
- adds r0, r6, r0
- ldr r0, [r0]
- cmp r0, 0
- beq _08123972
- adds r3, r0, 0
- adds r3, 0x3E
- ldrb r2, [r3]
- lsls r1, r2, 29
- lsrs r1, 31
- eors r1, r5
- ands r1, r5
- lsls r1, 2
- adds r0, r7, 0
- ands r0, r2
- orrs r0, r1
- strb r0, [r3]
-_08123972:
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x13
- bls _08123950
- b _081239D6
-_0812397E:
- lsls r1, r0, 16
- ldr r0, _081239A0 @ =0x023a0000
- cmp r1, r0
- bne _081239D6
- movs r0, 0x3
- strb r0, [r3, 0x1]
- subs r0, 0x4
- str r4, [sp]
- movs r1, 0x3
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- movs r0, 0x4
- bl FadeOutBGM
- b _081239D6
- .align 2, 0
-_081239A0: .4byte 0x023a0000
-_081239A4:
- ldr r0, _081239B8 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _081239D6
- movs r0, 0xFF
- strb r0, [r3, 0x1]
- b _081239D6
- .align 2, 0
-_081239B8: .4byte gPaletteFade
-_081239BC:
- movs r0, 0
- bl SetVBlankCallback
- adds r0, r6, 0
- bl DestroyTask
- ldr r0, [r5]
- ldrb r0, [r0]
- bl DestroyTask
- ldr r0, _081239E0 @ =sub_8123740
- bl SetMainCallback2
-_081239D6:
- add sp, 0x4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_081239E0: .4byte sub_8123740
- thumb_func_end sub_8123878
-
thumb_func_start sub_81239E4
sub_81239E4: @ 81239E4
push {r4-r6,lr}
diff --git a/include/field_weather.h b/include/field_weather.h
index 790fadaea..b51c47de7 100644
--- a/include/field_weather.h
+++ b/include/field_weather.h
@@ -47,17 +47,10 @@ bool8 sub_807DDFC(void);
void SetWeather(u32);
void UpdateWeatherPerDay(u16);
-struct WeatherSubstruct {
- u8 filler_0[5];
- u8 unk_5_0:2;
- u8 unk_5_2:2;
- u8 unk_5_4:4;
-};
-
struct Weather
{
u8 filler_000[0xf0];
- struct WeatherSubstruct *unk_0f0[20];
+ struct Sprite *unk_0f0[20];
u8 filler_140[0xc0];
u8 unknown_200[2][32];
u8 filler_240[0x480];
diff --git a/src/scene/cable_car.c b/src/scene/cable_car.c
index 899bb9dba..27ae54d51 100644
--- a/src/scene/cable_car.c
+++ b/src/scene/cable_car.c
@@ -20,7 +20,10 @@ struct Unk_2017000 {
u8 unk_0000;
u8 unk_0001;
u8 unk_0002;
- u8 filler_0003[0xf9];
+ u8 unk_0003;
+ u16 unk_0004;
+ u16 unk_0006;
+ u8 filler_0008[0xf4];
u16 unk_00fc[0x400];
u16 unk_08fc[0x400];
}; // size 0x10FC
@@ -180,7 +183,7 @@ void sub_8123244(void)
{
if (gUnknown_08396FC4->unk_0f0[i] != NULL)
{
- gUnknown_08396FC4->unk_0f0[i]->unk_5_2 = 0;
+ gUnknown_08396FC4->unk_0f0[i]->oam.priority = 0;
}
}
gMain.state ++;
@@ -244,7 +247,11 @@ void sub_8123740(void)
{
u8 i;
- for (i = 0, sub_8123FBC(0), gSpriteCoordOffsetX = 0, sub_807C9B4(0); i < 20; i ++)
+ i = 0;
+ sub_8123FBC(0);
+ gSpriteCoordOffsetX = 0;
+ sub_807C9B4(0);
+ for (; i < 20; i ++)
{
gUnknown_08396FC4->unk_0f0[i] = NULL;
}
@@ -260,3 +267,75 @@ void sub_8123740(void)
gFieldCallback = NULL;
SetMainCallback2(CB2_LoadMap);
}
+
+void sub_8123878(u8 taskId)
+{
+ u8 i;
+
+ i = 0;
+ gUnknown_02039274->unk_0006 ++;
+ switch (gUnknown_02039274->unk_0001)
+ {
+ case 0:
+ if (gUnknown_02039274->unk_0006 == gUnknown_02039274->unk_0004)
+ {
+ DoWeatherEffect(gUnknown_02039274->unk_0002);
+ gUnknown_02039274->unk_0001 = 1;
+ }
+ break;
+ case 1:
+ switch (gUnknown_02039274->unk_0002)
+ {
+ case 7:
+ if (gUnknown_08396FC4->unk_0f0[0] != NULL && gUnknown_08396FC4->unk_0f0[0]->oam.priority != 0)
+ {
+ for (; i < 20; i ++)
+ {
+ if (gUnknown_08396FC4->unk_0f0[i] != NULL)
+ {
+ gUnknown_08396FC4->unk_0f0[i]->oam.priority = 0;
+ }
+ }
+ gUnknown_02039274->unk_0001 = 2;
+ }
+ break;
+ case 2:
+ if (gUnknown_08396FC4->unknown_6D0 == 2)
+ {
+ gUnknown_02039274->unk_0001 = 2;
+ }
+ else if (gUnknown_02039274->unk_0006 >= gUnknown_02039274->unk_0004 + 8)
+ {
+ for (; i < 20; i ++)
+ {
+ if (gUnknown_08396FC4->unk_0f0[i] != NULL)
+ {
+ gUnknown_08396FC4->unk_0f0[i]->invisible ^= TRUE;
+ }
+ }
+ }
+ break;
+ }
+ break;
+ case 2:
+ if (gUnknown_02039274->unk_0006 == 570)
+ {
+ gUnknown_02039274->unk_0001 = 3;
+ BeginNormalPaletteFade(-1, 3, 0, 16, 0);
+ FadeOutBGM(4);
+ }
+ break;
+ case 3:
+ if (!gPaletteFade.active)
+ {
+ gUnknown_02039274->unk_0001 = 255;
+ }
+ break;
+ case 255:
+ SetVBlankCallback(NULL);
+ DestroyTask(taskId);
+ DestroyTask(gUnknown_02039274->unk_0000);
+ SetMainCallback2(sub_8123740);
+ break;
+ }
+}