diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2019-07-04 19:31:07 -0400 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2019-07-04 19:31:07 -0400 |
commit | b3b439fd8ab05eed4be632e2f265b79f1ce2173e (patch) | |
tree | 74fc9f790ca59eaabe8edf37e3d1126dcf4cc02c | |
parent | 5bad031d18f1e0813e12680d4e257ebaa6f4a0e7 (diff) |
intro: through sub_80EE6A4
-rw-r--r-- | asm/intro.s | 415 | ||||
-rw-r--r-- | src/intro.c | 164 |
2 files changed, 162 insertions, 417 deletions
diff --git a/asm/intro.s b/asm/intro.s index d5ebd1f99..275119991 100644 --- a/asm/intro.s +++ b/asm/intro.s @@ -5,421 +5,6 @@ .text - thumb_func_start sub_80EE40C -sub_80EE40C: @ 80EE40C - push {r4,lr} - adds r4, r0, 0 - ldrh r1, [r4, 0x32] - movs r2, 0x32 - ldrsh r0, [r4, r2] - cmp r0, 0 - beq _080EE490 - subs r0, r1, 0x1 - strh r0, [r4, 0x32] - ldrh r0, [r4, 0x30] - adds r0, 0x1 - strh r0, [r4, 0x30] - lsls r0, 16 - asrs r0, 20 - strh r0, [r4, 0x22] - cmp r0, 0x56 - ble _080EE438 - movs r0, 0x4A - strh r0, [r4, 0x22] - movs r0, 0x94 - lsls r0, 3 - strh r0, [r4, 0x30] -_080EE438: - adds r0, r4, 0 - adds r0, 0x3F - ldrb r1, [r0] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - beq _080EE4D4 - movs r1, 0x2E - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _080EE46C - ldrh r0, [r4, 0x20] - adds r1, r0, 0 - adds r1, 0x1A - strh r1, [r4, 0x20] - lsls r0, r1, 16 - asrs r0, 16 - cmp r0, 0xBC - ble _080EE486 - movs r2, 0xBC - lsls r2, 1 - adds r0, r2, 0 - subs r0, r1 - strh r0, [r4, 0x20] - movs r0, 0x1 - b _080EE484 -_080EE46C: - ldrh r0, [r4, 0x20] - adds r1, r0, 0 - subs r1, 0x1A - strh r1, [r4, 0x20] - lsls r0, r1, 16 - asrs r0, 16 - cmp r0, 0x33 - bgt _080EE486 - movs r0, 0x68 - subs r0, r1 - strh r0, [r4, 0x20] - movs r0, 0 -_080EE484: - strh r0, [r4, 0x2E] -_080EE486: - adds r0, r4, 0 - movs r1, 0x1 - bl StartSpriteAnim - b _080EE4D4 -_080EE490: - movs r1, 0x34 - ldrsh r0, [r4, r1] - cmp r0, 0 - beq _080EE49E - adds r0, r4, 0 - bl DestroySprite -_080EE49E: - adds r0, r4, 0 - adds r0, 0x3F - ldrb r1, [r0] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - beq _080EE4B4 - adds r0, r4, 0 - movs r1, 0 - bl StartSpriteAnim -_080EE4B4: - ldrh r0, [r4, 0x30] - adds r0, 0x4 - strh r0, [r4, 0x30] - lsls r0, 16 - asrs r0, 20 - strh r0, [r4, 0x22] - ldrh r0, [r4, 0x36] - adds r0, 0x1 - strh r0, [r4, 0x36] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x32 - ble _080EE4D4 - adds r0, r4, 0 - bl DestroySprite -_080EE4D4: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80EE40C - - thumb_func_start sub_80EE4DC -sub_80EE4DC: @ 80EE4DC - push {lr} - adds r2, r0, 0 - adds r0, 0x3F - ldrb r1, [r0] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - beq _080EE4F2 - adds r0, r2, 0 - bl DestroySprite -_080EE4F2: - pop {r0} - bx r0 - thumb_func_end sub_80EE4DC - - thumb_func_start sub_80EE4F8 -sub_80EE4F8: @ 80EE4F8 - push {r4,lr} - adds r4, r0, 0 - ldr r0, _080EE520 @ =gUnknown_840BD88 - movs r1, 0 - movs r2, 0 - movs r3, 0x9 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - ldr r0, _080EE524 @ =gSprites - adds r1, r0 - str r1, [r4, 0x18] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080EE520: .4byte gUnknown_840BD88 -_080EE524: .4byte gSprites - thumb_func_end sub_80EE4F8 - - thumb_func_start sub_80EE528 -sub_80EE528: @ 80EE528 - push {r4-r6,lr} - mov r6, r9 - mov r5, r8 - push {r5,r6} - adds r4, r0, 0 - adds r0, r2, 0 - adds r5, r3, 0 - lsls r1, 16 - lsls r0, 16 - lsls r5, 16 - lsrs r5, 16 - lsrs r2, r1, 16 - mov r9, r2 - asrs r1, 16 - lsls r2, r1, 4 - movs r3, 0 - mov r8, r3 - strh r2, [r4, 0x2E] - lsrs r6, r0, 16 - asrs r0, 16 - subs r0, r1 - lsls r0, 4 - adds r1, r5, 0 - bl __divsi3 - strh r0, [r4, 0x30] - strh r5, [r4, 0x32] - strh r6, [r4, 0x34] - mov r0, r8 - strh r0, [r4, 0x36] - mov r2, r9 - strh r2, [r4, 0x20] - movs r0, 0x64 - strh r0, [r4, 0x22] - ldr r0, _080EE57C @ =sub_80EE580 - str r0, [r4, 0x1C] - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080EE57C: .4byte sub_80EE580 - thumb_func_end sub_80EE528 - - thumb_func_start sub_80EE580 -sub_80EE580: @ 80EE580 - push {r4,lr} - adds r2, r0, 0 - ldrh r0, [r2, 0x36] - adds r0, 0x1 - strh r0, [r2, 0x36] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x27 - ble _080EE5A0 - ldrh r1, [r2, 0x30] - movs r3, 0x30 - ldrsh r0, [r2, r3] - cmp r0, 0x1 - ble _080EE5A0 - subs r0, r1, 0x1 - strh r0, [r2, 0x30] -_080EE5A0: - ldrh r0, [r2, 0x30] - ldrh r4, [r2, 0x2E] - adds r0, r4 - strh r0, [r2, 0x2E] - lsls r0, 16 - asrs r0, 20 - strh r0, [r2, 0x20] - ldrh r3, [r2, 0x34] - movs r4, 0x34 - ldrsh r1, [r2, r4] - cmp r0, r1 - blt _080EE5BE - strh r3, [r2, 0x20] - ldr r0, _080EE5C4 @ =SpriteCallbackDummy - str r0, [r2, 0x1C] -_080EE5BE: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080EE5C4: .4byte SpriteCallbackDummy - thumb_func_end sub_80EE580 - - thumb_func_start sub_80EE5C8 -sub_80EE5C8: @ 80EE5C8 - push {lr} - movs r2, 0 - ldr r0, [r0, 0x18] - ldr r1, [r0, 0x1C] - ldr r0, _080EE5E0 @ =sub_80EE580 - cmp r1, r0 - bne _080EE5D8 - movs r2, 0x1 -_080EE5D8: - adds r0, r2, 0 - pop {r1} - bx r1 - .align 2, 0 -_080EE5E0: .4byte sub_80EE580 - thumb_func_end sub_80EE5C8 - - thumb_func_start sub_80EE5E4 -sub_80EE5E4: @ 80EE5E4 - push {r4,lr} - adds r4, r0, 0 - ldr r0, [r4, 0x18] - movs r1, 0x2 - bl StartSpriteAnim - ldr r0, [r4, 0x18] - movs r1, 0 - strh r1, [r0, 0x2E] - ldr r0, [r4, 0x18] - strh r1, [r0, 0x30] - ldr r1, [r4, 0x18] - movs r0, 0x3 - strh r0, [r1, 0x26] - ldr r1, [r4, 0x18] - ldr r0, _080EE60C @ =sub_80EE610 - str r0, [r1, 0x1C] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080EE60C: .4byte sub_80EE610 - thumb_func_end sub_80EE5E4 - - thumb_func_start sub_80EE610 -sub_80EE610: @ 80EE610 - push {r4,r5,lr} - adds r4, r0, 0 - movs r0, 0x2E - ldrsh r5, [r4, r0] - cmp r5, 0x1 - beq _080EE646 - cmp r5, 0x1 - bgt _080EE626 - cmp r5, 0 - beq _080EE62C - b _080EE69A -_080EE626: - cmp r5, 0x2 - beq _080EE65C - b _080EE69A -_080EE62C: - ldrh r0, [r4, 0x30] - adds r0, 0x1 - strh r0, [r4, 0x30] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x8 - ble _080EE69A - adds r0, r4, 0 - movs r1, 0x1 - bl StartSpriteAnim - strh r5, [r4, 0x26] - b _080EE654 -_080EE646: - movs r0, 0x21 - movs r1, 0x3F - movs r2, 0x1 - bl PlayCry3 - movs r0, 0 - strh r0, [r4, 0x30] -_080EE654: - ldrh r0, [r4, 0x2E] - adds r0, 0x1 - strh r0, [r4, 0x2E] - b _080EE69A -_080EE65C: - ldrh r0, [r4, 0x32] - adds r0, 0x1 - strh r0, [r4, 0x32] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x1 - ble _080EE67C - movs r0, 0 - strh r0, [r4, 0x32] - movs r1, 0 - movs r2, 0x26 - ldrsh r0, [r4, r2] - cmp r0, 0 - bne _080EE67A - movs r1, 0x1 -_080EE67A: - strh r1, [r4, 0x26] -_080EE67C: - ldrh r0, [r4, 0x30] - adds r0, 0x1 - strh r0, [r4, 0x30] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x30 - ble _080EE69A - adds r0, r4, 0 - movs r1, 0 - bl StartSpriteAnim - movs r0, 0 - strh r0, [r4, 0x26] - ldr r0, _080EE6A0 @ =SpriteCallbackDummy - str r0, [r4, 0x1C] -_080EE69A: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080EE6A0: .4byte SpriteCallbackDummy - thumb_func_end sub_80EE610 - - thumb_func_start sub_80EE6A4 -sub_80EE6A4: @ 80EE6A4 - push {r4,lr} - adds r4, r0, 0 - ldr r1, _080EE6F0 @ =gUnknown_203AB0A - movs r0, 0x10 - strh r0, [r1] - ldr r1, _080EE6F4 @ =gUnknown_203AB04 - movs r0, 0x3 - strh r0, [r1] - ldr r1, _080EE6F8 @ =gUnknown_203AB08 - movs r0, 0x5 - strh r0, [r1] - ldr r1, _080EE6FC @ =gUnknown_203AB06 - movs r0, 0 - strh r0, [r1] - ldr r0, [r4, 0x18] - movs r1, 0x2 - bl StartSpriteAnim - ldr r0, [r4, 0x18] - movs r1, 0 - strh r1, [r0, 0x2E] - ldr r0, [r4, 0x18] - strh r1, [r0, 0x30] - ldr r0, [r4, 0x18] - strh r1, [r0, 0x32] - ldr r0, [r4, 0x18] - strh r1, [r0, 0x34] - ldr r0, [r4, 0x18] - strh r1, [r0, 0x36] - ldr r1, [r4, 0x18] - movs r0, 0x28 - strh r0, [r1, 0x3C] - ldr r1, [r4, 0x18] - ldr r0, _080EE700 @ =sub_80EE704 - str r0, [r1, 0x1C] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080EE6F0: .4byte gUnknown_203AB0A -_080EE6F4: .4byte gUnknown_203AB04 -_080EE6F8: .4byte gUnknown_203AB08 -_080EE6FC: .4byte gUnknown_203AB06 -_080EE700: .4byte sub_80EE704 - thumb_func_end sub_80EE6A4 - thumb_func_start sub_80EE704 sub_80EE704: @ 80EE704 push {r4,r5,lr} diff --git a/src/intro.c b/src/intro.c index 79a1afba8..3e0b9e498 100644 --- a/src/intro.c +++ b/src/intro.c @@ -19,6 +19,7 @@ #include "util.h" #include "trig.h" #include "constants/songs.h" +#include "constants/species.h" struct IntroSequenceData { @@ -115,10 +116,13 @@ void sub_80EE350(struct Sprite * sprite); void sub_80EE40C(struct Sprite * sprite); void sub_80EE4DC(struct Sprite * sprite); void sub_80EE4F8(struct IntroSequenceData * ptr); -void sub_80EE528(struct Sprite * sprite, u16 a1, u16 a2, u16 a3); +void sub_80EE528(struct Sprite * sprite, s16 a1, s16 a2, u16 a3); +void sub_80EE580(struct Sprite * sprite); bool32 sub_80EE5C8(struct IntroSequenceData * ptr); void sub_80EE5E4(struct IntroSequenceData * ptr); +void sub_80EE610(struct Sprite * sprite); void sub_80EE6A4(struct IntroSequenceData * ptr); +void sub_80EE704(struct Sprite * sprite); bool8 sub_80EE850(struct IntroSequenceData * ptr); void sub_80EE8E4(struct Sprite * sprite); void sub_80EE970(struct Sprite * sprite, s16 a1, u16 a2, u8 a3); @@ -1758,10 +1762,166 @@ void sub_80EE350(struct Sprite * sprite) sprite->pos2.y = sprite->data[5] >> gUnknown_203AB1C; if (sprite->data[7] > gUnknown_203AB18) { - sprite->invisible = sprite->invisible ? FALSE : TRUE; + sprite->invisible = !sprite->invisible; if (sprite->data[7] > gUnknown_203AB1A) DestroySprite(sprite); } if (sprite->pos1.y + sprite->pos2.y < 0 || sprite->pos1.y + sprite->pos2.y > 160) DestroySprite(sprite); } + +void sub_80EE40C(struct Sprite * sprite) +{ + if (sprite->data[2]) + { + sprite->data[2]--; + sprite->data[1]++; + sprite->pos1.y = sprite->data[1] >> 4; + if (sprite->pos1.y > 0x56) + { + sprite->pos1.y = 0x4A; + sprite->data[1] = 0x4A0; + } + if (sprite->animEnded) + { + if (sprite->data[0] == 0) + { + sprite->pos1.x += 26; + if (sprite->pos1.x > 188) + { + sprite->pos1.x = 376 - sprite->pos1.x; + sprite->data[0] = 1; + } + } + else + { + sprite->pos1.x -= 26; + if (sprite->pos1.x < 52) + { + sprite->pos1.x = 104 - sprite->pos1.x; + sprite->data[0] = 0; + } + } + StartSpriteAnim(sprite, 1); + } + } + else + { + if (sprite->data[3]) + DestroySprite(sprite); + if (sprite->animEnded) + StartSpriteAnim(sprite, 0); + sprite->data[1] += 4; + sprite->pos1.y = sprite->data[1] >> 4; + sprite->data[4]++; + if (sprite->data[4] > 50) + DestroySprite(sprite); + } +} + +void sub_80EE4DC(struct Sprite * sprite) +{ + if (sprite->animEnded) + DestroySprite(sprite); +} + +void sub_80EE4F8(struct IntroSequenceData * this) +{ + u8 spriteId = CreateSprite(&gUnknown_840BD88, 0, 0, 9); + this->field_0018 = &gSprites[spriteId]; +} + +void sub_80EE528(struct Sprite * sprite, s16 a1, s16 a2, u16 a3) +{ + sprite->data[0] = a1 << 4; + sprite->data[1] = ((a2 - a1) << 4) / a3; + sprite->data[2] = a3; + sprite->data[3] = a2; + sprite->data[4] = 0; + sprite->pos1.x = a1; + sprite->pos1.y = 100; + sprite->callback = sub_80EE580; +} + +void sub_80EE580(struct Sprite * sprite) +{ + sprite->data[4]++; + if (sprite->data[4] >= 40) + { + if (sprite->data[1] > 1) + sprite->data[1]--; + } + sprite->data[0] += sprite->data[1]; + sprite->pos1.x = sprite->data[0] >> 4; + if (sprite->pos1.x >= sprite->data[3]) + { + sprite->pos1.x = sprite->data[3]; + sprite->callback = SpriteCallbackDummy; + } +} + +bool32 sub_80EE5C8(struct IntroSequenceData * ptr) +{ + return ptr->field_0018->callback == sub_80EE580 ? TRUE : FALSE; +} + +void sub_80EE5E4(struct IntroSequenceData * ptr) +{ + StartSpriteAnim(ptr->field_0018, 2); + ptr->field_0018->data[0] = 0; + ptr->field_0018->data[1] = 0; + ptr->field_0018->pos2.y = 3; + ptr->field_0018->callback = sub_80EE610; +} + +void sub_80EE610(struct Sprite * sprite) +{ + switch (sprite->data[0]) + { + case 0: + sprite->data[1]++; + if (sprite->data[1] > 8) + { + StartSpriteAnim(sprite, 1); + sprite->pos2.y = 0; + sprite->data[0]++; + } + break; + case 1: + PlayCry3(SPECIES_NIDORINO, 0x3F, 1); + sprite->data[1] = 0; + sprite->data[0]++; + break; + case 2: + sprite->data[2]++; + if (sprite->data[2] > 1) + { + sprite->data[2] = 0; + sprite->pos2.y = sprite->pos2.y == 0 ? 1 : 0; + } + sprite->data[1]++; + if (sprite->data[1] > 48) + { + StartSpriteAnim(sprite, 0); + sprite->pos2.y = 0; + sprite->callback = SpriteCallbackDummy; + } + break; + } +} + +void sub_80EE6A4(struct IntroSequenceData * ptr) +{ + gUnknown_203AB0A = 16; + gUnknown_203AB04 = 3; + gUnknown_203AB08 = 5; + gUnknown_203AB06 = 0; + StartSpriteAnim(ptr->field_0018, 2); + ptr->field_0018->data[0] = 0; + ptr->field_0018->data[1] = 0; + ptr->field_0018->data[2] = 0; + ptr->field_0018->data[3] = 0; + ptr->field_0018->data[4] = 0; + ptr->field_0018->data[7] = 40; + ptr->field_0018->callback = sub_80EE704; +} |