mirror of
https://github.com/pret/pokefirered.git
synced 2026-05-10 14:01:52 -05:00
FallWarpEffect funcs
This commit is contained in:
parent
e07c771f18
commit
db12644f00
|
|
@ -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}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user