diff options
-rwxr-xr-x | asm/fldeff_pc.s | 190 | ||||
-rw-r--r-- | data-de/event_scripts.s | 8 | ||||
-rw-r--r-- | data/event_scripts.s | 8 | ||||
-rw-r--r-- | data/field_effect_scripts.s | 2 | ||||
-rw-r--r-- | data/specials.inc | 2 | ||||
-rw-r--r-- | include/field_effect.h | 2 | ||||
-rw-r--r-- | ld_script.txt | 2 | ||||
-rw-r--r-- | src/field/fldeff_secret_base_pc.c | 69 |
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); +} |