FallWarpEffect funcs

This commit is contained in:
PikalaxALT 2020-02-28 09:06:19 -05:00
parent e07c771f18
commit db12644f00
6 changed files with 131 additions and 362 deletions

View File

@ -5,364 +5,6 @@
.text
thumb_func_start FallWarpEffect_1
FallWarpEffect_1: @ 80844BC
push {r4-r6,lr}
mov r6, r9
mov r5, r8
push {r5,r6}
mov r9, r0
ldr r6, _08084558 @ =gPlayerAvatar
ldrb r0, [r6, 0x5]
lsls r5, r0, 3
adds r5, r0
lsls r5, 2
ldr r0, _0808455C @ =gObjectEvents
mov r8, r0
add r5, r8
ldrb r0, [r6, 0x4]
lsls r4, r0, 4
adds r4, r0
lsls r4, 2
ldr r0, _08084560 @ =gSprites
adds r4, r0
bl CameraObjectReset2
ldrb r1, [r6, 0x5]
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
add r0, r8
ldrb r1, [r0, 0x1]
movs r2, 0x20
orrs r1, r2
strb r1, [r0, 0x1]
movs r0, 0x1
strb r0, [r6, 0x6]
bl GetPlayerFacingDirection
lsls r0, 24
lsrs r0, 24
bl GetFaceDirectionMovementAction
adds r1, r0, 0
lsls r1, 24
lsrs r1, 24
adds r0, r5, 0
bl ObjectEventSetHeldMovement
adds r3, r4, 0
adds r3, 0x42
ldrb r0, [r3]
lsrs r0, 6
mov r1, r9
strh r0, [r1, 0x10]
ldrb r0, [r5, 0x3]
movs r2, 0x4
orrs r0, r2
strb r0, [r5, 0x3]
ldrb r1, [r4, 0x5]
movs r0, 0xD
negs r0, r0
ands r0, r1
orrs r0, r2
strb r0, [r4, 0x5]
ldrb r1, [r3]
movs r0, 0x3F
ands r0, r1
movs r1, 0x80
orrs r0, r1
strb r0, [r3]
mov r1, r9
ldrh r0, [r1, 0x8]
adds r0, 0x1
strh r0, [r1, 0x8]
movs r0, 0x1
pop {r3,r4}
mov r8, r3
mov r9, r4
pop {r4-r6}
pop {r1}
bx r1
.align 2, 0
_08084558: .4byte gPlayerAvatar
_0808455C: .4byte gObjectEvents
_08084560: .4byte gSprites
thumb_func_end FallWarpEffect_1
thumb_func_start FallWarpEffect_2
FallWarpEffect_2: @ 8084564
push {r4,lr}
adds r4, r0, 0
bl IsWeatherNotFadingIn
lsls r0, 24
cmp r0, 0
beq _08084578
ldrh r0, [r4, 0x8]
adds r0, 0x1
strh r0, [r4, 0x8]
_08084578:
movs r0, 0
pop {r4}
pop {r1}
bx r1
thumb_func_end FallWarpEffect_2
thumb_func_start FallWarpEffect_3
FallWarpEffect_3: @ 8084580
push {r4-r6,lr}
adds r5, r0, 0
ldr r6, _080845E4 @ =gPlayerAvatar
ldrb r0, [r6, 0x4]
lsls r2, r0, 4
adds r2, r0
lsls r2, 2
ldr r0, _080845E8 @ =gSprites
adds r2, r0
adds r0, r2, 0
adds r0, 0x29
movs r4, 0
ldrsb r4, [r0, r4]
lsls r0, r4, 17
negs r0, r0
ldrh r1, [r2, 0x22]
ldr r3, _080845EC @ =gSpriteCoordOffsetY
adds r1, r4
ldrh r3, [r3]
adds r1, r3
asrs r0, 16
adds r0, r1
negs r0, r0
movs r1, 0
strh r0, [r2, 0x26]
movs r0, 0x1
strh r0, [r5, 0xA]
strh r1, [r5, 0xC]
ldr r2, _080845F0 @ =gObjectEvents
ldrb r0, [r6, 0x5]
lsls r1, r0, 3
adds r1, r0
lsls r1, 2
adds r1, r2
ldrb r2, [r1, 0x1]
movs r0, 0x21
negs r0, r0
ands r0, r2
strb r0, [r1, 0x1]
movs r0, 0x25
bl PlaySE
ldrh r0, [r5, 0x8]
adds r0, 0x1
strh r0, [r5, 0x8]
movs r0, 0
pop {r4-r6}
pop {r1}
bx r1
.align 2, 0
_080845E4: .4byte gPlayerAvatar
_080845E8: .4byte gSprites
_080845EC: .4byte gSpriteCoordOffsetY
_080845F0: .4byte gObjectEvents
thumb_func_end FallWarpEffect_3
thumb_func_start FallWarpEffect_4
FallWarpEffect_4: @ 80845F4
push {r4-r6,lr}
adds r4, r0, 0
ldr r2, _080846A0 @ =gPlayerAvatar
ldrb r1, [r2, 0x5]
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
ldr r1, _080846A4 @ =gObjectEvents
adds r6, r0, r1
ldrb r1, [r2, 0x4]
lsls r0, r1, 4
adds r0, r1
lsls r0, 2
ldr r1, _080846A8 @ =gSprites
adds r5, r0, r1
ldrh r0, [r4, 0xA]
ldrh r1, [r5, 0x26]
adds r0, r1
strh r0, [r5, 0x26]
ldrh r2, [r4, 0xA]
movs r1, 0xA
ldrsh r0, [r4, r1]
cmp r0, 0x7
bgt _08084636
ldrh r1, [r4, 0xC]
adds r0, r2, r1
strh r0, [r4, 0xC]
movs r1, 0xF
ands r0, r1
cmp r0, 0
beq _08084636
lsls r0, r2, 1
strh r0, [r4, 0xA]
_08084636:
ldrh r2, [r4, 0xE]
movs r1, 0xE
ldrsh r0, [r4, r1]
cmp r0, 0
bne _08084674
movs r0, 0x26
ldrsh r1, [r5, r0]
movs r0, 0x10
negs r0, r0
cmp r1, r0
blt _08084674
adds r0, r2, 0x1
strh r0, [r4, 0xE]
ldrb r1, [r6, 0x3]
movs r0, 0x5
negs r0, r0
ands r0, r1
strb r0, [r6, 0x3]
ldrb r1, [r4, 0x10]
adds r3, r5, 0
adds r3, 0x42
lsls r1, 6
ldrb r2, [r3]
movs r0, 0x3F
ands r0, r2
orrs r0, r1
strb r0, [r3]
ldrb r0, [r6]
movs r1, 0x4
orrs r0, r1
strb r0, [r6]
_08084674:
movs r1, 0x26
ldrsh r0, [r5, r1]
cmp r0, 0
blt _08084698
movs r0, 0xCF
bl PlaySE
ldrb r0, [r6]
movs r1, 0x8
orrs r0, r1
movs r1, 0x20
orrs r0, r1
strb r0, [r6]
movs r0, 0
strh r0, [r5, 0x26]
ldrh r0, [r4, 0x8]
adds r0, 0x1
strh r0, [r4, 0x8]
_08084698:
movs r0, 0
pop {r4-r6}
pop {r1}
bx r1
.align 2, 0
_080846A0: .4byte gPlayerAvatar
_080846A4: .4byte gObjectEvents
_080846A8: .4byte gSprites
thumb_func_end FallWarpEffect_4
thumb_func_start FallWarpEffect_5
FallWarpEffect_5: @ 80846AC
push {lr}
ldrh r1, [r0, 0x8]
adds r1, 0x1
movs r2, 0
strh r1, [r0, 0x8]
movs r1, 0x4
strh r1, [r0, 0xA]
strh r2, [r0, 0xC]
movs r0, 0
bl SetCameraPanningCallback
movs r0, 0x1
pop {r1}
bx r1
thumb_func_end FallWarpEffect_5
thumb_func_start FallWarpEffect_6
FallWarpEffect_6: @ 80846C8
push {r4,lr}
adds r4, r0, 0
movs r0, 0xA
ldrsh r1, [r4, r0]
movs r0, 0
bl SetCameraPanning
ldrh r0, [r4, 0xA]
negs r2, r0
strh r2, [r4, 0xA]
ldrh r0, [r4, 0xC]
adds r0, 0x1
strh r0, [r4, 0xC]
movs r1, 0x3
ands r0, r1
cmp r0, 0
bne _080846F0
lsls r0, r2, 16
asrs r0, 17
strh r0, [r4, 0xA]
_080846F0:
movs r1, 0xA
ldrsh r0, [r4, r1]
cmp r0, 0
bne _080846FE
ldrh r0, [r4, 0x8]
adds r0, 0x1
strh r0, [r4, 0x8]
_080846FE:
movs r0, 0
pop {r4}
pop {r1}
bx r1
thumb_func_end FallWarpEffect_6
thumb_func_start FallWarpEffect_7
FallWarpEffect_7: @ 8084708
push {r4,lr}
sub sp, 0x4
ldr r1, _08084778 @ =gPlayerAvatar
movs r0, 0
strb r0, [r1, 0x6]
bl ScriptContext2_Disable
bl CameraObjectReset1
bl UnfreezeObjectEvents
bl InstallCameraPanAheadCallback
mov r4, sp
adds r4, 0x2
mov r0, sp
adds r1, r4, 0
bl PlayerGetDestCoords
mov r0, sp
movs r1, 0
ldrsh r0, [r0, r1]
movs r2, 0
ldrsh r1, [r4, r2]
bl MapGridGetMetatileBehaviorAt
lsls r0, 16
lsrs r0, 16
bl sub_8055B38
lsls r0, 24
lsrs r0, 24
cmp r0, 0x1
bne _08084760
ldr r0, _0808477C @ =0x00004001
movs r1, 0x1
bl VarSet
movs r0, 0x8
bl SetPlayerAvatarTransitionFlags
movs r0, 0x16
bl HelpSystem_SetSomeVariable2
_08084760:
ldr r0, _08084780 @ =Task_FallWarpFieldEffect
bl FindTaskIdByFunc
lsls r0, 24
lsrs r0, 24
bl DestroyTask
movs r0, 0
add sp, 0x4
pop {r4}
pop {r1}
bx r1
.align 2, 0
_08084778: .4byte gPlayerAvatar
_0808477C: .4byte 0x00004001
_08084780: .4byte Task_FallWarpFieldEffect
thumb_func_end FallWarpEffect_7
thumb_func_start StartEscalatorWarp
StartEscalatorWarp: @ 8084784
push {r4,lr}

