summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/secret_base.c142
1 files changed, 142 insertions, 0 deletions
diff --git a/src/secret_base.c b/src/secret_base.c
index 175ad890d..522d59f31 100644
--- a/src/secret_base.c
+++ b/src/secret_base.c
@@ -20,6 +20,8 @@
#include "field_screen.h"
#include "field_weather.h"
#include "field_map_obj.h"
+#include "field_effect.h"
+#include "fldeff_80F9BCC.h"
#include "metatile_behavior.h"
#include "map_name_popup.h"
#include "text.h"
@@ -1287,3 +1289,143 @@ void sub_80EA354(void)
gSpecialVar_0x8004 = sub_80EA20C(sbId);
gScriptResult = gSaveBlock1Ptr->secretBases[sbId].sbr_field_1_5;
}
+
+
+void sub_80EA3E4(u8 taskId)
+{
+ s16 x;
+ s16 y;
+ u8 behavior;
+ u16 tileId;
+ s16 *data;
+
+ data = gTasks[taskId].data;
+ switch (data[1])
+ {
+ case 0:
+ if (VarGet(VAR_0x4054) != 0)
+ {
+ gUnknown_0203A01D = TRUE;
+ }
+ else
+ {
+ gUnknown_0203A01D = FALSE;
+ }
+ PlayerGetDestCoords(&data[2], &data[3]);
+ data[1] = 1;
+ break;
+ case 1:
+ PlayerGetDestCoords(&x, &y);
+ if (x != data[2] || y != data[3])
+ {
+ data[2] = x;
+ data[3] = y;
+ VarSet(VAR_0x40EC, VarGet(VAR_0x40EC) + 1);
+ behavior = MapGridGetMetatileBehaviorAt(x, y);
+ tileId = MapGridGetMetatileIdAt(x, y);
+ if (tileId == 0x234 || tileId == 0x23C)
+ {
+ if (gUnknown_0203A01D == TRUE)
+ {
+ VarSet(VAR_0x40EF, VarGet(VAR_0x40EF) | 0x20);
+ }
+ }
+ else if (tileId == 0x2b8 || tileId == 0x2b9 || tileId == 0x2ba || tileId == 0x2c0 || tileId == 0x2c1 || tileId == 0x2c2 || tileId == 0x2c8 || tileId == 0x2c9 || tileId == 0x2ca)
+ {
+ if (gUnknown_0203A01D == TRUE)
+ {
+ VarSet(VAR_0x40EE, VarGet(VAR_0x40EE) | 0x01);
+ }
+ }
+ else if (tileId == 0x239 || tileId == 0x241 || tileId == 0x251 || tileId == 0x259)
+ {
+ if (gUnknown_0203A01D == TRUE)
+ {
+ VarSet(VAR_0x40EE, VarGet(VAR_0x40EE) | 0x04);
+ }
+ }
+ else if ((behavior == 0x34 && tileId == 0x26d) || (behavior == 0x35 && MapGridGetMetatileIdAt(x, y) == 0x26a))
+ {
+ if (gUnknown_0203A01D == TRUE)
+ {
+ VarSet(VAR_0x40EF, VarGet(VAR_0x40EF) | 0x200);
+ }
+ }
+ else if (behavior == 0xc1 && tileId == 0x23d)
+ {
+ if (gUnknown_0203A01D == TRUE)
+ {
+ VarSet(VAR_0x40EF, VarGet(VAR_0x40EF) ^ 0x1000);
+ VarSet(VAR_0x40EF, VarGet(VAR_0x40EF) | 0x2000);
+ }
+ }
+ else if (behavior == 0x47 && tileId == 0x23e)
+ {
+ if (gUnknown_0203A01D == TRUE)
+ {
+ VarSet(VAR_0x40EF, VarGet(VAR_0x40EF) | 0x1000);
+ VarSet(VAR_0x40EF, VarGet(VAR_0x40EF) ^ 0x2000);
+ }
+ }
+ else if (MetatileBehavior_IsSecretBaseGlitterMat(behavior) == TRUE)
+ {
+ if (gUnknown_0203A01D == TRUE)
+ {
+ VarSet(VAR_0x40EF, VarGet(VAR_0x40EF) | 0x80);
+ }
+ }
+ else if (MetatileBehavior_IsSecretBaseBalloon(behavior) == TRUE)
+ {
+ sub_80FA5E4(MapGridGetMetatileIdAt(x, y), x, y);
+ if (gUnknown_0203A01D == TRUE)
+ {
+ switch ((int)MapGridGetMetatileIdAt(x, y))
+ {
+ case 0x338:
+ case 0x33c:
+ case 0x340:
+ VarSet(VAR_0x40EE, VarGet(VAR_0x40EE) | 0x02);
+ break;
+ case 0x228:
+ VarSet(VAR_0x40EE, VarGet(VAR_0x40EE) | 0x100);
+ break;
+ }
+ }
+ }
+ else if (MetatileBehavior_IsMB_BE(behavior) == TRUE)
+ {
+ if (gUnknown_0203A01D == TRUE)
+ {
+ VarSet(VAR_0x40EF, VarGet(VAR_0x40EF) | 0x400);
+ }
+ sub_80FA794(x, y);
+ }
+ else if (MetatileBehavior_IsSecretBaseSoundMat(behavior) == TRUE){
+ if (gUnknown_0203A01D == TRUE) {
+ VarSet(VAR_0x40EE, VarGet(VAR_0x40EE) | 0x8000);
+ }
+ }
+ else if (MetatileBehavior_IsSecretBaseJumpMat(behavior) == TRUE)
+ {
+ if (gUnknown_0203A01D == TRUE)
+ {
+ VarSet(VAR_0x40EF, VarGet(VAR_0x40EF) | 0x4000);
+ }
+ }
+ else if (MetatileBehavior_IsSecretBaseSpinMat(behavior) == TRUE)
+ {
+ if (gUnknown_0203A01D == TRUE)
+ {
+ VarSet(VAR_0x40EF, VarGet(VAR_0x40EF) | 0x02);
+ }
+ }
+ }
+ break;
+ case 2:
+ if (!FieldEffectActiveListContains(data[4]))
+ {
+ data[1] = 1;
+ }
+ break;
+ }
+}