decompile fldeff_secret_base_pc

This commit is contained in:
sceptillion 2017-11-19 01:31:09 -08:00
parent 41c347c815
commit e0e5d070fa
8 changed files with 81 additions and 202 deletions

View File

@ -1,190 +0,0 @@
.include "constants/gba_constants.inc"
.include "constants/species_constants.inc"
.include "asm/macros.inc"
.syntax unified
.text
thumb_func_start FldEff_PCTurnOn
FldEff_PCTurnOn: @ 80C6718
push {r4,lr}
sub sp, 0x4
mov r4, sp
adds r4, 0x2
mov r0, sp
adds r1, r4, 0
bl GetXYCoordsOneStepInFrontOfPlayer
ldr r0, _080C6758 @ =sub_80C6760
movs r1, 0
bl CreateTask
lsls r0, 24
lsrs r0, 24
ldr r2, _080C675C @ =gTasks
lsls r1, r0, 2
adds r1, r0
lsls r1, 3
adds r1, r2
mov r0, sp
ldrh r0, [r0]
movs r2, 0
strh r0, [r1, 0x8]
ldrh r0, [r4]
strh r0, [r1, 0xA]
strh r2, [r1, 0xC]
movs r0, 0
add sp, 0x4
pop {r4}
pop {r1}
bx r1
.align 2, 0
_080C6758: .4byte sub_80C6760
_080C675C: .4byte gTasks
thumb_func_end FldEff_PCTurnOn
thumb_func_start sub_80C6760
sub_80C6760: @ 80C6760
push {r4,r5,lr}
lsls r0, 24
lsrs r5, r0, 24
lsls r0, r5, 2
adds r0, r5
lsls r0, 3
ldr r1, _080C6788 @ =gTasks + 0x8
adds r4, r0, r1
ldrh r0, [r4, 0x4]
subs r0, 0x4
lsls r0, 16
asrs r0, 16
cmp r0, 0x10
bhi _080C682E
lsls r0, 2
ldr r1, _080C678C @ =_080C6790
adds r0, r1
ldr r0, [r0]
mov pc, r0
.align 2, 0
_080C6788: .4byte gTasks + 0x8
_080C678C: .4byte _080C6790
.align 2, 0
_080C6790:
.4byte _080C67D4
.4byte _080C682E
.4byte _080C682E
.4byte _080C682E
.4byte _080C67E2
.4byte _080C682E
.4byte _080C682E
.4byte _080C682E
.4byte _080C67D4
.4byte _080C682E
.4byte _080C682E
.4byte _080C682E
.4byte _080C67E2
.4byte _080C682E
.4byte _080C682E
.4byte _080C682E
.4byte _080C6800
_080C67D4:
movs r1, 0
ldrsh r0, [r4, r1]
movs r2, 0x2
ldrsh r1, [r4, r2]
movs r2, 0x89
lsls r2, 2
b _080C67EE
_080C67E2:
movs r1, 0
ldrsh r0, [r4, r1]
movs r2, 0x2
ldrsh r1, [r4, r2]
movs r2, 0x88
lsls r2, 2
_080C67EE:
bl MapGridSetMetatileIdAt
movs r1, 0
ldrsh r0, [r4, r1]
movs r2, 0x2
ldrsh r1, [r4, r2]
bl CurrentMapDrawMetatileAt
b _080C682E
_080C6800:
movs r1, 0
ldrsh r0, [r4, r1]
movs r2, 0x2
ldrsh r1, [r4, r2]
movs r2, 0x89
lsls r2, 2
bl MapGridSetMetatileIdAt
movs r1, 0
ldrsh r0, [r4, r1]
movs r2, 0x2
ldrsh r1, [r4, r2]
bl CurrentMapDrawMetatileAt
movs r0, 0x3D
bl FieldEffectActiveListRemove
bl EnableBothScriptContexts
adds r0, r5, 0
bl DestroyTask
b _080C6834
_080C682E:
ldrh r0, [r4, 0x4]
adds r0, 0x1
strh r0, [r4, 0x4]
_080C6834:
pop {r4,r5}
pop {r0}
bx r0
thumb_func_end sub_80C6760
thumb_func_start sub_80C683C
sub_80C683C: @ 80C683C
push {r4,lr}
sub sp, 0x4
mov r4, sp
adds r4, 0x2
mov r0, sp
adds r1, r4, 0
bl GetXYCoordsOneStepInFrontOfPlayer
movs r0, 0x3
bl PlaySE
ldr r0, _080C6874 @ =0x00004054
bl VarGet
lsls r0, 16
cmp r0, 0
bne _080C6878
mov r0, sp
movs r1, 0
ldrsh r0, [r0, r1]
movs r2, 0
ldrsh r1, [r4, r2]
movs r2, 0xE2
lsls r2, 4
bl MapGridSetMetatileIdAt
b _080C6888
.align 2, 0
_080C6874: .4byte 0x00004054
_080C6878:
mov r0, sp
movs r1, 0
ldrsh r0, [r0, r1]
movs r2, 0
ldrsh r1, [r4, r2]
ldr r2, _080C68A0 @ =0x00000e21
bl MapGridSetMetatileIdAt
_080C6888:
mov r0, sp
movs r1, 0
ldrsh r0, [r0, r1]
movs r2, 0
ldrsh r1, [r4, r2]
bl CurrentMapDrawMetatileAt
add sp, 0x4
pop {r4}
pop {r0}
bx r0
.align 2, 0
_080C68A0: .4byte 0x00000e21
thumb_func_end sub_80C683C
.align 2, 0 @ Don't pad with nop.