View File

@ -280,7 +280,7 @@ struct PlayerAvatar /* 0x202E858 */
/*0x03*/ u8 tileTransitionState; // this is a transition running state: 00 is not moving, 01 is transition between tiles, 02 means you are on the frame in which you have centered on a tile but are about to keep moving, even if changing directions. 2 is also used for a ledge hop, since you are transitioning.
/*0x04*/ u8 spriteId;
/*0x05*/ u8 objectEventId;
/*0x06*/ u8 unk6;
/*0x06*/ u8 preventStep;
/*0x07*/ u8 gender;
u8 acroBikeState;
u8 unk9;

View File

@ -178,6 +178,7 @@ bool32 sub_80582E0(void);
bool32 sub_8058274(void);
u8 GetCurrentMapBattleScene(void);
void Overworld_ResetStateAfterFly(void);
bool8 sub_8055B38(u16 metatileBehavior);
extern u16 gHeldKeyCodeToSend;

View File

@ -2,11 +2,16 @@
#include "gflib.h"
#include "data.h"
#include "decompress.h"
#include "event_data.h"
#include "event_object_movement.h"
#include "field_camera.h"
#include "field_effect.h"
#include "field_effect_scripts.h"
#include "field_fadetransition.h"
#include "field_player_avatar.h"
#include "field_weather.h"
#include "fieldmap.h"
#include "help_system.h"
#include "overworld.h"
#include "party_menu.h"
#include "quest_log.h"
@ -1103,3 +1108,124 @@ void Task_FallWarpFieldEffect(u8 taskId)
while (sFallWarpEffectCBPtrs[task->data[0]](task))
;
}
bool8 FallWarpEffect_1(struct Task *task)
{
struct ObjectEvent *playerObject;
struct Sprite *playerSprite;
playerObject = &gObjectEvents[gPlayerAvatar.objectEventId];
playerSprite = &gSprites[gPlayerAvatar.spriteId];
CameraObjectReset2();
gObjectEvents[gPlayerAvatar.objectEventId].invisible = TRUE;
gPlayerAvatar.preventStep = TRUE;
ObjectEventSetHeldMovement(playerObject, GetFaceDirectionMovementAction(GetPlayerFacingDirection()));
task->data[4] = playerSprite->subspriteMode;
playerObject->fixedPriority = 1;
playerSprite->oam.priority = 1;
playerSprite->subspriteMode = SUBSPRITES_IGNORE_PRIORITY;
task->data[0]++;
return TRUE;
}
bool8 FallWarpEffect_2(struct Task *task)
{
if (IsWeatherNotFadingIn())
{
task->data[0]++;
}
return FALSE;
}
bool8 FallWarpEffect_3(struct Task *task)
{
struct Sprite *sprite;
s16 centerToCornerVecY;
sprite = &gSprites[gPlayerAvatar.spriteId];
centerToCornerVecY = -(sprite->centerToCornerVecY << 1);
sprite->pos2.y = -(sprite->pos1.y + sprite->centerToCornerVecY + gSpriteCoordOffsetY + centerToCornerVecY);
task->data[1] = 1;
task->data[2] = 0;
gObjectEvents[gPlayerAvatar.objectEventId].invisible = FALSE;
PlaySE(SE_RU_HYUU);
task->data[0]++;
return FALSE;
}
bool8 FallWarpEffect_4(struct Task *task)
{
struct ObjectEvent *objectEvent;
struct Sprite *sprite;
objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
sprite = &gSprites[gPlayerAvatar.spriteId];
sprite->pos2.y += task->data[1];
if (task->data[1] < 8)
{
task->data[2] += task->data[1];
if (task->data[2] & 0xf)
{
task->data[1] <<= 1;
}
}
if (task->data[3] == 0 && sprite->pos2.y >= -16)
{
task->data[3]++;
objectEvent->fixedPriority = 0;
sprite->subspriteMode = task->data[4];
objectEvent->triggerGroundEffectsOnMove = 1;
}
if (sprite->pos2.y >= 0)
{
PlaySE(SE_W070);
objectEvent->triggerGroundEffectsOnStop = 1;
objectEvent->landingJump = 1;
sprite->pos2.y = 0;
task->data[0]++;
}
return FALSE;
}
bool8 FallWarpEffect_5(struct Task *task)
{
task->data[0]++;
task->data[1] = 4;
task->data[2] = 0;
SetCameraPanningCallback(NULL);
return TRUE;
}
bool8 FallWarpEffect_6(struct Task *task)
{
SetCameraPanning(0, task->data[1]);
task->data[1] = -task->data[1];
task->data[2]++;
if ((task->data[2] & 3) == 0)
{
task->data[1] >>= 1;
}
if (task->data[1] == 0)
{
task->data[0]++;
}
return FALSE;
}
bool8 FallWarpEffect_7(struct Task *task)
{
s16 x, y;
gPlayerAvatar.preventStep = FALSE;
ScriptContext2_Disable();
CameraObjectReset1();
UnfreezeObjectEvents();
InstallCameraPanAheadCallback();
PlayerGetDestCoords(&x, &y);
// Seafoam Islands
if (sub_8055B38(MapGridGetMetatileBehaviorAt(x, y)) == TRUE)
{
VarSet(VAR_TEMP_1, 1);
SetPlayerAvatarTransitionFlags(PLAYER_AVATAR_FLAG_SURFING);
HelpSystem_SetSomeVariable2(22);
}
DestroyTask(FindTaskIdByFunc(Task_FallWarpFieldEffect));
return FALSE;
}

View File

@ -48,7 +48,7 @@ static void Task_FieldEffectShowMon_Init(u8 taskId)
u8 mapObjId;
ScriptContext2_Enable();
gPlayerAvatar.unk6 = TRUE;
gPlayerAvatar.preventStep = TRUE;
mapObjId = gPlayerAvatar.objectEventId;
if (!ObjectEventIsMovementOverridden(&gObjectEvents[mapObjId])
|| ObjectEventClearHeldMovementIfFinished(&gObjectEvents[mapObjId]))
@ -100,7 +100,7 @@ static void Task_FieldEffectShowMon_WaitFldeff(u8 taskId)
static void Task_FieldEffectShowMon_Cleanup(u8 taskId)
{
FLDEFF_CALL_FUNC_IN_DATA();
gPlayerAvatar.unk6 = FALSE;
gPlayerAvatar.preventStep = FALSE;
DestroyTask(taskId);
}

View File

@ -80,7 +80,7 @@ static void sub_8150530(void)
{
u8 taskId;
ScriptContext2_Enable();
gPlayerAvatar.unk6 = 1;
gPlayerAvatar.preventStep = TRUE;
taskId = CreateTask(sub_81505C4, 0xFF);
gTasks[taskId].data[0] = 0;
}