summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xasm/fldeff_pc.s190
-rw-r--r--data-de/event_scripts.s8
-rw-r--r--data/event_scripts.s8
-rw-r--r--data/field_effect_scripts.s2
-rw-r--r--data/specials.inc2
-rw-r--r--include/field_effect.h2
-rw-r--r--ld_script.txt2
-rw-r--r--src/field/fldeff_secret_base_pc.c69
8 files changed, 81 insertions, 202 deletions
diff --git a/asm/fldeff_pc.s b/asm/fldeff_pc.s
deleted file mode 100755
index 32afe2050..000000000
--- a/asm/fldeff_pc.s
+++ /dev/null
@@ -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.
diff --git a/data-de/event_scripts.s b/data-de/event_scripts.s
index 677aa9f21..4c0dfe8df 100644
--- a/data-de/event_scripts.s
+++ b/data-de/event_scripts.s
@@ -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
diff --git a/data/event_scripts.s b/data/event_scripts.s
index 854b52c9e..6d2a3693c 100644
--- a/data/event_scripts.s
+++ b/data/event_scripts.s
@@ -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
diff --git a/data/field_effect_scripts.s b/data/field_effect_scripts.s
index aabb1252d..8e6a6d877 100644
--- a/data/field_effect_scripts.s
+++ b/data/field_effect_scripts.s
@@ -318,7 +318,7 @@ gFieldEffectScript_UseFlyAncientTomb: @ 81D9E26
end
gFieldEffectScript_PCTurnOn: @ 81D9E2C
- callnative FldEff_PCTurnOn
+ callnative FldEff_SecretBasePCTurnOn
end
gFieldEffectScript_HallOfFameRecord: @ 81D9E32
diff --git a/data/specials.inc b/data/specials.inc
index efa8da174..2924f2173 100644
--- a/data/specials.inc
+++ b/data/specials.inc
@@ -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
diff --git a/include/field_effect.h b/include/field_effect.h
index a509697e4..dbd92b088 100644
--- a/include/field_effect.h
+++ b/include/field_effect.h
@@ -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
};
diff --git a/ld_script.txt b/ld_script.txt
index 773714819..4a3c224d2 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -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);
diff --git a/src/field/fldeff_secret_base_pc.c b/src/field/fldeff_secret_base_pc.c
new file mode 100644
index 000000000..ead970b27
--- /dev/null
+++ b/src/field/fldeff_secret_base_pc.c
@@ -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);
+}