diff options
-rw-r--r-- | Makefile | 2 | ||||
-rw-r--r-- | asm/fldeff_emotion.s | 216 | ||||
-rw-r--r-- | ld_script.txt | 2 | ||||
-rw-r--r-- | src/fldeff_emotion.c | 82 |
4 files changed, 84 insertions, 218 deletions
@@ -52,7 +52,7 @@ asm/tileset.o asm/rom_8065394.o asm/rom_803D1FC.o asm/calculate_base_damage.o \ asm/rom_813BA94.o asm/rom_81258BC.o asm/mystery_event_script.o \ asm/field_effect_helpers.o asm/contest_ai.o asm/berry.o asm/rom_80B5054.o \ asm/party_menu.o asm/rom_806D7F8.o asm/wild_encounter.o asm/rom_80859BC.o \ -asm/field_effect.o asm/title_screen.o asm/weather.o asm/fldeff_emotion.o \ +asm/field_effect.o asm/title_screen.o asm/weather.o \ asm/rom_806936C.o asm/clear_save_data_menu.o asm/rom_8148B8C.o \ asm/mystery_event_menu.o asm/save_failed_screen.o asm/rom_81473B8.o \ asm/berry_tag_screen.o asm/lottery_corner.o \ diff --git a/asm/fldeff_emotion.s b/asm/fldeff_emotion.s deleted file mode 100644 index 11fa7df0f..000000000 --- a/asm/fldeff_emotion.s +++ /dev/null @@ -1,216 +0,0 @@ - .include "constants/gba_constants.s" - .include "constants/species_constants.s" - .include "asm/macros.s" - - .syntax unified - - .text - - thumb_func_start FldEff_ExclamationMarkIcon1 -FldEff_ExclamationMarkIcon1: @ 80847EC - push {lr} - ldr r0, _0808481C @ =gSpriteTemplate_839B510 - movs r1, 0 - movs r2, 0 - movs r3, 0x53 - bl CreateSpriteAtEnd - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0x40 - beq _08084814 - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _08084820 @ =gSprites - adds r0, r1 - movs r1, 0 - movs r2, 0 - bl sub_8084894 -_08084814: - movs r0, 0 - pop {r1} - bx r1 - .align 2, 0 -_0808481C: .4byte gSpriteTemplate_839B510 -_08084820: .4byte gSprites - thumb_func_end FldEff_ExclamationMarkIcon1 - - thumb_func_start FldEff_ExclamationMarkIcon2 -FldEff_ExclamationMarkIcon2: @ 8084824 - push {lr} - ldr r0, _08084854 @ =gSpriteTemplate_839B510 - movs r1, 0 - movs r2, 0 - movs r3, 0x52 - bl CreateSpriteAtEnd - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0x40 - beq _0808484C - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _08084858 @ =gSprites - adds r0, r1 - movs r1, 0x21 - movs r2, 0x1 - bl sub_8084894 -_0808484C: - movs r0, 0 - pop {r1} - bx r1 - .align 2, 0 -_08084854: .4byte gSpriteTemplate_839B510 -_08084858: .4byte gSprites - thumb_func_end FldEff_ExclamationMarkIcon2 - - thumb_func_start FldEff_HeartIcon -FldEff_HeartIcon: @ 808485C - push {lr} - ldr r0, _0808488C @ =gSpriteTemplate_839B528 - movs r1, 0 - movs r2, 0 - movs r3, 0x52 - bl CreateSpriteAtEnd - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0x40 - beq _08084884 - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _08084890 @ =gSprites - adds r0, r1 - movs r1, 0x2E - movs r2, 0 - bl sub_8084894 -_08084884: - movs r0, 0 - pop {r1} - bx r1 - .align 2, 0 -_0808488C: .4byte gSpriteTemplate_839B528 -_08084890: .4byte gSprites - thumb_func_end FldEff_HeartIcon - - thumb_func_start sub_8084894 -sub_8084894: @ 8084894 - push {r4,lr} - lsls r2, 24 - lsrs r2, 24 - ldrb r4, [r0, 0x5] - movs r3, 0xD - negs r3, r3 - ands r3, r4 - movs r4, 0x4 - orrs r3, r4 - strb r3, [r0, 0x5] - movs r3, 0x3E - adds r3, r0 - mov r12, r3 - ldrb r3, [r3] - movs r4, 0x2 - orrs r3, r4 - mov r4, r12 - strb r3, [r4] - ldr r4, _080848D8 @ =gUnknown_0202FF84 - ldr r3, [r4] - strh r3, [r0, 0x2E] - ldr r3, [r4, 0x4] - strh r3, [r0, 0x30] - ldr r3, [r4, 0x8] - strh r3, [r0, 0x32] - ldr r3, _080848DC @ =0x0000fffb - strh r3, [r0, 0x34] - strh r1, [r0, 0x3C] - adds r1, r2, 0 - bl StartSpriteAnim - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080848D8: .4byte gUnknown_0202FF84 -_080848DC: .4byte 0x0000fffb - thumb_func_end sub_8084894 - - thumb_func_start objc_exclamation_mark_probably -objc_exclamation_mark_probably: @ 80848E0 - push {r4,lr} - sub sp, 0x4 - adds r4, r0, 0 - ldrh r0, [r4, 0x2E] - lsls r0, 24 - lsrs r0, 24 - ldrh r1, [r4, 0x30] - lsls r1, 24 - lsrs r1, 24 - ldrh r2, [r4, 0x32] - lsls r2, 24 - lsrs r2, 24 - mov r3, sp - bl TryGetFieldObjectIdByLocalIdAndMap - lsls r0, 24 - cmp r0, 0 - bne _08084912 - adds r0, r4, 0 - adds r0, 0x3F - ldrb r1, [r0] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - beq _08084920 -_08084912: - ldrh r1, [r4, 0x3C] - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl FieldEffectStop - b _0808496E -_08084920: - ldr r2, _08084964 @ =gMapObjects - mov r0, sp - ldrb r1, [r0] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r0, [r0, 0x4] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - ldr r0, _08084968 @ =gSprites - adds r1, r0 - ldrh r3, [r4, 0x34] - ldrh r0, [r4, 0x36] - adds r2, r3, r0 - strh r2, [r4, 0x36] - ldrh r0, [r1, 0x20] - strh r0, [r4, 0x20] - ldrh r0, [r1, 0x22] - subs r0, 0x10 - strh r0, [r4, 0x22] - ldrh r0, [r1, 0x24] - strh r0, [r4, 0x24] - ldrh r0, [r1, 0x26] - adds r0, r2 - strh r0, [r4, 0x26] - lsls r2, 16 - asrs r2, 16 - cmp r2, 0 - beq _0808496C - adds r0, r3, 0x1 - strh r0, [r4, 0x34] - b _0808496E - .align 2, 0 -_08084964: .4byte gMapObjects -_08084968: .4byte gSprites -_0808496C: - strh r2, [r4, 0x34] -_0808496E: - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - thumb_func_end objc_exclamation_mark_probably - - .align 2, 0 @ Don't pad with nop. diff --git a/ld_script.txt b/ld_script.txt index f23683422..448c84f36 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -85,7 +85,7 @@ SECTIONS { asm/cable_club.o(.text); asm/mori_debug_menu.o(.text); asm/trainer_see.o(.text); - asm/fldeff_emotion.o(.text); + src/fldeff_emotion.o(.text); asm/wild_encounter.o(.text); asm/field_effect.o(.text); asm/rom_80859BC.o(.text); diff --git a/src/fldeff_emotion.c b/src/fldeff_emotion.c new file mode 100644 index 000000000..06eb7bd9e --- /dev/null +++ b/src/fldeff_emotion.c @@ -0,0 +1,82 @@ +#include "global.h" +#include "sprite.h" +#include "fieldmap.h" + +extern u32 gUnknown_0202FF84[]; + +extern struct SpriteTemplate gSpriteTemplate_839B510; +extern struct SpriteTemplate gSpriteTemplate_839B528; + +bool8 TryGetFieldObjectIdByLocalIdAndMap(u8, u8, u8, u8 *); + +void FieldEffectStop(struct Sprite *sprite, u16 a2); +void sub_8084894(struct Sprite *sprite, u16 a2, u8 a3); +void objc_exclamation_mark_probably(struct Sprite *sprite); + +u8 FldEff_ExclamationMarkIcon1(void) +{ + u8 spriteId = CreateSpriteAtEnd(&gSpriteTemplate_839B510, 0, 0, 0x53); + + if (spriteId != 64) + sub_8084894(&gSprites[spriteId], 0, 0); + + return 0; +} + +u8 FldEff_ExclamationMarkIcon2(void) +{ + u8 spriteId = CreateSpriteAtEnd(&gSpriteTemplate_839B510, 0, 0, 0x52); + + if (spriteId != 64) + sub_8084894(&gSprites[spriteId], 33, 1); + + return 0; +} + +u8 FldEff_HeartIcon(void) +{ + u8 spriteId = CreateSpriteAtEnd(&gSpriteTemplate_839B528, 0, 0, 0x52); + + if (spriteId != 64) + sub_8084894(&gSprites[spriteId], 46, 0); + + return 0; +} + +void sub_8084894(struct Sprite *sprite, u16 a2, u8 a3) +{ + sprite->oam.priority = 1; + sprite->coordOffsetEnabled = 1; + + sprite->data0 = gUnknown_0202FF84[0]; + sprite->data1 = gUnknown_0202FF84[1]; + sprite->data2 = gUnknown_0202FF84[2]; + sprite->data3 = -5; + sprite->data7 = a2; + + StartSpriteAnim(sprite, a3); +} + +void objc_exclamation_mark_probably(struct Sprite *sprite) +{ + u8 mapObjId; + + if (TryGetFieldObjectIdByLocalIdAndMap(sprite->data0, sprite->data1, sprite->data2, &mapObjId) + || sprite->animEnded) + { + FieldEffectStop(sprite, (u8)sprite->data7); + } + else + { + struct Sprite *mapObjSprite = &gSprites[gMapObjects[mapObjId].spriteId]; + sprite->data4 += sprite->data3; + sprite->pos1.x = mapObjSprite->pos1.x; + sprite->pos1.y = mapObjSprite->pos1.y - 16; + sprite->pos2.x = mapObjSprite->pos2.x; + sprite->pos2.y = mapObjSprite->pos2.y + sprite->data4; + if (sprite->data4) + sprite->data3++; + else + sprite->data3 = 0; + } +}
\ No newline at end of file |