diff options
-rw-r--r-- | asm/battle_message.s | 2403 | ||||
-rw-r--r-- | include/battle.h | 11 | ||||
-rw-r--r-- | include/battle_message.h | 5 | ||||
-rw-r--r-- | include/data2.h | 2 | ||||
-rw-r--r-- | ld_script.txt | 2 | ||||
-rw-r--r-- | src/battle_4.c | 9 | ||||
-rw-r--r-- | src/battle_message.c | 1064 |
7 files changed, 1080 insertions, 2416 deletions
diff --git a/asm/battle_message.s b/asm/battle_message.s deleted file mode 100644 index badbf2b7d..000000000 --- a/asm/battle_message.s +++ /dev/null @@ -1,2403 +0,0 @@ - .include "constants/gba_constants.inc" - .include "constants/species_constants.inc" - .include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start BufferStringBattle -BufferStringBattle: @ 8120AA8 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - lsls r0, 16 - lsrs r7, r0, 16 - movs r6, 0 - ldr r5, _08120B70 @ =gSelectedOrderFromParty - ldr r4, _08120B74 @ =gActiveBank - ldrb r1, [r4] - lsls r1, 9 - ldr r0, _08120B78 @ =gUnknown_02023A64 - adds r1, r0 - str r1, [r5] - ldr r2, _08120B7C @ =gLastUsedItem - ldrh r0, [r1, 0x4] - strh r0, [r2] - ldr r2, _08120B80 @ =gLastUsedAbility - ldrb r0, [r1, 0x6] - strb r0, [r2] - ldr r3, _08120B84 @ =0x02000000 - ldrb r0, [r1, 0x7] - mov r8, r0 - ldr r2, _08120B88 @ =0x00016003 - adds r0, r3, r2 - mov r2, r8 - strb r2, [r0] - ldrb r0, [r1, 0x8] - mov r8, r0 - ldr r2, _08120B8C @ =0x0001605e - adds r0, r3, r2 - mov r2, r8 - strb r2, [r0] - ldrb r0, [r1, 0x9] - mov r8, r0 - ldr r2, _08120B90 @ =0x000160c1 - adds r0, r3, r2 - mov r2, r8 - strb r2, [r0] - ldr r2, _08120B94 @ =gStringBank - ldrb r0, [r1, 0xA] - strb r0, [r2] - ldrb r1, [r1, 0xB] - ldr r2, _08120B98 @ =0x000160a0 - adds r0, r3, r2 - strb r1, [r0] - movs r2, 0 - mov r9, r3 - ldr r3, _08120B9C @ =gBattleTextBuff1 - mov r10, r3 - ldr r3, _08120BA0 @ =gAbilitiesPerBank -_08120B10: - adds r0, r2, r3 - ldr r1, [r5] - adds r1, 0xC - adds r1, r2 - ldrb r1, [r1] - strb r1, [r0] - adds r2, 0x1 - cmp r2, 0x3 - ble _08120B10 - movs r2, 0 - ldr r0, _08120B9C @ =gBattleTextBuff1 - mov r8, r0 - ldr r3, _08120B70 @ =gSelectedOrderFromParty - ldr r1, _08120BA4 @ =gBattleTextBuff2 - mov r12, r1 - ldr r5, _08120BA8 @ =gBattleTextBuff3 -_08120B30: - mov r0, r8 - adds r1, r2, r0 - ldr r0, [r3] - adds r0, 0x10 - adds r0, r2 - ldrb r0, [r0] - strb r0, [r1] - mov r0, r12 - adds r1, r2, r0 - ldr r0, [r3] - adds r0, 0x20 - adds r0, r2 - ldrb r0, [r0] - strb r0, [r1] - adds r1, r2, r5 - ldr r0, [r3] - adds r0, 0x30 - adds r0, r2 - ldrb r0, [r0] - strb r0, [r1] - adds r2, 0x1 - cmp r2, 0xF - ble _08120B30 - cmp r7, 0x5 - bls _08120B64 - b _08120F50 -_08120B64: - lsls r0, r7, 2 - ldr r1, _08120BAC @ =_08120BB0 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08120B70: .4byte gSelectedOrderFromParty -_08120B74: .4byte gActiveBank -_08120B78: .4byte gUnknown_02023A64 -_08120B7C: .4byte gLastUsedItem -_08120B80: .4byte gLastUsedAbility -_08120B84: .4byte 0x02000000 -_08120B88: .4byte 0x00016003 -_08120B8C: .4byte 0x0001605e -_08120B90: .4byte 0x000160c1 -_08120B94: .4byte gStringBank -_08120B98: .4byte 0x000160a0 -_08120B9C: .4byte gBattleTextBuff1 -_08120BA0: .4byte gAbilitiesPerBank -_08120BA4: .4byte gBattleTextBuff2 -_08120BA8: .4byte gBattleTextBuff3 -_08120BAC: .4byte _08120BB0 - .align 2, 0 -_08120BB0: - .4byte _08120BC8 - .4byte _08120C40 - .4byte _08120CCC - .4byte _08120D5C - .4byte _08120DE8 - .4byte _08120E50 -_08120BC8: - ldr r0, _08120BEC @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x8 - ands r0, r1 - cmp r0, 0 - beq _08120C00 - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _08120BF8 - movs r0, 0x40 - ands r0, r1 - ldr r6, _08120BF0 @ =gUnknown_084005C7 - cmp r0, 0 - bne _08120BE8 - b _08120F70 -_08120BE8: - ldr r6, _08120BF4 @ =gUnknown_084005DB - b _08120F70 - .align 2, 0 -_08120BEC: .4byte gBattleTypeFlags -_08120BF0: .4byte gUnknown_084005C7 -_08120BF4: .4byte gUnknown_084005DB -_08120BF8: - ldr r6, _08120BFC @ =gUnknown_084005AA - b _08120F70 - .align 2, 0 -_08120BFC: .4byte gUnknown_084005AA -_08120C00: - movs r0, 0x80 - lsls r0, 6 - ands r0, r1 - cmp r0, 0 - beq _08120C14 - ldr r6, _08120C10 @ =gUnknown_08400568 - b _08120F70 - .align 2, 0 -_08120C10: .4byte gUnknown_08400568 -_08120C14: - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _08120C24 - ldr r6, _08120C20 @ =gUnknown_08400590 - b _08120F70 - .align 2, 0 -_08120C20: .4byte gUnknown_08400590 -_08120C24: - movs r0, 0x80 - lsls r0, 2 - ands r0, r1 - ldr r6, _08120C38 @ =gUnknown_08400555 - cmp r0, 0 - bne _08120C32 - b _08120F70 -_08120C32: - ldr r6, _08120C3C @ =gUnknown_0840057B - b _08120F70 - .align 2, 0 -_08120C38: .4byte gUnknown_08400555 -_08120C3C: .4byte gUnknown_0840057B -_08120C40: - ldrb r0, [r4] - bl GetBankSide - lsls r0, 24 - cmp r0, 0 - bne _08120C7C - ldr r0, _08120C68 @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _08120C74 - movs r0, 0x40 - ands r0, r1 - ldr r6, _08120C6C @ =gUnknown_084006A4 - cmp r0, 0 - bne _08120C64 - b _08120F70 -_08120C64: - ldr r6, _08120C70 @ =gUnknown_084006F1 - b _08120F70 - .align 2, 0 -_08120C68: .4byte gBattleTypeFlags -_08120C6C: .4byte gUnknown_084006A4 -_08120C70: .4byte gUnknown_084006F1 -_08120C74: - ldr r6, _08120C78 @ =gUnknown_0840069C - b _08120F70 - .align 2, 0 -_08120C78: .4byte gUnknown_0840069C -_08120C7C: - ldr r0, _08120C94 @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _08120CB4 - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - beq _08120C9C - ldr r6, _08120C98 @ =gUnknown_0840065C - b _08120F70 - .align 2, 0 -_08120C94: .4byte gBattleTypeFlags -_08120C98: .4byte gUnknown_0840065C -_08120C9C: - movs r0, 0x2 - ands r0, r1 - ldr r6, _08120CAC @ =gUnknown_08400608 - cmp r0, 0 - bne _08120CA8 - b _08120F70 -_08120CA8: - ldr r6, _08120CB0 @ =gUnknown_08400645 - b _08120F70 - .align 2, 0 -_08120CAC: .4byte gUnknown_08400608 -_08120CB0: .4byte gUnknown_08400645 -_08120CB4: - movs r0, 0x2 - ands r0, r1 - ldr r6, _08120CC4 @ =gUnknown_084005F5 - cmp r0, 0 - bne _08120CC0 - b _08120F70 -_08120CC0: - ldr r6, _08120CC8 @ =gUnknown_08400635 - b _08120F70 - .align 2, 0 -_08120CC4: .4byte gUnknown_084005F5 -_08120CC8: .4byte gUnknown_08400635 -_08120CCC: - ldrb r0, [r4] - bl GetBankSide - lsls r0, 24 - cmp r0, 0 - bne _08120D24 - ldr r0, _08120CE8 @ =0x02000000 - ldr r1, _08120CEC @ =0x000160c1 - adds r0, r1 - ldrb r2, [r0] - cmp r2, 0 - bne _08120CF4 - ldr r6, _08120CF0 @ =gUnknown_08400709 - b _08120F70 - .align 2, 0 -_08120CE8: .4byte 0x02000000 -_08120CEC: .4byte 0x000160c1 -_08120CF0: .4byte gUnknown_08400709 -_08120CF4: - cmp r2, 0x1 - beq _08120D04 - ldr r0, _08120D08 @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _08120D10 -_08120D04: - ldr r6, _08120D0C @ =gUnknown_08400727 - b _08120F70 - .align 2, 0 -_08120D08: .4byte gBattleTypeFlags -_08120D0C: .4byte gUnknown_08400727 -_08120D10: - ldr r6, _08120D1C @ =gUnknown_08400749 - cmp r2, 0x2 - beq _08120D18 - b _08120F70 -_08120D18: - ldr r6, _08120D20 @ =gUnknown_08400736 - b _08120F70 - .align 2, 0 -_08120D1C: .4byte gUnknown_08400749 -_08120D20: .4byte gUnknown_08400736 -_08120D24: - ldr r0, _08120D44 @ =gTrainerBattleOpponent - ldrh r1, [r0] - movs r0, 0x80 - lsls r0, 4 - cmp r1, r0 - bne _08120D54 - ldr r0, _08120D48 @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x40 - ands r0, r1 - ldr r6, _08120D4C @ =gUnknown_08400771 - cmp r0, 0 - bne _08120D40 - b _08120F70 -_08120D40: - ldr r6, _08120D50 @ =gUnknown_08400781 - b _08120F70 - .align 2, 0 -_08120D44: .4byte gTrainerBattleOpponent -_08120D48: .4byte gBattleTypeFlags -_08120D4C: .4byte gUnknown_08400771 -_08120D50: .4byte gUnknown_08400781 -_08120D54: - ldr r6, _08120D58 @ =gUnknown_0840075E - b _08120F70 - .align 2, 0 -_08120D58: .4byte gUnknown_0840075E -_08120D5C: - ldr r0, _08120D88 @ =0x00016003 - add r0, r9 - ldrb r0, [r0] - bl GetBankSide - lsls r0, 24 - cmp r0, 0 - bne _08120DB8 - ldr r0, _08120D8C @ =0x000160c1 - add r0, r9 - ldrb r3, [r0] - cmp r3, 0 - beq _08120D82 - ldr r0, _08120D90 @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _08120D98 -_08120D82: - ldr r6, _08120D94 @ =gUnknown_084006B3 - b _08120F70 - .align 2, 0 -_08120D88: .4byte 0x00016003 -_08120D8C: .4byte 0x000160c1 -_08120D90: .4byte gBattleTypeFlags -_08120D94: .4byte gUnknown_084006B3 -_08120D98: - cmp r3, 0x1 - bne _08120DA4 - ldr r6, _08120DA0 @ =gUnknown_084006BB - b _08120F70 - .align 2, 0 -_08120DA0: .4byte gUnknown_084006BB -_08120DA4: - ldr r6, _08120DB0 @ =gUnknown_084006D5 - cmp r3, 0x2 - beq _08120DAC - b _08120F70 -_08120DAC: - ldr r6, _08120DB4 @ =gUnknown_084006C6 - b _08120F70 - .align 2, 0 -_08120DB0: .4byte gUnknown_084006D5 -_08120DB4: .4byte gUnknown_084006C6 -_08120DB8: - ldr r0, _08120DD4 @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _08120DE0 - movs r0, 0x40 - ands r0, r1 - ldr r6, _08120DD8 @ =gUnknown_0840067C - cmp r0, 0 - bne _08120DD0 - b _08120F70 -_08120DD0: - ldr r6, _08120DDC @ =gUnknown_0840068C - b _08120F70 - .align 2, 0 -_08120DD4: .4byte gBattleTypeFlags -_08120DD8: .4byte gUnknown_0840067C -_08120DDC: .4byte gUnknown_0840068C -_08120DE0: - ldr r6, _08120DE4 @ =gUnknown_08400622 - b _08120F70 - .align 2, 0 -_08120DE4: .4byte gUnknown_08400622 -_08120DE8: - mov r0, r10 - bl sub_8121D1C - ldr r0, _08120E14 @ =gSelectedOrderFromParty - ldr r2, [r0] - ldrh r1, [r2] - movs r0, 0xB1 - lsls r0, 1 - cmp r1, r0 - bls _08120E28 - ldr r0, _08120E18 @ =gBattleTextBuff2 - ldr r2, _08120E1C @ =gUnknown_08401674 - ldr r1, _08120E20 @ =0x02000000 - ldr r3, _08120E24 @ =0x000160a0 - adds r1, r3 - ldrb r1, [r1] - lsls r1, 2 - adds r1, r2 - ldr r1, [r1] - bl StringCopy - b _08120E38 - .align 2, 0 -_08120E14: .4byte gSelectedOrderFromParty -_08120E18: .4byte gBattleTextBuff2 -_08120E1C: .4byte gUnknown_08401674 -_08120E20: .4byte 0x02000000 -_08120E24: .4byte 0x000160a0 -_08120E28: - ldr r0, _08120E44 @ =gBattleTextBuff2 - ldrh r2, [r2] - movs r1, 0xD - muls r1, r2 - ldr r2, _08120E48 @ =gMoveNames - adds r1, r2 - bl StringCopy -_08120E38: - ldr r0, _08120E44 @ =gBattleTextBuff2 - bl sub_8121D74 - ldr r6, _08120E4C @ =gUnknown_084007BD - b _08120F70 - .align 2, 0 -_08120E44: .4byte gBattleTextBuff2 -_08120E48: .4byte gMoveNames -_08120E4C: .4byte gUnknown_084007BD -_08120E50: - ldr r5, _08120E90 @ =gBattleTextBuff1 - ldrb r1, [r5] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _08120EB8 - movs r0, 0x7F - ands r0, r1 - strb r0, [r5] - ldrb r0, [r4] - bl GetBankSide - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08120E7C - ldrb r1, [r5] - cmp r1, 0x3 - beq _08120E7C - movs r0, 0x3 - eors r0, r1 - strb r0, [r5] -_08120E7C: - ldr r0, _08120E90 @ =gBattleTextBuff1 - ldrb r0, [r0] - subs r0, 0x2 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bhi _08120E98 - ldr r6, _08120E94 @ =gUnknown_083FFEFC - b _08120F70 - .align 2, 0 -_08120E90: .4byte gBattleTextBuff1 -_08120E94: .4byte gUnknown_083FFEFC -_08120E98: - ldr r0, _08120EAC @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x40 - ands r0, r1 - ldr r6, _08120EB0 @ =gUnknown_083FFFEA - cmp r0, 0 - beq _08120F70 - ldr r6, _08120EB4 @ =gUnknown_083FFFF7 - b _08120F70 - .align 2, 0 -_08120EAC: .4byte gBattleTypeFlags -_08120EB0: .4byte gUnknown_083FFFEA -_08120EB4: .4byte gUnknown_083FFFF7 -_08120EB8: - ldrb r0, [r4] - bl GetBankSide - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08120ED2 - ldrb r1, [r5] - cmp r1, 0x3 - beq _08120ED2 - movs r0, 0x3 - eors r0, r1 - strb r0, [r5] -_08120ED2: - ldr r0, _08120EF0 @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - beq _08120F18 - ldr r0, _08120EF4 @ =gBattleTextBuff1 - ldrb r0, [r0] - cmp r0, 0x2 - beq _08120F08 - cmp r0, 0x2 - bgt _08120EF8 - cmp r0, 0x1 - beq _08120EFE - b _08120F70 - .align 2, 0 -_08120EF0: .4byte gBattleTypeFlags -_08120EF4: .4byte gBattleTextBuff1 -_08120EF8: - cmp r0, 0x3 - beq _08120F10 - b _08120F70 -_08120EFE: - ldr r6, _08120F04 @ =gUnknown_083FFF6A - b _08120F70 - .align 2, 0 -_08120F04: .4byte gUnknown_083FFF6A -_08120F08: - ldr r6, _08120F0C @ =gUnknown_083FFF99 - b _08120F70 - .align 2, 0 -_08120F0C: .4byte gUnknown_083FFF99 -_08120F10: - ldr r6, _08120F14 @ =gUnknown_083FFFCB - b _08120F70 - .align 2, 0 -_08120F14: .4byte gUnknown_083FFFCB -_08120F18: - ldr r0, _08120F2C @ =gBattleTextBuff1 - ldrb r0, [r0] - cmp r0, 0x2 - beq _08120F40 - cmp r0, 0x2 - bgt _08120F30 - cmp r0, 0x1 - beq _08120F36 - b _08120F70 - .align 2, 0 -_08120F2C: .4byte gBattleTextBuff1 -_08120F30: - cmp r0, 0x3 - beq _08120F48 - b _08120F70 -_08120F36: - ldr r6, _08120F3C @ =gUnknown_083FFF56 - b _08120F70 - .align 2, 0 -_08120F3C: .4byte gUnknown_083FFF56 -_08120F40: - ldr r6, _08120F44 @ =gUnknown_083FFF81 - b _08120F70 - .align 2, 0 -_08120F44: .4byte gUnknown_083FFF81 -_08120F48: - ldr r6, _08120F4C @ =gUnknown_083FFFB3 - b _08120F70 - .align 2, 0 -_08120F4C: .4byte gUnknown_083FFFB3 -_08120F50: - movs r0, 0xB5 - lsls r0, 1 - cmp r7, r0 - bls _08120F64 - ldr r1, _08120F60 @ =gDisplayedStringBattle - movs r0, 0xFF - strb r0, [r1] - b _08120F76 - .align 2, 0 -_08120F60: .4byte gDisplayedStringBattle -_08120F64: - ldr r1, _08120F84 @ =gBattleStringsTable - adds r0, r7, 0 - subs r0, 0xC - lsls r0, 2 - adds r0, r1 - ldr r6, [r0] -_08120F70: - adds r0, r6, 0 - bl StrCpyDecodeToDisplayedStringBattle -_08120F76: - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08120F84: .4byte gBattleStringsTable - thumb_func_end BufferStringBattle - - thumb_func_start StrCpyDecodeToDisplayedStringBattle -StrCpyDecodeToDisplayedStringBattle: @ 8120F88 - push {lr} - ldr r1, _08120F94 @ =gDisplayedStringBattle - bl StrCpyDecodeBattle - pop {r1} - bx r1 - .align 2, 0 -_08120F94: .4byte gDisplayedStringBattle - thumb_func_end StrCpyDecodeToDisplayedStringBattle - - thumb_func_start sub_8120F98 -sub_8120F98: @ 8120F98 - push {r4,r5,lr} - sub sp, 0x8 - adds r4, r0, 0 - ldr r1, _08120FB0 @ =gUnknown_084017A8 - mov r0, sp - movs r2, 0x8 - bl memcpy - mov r2, sp - movs r3, 0 - b _08120FC0 - .align 2, 0 -_08120FB0: .4byte gUnknown_084017A8 -_08120FB4: - strb r1, [r2] - adds r4, 0x1 - adds r2, 0x1 - adds r3, 0x1 - cmp r3, 0x7 - bhi _08120FC8 -_08120FC0: - ldrb r1, [r4] - adds r0, r1, 0 - cmp r0, 0xFF - bne _08120FB4 -_08120FC8: - ldr r5, [sp] - ldr r4, [sp, 0x4] - movs r3, 0 - ldr r2, _08120FE4 @ =gUnknown_081FA6D4 -_08120FD0: - ldr r1, [r2] - ldr r0, [r1] - cmp r5, r0 - bne _08120FE8 - ldr r0, [r1, 0x4] - cmp r4, r0 - bne _08120FE8 - ldr r0, [r2, 0x4] - b _08120FF2 - .align 2, 0 -_08120FE4: .4byte gUnknown_081FA6D4 -_08120FE8: - adds r2, 0x8 - adds r3, 0x1 - cmp r3, 0x6 - bls _08120FD0 - movs r0, 0 -_08120FF2: - add sp, 0x8 - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_8120F98 - - thumb_func_start StrCpyDecodeBattle -StrCpyDecodeBattle: @ 8120FFC - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0xC - mov r9, r0 - mov r8, r1 - movs r6, 0 - movs r4, 0 - bl GetMultiplayerId - lsls r0, 24 - lsrs r7, r0, 24 - mov r0, r9 - ldrb r1, [r0] - bl _08121A40 -_0812101E: - cmp r1, 0xFD - beq _08121026 - bl _08121A30 -_08121026: - movs r1, 0x1 - add r9, r1 - mov r2, r9 - ldrb r0, [r2] - cmp r0, 0x2A - bls _08121036 - bl _081219E6 -_08121036: - lsls r0, 2 - ldr r1, _08121040 @ =_08121044 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08121040: .4byte _08121044 - .align 2, 0 -_08121044: - .4byte _081210F0 - .4byte _0812111E - .4byte _0812115A - .4byte _08121180 - .4byte _081211A4 - .4byte _081211C8 - .4byte _081211EC - .4byte _08121218 - .4byte _08121248 - .4byte _08121278 - .4byte _081212A8 - .4byte _0812133C - .4byte _081213A8 - .4byte _0812141C - .4byte _08121490 - .4byte _08121504 - .4byte _08121578 - .4byte _081215F8 - .4byte _08121620 - .4byte _08121660 - .4byte _081216EC - .4byte _081216F4 - .4byte _08121704 - .4byte _08121714 - .4byte _0812172C - .4byte _0812174C - .4byte _081217C0 - .4byte _08121830 - .4byte _08121840 - .4byte _08121854 - .4byte _08121868 - .4byte _0812188C - .4byte _081218B0 - .4byte _081218B8 - .4byte _081218C0 - .4byte _0812195C - .4byte _081219A4 - .4byte _081219AC - .4byte _0812197C - .4byte _08121984 - .4byte _081219CC - .4byte _081219D4 - .4byte _08121134 -_081210F0: - ldr r5, _08121100 @ =gBattleTextBuff1 - ldrb r0, [r5] - cmp r0, 0xFD - bne _08121108 - ldr r4, _08121104 @ =gStringVar1 - adds r0, r5, 0 - b _08121140 - .align 2, 0 -_08121100: .4byte gBattleTextBuff1 -_08121104: .4byte gStringVar1 -_08121108: - adds r0, r5, 0 - bl sub_8120F98 - adds r4, r0, 0 - cmp r4, 0 - beq _08121118 - bl _081219E6 -_08121118: - adds r4, r5, 0 - bl _081219E6 -_0812111E: - ldr r1, _0812112C @ =gBattleTextBuff2 - ldrb r0, [r1] - cmp r0, 0xFD - bne _08121154 - ldr r4, _08121130 @ =gStringVar2 - b _0812113E - .align 2, 0 -_0812112C: .4byte gBattleTextBuff2 -_08121130: .4byte gStringVar2 -_08121134: - ldr r1, _0812114C @ =gBattleTextBuff3 - ldrb r0, [r1] - cmp r0, 0xFD - bne _08121154 - ldr r4, _08121150 @ =gStringVar3 -_0812113E: - adds r0, r1, 0 -_08121140: - adds r1, r4, 0 - bl sub_8121A68 - bl _081219E6 - .align 2, 0 -_0812114C: .4byte gBattleTextBuff3 -_08121150: .4byte gStringVar3 -_08121154: - adds r4, r1, 0 - bl _081219E6 -_0812115A: - movs r0, 0 - bl GetBankByPlayerAI - ldr r1, _08121178 @ =gBattlePartyID - lsls r0, 24 - lsrs r0, 23 - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _0812117C @ =gPlayerParty - adds r0, r1 - bl _0812190E - .align 2, 0 -_08121178: .4byte gBattlePartyID -_0812117C: .4byte gPlayerParty -_08121180: - movs r0, 0x1 - bl GetBankByPlayerAI - ldr r1, _0812119C @ =gBattlePartyID - lsls r0, 24 - lsrs r0, 23 - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _081211A0 @ =gEnemyParty - adds r0, r1 - b _0812190E - .align 2, 0 -_0812119C: .4byte gBattlePartyID -_081211A0: .4byte gEnemyParty -_081211A4: - movs r0, 0x2 - bl GetBankByPlayerAI - ldr r1, _081211C0 @ =gBattlePartyID - lsls r0, 24 - lsrs r0, 23 - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _081211C4 @ =gPlayerParty - adds r0, r1 - b _0812190E - .align 2, 0 -_081211C0: .4byte gBattlePartyID -_081211C4: .4byte gPlayerParty -_081211C8: - movs r0, 0x3 - bl GetBankByPlayerAI - ldr r1, _081211E4 @ =gBattlePartyID - lsls r0, 24 - lsrs r0, 23 - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _081211E8 @ =gEnemyParty - adds r0, r1 - b _0812190E - .align 2, 0 -_081211E4: .4byte gBattlePartyID -_081211E8: .4byte gEnemyParty -_081211EC: - ldr r2, _0812120C @ =gBattlePartyID - ldr r1, _08121210 @ =gLinkPlayers - lsls r0, r7, 3 - subs r0, r7 - lsls r0, 2 - adds r0, r1 - ldrh r0, [r0, 0x18] - lsls r0, 1 - adds r0, r2 - ldrh r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _08121214 @ =gPlayerParty - adds r0, r1 - b _0812190E - .align 2, 0 -_0812120C: .4byte gBattlePartyID -_08121210: .4byte gLinkPlayers -_08121214: .4byte gPlayerParty -_08121218: - ldr r2, _0812123C @ =gBattlePartyID - ldr r1, _08121240 @ =gLinkPlayers - lsls r0, r7, 3 - subs r0, r7 - lsls r0, 2 - adds r0, r1 - ldrh r1, [r0, 0x18] - movs r0, 0x1 - eors r0, r1 - lsls r0, 1 - adds r0, r2 - ldrh r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _08121244 @ =gEnemyParty - adds r0, r1 - b _0812190E - .align 2, 0 -_0812123C: .4byte gBattlePartyID -_08121240: .4byte gLinkPlayers -_08121244: .4byte gEnemyParty -_08121248: - ldr r2, _0812126C @ =gBattlePartyID - ldr r1, _08121270 @ =gLinkPlayers - lsls r0, r7, 3 - subs r0, r7 - lsls r0, 2 - adds r0, r1 - ldrh r1, [r0, 0x18] - movs r0, 0x2 - eors r0, r1 - lsls r0, 1 - adds r0, r2 - ldrh r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _08121274 @ =gPlayerParty - adds r0, r1 - b _0812190E - .align 2, 0 -_0812126C: .4byte gBattlePartyID -_08121270: .4byte gLinkPlayers -_08121274: .4byte gPlayerParty -_08121278: - ldr r2, _0812129C @ =gBattlePartyID - ldr r1, _081212A0 @ =gLinkPlayers - lsls r0, r7, 3 - subs r0, r7 - lsls r0, 2 - adds r0, r1 - ldrh r1, [r0, 0x18] - movs r0, 0x3 - eors r0, r1 - lsls r0, 1 - adds r0, r2 - ldrh r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _081212A4 @ =gEnemyParty - adds r0, r1 - b _0812190E - .align 2, 0 -_0812129C: .4byte gBattlePartyID -_081212A0: .4byte gLinkPlayers -_081212A4: .4byte gEnemyParty -_081212A8: - ldr r4, _081212CC @ =gBankAttacker - ldrb r0, [r4] - bl GetBankSide - lsls r0, 24 - adds r2, r4, 0 - cmp r0, 0 - beq _0812131C - ldr r0, _081212D0 @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x8 - ands r0, r1 - ldr r4, _081212D4 @ =gUnknown_08400791 - cmp r0, 0 - beq _081212E6 - ldr r4, _081212D8 @ =gUnknown_08400797 - b _081212E6 - .align 2, 0 -_081212CC: .4byte gBankAttacker -_081212D0: .4byte gBattleTypeFlags -_081212D4: .4byte gUnknown_08400791 -_081212D8: .4byte gUnknown_08400797 -_081212DC: - mov r3, r8 - adds r0, r3, r6 - strb r1, [r0] - adds r6, 0x1 - adds r4, 0x1 -_081212E6: - ldrb r1, [r4] - adds r0, r1, 0 - cmp r0, 0xFF - bne _081212DC - ldrb r0, [r2] - bl GetBankIdentity - adds r1, r0, 0 - movs r0, 0x1 - ands r0, r1 - bl GetBankByPlayerAI - ldr r1, _08121314 @ =gBattlePartyID - lsls r0, 24 - lsrs r0, 23 - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _08121318 @ =gEnemyParty - adds r0, r1 - b _0812190E - .align 2, 0 -_08121314: .4byte gBattlePartyID -_08121318: .4byte gEnemyParty -_0812131C: - ldrb r0, [r2] - bl GetBankIdentity - adds r1, r0, 0 - movs r0, 0x1 - ands r0, r1 - bl GetBankByPlayerAI - ldr r1, _08121338 @ =gBattlePartyID - lsls r0, 24 - lsrs r0, 23 - adds r0, r1 - ldrh r1, [r0] - b _0812193A - .align 2, 0 -_08121338: .4byte gBattlePartyID -_0812133C: - ldr r4, _08121370 @ =gBankAttacker - ldrb r0, [r4] - bl GetBankSide - lsls r0, 24 - cmp r0, 0 - bne _0812137C - ldrb r0, [r4] - bl GetBankIdentity - adds r1, r0, 0 - movs r0, 0x1 - ands r0, r1 - bl GetBankByPlayerAI - ldr r1, _08121374 @ =gBattlePartyID - lsls r0, 24 - lsrs r0, 23 - adds r0, 0x4 - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _08121378 @ =gPlayerParty - adds r0, r1 - b _0812190E - .align 2, 0 -_08121370: .4byte gBankAttacker -_08121374: .4byte gBattlePartyID -_08121378: .4byte gPlayerParty -_0812137C: - ldrb r0, [r4] - bl GetBankIdentity - adds r1, r0, 0 - movs r0, 0x1 - ands r0, r1 - bl GetBankByPlayerAI - ldr r1, _081213A0 @ =gBattlePartyID - lsls r0, 24 - lsrs r0, 23 - adds r0, 0x4 - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _081213A4 @ =gEnemyParty - b _08121940 - .align 2, 0 -_081213A0: .4byte gBattlePartyID -_081213A4: .4byte gEnemyParty -_081213A8: - ldr r5, _081213F4 @ =gBankAttacker - ldrb r0, [r5] - bl GetBankSide - lsls r0, 24 - cmp r0, 0 - beq _0812140C - ldr r0, _081213F8 @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x8 - ands r0, r1 - ldr r4, _081213FC @ =gUnknown_08400791 - cmp r0, 0 - beq _081213C6 - ldr r4, _08121400 @ =gUnknown_08400797 -_081213C6: - ldrb r1, [r4] - adds r0, r1, 0 - ldr r3, _08121404 @ =gBattlePartyID - ldr r2, _08121408 @ =gEnemyParty - mov r12, r2 - adds r2, r5, 0 - cmp r0, 0xFF - beq _081213E8 -_081213D6: - mov r5, r8 - adds r0, r5, r6 - strb r1, [r0] - adds r6, 0x1 - adds r4, 0x1 - ldrb r1, [r4] - adds r0, r1, 0 - cmp r0, 0xFF - bne _081213D6 -_081213E8: - ldrb r0, [r2] - lsls r0, 1 - adds r0, r3 - ldrh r1, [r0] - b _08121908 - .align 2, 0 -_081213F4: .4byte gBankAttacker -_081213F8: .4byte gBattleTypeFlags -_081213FC: .4byte gUnknown_08400791 -_08121400: .4byte gUnknown_08400797 -_08121404: .4byte gBattlePartyID -_08121408: .4byte gEnemyParty -_0812140C: - ldr r1, _08121418 @ =gBattlePartyID - ldrb r0, [r5] - lsls r0, 1 - adds r0, r1 - ldrh r1, [r0] - b _0812193A - .align 2, 0 -_08121418: .4byte gBattlePartyID -_0812141C: - ldr r5, _08121468 @ =gBankTarget - ldrb r0, [r5] - bl GetBankSide - lsls r0, 24 - cmp r0, 0 - beq _08121480 - ldr r0, _0812146C @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x8 - ands r0, r1 - ldr r4, _08121470 @ =gUnknown_08400791 - cmp r0, 0 - beq _0812143A - ldr r4, _08121474 @ =gUnknown_08400797 -_0812143A: - ldrb r1, [r4] - adds r0, r1, 0 - ldr r3, _08121478 @ =gBattlePartyID - ldr r2, _0812147C @ =gEnemyParty - mov r12, r2 - adds r2, r5, 0 - cmp r0, 0xFF - beq _0812145C -_0812144A: - mov r5, r8 - adds r0, r5, r6 - strb r1, [r0] - adds r6, 0x1 - adds r4, 0x1 - ldrb r1, [r4] - adds r0, r1, 0 - cmp r0, 0xFF - bne _0812144A -_0812145C: - ldrb r0, [r2] - lsls r0, 1 - adds r0, r3 - ldrh r1, [r0] - b _08121908 - .align 2, 0 -_08121468: .4byte gBankTarget -_0812146C: .4byte gBattleTypeFlags -_08121470: .4byte gUnknown_08400791 -_08121474: .4byte gUnknown_08400797 -_08121478: .4byte gBattlePartyID -_0812147C: .4byte gEnemyParty -_08121480: - ldr r1, _0812148C @ =gBattlePartyID - ldrb r0, [r5] - lsls r0, 1 - adds r0, r1 - ldrh r1, [r0] - b _0812193A - .align 2, 0 -_0812148C: .4byte gBattlePartyID -_08121490: - ldr r5, _081214DC @ =gEffectBank - ldrb r0, [r5] - bl GetBankSide - lsls r0, 24 - cmp r0, 0 - beq _081214F4 - ldr r0, _081214E0 @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x8 - ands r0, r1 - ldr r4, _081214E4 @ =gUnknown_08400791 - cmp r0, 0 - beq _081214AE - ldr r4, _081214E8 @ =gUnknown_08400797 -_081214AE: - ldrb r1, [r4] - adds r0, r1, 0 - ldr r3, _081214EC @ =gBattlePartyID - ldr r2, _081214F0 @ =gEnemyParty - mov r12, r2 - adds r2, r5, 0 - cmp r0, 0xFF - beq _081214D0 -_081214BE: - mov r5, r8 - adds r0, r5, r6 - strb r1, [r0] - adds r6, 0x1 - adds r4, 0x1 - ldrb r1, [r4] - adds r0, r1, 0 - cmp r0, 0xFF - bne _081214BE -_081214D0: - ldrb r0, [r2] - lsls r0, 1 - adds r0, r3 - ldrh r1, [r0] - b _08121908 - .align 2, 0 -_081214DC: .4byte gEffectBank -_081214E0: .4byte gBattleTypeFlags -_081214E4: .4byte gUnknown_08400791 -_081214E8: .4byte gUnknown_08400797 -_081214EC: .4byte gBattlePartyID -_081214F0: .4byte gEnemyParty -_081214F4: - ldr r1, _08121500 @ =gBattlePartyID - ldrb r0, [r5] - lsls r0, 1 - adds r0, r1 - ldrh r1, [r0] - b _0812193A - .align 2, 0 -_08121500: .4byte gBattlePartyID -_08121504: - ldr r5, _08121550 @ =gActiveBank - ldrb r0, [r5] - bl GetBankSide - lsls r0, 24 - cmp r0, 0 - beq _08121568 - ldr r0, _08121554 @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x8 - ands r0, r1 - ldr r4, _08121558 @ =gUnknown_08400791 - cmp r0, 0 - beq _08121522 - ldr r4, _0812155C @ =gUnknown_08400797 -_08121522: - ldrb r1, [r4] - adds r0, r1, 0 - ldr r3, _08121560 @ =gBattlePartyID - ldr r2, _08121564 @ =gEnemyParty - mov r12, r2 - adds r2, r5, 0 - cmp r0, 0xFF - beq _08121544 -_08121532: - mov r5, r8 - adds r0, r5, r6 - strb r1, [r0] - adds r6, 0x1 - adds r4, 0x1 - ldrb r1, [r4] - adds r0, r1, 0 - cmp r0, 0xFF - bne _08121532 -_08121544: - ldrb r0, [r2] - lsls r0, 1 - adds r0, r3 - ldrh r1, [r0] - b _08121908 - .align 2, 0 -_08121550: .4byte gActiveBank -_08121554: .4byte gBattleTypeFlags -_08121558: .4byte gUnknown_08400791 -_0812155C: .4byte gUnknown_08400797 -_08121560: .4byte gBattlePartyID -_08121564: .4byte gEnemyParty -_08121568: - ldr r1, _08121574 @ =gBattlePartyID - ldrb r0, [r5] - lsls r0, 1 - adds r0, r1 - ldrh r1, [r0] - b _0812193A - .align 2, 0 -_08121574: .4byte gBattlePartyID -_08121578: - ldr r4, _081215CC @ =0x02000000 - ldr r0, _081215D0 @ =0x00016003 - adds r5, r4, r0 - ldrb r0, [r5] - bl GetBankSide - lsls r0, 24 - adds r2, r4, 0 - cmp r0, 0 - beq _081215E8 - ldr r0, _081215D4 @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x8 - ands r0, r1 - ldr r4, _081215D8 @ =gUnknown_08400791 - cmp r0, 0 - beq _0812159C - ldr r4, _081215DC @ =gUnknown_08400797 -_0812159C: - ldrb r1, [r4] - adds r0, r1, 0 - ldr r3, _081215E0 @ =gBattlePartyID - ldr r5, _081215E4 @ =gEnemyParty - mov r12, r5 - cmp r0, 0xFF - beq _081215BC -_081215AA: - mov r5, r8 - adds r0, r5, r6 - strb r1, [r0] - adds r6, 0x1 - adds r4, 0x1 - ldrb r1, [r4] - adds r0, r1, 0 - cmp r0, 0xFF - bne _081215AA -_081215BC: - ldr r1, _081215D0 @ =0x00016003 - adds r0, r2, r1 - ldrb r0, [r0] - lsls r0, 1 - adds r0, r3 - ldrh r1, [r0] - b _08121908 - .align 2, 0 -_081215CC: .4byte 0x02000000 -_081215D0: .4byte 0x00016003 -_081215D4: .4byte gBattleTypeFlags -_081215D8: .4byte gUnknown_08400791 -_081215DC: .4byte gUnknown_08400797 -_081215E0: .4byte gBattlePartyID -_081215E4: .4byte gEnemyParty -_081215E8: - ldr r1, _081215F4 @ =gBattlePartyID - ldrb r0, [r5] - lsls r0, 1 - adds r0, r1 - ldrh r1, [r0] - b _0812193A - .align 2, 0 -_081215F4: .4byte gBattlePartyID -_081215F8: - ldr r0, _08121610 @ =gSelectedOrderFromParty - ldr r2, [r0] - ldrh r1, [r2] - movs r0, 0xB1 - lsls r0, 1 - cmp r1, r0 - bls _0812161C - ldr r0, _08121614 @ =0x02000000 - ldr r2, _08121618 @ =0x000160a0 - adds r0, r2 - b _08121634 - .align 2, 0 -_08121610: .4byte gSelectedOrderFromParty -_08121614: .4byte 0x02000000 -_08121618: .4byte 0x000160a0 -_0812161C: - ldrh r1, [r2] - b _08121652 -_08121620: - ldr r0, _08121640 @ =gSelectedOrderFromParty - ldr r2, [r0] - ldrh r1, [r2, 0x2] - movs r0, 0xB1 - lsls r0, 1 - cmp r1, r0 - bls _08121650 - ldr r0, _08121644 @ =0x02000000 - ldr r3, _08121648 @ =0x000160a0 - adds r0, r3 -_08121634: - ldrb r0, [r0] - lsls r0, 2 - ldr r1, _0812164C @ =gUnknown_08401674 - adds r4, r0, r1 - b _081219E6 - .align 2, 0 -_08121640: .4byte gSelectedOrderFromParty -_08121644: .4byte 0x02000000 -_08121648: .4byte 0x000160a0 -_0812164C: .4byte gUnknown_08401674 -_08121650: - ldrh r1, [r2, 0x2] -_08121652: - movs r0, 0xD - muls r1, r0 - ldr r0, _0812165C @ =gMoveNames - adds r4, r1, r0 - b _081219E6 - .align 2, 0 -_0812165C: .4byte gMoveNames -_08121660: - ldr r0, _081216AC @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _081216D8 - ldr r1, _081216B0 @ =gLastUsedItem - ldrh r0, [r1] - cmp r0, 0xAF - bne _081216D4 - ldr r2, _081216B4 @ =gLinkPlayers - ldr r0, _081216B8 @ =0x02000000 - ldr r5, _081216BC @ =0x000160cb - adds r0, r5 - ldrb r1, [r0] - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - adds r0, r2 - ldr r1, _081216C0 @ =gStringBank - ldrb r2, [r1] - ldrh r0, [r0, 0x18] - cmp r0, r2 - bne _081216CC - lsls r1, r2, 3 - subs r1, r2 - lsls r1, 2 - ldr r0, _081216C4 @ =gEnigmaBerries - adds r1, r0 - mov r0, sp - bl StringCopy - ldr r1, _081216C8 @ =gUnknown_08400A85 - mov r0, sp - bl StringAppend - mov r4, sp - b _081219E6 - .align 2, 0 -_081216AC: .4byte gBattleTypeFlags -_081216B0: .4byte gLastUsedItem -_081216B4: .4byte gLinkPlayers -_081216B8: .4byte 0x02000000 -_081216BC: .4byte 0x000160cb -_081216C0: .4byte gStringBank -_081216C4: .4byte gEnigmaBerries -_081216C8: .4byte gUnknown_08400A85 -_081216CC: - ldr r4, _081216D0 @ =gUnknown_08400A78 - b _081219E6 - .align 2, 0 -_081216D0: .4byte gUnknown_08400A78 -_081216D4: - ldrh r0, [r1] - b _081216DC -_081216D8: - ldr r0, _081216E8 @ =gLastUsedItem - ldrh r0, [r0] -_081216DC: - mov r1, sp - bl CopyItemName - mov r4, sp - b _081219E6 - .align 2, 0 -_081216E8: .4byte gLastUsedItem -_081216EC: - ldr r0, _081216F0 @ =gLastUsedAbility - b _08121734 - .align 2, 0 -_081216F0: .4byte gLastUsedAbility -_081216F4: - ldr r1, _081216FC @ =gAbilitiesPerBank - ldr r0, _08121700 @ =gBankAttacker - b _08121730 - .align 2, 0 -_081216FC: .4byte gAbilitiesPerBank -_08121700: .4byte gBankAttacker -_08121704: - ldr r1, _0812170C @ =gAbilitiesPerBank - ldr r0, _08121710 @ =gBankTarget - b _08121730 - .align 2, 0 -_0812170C: .4byte gAbilitiesPerBank -_08121710: .4byte gBankTarget -_08121714: - ldr r1, _08121720 @ =gAbilitiesPerBank - ldr r0, _08121724 @ =0x02000000 - ldr r2, _08121728 @ =0x00016003 - adds r0, r2 - b _08121730 - .align 2, 0 -_08121720: .4byte gAbilitiesPerBank -_08121724: .4byte 0x02000000 -_08121728: .4byte 0x00016003 -_0812172C: - ldr r1, _08121740 @ =gAbilitiesPerBank - ldr r0, _08121744 @ =gEffectBank -_08121730: - ldrb r0, [r0] - adds r0, r1 -_08121734: - ldrb r1, [r0] - movs r0, 0xD - muls r1, r0 - ldr r0, _08121748 @ =gAbilityNames - adds r4, r1, r0 - b _081219E6 - .align 2, 0 -_08121740: .4byte gAbilitiesPerBank -_08121744: .4byte gEffectBank -_08121748: .4byte gAbilityNames -_0812174C: - ldr r3, _08121764 @ =gTrainerBattleOpponent - ldrh r1, [r3] - movs r0, 0x80 - lsls r0, 3 - cmp r1, r0 - bne _08121768 - bl GetSecretBaseTrainerNameIndex - lsls r0, 24 - lsrs r0, 24 - movs r1, 0xD - b _081217AE - .align 2, 0 -_08121764: .4byte gTrainerBattleOpponent -_08121768: - ldr r0, _08121784 @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x80 - lsls r0, 1 - ands r0, r1 - cmp r0, 0 - beq _08121788 - bl get_trainer_class_name_index - lsls r0, 24 - lsrs r0, 24 - movs r1, 0xD - b _081217AE - .align 2, 0 -_08121784: .4byte gBattleTypeFlags -_08121788: - movs r0, 0x80 - lsls r0, 4 - ands r0, r1 - cmp r0, 0 - beq _0812179E - bl sub_8135FD8 - lsls r0, 24 - lsrs r0, 24 - movs r1, 0xD - b _081217AE -_0812179E: - ldr r2, _081217B8 @ =gTrainers - ldrh r1, [r3] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r0, r2 - ldrb r1, [r0, 0x1] - movs r0, 0xD -_081217AE: - muls r1, r0 - ldr r0, _081217BC @ =gTrainerClassNames - adds r4, r1, r0 - b _081219E6 - .align 2, 0 -_081217B8: .4byte gTrainers -_081217BC: .4byte gTrainerClassNames -_081217C0: - ldr r2, _081217E4 @ =gTrainerBattleOpponent - ldrh r1, [r2] - movs r0, 0x80 - lsls r0, 3 - cmp r1, r0 - bne _081217EC - mov r0, sp - movs r1, 0xFF - movs r2, 0x8 - bl memset - ldr r1, _081217E8 @ =0x02017002 - mov r0, sp - movs r2, 0x7 - bl memcpy - mov r4, sp - b _081219E6 - .align 2, 0 -_081217E4: .4byte gTrainerBattleOpponent -_081217E8: .4byte 0x02017002 -_081217EC: - ldr r0, _08121804 @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x80 - lsls r0, 1 - ands r0, r1 - cmp r0, 0 - beq _08121808 - mov r0, sp - bl get_trainer_name - mov r4, sp - b _081219E6 - .align 2, 0 -_08121804: .4byte gBattleTypeFlags -_08121808: - movs r0, 0x80 - lsls r0, 4 - ands r0, r1 - cmp r0, 0 - beq _0812181C - mov r0, sp - bl sub_8135FF4 - mov r4, sp - b _081219E6 -_0812181C: - ldrh r0, [r2] - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _0812182C @ =gTrainers + 0x4 - adds r4, r1, r0 - b _081219E6 - .align 2, 0 -_0812182C: .4byte gTrainers + 0x4 -_08121830: - lsls r0, r7, 3 - subs r0, r7 - lsls r0, 2 - ldr r1, _0812183C @ =gLinkPlayers + 0x8 - adds r4, r0, r1 - b _081219E6 - .align 2, 0 -_0812183C: .4byte gLinkPlayers + 0x8 -_08121840: - ldr r4, _08121850 @ =gLinkPlayers - lsls r0, r7, 3 - subs r0, r7 - lsls r0, 2 - adds r0, r4 - ldrh r1, [r0, 0x18] - movs r0, 0x2 - b _08121876 - .align 2, 0 -_08121850: .4byte gLinkPlayers -_08121854: - ldr r4, _08121864 @ =gLinkPlayers - lsls r0, r7, 3 - subs r0, r7 - lsls r0, 2 - adds r0, r4 - ldrh r1, [r0, 0x18] - movs r0, 0x1 - b _08121876 - .align 2, 0 -_08121864: .4byte gLinkPlayers -_08121868: - ldr r4, _08121888 @ =gLinkPlayers - lsls r0, r7, 3 - subs r0, r7 - lsls r0, 2 - adds r0, r4 - ldrh r1, [r0, 0x18] - movs r0, 0x3 -_08121876: - eors r0, r1 - bl sub_803FC34 - lsls r1, r0, 3 - subs r1, r0 - lsls r1, 2 - adds r4, 0x8 - adds r4, r1, r4 - b _081219E6 - .align 2, 0 -_08121888: .4byte gLinkPlayers -_0812188C: - ldr r0, _081218A4 @ =0x02000000 - ldr r3, _081218A8 @ =0x00016003 - adds r0, r3 - ldrb r0, [r0] - bl sub_803FC34 - lsls r1, r0, 3 - subs r1, r0 - lsls r1, 2 - ldr r0, _081218AC @ =gLinkPlayers + 0x8 - adds r4, r1, r0 - b _081219E6 - .align 2, 0 -_081218A4: .4byte 0x02000000 -_081218A8: .4byte 0x00016003 -_081218AC: .4byte gLinkPlayers + 0x8 -_081218B0: - ldr r4, _081218B4 @ =gSaveBlock2 - b _081219E6 - .align 2, 0 -_081218B4: .4byte gSaveBlock2 -_081218B8: - bl sub_8082830 - adds r4, r0, 0 - b _081219E6 -_081218C0: - ldr r5, _08121918 @ =0x02000000 - ldr r1, _0812191C @ =0x00016003 - adds r0, r5, r1 - ldrb r0, [r0] - bl GetBankSide - lsls r0, 24 - cmp r0, 0 - beq _08121934 - ldr r0, _08121920 @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x8 - ands r0, r1 - ldr r4, _08121924 @ =gUnknown_08400791 - cmp r0, 0 - beq _081218E2 - ldr r4, _08121928 @ =gUnknown_08400797 -_081218E2: - ldrb r1, [r4] - adds r0, r1, 0 - ldr r2, _0812192C @ =gEnemyParty - mov r12, r2 - adds r2, r5, 0 - cmp r0, 0xFF - beq _08121902 -_081218F0: - mov r3, r8 - adds r0, r3, r6 - strb r1, [r0] - adds r6, 0x1 - adds r4, 0x1 - ldrb r1, [r4] - adds r0, r1, 0 - cmp r0, 0xFF - bne _081218F0 -_08121902: - ldr r5, _08121930 @ =0x0001605e - adds r0, r2, r5 - ldrb r1, [r0] -_08121908: - movs r0, 0x64 - muls r0, r1 - add r0, r12 -_0812190E: - movs r1, 0x2 - mov r2, sp - bl GetMonData - b _0812194A - .align 2, 0 -_08121918: .4byte 0x02000000 -_0812191C: .4byte 0x00016003 -_08121920: .4byte gBattleTypeFlags -_08121924: .4byte gUnknown_08400791 -_08121928: .4byte gUnknown_08400797 -_0812192C: .4byte gEnemyParty -_08121930: .4byte 0x0001605e -_08121934: - ldr r1, _08121954 @ =0x0001605e - adds r0, r5, r1 - ldrb r1, [r0] -_0812193A: - movs r0, 0x64 - muls r0, r1 - ldr r1, _08121958 @ =gPlayerParty -_08121940: - adds r0, r1 - movs r1, 0x2 - mov r2, sp - bl GetMonData -_0812194A: - mov r0, sp - bl StringGetEnd10 - mov r4, sp - b _081219E6 - .align 2, 0 -_08121954: .4byte 0x0001605e -_08121958: .4byte gPlayerParty -_0812195C: - ldr r0, _08121970 @ =0x0000084b - bl FlagGet - lsls r0, 24 - ldr r4, _08121974 @ =gUnknown_084009ED - cmp r0, 0 - beq _081219E6 - ldr r4, _08121978 @ =gUnknown_084009F7 - b _081219E6 - .align 2, 0 -_08121970: .4byte 0x0000084b -_08121974: .4byte gUnknown_084009ED -_08121978: .4byte gUnknown_084009F7 -_0812197C: - ldr r0, _08121980 @ =gBankAttacker - b _08121986 - .align 2, 0 -_08121980: .4byte gBankAttacker -_08121984: - ldr r0, _08121998 @ =gBankTarget -_08121986: - ldrb r0, [r0] - bl GetBankSide - lsls r0, 24 - ldr r4, _0812199C @ =gUnknown_084007A7 - cmp r0, 0 - bne _081219E6 - ldr r4, _081219A0 @ =gUnknown_084007AC - b _081219E6 - .align 2, 0 -_08121998: .4byte gBankTarget -_0812199C: .4byte gUnknown_084007A7 -_081219A0: .4byte gUnknown_084007AC -_081219A4: - ldr r0, _081219A8 @ =gBankAttacker - b _081219AE - .align 2, 0 -_081219A8: .4byte gBankAttacker -_081219AC: - ldr r0, _081219C0 @ =gBankTarget -_081219AE: - ldrb r0, [r0] - bl GetBankSide - lsls r0, 24 - ldr r4, _081219C4 @ =gUnknown_0840079C - cmp r0, 0 - bne _081219E6 - ldr r4, _081219C8 @ =gUnknown_084007A1 - b _081219E6 - .align 2, 0 -_081219C0: .4byte gBankTarget -_081219C4: .4byte gUnknown_0840079C -_081219C8: .4byte gUnknown_084007A1 -_081219CC: - ldr r0, _081219D0 @ =gBankAttacker - b _081219D6 - .align 2, 0 -_081219D0: .4byte gBankAttacker -_081219D4: - ldr r0, _08121A24 @ =gBankTarget -_081219D6: - ldrb r0, [r0] - bl GetBankSide - lsls r0, 24 - ldr r4, _08121A28 @ =gUnknown_084007B2 - cmp r0, 0 - bne _081219E6 - ldr r4, _08121A2C @ =gUnknown_084007B7 -_081219E6: - ldrb r1, [r4] - adds r0, r1, 0 - mov r3, r9 - ldrb r2, [r3] - adds r3, 0x1 - cmp r0, 0xFF - beq _08121A06 -_081219F4: - mov r5, r8 - adds r0, r5, r6 - strb r1, [r0] - adds r6, 0x1 - adds r4, 0x1 - ldrb r1, [r4] - adds r0, r1, 0 - cmp r0, 0xFF - bne _081219F4 -_08121A06: - lsls r0, r2, 24 - lsrs r0, 24 - cmp r0, 0x21 - bne _08121A3C - mov r0, r8 - adds r1, r0, r6 - movs r0, 0xFC - strb r0, [r1] - adds r6, 0x1 - mov r2, r8 - adds r1, r2, r6 - movs r0, 0x9 - strb r0, [r1] - adds r6, 0x1 - b _08121A3C - .align 2, 0 -_08121A24: .4byte gBankTarget -_08121A28: .4byte gUnknown_084007B2 -_08121A2C: .4byte gUnknown_084007B7 -_08121A30: - mov r3, r8 - adds r0, r3, r6 - strb r1, [r0] - adds r6, 0x1 - mov r3, r9 - adds r3, 0x1 -_08121A3C: - mov r9, r3 - ldrb r1, [r3] -_08121A40: - adds r0, r1, 0 - cmp r0, 0xFF - beq _08121A4A - bl _0812101E -_08121A4A: - mov r5, r8 - adds r1, r5, r6 - mov r2, r9 - ldrb r0, [r2] - strb r0, [r1] - adds r6, 0x1 - adds r0, r6, 0 - add sp, 0xC - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end StrCpyDecodeBattle - - thumb_func_start sub_8121A68 -sub_8121A68: @ 8121A68 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0xC - adds r7, r0, 0 - adds r6, r1, 0 - movs r5, 0x1 - movs r0, 0 - mov r8, r0 - movs r0, 0xFF - strb r0, [r6] - ldrb r0, [r7, 0x1] - cmp r0, 0xFF - bne _08121A86 - b _08121D0E -_08121A86: - adds r0, r7, r5 - ldrb r1, [r0] - adds r4, r0, 0 - cmp r1, 0xA - bls _08121A92 - b _08121D04 -_08121A92: - lsls r0, r1, 2 - ldr r1, _08121A9C @ =_08121AA0 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08121A9C: .4byte _08121AA0 - .align 2, 0 -_08121AA0: - .4byte _08121ACC - .4byte _08121AE8 - .4byte _08121B3C - .4byte _08121B54 - .4byte _08121B64 - .4byte _08121BDC - .4byte _08121BF0 - .4byte _08121C02 - .4byte _08121C48 - .4byte _08121C5C - .4byte _08121C78 -_08121ACC: - adds r0, r5, r7 - ldrb r1, [r0, 0x1] - ldrb r0, [r0, 0x2] - lsls r0, 8 - orrs r1, r0 - ldr r0, _08121AE4 @ =gBattleStringsTable - subs r1, 0xC - lsls r1, 2 - adds r1, r0 - ldr r1, [r1] - b _08121CE2 - .align 2, 0 -_08121AE4: .4byte gBattleStringsTable -_08121AE8: - ldrb r0, [r4, 0x1] - cmp r0, 0x2 - beq _08121B04 - cmp r0, 0x2 - bgt _08121AF8 - cmp r0, 0x1 - beq _08121AFE - b _08121B26 -_08121AF8: - cmp r0, 0x4 - beq _08121B0C - b _08121B26 -_08121AFE: - ldrb r4, [r4, 0x3] - mov r8, r4 - b _08121B26 -_08121B04: - ldrb r1, [r4, 0x3] - ldrb r0, [r4, 0x4] - lsls r0, 8 - b _08121B22 -_08121B0C: - ldrb r0, [r4, 0x3] - mov r8, r0 - ldrb r0, [r4, 0x4] - lsls r0, 8 - mov r1, r8 - orrs r1, r0 - ldrb r0, [r4, 0x5] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r4, 0x6] - lsls r0, 24 -_08121B22: - orrs r1, r0 - mov r8, r1 -_08121B26: - adds r4, r5, r7 - ldrb r3, [r4, 0x2] - adds r0, r6, 0 - mov r1, r8 - movs r2, 0 - bl ConvertIntToDecimalStringN - adds r0, r5, 0x3 - ldrb r4, [r4, 0x1] - adds r5, r0, r4 - b _08121D04 -_08121B3C: - adds r0, r5, r7 - ldrb r1, [r0, 0x1] - ldrb r0, [r0, 0x2] - lsls r0, 8 - orrs r1, r0 - movs r0, 0xD - muls r1, r0 - ldr r0, _08121B50 @ =gMoveNames - adds r1, r0 - b _08121CE2 - .align 2, 0 -_08121B50: .4byte gMoveNames -_08121B54: - adds r0, r5, r7 - ldrb r0, [r0, 0x1] - lsls r1, r0, 3 - subs r1, r0 - ldr r0, _08121B60 @ =gTypeNames - b _08121C66 - .align 2, 0 -_08121B60: .4byte gTypeNames -_08121B64: - ldrb r0, [r4, 0x1] - bl GetBankSide - lsls r0, 24 - cmp r0, 0 - bne _08121B88 - ldrb r1, [r4, 0x2] - movs r0, 0x64 - muls r0, r1 - ldr r1, _08121B84 @ =gPlayerParty - adds r0, r1 - movs r1, 0x2 - mov r2, sp - bl GetMonData - b _08121BC4 - .align 2, 0 -_08121B84: .4byte gPlayerParty -_08121B88: - ldr r0, _08121BA0 @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x8 - ands r0, r1 - cmp r0, 0 - beq _08121BA8 - ldr r1, _08121BA4 @ =gUnknown_08400797 - adds r0, r6, 0 - bl StringAppend - b _08121BB0 - .align 2, 0 -_08121BA0: .4byte gBattleTypeFlags -_08121BA4: .4byte gUnknown_08400797 -_08121BA8: - ldr r1, _08121BD4 @ =gUnknown_08400791 - adds r0, r6, 0 - bl StringAppend -_08121BB0: - adds r0, r5, r7 - ldrb r1, [r0, 0x2] - movs r0, 0x64 - muls r0, r1 - ldr r1, _08121BD8 @ =gEnemyParty - adds r0, r1 - movs r1, 0x2 - mov r2, sp - bl GetMonData -_08121BC4: - mov r0, sp - bl StringGetEnd10 - adds r0, r6, 0 - mov r1, sp - bl StringAppend - b _08121D02 - .align 2, 0 -_08121BD4: .4byte gUnknown_08400791 -_08121BD8: .4byte gEnemyParty -_08121BDC: - ldr r1, _08121BEC @ =gUnknown_08400F58 - adds r0, r5, r7 - ldrb r0, [r0, 0x1] - lsls r0, 2 - adds r0, r1 - ldr r1, [r0] - b _08121C68 - .align 2, 0 -_08121BEC: .4byte gUnknown_08400F58 -_08121BF0: - adds r0, r5, r7 - ldrb r1, [r0, 0x1] - ldrb r0, [r0, 0x2] - lsls r0, 8 - orrs r1, r0 - adds r0, r6, 0 - bl GetSpeciesName - b _08121D02 -_08121C02: - adds r4, r5, r7 - ldrb r0, [r4, 0x1] - bl GetBankSide - lsls r0, 24 - cmp r0, 0 - bne _08121C28 - ldrb r1, [r4, 0x2] - movs r0, 0x64 - muls r0, r1 - ldr r1, _08121C24 @ =gPlayerParty - adds r0, r1 - movs r1, 0x2 - adds r2, r6, 0 - bl GetMonData - b _08121C3A - .align 2, 0 -_08121C24: .4byte gPlayerParty -_08121C28: - ldrb r1, [r4, 0x2] - movs r0, 0x64 - muls r0, r1 - ldr r1, _08121C44 @ =gEnemyParty - adds r0, r1 - movs r1, 0x2 - adds r2, r6, 0 - bl GetMonData -_08121C3A: - adds r0, r6, 0 - bl StringGetEnd10 - b _08121D02 - .align 2, 0 -_08121C44: .4byte gEnemyParty -_08121C48: - ldr r1, _08121C58 @ =gUnknown_08400F78 - adds r0, r5, r7 - ldrb r0, [r0, 0x1] - lsls r0, 2 - adds r0, r1 - ldr r1, [r0] - b _08121C68 - .align 2, 0 -_08121C58: .4byte gUnknown_08400F78 -_08121C5C: - adds r0, r5, r7 - ldrb r1, [r0, 0x1] - movs r0, 0xD - muls r1, r0 - ldr r0, _08121C74 @ =gAbilityNames -_08121C66: - adds r1, r0 -_08121C68: - adds r0, r6, 0 - bl StringAppend - adds r5, 0x2 - b _08121D04 - .align 2, 0 -_08121C74: .4byte gAbilityNames -_08121C78: - adds r0, r5, r7 - ldrb r2, [r0, 0x1] - ldrb r0, [r0, 0x2] - lsls r0, 8 - orrs r2, r0 - ldr r0, _08121CC4 @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _08121CFA - cmp r2, 0xAF - bne _08121CF0 - ldr r2, _08121CC8 @ =gLinkPlayers - ldr r0, _08121CCC @ =0x02000000 - ldr r1, _08121CD0 @ =0x000160cb - adds r0, r1 - ldrb r1, [r0] - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - adds r0, r2 - ldr r1, _08121CD4 @ =gStringBank - ldrb r2, [r1] - ldrh r0, [r0, 0x18] - cmp r0, r2 - bne _08121CE0 - lsls r1, r2, 3 - subs r1, r2 - lsls r1, 2 - ldr r0, _08121CD8 @ =gEnigmaBerries - adds r1, r0 - adds r0, r6, 0 - bl StringCopy - ldr r1, _08121CDC @ =gUnknown_08400A85 - b _08121CE2 - .align 2, 0 -_08121CC4: .4byte gBattleTypeFlags -_08121CC8: .4byte gLinkPlayers -_08121CCC: .4byte 0x02000000 -_08121CD0: .4byte 0x000160cb -_08121CD4: .4byte gStringBank -_08121CD8: .4byte gEnigmaBerries -_08121CDC: .4byte gUnknown_08400A85 -_08121CE0: - ldr r1, _08121CEC @ =gUnknown_08400A78 -_08121CE2: - adds r0, r6, 0 - bl StringAppend - b _08121D02 - .align 2, 0 -_08121CEC: .4byte gUnknown_08400A78 -_08121CF0: - adds r0, r2, 0 - adds r1, r6, 0 - bl CopyItemName - b _08121D02 -_08121CFA: - adds r0, r2, 0 - adds r1, r6, 0 - bl CopyItemName -_08121D02: - adds r5, 0x3 -_08121D04: - adds r0, r7, r5 - ldrb r0, [r0] - cmp r0, 0xFF - beq _08121D0E - b _08121A86 -_08121D0E: - add sp, 0xC - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_8121A68 - - thumb_func_start sub_8121D1C -sub_8121D1C: @ 8121D1C - push {r4,r5,lr} - adds r4, r0, 0 - movs r2, 0 - ldr r5, _08121D50 @ =gSelectedOrderFromParty - ldr r3, _08121D54 @ =gUnknown_084016BC -_08121D26: - cmp r2, 0x4 - beq _08121D3C - ldrh r1, [r3] - cmp r1, 0 - bne _08121D32 - adds r2, 0x1 -_08121D32: - ldr r0, [r5] - adds r3, 0x2 - ldrh r0, [r0] - cmp r1, r0 - bne _08121D26 -_08121D3C: - cmp r2, 0 - blt _08121D68 - cmp r2, 0x2 - bgt _08121D5C - ldr r1, _08121D58 @ =gUnknown_08400E5E - adds r0, r4, 0 - bl StringCopy - b _08121D68 - .align 2, 0 -_08121D50: .4byte gSelectedOrderFromParty -_08121D54: .4byte gUnknown_084016BC -_08121D58: .4byte gUnknown_08400E5E -_08121D5C: - cmp r2, 0x4 - bgt _08121D68 - ldr r1, _08121D70 @ =gUnknown_08400E62 - adds r0, r4, 0 - bl StringCopy -_08121D68: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08121D70: .4byte gUnknown_08400E62 - thumb_func_end sub_8121D1C - - thumb_func_start sub_8121D74 -sub_8121D74: @ 8121D74 - push {r4,r5,lr} - adds r3, r0, 0 - movs r4, 0 - b _08121D7E -_08121D7C: - adds r3, 0x1 -_08121D7E: - ldrb r0, [r3] - cmp r0, 0xFF - bne _08121D7C - ldr r1, _08121DB4 @ =gUnknown_084016BC - ldr r5, _08121DB8 @ =gSelectedOrderFromParty - movs r0, 0 - lsls r0, 1 - adds r2, r0, r1 -_08121D8E: - cmp r4, 0x4 - beq _08121DA8 - ldrh r1, [r2] - cmp r1, 0 - bne _08121D9A - adds r4, 0x1 -_08121D9A: - ldr r0, [r5] - adds r2, 0x2 - ldrh r0, [r0] - cmp r1, r0 - bne _08121D8E - cmp r4, 0x4 - bhi _08121E04 -_08121DA8: - lsls r0, r4, 2 - ldr r1, _08121DBC @ =_08121DC0 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08121DB4: .4byte gUnknown_084016BC -_08121DB8: .4byte gSelectedOrderFromParty -_08121DBC: .4byte _08121DC0 - .align 2, 0 -_08121DC0: - .4byte _08121DD4 - .4byte _08121DDC - .4byte _08121DE4 - .4byte _08121DEC - .4byte _08121DFC -_08121DD4: - ldr r1, _08121DD8 @ =gUnknown_084007C8 - b _08121DEE - .align 2, 0 -_08121DD8: .4byte gUnknown_084007C8 -_08121DDC: - ldr r1, _08121DE0 @ =gUnknown_084007CA - b _08121DEE - .align 2, 0 -_08121DE0: .4byte gUnknown_084007CA -_08121DE4: - ldr r1, _08121DE8 @ =gUnknown_084007CC - b _08121DEE - .align 2, 0 -_08121DE8: .4byte gUnknown_084007CC -_08121DEC: - ldr r1, _08121DF8 @ =gUnknown_084007CE -_08121DEE: - adds r0, r3, 0 - bl StringCopy - b _08121E04 - .align 2, 0 -_08121DF8: .4byte gUnknown_084007CE -_08121DFC: - ldr r1, _08121E0C @ =gUnknown_084007D0 - adds r0, r3, 0 - bl StringCopy -_08121E04: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08121E0C: .4byte gUnknown_084007D0 - thumb_func_end sub_8121D74 - - .align 2, 0 @ Don't pad with nop. diff --git a/include/battle.h b/include/battle.h index 4b2542017..9d8092197 100644 --- a/include/battle.h +++ b/include/battle.h @@ -19,6 +19,15 @@ #define BATTLE_TYPE_LEGENDARY 0x2000 #define BATTLE_TYPE_REGI 0x4000 +#define BATTLE_WON 0x1 +#define BATTLE_LOST 0x2 +#define BATTLE_DREW 0x3 +#define BATTLE_RAN 0x4 +#define BATTLE_PLAYER_TELEPORTED 0x5 +#define BATTLE_POKE_FLED 0x6 +#define BATTLE_CAUGHT 0x7 +#define BATTLE_OPPONENT_TELEPORTED 0xA + #define AI_ACTION_DONE 0x0001 #define AI_ACTION_FLEE 0x0002 #define AI_ACTION_WATCH 0x0004 @@ -327,7 +336,7 @@ struct BattleStruct /* 0x2000000 */ /*0x1609D*/ u8 unk1609D; /*0x1609E*/ u8 unk1609E; /*0x1609F*/ u8 unk1609F; - /*0x160A0*/ u8 unk160a0; + /*0x160A0*/ u8 stringMoveType; /*0x160A1*/ u8 animTargetsHit; /*0x160A2*/ u8 expGetterBank; /*0x160A3*/ u8 unk160A3; diff --git a/include/battle_message.h b/include/battle_message.h index da57333a5..d115e5357 100644 --- a/include/battle_message.h +++ b/include/battle_message.h @@ -1,7 +1,8 @@ #ifndef GUARD_BATTLE_MESSAGE_H #define GUARD_BATTLE_MESSAGE_H -void StrCpyDecodeToDisplayedStringBattle(const u8 *); -void StrCpyDecodeBattle(const u8 *, u8 *); +void BufferStringBattle(u16 stringID); +u32 StrCpyDecodeToDisplayedStringBattle(const u8* src); +u32 StrCpyDecodeBattle(const u8* src, u8* dst); #endif // GUARD_BATTLE_MESSAGE_H diff --git a/include/data2.h b/include/data2.h index 9dd26fd5f..2837a4451 100644 --- a/include/data2.h +++ b/include/data2.h @@ -45,6 +45,8 @@ extern const u8 gTrainerClassNames[][13]; extern const struct Trainer gTrainers[]; extern u8 gSpeciesNames[][11]; extern u8 gMoveNames[][13]; +extern const u8 gAbilityNames[][13]; +extern const u8 gTypeNames[][7]; extern const struct UnknownStructD2 gUnknown_081F9674; extern const u8 gUnknown_081F96C8[]; extern struct CompressedSpriteSheet gUnknown_081FAEA4; diff --git a/ld_script.txt b/ld_script.txt index a0054668e..fe46e10b7 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -229,7 +229,7 @@ SECTIONS { src/fldeff_strength.o(.text); asm/battle_transition.o(.text); src/battle_811DA74.o(.text); - asm/battle_message.o(.text); + src/battle_message.o(.text); src/choose_party.o(.text); asm/cable_car.o(.text); asm/roulette_util.o(.text); diff --git a/src/battle_4.c b/src/battle_4.c index 31d6c76dc..6dd5d7df6 100644 --- a/src/battle_4.c +++ b/src/battle_4.c @@ -246,15 +246,6 @@ extern u8 gUnknown_081D95DB[]; //bs payday money give #define CMP_COMMON_BITS 0x4 #define CMP_NO_COMMON_BITS 0x5 -#define BATTLE_WON 0x1 -#define BATTLE_LOST 0x2 -#define BATTLE_DREW 0x3 -#define BATTLE_RAN 0x4 -#define BATTLE_PLAYER_TELEPORTED 0x5 -#define BATTLE_POKE_FLED 0x6 -#define BATTLE_CAUGHT 0x7 -#define BATTLE_OPPONENT_TELEPORTED 0xA - #define uBYTE0_16(value)(( (u8) (((u16)(value) & (0x000000FF)) >> 0x00))) #define uBYTE1_16(value)(( (u8) (((u16)(value) & (0x0000FF00)) >> 0x08))) diff --git a/src/battle_message.c b/src/battle_message.c new file mode 100644 index 000000000..d4b8f86c6 --- /dev/null +++ b/src/battle_message.c @@ -0,0 +1,1064 @@ +#include "global.h" +#include "battle_message.h" +#include "battle.h" +#include "item.h" +#include "items.h" +#include "pokemon.h" +#include "data2.h" +#include "text.h" +#include "string_util.h" +#include "link.h" +#include "battle_setup.h" +#include "battle_tower.h" +#include "flags.h" + +#define BATTLESTRING_TO_SUB 12 +#define BATTLESTRINGS_NO 351 +#define BATTLESTRINGS_MAX BATTLESTRINGS_NO + BATTLESTRING_TO_SUB + +extern const u8* const gBattleStringsTable[BATTLESTRINGS_NO]; + +extern u16 gLastUsedItem; +extern u8 gLastUsedAbility; +extern u8 gActiveBank; +extern u8 gBankAttacker; +extern u8 gBankTarget; +extern u8 gStringBank; +extern u8 gEffectBank; +extern u8 gAbilitiesPerBank[4]; +extern u8 gBattleTextBuff1[]; +extern u8 gBattleTextBuff2[]; +extern u8 gBattleTextBuff3[]; +extern u8 gStringVar1[]; +extern u8 gStringVar2[]; +extern u8 gStringVar3[]; +extern u16 gBattleTypeFlags; +extern u16 gTrainerBattleOpponent; +extern u8 gDisplayedStringBattle[]; +extern u8 gStringVar1[]; +extern u8 gStringVar2[]; +extern u8 gStringVar3[]; +extern u16 gBattlePartyID[4]; +extern struct BattleEnigmaBerry gEnigmaBerries[4]; +extern u8 gBattleBufferA[4][0x200]; + +extern const u8 gUnknown_084005DB[]; +extern const u8 gUnknown_084005C7[]; +extern const u8 gUnknown_084005AA[]; +extern const u8 gUnknown_08400568[]; +extern const u8 gUnknown_08400590[]; +extern const u8 gUnknown_0840057B[]; +extern const u8 gUnknown_08400555[]; +extern const u8 gUnknown_084006F1[]; +extern const u8 gUnknown_084006A4[]; +extern const u8 gUnknown_0840069C[]; +extern const u8 gUnknown_0840065C[]; +extern const u8 gUnknown_08400645[]; +extern const u8 gUnknown_08400608[]; +extern const u8 gUnknown_08400635[]; +extern const u8 gUnknown_084005F5[]; +extern const u8 gUnknown_08400709[]; +extern const u8 gUnknown_08400727[]; +extern const u8 gUnknown_08400736[]; +extern const u8 gUnknown_08400749[]; +extern const u8 gUnknown_08400781[]; +extern const u8 gUnknown_08400771[]; +extern const u8 gUnknown_0840075E[]; +extern const u8 gUnknown_084006B3[]; +extern const u8 gUnknown_084006BB[]; +extern const u8 gUnknown_084006C6[]; +extern const u8 gUnknown_084006D5[]; +extern const u8 gUnknown_0840068C[]; +extern const u8 gUnknown_0840067C[]; +extern const u8 gUnknown_08400622[]; +extern const u8 gUnknown_084007BD[]; +extern const u8 gUnknown_083FFEFC[]; +extern const u8 gUnknown_083FFFF7[]; +extern const u8 gUnknown_083FFFEA[]; +extern const u8 gUnknown_083FFF6A[]; +extern const u8 gUnknown_083FFF99[]; +extern const u8 gUnknown_083FFFCB[]; +extern const u8 gUnknown_083FFF56[]; +extern const u8 gUnknown_083FFF81[]; +extern const u8 gUnknown_083FFFB3[]; +extern const u8 gUnknown_08400A78[]; +extern const u8 gUnknown_08400A85[]; +extern const u8 gUnknown_08400797[]; +extern const u8 gUnknown_08400791[]; +extern const u8 gUnknown_084007B7[]; +extern const u8 gUnknown_084007B2[]; +extern const u8 gUnknown_0840079C[]; +extern const u8 gUnknown_084007A1[]; +extern const u8 gUnknown_084007A7[]; +extern const u8 gUnknown_084007AC[]; +extern const u8 gUnknown_084009ED[]; +extern const u8 gUnknown_084009F7[]; +extern const u8 gUnknown_084007C8[]; +extern const u8 gUnknown_084007CA[]; +extern const u8 gUnknown_084007CC[]; +extern const u8 gUnknown_084007CE[]; +extern const u8 gUnknown_084007D0[]; +extern const u8 gUnknown_08400E5E[]; +extern const u8 gUnknown_08400E62[]; + +extern const u16 gUnknown_084016BC[]; // a table of moves + +extern const u8* const gUnknown_08401674[]; // table of pointers to 'a -TYPE' strings +extern const u8* const gUnknown_08400F58[]; // table of pointers to stat strings +extern const u8* const gUnknown_08400F78[]; // table of pointers to flavour strings + +struct StatusFlagString +{ + u8* flag; + u8* ptr; +}; + +extern const struct StatusFlagString gUnknown_081FA6D4[7]; // status flag/text +extern const u8 gUnknown_084017A8[8]; // empty flags + +struct StringInfo +{ + u16 currentMove; + u16 lastMove; + u16 lastItem; + u8 lastAbility; + u8 scrActive; + u8 unk1605E; + u8 hpScale; + u8 StringBank; + u8 moveType; + u8 abilities[4]; + u8 textBuffs[3][0x10]; +}; + +extern struct StringInfo* gSelectedOrderFromParty; +#define gStringInfo gSelectedOrderFromParty + +static void sub_8121D1C(u8* textBuff); +static void sub_8121D74(u8* textBuff); +static void StrCpyDecodeBattleTextBuff(u8* src, u8* dst); + +u8 GetBankSide(u8 bank); +s32 sub_803FC34(u16); +void get_trainer_name(u8* dst); +u8 get_trainer_class_name_index(void); +u8 sub_8135FD8(void); +u8 GetMultiplayerId(void); +u8 GetBankByPlayerAI(u8 ID); +u8 GetBankSide(u8 bank); +u8 GetBankIdentity(u8 bank); + +void BufferStringBattle(u16 stringID) +{ + int i; + const u8* stringPtr = NULL; + + gStringInfo = (struct StringInfo*)(&gBattleBufferA[gActiveBank][4]); + gLastUsedItem = gStringInfo->lastItem; + gLastUsedAbility = gStringInfo->lastAbility; + BATTLE_STRUCT->scriptingActive = gStringInfo->scrActive; + BATTLE_STRUCT->unk1605E = gStringInfo->unk1605E; + BATTLE_STRUCT->hpScale = gStringInfo->hpScale; + gStringBank = gStringInfo->StringBank; + BATTLE_STRUCT->stringMoveType = gStringInfo->moveType; + for (i = 0; i < 4; i++) + { + gAbilitiesPerBank[i] = gStringInfo->abilities[i]; + } + for (i = 0; i < 0x10; i++) + { + gBattleTextBuff1[i] = gStringInfo->textBuffs[0][i]; + gBattleTextBuff2[i] = gStringInfo->textBuffs[1][i]; + gBattleTextBuff3[i] = gStringInfo->textBuffs[2][i]; + } + switch (stringID) + { + case 0: // first battle msg + if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) + { + if (gBattleTypeFlags & BATTLE_TYPE_LINK) + { + if (gBattleTypeFlags & BATTLE_TYPE_MULTI) + stringPtr = gUnknown_084005DB; + else + stringPtr = gUnknown_084005C7; + } + else + stringPtr = gUnknown_084005AA; + } + else + { + if (gBattleTypeFlags & BATTLE_TYPE_LEGENDARY) + stringPtr = gUnknown_08400568; + else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) // interesting, looks like they had something planned for wild double battles + stringPtr = gUnknown_08400590; + else if (gBattleTypeFlags & BATTLE_TYPE_WALLY_TUTORIAL) + stringPtr = gUnknown_0840057B; + else + stringPtr = gUnknown_08400555; + } + break; + case 1: // poke first send-out + if (GetBankSide(gActiveBank) == 0) + { + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + { + if (gBattleTypeFlags & BATTLE_TYPE_MULTI) + stringPtr = gUnknown_084006F1; + else + stringPtr = gUnknown_084006A4; + } + else + stringPtr = gUnknown_0840069C; + } + else + { + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + { + if (gBattleTypeFlags & BATTLE_TYPE_MULTI) + stringPtr = gUnknown_0840065C; + else if (gBattleTypeFlags & BATTLE_TYPE_LINK) + stringPtr = gUnknown_08400645; + else + stringPtr = gUnknown_08400608; + } + else if (gBattleTypeFlags & BATTLE_TYPE_LINK) + stringPtr = gUnknown_08400635; + else + stringPtr = gUnknown_084005F5; + } + break; + case 2: // sending poke to ball msg + if (GetBankSide(gActiveBank) == 0) + { + if (BATTLE_STRUCT->hpScale == 0) + stringPtr = gUnknown_08400709; + else if (BATTLE_STRUCT->hpScale == 1 || gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + stringPtr = gUnknown_08400727; + else if (BATTLE_STRUCT->hpScale == 2) + stringPtr = gUnknown_08400736; + else + stringPtr = gUnknown_08400749; + } + else + { + if (gTrainerBattleOpponent == 0x800) + { + if (gBattleTypeFlags & BATTLE_TYPE_MULTI) + stringPtr = gUnknown_08400781; + else + stringPtr = gUnknown_08400771; + } + else + stringPtr = gUnknown_0840075E; + } + break; + case 3: // switch-in msg + if (GetBankSide(BATTLE_STRUCT->scriptingActive) == 0) + { + if (BATTLE_STRUCT->hpScale == 0 || gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + stringPtr = gUnknown_084006B3; + else if (BATTLE_STRUCT->hpScale == 1) + stringPtr = gUnknown_084006BB; + else if (BATTLE_STRUCT->hpScale == 2) + stringPtr = gUnknown_084006C6; + else + stringPtr = gUnknown_084006D5; + } + else + { + if (gBattleTypeFlags & BATTLE_TYPE_LINK) + { + if (gBattleTypeFlags & BATTLE_TYPE_MULTI) + stringPtr = gUnknown_0840068C; + else + stringPtr = gUnknown_0840067C; + } + else + stringPtr = gUnknown_08400622; + } + break; + case 4: // pokemon used a move msg + sub_8121D1C(gBattleTextBuff1); + if (gStringInfo->currentMove > 0x162) + StringCopy(gBattleTextBuff2, gUnknown_08401674[BATTLE_STRUCT->stringMoveType]); + else + StringCopy(gBattleTextBuff2, gMoveNames[gStringInfo->currentMove]); + sub_8121D74(gBattleTextBuff2); + stringPtr = gUnknown_084007BD; + break; + case 5: // battle end + if (gBattleTextBuff1[0] & 0x80) + { + gBattleTextBuff1[0] &= ~(0x80); + if (GetBankSide(gActiveBank) == 1 && gBattleTextBuff1[0] != 3) + gBattleTextBuff1[0] ^= 3; + if (gBattleTextBuff1[0] == BATTLE_LOST || gBattleTextBuff1[0] == BATTLE_DREW) + stringPtr = gUnknown_083FFEFC; + else + { + if (gBattleTypeFlags & BATTLE_TYPE_MULTI) + stringPtr = gUnknown_083FFFF7; + else + stringPtr = gUnknown_083FFFEA; + } + } + else + { + if (GetBankSide(gActiveBank) == 1 && gBattleTextBuff1[0] != 3) + gBattleTextBuff1[0] ^= 3; + if (gBattleTypeFlags & BATTLE_TYPE_MULTI) + { + switch (gBattleTextBuff1[0]) + { + case BATTLE_WON: + stringPtr = gUnknown_083FFF6A; + break; + case BATTLE_LOST: + stringPtr = gUnknown_083FFF99; + break; + case BATTLE_DREW: + stringPtr = gUnknown_083FFFCB; + break; + } + } + else + { + switch (gBattleTextBuff1[0]) + { + case BATTLE_WON: + stringPtr = gUnknown_083FFF56; + break; + case BATTLE_LOST: + stringPtr = gUnknown_083FFF81; + break; + case BATTLE_DREW: + stringPtr = gUnknown_083FFFB3; + break; + } + } + } + break; + default: // load a string from the table + if (stringID >= BATTLESTRINGS_MAX) + { + gDisplayedStringBattle[0] = EOS; + return; + } + else + stringPtr = gBattleStringsTable[stringID - BATTLESTRING_TO_SUB]; + break; + } + StrCpyDecodeToDisplayedStringBattle(stringPtr); +} + +u32 StrCpyDecodeToDisplayedStringBattle(const u8* src) +{ + StrCpyDecodeBattle(src, gDisplayedStringBattle); +} + +static const u8* AppendStatusString(u8* src) +{ + u32 i; + u8 status[8]; + u32 flag1, flag2; + u8* statusPtr; + + memcpy(status, gUnknown_084017A8, 8); + + statusPtr = status; + for (i = 0; i < sizeof(struct StatusFlagString); i++) + { + if (*src == EOS) + break; + *statusPtr = *src; + src++; + statusPtr++; + } + flag1 = *(u32*)(&status[0]); + flag2 = *(u32*)(&status[4]); + for (i = 0; i < 7; i++) + { + if (flag1 == *(u32*)(&gUnknown_081FA6D4[i].flag[0]) && flag2 == *(u32*)(&gUnknown_081FA6D4[i].flag[4])) + return gUnknown_081FA6D4[i].ptr; + } + return NULL; +} + +u32 StrCpyDecodeBattle(const u8* src, u8* dst) +{ + u32 dstID = 0; // if they used dstID, why not use srcID as well? + const u8* toCpy = NULL; + u8 text[12]; + u8 multiplayerID = GetMultiplayerId(); + + while (*src != EOS) + { + if (*src == 0xFD) + { + src++; + switch (*src) + { + case 0: + if (gBattleTextBuff1[0] == 0xFD) + { + StrCpyDecodeBattleTextBuff(gBattleTextBuff1, gStringVar1); + toCpy = gStringVar1; + } + else + { + toCpy = AppendStatusString(gBattleTextBuff1); + if (toCpy == 0) + toCpy = gBattleTextBuff1; + } + break; + case 1: + if (gBattleTextBuff2[0] == 0xFD) + { + StrCpyDecodeBattleTextBuff(gBattleTextBuff2, gStringVar2); + toCpy = gStringVar2; + } + else + toCpy = gBattleTextBuff2; + break; + case 42: + if (gBattleTextBuff3[0] == 0xFD) + { + StrCpyDecodeBattleTextBuff(gBattleTextBuff3, gStringVar3); + toCpy = gStringVar3; + } + else + toCpy = gBattleTextBuff3; + break; + case 2: // first player poke name + GetMonData(&gPlayerParty[gBattlePartyID[GetBankByPlayerAI(0)]], MON_DATA_NICKNAME, text); + StringGetEnd10(text); + toCpy = text; + break; + case 3: // first enemy poke name + GetMonData(&gEnemyParty[gBattlePartyID[GetBankByPlayerAI(1)]], MON_DATA_NICKNAME, text); + StringGetEnd10(text); + toCpy = text; + break; + case 4: // second player poke name + GetMonData(&gPlayerParty[gBattlePartyID[GetBankByPlayerAI(2)]], MON_DATA_NICKNAME, text); + StringGetEnd10(text); + toCpy = text; + break; + case 5: // second enemy poke name + GetMonData(&gEnemyParty[gBattlePartyID[GetBankByPlayerAI(3)]], MON_DATA_NICKNAME, text); + StringGetEnd10(text); + toCpy = text; + break; + case 6: // link first player poke name + GetMonData(&gPlayerParty[gBattlePartyID[gLinkPlayers[multiplayerID].lp_field_18]], MON_DATA_NICKNAME, text); + StringGetEnd10(text); + toCpy = text; + break; + case 7: // link first opponent poke name + GetMonData(&gEnemyParty[gBattlePartyID[gLinkPlayers[multiplayerID].lp_field_18 ^ 1]], MON_DATA_NICKNAME, text); + StringGetEnd10(text); + toCpy = text; + break; + case 8: // link second player poke name + GetMonData(&gPlayerParty[gBattlePartyID[gLinkPlayers[multiplayerID].lp_field_18 ^ 2]], MON_DATA_NICKNAME, text); + StringGetEnd10(text); + toCpy = text; + break; + case 9: // link second opponent poke name + GetMonData(&gEnemyParty[gBattlePartyID[gLinkPlayers[multiplayerID].lp_field_18 ^ 3]], MON_DATA_NICKNAME, text); + StringGetEnd10(text); + toCpy = text; + break; + case 10: // attacker name with prefix, only bank 0/1 + if (GetBankSide(gBankAttacker) != 0) + { + if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) + toCpy = gUnknown_08400797; + else + toCpy = gUnknown_08400791; + while (*toCpy != EOS) + { + dst[dstID] = *toCpy; + dstID++; + toCpy++; + } + GetMonData(&gEnemyParty[gBattlePartyID[GetBankByPlayerAI(GetBankIdentity(gBankAttacker) & 1)]], MON_DATA_NICKNAME, text); + } + else + GetMonData(&gPlayerParty[gBattlePartyID[GetBankByPlayerAI(GetBankIdentity(gBankAttacker) & 1)]], MON_DATA_NICKNAME, text); + + StringGetEnd10(text); + toCpy = text; + break; + case 11: // attacker partner name, only bank 0/1 + if (GetBankSide(gBankAttacker) == 0) + GetMonData(&gPlayerParty[gBattlePartyID[GetBankByPlayerAI(GetBankIdentity(gBankAttacker) & 1) + 2]], MON_DATA_NICKNAME, text); + else + GetMonData(&gEnemyParty[gBattlePartyID[GetBankByPlayerAI(GetBankIdentity(gBankAttacker) & 1) + 2]], MON_DATA_NICKNAME, text); + + StringGetEnd10(text); + toCpy = text; + break; + case 12: // attacker name with prefix + if (GetBankSide(gBankAttacker) != 0) + { + if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) + toCpy = gUnknown_08400797; + else + toCpy = gUnknown_08400791; + while (*toCpy != EOS) + { + dst[dstID] = *toCpy; + dstID++; + toCpy++; + } + GetMonData(&gEnemyParty[gBattlePartyID[gBankAttacker]], MON_DATA_NICKNAME, text); + } + else + GetMonData(&gPlayerParty[gBattlePartyID[gBankAttacker]], MON_DATA_NICKNAME, text); + + StringGetEnd10(text); + toCpy = text; + break; + case 13: // target name with prefix + if (GetBankSide(gBankTarget) != 0) + { + if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) + toCpy = gUnknown_08400797; + else + toCpy = gUnknown_08400791; + while (*toCpy != EOS) + { + dst[dstID] = *toCpy; + dstID++; + toCpy++; + } + GetMonData(&gEnemyParty[gBattlePartyID[gBankTarget]], MON_DATA_NICKNAME, text); + } + else + GetMonData(&gPlayerParty[gBattlePartyID[gBankTarget]], MON_DATA_NICKNAME, text); + + StringGetEnd10(text); + toCpy = text; + break; + case 14: // effect bank name with prefix + if (GetBankSide(gEffectBank) != 0) + { + if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) + toCpy = gUnknown_08400797; + else + toCpy = gUnknown_08400791; + while (*toCpy != EOS) + { + dst[dstID] = *toCpy; + dstID++; + toCpy++; + } + GetMonData(&gEnemyParty[gBattlePartyID[gEffectBank]], MON_DATA_NICKNAME, text); + } + else + GetMonData(&gPlayerParty[gBattlePartyID[gEffectBank]], MON_DATA_NICKNAME, text); + + StringGetEnd10(text); + toCpy = text; + break; + case 15: // active bank name with prefix + if (GetBankSide(gActiveBank) != 0) + { + if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) + toCpy = gUnknown_08400797; + else + toCpy = gUnknown_08400791; + while (*toCpy != EOS) + { + dst[dstID] = *toCpy; + dstID++; + toCpy++; + } + GetMonData(&gEnemyParty[gBattlePartyID[gActiveBank]], MON_DATA_NICKNAME, text); + } + else + GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_NICKNAME, text); + + StringGetEnd10(text); + toCpy = text; + break; + case 16: // scripting active bank name with prefix + if (GetBankSide(BATTLE_STRUCT->scriptingActive) != 0) + { + if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) + toCpy = gUnknown_08400797; + else + toCpy = gUnknown_08400791; + while (*toCpy != EOS) + { + dst[dstID] = *toCpy; + dstID++; + toCpy++; + } + GetMonData(&gEnemyParty[gBattlePartyID[BATTLE_STRUCT->scriptingActive]], MON_DATA_NICKNAME, text); + } + else + GetMonData(&gPlayerParty[gBattlePartyID[BATTLE_STRUCT->scriptingActive]], MON_DATA_NICKNAME, text); + + StringGetEnd10(text); + toCpy = text; + break; + case 17: // current move name + if (gStringInfo->currentMove > 0x162) + toCpy = (void*) &gUnknown_08401674[BATTLE_STRUCT->stringMoveType]; + else + toCpy = gMoveNames[gStringInfo->currentMove]; + break; + case 18: // last used move name + if (gStringInfo->lastMove > 0x162) + toCpy = (void*) &gUnknown_08401674[BATTLE_STRUCT->stringMoveType]; + else + toCpy = gMoveNames[gStringInfo->lastMove]; + break; + case 19: // last used item + if (gBattleTypeFlags & BATTLE_TYPE_LINK) + { + if (gLastUsedItem == ITEM_ENIGMA_BERRY) + { + if (gLinkPlayers[BATTLE_STRUCT->linkPlayerIndex].lp_field_18 == gStringBank) + { + StringCopy(text, gEnigmaBerries[gStringBank].name); + StringAppend(text, gUnknown_08400A85); + toCpy = text; + } + else + toCpy = gUnknown_08400A78; + } + else + { + CopyItemName(gLastUsedItem, text); + toCpy = text; + } + } + else + { + CopyItemName(gLastUsedItem, text); + toCpy = text; + } + break; + case 20: // last used ability + toCpy = gAbilityNames[gLastUsedAbility]; + break; + case 21: // attacker ability + toCpy = gAbilityNames[gAbilitiesPerBank[gBankAttacker]]; + break; + case 22: // target ability + toCpy = gAbilityNames[gAbilitiesPerBank[gBankTarget]]; + break; + case 23: // scripting active ability + toCpy = gAbilityNames[gAbilitiesPerBank[BATTLE_STRUCT->scriptingActive]]; + break; + case 24: // effect bank ability + toCpy = gAbilityNames[gAbilitiesPerBank[gEffectBank]]; + break; + case 25: // trainer class name + if (gTrainerBattleOpponent == 0x400) + toCpy = gTrainerClassNames[GetSecretBaseTrainerNameIndex()]; + else if (gBattleTypeFlags & BATTLE_TYPE_BATTLE_TOWER) + toCpy = gTrainerClassNames[get_trainer_class_name_index()]; + else if (gBattleTypeFlags & BATTLE_TYPE_EREADER_TRAINER) + toCpy = gTrainerClassNames[sub_8135FD8()]; + else + toCpy = gTrainerClassNames[gTrainers[gTrainerBattleOpponent].trainerClass]; + break; + case 26: // trainer name + if (gTrainerBattleOpponent == 0x400) + { + memset(text, 0xFF, 8); + memcpy(text, &ewram[0x17002], 7); + toCpy = text; + } + else if (gBattleTypeFlags & BATTLE_TYPE_BATTLE_TOWER) + { + get_trainer_name(text); + toCpy = text; + } + else if (gBattleTypeFlags & BATTLE_TYPE_EREADER_TRAINER) + { + sub_8135FF4(text); + toCpy = text; + } + else + toCpy = gTrainers[gTrainerBattleOpponent].trainerName; + break; + case 27: // link player name? + toCpy = gLinkPlayers[multiplayerID].name; + break; + case 28: // link partner name? + toCpy = gLinkPlayers[sub_803FC34(2 ^ gLinkPlayers[multiplayerID].lp_field_18)].name; + break; + case 29: // link opponent 1 name? + toCpy = gLinkPlayers[sub_803FC34(1 ^ gLinkPlayers[multiplayerID].lp_field_18)].name; + break; + case 30: // link opponent 2 name? + toCpy = gLinkPlayers[sub_803FC34(3 ^ gLinkPlayers[multiplayerID].lp_field_18)].name; + break; + case 31: // link scripting active name + toCpy = gLinkPlayers[sub_803FC34(BATTLE_STRUCT->scriptingActive)].name; + break; + case 32: // player name + toCpy = gSaveBlock2.playerName; + break; + case 33: // ? + toCpy = sub_8082830(); + break; + case 34: // ? + if (GetBankSide(BATTLE_STRUCT->scriptingActive) != 0) + { + if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) + toCpy = gUnknown_08400797; + else + toCpy = gUnknown_08400791; + while (*toCpy != EOS) + { + dst[dstID] = *toCpy; + dstID++; + toCpy++; + } + GetMonData(&gEnemyParty[BATTLE_STRUCT->unk1605E], MON_DATA_NICKNAME, text); + } + else + GetMonData(&gPlayerParty[BATTLE_STRUCT->unk1605E], MON_DATA_NICKNAME, text); + + StringGetEnd10(text); + toCpy = text; + break; + case 35: // lanette pc + if (FlagGet(SYS_PC_LANETTE)) + toCpy = gUnknown_084009F7; + else + toCpy = gUnknown_084009ED; + break; + case 38: + if (GetBankSide(gBankAttacker) == 0) + toCpy = gUnknown_084007AC; + else + toCpy = gUnknown_084007A7; + break; + case 39: + if (GetBankSide(gBankTarget) == 0) + toCpy = gUnknown_084007AC; + else + toCpy = gUnknown_084007A7; + break; + case 36: + if (GetBankSide(gBankAttacker) == 0) + toCpy = gUnknown_084007A1; + else + toCpy = gUnknown_0840079C; + break; + case 37: + if (GetBankSide(gBankTarget) == 0) + toCpy = gUnknown_084007A1; + else + toCpy = gUnknown_0840079C; + break; + case 40: + if (GetBankSide(gBankAttacker) == 0) + toCpy = gUnknown_084007B7; + else + toCpy = gUnknown_084007B2; + break; + case 41: + if (GetBankSide(gBankTarget) == 0) + toCpy = gUnknown_084007B7; + else + toCpy = gUnknown_084007B2; + break; + } + //if (toCpy != NULL) really GF, why did you forgot about this + while (*toCpy != EOS) + { + dst[dstID] = *toCpy; + dstID++; + toCpy++; + } + if (*src == 33) + { + dst[dstID] = 0xFC; + dstID++; + dst[dstID] = 9; + dstID++; + } + } + else + { + dst[dstID] = *src; + dstID++; + } + src++; + } + dst[dstID] = *src; + dstID++; + return dstID; +} + +#define ByteRead16(ptr) ((ptr)[0] | ((ptr)[1] << 8)) +#define ByteRead32(ptr) ((ptr)[0] | (ptr)[1] << 8 | (ptr)[2] << 16 | (ptr)[3] << 24) + +static void StrCpyDecodeBattleTextBuff(u8* src, u8* dst) +{ + u32 srcID = 1; + u32 value = 0; + u8 text[12]; + + *dst = EOS; + while (src[srcID] != EOS) + { + switch (src[srcID]) + { + case 0: // battlescript ptr + { + u16 BS_ID = ByteRead16(&src[srcID + 1]); + StringAppend(dst, gBattleStringsTable[BS_ID - BATTLESTRING_TO_SUB]); + srcID += 3; + } + break; + case 1: // int to string + switch (src[srcID + 1]) + { + case 1: + value = src[srcID + 3]; + break; + case 2: + value = ByteRead16(&src[srcID + 3]); + break; + case 4: + value = ByteRead32(&src[srcID + 3]); + break; + } + ConvertIntToDecimalStringN(dst, value, 0, src[srcID + 2]); + srcID += src[srcID + 1] + 3; + break; + case 2: // move name + StringAppend(dst, gMoveNames[ByteRead16(&src[srcID + 1])]); + srcID += 3; + break; + case 3: // type name + StringAppend(dst, gTypeNames[src[srcID + 1]]); + srcID += 2; + break; + case 4: // poke nick with prefix + if (GetBankSide(src[srcID + 1]) == 0) + { + GetMonData(&gPlayerParty[src[srcID + 2]], MON_DATA_NICKNAME, text); + } + else + { + if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) + StringAppend(dst, gUnknown_08400797); + else + StringAppend(dst, gUnknown_08400791); + GetMonData(&gEnemyParty[src[srcID + 2]], MON_DATA_NICKNAME, text); + } + StringGetEnd10(text); + StringAppend(dst, text); + srcID += 3; + break; + case 5: // stats + StringAppend(dst, gUnknown_08400F58[src[srcID + 1]]); + srcID += 2; + break; + case 6: // species name + GetSpeciesName(dst, ByteRead16(&src[srcID + 1])); + srcID += 3; + break; + case 7: // poke nick without prefix + if (GetBankSide(src[srcID + 1]) == 0) + GetMonData(&gPlayerParty[src[srcID + 2]], MON_DATA_NICKNAME, dst); + else + GetMonData(&gEnemyParty[src[srcID + 2]], MON_DATA_NICKNAME, dst); + StringGetEnd10(dst); + srcID += 3; + break; + case 8: // flavour table + StringAppend(dst, gUnknown_08400F78[src[srcID + 1]]); + srcID += 2; + break; + case 9: // ability names + StringAppend(dst, gAbilityNames[src[srcID + 1]]); + srcID += 2; + break; + case 10: // item name + { + u16 item = ByteRead16(&src[srcID + 1]); + if (gBattleTypeFlags & BATTLE_TYPE_LINK) + { + if (item == ITEM_ENIGMA_BERRY) + { + if (gLinkPlayers[BATTLE_STRUCT->linkPlayerIndex].lp_field_18 == gStringBank) + { + StringCopy(dst, gEnigmaBerries[gStringBank].name); + StringAppend(dst, gUnknown_08400A85); + } + else + StringAppend(dst, gUnknown_08400A78); + } + else + CopyItemName(item, dst); + } + else + CopyItemName(item, dst); + srcID += 3; + } + break; + } + } +} + +static void sub_8121D1C(u8* textBuff) +{ + s32 counter = 0; + u32 i = 0; + + while (counter != 4) + { + if (gUnknown_084016BC[i] == 0) + counter++; + if (gUnknown_084016BC[i++] == gStringInfo->currentMove) + break; + } + + if (counter >= 0) + { + if (counter <= 2) + StringCopy(textBuff, gUnknown_08400E5E); // is + else if (counter <= 4) + StringCopy(textBuff, gUnknown_08400E62); // 's + } +} + +#ifdef NONMATCHING + +static void sub_8121D74(u8* dst) +{ + s32 counter = 0; + s32 i; + + while (*dst != EOS) + dst++; + + i = 0; + while (counter != 4) + { + if (gUnknown_084016BC[i] == 0) + counter++; + if (gUnknown_084016BC[i++] == gStringInfo->currentMove) + break; + } + switch (counter) + { + case 0: + StringCopy(dst, gUnknown_084007C8); + break; + case 1: + StringCopy(dst, gUnknown_084007CA); + break; + case 2: + StringCopy(dst, gUnknown_084007CC); + break; + case 3: + StringCopy(dst, gUnknown_084007CE); + break; + case 4: + StringCopy(dst, gUnknown_084007D0); + break; + } +} + +#else +__attribute__((naked)) +static void sub_8121D74(u8* dst) +{ + asm(".syntax unified\n\ + push {r4,r5,lr}\n\ + adds r3, r0, 0\n\ + movs r4, 0\n\ + b _08121D7E\n\ +_08121D7C:\n\ + adds r3, 0x1\n\ +_08121D7E:\n\ + ldrb r0, [r3]\n\ + cmp r0, 0xFF\n\ + bne _08121D7C\n\ + ldr r1, _08121DB4 @ =gUnknown_084016BC\n\ + ldr r5, _08121DB8 @ =gSelectedOrderFromParty\n\ + movs r0, 0\n\ + lsls r0, 1\n\ + adds r2, r0, r1\n\ +_08121D8E:\n\ + cmp r4, 0x4\n\ + beq _08121DA8\n\ + ldrh r1, [r2]\n\ + cmp r1, 0\n\ + bne _08121D9A\n\ + adds r4, 0x1\n\ +_08121D9A:\n\ + ldr r0, [r5]\n\ + adds r2, 0x2\n\ + ldrh r0, [r0]\n\ + cmp r1, r0\n\ + bne _08121D8E\n\ + cmp r4, 0x4\n\ + bhi _08121E04\n\ +_08121DA8:\n\ + lsls r0, r4, 2\n\ + ldr r1, _08121DBC @ =_08121DC0\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + mov pc, r0\n\ + .align 2, 0\n\ +_08121DB4: .4byte gUnknown_084016BC\n\ +_08121DB8: .4byte gSelectedOrderFromParty\n\ +_08121DBC: .4byte _08121DC0\n\ + .align 2, 0\n\ +_08121DC0:\n\ + .4byte _08121DD4\n\ + .4byte _08121DDC\n\ + .4byte _08121DE4\n\ + .4byte _08121DEC\n\ + .4byte _08121DFC\n\ +_08121DD4:\n\ + ldr r1, _08121DD8 @ =gUnknown_084007C8\n\ + b _08121DEE\n\ + .align 2, 0\n\ +_08121DD8: .4byte gUnknown_084007C8\n\ +_08121DDC:\n\ + ldr r1, _08121DE0 @ =gUnknown_084007CA\n\ + b _08121DEE\n\ + .align 2, 0\n\ +_08121DE0: .4byte gUnknown_084007CA\n\ +_08121DE4:\n\ + ldr r1, _08121DE8 @ =gUnknown_084007CC\n\ + b _08121DEE\n\ + .align 2, 0\n\ +_08121DE8: .4byte gUnknown_084007CC\n\ +_08121DEC:\n\ + ldr r1, _08121DF8 @ =gUnknown_084007CE\n\ +_08121DEE:\n\ + adds r0, r3, 0\n\ + bl StringCopy\n\ + b _08121E04\n\ + .align 2, 0\n\ +_08121DF8: .4byte gUnknown_084007CE\n\ +_08121DFC:\n\ + ldr r1, _08121E0C @ =gUnknown_084007D0\n\ + adds r0, r3, 0\n\ + bl StringCopy\n\ +_08121E04:\n\ + pop {r4,r5}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_08121E0C: .4byte gUnknown_084007D0\n\ + .syntax divided"); +} + +#endif // NONMATCHING |