diff options
-rw-r--r-- | asm/battle_setup.s | 2 | ||||
-rw-r--r-- | asm/field_poison.s | 2 | ||||
-rw-r--r-- | asm/fldeff_poison.s | 98 | ||||
-rw-r--r-- | include/bg.h | 2 | ||||
-rw-r--r-- | include/fldeff.h | 4 | ||||
-rw-r--r-- | include/fldeff_80F9BCC.h | 2 | ||||
-rw-r--r-- | ld_script.txt | 2 | ||||
-rw-r--r-- | src/bg.c | 2 | ||||
-rw-r--r-- | src/fldeff_poison.c | 39 |
9 files changed, 49 insertions, 104 deletions
diff --git a/asm/battle_setup.s b/asm/battle_setup.s index 146e4a3c9..a13c1a418 100644 --- a/asm/battle_setup.s +++ b/asm/battle_setup.s @@ -25,7 +25,7 @@ sub_807F620: @ 807F620 .align 2, 0 _0807F640: .4byte gTasks+0x8 _0807F644: - bl c3_80A0DD8_is_running + bl FldEffPoison_IsActive cmp r0, 0 bne _0807F686 bl sub_812B478 diff --git a/asm/field_poison.s b/asm/field_poison.s index f76e7db4f..811f375c6 100644 --- a/asm/field_poison.s +++ b/asm/field_poison.s @@ -291,7 +291,7 @@ _080A0668: cmp r7, 0 beq _080A067C _080A0678: - bl overworld_poison_effect + bl FldEffPoison_Start _080A067C: cmp r6, 0 beq _080A0688 diff --git a/asm/fldeff_poison.s b/asm/fldeff_poison.s deleted file mode 100644 index dd3bb622e..000000000 --- a/asm/fldeff_poison.s +++ /dev/null @@ -1,98 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start task50_overworld_poison_effect -task50_overworld_poison_effect: @ 80A0DD8 - push {lr} - lsls r0, 24 - lsrs r2, r0, 24 - lsls r0, r2, 2 - adds r0, r2 - lsls r0, 3 - ldr r1, _080A0DFC @ =gTasks+0x8 - adds r1, r0, r1 - movs r3, 0 - ldrsh r0, [r1, r3] - cmp r0, 0x1 - beq _080A0E16 - cmp r0, 0x1 - bgt _080A0E00 - cmp r0, 0 - beq _080A0E06 - b _080A0E32 - .align 2, 0 -_080A0DFC: .4byte gTasks+0x8 -_080A0E00: - cmp r0, 0x2 - beq _080A0E2A - b _080A0E32 -_080A0E06: - ldrh r0, [r1, 0x2] - adds r0, 0x1 - strh r0, [r1, 0x2] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x4 - ble _080A0E32 - b _080A0E22 -_080A0E16: - ldrh r0, [r1, 0x2] - subs r0, 0x1 - strh r0, [r1, 0x2] - lsls r0, 16 - cmp r0, 0 - bne _080A0E32 -_080A0E22: - ldrh r0, [r1] - adds r0, 0x1 - strh r0, [r1] - b _080A0E32 -_080A0E2A: - adds r0, r2, 0 - bl DestroyTask - b _080A0E42 -_080A0E32: - ldrb r1, [r1, 0x2] - lsls r0, r1, 4 - orrs r0, r1 - lsls r0, 24 - lsrs r0, 24 - movs r1, 0 - bl Unused_AdjustBgMosaic -_080A0E42: - pop {r0} - bx r0 - thumb_func_end task50_overworld_poison_effect - - thumb_func_start overworld_poison_effect -overworld_poison_effect: @ 80A0E48 - push {lr} - movs r0, 0x48 - bl PlaySE - ldr r0, _080A0E5C @ =task50_overworld_poison_effect - movs r1, 0x50 - bl CreateTask - pop {r0} - bx r0 - .align 2, 0 -_080A0E5C: .4byte task50_overworld_poison_effect - thumb_func_end overworld_poison_effect - - thumb_func_start c3_80A0DD8_is_running -c3_80A0DD8_is_running: @ 80A0E60 - push {lr} - ldr r0, _080A0E70 @ =task50_overworld_poison_effect - bl FuncIsActiveTask - lsls r0, 24 - lsrs r0, 24 - pop {r1} - bx r1 - .align 2, 0 -_080A0E70: .4byte task50_overworld_poison_effect - thumb_func_end c3_80A0DD8_is_running - - .align 2, 0 @ Don't pad with nop. diff --git a/include/bg.h b/include/bg.h index 003ffc916..6364d0806 100644 --- a/include/bg.h +++ b/include/bg.h @@ -71,7 +71,7 @@ u32 ChangeBgY(u8 bg, u32 value, u8 op); u32 ChangeBgY_ScreenOff(u8 bg, u32 value, u8 op); u32 GetBgY(u8 bg); void SetBgAffine(u8 bg, u32 srcCenterX, u32 srcCenterY, s16 dispCenterX, s16 dispCenterY, s16 scaleX, s16 scaleY, u16 rotationAngle); -u8 Unused_AdjustBgMosaic(u8 a1, u8 a2); +u8 AdjustBgMosaic(u8 a1, u8 a2); void SetBgTilemapBuffer(u8 bg, void *tilemap); void UnsetBgTilemapBuffer(u8 bg); void* GetBgTilemapBuffer(u8 bg); diff --git a/include/fldeff.h b/include/fldeff.h index 364cb7550..3120833e2 100644 --- a/include/fldeff.h +++ b/include/fldeff.h @@ -4,4 +4,8 @@ // rock smash u8 oei_task_add(void); +// poison +void FldEffPoison_Start(void); +bool32 FldEffPoison_IsActive(void); + #endif // GUARD_FLDEFF_H diff --git a/include/fldeff_80F9BCC.h b/include/fldeff_80F9BCC.h index 3960c6c65..411a2501f 100644 --- a/include/fldeff_80F9BCC.h +++ b/include/fldeff_80F9BCC.h @@ -11,6 +11,6 @@ void sub_80FA5E4(s16 id, s16 x, s16 y); void sub_80FA794(s16 x, s16 y); -void overworld_poison_effect(void); +void FldEffPoison_Start(void); #endif //GUARD_FLDEFF_80F9BCC_H diff --git a/ld_script.txt b/ld_script.txt index 4f0a3b731..d6382c5cb 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -149,7 +149,7 @@ SECTIONS { asm/field_poison.o(.text); asm/pokemon_size_record.o(.text); asm/pc_screen_effect.o(.text); - asm/fldeff_poison.o(.text); + src/fldeff_poison.o(.text); src/fldeff_berrytree.o(.text); src/field_special_scene.o(.text); asm/safari_zone.o(.text); @@ -865,7 +865,7 @@ void SetBgAffine(u8 bg, u32 srcCenterX, u32 srcCenterY, s16 dispCenterX, s16 dis SetBgAffineInternal(bg, srcCenterX, srcCenterY, dispCenterX, dispCenterY, scaleX, scaleY, rotationAngle); } -u8 Unused_AdjustBgMosaic(u8 a1, u8 a2) +u8 AdjustBgMosaic(u8 a1, u8 a2) { u16 result; s16 test1; diff --git a/src/fldeff_poison.c b/src/fldeff_poison.c new file mode 100644 index 000000000..05715bbdc --- /dev/null +++ b/src/fldeff_poison.c @@ -0,0 +1,39 @@ +#include "global.h" +#include "task.h" +#include "bg.h" +#include "sound.h" +#include "constants/songs.h" + +static void Task_FieldPoisonEffect(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + + switch (data[0]) + { + case 0: + data[1] += 1; + if (data[1] > 4) + data[0]++; + break; + case 1: + data[1] -= 1; + if (data[1] == 0) + data[0]++; + break; + case 2: + DestroyTask(taskId); + return; + } + AdjustBgMosaic((u8)(((u8)data[1] << 4) | (u8)data[1]), 0); +} + +void FldEffPoison_Start(void) +{ + PlaySE(SE_DAUGI); + CreateTask(Task_FieldPoisonEffect, 80); +} + +bool32 FldEffPoison_IsActive(void) +{ + return FuncIsActiveTask(Task_FieldPoisonEffect); +} |