diff options
-rwxr-xr-x | asm/bug.s | 552 | ||||
-rw-r--r-- | ld_script.txt | 1 | ||||
-rw-r--r-- | src/battle/anim/bug.c | 105 |
3 files changed, 382 insertions, 276 deletions
@@ -7,285 +7,285 @@ @ bug - thumb_func_start sub_80DC824 -sub_80DC824: @ 80DC824 - push {r4-r6,lr} - adds r6, r0, 0 - bl IsContest - lsls r0, 24 - cmp r0, 0 - beq _080DC850 - adds r0, r6, 0 - movs r1, 0x2 - bl StartSpriteAffineAnim - ldr r0, _080DC84C @ =gBattleAnimArgs - ldrh r1, [r0, 0x4] - negs r1, r1 - strh r1, [r0, 0x4] - ldrh r1, [r0] - negs r1, r1 - strh r1, [r0] - b _080DC880 - .align 2, 0 -_080DC84C: .4byte gBattleAnimArgs -_080DC850: - ldr r0, _080DC8E4 @ =gAnimBankTarget - ldrb r0, [r0] - bl GetBankSide - lsls r0, 24 - cmp r0, 0 - bne _080DC880 - adds r0, r6, 0 - movs r1, 0x1 - bl StartSpriteAffineAnim - ldr r1, _080DC8E8 @ =gBattleAnimArgs - ldrh r0, [r1, 0x2] - negs r0, r0 - strh r0, [r1, 0x2] - ldrh r0, [r1, 0x4] - negs r0, r0 - strh r0, [r1, 0x4] - ldrh r0, [r1, 0x6] - negs r0, r0 - strh r0, [r1, 0x6] - ldrh r0, [r1] - negs r0, r0 - strh r0, [r1] -_080DC880: - ldr r5, _080DC8E4 @ =gAnimBankTarget - ldrb r0, [r5] - movs r1, 0x2 - bl sub_8077EE4 - lsls r0, 24 - ldr r4, _080DC8E8 @ =gBattleAnimArgs - lsrs r0, 24 - ldrh r1, [r4] - adds r0, r1 - strh r0, [r6, 0x20] - ldrb r0, [r5] - movs r1, 0x3 - bl sub_8077EE4 - lsls r0, 24 - lsrs r0, 24 - ldrh r1, [r4, 0x2] - adds r0, r1 - strh r0, [r6, 0x22] - ldrh r0, [r4, 0x8] - strh r0, [r6, 0x2E] - ldrb r0, [r5] - movs r1, 0x2 - bl GetBankPosition - lsls r0, 24 - lsrs r0, 24 - ldrh r1, [r4, 0x4] - adds r0, r1 - strh r0, [r6, 0x32] - ldrb r0, [r5] - movs r1, 0x3 - bl GetBankPosition - lsls r0, 24 - lsrs r0, 24 - ldrh r4, [r4, 0x6] - adds r0, r4 - strh r0, [r6, 0x36] - ldr r0, _080DC8EC @ =sub_8078B34 - str r0, [r6, 0x1C] - ldr r1, _080DC8F0 @ =DestroyAnimSprite - adds r0, r6, 0 - bl StoreSpriteCallbackInData - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080DC8E4: .4byte gAnimBankTarget -_080DC8E8: .4byte gBattleAnimArgs -_080DC8EC: .4byte sub_8078B34 -_080DC8F0: .4byte DestroyAnimSprite - thumb_func_end sub_80DC824 +# thumb_func_start sub_80DC824 +# sub_80DC824: @ 80DC824 +# push {r4-r6,lr} +# adds r6, r0, 0 +# bl IsContest +# lsls r0, 24 +# cmp r0, 0 +# beq _080DC850 +# adds r0, r6, 0 +# movs r1, 0x2 +# bl StartSpriteAffineAnim +# ldr r0, _080DC84C @ =gBattleAnimArgs +# ldrh r1, [r0, 0x4] +# negs r1, r1 +# strh r1, [r0, 0x4] +# ldrh r1, [r0] +# negs r1, r1 +# strh r1, [r0] +# b _080DC880 +# .align 2, 0 +# _080DC84C: .4byte gBattleAnimArgs +# _080DC850: +# ldr r0, _080DC8E4 @ =gAnimBankTarget +# ldrb r0, [r0] +# bl GetBankSide +# lsls r0, 24 +# cmp r0, 0 +# bne _080DC880 +# adds r0, r6, 0 +# movs r1, 0x1 +# bl StartSpriteAffineAnim +# ldr r1, _080DC8E8 @ =gBattleAnimArgs +# ldrh r0, [r1, 0x2] +# negs r0, r0 +# strh r0, [r1, 0x2] +# ldrh r0, [r1, 0x4] +# negs r0, r0 +# strh r0, [r1, 0x4] +# ldrh r0, [r1, 0x6] +# negs r0, r0 +# strh r0, [r1, 0x6] +# ldrh r0, [r1] +# negs r0, r0 +# strh r0, [r1] +# _080DC880: +# ldr r5, _080DC8E4 @ =gAnimBankTarget +# ldrb r0, [r5] +# movs r1, 0x2 +# bl sub_8077EE4 +# lsls r0, 24 +# ldr r4, _080DC8E8 @ =gBattleAnimArgs +# lsrs r0, 24 +# ldrh r1, [r4] +# adds r0, r1 +# strh r0, [r6, 0x20] +# ldrb r0, [r5] +# movs r1, 0x3 +# bl sub_8077EE4 +# lsls r0, 24 +# lsrs r0, 24 +# ldrh r1, [r4, 0x2] +# adds r0, r1 +# strh r0, [r6, 0x22] +# ldrh r0, [r4, 0x8] +# strh r0, [r6, 0x2E] +# ldrb r0, [r5] +# movs r1, 0x2 +# bl GetBankPosition +# lsls r0, 24 +# lsrs r0, 24 +# ldrh r1, [r4, 0x4] +# adds r0, r1 +# strh r0, [r6, 0x32] +# ldrb r0, [r5] +# movs r1, 0x3 +# bl GetBankPosition +# lsls r0, 24 +# lsrs r0, 24 +# ldrh r4, [r4, 0x6] +# adds r0, r4 +# strh r0, [r6, 0x36] +# ldr r0, _080DC8EC @ =sub_8078B34 +# str r0, [r6, 0x1C] +# ldr r1, _080DC8F0 @ =DestroyAnimSprite +# adds r0, r6, 0 +# bl StoreSpriteCallbackInData +# pop {r4-r6} +# pop {r0} +# bx r0 +# .align 2, 0 +# _080DC8E4: .4byte gAnimBankTarget +# _080DC8E8: .4byte gBattleAnimArgs +# _080DC8EC: .4byte sub_8078B34 +# _080DC8F0: .4byte DestroyAnimSprite +# thumb_func_end sub_80DC824 - thumb_func_start sub_80DC8F4 -sub_80DC8F4: @ 80DC8F4 - push {r4-r6,lr} - adds r6, r0, 0 - bl IsContest - lsls r0, 24 - cmp r0, 0 - beq _080DC918 - ldr r1, _080DC914 @ =gBattleAnimArgs - ldrh r0, [r1] - negs r0, r0 - strh r0, [r1] - adds r0, r6, 0 - movs r1, 0x2 - bl StartSpriteAffineAnim - b _080DC934 - .align 2, 0 -_080DC914: .4byte gBattleAnimArgs -_080DC918: - ldr r0, _080DC990 @ =gAnimBankTarget - ldrb r0, [r0] - bl GetBankSide - lsls r0, 24 - cmp r0, 0 - bne _080DC934 - ldr r0, _080DC994 @ =gBattleAnimArgs - ldrh r1, [r0, 0x2] - negs r1, r1 - strh r1, [r0, 0x2] - ldrh r1, [r0] - negs r1, r1 - strh r1, [r0] -_080DC934: - ldr r5, _080DC990 @ =gAnimBankTarget - ldrb r0, [r5] - movs r1, 0x2 - bl sub_8077EE4 - lsls r0, 24 - ldr r4, _080DC994 @ =gBattleAnimArgs - lsrs r0, 24 - ldrh r1, [r4] - adds r0, r1 - strh r0, [r6, 0x20] - ldrb r0, [r5] - movs r1, 0x3 - bl sub_8077EE4 - lsls r0, 24 - lsrs r0, 24 - ldrh r1, [r4, 0x2] - adds r0, r1 - strh r0, [r6, 0x22] - ldrh r0, [r4, 0x4] - strh r0, [r6, 0x2E] - ldrb r0, [r5] - movs r1, 0x2 - bl GetBankPosition - lsls r0, 24 - lsrs r0, 24 - strh r0, [r6, 0x32] - ldrb r0, [r5] - movs r1, 0x3 - bl GetBankPosition - lsls r0, 24 - lsrs r0, 24 - strh r0, [r6, 0x36] - ldr r0, _080DC998 @ =sub_8078B34 - str r0, [r6, 0x1C] - ldr r1, _080DC99C @ =DestroyAnimSprite - adds r0, r6, 0 - bl StoreSpriteCallbackInData - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080DC990: .4byte gAnimBankTarget -_080DC994: .4byte gBattleAnimArgs -_080DC998: .4byte sub_8078B34 -_080DC99C: .4byte DestroyAnimSprite - thumb_func_end sub_80DC8F4 +# thumb_func_start sub_80DC8F4 +# sub_80DC8F4: @ 80DC8F4 +# push {r4-r6,lr} +# adds r6, r0, 0 +# bl IsContest +# lsls r0, 24 +# cmp r0, 0 +# beq _080DC918 +# ldr r1, _080DC914 @ =gBattleAnimArgs +# ldrh r0, [r1] +# negs r0, r0 +# strh r0, [r1] +# adds r0, r6, 0 +# movs r1, 0x2 +# bl StartSpriteAffineAnim +# b _080DC934 +# .align 2, 0 +# _080DC914: .4byte gBattleAnimArgs +# _080DC918: +# ldr r0, _080DC990 @ =gAnimBankTarget +# ldrb r0, [r0] +# bl GetBankSide +# lsls r0, 24 +# cmp r0, 0 +# bne _080DC934 +# ldr r0, _080DC994 @ =gBattleAnimArgs +# ldrh r1, [r0, 0x2] +# negs r1, r1 +# strh r1, [r0, 0x2] +# ldrh r1, [r0] +# negs r1, r1 +# strh r1, [r0] +# _080DC934: +# ldr r5, _080DC990 @ =gAnimBankTarget +# ldrb r0, [r5] +# movs r1, 0x2 +# bl sub_8077EE4 +# lsls r0, 24 +# ldr r4, _080DC994 @ =gBattleAnimArgs +# lsrs r0, 24 +# ldrh r1, [r4] +# adds r0, r1 +# strh r0, [r6, 0x20] +# ldrb r0, [r5] +# movs r1, 0x3 +# bl sub_8077EE4 +# lsls r0, 24 +# lsrs r0, 24 +# ldrh r1, [r4, 0x2] +# adds r0, r1 +# strh r0, [r6, 0x22] +# ldrh r0, [r4, 0x4] +# strh r0, [r6, 0x2E] +# ldrb r0, [r5] +# movs r1, 0x2 +# bl GetBankPosition +# lsls r0, 24 +# lsrs r0, 24 +# strh r0, [r6, 0x32] +# ldrb r0, [r5] +# movs r1, 0x3 +# bl GetBankPosition +# lsls r0, 24 +# lsrs r0, 24 +# strh r0, [r6, 0x36] +# ldr r0, _080DC998 @ =sub_8078B34 +# str r0, [r6, 0x1C] +# ldr r1, _080DC99C @ =DestroyAnimSprite +# adds r0, r6, 0 +# bl StoreSpriteCallbackInData +# pop {r4-r6} +# pop {r0} +# bx r0 +# .align 2, 0 +# _080DC990: .4byte gAnimBankTarget +# _080DC994: .4byte gBattleAnimArgs +# _080DC998: .4byte sub_8078B34 +# _080DC99C: .4byte DestroyAnimSprite +# thumb_func_end sub_80DC8F4 - thumb_func_start sub_80DC9A0 -sub_80DC9A0: @ 80DC9A0 - push {r4,r5,lr} - adds r5, r0, 0 - bl IsContest - lsls r0, 24 - cmp r0, 0 - beq _080DC9BC - ldr r0, _080DC9FC @ =gBattleAnimArgs - movs r2, 0x4 - ldrsh r1, [r0, r2] - lsrs r2, r1, 31 - adds r1, r2 - asrs r1, 1 - strh r1, [r0, 0x4] -_080DC9BC: - adds r0, r5, 0 - movs r1, 0x1 - bl sub_80787B0 - ldr r1, _080DC9FC @ =gBattleAnimArgs - ldrh r0, [r1, 0x4] - strh r0, [r5, 0x2E] - ldrh r0, [r5, 0x20] - strh r0, [r5, 0x30] - ldrh r0, [r5, 0x22] - strh r0, [r5, 0x34] - movs r2, 0x8 - ldrsh r0, [r1, r2] - cmp r0, 0 - bne _080DCA04 - ldr r4, _080DCA00 @ =gAnimBankTarget - ldrb r0, [r4] - movs r1, 0x2 - bl GetBankPosition - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x32] - ldrb r0, [r4] - movs r1, 0x3 - bl GetBankPosition - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x36] - b _080DCA16 - .align 2, 0 -_080DC9FC: .4byte gBattleAnimArgs -_080DCA00: .4byte gAnimBankTarget -_080DCA04: - ldr r0, _080DCA2C @ =gAnimBankTarget - ldrb r0, [r0] - adds r2, r5, 0 - adds r2, 0x32 - adds r3, r5, 0 - adds r3, 0x36 - movs r1, 0x1 - bl sub_807A3FC -_080DCA16: - adds r0, r5, 0 - bl sub_8078BD4 - ldr r0, _080DCA30 @ =gBattleAnimArgs - ldrh r0, [r0, 0x6] - strh r0, [r5, 0x38] - ldr r0, _080DCA34 @ =sub_80DCA38 - str r0, [r5, 0x1C] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080DCA2C: .4byte gAnimBankTarget -_080DCA30: .4byte gBattleAnimArgs -_080DCA34: .4byte sub_80DCA38 - thumb_func_end sub_80DC9A0 +# thumb_func_start sub_80DC9A0 +# sub_80DC9A0: @ 80DC9A0 +# push {r4,r5,lr} +# adds r5, r0, 0 +# bl IsContest +# lsls r0, 24 +# cmp r0, 0 +# beq _080DC9BC +# ldr r0, _080DC9FC @ =gBattleAnimArgs +# movs r2, 0x4 +# ldrsh r1, [r0, r2] +# lsrs r2, r1, 31 +# adds r1, r2 +# asrs r1, 1 +# strh r1, [r0, 0x4] +# _080DC9BC: +# adds r0, r5, 0 +# movs r1, 0x1 +# bl sub_80787B0 +# ldr r1, _080DC9FC @ =gBattleAnimArgs +# ldrh r0, [r1, 0x4] +# strh r0, [r5, 0x2E] +# ldrh r0, [r5, 0x20] +# strh r0, [r5, 0x30] +# ldrh r0, [r5, 0x22] +# strh r0, [r5, 0x34] +# movs r2, 0x8 +# ldrsh r0, [r1, r2] +# cmp r0, 0 +# bne _080DCA04 +# ldr r4, _080DCA00 @ =gAnimBankTarget +# ldrb r0, [r4] +# movs r1, 0x2 +# bl GetBankPosition +# lsls r0, 24 +# lsrs r0, 24 +# strh r0, [r5, 0x32] +# ldrb r0, [r4] +# movs r1, 0x3 +# bl GetBankPosition +# lsls r0, 24 +# lsrs r0, 24 +# strh r0, [r5, 0x36] +# b _080DCA16 +# .align 2, 0 +# _080DC9FC: .4byte gBattleAnimArgs +# _080DCA00: .4byte gAnimBankTarget +# _080DCA04: +# ldr r0, _080DCA2C @ =gAnimBankTarget +# ldrb r0, [r0] +# adds r2, r5, 0 +# adds r2, 0x32 +# adds r3, r5, 0 +# adds r3, 0x36 +# movs r1, 0x1 +# bl sub_807A3FC +# _080DCA16: +# adds r0, r5, 0 +# bl sub_8078BD4 +# ldr r0, _080DCA30 @ =gBattleAnimArgs +# ldrh r0, [r0, 0x6] +# strh r0, [r5, 0x38] +# ldr r0, _080DCA34 @ =sub_80DCA38 +# str r0, [r5, 0x1C] +# pop {r4,r5} +# pop {r0} +# bx r0 +# .align 2, 0 +# _080DCA2C: .4byte gAnimBankTarget +# _080DCA30: .4byte gBattleAnimArgs +# _080DCA34: .4byte sub_80DCA38 +# thumb_func_end sub_80DC9A0 - thumb_func_start sub_80DCA38 -sub_80DCA38: @ 80DCA38 - push {r4,lr} - adds r4, r0, 0 - bl sub_8078B5C - lsls r0, 24 - cmp r0, 0 - beq _080DCA4E - adds r0, r4, 0 - bl DestroyAnimSprite - b _080DCA6A -_080DCA4E: - movs r1, 0x3A - ldrsh r0, [r4, r1] - movs r2, 0x38 - ldrsh r1, [r4, r2] - bl Sin - ldrh r1, [r4, 0x24] - adds r0, r1 - strh r0, [r4, 0x24] - ldrh r0, [r4, 0x3A] - adds r0, 0xD - movs r1, 0xFF - ands r0, r1 - strh r0, [r4, 0x3A] -_080DCA6A: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80DCA38 +# thumb_func_start sub_80DCA38 +# sub_80DCA38: @ 80DCA38 +# push {r4,lr} +# adds r4, r0, 0 +# bl sub_8078B5C +# lsls r0, 24 +# cmp r0, 0 +# beq _080DCA4E +# adds r0, r4, 0 +# bl DestroyAnimSprite +# b _080DCA6A +# _080DCA4E: +# movs r1, 0x3A +# ldrsh r0, [r4, r1] +# movs r2, 0x38 +# ldrsh r1, [r4, r2] +# bl Sin +# ldrh r1, [r4, 0x24] +# adds r0, r1 +# strh r0, [r4, 0x24] +# ldrh r0, [r4, 0x3A] +# adds r0, 0xD +# movs r1, 0xFF +# ands r0, r1 +# strh r0, [r4, 0x3A] +# _080DCA6A: +# pop {r4} +# pop {r0} +# bx r0 +# thumb_func_end sub_80DCA38 thumb_func_start sub_80DCA70 sub_80DCA70: @ 80DCA70 diff --git a/ld_script.txt b/ld_script.txt index 47e8297b2..ba0705659 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -292,6 +292,7 @@ SECTIONS { src/battle/anim/poison.o(.text); asm/flying.o(.text); asm/psychic.o(.text); + src/battle/anim/bug.o(.text); asm/bug.o(.text); asm/rock.o(.text); asm/ghost.o(.text); diff --git a/src/battle/anim/bug.c b/src/battle/anim/bug.c new file mode 100644 index 000000000..e9372ed9e --- /dev/null +++ b/src/battle/anim/bug.c @@ -0,0 +1,105 @@ +#include "global.h" +#include "battle_anim.h" +#include "contest.h" +#include "rom_8077ABC.h" +#include "trig.h" +// #include "util.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gAnimBankAttacker; +extern u8 gAnimBankTarget; + +static void sub_80DCA38(struct Sprite *sprite); + +// used in Move_MEGAHORN +void sub_80DC824(struct Sprite *sprite) +{ + if (IsContest()) + { + StartSpriteAffineAnim(sprite, 2); + gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + gBattleAnimArgs[0] = -gBattleAnimArgs[0]; + } + else if (!GetBankSide(gAnimBankTarget)) + { + StartSpriteAffineAnim(sprite, 1); + gBattleAnimArgs[1] = -gBattleAnimArgs[1]; + gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + gBattleAnimArgs[3] = -gBattleAnimArgs[3]; + gBattleAnimArgs[0] = -gBattleAnimArgs[0]; + } + + sprite->pos1.x = sub_8077EE4(gAnimBankTarget, 2) + gBattleAnimArgs[0]; + sprite->pos1.y = sub_8077EE4(gAnimBankTarget, 3) + gBattleAnimArgs[1]; + sprite->data[0] = gBattleAnimArgs[4]; + + sprite->data[2] = GetBankPosition(gAnimBankTarget, 2) + gBattleAnimArgs[2]; + sprite->data[4] = GetBankPosition(gAnimBankTarget, 3) + gBattleAnimArgs[3]; + + sprite->callback = sub_8078B34; + StoreSpriteCallbackInData(sprite, DestroyAnimSprite); +} + +// used in Move_LEECH_LIFE +void sub_80DC8F4(struct Sprite *sprite) +{ + if (IsContest()) + { + gBattleAnimArgs[0] = -gBattleAnimArgs[0]; + StartSpriteAffineAnim(sprite, 2); + } + else if (!GetBankSide(gAnimBankTarget)) + { + gBattleAnimArgs[1] = -gBattleAnimArgs[1]; + gBattleAnimArgs[0] = -gBattleAnimArgs[0]; + } + + sprite->pos1.x = sub_8077EE4(gAnimBankTarget, 2) + gBattleAnimArgs[0]; + sprite->pos1.y = sub_8077EE4(gAnimBankTarget, 3) + gBattleAnimArgs[1]; + sprite->data[0] = gBattleAnimArgs[2]; + + sprite->data[2] = GetBankPosition(gAnimBankTarget, 2); + sprite->data[4] = GetBankPosition(gAnimBankTarget, 3); + + sprite->callback = sub_8078B34; + StoreSpriteCallbackInData(sprite, DestroyAnimSprite); +} + +// used in 2 moves: +// Move_STRING_SHOT, Move_SPIDER_WEB +void sub_80DC9A0(struct Sprite *sprite) +{ + if (IsContest()) + gBattleAnimArgs[2] /= 2; + + sub_80787B0(sprite, 1); + sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[1] = sprite->pos1.x; + sprite->data[3] = sprite->pos1.y; + + if (!gBattleAnimArgs[4]) + { + sprite->data[2] = GetBankPosition(gAnimBankTarget, 2); + sprite->data[4] = GetBankPosition(gAnimBankTarget, 3); + } + else + { + sub_807A3FC(gAnimBankTarget, 1, &sprite->data[2], &sprite->data[4]); + } + + sub_8078BD4(sprite); + sprite->data[5] = gBattleAnimArgs[3]; + sprite->callback = sub_80DCA38; +} + +static void sub_80DCA38(struct Sprite *sprite) +{ + if (sub_8078B5C(sprite)) + { + DestroyAnimSprite(sprite); + return; + } + + sprite->pos2.x += Sin(sprite->data[6], sprite->data[5]); + sprite->data[6] = (sprite->data[6] + 13) & 0xFF; +}
\ No newline at end of file |