Fly field effect

This commit is contained in:
PikalaxALT
2020-02-27 16:35:06 -05:00
parent 701d4635b4
commit 9c03c850a2
5 changed files with 87 additions and 196 deletions
-186
View File
@@ -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}
-1
View File
@@ -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
+1
View File
@@ -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;
+84
View File
@@ -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
View File
@@ -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"