diff options
| -rw-r--r-- | asm/cable_car.s | 192 | ||||
| -rw-r--r-- | include/field_weather.h | 9 | ||||
| -rw-r--r-- | src/scene/cable_car.c | 85 | 
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; +    } +} | 
