summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2020-02-28 09:06:19 -0500
committerPikalaxALT <pikalaxalt@gmail.com>2020-02-28 09:06:19 -0500
commitdb12644f0001346604c19e4004eead5cd2203fea (patch)
tree4d36ea86a8b61eff68a00ac969c5117cf851dd29
parente07c771f1840fe614ac1040d55ce842602f44c4c (diff)
FallWarpEffect funcs
-rw-r--r--asm/field_effect.s358
-rw-r--r--include/global.fieldmap.h2
-rw-r--r--include/overworld.h1
-rw-r--r--src/field_effect.c126
-rw-r--r--src/fldeff_rocksmash.c4
-rw-r--r--src/quest_log_player.c2
6 files changed, 131 insertions, 362 deletions
diff --git a/asm/field_effect.s b/asm/field_effect.s
index fde6d7022..a1ecaf384 100644
--- a/asm/field_effect.s
+++ b/asm/field_effect.s
@@ -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}
diff --git a/include/global.fieldmap.h b/include/global.fieldmap.h
index 57d8d0a35..aa1bb43ee 100644
--- a/include/global.fieldmap.h
+++ b/include/global.fieldmap.h
@@ -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;
diff --git a/include/overworld.h b/include/overworld.h
index ac50f9c80..8fdbfabe3 100644
--- a/include/overworld.h
+++ b/include/overworld.h
@@ -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;
diff --git a/src/field_effect.c b/src/field_effect.c
index f85a9aef5..a8102c1d9 100644
--- a/src/field_effect.c
+++ b/src/field_effect.c
@@ -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;
+}
diff --git a/src/fldeff_rocksmash.c b/src/fldeff_rocksmash.c
index 397741806..7ea18f40f 100644
--- a/src/fldeff_rocksmash.c
+++ b/src/fldeff_rocksmash.c
@@ -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);
}
diff --git a/src/quest_log_player.c b/src/quest_log_player.c
index b6167a7bf..32832a04a 100644
--- a/src/quest_log_player.c
+++ b/src/quest_log_player.c
@@ -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;
}