Lavaridge Gym 1F Warp field effect

This commit is contained in:
PikalaxALT
2020-02-28 13:23:51 -05:00
parent 9cf19244fa
commit 8f42b7b56d
5 changed files with 110 additions and 314 deletions
-304
View File
@@ -5,310 +5,6 @@
.text
thumb_func_start FldEff_LavaridgeGymWarp
FldEff_LavaridgeGymWarp: @ 808534C
push {r4,lr}
ldr r4, _080853A4 @ =gFieldEffectArguments
adds r1, r4, 0x4
adds r0, r4, 0
movs r2, 0x8
movs r3, 0x8
bl sub_8063BC4
ldr r0, _080853A8 @ =gFieldEffectObjectTemplatePointers
adds r0, 0x84
ldr r0, [r0]
movs r2, 0
ldrsh r1, [r4, r2]
movs r3, 0x4
ldrsh r2, [r4, r3]
ldrb r3, [r4, 0x8]
bl CreateSpriteAtEnd
lsls r0, 24
lsrs r0, 24
ldr r1, _080853AC @ =gSprites
lsls r2, r0, 4
adds r2, r0
lsls r2, 2
adds r2, r1
movs r1, 0x3
ldrb r3, [r4, 0xC]
ands r3, r1
lsls r3, 2
ldrb r4, [r2, 0x5]
movs r1, 0xD
negs r1, r1
ands r1, r4
orrs r1, r3
strb r1, [r2, 0x5]
adds r2, 0x3E
ldrb r1, [r2]
movs r3, 0x2
orrs r1, r3
strb r1, [r2]
pop {r4}
pop {r1}
bx r1
.align 2, 0
_080853A4: .4byte gFieldEffectArguments
_080853A8: .4byte gFieldEffectObjectTemplatePointers
_080853AC: .4byte gSprites
thumb_func_end FldEff_LavaridgeGymWarp
thumb_func_start SpriteCB_LavaridgeGymWarp
SpriteCB_LavaridgeGymWarp: @ 80853B0
push {lr}
adds r2, r0, 0
adds r0, 0x3F
ldrb r1, [r0]
movs r0, 0x10
ands r0, r1
cmp r0, 0
beq _080853C8
adds r0, r2, 0
movs r1, 0x32
bl FieldEffectStop
_080853C8:
pop {r0}
bx r0
thumb_func_end SpriteCB_LavaridgeGymWarp
thumb_func_start StartLavaridgeGym1FWarp
StartLavaridgeGym1FWarp: @ 80853CC
push {lr}
adds r1, r0, 0
lsls r1, 24
lsrs r1, 24
ldr r0, _080853E0 @ =Task_LavaridgeGym1FWarp
bl CreateTask
pop {r0}
bx r0
.align 2, 0
_080853E0: .4byte Task_LavaridgeGym1FWarp
thumb_func_end StartLavaridgeGym1FWarp
thumb_func_start Task_LavaridgeGym1FWarp
Task_LavaridgeGym1FWarp: @ 80853E4
push {r4-r6,lr}
lsls r0, 24
lsrs r0, 24
ldr r6, _0808542C @ =sLavaridgeGym1FWarpEffectFuncs
ldr r2, _08085430 @ =gTasks
ldr r5, _08085434 @ =gPlayerAvatar
lsls r1, r0, 2
adds r1, r0
lsls r1, 3
adds r4, r1, r2
_080853F8:
movs r0, 0x8
ldrsh r3, [r4, r0]
lsls r3, 2
adds r3, r6
ldrb r0, [r5, 0x5]
lsls r1, r0, 3
adds r1, r0
lsls r1, 2
ldr r0, _08085438 @ =gObjectEvents
adds r1, r0
ldrb r0, [r5, 0x4]
lsls r2, r0, 4
adds r2, r0
lsls r2, 2
ldr r0, _0808543C @ =gSprites
adds r2, r0
ldr r3, [r3]
adds r0, r4, 0
bl _call_via_r3
lsls r0, 24
cmp r0, 0
bne _080853F8
pop {r4-r6}
pop {r0}
bx r0
.align 2, 0
_0808542C: .4byte sLavaridgeGym1FWarpEffectFuncs
_08085430: .4byte gTasks
_08085434: .4byte gPlayerAvatar
_08085438: .4byte gObjectEvents
_0808543C: .4byte gSprites
thumb_func_end Task_LavaridgeGym1FWarp
thumb_func_start LavaridgeGym1FWarpEffect_1
LavaridgeGym1FWarpEffect_1: @ 8085440
push {r4,r5,lr}
adds r5, r0, 0
adds r4, r1, 0
bl FreezeObjectEvents
bl CameraObjectReset2
ldr r1, _0808546C @ =gPlayerAvatar
movs r0, 0x1
strb r0, [r1, 0x6]
ldrb r0, [r4, 0x3]
movs r1, 0x4
orrs r0, r1
strb r0, [r4, 0x3]
ldrh r0, [r5, 0x8]
adds r0, 0x1
strh r0, [r5, 0x8]
movs r0, 0
pop {r4,r5}
pop {r1}
bx r1
.align 2, 0
_0808546C: .4byte gPlayerAvatar
thumb_func_end LavaridgeGym1FWarpEffect_1
thumb_func_start LavaridgeGym1FWarpEffect_2
LavaridgeGym1FWarpEffect_2: @ 8085470
push {r4-r6,lr}
adds r5, r0, 0
adds r4, r1, 0
adds r6, r2, 0
adds r0, r4, 0
bl ObjectEventClearHeldMovementIfFinished
lsls r0, 24
cmp r0, 0
beq _080854E4
ldrh r1, [r5, 0xA]
movs r2, 0xA
ldrsh r0, [r5, r2]
cmp r0, 0x3
ble _080854C4
ldr r1, _080854C0 @ =gFieldEffectArguments
movs r2, 0x10
ldrsh r0, [r4, r2]
str r0, [r1]
movs r2, 0x12
ldrsh r0, [r4, r2]
str r0, [r1, 0x4]
adds r0, r6, 0
adds r0, 0x43
ldrb r0, [r0]
subs r0, 0x1
str r0, [r1, 0x8]
ldrb r0, [r6, 0x5]
lsls r0, 28
lsrs r0, 30
str r0, [r1, 0xC]
movs r0, 0x31
bl FieldEffectStart
strh r0, [r5, 0xA]
ldrh r0, [r5, 0x8]
adds r0, 0x1
strh r0, [r5, 0x8]
b _080854E4
.align 2, 0
_080854C0: .4byte gFieldEffectArguments
_080854C4:
adds r0, r1, 0x1
strh r0, [r5, 0xA]
ldrb r0, [r4, 0x18]
lsls r0, 28
lsrs r0, 28
bl GetStepInPlaceDelay4AnimId
adds r1, r0, 0
lsls r1, 24
lsrs r1, 24
adds r0, r4, 0
bl ObjectEventSetHeldMovement
movs r0, 0x21
bl PlaySE
_080854E4:
movs r0, 0
pop {r4-r6}
pop {r1}
bx r1
thumb_func_end LavaridgeGym1FWarpEffect_2
thumb_func_start LavaridgeGym1FWarpEffect_3
LavaridgeGym1FWarpEffect_3: @ 80854EC
push {r4,lr}
adds r3, r0, 0
adds r4, r1, 0
ldr r2, _08085520 @ =gSprites
movs r0, 0xA
ldrsh r1, [r3, r0]
lsls r0, r1, 4
adds r0, r1
lsls r0, 2
adds r0, r2
adds r0, 0x2B
ldrb r0, [r0]
cmp r0, 0x2
bne _08085516
ldrb r0, [r4, 0x1]
movs r1, 0x20
orrs r0, r1
strb r0, [r4, 0x1]
ldrh r0, [r3, 0x8]
adds r0, 0x1
strh r0, [r3, 0x8]
_08085516:
movs r0, 0
pop {r4}
pop {r1}
bx r1
.align 2, 0
_08085520: .4byte gSprites
thumb_func_end LavaridgeGym1FWarpEffect_3
thumb_func_start LavaridgeGym1FWarpEffect_4
LavaridgeGym1FWarpEffect_4: @ 8085524
push {r4,lr}
adds r4, r0, 0
movs r0, 0x31
bl FieldEffectActiveListContains
lsls r0, 24
cmp r0, 0
bne _08085542
bl TryFadeOutOldMapMusic
bl WarpFadeOutScreen
ldrh r0, [r4, 0x8]
adds r0, 0x1
strh r0, [r4, 0x8]
_08085542:
movs r0, 0
pop {r4}
pop {r1}
bx r1
thumb_func_end LavaridgeGym1FWarpEffect_4
thumb_func_start LavaridgeGym1FWarpEffect_5
LavaridgeGym1FWarpEffect_5: @ 808554C
push {lr}
ldr r0, _0808558C @ =gPaletteFade
ldrb r1, [r0, 0x7]
movs r0, 0x80
ands r0, r1
cmp r0, 0
bne _08085584
bl BGMusicStopped
lsls r0, 24
lsrs r0, 24
cmp r0, 0x1
bne _08085584
bl WarpIntoMap
ldr r1, _08085590 @ =gFieldCallback
ldr r0, _08085594 @ =FieldCB_FallWarpExit
str r0, [r1]
ldr r0, _08085598 @ =CB2_LoadMap
bl SetMainCallback2
ldr r0, _0808559C @ =Task_LavaridgeGym1FWarp
bl FindTaskIdByFunc
lsls r0, 24
lsrs r0, 24
bl DestroyTask
_08085584:
movs r0, 0
pop {r1}
bx r1
.align 2, 0
_0808558C: .4byte gPaletteFade
_08085590: .4byte gFieldCallback
_08085594: .4byte FieldCB_FallWarpExit
_08085598: .4byte CB2_LoadMap
_0808559C: .4byte Task_LavaridgeGym1FWarp
thumb_func_end LavaridgeGym1FWarpEffect_5
thumb_func_start FldEff_PopOutOfAsh
FldEff_PopOutOfAsh: @ 80855A0
push {r4,lr}
-8
View File
@@ -6,14 +6,6 @@
.section .rodata
.align 2
.align 2
sLavaridgeGym1FWarpEffectFuncs:: @ 83CC0CC dataptr
.4byte LavaridgeGym1FWarpEffect_1
.4byte LavaridgeGym1FWarpEffect_2
.4byte LavaridgeGym1FWarpEffect_3
.4byte LavaridgeGym1FWarpEffect_4
.4byte LavaridgeGym1FWarpEffect_5
.align 2
gEscapeRopeFieldEffectFuncs:: @ 83CC0E0 dataptr
.4byte EscapeRopeFieldEffect_Step0
+1 -1
View File
@@ -41,7 +41,7 @@ void sub_808E16C(s16, s16);
void sub_808F28C(u8 localId, u8 mapNum, u8 mapGroup, u8 decorCat);
void sub_8092FF0(s16, s16, s16 *, s16 *);
u8 ObjectEventDirectionToImageAnimId(u8);
void sub_80930E0(s16 *, s16 *, s16, s16);
void sub_8063BC4(s16 *, s16 *, s16, s16);
void ObjectEventClearAnim(struct ObjectEvent *);
void ObjectEventClearAnimIfSpecialAnimActive(struct ObjectEvent *);
void SpawnObjectEventsInView(s16, s16);
-1
View File
@@ -87,7 +87,6 @@ void player_avatar_init_params_reset(void);
void Overworld_SetFlashLevel(s32 a1);
u8 Overworld_GetFlashLevel(void);
void LavaridgeGym1FWarpEffect_4(u16);
void Overworld_SetSavedMusic(u16);
void Overworld_ChangeMusicToDefault(void);
+109
View File
@@ -1874,3 +1874,112 @@ bool8 LavaridgeGymB1FWarpExitEffect_4(struct Task * task, struct ObjectEvent * o
}
return FALSE;
}
void Task_LavaridgeGym1FWarp(u8 taskId);
bool8 LavaridgeGym1FWarpEffect_1(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite);
bool8 LavaridgeGym1FWarpEffect_2(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite);
bool8 LavaridgeGym1FWarpEffect_3(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite);
bool8 LavaridgeGym1FWarpEffect_4(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite);
bool8 LavaridgeGym1FWarpEffect_5(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite);
bool8 (*const sLavaridgeGym1FWarpEffectFuncs[])(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite) = {
LavaridgeGym1FWarpEffect_1,
LavaridgeGym1FWarpEffect_2,
LavaridgeGym1FWarpEffect_3,
LavaridgeGym1FWarpEffect_4,
LavaridgeGym1FWarpEffect_5
};
// For the ash puff effect when warping off the B1F ash tiles
u8 FldEff_LavaridgeGymWarp(void)
{
u8 spriteId;
sub_8063BC4((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[33], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
gSprites[spriteId].oam.priority = gFieldEffectArguments[3];
gSprites[spriteId].coordOffsetEnabled = 1;
return spriteId;
}
void SpriteCB_LavaridgeGymWarp(struct Sprite *sprite)
{
if (sprite->animEnded)
{
FieldEffectStop(sprite, FLDEFF_LAVARIDGE_GYM_WARP);
}
}
void StartLavaridgeGym1FWarp(u8 priority)
{
CreateTask(Task_LavaridgeGym1FWarp, priority);
}
void Task_LavaridgeGym1FWarp(u8 taskId)
{
while(sLavaridgeGym1FWarpEffectFuncs[gTasks[taskId].data[0]](&gTasks[taskId], &gObjectEvents[gPlayerAvatar.objectEventId], &gSprites[gPlayerAvatar.spriteId]));
}
bool8 LavaridgeGym1FWarpEffect_1(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
FreezeObjectEvents();
CameraObjectReset2();
gPlayerAvatar.preventStep = TRUE;
objectEvent->fixedPriority = 1;
task->data[0]++;
return FALSE;
}
bool8 LavaridgeGym1FWarpEffect_2(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
if (ObjectEventClearHeldMovementIfFinished(objectEvent))
{
if (task->data[1] > 3)
{
gFieldEffectArguments[0] = objectEvent->currentCoords.x;
gFieldEffectArguments[1] = objectEvent->currentCoords.y;
gFieldEffectArguments[2] = sprite->subpriority - 1;
gFieldEffectArguments[3] = sprite->oam.priority;
task->data[1] = FieldEffectStart(FLDEFF_POP_OUT_OF_ASH);
task->data[0]++;
} else
{
task->data[1]++;
ObjectEventSetHeldMovement(objectEvent, GetStepInPlaceDelay4AnimId(objectEvent->facingDirection));
PlaySE(SE_FU_ZUZUZU);
}
}
return FALSE;
}
bool8 LavaridgeGym1FWarpEffect_3(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
if (gSprites[task->data[1]].animCmdIndex == 2)
{
objectEvent->invisible = TRUE;
task->data[0]++;
}
return FALSE;
}
bool8 LavaridgeGym1FWarpEffect_4(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
if (!FieldEffectActiveListContains(FLDEFF_POP_OUT_OF_ASH))
{
TryFadeOutOldMapMusic();
WarpFadeOutScreen();
task->data[0]++;
}
return FALSE;
}
bool8 LavaridgeGym1FWarpEffect_5(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
if (!gPaletteFade.active && BGMusicStopped() == TRUE)
{
WarpIntoMap();
gFieldCallback = FieldCB_FallWarpExit;
SetMainCallback2(CB2_LoadMap);
DestroyTask(FindTaskIdByFunc(Task_LavaridgeGym1FWarp));
}
return FALSE;
}