View File

@ -486,7 +486,7 @@ EventScript_15F4A1:
goto_if_eq EventScript_15F452
msgbox UnknownString_81A3A22, 3
special sub_80BC5BC
special sub_80C683C
special DoSecretBasePCTurnOffEffect
releaseall
end
@ -496,13 +496,13 @@ EventScript_15F4E0:
goto_if_eq EventScript_15F452
msgbox UnknownString_81A3A3A, 3
special sub_80BC5BC
special sub_80C683C
special DoSecretBasePCTurnOffEffect
releaseall
end
EventScript_15F503:
msgbox UnknownString_81A39C0, 3
special sub_80C683C
special DoSecretBasePCTurnOffEffect
closemessage
releaseall
end
@ -514,7 +514,7 @@ EventScript_15F511:
end
EventScript_15F51D:
special sub_80C683C
special DoSecretBasePCTurnOffEffect
closemessage
releaseall
end

View File

@ -486,7 +486,7 @@ EventScript_15F4A1:
goto_if_eq EventScript_15F452
msgbox UnknownString_81A3A22, 3
special sub_80BC5BC
special sub_80C683C
special DoSecretBasePCTurnOffEffect
releaseall
end
@ -496,13 +496,13 @@ EventScript_15F4E0:
goto_if_eq EventScript_15F452
msgbox UnknownString_81A3A3A, 3
special sub_80BC5BC
special sub_80C683C
special DoSecretBasePCTurnOffEffect
releaseall
end
EventScript_15F503:
msgbox UnknownString_81A39C0, 3
special sub_80C683C
special DoSecretBasePCTurnOffEffect
closemessage
releaseall
end
@ -514,7 +514,7 @@ EventScript_15F511:
end
EventScript_15F51D:
special sub_80C683C
special DoSecretBasePCTurnOffEffect
closemessage
releaseall
end

View File

@ -318,7 +318,7 @@ gFieldEffectScript_UseFlyAncientTomb: @ 81D9E26
end
gFieldEffectScript_PCTurnOn: @ 81D9E2C
callnative FldEff_PCTurnOn
callnative FldEff_SecretBasePCTurnOn
end
gFieldEffectScript_HallOfFameRecord: @ 81D9E32

View File

@ -33,7 +33,7 @@ gSpecials::
def_special sub_8100A7C
def_special sub_80BBC78
def_special sub_80BCE4C
def_special sub_80C683C
def_special DoSecretBasePCTurnOffEffect
def_special sub_80B929C
def_special sub_808347C
def_special sub_80834E4

View File

@ -67,7 +67,7 @@ enum FieldEffectScriptIdx
FLDEFF_CUT_GRASS,
FLDEFF_FIELD_MOVE_SHOW_MON_INIT,
FLDEFF_USE_FLY_ANCIENT_TOMB,
FLDEFF_PCTURN_ON,
FLDEFF_SECRET_BASE_PC_TURN_ON,
FLDEFF_HALL_OF_FAME_RECORD,
FLDEFF_USE_TELEPORT
};

View File

@ -160,7 +160,7 @@ SECTIONS {
src/pokemon/pokemon_size_record.o(.text);
asm/pc_screen_effect.o(.text);
asm/fldeff_secretpower.o(.text);
asm/fldeff_pc.o(.text);
src/field/fldeff_secret_base_pc.o(.text);
asm/fldeff_decoration.o(.text);
src/field/fldeff_poison.o(.text);
asm/fldeff_berrytree.o(.text);

View File

@ -0,0 +1,69 @@
#include "global.h"
#include "event_data.h"
#include "field_camera.h"
#include "field_effect.h"
#include "field_player_avatar.h"
#include "fieldmap.h"
#include "script.h"
#include "songs.h"
#include "sound.h"
#include "task.h"
static void Task_SecretBasePCTurnOn(u8);
u32 FldEff_SecretBasePCTurnOn(void)
{
s16 x, y;
u8 taskId;
GetXYCoordsOneStepInFrontOfPlayer(&x, &y);
taskId = CreateTask(Task_SecretBasePCTurnOn, 0);
gTasks[taskId].data[0] = x;
gTasks[taskId].data[1] = y;
gTasks[taskId].data[2] = 0;
return 0;
}
static void Task_SecretBasePCTurnOn(u8 taskId)
{
s16 *data = gTasks[taskId].data;
switch (data[2])
{
case 4:
case 12:
MapGridSetMetatileIdAt(data[0], data[1], 548);
CurrentMapDrawMetatileAt(data[0], data[1]);
break;
case 8:
case 16:
MapGridSetMetatileIdAt(data[0], data[1], 544);
CurrentMapDrawMetatileAt(data[0], data[1]);
break;
case 20:
MapGridSetMetatileIdAt(data[0], data[1], 548);
CurrentMapDrawMetatileAt(data[0], data[1]);
FieldEffectActiveListRemove(FLDEFF_SECRET_BASE_PC_TURN_ON);
EnableBothScriptContexts();
DestroyTask(taskId);
return;
}
data[2]++;
}
void DoSecretBasePCTurnOffEffect(void)
{
s16 x, y;
GetXYCoordsOneStepInFrontOfPlayer(&x, &y);
PlaySE(SE_PC_OFF);
if (!VarGet(VAR_0x4054))
MapGridSetMetatileIdAt(x, y, 3616);
else
MapGridSetMetatileIdAt(x, y, 3617);
CurrentMapDrawMetatileAt(x, y);
}