Fly field effect
This commit is contained in:
@@ -5,192 +5,6 @@
|
||||
|
||||
.text
|
||||
|
||||
thumb_func_start ReturnToFieldFromFlyMapSelect
|
||||
ReturnToFieldFromFlyMapSelect: @ 80842C8
|
||||
push {lr}
|
||||
ldr r0, _080842DC @ =CB2_ReturnToField
|
||||
bl SetMainCallback2
|
||||
ldr r1, _080842E0 @ =gFieldCallback
|
||||
ldr r0, _080842E4 @ =FieldCallback_Fly
|
||||
str r0, [r1]
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_080842DC: .4byte CB2_ReturnToField
|
||||
_080842E0: .4byte gFieldCallback
|
||||
_080842E4: .4byte FieldCallback_Fly
|
||||
thumb_func_end ReturnToFieldFromFlyMapSelect
|
||||
|
||||
thumb_func_start FieldCallback_Fly
|
||||
FieldCallback_Fly: @ 80842E8
|
||||
push {lr}
|
||||
bl FadeInFromBlack
|
||||
ldr r0, _08084308 @ =Task_FlyOut
|
||||
movs r1, 0
|
||||
bl CreateTask
|
||||
bl ScriptContext2_Enable
|
||||
bl FreezeObjectEvents
|
||||
ldr r1, _0808430C @ =gFieldCallback
|
||||
movs r0, 0
|
||||
str r0, [r1]
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_08084308: .4byte Task_FlyOut
|
||||
_0808430C: .4byte gFieldCallback
|
||||
thumb_func_end FieldCallback_Fly
|
||||
|
||||
thumb_func_start Task_FlyOut
|
||||
Task_FlyOut: @ 8084310
|
||||
push {r4-r6,lr}
|
||||
lsls r0, 24
|
||||
lsrs r5, r0, 24
|
||||
lsls r0, r5, 2
|
||||
adds r0, r5
|
||||
lsls r0, 3
|
||||
ldr r1, _0808437C @ =gTasks
|
||||
adds r4, r0, r1
|
||||
movs r0, 0x8
|
||||
ldrsh r6, [r4, r0]
|
||||
cmp r6, 0
|
||||
bne _08084350
|
||||
bl IsWeatherNotFadingIn
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _08084376
|
||||
bl GetCursorSelectionMonId
|
||||
ldr r1, _08084380 @ =gFieldEffectArguments
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
str r0, [r1]
|
||||
cmp r0, 0x5
|
||||
ble _08084344
|
||||
str r6, [r1]
|
||||
_08084344:
|
||||
movs r0, 0x1F
|
||||
bl FieldEffectStart
|
||||
ldrh r0, [r4, 0x8]
|
||||
adds r0, 0x1
|
||||
strh r0, [r4, 0x8]
|
||||
_08084350:
|
||||
movs r0, 0x1F
|
||||
bl FieldEffectActiveListContains
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
bne _08084376
|
||||
bl Overworld_ResetStateAfterFly
|
||||
bl WarpIntoMap
|
||||
ldr r0, _08084384 @ =CB2_LoadMap
|
||||
bl SetMainCallback2
|
||||
ldr r1, _08084388 @ =gFieldCallback
|
||||
ldr r0, _0808438C @ =FieldCallback_FlyArrive
|
||||
str r0, [r1]
|
||||
adds r0, r5, 0
|
||||
bl DestroyTask
|
||||
_08084376:
|
||||
pop {r4-r6}
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_0808437C: .4byte gTasks
|
||||
_08084380: .4byte gFieldEffectArguments
|
||||
_08084384: .4byte CB2_LoadMap
|
||||
_08084388: .4byte gFieldCallback
|
||||
_0808438C: .4byte FieldCallback_FlyArrive
|
||||
thumb_func_end Task_FlyOut
|
||||
|
||||
thumb_func_start FieldCallback_FlyArrive
|
||||
FieldCallback_FlyArrive: @ 8084390
|
||||
push {r4,lr}
|
||||
bl Overworld_PlaySpecialMapMusic
|
||||
bl FadeInFromBlack
|
||||
ldr r0, _080843E8 @ =Task_FlyIn
|
||||
movs r1, 0
|
||||
bl CreateTask
|
||||
ldr r4, _080843EC @ =gObjectEvents
|
||||
ldr r3, _080843F0 @ =gPlayerAvatar
|
||||
ldrb r1, [r3, 0x5]
|
||||
lsls r0, r1, 3
|
||||
adds r0, r1
|
||||
lsls r0, 2
|
||||
adds r0, r4
|
||||
ldrb r1, [r0, 0x1]
|
||||
movs r2, 0x20
|
||||
orrs r1, r2
|
||||
strb r1, [r0, 0x1]
|
||||
ldrb r1, [r3]
|
||||
movs r0, 0x8
|
||||
ands r0, r1
|
||||
cmp r0, 0
|
||||
beq _080843D2
|
||||
ldrb r1, [r3, 0x5]
|
||||
lsls r0, r1, 3
|
||||
adds r0, r1
|
||||
lsls r0, 2
|
||||
adds r0, r4
|
||||
movs r1, 0x3
|
||||
bl ObjectEventTurn
|
||||
_080843D2:
|
||||
bl ScriptContext2_Enable
|
||||
bl FreezeObjectEvents
|
||||
ldr r1, _080843F4 @ =gFieldCallback
|
||||
movs r0, 0
|
||||
str r0, [r1]
|
||||
pop {r4}
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_080843E8: .4byte Task_FlyIn
|
||||
_080843EC: .4byte gObjectEvents
|
||||
_080843F0: .4byte gPlayerAvatar
|
||||
_080843F4: .4byte gFieldCallback
|
||||
thumb_func_end FieldCallback_FlyArrive
|
||||
|
||||
thumb_func_start Task_FlyIn
|
||||
Task_FlyIn: @ 80843F8
|
||||
push {r4,r5,lr}
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
adds r5, r0, 0
|
||||
lsls r0, r5, 2
|
||||
adds r0, r5
|
||||
lsls r0, 3
|
||||
ldr r1, _0808444C @ =gTasks
|
||||
adds r4, r0, r1
|
||||
movs r1, 0x8
|
||||
ldrsh r0, [r4, r1]
|
||||
cmp r0, 0
|
||||
bne _0808442A
|
||||
ldr r0, _08084450 @ =gPaletteFade
|
||||
ldrb r1, [r0, 0x7]
|
||||
movs r0, 0x80
|
||||
ands r0, r1
|
||||
cmp r0, 0
|
||||
bne _08084444
|
||||
movs r0, 0x20
|
||||
bl FieldEffectStart
|
||||
ldrh r0, [r4, 0x8]
|
||||
adds r0, 0x1
|
||||
strh r0, [r4, 0x8]
|
||||
_0808442A:
|
||||
movs r0, 0x20
|
||||
bl FieldEffectActiveListContains
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
bne _08084444
|
||||
bl ScriptContext2_Disable
|
||||
bl UnfreezeObjectEvents
|
||||
adds r0, r5, 0
|
||||
bl DestroyTask
|
||||
_08084444:
|
||||
pop {r4,r5}
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_0808444C: .4byte gTasks
|
||||
_08084450: .4byte gPaletteFade
|
||||
thumb_func_end Task_FlyIn
|
||||
|
||||
thumb_func_start FieldCB_FallWarpExit
|
||||
FieldCB_FallWarpExit: @ 8084454
|
||||
push {lr}
|
||||
|
||||
@@ -9,7 +9,6 @@ void sub_80B0244(void);
|
||||
void sub_807E3EC(void);
|
||||
void DoOutwardBarnDoorWipe(void);
|
||||
void Task_BarnDoorWipe(u8 taskId);
|
||||
void FadeInFromBlack(void);
|
||||
void sub_807F5F0(void);
|
||||
|
||||
#endif // GUARD_FIELD_SCREEN_EFFECT_H
|
||||
|
||||
@@ -177,6 +177,7 @@ void sub_805546C(u8 a0);
|
||||
bool32 sub_80582E0(void);
|
||||
bool32 sub_8058274(void);
|
||||
u8 GetCurrentMapBattleScene(void);
|
||||
void Overworld_ResetStateAfterFly(void);
|
||||
|
||||
extern u16 gHeldKeyCodeToSend;
|
||||
|
||||
|
||||
@@ -2,11 +2,15 @@
|
||||
#include "gflib.h"
|
||||
#include "data.h"
|
||||
#include "decompress.h"
|
||||
#include "event_object_movement.h"
|
||||
#include "field_effect.h"
|
||||
#include "field_effect_scripts.h"
|
||||
#include "field_fadetransition.h"
|
||||
#include "field_weather.h"
|
||||
#include "overworld.h"
|
||||
#include "party_menu.h"
|
||||
#include "quest_log.h"
|
||||
#include "script.h"
|
||||
#include "task.h"
|
||||
#include "trainer_pokemon_sprites.h"
|
||||
#include "constants/songs.h"
|
||||
@@ -982,3 +986,83 @@ void SpriteCB_HallOfFameMonitor(struct Sprite * sprite)
|
||||
if (sprite->animEnded)
|
||||
FieldEffectFreeGraphicsResources(sprite);
|
||||
}
|
||||
|
||||
void FieldCallback_Fly(void);
|
||||
void Task_FlyOut(u8 taskId);
|
||||
void FieldCallback_FlyArrive(void);
|
||||
void Task_FlyIn(u8 taskId);
|
||||
|
||||
void ReturnToFieldFromFlyMapSelect(void)
|
||||
{
|
||||
SetMainCallback2(CB2_ReturnToField);
|
||||
gFieldCallback = FieldCallback_Fly;
|
||||
}
|
||||
|
||||
void FieldCallback_Fly(void)
|
||||
{
|
||||
FadeInFromBlack();
|
||||
CreateTask(Task_FlyOut, 0);
|
||||
ScriptContext2_Enable();
|
||||
FreezeObjectEvents();
|
||||
gFieldCallback = NULL;
|
||||
}
|
||||
|
||||
void Task_FlyOut(u8 taskId)
|
||||
{
|
||||
struct Task * task;
|
||||
task = &gTasks[taskId];
|
||||
if (task->data[0] == 0)
|
||||
{
|
||||
if (!IsWeatherNotFadingIn())
|
||||
return;
|
||||
gFieldEffectArguments[0] = GetCursorSelectionMonId();
|
||||
if ((int)gFieldEffectArguments[0] >= PARTY_SIZE)
|
||||
gFieldEffectArguments[0] = 0;
|
||||
FieldEffectStart(FLDEFF_USE_FLY);
|
||||
task->data[0]++;
|
||||
}
|
||||
if (!FieldEffectActiveListContains(FLDEFF_USE_FLY))
|
||||
{
|
||||
Overworld_ResetStateAfterFly();
|
||||
WarpIntoMap();
|
||||
SetMainCallback2(CB2_LoadMap);
|
||||
gFieldCallback = FieldCallback_FlyArrive;
|
||||
DestroyTask(taskId);
|
||||
}
|
||||
}
|
||||
|
||||
void FieldCallback_FlyArrive(void)
|
||||
{
|
||||
Overworld_PlaySpecialMapMusic();
|
||||
FadeInFromBlack();
|
||||
CreateTask(Task_FlyIn, 0);
|
||||
gObjectEvents[gPlayerAvatar.objectEventId].invisible = TRUE;
|
||||
if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_SURFING)
|
||||
{
|
||||
ObjectEventTurn(&gObjectEvents[gPlayerAvatar.objectEventId], DIR_WEST);
|
||||
}
|
||||
ScriptContext2_Enable();
|
||||
FreezeObjectEvents();
|
||||
gFieldCallback = NULL;
|
||||
}
|
||||
|
||||
void Task_FlyIn(u8 taskId)
|
||||
{
|
||||
struct Task *task;
|
||||
task = &gTasks[taskId];
|
||||
if (task->data[0] == 0)
|
||||
{
|
||||
if (gPaletteFade.active)
|
||||
{
|
||||
return;
|
||||
}
|
||||
FieldEffectStart(FLDEFF_FLY_IN);
|
||||
task->data[0]++;
|
||||
}
|
||||
if (!FieldEffectActiveListContains(FLDEFF_FLY_IN))
|
||||
{
|
||||
ScriptContext2_Disable();
|
||||
UnfreezeObjectEvents();
|
||||
DestroyTask(taskId);
|
||||
}
|
||||
}
|
||||
|
||||
+2
-9
@@ -1,5 +1,5 @@
|
||||
#include "global.h"
|
||||
#include "malloc.h"
|
||||
#include "gflib.h"
|
||||
#include "battle.h"
|
||||
#include "battle_anim.h"
|
||||
#include "battle_controllers.h"
|
||||
@@ -7,7 +7,6 @@
|
||||
#include "battle_interface.h"
|
||||
#include "battle_tower.h"
|
||||
#include "berry_pouch.h"
|
||||
#include "bg.h"
|
||||
#include "data.h"
|
||||
#include "decompress.h"
|
||||
#include "easy_chat.h"
|
||||
@@ -15,11 +14,10 @@
|
||||
#include "evolution_scene.h"
|
||||
#include "field_effect.h"
|
||||
#include "field_player_avatar.h"
|
||||
#include "field_screen_effect.h"
|
||||
#include "field_fadetransition.h"
|
||||
#include "field_weather.h"
|
||||
#include "fieldmap.h"
|
||||
#include "fldeff.h"
|
||||
#include "gpu_regs.h"
|
||||
#include "graphics.h"
|
||||
#include "help_system.h"
|
||||
#include "item.h"
|
||||
@@ -36,7 +34,6 @@
|
||||
#include "new_menu_helpers.h"
|
||||
#include "metatile_behavior.h"
|
||||
#include "overworld.h"
|
||||
#include "palette.h"
|
||||
#include "party_menu.h"
|
||||
#include "player_pc.h"
|
||||
#include "pokedex.h"
|
||||
@@ -50,19 +47,15 @@
|
||||
#include "reshow_battle_screen.h"
|
||||
#include "scanline_effect.h"
|
||||
#include "script.h"
|
||||
#include "sound.h"
|
||||
#include "sprite.h"
|
||||
#include "start_menu.h"
|
||||
#include "string_util.h"
|
||||
#include "strings.h"
|
||||
#include "task.h"
|
||||
#include "teachy_tv.h"
|
||||
#include "text.h"
|
||||
#include "text_window.h"
|
||||
#include "tm_case.h"
|
||||
#include "trade.h"
|
||||
#include "union_room.h"
|
||||
#include "window.h"
|
||||
#include "constants/battle.h"
|
||||
#include "constants/easy_chat.h"
|
||||
#include "constants/field_effects.h"
|
||||
|
||||
Reference in New Issue
Block a user