From 4aa3ff78ecb33723818e44595f0b54c6fd1ca7a9 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 11 Oct 2019 11:55:54 -0400 Subject: Dump in-game trades --- asm/trade.s | 16 ++--- data/data.s | 8 ++- data/ingame_trades.inc | 162 +++++++++++++++++++++++++++++++++++++++++++++++++ src/trade.c | 3 + 4 files changed, 178 insertions(+), 11 deletions(-) create mode 100644 data/ingame_trades.inc create mode 100644 src/trade.c diff --git a/asm/trade.s b/asm/trade.s index 8e6131f9d..de2dc48e8 100644 --- a/asm/trade.s +++ b/asm/trade.s @@ -8917,7 +8917,7 @@ _08050EB4: lsls r4, r0, 4 subs r4, r0 lsls r4, 2 - ldr r0, _08050EFC @ =gUnknown_826CF8C + ldr r0, _08050EFC @ =gIngameTrades adds r4, r0 ldr r0, _08050F00 @ =gStringVar1 adds r1, r4, 0 @@ -8945,7 +8945,7 @@ _08050EF0: bx r0 .align 2, 0 _08050EF8: .4byte gSpecialVar_0x8004 -_08050EFC: .4byte gUnknown_826CF8C +_08050EFC: .4byte gIngameTrades _08050F00: .4byte gStringVar1 _08050F04: .4byte gStringVar3 _08050F08: .4byte gSpecialVar_0x8005 @@ -13787,7 +13787,7 @@ sub_8053A9C: @ 8053A9C lsls r4, r0, 4 subs r4, r0 lsls r4, 2 - ldr r0, _08053AD4 @ =gUnknown_826CF8C + ldr r0, _08053AD4 @ =gIngameTrades adds r4, r0 ldr r0, _08053AD8 @ =gStringVar1 ldrh r1, [r4, 0x38] @@ -13807,7 +13807,7 @@ sub_8053A9C: @ 8053A9C bx r1 .align 2, 0 _08053AD0: .4byte gSpecialVar_0x8004 -_08053AD4: .4byte gUnknown_826CF8C +_08053AD4: .4byte gIngameTrades _08053AD8: .4byte gStringVar1 _08053ADC: .4byte gSpeciesNames _08053AE0: .4byte gStringVar2 @@ -13822,7 +13822,7 @@ sub_8053AE4: @ 8053AE4 lsls r4, r0, 4 subs r4, r0 lsls r4, 2 - ldr r0, _08053B30 @ =gUnknown_826CF8C + ldr r0, _08053B30 @ =gIngameTrades adds r4, r0 ldr r0, _08053B34 @ =gSpecialVar_0x8005 ldrh r1, [r0] @@ -13849,7 +13849,7 @@ sub_8053AE4: @ 8053AE4 bx r0 .align 2, 0 _08053B2C: .4byte gSpecialVar_0x8004 -_08053B30: .4byte gUnknown_826CF8C +_08053B30: .4byte gIngameTrades _08053B34: .4byte gSpecialVar_0x8005 _08053B38: .4byte gPlayerParty _08053B3C: .4byte gStringVar1 @@ -13868,7 +13868,7 @@ sub_8053B48: @ 8053B48 lsls r2, r1, 4 subs r2, r1 lsls r2, 2 - ldr r1, _08053CA4 @ =gUnknown_826CF8C + ldr r1, _08053CA4 @ =gIngameTrades adds r5, r2, r1 movs r1, 0x64 muls r0, r1 @@ -14010,7 +14010,7 @@ sub_8053B48: @ 8053B48 bl SetMonData b _08053CC0 .align 2, 0 -_08053CA4: .4byte gUnknown_826CF8C +_08053CA4: .4byte gIngameTrades _08053CA8: .4byte gPlayerParty _08053CAC: .4byte gEnemyParty _08053CB0: .4byte gUnknown_2031CCC diff --git a/data/data.s b/data/data.s index 0883c65d7..6a89af93a 100644 --- a/data/data.s +++ b/data/data.s @@ -2,7 +2,10 @@ #include "constants/trainer_classes.h" #include "constants/songs.h" #include "constants/region_map.h" - .set NULL, 0 +#include "constants/species.h" +#include "constants/items.h" + .include "asm/macros.inc" + .include "constants/constants.inc" .section .rodata @@ -461,8 +464,7 @@ gUnknown_826CF60:: @ 826CF60 gUnknown_826CF88:: @ 826CF88 .incbin "baserom.gba", 0x26CF88, 0x4 -gUnknown_826CF8C:: @ 826CF8C - .incbin "baserom.gba", 0x26CF8C, 0x21C + .include "data/ingame_trades.inc" gUnknown_826D1A8:: @ 826D1A8 .incbin "baserom.gba", 0x26D1A8, 0x14 diff --git a/data/ingame_trades.inc b/data/ingame_trades.inc new file mode 100644 index 000000000..c8596c217 --- /dev/null +++ b/data/ingame_trades.inc @@ -0,0 +1,162 @@ +gIngameTrades:: @ 826CF8C + .string "MIMIEN$", 11 + .align 1 + .2byte SPECIES_MR_MIME @ species + .byte 20, 15, 17, 24, 23, 22 @ IVs + .byte FALSE @ has second ability + .align 2 + .4byte 1985 @ OT ID + .byte 5, 5, 5, 30, 5 @ contest stats + .align 2 + .4byte 0x00009cae @ personality + .2byte ITEM_NONE @ held item + .byte 255 @ mail index + .string "REYLEY$", 11 + .byte MALE @ OT gender + .byte 10 @ sheen + .2byte SPECIES_ABRA @ species requested + .align 2 + + .string "ZYNX$", 11 + .align 1 + .2byte SPECIES_JYNX @ species + .byte 18, 17, 18, 22, 25, 21 @ IVs + .byte FALSE @ has second ability + .align 2 + .4byte 36728 @ OT ID + .byte 5, 30, 5, 5, 5 @ contest stats + .align 2 + .4byte 0x498a2e1d @ personality + .2byte ITEM_FAB_MAIL @ held item + .byte 0 @ mail index + .string "DONTAE$", 11 + .byte MALE @ OT gender + .byte 10 @ sheen + .2byte SPECIES_POLIWHIRL @ species requested + .align 2 + + .string "MS. NIDO$", 11 + .align 1 + .2byte SPECIES_NIDORAN_F @ species + .byte 22, 18, 25, 19, 15, 22 @ IVs + .byte FALSE @ has second ability + .align 2 + .4byte 63184 @ OT ID + .byte 5, 5, 5, 5, 30 @ contest stats + .align 2 + .4byte 0x4c970b89 @ personality + .2byte ITEM_TINY_MUSHROOM @ held item + .byte 255 @ mail index + .string "SAIGE$", 11 + .byte FEMALE @ OT gender + .byte 10 @ sheen + .2byte SPECIES_NIDORAN_M @ species requested + .align 2 + + .string "CH'DING$", 11 + .align 1 + .2byte SPECIES_FARFETCHD @ species + .byte 20, 25, 21, 24, 15, 20 @ IVs + .byte FALSE @ has second ability + .align 2 + .4byte 8810 @ OT ID + .byte 30, 5, 5, 5, 5 @ contest stats + .align 2 + .4byte 0x151943d7 @ personality + .2byte ITEM_STICK @ held item + .byte 255 @ mail index + .string "ELYSSA$", 11 + .byte MALE @ OT gender + .byte 10 @ sheen + .2byte SPECIES_SPEAROW @ species requested + .align 2 + + .string "NINA$", 11 + .align 1 + .2byte SPECIES_NIDORINA @ species + .byte 22, 25, 18, 19, 22, 15 @ IVs + .byte FALSE @ has second ability + .align 2 + .4byte 13637 @ OT ID + .byte 5, 5, 30, 5, 5 @ contest stats + .align 2 + .4byte 0x00eeca15 @ personality + .2byte ITEM_NONE @ held item + .byte 255 @ mail index + .string "TURNER$", 11 + .byte MALE @ OT gender + .byte 10 @ sheen + .2byte SPECIES_NIDORINO @ species requested + .align 2 + + .string "MARC$", 11 + .align 1 + .2byte SPECIES_LICKITUNG @ species + .byte 24, 19, 21, 15, 23, 21 @ IVs + .byte FALSE @ has second ability + .align 2 + .4byte 1239 @ OT ID + .byte 5, 5, 5, 5, 30 @ contest stats + .align 2 + .4byte 0x451308ab @ personality + .2byte ITEM_NONE @ held item + .byte 255 @ mail index + .string "HADEN$", 11 + .byte MALE @ OT gender + .byte 10 @ sheen + .2byte SPECIES_GOLDUCK @ species requested + .align 2 + + .string "ESPHERE$", 11 + .align 1 + .2byte SPECIES_ELECTRODE @ species + .byte 19, 16, 18, 25, 25, 19 @ IVs + .byte TRUE @ has second ability + .align 2 + .4byte 50298 @ OT ID + .byte 30, 5, 5, 5, 5 @ contest stats + .align 2 + .4byte 0x06341016 @ personality + .2byte ITEM_NONE @ held item + .byte 255 @ mail index + .string "CLIFTON$", 11 + .byte MALE @ OT gender + .byte 10 @ sheen + .2byte SPECIES_RAICHU @ species requested + .align 2 + + .string "TANGENY$", 11 + .align 1 + .2byte SPECIES_TANGELA @ species + .byte 22, 17, 25, 16, 23, 20 @ IVs + .byte FALSE @ has second ability + .align 2 + .4byte 60042 @ OT ID + .byte 5, 5, 30, 5, 5 @ contest stats + .align 2 + .4byte 0x5c77ecfa @ personality + .2byte ITEM_STARDUST @ held item + .byte 255 @ mail index + .string "NORMA$", 11 + .byte FEMALE @ OT gender + .byte 10 @ sheen + .2byte SPECIES_VENONAT @ species requested + .align 2 + + .string "SEELOR$", 11 + .align 1 + .2byte SPECIES_SEEL @ species + .byte 24, 15, 22, 16, 23, 22 @ IVs + .byte FALSE @ has second ability + .align 2 + .4byte 9853 @ OT ID + .byte 5, 5, 5, 5, 30 @ contest stats + .align 2 + .4byte 0x482cac89 @ personality + .2byte ITEM_NONE @ held item + .byte 255 @ mail index + .string "GARETT$", 11 + .byte MALE @ OT gender + .byte 10 @ sheen + .2byte SPECIES_PONYTA @ species requested + .align 2 diff --git a/src/trade.c b/src/trade.c new file mode 100644 index 000000000..5c17035fa --- /dev/null +++ b/src/trade.c @@ -0,0 +1,3 @@ +#include "global.h" + + -- cgit v1.2.3 From 03444691a58b5d78b032c8657fe8d606d1057472 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 11 Oct 2019 12:06:17 -0400 Subject: Dump Jynx mail --- data/data.s | 4 +--- data/ingame_trades.inc | 12 ++++++++++++ 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/data/data.s b/data/data.s index 6a89af93a..c85c8d903 100644 --- a/data/data.s +++ b/data/data.s @@ -4,6 +4,7 @@ #include "constants/region_map.h" #include "constants/species.h" #include "constants/items.h" +#include "constants/easy_chat.h" .include "asm/macros.inc" .include "constants/constants.inc" @@ -466,9 +467,6 @@ gUnknown_826CF88:: @ 826CF88 .include "data/ingame_trades.inc" -gUnknown_826D1A8:: @ 826D1A8 - .incbin "baserom.gba", 0x26D1A8, 0x14 - gUnknown_826D1BC:: @ 826D1BC .incbin "baserom.gba", 0x26D1BC, 0x10 diff --git a/data/ingame_trades.inc b/data/ingame_trades.inc index c8596c217..c3447d79b 100644 --- a/data/ingame_trades.inc +++ b/data/ingame_trades.inc @@ -160,3 +160,15 @@ gIngameTrades:: @ 826CF8C .byte 10 @ sheen .2byte SPECIES_PONYTA @ species requested .align 2 + +gUnknown_826D1A8:: @ 826D1A8 + .2byte EC_WORD_THAT_S + .2byte EC_WORD_A + .2byte EC_WORD_HEALTHY + .2byte EC_POKEMON2(JYNX) + .2byte EC_WORD_EXCL + .2byte EC_WORD_BE + .2byte EC_WORD_KIND + .2byte EC_WORD_TO + .2byte EC_WORD_IT + .2byte 0 -- cgit v1.2.3 From 9fe74ac590f75a0571de8ebcd499fdf892419328 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 14 Oct 2019 09:40:17 -0400 Subject: trade through sub_804C728 (nonmatching --- asm/naming_screen.s | 4 +- asm/party_menu.s | 12 +- asm/pokemon_icon.s | 12 +- asm/pokemon_storage_system.s | 2 +- asm/pokemon_summary_screen.s | 2 +- asm/trade.s | 1080 +------------------------------------- data/data.s | 28 +- include/link.h | 7 +- include/link_rfu.h | 2 + include/party_menu.h | 1 + include/pokemon_icon.h | 4 +- include/pokemon_storage_system.h | 1 + ld_script.txt | 1 + src/mevent_8145654.c | 2 +- src/trade.c | 405 ++++++++++++++ 15 files changed, 474 insertions(+), 1089 deletions(-) diff --git a/asm/naming_screen.s b/asm/naming_screen.s index ef692b052..339af1a55 100644 --- a/asm/naming_screen.s +++ b/asm/naming_screen.s @@ -2849,7 +2849,7 @@ _0809EFEC: .4byte gUnknown_83E252C sub_809EFF0: @ 809EFF0 push {lr} sub sp, 0xC - bl sub_809707C + bl LoadMonIconPalettes ldr r0, _0809F038 @ =gUnknown_203998C ldr r3, [r0] ldr r1, _0809F03C @ =0x00001e34 @@ -2866,7 +2866,7 @@ sub_809EFF0: @ 809EFF0 str r2, [sp, 0x8] movs r2, 0x38 movs r3, 0x28 - bl sub_8096E18 + bl CreateMonIcon lsls r0, 24 lsrs r0, 24 ldr r2, _0809F048 @ =gSprites diff --git a/asm/party_menu.s b/asm/party_menu.s index 899e8e7ea..be2b27e91 100644 --- a/asm/party_menu.s +++ b/asm/party_menu.s @@ -364,7 +364,7 @@ _0811ED14: _0811ED30: .4byte gUnknown_203B0A0 _0811ED34: .4byte gUnknown_203B09C _0811ED38: - bl sub_8122550 + bl LoadHeldItemIcons b _0811EDFC _0811ED3E: bl sub_8122860 @@ -373,7 +373,7 @@ _0811ED44: bl sub_8122980 b _0811EDFC _0811ED4A: - bl sub_809707C + bl LoadMonIconPalettes b _0811EDFC _0811ED50: bl party_menu_add_per_mon_objects @@ -7216,7 +7216,7 @@ party_menu_link_mon_icon_anim: @ 812224C ldr r0, [sp, 0x20] str r0, [sp, 0x8] adds r0, r5, 0 - bl sub_8096E18 + bl CreateMonIcon strb r0, [r4, 0x9] ldr r2, _081222A8 @ =gSprites ldrb r0, [r4, 0x9] @@ -7598,8 +7598,8 @@ _08122544: _0812254C: .4byte gSprites thumb_func_end sub_81224D0 - thumb_func_start sub_8122550 -sub_8122550: @ 8122550 + thumb_func_start LoadHeldItemIcons +LoadHeldItemIcons: @ 8122550 push {lr} ldr r0, _08122564 @ =gUnknown_845A42C bl LoadSpriteSheet @@ -7610,7 +7610,7 @@ sub_8122550: @ 8122550 .align 2, 0 _08122564: .4byte gUnknown_845A42C _08122568: .4byte gUnknown_845A434 - thumb_func_end sub_8122550 + thumb_func_end LoadHeldItemIcons thumb_func_start sub_812256C sub_812256C: @ 812256C diff --git a/asm/pokemon_icon.s b/asm/pokemon_icon.s index 4eb654a50..f7ab6b1a6 100644 --- a/asm/pokemon_icon.s +++ b/asm/pokemon_icon.s @@ -5,8 +5,8 @@ .text - thumb_func_start sub_8096E18 -sub_8096E18: @ 8096E18 + thumb_func_start CreateMonIcon +CreateMonIcon: @ 8096E18 push {r4-r7,lr} mov r7, r9 mov r6, r8 @@ -89,7 +89,7 @@ _08096EBC: .4byte gUnknown_83D40E0 _08096EC0: .4byte gUnknown_83D3E80 _08096EC4: .4byte 0x0000dac0 _08096EC8: .4byte gSprites - thumb_func_end sub_8096E18 + thumb_func_end CreateMonIcon thumb_func_start sub_8096ECC sub_8096ECC: @ 8096ECC @@ -330,8 +330,8 @@ sub_8097070: @ 8097070 bx r0 thumb_func_end sub_8097070 - thumb_func_start sub_809707C -sub_809707C: @ 809707C + thumb_func_start LoadMonIconPalettes +LoadMonIconPalettes: @ 809707C push {r4,r5,lr} movs r4, 0 ldr r5, _0809709C @ =gUnknown_83D4038 @@ -349,7 +349,7 @@ _08097082: bx r0 .align 2, 0 _0809709C: .4byte gUnknown_83D4038 - thumb_func_end sub_809707C + thumb_func_end LoadMonIconPalettes thumb_func_start SafeLoadMonIconPalette SafeLoadMonIconPalette: @ 80970A0 diff --git a/asm/pokemon_storage_system.s b/asm/pokemon_storage_system.s index 180ec0e5d..9584b81a2 100644 --- a/asm/pokemon_storage_system.s +++ b/asm/pokemon_storage_system.s @@ -8688,7 +8688,7 @@ _0808FFA8: .4byte 0x00004037 thumb_func_start sub_808FFAC sub_808FFAC: @ 808FFAC push {r4-r6,lr} - bl sub_809707C + bl LoadMonIconPalettes movs r2, 0 ldr r3, _0809003C @ =gUnknown_20397B0 ldr r5, _08090040 @ =0x00000b04 diff --git a/asm/pokemon_summary_screen.s b/asm/pokemon_summary_screen.s index 71e5cbfaf..24f7d7783 100644 --- a/asm/pokemon_summary_screen.s +++ b/asm/pokemon_summary_screen.s @@ -10814,7 +10814,7 @@ _08139E58: adds r0, r5, 0 movs r2, 0x18 movs r3, 0x20 - bl sub_8096E18 + bl CreateMonIcon ldr r1, [r6] ldr r2, _08139E9C @ =0x00003014 adds r1, r2 diff --git a/asm/trade.s b/asm/trade.s index de2dc48e8..c960a7302 100644 --- a/asm/trade.s +++ b/asm/trade.s @@ -5,1048 +5,6 @@ .text - thumb_func_start sub_804C600 -sub_804C600: @ 804C600 - push {r4,r5,lr} - sub sp, 0xC - bl ResetSpriteData - bl FreeAllSpritePalettes - bl ResetTasks - bl ResetPaletteFade - ldr r2, _0804C6F8 @ =gPaletteFade - ldrb r0, [r2, 0x8] - movs r1, 0x80 - orrs r0, r1 - strb r0, [r2, 0x8] - ldr r0, _0804C6FC @ =sub_804D4F8 - bl SetVBlankCallback - ldr r4, _0804C700 @ =gTMCaseMainWindowPalette - adds r0, r4, 0 - movs r1, 0xF0 - movs r2, 0x14 - bl LoadPalette - adds r0, r4, 0 - movs r1, 0xD0 - movs r2, 0x14 - bl LoadPalette - movs r0, 0 - bl ResetBgsAndClearDma3BusyFlags - ldr r1, _0804C704 @ =gUnknown_8261F1C - movs r0, 0 - movs r2, 0x4 - bl InitBgsFromTemplates - ldr r0, _0804C708 @ =gUnknown_2031DA8 - ldr r1, [r0] - movs r0, 0x8F - lsls r0, 4 - adds r1, r0 - movs r0, 0x1 - bl SetBgTilemapBuffer - ldr r0, _0804C70C @ =gUnknown_8261F2C - bl InitWindows - lsls r0, 16 - cmp r0, 0 - beq _0804C6F0 - bl DeactivateAllTextPrinters - ldr r1, _0804C710 @ =gUnknown_3000E78 - ldr r2, _0804C714 @ =0x0000024e - adds r0, r2, 0 - strh r0, [r1] - movs r5, 0 -_0804C674: - lsls r4, r5, 24 - lsrs r4, 24 - adds r0, r4, 0 - bl ClearWindowTilemap - adds r0, r4, 0 - movs r1, 0 - bl FillWindowPixelBuffer - adds r5, 0x1 - cmp r5, 0x11 - bls _0804C674 - movs r0, 0x1E - str r0, [sp] - movs r0, 0x14 - str r0, [sp, 0x4] - movs r0, 0xF - str r0, [sp, 0x8] - movs r0, 0 - movs r1, 0 - movs r2, 0 - movs r3, 0 - bl FillBgTilemapBufferRect - movs r0, 0 - movs r1, 0x14 - movs r2, 0xC0 - bl TextWindow_SetStdFrame0_WithPal - movs r0, 0x2 - movs r1, 0x1 - movs r2, 0xE0 - bl TextWindow_SetUserSelectedFrame - bl sub_809707C - ldr r2, _0804C708 @ =gUnknown_2031DA8 - ldr r0, [r2] - adds r0, 0x69 - movs r1, 0 - strb r1, [r0] - ldr r0, [r2] - adds r0, 0x6F - strb r1, [r0] - ldr r0, [r2] - adds r0, 0x70 - strb r1, [r0] - ldr r0, [r2] - adds r0, 0x74 - strb r1, [r0] - ldr r0, [r2] - adds r0, 0x75 - strb r1, [r0] - ldr r0, [r2] - adds r0, 0x7A - strb r1, [r0] - ldr r0, [r2] - adds r0, 0x7B - strb r1, [r0] - ldr r0, [r2] - adds r0, 0xA8 - strb r1, [r0] -_0804C6F0: - add sp, 0xC - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0804C6F8: .4byte gPaletteFade -_0804C6FC: .4byte sub_804D4F8 -_0804C700: .4byte gTMCaseMainWindowPalette -_0804C704: .4byte gUnknown_8261F1C -_0804C708: .4byte gUnknown_2031DA8 -_0804C70C: .4byte gUnknown_8261F2C -_0804C710: .4byte gUnknown_3000E78 -_0804C714: .4byte 0x0000024e - thumb_func_end sub_804C600 - - thumb_func_start sub_804C718 -sub_804C718: @ 804C718 - push {lr} - ldr r0, _0804C724 @ =sub_804C728 - bl SetMainCallback2 - pop {r0} - bx r0 - .align 2, 0 -_0804C724: .4byte sub_804C728 - thumb_func_end sub_804C718 - - thumb_func_start sub_804C728 -sub_804C728: @ 804C728 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x28 - ldr r1, _0804C74C @ =gMain - movs r2, 0x87 - lsls r2, 3 - adds r0, r1, r2 - ldrb r0, [r0] - adds r3, r1, 0 - cmp r0, 0x16 - bls _0804C742 - b _0804CEE6 -_0804C742: - lsls r0, 2 - ldr r1, _0804C750 @ =_0804C754 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0804C74C: .4byte gMain -_0804C750: .4byte _0804C754 - .align 2, 0 -_0804C754: - .4byte _0804C7B0 - .4byte _0804C7FC - .4byte _0804C8C8 - .4byte _0804C8F4 - .4byte _0804C950 - .4byte _0804C9B0 - .4byte _0804C9F0 - .4byte _0804CA10 - .4byte _0804CB50 - .4byte _0804CB78 - .4byte _0804CB9C - .4byte _0804CC30 - .4byte _0804CC3E - .4byte _0804CD10 - .4byte _0804CDE0 - .4byte _0804CE20 - .4byte _0804CE3A - .4byte _0804CE48 - .4byte _0804CE5C - .4byte _0804CE7C - .4byte _0804CE9C - .4byte _0804CEB0 - .4byte _0804CED0 -_0804C7B0: - ldr r4, _0804C7E8 @ =gUnknown_2031DA8 - ldr r0, _0804C7EC @ =0x000010f0 - bl AllocZeroed - str r0, [r4] - bl sub_804C600 - ldr r4, _0804C7F0 @ =gUnknown_2031C90 - movs r0, 0xE0 - lsls r0, 4 - bl AllocZeroed - str r0, [r4] - movs r6, 0 - ldr r2, _0804C7F4 @ =gUnknown_2031C94 -_0804C7CE: - lsls r1, r6, 8 - ldr r0, [r4] - adds r0, r1 - stm r2!, {r0} - adds r6, 0x1 - cmp r6, 0xD - ble _0804C7CE - ldr r1, _0804C7F8 @ =gMain - movs r3, 0x87 - lsls r3, 3 - adds r1, r3 - b _0804CEC2 - .align 2, 0 -_0804C7E8: .4byte gUnknown_2031DA8 -_0804C7EC: .4byte 0x000010f0 -_0804C7F0: .4byte gUnknown_2031C90 -_0804C7F4: .4byte gUnknown_2031C94 -_0804C7F8: .4byte gMain -_0804C7FC: - ldr r2, _0804C864 @ =gPaletteFade - ldrb r1, [r2, 0x8] - movs r0, 0x7F - ands r0, r1 - strb r0, [r2, 0x8] - movs r6, 0 - movs r4, 0 -_0804C80A: - movs r0, 0x64 - muls r0, r6 - ldr r1, _0804C868 @ =gEnemyParty - adds r0, r1 - str r4, [sp] - str r4, [sp, 0x4] - str r4, [sp, 0x8] - str r4, [sp, 0xC] - movs r1, 0 - movs r2, 0 - movs r3, 0x20 - bl CreateMon - adds r6, 0x1 - cmp r6, 0x5 - ble _0804C80A - movs r0, 0 - bl sub_804F5BC - movs r0, 0 - bl ShowBg - ldr r0, _0804C86C @ =gReceivedRemoteLinkPlayers - ldrb r2, [r0] - cmp r2, 0 - bne _0804C8B4 - ldr r1, _0804C870 @ =gLinkType - ldr r5, _0804C874 @ =0x00001122 - adds r0, r5, 0 - strh r0, [r1] - ldr r0, _0804C878 @ =gUnknown_2031DA8 - ldr r0, [r0] - adds r0, 0xA8 - strb r2, [r0] - ldr r0, _0804C87C @ =gWirelessCommType - ldrb r0, [r0] - cmp r0, 0 - beq _0804C880 - bl sub_800B1F4 - bl OpenLink - bl sub_80FBB20 - b _0804C892 - .align 2, 0 -_0804C864: .4byte gPaletteFade -_0804C868: .4byte gEnemyParty -_0804C86C: .4byte gReceivedRemoteLinkPlayers -_0804C870: .4byte gLinkType -_0804C874: .4byte 0x00001122 -_0804C878: .4byte gUnknown_2031DA8 -_0804C87C: .4byte gWirelessCommType -_0804C880: - bl OpenLink - ldr r1, _0804C8A8 @ =gMain - movs r7, 0x87 - lsls r7, 3 - adds r1, r7 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] -_0804C892: - ldr r0, _0804C8AC @ =gWirelessCommType - ldrb r0, [r0] - cmp r0, 0 - beq _0804C89C - b _0804CEE6 -_0804C89C: - ldr r0, _0804C8B0 @ =sub_8081A90 - movs r1, 0x1 - bl CreateTask - b _0804CEE6 - .align 2, 0 -_0804C8A8: .4byte gMain -_0804C8AC: .4byte gWirelessCommType -_0804C8B0: .4byte sub_8081A90 -_0804C8B4: - ldr r0, _0804C8C4 @ =gMain - movs r1, 0x87 - lsls r1, 3 - adds r0, r1 - movs r1, 0x4 - strb r1, [r0] - b _0804CEE6 - .align 2, 0 -_0804C8C4: .4byte gMain -_0804C8C8: - ldr r2, _0804C8F0 @ =gUnknown_2031DA8 - ldr r1, [r2] - adds r1, 0xA8 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - ldr r0, [r2] - adds r1, r0, 0 - adds r1, 0xA8 - ldrb r0, [r1] - cmp r0, 0xB - bhi _0804C8E2 - b _0804CEE6 -_0804C8E2: - movs r0, 0 - strb r0, [r1] - movs r2, 0x87 - lsls r2, 3 - adds r1, r3, r2 - b _0804CEC2 - .align 2, 0 -_0804C8F0: .4byte gUnknown_2031DA8 -_0804C8F4: - bl GetLinkPlayerCount_2 - adds r4, r0, 0 - bl GetSavedPlayerCount - lsls r4, 24 - lsls r0, 24 - cmp r4, r0 - bcs _0804C908 - b _0804CEE6 -_0804C908: - bl IsLinkMaster - lsls r0, 24 - cmp r0, 0 - beq _0804C940 - ldr r0, _0804C938 @ =gUnknown_2031DA8 - ldr r1, [r0] - adds r1, 0xA8 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1E - bhi _0804C928 - b _0804CEE6 -_0804C928: - bl CheckShouldAdvanceLinkState - ldr r1, _0804C93C @ =gMain - movs r3, 0x87 - lsls r3, 3 - adds r1, r3 - b _0804CEC2 - .align 2, 0 -_0804C938: .4byte gUnknown_2031DA8 -_0804C93C: .4byte gMain -_0804C940: - ldr r1, _0804C94C @ =gMain - movs r5, 0x87 - lsls r5, 3 - adds r1, r5 - b _0804CEC2 - .align 2, 0 -_0804C94C: .4byte gMain -_0804C950: - ldr r0, _0804C9A0 @ =gReceivedRemoteLinkPlayers - ldrb r0, [r0] - cmp r0, 0x1 - beq _0804C95A - b _0804CEE6 -_0804C95A: - bl IsLinkPlayerDataExchangeComplete - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _0804C968 - b _0804CEE6 -_0804C968: - bl sub_80FBB4C - bl CalculatePlayerPartyCount - ldr r1, _0804C9A4 @ =gMain - movs r7, 0x87 - lsls r7, 3 - adds r1, r7 - ldrb r0, [r1] - adds r0, 0x1 - movs r2, 0 - strb r0, [r1] - ldr r0, _0804C9A8 @ =gUnknown_2031DA8 - ldr r0, [r0] - adds r0, 0xA8 - strb r2, [r0] - ldr r0, _0804C9AC @ =gWirelessCommType - ldrb r0, [r0] - cmp r0, 0 - bne _0804C992 - b _0804CEE6 -_0804C992: - movs r0, 0x1 - bl sub_80FA484 - bl sub_800AB9C - b _0804CEE6 - .align 2, 0 -_0804C9A0: .4byte gReceivedRemoteLinkPlayers -_0804C9A4: .4byte gMain -_0804C9A8: .4byte gUnknown_2031DA8 -_0804C9AC: .4byte gWirelessCommType -_0804C9B0: - ldr r0, _0804C9E0 @ =gWirelessCommType - ldrb r0, [r0] - cmp r0, 0 - beq _0804C9E8 - bl IsRfuTaskFinished - lsls r0, 24 - cmp r0, 0 - bne _0804C9C4 - b _0804CEE6 -_0804C9C4: - ldr r1, _0804C9E4 @ =gMain - movs r0, 0x87 - lsls r0, 3 - adds r1, r0 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - bl LoadWirelessStatusIndicatorSpriteGfx - movs r0, 0 - movs r1, 0 - bl CreateWirelessStatusIndicatorSprite - b _0804CEE6 - .align 2, 0 -_0804C9E0: .4byte gWirelessCommType -_0804C9E4: .4byte gMain -_0804C9E8: - movs r2, 0x87 - lsls r2, 3 - adds r1, r3, r2 - b _0804CEC2 -_0804C9F0: - bl shedinja_maker_maybe - lsls r0, 24 - cmp r0, 0 - bne _0804C9FC - b _0804CEE6 -_0804C9FC: - bl sub_804F9D8 - ldr r1, _0804CA0C @ =gMain - movs r3, 0x87 - lsls r3, 3 - adds r1, r3 - b _0804CEC2 - .align 2, 0 -_0804CA0C: .4byte gMain -_0804CA10: - bl CalculateEnemyPartyCount - movs r0, 0 - movs r1, 0 - bl SetGpuReg - movs r0, 0x50 - movs r1, 0 - bl SetGpuReg - ldr r2, _0804CB2C @ =gUnknown_2031DA8 - ldr r0, [r2] - ldr r1, _0804CB30 @ =gPlayerPartyCount - ldrb r1, [r1] - adds r0, 0x36 - strb r1, [r0] - ldr r0, [r2] - ldr r1, _0804CB34 @ =gEnemyPartyCount - ldrb r1, [r1] - adds r0, 0x37 - strb r1, [r0] - movs r6, 0 - ldr r0, [r2] - adds r0, 0x36 - ldrb r0, [r0] - cmp r6, r0 - bge _0804CAA8 - mov r8, r2 - ldr r7, _0804CB38 @ =gUnknown_8261E40 -_0804CA4A: - movs r0, 0x64 - adds r4, r6, 0 - muls r4, r0 - ldr r0, _0804CB3C @ =gPlayerParty - adds r4, r0 - adds r0, r4, 0 - movs r1, 0x41 - bl GetMonData - adds r5, r0, 0 - lsls r5, 16 - lsrs r5, 16 - adds r0, r4, 0 - movs r1, 0 - bl GetMonData - ldrb r2, [r7] - lsls r2, 19 - movs r1, 0xE0 - lsls r1, 12 - adds r2, r1 - asrs r2, 16 - ldrb r3, [r7, 0x1] - lsls r3, 19 - ldr r1, _0804CB40 @ =0xfff40000 - adds r3, r1 - asrs r3, 16 - movs r1, 0x1 - str r1, [sp] - str r0, [sp, 0x4] - str r1, [sp, 0x8] - adds r0, r5, 0 - ldr r1, _0804CB44 @ =sub_809718C - bl sub_8096E18 - mov r2, r8 - ldr r1, [r2] - adds r1, 0x28 - adds r1, r6 - strb r0, [r1] - adds r7, 0x2 - adds r6, 0x1 - ldr r0, [r2] - adds r0, 0x36 - ldrb r0, [r0] - cmp r6, r0 - blt _0804CA4A -_0804CAA8: - movs r6, 0 - ldr r1, _0804CB2C @ =gUnknown_2031DA8 - ldr r0, [r1] - adds r0, 0x37 - ldrb r0, [r0] - cmp r6, r0 - bge _0804CB20 - ldr r0, _0804CB38 @ =gUnknown_8261E40 - mov r8, r1 - adds r7, r0, 0 - adds r7, 0xC -_0804CABE: - movs r0, 0x64 - adds r4, r6, 0 - muls r4, r0 - ldr r0, _0804CB48 @ =gEnemyParty - adds r4, r0 - adds r0, r4, 0 - movs r1, 0x41 - movs r2, 0 - bl GetMonData - adds r5, r0, 0 - lsls r5, 16 - lsrs r5, 16 - adds r0, r4, 0 - movs r1, 0 - bl GetMonData - ldrb r2, [r7] - lsls r2, 19 - movs r3, 0xE0 - lsls r3, 12 - adds r2, r3 - asrs r2, 16 - ldrb r3, [r7, 0x1] - lsls r3, 19 - ldr r1, _0804CB40 @ =0xfff40000 - adds r3, r1 - asrs r3, 16 - movs r1, 0x1 - str r1, [sp] - str r0, [sp, 0x4] - movs r0, 0 - str r0, [sp, 0x8] - adds r0, r5, 0 - ldr r1, _0804CB44 @ =sub_809718C - bl sub_8096E18 - mov r2, r8 - ldr r1, [r2] - adds r1, 0x2E - adds r1, r6 - strb r0, [r1] - adds r7, 0x2 - adds r6, 0x1 - ldr r0, [r2] - adds r0, 0x37 - ldrb r0, [r0] - cmp r6, r0 - blt _0804CABE -_0804CB20: - ldr r1, _0804CB4C @ =gMain - movs r3, 0x87 - lsls r3, 3 - adds r1, r3 - b _0804CEC2 - .align 2, 0 -_0804CB2C: .4byte gUnknown_2031DA8 -_0804CB30: .4byte gPlayerPartyCount -_0804CB34: .4byte gEnemyPartyCount -_0804CB38: .4byte gUnknown_8261E40 -_0804CB3C: .4byte gPlayerParty -_0804CB40: .4byte 0xfff40000 -_0804CB44: .4byte sub_809718C -_0804CB48: .4byte gEnemyParty -_0804CB4C: .4byte gMain -_0804CB50: - bl sub_8122550 - ldr r0, _0804CB70 @ =gUnknown_2031DA8 - ldr r1, [r0] - adds r0, r1, 0 - adds r0, 0x36 - adds r1, 0x28 - movs r2, 0 - bl sub_812256C - ldr r1, _0804CB74 @ =gMain - movs r5, 0x87 - lsls r5, 3 - adds r1, r5 - b _0804CEC2 - .align 2, 0 -_0804CB70: .4byte gUnknown_2031DA8 -_0804CB74: .4byte gMain -_0804CB78: - ldr r0, _0804CB94 @ =gUnknown_2031DA8 - ldr r1, [r0] - adds r0, r1, 0 - adds r0, 0x36 - adds r1, 0x28 - movs r2, 0x1 - bl sub_812256C - ldr r1, _0804CB98 @ =gMain - movs r7, 0x87 - lsls r7, 3 - adds r1, r7 - b _0804CEC2 - .align 2, 0 -_0804CB94: .4byte gUnknown_2031DA8 -_0804CB98: .4byte gMain -_0804CB9C: - ldr r0, _0804CC14 @ =gSaveBlock2Ptr - ldr r0, [r0] - ldr r6, _0804CC18 @ =gUnknown_2031C94 - ldr r1, [r6] - ldr r5, _0804CC1C @ =gDecompressionBuffer - str r5, [sp] - movs r4, 0x3 - str r4, [sp, 0x4] - movs r2, 0 - movs r3, 0 - bl sub_808BEB4 - bl GetMultiplayerId - lsls r0, 24 - movs r1, 0x80 - lsls r1, 17 - eors r1, r0 - lsrs r1, 24 - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - ldr r1, _0804CC20 @ =gLinkPlayers + 8 - adds r0, r1 - ldr r1, [r6, 0xC] - str r5, [sp] - str r4, [sp, 0x4] - movs r2, 0 - movs r3, 0 - bl sub_808BEB4 - ldr r4, _0804CC24 @ =gUnknown_8261ECC - ldr r0, [r4] - ldr r1, [r6, 0x18] - str r5, [sp] - movs r2, 0x2 - str r2, [sp, 0x4] - movs r2, 0 - movs r3, 0 - bl sub_808BEB4 - ldr r0, [r4, 0x4] - ldr r1, [r6, 0x20] - movs r2, 0x18 - bl sub_804F728 - ldr r1, _0804CC28 @ =gMain - movs r0, 0x87 - lsls r0, 3 - adds r1, r0 - ldrb r0, [r1] - adds r0, 0x1 - movs r2, 0 - strb r0, [r1] - ldr r0, _0804CC2C @ =gUnknown_2031DA8 - ldr r0, [r0] - adds r0, 0xA8 - strb r2, [r0] - b _0804CEE6 - .align 2, 0 -_0804CC14: .4byte gSaveBlock2Ptr -_0804CC18: .4byte gUnknown_2031C94 -_0804CC1C: .4byte gDecompressionBuffer -_0804CC20: .4byte gLinkPlayers + 8 -_0804CC24: .4byte gUnknown_8261ECC -_0804CC28: .4byte gMain -_0804CC2C: .4byte gUnknown_2031DA8 -_0804CC30: - bl sub_804F610 - lsls r0, 24 - cmp r0, 0 - bne _0804CC3C - b _0804CEE6 -_0804CC3C: - b _0804CEBA -_0804CC3E: - ldr r0, _0804CCFC @ =gSaveBlock2Ptr - ldr r1, [r0] - movs r0, 0x1 - movs r2, 0 - bl GetStringWidth - adds r1, r0, 0 - movs r0, 0x38 - subs r0, r1 - lsrs r1, r0, 31 - adds r0, r1 - movs r6, 0 - add r5, sp, 0x10 - ldr r3, _0804CD00 @ =gUnknown_8261E8A - mov r8, r3 - asrs r0, 1 - ldrb r7, [r3, 0x4] - adds r4, r0, r7 -_0804CC62: - add r1, sp, 0x10 - ldr r0, _0804CD04 @ =gUnknown_8261CC8 - ldm r0!, {r2,r3,r7} - stm r1!, {r2,r3,r7} - ldm r0!, {r2,r3,r7} - stm r1!, {r2,r3,r7} - ldrh r0, [r5] - adds r0, r6 - strh r0, [r5] - lsls r1, r4, 16 - asrs r1, 16 - add r0, sp, 0x10 - mov r3, r8 - ldrb r2, [r3, 0x5] - movs r3, 0x1 - bl CreateSprite - adds r4, 0x20 - adds r6, 0x1 - cmp r6, 0x2 - ble _0804CC62 - bl GetMultiplayerId - lsls r0, 24 - movs r1, 0x80 - lsls r1, 17 - eors r1, r0 - lsrs r1, 24 - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - ldr r1, _0804CD08 @ =gLinkPlayers + 8 - adds r1, r0, r1 - movs r0, 0x1 - movs r2, 0 - bl GetStringWidth - adds r1, r0, 0 - movs r0, 0x38 - subs r0, r1 - lsrs r1, r0, 31 - adds r0, r1 - movs r6, 0 - add r5, sp, 0x10 - ldr r7, _0804CD00 @ =gUnknown_8261E8A - mov r8, r7 - asrs r0, 1 - mov r1, r8 - ldrb r1, [r1, 0x6] - adds r4, r0, r1 -_0804CCC6: - add r1, sp, 0x10 - ldr r0, _0804CD04 @ =gUnknown_8261CC8 - ldm r0!, {r2,r3,r7} - stm r1!, {r2,r3,r7} - ldm r0!, {r2,r3,r7} - stm r1!, {r2,r3,r7} - adds r0, r6, 0x3 - ldrh r1, [r5] - adds r0, r1 - strh r0, [r5] - lsls r1, r4, 16 - asrs r1, 16 - add r0, sp, 0x10 - mov r3, r8 - ldrb r2, [r3, 0x7] - movs r3, 0x1 - bl CreateSprite - adds r4, 0x20 - adds r6, 0x1 - cmp r6, 0x2 - ble _0804CCC6 - ldr r1, _0804CD0C @ =gMain - movs r5, 0x87 - lsls r5, 3 - adds r1, r5 - b _0804CEC2 - .align 2, 0 -_0804CCFC: .4byte gSaveBlock2Ptr -_0804CD00: .4byte gUnknown_8261E8A -_0804CD04: .4byte gUnknown_8261CC8 -_0804CD08: .4byte gLinkPlayers + 8 -_0804CD0C: .4byte gMain -_0804CD10: - ldr r4, _0804CDCC @ =gUnknown_8261CC8 - add r1, sp, 0x10 - adds r0, r4, 0 - ldm r0!, {r2,r3,r7} - stm r1!, {r2,r3,r7} - ldm r0!, {r2,r5,r7} - stm r1!, {r2,r5,r7} - add r1, sp, 0x10 - adds r0, r1, 0 - ldrh r0, [r0] - adds r0, 0x6 - strh r0, [r1] - adds r0, r1, 0 - movs r1, 0xD7 - movs r2, 0x97 - movs r3, 0x1 - bl CreateSprite - add r0, sp, 0x10 - ldm r4!, {r3,r5,r7} - stm r0!, {r3,r5,r7} - ldm r4!, {r1-r3} - stm r0!, {r1-r3} - add r1, sp, 0x10 - adds r0, r1, 0 - ldrh r0, [r0] - adds r0, 0x7 - strh r0, [r1] - adds r0, r1, 0 - movs r1, 0xF7 - movs r2, 0x97 - movs r3, 0x1 - bl CreateSprite - movs r6, 0 - add r4, sp, 0x10 - movs r5, 0xC0 - lsls r5, 13 -_0804CD5C: - add r1, sp, 0x10 - ldr r0, _0804CDCC @ =gUnknown_8261CC8 - ldm r0!, {r2,r3,r7} - stm r1!, {r2,r3,r7} - ldm r0!, {r2,r3,r7} - stm r1!, {r2,r3,r7} - adds r0, r6, 0 - adds r0, 0x8 - ldrh r7, [r4] - adds r0, r7 - strh r0, [r4] - asrs r1, r5, 16 - add r0, sp, 0x10 - movs r2, 0x96 - movs r3, 0x1 - bl CreateSprite - movs r0, 0x80 - lsls r0, 14 - adds r5, r0 - adds r6, 0x1 - cmp r6, 0x5 - ble _0804CD5C - ldr r0, _0804CDD0 @ =gUnknown_8261CB0 - ldr r2, _0804CDD4 @ =gUnknown_8261E40 - ldrb r1, [r2] - lsls r1, 19 - movs r3, 0x80 - lsls r3, 14 - adds r1, r3 - asrs r1, 16 - ldrb r2, [r2, 0x1] - lsls r2, 3 - movs r3, 0x2 - bl CreateSprite - ldr r2, _0804CDD8 @ =gUnknown_2031DA8 - ldr r1, [r2] - adds r1, 0x34 - movs r3, 0 - strb r0, [r1] - ldr r0, [r2] - adds r0, 0x35 - strb r3, [r0] - ldr r1, _0804CDDC @ =gMain - movs r5, 0x87 - lsls r5, 3 - adds r1, r5 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - movs r0, 0 - bl rbox_fill_rectangle - b _0804CEE6 - .align 2, 0 -_0804CDCC: .4byte gUnknown_8261CC8 -_0804CDD0: .4byte gUnknown_8261CB0 -_0804CDD4: .4byte gUnknown_8261E40 -_0804CDD8: .4byte gUnknown_2031DA8 -_0804CDDC: .4byte gMain -_0804CDE0: - movs r0, 0 - bl sub_804F748 - movs r0, 0 - bl sub_804F020 - ldr r2, _0804CE14 @ =gUnknown_2031DA8 - ldr r0, [r2] - movs r1, 0 - strb r1, [r0] - ldr r0, [r2] - strb r1, [r0, 0x1] - bl sub_804D764 - ldr r1, _0804CE18 @ =gMain - movs r7, 0x87 - lsls r7, 3 - adds r1, r7 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - ldr r0, _0804CE1C @ =0x00000111 - bl PlayBGM - b _0804CEE6 - .align 2, 0 -_0804CE14: .4byte gUnknown_2031DA8 -_0804CE18: .4byte gMain -_0804CE1C: .4byte 0x00000111 -_0804CE20: - movs r0, 0x1 - bl sub_804F748 - movs r0, 0x1 - bl sub_804F020 - ldr r1, _0804CE44 @ =gMain - movs r0, 0x87 - lsls r0, 3 - adds r1, r0 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] -_0804CE3A: - movs r0, 0 - bl sub_804D694 - b _0804CEBA - .align 2, 0 -_0804CE44: .4byte gMain -_0804CE48: - movs r0, 0x1 - bl sub_804D694 - ldr r1, _0804CE58 @ =gMain - movs r3, 0x87 - lsls r3, 3 - adds r1, r3 - b _0804CEC2 - .align 2, 0 -_0804CE58: .4byte gMain -_0804CE5C: - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0x10 - movs r3, 0 - bl BeginNormalPaletteFade - ldr r1, _0804CE78 @ =gMain - movs r5, 0x87 - lsls r5, 3 - adds r1, r5 - b _0804CEC2 - .align 2, 0 -_0804CE78: .4byte gMain -_0804CE7C: - movs r1, 0x82 - lsls r1, 5 - movs r0, 0 - bl SetGpuReg - movs r0, 0x2 - bl sub_804D694 - ldr r1, _0804CE98 @ =gMain - movs r7, 0x87 - lsls r7, 3 - adds r1, r7 - b _0804CEC2 - .align 2, 0 -_0804CE98: .4byte gMain -_0804CE9C: - movs r0, 0 - bl sub_804F890 - ldr r1, _0804CEAC @ =gMain - movs r0, 0x87 - lsls r0, 3 - adds r1, r0 - b _0804CEC2 - .align 2, 0 -_0804CEAC: .4byte gMain -_0804CEB0: - movs r0, 0x1 - bl sub_804F890 - bl sub_804F964 -_0804CEBA: - ldr r1, _0804CECC @ =gMain - movs r2, 0x87 - lsls r2, 3 - adds r1, r2 -_0804CEC2: - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - b _0804CEE6 - .align 2, 0 -_0804CECC: .4byte gMain -_0804CED0: - ldr r0, _0804CF08 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _0804CEE6 - ldr r0, _0804CF0C @ =sub_804DFF0 - str r0, [r3] - ldr r0, _0804CF10 @ =sub_804D638 - bl SetMainCallback2 -_0804CEE6: - bl RunTextPrinters - bl RunTasks - bl AnimateSprites - bl BuildOamBuffer - bl UpdatePaletteFade - add sp, 0x28 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0804CF08: .4byte gPaletteFade -_0804CF0C: .4byte sub_804DFF0 -_0804CF10: .4byte sub_804D638 - thumb_func_end sub_804C728 - thumb_func_start sub_804CF14 sub_804CF14: @ 804CF14 push {r4-r7,lr} @@ -1178,7 +136,7 @@ _0804D00C: cmp r6, r0 bge _0804D0A8 mov r8, r4 - ldr r7, _0804D138 @ =gUnknown_8261E40 + ldr r7, _0804D138 @ =gTradeMonSpriteCoords _0804D048: movs r0, 0x64 adds r4, r6, 0 @@ -1212,7 +170,7 @@ _0804D048: str r1, [sp, 0x8] adds r0, r5, 0 ldr r1, _0804D144 @ =sub_809718C - bl sub_8096E18 + bl CreateMonIcon mov r2, r8 ldr r1, [r2] adds r1, 0x28 @@ -1233,7 +191,7 @@ _0804D0A8: ldrb r0, [r0] cmp r6, r0 bge _0804D120 - ldr r0, _0804D138 @ =gUnknown_8261E40 + ldr r0, _0804D138 @ =gTradeMonSpriteCoords mov r8, r1 adds r7, r0, 0 adds r7, 0xC @@ -1271,7 +229,7 @@ _0804D0BE: str r0, [sp, 0x8] adds r0, r5, 0 ldr r1, _0804D144 @ =sub_809718C - bl sub_8096E18 + bl CreateMonIcon mov r2, r8 ldr r1, [r2] adds r1, 0x2E @@ -1294,14 +252,14 @@ _0804D120: _0804D12C: .4byte gUnknown_2031DA8 _0804D130: .4byte gPlayerPartyCount _0804D134: .4byte gEnemyPartyCount -_0804D138: .4byte gUnknown_8261E40 +_0804D138: .4byte gTradeMonSpriteCoords _0804D13C: .4byte gPlayerParty _0804D140: .4byte 0xfff40000 _0804D144: .4byte sub_809718C _0804D148: .4byte gEnemyParty _0804D14C: .4byte gMain _0804D150: - bl sub_8122550 + bl LoadHeldItemIcons ldr r0, _0804D170 @ =gUnknown_2031DA8 ldr r1, [r0] adds r0, r1, 0 @@ -1424,7 +382,7 @@ _0804D24C: adds r0, r1 movs r6, 0 add r5, sp, 0xC - ldr r3, _0804D310 @ =gUnknown_8261E8A + ldr r3, _0804D310 @ =gTradeUnknownSpriteCoords mov r8, r3 asrs r0, 1 ldrb r7, [r3, 0x4] @@ -1471,7 +429,7 @@ _0804D270: adds r0, r1 movs r6, 0 add r5, sp, 0xC - ldr r7, _0804D310 @ =gUnknown_8261E8A + ldr r7, _0804D310 @ =gTradeUnknownSpriteCoords mov r8, r7 asrs r0, 1 mov r1, r8 @@ -1506,7 +464,7 @@ _0804D2D4: b _0804D4B4 .align 2, 0 _0804D30C: .4byte gSaveBlock2Ptr -_0804D310: .4byte gUnknown_8261E8A +_0804D310: .4byte gTradeUnknownSpriteCoords _0804D314: .4byte gUnknown_8261CC8 _0804D318: .4byte gLinkPlayers + 8 _0804D31C: .4byte gMain @@ -1590,7 +548,7 @@ _0804D3C0: adds r1, 0x35 strb r0, [r1] ldr r0, _0804D404 @ =gUnknown_8261CB0 - ldr r3, _0804D408 @ =gUnknown_8261E40 + ldr r3, _0804D408 @ =gTradeMonSpriteCoords ldr r4, _0804D40C @ =gUnknown_2031DA8 ldr r1, [r4] adds r1, 0x35 @@ -1621,7 +579,7 @@ _0804D3C0: b _0804D4D2 .align 2, 0 _0804D404: .4byte gUnknown_8261CB0 -_0804D408: .4byte gUnknown_8261E40 +_0804D408: .4byte gTradeMonSpriteCoords _0804D40C: .4byte gUnknown_2031DA8 _0804D410: .4byte gMain _0804D414: @@ -3214,7 +2172,7 @@ _0804E0CC: adds r1, r0 lsls r1, 2 adds r1, r5 - ldr r2, _0804E130 @ =gUnknown_8261E40 + ldr r2, _0804E130 @ =gTradeMonSpriteCoords lsls r3, r6, 1 adds r0, r3, r2 ldrb r0, [r0] @@ -3245,7 +2203,7 @@ _0804E120: .align 2, 0 _0804E128: .4byte gUnknown_2031DA8 _0804E12C: .4byte gSprites -_0804E130: .4byte gUnknown_8261E40 +_0804E130: .4byte gTradeMonSpriteCoords thumb_func_end TradeMenuMoveCursor thumb_func_start sub_804E134 @@ -4622,7 +3580,7 @@ _0804EBA2: adds r2, r0 lsls r2, 2 add r2, r8 - ldr r5, _0804ECA8 @ =gUnknown_8261E40 + ldr r5, _0804ECA8 @ =gTradeMonSpriteCoords lsls r6, 2 adds r0, r6, r5 ldrb r0, [r0] @@ -4697,7 +3655,7 @@ _0804EC98: .align 2, 0 _0804ECA0: .4byte gSprites _0804ECA4: .4byte gUnknown_2031DA8 -_0804ECA8: .4byte gUnknown_8261E40 +_0804ECA8: .4byte gTradeMonSpriteCoords _0804ECAC: .4byte sub_809718C _0804ECB0: .4byte gUnknown_8260A32 _0804ECB4: @@ -4762,7 +3720,7 @@ _0804ECEC: adds r2, r0 lsls r2, 2 adds r2, r6 - ldr r5, _0804EE14 @ =gUnknown_8261E40 + ldr r5, _0804EE14 @ =gTradeMonSpriteCoords lsls r3, 2 adds r0, r3, r5 ldrb r0, [r0] @@ -4865,7 +3823,7 @@ _0804ECEC: _0804EE08: .4byte gUnknown_8260834 _0804EE0C: .4byte gSprites _0804EE10: .4byte gUnknown_2031DA8 -_0804EE14: .4byte gUnknown_8261E40 +_0804EE14: .4byte gTradeMonSpriteCoords _0804EE18: .4byte gUnknown_8261F18 _0804EE1C: ldr r0, _0804EE64 @ =gUnknown_8262055 @@ -5507,7 +4465,7 @@ sub_804F2E8: @ 804F2E8 add r0, r12 lsls r2, r0, 1 mov r10, r2 - ldr r1, _0804F3B0 @ =gUnknown_8261E40 + ldr r1, _0804F3B0 @ =gTradeMonSpriteCoords movs r2, 0 mov r8, r2 lsls r0, 2 @@ -5585,7 +4543,7 @@ _0804F39A: .align 2, 0 _0804F3A8: .4byte gUnknown_2031DA8 _0804F3AC: .4byte gSprites -_0804F3B0: .4byte gUnknown_8261E40 +_0804F3B0: .4byte gTradeMonSpriteCoords thumb_func_end sub_804F2E8 thumb_func_start sub_804F3B4 diff --git a/data/data.s b/data/data.s index c85c8d903..8dd5334fe 100644 --- a/data/data.s +++ b/data/data.s @@ -323,7 +323,7 @@ gUnknown_8261D00:: @ 8261D00 gUnknown_8261D08:: @ 8261D08 .incbin "baserom.gba", 0x261D08, 0x138 -gUnknown_8261E40:: @ 8261E40 +gTradeMonSpriteCoords:: @ 8261E40 .incbin "baserom.gba", 0x261E40, 0x1A gUnknown_8261E5A:: @ 8261E5A @@ -332,24 +332,36 @@ gUnknown_8261E5A:: @ 8261E5A gUnknown_8261E72:: @ 8261E72 .incbin "baserom.gba", 0x261E72, 0x18 -gUnknown_8261E8A:: @ 8261E8A +gTradeUnknownSpriteCoords:: @ 8261E8A .incbin "baserom.gba", 0x261E8A, 0x2C gUnknown_8261EB6:: @ 8261EB6 - .incbin "baserom.gba", 0x261EB6, 0xB + .string "$" + +gUnknown_8261EB7:: + .string "{COLOR DARK_GREY}{HIGHLIGHT TRANSPARENT}{SHADOW RED}$" gText_MaleSymbol4:: @ 8261EC1 - .incbin "baserom.gba", 0x261EC1, 0x2 + .string "♂$" gText_FemaleSymbol4:: @ 8261EC3 - .incbin "baserom.gba", 0x261EC3, 0x2 + .string "♀$" gText_GenderlessSymbol:: @ 8261EC5 - .incbin "baserom.gba", 0x261EC5, 0x2 + .string "$" + +gUnknown_8261EC6:: + .string "$" gUnknown_8261EC7:: @ 8261EC7 - .incbin "baserom.gba", 0x261EC7, 0x5 + .string "\n$" + +gUnknown_8261EC9:: + .string "/$" + @ trade + + .align 2 gUnknown_8261ECC:: @ 8261ECC .incbin "baserom.gba", 0x261ECC, 0x18 @@ -482,6 +494,8 @@ gUnknown_826D1E4:: @ 826D1E4 gUnknown_826D250:: @ 826D250 .incbin "baserom.gba", 0x26D250, 0x44 + @ overworld + gUnknown_826D294:: @ 826D294 .incbin "baserom.gba", 0x26D294, 0xA diff --git a/include/link.h b/include/link.h index 7c4b871de..552e50970 100644 --- a/include/link.h +++ b/include/link.h @@ -181,7 +181,7 @@ extern u32 gLinkStatus; extern u16 gBlockRecvBuffer[MAX_RFU_PLAYERS][BLOCK_BUFFER_SIZE / 2]; extern u16 gSendCmd[CMD_LENGTH]; extern u8 gShouldAdvanceLinkState; -extern struct LinkPlayer gLinkPlayers[]; +extern struct LinkPlayer gLinkPlayers[MAX_RFU_PLAYERS]; extern u16 word_3002910[]; extern bool8 gReceivedRemoteLinkPlayers; extern bool8 gLinkVSyncDisabled; @@ -212,6 +212,7 @@ u8 GetBlockReceivedStatus(void); void ResetBlockReceivedFlags(void); void ResetBlockReceivedFlag(u8); void SetLinkDebugValues(u32, u32); +u8 GetSavedPlayerCount(void); u8 GetLinkPlayerCount_2(void); bool8 IsLinkMaster(void); void CB2_LinkError(void); @@ -232,10 +233,10 @@ bool8 sub_800A520(void); bool8 sub_8010500(void); void sub_800DFB4(u8, u8); void sub_800AB9C(void); -void sub_800B488(void); +void sub_800B1F4(void); void sub_8009734(void); void sub_800A620(void); -void sub_8011BD0(void); +void sub_80FBB4C(void); u8 sub_800ABAC(void); u8 sub_800ABBC(void); void sub_800AAC0(void); diff --git a/include/link_rfu.h b/include/link_rfu.h index 2757e5296..518c3fc65 100644 --- a/include/link_rfu.h +++ b/include/link_rfu.h @@ -39,5 +39,7 @@ bool32 sub_80FAEF0(void); bool32 IsRfuRecvQueueEmpty(void); u32 GetRfuRecvQueueLength(void); void sub_80F8DC0(void); +void sub_80FBB20(void); +bool8 sub_80FA484(bool32 a0); #endif //GUARD_LINK_RFU_H diff --git a/include/party_menu.h b/include/party_menu.h index bea5dcdde..ad9d6eda6 100644 --- a/include/party_menu.h +++ b/include/party_menu.h @@ -82,5 +82,6 @@ void OpenPartyMenuInBattle(u8 arg); void sub_8127EC4(u8 battlerId, u8 unk, u8 arrayIndex); bool8 IsMultiBattle(void); void sub_8126EDC(void); +void sub_812256C(u8 *partyCount, u8 *icons, u8 side); #endif // GUARD_PARTY_MENU_H diff --git a/include/pokemon_icon.h b/include/pokemon_icon.h index cd8c798f9..a81961390 100644 --- a/include/pokemon_icon.h +++ b/include/pokemon_icon.h @@ -10,11 +10,13 @@ void sub_80D2F68(u16 iconId); u8 sub_80D2D78(u16 iconId, void callback(struct Sprite *), u16 x, u16 y, u16 a4, u8 a5); void sub_80D2FF0(u16 iconId); void sub_80D2EF8(struct Sprite *sprite); -void sub_809707C(void); +void LoadMonIconPalettes(void); void FreeMonIconPalettes(void); u16 sub_8096FD4(u16); u8 sub_8096ECC(u16, void (*)(struct Sprite *), s16, s16, u8, bool32); void sub_8097070(struct Sprite *); u16 GetUnownLetterByPersonality(u32 personality); +void sub_809718C(void); +u8 CreateMonIcon(u16 species, void (*callback)(void), s16 x, s16 y, u8 subpriority, u32 personality, bool32 extra); #endif // GUARD_POKEMON_ICON_H diff --git a/include/pokemon_storage_system.h b/include/pokemon_storage_system.h index 6790fb775..2d881878f 100644 --- a/include/pokemon_storage_system.h +++ b/include/pokemon_storage_system.h @@ -16,5 +16,6 @@ u8 * GetBoxNamePtr(u8 boxId); void sub_808CE60(void); void ResetPokemonStorageSystem(void); u8 StorageGetCurrentBox(void); +void sub_808BEB4(const u8 *name, u8 *a1, u8 a2, u8 a3, u8 *buffer, u8 a5); #endif // GUARD_POKEMON_STORAGE_SYSTEM_H diff --git a/ld_script.txt b/ld_script.txt index 0e8edea06..56525bce7 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -85,6 +85,7 @@ SECTIONS { asm/smokescreen.o(.text); asm/pokeball.o(.text); src/load_save.o(.text); + src/trade.o(.text); asm/trade.o(.text); src/play_time.o(.text); src/new_game.o(.text); diff --git a/src/mevent_8145654.c b/src/mevent_8145654.c index 85c1dfccb..9c03dc0d5 100644 --- a/src/mevent_8145654.c +++ b/src/mevent_8145654.c @@ -200,7 +200,7 @@ s32 FadeToWonderCardMenu(void) CopyBgTilemapBufferToVram(1); break; case 6: - sub_809707C(); + LoadMonIconPalettes(); break; case 7: ShowBg(1); diff --git a/src/trade.c b/src/trade.c index 5c17035fa..742650e4a 100644 --- a/src/trade.c +++ b/src/trade.c @@ -1,3 +1,408 @@ #include "global.h" +#include "palette.h" +#include "task.h" +#include "decompress.h" +#include "gpu_regs.h" +#include "malloc.h" +#include "bg.h" +#include "text.h" +#include "window.h" +#include "text_window.h" +#include "pokemon_icon.h" +#include "graphics.h" +#include "link.h" +#include "link_rfu.h" +#include "cable_club.h" +#include "sound.h" +#include "party_menu.h" +#include "pokemon_storage_system.h" +#include "constants/species.h" +#include "constants/items.h" +#include "constants/easy_chat.h" +#include "constants/songs.h" +struct TradeResources +{ + /*0x0000*/ u8 unk_0; + /*0x0001*/ u8 unk_1; + /*0x0002*/ u8 filler_2[0x28 - 2]; + /*0x0028*/ u8 partyIcons[2][PARTY_SIZE]; + /*0x0034*/ u8 tradeMenuCursorSpriteIdx; + /*0x0035*/ u8 tradeMenuCursorPosition; + /*0x0036*/ u8 partyCounts[2]; + /*0x0038*/ bool8 tradeMenuOptionsActive[12]; + /*0x0044*/ u8 unk_44; + /*0x0045*/ u8 unk_45[2][PARTY_SIZE]; + /*0x0051*/ u8 unk_51[2][PARTY_SIZE]; + /*0x005D*/ u8 unk_5D[2][PARTY_SIZE]; + /*0x0069*/ u8 unk_69; + /*0x006A*/ u8 filler_6A[0x6F - 0x6A]; + /*0x006F*/ u8 unk_6F; + /*0x0070*/ u8 unk_70; + /*0x0071*/ u8 filler_71; + /*0x0072*/ u16 unk_72; + /*0x0074*/ u8 unk_74[2]; + /*0x0076*/ u8 unk_76[2]; + /*0x0078*/ u8 unk_78; + /*0x0079*/ u8 unk_79; + /*0x007A*/ u8 unk_7A; + /*0x007B*/ u8 unk_7B; + /*0x007C*/ u8 filler_7C[0x7E - 0x7C]; + /*0x007E*/ u8 unk_7E; + /*0x007F*/ u8 filler_7F; + /*0x0080*/ u16 linkData[20]; + /*0x00A8*/ u8 unk_A8; + /*0x00A9*/ u8 unk_A9[11]; + /*0x00B4*/ u8 filler_B4[0x8D0-0xB4]; + /*0x08D0*/ struct { + bool8 unk_0; + u16 unk_2; + u8 unk_4; + } unk_8D0[4]; + /*0x08F0*/ u8 bg1TilemapBuffer[BG_SCREEN_SIZE]; +}; +IWRAM_DATA vu16 gUnknown_3000E78; + +EWRAM_DATA u8 *gUnknown_2031C90 = NULL; +EWRAM_DATA u8 *gUnknown_2031C94[14] = {}; +EWRAM_DATA struct TradeResources * gUnknown_2031DA8 = NULL; + +void sub_804C728(void); +void sub_804D4F8(void); +u8 shedinja_maker_maybe(void); +void sub_804F5BC(u8 str_idx); +void sub_804F9D8(void); +bool8 sub_804F610(void); +void sub_804F748(u8 side); +void sub_804F020(u8 side); +void sub_804D764(void); +void sub_804D694(u8 imgIdx); +void sub_804F890(u8 side); +void sub_804F964(void); +void sub_804DFF0(void); +void sub_804D638(void); +void LoadHeldItemIcons(void); +void sub_804F728(const u8 *name, u8 *a1, u8 unused); + +extern const struct BgTemplate gUnknown_8261F1C[4]; +extern const struct WindowTemplate gUnknown_8261F2C[18]; +extern const u8 gTradeMonSpriteCoords[][2]; +extern const u8 *gUnknown_8261ECC[]; +extern const u8 gTradeUnknownSpriteCoords[][4]; +extern const struct SpriteTemplate gUnknown_8261CB0; +extern const struct SpriteTemplate gUnknown_8261CC8; + +void sub_804C600(void) +{ + int i; + + ResetSpriteData(); + FreeAllSpritePalettes(); + ResetTasks(); + ResetPaletteFade(); + gPaletteFade.bufferTransferDisabled = TRUE; + SetVBlankCallback(sub_804D4F8); + LoadPalette(gTMCaseMainWindowPalette, 0xF0, 0x14); + LoadPalette(gTMCaseMainWindowPalette, 0xD0, 0x14); + ResetBgsAndClearDma3BusyFlags(FALSE); + InitBgsFromTemplates(0, gUnknown_8261F1C, NELEMS(gUnknown_8261F1C)); + SetBgTilemapBuffer(1, gUnknown_2031DA8->bg1TilemapBuffer); + if (InitWindows(gUnknown_8261F2C)) + { + DeactivateAllTextPrinters(); + gUnknown_3000E78 = 590; // ? + for (i = 0; i < NELEMS(gUnknown_8261F2C); i++) + { + ClearWindowTilemap(i); + FillWindowPixelBuffer(i, PIXEL_FILL(0)); + } + FillBgTilemapBufferRect(0, 0, 0, 0, 30, 20, 0xF); + TextWindow_SetStdFrame0_WithPal(0, 0x014, 0xC0); + TextWindow_SetUserSelectedFrame(2, 0x001, 0xE0); + LoadMonIconPalettes(); + gUnknown_2031DA8->unk_69 = 0; + gUnknown_2031DA8->unk_6F = 0; + gUnknown_2031DA8->unk_70 = 0; + gUnknown_2031DA8->unk_74[0] = 0; + gUnknown_2031DA8->unk_74[1] = 0; + gUnknown_2031DA8->unk_7A = 0; + gUnknown_2031DA8->unk_7B = 0; + gUnknown_2031DA8->unk_A8 = 0; + } +} + +void sub_804C718(void) +{ + SetMainCallback2(sub_804C728); +} + +void sub_804C728(void) +{ + int i; + struct SpriteTemplate temp; + u8 id; + s32 width; + u32 xPos; + + switch (gMain.state) + { + case 0: + gUnknown_2031DA8 = AllocZeroed(sizeof(*gUnknown_2031DA8)); + sub_804C600(); + gUnknown_2031C90 = AllocZeroed(0xE00); + + for (i = 0; i < 14; i++) + { + gUnknown_2031C94[i] = &gUnknown_2031C90[i * 256]; + } + + gMain.state++; + break; + case 1: + gPaletteFade.bufferTransferDisabled = FALSE; + + for (i = 0; i < PARTY_SIZE; i++) + { + CreateMon(&gEnemyParty[i], SPECIES_NONE, 0, 0x20, FALSE, 0, OT_ID_PLAYER_ID, 0); + } + + sub_804F5BC(0); + ShowBg(0); + + if (!gReceivedRemoteLinkPlayers) + { + gLinkType = 0x1122; + gUnknown_2031DA8->unk_A8 = 0; + + if (gWirelessCommType) + { + sub_800B1F4(); + OpenLink(); + sub_80FBB20(); + } + else + { + OpenLink(); + gMain.state++; + } + if (gWirelessCommType == 0) + CreateTask(sub_8081A90, 1); + } + else + { + gMain.state = 4; + } + break; + case 2: + gUnknown_2031DA8->unk_A8++; + if (gUnknown_2031DA8->unk_A8 > 11) + { + gUnknown_2031DA8->unk_A8 = 0; + gMain.state++; + } + break; + case 3: + if (GetLinkPlayerCount_2() >= GetSavedPlayerCount()) + { + if (IsLinkMaster()) + { + if (++gUnknown_2031DA8->unk_A8 > 30) + { + CheckShouldAdvanceLinkState(); + gMain.state++; + } + } + else + { + gMain.state++; + } + } + break; + case 4: + if (gReceivedRemoteLinkPlayers == TRUE && IsLinkPlayerDataExchangeComplete() == TRUE) + { + sub_80FBB4C(); + CalculatePlayerPartyCount(); + gMain.state++; + gUnknown_2031DA8->unk_A8 = 0; + if (gWirelessCommType) + { + sub_80FA484(TRUE); + sub_800AB9C(); + } + } + break; + case 5: + if (gWirelessCommType) + { + if (IsRfuTaskFinished()) + { + gMain.state++; + LoadWirelessStatusIndicatorSpriteGfx(); + CreateWirelessStatusIndicatorSprite(0, 0); + } + } + else + { + gMain.state++; + } + break; + case 6: + if (shedinja_maker_maybe()) + { + sub_804F9D8(); + gMain.state++; + } + break; + case 7: + CalculateEnemyPartyCount(); + SetGpuReg(REG_OFFSET_DISPCNT, 0); + SetGpuReg(REG_OFFSET_BLDCNT, 0); + gUnknown_2031DA8->partyCounts[0] = gPlayerPartyCount; + gUnknown_2031DA8->partyCounts[1] = gEnemyPartyCount; + + for (i = 0; i < gUnknown_2031DA8->partyCounts[0]; i++) + { + struct Pokemon *mon = &gPlayerParty[i]; + gUnknown_2031DA8->partyIcons[0][i] = CreateMonIcon(GetMonData(mon, MON_DATA_SPECIES2), + sub_809718C, + (gTradeMonSpriteCoords[i][0] * 8) + 14, + (gTradeMonSpriteCoords[i][1] * 8) - 12, + 1, + GetMonData(mon, MON_DATA_PERSONALITY), + TRUE); + } + + for (i = 0; i < gUnknown_2031DA8->partyCounts[1]; i++) + { + struct Pokemon *mon = &gEnemyParty[i]; + gUnknown_2031DA8->partyIcons[1][i] = CreateMonIcon(GetMonData(mon, MON_DATA_SPECIES2, NULL), + sub_809718C, + (gTradeMonSpriteCoords[i + PARTY_SIZE][0] * 8) + 14, + (gTradeMonSpriteCoords[i + PARTY_SIZE][1] * 8) - 12, + 1, + GetMonData(mon, MON_DATA_PERSONALITY), + FALSE); + } + gMain.state++; + break; + case 8: + LoadHeldItemIcons(); + sub_812256C(&gUnknown_2031DA8->partyCounts[0], gUnknown_2031DA8->partyIcons[0], 0); + gMain.state++; + break; + case 9: + sub_812256C(&gUnknown_2031DA8->partyCounts[0], gUnknown_2031DA8->partyIcons[0], 1); + gMain.state++; + break; + case 10: + sub_808BEB4(gSaveBlock2Ptr->playerName, gUnknown_2031C94[0], 0, 0, gDecompressionBuffer, 3); + id = GetMultiplayerId(); + sub_808BEB4(gLinkPlayers[id ^ 1].name, gUnknown_2031C94[3], 0, 0, gDecompressionBuffer, 3); + sub_808BEB4(gUnknown_8261ECC[0], gUnknown_2031C94[6], 0, 0, gDecompressionBuffer, 2); + sub_804F728(gUnknown_8261ECC[1], gUnknown_2031C94[8], 24); + gMain.state++; + gUnknown_2031DA8->unk_A8 = 0; + break; + case 11: + if (sub_804F610()) + gMain.state++; + break; + case 12: + width = GetStringWidth(1, gSaveBlock2Ptr->playerName, 0); + xPos = (56 - width) / 2; + for (i = 0; i < 3; i++) + { + temp = gUnknown_8261CC8; + temp.tileTag += i; + CreateSprite(&temp, xPos + gTradeUnknownSpriteCoords[LANGUAGE_ENGLISH - 1][0] + (i * 32), gTradeUnknownSpriteCoords[LANGUAGE_ENGLISH - 1][1], 1); + } + + id = GetMultiplayerId(); + id ^= 1; + width = GetStringWidth(1, gLinkPlayers[id].name, 0); + xPos = (56 - width) / 2; + for (i = 0; i < 3; i++) + { + temp = gUnknown_8261CC8; + temp.tileTag += i + 3; + CreateSprite(&temp, xPos + gTradeUnknownSpriteCoords[LANGUAGE_ENGLISH - 1][2] + (i * 32), gTradeUnknownSpriteCoords[LANGUAGE_ENGLISH - 1][3], 1); + } + gMain.state++; + break; + case 13: + temp = gUnknown_8261CC8; + temp.tileTag += 6; + CreateSprite(&temp, 215, 151, 1); + temp = gUnknown_8261CC8; + temp.tileTag += 7; + CreateSprite(&temp, 247, 151, 1); + + for (i = 0; i < PARTY_SIZE; i++) + { + temp = gUnknown_8261CC8; + temp.tileTag += i + 8; + CreateSprite(&temp, (i * 32) + 24, 150, 1); + } + + gUnknown_2031DA8->tradeMenuCursorSpriteIdx = CreateSprite(&gUnknown_8261CB0, gTradeMonSpriteCoords[0][0] * 8 + 32, gTradeMonSpriteCoords[0][1] * 8, 2); + gUnknown_2031DA8->tradeMenuCursorPosition = 0; + gMain.state++; + rbox_fill_rectangle(0); + break; + case 14: + sub_804F748(0); + sub_804F020(0); + gUnknown_2031DA8->unk_0 = 0; + gUnknown_2031DA8->unk_1 = 0; + sub_804D764(); + gMain.state++; + PlayBGM(MUS_SLOT); + break; + case 15: + sub_804F748(1); + sub_804F020(1); + gMain.state++; + // fallthrough + case 16: + sub_804D694(0); + gMain.state++; + break; + case 17: + sub_804D694(1); + gMain.state++; + break; + case 18: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); + gMain.state++; + break; + case 19: + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON); + sub_804D694(2); + gMain.state++; + break; + case 20: + sub_804F890(0); + gMain.state++; + break; + case 21: + sub_804F890(1); + sub_804F964(); + gMain.state++; + break; + case 22: + if (!gPaletteFade.active) + { + gMain.callback1 = sub_804DFF0; + SetMainCallback2(sub_804D638); + } + break; + } + + RunTextPrinters(); + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} -- cgit v1.2.3 From 3710c0a370eab7d7eac8a69f2b843381b36c22de Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 28 Oct 2019 10:23:51 -0400 Subject: Nonmatching sub_804CF14 --- asm/trade.s | 684 ------------------------------ include/party_menu.h | 2 +- include/pokemon_summary_screen.h | 2 + src/trade.c | 882 ++++++++++++++++++++++++++++++++++++++- 4 files changed, 883 insertions(+), 687 deletions(-) diff --git a/asm/trade.s b/asm/trade.s index 2beb96151..15c93e83d 100644 --- a/asm/trade.s +++ b/asm/trade.s @@ -5,690 +5,6 @@ .text - thumb_func_start sub_804CF14 -sub_804CF14: @ 804CF14 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x24 - ldr r1, _0804CF38 @ =gMain - movs r2, 0x87 - lsls r2, 3 - adds r0, r1, r2 - ldrb r0, [r0] - adds r2, r1, 0 - cmp r0, 0x16 - bls _0804CF2E - b _0804D4D2 -_0804CF2E: - lsls r0, 2 - ldr r1, _0804CF3C @ =_0804CF40 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0804CF38: .4byte gMain -_0804CF3C: .4byte _0804CF40 - .align 2, 0 -_0804CF40: - .4byte _0804CF9C - .4byte _0804CFB0 - .4byte _0804CFB8 - .4byte _0804CFC0 - .4byte _0804CFC8 - .4byte _0804CFDC - .4byte _0804D004 - .4byte _0804D00C - .4byte _0804D150 - .4byte _0804D178 - .4byte _0804D19C - .4byte _0804D230 - .4byte _0804D24C - .4byte _0804D320 - .4byte _0804D4D2 - .4byte _0804D4D2 - .4byte _0804D414 - .4byte _0804D41C - .4byte _0804D444 - .4byte _0804D480 - .4byte _0804D4A0 - .4byte _0804D4A8 - .4byte _0804D4C0 -_0804CF9C: - bl sub_804C600 - ldr r1, _0804CFAC @ =gMain - movs r3, 0x87 - lsls r3, 3 - adds r1, r3 - b _0804D4B4 - .align 2, 0 -_0804CFAC: .4byte gMain -_0804CFB0: - movs r5, 0x87 - lsls r5, 3 - adds r1, r2, r5 - b _0804D200 -_0804CFB8: - movs r7, 0x87 - lsls r7, 3 - adds r1, r2, r7 - b _0804D4B4 -_0804CFC0: - movs r0, 0x87 - lsls r0, 3 - adds r1, r2, r0 - b _0804D4B4 -_0804CFC8: - bl CalculatePlayerPartyCount - ldr r1, _0804CFD8 @ =gMain - movs r2, 0x87 - lsls r2, 3 - adds r1, r2 - b _0804D4B4 - .align 2, 0 -_0804CFD8: .4byte gMain -_0804CFDC: - ldr r0, _0804CFFC @ =gWirelessCommType - ldrb r0, [r0] - cmp r0, 0 - beq _0804CFF0 - bl LoadWirelessStatusIndicatorSpriteGfx - movs r0, 0 - movs r1, 0 - bl CreateWirelessStatusIndicatorSprite -_0804CFF0: - ldr r1, _0804D000 @ =gMain - movs r3, 0x87 - lsls r3, 3 - adds r1, r3 - b _0804D4B4 - .align 2, 0 -_0804CFFC: .4byte gWirelessCommType -_0804D000: .4byte gMain -_0804D004: - movs r5, 0x87 - lsls r5, 3 - adds r1, r2, r5 - b _0804D4B4 -_0804D00C: - bl CalculateEnemyPartyCount - ldr r4, _0804D12C @ =gUnknown_2031DA8 - ldr r0, [r4] - ldr r1, _0804D130 @ =gPlayerPartyCount - ldrb r1, [r1] - adds r0, 0x36 - strb r1, [r0] - ldr r0, [r4] - ldr r1, _0804D134 @ =gEnemyPartyCount - ldrb r1, [r1] - adds r0, 0x37 - strb r1, [r0] - movs r0, 0 - bl ClearWindowTilemap - movs r0, 0 - bl sub_804F020 - movs r0, 0x1 - bl sub_804F020 - movs r6, 0 - ldr r0, [r4] - adds r0, 0x36 - ldrb r0, [r0] - cmp r6, r0 - bge _0804D0A8 - mov r8, r4 - ldr r7, _0804D138 @ =gTradeMonSpriteCoords -_0804D048: - movs r0, 0x64 - adds r4, r6, 0 - muls r4, r0 - ldr r0, _0804D13C @ =gPlayerParty - adds r4, r0 - adds r0, r4, 0 - movs r1, 0x41 - movs r2, 0 - bl GetMonData - adds r5, r0, 0 - lsls r5, 16 - lsrs r5, 16 - adds r0, r4, 0 - movs r1, 0 - bl GetMonData - ldrb r2, [r7] - lsls r2, 19 - movs r1, 0xE0 - lsls r1, 12 - adds r2, r1 - asrs r2, 16 - ldrb r3, [r7, 0x1] - lsls r3, 19 - ldr r1, _0804D140 @ =0xfff40000 - adds r3, r1 - asrs r3, 16 - movs r1, 0x1 - str r1, [sp] - str r0, [sp, 0x4] - str r1, [sp, 0x8] - adds r0, r5, 0 - ldr r1, _0804D144 @ =SpriteCB_MonIcon - bl CreateMonIcon - mov r2, r8 - ldr r1, [r2] - adds r1, 0x28 - adds r1, r6 - strb r0, [r1] - adds r7, 0x2 - adds r6, 0x1 - ldr r0, [r2] - adds r0, 0x36 - ldrb r0, [r0] - cmp r6, r0 - blt _0804D048 -_0804D0A8: - movs r6, 0 - ldr r1, _0804D12C @ =gUnknown_2031DA8 - ldr r0, [r1] - adds r0, 0x37 - ldrb r0, [r0] - cmp r6, r0 - bge _0804D120 - ldr r0, _0804D138 @ =gTradeMonSpriteCoords - mov r8, r1 - adds r7, r0, 0 - adds r7, 0xC -_0804D0BE: - movs r0, 0x64 - adds r4, r6, 0 - muls r4, r0 - ldr r0, _0804D148 @ =gEnemyParty - adds r4, r0 - adds r0, r4, 0 - movs r1, 0x41 - movs r2, 0 - bl GetMonData - adds r5, r0, 0 - lsls r5, 16 - lsrs r5, 16 - adds r0, r4, 0 - movs r1, 0 - bl GetMonData - ldrb r2, [r7] - lsls r2, 19 - movs r3, 0xE0 - lsls r3, 12 - adds r2, r3 - asrs r2, 16 - ldrb r3, [r7, 0x1] - lsls r3, 19 - ldr r1, _0804D140 @ =0xfff40000 - adds r3, r1 - asrs r3, 16 - movs r1, 0x1 - str r1, [sp] - str r0, [sp, 0x4] - movs r0, 0 - str r0, [sp, 0x8] - adds r0, r5, 0 - ldr r1, _0804D144 @ =SpriteCB_MonIcon - bl CreateMonIcon - mov r2, r8 - ldr r1, [r2] - adds r1, 0x2E - adds r1, r6 - strb r0, [r1] - adds r7, 0x2 - adds r6, 0x1 - ldr r0, [r2] - adds r0, 0x37 - ldrb r0, [r0] - cmp r6, r0 - blt _0804D0BE -_0804D120: - ldr r1, _0804D14C @ =gMain - movs r3, 0x87 - lsls r3, 3 - adds r1, r3 - b _0804D4B4 - .align 2, 0 -_0804D12C: .4byte gUnknown_2031DA8 -_0804D130: .4byte gPlayerPartyCount -_0804D134: .4byte gEnemyPartyCount -_0804D138: .4byte gTradeMonSpriteCoords -_0804D13C: .4byte gPlayerParty -_0804D140: .4byte 0xfff40000 -_0804D144: .4byte SpriteCB_MonIcon -_0804D148: .4byte gEnemyParty -_0804D14C: .4byte gMain -_0804D150: - bl LoadHeldItemIcons - ldr r0, _0804D170 @ =gUnknown_2031DA8 - ldr r1, [r0] - adds r0, r1, 0 - adds r0, 0x36 - adds r1, 0x28 - movs r2, 0 - bl sub_812256C - ldr r1, _0804D174 @ =gMain - movs r5, 0x87 - lsls r5, 3 - adds r1, r5 - b _0804D4B4 - .align 2, 0 -_0804D170: .4byte gUnknown_2031DA8 -_0804D174: .4byte gMain -_0804D178: - ldr r0, _0804D194 @ =gUnknown_2031DA8 - ldr r1, [r0] - adds r0, r1, 0 - adds r0, 0x36 - adds r1, 0x28 - movs r2, 0x1 - bl sub_812256C - ldr r1, _0804D198 @ =gMain - movs r7, 0x87 - lsls r7, 3 - adds r1, r7 - b _0804D4B4 - .align 2, 0 -_0804D194: .4byte gUnknown_2031DA8 -_0804D198: .4byte gMain -_0804D19C: - ldr r0, _0804D214 @ =gSaveBlock2Ptr - ldr r0, [r0] - ldr r6, _0804D218 @ =gUnknown_2031C94 - ldr r1, [r6] - ldr r5, _0804D21C @ =gDecompressionBuffer - str r5, [sp] - movs r4, 0x3 - str r4, [sp, 0x4] - movs r2, 0 - movs r3, 0 - bl sub_808BEB4 - bl GetMultiplayerId - lsls r0, 24 - movs r1, 0x80 - lsls r1, 17 - eors r1, r0 - lsrs r1, 24 - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - ldr r1, _0804D220 @ =gLinkPlayers + 8 - adds r0, r1 - ldr r1, [r6, 0xC] - str r5, [sp] - str r4, [sp, 0x4] - movs r2, 0 - movs r3, 0 - bl sub_808BEB4 - ldr r4, _0804D224 @ =gUnknown_8261ECC - ldr r0, [r4] - ldr r1, [r6, 0x18] - str r5, [sp] - movs r2, 0x2 - str r2, [sp, 0x4] - movs r2, 0 - movs r3, 0 - bl sub_808BEB4 - ldr r0, [r4, 0x4] - ldr r1, [r6, 0x20] - movs r2, 0x18 - bl sub_804F728 - ldr r1, _0804D228 @ =gMain - movs r0, 0x87 - lsls r0, 3 - adds r1, r0 -_0804D200: - ldrb r0, [r1] - adds r0, 0x1 - movs r2, 0 - strb r0, [r1] - ldr r0, _0804D22C @ =gUnknown_2031DA8 - ldr r0, [r0] - adds r0, 0xA8 - strb r2, [r0] - b _0804D4D2 - .align 2, 0 -_0804D214: .4byte gSaveBlock2Ptr -_0804D218: .4byte gUnknown_2031C94 -_0804D21C: .4byte gDecompressionBuffer -_0804D220: .4byte gLinkPlayers + 8 -_0804D224: .4byte gUnknown_8261ECC -_0804D228: .4byte gMain -_0804D22C: .4byte gUnknown_2031DA8 -_0804D230: - bl sub_804F610 - lsls r0, 24 - cmp r0, 0 - bne _0804D23C - b _0804D4D2 -_0804D23C: - ldr r1, _0804D248 @ =gMain - movs r2, 0x87 - lsls r2, 3 - adds r1, r2 - b _0804D4B4 - .align 2, 0 -_0804D248: .4byte gMain -_0804D24C: - ldr r0, _0804D30C @ =gSaveBlock2Ptr - ldr r1, [r0] - movs r0, 0x1 - movs r2, 0 - bl GetStringWidth - adds r1, r0, 0 - movs r0, 0x38 - subs r0, r1 - lsrs r1, r0, 31 - adds r0, r1 - movs r6, 0 - add r5, sp, 0xC - ldr r3, _0804D310 @ =gTradeUnknownSpriteCoords - mov r8, r3 - asrs r0, 1 - ldrb r7, [r3, 0x4] - adds r4, r0, r7 -_0804D270: - add r1, sp, 0xC - ldr r0, _0804D314 @ =gUnknown_8261CC8 - ldm r0!, {r2,r3,r7} - stm r1!, {r2,r3,r7} - ldm r0!, {r2,r3,r7} - stm r1!, {r2,r3,r7} - ldrh r0, [r5] - adds r0, r6 - strh r0, [r5] - lsls r1, r4, 16 - asrs r1, 16 - add r0, sp, 0xC - mov r3, r8 - ldrb r2, [r3, 0x5] - movs r3, 0x1 - bl CreateSprite - adds r4, 0x20 - adds r6, 0x1 - cmp r6, 0x2 - ble _0804D270 - bl GetMultiplayerId - lsls r0, 24 - movs r1, 0x80 - lsls r1, 17 - eors r1, r0 - lsrs r1, 24 - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - ldr r1, _0804D318 @ =gLinkPlayers + 8 - adds r1, r0, r1 - movs r0, 0x1 - movs r2, 0 - bl GetStringWidth - adds r1, r0, 0 - movs r0, 0x38 - subs r0, r1 - lsrs r1, r0, 31 - adds r0, r1 - movs r6, 0 - add r5, sp, 0xC - ldr r7, _0804D310 @ =gTradeUnknownSpriteCoords - mov r8, r7 - asrs r0, 1 - mov r1, r8 - ldrb r1, [r1, 0x6] - adds r4, r0, r1 -_0804D2D4: - add r1, sp, 0xC - ldr r0, _0804D314 @ =gUnknown_8261CC8 - ldm r0!, {r2,r3,r7} - stm r1!, {r2,r3,r7} - ldm r0!, {r2,r3,r7} - stm r1!, {r2,r3,r7} - adds r0, r6, 0x3 - ldrh r1, [r5] - adds r0, r1 - strh r0, [r5] - lsls r1, r4, 16 - asrs r1, 16 - add r0, sp, 0xC - mov r3, r8 - ldrb r2, [r3, 0x7] - movs r3, 0x1 - bl CreateSprite - adds r4, 0x20 - adds r6, 0x1 - cmp r6, 0x2 - ble _0804D2D4 - ldr r1, _0804D31C @ =gMain - movs r5, 0x87 - lsls r5, 3 - adds r1, r5 - b _0804D4B4 - .align 2, 0 -_0804D30C: .4byte gSaveBlock2Ptr -_0804D310: .4byte gTradeUnknownSpriteCoords -_0804D314: .4byte gUnknown_8261CC8 -_0804D318: .4byte gLinkPlayers + 8 -_0804D31C: .4byte gMain -_0804D320: - ldr r4, _0804D3B0 @ =gUnknown_8261CC8 - add r1, sp, 0xC - adds r0, r4, 0 - ldm r0!, {r2,r3,r7} - stm r1!, {r2,r3,r7} - ldm r0!, {r2,r5,r7} - stm r1!, {r2,r5,r7} - add r1, sp, 0xC - adds r0, r1, 0 - ldrh r0, [r0] - adds r0, 0x6 - strh r0, [r1] - adds r0, r1, 0 - movs r1, 0xD7 - movs r2, 0x97 - movs r3, 0x1 - bl CreateSprite - add r0, sp, 0xC - ldm r4!, {r3,r5,r7} - stm r0!, {r3,r5,r7} - ldm r4!, {r1-r3} - stm r0!, {r1-r3} - add r1, sp, 0xC - adds r0, r1, 0 - ldrh r0, [r0] - adds r0, 0x7 - strh r0, [r1] - adds r0, r1, 0 - movs r1, 0xF7 - movs r2, 0x97 - movs r3, 0x1 - bl CreateSprite - movs r6, 0 - add r4, sp, 0xC - movs r5, 0xC0 - lsls r5, 13 -_0804D36C: - add r1, sp, 0xC - ldr r0, _0804D3B0 @ =gUnknown_8261CC8 - ldm r0!, {r2,r3,r7} - stm r1!, {r2,r3,r7} - ldm r0!, {r2,r3,r7} - stm r1!, {r2,r3,r7} - adds r0, r6, 0 - adds r0, 0x8 - ldrh r7, [r4] - adds r0, r7 - strh r0, [r4] - asrs r1, r5, 16 - add r0, sp, 0xC - movs r2, 0x96 - movs r3, 0x1 - bl CreateSprite - movs r0, 0x80 - lsls r0, 14 - adds r5, r0 - adds r6, 0x1 - cmp r6, 0x5 - ble _0804D36C - ldr r4, _0804D3B4 @ =gUnknown_2031DA8 - ldr r0, [r4] - adds r0, 0x35 - ldrb r0, [r0] - cmp r0, 0x5 - bhi _0804D3B8 - bl sub_8138B20 - ldr r1, [r4] - b _0804D3C0 - .align 2, 0 -_0804D3B0: .4byte gUnknown_8261CC8 -_0804D3B4: .4byte gUnknown_2031DA8 -_0804D3B8: - bl sub_8138B20 - ldr r1, [r4] - adds r0, 0x6 -_0804D3C0: - adds r1, 0x35 - strb r0, [r1] - ldr r0, _0804D404 @ =gUnknown_8261CB0 - ldr r3, _0804D408 @ =gTradeMonSpriteCoords - ldr r4, _0804D40C @ =gUnknown_2031DA8 - ldr r1, [r4] - adds r1, 0x35 - ldrb r2, [r1] - lsls r2, 1 - adds r1, r2, r3 - ldrb r1, [r1] - lsls r1, 19 - movs r5, 0x80 - lsls r5, 14 - adds r1, r5 - asrs r1, 16 - adds r3, 0x1 - adds r2, r3 - ldrb r2, [r2] - lsls r2, 3 - movs r3, 0x2 - bl CreateSprite - ldr r1, [r4] - adds r1, 0x34 - strb r0, [r1] - ldr r0, _0804D410 @ =gMain - movs r7, 0x87 - lsls r7, 3 - adds r0, r7 - movs r1, 0x10 - strb r1, [r0] - b _0804D4D2 - .align 2, 0 -_0804D404: .4byte gUnknown_8261CB0 -_0804D408: .4byte gTradeMonSpriteCoords -_0804D40C: .4byte gUnknown_2031DA8 -_0804D410: .4byte gMain -_0804D414: - movs r0, 0 - bl sub_804D694 - b _0804D4AC -_0804D41C: - movs r0, 0x1 - bl sub_804D694 - ldr r2, _0804D43C @ =gUnknown_2031DA8 - ldr r0, [r2] - movs r1, 0 - strb r1, [r0] - ldr r0, [r2] - strb r1, [r0, 0x1] - bl sub_804D764 - ldr r1, _0804D440 @ =gMain - movs r2, 0x87 - lsls r2, 3 - adds r1, r2 - b _0804D4B4 - .align 2, 0 -_0804D43C: .4byte gUnknown_2031DA8 -_0804D440: .4byte gMain -_0804D444: - ldr r2, _0804D478 @ =gPaletteFade - ldrb r1, [r2, 0x8] - movs r0, 0x7F - ands r0, r1 - strb r0, [r2, 0x8] - movs r4, 0x1 - negs r4, r4 - adds r0, r4, 0 - movs r1, 0x10 - movs r2, 0 - bl BlendPalettes - movs r0, 0 - str r0, [sp] - adds r0, r4, 0 - movs r1, 0 - movs r2, 0x10 - movs r3, 0 - bl BeginNormalPaletteFade - ldr r1, _0804D47C @ =gMain - movs r3, 0x87 - lsls r3, 3 - adds r1, r3 - b _0804D4B4 - .align 2, 0 -_0804D478: .4byte gPaletteFade -_0804D47C: .4byte gMain -_0804D480: - movs r1, 0x82 - lsls r1, 5 - movs r0, 0 - bl SetGpuReg - movs r0, 0x2 - bl sub_804D694 - ldr r1, _0804D49C @ =gMain - movs r5, 0x87 - lsls r5, 3 - adds r1, r5 - b _0804D4B4 - .align 2, 0 -_0804D49C: .4byte gMain -_0804D4A0: - movs r7, 0x87 - lsls r7, 3 - adds r1, r2, r7 - b _0804D4B4 -_0804D4A8: - bl sub_804F964 -_0804D4AC: - ldr r1, _0804D4BC @ =gMain - movs r0, 0x87 - lsls r0, 3 - adds r1, r0 -_0804D4B4: - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - b _0804D4D2 - .align 2, 0 -_0804D4BC: .4byte gMain -_0804D4C0: - ldr r0, _0804D4F0 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _0804D4D2 - ldr r0, _0804D4F4 @ =sub_804D638 - bl SetMainCallback2 -_0804D4D2: - bl RunTasks - bl AnimateSprites - bl BuildOamBuffer - bl UpdatePaletteFade - add sp, 0x24 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0804D4F0: .4byte gPaletteFade -_0804D4F4: .4byte sub_804D638 - thumb_func_end sub_804CF14 - thumb_func_start sub_804D4F8 sub_804D4F8: @ 804D4F8 push {lr} diff --git a/include/party_menu.h b/include/party_menu.h index 63db4a4d8..7f5433553 100644 --- a/include/party_menu.h +++ b/include/party_menu.h @@ -82,7 +82,7 @@ void OpenPartyMenuInBattle(u8 arg); void sub_8127EC4(u8 battlerId, u8 unk, u8 arrayIndex); bool8 IsMultiBattle(void); void sub_8126EDC(void); -void sub_812256C(u8 *partyCount, u8 *icons, u8 side); +void sub_812256C(u8 *partyCount, u8 (*icons)[6], u8 side); void PartyMenuInit_FromPlayerPc(void); void CB2_PartyMenuFromStartMenu(void); void sub_8128198(void); diff --git a/include/pokemon_summary_screen.h b/include/pokemon_summary_screen.h index 7b250b647..90a67205c 100644 --- a/include/pokemon_summary_screen.h +++ b/include/pokemon_summary_screen.h @@ -33,4 +33,6 @@ enum PokemonSummaryScreenPage PSS_PAGE_CONTEST_MOVES, }; +s32 sub_8138B20(void); + #endif // GUARD_POKEMON_SUMMARY_SCREEN_H diff --git a/src/trade.c b/src/trade.c index 08e0d6372..e816d773f 100644 --- a/src/trade.c +++ b/src/trade.c @@ -15,6 +15,7 @@ #include "cable_club.h" #include "sound.h" #include "party_menu.h" +#include "pokemon_summary_screen.h" #include "pokemon_storage_system.h" #include "constants/species.h" #include "constants/items.h" @@ -138,6 +139,7 @@ void sub_804C718(void) } #ifdef NONMATCHING +// See note on case 12 below void sub_804C728(void) { int i; @@ -290,11 +292,11 @@ void sub_804C728(void) break; case 8: LoadHeldItemIcons(); - sub_812256C(&gUnknown_2031DA8->partyCounts[0], gUnknown_2031DA8->partyIcons[0], 0); + sub_812256C(gUnknown_2031DA8->partyCounts, gUnknown_2031DA8->partyIcons, 0); gMain.state++; break; case 9: - sub_812256C(&gUnknown_2031DA8->partyCounts[0], gUnknown_2031DA8->partyIcons[0], 1); + sub_812256C(gUnknown_2031DA8->partyCounts, gUnknown_2031DA8->partyIcons, 1); gMain.state++; break; case 10: @@ -1323,3 +1325,879 @@ void sub_804C728(void) "_0804CF10: .4byte sub_804D638"); } #endif //NONMATCHING + +#ifdef NONMATCHING +// Nonmatching behaviour is the same as the function above +void sub_804CF14(void) +{ + int i; + struct SpriteTemplate temp; + u8 id; + s32 width; + u32 xPos; + + switch (gMain.state) + { + case 0: + sub_804C600(); + gMain.state++; + break; + case 1: + gMain.state++; + gUnknown_2031DA8->unk_A8 = 0; + break; + case 2: + gMain.state++; + break; + case 3: + gMain.state++; + break; + case 4: + CalculatePlayerPartyCount(); + gMain.state++; + break; + case 5: + if (gWirelessCommType != 0) + { + LoadWirelessStatusIndicatorSpriteGfx(); + CreateWirelessStatusIndicatorSprite(0, 0); + } + gMain.state++; + break; + case 6: + gMain.state++; + break; + case 7: + CalculateEnemyPartyCount(); + gUnknown_2031DA8->partyCounts[0] = gPlayerPartyCount; + gUnknown_2031DA8->partyCounts[1] = gEnemyPartyCount; + ClearWindowTilemap(0); + sub_804F020(0); + sub_804F020(1); + for (i = 0; i < gUnknown_2031DA8->partyCounts[0]; i++) + { + gUnknown_2031DA8->partyIcons[0][i] = CreateMonIcon( + GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2, NULL), + SpriteCB_MonIcon, + gTradeMonSpriteCoords[i][0] * 8 + 14, + gTradeMonSpriteCoords[i][1] * 8 - 12, + 1, + GetMonData(&gPlayerParty[i], MON_DATA_PERSONALITY), + TRUE + ); + } + for (i = 0; i < gUnknown_2031DA8->partyCounts[1]; i++) + { + gUnknown_2031DA8->partyIcons[1][i] = CreateMonIcon( + GetMonData(&gEnemyParty[i], MON_DATA_SPECIES2, NULL), + SpriteCB_MonIcon, + gTradeMonSpriteCoords[i + 6][0] * 8 + 14, + gTradeMonSpriteCoords[i + 6][1] * 8 - 12, + 1, + GetMonData(&gEnemyParty[i], MON_DATA_PERSONALITY), + FALSE + ); + } + gMain.state++; + break; + case 8: + LoadHeldItemIcons(); + sub_812256C(gUnknown_2031DA8->partyCounts, gUnknown_2031DA8->partyIcons, 0); + gMain.state++; + break; + case 9: + sub_812256C(gUnknown_2031DA8->partyCounts, gUnknown_2031DA8->partyIcons, 1); + gMain.state++; + break; + case 10: + sub_808BEB4(gSaveBlock2Ptr->playerName, gUnknown_2031C94[0], 0, 0, gDecompressionBuffer, 3); + id = GetMultiplayerId(); + sub_808BEB4(gLinkPlayers[id ^ 1].name, gUnknown_2031C94[3], 0, 0, gDecompressionBuffer, 3); + sub_808BEB4(gUnknown_8261ECC[0], gUnknown_2031C94[6], 0, 0, gDecompressionBuffer, 2); + sub_804F728(gUnknown_8261ECC[1], gUnknown_2031C94[8], 24); + gMain.state++; + gUnknown_2031DA8->unk_A8 = 0; + break; + case 11: + if (sub_804F610()) + { + gMain.state++; + } + break; + case 12: + width = GetStringWidth(1, gSaveBlock2Ptr->playerName, 0); + xPos = (56 - width) / 2; + for (i = 0; i < 3; i++) + { + temp = gUnknown_8261CC8; + temp.tileTag += i; + CreateSprite(&temp, xPos + gTradeUnknownSpriteCoords[LANGUAGE_ENGLISH - 1][0] + (i * 32), gTradeUnknownSpriteCoords[LANGUAGE_ENGLISH - 1][1], 1); + } + + /* + * These three lines are a pain to match due to register alloc and + * pointer arithmetic misbehavior. + */ + id = GetMultiplayerId(); + id ^= 1; + width = GetStringWidth(1, gLinkPlayers[id].name, 0); + xPos = (56 - width) / 2; + for (i = 0; i < 3; i++) + { + temp = gUnknown_8261CC8; + temp.tileTag += i + 3; + CreateSprite(&temp, xPos + gTradeUnknownSpriteCoords[LANGUAGE_ENGLISH - 1][2] + (i * 32), gTradeUnknownSpriteCoords[LANGUAGE_ENGLISH - 1][3], 1); + } + gMain.state++; + break; + case 13: + temp = gUnknown_8261CC8; + temp.tileTag += 6; + CreateSprite(&temp, 215, 151, 1); + temp = gUnknown_8261CC8; + temp.tileTag += 7; + CreateSprite(&temp, 247, 151, 1); + + for (i = 0; i < PARTY_SIZE; i++) + { + temp = gUnknown_8261CC8; + temp.tileTag += i + 8; + CreateSprite(&temp, (i * 32) + 24, 150, 1); + } + + if (gUnknown_2031DA8->tradeMenuCursorPosition < 6) + gUnknown_2031DA8->tradeMenuCursorPosition = sub_8138B20(); + else + gUnknown_2031DA8->tradeMenuCursorPosition = sub_8138B20() + 6; + + gUnknown_2031DA8->tradeMenuCursorSpriteIdx = CreateSprite(&gUnknown_8261CB0, gTradeMonSpriteCoords[gUnknown_2031DA8->tradeMenuCursorPosition][0] * 8 + 32, gTradeMonSpriteCoords[gUnknown_2031DA8->tradeMenuCursorPosition][1] * 8, 2); + gMain.state = 16; + break; + case 16: + sub_804D694(0); + gMain.state++; + break; + case 17: + sub_804D694(1); + gUnknown_2031DA8->unk_0 = 0; + gUnknown_2031DA8->unk_1 = 0; + sub_804D764(); + gMain.state++; + break; + case 18: + gPaletteFade.bufferTransferDisabled = FALSE; + BlendPalettes(0xFFFFFFFF, 16, RGB_BLACK); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); + gMain.state++; + break; + case 19: + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON); + sub_804D694(2); + gMain.state++; + break; + case 20: + gMain.state++; + break; + case 21: + sub_804F964(); + gMain.state++; + break; + case 22: + if (!gPaletteFade.active) + { + SetMainCallback2(sub_804D638); + } + break; + } + + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} +#else +NAKED +void sub_804CF14(void) +{ + asm_unified("\tpush {r4-r7,lr}\n" + "\tmov r7, r8\n" + "\tpush {r7}\n" + "\tsub sp, 0x24\n" + "\tldr r1, _0804CF38 @ =gMain\n" + "\tmovs r2, 0x87\n" + "\tlsls r2, 3\n" + "\tadds r0, r1, r2\n" + "\tldrb r0, [r0]\n" + "\tadds r2, r1, 0\n" + "\tcmp r0, 0x16\n" + "\tbls _0804CF2E\n" + "\tb _0804D4D2\n" + "_0804CF2E:\n" + "\tlsls r0, 2\n" + "\tldr r1, _0804CF3C @ =_0804CF40\n" + "\tadds r0, r1\n" + "\tldr r0, [r0]\n" + "\tmov pc, r0\n" + "\t.align 2, 0\n" + "_0804CF38: .4byte gMain\n" + "_0804CF3C: .4byte _0804CF40\n" + "\t.align 2, 0\n" + "_0804CF40:\n" + "\t.4byte _0804CF9C\n" + "\t.4byte _0804CFB0\n" + "\t.4byte _0804CFB8\n" + "\t.4byte _0804CFC0\n" + "\t.4byte _0804CFC8\n" + "\t.4byte _0804CFDC\n" + "\t.4byte _0804D004\n" + "\t.4byte _0804D00C\n" + "\t.4byte _0804D150\n" + "\t.4byte _0804D178\n" + "\t.4byte _0804D19C\n" + "\t.4byte _0804D230\n" + "\t.4byte _0804D24C\n" + "\t.4byte _0804D320\n" + "\t.4byte _0804D4D2\n" + "\t.4byte _0804D4D2\n" + "\t.4byte _0804D414\n" + "\t.4byte _0804D41C\n" + "\t.4byte _0804D444\n" + "\t.4byte _0804D480\n" + "\t.4byte _0804D4A0\n" + "\t.4byte _0804D4A8\n" + "\t.4byte _0804D4C0\n" + "_0804CF9C:\n" + "\tbl sub_804C600\n" + "\tldr r1, _0804CFAC @ =gMain\n" + "\tmovs r3, 0x87\n" + "\tlsls r3, 3\n" + "\tadds r1, r3\n" + "\tb _0804D4B4\n" + "\t.align 2, 0\n" + "_0804CFAC: .4byte gMain\n" + "_0804CFB0:\n" + "\tmovs r5, 0x87\n" + "\tlsls r5, 3\n" + "\tadds r1, r2, r5\n" + "\tb _0804D200\n" + "_0804CFB8:\n" + "\tmovs r7, 0x87\n" + "\tlsls r7, 3\n" + "\tadds r1, r2, r7\n" + "\tb _0804D4B4\n" + "_0804CFC0:\n" + "\tmovs r0, 0x87\n" + "\tlsls r0, 3\n" + "\tadds r1, r2, r0\n" + "\tb _0804D4B4\n" + "_0804CFC8:\n" + "\tbl CalculatePlayerPartyCount\n" + "\tldr r1, _0804CFD8 @ =gMain\n" + "\tmovs r2, 0x87\n" + "\tlsls r2, 3\n" + "\tadds r1, r2\n" + "\tb _0804D4B4\n" + "\t.align 2, 0\n" + "_0804CFD8: .4byte gMain\n" + "_0804CFDC:\n" + "\tldr r0, _0804CFFC @ =gWirelessCommType\n" + "\tldrb r0, [r0]\n" + "\tcmp r0, 0\n" + "\tbeq _0804CFF0\n" + "\tbl LoadWirelessStatusIndicatorSpriteGfx\n" + "\tmovs r0, 0\n" + "\tmovs r1, 0\n" + "\tbl CreateWirelessStatusIndicatorSprite\n" + "_0804CFF0:\n" + "\tldr r1, _0804D000 @ =gMain\n" + "\tmovs r3, 0x87\n" + "\tlsls r3, 3\n" + "\tadds r1, r3\n" + "\tb _0804D4B4\n" + "\t.align 2, 0\n" + "_0804CFFC: .4byte gWirelessCommType\n" + "_0804D000: .4byte gMain\n" + "_0804D004:\n" + "\tmovs r5, 0x87\n" + "\tlsls r5, 3\n" + "\tadds r1, r2, r5\n" + "\tb _0804D4B4\n" + "_0804D00C:\n" + "\tbl CalculateEnemyPartyCount\n" + "\tldr r4, _0804D12C @ =gUnknown_2031DA8\n" + "\tldr r0, [r4]\n" + "\tldr r1, _0804D130 @ =gPlayerPartyCount\n" + "\tldrb r1, [r1]\n" + "\tadds r0, 0x36\n" + "\tstrb r1, [r0]\n" + "\tldr r0, [r4]\n" + "\tldr r1, _0804D134 @ =gEnemyPartyCount\n" + "\tldrb r1, [r1]\n" + "\tadds r0, 0x37\n" + "\tstrb r1, [r0]\n" + "\tmovs r0, 0\n" + "\tbl ClearWindowTilemap\n" + "\tmovs r0, 0\n" + "\tbl sub_804F020\n" + "\tmovs r0, 0x1\n" + "\tbl sub_804F020\n" + "\tmovs r6, 0\n" + "\tldr r0, [r4]\n" + "\tadds r0, 0x36\n" + "\tldrb r0, [r0]\n" + "\tcmp r6, r0\n" + "\tbge _0804D0A8\n" + "\tmov r8, r4\n" + "\tldr r7, _0804D138 @ =gTradeMonSpriteCoords\n" + "_0804D048:\n" + "\tmovs r0, 0x64\n" + "\tadds r4, r6, 0\n" + "\tmuls r4, r0\n" + "\tldr r0, _0804D13C @ =gPlayerParty\n" + "\tadds r4, r0\n" + "\tadds r0, r4, 0\n" + "\tmovs r1, 0x41\n" + "\tmovs r2, 0\n" + "\tbl GetMonData\n" + "\tadds r5, r0, 0\n" + "\tlsls r5, 16\n" + "\tlsrs r5, 16\n" + "\tadds r0, r4, 0\n" + "\tmovs r1, 0\n" + "\tbl GetMonData\n" + "\tldrb r2, [r7]\n" + "\tlsls r2, 19\n" + "\tmovs r1, 0xE0\n" + "\tlsls r1, 12\n" + "\tadds r2, r1\n" + "\tasrs r2, 16\n" + "\tldrb r3, [r7, 0x1]\n" + "\tlsls r3, 19\n" + "\tldr r1, _0804D140 @ =0xfff40000\n" + "\tadds r3, r1\n" + "\tasrs r3, 16\n" + "\tmovs r1, 0x1\n" + "\tstr r1, [sp]\n" + "\tstr r0, [sp, 0x4]\n" + "\tstr r1, [sp, 0x8]\n" + "\tadds r0, r5, 0\n" + "\tldr r1, _0804D144 @ =SpriteCB_MonIcon\n" + "\tbl CreateMonIcon\n" + "\tmov r2, r8\n" + "\tldr r1, [r2]\n" + "\tadds r1, 0x28\n" + "\tadds r1, r6\n" + "\tstrb r0, [r1]\n" + "\tadds r7, 0x2\n" + "\tadds r6, 0x1\n" + "\tldr r0, [r2]\n" + "\tadds r0, 0x36\n" + "\tldrb r0, [r0]\n" + "\tcmp r6, r0\n" + "\tblt _0804D048\n" + "_0804D0A8:\n" + "\tmovs r6, 0\n" + "\tldr r1, _0804D12C @ =gUnknown_2031DA8\n" + "\tldr r0, [r1]\n" + "\tadds r0, 0x37\n" + "\tldrb r0, [r0]\n" + "\tcmp r6, r0\n" + "\tbge _0804D120\n" + "\tldr r0, _0804D138 @ =gTradeMonSpriteCoords\n" + "\tmov r8, r1\n" + "\tadds r7, r0, 0\n" + "\tadds r7, 0xC\n" + "_0804D0BE:\n" + "\tmovs r0, 0x64\n" + "\tadds r4, r6, 0\n" + "\tmuls r4, r0\n" + "\tldr r0, _0804D148 @ =gEnemyParty\n" + "\tadds r4, r0\n" + "\tadds r0, r4, 0\n" + "\tmovs r1, 0x41\n" + "\tmovs r2, 0\n" + "\tbl GetMonData\n" + "\tadds r5, r0, 0\n" + "\tlsls r5, 16\n" + "\tlsrs r5, 16\n" + "\tadds r0, r4, 0\n" + "\tmovs r1, 0\n" + "\tbl GetMonData\n" + "\tldrb r2, [r7]\n" + "\tlsls r2, 19\n" + "\tmovs r3, 0xE0\n" + "\tlsls r3, 12\n" + "\tadds r2, r3\n" + "\tasrs r2, 16\n" + "\tldrb r3, [r7, 0x1]\n" + "\tlsls r3, 19\n" + "\tldr r1, _0804D140 @ =0xfff40000\n" + "\tadds r3, r1\n" + "\tasrs r3, 16\n" + "\tmovs r1, 0x1\n" + "\tstr r1, [sp]\n" + "\tstr r0, [sp, 0x4]\n" + "\tmovs r0, 0\n" + "\tstr r0, [sp, 0x8]\n" + "\tadds r0, r5, 0\n" + "\tldr r1, _0804D144 @ =SpriteCB_MonIcon\n" + "\tbl CreateMonIcon\n" + "\tmov r2, r8\n" + "\tldr r1, [r2]\n" + "\tadds r1, 0x2E\n" + "\tadds r1, r6\n" + "\tstrb r0, [r1]\n" + "\tadds r7, 0x2\n" + "\tadds r6, 0x1\n" + "\tldr r0, [r2]\n" + "\tadds r0, 0x37\n" + "\tldrb r0, [r0]\n" + "\tcmp r6, r0\n" + "\tblt _0804D0BE\n" + "_0804D120:\n" + "\tldr r1, _0804D14C @ =gMain\n" + "\tmovs r3, 0x87\n" + "\tlsls r3, 3\n" + "\tadds r1, r3\n" + "\tb _0804D4B4\n" + "\t.align 2, 0\n" + "_0804D12C: .4byte gUnknown_2031DA8\n" + "_0804D130: .4byte gPlayerPartyCount\n" + "_0804D134: .4byte gEnemyPartyCount\n" + "_0804D138: .4byte gTradeMonSpriteCoords\n" + "_0804D13C: .4byte gPlayerParty\n" + "_0804D140: .4byte 0xfff40000\n" + "_0804D144: .4byte SpriteCB_MonIcon\n" + "_0804D148: .4byte gEnemyParty\n" + "_0804D14C: .4byte gMain\n" + "_0804D150:\n" + "\tbl LoadHeldItemIcons\n" + "\tldr r0, _0804D170 @ =gUnknown_2031DA8\n" + "\tldr r1, [r0]\n" + "\tadds r0, r1, 0\n" + "\tadds r0, 0x36\n" + "\tadds r1, 0x28\n" + "\tmovs r2, 0\n" + "\tbl sub_812256C\n" + "\tldr r1, _0804D174 @ =gMain\n" + "\tmovs r5, 0x87\n" + "\tlsls r5, 3\n" + "\tadds r1, r5\n" + "\tb _0804D4B4\n" + "\t.align 2, 0\n" + "_0804D170: .4byte gUnknown_2031DA8\n" + "_0804D174: .4byte gMain\n" + "_0804D178:\n" + "\tldr r0, _0804D194 @ =gUnknown_2031DA8\n" + "\tldr r1, [r0]\n" + "\tadds r0, r1, 0\n" + "\tadds r0, 0x36\n" + "\tadds r1, 0x28\n" + "\tmovs r2, 0x1\n" + "\tbl sub_812256C\n" + "\tldr r1, _0804D198 @ =gMain\n" + "\tmovs r7, 0x87\n" + "\tlsls r7, 3\n" + "\tadds r1, r7\n" + "\tb _0804D4B4\n" + "\t.align 2, 0\n" + "_0804D194: .4byte gUnknown_2031DA8\n" + "_0804D198: .4byte gMain\n" + "_0804D19C:\n" + "\tldr r0, _0804D214 @ =gSaveBlock2Ptr\n" + "\tldr r0, [r0]\n" + "\tldr r6, _0804D218 @ =gUnknown_2031C94\n" + "\tldr r1, [r6]\n" + "\tldr r5, _0804D21C @ =gDecompressionBuffer\n" + "\tstr r5, [sp]\n" + "\tmovs r4, 0x3\n" + "\tstr r4, [sp, 0x4]\n" + "\tmovs r2, 0\n" + "\tmovs r3, 0\n" + "\tbl sub_808BEB4\n" + "\tbl GetMultiplayerId\n" + "\tlsls r0, 24\n" + "\tmovs r1, 0x80\n" + "\tlsls r1, 17\n" + "\teors r1, r0\n" + "\tlsrs r1, 24\n" + "\tlsls r0, r1, 3\n" + "\tsubs r0, r1\n" + "\tlsls r0, 2\n" + "\tldr r1, _0804D220 @ =gLinkPlayers + 8\n" + "\tadds r0, r1\n" + "\tldr r1, [r6, 0xC]\n" + "\tstr r5, [sp]\n" + "\tstr r4, [sp, 0x4]\n" + "\tmovs r2, 0\n" + "\tmovs r3, 0\n" + "\tbl sub_808BEB4\n" + "\tldr r4, _0804D224 @ =gUnknown_8261ECC\n" + "\tldr r0, [r4]\n" + "\tldr r1, [r6, 0x18]\n" + "\tstr r5, [sp]\n" + "\tmovs r2, 0x2\n" + "\tstr r2, [sp, 0x4]\n" + "\tmovs r2, 0\n" + "\tmovs r3, 0\n" + "\tbl sub_808BEB4\n" + "\tldr r0, [r4, 0x4]\n" + "\tldr r1, [r6, 0x20]\n" + "\tmovs r2, 0x18\n" + "\tbl sub_804F728\n" + "\tldr r1, _0804D228 @ =gMain\n" + "\tmovs r0, 0x87\n" + "\tlsls r0, 3\n" + "\tadds r1, r0\n" + "_0804D200:\n" + "\tldrb r0, [r1]\n" + "\tadds r0, 0x1\n" + "\tmovs r2, 0\n" + "\tstrb r0, [r1]\n" + "\tldr r0, _0804D22C @ =gUnknown_2031DA8\n" + "\tldr r0, [r0]\n" + "\tadds r0, 0xA8\n" + "\tstrb r2, [r0]\n" + "\tb _0804D4D2\n" + "\t.align 2, 0\n" + "_0804D214: .4byte gSaveBlock2Ptr\n" + "_0804D218: .4byte gUnknown_2031C94\n" + "_0804D21C: .4byte gDecompressionBuffer\n" + "_0804D220: .4byte gLinkPlayers + 8\n" + "_0804D224: .4byte gUnknown_8261ECC\n" + "_0804D228: .4byte gMain\n" + "_0804D22C: .4byte gUnknown_2031DA8\n" + "_0804D230:\n" + "\tbl sub_804F610\n" + "\tlsls r0, 24\n" + "\tcmp r0, 0\n" + "\tbne _0804D23C\n" + "\tb _0804D4D2\n" + "_0804D23C:\n" + "\tldr r1, _0804D248 @ =gMain\n" + "\tmovs r2, 0x87\n" + "\tlsls r2, 3\n" + "\tadds r1, r2\n" + "\tb _0804D4B4\n" + "\t.align 2, 0\n" + "_0804D248: .4byte gMain\n" + "_0804D24C:\n" + "\tldr r0, _0804D30C @ =gSaveBlock2Ptr\n" + "\tldr r1, [r0]\n" + "\tmovs r0, 0x1\n" + "\tmovs r2, 0\n" + "\tbl GetStringWidth\n" + "\tadds r1, r0, 0\n" + "\tmovs r0, 0x38\n" + "\tsubs r0, r1\n" + "\tlsrs r1, r0, 31\n" + "\tadds r0, r1\n" + "\tmovs r6, 0\n" + "\tadd r5, sp, 0xC\n" + "\tldr r3, _0804D310 @ =gTradeUnknownSpriteCoords\n" + "\tmov r8, r3\n" + "\tasrs r0, 1\n" + "\tldrb r7, [r3, 0x4]\n" + "\tadds r4, r0, r7\n" + "_0804D270:\n" + "\tadd r1, sp, 0xC\n" + "\tldr r0, _0804D314 @ =gUnknown_8261CC8\n" + "\tldm r0!, {r2,r3,r7}\n" + "\tstm r1!, {r2,r3,r7}\n" + "\tldm r0!, {r2,r3,r7}\n" + "\tstm r1!, {r2,r3,r7}\n" + "\tldrh r0, [r5]\n" + "\tadds r0, r6\n" + "\tstrh r0, [r5]\n" + "\tlsls r1, r4, 16\n" + "\tasrs r1, 16\n" + "\tadd r0, sp, 0xC\n" + "\tmov r3, r8\n" + "\tldrb r2, [r3, 0x5]\n" + "\tmovs r3, 0x1\n" + "\tbl CreateSprite\n" + "\tadds r4, 0x20\n" + "\tadds r6, 0x1\n" + "\tcmp r6, 0x2\n" + "\tble _0804D270\n" + "\tbl GetMultiplayerId\n" + "\tlsls r0, 24\n" + "\tmovs r1, 0x80\n" + "\tlsls r1, 17\n" + "\teors r1, r0\n" + "\tlsrs r1, 24\n" + "\tlsls r0, r1, 3\n" + "\tsubs r0, r1\n" + "\tlsls r0, 2\n" + "\tldr r1, _0804D318 @ =gLinkPlayers + 8\n" + "\tadds r1, r0, r1\n" + "\tmovs r0, 0x1\n" + "\tmovs r2, 0\n" + "\tbl GetStringWidth\n" + "\tadds r1, r0, 0\n" + "\tmovs r0, 0x38\n" + "\tsubs r0, r1\n" + "\tlsrs r1, r0, 31\n" + "\tadds r0, r1\n" + "\tmovs r6, 0\n" + "\tadd r5, sp, 0xC\n" + "\tldr r7, _0804D310 @ =gTradeUnknownSpriteCoords\n" + "\tmov r8, r7\n" + "\tasrs r0, 1\n" + "\tmov r1, r8\n" + "\tldrb r1, [r1, 0x6]\n" + "\tadds r4, r0, r1\n" + "_0804D2D4:\n" + "\tadd r1, sp, 0xC\n" + "\tldr r0, _0804D314 @ =gUnknown_8261CC8\n" + "\tldm r0!, {r2,r3,r7}\n" + "\tstm r1!, {r2,r3,r7}\n" + "\tldm r0!, {r2,r3,r7}\n" + "\tstm r1!, {r2,r3,r7}\n" + "\tadds r0, r6, 0x3\n" + "\tldrh r1, [r5]\n" + "\tadds r0, r1\n" + "\tstrh r0, [r5]\n" + "\tlsls r1, r4, 16\n" + "\tasrs r1, 16\n" + "\tadd r0, sp, 0xC\n" + "\tmov r3, r8\n" + "\tldrb r2, [r3, 0x7]\n" + "\tmovs r3, 0x1\n" + "\tbl CreateSprite\n" + "\tadds r4, 0x20\n" + "\tadds r6, 0x1\n" + "\tcmp r6, 0x2\n" + "\tble _0804D2D4\n" + "\tldr r1, _0804D31C @ =gMain\n" + "\tmovs r5, 0x87\n" + "\tlsls r5, 3\n" + "\tadds r1, r5\n" + "\tb _0804D4B4\n" + "\t.align 2, 0\n" + "_0804D30C: .4byte gSaveBlock2Ptr\n" + "_0804D310: .4byte gTradeUnknownSpriteCoords\n" + "_0804D314: .4byte gUnknown_8261CC8\n" + "_0804D318: .4byte gLinkPlayers + 8\n" + "_0804D31C: .4byte gMain\n" + "_0804D320:\n" + "\tldr r4, _0804D3B0 @ =gUnknown_8261CC8\n" + "\tadd r1, sp, 0xC\n" + "\tadds r0, r4, 0\n" + "\tldm r0!, {r2,r3,r7}\n" + "\tstm r1!, {r2,r3,r7}\n" + "\tldm r0!, {r2,r5,r7}\n" + "\tstm r1!, {r2,r5,r7}\n" + "\tadd r1, sp, 0xC\n" + "\tadds r0, r1, 0\n" + "\tldrh r0, [r0]\n" + "\tadds r0, 0x6\n" + "\tstrh r0, [r1]\n" + "\tadds r0, r1, 0\n" + "\tmovs r1, 0xD7\n" + "\tmovs r2, 0x97\n" + "\tmovs r3, 0x1\n" + "\tbl CreateSprite\n" + "\tadd r0, sp, 0xC\n" + "\tldm r4!, {r3,r5,r7}\n" + "\tstm r0!, {r3,r5,r7}\n" + "\tldm r4!, {r1-r3}\n" + "\tstm r0!, {r1-r3}\n" + "\tadd r1, sp, 0xC\n" + "\tadds r0, r1, 0\n" + "\tldrh r0, [r0]\n" + "\tadds r0, 0x7\n" + "\tstrh r0, [r1]\n" + "\tadds r0, r1, 0\n" + "\tmovs r1, 0xF7\n" + "\tmovs r2, 0x97\n" + "\tmovs r3, 0x1\n" + "\tbl CreateSprite\n" + "\tmovs r6, 0\n" + "\tadd r4, sp, 0xC\n" + "\tmovs r5, 0xC0\n" + "\tlsls r5, 13\n" + "_0804D36C:\n" + "\tadd r1, sp, 0xC\n" + "\tldr r0, _0804D3B0 @ =gUnknown_8261CC8\n" + "\tldm r0!, {r2,r3,r7}\n" + "\tstm r1!, {r2,r3,r7}\n" + "\tldm r0!, {r2,r3,r7}\n" + "\tstm r1!, {r2,r3,r7}\n" + "\tadds r0, r6, 0\n" + "\tadds r0, 0x8\n" + "\tldrh r7, [r4]\n" + "\tadds r0, r7\n" + "\tstrh r0, [r4]\n" + "\tasrs r1, r5, 16\n" + "\tadd r0, sp, 0xC\n" + "\tmovs r2, 0x96\n" + "\tmovs r3, 0x1\n" + "\tbl CreateSprite\n" + "\tmovs r0, 0x80\n" + "\tlsls r0, 14\n" + "\tadds r5, r0\n" + "\tadds r6, 0x1\n" + "\tcmp r6, 0x5\n" + "\tble _0804D36C\n" + "\tldr r4, _0804D3B4 @ =gUnknown_2031DA8\n" + "\tldr r0, [r4]\n" + "\tadds r0, 0x35\n" + "\tldrb r0, [r0]\n" + "\tcmp r0, 0x5\n" + "\tbhi _0804D3B8\n" + "\tbl sub_8138B20\n" + "\tldr r1, [r4]\n" + "\tb _0804D3C0\n" + "\t.align 2, 0\n" + "_0804D3B0: .4byte gUnknown_8261CC8\n" + "_0804D3B4: .4byte gUnknown_2031DA8\n" + "_0804D3B8:\n" + "\tbl sub_8138B20\n" + "\tldr r1, [r4]\n" + "\tadds r0, 0x6\n" + "_0804D3C0:\n" + "\tadds r1, 0x35\n" + "\tstrb r0, [r1]\n" + "\tldr r0, _0804D404 @ =gUnknown_8261CB0\n" + "\tldr r3, _0804D408 @ =gTradeMonSpriteCoords\n" + "\tldr r4, _0804D40C @ =gUnknown_2031DA8\n" + "\tldr r1, [r4]\n" + "\tadds r1, 0x35\n" + "\tldrb r2, [r1]\n" + "\tlsls r2, 1\n" + "\tadds r1, r2, r3\n" + "\tldrb r1, [r1]\n" + "\tlsls r1, 19\n" + "\tmovs r5, 0x80\n" + "\tlsls r5, 14\n" + "\tadds r1, r5\n" + "\tasrs r1, 16\n" + "\tadds r3, 0x1\n" + "\tadds r2, r3\n" + "\tldrb r2, [r2]\n" + "\tlsls r2, 3\n" + "\tmovs r3, 0x2\n" + "\tbl CreateSprite\n" + "\tldr r1, [r4]\n" + "\tadds r1, 0x34\n" + "\tstrb r0, [r1]\n" + "\tldr r0, _0804D410 @ =gMain\n" + "\tmovs r7, 0x87\n" + "\tlsls r7, 3\n" + "\tadds r0, r7\n" + "\tmovs r1, 0x10\n" + "\tstrb r1, [r0]\n" + "\tb _0804D4D2\n" + "\t.align 2, 0\n" + "_0804D404: .4byte gUnknown_8261CB0\n" + "_0804D408: .4byte gTradeMonSpriteCoords\n" + "_0804D40C: .4byte gUnknown_2031DA8\n" + "_0804D410: .4byte gMain\n" + "_0804D414:\n" + "\tmovs r0, 0\n" + "\tbl sub_804D694\n" + "\tb _0804D4AC\n" + "_0804D41C:\n" + "\tmovs r0, 0x1\n" + "\tbl sub_804D694\n" + "\tldr r2, _0804D43C @ =gUnknown_2031DA8\n" + "\tldr r0, [r2]\n" + "\tmovs r1, 0\n" + "\tstrb r1, [r0]\n" + "\tldr r0, [r2]\n" + "\tstrb r1, [r0, 0x1]\n" + "\tbl sub_804D764\n" + "\tldr r1, _0804D440 @ =gMain\n" + "\tmovs r2, 0x87\n" + "\tlsls r2, 3\n" + "\tadds r1, r2\n" + "\tb _0804D4B4\n" + "\t.align 2, 0\n" + "_0804D43C: .4byte gUnknown_2031DA8\n" + "_0804D440: .4byte gMain\n" + "_0804D444:\n" + "\tldr r2, _0804D478 @ =gPaletteFade\n" + "\tldrb r1, [r2, 0x8]\n" + "\tmovs r0, 0x7F\n" + "\tands r0, r1\n" + "\tstrb r0, [r2, 0x8]\n" + "\tmovs r4, 0x1\n" + "\tnegs r4, r4\n" + "\tadds r0, r4, 0\n" + "\tmovs r1, 0x10\n" + "\tmovs r2, 0\n" + "\tbl BlendPalettes\n" + "\tmovs r0, 0\n" + "\tstr r0, [sp]\n" + "\tadds r0, r4, 0\n" + "\tmovs r1, 0\n" + "\tmovs r2, 0x10\n" + "\tmovs r3, 0\n" + "\tbl BeginNormalPaletteFade\n" + "\tldr r1, _0804D47C @ =gMain\n" + "\tmovs r3, 0x87\n" + "\tlsls r3, 3\n" + "\tadds r1, r3\n" + "\tb _0804D4B4\n" + "\t.align 2, 0\n" + "_0804D478: .4byte gPaletteFade\n" + "_0804D47C: .4byte gMain\n" + "_0804D480:\n" + "\tmovs r1, 0x82\n" + "\tlsls r1, 5\n" + "\tmovs r0, 0\n" + "\tbl SetGpuReg\n" + "\tmovs r0, 0x2\n" + "\tbl sub_804D694\n" + "\tldr r1, _0804D49C @ =gMain\n" + "\tmovs r5, 0x87\n" + "\tlsls r5, 3\n" + "\tadds r1, r5\n" + "\tb _0804D4B4\n" + "\t.align 2, 0\n" + "_0804D49C: .4byte gMain\n" + "_0804D4A0:\n" + "\tmovs r7, 0x87\n" + "\tlsls r7, 3\n" + "\tadds r1, r2, r7\n" + "\tb _0804D4B4\n" + "_0804D4A8:\n" + "\tbl sub_804F964\n" + "_0804D4AC:\n" + "\tldr r1, _0804D4BC @ =gMain\n" + "\tmovs r0, 0x87\n" + "\tlsls r0, 3\n" + "\tadds r1, r0\n" + "_0804D4B4:\n" + "\tldrb r0, [r1]\n" + "\tadds r0, 0x1\n" + "\tstrb r0, [r1]\n" + "\tb _0804D4D2\n" + "\t.align 2, 0\n" + "_0804D4BC: .4byte gMain\n" + "_0804D4C0:\n" + "\tldr r0, _0804D4F0 @ =gPaletteFade\n" + "\tldrb r1, [r0, 0x7]\n" + "\tmovs r0, 0x80\n" + "\tands r0, r1\n" + "\tcmp r0, 0\n" + "\tbne _0804D4D2\n" + "\tldr r0, _0804D4F4 @ =sub_804D638\n" + "\tbl SetMainCallback2\n" + "_0804D4D2:\n" + "\tbl RunTasks\n" + "\tbl AnimateSprites\n" + "\tbl BuildOamBuffer\n" + "\tbl UpdatePaletteFade\n" + "\tadd sp, 0x24\n" + "\tpop {r3}\n" + "\tmov r8, r3\n" + "\tpop {r4-r7}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" + "_0804D4F0: .4byte gPaletteFade\n" + "_0804D4F4: .4byte sub_804D638"); +} +#endif //NONMATCHING -- cgit v1.2.3 From b290a1a570efc77a419d74aa41e97770fe792154 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 28 Oct 2019 10:43:57 -0400 Subject: trade through sub_804D694 --- asm/trade.s | 285 ----------------------------------------------------- include/graphics.h | 5 + src/trade.c | 132 +++++++++++++++++++++++-- 3 files changed, 130 insertions(+), 292 deletions(-) diff --git a/asm/trade.s b/asm/trade.s index 15c93e83d..7d47a0a2d 100644 --- a/asm/trade.s +++ b/asm/trade.s @@ -5,291 +5,6 @@ .text - thumb_func_start sub_804D4F8 -sub_804D4F8: @ 804D4F8 - push {lr} - bl LoadOam - bl ProcessSpriteCopyRequests - bl TransferPlttBuffer - pop {r0} - bx r0 - thumb_func_end sub_804D4F8 - - thumb_func_start sub_804D50C -sub_804D50C: @ 804D50C - push {r4,lr} - sub sp, 0x4 - ldr r4, _0804D544 @ =gUnknown_2031DA8 - ldr r1, [r4] - adds r1, 0xA8 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0xF - bls _0804D53C - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - ldr r0, [r4] - adds r0, 0x6F - movs r1, 0xA - strb r1, [r0] -_0804D53C: - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0804D544: .4byte gUnknown_2031DA8 - thumb_func_end sub_804D50C - - thumb_func_start sub_804D548 -sub_804D548: @ 804D548 - push {r4,lr} - ldr r0, _0804D580 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _0804D59E - ldr r1, _0804D584 @ =gUnknown_2031DA4 - ldr r4, _0804D588 @ =gUnknown_2031DA8 - ldr r2, [r4] - adds r0, r2, 0 - adds r0, 0x35 - ldrb r0, [r0] - strb r0, [r1] - adds r0, r2, 0 - adds r0, 0x7E - ldrb r0, [r0] - strb r0, [r1, 0x1] - ldr r0, _0804D58C @ =gWirelessCommType - ldrb r0, [r0] - cmp r0, 0 - beq _0804D590 - adds r1, r2, 0 - adds r1, 0x6F - movs r0, 0x10 - strb r0, [r1] - b _0804D59E - .align 2, 0 -_0804D580: .4byte gPaletteFade -_0804D584: .4byte gUnknown_2031DA4 -_0804D588: .4byte gUnknown_2031DA8 -_0804D58C: .4byte gWirelessCommType -_0804D590: - movs r0, 0x20 - bl sub_800AA80 - ldr r0, [r4] - adds r0, 0x6F - movs r1, 0xD - strb r1, [r0] -_0804D59E: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_804D548 - - thumb_func_start sub_804D5A4 -sub_804D5A4: @ 804D5A4 - push {r4,r5,lr} - ldr r5, _0804D5E4 @ =gMain - ldr r0, _0804D5E8 @ =sub_804C718 - str r0, [r5, 0x8] - ldr r0, _0804D5EC @ =gWirelessCommType - ldrb r0, [r0] - cmp r0, 0 - beq _0804D5FC - bl IsLinkRfuTaskFinished - lsls r0, 24 - cmp r0, 0 - beq _0804D620 - ldr r0, _0804D5F0 @ =gUnknown_2031C90 - ldr r0, [r0] - bl Free - bl FreeAllWindowBuffers - ldr r0, _0804D5F4 @ =gUnknown_2031DA8 - ldr r0, [r0] - bl Free - movs r0, 0 - str r0, [r5] - bl DestroyWirelessStatusIndicatorSprite - ldr r0, _0804D5F8 @ =sub_8050138 - bl SetMainCallback2 - b _0804D620 - .align 2, 0 -_0804D5E4: .4byte gMain -_0804D5E8: .4byte sub_804C718 -_0804D5EC: .4byte gWirelessCommType -_0804D5F0: .4byte gUnknown_2031C90 -_0804D5F4: .4byte gUnknown_2031DA8 -_0804D5F8: .4byte sub_8050138 -_0804D5FC: - ldr r0, _0804D628 @ =gReceivedRemoteLinkPlayers - ldrb r4, [r0] - cmp r4, 0 - bne _0804D620 - ldr r0, _0804D62C @ =gUnknown_2031C90 - ldr r0, [r0] - bl Free - bl FreeAllWindowBuffers - ldr r0, _0804D630 @ =gUnknown_2031DA8 - ldr r0, [r0] - bl Free - str r4, [r5] - ldr r0, _0804D634 @ =sub_8050138 - bl SetMainCallback2 -_0804D620: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0804D628: .4byte gReceivedRemoteLinkPlayers -_0804D62C: .4byte gUnknown_2031C90 -_0804D630: .4byte gUnknown_2031DA8 -_0804D634: .4byte sub_8050138 - thumb_func_end sub_804D5A4 - - thumb_func_start sub_804D638 -sub_804D638: @ 804D638 - push {r4,lr} - bl sub_804E9E4 - bl sub_804F4DC - movs r0, 0 - bl sub_804EAE4 - movs r0, 0x1 - bl sub_804EAE4 - ldr r4, _0804D690 @ =gUnknown_2031DA8 - ldr r2, [r4] - ldrb r1, [r2] - adds r0, r1, 0x1 - strb r0, [r2] - lsls r1, 24 - lsrs r1, 24 - movs r0, 0x18 - bl SetGpuReg - ldr r2, [r4] - ldrb r1, [r2, 0x1] - adds r0, r1, 0 - adds r0, 0xFF - strb r0, [r2, 0x1] - lsls r1, 24 - lsrs r1, 24 - movs r0, 0x1C - bl SetGpuReg - bl RunTextPrinters_CheckPrinter0Active - bl RunTasks - bl AnimateSprites - bl BuildOamBuffer - bl UpdatePaletteFade - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0804D690: .4byte gUnknown_2031DA8 - thumb_func_end sub_804D638 - - thumb_func_start sub_804D694 -sub_804D694: @ 804D694 - push {r4,r5,lr} - sub sp, 0xC - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x1 - beq _0804D700 - cmp r4, 0x1 - bgt _0804D6AA - cmp r4, 0 - beq _0804D6B0 - b _0804D75A -_0804D6AA: - cmp r4, 0x2 - beq _0804D728 - b _0804D75A -_0804D6B0: - ldr r0, _0804D6F0 @ =gUnknown_8E9CEDC - movs r1, 0 - movs r2, 0x60 - bl LoadPalette - ldr r1, _0804D6F4 @ =gUnknown_8E9CF5C - movs r2, 0x94 - lsls r2, 5 - movs r0, 0x1 - movs r3, 0 - bl LoadBgTiles - ldr r1, _0804D6F8 @ =gUnknown_8E9E9FC - movs r0, 0x20 - str r0, [sp] - movs r0, 0x14 - str r0, [sp, 0x4] - str r4, [sp, 0x8] - movs r0, 0x1 - movs r2, 0 - movs r3, 0 - bl CopyToBgTilemapBufferRect_ChangePalette - ldr r1, _0804D6FC @ =gUnknown_8260C30 - movs r2, 0x80 - lsls r2, 4 - movs r0, 0x2 - movs r3, 0 - bl LoadBgTilemap - b _0804D75A - .align 2, 0 -_0804D6F0: .4byte gUnknown_8E9CEDC -_0804D6F4: .4byte gUnknown_8E9CF5C -_0804D6F8: .4byte gUnknown_8E9E9FC -_0804D6FC: .4byte gUnknown_8260C30 -_0804D700: - ldr r1, _0804D724 @ =gUnknown_8261430 - movs r2, 0x80 - lsls r2, 4 - movs r0, 0x3 - movs r3, 0 - bl LoadBgTilemap - movs r0, 0 - bl sub_804F284 - movs r0, 0x1 - bl sub_804F284 - movs r0, 0x1 - bl CopyBgTilemapBufferToVram - b _0804D75A - .align 2, 0 -_0804D724: .4byte gUnknown_8261430 -_0804D728: - movs r5, 0x80 - lsls r5, 21 - movs r4, 0x3 -_0804D72E: - lsrs r0, r5, 24 - movs r1, 0 - bl SetGpuReg - movs r0, 0x80 - lsls r0, 18 - adds r5, r0 - subs r4, 0x1 - cmp r4, 0 - bge _0804D72E - movs r0, 0 - bl ShowBg - movs r0, 0x1 - bl ShowBg - movs r0, 0x2 - bl ShowBg - movs r0, 0x3 - bl ShowBg -_0804D75A: - add sp, 0xC - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_804D694 - thumb_func_start sub_804D764 sub_804D764: @ 804D764 push {r4-r7,lr} diff --git a/include/graphics.h b/include/graphics.h index 638351be4..740818cd8 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -4214,4 +4214,9 @@ extern const u8 gMonIcon_Unown_ExclamationMark[]; extern const u8 gMonIcon_Unown_QuestionMark[]; extern const u8 gMonIcon_QuestionMark[]; +// trade +extern const u16 gUnknown_8E9CEDC[]; +extern const u16 gUnknown_8E9CF5C[]; +extern const u16 gUnknown_8E9E9FC[]; + #endif //GUARD_GRAPHICS_H diff --git a/src/trade.c b/src/trade.c index e816d773f..a84cce7f4 100644 --- a/src/trade.c +++ b/src/trade.c @@ -17,6 +17,7 @@ #include "party_menu.h" #include "pokemon_summary_screen.h" #include "pokemon_storage_system.h" +#include "new_menu_helpers.h" #include "constants/species.h" #include "constants/items.h" #include "constants/easy_chat.h" @@ -67,25 +68,33 @@ IWRAM_DATA vu16 gUnknown_3000E78; EWRAM_DATA u8 *gUnknown_2031C90 = NULL; EWRAM_DATA u8 *gUnknown_2031C94[14] = {}; +EWRAM_DATA u8 gUnknown_2031DA4[2] = {0}; EWRAM_DATA struct TradeResources * gUnknown_2031DA8 = NULL; void sub_804C728(void); void sub_804D4F8(void); +void sub_804D638(void); +void sub_804D694(u8 state); +void sub_804D764(void); +void sub_804DFF0(void); +void sub_804E9E4(void); +void sub_804EAE4(u8 side); u8 shedinja_maker_maybe(void); +void sub_804F020(u8 side); +void sub_804F284(u8 side); +void sub_804F4DC(void); void sub_804F5BC(u8 str_idx); -void sub_804F9D8(void); bool8 sub_804F610(void); +void sub_804F728(const u8 *name, u8 *a1, u8 unused); void sub_804F748(u8 side); -void sub_804F020(u8 side); -void sub_804D764(void); -void sub_804D694(u8 imgIdx); void sub_804F890(u8 side); void sub_804F964(void); -void sub_804DFF0(void); -void sub_804D638(void); +void sub_804F9D8(void); void LoadHeldItemIcons(void); -void sub_804F728(const u8 *name, u8 *a1, u8 unused); +void sub_8050138(void); +extern const u16 gUnknown_8260C30[]; +extern const u16 gUnknown_8261430[]; extern const struct BgTemplate gUnknown_8261F1C[4]; extern const struct WindowTemplate gUnknown_8261F2C[18]; extern const u8 gTradeMonSpriteCoords[][2]; @@ -2201,3 +2210,112 @@ void sub_804CF14(void) "_0804D4F4: .4byte sub_804D638"); } #endif //NONMATCHING + +void sub_804D4F8(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +void sub_804D50C(void) +{ + if (++gUnknown_2031DA8->unk_A8 >= 16) + { + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + gUnknown_2031DA8->unk_6F = 10; + } +} + +void sub_804D548(void) +{ + if (!gPaletteFade.active) + { + gUnknown_2031DA4[0] = gUnknown_2031DA8->tradeMenuCursorPosition; + gUnknown_2031DA4[1] = gUnknown_2031DA8->unk_7E; + if (gWirelessCommType != 0) + { + gUnknown_2031DA8->unk_6F = 16; + } + else + { + sub_800AA80(32); + gUnknown_2031DA8->unk_6F = 13; + } + } +} + +void sub_804D5A4(void) +{ + gMain.savedCallback = sub_804C718; + if (gWirelessCommType != 0) + { + if (IsLinkRfuTaskFinished()) + { + Free(gUnknown_2031C90); + FreeAllWindowBuffers(); + Free(gUnknown_2031DA8); + gMain.callback1 = NULL; + DestroyWirelessStatusIndicatorSprite(); + SetMainCallback2(sub_8050138); + } + } + else + { + if (gReceivedRemoteLinkPlayers == 0) + { + Free(gUnknown_2031C90); + FreeAllWindowBuffers(); + Free(gUnknown_2031DA8); + gMain.callback1 = NULL; + SetMainCallback2(sub_8050138); + } + } +} + +void sub_804D638(void) +{ + sub_804E9E4(); + sub_804F4DC(); + sub_804EAE4(0); + sub_804EAE4(1); + SetGpuReg(REG_OFFSET_BG2HOFS, gUnknown_2031DA8->unk_0++); + SetGpuReg(REG_OFFSET_BG3HOFS, gUnknown_2031DA8->unk_1--); + RunTextPrinters_CheckPrinter0Active(); + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +void sub_804D694(u8 state) +{ + int i; + + switch (state) + { + case 0: + LoadPalette(gUnknown_8E9CEDC, 0x00, 0x60); + LoadBgTiles(1, gUnknown_8E9CF5C, 0x1280, 0); + CopyToBgTilemapBufferRect_ChangePalette(1, gUnknown_8E9E9FC, 0, 0, 32, 20, 0); + LoadBgTilemap(2, gUnknown_8260C30, 0x800, 0); + break; + case 1: + LoadBgTilemap(3, gUnknown_8261430, 0x800, 0); + sub_804F284(0); + sub_804F284(1); + CopyBgTilemapBufferToVram(1); + break; + case 2: + for (i = 0; i < 4; i++) + { + // BG0 and BG1 coords only + SetGpuReg(REG_OFFSET_BG0HOFS + 2 * i, 0); + } + ShowBg(0); + ShowBg(1); + ShowBg(2); + ShowBg(3); + break; + } +} -- cgit v1.2.3 From a5ff9f2d00fbcc6bc73475069dcbe93eaf518c1b Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 28 Oct 2019 11:15:08 -0400 Subject: trade through sub_804D814 --- asm/trade.s | 117 ------------------------------------------------------------ src/trade.c | 37 +++++++++++++++++-- 2 files changed, 35 insertions(+), 119 deletions(-) diff --git a/asm/trade.s b/asm/trade.s index 7d47a0a2d..272a893cc 100644 --- a/asm/trade.s +++ b/asm/trade.s @@ -5,123 +5,6 @@ .text - thumb_func_start sub_804D764 -sub_804D764: @ 804D764 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - movs r3, 0 - ldr r5, _0804D7B4 @ =gUnknown_2031DA8 - mov r8, r5 - ldr r0, _0804D7B8 @ =gSprites - mov r12, r0 - movs r1, 0x5 - negs r1, r1 - mov r9, r1 - movs r4, 0x6 - movs r7, 0x1 - movs r6, 0 -_0804D782: - mov r1, r8 - ldr r0, [r1] - adds r1, r0, 0 - adds r1, 0x36 - ldrb r1, [r1] - cmp r3, r1 - bge _0804D7BC - adds r0, 0x28 - adds r0, r3 - ldrb r0, [r0] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - add r1, r12 - adds r1, 0x3E - ldrb r2, [r1] - mov r0, r9 - ands r0, r2 - strb r0, [r1] - ldr r0, [r5] - adds r0, 0x38 - adds r0, r3 - strb r7, [r0] - b _0804D7C2 - .align 2, 0 -_0804D7B4: .4byte gUnknown_2031DA8 -_0804D7B8: .4byte gSprites -_0804D7BC: - adds r0, 0x38 - adds r0, r3 - strb r6, [r0] -_0804D7C2: - mov r1, r8 - ldr r0, [r1] - adds r1, r0, 0 - adds r1, 0x37 - ldrb r1, [r1] - cmp r3, r1 - bge _0804D7F2 - adds r0, 0x2E - adds r0, r3 - ldrb r0, [r0] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - add r1, r12 - adds r1, 0x3E - ldrb r2, [r1] - mov r0, r9 - ands r0, r2 - strb r0, [r1] - ldr r0, [r5] - adds r0, 0x38 - adds r0, r4 - strb r7, [r0] - b _0804D7F8 -_0804D7F2: - adds r0, 0x38 - adds r0, r4 - strb r6, [r0] -_0804D7F8: - adds r4, 0x1 - adds r3, 0x1 - cmp r3, 0x5 - ble _0804D782 - ldr r0, [r5] - adds r0, 0x44 - movs r1, 0x1 - strb r1, [r0] - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_804D764 - - thumb_func_start sub_804D814 -sub_804D814: @ 804D814 - push {r4,r5,lr} - adds r5, r0, 0 - adds r4, r1, 0 - movs r3, 0 - cmp r3, r2 - bcs _0804D82E -_0804D820: - adds r0, r5, r3 - adds r1, r4, r3 - ldrb r1, [r1] - strb r1, [r0] - adds r3, 0x1 - cmp r3, r2 - bcc _0804D820 -_0804D82E: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_804D814 - thumb_func_start shedinja_maker_maybe shedinja_maker_maybe: @ 804D834 push {r4-r6,lr} diff --git a/src/trade.c b/src/trade.c index a84cce7f4..445338803 100644 --- a/src/trade.c +++ b/src/trade.c @@ -32,8 +32,7 @@ struct TradeResources /*0x0034*/ u8 tradeMenuCursorSpriteIdx; /*0x0035*/ u8 tradeMenuCursorPosition; /*0x0036*/ u8 partyCounts[2]; - /*0x0038*/ bool8 tradeMenuOptionsActive[12]; - /*0x0044*/ u8 unk_44; + /*0x0038*/ bool8 tradeMenuOptionsActive[13]; /*0x0045*/ u8 unk_45[2][PARTY_SIZE]; /*0x0051*/ u8 unk_51[2][PARTY_SIZE]; /*0x005D*/ u8 unk_5D[2][PARTY_SIZE]; @@ -2319,3 +2318,37 @@ void sub_804D694(u8 state) break; } } + +void sub_804D764(void) +{ + int i; + for (i = 0; i < PARTY_SIZE; i++) + { + if (i < gUnknown_2031DA8->partyCounts[0]) + { + gSprites[gUnknown_2031DA8->partyIcons[0][i]].invisible = FALSE; + gUnknown_2031DA8->tradeMenuOptionsActive[i] = TRUE; + } + else + { + gUnknown_2031DA8->tradeMenuOptionsActive[i] = FALSE; + } + if (i < gUnknown_2031DA8->partyCounts[1]) + { + gSprites[gUnknown_2031DA8->partyIcons[1][i]].invisible = FALSE; + gUnknown_2031DA8->tradeMenuOptionsActive[i + 6] = TRUE; + } + else + { + gUnknown_2031DA8->tradeMenuOptionsActive[i + 6] = FALSE; + } + } + gUnknown_2031DA8->tradeMenuOptionsActive[12] = TRUE; +} + +void sub_804D814(char *dest, const char *src, size_t size) +{ + int i; + for (i = 0; i < size; i++) + dest[i] = src[i]; +} -- cgit v1.2.3 From e9cf9fc104ceedd50330af6b22c6e896e85930e1 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 28 Oct 2019 12:16:01 -0400 Subject: port shedinja_maker_maybe; resolve within-array party pointers --- asm/battle_tower.s | 4 +- asm/party_menu.s | 20 +-- asm/trade.s | 400 ----------------------------------------------------- data/trade.s | 2 +- include/link.h | 1 + src/pokemon.c | 8 +- src/trade.c | 165 +++++++++++++++++++++- sym_ewram.txt | 67 +-------- 8 files changed, 187 insertions(+), 480 deletions(-) diff --git a/asm/battle_tower.s b/asm/battle_tower.s index eddc03f83..87f01b7fb 100644 --- a/asm/battle_tower.s +++ b/asm/battle_tower.s @@ -2832,7 +2832,7 @@ _080E6F68: ldrb r1, [r0] movs r0, 0x64 muls r0, r1 - ldr r1, _080E6FB4 @ =gUnknown_2024220 + ldr r1, _080E6FB4 @ =gEnemyParty + 0x1f4 adds r0, r1 movs r1, 0x2C muls r1, r4 @@ -2855,7 +2855,7 @@ _080E6FA4: .4byte gSaveBlock2Ptr _080E6FA8: .4byte gSaveBlock1Ptr _080E6FAC: .4byte 0x00002cac _080E6FB0: .4byte 0x0000056d -_080E6FB4: .4byte gUnknown_2024220 +_080E6FB4: .4byte gEnemyParty + 0x1f4 thumb_func_end sub_80E6EE0 thumb_func_start SaveBattleTowerProgress diff --git a/asm/party_menu.s b/asm/party_menu.s index b0506d6c9..c2eecaf14 100644 --- a/asm/party_menu.s +++ b/asm/party_menu.s @@ -3033,7 +3033,7 @@ _081201C0: lsrs r6, r0, 29 cmp r6, 0x3 bne _081201F0 - ldr r0, _081201EC @ =gUnknown_20243B0 + ldr r0, _081201EC @ =gPlayerParty + 0x12C movs r1, 0xB bl GetMonData cmp r0, 0 @@ -3042,12 +3042,12 @@ _081201C0: b _08120290 .align 2, 0 _081201E8: .4byte gUnknown_203B09C -_081201EC: .4byte gUnknown_20243B0 +_081201EC: .4byte gPlayerParty + 0x12C _081201F0: - ldr r0, _081201F4 @ =gUnknown_202434C + ldr r0, _081201F4 @ =gPlayerParty + 0xC8 b _0812020C .align 2, 0 -_081201F4: .4byte gUnknown_202434C +_081201F4: .4byte gPlayerParty + 0xC8 _081201F8: cmp r0, 0x1 bne _08120290 @@ -3058,7 +3058,7 @@ _081201F8: lsrs r5, r0, 29 cmp r5, 0x5 bne _08120224 - ldr r0, _08120220 @ =gUnknown_2024478 + ldr r0, _08120220 @ =gPlayerParty + 0x1F4 _0812020C: movs r1, 0xB bl GetMonData @@ -3068,9 +3068,9 @@ _0812020C: b _08120290 .align 2, 0 _0812021C: .4byte gUnknown_203B09C -_08120220: .4byte gUnknown_2024478 +_08120220: .4byte gPlayerParty + 0x1F4 _08120224: - ldr r0, _08120234 @ =gUnknown_2024414 + ldr r0, _08120234 @ =gPlayerParty + 0x190 movs r1, 0xB bl GetMonData cmp r0, 0 @@ -3078,7 +3078,7 @@ _08120224: movs r0, 0x4 b _0812028E .align 2, 0 -_08120234: .4byte gUnknown_2024414 +_08120234: .4byte gPlayerParty + 0x190 _08120238: ldrb r1, [r4] subs r0, r1, 0x2 @@ -18129,7 +18129,7 @@ _08127A80: .4byte sub_811FB28 sub_8127A84: @ 8127A84 push {r4,lr} adds r4, r0, 0 - ldr r0, _08127AA4 @ =gUnknown_20242E8 + ldr r0, _08127AA4 @ =gPlayerParty + 0x64 movs r1, 0xB bl GetMonData cmp r0, 0 @@ -18143,7 +18143,7 @@ _08127AA0: movs r0, 0x7 b _08127ABA .align 2, 0 -_08127AA4: .4byte gUnknown_20242E8 +_08127AA4: .4byte gPlayerParty + 0x64 _08127AA8: ldr r0, _08127AB4 @ =gUnknown_203B0A0 ldrb r0, [r0, 0xB] diff --git a/asm/trade.s b/asm/trade.s index 272a893cc..34465a17b 100644 --- a/asm/trade.s +++ b/asm/trade.s @@ -5,406 +5,6 @@ .text - thumb_func_start shedinja_maker_maybe -shedinja_maker_maybe: @ 804D834 - push {r4-r6,lr} - sub sp, 0xC - bl GetMultiplayerId - lsls r0, 24 - lsrs r5, r0, 24 - ldr r0, _0804D858 @ =gUnknown_2031DA8 - ldr r0, [r0] - adds r0, 0x69 - ldrb r0, [r0] - cmp r0, 0x15 - bls _0804D84E - b _0804DB9E -_0804D84E: - lsls r0, 2 - ldr r1, _0804D85C @ =_0804D860 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0804D858: .4byte gUnknown_2031DA8 -_0804D85C: .4byte _0804D860 - .align 2, 0 -_0804D860: - .4byte _0804D8B8 - .4byte _0804D8E4 - .4byte _0804DB78 - .4byte _0804D914 - .4byte _0804D928 - .4byte _0804D960 - .4byte _0804DB78 - .4byte _0804D97C - .4byte _0804D990 - .4byte _0804D9C8 - .4byte _0804DB78 - .4byte _0804D9E4 - .4byte _0804D9F8 - .4byte _0804DA30 - .4byte _0804DB78 - .4byte _0804DA58 - .4byte _0804DA6C - .4byte _0804DAA4 - .4byte _0804DB78 - .4byte _0804DACC - .4byte _0804DAE0 - .4byte _0804DB14 -_0804D8B8: - ldr r0, _0804D8D8 @ =gBlockSendBuffer - ldr r1, _0804D8DC @ =gPlayerParty - movs r2, 0xC8 - bl sub_804D814 - ldr r3, _0804D8E0 @ =gUnknown_2031DA8 - ldr r1, [r3] - adds r1, 0x69 - ldrb r0, [r1] - adds r0, 0x1 - movs r2, 0 - strb r0, [r1] - ldr r0, [r3] - adds r0, 0xA8 - strb r2, [r0] - b _0804DB9E - .align 2, 0 -_0804D8D8: .4byte gBlockSendBuffer -_0804D8DC: .4byte gPlayerParty -_0804D8E0: .4byte gUnknown_2031DA8 -_0804D8E4: - bl IsLinkTaskFinished - lsls r0, 24 - cmp r0, 0 - bne _0804D8F0 - b _0804DB9E -_0804D8F0: - bl GetBlockReceivedStatus - lsls r0, 24 - cmp r0, 0 - bne _0804D904 - ldr r0, _0804D900 @ =gUnknown_2031DA8 - ldr r1, [r0] - b _0804DB96 - .align 2, 0 -_0804D900: .4byte gUnknown_2031DA8 -_0804D904: - bl ResetBlockReceivedFlags - ldr r0, _0804D910 @ =gUnknown_2031DA8 - ldr r1, [r0] - b _0804DB96 - .align 2, 0 -_0804D910: .4byte gUnknown_2031DA8 -_0804D914: - cmp r5, 0 - bne _0804D91E - movs r0, 0x1 - bl sub_800A474 -_0804D91E: - ldr r0, _0804D924 @ =gUnknown_2031DA8 - ldr r1, [r0] - b _0804DB96 - .align 2, 0 -_0804D924: .4byte gUnknown_2031DA8 -_0804D928: - bl GetBlockReceivedStatus - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x3 - beq _0804D936 - b _0804DB9E -_0804D936: - ldr r0, _0804D954 @ =gEnemyParty - movs r2, 0x1 - adds r1, r5, 0 - eors r1, r2 - lsls r1, 8 - ldr r2, _0804D958 @ =gBlockRecvBuffer - adds r1, r2 - movs r2, 0xC8 - bl sub_804D814 - bl ResetBlockReceivedFlags - ldr r0, _0804D95C @ =gUnknown_2031DA8 - ldr r1, [r0] - b _0804DB96 - .align 2, 0 -_0804D954: .4byte gEnemyParty -_0804D958: .4byte gBlockRecvBuffer -_0804D95C: .4byte gUnknown_2031DA8 -_0804D960: - ldr r0, _0804D970 @ =gBlockSendBuffer - ldr r1, _0804D974 @ =gUnknown_202434C - movs r2, 0xC8 - bl sub_804D814 - ldr r0, _0804D978 @ =gUnknown_2031DA8 - ldr r1, [r0] - b _0804DB96 - .align 2, 0 -_0804D970: .4byte gBlockSendBuffer -_0804D974: .4byte gUnknown_202434C -_0804D978: .4byte gUnknown_2031DA8 -_0804D97C: - cmp r5, 0 - bne _0804D986 - movs r0, 0x1 - bl sub_800A474 -_0804D986: - ldr r0, _0804D98C @ =gUnknown_2031DA8 - ldr r1, [r0] - b _0804DB96 - .align 2, 0 -_0804D98C: .4byte gUnknown_2031DA8 -_0804D990: - bl GetBlockReceivedStatus - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x3 - beq _0804D99E - b _0804DB9E -_0804D99E: - ldr r0, _0804D9BC @ =gUnknown_20240F4 - movs r2, 0x1 - adds r1, r5, 0 - eors r1, r2 - lsls r1, 8 - ldr r2, _0804D9C0 @ =gBlockRecvBuffer - adds r1, r2 - movs r2, 0xC8 - bl sub_804D814 - bl ResetBlockReceivedFlags - ldr r0, _0804D9C4 @ =gUnknown_2031DA8 - ldr r1, [r0] - b _0804DB96 - .align 2, 0 -_0804D9BC: .4byte gUnknown_20240F4 -_0804D9C0: .4byte gBlockRecvBuffer -_0804D9C4: .4byte gUnknown_2031DA8 -_0804D9C8: - ldr r0, _0804D9D8 @ =gBlockSendBuffer - ldr r1, _0804D9DC @ =gUnknown_2024414 - movs r2, 0xC8 - bl sub_804D814 - ldr r0, _0804D9E0 @ =gUnknown_2031DA8 - ldr r1, [r0] - b _0804DB96 - .align 2, 0 -_0804D9D8: .4byte gBlockSendBuffer -_0804D9DC: .4byte gUnknown_2024414 -_0804D9E0: .4byte gUnknown_2031DA8 -_0804D9E4: - cmp r5, 0 - bne _0804D9EE - movs r0, 0x1 - bl sub_800A474 -_0804D9EE: - ldr r0, _0804D9F4 @ =gUnknown_2031DA8 - ldr r1, [r0] - b _0804DB96 - .align 2, 0 -_0804D9F4: .4byte gUnknown_2031DA8 -_0804D9F8: - bl GetBlockReceivedStatus - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x3 - beq _0804DA06 - b _0804DB9E -_0804DA06: - ldr r0, _0804DA24 @ =gUnknown_20241BC - movs r2, 0x1 - adds r1, r5, 0 - eors r1, r2 - lsls r1, 8 - ldr r2, _0804DA28 @ =gBlockRecvBuffer - adds r1, r2 - movs r2, 0xC8 - bl sub_804D814 - bl ResetBlockReceivedFlags - ldr r0, _0804DA2C @ =gUnknown_2031DA8 - ldr r1, [r0] - b _0804DB96 - .align 2, 0 -_0804DA24: .4byte gUnknown_20241BC -_0804DA28: .4byte gBlockRecvBuffer -_0804DA2C: .4byte gUnknown_2031DA8 -_0804DA30: - ldr r0, _0804DA48 @ =gBlockSendBuffer - ldr r1, _0804DA4C @ =gSaveBlock1Ptr - ldr r1, [r1] - ldr r2, _0804DA50 @ =0x00002cd0 - adds r1, r2 - movs r2, 0xDC - bl sub_804D814 - ldr r0, _0804DA54 @ =gUnknown_2031DA8 - ldr r1, [r0] - b _0804DB96 - .align 2, 0 -_0804DA48: .4byte gBlockSendBuffer -_0804DA4C: .4byte gSaveBlock1Ptr -_0804DA50: .4byte 0x00002cd0 -_0804DA54: .4byte gUnknown_2031DA8 -_0804DA58: - cmp r5, 0 - bne _0804DA62 - movs r0, 0x3 - bl sub_800A474 -_0804DA62: - ldr r0, _0804DA68 @ =gUnknown_2031DA8 - ldr r1, [r0] - b _0804DB96 - .align 2, 0 -_0804DA68: .4byte gUnknown_2031DA8 -_0804DA6C: - bl GetBlockReceivedStatus - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x3 - beq _0804DA7A - b _0804DB9E -_0804DA7A: - ldr r0, _0804DA98 @ =gUnknown_2031CCC - movs r2, 0x1 - adds r1, r5, 0 - eors r1, r2 - lsls r1, 8 - ldr r2, _0804DA9C @ =gBlockRecvBuffer - adds r1, r2 - movs r2, 0xD8 - bl sub_804D814 - bl ResetBlockReceivedFlags - ldr r0, _0804DAA0 @ =gUnknown_2031DA8 - ldr r1, [r0] - b _0804DB96 - .align 2, 0 -_0804DA98: .4byte gUnknown_2031CCC -_0804DA9C: .4byte gBlockRecvBuffer -_0804DAA0: .4byte gUnknown_2031DA8 -_0804DAA4: - ldr r0, _0804DABC @ =gBlockSendBuffer - ldr r1, _0804DAC0 @ =gSaveBlock1Ptr - ldr r1, [r1] - ldr r2, _0804DAC4 @ =0x0000309c - adds r1, r2 - movs r2, 0xB - bl sub_804D814 - ldr r0, _0804DAC8 @ =gUnknown_2031DA8 - ldr r1, [r0] - b _0804DB96 - .align 2, 0 -_0804DABC: .4byte gBlockSendBuffer -_0804DAC0: .4byte gSaveBlock1Ptr -_0804DAC4: .4byte 0x0000309c -_0804DAC8: .4byte gUnknown_2031DA8 -_0804DACC: - cmp r5, 0 - bne _0804DAD6 - movs r0, 0x4 - bl sub_800A474 -_0804DAD6: - ldr r0, _0804DADC @ =gUnknown_2031DA8 - ldr r1, [r0] - b _0804DB96 - .align 2, 0 -_0804DADC: .4byte gUnknown_2031DA8 -_0804DAE0: - bl GetBlockReceivedStatus - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x3 - bne _0804DB9E - ldr r4, _0804DB0C @ =gUnknown_2031DA8 - ldr r0, [r4] - adds r0, 0xA9 - movs r2, 0x1 - adds r1, r5, 0 - eors r1, r2 - lsls r1, 8 - ldr r2, _0804DB10 @ =gBlockRecvBuffer - adds r1, r2 - movs r2, 0xB - bl sub_804D814 - bl ResetBlockReceivedFlags - ldr r1, [r4] - b _0804DB96 - .align 2, 0 -_0804DB0C: .4byte gUnknown_2031DA8 -_0804DB10: .4byte gBlockRecvBuffer -_0804DB14: - ldr r4, _0804DB68 @ =gEnemyParty - ldr r6, _0804DB6C @ =0x0000012f - movs r5, 0x5 -_0804DB1A: - adds r0, r4, 0 - movs r1, 0xB - bl GetMonData - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0 - beq _0804DB5A - cmp r0, r6 - bne _0804DB5A - adds r0, r4, 0 - movs r1, 0x3 - bl GetMonData - cmp r0, 0x1 - beq _0804DB5A - adds r0, r4, 0 - movs r1, 0x2 - mov r2, sp - bl GetMonData - mov r0, sp - ldr r1, _0804DB70 @ =gUnknown_8262034 - bl StringCompareWithoutExtCtrlCodes - cmp r0, 0 - bne _0804DB5A - adds r0, r4, 0 - movs r1, 0x2 - ldr r2, _0804DB74 @ = gSpeciesNames + 0xD05 - bl SetMonData -_0804DB5A: - adds r4, 0x64 - subs r5, 0x1 - cmp r5, 0 - bge _0804DB1A - movs r0, 0x1 - b _0804DBA0 - .align 2, 0 -_0804DB68: .4byte gEnemyParty -_0804DB6C: .4byte 0x0000012f -_0804DB70: .4byte gUnknown_8262034 -_0804DB74: .4byte gSpeciesNames+0xD05 -_0804DB78: - ldr r2, _0804DBA8 @ =gUnknown_2031DA8 - ldr r1, [r2] - adds r1, 0xA8 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - ldr r0, [r2] - adds r1, r0, 0 - adds r1, 0xA8 - ldrb r0, [r1] - cmp r0, 0xA - bls _0804DB9E - movs r0, 0 - strb r0, [r1] - ldr r1, [r2] -_0804DB96: - adds r1, 0x69 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] -_0804DB9E: - movs r0, 0 -_0804DBA0: - add sp, 0xC - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_0804DBA8: .4byte gUnknown_2031DA8 - thumb_func_end shedinja_maker_maybe - thumb_func_start sub_804DBAC sub_804DBAC: @ 804DBAC push {lr} diff --git a/data/trade.s b/data/trade.s index 50cbeb488..fb1c509d1 100644 --- a/data/trade.s +++ b/data/trade.s @@ -551,7 +551,7 @@ gUnknown_8261FC4:: @ 8261FC4 .string "システムメッセージADD$", 13 .string "はいけいセット$", 13 -gUnknown_8262034:: @ 8262034 +gJPText_Shedinja:: @ 8262034 .string "ヌケニン$" .string "こうかんせいりつ $" .string "だめだたらしいよ $" diff --git a/include/link.h b/include/link.h index 552e50970..9465f0404 100644 --- a/include/link.h +++ b/include/link.h @@ -258,5 +258,6 @@ void ClearLinkCallback_2(void); void sub_80FA42C(void); void sub_800B284(struct LinkPlayer * linkPlayer); bool8 IsWirelessAdapterConnected(void); +bool8 sub_800A474(u8 a0); #endif // GUARD_LINK_H diff --git a/src/pokemon.c b/src/pokemon.c index 17f28c7a6..fb7a8c626 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -64,9 +64,11 @@ struct OakSpeechNidoranFStruct struct SpriteFrameImage *frameImages; }; -// TODO: move sLearningMoveTableID, gPlayerPartyCount, gEnemyPartyCount, -// gEnemyParty, gPlayerParty here after resolving symbol ref in between. -extern u8 sLearningMoveTableID; +static EWRAM_DATA u8 sLearningMoveTableID = 0; +EWRAM_DATA u8 gPlayerPartyCount = 0; +EWRAM_DATA u8 gEnemyPartyCount = 0; +EWRAM_DATA struct Pokemon gEnemyParty[PARTY_SIZE] = {}; +EWRAM_DATA struct Pokemon gPlayerParty[PARTY_SIZE] = {}; EWRAM_DATA struct SpriteTemplate gMultiuseSpriteTemplate = {0}; static EWRAM_DATA struct OakSpeechNidoranFStruct *sOakSpeechNidoranResources = NULL; diff --git a/src/trade.c b/src/trade.c index 445338803..42c2792ff 100644 --- a/src/trade.c +++ b/src/trade.c @@ -13,7 +13,9 @@ #include "link.h" #include "link_rfu.h" #include "cable_club.h" +#include "data.h" #include "sound.h" +#include "string_util.h" #include "party_menu.h" #include "pokemon_summary_screen.h" #include "pokemon_storage_system.h" @@ -67,8 +69,10 @@ IWRAM_DATA vu16 gUnknown_3000E78; EWRAM_DATA u8 *gUnknown_2031C90 = NULL; EWRAM_DATA u8 *gUnknown_2031C94[14] = {}; +EWRAM_DATA u8 gUnknown_2031CCC[216] = {}; EWRAM_DATA u8 gUnknown_2031DA4[2] = {0}; EWRAM_DATA struct TradeResources * gUnknown_2031DA8 = NULL; +EWRAM_DATA void * gUnknown_2031DAC = NULL; void sub_804C728(void); void sub_804D4F8(void); @@ -101,6 +105,7 @@ extern const u8 *gUnknown_8261ECC[]; extern const u8 gTradeUnknownSpriteCoords[][4]; extern const struct SpriteTemplate gUnknown_8261CB0; extern const struct SpriteTemplate gUnknown_8261CC8; +extern const u8 gJPText_Shedinja[]; void sub_804C600(void) { @@ -2346,9 +2351,165 @@ void sub_804D764(void) gUnknown_2031DA8->tradeMenuOptionsActive[12] = TRUE; } -void sub_804D814(char *dest, const char *src, size_t size) +static void Trade_Memcpy(void *dest, const void *src, size_t size) { int i; + char *_dest = dest; + const char *_src = src; for (i = 0; i < size; i++) - dest[i] = src[i]; + _dest[i] = _src[i]; +} + +bool8 shedinja_maker_maybe(void) +{ + u8 id = GetMultiplayerId(); + int i; + struct Pokemon *mon; + + switch (gUnknown_2031DA8->unk_69) + { + case 0: + Trade_Memcpy(gBlockSendBuffer, &gPlayerParty[0], 2 * sizeof(struct Pokemon)); + gUnknown_2031DA8->unk_69++; + gUnknown_2031DA8->unk_A8 = 0; + break; + case 1: + if (IsLinkTaskFinished()) + { + if (GetBlockReceivedStatus() == 0) + { + gUnknown_2031DA8->unk_69++; + } + else + { + ResetBlockReceivedFlags(); + gUnknown_2031DA8->unk_69++; + } + } + break; + case 3: + if (id == 0) + { + sub_800A474(1); + } + gUnknown_2031DA8->unk_69++; + break; + case 4: + if (GetBlockReceivedStatus() == 3) + { + Trade_Memcpy(&gEnemyParty[0], gBlockRecvBuffer[id ^ 1], 2 * sizeof(struct Pokemon)); + ResetBlockReceivedFlags(); + gUnknown_2031DA8->unk_69++; + } + break; + case 5: + Trade_Memcpy(gBlockSendBuffer, &gPlayerParty[2], 2 * sizeof(struct Pokemon)); + gUnknown_2031DA8->unk_69++; + break; + case 7: + if (id == 0) + { + sub_800A474(1); + } + gUnknown_2031DA8->unk_69++; + break; + case 8: + if (GetBlockReceivedStatus() == 3) + { + Trade_Memcpy(&gEnemyParty[2], gBlockRecvBuffer[id ^ 1], 200); + ResetBlockReceivedFlags(); + gUnknown_2031DA8->unk_69++; + } + break; + case 9: + Trade_Memcpy(gBlockSendBuffer, &gPlayerParty[4], 200); + gUnknown_2031DA8->unk_69++; + break; + case 11: + if (id == 0) + { + sub_800A474(1); + } + gUnknown_2031DA8->unk_69++; + break; + case 12: + if (GetBlockReceivedStatus() == 3) + { + Trade_Memcpy(&gEnemyParty[4], gBlockRecvBuffer[id ^ 1], 200); + ResetBlockReceivedFlags(); + gUnknown_2031DA8->unk_69++; + } + break; + case 13: + Trade_Memcpy(gBlockSendBuffer, gSaveBlock1Ptr->mail, 220); + gUnknown_2031DA8->unk_69++; + break; + case 15: + if (id == 0) + { + sub_800A474(3); + } + gUnknown_2031DA8->unk_69++; + break; + case 16: + if (GetBlockReceivedStatus() == 3) + { + Trade_Memcpy(gUnknown_2031CCC, gBlockRecvBuffer[id ^ 1], 216); + ResetBlockReceivedFlags(); + gUnknown_2031DA8->unk_69++; + } + break; + case 17: + Trade_Memcpy(gBlockSendBuffer, gSaveBlock1Ptr->giftRibbons, 11); + gUnknown_2031DA8->unk_69++; + break; + case 19: + if (id == 0) + { + sub_800A474(4); + } + gUnknown_2031DA8->unk_69++; + break; + case 20: + if (GetBlockReceivedStatus() == 3) + { + Trade_Memcpy(gUnknown_2031DA8->unk_A9, gBlockRecvBuffer[id ^ 1], 11); + ResetBlockReceivedFlags(); + gUnknown_2031DA8->unk_69++; + } + break; + case 21: + for (i = 0, mon = gEnemyParty; i < PARTY_SIZE; mon++, i++) + { + u8 name[POKEMON_NAME_LENGTH + 1]; + u16 species = GetMonData(mon, MON_DATA_SPECIES); + + if (species != SPECIES_NONE) + { + if (species == SPECIES_SHEDINJA && GetMonData(mon, MON_DATA_LANGUAGE) != LANGUAGE_JAPANESE) + { + GetMonData(mon, MON_DATA_NICKNAME, name); + + if (!StringCompareWithoutExtCtrlCodes(name, gJPText_Shedinja)) + { + SetMonData(mon, MON_DATA_NICKNAME, gSpeciesNames[SPECIES_SHEDINJA]); + } + } + } + } + return TRUE; + case 2: + case 6: + case 10: + case 14: + case 18: + gUnknown_2031DA8->unk_A8++; + if (gUnknown_2031DA8->unk_A8 > 10) + { + gUnknown_2031DA8->unk_A8 = 0; + gUnknown_2031DA8->unk_69++; + } + break; + } + return FALSE; } diff --git a/sym_ewram.txt b/sym_ewram.txt index 77acf5657..67c1e4de8 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -18,75 +18,18 @@ .space 8 @ .include "src/link_rfu.o" + .align 2 .include "src/battle_controllers.o" + .align 2 .include "src/battle_main.o" - -sLearningMoveTableID: @ 2024028 - .space 0x1 - -gPlayerPartyCount: @ 2024029 - .space 0x1 - -gEnemyPartyCount: @ 202402A - .space 0x2 - -gEnemyParty: @ 202402C - .space 0xC8 - -gUnknown_20240F4: @ 20240F4 - .space 0x64 - -gUnknown_2024158: @ 2024158 - .space 0x64 - -gUnknown_20241BC: @ 20241BC - .space 0x64 - -gUnknown_2024220: @ 2024220 - .space 0x64 - -gPlayerParty: @ 2024284 - .space 0x64 - -gUnknown_20242E8: @ 20242E8 - .space 0x64 - -gUnknown_202434C: @ 202434C - .space 0x64 - -gUnknown_20243B0: @ 20243B0 - .space 0x64 - -gUnknown_2024414: @ 2024414 - .space 0x64 - -gUnknown_2024478: @ 2024478 - .space 0x64 - + .align 2 .include "src/pokemon.o" + .align 2 .include "src/daycare.o" .align 2 .include "src/load_save.o" - .align 2 -gUnknown_2031C90: @ 2031C90 - .space 0x4 - -gUnknown_2031C94: @ 2031C94 - .space 0x38 - -gUnknown_2031CCC: @ 2031CCC - .space 0xD8 - -gUnknown_2031DA4: @ 2031DA4 - .space 0x4 - -gUnknown_2031DA8: @ 2031DA8 - .space 0x4 - -gUnknown_2031DAC: @ 2031DAC - .space 0x4 - + .include "src/trade.o" .align 2 .include "src/new_game.o" -- cgit v1.2.3 From efe914a5bab5062834f35cbae7824d1703f45618 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 28 Oct 2019 15:55:57 -0400 Subject: trade through sub_804E944 --- asm/party_menu.s | 2 +- asm/pokemon_storage_system.s | 2 +- asm/pokemon_summary_screen.s | 10 +- asm/trade.s | 1796 -------------------------------------- include/overworld.h | 1 + include/pokemon_summary_screen.h | 2 +- include/strings.h | 3 + src/random.c | 6 +- src/trade.c | 571 +++++++++++- 9 files changed, 585 insertions(+), 1808 deletions(-) diff --git a/asm/party_menu.s b/asm/party_menu.s index c2eecaf14..b10cfa8f5 100644 --- a/asm/party_menu.s +++ b/asm/party_menu.s @@ -8681,7 +8681,7 @@ _08122D8C: ldr r3, _08122DB8 @ =sub_8122DBC movs r4, 0 str r4, [sp] - bl sub_81344F8 + bl ShowPokemonSummaryScreen add sp, 0x4 pop {r4} pop {r0} diff --git a/asm/pokemon_storage_system.s b/asm/pokemon_storage_system.s index ec0e9e53c..3a6f541b0 100644 --- a/asm/pokemon_storage_system.s +++ b/asm/pokemon_storage_system.s @@ -6561,7 +6561,7 @@ _0808EE78: mov r0, r8 adds r1, r6, 0 adds r2, r5, 0 - bl sub_81344F8 + bl ShowPokemonSummaryScreen b _0808EEF6 .align 2, 0 _0808EEAC: .4byte gUnknown_20397B0 diff --git a/asm/pokemon_summary_screen.s b/asm/pokemon_summary_screen.s index 4c090a2d9..ceca3ed12 100644 --- a/asm/pokemon_summary_screen.s +++ b/asm/pokemon_summary_screen.s @@ -5,8 +5,8 @@ .text - thumb_func_start sub_81344F8 -sub_81344F8: @ 81344F8 + thumb_func_start ShowPokemonSummaryScreen +ShowPokemonSummaryScreen: @ 81344F8 push {r4-r7,lr} mov r7, r10 mov r6, r9 @@ -268,7 +268,7 @@ _08134728: .4byte 0x0000322c _0813472C: .4byte 0x00003290 _08134730: .4byte 0x00003204 _08134734: .4byte sub_8135C34 - thumb_func_end sub_81344F8 + thumb_func_end ShowPokemonSummaryScreen thumb_func_start ShowSelectMovePokemonSummaryScreen ShowSelectMovePokemonSummaryScreen: @ 8134738 @@ -283,7 +283,7 @@ ShowSelectMovePokemonSummaryScreen: @ 8134738 lsrs r5, 16 movs r4, 0x2 str r4, [sp] - bl sub_81344F8 + bl ShowPokemonSummaryScreen ldr r0, _08134764 @ =gUnknown_203B140 ldr r0, [r0] ldr r1, _08134768 @ =0x00003260 @@ -14091,7 +14091,7 @@ sub_813B854: @ 813B854 str r0, [sp] movs r1, 0 movs r2, 0 - bl sub_81344F8 + bl ShowPokemonSummaryScreen add sp, 0x4 pop {r0} bx r0 diff --git a/asm/trade.s b/asm/trade.s index 34465a17b..fe750b735 100644 --- a/asm/trade.s +++ b/asm/trade.s @@ -5,1802 +5,6 @@ .text - thumb_func_start sub_804DBAC -sub_804DBAC: @ 804DBAC - push {lr} - ldr r0, _0804DBC8 @ =gUnknown_841E0A5 - ldr r1, _0804DBCC @ =gUnknown_2031DA8 - ldr r1, [r1] - adds r1, 0x72 - ldrh r1, [r1] - lsls r1, 5 - ldr r2, _0804DBD0 @ =0x06010000 - adds r1, r2 - movs r2, 0x18 - bl sub_804F728 - pop {r0} - bx r0 - .align 2, 0 -_0804DBC8: .4byte gUnknown_841E0A5 -_0804DBCC: .4byte gUnknown_2031DA8 -_0804DBD0: .4byte 0x06010000 - thumb_func_end sub_804DBAC - - thumb_func_start sub_804DBD4 -sub_804DBD4: @ 804DBD4 - push {r4,lr} - lsls r1, 24 - lsrs r4, r1, 24 - movs r2, 0x1 - adds r0, r4, 0 - ands r0, r2 - cmp r0, 0 - beq _0804DC58 - ldr r0, _0804DBFC @ =gBlockRecvBuffer - ldrh r1, [r0] - ldr r0, _0804DC00 @ =0x0000bbbb - cmp r1, r0 - beq _0804DC38 - cmp r1, r0 - bgt _0804DC08 - ldr r0, _0804DC04 @ =0x0000aabb - cmp r1, r0 - beq _0804DC28 - b _0804DC52 - .align 2, 0 -_0804DBFC: .4byte gBlockRecvBuffer -_0804DC00: .4byte 0x0000bbbb -_0804DC04: .4byte 0x0000aabb -_0804DC08: - ldr r0, _0804DC1C @ =0x0000bbcc - cmp r1, r0 - beq _0804DC48 - ldr r0, _0804DC20 @ =0x0000eeaa - cmp r1, r0 - bne _0804DC52 - ldr r0, _0804DC24 @ =gUnknown_2031DA8 - ldr r0, [r0] - adds r0, 0x78 - b _0804DC4E - .align 2, 0 -_0804DC1C: .4byte 0x0000bbcc -_0804DC20: .4byte 0x0000eeaa -_0804DC24: .4byte gUnknown_2031DA8 -_0804DC28: - ldr r0, _0804DC34 @ =gUnknown_2031DA8 - ldr r0, [r0] - adds r0, 0x78 - strb r2, [r0] - b _0804DC52 - .align 2, 0 -_0804DC34: .4byte gUnknown_2031DA8 -_0804DC38: - ldr r0, _0804DC44 @ =gUnknown_2031DA8 - ldr r0, [r0] - adds r0, 0x7A - strb r2, [r0] - b _0804DC52 - .align 2, 0 -_0804DC44: .4byte gUnknown_2031DA8 -_0804DC48: - ldr r0, _0804DC80 @ =gUnknown_2031DA8 - ldr r0, [r0] - adds r0, 0x7A -_0804DC4E: - movs r1, 0x2 - strb r1, [r0] -_0804DC52: - movs r0, 0 - bl ResetBlockReceivedFlag -_0804DC58: - movs r2, 0x2 - adds r0, r4, 0 - ands r0, r2 - cmp r0, 0 - beq _0804DCEA - ldr r3, _0804DC84 @ =gBlockRecvBuffer - movs r1, 0x80 - lsls r1, 1 - adds r0, r3, r1 - ldrh r1, [r0] - ldr r0, _0804DC88 @ =0x0000bbbb - cmp r1, r0 - beq _0804DCCC - cmp r1, r0 - bgt _0804DC90 - ldr r0, _0804DC8C @ =0x0000aabb - cmp r1, r0 - beq _0804DCB0 - b _0804DCE4 - .align 2, 0 -_0804DC80: .4byte gUnknown_2031DA8 -_0804DC84: .4byte gBlockRecvBuffer -_0804DC88: .4byte 0x0000bbbb -_0804DC8C: .4byte 0x0000aabb -_0804DC90: - ldr r0, _0804DCA4 @ =0x0000bbcc - cmp r1, r0 - beq _0804DCDC - ldr r0, _0804DCA8 @ =0x0000eeaa - cmp r1, r0 - bne _0804DCE4 - ldr r0, _0804DCAC @ =gUnknown_2031DA8 - ldr r0, [r0] - adds r0, 0x79 - b _0804DCE2 - .align 2, 0 -_0804DCA4: .4byte 0x0000bbcc -_0804DCA8: .4byte 0x0000eeaa -_0804DCAC: .4byte gUnknown_2031DA8 -_0804DCB0: - ldr r2, _0804DCC8 @ =gUnknown_2031DA8 - ldr r1, [r2] - movs r4, 0x81 - lsls r4, 1 - adds r0, r3, r4 - ldrb r0, [r0] - adds r0, 0x6 - adds r1, 0x7E - strb r0, [r1] - ldr r0, [r2] - adds r0, 0x79 - b _0804DCD2 - .align 2, 0 -_0804DCC8: .4byte gUnknown_2031DA8 -_0804DCCC: - ldr r0, _0804DCD8 @ =gUnknown_2031DA8 - ldr r0, [r0] - adds r0, 0x7B -_0804DCD2: - movs r1, 0x1 - strb r1, [r0] - b _0804DCE4 - .align 2, 0 -_0804DCD8: .4byte gUnknown_2031DA8 -_0804DCDC: - ldr r0, _0804DCF0 @ =gUnknown_2031DA8 - ldr r0, [r0] - adds r0, 0x7B -_0804DCE2: - strb r2, [r0] -_0804DCE4: - movs r0, 0x1 - bl ResetBlockReceivedFlag -_0804DCEA: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0804DCF0: .4byte gUnknown_2031DA8 - thumb_func_end sub_804DBD4 - - thumb_func_start sub_804DCF4 -sub_804DCF4: @ 804DCF4 - push {r4,r5,lr} - sub sp, 0x4 - lsls r1, 24 - lsrs r5, r1, 24 - movs r0, 0x1 - ands r0, r5 - cmp r0, 0 - beq _0804DDD6 - ldr r2, _0804DD20 @ =gBlockRecvBuffer - ldrh r1, [r2] - ldr r0, _0804DD24 @ =0x0000ddee - cmp r1, r0 - beq _0804DDC0 - cmp r1, r0 - bgt _0804DD30 - ldr r0, _0804DD28 @ =0x0000ccdd - cmp r1, r0 - beq _0804DDA0 - ldr r0, _0804DD2C @ =0x0000dddd - cmp r1, r0 - beq _0804DD6C - b _0804DDD0 - .align 2, 0 -_0804DD20: .4byte gBlockRecvBuffer -_0804DD24: .4byte 0x0000ddee -_0804DD28: .4byte 0x0000ccdd -_0804DD2C: .4byte 0x0000dddd -_0804DD30: - ldr r0, _0804DD40 @ =0x0000eebb - cmp r1, r0 - beq _0804DD44 - adds r0, 0x11 - cmp r1, r0 - beq _0804DD68 - b _0804DDD0 - .align 2, 0 -_0804DD40: .4byte 0x0000eebb -_0804DD44: - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - movs r0, 0x4 - bl sub_804F5BC - ldr r0, _0804DD64 @ =gUnknown_2031DA8 - ldr r0, [r0] - adds r0, 0x6F - movs r1, 0xB - b _0804DDCE - .align 2, 0 -_0804DD64: .4byte gUnknown_2031DA8 -_0804DD68: - movs r0, 0x5 - b _0804DDC2 -_0804DD6C: - ldr r4, _0804DD9C @ =gUnknown_2031DA8 - ldr r1, [r4] - ldrb r0, [r2, 0x2] - adds r0, 0x6 - adds r1, 0x7E - strb r0, [r1] - movs r0, 0 - bl rbox_fill_rectangle - ldr r0, [r4] - adds r0, 0x35 - ldrb r0, [r0] - bl sub_804EAAC - ldr r0, [r4] - adds r0, 0x7E - ldrb r0, [r0] - bl sub_804EAAC - ldr r0, [r4] - adds r0, 0x6F - movs r1, 0x7 - b _0804DDCE - .align 2, 0 -_0804DD9C: .4byte gUnknown_2031DA8 -_0804DDA0: - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - ldr r0, _0804DDBC @ =gUnknown_2031DA8 - ldr r0, [r0] - adds r0, 0x6F - movs r1, 0xA - b _0804DDCE - .align 2, 0 -_0804DDBC: .4byte gUnknown_2031DA8 -_0804DDC0: - movs r0, 0x1 -_0804DDC2: - bl sub_804F5BC - ldr r0, _0804DDEC @ =gUnknown_2031DA8 - ldr r0, [r0] - adds r0, 0x6F - movs r1, 0x8 -_0804DDCE: - strb r1, [r0] -_0804DDD0: - movs r0, 0 - bl ResetBlockReceivedFlag -_0804DDD6: - movs r0, 0x2 - ands r0, r5 - cmp r0, 0 - beq _0804DDE4 - movs r0, 0x1 - bl ResetBlockReceivedFlag -_0804DDE4: - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0804DDEC: .4byte gUnknown_2031DA8 - thumb_func_end sub_804DCF4 - - thumb_func_start sub_804DDF0 -sub_804DDF0: @ 804DDF0 - push {r4-r6,lr} - sub sp, 0x4 - ldr r6, _0804DE4C @ =gUnknown_2031DA8 - ldr r2, [r6] - adds r1, r2, 0 - adds r1, 0x78 - ldrb r0, [r1] - cmp r0, 0 - bne _0804DE04 - b _0804DF38 -_0804DE04: - adds r0, r2, 0 - adds r0, 0x79 - ldrb r0, [r0] - cmp r0, 0 - bne _0804DE10 - b _0804DF38 -_0804DE10: - ldrh r1, [r1] - ldr r0, _0804DE50 @ =0x00000101 - cmp r1, r0 - bne _0804DE58 - adds r1, r2, 0 - adds r1, 0x6F - movs r0, 0x6 - strb r0, [r1] - ldr r2, [r6] - adds r1, r2, 0 - adds r1, 0x80 - movs r4, 0 - ldr r0, _0804DE54 @ =0x0000dddd - strh r0, [r1] - adds r0, r2, 0 - adds r0, 0x35 - ldrb r1, [r0] - adds r0, 0x4D - strh r1, [r0] - movs r0, 0x5 - movs r1, 0 - bl sub_804F488 - ldr r0, [r6] - adds r2, r0, 0 - adds r2, 0x79 - strb r4, [r2] - adds r0, 0x78 - strb r4, [r0] - b _0804DF38 - .align 2, 0 -_0804DE4C: .4byte gUnknown_2031DA8 -_0804DE50: .4byte 0x00000101 -_0804DE54: .4byte 0x0000dddd -_0804DE58: - ldr r0, _0804DEA0 @ =0x00000201 - cmp r1, r0 - bne _0804DEA8 - movs r0, 0x1 - bl sub_804F5BC - ldr r1, [r6] - adds r2, r1, 0 - adds r2, 0x80 - movs r4, 0 - movs r3, 0 - ldr r0, _0804DEA4 @ =0x0000eecc - strh r0, [r2] - adds r1, 0x82 - strh r3, [r1] - movs r0, 0x5 - movs r1, 0 - bl sub_804F488 - ldr r0, [r6] - adds r1, r0, 0 - adds r1, 0x7B - strb r4, [r1] - adds r0, 0x7A - strb r4, [r0] - ldr r0, [r6] - adds r1, r0, 0 - adds r1, 0x79 - strb r4, [r1] - adds r0, 0x78 - strb r4, [r0] - ldr r0, [r6] - adds r0, 0x6F - movs r1, 0x8 - b _0804DF36 - .align 2, 0 -_0804DEA0: .4byte 0x00000201 -_0804DEA4: .4byte 0x0000eecc -_0804DEA8: - movs r0, 0x81 - lsls r0, 1 - cmp r1, r0 - bne _0804DEF4 - movs r0, 0x5 - bl sub_804F5BC - ldr r1, [r6] - adds r2, r1, 0 - adds r2, 0x80 - movs r4, 0 - movs r3, 0 - ldr r0, _0804DEF0 @ =0x0000ddee - strh r0, [r2] - adds r1, 0x82 - strh r3, [r1] - movs r0, 0x5 - movs r1, 0 - bl sub_804F488 - ldr r0, [r6] - adds r1, r0, 0 - adds r1, 0x7B - strb r4, [r1] - adds r0, 0x7A - strb r4, [r0] - ldr r0, [r6] - adds r1, r0, 0 - adds r1, 0x79 - strb r4, [r1] - adds r0, 0x78 - strb r4, [r0] - ldr r0, [r6] - adds r0, 0x6F - movs r1, 0x8 - b _0804DF36 - .align 2, 0 -_0804DEF0: .4byte 0x0000ddee -_0804DEF4: - ldr r0, _0804DFD8 @ =0x00000202 - cmp r1, r0 - bne _0804DF38 - adds r1, r2, 0 - adds r1, 0x80 - movs r5, 0 - movs r4, 0 - ldr r0, _0804DFDC @ =0x0000eebb - strh r0, [r1] - adds r0, r2, 0 - adds r0, 0x82 - strh r4, [r0] - movs r0, 0x5 - movs r1, 0 - bl sub_804F488 - movs r0, 0x1 - negs r0, r0 - str r4, [sp] - movs r1, 0 - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - ldr r0, [r6] - adds r1, r0, 0 - adds r1, 0x79 - strb r5, [r1] - adds r0, 0x78 - strb r5, [r0] - ldr r0, [r6] - adds r0, 0x6F - movs r1, 0xB -_0804DF36: - strb r1, [r0] -_0804DF38: - ldr r5, _0804DFE0 @ =gUnknown_2031DA8 - ldr r3, [r5] - adds r1, r3, 0 - adds r1, 0x7A - ldrb r0, [r1] - cmp r0, 0 - beq _0804DFD0 - adds r0, r3, 0 - adds r0, 0x7B - ldrb r0, [r0] - cmp r0, 0 - beq _0804DFD0 - ldrh r1, [r1] - ldr r0, _0804DFE4 @ =0x00000101 - cmp r1, r0 - bne _0804DF86 - adds r1, r3, 0 - adds r1, 0x80 - movs r4, 0 - movs r2, 0 - ldr r0, _0804DFE8 @ =0x0000ccdd - strh r0, [r1] - adds r0, r3, 0 - adds r0, 0x82 - strh r2, [r0] - movs r0, 0x5 - movs r1, 0 - bl sub_804F488 - ldr r0, [r5] - adds r0, 0x7A - strb r4, [r0] - ldr r0, [r5] - adds r0, 0x7B - strb r4, [r0] - ldr r0, [r5] - adds r0, 0x6F - movs r1, 0x9 - strb r1, [r0] -_0804DF86: - ldr r1, [r5] - adds r0, r1, 0 - adds r0, 0x7A - ldrb r0, [r0] - cmp r0, 0x2 - beq _0804DF9C - adds r0, r1, 0 - adds r0, 0x7B - ldrb r0, [r0] - cmp r0, 0x2 - bne _0804DFD0 -_0804DF9C: - movs r0, 0x1 - bl sub_804F5BC - ldr r1, [r5] - adds r2, r1, 0 - adds r2, 0x80 - movs r4, 0 - movs r3, 0 - ldr r0, _0804DFEC @ =0x0000ddee - strh r0, [r2] - adds r1, 0x82 - strh r3, [r1] - movs r0, 0x5 - movs r1, 0 - bl sub_804F488 - ldr r0, [r5] - adds r0, 0x7A - strb r4, [r0] - ldr r0, [r5] - adds r0, 0x7B - strb r4, [r0] - ldr r0, [r5] - adds r0, 0x6F - movs r1, 0x8 - strb r1, [r0] -_0804DFD0: - add sp, 0x4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0804DFD8: .4byte 0x00000202 -_0804DFDC: .4byte 0x0000eebb -_0804DFE0: .4byte gUnknown_2031DA8 -_0804DFE4: .4byte 0x00000101 -_0804DFE8: .4byte 0x0000ccdd -_0804DFEC: .4byte 0x0000ddee - thumb_func_end sub_804DDF0 - - thumb_func_start sub_804DFF0 -sub_804DFF0: @ 804DFF0 - push {r4,lr} - bl GetMultiplayerId - lsls r0, 24 - lsrs r4, r0, 24 - bl GetBlockReceivedStatus - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0 - beq _0804E018 - cmp r4, 0 - bne _0804E012 - movs r0, 0 - bl sub_804DBD4 - b _0804E018 -_0804E012: - adds r0, r4, 0 - bl sub_804DCF4 -_0804E018: - cmp r4, 0 - bne _0804E020 - bl sub_804DDF0 -_0804E020: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_804DFF0 - - thumb_func_start sub_804E028 -sub_804E028: @ 804E028 - push {r4-r6,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, 24 - lsrs r1, 24 - movs r6, 0 - movs r5, 0 - ldr r2, _0804E05C @ =gUnknown_2031DA8 - ldr r3, [r2] - ldr r4, _0804E060 @ =gUnknown_8261D08 - lsls r2, r1, 1 - adds r2, r1 - lsls r2, 1 - lsls r1, r0, 1 - adds r1, r0 - lsls r1, 3 - adds r3, 0x38 - adds r2, r1 - adds r2, r4 -_0804E04E: - ldrb r1, [r2] - adds r0, r3, r1 - ldrb r0, [r0] - cmp r0, 0x1 - bne _0804E064 - adds r6, r1, 0 - b _0804E06C - .align 2, 0 -_0804E05C: .4byte gUnknown_2031DA8 -_0804E060: .4byte gUnknown_8261D08 -_0804E064: - adds r2, 0x1 - adds r5, 0x1 - cmp r5, 0x5 - ble _0804E04E -_0804E06C: - adds r0, r6, 0 - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_804E028 - - thumb_func_start TradeMenuMoveCursor -TradeMenuMoveCursor: @ 804E074 - push {r4-r7,lr} - adds r7, r0, 0 - lsls r1, 24 - lsrs r1, 24 - ldrb r0, [r7] - bl sub_804E028 - lsls r0, 24 - lsrs r6, r0, 24 - cmp r6, 0xC - bne _0804E0CC - ldr r5, _0804E0C4 @ =gUnknown_2031DA8 - ldr r0, [r5] - adds r0, 0x34 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r4, _0804E0C8 @ =gSprites - adds r0, r4 - movs r1, 0x1 - bl StartSpriteAnim - ldr r2, [r5] - adds r2, 0x34 - ldrb r1, [r2] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - movs r1, 0xE0 - strh r1, [r0, 0x20] - ldrb r1, [r2] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - movs r1, 0xA0 - strh r1, [r0, 0x22] - b _0804E114 - .align 2, 0 -_0804E0C4: .4byte gUnknown_2031DA8 -_0804E0C8: .4byte gSprites -_0804E0CC: - ldr r4, _0804E128 @ =gUnknown_2031DA8 - ldr r0, [r4] - adds r0, 0x34 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r5, _0804E12C @ =gSprites - adds r0, r5 - movs r1, 0 - bl StartSpriteAnim - ldr r4, [r4] - adds r4, 0x34 - ldrb r0, [r4] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r5 - ldr r2, _0804E130 @ =gTradeMonSpriteCoords - lsls r3, r6, 1 - adds r0, r3, r2 - ldrb r0, [r0] - lsls r0, 3 - adds r0, 0x20 - strh r0, [r1, 0x20] - ldrb r0, [r4] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r5 - adds r2, 0x1 - adds r3, r2 - ldrb r0, [r3] - lsls r0, 3 - strh r0, [r1, 0x22] -_0804E114: - ldrb r0, [r7] - cmp r0, r6 - beq _0804E120 - movs r0, 0x5 - bl PlaySE -_0804E120: - strb r6, [r7] - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0804E128: .4byte gUnknown_2031DA8 -_0804E12C: .4byte gSprites -_0804E130: .4byte gTradeMonSpriteCoords - thumb_func_end TradeMenuMoveCursor - - thumb_func_start sub_804E134 -sub_804E134: @ 804E134 - push {r4,lr} - movs r0, 0 - bl sub_804F5BC - ldr r4, _0804E17C @ =gUnknown_2031DA8 - ldr r0, [r4] - adds r0, 0x6F - movs r1, 0x5 - strb r1, [r0] - bl GetMultiplayerId - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0804E184 - ldr r2, [r4] - adds r1, r2, 0 - adds r1, 0x80 - ldr r0, _0804E180 @ =0x0000aabb - strh r0, [r1] - adds r0, r2, 0 - adds r0, 0x35 - ldrb r1, [r0] - adds r0, 0x4D - strh r1, [r0] - bl bitmask_all_link_players_but_self - lsls r0, 24 - lsrs r0, 24 - ldr r1, [r4] - adds r1, 0x80 - movs r2, 0x14 - bl SendBlock - b _0804E18C - .align 2, 0 -_0804E17C: .4byte gUnknown_2031DA8 -_0804E180: .4byte 0x0000aabb -_0804E184: - ldr r0, [r4] - adds r0, 0x78 - movs r1, 0x1 - strb r1, [r0] -_0804E18C: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_804E134 - - thumb_func_start sub_804E194 -sub_804E194: @ 804E194 - push {r4,r5,lr} - sub sp, 0xC - ldr r0, _0804E1B4 @ =gMain - ldrh r1, [r0, 0x30] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - beq _0804E1BC - ldr r0, _0804E1B8 @ =gUnknown_2031DA8 - ldr r0, [r0] - adds r0, 0x35 - movs r1, 0 - bl TradeMenuMoveCursor - b _0804E208 - .align 2, 0 -_0804E1B4: .4byte gMain -_0804E1B8: .4byte gUnknown_2031DA8 -_0804E1BC: - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _0804E1D8 - ldr r0, _0804E1D4 @ =gUnknown_2031DA8 - ldr r0, [r0] - adds r0, 0x35 - movs r1, 0x1 - bl TradeMenuMoveCursor - b _0804E208 - .align 2, 0 -_0804E1D4: .4byte gUnknown_2031DA8 -_0804E1D8: - movs r0, 0x20 - ands r0, r1 - cmp r0, 0 - beq _0804E1F4 - ldr r0, _0804E1F0 @ =gUnknown_2031DA8 - ldr r0, [r0] - adds r0, 0x35 - movs r1, 0x2 - bl TradeMenuMoveCursor - b _0804E208 - .align 2, 0 -_0804E1F0: .4byte gUnknown_2031DA8 -_0804E1F4: - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - beq _0804E208 - ldr r0, _0804E27C @ =gUnknown_2031DA8 - ldr r0, [r0] - adds r0, 0x35 - movs r1, 0x3 - bl TradeMenuMoveCursor -_0804E208: - ldr r0, _0804E280 @ =gMain - ldrh r1, [r0, 0x2E] - movs r5, 0x1 - adds r0, r5, 0 - ands r0, r1 - cmp r0, 0 - beq _0804E2DE - movs r0, 0x5 - bl PlaySE - ldr r4, _0804E27C @ =gUnknown_2031DA8 - ldr r0, [r4] - adds r0, 0x35 - ldrb r0, [r0] - cmp r0, 0x5 - bhi _0804E288 - movs r0, 0x1 - movs r1, 0x1 - movs r2, 0xE - bl DrawTextBorderOuter - movs r0, 0x1 - movs r1, 0x11 - bl FillWindowPixelBuffer - ldr r0, _0804E284 @ =gUnknown_8261EE4 - str r0, [sp] - movs r0, 0x1 - movs r1, 0x3 - movs r2, 0x10 - movs r3, 0x2 - bl UnionRoomAndTradeMenuPrintOptions - movs r0, 0x10 - str r0, [sp] - movs r0, 0x2 - str r0, [sp, 0x4] - movs r0, 0 - str r0, [sp, 0x8] - movs r0, 0x1 - movs r1, 0x3 - movs r2, 0 - movs r3, 0 - bl Menu_InitCursor - movs r0, 0x1 - bl PutWindowTilemap - movs r0, 0x1 - movs r1, 0x3 - bl CopyWindowToVram - ldr r0, [r4] - adds r0, 0x6F - movs r1, 0x1 - strb r1, [r0] - b _0804E2DE - .align 2, 0 -_0804E27C: .4byte gUnknown_2031DA8 -_0804E280: .4byte gMain -_0804E284: .4byte gUnknown_8261EE4 -_0804E288: - cmp r0, 0xB - bhi _0804E2A6 - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - ldr r0, [r4] - adds r0, 0x6F - movs r1, 0x2 - strb r1, [r0] - b _0804E2DE -_0804E2A6: - cmp r0, 0xC - bne _0804E2DE - ldr r0, _0804E31C @ =gUnknown_8261FC4 - str r5, [sp] - movs r1, 0xE - str r1, [sp, 0x4] - movs r1, 0 - str r1, [sp, 0x8] - movs r1, 0x3 - movs r2, 0 - movs r3, 0x2 - bl CreateYesNoMenu - ldr r0, [r4] - adds r0, 0x6F - movs r1, 0x4 - strb r1, [r0] - ldr r0, _0804E320 @ =gUnknown_8261ECC - ldr r0, [r0, 0x10] - ldr r1, [r4] - adds r1, 0x72 - ldrh r1, [r1] - lsls r1, 5 - ldr r2, _0804E324 @ =0x06010000 - adds r1, r2 - movs r2, 0x18 - bl sub_804F728 -_0804E2DE: - ldr r0, _0804E328 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x80 - lsls r0, 1 - ands r0, r1 - cmp r0, 0 - beq _0804E314 - movs r2, 0 - ldr r3, _0804E32C @ =gUnknown_2031DA8 -_0804E2F0: - ldr r0, [r3] - lsls r1, r2, 1 - adds r0, 0x80 - adds r0, r1 - strh r2, [r0] - adds r2, 0x1 - cmp r2, 0x9 - ble _0804E2F0 - bl bitmask_all_link_players_but_self - lsls r0, 24 - lsrs r0, 24 - ldr r1, _0804E32C @ =gUnknown_2031DA8 - ldr r1, [r1] - adds r1, 0x80 - movs r2, 0x14 - bl SendBlock -_0804E314: - add sp, 0xC - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0804E31C: .4byte gUnknown_8261FC4 -_0804E320: .4byte gUnknown_8261ECC -_0804E324: .4byte 0x06010000 -_0804E328: .4byte gMain -_0804E32C: .4byte gUnknown_2031DA8 - thumb_func_end sub_804E194 - - thumb_func_start sub_804E330 -sub_804E330: @ 804E330 - push {lr} - bl sub_804F3B4 - ldr r3, _0804E378 @ =gUnknown_2031DA8 - ldr r0, [r3] - adds r0, 0x6F - movs r1, 0 - strb r1, [r0] - ldr r2, _0804E37C @ =gSprites - ldr r0, [r3] - adds r0, 0x34 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - adds r0, 0x3E - ldrb r2, [r0] - movs r1, 0x5 - negs r1, r1 - ands r1, r2 - strb r1, [r0] - ldr r0, _0804E380 @ =gUnknown_8261ECC - ldr r0, [r0, 0x4] - ldr r1, [r3] - adds r1, 0x72 - ldrh r1, [r1] - lsls r1, 5 - ldr r2, _0804E384 @ =0x06010000 - adds r1, r2 - movs r2, 0x18 - bl sub_804F728 - pop {r0} - bx r0 - .align 2, 0 -_0804E378: .4byte gUnknown_2031DA8 -_0804E37C: .4byte gSprites -_0804E380: .4byte gUnknown_8261ECC -_0804E384: .4byte 0x06010000 - thumb_func_end sub_804E330 - - thumb_func_start sub_804E388 -sub_804E388: @ 804E388 - push {lr} - sub sp, 0x4 - bl Menu_ProcessInputNoWrapAround - lsls r0, 24 - asrs r0, 24 - movs r1, 0x1 - negs r1, r1 - cmp r0, r1 - beq _0804E3AA - cmp r0, r1 - ble _0804E462 - cmp r0, 0 - beq _0804E3B6 - cmp r0, 0x1 - beq _0804E3D4 - b _0804E462 -_0804E3AA: - movs r0, 0x5 - bl PlaySE - bl sub_804E330 - b _0804E462 -_0804E3B6: - str r0, [sp] - adds r0, r1, 0 - movs r1, 0 - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - ldr r0, _0804E3D0 @ =gUnknown_2031DA8 - ldr r0, [r0] - adds r0, 0x6F - movs r1, 0x2 - b _0804E460 - .align 2, 0 -_0804E3D0: .4byte gUnknown_2031DA8 -_0804E3D4: - ldr r0, _0804E3F4 @ =gPlayerParty - ldr r1, _0804E3F8 @ =gPlayerPartyCount - ldrb r1, [r1] - ldr r2, _0804E3FC @ =gUnknown_2031DA8 - ldr r2, [r2] - adds r2, 0x35 - ldrb r2, [r2] - bl sub_804FA14 - cmp r0, 0x5 - bhi _0804E462 - lsls r0, 2 - ldr r1, _0804E400 @ =_0804E404 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0804E3F4: .4byte gPlayerParty -_0804E3F8: .4byte gPlayerPartyCount -_0804E3FC: .4byte gUnknown_2031DA8 -_0804E400: .4byte _0804E404 - .align 2, 0 -_0804E404: - .4byte _0804E41C - .4byte _0804E444 - .4byte _0804E44A - .4byte _0804E450 - .4byte _0804E44A - .4byte _0804E450 -_0804E41C: - bl sub_804E134 - ldr r2, _0804E43C @ =gSprites - ldr r0, _0804E440 @ =gUnknown_2031DA8 - ldr r0, [r0] - adds r0, 0x34 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - adds r0, 0x3E - ldrb r1, [r0] - movs r2, 0x4 - orrs r1, r2 - b _0804E460 - .align 2, 0 -_0804E43C: .4byte gSprites -_0804E440: .4byte gUnknown_2031DA8 -_0804E444: - movs r0, 0x3 - movs r1, 0x3 - b _0804E454 -_0804E44A: - movs r0, 0x3 - movs r1, 0x6 - b _0804E454 -_0804E450: - movs r0, 0x3 - movs r1, 0x7 -_0804E454: - bl sub_804F488 - ldr r0, _0804E468 @ =gUnknown_2031DA8 - ldr r0, [r0] - adds r0, 0x6F - movs r1, 0x8 -_0804E460: - strb r1, [r0] -_0804E462: - add sp, 0x4 - pop {r0} - bx r0 - .align 2, 0 -_0804E468: .4byte gUnknown_2031DA8 - thumb_func_end sub_804E388 - - thumb_func_start sub_804E46C -sub_804E46C: @ 804E46C - push {lr} - ldr r0, _0804E490 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - bne _0804E482 - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _0804E48C -_0804E482: - movs r0, 0x5 - bl PlaySE - bl sub_804E330 -_0804E48C: - pop {r0} - bx r0 - .align 2, 0 -_0804E490: .4byte gMain - thumb_func_end sub_804E46C - - thumb_func_start sub_804E494 -sub_804E494: @ 804E494 - push {r4,lr} - sub sp, 0x4 - ldr r0, _0804E4CC @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _0804E4FC - ldr r0, _0804E4D0 @ =gUnknown_2031DA8 - ldr r2, [r0] - adds r3, r2, 0 - adds r3, 0x35 - ldrb r1, [r3] - cmp r1, 0x5 - bhi _0804E4DC - ldr r0, _0804E4D4 @ =gPlayerParty - ldrb r1, [r3] - adds r2, 0x36 - ldrb r2, [r2] - subs r2, 0x1 - lsls r2, 24 - lsrs r2, 24 - ldr r3, _0804E4D8 @ =sub_804CF14 - movs r4, 0x4 - str r4, [sp] - bl sub_81344F8 - b _0804E4F8 - .align 2, 0 -_0804E4CC: .4byte gPaletteFade -_0804E4D0: .4byte gUnknown_2031DA8 -_0804E4D4: .4byte gPlayerParty -_0804E4D8: .4byte sub_804CF14 -_0804E4DC: - ldr r0, _0804E504 @ =gEnemyParty - subs r1, 0x6 - lsls r1, 24 - lsrs r1, 24 - adds r2, 0x37 - ldrb r2, [r2] - subs r2, 0x1 - lsls r2, 24 - lsrs r2, 24 - ldr r3, _0804E508 @ =sub_804CF14 - movs r4, 0x4 - str r4, [sp] - bl sub_81344F8 -_0804E4F8: - bl FreeAllWindowBuffers -_0804E4FC: - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0804E504: .4byte gEnemyParty -_0804E508: .4byte sub_804CF14 - thumb_func_end sub_804E494 - - thumb_func_start sub_804E50C -sub_804E50C: @ 804E50C - push {r4-r7,lr} - adds r5, r0, 0 - lsls r1, 24 - lsrs r1, 24 - lsls r2, 24 - lsrs r2, 24 - movs r4, 0 - movs r3, 0 - ldr r6, _0804E588 @ =gUnknown_2031DA8 - ldr r7, _0804E58C @ =gEnemyParty - cmp r4, r1 - bge _0804E538 -_0804E524: - cmp r2, r3 - beq _0804E532 - adds r0, r5, r3 - ldrb r0, [r0] - adds r0, r4, r0 - lsls r0, 24 - lsrs r4, r0, 24 -_0804E532: - adds r3, 0x1 - cmp r3, r1 - blt _0804E524 -_0804E538: - ldr r0, [r6] - adds r0, 0x7E - ldrb r0, [r0] - movs r1, 0x6 - bl __umodsi3 - lsls r0, 24 - lsrs r0, 24 - movs r5, 0x64 - muls r0, r5 - adds r0, r7 - movs r1, 0xB - bl GetMonData - lsls r0, 16 - lsrs r1, r0, 16 - movs r0, 0xCD - lsls r0, 1 - cmp r1, r0 - beq _0804E564 - cmp r1, 0x97 - bne _0804E590 -_0804E564: - ldr r0, [r6] - adds r0, 0x7E - ldrb r0, [r0] - movs r1, 0x6 - bl __umodsi3 - lsls r0, 24 - lsrs r0, 24 - muls r0, r5 - adds r0, r7 - movs r1, 0x50 - bl GetMonData - cmp r0, 0 - bne _0804E590 - movs r0, 0x2 - b _0804E598 - .align 2, 0 -_0804E588: .4byte gUnknown_2031DA8 -_0804E58C: .4byte gEnemyParty -_0804E590: - cmp r4, 0 - beq _0804E596 - movs r4, 0x1 -_0804E596: - adds r0, r4, 0 -_0804E598: - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_804E50C - - thumb_func_start sub_804E5A0 -sub_804E5A0: @ 804E5A0 - push {r4,r5,lr} - sub sp, 0xC - movs r2, 0 - ldr r0, _0804E5F4 @ =gUnknown_2031DA8 - ldr r1, [r0] - adds r3, r1, 0 - adds r3, 0x36 - adds r5, r0, 0 - ldrb r0, [r3] - cmp r2, r0 - bge _0804E5CC - adds r4, r1, 0 - adds r4, 0x45 -_0804E5BA: - mov r1, sp - adds r0, r1, r2 - adds r1, r4, r2 - ldrb r1, [r1] - strb r1, [r0] - adds r2, 0x1 - ldrb r0, [r3] - cmp r2, r0 - blt _0804E5BA -_0804E5CC: - adds r4, r5, 0 - ldr r0, [r4] - adds r1, r0, 0 - adds r1, 0x36 - ldrb r1, [r1] - adds r0, 0x35 - ldrb r2, [r0] - mov r0, sp - bl sub_804E50C - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _0804E61C - cmp r0, 0x1 - bgt _0804E5F8 - cmp r0, 0 - beq _0804E5FE - b _0804E668 - .align 2, 0 -_0804E5F4: .4byte gUnknown_2031DA8 -_0804E5F8: - cmp r0, 0x2 - beq _0804E650 - b _0804E668 -_0804E5FE: - movs r0, 0x3 - movs r1, 0x3 - bl sub_804F488 - ldr r0, [r4] - adds r0, 0x80 - ldr r1, _0804E618 @ =0x0000bbcc - strh r1, [r0] - movs r0, 0xB4 - movs r1, 0 - bl sub_804F488 - b _0804E668 - .align 2, 0 -_0804E618: .4byte 0x0000bbcc -_0804E61C: - movs r0, 0x3 - movs r1, 0x1 - bl sub_804F488 - ldr r0, [r4] - adds r0, 0x80 - ldr r1, _0804E64C @ =0x0000bbbb - strh r1, [r0] - bl IsLinkTaskFinished - lsls r0, 24 - cmp r0, 0 - beq _0804E668 - bl bitmask_all_link_players_but_self - lsls r0, 24 - lsrs r0, 24 - ldr r1, [r4] - adds r1, 0x80 - movs r2, 0x14 - bl SendBlock - b _0804E668 - .align 2, 0 -_0804E64C: .4byte 0x0000bbbb -_0804E650: - movs r0, 0x3 - movs r1, 0x8 - bl sub_804F488 - ldr r0, [r5] - adds r0, 0x80 - ldr r1, _0804E670 @ =0x0000bbcc - strh r1, [r0] - movs r0, 0xB4 - movs r1, 0 - bl sub_804F488 -_0804E668: - add sp, 0xC - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0804E670: .4byte 0x0000bbcc - thumb_func_end sub_804E5A0 - - thumb_func_start sub_804E674 -sub_804E674: @ 804E674 - push {r4,lr} - bl Menu_ProcessInputNoWrapClearOnChoose - lsls r0, 24 - asrs r1, r0, 24 - cmp r1, 0 - beq _0804E696 - cmp r1, 0 - bgt _0804E690 - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - beq _0804E6B0 - b _0804E6EE -_0804E690: - cmp r1, 0x1 - beq _0804E6B0 - b _0804E6EE -_0804E696: - bl sub_804E5A0 - ldr r0, _0804E6AC @ =gUnknown_2031DA8 - ldr r0, [r0] - adds r0, 0x6F - movs r1, 0x64 - strb r1, [r0] - movs r0, 0x11 - bl PutWindowTilemap - b _0804E6EE - .align 2, 0 -_0804E6AC: .4byte gUnknown_2031DA8 -_0804E6B0: - movs r0, 0x3 - movs r1, 0x1 - bl sub_804F488 - bl IsLinkTaskFinished - lsls r0, 24 - cmp r0, 0 - beq _0804E6DE - ldr r4, _0804E6F4 @ =gUnknown_2031DA8 - ldr r0, [r4] - adds r0, 0x80 - ldr r1, _0804E6F8 @ =0x0000bbcc - strh r1, [r0] - bl bitmask_all_link_players_but_self - lsls r0, 24 - lsrs r0, 24 - ldr r1, [r4] - adds r1, 0x80 - movs r2, 0x14 - bl SendBlock -_0804E6DE: - ldr r0, _0804E6F4 @ =gUnknown_2031DA8 - ldr r0, [r0] - adds r0, 0x6F - movs r1, 0x64 - strb r1, [r0] - movs r0, 0x11 - bl PutWindowTilemap -_0804E6EE: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0804E6F4: .4byte gUnknown_2031DA8 -_0804E6F8: .4byte 0x0000bbcc - thumb_func_end sub_804E674 - - thumb_func_start sub_804E6FC -sub_804E6FC: @ 804E6FC - push {r4-r6,lr} - movs r5, 0 - ldr r0, _0804E740 @ =gUnknown_2031DA8 - ldr r0, [r0] - adds r0, 0x37 - ldrb r0, [r0] - subs r0, 0x4 - cmp r5, r0 - bge _0804E738 - movs r6, 0xC0 - lsls r6, 20 -_0804E712: - lsrs r4, r6, 24 - adds r0, r4, 0 - bl PutWindowTilemap - adds r0, r4, 0 - movs r1, 0x1 - bl CopyWindowToVram - movs r0, 0x80 - lsls r0, 17 - adds r6, r0 - adds r5, 0x1 - ldr r0, _0804E740 @ =gUnknown_2031DA8 - ldr r0, [r0] - adds r0, 0x37 - ldrb r0, [r0] - subs r0, 0x4 - cmp r5, r0 - blt _0804E712 -_0804E738: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0804E740: .4byte gUnknown_2031DA8 - thumb_func_end sub_804E6FC - - thumb_func_start sub_804E744 -sub_804E744: @ 804E744 - push {r4,r5,lr} - bl Menu_ProcessInputNoWrapClearOnChoose - lsls r0, 24 - asrs r5, r0, 24 - cmp r5, 0 - beq _0804E766 - cmp r5, 0 - bgt _0804E760 - movs r0, 0x1 - negs r0, r0 - cmp r5, r0 - beq _0804E7B8 - b _0804E7C2 -_0804E760: - cmp r5, 0x1 - beq _0804E7B8 - b _0804E7C2 -_0804E766: - movs r0, 0x4 - bl sub_804F5BC - ldr r4, _0804E7AC @ =gUnknown_2031DA8 - ldr r0, [r4] - adds r2, r0, 0 - adds r2, 0x80 - ldr r1, _0804E7B0 @ =0x0000eeaa - strh r1, [r2] - adds r0, 0x82 - strh r5, [r0] - movs r0, 0x5 - movs r1, 0 - bl sub_804F488 - ldr r2, _0804E7B4 @ =gSprites - ldr r0, [r4] - adds r0, 0x34 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - adds r0, 0x3E - ldrb r1, [r0] - movs r2, 0x4 - orrs r1, r2 - strb r1, [r0] - ldr r0, [r4] - adds r0, 0x6F - movs r1, 0x64 - strb r1, [r0] - bl sub_804E6FC - b _0804E7C2 - .align 2, 0 -_0804E7AC: .4byte gUnknown_2031DA8 -_0804E7B0: .4byte 0x0000eeaa -_0804E7B4: .4byte gSprites -_0804E7B8: - movs r0, 0x5 - bl PlaySE - bl sub_804E330 -_0804E7C2: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_804E744 - - thumb_func_start sub_804E7C8 -sub_804E7C8: @ 804E7C8 - push {r4,lr} - bl GetMultiplayerId - lsls r0, 24 - cmp r0, 0 - bne _0804E7F0 - movs r0, 0 - bl rbox_fill_rectangle - ldr r4, _0804E800 @ =gUnknown_2031DA8 - ldr r0, [r4] - adds r0, 0x35 - ldrb r0, [r0] - bl sub_804EAAC - ldr r0, [r4] - adds r0, 0x7E - ldrb r0, [r0] - bl sub_804EAAC -_0804E7F0: - ldr r0, _0804E800 @ =gUnknown_2031DA8 - ldr r0, [r0] - adds r0, 0x6F - movs r1, 0x7 - strb r1, [r0] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0804E800: .4byte gUnknown_2031DA8 - thumb_func_end sub_804E7C8 - - thumb_func_start sub_804E804 -sub_804E804: @ 804E804 - push {r4,lr} - ldr r4, _0804E828 @ =gUnknown_2031DA8 - ldr r0, [r4] - adds r0, 0x74 - ldrh r1, [r0] - ldr r0, _0804E82C @ =0x00000505 - cmp r1, r0 - bne _0804E820 - bl sub_804DBAC - ldr r0, [r4] - adds r0, 0x6F - movs r1, 0xE - strb r1, [r0] -_0804E820: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0804E828: .4byte gUnknown_2031DA8 -_0804E82C: .4byte 0x00000505 - thumb_func_end sub_804E804 - - thumb_func_start sub_804E830 -sub_804E830: @ 804E830 - push {r4,r5,lr} - sub sp, 0xC - ldr r4, _0804E878 @ =gUnknown_2031DA8 - ldr r1, [r4] - adds r1, 0xA8 - ldrb r0, [r1] - adds r0, 0x1 - movs r5, 0 - strb r0, [r1] - ldr r0, [r4] - adds r0, 0xA8 - ldrb r0, [r0] - cmp r0, 0x78 - bls _0804E870 - ldr r0, _0804E87C @ =gUnknown_8261FC4 - movs r1, 0x1 - str r1, [sp] - movs r1, 0xE - str r1, [sp, 0x4] - str r5, [sp, 0x8] - movs r1, 0x3 - movs r2, 0 - movs r3, 0x2 - bl CreateYesNoMenu - ldr r0, [r4] - adds r0, 0xA8 - strb r5, [r0] - ldr r0, [r4] - adds r0, 0x6F - movs r1, 0x3 - strb r1, [r0] -_0804E870: - add sp, 0xC - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0804E878: .4byte gUnknown_2031DA8 -_0804E87C: .4byte gUnknown_8261FC4 - thumb_func_end sub_804E830 - - thumb_func_start sub_804E880 -sub_804E880: @ 804E880 - push {r4-r6,lr} - ldr r0, _0804E8FC @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _0804E8F4 - movs r0, 0x5 - bl PlaySE - movs r0, 0 - bl rbox_fill_rectangle - movs r0, 0x1 - bl rbox_fill_rectangle - movs r6, 0 - movs r5, 0xE0 - lsls r5, 20 -_0804E8A6: - lsrs r4, r5, 24 - adds r0, r4, 0 - movs r1, 0 - bl FillWindowPixelBuffer - adds r0, r4, 0 - bl rbox_fill_rectangle - movs r0, 0x80 - lsls r0, 17 - adds r5, r0 - adds r6, 0x1 - cmp r6, 0x3 - ble _0804E8A6 - movs r0, 0 - bl sub_804F3C8 - movs r0, 0x1 - bl sub_804F3C8 - ldr r2, _0804E900 @ =gUnknown_2031DA8 - ldr r0, [r2] - adds r0, 0x6F - movs r1, 0 - strb r1, [r0] - ldr r3, _0804E904 @ =gSprites - ldr r0, [r2] - adds r0, 0x34 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r3 - adds r0, 0x3E - ldrb r2, [r0] - movs r1, 0x5 - negs r1, r1 - ands r1, r2 - strb r1, [r0] -_0804E8F4: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0804E8FC: .4byte gMain -_0804E900: .4byte gUnknown_2031DA8 -_0804E904: .4byte gSprites - thumb_func_end sub_804E880 - - thumb_func_start sub_804E908 -sub_804E908: @ 804E908 - push {lr} - ldr r0, _0804E924 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _0804E93C - ldr r0, _0804E928 @ =gWirelessCommType - ldrb r0, [r0] - cmp r0, 0 - beq _0804E92C - bl sub_800AB9C - b _0804E932 - .align 2, 0 -_0804E924: .4byte gPaletteFade -_0804E928: .4byte gWirelessCommType -_0804E92C: - movs r0, 0xC - bl sub_800AA80 -_0804E932: - ldr r0, _0804E940 @ =gUnknown_2031DA8 - ldr r0, [r0] - adds r0, 0x6F - movs r1, 0xC - strb r1, [r0] -_0804E93C: - pop {r0} - bx r0 - .align 2, 0 -_0804E940: .4byte gUnknown_2031DA8 - thumb_func_end sub_804E908 - - thumb_func_start sub_804E944 -sub_804E944: @ 804E944 - push {lr} - ldr r0, _0804E978 @ =gWirelessCommType - ldrb r0, [r0] - cmp r0, 0 - beq _0804E988 - bl IsLinkTaskFinished - lsls r0, 24 - cmp r0, 0 - beq _0804E9AA - ldr r0, _0804E97C @ =gUnknown_2031C90 - ldr r0, [r0] - bl Free - ldr r0, _0804E980 @ =gUnknown_2031DA8 - ldr r0, [r0] - bl Free - bl FreeAllWindowBuffers - bl DestroyWirelessStatusIndicatorSprite - ldr r0, _0804E984 @ =c2_8056854 - bl SetMainCallback2 - b _0804E9AA - .align 2, 0 -_0804E978: .4byte gWirelessCommType -_0804E97C: .4byte gUnknown_2031C90 -_0804E980: .4byte gUnknown_2031DA8 -_0804E984: .4byte c2_8056854 -_0804E988: - ldr r0, _0804E9B0 @ =gReceivedRemoteLinkPlayers - ldrb r0, [r0] - cmp r0, 0 - bne _0804E9AA - ldr r0, _0804E9B4 @ =gUnknown_2031C90 - ldr r0, [r0] - bl Free - ldr r0, _0804E9B8 @ =gUnknown_2031DA8 - ldr r0, [r0] - bl Free - bl FreeAllWindowBuffers - ldr r0, _0804E9BC @ =c2_8056854 - bl SetMainCallback2 -_0804E9AA: - pop {r0} - bx r0 - .align 2, 0 -_0804E9B0: .4byte gReceivedRemoteLinkPlayers -_0804E9B4: .4byte gUnknown_2031C90 -_0804E9B8: .4byte gUnknown_2031DA8 -_0804E9BC: .4byte c2_8056854 - thumb_func_end sub_804E944 - thumb_func_start sub_804E9C0 sub_804E9C0: @ 804E9C0 push {lr} diff --git a/include/overworld.h b/include/overworld.h index 805ddc8a0..2e591a599 100644 --- a/include/overworld.h +++ b/include/overworld.h @@ -142,5 +142,6 @@ bool32 sub_8058318(void); void CB2_ReturnToStartMenu(void); void CB2_WhiteOut(void); +void c2_8056854(void); #endif //GUARD_OVERWORLD_H diff --git a/include/pokemon_summary_screen.h b/include/pokemon_summary_screen.h index 90a67205c..b800e3d30 100644 --- a/include/pokemon_summary_screen.h +++ b/include/pokemon_summary_screen.h @@ -8,7 +8,6 @@ extern u8 gLastViewedMonIndex; extern const u8 *const gMoveDescriptionPointers[]; extern const u8 *const gNatureNamePointers[]; -void ShowPokemonSummaryScreen(u8 mode, void *mons, u8 monIndex, u8 maxMonIndex, void (*callback)(void)); void ShowSelectMovePokemonSummaryScreen(struct Pokemon *, u8, u8, MainCallback, u16); void ShowPokemonSummaryScreenSet40EF(u8 mode, struct BoxPokemon *mons, u8 monIndex, u8 maxMonIndex, void (*callback)(void)); u8 sub_8138B2C(void); @@ -34,5 +33,6 @@ enum PokemonSummaryScreenPage }; s32 sub_8138B20(void); +void ShowPokemonSummaryScreen(struct Pokemon * party, u8 cursorPos, u8 lastIdx, void (*callback)(void), u8 a4); #endif // GUARD_POKEMON_SUMMARY_SCREEN_H diff --git a/include/strings.h b/include/strings.h index 9304b225d..43043b537 100644 --- a/include/strings.h +++ b/include/strings.h @@ -660,4 +660,7 @@ extern const u8 gText_FiveIsland[]; extern const u8 gText_SixIsland[]; extern const u8 gText_SevenIsland[]; +// trade +extern const u8 gUnknown_841E0A5[]; + #endif //GUARD_STRINGS_H diff --git a/src/random.c b/src/random.c index 54dae0824..f6c49971d 100644 --- a/src/random.c +++ b/src/random.c @@ -8,11 +8,11 @@ u32 gRngValue; u16 Random(void) { - gRngValue = 1103515245 * gRngValue + 24691; - return gRngValue >> 16; + gRngValue = 1103515245 * gRngValue + 24691; + return gRngValue >> 16; } void SeedRng(u16 seed) { - gRngValue = seed; + gRngValue = seed; } diff --git a/src/trade.c b/src/trade.c index 42c2792ff..7c77556db 100644 --- a/src/trade.c +++ b/src/trade.c @@ -16,6 +16,9 @@ #include "data.h" #include "sound.h" #include "string_util.h" +#include "strings.h" +#include "menu.h" +#include "overworld.h" #include "party_menu.h" #include "pokemon_summary_screen.h" #include "pokemon_storage_system.h" @@ -79,12 +82,16 @@ void sub_804D4F8(void); void sub_804D638(void); void sub_804D694(u8 state); void sub_804D764(void); +u8 shedinja_maker_maybe(void); void sub_804DFF0(void); void sub_804E9E4(void); +void sub_804EAAC(u8 a0); void sub_804EAE4(u8 side); -u8 shedinja_maker_maybe(void); void sub_804F020(u8 side); void sub_804F284(u8 side); +void sub_804F3B4(void); +void sub_804F3C8(u8 a0); +void sub_804F488(u16 a0, u8 a1); void sub_804F4DC(void); void sub_804F5BC(u8 str_idx); bool8 sub_804F610(void); @@ -93,6 +100,7 @@ void sub_804F748(u8 side); void sub_804F890(u8 side); void sub_804F964(void); void sub_804F9D8(void); +u32 sub_804FA14(struct Pokemon * party, u8 partyCount, u8 cursorPos); void LoadHeldItemIcons(void); void sub_8050138(void); @@ -106,6 +114,7 @@ extern const u8 gTradeUnknownSpriteCoords[][4]; extern const struct SpriteTemplate gUnknown_8261CB0; extern const struct SpriteTemplate gUnknown_8261CC8; extern const u8 gJPText_Shedinja[]; +extern const u8 gUnknown_8261D08[][4][6]; void sub_804C600(void) { @@ -2513,3 +2522,563 @@ bool8 shedinja_maker_maybe(void) } return FALSE; } + +void sub_804DBAC(void) +{ + sub_804F728(gUnknown_841E0A5, (u8 *)OBJ_VRAM0 + gUnknown_2031DA8->unk_72 * 32, 0x18); +} + +void sub_804DBD4(u8 a0, u8 a1) +{ + if (a1 & 1) + { + switch (gBlockRecvBuffer[0][0]) + { + case 0xEEAA: + gUnknown_2031DA8->unk_78 = 2; + break; + case 0xAABB: + gUnknown_2031DA8->unk_78 = 1; + break; + case 0xBBBB: + gUnknown_2031DA8->unk_7A = 1; + break; + case 0xBBCC: + gUnknown_2031DA8->unk_7A = 2; + break; + } + ResetBlockReceivedFlag(0); + } + + if (a1 & 2) + { + switch (gBlockRecvBuffer[1][0]) + { + case 0xEEAA: + gUnknown_2031DA8->unk_79 = 2; + break; + case 0xAABB: + gUnknown_2031DA8->unk_7E = gBlockRecvBuffer[1][1] + 6; + gUnknown_2031DA8->unk_79 = 1; + break; + case 0xBBBB: + gUnknown_2031DA8->unk_7B = 1; + break; + case 0xBBCC: + gUnknown_2031DA8->unk_7B = 2; + break; + } + ResetBlockReceivedFlag(1); + } +} + +void sub_804DCF4(u8 a0, u8 a1) +{ + if (a1 & 1) + { + switch (gBlockRecvBuffer[0][0]) + { + case 0xEEBB: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + sub_804F5BC(4); + gUnknown_2031DA8->unk_6F = 11; + break; + case 0xEECC: + sub_804F5BC(5); + gUnknown_2031DA8->unk_6F = 8; + break; + case 0xDDDD: + gUnknown_2031DA8->unk_7E = gBlockRecvBuffer[0][1] + 6; + rbox_fill_rectangle(0); + sub_804EAAC(gUnknown_2031DA8->tradeMenuCursorPosition); + sub_804EAAC(gUnknown_2031DA8->unk_7E); + gUnknown_2031DA8->unk_6F = 7; + break; + case 0xCCDD: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + gUnknown_2031DA8->unk_6F = 10; + break; + case 0xDDEE: + sub_804F5BC(1); + gUnknown_2031DA8->unk_6F = 8; + } + ResetBlockReceivedFlag(0); + } + + if (a1 & 2) + ResetBlockReceivedFlag(1); +} + +void sub_804DDF0(void) +{ + if (gUnknown_2031DA8->unk_78 && gUnknown_2031DA8->unk_79) + { + if (gUnknown_2031DA8->unk_78 == 1 && gUnknown_2031DA8->unk_79 == 1) + { + gUnknown_2031DA8->unk_6F = 6; + gUnknown_2031DA8->linkData[0] = 0xDDDD; + gUnknown_2031DA8->linkData[1] = gUnknown_2031DA8->tradeMenuCursorPosition; + sub_804F488(5, 0); + gUnknown_2031DA8->unk_78 = gUnknown_2031DA8->unk_79 = 0; + } + else if (gUnknown_2031DA8->unk_78 == 1 && gUnknown_2031DA8->unk_79 == 2) + { + sub_804F5BC(1); + gUnknown_2031DA8->linkData[0] = 0xEECC; + gUnknown_2031DA8->linkData[1] = 0; + sub_804F488(5, 0); + gUnknown_2031DA8->unk_7A = gUnknown_2031DA8->unk_7B = 0; + gUnknown_2031DA8->unk_78 = gUnknown_2031DA8->unk_79 = 0; + gUnknown_2031DA8->unk_6F = 8; + } + else if (gUnknown_2031DA8->unk_78 == 2 && gUnknown_2031DA8->unk_79 == 1) + { + sub_804F5BC(5); + gUnknown_2031DA8->linkData[0] = 0xDDEE; + gUnknown_2031DA8->linkData[1] = 0; + sub_804F488(5, 0); + gUnknown_2031DA8->unk_7A = gUnknown_2031DA8->unk_7B = 0; + gUnknown_2031DA8->unk_78 = gUnknown_2031DA8->unk_79 = 0; + gUnknown_2031DA8->unk_6F = 8; + } + else if (gUnknown_2031DA8->unk_78 == 2 && gUnknown_2031DA8->unk_79 == 2) + { + gUnknown_2031DA8->linkData[0] = 0xEEBB; + gUnknown_2031DA8->linkData[1] = 0; + sub_804F488(5, 0); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + gUnknown_2031DA8->unk_78 = gUnknown_2031DA8->unk_79 = 0; + gUnknown_2031DA8->unk_6F = 11; + } + } + + if (gUnknown_2031DA8->unk_7A && gUnknown_2031DA8->unk_7B) + { + if (gUnknown_2031DA8->unk_7A == 1 && gUnknown_2031DA8->unk_7B == 1) + { + gUnknown_2031DA8->linkData[0] = 0xCCDD; + gUnknown_2031DA8->linkData[1] = 0; + sub_804F488(5, 0); + gUnknown_2031DA8->unk_7A = 0; + gUnknown_2031DA8->unk_7B = 0; + gUnknown_2031DA8->unk_6F = 9; + } + + if (gUnknown_2031DA8->unk_7A == 2 || gUnknown_2031DA8->unk_7B == 2) + { + sub_804F5BC(1); + gUnknown_2031DA8->linkData[0] = 0xDDEE; + gUnknown_2031DA8->linkData[1] = 0; + sub_804F488(5, 0); + gUnknown_2031DA8->unk_7A = 0; + gUnknown_2031DA8->unk_7B = 0; + gUnknown_2031DA8->unk_6F = 8; + } + } +} + +void sub_804DFF0(void) +{ + u8 mpId = GetMultiplayerId(); + u8 status; + if ((status = GetBlockReceivedStatus())) + { + if (mpId == 0) + sub_804DBD4(0, status); + else + sub_804DCF4(mpId, status); + } + if (mpId == 0) + sub_804DDF0(); +} + +u8 sub_804E028(u8 oldPosition, u8 direction) +{ + int i; + u8 newPosition = 0; + + for (i = 0; i < PARTY_SIZE; i++) + { + if (gUnknown_2031DA8->tradeMenuOptionsActive[gUnknown_8261D08[oldPosition][direction][i]] == TRUE) + { + newPosition = gUnknown_8261D08[oldPosition][direction][i]; + break; + } + } + + return newPosition; +} + + +void TradeMenuMoveCursor(u8 *tradeMenuCursorPosition, u8 direction) +{ + u8 newPosition = sub_804E028(*tradeMenuCursorPosition, direction); + + if (newPosition == 12) // CANCEL + { + StartSpriteAnim(&gSprites[gUnknown_2031DA8->tradeMenuCursorSpriteIdx], 1); + gSprites[gUnknown_2031DA8->tradeMenuCursorSpriteIdx].pos1.x = 224; + gSprites[gUnknown_2031DA8->tradeMenuCursorSpriteIdx].pos1.y = 160; + } + else + { + StartSpriteAnim(&gSprites[gUnknown_2031DA8->tradeMenuCursorSpriteIdx], 0); + gSprites[gUnknown_2031DA8->tradeMenuCursorSpriteIdx].pos1.x = gTradeMonSpriteCoords[newPosition][0] * 8 + 32; + gSprites[gUnknown_2031DA8->tradeMenuCursorSpriteIdx].pos1.y = gTradeMonSpriteCoords[newPosition][1] * 8; + } + + if (*tradeMenuCursorPosition != newPosition) + { + PlaySE(SE_SELECT); + } + + *tradeMenuCursorPosition = newPosition; +} + +void sub_804E134(void) +{ + sub_804F5BC(0); + gUnknown_2031DA8->unk_6F = 5; + + if (GetMultiplayerId() == 1) + { + gUnknown_2031DA8->linkData[0] = 0xAABB; + gUnknown_2031DA8->linkData[1] = gUnknown_2031DA8->tradeMenuCursorPosition; + SendBlock(bitmask_all_link_players_but_self(), gUnknown_2031DA8->linkData, 0x14); + } + else + { + gUnknown_2031DA8->unk_78 = 1; + } +} + +extern const struct MenuAction gUnknown_8261EE4[]; +extern const struct WindowTemplate gUnknown_8261FC4; + +void sub_804E194(void) +{ + int i; + + if (JOY_REPT(DPAD_UP)) + { + TradeMenuMoveCursor(&gUnknown_2031DA8->tradeMenuCursorPosition, 0); + } + else if (JOY_REPT(DPAD_DOWN)) + { + TradeMenuMoveCursor(&gUnknown_2031DA8->tradeMenuCursorPosition, 1); + } + else if (JOY_REPT(DPAD_LEFT)) + { + TradeMenuMoveCursor(&gUnknown_2031DA8->tradeMenuCursorPosition, 2); + } + else if (JOY_REPT(DPAD_RIGHT)) + { + TradeMenuMoveCursor(&gUnknown_2031DA8->tradeMenuCursorPosition, 3); + } + + if (JOY_NEW(A_BUTTON)) + { + PlaySE(SE_SELECT); + + if (gUnknown_2031DA8->tradeMenuCursorPosition < 6) // PlayerParty + { + DrawTextBorderOuter(1, 1, 14); + FillWindowPixelBuffer(1, PIXEL_FILL(1)); + UnionRoomAndTradeMenuPrintOptions(1, 3, 16, 2, gUnknown_8261EE4); + Menu_InitCursor(1, 3, 0, 0, 16, 2, 0); + PutWindowTilemap(1); + CopyWindowToVram(1, 3); + gUnknown_2031DA8->unk_6F = 1; + } + else if (gUnknown_2031DA8->tradeMenuCursorPosition < 12) + { + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + gUnknown_2031DA8->unk_6F = 2; + } + else if (gUnknown_2031DA8->tradeMenuCursorPosition == 12) + { + CreateYesNoMenu(&gUnknown_8261FC4, 3, 0, 2, 0x001, 14, 0); + gUnknown_2031DA8->unk_6F = 4; + sub_804F728(gUnknown_8261ECC[4], (void *)OBJ_VRAM0 + gUnknown_2031DA8->unk_72 * 32, 24); + } + } + if (JOY_NEW(R_BUTTON)) + { + for (i = 0; i < 10; i++) + gUnknown_2031DA8->linkData[i] = i; + SendBlock(bitmask_all_link_players_but_self(), gUnknown_2031DA8->linkData, 20); + } +} + +void sub_804E330(void) +{ + sub_804F3B4(); + gUnknown_2031DA8->unk_6F = 0; + gSprites[gUnknown_2031DA8->tradeMenuCursorSpriteIdx].invisible = FALSE; + sub_804F728(gUnknown_8261ECC[1], (void *)OBJ_VRAM0 + gUnknown_2031DA8->unk_72 * 32, 24); +} + +void sub_804E388(void) +{ + switch (Menu_ProcessInputNoWrapAround()) + { + case MENU_B_PRESSED: + PlaySE(SE_SELECT); + sub_804E330(); + break; + case MENU_NOTHING_CHOSEN: + break; + case 0: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + gUnknown_2031DA8->unk_6F = 2; + break; + case 1: + switch (sub_804FA14(gPlayerParty, gPlayerPartyCount, gUnknown_2031DA8->tradeMenuCursorPosition)) + { + case 0: + sub_804E134(); + gSprites[gUnknown_2031DA8->tradeMenuCursorSpriteIdx].invisible = TRUE; + break; + case 1: + sub_804F488(3, 3); + gUnknown_2031DA8->unk_6F = 8; + break; + case 2: + case 4: + sub_804F488(3, 6); + gUnknown_2031DA8->unk_6F = 8; + break; + case 3: + case 5: + sub_804F488(3, 7); + gUnknown_2031DA8->unk_6F = 8; + break; + } + break; + } +} + +void sub_804E46C(void) +{ + if (JOY_NEW(A_BUTTON) || JOY_NEW(B_BUTTON)) + { + PlaySE(SE_SELECT); + sub_804E330(); + } +} + +void sub_804E494(void) +{ + if (!gPaletteFade.active) + { + if (gUnknown_2031DA8->tradeMenuCursorPosition < 6) + ShowPokemonSummaryScreen(gPlayerParty, gUnknown_2031DA8->tradeMenuCursorPosition, gUnknown_2031DA8->partyCounts[0] - 1, sub_804CF14, 4); + else + ShowPokemonSummaryScreen(gEnemyParty, gUnknown_2031DA8->tradeMenuCursorPosition - 6, gUnknown_2031DA8->partyCounts[1] - 1, sub_804CF14, 4); + FreeAllWindowBuffers(); + } +} + +u8 sub_804E50C(u8 *a0, u8 a1, u8 a2) +{ + s32 i; + u16 species; + u8 r4 = 0; + for (i = 0; i < a1; i++) + { + if (a2 != i) + r4 += a0[i]; + } + species = GetMonData(&gEnemyParty[gUnknown_2031DA8->unk_7E % 6], MON_DATA_SPECIES); + if ((species == SPECIES_DEOXYS || species == SPECIES_MEW) && !GetMonData(&gEnemyParty[gUnknown_2031DA8->unk_7E % 6], MON_DATA_OBEDIENCE)) + return 2; + if (r4 != 0) + r4 = 1; + return r4; +} + +void sub_804E5A0(void) +{ + int i; + u8 arr[12]; + + for (i = 0; i < gUnknown_2031DA8->partyCounts[0]; i++) + { + arr[i] = gUnknown_2031DA8->unk_45[0][i]; + } + + switch (sub_804E50C(arr, gUnknown_2031DA8->partyCounts[0], gUnknown_2031DA8->tradeMenuCursorPosition)) + { + case 0: + sub_804F488(3, 3); + gUnknown_2031DA8->linkData[0] = 0xBBCC; + sub_804F488(0xB4, 0); + break; + case 1: + sub_804F488(3, 1); + gUnknown_2031DA8->linkData[0] = 0xBBBB; + if (IsLinkTaskFinished()) + { + SendBlock(bitmask_all_link_players_but_self(), gUnknown_2031DA8->linkData, 20); + } + break; + case 2: + sub_804F488(3, 8); + gUnknown_2031DA8->linkData[0] = 0xBBCC; + sub_804F488(0xB4, 0); + break; + } +} + +void sub_804E674(void) +{ + switch (Menu_ProcessInputNoWrapClearOnChoose()) + { + case 0: + sub_804E5A0(); + gUnknown_2031DA8->unk_6F = 100; + PutWindowTilemap(17); + break; + case 1: + case MENU_B_PRESSED: + sub_804F488(3, 1); + if (IsLinkTaskFinished()) + { + gUnknown_2031DA8->linkData[0] = 0xBBCC; + SendBlock(bitmask_all_link_players_but_self(), gUnknown_2031DA8->linkData, 20); + } + gUnknown_2031DA8->unk_6F = 100; + PutWindowTilemap(17); + break; + } +} + +void sub_804E6FC(void) +{ + int i; + + for (i = 0; i < gUnknown_2031DA8->partyCounts[1] - 4; i++) + { + PutWindowTilemap(i + 12); + CopyWindowToVram(i + 12, 1); + } +} + +void sub_804E744(void) +{ + switch (Menu_ProcessInputNoWrapClearOnChoose()) + { + case 0: + sub_804F5BC(4); + gUnknown_2031DA8->linkData[0] = 0xEEAA; + gUnknown_2031DA8->linkData[1] = 0; + sub_804F488(5, 0); + gSprites[gUnknown_2031DA8->tradeMenuCursorSpriteIdx].invisible = TRUE; + gUnknown_2031DA8->unk_6F = 100; + sub_804E6FC(); + break; + case 1: + case MENU_B_PRESSED: + PlaySE(SE_SELECT); + sub_804E330(); + break; + } +} + +void sub_804E7C8(void) +{ + if (GetMultiplayerId() == 0) + { + rbox_fill_rectangle(0); + sub_804EAAC(gUnknown_2031DA8->tradeMenuCursorPosition); + sub_804EAAC(gUnknown_2031DA8->unk_7E); + } + gUnknown_2031DA8->unk_6F = 7; +} + +void sub_804E804(void) +{ + if (gUnknown_2031DA8->unk_74[0] == 5 && gUnknown_2031DA8->unk_74[1] == 5) + { + sub_804DBAC(); + gUnknown_2031DA8->unk_6F = 14; + } +} + +void sub_804E830(void) +{ + gUnknown_2031DA8->unk_A8++; + + if (gUnknown_2031DA8->unk_A8 > 120) + { + CreateYesNoMenu(&gUnknown_8261FC4, 3, 0, 2, 1, 14, 0); + gUnknown_2031DA8->unk_A8 = 0; + gUnknown_2031DA8->unk_6F = 3; + } +} + +void sub_804E880(void) +{ + int i; + + if (gMain.newKeys & A_BUTTON) + { + PlaySE(SE_SELECT); + rbox_fill_rectangle(0); + rbox_fill_rectangle(1); + + for (i = 0; i < 4; i++) + { + FillWindowPixelBuffer(i + 14, PIXEL_FILL(0)); + rbox_fill_rectangle(i + 14); + } + + sub_804F3C8(0); + sub_804F3C8(1); + gUnknown_2031DA8->unk_6F = 0; + gSprites[gUnknown_2031DA8->tradeMenuCursorSpriteIdx].invisible = FALSE; + } +} + +void sub_804E908(void) +{ + if (!gPaletteFade.active) + { + if (gWirelessCommType) + { + sub_800AB9C(); + } + else + { + sub_800AA80(12); + } + + gUnknown_2031DA8->unk_6F = 12; + } +} + +void sub_804E944(void) +{ + if (gWirelessCommType) + { + if (IsLinkTaskFinished()) + { + Free(gUnknown_2031C90); + Free(gUnknown_2031DA8); + FreeAllWindowBuffers(); + DestroyWirelessStatusIndicatorSprite(); + SetMainCallback2(c2_8056854); + } + } + else + { + if (!gReceivedRemoteLinkPlayers) + { + Free(gUnknown_2031C90); + Free(gUnknown_2031DA8); + FreeAllWindowBuffers(); + SetMainCallback2(c2_8056854); + } + } +} + -- cgit v1.2.3 From 4e296b8777eae2a824bf6511aa51d3b78b2e39dc Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 28 Oct 2019 16:31:59 -0400 Subject: trade through sub_804EED4 --- asm/trade.s | 746 +---------------------------------------------------------- data/trade.s | 4 +- src/trade.c | 206 +++++++++++++++++ 3 files changed, 210 insertions(+), 746 deletions(-) diff --git a/asm/trade.s b/asm/trade.s index fe750b735..b77be0074 100644 --- a/asm/trade.s +++ b/asm/trade.s @@ -5,748 +5,6 @@ .text - thumb_func_start sub_804E9C0 -sub_804E9C0: @ 804E9C0 - push {lr} - movs r0, 0 - bl sub_80FA484 - lsls r0, 24 - cmp r0, 0 - bne _0804E9DC - bl sub_800AB9C - ldr r0, _0804E9E0 @ =gUnknown_2031DA8 - ldr r0, [r0] - adds r0, 0x6F - movs r1, 0xD - strb r1, [r0] -_0804E9DC: - pop {r0} - bx r0 - .align 2, 0 -_0804E9E0: .4byte gUnknown_2031DA8 - thumb_func_end sub_804E9C0 - - thumb_func_start sub_804E9E4 -sub_804E9E4: @ 804E9E4 - push {lr} - ldr r0, _0804E9FC @ =gUnknown_2031DA8 - ldr r0, [r0] - adds r0, 0x6F - ldrb r0, [r0] - cmp r0, 0x10 - bhi _0804EAA6 - lsls r0, 2 - ldr r1, _0804EA00 @ =_0804EA04 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0804E9FC: .4byte gUnknown_2031DA8 -_0804EA00: .4byte _0804EA04 - .align 2, 0 -_0804EA04: - .4byte _0804EA48 - .4byte _0804EA4E - .4byte _0804EA54 - .4byte _0804EA5A - .4byte _0804EA60 - .4byte _0804EAA6 - .4byte _0804EA66 - .4byte _0804EA6C - .4byte _0804EA72 - .4byte _0804EA78 - .4byte _0804EA7E - .4byte _0804EA84 - .4byte _0804EA8A - .4byte _0804EA90 - .4byte _0804EA96 - .4byte _0804EA9C - .4byte _0804EAA2 -_0804EA48: - bl sub_804E194 - b _0804EAA6 -_0804EA4E: - bl sub_804E388 - b _0804EAA6 -_0804EA54: - bl sub_804E494 - b _0804EAA6 -_0804EA5A: - bl sub_804E674 - b _0804EAA6 -_0804EA60: - bl sub_804E744 - b _0804EAA6 -_0804EA66: - bl sub_804E7C8 - b _0804EAA6 -_0804EA6C: - bl sub_804E804 - b _0804EAA6 -_0804EA72: - bl sub_804E880 - b _0804EAA6 -_0804EA78: - bl sub_804D50C - b _0804EAA6 -_0804EA7E: - bl sub_804D548 - b _0804EAA6 -_0804EA84: - bl sub_804E908 - b _0804EAA6 -_0804EA8A: - bl sub_804E944 - b _0804EAA6 -_0804EA90: - bl sub_804D5A4 - b _0804EAA6 -_0804EA96: - bl sub_804E830 - b _0804EAA6 -_0804EA9C: - bl sub_804E46C - b _0804EAA6 -_0804EAA2: - bl sub_804E9C0 -_0804EAA6: - pop {r0} - bx r0 - thumb_func_end sub_804E9E4 - - thumb_func_start sub_804EAAC -sub_804EAAC: @ 804EAAC - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - adds r0, r4, 0 - movs r1, 0x6 - bl __udivsi3 - lsls r0, 24 - lsrs r2, r0, 24 - ldr r3, _0804EAE0 @ =gUnknown_2031DA8 - ldr r0, [r3] - adds r0, 0x74 - adds r1, r0, r2 - ldrb r0, [r1] - cmp r0, 0 - bne _0804EAD8 - movs r0, 0x1 - strb r0, [r1] - ldr r0, [r3] - adds r0, 0x76 - adds r0, r2 - strb r4, [r0] -_0804EAD8: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0804EAE0: .4byte gUnknown_2031DA8 - thumb_func_end sub_804EAAC - - thumb_func_start sub_804EAE4 -sub_804EAE4: @ 804EAE4 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x68 - lsls r0, 24 - lsrs r7, r0, 24 - ldr r0, _0804EB34 @ =gUnknown_2031DA8 - ldr r4, [r0] - adds r0, r4, 0 - adds r0, 0x76 - adds r0, r7 - ldrb r0, [r0] - movs r1, 0x1 - str r1, [sp, 0x60] - cmp r0, 0x5 - bhi _0804EB0C - movs r2, 0 - str r2, [sp, 0x60] -_0804EB0C: - movs r1, 0x6 - bl __umodsi3 - lsls r0, 24 - lsrs r0, 24 - mov r10, r0 - movs r0, 0 - mov r8, r0 - adds r0, r4, 0 - adds r0, 0x74 - adds r3, r0, r7 - ldrb r0, [r3] - cmp r0, 0x2 - bne _0804EB2A - b _0804ECB4 -_0804EB2A: - cmp r0, 0x2 - bgt _0804EB38 - cmp r0, 0x1 - beq _0804EB46 - b _0804EE54 - .align 2, 0 -_0804EB34: .4byte gUnknown_2031DA8 -_0804EB38: - cmp r0, 0x3 - bne _0804EB3E - b _0804ECEC -_0804EB3E: - cmp r0, 0x4 - bne _0804EB44 - b _0804EE1C -_0804EB44: - b _0804EE54 -_0804EB46: - movs r5, 0 - adds r0, r4, 0 - adds r0, 0x36 - adds r0, r7 - ldr r1, [sp, 0x60] - lsls r1, 1 - mov r9, r1 - lsls r6, r7, 1 - lsls r2, r7, 4 - str r2, [sp, 0x64] - ldrb r0, [r0] - cmp r8, r0 - bcs _0804EB9A - ldr r0, _0804ECA0 @ =gSprites - mov r8, r0 - ldr r4, _0804ECA4 @ =gUnknown_2031DA8 - ldr r0, [sp, 0x60] - add r0, r9 - lsls r2, r0, 1 - movs r3, 0x4 -_0804EB6E: - ldr r0, [r4] - adds r1, r5, r2 - adds r0, 0x28 - adds r0, r1 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - add r0, r8 - adds r0, 0x3E - ldrb r1, [r0] - orrs r1, r3 - strb r1, [r0] - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - ldr r0, [r4] - adds r0, 0x36 - adds r0, r7 - ldrb r0, [r0] - cmp r5, r0 - bcc _0804EB6E -_0804EB9A: - movs r5, 0 - adds r0, r6, r7 - lsls r0, 1 - adds r4, r0, 0x2 -_0804EBA2: - lsls r0, r5, 24 - asrs r0, 24 - adds r0, r4 - lsls r0, 24 - lsrs r0, 24 - bl ClearWindowTilemap - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0x5 - bls _0804EBA2 - ldr r1, _0804ECA0 @ =gSprites - mov r8, r1 - ldr r2, _0804ECA4 @ =gUnknown_2031DA8 - ldr r0, [r2] - ldr r6, [sp, 0x60] - add r6, r9 - lsls r3, r6, 1 - add r10, r3 - adds r0, 0x28 - add r0, r10 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - add r0, r8 - adds r0, 0x3E - ldrb r2, [r0] - movs r1, 0x5 - negs r1, r1 - ands r1, r2 - strb r1, [r0] - ldr r0, _0804ECA4 @ =gUnknown_2031DA8 - ldr r4, [r0] - adds r4, 0x28 - add r4, r10 - ldrb r1, [r4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - add r0, r8 - movs r1, 0x14 - strh r1, [r0, 0x2E] - ldrb r0, [r4] - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - add r2, r8 - ldr r5, _0804ECA8 @ =gTradeMonSpriteCoords - lsls r6, 2 - adds r0, r6, r5 - ldrb r0, [r0] - adds r3, 0x1 - lsls r3, 1 - adds r3, r5 - ldrb r1, [r3] - adds r0, r1 - asrs r0, 1 - lsls r0, 3 - adds r0, 0xE - strh r0, [r2, 0x32] - ldrb r0, [r4] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - add r1, r8 - adds r5, 0x1 - adds r6, r5 - ldrb r0, [r6] - lsls r0, 3 - subs r0, 0xC - strh r0, [r1, 0x36] - ldrb r1, [r4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - add r0, r8 - ldr r1, _0804ECAC @ =SpriteCB_MonIcon - bl StoreSpriteCallbackInData6 - ldr r2, _0804ECA4 @ =gUnknown_2031DA8 - ldr r1, [r2] - adds r1, 0x74 - adds r1, r7 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - ldr r0, [r2] - adds r0, 0x28 - add r0, r10 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - add r0, r8 - bl sub_8075490 - ldr r1, _0804ECB0 @ =gUnknown_8260A32 - ldr r0, [sp, 0x64] - subs r2, r0, r7 - lsls r2, 24 - lsrs r2, 24 - movs r0, 0xF - str r0, [sp] - movs r0, 0x11 - str r0, [sp, 0x4] - movs r0, 0 - str r0, [sp, 0x8] - movs r0, 0x1 - movs r3, 0 - bl CopyToBgTilemapBufferRect_ChangePalette - movs r0, 0x1 - bl CopyBgTilemapBufferToVram - movs r0, 0 - bl CopyBgTilemapBufferToVram - ldr r1, [sp, 0x60] - cmp r1, 0 - beq _0804EC98 - b _0804EE54 -_0804EC98: - bl sub_804F3B4 - b _0804EE54 - .align 2, 0 -_0804ECA0: .4byte gSprites -_0804ECA4: .4byte gUnknown_2031DA8 -_0804ECA8: .4byte gTradeMonSpriteCoords -_0804ECAC: .4byte SpriteCB_MonIcon -_0804ECB0: .4byte gUnknown_8260A32 -_0804ECB4: - ldr r2, _0804ECE4 @ =gSprites - ldr r1, [sp, 0x60] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 1 - add r0, r10 - adds r1, r4, 0 - adds r1, 0x28 - adds r1, r0 - ldrb r1, [r1] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r2, 0x1C - adds r0, r2 - ldr r1, [r0] - ldr r0, _0804ECE8 @ =SpriteCB_MonIcon - cmp r1, r0 - beq _0804ECDC - b _0804EE54 -_0804ECDC: - movs r0, 0x3 - strb r0, [r3] - b _0804EE54 - .align 2, 0 -_0804ECE4: .4byte gSprites -_0804ECE8: .4byte SpriteCB_MonIcon -_0804ECEC: - ldr r1, _0804EE08 @ =gUnknown_8260834 - ldr r0, [sp, 0x60] - lsls r2, r0, 4 - subs r2, r0 - lsls r2, 24 - lsrs r2, 24 - movs r0, 0xF - str r0, [sp] - movs r0, 0x11 - str r0, [sp, 0x4] - mov r0, r8 - str r0, [sp, 0x8] - movs r0, 0x1 - movs r3, 0 - bl CopyToBgTilemapBufferRect_ChangePalette - movs r0, 0x1 - bl CopyBgTilemapBufferToVram - ldr r6, _0804EE0C @ =gSprites - ldr r1, _0804EE10 @ =gUnknown_2031DA8 - ldr r4, [r1] - ldr r2, [sp, 0x60] - lsls r3, r2, 1 - adds r3, r2 - lsls r1, r3, 1 - mov r2, r10 - adds r0, r2, r1 - adds r4, 0x28 - adds r4, r0 - ldrb r0, [r4] - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - adds r2, r6 - ldr r5, _0804EE14 @ =gTradeMonSpriteCoords - lsls r3, 2 - adds r0, r3, r5 - ldrb r0, [r0] - adds r1, 0x1 - lsls r1, 1 - adds r1, r5 - ldrb r1, [r1] - adds r0, r1 - asrs r0, 1 - lsls r0, 3 - adds r0, 0xE - strh r0, [r2, 0x20] - ldrb r0, [r4] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r6 - adds r5, 0x1 - adds r3, r5 - ldrb r0, [r3] - lsls r0, 3 - subs r0, 0xC - strh r0, [r1, 0x22] - ldrb r1, [r4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r6 - mov r1, r8 - strh r1, [r0, 0x24] - ldrb r1, [r4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r6 - mov r2, r8 - strh r2, [r0, 0x26] - add r0, sp, 0x14 - ldr r1, [sp, 0x60] - mov r2, r10 - bl sub_804EE6C - lsls r4, r7, 1 - adds r5, r4, 0 - adds r5, 0xE - lsls r5, 24 - lsrs r5, 24 - lsls r0, 24 - asrs r0, 24 - movs r2, 0x50 - subs r2, r0 - lsrs r0, r2, 31 - adds r2, r0 - asrs r2, 1 - lsls r2, 24 - lsrs r2, 24 - ldr r0, _0804EE18 @ =gUnknown_8261F18 - mov r8, r0 - str r0, [sp] - movs r1, 0 - str r1, [sp, 0x4] - add r0, sp, 0x14 - str r0, [sp, 0x8] - adds r0, r5, 0 - movs r3, 0x4 - bl AddTextPrinterParameterized3 - add r6, sp, 0x28 - adds r0, r6, 0 - ldr r1, [sp, 0x60] - mov r2, r10 - bl sub_804EED4 - adds r4, 0xF - lsls r4, 24 - lsrs r4, 24 - movs r1, 0 - str r1, [sp] - str r1, [sp, 0x4] - mov r2, r8 - str r2, [sp, 0x8] - str r1, [sp, 0xC] - str r6, [sp, 0x10] - adds r0, r4, 0 - movs r1, 0x1 - movs r2, 0 - movs r3, 0 - bl AddTextPrinterParameterized4 - adds r0, r5, 0 - bl PutWindowTilemap - adds r0, r5, 0 - movs r1, 0x3 - bl CopyWindowToVram - adds r0, r4, 0 - bl PutWindowTilemap - adds r0, r4, 0 - movs r1, 0x3 - bl CopyWindowToVram - ldr r0, _0804EE10 @ =gUnknown_2031DA8 - ldr r1, [r0] - b _0804EE4A - .align 2, 0 -_0804EE08: .4byte gUnknown_8260834 -_0804EE0C: .4byte gSprites -_0804EE10: .4byte gUnknown_2031DA8 -_0804EE14: .4byte gTradeMonSpriteCoords -_0804EE18: .4byte gUnknown_8261F18 -_0804EE1C: - ldr r0, _0804EE64 @ =gUnknown_8262055 - lsls r1, r7, 1 - adds r4, r1, r0 - ldrb r2, [r4] - adds r2, 0x4 - lsls r2, 24 - lsrs r2, 24 - adds r0, 0x1 - adds r1, r0 - ldrb r3, [r1] - adds r3, 0x1 - lsls r3, 24 - lsrs r3, 24 - ldrb r0, [r4] - str r0, [sp] - ldrb r0, [r1] - str r0, [sp, 0x4] - adds r0, r7, 0 - mov r1, r10 - bl sub_804F08C - ldr r2, _0804EE68 @ =gUnknown_2031DA8 - ldr r1, [r2] -_0804EE4A: - adds r1, 0x74 - adds r1, r7 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] -_0804EE54: - add sp, 0x68 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0804EE64: .4byte gUnknown_8262055 -_0804EE68: .4byte gUnknown_2031DA8 - thumb_func_end sub_804EAE4 - - thumb_func_start sub_804EE6C -sub_804EE6C: @ 804EE6C - push {r4,lr} - sub sp, 0xC - adds r4, r0, 0 - lsls r1, 24 - lsls r2, 24 - lsrs r2, 24 - cmp r1, 0 - bne _0804EE94 - movs r0, 0x64 - muls r0, r2 - ldr r1, _0804EE90 @ =gPlayerParty - adds r0, r1 - movs r1, 0x2 - mov r2, sp - bl GetMonData - b _0804EEA4 - .align 2, 0 -_0804EE90: .4byte gPlayerParty -_0804EE94: - movs r0, 0x64 - muls r0, r2 - ldr r1, _0804EED0 @ =gEnemyParty - adds r0, r1 - movs r1, 0x2 - mov r2, sp - bl GetMonData -_0804EEA4: - adds r0, r4, 0 - mov r1, sp - bl StringCopy10 - movs r0, 0 - movs r1, 0x2 - bl GetFontAttribute - adds r2, r0, 0 - lsls r2, 24 - lsrs r2, 24 - movs r0, 0 - adds r1, r4, 0 - bl GetStringWidth - lsls r0, 24 - lsrs r0, 24 - add sp, 0xC - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_0804EED0: .4byte gEnemyParty - thumb_func_end sub_804EE6C - - thumb_func_start sub_804EED4 -sub_804EED4: @ 804EED4 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x8 - adds r6, r0, 0 - lsls r1, 24 - lsrs r7, r1, 24 - lsls r2, 24 - lsrs r2, 24 - ldr r0, _0804EF1C @ =gUnknown_2031DA8 - ldr r1, [r0] - lsls r0, r7, 1 - adds r0, r7 - lsls r0, 1 - adds r0, r2, r0 - adds r1, 0x51 - adds r1, r0 - ldrb r0, [r1] - cmp r0, 0 - bne _0804EF8C - movs r4, 0 - movs r0, 0x64 - adds r5, r2, 0 - muls r5, r0 - ldr r0, _0804EF20 @ =gPlayerParty - mov r9, r0 - ldr r2, _0804EF24 @ =gEnemyParty - mov r8, r2 -_0804EF0E: - cmp r7, 0 - bne _0804EF28 - adds r1, r4, 0 - adds r1, 0xD - mov r2, r9 - b _0804EF2E - .align 2, 0 -_0804EF1C: .4byte gUnknown_2031DA8 -_0804EF20: .4byte gPlayerParty -_0804EF24: .4byte gEnemyParty -_0804EF28: - adds r1, r4, 0 - adds r1, 0xD - mov r2, r8 -_0804EF2E: - adds r0, r5, r2 - movs r2, 0 - bl GetMonData - lsls r1, r4, 1 - add r1, sp - strh r0, [r1] - adds r0, r4, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 - cmp r4, 0x3 - bls _0804EF0E - ldr r1, _0804EF80 @ =gUnknown_8261EB6 - adds r0, r6, 0 - bl StringCopy - movs r4, 0 -_0804EF50: - lsls r0, r4, 1 - mov r2, sp - adds r1, r2, r0 - ldrh r0, [r1] - cmp r0, 0 - beq _0804EF6C - adds r1, r0, 0 - movs r0, 0xD - muls r1, r0 - ldr r0, _0804EF84 @ =gMoveNames - adds r1, r0 - adds r0, r6, 0 - bl StringAppend -_0804EF6C: - adds r0, r6, 0 - ldr r1, _0804EF88 @ =gUnknown_8261EC7 - bl StringAppend - adds r0, r4, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 - cmp r4, 0x3 - bls _0804EF50 - b _0804EF9C - .align 2, 0 -_0804EF80: .4byte gUnknown_8261EB6 -_0804EF84: .4byte gMoveNames -_0804EF88: .4byte gUnknown_8261EC7 -_0804EF8C: - ldr r1, _0804EFAC @ =gUnknown_8261EB6 - adds r0, r6, 0 - bl StringCopy - ldr r1, _0804EFB0 @ =gUnknown_841E09F - adds r0, r6, 0 - bl StringAppend -_0804EF9C: - add sp, 0x8 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0804EFAC: .4byte gUnknown_8261EB6 -_0804EFB0: .4byte gUnknown_841E09F - thumb_func_end sub_804EED4 - thumb_func_start sub_804EFB4 sub_804EFB4: @ 804EFB4 push {r4-r6,lr} @@ -1282,7 +540,7 @@ sub_804F3C8: @ 804F3C8 adds r4, r0, 0 lsls r4, 24 lsrs r4, 24 - ldr r1, _0804F430 @ =gUnknown_8260A32 + ldr r1, _0804F430 @ =gTradePartyBoxTilemap lsls r2, r4, 4 subs r2, r4 lsls r2, 24 @@ -1324,7 +582,7 @@ sub_804F3C8: @ 804F3C8 pop {r0} bx r0 .align 2, 0 -_0804F430: .4byte gUnknown_8260A32 +_0804F430: .4byte gTradePartyBoxTilemap _0804F434: .4byte gUnknown_8261ECC _0804F438: .4byte gUnknown_2031DA8 _0804F43C: .4byte 0x06010000 diff --git a/data/trade.s b/data/trade.s index fb1c509d1..763b94e96 100644 --- a/data/trade.s +++ b/data/trade.s @@ -19,10 +19,10 @@ gUnknown_8260814:: @ 8260814 .4byte 0x00000064 @ sizeof(struct Pokemon) .4byte 0x00000528 -gUnknown_8260834:: @ 8260834 +gTradeMovesBoxTilemap:: @ 8260834 .incbin "data/trade/unk_8260834.bin" -gUnknown_8260A32:: @ 8260A32 +gTradePartyBoxTilemap:: @ 8260A32 .incbin "data/trade/unk_8260A32.bin" gUnknown_8260C30:: @ 8260C30 diff --git a/src/trade.c b/src/trade.c index 7c77556db..b0f3b0e90 100644 --- a/src/trade.c +++ b/src/trade.c @@ -19,6 +19,7 @@ #include "strings.h" #include "menu.h" #include "overworld.h" +#include "battle_anim.h" #include "party_menu.h" #include "pokemon_summary_screen.h" #include "pokemon_storage_system.h" @@ -27,6 +28,7 @@ #include "constants/items.h" #include "constants/easy_chat.h" #include "constants/songs.h" +#include "constants/moves.h" struct TradeResources { @@ -87,7 +89,10 @@ void sub_804DFF0(void); void sub_804E9E4(void); void sub_804EAAC(u8 a0); void sub_804EAE4(u8 side); +u8 sub_804EE6C(u8 *str, u8 whichParty, u8 partyIdx); +void sub_804EED4(u8 *str, u8 whichParty, u8 partyIdx); void sub_804F020(u8 side); +void sub_804F08C(u8 a0, u8 partyIdx, u8 a2, u8 a3, u8 a4, u8 a5); void sub_804F284(u8 side); void sub_804F3B4(void); void sub_804F3C8(u8 a0); @@ -115,6 +120,13 @@ extern const struct SpriteTemplate gUnknown_8261CB0; extern const struct SpriteTemplate gUnknown_8261CC8; extern const u8 gJPText_Shedinja[]; extern const u8 gUnknown_8261D08[][4][6]; +extern const u16 gTradePartyBoxTilemap[]; +extern const u16 gTradeMovesBoxTilemap[]; +extern const u8 gUnknown_8262055[][2]; +extern const u8 gUnknown_8261F18[]; +extern const u8 gUnknown_8261EB6[]; +extern const u8 gUnknown_8261EC7[]; +extern const u8 gUnknown_841E09F[]; void sub_804C600(void) { @@ -3082,3 +3094,197 @@ void sub_804E944(void) } } +void sub_804E9C0(void) +{ + if (!sub_80FA484(FALSE)) + { + sub_800AB9C(); + gUnknown_2031DA8->unk_6F = 13; + } +} + +void sub_804E9E4(void) +{ + switch (gUnknown_2031DA8->unk_6F) + { + case 0: + sub_804E194(); + break; + case 1: + sub_804E388(); + break; + case 2: + sub_804E494(); + break; + case 3: + sub_804E674(); + break; + case 4: + sub_804E744(); + break; + case 6: + sub_804E7C8(); + break; + case 7: + sub_804E804(); + break; + case 8: + sub_804E880(); + break; + case 9: + sub_804D50C(); + break; + case 10: + sub_804D548(); + break; + case 11: + sub_804E908(); + break; + case 12: + sub_804E944(); + break; + case 13: + sub_804D5A4(); + break; + case 14: + sub_804E830(); + break; + case 15: + sub_804E46C(); + break; + case 16: + sub_804E9C0(); + break; + } +} + +void sub_804EAAC(u8 a0) +{ + u8 whichParty = a0 / PARTY_SIZE; + + if (gUnknown_2031DA8->unk_74[whichParty] == 0) + { + gUnknown_2031DA8->unk_74[whichParty] = 1; + gUnknown_2031DA8->unk_76[whichParty] = a0; + } +} + +void sub_804EAE4(u8 a0) +{ + s8 nameStringWidth; + u8 nickname[20]; + u8 movesString[56]; + u8 i; + u8 partyIdx; + u8 whichParty; + u8 monIdx = gUnknown_2031DA8->unk_76[a0]; + + whichParty = 1; + if (gUnknown_2031DA8->unk_76[a0] < PARTY_SIZE) + whichParty = 0; + partyIdx = monIdx % PARTY_SIZE; + nameStringWidth = 0; + + switch (gUnknown_2031DA8->unk_74[a0]) + { + case 1: + for (i = 0; i < gUnknown_2031DA8->partyCounts[a0]; i++) + { + gSprites[gUnknown_2031DA8->partyIcons[0][i + (whichParty * PARTY_SIZE)]].invisible = TRUE; + } + + for (i = 0; i < 6; i++) + { + ClearWindowTilemap(i + (a0 * 6 + 2)); + } + + gSprites[gUnknown_2031DA8->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].invisible = FALSE; + gSprites[gUnknown_2031DA8->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].data[0] = 20; + gSprites[gUnknown_2031DA8->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].data[2] = (gTradeMonSpriteCoords[whichParty * PARTY_SIZE][0] + gTradeMonSpriteCoords[whichParty * PARTY_SIZE + 1][0]) / 2 * 8 + 14; + gSprites[gUnknown_2031DA8->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].data[4] = (gTradeMonSpriteCoords[whichParty * PARTY_SIZE][1] * 8) - 12; + StoreSpriteCallbackInData6(&gSprites[gUnknown_2031DA8->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]], SpriteCB_MonIcon); + gUnknown_2031DA8->unk_74[a0]++; + sub_8075490(&gSprites[gUnknown_2031DA8->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]]); + CopyToBgTilemapBufferRect_ChangePalette(1, gTradePartyBoxTilemap, a0 * 15, 0, 15, 17, 0); + CopyBgTilemapBufferToVram(1); + CopyBgTilemapBufferToVram(0); + + if (whichParty == 0) + sub_804F3B4(); + break; + case 2: + if (gSprites[gUnknown_2031DA8->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].callback == SpriteCB_MonIcon) + gUnknown_2031DA8->unk_74[a0] = 3; + break; + case 3: + CopyToBgTilemapBufferRect_ChangePalette(1, gTradeMovesBoxTilemap, whichParty * 15, 0, 15, 17, 0); + CopyBgTilemapBufferToVram(1); + gSprites[gUnknown_2031DA8->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].pos1.x = (gTradeMonSpriteCoords[whichParty * PARTY_SIZE][0] + gTradeMonSpriteCoords[whichParty * PARTY_SIZE + 1][0]) / 2 * 8 + 14; + gSprites[gUnknown_2031DA8->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].pos1.y = (gTradeMonSpriteCoords[whichParty * PARTY_SIZE][1] * 8) - 12; + gSprites[gUnknown_2031DA8->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].pos2.x = 0; + gSprites[gUnknown_2031DA8->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].pos2.y = 0; + nameStringWidth = sub_804EE6C(nickname, whichParty, partyIdx); + AddTextPrinterParameterized3((a0 * 2) + 14, 0, (80 - nameStringWidth) / 2, 4, gUnknown_8261F18, 0, nickname); + sub_804EED4(movesString, whichParty, partyIdx); + AddTextPrinterParameterized4((a0 * 2) + 15, 1, 0, 0, 0, 0, gUnknown_8261F18, 0, movesString); + PutWindowTilemap((a0 * 2) + 14); + CopyWindowToVram((a0 * 2) + 14, 3); + PutWindowTilemap((a0 * 2) + 15); + CopyWindowToVram((a0 * 2) + 15, 3); + gUnknown_2031DA8->unk_74[a0]++; + break; + case 4: + sub_804F08C(a0, partyIdx, gUnknown_8262055[a0][0] + 4, gUnknown_8262055[a0][1] + 1, gUnknown_8262055[a0][0], gUnknown_8262055[a0][1]); + gUnknown_2031DA8->unk_74[a0]++; + break; + } +} + +u8 sub_804EE6C(u8 *dest, u8 whichParty, u8 partyIdx) +{ + u8 nickname[11]; + if (whichParty == 0) + GetMonData(&gPlayerParty[partyIdx], MON_DATA_NICKNAME, nickname); + else + GetMonData(&gEnemyParty[partyIdx], MON_DATA_NICKNAME, nickname); + StringCopy10(dest, nickname); + return GetStringWidth(0, dest, GetFontAttribute(0, FONTATTR_LETTER_SPACING)); +} + +void sub_804EED4(u8 *a0, u8 a1, u8 a2) +{ + u16 moves[MAX_MON_MOVES]; + u16 i; + + if (!gUnknown_2031DA8->unk_51[a1][a2]) + { + for (i = 0; i < MAX_MON_MOVES; i++) + { + if (!a1) + { + moves[i] = GetMonData(&gPlayerParty[a2], i + MON_DATA_MOVE1, NULL); + } + else + { + moves[i] = GetMonData(&gEnemyParty[a2], i + MON_DATA_MOVE1, NULL); + } + } + + StringCopy(a0, gUnknown_8261EB6); + + for (i = 0; i < MAX_MON_MOVES; i++) + { + if (moves[i] != MOVE_NONE) + { + StringAppend(a0, gMoveNames[moves[i]]); + } + + StringAppend(a0, gUnknown_8261EC7); + } + } + else + { + StringCopy(a0, gUnknown_8261EB6); + StringAppend(a0, gUnknown_841E09F); + } +} -- cgit v1.2.3 From b07899b2d25fea57d1f4f167ace97cedb865a43f Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 28 Oct 2019 20:39:06 -0400 Subject: Remove unused header --- _Deparsed_XSubs.pm | 11429 ++++++++++++++++++++++++++++++++++ include/international_string_util.h | 25 - src/battle_main.c | 1 - src/daycare.c | 8 - 4 files changed, 11429 insertions(+), 34 deletions(-) create mode 100644 _Deparsed_XSubs.pm delete mode 100644 include/international_string_util.h diff --git a/_Deparsed_XSubs.pm b/_Deparsed_XSubs.pm new file mode 100644 index 000000000..9623040ce --- /dev/null +++ b/_Deparsed_XSubs.pm @@ -0,0 +1,11429 @@ +# +# +# DO NOT EDIT THIS FILE, IT'S AUTOGENERATED FROM XS MODULES AND WILL BE UPDATED AUTOMATICALLY +# +# +package B { +sub CLONE; +sub address; +sub amagic_generation; +sub begin_av; +sub cast_I32; +sub cchar; +sub check_av; +sub comppadlist; +sub cstring; +sub curstash; +sub defstash; +sub diehook; +sub dowarn; +sub end_av; +sub formfeed; +sub hash; +sub inc_gv; +sub init_av; +sub main_cv; +sub main_root; +sub main_start; +sub minus_c; +sub opnumber; +sub perlstring; +sub ppname; +sub regex_padav; +sub save_BEGINs; +sub sub_generation; +sub sv_no; +sub sv_undef; +sub sv_yes; +sub svref_2object; +sub threadsv_names; +sub unitcheck_av; +sub walkoptree; +sub walkoptree_debug; +sub warnhook; +} +package B::AV { +sub ARRAY; +sub ARRAYelt; +sub FILL; +sub MAX; +} +package B::BINOP { +sub last; +} +package B::BM { +sub PREVIOUS; +sub RARE; +sub TABLE; +sub USEFUL; +} +package B::COP { +sub arybase; +sub cop_seq; +sub file; +sub filegv; +sub hints; +sub hints_hash; +sub io; +sub label; +sub line; +sub stash; +sub stashoff; +sub stashpv; +sub warnings; +} +package B::CV { +sub CONST; +sub CvFLAGS; +sub DEPTH; +sub FILE; +sub GV; +sub HSCXT; +sub NAME_HEK; +sub OUTSIDE; +sub OUTSIDE_SEQ; +sub PADLIST; +sub ROOT; +sub START; +sub STASH; +sub XSUB; +sub XSUBANY; +sub const_sv; +} +package B::Deparse { +sub main_cv; +sub main_root; +sub main_start; +sub opnumber; +sub perlstring; +sub svref_2object; +} +package B::FM { +sub LINES; +} +package B::GV { +sub AV; +sub CV; +sub CVGEN; +sub EGV; +sub FILE; +sub FILEGV; +sub FORM; +sub GP; +sub GPFLAGS; +sub GvFLAGS; +sub GvREFCNT; +sub HV; +sub IO; +sub LINE; +sub NAME; +sub STASH; +sub SV; +sub isGV_with_GP; +sub is_empty; +} +package B::HE { +sub HASH; +sub SVKEY_force; +sub VAL; +} +package B::HV { +sub ARRAY; +sub FILL; +sub KEYS; +sub MAX; +sub NAME; +sub RITER; +} +package B::IO { +sub BOTTOM_GV; +sub BOTTOM_NAME; +sub FMT_GV; +sub FMT_NAME; +sub IoFLAGS; +sub IoTYPE; +sub IsSTD; +sub LINES; +sub LINES_LEFT; +sub PAGE; +sub PAGE_LEN; +sub TOP_GV; +sub TOP_NAME; +} +package B::IV { +sub IV; +sub IVX; +sub RV; +sub UVX; +sub needs64bits; +sub packiv; +} +package B::LISTOP { +sub children; +} +package B::LOGOP { +sub other; +} +package B::LOOP { +sub lastop; +sub nextop; +sub redoop; +} +package B::MAGIC { +sub FLAGS; +sub LENGTH; +sub MOREMAGIC; +sub OBJ; +sub PRIVATE; +sub PTR; +sub REGEX; +sub TYPE; +sub precomp; +} +package B::METHOP { +sub first; +sub meth_sv; +sub rclass; +} +package B::NV { +sub NV; +sub NVX; +} +package B::OP { +sub desc; +sub flags; +sub folded; +sub moresib; +sub name; +sub next; +sub oplist; +sub opt; +sub parent; +sub ppaddr; +sub private; +sub savefree; +sub sibling; +sub size; +sub slabbed; +sub spare; +sub static; +sub targ; +sub type; +} +package B::PADLIST { +sub ARRAY; +sub ARRAYelt; +sub MAX; +sub NAMES; +sub REFCNT; +sub id; +sub outid; +} +package B::PADNAME { +sub COP_SEQ_RANGE_HIGH; +sub COP_SEQ_RANGE_LOW; +sub FLAGS; +sub LEN; +sub OURSTASH; +sub PARENT_FAKELEX_FLAGS; +sub PARENT_PAD_INDEX; +sub PROTOCV; +sub PV; +sub PVX; +sub REFCNT; +sub SvSTASH; +sub TYPE; +} +package B::PADNAMELIST { +sub ARRAY; +sub ARRAYelt; +sub MAX; +sub REFCNT; +} +package B::PADOP { +sub gv; +sub padix; +sub sv; +} +package B::PMOP { +sub code_list; +sub pmflags; +sub pmoffset; +sub pmregexp; +sub pmreplroot; +sub pmreplstart; +sub pmstash; +sub pmstashpv; +sub precomp; +sub reflags; +} +package B::PV { +sub CUR; +sub LEN; +sub PV; +sub PVBM; +sub PVX; +sub RV; +sub as_string; +} +package B::PVLV { +sub TARG; +sub TARGLEN; +sub TARGOFF; +sub TYPE; +} +package B::PVMG { +sub MAGIC; +sub SvSTASH; +} +package B::PVOP { +sub pv; +} +package B::REGEXP { +sub REGEX; +sub compflags; +sub precomp; +sub qr_anoncv; +} +package B::RHE { +sub HASH; +} +package B::SV { +sub FLAGS; +sub MAGICAL; +sub POK; +sub REFCNT; +sub ROK; +sub SvTYPE; +sub object_2svref; +} +package B::SVOP { +sub gv; +sub sv; +} +package B::UNOP { +sub first; +} +package B::UNOP_AUX { +sub aux_list; +sub string; +} +package B::Utils { +sub anon_sub; +sub blessed($) ; +sub main_cv; +sub main_root; +sub main_start; +sub ppname; +sub shuffle(@) ; +sub weaken($) ; +} +package BerkeleyDB { +sub _db_remove; +sub _db_rename; +sub _db_verify; +sub constant; +sub db_value_set; +sub db_version; +sub has_heap; +} +package BerkeleyDB::Btree { +sub _db_open_btree; +sub db_stat; +} +package BerkeleyDB::Common { +sub ArrayOffset; +sub _DESTROY; +sub _Txn; +sub __db_write_cursor; +sub _db_cursor; +sub _db_join; +sub associate; +sub associate_foreign; +sub byteswapped; +sub cds_enabled; +sub compact; +sub db_close; +sub db_create_sequence; +sub db_del; +sub db_exists; +sub db_fd; +sub db_get; +sub db_key_range; +sub db_pget; +sub db_put; +sub db_sync; +sub filter_fetch_key; +sub filter_fetch_value; +sub filter_store_key; +sub filter_store_value; +sub get_blob_dir; +sub get_blob_threshold; +sub partial_clear; +sub partial_set; +sub stat_print; +sub status; +sub truncate; +sub type; +} +package BerkeleyDB::Cursor { +sub _DESTROY; +sub _c_close; +sub _c_dup; +sub _c_get_db_stream; +sub _db_stream; +sub c_count; +sub c_del; +sub c_get; +sub c_pget; +sub c_put; +sub partial_clear; +sub partial_set; +sub status; +} +package BerkeleyDB::DbStream { +sub DESTROY; +sub close; +sub read; +sub size; +sub write; +} +package BerkeleyDB::Env { +sub DB_ENV; +sub O_ALIAS() ; +sub O_ASYNC() ; +sub O_DEFER() ; +sub O_DIRECT() ; +sub O_DIRECTORY() ; +sub O_DSYNC() ; +sub O_EXLOCK() ; +sub O_LARGEFILE() ; +sub O_NDELAY() ; +sub O_NOCTTY() ; +sub O_NOFOLLOW() ; +sub O_NONBLOCK() ; +sub O_RSRC() ; +sub O_RSYNC() ; +sub O_SHLOCK() ; +sub O_SYNC() ; +sub _DESTROY; +sub _TxnMgr; +sub _db_appinit; +sub _txn_begin; +sub cds_enabled; +sub close; +sub create; +sub db_appexit; +sub errPrefix; +sub failchk; +sub get_blob_dir; +sub get_blob_threshold; +sub get_region_dir; +sub get_shm_key; +sub get_slice_count; +sub get_timeout; +sub lock_detect; +sub lock_stat_print; +sub log_archive; +sub log_get_config; +sub log_set_config; +sub lsn_reset; +sub mutex_stat_print; +sub open; +sub printEnv; +sub set_blob_threshold; +sub set_data_dir; +sub set_encrypt; +sub set_flags; +sub set_isalive; +sub set_lg_bsize; +sub set_lg_dir; +sub set_lg_filemode; +sub set_lg_max; +sub set_mutexlocks; +sub set_region_dir; +sub set_timeout; +sub set_tmp_dir; +sub set_verbose; +sub stat_print; +sub status; +sub txn_checkpoint; +sub txn_stat; +sub txn_stat_print; +} +package BerkeleyDB::Hash { +sub _db_open_hash; +sub db_stat; +} +package BerkeleyDB::Heap { +sub _db_open_heap; +} +package BerkeleyDB::Queue { +sub FETCHSIZE; +sub _db_open_queue; +sub db_stat; +} +package BerkeleyDB::Recno { +sub FETCHSIZE; +sub _db_open_recno; +sub db_stat; +} +package BerkeleyDB::Sequence { +sub DESTROY; +sub close; +sub get; +sub get_cachesize; +sub get_flags; +sub get_key; +sub initial_value; +sub open; +sub remove; +sub set_cachesize; +sub set_flags; +sub set_range; +sub stat; +} +package BerkeleyDB::Term { +sub close_everything; +sub safeCroak; +} +package BerkeleyDB::Txn { +sub _DESTROY; +sub _txn_abort; +sub _txn_commit; +sub _txn_discard; +sub get_tx_max; +sub set_timeout; +sub set_tx_max; +sub status; +sub txn_id; +sub txn_prepare; +sub txn_unlink; +} +package BerkeleyDB::TxnMgr { +sub _DESTROY; +sub _txn_begin; +sub status; +sub txn_checkpoint; +sub txn_close; +sub txn_open; +sub txn_stat; +} +package BerkeleyDB::Unknown { +sub _db_open_unknown; +} +package BerkeleyDB::_tiedArray { +sub FETCHSIZE; +sub FIRSTKEY; +sub NEXTKEY; +sub length; +} +package BerkeleyDB::_tiedHash { +sub FIRSTKEY; +sub NEXTKEY; +} +package Carp { +sub _maybe_isa; +sub downgrade; +sub is_utf8; +} +package Class::Load { +sub is_class_loaded; +} +package Class::Load::XS { +sub is_class_loaded; +} +package Class::MOP { +sub blessed($) ; +sub check_package_cache_flag($) ; +sub get_code_info($) ; +sub isweak($) ; +sub weaken($) ; +} +package Class::MOP::Attribute { +sub associated_class; +sub associated_methods; +sub blessed($) ; +sub weaken($) ; +} +package Class::MOP::Class { +sub all(&@) ; +sub blessed($) ; +sub constructor_class; +sub constructor_name; +sub destructor_class; +sub immutable_trait; +sub instance_metaclass; +sub subname; +} +package Class::MOP::Instance { +sub associated_metaclass; +sub blessed($) ; +sub isweak($) ; +sub slot_hash; +sub slots; +sub weaken($) ; +} +package Class::MOP::Method { +sub blessed($) ; +sub body; +sub is_stub; +sub name; +sub package_name; +sub reftype($) ; +sub weaken($) ; +} +package Class::MOP::Method::Accessor { +sub blessed($) ; +sub weaken($) ; +} +package Class::MOP::Method::Constructor { +sub blessed($) ; +sub weaken($) ; +} +package Class::MOP::Method::Generated { +sub definition_context; +sub is_inline; +} +package Class::MOP::Method::Inlined { +sub _expected_method_class; +sub refaddr($) ; +} +package Class::MOP::Method::Meta { +sub blessed($) ; +sub weaken($) ; +} +package Class::MOP::Method::Wrapped { +sub blessed($) ; +sub subname; +} +package Class::MOP::Mixin { +sub blessed($) ; +} +package Class::MOP::Mixin::AttributeCore { +sub accessor; +sub blessed($) ; +sub builder; +sub clearer; +sub definition_context; +sub init_arg; +sub initializer; +sub insertion_order; +sub name; +sub predicate; +sub reader; +sub writer; +} +package Class::MOP::Mixin::HasAttributes { +sub _attribute_map; +sub attribute_metaclass; +sub blessed($) ; +} +package Class::MOP::Mixin::HasMethods { +sub _method_map; +sub blessed($) ; +sub method_metaclass; +sub reftype($) ; +sub subname; +sub wrapped_method_metaclass; +} +package Class::MOP::Mixin::HasOverloads { +sub blessed($) ; +} +package Class::MOP::Object { +sub blessed($) ; +} +package Class::MOP::Overload { +sub blessed($) ; +sub weaken($) ; +} +package Class::MOP::Package { +sub blessed($) ; +sub name; +sub weaken($) ; +} +package Class::XSAccessor { +sub __entersub_optimized__() ; +sub _newxs_compat_accessor; +sub _newxs_compat_setter; +sub accessor; +sub array_accessor; +sub array_accessor_init; +sub array_setter; +sub array_setter_init; +sub chained_accessor; +sub chained_setter; +sub constant_false; +sub constant_true; +sub constructor; +sub defined_predicate; +sub exists_predicate; +sub getter; +sub lvalue_accessor; +sub newxs_accessor; +sub newxs_boolean; +sub newxs_constructor; +sub newxs_defined_predicate; +sub newxs_exists_predicate; +sub newxs_getter; +sub newxs_lvalue_accessor; +sub newxs_predicate; +sub newxs_setter; +sub newxs_test; +sub setter; +sub test; +} +package Class::XSAccessor::Array { +sub accessor; +sub chained_accessor; +sub chained_setter; +sub constructor; +sub getter; +sub lvalue_accessor; +sub newxs_accessor; +sub newxs_constructor; +sub newxs_getter; +sub newxs_lvalue_accessor; +sub newxs_predicate; +sub newxs_setter; +sub predicate; +sub setter; +} +package Clone { +sub clone($;$) ; +} +package Compress::Raw::Bunzip2 { +sub DESTROY; +sub DispStream; +sub bzinflate; +sub compressedBytes; +sub inflateCount; +sub new; +sub status; +sub total_in_lo32; +sub total_out_lo32; +sub uncompressedBytes; +} +package Compress::Raw::Bzip2 { +sub DESTROY; +sub DispStream; +sub bzclose; +sub bzdeflate; +sub bzflush; +sub bzlibversion; +sub compressedBytes; +sub constant; +sub new; +sub total_in_lo32; +sub total_out_lo32; +sub uncompressedBytes; +} +package Compress::Raw::Lzma { +sub LZMA_BACKWARD_SIZE_MAX; +sub LZMA_FILTER_LZMA1; +sub LZMA_VERSION; +sub LZMA_VERSION_STRING; +sub blessed($) ; +sub constant; +sub lzma_alone_decoder; +sub lzma_alone_encoder; +sub lzma_auto_decoder; +sub lzma_check_is_supported; +sub lzma_check_size; +sub lzma_easy_decoder_memusage; +sub lzma_easy_encoder; +sub lzma_easy_encoder_memusage; +sub lzma_filter_decoder_is_supported; +sub lzma_filter_encoder_is_supported; +sub lzma_mf_is_supported; +sub lzma_mode_is_supported; +sub lzma_raw_decoder; +sub lzma_raw_encoder; +sub lzma_stream_buffer_bound; +sub lzma_stream_decoder; +sub lzma_stream_encoder; +sub lzma_version_number; +sub lzma_version_string; +} +package Compress::Raw::Lzma::Decoder { +sub DESTROY; +sub code; +sub compressedBytes; +sub uncompressedBytes; +} +package Compress::Raw::Lzma::Encoder { +sub DESTROY; +sub code; +sub compressedBytes; +sub flush; +sub uncompressedBytes; +} +package Compress::Raw::Lzma::Options { +sub DESTROY; +sub lzma_lzma_preset; +sub new; +} +package Compress::Raw::Zlib { +sub ZLIB_VERNUM; +sub _deflateInit; +sub _inflateInit; +sub _inflateScanInit; +sub adler32; +sub adler32_combine; +sub constant; +sub crc32; +sub crc32_combine; +sub zlibCompileFlags; +sub zlib_version; +} +package Compress::Raw::Zlib::deflateStream { +sub DESTROY; +sub DispStream; +sub _deflateParams; +sub adler32; +sub compressedBytes; +sub crc32; +sub deflate; +sub deflateReset; +sub deflateTune; +sub dict_adler; +sub flush; +sub get_Bufsize; +sub get_Level; +sub get_Strategy; +sub msg; +sub status; +sub total_in; +sub total_out; +sub uncompressedBytes; +} +package Compress::Raw::Zlib::inflateScanStream { +sub DESTROY; +sub DispStream; +sub _createDeflateStream; +sub adler32; +sub compressedBytes; +sub crc32; +sub getEndOffset; +sub getLastBlockOffset; +sub getLastBufferOffset; +sub inflateCount; +sub inflateReset; +sub resetLastBlockByte; +sub scan; +sub status; +sub uncompressedBytes; +} +package Compress::Raw::Zlib::inflateStream { +sub DESTROY; +sub DispStream; +sub adler32; +sub compressedBytes; +sub crc32; +sub dict_adler; +sub get_Bufsize; +sub inflate; +sub inflateCount; +sub inflateReset; +sub inflateSync; +sub msg; +sub set_Append; +sub status; +sub total_in; +sub total_out; +sub uncompressedBytes; +} +package Compress::unLZMA { +sub uncompressdata; +sub uncompressfile; +} +package Config { +sub AUTOLOAD; +} +package Cpanel::JSON::XS { +sub CLONE; +sub DESTROY; +sub _from_json($;$$) ; +sub _to_json($;$) ; +sub allow_barekey; +sub allow_bignum; +sub allow_blessed; +sub allow_dupkeys; +sub allow_nonref; +sub allow_singlequote; +sub allow_stringify; +sub allow_tags; +sub allow_unknown; +sub ascii; +sub binary; +sub canonical; +sub convert_blessed; +sub decode; +sub decode_json($;$$) ; +sub decode_prefix; +sub encode; +sub encode_json($;$) ; +sub escape_slash; +sub filter_json_object; +sub filter_json_single_key_object; +sub get_allow_barekey; +sub get_allow_bignum; +sub get_allow_blessed; +sub get_allow_dupkeys; +sub get_allow_nonref; +sub get_allow_singlequote; +sub get_allow_stringify; +sub get_allow_tags; +sub get_allow_unknown; +sub get_ascii; +sub get_binary; +sub get_canonical; +sub get_convert_blessed; +sub get_escape_slash; +sub get_indent; +sub get_indent_length; +sub get_latin1; +sub get_max_depth; +sub get_max_size; +sub get_relaxed; +sub get_shrink; +sub get_space_after; +sub get_space_before; +sub get_stringify_infnan; +sub get_unblessed_bool; +sub get_utf8; +sub incr_parse; +sub incr_reset; +sub incr_skip; +sub indent; +sub indent_length; +sub latin1; +sub max_depth; +sub max_size; +sub new; +sub pretty; +sub relaxed; +sub shrink; +sub sort_by; +sub space_after; +sub space_before; +sub stringify_infnan; +sub unblessed_bool; +sub utf8; +} +package Crypt::AuthEnc::CCM { +sub DESTROY; +sub ccm_decrypt_verify; +sub ccm_encrypt_authenticate; +sub clone; +sub decrypt_add; +sub decrypt_done; +sub encrypt_add; +sub encrypt_done; +sub new; +} +package Crypt::AuthEnc::ChaCha20Poly1305 { +sub DESTROY; +sub adata_add; +sub chacha20poly1305_decrypt_verify; +sub chacha20poly1305_encrypt_authenticate; +sub clone; +sub decrypt_add; +sub decrypt_done; +sub encrypt_add; +sub encrypt_done; +sub new; +sub set_iv; +sub set_iv_rfc7905; +} +package Crypt::AuthEnc::EAX { +sub DESTROY; +sub adata_add; +sub clone; +sub decrypt_add; +sub decrypt_done; +sub eax_decrypt_verify; +sub eax_encrypt_authenticate; +sub encrypt_add; +sub encrypt_done; +sub new; +} +package Crypt::AuthEnc::GCM { +sub DESTROY; +sub adata_add; +sub clone; +sub decrypt_add; +sub decrypt_done; +sub encrypt_add; +sub encrypt_done; +sub gcm_decrypt_verify; +sub gcm_encrypt_authenticate; +sub iv_add; +sub new; +sub reset; +} +package Crypt::AuthEnc::OCB { +sub DESTROY; +sub adata_add; +sub clone; +sub decrypt_add; +sub decrypt_done; +sub decrypt_last; +sub encrypt_add; +sub encrypt_done; +sub encrypt_last; +sub new; +sub ocb_decrypt_verify; +sub ocb_encrypt_authenticate; +} +package Crypt::Blowfish { +sub crypt; +sub init; +} +package Crypt::Checksum::Adler32 { +sub DESTROY; +sub add; +sub adler32_data; +sub adler32_data_hex; +sub adler32_data_int; +sub clone; +sub digest; +sub hexdigest; +sub intdigest; +sub new; +sub reset; +} +package Crypt::Checksum::CRC32 { +sub DESTROY; +sub add; +sub clone; +sub crc32_data; +sub crc32_data_hex; +sub crc32_data_int; +sub digest; +sub hexdigest; +sub intdigest; +sub new; +sub reset; +} +package Crypt::Cipher { +sub DESTROY; +sub blocksize; +sub decrypt; +sub default_rounds; +sub encrypt; +sub max_keysize; +sub min_keysize; +sub new; +} +package Crypt::DES { +sub crypt; +sub expand_key; +} +package Crypt::Digest { +sub DESTROY; +sub add; +sub b64digest; +sub b64udigest; +sub clone; +sub digest; +sub digest_data; +sub digest_data_b64; +sub digest_data_b64u; +sub digest_data_hex; +sub hashsize; +sub hexdigest; +sub new; +sub reset; +} +package Crypt::Digest::SHAKE { +sub DESTROY; +sub add; +sub clone; +sub done; +sub new; +sub reset; +} +package Crypt::IDEA { +sub crypt; +sub expand_key; +sub invert_key; +} +package Crypt::KeyDerivation { +sub hkdf; +sub hkdf_expand; +sub hkdf_extract; +sub pbkdf1; +sub pbkdf2; +} +package Crypt::Mac::BLAKE2b { +sub DESTROY; +sub add; +sub b64mac; +sub b64umac; +sub blake2b; +sub blake2b_b64; +sub blake2b_b64u; +sub blake2b_hex; +sub clone; +sub hexmac; +sub mac; +sub new; +} +package Crypt::Mac::BLAKE2s { +sub DESTROY; +sub add; +sub b64mac; +sub b64umac; +sub blake2s; +sub blake2s_b64; +sub blake2s_b64u; +sub blake2s_hex; +sub clone; +sub hexmac; +sub mac; +sub new; +} +package Crypt::Mac::F9 { +sub DESTROY; +sub add; +sub b64mac; +sub b64umac; +sub clone; +sub f9; +sub f9_b64; +sub f9_b64u; +sub f9_hex; +sub hexmac; +sub mac; +sub new; +} +package Crypt::Mac::HMAC { +sub DESTROY; +sub add; +sub b64mac; +sub b64umac; +sub clone; +sub hexmac; +sub hmac; +sub hmac_b64; +sub hmac_b64u; +sub hmac_hex; +sub mac; +sub new; +} +package Crypt::Mac::OMAC { +sub DESTROY; +sub add; +sub b64mac; +sub b64umac; +sub clone; +sub hexmac; +sub mac; +sub new; +sub omac; +sub omac_b64; +sub omac_b64u; +sub omac_hex; +} +package Crypt::Mac::PMAC { +sub DESTROY; +sub add; +sub b64mac; +sub b64umac; +sub clone; +sub hexmac; +sub mac; +sub new; +sub pmac; +sub pmac_b64; +sub pmac_b64u; +sub pmac_hex; +} +package Crypt::Mac::Pelican { +sub DESTROY; +sub add; +sub b64mac; +sub b64umac; +sub clone; +sub hexmac; +sub mac; +sub new; +sub pelican; +sub pelican_b64; +sub pelican_b64u; +sub pelican_hex; +} +package Crypt::Mac::Poly1305 { +sub DESTROY; +sub add; +sub b64mac; +sub b64umac; +sub clone; +sub hexmac; +sub mac; +sub new; +sub poly1305; +sub poly1305_b64; +sub poly1305_b64u; +sub poly1305_hex; +} +package Crypt::Mac::XCBC { +sub DESTROY; +sub add; +sub b64mac; +sub b64umac; +sub clone; +sub hexmac; +sub mac; +sub new; +sub xcbc; +sub xcbc_b64; +sub xcbc_b64u; +sub xcbc_hex; +} +package Crypt::Misc { +sub _bin_to_radix; +sub _radix_to_bin; +sub decode_b32b; +sub decode_b32c; +sub decode_b32r; +sub decode_b32z; +sub decode_b64; +sub decode_b64u; +sub encode_b32b; +sub encode_b32c; +sub encode_b32r; +sub encode_b32z; +sub encode_b64; +sub encode_b64u; +sub increment_octets_be; +sub increment_octets_le; +} +package Crypt::Mode::CBC { +sub DESTROY; +sub add; +sub finish; +sub new; +sub start_decrypt; +sub start_encrypt; +} +package Crypt::Mode::CFB { +sub DESTROY; +sub add; +sub finish; +sub new; +sub start_decrypt; +sub start_encrypt; +} +package Crypt::Mode::CTR { +sub DESTROY; +sub add; +sub finish; +sub new; +sub start_decrypt; +sub start_encrypt; +} +package Crypt::Mode::ECB { +sub DESTROY; +sub add; +sub finish; +sub new; +sub start_decrypt; +sub start_encrypt; +} +package Crypt::Mode::OFB { +sub DESTROY; +sub add; +sub finish; +sub new; +sub start_decrypt; +sub start_encrypt; +} +package Crypt::OpenSSL::AES { +sub DESTROY($) ; +sub decrypt($$) ; +sub encrypt($$) ; +sub new($$) ; +} +package Crypt::OpenSSL::Bignum { +sub DESTROY; +sub add; +sub bless_pointer; +sub cmp; +sub copy; +sub div; +sub equals; +sub exp; +sub gcd; +sub get_word; +sub is_odd; +sub is_one; +sub is_zero; +sub lshift; +sub mod; +sub mod_exp; +sub mod_inverse; +sub mod_mul; +sub mul; +sub new; +sub new_from_bin; +sub new_from_decimal; +sub new_from_hex; +sub new_from_word; +sub num_bits; +sub num_bytes; +sub one; +sub pointer_copy; +sub pseudo_rand; +sub rand; +sub rand_range; +sub rshift; +sub sqr; +sub sub; +sub swap; +sub to_bin; +sub to_decimal; +sub to_hex; +sub ucmp; +sub zero; +} +package Crypt::OpenSSL::Bignum::CTX { +sub DESTROY; +sub new; +} +package Crypt::OpenSSL::DSA { +sub DESTROY; +sub _load_key; +sub do_sign; +sub do_verify; +sub generate_key; +sub generate_parameters; +sub get_g; +sub get_p; +sub get_priv_key; +sub get_pub_key; +sub get_q; +sub new; +sub read_params; +sub read_priv_key; +sub read_pub_key; +sub set_g; +sub set_p; +sub set_priv_key; +sub set_pub_key; +sub set_q; +sub sign; +sub verify; +sub write_params; +sub write_priv_key; +sub write_pub_key; +} +package Crypt::OpenSSL::DSA::Signature { +sub DESTROY; +sub get_r; +sub get_s; +sub new; +sub set_r; +sub set_s; +} +package Crypt::OpenSSL::RSA { +sub DESTROY; +sub _get_key_parameters; +sub _new_key_from_parameters; +sub _new_public_key_pkcs1; +sub _new_public_key_x509; +sub _random_seed; +sub _random_status; +sub check_key; +sub decrypt; +sub encrypt; +sub generate_key; +sub get_key_parameters; +sub get_private_key_string; +sub get_public_key_string; +sub get_public_key_x509_string; +sub import_random_seed; +sub is_private; +sub new_key_from_parameters; +sub new_private_key; +sub new_public_key; +sub private_encrypt; +sub public_decrypt; +sub sign; +sub size; +sub use_md5_hash; +sub use_no_padding; +sub use_pkcs1_oaep_padding; +sub use_pkcs1_padding; +sub use_ripemd160_hash; +sub use_sha1_hash; +sub use_sha224_hash; +sub use_sha256_hash; +sub use_sha384_hash; +sub use_sha512_hash; +sub use_sslv23_padding; +sub verify; +} +package Crypt::OpenSSL::Random { +sub random_bytes; +sub random_pseudo_bytes; +sub random_seed; +sub random_status; +} +package Crypt::OpenSSL::X509 { +sub DESTROY; +sub __X509_cleanup; +sub accessor; +sub as_string; +sub bit_length; +sub checkend; +sub curve; +sub email; +sub exponent; +sub extension; +sub extensions; +sub extensions_by_long_name; +sub extensions_by_name; +sub extensions_by_oid; +sub fingerprint_md5; +sub fingerprint_sha1; +sub fingerprint_sha224; +sub fingerprint_sha256; +sub fingerprint_sha384; +sub fingerprint_sha512; +sub hash; +sub issuer; +sub issuer_hash; +sub issuer_name; +sub key_alg_name; +sub modulus; +sub new; +sub new_from_file; +sub new_from_string; +sub notAfter; +sub notBefore; +sub num_extensions; +sub pub_exponent; +sub pubkey; +sub pubkey_type; +sub serial; +sub sig_alg_name; +sub sig_print; +sub subject; +sub subject_hash; +sub subject_name; +sub version; +} +package Crypt::OpenSSL::X509::Extension { +sub auth_att; +sub basicC; +sub bit_string; +sub critical; +sub extendedKeyUsage; +sub ia5string; +sub keyid_data; +sub object; +sub to_string; +sub value; +} +package Crypt::OpenSSL::X509::Name { +sub as_string; +sub entries; +sub get_entry_by_long_type; +sub get_entry_by_type; +sub get_index_by_long_type; +sub get_index_by_oid_type; +sub get_index_by_type; +sub has_entry; +sub has_long_entry; +sub has_oid_entry; +} +package Crypt::OpenSSL::X509::Name_Entry { +sub as_long_string; +sub as_string; +sub encoding; +sub is_asn1_type; +sub is_ia5string; +sub is_printableString; +sub is_utf8string; +sub long_type; +sub type; +sub value; +} +package Crypt::OpenSSL::X509::ObjectID { +sub name; +sub oid; +} +package Crypt::OpenSSL::X509_CRL { +sub CRL_accessor; +sub CRL_issuer; +sub CRL_sig_alg_name; +sub new_from_crl_file; +sub new_from_crl_string; +} +package Crypt::PK::DH { +sub DESTROY; +sub _generate_key_dhparam; +sub _generate_key_gp; +sub _generate_key_size; +sub _import; +sub _import_raw; +sub _new; +sub export_key; +sub export_key_raw; +sub is_private; +sub key2hash; +sub params2hash; +sub shared_secret; +sub size; +} +package Crypt::PK::DSA { +sub DESTROY; +sub _generate_key_dsaparam; +sub _generate_key_pqg_hex; +sub _generate_key_size; +sub _import; +sub _import_hex; +sub _new; +sub decrypt; +sub encrypt; +sub export_key_der; +sub is_private; +sub key2hash; +sub sign_hash; +sub sign_message; +sub size; +sub size_q; +sub verify_hash; +sub verify_message; +} +package Crypt::PK::ECC { +sub DESTROY; +sub _import; +sub _import_old; +sub _import_pkcs8; +sub _import_x509; +sub _new; +sub decrypt; +sub encrypt; +sub export_key_der; +sub export_key_raw; +sub generate_key; +sub import_key_raw; +sub is_private; +sub key2hash; +sub shared_secret; +sub sign_hash; +sub sign_hash_rfc7518; +sub sign_message; +sub sign_message_rfc7518; +sub size; +sub verify_hash; +sub verify_hash_rfc7518; +sub verify_message; +sub verify_message_rfc7518; +} +package Crypt::PK::RSA { +sub DESTROY; +sub _import; +sub _import_hex; +sub _import_pkcs8; +sub _import_x509; +sub _new; +sub decrypt; +sub encrypt; +sub export_key_der; +sub generate_key; +sub is_private; +sub key2hash; +sub sign_hash; +sub sign_message; +sub size; +sub verify_hash; +sub verify_message; +} +package Crypt::PRNG { +sub DESTROY; +sub add_entropy; +sub bytes; +sub bytes_b64; +sub bytes_b64u; +sub bytes_hex; +sub double; +sub int32; +sub new; +} +package Crypt::RC6 { +sub DESTROY($) ; +sub decrypt($$) ; +sub encrypt($$) ; +sub new($$) ; +} +package Crypt::RIPEMD160 { +sub DESTROY; +sub add; +sub digest; +sub new; +sub reset; +} +package Crypt::Rijndael { +sub DESTROY; +sub decrypt; +sub encrypt; +sub new; +sub set_iv; +} +package Crypt::SSLeay::CTX { +sub check_private_key; +sub free; +sub new; +sub set_cipher_list; +sub set_verify; +sub use_PrivateKey_file; +sub use_certificate_file; +sub use_pkcs12_file; +} +package Crypt::SSLeay::Conn { +sub accept; +sub connect; +sub free; +sub get_cipher; +sub get_peer_certificate; +sub get_shared_ciphers; +sub get_verify_result; +sub new; +sub pending; +sub read; +sub set_fd; +sub set_tlsext_host_name; +sub write; +} +package Crypt::SSLeay::Err { +sub get_error_string; +} +package Crypt::SSLeay::Version { +sub openssl_built_on; +sub openssl_cflags; +sub openssl_dir; +sub openssl_platform; +sub openssl_version; +sub openssl_version_number; +} +package Crypt::SSLeay::X509 { +sub free; +sub get_notAfterString; +sub get_notBeforeString; +sub issuer_name; +sub subject_name; +} +package Crypt::Serpent { +sub DESTROY($) ; +sub decrypt($$) ; +sub encrypt($$) ; +sub new($$;$) ; +} +package Crypt::Stream::ChaCha { +sub DESTROY; +sub clone; +sub crypt; +sub keystream; +sub new; +} +package Crypt::Stream::RC4 { +sub DESTROY; +sub clone; +sub crypt; +sub keystream; +sub new; +} +package Crypt::Stream::Rabbit { +sub DESTROY; +sub clone; +sub crypt; +sub keystream; +sub new; +} +package Crypt::Stream::Salsa20 { +sub DESTROY; +sub clone; +sub crypt; +sub keystream; +sub new; +} +package Crypt::Stream::Sober128 { +sub DESTROY; +sub clone; +sub crypt; +sub keystream; +sub new; +} +package Crypt::Stream::Sosemanuk { +sub DESTROY; +sub clone; +sub crypt; +sub keystream; +sub new; +} +package Crypt::Twofish { +sub DESTROY; +sub crypt; +sub setup; +} +package CryptX { +sub _ltc_build_settings; +sub _ltc_mp_bits_per_digit; +sub _ltc_mp_name; +sub decode_json($;$$) ; +sub encode_json($;$) ; +} +package Cwd { +sub CLONE; +sub getdcwd(;@) ; +} +package DBD::ODBC::db { +sub DESTROY; +sub FETCH; +sub GetFunctions; +sub STORE; +sub _ExecDirect; +sub _GetForeignKeys; +sub _GetInfo; +sub _GetPrimaryKeys; +sub _GetSpecialColumns; +sub _GetStatistics; +sub _GetTypeInfo; +sub _columns; +sub _login; +sub commit; +sub disconnect; +sub odbc_getdiagfield; +sub odbc_getdiagrec; +sub rollback; +sub selectall_arrayref; +sub selectrow_array; +sub selectrow_arrayref; +} +package DBD::ODBC::dr { +sub _data_sources; +sub dbixs_revision; +sub discon_all_; +sub disconnect_all; +} +package DBD::ODBC::st { +sub DESTROY; +sub FETCH; +sub FETCH_attrib; +sub STORE; +sub _Cancel; +sub _ColAttributes; +sub _prepare; +sub _primary_keys; +sub _statistics; +sub _tables; +sub bind_col; +sub bind_param; +sub bind_param_inout; +sub blob_read; +sub execute; +sub fetch; +sub fetchall_arrayref; +sub fetchrow; +sub fetchrow_array; +sub fetchrow_arrayref; +sub finish; +sub odbc_describe_param; +sub odbc_execute_for_fetch; +sub odbc_getdiagfield; +sub odbc_getdiagrec; +sub odbc_lob_read($$$$;$) ; +sub odbc_rows; +} +package DBD::Oracle::db { +sub SQL_ALL_TYPES() ; +sub SQL_ARRAY() ; +sub SQL_ARRAY_LOCATOR() ; +sub SQL_BIGINT() ; +sub SQL_BINARY() ; +sub SQL_BIT() ; +sub SQL_BLOB() ; +sub SQL_BLOB_LOCATOR() ; +sub SQL_BOOLEAN() ; +sub SQL_CHAR() ; +sub SQL_CLOB() ; +sub SQL_CLOB_LOCATOR() ; +sub SQL_DATE() ; +sub SQL_DATETIME() ; +sub SQL_DECIMAL() ; +sub SQL_DOUBLE() ; +sub SQL_FLOAT() ; +sub SQL_GUID() ; +sub SQL_INTEGER() ; +sub SQL_INTERVAL() ; +sub SQL_INTERVAL_DAY() ; +sub SQL_INTERVAL_DAY_TO_HOUR() ; +sub SQL_INTERVAL_DAY_TO_MINUTE() ; +sub SQL_INTERVAL_DAY_TO_SECOND() ; +sub SQL_INTERVAL_HOUR() ; +sub SQL_INTERVAL_HOUR_TO_MINUTE() ; +sub SQL_INTERVAL_HOUR_TO_SECOND() ; +sub SQL_INTERVAL_MINUTE() ; +sub SQL_INTERVAL_MINUTE_TO_SECOND() ; +sub SQL_INTERVAL_MONTH() ; +sub SQL_INTERVAL_SECOND() ; +sub SQL_INTERVAL_YEAR() ; +sub SQL_INTERVAL_YEAR_TO_MONTH() ; +sub SQL_LONGVARBINARY() ; +sub SQL_LONGVARCHAR() ; +sub SQL_MULTISET() ; +sub SQL_MULTISET_LOCATOR() ; +sub SQL_NUMERIC() ; +sub SQL_REAL() ; +sub SQL_REF() ; +sub SQL_ROW() ; +sub SQL_SMALLINT() ; +sub SQL_TIME() ; +sub SQL_TIMESTAMP() ; +sub SQL_TINYINT() ; +sub SQL_TYPE_DATE() ; +sub SQL_TYPE_TIME() ; +sub SQL_TYPE_TIMESTAMP() ; +sub SQL_TYPE_TIMESTAMP_WITH_TIMEZONE() ; +sub SQL_TYPE_TIME_WITH_TIMEZONE() ; +sub SQL_UDT() ; +sub SQL_UDT_LOCATOR() ; +sub SQL_UNKNOWN_TYPE() ; +sub SQL_VARBINARY() ; +sub SQL_VARCHAR() ; +sub SQL_WCHAR() ; +sub SQL_WLONGVARCHAR() ; +sub SQL_WVARCHAR() ; +} +package DBD::Pg { +sub PG_ACLITEM() ; +sub PG_ACLITEMARRAY() ; +sub PG_ANY() ; +sub PG_ANYARRAY() ; +sub PG_ANYELEMENT() ; +sub PG_ANYENUM() ; +sub PG_ANYNONARRAY() ; +sub PG_ANYRANGE() ; +sub PG_ASYNC() ; +sub PG_BIT() ; +sub PG_BITARRAY() ; +sub PG_BOOL() ; +sub PG_BOOLARRAY() ; +sub PG_BOX() ; +sub PG_BOXARRAY() ; +sub PG_BPCHAR() ; +sub PG_BPCHARARRAY() ; +sub PG_BYTEA() ; +sub PG_BYTEAARRAY() ; +sub PG_CHAR() ; +sub PG_CHARARRAY() ; +sub PG_CID() ; +sub PG_CIDARRAY() ; +sub PG_CIDR() ; +sub PG_CIDRARRAY() ; +sub PG_CIRCLE() ; +sub PG_CIRCLEARRAY() ; +sub PG_CSTRING() ; +sub PG_CSTRINGARRAY() ; +sub PG_DATE() ; +sub PG_DATEARRAY() ; +sub PG_DATERANGE() ; +sub PG_DATERANGEARRAY() ; +sub PG_EVENT_TRIGGER() ; +sub PG_FDW_HANDLER() ; +sub PG_FLOAT4() ; +sub PG_FLOAT4ARRAY() ; +sub PG_FLOAT8() ; +sub PG_FLOAT8ARRAY() ; +sub PG_GTSVECTOR() ; +sub PG_GTSVECTORARRAY() ; +sub PG_INDEX_AM_HANDLER() ; +sub PG_INET() ; +sub PG_INETARRAY() ; +sub PG_INT2() ; +sub PG_INT2ARRAY() ; +sub PG_INT2VECTOR() ; +sub PG_INT2VECTORARRAY() ; +sub PG_INT4() ; +sub PG_INT4ARRAY() ; +sub PG_INT4RANGE() ; +sub PG_INT4RANGEARRAY() ; +sub PG_INT8() ; +sub PG_INT8ARRAY() ; +sub PG_INT8RANGE() ; +sub PG_INT8RANGEARRAY() ; +sub PG_INTERNAL() ; +sub PG_INTERVAL() ; +sub PG_INTERVALARRAY() ; +sub PG_JSON() ; +sub PG_JSONARRAY() ; +sub PG_JSONB() ; +sub PG_JSONBARRAY() ; +sub PG_JSONPATH() ; +sub PG_JSONPATHARRAY() ; +sub PG_LANGUAGE_HANDLER() ; +sub PG_LINE() ; +sub PG_LINEARRAY() ; +sub PG_LSEG() ; +sub PG_LSEGARRAY() ; +sub PG_MACADDR() ; +sub PG_MACADDR8() ; +sub PG_MACADDR8ARRAY() ; +sub PG_MACADDRARRAY() ; +sub PG_MONEY() ; +sub PG_MONEYARRAY() ; +sub PG_NAME() ; +sub PG_NAMEARRAY() ; +sub PG_NUMERIC() ; +sub PG_NUMERICARRAY() ; +sub PG_NUMRANGE() ; +sub PG_NUMRANGEARRAY() ; +sub PG_OID() ; +sub PG_OIDARRAY() ; +sub PG_OIDVECTOR() ; +sub PG_OIDVECTORARRAY() ; +sub PG_OLDQUERY_CANCEL() ; +sub PG_OLDQUERY_WAIT() ; +sub PG_OPAQUE() ; +sub PG_PATH() ; +sub PG_PATHARRAY() ; +sub PG_PG_ATTRIBUTE() ; +sub PG_PG_CLASS() ; +sub PG_PG_DDL_COMMAND() ; +sub PG_PG_DEPENDENCIES() ; +sub PG_PG_LSN() ; +sub PG_PG_LSNARRAY() ; +sub PG_PG_MCV_LIST() ; +sub PG_PG_NDISTINCT() ; +sub PG_PG_NODE_TREE() ; +sub PG_PG_PROC() ; +sub PG_PG_TYPE() ; +sub PG_POINT() ; +sub PG_POINTARRAY() ; +sub PG_POLYGON() ; +sub PG_POLYGONARRAY() ; +sub PG_RECORD() ; +sub PG_RECORDARRAY() ; +sub PG_REFCURSOR() ; +sub PG_REFCURSORARRAY() ; +sub PG_REGCLASS() ; +sub PG_REGCLASSARRAY() ; +sub PG_REGCONFIG() ; +sub PG_REGCONFIGARRAY() ; +sub PG_REGDICTIONARY() ; +sub PG_REGDICTIONARYARRAY() ; +sub PG_REGNAMESPACE() ; +sub PG_REGNAMESPACEARRAY() ; +sub PG_REGOPER() ; +sub PG_REGOPERARRAY() ; +sub PG_REGOPERATOR() ; +sub PG_REGOPERATORARRAY() ; +sub PG_REGPROC() ; +sub PG_REGPROCARRAY() ; +sub PG_REGPROCEDURE() ; +sub PG_REGPROCEDUREARRAY() ; +sub PG_REGROLE() ; +sub PG_REGROLEARRAY() ; +sub PG_REGTYPE() ; +sub PG_REGTYPEARRAY() ; +sub PG_TABLE_AM_HANDLER() ; +sub PG_TEXT() ; +sub PG_TEXTARRAY() ; +sub PG_TID() ; +sub PG_TIDARRAY() ; +sub PG_TIME() ; +sub PG_TIMEARRAY() ; +sub PG_TIMESTAMP() ; +sub PG_TIMESTAMPARRAY() ; +sub PG_TIMESTAMPTZ() ; +sub PG_TIMESTAMPTZARRAY() ; +sub PG_TIMETZ() ; +sub PG_TIMETZARRAY() ; +sub PG_TRIGGER() ; +sub PG_TSM_HANDLER() ; +sub PG_TSQUERY() ; +sub PG_TSQUERYARRAY() ; +sub PG_TSRANGE() ; +sub PG_TSRANGEARRAY() ; +sub PG_TSTZRANGE() ; +sub PG_TSTZRANGEARRAY() ; +sub PG_TSVECTOR() ; +sub PG_TSVECTORARRAY() ; +sub PG_TXID_SNAPSHOT() ; +sub PG_TXID_SNAPSHOTARRAY() ; +sub PG_UNKNOWN() ; +sub PG_UUID() ; +sub PG_UUIDARRAY() ; +sub PG_VARBIT() ; +sub PG_VARBITARRAY() ; +sub PG_VARCHAR() ; +sub PG_VARCHARARRAY() ; +sub PG_VOID() ; +sub PG_XID() ; +sub PG_XIDARRAY() ; +sub PG_XML() ; +sub PG_XMLARRAY() ; +sub constant() ; +} +package DBD::Pg::db { +sub DESTROY; +sub FETCH; +sub SQL_ALL_TYPES() ; +sub SQL_ARRAY() ; +sub SQL_ARRAY_LOCATOR() ; +sub SQL_BIGINT() ; +sub SQL_BINARY() ; +sub SQL_BIT() ; +sub SQL_BLOB() ; +sub SQL_BLOB_LOCATOR() ; +sub SQL_BOOLEAN() ; +sub SQL_CHAR() ; +sub SQL_CLOB() ; +sub SQL_CLOB_LOCATOR() ; +sub SQL_DATE() ; +sub SQL_DATETIME() ; +sub SQL_DECIMAL() ; +sub SQL_DOUBLE() ; +sub SQL_FLOAT() ; +sub SQL_GUID() ; +sub SQL_INTEGER() ; +sub SQL_INTERVAL() ; +sub SQL_INTERVAL_DAY() ; +sub SQL_INTERVAL_DAY_TO_HOUR() ; +sub SQL_INTERVAL_DAY_TO_MINUTE() ; +sub SQL_INTERVAL_DAY_TO_SECOND() ; +sub SQL_INTERVAL_HOUR() ; +sub SQL_INTERVAL_HOUR_TO_MINUTE() ; +sub SQL_INTERVAL_HOUR_TO_SECOND() ; +sub SQL_INTERVAL_MINUTE() ; +sub SQL_INTERVAL_MINUTE_TO_SECOND() ; +sub SQL_INTERVAL_MONTH() ; +sub SQL_INTERVAL_SECOND() ; +sub SQL_INTERVAL_YEAR() ; +sub SQL_INTERVAL_YEAR_TO_MONTH() ; +sub SQL_LONGVARBINARY() ; +sub SQL_LONGVARCHAR() ; +sub SQL_MULTISET() ; +sub SQL_MULTISET_LOCATOR() ; +sub SQL_NUMERIC() ; +sub SQL_REAL() ; +sub SQL_REF() ; +sub SQL_ROW() ; +sub SQL_SMALLINT() ; +sub SQL_TIME() ; +sub SQL_TIMESTAMP() ; +sub SQL_TINYINT() ; +sub SQL_TYPE_DATE() ; +sub SQL_TYPE_TIME() ; +sub SQL_TYPE_TIMESTAMP() ; +sub SQL_TYPE_TIMESTAMP_WITH_TIMEZONE() ; +sub SQL_TYPE_TIME_WITH_TIMEZONE() ; +sub SQL_UDT() ; +sub SQL_UDT_LOCATOR() ; +sub SQL_UNKNOWN_TYPE() ; +sub SQL_VARBINARY() ; +sub SQL_VARCHAR() ; +sub SQL_WCHAR() ; +sub SQL_WLONGVARCHAR() ; +sub SQL_WVARCHAR() ; +sub STORE; +sub _login; +sub _pg_type_info; +sub _ping; +sub commit; +sub disconnect; +sub do($$;$@) ; +sub endcopy; +sub getfd; +sub getline; +sub lo_close; +sub lo_creat; +sub lo_export; +sub lo_import; +sub lo_lseek; +sub lo_open; +sub lo_read; +sub lo_tell; +sub lo_unlink; +sub lo_write; +sub pg_cancel; +sub pg_endcopy; +sub pg_getcopydata; +sub pg_getcopydata_async; +sub pg_getline; +sub pg_lo_close; +sub pg_lo_creat; +sub pg_lo_export; +sub pg_lo_import; +sub pg_lo_import_with_oid; +sub pg_lo_lseek; +sub pg_lo_open; +sub pg_lo_read; +sub pg_lo_tell; +sub pg_lo_truncate; +sub pg_lo_unlink; +sub pg_lo_write; +sub pg_notifies; +sub pg_putcopydata; +sub pg_putcopyend; +sub pg_putline; +sub pg_ready; +sub pg_release; +sub pg_result; +sub pg_rollback_to; +sub pg_savepoint; +sub pg_server_trace; +sub pg_server_untrace; +sub putline; +sub quote; +sub rollback; +sub selectall_arrayref; +sub selectrow_array; +sub selectrow_arrayref; +sub state; +} +package DBD::Pg::dr { +sub dbixs_revision; +sub discon_all_; +sub disconnect_all; +} +package DBD::Pg::st { +sub DESTROY; +sub FETCH; +sub FETCH_attrib; +sub STORE; +sub _prepare; +sub bind_param; +sub bind_param_inout; +sub blob_read; +sub cancel; +sub execute; +sub fetch; +sub fetchall_arrayref; +sub fetchrow; +sub fetchrow_array; +sub fetchrow_arrayref; +sub finish; +sub pg_cancel; +sub pg_canonical_ids; +sub pg_canonical_names; +sub pg_ready; +sub pg_result; +sub rows; +sub state; +} +package DBD::SQLite { +sub ALTER_TABLE() ; +sub ANALYZE() ; +sub ATTACH() ; +sub COPY() ; +sub CREATE_INDEX() ; +sub CREATE_TABLE() ; +sub CREATE_TEMP_INDEX() ; +sub CREATE_TEMP_TABLE() ; +sub CREATE_TEMP_TRIGGER() ; +sub CREATE_TEMP_VIEW() ; +sub CREATE_TRIGGER() ; +sub CREATE_VIEW() ; +sub CREATE_VTABLE() ; +sub DELETE() ; +sub DENY() ; +sub DETACH() ; +sub DROP_INDEX() ; +sub DROP_TABLE() ; +sub DROP_TEMP_INDEX() ; +sub DROP_TEMP_TABLE() ; +sub DROP_TEMP_TRIGGER() ; +sub DROP_TEMP_VIEW() ; +sub DROP_TRIGGER() ; +sub DROP_VIEW() ; +sub DROP_VTABLE() ; +sub FUNCTION() ; +sub IGNORE() ; +sub INSERT() ; +sub OK() ; +sub OPEN_CREATE() ; +sub OPEN_FULLMUTEX() ; +sub OPEN_MEMORY() ; +sub OPEN_NOMUTEX() ; +sub OPEN_PRIVATECACHE() ; +sub OPEN_READONLY() ; +sub OPEN_READWRITE() ; +sub OPEN_SHAREDCACHE() ; +sub OPEN_URI() ; +sub PRAGMA() ; +sub READ() ; +sub RECURSIVE() ; +sub REINDEX() ; +sub SAVEPOINT() ; +sub SELECT() ; +sub TRANSACTION() ; +sub UPDATE() ; +sub _const__authorizer_action_codes() ; +sub _const__authorizer_action_codes_3006008() ; +sub _const__authorizer_action_codes_3008003() ; +sub _const__authorizer_return_codes() ; +sub _const__flags_for_file_open_operations() ; +sub _const__flags_for_file_open_operations_3006002() ; +sub _const__flags_for_file_open_operations_3006018() ; +sub _const__flags_for_file_open_operations_3007007() ; +sub _const__flags_for_file_open_operations_3007013() ; +sub compile_options; +sub sqlite_status; +sub strglob; +sub strlike; +} +package DBD::SQLite::Constants { +sub SQLITE_ABORT() ; +sub SQLITE_ABORT_ROLLBACK() ; +sub SQLITE_ALTER_TABLE() ; +sub SQLITE_ANALYZE() ; +sub SQLITE_ATTACH() ; +sub SQLITE_AUTH() ; +sub SQLITE_AUTH_USER() ; +sub SQLITE_BLOB() ; +sub SQLITE_BUSY() ; +sub SQLITE_BUSY_RECOVERY() ; +sub SQLITE_BUSY_SNAPSHOT() ; +sub SQLITE_CANTOPEN() ; +sub SQLITE_CANTOPEN_CONVPATH() ; +sub SQLITE_CANTOPEN_DIRTYWAL() ; +sub SQLITE_CANTOPEN_FULLPATH() ; +sub SQLITE_CANTOPEN_ISDIR() ; +sub SQLITE_CANTOPEN_NOTEMPDIR() ; +sub SQLITE_CONSTRAINT() ; +sub SQLITE_CONSTRAINT_CHECK() ; +sub SQLITE_CONSTRAINT_COMMITHOOK() ; +sub SQLITE_CONSTRAINT_FOREIGNKEY() ; +sub SQLITE_CONSTRAINT_FUNCTION() ; +sub SQLITE_CONSTRAINT_NOTNULL() ; +sub SQLITE_CONSTRAINT_PRIMARYKEY() ; +sub SQLITE_CONSTRAINT_ROWID() ; +sub SQLITE_CONSTRAINT_TRIGGER() ; +sub SQLITE_CONSTRAINT_UNIQUE() ; +sub SQLITE_CONSTRAINT_VTAB() ; +sub SQLITE_COPY() ; +sub SQLITE_CORRUPT() ; +sub SQLITE_CORRUPT_SEQUENCE() ; +sub SQLITE_CORRUPT_VTAB() ; +sub SQLITE_CREATE_INDEX() ; +sub SQLITE_CREATE_TABLE() ; +sub SQLITE_CREATE_TEMP_INDEX() ; +sub SQLITE_CREATE_TEMP_TABLE() ; +sub SQLITE_CREATE_TEMP_TRIGGER() ; +sub SQLITE_CREATE_TEMP_VIEW() ; +sub SQLITE_CREATE_TRIGGER() ; +sub SQLITE_CREATE_VIEW() ; +sub SQLITE_CREATE_VTABLE() ; +sub SQLITE_DBCONFIG_DEFENSIVE() ; +sub SQLITE_DBCONFIG_ENABLE_FKEY() ; +sub SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER() ; +sub SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION() ; +sub SQLITE_DBCONFIG_ENABLE_QPSG() ; +sub SQLITE_DBCONFIG_ENABLE_TRIGGER() ; +sub SQLITE_DBCONFIG_LOOKASIDE() ; +sub SQLITE_DBCONFIG_MAINDBNAME() ; +sub SQLITE_DBCONFIG_MAX() ; +sub SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE() ; +sub SQLITE_DBCONFIG_RESET_DATABASE() ; +sub SQLITE_DBCONFIG_TRIGGER_EQP() ; +sub SQLITE_DELETE() ; +sub SQLITE_DENY() ; +sub SQLITE_DETACH() ; +sub SQLITE_DETERMINISTIC() ; +sub SQLITE_DONE() ; +sub SQLITE_DROP_INDEX() ; +sub SQLITE_DROP_TABLE() ; +sub SQLITE_DROP_TEMP_INDEX() ; +sub SQLITE_DROP_TEMP_TABLE() ; +sub SQLITE_DROP_TEMP_TRIGGER() ; +sub SQLITE_DROP_TEMP_VIEW() ; +sub SQLITE_DROP_TRIGGER() ; +sub SQLITE_DROP_VIEW() ; +sub SQLITE_DROP_VTABLE() ; +sub SQLITE_EMPTY() ; +sub SQLITE_ERROR() ; +sub SQLITE_ERROR_MISSING_COLLSEQ() ; +sub SQLITE_ERROR_RETRY() ; +sub SQLITE_ERROR_SNAPSHOT() ; +sub SQLITE_FLOAT() ; +sub SQLITE_FORMAT() ; +sub SQLITE_FULL() ; +sub SQLITE_FUNCTION() ; +sub SQLITE_IGNORE() ; +sub SQLITE_INSERT() ; +sub SQLITE_INTEGER() ; +sub SQLITE_INTERNAL() ; +sub SQLITE_INTERRUPT() ; +sub SQLITE_IOERR() ; +sub SQLITE_IOERR_ACCESS() ; +sub SQLITE_IOERR_AUTH() ; +sub SQLITE_IOERR_BEGIN_ATOMIC() ; +sub SQLITE_IOERR_BLOCKED() ; +sub SQLITE_IOERR_CHECKRESERVEDLOCK() ; +sub SQLITE_IOERR_CLOSE() ; +sub SQLITE_IOERR_COMMIT_ATOMIC() ; +sub SQLITE_IOERR_CONVPATH() ; +sub SQLITE_IOERR_DELETE() ; +sub SQLITE_IOERR_DELETE_NOENT() ; +sub SQLITE_IOERR_DIR_CLOSE() ; +sub SQLITE_IOERR_DIR_FSYNC() ; +sub SQLITE_IOERR_FSTAT() ; +sub SQLITE_IOERR_FSYNC() ; +sub SQLITE_IOERR_GETTEMPPATH() ; +sub SQLITE_IOERR_LOCK() ; +sub SQLITE_IOERR_MMAP() ; +sub SQLITE_IOERR_NOMEM() ; +sub SQLITE_IOERR_RDLOCK() ; +sub SQLITE_IOERR_READ() ; +sub SQLITE_IOERR_ROLLBACK_ATOMIC() ; +sub SQLITE_IOERR_SEEK() ; +sub SQLITE_IOERR_SHMLOCK() ; +sub SQLITE_IOERR_SHMMAP() ; +sub SQLITE_IOERR_SHMOPEN() ; +sub SQLITE_IOERR_SHMSIZE() ; +sub SQLITE_IOERR_SHORT_READ() ; +sub SQLITE_IOERR_TRUNCATE() ; +sub SQLITE_IOERR_UNLOCK() ; +sub SQLITE_IOERR_VNODE() ; +sub SQLITE_IOERR_WRITE() ; +sub SQLITE_LIMIT_ATTACHED() ; +sub SQLITE_LIMIT_COLUMN() ; +sub SQLITE_LIMIT_COMPOUND_SELECT() ; +sub SQLITE_LIMIT_EXPR_DEPTH() ; +sub SQLITE_LIMIT_FUNCTION_ARG() ; +sub SQLITE_LIMIT_LENGTH() ; +sub SQLITE_LIMIT_LIKE_PATTERN_LENGTH() ; +sub SQLITE_LIMIT_SQL_LENGTH() ; +sub SQLITE_LIMIT_TRIGGER_DEPTH() ; +sub SQLITE_LIMIT_VARIABLE_NUMBER() ; +sub SQLITE_LIMIT_VDBE_OP() ; +sub SQLITE_LIMIT_WORKER_THREADS() ; +sub SQLITE_LOCKED() ; +sub SQLITE_LOCKED_SHAREDCACHE() ; +sub SQLITE_LOCKED_VTAB() ; +sub SQLITE_MISMATCH() ; +sub SQLITE_MISUSE() ; +sub SQLITE_NOLFS() ; +sub SQLITE_NOMEM() ; +sub SQLITE_NOTADB() ; +sub SQLITE_NOTFOUND() ; +sub SQLITE_NOTICE() ; +sub SQLITE_NOTICE_RECOVER_ROLLBACK() ; +sub SQLITE_NOTICE_RECOVER_WAL() ; +sub SQLITE_NULL() ; +sub SQLITE_OK() ; +sub SQLITE_OPEN_CREATE() ; +sub SQLITE_OPEN_FULLMUTEX() ; +sub SQLITE_OPEN_MEMORY() ; +sub SQLITE_OPEN_NOMUTEX() ; +sub SQLITE_OPEN_PRIVATECACHE() ; +sub SQLITE_OPEN_READONLY() ; +sub SQLITE_OPEN_READWRITE() ; +sub SQLITE_OPEN_SHAREDCACHE() ; +sub SQLITE_OPEN_URI() ; +sub SQLITE_PERM() ; +sub SQLITE_PRAGMA() ; +sub SQLITE_PROTOCOL() ; +sub SQLITE_RANGE() ; +sub SQLITE_READ() ; +sub SQLITE_READONLY() ; +sub SQLITE_READONLY_CANTINIT() ; +sub SQLITE_READONLY_CANTLOCK() ; +sub SQLITE_READONLY_DBMOVED() ; +sub SQLITE_READONLY_DIRECTORY() ; +sub SQLITE_READONLY_RECOVERY() ; +sub SQLITE_READONLY_ROLLBACK() ; +sub SQLITE_RECURSIVE() ; +sub SQLITE_REINDEX() ; +sub SQLITE_ROW() ; +sub SQLITE_SAVEPOINT() ; +sub SQLITE_SCHEMA() ; +sub SQLITE_SELECT() ; +sub SQLITE_TOOBIG() ; +sub SQLITE_TRANSACTION() ; +sub SQLITE_UPDATE() ; +sub SQLITE_VERSION_NUMBER() ; +sub SQLITE_WARNING() ; +sub SQLITE_WARNING_AUTOINDEX() ; +sub _const_authorizer_action_codes() ; +sub _const_authorizer_action_codes_3006008() ; +sub _const_authorizer_action_codes_3008003() ; +sub _const_authorizer_return_codes() ; +sub _const_compile_time_library_version_numbers() ; +sub _const_database_connection_configuration_options_3007000() ; +sub _const_database_connection_configuration_options_3007006() ; +sub _const_database_connection_configuration_options_3012002() ; +sub _const_database_connection_configuration_options_3013000() ; +sub _const_database_connection_configuration_options_3015000() ; +sub _const_database_connection_configuration_options_3016000() ; +sub _const_database_connection_configuration_options_3020000() ; +sub _const_database_connection_configuration_options_3022000() ; +sub _const_database_connection_configuration_options_3024000() ; +sub _const_database_connection_configuration_options_3026000() ; +sub _const_extended_result_codes_3006002() ; +sub _const_extended_result_codes_3006005() ; +sub _const_extended_result_codes_3006007() ; +sub _const_extended_result_codes_3006012() ; +sub _const_extended_result_codes_3007000() ; +sub _const_extended_result_codes_3007007() ; +sub _const_extended_result_codes_3007011() ; +sub _const_extended_result_codes_3007012() ; +sub _const_extended_result_codes_3007015() ; +sub _const_extended_result_codes_3007016() ; +sub _const_extended_result_codes_3007017() ; +sub _const_extended_result_codes_3008000() ; +sub _const_extended_result_codes_3008001() ; +sub _const_extended_result_codes_3008002() ; +sub _const_extended_result_codes_3008003() ; +sub _const_extended_result_codes_3008007() ; +sub _const_extended_result_codes_3009000() ; +sub _const_extended_result_codes_3010000() ; +sub _const_extended_result_codes_3021000() ; +sub _const_extended_result_codes_3022000() ; +sub _const_extended_result_codes_3024000() ; +sub _const_extended_result_codes_3025000() ; +sub _const_flags_for_file_open_operations() ; +sub _const_flags_for_file_open_operations_3006002() ; +sub _const_flags_for_file_open_operations_3006018() ; +sub _const_flags_for_file_open_operations_3007007() ; +sub _const_flags_for_file_open_operations_3007013() ; +sub _const_function_flags_3008003() ; +sub _const_fundamental_datatypes() ; +sub _const_result_codes() ; +sub _const_result_codes_3007017() ; +sub _const_run_time_limit_categories() ; +sub _const_run_time_limit_categories_3006018() ; +sub _const_run_time_limit_categories_3008007() ; +} +package DBD::SQLite::db { +sub DESTROY; +sub FETCH; +sub SQL_ALL_TYPES() ; +sub SQL_ARRAY() ; +sub SQL_ARRAY_LOCATOR() ; +sub SQL_BIGINT() ; +sub SQL_BINARY() ; +sub SQL_BIT() ; +sub SQL_BLOB() ; +sub SQL_BLOB_LOCATOR() ; +sub SQL_BOOLEAN() ; +sub SQL_CHAR() ; +sub SQL_CLOB() ; +sub SQL_CLOB_LOCATOR() ; +sub SQL_DATE() ; +sub SQL_DATETIME() ; +sub SQL_DECIMAL() ; +sub SQL_DOUBLE() ; +sub SQL_FLOAT() ; +sub SQL_GUID() ; +sub SQL_INTEGER() ; +sub SQL_INTERVAL() ; +sub SQL_INTERVAL_DAY() ; +sub SQL_INTERVAL_DAY_TO_HOUR() ; +sub SQL_INTERVAL_DAY_TO_MINUTE() ; +sub SQL_INTERVAL_DAY_TO_SECOND() ; +sub SQL_INTERVAL_HOUR() ; +sub SQL_INTERVAL_HOUR_TO_MINUTE() ; +sub SQL_INTERVAL_HOUR_TO_SECOND() ; +sub SQL_INTERVAL_MINUTE() ; +sub SQL_INTERVAL_MINUTE_TO_SECOND() ; +sub SQL_INTERVAL_MONTH() ; +sub SQL_INTERVAL_SECOND() ; +sub SQL_INTERVAL_YEAR() ; +sub SQL_INTERVAL_YEAR_TO_MONTH() ; +sub SQL_LONGVARBINARY() ; +sub SQL_LONGVARCHAR() ; +sub SQL_MULTISET() ; +sub SQL_MULTISET_LOCATOR() ; +sub SQL_NUMERIC() ; +sub SQL_REAL() ; +sub SQL_REF() ; +sub SQL_ROW() ; +sub SQL_SMALLINT() ; +sub SQL_TIME() ; +sub SQL_TIMESTAMP() ; +sub SQL_TINYINT() ; +sub SQL_TYPE_DATE() ; +sub SQL_TYPE_TIME() ; +sub SQL_TYPE_TIMESTAMP() ; +sub SQL_TYPE_TIMESTAMP_WITH_TIMEZONE() ; +sub SQL_TYPE_TIME_WITH_TIMEZONE() ; +sub SQL_UDT() ; +sub SQL_UDT_LOCATOR() ; +sub SQL_UNKNOWN_TYPE() ; +sub SQL_VARBINARY() ; +sub SQL_VARCHAR() ; +sub SQL_WCHAR() ; +sub SQL_WLONGVARCHAR() ; +sub SQL_WVARCHAR() ; +sub STORE; +sub _do; +sub _login; +sub backup_from_dbh; +sub backup_from_file; +sub backup_to_dbh; +sub backup_to_file; +sub busy_timeout; +sub collation_needed; +sub commit; +sub commit_hook; +sub create_aggregate; +sub create_collation; +sub create_function; +sub create_module; +sub db_config; +sub db_filename; +sub db_status; +sub disconnect; +sub enable_load_extension; +sub last_insert_id; +sub last_insert_rowid; +sub limit; +sub load_extension; +sub profile; +sub progress_handler; +sub register_fts3_perl_tokenizer; +sub rollback; +sub rollback_hook; +sub selectall_arrayref; +sub selectrow_array; +sub selectrow_arrayref; +sub set_authorizer; +sub sqlite_backup_from_dbh; +sub sqlite_backup_from_file; +sub sqlite_backup_to_dbh; +sub sqlite_backup_to_file; +sub sqlite_busy_timeout; +sub sqlite_collation_needed; +sub sqlite_commit_hook; +sub sqlite_create_aggregate; +sub sqlite_create_collation; +sub sqlite_create_function; +sub sqlite_create_module; +sub sqlite_db_config; +sub sqlite_db_filename; +sub sqlite_db_status; +sub sqlite_enable_load_extension; +sub sqlite_last_insert_rowid; +sub sqlite_limit; +sub sqlite_load_extension; +sub sqlite_profile; +sub sqlite_progress_handler; +sub sqlite_register_fts3_perl_tokenizer; +sub sqlite_rollback_hook; +sub sqlite_set_authorizer; +sub sqlite_table_column_metadata; +sub sqlite_trace; +sub sqlite_update_hook; +sub table_column_metadata; +sub update_hook; +} +package DBD::SQLite::dr { +sub dbixs_revision; +sub discon_all_; +sub disconnect_all; +} +package DBD::SQLite::st { +sub DESTROY; +sub FETCH; +sub FETCH_attrib; +sub STORE; +sub _prepare; +sub bind_col; +sub bind_param; +sub bind_param_inout; +sub blob_read; +sub execute; +sub fetch; +sub fetchall_arrayref; +sub fetchrow; +sub fetchrow_array; +sub fetchrow_arrayref; +sub finish; +sub rows; +sub sqlite_st_status; +sub st_status; +} +package DBD::_::common { +sub DELETE; +sub DESTROY; +sub FETCH; +sub STORE; +sub debug; +sub dump_handle; +sub err; +sub errstr; +sub private_data; +sub rows; +sub set_err; +sub state; +sub swap_inner_handle; +sub trace; +sub trace_msg; +} +package DBD::_::db { +sub connected; +sub preparse; +sub take_imp_data; +} +package DBD::_::dr { +sub dbixs_revision; +} +package DBD::_::st { +sub DESTROY; +sub _get_fbav; +sub _set_fbav; +sub bind_col; +sub fetch; +sub fetchrow; +sub fetchrow_array; +sub fetchrow_arrayref; +sub fetchrow_hashref; +sub finish; +sub rows; +} +package DBD::_mem::common { +sub DESTROY; +} +package DBD::mysql { +sub constant; +} +package DBD::mysql::GetInfo { +sub dbd_mysql_get_info; +} +package DBD::mysql::db { +sub DESTROY; +sub FETCH; +sub SQL_ALL_TYPES() ; +sub SQL_ARRAY() ; +sub SQL_ARRAY_LOCATOR() ; +sub SQL_BIGINT() ; +sub SQL_BINARY() ; +sub SQL_BIT() ; +sub SQL_BLOB() ; +sub SQL_BLOB_LOCATOR() ; +sub SQL_BOOLEAN() ; +sub SQL_CHAR() ; +sub SQL_CLOB() ; +sub SQL_CLOB_LOCATOR() ; +sub SQL_DATE() ; +sub SQL_DATETIME() ; +sub SQL_DECIMAL() ; +sub SQL_DOUBLE() ; +sub SQL_FLOAT() ; +sub SQL_GUID() ; +sub SQL_INTEGER() ; +sub SQL_INTERVAL() ; +sub SQL_INTERVAL_DAY() ; +sub SQL_INTERVAL_DAY_TO_HOUR() ; +sub SQL_INTERVAL_DAY_TO_MINUTE() ; +sub SQL_INTERVAL_DAY_TO_SECOND() ; +sub SQL_INTERVAL_HOUR() ; +sub SQL_INTERVAL_HOUR_TO_MINUTE() ; +sub SQL_INTERVAL_HOUR_TO_SECOND() ; +sub SQL_INTERVAL_MINUTE() ; +sub SQL_INTERVAL_MINUTE_TO_SECOND() ; +sub SQL_INTERVAL_MONTH() ; +sub SQL_INTERVAL_SECOND() ; +sub SQL_INTERVAL_YEAR() ; +sub SQL_INTERVAL_YEAR_TO_MONTH() ; +sub SQL_LONGVARBINARY() ; +sub SQL_LONGVARCHAR() ; +sub SQL_MULTISET() ; +sub SQL_MULTISET_LOCATOR() ; +sub SQL_NUMERIC() ; +sub SQL_REAL() ; +sub SQL_REF() ; +sub SQL_ROW() ; +sub SQL_SMALLINT() ; +sub SQL_TIME() ; +sub SQL_TIMESTAMP() ; +sub SQL_TINYINT() ; +sub SQL_TYPE_DATE() ; +sub SQL_TYPE_TIME() ; +sub SQL_TYPE_TIMESTAMP() ; +sub SQL_TYPE_TIMESTAMP_WITH_TIMEZONE() ; +sub SQL_TYPE_TIME_WITH_TIMEZONE() ; +sub SQL_UDT() ; +sub SQL_UDT_LOCATOR() ; +sub SQL_UNKNOWN_TYPE() ; +sub SQL_VARBINARY() ; +sub SQL_VARCHAR() ; +sub SQL_WCHAR() ; +sub SQL_WLONGVARCHAR() ; +sub SQL_WVARCHAR() ; +sub STORE; +sub _ListDBs; +sub _async_check; +sub _login; +sub commit; +sub disconnect; +sub do($$;$@) ; +sub last_insert_id; +sub mysql_async_ready; +sub mysql_async_result; +sub mysql_fd; +sub ping($) ; +sub quote($$;$) ; +sub rollback; +sub selectall_arrayref; +sub selectrow_array; +sub selectrow_arrayref; +sub type_info_all; +} +package DBD::mysql::dr { +sub SQL_ALL_TYPES() ; +sub SQL_ARRAY() ; +sub SQL_ARRAY_LOCATOR() ; +sub SQL_BIGINT() ; +sub SQL_BINARY() ; +sub SQL_BIT() ; +sub SQL_BLOB() ; +sub SQL_BLOB_LOCATOR() ; +sub SQL_BOOLEAN() ; +sub SQL_CHAR() ; +sub SQL_CLOB() ; +sub SQL_CLOB_LOCATOR() ; +sub SQL_DATE() ; +sub SQL_DATETIME() ; +sub SQL_DECIMAL() ; +sub SQL_DOUBLE() ; +sub SQL_FLOAT() ; +sub SQL_GUID() ; +sub SQL_INTEGER() ; +sub SQL_INTERVAL() ; +sub SQL_INTERVAL_DAY() ; +sub SQL_INTERVAL_DAY_TO_HOUR() ; +sub SQL_INTERVAL_DAY_TO_MINUTE() ; +sub SQL_INTERVAL_DAY_TO_SECOND() ; +sub SQL_INTERVAL_HOUR() ; +sub SQL_INTERVAL_HOUR_TO_MINUTE() ; +sub SQL_INTERVAL_HOUR_TO_SECOND() ; +sub SQL_INTERVAL_MINUTE() ; +sub SQL_INTERVAL_MINUTE_TO_SECOND() ; +sub SQL_INTERVAL_MONTH() ; +sub SQL_INTERVAL_SECOND() ; +sub SQL_INTERVAL_YEAR() ; +sub SQL_INTERVAL_YEAR_TO_MONTH() ; +sub SQL_LONGVARBINARY() ; +sub SQL_LONGVARCHAR() ; +sub SQL_MULTISET() ; +sub SQL_MULTISET_LOCATOR() ; +sub SQL_NUMERIC() ; +sub SQL_REAL() ; +sub SQL_REF() ; +sub SQL_ROW() ; +sub SQL_SMALLINT() ; +sub SQL_TIME() ; +sub SQL_TIMESTAMP() ; +sub SQL_TINYINT() ; +sub SQL_TYPE_DATE() ; +sub SQL_TYPE_TIME() ; +sub SQL_TYPE_TIMESTAMP() ; +sub SQL_TYPE_TIMESTAMP_WITH_TIMEZONE() ; +sub SQL_TYPE_TIME_WITH_TIMEZONE() ; +sub SQL_UDT() ; +sub SQL_UDT_LOCATOR() ; +sub SQL_UNKNOWN_TYPE() ; +sub SQL_VARBINARY() ; +sub SQL_VARCHAR() ; +sub SQL_WCHAR() ; +sub SQL_WLONGVARCHAR() ; +sub SQL_WVARCHAR() ; +sub _ListDBs; +sub _admin_internal; +sub dbixs_revision; +} +package DBD::mysql::st { +sub DESTROY; +sub FETCH; +sub FETCH_attrib; +sub STORE; +sub _async_check; +sub _prepare; +sub bind_param; +sub bind_param_inout; +sub blob_read; +sub dataseek($$) ; +sub execute; +sub fetch; +sub fetchall_arrayref; +sub fetchrow; +sub fetchrow_array; +sub fetchrow_arrayref; +sub finish; +sub more_results; +sub mysql_async_ready; +sub mysql_async_result; +sub rows; +} +package DBI { +sub DBIf_TRACE_CON() ; +sub DBIf_TRACE_DBD() ; +sub DBIf_TRACE_ENC() ; +sub DBIf_TRACE_SQL() ; +sub DBIf_TRACE_TXN() ; +sub DBIpp_cm_XX() ; +sub DBIpp_cm_br() ; +sub DBIpp_cm_cs() ; +sub DBIpp_cm_dd() ; +sub DBIpp_cm_dw() ; +sub DBIpp_cm_hs() ; +sub DBIpp_ph_XX() ; +sub DBIpp_ph_cn() ; +sub DBIpp_ph_cs() ; +sub DBIpp_ph_qm() ; +sub DBIpp_ph_sp() ; +sub DBIpp_st_XX() ; +sub DBIpp_st_bs() ; +sub DBIpp_st_qq() ; +sub DBIstcf_DISCARD_STRING() ; +sub DBIstcf_STRICT() ; +sub SQL_ALL_TYPES() ; +sub SQL_ARRAY() ; +sub SQL_ARRAY_LOCATOR() ; +sub SQL_BIGINT() ; +sub SQL_BINARY() ; +sub SQL_BIT() ; +sub SQL_BLOB() ; +sub SQL_BLOB_LOCATOR() ; +sub SQL_BOOLEAN() ; +sub SQL_CHAR() ; +sub SQL_CLOB() ; +sub SQL_CLOB_LOCATOR() ; +sub SQL_CURSOR_DYNAMIC() ; +sub SQL_CURSOR_FORWARD_ONLY() ; +sub SQL_CURSOR_KEYSET_DRIVEN() ; +sub SQL_CURSOR_STATIC() ; +sub SQL_CURSOR_TYPE_DEFAULT() ; +sub SQL_DATE() ; +sub SQL_DATETIME() ; +sub SQL_DECIMAL() ; +sub SQL_DOUBLE() ; +sub SQL_FLOAT() ; +sub SQL_GUID() ; +sub SQL_INTEGER() ; +sub SQL_INTERVAL() ; +sub SQL_INTERVAL_DAY() ; +sub SQL_INTERVAL_DAY_TO_HOUR() ; +sub SQL_INTERVAL_DAY_TO_MINUTE() ; +sub SQL_INTERVAL_DAY_TO_SECOND() ; +sub SQL_INTERVAL_HOUR() ; +sub SQL_INTERVAL_HOUR_TO_MINUTE() ; +sub SQL_INTERVAL_HOUR_TO_SECOND() ; +sub SQL_INTERVAL_MINUTE() ; +sub SQL_INTERVAL_MINUTE_TO_SECOND() ; +sub SQL_INTERVAL_MONTH() ; +sub SQL_INTERVAL_SECOND() ; +sub SQL_INTERVAL_YEAR() ; +sub SQL_INTERVAL_YEAR_TO_MONTH() ; +sub SQL_LONGVARBINARY() ; +sub SQL_LONGVARCHAR() ; +sub SQL_MULTISET() ; +sub SQL_MULTISET_LOCATOR() ; +sub SQL_NUMERIC() ; +sub SQL_REAL() ; +sub SQL_REF() ; +sub SQL_ROW() ; +sub SQL_SMALLINT() ; +sub SQL_TIME() ; +sub SQL_TIMESTAMP() ; +sub SQL_TINYINT() ; +sub SQL_TYPE_DATE() ; +sub SQL_TYPE_TIME() ; +sub SQL_TYPE_TIMESTAMP() ; +sub SQL_TYPE_TIMESTAMP_WITH_TIMEZONE() ; +sub SQL_TYPE_TIME_WITH_TIMEZONE() ; +sub SQL_UDT() ; +sub SQL_UDT_LOCATOR() ; +sub SQL_UNKNOWN_TYPE() ; +sub SQL_VARBINARY() ; +sub SQL_VARCHAR() ; +sub SQL_WCHAR() ; +sub SQL_WLONGVARCHAR() ; +sub SQL_WVARCHAR() ; +sub _clone_dbis; +sub _concat_hash_sorted; +sub _dbi_state_lval; +sub _debug_dispatch; +sub _get_imp_data; +sub _handles; +sub _install_method; +sub _new_handle; +sub _setup_handle; +sub _svdump; +sub constant() ; +sub dbi_profile; +sub dbi_profile_merge; +sub dbi_profile_merge_nodes; +sub dbi_time; +sub dump_handle; +sub hash; +sub looks_like_number; +sub neat; +sub set_err; +sub sql_type_cast; +sub trace; +sub trace_msg; +} +package DBI::common { +sub CLEAR; +sub DELETE; +sub DESTROY; +sub EXISTS; +sub FETCH; +sub FETCH_many; +sub FIRSTKEY; +sub NEXTKEY; +sub STORE; +sub can; +sub debug; +sub dump_handle; +sub err; +sub errstr; +sub func; +sub parse_trace_flag; +sub parse_trace_flags; +sub private_attribute_info; +sub private_data; +sub set_err; +sub state; +sub swap_inner_handle; +sub trace; +sub trace_msg; +sub visit_child_handles; +} +package DBI::db { +sub TIEHASH; +sub begin_work; +sub clone; +sub column_info; +sub commit; +sub connected; +sub data_sources; +sub disconnect; +sub do; +sub foreign_key_info; +sub get_info; +sub last_insert_id; +sub ping; +sub prepare; +sub prepare_cached; +sub preparse; +sub primary_key; +sub primary_key_info; +sub quote; +sub quote_identifier; +sub rollback; +sub rows; +sub selectall_array; +sub selectall_arrayref; +sub selectall_hashref; +sub selectcol_arrayref; +sub selectrow_array; +sub selectrow_arrayref; +sub selectrow_hashref; +sub statistics_info; +sub table_info; +sub tables; +sub take_imp_data; +sub type_info; +sub type_info_all; +} +package DBI::dr { +sub TIEHASH; +sub connect; +sub connect_cached; +sub data_sources; +sub dbixs_revision; +sub default_user; +sub disconnect_all; +} +package DBI::st { +sub TIEHASH; +sub _get_fbav; +sub _set_fbav; +sub bind_col; +sub bind_columns; +sub bind_param; +sub bind_param_array; +sub bind_param_inout; +sub bind_param_inout_array; +sub blob_copy_to_file; +sub blob_read; +sub cancel; +sub dump_results; +sub execute; +sub execute_array; +sub execute_for_fetch; +sub fetch; +sub fetchall_arrayref; +sub fetchall_hashref; +sub fetchrow; +sub fetchrow_array; +sub fetchrow_arrayref; +sub fetchrow_hashref; +sub finish; +sub last_insert_id; +sub more_results; +sub rows; +} +package DBI::var { +sub FETCH; +} +package DB_File { +sub DELETE; +sub DESTROY; +sub DoTie_; +sub EXISTS; +sub FETCH; +sub FETCHSIZE; +sub FIRSTKEY; +sub NEXTKEY; +sub O_ALIAS() ; +sub O_ASYNC() ; +sub O_DEFER() ; +sub O_DIRECT() ; +sub O_DIRECTORY() ; +sub O_DSYNC() ; +sub O_EXLOCK() ; +sub O_LARGEFILE() ; +sub O_NDELAY() ; +sub O_NOCTTY() ; +sub O_NOFOLLOW() ; +sub O_NONBLOCK() ; +sub O_RSRC() ; +sub O_RSYNC() ; +sub O_SHLOCK() ; +sub O_SYNC() ; +sub POP; +sub PUSH; +sub SHIFT; +sub STORE; +sub UNSHIFT; +sub constant; +sub del; +sub fd; +sub filter_fetch_key; +sub filter_fetch_value; +sub filter_store_key; +sub filter_store_value; +sub get; +sub length; +sub pop; +sub push; +sub put; +sub seq; +sub shift; +sub sync; +sub unshift; +} +package Data::Dump::Streamer { +sub SvREADONLY_ref($;$) ; +sub SvREFCNT_ref($;$) ; +sub _could_be_dualvar($) ; +sub _globname($) ; +sub _make_ro($) ; +sub alias_av(\@$$) ; +sub alias_hv(\%$$) ; +sub alias_ref; +sub all_keys(\%\@\@) ; +sub blessed($) ; +sub dualvar($$) ; +sub globname($) ; +sub hidden_keys(\%) ; +sub is_numeric($) ; +sub is_regexp($) ; +sub isweak($) ; +sub legal_keys(\%) ; +sub looks_like_number($) ; +sub make_ro($) ; +sub push_alias(\@$) ; +sub readonly($) ; +sub readonly_set($) ; +sub refaddr($) ; +sub refaddr_or_glob($) ; +sub refcount($) ; +sub reftype($) ; +sub reftype_or_glob($) ; +sub regex($) ; +sub regexp_pattern($) ; +sub sv_refcount($) ; +sub weak_refcount($) ; +sub weaken($) ; +} +package Data::Dumper { +sub Dumpxs($;$$) ; +sub _vstring($) ; +} +package DateTime { +sub _accumulated_leap_seconds($$) ; +sub _day_has_leap_second($$) ; +sub _day_length($$) ; +sub _is_leap_year($$) ; +sub _normalize_leap_seconds($$$) ; +sub _normalize_tai_seconds($$$) ; +sub _rd2ymd($$;$) ; +sub _seconds_as_components($$;$$) ; +sub _time_as_seconds($$$$) ; +sub _ymd2rd($$$$) ; +} +package Devel::Declare { +sub clear_lex_stuff; +sub get_curstash_name; +sub get_in_declare; +sub get_lex_stuff; +sub get_linestr; +sub get_linestr_offset; +sub initialize; +sub set_in_declare; +sub set_linestr; +sub setup; +sub toke_move_past_token; +sub toke_scan_ident; +sub toke_scan_str; +sub toke_scan_word; +sub toke_skipspace; +} +package Devel::OverloadInfo { +sub blessed($) ; +} +package Devel::Peek { +sub CvGV; +sub DeadCode; +sub Dump; +sub DumpArray; +sub DumpProg; +sub SvREFCNT(\[$@%&*]) ; +sub fill_mstats; +sub mstat; +sub mstats2hash($\%;$) ; +sub mstats_fillhash(\%;$) ; +sub runops_debug; +} +package Devel::StackTrace { +sub blessed($) ; +} +package Digest::MD2 { +sub DESTROY; +sub add; +sub addfile; +sub b64digest; +sub clone; +sub digest; +sub hexdigest; +sub md2; +sub md2_base64; +sub md2_hex; +sub new; +sub reset; +} +package Digest::MD5 { +sub DESTROY; +sub add; +sub addfile; +sub b64digest; +sub clone; +sub context; +sub digest; +sub hexdigest; +sub md5; +sub md5_base64; +sub md5_hex; +sub new; +sub reset; +} +package Digest::SHA { +sub DESTROY($) ; +sub _addfilebin($$) ; +sub _addfileuniv($$) ; +sub _getstate($) ; +sub _putstate($$) ; +sub add($;@) ; +sub algorithm($) ; +sub b64digest($) ; +sub clone($) ; +sub digest($) ; +sub hashsize($) ; +sub hexdigest($) ; +sub hmac_sha1(;@) ; +sub hmac_sha1_base64(;@) ; +sub hmac_sha1_hex(;@) ; +sub hmac_sha224(;@) ; +sub hmac_sha224_base64(;@) ; +sub hmac_sha224_hex(;@) ; +sub hmac_sha256(;@) ; +sub hmac_sha256_base64(;@) ; +sub hmac_sha256_hex(;@) ; +sub hmac_sha384(;@) ; +sub hmac_sha384_base64(;@) ; +sub hmac_sha384_hex(;@) ; +sub hmac_sha512(;@) ; +sub hmac_sha512224(;@) ; +sub hmac_sha512224_base64(;@) ; +sub hmac_sha512224_hex(;@) ; +sub hmac_sha512256(;@) ; +sub hmac_sha512256_base64(;@) ; +sub hmac_sha512256_hex(;@) ; +sub hmac_sha512_base64(;@) ; +sub hmac_sha512_hex(;@) ; +sub newSHA($$) ; +sub sha1(;@) ; +sub sha1_base64(;@) ; +sub sha1_hex(;@) ; +sub sha224(;@) ; +sub sha224_base64(;@) ; +sub sha224_hex(;@) ; +sub sha256(;@) ; +sub sha256_base64(;@) ; +sub sha256_hex(;@) ; +sub sha384(;@) ; +sub sha384_base64(;@) ; +sub sha384_hex(;@) ; +sub sha512(;@) ; +sub sha512224(;@) ; +sub sha512224_base64(;@) ; +sub sha512224_hex(;@) ; +sub sha512256(;@) ; +sub sha512256_base64(;@) ; +sub sha512256_hex(;@) ; +sub sha512_base64(;@) ; +sub sha512_hex(;@) ; +sub shainit($$) ; +sub sharewind($) ; +sub shawrite($$$) ; +} +package Digest::SHA1 { +sub DESTROY; +sub add; +sub addfile; +sub b64digest; +sub clone; +sub digest; +sub hexdigest; +sub new; +sub sha1; +sub sha1_base64; +sub sha1_hex; +sub sha1_transform; +} +package Digest::Whirlpool { +sub DESTROY; +sub add; +sub clone; +sub digest; +sub hashsize; +sub new; +sub reset; +} +package Digest::base { +sub add; +sub clone; +sub digest; +sub new; +} +package DynaLoader { +sub CLONE; +sub boot_DynaLoader; +sub dl_error; +sub dl_find_symbol; +sub dl_install_xsub; +sub dl_load_file; +sub dl_undef_symbols; +sub dl_unload_file; +} +package EV { +sub _ae_io($$$) ; +sub async($) ; +sub async_ns($) ; +sub backend() ; +sub break(;$) ; +sub check($) ; +sub check_ns($) ; +sub child($$$) ; +sub child_ns($$$) ; +sub default_destroy() ; +sub default_loop(;$) ; +sub depth() ; +sub embed($;$) ; +sub embed_ns($;$) ; +sub embeddable_backends() ; +sub feed_fd_event($;$) ; +sub feed_signal($) ; +sub feed_signal_event($) ; +sub fork($) ; +sub fork_ns($) ; +sub idle($) ; +sub idle_ns($) ; +sub invoke_pending() ; +sub io($$$) ; +sub io_ns($$$) ; +sub iteration() ; +sub loop(;$) ; +sub loop_count() ; +sub loop_depth() ; +sub loop_verify() ; +sub now() ; +sub now_update() ; +sub once($$$$) ; +sub pending_count() ; +sub periodic($$$$) ; +sub periodic_ns($$$$) ; +sub prepare($) ; +sub prepare_ns($) ; +sub recommended_backends() ; +sub resume() ; +sub run(;$) ; +sub set_io_collect_interval($) ; +sub set_timeout_collect_interval($) ; +sub signal($$) ; +sub signal_ns($$) ; +sub sleep($) ; +sub stat($$$) ; +sub stat_ns($$$) ; +sub supported_backends() ; +sub suspend() ; +sub time() ; +sub timer($$$) ; +sub timer_ns($$$) ; +sub unloop(;$) ; +sub verify() ; +} +package EV::Async { +sub DESTROY; +sub async_pending; +sub send; +sub start; +sub stop; +} +package EV::Check { +sub DESTROY; +sub start; +sub stop; +} +package EV::Embed { +sub DESTROY; +sub other; +sub set; +sub start; +sub stop; +sub sweep; +} +package EV::Fork { +sub DESTROY; +sub start; +sub stop; +} +package EV::IO { +sub DESTROY; +sub events; +sub fh; +sub set; +sub start; +sub stop; +} +package EV::Idle { +sub DESTROY; +sub start; +sub stop; +} +package EV::Loop { +sub DESTROY; +sub async; +sub async_ns; +sub backend; +sub break; +sub check; +sub check_ns; +sub child; +sub child_ns; +sub depth; +sub embed; +sub embed_ns; +sub feed_fd_event; +sub fork; +sub fork_ns; +sub idle; +sub idle_ns; +sub invoke_pending; +sub io; +sub io_ns; +sub iteration; +sub loop; +sub loop_count; +sub loop_depth; +sub loop_fork; +sub loop_verify; +sub new; +sub now; +sub now_update; +sub once; +sub pending_count; +sub periodic; +sub periodic_ns; +sub prepare; +sub prepare_ns; +sub resume; +sub run; +sub set_io_collect_interval; +sub set_timeout_collect_interval; +sub signal; +sub signal_ns; +sub stat; +sub stat_ns; +sub suspend; +sub timer; +sub timer_ns; +sub unloop; +sub verify; +} +package EV::Periodic { +sub DESTROY; +sub again; +sub at; +sub set; +sub start; +sub stop; +} +package EV::Prepare { +sub DESTROY; +sub start; +sub stop; +} +package EV::Signal { +sub DESTROY; +sub set; +sub signal; +sub start; +sub stop; +} +package EV::Stat { +sub DESTROY; +sub attr; +sub interval; +sub path; +sub prev; +sub set; +sub start; +sub stat; +sub stop; +} +package EV::Timer { +sub DESTROY; +sub again; +sub remaining; +sub set; +sub start; +sub stop; +} +package EV::Watcher { +sub cb; +sub clear_pending; +sub data; +sub feed_event; +sub invoke; +sub is_active; +sub is_pending; +sub keepalive; +sub loop; +sub priority; +} +package Email::Address::XS { +sub compose_address; +sub format_email_groups; +sub is_obj; +sub parse_email_groups; +sub split_address; +} +package Encode { +sub _utf8_off($) ; +sub _utf8_on($) ; +sub bytes2str($$;$) ; +sub decode($$;$) ; +sub decode_utf8($;$) ; +sub encode($$;$) ; +sub encode_utf8($) ; +sub from_to($$$;$) ; +sub is_utf8($;$) ; +sub onBOOT() ; +sub str2bytes($$;$) ; +} +package Encode::Byte { +sub bytes2str($$;$) ; +sub decode($$;$) ; +sub decode_utf8($;$) ; +sub encode($$;$) ; +sub encode_utf8($) ; +sub str2bytes($$;$) ; +} +package Encode::CN { +sub bytes2str($$;$) ; +sub decode($$;$) ; +sub decode_utf8($;$) ; +sub encode($$;$) ; +sub encode_utf8($) ; +sub str2bytes($$;$) ; +} +package Encode::EBCDIC { +sub bytes2str($$;$) ; +sub decode($$;$) ; +sub decode_utf8($;$) ; +sub encode($$;$) ; +sub encode_utf8($) ; +sub str2bytes($$;$) ; +} +package Encode::JP { +sub bytes2str($$;$) ; +sub decode($$;$) ; +sub decode_utf8($;$) ; +sub encode($$;$) ; +sub encode_utf8($) ; +sub str2bytes($$;$) ; +} +package Encode::KR { +sub bytes2str($$;$) ; +sub decode($$;$) ; +sub decode_utf8($;$) ; +sub encode($$;$) ; +sub encode_utf8($) ; +sub str2bytes($$;$) ; +} +package Encode::Symbol { +sub bytes2str($$;$) ; +sub decode($$;$) ; +sub decode_utf8($;$) ; +sub encode($$;$) ; +sub encode_utf8($) ; +sub str2bytes($$;$) ; +} +package Encode::TW { +sub bytes2str($$;$) ; +sub decode($$;$) ; +sub decode_utf8($;$) ; +sub encode($$;$) ; +sub encode_utf8($) ; +sub str2bytes($$;$) ; +} +package Encode::Unicode { +sub decode; +sub encode; +} +package Encode::XS { +sub cat_decode; +sub decode; +sub encode; +sub mime_name; +sub name; +sub needs_lines; +sub perlio_ok; +sub renew; +sub renewed; +} +package Encode::utf8 { +sub decode; +sub encode; +} +package Eval::Closure { +sub reftype($) ; +} +package Exception::Class { +sub blessed($) ; +sub reftype($) ; +} +package Exception::Class::Base { +sub blessed($) ; +} +package FCGI { +sub Accept($) ; +sub Attach($) ; +sub CloseSocket($) ; +sub DESTROY; +sub Detach($) ; +sub Finish($) ; +sub Flush($) ; +sub GetEnvironment($) ; +sub GetHandles($) ; +sub IsFastCGI($) ; +sub LastCall($) ; +sub OpenSocket($$) ; +sub RequestX(***$$$) ; +sub StartFilterData($) ; +} +package FCGI::Stream { +sub CLOSE; +sub EOF; +sub FILENO; +sub GETC; +sub PRINT; +sub READ; +sub WRITE; +} +package FFI::Raw { +sub DESTROY; +sub call; +sub new; +sub new_from_ptr; +} +package FFI::Raw::Callback { +sub DESTROY; +sub new; +} +package FFI::Raw::MemPtr { +sub DESTROY; +sub new; +sub new_from_buf; +sub new_from_ptr; +sub tostr($;$) ; +} +package Fcntl { +sub AUTOLOAD; +sub DN_ACCESS() ; +sub DN_ATTRIB() ; +sub DN_CREATE() ; +sub DN_DELETE() ; +sub DN_MODIFY() ; +sub DN_MULTISHOT() ; +sub DN_RENAME() ; +sub FAPPEND() ; +sub FASYNC() ; +sub FCREAT() ; +sub FDEFER() ; +sub FDSYNC() ; +sub FD_CLOEXEC() ; +sub FEXCL() ; +sub FLARGEFILE() ; +sub FNDELAY() ; +sub FNONBLOCK() ; +sub FRSYNC() ; +sub FSYNC() ; +sub FTRUNC() ; +sub F_ALLOCSP() ; +sub F_ALLOCSP64() ; +sub F_COMPAT() ; +sub F_DUP2FD() ; +sub F_DUPFD() ; +sub F_EXLCK() ; +sub F_FREESP() ; +sub F_FREESP64() ; +sub F_FSYNC() ; +sub F_FSYNC64() ; +sub F_GETFD() ; +sub F_GETFL() ; +sub F_GETLEASE() ; +sub F_GETLK() ; +sub F_GETLK64() ; +sub F_GETOWN() ; +sub F_GETPIPE_SZ() ; +sub F_GETSIG() ; +sub F_NODNY() ; +sub F_NOTIFY() ; +sub F_POSIX() ; +sub F_RDACC() ; +sub F_RDDNY() ; +sub F_RDLCK() ; +sub F_RWACC() ; +sub F_RWDNY() ; +sub F_SETFD() ; +sub F_SETFL() ; +sub F_SETLEASE() ; +sub F_SETLK() ; +sub F_SETLK64() ; +sub F_SETLKW() ; +sub F_SETLKW64() ; +sub F_SETOWN() ; +sub F_SETPIPE_SZ() ; +sub F_SETSIG() ; +sub F_SHARE() ; +sub F_SHLCK() ; +sub F_UNLCK() ; +sub F_UNSHARE() ; +sub F_WRACC() ; +sub F_WRDNY() ; +sub F_WRLCK() ; +sub LOCK_MAND() ; +sub LOCK_READ() ; +sub LOCK_RW() ; +sub LOCK_WRITE() ; +sub O_ALIAS() ; +sub O_ALT_IO() ; +sub O_ASYNC() ; +sub O_DEFER() ; +sub O_DIRECT() ; +sub O_DIRECTORY() ; +sub O_DSYNC() ; +sub O_EVTONLY() ; +sub O_EXLOCK() ; +sub O_IGNORE_CTTY() ; +sub O_LARGEFILE() ; +sub O_NDELAY() ; +sub O_NOATIME() ; +sub O_NOCTTY() ; +sub O_NOFOLLOW() ; +sub O_NOLINK() ; +sub O_NONBLOCK() ; +sub O_NOSIGPIPE() ; +sub O_NOTRANS() ; +sub O_RSRC() ; +sub O_RSYNC() ; +sub O_SHLOCK() ; +sub O_SYMLINK() ; +sub O_SYNC() ; +sub O_TTY_INIT() ; +sub S_ENFMT() ; +sub S_IFLNK() ; +sub S_IFMT; +sub S_IFSOCK() ; +sub S_IFWHT() ; +sub S_IMODE; +sub S_ISBLK; +sub S_ISCHR; +sub S_ISDIR; +sub S_ISFIFO; +sub S_ISREG; +sub S_ISTXT() ; +sub S_ISVTX() ; +} +package File::DosGlob { +sub _callsite; +} +package File::Find { +sub is_tainted($) ; +} +package File::Glob { +sub AUTOLOAD; +sub CLONE; +sub GLOB_ERROR; +sub bsd_glob; +sub bsd_glob_override; +sub csh_glob; +} +package File::Map { +sub _mmap_impl; +sub _protection_value; +sub advise; +sub broadcast; +sub lock_map; +sub notify; +sub pin; +sub protect; +sub sync; +sub unmap; +sub unpin; +sub wait_until(&@) ; +} +package File::ShareDir { +sub _STRING($) ; +sub firstres(&@) ; +} +package File::Spec::Unix { +sub _fn_canonpath; +sub _fn_catdir; +sub _fn_catfile; +sub canonpath; +sub catdir; +sub catfile; +} +package FileHandle { +sub clearerr; +sub error; +sub flush; +sub getpos; +sub new_tmpfile; +sub setbuf; +sub setpos; +sub setvbuf; +sub ungetc; +} +package Filter::Util::Call { +sub filter_del() ; +sub filter_read(;$) ; +sub real_import($$$) ; +sub unimport(;$@) ; +} +package GD { +sub LIBGD_VERSION; +sub VERSION_STRING; +sub constant; +sub supportsFileType($;$) ; +} +package GD::Font { +sub DESTROY($) ; +sub Giant($) ; +sub Large($) ; +sub MediumBold($) ; +sub Small($) ; +sub Tiny($) ; +sub height($) ; +sub load($$) ; +sub nchars($) ; +sub offset($) ; +sub width($) ; +} +package GD::Image { +sub DESTROY($) ; +sub STORABLE_freeze($$) ; +sub STORABLE_thaw; +sub _file($$) ; +sub _new($;$$$) ; +sub _newFromGd($$) ; +sub _newFromGd2($$) ; +sub _newFromGd2Part($$$$$$) ; +sub _newFromGif($$;$) ; +sub _newFromJpeg($$;$) ; +sub _newFromPng($$;$) ; +sub _newFromWBMP($$) ; +sub _newFromXbm($$) ; +sub alpha($$) ; +sub alphaBlending($$) ; +sub arc($$$$$$$$) ; +sub boundsSafe($$$) ; +sub brightness($$) ; +sub char($$$$$$) ; +sub charUp($$$$$$) ; +sub clip($;$$$$) ; +sub color($$$$$) ; +sub colorAllocate($$$$) ; +sub colorAllocateAlpha($$$$$) ; +sub colorClosest($$$$) ; +sub colorClosestAlpha($$$$$) ; +sub colorClosestHWB($$$$) ; +sub colorDeallocate($$) ; +sub colorExact($$$$) ; +sub colorExactAlpha($$$$$) ; +sub colorMatch($$) ; +sub colorResolve($$$$) ; +sub colorResolveAlpha($$$$$) ; +sub colorsTotal($) ; +sub compare($$) ; +sub contrast($$) ; +sub copy($$$$$$$$) ; +sub copyFlipHorizontal($) ; +sub copyFlipVertical($) ; +sub copyGaussianBlurred($$$) ; +sub copyMerge($$$$$$$$$) ; +sub copyMergeGray($$$$$$$$$) ; +sub copyResampled($$$$$$$$$$) ; +sub copyResized($$$$$$$$$$) ; +sub copyReverseTranspose($) ; +sub copyRotate180($) ; +sub copyRotate270($) ; +sub copyRotate90($) ; +sub copyRotateInterpolated($$$) ; +sub copyRotated($$$$$$$$$) ; +sub copyScaleInterpolated($$$) ; +sub copyTranspose($) ; +sub createPaletteFromTrueColor($;$$) ; +sub dashedLine($$$$$$) ; +sub edgeDetectQuick($) ; +sub emboss($) ; +sub fill($$$$) ; +sub fillToBorder($$$$$) ; +sub filledArc($$$$$$$$$) ; +sub filledEllipse($$$$$$) ; +sub filledPolygon($$$) ; +sub filledRectangle($$$$$$) ; +sub flipHorizontal($) ; +sub flipVertical($) ; +sub gaussianBlur($) ; +sub gd($) ; +sub gd2($) ; +sub getBounds($) ; +sub getPixel($$$) ; +sub gif($) ; +sub gifanimadd($$$$$$$) ; +sub gifanimbegin($$$) ; +sub gifanimend($) ; +sub grayscale($) ; +sub interlaced($;$) ; +sub interpolationMethod($;$) ; +sub isTrueColor($) ; +sub jpeg($) ; +sub line($$$$$$) ; +sub meanRemoval($) ; +sub negate($) ; +sub neuQuant($;$$) ; +sub newFromGd2Data($$) ; +sub newFromGdData($$) ; +sub newFromGifData($$;$) ; +sub newFromJpegData($$;$) ; +sub newFromPngData($$;$) ; +sub newFromWBMPData($$;$) ; +sub newFromXpm($$) ; +sub openPolygon($$$) ; +sub paletteCopy($$) ; +sub pixelate($$$) ; +sub png($;$) ; +sub rectangle($$$$$$) ; +sub rgb($$) ; +sub rotate180($) ; +sub saveAlpha($$) ; +sub scatter($$$) ; +sub scatterColor($$$\@) ; +sub selectiveBlur($) ; +sub setAntiAliased($$) ; +sub setAntiAliasedDontBlend($$$) ; +sub setBrush($$) ; +sub setPixel($$$$) ; +sub setStyle($;$) ; +sub setThickness($$) ; +sub setTile($$) ; +sub smooth($$) ; +sub string($$$$$$) ; +sub stringFT($$$$$$$$;$) ; +sub stringFTCircle($$$$$$$$$$$) ; +sub stringTTF($$$$$$$$;$) ; +sub stringUp($$$$$$) ; +sub transparent($;$) ; +sub trueColor($$) ; +sub trueColorToPalette($;$$) ; +sub unclosedPolygon($$$) ; +sub useFontConfig($$) ; +sub wbmp($) ; +} +package GDBM_File { +sub AUTOLOAD; +sub DELETE; +sub DESTROY; +sub EXISTS; +sub FETCH; +sub FIRSTKEY; +sub NEXTKEY; +sub STORE; +sub TIEHASH; +sub close; +sub filter_fetch_key; +sub filter_fetch_value; +sub filter_store_key; +sub filter_store_value; +sub reorganize; +sub setopt; +sub sync; +} +package HTML::Entities { +sub UNICODE_SUPPORT() ; +sub _decode_entities; +sub _probably_utf8_chunk; +sub decode; +sub decode_entities; +} +package HTML::Parser { +sub _alloc_pstate; +sub attr_encoded; +sub backquote; +sub boolean_attribute_value; +sub case_sensitive; +sub closing_plaintext; +sub empty_element_tags; +sub eof; +sub handler; +sub ignore_elements; +sub ignore_tags; +sub marked_sections; +sub parse; +sub report_tags; +sub strict_comment; +sub strict_end; +sub strict_names; +sub unbroken_text; +sub utf8_mode; +sub xml_mode; +sub xml_pic; +} +package Hash::Util { +sub _clear_placeholders(\%) ; +sub all_keys(\%\@\@) ; +sub bucket_array; +sub bucket_info; +sub bucket_ratio(\%) ; +sub hash_seed() ; +sub hash_traversal_mask; +sub hash_value($;$) ; +sub hidden_ref_keys; +sub hv_store(\%$$) ; +sub legal_ref_keys; +sub num_buckets(\%) ; +sub reftype($) ; +sub used_buckets(\%) ; +} +package Hash::Util::FieldHash { +sub CLONE; +sub _active_fields; +sub _fieldhash($$) ; +sub _test_uvar_get; +sub _test_uvar_same; +sub _test_uvar_set; +sub id($) ; +sub id_2obj($) ; +sub reftype($) ; +sub register($@) ; +} +package I18N::Langinfo { +sub AUTOLOAD; +sub langinfo(_) ; +} +package IO::File { +sub O_ALIAS() ; +sub O_ASYNC() ; +sub O_DEFER() ; +sub O_DIRECT() ; +sub O_DIRECTORY() ; +sub O_DSYNC() ; +sub O_EXLOCK() ; +sub O_LARGEFILE() ; +sub O_NDELAY() ; +sub O_NOCTTY() ; +sub O_NOFOLLOW() ; +sub O_NONBLOCK() ; +sub O_RSRC() ; +sub O_RSYNC() ; +sub O_SHLOCK() ; +sub O_SYNC() ; +sub new_tmpfile; +} +package IO::Handle { +sub _create_getline_subs; +sub blocking($;$) ; +sub clearerr; +sub error; +sub flush; +sub setbuf; +sub setvbuf; +sub sync; +sub ungetc; +sub untaint; +} +package IO::Poll { +sub _poll; +} +package IO::Seekable { +sub getpos; +sub setpos; +} +package IO::Socket { +sub AF_802() ; +sub AF_AAL() ; +sub AF_CTF() ; +sub AF_GOSIP() ; +sub AF_KEY() ; +sub AF_LAST() ; +sub AF_LINK() ; +sub AF_NBS() ; +sub AF_NIT() ; +sub AF_OSINET() ; +sub AF_ROUTE() ; +sub AF_USER() ; +sub AF_WAN() ; +sub AF_X25() ; +sub IOV_MAX() ; +sub IP_RECVOPTS() ; +sub IP_RECVRETOPTS() ; +sub IP_RETOPTS() ; +sub MSG_BCAST() ; +sub MSG_BTAG() ; +sub MSG_CTLFLAGS() ; +sub MSG_CTLIGNORE() ; +sub MSG_CTRUNC() ; +sub MSG_DONTWAIT() ; +sub MSG_EOF() ; +sub MSG_EOR() ; +sub MSG_ERRQUEUE() ; +sub MSG_ETAG() ; +sub MSG_FASTOPEN() ; +sub MSG_FIN() ; +sub MSG_MCAST() ; +sub MSG_NOSIGNAL() ; +sub MSG_PROXY() ; +sub MSG_RST() ; +sub MSG_SYN() ; +sub MSG_TRUNC() ; +sub MSG_URG() ; +sub MSG_WIRE() ; +sub PF_802() ; +sub PF_AAL() ; +sub PF_CTF() ; +sub PF_GOSIP() ; +sub PF_KEY() ; +sub PF_LAST() ; +sub PF_LINK() ; +sub PF_NBS() ; +sub PF_NIT() ; +sub PF_OSINET() ; +sub PF_ROUTE() ; +sub PF_USER() ; +sub PF_WAN() ; +sub PF_X25() ; +sub SCM_CONNECT() ; +sub SCM_CREDENTIALS() ; +sub SCM_CREDS() ; +sub SCM_RIGHTS() ; +sub SCM_TIMESTAMP() ; +sub SO_ATTACH_FILTER() ; +sub SO_BACKLOG() ; +sub SO_CHAMELEON() ; +sub SO_DETACH_FILTER() ; +sub SO_DGRAM_ERRIND() ; +sub SO_DOMAIN() ; +sub SO_FAMILY() ; +sub SO_PASSCRED() ; +sub SO_PASSIFNAME() ; +sub SO_PEERCRED() ; +sub SO_PROTOCOL() ; +sub SO_PROTOTYPE() ; +sub SO_REUSEPORT() ; +sub SO_SECURITY_AUTHENTICATION() ; +sub SO_SECURITY_ENCRYPTION_NETWORK() ; +sub SO_SECURITY_ENCRYPTION_TRANSPORT() ; +sub SO_STATE() ; +sub SO_XOPEN() ; +sub SO_XSE() ; +sub UIO_MAXIOV() ; +sub inet_aton; +sub inet_ntoa; +sub pack_sockaddr_in6; +sub pack_sockaddr_in; +sub pack_sockaddr_un; +sub sockaddr_family; +sub sockatmark($) ; +sub unpack_sockaddr_in6; +sub unpack_sockaddr_in; +sub unpack_sockaddr_un; +} +package IO::Socket::INET { +sub AF_802() ; +sub AF_AAL() ; +sub AF_CTF() ; +sub AF_GOSIP() ; +sub AF_KEY() ; +sub AF_LAST() ; +sub AF_LINK() ; +sub AF_NBS() ; +sub AF_NIT() ; +sub AF_OSINET() ; +sub AF_ROUTE() ; +sub AF_USER() ; +sub AF_WAN() ; +sub AF_X25() ; +sub IOV_MAX() ; +sub IP_RECVOPTS() ; +sub IP_RECVRETOPTS() ; +sub IP_RETOPTS() ; +sub MSG_BCAST() ; +sub MSG_BTAG() ; +sub MSG_CTLFLAGS() ; +sub MSG_CTLIGNORE() ; +sub MSG_CTRUNC() ; +sub MSG_DONTWAIT() ; +sub MSG_EOF() ; +sub MSG_EOR() ; +sub MSG_ERRQUEUE() ; +sub MSG_ETAG() ; +sub MSG_FASTOPEN() ; +sub MSG_FIN() ; +sub MSG_MCAST() ; +sub MSG_NOSIGNAL() ; +sub MSG_PROXY() ; +sub MSG_RST() ; +sub MSG_SYN() ; +sub MSG_TRUNC() ; +sub MSG_URG() ; +sub MSG_WIRE() ; +sub PF_802() ; +sub PF_AAL() ; +sub PF_CTF() ; +sub PF_GOSIP() ; +sub PF_KEY() ; +sub PF_LAST() ; +sub PF_LINK() ; +sub PF_NBS() ; +sub PF_NIT() ; +sub PF_OSINET() ; +sub PF_ROUTE() ; +sub PF_USER() ; +sub PF_WAN() ; +sub PF_X25() ; +sub SCM_CONNECT() ; +sub SCM_CREDENTIALS() ; +sub SCM_CREDS() ; +sub SCM_RIGHTS() ; +sub SCM_TIMESTAMP() ; +sub SO_ATTACH_FILTER() ; +sub SO_BACKLOG() ; +sub SO_CHAMELEON() ; +sub SO_DETACH_FILTER() ; +sub SO_DGRAM_ERRIND() ; +sub SO_DOMAIN() ; +sub SO_FAMILY() ; +sub SO_PASSCRED() ; +sub SO_PASSIFNAME() ; +sub SO_PEERCRED() ; +sub SO_PROTOCOL() ; +sub SO_PROTOTYPE() ; +sub SO_REUSEPORT() ; +sub SO_SECURITY_AUTHENTICATION() ; +sub SO_SECURITY_ENCRYPTION_NETWORK() ; +sub SO_SECURITY_ENCRYPTION_TRANSPORT() ; +sub SO_STATE() ; +sub SO_XOPEN() ; +sub SO_XSE() ; +sub UIO_MAXIOV() ; +sub inet_aton; +sub inet_ntoa; +sub pack_sockaddr_in6; +sub pack_sockaddr_in; +sub pack_sockaddr_un; +sub sockaddr_family; +sub unpack_sockaddr_in6; +sub unpack_sockaddr_in; +sub unpack_sockaddr_un; +} +package IO::Socket::IP { +sub SO_REUSEPORT() ; +sub dup2; +sub getaddrinfo; +sub getnameinfo; +sub sockaddr_family; +} +package IO::Socket::UNIX { +sub AF_802() ; +sub AF_AAL() ; +sub AF_CTF() ; +sub AF_GOSIP() ; +sub AF_KEY() ; +sub AF_LAST() ; +sub AF_LINK() ; +sub AF_NBS() ; +sub AF_NIT() ; +sub AF_OSINET() ; +sub AF_ROUTE() ; +sub AF_USER() ; +sub AF_WAN() ; +sub AF_X25() ; +sub IOV_MAX() ; +sub IP_RECVOPTS() ; +sub IP_RECVRETOPTS() ; +sub IP_RETOPTS() ; +sub MSG_BCAST() ; +sub MSG_BTAG() ; +sub MSG_CTLFLAGS() ; +sub MSG_CTLIGNORE() ; +sub MSG_CTRUNC() ; +sub MSG_DONTWAIT() ; +sub MSG_EOF() ; +sub MSG_EOR() ; +sub MSG_ERRQUEUE() ; +sub MSG_ETAG() ; +sub MSG_FASTOPEN() ; +sub MSG_FIN() ; +sub MSG_MCAST() ; +sub MSG_NOSIGNAL() ; +sub MSG_PROXY() ; +sub MSG_RST() ; +sub MSG_SYN() ; +sub MSG_TRUNC() ; +sub MSG_URG() ; +sub MSG_WIRE() ; +sub PF_802() ; +sub PF_AAL() ; +sub PF_CTF() ; +sub PF_GOSIP() ; +sub PF_KEY() ; +sub PF_LAST() ; +sub PF_LINK() ; +sub PF_NBS() ; +sub PF_NIT() ; +sub PF_OSINET() ; +sub PF_ROUTE() ; +sub PF_USER() ; +sub PF_WAN() ; +sub PF_X25() ; +sub SCM_CONNECT() ; +sub SCM_CREDENTIALS() ; +sub SCM_CREDS() ; +sub SCM_RIGHTS() ; +sub SCM_TIMESTAMP() ; +sub SO_ATTACH_FILTER() ; +sub SO_BACKLOG() ; +sub SO_CHAMELEON() ; +sub SO_DETACH_FILTER() ; +sub SO_DGRAM_ERRIND() ; +sub SO_DOMAIN() ; +sub SO_FAMILY() ; +sub SO_PASSCRED() ; +sub SO_PASSIFNAME() ; +sub SO_PEERCRED() ; +sub SO_PROTOCOL() ; +sub SO_PROTOTYPE() ; +sub SO_REUSEPORT() ; +sub SO_SECURITY_AUTHENTICATION() ; +sub SO_SECURITY_ENCRYPTION_NETWORK() ; +sub SO_SECURITY_ENCRYPTION_TRANSPORT() ; +sub SO_STATE() ; +sub SO_XOPEN() ; +sub SO_XSE() ; +sub UIO_MAXIOV() ; +sub inet_aton; +sub inet_ntoa; +sub pack_sockaddr_in6; +sub pack_sockaddr_in; +sub pack_sockaddr_un; +sub sockaddr_family; +sub unpack_sockaddr_in6; +sub unpack_sockaddr_in; +sub unpack_sockaddr_un; +} +package Imager { +sub DSO_call($$$) ; +sub DSO_close($) ; +sub DSO_funclist($) ; +sub DSO_open($) ; +sub O_ALIAS() ; +sub O_ASYNC() ; +sub O_DEFER() ; +sub O_DIRECT() ; +sub O_DIRECTORY() ; +sub O_DSYNC() ; +sub O_EXLOCK() ; +sub O_LARGEFILE() ; +sub O_NDELAY() ; +sub O_NOCTTY() ; +sub O_NOFOLLOW() ; +sub O_NONBLOCK() ; +sub O_RSRC() ; +sub O_RSYNC() ; +sub O_SHLOCK() ; +sub O_SYNC() ; +sub _is_color_object($) ; +sub i_add_file_magic($$$) ; +sub i_addcolors($;@) ; +sub i_arc($$$$$$$) ; +sub i_arc_aa($$$$$$$) ; +sub i_arc_aa_cfill($$$$$$$) ; +sub i_arc_cfill($$$$$$$) ; +sub i_arc_out($$$$$$$) ; +sub i_arc_out_aa($$$$$$$) ; +sub i_autolevels($$$$) ; +sub i_autolevels_mono($$$) ; +sub i_bezier_multi($$$$) ; +sub i_box($$$$$$) ; +sub i_box_cfill($$$$$$) ; +sub i_box_filled($$$$$$) ; +sub i_box_filledf($$$$$$) ; +sub i_bumpmap($$$$$$) ; +sub i_bumpmap_complex($$$$$$$$$$$$$$) ; +sub i_circle_aa($$$$$) ; +sub i_circle_aa_fill($$$$$) ; +sub i_circle_out($$$$$) ; +sub i_circle_out_aa($$$$$) ; +sub i_clear_error() ; +sub i_colorcount($) ; +sub i_combine($;$) ; +sub i_compose($$$$$$$$;$$) ; +sub i_compose_mask($$$$$$$$$$$;$$) ; +sub i_contrast($$) ; +sub i_conv($$) ; +sub i_convert($$) ; +sub i_copy($) ; +sub i_copyto($$$$$$$$) ; +sub i_copyto_trans($$$$$$$$$) ; +sub i_count_colors($$) ; +sub i_diff_image($$;$) ; +sub i_errors() ; +sub i_findcolor($$) ; +sub i_flipxy($$) ; +sub i_flood_cfill($$$$) ; +sub i_flood_cfill_border($$$$$) ; +sub i_flood_fill($$$$) ; +sub i_flood_fill_border($$$$$) ; +sub i_fountain($$$$$$$$$$$) ; +sub i_gaussian($$) ; +sub i_get_anonymous_color_histo($;$) ; +sub i_get_image_file_limits() ; +sub i_get_pixel($$$) ; +sub i_getcolors($$;$) ; +sub i_glin($$$$) ; +sub i_glinf($$$$) ; +sub i_gpal($$$$) ; +sub i_gpixf($$$) ; +sub i_gradgen($$$$$) ; +sub i_gsamp($$$$$) ; +sub i_gsamp_bits($$$$$$$$) ; +sub i_gsampf($$$$$) ; +sub i_haar($) ; +sub i_hardinvert($) ; +sub i_hardinvertall($) ; +sub i_img_16_new($$$) ; +sub i_img_8_new($$$) ; +sub i_img_alpha_channel($) ; +sub i_img_bits($) ; +sub i_img_color_channels($) ; +sub i_img_color_model($) ; +sub i_img_diff($$) ; +sub i_img_diffd($$) ; +sub i_img_double_new($$$) ; +sub i_img_epsilonf() ; +sub i_img_get_height($) ; +sub i_img_get_width($) ; +sub i_img_getchannels($) ; +sub i_img_getdata($) ; +sub i_img_getmask($) ; +sub i_img_info($) ; +sub i_img_is_monochrome($) ; +sub i_img_make_palette($;@) ; +sub i_img_masked_new($$$$$$) ; +sub i_img_pal_new($$$$) ; +sub i_img_samef($$;$$) ; +sub i_img_setmask($$) ; +sub i_img_to_drgb($) ; +sub i_img_to_pal($$) ; +sub i_img_to_rgb($) ; +sub i_img_to_rgb16($) ; +sub i_img_type($) ; +sub i_img_virtual($) ; +sub i_init_log($$) ; +sub i_int_check_image_file_limits; +sub i_line($$$$$$$) ; +sub i_line_aa($$$$$$$) ; +sub i_list_formats() ; +sub i_log_enabled() ; +sub i_log_entry($$) ; +sub i_map($$) ; +sub i_matrix_transform($$$$;@) ; +sub i_maxcolors($) ; +sub i_mosaic($$) ; +sub i_nearest_color($;@) ; +sub i_new_fill_fount($$$$$$$$$$) ; +sub i_new_fill_hatch($$$$$$$) ; +sub i_new_fill_hatchf($$$$$$$) ; +sub i_new_fill_image($$$$$) ; +sub i_new_fill_opacity($$) ; +sub i_new_fill_solid($$) ; +sub i_new_fill_solidf($$) ; +sub i_noise($$$) ; +sub i_plin($$$;@) ; +sub i_plinf($$$;@) ; +sub i_poly_aa_cfill_m($$$$$) ; +sub i_poly_aa_m($$$$$) ; +sub i_poly_poly_aa($$$$) ; +sub i_poly_poly_aa_cfill($$$$) ; +sub i_postlevels($$) ; +sub i_ppal($$$;@) ; +sub i_ppal_p($$$$) ; +sub i_ppix($$$$) ; +sub i_ppixf($$$$) ; +sub i_psamp($$$$$;$$) ; +sub i_psamp_bits($$$$$$;$$) ; +sub i_psampf($$$$$;$$) ; +sub i_push_error($$) ; +sub i_radnoise($$$$$) ; +sub i_readbmp_wiol($;$) ; +sub i_readpnm_multi_wiol($$) ; +sub i_readpnm_wiol($$) ; +sub i_readraw_wiol($$$$$$) ; +sub i_readtga_wiol($$) ; +sub i_rotate90($$) ; +sub i_rotate_exact($$;@) ; +sub i_rubthru($$$$$$$$) ; +sub i_sametype($$$) ; +sub i_sametype_chans($$$$) ; +sub i_scale_mixing($$$) ; +sub i_scale_nn($$$) ; +sub i_scaleaxis($$$) ; +sub i_set_image_file_limits($$$) ; +sub i_setcolors($$;@) ; +sub i_tags_add($$$$$) ; +sub i_tags_addn($$$$) ; +sub i_tags_count($) ; +sub i_tags_delbycode($$) ; +sub i_tags_delbyname($$) ; +sub i_tags_delete($$) ; +sub i_tags_find($$$) ; +sub i_tags_findn($$$) ; +sub i_tags_get($$) ; +sub i_tags_get_string($$) ; +sub i_test_format_probe($$) ; +sub i_transform($$$$) ; +sub i_transform2($$$$$$$) ; +sub i_turbnoise($$$$) ; +sub i_unsharp_mask($$$) ; +sub i_watermark($$$$$) ; +sub i_writebmp_wiol($$) ; +sub i_writeppm_wiol($$) ; +sub i_writeraw_wiol($$) ; +sub i_writetga_wiol($$$$$) ; +sub io_new_bufchain() ; +sub io_new_buffer($) ; +sub io_new_cb($$$$;$) ; +sub io_new_fd($) ; +sub io_slurp($) ; +sub malloc_state() ; +} +package Imager::Color { +sub DESTROY; +sub i_hsv_to_rgb; +sub i_rgb_to_hsv; +sub info; +sub new_internal; +sub rgba; +sub set_internal; +} +package Imager::Color::Float { +sub DESTROY; +sub i_hsv_to_rgb; +sub i_rgb_to_hsv; +sub new_internal; +sub rgba; +sub set_internal; +} +package Imager::Context { +sub CLONE(;@) ; +sub DESTROY($) ; +} +package Imager::CountColor { +sub count_color($$) ; +} +package Imager::File::GIF { +sub i_giflib_version; +sub i_readgif_multi_wiol; +sub i_readgif_single_wiol; +sub i_readgif_wiol; +sub i_writegif_wiol; +} +package Imager::File::ICO { +sub i_readico_multi; +sub i_readico_single; +sub i_writecur_multi_wiol; +sub i_writecur_wiol; +sub i_writeico_multi_wiol; +sub i_writeico_wiol; +} +package Imager::File::JPEG { +sub i_libjpeg_version; +sub i_readjpeg_wiol; +sub i_writejpeg_wiol; +} +package Imager::File::PNG { +sub IMPNG_READ_IGNORE_BENIGN_ERRORS; +sub features; +sub i_png_lib_version; +sub i_readpng_wiol; +sub i_writepng_wiol; +} +package Imager::File::SGI { +sub i_readsgi_wiol; +sub i_writesgi_wiol; +} +package Imager::File::TIFF { +sub i_readtiff_multi_wiol; +sub i_readtiff_wiol; +sub i_tiff_has_compression; +sub i_tiff_ieeefp; +sub i_tiff_libversion; +sub i_writetiff_multi_wiol; +sub i_writetiff_multi_wiol_faxable; +sub i_writetiff_wiol; +sub i_writetiff_wiol_faxable; +} +package Imager::FillHandle { +sub CLONE_SKIP(;@) ; +sub DESTROY($) ; +} +package Imager::Filter::DynTest { +sub lin_stretch($$$) ; +} +package Imager::Filter::Flines { +sub flines($) ; +} +package Imager::Filter::Mandelbrot { +sub mandelbrot($;$$$$$) ; +} +package Imager::Font::FT2 { +sub ft2_transform_box; +sub i_ft2_bbox; +sub i_ft2_bbox_r; +sub i_ft2_can_do_glyph_names; +sub i_ft2_can_face_name; +sub i_ft2_cp; +sub i_ft2_face_has_glyph_names; +sub i_ft2_face_name; +sub i_ft2_get_multiple_masters; +sub i_ft2_getdpi; +sub i_ft2_glyph_name; +sub i_ft2_has_chars; +sub i_ft2_is_multiple_master; +sub i_ft2_new; +sub i_ft2_set_mm_coords; +sub i_ft2_setdpi; +sub i_ft2_sethinting; +sub i_ft2_settransform; +sub i_ft2_text; +sub i_ft2_version; +} +package Imager::Font::FT2x { +sub CLONE_SKIP; +sub DESTROY; +} +package Imager::Font::T1 { +sub i_init_t1; +} +package Imager::Font::T1xs { +sub CLONE_SKIP; +sub DESTROY; +sub bbox; +sub cp; +sub face_name; +sub glyph_names; +sub has_chars; +sub new; +sub text; +} +package Imager::Font::W32 { +sub i_wf_addfont; +sub i_wf_bbox; +sub i_wf_cp; +sub i_wf_delfont; +sub i_wf_text; +} +package Imager::IO { +sub CLONE_SKIP(;@) ; +sub DESTROY($) ; +sub _new_perlio($$) ; +sub close($) ; +sub dump($;$) ; +sub eof($) ; +sub error($) ; +sub flush($) ; +sub getc($) ; +sub gets($;$$) ; +sub is_buffered($) ; +sub new_bufchain($) ; +sub new_buffer($$) ; +sub new_cb($$$$$) ; +sub new_fd($$) ; +sub nextc($) ; +sub peekc($) ; +sub peekn($$) ; +sub putc($$) ; +sub raw_close($) ; +sub raw_read($$$) ; +sub raw_read2($$) ; +sub raw_seek($$$) ; +sub raw_write($$) ; +sub read($$$) ; +sub read2($$) ; +sub seek($$$) ; +sub set_buffered($;$) ; +sub slurp($$) ; +sub write($$) ; +} +package Imager::ImgRaw { +sub DESTROY; +sub new; +} +package Imager::Internal::Hlines { +sub CLONE_SKIP($) ; +sub DESTROY($) ; +sub add($$$$) ; +sub dump($) ; +sub new($$$$) ; +sub new_img($) ; +sub testing() ; +} +package Internals { +sub SvREADONLY(\[$%@];$) ; +sub SvREFCNT(\[$%@];$) ; +sub V; +sub getcwd() ; +sub hv_clear_placeholders(\%) ; +} +package JSON::XS { +sub CLONE; +sub DESTROY; +sub allow_blessed; +sub allow_nonref; +sub allow_tags; +sub allow_unknown; +sub ascii; +sub boolean_values; +sub canonical; +sub convert_blessed; +sub decode; +sub decode_json($) ; +sub decode_prefix; +sub encode; +sub encode_json($) ; +sub filter_json_object; +sub filter_json_single_key_object; +sub get_allow_blessed; +sub get_allow_nonref; +sub get_allow_tags; +sub get_allow_unknown; +sub get_ascii; +sub get_boolean_values; +sub get_canonical; +sub get_convert_blessed; +sub get_indent; +sub get_latin1; +sub get_max_depth; +sub get_max_size; +sub get_relaxed; +sub get_shrink; +sub get_space_after; +sub get_space_before; +sub get_utf8; +sub incr_parse; +sub incr_reset; +sub incr_skip; +sub indent; +sub latin1; +sub max_depth; +sub max_size; +sub new; +sub pretty; +sub relaxed; +sub shrink; +sub space_after; +sub space_before; +sub utf8; +} +package List::MoreUtils { +sub _XScompiled; +sub after(&@) ; +sub after_incl(&@) ; +sub all(&@) ; +sub all_u(&@) ; +sub any(&@) ; +sub any_u(&@) ; +sub apply(&@) ; +sub arrayify; +sub before(&@) ; +sub before_incl(&@) ; +sub binsert(&$\@) ; +sub bremove(&\@) ; +sub bsearch(&@) ; +sub bsearch_index(&@) ; +sub bsearch_insert(&$\@) ; +sub bsearch_remove(&\@) ; +sub bsearchidx(&@) ; +sub distinct(@) ; +sub duplicates(@) ; +sub each_array(\@;\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@) ; +sub each_arrayref; +sub equal_range(&@) ; +sub false(&@) ; +sub first_index(&@) ; +sub first_result(&@) ; +sub first_value(&@) ; +sub firstidx(&@) ; +sub firstres(&@) ; +sub firstval(&@) ; +sub frequency(@) ; +sub indexes(&@) ; +sub insert_after(&$\@) ; +sub insert_after_string($$\@) ; +sub last_index(&@) ; +sub last_result(&@) ; +sub last_value(&@) ; +sub lastidx(&@) ; +sub lastres(&@) ; +sub lastval(&@) ; +sub listcmp(\@\@;\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@) ; +sub lower_bound(&@) ; +sub mesh(\@\@;\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@) ; +sub minmax(@) ; +sub minmaxstr(@) ; +sub mode(@) ; +sub natatime($@) ; +sub none(&@) ; +sub none_u(&@) ; +sub notall(&@) ; +sub notall_u(&@) ; +sub occurrences(@) ; +sub one(&@) ; +sub one_u(&@) ; +sub only_index(&@) ; +sub only_result(&@) ; +sub only_value(&@) ; +sub onlyidx(&@) ; +sub onlyres(&@) ; +sub onlyval(&@) ; +sub pairwise(&\@\@) ; +sub part(&@) ; +sub qsort(&\@) ; +sub reduce_0(&@) ; +sub reduce_1(&@) ; +sub reduce_u(&@) ; +sub samples($@) ; +sub singleton(@) ; +sub true(&@) ; +sub uniq(@) ; +sub upper_bound(&@) ; +sub zip(\@\@;\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@) ; +sub zip6(\@\@;\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@) ; +sub zip_unflatten(\@\@;\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@) ; +} +package List::MoreUtils::XS { +sub _XScompiled; +sub _array_iterator(;$) ; +sub _natatime_iterator() ; +sub after(&@) ; +sub after_incl(&@) ; +sub all(&@) ; +sub all_u(&@) ; +sub any(&@) ; +sub any_u(&@) ; +sub apply(&@) ; +sub arrayify; +sub before(&@) ; +sub before_incl(&@) ; +sub binsert(&$\@) ; +sub bremove(&\@) ; +sub bsearch(&@) ; +sub bsearchidx(&@) ; +sub duplicates(@) ; +sub each_array(\@;\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@) ; +sub each_arrayref; +sub equal_range(&@) ; +sub false(&@) ; +sub firstidx(&@) ; +sub firstres(&@) ; +sub firstval(&@) ; +sub frequency(@) ; +sub indexes(&@) ; +sub insert_after(&$\@) ; +sub insert_after_string($$\@) ; +sub lastidx(&@) ; +sub lastres(&@) ; +sub lastval(&@) ; +sub listcmp(\@\@;\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@) ; +sub lower_bound(&@) ; +sub mesh(\@\@;\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@) ; +sub minmax(@) ; +sub minmaxstr(@) ; +sub mode(@) ; +sub natatime($@) ; +sub none(&@) ; +sub none_u(&@) ; +sub notall(&@) ; +sub notall_u(&@) ; +sub occurrences(@) ; +sub one(&@) ; +sub one_u(&@) ; +sub onlyidx(&@) ; +sub onlyres(&@) ; +sub onlyval(&@) ; +sub pairwise(&\@\@) ; +sub part(&@) ; +sub qsort(&\@) ; +sub reduce_0(&@) ; +sub reduce_1(&@) ; +sub reduce_u(&@) ; +sub samples($@) ; +sub singleton(@) ; +sub true(&@) ; +sub uniq(@) ; +sub upper_bound(&@) ; +sub zip6(\@\@;\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@) ; +} +package List::MoreUtils::XS_ea { +sub DESTROY; +} +package List::MoreUtils::XS_na { +sub DESTROY; +} +package List::Util { +sub all(&@) ; +sub any(&@) ; +sub first(&@) ; +sub head($@) ; +sub max(@) ; +sub maxstr(@) ; +sub min(@) ; +sub minstr(@) ; +sub none(&@) ; +sub notall(&@) ; +sub pairfirst(&@) ; +sub pairgrep(&@) ; +sub pairkeys(@) ; +sub pairmap(&@) ; +sub pairs(@) ; +sub pairvalues(@) ; +sub product(@) ; +sub reduce(&@) ; +sub shuffle(@) ; +sub sum(@) ; +sub sum0(@) ; +sub tail($@) ; +sub uniq(@) ; +sub uniqnum(@) ; +sub uniqstr(@) ; +sub unpairs(@) ; +} +package Lzma::Filter { +sub DESTROY; +sub id; +} +package Lzma::Filter::BCJ { +sub _mk; +} +package Lzma::Filter::Delta { +sub _mk; +} +package Lzma::Filter::Lzma { +sub _mk; +sub _mkPreset; +} +package MIME::Base64 { +sub decode($) ; +sub decode_base64($) ; +sub decoded_base64_length($) ; +sub encode($;$) ; +sub encode_base64($;$) ; +sub encoded_base64_length($;$) ; +} +package MIME::Charset { +sub is_utf8($;$) ; +} +package MIME::QuotedPrint { +sub decode_qp($) ; +sub encode_qp($;$$) ; +} +package Math::BigInt::FastCalc { +sub __strip_zeros; +sub _acmp; +sub _copy; +sub _dec; +sub _inc; +sub _is_even; +sub _is_odd; +sub _is_one; +sub _is_ten; +sub _is_two; +sub _is_zero; +sub _len; +sub _new; +sub _one; +sub _ten; +sub _two; +sub _zero; +} +package Math::BigInt::GMP { +sub DESTROY($) ; +sub _1ex($$) ; +sub _acmp($$$) ; +sub _add($$$) ; +sub _alen($$) ; +sub _and($$$) ; +sub _as_bin($$) ; +sub _as_hex($$) ; +sub _as_oct($$) ; +sub _copy($$) ; +sub _dec($$) ; +sub _div($$$) ; +sub _fac($$) ; +sub _from_bin($$) ; +sub _from_hex($$) ; +sub _from_oct($$) ; +sub _gcd($$$) ; +sub _inc($$) ; +sub _is_even($$) ; +sub _is_odd($$) ; +sub _is_one($$) ; +sub _is_ten($$) ; +sub _is_two($$) ; +sub _is_zero($$) ; +sub _len($$) ; +sub _lsft($$$$) ; +sub _mod($$$) ; +sub _modinv($$$) ; +sub _modpow($$$$) ; +sub _mul($$$) ; +sub _new($$) ; +sub _new_attach($$$) ; +sub _one($) ; +sub _or($$$) ; +sub _pow($$$) ; +sub _root($$$) ; +sub _rsft($$$$) ; +sub _set($$$) ; +sub _sqrt($$) ; +sub _str($$) ; +sub _sub($$$;@) ; +sub _ten($) ; +sub _two($) ; +sub _xor($$$) ; +sub _zero($) ; +sub _zeros($$) ; +} +package Math::BigInt::LTM { +sub DESTROY; +sub STORABLE_freeze; +sub STORABLE_thaw; +sub _1ex; +sub _acmp; +sub _add; +sub _alen; +sub _and; +sub _as_bytes; +sub _copy; +sub _dec; +sub _div; +sub _from_base; +sub _from_bin; +sub _from_bytes; +sub _from_hex; +sub _from_oct; +sub _gcd; +sub _inc; +sub _is_even; +sub _is_odd; +sub _is_one; +sub _is_ten; +sub _is_two; +sub _is_zero; +sub _lcm; +sub _len; +sub _lsft; +sub _mod; +sub _modinv; +sub _modpow; +sub _mul; +sub _new; +sub _one; +sub _or; +sub _pow; +sub _root; +sub _rsft; +sub _set; +sub _sqrt; +sub _str; +sub _sub; +sub _ten; +sub _to_base; +sub _to_bin; +sub _to_bytes; +sub _to_hex; +sub _to_oct; +sub _two; +sub _xor; +sub _zero; +sub _zeros; +} +package Math::GMP { +sub DESTROY($) ; +sub _gmp_build_version() ; +sub _gmp_lib_version() ; +sub add_ui_gmp($$) ; +sub band($$;@) ; +sub bdiv($$) ; +sub bfac($) ; +sub bgcd($$) ; +sub bior($$;@) ; +sub blcm($$) ; +sub blshift($$$) ; +sub bmodinv($$) ; +sub broot($$) ; +sub brootrem($$) ; +sub brshift($$$) ; +sub bsqrt($) ; +sub bsqrtrem($) ; +sub bxor($$;@) ; +sub destroy($) ; +sub div_2exp_gmp($$) ; +sub fibonacci($) ; +sub gcd($$) ; +sub get_str_gmp($$) ; +sub gmp_copy($) ; +sub gmp_tstbit($$) ; +sub intify($) ; +sub is_perfect_power($) ; +sub is_perfect_square($) ; +sub jacobi($$) ; +sub lcm($$) ; +sub legendre($$) ; +sub mmod_gmp($$) ; +sub mod_2exp_gmp($$) ; +sub mul_2exp_gmp($$) ; +sub new_from_scalar($) ; +sub new_from_scalar_with_base($$) ; +sub op_add($$$) ; +sub op_div($$$) ; +sub op_eq($$$) ; +sub op_mod($$$) ; +sub op_mul($$$) ; +sub op_pow($$) ; +sub op_spaceship($$$) ; +sub op_sub($$$) ; +sub powm_gmp($$$) ; +sub probab_prime($$) ; +sub sizeinbase_gmp($$) ; +sub stringify($) ; +sub uintify($) ; +} +package Math::Int64 { +sub BER_length; +sub BER_to_int64; +sub BER_to_uint64; +sub STORABLE_freeze; +sub STORABLE_thaw; +sub _add; +sub _and; +sub _backend; +sub _bnot; +sub _bool; +sub _clone; +sub _dec; +sub _div; +sub _eqn; +sub _gen; +sub _gtn; +sub _inc; +sub _left; +sub _len; +sub _ltn; +sub _mul; +sub _neg; +sub _nen; +sub _not; +sub _number; +sub _or; +sub _pow; +sub _rest; +sub _right; +sub _set_may_die_on_overflow; +sub _set_may_use_native; +sub _spaceship; +sub _string; +sub _sub; +sub _xor; +sub hex_to_int64; +sub hex_to_uint64; +sub int64; +sub int64_rand; +sub int64_srand; +sub int64_to_BER; +sub int64_to_hex; +sub int64_to_native; +sub int64_to_net; +sub int64_to_number; +sub int64_to_string; +sub native_to_int64; +sub native_to_uint64; +sub net_to_int64; +sub net_to_uint64; +sub string_to_int64; +sub string_to_uint64; +sub uint64; +sub uint64_rand; +sub uint64_to_BER; +sub uint64_to_hex; +sub uint64_to_native; +sub uint64_to_net; +sub uint64_to_number; +sub uint64_to_string; +} +package Math::MPC { +sub CLONE; +sub DESTROY; +sub NOK_POK_val; +sub RMPC_IM; +sub RMPC_INEX_IM; +sub RMPC_INEX_RE; +sub RMPC_RE; +sub Rmpc_abs; +sub Rmpc_acos; +sub Rmpc_acosh; +sub Rmpc_add; +sub Rmpc_add_fr; +sub Rmpc_add_ui; +sub Rmpc_arg; +sub Rmpc_asin; +sub Rmpc_asinh; +sub Rmpc_atan; +sub Rmpc_atanh; +sub Rmpc_clear; +sub Rmpc_clear_mpc; +sub Rmpc_clear_ptr; +sub Rmpc_cmp; +sub Rmpc_cmp_abs; +sub Rmpc_cmp_si; +sub Rmpc_cmp_si_si; +sub Rmpc_conj; +sub Rmpc_cos; +sub Rmpc_cosh; +sub Rmpc_d_div; +sub Rmpc_div; +sub Rmpc_div_2exp; +sub Rmpc_div_2si; +sub Rmpc_div_2ui; +sub Rmpc_div_d; +sub Rmpc_div_fr; +sub Rmpc_div_ld; +sub Rmpc_div_sj; +sub Rmpc_div_ui; +sub Rmpc_exp; +sub Rmpc_get_DC; +sub Rmpc_get_LDC; +sub Rmpc_get_dc; +sub Rmpc_get_default_prec2; +sub Rmpc_get_default_prec; +sub Rmpc_get_default_rounding_mode; +sub Rmpc_get_im_prec; +sub Rmpc_get_ldc; +sub Rmpc_get_prec2; +sub Rmpc_get_prec; +sub Rmpc_get_re_prec; +sub Rmpc_get_str; +sub Rmpc_get_version; +sub Rmpc_imag; +sub Rmpc_init2; +sub Rmpc_init2_nobless; +sub Rmpc_init3; +sub Rmpc_init3_nobless; +sub Rmpc_inp_str; +sub Rmpc_ld_div; +sub Rmpc_log10; +sub Rmpc_log; +sub Rmpc_mul; +sub Rmpc_mul_2exp; +sub Rmpc_mul_2si; +sub Rmpc_mul_2ui; +sub Rmpc_mul_d; +sub Rmpc_mul_fr; +sub Rmpc_mul_i; +sub Rmpc_mul_ld; +sub Rmpc_mul_si; +sub Rmpc_mul_sj; +sub Rmpc_mul_ui; +sub Rmpc_neg; +sub Rmpc_norm; +sub Rmpc_pow; +sub Rmpc_pow_d; +sub Rmpc_pow_fr; +sub Rmpc_pow_ld; +sub Rmpc_pow_si; +sub Rmpc_pow_ui; +sub Rmpc_pow_z; +sub Rmpc_proj; +sub Rmpc_real; +sub Rmpc_rootofunity; +sub Rmpc_set; +sub Rmpc_set_DC; +sub Rmpc_set_LDC; +sub Rmpc_set_NV; +sub Rmpc_set_NV_NV; +sub Rmpc_set_d; +sub Rmpc_set_d_d; +sub Rmpc_set_d_f; +sub Rmpc_set_d_fr; +sub Rmpc_set_d_ld; +sub Rmpc_set_d_q; +sub Rmpc_set_d_si; +sub Rmpc_set_d_sj; +sub Rmpc_set_d_ui; +sub Rmpc_set_d_uj; +sub Rmpc_set_d_z; +sub Rmpc_set_dc; +sub Rmpc_set_default_prec2; +sub Rmpc_set_default_prec; +sub Rmpc_set_default_rounding_mode; +sub Rmpc_set_f; +sub Rmpc_set_f_d; +sub Rmpc_set_f_f; +sub Rmpc_set_f_fr; +sub Rmpc_set_f_ld; +sub Rmpc_set_f_q; +sub Rmpc_set_f_si; +sub Rmpc_set_f_sj; +sub Rmpc_set_f_ui; +sub Rmpc_set_f_uj; +sub Rmpc_set_f_z; +sub Rmpc_set_fr; +sub Rmpc_set_fr_d; +sub Rmpc_set_fr_f; +sub Rmpc_set_fr_fr; +sub Rmpc_set_fr_ld; +sub Rmpc_set_fr_q; +sub Rmpc_set_fr_si; +sub Rmpc_set_fr_sj; +sub Rmpc_set_fr_ui; +sub Rmpc_set_fr_uj; +sub Rmpc_set_fr_z; +sub Rmpc_set_im_prec; +sub Rmpc_set_ld; +sub Rmpc_set_ld_d; +sub Rmpc_set_ld_f; +sub Rmpc_set_ld_fr; +sub Rmpc_set_ld_ld; +sub Rmpc_set_ld_q; +sub Rmpc_set_ld_si; +sub Rmpc_set_ld_sj; +sub Rmpc_set_ld_ui; +sub Rmpc_set_ld_uj; +sub Rmpc_set_ld_z; +sub Rmpc_set_ldc; +sub Rmpc_set_nan; +sub Rmpc_set_prec; +sub Rmpc_set_q; +sub Rmpc_set_q_d; +sub Rmpc_set_q_f; +sub Rmpc_set_q_fr; +sub Rmpc_set_q_ld; +sub Rmpc_set_q_q; +sub Rmpc_set_q_si; +sub Rmpc_set_q_sj; +sub Rmpc_set_q_ui; +sub Rmpc_set_q_uj; +sub Rmpc_set_q_z; +sub Rmpc_set_re_prec; +sub Rmpc_set_si; +sub Rmpc_set_si_d; +sub Rmpc_set_si_f; +sub Rmpc_set_si_fr; +sub Rmpc_set_si_ld; +sub Rmpc_set_si_q; +sub Rmpc_set_si_si; +sub Rmpc_set_si_sj; +sub Rmpc_set_si_ui; +sub Rmpc_set_si_uj; +sub Rmpc_set_si_z; +sub Rmpc_set_sj; +sub Rmpc_set_sj_d; +sub Rmpc_set_sj_f; +sub Rmpc_set_sj_fr; +sub Rmpc_set_sj_ld; +sub Rmpc_set_sj_q; +sub Rmpc_set_sj_si; +sub Rmpc_set_sj_sj; +sub Rmpc_set_sj_ui; +sub Rmpc_set_sj_uj; +sub Rmpc_set_sj_z; +sub Rmpc_set_str; +sub Rmpc_set_ui; +sub Rmpc_set_ui_d; +sub Rmpc_set_ui_f; +sub Rmpc_set_ui_fr; +sub Rmpc_set_ui_ld; +sub Rmpc_set_ui_q; +sub Rmpc_set_ui_si; +sub Rmpc_set_ui_sj; +sub Rmpc_set_ui_ui; +sub Rmpc_set_ui_uj; +sub Rmpc_set_ui_z; +sub Rmpc_set_uj; +sub Rmpc_set_uj_d; +sub Rmpc_set_uj_f; +sub Rmpc_set_uj_fr; +sub Rmpc_set_uj_ld; +sub Rmpc_set_uj_q; +sub Rmpc_set_uj_si; +sub Rmpc_set_uj_sj; +sub Rmpc_set_uj_ui; +sub Rmpc_set_uj_uj; +sub Rmpc_set_uj_z; +sub Rmpc_set_z; +sub Rmpc_set_z_d; +sub Rmpc_set_z_f; +sub Rmpc_set_z_fr; +sub Rmpc_set_z_ld; +sub Rmpc_set_z_q; +sub Rmpc_set_z_si; +sub Rmpc_set_z_sj; +sub Rmpc_set_z_ui; +sub Rmpc_set_z_uj; +sub Rmpc_set_z_z; +sub Rmpc_sin; +sub Rmpc_sin_cos; +sub Rmpc_sinh; +sub Rmpc_sj_div; +sub Rmpc_sqr; +sub Rmpc_sqrt; +sub Rmpc_strtoc; +sub Rmpc_sub; +sub Rmpc_sub_ui; +sub Rmpc_swap; +sub Rmpc_tan; +sub Rmpc_tanh; +sub Rmpc_ui_div; +sub Rmpc_ui_sub; +sub Rmpc_ui_ui_sub; +sub TRmpc_inp_str; +sub _MPC_VERSION; +sub _MPC_VERSION_MAJOR; +sub _MPC_VERSION_MINOR; +sub _MPC_VERSION_NUM; +sub _MPC_VERSION_PATCHLEVEL; +sub _MPC_VERSION_STRING; +sub _Rmpc_out_str; +sub _Rmpc_out_strP; +sub _Rmpc_out_strPS; +sub _Rmpc_out_strS; +sub _SvNOK; +sub _SvPOK; +sub _can_pass_float128; +sub _get_i_string; +sub _get_nv_precision; +sub _get_r_string; +sub _get_xs_version; +sub _has_inttypes; +sub _has_longdouble; +sub _has_longlong; +sub _have_Complex_h; +sub _itsa; +sub _mpfr_buildopt_tls_p; +sub _mpfr_set_NV; +sub _new_real_im; +sub _win32_infnanstring; +sub _wrap_count; +sub clear_nok_pok; +sub gmp_v; +sub mpfr_v; +sub nok_pokflag; +sub overload_abs; +sub overload_add; +sub overload_add_eq; +sub overload_atan2; +sub overload_copy; +sub overload_cos; +sub overload_div; +sub overload_div_eq; +sub overload_equiv; +sub overload_exp; +sub overload_log; +sub overload_mul; +sub overload_mul_eq; +sub overload_not; +sub overload_pow; +sub overload_pow_eq; +sub overload_sin; +sub overload_sqrt; +sub overload_sub; +sub overload_sub_eq; +sub overload_true; +sub set_nok_pok; +} +package Math::MPFR { +sub ARG_MAX() ; +sub B0() ; +sub B110() ; +sub B1200() ; +sub B134() ; +sub B150() ; +sub B1800() ; +sub B19200() ; +sub B200() ; +sub B2400() ; +sub B300() ; +sub B38400() ; +sub B4800() ; +sub B50() ; +sub B600() ; +sub B75() ; +sub B9600() ; +sub BRKINT() ; +sub CHILD_MAX() ; +sub CLOCAL() ; +sub CREAD() ; +sub CS5() ; +sub CS6() ; +sub CS7() ; +sub CS8() ; +sub CSIZE() ; +sub CSTOPB() ; +sub DESTROY; +sub ECHO() ; +sub ECHOE() ; +sub ECHOK() ; +sub ECHONL() ; +sub EHOSTDOWN() ; +sub ENOTBLK() ; +sub EOTHER() ; +sub ERESTART() ; +sub FD_CLOEXEC() ; +sub F_DUPFD() ; +sub F_GETFD() ; +sub F_GETFL() ; +sub F_GETLK() ; +sub F_RDLCK() ; +sub F_SETFD() ; +sub F_SETFL() ; +sub F_SETLK() ; +sub F_SETLKW() ; +sub F_UNLCK() ; +sub F_WRLCK() ; +sub HUPCL() ; +sub ICANON() ; +sub ICRNL() ; +sub IEXTEN() ; +sub IGNBRK() ; +sub IGNCR() ; +sub IGNPAR() ; +sub INLCR() ; +sub INPCK() ; +sub ISIG() ; +sub ISTRIP() ; +sub IXOFF() ; +sub IXON() ; +sub LC_ADDRESS() ; +sub LC_IDENTIFICATION() ; +sub LC_MEASUREMENT() ; +sub LC_MESSAGES() ; +sub LC_PAPER() ; +sub LC_TELEPHONE() ; +sub LDBL_EPSILON() ; +sub LDBL_MAX() ; +sub LDBL_MIN() ; +sub LINK_MAX() ; +sub L_ctermid() ; +sub L_cuserid() ; +sub MAX_CANON() ; +sub MAX_INPUT() ; +sub NAME_MAX() ; +sub NCCS() ; +sub NDEBUG; +sub NGROUPS_MAX() ; +sub NNW_val; +sub NOFLSH() ; +sub NOK_POK_val; +sub OPEN_MAX() ; +sub OPOST() ; +sub O_NOCTTY() ; +sub O_NONBLOCK() ; +sub PARENB() ; +sub PARMRK() ; +sub PARODD() ; +sub PIPE_BUF() ; +sub RMPFR_PREC_MAX() ; +sub RMPFR_PREC_MIN() ; +sub RMPFR_VERSION_NUM; +sub Rmpfr_abs; +sub Rmpfr_acos; +sub Rmpfr_acosh; +sub Rmpfr_add; +sub Rmpfr_add_d; +sub Rmpfr_add_q; +sub Rmpfr_add_si; +sub Rmpfr_add_ui; +sub Rmpfr_add_z; +sub Rmpfr_agm; +sub Rmpfr_ai; +sub Rmpfr_asin; +sub Rmpfr_asinh; +sub Rmpfr_atan2; +sub Rmpfr_atan; +sub Rmpfr_atanh; +sub Rmpfr_beta; +sub Rmpfr_buildopt_decimal_p; +sub Rmpfr_buildopt_float128_p; +sub Rmpfr_buildopt_gmpinternals_p; +sub Rmpfr_buildopt_sharedcache_p; +sub Rmpfr_buildopt_tls_p; +sub Rmpfr_buildopt_tune_case; +sub Rmpfr_can_round; +sub Rmpfr_cbrt; +sub Rmpfr_ceil; +sub Rmpfr_check_range; +sub Rmpfr_clear; +sub Rmpfr_clear_divby0; +sub Rmpfr_clear_erangeflag; +sub Rmpfr_clear_flags; +sub Rmpfr_clear_inexflag; +sub Rmpfr_clear_mpfr; +sub Rmpfr_clear_nanflag; +sub Rmpfr_clear_overflow; +sub Rmpfr_clear_ptr; +sub Rmpfr_clear_underflow; +sub Rmpfr_clears; +sub Rmpfr_cmp; +sub Rmpfr_cmp_NV; +sub Rmpfr_cmp_d; +sub Rmpfr_cmp_f; +sub Rmpfr_cmp_ld; +sub Rmpfr_cmp_q; +sub Rmpfr_cmp_si; +sub Rmpfr_cmp_si_2exp; +sub Rmpfr_cmp_ui; +sub Rmpfr_cmp_ui_2exp; +sub Rmpfr_cmp_z; +sub Rmpfr_cmpabs; +sub Rmpfr_const_catalan; +sub Rmpfr_const_euler; +sub Rmpfr_const_log2; +sub Rmpfr_const_pi; +sub Rmpfr_copysign; +sub Rmpfr_cos; +sub Rmpfr_cosh; +sub Rmpfr_cot; +sub Rmpfr_coth; +sub Rmpfr_csc; +sub Rmpfr_csch; +sub Rmpfr_d_div; +sub Rmpfr_d_sub; +sub Rmpfr_deref2; +sub Rmpfr_digamma; +sub Rmpfr_dim; +sub Rmpfr_div; +sub Rmpfr_div_2exp; +sub Rmpfr_div_2si; +sub Rmpfr_div_2ui; +sub Rmpfr_div_d; +sub Rmpfr_div_q; +sub Rmpfr_div_si; +sub Rmpfr_div_ui; +sub Rmpfr_div_z; +sub Rmpfr_divby0_p; +sub Rmpfr_dot; +sub Rmpfr_dump; +sub Rmpfr_eint; +sub Rmpfr_eq; +sub Rmpfr_equal_p; +sub Rmpfr_erandom; +sub Rmpfr_erangeflag_p; +sub Rmpfr_erf; +sub Rmpfr_erfc; +sub Rmpfr_exp10; +sub Rmpfr_exp2; +sub Rmpfr_exp; +sub Rmpfr_expm1; +sub Rmpfr_fac_ui; +sub Rmpfr_fits_IV_p; +sub Rmpfr_fits_UV_p; +sub Rmpfr_fits_intmax_p; +sub Rmpfr_fits_sint_p; +sub Rmpfr_fits_slong_p; +sub Rmpfr_fits_sshort_p; +sub Rmpfr_fits_uint_p; +sub Rmpfr_fits_uintmax_p; +sub Rmpfr_fits_ulong_p; +sub Rmpfr_fits_ushort_p; +sub Rmpfr_flags_clear; +sub Rmpfr_flags_restore; +sub Rmpfr_flags_save; +sub Rmpfr_flags_set; +sub Rmpfr_flags_test; +sub Rmpfr_floor; +sub Rmpfr_fma; +sub Rmpfr_fmma; +sub Rmpfr_fmms; +sub Rmpfr_fmod; +sub Rmpfr_fmodquo; +sub Rmpfr_fms; +sub Rmpfr_fpif_export; +sub Rmpfr_fpif_import; +sub Rmpfr_frac; +sub Rmpfr_free_cache2; +sub Rmpfr_free_cache; +sub Rmpfr_free_pool; +sub Rmpfr_frexp; +sub Rmpfr_gamma; +sub Rmpfr_gamma_inc; +sub Rmpfr_get_DECIMAL128; +sub Rmpfr_get_DECIMAL64; +sub Rmpfr_get_FLOAT128; +sub Rmpfr_get_IV; +sub Rmpfr_get_LD; +sub Rmpfr_get_NV; +sub Rmpfr_get_UV; +sub Rmpfr_get_d1; +sub Rmpfr_get_d; +sub Rmpfr_get_d_2exp; +sub Rmpfr_get_default_prec; +sub Rmpfr_get_default_rounding_mode; +sub Rmpfr_get_emax; +sub Rmpfr_get_emax_max; +sub Rmpfr_get_emax_min; +sub Rmpfr_get_emin; +sub Rmpfr_get_emin_max; +sub Rmpfr_get_emin_min; +sub Rmpfr_get_exp; +sub Rmpfr_get_f; +sub Rmpfr_get_float128; +sub Rmpfr_get_flt; +sub Rmpfr_get_ld; +sub Rmpfr_get_ld_2exp; +sub Rmpfr_get_patches; +sub Rmpfr_get_prec; +sub Rmpfr_get_q; +sub Rmpfr_get_si; +sub Rmpfr_get_sj; +sub Rmpfr_get_str_ndigits; +sub Rmpfr_get_ui; +sub Rmpfr_get_uj; +sub Rmpfr_get_version; +sub Rmpfr_get_z; +sub Rmpfr_get_z_2exp; +sub Rmpfr_get_z_exp; +sub Rmpfr_grandom; +sub Rmpfr_greater_p; +sub Rmpfr_greaterequal_p; +sub Rmpfr_hypot; +sub Rmpfr_inexflag_p; +sub Rmpfr_inf_p; +sub Rmpfr_init2; +sub Rmpfr_init2_nobless; +sub Rmpfr_init; +sub Rmpfr_init_nobless; +sub Rmpfr_init_set; +sub Rmpfr_init_set_d; +sub Rmpfr_init_set_d_nobless; +sub Rmpfr_init_set_f; +sub Rmpfr_init_set_f_nobless; +sub Rmpfr_init_set_ld; +sub Rmpfr_init_set_ld_nobless; +sub Rmpfr_init_set_nobless; +sub Rmpfr_init_set_q; +sub Rmpfr_init_set_q_nobless; +sub Rmpfr_init_set_si; +sub Rmpfr_init_set_si_nobless; +sub Rmpfr_init_set_str; +sub Rmpfr_init_set_str_nobless; +sub Rmpfr_init_set_ui; +sub Rmpfr_init_set_ui_nobless; +sub Rmpfr_init_set_z; +sub Rmpfr_init_set_z_nobless; +sub Rmpfr_inp_str; +sub Rmpfr_integer_p; +sub Rmpfr_j0; +sub Rmpfr_j1; +sub Rmpfr_jn; +sub Rmpfr_less_p; +sub Rmpfr_lessequal_p; +sub Rmpfr_lessgreater_p; +sub Rmpfr_lgamma; +sub Rmpfr_li2; +sub Rmpfr_lngamma; +sub Rmpfr_log10; +sub Rmpfr_log1p; +sub Rmpfr_log2; +sub Rmpfr_log; +sub Rmpfr_log_ui; +sub Rmpfr_max; +sub Rmpfr_min; +sub Rmpfr_min_prec; +sub Rmpfr_modf; +sub Rmpfr_mul; +sub Rmpfr_mul_2exp; +sub Rmpfr_mul_2si; +sub Rmpfr_mul_2ui; +sub Rmpfr_mul_d; +sub Rmpfr_mul_q; +sub Rmpfr_mul_si; +sub Rmpfr_mul_ui; +sub Rmpfr_mul_z; +sub Rmpfr_nan_p; +sub Rmpfr_nanflag_p; +sub Rmpfr_neg; +sub Rmpfr_nextabove; +sub Rmpfr_nextbelow; +sub Rmpfr_nexttoward; +sub Rmpfr_nrandom; +sub Rmpfr_number_p; +sub Rmpfr_overflow_p; +sub Rmpfr_pow; +sub Rmpfr_pow_si; +sub Rmpfr_pow_ui; +sub Rmpfr_pow_z; +sub Rmpfr_prec_round; +sub Rmpfr_print_rnd_mode; +sub Rmpfr_q_div; +sub Rmpfr_randclear; +sub Rmpfr_randinit_default; +sub Rmpfr_randinit_default_nobless; +sub Rmpfr_randinit_lc_2exp; +sub Rmpfr_randinit_lc_2exp_nobless; +sub Rmpfr_randinit_lc_2exp_size; +sub Rmpfr_randinit_lc_2exp_size_nobless; +sub Rmpfr_randinit_mt; +sub Rmpfr_randinit_mt_nobless; +sub Rmpfr_random2; +sub Rmpfr_randseed; +sub Rmpfr_randseed_ui; +sub Rmpfr_rec_root; +sub Rmpfr_rec_sqrt; +sub Rmpfr_regular_p; +sub Rmpfr_reldiff; +sub Rmpfr_remainder; +sub Rmpfr_remquo; +sub Rmpfr_rint; +sub Rmpfr_rint_ceil; +sub Rmpfr_rint_floor; +sub Rmpfr_rint_round; +sub Rmpfr_rint_roundeven; +sub Rmpfr_rint_trunc; +sub Rmpfr_root; +sub Rmpfr_rootn_ui; +sub Rmpfr_round; +sub Rmpfr_roundeven; +sub Rmpfr_sec; +sub Rmpfr_sech; +sub Rmpfr_set; +sub Rmpfr_set_DECIMAL128; +sub Rmpfr_set_DECIMAL64; +sub Rmpfr_set_FLOAT128; +sub Rmpfr_set_LD; +sub Rmpfr_set_NV; +sub Rmpfr_set_d; +sub Rmpfr_set_default_prec; +sub Rmpfr_set_default_rounding_mode; +sub Rmpfr_set_divby0; +sub Rmpfr_set_emax; +sub Rmpfr_set_emin; +sub Rmpfr_set_erangeflag; +sub Rmpfr_set_exp; +sub Rmpfr_set_f; +sub Rmpfr_set_float128; +sub Rmpfr_set_flt; +sub Rmpfr_set_inexflag; +sub Rmpfr_set_inf; +sub Rmpfr_set_ld; +sub Rmpfr_set_nan; +sub Rmpfr_set_nanflag; +sub Rmpfr_set_overflow; +sub Rmpfr_set_prec; +sub Rmpfr_set_prec_raw; +sub Rmpfr_set_q; +sub Rmpfr_set_si; +sub Rmpfr_set_si_2exp; +sub Rmpfr_set_sj; +sub Rmpfr_set_sj_2exp; +sub Rmpfr_set_str; +sub Rmpfr_set_ui; +sub Rmpfr_set_ui_2exp; +sub Rmpfr_set_uj; +sub Rmpfr_set_uj_2exp; +sub Rmpfr_set_underflow; +sub Rmpfr_set_z; +sub Rmpfr_set_z_2exp; +sub Rmpfr_set_zero; +sub Rmpfr_setsign; +sub Rmpfr_sgn; +sub Rmpfr_si_div; +sub Rmpfr_si_sub; +sub Rmpfr_signbit; +sub Rmpfr_sin; +sub Rmpfr_sin_cos; +sub Rmpfr_sinh; +sub Rmpfr_sinh_cosh; +sub Rmpfr_sqr; +sub Rmpfr_sqrt; +sub Rmpfr_sqrt_ui; +sub Rmpfr_strtofr; +sub Rmpfr_sub; +sub Rmpfr_sub_d; +sub Rmpfr_sub_q; +sub Rmpfr_sub_si; +sub Rmpfr_sub_ui; +sub Rmpfr_sub_z; +sub Rmpfr_subnormalize; +sub Rmpfr_sum; +sub Rmpfr_swap; +sub Rmpfr_tan; +sub Rmpfr_tanh; +sub Rmpfr_trunc; +sub Rmpfr_ui_div; +sub Rmpfr_ui_pow; +sub Rmpfr_ui_pow_ui; +sub Rmpfr_ui_sub; +sub Rmpfr_underflow_p; +sub Rmpfr_unordered_p; +sub Rmpfr_urandom; +sub Rmpfr_urandomb; +sub Rmpfr_y0; +sub Rmpfr_y1; +sub Rmpfr_yn; +sub Rmpfr_z_div; +sub Rmpfr_z_sub; +sub Rmpfr_zero_p; +sub Rmpfr_zeta; +sub Rmpfr_zeta_ui; +sub SA_NOCLDSTOP() ; +sub SA_NOCLDWAIT() ; +sub SA_NODEFER() ; +sub SA_ONSTACK() ; +sub SA_RESETHAND() ; +sub SA_RESTART() ; +sub SA_SIGINFO() ; +sub SIGALRM() ; +sub SIGBUS() ; +sub SIGCHLD() ; +sub SIGCONT() ; +sub SIGHUP() ; +sub SIGKILL() ; +sub SIGPIPE() ; +sub SIGPOLL() ; +sub SIGPROF() ; +sub SIGQUIT() ; +sub SIGRTMAX() ; +sub SIGRTMIN() ; +sub SIGSTOP() ; +sub SIGSYS() ; +sub SIGTRAP() ; +sub SIGTSTP() ; +sub SIGTTIN() ; +sub SIGTTOU() ; +sub SIGURG() ; +sub SIGUSR1() ; +sub SIGUSR2() ; +sub SIGVTALRM() ; +sub SIGXCPU() ; +sub SIGXFSZ() ; +sub SIG_BLOCK() ; +sub SIG_SETMASK() ; +sub SIG_UNBLOCK() ; +sub STREAM_MAX() ; +sub S_ISBLK; +sub S_ISCHR; +sub S_ISDIR; +sub S_ISFIFO; +sub S_ISREG; +sub TCIFLUSH() ; +sub TCIOFF() ; +sub TCIOFLUSH() ; +sub TCION() ; +sub TCOFLUSH() ; +sub TCOOFF() ; +sub TCOON() ; +sub TCSADRAIN() ; +sub TCSAFLUSH() ; +sub TCSANOW() ; +sub TOSTOP() ; +sub TRmpfr_inp_str; +sub TZNAME_MAX() ; +sub VEOF() ; +sub VEOL() ; +sub VERASE() ; +sub VINTR() ; +sub VKILL() ; +sub VMIN() ; +sub VQUIT() ; +sub VSTART() ; +sub VSTOP() ; +sub VSUSP() ; +sub VTIME() ; +sub WEXITSTATUS; +sub WIFEXITED; +sub WIFSIGNALED; +sub WIFSTOPPED; +sub WSTOPSIG; +sub WTERMSIG; +sub WUNTRACED() ; +sub _DBL_DIG; +sub _DBL_MANT_DIG; +sub _FLT128_DIG; +sub _FLT128_MANT_DIG; +sub _GMP_LIMB_BITS; +sub _GMP_NAIL_BITS; +sub _LDBL_DIG; +sub _LDBL_MANT_DIG; +sub _MPFR_VERSION; +sub _MPFR_VERSION_MAJOR; +sub _MPFR_VERSION_MINOR; +sub _MPFR_VERSION_PATCHLEVEL; +sub _MPFR_VERSION_STRING; +sub _MPFR_WANT_DECIMAL128; +sub _MPFR_WANT_DECIMAL64; +sub _MPFR_WANT_DECIMAL_FLOATS; +sub _MPFR_WANT_FLOAT128; +sub _PC_CHOWN_RESTRICTED() ; +sub _PC_LINK_MAX() ; +sub _PC_MAX_CANON() ; +sub _PC_MAX_INPUT() ; +sub _PC_NAME_MAX() ; +sub _PC_NO_TRUNC() ; +sub _PC_PATH_MAX() ; +sub _PC_PIPE_BUF() ; +sub _PC_VDISABLE() ; +sub _Rmpfr_out_str; +sub _Rmpfr_out_strP; +sub _Rmpfr_out_strPS; +sub _Rmpfr_out_strS; +sub _SC_ARG_MAX() ; +sub _SC_CHILD_MAX() ; +sub _SC_CLK_TCK() ; +sub _SC_JOB_CONTROL() ; +sub _SC_NGROUPS_MAX() ; +sub _SC_OPEN_MAX() ; +sub _SC_PAGESIZE() ; +sub _SC_SAVED_IDS() ; +sub _SC_STREAM_MAX() ; +sub _SC_TZNAME_MAX() ; +sub _SC_VERSION() ; +sub _SvNOK; +sub _SvPOK; +sub _TRmpfr_out_str; +sub _TRmpfr_out_strP; +sub _TRmpfr_out_strPS; +sub _TRmpfr_out_strS; +sub _can_pass_float128; +sub _d_bytes; +sub _d_bytes_fr; +sub _dd_bytes; +sub _dd_bytes_fr; +sub _exit; +sub _f128_bytes; +sub _f128_bytes_fr; +sub _fr_to_q; +sub _get_xs_version; +sub _has_inttypes; +sub _has_longdouble; +sub _has_longlong; +sub _have_IEEE_754_long_double; +sub _have_extended_precision_long_double; +sub _is_readonly; +sub _isobject; +sub _itsa; +sub _ivsize; +sub _ivsize_bits; +sub _ld_bytes; +sub _ld_bytes_fr; +sub _ld_subnormal_bug; +sub _lsb; +sub _max_base; +sub _mp_sizes; +sub _mpfr_want_float128; +sub _nv_is_float128; +sub _nvsize; +sub _readonly_off; +sub _readonly_on; +sub _required_ldbl_mant_dig; +sub _win32_infnanstring; +sub _wrap_count; +sub abort; +sub access; +sub acos; +sub asctime; +sub asin; +sub assert; +sub atan; +sub atexit; +sub atodouble; +sub atof; +sub atoi; +sub atol; +sub atonv; +sub bsearch; +sub calloc; +sub ceil; +sub cfgetispeed; +sub cfgetospeed; +sub cfsetispeed; +sub cfsetospeed; +sub clear_nnum; +sub clear_nok_pok; +sub clearerr; +sub clock; +sub cosh; +sub creat; +sub ctermid; +sub ctime; +sub cuserid; +sub difftime; +sub div; +sub dup2; +sub dup; +sub errno; +sub execl; +sub execle; +sub execlp; +sub execv; +sub execve; +sub execvp; +sub fabs; +sub fclose; +sub fdopen; +sub feof; +sub ferror; +sub fflush; +sub fgetc; +sub fgetpos; +sub fgets; +sub floor; +sub fmod; +sub fopen; +sub fpathconf; +sub fprintf; +sub fputc; +sub fputs; +sub fread; +sub free; +sub freopen; +sub frexp; +sub fscanf; +sub fseek; +sub fsetpos; +sub fstat; +sub fsync; +sub ftell; +sub fwrite; +sub get_package_name; +sub get_refcnt; +sub getchar; +sub getcwd; +sub getegid; +sub getenv; +sub geteuid; +sub getgid; +sub getgroups; +sub getpid; +sub gets; +sub getuid; +sub gmp_v; +sub isatty; +sub labs; +sub ldexp; +sub ldiv; +sub localeconv; +sub log10; +sub longjmp; +sub lseek; +sub malloc; +sub mblen; +sub mbstowcs; +sub mbtowc; +sub memchr; +sub memcmp; +sub memcpy; +sub memmove; +sub memset; +sub mkfifo; +sub mktime; +sub modf; +sub nanflag_bug; +sub nnumflag; +sub nok_pokflag; +sub nvtoa; +sub offsetof; +sub overload_abs; +sub overload_add; +sub overload_add_eq; +sub overload_atan2; +sub overload_copy; +sub overload_cos; +sub overload_dec; +sub overload_div; +sub overload_div_eq; +sub overload_equiv; +sub overload_exp; +sub overload_gt; +sub overload_gte; +sub overload_inc; +sub overload_int; +sub overload_log; +sub overload_lt; +sub overload_lte; +sub overload_mul; +sub overload_mul_eq; +sub overload_not; +sub overload_not_equiv; +sub overload_pow; +sub overload_pow_eq; +sub overload_sin; +sub overload_spaceship; +sub overload_sqrt; +sub overload_sub; +sub overload_sub_eq; +sub overload_true; +sub pathconf; +sub pause; +sub pow; +sub prec_cast; +sub putc; +sub putchar; +sub puts; +sub qsort; +sub raise; +sub realloc; +sub remove; +sub rewind; +sub scanf; +sub set_nnum; +sub set_nok_pok; +sub setbuf; +sub setgid; +sub setjmp; +sub setlocale; +sub setpgid; +sub setsid; +sub setuid; +sub setvbuf; +sub sigaction; +sub siglongjmp; +sub signal; +sub sigpending; +sub sigprocmask; +sub sigsetjmp; +sub sigsuspend; +sub sinh; +sub sscanf; +sub stderr; +sub stdin; +sub stdout; +sub strcat; +sub strchr; +sub strcmp; +sub strcoll; +sub strcpy; +sub strcspn; +sub strerror; +sub strftime; +sub strlen; +sub strncat; +sub strncmp; +sub strncpy; +sub strpbrk; +sub strrchr; +sub strspn; +sub strstr; +sub strtod; +sub strtok; +sub strtol; +sub strtoul; +sub strxfrm; +sub sysconf; +sub tan; +sub tanh; +sub tcdrain; +sub tcflow; +sub tcflush; +sub tcgetattr; +sub tcgetpgrp; +sub tcsendbreak; +sub tcsetattr; +sub tcsetpgrp; +sub tmpfile; +sub tmpnam; +sub ttyname; +sub tzname; +sub tzset; +sub uname; +sub ungetc; +sub vfprintf; +sub vprintf; +sub vsprintf; +sub wcstombs; +sub wctomb; +sub wrap_mpfr_fprintf; +sub wrap_mpfr_fprintf_rnd; +sub wrap_mpfr_printf; +sub wrap_mpfr_printf_rnd; +sub wrap_mpfr_snprintf; +sub wrap_mpfr_snprintf_rnd; +sub wrap_mpfr_sprintf; +sub wrap_mpfr_sprintf_rnd; +} +package Math::MPFR::Prec { +sub DESTROY; +sub prec_cast; +} +package Math::MPFR::Random { +sub Rmpfr_randinit_default; +sub Rmpfr_randinit_lc_2exp; +sub Rmpfr_randinit_lc_2exp_size; +sub Rmpfr_randinit_mt; +} +package Math::MPFR::V { +sub _MPFR_VERSION; +sub _MPFR_VERSION_MAJOR; +sub _MPFR_VERSION_MINOR; +sub _MPFR_VERSION_PATCHLEVEL; +sub _MPFR_VERSION_STRING; +sub ___GMP_CC; +sub ___GMP_CFLAGS; +sub ___GNU_MP_VERSION; +sub ___GNU_MP_VERSION_MINOR; +sub ___GNU_MP_VERSION_PATCHLEVEL; +} +package Math::Prime::Util { +sub CLONE(;@) ; +sub Pi(;$) ; +sub _LMOS_pi($) ; +sub _LMO_pi($) ; +sub _XS_ExponentialIntegral($) ; +sub _XS_LambertW($) ; +sub _XS_LogarithmicIntegral($) ; +sub _XS_RiemannR($) ; +sub _XS_RiemannZeta($) ; +sub _XS_get_callgmp() ; +sub _XS_get_secure() ; +sub _XS_get_verbose() ; +sub _XS_set_callgmp($) ; +sub _XS_set_secure() ; +sub _XS_set_verbose($) ; +sub _end_for_loop($) ; +sub _get_forexit() ; +sub _get_prime_cache_size() ; +sub _is_csprng_well_seeded() ; +sub _legendre_pi($) ; +sub _lehmer_pi($) ; +sub _meissel_pi($) ; +sub _n_ramanujan_primes($$) ; +sub _pidigits($) ; +sub _ramanujan_primes($$) ; +sub _segment_pi($) ; +sub _start_for_loop() ; +sub _validate_num($;@) ; +sub addmod($$$) ; +sub binomial($$) ; +sub carmichael_lambda($) ; +sub chebyshev_psi($) ; +sub chebyshev_theta($) ; +sub chinese(@) ; +sub csrand(;$) ; +sub divisor_sum($;@) ; +sub divisors($) ; +sub divmod($$$) ; +sub drand(;$) ; +sub ecm_factor($;@) ; +sub entropy_bytes($) ; +sub erat_primes($$) ; +sub euler_phi($;$) ; +sub exp_mangoldt($) ; +sub factor($) ; +sub factor_exp($) ; +sub factorial($) ; +sub factorialmod($$) ; +sub fermat_factor($;@) ; +sub forcomb(&$;$) ; +sub forcomp(&$;$) ; +sub forcomposites(&$;$) ; +sub forderange(&$;$) ; +sub fordivisors(&$) ; +sub forfactored(&$;$) ; +sub foroddcomposites(&$;$) ; +sub forpart(&$;$) ; +sub forperm(&$;$) ; +sub forprimes(&$;$) ; +sub forsemiprimes(&$;$) ; +sub forsetproduct(&@) ; +sub forsquarefree(&$;$) ; +sub fromdigits($;$$) ; +sub gcd(@) ; +sub gcdext($$) ; +sub hammingweight($) ; +sub hclassno($) ; +sub holf_factor($;@) ; +sub inverse_li($) ; +sub inverse_totient($) ; +sub invmod($$) ; +sub irand() ; +sub irand64() ; +sub is_aks_prime($) ; +sub is_almost_extra_strong_lucas_pseudoprime($;$) ; +sub is_bpsw_prime($) ; +sub is_carmichael($) ; +sub is_catalan_pseudoprime($) ; +sub is_euler_plumb_pseudoprime($) ; +sub is_euler_pseudoprime($;@) ; +sub is_extra_strong_lucas_pseudoprime($) ; +sub is_frobenius_khashin_pseudoprime($) ; +sub is_frobenius_pseudoprime($;$$) ; +sub is_frobenius_underwood_pseudoprime($) ; +sub is_fundamental($) ; +sub is_lucas_pseudoprime($) ; +sub is_mersenne_prime($) ; +sub is_perrin_pseudoprime($;$) ; +sub is_pillai($) ; +sub is_polygonal($$;$) ; +sub is_power($;$$) ; +sub is_prime($) ; +sub is_prime_power($;$) ; +sub is_primitive_root($$) ; +sub is_prob_prime($) ; +sub is_provable_prime($) ; +sub is_pseudoprime($;@) ; +sub is_quasi_carmichael($) ; +sub is_ramanujan_prime($) ; +sub is_semiprime($) ; +sub is_square($) ; +sub is_square_free($) ; +sub is_strong_lucas_pseudoprime($) ; +sub is_strong_pseudoprime($;@) ; +sub is_totient($) ; +sub jordan_totient($$) ; +sub kronecker($$) ; +sub lastfor() ; +sub lcm(@) ; +sub legendre_phi($$) ; +sub lehman_factor($;@) ; +sub liouville($) ; +sub logint($$;$) ; +sub lucas_sequence(;@) ; +sub lucasu(;@) ; +sub lucasv(;@) ; +sub mertens($) ; +sub miller_rabin_random($;$$) ; +sub moebius($;$) ; +sub mulmod($$$) ; +sub next_prime($) ; +sub nth_prime($) ; +sub nth_prime_approx($) ; +sub nth_prime_lower($) ; +sub nth_prime_upper($) ; +sub nth_ramanujan_prime($) ; +sub nth_ramanujan_prime_approx($) ; +sub nth_ramanujan_prime_lower($) ; +sub nth_ramanujan_prime_upper($) ; +sub nth_semiprime($) ; +sub nth_semiprime_approx($) ; +sub nth_twin_prime($) ; +sub nth_twin_prime_approx($) ; +sub numtoperm($$) ; +sub pbrent_factor($;@) ; +sub permtonum($) ; +sub pminus1_factor($;@) ; +sub powmod($$$) ; +sub pplus1_factor($;@) ; +sub prev_prime($) ; +sub prho_factor($;@) ; +sub prime_count($;@) ; +sub prime_count_approx($) ; +sub prime_count_lower($) ; +sub prime_count_upper($) ; +sub prime_memfree() ; +sub prime_precalc($) ; +sub print_primes($;@) ; +sub ramanujan_prime_count($;@) ; +sub ramanujan_prime_count_approx($;@) ; +sub ramanujan_prime_count_lower($) ; +sub ramanujan_prime_count_upper($) ; +sub ramanujan_sum($$) ; +sub ramanujan_tau($) ; +sub rand(;$) ; +sub random_bytes($) ; +sub random_factored_integer($) ; +sub random_maurer_prime($) ; +sub random_nbit_prime($) ; +sub random_ndigit_prime($) ; +sub random_prime($;$) ; +sub random_proven_prime($) ; +sub random_semiprime($) ; +sub random_shawe_taylor_prime($) ; +sub random_strong_prime($) ; +sub random_unrestricted_semiprime($) ; +sub randperm($;$) ; +sub rootint($$;$) ; +sub segment_primes($$) ; +sub segment_twin_primes($$) ; +sub semi_prime_sieve($$) ; +sub semiprime_count($;@) ; +sub semiprime_count_approx($) ; +sub shuffle(@) ; +sub sieve_prime_cluster($$;@) ; +sub sieve_primes($$) ; +sub sieve_range($$$) ; +sub sqrtint($) ; +sub sqrtmod($$) ; +sub squfof_factor($;@) ; +sub srand(;$) ; +sub stirling($$;$) ; +sub sum_primes($;@) ; +sub sumdigits($;$) ; +sub todigits($;$$) ; +sub todigitstring($;$$) ; +sub trial_factor($;@) ; +sub trial_primes($$) ; +sub twin_prime_count($;@) ; +sub twin_prime_count_approx($) ; +sub urandomb($) ; +sub urandomm($) ; +sub valuation($$) ; +sub vecall(&@) ; +sub vecany(&@) ; +sub vecextract($$) ; +sub vecfirst(&@) ; +sub vecfirstidx(&@) ; +sub vecmax(@) ; +sub vecmin(@) ; +sub vecnone(&@) ; +sub vecnotall(&@) ; +sub vecprod(@) ; +sub vecreduce(&@) ; +sub vecsum(@) ; +sub znlog($$$) ; +sub znorder($$) ; +sub znprimroot($) ; +} +package Math::Prime::Util::GMP { +sub Euler($) ; +sub FD_CLOEXEC() ; +sub F_ALLOCSP() ; +sub F_ALLOCSP64() ; +sub F_COMPAT() ; +sub F_DUP2FD() ; +sub F_DUPFD() ; +sub F_EXLCK() ; +sub F_FREESP() ; +sub F_FREESP64() ; +sub F_FSYNC() ; +sub F_FSYNC64() ; +sub F_GETFD() ; +sub F_GETFL() ; +sub F_GETLK() ; +sub F_GETLK64() ; +sub F_GETOWN() ; +sub F_NODNY() ; +sub F_POSIX() ; +sub F_RDACC() ; +sub F_RDDNY() ; +sub F_RDLCK() ; +sub F_RWACC() ; +sub F_RWDNY() ; +sub F_SETFD() ; +sub F_SETFL() ; +sub F_SETLK() ; +sub F_SETLK64() ; +sub F_SETLKW() ; +sub F_SETLKW64() ; +sub F_SETOWN() ; +sub F_SHARE() ; +sub F_SHLCK() ; +sub F_UNLCK() ; +sub F_UNSHARE() ; +sub F_WRACC() ; +sub F_WRDNY() ; +sub F_WRLCK() ; +sub O_ALIAS() ; +sub O_ASYNC() ; +sub O_DEFER() ; +sub O_DIRECT() ; +sub O_DIRECTORY() ; +sub O_DSYNC() ; +sub O_EXLOCK() ; +sub O_LARGEFILE() ; +sub O_NDELAY() ; +sub O_NOCTTY() ; +sub O_NOFOLLOW() ; +sub O_NONBLOCK() ; +sub O_RSRC() ; +sub O_RSYNC() ; +sub O_SHLOCK() ; +sub O_SYNC() ; +sub Pi($) ; +sub _GMP_destroy() ; +sub _GMP_init() ; +sub _GMP_memfree() ; +sub _GMP_set_verbose($) ; +sub _is_provable_prime($;$) ; +sub _validate_ecpp_curve($$$$$$$) ; +sub addmod($$$) ; +sub addreal($$;$) ; +sub agmreal($$;$) ; +sub bernfrac($) ; +sub bernreal($;$) ; +sub binomial($$) ; +sub carmichael_lambda($) ; +sub chinese(@) ; +sub consecutive_integer_lcm($) ; +sub divisors($) ; +sub divmod($$$) ; +sub divreal($$;$) ; +sub drand(;$) ; +sub ecm_factor($;@) ; +sub ei($;$) ; +sub exp_mangoldt($) ; +sub expreal($;$) ; +sub factor($) ; +sub factorial($) ; +sub factorial_sum($) ; +sub factorialmod($$) ; +sub gcd(@) ; +sub gcdext($$) ; +sub hammingweight($) ; +sub harmfrac($) ; +sub harmreal($;$) ; +sub holf_factor($;@) ; +sub invmod($$) ; +sub irand() ; +sub irand64() ; +sub is_aks_prime($) ; +sub is_almost_extra_strong_lucas_pseudoprime($;$) ; +sub is_bls75_prime($) ; +sub is_bpsw_prime($) ; +sub is_carmichael($) ; +sub is_csprng_well_seeded() ; +sub is_ecpp_prime($) ; +sub is_euler_plumb_pseudoprime($) ; +sub is_euler_pseudoprime($;@) ; +sub is_extra_strong_lucas_pseudoprime($) ; +sub is_frobenius_khashin_pseudoprime($) ; +sub is_frobenius_pseudoprime($;$$) ; +sub is_frobenius_underwood_pseudoprime($) ; +sub is_fundamental($) ; +sub is_llr_prime($) ; +sub is_lucas_pseudoprime($) ; +sub is_mersenne_prime($) ; +sub is_miller_prime($;$) ; +sub is_nminus1_prime($) ; +sub is_nplus1_prime($) ; +sub is_perrin_pseudoprime($;$) ; +sub is_polygonal($$) ; +sub is_power($;$) ; +sub is_prime($) ; +sub is_prime_power($) ; +sub is_primitive_root($$) ; +sub is_prob_prime($) ; +sub is_proth_prime($) ; +sub is_pseudoprime($;@) ; +sub is_semiprime($) ; +sub is_square($) ; +sub is_strong_lucas_pseudoprime($) ; +sub is_strong_pseudoprime($;@) ; +sub is_totient($) ; +sub jordan_totient($$) ; +sub kronecker($$) ; +sub lambertw($;$) ; +sub lcm(@) ; +sub li($;$) ; +sub liouville($) ; +sub logint($$) ; +sub logreal($;$) ; +sub lucas_sequence($$$$) ; +sub lucasu($$$) ; +sub lucasv($$$) ; +sub miller_rabin_random($;$$) ; +sub moebius($;$) ; +sub mulmod($$$) ; +sub mulreal($$;$) ; +sub multifactorial($$) ; +sub next_prime($) ; +sub numtoperm($$) ; +sub partitions($) ; +sub pbrent_factor($;@) ; +sub permtonum($) ; +sub pminus1_factor($;@) ; +sub pn_primorial($) ; +sub polygonal_nth($$) ; +sub powmod($$$) ; +sub powreal($$;$) ; +sub pplus1_factor($;@) ; +sub prev_prime($) ; +sub prho_factor($;@) ; +sub prime_count($;$) ; +sub prime_count_lower($) ; +sub prime_count_upper($) ; +sub primorial($) ; +sub qs_factor($;@) ; +sub ramanujan_tau($) ; +sub random_bytes($) ; +sub random_maurer_prime($) ; +sub random_maurer_prime_with_cert($) ; +sub random_nbit_prime($) ; +sub random_ndigit_prime($) ; +sub random_prime($;$) ; +sub random_shawe_taylor_prime($) ; +sub random_shawe_taylor_prime_with_cert($) ; +sub random_strong_prime($) ; +sub riemannr($;$) ; +sub rootint($$) ; +sub rootreal($$;$) ; +sub seed_csprng($$) ; +sub sieve_prime_cluster($$;@) ; +sub sieve_primes($$;@) ; +sub sieve_range($$$) ; +sub sieve_twin_primes($$;@) ; +sub sigma($;$) ; +sub sqrtint($) ; +sub sqrtmod($$) ; +sub squfof_factor($;@) ; +sub stirling($$;$) ; +sub subfactorial($) ; +sub subreal($$;$) ; +sub surround_primes($;$) ; +sub todigits($;$$) ; +sub totient($) ; +sub trial_factor($;@) ; +sub urandomb($) ; +sub urandomm($) ; +sub urandomr($;$) ; +sub valuation($$) ; +sub vecprod(@) ; +sub vecsum(@) ; +sub zeta($;$) ; +sub znorder($$) ; +sub znprimroot($) ; +} +package Math::UInt64 { +sub STORABLE_freeze; +sub STORABLE_thaw; +sub _add; +sub _and; +sub _bnot; +sub _bool; +sub _clone; +sub _dec; +sub _div; +sub _eqn; +sub _gen; +sub _gtn; +sub _inc; +sub _left; +sub _len; +sub _ltn; +sub _mul; +sub _neg; +sub _nen; +sub _not; +sub _number; +sub _or; +sub _pow; +sub _rest; +sub _right; +sub _spaceship; +sub _string; +sub _sub; +sub _xor; +} +package Moose { +sub is_class_loaded; +} +package Moose::Exporter { +sub _export_is_flagged; +sub _flag_as_reexport; +sub is_class_loaded; +sub reftype($) ; +sub subname; +sub uniq(@) ; +} +package Moose::Meta::Attribute { +sub any(&@) ; +sub blessed($) ; +} +package Moose::Meta::Class { +sub any(&@) ; +sub blessed($) ; +} +package Moose::Meta::Class::Immutable::Trait { +sub blessed($) ; +} +package Moose::Meta::Method::Constructor { +sub weaken($) ; +} +package Moose::Meta::Method::Delegation { +sub blessed($) ; +sub weaken($) ; +} +package Moose::Meta::Method::Destructor { +sub blessed($) ; +sub weaken($) ; +} +package Moose::Meta::Object::Trait { +sub blessed($) ; +} +package Moose::Meta::Role { +sub blessed($) ; +} +package Moose::Meta::Role::Application { +sub all(&@) ; +} +package Moose::Meta::Role::Application::RoleSummation { +sub all(&@) ; +sub blessed($) ; +} +package Moose::Meta::Role::Application::ToClass { +sub first(&@) ; +sub weaken($) ; +} +package Moose::Meta::Role::Application::ToInstance { +sub _reset_amagic; +sub all(&@) ; +sub blessed($) ; +} +package Moose::Meta::Role::Attribute { +sub all(&@) ; +sub blessed($) ; +sub weaken($) ; +} +package Moose::Meta::Role::Composite { +sub blessed($) ; +} +package Moose::Meta::TypeCoercion::Union { +sub blessed($) ; +} +package Moose::Meta::TypeConstraint { +sub refaddr($) ; +sub subname; +} +package Moose::Meta::TypeConstraint::DuckType { +sub all(&@) ; +sub blessed($) ; +} +package Moose::Meta::TypeConstraint::Parameterized { +sub blessed($) ; +} +package Moose::Meta::TypeConstraint::Registry { +sub blessed($) ; +} +package Moose::Meta::TypeConstraint::Union { +sub all(&@) ; +sub first(&@) ; +} +package Moose::Role { +sub is_class_loaded; +} +package Moose::Util { +sub all(&@) ; +sub any(&@) ; +sub blessed($) ; +sub first(&@) ; +} +package Moose::Util::MetaRole { +sub all(&@) ; +sub blessed($) ; +sub first(&@) ; +} +package Moose::Util::TypeConstraints { +sub blessed($) ; +} +package Moose::Util::TypeConstraints::Builtins { +sub _RegexpRef; +sub blessed($) ; +sub is_class_loaded; +} +package NDBM_File { +sub DELETE; +sub DESTROY; +sub FETCH; +sub FIRSTKEY; +sub NEXTKEY; +sub STORE; +sub TIEHASH; +sub clearerr; +sub error; +sub filter_fetch_key; +sub filter_fetch_value; +sub filter_store_key; +sub filter_store_value; +} +package Net::SSH2 { +sub AF_802() ; +sub AF_AAL() ; +sub AF_CTF() ; +sub AF_GOSIP() ; +sub AF_KEY() ; +sub AF_LAST() ; +sub AF_LINK() ; +sub AF_NBS() ; +sub AF_NIT() ; +sub AF_OSINET() ; +sub AF_ROUTE() ; +sub AF_USER() ; +sub AF_WAN() ; +sub AF_X25() ; +sub CLONE; +sub DESTROY; +sub IOV_MAX() ; +sub IP_RECVOPTS() ; +sub IP_RECVRETOPTS() ; +sub IP_RETOPTS() ; +sub MSG_BCAST() ; +sub MSG_BTAG() ; +sub MSG_CTLFLAGS() ; +sub MSG_CTLIGNORE() ; +sub MSG_CTRUNC() ; +sub MSG_DONTWAIT() ; +sub MSG_EOF() ; +sub MSG_EOR() ; +sub MSG_ERRQUEUE() ; +sub MSG_ETAG() ; +sub MSG_FASTOPEN() ; +sub MSG_FIN() ; +sub MSG_MCAST() ; +sub MSG_NOSIGNAL() ; +sub MSG_PROXY() ; +sub MSG_RST() ; +sub MSG_SYN() ; +sub MSG_TRUNC() ; +sub MSG_URG() ; +sub MSG_WIRE() ; +sub O_ALIAS() ; +sub O_ASYNC() ; +sub O_DEFER() ; +sub O_DIRECT() ; +sub O_DIRECTORY() ; +sub O_DSYNC() ; +sub O_EXLOCK() ; +sub O_LARGEFILE() ; +sub O_NDELAY() ; +sub O_NOCTTY() ; +sub O_NOFOLLOW() ; +sub O_NONBLOCK() ; +sub O_RSRC() ; +sub O_RSYNC() ; +sub O_SHLOCK() ; +sub O_SYNC() ; +sub PF_802() ; +sub PF_AAL() ; +sub PF_CTF() ; +sub PF_GOSIP() ; +sub PF_KEY() ; +sub PF_LAST() ; +sub PF_LINK() ; +sub PF_NBS() ; +sub PF_NIT() ; +sub PF_OSINET() ; +sub PF_ROUTE() ; +sub PF_USER() ; +sub PF_WAN() ; +sub PF_X25() ; +sub SCM_CONNECT() ; +sub SCM_CREDENTIALS() ; +sub SCM_CREDS() ; +sub SCM_RIGHTS() ; +sub SCM_TIMESTAMP() ; +sub SO_ATTACH_FILTER() ; +sub SO_BACKLOG() ; +sub SO_CHAMELEON() ; +sub SO_DETACH_FILTER() ; +sub SO_DGRAM_ERRIND() ; +sub SO_DOMAIN() ; +sub SO_FAMILY() ; +sub SO_PASSCRED() ; +sub SO_PASSIFNAME() ; +sub SO_PEERCRED() ; +sub SO_PROTOCOL() ; +sub SO_PROTOTYPE() ; +sub SO_REUSEPORT() ; +sub SO_SECURITY_AUTHENTICATION() ; +sub SO_SECURITY_ENCRYPTION_NETWORK() ; +sub SO_SECURITY_ENCRYPTION_TRANSPORT() ; +sub SO_STATE() ; +sub SO_XOPEN() ; +sub SO_XSE() ; +sub UIO_MAXIOV() ; +sub _auth_list; +sub _method; +sub _new; +sub _parse_constant; +sub _poll; +sub _scp_get; +sub _scp_put; +sub _set_error; +sub _startup; +sub auth_agent; +sub auth_hostbased; +sub auth_keyboard; +sub auth_ok; +sub auth_password; +sub auth_publickey; +sub auth_publickey_frommemory; +sub banner; +sub block_directions; +sub blocking; +sub callback; +sub channel; +sub constant; +sub debug; +sub disconnect; +sub error; +sub flag; +sub hostkey_hash; +sub hostname; +sub inet_aton; +sub inet_ntoa; +sub keepalive_config; +sub keepalive_send; +sub known_hosts; +sub listen; +sub pack_sockaddr_in6; +sub pack_sockaddr_in; +sub pack_sockaddr_un; +sub port; +sub public_key; +sub remote_hostkey; +sub sftp; +sub sock; +sub sockaddr_family; +sub tcpip; +sub timeout; +sub trace; +sub unpack_sockaddr_in6; +sub unpack_sockaddr_in; +sub unpack_sockaddr_un; +sub version; +} +package Net::SSH2::Channel { +sub DESTROY; +sub GETC; +sub _exit_signal; +sub _exit_status; +sub _pty; +sub _setenv; +sub _wait_closed; +sub close; +sub eof; +sub ext_data; +sub flush; +sub getc; +sub process; +sub pty_size; +sub read; +sub receive_window_adjust; +sub send_eof; +sub session; +sub wait_eof; +sub window_read; +sub window_write; +sub write; +} +package Net::SSH2::Dir { +sub DESTROY; +sub read; +} +package Net::SSH2::File { +sub DESTROY; +sub GETC; +sub getc; +sub read; +sub seek; +sub setstat; +sub stat; +sub tell; +sub write; +} +package Net::SSH2::KnownHosts { +sub DESTROY; +sub add; +sub check; +sub readfile; +sub readline; +sub writefile; +sub writeline; +} +package Net::SSH2::Listener { +sub DESTROY; +sub accept; +} +package Net::SSH2::PublicKey { +sub DESTROY; +sub add; +sub fetch; +sub remove; +} +package Net::SSH2::SFTP { +sub DESTROY; +sub error; +sub mkdir; +sub open; +sub opendir; +sub readlink; +sub realpath; +sub rename; +sub rmdir; +sub session; +sub setstat; +sub stat; +sub symlink; +sub unlink; +} +package Net::SSLeay { +sub AF_802() ; +sub AF_AAL() ; +sub AF_CTF() ; +sub AF_GOSIP() ; +sub AF_KEY() ; +sub AF_LAST() ; +sub AF_LINK() ; +sub AF_NBS() ; +sub AF_NIT() ; +sub AF_OSINET() ; +sub AF_ROUTE() ; +sub AF_USER() ; +sub AF_WAN() ; +sub AF_X25() ; +sub ASN1_INTEGER_free($) ; +sub ASN1_INTEGER_get($) ; +sub ASN1_INTEGER_new() ; +sub ASN1_INTEGER_set($$) ; +sub ASN1_TIME_free($) ; +sub ASN1_TIME_new() ; +sub ASN1_TIME_set($$) ; +sub ASN1_TIME_timet($) ; +sub BIO_eof($) ; +sub BIO_f_ssl() ; +sub BIO_free($) ; +sub BIO_new($) ; +sub BIO_new_buffer_ssl_connect($) ; +sub BIO_new_file($$) ; +sub BIO_new_ssl($$) ; +sub BIO_new_ssl_connect($) ; +sub BIO_pending($) ; +sub BIO_read($;$) ; +sub BIO_s_mem() ; +sub BIO_ssl_copy_session_id($$) ; +sub BIO_ssl_shutdown($) ; +sub BIO_wpending($) ; +sub BIO_write($$) ; +sub CIPHER_description($$$) ; +sub CIPHER_get_bits($;$) ; +sub CIPHER_get_name($) ; +sub CLONE(;@) ; +sub COMP_add_compression_method($$) ; +sub CTX_add_client_CA($$) ; +sub CTX_add_extra_chain_cert($$) ; +sub CTX_add_session($$) ; +sub CTX_callback_ctrl($$$) ; +sub CTX_check_private_key($) ; +sub CTX_ctrl($$$$) ; +sub CTX_flush_sessions($$) ; +sub CTX_free($) ; +sub CTX_get0_param($) ; +sub CTX_get_app_data($) ; +sub CTX_get_cert_store($) ; +sub CTX_get_client_CA_list($) ; +sub CTX_get_ex_data($$) ; +sub CTX_get_ex_new_index($;$$$$) ; +sub CTX_get_max_proto_version($) ; +sub CTX_get_min_proto_version($) ; +sub CTX_get_mode($) ; +sub CTX_get_num_tickets($) ; +sub CTX_get_options($) ; +sub CTX_get_quiet_shutdown($) ; +sub CTX_get_read_ahead($) ; +sub CTX_get_security_level($) ; +sub CTX_get_session_cache_mode($) ; +sub CTX_get_timeout($) ; +sub CTX_get_verify_depth($) ; +sub CTX_get_verify_mode($) ; +sub CTX_load_verify_locations($$$) ; +sub CTX_new() ; +sub CTX_new_with_method($) ; +sub CTX_remove_session($$) ; +sub CTX_sess_accept($) ; +sub CTX_sess_accept_good($) ; +sub CTX_sess_accept_renegotiate($) ; +sub CTX_sess_cache_full($) ; +sub CTX_sess_cb_hits($) ; +sub CTX_sess_connect($) ; +sub CTX_sess_connect_good($) ; +sub CTX_sess_connect_renegotiate($) ; +sub CTX_sess_get_cache_size($) ; +sub CTX_sess_hits($) ; +sub CTX_sess_misses($) ; +sub CTX_sess_number($) ; +sub CTX_sess_set_cache_size($$) ; +sub CTX_sess_set_new_cb($$) ; +sub CTX_sess_set_remove_cb($$) ; +sub CTX_sess_timeouts($) ; +sub CTX_sessions($) ; +sub CTX_set1_curves_list($$) ; +sub CTX_set1_groups_list($$) ; +sub CTX_set1_param($$) ; +sub CTX_set_alpn_protos($;$) ; +sub CTX_set_alpn_select_cb($$;$) ; +sub CTX_set_app_data($$) ; +sub CTX_set_cert_store($$) ; +sub CTX_set_cert_verify_callback($$;$) ; +sub CTX_set_cipher_list($$) ; +sub CTX_set_ciphersuites($$) ; +sub CTX_set_client_CA_list($$) ; +sub CTX_set_default_passwd_cb($;$) ; +sub CTX_set_default_passwd_cb_userdata($;$) ; +sub CTX_set_default_verify_paths($) ; +sub CTX_set_ex_data($$$) ; +sub CTX_set_info_callback($$;$) ; +sub CTX_set_max_proto_version($$) ; +sub CTX_set_min_proto_version($$) ; +sub CTX_set_mode($$) ; +sub CTX_set_next_proto_select_cb($$;$) ; +sub CTX_set_next_protos_advertised_cb($$;$) ; +sub CTX_set_num_tickets($$) ; +sub CTX_set_options($$) ; +sub CTX_set_post_handshake_auth($$) ; +sub CTX_set_psk_client_callback($;$) ; +sub CTX_set_purpose($$) ; +sub CTX_set_quiet_shutdown($$) ; +sub CTX_set_read_ahead($$) ; +sub CTX_set_security_level($$) ; +sub CTX_set_session_cache_mode($$) ; +sub CTX_set_session_id_context($$$) ; +sub CTX_set_ssl_version($$) ; +sub CTX_set_timeout($$) ; +sub CTX_set_tlsext_servername_callback($;$$) ; +sub CTX_set_tlsext_status_cb($$;$) ; +sub CTX_set_tlsext_ticket_getkey_cb($;$$) ; +sub CTX_set_tmp_dh($$) ; +sub CTX_set_tmp_dh_callback($$) ; +sub CTX_set_tmp_ecdh($$) ; +sub CTX_set_trust($$) ; +sub CTX_set_verify($$;$) ; +sub CTX_set_verify_depth($$) ; +sub CTX_tlsv1_1_new() ; +sub CTX_tlsv1_2_new() ; +sub CTX_tlsv1_new() ; +sub CTX_use_PKCS12_file($$;$) ; +sub CTX_use_PrivateKey($$) ; +sub CTX_use_PrivateKey_file($$$) ; +sub CTX_use_RSAPrivateKey($$) ; +sub CTX_use_RSAPrivateKey_file($$$) ; +sub CTX_use_certificate($$) ; +sub CTX_use_certificate_chain_file($$) ; +sub CTX_use_certificate_file($$$) ; +sub CTX_v23_new() ; +sub DH_free($) ; +sub EC_KEY_free($) ; +sub EC_KEY_generate_key($) ; +sub EC_KEY_new_by_curve_name($) ; +sub ENGINE_by_id($) ; +sub ENGINE_load_builtin_engines() ; +sub ENGINE_register_all_complete() ; +sub ENGINE_set_default($$) ; +sub ERR_clear_error() ; +sub ERR_error_string($;$) ; +sub ERR_get_error() ; +sub ERR_load_RAND_strings() ; +sub ERR_load_SSL_strings() ; +sub ERR_load_crypto_strings() ; +sub ERR_peek_error() ; +sub ERR_put_error($$$$$) ; +sub EVP_Digest(;@) ; +sub EVP_DigestFinal($) ; +sub EVP_DigestFinal_ex($) ; +sub EVP_DigestInit($$) ; +sub EVP_DigestInit_ex($$$) ; +sub EVP_DigestUpdate($$) ; +sub EVP_MD_CTX_create() ; +sub EVP_MD_CTX_destroy($) ; +sub EVP_MD_CTX_md($) ; +sub EVP_MD_size($) ; +sub EVP_MD_type($) ; +sub EVP_PKEY_assign_EC_KEY($$) ; +sub EVP_PKEY_assign_RSA($$) ; +sub EVP_PKEY_bits($) ; +sub EVP_PKEY_copy_parameters($$) ; +sub EVP_PKEY_free($) ; +sub EVP_PKEY_id($) ; +sub EVP_PKEY_new() ; +sub EVP_PKEY_size($) ; +sub EVP_add_digest($) ; +sub EVP_get_cipherbyname($) ; +sub EVP_get_digestbyname($) ; +sub EVP_sha1() ; +sub EVP_sha256() ; +sub EVP_sha512() ; +sub FIPS_mode_set($) ; +sub IOV_MAX() ; +sub IP_RECVOPTS() ; +sub IP_RECVRETOPTS() ; +sub IP_RETOPTS() ; +sub MD4($) ; +sub MD5($) ; +sub MSG_BCAST() ; +sub MSG_BTAG() ; +sub MSG_CTLFLAGS() ; +sub MSG_CTLIGNORE() ; +sub MSG_CTRUNC() ; +sub MSG_DONTWAIT() ; +sub MSG_EOF() ; +sub MSG_EOR() ; +sub MSG_ERRQUEUE() ; +sub MSG_ETAG() ; +sub MSG_FASTOPEN() ; +sub MSG_FIN() ; +sub MSG_MCAST() ; +sub MSG_NOSIGNAL() ; +sub MSG_PROXY() ; +sub MSG_RST() ; +sub MSG_SYN() ; +sub MSG_TRUNC() ; +sub MSG_URG() ; +sub MSG_WIRE() ; +sub OBJ_cmp($$) ; +sub OBJ_dup($) ; +sub OBJ_ln2nid($) ; +sub OBJ_nid2ln($) ; +sub OBJ_nid2obj($) ; +sub OBJ_nid2sn($) ; +sub OBJ_obj2nid($) ; +sub OBJ_obj2txt($;$) ; +sub OBJ_sn2nid($) ; +sub OBJ_txt2nid($) ; +sub OBJ_txt2obj($;$) ; +sub OCSP_REQUEST_free($) ; +sub OCSP_RESPONSE_free($) ; +sub OCSP_cert2ids($;@) ; +sub OCSP_ids2req(;@) ; +sub OCSP_response_results($;@) ; +sub OCSP_response_status($) ; +sub OCSP_response_status_str($) ; +sub OCSP_response_verify($$;$$) ; +sub OPENSSL_add_all_algorithms_conf() ; +sub OPENSSL_add_all_algorithms_noconf() ; +sub OpenSSL_add_all_algorithms() ; +sub OpenSSL_add_all_digests() ; +sub OpenSSL_add_ssl_algorithms() ; +sub OpenSSL_version(;$) ; +sub OpenSSL_version_num() ; +sub PEM_X509_INFO_read_bio($;$$$) ; +sub PEM_get_string_PrivateKey($;$$) ; +sub PEM_get_string_X509($) ; +sub PEM_get_string_X509_CRL($) ; +sub PEM_get_string_X509_REQ($) ; +sub PEM_read_bio_DHparams($;$$$) ; +sub PEM_read_bio_PrivateKey($;$$) ; +sub PEM_read_bio_X509($;$$$) ; +sub PEM_read_bio_X509_CRL($;$$$) ; +sub PEM_read_bio_X509_REQ($;$$$) ; +sub PF_802() ; +sub PF_AAL() ; +sub PF_CTF() ; +sub PF_GOSIP() ; +sub PF_KEY() ; +sub PF_LAST() ; +sub PF_LINK() ; +sub PF_NBS() ; +sub PF_NIT() ; +sub PF_OSINET() ; +sub PF_ROUTE() ; +sub PF_USER() ; +sub PF_WAN() ; +sub PF_X25() ; +sub P_ASN1_INTEGER_get_dec($) ; +sub P_ASN1_INTEGER_get_hex($) ; +sub P_ASN1_INTEGER_set_dec($$) ; +sub P_ASN1_INTEGER_set_hex($$) ; +sub P_ASN1_STRING_get($;$) ; +sub P_ASN1_TIME_get_isotime($) ; +sub P_ASN1_TIME_put2string($) ; +sub P_ASN1_TIME_set_isotime($$) ; +sub P_ASN1_UTCTIME_put2string($) ; +sub P_EVP_MD_list_all() ; +sub P_PKCS12_load_file($;$$) ; +sub P_X509_CRL_add_revoked_serial_hex($$$;$$) ; +sub P_X509_CRL_get_serial($) ; +sub P_X509_CRL_set_serial($$) ; +sub P_X509_INFO_get_x509($) ; +sub P_X509_REQ_add_extensions($;@) ; +sub P_X509_REQ_get_attr($$) ; +sub P_X509_add_extensions($$;@) ; +sub P_X509_copy_extensions($$;$) ; +sub P_X509_get_crl_distribution_points($) ; +sub P_X509_get_ext_key_usage($;$) ; +sub P_X509_get_key_usage($) ; +sub P_X509_get_netscape_cert_type($) ; +sub P_X509_get_ocsp_uri($) ; +sub P_X509_get_pubkey_alg($) ; +sub P_X509_get_signature_alg($) ; +sub P_alpn_selected($) ; +sub P_next_proto_last_status($) ; +sub P_next_proto_negotiated($) ; +sub RAND_add($$$) ; +sub RAND_bytes($$) ; +sub RAND_cleanup() ; +sub RAND_file_name($) ; +sub RAND_load_file($$) ; +sub RAND_poll() ; +sub RAND_priv_bytes($$) ; +sub RAND_pseudo_bytes($$) ; +sub RAND_seed($) ; +sub RAND_status() ; +sub RAND_write_file($) ; +sub RIPEMD160($) ; +sub RSA_free($) ; +sub RSA_generate_key($$;$$) ; +sub SCM_CONNECT() ; +sub SCM_CREDENTIALS() ; +sub SCM_CREDS() ; +sub SCM_RIGHTS() ; +sub SCM_TIMESTAMP() ; +sub SESSION_dup($) ; +sub SESSION_free($) ; +sub SESSION_get_app_data($) ; +sub SESSION_get_ex_data($$) ; +sub SESSION_get_ex_new_index($;$$$$) ; +sub SESSION_get_master_key($) ; +sub SESSION_get_time($) ; +sub SESSION_get_timeout($) ; +sub SESSION_is_resumable($) ; +sub SESSION_new() ; +sub SESSION_print($$) ; +sub SESSION_print_fp($$) ; +sub SESSION_set_app_data($$) ; +sub SESSION_set_ex_data($$$) ; +sub SESSION_set_time($$) ; +sub SESSION_set_timeout($$) ; +sub SESSION_up_ref($) ; +sub SHA1($) ; +sub SHA256($) ; +sub SHA512($) ; +sub SO_ATTACH_FILTER() ; +sub SO_BACKLOG() ; +sub SO_CHAMELEON() ; +sub SO_DETACH_FILTER() ; +sub SO_DGRAM_ERRIND() ; +sub SO_DOMAIN() ; +sub SO_FAMILY() ; +sub SO_PASSCRED() ; +sub SO_PASSIFNAME() ; +sub SO_PEERCRED() ; +sub SO_PROTOCOL() ; +sub SO_PROTOTYPE() ; +sub SO_REUSEPORT() ; +sub SO_SECURITY_AUTHENTICATION() ; +sub SO_SECURITY_ENCRYPTION_NETWORK() ; +sub SO_SECURITY_ENCRYPTION_TRANSPORT() ; +sub SO_STATE() ; +sub SO_XOPEN() ; +sub SO_XSE() ; +sub SSL_get0_session($) ; +sub SSLeay() ; +sub SSLeay_add_ssl_algorithms() ; +sub SSLeay_version(;$) ; +sub SSLv23_client_method() ; +sub SSLv23_method() ; +sub SSLv23_server_method() ; +sub TLS_client_method() ; +sub TLS_method() ; +sub TLS_server_method() ; +sub TLSv1_1_client_method() ; +sub TLSv1_1_method() ; +sub TLSv1_1_server_method() ; +sub TLSv1_2_client_method() ; +sub TLSv1_2_method() ; +sub TLSv1_2_server_method() ; +sub TLSv1_client_method() ; +sub TLSv1_method() ; +sub TLSv1_server_method() ; +sub UIO_MAXIOV() ; +sub X509V3_EXT_d2i($) ; +sub X509V3_EXT_print($;$$) ; +sub X509_CRL_digest($$) ; +sub X509_CRL_free($) ; +sub X509_CRL_get_ext($$) ; +sub X509_CRL_get_ext_by_NID($$;$) ; +sub X509_CRL_get_ext_count($) ; +sub X509_CRL_get_issuer($) ; +sub X509_CRL_get_lastUpdate($) ; +sub X509_CRL_get_nextUpdate($) ; +sub X509_CRL_get_version($) ; +sub X509_CRL_new() ; +sub X509_CRL_set_issuer_name($$) ; +sub X509_CRL_set_lastUpdate($$) ; +sub X509_CRL_set_nextUpdate($$) ; +sub X509_CRL_set_version($$) ; +sub X509_CRL_sign($$$) ; +sub X509_CRL_sort($) ; +sub X509_CRL_verify($$) ; +sub X509_EXTENSION_get_critical($) ; +sub X509_EXTENSION_get_data($) ; +sub X509_EXTENSION_get_object($) ; +sub X509_LOOKUP_add_dir($$$) ; +sub X509_LOOKUP_hash_dir() ; +sub X509_NAME_ENTRY_get_data($) ; +sub X509_NAME_ENTRY_get_object($) ; +sub X509_NAME_add_entry_by_NID($$$$;$$) ; +sub X509_NAME_add_entry_by_OBJ($$$$;$$) ; +sub X509_NAME_add_entry_by_txt($$$$;$$) ; +sub X509_NAME_cmp($$) ; +sub X509_NAME_digest($$) ; +sub X509_NAME_entry_count($) ; +sub X509_NAME_get_entry($$) ; +sub X509_NAME_get_text_by_NID($$) ; +sub X509_NAME_hash($) ; +sub X509_NAME_new() ; +sub X509_NAME_oneline($) ; +sub X509_NAME_print_ex($;$$) ; +sub X509_REQ_add1_attr_by_NID($$$$) ; +sub X509_REQ_digest($$) ; +sub X509_REQ_free($) ; +sub X509_REQ_get_attr_by_NID($$;$) ; +sub X509_REQ_get_attr_by_OBJ($$;$) ; +sub X509_REQ_get_attr_count($) ; +sub X509_REQ_get_pubkey($) ; +sub X509_REQ_get_subject_name($) ; +sub X509_REQ_get_version($) ; +sub X509_REQ_new() ; +sub X509_REQ_set_pubkey($$) ; +sub X509_REQ_set_subject_name($$) ; +sub X509_REQ_set_version($$) ; +sub X509_REQ_sign($$$) ; +sub X509_REQ_verify($$) ; +sub X509_STORE_CTX_free($) ; +sub X509_STORE_CTX_get_app_data($) ; +sub X509_STORE_CTX_get_current_cert($) ; +sub X509_STORE_CTX_get_error($) ; +sub X509_STORE_CTX_get_error_depth($) ; +sub X509_STORE_CTX_get_ex_data($$) ; +sub X509_STORE_CTX_get_ex_new_index($;$$$$) ; +sub X509_STORE_CTX_init($;$$$) ; +sub X509_STORE_CTX_new() ; +sub X509_STORE_CTX_set_app_data($$) ; +sub X509_STORE_CTX_set_cert($$) ; +sub X509_STORE_CTX_set_error($$) ; +sub X509_STORE_CTX_set_ex_data($$$) ; +sub X509_STORE_add_cert($$) ; +sub X509_STORE_add_crl($$) ; +sub X509_STORE_add_lookup($$) ; +sub X509_STORE_free($) ; +sub X509_STORE_new() ; +sub X509_STORE_set1_param($$) ; +sub X509_STORE_set_flags($$) ; +sub X509_STORE_set_purpose($$) ; +sub X509_STORE_set_trust($$) ; +sub X509_VERIFY_PARAM_add0_policy($$) ; +sub X509_VERIFY_PARAM_add0_table($) ; +sub X509_VERIFY_PARAM_add1_host($$) ; +sub X509_VERIFY_PARAM_clear_flags($$) ; +sub X509_VERIFY_PARAM_free($) ; +sub X509_VERIFY_PARAM_get0_peername($) ; +sub X509_VERIFY_PARAM_get_depth($) ; +sub X509_VERIFY_PARAM_get_flags($) ; +sub X509_VERIFY_PARAM_inherit($$) ; +sub X509_VERIFY_PARAM_lookup($) ; +sub X509_VERIFY_PARAM_new() ; +sub X509_VERIFY_PARAM_set1($$) ; +sub X509_VERIFY_PARAM_set1_email($$) ; +sub X509_VERIFY_PARAM_set1_host($$) ; +sub X509_VERIFY_PARAM_set1_ip($$) ; +sub X509_VERIFY_PARAM_set1_ip_asc($$) ; +sub X509_VERIFY_PARAM_set1_name($$) ; +sub X509_VERIFY_PARAM_set1_policies($$) ; +sub X509_VERIFY_PARAM_set_depth($$) ; +sub X509_VERIFY_PARAM_set_flags($$) ; +sub X509_VERIFY_PARAM_set_hostflags($$) ; +sub X509_VERIFY_PARAM_set_purpose($$) ; +sub X509_VERIFY_PARAM_set_time($$) ; +sub X509_VERIFY_PARAM_set_trust($$) ; +sub X509_VERIFY_PARAM_table_cleanup() ; +sub X509_certificate_type($;$) ; +sub X509_check_email($$;$) ; +sub X509_check_host($$;$$) ; +sub X509_check_ip($$;$) ; +sub X509_check_ip_asc($$;$) ; +sub X509_digest($$) ; +sub X509_free($) ; +sub X509_get0_serialNumber($) ; +sub X509_get_X509_PUBKEY($) ; +sub X509_get_app_data($) ; +sub X509_get_ex_data($$) ; +sub X509_get_ex_new_index($;$$$$) ; +sub X509_get_ext($$) ; +sub X509_get_ext_by_NID($$;$) ; +sub X509_get_ext_count($) ; +sub X509_get_fingerprint($$) ; +sub X509_get_issuer_name($) ; +sub X509_get_notAfter($) ; +sub X509_get_notBefore($) ; +sub X509_get_pubkey($) ; +sub X509_get_serialNumber($) ; +sub X509_get_subjectAltNames($) ; +sub X509_get_subject_name($) ; +sub X509_get_version($) ; +sub X509_gmtime_adj($$) ; +sub X509_issuer_and_serial_hash($) ; +sub X509_issuer_name_hash($) ; +sub X509_load_cert_crl_file($$$) ; +sub X509_load_cert_file($$$) ; +sub X509_load_crl_file($$$) ; +sub X509_new() ; +sub X509_policy_level_get0_node($$) ; +sub X509_policy_level_node_count($) ; +sub X509_policy_node_get0_parent($) ; +sub X509_policy_node_get0_policy($) ; +sub X509_policy_node_get0_qualifiers($) ; +sub X509_policy_tree_free($) ; +sub X509_policy_tree_get0_level($$) ; +sub X509_policy_tree_get0_policies($) ; +sub X509_policy_tree_get0_user_policies($) ; +sub X509_policy_tree_level_count($) ; +sub X509_pubkey_digest($$) ; +sub X509_set_app_data($$) ; +sub X509_set_ex_data($$$) ; +sub X509_set_issuer_name($$) ; +sub X509_set_pubkey($$) ; +sub X509_set_serialNumber($$) ; +sub X509_set_subject_name($$) ; +sub X509_set_version($$) ; +sub X509_sign($$$) ; +sub X509_subject_name_hash($) ; +sub X509_verify($$) ; +sub X509_verify_cert($) ; +sub X509_verify_cert_error_string($) ; +sub accept($) ; +sub add_client_CA($$) ; +sub add_file_cert_subjects_to_stack($$) ; +sub add_ssl_algorithms() ; +sub alert_desc_string($) ; +sub alert_desc_string_long($) ; +sub alert_type_string($) ; +sub alert_type_string_long($) ; +sub callback_ctrl($$$) ; +sub check_private_key($) ; +sub clear($) ; +sub clear_num_renegotiations($) ; +sub client_version($) ; +sub connect($) ; +sub constant($) ; +sub copy_session_id($$) ; +sub ctrl($$$$) ; +sub d2i_OCSP_REQUEST($) ; +sub d2i_OCSP_RESPONSE($) ; +sub d2i_SSL_SESSION($) ; +sub d2i_X509_CRL_bio($;$) ; +sub d2i_X509_REQ_bio($;$) ; +sub d2i_X509_bio($;$) ; +sub debug_read; +sub do_handshake($) ; +sub do_https2; +sub do_https3; +sub do_https4; +sub do_https; +sub do_httpx2; +sub do_httpx3; +sub do_httpx4; +sub dump_peer_certificate($) ; +sub dup($) ; +sub export_keying_material($$$;$) ; +sub free($) ; +sub get0_param($) ; +sub get1_session($) ; +sub get_SSL_CTX($) ; +sub get_app_data($) ; +sub get_certificate($) ; +sub get_cipher($) ; +sub get_cipher_bits($;$) ; +sub get_cipher_list($$) ; +sub get_client_CA_list($) ; +sub get_client_random($) ; +sub get_current_cipher($) ; +sub get_default_timeout($) ; +sub get_error($$) ; +sub get_ex_data($$) ; +sub get_ex_new_index($;$$$$) ; +sub get_fd($) ; +sub get_finished($$;$) ; +sub get_http3; +sub get_http4; +sub get_http; +sub get_https3; +sub get_https4; +sub get_https; +sub get_httpx3; +sub get_httpx4; +sub get_httpx; +sub get_keyblock_size($) ; +sub get_max_proto_version($) ; +sub get_min_proto_version($) ; +sub get_mode($) ; +sub get_num_tickets($) ; +sub get_options($) ; +sub get_peer_cert_chain($) ; +sub get_peer_certificate($) ; +sub get_peer_finished($$;$) ; +sub get_quiet_shutdown($) ; +sub get_rbio($) ; +sub get_read_ahead($) ; +sub get_security_level($) ; +sub get_server_random($) ; +sub get_servername($;$) ; +sub get_servername_type($) ; +sub get_session($) ; +sub get_shared_ciphers($;$$) ; +sub get_shutdown($) ; +sub get_ssl_method($) ; +sub get_state($) ; +sub get_time($) ; +sub get_timeout($) ; +sub get_verify_depth($) ; +sub get_verify_mode($) ; +sub get_verify_result($) ; +sub get_version($) ; +sub get_wbio($) ; +sub has_pending($) ; +sub head_http3; +sub head_http4; +sub head_http; +sub head_https3; +sub head_https4; +sub head_https; +sub head_httpx3; +sub head_httpx4; +sub head_httpx; +sub hello() ; +sub http_cat; +sub https_cat; +sub httpx_cat; +sub i2d_OCSP_REQUEST($) ; +sub i2d_OCSP_RESPONSE($) ; +sub i2d_SSL_SESSION($) ; +sub in_accept_init($) ; +sub in_before($) ; +sub in_connect_init($) ; +sub in_init($) ; +sub inet_aton; +sub inet_ntoa; +sub initialize; +sub is_dtls($) ; +sub is_init_finished($) ; +sub library_init() ; +sub load_client_CA_file($) ; +sub load_error_strings() ; +sub make_form; +sub make_headers; +sub new($) ; +sub new_x_ctx; +sub num_renegotiations($) ; +sub open_proxy_tcp_connection; +sub open_tcp_connection; +sub pack_sockaddr_in6; +sub pack_sockaddr_in; +sub pack_sockaddr_un; +sub peek($;$) ; +sub peek_ex($;$) ; +sub pending($) ; +sub post_http3; +sub post_http4; +sub post_http; +sub post_https3; +sub post_https4; +sub post_https; +sub post_httpx3; +sub post_httpx4; +sub post_httpx; +sub put_http3; +sub put_http4; +sub put_http; +sub put_https3; +sub put_https4; +sub put_https; +sub put_httpx3; +sub put_httpx4; +sub put_httpx; +sub randomize(;$$$) ; +sub read($;$) ; +sub read_ex($;$) ; +sub renegotiate($) ; +sub rstate_string($) ; +sub rstate_string_long($) ; +sub session_reused($) ; +sub set1_curves_list($$) ; +sub set1_groups_list($$) ; +sub set1_param($$) ; +sub set_SSL_CTX($$) ; +sub set_accept_state($) ; +sub set_alpn_protos($;$) ; +sub set_app_data($$) ; +sub set_bio($$$) ; +sub set_cert_and_key($$$) ; +sub set_cipher_list($$) ; +sub set_ciphersuites($$) ; +sub set_client_CA_list($$) ; +sub set_connect_state($) ; +sub set_default_passwd_cb($;$) ; +sub set_default_passwd_cb_userdata($;$) ; +sub set_ex_data($$$) ; +sub set_fd($$) ; +sub set_info_callback($$;$) ; +sub set_max_proto_version($$) ; +sub set_min_proto_version($$) ; +sub set_mode($$) ; +sub set_num_tickets($$) ; +sub set_options($$) ; +sub set_post_handshake_auth($$) ; +sub set_pref_cipher($$) ; +sub set_proxy($$;**) ; +sub set_psk_client_callback($;$) ; +sub set_purpose($$) ; +sub set_quiet_shutdown($$) ; +sub set_read_ahead($;$) ; +sub set_rfd($$) ; +sub set_security_level($$) ; +sub set_server_cert_and_key($$$) ; +sub set_session($$) ; +sub set_session_id_context($$$) ; +sub set_session_secret_cb($;$$) ; +sub set_session_ticket_ext($$) ; +sub set_session_ticket_ext_cb($$;$) ; +sub set_shutdown($$) ; +sub set_ssl_method($$) ; +sub set_state($$) ; +sub set_time($$) ; +sub set_timeout($$) ; +sub set_tlsext_host_name($$) ; +sub set_tlsext_status_ocsp_resp($$) ; +sub set_tlsext_status_type($$) ; +sub set_tmp_dh($$) ; +sub set_tmp_dh_callback($$) ; +sub set_trust($$) ; +sub set_verify($$$) ; +sub set_verify_depth($$) ; +sub set_verify_result($$) ; +sub set_wfd($$) ; +sub shutdown($) ; +sub sk_X509_INFO_free($) ; +sub sk_X509_INFO_num($) ; +sub sk_X509_INFO_value($$) ; +sub sk_X509_NAME_free($) ; +sub sk_X509_NAME_num($) ; +sub sk_X509_NAME_value($$) ; +sub sk_X509_free($) ; +sub sk_X509_new_null() ; +sub sk_X509_push($$) ; +sub sockaddr_family; +sub ssl_read_CRLF($;$) ; +sub ssl_read_all; +sub ssl_read_until($;$$) ; +sub ssl_write_CRLF($$) ; +sub ssl_write_all; +sub sslcat; +sub state($) ; +sub state_string($) ; +sub state_string_long($) ; +sub tcp_read_CRLF; +sub tcp_read_all; +sub tcp_read_until; +sub tcp_write_CRLF; +sub tcp_write_all; +sub tcpcat; +sub tcpxcat; +sub total_renegotiations($) ; +sub unpack_sockaddr_in6; +sub unpack_sockaddr_in; +sub unpack_sockaddr_un; +sub use_PrivateKey($$) ; +sub use_PrivateKey_ASN1($$$$) ; +sub use_PrivateKey_file($$$) ; +sub use_RSAPrivateKey($$) ; +sub use_RSAPrivateKey_ASN1($$$) ; +sub use_RSAPrivateKey_file($$$) ; +sub use_certificate($$) ; +sub use_certificate_ASN1($$$) ; +sub use_certificate_chain_file($$) ; +sub use_certificate_file($$$) ; +sub verify_client_post_handshake($) ; +sub version($) ; +sub want($) ; +sub want_X509_lookup; +sub want_nothing; +sub want_read; +sub want_write; +sub write($$) ; +sub write_ex($$) ; +sub write_partial($$$$) ; +} +package ODBM_File { +sub DELETE; +sub DESTROY; +sub FETCH; +sub FIRSTKEY; +sub NEXTKEY; +sub STORE; +sub TIEHASH; +sub filter_fetch_key; +sub filter_fetch_value; +sub filter_store_key; +sub filter_store_value; +} +package Opcode { +sub _safe_call_sv($$$) ; +sub _safe_pkg_prep($) ; +sub define_optag($$) ; +sub deny($;@) ; +sub deny_only($;@) ; +sub empty_opset() ; +sub full_opset() ; +sub invert_opset($) ; +sub opcodes() ; +sub opdesc(;@) ; +sub opmask() ; +sub opmask_add($) ; +sub opset(;@) ; +sub opset_to_ops($;$) ; +sub permit($;@) ; +sub permit_only($;@) ; +sub verify_opset($;$) ; +} +package OpenGL { +sub __had_dbuffer_hack; +sub _have_freeglut; +sub _have_gl; +sub _have_glp; +sub _have_glu; +sub _have_glut; +sub _have_glx; +sub constant; +sub done_glutInit; +sub glAccum; +sub glAlphaFunc; +sub glAreTexturesResident_c; +sub glAreTexturesResident_p; +sub glAreTexturesResident_s; +sub glArrayElement; +sub glBegin; +sub glBindTexture; +sub glBitmap_c; +sub glBitmap_p; +sub glBitmap_s; +sub glBlendFunc; +sub glCallList; +sub glCallLists_c; +sub glCallLists_p; +sub glCallLists_s; +sub glClear; +sub glClearAccum; +sub glClearColor; +sub glClearDepth; +sub glClearIndex; +sub glClearStencil; +sub glClipPlane_c; +sub glClipPlane_p; +sub glClipPlane_s; +sub glColor3b; +sub glColor3bv_c; +sub glColor3bv_p; +sub glColor3bv_s; +sub glColor3d; +sub glColor3dv_c; +sub glColor3dv_p; +sub glColor3dv_s; +sub glColor3f; +sub glColor3fv_c; +sub glColor3fv_p; +sub glColor3fv_s; +sub glColor3i; +sub glColor3iv_c; +sub glColor3iv_p; +sub glColor3iv_s; +sub glColor3s; +sub glColor3sv_c; +sub glColor3sv_p; +sub glColor3sv_s; +sub glColor3ub; +sub glColor3ubv_c; +sub glColor3ubv_p; +sub glColor3ubv_s; +sub glColor3ui; +sub glColor3uiv_c; +sub glColor3uiv_p; +sub glColor3uiv_s; +sub glColor3us; +sub glColor3usv_c; +sub glColor3usv_p; +sub glColor3usv_s; +sub glColor4b; +sub glColor4bv_c; +sub glColor4bv_p; +sub glColor4bv_s; +sub glColor4d; +sub glColor4dv_c; +sub glColor4dv_p; +sub glColor4dv_s; +sub glColor4f; +sub glColor4fv_c; +sub glColor4fv_p; +sub glColor4fv_s; +sub glColor4i; +sub glColor4iv_c; +sub glColor4iv_p; +sub glColor4iv_s; +sub glColor4s; +sub glColor4sv_c; +sub glColor4sv_p; +sub glColor4sv_s; +sub glColor4ub; +sub glColor4ubv_c; +sub glColor4ubv_p; +sub glColor4ubv_s; +sub glColor4ui; +sub glColor4uiv_c; +sub glColor4uiv_p; +sub glColor4uiv_s; +sub glColor4us; +sub glColor4usv_c; +sub glColor4usv_p; +sub glColor4usv_s; +sub glColorMask; +sub glColorMaterial; +sub glColorPointerEXT_c; +sub glColorPointerEXT_p; +sub glColorPointerEXT_s; +sub glColorPointer_c; +sub glColorPointer_p; +sub glColorPointer_s; +sub glCopyPixels; +sub glCopyTexImage1D; +sub glCopyTexImage2D; +sub glCopyTexSubImage1D; +sub glCopyTexSubImage2D; +sub glCullFace; +sub glDeleteLists; +sub glDeleteTextures_c; +sub glDeleteTextures_p; +sub glDeleteTextures_s; +sub glDepthFunc; +sub glDepthMask; +sub glDepthRange; +sub glDisable; +sub glDisableClientState; +sub glDrawArrays; +sub glDrawBuffer; +sub glDrawElements_c; +sub glDrawElements_p; +sub glDrawElements_s; +sub glDrawPixels_c; +sub glDrawPixels_p; +sub glDrawPixels_s; +sub glEdgeFlag; +sub glEdgeFlagPointerEXT_c; +sub glEdgeFlagPointerEXT_p; +sub glEdgeFlagPointerEXT_s; +sub glEdgeFlagPointer_c; +sub glEdgeFlagPointer_p; +sub glEdgeFlagPointer_s; +sub glEnable; +sub glEnableClientState; +sub glEnd; +sub glEndList; +sub glEvalCoord1d; +sub glEvalCoord1f; +sub glEvalCoord2d; +sub glEvalCoord2f; +sub glEvalMesh1; +sub glEvalMesh2; +sub glEvalPoint1; +sub glEvalPoint2; +sub glFeedbackBuffer_c; +sub glFinish; +sub glFlush; +sub glFogf; +sub glFogfv_c; +sub glFogfv_p; +sub glFogfv_s; +sub glFogi; +sub glFogiv_c; +sub glFogiv_p; +sub glFogiv_s; +sub glFrontFace; +sub glFrustum; +sub glGenLists; +sub glGenTextures_c; +sub glGenTextures_p; +sub glGenTextures_s; +sub glGetBooleanv_c; +sub glGetBooleanv_p; +sub glGetBooleanv_s; +sub glGetClipPlane_c; +sub glGetClipPlane_p; +sub glGetClipPlane_s; +sub glGetDoublev_c; +sub glGetDoublev_p; +sub glGetDoublev_s; +sub glGetError; +sub glGetFloatv_c; +sub glGetFloatv_p; +sub glGetFloatv_s; +sub glGetIntegerv_c; +sub glGetIntegerv_p; +sub glGetIntegerv_s; +sub glGetLightfv_c; +sub glGetLightfv_p; +sub glGetLightfv_s; +sub glGetLightiv_c; +sub glGetLightiv_p; +sub glGetLightiv_s; +sub glGetMapdv_c; +sub glGetMapdv_p; +sub glGetMapdv_s; +sub glGetMapfv_c; +sub glGetMapfv_p; +sub glGetMapfv_s; +sub glGetMapiv_c; +sub glGetMapiv_p; +sub glGetMapiv_s; +sub glGetMaterialfv_c; +sub glGetMaterialfv_p; +sub glGetMaterialfv_s; +sub glGetMaterialiv_c; +sub glGetMaterialiv_p; +sub glGetMaterialiv_s; +sub glGetPixelMapfv_c; +sub glGetPixelMapfv_p; +sub glGetPixelMapfv_s; +sub glGetPixelMapuiv_c; +sub glGetPixelMapuiv_p; +sub glGetPixelMapuiv_s; +sub glGetPixelMapusv_c; +sub glGetPixelMapusv_p; +sub glGetPixelMapusv_s; +sub glGetPointerv_c; +sub glGetPointerv_p; +sub glGetPointerv_s; +sub glGetPolygonStipple_c; +sub glGetPolygonStipple_p; +sub glGetPolygonStipple_s; +sub glGetString; +sub glGetTexEnvfv_c; +sub glGetTexEnvfv_p; +sub glGetTexEnvfv_s; +sub glGetTexEnviv_c; +sub glGetTexEnviv_p; +sub glGetTexEnviv_s; +sub glGetTexGendv_c; +sub glGetTexGendv_p; +sub glGetTexGendv_s; +sub glGetTexGenfv_c; +sub glGetTexGenfv_p; +sub glGetTexGenfv_s; +sub glGetTexGeniv_c; +sub glGetTexGeniv_p; +sub glGetTexGeniv_s; +sub glGetTexImage_c; +sub glGetTexImage_p; +sub glGetTexImage_s; +sub glGetTexLevelParameterfv_c; +sub glGetTexLevelParameterfv_p; +sub glGetTexLevelParameterfv_s; +sub glGetTexLevelParameteriv_c; +sub glGetTexLevelParameteriv_p; +sub glGetTexLevelParameteriv_s; +sub glGetTexParameterfv_c; +sub glGetTexParameterfv_p; +sub glGetTexParameterfv_s; +sub glGetTexParameteriv_c; +sub glGetTexParameteriv_p; +sub glGetTexParameteriv_s; +sub glHint; +sub glIndexMask; +sub glIndexPointerEXT_c; +sub glIndexPointerEXT_p; +sub glIndexPointerEXT_s; +sub glIndexPointer_c; +sub glIndexPointer_p; +sub glIndexPointer_s; +sub glIndexd; +sub glIndexi; +sub glInitNames; +sub glInterleavedArrays_c; +sub glIsEnabled; +sub glIsList; +sub glIsTexture; +sub glLightModelf; +sub glLightModelfv_c; +sub glLightModelfv_p; +sub glLightModelfv_s; +sub glLightModeli; +sub glLightModeliv_c; +sub glLightModeliv_p; +sub glLightModeliv_s; +sub glLightf; +sub glLightfv_c; +sub glLightfv_p; +sub glLightfv_s; +sub glLighti; +sub glLightiv_c; +sub glLightiv_p; +sub glLightiv_s; +sub glLineStipple; +sub glLineWidth; +sub glListBase; +sub glLoadIdentity; +sub glLoadMatrixd_c; +sub glLoadMatrixd_p; +sub glLoadMatrixd_s; +sub glLoadMatrixf_c; +sub glLoadMatrixf_p; +sub glLoadMatrixf_s; +sub glLoadName; +sub glLogicOp; +sub glMap1d_c; +sub glMap1d_p; +sub glMap1d_s; +sub glMap1f_c; +sub glMap1f_p; +sub glMap1f_s; +sub glMap2d_c; +sub glMap2d_p; +sub glMap2d_s; +sub glMap2f_c; +sub glMap2f_p; +sub glMap2f_s; +sub glMapGrid1d; +sub glMapGrid1f; +sub glMapGrid2d; +sub glMapGrid2f; +sub glMaterialf; +sub glMaterialfv_c; +sub glMaterialfv_p; +sub glMaterialfv_s; +sub glMateriali; +sub glMaterialiv_c; +sub glMaterialiv_p; +sub glMaterialiv_s; +sub glMatrixMode; +sub glMultMatrixd_p; +sub glMultMatrixf_p; +sub glNewList; +sub glNormal3b; +sub glNormal3bv_c; +sub glNormal3bv_p; +sub glNormal3bv_s; +sub glNormal3d; +sub glNormal3dv_c; +sub glNormal3dv_p; +sub glNormal3dv_s; +sub glNormal3f; +sub glNormal3fv_c; +sub glNormal3fv_p; +sub glNormal3fv_s; +sub glNormal3i; +sub glNormal3iv_c; +sub glNormal3iv_p; +sub glNormal3iv_s; +sub glNormal3s; +sub glNormal3sv_c; +sub glNormal3sv_p; +sub glNormal3sv_s; +sub glNormalPointerEXT_c; +sub glNormalPointerEXT_p; +sub glNormalPointerEXT_s; +sub glNormalPointer_c; +sub glNormalPointer_p; +sub glNormalPointer_s; +sub glOrtho; +sub glPassThrough; +sub glPixelMapfv_c; +sub glPixelMapfv_p; +sub glPixelMapfv_s; +sub glPixelMapuiv_c; +sub glPixelMapuiv_p; +sub glPixelMapuiv_s; +sub glPixelMapusv_c; +sub glPixelMapusv_p; +sub glPixelMapusv_s; +sub glPixelStoref; +sub glPixelStorei; +sub glPixelTransferf; +sub glPixelTransferi; +sub glPixelZoom; +sub glPointSize; +sub glPolygonMode; +sub glPolygonOffset; +sub glPolygonStipple_c; +sub glPolygonStipple_p; +sub glPolygonStipple_s; +sub glPopAttrib; +sub glPopClientAttrib; +sub glPopMatrix; +sub glPopName; +sub glPrioritizeTextures_c; +sub glPrioritizeTextures_p; +sub glPrioritizeTextures_s; +sub glPushAttrib; +sub glPushClientAttrib; +sub glPushMatrix; +sub glPushName; +sub glRasterPos2d; +sub glRasterPos2dv_c; +sub glRasterPos2dv_p; +sub glRasterPos2dv_s; +sub glRasterPos2f; +sub glRasterPos2fv_c; +sub glRasterPos2fv_p; +sub glRasterPos2fv_s; +sub glRasterPos2i; +sub glRasterPos2iv_c; +sub glRasterPos2iv_p; +sub glRasterPos2iv_s; +sub glRasterPos2s; +sub glRasterPos2sv_c; +sub glRasterPos2sv_p; +sub glRasterPos2sv_s; +sub glRasterPos3d; +sub glRasterPos3dv_c; +sub glRasterPos3dv_p; +sub glRasterPos3dv_s; +sub glRasterPos3f; +sub glRasterPos3fv_c; +sub glRasterPos3fv_p; +sub glRasterPos3fv_s; +sub glRasterPos3i; +sub glRasterPos3iv_c; +sub glRasterPos3iv_p; +sub glRasterPos3iv_s; +sub glRasterPos3s; +sub glRasterPos3sv_c; +sub glRasterPos3sv_p; +sub glRasterPos3sv_s; +sub glRasterPos4d; +sub glRasterPos4dv_c; +sub glRasterPos4dv_p; +sub glRasterPos4dv_s; +sub glRasterPos4f; +sub glRasterPos4fv_c; +sub glRasterPos4fv_p; +sub glRasterPos4fv_s; +sub glRasterPos4i; +sub glRasterPos4iv_c; +sub glRasterPos4iv_p; +sub glRasterPos4iv_s; +sub glRasterPos4s; +sub glRasterPos4sv_c; +sub glRasterPos4sv_p; +sub glRasterPos4sv_s; +sub glReadBuffer; +sub glReadPixels_c; +sub glReadPixels_p; +sub glReadPixels_s; +sub glRectd; +sub glRectdv_c; +sub glRectdv_p; +sub glRectdv_s; +sub glRectf; +sub glRectfv_c; +sub glRectfv_p; +sub glRectfv_s; +sub glRecti; +sub glRectiv_c; +sub glRectiv_p; +sub glRectiv_s; +sub glRects; +sub glRectsv_c; +sub glRectsv_p; +sub glRectsv_s; +sub glRenderMode; +sub glRotated; +sub glRotatef; +sub glScaled; +sub glScalef; +sub glScissor; +sub glSelectBuffer_c; +sub glShadeModel; +sub glStencilFunc; +sub glStencilMask; +sub glStencilOp; +sub glTexCoord1d; +sub glTexCoord1dv_c; +sub glTexCoord1dv_p; +sub glTexCoord1dv_s; +sub glTexCoord1f; +sub glTexCoord1fv_c; +sub glTexCoord1fv_p; +sub glTexCoord1fv_s; +sub glTexCoord1i; +sub glTexCoord1iv_c; +sub glTexCoord1iv_p; +sub glTexCoord1iv_s; +sub glTexCoord1s; +sub glTexCoord1sv_c; +sub glTexCoord1sv_p; +sub glTexCoord1sv_s; +sub glTexCoord2d; +sub glTexCoord2dv_c; +sub glTexCoord2dv_p; +sub glTexCoord2dv_s; +sub glTexCoord2f; +sub glTexCoord2fv_c; +sub glTexCoord2fv_p; +sub glTexCoord2fv_s; +sub glTexCoord2i; +sub glTexCoord2iv_c; +sub glTexCoord2iv_p; +sub glTexCoord2iv_s; +sub glTexCoord2s; +sub glTexCoord2sv_c; +sub glTexCoord2sv_p; +sub glTexCoord2sv_s; +sub glTexCoord3d; +sub glTexCoord3dv_c; +sub glTexCoord3dv_p; +sub glTexCoord3dv_s; +sub glTexCoord3f; +sub glTexCoord3fv_c; +sub glTexCoord3fv_p; +sub glTexCoord3fv_s; +sub glTexCoord3i; +sub glTexCoord3iv_c; +sub glTexCoord3iv_p; +sub glTexCoord3iv_s; +sub glTexCoord3s; +sub glTexCoord3sv_c; +sub glTexCoord3sv_p; +sub glTexCoord3sv_s; +sub glTexCoord4d; +sub glTexCoord4dv_c; +sub glTexCoord4dv_p; +sub glTexCoord4dv_s; +sub glTexCoord4f; +sub glTexCoord4fv_c; +sub glTexCoord4fv_p; +sub glTexCoord4fv_s; +sub glTexCoord4i; +sub glTexCoord4iv_c; +sub glTexCoord4iv_p; +sub glTexCoord4iv_s; +sub glTexCoord4s; +sub glTexCoord4sv_c; +sub glTexCoord4sv_p; +sub glTexCoord4sv_s; +sub glTexCoordPointerEXT_c; +sub glTexCoordPointerEXT_p; +sub glTexCoordPointerEXT_s; +sub glTexCoordPointer_c; +sub glTexCoordPointer_p; +sub glTexCoordPointer_s; +sub glTexEnvf; +sub glTexEnvfv_p; +sub glTexEnvfv_s; +sub glTexEnvi; +sub glTexEnviv_p; +sub glTexEnviv_s; +sub glTexGend; +sub glTexGendv_c; +sub glTexGendv_p; +sub glTexGendv_s; +sub glTexGenf; +sub glTexGenfv_c; +sub glTexGenfv_p; +sub glTexGenfv_s; +sub glTexGeni; +sub glTexGeniv_c; +sub glTexGeniv_p; +sub glTexGeniv_s; +sub glTexImage1D_c; +sub glTexImage1D_p; +sub glTexImage1D_s; +sub glTexImage2D_c; +sub glTexImage2D_p; +sub glTexImage2D_s; +sub glTexParameterf; +sub glTexParameterfv_c; +sub glTexParameterfv_p; +sub glTexParameterfv_s; +sub glTexParameteri; +sub glTexParameteriv_c; +sub glTexParameteriv_p; +sub glTexParameteriv_s; +sub glTexSubImage1D_c; +sub glTexSubImage1D_p; +sub glTexSubImage1D_s; +sub glTexSubImage2D_c; +sub glTexSubImage2D_p; +sub glTexSubImage2D_s; +sub glTranslated; +sub glTranslatef; +sub glVertex2d; +sub glVertex2dv_c; +sub glVertex2dv_p; +sub glVertex2dv_s; +sub glVertex2f; +sub glVertex2fv_c; +sub glVertex2fv_p; +sub glVertex2fv_s; +sub glVertex2i; +sub glVertex2iv_c; +sub glVertex2iv_p; +sub glVertex2iv_s; +sub glVertex2s; +sub glVertex2sv_c; +sub glVertex2sv_p; +sub glVertex2sv_s; +sub glVertex3d; +sub glVertex3dv_c; +sub glVertex3dv_p; +sub glVertex3dv_s; +sub glVertex3f; +sub glVertex3fv_c; +sub glVertex3fv_p; +sub glVertex3fv_s; +sub glVertex3i; +sub glVertex3iv_c; +sub glVertex3iv_p; +sub glVertex3iv_s; +sub glVertex3s; +sub glVertex3sv_c; +sub glVertex3sv_p; +sub glVertex3sv_s; +sub glVertex4d; +sub glVertex4dv_c; +sub glVertex4dv_p; +sub glVertex4dv_s; +sub glVertex4f; +sub glVertex4fv_c; +sub glVertex4fv_p; +sub glVertex4fv_s; +sub glVertex4i; +sub glVertex4iv_c; +sub glVertex4iv_p; +sub glVertex4iv_s; +sub glVertex4s; +sub glVertex4sv_c; +sub glVertex4sv_p; +sub glVertex4sv_s; +sub glVertexPointerEXT_c; +sub glVertexPointerEXT_p; +sub glVertexPointerEXT_s; +sub glVertexPointer_c; +sub glVertexPointer_p; +sub glVertexPointer_s; +sub glViewport; +sub glpHasGLUT; +sub glpHasGPGPU; +sub glpReadTex; +sub glpSetDebug; +sub gluBeginCurve; +sub gluBeginPolygon; +sub gluBeginSurface; +sub gluBeginTrim; +sub gluBuild1DMipmaps_c; +sub gluBuild1DMipmaps_s; +sub gluBuild2DMipmaps_c; +sub gluBuild2DMipmaps_s; +sub gluCylinder; +sub gluDeleteNurbsRenderer; +sub gluDeleteQuadric; +sub gluDeleteTess; +sub gluDisk; +sub gluEndCurve; +sub gluEndPolygon; +sub gluEndSurface; +sub gluEndTrim; +sub gluErrorString; +sub gluGetNurbsProperty_p; +sub gluGetString; +sub gluGetTessProperty_p; +sub gluLoadSamplingMatrices_p; +sub gluLookAt; +sub gluNewNurbsRenderer; +sub gluNewQuadric; +sub gluNewTess; +sub gluNextContour; +sub gluNurbsCurve_c; +sub gluNurbsProperty; +sub gluNurbsSurface_c; +sub gluOrtho2D; +sub gluPartialDisk; +sub gluPerspective; +sub gluPickMatrix_p; +sub gluProject_p; +sub gluPwlCurve_c; +sub gluQuadricDrawStyle; +sub gluQuadricNormals; +sub gluQuadricOrientation; +sub gluQuadricTexture; +sub gluScaleImage_s; +sub gluSphere; +sub gluTessBeginContour; +sub gluTessBeginPolygon; +sub gluTessCallback; +sub gluTessEndContour; +sub gluTessEndPolygon; +sub gluTessNormal; +sub gluTessProperty; +sub gluTessVertex_p; +sub gluUnProject_p; +sub glutAddMenuEntry; +sub glutAddSubMenu; +sub glutAttachMenu; +sub glutBitmapCharacter; +sub glutBitmapHeight; +sub glutBitmapLength; +sub glutBitmapString; +sub glutBitmapWidth; +sub glutButtonBoxFunc; +sub glutChangeToMenuEntry; +sub glutChangeToSubMenu; +sub glutCloseFunc; +sub glutCopyColormap; +sub glutCreateMenu; +sub glutCreateSubWindow; +sub glutCreateWindow; +sub glutDestroyMenu; +sub glutDestroyWindow; +sub glutDetachMenu; +sub glutDeviceGet; +sub glutDialsFunc; +sub glutDisplayFunc; +sub glutEnterGameMode; +sub glutEntryFunc; +sub glutEstablishOverlay; +sub glutExtensionSupported; +sub glutForceJoystickFunc; +sub glutFullScreen; +sub glutGameModeGet; +sub glutGameModeString; +sub glutGet; +sub glutGetColor; +sub glutGetMenu; +sub glutGetModifiers; +sub glutGetWindow; +sub glutHideOverlay; +sub glutHideWindow; +sub glutIconifyWindow; +sub glutIdleFunc; +sub glutIgnoreKeyRepeat; +sub glutInit; +sub glutInitDisplayMode; +sub glutInitDisplayString; +sub glutInitWindowPosition; +sub glutInitWindowSize; +sub glutKeyboardFunc; +sub glutKeyboardUpFunc; +sub glutLayerGet; +sub glutLeaveGameMode; +sub glutLeaveMainLoop; +sub glutMainLoop; +sub glutMainLoopEvent; +sub glutMenuDestroyFunc; +sub glutMenuStateFunc; +sub glutMenuStatusFunc; +sub glutMotionFunc; +sub glutMouseFunc; +sub glutMouseWheelFunc; +sub glutOverlayDisplayFunc; +sub glutPassiveMotionFunc; +sub glutPopWindow; +sub glutPositionWindow; +sub glutPostOverlayRedisplay; +sub glutPostRedisplay; +sub glutPostWindowOverlayRedisplay; +sub glutPostWindowRedisplay; +sub glutPushWindow; +sub glutRemoveMenuItem; +sub glutRemoveOverlay; +sub glutReportErrors; +sub glutReshapeFunc; +sub glutReshapeWindow; +sub glutSetColor; +sub glutSetCursor; +sub glutSetIconTitle; +sub glutSetKeyRepeat; +sub glutSetMenu; +sub glutSetOption; +sub glutSetWindow; +sub glutSetWindowTitle; +sub glutShowOverlay; +sub glutShowWindow; +sub glutSolidCone; +sub glutSolidCube; +sub glutSolidCylinder; +sub glutSolidDodecahedron; +sub glutSolidIcosahedron; +sub glutSolidOctahedron; +sub glutSolidRhombicDodecahedron; +sub glutSolidSphere; +sub glutSolidTeapot; +sub glutSolidTetrahedron; +sub glutSolidTorus; +sub glutSpaceballButtonFunc; +sub glutSpaceballMotionFunc; +sub glutSpaceballRotateFunc; +sub glutSpecialFunc; +sub glutSpecialUpFunc; +sub glutStrokeCharacter; +sub glutStrokeHeight; +sub glutStrokeLength; +sub glutStrokeString; +sub glutStrokeWidth; +sub glutSwapBuffers; +sub glutTabletButtonFunc; +sub glutTabletMotionFunc; +sub glutTimerFunc; +sub glutUseLayer; +sub glutVisibilityFunc; +sub glutWarpPointer; +sub glutWindowStatusFunc; +sub glutWireCone; +sub glutWireCube; +sub glutWireCylinder; +sub glutWireDodecahedron; +sub glutWireIcosahedron; +sub glutWireOctahedron; +sub glutWireRhombicDodecahedron; +sub glutWireSphere; +sub glutWireTeapot; +sub glutWireTetrahedron; +sub glutWireTorus; +} +package OpenGL::Array { +sub DESTROY; +sub affine; +sub assign; +sub assign_data; +sub bind; +sub bound; +sub calc; +sub elements; +sub get_dimensions; +sub length; +sub new; +sub new_from_pointer; +sub new_list; +sub new_pointer; +sub new_scalar; +sub offset; +sub ptr; +sub retrieve; +sub retrieve_data; +sub update_pointer; +} +package OpenGL::Matrix { +sub column; +sub dot_product; +sub element; +sub invert; +sub new; +sub new_identity; +sub new_product; +sub rotate_x; +sub rotate_y; +sub rotate_z; +sub row; +sub scale; +sub set_frustrum; +sub set_lookat; +sub set_ortho; +sub set_perspective; +sub set_quaternion; +sub translate; +sub transpose; +} +package POSIX { +sub ARG_MAX() ; +sub B0() ; +sub B110() ; +sub B1200() ; +sub B134() ; +sub B150() ; +sub B1800() ; +sub B19200() ; +sub B200() ; +sub B2400() ; +sub B300() ; +sub B38400() ; +sub B4800() ; +sub B50() ; +sub B600() ; +sub B75() ; +sub B9600() ; +sub BRKINT() ; +sub BUS_ADRALN() ; +sub BUS_ADRERR() ; +sub BUS_OBJERR() ; +sub CHILD_MAX() ; +sub CLD_CONTINUED() ; +sub CLD_DUMPED() ; +sub CLD_EXITED() ; +sub CLD_KILLED() ; +sub CLD_STOPPED() ; +sub CLD_TRAPPED() ; +sub CLOCAL() ; +sub CREAD() ; +sub CS5() ; +sub CS6() ; +sub CS7() ; +sub CS8() ; +sub CSIZE() ; +sub CSTOPB() ; +sub EAI_OVERFLOW() ; +sub EAI_SYSTEM() ; +sub ECHO() ; +sub ECHOE() ; +sub ECHOK() ; +sub ECHONL() ; +sub EHOSTDOWN() ; +sub ENOTBLK() ; +sub EOTHER() ; +sub ERESTART() ; +sub FD_CLOEXEC() ; +sub FPE_FLTDIV() ; +sub FPE_FLTINV() ; +sub FPE_FLTOVF() ; +sub FPE_FLTRES() ; +sub FPE_FLTSUB() ; +sub FPE_FLTUND() ; +sub FPE_INTDIV() ; +sub FPE_INTOVF() ; +sub F_DUPFD() ; +sub F_GETFD() ; +sub F_GETFL() ; +sub F_GETLK() ; +sub F_RDLCK() ; +sub F_SETFD() ; +sub F_SETFL() ; +sub F_SETLK() ; +sub F_SETLKW() ; +sub F_UNLCK() ; +sub F_WRLCK() ; +sub HUPCL() ; +sub ICANON() ; +sub ICRNL() ; +sub IEXTEN() ; +sub IGNBRK() ; +sub IGNCR() ; +sub IGNPAR() ; +sub ILL_BADSTK() ; +sub ILL_COPROC() ; +sub ILL_ILLADR() ; +sub ILL_ILLOPC() ; +sub ILL_ILLOPN() ; +sub ILL_ILLTRP() ; +sub ILL_PRVOPC() ; +sub ILL_PRVREG() ; +sub INLCR() ; +sub INPCK() ; +sub ISIG() ; +sub ISTRIP() ; +sub IXOFF() ; +sub IXON() ; +sub LC_ADDRESS() ; +sub LC_IDENTIFICATION() ; +sub LC_MEASUREMENT() ; +sub LC_MESSAGES() ; +sub LC_PAPER() ; +sub LC_TELEPHONE() ; +sub LDBL_EPSILON() ; +sub LDBL_MAX() ; +sub LDBL_MIN() ; +sub LINK_MAX() ; +sub L_ctermid() ; +sub L_cuserid() ; +sub L_tmpnam; +sub MAX_CANON() ; +sub MAX_INPUT() ; +sub MSG_CTRUNC() ; +sub MSG_EOR() ; +sub MSG_TRUNC() ; +sub NAME_MAX() ; +sub NCCS() ; +sub NDEBUG; +sub NGROUPS_MAX() ; +sub NOFLSH() ; +sub OPEN_MAX() ; +sub OPOST() ; +sub O_NOCTTY() ; +sub O_NONBLOCK() ; +sub PARENB() ; +sub PARMRK() ; +sub PARODD() ; +sub PIPE_BUF() ; +sub POLL_ERR() ; +sub POLL_HUP() ; +sub POLL_IN() ; +sub POLL_MSG() ; +sub POLL_OUT() ; +sub POLL_PRI() ; +sub PRIO_PGRP() ; +sub PRIO_PROCESS() ; +sub PRIO_USER() ; +sub SA_NOCLDSTOP() ; +sub SA_NOCLDWAIT() ; +sub SA_NODEFER() ; +sub SA_ONSTACK() ; +sub SA_RESETHAND() ; +sub SA_RESTART() ; +sub SA_SIGINFO() ; +sub SEGV_ACCERR() ; +sub SEGV_MAPERR() ; +sub SIGALRM() ; +sub SIGBUS() ; +sub SIGCHLD() ; +sub SIGCONT() ; +sub SIGHUP() ; +sub SIGKILL() ; +sub SIGPIPE() ; +sub SIGPOLL() ; +sub SIGPROF() ; +sub SIGQUIT() ; +sub SIGRTMAX() ; +sub SIGRTMIN() ; +sub SIGSTOP() ; +sub SIGSYS() ; +sub SIGTRAP() ; +sub SIGTSTP() ; +sub SIGTTIN() ; +sub SIGTTOU() ; +sub SIGURG() ; +sub SIGUSR1() ; +sub SIGUSR2() ; +sub SIGVTALRM() ; +sub SIGXCPU() ; +sub SIGXFSZ() ; +sub SIG_BLOCK() ; +sub SIG_SETMASK() ; +sub SIG_UNBLOCK() ; +sub SI_ASYNCIO() ; +sub SI_MESGQ() ; +sub SI_QUEUE() ; +sub SI_TIMER() ; +sub SI_USER() ; +sub STREAM_MAX() ; +sub S_ISBLK; +sub S_ISCHR; +sub S_ISDIR; +sub S_ISFIFO; +sub S_ISREG; +sub TCIFLUSH() ; +sub TCIOFF() ; +sub TCIOFLUSH() ; +sub TCION() ; +sub TCOFLUSH() ; +sub TCOOFF() ; +sub TCOON() ; +sub TCSADRAIN() ; +sub TCSAFLUSH() ; +sub TCSANOW() ; +sub TOSTOP() ; +sub TRAP_BRKPT() ; +sub TRAP_TRACE() ; +sub TZNAME_MAX() ; +sub VEOF() ; +sub VEOL() ; +sub VERASE() ; +sub VINTR() ; +sub VKILL() ; +sub VMIN() ; +sub VQUIT() ; +sub VSTART() ; +sub VSTOP() ; +sub VSUSP() ; +sub VTIME() ; +sub WEXITSTATUS; +sub WIFEXITED; +sub WIFSIGNALED; +sub WIFSTOPPED; +sub WSTOPSIG; +sub WTERMSIG; +sub WUNTRACED() ; +sub _PC_CHOWN_RESTRICTED() ; +sub _PC_LINK_MAX() ; +sub _PC_MAX_CANON() ; +sub _PC_MAX_INPUT() ; +sub _PC_NAME_MAX() ; +sub _PC_NO_TRUNC() ; +sub _PC_PATH_MAX() ; +sub _PC_PIPE_BUF() ; +sub _PC_VDISABLE() ; +sub _SC_ARG_MAX() ; +sub _SC_CHILD_MAX() ; +sub _SC_CLK_TCK() ; +sub _SC_JOB_CONTROL() ; +sub _SC_NGROUPS_MAX() ; +sub _SC_OPEN_MAX() ; +sub _SC_PAGESIZE() ; +sub _SC_SAVED_IDS() ; +sub _SC_STREAM_MAX() ; +sub _SC_TZNAME_MAX() ; +sub _SC_VERSION() ; +sub _exit; +sub abort; +sub abs; +sub access; +sub acos; +sub acosh; +sub alarm; +sub asctime; +sub asin; +sub asinh; +sub assert; +sub atan2; +sub atan; +sub atanh; +sub atexit; +sub atof; +sub atoi; +sub atol; +sub bsearch; +sub calloc; +sub cbrt; +sub ceil; +sub cfgetispeed; +sub cfgetospeed; +sub cfsetispeed; +sub cfsetospeed; +sub chdir; +sub chmod; +sub chown; +sub clearerr; +sub clock; +sub close; +sub closedir; +sub constant; +sub copysign; +sub cos; +sub cosh; +sub creat; +sub ctermid; +sub ctime; +sub cuserid; +sub difftime; +sub div; +sub dup2; +sub dup; +sub erf; +sub erfc; +sub errno; +sub execl; +sub execle; +sub execlp; +sub execv; +sub execve; +sub execvp; +sub exit; +sub exp2; +sub exp; +sub expm1; +sub fabs; +sub fclose; +sub fcntl; +sub fdim; +sub fdopen; +sub fegetround; +sub feof; +sub ferror; +sub fesetround; +sub fflush; +sub fgetc; +sub fgetpos; +sub fgets; +sub fileno; +sub floor; +sub fma; +sub fmax; +sub fmin; +sub fmod; +sub fopen; +sub fork; +sub fpathconf; +sub fpclassify; +sub fprintf; +sub fputc; +sub fputs; +sub fread; +sub free; +sub freopen; +sub frexp; +sub fscanf; +sub fseek; +sub fsetpos; +sub fstat; +sub fsync; +sub ftell; +sub fwrite; +sub getc; +sub getchar; +sub getcwd; +sub getegid; +sub getenv; +sub geteuid; +sub getgid; +sub getgrgid; +sub getgrnam; +sub getgroups; +sub getlogin; +sub getpayload; +sub getpgrp; +sub getpid; +sub getppid; +sub getpwnam; +sub getpwuid; +sub gets; +sub getuid; +sub gmtime; +sub hypot; +sub ilogb; +sub isatty; +sub isfinite; +sub isgreater; +sub isgreaterequal; +sub isinf; +sub isless; +sub islessequal; +sub islessgreater; +sub isnan; +sub isnormal; +sub issignaling; +sub isunordered; +sub j0; +sub j1; +sub jn; +sub kill; +sub labs; +sub lchown; +sub ldexp; +sub ldiv; +sub lgamma; +sub link; +sub localeconv; +sub localtime; +sub log10; +sub log1p; +sub log2; +sub log; +sub logb; +sub longjmp; +sub lrint; +sub lround; +sub lseek; +sub malloc; +sub mblen; +sub mbstowcs; +sub mbtowc; +sub memchr; +sub memcmp; +sub memcpy; +sub memmove; +sub memset; +sub mkdir; +sub mkfifo; +sub mktime; +sub modf; +sub nan; +sub nearbyint; +sub nextafter; +sub nexttoward; +sub nice; +sub offsetof; +sub open; +sub opendir; +sub pathconf; +sub pause; +sub pipe; +sub pow; +sub putc; +sub putchar; +sub puts; +sub qsort; +sub raise; +sub rand; +sub read; +sub readdir; +sub realloc; +sub remainder; +sub remove; +sub remquo; +sub rename; +sub rewind; +sub rewinddir; +sub rint; +sub rmdir; +sub round; +sub scalbn; +sub scanf; +sub setbuf; +sub setgid; +sub setjmp; +sub setlocale; +sub setpayload; +sub setpayloadsig; +sub setpgid; +sub setsid; +sub setuid; +sub setvbuf; +sub sigaction; +sub siglongjmp; +sub signal; +sub signbit; +sub sigpending; +sub sigprocmask; +sub sigsetjmp; +sub sigsuspend; +sub sin; +sub sinh; +sub sleep; +sub sqrt; +sub srand; +sub sscanf; +sub stat; +sub stderr; +sub stdin; +sub stdout; +sub strcat; +sub strchr; +sub strcmp; +sub strcoll; +sub strcpy; +sub strcspn; +sub strerror; +sub strftime; +sub strlen; +sub strncat; +sub strncmp; +sub strncpy; +sub strpbrk; +sub strrchr; +sub strspn; +sub strstr; +sub strtod; +sub strtok; +sub strtol; +sub strtoul; +sub strxfrm; +sub sysconf; +sub system; +sub tan; +sub tanh; +sub tcdrain; +sub tcflow; +sub tcflush; +sub tcgetattr; +sub tcgetpgrp; +sub tcsendbreak; +sub tcsetattr; +sub tcsetpgrp; +sub tgamma; +sub time; +sub times; +sub tmpfile; +sub tmpnam; +sub trunc; +sub ttyname; +sub tzname; +sub tzset; +sub umask; +sub uname; +sub ungetc; +sub unlink; +sub utime; +sub vfprintf; +sub vprintf; +sub vsprintf; +sub wait; +sub waitpid; +sub wcstombs; +sub wctomb; +sub write; +sub y0; +sub y1; +sub yn; +} +package POSIX::SigSet { +sub addset; +sub delset; +sub emptyset; +sub fillset; +sub ismember; +sub new; +} +package POSIX::Termios { +sub getattr; +sub getcc; +sub getcflag; +sub getiflag; +sub getispeed; +sub getlflag; +sub getoflag; +sub getospeed; +sub new; +sub setattr; +sub setcc; +sub setcflag; +sub setiflag; +sub setispeed; +sub setlflag; +sub setoflag; +sub setospeed; +} +package Package::DeprecationManager { +sub _HASH0($) ; +sub any(&@) ; +sub subname; +} +package Package::Stash { +sub add_symbol; +sub get_all_symbols; +sub get_or_add_symbol; +sub get_symbol; +sub has_symbol; +sub list_all_symbols; +sub name; +sub namespace; +sub new; +sub remove_glob; +sub remove_symbol; +} +package Package::Stash::XS { +sub add_symbol; +sub get_all_symbols; +sub get_or_add_symbol; +sub get_symbol; +sub has_symbol; +sub list_all_symbols; +sub name; +sub namespace; +sub new; +sub remove_glob; +sub remove_symbol; +} +package PadWalker { +sub _upcontext; +sub closed_over; +sub peek_my; +sub peek_our; +sub peek_sub; +sub set_closed_over; +sub var_name; +} +package Params::Util { +sub _ARRAY($) ; +sub _ARRAY0($) ; +sub _ARRAYLIKE($) ; +sub _CODE($) ; +sub _CODELIKE($) ; +sub _HASH($) ; +sub _HASH0($) ; +sub _HASHLIKE($) ; +sub _INSTANCE($$) ; +sub _NUMBER($) ; +sub _REGEX($) ; +sub _SCALAR($) ; +sub _SCALAR0($) ; +sub _STRING($) ; +sub looks_like_number($) ; +} +package Params::ValidationCompiler::Compiler { +sub blessed($) ; +sub looks_like_number($) ; +sub pairkeys(@) ; +sub pairvalues(@) ; +sub perlstring; +sub reftype($) ; +sub set_subname; +} +package Parse::Binary { +sub FORMAT() ; +sub PROPERTIES() ; +} +package PerlIO { +sub get_layers(*;@) ; +} +package PerlIO::Layer { +sub NoWarnings; +sub find; +} +package PerlIO::Layers { +sub _get_kinds; +sub get_buffer_sizes; +sub max(@) ; +sub reduce(&@) ; +} +package Regexp { +sub DESTROY() ; +} +package SDBM_File { +sub DELETE; +sub DESTROY; +sub EXISTS; +sub FETCH; +sub FIRSTKEY; +sub NEXTKEY; +sub STORE; +sub TIEHASH; +sub error; +sub filter_fetch_key; +sub filter_fetch_value; +sub filter_store_key; +sub filter_store_value; +sub sdbm_clearerr; +} +package Scalar::Util { +sub blessed($) ; +sub dualvar($$) ; +sub isdual($) ; +sub isvstring($) ; +sub isweak($) ; +sub looks_like_number($) ; +sub openhandle($) ; +sub readonly($) ; +sub refaddr($) ; +sub reftype($) ; +sub tainted($) ; +sub unweaken($) ; +sub weaken($) ; +} +package Socket { +sub AF_802() ; +sub AF_AAL() ; +sub AF_CTF() ; +sub AF_GOSIP() ; +sub AF_KEY() ; +sub AF_LAST() ; +sub AF_LINK() ; +sub AF_LOCAL() ; +sub AF_NBS() ; +sub AF_NIT() ; +sub AF_OSINET() ; +sub AF_ROUTE() ; +sub AF_USER() ; +sub AF_WAN() ; +sub AF_X25() ; +sub AI_ADDRCONFIG() ; +sub AI_ALL() ; +sub AI_CANONIDN() ; +sub AI_IDN() ; +sub AI_IDN_ALLOW_UNASSIGNED() ; +sub AI_IDN_USE_STD3_ASCII_RULES() ; +sub AI_NUMERICSERV() ; +sub AI_V4MAPPED() ; +sub AUTOLOAD; +sub EAI_ADDRFAMILY() ; +sub EAI_BADHINTS() ; +sub EAI_PROTOCOL() ; +sub EAI_SYSTEM() ; +sub IOV_MAX() ; +sub IPTOS_LOWDELAY() ; +sub IPTOS_MINCOST() ; +sub IPTOS_RELIABILITY() ; +sub IPTOS_THROUGHPUT() ; +sub IPV6_ADDRFROM() ; +sub IPV6_MTU() ; +sub IPV6_MTU_DISCOVER() ; +sub IPV6_RECVERR() ; +sub IPV6_ROUTER_ALERT() ; +sub IP_BIND_ADDRESS_NO_PORT() ; +sub IP_FREEBIND() ; +sub IP_MTU() ; +sub IP_MTU_DISCOVER() ; +sub IP_MULTICAST_ALL() ; +sub IP_NODEFRAG() ; +sub IP_PMTUDISC_DO() ; +sub IP_PMTUDISC_DONT() ; +sub IP_PMTUDISC_PROBE() ; +sub IP_PMTUDISC_WANT() ; +sub IP_RECVERR() ; +sub IP_RECVOPTS() ; +sub IP_RECVRETOPTS() ; +sub IP_RETOPTS() ; +sub IP_TRANSPARENT() ; +sub MSG_BCAST() ; +sub MSG_BTAG() ; +sub MSG_CTLFLAGS() ; +sub MSG_CTLIGNORE() ; +sub MSG_CTRUNC() ; +sub MSG_DONTWAIT() ; +sub MSG_EOF() ; +sub MSG_EOR() ; +sub MSG_ERRQUEUE() ; +sub MSG_ETAG() ; +sub MSG_FASTOPEN() ; +sub MSG_FIN() ; +sub MSG_MCAST() ; +sub MSG_NOSIGNAL() ; +sub MSG_PROXY() ; +sub MSG_RST() ; +sub MSG_SYN() ; +sub MSG_TRUNC() ; +sub MSG_URG() ; +sub MSG_WIRE() ; +sub NI_IDN() ; +sub NI_IDN_ALLOW_UNASSIGNED() ; +sub NI_IDN_USE_STD3_ASCII_RULES() ; +sub PF_802() ; +sub PF_AAL() ; +sub PF_CTF() ; +sub PF_GOSIP() ; +sub PF_KEY() ; +sub PF_LAST() ; +sub PF_LINK() ; +sub PF_LOCAL() ; +sub PF_NBS() ; +sub PF_NIT() ; +sub PF_OSINET() ; +sub PF_ROUTE() ; +sub PF_USER() ; +sub PF_WAN() ; +sub PF_X25() ; +sub SCM_CONNECT() ; +sub SCM_CREDENTIALS() ; +sub SCM_CREDS() ; +sub SCM_RIGHTS() ; +sub SCM_TIMESTAMP() ; +sub SOCK_CLOEXEC() ; +sub SOCK_NONBLOCK() ; +sub SO_ATTACH_FILTER() ; +sub SO_BACKLOG() ; +sub SO_BINDTODEVICE() ; +sub SO_BSDCOMPAT() ; +sub SO_BUSY_POLL() ; +sub SO_CHAMELEON() ; +sub SO_DETACH_FILTER() ; +sub SO_DGRAM_ERRIND() ; +sub SO_DOMAIN() ; +sub SO_FAMILY() ; +sub SO_LOCK_FILTER() ; +sub SO_MARK() ; +sub SO_PASSCRED() ; +sub SO_PASSIFNAME() ; +sub SO_PEEK_OFF() ; +sub SO_PEERCRED() ; +sub SO_PRIORITY() ; +sub SO_PROTOCOL() ; +sub SO_PROTOTYPE() ; +sub SO_RCVBUFFORCE() ; +sub SO_REUSEPORT() ; +sub SO_RXQ_OVFL() ; +sub SO_SECURITY_AUTHENTICATION() ; +sub SO_SECURITY_ENCRYPTION_NETWORK() ; +sub SO_SECURITY_ENCRYPTION_TRANSPORT() ; +sub SO_SNDBUFFORCE() ; +sub SO_STATE() ; +sub SO_TIMESTAMP() ; +sub SO_XOPEN() ; +sub SO_XSE() ; +sub TCP_CONGESTION() ; +sub TCP_CONNECTIONTIMEOUT() ; +sub TCP_CORK() ; +sub TCP_DEFER_ACCEPT() ; +sub TCP_FASTOPEN() ; +sub TCP_INFO() ; +sub TCP_INIT_CWND() ; +sub TCP_KEEPALIVE() ; +sub TCP_KEEPCNT() ; +sub TCP_KEEPIDLE() ; +sub TCP_KEEPINTVL() ; +sub TCP_LINGER2() ; +sub TCP_MAXRT() ; +sub TCP_MAXSEG() ; +sub TCP_MD5SIG() ; +sub TCP_NOOPT() ; +sub TCP_NOPUSH() ; +sub TCP_QUICKACK() ; +sub TCP_SACK_ENABLE() ; +sub TCP_STDURG() ; +sub TCP_SYNCNT() ; +sub TCP_USER_TIMEOUT() ; +sub TCP_WINDOW_CLAMP() ; +sub UIO_MAXIOV() ; +sub getaddrinfo; +sub getnameinfo; +sub inet_aton; +sub inet_ntoa; +sub inet_ntop; +sub inet_pton; +sub pack_ip_mreq; +sub pack_ip_mreq_source; +sub pack_ipv6_mreq; +sub pack_sockaddr_in6; +sub pack_sockaddr_in; +sub pack_sockaddr_un; +sub sockaddr_family; +sub unpack_ip_mreq; +sub unpack_ip_mreq_source; +sub unpack_ipv6_mreq; +sub unpack_sockaddr_in6; +sub unpack_sockaddr_in; +sub unpack_sockaddr_un; +} +package Socket6 { +sub constant; +sub gai_strerror; +sub getaddrinfo; +sub gethostbyname2; +sub getipnodebyaddr; +sub getipnodebyname; +sub getnameinfo; +sub in6addr_any; +sub in6addr_loopback; +sub inet_ntop; +sub inet_pton; +sub pack_sockaddr_in6; +sub pack_sockaddr_in6_all; +sub unpack_sockaddr_in6; +sub unpack_sockaddr_in6_all; +} +package Specio::Constraint::Enum { +sub dclone($) ; +sub refaddr($) ; +} +package Specio::Constraint::Parameterized { +sub dclone($) ; +} +package Specio::Constraint::Role::CanType { +sub blessed($) ; +sub dclone($) ; +} +package Specio::Constraint::Role::Interface { +sub all(&@) ; +sub any(&@) ; +sub first(&@) ; +} +package Specio::Constraint::Role::IsaType { +sub blessed($) ; +sub dclone($) ; +} +package Specio::Constraint::Union { +sub all(&@) ; +sub any(&@) ; +sub dclone($) ; +} +package Specio::Exception { +sub blessed($) ; +} +package Specio::Helpers { +sub blessed($) ; +} +package Specio::OO { +sub all(&@) ; +sub dclone($) ; +sub perlstring; +sub weaken($) ; +} +package Specio::PartialDump { +sub blessed($) ; +sub looks_like_number($) ; +sub reftype($) ; +} +package Specio::TypeChecks { +sub blessed($) ; +} +package Storable { +sub dclone($) ; +sub init_perinterp() ; +sub is_retrieving() ; +sub is_storing() ; +sub last_op_in_netorder() ; +sub mretrieve($;$) ; +sub mstore($) ; +sub net_mstore($) ; +sub net_pstore($$) ; +sub pretrieve($;$) ; +sub pstore($$) ; +sub stack_depth() ; +sub stack_depth_hash() ; +} +package Sub::Identify { +sub get_code_info($) ; +sub get_code_location($) ; +sub is_sub_constant($) ; +} +package Sub::Name { +sub subname; +} +package Sub::Util { +sub set_prototype; +sub set_subname; +sub subname; +} +package Sys::Hostname { +sub ghname; +} +package Sys::Syslog { +sub AF_802() ; +sub AF_AAL() ; +sub AF_CTF() ; +sub AF_GOSIP() ; +sub AF_KEY() ; +sub AF_LAST() ; +sub AF_LINK() ; +sub AF_NBS() ; +sub AF_NIT() ; +sub AF_OSINET() ; +sub AF_ROUTE() ; +sub AF_USER() ; +sub AF_WAN() ; +sub AF_X25() ; +sub AI_ADDRCONFIG() ; +sub AI_ALL() ; +sub AI_CANONIDN() ; +sub AI_IDN() ; +sub AI_IDN_ALLOW_UNASSIGNED() ; +sub AI_IDN_USE_STD3_ASCII_RULES() ; +sub AI_NUMERICSERV() ; +sub AI_V4MAPPED() ; +sub EAI_ADDRFAMILY() ; +sub EAI_BADHINTS() ; +sub EAI_PROTOCOL() ; +sub EAI_SYSTEM() ; +sub IOV_MAX() ; +sub IPTOS_LOWDELAY() ; +sub IPTOS_MINCOST() ; +sub IPTOS_RELIABILITY() ; +sub IPTOS_THROUGHPUT() ; +sub IPV6_ADDRFROM() ; +sub IPV6_MTU() ; +sub IPV6_MTU_DISCOVER() ; +sub IPV6_RECVERR() ; +sub IPV6_ROUTER_ALERT() ; +sub IP_BIND_ADDRESS_NO_PORT() ; +sub IP_FREEBIND() ; +sub IP_MTU() ; +sub IP_MTU_DISCOVER() ; +sub IP_MULTICAST_ALL() ; +sub IP_NODEFRAG() ; +sub IP_PMTUDISC_DO() ; +sub IP_PMTUDISC_DONT() ; +sub IP_PMTUDISC_PROBE() ; +sub IP_PMTUDISC_WANT() ; +sub IP_RECVERR() ; +sub IP_RECVOPTS() ; +sub IP_RECVRETOPTS() ; +sub IP_RETOPTS() ; +sub IP_TRANSPARENT() ; +sub LOG_FAC; +sub LOG_MAKEPRI; +sub LOG_MASK; +sub LOG_PRI; +sub LOG_UPTO; +sub MSG_BCAST() ; +sub MSG_BTAG() ; +sub MSG_CTLFLAGS() ; +sub MSG_CTLIGNORE() ; +sub MSG_CTRUNC() ; +sub MSG_DONTWAIT() ; +sub MSG_EOF() ; +sub MSG_EOR() ; +sub MSG_ERRQUEUE() ; +sub MSG_ETAG() ; +sub MSG_FASTOPEN() ; +sub MSG_FIN() ; +sub MSG_MCAST() ; +sub MSG_NOSIGNAL() ; +sub MSG_PROXY() ; +sub MSG_RST() ; +sub MSG_SYN() ; +sub MSG_TRUNC() ; +sub MSG_URG() ; +sub MSG_WIRE() ; +sub NI_IDN() ; +sub NI_IDN_ALLOW_UNASSIGNED() ; +sub NI_IDN_USE_STD3_ASCII_RULES() ; +sub PF_802() ; +sub PF_AAL() ; +sub PF_CTF() ; +sub PF_GOSIP() ; +sub PF_KEY() ; +sub PF_LAST() ; +sub PF_LINK() ; +sub PF_NBS() ; +sub PF_NIT() ; +sub PF_OSINET() ; +sub PF_ROUTE() ; +sub PF_USER() ; +sub PF_WAN() ; +sub PF_X25() ; +sub SCM_CONNECT() ; +sub SCM_CREDENTIALS() ; +sub SCM_CREDS() ; +sub SCM_RIGHTS() ; +sub SCM_TIMESTAMP() ; +sub SOCK_CLOEXEC() ; +sub SOCK_NONBLOCK() ; +sub SO_ATTACH_FILTER() ; +sub SO_BACKLOG() ; +sub SO_CHAMELEON() ; +sub SO_DETACH_FILTER() ; +sub SO_DGRAM_ERRIND() ; +sub SO_DOMAIN() ; +sub SO_FAMILY() ; +sub SO_LOCK_FILTER() ; +sub SO_PASSCRED() ; +sub SO_PASSIFNAME() ; +sub SO_PEERCRED() ; +sub SO_PROTOCOL() ; +sub SO_PROTOTYPE() ; +sub SO_RCVBUFFORCE() ; +sub SO_REUSEPORT() ; +sub SO_SECURITY_AUTHENTICATION() ; +sub SO_SECURITY_ENCRYPTION_NETWORK() ; +sub SO_SECURITY_ENCRYPTION_TRANSPORT() ; +sub SO_SNDBUFFORCE() ; +sub SO_STATE() ; +sub SO_XOPEN() ; +sub SO_XSE() ; +sub TCP_CONGESTION() ; +sub TCP_CONNECTIONTIMEOUT() ; +sub TCP_CORK() ; +sub TCP_DEFER_ACCEPT() ; +sub TCP_FASTOPEN() ; +sub TCP_INFO() ; +sub TCP_INIT_CWND() ; +sub TCP_KEEPALIVE() ; +sub TCP_KEEPCNT() ; +sub TCP_KEEPIDLE() ; +sub TCP_KEEPINTVL() ; +sub TCP_LINGER2() ; +sub TCP_MAXRT() ; +sub TCP_MAXSEG() ; +sub TCP_MD5SIG() ; +sub TCP_NOOPT() ; +sub TCP_NOPUSH() ; +sub TCP_QUICKACK() ; +sub TCP_SACK_ENABLE() ; +sub TCP_STDURG() ; +sub TCP_SYNCNT() ; +sub TCP_USER_TIMEOUT() ; +sub TCP_WINDOW_CLAMP() ; +sub UIO_MAXIOV() ; +sub closelog_xs; +sub constant; +sub getaddrinfo; +sub getnameinfo; +sub inet_aton; +sub inet_ntoa; +sub inet_ntop; +sub inet_pton; +sub openlog_xs; +sub pack_ip_mreq; +sub pack_ip_mreq_source; +sub pack_ipv6_mreq; +sub pack_sockaddr_in6; +sub pack_sockaddr_in; +sub pack_sockaddr_un; +sub setlocale; +sub setlogmask_xs; +sub sockaddr_family; +sub strftime; +sub syslog_xs; +sub unpack_ip_mreq; +sub unpack_ip_mreq_source; +sub unpack_ipv6_mreq; +sub unpack_sockaddr_in6; +sub unpack_sockaddr_in; +sub unpack_sockaddr_un; +} +package Sys::Syslog::Win32 { +sub EVENTLOG_AUDIT_FAILURE; +sub EVENTLOG_AUDIT_SUCCESS; +sub EVENTLOG_BACKWARDS_READ; +sub EVENTLOG_END_ALL_PAIRED_EVENTS; +sub EVENTLOG_END_PAIRED_EVENT; +sub EVENTLOG_FORWARDS_READ; +sub EVENTLOG_PAIRED_EVENT_ACTIVE; +sub EVENTLOG_PAIRED_EVENT_INACTIVE; +sub EVENTLOG_SEEK_READ; +sub EVENTLOG_SEQUENTIAL_READ; +sub EVENTLOG_START_PAIRED_EVENT; +sub EVENTLOG_SUCCESS; +} +package Template { +sub blessed($) ; +} +package Template::Document { +sub is_utf8; +} +package Template::Filters { +sub blessed($) ; +} +package Template::Service { +sub blessed($) ; +} +package Template::Stash { +sub blessed($) ; +sub reftype($) ; +} +package Template::Stash::XS { +sub get; +sub set; +} +package Template::VMethods { +sub blessed($) ; +sub looks_like_number($) ; +} +package Term::ReadKey { +sub GetControlChars; +sub GetSpeed; +sub GetTermSizeGSIZE; +sub GetTermSizeGWINSZ; +sub GetTermSizeVIO; +sub GetTermSizeWin32; +sub SetControlChars; +sub SetReadMode; +sub SetTerminalSize; +sub Win32PeekChar; +sub blockoptions; +sub pollfile; +sub selectfile; +sub setnodelay; +sub termoptions; +sub termsizeoptions; +} +package Term::Table { +sub blessed($) ; +sub max(@) ; +sub sum(@) ; +} +package Term::Table::Cell { +sub sum(@) ; +} +package Term::Table::HashBase { +sub _isa($;$) ; +} +package Term::Table::LineBreak { +sub blessed($) ; +} +package Test2::API { +sub blessed($) ; +sub weaken($) ; +} +package Test2::API::Context { +sub blessed($) ; +sub weaken($) ; +} +package Test2::API::Instance { +sub reftype($) ; +} +package Test2::Event { +sub blessed($) ; +sub reftype($) ; +} +package Test2::Event::V2 { +sub reftype($) ; +} +package Test2::Hub { +sub first(&@) ; +sub weaken($) ; +} +package Test2::Util::Facets2Legacy { +sub blessed($) ; +} +package Test2::Util::HashBase { +sub _isa($;$) ; +} +package Test::Builder { +sub blessed($) ; +sub reftype($) ; +sub weaken($) ; +} +package Test::LeakTrace { +sub CLONE; +sub _finish; +sub _runops_installed; +sub _start; +sub count_sv; +} +package Text::CSV_XS { +sub Combine; +sub Parse; +sub SetDiag; +sub _cache_diag; +sub _cache_set; +sub error_input; +sub getline; +sub getline_all; +sub print; +} +package Text::Soundex { +sub soundex; +sub soundex_xs; +} +package Tie::Hash::NamedCapture { +sub CLEAR; +sub DELETE; +sub EXISTS; +sub FETCH; +sub FIRSTKEY; +sub NEXTKEY; +sub SCALAR; +sub STORE; +sub TIEHASH; +sub _tie_it; +sub flags; +} +package Time::HiRes { +sub CLONE(;@) ; +sub alarm($;$) ; +sub clock() ; +sub clock_getres(;$) ; +sub clock_gettime(;$) ; +sub clock_nanosleep($$;$) ; +sub constant($) ; +sub gettimeofday() ; +sub lstat(;$) ; +sub nanosleep($) ; +sub sleep(;@) ; +sub stat(;$) ; +sub time() ; +sub ualarm($;$) ; +sub usleep($) ; +sub utime($$;@) ; +} +package Time::Moment { +sub CLONE; +sub at_last_day_of_month; +sub at_last_day_of_quarter; +sub at_last_day_of_year; +sub at_midnight; +sub at_noon; +sub at_utc; +sub compare; +sub day_of_month; +sub day_of_quarter; +sub day_of_week; +sub day_of_year; +sub delta_days; +sub delta_hours; +sub delta_microseconds; +sub delta_milliseconds; +sub delta_minutes; +sub delta_months; +sub delta_nanoseconds; +sub delta_seconds; +sub delta_weeks; +sub delta_years; +sub epoch; +sub from_epoch; +sub from_jd; +sub from_mjd; +sub from_object; +sub from_rd; +sub from_string; +sub hour; +sub is_after; +sub is_before; +sub is_equal; +sub is_leap_year; +sub jd; +sub length_of_month; +sub length_of_quarter; +sub length_of_week_year; +sub length_of_year; +sub local_rd_as_seconds; +sub local_rd_values; +sub microsecond; +sub microsecond_of_day; +sub millisecond; +sub millisecond_of_day; +sub minus_days; +sub minus_hours; +sub minus_microseconds; +sub minus_milliseconds; +sub minus_minutes; +sub minus_months; +sub minus_nanoseconds; +sub minus_seconds; +sub minus_weeks; +sub minus_years; +sub minute; +sub minute_of_day; +sub mjd; +sub month; +sub nanosecond; +sub nanosecond_of_day; +sub new; +sub now; +sub now_utc; +sub offset; +sub plus_days; +sub plus_hours; +sub plus_microseconds; +sub plus_milliseconds; +sub plus_minutes; +sub plus_months; +sub plus_nanoseconds; +sub plus_seconds; +sub plus_weeks; +sub plus_years; +sub precision; +sub quarter; +sub rd; +sub rdn; +sub second; +sub second_of_day; +sub strftime; +sub to_string; +sub utc_rd_as_seconds; +sub utc_rd_values; +sub week; +sub with; +sub with_day_of_month; +sub with_day_of_quarter; +sub with_day_of_week; +sub with_day_of_year; +sub with_hour; +sub with_microsecond; +sub with_microsecond_of_day; +sub with_millisecond; +sub with_millisecond_of_day; +sub with_minute; +sub with_minute_of_day; +sub with_month; +sub with_nanosecond; +sub with_nanosecond_of_day; +sub with_offset; +sub with_offset_same_instant; +sub with_offset_same_local; +sub with_precision; +sub with_quarter; +sub with_rdn; +sub with_second; +sub with_second_of_day; +sub with_week; +sub with_year; +sub year; +} +package Time::Moment::Internal { +sub orthodox_easter_sunday; +sub western_easter_sunday; +} +package Time::Piece { +sub _crt_gmtime($) ; +sub _crt_localtime($) ; +sub _get_localization() ; +sub _mini_mktime($$$$$$) ; +sub _strftime($$;$) ; +sub _strptime($$$$) ; +sub _tzset() ; +sub blessed($) ; +} +package Try::Tiny { +sub _subname; +} +package UNIVERSAL { +sub DOES; +sub VERSION; +sub can; +sub isa; +} +package Unicode::Collate { +sub _decompHangul; +sub _derivCE_14; +sub _derivCE_18; +sub _derivCE_20; +sub _derivCE_22; +sub _derivCE_24; +sub _derivCE_32; +sub _derivCE_34; +sub _derivCE_36; +sub _derivCE_8; +sub _derivCE_9; +sub _exists_simple; +sub _fetch_rest; +sub _fetch_simple; +sub _getHexArray; +sub _ignorable_simple; +sub _isIllegal; +sub _isUIdeo; +sub _uideoCE_8; +sub getHST; +sub mk_SortKey; +sub varCE; +sub visualizeSortKey; +} +package Unicode::GCString { +sub DESTROY($) ; +sub _new($$;$) ; +sub as_array($) ; +sub as_scalarref; +sub as_string($;$;$) ; +sub chars($) ; +sub cmp($$;$) ; +sub columns; +sub concat($$;$) ; +sub copy($) ; +sub eos; +sub flag($;$;$) ; +sub item($;$) ; +sub join; +sub lbc($) ; +sub lbcext($) ; +sub lbclass($;$) ; +sub lbclass_ext($;$) ; +sub length($) ; +sub next($;$;$) ; +sub pos($;$) ; +sub substr($$;$;$) ; +} +package Unicode::LineBreak { +sub DESTROY($) ; +sub EAWidths; +sub LBClasses; +sub SOMBOK_VERSION; +sub UNICODE_VERSION; +sub _config; +sub _new($) ; +sub as_hashref; +sub as_scalarref; +sub as_string; +sub break($$) ; +sub break_partial($$) ; +sub breakingRule($$$) ; +sub copy($) ; +sub is_utf8($;$) ; +sub lbrule($$$) ; +sub reset($) ; +sub strsize($$$$$;$) ; +} +package Unicode::LineBreak::SouthEastAsian { +sub supported() ; +} +package Unicode::Normalize { +sub FCC($) ; +sub NFC($) ; +sub NFD($) ; +sub NFKC($) ; +sub NFKD($) ; +sub checkFCC($) ; +sub checkFCD($) ; +sub checkNFC($) ; +sub checkNFD($) ; +sub checkNFKC($) ; +sub checkNFKD($) ; +sub compose($) ; +sub composeContiguous($) ; +sub decompose($;$) ; +sub getCanon($) ; +sub getCombinClass($) ; +sub getCompat($) ; +sub getComposite($$) ; +sub isComp2nd($) ; +sub isComp_Ex($) ; +sub isExclusion($) ; +sub isNFC_MAYBE($) ; +sub isNFC_NO($) ; +sub isNFD_NO($) ; +sub isNFKC_MAYBE($) ; +sub isNFKC_NO($) ; +sub isNFKD_NO($) ; +sub isNonStDecomp($) ; +sub isSingleton($) ; +sub reorder($) ; +sub splitOnLastStarter; +} +package Unicode::UTF8 { +sub decode_utf8; +sub encode_utf8; +sub valid_utf8; +} +package Variable::Magic { +sub CLONE; +sub _wizard; +sub cast(\[$@%&*]$@) ; +sub dispell(\[$@%&*]$) ; +sub getdata(\[$@%&*]$) ; +} +package Win32 { +sub AbortSystemShutdown; +sub CopyFile; +sub CreateDirectory; +sub CreateFile; +sub DomainName; +sub ExpandEnvironmentStrings; +sub FormatMessage; +sub FreeLibrary; +sub FsType; +sub GetACP; +sub GetANSIPathName; +sub GetArchName; +sub GetChipName; +sub GetConsoleCP; +sub GetConsoleOutputCP; +sub GetCurrentProcessId; +sub GetCurrentThreadId; +sub GetCwd; +sub GetFileVersion; +sub GetFolderPath; +sub GetFullPathName; +sub GetLastError; +sub GetLongPathName; +sub GetNextAvailDrive; +sub GetOEMCP; +sub GetOSVersion; +sub GetProcAddress; +sub GetProductInfo; +sub GetShortPathName; +sub GetSystemMetrics; +sub GetTickCount; +sub GuidGen; +sub InitiateSystemShutdown; +sub IsAdminUser; +sub IsWin95; +sub IsWinNT; +sub LoadLibrary; +sub LoginName; +sub LookupAccountName; +sub LookupAccountSID; +sub MsgBox; +sub NodeName; +sub OutputDebugString; +sub RegisterServer; +sub SetChildShowWindow; +sub SetConsoleCP; +sub SetConsoleOutputCP; +sub SetCwd; +sub SetLastError; +sub Sleep; +sub Spawn; +sub UnregisterServer; +} +package Win32::API { +sub Call; +sub FreeLibrary; +sub FromUnicode; +sub GetMagicSV; +sub GetModuleFileName; +sub GetProcAddress; +sub IsBadReadPtr; +sub IsBadStringPtr; +sub LoadLibrary; +sub MoveMemory; +sub PointerAt; +sub PointerTo; +sub ReadMemory; +sub SafeReadWideCString; +sub SetMagicSV; +sub ToUnicode; +sub WriteMemory; +sub _Align; +sub _ImportXS; +sub _TruncateToWideNull; +sub _my_cxt_clone; +sub looks_like_number($) ; +sub weaken($) ; +} +package Win32::API::Callback { +sub IsBadStringPtr; +sub MakeParamArr; +sub PackedRVTarget; +sub WriteMemory; +} +package Win32::API::Callback::HeapBlock { +sub DESTROY; +sub new; +} +package Win32::API::Callback::IATPatch { +sub CLONE_SKIP; +sub DESTROY; +sub GetOriginalFunctionPtr; +sub Unpatch; +sub new; +} +package Win32::Clipboard { +sub Empty; +sub EnumFormats; +sub GetAs; +sub GetBitmap; +sub GetFiles; +sub GetFormatName; +sub GetText; +sub IsBitmap; +sub IsFiles; +sub IsFormatAvailable; +sub IsText; +sub Set; +sub StartClipboardViewer; +sub StopClipboardViewer; +sub WaitForChange; +sub constant; +} +package Win32::Console { +sub Alloc; +sub Free; +sub MouseButtons; +sub _CloseHandle; +sub _CreateConsoleScreenBuffer; +sub _FillConsoleOutputAttribute; +sub _FillConsoleOutputCharacter; +sub _FlushConsoleInputBuffer; +sub _GenerateConsoleCtrlEvent; +sub _GetConsoleCP; +sub _GetConsoleCursorInfo; +sub _GetConsoleMode; +sub _GetConsoleOutputCP; +sub _GetConsoleScreenBufferInfo; +sub _GetConsoleTitle; +sub _GetLargestConsoleWindowSize; +sub _GetNumberOfConsoleInputEvents; +sub _GetStdHandle; +sub _PeekConsoleInput; +sub _ReadConsole; +sub _ReadConsoleInput; +sub _ReadConsoleOutput; +sub _ReadConsoleOutputAttribute; +sub _ReadConsoleOutputCharacter; +sub _ScrollConsoleScreenBuffer; +sub _SetConsoleActiveScreenBuffer; +sub _SetConsoleCP; +sub _SetConsoleCursorInfo; +sub _SetConsoleCursorPosition; +sub _SetConsoleIcon; +sub _SetConsoleMode; +sub _SetConsoleOutputCP; +sub _SetConsoleScreenBufferSize; +sub _SetConsoleTextAttribute; +sub _SetConsoleTitle; +sub _SetConsoleWindowInfo; +sub _SetStdHandle; +sub _WriteConsole; +sub _WriteConsoleInput; +sub _WriteConsoleOutput; +sub _WriteConsoleOutputAttribute; +sub _WriteConsoleOutputCharacter; +sub constant; +} +package Win32::Console::ANSI { +sub Cls() ; +sub Cursor(;@) ; +sub CursorSize(;@) ; +sub MinimizeAll() ; +sub ScriptCP(;@) ; +sub SetCloseButton($) ; +sub SetConsoleFullScreen($) ; +sub SetConsoleSize($$) ; +sub SetMonitorState($) ; +sub ShowConsoleWindow($) ; +sub Title(;@) ; +sub XYMax() ; +sub _GetConsoleColors() ; +sub _GetCursorInfo() ; +sub _ScreenDump() ; +sub _SetConsoleStandard() ; +sub _chcp($$) ; +} +package Win32::Daemon { +sub AcceptedControls; +sub CallbackTimer; +sub ConfigureService; +sub CreateService; +sub DebugOutputPath; +sub DeleteService; +sub GetLastError; +sub GetSecurity; +sub GetServiceHandle; +sub GetVersion; +sub HideService; +sub IsDebugBuild; +sub QueryLastMessage; +sub QueryServiceConfig; +sub RegisterCallbacks; +sub RestoreService; +sub SetSecurity; +sub SetServiceBits; +sub ShowService; +sub StartService; +sub State; +sub StopService; +sub Timeout; +} +package Win32::EventLog { +sub BackupEventLog; +sub ClearEventLog; +sub CloseEventLog; +sub DeregisterEventSource; +sub EVENTLOG_AUDIT_FAILURE; +sub EVENTLOG_AUDIT_SUCCESS; +sub EVENTLOG_BACKWARDS_READ; +sub EVENTLOG_END_ALL_PAIRED_EVENTS; +sub EVENTLOG_END_PAIRED_EVENT; +sub EVENTLOG_FORWARDS_READ; +sub EVENTLOG_PAIRED_EVENT_ACTIVE; +sub EVENTLOG_PAIRED_EVENT_INACTIVE; +sub EVENTLOG_SEEK_READ; +sub EVENTLOG_SEQUENTIAL_READ; +sub EVENTLOG_START_PAIRED_EVENT; +sub EVENTLOG_SUCCESS; +sub GetEventLogText; +sub GetNumberOfEventLogRecords; +sub GetOldestEventLogRecord; +sub OpenBackupEventLog; +sub OpenEventLog; +sub ReadEventLog; +sub RegisterEventSource; +sub WriteEventLog; +sub constant; +} +package Win32::Exe { +sub DELEGATE_SUBS() ; +sub DISPATCH_TABLE() ; +sub FORMAT() ; +} +package Win32::Exe::Base { +sub FORMAT() ; +} +package Win32::Exe::DebugTable { +sub FORMAT() ; +} +package Win32::Exe::IconFile { +sub DEFAULT_ARGS() ; +sub DISPATCH_TABLE() ; +sub FORMAT() ; +} +package Win32::Exe::InsertResourceSection { +sub _insert_resource_section; +} +package Win32::File { +sub GetAttributes($$) ; +sub SetAttributes($$) ; +sub constant($) ; +} +package Win32::GuiTest { +sub AllocateVirtualBufferImp; +sub CheckButton; +sub ClientToScreen; +sub EnableWindow; +sub FreeVirtualBufferImp; +sub GetActiveWindow; +sub GetAsyncKeyState; +sub GetCaretPos; +sub GetChildDepth; +sub GetChildWindows; +sub GetClassName; +sub GetComboContents; +sub GetComboText; +sub GetCursorPos; +sub GetDesktopWindow; +sub GetFocus; +sub GetForegroundWindow; +sub GetHeaderColumnCount; +sub GetListContents; +sub GetListText; +sub GetListViewHeader; +sub GetListViewItem; +sub GetListViewItemCount; +sub GetMenu; +sub GetMenuItemCount; +sub GetMenuItemID; +sub GetMenuItemIndex; +sub GetMenuItemInfo; +sub GetParent; +sub GetPopupHandle; +sub GetScreenRes; +sub GetSubMenu; +sub GetSystemMenu; +sub GetTabItems; +sub GetTreeViewSelPath; +sub GetWindow; +sub GetWindowLong; +sub GetWindowRect; +sub GetWindowText; +sub GrayOutButton; +sub IsCheckedButton; +sub IsChild; +sub IsGrayedButton; +sub IsListViewItemSel; +sub IsTabItemSel; +sub IsWindow; +sub IsWindowEnabled; +sub IsWindowVisible; +sub MouseMoveAbsPix; +sub MouseMoveWheel; +sub NormToScreen; +sub PostMessage; +sub ReadFromVirtualBufferImp; +sub ScreenToClient; +sub ScreenToNorm; +sub SelComboItem; +sub SelComboItemText; +sub SelComboString; +sub SelListViewItem; +sub SelListViewItemText; +sub SelTabItem; +sub SelTabItemText; +sub SendLButtonDown; +sub SendLButtonUp; +sub SendMButtonDown; +sub SendMButtonUp; +sub SendMessage; +sub SendMouseMoveAbs; +sub SendMouseMoveRel; +sub SendRButtonDown; +sub SendRButtonUp; +sub SendRawKey; +sub SetActiveWindow; +sub SetFocus; +sub SetForegroundWindow; +sub SetWindowPos; +sub ShowWindow; +sub TabCtrl_GetCurFocus; +sub TabCtrl_GetItemCount; +sub TabCtrl_SetCurFocus; +sub TabCtrl_SetCurSel; +sub UnCheckButton; +sub UnicodeSemantics; +sub VkKeyScan; +sub WMGetText; +sub WMSetText; +sub WaitForReady; +sub WindowFromPoint; +sub WriteToVirtualBufferImp; +} +package Win32::GuiTest::DibSect { +sub CopyClient; +sub CopyWindow; +sub DESTROY; +sub Destroy; +sub Invert; +sub SaveAs; +sub ToClipboard; +sub ToGrayScale; +sub new; +} +package Win32::Job { +sub DESTROY; +sub kill; +sub new; +sub run; +sub spawn; +sub status; +sub watch; +} +package Win32::Job::_handle { +sub DESTROY; +} +package Win32::OLE { +sub DESTROY; +sub Dispatch; +sub EnumAllObjects; +sub Forward; +sub FreeUnusedLibraries; +sub GetActiveObject; +sub GetIDsOfNames; +sub GetObject; +sub GetTypeInfo; +sub Initialize; +sub MessageLoop; +sub QueryInterface; +sub QueryObjectType; +sub QuitMessageLoop; +sub SpinMessageLoop; +sub Uninitialize; +sub WithEvents; +sub _Unique; +sub new; +} +package Win32::OLE::Const { +sub _Constants; +sub _LoadRegTypeLib; +sub _ShowHelpContext; +sub _Typelibs; +} +package Win32::OLE::Enum { +sub All; +sub Clone; +sub DESTROY; +sub Next; +sub Reset; +sub Skip; +sub new; +} +package Win32::OLE::NLS { +sub CompareString; +sub GetLocaleInfo; +sub GetStringType; +sub GetSystemDefaultLCID; +sub GetSystemDefaultLangID; +sub GetUserDefaultLCID; +sub GetUserDefaultLangID; +sub LCMapString; +sub SendSettingChange; +sub SetLocaleInfo; +} +package Win32::OLE::Tie { +sub DESTROY; +sub FIRSTENUM; +sub FIRSTKEY; +sub Fetch; +sub NEXTENUM; +sub NEXTKEY; +sub Store; +} +package Win32::OLE::TypeInfo { +sub DESTROY; +sub GetContainingTypeLib; +sub _GetDocumentation; +sub _GetFuncDesc; +sub _GetImplTypeFlags; +sub _GetImplTypeInfo; +sub _GetNames; +sub _GetTypeAttr; +sub _GetVarDesc; +sub _new; +} +package Win32::OLE::TypeLib { +sub DESTROY; +sub GetTypeInfo; +sub _GetDocumentation; +sub _GetLibAttr; +sub _GetTypeInfo; +sub _GetTypeInfoCount; +sub new; +} +package Win32::OLE::Variant { +sub As; +sub ChangeType; +sub Copy; +sub Currency; +sub DESTROY; +sub Date; +sub Dim; +sub Get; +sub IsNothing; +sub IsNullString; +sub LastError; +sub Number; +sub Put; +sub Time; +sub Type; +sub Unicode; +sub Value; +sub _Clone; +sub _RefType; +sub _Value; +sub new; +} +package Win32::Pipe { +sub Info; +sub PipeBufferSize; +sub PipeClose; +sub PipeConnect; +sub PipeCreate; +sub PipeDisconnect; +sub PipeError; +sub PipeRead; +sub PipeResizeBuffer; +sub PipeWrite; +sub constant; +} +package Win32::Process { +sub Create; +sub DESTROY; +sub GetCurrentProcessID; +sub GetExitCode; +sub GetPriorityClass; +sub GetProcessAffinityMask; +sub GetProcessID; +sub Kill; +sub KillProcess; +sub Open; +sub Resume; +sub SetPriorityClass; +sub SetProcessAffinityMask; +sub Suspend; +sub Wait; +sub constant; +sub get_Win32_IPC_HANDLE; +sub get_process_handle; +} +package Win32::Service { +sub GetServices; +sub GetStatus; +sub PauseService; +sub ResumeService; +sub StartService; +sub StopService; +sub constant; +} +package Win32::UTCFileTime { +sub CLONE(;@) ; +sub _alt_stat($) ; +sub _get_utc_file_times($) ; +sub _set_error_mode($) ; +sub _set_utc_file_times($$$) ; +sub constant($) ; +} +package Win32::WinError { +sub constant; +} +package Win32API::File { +sub CloseHandle; +sub CopyFileA; +sub CopyFileW; +sub CreateFileA; +sub CreateFileW; +sub DefineDosDeviceA; +sub DefineDosDeviceW; +sub DeleteFileA; +sub DeleteFileW; +sub DeviceIoControl; +sub FdGetOsFHandle; +sub GetDriveTypeA; +sub GetDriveTypeW; +sub GetFileAttributesA; +sub GetFileAttributesW; +sub GetFileSize; +sub GetFileType; +sub GetHandleInformation; +sub GetLogicalDriveStringsA; +sub GetLogicalDriveStringsW; +sub GetLogicalDrives; +sub GetOverlappedResult; +sub GetStdHandle; +sub GetVolumeInformationA; +sub GetVolumeInformationW; +sub IsContainerPartition; +sub IsRecognizedPartition; +sub MoveFileA; +sub MoveFileExA; +sub MoveFileExW; +sub MoveFileW; +sub OsFHandleOpenFd; +sub QueryDosDeviceA; +sub QueryDosDeviceW; +sub ReadFile; +sub SetErrorMode; +sub SetFilePointer; +sub SetHandleInformation; +sub SetStdHandle; +sub WriteFile; +sub _fileLastError; +} +package Win32API::Registry { +sub AbortSystemShutdownA; +sub AbortSystemShutdownW; +sub AllowPriv; +sub InitiateSystemShutdownA; +sub InitiateSystemShutdownW; +sub RegCloseKey; +sub RegConnectRegistryA; +sub RegConnectRegistryW; +sub RegCreateKeyA; +sub RegCreateKeyExA; +sub RegCreateKeyExW; +sub RegCreateKeyW; +sub RegDeleteKeyA; +sub RegDeleteKeyW; +sub RegDeleteValueA; +sub RegDeleteValueW; +sub RegFlushKey; +sub RegLoadKeyA; +sub RegLoadKeyW; +sub RegNotifyChangeKeyValue; +sub RegOpenKeyA; +sub RegOpenKeyExA; +sub RegOpenKeyExW; +sub RegOpenKeyW; +sub RegReplaceKeyA; +sub RegReplaceKeyW; +sub RegRestoreKeyA; +sub RegRestoreKeyW; +sub RegSaveKeyA; +sub RegSaveKeyW; +sub RegSetKeySecurity; +sub RegUnLoadKeyA; +sub RegUnLoadKeyW; +sub _RegEnumKeyA; +sub _RegEnumKeyExA; +sub _RegEnumKeyExW; +sub _RegEnumKeyW; +sub _RegEnumValueA; +sub _RegEnumValueW; +sub _RegGetKeySecurity; +sub _RegQueryInfoKeyA; +sub _RegQueryInfoKeyW; +sub _RegQueryMultipleValuesA; +sub _RegQueryMultipleValuesW; +sub _RegQueryValueA; +sub _RegQueryValueExA; +sub _RegQueryValueExW; +sub _RegQueryValueW; +sub _RegSetValueA; +sub _RegSetValueExA; +sub _RegSetValueExW; +sub _RegSetValueW; +sub _regLastError; +} +package XML::LibXML { +sub AUTOLOAD; +sub DISABLE_THREAD_SUPPORT; +sub HAVE_READER; +sub HAVE_SCHEMAS; +sub HAVE_STRUCT_ERRORS; +sub HAVE_THREAD_SUPPORT; +sub INIT_THREAD_SUPPORT; +sub LIBXML_DOTTED_VERSION; +sub LIBXML_RUNTIME_VERSION; +sub LIBXML_VERSION; +sub _CLONE; +sub _default_catalog; +sub _dump_registry; +sub _end_push; +sub _end_sax_push; +sub _externalEntityLoader; +sub _leaked_nodes; +sub _parse_fh; +sub _parse_file; +sub _parse_html_fh; +sub _parse_html_file; +sub _parse_html_string; +sub _parse_sax_fh; +sub _parse_sax_file; +sub _parse_sax_string; +sub _parse_sax_xml_chunk; +sub _parse_string; +sub _parse_xml_chunk; +sub _processXIncludes; +sub _push; +sub _start_push; +sub decodeFromUTF8; +sub encodeToUTF8; +sub export_GDOME; +sub import_GDOME; +sub load_catalog; +} +package XML::LibXML::Attr { +sub _setNamespace; +sub getNextSibling; +sub getOwnerElement; +sub getParentNode; +sub getPreviousSibling; +sub getValue; +sub isId; +sub name; +sub new; +sub nextSibling; +sub ownerElement; +sub parentElement; +sub previousSibling; +sub serialize; +sub serializeContent; +sub setValue; +sub toString; +sub value; +} +package XML::LibXML::CDATASection { +sub new; +} +package XML::LibXML::Comment { +sub new; +} +package XML::LibXML::Common { +sub decodeFromUTF8; +sub encodeToUTF8; +} +package XML::LibXML::Devel { +sub fix_owner; +sub mem_used; +sub node_from_perl; +sub node_to_perl; +sub refcnt; +sub refcnt_dec; +sub refcnt_inc; +} +package XML::LibXML::Document { +sub URI; +sub _setDocumentElement; +sub _toString; +sub adoptNode; +sub cloneNode; +sub compression; +sub createAttribute; +sub createAttributeNS; +sub createCDATASection; +sub createComment; +sub createDTD; +sub createDocument; +sub createDocumentFragment; +sub createElement; +sub createElementNS; +sub createEntityReference; +sub createExternalSubset; +sub createInternalSubset; +sub createPI; +sub createProcessingInstruction; +sub createRawElement; +sub createRawElementNS; +sub createTextNode; +sub documentElement; +sub documentURI; +sub encoding; +sub externalSubset; +sub getDocumentElement; +sub getElementById; +sub getElementsById; +sub getEncoding; +sub getVersion; +sub importNode; +sub indexElements; +sub internalSubset; +sub is_valid; +sub new; +sub removeExternalSubset; +sub removeInternalSubset; +sub serialize_html; +sub setCompression; +sub setEncoding; +sub setExternalSubset; +sub setInternalSubset; +sub setStandalone; +sub setURI; +sub setVersion; +sub standalone; +sub toFH; +sub toFile; +sub toStringHTML; +sub validate; +sub version; +sub xmlEncoding; +sub xmlStandalone; +sub xmlVersion; +} +package XML::LibXML::DocumentFragment { +sub addNewChild; +sub appendText; +sub appendTextNode; +sub new; +} +package XML::LibXML::Dtd { +sub getPublicId; +sub getSystemId; +sub new; +sub parse_string; +sub parse_uri; +sub publicId; +sub systemId; +} +package XML::LibXML::Element { +sub _getAttribute; +sub _getAttributeNS; +sub _getNamespaceDeclURI; +sub _setAttribute; +sub _setAttributeNS; +sub _setNamespace; +sub addNewChild; +sub appendText; +sub appendTextChild; +sub appendTextNode; +sub blessed($) ; +sub getAttributeNode; +sub getAttributeNodeNS; +sub hasAttribute; +sub hasAttributeNS; +sub new; +sub removeAttribute; +sub removeAttributeNS; +sub removeAttributeNode; +sub setAttributeNode; +sub setAttributeNodeNS; +sub setNamespaceDeclPrefix; +sub setNamespaceDeclURI; +sub tagName; +} +package XML::LibXML::HashTable { +sub DESTROY; +sub new; +} +package XML::LibXML::InputCallback { +sub lib_cleanup_callbacks; +sub lib_init_callbacks; +} +package XML::LibXML::LibError { +sub code; +sub context_and_column; +sub domain; +sub file; +sub int1; +sub int2; +sub level; +sub line; +sub message; +sub num1; +sub num2; +sub str1; +sub str2; +sub str3; +} +package XML::LibXML::Namespace { +sub DESTROY; +sub _isEqual; +sub declaredPrefix; +sub declaredURI; +sub getData; +sub getLocalName; +sub getType; +sub getValue; +sub href; +sub localname; +sub new; +sub nodeType; +sub nodeValue; +sub unique_key; +sub value2; +sub value; +} +package XML::LibXML::Node { +sub DESTROY; +sub _attributes; +sub _childNodes; +sub _find; +sub _findnodes; +sub _getChildrenByTagNameNS; +sub _toStringC14N; +sub addChild; +sub addSibling; +sub appendChild; +sub baseURI; +sub cloneNode; +sub firstChild; +sub firstNonBlankChild; +sub getAttributes; +sub getChildnodes; +sub getData; +sub getFirstChild; +sub getLastChild; +sub getLocalName; +sub getName; +sub getNamespace; +sub getNamespaceURI; +sub getNamespaces; +sub getNextSibling; +sub getOwner; +sub getOwnerDocument; +sub getOwnerElement; +sub getParentNode; +sub getPrefix; +sub getPreviousSibling; +sub getType; +sub getValue; +sub hasAttributes; +sub hasChildNodes; +sub insertAfter; +sub insertBefore; +sub isEqual; +sub isSameNode; +sub lastChild; +sub line_number; +sub localNS; +sub localName; +sub localNamespace; +sub localname; +sub lookupNamespacePrefix; +sub lookupNamespaceURI; +sub namespaceURI; +sub namespaces; +sub nextNonBlankSibling; +sub nextSibling; +sub nodeName; +sub nodePath; +sub nodeType; +sub nodeValue; +sub normalize; +sub ownerDocument; +sub ownerNode; +sub parentNode; +sub prefix; +sub previousNonBlankSibling; +sub previousSibling; +sub removeChild; +sub removeChildNodes; +sub replaceChild; +sub replaceNode; +sub serialize; +sub setBaseURI; +sub setName; +sub setNodeName; +sub setRawName; +sub string_value; +sub textContent; +sub toString; +sub to_literal; +sub to_number; +sub unbindNode; +sub unique_key; +sub unlink; +sub unlinkNode; +} +package XML::LibXML::PI { +sub _setData; +} +package XML::LibXML::ParserContext { +sub DESTROY; +} +package XML::LibXML::Pattern { +sub DESTROY; +sub _compilePattern; +sub matchesNode; +} +package XML::LibXML::Reader { +sub _DESTROY; +sub _close; +sub _getParserProp; +sub _newForDOM; +sub _newForFd; +sub _newForFile; +sub _newForIO; +sub _newForString; +sub _nodePath; +sub _preservePattern; +sub _setParserProp; +sub _setRelaxNG; +sub _setRelaxNGFile; +sub _setXSD; +sub _setXSDFile; +sub attributeCount; +sub baseURI; +sub byteConsumed; +sub columnNumber; +sub copyCurrentNode; +sub depth; +sub document; +sub encoding; +sub finish; +sub getAttribute; +sub getAttributeHash; +sub getAttributeNo; +sub getAttributeNs; +sub hasAttributes; +sub hasValue; +sub isDefault; +sub isEmptyElement; +sub isNamespaceDecl; +sub isValid; +sub lineNumber; +sub localName; +sub lookupNamespace; +sub matchesPattern; +sub moveToAttribute; +sub moveToAttributeNo; +sub moveToAttributeNs; +sub moveToElement; +sub moveToFirstAttribute; +sub moveToNextAttribute; +sub name; +sub namespaceURI; +sub next; +sub nextElement; +sub nextPatternMatch; +sub nextSibling; +sub nextSiblingElement; +sub nodeType; +sub prefix; +sub preserveNode; +sub quoteChar; +sub read; +sub readAttributeValue; +sub readInnerXml; +sub readOuterXml; +sub readState; +sub skipSiblings; +sub standalone; +sub value; +sub xmlLang; +sub xmlVersion; +} +package XML::LibXML::RegExp { +sub DESTROY; +sub _compile; +sub isDeterministic; +sub matches; +} +package XML::LibXML::RelaxNG { +sub DESTROY; +sub parse_buffer; +sub parse_document; +sub parse_location; +sub validate; +} +package XML::LibXML::Schema { +sub DESTROY; +sub parse_buffer; +sub parse_location; +sub validate; +} +package XML::LibXML::Text { +sub appendData; +sub data; +sub deleteData; +sub insertData; +sub new; +sub replaceData; +sub setData; +sub substringData; +} +package XML::LibXML::XPathContext { +sub DESTROY; +sub _find; +sub _findnodes; +sub _free_node_pool; +sub getContextNode; +sub getContextPosition; +sub getContextSize; +sub getVarLookupData; +sub getVarLookupFunc; +sub lookupNs; +sub new; +sub registerFunctionNS; +sub registerNs; +sub registerVarLookupFunc; +sub setContextNode; +sub setContextPosition; +sub setContextSize; +} +package XML::LibXML::XPathExpression { +sub DESTROY; +sub new; +} +package XML::LibXSLT { +sub HAVE_EXSLT; +sub INIT_THREAD_SUPPORT; +sub LIBXSLT_DOTTED_VERSION; +sub LIBXSLT_RUNTIME_VERSION; +sub LIBXSLT_VERSION; +sub _parse_stylesheet; +sub _parse_stylesheet_file; +sub debug_callback; +sub decodeFromUTF8; +sub encodeToUTF8; +sub max_depth; +sub max_vars; +sub register_function; +sub xinclude_default; +} +package XML::LibXSLT::Stylesheet { +sub DESTROY; +sub _output_string; +sub media_type; +sub output_encoding; +sub output_fh; +sub output_file; +sub output_method; +sub transform; +sub transform_file; +} +package XML::LibXSLT::StylesheetWrapper { +sub decodeFromUTF8; +sub encodeToUTF8; +} +package XML::LibXSLT::TransformContext { +sub stylesheet; +} +package XML::Parser::Expat { +sub DefaultCurrent; +sub Do_External_Parse; +sub ElementIndex; +sub ErrorString; +sub FreeEncoding; +sub GenerateNSName; +sub GetBase; +sub GetCurrentByteIndex; +sub GetCurrentColumnNumber; +sub GetCurrentLineNumber; +sub GetErrorCode; +sub GetSpecifiedAttributeCount; +sub LoadEncoding; +sub OriginalString; +sub ParseDone; +sub ParsePartial; +sub ParseStream; +sub ParseString; +sub ParserCreate; +sub ParserFree; +sub ParserRelease; +sub PositionContext; +sub RecognizedString; +sub SetAttListDeclHandler; +sub SetBase; +sub SetCharacterDataHandler; +sub SetCommentHandler; +sub SetDefaultHandler; +sub SetDoctypeHandler; +sub SetElementDeclHandler; +sub SetEndCdataHandler; +sub SetEndDoctypeHandler; +sub SetEndElementHandler; +sub SetEntityDeclHandler; +sub SetExtEntFinishHandler; +sub SetExternalEntityRefHandler; +sub SetNotationDeclHandler; +sub SetProcessingInstructionHandler; +sub SetStartCdataHandler; +sub SetStartElementHandler; +sub SetUnparsedEntityDeclHandler; +sub SetXMLDeclHandler; +sub SkipUntil; +sub UnsetAllHandlers; +} +package YAML::XS::LibYAML { +sub Dump; +sub Load; +} +package attributes { +sub _fetch_attrs($) ; +sub _guess_stash($) ; +sub _modify_attrs; +sub reftype($) ; +} +package bytes { +sub chr(_) ; +sub index($$;$) ; +sub length(_) ; +sub ord(_) ; +sub rindex($$;$) ; +sub substr($$;$$) ; +} +package constant { +sub _make_const(\[$@]) ; +} +package mro { +sub _nextcan; +sub get_isarev($) ; +sub get_linear_isa($;$) ; +sub get_mro($) ; +sub get_pkg_gen($) ; +sub invalidate_all_method_caches() ; +sub is_universal($) ; +sub method_changed_in($) ; +sub set_mro($$) ; +} +package re { +sub install; +sub is_regexp($) ; +sub regexp_pattern($) ; +sub regmust($) ; +sub regname(;$$) ; +sub regnames(;$) ; +sub regnames_count() ; +} +package threads { +sub DESTROY; +sub _handle; +sub create; +sub detach; +sub equal; +sub error; +sub get_stack_size; +sub is_detached; +sub is_joinable; +sub is_running; +sub join; +sub kill; +sub list; +sub new; +sub object; +sub self; +sub set_stack_size; +sub set_thread_exit_only; +sub tid; +sub wantarray; +sub yield; +} +package threads::shared { +sub _id(\[$@%]) ; +sub _refcnt(\[$@%]) ; +sub bless($;$) ; +sub blessed($) ; +sub cond_broadcast(\[$@%]) ; +sub cond_signal(\[$@%]) ; +sub cond_timedwait(\[$@%]$;\[$@%]) ; +sub cond_wait(\[$@%];\[$@%]) ; +sub is_shared(\[$@%]) ; +sub refaddr($) ; +sub reftype($) ; +sub share(\[$@%]) ; +} +package threads::shared::tie { +sub EXISTS; +sub EXTEND; +sub FIRSTKEY; +sub NEXTKEY; +sub POP; +sub PUSH; +sub SHIFT; +sub STORESIZE; +sub UNSHIFT; +} +package utf8 { +sub decode; +sub downgrade; +sub encode; +sub is_utf8; +sub native_to_unicode; +sub unicode_to_native; +sub upgrade; +sub valid; +} +package version { +sub _VERSION; +sub boolean; +sub declare; +sub is_alpha; +sub is_qv; +sub new; +sub noop; +sub normal; +sub numify; +sub parse; +sub qv; +sub stringify; +sub vcmp; +} diff --git a/include/international_string_util.h b/include/international_string_util.h deleted file mode 100644 index 2b922676d..000000000 --- a/include/international_string_util.h +++ /dev/null @@ -1,25 +0,0 @@ -#ifndef GUARD_INTERNATIONAL_STRING_UTIL_H -#define GUARD_INTERNATIONAL_STRING_UTIL_H - -#include "global.h" - -#include "menu.h" - -void sub_81DB52C(const u8 *src); -void TVShowConvertInternationalString(u8 *dest, const u8 *src, u8 language); -s32 GetStringCenterAlignXOffset(s32 fontId, const u8 *str, s32 totalWidth); -s32 GetStringRightAlignXOffset(s32 fontId, const u8 *str, s32 totalWidth); -s32 GetStringCenterAlignXOffsetWithLetterSpacing(s32 fontId, const u8 *str, s32 totalWidth, s32 letterSpacing); -s32 GetStringWidthDifference(s32 fontId, const u8 *str, s32 totalWidth, s32 letterSpacing); -s32 GetMaxWidthInMenuTable(const struct MenuAction *str, s32 arg1); -s32 sub_81DB3D8(const struct MenuAction *str, u8* arg1, s32 arg2); -// sub_81DB41C -// CopyMonCategoryText -// sub_81DB494 -// sub_81DB4DC -// sub_81DB554 -// sub_81DB5AC -u32 sub_81DB604(const u8 *); -// sub_81DB620 - -#endif // GUARD_INTERNATIONAL_STRING_UTIL_H diff --git a/src/battle_main.c b/src/battle_main.c index 1b1614a5a..9104bc381 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -20,7 +20,6 @@ #include "graphics.h" #include "gpu_regs.h" #include "help_system.h" -#include "international_string_util.h" #include "item.h" #include "link.h" #include "link_rfu.h" diff --git a/src/daycare.c b/src/daycare.c index c016bbc38..f034bc220 100644 --- a/src/daycare.c +++ b/src/daycare.c @@ -14,7 +14,6 @@ #include "text.h" #include "menu.h" #include "new_menu_helpers.h" -#include "international_string_util.h" #include "script.h" #include "strings.h" #include "task.h" @@ -24,25 +23,18 @@ #include "overworld.h" #include "pokedex.h" #include "decompress.h" -#include "task.h" #include "palette.h" -#include "main.h" #include "sound.h" #include "constants/songs.h" #include "text_window.h" #include "trig.h" #include "malloc.h" -#include "dma3.h" #include "gpu_regs.h" #include "bg.h" #include "m4a.h" #include "graphics.h" -#include "constants/abilities.h" -#include "constants/species.h" #include "scanline_effect.h" -#include "field_weather.h" #include "naming_screen.h" -#include "field_screen_effect.h" #include "help_system.h" #include "field_fadetransition.h" -- cgit v1.2.3 From 4c5e645e90fbbcc902346404fefef38d1c1ddbf3 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 29 Oct 2019 11:02:57 -0400 Subject: trade port through sub_804FA14 --- asm/trade.s | 1499 ------------------------------------------------ include/graphics.h | 1 + include/pokemon_icon.h | 1 + src/trade.c | 508 +++++++++++++++- 4 files changed, 507 insertions(+), 1502 deletions(-) diff --git a/asm/trade.s b/asm/trade.s index b77be0074..80d527445 100644 --- a/asm/trade.s +++ b/asm/trade.s @@ -5,1505 +5,6 @@ .text - thumb_func_start sub_804EFB4 -sub_804EFB4: @ 804EFB4 - push {r4-r6,lr} - sub sp, 0xC - adds r4, r1, 0 - adds r6, r2, 0 - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 1 - adds r1, r0 - lsls r1, 1 - adds r1, 0x2 - lsls r4, 24 - asrs r4, 24 - adds r4, r1 - lsls r4, 24 - lsrs r4, 24 - movs r5, 0 - movs r0, 0 - movs r1, 0x2 - bl GetFontAttribute - adds r2, r0, 0 - lsls r2, 24 - lsrs r2, 24 - movs r0, 0 - adds r1, r6, 0 - bl GetStringWidth - movs r2, 0x40 - subs r2, r0 - lsrs r2, 1 - lsls r2, 24 - lsrs r2, 24 - ldr r0, _0804F01C @ =gUnknown_8261F18 - str r0, [sp] - str r5, [sp, 0x4] - str r6, [sp, 0x8] - adds r0, r4, 0 - movs r1, 0 - movs r3, 0x4 - bl AddTextPrinterParameterized3 - adds r0, r4, 0 - bl PutWindowTilemap - adds r0, r4, 0 - movs r1, 0x3 - bl CopyWindowToVram - add sp, 0xC - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0804F01C: .4byte gUnknown_8261F18 - thumb_func_end sub_804EFB4 - - thumb_func_start sub_804F020 -sub_804F020: @ 804F020 - push {r4-r7,lr} - sub sp, 0x34 - lsls r0, 24 - lsrs r6, r0, 24 - ldr r7, _0804F080 @ =gEnemyParty - cmp r6, 0 - bne _0804F030 - ldr r7, _0804F084 @ =gPlayerParty -_0804F030: - movs r4, 0 - ldr r0, _0804F088 @ =gUnknown_2031DA8 - ldr r0, [r0] - adds r0, 0x36 - adds r0, r6 - ldrb r0, [r0] - cmp r4, r0 - bcs _0804F076 - add r5, sp, 0x14 -_0804F042: - movs r0, 0x64 - muls r0, r4 - adds r0, r7, r0 - movs r1, 0x2 - mov r2, sp - bl GetMonData - adds r0, r5, 0 - mov r1, sp - bl StringCopy10 - adds r0, r6, 0 - adds r1, r4, 0 - adds r2, r5, 0 - bl sub_804EFB4 - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _0804F088 @ =gUnknown_2031DA8 - ldr r0, [r0] - adds r0, 0x36 - adds r0, r6 - ldrb r0, [r0] - cmp r4, r0 - bcc _0804F042 -_0804F076: - add sp, 0x34 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0804F080: .4byte gEnemyParty -_0804F084: .4byte gPlayerParty -_0804F088: .4byte gUnknown_2031DA8 - thumb_func_end sub_804F020 - - thumb_func_start sub_804F08C -sub_804F08C: @ 804F08C - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x1C - ldr r4, [sp, 0x3C] - ldr r5, [sp, 0x40] - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - lsls r1, 24 - lsrs r7, r1, 24 - lsls r2, 24 - lsrs r2, 24 - mov r9, r2 - lsls r3, 24 - lsrs r3, 24 - mov r10, r3 - lsls r4, 24 - lsrs r4, 24 - lsls r5, 24 - lsrs r5, 24 - ldr r1, _0804F0E8 @ =gUnknown_8E9F1FC - movs r0, 0x6 - str r0, [sp] - movs r0, 0x3 - str r0, [sp, 0x4] - movs r0, 0 - str r0, [sp, 0x8] - movs r0, 0x1 - adds r2, r4, 0 - adds r3, r5, 0 - bl CopyToBgTilemapBufferRect_ChangePalette - movs r0, 0x1 - bl CopyBgTilemapBufferToVram - mov r0, r8 - cmp r0, 0 - bne _0804F0F0 - movs r0, 0x64 - muls r0, r7 - ldr r1, _0804F0EC @ =gPlayerParty - b _0804F0F6 - .align 2, 0 -_0804F0E8: .4byte gUnknown_8E9F1FC -_0804F0EC: .4byte gPlayerParty -_0804F0F0: - movs r0, 0x64 - muls r0, r7 - ldr r1, _0804F16C @ =gEnemyParty -_0804F0F6: - adds r0, r1 - movs r1, 0x38 - movs r2, 0 - bl GetMonData - lsls r0, 24 - lsrs r6, r0, 24 - ldr r4, _0804F170 @ =gUnknown_2031DA8 - ldr r5, [r4] - mov r1, r8 - lsls r2, r1, 1 - adds r1, r2, r1 - lsls r1, 1 - adds r1, r7, r1 - adds r0, r5, 0 - adds r0, 0x51 - adds r0, r1 - ldrb r0, [r0] - str r2, [sp, 0x18] - cmp r0, 0 - bne _0804F174 - adds r0, r6, 0 - movs r1, 0xA - bl __udivsi3 - lsls r0, 24 - lsrs r2, r0, 24 - mov r0, r10 - lsls r3, r0, 5 - cmp r2, 0 - beq _0804F148 - mov r1, r9 - adds r0, r1, r3 - lsls r0, 1 - movs r1, 0x8F - lsls r1, 4 - adds r5, r1 - adds r1, r5, r0 - adds r0, r2, 0 - adds r0, 0x60 - strh r0, [r1] -_0804F148: - ldr r4, [r4] - mov r1, r9 - adds r0, r1, r3 - adds r0, 0x1 - lsls r0, 1 - movs r3, 0x8F - lsls r3, 4 - adds r4, r3 - adds r4, r0 - adds r0, r6, 0 - movs r1, 0xA - bl __umodsi3 - lsls r0, 24 - lsrs r0, 24 - adds r0, 0x70 - strh r0, [r4] - b _0804F1B2 - .align 2, 0 -_0804F16C: .4byte gEnemyParty -_0804F170: .4byte gUnknown_2031DA8 -_0804F174: - mov r1, r10 - lsls r0, r1, 5 - mov r1, r9 - adds r3, r1, r0 - adds r1, r3, 0 - subs r1, 0x20 - lsls r1, 1 - movs r0, 0x8F - lsls r0, 4 - adds r2, r5, r0 - adds r1, r2, r1 - adds r0, r3, 0 - subs r0, 0x21 - lsls r0, 1 - adds r0, r2, r0 - ldrh r0, [r0] - strh r0, [r1] - adds r1, r3, 0 - subs r1, 0x1F - lsls r1, 1 - adds r1, r2, r1 - adds r0, r3, 0 - subs r0, 0x24 - lsls r0, 1 - adds r2, r0 - ldrh r2, [r2] - movs r3, 0x80 - lsls r3, 3 - adds r0, r3, 0 - orrs r0, r2 - strh r0, [r1] -_0804F1B2: - ldr r0, _0804F1D0 @ =gUnknown_2031DA8 - ldr r1, [r0] - ldr r0, [sp, 0x18] - add r0, r8 - lsls r0, 1 - adds r0, r7, r0 - adds r1, 0x51 - adds r1, r0 - ldrb r0, [r1] - cmp r0, 0 - beq _0804F1D4 - movs r2, 0x90 - lsls r2, 3 - b _0804F256 - .align 2, 0 -_0804F1D0: .4byte gUnknown_2031DA8 -_0804F1D4: - mov r0, r8 - cmp r0, 0 - bne _0804F200 - movs r0, 0x64 - adds r4, r7, 0 - muls r4, r0 - ldr r0, _0804F1FC @ =gPlayerParty - adds r4, r0 - adds r0, r4, 0 - bl GetMonGender - lsls r0, 24 - lsrs r5, r0, 24 - adds r0, r4, 0 - movs r1, 0x2 - add r2, sp, 0xC - bl GetMonData - b _0804F21E - .align 2, 0 -_0804F1FC: .4byte gPlayerParty -_0804F200: - movs r0, 0x64 - adds r4, r7, 0 - muls r4, r0 - ldr r0, _0804F22C @ =gEnemyParty - adds r4, r0 - adds r0, r4, 0 - bl GetMonGender - lsls r0, 24 - lsrs r5, r0, 24 - adds r0, r4, 0 - movs r1, 0x2 - add r2, sp, 0xC - bl GetMonData -_0804F21E: - cmp r5, 0 - beq _0804F230 - cmp r5, 0xFE - beq _0804F244 - movs r2, 0x83 - b _0804F256 - .align 2, 0 -_0804F22C: .4byte gEnemyParty -_0804F230: - add r0, sp, 0xC - movs r1, 0 - bl NameHasGenderSymbol - lsls r0, 24 - movs r2, 0x83 - cmp r0, 0 - bne _0804F256 - movs r2, 0x84 - b _0804F256 -_0804F244: - add r0, sp, 0xC - movs r1, 0xFE - bl NameHasGenderSymbol - lsls r0, 24 - movs r2, 0x83 - cmp r0, 0 - bne _0804F256 - movs r2, 0x85 -_0804F256: - ldr r0, _0804F280 @ =gUnknown_2031DA8 - ldr r1, [r0] - mov r0, r10 - subs r0, 0x1 - lsls r0, 5 - add r0, r9 - adds r0, 0x1 - lsls r0, 1 - movs r3, 0x8F - lsls r3, 4 - adds r1, r3 - adds r1, r0 - strh r2, [r1] - add sp, 0x1C - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0804F280: .4byte gUnknown_2031DA8 - thumb_func_end sub_804F08C - - thumb_func_start sub_804F284 -sub_804F284: @ 804F284 - push {r4-r7,lr} - sub sp, 0x8 - lsls r0, 24 - lsrs r6, r0, 24 - movs r7, 0 - ldr r0, _0804F2DC @ =gUnknown_2031DA8 - ldr r0, [r0] - adds r0, 0x36 - adds r0, r6 - ldrb r0, [r0] - cmp r7, r0 - bge _0804F2D4 - lsls r0, r6, 1 - adds r0, r6 - ldr r1, _0804F2E0 @ =gUnknown_8261E5A - lsls r0, 2 - adds r5, r0, r1 - ldr r1, _0804F2E4 @ =gUnknown_8261E72 - adds r4, r0, r1 -_0804F2AA: - lsls r1, r7, 24 - lsrs r1, 24 - ldrb r2, [r5] - ldrb r3, [r5, 0x1] - ldrb r0, [r4] - str r0, [sp] - ldrb r0, [r4, 0x1] - str r0, [sp, 0x4] - adds r0, r6, 0 - bl sub_804F08C - adds r5, 0x2 - adds r4, 0x2 - adds r7, 0x1 - ldr r0, _0804F2DC @ =gUnknown_2031DA8 - ldr r0, [r0] - adds r0, 0x36 - adds r0, r6 - ldrb r0, [r0] - cmp r7, r0 - blt _0804F2AA -_0804F2D4: - add sp, 0x8 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0804F2DC: .4byte gUnknown_2031DA8 -_0804F2E0: .4byte gUnknown_8261E5A -_0804F2E4: .4byte gUnknown_8261E72 - thumb_func_end sub_804F284 - - thumb_func_start sub_804F2E8 -sub_804F2E8: @ 804F2E8 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - lsls r0, 24 - lsrs r0, 24 - mov r12, r0 - movs r7, 0 - ldr r3, _0804F3A8 @ =gUnknown_2031DA8 - ldr r0, [r3] - adds r0, 0x36 - add r0, r12 - ldrb r0, [r0] - cmp r7, r0 - bge _0804F39A - ldr r6, _0804F3AC @ =gSprites - mov r9, r3 - mov r1, r12 - lsls r0, r1, 1 - add r0, r12 - lsls r2, r0, 1 - mov r10, r2 - ldr r1, _0804F3B0 @ =gTradeMonSpriteCoords - movs r2, 0 - mov r8, r2 - lsls r0, 2 - adds r5, r0, r1 -_0804F320: - mov r1, r9 - ldr r0, [r1] - mov r2, r10 - adds r4, r7, r2 - adds r0, 0x28 - adds r0, r4 - ldrb r0, [r0] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r6 - adds r1, 0x3E - ldrb r2, [r1] - movs r0, 0x5 - negs r0, r0 - ands r0, r2 - strb r0, [r1] - mov r0, r9 - ldr r3, [r0] - adds r2, r3, 0 - adds r2, 0x28 - adds r2, r4 - ldrb r0, [r2] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r6 - ldrb r0, [r5] - lsls r0, 3 - adds r0, 0xE - strh r0, [r1, 0x20] - ldrb r0, [r2] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r6 - ldrb r0, [r5, 0x1] - lsls r0, 3 - subs r0, 0xC - strh r0, [r1, 0x22] - ldrb r1, [r2] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r6 - mov r1, r8 - strh r1, [r0, 0x24] - ldrb r1, [r2] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r6 - mov r2, r8 - strh r2, [r0, 0x26] - adds r5, 0x2 - adds r7, 0x1 - adds r3, 0x36 - add r3, r12 - ldrb r3, [r3] - cmp r7, r3 - blt _0804F320 -_0804F39A: - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0804F3A8: .4byte gUnknown_2031DA8 -_0804F3AC: .4byte gSprites -_0804F3B0: .4byte gTradeMonSpriteCoords - thumb_func_end sub_804F2E8 - - thumb_func_start sub_804F3B4 -sub_804F3B4: @ 804F3B4 - push {lr} - movs r0, 0x1 - bl rbox_fill_rectangle - movs r0, 0x1 - bl sub_804F020 - pop {r0} - bx r0 - thumb_func_end sub_804F3B4 - - thumb_func_start sub_804F3C8 -sub_804F3C8: @ 804F3C8 - push {r4-r6,lr} - sub sp, 0xC - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r1, _0804F430 @ =gTradePartyBoxTilemap - lsls r2, r4, 4 - subs r2, r4 - lsls r2, 24 - lsrs r2, 24 - movs r0, 0xF - str r0, [sp] - movs r0, 0x11 - str r0, [sp, 0x4] - movs r6, 0 - str r6, [sp, 0x8] - movs r0, 0x1 - movs r3, 0 - bl CopyToBgTilemapBufferRect_ChangePalette - movs r0, 0x1 - bl CopyBgTilemapBufferToVram - adds r0, r4, 0 - bl sub_804F284 - adds r0, r4, 0 - bl sub_804F020 - adds r0, r4, 0 - bl sub_804F2E8 - ldr r0, _0804F434 @ =gUnknown_8261ECC - ldr r0, [r0, 0x4] - ldr r5, _0804F438 @ =gUnknown_2031DA8 - ldr r1, [r5] - adds r1, 0x72 - ldrh r1, [r1] - lsls r1, 5 - ldr r2, _0804F43C @ =0x06010000 - adds r1, r2 - movs r2, 0x18 - bl sub_804F728 - ldr r0, [r5] - adds r0, 0x74 - adds r0, r4 - strb r6, [r0] - add sp, 0xC - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0804F430: .4byte gTradePartyBoxTilemap -_0804F434: .4byte gUnknown_8261ECC -_0804F438: .4byte gUnknown_2031DA8 -_0804F43C: .4byte 0x06010000 - thumb_func_end sub_804F3C8 - - thumb_func_start sub_804F440 -sub_804F440: @ 804F440 - push {lr} - sub sp, 0x8 - movs r0, 0x1E - str r0, [sp] - movs r0, 0x14 - str r0, [sp, 0x4] - movs r0, 0 - movs r1, 0 - movs r2, 0 - movs r3, 0 - bl FillBgTilemapBufferRect_Palette0 - movs r0, 0 - bl CopyBgTilemapBufferToVram - add sp, 0x8 - pop {r0} - bx r0 - thumb_func_end sub_804F440 - - thumb_func_start sub_804F464 -sub_804F464: @ 804F464 - push {lr} - sub sp, 0x8 - movs r0, 0x1E - str r0, [sp] - movs r0, 0x14 - str r0, [sp, 0x4] - movs r0, 0 - movs r1, 0 - movs r2, 0 - movs r3, 0 - bl FillBgTilemapBufferRect_Palette0 - movs r0, 0 - bl CopyBgTilemapBufferToVram - add sp, 0x8 - pop {r0} - bx r0 - thumb_func_end sub_804F464 - - thumb_func_start sub_804F488 -sub_804F488: @ 804F488 - push {r4-r7,lr} - lsls r0, 16 - lsrs r5, r0, 16 - lsls r1, 24 - lsrs r6, r1, 24 - movs r3, 0 - ldr r4, _0804F4C8 @ =gUnknown_2031DA8 - mov r12, r4 - movs r7, 0x8D - lsls r7, 4 -_0804F49C: - mov r1, r12 - ldr r0, [r1] - lsls r1, r3, 3 - adds r2, r0, r1 - adds r0, r2, r7 - ldrb r0, [r0] - cmp r0, 0 - bne _0804F4D0 - ldr r3, _0804F4CC @ =0x000008d2 - adds r0, r2, r3 - strh r5, [r0] - adds r3, 0x2 - adds r0, r2, r3 - strb r6, [r0] - ldr r0, [r4] - adds r0, r1 - movs r1, 0x8D - lsls r1, 4 - adds r0, r1 - movs r1, 0x1 - strb r1, [r0] - b _0804F4D6 - .align 2, 0 -_0804F4C8: .4byte gUnknown_2031DA8 -_0804F4CC: .4byte 0x000008d2 -_0804F4D0: - adds r3, 0x1 - cmp r3, 0x3 - ble _0804F49C -_0804F4D6: - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_804F488 - - thumb_func_start sub_804F4DC -sub_804F4DC: @ 804F4DC - push {r4,r5,lr} - movs r4, 0 - ldr r3, _0804F508 @ =gUnknown_2031DA8 -_0804F4E2: - ldr r0, [r3] - lsls r1, r4, 3 - adds r2, r0, r1 - movs r5, 0x8D - lsls r5, 4 - adds r0, r2, r5 - ldrb r0, [r0] - adds r5, r1, 0 - cmp r0, 0 - beq _0804F5AC - ldr r0, _0804F50C @ =0x000008d2 - adds r1, r2, r0 - ldrh r0, [r1] - cmp r0, 0 - beq _0804F510 - subs r0, 0x1 - strh r0, [r1] - b _0804F5AC - .align 2, 0 -_0804F508: .4byte gUnknown_2031DA8 -_0804F50C: .4byte 0x000008d2 -_0804F510: - ldr r1, _0804F524 @ =0x000008d4 - adds r0, r2, r1 - ldrb r0, [r0] - cmp r0, 0x8 - bhi _0804F59A - lsls r0, 2 - ldr r1, _0804F528 @ =_0804F52C - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0804F524: .4byte 0x000008d4 -_0804F528: .4byte _0804F52C - .align 2, 0 -_0804F52C: - .4byte _0804F550 - .4byte _0804F56C - .4byte _0804F574 - .4byte _0804F57C - .4byte _0804F57C - .4byte _0804F57C - .4byte _0804F584 - .4byte _0804F58C - .4byte _0804F594 -_0804F550: - bl bitmask_all_link_players_but_self - lsls r0, 24 - lsrs r0, 24 - ldr r1, _0804F568 @ =gUnknown_2031DA8 - ldr r1, [r1] - adds r1, 0x80 - movs r2, 0x14 - bl SendBlock - b _0804F59A - .align 2, 0 -_0804F568: .4byte gUnknown_2031DA8 -_0804F56C: - movs r0, 0 - bl sub_804F5BC - b _0804F59A -_0804F574: - movs r0, 0x2 - bl sub_804F5BC - b _0804F59A -_0804F57C: - movs r0, 0x3 - bl sub_804F5BC - b _0804F59A -_0804F584: - movs r0, 0x6 - bl sub_804F5BC - b _0804F59A -_0804F58C: - movs r0, 0x7 - bl sub_804F5BC - b _0804F59A -_0804F594: - movs r0, 0x8 - bl sub_804F5BC -_0804F59A: - ldr r0, _0804F5B8 @ =gUnknown_2031DA8 - ldr r1, [r0] - adds r1, r5 - movs r2, 0x8D - lsls r2, 4 - adds r1, r2 - movs r2, 0 - strb r2, [r1] - adds r3, r0, 0 -_0804F5AC: - adds r4, 0x1 - cmp r4, 0x3 - ble _0804F4E2 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0804F5B8: .4byte gUnknown_2031DA8 - thumb_func_end sub_804F4DC - - thumb_func_start sub_804F5BC -sub_804F5BC: @ 804F5BC - push {r4,lr} - sub sp, 0xC - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - movs r0, 0 - movs r1, 0x11 - bl FillWindowPixelBuffer - ldr r0, _0804F60C @ =gUnknown_8261EF4 - lsls r4, 2 - adds r4, r0 - ldr r2, [r4] - movs r0, 0x2 - str r0, [sp] - movs r0, 0xFF - str r0, [sp, 0x4] - movs r0, 0 - str r0, [sp, 0x8] - movs r1, 0x3 - movs r3, 0 - bl AddTextPrinterParameterized - movs r0, 0 - movs r1, 0x14 - movs r2, 0xC - bl DrawTextBorderOuter - movs r0, 0 - bl PutWindowTilemap - movs r0, 0 - movs r1, 0x3 - bl CopyWindowToVram - add sp, 0xC - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0804F60C: .4byte gUnknown_8261EF4 - thumb_func_end sub_804F5BC - - thumb_func_start sub_804F610 -sub_804F610: @ 804F610 - push {r4,lr} - sub sp, 0x8 - ldr r0, _0804F660 @ =gUnknown_2031DA8 - ldr r1, [r0] - adds r3, r1, 0 - adds r3, 0xA8 - ldrb r1, [r3] - adds r4, r0, 0 - cmp r1, 0xD - bhi _0804F64C - ldr r1, _0804F664 @ =gUnknown_2031C94 - ldrb r0, [r3] - lsls r0, 2 - adds r0, r1 - ldr r0, [r0] - str r0, [sp] - ldr r0, _0804F668 @ =0xffff0000 - ldr r2, [sp, 0x4] - ands r2, r0 - movs r0, 0x80 - lsls r0, 1 - orrs r2, r0 - str r2, [sp, 0x4] - ldrb r1, [r3] - adds r1, 0xC8 - lsls r1, 16 - ldr r0, _0804F66C @ =0x0000ffff - ands r0, r2 - orrs r0, r1 - str r0, [sp, 0x4] -_0804F64C: - ldr r0, [r4] - adds r0, 0xA8 - ldrb r0, [r0] - cmp r0, 0x11 - bhi _0804F71C - lsls r0, 2 - ldr r1, _0804F670 @ =_0804F674 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0804F660: .4byte gUnknown_2031DA8 -_0804F664: .4byte gUnknown_2031C94 -_0804F668: .4byte 0xffff0000 -_0804F66C: .4byte 0x0000ffff -_0804F670: .4byte _0804F674 - .align 2, 0 -_0804F674: - .4byte _0804F6BC - .4byte _0804F6BC - .4byte _0804F6BC - .4byte _0804F6BC - .4byte _0804F6BC - .4byte _0804F6BC - .4byte _0804F6BC - .4byte _0804F6BC - .4byte _0804F6C0 - .4byte _0804F6D8 - .4byte _0804F6D8 - .4byte _0804F6D8 - .4byte _0804F6D8 - .4byte _0804F6D8 - .4byte _0804F6DC - .4byte _0804F6E8 - .4byte _0804F6F4 - .4byte _0804F710 -_0804F6BC: - mov r0, sp - b _0804F6F6 -_0804F6C0: - mov r0, sp - bl LoadSpriteSheet - ldr r1, _0804F6D4 @ =gUnknown_2031DA8 - ldr r1, [r1] - adds r2, r1, 0 - adds r2, 0x72 - strh r0, [r2] - b _0804F6FE - .align 2, 0 -_0804F6D4: .4byte gUnknown_2031DA8 -_0804F6D8: - mov r0, sp - b _0804F6F6 -_0804F6DC: - ldr r0, _0804F6E4 @ =gUnknown_8261D00 - bl LoadSpritePalette - b _0804F6FA - .align 2, 0 -_0804F6E4: .4byte gUnknown_8261D00 -_0804F6E8: - ldr r0, _0804F6F0 @ =gUnknown_8261C60 - bl LoadSpritePalette - b _0804F6FA - .align 2, 0 -_0804F6F0: .4byte gUnknown_8261C60 -_0804F6F4: - ldr r0, _0804F708 @ =gUnknown_8261C58 -_0804F6F6: - bl LoadSpriteSheet -_0804F6FA: - ldr r0, _0804F70C @ =gUnknown_2031DA8 - ldr r1, [r0] -_0804F6FE: - adds r1, 0xA8 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - b _0804F71C - .align 2, 0 -_0804F708: .4byte gUnknown_8261C58 -_0804F70C: .4byte gUnknown_2031DA8 -_0804F710: - ldr r0, [r4] - adds r0, 0xA8 - movs r1, 0 - strb r1, [r0] - movs r0, 0x1 - b _0804F71E -_0804F71C: - movs r0, 0 -_0804F71E: - add sp, 0x8 - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_804F610 - - thumb_func_start sub_804F728 -sub_804F728: @ 804F728 - push {lr} - sub sp, 0x8 - ldr r2, _0804F744 @ =gDecompressionBuffer - str r2, [sp] - movs r2, 0x6 - str r2, [sp, 0x4] - movs r2, 0 - movs r3, 0 - bl sub_808BEB4 - add sp, 0x8 - pop {r0} - bx r0 - .align 2, 0 -_0804F744: .4byte gDecompressionBuffer - thumb_func_end sub_804F728 - - thumb_func_start sub_804F748 -sub_804F748: @ 804F748 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - cmp r0, 0 - beq _0804F760 - cmp r0, 0x1 - beq _0804F7F4 - b _0804F880 -_0804F760: - movs r7, 0 - ldr r1, _0804F7A0 @ =gUnknown_2031DA8 - ldr r0, [r1] - adds r0, 0x36 - ldrb r0, [r0] - cmp r7, r0 - blt _0804F770 - b _0804F880 -_0804F770: - adds r6, r1, 0 - movs r5, 0 - mov r9, r5 -_0804F776: - movs r0, 0x64 - adds r1, r7, 0 - muls r1, r0 - ldr r0, _0804F7A4 @ =gPlayerParty - adds r4, r1, r0 - adds r0, r4, 0 - movs r1, 0x2D - bl GetMonData - adds r1, r0, 0 - cmp r1, 0x1 - bne _0804F7A8 - ldr r0, [r6] - adds r0, 0x45 - adds r0, r5 - mov r2, r9 - strb r2, [r0] - ldr r0, [r6] - adds r0, 0x51 - adds r0, r5 - b _0804F7D8 - .align 2, 0 -_0804F7A0: .4byte gUnknown_2031DA8 -_0804F7A4: .4byte gPlayerParty -_0804F7A8: - adds r0, r4, 0 - movs r1, 0x39 - bl GetMonData - adds r1, r0, 0 - cmp r1, 0 - bne _0804F7C6 - ldr r0, [r6] - adds r0, 0x45 - adds r0, r5 - strb r1, [r0] - ldr r0, [r6] - adds r0, 0x51 - adds r0, r5 - b _0804F7D8 -_0804F7C6: - ldr r0, [r6] - adds r0, 0x45 - adds r0, r5 - movs r1, 0x1 - strb r1, [r0] - ldr r0, [r6] - adds r0, 0x51 - adds r0, r5 - mov r1, r9 -_0804F7D8: - strb r1, [r0] - ldr r0, _0804F7F0 @ =gUnknown_2031DA8 - adds r5, 0x1 - adds r7, 0x1 - ldr r0, [r0] - adds r0, 0x36 - add r0, r8 - ldrb r0, [r0] - cmp r7, r0 - blt _0804F776 - b _0804F880 - .align 2, 0 -_0804F7F0: .4byte gUnknown_2031DA8 -_0804F7F4: - movs r7, 0 - ldr r1, _0804F834 @ =gUnknown_2031DA8 - ldr r0, [r1] - adds r0, 0x37 - ldrb r0, [r0] - cmp r7, r0 - bge _0804F880 - adds r6, r1, 0 - movs r5, 0x6 - movs r2, 0 - mov r9, r2 -_0804F80A: - movs r0, 0x64 - adds r1, r7, 0 - muls r1, r0 - ldr r0, _0804F838 @ =gEnemyParty - adds r4, r1, r0 - adds r0, r4, 0 - movs r1, 0x2D - bl GetMonData - adds r1, r0, 0 - cmp r1, 0x1 - bne _0804F83C - ldr r0, [r6] - adds r0, 0x45 - adds r0, r5 - mov r2, r9 - strb r2, [r0] - ldr r0, [r6] - adds r0, 0x51 - adds r0, r5 - b _0804F86C - .align 2, 0 -_0804F834: .4byte gUnknown_2031DA8 -_0804F838: .4byte gEnemyParty -_0804F83C: - adds r0, r4, 0 - movs r1, 0x39 - bl GetMonData - adds r1, r0, 0 - cmp r1, 0 - bne _0804F85A - ldr r0, [r6] - adds r0, 0x45 - adds r0, r5 - strb r1, [r0] - ldr r0, [r6] - adds r0, 0x51 - adds r0, r5 - b _0804F86C -_0804F85A: - ldr r0, [r6] - adds r0, 0x45 - adds r0, r5 - movs r1, 0x1 - strb r1, [r0] - ldr r0, [r6] - adds r0, 0x51 - adds r0, r5 - mov r1, r9 -_0804F86C: - strb r1, [r0] - ldr r0, _0804F88C @ =gUnknown_2031DA8 - adds r5, 0x1 - adds r7, 0x1 - ldr r0, [r0] - adds r0, 0x36 - add r0, r8 - ldrb r0, [r0] - cmp r7, r0 - blt _0804F80A -_0804F880: - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0804F88C: .4byte gUnknown_2031DA8 - thumb_func_end sub_804F748 - - thumb_func_start sub_804F890 -sub_804F890: @ 804F890 - push {r4-r7,lr} - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0 - beq _0804F8A0 - cmp r0, 0x1 - beq _0804F900 - b _0804F954 -_0804F8A0: - movs r6, 0 - ldr r1, _0804F8F8 @ =gUnknown_2031DA8 - ldr r0, [r1] - adds r0, 0x36 - ldrb r0, [r0] - cmp r6, r0 - bcs _0804F954 - adds r7, r1, 0 -_0804F8B0: - movs r0, 0x64 - adds r4, r6, 0 - muls r4, r0 - ldr r0, _0804F8FC @ =gPlayerParty - adds r4, r0 - adds r0, r4, 0 - movs r1, 0x39 - bl GetMonData - lsls r0, 16 - lsrs r5, r0, 16 - adds r0, r4, 0 - movs r1, 0x3A - bl GetMonData - adds r1, r0, 0 - lsls r0, r5, 16 - asrs r0, 16 - lsls r1, 16 - asrs r1, 16 - bl GetHPBarLevel - ldr r1, [r7] - adds r1, 0x5D - adds r1, r6 - strb r0, [r1] - adds r0, r6, 0x1 - lsls r0, 16 - lsrs r6, r0, 16 - ldr r0, [r7] - adds r0, 0x36 - ldrb r0, [r0] - cmp r6, r0 - bcc _0804F8B0 - b _0804F954 - .align 2, 0 -_0804F8F8: .4byte gUnknown_2031DA8 -_0804F8FC: .4byte gPlayerParty -_0804F900: - movs r6, 0 - ldr r1, _0804F95C @ =gUnknown_2031DA8 - ldr r0, [r1] - adds r0, 0x37 - ldrb r0, [r0] - cmp r6, r0 - bcs _0804F954 - adds r7, r1, 0 -_0804F910: - movs r0, 0x64 - adds r4, r6, 0 - muls r4, r0 - ldr r0, _0804F960 @ =gEnemyParty - adds r4, r0 - adds r0, r4, 0 - movs r1, 0x39 - bl GetMonData - lsls r0, 16 - lsrs r5, r0, 16 - adds r0, r4, 0 - movs r1, 0x3A - bl GetMonData - adds r1, r0, 0 - lsls r0, r5, 16 - asrs r0, 16 - lsls r1, 16 - asrs r1, 16 - bl GetHPBarLevel - ldr r1, [r7] - adds r1, 0x63 - adds r1, r6 - strb r0, [r1] - adds r0, r6, 0x1 - lsls r0, 16 - lsrs r6, r0, 16 - ldr r0, [r7] - adds r0, 0x37 - ldrb r0, [r0] - cmp r6, r0 - bcc _0804F910 -_0804F954: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0804F95C: .4byte gUnknown_2031DA8 -_0804F960: .4byte gEnemyParty - thumb_func_end sub_804F890 - - thumb_func_start sub_804F964 -sub_804F964: @ 804F964 - push {r4-r7,lr} - mov r7, r8 - push {r7} - movs r5, 0 -_0804F96C: - movs r4, 0 - ldr r2, _0804F9D0 @ =gUnknown_2031DA8 - ldr r0, [r2] - adds r0, 0x36 - adds r0, r5 - adds r1, r5, 0x1 - mov r8, r1 - ldrb r0, [r0] - cmp r4, r0 - bge _0804F9BE - adds r6, r2, 0 - lsls r0, r5, 1 - adds r0, r5 - lsls r7, r0, 1 -_0804F988: - ldr r2, [r6] - adds r3, r4, r7 - adds r0, r2, 0 - adds r0, 0x28 - adds r0, r3 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _0804F9D4 @ =gSprites - adds r0, r1 - adds r2, 0x5D - adds r2, r3 - ldrb r2, [r2] - movs r1, 0x4 - subs r1, r2 - lsls r1, 24 - lsrs r1, 24 - bl MonIcon_SetAnim - adds r4, 0x1 - ldr r0, [r6] - adds r0, 0x36 - adds r0, r5 - ldrb r0, [r0] - cmp r4, r0 - blt _0804F988 -_0804F9BE: - mov r5, r8 - cmp r5, 0x1 - ble _0804F96C - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0804F9D0: .4byte gUnknown_2031DA8 -_0804F9D4: .4byte gSprites - thumb_func_end sub_804F964 - - thumb_func_start sub_804F9D8 -sub_804F9D8: @ 804F9D8 - push {r4,r5,lr} - movs r2, 0 - ldr r5, _0804FA08 @ =gSaveBlock1Ptr - ldr r4, _0804FA0C @ =0x0000309c - ldr r3, _0804FA10 @ =gUnknown_2031DA8 -_0804F9E2: - ldr r0, [r5] - adds r0, r4 - adds r1, r0, r2 - ldrb r0, [r1] - cmp r0, 0 - bne _0804F9FC - ldr r0, [r3] - adds r0, 0xA9 - adds r0, r2 - ldrb r0, [r0] - cmp r0, 0 - beq _0804F9FC - strb r0, [r1] -_0804F9FC: - adds r2, 0x1 - cmp r2, 0xA - ble _0804F9E2 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0804FA08: .4byte gSaveBlock1Ptr -_0804FA0C: .4byte 0x0000309c -_0804FA10: .4byte gUnknown_2031DA8 - thumb_func_end sub_804F9D8 - - thumb_func_start sub_804FA14 -sub_804FA14: @ 804FA14 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x30 - mov r8, r0 - adds r7, r1, 0 - mov r9, r2 - movs r5, 0 - cmp r5, r7 - bge _0804FA4E - mov r6, sp -_0804FA2C: - movs r0, 0x64 - adds r4, r5, 0 - muls r4, r0 - add r4, r8 - adds r0, r4, 0 - movs r1, 0x41 - bl GetMonData - str r0, [r6, 0x18] - adds r0, r4, 0 - movs r1, 0xB - bl GetMonData - stm r6!, {r0} - adds r5, 0x1 - cmp r5, r7 - blt _0804FA2C -_0804FA4E: - bl IsNationalPokedexEnabled - mov r1, r9 - lsls r4, r1, 2 - cmp r0, 0 - bne _0804FA70 - add r0, sp, 0x18 - adds r0, r4 - ldr r0, [r0] - cmp r0, 0x97 - ble _0804FA68 - movs r0, 0x2 - b _0804FB24 -_0804FA68: - cmp r0, 0 - bne _0804FA70 - movs r0, 0x3 - b _0804FB24 -_0804FA70: - bl GetMultiplayerId - movs r1, 0x1 - eors r0, r1 - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 3 - subs r1, r0 - lsls r1, 2 - ldr r0, _0804FAB0 @ =gLinkPlayers - adds r1, r0 - ldrb r0, [r1] - subs r0, 0x1 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x1 - bls _0804FAB8 - ldrb r1, [r1, 0x12] - movs r0, 0xF - ands r0, r1 - cmp r0, 0 - bne _0804FAB8 - add r0, sp, 0x18 - adds r0, r4 - ldr r1, [r0] - movs r0, 0xCE - lsls r0, 1 - cmp r1, r0 - bne _0804FAB4 - movs r0, 0x5 - b _0804FB24 - .align 2, 0 -_0804FAB0: .4byte gLinkPlayers -_0804FAB4: - cmp r1, 0x97 - bgt _0804FADE -_0804FAB8: - mov r1, sp - adds r0, r1, r4 - ldr r1, [r0] - movs r0, 0xCD - lsls r0, 1 - cmp r1, r0 - beq _0804FACA - cmp r1, 0x97 - bne _0804FAE2 -_0804FACA: - movs r0, 0x64 - mov r1, r9 - muls r1, r0 - adds r0, r1, 0 - add r0, r8 - movs r1, 0x50 - bl GetMonData - cmp r0, 0 - bne _0804FAE2 -_0804FADE: - movs r0, 0x4 - b _0804FB24 -_0804FAE2: - cmp r7, 0 - ble _0804FB00 - movs r3, 0xCE - lsls r3, 1 - movs r2, 0 - add r1, sp, 0x18 - adds r5, r7, 0 -_0804FAF0: - ldr r0, [r1] - cmp r0, r3 - bne _0804FAF8 - str r2, [r1] -_0804FAF8: - adds r1, 0x4 - subs r5, 0x1 - cmp r5, 0 - bne _0804FAF0 -_0804FB00: - movs r2, 0 - movs r5, 0 - cmp r2, r7 - bge _0804FB1A - add r1, sp, 0x18 -_0804FB0A: - cmp r5, r9 - beq _0804FB12 - ldr r0, [r1] - adds r2, r0 -_0804FB12: - adds r1, 0x4 - adds r5, 0x1 - cmp r5, r7 - blt _0804FB0A -_0804FB1A: - cmp r2, 0 - bne _0804FB22 - movs r0, 0x1 - b _0804FB24 -_0804FB22: - movs r0, 0 -_0804FB24: - add sp, 0x30 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_804FA14 - thumb_func_start sub_804FB34 sub_804FB34: @ 804FB34 push {r4-r7,lr} diff --git a/include/graphics.h b/include/graphics.h index 740818cd8..ba174b348 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -4218,5 +4218,6 @@ extern const u8 gMonIcon_QuestionMark[]; extern const u16 gUnknown_8E9CEDC[]; extern const u16 gUnknown_8E9CF5C[]; extern const u16 gUnknown_8E9E9FC[]; +extern const u16 gUnknown_8E9F1FC[]; #endif //GUARD_GRAPHICS_H diff --git a/include/pokemon_icon.h b/include/pokemon_icon.h index e554d23e9..13228e55e 100644 --- a/include/pokemon_icon.h +++ b/include/pokemon_icon.h @@ -22,5 +22,6 @@ u8 CreateMonIcon(u16 species, SpriteCallback callback, s16 x, s16 y, u8 subprior u8 UpdateMonIconFrame(struct Sprite *sprite); void LoadMonIconPalette(u16 iconId); void FreeMonIconPalette(u16 iconId); +void MonIcon_SetAnim(struct Sprite * sprite, u8 animNum); #endif // GUARD_POKEMON_ICON_H diff --git a/src/trade.c b/src/trade.c index b0f3b0e90..765eb394d 100644 --- a/src/trade.c +++ b/src/trade.c @@ -21,6 +21,9 @@ #include "overworld.h" #include "battle_anim.h" #include "party_menu.h" +#include "daycare.h" +#include "event_data.h" +#include "battle_interface.h" #include "pokemon_summary_screen.h" #include "pokemon_storage_system.h" #include "new_menu_helpers.h" @@ -67,7 +70,7 @@ struct TradeResources u16 unk_2; u8 unk_4; } unk_8D0[4]; - /*0x08F0*/ u8 bg1TilemapBuffer[BG_SCREEN_SIZE]; + /*0x08F0*/ u16 tilemapBuffer[BG_SCREEN_SIZE / 2]; }; IWRAM_DATA vu16 gUnknown_3000E78; @@ -105,7 +108,7 @@ void sub_804F748(u8 side); void sub_804F890(u8 side); void sub_804F964(void); void sub_804F9D8(void); -u32 sub_804FA14(struct Pokemon * party, u8 partyCount, u8 cursorPos); +u32 sub_804FA14(struct Pokemon * party, int partyCount, int cursorPos); void LoadHeldItemIcons(void); void sub_8050138(void); @@ -123,10 +126,16 @@ extern const u8 gUnknown_8261D08[][4][6]; extern const u16 gTradePartyBoxTilemap[]; extern const u16 gTradeMovesBoxTilemap[]; extern const u8 gUnknown_8262055[][2]; +extern const u8 gUnknown_8261E5A[][12]; +extern const u8 gUnknown_8261E72[][12]; extern const u8 gUnknown_8261F18[]; extern const u8 gUnknown_8261EB6[]; extern const u8 gUnknown_8261EC7[]; extern const u8 gUnknown_841E09F[]; +extern const u8 *const gUnknown_8261EF4[]; +extern const struct SpritePalette gUnknown_8261D00; +extern const struct SpritePalette gUnknown_8261C60; +extern const struct SpriteSheet gUnknown_8261C58; void sub_804C600(void) { @@ -142,7 +151,7 @@ void sub_804C600(void) LoadPalette(gTMCaseMainWindowPalette, 0xD0, 0x14); ResetBgsAndClearDma3BusyFlags(FALSE); InitBgsFromTemplates(0, gUnknown_8261F1C, NELEMS(gUnknown_8261F1C)); - SetBgTilemapBuffer(1, gUnknown_2031DA8->bg1TilemapBuffer); + SetBgTilemapBuffer(1, gUnknown_2031DA8->tilemapBuffer); if (InitWindows(gUnknown_8261F2C)) { DeactivateAllTextPrinters(); @@ -3288,3 +3297,496 @@ void sub_804EED4(u8 *a0, u8 a1, u8 a2) StringAppend(a0, gUnknown_841E09F); } } + +void sub_804EFB4(u8 whichParty, u8 windowId, const u8 *str) +{ + u8 xPos; + s8 speed; + windowId += (whichParty * PARTY_SIZE) + 2; + speed = 0; + xPos = (64u - GetStringWidth(0, str, GetFontAttribute(0, FONTATTR_LETTER_SPACING))) / 2; + AddTextPrinterParameterized3(windowId, 0, xPos, 4, gUnknown_8261F18, speed, str); + PutWindowTilemap(windowId); + CopyWindowToVram(windowId, 3); +} + +void sub_804F020(u8 whichParty) +{ + u8 buff[20]; + u8 nickname[30]; + struct Pokemon * party = whichParty == 0 ? gPlayerParty : gEnemyParty; + u8 i; + for (i = 0; i < gUnknown_2031DA8->partyCounts[whichParty]; i++) + { + GetMonData(&party[i], MON_DATA_NICKNAME, buff); + StringCopy10(nickname, buff); + sub_804EFB4(whichParty, i, nickname); + } +} + +void sub_804F08C(u8 whichParty, u8 monIdx, u8 a2, u8 a3, u8 a4, u8 a5) +{ + u8 level; + u32 r2; + u8 gender; + u8 nickname[12]; + + CopyToBgTilemapBufferRect_ChangePalette(1, gUnknown_8E9F1FC, a4, a5, 6, 3, 0); + CopyBgTilemapBufferToVram(1); + + if (whichParty == 0) + level = GetMonData(&gPlayerParty[monIdx], MON_DATA_LEVEL, NULL); + else + level = GetMonData(&gEnemyParty[monIdx], MON_DATA_LEVEL, NULL); + + if (gUnknown_2031DA8->unk_51[whichParty][monIdx] == 0) + { + if (level / 10 != 0) + gUnknown_2031DA8->tilemapBuffer[a2 + (a3 * 32)] = (level / 10) + 0x60; + + gUnknown_2031DA8->tilemapBuffer[a2 + (a3 * 32) + 1] = (level % 10) + 0x70; + } + else + { + gUnknown_2031DA8->tilemapBuffer[a2 + (a3 * 32) - 32] = gUnknown_2031DA8->tilemapBuffer[a2 + (a3 * 32) - 33]; + gUnknown_2031DA8->tilemapBuffer[a2 + (a3 * 32) - 31] = gUnknown_2031DA8->tilemapBuffer[a2 + (a3 * 32) - 36] | 0x400; + } + + if (gUnknown_2031DA8->unk_51[whichParty][monIdx] != 0) + { + r2 = 0x480; + } + else + { + if (whichParty == 0) + { + gender = GetMonGender(&gPlayerParty[monIdx]); + GetMonData(&gPlayerParty[monIdx], MON_DATA_NICKNAME, nickname); + } + else + { + gender = GetMonGender(&gEnemyParty[monIdx]); + GetMonData(&gEnemyParty[monIdx], MON_DATA_NICKNAME, nickname); + } + + switch (gender) + { + case MON_MALE: + r2 = !NameHasGenderSymbol(nickname, MON_MALE) ? 0x84 : 0x83; + break; + case MON_FEMALE: + r2 = !NameHasGenderSymbol(nickname, MON_FEMALE) ? 0x85 : 0x83; + break; + default: + r2 = 0x83; + break; + } + } + gUnknown_2031DA8->tilemapBuffer[(a3 - 1) * 32 + a2 + 1] = r2; +} + +#ifdef NONMATCHING +// Instruction swap when setting r5 and r4 +void sub_804F284(u8 whichParty) +{ + s32 i; + const u8 *r5; + const u8 *r4; + for (i = 0; i < gUnknown_2031DA8->partyCounts[whichParty]; i++) + { + r5 = gUnknown_8261E5A[whichParty]; + r4 = gUnknown_8261E72[whichParty]; + sub_804F08C(whichParty, i, r5[2 * i + 0], r5[2 * i + 1], r4[2 * i + 0], r4[2 * i + 1]); + } +} +#else +NAKED +void sub_804F284(u8 whichParty) +{ + asm_unified("\tpush {r4-r7,lr}\n" + "\tsub sp, 0x8\n" + "\tlsls r0, 24\n" + "\tlsrs r6, r0, 24\n" + "\tmovs r7, 0\n" + "\tldr r0, _0804F2DC @ =gUnknown_2031DA8\n" + "\tldr r0, [r0]\n" + "\tadds r0, 0x36\n" + "\tadds r0, r6\n" + "\tldrb r0, [r0]\n" + "\tcmp r7, r0\n" + "\tbge _0804F2D4\n" + "\tlsls r0, r6, 1\n" + "\tadds r0, r6\n" + "\tldr r1, _0804F2E0 @ =gUnknown_8261E5A\n" + "\tlsls r0, 2\n" + "\tadds r5, r0, r1\n" + "\tldr r1, _0804F2E4 @ =gUnknown_8261E72\n" + "\tadds r4, r0, r1\n" + "_0804F2AA:\n" + "\tlsls r1, r7, 24\n" + "\tlsrs r1, 24\n" + "\tldrb r2, [r5]\n" + "\tldrb r3, [r5, 0x1]\n" + "\tldrb r0, [r4]\n" + "\tstr r0, [sp]\n" + "\tldrb r0, [r4, 0x1]\n" + "\tstr r0, [sp, 0x4]\n" + "\tadds r0, r6, 0\n" + "\tbl sub_804F08C\n" + "\tadds r5, 0x2\n" + "\tadds r4, 0x2\n" + "\tadds r7, 0x1\n" + "\tldr r0, _0804F2DC @ =gUnknown_2031DA8\n" + "\tldr r0, [r0]\n" + "\tadds r0, 0x36\n" + "\tadds r0, r6\n" + "\tldrb r0, [r0]\n" + "\tcmp r7, r0\n" + "\tblt _0804F2AA\n" + "_0804F2D4:\n" + "\tadd sp, 0x8\n" + "\tpop {r4-r7}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" + "_0804F2DC: .4byte gUnknown_2031DA8\n" + "_0804F2E0: .4byte gUnknown_8261E5A\n" + "_0804F2E4: .4byte gUnknown_8261E72"); +} +#endif //NONMATCHING + +void sub_804F2E8(u8 whichParty) +{ + int i; + + for (i = 0; i < gUnknown_2031DA8->partyCounts[whichParty]; i++) + { + gSprites[gUnknown_2031DA8->partyIcons[whichParty][i]].invisible = FALSE; + gSprites[gUnknown_2031DA8->partyIcons[whichParty][i]].pos1.x = gTradeMonSpriteCoords[(whichParty * PARTY_SIZE) + i][0] * 8 + 14; + gSprites[gUnknown_2031DA8->partyIcons[whichParty][i]].pos1.y = gTradeMonSpriteCoords[(whichParty * PARTY_SIZE) + i][1] * 8 - 12; + gSprites[gUnknown_2031DA8->partyIcons[whichParty][i]].pos2.x = 0; + gSprites[gUnknown_2031DA8->partyIcons[whichParty][i]].pos2.y = 0; + } +} + +void sub_804F3B4(void) +{ + rbox_fill_rectangle(1); + sub_804F020(1); +} + +void sub_804F3C8(u8 whichParty) +{ + CopyToBgTilemapBufferRect_ChangePalette(1, gTradePartyBoxTilemap, 15 * whichParty, 0, 15, 17, 0); + CopyBgTilemapBufferToVram(1); + sub_804F284(whichParty); + sub_804F020(whichParty); + sub_804F2E8(whichParty); + sub_804F728(gUnknown_8261ECC[1], (void *)OBJ_VRAM0 + 32 * gUnknown_2031DA8->unk_72, 24); + gUnknown_2031DA8->unk_74[whichParty] = 0; +} + +void sub_804F440(void) +{ + FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 30, 20); + CopyBgTilemapBufferToVram(0); +} + +void sub_804F464(void) +{ + FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 30, 20); + CopyBgTilemapBufferToVram(0); +} + +void sub_804F488(u16 a0, u8 a1) +{ + int i; + for (i = 0; i < 4; i++) + { + if (!gUnknown_2031DA8->unk_8D0[i].unk_0) + { + gUnknown_2031DA8->unk_8D0[i].unk_2 = a0; + gUnknown_2031DA8->unk_8D0[i].unk_4 = a1; + gUnknown_2031DA8->unk_8D0[i].unk_0 = TRUE; + break; + } + } +} + +void sub_804F4DC(void) +{ + int i; + + for (i = 0; i < 4; i++) + { + if (gUnknown_2031DA8->unk_8D0[i].unk_0) + { + if (gUnknown_2031DA8->unk_8D0[i].unk_2) + { + gUnknown_2031DA8->unk_8D0[i].unk_2--; + } + else + { + switch (gUnknown_2031DA8->unk_8D0[i].unk_4) + { + case 0: + SendBlock(bitmask_all_link_players_but_self(), gUnknown_2031DA8->linkData, 20); + break; + case 1: + sub_804F5BC(0); + break; + case 2: + sub_804F5BC(2); + break; + case 3: + case 4: + case 5: + sub_804F5BC(3); + break; + case 6: + sub_804F5BC(6); + break; + case 7: + sub_804F5BC(7); + break; + case 8: + sub_804F5BC(8); + break; + } + gUnknown_2031DA8->unk_8D0[i].unk_0 = FALSE; + } + } + } +} + +void sub_804F5BC(u8 idx) +{ + FillWindowPixelBuffer(0, PIXEL_FILL(1)); + AddTextPrinterParameterized(0, 3, gUnknown_8261EF4[idx], 0, 2, 0xFF, NULL); + DrawTextBorderOuter(0, 0x014, 12); + PutWindowTilemap(0); + CopyWindowToVram(0, 3); +} + +bool8 sub_804F610(void) +{ + struct SpriteSheet sheet; + + if (gUnknown_2031DA8->unk_A8 < 14) + { + sheet.data = gUnknown_2031C94[gUnknown_2031DA8->unk_A8]; + sheet.size = 0x100; + sheet.tag = 200 + gUnknown_2031DA8->unk_A8; + } + + switch (gUnknown_2031DA8->unk_A8) + { + case 0 ... 7: + LoadSpriteSheet(&sheet); + gUnknown_2031DA8->unk_A8++; + break; + case 8: + gUnknown_2031DA8->unk_72 = LoadSpriteSheet(&sheet); + gUnknown_2031DA8->unk_A8++; + break; + case 9 ... 13: + LoadSpriteSheet(&sheet); + gUnknown_2031DA8->unk_A8++; + break; + case 14: + LoadSpritePalette(&gUnknown_8261D00); + gUnknown_2031DA8->unk_A8++; + break; + case 15: + LoadSpritePalette(&gUnknown_8261C60); + gUnknown_2031DA8->unk_A8++; + break; + case 16: + LoadSpriteSheet(&gUnknown_8261C58); + gUnknown_2031DA8->unk_A8++; + break; + case 17: + gUnknown_2031DA8->unk_A8 = 0; + return TRUE; + } + + return FALSE; +} + +void sub_804F728(const u8 *name, u8 *dest, u8 unused) +{ + sub_808BEB4(name, dest, 0, 0, gDecompressionBuffer, 6); +} + +void sub_804F748(u8 who) +{ + int i; + + switch (who) + { + case 0: + for (i = 0; i < gUnknown_2031DA8->partyCounts[who]; i++) + { + if (GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG) == TRUE) + { + gUnknown_2031DA8->unk_45[who][i] = 0; + gUnknown_2031DA8->unk_51[who][i] = 1; + } + else if (GetMonData(&gPlayerParty[i], MON_DATA_HP) == 0) + { + gUnknown_2031DA8->unk_45[who][i] = 0; + gUnknown_2031DA8->unk_51[who][i] = 0; + } + else + { + gUnknown_2031DA8->unk_45[who][i] = 1; + gUnknown_2031DA8->unk_51[who][i] = 0; + } + } + break; + case 1: + for (i = 0; i < gUnknown_2031DA8->partyCounts[who]; i++) + { + if (GetMonData(&gEnemyParty[i], MON_DATA_IS_EGG) == TRUE) + { + gUnknown_2031DA8->unk_45[who][i] = 0; + gUnknown_2031DA8->unk_51[who][i] = 1; + } + else if (GetMonData(&gEnemyParty[i], MON_DATA_HP) == 0) + { + gUnknown_2031DA8->unk_45[who][i] = 0; + gUnknown_2031DA8->unk_51[who][i] = 0; + } + else + { + gUnknown_2031DA8->unk_45[who][i] = 1; + gUnknown_2031DA8->unk_51[who][i] = 0; + } + } + break; + } +} + +void sub_804F890(u8 who) +{ + u16 i, curHp, maxHp; + + switch (who) + { + case 0: + for (i = 0; i < gUnknown_2031DA8->partyCounts[0]; i++) + { + curHp = GetMonData(&gPlayerParty[i], MON_DATA_HP); + maxHp = GetMonData(&gPlayerParty[i], MON_DATA_MAX_HP); + gUnknown_2031DA8->unk_5D[0][i] = GetHPBarLevel(curHp, maxHp); + } + break; + case 1: + for (i = 0; i < gUnknown_2031DA8->partyCounts[1]; i++) + { + curHp = GetMonData(&gEnemyParty[i], MON_DATA_HP); + maxHp = GetMonData(&gEnemyParty[i], MON_DATA_MAX_HP); + gUnknown_2031DA8->unk_5D[1][i] = GetHPBarLevel(curHp, maxHp); + } + break; + } +} + +void sub_804F964(void) +{ + int i, j; + for (i = 0; i < 2; i++) + { + for (j = 0; j < gUnknown_2031DA8->partyCounts[i]; j++) + { + MonIcon_SetAnim(&gSprites[gUnknown_2031DA8->partyIcons[i][j]], 4 - gUnknown_2031DA8->unk_5D[i][j]); + } + } +} + +void sub_804F9D8(void) +{ + int i; + for (i = 0; i < 11; i++) + { + if (gSaveBlock1Ptr->giftRibbons[i] == 0 && gUnknown_2031DA8->unk_A9[i] != 0) + gSaveBlock1Ptr->giftRibbons[i] = gUnknown_2031DA8->unk_A9[i]; + } +} + +u32 sub_804FA14(struct Pokemon *party, int partyCount, int cursorPos) +{ + int i, sum; + struct LinkPlayer *player; + int species[6]; + int species2[6]; + + for (i = 0; i < partyCount; i++) + { + species2[i] = GetMonData(&party[i], MON_DATA_SPECIES2); + species[i] = GetMonData(&party[i], MON_DATA_SPECIES); + } + + if (!IsNationalPokedexEnabled()) + { + if (species2[cursorPos] > SPECIES_MEW) + { + return 2; + } + if (species2[cursorPos] == SPECIES_NONE) + { + return 3; + } + } + + player = &gLinkPlayers[GetMultiplayerId() ^ 1]; + if ((player->version & 0xFF) != VERSION_RUBY && + (player->version & 0xFF) != VERSION_SAPPHIRE) + { + if ((player->name[10] & 0xF) == 0) + { + if (species2[cursorPos] == SPECIES_EGG) + { + return 5; + } + + if (species2[cursorPos] > SPECIES_MEW) + { + return 4; + } + } + } + + if (species[cursorPos] == SPECIES_DEOXYS || species[cursorPos] == SPECIES_MEW) + { + if (!GetMonData(&party[cursorPos], MON_DATA_OBEDIENCE)) + { + return 4; + } + } + + for (i = 0; i < partyCount; i++) + { + if (species2[i] == SPECIES_EGG) + { + species2[i] = SPECIES_NONE; + } + } + + for (sum = 0, i = 0; i < partyCount; i++) + { + if (i != cursorPos) + { + sum += species2[i]; + } + } + + if (sum != 0) + { + return 0; + } + else + { + return 1; + } +} -- cgit v1.2.3 From a1ec6ccff14cb0e95359b6595f35620ab606bc03 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 29 Oct 2019 11:40:48 -0400 Subject: Port through sub_804FE00 --- asm/trade.s | 427 ------------------------------------------------------------ src/trade.c | 231 ++++++++++++++++++++++++++++++++ 2 files changed, 231 insertions(+), 427 deletions(-) diff --git a/asm/trade.s b/asm/trade.s index 80d527445..541572649 100644 --- a/asm/trade.s +++ b/asm/trade.s @@ -5,433 +5,6 @@ .text - thumb_func_start sub_804FB34 -sub_804FB34: @ 804FB34 - push {r4-r7,lr} - ldr r0, _0804FBB4 @ =gReceivedRemoteLinkPlayers - ldrb r0, [r0] - cmp r0, 0 - beq _0804FBC0 - bl GetMultiplayerId - ldr r6, _0804FBB8 @ =gLinkPlayers - movs r7, 0x1 - eors r0, r7 - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 3 - subs r1, r0 - lsls r1, 2 - adds r1, r6 - ldrb r1, [r1] - subs r0, r1, 0x4 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x1 - bls _0804FBC0 - subs r0, r1, 0x1 - lsls r0, 16 - lsrs r0, 16 - movs r4, 0x2 - cmp r0, 0x1 - bhi _0804FB6E - movs r4, 0x1 -_0804FB6E: - cmp r4, 0 - ble _0804FBC0 - bl GetMultiplayerId - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 3 - subs r1, r0 - lsls r1, 2 - adds r1, r6 - ldrb r1, [r1, 0x12] - movs r5, 0xF0 - adds r0, r5, 0 - ands r0, r1 - cmp r0, 0 - beq _0804FBBC - cmp r4, 0x2 - bne _0804FBC0 - bl GetMultiplayerId - eors r0, r7 - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 3 - subs r1, r0 - lsls r1, 2 - adds r1, r6 - ldrb r1, [r1, 0x12] - adds r0, r5, 0 - ands r0, r1 - cmp r0, 0 - bne _0804FBC0 - movs r0, 0x2 - b _0804FBC2 - .align 2, 0 -_0804FBB4: .4byte gReceivedRemoteLinkPlayers -_0804FBB8: .4byte gLinkPlayers -_0804FBBC: - movs r0, 0x1 - b _0804FBC2 -_0804FBC0: - movs r0, 0 -_0804FBC2: - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_804FB34 - - thumb_func_start sub_804FBC8 -sub_804FBC8: @ 804FBC8 - push {lr} - lsls r0, 16 - lsrs r2, r0, 16 - lsls r1, 24 - lsrs r1, 24 - movs r0, 0xCD - lsls r0, 1 - cmp r2, r0 - beq _0804FBDE - cmp r2, 0x97 - bne _0804FBE6 -_0804FBDE: - cmp r1, 0 - bne _0804FBE6 - movs r0, 0x1 - b _0804FBE8 -_0804FBE6: - movs r0, 0 -_0804FBE8: - pop {r1} - bx r1 - thumb_func_end sub_804FBC8 - - thumb_func_start sub_804FBEC -sub_804FBEC: @ 804FBEC - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - ldr r4, [sp, 0x24] - ldr r5, [sp, 0x28] - ldr r6, [sp, 0x2C] - lsls r2, 16 - lsrs r7, r2, 16 - lsls r3, 16 - lsrs r3, 16 - lsls r4, 24 - lsrs r4, 24 - mov r8, r4 - lsls r5, 16 - lsrs r5, 16 - lsls r6, 24 - lsrs r6, 24 - lsls r2, r0, 23 - lsrs r2, 31 - mov r9, r2 - lsls r0, 24 - lsrs r4, r0, 31 - lsls r0, r1, 23 - lsrs r0, 31 - mov r10, r0 - lsls r0, r1, 24 - lsrs r0, 31 - lsls r1, 18 - lsrs r1, 28 - subs r1, 0x4 - lsls r1, 24 - lsrs r1, 24 - movs r2, 0x1 - cmp r1, 0x1 - bhi _0804FC3A - movs r2, 0 -_0804FC3A: - cmp r2, 0 - beq _0804FC4E - cmp r4, 0 - bne _0804FC46 - movs r0, 0x8 - b _0804FCCE -_0804FC46: - cmp r0, 0 - bne _0804FC4E - movs r0, 0x9 - b _0804FCCE -_0804FC4E: - adds r0, r5, 0 - adds r1, r6, 0 - str r3, [sp] - bl sub_804FBC8 - ldr r3, [sp] - cmp r0, 0 - bne _0804FCB2 - movs r0, 0xCE - lsls r0, 1 - cmp r3, r0 - bne _0804FC6E - cmp r7, r3 - beq _0804FC8C - movs r0, 0x2 - b _0804FCCE -_0804FC6E: - ldr r0, _0804FC88 @ =gBaseStats - lsls r1, r7, 3 - subs r1, r7 - lsls r1, 2 - adds r1, r0 - ldrb r0, [r1, 0x6] - cmp r0, r8 - beq _0804FC8C - ldrb r0, [r1, 0x7] - cmp r0, r8 - beq _0804FC8C - movs r0, 0x1 - b _0804FCCE - .align 2, 0 -_0804FC88: .4byte gBaseStats -_0804FC8C: - movs r0, 0xCE - lsls r0, 1 - cmp r7, r0 - bne _0804FC9C - cmp r7, r3 - beq _0804FC9C - movs r0, 0x3 - b _0804FCCE -_0804FC9C: - mov r0, r9 - cmp r0, 0 - bne _0804FCBE - movs r0, 0xCE - lsls r0, 1 - cmp r7, r0 - bne _0804FCAE - movs r0, 0x6 - b _0804FCCE -_0804FCAE: - cmp r7, 0x97 - bls _0804FCB6 -_0804FCB2: - movs r0, 0x4 - b _0804FCCE -_0804FCB6: - cmp r3, 0x97 - bls _0804FCBE - movs r0, 0x5 - b _0804FCCE -_0804FCBE: - mov r0, r10 - cmp r0, 0 - bne _0804FCCC - cmp r7, 0x97 - bls _0804FCCC - movs r0, 0x7 - b _0804FCCE -_0804FCCC: - movs r0, 0 -_0804FCCE: - add sp, 0x4 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_804FBEC - - thumb_func_start sub_804FCE0 -sub_804FCE0: @ 804FCE0 - push {r4-r6,lr} - lsls r1, 16 - lsrs r5, r1, 16 - adds r6, r5, 0 - lsls r2, 16 - lsrs r2, 16 - lsls r3, 24 - lsrs r3, 24 - lsls r0, 23 - lsrs r4, r0, 31 - adds r0, r2, 0 - adds r1, r3, 0 - bl sub_804FBC8 - cmp r0, 0 - bne _0804FD18 - cmp r4, 0 - bne _0804FD1C - movs r0, 0xCE - lsls r0, 1 - cmp r5, r0 - bne _0804FD10 - movs r0, 0x2 - b _0804FD1E -_0804FD10: - cmp r6, 0x97 - bls _0804FD1C - cmp r6, r0 - beq _0804FD1C -_0804FD18: - movs r0, 0x1 - b _0804FD1E -_0804FD1C: - movs r0, 0 -_0804FD1E: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_804FCE0 - - thumb_func_start sub_804FD24 -sub_804FD24: @ 804FD24 - push {r4,lr} - adds r4, r0, 0 - ldrh r0, [r4, 0x2E] - adds r0, 0x1 - strh r0, [r4, 0x2E] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0xA - bne _0804FD40 - movs r0, 0x17 - bl PlaySE - movs r0, 0 - strh r0, [r4, 0x2E] -_0804FD40: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_804FD24 - - thumb_func_start sub_804FD48 -sub_804FD48: @ 804FD48 - push {r4,r5,lr} - adds r4, r0, 0 - adds r0, 0x3E - ldrb r1, [r0] - movs r0, 0x4 - ands r0, r1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0 - bne _0804FD72 - ldrh r0, [r4, 0x2E] - adds r0, 0x1 - strh r0, [r4, 0x2E] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0xA - bne _0804FD72 - movs r0, 0xBB - bl PlaySE - strh r5, [r4, 0x2E] -_0804FD72: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_804FD48 - - thumb_func_start sub_804FD78 -sub_804FD78: @ 804FD78 - push {lr} - adds r2, r0, 0 - movs r0, 0x30 - ldrsh r1, [r2, r0] - cmp r1, 0 - bne _0804FDAE - ldrh r0, [r2, 0x2E] - adds r0, 0x1 - strh r0, [r2, 0x2E] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0xC - bne _0804FD94 - strh r1, [r2, 0x2E] -_0804FD94: - movs r1, 0x2E - ldrsh r0, [r2, r1] - lsls r0, 1 - ldr r1, _0804FDB4 @ =gUnknown_826CF60 - adds r0, r1 - ldrb r1, [r2, 0x5] - lsrs r1, 4 - adds r1, 0x10 - lsls r1, 4 - adds r1, 0x4 - movs r2, 0x2 - bl LoadPalette -_0804FDAE: - pop {r0} - bx r0 - .align 2, 0 -_0804FDB4: .4byte gUnknown_826CF60 - thumb_func_end sub_804FD78 - - thumb_func_start sub_804FDB8 -sub_804FDB8: @ 804FDB8 - push {lr} - adds r2, r0, 0 - ldrh r1, [r2, 0x2E] - adds r1, 0x1 - strh r1, [r2, 0x2E] - ldrh r0, [r2, 0x26] - adds r0, 0x1 - strh r0, [r2, 0x26] - lsls r1, 16 - asrs r1, 16 - cmp r1, 0xA - bne _0804FDD6 - adds r0, r2, 0 - bl DestroySprite -_0804FDD6: - pop {r0} - bx r0 - thumb_func_end sub_804FDB8 - - thumb_func_start sub_804FDDC -sub_804FDDC: @ 804FDDC - push {lr} - adds r2, r0, 0 - ldrh r1, [r2, 0x2E] - adds r1, 0x1 - strh r1, [r2, 0x2E] - ldrh r0, [r2, 0x26] - subs r0, 0x1 - strh r0, [r2, 0x26] - lsls r1, 16 - asrs r1, 16 - cmp r1, 0xA - bne _0804FDFA - adds r0, r2, 0 - bl DestroySprite -_0804FDFA: - pop {r0} - bx r0 - thumb_func_end sub_804FDDC - - thumb_func_start sub_804FE00 -sub_804FE00: @ 804FE00 - push {r4,lr} - adds r4, r0, 0 - ldrh r0, [r4, 0x2E] - adds r0, 0x1 - strh r0, [r4, 0x2E] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0xF - bne _0804FE1C - movs r0, 0xC5 - bl PlaySE - movs r0, 0 - strh r0, [r4, 0x2E] -_0804FE1C: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_804FE00 - thumb_func_start sub_804FE24 sub_804FE24: @ 804FE24 push {r4,r5,lr} diff --git a/src/trade.c b/src/trade.c index 765eb394d..48f559861 100644 --- a/src/trade.c +++ b/src/trade.c @@ -7,6 +7,7 @@ #include "bg.h" #include "text.h" #include "window.h" +#include "librfu.h" #include "text_window.h" #include "pokemon_icon.h" #include "graphics.h" @@ -136,6 +137,7 @@ extern const u8 *const gUnknown_8261EF4[]; extern const struct SpritePalette gUnknown_8261D00; extern const struct SpritePalette gUnknown_8261C60; extern const struct SpriteSheet gUnknown_8261C58; +extern const u16 gUnknown_826CF60[]; void sub_804C600(void) { @@ -3790,3 +3792,232 @@ u32 sub_804FA14(struct Pokemon *party, int partyCount, int cursorPos) return 1; } } + +s32 sub_804FB34(void) +{ + s32 val; + u16 version; + + if (gReceivedRemoteLinkPlayers != 0) + { + val = 0; + version = (gLinkPlayers[GetMultiplayerId() ^ 1].version & 0xFF); + + if (version == VERSION_FIRE_RED || version == VERSION_LEAF_GREEN) + { + // this value could actually be anything 0 or less + val = 0; + } + else if (version == VERSION_RUBY || version == VERSION_SAPPHIRE) + { + val = 1; + } + else + { + val = 2; + } + + if (val > 0) + { + if (gLinkPlayers[GetMultiplayerId()].name[10] & 0xF0) + { + if (val == 2) + { + if (gLinkPlayers[GetMultiplayerId() ^ 1].name[10] & 0xF0) + { + return 0; + } + else + { + return 2; + } + } + } + else + { + return 1; + } + } + } + return 0; +} + +bool32 IsDeoxysOrMewUntradable(u16 species, bool8 isObedientBitSet) +{ + if (species == SPECIES_DEOXYS || species == SPECIES_MEW) + { + if (!isObedientBitSet) + return TRUE; + } + return FALSE; +} + +int sub_804FBEC(struct UnkLinkRfuStruct_02022B14Substruct a0, struct UnkLinkRfuStruct_02022B14Substruct a1, u16 species1, u16 species2, u8 type, u16 species3, u8 isObedientBitSet) +{ + u8 r9 = a0.unk_01_0; + u8 r4 = a0.unk_00_7; + u8 r10 = a1.unk_01_0; + u8 r0 = a1.unk_00_7; + u8 r1 = a1.unk_01_2; + u8 r2; + + if (r1 == VERSION_FIRE_RED || r1 == VERSION_LEAF_GREEN) + { + r2 = 0; + } + else + { + r2 = 1; + } + if (r2) + { + if (!r4) + { + return 8; + } + else if (!r0) + { + return 9; + } + } + + if (IsDeoxysOrMewUntradable(species3, isObedientBitSet)) + { + return 4; + } + + if (species2 == SPECIES_EGG) + { + if (species1 != species2) + { + return 2; + } + } + else + { + if (gBaseStats[species1].type1 != type && gBaseStats[species1].type2 != type) + { + return 1; + } + } + + if (species1 == SPECIES_EGG && species1 != species2) + { + return 3; + } + + if (!r9) + { + if (species1 == SPECIES_EGG) + { + return 6; + } + + if (species1 > SPECIES_MEW) + { + return 4; + } + + if (species2 > SPECIES_MEW) + { + return 5; + } + } + + if (!r10 && species1 > SPECIES_MEW) + { + return 7; + } + + return 0; +} + +int sub_804FCE0(struct UnkLinkRfuStruct_02022B14Substruct a0, u16 species, u16 a2, u8 a3) +{ + u8 unk = a0.unk_01_0; + + if (IsDeoxysOrMewUntradable(a2, a3)) + { + return 1; + } + + if (unk) + { + return 0; + } + + if (species == SPECIES_EGG) + { + return 2; + } + + if (species > SPECIES_MEW && species != SPECIES_EGG) + { + return 1; + } + + return 0; +} + +// Sprite callback for link cable transfer glow +void sub_804FD24(struct Sprite * sprite) +{ + sprite->data[0]++; + if (sprite->data[0] == 10) + { + PlaySE(SE_BOWA); + sprite->data[0] = 0; + } +} + +// Sprite callback for wireless transfer glow +void sub_804FD48(struct Sprite * sprite) +{ + if (!sprite->invisible) + { + sprite->data[0]++; + if (sprite->data[0] == 10) + { + PlaySE(SE_W207B); + sprite->data[0] = 0; + } + } +} + +// Palette flash for transfer glow core +void sub_804FD78(struct Sprite * sprite) +{ + if (sprite->data[1] == 0) + { + sprite->data[0]++; + if (sprite->data[0] == 12) + sprite->data[0] = 0; + LoadPalette(&gUnknown_826CF60[sprite->data[0]], 16 * (sprite->oam.paletteNum + 16) + 4, 2); + } +} + +void sub_804FDB8(struct Sprite * sprite) +{ + sprite->data[0]++; + sprite->pos2.y++; + if (sprite->data[0] == 10) + DestroySprite(sprite); +} + +void sub_804FDDC(struct Sprite * sprite) +{ + sprite->data[0]++; + sprite->pos2.y--; + if (sprite->data[0] == 10) + DestroySprite(sprite); +} + +void sub_804FE00(struct Sprite * sprite) +{ + sprite->data[0]++; + if (sprite->data[0] == 15) + { + PlaySE(SE_W107); + sprite->data[0] = 0; + } +} -- cgit v1.2.3 From ce5c3fdd776a47d5d6c3790249c53afaff844553 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 29 Oct 2019 12:58:40 -0400 Subject: Trade through sub_804FFE4 --- asm/trade.s | 389 --------------------------------------------------- data/trade.s | 2 +- include/decompress.h | 1 - include/util.h | 1 + src/trade.c | 174 ++++++++++++++++++++++- 5 files changed, 170 insertions(+), 397 deletions(-) diff --git a/asm/trade.s b/asm/trade.s index 541572649..bcb88fdb7 100644 --- a/asm/trade.s +++ b/asm/trade.s @@ -5,395 +5,6 @@ .text - thumb_func_start sub_804FE24 -sub_804FE24: @ 804FE24 - push {r4,r5,lr} - sub sp, 0x20 - ldr r0, _0804FEB0 @ =gUnknown_2031DAC - ldr r0, [r0] - mov r12, r0 - adds r0, 0xD4 - ldrh r1, [r0] - lsls r1, 8 - adds r0, 0x2 - ldrh r2, [r0] - lsls r2, 8 - adds r0, 0x6 - movs r4, 0 - ldrsh r3, [r0, r4] - adds r0, 0x2 - movs r5, 0 - ldrsh r0, [r0, r5] - str r0, [sp] - mov r4, r12 - adds r4, 0xE8 - movs r5, 0 - ldrsh r0, [r4, r5] - str r0, [sp, 0x4] - movs r5, 0 - ldrsh r0, [r4, r5] - str r0, [sp, 0x8] - mov r0, r12 - adds r0, 0xEC - ldrh r0, [r0] - str r0, [sp, 0xC] - add r0, sp, 0x10 - bl DoBgAffineSet - add r0, sp, 0x10 - ldrh r1, [r0] - movs r0, 0x20 - bl SetGpuReg - add r0, sp, 0x10 - ldrh r1, [r0, 0x2] - movs r0, 0x22 - bl SetGpuReg - add r0, sp, 0x10 - ldrh r1, [r0, 0x4] - movs r0, 0x24 - bl SetGpuReg - add r0, sp, 0x10 - ldrh r1, [r0, 0x6] - movs r0, 0x26 - bl SetGpuReg - ldr r1, [sp, 0x18] - lsls r1, 16 - lsrs r1, 16 - movs r0, 0x28 - bl SetGpuReg - ldr r1, [sp, 0x1C] - lsls r1, 16 - lsrs r1, 16 - movs r0, 0x2C - bl SetGpuReg - add sp, 0x20 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0804FEB0: .4byte gUnknown_2031DAC - thumb_func_end sub_804FE24 - - thumb_func_start sub_804FEB4 -sub_804FEB4: @ 804FEB4 - push {r4,lr} - ldr r4, _0804FEFC @ =gUnknown_2031DAC - ldr r0, [r4] - adds r0, 0xE0 - ldrh r1, [r0] - movs r0, 0x16 - bl SetGpuReg - ldr r0, [r4] - adds r0, 0xE2 - ldrh r1, [r0] - movs r0, 0x14 - bl SetGpuReg - movs r0, 0 - bl GetGpuReg - lsls r0, 16 - movs r1, 0xE0 - lsls r1, 11 - ands r1, r0 - cmp r1, 0 - bne _0804FF00 - ldr r0, [r4] - adds r0, 0xE4 - ldrh r1, [r0] - movs r0, 0x1A - bl SetGpuReg - ldr r0, [r4] - adds r0, 0xE6 - ldrh r1, [r0] - movs r0, 0x18 - bl SetGpuReg - b _0804FF04 - .align 2, 0 -_0804FEFC: .4byte gUnknown_2031DAC -_0804FF00: - bl sub_804FE24 -_0804FF04: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_804FEB4 - - thumb_func_start sub_804FF0C -sub_804FF0C: @ 804FF0C - push {lr} - bl sub_804FEB4 - bl LoadOam - bl ProcessSpriteCopyRequests - bl TransferPlttBuffer - pop {r0} - bx r0 - thumb_func_end sub_804FF0C - - thumb_func_start sub_804FF24 -sub_804FF24: @ 804FF24 - push {r4,lr} - ldr r3, _0804FF48 @ =gUnknown_2031DAC - ldr r1, [r3] - movs r0, 0x8A - adds r0, r1 - mov r12, r0 - movs r2, 0 - movs r0, 0 - mov r4, r12 - strh r0, [r4] - adds r1, 0x88 - strb r2, [r1] - ldr r0, [r3] - adds r0, 0x89 - strb r2, [r0] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0804FF48: .4byte gUnknown_2031DAC - thumb_func_end sub_804FF24 - - thumb_func_start sub_804FF4C -sub_804FF4C: @ 804FF4C - push {r4,r5,lr} - ldr r0, _0804FF70 @ =gUnknown_2031DAC - ldr r2, [r0] - adds r1, r2, 0 - adds r1, 0x88 - adds r3, r2, 0 - adds r3, 0x89 - ldrb r1, [r1] - adds r5, r0, 0 - ldrb r3, [r3] - cmp r1, r3 - bne _0804FF74 - adds r1, r2, 0 - adds r1, 0x8A - ldrh r0, [r1] - adds r0, 0x1 - b _0804FF7A - .align 2, 0 -_0804FF70: .4byte gUnknown_2031DAC -_0804FF74: - adds r1, r2, 0 - adds r1, 0x8A - movs r0, 0 -_0804FF7A: - strh r0, [r1] - adds r4, r5, 0 - ldr r0, [r4] - adds r0, 0x8A - ldrh r1, [r0] - movs r0, 0x96 - lsls r0, 1 - cmp r1, r0 - bls _0804FFAC - bl CloseLink - ldr r0, _0804FFC0 @ =CB2_LinkError - bl SetMainCallback2 - ldr r1, [r4] - adds r3, r1, 0 - adds r3, 0x8A - movs r2, 0 - movs r0, 0 - strh r0, [r3] - adds r1, 0x89 - strb r2, [r1] - ldr r0, [r4] - adds r0, 0x88 - strb r2, [r0] -_0804FFAC: - ldr r0, [r5] - adds r1, r0, 0 - adds r1, 0x88 - ldrb r1, [r1] - adds r0, 0x89 - strb r1, [r0] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0804FFC0: .4byte CB2_LinkError - thumb_func_end sub_804FF4C - - thumb_func_start sub_804FFC4 -sub_804FFC4: @ 804FFC4 - push {lr} - ldr r0, _0804FFD4 @ =gReceivedRemoteLinkPlayers - ldrb r0, [r0] - cmp r0, 0 - bne _0804FFD8 - movs r0, 0 - b _0804FFE0 - .align 2, 0 -_0804FFD4: .4byte gReceivedRemoteLinkPlayers -_0804FFD8: - bl GetMultiplayerId - lsls r0, 24 - lsrs r0, 24 -_0804FFE0: - pop {r1} - bx r1 - thumb_func_end sub_804FFC4 - - thumb_func_start sub_804FFE4 -sub_804FFE4: @ 804FFE4 - push {r4-r7,lr} - mov r7, r8 - push {r7} - lsls r0, 24 - lsrs r6, r0, 24 - lsls r1, 24 - lsrs r5, r1, 24 - movs r4, 0 - mov r8, r4 - cmp r6, 0 - bne _0805000A - ldr r0, _08050034 @ =gUnknown_2031DA4 - ldrb r1, [r0] - movs r0, 0x64 - muls r1, r0 - ldr r0, _08050038 @ =gPlayerParty - adds r1, r0 - mov r8, r1 - movs r4, 0x1 -_0805000A: - cmp r6, 0x1 - bne _08050028 - ldr r0, _08050034 @ =gUnknown_2031DA4 - ldrb r0, [r0, 0x1] - movs r1, 0x6 - bl __umodsi3 - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x64 - muls r1, r0 - ldr r0, _0805003C @ =gEnemyParty - adds r1, r0 - mov r8, r1 - movs r4, 0x3 -_08050028: - cmp r5, 0 - beq _08050040 - cmp r5, 0x1 - beq _080500C8 - b _0805011E - .align 2, 0 -_08050034: .4byte gUnknown_2031DA4 -_08050038: .4byte gPlayerParty -_0805003C: .4byte gEnemyParty -_08050040: - mov r0, r8 - movs r1, 0x41 - bl GetMonData - lsls r0, 16 - lsrs r5, r0, 16 - mov r0, r8 - movs r1, 0 - bl GetMonData - adds r7, r0, 0 - cmp r6, 0 - bne _0805007C - lsls r0, r5, 3 - ldr r1, _08050074 @ =gMonFrontPicTable - adds r0, r1 - ldr r1, _08050078 @ =gMonSpritesGfxPtr - ldr r1, [r1] - ldr r1, [r1, 0x8] - adds r2, r5, 0 - adds r3, r7, 0 - bl HandleLoadSpecialPokePic - movs r4, 0 - b _0805009A - .align 2, 0 -_08050074: .4byte gMonFrontPicTable -_08050078: .4byte gMonSpritesGfxPtr -_0805007C: - lsls r0, r5, 3 - ldr r1, _080500BC @ =gMonFrontPicTable - adds r0, r1 - ldr r1, _080500C0 @ =gMonSpritesGfxPtr - ldr r2, [r1] - lsls r4, r6, 1 - adds r1, r4, 0x1 - lsls r1, 2 - adds r2, 0x4 - adds r2, r1 - ldr r1, [r2] - adds r2, r5, 0 - adds r3, r7, 0 - bl HandleLoadSpecialPokePic_DontHandleDeoxys -_0805009A: - mov r0, r8 - bl GetMonSpritePalStruct - bl LoadCompressedSpritePalette - ldr r0, _080500C4 @ =gUnknown_2031DAC - ldr r1, [r0] - adds r0, r1, 0 - adds r0, 0xF0 - adds r0, r4 - strh r5, [r0] - lsls r0, r6, 2 - adds r1, 0x68 - adds r1, r0 - str r7, [r1] - b _0805011E - .align 2, 0 -_080500BC: .4byte gMonFrontPicTable -_080500C0: .4byte gMonSpritesGfxPtr -_080500C4: .4byte gUnknown_2031DAC -_080500C8: - mov r0, r8 - bl GetMonSpritePalStruct - ldrh r0, [r0, 0x4] - adds r1, r4, 0 - bl SetMultiuseSpriteTemplateToPokemon - ldr r0, _08050128 @ =gMultiuseSpriteTemplate - movs r1, 0x78 - movs r2, 0x3C - movs r3, 0x6 - bl CreateSprite - ldr r4, _0805012C @ =gUnknown_2031DAC - ldr r1, [r4] - adds r1, 0x8E - adds r1, r6 - strb r0, [r1] - ldr r3, _08050130 @ =gSprites - ldr r0, [r4] - adds r0, 0x8E - adds r0, r6 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r3 - adds r0, 0x3E - ldrb r1, [r0] - movs r2, 0x4 - orrs r1, r2 - strb r1, [r0] - ldr r0, [r4] - adds r0, 0x8E - adds r0, r6 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r3, 0x1C - adds r0, r3 - ldr r1, _08050134 @ =SpriteCallbackDummy - str r1, [r0] -_0805011E: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08050128: .4byte gMultiuseSpriteTemplate -_0805012C: .4byte gUnknown_2031DAC -_08050130: .4byte gSprites -_08050134: .4byte SpriteCallbackDummy - thumb_func_end sub_804FFE4 - thumb_func_start sub_8050138 sub_8050138: @ 8050138 push {r4-r6,lr} diff --git a/data/trade.s b/data/trade.s index 763b94e96..d778318a1 100644 --- a/data/trade.s +++ b/data/trade.s @@ -809,7 +809,7 @@ gUnknown_826CF30:: @ 826CF30 gUnknown_826CF48:: @ 826CF48 spr_template 5556, 5555, gOamData_826CED0, gSpriteAnimTable_826CF24, NULL, gDummySpriteAffineAnimTable, sub_804FE00 -gUnknown_826CF60:: @ 826CF60 +gTradeGlow2PaletteAnimTable:: @ 826CF60 .2byte RGB(18, 24, 31) .2byte RGB(18, 24, 31) .2byte RGB(18, 24, 31) diff --git a/include/decompress.h b/include/decompress.h index 03080fe48..37600e8d3 100644 --- a/include/decompress.h +++ b/include/decompress.h @@ -23,7 +23,6 @@ void DecompressPicFromTable_2(const struct CompressedSpriteSheet *src, void* buf void DecompressPicFromTable_DontHandleDeoxys(const struct CompressedSpriteSheet *src, void* buffer, s32 species); void HandleLoadSpecialPokePic(const struct CompressedSpriteSheet *src, void *dest, s32 species, u32 personality); -void HandleLoadSpecialPokePic_2(const struct CompressedSpriteSheet *src, void *dest, s32 species, u32 personality); void HandleLoadSpecialPokePic_DontHandleDeoxys(const struct CompressedSpriteSheet *src, void *dest, s32 species, u32 personality); void HandleLoadSpecialPokePic(const struct CompressedSpriteSheet *src, void *dest, s32 species, u32 personality); diff --git a/include/util.h b/include/util.h index 3884ab21c..db86c184c 100644 --- a/include/util.h +++ b/include/util.h @@ -16,5 +16,6 @@ u16 CalcCRC16(const u8 *data, u32 length); u16 CalcCRC16WithTable(const u8 *data, u32 length); u32 CalcByteArraySum(const u8* data, u32 length); void BlendPalette(u16 palOffset, u16 numEntries, u8 coeff, u16 blendColor); +void DoBgAffineSet(struct BgAffineDstData * dest, u32 texX, u32 texY, s16 srcX, s16 srcY, s16 sx, s16 sy, u16 alpha); #endif // GUARD_UTIL_H diff --git a/src/trade.c b/src/trade.c index 48f559861..716b74eb5 100644 --- a/src/trade.c +++ b/src/trade.c @@ -22,6 +22,7 @@ #include "overworld.h" #include "battle_anim.h" #include "party_menu.h" +#include "util.h" #include "daycare.h" #include "event_data.h" #include "battle_interface.h" @@ -74,6 +75,52 @@ struct TradeResources /*0x08F0*/ u16 tilemapBuffer[BG_SCREEN_SIZE / 2]; }; +struct TradeResources2 { + /*0x00*/ struct Pokemon mon; + /*0x64*/ u32 timer; + /*0x68*/ u32 unk_68[2]; + /*0x70*/ u8 filler_70[2]; + /*0x72*/ u8 unk_72; + /*0x73*/ u8 unk_73; + /*0x74*/ u16 linkData[10]; + /*0x88*/ u8 unk_88; + /*0x89*/ u8 unk_89; + /*0x8A*/ u16 unk_8A; + /*0x8C*/ u16 unk_8C; + /*0x8E*/ u8 pokePicSpriteIdxs[2]; + /*0x90*/ u8 unk_90; + /*0x91*/ u8 unk_91; + /*0x92*/ u8 unk_92; + /*0x93*/ u8 unk_93; + /*0x94*/ u16 state; + /*0x96*/ u8 filler_96[0xD2 - 0x96]; + /*0xD2*/ u8 unk_D2; + /*0xD3*/ u8 unk_D3; + /*0xD4*/ u16 unk_D4; + /*0xD6*/ u16 unk_D6; + /*0xD8*/ u16 unk_D8; + /*0xDA*/ u16 unk_DA; + /*0xDC*/ u16 unk_DC; + /*0xDE*/ u16 unk_DE; + /*0xE0*/ s16 bg1vofs; + /*0xE2*/ s16 bg1hofs; + /*0xE4*/ s16 bg2vofs; + /*0xE6*/ s16 bg2hofs; + /*0xE8*/ u16 unk_E8; + /*0xEA*/ u16 unk_EA; + /*0xEC*/ u16 unk_EC; + /*0xEE*/ bool8 isLinkTrade; + /*0xF0*/ u16 tradeSpecies[2]; + /*0xF4*/ u16 cachedMapMusic; + /*0xF6*/ u8 unk_F6[3]; + /*0xF9*/ u8 filler_F9; + /*0xFA*/ u8 unk_FA; + /*0xFB*/ u8 unk_FB; + /*0xFC*/ u8 unk_FC; + /*0xFD*/ u8 unk_FD; + /*0xFE*/ u8 unk_FE; +}; + IWRAM_DATA vu16 gUnknown_3000E78; EWRAM_DATA u8 *gUnknown_2031C90 = NULL; @@ -81,7 +128,7 @@ EWRAM_DATA u8 *gUnknown_2031C94[14] = {}; EWRAM_DATA u8 gUnknown_2031CCC[216] = {}; EWRAM_DATA u8 gUnknown_2031DA4[2] = {0}; EWRAM_DATA struct TradeResources * gUnknown_2031DA8 = NULL; -EWRAM_DATA void * gUnknown_2031DAC = NULL; +EWRAM_DATA struct TradeResources2 * gUnknown_2031DAC = NULL; void sub_804C728(void); void sub_804D4F8(void); @@ -137,7 +184,7 @@ extern const u8 *const gUnknown_8261EF4[]; extern const struct SpritePalette gUnknown_8261D00; extern const struct SpritePalette gUnknown_8261C60; extern const struct SpriteSheet gUnknown_8261C58; -extern const u16 gUnknown_826CF60[]; +extern const u16 gTradeGlow2PaletteAnimTable[]; void sub_804C600(void) { @@ -3959,7 +4006,7 @@ int sub_804FCE0(struct UnkLinkRfuStruct_02022B14Substruct a0, u16 species, u16 a return 0; } -// Sprite callback for link cable transfer glow +// Sprite callback for link cable trade glow void sub_804FD24(struct Sprite * sprite) { sprite->data[0]++; @@ -3970,7 +4017,7 @@ void sub_804FD24(struct Sprite * sprite) } } -// Sprite callback for wireless transfer glow +// Sprite callback for wireless trade glow void sub_804FD48(struct Sprite * sprite) { if (!sprite->invisible) @@ -3984,7 +4031,7 @@ void sub_804FD48(struct Sprite * sprite) } } -// Palette flash for transfer glow core +// Palette flash for trade glow core void sub_804FD78(struct Sprite * sprite) { if (sprite->data[1] == 0) @@ -3992,7 +4039,7 @@ void sub_804FD78(struct Sprite * sprite) sprite->data[0]++; if (sprite->data[0] == 12) sprite->data[0] = 0; - LoadPalette(&gUnknown_826CF60[sprite->data[0]], 16 * (sprite->oam.paletteNum + 16) + 4, 2); + LoadPalette(&gTradeGlow2PaletteAnimTable[sprite->data[0]], 16 * (sprite->oam.paletteNum + 16) + 4, 2); } } @@ -4021,3 +4068,118 @@ void sub_804FE00(struct Sprite * sprite) sprite->data[0] = 0; } } + +void sub_804FE24(void) +{ + struct BgAffineDstData affine; + DoBgAffineSet(&affine, gUnknown_2031DAC->unk_D4 * 0x100, gUnknown_2031DAC->unk_D6 * 0x100, gUnknown_2031DAC->unk_DC, gUnknown_2031DAC->unk_DE, gUnknown_2031DAC->unk_E8, gUnknown_2031DAC->unk_E8, gUnknown_2031DAC->unk_EC); + SetGpuReg(REG_OFFSET_BG2PA, affine.pa); + SetGpuReg(REG_OFFSET_BG2PB, affine.pb); + SetGpuReg(REG_OFFSET_BG2PC, affine.pc); + SetGpuReg(REG_OFFSET_BG2PD, affine.pd); + SetGpuReg(REG_OFFSET_BG2X, affine.dx); + SetGpuReg(REG_OFFSET_BG2Y, affine.dy); +} + +void sub_804FEB4(void) +{ + u16 dispcnt; + + SetGpuReg(REG_OFFSET_BG1VOFS, gUnknown_2031DAC->bg1vofs); + SetGpuReg(REG_OFFSET_BG1HOFS, gUnknown_2031DAC->bg1hofs); + + dispcnt = GetGpuReg(REG_OFFSET_DISPCNT); + if ((dispcnt & 7) == DISPCNT_MODE_0) + { + SetGpuReg(REG_OFFSET_BG2VOFS, gUnknown_2031DAC->bg2vofs); + SetGpuReg(REG_OFFSET_BG2HOFS, gUnknown_2031DAC->bg2hofs); + } + else + { + sub_804FE24(); + } +} + +void sub_804FF0C(void) +{ + sub_804FEB4(); + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +void sub_804FF24(void) +{ + gUnknown_2031DAC->unk_8A = 0; + gUnknown_2031DAC->unk_88 = 0; + gUnknown_2031DAC->unk_89 = 0; +} + +void sub_804FF4C(void) +{ + if (gUnknown_2031DAC->unk_88 == gUnknown_2031DAC->unk_89) + gUnknown_2031DAC->unk_8A++; + else + gUnknown_2031DAC->unk_8A = 0; + + if (gUnknown_2031DAC->unk_8A > 300) + { + CloseLink(); + SetMainCallback2(CB2_LinkError); + gUnknown_2031DAC->unk_8A = 0; + gUnknown_2031DAC->unk_89 = 0; + gUnknown_2031DAC->unk_88 = 0; + } + + gUnknown_2031DAC->unk_89 = gUnknown_2031DAC->unk_88; +} + +u32 sub_804FFC4(void) +{ + if (gReceivedRemoteLinkPlayers) + return GetMultiplayerId(); + return 0; +} + +void sub_804FFE4(u8 whichParty, u8 a1) +{ + int pos = 0; + struct Pokemon *mon = NULL; + u16 species; + u32 personality; + + if (whichParty == 0) + { + mon = &gPlayerParty[gUnknown_2031DA4[0]]; + pos = 1; + } + + if (whichParty == 1) + { + mon = &gEnemyParty[gUnknown_2031DA4[1] % PARTY_SIZE]; + pos = 3; + } + + switch (a1) + { + case 0: + species = GetMonData(mon, MON_DATA_SPECIES2); + personality = GetMonData(mon, MON_DATA_PERSONALITY); + + if (whichParty == 0) + HandleLoadSpecialPokePic(&gMonFrontPicTable[species], gMonSpritesGfxPtr->sprites[1], species, personality); + else + HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonFrontPicTable[species], gMonSpritesGfxPtr->sprites[whichParty * 2 + 1], species, personality); + + LoadCompressedSpritePalette(GetMonSpritePalStruct(mon)); + gUnknown_2031DAC->tradeSpecies[whichParty] = species; + gUnknown_2031DAC->unk_68[whichParty] = personality; + break; + case 1: + SetMultiuseSpriteTemplateToPokemon(GetMonSpritePalStruct(mon)->tag, pos); + gUnknown_2031DAC->pokePicSpriteIdxs[whichParty] = CreateSprite(&gMultiuseSpriteTemplate, 120, 60, 6); + gSprites[gUnknown_2031DAC->pokePicSpriteIdxs[whichParty]].invisible = TRUE; + gSprites[gUnknown_2031DAC->pokePicSpriteIdxs[whichParty]].callback = SpriteCallbackDummy; + break; + } +} -- cgit v1.2.3 From 316337b031d35d89db0f2ad939972588cae291bd Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 29 Oct 2019 17:05:56 -0400 Subject: trade partway through sub_8050968 --- asm/link_rfu_3.s | 8 +- asm/party_menu.s | 2 +- asm/trade.s | 1325 ++++++++------------------------------------------- data/data_83FECCC.s | 10 +- data/strings.s | 21 +- data/trade.s | 32 +- src/trade.c | 1257 ++++++++++++++++++++++++++++++++---------------- 7 files changed, 1083 insertions(+), 1572 deletions(-) diff --git a/asm/link_rfu_3.s b/asm/link_rfu_3.s index 9fc1f72cc..eac4dcb4d 100644 --- a/asm/link_rfu_3.s +++ b/asm/link_rfu_3.s @@ -3070,7 +3070,7 @@ _08117210: lsrs r0, 24 cmp r0, 0x3 bne _0811725C - ldr r4, _08117268 @ =gUnknown_2031CCC + ldr r4, _08117268 @ =gLinkPartnerMail bl GetMultiplayerId adds r1, r0, 0 movs r0, 0x1 @@ -3090,7 +3090,7 @@ _08117210: ldr r1, _08117274 @ =gMain ldr r0, _08117278 @ =CB2_ReturnToField str r0, [r1, 0x8] - ldr r0, _0811727C @ =sub_8050138 + ldr r0, _0811727C @ =CB2_InitTradeAnim_LinkTrade bl SetMainCallback2 mov r0, r8 bl sub_811B148 @@ -3103,12 +3103,12 @@ _0811725C: pop {r0} bx r0 .align 2, 0 -_08117268: .4byte gUnknown_2031CCC +_08117268: .4byte gLinkPartnerMail _0811726C: .4byte gBlockRecvBuffer _08117270: .4byte gUnknown_2031DA4 _08117274: .4byte gMain _08117278: .4byte CB2_ReturnToField -_0811727C: .4byte sub_8050138 +_0811727C: .4byte CB2_InitTradeAnim_LinkTrade thumb_func_end sub_8117130 thumb_func_start sub_8117280 diff --git a/asm/party_menu.s b/asm/party_menu.s index b10cfa8f5..91e19ebf2 100644 --- a/asm/party_menu.s +++ b/asm/party_menu.s @@ -11407,7 +11407,7 @@ sub_8124384: @ 8124384 adds r1, r6, 0 adds r2, r5, 0 adds r3, r4, 0 - bl sub_804FCE0 + bl Trade_CanTradeSelectedMon cmp r0, 0x1 beq _08124418 cmp r0, 0x2 diff --git a/asm/trade.s b/asm/trade.s index bcb88fdb7..f13118ef6 100644 --- a/asm/trade.s +++ b/asm/trade.s @@ -5,937 +5,6 @@ .text - thumb_func_start sub_8050138 -sub_8050138: @ 8050138 - push {r4-r6,lr} - sub sp, 0x4 - ldr r1, _08050158 @ =gMain - movs r2, 0x87 - lsls r2, 3 - adds r0, r1, r2 - ldrb r0, [r0] - adds r2, r1, 0 - cmp r0, 0xC - bls _0805014E - b _08050472 -_0805014E: - lsls r0, 2 - ldr r1, _0805015C @ =_08050160 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08050158: .4byte gMain -_0805015C: .4byte _08050160 - .align 2, 0 -_08050160: - .4byte _08050194 - .4byte _08050240 - .4byte _08050288 - .4byte _080502A8 - .4byte _080502F2 - .4byte _08050320 - .4byte _08050344 - .4byte _0805035C - .4byte _08050366 - .4byte _08050380 - .4byte _0805039C - .4byte _08050430 - .4byte _0805044C -_08050194: - ldr r0, _08050228 @ =gReceivedRemoteLinkPlayers - ldrb r0, [r0] - cmp r0, 0 - bne _080501A8 - ldr r1, _0805022C @ =gLinkType - ldr r2, _08050230 @ =0x00001144 - adds r0, r2, 0 - strh r0, [r1] - bl CloseLink -_080501A8: - ldr r4, _08050234 @ =gUnknown_2031DAC - movs r0, 0x88 - lsls r0, 1 - bl AllocZeroed - str r0, [r4] - bl AllocateMonSpritesGfx - bl ResetTasks - bl ResetSpriteData - bl FreeAllSpritePalettes - ldr r0, _08050238 @ =sub_804FF0C - bl SetVBlankCallback - bl sub_80504CC - bl sub_804FF24 - ldr r1, _0805023C @ =gMain - movs r0, 0x87 - lsls r0, 3 - adds r1, r0 - ldrb r0, [r1] - adds r0, 0x1 - movs r2, 0 - strb r0, [r1] - ldr r1, [r4] - adds r0, r1, 0 - adds r0, 0x8C - strh r2, [r0] - adds r0, 0x8 - strh r2, [r0] - adds r1, 0xEE - movs r0, 0x1 - strb r0, [r1] - ldr r3, [r4] - adds r0, r3, 0 - adds r0, 0xD4 - movs r1, 0x40 - strh r1, [r0] - adds r0, 0x2 - strh r1, [r0] - adds r0, 0x2 - strh r2, [r0] - adds r0, 0x2 - strh r2, [r0] - adds r1, r3, 0 - adds r1, 0xDC - movs r0, 0x78 - strh r0, [r1] - adds r1, 0x2 - movs r0, 0x50 - strh r0, [r1] - adds r1, 0xA - adds r0, 0xB0 - strh r0, [r1] - adds r0, r3, 0 - adds r0, 0xEC - strh r2, [r0] - b _08050472 - .align 2, 0 -_08050228: .4byte gReceivedRemoteLinkPlayers -_0805022C: .4byte gLinkType -_08050230: .4byte 0x00001144 -_08050234: .4byte gUnknown_2031DAC -_08050238: .4byte sub_804FF0C -_0805023C: .4byte gMain -_08050240: - ldr r0, _08050270 @ =gReceivedRemoteLinkPlayers - ldrb r5, [r0] - cmp r5, 0 - bne _0805027C - ldr r4, _08050274 @ =gUnknown_2031DAC - ldr r0, [r4] - movs r1, 0x84 - lsls r1, 1 - adds r0, r1 - movs r1, 0x1 - strb r1, [r0] - bl OpenLink - ldr r1, _08050278 @ =gMain - movs r2, 0x87 - lsls r2, 3 - adds r1, r2 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - ldr r0, [r4] - str r5, [r0, 0x64] - b _08050472 - .align 2, 0 -_08050270: .4byte gReceivedRemoteLinkPlayers -_08050274: .4byte gUnknown_2031DAC -_08050278: .4byte gMain -_0805027C: - movs r0, 0x87 - lsls r0, 3 - adds r1, r2, r0 - movs r0, 0x4 - strb r0, [r1] - b _08050472 -_08050288: - ldr r0, _080502A4 @ =gUnknown_2031DAC - ldr r1, [r0] - ldr r0, [r1, 0x64] - adds r0, 0x1 - str r0, [r1, 0x64] - cmp r0, 0x3C - bhi _08050298 - b _08050472 -_08050298: - movs r0, 0 - str r0, [r1, 0x64] - movs r0, 0x87 - lsls r0, 3 - adds r1, r2, r0 - b _08050440 - .align 2, 0 -_080502A4: .4byte gUnknown_2031DAC -_080502A8: - bl IsLinkMaster - lsls r0, 24 - cmp r0, 0 - bne _080502B4 - b _08050438 -_080502B4: - bl GetLinkPlayerCount_2 - adds r4, r0, 0 - bl GetSavedPlayerCount - lsls r4, 24 - lsls r0, 24 - cmp r4, r0 - bcc _080502EC - ldr r0, _080502E4 @ =gUnknown_2031DAC - ldr r1, [r0] - ldr r0, [r1, 0x64] - adds r0, 0x1 - str r0, [r1, 0x64] - cmp r0, 0x1E - bhi _080502D6 - b _08050472 -_080502D6: - bl CheckShouldAdvanceLinkState - ldr r1, _080502E8 @ =gMain - movs r2, 0x87 - lsls r2, 3 - adds r1, r2 - b _08050440 - .align 2, 0 -_080502E4: .4byte gUnknown_2031DAC -_080502E8: .4byte gMain -_080502EC: - bl sub_804FF4C - b _08050472 -_080502F2: - bl sub_804FF4C - ldr r0, _08050318 @ =gReceivedRemoteLinkPlayers - ldrb r0, [r0] - cmp r0, 0x1 - beq _08050300 - b _08050472 -_08050300: - bl IsLinkPlayerDataExchangeComplete - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _0805030E - b _08050472 -_0805030E: - ldr r1, _0805031C @ =gMain - movs r2, 0x87 - lsls r2, 3 - adds r1, r2 - b _08050440 - .align 2, 0 -_08050318: .4byte gReceivedRemoteLinkPlayers -_0805031C: .4byte gMain -_08050320: - ldr r2, _08050340 @ =gUnknown_2031DAC - ldr r0, [r2] - adds r0, 0x72 - movs r1, 0 - strb r1, [r0] - ldr r0, [r2] - adds r0, 0x73 - strb r1, [r0] - ldr r0, [r2] - adds r0, 0x93 - strb r1, [r0] - movs r0, 0 - bl sub_804FFE4 - b _08050438 - .align 2, 0 -_08050340: .4byte gUnknown_2031DAC -_08050344: - movs r0, 0 - movs r1, 0x1 - bl sub_804FFE4 - ldr r1, _08050358 @ =gMain - movs r2, 0x87 - lsls r2, 3 - adds r1, r2 - b _08050440 - .align 2, 0 -_08050358: .4byte gMain -_0805035C: - movs r0, 0x1 - movs r1, 0 - bl sub_804FFE4 - b _08050438 -_08050366: - movs r0, 0x1 - movs r1, 0x1 - bl sub_804FFE4 - bl sub_80504B0 - ldr r1, _0805037C @ =gMain - movs r2, 0x87 - lsls r2, 3 - adds r1, r2 - b _08050440 - .align 2, 0 -_0805037C: .4byte gMain -_08050380: - bl sub_8050DE0 - ldr r0, _08050394 @ =gUnknown_826CDD4 - bl LoadSpriteSheet - ldr r0, _08050398 @ =gUnknown_826CDDC - bl LoadSpritePalette - b _08050438 - .align 2, 0 -_08050394: .4byte gUnknown_826CDD4 -_08050398: .4byte gUnknown_826CDDC -_0805039C: - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0x10 - movs r3, 0 - bl BeginNormalPaletteFade - movs r0, 0 - bl ShowBg - ldr r4, _08050418 @ =gUnknown_2031DA4 - ldrb r0, [r4] - movs r6, 0x64 - muls r0, r6 - ldr r1, _0805041C @ =gPlayerParty - adds r0, r1 - movs r1, 0x41 - bl GetMonData - ldr r5, _08050420 @ =gUnknown_2031DAC - ldr r1, [r5] - adds r1, 0xF8 - strh r0, [r1] - ldrb r0, [r4, 0x1] - movs r1, 0x6 - bl __umodsi3 - lsls r0, 24 - lsrs r0, 24 - muls r0, r6 - ldr r1, _08050424 @ =gEnemyParty - adds r0, r1 - movs r1, 0x41 - bl GetMonData - ldr r4, [r5] - adds r1, r4, 0 - adds r1, 0xFA - strh r0, [r1] - adds r4, 0xFC - bl GetMultiplayerId - movs r1, 0x1 - eors r0, r1 - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 3 - subs r1, r0 - lsls r1, 2 - ldr r0, _08050428 @ =gLinkPlayers + 8 - adds r1, r0 - adds r0, r4, 0 - movs r2, 0x7 - bl memcpy - ldr r1, _0805042C @ =gMain - movs r2, 0x87 - lsls r2, 3 - adds r1, r2 - b _08050440 - .align 2, 0 -_08050418: .4byte gUnknown_2031DA4 -_0805041C: .4byte gPlayerParty -_08050420: .4byte gUnknown_2031DAC -_08050424: .4byte gEnemyParty -_08050428: .4byte gLinkPlayers + 8 -_0805042C: .4byte gMain -_08050430: - bl sub_805049C - bl sub_8050E24 -_08050438: - ldr r1, _08050448 @ =gMain - movs r0, 0x87 - lsls r0, 3 - adds r1, r0 -_08050440: - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - b _08050472 - .align 2, 0 -_08050448: .4byte gMain -_0805044C: - ldr r0, _08050490 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _08050472 - ldr r0, _08050494 @ =gWirelessCommType - ldrb r0, [r0] - cmp r0, 0 - beq _0805046C - bl LoadWirelessStatusIndicatorSpriteGfx - movs r0, 0 - movs r1, 0 - bl CreateWirelessStatusIndicatorSprite -_0805046C: - ldr r0, _08050498 @ =sub_8053D84 - bl SetMainCallback2 -_08050472: - bl RunTasks - bl RunTextPrinters - bl AnimateSprites - bl BuildOamBuffer - bl UpdatePaletteFade - add sp, 0x4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08050490: .4byte gPaletteFade -_08050494: .4byte gWirelessCommType -_08050498: .4byte sub_8053D84 - thumb_func_end sub_8050138 - - thumb_func_start sub_805049C -sub_805049C: @ 805049C - push {lr} - movs r0, 0x5 - bl sub_8050968 - movs r0, 0 - bl sub_8050968 - pop {r0} - bx r0 - thumb_func_end sub_805049C - - thumb_func_start sub_80504B0 -sub_80504B0: @ 80504B0 - push {lr} - movs r0, 0 - movs r1, 0xFF - bl FillWindowPixelBuffer - movs r0, 0 - bl PutWindowTilemap - movs r0, 0 - movs r1, 0x3 - bl CopyWindowToVram - pop {r0} - bx r0 - thumb_func_end sub_80504B0 - - thumb_func_start sub_80504CC -sub_80504CC: @ 80504CC - push {r4-r6,lr} - mov r6, r10 - mov r5, r9 - mov r4, r8 - push {r4-r6} - sub sp, 0x4 - movs r0, 0 - movs r1, 0 - bl SetGpuReg - movs r0, 0 - bl ResetBgsAndClearDma3BusyFlags - ldr r1, _080505B4 @ =gUnknown_826D1D4 - movs r0, 0 - movs r2, 0x4 - bl InitBgsFromTemplates - movs r0, 0 - movs r1, 0 - movs r2, 0 - bl ChangeBgX - movs r0, 0 - movs r1, 0 - movs r2, 0 - bl ChangeBgY - movs r5, 0x80 - lsls r5, 4 - adds r0, r5, 0 - bl Alloc - adds r1, r0, 0 - movs r0, 0 - bl SetBgTilemapBuffer - adds r0, r5, 0 - bl Alloc - adds r1, r0, 0 - movs r0, 0x1 - bl SetBgTilemapBuffer - adds r0, r5, 0 - bl Alloc - adds r1, r0, 0 - movs r0, 0x3 - bl SetBgTilemapBuffer - bl DeactivateAllTextPrinters - ldr r0, _080505B8 @ =gBattleTextboxTiles - mov r10, r0 - movs r0, 0 - mov r9, r0 - str r0, [sp] - mov r1, r10 - movs r2, 0 - movs r3, 0 - bl DecompressAndLoadBgGfxUsingHeap - ldr r0, _080505BC @ =gFile_graphics_interface_menu_map_tilemap - mov r8, r0 - ldr r4, _080505C0 @ =gDecompressionBuffer - adds r1, r4, 0 - bl LZDecompressWram - movs r0, 0 - adds r1, r4, 0 - adds r2, r5, 0 - movs r3, 0 - bl CopyToBgTilemapBuffer - ldr r6, _080505C4 @ =gBattleTextboxPalette - adds r0, r6, 0 - movs r1, 0 - movs r2, 0x20 - bl LoadCompressedPalette - ldr r0, _080505C8 @ =gUnknown_826D1BC - bl InitWindows - mov r0, r9 - str r0, [sp] - movs r0, 0 - mov r1, r10 - movs r2, 0 - movs r3, 0 - bl DecompressAndLoadBgGfxUsingHeap - mov r0, r8 - adds r1, r4, 0 - bl LZDecompressWram - movs r0, 0 - adds r1, r4, 0 - adds r2, r5, 0 - movs r3, 0 - bl CopyToBgTilemapBuffer - adds r0, r6, 0 - movs r1, 0 - movs r2, 0x20 - bl LoadCompressedPalette - add sp, 0x4 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080505B4: .4byte gUnknown_826D1D4 -_080505B8: .4byte gBattleTextboxTiles -_080505BC: .4byte gFile_graphics_interface_menu_map_tilemap -_080505C0: .4byte gDecompressionBuffer -_080505C4: .4byte gBattleTextboxPalette -_080505C8: .4byte gUnknown_826D1BC - thumb_func_end sub_80504CC - - thumb_func_start sub_80505CC -sub_80505CC: @ 80505CC - push {r4,r5,lr} - sub sp, 0xC - ldr r0, _080505EC @ =gMain - movs r1, 0x87 - lsls r1, 3 - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0xC - bls _080505E0 - b _0805077E -_080505E0: - lsls r0, 2 - ldr r1, _080505F0 @ =_080505F4 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080505EC: .4byte gMain -_080505F0: .4byte _080505F4 - .align 2, 0 -_080505F4: - .4byte _08050628 - .4byte _0805077E - .4byte _0805077E - .4byte _0805077E - .4byte _0805077E - .4byte _080506EC - .4byte _080506F6 - .4byte _08050700 - .4byte _08050710 - .4byte _08050730 - .4byte _0805074C - .4byte _08050754 - .4byte _08050778 -_08050628: - ldr r1, _080506CC @ =gUnknown_2031DA4 - ldr r0, _080506D0 @ =gSpecialVar_0x8005 - ldrh r0, [r0] - movs r5, 0 - strb r0, [r1] - movs r0, 0x6 - strb r0, [r1, 0x1] - ldr r4, _080506D4 @ =gLinkPlayers + 8 - ldr r0, _080506D8 @ =gSaveBlock2Ptr - ldr r1, [r0] - adds r0, r4, 0 - bl StringCopy - ldr r0, _080506DC @ =gEnemyParty - movs r1, 0x7 - mov r2, sp - bl GetMonData - adds r4, 0x1C - adds r0, r4, 0 - mov r1, sp - bl StringCopy - ldr r4, _080506E0 @ =gUnknown_2031DAC - movs r0, 0x88 - lsls r0, 1 - bl AllocZeroed - str r0, [r4] - bl AllocateMonSpritesGfx - bl ResetTasks - bl ResetSpriteData - bl FreeAllSpritePalettes - ldr r0, _080506E4 @ =sub_804FF0C - bl SetVBlankCallback - bl sub_80504CC - ldr r0, [r4] - adds r0, 0xEE - strb r5, [r0] - ldr r2, [r4] - adds r0, r2, 0 - adds r0, 0x8C - strh r5, [r0] - adds r0, 0x8 - strh r5, [r0] - adds r0, 0x40 - movs r1, 0x40 - strh r1, [r0] - adds r0, 0x2 - strh r1, [r0] - adds r0, 0x2 - strh r5, [r0] - adds r0, 0x2 - strh r5, [r0] - adds r1, r2, 0 - adds r1, 0xDC - movs r0, 0x78 - strh r0, [r1] - adds r1, 0x2 - movs r0, 0x50 - strh r0, [r1] - adds r1, 0xA - adds r0, 0xB0 - strh r0, [r1] - adds r0, r2, 0 - adds r0, 0xEC - strh r5, [r0] - str r5, [r2, 0x64] - ldr r0, _080506E8 @ =gMain - movs r1, 0x87 - lsls r1, 3 - adds r0, r1 - movs r1, 0x5 - strb r1, [r0] - b _0805077E - .align 2, 0 -_080506CC: .4byte gUnknown_2031DA4 -_080506D0: .4byte gSpecialVar_0x8005 -_080506D4: .4byte gLinkPlayers + 8 -_080506D8: .4byte gSaveBlock2Ptr -_080506DC: .4byte gEnemyParty -_080506E0: .4byte gUnknown_2031DAC -_080506E4: .4byte sub_804FF0C -_080506E8: .4byte gMain -_080506EC: - movs r0, 0 - movs r1, 0 - bl sub_804FFE4 - b _08050764 -_080506F6: - movs r0, 0 - movs r1, 0x1 - bl sub_804FFE4 - b _08050764 -_08050700: - movs r0, 0x1 - movs r1, 0 - bl sub_804FFE4 - movs r0, 0 - bl ShowBg - b _08050764 -_08050710: - movs r0, 0x1 - movs r1, 0x1 - bl sub_804FFE4 - movs r0, 0 - movs r1, 0xFF - bl FillWindowPixelBuffer - movs r0, 0 - bl PutWindowTilemap - movs r0, 0 - movs r1, 0x3 - bl CopyWindowToVram - b _08050764 -_08050730: - bl sub_8050DE0 - ldr r0, _08050744 @ =gUnknown_826CDD4 - bl LoadSpriteSheet - ldr r0, _08050748 @ =gUnknown_826CDDC - bl LoadSpritePalette - b _08050764 - .align 2, 0 -_08050744: .4byte gUnknown_826CDD4 -_08050748: .4byte gUnknown_826CDDC -_0805074C: - movs r0, 0 - bl ShowBg - b _08050764 -_08050754: - movs r0, 0x5 - bl sub_8050968 - movs r0, 0 - bl sub_8050968 - bl sub_8050E24 -_08050764: - ldr r1, _08050774 @ =gMain - movs r0, 0x87 - lsls r0, 3 - adds r1, r0 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - b _0805077E - .align 2, 0 -_08050774: .4byte gMain -_08050778: - ldr r0, _0805079C @ =sub_8050948 - bl SetMainCallback2 -_0805077E: - bl RunTasks - bl RunTextPrinters - bl AnimateSprites - bl BuildOamBuffer - bl UpdatePaletteFade - add sp, 0xC - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0805079C: .4byte sub_8050948 - thumb_func_end sub_80505CC - - thumb_func_start sub_80507A0 -sub_80507A0: @ 80507A0 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x64 - muls r1, r0 - ldr r0, _080507FC @ =gPlayerParty - adds r5, r1, r0 - adds r0, r5, 0 - movs r1, 0x2D - bl GetMonData - cmp r0, 0 - bne _080507F4 - adds r0, r5, 0 - movs r1, 0xB - movs r2, 0 - bl GetMonData - adds r4, r0, 0 - lsls r4, 16 - lsrs r4, 16 - adds r0, r5, 0 - movs r1, 0 - movs r2, 0 - bl GetMonData - adds r5, r0, 0 - adds r0, r4, 0 - bl SpeciesToNationalPokedexNum - adds r4, r0, 0 - lsls r4, 16 - lsrs r4, 16 - adds r0, r4, 0 - movs r1, 0x2 - bl GetSetPokedexFlag - adds r0, r4, 0 - movs r1, 0x3 - adds r2, r5, 0 - bl HandleSetPokedexFlag -_080507F4: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080507FC: .4byte gPlayerParty - thumb_func_end sub_80507A0 - - thumb_func_start sub_8050800 -sub_8050800: @ 8050800 - push {lr} - bl GetMultiplayerId - pop {r0} - bx r0 - thumb_func_end sub_8050800 - - thumb_func_start sub_805080C -sub_805080C: @ 805080C - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x4 - adds r4, r1, 0 - lsls r0, 24 - lsrs r0, 24 - mov r9, r0 - lsls r4, 24 - lsrs r4, 24 - movs r5, 0x64 - mov r1, r9 - muls r1, r5 - ldr r0, _080508D8 @ =gPlayerParty - adds r7, r1, r0 - adds r0, r7, 0 - movs r1, 0x40 - bl GetMonData - lsls r0, 16 - lsrs r6, r0, 16 - adds r1, r4, 0 - muls r1, r5 - ldr r0, _080508DC @ =gEnemyParty - adds r5, r1, r0 - adds r0, r5, 0 - movs r1, 0x40 - bl GetMonData - lsls r0, 16 - lsrs r0, 16 - mov r8, r0 - cmp r6, 0xFF - beq _08050866 - ldr r0, _080508E0 @ =gSaveBlock1Ptr - lsls r1, r6, 3 - adds r1, r6 - lsls r1, 2 - ldr r2, _080508E4 @ =0x00002cd0 - adds r1, r2 - ldr r0, [r0] - adds r0, r1 - bl ClearMailStruct -_08050866: - ldr r4, _080508E8 @ =gUnknown_2031DAC - ldr r0, [r4] - adds r1, r7, 0 - movs r2, 0x64 - bl memcpy - adds r0, r7, 0 - adds r1, r5, 0 - movs r2, 0x64 - bl memcpy - ldr r1, [r4] - adds r0, r5, 0 - movs r2, 0x64 - bl memcpy - movs r1, 0x46 - mov r0, sp - strb r1, [r0] - adds r0, r7, 0 - movs r1, 0x2D - bl GetMonData - cmp r0, 0 - bne _080508A2 - adds r0, r7, 0 - movs r1, 0x20 - mov r2, sp - bl SetMonData -_080508A2: - mov r0, r8 - cmp r0, 0xFF - beq _080508B8 - lsls r1, r0, 3 - add r1, r8 - lsls r1, 2 - ldr r0, _080508EC @ =gUnknown_2031CCC - adds r1, r0 - adds r0, r7, 0 - bl GiveMailToMon2 -_080508B8: - mov r0, r9 - bl sub_80507A0 - ldr r0, _080508F0 @ =gReceivedRemoteLinkPlayers - ldrb r0, [r0] - cmp r0, 0 - beq _080508CA - bl sub_8050800 -_080508CA: - add sp, 0x4 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080508D8: .4byte gPlayerParty -_080508DC: .4byte gEnemyParty -_080508E0: .4byte gSaveBlock1Ptr -_080508E4: .4byte 0x00002cd0 -_080508E8: .4byte gUnknown_2031DAC -_080508EC: .4byte gUnknown_2031CCC -_080508F0: .4byte gReceivedRemoteLinkPlayers - thumb_func_end sub_805080C - - thumb_func_start sub_80508F4 -sub_80508F4: @ 80508F4 - push {r4,lr} - ldr r4, _08050908 @ =gUnknown_2031DAC - ldr r0, [r4] - adds r0, 0x93 - ldrb r0, [r0] - cmp r0, 0x1 - beq _0805090C - cmp r0, 0x2 - beq _08050932 - b _0805093C - .align 2, 0 -_08050908: .4byte gUnknown_2031DAC -_0805090C: - bl IsLinkTaskFinished - lsls r0, 24 - cmp r0, 0 - beq _08050932 - bl bitmask_all_link_players_but_self - lsls r0, 24 - lsrs r0, 24 - ldr r1, [r4] - adds r1, 0x74 - movs r2, 0x14 - bl SendBlock - ldr r1, [r4] - adds r1, 0x93 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] -_08050932: - ldr r0, _08050944 @ =gUnknown_2031DAC - ldr r0, [r0] - adds r0, 0x93 - movs r1, 0 - strb r1, [r0] -_0805093C: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08050944: .4byte gUnknown_2031DAC - thumb_func_end sub_80508F4 - - thumb_func_start sub_8050948 -sub_8050948: @ 8050948 - push {lr} - bl sub_8050F14 - bl RunTasks - bl RunTextPrinters - bl AnimateSprites - bl BuildOamBuffer - bl UpdatePaletteFade - pop {r0} - bx r0 - thumb_func_end sub_8050948 - thumb_func_start sub_8050968 sub_8050968: @ 8050968 push {r4-r7,lr} @@ -963,7 +32,7 @@ _08050984: .4byte _08050C6C .4byte _08050D48 _080509A4: - ldr r0, _080509FC @ =gUnknown_2031DAC + ldr r0, _080509FC @ =sTradeAnimationResourcesPtr ldr r1, [r0] adds r2, r1, 0 adds r2, 0xE4 @@ -1005,7 +74,7 @@ _080509E6: bhi _080509E6 b _08050D98 .align 2, 0 -_080509FC: .4byte gUnknown_2031DAC +_080509FC: .4byte sTradeAnimationResourcesPtr _08050A00: .4byte 0x00005206 _08050A04: .4byte gTradeGba2_Pal _08050A08: .4byte gTradeGba_Gfx @@ -1013,7 +82,7 @@ _08050A0C: .4byte 0x06004000 _08050A10: .4byte 0x040000d4 _08050A14: .4byte 0x80000800 _08050A18: - ldr r4, _08050A54 @ =gUnknown_2031DAC + ldr r4, _08050A54 @ =sTradeAnimationResourcesPtr ldr r2, [r4] adds r1, r2, 0 adds r1, 0xE2 @@ -1041,7 +110,7 @@ _08050A18: ldr r1, _08050A60 @ =gUnknown_826AA5C b _08050A66 .align 2, 0 -_08050A54: .4byte gUnknown_2031DAC +_08050A54: .4byte sTradeAnimationResourcesPtr _08050A58: .4byte 0x00008502 _08050A5C: .4byte 0x00009206 _08050A60: .4byte gUnknown_826AA5C @@ -1092,7 +161,7 @@ _08050AB8: .4byte 0x040000d4 _08050ABC: .4byte 0x80000800 _08050AC0: .4byte gTradeGba_Gfx _08050AC4: - ldr r0, _08050AF4 @ =gUnknown_2031DAC + ldr r0, _08050AF4 @ =sTradeAnimationResourcesPtr ldr r2, [r0] adds r0, r2, 0 adds r0, 0xE0 @@ -1115,7 +184,7 @@ _08050AC4: movs r0, 0x8 b _08050B1E .align 2, 0 -_08050AF4: .4byte gUnknown_2031DAC +_08050AF4: .4byte sTradeAnimationResourcesPtr _08050AF8: .4byte 0x00001241 _08050AFC: .4byte gUnknown_3379A0Bin _08050B00: .4byte 0x06002800 @@ -1154,7 +223,7 @@ _08050B3C: ldr r0, _08050B78 @ =gUnknown_826C60C ldr r1, _08050B7C @ =0x06009000 bl LZ77UnCompVram - ldr r0, _08050B80 @ =gUnknown_2031DAC + ldr r0, _08050B80 @ =sTradeAnimationResourcesPtr ldr r0, [r0] adds r0, 0xE4 movs r1, 0x50 @@ -1171,7 +240,7 @@ _08050B70: .4byte gWirelessSignal4bpp _08050B74: .4byte 0x06004000 _08050B78: .4byte gUnknown_826C60C _08050B7C: .4byte 0x06009000 -_08050B80: .4byte gUnknown_2031DAC +_08050B80: .4byte sTradeAnimationResourcesPtr _08050B84: ldr r1, _08050C0C @ =0x00001441 movs r0, 0 @@ -1179,7 +248,7 @@ _08050B84: ldr r1, _08050C10 @ =0x00001287 movs r0, 0xC bl SetGpuReg - ldr r0, _08050C14 @ =gUnknown_2031DAC + ldr r0, _08050C14 @ =sTradeAnimationResourcesPtr ldr r3, [r0] adds r1, r3, 0 adds r1, 0xD4 @@ -1225,7 +294,7 @@ _08050BD0: orrs r0, r7 str r0, [r1, 0x8] ldr r0, [r1, 0x8] - ldr r0, _08050C14 @ =gUnknown_2031DAC + ldr r0, _08050C14 @ =sTradeAnimationResourcesPtr ldr r0, [r0] movs r1, 0x84 lsls r1, 1 @@ -1243,7 +312,7 @@ _08050BD0: .align 2, 0 _08050C0C: .4byte 0x00001441 _08050C10: .4byte 0x00001287 -_08050C14: .4byte gUnknown_2031DAC +_08050C14: .4byte sTradeAnimationResourcesPtr _08050C18: .4byte gUnknown_826701C _08050C1C: .4byte 0x06004000 _08050C20: .4byte 0x040000d4 @@ -1265,7 +334,7 @@ _08050C48: .4byte 0x06009000 _08050C4C: .4byte 0x040000d4 _08050C50: .4byte 0x80000080 _08050C54: - ldr r0, _08050C68 @ =gUnknown_2031DAC + ldr r0, _08050C68 @ =sTradeAnimationResourcesPtr ldr r0, [r0] adds r1, r0, 0 adds r1, 0xE0 @@ -1275,7 +344,7 @@ _08050C54: strh r2, [r0] b _08050DB4 .align 2, 0 -_08050C68: .4byte gUnknown_2031DAC +_08050C68: .4byte sTradeAnimationResourcesPtr _08050C6C: ldr r1, _08050D00 @ =0x00001441 movs r0, 0 @@ -1283,7 +352,7 @@ _08050C6C: ldr r1, _08050D04 @ =0x00001287 movs r0, 0xC bl SetGpuReg - ldr r0, _08050D08 @ =gUnknown_2031DAC + ldr r0, _08050D08 @ =sTradeAnimationResourcesPtr ldr r3, [r0] adds r1, r3, 0 adds r1, 0xD4 @@ -1334,7 +403,7 @@ _08050CC2: orrs r0, r7 str r0, [r1, 0x8] ldr r0, [r1, 0x8] - ldr r0, _08050D08 @ =gUnknown_2031DAC + ldr r0, _08050D08 @ =sTradeAnimationResourcesPtr ldr r0, [r0] movs r1, 0x84 lsls r1, 1 @@ -1352,7 +421,7 @@ _08050CC2: .align 2, 0 _08050D00: .4byte 0x00001441 _08050D04: .4byte 0x00001287 -_08050D08: .4byte gUnknown_2031DAC +_08050D08: .4byte sTradeAnimationResourcesPtr _08050D0C: .4byte gUnknown_826701C _08050D10: .4byte 0x06004000 _08050D14: .4byte 0x040000d4 @@ -1374,7 +443,7 @@ _08050D3C: .4byte 0x06009000 _08050D40: .4byte 0x040000d4 _08050D44: .4byte 0x80000080 _08050D48: - ldr r0, _08050DBC @ =gUnknown_2031DAC + ldr r0, _08050DBC @ =sTradeAnimationResourcesPtr ldr r0, [r0] adds r1, r0, 0 adds r1, 0xE4 @@ -1433,7 +502,7 @@ _08050DB4: pop {r0} bx r0 .align 2, 0 -_08050DBC: .4byte gUnknown_2031DAC +_08050DBC: .4byte sTradeAnimationResourcesPtr _08050DC0: .4byte 0x00005206 _08050DC4: .4byte gTradeGba2_Pal _08050DC8: .4byte gTradeGba_Gfx @@ -1474,7 +543,7 @@ _08050E20: .4byte gUnknown_826CE3C sub_8050E24: @ 8050E24 push {r4,r5,lr} sub sp, 0x14 - ldr r0, _08050E94 @ =gUnknown_2031DAC + ldr r0, _08050E94 @ =sTradeAnimationResourcesPtr ldr r0, [r0] adds r0, 0xEE ldrb r0, [r0] @@ -1522,7 +591,7 @@ sub_8050E24: @ 8050E24 bl StringCopy10 b _08050EF0 .align 2, 0 -_08050E94: .4byte gUnknown_2031DAC +_08050E94: .4byte sTradeAnimationResourcesPtr _08050E98: .4byte gStringVar1 _08050E9C: .4byte gLinkPlayers + 8 _08050EA0: .4byte gUnknown_2031DA4 @@ -1575,7 +644,7 @@ _08050F10: .4byte gStringVar2 thumb_func_start sub_8050F14 sub_8050F14: @ 8050F14 push {lr} - ldr r0, _08050F2C @ =gUnknown_2031DAC + ldr r0, _08050F2C @ =sTradeAnimationResourcesPtr ldr r0, [r0] movs r1, 0x84 lsls r1, 1 @@ -1586,7 +655,7 @@ sub_8050F14: @ 8050F14 bl sub_805232C b _08050F34 .align 2, 0 -_08050F2C: .4byte gUnknown_2031DAC +_08050F2C: .4byte sTradeAnimationResourcesPtr _08050F30: bl sub_8050F3C _08050F34: @@ -1600,7 +669,7 @@ _08050F34: sub_8050F3C: @ 8050F3C push {r4-r7,lr} sub sp, 0x10 - ldr r0, _08050F60 @ =gUnknown_2031DAC + ldr r0, _08050F60 @ =sTradeAnimationResourcesPtr ldr r1, [r0] adds r1, 0x94 ldrh r5, [r1] @@ -1616,7 +685,7 @@ _08050F54: ldr r0, [r0] mov pc, r0 .align 2, 0 -_08050F60: .4byte gUnknown_2031DAC +_08050F60: .4byte sTradeAnimationResourcesPtr _08050F64: .4byte 0x0000010b _08050F68: .4byte _08050F6C .align 2, 0 @@ -1997,7 +1066,7 @@ _08051470: adds r1, r4, 0 movs r2, 0 bl sub_8054508 - ldr r4, _080514B4 @ =gUnknown_2031DAC + ldr r4, _080514B4 @ =sTradeAnimationResourcesPtr ldr r0, [r4] adds r2, r0, 0 adds r2, 0xF0 @@ -2019,7 +1088,7 @@ _0805149E: .align 2, 0 _080514AC: .4byte gStringVar4 _080514B0: .4byte gUnknown_841E1E9 -_080514B4: .4byte gUnknown_2031DAC +_080514B4: .4byte sTradeAnimationResourcesPtr _080514B8: ldr r1, [r7] ldr r0, [r1, 0x64] @@ -2089,7 +1158,7 @@ _0805152C: beq _0805154C bl _08052318 _0805154C: - ldr r0, _08051590 @ =gUnknown_826CDE4 + ldr r0, _08051590 @ =sTradePokeballSpriteTemplate movs r1, 0x78 movs r2, 0x20 movs r3, 0 @@ -2105,7 +1174,7 @@ _0805154C: adds r0, r1 lsls r0, 2 adds r0, r4 - ldr r1, _08051594 @ =sub_8053938 + ldr r1, _08051594 @ =SpriteCB_TradePokeball_Outbound str r1, [r0] adds r2, 0xD2 ldrb r1, [r2] @@ -2119,8 +1188,8 @@ _0805154C: .align 2, 0 _08051588: .4byte gSprites _0805158C: .4byte SpriteCallbackDummy -_08051590: .4byte gUnknown_826CDE4 -_08051594: .4byte sub_8053938 +_08051590: .4byte sTradePokeballSpriteTemplate +_08051594: .4byte SpriteCB_TradePokeball_Outbound _08051598: movs r0, 0x1 negs r0, r0 @@ -2129,14 +1198,14 @@ _08051598: movs r2, 0 movs r3, 0x10 bl BeginNormalPaletteFade - ldr r0, _080515B8 @ =gUnknown_2031DAC + ldr r0, _080515B8 @ =sTradeAnimationResourcesPtr ldr r0, [r0] adds r0, 0x94 movs r1, 0x14 strh r1, [r0] bl _08052318 .align 2, 0 -_080515B8: .4byte gUnknown_2031DAC +_080515B8: .4byte sTradeAnimationResourcesPtr _080515BC: ldr r0, _080515E8 @ =gPaletteFade ldrb r1, [r0, 0x7] @@ -2183,7 +1252,7 @@ _0805160E: .align 2, 0 _0805161C: .4byte gPaletteFade _08051620: - ldr r4, _0805163C @ =gUnknown_2031DAC + ldr r4, _0805163C @ =sTradeAnimationResourcesPtr ldr r0, [r4] adds r2, r0, 0 adds r2, 0xEA @@ -2197,7 +1266,7 @@ _08051620: strh r0, [r2] b _0805165C .align 2, 0 -_0805163C: .4byte gUnknown_2031DAC +_0805163C: .4byte sTradeAnimationResourcesPtr _08051640: movs r0, 0x1 bl sub_8050968 @@ -2213,11 +1282,11 @@ _08051640: strh r0, [r1] str r2, [r3, 0x64] _0805165C: - ldr r0, _08051664 @ =gUnknown_2031DAC + ldr r0, _08051664 @ =sTradeAnimationResourcesPtr ldr r4, [r0] bl _08051EB0 .align 2, 0 -_08051664: .4byte gUnknown_2031DAC +_08051664: .4byte sTradeAnimationResourcesPtr _08051668: ldr r1, [r7] ldr r0, [r1, 0x64] @@ -2227,7 +1296,7 @@ _08051668: bhi _08051678 bl _08052318 _08051678: - bl sub_804FE24 + bl TradeAnim_UpdateBgAffine ldr r0, _08051694 @ =gUnknown_826CF30 movs r1, 0x78 movs r2, 0x50 @@ -2299,7 +1368,7 @@ _08051700: beq _08051714 bl _08052318 _08051714: - ldr r0, _0805172C @ =gUnknown_826CEB8 + ldr r0, _0805172C @ =sGameLinkCableEndSpriteTemplate movs r1, 0x80 movs r2, 0x41 movs r3, 0 @@ -2309,14 +1378,14 @@ _08051714: strb r0, [r1] bl _08052318 .align 2, 0 -_0805172C: .4byte gUnknown_826CEB8 +_0805172C: .4byte sGameLinkCableEndSpriteTemplate _08051730: ldr r0, _08051774 @ =gUnknown_826CE44 movs r1, 0x80 movs r2, 0x50 movs r3, 0x3 bl CreateSprite - ldr r4, _08051778 @ =gUnknown_2031DAC + ldr r4, _08051778 @ =sTradeAnimationResourcesPtr ldr r1, [r4] adds r1, 0x90 strb r0, [r1] @@ -2342,7 +1411,7 @@ _08051730: bl _080522AC .align 2, 0 _08051774: .4byte gUnknown_826CE44 -_08051778: .4byte gUnknown_2031DAC +_08051778: .4byte sTradeAnimationResourcesPtr _0805177C: .4byte gUnknown_826CE84 _08051780: .4byte gSprites _08051784: @@ -2418,14 +1487,14 @@ _08051808: movs r2, 0 movs r3, 0x10 bl BeginNormalPaletteFade - ldr r0, _08051828 @ =gUnknown_2031DAC + ldr r0, _08051828 @ =sTradeAnimationResourcesPtr ldr r0, [r0] adds r0, 0x94 movs r1, 0x1E strh r1, [r0] bl _08052318 .align 2, 0 -_08051828: .4byte gUnknown_2031DAC +_08051828: .4byte sTradeAnimationResourcesPtr _0805182C: ldr r0, _08051870 @ =gPaletteFade ldrb r1, [r0, 0x7] @@ -2474,7 +1543,7 @@ _08051878: movs r2, 0xAA movs r3, 0 bl CreateSprite - ldr r4, _080518C0 @ =gUnknown_2031DAC + ldr r4, _080518C0 @ =sTradeAnimationResourcesPtr ldr r1, [r4] adds r1, 0x90 strb r0, [r1] @@ -2491,7 +1560,7 @@ _08051878: bl _080522AC .align 2, 0 _080518BC: .4byte gUnknown_826CE84 -_080518C0: .4byte gUnknown_2031DAC +_080518C0: .4byte sTradeAnimationResourcesPtr _080518C4: ldr r0, _08051914 @ =gPaletteFade ldrb r1, [r0, 0x7] @@ -2501,7 +1570,7 @@ _080518C4: bne _080518E2 movs r0, 0x28 bl PlaySE - ldr r0, _08051918 @ =gUnknown_2031DAC + ldr r0, _08051918 @ =sTradeAnimationResourcesPtr ldr r1, [r0] adds r1, 0x94 ldrh r0, [r1] @@ -2509,7 +1578,7 @@ _080518C4: strh r0, [r1] _080518E2: ldr r3, _0805191C @ =gSprites - ldr r0, _08051918 @ =gUnknown_2031DAC + ldr r0, _08051918 @ =sTradeAnimationResourcesPtr ldr r2, [r0] adds r0, r2, 0 adds r0, 0x90 @@ -2533,7 +1602,7 @@ _080518E2: bl _08052318 .align 2, 0 _08051914: .4byte gPaletteFade -_08051918: .4byte gUnknown_2031DAC +_08051918: .4byte sTradeAnimationResourcesPtr _0805191C: .4byte gSprites _08051920: ldr r5, _0805197C @ =gSprites @@ -2608,7 +1677,7 @@ _080519A8: .align 2, 0 _080519B8: .4byte 0x0000ffff _080519BC: - ldr r5, _08051A28 @ =gUnknown_2031DAC + ldr r5, _08051A28 @ =sTradeAnimationResourcesPtr ldr r0, [r5] adds r0, 0xF0 ldrh r0, [r0] @@ -2659,7 +1728,7 @@ _080519BC: bl StartSpriteAffineAnim b _08051A4A .align 2, 0 -_08051A28: .4byte gUnknown_2031DAC +_08051A28: .4byte sTradeAnimationResourcesPtr _08051A2C: .4byte gSprites _08051A30: .4byte gUnknown_826CF88 _08051A34: @@ -2674,7 +1743,7 @@ _08051A34: movs r1, 0 bl StartSpriteAffineAnim _08051A4A: - ldr r5, _08051ADC @ =gUnknown_2031DAC + ldr r5, _08051ADC @ =sTradeAnimationResourcesPtr ldr r0, [r5] adds r0, 0x8F ldrb r1, [r0] @@ -2744,7 +1813,7 @@ _08051A4A: bl _080522AC .align 2, 0 _08051AD8: .4byte gSprites -_08051ADC: .4byte gUnknown_2031DAC +_08051ADC: .4byte sTradeAnimationResourcesPtr _08051AE0: .4byte 0x0000ffe0 _08051AE4: ldr r4, _08051BAC @ =gSprites @@ -3130,7 +2199,7 @@ _08051DD6: bne _08051DE4 b _08052318 _08051DE4: - ldr r0, _08051E10 @ =gUnknown_826CEB8 + ldr r0, _08051E10 @ =sGameLinkCableEndSpriteTemplate movs r1, 0x80 movs r2, 0x41 movs r3, 0 @@ -3147,20 +2216,20 @@ _08051DE4: lsls r0, 2 adds r2, 0x1C adds r0, r2 - ldr r1, _08051E18 @ =sub_804FDDC + ldr r1, _08051E18 @ =SpriteCB_GameLinkCableEnd_Inbound str r1, [r0] b _08052318 .align 2, 0 -_08051E10: .4byte gUnknown_826CEB8 +_08051E10: .4byte sGameLinkCableEndSpriteTemplate _08051E14: .4byte gSprites -_08051E18: .4byte sub_804FDDC +_08051E18: .4byte SpriteCB_GameLinkCableEnd_Inbound _08051E1C: ldr r0, _08051E3C @ =gUnknown_826CF30 movs r1, 0x78 movs r2, 0x50 movs r3, 0 bl CreateSprite - ldr r2, _08051E40 @ =gUnknown_2031DAC + ldr r2, _08051E40 @ =sTradeAnimationResourcesPtr ldr r1, [r2] adds r1, 0x91 strb r0, [r1] @@ -3171,7 +2240,7 @@ _08051E1C: b _08052318 .align 2, 0 _08051E3C: .4byte gUnknown_826CF30 -_08051E40: .4byte gUnknown_2031DAC +_08051E40: .4byte sTradeAnimationResourcesPtr _08051E44: ldr r2, _08051E80 @ =gSprites ldr r0, [r7] @@ -3245,14 +2314,14 @@ _08051EC4: movs r2, 0 movs r3, 0x10 bl BeginNormalPaletteFade - ldr r0, _08051EE0 @ =gUnknown_2031DAC + ldr r0, _08051EE0 @ =sTradeAnimationResourcesPtr ldr r0, [r0] adds r0, 0x94 movs r1, 0x3C strh r1, [r0] b _08052318 .align 2, 0 -_08051EE0: .4byte gUnknown_2031DAC +_08051EE0: .4byte sTradeAnimationResourcesPtr _08051EE4: ldr r4, _08051F08 @ =gPaletteFade ldrb r1, [r4, 0x7] @@ -3305,13 +2374,13 @@ _08051F40: .align 2, 0 _08051F44: .4byte gPaletteFade _08051F48: - ldr r0, _08051FDC @ =gUnknown_826CDE4 + ldr r0, _08051FDC @ =sTradePokeballSpriteTemplate movs r2, 0x8 negs r2, r2 movs r1, 0x78 movs r3, 0 bl CreateSprite - ldr r5, _08051FE0 @ =gUnknown_2031DAC + ldr r5, _08051FE0 @ =sTradeAnimationResourcesPtr ldr r1, [r5] adds r1, 0xD3 movs r6, 0 @@ -3333,7 +2402,7 @@ _08051F48: adds r1, r4, 0 adds r1, 0x1C adds r0, r1 - ldr r1, _08051FE8 @ =sub_8053A0C + ldr r1, _08051FE8 @ =SpriteCB_TradePokeball_Inbound str r1, [r0] ldrb r1, [r2] lsls r0, r1, 4 @@ -3375,10 +2444,10 @@ _08051F48: str r6, [r2, 0x64] b _08052318 .align 2, 0 -_08051FDC: .4byte gUnknown_826CDE4 -_08051FE0: .4byte gUnknown_2031DAC +_08051FDC: .4byte sTradePokeballSpriteTemplate +_08051FE0: .4byte sTradeAnimationResourcesPtr _08051FE4: .4byte gSprites -_08051FE8: .4byte sub_8053A0C +_08051FE8: .4byte SpriteCB_TradePokeball_Inbound _08051FEC: .4byte 0x0000ffff _08051FF0: ldr r2, _0805201C @ =gSprites @@ -3540,7 +2609,7 @@ _08052128: adds r1, r4, 0 movs r2, 0 bl sub_8054508 - ldr r0, _0805215C @ =gUnknown_2031DAC + ldr r0, _0805215C @ =sTradeAnimationResourcesPtr ldr r3, [r0] adds r1, r3, 0 adds r1, 0x94 @@ -3550,7 +2619,7 @@ _08052128: .align 2, 0 _08052154: .4byte gStringVar4 _08052158: .4byte gUnknown_841E20D -_0805215C: .4byte gUnknown_2031DAC +_0805215C: .4byte sTradeAnimationResourcesPtr _08052160: ldr r1, [r7] ldr r0, [r1, 0x64] @@ -3589,14 +2658,14 @@ _08052198: bne _080521A4 b _08052318 _080521A4: - ldr r0, _080521B0 @ =gUnknown_2031DAC + ldr r0, _080521B0 @ =sTradeAnimationResourcesPtr ldr r0, [r0] adds r0, 0x94 movs r1, 0x44 strh r1, [r0] b _08052318 .align 2, 0 -_080521B0: .4byte gUnknown_2031DAC +_080521B0: .4byte sTradeAnimationResourcesPtr _080521B4: ldr r1, [r7] ldr r0, [r1, 0x64] @@ -3670,9 +2739,9 @@ _0805223C: ldr r0, _08052280 @ =gSpecialVar_0x8005 ldrb r0, [r0] movs r1, 0 - bl sub_805080C + bl Trade_SwapPlayerAndParterMonData ldr r1, _08052284 @ =gCB2_AfterEvolution - ldr r0, _08052288 @ =sub_8050948 + ldr r0, _08052288 @ =CB2_RunTradeAnim_InGameTrade str r0, [r1] ldr r7, _0805228C @ =gUnknown_2031DA4 ldrb r0, [r7] @@ -3691,7 +2760,7 @@ _0805223C: adds r0, r3, 0 muls r0, r6 adds r0, r5 - ldr r1, _08052294 @ =gUnknown_2031DAC + ldr r1, _08052294 @ =sTradeAnimationResourcesPtr ldr r1, [r1] adds r1, 0x8F ldrb r2, [r1] @@ -3701,10 +2770,10 @@ _0805223C: .align 2, 0 _08052280: .4byte gSpecialVar_0x8005 _08052284: .4byte gCB2_AfterEvolution -_08052288: .4byte sub_8050948 +_08052288: .4byte CB2_RunTradeAnim_InGameTrade _0805228C: .4byte gUnknown_2031DA4 _08052290: .4byte gPlayerParty -_08052294: .4byte gUnknown_2031DAC +_08052294: .4byte sTradeAnimationResourcesPtr _08052298: movs r0, 0x1 negs r0, r0 @@ -3715,7 +2784,7 @@ _08052298: _080522A4: bl BeginNormalPaletteFade _080522A8: - ldr r0, _080522B8 @ =gUnknown_2031DAC + ldr r0, _080522B8 @ =sTradeAnimationResourcesPtr ldr r1, [r0] _080522AC: adds r1, 0x94 @@ -3724,7 +2793,7 @@ _080522AC: strh r0, [r1] b _08052318 .align 2, 0 -_080522B8: .4byte gUnknown_2031DAC +_080522B8: .4byte sTradeAnimationResourcesPtr _080522BC: ldr r0, _08052324 @ =gPaletteFade ldrb r1, [r0, 0x7] @@ -3776,7 +2845,7 @@ _08052328: .4byte CB2_ReturnToField sub_805232C: @ 805232C push {r4-r7,lr} sub sp, 0x10 - ldr r0, _08052350 @ =gUnknown_2031DAC + ldr r0, _08052350 @ =sTradeAnimationResourcesPtr ldr r1, [r0] adds r1, 0x94 ldrh r5, [r1] @@ -3792,7 +2861,7 @@ _08052344: ldr r0, [r0] mov pc, r0 .align 2, 0 -_08052350: .4byte gUnknown_2031DAC +_08052350: .4byte sTradeAnimationResourcesPtr _08052354: .4byte 0x0000010b _08052358: .4byte _0805235C .align 2, 0 @@ -4173,7 +3242,7 @@ _08052860: adds r1, r4, 0 movs r2, 0 bl sub_8054508 - ldr r4, _080528A4 @ =gUnknown_2031DAC + ldr r4, _080528A4 @ =sTradeAnimationResourcesPtr ldr r0, [r4] adds r2, r0, 0 adds r2, 0xF0 @@ -4195,7 +3264,7 @@ _0805288E: .align 2, 0 _0805289C: .4byte gStringVar4 _080528A0: .4byte gUnknown_841E1E9 -_080528A4: .4byte gUnknown_2031DAC +_080528A4: .4byte sTradeAnimationResourcesPtr _080528A8: ldr r1, [r7] ldr r0, [r1, 0x64] @@ -4265,7 +3334,7 @@ _0805291C: beq _0805293C bl _08053774 _0805293C: - ldr r0, _08052980 @ =gUnknown_826CDE4 + ldr r0, _08052980 @ =sTradePokeballSpriteTemplate movs r1, 0x78 movs r2, 0x20 movs r3, 0 @@ -4281,7 +3350,7 @@ _0805293C: adds r0, r1 lsls r0, 2 adds r0, r4 - ldr r1, _08052984 @ =sub_8053938 + ldr r1, _08052984 @ =SpriteCB_TradePokeball_Outbound str r1, [r0] adds r2, 0xD2 ldrb r1, [r2] @@ -4295,8 +3364,8 @@ _0805293C: .align 2, 0 _08052978: .4byte gSprites _0805297C: .4byte SpriteCallbackDummy -_08052980: .4byte gUnknown_826CDE4 -_08052984: .4byte sub_8053938 +_08052980: .4byte sTradePokeballSpriteTemplate +_08052984: .4byte SpriteCB_TradePokeball_Outbound _08052988: movs r0, 0x1 negs r0, r0 @@ -4305,14 +3374,14 @@ _08052988: movs r2, 0 movs r3, 0x10 bl BeginNormalPaletteFade - ldr r0, _080529A8 @ =gUnknown_2031DAC + ldr r0, _080529A8 @ =sTradeAnimationResourcesPtr ldr r0, [r0] adds r0, 0x94 movs r1, 0x14 strh r1, [r0] bl _08053774 .align 2, 0 -_080529A8: .4byte gUnknown_2031DAC +_080529A8: .4byte sTradeAnimationResourcesPtr _080529AC: ldr r0, _080529D8 @ =gPaletteFade ldrb r1, [r0, 0x7] @@ -4359,7 +3428,7 @@ _080529FE: .align 2, 0 _08052A0C: .4byte gPaletteFade _08052A10: - ldr r4, _08052A2C @ =gUnknown_2031DAC + ldr r4, _08052A2C @ =sTradeAnimationResourcesPtr ldr r0, [r4] adds r2, r0, 0 adds r2, 0xEA @@ -4373,7 +3442,7 @@ _08052A10: strh r0, [r2] b _08052A4A .align 2, 0 -_08052A2C: .4byte gUnknown_2031DAC +_08052A2C: .4byte sTradeAnimationResourcesPtr _08052A30: movs r0, 0x1 bl sub_8050968 @@ -4388,11 +3457,11 @@ _08052A30: strh r0, [r1] str r2, [r3, 0x64] _08052A4A: - ldr r0, _08052A54 @ =gUnknown_2031DAC + ldr r0, _08052A54 @ =sTradeAnimationResourcesPtr ldr r4, [r0] bl _0805330C .align 2, 0 -_08052A54: .4byte gUnknown_2031DAC +_08052A54: .4byte sTradeAnimationResourcesPtr _08052A58: ldr r1, [r7] ldr r0, [r1, 0x64] @@ -4459,7 +3528,7 @@ _08052AE0: beq _08052AF0 bl _08053774 _08052AF0: - ldr r0, _08052B04 @ =gUnknown_2031DAC + ldr r0, _08052B04 @ =sTradeAnimationResourcesPtr ldr r0, [r0] adds r0, 0x94 movs r1, 0x1A @@ -4467,7 +3536,7 @@ _08052AF0: bl _08053774 .align 2, 0 _08052B00: .4byte c3_08054588 -_08052B04: .4byte gUnknown_2031DAC +_08052B04: .4byte sTradeAnimationResourcesPtr _08052B08: ldr r2, [r7] adds r0, r2, 0 @@ -4490,7 +3559,7 @@ _08052B28: movs r2, 0x50 movs r3, 0x3 bl CreateSprite - ldr r4, _08052B84 @ =gUnknown_2031DAC + ldr r4, _08052B84 @ =sTradeAnimationResourcesPtr ldr r1, [r4] adds r1, 0x90 strb r0, [r1] @@ -4504,7 +3573,7 @@ _08052B28: adds r1, r5, 0 adds r1, 0x1C adds r0, r1 - ldr r1, _08052B8C @ =sub_804FD48 + ldr r1, _08052B8C @ =SpriteCB_TradeGlowWireless str r1, [r0] ldr r0, _08052B90 @ =gUnknown_826CE84 movs r1, 0x78 @@ -4527,9 +3596,9 @@ _08052B28: bl _08053708 .align 2, 0 _08052B80: .4byte gUnknown_826CE44 -_08052B84: .4byte gUnknown_2031DAC +_08052B84: .4byte sTradeAnimationResourcesPtr _08052B88: .4byte gSprites -_08052B8C: .4byte sub_804FD48 +_08052B8C: .4byte SpriteCB_TradeGlowWireless _08052B90: .4byte gUnknown_826CE84 _08052B94: ldr r2, [r7] @@ -4604,14 +3673,14 @@ _08052C18: movs r2, 0 movs r3, 0x10 bl BeginNormalPaletteFade - ldr r0, _08052C38 @ =gUnknown_2031DAC + ldr r0, _08052C38 @ =sTradeAnimationResourcesPtr ldr r0, [r0] adds r0, 0x94 movs r1, 0x1E strh r1, [r0] bl _08053774 .align 2, 0 -_08052C38: .4byte gUnknown_2031DAC +_08052C38: .4byte sTradeAnimationResourcesPtr _08052C3C: ldr r0, _08052C80 @ =gPaletteFade ldrb r1, [r0, 0x7] @@ -4660,7 +3729,7 @@ _08052C88: movs r2, 0xAA movs r3, 0 bl CreateSprite - ldr r4, _08052CD0 @ =gUnknown_2031DAC + ldr r4, _08052CD0 @ =sTradeAnimationResourcesPtr ldr r1, [r4] adds r1, 0x90 strb r0, [r1] @@ -4677,7 +3746,7 @@ _08052C88: bl _08053708 .align 2, 0 _08052CCC: .4byte gUnknown_826CE84 -_08052CD0: .4byte gUnknown_2031DAC +_08052CD0: .4byte sTradeAnimationResourcesPtr _08052CD4: ldr r0, _08052D24 @ =gPaletteFade ldrb r1, [r0, 0x7] @@ -4687,7 +3756,7 @@ _08052CD4: bne _08052CF2 movs r0, 0x28 bl PlaySE - ldr r0, _08052D28 @ =gUnknown_2031DAC + ldr r0, _08052D28 @ =sTradeAnimationResourcesPtr ldr r1, [r0] adds r1, 0x94 ldrh r0, [r1] @@ -4695,7 +3764,7 @@ _08052CD4: strh r0, [r1] _08052CF2: ldr r3, _08052D2C @ =gSprites - ldr r0, _08052D28 @ =gUnknown_2031DAC + ldr r0, _08052D28 @ =sTradeAnimationResourcesPtr ldr r2, [r0] adds r0, r2, 0 adds r0, 0x90 @@ -4719,7 +3788,7 @@ _08052CF2: bl _08053774 .align 2, 0 _08052D24: .4byte gPaletteFade -_08052D28: .4byte gUnknown_2031DAC +_08052D28: .4byte sTradeAnimationResourcesPtr _08052D2C: .4byte gSprites _08052D30: ldr r5, _08052D94 @ =gSprites @@ -4800,7 +3869,7 @@ _08052DC4: .align 2, 0 _08052DD4: .4byte 0x0000ffff _08052DD8: - ldr r5, _08052E44 @ =gUnknown_2031DAC + ldr r5, _08052E44 @ =sTradeAnimationResourcesPtr ldr r0, [r5] adds r0, 0xF0 ldrh r0, [r0] @@ -4851,7 +3920,7 @@ _08052DD8: bl StartSpriteAffineAnim b _08052E66 .align 2, 0 -_08052E44: .4byte gUnknown_2031DAC +_08052E44: .4byte sTradeAnimationResourcesPtr _08052E48: .4byte gSprites _08052E4C: .4byte gUnknown_826CF88 _08052E50: @@ -4866,7 +3935,7 @@ _08052E50: movs r1, 0 bl StartSpriteAffineAnim _08052E66: - ldr r5, _08052EF8 @ =gUnknown_2031DAC + ldr r5, _08052EF8 @ =sTradeAnimationResourcesPtr ldr r0, [r5] adds r0, 0x8F ldrb r1, [r0] @@ -4936,7 +4005,7 @@ _08052E66: bl _08053708 .align 2, 0 _08052EF4: .4byte gSprites -_08052EF8: .4byte gUnknown_2031DAC +_08052EF8: .4byte sTradeAnimationResourcesPtr _08052EFC: .4byte 0x0000ffe0 _08052F00: ldr r4, _08052FC8 @ =gSprites @@ -5155,7 +4224,7 @@ _08053066: adds r1, r5, 0 adds r1, 0x1C adds r0, r1 - ldr r1, _080530F0 @ =sub_804FD48 + ldr r1, _080530F0 @ =SpriteCB_TradeGlowWireless str r1, [r0] ldr r0, _080530F4 @ =gUnknown_826CE84 movs r1, 0x78 @@ -5179,7 +4248,7 @@ _08053066: _080530E4: .4byte gPaletteFade _080530E8: .4byte gUnknown_826CE44 _080530EC: .4byte gSprites -_080530F0: .4byte sub_804FD48 +_080530F0: .4byte SpriteCB_TradeGlowWireless _080530F4: .4byte gUnknown_826CE84 _080530F8: movs r1, 0x1 @@ -5257,7 +4326,7 @@ _08053180: lsls r1, 5 movs r0, 0 bl SetGpuReg - ldr r4, _080531DC @ =gUnknown_2031DAC + ldr r4, _080531DC @ =sTradeAnimationResourcesPtr ldr r2, [r4] adds r1, r2, 0 adds r1, 0xE0 @@ -5300,7 +4369,7 @@ _080531D8: strh r2, [r3] b _08053708 .align 2, 0 -_080531DC: .4byte gUnknown_2031DAC +_080531DC: .4byte sTradeAnimationResourcesPtr _080531E0: .4byte c3_08054588 _080531E4: .4byte gTasks _080531E8: @@ -5341,7 +4410,7 @@ _08053224: beq _08053234 b _08053774 _08053234: - ldr r0, _08053248 @ =gUnknown_2031DAC + ldr r0, _08053248 @ =sTradeAnimationResourcesPtr ldr r2, [r0] adds r1, r2, 0 adds r1, 0x94 @@ -5351,7 +4420,7 @@ _08053234: b _08053774 .align 2, 0 _08053244: .4byte c3_08054588 -_08053248: .4byte gUnknown_2031DAC +_08053248: .4byte sTradeAnimationResourcesPtr _0805324C: ldr r1, [r7] ldr r0, [r1, 0x64] @@ -5385,7 +4454,7 @@ _0805327A: movs r2, 0x50 movs r3, 0 bl CreateSprite - ldr r2, _0805329C @ =gUnknown_2031DAC + ldr r2, _0805329C @ =sTradeAnimationResourcesPtr ldr r1, [r2] adds r1, 0x91 strb r0, [r1] @@ -5396,7 +4465,7 @@ _0805327A: b _08053774 .align 2, 0 _08053298: .4byte gUnknown_826CF30 -_0805329C: .4byte gUnknown_2031DAC +_0805329C: .4byte sTradeAnimationResourcesPtr _080532A0: ldr r2, _080532DC @ =gSprites ldr r0, [r7] @@ -5470,14 +4539,14 @@ _08053320: movs r2, 0 movs r3, 0x10 bl BeginNormalPaletteFade - ldr r0, _0805333C @ =gUnknown_2031DAC + ldr r0, _0805333C @ =sTradeAnimationResourcesPtr ldr r0, [r0] adds r0, 0x94 movs r1, 0x3C strh r1, [r0] b _08053774 .align 2, 0 -_0805333C: .4byte gUnknown_2031DAC +_0805333C: .4byte sTradeAnimationResourcesPtr _08053340: ldr r4, _08053364 @ =gPaletteFade ldrb r1, [r4, 0x7] @@ -5530,13 +4599,13 @@ _0805339C: .align 2, 0 _080533A0: .4byte gPaletteFade _080533A4: - ldr r0, _08053438 @ =gUnknown_826CDE4 + ldr r0, _08053438 @ =sTradePokeballSpriteTemplate movs r2, 0x8 negs r2, r2 movs r1, 0x78 movs r3, 0 bl CreateSprite - ldr r5, _0805343C @ =gUnknown_2031DAC + ldr r5, _0805343C @ =sTradeAnimationResourcesPtr ldr r1, [r5] adds r1, 0xD3 movs r6, 0 @@ -5558,7 +4627,7 @@ _080533A4: adds r1, r4, 0 adds r1, 0x1C adds r0, r1 - ldr r1, _08053444 @ =sub_8053A0C + ldr r1, _08053444 @ =SpriteCB_TradePokeball_Inbound str r1, [r0] ldrb r1, [r2] lsls r0, r1, 4 @@ -5600,10 +4669,10 @@ _080533A4: str r6, [r2, 0x64] b _08053774 .align 2, 0 -_08053438: .4byte gUnknown_826CDE4 -_0805343C: .4byte gUnknown_2031DAC +_08053438: .4byte sTradePokeballSpriteTemplate +_0805343C: .4byte sTradeAnimationResourcesPtr _08053440: .4byte gSprites -_08053444: .4byte sub_8053A0C +_08053444: .4byte SpriteCB_TradePokeball_Inbound _08053448: .4byte 0x0000ffff _0805344C: ldr r2, _08053478 @ =gSprites @@ -5765,7 +4834,7 @@ _08053584: adds r1, r4, 0 movs r2, 0 bl sub_8054508 - ldr r0, _080535B8 @ =gUnknown_2031DAC + ldr r0, _080535B8 @ =sTradeAnimationResourcesPtr ldr r3, [r0] adds r1, r3, 0 adds r1, 0x94 @@ -5775,7 +4844,7 @@ _08053584: .align 2, 0 _080535B0: .4byte gStringVar4 _080535B4: .4byte gUnknown_841E20D -_080535B8: .4byte gUnknown_2031DAC +_080535B8: .4byte sTradeAnimationResourcesPtr _080535BC: ldr r1, [r7] ldr r0, [r1, 0x64] @@ -5814,14 +4883,14 @@ _080535F4: bne _08053600 b _08053774 _08053600: - ldr r0, _0805360C @ =gUnknown_2031DAC + ldr r0, _0805360C @ =sTradeAnimationResourcesPtr ldr r0, [r0] adds r0, 0x94 movs r1, 0x44 strh r1, [r0] b _08053774 .align 2, 0 -_0805360C: .4byte gUnknown_2031DAC +_0805360C: .4byte sTradeAnimationResourcesPtr _08053610: ldr r1, [r7] ldr r0, [r1, 0x64] @@ -5895,9 +4964,9 @@ _08053698: ldr r0, _080536DC @ =gSpecialVar_0x8005 ldrb r0, [r0] movs r1, 0 - bl sub_805080C + bl Trade_SwapPlayerAndParterMonData ldr r1, _080536E0 @ =gCB2_AfterEvolution - ldr r0, _080536E4 @ =sub_8050948 + ldr r0, _080536E4 @ =CB2_RunTradeAnim_InGameTrade str r0, [r1] ldr r7, _080536E8 @ =gUnknown_2031DA4 ldrb r0, [r7] @@ -5916,7 +4985,7 @@ _08053698: adds r0, r3, 0 muls r0, r6 adds r0, r5 - ldr r1, _080536F0 @ =gUnknown_2031DAC + ldr r1, _080536F0 @ =sTradeAnimationResourcesPtr ldr r1, [r1] adds r1, 0x8F ldrb r2, [r1] @@ -5926,10 +4995,10 @@ _08053698: .align 2, 0 _080536DC: .4byte gSpecialVar_0x8005 _080536E0: .4byte gCB2_AfterEvolution -_080536E4: .4byte sub_8050948 +_080536E4: .4byte CB2_RunTradeAnim_InGameTrade _080536E8: .4byte gUnknown_2031DA4 _080536EC: .4byte gPlayerParty -_080536F0: .4byte gUnknown_2031DAC +_080536F0: .4byte sTradeAnimationResourcesPtr _080536F4: movs r0, 0x1 negs r0, r0 @@ -5940,7 +5009,7 @@ _080536F4: _08053700: bl BeginNormalPaletteFade _08053704: - ldr r0, _08053714 @ =gUnknown_2031DAC + ldr r0, _08053714 @ =sTradeAnimationResourcesPtr ldr r1, [r0] _08053708: adds r1, 0x94 @@ -5949,7 +5018,7 @@ _08053708: strh r0, [r1] b _08053774 .align 2, 0 -_08053714: .4byte gUnknown_2031DAC +_08053714: .4byte sTradeAnimationResourcesPtr _08053718: ldr r0, _08053780 @ =gPaletteFade ldrb r1, [r0, 0x7] @@ -6044,7 +5113,7 @@ _080537B8: adds r0, r3, 0 muls r0, r6 adds r0, r5 - ldr r1, _08053804 @ =gUnknown_2031DAC + ldr r1, _08053804 @ =sTradeAnimationResourcesPtr ldr r1, [r1] adds r1, 0x8F ldrb r2, [r1] @@ -6056,7 +5125,7 @@ _080537F4: .4byte gCB2_AfterEvolution _080537F8: .4byte sub_8053E8C _080537FC: .4byte gUnknown_2031DA4 _08053800: .4byte gPlayerParty -_08053804: .4byte gUnknown_2031DAC +_08053804: .4byte sTradeAnimationResourcesPtr _08053808: mov r0, r8 bl SetMainCallback2 @@ -6108,7 +5177,7 @@ _08053864: ldr r0, _080538B4 @ =0x0000abcd cmp r1, r0 bne _08053874 - ldr r0, _080538B8 @ =gUnknown_2031DAC + ldr r0, _080538B8 @ =sTradeAnimationResourcesPtr ldr r0, [r0] adds r0, 0x72 strb r6, [r0] @@ -6128,7 +5197,7 @@ _0805387A: ldr r0, _080538B4 @ =0x0000abcd cmp r1, r0 bne _0805389C - ldr r0, _080538B8 @ =gUnknown_2031DAC + ldr r0, _080538B8 @ =sTradeAnimationResourcesPtr ldr r0, [r0] adds r0, 0x73 movs r1, 0x1 @@ -6145,11 +5214,11 @@ _080538A8: .4byte gBlockRecvBuffer _080538AC: .4byte 0x0000dcba _080538B0: .4byte sub_8053788 _080538B4: .4byte 0x0000abcd -_080538B8: .4byte gUnknown_2031DAC +_080538B8: .4byte sTradeAnimationResourcesPtr thumb_func_end sub_805383C - thumb_func_start sub_80538BC -sub_80538BC: @ 80538BC + thumb_func_start SpriteCB_TradePokeball_Default +SpriteCB_TradePokeball_Default: @ 80538BC push {r4,r5,lr} adds r5, r0, 0 movs r1, 0x2E @@ -6212,10 +5281,10 @@ _0805392E: bx r0 .align 2, 0 _08053934: .4byte SpriteCallbackDummy - thumb_func_end sub_80538BC + thumb_func_end SpriteCB_TradePokeball_Default - thumb_func_start sub_8053938 -sub_8053938: @ 8053938 + thumb_func_start SpriteCB_TradePokeball_Outbound +SpriteCB_TradePokeball_Outbound: @ 8053938 push {r4,lr} sub sp, 0x4 adds r4, r0, 0 @@ -6245,7 +5314,7 @@ _08053960: bne _08053996 movs r0, 0x85 bl PlaySE - ldr r0, _080539A4 @ =sub_80539AC + ldr r0, _080539A4 @ =SpriteCB_TradePokeball_Outbound2 str r0, [r4, 0x1C] movs r0, 0 strh r0, [r4, 0x2E] @@ -6268,12 +5337,12 @@ _08053996: bx r0 .align 2, 0 _080539A0: .4byte gUnknown_826D1E4 -_080539A4: .4byte sub_80539AC +_080539A4: .4byte SpriteCB_TradePokeball_Outbound2 _080539A8: .4byte 0x0000ffff - thumb_func_end sub_8053938 + thumb_func_end SpriteCB_TradePokeball_Outbound - thumb_func_start sub_80539AC -sub_80539AC: @ 80539AC + thumb_func_start SpriteCB_TradePokeball_Outbound2 +SpriteCB_TradePokeball_Outbound2: @ 80539AC push {r4,lr} adds r4, r0, 0 movs r1, 0x30 @@ -6309,7 +5378,7 @@ _080539C0: bne _080539FE adds r0, r4, 0 bl DestroySprite - ldr r0, _08053A08 @ =gUnknown_2031DAC + ldr r0, _08053A08 @ =sTradeAnimationResourcesPtr ldr r0, [r0] adds r0, 0x94 movs r1, 0xE @@ -6320,11 +5389,11 @@ _080539FE: bx r0 .align 2, 0 _08053A04: .4byte gUnknown_826D1E4 -_08053A08: .4byte gUnknown_2031DAC - thumb_func_end sub_80539AC +_08053A08: .4byte sTradeAnimationResourcesPtr + thumb_func_end SpriteCB_TradePokeball_Outbound2 - thumb_func_start sub_8053A0C -sub_8053A0C: @ 8053A0C + thumb_func_start SpriteCB_TradePokeball_Inbound +SpriteCB_TradePokeball_Inbound: @ 8053A0C push {r4,lr} adds r4, r0, 0 ldrh r2, [r4, 0x32] @@ -6396,7 +5465,7 @@ _08053A8C: .align 2, 0 _08053A94: .4byte gUnknown_826D1E4 _08053A98: .4byte SpriteCallbackDummy - thumb_func_end sub_8053A0C + thumb_func_end SpriteCB_TradePokeball_Inbound thumb_func_start GetInGameTradeSpeciesInfo GetInGameTradeSpeciesInfo: @ 8053A9C @@ -6610,7 +5679,7 @@ sub_8053B48: @ 8053B48 add r0, sp, 0x10 adds r1, r5, 0 bl sub_8053CD4 - ldr r0, _08053CB0 @ =gUnknown_2031CCC + ldr r0, _08053CB0 @ =gLinkPartnerMail add r1, sp, 0x10 ldm r1!, {r2,r3,r7} stm r0!, {r2,r3,r7} @@ -6632,7 +5701,7 @@ sub_8053B48: @ 8053B48 _08053CA4: .4byte gIngameTrades _08053CA8: .4byte gPlayerParty _08053CAC: .4byte gEnemyParty -_08053CB0: .4byte gUnknown_2031CCC +_08053CB0: .4byte gLinkPartnerMail _08053CB4: adds r2, r5, 0 adds r2, 0x28 @@ -6744,15 +5813,15 @@ _08053D7C: .4byte gSpecialVar_0x8005 _08053D80: .4byte gSpecialVar_0x8004 thumb_func_end CreateInGameTradePokemon - thumb_func_start sub_8053D84 -sub_8053D84: @ 8053D84 + thumb_func_start CB2_RunTradeAnim_LinkTrade +CB2_RunTradeAnim_LinkTrade: @ 8053D84 push {r4-r6,lr} bl sub_8050F14 lsls r0, 24 lsrs r6, r0, 24 cmp r6, 0x1 bne _08053DE6 - ldr r5, _08053E08 @ =gUnknown_2031DAC + ldr r5, _08053E08 @ =sTradeAnimationResourcesPtr ldr r0, [r5] adds r0, 0x8E ldrb r1, [r0] @@ -6779,7 +5848,7 @@ sub_8053D84: @ 8053D84 lsls r1, 24 lsrs r1, 24 adds r0, r4, 0 - bl sub_805080C + bl Trade_SwapPlayerAndParterMonData ldr r0, [r5] adds r2, r0, 0 adds r2, 0x74 @@ -6801,12 +5870,12 @@ _08053DE6: pop {r0} bx r0 .align 2, 0 -_08053E08: .4byte gUnknown_2031DAC +_08053E08: .4byte sTradeAnimationResourcesPtr _08053E0C: .4byte gSprites _08053E10: .4byte gUnknown_2031DA4 _08053E14: .4byte 0x0000abcd _08053E18: .4byte sub_8053E1C - thumb_func_end sub_8053D84 + thumb_func_end CB2_RunTradeAnim_LinkTrade thumb_func_start sub_8053E1C sub_8053E1C: @ 8053E1C @@ -6818,7 +5887,7 @@ sub_8053E1C: @ 8053E1C bl sub_805383C cmp r4, 0 bne _08053E68 - ldr r4, _08053E80 @ =gUnknown_2031DAC + ldr r4, _08053E80 @ =sTradeAnimationResourcesPtr ldr r2, [r4] adds r0, r2, 0 adds r0, 0x72 @@ -6853,7 +5922,7 @@ _08053E68: pop {r0} bx r0 .align 2, 0 -_08053E80: .4byte gUnknown_2031DAC +_08053E80: .4byte sTradeAnimationResourcesPtr _08053E84: .4byte 0x00000101 _08053E88: .4byte 0x0000dcba thumb_func_end sub_8053E1C @@ -7009,7 +6078,7 @@ _08054068: .align 2, 0 _0805407C: .4byte gMain _08054080: - ldr r0, _080540B4 @ =gUnknown_2031DAC + ldr r0, _080540B4 @ =sTradeAnimationResourcesPtr ldr r3, [r0] ldr r0, [r3, 0x64] adds r0, 0x1 @@ -7036,7 +6105,7 @@ _080540A8: adds r0, r2 b _080540D0 .align 2, 0 -_080540B4: .4byte gUnknown_2031DAC +_080540B4: .4byte sTradeAnimationResourcesPtr _080540B8: .4byte gMain _080540BC: bl IsLinkTaskFinished @@ -7078,16 +6147,16 @@ _08054104: bl InUnionRoom cmp r0, 0 beq _08054120 - ldr r0, _0805411C @ =gUnknown_2031DAC + ldr r0, _0805411C @ =sTradeAnimationResourcesPtr ldr r1, [r0] adds r1, 0xF8 movs r0, 0x12 bl sub_8113550 b _08054132 .align 2, 0 -_0805411C: .4byte gUnknown_2031DAC +_0805411C: .4byte sTradeAnimationResourcesPtr _08054120: - ldr r0, _08054174 @ =gUnknown_2031DAC + ldr r0, _08054174 @ =sTradeAnimationResourcesPtr ldr r1, [r0] adds r1, 0xF8 movs r0, 0xC @@ -7126,12 +6195,12 @@ _0805415A: strb r0, [r1] b _080541F2 .align 2, 0 -_08054174: .4byte gUnknown_2031DAC +_08054174: .4byte sTradeAnimationResourcesPtr _08054178: .4byte gWirelessCommType _0805417C: .4byte gLinkPlayers _08054180: .4byte gMain _08054184: - ldr r0, _0805419C @ =gUnknown_2031DAC + ldr r0, _0805419C @ =sTradeAnimationResourcesPtr ldr r1, [r0] ldr r0, [r1, 0x64] adds r0, 0x1 @@ -7145,7 +6214,7 @@ _08054194: adds r1, r2, r0 b _08054340 .align 2, 0 -_0805419C: .4byte gUnknown_2031DAC +_0805419C: .4byte sTradeAnimationResourcesPtr _080541A0: bl sub_80DA3D8 lsls r0, 24 @@ -7163,7 +6232,7 @@ _080541A0: .align 2, 0 _080541C0: .4byte gMain _080541C4: - ldr r0, _080541D8 @ =gUnknown_2031DAC + ldr r0, _080541D8 @ =sTradeAnimationResourcesPtr ldr r0, [r0] str r1, [r0, 0x64] ldr r0, _080541DC @ =gMain @@ -7174,7 +6243,7 @@ _080541C4: strb r1, [r0] b _08054396 .align 2, 0 -_080541D8: .4byte gUnknown_2031DAC +_080541D8: .4byte sTradeAnimationResourcesPtr _080541DC: .4byte gMain _080541E0: bl sub_80DA40C @@ -7187,15 +6256,15 @@ _080541E0: _080541F0: strb r1, [r0] _080541F2: - ldr r0, _08054200 @ =gUnknown_2031DAC + ldr r0, _08054200 @ =sTradeAnimationResourcesPtr ldr r0, [r0] str r2, [r0, 0x64] b _08054396 .align 2, 0 _080541FC: .4byte gMain -_08054200: .4byte gUnknown_2031DAC +_08054200: .4byte sTradeAnimationResourcesPtr _08054204: - ldr r4, _08054238 @ =gUnknown_2031DAC + ldr r4, _08054238 @ =sTradeAnimationResourcesPtr ldr r1, [r4] ldr r0, [r1, 0x64] adds r0, 0x1 @@ -7219,7 +6288,7 @@ _08054214: str r0, [r4, 0x64] b _08054242 .align 2, 0 -_08054238: .4byte gUnknown_2031DAC +_08054238: .4byte sTradeAnimationResourcesPtr _0805423C: ldr r1, [r4] movs r0, 0 @@ -7235,7 +6304,7 @@ _08054242: .align 2, 0 _08054250: .4byte gMain _08054254: - ldr r0, _08054270 @ =gUnknown_2031DAC + ldr r0, _08054270 @ =sTradeAnimationResourcesPtr ldr r1, [r0] ldr r0, [r1, 0x64] cmp r0, 0 @@ -7249,7 +6318,7 @@ _08054254: strb r1, [r0] b _08054396 .align 2, 0 -_08054270: .4byte gUnknown_2031DAC +_08054270: .4byte sTradeAnimationResourcesPtr _08054274: .4byte gMain _08054278: subs r0, 0x1 @@ -7273,7 +6342,7 @@ _0805428A: .align 2, 0 _0805429C: .4byte gMain _080542A0: - ldr r0, _080542C0 @ =gUnknown_2031DAC + ldr r0, _080542C0 @ =sTradeAnimationResourcesPtr ldr r1, [r0] ldr r0, [r1, 0x64] adds r0, 0x1 @@ -7289,7 +6358,7 @@ _080542A0: bl sub_800AB9C b _08054396 .align 2, 0 -_080542C0: .4byte gUnknown_2031DAC +_080542C0: .4byte sTradeAnimationResourcesPtr _080542C4: bl IsLinkTaskFinished lsls r0, 24 @@ -7430,7 +6499,7 @@ sub_80543C4: @ 80543C4 bl GetBgTilemapBuffer bl Free bl FreeMonSpritesGfx - ldr r4, _08054434 @ =gUnknown_2031DAC + ldr r4, _08054434 @ =sTradeAnimationResourcesPtr ldr r0, [r4] bl Free str r5, [r4] @@ -7453,7 +6522,7 @@ _0805441A: bx r0 .align 2, 0 _08054430: .4byte gPaletteFade -_08054434: .4byte gUnknown_2031DAC +_08054434: .4byte sTradeAnimationResourcesPtr _08054438: .4byte gWirelessCommType _0805443C: .4byte gMain thumb_func_end sub_80543C4 @@ -7492,7 +6561,7 @@ sub_8054470: @ 8054470 ands r0, r1 cmp r0, 0 bne _08054494 - ldr r0, _080544A0 @ =sub_80505CC + ldr r0, _080544A0 @ =CB2_InitTradeAnim_InGameTrade bl SetMainCallback2 ldr r1, _080544A4 @ =gFieldCallback ldr r0, _080544A8 @ =FieldCallback_ReturnToEventScript2 @@ -7505,7 +6574,7 @@ _08054494: bx r0 .align 2, 0 _0805449C: .4byte gPaletteFade -_080544A0: .4byte sub_80505CC +_080544A0: .4byte CB2_InitTradeAnim_InGameTrade _080544A4: .4byte gFieldCallback _080544A8: .4byte FieldCallback_ReturnToEventScript2 thumb_func_end sub_8054470 @@ -7554,7 +6623,7 @@ _080544F8: .4byte 0x0000083b thumb_func_start sub_80544FC sub_80544FC: @ 80544FC push {lr} - bl sub_80504CC + bl TradeAnimInit_LoadGfx pop {r0} bx r0 thumb_func_end sub_80544FC @@ -7575,7 +6644,7 @@ sub_8054508: @ 8054508 adds r0, r5, 0 movs r1, 0xFF bl FillWindowPixelBuffer - ldr r2, _08054580 @ =gUnknown_2031DAC + ldr r2, _08054580 @ =sTradeAnimationResourcesPtr ldr r1, [r2] movs r6, 0x82 lsls r6, 1 @@ -7619,7 +6688,7 @@ sub_8054508: @ 8054508 pop {r0} bx r0 .align 2, 0 -_08054580: .4byte gUnknown_2031DAC +_08054580: .4byte sTradeAnimationResourcesPtr _08054584: .4byte 0x00000105 thumb_func_end sub_8054508 @@ -7750,7 +6819,7 @@ c3_0805465C: @ 805465C ldrsh r4, [r7, r0] cmp r4, 0 bne _080546BC - ldr r1, _0805472C @ =gUnknown_2031DAC + ldr r1, _0805472C @ =sTradeAnimationResourcesPtr ldr r3, [r1] ldr r5, _08054730 @ =0x0000010b adds r2, r3, r5 @@ -7781,7 +6850,7 @@ c3_0805465C: @ 805465C movs r1, 0x13 bl SetGpuReg _080546BC: - ldr r4, _0805472C @ =gUnknown_2031DAC + ldr r4, _0805472C @ =sTradeAnimationResourcesPtr ldr r2, [r4] ldr r5, _08054730 @ =0x0000010b mov r8, r5 @@ -7835,7 +6904,7 @@ _0805471E: bx r0 .align 2, 0 _08054728: .4byte gTasks+0x8 -_0805472C: .4byte gUnknown_2031DAC +_0805472C: .4byte sTradeAnimationResourcesPtr _08054730: .4byte 0x0000010b thumb_func_end c3_0805465C @@ -7854,7 +6923,7 @@ sub_8054734: @ 8054734 ldrsh r0, [r6, r1] cmp r0, 0 bne _08054774 - ldr r1, _080547EC @ =gUnknown_2031DAC + ldr r1, _080547EC @ =sTradeAnimationResourcesPtr ldr r0, [r1] ldr r3, _080547F0 @ =0x00000109 adds r2, r0, r3 @@ -7872,7 +6941,7 @@ sub_8054734: @ 8054734 movs r1, 0x13 bl SetGpuReg _08054774: - ldr r5, _080547EC @ =gUnknown_2031DAC + ldr r5, _080547EC @ =sTradeAnimationResourcesPtr ldr r0, [r5] ldr r3, _080547F4 @ =0x0000010b adds r1, r0, r3 @@ -7928,7 +6997,7 @@ _08054774: b _0805480C .align 2, 0 _080547E8: .4byte gTasks+0x8 -_080547EC: .4byte gUnknown_2031DAC +_080547EC: .4byte sTradeAnimationResourcesPtr _080547F0: .4byte 0x00000109 _080547F4: .4byte 0x0000010b _080547F8: .4byte 0x0000ffff diff --git a/data/data_83FECCC.s b/data/data_83FECCC.s index 67964b9b9..5f4d1686a 100644 --- a/data/data_83FECCC.s +++ b/data/data_83FECCC.s @@ -1739,7 +1739,15 @@ gUnknown_845A788:: @ 845A788 .incbin "baserom.gba", 0x45A788, 0x60 gUnknown_845A7E8:: @ 845A7E8 - .incbin "baserom.gba", 0x45A7E8, 0x24 + .4byte gUnknown_841718C @ Not what other player wants + .4byte gUnknown_84171CC @ Not an egg + .4byte gUnknown_84170BC @ Mon can't be traded + .4byte gUnknown_84170BC @ Mon can't be traded + .4byte gUnknown_84170FC @ Other trainer's mon can't be traded + .4byte gUnknown_84170E0 @ Egg can't be traded + .4byte gUnknown_8417130 @ Other trainer can't accept + .4byte gUnknown_8417164 @ Can't trade with trainer now + .4byte gUnknown_8417164 @ Can't trade with trainer now gUnknown_845A80C:: @ 845A80C .incbin "baserom.gba", 0x45A80C, 0x74 diff --git a/data/strings.s b/data/strings.s index 5305352b7..bd5c308a5 100644 --- a/data/strings.s +++ b/data/strings.s @@ -1052,24 +1052,29 @@ gUnknown_84170BC:: @ 84170BC gUnknown_84170E0:: @ 84170E0 .string "An EGG can't be traded now.$" + .align 2 gUnknown_84170FC:: @ 0x84170FC .string "The other TRAINER's POKéMON\n" .string "can't be traded now.$" -gUnknown_841712D:: @ 0x841712D - .string " The other TRAINER can't accept\n" + .align 2 +gUnknown_8417130:: @ 0x8417130 + .string "The other TRAINER can't accept\n" .string "that POKéMON now.$" -gUnknown_8417161:: @ 0x8417161 - .string " You can't trade with that\n" + .align 2 +gUnknown_8417164:: @ 0x8417164 + .string "You can't trade with that\n" .string "TRAINER now.$" -gUnknown_841718B:: @ 0x841718B - .string " That isn't the type of POKéMON\n" + .align 2 +gUnknown_841718C:: @ 0x841718C + .string "That isn't the type of POKéMON\n" .string "that the other TRAINER wants.$" -gUnknown_84171C9:: @ 0x84171C9 - .string " That isn't an EGG.$" + .align 2 +gUnknown_84171CC:: @ 0x84171CC + .string "That isn't an EGG.$" gUnknown_84171DF:: @ 0x84171DF .string "Choose a POKéMON.$" diff --git a/data/trade.s b/data/trade.s index d778318a1..0102b1faf 100644 --- a/data/trade.s +++ b/data/trade.s @@ -261,16 +261,16 @@ gUnknown_8261EE4:: @ 8261EE4 .4byte gUnknown_841E10A, sub_804F440 .4byte gUnknown_841E112, sub_804F464 -gUnknown_8261EF4:: @ 8261EF4 - .4byte gUnknown_841E118 - .4byte gUnknown_841E145 - .4byte gUnknown_841E16B - .4byte gUnknown_8417094 - .4byte gUnknown_841E199 - .4byte gUnknown_841E1C5 - .4byte gUnknown_84170BC - .4byte gUnknown_84170E0 - .4byte gUnknown_84170FC +sTradeErrorOrStatusMessagePtrs:: @ 8261EF4 + .4byte gUnknown_841E118 @ Communication standby + .4byte gUnknown_841E145 @ The trade has been canceled. + .4byte gUnknown_841E16B @ That's your only POKéMON for battle + .4byte gUnknown_8417094 @ That's your only POKéMON for battle + .4byte gUnknown_841E199 @ Waiting for your friend to finish + .4byte gUnknown_841E1C5 @ Your friend wants to trade POKéMON + .4byte gUnknown_84170BC @ That POKéMON can't be traded now + .4byte gUnknown_84170E0 @ An EGG can't be traded now + .4byte gUnknown_84170FC @ The other TRAINER's POKéMON can't be traded now gUnknown_8261F18:: @ 8261F18 .byte 0, 1, 2 @@ -699,8 +699,8 @@ gUnknown_826CDD4:: @ 826CDD4 gUnknown_826CDDC:: @ 826CDDC obj_pal gUnknown_826205C, 5558 -gUnknown_826CDE4:: @ 826CDE4 - spr_template 5557, 5558, gOamData_826CD00, gSpriteAnimTable_826CD80, NULL, gSpriteAffineAnimTable_826CDC8, sub_80538BC +sTradePokeballSpriteTemplate:: @ 826CDE4 + spr_template 5557, 5558, gOamData_826CD00, gSpriteAnimTable_826CD80, NULL, gSpriteAffineAnimTable_826CDC8, SpriteCB_TradePokeball_Default gOamData_826CDFC:: .4byte 0x80000500, 0x00000400 @@ -730,7 +730,7 @@ gUnknown_826CE3C:: @ 826CE3C obj_pal gUnknown_826499C, 5555 gUnknown_826CE44:: @ 826CE44 - spr_template 5550, 5551, gOamData_826CDFC, gSpriteAnimTable_826CE0C, NULL, gSpriteAffineAnimTable_826CE28, sub_804FD24 + spr_template 5550, 5551, gOamData_826CDFC, gSpriteAnimTable_826CE0C, NULL, gSpriteAffineAnimTable_826CE28, SpriteCB_TradeGlowCable gOamData_826CE5C:: .4byte 0x80008000, 0x00000400 @@ -751,7 +751,7 @@ gUnknown_826CE7C:: @ 826CE7C obj_tiles gUnknown_8264C1C, 0x0300, 5552 gUnknown_826CE84:: @ 826CE84 - spr_template 5552, 5551, gOamData_826CE5C, gSpriteAnimTable_826CE74, NULL, gDummySpriteAffineAnimTable, sub_804FD78 + spr_template 5552, 5551, gOamData_826CE5C, gSpriteAnimTable_826CE74, NULL, gDummySpriteAffineAnimTable, SpriteCB_TradeGlowCore gOamData_826CE9C:: .4byte 0x80008000, 0x00000400 @@ -766,8 +766,8 @@ gSpriteAnimTable_826CEAC:: gUnknown_826CEB0:: @ 826CEB0 obj_tiles gUnknown_8264E1C, 0x0100, 5554 -gUnknown_826CEB8:: @ 826CEB8 - spr_template 5554, 5555, gOamData_826CE9C, gSpriteAnimTable_826CEAC, NULL, gDummySpriteAffineAnimTable, sub_804FDB8 +sGameLinkCableEndSpriteTemplate:: @ 826CEB8 + spr_template 5554, 5555, gOamData_826CE9C, gSpriteAnimTable_826CEAC, NULL, gDummySpriteAffineAnimTable, SpriteCB_GameLinkCableEnd_Outbound gOamData_826CED0:: .4byte 0xc0004000, 0x00000400 diff --git a/src/trade.c b/src/trade.c index 716b74eb5..026f77db8 100644 --- a/src/trade.c +++ b/src/trade.c @@ -10,6 +10,8 @@ #include "librfu.h" #include "text_window.h" #include "pokemon_icon.h" +#include "pokedex.h" +#include "mail_data.h" #include "graphics.h" #include "link.h" #include "link_rfu.h" @@ -35,7 +37,7 @@ #include "constants/songs.h" #include "constants/moves.h" -struct TradeResources +struct TradeMenuResources { /*0x0000*/ u8 unk_0; /*0x0001*/ u8 unk_1; @@ -75,7 +77,7 @@ struct TradeResources /*0x08F0*/ u16 tilemapBuffer[BG_SCREEN_SIZE / 2]; }; -struct TradeResources2 { +struct TradeAnimationResources { /*0x00*/ struct Pokemon mon; /*0x64*/ u32 timer; /*0x68*/ u32 unk_68[2]; @@ -112,23 +114,36 @@ struct TradeResources2 { /*0xEE*/ bool8 isLinkTrade; /*0xF0*/ u16 tradeSpecies[2]; /*0xF4*/ u16 cachedMapMusic; - /*0xF6*/ u8 unk_F6[3]; - /*0xF9*/ u8 filler_F9; - /*0xFA*/ u8 unk_FA; - /*0xFB*/ u8 unk_FB; - /*0xFC*/ u8 unk_FC; - /*0xFD*/ u8 unk_FD; - /*0xFE*/ u8 unk_FE; + /*0xF6*/ u8 unk_F6; + /*0xF8*/ u16 unk_F8; + /*0xFA*/ u16 unk_FA; + /*0xFC*/ u8 unk_FC[7]; + /*0x103*/ u8 filler_103[5]; + /*0x108*/ u8 unk_108; + /*0x109*/ u8 filler_109[7]; +}; + +enum TradeStatusMsg +{ + TRADESTATMSG_COMMSTANDBY = 0, + TRADESTATMSG_CANCELED, + TRADESTATMSG_ONLYMON, + TRADESTATMSG_ONLYMON2, + TRADESTATMSG_WAITINGFORFRIEND, + TRADESTATMSG_FRIENDWANTSTOTRADE, + TRADESTATMSG_YOURMONCANTBETRADED, + TRADESTATMSG_EGGCANTBETRADED, + TRADESTATMSG_PARTNERMONCANTBETRADED }; IWRAM_DATA vu16 gUnknown_3000E78; EWRAM_DATA u8 *gUnknown_2031C90 = NULL; EWRAM_DATA u8 *gUnknown_2031C94[14] = {}; -EWRAM_DATA u8 gUnknown_2031CCC[216] = {}; +EWRAM_DATA struct MailStruct gLinkPartnerMail[6] = {}; EWRAM_DATA u8 gUnknown_2031DA4[2] = {0}; -EWRAM_DATA struct TradeResources * gUnknown_2031DA8 = NULL; -EWRAM_DATA struct TradeResources2 * gUnknown_2031DAC = NULL; +EWRAM_DATA struct TradeMenuResources * sTradeMenuResourcesPtr = NULL; +EWRAM_DATA struct TradeAnimationResources * sTradeAnimationResourcesPtr = NULL; void sub_804C728(void); void sub_804D4F8(void); @@ -137,7 +152,7 @@ void sub_804D694(u8 state); void sub_804D764(void); u8 shedinja_maker_maybe(void); void sub_804DFF0(void); -void sub_804E9E4(void); +static void RunTradeMenuCallback(void); void sub_804EAAC(u8 a0); void sub_804EAE4(u8 side); u8 sub_804EE6C(u8 *str, u8 whichParty, u8 partyIdx); @@ -148,8 +163,8 @@ void sub_804F284(u8 side); void sub_804F3B4(void); void sub_804F3C8(u8 a0); void sub_804F488(u16 a0, u8 a1); -void sub_804F4DC(void); -void sub_804F5BC(u8 str_idx); +static void sub_804F4DC(void); +void PrintTradeErrorOrStatusMessage(u8 str_idx); bool8 sub_804F610(void); void sub_804F728(const u8 *name, u8 *a1, u8 unused); void sub_804F748(u8 side); @@ -157,8 +172,17 @@ void sub_804F890(u8 side); void sub_804F964(void); void sub_804F9D8(void); u32 sub_804FA14(struct Pokemon * party, int partyCount, int cursorPos); +void CB2_InitTradeAnim_LinkTrade(void); +void sub_805049C(void); +void sub_80504B0(void); +void TradeAnimInit_LoadGfx(void); +void CB2_RunTradeAnim_InGameTrade(void); +void sub_8050968(u8 idx); +void sub_8050DE0(void); +void sub_8050E24(void); +void sub_8050F14(void); +void CB2_RunTradeAnim_LinkTrade(void); void LoadHeldItemIcons(void); -void sub_8050138(void); extern const u16 gUnknown_8260C30[]; extern const u16 gUnknown_8261430[]; @@ -180,11 +204,19 @@ extern const u8 gUnknown_8261F18[]; extern const u8 gUnknown_8261EB6[]; extern const u8 gUnknown_8261EC7[]; extern const u8 gUnknown_841E09F[]; -extern const u8 *const gUnknown_8261EF4[]; +extern const u8 *const sTradeErrorOrStatusMessagePtrs[]; extern const struct SpritePalette gUnknown_8261D00; extern const struct SpritePalette gUnknown_8261C60; extern const struct SpriteSheet gUnknown_8261C58; extern const u16 gTradeGlow2PaletteAnimTable[]; +extern const struct SpriteSheet gUnknown_826CDD4; +extern const struct SpritePalette gUnknown_826CDDC; +extern const struct BgTemplate gUnknown_826D1D4[4]; +extern const struct WindowTemplate gUnknown_826D1BC[]; +extern const u16 gUnknown_826AA5C[]; +extern const u16 gUnknown_8269A5C[]; +extern const u32 gUnknown_3379A0Bin[]; +extern const u16 gUnknown_826407C[]; void sub_804C600(void) { @@ -200,7 +232,7 @@ void sub_804C600(void) LoadPalette(gTMCaseMainWindowPalette, 0xD0, 0x14); ResetBgsAndClearDma3BusyFlags(FALSE); InitBgsFromTemplates(0, gUnknown_8261F1C, NELEMS(gUnknown_8261F1C)); - SetBgTilemapBuffer(1, gUnknown_2031DA8->tilemapBuffer); + SetBgTilemapBuffer(1, sTradeMenuResourcesPtr->tilemapBuffer); if (InitWindows(gUnknown_8261F2C)) { DeactivateAllTextPrinters(); @@ -214,14 +246,14 @@ void sub_804C600(void) TextWindow_SetStdFrame0_WithPal(0, 0x014, 0xC0); TextWindow_SetUserSelectedFrame(2, 0x001, 0xE0); LoadMonIconPalettes(); - gUnknown_2031DA8->unk_69 = 0; - gUnknown_2031DA8->unk_6F = 0; - gUnknown_2031DA8->unk_70 = 0; - gUnknown_2031DA8->unk_74[0] = 0; - gUnknown_2031DA8->unk_74[1] = 0; - gUnknown_2031DA8->unk_7A = 0; - gUnknown_2031DA8->unk_7B = 0; - gUnknown_2031DA8->unk_A8 = 0; + sTradeMenuResourcesPtr->unk_69 = 0; + sTradeMenuResourcesPtr->unk_6F = 0; + sTradeMenuResourcesPtr->unk_70 = 0; + sTradeMenuResourcesPtr->unk_74[0] = 0; + sTradeMenuResourcesPtr->unk_74[1] = 0; + sTradeMenuResourcesPtr->unk_7A = 0; + sTradeMenuResourcesPtr->unk_7B = 0; + sTradeMenuResourcesPtr->unk_A8 = 0; } } @@ -243,7 +275,7 @@ void sub_804C728(void) switch (gMain.state) { case 0: - gUnknown_2031DA8 = AllocZeroed(sizeof(*gUnknown_2031DA8)); + sTradeMenuResourcesPtr = AllocZeroed(sizeof(*sTradeMenuResourcesPtr)); sub_804C600(); gUnknown_2031C90 = AllocZeroed(0xE00); @@ -262,13 +294,13 @@ void sub_804C728(void) CreateMon(&gEnemyParty[i], SPECIES_NONE, 0, 0x20, FALSE, 0, OT_ID_PLAYER_ID, 0); } - sub_804F5BC(0); + PrintTradeErrorOrStatusMessage(TRADESTATMSG_COMMSTANDBY); ShowBg(0); if (!gReceivedRemoteLinkPlayers) { gLinkType = 0x1122; - gUnknown_2031DA8->unk_A8 = 0; + sTradeMenuResourcesPtr->unk_A8 = 0; if (gWirelessCommType) { @@ -290,10 +322,10 @@ void sub_804C728(void) } break; case 2: - gUnknown_2031DA8->unk_A8++; - if (gUnknown_2031DA8->unk_A8 > 11) + sTradeMenuResourcesPtr->unk_A8++; + if (sTradeMenuResourcesPtr->unk_A8 > 11) { - gUnknown_2031DA8->unk_A8 = 0; + sTradeMenuResourcesPtr->unk_A8 = 0; gMain.state++; } break; @@ -302,7 +334,7 @@ void sub_804C728(void) { if (IsLinkMaster()) { - if (++gUnknown_2031DA8->unk_A8 > 30) + if (++sTradeMenuResourcesPtr->unk_A8 > 30) { CheckShouldAdvanceLinkState(); gMain.state++; @@ -320,7 +352,7 @@ void sub_804C728(void) sub_80FBB4C(); CalculatePlayerPartyCount(); gMain.state++; - gUnknown_2031DA8->unk_A8 = 0; + sTradeMenuResourcesPtr->unk_A8 = 0; if (gWirelessCommType) { sub_80FA484(TRUE); @@ -354,13 +386,13 @@ void sub_804C728(void) CalculateEnemyPartyCount(); SetGpuReg(REG_OFFSET_DISPCNT, 0); SetGpuReg(REG_OFFSET_BLDCNT, 0); - gUnknown_2031DA8->partyCounts[0] = gPlayerPartyCount; - gUnknown_2031DA8->partyCounts[1] = gEnemyPartyCount; + sTradeMenuResourcesPtr->partyCounts[0] = gPlayerPartyCount; + sTradeMenuResourcesPtr->partyCounts[1] = gEnemyPartyCount; - for (i = 0; i < gUnknown_2031DA8->partyCounts[0]; i++) + for (i = 0; i < sTradeMenuResourcesPtr->partyCounts[0]; i++) { struct Pokemon *mon = &gPlayerParty[i]; - gUnknown_2031DA8->partyIcons[0][i] = CreateMonIcon(GetMonData(mon, MON_DATA_SPECIES2), + sTradeMenuResourcesPtr->partyIcons[0][i] = CreateMonIcon(GetMonData(mon, MON_DATA_SPECIES2), SpriteCB_MonIcon, (gTradeMonSpriteCoords[i][0] * 8) + 14, (gTradeMonSpriteCoords[i][1] * 8) - 12, @@ -369,10 +401,10 @@ void sub_804C728(void) TRUE); } - for (i = 0; i < gUnknown_2031DA8->partyCounts[1]; i++) + for (i = 0; i < sTradeMenuResourcesPtr->partyCounts[1]; i++) { struct Pokemon *mon = &gEnemyParty[i]; - gUnknown_2031DA8->partyIcons[1][i] = CreateMonIcon(GetMonData(mon, MON_DATA_SPECIES2, NULL), + sTradeMenuResourcesPtr->partyIcons[1][i] = CreateMonIcon(GetMonData(mon, MON_DATA_SPECIES2, NULL), SpriteCB_MonIcon, (gTradeMonSpriteCoords[i + PARTY_SIZE][0] * 8) + 14, (gTradeMonSpriteCoords[i + PARTY_SIZE][1] * 8) - 12, @@ -384,11 +416,11 @@ void sub_804C728(void) break; case 8: LoadHeldItemIcons(); - sub_812256C(gUnknown_2031DA8->partyCounts, gUnknown_2031DA8->partyIcons, 0); + sub_812256C(sTradeMenuResourcesPtr->partyCounts, sTradeMenuResourcesPtr->partyIcons, 0); gMain.state++; break; case 9: - sub_812256C(gUnknown_2031DA8->partyCounts, gUnknown_2031DA8->partyIcons, 1); + sub_812256C(sTradeMenuResourcesPtr->partyCounts, sTradeMenuResourcesPtr->partyIcons, 1); gMain.state++; break; case 10: @@ -398,7 +430,7 @@ void sub_804C728(void) sub_808BEB4(gUnknown_8261ECC[0], gUnknown_2031C94[6], 0, 0, gDecompressionBuffer, 2); sub_804F728(gUnknown_8261ECC[1], gUnknown_2031C94[8], 24); gMain.state++; - gUnknown_2031DA8->unk_A8 = 0; + sTradeMenuResourcesPtr->unk_A8 = 0; break; case 11: if (sub_804F610()) @@ -445,16 +477,16 @@ void sub_804C728(void) CreateSprite(&temp, (i * 32) + 24, 150, 1); } - gUnknown_2031DA8->tradeMenuCursorSpriteIdx = CreateSprite(&gUnknown_8261CB0, gTradeMonSpriteCoords[0][0] * 8 + 32, gTradeMonSpriteCoords[0][1] * 8, 2); - gUnknown_2031DA8->tradeMenuCursorPosition = 0; + sTradeMenuResourcesPtr->tradeMenuCursorSpriteIdx = CreateSprite(&gUnknown_8261CB0, gTradeMonSpriteCoords[0][0] * 8 + 32, gTradeMonSpriteCoords[0][1] * 8, 2); + sTradeMenuResourcesPtr->tradeMenuCursorPosition = 0; gMain.state++; rbox_fill_rectangle(0); break; case 14: sub_804F748(0); sub_804F020(0); - gUnknown_2031DA8->unk_0 = 0; - gUnknown_2031DA8->unk_1 = 0; + sTradeMenuResourcesPtr->unk_0 = 0; + sTradeMenuResourcesPtr->unk_1 = 0; sub_804D764(); gMain.state++; PlayBGM(MUS_SLOT); @@ -557,7 +589,7 @@ void sub_804C728(void) "\t.4byte _0804CEB0\n" "\t.4byte _0804CED0\n" "_0804C7B0:\n" - "\tldr r4, _0804C7E8 @ =gUnknown_2031DA8\n" + "\tldr r4, _0804C7E8 @ =sTradeMenuResourcesPtr\n" "\tldr r0, _0804C7EC @ =0x000010f0\n" "\tbl AllocZeroed\n" "\tstr r0, [r4]\n" @@ -583,7 +615,7 @@ void sub_804C728(void) "\tadds r1, r3\n" "\tb _0804CEC2\n" "\t.align 2, 0\n" - "_0804C7E8: .4byte gUnknown_2031DA8\n" + "_0804C7E8: .4byte sTradeMenuResourcesPtr\n" "_0804C7EC: .4byte 0x000010f0\n" "_0804C7F0: .4byte gUnknown_2031C90\n" "_0804C7F4: .4byte gUnknown_2031C94\n" @@ -613,7 +645,7 @@ void sub_804C728(void) "\tcmp r6, 0x5\n" "\tble _0804C80A\n" "\tmovs r0, 0\n" - "\tbl sub_804F5BC\n" + "\tbl PrintTradeErrorOrStatusMessage\n" "\tmovs r0, 0\n" "\tbl ShowBg\n" "\tldr r0, _0804C86C @ =gReceivedRemoteLinkPlayers\n" @@ -624,7 +656,7 @@ void sub_804C728(void) "\tldr r5, _0804C874 @ =0x00001122\n" "\tadds r0, r5, 0\n" "\tstrh r0, [r1]\n" - "\tldr r0, _0804C878 @ =gUnknown_2031DA8\n" + "\tldr r0, _0804C878 @ =sTradeMenuResourcesPtr\n" "\tldr r0, [r0]\n" "\tadds r0, 0xA8\n" "\tstrb r2, [r0]\n" @@ -642,7 +674,7 @@ void sub_804C728(void) "_0804C86C: .4byte gReceivedRemoteLinkPlayers\n" "_0804C870: .4byte gLinkType\n" "_0804C874: .4byte 0x00001122\n" - "_0804C878: .4byte gUnknown_2031DA8\n" + "_0804C878: .4byte sTradeMenuResourcesPtr\n" "_0804C87C: .4byte gWirelessCommType\n" "_0804C880:\n" "\tbl OpenLink\n" @@ -679,7 +711,7 @@ void sub_804C728(void) "\t.align 2, 0\n" "_0804C8C4: .4byte gMain\n" "_0804C8C8:\n" - "\tldr r2, _0804C8F0 @ =gUnknown_2031DA8\n" + "\tldr r2, _0804C8F0 @ =sTradeMenuResourcesPtr\n" "\tldr r1, [r2]\n" "\tadds r1, 0xA8\n" "\tldrb r0, [r1]\n" @@ -700,7 +732,7 @@ void sub_804C728(void) "\tadds r1, r3, r2\n" "\tb _0804CEC2\n" "\t.align 2, 0\n" - "_0804C8F0: .4byte gUnknown_2031DA8\n" + "_0804C8F0: .4byte sTradeMenuResourcesPtr\n" "_0804C8F4:\n" "\tbl GetLinkPlayerCount_2\n" "\tadds r4, r0, 0\n" @@ -715,7 +747,7 @@ void sub_804C728(void) "\tlsls r0, 24\n" "\tcmp r0, 0\n" "\tbeq _0804C940\n" - "\tldr r0, _0804C938 @ =gUnknown_2031DA8\n" + "\tldr r0, _0804C938 @ =sTradeMenuResourcesPtr\n" "\tldr r1, [r0]\n" "\tadds r1, 0xA8\n" "\tldrb r0, [r1]\n" @@ -734,7 +766,7 @@ void sub_804C728(void) "\tadds r1, r3\n" "\tb _0804CEC2\n" "\t.align 2, 0\n" - "_0804C938: .4byte gUnknown_2031DA8\n" + "_0804C938: .4byte sTradeMenuResourcesPtr\n" "_0804C93C: .4byte gMain\n" "_0804C940:\n" "\tldr r1, _0804C94C @ =gMain\n" @@ -768,7 +800,7 @@ void sub_804C728(void) "\tadds r0, 0x1\n" "\tmovs r2, 0\n" "\tstrb r0, [r1]\n" - "\tldr r0, _0804C9A8 @ =gUnknown_2031DA8\n" + "\tldr r0, _0804C9A8 @ =sTradeMenuResourcesPtr\n" "\tldr r0, [r0]\n" "\tadds r0, 0xA8\n" "\tstrb r2, [r0]\n" @@ -785,7 +817,7 @@ void sub_804C728(void) "\t.align 2, 0\n" "_0804C9A0: .4byte gReceivedRemoteLinkPlayers\n" "_0804C9A4: .4byte gMain\n" - "_0804C9A8: .4byte gUnknown_2031DA8\n" + "_0804C9A8: .4byte sTradeMenuResourcesPtr\n" "_0804C9AC: .4byte gWirelessCommType\n" "_0804C9B0:\n" "\tldr r0, _0804C9E0 @ =gWirelessCommType\n" @@ -841,7 +873,7 @@ void sub_804C728(void) "\tmovs r0, 0x50\n" "\tmovs r1, 0\n" "\tbl SetGpuReg\n" - "\tldr r2, _0804CB2C @ =gUnknown_2031DA8\n" + "\tldr r2, _0804CB2C @ =sTradeMenuResourcesPtr\n" "\tldr r0, [r2]\n" "\tldr r1, _0804CB30 @ =gPlayerPartyCount\n" "\tldrb r1, [r1]\n" @@ -907,7 +939,7 @@ void sub_804C728(void) "\tblt _0804CA4A\n" "_0804CAA8:\n" "\tmovs r6, 0\n" - "\tldr r1, _0804CB2C @ =gUnknown_2031DA8\n" + "\tldr r1, _0804CB2C @ =sTradeMenuResourcesPtr\n" "\tldr r0, [r1]\n" "\tadds r0, 0x37\n" "\tldrb r0, [r0]\n" @@ -971,7 +1003,7 @@ void sub_804C728(void) "\tadds r1, r3\n" "\tb _0804CEC2\n" "\t.align 2, 0\n" - "_0804CB2C: .4byte gUnknown_2031DA8\n" + "_0804CB2C: .4byte sTradeMenuResourcesPtr\n" "_0804CB30: .4byte gPlayerPartyCount\n" "_0804CB34: .4byte gEnemyPartyCount\n" "_0804CB38: .4byte gTradeMonSpriteCoords\n" @@ -982,7 +1014,7 @@ void sub_804C728(void) "_0804CB4C: .4byte gMain\n" "_0804CB50:\n" "\tbl LoadHeldItemIcons\n" - "\tldr r0, _0804CB70 @ =gUnknown_2031DA8\n" + "\tldr r0, _0804CB70 @ =sTradeMenuResourcesPtr\n" "\tldr r1, [r0]\n" "\tadds r0, r1, 0\n" "\tadds r0, 0x36\n" @@ -995,10 +1027,10 @@ void sub_804C728(void) "\tadds r1, r5\n" "\tb _0804CEC2\n" "\t.align 2, 0\n" - "_0804CB70: .4byte gUnknown_2031DA8\n" + "_0804CB70: .4byte sTradeMenuResourcesPtr\n" "_0804CB74: .4byte gMain\n" "_0804CB78:\n" - "\tldr r0, _0804CB94 @ =gUnknown_2031DA8\n" + "\tldr r0, _0804CB94 @ =sTradeMenuResourcesPtr\n" "\tldr r1, [r0]\n" "\tadds r0, r1, 0\n" "\tadds r0, 0x36\n" @@ -1011,7 +1043,7 @@ void sub_804C728(void) "\tadds r1, r7\n" "\tb _0804CEC2\n" "\t.align 2, 0\n" - "_0804CB94: .4byte gUnknown_2031DA8\n" + "_0804CB94: .4byte sTradeMenuResourcesPtr\n" "_0804CB98: .4byte gMain\n" "_0804CB9C:\n" "\tldr r0, _0804CC14 @ =gSaveBlock2Ptr\n" @@ -1063,7 +1095,7 @@ void sub_804C728(void) "\tadds r0, 0x1\n" "\tmovs r2, 0\n" "\tstrb r0, [r1]\n" - "\tldr r0, _0804CC2C @ =gUnknown_2031DA8\n" + "\tldr r0, _0804CC2C @ =sTradeMenuResourcesPtr\n" "\tldr r0, [r0]\n" "\tadds r0, 0xA8\n" "\tstrb r2, [r0]\n" @@ -1075,7 +1107,7 @@ void sub_804C728(void) "_0804CC20: .4byte gLinkPlayers + 8\n" "_0804CC24: .4byte gUnknown_8261ECC\n" "_0804CC28: .4byte gMain\n" - "_0804CC2C: .4byte gUnknown_2031DA8\n" + "_0804CC2C: .4byte sTradeMenuResourcesPtr\n" "_0804CC30:\n" "\tbl sub_804F610\n" "\tlsls r0, 24\n" @@ -1255,7 +1287,7 @@ void sub_804C728(void) "\tlsls r2, 3\n" "\tmovs r3, 0x2\n" "\tbl CreateSprite\n" - "\tldr r2, _0804CDD8 @ =gUnknown_2031DA8\n" + "\tldr r2, _0804CDD8 @ =sTradeMenuResourcesPtr\n" "\tldr r1, [r2]\n" "\tadds r1, 0x34\n" "\tmovs r3, 0\n" @@ -1277,14 +1309,14 @@ void sub_804C728(void) "_0804CDCC: .4byte gUnknown_8261CC8\n" "_0804CDD0: .4byte gUnknown_8261CB0\n" "_0804CDD4: .4byte gTradeMonSpriteCoords\n" - "_0804CDD8: .4byte gUnknown_2031DA8\n" + "_0804CDD8: .4byte sTradeMenuResourcesPtr\n" "_0804CDDC: .4byte gMain\n" "_0804CDE0:\n" "\tmovs r0, 0\n" "\tbl sub_804F748\n" "\tmovs r0, 0\n" "\tbl sub_804F020\n" - "\tldr r2, _0804CE14 @ =gUnknown_2031DA8\n" + "\tldr r2, _0804CE14 @ =sTradeMenuResourcesPtr\n" "\tldr r0, [r2]\n" "\tmovs r1, 0\n" "\tstrb r1, [r0]\n" @@ -1302,7 +1334,7 @@ void sub_804C728(void) "\tbl PlayBGM\n" "\tb _0804CEE6\n" "\t.align 2, 0\n" - "_0804CE14: .4byte gUnknown_2031DA8\n" + "_0804CE14: .4byte sTradeMenuResourcesPtr\n" "_0804CE18: .4byte gMain\n" "_0804CE1C: .4byte 0x00000111\n" "_0804CE20:\n" @@ -1436,7 +1468,7 @@ void sub_804CF14(void) break; case 1: gMain.state++; - gUnknown_2031DA8->unk_A8 = 0; + sTradeMenuResourcesPtr->unk_A8 = 0; break; case 2: gMain.state++; @@ -1461,14 +1493,14 @@ void sub_804CF14(void) break; case 7: CalculateEnemyPartyCount(); - gUnknown_2031DA8->partyCounts[0] = gPlayerPartyCount; - gUnknown_2031DA8->partyCounts[1] = gEnemyPartyCount; + sTradeMenuResourcesPtr->partyCounts[0] = gPlayerPartyCount; + sTradeMenuResourcesPtr->partyCounts[1] = gEnemyPartyCount; ClearWindowTilemap(0); sub_804F020(0); sub_804F020(1); - for (i = 0; i < gUnknown_2031DA8->partyCounts[0]; i++) + for (i = 0; i < sTradeMenuResourcesPtr->partyCounts[0]; i++) { - gUnknown_2031DA8->partyIcons[0][i] = CreateMonIcon( + sTradeMenuResourcesPtr->partyIcons[0][i] = CreateMonIcon( GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2, NULL), SpriteCB_MonIcon, gTradeMonSpriteCoords[i][0] * 8 + 14, @@ -1478,9 +1510,9 @@ void sub_804CF14(void) TRUE ); } - for (i = 0; i < gUnknown_2031DA8->partyCounts[1]; i++) + for (i = 0; i < sTradeMenuResourcesPtr->partyCounts[1]; i++) { - gUnknown_2031DA8->partyIcons[1][i] = CreateMonIcon( + sTradeMenuResourcesPtr->partyIcons[1][i] = CreateMonIcon( GetMonData(&gEnemyParty[i], MON_DATA_SPECIES2, NULL), SpriteCB_MonIcon, gTradeMonSpriteCoords[i + 6][0] * 8 + 14, @@ -1494,11 +1526,11 @@ void sub_804CF14(void) break; case 8: LoadHeldItemIcons(); - sub_812256C(gUnknown_2031DA8->partyCounts, gUnknown_2031DA8->partyIcons, 0); + sub_812256C(sTradeMenuResourcesPtr->partyCounts, sTradeMenuResourcesPtr->partyIcons, 0); gMain.state++; break; case 9: - sub_812256C(gUnknown_2031DA8->partyCounts, gUnknown_2031DA8->partyIcons, 1); + sub_812256C(sTradeMenuResourcesPtr->partyCounts, sTradeMenuResourcesPtr->partyIcons, 1); gMain.state++; break; case 10: @@ -1508,7 +1540,7 @@ void sub_804CF14(void) sub_808BEB4(gUnknown_8261ECC[0], gUnknown_2031C94[6], 0, 0, gDecompressionBuffer, 2); sub_804F728(gUnknown_8261ECC[1], gUnknown_2031C94[8], 24); gMain.state++; - gUnknown_2031DA8->unk_A8 = 0; + sTradeMenuResourcesPtr->unk_A8 = 0; break; case 11: if (sub_804F610()) @@ -1557,12 +1589,12 @@ void sub_804CF14(void) CreateSprite(&temp, (i * 32) + 24, 150, 1); } - if (gUnknown_2031DA8->tradeMenuCursorPosition < 6) - gUnknown_2031DA8->tradeMenuCursorPosition = sub_8138B20(); + if (sTradeMenuResourcesPtr->tradeMenuCursorPosition < 6) + sTradeMenuResourcesPtr->tradeMenuCursorPosition = sub_8138B20(); else - gUnknown_2031DA8->tradeMenuCursorPosition = sub_8138B20() + 6; + sTradeMenuResourcesPtr->tradeMenuCursorPosition = sub_8138B20() + 6; - gUnknown_2031DA8->tradeMenuCursorSpriteIdx = CreateSprite(&gUnknown_8261CB0, gTradeMonSpriteCoords[gUnknown_2031DA8->tradeMenuCursorPosition][0] * 8 + 32, gTradeMonSpriteCoords[gUnknown_2031DA8->tradeMenuCursorPosition][1] * 8, 2); + sTradeMenuResourcesPtr->tradeMenuCursorSpriteIdx = CreateSprite(&gUnknown_8261CB0, gTradeMonSpriteCoords[sTradeMenuResourcesPtr->tradeMenuCursorPosition][0] * 8 + 32, gTradeMonSpriteCoords[sTradeMenuResourcesPtr->tradeMenuCursorPosition][1] * 8, 2); gMain.state = 16; break; case 16: @@ -1571,8 +1603,8 @@ void sub_804CF14(void) break; case 17: sub_804D694(1); - gUnknown_2031DA8->unk_0 = 0; - gUnknown_2031DA8->unk_1 = 0; + sTradeMenuResourcesPtr->unk_0 = 0; + sTradeMenuResourcesPtr->unk_1 = 0; sub_804D764(); gMain.state++; break; @@ -1716,7 +1748,7 @@ void sub_804CF14(void) "\tb _0804D4B4\n" "_0804D00C:\n" "\tbl CalculateEnemyPartyCount\n" - "\tldr r4, _0804D12C @ =gUnknown_2031DA8\n" + "\tldr r4, _0804D12C @ =sTradeMenuResourcesPtr\n" "\tldr r0, [r4]\n" "\tldr r1, _0804D130 @ =gPlayerPartyCount\n" "\tldrb r1, [r1]\n" @@ -1789,7 +1821,7 @@ void sub_804CF14(void) "\tblt _0804D048\n" "_0804D0A8:\n" "\tmovs r6, 0\n" - "\tldr r1, _0804D12C @ =gUnknown_2031DA8\n" + "\tldr r1, _0804D12C @ =sTradeMenuResourcesPtr\n" "\tldr r0, [r1]\n" "\tadds r0, 0x37\n" "\tldrb r0, [r0]\n" @@ -1853,7 +1885,7 @@ void sub_804CF14(void) "\tadds r1, r3\n" "\tb _0804D4B4\n" "\t.align 2, 0\n" - "_0804D12C: .4byte gUnknown_2031DA8\n" + "_0804D12C: .4byte sTradeMenuResourcesPtr\n" "_0804D130: .4byte gPlayerPartyCount\n" "_0804D134: .4byte gEnemyPartyCount\n" "_0804D138: .4byte gTradeMonSpriteCoords\n" @@ -1864,7 +1896,7 @@ void sub_804CF14(void) "_0804D14C: .4byte gMain\n" "_0804D150:\n" "\tbl LoadHeldItemIcons\n" - "\tldr r0, _0804D170 @ =gUnknown_2031DA8\n" + "\tldr r0, _0804D170 @ =sTradeMenuResourcesPtr\n" "\tldr r1, [r0]\n" "\tadds r0, r1, 0\n" "\tadds r0, 0x36\n" @@ -1877,10 +1909,10 @@ void sub_804CF14(void) "\tadds r1, r5\n" "\tb _0804D4B4\n" "\t.align 2, 0\n" - "_0804D170: .4byte gUnknown_2031DA8\n" + "_0804D170: .4byte sTradeMenuResourcesPtr\n" "_0804D174: .4byte gMain\n" "_0804D178:\n" - "\tldr r0, _0804D194 @ =gUnknown_2031DA8\n" + "\tldr r0, _0804D194 @ =sTradeMenuResourcesPtr\n" "\tldr r1, [r0]\n" "\tadds r0, r1, 0\n" "\tadds r0, 0x36\n" @@ -1893,7 +1925,7 @@ void sub_804CF14(void) "\tadds r1, r7\n" "\tb _0804D4B4\n" "\t.align 2, 0\n" - "_0804D194: .4byte gUnknown_2031DA8\n" + "_0804D194: .4byte sTradeMenuResourcesPtr\n" "_0804D198: .4byte gMain\n" "_0804D19C:\n" "\tldr r0, _0804D214 @ =gSaveBlock2Ptr\n" @@ -1946,7 +1978,7 @@ void sub_804CF14(void) "\tadds r0, 0x1\n" "\tmovs r2, 0\n" "\tstrb r0, [r1]\n" - "\tldr r0, _0804D22C @ =gUnknown_2031DA8\n" + "\tldr r0, _0804D22C @ =sTradeMenuResourcesPtr\n" "\tldr r0, [r0]\n" "\tadds r0, 0xA8\n" "\tstrb r2, [r0]\n" @@ -1958,7 +1990,7 @@ void sub_804CF14(void) "_0804D220: .4byte gLinkPlayers + 8\n" "_0804D224: .4byte gUnknown_8261ECC\n" "_0804D228: .4byte gMain\n" - "_0804D22C: .4byte gUnknown_2031DA8\n" + "_0804D22C: .4byte sTradeMenuResourcesPtr\n" "_0804D230:\n" "\tbl sub_804F610\n" "\tlsls r0, 24\n" @@ -2132,7 +2164,7 @@ void sub_804CF14(void) "\tadds r6, 0x1\n" "\tcmp r6, 0x5\n" "\tble _0804D36C\n" - "\tldr r4, _0804D3B4 @ =gUnknown_2031DA8\n" + "\tldr r4, _0804D3B4 @ =sTradeMenuResourcesPtr\n" "\tldr r0, [r4]\n" "\tadds r0, 0x35\n" "\tldrb r0, [r0]\n" @@ -2143,7 +2175,7 @@ void sub_804CF14(void) "\tb _0804D3C0\n" "\t.align 2, 0\n" "_0804D3B0: .4byte gUnknown_8261CC8\n" - "_0804D3B4: .4byte gUnknown_2031DA8\n" + "_0804D3B4: .4byte sTradeMenuResourcesPtr\n" "_0804D3B8:\n" "\tbl sub_8138B20\n" "\tldr r1, [r4]\n" @@ -2153,7 +2185,7 @@ void sub_804CF14(void) "\tstrb r0, [r1]\n" "\tldr r0, _0804D404 @ =gUnknown_8261CB0\n" "\tldr r3, _0804D408 @ =gTradeMonSpriteCoords\n" - "\tldr r4, _0804D40C @ =gUnknown_2031DA8\n" + "\tldr r4, _0804D40C @ =sTradeMenuResourcesPtr\n" "\tldr r1, [r4]\n" "\tadds r1, 0x35\n" "\tldrb r2, [r1]\n" @@ -2184,7 +2216,7 @@ void sub_804CF14(void) "\t.align 2, 0\n" "_0804D404: .4byte gUnknown_8261CB0\n" "_0804D408: .4byte gTradeMonSpriteCoords\n" - "_0804D40C: .4byte gUnknown_2031DA8\n" + "_0804D40C: .4byte sTradeMenuResourcesPtr\n" "_0804D410: .4byte gMain\n" "_0804D414:\n" "\tmovs r0, 0\n" @@ -2193,7 +2225,7 @@ void sub_804CF14(void) "_0804D41C:\n" "\tmovs r0, 0x1\n" "\tbl sub_804D694\n" - "\tldr r2, _0804D43C @ =gUnknown_2031DA8\n" + "\tldr r2, _0804D43C @ =sTradeMenuResourcesPtr\n" "\tldr r0, [r2]\n" "\tmovs r1, 0\n" "\tstrb r1, [r0]\n" @@ -2206,7 +2238,7 @@ void sub_804CF14(void) "\tadds r1, r2\n" "\tb _0804D4B4\n" "\t.align 2, 0\n" - "_0804D43C: .4byte gUnknown_2031DA8\n" + "_0804D43C: .4byte sTradeMenuResourcesPtr\n" "_0804D440: .4byte gMain\n" "_0804D444:\n" "\tldr r2, _0804D478 @ =gPaletteFade\n" @@ -2303,10 +2335,10 @@ void sub_804D4F8(void) void sub_804D50C(void) { - if (++gUnknown_2031DA8->unk_A8 >= 16) + if (++sTradeMenuResourcesPtr->unk_A8 >= 16) { BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); - gUnknown_2031DA8->unk_6F = 10; + sTradeMenuResourcesPtr->unk_6F = 10; } } @@ -2314,16 +2346,16 @@ void sub_804D548(void) { if (!gPaletteFade.active) { - gUnknown_2031DA4[0] = gUnknown_2031DA8->tradeMenuCursorPosition; - gUnknown_2031DA4[1] = gUnknown_2031DA8->unk_7E; + gUnknown_2031DA4[0] = sTradeMenuResourcesPtr->tradeMenuCursorPosition; + gUnknown_2031DA4[1] = sTradeMenuResourcesPtr->unk_7E; if (gWirelessCommType != 0) { - gUnknown_2031DA8->unk_6F = 16; + sTradeMenuResourcesPtr->unk_6F = 16; } else { sub_800AA80(32); - gUnknown_2031DA8->unk_6F = 13; + sTradeMenuResourcesPtr->unk_6F = 13; } } } @@ -2337,10 +2369,10 @@ void sub_804D5A4(void) { Free(gUnknown_2031C90); FreeAllWindowBuffers(); - Free(gUnknown_2031DA8); + Free(sTradeMenuResourcesPtr); gMain.callback1 = NULL; DestroyWirelessStatusIndicatorSprite(); - SetMainCallback2(sub_8050138); + SetMainCallback2(CB2_InitTradeAnim_LinkTrade); } } else @@ -2349,21 +2381,21 @@ void sub_804D5A4(void) { Free(gUnknown_2031C90); FreeAllWindowBuffers(); - Free(gUnknown_2031DA8); + Free(sTradeMenuResourcesPtr); gMain.callback1 = NULL; - SetMainCallback2(sub_8050138); + SetMainCallback2(CB2_InitTradeAnim_LinkTrade); } } } void sub_804D638(void) { - sub_804E9E4(); + RunTradeMenuCallback(); sub_804F4DC(); sub_804EAE4(0); sub_804EAE4(1); - SetGpuReg(REG_OFFSET_BG2HOFS, gUnknown_2031DA8->unk_0++); - SetGpuReg(REG_OFFSET_BG3HOFS, gUnknown_2031DA8->unk_1--); + SetGpuReg(REG_OFFSET_BG2HOFS, sTradeMenuResourcesPtr->unk_0++); + SetGpuReg(REG_OFFSET_BG3HOFS, sTradeMenuResourcesPtr->unk_1--); RunTextPrinters_CheckPrinter0Active(); RunTasks(); AnimateSprites(); @@ -2408,26 +2440,26 @@ void sub_804D764(void) int i; for (i = 0; i < PARTY_SIZE; i++) { - if (i < gUnknown_2031DA8->partyCounts[0]) + if (i < sTradeMenuResourcesPtr->partyCounts[0]) { - gSprites[gUnknown_2031DA8->partyIcons[0][i]].invisible = FALSE; - gUnknown_2031DA8->tradeMenuOptionsActive[i] = TRUE; + gSprites[sTradeMenuResourcesPtr->partyIcons[0][i]].invisible = FALSE; + sTradeMenuResourcesPtr->tradeMenuOptionsActive[i] = TRUE; } else { - gUnknown_2031DA8->tradeMenuOptionsActive[i] = FALSE; + sTradeMenuResourcesPtr->tradeMenuOptionsActive[i] = FALSE; } - if (i < gUnknown_2031DA8->partyCounts[1]) + if (i < sTradeMenuResourcesPtr->partyCounts[1]) { - gSprites[gUnknown_2031DA8->partyIcons[1][i]].invisible = FALSE; - gUnknown_2031DA8->tradeMenuOptionsActive[i + 6] = TRUE; + gSprites[sTradeMenuResourcesPtr->partyIcons[1][i]].invisible = FALSE; + sTradeMenuResourcesPtr->tradeMenuOptionsActive[i + 6] = TRUE; } else { - gUnknown_2031DA8->tradeMenuOptionsActive[i + 6] = FALSE; + sTradeMenuResourcesPtr->tradeMenuOptionsActive[i + 6] = FALSE; } } - gUnknown_2031DA8->tradeMenuOptionsActive[12] = TRUE; + sTradeMenuResourcesPtr->tradeMenuOptionsActive[12] = TRUE; } static void Trade_Memcpy(void *dest, const void *src, size_t size) @@ -2445,24 +2477,24 @@ bool8 shedinja_maker_maybe(void) int i; struct Pokemon *mon; - switch (gUnknown_2031DA8->unk_69) + switch (sTradeMenuResourcesPtr->unk_69) { case 0: Trade_Memcpy(gBlockSendBuffer, &gPlayerParty[0], 2 * sizeof(struct Pokemon)); - gUnknown_2031DA8->unk_69++; - gUnknown_2031DA8->unk_A8 = 0; + sTradeMenuResourcesPtr->unk_69++; + sTradeMenuResourcesPtr->unk_A8 = 0; break; case 1: if (IsLinkTaskFinished()) { if (GetBlockReceivedStatus() == 0) { - gUnknown_2031DA8->unk_69++; + sTradeMenuResourcesPtr->unk_69++; } else { ResetBlockReceivedFlags(); - gUnknown_2031DA8->unk_69++; + sTradeMenuResourcesPtr->unk_69++; } } break; @@ -2471,90 +2503,90 @@ bool8 shedinja_maker_maybe(void) { sub_800A474(1); } - gUnknown_2031DA8->unk_69++; + sTradeMenuResourcesPtr->unk_69++; break; case 4: if (GetBlockReceivedStatus() == 3) { Trade_Memcpy(&gEnemyParty[0], gBlockRecvBuffer[id ^ 1], 2 * sizeof(struct Pokemon)); ResetBlockReceivedFlags(); - gUnknown_2031DA8->unk_69++; + sTradeMenuResourcesPtr->unk_69++; } break; case 5: Trade_Memcpy(gBlockSendBuffer, &gPlayerParty[2], 2 * sizeof(struct Pokemon)); - gUnknown_2031DA8->unk_69++; + sTradeMenuResourcesPtr->unk_69++; break; case 7: if (id == 0) { sub_800A474(1); } - gUnknown_2031DA8->unk_69++; + sTradeMenuResourcesPtr->unk_69++; break; case 8: if (GetBlockReceivedStatus() == 3) { Trade_Memcpy(&gEnemyParty[2], gBlockRecvBuffer[id ^ 1], 200); ResetBlockReceivedFlags(); - gUnknown_2031DA8->unk_69++; + sTradeMenuResourcesPtr->unk_69++; } break; case 9: Trade_Memcpy(gBlockSendBuffer, &gPlayerParty[4], 200); - gUnknown_2031DA8->unk_69++; + sTradeMenuResourcesPtr->unk_69++; break; case 11: if (id == 0) { sub_800A474(1); } - gUnknown_2031DA8->unk_69++; + sTradeMenuResourcesPtr->unk_69++; break; case 12: if (GetBlockReceivedStatus() == 3) { Trade_Memcpy(&gEnemyParty[4], gBlockRecvBuffer[id ^ 1], 200); ResetBlockReceivedFlags(); - gUnknown_2031DA8->unk_69++; + sTradeMenuResourcesPtr->unk_69++; } break; case 13: Trade_Memcpy(gBlockSendBuffer, gSaveBlock1Ptr->mail, 220); - gUnknown_2031DA8->unk_69++; + sTradeMenuResourcesPtr->unk_69++; break; case 15: if (id == 0) { sub_800A474(3); } - gUnknown_2031DA8->unk_69++; + sTradeMenuResourcesPtr->unk_69++; break; case 16: if (GetBlockReceivedStatus() == 3) { - Trade_Memcpy(gUnknown_2031CCC, gBlockRecvBuffer[id ^ 1], 216); + Trade_Memcpy(gLinkPartnerMail, gBlockRecvBuffer[id ^ 1], 216); ResetBlockReceivedFlags(); - gUnknown_2031DA8->unk_69++; + sTradeMenuResourcesPtr->unk_69++; } break; case 17: Trade_Memcpy(gBlockSendBuffer, gSaveBlock1Ptr->giftRibbons, 11); - gUnknown_2031DA8->unk_69++; + sTradeMenuResourcesPtr->unk_69++; break; case 19: if (id == 0) { sub_800A474(4); } - gUnknown_2031DA8->unk_69++; + sTradeMenuResourcesPtr->unk_69++; break; case 20: if (GetBlockReceivedStatus() == 3) { - Trade_Memcpy(gUnknown_2031DA8->unk_A9, gBlockRecvBuffer[id ^ 1], 11); + Trade_Memcpy(sTradeMenuResourcesPtr->unk_A9, gBlockRecvBuffer[id ^ 1], 11); ResetBlockReceivedFlags(); - gUnknown_2031DA8->unk_69++; + sTradeMenuResourcesPtr->unk_69++; } break; case 21: @@ -2582,11 +2614,11 @@ bool8 shedinja_maker_maybe(void) case 10: case 14: case 18: - gUnknown_2031DA8->unk_A8++; - if (gUnknown_2031DA8->unk_A8 > 10) + sTradeMenuResourcesPtr->unk_A8++; + if (sTradeMenuResourcesPtr->unk_A8 > 10) { - gUnknown_2031DA8->unk_A8 = 0; - gUnknown_2031DA8->unk_69++; + sTradeMenuResourcesPtr->unk_A8 = 0; + sTradeMenuResourcesPtr->unk_69++; } break; } @@ -2595,7 +2627,7 @@ bool8 shedinja_maker_maybe(void) void sub_804DBAC(void) { - sub_804F728(gUnknown_841E0A5, (u8 *)OBJ_VRAM0 + gUnknown_2031DA8->unk_72 * 32, 0x18); + sub_804F728(gUnknown_841E0A5, (u8 *)OBJ_VRAM0 + sTradeMenuResourcesPtr->unk_72 * 32, 0x18); } void sub_804DBD4(u8 a0, u8 a1) @@ -2605,16 +2637,16 @@ void sub_804DBD4(u8 a0, u8 a1) switch (gBlockRecvBuffer[0][0]) { case 0xEEAA: - gUnknown_2031DA8->unk_78 = 2; + sTradeMenuResourcesPtr->unk_78 = 2; break; case 0xAABB: - gUnknown_2031DA8->unk_78 = 1; + sTradeMenuResourcesPtr->unk_78 = 1; break; case 0xBBBB: - gUnknown_2031DA8->unk_7A = 1; + sTradeMenuResourcesPtr->unk_7A = 1; break; case 0xBBCC: - gUnknown_2031DA8->unk_7A = 2; + sTradeMenuResourcesPtr->unk_7A = 2; break; } ResetBlockReceivedFlag(0); @@ -2625,17 +2657,17 @@ void sub_804DBD4(u8 a0, u8 a1) switch (gBlockRecvBuffer[1][0]) { case 0xEEAA: - gUnknown_2031DA8->unk_79 = 2; + sTradeMenuResourcesPtr->unk_79 = 2; break; case 0xAABB: - gUnknown_2031DA8->unk_7E = gBlockRecvBuffer[1][1] + 6; - gUnknown_2031DA8->unk_79 = 1; + sTradeMenuResourcesPtr->unk_7E = gBlockRecvBuffer[1][1] + 6; + sTradeMenuResourcesPtr->unk_79 = 1; break; case 0xBBBB: - gUnknown_2031DA8->unk_7B = 1; + sTradeMenuResourcesPtr->unk_7B = 1; break; case 0xBBCC: - gUnknown_2031DA8->unk_7B = 2; + sTradeMenuResourcesPtr->unk_7B = 2; break; } ResetBlockReceivedFlag(1); @@ -2650,27 +2682,27 @@ void sub_804DCF4(u8 a0, u8 a1) { case 0xEEBB: BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); - sub_804F5BC(4); - gUnknown_2031DA8->unk_6F = 11; + PrintTradeErrorOrStatusMessage(TRADESTATMSG_WAITINGFORFRIEND); + sTradeMenuResourcesPtr->unk_6F = 11; break; case 0xEECC: - sub_804F5BC(5); - gUnknown_2031DA8->unk_6F = 8; + PrintTradeErrorOrStatusMessage(TRADESTATMSG_FRIENDWANTSTOTRADE); + sTradeMenuResourcesPtr->unk_6F = 8; break; case 0xDDDD: - gUnknown_2031DA8->unk_7E = gBlockRecvBuffer[0][1] + 6; + sTradeMenuResourcesPtr->unk_7E = gBlockRecvBuffer[0][1] + 6; rbox_fill_rectangle(0); - sub_804EAAC(gUnknown_2031DA8->tradeMenuCursorPosition); - sub_804EAAC(gUnknown_2031DA8->unk_7E); - gUnknown_2031DA8->unk_6F = 7; + sub_804EAAC(sTradeMenuResourcesPtr->tradeMenuCursorPosition); + sub_804EAAC(sTradeMenuResourcesPtr->unk_7E); + sTradeMenuResourcesPtr->unk_6F = 7; break; case 0xCCDD: BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); - gUnknown_2031DA8->unk_6F = 10; + sTradeMenuResourcesPtr->unk_6F = 10; break; case 0xDDEE: - sub_804F5BC(1); - gUnknown_2031DA8->unk_6F = 8; + PrintTradeErrorOrStatusMessage(TRADESTATMSG_CANCELED); + sTradeMenuResourcesPtr->unk_6F = 8; } ResetBlockReceivedFlag(0); } @@ -2681,68 +2713,68 @@ void sub_804DCF4(u8 a0, u8 a1) void sub_804DDF0(void) { - if (gUnknown_2031DA8->unk_78 && gUnknown_2031DA8->unk_79) + if (sTradeMenuResourcesPtr->unk_78 && sTradeMenuResourcesPtr->unk_79) { - if (gUnknown_2031DA8->unk_78 == 1 && gUnknown_2031DA8->unk_79 == 1) + if (sTradeMenuResourcesPtr->unk_78 == 1 && sTradeMenuResourcesPtr->unk_79 == 1) { - gUnknown_2031DA8->unk_6F = 6; - gUnknown_2031DA8->linkData[0] = 0xDDDD; - gUnknown_2031DA8->linkData[1] = gUnknown_2031DA8->tradeMenuCursorPosition; + sTradeMenuResourcesPtr->unk_6F = 6; + sTradeMenuResourcesPtr->linkData[0] = 0xDDDD; + sTradeMenuResourcesPtr->linkData[1] = sTradeMenuResourcesPtr->tradeMenuCursorPosition; sub_804F488(5, 0); - gUnknown_2031DA8->unk_78 = gUnknown_2031DA8->unk_79 = 0; + sTradeMenuResourcesPtr->unk_78 = sTradeMenuResourcesPtr->unk_79 = 0; } - else if (gUnknown_2031DA8->unk_78 == 1 && gUnknown_2031DA8->unk_79 == 2) + else if (sTradeMenuResourcesPtr->unk_78 == 1 && sTradeMenuResourcesPtr->unk_79 == 2) { - sub_804F5BC(1); - gUnknown_2031DA8->linkData[0] = 0xEECC; - gUnknown_2031DA8->linkData[1] = 0; + PrintTradeErrorOrStatusMessage(TRADESTATMSG_CANCELED); + sTradeMenuResourcesPtr->linkData[0] = 0xEECC; + sTradeMenuResourcesPtr->linkData[1] = 0; sub_804F488(5, 0); - gUnknown_2031DA8->unk_7A = gUnknown_2031DA8->unk_7B = 0; - gUnknown_2031DA8->unk_78 = gUnknown_2031DA8->unk_79 = 0; - gUnknown_2031DA8->unk_6F = 8; + sTradeMenuResourcesPtr->unk_7A = sTradeMenuResourcesPtr->unk_7B = 0; + sTradeMenuResourcesPtr->unk_78 = sTradeMenuResourcesPtr->unk_79 = 0; + sTradeMenuResourcesPtr->unk_6F = 8; } - else if (gUnknown_2031DA8->unk_78 == 2 && gUnknown_2031DA8->unk_79 == 1) + else if (sTradeMenuResourcesPtr->unk_78 == 2 && sTradeMenuResourcesPtr->unk_79 == 1) { - sub_804F5BC(5); - gUnknown_2031DA8->linkData[0] = 0xDDEE; - gUnknown_2031DA8->linkData[1] = 0; + PrintTradeErrorOrStatusMessage(TRADESTATMSG_FRIENDWANTSTOTRADE); + sTradeMenuResourcesPtr->linkData[0] = 0xDDEE; + sTradeMenuResourcesPtr->linkData[1] = 0; sub_804F488(5, 0); - gUnknown_2031DA8->unk_7A = gUnknown_2031DA8->unk_7B = 0; - gUnknown_2031DA8->unk_78 = gUnknown_2031DA8->unk_79 = 0; - gUnknown_2031DA8->unk_6F = 8; + sTradeMenuResourcesPtr->unk_7A = sTradeMenuResourcesPtr->unk_7B = 0; + sTradeMenuResourcesPtr->unk_78 = sTradeMenuResourcesPtr->unk_79 = 0; + sTradeMenuResourcesPtr->unk_6F = 8; } - else if (gUnknown_2031DA8->unk_78 == 2 && gUnknown_2031DA8->unk_79 == 2) + else if (sTradeMenuResourcesPtr->unk_78 == 2 && sTradeMenuResourcesPtr->unk_79 == 2) { - gUnknown_2031DA8->linkData[0] = 0xEEBB; - gUnknown_2031DA8->linkData[1] = 0; + sTradeMenuResourcesPtr->linkData[0] = 0xEEBB; + sTradeMenuResourcesPtr->linkData[1] = 0; sub_804F488(5, 0); BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); - gUnknown_2031DA8->unk_78 = gUnknown_2031DA8->unk_79 = 0; - gUnknown_2031DA8->unk_6F = 11; + sTradeMenuResourcesPtr->unk_78 = sTradeMenuResourcesPtr->unk_79 = 0; + sTradeMenuResourcesPtr->unk_6F = 11; } } - if (gUnknown_2031DA8->unk_7A && gUnknown_2031DA8->unk_7B) + if (sTradeMenuResourcesPtr->unk_7A && sTradeMenuResourcesPtr->unk_7B) { - if (gUnknown_2031DA8->unk_7A == 1 && gUnknown_2031DA8->unk_7B == 1) + if (sTradeMenuResourcesPtr->unk_7A == 1 && sTradeMenuResourcesPtr->unk_7B == 1) { - gUnknown_2031DA8->linkData[0] = 0xCCDD; - gUnknown_2031DA8->linkData[1] = 0; + sTradeMenuResourcesPtr->linkData[0] = 0xCCDD; + sTradeMenuResourcesPtr->linkData[1] = 0; sub_804F488(5, 0); - gUnknown_2031DA8->unk_7A = 0; - gUnknown_2031DA8->unk_7B = 0; - gUnknown_2031DA8->unk_6F = 9; + sTradeMenuResourcesPtr->unk_7A = 0; + sTradeMenuResourcesPtr->unk_7B = 0; + sTradeMenuResourcesPtr->unk_6F = 9; } - if (gUnknown_2031DA8->unk_7A == 2 || gUnknown_2031DA8->unk_7B == 2) + if (sTradeMenuResourcesPtr->unk_7A == 2 || sTradeMenuResourcesPtr->unk_7B == 2) { - sub_804F5BC(1); - gUnknown_2031DA8->linkData[0] = 0xDDEE; - gUnknown_2031DA8->linkData[1] = 0; + PrintTradeErrorOrStatusMessage(TRADESTATMSG_CANCELED); + sTradeMenuResourcesPtr->linkData[0] = 0xDDEE; + sTradeMenuResourcesPtr->linkData[1] = 0; sub_804F488(5, 0); - gUnknown_2031DA8->unk_7A = 0; - gUnknown_2031DA8->unk_7B = 0; - gUnknown_2031DA8->unk_6F = 8; + sTradeMenuResourcesPtr->unk_7A = 0; + sTradeMenuResourcesPtr->unk_7B = 0; + sTradeMenuResourcesPtr->unk_6F = 8; } } } @@ -2769,7 +2801,7 @@ u8 sub_804E028(u8 oldPosition, u8 direction) for (i = 0; i < PARTY_SIZE; i++) { - if (gUnknown_2031DA8->tradeMenuOptionsActive[gUnknown_8261D08[oldPosition][direction][i]] == TRUE) + if (sTradeMenuResourcesPtr->tradeMenuOptionsActive[gUnknown_8261D08[oldPosition][direction][i]] == TRUE) { newPosition = gUnknown_8261D08[oldPosition][direction][i]; break; @@ -2786,15 +2818,15 @@ void TradeMenuMoveCursor(u8 *tradeMenuCursorPosition, u8 direction) if (newPosition == 12) // CANCEL { - StartSpriteAnim(&gSprites[gUnknown_2031DA8->tradeMenuCursorSpriteIdx], 1); - gSprites[gUnknown_2031DA8->tradeMenuCursorSpriteIdx].pos1.x = 224; - gSprites[gUnknown_2031DA8->tradeMenuCursorSpriteIdx].pos1.y = 160; + StartSpriteAnim(&gSprites[sTradeMenuResourcesPtr->tradeMenuCursorSpriteIdx], 1); + gSprites[sTradeMenuResourcesPtr->tradeMenuCursorSpriteIdx].pos1.x = 224; + gSprites[sTradeMenuResourcesPtr->tradeMenuCursorSpriteIdx].pos1.y = 160; } else { - StartSpriteAnim(&gSprites[gUnknown_2031DA8->tradeMenuCursorSpriteIdx], 0); - gSprites[gUnknown_2031DA8->tradeMenuCursorSpriteIdx].pos1.x = gTradeMonSpriteCoords[newPosition][0] * 8 + 32; - gSprites[gUnknown_2031DA8->tradeMenuCursorSpriteIdx].pos1.y = gTradeMonSpriteCoords[newPosition][1] * 8; + StartSpriteAnim(&gSprites[sTradeMenuResourcesPtr->tradeMenuCursorSpriteIdx], 0); + gSprites[sTradeMenuResourcesPtr->tradeMenuCursorSpriteIdx].pos1.x = gTradeMonSpriteCoords[newPosition][0] * 8 + 32; + gSprites[sTradeMenuResourcesPtr->tradeMenuCursorSpriteIdx].pos1.y = gTradeMonSpriteCoords[newPosition][1] * 8; } if (*tradeMenuCursorPosition != newPosition) @@ -2807,18 +2839,18 @@ void TradeMenuMoveCursor(u8 *tradeMenuCursorPosition, u8 direction) void sub_804E134(void) { - sub_804F5BC(0); - gUnknown_2031DA8->unk_6F = 5; + PrintTradeErrorOrStatusMessage(TRADESTATMSG_COMMSTANDBY); + sTradeMenuResourcesPtr->unk_6F = 5; if (GetMultiplayerId() == 1) { - gUnknown_2031DA8->linkData[0] = 0xAABB; - gUnknown_2031DA8->linkData[1] = gUnknown_2031DA8->tradeMenuCursorPosition; - SendBlock(bitmask_all_link_players_but_self(), gUnknown_2031DA8->linkData, 0x14); + sTradeMenuResourcesPtr->linkData[0] = 0xAABB; + sTradeMenuResourcesPtr->linkData[1] = sTradeMenuResourcesPtr->tradeMenuCursorPosition; + SendBlock(bitmask_all_link_players_but_self(), sTradeMenuResourcesPtr->linkData, 0x14); } else { - gUnknown_2031DA8->unk_78 = 1; + sTradeMenuResourcesPtr->unk_78 = 1; } } @@ -2831,26 +2863,26 @@ void sub_804E194(void) if (JOY_REPT(DPAD_UP)) { - TradeMenuMoveCursor(&gUnknown_2031DA8->tradeMenuCursorPosition, 0); + TradeMenuMoveCursor(&sTradeMenuResourcesPtr->tradeMenuCursorPosition, 0); } else if (JOY_REPT(DPAD_DOWN)) { - TradeMenuMoveCursor(&gUnknown_2031DA8->tradeMenuCursorPosition, 1); + TradeMenuMoveCursor(&sTradeMenuResourcesPtr->tradeMenuCursorPosition, 1); } else if (JOY_REPT(DPAD_LEFT)) { - TradeMenuMoveCursor(&gUnknown_2031DA8->tradeMenuCursorPosition, 2); + TradeMenuMoveCursor(&sTradeMenuResourcesPtr->tradeMenuCursorPosition, 2); } else if (JOY_REPT(DPAD_RIGHT)) { - TradeMenuMoveCursor(&gUnknown_2031DA8->tradeMenuCursorPosition, 3); + TradeMenuMoveCursor(&sTradeMenuResourcesPtr->tradeMenuCursorPosition, 3); } if (JOY_NEW(A_BUTTON)) { PlaySE(SE_SELECT); - if (gUnknown_2031DA8->tradeMenuCursorPosition < 6) // PlayerParty + if (sTradeMenuResourcesPtr->tradeMenuCursorPosition < 6) // PlayerParty { DrawTextBorderOuter(1, 1, 14); FillWindowPixelBuffer(1, PIXEL_FILL(1)); @@ -2858,34 +2890,34 @@ void sub_804E194(void) Menu_InitCursor(1, 3, 0, 0, 16, 2, 0); PutWindowTilemap(1); CopyWindowToVram(1, 3); - gUnknown_2031DA8->unk_6F = 1; + sTradeMenuResourcesPtr->unk_6F = 1; } - else if (gUnknown_2031DA8->tradeMenuCursorPosition < 12) + else if (sTradeMenuResourcesPtr->tradeMenuCursorPosition < 12) { BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); - gUnknown_2031DA8->unk_6F = 2; + sTradeMenuResourcesPtr->unk_6F = 2; } - else if (gUnknown_2031DA8->tradeMenuCursorPosition == 12) + else if (sTradeMenuResourcesPtr->tradeMenuCursorPosition == 12) { CreateYesNoMenu(&gUnknown_8261FC4, 3, 0, 2, 0x001, 14, 0); - gUnknown_2031DA8->unk_6F = 4; - sub_804F728(gUnknown_8261ECC[4], (void *)OBJ_VRAM0 + gUnknown_2031DA8->unk_72 * 32, 24); + sTradeMenuResourcesPtr->unk_6F = 4; + sub_804F728(gUnknown_8261ECC[4], (void *)OBJ_VRAM0 + sTradeMenuResourcesPtr->unk_72 * 32, 24); } } if (JOY_NEW(R_BUTTON)) { for (i = 0; i < 10; i++) - gUnknown_2031DA8->linkData[i] = i; - SendBlock(bitmask_all_link_players_but_self(), gUnknown_2031DA8->linkData, 20); + sTradeMenuResourcesPtr->linkData[i] = i; + SendBlock(bitmask_all_link_players_but_self(), sTradeMenuResourcesPtr->linkData, 20); } } void sub_804E330(void) { sub_804F3B4(); - gUnknown_2031DA8->unk_6F = 0; - gSprites[gUnknown_2031DA8->tradeMenuCursorSpriteIdx].invisible = FALSE; - sub_804F728(gUnknown_8261ECC[1], (void *)OBJ_VRAM0 + gUnknown_2031DA8->unk_72 * 32, 24); + sTradeMenuResourcesPtr->unk_6F = 0; + gSprites[sTradeMenuResourcesPtr->tradeMenuCursorSpriteIdx].invisible = FALSE; + sub_804F728(gUnknown_8261ECC[1], (void *)OBJ_VRAM0 + sTradeMenuResourcesPtr->unk_72 * 32, 24); } void sub_804E388(void) @@ -2900,28 +2932,28 @@ void sub_804E388(void) break; case 0: BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); - gUnknown_2031DA8->unk_6F = 2; + sTradeMenuResourcesPtr->unk_6F = 2; break; case 1: - switch (sub_804FA14(gPlayerParty, gPlayerPartyCount, gUnknown_2031DA8->tradeMenuCursorPosition)) + switch (sub_804FA14(gPlayerParty, gPlayerPartyCount, sTradeMenuResourcesPtr->tradeMenuCursorPosition)) { case 0: sub_804E134(); - gSprites[gUnknown_2031DA8->tradeMenuCursorSpriteIdx].invisible = TRUE; + gSprites[sTradeMenuResourcesPtr->tradeMenuCursorSpriteIdx].invisible = TRUE; break; case 1: sub_804F488(3, 3); - gUnknown_2031DA8->unk_6F = 8; + sTradeMenuResourcesPtr->unk_6F = 8; break; case 2: case 4: sub_804F488(3, 6); - gUnknown_2031DA8->unk_6F = 8; + sTradeMenuResourcesPtr->unk_6F = 8; break; case 3: case 5: sub_804F488(3, 7); - gUnknown_2031DA8->unk_6F = 8; + sTradeMenuResourcesPtr->unk_6F = 8; break; } break; @@ -2941,10 +2973,10 @@ void sub_804E494(void) { if (!gPaletteFade.active) { - if (gUnknown_2031DA8->tradeMenuCursorPosition < 6) - ShowPokemonSummaryScreen(gPlayerParty, gUnknown_2031DA8->tradeMenuCursorPosition, gUnknown_2031DA8->partyCounts[0] - 1, sub_804CF14, 4); + if (sTradeMenuResourcesPtr->tradeMenuCursorPosition < 6) + ShowPokemonSummaryScreen(gPlayerParty, sTradeMenuResourcesPtr->tradeMenuCursorPosition, sTradeMenuResourcesPtr->partyCounts[0] - 1, sub_804CF14, 4); else - ShowPokemonSummaryScreen(gEnemyParty, gUnknown_2031DA8->tradeMenuCursorPosition - 6, gUnknown_2031DA8->partyCounts[1] - 1, sub_804CF14, 4); + ShowPokemonSummaryScreen(gEnemyParty, sTradeMenuResourcesPtr->tradeMenuCursorPosition - 6, sTradeMenuResourcesPtr->partyCounts[1] - 1, sub_804CF14, 4); FreeAllWindowBuffers(); } } @@ -2959,8 +2991,8 @@ u8 sub_804E50C(u8 *a0, u8 a1, u8 a2) if (a2 != i) r4 += a0[i]; } - species = GetMonData(&gEnemyParty[gUnknown_2031DA8->unk_7E % 6], MON_DATA_SPECIES); - if ((species == SPECIES_DEOXYS || species == SPECIES_MEW) && !GetMonData(&gEnemyParty[gUnknown_2031DA8->unk_7E % 6], MON_DATA_OBEDIENCE)) + species = GetMonData(&gEnemyParty[sTradeMenuResourcesPtr->unk_7E % 6], MON_DATA_SPECIES); + if ((species == SPECIES_DEOXYS || species == SPECIES_MEW) && !GetMonData(&gEnemyParty[sTradeMenuResourcesPtr->unk_7E % 6], MON_DATA_OBEDIENCE)) return 2; if (r4 != 0) r4 = 1; @@ -2972,29 +3004,29 @@ void sub_804E5A0(void) int i; u8 arr[12]; - for (i = 0; i < gUnknown_2031DA8->partyCounts[0]; i++) + for (i = 0; i < sTradeMenuResourcesPtr->partyCounts[0]; i++) { - arr[i] = gUnknown_2031DA8->unk_45[0][i]; + arr[i] = sTradeMenuResourcesPtr->unk_45[0][i]; } - switch (sub_804E50C(arr, gUnknown_2031DA8->partyCounts[0], gUnknown_2031DA8->tradeMenuCursorPosition)) + switch (sub_804E50C(arr, sTradeMenuResourcesPtr->partyCounts[0], sTradeMenuResourcesPtr->tradeMenuCursorPosition)) { case 0: sub_804F488(3, 3); - gUnknown_2031DA8->linkData[0] = 0xBBCC; + sTradeMenuResourcesPtr->linkData[0] = 0xBBCC; sub_804F488(0xB4, 0); break; case 1: sub_804F488(3, 1); - gUnknown_2031DA8->linkData[0] = 0xBBBB; + sTradeMenuResourcesPtr->linkData[0] = 0xBBBB; if (IsLinkTaskFinished()) { - SendBlock(bitmask_all_link_players_but_self(), gUnknown_2031DA8->linkData, 20); + SendBlock(bitmask_all_link_players_but_self(), sTradeMenuResourcesPtr->linkData, 20); } break; case 2: sub_804F488(3, 8); - gUnknown_2031DA8->linkData[0] = 0xBBCC; + sTradeMenuResourcesPtr->linkData[0] = 0xBBCC; sub_804F488(0xB4, 0); break; } @@ -3006,7 +3038,7 @@ void sub_804E674(void) { case 0: sub_804E5A0(); - gUnknown_2031DA8->unk_6F = 100; + sTradeMenuResourcesPtr->unk_6F = 100; PutWindowTilemap(17); break; case 1: @@ -3014,10 +3046,10 @@ void sub_804E674(void) sub_804F488(3, 1); if (IsLinkTaskFinished()) { - gUnknown_2031DA8->linkData[0] = 0xBBCC; - SendBlock(bitmask_all_link_players_but_self(), gUnknown_2031DA8->linkData, 20); + sTradeMenuResourcesPtr->linkData[0] = 0xBBCC; + SendBlock(bitmask_all_link_players_but_self(), sTradeMenuResourcesPtr->linkData, 20); } - gUnknown_2031DA8->unk_6F = 100; + sTradeMenuResourcesPtr->unk_6F = 100; PutWindowTilemap(17); break; } @@ -3027,7 +3059,7 @@ void sub_804E6FC(void) { int i; - for (i = 0; i < gUnknown_2031DA8->partyCounts[1] - 4; i++) + for (i = 0; i < sTradeMenuResourcesPtr->partyCounts[1] - 4; i++) { PutWindowTilemap(i + 12); CopyWindowToVram(i + 12, 1); @@ -3039,12 +3071,12 @@ void sub_804E744(void) switch (Menu_ProcessInputNoWrapClearOnChoose()) { case 0: - sub_804F5BC(4); - gUnknown_2031DA8->linkData[0] = 0xEEAA; - gUnknown_2031DA8->linkData[1] = 0; + PrintTradeErrorOrStatusMessage(TRADESTATMSG_WAITINGFORFRIEND); + sTradeMenuResourcesPtr->linkData[0] = 0xEEAA; + sTradeMenuResourcesPtr->linkData[1] = 0; sub_804F488(5, 0); - gSprites[gUnknown_2031DA8->tradeMenuCursorSpriteIdx].invisible = TRUE; - gUnknown_2031DA8->unk_6F = 100; + gSprites[sTradeMenuResourcesPtr->tradeMenuCursorSpriteIdx].invisible = TRUE; + sTradeMenuResourcesPtr->unk_6F = 100; sub_804E6FC(); break; case 1: @@ -3060,30 +3092,30 @@ void sub_804E7C8(void) if (GetMultiplayerId() == 0) { rbox_fill_rectangle(0); - sub_804EAAC(gUnknown_2031DA8->tradeMenuCursorPosition); - sub_804EAAC(gUnknown_2031DA8->unk_7E); + sub_804EAAC(sTradeMenuResourcesPtr->tradeMenuCursorPosition); + sub_804EAAC(sTradeMenuResourcesPtr->unk_7E); } - gUnknown_2031DA8->unk_6F = 7; + sTradeMenuResourcesPtr->unk_6F = 7; } void sub_804E804(void) { - if (gUnknown_2031DA8->unk_74[0] == 5 && gUnknown_2031DA8->unk_74[1] == 5) + if (sTradeMenuResourcesPtr->unk_74[0] == 5 && sTradeMenuResourcesPtr->unk_74[1] == 5) { sub_804DBAC(); - gUnknown_2031DA8->unk_6F = 14; + sTradeMenuResourcesPtr->unk_6F = 14; } } void sub_804E830(void) { - gUnknown_2031DA8->unk_A8++; + sTradeMenuResourcesPtr->unk_A8++; - if (gUnknown_2031DA8->unk_A8 > 120) + if (sTradeMenuResourcesPtr->unk_A8 > 120) { CreateYesNoMenu(&gUnknown_8261FC4, 3, 0, 2, 1, 14, 0); - gUnknown_2031DA8->unk_A8 = 0; - gUnknown_2031DA8->unk_6F = 3; + sTradeMenuResourcesPtr->unk_A8 = 0; + sTradeMenuResourcesPtr->unk_6F = 3; } } @@ -3105,8 +3137,8 @@ void sub_804E880(void) sub_804F3C8(0); sub_804F3C8(1); - gUnknown_2031DA8->unk_6F = 0; - gSprites[gUnknown_2031DA8->tradeMenuCursorSpriteIdx].invisible = FALSE; + sTradeMenuResourcesPtr->unk_6F = 0; + gSprites[sTradeMenuResourcesPtr->tradeMenuCursorSpriteIdx].invisible = FALSE; } } @@ -3123,7 +3155,7 @@ void sub_804E908(void) sub_800AA80(12); } - gUnknown_2031DA8->unk_6F = 12; + sTradeMenuResourcesPtr->unk_6F = 12; } } @@ -3134,7 +3166,7 @@ void sub_804E944(void) if (IsLinkTaskFinished()) { Free(gUnknown_2031C90); - Free(gUnknown_2031DA8); + Free(sTradeMenuResourcesPtr); FreeAllWindowBuffers(); DestroyWirelessStatusIndicatorSprite(); SetMainCallback2(c2_8056854); @@ -3145,7 +3177,7 @@ void sub_804E944(void) if (!gReceivedRemoteLinkPlayers) { Free(gUnknown_2031C90); - Free(gUnknown_2031DA8); + Free(sTradeMenuResourcesPtr); FreeAllWindowBuffers(); SetMainCallback2(c2_8056854); } @@ -3157,13 +3189,13 @@ void sub_804E9C0(void) if (!sub_80FA484(FALSE)) { sub_800AB9C(); - gUnknown_2031DA8->unk_6F = 13; + sTradeMenuResourcesPtr->unk_6F = 13; } } -void sub_804E9E4(void) +static void RunTradeMenuCallback(void) { - switch (gUnknown_2031DA8->unk_6F) + switch (sTradeMenuResourcesPtr->unk_6F) { case 0: sub_804E194(); @@ -3220,10 +3252,10 @@ void sub_804EAAC(u8 a0) { u8 whichParty = a0 / PARTY_SIZE; - if (gUnknown_2031DA8->unk_74[whichParty] == 0) + if (sTradeMenuResourcesPtr->unk_74[whichParty] == 0) { - gUnknown_2031DA8->unk_74[whichParty] = 1; - gUnknown_2031DA8->unk_76[whichParty] = a0; + sTradeMenuResourcesPtr->unk_74[whichParty] = 1; + sTradeMenuResourcesPtr->unk_76[whichParty] = a0; } } @@ -3235,20 +3267,20 @@ void sub_804EAE4(u8 a0) u8 i; u8 partyIdx; u8 whichParty; - u8 monIdx = gUnknown_2031DA8->unk_76[a0]; + u8 monIdx = sTradeMenuResourcesPtr->unk_76[a0]; whichParty = 1; - if (gUnknown_2031DA8->unk_76[a0] < PARTY_SIZE) + if (sTradeMenuResourcesPtr->unk_76[a0] < PARTY_SIZE) whichParty = 0; partyIdx = monIdx % PARTY_SIZE; nameStringWidth = 0; - switch (gUnknown_2031DA8->unk_74[a0]) + switch (sTradeMenuResourcesPtr->unk_74[a0]) { case 1: - for (i = 0; i < gUnknown_2031DA8->partyCounts[a0]; i++) + for (i = 0; i < sTradeMenuResourcesPtr->partyCounts[a0]; i++) { - gSprites[gUnknown_2031DA8->partyIcons[0][i + (whichParty * PARTY_SIZE)]].invisible = TRUE; + gSprites[sTradeMenuResourcesPtr->partyIcons[0][i + (whichParty * PARTY_SIZE)]].invisible = TRUE; } for (i = 0; i < 6; i++) @@ -3256,13 +3288,13 @@ void sub_804EAE4(u8 a0) ClearWindowTilemap(i + (a0 * 6 + 2)); } - gSprites[gUnknown_2031DA8->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].invisible = FALSE; - gSprites[gUnknown_2031DA8->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].data[0] = 20; - gSprites[gUnknown_2031DA8->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].data[2] = (gTradeMonSpriteCoords[whichParty * PARTY_SIZE][0] + gTradeMonSpriteCoords[whichParty * PARTY_SIZE + 1][0]) / 2 * 8 + 14; - gSprites[gUnknown_2031DA8->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].data[4] = (gTradeMonSpriteCoords[whichParty * PARTY_SIZE][1] * 8) - 12; - StoreSpriteCallbackInData6(&gSprites[gUnknown_2031DA8->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]], SpriteCB_MonIcon); - gUnknown_2031DA8->unk_74[a0]++; - sub_8075490(&gSprites[gUnknown_2031DA8->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]]); + gSprites[sTradeMenuResourcesPtr->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].invisible = FALSE; + gSprites[sTradeMenuResourcesPtr->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].data[0] = 20; + gSprites[sTradeMenuResourcesPtr->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].data[2] = (gTradeMonSpriteCoords[whichParty * PARTY_SIZE][0] + gTradeMonSpriteCoords[whichParty * PARTY_SIZE + 1][0]) / 2 * 8 + 14; + gSprites[sTradeMenuResourcesPtr->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].data[4] = (gTradeMonSpriteCoords[whichParty * PARTY_SIZE][1] * 8) - 12; + StoreSpriteCallbackInData6(&gSprites[sTradeMenuResourcesPtr->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]], SpriteCB_MonIcon); + sTradeMenuResourcesPtr->unk_74[a0]++; + sub_8075490(&gSprites[sTradeMenuResourcesPtr->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]]); CopyToBgTilemapBufferRect_ChangePalette(1, gTradePartyBoxTilemap, a0 * 15, 0, 15, 17, 0); CopyBgTilemapBufferToVram(1); CopyBgTilemapBufferToVram(0); @@ -3271,16 +3303,16 @@ void sub_804EAE4(u8 a0) sub_804F3B4(); break; case 2: - if (gSprites[gUnknown_2031DA8->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].callback == SpriteCB_MonIcon) - gUnknown_2031DA8->unk_74[a0] = 3; + if (gSprites[sTradeMenuResourcesPtr->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].callback == SpriteCB_MonIcon) + sTradeMenuResourcesPtr->unk_74[a0] = 3; break; case 3: CopyToBgTilemapBufferRect_ChangePalette(1, gTradeMovesBoxTilemap, whichParty * 15, 0, 15, 17, 0); CopyBgTilemapBufferToVram(1); - gSprites[gUnknown_2031DA8->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].pos1.x = (gTradeMonSpriteCoords[whichParty * PARTY_SIZE][0] + gTradeMonSpriteCoords[whichParty * PARTY_SIZE + 1][0]) / 2 * 8 + 14; - gSprites[gUnknown_2031DA8->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].pos1.y = (gTradeMonSpriteCoords[whichParty * PARTY_SIZE][1] * 8) - 12; - gSprites[gUnknown_2031DA8->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].pos2.x = 0; - gSprites[gUnknown_2031DA8->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].pos2.y = 0; + gSprites[sTradeMenuResourcesPtr->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].pos1.x = (gTradeMonSpriteCoords[whichParty * PARTY_SIZE][0] + gTradeMonSpriteCoords[whichParty * PARTY_SIZE + 1][0]) / 2 * 8 + 14; + gSprites[sTradeMenuResourcesPtr->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].pos1.y = (gTradeMonSpriteCoords[whichParty * PARTY_SIZE][1] * 8) - 12; + gSprites[sTradeMenuResourcesPtr->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].pos2.x = 0; + gSprites[sTradeMenuResourcesPtr->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].pos2.y = 0; nameStringWidth = sub_804EE6C(nickname, whichParty, partyIdx); AddTextPrinterParameterized3((a0 * 2) + 14, 0, (80 - nameStringWidth) / 2, 4, gUnknown_8261F18, 0, nickname); sub_804EED4(movesString, whichParty, partyIdx); @@ -3289,11 +3321,11 @@ void sub_804EAE4(u8 a0) CopyWindowToVram((a0 * 2) + 14, 3); PutWindowTilemap((a0 * 2) + 15); CopyWindowToVram((a0 * 2) + 15, 3); - gUnknown_2031DA8->unk_74[a0]++; + sTradeMenuResourcesPtr->unk_74[a0]++; break; case 4: sub_804F08C(a0, partyIdx, gUnknown_8262055[a0][0] + 4, gUnknown_8262055[a0][1] + 1, gUnknown_8262055[a0][0], gUnknown_8262055[a0][1]); - gUnknown_2031DA8->unk_74[a0]++; + sTradeMenuResourcesPtr->unk_74[a0]++; break; } } @@ -3314,7 +3346,7 @@ void sub_804EED4(u8 *a0, u8 a1, u8 a2) u16 moves[MAX_MON_MOVES]; u16 i; - if (!gUnknown_2031DA8->unk_51[a1][a2]) + if (!sTradeMenuResourcesPtr->unk_51[a1][a2]) { for (i = 0; i < MAX_MON_MOVES; i++) { @@ -3365,7 +3397,7 @@ void sub_804F020(u8 whichParty) u8 nickname[30]; struct Pokemon * party = whichParty == 0 ? gPlayerParty : gEnemyParty; u8 i; - for (i = 0; i < gUnknown_2031DA8->partyCounts[whichParty]; i++) + for (i = 0; i < sTradeMenuResourcesPtr->partyCounts[whichParty]; i++) { GetMonData(&party[i], MON_DATA_NICKNAME, buff); StringCopy10(nickname, buff); @@ -3388,20 +3420,20 @@ void sub_804F08C(u8 whichParty, u8 monIdx, u8 a2, u8 a3, u8 a4, u8 a5) else level = GetMonData(&gEnemyParty[monIdx], MON_DATA_LEVEL, NULL); - if (gUnknown_2031DA8->unk_51[whichParty][monIdx] == 0) + if (sTradeMenuResourcesPtr->unk_51[whichParty][monIdx] == 0) { if (level / 10 != 0) - gUnknown_2031DA8->tilemapBuffer[a2 + (a3 * 32)] = (level / 10) + 0x60; + sTradeMenuResourcesPtr->tilemapBuffer[a2 + (a3 * 32)] = (level / 10) + 0x60; - gUnknown_2031DA8->tilemapBuffer[a2 + (a3 * 32) + 1] = (level % 10) + 0x70; + sTradeMenuResourcesPtr->tilemapBuffer[a2 + (a3 * 32) + 1] = (level % 10) + 0x70; } else { - gUnknown_2031DA8->tilemapBuffer[a2 + (a3 * 32) - 32] = gUnknown_2031DA8->tilemapBuffer[a2 + (a3 * 32) - 33]; - gUnknown_2031DA8->tilemapBuffer[a2 + (a3 * 32) - 31] = gUnknown_2031DA8->tilemapBuffer[a2 + (a3 * 32) - 36] | 0x400; + sTradeMenuResourcesPtr->tilemapBuffer[a2 + (a3 * 32) - 32] = sTradeMenuResourcesPtr->tilemapBuffer[a2 + (a3 * 32) - 33]; + sTradeMenuResourcesPtr->tilemapBuffer[a2 + (a3 * 32) - 31] = sTradeMenuResourcesPtr->tilemapBuffer[a2 + (a3 * 32) - 36] | 0x400; } - if (gUnknown_2031DA8->unk_51[whichParty][monIdx] != 0) + if (sTradeMenuResourcesPtr->unk_51[whichParty][monIdx] != 0) { r2 = 0x480; } @@ -3431,7 +3463,7 @@ void sub_804F08C(u8 whichParty, u8 monIdx, u8 a2, u8 a3, u8 a4, u8 a5) break; } } - gUnknown_2031DA8->tilemapBuffer[(a3 - 1) * 32 + a2 + 1] = r2; + sTradeMenuResourcesPtr->tilemapBuffer[(a3 - 1) * 32 + a2 + 1] = r2; } #ifdef NONMATCHING @@ -3441,7 +3473,7 @@ void sub_804F284(u8 whichParty) s32 i; const u8 *r5; const u8 *r4; - for (i = 0; i < gUnknown_2031DA8->partyCounts[whichParty]; i++) + for (i = 0; i < sTradeMenuResourcesPtr->partyCounts[whichParty]; i++) { r5 = gUnknown_8261E5A[whichParty]; r4 = gUnknown_8261E72[whichParty]; @@ -3457,7 +3489,7 @@ void sub_804F284(u8 whichParty) "\tlsls r0, 24\n" "\tlsrs r6, r0, 24\n" "\tmovs r7, 0\n" - "\tldr r0, _0804F2DC @ =gUnknown_2031DA8\n" + "\tldr r0, _0804F2DC @ =sTradeMenuResourcesPtr\n" "\tldr r0, [r0]\n" "\tadds r0, 0x36\n" "\tadds r0, r6\n" @@ -3485,7 +3517,7 @@ void sub_804F284(u8 whichParty) "\tadds r5, 0x2\n" "\tadds r4, 0x2\n" "\tadds r7, 0x1\n" - "\tldr r0, _0804F2DC @ =gUnknown_2031DA8\n" + "\tldr r0, _0804F2DC @ =sTradeMenuResourcesPtr\n" "\tldr r0, [r0]\n" "\tadds r0, 0x36\n" "\tadds r0, r6\n" @@ -3498,7 +3530,7 @@ void sub_804F284(u8 whichParty) "\tpop {r0}\n" "\tbx r0\n" "\t.align 2, 0\n" - "_0804F2DC: .4byte gUnknown_2031DA8\n" + "_0804F2DC: .4byte sTradeMenuResourcesPtr\n" "_0804F2E0: .4byte gUnknown_8261E5A\n" "_0804F2E4: .4byte gUnknown_8261E72"); } @@ -3508,13 +3540,13 @@ void sub_804F2E8(u8 whichParty) { int i; - for (i = 0; i < gUnknown_2031DA8->partyCounts[whichParty]; i++) + for (i = 0; i < sTradeMenuResourcesPtr->partyCounts[whichParty]; i++) { - gSprites[gUnknown_2031DA8->partyIcons[whichParty][i]].invisible = FALSE; - gSprites[gUnknown_2031DA8->partyIcons[whichParty][i]].pos1.x = gTradeMonSpriteCoords[(whichParty * PARTY_SIZE) + i][0] * 8 + 14; - gSprites[gUnknown_2031DA8->partyIcons[whichParty][i]].pos1.y = gTradeMonSpriteCoords[(whichParty * PARTY_SIZE) + i][1] * 8 - 12; - gSprites[gUnknown_2031DA8->partyIcons[whichParty][i]].pos2.x = 0; - gSprites[gUnknown_2031DA8->partyIcons[whichParty][i]].pos2.y = 0; + gSprites[sTradeMenuResourcesPtr->partyIcons[whichParty][i]].invisible = FALSE; + gSprites[sTradeMenuResourcesPtr->partyIcons[whichParty][i]].pos1.x = gTradeMonSpriteCoords[(whichParty * PARTY_SIZE) + i][0] * 8 + 14; + gSprites[sTradeMenuResourcesPtr->partyIcons[whichParty][i]].pos1.y = gTradeMonSpriteCoords[(whichParty * PARTY_SIZE) + i][1] * 8 - 12; + gSprites[sTradeMenuResourcesPtr->partyIcons[whichParty][i]].pos2.x = 0; + gSprites[sTradeMenuResourcesPtr->partyIcons[whichParty][i]].pos2.y = 0; } } @@ -3531,8 +3563,8 @@ void sub_804F3C8(u8 whichParty) sub_804F284(whichParty); sub_804F020(whichParty); sub_804F2E8(whichParty); - sub_804F728(gUnknown_8261ECC[1], (void *)OBJ_VRAM0 + 32 * gUnknown_2031DA8->unk_72, 24); - gUnknown_2031DA8->unk_74[whichParty] = 0; + sub_804F728(gUnknown_8261ECC[1], (void *)OBJ_VRAM0 + 32 * sTradeMenuResourcesPtr->unk_72, 24); + sTradeMenuResourcesPtr->unk_74[whichParty] = 0; } void sub_804F440(void) @@ -3552,66 +3584,66 @@ void sub_804F488(u16 a0, u8 a1) int i; for (i = 0; i < 4; i++) { - if (!gUnknown_2031DA8->unk_8D0[i].unk_0) + if (!sTradeMenuResourcesPtr->unk_8D0[i].unk_0) { - gUnknown_2031DA8->unk_8D0[i].unk_2 = a0; - gUnknown_2031DA8->unk_8D0[i].unk_4 = a1; - gUnknown_2031DA8->unk_8D0[i].unk_0 = TRUE; + sTradeMenuResourcesPtr->unk_8D0[i].unk_2 = a0; + sTradeMenuResourcesPtr->unk_8D0[i].unk_4 = a1; + sTradeMenuResourcesPtr->unk_8D0[i].unk_0 = TRUE; break; } } } -void sub_804F4DC(void) +static void sub_804F4DC(void) { int i; for (i = 0; i < 4; i++) { - if (gUnknown_2031DA8->unk_8D0[i].unk_0) + if (sTradeMenuResourcesPtr->unk_8D0[i].unk_0) { - if (gUnknown_2031DA8->unk_8D0[i].unk_2) + if (sTradeMenuResourcesPtr->unk_8D0[i].unk_2) { - gUnknown_2031DA8->unk_8D0[i].unk_2--; + sTradeMenuResourcesPtr->unk_8D0[i].unk_2--; } else { - switch (gUnknown_2031DA8->unk_8D0[i].unk_4) + switch (sTradeMenuResourcesPtr->unk_8D0[i].unk_4) { case 0: - SendBlock(bitmask_all_link_players_but_self(), gUnknown_2031DA8->linkData, 20); + SendBlock(bitmask_all_link_players_but_self(), sTradeMenuResourcesPtr->linkData, 20); break; case 1: - sub_804F5BC(0); + PrintTradeErrorOrStatusMessage(TRADESTATMSG_COMMSTANDBY); break; case 2: - sub_804F5BC(2); + PrintTradeErrorOrStatusMessage(TRADESTATMSG_ONLYMON); break; case 3: case 4: case 5: - sub_804F5BC(3); + PrintTradeErrorOrStatusMessage(TRADESTATMSG_ONLYMON2); break; case 6: - sub_804F5BC(6); + PrintTradeErrorOrStatusMessage(TRADESTATMSG_YOURMONCANTBETRADED); break; case 7: - sub_804F5BC(7); + PrintTradeErrorOrStatusMessage(TRADESTATMSG_EGGCANTBETRADED); break; case 8: - sub_804F5BC(8); + PrintTradeErrorOrStatusMessage(TRADESTATMSG_PARTNERMONCANTBETRADED); break; } - gUnknown_2031DA8->unk_8D0[i].unk_0 = FALSE; + sTradeMenuResourcesPtr->unk_8D0[i].unk_0 = FALSE; } } } } -void sub_804F5BC(u8 idx) +void PrintTradeErrorOrStatusMessage(u8 idx) { FillWindowPixelBuffer(0, PIXEL_FILL(1)); - AddTextPrinterParameterized(0, 3, gUnknown_8261EF4[idx], 0, 2, 0xFF, NULL); + AddTextPrinterParameterized(0, 3, sTradeErrorOrStatusMessagePtrs[idx], 0, 2, 0xFF, NULL); DrawTextBorderOuter(0, 0x014, 12); PutWindowTilemap(0); CopyWindowToVram(0, 3); @@ -3621,41 +3653,41 @@ bool8 sub_804F610(void) { struct SpriteSheet sheet; - if (gUnknown_2031DA8->unk_A8 < 14) + if (sTradeMenuResourcesPtr->unk_A8 < 14) { - sheet.data = gUnknown_2031C94[gUnknown_2031DA8->unk_A8]; + sheet.data = gUnknown_2031C94[sTradeMenuResourcesPtr->unk_A8]; sheet.size = 0x100; - sheet.tag = 200 + gUnknown_2031DA8->unk_A8; + sheet.tag = 200 + sTradeMenuResourcesPtr->unk_A8; } - switch (gUnknown_2031DA8->unk_A8) + switch (sTradeMenuResourcesPtr->unk_A8) { case 0 ... 7: LoadSpriteSheet(&sheet); - gUnknown_2031DA8->unk_A8++; + sTradeMenuResourcesPtr->unk_A8++; break; case 8: - gUnknown_2031DA8->unk_72 = LoadSpriteSheet(&sheet); - gUnknown_2031DA8->unk_A8++; + sTradeMenuResourcesPtr->unk_72 = LoadSpriteSheet(&sheet); + sTradeMenuResourcesPtr->unk_A8++; break; case 9 ... 13: LoadSpriteSheet(&sheet); - gUnknown_2031DA8->unk_A8++; + sTradeMenuResourcesPtr->unk_A8++; break; case 14: LoadSpritePalette(&gUnknown_8261D00); - gUnknown_2031DA8->unk_A8++; + sTradeMenuResourcesPtr->unk_A8++; break; case 15: LoadSpritePalette(&gUnknown_8261C60); - gUnknown_2031DA8->unk_A8++; + sTradeMenuResourcesPtr->unk_A8++; break; case 16: LoadSpriteSheet(&gUnknown_8261C58); - gUnknown_2031DA8->unk_A8++; + sTradeMenuResourcesPtr->unk_A8++; break; case 17: - gUnknown_2031DA8->unk_A8 = 0; + sTradeMenuResourcesPtr->unk_A8 = 0; return TRUE; } @@ -3674,42 +3706,42 @@ void sub_804F748(u8 who) switch (who) { case 0: - for (i = 0; i < gUnknown_2031DA8->partyCounts[who]; i++) + for (i = 0; i < sTradeMenuResourcesPtr->partyCounts[who]; i++) { if (GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG) == TRUE) { - gUnknown_2031DA8->unk_45[who][i] = 0; - gUnknown_2031DA8->unk_51[who][i] = 1; + sTradeMenuResourcesPtr->unk_45[who][i] = 0; + sTradeMenuResourcesPtr->unk_51[who][i] = 1; } else if (GetMonData(&gPlayerParty[i], MON_DATA_HP) == 0) { - gUnknown_2031DA8->unk_45[who][i] = 0; - gUnknown_2031DA8->unk_51[who][i] = 0; + sTradeMenuResourcesPtr->unk_45[who][i] = 0; + sTradeMenuResourcesPtr->unk_51[who][i] = 0; } else { - gUnknown_2031DA8->unk_45[who][i] = 1; - gUnknown_2031DA8->unk_51[who][i] = 0; + sTradeMenuResourcesPtr->unk_45[who][i] = 1; + sTradeMenuResourcesPtr->unk_51[who][i] = 0; } } break; case 1: - for (i = 0; i < gUnknown_2031DA8->partyCounts[who]; i++) + for (i = 0; i < sTradeMenuResourcesPtr->partyCounts[who]; i++) { if (GetMonData(&gEnemyParty[i], MON_DATA_IS_EGG) == TRUE) { - gUnknown_2031DA8->unk_45[who][i] = 0; - gUnknown_2031DA8->unk_51[who][i] = 1; + sTradeMenuResourcesPtr->unk_45[who][i] = 0; + sTradeMenuResourcesPtr->unk_51[who][i] = 1; } else if (GetMonData(&gEnemyParty[i], MON_DATA_HP) == 0) { - gUnknown_2031DA8->unk_45[who][i] = 0; - gUnknown_2031DA8->unk_51[who][i] = 0; + sTradeMenuResourcesPtr->unk_45[who][i] = 0; + sTradeMenuResourcesPtr->unk_51[who][i] = 0; } else { - gUnknown_2031DA8->unk_45[who][i] = 1; - gUnknown_2031DA8->unk_51[who][i] = 0; + sTradeMenuResourcesPtr->unk_45[who][i] = 1; + sTradeMenuResourcesPtr->unk_51[who][i] = 0; } } break; @@ -3723,19 +3755,19 @@ void sub_804F890(u8 who) switch (who) { case 0: - for (i = 0; i < gUnknown_2031DA8->partyCounts[0]; i++) + for (i = 0; i < sTradeMenuResourcesPtr->partyCounts[0]; i++) { curHp = GetMonData(&gPlayerParty[i], MON_DATA_HP); maxHp = GetMonData(&gPlayerParty[i], MON_DATA_MAX_HP); - gUnknown_2031DA8->unk_5D[0][i] = GetHPBarLevel(curHp, maxHp); + sTradeMenuResourcesPtr->unk_5D[0][i] = GetHPBarLevel(curHp, maxHp); } break; case 1: - for (i = 0; i < gUnknown_2031DA8->partyCounts[1]; i++) + for (i = 0; i < sTradeMenuResourcesPtr->partyCounts[1]; i++) { curHp = GetMonData(&gEnemyParty[i], MON_DATA_HP); maxHp = GetMonData(&gEnemyParty[i], MON_DATA_MAX_HP); - gUnknown_2031DA8->unk_5D[1][i] = GetHPBarLevel(curHp, maxHp); + sTradeMenuResourcesPtr->unk_5D[1][i] = GetHPBarLevel(curHp, maxHp); } break; } @@ -3746,9 +3778,9 @@ void sub_804F964(void) int i, j; for (i = 0; i < 2; i++) { - for (j = 0; j < gUnknown_2031DA8->partyCounts[i]; j++) + for (j = 0; j < sTradeMenuResourcesPtr->partyCounts[i]; j++) { - MonIcon_SetAnim(&gSprites[gUnknown_2031DA8->partyIcons[i][j]], 4 - gUnknown_2031DA8->unk_5D[i][j]); + MonIcon_SetAnim(&gSprites[sTradeMenuResourcesPtr->partyIcons[i][j]], 4 - sTradeMenuResourcesPtr->unk_5D[i][j]); } } } @@ -3758,8 +3790,8 @@ void sub_804F9D8(void) int i; for (i = 0; i < 11; i++) { - if (gSaveBlock1Ptr->giftRibbons[i] == 0 && gUnknown_2031DA8->unk_A9[i] != 0) - gSaveBlock1Ptr->giftRibbons[i] = gUnknown_2031DA8->unk_A9[i]; + if (gSaveBlock1Ptr->giftRibbons[i] == 0 && sTradeMenuResourcesPtr->unk_A9[i] != 0) + gSaveBlock1Ptr->giftRibbons[i] = sTradeMenuResourcesPtr->unk_A9[i]; } } @@ -3979,16 +4011,16 @@ int sub_804FBEC(struct UnkLinkRfuStruct_02022B14Substruct a0, struct UnkLinkRfuS return 0; } -int sub_804FCE0(struct UnkLinkRfuStruct_02022B14Substruct a0, u16 species, u16 a2, u8 a3) +int Trade_CanTradeSelectedMon(struct UnkLinkRfuStruct_02022B14Substruct a0, u16 species, u16 a2, u8 a3) { - u8 unk = a0.unk_01_0; + u8 canTradeEggAndNational = a0.unk_01_0; if (IsDeoxysOrMewUntradable(a2, a3)) { return 1; } - if (unk) + if (canTradeEggAndNational) { return 0; } @@ -4007,7 +4039,7 @@ int sub_804FCE0(struct UnkLinkRfuStruct_02022B14Substruct a0, u16 species, u16 a } // Sprite callback for link cable trade glow -void sub_804FD24(struct Sprite * sprite) +void SpriteCB_TradeGlowCable(struct Sprite * sprite) { sprite->data[0]++; if (sprite->data[0] == 10) @@ -4018,7 +4050,7 @@ void sub_804FD24(struct Sprite * sprite) } // Sprite callback for wireless trade glow -void sub_804FD48(struct Sprite * sprite) +void SpriteCB_TradeGlowWireless(struct Sprite * sprite) { if (!sprite->invisible) { @@ -4032,7 +4064,7 @@ void sub_804FD48(struct Sprite * sprite) } // Palette flash for trade glow core -void sub_804FD78(struct Sprite * sprite) +void SpriteCB_TradeGlowCore(struct Sprite * sprite) { if (sprite->data[1] == 0) { @@ -4043,7 +4075,7 @@ void sub_804FD78(struct Sprite * sprite) } } -void sub_804FDB8(struct Sprite * sprite) +void SpriteCB_GameLinkCableEnd_Outbound(struct Sprite * sprite) { sprite->data[0]++; sprite->pos2.y++; @@ -4051,7 +4083,7 @@ void sub_804FDB8(struct Sprite * sprite) DestroySprite(sprite); } -void sub_804FDDC(struct Sprite * sprite) +void SpriteCB_GameLinkCableEnd_Inbound(struct Sprite * sprite) { sprite->data[0]++; sprite->pos2.y--; @@ -4069,10 +4101,10 @@ void sub_804FE00(struct Sprite * sprite) } } -void sub_804FE24(void) +void TradeAnim_UpdateBgAffine(void) { struct BgAffineDstData affine; - DoBgAffineSet(&affine, gUnknown_2031DAC->unk_D4 * 0x100, gUnknown_2031DAC->unk_D6 * 0x100, gUnknown_2031DAC->unk_DC, gUnknown_2031DAC->unk_DE, gUnknown_2031DAC->unk_E8, gUnknown_2031DAC->unk_E8, gUnknown_2031DAC->unk_EC); + DoBgAffineSet(&affine, sTradeAnimationResourcesPtr->unk_D4 * 0x100, sTradeAnimationResourcesPtr->unk_D6 * 0x100, sTradeAnimationResourcesPtr->unk_DC, sTradeAnimationResourcesPtr->unk_DE, sTradeAnimationResourcesPtr->unk_E8, sTradeAnimationResourcesPtr->unk_E8, sTradeAnimationResourcesPtr->unk_EC); SetGpuReg(REG_OFFSET_BG2PA, affine.pa); SetGpuReg(REG_OFFSET_BG2PB, affine.pb); SetGpuReg(REG_OFFSET_BG2PC, affine.pc); @@ -4081,28 +4113,28 @@ void sub_804FE24(void) SetGpuReg(REG_OFFSET_BG2Y, affine.dy); } -void sub_804FEB4(void) +static void TradeAnim_UpdateBgRegs(void) { u16 dispcnt; - SetGpuReg(REG_OFFSET_BG1VOFS, gUnknown_2031DAC->bg1vofs); - SetGpuReg(REG_OFFSET_BG1HOFS, gUnknown_2031DAC->bg1hofs); + SetGpuReg(REG_OFFSET_BG1VOFS, sTradeAnimationResourcesPtr->bg1vofs); + SetGpuReg(REG_OFFSET_BG1HOFS, sTradeAnimationResourcesPtr->bg1hofs); dispcnt = GetGpuReg(REG_OFFSET_DISPCNT); if ((dispcnt & 7) == DISPCNT_MODE_0) { - SetGpuReg(REG_OFFSET_BG2VOFS, gUnknown_2031DAC->bg2vofs); - SetGpuReg(REG_OFFSET_BG2HOFS, gUnknown_2031DAC->bg2hofs); + SetGpuReg(REG_OFFSET_BG2VOFS, sTradeAnimationResourcesPtr->bg2vofs); + SetGpuReg(REG_OFFSET_BG2HOFS, sTradeAnimationResourcesPtr->bg2hofs); } else { - sub_804FE24(); + TradeAnim_UpdateBgAffine(); } } -void sub_804FF0C(void) +static void VBlankCB_TradeAnim(void) { - sub_804FEB4(); + TradeAnim_UpdateBgRegs(); LoadOam(); ProcessSpriteCopyRequests(); TransferPlttBuffer(); @@ -4110,28 +4142,28 @@ void sub_804FF0C(void) void sub_804FF24(void) { - gUnknown_2031DAC->unk_8A = 0; - gUnknown_2031DAC->unk_88 = 0; - gUnknown_2031DAC->unk_89 = 0; + sTradeAnimationResourcesPtr->unk_8A = 0; + sTradeAnimationResourcesPtr->unk_88 = 0; + sTradeAnimationResourcesPtr->unk_89 = 0; } void sub_804FF4C(void) { - if (gUnknown_2031DAC->unk_88 == gUnknown_2031DAC->unk_89) - gUnknown_2031DAC->unk_8A++; + if (sTradeAnimationResourcesPtr->unk_88 == sTradeAnimationResourcesPtr->unk_89) + sTradeAnimationResourcesPtr->unk_8A++; else - gUnknown_2031DAC->unk_8A = 0; + sTradeAnimationResourcesPtr->unk_8A = 0; - if (gUnknown_2031DAC->unk_8A > 300) + if (sTradeAnimationResourcesPtr->unk_8A > 300) { CloseLink(); SetMainCallback2(CB2_LinkError); - gUnknown_2031DAC->unk_8A = 0; - gUnknown_2031DAC->unk_89 = 0; - gUnknown_2031DAC->unk_88 = 0; + sTradeAnimationResourcesPtr->unk_8A = 0; + sTradeAnimationResourcesPtr->unk_89 = 0; + sTradeAnimationResourcesPtr->unk_88 = 0; } - gUnknown_2031DAC->unk_89 = gUnknown_2031DAC->unk_88; + sTradeAnimationResourcesPtr->unk_89 = sTradeAnimationResourcesPtr->unk_88; } u32 sub_804FFC4(void) @@ -4172,14 +4204,411 @@ void sub_804FFE4(u8 whichParty, u8 a1) HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonFrontPicTable[species], gMonSpritesGfxPtr->sprites[whichParty * 2 + 1], species, personality); LoadCompressedSpritePalette(GetMonSpritePalStruct(mon)); - gUnknown_2031DAC->tradeSpecies[whichParty] = species; - gUnknown_2031DAC->unk_68[whichParty] = personality; + sTradeAnimationResourcesPtr->tradeSpecies[whichParty] = species; + sTradeAnimationResourcesPtr->unk_68[whichParty] = personality; break; case 1: SetMultiuseSpriteTemplateToPokemon(GetMonSpritePalStruct(mon)->tag, pos); - gUnknown_2031DAC->pokePicSpriteIdxs[whichParty] = CreateSprite(&gMultiuseSpriteTemplate, 120, 60, 6); - gSprites[gUnknown_2031DAC->pokePicSpriteIdxs[whichParty]].invisible = TRUE; - gSprites[gUnknown_2031DAC->pokePicSpriteIdxs[whichParty]].callback = SpriteCallbackDummy; + sTradeAnimationResourcesPtr->pokePicSpriteIdxs[whichParty] = CreateSprite(&gMultiuseSpriteTemplate, 120, 60, 6); + gSprites[sTradeAnimationResourcesPtr->pokePicSpriteIdxs[whichParty]].invisible = TRUE; + gSprites[sTradeAnimationResourcesPtr->pokePicSpriteIdxs[whichParty]].callback = SpriteCallbackDummy; + break; + } +} + +void CB2_InitTradeAnim_LinkTrade(void) +{ + switch (gMain.state) + { + case 0: + if (!gReceivedRemoteLinkPlayers) + { + gLinkType = 0x1144; + CloseLink(); + } + sTradeAnimationResourcesPtr = AllocZeroed(sizeof(struct TradeAnimationResources)); + AllocateMonSpritesGfx(); + ResetTasks(); + ResetSpriteData(); + FreeAllSpritePalettes(); + SetVBlankCallback(VBlankCB_TradeAnim); + TradeAnimInit_LoadGfx(); + sub_804FF24(); + gMain.state++; + sTradeAnimationResourcesPtr->unk_8C = 0; + sTradeAnimationResourcesPtr->state = 0; + sTradeAnimationResourcesPtr->isLinkTrade = TRUE; + sTradeAnimationResourcesPtr->unk_D4 = 64; + sTradeAnimationResourcesPtr->unk_D6 = 64; + sTradeAnimationResourcesPtr->unk_D8 = 0; + sTradeAnimationResourcesPtr->unk_DA = 0; + sTradeAnimationResourcesPtr->unk_DC = 120; + sTradeAnimationResourcesPtr->unk_DE = 80; + sTradeAnimationResourcesPtr->unk_E8 = 256; + sTradeAnimationResourcesPtr->unk_EC = 0; + break; + case 1: + if (!gReceivedRemoteLinkPlayers) + { + sTradeAnimationResourcesPtr->unk_108 = TRUE; + OpenLink(); + gMain.state++; + sTradeAnimationResourcesPtr->timer = 0; + } + else + { + gMain.state = 4; + } + break; + case 2: + sTradeAnimationResourcesPtr->timer++; + if (sTradeAnimationResourcesPtr->timer > 60) + { + sTradeAnimationResourcesPtr->timer = 0; + gMain.state++; + } + break; + case 3: + if (IsLinkMaster()) + { + if (GetLinkPlayerCount_2() >= GetSavedPlayerCount()) + { + sTradeAnimationResourcesPtr->timer++; + if (sTradeAnimationResourcesPtr->timer > 30) + { + CheckShouldAdvanceLinkState(); + gMain.state++; + } + } + else + { + sub_804FF4C(); + } + } + else + { + gMain.state++; + } + break; + case 4: + sub_804FF4C(); + if (gReceivedRemoteLinkPlayers == 1 && IsLinkPlayerDataExchangeComplete() == 1) + { + gMain.state++; + } break; + case 5: + sTradeAnimationResourcesPtr->unk_72 = 0; + sTradeAnimationResourcesPtr->unk_73 = 0; + sTradeAnimationResourcesPtr->unk_93 = 0; + sub_804FFE4(0, 0); + gMain.state++; + break; + case 6: + sub_804FFE4(0, 1); + gMain.state++; + break; + case 7: + sub_804FFE4(1, 0); + gMain.state++; + break; + case 8: + sub_804FFE4(1, 1); + sub_80504B0(); + gMain.state++; + break; + case 9: + sub_8050DE0(); + LoadSpriteSheet(&gUnknown_826CDD4); + LoadSpritePalette(&gUnknown_826CDDC); + gMain.state++; + break; + case 10: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); + ShowBg(0); + sTradeAnimationResourcesPtr->unk_F8 = GetMonData(&gPlayerParty[gUnknown_2031DA4[0]], MON_DATA_SPECIES2); + sTradeAnimationResourcesPtr->unk_FA = GetMonData(&gEnemyParty[gUnknown_2031DA4[1] % 6], MON_DATA_SPECIES2); + memcpy(sTradeAnimationResourcesPtr->unk_FC, gLinkPlayers[GetMultiplayerId() ^ 1].name, 7); + gMain.state++; + break; + case 11: + sub_805049C(); + sub_8050E24(); + gMain.state++; + break; + case 12: + if (!gPaletteFade.active) + { + if (gWirelessCommType != 0) + { + LoadWirelessStatusIndicatorSpriteGfx(); + CreateWirelessStatusIndicatorSprite(0, 0); + } + SetMainCallback2(CB2_RunTradeAnim_LinkTrade); + } + break; + } + RunTasks(); + RunTextPrinters(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +void sub_805049C(void) +{ + sub_8050968(5); + sub_8050968(0); +} + +void sub_80504B0(void) +{ + FillWindowPixelBuffer(0, PIXEL_FILL(15)); + PutWindowTilemap(0); + CopyWindowToVram(0, 3); +} + +void TradeAnimInit_LoadGfx(void) +{ + SetGpuReg(REG_OFFSET_DISPCNT, 0); + ResetBgsAndClearDma3BusyFlags(FALSE); + InitBgsFromTemplates(0, gUnknown_826D1D4, NELEMS(gUnknown_826D1D4)); + ChangeBgX(0, 0, 0); + ChangeBgY(0, 0, 0); + SetBgTilemapBuffer(0, Alloc(BG_SCREEN_SIZE)); + SetBgTilemapBuffer(1, Alloc(BG_SCREEN_SIZE)); + SetBgTilemapBuffer(3, Alloc(BG_SCREEN_SIZE)); + DeactivateAllTextPrinters(); + // Doing the graphics load... + DecompressAndLoadBgGfxUsingHeap(0, gBattleTextboxTiles, 0, 0, 0); + LZDecompressWram(gFile_graphics_interface_menu_map_tilemap, gDecompressionBuffer); + CopyToBgTilemapBuffer(0, gDecompressionBuffer, BG_SCREEN_SIZE, 0); + LoadCompressedPalette(gBattleTextboxPalette, 0x000, 0x20); + InitWindows(gUnknown_826D1BC); + // ... and doing the same load again + DecompressAndLoadBgGfxUsingHeap(0, gBattleTextboxTiles, 0, 0, 0); + LZDecompressWram(gFile_graphics_interface_menu_map_tilemap, gDecompressionBuffer); + CopyToBgTilemapBuffer(0, gDecompressionBuffer, BG_SCREEN_SIZE, 0); + LoadCompressedPalette(gBattleTextboxPalette, 0x000, 0x20); +} + +void CB2_InitTradeAnim_InGameTrade(void) +{ + u8 otName[11]; + + switch (gMain.state) + { + case 0: + gUnknown_2031DA4[0] = gSpecialVar_0x8005; + gUnknown_2031DA4[1] = 6; + StringCopy(gLinkPlayers[0].name, gSaveBlock2Ptr->playerName); + GetMonData(&gEnemyParty[0], MON_DATA_OT_NAME, otName); + StringCopy(gLinkPlayers[1].name, otName); + sTradeAnimationResourcesPtr = AllocZeroed(sizeof(*sTradeAnimationResourcesPtr)); + AllocateMonSpritesGfx(); + ResetTasks(); + ResetSpriteData(); + FreeAllSpritePalettes(); + SetVBlankCallback(VBlankCB_TradeAnim); + TradeAnimInit_LoadGfx(); + sTradeAnimationResourcesPtr->isLinkTrade = FALSE; + sTradeAnimationResourcesPtr->unk_8C = 0; + sTradeAnimationResourcesPtr->state = 0; + sTradeAnimationResourcesPtr->unk_D4 = 64; + sTradeAnimationResourcesPtr->unk_D6 = 64; + sTradeAnimationResourcesPtr->unk_D8 = 0; + sTradeAnimationResourcesPtr->unk_DA = 0; + sTradeAnimationResourcesPtr->unk_DC = 120; + sTradeAnimationResourcesPtr->unk_DE = 80; + sTradeAnimationResourcesPtr->unk_E8 = 256; + sTradeAnimationResourcesPtr->unk_EC = 0; + sTradeAnimationResourcesPtr->timer = 0; + gMain.state = 5; + break; + case 5: + sub_804FFE4(0, 0); + gMain.state++; + break; + case 6: + sub_804FFE4(0, 1); + gMain.state++; + break; + case 7: + sub_804FFE4(1, 0); + ShowBg(0); + gMain.state++; + break; + case 8: + sub_804FFE4(1, 1); + FillWindowPixelBuffer(0, PIXEL_FILL(15)); + PutWindowTilemap(0); + CopyWindowToVram(0, 3); + gMain.state++; + break; + case 9: + sub_8050DE0(); + LoadSpriteSheet(&gUnknown_826CDD4); + LoadSpritePalette(&gUnknown_826CDDC); + gMain.state++; + break; + case 10: + ShowBg(0); + gMain.state++; + break; + case 11: + sub_8050968(5); + sub_8050968(0); + sub_8050E24(); + gMain.state++; + break; + case 12: + SetMainCallback2(CB2_RunTradeAnim_InGameTrade); + break; + } + + RunTasks(); + RunTextPrinters(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +static void ReceivedMonSetPokedexFlags(u8 partyIdx) +{ + struct Pokemon *mon = &gPlayerParty[partyIdx]; + + if (!GetMonData(mon, MON_DATA_IS_EGG)) + { + u16 species = GetMonData(mon, MON_DATA_SPECIES, NULL); + u32 personality = GetMonData(mon, MON_DATA_PERSONALITY, NULL); + species = SpeciesToNationalPokedexNum(species); + GetSetPokedexFlag(species, FLAG_SET_SEEN); + HandleSetPokedexFlag(species, FLAG_SET_CAUGHT, personality); + } +} + +static void RS_TryEnableNationalPokedex(void) +{ + u8 mpId = GetMultiplayerId(); + // Originally in Ruby but commented out + /*if (gLinkPlayers[mpId ^ 1].lp_field_2 == 0x8000) + EnableNationalPokedex();*/ +} + +void Trade_SwapPlayerAndParterMonData(u8 playerPartyIdx, u8 partnerPartyIdx) +{ + u8 friendship; + + // Get whether the offered Pokemon have mail + struct Pokemon *playerMon = &gPlayerParty[playerPartyIdx]; + u16 playerMail = GetMonData(playerMon, MON_DATA_MAIL); + + struct Pokemon *partnerMon = &gEnemyParty[partnerPartyIdx]; + u16 partnerMail = GetMonData(partnerMon, MON_DATA_MAIL); + + // The mail attached to the sent Pokemon no longer exists in your file. + if (playerMail != 0xFF) + ClearMailStruct(&gSaveBlock1Ptr->mail[playerMail]); + + // This is where the actual trade happens!! + sTradeAnimationResourcesPtr->mon = *playerMon; + *playerMon = *partnerMon; + *partnerMon = sTradeAnimationResourcesPtr->mon; + + // By default, a Pokemon received from a trade will have 70 Friendship. + friendship = 70; + if (!GetMonData(playerMon, MON_DATA_IS_EGG)) + SetMonData(playerMon, MON_DATA_FRIENDSHIP, &friendship); + + // Associate your partner's mail with the Pokemon they sent over. + if (partnerMail != 0xFF) + GiveMailToMon2(playerMon, &gLinkPartnerMail[partnerMail]); + + ReceivedMonSetPokedexFlags(playerPartyIdx); + if (gReceivedRemoteLinkPlayers) + RS_TryEnableNationalPokedex(); +} + +void sub_80508F4(void) +{ + switch (sTradeAnimationResourcesPtr->unk_93) + { + case 1: + if (IsLinkTaskFinished()) + { + SendBlock(bitmask_all_link_players_but_self(), sTradeAnimationResourcesPtr->linkData, 20); + sTradeAnimationResourcesPtr->unk_93++; + } + case 2: + sTradeAnimationResourcesPtr->unk_93 = 0; + break; + } +} + +void CB2_RunTradeAnim_InGameTrade(void) +{ + sub_8050F14(); + RunTasks(); + RunTextPrinters(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} +/* + +void sub_8050968(u8 state) +{ + switch (state) + { + case 0: + sTradeAnimationResourcesPtr->bg2hofs = 0; + sTradeAnimationResourcesPtr->bg2vofs = 0xB4; + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG2_ON | DISPCNT_OBJ_ON); + SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(2) | BGCNT_CHARBASE(1) | BGCNT_SCREENBASE(18) | BGCNT_AFF256x256); + LoadPalette(gTradeGba2_Pal, 0x10, 0x60); + DmaCopyLarge16(3, gTradeGba_Gfx, (void *)BG_CHAR_ADDR(1), 0x1420, 0x1000); + break; + case 1: + sTradeAnimationResourcesPtr->bg1hofs = 0; + sTradeAnimationResourcesPtr->bg1vofs = 0x15C; + SetGpuReg(REG_OFFSET_BG1VOFS, 0x15C); + SetGpuReg(REG_OFFSET_BG1CNT, BGCNT_PRIORITY(2) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(5) | BGCNT_TXT256x512); + SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(2) | BGCNT_CHARBASE(1) | BGCNT_SCREENBASE(18) | BGCNT_AFF512x512); + if (sTradeAnimationResourcesPtr->unk_108) + { + DmaCopy16(3, gUnknown_826AA5C, (void *)BG_SCREEN_ADDR(5), 0x1000); + } + else + { + DmaCopy16(3, gUnknown_8269A5C, (void *)BG_SCREEN_ADDR(5), 0x1000); + } + DmaCopyLarge16(3, gTradeGba_Gfx, (void *)BG_CHAR_ADDR(0), 0x1420, 0x1000); + break; + case 2: + sTradeAnimationResourcesPtr->bg1hofs = 0; + sTradeAnimationResourcesPtr->bg1vofs = 0; + if (sTradeAnimationResourcesPtr->unk_108 == FALSE) + { + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG1_ON | DISPCNT_OBJ_ON); + LZ77UnCompVram(gUnknown_3379A0Bin, (void *)BG_SCREEN_ADDR(5)); + BlendPalettes(0x000000008, 0x10, RGB_BLACK); + } + else + { + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG1_ON | DISPCNT_OBJ_ON); + DmaCopy16(3, gUnknown_826407C, (void *)BG_SCREEN_ADDR(5), 0x800); + BlendPalettes(0x00000001, 0x10, RGB_BLACK); + } + break; + case 3: + LoadPalette(gUnknown_826BF5C, 0x30, 0x20); + LZ77UnCompVram(gWirelessSignal4bpp, BG_CHAR_ADDR(1)); + LZ77UnCompVram(gUnknown_826C60C, BG_SCREEN_ADDR(18)); + sTradeAnimationResourcesPtr->bg2hofs = 0x50; + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG1_ON | DISPCNT_BG2_ON | DISPCNT_OBJ_ON); + break; + case 4: + } } +*/ -- cgit v1.2.3 From e9592bee5d1aa74a39e8879d52c0e5f105bef9c1 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 29 Oct 2019 20:28:17 -0400 Subject: Finish sub_8050968 --- asm/trade.s | 508 ------------------------------------------------------------ src/trade.c | 80 ++++++++-- 2 files changed, 68 insertions(+), 520 deletions(-) diff --git a/asm/trade.s b/asm/trade.s index f13118ef6..d22c2c980 100644 --- a/asm/trade.s +++ b/asm/trade.s @@ -5,514 +5,6 @@ .text - thumb_func_start sub_8050968 -sub_8050968: @ 8050968 - push {r4-r7,lr} - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x7 - bls _08050974 - b _08050DB4 -_08050974: - lsls r0, 2 - ldr r1, _08050980 @ =_08050984 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08050980: .4byte _08050984 - .align 2, 0 -_08050984: - .4byte _080509A4 - .4byte _08050A18 - .4byte _08050AC4 - .4byte _08050B3C - .4byte _08050B84 - .4byte _08050C54 - .4byte _08050C6C - .4byte _08050D48 -_080509A4: - ldr r0, _080509FC @ =sTradeAnimationResourcesPtr - ldr r1, [r0] - adds r2, r1, 0 - adds r2, 0xE4 - movs r0, 0 - strh r0, [r2] - adds r1, 0xE6 - movs r0, 0xB4 - strh r0, [r1] - movs r1, 0xAA - lsls r1, 5 - movs r0, 0 - bl SetGpuReg - ldr r1, _08050A00 @ =0x00005206 - movs r0, 0xC - bl SetGpuReg - ldr r0, _08050A04 @ =gTradeGba2_Pal - movs r1, 0x10 - movs r2, 0x60 - bl LoadPalette - ldr r3, _08050A08 @ =gTradeGba_Gfx - ldr r4, _08050A0C @ =0x06004000 - movs r5, 0xA1 - lsls r5, 5 - ldr r1, _08050A10 @ =0x040000d4 - ldr r6, _08050A14 @ =0x80000800 - movs r2, 0x80 - lsls r2, 5 - movs r7, 0x80 - lsls r7, 24 -_080509E6: - str r3, [r1] - str r4, [r1, 0x4] - str r6, [r1, 0x8] - ldr r0, [r1, 0x8] - adds r3, r2 - adds r4, r2 - subs r5, r2 - cmp r5, r2 - bhi _080509E6 - b _08050D98 - .align 2, 0 -_080509FC: .4byte sTradeAnimationResourcesPtr -_08050A00: .4byte 0x00005206 -_08050A04: .4byte gTradeGba2_Pal -_08050A08: .4byte gTradeGba_Gfx -_08050A0C: .4byte 0x06004000 -_08050A10: .4byte 0x040000d4 -_08050A14: .4byte 0x80000800 -_08050A18: - ldr r4, _08050A54 @ =sTradeAnimationResourcesPtr - ldr r2, [r4] - adds r1, r2, 0 - adds r1, 0xE2 - movs r0, 0 - strh r0, [r1] - adds r2, 0xE0 - movs r1, 0xAE - lsls r1, 1 - strh r1, [r2] - movs r0, 0x16 - bl SetGpuReg - ldr r1, _08050A58 @ =0x00008502 - movs r0, 0xA - bl SetGpuReg - ldr r1, _08050A5C @ =0x00009206 - movs r0, 0xC - bl SetGpuReg - ldr r0, [r4] - movs r1, 0x84 - lsls r1, 1 - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0 - beq _08050A64 - ldr r1, _08050A60 @ =gUnknown_826AA5C - b _08050A66 - .align 2, 0 -_08050A54: .4byte sTradeAnimationResourcesPtr -_08050A58: .4byte 0x00008502 -_08050A5C: .4byte 0x00009206 -_08050A60: .4byte gUnknown_826AA5C -_08050A64: - ldr r1, _08050AB0 @ =gUnknown_8269A5C -_08050A66: - ldr r2, _08050AB4 @ =0x06002800 - ldr r0, _08050AB8 @ =0x040000d4 - str r1, [r0] - str r2, [r0, 0x4] - ldr r1, _08050ABC @ =0x80000800 - str r1, [r0, 0x8] - ldr r0, [r0, 0x8] - ldr r3, _08050AC0 @ =gTradeGba_Gfx - movs r4, 0xC0 - lsls r4, 19 - movs r5, 0xA1 - lsls r5, 5 - ldr r1, _08050AB8 @ =0x040000d4 - ldr r6, _08050ABC @ =0x80000800 - movs r2, 0x80 - lsls r2, 5 - movs r7, 0x80 - lsls r7, 24 -_08050A8A: - str r3, [r1] - str r4, [r1, 0x4] - str r6, [r1, 0x8] - ldr r0, [r1, 0x8] - adds r3, r2 - adds r4, r2 - subs r5, r2 - cmp r5, r2 - bhi _08050A8A - str r3, [r1] - str r4, [r1, 0x4] - lsrs r0, r5, 1 - orrs r0, r7 - str r0, [r1, 0x8] - ldr r0, [r1, 0x8] - movs r1, 0x92 - lsls r1, 5 - b _08050B64 - .align 2, 0 -_08050AB0: .4byte gUnknown_8269A5C -_08050AB4: .4byte 0x06002800 -_08050AB8: .4byte 0x040000d4 -_08050ABC: .4byte 0x80000800 -_08050AC0: .4byte gTradeGba_Gfx -_08050AC4: - ldr r0, _08050AF4 @ =sTradeAnimationResourcesPtr - ldr r2, [r0] - adds r0, r2, 0 - adds r0, 0xE0 - movs r1, 0 - strh r1, [r0] - adds r0, 0x2 - strh r1, [r0] - movs r1, 0x84 - lsls r1, 1 - adds r0, r2, r1 - ldrb r0, [r0] - cmp r0, 0 - bne _08050B04 - ldr r1, _08050AF8 @ =0x00001241 - movs r0, 0 - bl SetGpuReg - ldr r0, _08050AFC @ =gUnknown_3379A0Bin - ldr r1, _08050B00 @ =0x06002800 - bl LZ77UnCompVram - movs r0, 0x8 - b _08050B1E - .align 2, 0 -_08050AF4: .4byte sTradeAnimationResourcesPtr -_08050AF8: .4byte 0x00001241 -_08050AFC: .4byte gUnknown_3379A0Bin -_08050B00: .4byte 0x06002800 -_08050B04: - ldr r1, _08050B28 @ =0x00001241 - movs r0, 0 - bl SetGpuReg - ldr r1, _08050B2C @ =gUnknown_826407C - ldr r2, _08050B30 @ =0x06002800 - ldr r0, _08050B34 @ =0x040000d4 - str r1, [r0] - str r2, [r0, 0x4] - ldr r1, _08050B38 @ =0x80000400 - str r1, [r0, 0x8] - ldr r0, [r0, 0x8] - movs r0, 0x1 -_08050B1E: - movs r1, 0x10 - movs r2, 0 - bl BlendPalettes - b _08050DB4 - .align 2, 0 -_08050B28: .4byte 0x00001241 -_08050B2C: .4byte gUnknown_826407C -_08050B30: .4byte 0x06002800 -_08050B34: .4byte 0x040000d4 -_08050B38: .4byte 0x80000400 -_08050B3C: - ldr r0, _08050B6C @ =gUnknown_826BF5C - movs r1, 0x30 - movs r2, 0x20 - bl LoadPalette - ldr r0, _08050B70 @ =gWirelessSignal4bpp - ldr r1, _08050B74 @ =0x06004000 - bl LZ77UnCompVram - ldr r0, _08050B78 @ =gUnknown_826C60C - ldr r1, _08050B7C @ =0x06009000 - bl LZ77UnCompVram - ldr r0, _08050B80 @ =sTradeAnimationResourcesPtr - ldr r0, [r0] - adds r0, 0xE4 - movs r1, 0x50 - strh r1, [r0] - movs r1, 0xB2 - lsls r1, 5 -_08050B64: - movs r0, 0 - bl SetGpuReg - b _08050DB4 - .align 2, 0 -_08050B6C: .4byte gUnknown_826BF5C -_08050B70: .4byte gWirelessSignal4bpp -_08050B74: .4byte 0x06004000 -_08050B78: .4byte gUnknown_826C60C -_08050B7C: .4byte 0x06009000 -_08050B80: .4byte sTradeAnimationResourcesPtr -_08050B84: - ldr r1, _08050C0C @ =0x00001441 - movs r0, 0 - bl SetGpuReg - ldr r1, _08050C10 @ =0x00001287 - movs r0, 0xC - bl SetGpuReg - ldr r0, _08050C14 @ =sTradeAnimationResourcesPtr - ldr r3, [r0] - adds r1, r3, 0 - adds r1, 0xD4 - movs r2, 0 - movs r0, 0x40 - strh r0, [r1] - adds r1, 0x2 - movs r0, 0x5C - strh r0, [r1] - adds r1, 0x12 - movs r0, 0x20 - strh r0, [r1] - adds r1, 0x2 - movs r0, 0x80 - lsls r0, 3 - strh r0, [r1] - adds r0, r3, 0 - adds r0, 0xEC - strh r2, [r0] - ldr r3, _08050C18 @ =gUnknown_826701C - ldr r4, _08050C1C @ =0x06004000 - movs r5, 0xA1 - lsls r5, 6 - ldr r1, _08050C20 @ =0x040000d4 - ldr r6, _08050C24 @ =0x80000800 - movs r2, 0x80 - lsls r2, 5 - movs r7, 0x80 - lsls r7, 24 -_08050BD0: - str r3, [r1] - str r4, [r1, 0x4] - str r6, [r1, 0x8] - ldr r0, [r1, 0x8] - adds r3, r2 - adds r4, r2 - subs r5, r2 - cmp r5, r2 - bhi _08050BD0 - str r3, [r1] - str r4, [r1, 0x4] - lsrs r0, r5, 1 - orrs r0, r7 - str r0, [r1, 0x8] - ldr r0, [r1, 0x8] - ldr r0, _08050C14 @ =sTradeAnimationResourcesPtr - ldr r0, [r0] - movs r1, 0x84 - lsls r1, 1 - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0 - beq _08050C34 - ldr r1, _08050C28 @ =gUnknown_826985C - ldr r2, _08050C2C @ =0x06009000 - ldr r0, _08050C20 @ =0x040000d4 - str r1, [r0] - str r2, [r0, 0x4] - ldr r1, _08050C30 @ =0x80000080 - b _08050DB0 - .align 2, 0 -_08050C0C: .4byte 0x00001441 -_08050C10: .4byte 0x00001287 -_08050C14: .4byte sTradeAnimationResourcesPtr -_08050C18: .4byte gUnknown_826701C -_08050C1C: .4byte 0x06004000 -_08050C20: .4byte 0x040000d4 -_08050C24: .4byte 0x80000800 -_08050C28: .4byte gUnknown_826985C -_08050C2C: .4byte 0x06009000 -_08050C30: .4byte 0x80000080 -_08050C34: - ldr r1, _08050C44 @ =gUnknown_826995C - ldr r2, _08050C48 @ =0x06009000 - ldr r0, _08050C4C @ =0x040000d4 - str r1, [r0] - str r2, [r0, 0x4] - ldr r1, _08050C50 @ =0x80000080 - b _08050DB0 - .align 2, 0 -_08050C44: .4byte gUnknown_826995C -_08050C48: .4byte 0x06009000 -_08050C4C: .4byte 0x040000d4 -_08050C50: .4byte 0x80000080 -_08050C54: - ldr r0, _08050C68 @ =sTradeAnimationResourcesPtr - ldr r0, [r0] - adds r1, r0, 0 - adds r1, 0xE0 - movs r2, 0 - strh r2, [r1] - adds r0, 0xE2 - strh r2, [r0] - b _08050DB4 - .align 2, 0 -_08050C68: .4byte sTradeAnimationResourcesPtr -_08050C6C: - ldr r1, _08050D00 @ =0x00001441 - movs r0, 0 - bl SetGpuReg - ldr r1, _08050D04 @ =0x00001287 - movs r0, 0xC - bl SetGpuReg - ldr r0, _08050D08 @ =sTradeAnimationResourcesPtr - ldr r3, [r0] - adds r1, r3, 0 - adds r1, 0xD4 - movs r2, 0 - movs r0, 0x40 - strh r0, [r1] - adds r1, 0x2 - movs r0, 0x5C - strh r0, [r1] - adds r1, 0x12 - adds r0, 0xA4 - strh r0, [r1] - adds r1, 0x2 - movs r0, 0x80 - strh r0, [r1] - subs r1, 0xE - movs r0, 0x78 - strh r0, [r1] - adds r1, 0x2 - movs r0, 0x50 - strh r0, [r1] - adds r0, r3, 0 - adds r0, 0xEC - strh r2, [r0] - ldr r3, _08050D0C @ =gUnknown_826701C - ldr r4, _08050D10 @ =0x06004000 - movs r5, 0xA1 - lsls r5, 6 - ldr r1, _08050D14 @ =0x040000d4 - ldr r6, _08050D18 @ =0x80000800 - movs r2, 0x80 - lsls r2, 5 - movs r7, 0x80 - lsls r7, 24 -_08050CC2: - str r3, [r1] - str r4, [r1, 0x4] - str r6, [r1, 0x8] - ldr r0, [r1, 0x8] - adds r3, r2 - adds r4, r2 - subs r5, r2 - cmp r5, r2 - bhi _08050CC2 - str r3, [r1] - str r4, [r1, 0x4] - lsrs r0, r5, 1 - orrs r0, r7 - str r0, [r1, 0x8] - ldr r0, [r1, 0x8] - ldr r0, _08050D08 @ =sTradeAnimationResourcesPtr - ldr r0, [r0] - movs r1, 0x84 - lsls r1, 1 - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0 - beq _08050D28 - ldr r1, _08050D1C @ =gUnknown_826985C - ldr r2, _08050D20 @ =0x06009000 - ldr r0, _08050D14 @ =0x040000d4 - str r1, [r0] - str r2, [r0, 0x4] - ldr r1, _08050D24 @ =0x80000080 - b _08050DB0 - .align 2, 0 -_08050D00: .4byte 0x00001441 -_08050D04: .4byte 0x00001287 -_08050D08: .4byte sTradeAnimationResourcesPtr -_08050D0C: .4byte gUnknown_826701C -_08050D10: .4byte 0x06004000 -_08050D14: .4byte 0x040000d4 -_08050D18: .4byte 0x80000800 -_08050D1C: .4byte gUnknown_826985C -_08050D20: .4byte 0x06009000 -_08050D24: .4byte 0x80000080 -_08050D28: - ldr r1, _08050D38 @ =gUnknown_826995C - ldr r2, _08050D3C @ =0x06009000 - ldr r0, _08050D40 @ =0x040000d4 - str r1, [r0] - str r2, [r0, 0x4] - ldr r1, _08050D44 @ =0x80000080 - b _08050DB0 - .align 2, 0 -_08050D38: .4byte gUnknown_826995C -_08050D3C: .4byte 0x06009000 -_08050D40: .4byte 0x040000d4 -_08050D44: .4byte 0x80000080 -_08050D48: - ldr r0, _08050DBC @ =sTradeAnimationResourcesPtr - ldr r0, [r0] - adds r1, r0, 0 - adds r1, 0xE4 - movs r2, 0 - strh r2, [r1] - adds r0, 0xE6 - strh r2, [r0] - movs r0, 0x50 - movs r1, 0 - bl SetGpuReg - ldr r1, _08050DC0 @ =0x00005206 - movs r0, 0xC - bl SetGpuReg - ldr r0, _08050DC4 @ =gTradeGba2_Pal - movs r1, 0x10 - movs r2, 0x60 - bl LoadPalette - ldr r3, _08050DC8 @ =gTradeGba_Gfx - ldr r4, _08050DCC @ =0x06004000 - movs r5, 0xA1 - lsls r5, 5 - ldr r1, _08050DD0 @ =0x040000d4 - ldr r6, _08050DD4 @ =0x80000800 - movs r2, 0x80 - lsls r2, 5 - movs r7, 0x80 - lsls r7, 24 -_08050D86: - str r3, [r1] - str r4, [r1, 0x4] - str r6, [r1, 0x8] - ldr r0, [r1, 0x8] - adds r3, r2 - adds r4, r2 - subs r5, r2 - cmp r5, r2 - bhi _08050D86 -_08050D98: - str r3, [r1] - str r4, [r1, 0x4] - lsrs r0, r5, 1 - orrs r0, r7 - str r0, [r1, 0x8] - ldr r0, [r1, 0x8] - ldr r1, _08050DD8 @ =gUnknown_826601C - ldr r2, _08050DDC @ =0x06009000 - ldr r0, _08050DD0 @ =0x040000d4 - str r1, [r0] - str r2, [r0, 0x4] - ldr r1, _08050DD4 @ =0x80000800 -_08050DB0: - str r1, [r0, 0x8] - ldr r0, [r0, 0x8] -_08050DB4: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08050DBC: .4byte sTradeAnimationResourcesPtr -_08050DC0: .4byte 0x00005206 -_08050DC4: .4byte gTradeGba2_Pal -_08050DC8: .4byte gTradeGba_Gfx -_08050DCC: .4byte 0x06004000 -_08050DD0: .4byte 0x040000d4 -_08050DD4: .4byte 0x80000800 -_08050DD8: .4byte gUnknown_826601C -_08050DDC: .4byte 0x06009000 - thumb_func_end sub_8050968 - thumb_func_start sub_8050DE0 sub_8050DE0: @ 8050DE0 push {lr} diff --git a/src/trade.c b/src/trade.c index 026f77db8..19f6e47f6 100644 --- a/src/trade.c +++ b/src/trade.c @@ -217,6 +217,13 @@ extern const u16 gUnknown_826AA5C[]; extern const u16 gUnknown_8269A5C[]; extern const u32 gUnknown_3379A0Bin[]; extern const u16 gUnknown_826407C[]; +extern const u16 gUnknown_826601C[]; +extern const u16 gUnknown_826BF5C[]; +extern const u16 gUnknown_826701C[]; +extern const u16 gUnknown_826985C[]; +extern const u16 gUnknown_826995C[]; +extern const u32 gWirelessSignal4bpp[]; +extern const u32 gUnknown_826C60C[]; void sub_804C600(void) { @@ -4554,39 +4561,40 @@ void CB2_RunTradeAnim_InGameTrade(void) BuildOamBuffer(); UpdatePaletteFade(); } -/* void sub_8050968(u8 state) { switch (state) { case 0: - sTradeAnimationResourcesPtr->bg2hofs = 0; - sTradeAnimationResourcesPtr->bg2vofs = 0xB4; + sTradeAnimationResourcesPtr->bg2vofs = 0; + sTradeAnimationResourcesPtr->bg2hofs = 0xB4; SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG2_ON | DISPCNT_OBJ_ON); - SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(2) | BGCNT_CHARBASE(1) | BGCNT_SCREENBASE(18) | BGCNT_AFF256x256); + SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(2) | BGCNT_CHARBASE(1) | BGCNT_SCREENBASE(18) | BGCNT_TXT512x256); LoadPalette(gTradeGba2_Pal, 0x10, 0x60); DmaCopyLarge16(3, gTradeGba_Gfx, (void *)BG_CHAR_ADDR(1), 0x1420, 0x1000); + DmaCopy16Defvars(3, gUnknown_826601C, (void *)BG_SCREEN_ADDR(18), 0x1000); break; case 1: sTradeAnimationResourcesPtr->bg1hofs = 0; sTradeAnimationResourcesPtr->bg1vofs = 0x15C; SetGpuReg(REG_OFFSET_BG1VOFS, 0x15C); SetGpuReg(REG_OFFSET_BG1CNT, BGCNT_PRIORITY(2) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(5) | BGCNT_TXT256x512); - SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(2) | BGCNT_CHARBASE(1) | BGCNT_SCREENBASE(18) | BGCNT_AFF512x512); + SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(2) | BGCNT_CHARBASE(1) | BGCNT_SCREENBASE(18) | BGCNT_TXT256x512); if (sTradeAnimationResourcesPtr->unk_108) { - DmaCopy16(3, gUnknown_826AA5C, (void *)BG_SCREEN_ADDR(5), 0x1000); + DmaCopy16Defvars(3, gUnknown_826AA5C, (void *)BG_SCREEN_ADDR(5), 0x1000); } else { - DmaCopy16(3, gUnknown_8269A5C, (void *)BG_SCREEN_ADDR(5), 0x1000); + DmaCopy16Defvars(3, gUnknown_8269A5C, (void *)BG_SCREEN_ADDR(5), 0x1000); } DmaCopyLarge16(3, gTradeGba_Gfx, (void *)BG_CHAR_ADDR(0), 0x1420, 0x1000); + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG1_ON | DISPCNT_OBJ_ON); break; case 2: - sTradeAnimationResourcesPtr->bg1hofs = 0; sTradeAnimationResourcesPtr->bg1vofs = 0; + sTradeAnimationResourcesPtr->bg1hofs = 0; if (sTradeAnimationResourcesPtr->unk_108 == FALSE) { SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG1_ON | DISPCNT_OBJ_ON); @@ -4596,7 +4604,7 @@ void sub_8050968(u8 state) else { SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG1_ON | DISPCNT_OBJ_ON); - DmaCopy16(3, gUnknown_826407C, (void *)BG_SCREEN_ADDR(5), 0x800); + DmaCopy16Defvars(3, gUnknown_826407C, (void *)BG_SCREEN_ADDR(5), 0x800); BlendPalettes(0x00000001, 0x10, RGB_BLACK); } break; @@ -4604,11 +4612,59 @@ void sub_8050968(u8 state) LoadPalette(gUnknown_826BF5C, 0x30, 0x20); LZ77UnCompVram(gWirelessSignal4bpp, BG_CHAR_ADDR(1)); LZ77UnCompVram(gUnknown_826C60C, BG_SCREEN_ADDR(18)); - sTradeAnimationResourcesPtr->bg2hofs = 0x50; + sTradeAnimationResourcesPtr->bg2vofs = 0x50; SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG1_ON | DISPCNT_BG2_ON | DISPCNT_OBJ_ON); break; case 4: - + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG2_ON | DISPCNT_OBJ_ON); + SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(3) | BGCNT_CHARBASE(1) | BGCNT_256COLOR | BGCNT_SCREENBASE(18) | BGCNT_AFF128x128); + sTradeAnimationResourcesPtr->unk_D4 = 0x40; + sTradeAnimationResourcesPtr->unk_D6 = 0x5C; + sTradeAnimationResourcesPtr->unk_E8 = 0x20; + sTradeAnimationResourcesPtr->unk_EA = 0x400; + sTradeAnimationResourcesPtr->unk_EC = 0; + DmaCopyLarge16(3, gUnknown_826701C, (void *)BG_CHAR_ADDR(1), 0x2840, 0x1000); + if (sTradeAnimationResourcesPtr->unk_108) + { + DmaCopy16Defvars(3, gUnknown_826985C, (void *)BG_SCREEN_ADDR(18), 0x100); + } + else + { + DmaCopy16Defvars(3, gUnknown_826995C, (void *)BG_SCREEN_ADDR(18), 0x100); + } + break; + case 5: + sTradeAnimationResourcesPtr->bg1vofs = 0; + sTradeAnimationResourcesPtr->bg1hofs = 0; + break; + case 6: + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG2_ON | DISPCNT_OBJ_ON); + SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(3) | BGCNT_CHARBASE(1) | BGCNT_256COLOR | BGCNT_SCREENBASE(18) | BGCNT_TXT256x256); + sTradeAnimationResourcesPtr->unk_D4 = 0x40; + sTradeAnimationResourcesPtr->unk_D6 = 0x5C; + sTradeAnimationResourcesPtr->unk_E8 = 0x100; + sTradeAnimationResourcesPtr->unk_EA = 0x80; + sTradeAnimationResourcesPtr->unk_DC = 0x78; + sTradeAnimationResourcesPtr->unk_DE = 0x50; + sTradeAnimationResourcesPtr->unk_EC = 0; + DmaCopyLarge16(3, gUnknown_826701C, BG_CHAR_ADDR(1), 0x2840, 0x1000); + if (sTradeAnimationResourcesPtr->unk_108) + { + DmaCopy16Defvars(3, gUnknown_826985C, (void *)BG_SCREEN_ADDR(18), 0x100); + } + else + { + DmaCopy16Defvars(3, gUnknown_826995C, (void *)BG_SCREEN_ADDR(18), 0x100); + } + break; + case 7: + sTradeAnimationResourcesPtr->bg2vofs = 0; + sTradeAnimationResourcesPtr->bg2hofs = 0; + SetGpuReg(REG_OFFSET_BLDCNT, 0); + SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(2) | BGCNT_CHARBASE(1) | BGCNT_SCREENBASE(18) | BGCNT_TXT512x256); + LoadPalette(gTradeGba2_Pal, 0x10, 0x60); + DmaCopyLarge16(3, gTradeGba_Gfx, (void *)BG_CHAR_ADDR(1), 0x1420, 0x1000); + DmaCopy16Defvars(3, gUnknown_826601C, (void *)BG_SCREEN_ADDR(18), 0x1000); + break; } } -*/ -- cgit v1.2.3 From e7a66b294169572a70c65b7223ae16810e9a49a3 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 29 Oct 2019 21:29:10 -0400 Subject: port sub_8050F3C --- asm/cable_club.s | 8 +- asm/evolution_scene.s | 32 +- asm/link_rfu_3.s | 4 +- asm/pokeball.s | 6 +- asm/trade.s | 2596 +++---------------------------------------------- data/strings.s | 8 +- data/trade.s | 2 +- include/gba/defines.h | 1 + include/pokeball.h | 2 +- include/strings.h | 4 + src/oak_speech.c | 2 +- src/trade.c | 810 ++++++++++++--- 12 files changed, 865 insertions(+), 2610 deletions(-) diff --git a/asm/cable_club.s b/asm/cable_club.s index 01aa8d217..9b4c173c9 100644 --- a/asm/cable_club.s +++ b/asm/cable_club.s @@ -2193,7 +2193,7 @@ _08081894: .align 2, 0 _080818A4: .4byte gPaletteFade _080818A8: - ldr r1, _080818C0 @ =gUnknown_2031DA4 + ldr r1, _080818C0 @ =gSelectedTradeMonPositions movs r0, 0 strb r0, [r1] strb r0, [r1, 0x1] @@ -2205,7 +2205,7 @@ _080818B8: strh r0, [r4, 0x8] b _080818D8 .align 2, 0 -_080818C0: .4byte gUnknown_2031DA4 +_080818C0: .4byte gSelectedTradeMonPositions _080818C4: ldr r0, _080818E0 @ =gReceivedRemoteLinkPlayers ldrb r0, [r0] @@ -2269,7 +2269,7 @@ _0808192C: .align 2, 0 _0808193C: .4byte gPaletteFade _08081940: - ldr r1, _08081958 @ =gUnknown_2031DA4 + ldr r1, _08081958 @ =gSelectedTradeMonPositions movs r0, 0 strb r0, [r1] strb r0, [r1, 0x1] @@ -2281,7 +2281,7 @@ _08081950: strh r0, [r4] b _08081970 .align 2, 0 -_08081958: .4byte gUnknown_2031DA4 +_08081958: .4byte gSelectedTradeMonPositions _0808195C: bl IsLinkTaskFinished lsls r0, 24 diff --git a/asm/evolution_scene.s b/asm/evolution_scene.s index b718deee6..710ee2b67 100644 --- a/asm/evolution_scene.s +++ b/asm/evolution_scene.s @@ -2817,7 +2817,7 @@ _080CF620: movs r0, 0 adds r1, r4, 0 movs r2, 0x1 - bl sub_8054508 + bl DrawTextOnTradeWindow ldr r0, _080CF648 @ =gTasks adds r1, r7, r6 lsls r1, 3 @@ -3110,7 +3110,7 @@ _080CF8A8: movs r0, 0 adds r1, r4, 0 movs r2, 0x1 - bl sub_8054508 + bl DrawTextOnTradeWindow ldr r0, _080CF91C @ =0x00000103 bl PlayFanfare ldr r2, _080CF920 @ =gTasks @@ -3222,7 +3222,7 @@ _080CF9AC: ldr r1, _080CF9C8 @ =gUnknown_841E325 movs r0, 0 movs r2, 0x1 - bl sub_8054508 + bl DrawTextOnTradeWindow ldr r0, _080CF9CC @ =gTasks adds r1, r7, r6 lsls r1, 3 @@ -3341,7 +3341,7 @@ _080CFAA8: movs r0, 0 adds r1, r4, 0 movs r2, 0x1 - bl sub_8054508 + bl DrawTextOnTradeWindow ldr r1, _080CFAD4 @ =gTasks adds r0, r7, r6 lsls r0, 3 @@ -3376,7 +3376,7 @@ _080CFAF2: ldr r1, _080CFB2C @ =gDisplayedStringBattle movs r0, 0 movs r2, 0x1 - bl sub_8054508 + bl DrawTextOnTradeWindow ldr r0, _080CFB30 @ =gTasks adds r1, r7, r6 lsls r1, 3 @@ -3477,7 +3477,7 @@ _080CFBDA: ldr r1, _080CFC04 @ =gDisplayedStringBattle movs r0, 0 movs r2, 0x1 - bl sub_8054508 + bl DrawTextOnTradeWindow ldr r0, _080CFC08 @ =gTasks adds r1, r7, r6 lsls r1, 3 @@ -3509,7 +3509,7 @@ _080CFC26: ldr r1, _080CFC4C @ =gDisplayedStringBattle movs r0, 0 movs r2, 0x1 - bl sub_8054508 + bl DrawTextOnTradeWindow ldr r0, _080CFC50 @ =gTasks adds r1, r7, r6 lsls r1, 3 @@ -3537,7 +3537,7 @@ _080CFC54: ldr r1, _080CFCEC @ =gDisplayedStringBattle movs r0, 0 movs r2, 0x1 - bl sub_8054508 + bl DrawTextOnTradeWindow ldr r0, _080CFCF0 @ =gTasks adds r1, r7, r6 lsls r1, 3 @@ -3625,7 +3625,7 @@ _080CFD1C: ldr r1, _080CFD68 @ =gDisplayedStringBattle movs r0, 0 movs r2, 0x1 - bl sub_8054508 + bl DrawTextOnTradeWindow ldr r1, _080CFD6C @ =gTasks adds r0, r7, r6 lsls r0, 3 @@ -3665,7 +3665,7 @@ _080CFD70: ldr r1, _080CFDA4 @ =gDisplayedStringBattle movs r0, 0 movs r2, 0x1 - bl sub_8054508 + bl DrawTextOnTradeWindow ldr r1, _080CFDA8 @ =gTasks adds r0, r7, r6 lsls r0, 3 @@ -3782,7 +3782,7 @@ _080CFE74: ldr r1, _080CFEB8 @ =gDisplayedStringBattle movs r0, 0 movs r2, 0x1 - bl sub_8054508 + bl DrawTextOnTradeWindow ldr r1, _080CFEBC @ =gTasks adds r0, r7, r6 lsls r0, 3 @@ -3825,7 +3825,7 @@ _080CFEC0: ldr r1, _080CFF20 @ =gDisplayedStringBattle movs r0, 0 movs r2, 0x1 - bl sub_8054508 + bl DrawTextOnTradeWindow ldr r0, _080CFF24 @ =gTasks adds r1, r7, r6 lsls r1, 3 @@ -3859,7 +3859,7 @@ _080CFF42: ldr r1, _080CFF68 @ =gDisplayedStringBattle movs r0, 0 movs r2, 0x1 - bl sub_8054508 + bl DrawTextOnTradeWindow ldr r0, _080CFF6C @ =gTasks adds r1, r7, r6 lsls r1, 3 @@ -3890,7 +3890,7 @@ _080CFF70: ldr r1, _080CFFB0 @ =gDisplayedStringBattle movs r0, 0 movs r2, 0x1 - bl sub_8054508 + bl DrawTextOnTradeWindow ldr r1, _080CFFB4 @ =gTasks adds r0, r7, r6 lsls r0, 3 @@ -3909,7 +3909,7 @@ _080CFFB8: ldr r1, _080CFFE4 @ =gDisplayedStringBattle movs r0, 0 movs r2, 0x1 - bl sub_8054508 + bl DrawTextOnTradeWindow ldr r1, _080CFFE8 @ =gTasks adds r0, r7, r6 lsls r0, 3 @@ -3932,7 +3932,7 @@ _080CFFEC: ldr r1, _080D0010 @ =gDisplayedStringBattle movs r0, 0 movs r2, 0x1 - bl sub_8054508 + bl DrawTextOnTradeWindow ldr r1, _080D0014 @ =gTasks adds r0, r7, r6 lsls r0, 3 diff --git a/asm/link_rfu_3.s b/asm/link_rfu_3.s index eac4dcb4d..4decd66ff 100644 --- a/asm/link_rfu_3.s +++ b/asm/link_rfu_3.s @@ -3083,7 +3083,7 @@ _08117210: movs r2, 0xD8 bl memcpy bl ResetBlockReceivedFlags - ldr r1, _08117270 @ =gUnknown_2031DA4 + ldr r1, _08117270 @ =gSelectedTradeMonPositions strb r7, [r1] movs r0, 0x6 strb r0, [r1, 0x1] @@ -3105,7 +3105,7 @@ _0811725C: .align 2, 0 _08117268: .4byte gLinkPartnerMail _0811726C: .4byte gBlockRecvBuffer -_08117270: .4byte gUnknown_2031DA4 +_08117270: .4byte gSelectedTradeMonPositions _08117274: .4byte gMain _08117278: .4byte CB2_ReturnToField _0811727C: .4byte CB2_InitTradeAnim_LinkTrade diff --git a/asm/pokeball.s b/asm/pokeball.s index fa1f4eee0..ed9eea832 100644 --- a/asm/pokeball.s +++ b/asm/pokeball.s @@ -2327,8 +2327,8 @@ _0804BB90: bx r0 thumb_func_end sub_804BAA4 - thumb_func_start sub_804BB98 -sub_804BB98: @ 804BB98 + thumb_func_start CreateTradePokeballSprite +CreateTradePokeballSprite: @ 804BB98 push {r4-r7,lr} mov r7, r10 mov r6, r9 @@ -2414,7 +2414,7 @@ _0804BC40: .4byte gUnknown_82605CC _0804BC44: .4byte gUnknown_82606F4 _0804BC48: .4byte gSprites _0804BC4C: .4byte sub_804BC50 - thumb_func_end sub_804BB98 + thumb_func_end CreateTradePokeballSprite thumb_func_start sub_804BC50 sub_804BC50: @ 804BC50 diff --git a/asm/trade.s b/asm/trade.s index d22c2c980..0c863b4f1 100644 --- a/asm/trade.s +++ b/asm/trade.s @@ -5,2339 +5,11 @@ .text - thumb_func_start sub_8050DE0 -sub_8050DE0: @ 8050DE0 - push {lr} - ldr r0, _08050E0C @ =gUnknown_826CE2C - bl LoadSpriteSheet - ldr r0, _08050E10 @ =gUnknown_826CE7C - bl LoadSpriteSheet - ldr r0, _08050E14 @ =gUnknown_826CEB0 - bl LoadSpriteSheet - ldr r0, _08050E18 @ =gUnknown_826CF28 - bl LoadSpriteSheet - ldr r0, _08050E1C @ =gUnknown_826CE34 - bl LoadSpritePalette - ldr r0, _08050E20 @ =gUnknown_826CE3C - bl LoadSpritePalette - pop {r0} - bx r0 - .align 2, 0 -_08050E0C: .4byte gUnknown_826CE2C -_08050E10: .4byte gUnknown_826CE7C -_08050E14: .4byte gUnknown_826CEB0 -_08050E18: .4byte gUnknown_826CF28 -_08050E1C: .4byte gUnknown_826CE34 -_08050E20: .4byte gUnknown_826CE3C - thumb_func_end sub_8050DE0 - - thumb_func_start sub_8050E24 -sub_8050E24: @ 8050E24 - push {r4,r5,lr} - sub sp, 0x14 - ldr r0, _08050E94 @ =sTradeAnimationResourcesPtr - ldr r0, [r0] - adds r0, 0xEE - ldrb r0, [r0] - cmp r0, 0 - beq _08050EB4 - bl GetMultiplayerId - lsls r0, 24 - ldr r3, _08050E98 @ =gStringVar1 - movs r2, 0x80 - lsls r2, 17 - eors r2, r0 - lsrs r2, 24 - lsls r1, r2, 3 - subs r1, r2 - lsls r1, 2 - ldr r0, _08050E9C @ =gLinkPlayers + 8 - adds r1, r0 - adds r0, r3, 0 - bl StringCopy - ldr r5, _08050EA0 @ =gUnknown_2031DA4 - ldrb r0, [r5, 0x1] - movs r1, 0x6 - bl __umodsi3 - lsls r0, 24 - lsrs r0, 24 - movs r4, 0x64 - muls r0, r4 - ldr r1, _08050EA4 @ =gEnemyParty - adds r0, r1 - movs r1, 0x2 - mov r2, sp - bl GetMonData - ldr r0, _08050EA8 @ =gStringVar3 - mov r1, sp - bl StringCopy10 - ldrb r0, [r5] - muls r0, r4 - ldr r1, _08050EAC @ =gPlayerParty - adds r0, r1 - movs r1, 0x2 - mov r2, sp - bl GetMonData - ldr r0, _08050EB0 @ =gStringVar2 - mov r1, sp - bl StringCopy10 - b _08050EF0 - .align 2, 0 -_08050E94: .4byte sTradeAnimationResourcesPtr -_08050E98: .4byte gStringVar1 -_08050E9C: .4byte gLinkPlayers + 8 -_08050EA0: .4byte gUnknown_2031DA4 -_08050EA4: .4byte gEnemyParty -_08050EA8: .4byte gStringVar3 -_08050EAC: .4byte gPlayerParty -_08050EB0: .4byte gStringVar2 -_08050EB4: - ldr r0, _08050EF8 @ =gSpecialVar_0x8004 - ldrh r0, [r0] - lsls r4, r0, 4 - subs r4, r0 - lsls r4, 2 - ldr r0, _08050EFC @ =gIngameTrades - adds r4, r0 - ldr r0, _08050F00 @ =gStringVar1 - adds r1, r4, 0 - adds r1, 0x2B - bl StringCopy - ldr r0, _08050F04 @ =gStringVar3 - adds r1, r4, 0 - bl StringCopy10 - ldr r0, _08050F08 @ =gSpecialVar_0x8005 - ldrh r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _08050F0C @ =gPlayerParty - adds r0, r1 - movs r1, 0x2 - mov r2, sp - bl GetMonData - ldr r0, _08050F10 @ =gStringVar2 - mov r1, sp - bl StringCopy10 -_08050EF0: - add sp, 0x14 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08050EF8: .4byte gSpecialVar_0x8004 -_08050EFC: .4byte gIngameTrades -_08050F00: .4byte gStringVar1 -_08050F04: .4byte gStringVar3 -_08050F08: .4byte gSpecialVar_0x8005 -_08050F0C: .4byte gPlayerParty -_08050F10: .4byte gStringVar2 - thumb_func_end sub_8050E24 - - thumb_func_start sub_8050F14 -sub_8050F14: @ 8050F14 - push {lr} - ldr r0, _08050F2C @ =sTradeAnimationResourcesPtr - ldr r0, [r0] - movs r1, 0x84 - lsls r1, 1 - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0 - bne _08050F30 - bl sub_805232C - b _08050F34 - .align 2, 0 -_08050F2C: .4byte sTradeAnimationResourcesPtr -_08050F30: - bl sub_8050F3C -_08050F34: - lsls r0, 24 - lsrs r0, 24 - pop {r1} - bx r1 - thumb_func_end sub_8050F14 - - thumb_func_start sub_8050F3C -sub_8050F3C: @ 8050F3C - push {r4-r7,lr} - sub sp, 0x10 - ldr r0, _08050F60 @ =sTradeAnimationResourcesPtr - ldr r1, [r0] - adds r1, 0x94 - ldrh r5, [r1] - ldr r1, _08050F64 @ =0x0000010b - adds r7, r0, 0 - cmp r5, r1 - bls _08050F54 - bl _08052318 -_08050F54: - lsls r0, r5, 2 - ldr r1, _08050F68 @ =_08050F6C - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08050F60: .4byte sTradeAnimationResourcesPtr -_08050F64: .4byte 0x0000010b -_08050F68: .4byte _08050F6C - .align 2, 0 -_08050F6C: - .4byte _0805139C - .4byte _08051414 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08051470 - .4byte _080514B8 - .4byte _0805152C - .4byte _08052318 - .4byte _08051598 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _080515BC - .4byte _080515EC - .4byte _080515FE - .4byte _08051620 - .4byte _08051668 - .4byte _08051698 - .4byte _080516E0 - .4byte _08051730 - .4byte _08051784 - .4byte _08051808 - .4byte _0805182C - .4byte _08051878 - .4byte _080518C4 - .4byte _08051920 - .4byte _08051980 - .4byte _08051994 - .4byte _080519A8 - .4byte _080519BC - .4byte _08051AE4 - .4byte _08051BB4 - .4byte _08051C3C - .4byte _08051CB4 - .4byte _08051CC4 - .4byte _08051CE4 - .4byte _08051D34 - .4byte _08051D52 - .4byte _08051D90 - .4byte _08051DA0 - .4byte _08051E1C - .4byte _08052318 - .4byte _08051E44 - .4byte _08051E84 - .4byte _08051EC4 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08051EE4 - .4byte _08051F0C - .4byte _08051F28 - .4byte _08051F48 - .4byte _08051FF0 - .4byte _08052024 - .4byte _08052070 - .4byte _08052128 - .4byte _080521B4 - .4byte _08052200 - .4byte _08052210 - .4byte _08052216 - .4byte _0805223C - .4byte _08052298 - .4byte _080522BC - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052160 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _080517B0 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052318 - .4byte _08052198 -_0805139C: - ldr r3, _08051408 @ =gSprites - ldr r0, [r7] - adds r0, 0x8E - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r3 - adds r0, 0x3E - ldrb r2, [r0] - movs r1, 0x5 - negs r1, r1 - ands r1, r2 - strb r1, [r0] - ldr r4, [r7] - adds r2, r4, 0 - adds r2, 0x8E - ldrb r1, [r2] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r3 - ldr r1, _0805140C @ =0x0000ff4c - strh r1, [r0, 0x24] - ldrb r0, [r2] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r3 - ldr r2, _08051410 @ =gMonFrontPicCoords - adds r0, r4, 0 - adds r0, 0xF0 - ldrh r0, [r0] - lsls r0, 2 - adds r0, r2 - ldrb r0, [r0, 0x1] - strh r0, [r1, 0x26] - adds r1, r4, 0 - adds r1, 0x94 - ldrh r0, [r1] - adds r0, 0x1 - strh r0, [r1] - bl GetCurrentMapMusic - ldr r1, [r7] - adds r1, 0xF4 - strh r0, [r1] - movs r0, 0x84 - lsls r0, 1 - bl PlayNewMapMusic - bl _08052318 - .align 2, 0 -_08051408: .4byte gSprites -_0805140C: .4byte 0x0000ff4c -_08051410: .4byte gMonFrontPicCoords -_08051414: - ldr r5, [r7] - adds r6, r5, 0 - adds r6, 0xE6 - movs r1, 0 - ldrsh r0, [r6, r1] - cmp r0, 0 - ble _08051448 - ldr r2, _08051444 @ =gSprites - adds r0, r5, 0 - adds r0, 0x8E - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrh r1, [r0, 0x24] - adds r1, 0x3 - strh r1, [r0, 0x24] - ldrh r0, [r6] - subs r0, 0x3 - strh r0, [r6] - bl _08052318 - .align 2, 0 -_08051444: .4byte gSprites -_08051448: - ldr r2, _0805146C @ =gSprites - adds r0, r5, 0 - adds r0, 0x8E - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - movs r1, 0 - strh r1, [r0, 0x24] - strh r1, [r6] - adds r1, r5, 0 - adds r1, 0x94 - movs r0, 0xA - strh r0, [r1] - bl _08052318 - .align 2, 0 -_0805146C: .4byte gSprites -_08051470: - ldr r4, _080514AC @ =gStringVar4 - ldr r1, _080514B0 @ =gUnknown_841E1E9 - adds r0, r4, 0 - bl StringExpandPlaceholders - movs r0, 0 - adds r1, r4, 0 - movs r2, 0 - bl sub_8054508 - ldr r4, _080514B4 @ =sTradeAnimationResourcesPtr - ldr r0, [r4] - adds r2, r0, 0 - adds r2, 0xF0 - ldrh r1, [r2] - movs r0, 0xCE - lsls r0, 1 - cmp r1, r0 - beq _0805149E - adds r0, r1, 0 - movs r1, 0 - bl PlayCry1 -_0805149E: - ldr r3, [r4] - adds r1, r3, 0 - adds r1, 0x94 - movs r2, 0 - movs r0, 0xB - bl _0805218E - .align 2, 0 -_080514AC: .4byte gStringVar4 -_080514B0: .4byte gUnknown_841E1E9 -_080514B4: .4byte sTradeAnimationResourcesPtr -_080514B8: - ldr r1, [r7] - ldr r0, [r1, 0x64] - adds r0, 0x1 - str r0, [r1, 0x64] - cmp r0, 0x50 - beq _080514C8 - bl _08052318 -_080514C8: - adds r0, r1, 0 - adds r0, 0x8E - ldrb r0, [r0] - ldr r2, _0805151C @ =gSprites - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r2 - ldrb r1, [r1, 0x5] - lsrs r1, 4 - movs r2, 0x2 - str r2, [sp] - movs r2, 0x1 - str r2, [sp, 0x4] - movs r2, 0x14 - str r2, [sp, 0x8] - ldr r2, _08051520 @ =0x000fffff - str r2, [sp, 0xC] - movs r2, 0x78 - movs r3, 0x20 - bl sub_804BB98 - ldr r1, [r7] - adds r1, 0xD2 - strb r0, [r1] - ldr r1, [r7] - adds r1, 0x94 - ldrh r0, [r1] - adds r0, 0x1 - strh r0, [r1] - ldr r4, _08051524 @ =gStringVar4 - ldr r1, _08051528 @ =gUnknown_841E200 - adds r0, r4, 0 - bl StringExpandPlaceholders - movs r0, 0 - adds r1, r4, 0 - movs r2, 0 - bl sub_8054508 - bl _08052318 - .align 2, 0 -_0805151C: .4byte gSprites -_08051520: .4byte 0x000fffff -_08051524: .4byte gStringVar4 -_08051528: .4byte gUnknown_841E200 -_0805152C: - ldr r5, _08051588 @ =gSprites - ldr r0, [r7] - adds r0, 0xD2 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r4, r5, 0 - adds r4, 0x1C - adds r0, r4 - ldr r1, [r0] - ldr r0, _0805158C @ =SpriteCallbackDummy - cmp r1, r0 - beq _0805154C - bl _08052318 -_0805154C: - ldr r0, _08051590 @ =sTradePokeballSpriteTemplate - movs r1, 0x78 - movs r2, 0x20 - movs r3, 0 - bl CreateSprite - ldr r1, [r7] - adds r1, 0xD3 - strb r0, [r1] - ldr r2, [r7] - adds r0, r2, 0 - adds r0, 0xD3 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - ldr r1, _08051594 @ =SpriteCB_TradePokeball_Outbound - str r1, [r0] - adds r2, 0xD2 - ldrb r1, [r2] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - bl DestroySprite - ldr r1, [r7] - bl _080522AC - .align 2, 0 -_08051588: .4byte gSprites -_0805158C: .4byte SpriteCallbackDummy -_08051590: .4byte sTradePokeballSpriteTemplate -_08051594: .4byte SpriteCB_TradePokeball_Outbound -_08051598: - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - ldr r0, _080515B8 @ =sTradeAnimationResourcesPtr - ldr r0, [r0] - adds r0, 0x94 - movs r1, 0x14 - strh r1, [r0] - bl _08052318 - .align 2, 0 -_080515B8: .4byte sTradeAnimationResourcesPtr -_080515BC: - ldr r0, _080515E8 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _080515CC - bl _08052318 -_080515CC: - movs r0, 0x4 - bl sub_8050968 - movs r0, 0 - movs r1, 0xFF - bl FillWindowPixelBuffer - movs r0, 0 - movs r1, 0x3 - bl CopyWindowToVram - bl _080522A8 - .align 2, 0 -_080515E8: .4byte gPaletteFade -_080515EC: - movs r1, 0x1 - negs r1, r1 - movs r0, 0 - str r0, [sp] - adds r0, r1, 0 - movs r2, 0x10 - movs r3, 0 - bl _080522A4 -_080515FE: - ldr r0, _0805161C @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _0805160E - bl _08052318 -_0805160E: - ldr r0, [r7] - adds r0, 0x94 - movs r1, 0x17 - strh r1, [r0] - bl _08052318 - .align 2, 0 -_0805161C: .4byte gPaletteFade -_08051620: - ldr r4, _0805163C @ =sTradeAnimationResourcesPtr - ldr r0, [r4] - adds r2, r0, 0 - adds r2, 0xEA - ldrh r1, [r2] - movs r0, 0x80 - lsls r0, 1 - cmp r1, r0 - bls _08051640 - adds r0, r1, 0 - subs r0, 0x34 - strh r0, [r2] - b _0805165C - .align 2, 0 -_0805163C: .4byte sTradeAnimationResourcesPtr -_08051640: - movs r0, 0x1 - bl sub_8050968 - ldr r3, [r4] - adds r1, r3, 0 - adds r1, 0xEA - movs r2, 0 - movs r0, 0x80 - strh r0, [r1] - subs r1, 0x56 - ldrh r0, [r1] - adds r0, 0x1 - strh r0, [r1] - str r2, [r3, 0x64] -_0805165C: - ldr r0, _08051664 @ =sTradeAnimationResourcesPtr - ldr r4, [r0] - bl _08051EB0 - .align 2, 0 -_08051664: .4byte sTradeAnimationResourcesPtr -_08051668: - ldr r1, [r7] - ldr r0, [r1, 0x64] - adds r0, 0x1 - str r0, [r1, 0x64] - cmp r0, 0x14 - bhi _08051678 - bl _08052318 -_08051678: - bl TradeAnim_UpdateBgAffine - ldr r0, _08051694 @ =gUnknown_826CF30 - movs r1, 0x78 - movs r2, 0x50 - movs r3, 0 - bl CreateSprite - ldr r1, [r7] - adds r1, 0x91 - strb r0, [r1] - ldr r1, [r7] - bl _080522AC - .align 2, 0 -_08051694: .4byte gUnknown_826CF30 -_08051698: - ldr r2, _080516D8 @ =gSprites - ldr r0, [r7] - adds r0, 0x91 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r1, r0, r2 - adds r0, r1, 0 - adds r0, 0x3F - ldrb r0, [r0] - lsls r0, 27 - cmp r0, 0 - blt _080516B8 - bl _08052318 -_080516B8: - adds r0, r1, 0 - bl DestroySprite - movs r1, 0xC8 - lsls r1, 3 - movs r0, 0x50 - bl SetGpuReg - ldr r1, _080516DC @ =0x0000040c - movs r0, 0x52 - bl SetGpuReg - ldr r1, [r7] - bl _080522AC - .align 2, 0 -_080516D8: .4byte gSprites -_080516DC: .4byte 0x0000040c -_080516E0: - ldr r2, [r7] - adds r0, r2, 0 - adds r0, 0xE0 - ldrh r1, [r0] - subs r1, 0x1 - strh r1, [r0] - lsls r1, 16 - movs r0, 0x9E - lsls r0, 17 - cmp r1, r0 - bne _08051700 - adds r1, r2, 0 - adds r1, 0x94 - ldrh r0, [r1] - adds r0, 0x1 - strh r0, [r1] -_08051700: - ldr r0, [r7] - adds r0, 0xE0 - movs r2, 0 - ldrsh r1, [r0, r2] - movs r0, 0xA4 - lsls r0, 1 - cmp r1, r0 - beq _08051714 - bl _08052318 -_08051714: - ldr r0, _0805172C @ =sGameLinkCableEndSpriteTemplate - movs r1, 0x80 - movs r2, 0x41 - movs r3, 0 - bl CreateSprite - ldr r1, [r7] - adds r1, 0x92 - strb r0, [r1] - bl _08052318 - .align 2, 0 -_0805172C: .4byte sGameLinkCableEndSpriteTemplate -_08051730: - ldr r0, _08051774 @ =gUnknown_826CE44 - movs r1, 0x80 - movs r2, 0x50 - movs r3, 0x3 - bl CreateSprite - ldr r4, _08051778 @ =sTradeAnimationResourcesPtr - ldr r1, [r4] - adds r1, 0x90 - strb r0, [r1] - ldr r0, _0805177C @ =gUnknown_826CE84 - movs r1, 0x80 - movs r2, 0x50 - movs r3, 0 - bl CreateSprite - ldr r1, [r4] - adds r1, 0x91 - strb r0, [r1] - ldr r0, [r4] - adds r0, 0x91 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _08051780 @ =gSprites - adds r0, r1 - movs r1, 0x1 - bl StartSpriteAnim - ldr r1, [r4] - bl _080522AC - .align 2, 0 -_08051774: .4byte gUnknown_826CE44 -_08051778: .4byte sTradeAnimationResourcesPtr -_0805177C: .4byte gUnknown_826CE84 -_08051780: .4byte gSprites -_08051784: - ldr r2, [r7] - adds r1, r2, 0 - adds r1, 0xE0 - ldrh r0, [r1] - subs r0, 0x2 - strh r0, [r1] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0xA6 - bne _0805179E - subs r1, 0x4C - movs r0, 0xC8 - strh r0, [r1] -_0805179E: - ldr r1, _080517AC @ =0x00001241 - movs r0, 0 - bl SetGpuReg - bl _08052318 - .align 2, 0 -_080517AC: .4byte 0x00001241 -_080517B0: - ldr r2, _08051804 @ =gSprites - ldr r4, [r7] - adds r3, r4, 0 - adds r3, 0x90 - ldrb r1, [r3] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrh r1, [r0, 0x22] - subs r1, 0x2 - strh r1, [r0, 0x22] - adds r0, r4, 0 - adds r0, 0x91 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrh r1, [r0, 0x22] - subs r1, 0x2 - strh r1, [r0, 0x22] - ldrb r1, [r3] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - movs r3, 0x22 - ldrsh r1, [r0, r3] - movs r0, 0x8 - negs r0, r0 - cmp r1, r0 - blt _080517F6 - bl _08052318 -_080517F6: - adds r1, r4, 0 - adds r1, 0x94 - movs r0, 0x1D - strh r0, [r1] - bl _08052318 - .align 2, 0 -_08051804: .4byte gSprites -_08051808: - movs r1, 0x1 - negs r1, r1 - movs r0, 0 - str r0, [sp] - adds r0, r1, 0 - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - ldr r0, _08051828 @ =sTradeAnimationResourcesPtr - ldr r0, [r0] - adds r0, 0x94 - movs r1, 0x1E - strh r1, [r0] - bl _08052318 - .align 2, 0 -_08051828: .4byte sTradeAnimationResourcesPtr -_0805182C: - ldr r0, _08051870 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _0805183C - bl _08052318 -_0805183C: - ldr r0, [r7] - adds r0, 0x90 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r4, _08051874 @ =gSprites - adds r0, r4 - bl DestroySprite - ldr r0, [r7] - adds r0, 0x91 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - bl DestroySprite - movs r0, 0x2 - bl sub_8050968 - ldr r1, [r7] - bl _080522AC - .align 2, 0 -_08051870: .4byte gPaletteFade -_08051874: .4byte gSprites -_08051878: - movs r1, 0x1 - negs r1, r1 - movs r0, 0 - str r0, [sp] - adds r0, r1, 0 - movs r2, 0x10 - movs r3, 0 - bl BeginNormalPaletteFade - ldr r5, _080518BC @ =gUnknown_826CE84 - adds r0, r5, 0 - movs r1, 0x6F - movs r2, 0xAA - movs r3, 0 - bl CreateSprite - ldr r4, _080518C0 @ =sTradeAnimationResourcesPtr - ldr r1, [r4] - adds r1, 0x90 - strb r0, [r1] - movs r2, 0xA - negs r2, r2 - adds r0, r5, 0 - movs r1, 0x81 - movs r3, 0 - bl CreateSprite - ldr r1, [r4] - adds r1, 0x91 - strb r0, [r1] - ldr r1, [r4] - bl _080522AC - .align 2, 0 -_080518BC: .4byte gUnknown_826CE84 -_080518C0: .4byte sTradeAnimationResourcesPtr -_080518C4: - ldr r0, _08051914 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _080518E2 - movs r0, 0x28 - bl PlaySE - ldr r0, _08051918 @ =sTradeAnimationResourcesPtr - ldr r1, [r0] - adds r1, 0x94 - ldrh r0, [r1] - adds r0, 0x1 - strh r0, [r1] -_080518E2: - ldr r3, _0805191C @ =gSprites - ldr r0, _08051918 @ =sTradeAnimationResourcesPtr - ldr r2, [r0] - adds r0, r2, 0 - adds r0, 0x90 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r3 - ldrh r1, [r0, 0x26] - subs r1, 0x3 - strh r1, [r0, 0x26] - adds r2, 0x91 - ldrb r1, [r2] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r3 - ldrh r1, [r0, 0x26] - adds r1, 0x3 - strh r1, [r0, 0x26] - bl _08052318 - .align 2, 0 -_08051914: .4byte gPaletteFade -_08051918: .4byte sTradeAnimationResourcesPtr -_0805191C: .4byte gSprites -_08051920: - ldr r5, _0805197C @ =gSprites - ldr r4, [r7] - adds r2, r4, 0 - adds r2, 0x90 - ldrb r1, [r2] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - ldrh r1, [r0, 0x26] - subs r1, 0x3 - strh r1, [r0, 0x26] - adds r6, r4, 0 - adds r6, 0x91 - ldrb r1, [r6] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - ldrh r1, [r0, 0x26] - adds r1, 0x3 - strh r1, [r0, 0x26] - ldrb r1, [r2] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r3, r0, r5 - movs r0, 0x26 - ldrsh r1, [r3, r0] - movs r0, 0x5A - negs r0, r0 - cmp r1, r0 - ble _08051966 - bl _08052318 -_08051966: - movs r2, 0x1 - strh r2, [r3, 0x30] - ldrb r1, [r6] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - strh r2, [r0, 0x30] - adds r1, r4, 0 - bl _080522AC - .align 2, 0 -_0805197C: .4byte gSprites -_08051980: - ldr r2, _08051990 @ =0x0000ffff - movs r0, 0x1 - movs r1, 0x10 - bl BlendPalettes - bl _080522A8 - .align 2, 0 -_08051990: .4byte 0x0000ffff -_08051994: - ldr r2, _080519A4 @ =0x0000ffff - movs r0, 0x1 - movs r1, 0 - bl BlendPalettes - bl _080522A8 - .align 2, 0 -_080519A4: .4byte 0x0000ffff -_080519A8: - ldr r2, _080519B8 @ =0x0000ffff - movs r0, 0x1 - movs r1, 0x10 - bl BlendPalettes - bl _080522A8 - .align 2, 0 -_080519B8: .4byte 0x0000ffff -_080519BC: - ldr r5, _08051A28 @ =sTradeAnimationResourcesPtr - ldr r0, [r5] - adds r0, 0xF0 - ldrh r0, [r0] - bl IsPokeSpriteNotFlipped - lsls r0, 24 - cmp r0, 0 - bne _08051A34 - ldr r4, _08051A2C @ =gSprites - ldr r2, [r5] - adds r2, 0x8E - ldrb r1, [r2] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r1, r4, 0 - adds r1, 0x10 - adds r0, r1 - ldr r1, _08051A30 @ =gUnknown_826CF88 - str r1, [r0] - ldrb r1, [r2] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - ldrb r1, [r0, 0x1] - movs r2, 0x3 - orrs r1, r2 - strb r1, [r0, 0x1] - ldr r0, [r5] - adds r0, 0x8E - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - movs r1, 0 - movs r2, 0x3 - movs r3, 0x3 - bl CalcCenterToCornerVec - ldr r0, [r5] - adds r0, 0x8E - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - movs r1, 0 - bl StartSpriteAffineAnim - b _08051A4A - .align 2, 0 -_08051A28: .4byte sTradeAnimationResourcesPtr -_08051A2C: .4byte gSprites -_08051A30: .4byte gUnknown_826CF88 -_08051A34: - ldr r0, [r5] - adds r0, 0x8E - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _08051AD8 @ =gSprites - adds r0, r1 - movs r1, 0 - bl StartSpriteAffineAnim -_08051A4A: - ldr r5, _08051ADC @ =sTradeAnimationResourcesPtr - ldr r0, [r5] - adds r0, 0x8F - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r4, _08051AD8 @ =gSprites - adds r0, r4 - movs r1, 0 - bl StartSpriteAffineAnim - ldr r2, [r5] - adds r3, r2, 0 - adds r3, 0x8E - ldrb r1, [r3] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - movs r1, 0x3C - strh r1, [r0, 0x20] - adds r2, 0x8F - ldrb r1, [r2] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - movs r1, 0xB4 - strh r1, [r0, 0x20] - ldrb r1, [r3] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - movs r1, 0xC0 - strh r1, [r0, 0x22] - ldrb r1, [r2] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - ldr r1, _08051AE0 @ =0x0000ffe0 - strh r1, [r0, 0x22] - ldrb r0, [r3] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r4 - adds r1, 0x3E - ldrb r3, [r1] - movs r2, 0x5 - negs r2, r2 - adds r0, r2, 0 - ands r0, r3 - strb r0, [r1] - ldr r0, [r5] - adds r0, 0x8F - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - adds r0, 0x3E - ldrb r1, [r0] - ands r2, r1 - strb r2, [r0] - ldr r1, [r5] - bl _080522AC - .align 2, 0 -_08051AD8: .4byte gSprites -_08051ADC: .4byte sTradeAnimationResourcesPtr -_08051AE0: .4byte 0x0000ffe0 -_08051AE4: - ldr r4, _08051BAC @ =gSprites - ldr r2, [r7] - adds r3, r2, 0 - adds r3, 0x8E - ldrb r1, [r3] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - ldrh r1, [r0, 0x26] - subs r1, 0x3 - movs r5, 0 - strh r1, [r0, 0x26] - adds r2, 0x8F - ldrb r1, [r2] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - ldrh r1, [r0, 0x26] - adds r1, 0x3 - strh r1, [r0, 0x26] - ldrb r1, [r3] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - ldrh r0, [r0, 0x26] - adds r0, 0xA3 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x2 - bhi _08051B2C - movs r0, 0x27 - bl PlaySE -_08051B2C: - ldr r2, [r7] - adds r3, r2, 0 - adds r3, 0x8E - ldrb r1, [r3] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - movs r6, 0x26 - ldrsh r1, [r0, r6] - movs r0, 0xDE - negs r0, r0 - cmp r1, r0 - blt _08051B4C - bl _08052318 -_08051B4C: - adds r0, r2, 0 - adds r0, 0x90 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - strh r5, [r0, 0x30] - adds r0, r2, 0 - adds r0, 0x91 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - strh r5, [r0, 0x30] - adds r1, r2, 0 - adds r1, 0x94 - ldrh r0, [r1] - adds r0, 0x1 - strh r0, [r1] - ldrb r1, [r3] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - adds r0, 0x3E - ldrb r1, [r0] - movs r2, 0x4 - orrs r1, r2 - strb r1, [r0] - ldr r0, [r7] - adds r0, 0x8F - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - adds r0, 0x3E - ldrb r1, [r0] - orrs r1, r2 - strb r1, [r0] - ldr r2, _08051BB0 @ =0x0000ffff - movs r0, 0x1 - movs r1, 0 - bl BlendPalettes - b _08052318 - .align 2, 0 -_08051BAC: .4byte gSprites -_08051BB0: .4byte 0x0000ffff -_08051BB4: - ldr r4, _08051C38 @ =gSprites - ldr r2, [r7] - adds r3, r2, 0 - adds r3, 0x90 - ldrb r1, [r3] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - ldrh r1, [r0, 0x26] - subs r1, 0x3 - strh r1, [r0, 0x26] - adds r2, 0x91 - ldrb r1, [r2] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - ldrh r1, [r0, 0x26] - adds r1, 0x3 - strh r1, [r0, 0x26] - ldrb r1, [r3] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - movs r2, 0x26 - ldrsh r1, [r0, r2] - movs r0, 0xDE - negs r0, r0 - cmp r1, r0 - ble _08051BF6 - b _08052318 -_08051BF6: - movs r1, 0x1 - negs r1, r1 - movs r0, 0 - str r0, [sp] - adds r0, r1, 0 - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - ldr r1, [r7] - adds r2, r1, 0 - adds r2, 0x94 - ldrh r0, [r2] - adds r0, 0x1 - strh r0, [r2] - adds r1, 0x90 - ldrb r1, [r1] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - bl DestroySprite - ldr r0, [r7] - adds r0, 0x91 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - bl DestroySprite - b _08052318 - .align 2, 0 -_08051C38: .4byte gSprites -_08051C3C: - ldr r0, _08051CA4 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _08051C4A - b _08052318 -_08051C4A: - ldr r1, [r7] - adds r1, 0x94 - ldrh r0, [r1] - adds r0, 0x1 - strh r0, [r1] - movs r0, 0x1 - bl sub_8050968 - ldr r0, [r7] - adds r0, 0xE0 - movs r1, 0xA6 - strh r1, [r0] - ldr r0, _08051CA8 @ =gUnknown_826CE44 - movs r4, 0x14 - negs r4, r4 - movs r1, 0x80 - adds r2, r4, 0 - movs r3, 0x3 - bl CreateSprite - ldr r1, [r7] - adds r1, 0x90 - strb r0, [r1] - ldr r0, _08051CAC @ =gUnknown_826CE84 - movs r1, 0x80 - adds r2, r4, 0 - movs r3, 0 - bl CreateSprite - ldr r1, [r7] - adds r1, 0x91 - strb r0, [r1] - ldr r0, [r7] - adds r0, 0x91 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _08051CB0 @ =gSprites - adds r0, r1 - movs r1, 0x1 - bl StartSpriteAnim - b _08052318 - .align 2, 0 -_08051CA4: .4byte gPaletteFade -_08051CA8: .4byte gUnknown_826CE44 -_08051CAC: .4byte gUnknown_826CE84 -_08051CB0: .4byte gSprites -_08051CB4: - movs r1, 0x1 - negs r1, r1 - movs r0, 0 - str r0, [sp] - adds r0, r1, 0 - movs r2, 0x10 - movs r3, 0 - b _080522A4 -_08051CC4: - movs r1, 0x92 - lsls r1, 5 - movs r0, 0 - bl SetGpuReg - ldr r0, _08051CE0 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _08051CDC - b _08052318 -_08051CDC: - b _080522A8 - .align 2, 0 -_08051CE0: .4byte gPaletteFade -_08051CE4: - ldr r2, _08051D30 @ =gSprites - ldr r4, [r7] - adds r3, r4, 0 - adds r3, 0x90 - ldrb r1, [r3] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrh r1, [r0, 0x26] - adds r1, 0x3 - strh r1, [r0, 0x26] - adds r0, r4, 0 - adds r0, 0x91 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrh r1, [r0, 0x26] - adds r1, 0x3 - strh r1, [r0, 0x26] - ldrb r1, [r3] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - movs r3, 0x26 - ldrsh r1, [r0, r3] - movs r6, 0x22 - ldrsh r0, [r0, r6] - adds r1, r0 - cmp r1, 0x40 - beq _08051D2A - b _08052318 -_08051D2A: - adds r1, r4, 0 - b _080522AC - .align 2, 0 -_08051D30: .4byte gSprites -_08051D34: - ldr r1, [r7] - adds r5, r1, 0 - adds r5, 0xE0 - ldrh r0, [r5] - adds r0, 0x2 - strh r0, [r5] - lsls r0, 16 - asrs r0, 16 - movs r6, 0x9E - lsls r6, 1 - cmp r0, r6 - bgt _08051D4E - b _08052318 -_08051D4E: - strh r6, [r5] - b _080522AC -_08051D52: - ldr r0, [r7] - adds r0, 0x90 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r4, _08051D8C @ =gSprites - adds r0, r4 - bl DestroySprite - ldr r0, [r7] - adds r0, 0x91 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - bl DestroySprite - ldr r3, [r7] - adds r2, r3, 0 - adds r2, 0x94 - ldrh r0, [r2] - adds r0, 0x1 - movs r1, 0 - strh r0, [r2] - str r1, [r3, 0x64] - b _08052318 - .align 2, 0 -_08051D8C: .4byte gSprites -_08051D90: - ldr r1, [r7] - ldr r0, [r1, 0x64] - adds r0, 0x1 - str r0, [r1, 0x64] - cmp r0, 0xA - beq _08051D9E - b _08052318 -_08051D9E: - b _080522AC -_08051DA0: - ldr r1, [r7] - adds r2, r1, 0 - adds r2, 0xE0 - ldrh r0, [r2] - adds r0, 0x1 - strh r0, [r2] - lsls r0, 16 - asrs r0, 16 - movs r3, 0xAE - lsls r3, 1 - cmp r0, r3 - ble _08051DC2 - strh r3, [r2] - adds r1, 0x94 - ldrh r0, [r1] - adds r0, 0x1 - strh r0, [r1] -_08051DC2: - ldr r2, [r7] - adds r0, r2, 0 - adds r0, 0xE0 - movs r3, 0 - ldrsh r1, [r0, r3] - movs r0, 0xA4 - lsls r0, 1 - cmp r1, r0 - beq _08051DD6 - b _08052318 -_08051DD6: - movs r6, 0x84 - lsls r6, 1 - adds r0, r2, r6 - ldrb r0, [r0] - cmp r0, 0 - bne _08051DE4 - b _08052318 -_08051DE4: - ldr r0, _08051E10 @ =sGameLinkCableEndSpriteTemplate - movs r1, 0x80 - movs r2, 0x41 - movs r3, 0 - bl CreateSprite - ldr r1, [r7] - adds r1, 0x92 - strb r0, [r1] - ldr r2, _08051E14 @ =gSprites - ldr r0, [r7] - adds r0, 0x92 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r2, 0x1C - adds r0, r2 - ldr r1, _08051E18 @ =SpriteCB_GameLinkCableEnd_Inbound - str r1, [r0] - b _08052318 - .align 2, 0 -_08051E10: .4byte sGameLinkCableEndSpriteTemplate -_08051E14: .4byte gSprites -_08051E18: .4byte SpriteCB_GameLinkCableEnd_Inbound -_08051E1C: - ldr r0, _08051E3C @ =gUnknown_826CF30 - movs r1, 0x78 - movs r2, 0x50 - movs r3, 0 - bl CreateSprite - ldr r2, _08051E40 @ =sTradeAnimationResourcesPtr - ldr r1, [r2] - adds r1, 0x91 - strb r0, [r1] - ldr r0, [r2] - adds r0, 0x94 - movs r1, 0x32 - strh r1, [r0] - b _08052318 - .align 2, 0 -_08051E3C: .4byte gUnknown_826CF30 -_08051E40: .4byte sTradeAnimationResourcesPtr -_08051E44: - ldr r2, _08051E80 @ =gSprites - ldr r0, [r7] - adds r0, 0x91 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r1, r0, r2 - adds r0, r1, 0 - adds r0, 0x3F - ldrb r0, [r0] - lsls r0, 27 - cmp r0, 0 - blt _08051E62 - b _08052318 -_08051E62: - adds r0, r1, 0 - bl DestroySprite - movs r0, 0x6 - bl sub_8050968 - ldr r1, [r7] - adds r1, 0x94 - ldrh r0, [r1] - adds r0, 0x1 - strh r0, [r1] - movs r0, 0x98 - bl PlaySE - b _08052318 - .align 2, 0 -_08051E80: .4byte gSprites -_08051E84: - ldr r1, [r7] - adds r2, r1, 0 - adds r2, 0xEA - ldrh r3, [r2] - ldr r0, _08051E9C @ =0x000003ff - cmp r3, r0 - bhi _08051EA0 - adds r0, r3, 0 - adds r0, 0x34 - strh r0, [r2] - b _08051EAE - .align 2, 0 -_08051E9C: .4byte 0x000003ff -_08051EA0: - movs r0, 0x80 - lsls r0, 3 - strh r0, [r2] - adds r1, 0x94 - ldrh r0, [r1] - adds r0, 0x1 - strh r0, [r1] -_08051EAE: - ldr r4, [r7] -_08051EB0: - adds r0, r4, 0 - adds r0, 0xEA - ldrh r1, [r0] - movs r0, 0x80 - lsls r0, 8 - bl __divsi3 - adds r4, 0xE8 - strh r0, [r4] - b _08052318 -_08051EC4: - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - ldr r0, _08051EE0 @ =sTradeAnimationResourcesPtr - ldr r0, [r0] - adds r0, 0x94 - movs r1, 0x3C - strh r1, [r0] - b _08052318 - .align 2, 0 -_08051EE0: .4byte sTradeAnimationResourcesPtr -_08051EE4: - ldr r4, _08051F08 @ =gPaletteFade - ldrb r1, [r4, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _08051EF2 - b _08052318 -_08051EF2: - movs r0, 0x5 - bl sub_8050968 - movs r0, 0x7 - bl sub_8050968 - ldrb r0, [r4, 0x8] - movs r1, 0x80 - orrs r0, r1 - strb r0, [r4, 0x8] - b _080522A8 - .align 2, 0 -_08051F08: .4byte gPaletteFade -_08051F0C: - ldr r2, _08051F24 @ =gPaletteFade - ldrb r1, [r2, 0x8] - movs r0, 0x7F - ands r0, r1 - strb r0, [r2, 0x8] - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0x10 - movs r3, 0 - b _080522A4 - .align 2, 0 -_08051F24: .4byte gPaletteFade -_08051F28: - movs r1, 0xA2 - lsls r1, 5 - movs r0, 0 - bl SetGpuReg - ldr r0, _08051F44 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _08051F40 - b _08052318 -_08051F40: - b _080522A8 - .align 2, 0 -_08051F44: .4byte gPaletteFade -_08051F48: - ldr r0, _08051FDC @ =sTradePokeballSpriteTemplate - movs r2, 0x8 - negs r2, r2 - movs r1, 0x78 - movs r3, 0 - bl CreateSprite - ldr r5, _08051FE0 @ =sTradeAnimationResourcesPtr - ldr r1, [r5] - adds r1, 0xD3 - movs r6, 0 - strb r0, [r1] - ldr r4, _08051FE4 @ =gSprites - ldr r2, [r5] - adds r2, 0xD3 - ldrb r1, [r2] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - movs r1, 0x4A - strh r1, [r0, 0x34] - ldrb r1, [r2] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r1, r4, 0 - adds r1, 0x1C - adds r0, r1 - ldr r1, _08051FE8 @ =SpriteCB_TradePokeball_Inbound - str r1, [r0] - ldrb r1, [r2] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - movs r1, 0x1 - bl StartSpriteAnim - ldr r0, [r5] - adds r0, 0xD3 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - movs r1, 0x2 - bl StartSpriteAffineAnim - ldr r0, [r5] - adds r0, 0xD3 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - ldrb r1, [r0, 0x5] - lsrs r1, 4 - adds r1, 0x10 - movs r0, 0x1 - lsls r0, r1 - ldr r2, _08051FEC @ =0x0000ffff - movs r1, 0x10 - bl BlendPalettes - ldr r2, [r5] - adds r1, r2, 0 - adds r1, 0x94 - ldrh r0, [r1] - adds r0, 0x1 - strh r0, [r1] - str r6, [r2, 0x64] - b _08052318 - .align 2, 0 -_08051FDC: .4byte sTradePokeballSpriteTemplate -_08051FE0: .4byte sTradeAnimationResourcesPtr -_08051FE4: .4byte gSprites -_08051FE8: .4byte SpriteCB_TradePokeball_Inbound -_08051FEC: .4byte 0x0000ffff -_08051FF0: - ldr r2, _0805201C @ =gSprites - ldr r0, [r7] - adds r0, 0xD3 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r1, [r0, 0x5] - lsrs r1, 4 - adds r1, 0x10 - movs r0, 0x1 - lsls r0, r1 - ldr r1, _08052020 @ =0x0000ffff - str r1, [sp] - movs r1, 0x1 - movs r2, 0x10 - movs r3, 0 - bl BeginNormalPaletteFade - ldr r1, [r7] - b _080522AC - .align 2, 0 -_0805201C: .4byte gSprites -_08052020: .4byte 0x0000ffff -_08052024: - ldr r2, _08052060 @ =gSprites - ldr r3, [r7] - adds r0, r3, 0 - adds r0, 0xD3 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r2, 0x1C - adds r0, r2 - ldr r1, [r0] - ldr r0, _08052064 @ =SpriteCallbackDummy - cmp r1, r0 - beq _08052042 - b _08052318 -_08052042: - adds r0, r3, 0 - adds r0, 0xF2 - ldrh r2, [r0] - lsls r0, r2, 3 - ldr r1, _08052068 @ =gMonFrontPicTable - adds r0, r1 - ldr r1, _0805206C @ =gMonSpritesGfxPtr - ldr r1, [r1] - ldr r1, [r1, 0x10] - ldr r3, [r3, 0x6C] - bl HandleLoadSpecialPokePic - ldr r1, [r7] - b _080522AC - .align 2, 0 -_08052060: .4byte gSprites -_08052064: .4byte SpriteCallbackDummy -_08052068: .4byte gMonFrontPicTable -_0805206C: .4byte gMonSpritesGfxPtr -_08052070: - ldr r4, _0805211C @ =gSprites - ldr r2, [r7] - adds r6, r2, 0 - adds r6, 0x8F - ldrb r1, [r6] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - movs r5, 0 - movs r1, 0x78 - strh r1, [r0, 0x20] - ldrb r0, [r6] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r4 - ldr r3, _08052120 @ =gMonFrontPicCoords - adds r2, 0xF2 - ldrh r0, [r2] - lsls r0, 2 - adds r0, r3 - ldrb r0, [r0, 0x1] - adds r0, 0x3C - strh r0, [r1, 0x22] - ldrb r1, [r6] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - strh r5, [r0, 0x24] - ldrb r1, [r6] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - strh r5, [r0, 0x26] - ldrb r1, [r6] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - movs r1, 0 - bl StartSpriteAnim - ldr r0, [r7] - adds r0, 0x8F - ldrb r0, [r0] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r4 - ldrb r1, [r1, 0x5] - lsrs r1, 4 - movs r2, 0x2 - str r2, [sp] - movs r2, 0x1 - str r2, [sp, 0x4] - movs r2, 0x14 - str r2, [sp, 0x8] - ldr r2, _08052124 @ =0x000fffff - str r2, [sp, 0xC] - movs r2, 0x78 - movs r3, 0x54 - bl CreatePokeballSpriteToReleaseMon - ldr r0, [r7] - adds r0, 0xD3 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - bl FreeSpriteOamMatrix - ldr r0, [r7] - adds r0, 0xD3 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - bl DestroySprite - ldr r1, [r7] - b _080522AC - .align 2, 0 -_0805211C: .4byte gSprites -_08052120: .4byte gMonFrontPicCoords -_08052124: .4byte 0x000fffff -_08052128: - movs r1, 0xAA - lsls r1, 5 - movs r0, 0 - bl SetGpuReg - ldr r4, _08052154 @ =gStringVar4 - ldr r1, _08052158 @ =gUnknown_841E20D - adds r0, r4, 0 - bl StringExpandPlaceholders - movs r0, 0 - adds r1, r4, 0 - movs r2, 0 - bl sub_8054508 - ldr r0, _0805215C @ =sTradeAnimationResourcesPtr - ldr r3, [r0] - adds r1, r3, 0 - adds r1, 0x94 - movs r2, 0 - movs r0, 0xA7 - b _0805218E - .align 2, 0 -_08052154: .4byte gStringVar4 -_08052158: .4byte gUnknown_841E20D -_0805215C: .4byte sTradeAnimationResourcesPtr -_08052160: - ldr r1, [r7] - ldr r0, [r1, 0x64] - adds r0, 0x1 - str r0, [r1, 0x64] - cmp r0, 0x3C - bhi _0805216E - b _08052318 -_0805216E: - adds r2, r1, 0 - adds r2, 0xF2 - ldrh r1, [r2] - movs r0, 0xCE - lsls r0, 1 - cmp r1, r0 - beq _08052184 - adds r0, r1, 0 - movs r1, 0 - bl PlayCry1 -_08052184: - ldr r3, [r7] - adds r1, r3, 0 - adds r1, 0x94 - movs r2, 0 - ldr r0, _08052194 @ =0x0000010b -_0805218E: - strh r0, [r1] - str r2, [r3, 0x64] - b _08052318 - .align 2, 0 -_08052194: .4byte 0x0000010b -_08052198: - bl IsCryFinished - lsls r0, 24 - cmp r0, 0 - bne _080521A4 - b _08052318 -_080521A4: - ldr r0, _080521B0 @ =sTradeAnimationResourcesPtr - ldr r0, [r0] - adds r0, 0x94 - movs r1, 0x44 - strh r1, [r0] - b _08052318 - .align 2, 0 -_080521B0: .4byte sTradeAnimationResourcesPtr -_080521B4: - ldr r1, [r7] - ldr r0, [r1, 0x64] - adds r0, 0x1 - str r0, [r1, 0x64] - cmp r0, 0xA - bne _080521C6 - ldr r0, _080521F4 @ =0x00000103 - bl PlayFanfare -_080521C6: - ldr r1, [r7] - ldr r0, [r1, 0x64] - cmp r0, 0xFA - beq _080521D0 - b _08052318 -_080521D0: - adds r1, 0x94 - ldrh r0, [r1] - adds r0, 0x1 - movs r5, 0 - strh r0, [r1] - ldr r4, _080521F8 @ =gStringVar4 - ldr r1, _080521FC @ =gUnknown_841E21E - adds r0, r4, 0 - bl StringExpandPlaceholders - movs r0, 0 - adds r1, r4, 0 - movs r2, 0 - bl sub_8054508 - ldr r0, [r7] - str r5, [r0, 0x64] - b _08052318 - .align 2, 0 -_080521F4: .4byte 0x00000103 -_080521F8: .4byte gStringVar4 -_080521FC: .4byte gUnknown_841E21E -_08052200: - ldr r1, [r7] - ldr r0, [r1, 0x64] - adds r0, 0x1 - str r0, [r1, 0x64] - cmp r0, 0x3C - beq _0805220E - b _08052318 -_0805220E: - b _080522AC -_08052210: - bl sub_80544AC - b _080522A8 -_08052216: - ldr r2, [r7] - adds r0, r2, 0 - adds r0, 0xEE - ldrb r0, [r0] - cmp r0, 0 - beq _08052226 - movs r0, 0x1 - b _0805231A -_08052226: - ldr r0, _08052238 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _08052318 - adds r1, r2, 0 - b _080522AC - .align 2, 0 -_08052238: .4byte gMain -_0805223C: - ldr r0, _08052280 @ =gSpecialVar_0x8005 - ldrb r0, [r0] - movs r1, 0 - bl Trade_SwapPlayerAndParterMonData - ldr r1, _08052284 @ =gCB2_AfterEvolution - ldr r0, _08052288 @ =CB2_RunTradeAnim_InGameTrade - str r0, [r1] - ldr r7, _0805228C @ =gUnknown_2031DA4 - ldrb r0, [r7] - movs r6, 0x64 - muls r0, r6 - ldr r5, _08052290 @ =gPlayerParty - adds r0, r5 - movs r1, 0x1 - movs r2, 0 - bl GetEvolutionTargetSpecies - lsls r0, 16 - lsrs r4, r0, 16 - cmp r4, 0 - beq _080522A8 - ldrb r3, [r7] - adds r0, r3, 0 - muls r0, r6 - adds r0, r5 - ldr r1, _08052294 @ =sTradeAnimationResourcesPtr - ldr r1, [r1] - adds r1, 0x8F - ldrb r2, [r1] - adds r1, r4, 0 - bl TradeEvolutionScene - b _080522A8 - .align 2, 0 -_08052280: .4byte gSpecialVar_0x8005 -_08052284: .4byte gCB2_AfterEvolution -_08052288: .4byte CB2_RunTradeAnim_InGameTrade -_0805228C: .4byte gUnknown_2031DA4 -_08052290: .4byte gPlayerParty -_08052294: .4byte sTradeAnimationResourcesPtr -_08052298: - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0 - movs r3, 0x10 -_080522A4: - bl BeginNormalPaletteFade -_080522A8: - ldr r0, _080522B8 @ =sTradeAnimationResourcesPtr - ldr r1, [r0] -_080522AC: - adds r1, 0x94 - ldrh r0, [r1] - adds r0, 0x1 - strh r0, [r1] - b _08052318 - .align 2, 0 -_080522B8: .4byte sTradeAnimationResourcesPtr -_080522BC: - ldr r0, _08052324 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0 - bne _08052318 - ldr r0, [r7] - adds r0, 0xF4 - ldrh r0, [r0] - bl PlayNewMapMusic - ldr r0, [r7] - cmp r0, 0 - beq _0805230A - bl FreeAllWindowBuffers - movs r0, 0x3 - bl GetBgTilemapBuffer - bl Free - movs r0, 0x1 - bl GetBgTilemapBuffer - bl Free - movs r0, 0 - bl GetBgTilemapBuffer - bl Free - bl FreeMonSpritesGfx - ldr r0, [r7] - bl Free - str r4, [r7] -_0805230A: - ldr r0, _08052328 @ =CB2_ReturnToField - bl SetMainCallback2 - bl sub_8053AE4 - bl HelpSystem_Enable -_08052318: - movs r0, 0 -_0805231A: - add sp, 0x10 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_08052324: .4byte gPaletteFade -_08052328: .4byte CB2_ReturnToField - thumb_func_end sub_8050F3C - thumb_func_start sub_805232C sub_805232C: @ 805232C push {r4-r7,lr} sub sp, 0x10 - ldr r0, _08052350 @ =sTradeAnimationResourcesPtr + ldr r0, _08052350 @ =sTradeData ldr r1, [r0] adds r1, 0x94 ldrh r5, [r1] @@ -2353,7 +25,7 @@ _08052344: ldr r0, [r0] mov pc, r0 .align 2, 0 -_08052350: .4byte sTradeAnimationResourcesPtr +_08052350: .4byte sTradeData _08052354: .4byte 0x0000010b _08052358: .4byte _0805235C .align 2, 0 @@ -2727,14 +399,14 @@ _08052838: _0805285C: .4byte gSprites _08052860: ldr r4, _0805289C @ =gStringVar4 - ldr r1, _080528A0 @ =gUnknown_841E1E9 + ldr r1, _080528A0 @ =gText_XWillBeSentToY adds r0, r4, 0 bl StringExpandPlaceholders movs r0, 0 adds r1, r4, 0 movs r2, 0 - bl sub_8054508 - ldr r4, _080528A4 @ =sTradeAnimationResourcesPtr + bl DrawTextOnTradeWindow + ldr r4, _080528A4 @ =sTradeData ldr r0, [r4] adds r2, r0, 0 adds r2, 0xF0 @@ -2755,8 +427,8 @@ _0805288E: bl _080535EA .align 2, 0 _0805289C: .4byte gStringVar4 -_080528A0: .4byte gUnknown_841E1E9 -_080528A4: .4byte sTradeAnimationResourcesPtr +_080528A0: .4byte gText_XWillBeSentToY +_080528A4: .4byte sTradeData _080528A8: ldr r1, [r7] ldr r0, [r1, 0x64] @@ -2786,7 +458,7 @@ _080528B8: str r2, [sp, 0xC] movs r2, 0x78 movs r3, 0x20 - bl sub_804BB98 + bl CreateTradePokeballSprite ldr r1, [r7] adds r1, 0xD2 strb r0, [r1] @@ -2796,19 +468,19 @@ _080528B8: adds r0, 0x1 strh r0, [r1] ldr r4, _08052914 @ =gStringVar4 - ldr r1, _08052918 @ =gUnknown_841E200 + ldr r1, _08052918 @ =gText_ByeByeVar1 adds r0, r4, 0 bl StringExpandPlaceholders movs r0, 0 adds r1, r4, 0 movs r2, 0 - bl sub_8054508 + bl DrawTextOnTradeWindow bl _08053774 .align 2, 0 _0805290C: .4byte gSprites _08052910: .4byte 0x000fffff _08052914: .4byte gStringVar4 -_08052918: .4byte gUnknown_841E200 +_08052918: .4byte gText_ByeByeVar1 _0805291C: ldr r5, _08052978 @ =gSprites ldr r0, [r7] @@ -2866,14 +538,14 @@ _08052988: movs r2, 0 movs r3, 0x10 bl BeginNormalPaletteFade - ldr r0, _080529A8 @ =sTradeAnimationResourcesPtr + ldr r0, _080529A8 @ =sTradeData ldr r0, [r0] adds r0, 0x94 movs r1, 0x14 strh r1, [r0] bl _08053774 .align 2, 0 -_080529A8: .4byte sTradeAnimationResourcesPtr +_080529A8: .4byte sTradeData _080529AC: ldr r0, _080529D8 @ =gPaletteFade ldrb r1, [r0, 0x7] @@ -2884,7 +556,7 @@ _080529AC: bl _08053774 _080529BC: movs r0, 0x4 - bl sub_8050968 + bl SetTradeSequenceBgGpuRegs movs r0, 0 movs r1, 0xFF bl FillWindowPixelBuffer @@ -2920,7 +592,7 @@ _080529FE: .align 2, 0 _08052A0C: .4byte gPaletteFade _08052A10: - ldr r4, _08052A2C @ =sTradeAnimationResourcesPtr + ldr r4, _08052A2C @ =sTradeData ldr r0, [r4] adds r2, r0, 0 adds r2, 0xEA @@ -2934,10 +606,10 @@ _08052A10: strh r0, [r2] b _08052A4A .align 2, 0 -_08052A2C: .4byte sTradeAnimationResourcesPtr +_08052A2C: .4byte sTradeData _08052A30: movs r0, 0x1 - bl sub_8050968 + bl SetTradeSequenceBgGpuRegs ldr r3, [r4] adds r1, r3, 0 adds r1, 0xEA @@ -2949,11 +621,11 @@ _08052A30: strh r0, [r1] str r2, [r3, 0x64] _08052A4A: - ldr r0, _08052A54 @ =sTradeAnimationResourcesPtr + ldr r0, _08052A54 @ =sTradeData ldr r4, [r0] bl _0805330C .align 2, 0 -_08052A54: .4byte sTradeAnimationResourcesPtr +_08052A54: .4byte sTradeData _08052A58: ldr r1, [r7] ldr r0, [r1, 0x64] @@ -2964,7 +636,7 @@ _08052A58: bl _08053774 _08052A68: movs r0, 0x3 - bl sub_8050968 + bl SetTradeSequenceBgGpuRegs ldr r0, _08052A88 @ =gUnknown_826CF48 movs r1, 0x78 movs r2, 0x50 @@ -3020,7 +692,7 @@ _08052AE0: beq _08052AF0 bl _08053774 _08052AF0: - ldr r0, _08052B04 @ =sTradeAnimationResourcesPtr + ldr r0, _08052B04 @ =sTradeData ldr r0, [r0] adds r0, 0x94 movs r1, 0x1A @@ -3028,7 +700,7 @@ _08052AF0: bl _08053774 .align 2, 0 _08052B00: .4byte c3_08054588 -_08052B04: .4byte sTradeAnimationResourcesPtr +_08052B04: .4byte sTradeData _08052B08: ldr r2, [r7] adds r0, r2, 0 @@ -3051,7 +723,7 @@ _08052B28: movs r2, 0x50 movs r3, 0x3 bl CreateSprite - ldr r4, _08052B84 @ =sTradeAnimationResourcesPtr + ldr r4, _08052B84 @ =sTradeData ldr r1, [r4] adds r1, 0x90 strb r0, [r1] @@ -3067,7 +739,7 @@ _08052B28: adds r0, r1 ldr r1, _08052B8C @ =SpriteCB_TradeGlowWireless str r1, [r0] - ldr r0, _08052B90 @ =gUnknown_826CE84 + ldr r0, _08052B90 @ =sGlowBallSpriteTemplate movs r1, 0x78 movs r2, 0x50 movs r3, 0 @@ -3088,10 +760,10 @@ _08052B28: bl _08053708 .align 2, 0 _08052B80: .4byte gUnknown_826CE44 -_08052B84: .4byte sTradeAnimationResourcesPtr +_08052B84: .4byte sTradeData _08052B88: .4byte gSprites _08052B8C: .4byte SpriteCB_TradeGlowWireless -_08052B90: .4byte gUnknown_826CE84 +_08052B90: .4byte sGlowBallSpriteTemplate _08052B94: ldr r2, [r7] adds r1, r2, 0 @@ -3165,14 +837,14 @@ _08052C18: movs r2, 0 movs r3, 0x10 bl BeginNormalPaletteFade - ldr r0, _08052C38 @ =sTradeAnimationResourcesPtr + ldr r0, _08052C38 @ =sTradeData ldr r0, [r0] adds r0, 0x94 movs r1, 0x1E strh r1, [r0] bl _08053774 .align 2, 0 -_08052C38: .4byte sTradeAnimationResourcesPtr +_08052C38: .4byte sTradeData _08052C3C: ldr r0, _08052C80 @ =gPaletteFade ldrb r1, [r0, 0x7] @@ -3200,7 +872,7 @@ _08052C4C: adds r0, r4 bl DestroySprite movs r0, 0x2 - bl sub_8050968 + bl SetTradeSequenceBgGpuRegs ldr r1, [r7] bl _08053708 .align 2, 0 @@ -3215,13 +887,13 @@ _08052C88: movs r2, 0x10 movs r3, 0 bl BeginNormalPaletteFade - ldr r5, _08052CCC @ =gUnknown_826CE84 + ldr r5, _08052CCC @ =sGlowBallSpriteTemplate adds r0, r5, 0 movs r1, 0x6F movs r2, 0xAA movs r3, 0 bl CreateSprite - ldr r4, _08052CD0 @ =sTradeAnimationResourcesPtr + ldr r4, _08052CD0 @ =sTradeData ldr r1, [r4] adds r1, 0x90 strb r0, [r1] @@ -3237,8 +909,8 @@ _08052C88: ldr r1, [r4] bl _08053708 .align 2, 0 -_08052CCC: .4byte gUnknown_826CE84 -_08052CD0: .4byte sTradeAnimationResourcesPtr +_08052CCC: .4byte sGlowBallSpriteTemplate +_08052CD0: .4byte sTradeData _08052CD4: ldr r0, _08052D24 @ =gPaletteFade ldrb r1, [r0, 0x7] @@ -3248,7 +920,7 @@ _08052CD4: bne _08052CF2 movs r0, 0x28 bl PlaySE - ldr r0, _08052D28 @ =sTradeAnimationResourcesPtr + ldr r0, _08052D28 @ =sTradeData ldr r1, [r0] adds r1, 0x94 ldrh r0, [r1] @@ -3256,7 +928,7 @@ _08052CD4: strh r0, [r1] _08052CF2: ldr r3, _08052D2C @ =gSprites - ldr r0, _08052D28 @ =sTradeAnimationResourcesPtr + ldr r0, _08052D28 @ =sTradeData ldr r2, [r0] adds r0, r2, 0 adds r0, 0x90 @@ -3280,7 +952,7 @@ _08052CF2: bl _08053774 .align 2, 0 _08052D24: .4byte gPaletteFade -_08052D28: .4byte sTradeAnimationResourcesPtr +_08052D28: .4byte sTradeData _08052D2C: .4byte gSprites _08052D30: ldr r5, _08052D94 @ =gSprites @@ -3361,7 +1033,7 @@ _08052DC4: .align 2, 0 _08052DD4: .4byte 0x0000ffff _08052DD8: - ldr r5, _08052E44 @ =sTradeAnimationResourcesPtr + ldr r5, _08052E44 @ =sTradeData ldr r0, [r5] adds r0, 0xF0 ldrh r0, [r0] @@ -3412,7 +1084,7 @@ _08052DD8: bl StartSpriteAffineAnim b _08052E66 .align 2, 0 -_08052E44: .4byte sTradeAnimationResourcesPtr +_08052E44: .4byte sTradeData _08052E48: .4byte gSprites _08052E4C: .4byte gUnknown_826CF88 _08052E50: @@ -3427,7 +1099,7 @@ _08052E50: movs r1, 0 bl StartSpriteAffineAnim _08052E66: - ldr r5, _08052EF8 @ =sTradeAnimationResourcesPtr + ldr r5, _08052EF8 @ =sTradeData ldr r0, [r5] adds r0, 0x8F ldrb r1, [r0] @@ -3497,7 +1169,7 @@ _08052E66: bl _08053708 .align 2, 0 _08052EF4: .4byte gSprites -_08052EF8: .4byte sTradeAnimationResourcesPtr +_08052EF8: .4byte sTradeData _08052EFC: .4byte 0x0000ffe0 _08052F00: ldr r4, _08052FC8 @ =gSprites @@ -3684,13 +1356,13 @@ _08053066: adds r0, 0x1 strh r0, [r1] movs r0, 0x1 - bl sub_8050968 + bl SetTradeSequenceBgGpuRegs ldr r0, [r7] adds r0, 0xE0 movs r1, 0xA6 strh r1, [r0] movs r0, 0x3 - bl sub_8050968 + bl SetTradeSequenceBgGpuRegs ldr r0, [r7] adds r0, 0xE4 movs r1, 0xCE @@ -3718,7 +1390,7 @@ _08053066: adds r0, r1 ldr r1, _080530F0 @ =SpriteCB_TradeGlowWireless str r1, [r0] - ldr r0, _080530F4 @ =gUnknown_826CE84 + ldr r0, _080530F4 @ =sGlowBallSpriteTemplate movs r1, 0x78 adds r2, r4, 0 movs r3, 0 @@ -3741,7 +1413,7 @@ _080530E4: .4byte gPaletteFade _080530E8: .4byte gUnknown_826CE44 _080530EC: .4byte gSprites _080530F0: .4byte SpriteCB_TradeGlowWireless -_080530F4: .4byte gUnknown_826CE84 +_080530F4: .4byte sGlowBallSpriteTemplate _080530F8: movs r1, 0x1 negs r1, r1 @@ -3818,7 +1490,7 @@ _08053180: lsls r1, 5 movs r0, 0 bl SetGpuReg - ldr r4, _080531DC @ =sTradeAnimationResourcesPtr + ldr r4, _080531DC @ =sTradeData ldr r2, [r4] adds r1, r2, 0 adds r1, 0xE0 @@ -3861,7 +1533,7 @@ _080531D8: strh r2, [r3] b _08053708 .align 2, 0 -_080531DC: .4byte sTradeAnimationResourcesPtr +_080531DC: .4byte sTradeData _080531E0: .4byte c3_08054588 _080531E4: .4byte gTasks _080531E8: @@ -3902,7 +1574,7 @@ _08053224: beq _08053234 b _08053774 _08053234: - ldr r0, _08053248 @ =sTradeAnimationResourcesPtr + ldr r0, _08053248 @ =sTradeData ldr r2, [r0] adds r1, r2, 0 adds r1, 0x94 @@ -3912,7 +1584,7 @@ _08053234: b _08053774 .align 2, 0 _08053244: .4byte c3_08054588 -_08053248: .4byte sTradeAnimationResourcesPtr +_08053248: .4byte sTradeData _0805324C: ldr r1, [r7] ldr r0, [r1, 0x64] @@ -3946,7 +1618,7 @@ _0805327A: movs r2, 0x50 movs r3, 0 bl CreateSprite - ldr r2, _0805329C @ =sTradeAnimationResourcesPtr + ldr r2, _0805329C @ =sTradeData ldr r1, [r2] adds r1, 0x91 strb r0, [r1] @@ -3957,7 +1629,7 @@ _0805327A: b _08053774 .align 2, 0 _08053298: .4byte gUnknown_826CF30 -_0805329C: .4byte sTradeAnimationResourcesPtr +_0805329C: .4byte sTradeData _080532A0: ldr r2, _080532DC @ =gSprites ldr r0, [r7] @@ -3978,7 +1650,7 @@ _080532BE: adds r0, r1, 0 bl DestroySprite movs r0, 0x6 - bl sub_8050968 + bl SetTradeSequenceBgGpuRegs ldr r1, [r7] adds r1, 0x94 ldrh r0, [r1] @@ -4031,14 +1703,14 @@ _08053320: movs r2, 0 movs r3, 0x10 bl BeginNormalPaletteFade - ldr r0, _0805333C @ =sTradeAnimationResourcesPtr + ldr r0, _0805333C @ =sTradeData ldr r0, [r0] adds r0, 0x94 movs r1, 0x3C strh r1, [r0] b _08053774 .align 2, 0 -_0805333C: .4byte sTradeAnimationResourcesPtr +_0805333C: .4byte sTradeData _08053340: ldr r4, _08053364 @ =gPaletteFade ldrb r1, [r4, 0x7] @@ -4049,9 +1721,9 @@ _08053340: b _08053774 _0805334E: movs r0, 0x5 - bl sub_8050968 + bl SetTradeSequenceBgGpuRegs movs r0, 0x7 - bl sub_8050968 + bl SetTradeSequenceBgGpuRegs ldrb r0, [r4, 0x8] movs r1, 0x80 orrs r0, r1 @@ -4097,7 +1769,7 @@ _080533A4: movs r1, 0x78 movs r3, 0 bl CreateSprite - ldr r5, _0805343C @ =sTradeAnimationResourcesPtr + ldr r5, _0805343C @ =sTradeData ldr r1, [r5] adds r1, 0xD3 movs r6, 0 @@ -4162,7 +1834,7 @@ _080533A4: b _08053774 .align 2, 0 _08053438: .4byte sTradePokeballSpriteTemplate -_0805343C: .4byte sTradeAnimationResourcesPtr +_0805343C: .4byte sTradeData _08053440: .4byte gSprites _08053444: .4byte SpriteCB_TradePokeball_Inbound _08053448: .4byte 0x0000ffff @@ -4319,14 +1991,14 @@ _08053584: movs r0, 0 bl SetGpuReg ldr r4, _080535B0 @ =gStringVar4 - ldr r1, _080535B4 @ =gUnknown_841E20D + ldr r1, _080535B4 @ =gText_XSentOverY adds r0, r4, 0 bl StringExpandPlaceholders movs r0, 0 adds r1, r4, 0 movs r2, 0 - bl sub_8054508 - ldr r0, _080535B8 @ =sTradeAnimationResourcesPtr + bl DrawTextOnTradeWindow + ldr r0, _080535B8 @ =sTradeData ldr r3, [r0] adds r1, r3, 0 adds r1, 0x94 @@ -4335,8 +2007,8 @@ _08053584: b _080535EA .align 2, 0 _080535B0: .4byte gStringVar4 -_080535B4: .4byte gUnknown_841E20D -_080535B8: .4byte sTradeAnimationResourcesPtr +_080535B4: .4byte gText_XSentOverY +_080535B8: .4byte sTradeData _080535BC: ldr r1, [r7] ldr r0, [r1, 0x64] @@ -4375,14 +2047,14 @@ _080535F4: bne _08053600 b _08053774 _08053600: - ldr r0, _0805360C @ =sTradeAnimationResourcesPtr + ldr r0, _0805360C @ =sTradeData ldr r0, [r0] adds r0, 0x94 movs r1, 0x44 strh r1, [r0] b _08053774 .align 2, 0 -_0805360C: .4byte sTradeAnimationResourcesPtr +_0805360C: .4byte sTradeData _08053610: ldr r1, [r7] ldr r0, [r1, 0x64] @@ -4405,20 +2077,20 @@ _0805362C: movs r5, 0 strh r0, [r1] ldr r4, _08053654 @ =gStringVar4 - ldr r1, _08053658 @ =gUnknown_841E21E + ldr r1, _08053658 @ =gText_TakeGoodCareOfX adds r0, r4, 0 bl StringExpandPlaceholders movs r0, 0 adds r1, r4, 0 movs r2, 0 - bl sub_8054508 + bl DrawTextOnTradeWindow ldr r0, [r7] str r5, [r0, 0x64] b _08053774 .align 2, 0 _08053650: .4byte 0x00000103 _08053654: .4byte gStringVar4 -_08053658: .4byte gUnknown_841E21E +_08053658: .4byte gText_TakeGoodCareOfX _0805365C: ldr r1, [r7] ldr r0, [r1, 0x64] @@ -4430,7 +2102,7 @@ _0805365C: _0805366A: b _08053708 _0805366C: - bl sub_80544AC + bl CheckPartnersMonForRibbons b _08053704 _08053672: ldr r2, [r7] @@ -4456,11 +2128,11 @@ _08053698: ldr r0, _080536DC @ =gSpecialVar_0x8005 ldrb r0, [r0] movs r1, 0 - bl Trade_SwapPlayerAndParterMonData + bl TradeMons ldr r1, _080536E0 @ =gCB2_AfterEvolution ldr r0, _080536E4 @ =CB2_RunTradeAnim_InGameTrade str r0, [r1] - ldr r7, _080536E8 @ =gUnknown_2031DA4 + ldr r7, _080536E8 @ =gSelectedTradeMonPositions ldrb r0, [r7] movs r6, 0x64 muls r0, r6 @@ -4477,7 +2149,7 @@ _08053698: adds r0, r3, 0 muls r0, r6 adds r0, r5 - ldr r1, _080536F0 @ =sTradeAnimationResourcesPtr + ldr r1, _080536F0 @ =sTradeData ldr r1, [r1] adds r1, 0x8F ldrb r2, [r1] @@ -4488,9 +2160,9 @@ _08053698: _080536DC: .4byte gSpecialVar_0x8005 _080536E0: .4byte gCB2_AfterEvolution _080536E4: .4byte CB2_RunTradeAnim_InGameTrade -_080536E8: .4byte gUnknown_2031DA4 +_080536E8: .4byte gSelectedTradeMonPositions _080536EC: .4byte gPlayerParty -_080536F0: .4byte sTradeAnimationResourcesPtr +_080536F0: .4byte sTradeData _080536F4: movs r0, 0x1 negs r0, r0 @@ -4501,7 +2173,7 @@ _080536F4: _08053700: bl BeginNormalPaletteFade _08053704: - ldr r0, _08053714 @ =sTradeAnimationResourcesPtr + ldr r0, _08053714 @ =sTradeData ldr r1, [r0] _08053708: adds r1, 0x94 @@ -4510,7 +2182,7 @@ _08053708: strh r0, [r1] b _08053774 .align 2, 0 -_08053714: .4byte sTradeAnimationResourcesPtr +_08053714: .4byte sTradeData _08053718: ldr r0, _08053780 @ =gPaletteFade ldrb r1, [r0, 0x7] @@ -4544,7 +2216,7 @@ _08053718: _08053766: ldr r0, _08053784 @ =CB2_ReturnToField bl SetMainCallback2 - bl sub_8053AE4 + bl BufferInGameTradeMonName bl HelpSystem_Enable _08053774: movs r0, 0 @@ -4588,7 +2260,7 @@ _080537B8: ldr r1, _080537F8 @ =sub_8053E8C mov r8, r1 str r1, [r0] - ldr r7, _080537FC @ =gUnknown_2031DA4 + ldr r7, _080537FC @ =gSelectedTradeMonPositions ldrb r0, [r7] movs r6, 0x64 muls r0, r6 @@ -4605,7 +2277,7 @@ _080537B8: adds r0, r3, 0 muls r0, r6 adds r0, r5 - ldr r1, _08053804 @ =sTradeAnimationResourcesPtr + ldr r1, _08053804 @ =sTradeData ldr r1, [r1] adds r1, 0x8F ldrb r2, [r1] @@ -4615,14 +2287,14 @@ _080537B8: .align 2, 0 _080537F4: .4byte gCB2_AfterEvolution _080537F8: .4byte sub_8053E8C -_080537FC: .4byte gUnknown_2031DA4 +_080537FC: .4byte gSelectedTradeMonPositions _08053800: .4byte gPlayerParty -_08053804: .4byte sTradeAnimationResourcesPtr +_08053804: .4byte sTradeData _08053808: mov r0, r8 bl SetMainCallback2 _0805380E: - ldr r1, _08053838 @ =gUnknown_2031DA4 + ldr r1, _08053838 @ =gSelectedTradeMonPositions movs r0, 0xFF _08053812: strb r0, [r1] @@ -4642,7 +2314,7 @@ _08053822: pop {r0} bx r0 .align 2, 0 -_08053838: .4byte gUnknown_2031DA4 +_08053838: .4byte gSelectedTradeMonPositions thumb_func_end sub_8053788 thumb_func_start sub_805383C @@ -4669,7 +2341,7 @@ _08053864: ldr r0, _080538B4 @ =0x0000abcd cmp r1, r0 bne _08053874 - ldr r0, _080538B8 @ =sTradeAnimationResourcesPtr + ldr r0, _080538B8 @ =sTradeData ldr r0, [r0] adds r0, 0x72 strb r6, [r0] @@ -4689,7 +2361,7 @@ _0805387A: ldr r0, _080538B4 @ =0x0000abcd cmp r1, r0 bne _0805389C - ldr r0, _080538B8 @ =sTradeAnimationResourcesPtr + ldr r0, _080538B8 @ =sTradeData ldr r0, [r0] adds r0, 0x73 movs r1, 0x1 @@ -4706,7 +2378,7 @@ _080538A8: .4byte gBlockRecvBuffer _080538AC: .4byte 0x0000dcba _080538B0: .4byte sub_8053788 _080538B4: .4byte 0x0000abcd -_080538B8: .4byte sTradeAnimationResourcesPtr +_080538B8: .4byte sTradeData thumb_func_end sub_805383C thumb_func_start SpriteCB_TradePokeball_Default @@ -4870,7 +2542,7 @@ _080539C0: bne _080539FE adds r0, r4, 0 bl DestroySprite - ldr r0, _08053A08 @ =sTradeAnimationResourcesPtr + ldr r0, _08053A08 @ =sTradeData ldr r0, [r0] adds r0, 0x94 movs r1, 0xE @@ -4881,7 +2553,7 @@ _080539FE: bx r0 .align 2, 0 _08053A04: .4byte gUnknown_826D1E4 -_08053A08: .4byte sTradeAnimationResourcesPtr +_08053A08: .4byte sTradeData thumb_func_end SpriteCB_TradePokeball_Outbound2 thumb_func_start SpriteCB_TradePokeball_Inbound @@ -4993,8 +2665,8 @@ _08053ADC: .4byte gSpeciesNames _08053AE0: .4byte gStringVar2 thumb_func_end GetInGameTradeSpeciesInfo - thumb_func_start sub_8053AE4 -sub_8053AE4: @ 8053AE4 + thumb_func_start BufferInGameTradeMonName +BufferInGameTradeMonName: @ 8053AE4 push {r4,lr} sub sp, 0x20 ldr r0, _08053B2C @ =gSpecialVar_0x8004 @@ -5035,7 +2707,7 @@ _08053B38: .4byte gPlayerParty _08053B3C: .4byte gStringVar1 _08053B40: .4byte gStringVar2 _08053B44: .4byte gSpeciesNames - thumb_func_end sub_8053AE4 + thumb_func_end BufferInGameTradeMonName thumb_func_start sub_8053B48 sub_8053B48: @ 8053B48 @@ -5313,7 +2985,7 @@ CB2_RunTradeAnim_LinkTrade: @ 8053D84 lsrs r6, r0, 24 cmp r6, 0x1 bne _08053DE6 - ldr r5, _08053E08 @ =sTradeAnimationResourcesPtr + ldr r5, _08053E08 @ =sTradeData ldr r0, [r5] adds r0, 0x8E ldrb r1, [r0] @@ -5331,7 +3003,7 @@ CB2_RunTradeAnim_LinkTrade: @ 8053D84 lsls r0, 2 adds r0, r4 bl FreeSpriteOamMatrix - ldr r0, _08053E10 @ =gUnknown_2031DA4 + ldr r0, _08053E10 @ =gSelectedTradeMonPositions ldrb r4, [r0] ldrb r0, [r0, 0x1] movs r1, 0x6 @@ -5340,7 +3012,7 @@ CB2_RunTradeAnim_LinkTrade: @ 8053D84 lsls r1, 24 lsrs r1, 24 adds r0, r4, 0 - bl Trade_SwapPlayerAndParterMonData + bl TradeMons ldr r0, [r5] adds r2, r0, 0 adds r2, 0x74 @@ -5362,9 +3034,9 @@ _08053DE6: pop {r0} bx r0 .align 2, 0 -_08053E08: .4byte sTradeAnimationResourcesPtr +_08053E08: .4byte sTradeData _08053E0C: .4byte gSprites -_08053E10: .4byte gUnknown_2031DA4 +_08053E10: .4byte gSelectedTradeMonPositions _08053E14: .4byte 0x0000abcd _08053E18: .4byte sub_8053E1C thumb_func_end CB2_RunTradeAnim_LinkTrade @@ -5379,7 +3051,7 @@ sub_8053E1C: @ 8053E1C bl sub_805383C cmp r4, 0 bne _08053E68 - ldr r4, _08053E80 @ =sTradeAnimationResourcesPtr + ldr r4, _08053E80 @ =sTradeData ldr r2, [r4] adds r0, r2, 0 adds r0, 0x72 @@ -5414,7 +3086,7 @@ _08053E68: pop {r0} bx r0 .align 2, 0 -_08053E80: .4byte sTradeAnimationResourcesPtr +_08053E80: .4byte sTradeData _08053E84: .4byte 0x00000101 _08053E88: .4byte 0x0000dcba thumb_func_end sub_8053E1C @@ -5570,7 +3242,7 @@ _08054068: .align 2, 0 _0805407C: .4byte gMain _08054080: - ldr r0, _080540B4 @ =sTradeAnimationResourcesPtr + ldr r0, _080540B4 @ =sTradeData ldr r3, [r0] ldr r0, [r3, 0x64] adds r0, 0x1 @@ -5597,7 +3269,7 @@ _080540A8: adds r0, r2 b _080540D0 .align 2, 0 -_080540B4: .4byte sTradeAnimationResourcesPtr +_080540B4: .4byte sTradeData _080540B8: .4byte gMain _080540BC: bl IsLinkTaskFinished @@ -5630,7 +3302,7 @@ _080540EA: movs r0, 0 adds r1, r4, 0 movs r2, 0 - bl sub_8054508 + bl DrawTextOnTradeWindow b _08054396 .align 2, 0 _080540FC: .4byte gStringVar4 @@ -5639,16 +3311,16 @@ _08054104: bl InUnionRoom cmp r0, 0 beq _08054120 - ldr r0, _0805411C @ =sTradeAnimationResourcesPtr + ldr r0, _0805411C @ =sTradeData ldr r1, [r0] adds r1, 0xF8 movs r0, 0x12 bl sub_8113550 b _08054132 .align 2, 0 -_0805411C: .4byte sTradeAnimationResourcesPtr +_0805411C: .4byte sTradeData _08054120: - ldr r0, _08054174 @ =sTradeAnimationResourcesPtr + ldr r0, _08054174 @ =sTradeData ldr r1, [r0] adds r1, 0xF8 movs r0, 0xC @@ -5687,12 +3359,12 @@ _0805415A: strb r0, [r1] b _080541F2 .align 2, 0 -_08054174: .4byte sTradeAnimationResourcesPtr +_08054174: .4byte sTradeData _08054178: .4byte gWirelessCommType _0805417C: .4byte gLinkPlayers _08054180: .4byte gMain _08054184: - ldr r0, _0805419C @ =sTradeAnimationResourcesPtr + ldr r0, _0805419C @ =sTradeData ldr r1, [r0] ldr r0, [r1, 0x64] adds r0, 0x1 @@ -5706,7 +3378,7 @@ _08054194: adds r1, r2, r0 b _08054340 .align 2, 0 -_0805419C: .4byte sTradeAnimationResourcesPtr +_0805419C: .4byte sTradeData _080541A0: bl sub_80DA3D8 lsls r0, 24 @@ -5724,7 +3396,7 @@ _080541A0: .align 2, 0 _080541C0: .4byte gMain _080541C4: - ldr r0, _080541D8 @ =sTradeAnimationResourcesPtr + ldr r0, _080541D8 @ =sTradeData ldr r0, [r0] str r1, [r0, 0x64] ldr r0, _080541DC @ =gMain @@ -5735,7 +3407,7 @@ _080541C4: strb r1, [r0] b _08054396 .align 2, 0 -_080541D8: .4byte sTradeAnimationResourcesPtr +_080541D8: .4byte sTradeData _080541DC: .4byte gMain _080541E0: bl sub_80DA40C @@ -5748,15 +3420,15 @@ _080541E0: _080541F0: strb r1, [r0] _080541F2: - ldr r0, _08054200 @ =sTradeAnimationResourcesPtr + ldr r0, _08054200 @ =sTradeData ldr r0, [r0] str r2, [r0, 0x64] b _08054396 .align 2, 0 _080541FC: .4byte gMain -_08054200: .4byte sTradeAnimationResourcesPtr +_08054200: .4byte sTradeData _08054204: - ldr r4, _08054238 @ =sTradeAnimationResourcesPtr + ldr r4, _08054238 @ =sTradeData ldr r1, [r4] ldr r0, [r1, 0x64] adds r0, 0x1 @@ -5780,7 +3452,7 @@ _08054214: str r0, [r4, 0x64] b _08054242 .align 2, 0 -_08054238: .4byte sTradeAnimationResourcesPtr +_08054238: .4byte sTradeData _0805423C: ldr r1, [r4] movs r0, 0 @@ -5796,7 +3468,7 @@ _08054242: .align 2, 0 _08054250: .4byte gMain _08054254: - ldr r0, _08054270 @ =sTradeAnimationResourcesPtr + ldr r0, _08054270 @ =sTradeData ldr r1, [r0] ldr r0, [r1, 0x64] cmp r0, 0 @@ -5810,7 +3482,7 @@ _08054254: strb r1, [r0] b _08054396 .align 2, 0 -_08054270: .4byte sTradeAnimationResourcesPtr +_08054270: .4byte sTradeData _08054274: .4byte gMain _08054278: subs r0, 0x1 @@ -5834,7 +3506,7 @@ _0805428A: .align 2, 0 _0805429C: .4byte gMain _080542A0: - ldr r0, _080542C0 @ =sTradeAnimationResourcesPtr + ldr r0, _080542C0 @ =sTradeData ldr r1, [r0] ldr r0, [r1, 0x64] adds r0, 0x1 @@ -5850,7 +3522,7 @@ _080542A0: bl sub_800AB9C b _08054396 .align 2, 0 -_080542C0: .4byte sTradeAnimationResourcesPtr +_080542C0: .4byte sTradeData _080542C4: bl IsLinkTaskFinished lsls r0, 24 @@ -5991,7 +3663,7 @@ sub_80543C4: @ 80543C4 bl GetBgTilemapBuffer bl Free bl FreeMonSpritesGfx - ldr r4, _08054434 @ =sTradeAnimationResourcesPtr + ldr r4, _08054434 @ =sTradeData ldr r0, [r4] bl Free str r5, [r4] @@ -6014,7 +3686,7 @@ _0805441A: bx r0 .align 2, 0 _08054430: .4byte gPaletteFade -_08054434: .4byte sTradeAnimationResourcesPtr +_08054434: .4byte sTradeData _08054438: .4byte gWirelessCommType _0805443C: .4byte gMain thumb_func_end sub_80543C4 @@ -6071,13 +3743,13 @@ _080544A4: .4byte gFieldCallback _080544A8: .4byte FieldCallback_ReturnToEventScript2 thumb_func_end sub_8054470 - thumb_func_start sub_80544AC -sub_80544AC: @ 80544AC + thumb_func_start CheckPartnersMonForRibbons +CheckPartnersMonForRibbons: @ 80544AC push {r4,r5,lr} movs r5, 0 movs r4, 0 _080544B2: - ldr r0, _080544F0 @ =gUnknown_2031DA4 + ldr r0, _080544F0 @ =gSelectedTradeMonPositions ldrb r0, [r0, 0x1] movs r1, 0x6 bl __umodsi3 @@ -6107,10 +3779,10 @@ _080544EA: pop {r0} bx r0 .align 2, 0 -_080544F0: .4byte gUnknown_2031DA4 +_080544F0: .4byte gSelectedTradeMonPositions _080544F4: .4byte gEnemyParty _080544F8: .4byte 0x0000083b - thumb_func_end sub_80544AC + thumb_func_end CheckPartnersMonForRibbons thumb_func_start sub_80544FC sub_80544FC: @ 80544FC @@ -6120,8 +3792,8 @@ sub_80544FC: @ 80544FC bx r0 thumb_func_end sub_80544FC - thumb_func_start sub_8054508 -sub_8054508: @ 8054508 + thumb_func_start DrawTextOnTradeWindow +DrawTextOnTradeWindow: @ 8054508 push {r4-r7,lr} mov r7, r8 push {r7} @@ -6136,7 +3808,7 @@ sub_8054508: @ 8054508 adds r0, r5, 0 movs r1, 0xFF bl FillWindowPixelBuffer - ldr r2, _08054580 @ =sTradeAnimationResourcesPtr + ldr r2, _08054580 @ =sTradeData ldr r1, [r2] movs r6, 0x82 lsls r6, 1 @@ -6180,9 +3852,9 @@ sub_8054508: @ 8054508 pop {r0} bx r0 .align 2, 0 -_08054580: .4byte sTradeAnimationResourcesPtr +_08054580: .4byte sTradeData _08054584: .4byte 0x00000105 - thumb_func_end sub_8054508 + thumb_func_end DrawTextOnTradeWindow thumb_func_start c3_08054588 c3_08054588: @ 8054588 @@ -6311,7 +3983,7 @@ c3_0805465C: @ 805465C ldrsh r4, [r7, r0] cmp r4, 0 bne _080546BC - ldr r1, _0805472C @ =sTradeAnimationResourcesPtr + ldr r1, _0805472C @ =sTradeData ldr r3, [r1] ldr r5, _08054730 @ =0x0000010b adds r2, r3, r5 @@ -6342,7 +4014,7 @@ c3_0805465C: @ 805465C movs r1, 0x13 bl SetGpuReg _080546BC: - ldr r4, _0805472C @ =sTradeAnimationResourcesPtr + ldr r4, _0805472C @ =sTradeData ldr r2, [r4] ldr r5, _08054730 @ =0x0000010b mov r8, r5 @@ -6396,7 +4068,7 @@ _0805471E: bx r0 .align 2, 0 _08054728: .4byte gTasks+0x8 -_0805472C: .4byte sTradeAnimationResourcesPtr +_0805472C: .4byte sTradeData _08054730: .4byte 0x0000010b thumb_func_end c3_0805465C @@ -6415,7 +4087,7 @@ sub_8054734: @ 8054734 ldrsh r0, [r6, r1] cmp r0, 0 bne _08054774 - ldr r1, _080547EC @ =sTradeAnimationResourcesPtr + ldr r1, _080547EC @ =sTradeData ldr r0, [r1] ldr r3, _080547F0 @ =0x00000109 adds r2, r0, r3 @@ -6433,7 +4105,7 @@ sub_8054734: @ 8054734 movs r1, 0x13 bl SetGpuReg _08054774: - ldr r5, _080547EC @ =sTradeAnimationResourcesPtr + ldr r5, _080547EC @ =sTradeData ldr r0, [r5] ldr r3, _080547F4 @ =0x0000010b adds r1, r0, r3 @@ -6489,7 +4161,7 @@ _08054774: b _0805480C .align 2, 0 _080547E8: .4byte gTasks+0x8 -_080547EC: .4byte sTradeAnimationResourcesPtr +_080547EC: .4byte sTradeData _080547F0: .4byte 0x00000109 _080547F4: .4byte 0x0000010b _080547F8: .4byte 0x0000ffff diff --git a/data/strings.s b/data/strings.s index bd5c308a5..5ebdc7afa 100644 --- a/data/strings.s +++ b/data/strings.s @@ -4407,17 +4407,17 @@ gUnknown_841E1C5:: .string "Your friend wants\n" .string "to trade POKéMON.$" -gUnknown_841E1E9:: @ 841E1E9 +gText_XWillBeSentToY:: @ 841E1E9 .string "{STR_VAR_2} will be\n" .string "sent to {STR_VAR_1}.$" -gUnknown_841E200:: @ 841E200 +gText_ByeByeVar1:: @ 841E200 .string "Bye-bye, {STR_VAR_2}!$" -gUnknown_841E20D:: @ 841E20D +gText_XSentOverY:: @ 841E20D .string "{STR_VAR_1} sent over {STR_VAR_3}.$" -gUnknown_841E21E:: @ 841E21E +gText_TakeGoodCareOfX:: @ 841E21E .string "Take good care of {STR_VAR_3}!$" gText_From:: @ 841E234 diff --git a/data/trade.s b/data/trade.s index 0102b1faf..e9ff8b289 100644 --- a/data/trade.s +++ b/data/trade.s @@ -750,7 +750,7 @@ gSpriteAnimTable_826CE74:: gUnknown_826CE7C:: @ 826CE7C obj_tiles gUnknown_8264C1C, 0x0300, 5552 -gUnknown_826CE84:: @ 826CE84 +sGlowBallSpriteTemplate:: @ 826CE84 spr_template 5552, 5551, gOamData_826CE5C, gSpriteAnimTable_826CE74, NULL, gDummySpriteAffineAnimTable, SpriteCB_TradeGlowCore gOamData_826CE9C:: diff --git a/include/gba/defines.h b/include/gba/defines.h index 65561f10a..8c92d7b64 100644 --- a/include/gba/defines.h +++ b/include/gba/defines.h @@ -76,6 +76,7 @@ #define RGB_BLACK RGB(0, 0, 0) #define RGB_WHITE RGB(31, 31, 31) +#define RGB_WHITEALPHA (0xFFFF) #define NAKED __attribute__((naked)) #define UNUSED __attribute__((unused)) diff --git a/include/pokeball.h b/include/pokeball.h index ee0478eab..884ded22e 100644 --- a/include/pokeball.h +++ b/include/pokeball.h @@ -25,7 +25,7 @@ enum u8 DoPokeballSendOutAnimation(s16 pan, u8 kindOfThrow); void CreatePokeballSpriteToReleaseMon(u8 monSpriteId, u8 bank, u8 x, u8 y, u8 oamPriority, u8 subpriortiy, u8 g, u32 h); -u8 sub_804BB98(u8 monSpriteId, u8 bank, u8 x, u8 y, u8 oamPriority, u8 subpriortiy, u8 g, u32 h); +u8 CreateTradePokeballSprite(u8 monSpriteId, u8 bank, u8 x, u8 y, u8 oamPriority, u8 subpriortiy, u8 g, u32 h); u8 sub_807671C(u8 a, u8 b, u8 x, u8 y, u8 oamPriority, u8 subPriority, u8 g, u32 h); void sub_8076918(u8 bank); void DoHitAnimHealthboxEffect(u8 bank); diff --git a/include/strings.h b/include/strings.h index 43043b537..2c1e93b38 100644 --- a/include/strings.h +++ b/include/strings.h @@ -662,5 +662,9 @@ extern const u8 gText_SevenIsland[]; // trade extern const u8 gUnknown_841E0A5[]; +extern const u8 gText_XWillBeSentToY[]; +extern const u8 gText_ByeByeVar1[]; +extern const u8 gText_XSentOverY[]; +extern const u8 gText_TakeGoodCareOfX[]; #endif //GUARD_STRINGS_H diff --git a/src/oak_speech.c b/src/oak_speech.c index c39ff262e..3f946e13f 100644 --- a/src/oak_speech.c +++ b/src/oak_speech.c @@ -977,7 +977,7 @@ static void Task_OakSpeech15(u8 taskId) { ClearDialogWindowAndFrame(0, 1); spriteId = gTasks[taskId].data[4]; - gTasks[taskId].data[6] = sub_804BB98(spriteId, gSprites[spriteId].oam.paletteNum, 0x64, 0x42, 0, 0, 32, 0xFFFF1F3F); + gTasks[taskId].data[6] = CreateTradePokeballSprite(spriteId, gSprites[spriteId].oam.paletteNum, 0x64, 0x42, 0, 0, 32, 0xFFFF1F3F); gTasks[taskId].data[3] = 48; gTasks[taskId].data[0] = 64; gTasks[taskId].func = Task_OakSpeech16; diff --git a/src/trade.c b/src/trade.c index 19f6e47f6..a21781753 100644 --- a/src/trade.c +++ b/src/trade.c @@ -9,11 +9,13 @@ #include "window.h" #include "librfu.h" #include "text_window.h" +#include "evolution_scene.h" #include "pokemon_icon.h" #include "pokedex.h" #include "mail_data.h" #include "graphics.h" #include "link.h" +#include "help_system.h" #include "link_rfu.h" #include "cable_club.h" #include "data.h" @@ -23,6 +25,7 @@ #include "menu.h" #include "overworld.h" #include "battle_anim.h" +#include "pokeball.h" #include "party_menu.h" #include "util.h" #include "daycare.h" @@ -37,6 +40,22 @@ #include "constants/songs.h" #include "constants/moves.h" +struct InGameTrade { + /*0x00*/ u8 nickname[POKEMON_NAME_LENGTH + 1]; + /*0x0C*/ u16 species; + /*0x0E*/ u8 ivs[NUM_STATS]; + /*0x14*/ u8 abilityNum; + /*0x18*/ u32 otId; + /*0x1C*/ u8 conditions[5]; + /*0x24*/ u32 personality; + /*0x28*/ u16 heldItem; + /*0x2A*/ u8 mailNum; + /*0x2B*/ u8 otName[11]; + /*0x36*/ u8 otGender; + /*0x37*/ u8 sheen; + /*0x38*/ u16 requestedSpecies; +}; + struct TradeMenuResources { /*0x0000*/ u8 unk_0; @@ -80,7 +99,7 @@ struct TradeMenuResources struct TradeAnimationResources { /*0x00*/ struct Pokemon mon; /*0x64*/ u32 timer; - /*0x68*/ u32 unk_68[2]; + /*0x68*/ u32 monPersonalities[2]; /*0x70*/ u8 filler_70[2]; /*0x72*/ u8 unk_72; /*0x73*/ u8 unk_73; @@ -96,7 +115,7 @@ struct TradeAnimationResources { /*0x93*/ u8 unk_93; /*0x94*/ u16 state; /*0x96*/ u8 filler_96[0xD2 - 0x96]; - /*0xD2*/ u8 unk_D2; + /*0xD2*/ u8 pokeballSpriteId; /*0xD3*/ u8 unk_D3; /*0xD4*/ u16 unk_D4; /*0xD6*/ u16 unk_D6; @@ -108,18 +127,17 @@ struct TradeAnimationResources { /*0xE2*/ s16 bg1hofs; /*0xE4*/ s16 bg2vofs; /*0xE6*/ s16 bg2hofs; - /*0xE8*/ u16 unk_E8; + /*0xE8*/ u16 sXY; /*0xEA*/ u16 unk_EA; /*0xEC*/ u16 unk_EC; /*0xEE*/ bool8 isLinkTrade; /*0xF0*/ u16 tradeSpecies[2]; /*0xF4*/ u16 cachedMapMusic; /*0xF6*/ u8 unk_F6; - /*0xF8*/ u16 unk_F8; - /*0xFA*/ u16 unk_FA; + /*0xF8*/ u16 monSpecies[2]; /*0xFC*/ u8 unk_FC[7]; /*0x103*/ u8 filler_103[5]; - /*0x108*/ u8 unk_108; + /*0x108*/ u8 isCableTrade; /*0x109*/ u8 filler_109[7]; }; @@ -141,9 +159,9 @@ IWRAM_DATA vu16 gUnknown_3000E78; EWRAM_DATA u8 *gUnknown_2031C90 = NULL; EWRAM_DATA u8 *gUnknown_2031C94[14] = {}; EWRAM_DATA struct MailStruct gLinkPartnerMail[6] = {}; -EWRAM_DATA u8 gUnknown_2031DA4[2] = {0}; +EWRAM_DATA u8 gSelectedTradeMonPositions[2] = {0}; EWRAM_DATA struct TradeMenuResources * sTradeMenuResourcesPtr = NULL; -EWRAM_DATA struct TradeAnimationResources * sTradeAnimationResourcesPtr = NULL; +EWRAM_DATA struct TradeAnimationResources * sTradeData = NULL; void sub_804C728(void); void sub_804D4F8(void); @@ -177,12 +195,19 @@ void sub_805049C(void); void sub_80504B0(void); void TradeAnimInit_LoadGfx(void); void CB2_RunTradeAnim_InGameTrade(void); -void sub_8050968(u8 idx); +void SetTradeSequenceBgGpuRegs(u8 idx); void sub_8050DE0(void); void sub_8050E24(void); -void sub_8050F14(void); +u8 sub_8050F14(void); +u8 sub_8050F3C(void); +u8 sub_805232C(void); void CB2_RunTradeAnim_LinkTrade(void); void LoadHeldItemIcons(void); +void DrawTextOnTradeWindow(u8 windowId, const u8 *str, s8 speed); +void CheckPartnersMonForRibbons(void); +void BufferInGameTradeMonName(void); +void SpriteCB_TradePokeball_Outbound(struct Sprite * sprite); +void SpriteCB_TradePokeball_Inbound(struct Sprite * sprite); extern const u16 gUnknown_8260C30[]; extern const u16 gUnknown_8261430[]; @@ -224,6 +249,19 @@ extern const u16 gUnknown_826985C[]; extern const u16 gUnknown_826995C[]; extern const u32 gWirelessSignal4bpp[]; extern const u32 gUnknown_826C60C[]; +extern const struct SpriteSheet gUnknown_826CE2C; +extern const struct SpriteSheet gUnknown_826CE7C; +extern const struct SpriteSheet gUnknown_826CEB0; +extern const struct SpriteSheet gUnknown_826CF28; +extern const struct SpritePalette gUnknown_826CE34; +extern const struct SpritePalette gUnknown_826CE3C; +extern const struct InGameTrade gIngameTrades[]; +extern const struct SpriteTemplate sTradePokeballSpriteTemplate; +extern const struct SpriteTemplate gUnknown_826CF30; +extern const struct SpriteTemplate sGameLinkCableEndSpriteTemplate; +extern const struct SpriteTemplate gUnknown_826CE44; +extern const struct SpriteTemplate sGlowBallSpriteTemplate; +extern const union AffineAnimCmd *const gUnknown_826CF88[]; void sub_804C600(void) { @@ -2353,8 +2391,8 @@ void sub_804D548(void) { if (!gPaletteFade.active) { - gUnknown_2031DA4[0] = sTradeMenuResourcesPtr->tradeMenuCursorPosition; - gUnknown_2031DA4[1] = sTradeMenuResourcesPtr->unk_7E; + gSelectedTradeMonPositions[0] = sTradeMenuResourcesPtr->tradeMenuCursorPosition; + gSelectedTradeMonPositions[1] = sTradeMenuResourcesPtr->unk_7E; if (gWirelessCommType != 0) { sTradeMenuResourcesPtr->unk_6F = 16; @@ -4108,10 +4146,10 @@ void sub_804FE00(struct Sprite * sprite) } } -void TradeAnim_UpdateBgAffine(void) +void SetTradeBGAffine(void) { struct BgAffineDstData affine; - DoBgAffineSet(&affine, sTradeAnimationResourcesPtr->unk_D4 * 0x100, sTradeAnimationResourcesPtr->unk_D6 * 0x100, sTradeAnimationResourcesPtr->unk_DC, sTradeAnimationResourcesPtr->unk_DE, sTradeAnimationResourcesPtr->unk_E8, sTradeAnimationResourcesPtr->unk_E8, sTradeAnimationResourcesPtr->unk_EC); + DoBgAffineSet(&affine, sTradeData->unk_D4 * 0x100, sTradeData->unk_D6 * 0x100, sTradeData->unk_DC, sTradeData->unk_DE, sTradeData->sXY, sTradeData->sXY, sTradeData->unk_EC); SetGpuReg(REG_OFFSET_BG2PA, affine.pa); SetGpuReg(REG_OFFSET_BG2PB, affine.pb); SetGpuReg(REG_OFFSET_BG2PC, affine.pc); @@ -4124,18 +4162,18 @@ static void TradeAnim_UpdateBgRegs(void) { u16 dispcnt; - SetGpuReg(REG_OFFSET_BG1VOFS, sTradeAnimationResourcesPtr->bg1vofs); - SetGpuReg(REG_OFFSET_BG1HOFS, sTradeAnimationResourcesPtr->bg1hofs); + SetGpuReg(REG_OFFSET_BG1VOFS, sTradeData->bg1vofs); + SetGpuReg(REG_OFFSET_BG1HOFS, sTradeData->bg1hofs); dispcnt = GetGpuReg(REG_OFFSET_DISPCNT); if ((dispcnt & 7) == DISPCNT_MODE_0) { - SetGpuReg(REG_OFFSET_BG2VOFS, sTradeAnimationResourcesPtr->bg2vofs); - SetGpuReg(REG_OFFSET_BG2HOFS, sTradeAnimationResourcesPtr->bg2hofs); + SetGpuReg(REG_OFFSET_BG2VOFS, sTradeData->bg2vofs); + SetGpuReg(REG_OFFSET_BG2HOFS, sTradeData->bg2hofs); } else { - TradeAnim_UpdateBgAffine(); + SetTradeBGAffine(); } } @@ -4149,28 +4187,28 @@ static void VBlankCB_TradeAnim(void) void sub_804FF24(void) { - sTradeAnimationResourcesPtr->unk_8A = 0; - sTradeAnimationResourcesPtr->unk_88 = 0; - sTradeAnimationResourcesPtr->unk_89 = 0; + sTradeData->unk_8A = 0; + sTradeData->unk_88 = 0; + sTradeData->unk_89 = 0; } void sub_804FF4C(void) { - if (sTradeAnimationResourcesPtr->unk_88 == sTradeAnimationResourcesPtr->unk_89) - sTradeAnimationResourcesPtr->unk_8A++; + if (sTradeData->unk_88 == sTradeData->unk_89) + sTradeData->unk_8A++; else - sTradeAnimationResourcesPtr->unk_8A = 0; + sTradeData->unk_8A = 0; - if (sTradeAnimationResourcesPtr->unk_8A > 300) + if (sTradeData->unk_8A > 300) { CloseLink(); SetMainCallback2(CB2_LinkError); - sTradeAnimationResourcesPtr->unk_8A = 0; - sTradeAnimationResourcesPtr->unk_89 = 0; - sTradeAnimationResourcesPtr->unk_88 = 0; + sTradeData->unk_8A = 0; + sTradeData->unk_89 = 0; + sTradeData->unk_88 = 0; } - sTradeAnimationResourcesPtr->unk_89 = sTradeAnimationResourcesPtr->unk_88; + sTradeData->unk_89 = sTradeData->unk_88; } u32 sub_804FFC4(void) @@ -4189,13 +4227,13 @@ void sub_804FFE4(u8 whichParty, u8 a1) if (whichParty == 0) { - mon = &gPlayerParty[gUnknown_2031DA4[0]]; + mon = &gPlayerParty[gSelectedTradeMonPositions[0]]; pos = 1; } if (whichParty == 1) { - mon = &gEnemyParty[gUnknown_2031DA4[1] % PARTY_SIZE]; + mon = &gEnemyParty[gSelectedTradeMonPositions[1] % PARTY_SIZE]; pos = 3; } @@ -4211,14 +4249,14 @@ void sub_804FFE4(u8 whichParty, u8 a1) HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonFrontPicTable[species], gMonSpritesGfxPtr->sprites[whichParty * 2 + 1], species, personality); LoadCompressedSpritePalette(GetMonSpritePalStruct(mon)); - sTradeAnimationResourcesPtr->tradeSpecies[whichParty] = species; - sTradeAnimationResourcesPtr->unk_68[whichParty] = personality; + sTradeData->tradeSpecies[whichParty] = species; + sTradeData->monPersonalities[whichParty] = personality; break; case 1: SetMultiuseSpriteTemplateToPokemon(GetMonSpritePalStruct(mon)->tag, pos); - sTradeAnimationResourcesPtr->pokePicSpriteIdxs[whichParty] = CreateSprite(&gMultiuseSpriteTemplate, 120, 60, 6); - gSprites[sTradeAnimationResourcesPtr->pokePicSpriteIdxs[whichParty]].invisible = TRUE; - gSprites[sTradeAnimationResourcesPtr->pokePicSpriteIdxs[whichParty]].callback = SpriteCallbackDummy; + sTradeData->pokePicSpriteIdxs[whichParty] = CreateSprite(&gMultiuseSpriteTemplate, 120, 60, 6); + gSprites[sTradeData->pokePicSpriteIdxs[whichParty]].invisible = TRUE; + gSprites[sTradeData->pokePicSpriteIdxs[whichParty]].callback = SpriteCallbackDummy; break; } } @@ -4233,7 +4271,7 @@ void CB2_InitTradeAnim_LinkTrade(void) gLinkType = 0x1144; CloseLink(); } - sTradeAnimationResourcesPtr = AllocZeroed(sizeof(struct TradeAnimationResources)); + sTradeData = AllocZeroed(sizeof(struct TradeAnimationResources)); AllocateMonSpritesGfx(); ResetTasks(); ResetSpriteData(); @@ -4242,25 +4280,25 @@ void CB2_InitTradeAnim_LinkTrade(void) TradeAnimInit_LoadGfx(); sub_804FF24(); gMain.state++; - sTradeAnimationResourcesPtr->unk_8C = 0; - sTradeAnimationResourcesPtr->state = 0; - sTradeAnimationResourcesPtr->isLinkTrade = TRUE; - sTradeAnimationResourcesPtr->unk_D4 = 64; - sTradeAnimationResourcesPtr->unk_D6 = 64; - sTradeAnimationResourcesPtr->unk_D8 = 0; - sTradeAnimationResourcesPtr->unk_DA = 0; - sTradeAnimationResourcesPtr->unk_DC = 120; - sTradeAnimationResourcesPtr->unk_DE = 80; - sTradeAnimationResourcesPtr->unk_E8 = 256; - sTradeAnimationResourcesPtr->unk_EC = 0; + sTradeData->unk_8C = 0; + sTradeData->state = 0; + sTradeData->isLinkTrade = TRUE; + sTradeData->unk_D4 = 64; + sTradeData->unk_D6 = 64; + sTradeData->unk_D8 = 0; + sTradeData->unk_DA = 0; + sTradeData->unk_DC = 120; + sTradeData->unk_DE = 80; + sTradeData->sXY = 256; + sTradeData->unk_EC = 0; break; case 1: if (!gReceivedRemoteLinkPlayers) { - sTradeAnimationResourcesPtr->unk_108 = TRUE; + sTradeData->isCableTrade = TRUE; OpenLink(); gMain.state++; - sTradeAnimationResourcesPtr->timer = 0; + sTradeData->timer = 0; } else { @@ -4268,10 +4306,10 @@ void CB2_InitTradeAnim_LinkTrade(void) } break; case 2: - sTradeAnimationResourcesPtr->timer++; - if (sTradeAnimationResourcesPtr->timer > 60) + sTradeData->timer++; + if (sTradeData->timer > 60) { - sTradeAnimationResourcesPtr->timer = 0; + sTradeData->timer = 0; gMain.state++; } break; @@ -4280,8 +4318,8 @@ void CB2_InitTradeAnim_LinkTrade(void) { if (GetLinkPlayerCount_2() >= GetSavedPlayerCount()) { - sTradeAnimationResourcesPtr->timer++; - if (sTradeAnimationResourcesPtr->timer > 30) + sTradeData->timer++; + if (sTradeData->timer > 30) { CheckShouldAdvanceLinkState(); gMain.state++; @@ -4305,9 +4343,9 @@ void CB2_InitTradeAnim_LinkTrade(void) } break; case 5: - sTradeAnimationResourcesPtr->unk_72 = 0; - sTradeAnimationResourcesPtr->unk_73 = 0; - sTradeAnimationResourcesPtr->unk_93 = 0; + sTradeData->unk_72 = 0; + sTradeData->unk_73 = 0; + sTradeData->unk_93 = 0; sub_804FFE4(0, 0); gMain.state++; break; @@ -4333,9 +4371,9 @@ void CB2_InitTradeAnim_LinkTrade(void) case 10: BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); ShowBg(0); - sTradeAnimationResourcesPtr->unk_F8 = GetMonData(&gPlayerParty[gUnknown_2031DA4[0]], MON_DATA_SPECIES2); - sTradeAnimationResourcesPtr->unk_FA = GetMonData(&gEnemyParty[gUnknown_2031DA4[1] % 6], MON_DATA_SPECIES2); - memcpy(sTradeAnimationResourcesPtr->unk_FC, gLinkPlayers[GetMultiplayerId() ^ 1].name, 7); + sTradeData->monSpecies[0] = GetMonData(&gPlayerParty[gSelectedTradeMonPositions[0]], MON_DATA_SPECIES2); + sTradeData->monSpecies[1] = GetMonData(&gEnemyParty[gSelectedTradeMonPositions[1] % 6], MON_DATA_SPECIES2); + memcpy(sTradeData->unk_FC, gLinkPlayers[GetMultiplayerId() ^ 1].name, 7); gMain.state++; break; case 11: @@ -4364,8 +4402,8 @@ void CB2_InitTradeAnim_LinkTrade(void) void sub_805049C(void) { - sub_8050968(5); - sub_8050968(0); + SetTradeSequenceBgGpuRegs(5); + SetTradeSequenceBgGpuRegs(0); } void sub_80504B0(void) @@ -4406,30 +4444,30 @@ void CB2_InitTradeAnim_InGameTrade(void) switch (gMain.state) { case 0: - gUnknown_2031DA4[0] = gSpecialVar_0x8005; - gUnknown_2031DA4[1] = 6; + gSelectedTradeMonPositions[0] = gSpecialVar_0x8005; + gSelectedTradeMonPositions[1] = 6; StringCopy(gLinkPlayers[0].name, gSaveBlock2Ptr->playerName); GetMonData(&gEnemyParty[0], MON_DATA_OT_NAME, otName); StringCopy(gLinkPlayers[1].name, otName); - sTradeAnimationResourcesPtr = AllocZeroed(sizeof(*sTradeAnimationResourcesPtr)); + sTradeData = AllocZeroed(sizeof(*sTradeData)); AllocateMonSpritesGfx(); ResetTasks(); ResetSpriteData(); FreeAllSpritePalettes(); SetVBlankCallback(VBlankCB_TradeAnim); TradeAnimInit_LoadGfx(); - sTradeAnimationResourcesPtr->isLinkTrade = FALSE; - sTradeAnimationResourcesPtr->unk_8C = 0; - sTradeAnimationResourcesPtr->state = 0; - sTradeAnimationResourcesPtr->unk_D4 = 64; - sTradeAnimationResourcesPtr->unk_D6 = 64; - sTradeAnimationResourcesPtr->unk_D8 = 0; - sTradeAnimationResourcesPtr->unk_DA = 0; - sTradeAnimationResourcesPtr->unk_DC = 120; - sTradeAnimationResourcesPtr->unk_DE = 80; - sTradeAnimationResourcesPtr->unk_E8 = 256; - sTradeAnimationResourcesPtr->unk_EC = 0; - sTradeAnimationResourcesPtr->timer = 0; + sTradeData->isLinkTrade = FALSE; + sTradeData->unk_8C = 0; + sTradeData->state = 0; + sTradeData->unk_D4 = 64; + sTradeData->unk_D6 = 64; + sTradeData->unk_D8 = 0; + sTradeData->unk_DA = 0; + sTradeData->unk_DC = 120; + sTradeData->unk_DE = 80; + sTradeData->sXY = 256; + sTradeData->unk_EC = 0; + sTradeData->timer = 0; gMain.state = 5; break; case 5: @@ -4463,8 +4501,8 @@ void CB2_InitTradeAnim_InGameTrade(void) gMain.state++; break; case 11: - sub_8050968(5); - sub_8050968(0); + SetTradeSequenceBgGpuRegs(5); + SetTradeSequenceBgGpuRegs(0); sub_8050E24(); gMain.state++; break; @@ -4502,7 +4540,7 @@ static void RS_TryEnableNationalPokedex(void) EnableNationalPokedex();*/ } -void Trade_SwapPlayerAndParterMonData(u8 playerPartyIdx, u8 partnerPartyIdx) +void TradeMons(u8 playerPartyIdx, u8 partnerPartyIdx) { u8 friendship; @@ -4518,9 +4556,9 @@ void Trade_SwapPlayerAndParterMonData(u8 playerPartyIdx, u8 partnerPartyIdx) ClearMailStruct(&gSaveBlock1Ptr->mail[playerMail]); // This is where the actual trade happens!! - sTradeAnimationResourcesPtr->mon = *playerMon; + sTradeData->mon = *playerMon; *playerMon = *partnerMon; - *partnerMon = sTradeAnimationResourcesPtr->mon; + *partnerMon = sTradeData->mon; // By default, a Pokemon received from a trade will have 70 Friendship. friendship = 70; @@ -4538,16 +4576,16 @@ void Trade_SwapPlayerAndParterMonData(u8 playerPartyIdx, u8 partnerPartyIdx) void sub_80508F4(void) { - switch (sTradeAnimationResourcesPtr->unk_93) + switch (sTradeData->unk_93) { case 1: if (IsLinkTaskFinished()) { - SendBlock(bitmask_all_link_players_but_self(), sTradeAnimationResourcesPtr->linkData, 20); - sTradeAnimationResourcesPtr->unk_93++; + SendBlock(bitmask_all_link_players_but_self(), sTradeData->linkData, 20); + sTradeData->unk_93++; } case 2: - sTradeAnimationResourcesPtr->unk_93 = 0; + sTradeData->unk_93 = 0; break; } } @@ -4562,13 +4600,13 @@ void CB2_RunTradeAnim_InGameTrade(void) UpdatePaletteFade(); } -void sub_8050968(u8 state) +void SetTradeSequenceBgGpuRegs(u8 state) { switch (state) { case 0: - sTradeAnimationResourcesPtr->bg2vofs = 0; - sTradeAnimationResourcesPtr->bg2hofs = 0xB4; + sTradeData->bg2vofs = 0; + sTradeData->bg2hofs = 0xB4; SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG2_ON | DISPCNT_OBJ_ON); SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(2) | BGCNT_CHARBASE(1) | BGCNT_SCREENBASE(18) | BGCNT_TXT512x256); LoadPalette(gTradeGba2_Pal, 0x10, 0x60); @@ -4576,12 +4614,12 @@ void sub_8050968(u8 state) DmaCopy16Defvars(3, gUnknown_826601C, (void *)BG_SCREEN_ADDR(18), 0x1000); break; case 1: - sTradeAnimationResourcesPtr->bg1hofs = 0; - sTradeAnimationResourcesPtr->bg1vofs = 0x15C; + sTradeData->bg1hofs = 0; + sTradeData->bg1vofs = 0x15C; SetGpuReg(REG_OFFSET_BG1VOFS, 0x15C); SetGpuReg(REG_OFFSET_BG1CNT, BGCNT_PRIORITY(2) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(5) | BGCNT_TXT256x512); SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(2) | BGCNT_CHARBASE(1) | BGCNT_SCREENBASE(18) | BGCNT_TXT256x512); - if (sTradeAnimationResourcesPtr->unk_108) + if (sTradeData->isCableTrade) { DmaCopy16Defvars(3, gUnknown_826AA5C, (void *)BG_SCREEN_ADDR(5), 0x1000); } @@ -4593,9 +4631,9 @@ void sub_8050968(u8 state) SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG1_ON | DISPCNT_OBJ_ON); break; case 2: - sTradeAnimationResourcesPtr->bg1vofs = 0; - sTradeAnimationResourcesPtr->bg1hofs = 0; - if (sTradeAnimationResourcesPtr->unk_108 == FALSE) + sTradeData->bg1vofs = 0; + sTradeData->bg1hofs = 0; + if (sTradeData->isCableTrade == FALSE) { SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG1_ON | DISPCNT_OBJ_ON); LZ77UnCompVram(gUnknown_3379A0Bin, (void *)BG_SCREEN_ADDR(5)); @@ -4612,19 +4650,19 @@ void sub_8050968(u8 state) LoadPalette(gUnknown_826BF5C, 0x30, 0x20); LZ77UnCompVram(gWirelessSignal4bpp, BG_CHAR_ADDR(1)); LZ77UnCompVram(gUnknown_826C60C, BG_SCREEN_ADDR(18)); - sTradeAnimationResourcesPtr->bg2vofs = 0x50; + sTradeData->bg2vofs = 0x50; SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG1_ON | DISPCNT_BG2_ON | DISPCNT_OBJ_ON); break; case 4: SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG2_ON | DISPCNT_OBJ_ON); SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(3) | BGCNT_CHARBASE(1) | BGCNT_256COLOR | BGCNT_SCREENBASE(18) | BGCNT_AFF128x128); - sTradeAnimationResourcesPtr->unk_D4 = 0x40; - sTradeAnimationResourcesPtr->unk_D6 = 0x5C; - sTradeAnimationResourcesPtr->unk_E8 = 0x20; - sTradeAnimationResourcesPtr->unk_EA = 0x400; - sTradeAnimationResourcesPtr->unk_EC = 0; + sTradeData->unk_D4 = 0x40; + sTradeData->unk_D6 = 0x5C; + sTradeData->sXY = 0x20; + sTradeData->unk_EA = 0x400; + sTradeData->unk_EC = 0; DmaCopyLarge16(3, gUnknown_826701C, (void *)BG_CHAR_ADDR(1), 0x2840, 0x1000); - if (sTradeAnimationResourcesPtr->unk_108) + if (sTradeData->isCableTrade) { DmaCopy16Defvars(3, gUnknown_826985C, (void *)BG_SCREEN_ADDR(18), 0x100); } @@ -4634,21 +4672,21 @@ void sub_8050968(u8 state) } break; case 5: - sTradeAnimationResourcesPtr->bg1vofs = 0; - sTradeAnimationResourcesPtr->bg1hofs = 0; + sTradeData->bg1vofs = 0; + sTradeData->bg1hofs = 0; break; case 6: SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG2_ON | DISPCNT_OBJ_ON); SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(3) | BGCNT_CHARBASE(1) | BGCNT_256COLOR | BGCNT_SCREENBASE(18) | BGCNT_TXT256x256); - sTradeAnimationResourcesPtr->unk_D4 = 0x40; - sTradeAnimationResourcesPtr->unk_D6 = 0x5C; - sTradeAnimationResourcesPtr->unk_E8 = 0x100; - sTradeAnimationResourcesPtr->unk_EA = 0x80; - sTradeAnimationResourcesPtr->unk_DC = 0x78; - sTradeAnimationResourcesPtr->unk_DE = 0x50; - sTradeAnimationResourcesPtr->unk_EC = 0; + sTradeData->unk_D4 = 0x40; + sTradeData->unk_D6 = 0x5C; + sTradeData->sXY = 0x100; + sTradeData->unk_EA = 0x80; + sTradeData->unk_DC = 0x78; + sTradeData->unk_DE = 0x50; + sTradeData->unk_EC = 0; DmaCopyLarge16(3, gUnknown_826701C, BG_CHAR_ADDR(1), 0x2840, 0x1000); - if (sTradeAnimationResourcesPtr->unk_108) + if (sTradeData->isCableTrade) { DmaCopy16Defvars(3, gUnknown_826985C, (void *)BG_SCREEN_ADDR(18), 0x100); } @@ -4658,8 +4696,8 @@ void sub_8050968(u8 state) } break; case 7: - sTradeAnimationResourcesPtr->bg2vofs = 0; - sTradeAnimationResourcesPtr->bg2hofs = 0; + sTradeData->bg2vofs = 0; + sTradeData->bg2hofs = 0; SetGpuReg(REG_OFFSET_BLDCNT, 0); SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(2) | BGCNT_CHARBASE(1) | BGCNT_SCREENBASE(18) | BGCNT_TXT512x256); LoadPalette(gTradeGba2_Pal, 0x10, 0x60); @@ -4668,3 +4706,543 @@ void sub_8050968(u8 state) break; } } + +void sub_8050DE0(void) +{ + LoadSpriteSheet(&gUnknown_826CE2C); + LoadSpriteSheet(&gUnknown_826CE7C); + LoadSpriteSheet(&gUnknown_826CEB0); + LoadSpriteSheet(&gUnknown_826CF28); + LoadSpritePalette(&gUnknown_826CE34); + LoadSpritePalette(&gUnknown_826CE3C); +} + +void sub_8050E24(void) +{ + u8 nickname[20]; + u8 mpId; + const struct InGameTrade * inGameTrade; + if (sTradeData->isLinkTrade) + { + mpId = GetMultiplayerId(); + StringCopy(gStringVar1, gLinkPlayers[mpId ^ 1].name); + GetMonData(&gEnemyParty[gSelectedTradeMonPositions[1] % 6], MON_DATA_NICKNAME, nickname); + StringCopy10(gStringVar3, nickname); + GetMonData(&gPlayerParty[gSelectedTradeMonPositions[0]], MON_DATA_NICKNAME, nickname); + StringCopy10(gStringVar2, nickname); + } + else + { + inGameTrade = &gIngameTrades[gSpecialVar_0x8004]; + StringCopy(gStringVar1, inGameTrade->otName); + StringCopy10(gStringVar3, inGameTrade->nickname); + GetMonData(&gPlayerParty[gSpecialVar_0x8005], MON_DATA_NICKNAME, nickname); + StringCopy10(gStringVar2, nickname); + } +} + +bool8 sub_8050F14(void) +{ + if (sTradeData->isCableTrade) + return sub_8050F3C(); + else + return sub_805232C(); +} + + +bool8 sub_8050F3C(void) +{ + u16 evoTarget; + + switch (sTradeData->state) + { + case 0: + gSprites[sTradeData->pokePicSpriteIdxs[0]].invisible = FALSE; + gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.x = -180; + gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.y = gMonFrontPicCoords[sTradeData->tradeSpecies[0]].y_offset; + sTradeData->state++; + sTradeData->cachedMapMusic = GetCurrentMapMusic(); + PlayNewMapMusic(MUS_SHINKA); + break; + case 1: + if (sTradeData->bg2hofs > 0) + { + gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.x += 3; + sTradeData->bg2hofs -= 3; + } + else + { + gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.x = 0; + sTradeData->bg2hofs = 0; + sTradeData->state = 10; + } + break; + case 10: + StringExpandPlaceholders(gStringVar4, gText_XWillBeSentToY); + DrawTextOnTradeWindow(0, gStringVar4, 0); + + if (sTradeData->tradeSpecies[0] != SPECIES_EGG) + { + PlayCry1(sTradeData->tradeSpecies[0], 0); + } + + sTradeData->state = 11; + sTradeData->timer = 0; + break; + case 11: + if (++sTradeData->timer == 80) + { + sTradeData->pokeballSpriteId = CreateTradePokeballSprite(sTradeData->pokePicSpriteIdxs[0], gSprites[sTradeData->pokePicSpriteIdxs[0]].oam.paletteNum, 120, 32, 2, 1, 0x14, 0xfffff); + sTradeData->state++; + StringExpandPlaceholders(gStringVar4, gText_ByeByeVar1); + DrawTextOnTradeWindow(0, gStringVar4, 0); + } + break; + case 12: + if (gSprites[sTradeData->pokeballSpriteId].callback == SpriteCallbackDummy) + { + sTradeData->unk_D3 = CreateSprite(&sTradePokeballSpriteTemplate, 120, 32, 0); + gSprites[sTradeData->unk_D3].callback = SpriteCB_TradePokeball_Outbound; + DestroySprite(&gSprites[sTradeData->pokeballSpriteId]); + sTradeData->state++; + } + break; + case 13: + // The game waits here for the sprite to finish its animation sequence. + break; + case 14: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + sTradeData->state = 20; + break; + case 20: + if (!gPaletteFade.active) + { + SetTradeSequenceBgGpuRegs(4); + FillWindowPixelBuffer(0, PIXEL_FILL(15)); + CopyWindowToVram(0, 3); + sTradeData->state++; + } + break; + case 21: + BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK); + sTradeData->state++; + break; + case 22: + if (!gPaletteFade.active) + { + sTradeData->state = 23; + } + break; + case 23: + if (sTradeData->unk_EA > 0x100) + { + sTradeData->unk_EA -= 0x34; + } + else + { + SetTradeSequenceBgGpuRegs(1); + sTradeData->unk_EA = 0x80; + sTradeData->state++; + sTradeData->timer = 0; + } + sTradeData->sXY = 0x8000 / sTradeData->unk_EA; + break; + case 24: + if (++sTradeData->timer > 20) + { + SetTradeBGAffine(); + sTradeData->unk_91 = CreateSprite(&gUnknown_826CF30, 120, 80, 0); + sTradeData->state++; + } + break; + case 25: + if (gSprites[sTradeData->unk_91].animEnded) + { + DestroySprite(&gSprites[sTradeData->unk_91]); + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_EFFECT_BLEND | + BLDCNT_TGT2_BG1 | + BLDCNT_TGT2_BG2); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(12, 4)); + sTradeData->state++; + } + break; + case 26: + if (--sTradeData->bg1vofs == 316) + { + sTradeData->state++; + } + if (sTradeData->bg1vofs == 328) + { + sTradeData->unk_92 = CreateSprite(&sGameLinkCableEndSpriteTemplate, 128, 65, 0); + } + break; + case 27: + sTradeData->unk_90 = CreateSprite(&gUnknown_826CE44, 128, 80, 3); + sTradeData->unk_91 = CreateSprite(&sGlowBallSpriteTemplate, 128, 80, 0); + StartSpriteAnim(&gSprites[sTradeData->unk_91], 1); + sTradeData->state++; + break; + case 28: + if ((sTradeData->bg1vofs -= 2) == 166) + { + sTradeData->state = 200; + } + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1 | + DISPCNT_OBJ_1D_MAP | + DISPCNT_BG1_ON | + DISPCNT_OBJ_ON); + break; + case 200: + gSprites[sTradeData->unk_90].pos1.y -= 2; + gSprites[sTradeData->unk_91].pos1.y -= 2; + if (gSprites[sTradeData->unk_90].pos1.y < -8) + { + sTradeData->state = 29; + } + break; + case 29: + BeginNormalPaletteFade(0xFFFFFFFF, -1, 0, 16, RGB_BLACK); + sTradeData->state = 30; + break; + case 30: + if (!gPaletteFade.active) + { + DestroySprite(&gSprites[sTradeData->unk_90]); + DestroySprite(&gSprites[sTradeData->unk_91]); + SetTradeSequenceBgGpuRegs(2); + sTradeData->state++; + } + break; + case 31: + BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK); + sTradeData->unk_90 = CreateSprite(&sGlowBallSpriteTemplate, 111, 170, 0); + sTradeData->unk_91 = CreateSprite(&sGlowBallSpriteTemplate, 129, -10, 0); + sTradeData->state++; + break; + case 32: + if (!gPaletteFade.active) + { + PlaySE(SE_TK_WARPOUT); + sTradeData->state++; + } + gSprites[sTradeData->unk_90].pos2.y -= 3; + gSprites[sTradeData->unk_91].pos2.y += 3; + break; + case 33: + gSprites[sTradeData->unk_90].pos2.y -= 3; + gSprites[sTradeData->unk_91].pos2.y += 3; + if (gSprites[sTradeData->unk_90].pos2.y <= -90) + { + gSprites[sTradeData->unk_90].data[1] = 1; + gSprites[sTradeData->unk_91].data[1] = 1; + sTradeData->state++; + } + break; + case 34: + BlendPalettes(0x1, 16, RGB_WHITEALPHA); + sTradeData->state++; + break; + case 35: + BlendPalettes(0x1, 0, RGB_WHITEALPHA); + sTradeData->state++; + break; + case 36: + BlendPalettes(0x1, 16, RGB_WHITEALPHA); + sTradeData->state++; + break; + case 37: + if (!IsPokeSpriteNotFlipped(sTradeData->tradeSpecies[0])) + { + gSprites[sTradeData->pokePicSpriteIdxs[0]].affineAnims = gUnknown_826CF88; + gSprites[sTradeData->pokePicSpriteIdxs[0]].oam.affineMode = 3; + CalcCenterToCornerVec(&gSprites[sTradeData->pokePicSpriteIdxs[0]], 0, 3, 3); + StartSpriteAffineAnim(&gSprites[sTradeData->pokePicSpriteIdxs[0]], 0); + } + else + { + StartSpriteAffineAnim(&gSprites[sTradeData->pokePicSpriteIdxs[0]], 0); + } + StartSpriteAffineAnim(&gSprites[sTradeData->pokePicSpriteIdxs[1]], 0); + gSprites[sTradeData->pokePicSpriteIdxs[0]].pos1.x = 60; + gSprites[sTradeData->pokePicSpriteIdxs[1]].pos1.x = 180; + gSprites[sTradeData->pokePicSpriteIdxs[0]].pos1.y = 192; + gSprites[sTradeData->pokePicSpriteIdxs[1]].pos1.y = -32; + gSprites[sTradeData->pokePicSpriteIdxs[0]].invisible = FALSE; + gSprites[sTradeData->pokePicSpriteIdxs[1]].invisible = FALSE; + sTradeData->state++; + break; + case 38: + gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.y -= 3; + gSprites[sTradeData->pokePicSpriteIdxs[1]].pos2.y += 3; + if (gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.y < -160 && gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.y >= -163) + { + PlaySE(SE_TK_WARPIN); + } + if (gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.y < -222) + { + gSprites[sTradeData->unk_90].data[1] = 0; + gSprites[sTradeData->unk_91].data[1] = 0; + sTradeData->state++; + gSprites[sTradeData->pokePicSpriteIdxs[0]].invisible = TRUE; + gSprites[sTradeData->pokePicSpriteIdxs[1]].invisible = TRUE; + BlendPalettes(0x1, 0, RGB_WHITEALPHA); + } + break; + case 39: + gSprites[sTradeData->unk_90].pos2.y -= 3; + gSprites[sTradeData->unk_91].pos2.y += 3; + if (gSprites[sTradeData->unk_90].pos2.y <= -222) + { + BeginNormalPaletteFade(0xFFFFFFFF, -1, 0, 16, RGB_BLACK); + sTradeData->state++; + DestroySprite(&gSprites[sTradeData->unk_90]); + DestroySprite(&gSprites[sTradeData->unk_91]); + } + break; + case 40: + if (!gPaletteFade.active) + { + sTradeData->state++; + SetTradeSequenceBgGpuRegs(1); + sTradeData->bg1vofs = 166; + sTradeData->unk_90 = CreateSprite(&gUnknown_826CE44, 128, -20, 3); + sTradeData->unk_91 = CreateSprite(&sGlowBallSpriteTemplate, 128, -20, 0); + StartSpriteAnim(&gSprites[sTradeData->unk_91], 1); + } + break; + case 41: + BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK); + sTradeData->state++; + break; + case 42: + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | + DISPCNT_OBJ_1D_MAP | + DISPCNT_BG1_ON | + DISPCNT_OBJ_ON); + if (!gPaletteFade.active) + { + sTradeData->state++; + } + break; + case 43: + gSprites[sTradeData->unk_90].pos2.y += 3; + gSprites[sTradeData->unk_91].pos2.y += 3; + if (gSprites[sTradeData->unk_90].pos2.y + gSprites[sTradeData->unk_90].pos1.y == 64) + { + sTradeData->state++; + } + break; + case 44: + if ((sTradeData->bg1vofs += 2) > 316) + { + sTradeData->bg1vofs = 316; + sTradeData->state++; + } + break; + case 45: + DestroySprite(&gSprites[sTradeData->unk_90]); + DestroySprite(&gSprites[sTradeData->unk_91]); + sTradeData->state++; + sTradeData->timer = 0; + break; + case 46: + if (++sTradeData->timer == 10) + { + sTradeData->state++; + } + break; + case 47: + if (++sTradeData->bg1vofs > 348) + { + sTradeData->bg1vofs = 348; + sTradeData->state++; + } + if (sTradeData->bg1vofs == 328 && sTradeData->isCableTrade) + { + sTradeData->unk_92 = CreateSprite(&sGameLinkCableEndSpriteTemplate, 128, 65, 0); + gSprites[sTradeData->unk_92].callback = SpriteCB_GameLinkCableEnd_Inbound; + } + break; + case 48: + sTradeData->unk_91 = CreateSprite(&gUnknown_826CF30, 120, 80, 0); + sTradeData->state = 50; + break; + case 50: + if (gSprites[sTradeData->unk_91].animEnded) + { + DestroySprite(&gSprites[sTradeData->unk_91]); + SetTradeSequenceBgGpuRegs(6); + sTradeData->state++; + PlaySE(SE_W028); + } + break; + case 51: + if (sTradeData->unk_EA < 0x400) + { + sTradeData->unk_EA += 0x34; + } + else + { + sTradeData->unk_EA = 0x400; + sTradeData->state++; + } + sTradeData->sXY = 0x8000 / sTradeData->unk_EA; + break; + case 52: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + sTradeData->state = 60; + break; + + case 60: + if (!gPaletteFade.active) + { + SetTradeSequenceBgGpuRegs(5); + SetTradeSequenceBgGpuRegs(7); + gPaletteFade.bufferTransferDisabled = TRUE; + sTradeData->state++; + } + break; + case 61: + gPaletteFade.bufferTransferDisabled = FALSE; + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); + sTradeData->state++; + break; + case 62: + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | + DISPCNT_OBJ_1D_MAP | + DISPCNT_BG2_ON | + DISPCNT_OBJ_ON); + if (!gPaletteFade.active) + { + sTradeData->state++; + } + break; + case 63: + sTradeData->unk_D3 = CreateSprite(&sTradePokeballSpriteTemplate, 120, -8, 0); + gSprites[sTradeData->unk_D3].data[3] = 74; + gSprites[sTradeData->unk_D3].callback = SpriteCB_TradePokeball_Inbound; + StartSpriteAnim(&gSprites[sTradeData->unk_D3], 1); + StartSpriteAffineAnim(&gSprites[sTradeData->unk_D3], 2); + BlendPalettes(1 << (16 + gSprites[sTradeData->unk_D3].oam.paletteNum), 16, RGB_WHITEALPHA); + sTradeData->state++; + sTradeData->timer = 0; + break; + case 64: + BeginNormalPaletteFade(1 << (16 + gSprites[sTradeData->unk_D3].oam.paletteNum), 1, 16, 0, RGB_WHITEALPHA); + sTradeData->state++; + break; + case 65: + if (gSprites[sTradeData->unk_D3].callback == SpriteCallbackDummy) + { + HandleLoadSpecialPokePic(&gMonFrontPicTable[sTradeData->tradeSpecies[1]], gMonSpritesGfxPtr->sprites[3], sTradeData->tradeSpecies[1], sTradeData->monPersonalities[1]); + sTradeData->state++; + } + break; + case 66: + gSprites[sTradeData->pokePicSpriteIdxs[1]].pos1.x = 120; + gSprites[sTradeData->pokePicSpriteIdxs[1]].pos1.y = gMonFrontPicCoords[sTradeData->tradeSpecies[1]].y_offset + 60; + gSprites[sTradeData->pokePicSpriteIdxs[1]].pos2.x = 0; + gSprites[sTradeData->pokePicSpriteIdxs[1]].pos2.y = 0; + StartSpriteAnim(&gSprites[sTradeData->pokePicSpriteIdxs[1]], 0); + CreatePokeballSpriteToReleaseMon(sTradeData->pokePicSpriteIdxs[1], gSprites[sTradeData->pokePicSpriteIdxs[1]].oam.paletteNum, 120, 84, 2, 1, 20, 0xFFFFF); + FreeSpriteOamMatrix(&gSprites[sTradeData->unk_D3]); + DestroySprite(&gSprites[sTradeData->unk_D3]); + sTradeData->state++; + break; + case 67: + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | + DISPCNT_OBJ_1D_MAP | + DISPCNT_BG0_ON | + DISPCNT_BG2_ON | + DISPCNT_OBJ_ON); + StringExpandPlaceholders(gStringVar4, gText_XSentOverY); + DrawTextOnTradeWindow(0, gStringVar4, 0); + sTradeData->state = 167; + sTradeData->timer = 0; + break; + // 167 and 267 are extra cases added in for animations + case 167: + if (++sTradeData->timer > 60) + { + if (sTradeData->tradeSpecies[1] != SPECIES_EGG) + { + PlayCry1(sTradeData->tradeSpecies[1], 0); + } + sTradeData->state = 267; + sTradeData->timer = 0; + } + break; + case 267: + if (IsCryFinished()) + { + sTradeData->state = 68; + } + break; + case 68: + if (++sTradeData->timer == 10) + { + PlayFanfare(MUS_FANFA5); + } + if (sTradeData->timer == 250) + { + sTradeData->state++; + StringExpandPlaceholders(gStringVar4, gText_TakeGoodCareOfX); + DrawTextOnTradeWindow(0, gStringVar4, 0); + sTradeData->timer = 0; + } + break; + case 69: + if (++sTradeData->timer == 60) + { + sTradeData->state++; + } + break; + case 70: + CheckPartnersMonForRibbons(); + sTradeData->state++; + break; + case 71: + if (sTradeData->isLinkTrade) + { + return TRUE; + } + else if (JOY_NEW(A_BUTTON)) + { + sTradeData->state++; + } + break; + case 72: // Only if in-game trade + TradeMons(gSpecialVar_0x8005, 0); + gCB2_AfterEvolution = CB2_RunTradeAnim_InGameTrade; + evoTarget = GetEvolutionTargetSpecies(&gPlayerParty[gSelectedTradeMonPositions[0]], TRUE, ITEM_NONE); + if (evoTarget != SPECIES_NONE) + { + TradeEvolutionScene(&gPlayerParty[gSelectedTradeMonPositions[0]], evoTarget, sTradeData->pokePicSpriteIdxs[1], gSelectedTradeMonPositions[0]); + } + sTradeData->state++; + break; + case 73: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + sTradeData->state++; + break; + case 74: + if (!gPaletteFade.active) + { + PlayNewMapMusic(sTradeData->cachedMapMusic); + if (sTradeData) + { + FreeAllWindowBuffers(); + Free(GetBgTilemapBuffer(3)); + Free(GetBgTilemapBuffer(1)); + Free(GetBgTilemapBuffer(0)); + FreeMonSpritesGfx(); + FREE_AND_SET_NULL(sTradeData); + } + SetMainCallback2(CB2_ReturnToField); + BufferInGameTradeMonName(); + HelpSystem_Enable(); + } + break; + } + return FALSE; +} -- cgit v1.2.3 From 0f0fb927a97fb3f1261e210235b9ada76da05479 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 30 Oct 2019 06:36:12 -0400 Subject: Port sub_805232C --- asm/trade.s | 2231 +---------------------------------------------------------- src/trade.c | 526 +++++++++++++- 2 files changed, 528 insertions(+), 2229 deletions(-) diff --git a/asm/trade.s b/asm/trade.s index 0c863b4f1..0fd2e5c57 100644 --- a/asm/trade.s +++ b/asm/trade.s @@ -5,2231 +5,6 @@ .text - thumb_func_start sub_805232C -sub_805232C: @ 805232C - push {r4-r7,lr} - sub sp, 0x10 - ldr r0, _08052350 @ =sTradeData - ldr r1, [r0] - adds r1, 0x94 - ldrh r5, [r1] - ldr r1, _08052354 @ =0x0000010b - adds r7, r0, 0 - cmp r5, r1 - bls _08052344 - bl _08053774 -_08052344: - lsls r0, r5, 2 - ldr r1, _08052358 @ =_0805235C - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08052350: .4byte sTradeData -_08052354: .4byte 0x0000010b -_08052358: .4byte _0805235C - .align 2, 0 -_0805235C: - .4byte _0805278C - .4byte _08052804 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08052860 - .4byte _080528A8 - .4byte _0805291C - .4byte _08053774 - .4byte _08052988 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _080529AC - .4byte _080529DC - .4byte _080529EE - .4byte _08052A10 - .4byte _08053774 - .4byte _08053774 - .4byte _08052B08 - .4byte _08052B28 - .4byte _08052B94 - .4byte _08052C18 - .4byte _08052C3C - .4byte _08052C88 - .4byte _08052CD4 - .4byte _08052D30 - .4byte _08052D9C - .4byte _08052DB0 - .4byte _08052DC4 - .4byte _08052DD8 - .4byte _08052F00 - .4byte _08052FD0 - .4byte _08053058 - .4byte _080530F8 - .4byte _08053108 - .4byte _08053128 - .4byte _08053774 - .4byte _08053774 - .4byte _0805324C - .4byte _0805325C - .4byte _0805327A - .4byte _08053774 - .4byte _080532A0 - .4byte _080532E0 - .4byte _08053320 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053340 - .4byte _08053368 - .4byte _08053384 - .4byte _080533A4 - .4byte _0805344C - .4byte _08053480 - .4byte _080534CC - .4byte _08053584 - .4byte _08053610 - .4byte _0805365C - .4byte _0805366C - .4byte _08053672 - .4byte _08053698 - .4byte _080536F4 - .4byte _08053718 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08052A58 - .4byte _08052A8C - .4byte _08052AE0 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053180 - .4byte _080531E8 - .4byte _08053224 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _080535BC - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08052BC0 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _08053774 - .4byte _080535F4 -_0805278C: - ldr r3, _080527F8 @ =gSprites - ldr r0, [r7] - adds r0, 0x8E - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r3 - adds r0, 0x3E - ldrb r2, [r0] - movs r1, 0x5 - negs r1, r1 - ands r1, r2 - strb r1, [r0] - ldr r4, [r7] - adds r2, r4, 0 - adds r2, 0x8E - ldrb r1, [r2] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r3 - ldr r1, _080527FC @ =0x0000ff4c - strh r1, [r0, 0x24] - ldrb r0, [r2] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r3 - ldr r2, _08052800 @ =gMonFrontPicCoords - adds r0, r4, 0 - adds r0, 0xF0 - ldrh r0, [r0] - lsls r0, 2 - adds r0, r2 - ldrb r0, [r0, 0x1] - strh r0, [r1, 0x26] - adds r1, r4, 0 - adds r1, 0x94 - ldrh r0, [r1] - adds r0, 0x1 - strh r0, [r1] - bl GetCurrentMapMusic - ldr r1, [r7] - adds r1, 0xF4 - strh r0, [r1] - movs r0, 0x84 - lsls r0, 1 - bl PlayNewMapMusic - bl _08053774 - .align 2, 0 -_080527F8: .4byte gSprites -_080527FC: .4byte 0x0000ff4c -_08052800: .4byte gMonFrontPicCoords -_08052804: - ldr r5, [r7] - adds r6, r5, 0 - adds r6, 0xE6 - movs r1, 0 - ldrsh r0, [r6, r1] - cmp r0, 0 - ble _08052838 - ldr r2, _08052834 @ =gSprites - adds r0, r5, 0 - adds r0, 0x8E - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrh r1, [r0, 0x24] - adds r1, 0x3 - strh r1, [r0, 0x24] - ldrh r0, [r6] - subs r0, 0x3 - strh r0, [r6] - bl _08053774 - .align 2, 0 -_08052834: .4byte gSprites -_08052838: - ldr r2, _0805285C @ =gSprites - adds r0, r5, 0 - adds r0, 0x8E - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - movs r1, 0 - strh r1, [r0, 0x24] - strh r1, [r6] - adds r1, r5, 0 - adds r1, 0x94 - movs r0, 0xA - strh r0, [r1] - bl _08053774 - .align 2, 0 -_0805285C: .4byte gSprites -_08052860: - ldr r4, _0805289C @ =gStringVar4 - ldr r1, _080528A0 @ =gText_XWillBeSentToY - adds r0, r4, 0 - bl StringExpandPlaceholders - movs r0, 0 - adds r1, r4, 0 - movs r2, 0 - bl DrawTextOnTradeWindow - ldr r4, _080528A4 @ =sTradeData - ldr r0, [r4] - adds r2, r0, 0 - adds r2, 0xF0 - ldrh r1, [r2] - movs r0, 0xCE - lsls r0, 1 - cmp r1, r0 - beq _0805288E - adds r0, r1, 0 - movs r1, 0 - bl PlayCry1 -_0805288E: - ldr r3, [r4] - adds r1, r3, 0 - adds r1, 0x94 - movs r2, 0 - movs r0, 0xB - bl _080535EA - .align 2, 0 -_0805289C: .4byte gStringVar4 -_080528A0: .4byte gText_XWillBeSentToY -_080528A4: .4byte sTradeData -_080528A8: - ldr r1, [r7] - ldr r0, [r1, 0x64] - adds r0, 0x1 - str r0, [r1, 0x64] - cmp r0, 0x50 - beq _080528B8 - bl _08053774 -_080528B8: - adds r0, r1, 0 - adds r0, 0x8E - ldrb r0, [r0] - ldr r2, _0805290C @ =gSprites - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r2 - ldrb r1, [r1, 0x5] - lsrs r1, 4 - movs r2, 0x2 - str r2, [sp] - movs r2, 0x1 - str r2, [sp, 0x4] - movs r2, 0x14 - str r2, [sp, 0x8] - ldr r2, _08052910 @ =0x000fffff - str r2, [sp, 0xC] - movs r2, 0x78 - movs r3, 0x20 - bl CreateTradePokeballSprite - ldr r1, [r7] - adds r1, 0xD2 - strb r0, [r1] - ldr r1, [r7] - adds r1, 0x94 - ldrh r0, [r1] - adds r0, 0x1 - strh r0, [r1] - ldr r4, _08052914 @ =gStringVar4 - ldr r1, _08052918 @ =gText_ByeByeVar1 - adds r0, r4, 0 - bl StringExpandPlaceholders - movs r0, 0 - adds r1, r4, 0 - movs r2, 0 - bl DrawTextOnTradeWindow - bl _08053774 - .align 2, 0 -_0805290C: .4byte gSprites -_08052910: .4byte 0x000fffff -_08052914: .4byte gStringVar4 -_08052918: .4byte gText_ByeByeVar1 -_0805291C: - ldr r5, _08052978 @ =gSprites - ldr r0, [r7] - adds r0, 0xD2 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r4, r5, 0 - adds r4, 0x1C - adds r0, r4 - ldr r1, [r0] - ldr r0, _0805297C @ =SpriteCallbackDummy - cmp r1, r0 - beq _0805293C - bl _08053774 -_0805293C: - ldr r0, _08052980 @ =sTradePokeballSpriteTemplate - movs r1, 0x78 - movs r2, 0x20 - movs r3, 0 - bl CreateSprite - ldr r1, [r7] - adds r1, 0xD3 - strb r0, [r1] - ldr r2, [r7] - adds r0, r2, 0 - adds r0, 0xD3 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - ldr r1, _08052984 @ =SpriteCB_TradePokeball_Outbound - str r1, [r0] - adds r2, 0xD2 - ldrb r1, [r2] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - bl DestroySprite - ldr r1, [r7] - bl _08053708 - .align 2, 0 -_08052978: .4byte gSprites -_0805297C: .4byte SpriteCallbackDummy -_08052980: .4byte sTradePokeballSpriteTemplate -_08052984: .4byte SpriteCB_TradePokeball_Outbound -_08052988: - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - ldr r0, _080529A8 @ =sTradeData - ldr r0, [r0] - adds r0, 0x94 - movs r1, 0x14 - strh r1, [r0] - bl _08053774 - .align 2, 0 -_080529A8: .4byte sTradeData -_080529AC: - ldr r0, _080529D8 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _080529BC - bl _08053774 -_080529BC: - movs r0, 0x4 - bl SetTradeSequenceBgGpuRegs - movs r0, 0 - movs r1, 0xFF - bl FillWindowPixelBuffer - movs r0, 0 - movs r1, 0x3 - bl CopyWindowToVram - bl _08053704 - .align 2, 0 -_080529D8: .4byte gPaletteFade -_080529DC: - movs r1, 0x1 - negs r1, r1 - movs r0, 0 - str r0, [sp] - adds r0, r1, 0 - movs r2, 0x10 - movs r3, 0 - bl _08053700 -_080529EE: - ldr r0, _08052A0C @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _080529FE - bl _08053774 -_080529FE: - ldr r0, [r7] - adds r0, 0x94 - movs r1, 0x17 - strh r1, [r0] - bl _08053774 - .align 2, 0 -_08052A0C: .4byte gPaletteFade -_08052A10: - ldr r4, _08052A2C @ =sTradeData - ldr r0, [r4] - adds r2, r0, 0 - adds r2, 0xEA - ldrh r1, [r2] - movs r0, 0x80 - lsls r0, 1 - cmp r1, r0 - bls _08052A30 - adds r0, r1, 0 - subs r0, 0x34 - strh r0, [r2] - b _08052A4A - .align 2, 0 -_08052A2C: .4byte sTradeData -_08052A30: - movs r0, 0x1 - bl SetTradeSequenceBgGpuRegs - ldr r3, [r4] - adds r1, r3, 0 - adds r1, 0xEA - movs r2, 0 - movs r0, 0x80 - strh r0, [r1] - subs r1, 0x56 - movs r0, 0x7C - strh r0, [r1] - str r2, [r3, 0x64] -_08052A4A: - ldr r0, _08052A54 @ =sTradeData - ldr r4, [r0] - bl _0805330C - .align 2, 0 -_08052A54: .4byte sTradeData -_08052A58: - ldr r1, [r7] - ldr r0, [r1, 0x64] - adds r0, 0x1 - str r0, [r1, 0x64] - cmp r0, 0x14 - bhi _08052A68 - bl _08053774 -_08052A68: - movs r0, 0x3 - bl SetTradeSequenceBgGpuRegs - ldr r0, _08052A88 @ =gUnknown_826CF48 - movs r1, 0x78 - movs r2, 0x50 - movs r3, 0 - bl CreateSprite - ldr r1, [r7] - adds r1, 0x91 - strb r0, [r1] - ldr r1, [r7] - bl _08053708 - .align 2, 0 -_08052A88: .4byte gUnknown_826CF48 -_08052A8C: - ldr r2, _08052AD4 @ =gSprites - ldr r0, [r7] - adds r0, 0x91 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r1, r0, r2 - adds r0, r1, 0 - adds r0, 0x3F - ldrb r0, [r0] - lsls r0, 27 - cmp r0, 0 - blt _08052AAC - bl _08053774 -_08052AAC: - adds r0, r1, 0 - bl DestroySprite - ldr r1, _08052AD8 @ =0x00000452 - movs r0, 0x50 - bl SetGpuReg - movs r1, 0x82 - lsls r1, 3 - movs r0, 0x52 - bl SetGpuReg - ldr r0, _08052ADC @ =c3_08054588 - movs r1, 0x5 - bl CreateTask - ldr r1, [r7] - bl _08053708 - .align 2, 0 -_08052AD4: .4byte gSprites -_08052AD8: .4byte 0x00000452 -_08052ADC: .4byte c3_08054588 -_08052AE0: - ldr r0, _08052B00 @ =c3_08054588 - bl FuncIsActiveTask - lsls r0, 24 - cmp r0, 0 - beq _08052AF0 - bl _08053774 -_08052AF0: - ldr r0, _08052B04 @ =sTradeData - ldr r0, [r0] - adds r0, 0x94 - movs r1, 0x1A - strh r1, [r0] - bl _08053774 - .align 2, 0 -_08052B00: .4byte c3_08054588 -_08052B04: .4byte sTradeData -_08052B08: - ldr r2, [r7] - adds r0, r2, 0 - adds r0, 0xE0 - ldrh r1, [r0] - subs r1, 0x1 - strh r1, [r0] - lsls r1, 16 - movs r0, 0x9E - lsls r0, 17 - cmp r1, r0 - beq _08052B22 - bl _08053774 -_08052B22: - adds r1, r2, 0 - bl _08053708 -_08052B28: - ldr r0, _08052B80 @ =gUnknown_826CE44 - movs r1, 0x78 - movs r2, 0x50 - movs r3, 0x3 - bl CreateSprite - ldr r4, _08052B84 @ =sTradeData - ldr r1, [r4] - adds r1, 0x90 - strb r0, [r1] - ldr r5, _08052B88 @ =gSprites - ldr r0, [r4] - adds r0, 0x90 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r1, r5, 0 - adds r1, 0x1C - adds r0, r1 - ldr r1, _08052B8C @ =SpriteCB_TradeGlowWireless - str r1, [r0] - ldr r0, _08052B90 @ =sGlowBallSpriteTemplate - movs r1, 0x78 - movs r2, 0x50 - movs r3, 0 - bl CreateSprite - ldr r1, [r4] - adds r1, 0x91 - strb r0, [r1] - ldr r0, [r4] - adds r0, 0x91 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - movs r1, 0x1 - bl StartSpriteAnim - ldr r1, [r4] - bl _08053708 - .align 2, 0 -_08052B80: .4byte gUnknown_826CE44 -_08052B84: .4byte sTradeData -_08052B88: .4byte gSprites -_08052B8C: .4byte SpriteCB_TradeGlowWireless -_08052B90: .4byte sGlowBallSpriteTemplate -_08052B94: - ldr r2, [r7] - adds r1, r2, 0 - adds r1, 0xE0 - ldrh r0, [r1] - subs r0, 0x3 - strh r0, [r1] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0xA6 - bne _08052BAE - subs r1, 0x4C - movs r0, 0xC8 - strh r0, [r1] -_08052BAE: - ldr r1, _08052BBC @ =0x00001241 - movs r0, 0 - bl SetGpuReg - bl _08053774 - .align 2, 0 -_08052BBC: .4byte 0x00001241 -_08052BC0: - ldr r2, _08052C14 @ =gSprites - ldr r4, [r7] - adds r3, r4, 0 - adds r3, 0x90 - ldrb r1, [r3] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrh r1, [r0, 0x22] - subs r1, 0x2 - strh r1, [r0, 0x22] - adds r0, r4, 0 - adds r0, 0x91 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrh r1, [r0, 0x22] - subs r1, 0x2 - strh r1, [r0, 0x22] - ldrb r1, [r3] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - movs r2, 0x22 - ldrsh r1, [r0, r2] - movs r0, 0x8 - negs r0, r0 - cmp r1, r0 - blt _08052C06 - bl _08053774 -_08052C06: - adds r1, r4, 0 - adds r1, 0x94 - movs r0, 0x1D - strh r0, [r1] - bl _08053774 - .align 2, 0 -_08052C14: .4byte gSprites -_08052C18: - movs r1, 0x1 - negs r1, r1 - movs r0, 0 - str r0, [sp] - adds r0, r1, 0 - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - ldr r0, _08052C38 @ =sTradeData - ldr r0, [r0] - adds r0, 0x94 - movs r1, 0x1E - strh r1, [r0] - bl _08053774 - .align 2, 0 -_08052C38: .4byte sTradeData -_08052C3C: - ldr r0, _08052C80 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _08052C4C - bl _08053774 -_08052C4C: - ldr r0, [r7] - adds r0, 0x90 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r4, _08052C84 @ =gSprites - adds r0, r4 - bl DestroySprite - ldr r0, [r7] - adds r0, 0x91 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - bl DestroySprite - movs r0, 0x2 - bl SetTradeSequenceBgGpuRegs - ldr r1, [r7] - bl _08053708 - .align 2, 0 -_08052C80: .4byte gPaletteFade -_08052C84: .4byte gSprites -_08052C88: - movs r1, 0x1 - negs r1, r1 - movs r0, 0 - str r0, [sp] - adds r0, r1, 0 - movs r2, 0x10 - movs r3, 0 - bl BeginNormalPaletteFade - ldr r5, _08052CCC @ =sGlowBallSpriteTemplate - adds r0, r5, 0 - movs r1, 0x6F - movs r2, 0xAA - movs r3, 0 - bl CreateSprite - ldr r4, _08052CD0 @ =sTradeData - ldr r1, [r4] - adds r1, 0x90 - strb r0, [r1] - movs r2, 0xA - negs r2, r2 - adds r0, r5, 0 - movs r1, 0x81 - movs r3, 0 - bl CreateSprite - ldr r1, [r4] - adds r1, 0x91 - strb r0, [r1] - ldr r1, [r4] - bl _08053708 - .align 2, 0 -_08052CCC: .4byte sGlowBallSpriteTemplate -_08052CD0: .4byte sTradeData -_08052CD4: - ldr r0, _08052D24 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _08052CF2 - movs r0, 0x28 - bl PlaySE - ldr r0, _08052D28 @ =sTradeData - ldr r1, [r0] - adds r1, 0x94 - ldrh r0, [r1] - adds r0, 0x1 - strh r0, [r1] -_08052CF2: - ldr r3, _08052D2C @ =gSprites - ldr r0, _08052D28 @ =sTradeData - ldr r2, [r0] - adds r0, r2, 0 - adds r0, 0x90 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r3 - ldrh r1, [r0, 0x26] - subs r1, 0x3 - strh r1, [r0, 0x26] - adds r2, 0x91 - ldrb r1, [r2] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r3 - ldrh r1, [r0, 0x26] - adds r1, 0x3 - strh r1, [r0, 0x26] - bl _08053774 - .align 2, 0 -_08052D24: .4byte gPaletteFade -_08052D28: .4byte sTradeData -_08052D2C: .4byte gSprites -_08052D30: - ldr r5, _08052D94 @ =gSprites - ldr r4, [r7] - adds r2, r4, 0 - adds r2, 0x90 - ldrb r1, [r2] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - ldrh r1, [r0, 0x26] - subs r1, 0x3 - strh r1, [r0, 0x26] - adds r6, r4, 0 - adds r6, 0x91 - ldrb r1, [r6] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - ldrh r1, [r0, 0x26] - adds r1, 0x3 - strh r1, [r0, 0x26] - ldrb r1, [r2] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r3, r0, r5 - movs r0, 0x26 - ldrsh r1, [r3, r0] - movs r0, 0x5A - negs r0, r0 - cmp r1, r0 - ble _08052D76 - bl _08053774 -_08052D76: - movs r2, 0x1 - strh r2, [r3, 0x30] - ldrb r1, [r6] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - strh r2, [r0, 0x30] - adds r1, r4, 0 - adds r1, 0x94 - ldrh r0, [r1] - adds r0, 0x1 - strh r0, [r1] - ldr r0, _08052D98 @ =c3_0805465C - b _08052FBE - .align 2, 0 -_08052D94: .4byte gSprites -_08052D98: .4byte c3_0805465C -_08052D9C: - ldr r2, _08052DAC @ =0x0000ffff - movs r0, 0x8 - movs r1, 0x10 - bl BlendPalettes - bl _08053704 - .align 2, 0 -_08052DAC: .4byte 0x0000ffff -_08052DB0: - ldr r2, _08052DC0 @ =0x0000ffff - movs r0, 0x8 - movs r1, 0x10 - bl BlendPalettes - bl _08053704 - .align 2, 0 -_08052DC0: .4byte 0x0000ffff -_08052DC4: - ldr r2, _08052DD4 @ =0x0000ffff - movs r0, 0x8 - movs r1, 0x10 - bl BlendPalettes - bl _08053704 - .align 2, 0 -_08052DD4: .4byte 0x0000ffff -_08052DD8: - ldr r5, _08052E44 @ =sTradeData - ldr r0, [r5] - adds r0, 0xF0 - ldrh r0, [r0] - bl IsPokeSpriteNotFlipped - lsls r0, 24 - cmp r0, 0 - bne _08052E50 - ldr r4, _08052E48 @ =gSprites - ldr r2, [r5] - adds r2, 0x8E - ldrb r1, [r2] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r1, r4, 0 - adds r1, 0x10 - adds r0, r1 - ldr r1, _08052E4C @ =gUnknown_826CF88 - str r1, [r0] - ldrb r1, [r2] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - ldrb r1, [r0, 0x1] - movs r2, 0x3 - orrs r1, r2 - strb r1, [r0, 0x1] - ldr r0, [r5] - adds r0, 0x8E - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - movs r1, 0 - movs r2, 0x3 - movs r3, 0x3 - bl CalcCenterToCornerVec - ldr r0, [r5] - adds r0, 0x8E - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - movs r1, 0 - bl StartSpriteAffineAnim - b _08052E66 - .align 2, 0 -_08052E44: .4byte sTradeData -_08052E48: .4byte gSprites -_08052E4C: .4byte gUnknown_826CF88 -_08052E50: - ldr r0, [r5] - adds r0, 0x8E - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _08052EF4 @ =gSprites - adds r0, r1 - movs r1, 0 - bl StartSpriteAffineAnim -_08052E66: - ldr r5, _08052EF8 @ =sTradeData - ldr r0, [r5] - adds r0, 0x8F - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r4, _08052EF4 @ =gSprites - adds r0, r4 - movs r1, 0 - bl StartSpriteAffineAnim - ldr r2, [r5] - adds r3, r2, 0 - adds r3, 0x8E - ldrb r1, [r3] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - movs r1, 0x28 - strh r1, [r0, 0x20] - adds r2, 0x8F - ldrb r1, [r2] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - movs r1, 0xC8 - strh r1, [r0, 0x20] - ldrb r1, [r3] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - movs r1, 0xC0 - strh r1, [r0, 0x22] - ldrb r1, [r2] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - ldr r1, _08052EFC @ =0x0000ffe0 - strh r1, [r0, 0x22] - ldrb r0, [r3] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r4 - adds r1, 0x3E - ldrb r3, [r1] - movs r2, 0x5 - negs r2, r2 - adds r0, r2, 0 - ands r0, r3 - strb r0, [r1] - ldr r0, [r5] - adds r0, 0x8F - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - adds r0, 0x3E - ldrb r1, [r0] - ands r2, r1 - strb r2, [r0] - ldr r1, [r5] - bl _08053708 - .align 2, 0 -_08052EF4: .4byte gSprites -_08052EF8: .4byte sTradeData -_08052EFC: .4byte 0x0000ffe0 -_08052F00: - ldr r4, _08052FC8 @ =gSprites - ldr r2, [r7] - adds r3, r2, 0 - adds r3, 0x8E - ldrb r1, [r3] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - ldrh r1, [r0, 0x26] - subs r1, 0x3 - movs r5, 0 - strh r1, [r0, 0x26] - adds r2, 0x8F - ldrb r1, [r2] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - ldrh r1, [r0, 0x26] - adds r1, 0x3 - strh r1, [r0, 0x26] - ldrb r1, [r3] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - ldrh r0, [r0, 0x26] - adds r0, 0xA3 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x2 - bhi _08052F48 - movs r0, 0x27 - bl PlaySE -_08052F48: - ldr r2, [r7] - adds r3, r2, 0 - adds r3, 0x8E - ldrb r1, [r3] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - movs r6, 0x26 - ldrsh r1, [r0, r6] - movs r0, 0xDE - negs r0, r0 - cmp r1, r0 - blt _08052F68 - bl _08053774 -_08052F68: - adds r0, r2, 0 - adds r0, 0x90 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - strh r5, [r0, 0x30] - adds r0, r2, 0 - adds r0, 0x91 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - strh r5, [r0, 0x30] - adds r1, r2, 0 - adds r1, 0x94 - ldrh r0, [r1] - adds r0, 0x1 - strh r0, [r1] - ldrb r1, [r3] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - adds r0, 0x3E - ldrb r1, [r0] - movs r2, 0x4 - orrs r1, r2 - strb r1, [r0] - ldr r0, [r7] - adds r0, 0x8F - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - adds r0, 0x3E - ldrb r1, [r0] - orrs r1, r2 - strb r1, [r0] - ldr r0, _08052FCC @ =sub_8054734 -_08052FBE: - movs r1, 0x5 - bl CreateTask - bl _08053774 - .align 2, 0 -_08052FC8: .4byte gSprites -_08052FCC: .4byte sub_8054734 -_08052FD0: - ldr r4, _08053054 @ =gSprites - ldr r2, [r7] - adds r3, r2, 0 - adds r3, 0x90 - ldrb r1, [r3] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - ldrh r1, [r0, 0x26] - subs r1, 0x3 - strh r1, [r0, 0x26] - adds r2, 0x91 - ldrb r1, [r2] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - ldrh r1, [r0, 0x26] - adds r1, 0x3 - strh r1, [r0, 0x26] - ldrb r1, [r3] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - movs r2, 0x26 - ldrsh r1, [r0, r2] - movs r0, 0xDE - negs r0, r0 - cmp r1, r0 - ble _08053012 - b _08053774 -_08053012: - movs r1, 0x1 - negs r1, r1 - movs r0, 0 - str r0, [sp] - adds r0, r1, 0 - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - ldr r1, [r7] - adds r2, r1, 0 - adds r2, 0x94 - ldrh r0, [r2] - adds r0, 0x1 - strh r0, [r2] - adds r1, 0x90 - ldrb r1, [r1] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - bl DestroySprite - ldr r0, [r7] - adds r0, 0x91 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - bl DestroySprite - b _08053774 - .align 2, 0 -_08053054: .4byte gSprites -_08053058: - ldr r0, _080530E4 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _08053066 - b _08053774 -_08053066: - ldr r1, [r7] - adds r1, 0x94 - ldrh r0, [r1] - adds r0, 0x1 - strh r0, [r1] - movs r0, 0x1 - bl SetTradeSequenceBgGpuRegs - ldr r0, [r7] - adds r0, 0xE0 - movs r1, 0xA6 - strh r1, [r0] - movs r0, 0x3 - bl SetTradeSequenceBgGpuRegs - ldr r0, [r7] - adds r0, 0xE4 - movs r1, 0xCE - lsls r1, 1 - strh r1, [r0] - ldr r0, _080530E8 @ =gUnknown_826CE44 - movs r4, 0x14 - negs r4, r4 - movs r1, 0x78 - adds r2, r4, 0 - movs r3, 0x3 - bl CreateSprite - ldr r1, [r7] - adds r1, 0x90 - strb r0, [r1] - ldr r5, _080530EC @ =gSprites - ldr r0, [r7] - adds r0, 0x90 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r1, r5, 0 - adds r1, 0x1C - adds r0, r1 - ldr r1, _080530F0 @ =SpriteCB_TradeGlowWireless - str r1, [r0] - ldr r0, _080530F4 @ =sGlowBallSpriteTemplate - movs r1, 0x78 - adds r2, r4, 0 - movs r3, 0 - bl CreateSprite - ldr r1, [r7] - adds r1, 0x91 - strb r0, [r1] - ldr r0, [r7] - adds r0, 0x91 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - movs r1, 0x1 - bl StartSpriteAnim - b _08053774 - .align 2, 0 -_080530E4: .4byte gPaletteFade -_080530E8: .4byte gUnknown_826CE44 -_080530EC: .4byte gSprites -_080530F0: .4byte SpriteCB_TradeGlowWireless -_080530F4: .4byte sGlowBallSpriteTemplate -_080530F8: - movs r1, 0x1 - negs r1, r1 - movs r0, 0 - str r0, [sp] - adds r0, r1, 0 - movs r2, 0x10 - movs r3, 0 - b _08053700 -_08053108: - movs r1, 0x92 - lsls r1, 5 - movs r0, 0 - bl SetGpuReg - ldr r0, _08053124 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _08053120 - b _08053774 -_08053120: - b _08053704 - .align 2, 0 -_08053124: .4byte gPaletteFade -_08053128: - ldr r2, _0805317C @ =gSprites - ldr r4, [r7] - adds r3, r4, 0 - adds r3, 0x90 - ldrb r1, [r3] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrh r1, [r0, 0x26] - adds r1, 0x4 - strh r1, [r0, 0x26] - adds r0, r4, 0 - adds r0, 0x91 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrh r1, [r0, 0x26] - adds r1, 0x4 - strh r1, [r0, 0x26] - ldrb r1, [r3] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - movs r6, 0x26 - ldrsh r1, [r0, r6] - movs r2, 0x22 - ldrsh r0, [r0, r2] - adds r1, r0 - cmp r1, 0x40 - beq _0805316E - b _08053774 -_0805316E: - adds r0, r4, 0 - adds r0, 0x94 - movs r1, 0x90 - strh r1, [r0] - movs r0, 0 - str r0, [r4, 0x64] - b _08053774 - .align 2, 0 -_0805317C: .4byte gSprites -_08053180: - movs r1, 0xB2 - lsls r1, 5 - movs r0, 0 - bl SetGpuReg - ldr r4, _080531DC @ =sTradeData - ldr r2, [r4] - adds r1, r2, 0 - adds r1, 0xE0 - ldrh r0, [r1] - adds r0, 0x3 - strh r0, [r1] - adds r1, 0x4 - ldrh r0, [r1] - adds r0, 0x3 - strh r0, [r1] - ldr r0, [r2, 0x64] - adds r0, 0x1 - str r0, [r2, 0x64] - cmp r0, 0xA - bne _080531C4 - ldr r0, _080531E0 @ =c3_08054588 - movs r1, 0x5 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080531E4 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - movs r0, 0x1 - strh r0, [r1, 0xC] -_080531C4: - ldr r1, [r4] - adds r3, r1, 0 - adds r3, 0xE0 - movs r6, 0 - ldrsh r0, [r3, r6] - movs r2, 0x9E - lsls r2, 1 - cmp r0, r2 - bgt _080531D8 - b _08053774 -_080531D8: - strh r2, [r3] - b _08053708 - .align 2, 0 -_080531DC: .4byte sTradeData -_080531E0: .4byte c3_08054588 -_080531E4: .4byte gTasks -_080531E8: - ldr r0, [r7] - adds r0, 0x90 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r4, _08053220 @ =gSprites - adds r0, r4 - bl DestroySprite - ldr r0, [r7] - adds r0, 0x91 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - bl DestroySprite - ldr r3, [r7] - adds r2, r3, 0 - adds r2, 0x94 - ldrh r0, [r2] - adds r0, 0x1 - movs r1, 0 - strh r0, [r2] - str r1, [r3, 0x64] - b _08053774 - .align 2, 0 -_08053220: .4byte gSprites -_08053224: - ldr r0, _08053244 @ =c3_08054588 - bl FuncIsActiveTask - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, 0 - beq _08053234 - b _08053774 -_08053234: - ldr r0, _08053248 @ =sTradeData - ldr r2, [r0] - adds r1, r2, 0 - adds r1, 0x94 - movs r0, 0x2E - strh r0, [r1] - str r3, [r2, 0x64] - b _08053774 - .align 2, 0 -_08053244: .4byte c3_08054588 -_08053248: .4byte sTradeData -_0805324C: - ldr r1, [r7] - ldr r0, [r1, 0x64] - adds r0, 0x1 - str r0, [r1, 0x64] - cmp r0, 0xA - beq _0805325A - b _08053774 -_0805325A: - b _08053708 -_0805325C: - ldr r1, [r7] - adds r5, r1, 0 - adds r5, 0xE0 - ldrh r0, [r5] - adds r0, 0x1 - strh r0, [r5] - lsls r0, 16 - asrs r0, 16 - movs r6, 0xAE - lsls r6, 1 - cmp r0, r6 - bgt _08053276 - b _08053774 -_08053276: - strh r6, [r5] - b _08053708 -_0805327A: - ldr r0, _08053298 @ =gUnknown_826CF30 - movs r1, 0x78 - movs r2, 0x50 - movs r3, 0 - bl CreateSprite - ldr r2, _0805329C @ =sTradeData - ldr r1, [r2] - adds r1, 0x91 - strb r0, [r1] - ldr r0, [r2] - adds r0, 0x94 - movs r1, 0x32 - strh r1, [r0] - b _08053774 - .align 2, 0 -_08053298: .4byte gUnknown_826CF30 -_0805329C: .4byte sTradeData -_080532A0: - ldr r2, _080532DC @ =gSprites - ldr r0, [r7] - adds r0, 0x91 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r1, r0, r2 - adds r0, r1, 0 - adds r0, 0x3F - ldrb r0, [r0] - lsls r0, 27 - cmp r0, 0 - blt _080532BE - b _08053774 -_080532BE: - adds r0, r1, 0 - bl DestroySprite - movs r0, 0x6 - bl SetTradeSequenceBgGpuRegs - ldr r1, [r7] - adds r1, 0x94 - ldrh r0, [r1] - adds r0, 0x1 - strh r0, [r1] - movs r0, 0x98 - bl PlaySE - b _08053774 - .align 2, 0 -_080532DC: .4byte gSprites -_080532E0: - ldr r1, [r7] - adds r2, r1, 0 - adds r2, 0xEA - ldrh r3, [r2] - ldr r0, _080532F8 @ =0x000003ff - cmp r3, r0 - bhi _080532FC - adds r0, r3, 0 - adds r0, 0x34 - strh r0, [r2] - b _0805330A - .align 2, 0 -_080532F8: .4byte 0x000003ff -_080532FC: - movs r0, 0x80 - lsls r0, 3 - strh r0, [r2] - adds r1, 0x94 - ldrh r0, [r1] - adds r0, 0x1 - strh r0, [r1] -_0805330A: - ldr r4, [r7] -_0805330C: - adds r0, r4, 0 - adds r0, 0xEA - ldrh r1, [r0] - movs r0, 0x80 - lsls r0, 8 - bl __divsi3 - adds r4, 0xE8 - strh r0, [r4] - b _08053774 -_08053320: - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - ldr r0, _0805333C @ =sTradeData - ldr r0, [r0] - adds r0, 0x94 - movs r1, 0x3C - strh r1, [r0] - b _08053774 - .align 2, 0 -_0805333C: .4byte sTradeData -_08053340: - ldr r4, _08053364 @ =gPaletteFade - ldrb r1, [r4, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _0805334E - b _08053774 -_0805334E: - movs r0, 0x5 - bl SetTradeSequenceBgGpuRegs - movs r0, 0x7 - bl SetTradeSequenceBgGpuRegs - ldrb r0, [r4, 0x8] - movs r1, 0x80 - orrs r0, r1 - strb r0, [r4, 0x8] - b _08053704 - .align 2, 0 -_08053364: .4byte gPaletteFade -_08053368: - ldr r2, _08053380 @ =gPaletteFade - ldrb r1, [r2, 0x8] - movs r0, 0x7F - ands r0, r1 - strb r0, [r2, 0x8] - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0x10 - movs r3, 0 - b _08053700 - .align 2, 0 -_08053380: .4byte gPaletteFade -_08053384: - movs r1, 0xA2 - lsls r1, 5 - movs r0, 0 - bl SetGpuReg - ldr r0, _080533A0 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _0805339C - b _08053774 -_0805339C: - b _08053704 - .align 2, 0 -_080533A0: .4byte gPaletteFade -_080533A4: - ldr r0, _08053438 @ =sTradePokeballSpriteTemplate - movs r2, 0x8 - negs r2, r2 - movs r1, 0x78 - movs r3, 0 - bl CreateSprite - ldr r5, _0805343C @ =sTradeData - ldr r1, [r5] - adds r1, 0xD3 - movs r6, 0 - strb r0, [r1] - ldr r4, _08053440 @ =gSprites - ldr r2, [r5] - adds r2, 0xD3 - ldrb r1, [r2] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - movs r1, 0x4A - strh r1, [r0, 0x34] - ldrb r1, [r2] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r1, r4, 0 - adds r1, 0x1C - adds r0, r1 - ldr r1, _08053444 @ =SpriteCB_TradePokeball_Inbound - str r1, [r0] - ldrb r1, [r2] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - movs r1, 0x1 - bl StartSpriteAnim - ldr r0, [r5] - adds r0, 0xD3 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - movs r1, 0x2 - bl StartSpriteAffineAnim - ldr r0, [r5] - adds r0, 0xD3 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - ldrb r1, [r0, 0x5] - lsrs r1, 4 - adds r1, 0x10 - movs r0, 0x1 - lsls r0, r1 - ldr r2, _08053448 @ =0x0000ffff - movs r1, 0x10 - bl BlendPalettes - ldr r2, [r5] - adds r1, r2, 0 - adds r1, 0x94 - ldrh r0, [r1] - adds r0, 0x1 - strh r0, [r1] - str r6, [r2, 0x64] - b _08053774 - .align 2, 0 -_08053438: .4byte sTradePokeballSpriteTemplate -_0805343C: .4byte sTradeData -_08053440: .4byte gSprites -_08053444: .4byte SpriteCB_TradePokeball_Inbound -_08053448: .4byte 0x0000ffff -_0805344C: - ldr r2, _08053478 @ =gSprites - ldr r0, [r7] - adds r0, 0xD3 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r1, [r0, 0x5] - lsrs r1, 4 - adds r1, 0x10 - movs r0, 0x1 - lsls r0, r1 - ldr r1, _0805347C @ =0x0000ffff - str r1, [sp] - movs r1, 0x1 - movs r2, 0x10 - movs r3, 0 - bl BeginNormalPaletteFade - ldr r1, [r7] - b _08053708 - .align 2, 0 -_08053478: .4byte gSprites -_0805347C: .4byte 0x0000ffff -_08053480: - ldr r2, _080534BC @ =gSprites - ldr r3, [r7] - adds r0, r3, 0 - adds r0, 0xD3 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r2, 0x1C - adds r0, r2 - ldr r1, [r0] - ldr r0, _080534C0 @ =SpriteCallbackDummy - cmp r1, r0 - beq _0805349E - b _08053774 -_0805349E: - adds r0, r3, 0 - adds r0, 0xF2 - ldrh r2, [r0] - lsls r0, r2, 3 - ldr r1, _080534C4 @ =gMonFrontPicTable - adds r0, r1 - ldr r1, _080534C8 @ =gMonSpritesGfxPtr - ldr r1, [r1] - ldr r1, [r1, 0x10] - ldr r3, [r3, 0x6C] - bl HandleLoadSpecialPokePic - ldr r1, [r7] - b _08053708 - .align 2, 0 -_080534BC: .4byte gSprites -_080534C0: .4byte SpriteCallbackDummy -_080534C4: .4byte gMonFrontPicTable -_080534C8: .4byte gMonSpritesGfxPtr -_080534CC: - ldr r4, _08053578 @ =gSprites - ldr r2, [r7] - adds r6, r2, 0 - adds r6, 0x8F - ldrb r1, [r6] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - movs r5, 0 - movs r1, 0x78 - strh r1, [r0, 0x20] - ldrb r0, [r6] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r4 - ldr r3, _0805357C @ =gMonFrontPicCoords - adds r2, 0xF2 - ldrh r0, [r2] - lsls r0, 2 - adds r0, r3 - ldrb r0, [r0, 0x1] - adds r0, 0x3C - strh r0, [r1, 0x22] - ldrb r1, [r6] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - strh r5, [r0, 0x24] - ldrb r1, [r6] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - strh r5, [r0, 0x26] - ldrb r1, [r6] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - movs r1, 0 - bl StartSpriteAnim - ldr r0, [r7] - adds r0, 0x8F - ldrb r0, [r0] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r4 - ldrb r1, [r1, 0x5] - lsrs r1, 4 - movs r2, 0x2 - str r2, [sp] - movs r2, 0x1 - str r2, [sp, 0x4] - movs r2, 0x14 - str r2, [sp, 0x8] - ldr r2, _08053580 @ =0x000fffff - str r2, [sp, 0xC] - movs r2, 0x78 - movs r3, 0x54 - bl CreatePokeballSpriteToReleaseMon - ldr r0, [r7] - adds r0, 0xD3 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - bl FreeSpriteOamMatrix - ldr r0, [r7] - adds r0, 0xD3 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - bl DestroySprite - ldr r1, [r7] - b _08053708 - .align 2, 0 -_08053578: .4byte gSprites -_0805357C: .4byte gMonFrontPicCoords -_08053580: .4byte 0x000fffff -_08053584: - movs r1, 0xAA - lsls r1, 5 - movs r0, 0 - bl SetGpuReg - ldr r4, _080535B0 @ =gStringVar4 - ldr r1, _080535B4 @ =gText_XSentOverY - adds r0, r4, 0 - bl StringExpandPlaceholders - movs r0, 0 - adds r1, r4, 0 - movs r2, 0 - bl DrawTextOnTradeWindow - ldr r0, _080535B8 @ =sTradeData - ldr r3, [r0] - adds r1, r3, 0 - adds r1, 0x94 - movs r2, 0 - movs r0, 0xA7 - b _080535EA - .align 2, 0 -_080535B0: .4byte gStringVar4 -_080535B4: .4byte gText_XSentOverY -_080535B8: .4byte sTradeData -_080535BC: - ldr r1, [r7] - ldr r0, [r1, 0x64] - adds r0, 0x1 - str r0, [r1, 0x64] - cmp r0, 0x3C - bhi _080535CA - b _08053774 -_080535CA: - adds r2, r1, 0 - adds r2, 0xF2 - ldrh r1, [r2] - movs r0, 0xCE - lsls r0, 1 - cmp r1, r0 - beq _080535E0 - adds r0, r1, 0 - movs r1, 0 - bl PlayCry1 -_080535E0: - ldr r3, [r7] - adds r1, r3, 0 - adds r1, 0x94 - movs r2, 0 - ldr r0, _080535F0 @ =0x0000010b -_080535EA: - strh r0, [r1] - str r2, [r3, 0x64] - b _08053774 - .align 2, 0 -_080535F0: .4byte 0x0000010b -_080535F4: - bl IsCryFinished - lsls r0, 24 - cmp r0, 0 - bne _08053600 - b _08053774 -_08053600: - ldr r0, _0805360C @ =sTradeData - ldr r0, [r0] - adds r0, 0x94 - movs r1, 0x44 - strh r1, [r0] - b _08053774 - .align 2, 0 -_0805360C: .4byte sTradeData -_08053610: - ldr r1, [r7] - ldr r0, [r1, 0x64] - adds r0, 0x1 - str r0, [r1, 0x64] - cmp r0, 0xA - bne _08053622 - ldr r0, _08053650 @ =0x00000103 - bl PlayFanfare -_08053622: - ldr r1, [r7] - ldr r0, [r1, 0x64] - cmp r0, 0xFA - beq _0805362C - b _08053774 -_0805362C: - adds r1, 0x94 - ldrh r0, [r1] - adds r0, 0x1 - movs r5, 0 - strh r0, [r1] - ldr r4, _08053654 @ =gStringVar4 - ldr r1, _08053658 @ =gText_TakeGoodCareOfX - adds r0, r4, 0 - bl StringExpandPlaceholders - movs r0, 0 - adds r1, r4, 0 - movs r2, 0 - bl DrawTextOnTradeWindow - ldr r0, [r7] - str r5, [r0, 0x64] - b _08053774 - .align 2, 0 -_08053650: .4byte 0x00000103 -_08053654: .4byte gStringVar4 -_08053658: .4byte gText_TakeGoodCareOfX -_0805365C: - ldr r1, [r7] - ldr r0, [r1, 0x64] - adds r0, 0x1 - str r0, [r1, 0x64] - cmp r0, 0x3C - beq _0805366A - b _08053774 -_0805366A: - b _08053708 -_0805366C: - bl CheckPartnersMonForRibbons - b _08053704 -_08053672: - ldr r2, [r7] - adds r0, r2, 0 - adds r0, 0xEE - ldrb r0, [r0] - cmp r0, 0 - beq _08053682 - movs r0, 0x1 - b _08053776 -_08053682: - ldr r0, _08053694 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _08053774 - adds r1, r2, 0 - b _08053708 - .align 2, 0 -_08053694: .4byte gMain -_08053698: - ldr r0, _080536DC @ =gSpecialVar_0x8005 - ldrb r0, [r0] - movs r1, 0 - bl TradeMons - ldr r1, _080536E0 @ =gCB2_AfterEvolution - ldr r0, _080536E4 @ =CB2_RunTradeAnim_InGameTrade - str r0, [r1] - ldr r7, _080536E8 @ =gSelectedTradeMonPositions - ldrb r0, [r7] - movs r6, 0x64 - muls r0, r6 - ldr r5, _080536EC @ =gPlayerParty - adds r0, r5 - movs r1, 0x1 - movs r2, 0 - bl GetEvolutionTargetSpecies - lsls r0, 16 - lsrs r4, r0, 16 - cmp r4, 0 - beq _08053704 - ldrb r3, [r7] - adds r0, r3, 0 - muls r0, r6 - adds r0, r5 - ldr r1, _080536F0 @ =sTradeData - ldr r1, [r1] - adds r1, 0x8F - ldrb r2, [r1] - adds r1, r4, 0 - bl TradeEvolutionScene - b _08053704 - .align 2, 0 -_080536DC: .4byte gSpecialVar_0x8005 -_080536E0: .4byte gCB2_AfterEvolution -_080536E4: .4byte CB2_RunTradeAnim_InGameTrade -_080536E8: .4byte gSelectedTradeMonPositions -_080536EC: .4byte gPlayerParty -_080536F0: .4byte sTradeData -_080536F4: - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0 - movs r3, 0x10 -_08053700: - bl BeginNormalPaletteFade -_08053704: - ldr r0, _08053714 @ =sTradeData - ldr r1, [r0] -_08053708: - adds r1, 0x94 - ldrh r0, [r1] - adds r0, 0x1 - strh r0, [r1] - b _08053774 - .align 2, 0 -_08053714: .4byte sTradeData -_08053718: - ldr r0, _08053780 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0 - bne _08053774 - ldr r0, [r7] - adds r0, 0xF4 - ldrh r0, [r0] - bl PlayNewMapMusic - ldr r0, [r7] - cmp r0, 0 - beq _08053766 - bl FreeAllWindowBuffers - movs r0, 0x3 - bl GetBgTilemapBuffer - bl Free - movs r0, 0x1 - bl GetBgTilemapBuffer - bl Free - movs r0, 0 - bl GetBgTilemapBuffer - bl Free - bl FreeMonSpritesGfx - ldr r0, [r7] - bl Free - str r4, [r7] -_08053766: - ldr r0, _08053784 @ =CB2_ReturnToField - bl SetMainCallback2 - bl BufferInGameTradeMonName - bl HelpSystem_Enable -_08053774: - movs r0, 0 -_08053776: - add sp, 0x10 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_08053780: .4byte gPaletteFade -_08053784: .4byte CB2_ReturnToField - thumb_func_end sub_805232C - thumb_func_start sub_8053788 sub_8053788: @ 8053788 push {r4-r7,lr} @@ -3856,8 +1631,8 @@ _08054580: .4byte sTradeData _08054584: .4byte 0x00000105 thumb_func_end DrawTextOnTradeWindow - thumb_func_start c3_08054588 -c3_08054588: @ 8054588 + thumb_func_start Task_AnimateWirelessSignal +Task_AnimateWirelessSignal: @ 8054588 push {r4,r5,lr} lsls r0, 24 lsrs r5, r0, 24 @@ -3964,7 +1739,7 @@ _08054656: pop {r4,r5} pop {r0} bx r0 - thumb_func_end c3_08054588 + thumb_func_end Task_AnimateWirelessSignal thumb_func_start c3_0805465C c3_0805465C: @ 805465C diff --git a/src/trade.c b/src/trade.c index a21781753..40be0774b 100644 --- a/src/trade.c +++ b/src/trade.c @@ -208,6 +208,9 @@ void CheckPartnersMonForRibbons(void); void BufferInGameTradeMonName(void); void SpriteCB_TradePokeball_Outbound(struct Sprite * sprite); void SpriteCB_TradePokeball_Inbound(struct Sprite * sprite); +void Task_AnimateWirelessSignal(u8 taskId); +void c3_0805465C(u8 taskId); +void sub_8054734(u8 taskId); extern const u16 gUnknown_8260C30[]; extern const u16 gUnknown_8261430[]; @@ -262,6 +265,7 @@ extern const struct SpriteTemplate sGameLinkCableEndSpriteTemplate; extern const struct SpriteTemplate gUnknown_826CE44; extern const struct SpriteTemplate sGlowBallSpriteTemplate; extern const union AffineAnimCmd *const gUnknown_826CF88[]; +extern const struct SpriteTemplate gUnknown_826CF48; void sub_804C600(void) { @@ -4749,7 +4753,6 @@ bool8 sub_8050F14(void) return sub_805232C(); } - bool8 sub_8050F3C(void) { u16 evoTarget; @@ -5246,3 +5249,524 @@ bool8 sub_8050F3C(void) } return FALSE; } + +bool8 sub_805232C(void) +{ + u16 evoTarget; + + switch (sTradeData->state) + { + case 0: + gSprites[sTradeData->pokePicSpriteIdxs[0]].invisible = FALSE; + gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.x = -180; + gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.y = gMonFrontPicCoords[sTradeData->tradeSpecies[0]].y_offset; + sTradeData->state++; + sTradeData->cachedMapMusic = GetCurrentMapMusic(); + PlayNewMapMusic(MUS_SHINKA); + break; + case 1: + if (sTradeData->bg2hofs > 0) + { + gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.x += 3; + sTradeData->bg2hofs -= 3; + } + else + { + gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.x = 0; + sTradeData->bg2hofs = 0; + sTradeData->state = 10; + } + break; + case 10: + StringExpandPlaceholders(gStringVar4, gText_XWillBeSentToY); + DrawTextOnTradeWindow(0, gStringVar4, 0); + + if (sTradeData->tradeSpecies[0] != SPECIES_EGG) + { + PlayCry1(sTradeData->tradeSpecies[0], 0); + } + + sTradeData->state = 11; + sTradeData->timer = 0; + break; + case 11: + if (++sTradeData->timer == 80) + { + sTradeData->pokeballSpriteId = CreateTradePokeballSprite(sTradeData->pokePicSpriteIdxs[0], gSprites[sTradeData->pokePicSpriteIdxs[0]].oam.paletteNum, 120, 32, 2, 1, 0x14, 0xfffff); + sTradeData->state++; + StringExpandPlaceholders(gStringVar4, gText_ByeByeVar1); + DrawTextOnTradeWindow(0, gStringVar4, 0); + } + break; + case 12: + if (gSprites[sTradeData->pokeballSpriteId].callback == SpriteCallbackDummy) + { + sTradeData->unk_D3 = CreateSprite(&sTradePokeballSpriteTemplate, 120, 32, 0); + gSprites[sTradeData->unk_D3].callback = SpriteCB_TradePokeball_Outbound; + DestroySprite(&gSprites[sTradeData->pokeballSpriteId]); + sTradeData->state++; + } + break; + case 13: + // The game waits here for the sprite to finish its animation sequence. + break; + case 14: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + sTradeData->state = 20; + break; + case 20: + if (!gPaletteFade.active) + { + SetTradeSequenceBgGpuRegs(4); + FillWindowPixelBuffer(0, PIXEL_FILL(15)); + CopyWindowToVram(0, 3); + sTradeData->state++; + } + break; + case 21: + BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK); + sTradeData->state++; + break; + case 22: + if (!gPaletteFade.active) + { + sTradeData->state = 23; + } + break; + case 23: + if (sTradeData->unk_EA > 0x100) + { + sTradeData->unk_EA -= 0x34; + } + else + { + SetTradeSequenceBgGpuRegs(1); + sTradeData->unk_EA = 0x80; + sTradeData->state = 124; + sTradeData->timer = 0; + } + sTradeData->sXY = 0x8000 / sTradeData->unk_EA; + break; + case 124: + if (++sTradeData->timer > 20) + { + SetTradeSequenceBgGpuRegs(3); + sTradeData->unk_91 = CreateSprite(&gUnknown_826CF48, 120, 80, 0); + sTradeData->state++; + } + break; + case 125: + if (gSprites[sTradeData->unk_91].animEnded) + { + DestroySprite(&gSprites[sTradeData->unk_91]); + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG1 | + BLDCNT_TGT1_OBJ | + BLDCNT_EFFECT_BLEND | + BLDCNT_TGT2_BG2); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16, 4)); + CreateTask(Task_AnimateWirelessSignal, 5); + sTradeData->state++; + } + break; + case 126: + if (!FuncIsActiveTask(Task_AnimateWirelessSignal)) + { + sTradeData->state = 26; + } + break; + case 26: + if (--sTradeData->bg1vofs == 316) + { + sTradeData->state++; + } + break; + case 27: + sTradeData->unk_90 = CreateSprite(&gUnknown_826CE44, 120, 80, 3); + gSprites[sTradeData->unk_90].callback = SpriteCB_TradeGlowWireless; + sTradeData->unk_91 = CreateSprite(&sGlowBallSpriteTemplate, 120, 80, 0); + StartSpriteAnim(&gSprites[sTradeData->unk_91], 1); + sTradeData->state++; + break; + case 28: + if ((sTradeData->bg1vofs -= 3) == 166) + { + sTradeData->state = 200; + } + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1 | + DISPCNT_OBJ_1D_MAP | + DISPCNT_BG1_ON | + DISPCNT_OBJ_ON); + break; + case 200: + gSprites[sTradeData->unk_90].pos1.y -= 2; + gSprites[sTradeData->unk_91].pos1.y -= 2; + if (gSprites[sTradeData->unk_90].pos1.y < -8) + { + sTradeData->state = 29; + } + break; + case 29: + BeginNormalPaletteFade(0xFFFFFFFF, -1, 0, 16, RGB_BLACK); + sTradeData->state = 30; + break; + case 30: + if (!gPaletteFade.active) + { + DestroySprite(&gSprites[sTradeData->unk_90]); + DestroySprite(&gSprites[sTradeData->unk_91]); + SetTradeSequenceBgGpuRegs(2); + sTradeData->state++; + } + break; + case 31: + BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK); + sTradeData->unk_90 = CreateSprite(&sGlowBallSpriteTemplate, 111, 170, 0); + sTradeData->unk_91 = CreateSprite(&sGlowBallSpriteTemplate, 129, -10, 0); + sTradeData->state++; + break; + case 32: + if (!gPaletteFade.active) + { + PlaySE(SE_TK_WARPOUT); + sTradeData->state++; + } + gSprites[sTradeData->unk_90].pos2.y -= 3; + gSprites[sTradeData->unk_91].pos2.y += 3; + break; + case 33: + gSprites[sTradeData->unk_90].pos2.y -= 3; + gSprites[sTradeData->unk_91].pos2.y += 3; + if (gSprites[sTradeData->unk_90].pos2.y <= -90) + { + gSprites[sTradeData->unk_90].data[1] = 1; + gSprites[sTradeData->unk_91].data[1] = 1; + sTradeData->state++; + CreateTask(c3_0805465C, 5); + } + break; + case 34: + BlendPalettes(0x8, 16, RGB_WHITEALPHA); + sTradeData->state++; + break; + case 35: + BlendPalettes(0x8, 16, RGB_WHITEALPHA); + sTradeData->state++; + break; + case 36: + BlendPalettes(0x8, 16, RGB_WHITEALPHA); + sTradeData->state++; + break; + case 37: + if (!IsPokeSpriteNotFlipped(sTradeData->tradeSpecies[0])) + { + gSprites[sTradeData->pokePicSpriteIdxs[0]].affineAnims = gUnknown_826CF88; + gSprites[sTradeData->pokePicSpriteIdxs[0]].oam.affineMode = 3; + CalcCenterToCornerVec(&gSprites[sTradeData->pokePicSpriteIdxs[0]], 0, 3, 3); + StartSpriteAffineAnim(&gSprites[sTradeData->pokePicSpriteIdxs[0]], 0); + } + else + { + StartSpriteAffineAnim(&gSprites[sTradeData->pokePicSpriteIdxs[0]], 0); + } + StartSpriteAffineAnim(&gSprites[sTradeData->pokePicSpriteIdxs[1]], 0); + gSprites[sTradeData->pokePicSpriteIdxs[0]].pos1.x = 40; + gSprites[sTradeData->pokePicSpriteIdxs[1]].pos1.x = 200; + gSprites[sTradeData->pokePicSpriteIdxs[0]].pos1.y = 192; + gSprites[sTradeData->pokePicSpriteIdxs[1]].pos1.y = -32; + gSprites[sTradeData->pokePicSpriteIdxs[0]].invisible = FALSE; + gSprites[sTradeData->pokePicSpriteIdxs[1]].invisible = FALSE; + sTradeData->state++; + break; + case 38: + gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.y -= 3; + gSprites[sTradeData->pokePicSpriteIdxs[1]].pos2.y += 3; + if (gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.y < -160 && gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.y >= -163) + { + PlaySE(SE_TK_WARPIN); + } + if (gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.y < -222) + { + gSprites[sTradeData->unk_90].data[1] = 0; + gSprites[sTradeData->unk_91].data[1] = 0; + sTradeData->state++; + gSprites[sTradeData->pokePicSpriteIdxs[0]].invisible = TRUE; + gSprites[sTradeData->pokePicSpriteIdxs[1]].invisible = TRUE; + CreateTask(sub_8054734, 5); + } + break; + case 39: + gSprites[sTradeData->unk_90].pos2.y -= 3; + gSprites[sTradeData->unk_91].pos2.y += 3; + if (gSprites[sTradeData->unk_90].pos2.y <= -222) + { + BeginNormalPaletteFade(0xFFFFFFFF, -1, 0, 16, RGB_BLACK); + sTradeData->state++; + DestroySprite(&gSprites[sTradeData->unk_90]); + DestroySprite(&gSprites[sTradeData->unk_91]); + } + break; + case 40: + if (!gPaletteFade.active) + { + sTradeData->state++; + SetTradeSequenceBgGpuRegs(1); + sTradeData->bg1vofs = 166; + SetTradeSequenceBgGpuRegs(3); + sTradeData->bg2vofs = 412; + sTradeData->unk_90 = CreateSprite(&gUnknown_826CE44, 120, -20, 3); + gSprites[sTradeData->unk_90].callback = SpriteCB_TradeGlowWireless; + sTradeData->unk_91 = CreateSprite(&sGlowBallSpriteTemplate, 120, -20, 0); + StartSpriteAnim(&gSprites[sTradeData->unk_91], 1); + } + break; + case 41: + BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK); + sTradeData->state++; + break; + case 42: + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | + DISPCNT_OBJ_1D_MAP | + DISPCNT_BG1_ON | + DISPCNT_OBJ_ON); + if (!gPaletteFade.active) + { + sTradeData->state++; + } + break; + case 43: + gSprites[sTradeData->unk_90].pos2.y += 4; + gSprites[sTradeData->unk_91].pos2.y += 4; + if (gSprites[sTradeData->unk_90].pos2.y + gSprites[sTradeData->unk_90].pos1.y == 64) + { + sTradeData->state = 144; + sTradeData->timer = 0; + } + break; + case 144: + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | + DISPCNT_OBJ_1D_MAP | + DISPCNT_BG1_ON | + DISPCNT_BG2_ON | + DISPCNT_OBJ_ON); + sTradeData->bg1vofs += 3; + sTradeData->bg2vofs += 3; + if (++sTradeData->timer == 10) + { + u8 taskId = CreateTask(Task_AnimateWirelessSignal, 5); + gTasks[taskId].data[2] = TRUE; + } + if (sTradeData->bg1vofs > 316) + { + sTradeData->bg1vofs = 316; + sTradeData->state++; + } + break; + case 145: + DestroySprite(&gSprites[sTradeData->unk_90]); + DestroySprite(&gSprites[sTradeData->unk_91]); + sTradeData->state++; + sTradeData->timer = 0; + break; + case 146: + if (!FuncIsActiveTask(Task_AnimateWirelessSignal)) + { + sTradeData->state = 46; + sTradeData->timer = 0; + } + break; + case 46: + if (++sTradeData->timer == 10) + { + sTradeData->state++; + } + break; + case 47: + if (++sTradeData->bg1vofs > 348) + { + sTradeData->bg1vofs = 348; + sTradeData->state++; + } + break; + case 48: + sTradeData->unk_91 = CreateSprite(&gUnknown_826CF30, 120, 80, 0); + sTradeData->state = 50; + break; + case 50: + if (gSprites[sTradeData->unk_91].animEnded) + { + DestroySprite(&gSprites[sTradeData->unk_91]); + SetTradeSequenceBgGpuRegs(6); + sTradeData->state++; + PlaySE(SE_W028); + } + break; + case 51: + if (sTradeData->unk_EA < 0x400) + { + sTradeData->unk_EA += 0x34; + } + else + { + sTradeData->unk_EA = 0x400; + sTradeData->state++; + } + sTradeData->sXY = 0x8000 / sTradeData->unk_EA; + break; + case 52: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + sTradeData->state = 60; + break; + + case 60: + if (!gPaletteFade.active) + { + SetTradeSequenceBgGpuRegs(5); + SetTradeSequenceBgGpuRegs(7); + gPaletteFade.bufferTransferDisabled = TRUE; + sTradeData->state++; + } + break; + case 61: + gPaletteFade.bufferTransferDisabled = FALSE; + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); + sTradeData->state++; + break; + case 62: + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | + DISPCNT_OBJ_1D_MAP | + DISPCNT_BG2_ON | + DISPCNT_OBJ_ON); + if (!gPaletteFade.active) + { + sTradeData->state++; + } + break; + case 63: + sTradeData->unk_D3 = CreateSprite(&sTradePokeballSpriteTemplate, 120, -8, 0); + gSprites[sTradeData->unk_D3].data[3] = 74; + gSprites[sTradeData->unk_D3].callback = SpriteCB_TradePokeball_Inbound; + StartSpriteAnim(&gSprites[sTradeData->unk_D3], 1); + StartSpriteAffineAnim(&gSprites[sTradeData->unk_D3], 2); + BlendPalettes(1 << (16 + gSprites[sTradeData->unk_D3].oam.paletteNum), 16, RGB_WHITEALPHA); + sTradeData->state++; + sTradeData->timer = 0; + break; + case 64: + BeginNormalPaletteFade(1 << (16 + gSprites[sTradeData->unk_D3].oam.paletteNum), 1, 16, 0, RGB_WHITEALPHA); + sTradeData->state++; + break; + case 65: + if (gSprites[sTradeData->unk_D3].callback == SpriteCallbackDummy) + { + HandleLoadSpecialPokePic(&gMonFrontPicTable[sTradeData->tradeSpecies[1]], gMonSpritesGfxPtr->sprites[3], sTradeData->tradeSpecies[1], sTradeData->monPersonalities[1]); + sTradeData->state++; + } + break; + case 66: + gSprites[sTradeData->pokePicSpriteIdxs[1]].pos1.x = 120; + gSprites[sTradeData->pokePicSpriteIdxs[1]].pos1.y = gMonFrontPicCoords[sTradeData->tradeSpecies[1]].y_offset + 60; + gSprites[sTradeData->pokePicSpriteIdxs[1]].pos2.x = 0; + gSprites[sTradeData->pokePicSpriteIdxs[1]].pos2.y = 0; + StartSpriteAnim(&gSprites[sTradeData->pokePicSpriteIdxs[1]], 0); + CreatePokeballSpriteToReleaseMon(sTradeData->pokePicSpriteIdxs[1], gSprites[sTradeData->pokePicSpriteIdxs[1]].oam.paletteNum, 120, 84, 2, 1, 20, 0xFFFFF); + FreeSpriteOamMatrix(&gSprites[sTradeData->unk_D3]); + DestroySprite(&gSprites[sTradeData->unk_D3]); + sTradeData->state++; + break; + case 67: + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | + DISPCNT_OBJ_1D_MAP | + DISPCNT_BG0_ON | + DISPCNT_BG2_ON | + DISPCNT_OBJ_ON); + StringExpandPlaceholders(gStringVar4, gText_XSentOverY); + DrawTextOnTradeWindow(0, gStringVar4, 0); + sTradeData->state = 167; + sTradeData->timer = 0; + break; + // 167 and 267 are extra cases added in for animations + case 167: + if (++sTradeData->timer > 60) + { + if (sTradeData->tradeSpecies[1] != SPECIES_EGG) + { + PlayCry1(sTradeData->tradeSpecies[1], 0); + } + sTradeData->state = 267; + sTradeData->timer = 0; + } + break; + case 267: + if (IsCryFinished()) + { + sTradeData->state = 68; + } + break; + case 68: + if (++sTradeData->timer == 10) + { + PlayFanfare(MUS_FANFA5); + } + if (sTradeData->timer == 250) + { + sTradeData->state++; + StringExpandPlaceholders(gStringVar4, gText_TakeGoodCareOfX); + DrawTextOnTradeWindow(0, gStringVar4, 0); + sTradeData->timer = 0; + } + break; + case 69: + if (++sTradeData->timer == 60) + { + sTradeData->state++; + } + break; + case 70: + CheckPartnersMonForRibbons(); + sTradeData->state++; + break; + case 71: + if (sTradeData->isLinkTrade) + { + return TRUE; + } + else if (JOY_NEW(A_BUTTON)) + { + sTradeData->state++; + } + break; + case 72: // Only if in-game trade + TradeMons(gSpecialVar_0x8005, 0); + gCB2_AfterEvolution = CB2_RunTradeAnim_InGameTrade; + evoTarget = GetEvolutionTargetSpecies(&gPlayerParty[gSelectedTradeMonPositions[0]], TRUE, ITEM_NONE); + if (evoTarget != SPECIES_NONE) + { + TradeEvolutionScene(&gPlayerParty[gSelectedTradeMonPositions[0]], evoTarget, sTradeData->pokePicSpriteIdxs[1], gSelectedTradeMonPositions[0]); + } + sTradeData->state++; + break; + case 73: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + sTradeData->state++; + break; + case 74: + if (!gPaletteFade.active) + { + PlayNewMapMusic(sTradeData->cachedMapMusic); + if (sTradeData) + { + FreeAllWindowBuffers(); + Free(GetBgTilemapBuffer(3)); + Free(GetBgTilemapBuffer(1)); + Free(GetBgTilemapBuffer(0)); + FreeMonSpritesGfx(); + FREE_AND_SET_NULL(sTradeData); + } + SetMainCallback2(CB2_ReturnToField); + BufferInGameTradeMonName(); + HelpSystem_Enable(); + } + break; + } + return FALSE; +} -- cgit v1.2.3 From 265f8b5b259221dfa1a5fc5537059f262036eb52 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 30 Oct 2019 11:16:26 -0400 Subject: trade through sub_8053E1C; dynamic sys flags start idx --- asm/trade.s | 861 ----------------------------------------- data/ingame_trades.inc | 4 +- include/constants/flags.h | 12 +- include/constants/region_map.h | 2 + src/trade.c | 274 ++++++++++++- 5 files changed, 280 insertions(+), 873 deletions(-) diff --git a/asm/trade.s b/asm/trade.s index 0fd2e5c57..a90af0130 100644 --- a/asm/trade.s +++ b/asm/trade.s @@ -5,867 +5,6 @@ .text - thumb_func_start sub_8053788 -sub_8053788: @ 8053788 - push {r4-r7,lr} - mov r7, r8 - push {r7} - ldr r0, _080537A4 @ =gMain - movs r2, 0x87 - lsls r2, 3 - adds r1, r0, r2 - ldrb r0, [r1] - cmp r0, 0 - beq _080537A8 - cmp r0, 0x4 - beq _080537B8 - b _08053814 - .align 2, 0 -_080537A4: .4byte gMain -_080537A8: - movs r0, 0x4 - strb r0, [r1] - ldr r1, _080537B4 @ =gSoftResetDisabled - movs r0, 0x1 - b _08053812 - .align 2, 0 -_080537B4: .4byte gSoftResetDisabled -_080537B8: - ldr r0, _080537F4 @ =gCB2_AfterEvolution - ldr r1, _080537F8 @ =sub_8053E8C - mov r8, r1 - str r1, [r0] - ldr r7, _080537FC @ =gSelectedTradeMonPositions - ldrb r0, [r7] - movs r6, 0x64 - muls r0, r6 - ldr r5, _08053800 @ =gPlayerParty - adds r0, r5 - movs r1, 0x1 - movs r2, 0 - bl GetEvolutionTargetSpecies - lsls r0, 16 - lsrs r4, r0, 16 - cmp r4, 0 - beq _08053808 - ldrb r3, [r7] - adds r0, r3, 0 - muls r0, r6 - adds r0, r5 - ldr r1, _08053804 @ =sTradeData - ldr r1, [r1] - adds r1, 0x8F - ldrb r2, [r1] - adds r1, r4, 0 - bl TradeEvolutionScene - b _0805380E - .align 2, 0 -_080537F4: .4byte gCB2_AfterEvolution -_080537F8: .4byte sub_8053E8C -_080537FC: .4byte gSelectedTradeMonPositions -_08053800: .4byte gPlayerParty -_08053804: .4byte sTradeData -_08053808: - mov r0, r8 - bl SetMainCallback2 -_0805380E: - ldr r1, _08053838 @ =gSelectedTradeMonPositions - movs r0, 0xFF -_08053812: - strb r0, [r1] -_08053814: - bl HasLinkErrorOccurred - lsls r0, 24 - cmp r0, 0 - bne _08053822 - bl RunTasks -_08053822: - bl AnimateSprites - bl BuildOamBuffer - bl UpdatePaletteFade - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08053838: .4byte gSelectedTradeMonPositions - thumb_func_end sub_8053788 - - thumb_func_start sub_805383C -sub_805383C: @ 805383C - push {r4-r6,lr} - bl sub_804FFC4 - bl GetBlockReceivedStatus - lsls r0, 24 - lsrs r5, r0, 24 - movs r6, 0x1 - adds r0, r5, 0 - ands r0, r6 - cmp r0, 0 - beq _0805387A - ldr r4, _080538A8 @ =gBlockRecvBuffer - ldrh r1, [r4] - ldr r0, _080538AC @ =0x0000dcba - cmp r1, r0 - bne _08053864 - ldr r0, _080538B0 @ =sub_8053788 - bl SetMainCallback2 -_08053864: - ldrh r1, [r4] - ldr r0, _080538B4 @ =0x0000abcd - cmp r1, r0 - bne _08053874 - ldr r0, _080538B8 @ =sTradeData - ldr r0, [r0] - adds r0, 0x72 - strb r6, [r0] -_08053874: - movs r0, 0 - bl ResetBlockReceivedFlag -_0805387A: - movs r0, 0x2 - ands r0, r5 - cmp r0, 0 - beq _080538A2 - ldr r0, _080538A8 @ =gBlockRecvBuffer - movs r1, 0x80 - lsls r1, 1 - adds r0, r1 - ldrh r1, [r0] - ldr r0, _080538B4 @ =0x0000abcd - cmp r1, r0 - bne _0805389C - ldr r0, _080538B8 @ =sTradeData - ldr r0, [r0] - adds r0, 0x73 - movs r1, 0x1 - strb r1, [r0] -_0805389C: - movs r0, 0x1 - bl ResetBlockReceivedFlag -_080538A2: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080538A8: .4byte gBlockRecvBuffer -_080538AC: .4byte 0x0000dcba -_080538B0: .4byte sub_8053788 -_080538B4: .4byte 0x0000abcd -_080538B8: .4byte sTradeData - thumb_func_end sub_805383C - - thumb_func_start SpriteCB_TradePokeball_Default -SpriteCB_TradePokeball_Default: @ 80538BC - push {r4,r5,lr} - adds r5, r0, 0 - movs r1, 0x2E - ldrsh r0, [r5, r1] - movs r1, 0xA - bl __divsi3 - ldrh r4, [r5, 0x22] - adds r4, r0 - strh r4, [r5, 0x22] - ldrh r0, [r5, 0x30] - ldrh r2, [r5, 0x38] - adds r0, r2 - strh r0, [r5, 0x38] - movs r1, 0x38 - ldrsh r0, [r5, r1] - movs r1, 0xA - bl __divsi3 - strh r0, [r5, 0x20] - lsls r4, 16 - asrs r4, 16 - cmp r4, 0x4C - ble _0805390A - movs r0, 0x4C - strh r0, [r5, 0x22] - movs r2, 0x2E - ldrsh r1, [r5, r2] - movs r2, 0x32 - ldrsh r0, [r5, r2] - muls r0, r1 - negs r0, r0 - movs r1, 0x64 - bl __divsi3 - strh r0, [r5, 0x2E] - ldrh r0, [r5, 0x34] - adds r0, 0x1 - strh r0, [r5, 0x34] -_0805390A: - movs r1, 0x20 - ldrsh r0, [r5, r1] - cmp r0, 0x78 - bne _08053916 - movs r0, 0 - strh r0, [r5, 0x30] -_08053916: - ldrh r0, [r5, 0x36] - ldrh r2, [r5, 0x2E] - adds r0, r2 - strh r0, [r5, 0x2E] - movs r1, 0x34 - ldrsh r0, [r5, r1] - cmp r0, 0x4 - bne _0805392E - movs r0, 0x1 - strh r0, [r5, 0x3C] - ldr r0, _08053934 @ =SpriteCallbackDummy - str r0, [r5, 0x1C] -_0805392E: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08053934: .4byte SpriteCallbackDummy - thumb_func_end SpriteCB_TradePokeball_Default - - thumb_func_start SpriteCB_TradePokeball_Outbound -SpriteCB_TradePokeball_Outbound: @ 8053938 - push {r4,lr} - sub sp, 0x4 - adds r4, r0, 0 - ldr r1, _080539A0 @ =gUnknown_826D1E4 - movs r2, 0x2E - ldrsh r0, [r4, r2] - adds r0, r1 - ldrb r0, [r0] - lsls r0, 24 - asrs r0, 24 - ldrh r1, [r4, 0x26] - adds r0, r1 - strh r0, [r4, 0x26] - movs r2, 0x2E - ldrsh r0, [r4, r2] - cmp r0, 0x16 - bne _08053960 - movs r0, 0x31 - bl PlaySE -_08053960: - ldrh r0, [r4, 0x2E] - adds r0, 0x1 - strh r0, [r4, 0x2E] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x2C - bne _08053996 - movs r0, 0x85 - bl PlaySE - ldr r0, _080539A4 @ =SpriteCB_TradePokeball_Outbound2 - str r0, [r4, 0x1C] - movs r0, 0 - strh r0, [r4, 0x2E] - ldrb r1, [r4, 0x5] - lsrs r1, 4 - adds r1, 0x10 - movs r0, 0x1 - lsls r0, r1 - movs r1, 0x1 - negs r1, r1 - ldr r2, _080539A8 @ =0x0000ffff - str r2, [sp] - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade -_08053996: - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080539A0: .4byte gUnknown_826D1E4 -_080539A4: .4byte SpriteCB_TradePokeball_Outbound2 -_080539A8: .4byte 0x0000ffff - thumb_func_end SpriteCB_TradePokeball_Outbound - - thumb_func_start SpriteCB_TradePokeball_Outbound2 -SpriteCB_TradePokeball_Outbound2: @ 80539AC - push {r4,lr} - adds r4, r0, 0 - movs r1, 0x30 - ldrsh r0, [r4, r1] - cmp r0, 0x14 - bne _080539C0 - adds r0, r4, 0 - movs r1, 0x1 - bl StartSpriteAffineAnim -_080539C0: - ldrh r0, [r4, 0x30] - adds r0, 0x1 - strh r0, [r4, 0x30] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x14 - ble _080539FE - ldr r1, _08053A04 @ =gUnknown_826D1E4 - movs r2, 0x2E - ldrsh r0, [r4, r2] - adds r0, r1 - movs r1, 0 - ldrsb r1, [r0, r1] - ldrh r0, [r4, 0x26] - subs r0, r1 - strh r0, [r4, 0x26] - ldrh r0, [r4, 0x2E] - adds r0, 0x1 - strh r0, [r4, 0x2E] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x17 - bne _080539FE - adds r0, r4, 0 - bl DestroySprite - ldr r0, _08053A08 @ =sTradeData - ldr r0, [r0] - adds r0, 0x94 - movs r1, 0xE - strh r1, [r0] -_080539FE: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08053A04: .4byte gUnknown_826D1E4 -_08053A08: .4byte sTradeData - thumb_func_end SpriteCB_TradePokeball_Outbound2 - - thumb_func_start SpriteCB_TradePokeball_Inbound -SpriteCB_TradePokeball_Inbound: @ 8053A0C - push {r4,lr} - adds r4, r0, 0 - ldrh r2, [r4, 0x32] - movs r1, 0x32 - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _08053A3C - ldrh r0, [r4, 0x22] - adds r0, 0x4 - strh r0, [r4, 0x22] - lsls r0, 16 - asrs r0, 16 - movs r3, 0x34 - ldrsh r1, [r4, r3] - cmp r0, r1 - ble _08053A8C - adds r0, r2, 0x1 - strh r0, [r4, 0x32] - movs r0, 0x16 - strh r0, [r4, 0x2E] - movs r0, 0x31 - bl PlaySE - b _08053A8C -_08053A3C: - movs r1, 0x2E - ldrsh r0, [r4, r1] - cmp r0, 0x42 - bne _08053A4A - movs r0, 0x32 - bl PlaySE -_08053A4A: - movs r2, 0x2E - ldrsh r0, [r4, r2] - cmp r0, 0x5C - bne _08053A58 - movs r0, 0x33 - bl PlaySE -_08053A58: - movs r3, 0x2E - ldrsh r0, [r4, r3] - cmp r0, 0x6B - bne _08053A66 - movs r0, 0x34 - bl PlaySE -_08053A66: - ldr r1, _08053A94 @ =gUnknown_826D1E4 - movs r2, 0x2E - ldrsh r0, [r4, r2] - adds r0, r1 - ldrb r0, [r0] - lsls r0, 24 - asrs r0, 24 - ldrh r3, [r4, 0x26] - adds r0, r3 - strh r0, [r4, 0x26] - ldrh r0, [r4, 0x2E] - adds r0, 0x1 - strh r0, [r4, 0x2E] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x6C - bne _08053A8C - ldr r0, _08053A98 @ =SpriteCallbackDummy - str r0, [r4, 0x1C] -_08053A8C: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08053A94: .4byte gUnknown_826D1E4 -_08053A98: .4byte SpriteCallbackDummy - thumb_func_end SpriteCB_TradePokeball_Inbound - - thumb_func_start GetInGameTradeSpeciesInfo -GetInGameTradeSpeciesInfo: @ 8053A9C - push {r4-r6,lr} - ldr r0, _08053AD0 @ =gSpecialVar_0x8004 - ldrh r0, [r0] - lsls r4, r0, 4 - subs r4, r0 - lsls r4, 2 - ldr r0, _08053AD4 @ =gIngameTrades - adds r4, r0 - ldr r0, _08053AD8 @ =gStringVar1 - ldrh r1, [r4, 0x38] - movs r6, 0xB - muls r1, r6 - ldr r5, _08053ADC @ =gSpeciesNames - adds r1, r5 - bl StringCopy - ldr r0, _08053AE0 @ =gStringVar2 - ldrh r1, [r4, 0xC] - muls r1, r6 - adds r1, r5 - bl StringCopy - ldrh r0, [r4, 0x38] - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_08053AD0: .4byte gSpecialVar_0x8004 -_08053AD4: .4byte gIngameTrades -_08053AD8: .4byte gStringVar1 -_08053ADC: .4byte gSpeciesNames -_08053AE0: .4byte gStringVar2 - thumb_func_end GetInGameTradeSpeciesInfo - - thumb_func_start BufferInGameTradeMonName -BufferInGameTradeMonName: @ 8053AE4 - push {r4,lr} - sub sp, 0x20 - ldr r0, _08053B2C @ =gSpecialVar_0x8004 - ldrh r0, [r0] - lsls r4, r0, 4 - subs r4, r0 - lsls r4, 2 - ldr r0, _08053B30 @ =gIngameTrades - adds r4, r0 - ldr r0, _08053B34 @ =gSpecialVar_0x8005 - ldrh r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _08053B38 @ =gPlayerParty - adds r0, r1 - movs r1, 0x2 - mov r2, sp - bl GetMonData - ldr r0, _08053B3C @ =gStringVar1 - mov r1, sp - bl StringCopy10 - ldr r0, _08053B40 @ =gStringVar2 - ldrh r2, [r4, 0xC] - movs r1, 0xB - muls r1, r2 - ldr r2, _08053B44 @ =gSpeciesNames - adds r1, r2 - bl StringCopy - add sp, 0x20 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08053B2C: .4byte gSpecialVar_0x8004 -_08053B30: .4byte gIngameTrades -_08053B34: .4byte gSpecialVar_0x8005 -_08053B38: .4byte gPlayerParty -_08053B3C: .4byte gStringVar1 -_08053B40: .4byte gStringVar2 -_08053B44: .4byte gSpeciesNames - thumb_func_end BufferInGameTradeMonName - - thumb_func_start sub_8053B48 -sub_8053B48: @ 8053B48 - push {r4-r7,lr} - sub sp, 0x38 - lsls r0, 24 - lsrs r0, 24 - lsls r1, 24 - lsrs r1, 24 - lsls r2, r1, 4 - subs r2, r1 - lsls r2, 2 - ldr r1, _08053CA4 @ =gIngameTrades - adds r5, r2, r1 - movs r1, 0x64 - muls r0, r1 - ldr r1, _08053CA8 @ =gPlayerParty - adds r0, r1 - movs r1, 0x38 - bl GetMonData - adds r2, r0, 0 - lsls r2, 24 - lsrs r2, 24 - add r4, sp, 0x34 - movs r0, 0xFE - strb r0, [r4] - ldr r6, _08053CAC @ =gEnemyParty - ldrh r1, [r5, 0xC] - movs r3, 0x1 - str r3, [sp] - ldr r0, [r5, 0x24] - str r0, [sp, 0x4] - str r3, [sp, 0x8] - ldr r0, [r5, 0x18] - str r0, [sp, 0xC] - adds r0, r6, 0 - movs r3, 0x20 - bl CreateMon - adds r2, r5, 0 - adds r2, 0xE - adds r0, r6, 0 - movs r1, 0x27 - bl SetMonData - adds r2, r5, 0 - adds r2, 0xF - adds r0, r6, 0 - movs r1, 0x28 - bl SetMonData - adds r2, r5, 0 - adds r2, 0x10 - adds r0, r6, 0 - movs r1, 0x29 - bl SetMonData - adds r2, r5, 0 - adds r2, 0x11 - adds r0, r6, 0 - movs r1, 0x2A - bl SetMonData - adds r2, r5, 0 - adds r2, 0x12 - adds r0, r6, 0 - movs r1, 0x2B - bl SetMonData - adds r2, r5, 0 - adds r2, 0x13 - adds r0, r6, 0 - movs r1, 0x2C - bl SetMonData - adds r0, r6, 0 - movs r1, 0x2 - adds r2, r5, 0 - bl SetMonData - adds r2, r5, 0 - adds r2, 0x2B - adds r0, r6, 0 - movs r1, 0x7 - bl SetMonData - adds r2, r5, 0 - adds r2, 0x36 - adds r0, r6, 0 - movs r1, 0x31 - bl SetMonData - adds r2, r5, 0 - adds r2, 0x14 - adds r0, r6, 0 - movs r1, 0x2E - bl SetMonData - adds r2, r5, 0 - adds r2, 0x1D - adds r0, r6, 0 - movs r1, 0x17 - bl SetMonData - adds r2, r5, 0 - adds r2, 0x1E - adds r0, r6, 0 - movs r1, 0x18 - bl SetMonData - adds r2, r5, 0 - adds r2, 0x1C - adds r0, r6, 0 - movs r1, 0x16 - bl SetMonData - adds r2, r5, 0 - adds r2, 0x1F - adds r0, r6, 0 - movs r1, 0x21 - bl SetMonData - adds r2, r5, 0 - adds r2, 0x20 - adds r0, r6, 0 - movs r1, 0x2F - bl SetMonData - adds r2, r5, 0 - adds r2, 0x37 - adds r0, r6, 0 - movs r1, 0x30 - bl SetMonData - adds r0, r6, 0 - movs r1, 0x23 - adds r2, r4, 0 - bl SetMonData - mov r4, sp - adds r4, 0x35 - movs r0, 0 - strb r0, [r4] - ldrh r0, [r5, 0x28] - cmp r0, 0 - beq _08053CC0 - bl ItemIsMail - lsls r0, 24 - cmp r0, 0 - beq _08053CB4 - add r0, sp, 0x10 - adds r1, r5, 0 - bl sub_8053CD4 - ldr r0, _08053CB0 @ =gLinkPartnerMail - add r1, sp, 0x10 - ldm r1!, {r2,r3,r7} - stm r0!, {r2,r3,r7} - ldm r1!, {r2,r3,r7} - stm r0!, {r2,r3,r7} - ldm r1!, {r2,r3,r7} - stm r0!, {r2,r3,r7} - adds r0, r6, 0 - movs r1, 0x40 - adds r2, r4, 0 - bl SetMonData - adds r2, r5, 0 - adds r2, 0x28 - adds r0, r6, 0 - movs r1, 0xC - bl SetMonData - b _08053CC0 - .align 2, 0 -_08053CA4: .4byte gIngameTrades -_08053CA8: .4byte gPlayerParty -_08053CAC: .4byte gEnemyParty -_08053CB0: .4byte gLinkPartnerMail -_08053CB4: - adds r2, r5, 0 - adds r2, 0x28 - adds r0, r6, 0 - movs r1, 0xC - bl SetMonData -_08053CC0: - ldr r0, _08053CD0 @ =gEnemyParty - bl CalculateMonStats - add sp, 0x38 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08053CD0: .4byte gEnemyParty - thumb_func_end sub_8053B48 - - thumb_func_start sub_8053CD4 -sub_8053CD4: @ 8053CD4 - push {r4,r5,lr} - adds r4, r0, 0 - adds r5, r1, 0 - ldr r2, _08053D28 @ =gUnknown_826D1A8 - adds r0, r5, 0 - adds r0, 0x2A - ldrb r1, [r0] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 2 - adds r2, r0, r2 - adds r1, r4, 0 - movs r3, 0x8 -_08053CEE: - ldrh r0, [r2] - strh r0, [r1] - adds r2, 0x2 - adds r1, 0x2 - subs r3, 0x1 - cmp r3, 0 - bge _08053CEE - adds r0, r4, 0 - adds r0, 0x12 - adds r1, r5, 0 - adds r1, 0x2B - bl StringCopy - ldr r1, [r5, 0x18] - lsrs r0, r1, 24 - strb r0, [r4, 0x1A] - lsrs r0, r1, 16 - strb r0, [r4, 0x1B] - lsrs r0, r1, 8 - strb r0, [r4, 0x1C] - strb r1, [r4, 0x1D] - ldrh r0, [r5, 0xC] - strh r0, [r4, 0x1E] - ldrh r0, [r5, 0x28] - strh r0, [r4, 0x20] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08053D28: .4byte gUnknown_826D1A8 - thumb_func_end sub_8053CD4 - - thumb_func_start GetTradeSpecies -GetTradeSpecies: @ 8053D2C - push {r4-r6,lr} - ldr r6, _08053D58 @ =gSpecialVar_0x8005 - ldrh r0, [r6] - movs r5, 0x64 - muls r0, r5 - ldr r4, _08053D5C @ =gPlayerParty - adds r0, r4 - movs r1, 0x2D - bl GetMonData - cmp r0, 0 - bne _08053D60 - ldrh r0, [r6] - muls r0, r5 - adds r0, r4 - movs r1, 0xB - bl GetMonData - lsls r0, 16 - lsrs r0, 16 - b _08053D62 - .align 2, 0 -_08053D58: .4byte gSpecialVar_0x8005 -_08053D5C: .4byte gPlayerParty -_08053D60: - movs r0, 0 -_08053D62: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end GetTradeSpecies - - thumb_func_start CreateInGameTradePokemon -CreateInGameTradePokemon: @ 8053D68 - push {lr} - ldr r0, _08053D7C @ =gSpecialVar_0x8005 - ldrb r0, [r0] - ldr r1, _08053D80 @ =gSpecialVar_0x8004 - ldrb r1, [r1] - bl sub_8053B48 - pop {r0} - bx r0 - .align 2, 0 -_08053D7C: .4byte gSpecialVar_0x8005 -_08053D80: .4byte gSpecialVar_0x8004 - thumb_func_end CreateInGameTradePokemon - - thumb_func_start CB2_RunTradeAnim_LinkTrade -CB2_RunTradeAnim_LinkTrade: @ 8053D84 - push {r4-r6,lr} - bl sub_8050F14 - lsls r0, 24 - lsrs r6, r0, 24 - cmp r6, 0x1 - bne _08053DE6 - ldr r5, _08053E08 @ =sTradeData - ldr r0, [r5] - adds r0, 0x8E - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r4, _08053E0C @ =gSprites - adds r0, r4 - bl DestroySprite - ldr r0, [r5] - adds r0, 0x8F - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - bl FreeSpriteOamMatrix - ldr r0, _08053E10 @ =gSelectedTradeMonPositions - ldrb r4, [r0] - ldrb r0, [r0, 0x1] - movs r1, 0x6 - bl __umodsi3 - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl TradeMons - ldr r0, [r5] - adds r2, r0, 0 - adds r2, 0x74 - ldr r1, _08053E14 @ =0x0000abcd - strh r1, [r2] - adds r0, 0x93 - strb r6, [r0] - ldr r0, _08053E18 @ =sub_8053E1C - bl SetMainCallback2 -_08053DE6: - bl sub_80508F4 - bl sub_805383C - bl RunTasks - bl RunTextPrinters - bl AnimateSprites - bl BuildOamBuffer - bl UpdatePaletteFade - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08053E08: .4byte sTradeData -_08053E0C: .4byte gSprites -_08053E10: .4byte gSelectedTradeMonPositions -_08053E14: .4byte 0x0000abcd -_08053E18: .4byte sub_8053E1C - thumb_func_end CB2_RunTradeAnim_LinkTrade - - thumb_func_start sub_8053E1C -sub_8053E1C: @ 8053E1C - push {r4,lr} - bl sub_804FFC4 - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - bl sub_805383C - cmp r4, 0 - bne _08053E68 - ldr r4, _08053E80 @ =sTradeData - ldr r2, [r4] - adds r0, r2, 0 - adds r0, 0x72 - ldrh r1, [r0] - ldr r0, _08053E84 @ =0x00000101 - cmp r1, r0 - bne _08053E68 - adds r1, r2, 0 - adds r1, 0x74 - ldr r0, _08053E88 @ =0x0000dcba - strh r0, [r1] - bl bitmask_all_link_players_but_self - lsls r0, 24 - lsrs r0, 24 - ldr r1, [r4] - adds r1, 0x74 - movs r2, 0x14 - bl SendBlock - ldr r0, [r4] - adds r0, 0x72 - movs r1, 0x2 - strb r1, [r0] - ldr r0, [r4] - adds r0, 0x73 - strb r1, [r0] -_08053E68: - bl RunTasks - bl AnimateSprites - bl BuildOamBuffer - bl UpdatePaletteFade - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08053E80: .4byte sTradeData -_08053E84: .4byte 0x00000101 -_08053E88: .4byte 0x0000dcba - thumb_func_end sub_8053E1C - thumb_func_start sub_8053E8C sub_8053E8C: @ 8053E8C push {r4,lr} diff --git a/data/ingame_trades.inc b/data/ingame_trades.inc index c3447d79b..ef0bf0993 100644 --- a/data/ingame_trades.inc +++ b/data/ingame_trades.inc @@ -1,4 +1,4 @@ -gIngameTrades:: @ 826CF8C +gInGameTrades:: @ 826CF8C .string "MIMIEN$", 11 .align 1 .2byte SPECIES_MR_MIME @ species @@ -161,7 +161,7 @@ gIngameTrades:: @ 826CF8C .2byte SPECIES_PONYTA @ species requested .align 2 -gUnknown_826D1A8:: @ 826D1A8 +sInGameTradeMailMessages:: @ 826D1A8 .2byte EC_WORD_THAT_S .2byte EC_WORD_A .2byte EC_WORD_HEALTHY diff --git a/include/constants/flags.h b/include/constants/flags.h index 082e12f87..80eaca3e0 100644 --- a/include/constants/flags.h +++ b/include/constants/flags.h @@ -1,7 +1,7 @@ #ifndef GUARD_CONSTANTS_FLAGS_H #define GUARD_CONSTANTS_FLAGS_H -// TODO: Get correct names and numbers +#include "constants/trainers.h" #define FLAG_TEMP_1 0x001 #define FLAG_TEMP_2 0x002 @@ -1309,10 +1309,12 @@ #define FLAG_TRAINER_FLAG_START 0x500 -#define TRAINERS_FLAG_NO 0x2E7 // 743 -#define TRAINER_FLAGS_WORDS 0x300 - -#define SYS_FLAGS (FLAG_TRAINER_FLAG_START + TRAINER_FLAGS_WORDS) // 0x800 +// Vanilla: SYS_FLAGS = 0x800 +#if (NUM_TRAINERS) & 31 +#define SYS_FLAGS (FLAG_TRAINER_FLAG_START + ((NUM_TRAINERS) + 31) / 32 * 32) +#else +#define SYS_FLAGS (FLAG_TRAINER_FLAG_START + (NUM_TRAINERS)) +#endif // SYSTEM FLAGS diff --git a/include/constants/region_map.h b/include/constants/region_map.h index 527acf2c9..0957a72ee 100644 --- a/include/constants/region_map.h +++ b/include/constants/region_map.h @@ -200,4 +200,6 @@ #define MAPSEC_SPECIAL_AREA 0xC4 #define MAPSEC_NONE 0xC5 +#define MAPSEC_IN_GAME_TRADE 0xFE + #endif //GUARD_CONSTANTS_REGION_MAP_H diff --git a/src/trade.c b/src/trade.c index 40be0774b..f33388eed 100644 --- a/src/trade.c +++ b/src/trade.c @@ -38,6 +38,7 @@ #include "constants/items.h" #include "constants/easy_chat.h" #include "constants/songs.h" +#include "constants/region_map.h" #include "constants/moves.h" struct InGameTrade { @@ -201,13 +202,17 @@ void sub_8050E24(void); u8 sub_8050F14(void); u8 sub_8050F3C(void); u8 sub_805232C(void); +void SpriteCB_TradePokeball_Outbound(struct Sprite * sprite); +void SpriteCB_TradePokeball_Outbound2(struct Sprite * sprite); +void SpriteCB_TradePokeball_Inbound(struct Sprite * sprite); +void BufferInGameTradeMonName(void); +static void GetInGameTradeMail(struct MailStruct * mail, const struct InGameTrade * inGameTrade); void CB2_RunTradeAnim_LinkTrade(void); +void sub_8053E1C(void); +void sub_8053E8C(void); void LoadHeldItemIcons(void); void DrawTextOnTradeWindow(u8 windowId, const u8 *str, s8 speed); void CheckPartnersMonForRibbons(void); -void BufferInGameTradeMonName(void); -void SpriteCB_TradePokeball_Outbound(struct Sprite * sprite); -void SpriteCB_TradePokeball_Inbound(struct Sprite * sprite); void Task_AnimateWirelessSignal(u8 taskId); void c3_0805465C(u8 taskId); void sub_8054734(u8 taskId); @@ -258,7 +263,7 @@ extern const struct SpriteSheet gUnknown_826CEB0; extern const struct SpriteSheet gUnknown_826CF28; extern const struct SpritePalette gUnknown_826CE34; extern const struct SpritePalette gUnknown_826CE3C; -extern const struct InGameTrade gIngameTrades[]; +extern const struct InGameTrade gInGameTrades[]; extern const struct SpriteTemplate sTradePokeballSpriteTemplate; extern const struct SpriteTemplate gUnknown_826CF30; extern const struct SpriteTemplate sGameLinkCableEndSpriteTemplate; @@ -266,6 +271,8 @@ extern const struct SpriteTemplate gUnknown_826CE44; extern const struct SpriteTemplate sGlowBallSpriteTemplate; extern const union AffineAnimCmd *const gUnknown_826CF88[]; extern const struct SpriteTemplate gUnknown_826CF48; +extern const s8 gUnknown_826D1E4[]; +extern const u16 sInGameTradeMailMessages[][10]; void sub_804C600(void) { @@ -4737,7 +4744,7 @@ void sub_8050E24(void) } else { - inGameTrade = &gIngameTrades[gSpecialVar_0x8004]; + inGameTrade = &gInGameTrades[gSpecialVar_0x8004]; StringCopy(gStringVar1, inGameTrade->otName); StringCopy10(gStringVar3, inGameTrade->nickname); GetMonData(&gPlayerParty[gSpecialVar_0x8005], MON_DATA_NICKNAME, nickname); @@ -5770,3 +5777,260 @@ bool8 sub_805232C(void) } return FALSE; } + +void sub_8053788(void) +{ + u16 evoSpecies; + switch (gMain.state) + { + case 0: + gMain.state = 4; + gSoftResetDisabled = TRUE; + break; + case 4: + gCB2_AfterEvolution = sub_8053E8C; + evoSpecies = GetEvolutionTargetSpecies(&gPlayerParty[gSelectedTradeMonPositions[0]], 1, 0); + if (evoSpecies != SPECIES_NONE) + TradeEvolutionScene(&gPlayerParty[gSelectedTradeMonPositions[0]], evoSpecies, sTradeData->pokePicSpriteIdxs[1], gSelectedTradeMonPositions[0]); + else + SetMainCallback2(sub_8053E8C); + gSelectedTradeMonPositions[0] = 0xFF; + break; + } + if (!HasLinkErrorOccurred()) + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +void sub_805383C(void) +{ + u8 recvStatus; + sub_804FFC4(); + recvStatus = GetBlockReceivedStatus(); + if (recvStatus & (1 << 0)) + { + if (gBlockRecvBuffer[0][0] == 0xDCBA) + SetMainCallback2(sub_8053788); + if (gBlockRecvBuffer[0][0] == 0xABCD) + sTradeData->unk_72 = 1; + ResetBlockReceivedFlag(0); + } + if (recvStatus & (1 << 1)) + { + if (gBlockRecvBuffer[1][0] == 0xABCD) + sTradeData->unk_73 = 1; + ResetBlockReceivedFlag(1); + } +} + +void SpriteCB_TradePokeball_Default(struct Sprite * sprite) +{ + sprite->pos1.y += sprite->data[0] / 10; + sprite->data[5] += sprite->data[1]; + sprite->pos1.x = sprite->data[5] / 10; + if (sprite->pos1.y > 76) + { + sprite->pos1.y = 76; + sprite->data[0] = -(sprite->data[0] * sprite->data[2]) / 100; + sprite->data[3]++; + } + if (sprite->pos1.x == 120) + sprite->data[1] = 0; + sprite->data[0] += sprite->data[4]; + if (sprite->data[3] == 4) + { + sprite->data[7] = 1; + sprite->callback = SpriteCallbackDummy; + } +} + +void SpriteCB_TradePokeball_Outbound(struct Sprite * sprite) +{ + sprite->pos2.y += gUnknown_826D1E4[sprite->data[0]]; + if (sprite->data[0] == 22) + PlaySE(SE_KON); + sprite->data[0]++; + if (sprite->data[0] == 44) + { + PlaySE(SE_W025); + sprite->callback = SpriteCB_TradePokeball_Outbound2; + sprite->data[0] = 0; + BeginNormalPaletteFade(1 << (sprite->oam.paletteNum + 16), -1, 0, 16, RGB_WHITEALPHA); + } +} + +void SpriteCB_TradePokeball_Outbound2(struct Sprite * sprite) +{ + if (sprite->data[1] == 20) + StartSpriteAffineAnim(sprite, 1); + sprite->data[1]++; + if (sprite->data[1] > 20) + { + sprite->pos2.y -= gUnknown_826D1E4[sprite->data[0]]; + sprite->data[0]++; + if (sprite->data[0] == 23) + { + DestroySprite(sprite); + sTradeData->state = 14; + } + } +} + +void SpriteCB_TradePokeball_Inbound(struct Sprite * sprite) +{ + if (sprite->data[2] == 0) + { + sprite->pos1.y += 4; + if (sprite->pos1.y > sprite->data[3]) + { + sprite->data[2]++; + sprite->data[0] = 22; + PlaySE(SE_KON); + } + } + else + { + if (sprite->data[0] == 66) + PlaySE(SE_KON2); + if (sprite->data[0] == 92) + PlaySE(SE_KON3); + if (sprite->data[0] == 107) + PlaySE(SE_KON4); + sprite->pos2.y += gUnknown_826D1E4[sprite->data[0]]; + sprite->data[0]++; + if (sprite->data[0] == 108) + sprite->callback = SpriteCallbackDummy; + } +} + +u16 GetInGameTradeSpeciesInfo(void) +{ + // Populates gStringVar1 with the name of the requested species and + // gStringVar2 with the name of the offered species. + // Returns the requested species. + const struct InGameTrade * inGameTrade = &gInGameTrades[gSpecialVar_0x8004]; + StringCopy(gStringVar1, gSpeciesNames[inGameTrade->requestedSpecies]); + StringCopy(gStringVar2, gSpeciesNames[inGameTrade->species]); + return inGameTrade->requestedSpecies; +} + +void BufferInGameTradeMonName(void) +{ + // Populates gStringVar1 with the nickname of the sent Pokemon and + // gStringVar2 with the name of the offered species. + u8 nickname[30]; + const struct InGameTrade * inGameTrade = &gInGameTrades[gSpecialVar_0x8004]; + GetMonData(&gPlayerParty[gSpecialVar_0x8005], MON_DATA_NICKNAME, nickname); + StringCopy10(gStringVar1, nickname); + StringCopy(gStringVar2, gSpeciesNames[inGameTrade->species]); +} + +void CreateInGameTradePokemonInternal(u8 playerSlot, u8 inGameTradeIdx) +{ + const struct InGameTrade *inGameTrade = &gInGameTrades[inGameTradeIdx]; + u8 level = GetMonData(&gPlayerParty[playerSlot], MON_DATA_LEVEL); + struct MailStruct mail; + u8 metLocation = MAPSEC_IN_GAME_TRADE; + struct Pokemon * tradeMon = &gEnemyParty[0]; + u8 mailNum; + CreateMon(tradeMon, inGameTrade->species, level, 32, TRUE, inGameTrade->personality, TRUE, inGameTrade->otId); + SetMonData(tradeMon, MON_DATA_HP_IV, &inGameTrade->ivs[0]); + SetMonData(tradeMon, MON_DATA_ATK_IV, &inGameTrade->ivs[1]); + SetMonData(tradeMon, MON_DATA_DEF_IV, &inGameTrade->ivs[2]); + SetMonData(tradeMon, MON_DATA_SPEED_IV, &inGameTrade->ivs[3]); + SetMonData(tradeMon, MON_DATA_SPATK_IV, &inGameTrade->ivs[4]); + SetMonData(tradeMon, MON_DATA_SPDEF_IV, &inGameTrade->ivs[5]); + SetMonData(tradeMon, MON_DATA_NICKNAME, inGameTrade->nickname); + SetMonData(tradeMon, MON_DATA_OT_NAME, inGameTrade->otName); + SetMonData(tradeMon, MON_DATA_OT_GENDER, &inGameTrade->otGender); + SetMonData(tradeMon, MON_DATA_ABILITY_NUM, &inGameTrade->abilityNum); + SetMonData(tradeMon, MON_DATA_BEAUTY, &inGameTrade->conditions[1]); + SetMonData(tradeMon, MON_DATA_CUTE, &inGameTrade->conditions[2]); + SetMonData(tradeMon, MON_DATA_COOL, &inGameTrade->conditions[0]); + SetMonData(tradeMon, MON_DATA_SMART, &inGameTrade->conditions[3]); + SetMonData(tradeMon, MON_DATA_TOUGH, &inGameTrade->conditions[4]); + SetMonData(tradeMon, MON_DATA_SHEEN, &inGameTrade->sheen); + SetMonData(tradeMon, MON_DATA_MET_LOCATION, &metLocation); + mailNum = 0; + if (inGameTrade->heldItem != ITEM_NONE) + { + if (ItemIsMail(inGameTrade->heldItem)) + { + GetInGameTradeMail(&mail, inGameTrade); + gLinkPartnerMail[0] = mail; + SetMonData(tradeMon, MON_DATA_MAIL, &mailNum); + SetMonData(tradeMon, MON_DATA_HELD_ITEM, &inGameTrade->heldItem); + } + else + { + SetMonData(tradeMon, MON_DATA_HELD_ITEM, &inGameTrade->heldItem); + } + } + CalculateMonStats(&gEnemyParty[0]); +} + +static void GetInGameTradeMail(struct MailStruct * mail, const struct InGameTrade * inGameTrade) +{ + int i; + for (i = 0; i < 9; i++) + mail->words[i] = sInGameTradeMailMessages[inGameTrade->mailNum][i]; + StringCopy(mail->playerName, inGameTrade->otName); + mail->trainerId[0] = inGameTrade->otId >> 24; + mail->trainerId[1] = inGameTrade->otId >> 16; + mail->trainerId[2] = inGameTrade->otId >> 8; + mail->trainerId[3] = inGameTrade->otId; + mail->species = inGameTrade->species; + mail->itemId = inGameTrade->heldItem; +} + +u16 GetTradeSpecies(void) +{ + if (GetMonData(&gPlayerParty[gSpecialVar_0x8005], MON_DATA_IS_EGG)) + return SPECIES_NONE; + else + return GetMonData(&gPlayerParty[gSpecialVar_0x8005], MON_DATA_SPECIES); +} + +void CreateInGameTradePokemon(void) +{ + CreateInGameTradePokemonInternal(gSpecialVar_0x8005, gSpecialVar_0x8004); +} + +void CB2_RunTradeAnim_LinkTrade(void) +{ + if (sub_8050F14() == TRUE) + { + DestroySprite(&gSprites[sTradeData->pokePicSpriteIdxs[0]]); + FreeSpriteOamMatrix(&gSprites[sTradeData->pokePicSpriteIdxs[1]]); + TradeMons(gSelectedTradeMonPositions[0], gSelectedTradeMonPositions[1] % 6); + sTradeData->linkData[0] = 0xABCD; + sTradeData->unk_93 = 1; + SetMainCallback2(sub_8053E1C); + } + sub_80508F4(); + sub_805383C(); + RunTasks(); + RunTextPrinters(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +void sub_8053E1C(void) +{ + u8 mpId = sub_804FFC4(); + sub_805383C(); + if (mpId == 0 && sTradeData->unk_72 == 1 && sTradeData->unk_73 == 1) + { + sTradeData->linkData[0] = 0xDCBA; + SendBlock(bitmask_all_link_players_but_self(), sTradeData->linkData, 20); + sTradeData->unk_72 = 2; + sTradeData->unk_73 = 2; + } + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} -- cgit v1.2.3 From 2c2c179eb9b92d0998922cc96a115d3d1671a64b Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 30 Oct 2019 12:49:16 -0400 Subject: Finish trade code --- asm/trade.s | 1095 --------------------------------------------- asm/union_room_chat.s | 4 +- data/trade.s | 11 - include/constants/flags.h | 4 - include/load_save.h | 4 +- include/mevent.h | 1 + include/party_menu.h | 1 + include/strings.h | 1 + ld_script.txt | 2 +- src/load_save.c | 4 +- src/save.c | 8 +- src/start_menu.c | 4 +- src/trade.c | 363 ++++++++++++++- 13 files changed, 375 insertions(+), 1127 deletions(-) delete mode 100644 asm/trade.s diff --git a/asm/trade.s b/asm/trade.s deleted file mode 100644 index a90af0130..000000000 --- a/asm/trade.s +++ /dev/null @@ -1,1095 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_8053E8C -sub_8053E8C: @ 8053E8C - push {r4,lr} - sub sp, 0x4 - ldr r1, _08053EAC @ =gMain - movs r2, 0x87 - lsls r2, 3 - adds r0, r1, r2 - ldrb r0, [r0] - adds r2, r1, 0 - cmp r0, 0x65 - bls _08053EA2 - b _08054396 -_08053EA2: - lsls r0, 2 - ldr r1, _08053EB0 @ =_08053EB4 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08053EAC: .4byte gMain -_08053EB0: .4byte _08053EB4 - .align 2, 0 -_08053EB4: - .4byte _0805404C - .4byte _08054068 - .4byte _080540DC - .4byte _08054396 - .4byte _080541E0 - .4byte _080542A0 - .4byte _080542C4 - .4byte _080542E0 - .4byte _08054304 - .4byte _0805434C - .4byte _08054396 - .4byte _08054396 - .4byte _08054396 - .4byte _08054396 - .4byte _08054396 - .4byte _08054396 - .4byte _08054396 - .4byte _08054396 - .4byte _08054396 - .4byte _08054396 - .4byte _08054396 - .4byte _08054396 - .4byte _08054396 - .4byte _08054396 - .4byte _08054396 - .4byte _08054396 - .4byte _08054396 - .4byte _08054396 - .4byte _08054396 - .4byte _08054396 - .4byte _08054396 - .4byte _08054396 - .4byte _08054396 - .4byte _08054396 - .4byte _08054396 - .4byte _08054396 - .4byte _08054396 - .4byte _08054396 - .4byte _08054396 - .4byte _08054396 - .4byte _08054204 - .4byte _08054254 - .4byte _0805427E - .4byte _08054396 - .4byte _08054396 - .4byte _08054396 - .4byte _08054396 - .4byte _08054396 - .4byte _08054396 - .4byte _08054396 - .4byte _08054104 - .4byte _08054184 - .4byte _080541A0 - .4byte _08054396 - .4byte _08054396 - .4byte _08054396 - .4byte _08054396 - .4byte _08054396 - .4byte _08054396 - .4byte _08054396 - .4byte _08054396 - .4byte _08054396 - .4byte _08054396 - .4byte _08054396 - .4byte _08054396 - .4byte _08054396 - .4byte _08054396 - .4byte _08054396 - .4byte _08054396 - .4byte _08054396 - .4byte _08054396 - .4byte _08054396 - .4byte _08054396 - .4byte _08054396 - .4byte _08054396 - .4byte _08054396 - .4byte _08054396 - .4byte _08054396 - .4byte _08054396 - .4byte _08054396 - .4byte _08054396 - .4byte _08054396 - .4byte _08054396 - .4byte _08054396 - .4byte _08054396 - .4byte _08054396 - .4byte _08054396 - .4byte _08054396 - .4byte _08054396 - .4byte _08054396 - .4byte _08054396 - .4byte _08054396 - .4byte _08054396 - .4byte _08054396 - .4byte _08054396 - .4byte _08054396 - .4byte _08054396 - .4byte _08054396 - .4byte _08054396 - .4byte _08054396 - .4byte _08054080 - .4byte _080540BC -_0805404C: - movs r0, 0x87 - lsls r0, 3 - adds r1, r2, r0 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - ldr r4, _08054060 @ =gStringVar4 - ldr r1, _08054064 @ =gUnknown_841E325 - b _080540EA - .align 2, 0 -_08054060: .4byte gStringVar4 -_08054064: .4byte gUnknown_841E325 -_08054068: - bl sub_800AB9C - ldr r0, _0805407C @ =gMain - movs r1, 0x87 - lsls r1, 3 - adds r0, r1 - movs r2, 0 - movs r1, 0x64 - b _080541F0 - .align 2, 0 -_0805407C: .4byte gMain -_08054080: - ldr r0, _080540B4 @ =sTradeData - ldr r3, [r0] - ldr r0, [r3, 0x64] - adds r0, 0x1 - str r0, [r3, 0x64] - cmp r0, 0xB4 - bls _0805409C - movs r1, 0x87 - lsls r1, 3 - adds r0, r2, r1 - movs r2, 0 - movs r1, 0x65 - strb r1, [r0] - str r2, [r3, 0x64] -_0805409C: - bl IsLinkTaskFinished - lsls r0, 24 - cmp r0, 0 - bne _080540A8 - b _08054396 -_080540A8: - ldr r0, _080540B8 @ =gMain - movs r2, 0x87 - lsls r2, 3 - adds r0, r2 - b _080540D0 - .align 2, 0 -_080540B4: .4byte sTradeData -_080540B8: .4byte gMain -_080540BC: - bl IsLinkTaskFinished - lsls r0, 24 - cmp r0, 0 - bne _080540C8 - b _08054396 -_080540C8: - ldr r0, _080540D8 @ =gMain - movs r1, 0x87 - lsls r1, 3 - adds r0, r1 -_080540D0: - movs r1, 0x2 - strb r1, [r0] - b _08054396 - .align 2, 0 -_080540D8: .4byte gMain -_080540DC: - movs r0, 0x87 - lsls r0, 3 - adds r1, r2, r0 - movs r0, 0x32 - strb r0, [r1] - ldr r4, _080540FC @ =gStringVar4 - ldr r1, _08054100 @ =gText_SavingDontTurnOffThePower2 -_080540EA: - adds r0, r4, 0 - bl StringExpandPlaceholders - movs r0, 0 - adds r1, r4, 0 - movs r2, 0 - bl DrawTextOnTradeWindow - b _08054396 - .align 2, 0 -_080540FC: .4byte gStringVar4 -_08054100: .4byte gText_SavingDontTurnOffThePower2 -_08054104: - bl InUnionRoom - cmp r0, 0 - beq _08054120 - ldr r0, _0805411C @ =sTradeData - ldr r1, [r0] - adds r1, 0xF8 - movs r0, 0x12 - bl sub_8113550 - b _08054132 - .align 2, 0 -_0805411C: .4byte sTradeData -_08054120: - ldr r0, _08054174 @ =sTradeData - ldr r1, [r0] - adds r1, 0xF8 - movs r0, 0xC - bl sub_8113550 - movs r0, 0x15 - bl IncrementGameStat -_08054132: - ldr r0, _08054178 @ =gWirelessCommType - ldrb r0, [r0] - cmp r0, 0 - beq _0805415A - ldr r4, _0805417C @ =gLinkPlayers - bl GetMultiplayerId - movs r1, 0x1 - eors r0, r1 - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 3 - subs r1, r0 - lsls r1, 2 - adds r4, 0x4 - adds r1, r4 - ldr r1, [r1] - movs r0, 0x2 - bl sub_8144714 -_0805415A: - bl sub_804C1C0 - bl sub_80DA3AC - ldr r1, _08054180 @ =gMain - movs r2, 0x87 - lsls r2, 3 - adds r1, r2 - ldrb r0, [r1] - adds r0, 0x1 - movs r2, 0 - strb r0, [r1] - b _080541F2 - .align 2, 0 -_08054174: .4byte sTradeData -_08054178: .4byte gWirelessCommType -_0805417C: .4byte gLinkPlayers -_08054180: .4byte gMain -_08054184: - ldr r0, _0805419C @ =sTradeData - ldr r1, [r0] - ldr r0, [r1, 0x64] - adds r0, 0x1 - str r0, [r1, 0x64] - cmp r0, 0x5 - beq _08054194 - b _08054396 -_08054194: - movs r0, 0x87 - lsls r0, 3 - adds r1, r2, r0 - b _08054340 - .align 2, 0 -_0805419C: .4byte sTradeData -_080541A0: - bl sub_80DA3D8 - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0 - beq _080541C4 - bl sav2_gender2_inplace_and_xFE - ldr r0, _080541C0 @ =gMain - movs r1, 0x87 - lsls r1, 3 - adds r0, r1 - movs r1, 0x4 - strb r1, [r0] - b _08054396 - .align 2, 0 -_080541C0: .4byte gMain -_080541C4: - ldr r0, _080541D8 @ =sTradeData - ldr r0, [r0] - str r1, [r0, 0x64] - ldr r0, _080541DC @ =gMain - movs r2, 0x87 - lsls r2, 3 - adds r0, r2 - movs r1, 0x33 - strb r1, [r0] - b _08054396 - .align 2, 0 -_080541D8: .4byte sTradeData -_080541DC: .4byte gMain -_080541E0: - bl sub_80DA40C - ldr r0, _080541FC @ =gMain - movs r1, 0x87 - lsls r1, 3 - adds r0, r1 - movs r2, 0 - movs r1, 0x28 -_080541F0: - strb r1, [r0] -_080541F2: - ldr r0, _08054200 @ =sTradeData - ldr r0, [r0] - str r2, [r0, 0x64] - b _08054396 - .align 2, 0 -_080541FC: .4byte gMain -_08054200: .4byte sTradeData -_08054204: - ldr r4, _08054238 @ =sTradeData - ldr r1, [r4] - ldr r0, [r1, 0x64] - adds r0, 0x1 - str r0, [r1, 0x64] - cmp r0, 0x32 - bhi _08054214 - b _08054396 -_08054214: - bl GetMultiplayerId - lsls r0, 24 - cmp r0, 0 - bne _0805423C - bl Random - ldr r4, [r4] - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x1E - bl __umodsi3 - lsls r0, 16 - lsrs r0, 16 - str r0, [r4, 0x64] - b _08054242 - .align 2, 0 -_08054238: .4byte sTradeData -_0805423C: - ldr r1, [r4] - movs r0, 0 - str r0, [r1, 0x64] -_08054242: - ldr r0, _08054250 @ =gMain - movs r2, 0x87 - lsls r2, 3 - adds r0, r2 - movs r1, 0x29 - strb r1, [r0] - b _08054396 - .align 2, 0 -_08054250: .4byte gMain -_08054254: - ldr r0, _08054270 @ =sTradeData - ldr r1, [r0] - ldr r0, [r1, 0x64] - cmp r0, 0 - bne _08054278 - bl sub_800AB9C - ldr r0, _08054274 @ =gMain - movs r1, 0x87 - lsls r1, 3 - adds r0, r1 - movs r1, 0x2A - strb r1, [r0] - b _08054396 - .align 2, 0 -_08054270: .4byte sTradeData -_08054274: .4byte gMain -_08054278: - subs r0, 0x1 - str r0, [r1, 0x64] - b _08054396 -_0805427E: - bl IsLinkTaskFinished - lsls r0, 24 - cmp r0, 0 - bne _0805428A - b _08054396 -_0805428A: - bl sub_80DA434 - ldr r0, _0805429C @ =gMain - movs r2, 0x87 - lsls r2, 3 - adds r0, r2 - movs r1, 0x5 - strb r1, [r0] - b _08054396 - .align 2, 0 -_0805429C: .4byte gMain -_080542A0: - ldr r0, _080542C0 @ =sTradeData - ldr r1, [r0] - ldr r0, [r1, 0x64] - adds r0, 0x1 - str r0, [r1, 0x64] - cmp r0, 0x3C - bls _08054396 - movs r0, 0x87 - lsls r0, 3 - adds r1, r2, r0 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - bl sub_800AB9C - b _08054396 - .align 2, 0 -_080542C0: .4byte sTradeData -_080542C4: - bl IsLinkTaskFinished - lsls r0, 24 - cmp r0, 0 - beq _08054396 - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - b _08054338 -_080542E0: - ldr r0, _080542FC @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _08054396 - movs r0, 0x3 - bl FadeOutBGM - ldr r1, _08054300 @ =gMain - movs r0, 0x87 - lsls r0, 3 - adds r1, r0 - b _08054340 - .align 2, 0 -_080542FC: .4byte gPaletteFade -_08054300: .4byte gMain -_08054304: - bl IsBGMStopped - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08054396 - ldr r0, _08054328 @ =gWirelessCommType - ldrb r0, [r0] - cmp r0, 0 - beq _08054334 - ldr r0, _0805432C @ =gMain - ldr r1, [r0, 0x8] - ldr r0, _08054330 @ =sub_804C718 - cmp r1, r0 - bne _08054334 - bl sub_800AB9C - b _08054338 - .align 2, 0 -_08054328: .4byte gWirelessCommType -_0805432C: .4byte gMain -_08054330: .4byte sub_804C718 -_08054334: - bl sub_800AAC0 -_08054338: - ldr r1, _08054348 @ =gMain - movs r2, 0x87 - lsls r2, 3 - adds r1, r2 -_08054340: - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - b _08054396 - .align 2, 0 -_08054348: .4byte gMain -_0805434C: - ldr r0, _08054374 @ =gWirelessCommType - ldrb r0, [r0] - cmp r0, 0 - beq _08054384 - ldr r1, [r2, 0x8] - ldr r0, _08054378 @ =sub_804C718 - cmp r1, r0 - bne _08054384 - bl IsLinkRfuTaskFinished - lsls r0, 24 - cmp r0, 0 - beq _08054396 - ldr r0, _0805437C @ =gSoftResetDisabled - movs r1, 0 - strb r1, [r0] - ldr r0, _08054380 @ =sub_80543C4 - bl SetMainCallback2 - b _08054396 - .align 2, 0 -_08054374: .4byte gWirelessCommType -_08054378: .4byte sub_804C718 -_0805437C: .4byte gSoftResetDisabled -_08054380: .4byte sub_80543C4 -_08054384: - ldr r0, _080543B8 @ =gReceivedRemoteLinkPlayers - ldrb r1, [r0] - cmp r1, 0 - bne _08054396 - ldr r0, _080543BC @ =gSoftResetDisabled - strb r1, [r0] - ldr r0, _080543C0 @ =sub_80543C4 - bl SetMainCallback2 -_08054396: - bl HasLinkErrorOccurred - lsls r0, 24 - cmp r0, 0 - bne _080543A4 - bl RunTasks -_080543A4: - bl AnimateSprites - bl BuildOamBuffer - bl UpdatePaletteFade - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080543B8: .4byte gReceivedRemoteLinkPlayers -_080543BC: .4byte gSoftResetDisabled -_080543C0: .4byte sub_80543C4 - thumb_func_end sub_8053E8C - - thumb_func_start sub_80543C4 -sub_80543C4: @ 80543C4 - push {r4,r5,lr} - ldr r0, _08054430 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0 - bne _0805441A - bl FreeAllWindowBuffers - movs r0, 0x3 - bl GetBgTilemapBuffer - bl Free - movs r0, 0x1 - bl GetBgTilemapBuffer - bl Free - movs r0, 0 - bl GetBgTilemapBuffer - bl Free - bl FreeMonSpritesGfx - ldr r4, _08054434 @ =sTradeData - ldr r0, [r4] - bl Free - str r5, [r4] - ldr r0, _08054438 @ =gWirelessCommType - ldrb r0, [r0] - cmp r0, 0 - beq _08054412 - bl DestroyWirelessStatusIndicatorSprite -_08054412: - ldr r0, _0805443C @ =gMain - ldr r0, [r0, 0x8] - bl SetMainCallback2 -_0805441A: - bl RunTasks - bl AnimateSprites - bl BuildOamBuffer - bl UpdatePaletteFade - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08054430: .4byte gPaletteFade -_08054434: .4byte sTradeData -_08054438: .4byte gWirelessCommType -_0805443C: .4byte gMain - thumb_func_end sub_80543C4 - - thumb_func_start DoInGameTradeScene -DoInGameTradeScene: @ 8054440 - push {lr} - sub sp, 0x4 - bl ScriptContext2_Enable - ldr r0, _0805446C @ =sub_8054470 - movs r1, 0xA - bl CreateTask - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - bl HelpSystem_Disable - add sp, 0x4 - pop {r0} - bx r0 - .align 2, 0 -_0805446C: .4byte sub_8054470 - thumb_func_end DoInGameTradeScene - - thumb_func_start sub_8054470 -sub_8054470: @ 8054470 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _0805449C @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _08054494 - ldr r0, _080544A0 @ =CB2_InitTradeAnim_InGameTrade - bl SetMainCallback2 - ldr r1, _080544A4 @ =gFieldCallback - ldr r0, _080544A8 @ =FieldCallback_ReturnToEventScript2 - str r0, [r1] - adds r0, r4, 0 - bl DestroyTask -_08054494: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0805449C: .4byte gPaletteFade -_080544A0: .4byte CB2_InitTradeAnim_InGameTrade -_080544A4: .4byte gFieldCallback -_080544A8: .4byte FieldCallback_ReturnToEventScript2 - thumb_func_end sub_8054470 - - thumb_func_start CheckPartnersMonForRibbons -CheckPartnersMonForRibbons: @ 80544AC - push {r4,r5,lr} - movs r5, 0 - movs r4, 0 -_080544B2: - ldr r0, _080544F0 @ =gSelectedTradeMonPositions - ldrb r0, [r0, 0x1] - movs r1, 0x6 - bl __umodsi3 - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x64 - muls r0, r1 - ldr r1, _080544F4 @ =gEnemyParty - adds r0, r1 - adds r1, r4, 0 - adds r1, 0x43 - bl GetMonData - adds r0, r5, r0 - lsls r0, 24 - lsrs r5, r0, 24 - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0xB - bls _080544B2 - cmp r5, 0 - beq _080544EA - ldr r0, _080544F8 @ =0x0000083b - bl FlagSet -_080544EA: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080544F0: .4byte gSelectedTradeMonPositions -_080544F4: .4byte gEnemyParty -_080544F8: .4byte 0x0000083b - thumb_func_end CheckPartnersMonForRibbons - - thumb_func_start sub_80544FC -sub_80544FC: @ 80544FC - push {lr} - bl TradeAnimInit_LoadGfx - pop {r0} - bx r0 - thumb_func_end sub_80544FC - - thumb_func_start DrawTextOnTradeWindow -DrawTextOnTradeWindow: @ 8054508 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x14 - adds r5, r0, 0 - mov r8, r1 - adds r4, r2, 0 - lsls r5, 24 - lsrs r5, 24 - lsls r4, 24 - lsrs r4, 24 - adds r0, r5, 0 - movs r1, 0xFF - bl FillWindowPixelBuffer - ldr r2, _08054580 @ =sTradeData - ldr r1, [r2] - movs r6, 0x82 - lsls r6, 1 - adds r1, r6 - movs r3, 0 - movs r0, 0xF - strb r0, [r1] - ldr r0, [r2] - ldr r7, _08054584 @ =0x00000105 - adds r1, r0, r7 - movs r0, 0x1 - strb r0, [r1] - ldr r0, [r2] - adds r7, 0x1 - adds r1, r0, r7 - movs r0, 0x6 - strb r0, [r1] - str r3, [sp] - movs r0, 0x2 - str r0, [sp, 0x4] - ldr r0, [r2] - adds r0, r6 - str r0, [sp, 0x8] - lsls r4, 24 - asrs r4, 24 - str r4, [sp, 0xC] - mov r0, r8 - str r0, [sp, 0x10] - adds r0, r5, 0 - movs r1, 0x2 - movs r2, 0 - movs r3, 0x2 - bl AddTextPrinterParameterized4 - adds r0, r5, 0 - movs r1, 0x3 - bl CopyWindowToVram - add sp, 0x14 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08054580: .4byte sTradeData -_08054584: .4byte 0x00000105 - thumb_func_end DrawTextOnTradeWindow - - thumb_func_start Task_AnimateWirelessSignal -Task_AnimateWirelessSignal: @ 8054588 - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - ldr r1, _080545C0 @ =gTasks+0x8 - adds r4, r0, r1 - ldr r1, _080545C4 @ =gUnknown_826D250 - movs r2, 0 - ldrsh r0, [r4, r2] - lsls r0, 1 - adds r0, r1 - ldrb r0, [r0] - lsls r1, r0, 4 - adds r2, r1, 0 - movs r3, 0x4 - ldrsh r0, [r4, r3] - cmp r0, 0 - bne _080545CC - movs r0, 0x80 - lsls r0, 1 - cmp r1, r0 - beq _080545D4 - lsls r0, r1, 1 - ldr r1, _080545C8 @ =gUnknown_826BB5C - adds r0, r1 - b _080545D6 - .align 2, 0 -_080545C0: .4byte gTasks+0x8 -_080545C4: .4byte gUnknown_826D250 -_080545C8: .4byte gUnknown_826BB5C -_080545CC: - movs r0, 0x80 - lsls r0, 1 - cmp r1, r0 - bne _080545E4 -_080545D4: - ldr r0, _080545E0 @ =gUnknown_826BF5C -_080545D6: - movs r1, 0x30 - movs r2, 0x20 - bl LoadPalette - b _080545F2 - .align 2, 0 -_080545E0: .4byte gUnknown_826BF5C -_080545E4: - lsls r0, r2, 1 - ldr r1, _08054648 @ =gUnknown_826BD5C - adds r0, r1 - movs r1, 0x30 - movs r2, 0x20 - bl LoadPalette -_080545F2: - ldr r0, _0805464C @ =gUnknown_826D250 - movs r2, 0 - ldrsh r1, [r4, r2] - lsls r1, 1 - adds r1, r0 - ldrb r0, [r1] - cmp r0, 0 - bne _08054610 - movs r3, 0x2 - ldrsh r0, [r4, r3] - cmp r0, 0 - bne _08054610 - movs r0, 0xBC - bl PlaySE -_08054610: - movs r0, 0x2 - ldrsh r2, [r4, r0] - ldr r1, _0805464C @ =gUnknown_826D250 - movs r3, 0 - ldrsh r0, [r4, r3] - lsls r0, 1 - adds r1, 0x1 - adds r0, r1 - ldrb r0, [r0] - cmp r2, r0 - bne _08054650 - ldrh r0, [r4] - adds r0, 0x1 - strh r0, [r4] - movs r0, 0 - strh r0, [r4, 0x2] - movs r2, 0 - ldrsh r0, [r4, r2] - lsls r0, 1 - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0xFF - bne _08054656 - adds r0, r5, 0 - bl DestroyTask - b _08054656 - .align 2, 0 -_08054648: .4byte gUnknown_826BD5C -_0805464C: .4byte gUnknown_826D250 -_08054650: - ldrh r0, [r4, 0x2] - adds r0, 0x1 - strh r0, [r4, 0x2] -_08054656: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end Task_AnimateWirelessSignal - - thumb_func_start c3_0805465C -c3_0805465C: @ 805465C - push {r4-r7,lr} - mov r7, r8 - push {r7} - lsls r0, 24 - lsrs r0, 24 - adds r6, r0, 0 - lsls r0, r6, 2 - adds r0, r6 - lsls r0, 3 - ldr r1, _08054728 @ =gTasks+0x8 - adds r7, r0, r1 - movs r0, 0 - ldrsh r4, [r7, r0] - cmp r4, 0 - bne _080546BC - ldr r1, _0805472C @ =sTradeData - ldr r3, [r1] - ldr r5, _08054730 @ =0x0000010b - adds r2, r3, r5 - movs r0, 0x78 - strb r0, [r2] - subs r5, 0x2 - adds r2, r3, r5 - strb r0, [r2] - ldr r0, [r1] - movs r2, 0x85 - lsls r2, 1 - adds r0, r2 - strb r4, [r0] - ldr r0, [r1] - movs r3, 0x86 - lsls r3, 1 - adds r0, r3 - movs r1, 0xA0 - strb r1, [r0] - movs r1, 0x80 - lsls r1, 6 - movs r0, 0 - bl SetGpuRegBits - movs r0, 0x4A - movs r1, 0x10 - bl SetGpuReg - movs r0, 0x48 - movs r1, 0x13 - bl SetGpuReg -_080546BC: - ldr r4, _0805472C @ =sTradeData - ldr r2, [r4] - ldr r5, _08054730 @ =0x0000010b - mov r8, r5 - adds r0, r2, r5 - ldrb r1, [r0] - subs r5, 0x2 - adds r2, r5 - ldrb r0, [r2] - lsls r0, 8 - orrs r1, r0 - movs r0, 0x40 - bl SetGpuReg - ldr r2, [r4] - movs r1, 0x86 - lsls r1, 1 - adds r0, r2, r1 - ldrb r1, [r0] - movs r3, 0x85 - lsls r3, 1 - adds r0, r2, r3 - ldrb r0, [r0] - lsls r0, 8 - orrs r1, r0 - movs r0, 0x44 - bl SetGpuReg - ldrh r0, [r7] - adds r0, 0x1 - strh r0, [r7] - ldr r1, [r4] - adds r1, r5 - ldrb r0, [r1] - subs r0, 0x5 - strb r0, [r1] - ldr r1, [r4] - add r1, r8 - ldrb r0, [r1] - adds r0, 0x5 - strb r0, [r1] - ldr r0, [r4] - adds r0, r5 - ldrb r0, [r0] - cmp r0, 0x4F - bhi _0805471E - adds r0, r6, 0 - bl DestroyTask -_0805471E: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08054728: .4byte gTasks+0x8 -_0805472C: .4byte sTradeData -_08054730: .4byte 0x0000010b - thumb_func_end c3_0805465C - - thumb_func_start sub_8054734 -sub_8054734: @ 8054734 - push {r4-r7,lr} - lsls r0, 24 - lsrs r0, 24 - adds r7, r0, 0 - lsls r0, r7, 2 - adds r0, r7 - lsls r0, 3 - ldr r1, _080547E8 @ =gTasks+0x8 - adds r6, r0, r1 - movs r1, 0 - ldrsh r0, [r6, r1] - cmp r0, 0 - bne _08054774 - ldr r1, _080547EC @ =sTradeData - ldr r0, [r1] - ldr r3, _080547F0 @ =0x00000109 - adds r2, r0, r3 - movs r0, 0x50 - strb r0, [r2] - ldr r0, [r1] - ldr r2, _080547F4 @ =0x0000010b - adds r1, r0, r2 - movs r0, 0xA0 - strb r0, [r1] - movs r0, 0x4A - movs r1, 0x10 - bl SetGpuReg - movs r0, 0x48 - movs r1, 0x13 - bl SetGpuReg -_08054774: - ldr r5, _080547EC @ =sTradeData - ldr r0, [r5] - ldr r3, _080547F4 @ =0x0000010b - adds r1, r0, r3 - ldrb r1, [r1] - ldr r4, _080547F0 @ =0x00000109 - adds r0, r4 - ldrb r0, [r0] - lsls r0, 8 - orrs r1, r0 - movs r0, 0x40 - bl SetGpuReg - ldr r2, [r5] - movs r1, 0x86 - lsls r1, 1 - adds r0, r2, r1 - ldrb r1, [r0] - movs r3, 0x85 - lsls r3, 1 - adds r0, r2, r3 - ldrb r0, [r0] - lsls r0, 8 - orrs r1, r0 - movs r0, 0x44 - bl SetGpuReg - ldr r0, [r5] - adds r0, r4 - ldrb r0, [r0] - cmp r0, 0x78 - beq _080547FC - ldrh r0, [r6] - adds r0, 0x1 - strh r0, [r6] - ldr r0, [r5] - adds r1, r0, r4 - ldrb r0, [r1] - adds r0, 0x5 - strb r0, [r1] - ldr r0, [r5] - ldr r2, _080547F4 @ =0x0000010b - adds r1, r0, r2 - ldrb r0, [r1] - subs r0, 0x5 - strb r0, [r1] - ldr r0, [r5] - adds r0, r4 - ldrb r0, [r0] - cmp r0, 0x73 - bls _0805480C - ldr r2, _080547F8 @ =0x0000ffff - movs r0, 0x8 - movs r1, 0 - bl BlendPalettes - b _0805480C - .align 2, 0 -_080547E8: .4byte gTasks+0x8 -_080547EC: .4byte sTradeData -_080547F0: .4byte 0x00000109 -_080547F4: .4byte 0x0000010b -_080547F8: .4byte 0x0000ffff -_080547FC: - movs r1, 0x80 - lsls r1, 6 - movs r0, 0 - bl ClearGpuRegBits - adds r0, r7, 0 - bl DestroyTask -_0805480C: - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_8054734 - - .align 2, 0 @ Don't pad with nop. diff --git a/asm/union_room_chat.s b/asm/union_room_chat.s index 0d1640699..ae5381dda 100644 --- a/asm/union_room_chat.s +++ b/asm/union_room_chat.s @@ -1636,7 +1636,7 @@ _08129144: lsls r0, 24 cmp r0, 0 bne _08129206 - bl sub_804C1C0 + bl SetContinueGameWarpStatusToDynamicWarp movs r0, 0 bl TrySavingData ldr r0, _08129164 @ =gUnknown_203B0E0 @@ -1665,7 +1665,7 @@ _08129180: bne _08129206 movs r0, 0x30 bl PlaySE - bl sav2_gender2_inplace_and_xFE + bl ClearContinueGameWarpStatus2 ldr r0, _081291A0 @ =gUnknown_203B0E0 ldr r1, [r0] movs r0, 0xA diff --git a/data/trade.s b/data/trade.s index e9ff8b289..8ce10a337 100644 --- a/data/trade.s +++ b/data/trade.s @@ -8,17 +8,6 @@ .section .rodata .align 2, 0 - @ unknown -gUnknown_8260814:: @ 8260814 - .4byte 0x00000f24 @ sizeof(struct SaveBlock2) - .4byte 0x00003d68 @ sizeof(struct SaveBlock1) - .4byte 0x0000001c @ sizeof(struct MapData) - .4byte 0x00000530 @ unk - .4byte 0x00000034 @ unk - .4byte 0x00000024 @ sizeof(struct MailStruct) - .4byte 0x00000064 @ sizeof(struct Pokemon) - .4byte 0x00000528 - gTradeMovesBoxTilemap:: @ 8260834 .incbin "data/trade/unk_8260834.bin" diff --git a/include/constants/flags.h b/include/constants/flags.h index 80eaca3e0..bd356064c 100644 --- a/include/constants/flags.h +++ b/include/constants/flags.h @@ -1310,11 +1310,7 @@ #define FLAG_TRAINER_FLAG_START 0x500 // Vanilla: SYS_FLAGS = 0x800 -#if (NUM_TRAINERS) & 31 #define SYS_FLAGS (FLAG_TRAINER_FLAG_START + ((NUM_TRAINERS) + 31) / 32 * 32) -#else -#define SYS_FLAGS (FLAG_TRAINER_FLAG_START + (NUM_TRAINERS)) -#endif // SYSTEM FLAGS diff --git a/include/load_save.h b/include/load_save.h index 2406b5f03..6162c30b9 100644 --- a/include/load_save.h +++ b/include/load_save.h @@ -26,7 +26,7 @@ void ApplyNewEncryptionKeyToAllEncryptedData(u32 encryptionKey); void ApplyNewEncryptionKeyToBagItems(u32 encryptionKey); void ApplyNewEncryptionKeyToWord(u32 * word, u32 encryptionKey); void ApplyNewEncryptionKeyToHword(u16 * hword, u32 encryptionKey); -void sav2_gender2_inplace_and_xFE(void); -void sub_804C1C0(void); +void ClearContinueGameWarpStatus2(void); +void SetContinueGameWarpStatusToDynamicWarp(void); #endif // GUARD_LOAD_SAVE_H diff --git a/include/mevent.h b/include/mevent.h index 98d184f60..6b67aa27c 100644 --- a/include/mevent.h +++ b/include/mevent.h @@ -68,5 +68,6 @@ bool32 WonderCard_Test_Unk_08_6(void); u32 MENews_GetInput(u16 input); void sub_8143D24(void); u16 sub_81445C0(u32 command); +void sub_8144714(u32 a0, u32 a1); #endif //GUARD_MEVENT_H diff --git a/include/party_menu.h b/include/party_menu.h index 7f5433553..c07371a5d 100644 --- a/include/party_menu.h +++ b/include/party_menu.h @@ -87,5 +87,6 @@ void PartyMenuInit_FromPlayerPc(void); void CB2_PartyMenuFromStartMenu(void); void sub_8128198(void); void sub_8127FF4(u8 slot, u8 slot2); +void LoadHeldItemIcons(void); #endif // GUARD_PARTY_MENU_H diff --git a/include/strings.h b/include/strings.h index 2c1e93b38..ce5744a04 100644 --- a/include/strings.h +++ b/include/strings.h @@ -666,5 +666,6 @@ extern const u8 gText_XWillBeSentToY[]; extern const u8 gText_ByeByeVar1[]; extern const u8 gText_XSentOverY[]; extern const u8 gText_TakeGoodCareOfX[]; +extern const u8 gUnknown_841E325[]; #endif //GUARD_STRINGS_H diff --git a/ld_script.txt b/ld_script.txt index 1765ff6f1..78c7d089d 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -86,7 +86,6 @@ SECTIONS { asm/pokeball.o(.text); src/load_save.o(.text); src/trade.o(.text); - asm/trade.o(.text); src/play_time.o(.text); src/new_game.o(.text); asm/overworld.o(.text); @@ -400,6 +399,7 @@ SECTIONS { src/battle_gfx_sfx_util.o(.rodata); data/battle_interface.o(.rodata); data/pokeball.o(.rodata); + src/trade.o(.rodata); data/trade.o(.rodata); data/overworld.o(.rodata); data/tilesets.o(.rodata); diff --git a/src/load_save.c b/src/load_save.c index 0a7bbbfc5..583844d17 100644 --- a/src/load_save.c +++ b/src/load_save.c @@ -146,13 +146,13 @@ void sub_804C1AC(void) gSaveBlock2Ptr->specialSaveWarpFlags |= CONTINUE_GAME_WARP; } -void sub_804C1C0(void) +void SetContinueGameWarpStatusToDynamicWarp(void) { sub_8055778(0); gSaveBlock2Ptr->specialSaveWarpFlags |= CONTINUE_GAME_WARP; } -void sav2_gender2_inplace_and_xFE(void) +void ClearContinueGameWarpStatus2(void) { gSaveBlock2Ptr->specialSaveWarpFlags &= ~CONTINUE_GAME_WARP; } diff --git a/src/save.c b/src/save.c index 45f5fc6f0..30d2c22a9 100644 --- a/src/save.c +++ b/src/save.c @@ -70,8 +70,8 @@ extern void DoSaveFailedScreen(u8 saveType); // save_failed_screen extern void sub_800AB9C(void); // link extern bool8 IsLinkTaskFinished(void); // link extern void save_serialize_map(void); // fieldmap -extern void sub_804C1C0(void); // load_save -extern void sav2_gender2_inplace_and_xFE(void); // load_save +extern void SetContinueGameWarpStatusToDynamicWarp(void); // load_save +extern void ClearContinueGameWarpStatus2(void); // load_save // Sector num to begin writing save data. Sectors are rotated each time the game is saved. (possibly to avoid wear on flash memory?) u16 gFirstSaveSector; @@ -872,7 +872,7 @@ void sub_80DA634(u8 taskId) } break; case 3: - sub_804C1C0(); + SetContinueGameWarpStatusToDynamicWarp(); sub_80DA3AC(); gTasks[taskId].data[0] = 4; break; @@ -894,7 +894,7 @@ void sub_80DA634(u8 taskId) gTasks[taskId].data[0] = 7; break; case 7: - sav2_gender2_inplace_and_xFE(); + ClearContinueGameWarpStatus2(); sub_800AB9C(); gTasks[taskId].data[0] = 8; break; diff --git a/src/start_menu.c b/src/start_menu.c index dddb5f44e..4a4fe52e3 100644 --- a/src/start_menu.c +++ b/src/start_menu.c @@ -923,14 +923,14 @@ static void task50_after_link_battle_save(u8 taskId) data[0] = 1; break; case 1: - sub_804C1C0(); + SetContinueGameWarpStatusToDynamicWarp(); sub_80DA45C(); data[0] = 2; break; case 2: if (sub_80DA4A0()) { - sav2_gender2_inplace_and_xFE(); + ClearContinueGameWarpStatus2(); data[0] = 3; } break; diff --git a/src/trade.c b/src/trade.c index f33388eed..6f35c1880 100644 --- a/src/trade.c +++ b/src/trade.c @@ -15,6 +15,12 @@ #include "mail_data.h" #include "graphics.h" #include "link.h" +#include "random.h" +#include "save.h" +#include "load_save.h" +#include "quest_log.h" +#include "field_fadetransition.h" +#include "mevent.h" #include "help_system.h" #include "link_rfu.h" #include "cable_club.h" @@ -29,6 +35,7 @@ #include "party_menu.h" #include "util.h" #include "daycare.h" +#include "script.h" #include "event_data.h" #include "battle_interface.h" #include "pokemon_summary_screen.h" @@ -137,9 +144,14 @@ struct TradeAnimationResources { /*0xF6*/ u8 unk_F6; /*0xF8*/ u16 monSpecies[2]; /*0xFC*/ u8 unk_FC[7]; - /*0x103*/ u8 filler_103[5]; + /*0x103*/ u8 filler_103[1]; + /*0x104*/ u8 textColor[3]; + /*0x107*/ u8 filler_107[1]; /*0x108*/ u8 isCableTrade; - /*0x109*/ u8 filler_109[7]; + /*0x109*/ u8 win0left; + /*0x10A*/ u8 win0top; + /*0x10B*/ u8 win0right; + /*0x10C*/ u8 win0bottom; }; enum TradeStatusMsg @@ -210,13 +222,25 @@ static void GetInGameTradeMail(struct MailStruct * mail, const struct InGameTrad void CB2_RunTradeAnim_LinkTrade(void); void sub_8053E1C(void); void sub_8053E8C(void); -void LoadHeldItemIcons(void); -void DrawTextOnTradeWindow(u8 windowId, const u8 *str, s8 speed); +void sub_80543C4(void); +void sub_8054470(u8 taskId); void CheckPartnersMonForRibbons(void); +void DrawTextOnTradeWindow(u8 windowId, const u8 *str, s8 speed); void Task_AnimateWirelessSignal(u8 taskId); void c3_0805465C(u8 taskId); void sub_8054734(u8 taskId); +static const size_t gUnknown_8260814[] = { + sizeof(struct SaveBlock2), + sizeof(struct SaveBlock1), + sizeof(struct MapData), + 0x530, // unk + 0x34, // unk + sizeof(struct MailStruct), + sizeof(struct Pokemon), + 0x528 // unk +}; + extern const u16 gUnknown_8260C30[]; extern const u16 gUnknown_8261430[]; extern const struct BgTemplate gUnknown_8261F1C[4]; @@ -251,6 +275,8 @@ extern const u16 gUnknown_8269A5C[]; extern const u32 gUnknown_3379A0Bin[]; extern const u16 gUnknown_826407C[]; extern const u16 gUnknown_826601C[]; +extern const u16 gUnknown_826BB5C[]; +extern const u16 gUnknown_826BD5C[]; extern const u16 gUnknown_826BF5C[]; extern const u16 gUnknown_826701C[]; extern const u16 gUnknown_826985C[]; @@ -273,6 +299,7 @@ extern const union AffineAnimCmd *const gUnknown_826CF88[]; extern const struct SpriteTemplate gUnknown_826CF48; extern const s8 gUnknown_826D1E4[]; extern const u16 sInGameTradeMailMessages[][10]; +extern const u8 gUnknown_826D250[][2]; void sub_804C600(void) { @@ -6034,3 +6061,331 @@ void sub_8053E1C(void) BuildOamBuffer(); UpdatePaletteFade(); } + +void sub_8053E8C(void) +{ + switch (gMain.state) + { + case 0: + gMain.state++; + StringExpandPlaceholders(gStringVar4, gUnknown_841E325); + DrawTextOnTradeWindow(0, gStringVar4, 0); + break; + case 1: + sub_800AB9C(); + gMain.state = 100; + sTradeData->timer = 0; + break; + case 100: + if (++sTradeData->timer > 180) + { + gMain.state = 101; + sTradeData->timer = 0; + } + if (IsLinkTaskFinished()) + { + gMain.state = 2; + } + break; + case 101: + if (IsLinkTaskFinished()) + { + gMain.state = 2; + } + break; + case 2: + gMain.state = 50; + StringExpandPlaceholders(gStringVar4, gText_SavingDontTurnOffThePower2); + DrawTextOnTradeWindow(0, gStringVar4, 0); + break; + case 50: + if (InUnionRoom()) + { + sub_8113550(18, sTradeData->monSpecies); + } + else + { + sub_8113550(12, sTradeData->monSpecies); + IncrementGameStat(GAME_STAT_POKEMON_TRADES); + } + if (gWirelessCommType) + { + sub_8144714(2, gLinkPlayers[GetMultiplayerId() ^ 1].trainerId); + } + SetContinueGameWarpStatusToDynamicWarp(); + sub_80DA3AC(); + gMain.state++; + sTradeData->timer = 0; + break; + case 51: + if (++sTradeData->timer == 5) + { + gMain.state++; + } + break; + case 52: + if (sub_80DA3D8()) + { + ClearContinueGameWarpStatus2(); + gMain.state = 4; + } + else + { + sTradeData->timer = 0; + gMain.state = 51; + } + break; + case 4: + sub_80DA40C(); + gMain.state = 40; + sTradeData->timer = 0; + break; + case 40: + if (++sTradeData->timer > 50) + { + if (GetMultiplayerId() == 0) + { + sTradeData->timer = Random() % 30; + } + else + { + sTradeData->timer = 0; + } + gMain.state = 41; + } + break; + case 41: + if (sTradeData->timer == 0) + { + sub_800AB9C(); + gMain.state = 42; + } + else + { + sTradeData->timer--; + } + break; + case 42: + if (IsLinkTaskFinished()) + { + sub_80DA434(); + gMain.state = 5; + } + break; + case 5: + if (++sTradeData->timer > 60) + { + gMain.state++; + sub_800AB9C(); + } + break; + case 6: + if (IsLinkTaskFinished()) + { + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + gMain.state ++; + } + break; + case 7: + if (!gPaletteFade.active) + { + FadeOutBGM(3); + gMain.state++; + } + break; + case 8: + if (IsBGMStopped() == TRUE) + { + if (gWirelessCommType && gMain.savedCallback == sub_804C718) + { + sub_800AB9C(); + } + else + { + sub_800AAC0(); + } + gMain.state++; + } + break; + case 9: + if (gWirelessCommType && gMain.savedCallback == sub_804C718) + { + if (IsLinkRfuTaskFinished()) + { + gSoftResetDisabled = FALSE; + SetMainCallback2(sub_80543C4); + } + } + else if (!gReceivedRemoteLinkPlayers) + { + gSoftResetDisabled = FALSE; + SetMainCallback2(sub_80543C4); + } + break; + } + if (!HasLinkErrorOccurred()) + { + RunTasks(); + } + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +void sub_80543C4(void) +{ + if (!gPaletteFade.active) + { + FreeAllWindowBuffers(); + Free(GetBgTilemapBuffer(3)); + Free(GetBgTilemapBuffer(1)); + Free(GetBgTilemapBuffer(0)); + FreeMonSpritesGfx(); + FREE_AND_SET_NULL(sTradeData); + if (gWirelessCommType != 0) + DestroyWirelessStatusIndicatorSprite(); + SetMainCallback2(gMain.savedCallback); + } + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +void DoInGameTradeScene(void) +{ + ScriptContext2_Enable(); + CreateTask(sub_8054470, 10); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + HelpSystem_Disable(); +} + +void sub_8054470(u8 taskId) +{ + if (!gPaletteFade.active) + { + SetMainCallback2(CB2_InitTradeAnim_InGameTrade); + gFieldCallback = FieldCallback_ReturnToEventScript2; + DestroyTask(taskId); + } +} + +void CheckPartnersMonForRibbons(void) +{ + u8 nRibbons = 0; + u8 i; + for (i = 0; i < 12; i++) + { + nRibbons += GetMonData(&gEnemyParty[gSelectedTradeMonPositions[1] % 6], MON_DATA_CHAMPION_RIBBON + i); + } + if (nRibbons != 0) + FlagSet(FLAG_SYS_RIBBON_GET); +} + +void sub_80544FC(void) +{ + TradeAnimInit_LoadGfx(); +} + +void DrawTextOnTradeWindow(u8 windowId, const u8 *str, s8 speed) +{ + FillWindowPixelBuffer(windowId, PIXEL_FILL(15)); + sTradeData->textColor[0] = 15; + sTradeData->textColor[1] = 1; + sTradeData->textColor[2] = 6; + AddTextPrinterParameterized4(windowId, 2, 0, 2, 0, 2, sTradeData->textColor, speed, str); + CopyWindowToVram(windowId, 3); +} + +void Task_AnimateWirelessSignal(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + u16 r2 = 16 * gUnknown_826D250[data[0]][0]; + if (data[2] == 0) + { + if (r2 == 0x100) + LoadPalette(gUnknown_826BF5C, 0x30, 0x20); + else + LoadPalette(&gUnknown_826BB5C[r2], 0x30, 0x20); + } + else + { + if (r2 == 0x100) + LoadPalette(gUnknown_826BF5C, 0x30, 0x20); + else + LoadPalette(&gUnknown_826BD5C[r2], 0x30, 0x20); + } + if (gUnknown_826D250[data[0]][0] == 0 && data[1] == 0) + PlaySE(SE_W215); + if (data[1] == gUnknown_826D250[data[0]][1]) + { + data[0]++; + data[1] = 0; + if (gUnknown_826D250[data[0]][1] == 0xFF) + DestroyTask(taskId); + } + else + data[1]++; +} + +void c3_0805465C(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + + if (data[0] == 0) + { + sTradeData->win0left = sTradeData->win0right = 120; + sTradeData->win0top = 0; + sTradeData->win0bottom = 160; + SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); + SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_OBJ); + SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG0 | + WININ_WIN0_BG1 | + WININ_WIN0_OBJ); + } + + SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE2(sTradeData->win0left, sTradeData->win0right)); + SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE2(sTradeData->win0top, sTradeData->win0bottom)); + + data[0]++; + sTradeData->win0left -= 5; + sTradeData->win0right += 5; + + if (sTradeData->win0left < 80) + { + DestroyTask(taskId); + } +} + +void sub_8054734(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + + if (data[0] == 0) + { + sTradeData->win0left = 80; + sTradeData->win0right = 160; + SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_OBJ); + SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG0 | + WININ_WIN0_BG1 | + WININ_WIN0_OBJ); + } + + SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE2(sTradeData->win0left, sTradeData->win0right)); + SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE2(sTradeData->win0top, sTradeData->win0bottom)); + + if (sTradeData->win0left != 120) + { + data[0]++; + sTradeData->win0left += 5; + sTradeData->win0right -= 5; + + if (sTradeData->win0left >= 116) + BlendPalettes(0x8, 0, RGB_WHITEALPHA); + } + else + { + ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); + DestroyTask(taskId); + } +} -- cgit v1.2.3 From f6d768d5ed9899f5814349cb232da861f85cbc60 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 30 Oct 2019 14:20:32 -0400 Subject: Trade data; split off trade_scene --- data/trade.s | 542 --------- include/graphics.h | 2 + include/strings.h | 18 + include/trade.h | 5 + include/trade_scene.h | 6 + ld_script.txt | 2 + src/trade.c | 2975 +++++++++---------------------------------------- src/trade_scene.c | 2444 ++++++++++++++++++++++++++++++++++++++++ sym_ewram.txt | 2 + 9 files changed, 3017 insertions(+), 2979 deletions(-) create mode 100644 include/trade_scene.h create mode 100644 src/trade_scene.c diff --git a/data/trade.s b/data/trade.s index 8ce10a337..f3c6f8b7e 100644 --- a/data/trade.s +++ b/data/trade.s @@ -8,548 +8,6 @@ .section .rodata .align 2, 0 -gTradeMovesBoxTilemap:: @ 8260834 - .incbin "data/trade/unk_8260834.bin" - -gTradePartyBoxTilemap:: @ 8260A32 - .incbin "data/trade/unk_8260A32.bin" - -gUnknown_8260C30:: @ 8260C30 - .incbin "data/trade/unk_8260C30.bin" - -gUnknown_8261430:: @ 8261430 - .incbin "data/trade/unk_8261430.bin" - -gOamdata_8261C30:: - .4byte 0x80004000, 0x00000400 - -gOamData_8261C38:: - .4byte 0xc0004000, 0x00000400 - -gSpriteAnim_8261C40:: - obj_image_anim_frame 0x00, 5 - obj_image_anim_end - -gSpriteAnim_8261C48:: - obj_image_anim_frame 0x20, 5 - obj_image_anim_end - -gSpriteAnimTable_8261C50:: - .4byte gSpriteAnim_8261C40 - .4byte gSpriteAnim_8261C48 - -gUnknown_8261C58:: @ 8261C58 - obj_tiles gUnknown_8E9E1DC, 0x0800, 300 - -gUnknown_8261C60:: @ 8261C60 - obj_pal gUnknown_8E9CF3C, 2345 - -gSpriteAnim_8261C68:: - obj_image_anim_frame 0x00, 5 - obj_image_anim_end - -gSpriteAnim_8261C70:: - obj_image_anim_frame 0x08, 5 - obj_image_anim_end - -gSpriteAnim_8261C78:: - obj_image_anim_frame 0x10, 5 - obj_image_anim_end - -gSpriteAnim_8261C80:: - obj_image_anim_frame 0x18, 5 - obj_image_anim_end - -gSpriteAnim_8261C88:: - obj_image_anim_frame 0x20, 5 - obj_image_anim_end - -gSpriteAnim_8261C90:: - obj_image_anim_frame 0x28, 5 - obj_image_anim_end - -gSpriteAnimTable_8261C98:: - .4byte gSpriteAnim_8261C68 - .4byte gSpriteAnim_8261C70 - .4byte gSpriteAnim_8261C78 - .4byte gSpriteAnim_8261C80 - .4byte gSpriteAnim_8261C88 - .4byte gSpriteAnim_8261C90 - -gUnknown_8261CB0:: @ 8261CB0 - spr_template 300, 2345, gOamData_8261C38, gSpriteAnimTable_8261C50, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy - -gUnknown_8261CC8:: @ 8261CC8 - spr_template 200, 4925, gOamdata_8261C30, gSpriteAnimTable_8261C98, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy - -gUnknown_8261CE0:: - .incbin "data/trade/unk_8261CE0.gbapal" - -gUnknown_8261D00:: @ 8261D00 - obj_pal gUnknown_8261CE0, 4925 - -gUnknown_8261D08:: @ 8261D08 - .byte 0x04, 0x02, 0x0c, 0x0c, 0x00, 0x00 - .byte 0x02, 0x04, 0x0c, 0x0c, 0x00, 0x00 - .byte 0x07, 0x06, 0x01, 0x00, 0x00, 0x00 - .byte 0x01, 0x06, 0x07, 0x00, 0x00, 0x00 - - .byte 0x05, 0x03, 0x0c, 0x0c, 0x00, 0x00 - .byte 0x03, 0x05, 0x0c, 0x0c, 0x00, 0x00 - .byte 0x00, 0x07, 0x06, 0x01, 0x00, 0x00 - .byte 0x06, 0x07, 0x00, 0x01, 0x00, 0x00 - - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x04, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x09, 0x08, 0x07, 0x06, 0x00, 0x00 - .byte 0x03, 0x01, 0x00, 0x00, 0x00, 0x00 - - .byte 0x01, 0x01, 0x01, 0x01, 0x00, 0x00 - .byte 0x05, 0x01, 0x01, 0x01, 0x00, 0x00 - .byte 0x02, 0x09, 0x08, 0x07, 0x00, 0x00 - .byte 0x08, 0x09, 0x06, 0x06, 0x00, 0x00 - - .byte 0x02, 0x02, 0x02, 0x02, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x0b, 0x0a, 0x09, 0x08, 0x07, 0x06 - .byte 0x05, 0x03, 0x01, 0x00, 0x00, 0x00 - - .byte 0x03, 0x03, 0x03, 0x03, 0x00, 0x00 - .byte 0x01, 0x01, 0x01, 0x01, 0x00, 0x00 - .byte 0x04, 0x04, 0x04, 0x04, 0x00, 0x00 - .byte 0x0a, 0x08, 0x06, 0x00, 0x00, 0x00 - - .byte 0x0a, 0x08, 0x0c, 0x00, 0x00, 0x00 - .byte 0x08, 0x0a, 0x0c, 0x00, 0x00, 0x00 - .byte 0x01, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x07, 0x00, 0x01, 0x00, 0x00, 0x00 - - .byte 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x09, 0x0c, 0x00, 0x00, 0x00, 0x00 - .byte 0x06, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - - .byte 0x06, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x0a, 0x06, 0x00, 0x00, 0x00, 0x00 - .byte 0x03, 0x02, 0x01, 0x00, 0x00, 0x00 - .byte 0x09, 0x07, 0x00, 0x00, 0x00, 0x00 - - .byte 0x07, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x0b, 0x0c, 0x00, 0x00, 0x00, 0x00 - .byte 0x08, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x02, 0x01, 0x00, 0x00, 0x00, 0x00 - - .byte 0x08, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x06, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x05, 0x04, 0x03, 0x02, 0x01, 0x00 - .byte 0x0b, 0x09, 0x07, 0x00, 0x00, 0x00 - - .byte 0x09, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x04, 0x02, 0x00, 0x00, 0x00, 0x00 - - .byte 0x0b, 0x09, 0x07, 0x06, 0x00, 0x00 - .byte 0x07, 0x06, 0x00, 0x00, 0x00, 0x00 - .byte 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00 - -gTradeMonSpriteCoords:: @ 8261E40 - .byte 0x01, 0x05 - .byte 0x08, 0x05 - .byte 0x01, 0x0a - .byte 0x08, 0x0a - .byte 0x01, 0x0f - .byte 0x08, 0x0f - .byte 0x10, 0x05 - .byte 0x17, 0x05 - .byte 0x10, 0x0a - .byte 0x17, 0x0a - .byte 0x10, 0x0f - .byte 0x17, 0x0f - .byte 0x17, 0x12 - -gUnknown_8261E5A:: @ 8261E5A - .byte 0x05, 0x04 - .byte 0x0c, 0x04 - .byte 0x05, 0x09 - .byte 0x0c, 0x09 - .byte 0x05, 0x0e - .byte 0x0c, 0x0e - .byte 0x14, 0x04 - .byte 0x1b, 0x04 - .byte 0x14, 0x09 - .byte 0x1b, 0x09 - .byte 0x14, 0x0e - .byte 0x1b, 0x0e - -gUnknown_8261E72:: @ 8261E72 - .byte 0x01, 0x03 - .byte 0x08, 0x03 - .byte 0x01, 0x08 - .byte 0x08, 0x08 - .byte 0x01, 0x0d - .byte 0x08, 0x0d - - .byte 0x10, 0x03 - .byte 0x17, 0x03 - .byte 0x10, 0x08 - .byte 0x17, 0x08 - .byte 0x10, 0x0d - .byte 0x17, 0x0d - -gTradeUnknownSpriteCoords:: @ 8261E8A - .byte 0x3c, 0x09, 0xb4, 0x09 - .byte 0x30, 0x09, 0xa8, 0x09 - -gUnknown_8261E92:: - .byte 0x00, 0x0e, 0x0f, 0x1d - .byte 0x03, 0x05, 0x03, 0x07 - .byte 0x12, 0x05, 0x12, 0x07 - .byte 0x08, 0x07, 0x16, 0x0c - .byte 0x08, 0x07, 0x16, 0x0c - .byte 0x06, 0x07, 0x18, 0x0c - .byte 0x06, 0x07, 0x18, 0x0c - .byte 0x08, 0x07, 0x16, 0x0c - .byte 0x07, 0x07, 0x17, 0x0c - -gUnknown_8261EB6:: @ 8261EB6 - .string "$" - -gUnknown_8261EB7:: - .string "{COLOR DARK_GREY}{HIGHLIGHT TRANSPARENT}{SHADOW RED}$" - -gText_MaleSymbol4:: @ 8261EC1 - .string "♂$" - -gText_FemaleSymbol4:: @ 8261EC3 - .string "♀$" - -gText_GenderlessSymbol:: @ 8261EC5 - .string "$" - -gUnknown_8261EC6:: - .string "$" - -gUnknown_8261EC7:: @ 8261EC7 - .string "\n$" - -gUnknown_8261EC9:: - .string "/$" - - .align 2 -gUnknown_8261ECC:: @ 8261ECC - .4byte gUnknown_841E0B9 - .4byte gUnknown_841E0C0 - .4byte gUnknown_841E0D2 - .4byte gUnknown_841E0DA - .4byte gUnknown_841E0E0 - .4byte gUnknown_841E0EE - -gUnknown_8261EE4:: @ 8261EE4 - .4byte gUnknown_841E10A, sub_804F440 - .4byte gUnknown_841E112, sub_804F464 - -sTradeErrorOrStatusMessagePtrs:: @ 8261EF4 - .4byte gUnknown_841E118 @ Communication standby - .4byte gUnknown_841E145 @ The trade has been canceled. - .4byte gUnknown_841E16B @ That's your only POKéMON for battle - .4byte gUnknown_8417094 @ That's your only POKéMON for battle - .4byte gUnknown_841E199 @ Waiting for your friend to finish - .4byte gUnknown_841E1C5 @ Your friend wants to trade POKéMON - .4byte gUnknown_84170BC @ That POKéMON can't be traded now - .4byte gUnknown_84170E0 @ An EGG can't be traded now - .4byte gUnknown_84170FC @ The other TRAINER's POKéMON can't be traded now - -gUnknown_8261F18:: @ 8261F18 - .byte 0, 1, 2 - - .align 2 -gUnknown_8261F1C:: @ 8261F1C - .4byte 0x000001f8 - @ { - @ .bg = 0, - @ .charBaseIndex = 2, - @ .mapBaseIndex = 31, - @ .screenSize = 0, - @ .paletteMode = 0, - @ .priority = 0, - @ .baseTile = 0x0000 - @ } - .4byte 0x00001051 - @ { - @ .bg = 1, - @ .charBaseIndex = 0, - @ .mapBaseIndex = 5, - @ .screenSize = 0, - @ .paletteMode = 0, - @ .priority = 1, - @ .baseTile = 0x0000 - @ } - .4byte 0x00002062 - @ { - @ .bg = 2, - @ .charBaseIndex = 0, - @ .mapBaseIndex = 6, - @ .screenSize = 0, - @ .paletteMode = 0, - @ .priority = 2, - @ .baseTile = 0x0000 - @ } - .4byte 0x00003073 - @ { - @ .bg = 3, - @ .charBaseIndex = 0, - @ .mapBaseIndex = 7, - @ .screenSize = 0, - @ .paletteMode = 0, - @ .priority = 3, - @ .baseTile = 0x0000 - @ } - -gUnknown_8261F2C:: @ 8261F2C - .byte 0, 4, 7, 22, 4, 15 - .2byte 0x001e - @ { - @ .bg = 0, - @ .tilemapLeft = 4, - @ .tilemapTop = 7, - @ .width = 22, - @ .height = 4, - @ .paletteNum = 15, - @ .baseBlock = 0x001e - @ } - .byte 0, 17, 15, 12, 4, 15 - .2byte 0x0076 - @ { - @ .bg = 0, - @ .tilemapLeft = 17, - @ .tilemapTop = 15, - @ .width = 12, - @ .height = 4, - @ .paletteNum = 15, - @ .baseBlock = 0x0076 - @ } - .byte 0, 0, 5, 8, 2, 13 - .2byte 0x00a6 - @ { - @ .bg = 0, - @ .tilemapLeft = 0, - @ .tilemapTop = 5, - @ .width = 8, - @ .height = 2, - @ .paletteNum = 13, - @ .baseBlock = 0x00a6 - @ } - .byte 0, 7, 5, 8, 2, 13 - .2byte 0x00b6 - @ { - @ .bg = 0, - @ .tilemapLeft = 7, - @ .tilemapTop = 5, - @ .width = 8, - @ .height = 2, - @ .paletteNum = 13, - @ .baseBlock = 0x00b6 - @ } - .byte 0, 0, 10, 8, 2, 13 - .2byte 0x00c6 - @ { - @ .bg = 0, - @ .tilemapLeft = 0, - @ .tilemapTop = 10, - @ .width = 8, - @ .height = 2, - @ .paletteNum = 13, - @ .baseBlock = 0x00c6 - @ } - .byte 0, 7, 10, 8, 2, 13 - .2byte 0x00d6 - @ { - @ .bg = 0, - @ .tilemapLeft = 7, - @ .tilemapTop = 10, - @ .width = 8, - @ .height = 2, - @ .paletteNum = 13, - @ .baseBlock = 0x00d6 - @ } - .byte 0, 0, 15, 8, 2, 13 - .2byte 0x00e6 - @ { - @ .bg = 0, - @ .tilemapLeft = 0, - @ .tilemapTop = 15, - @ .width = 8, - @ .height = 2, - @ .paletteNum = 13, - @ .baseBlock = 0x00e6 - @ } - .byte 0, 7, 15, 8, 2, 13 - .2byte 0x00f6 - @ { - @ .bg = 0, - @ .tilemapLeft = 7, - @ .tilemapTop = 15, - @ .width = 8, - @ .height = 2, - @ .paletteNum = 13, - @ .baseBlock = 0x00f6 - @ } - .byte 0, 15, 5, 8, 2, 13 - .2byte 0x0106 - @ { - @ .bg = 0, - @ .tilemapLeft = 15, - @ .tilemapTop = 5, - @ .width = 8, - @ .height = 2, - @ .paletteNum = 13, - @ .baseBlock = 0x0106 - @ } - .byte 0, 22, 5, 8, 2, 13 - .2byte 0x0116 - @ { - @ .bg = 0, - @ .tilemapLeft = 22, - @ .tilemapTop = 5, - @ .width = 8, - @ .height = 2, - @ .paletteNum = 13, - @ .baseBlock = 0x0116 - @ } - .byte 0, 15, 10, 8, 2, 13 - .2byte 0x0126 - @ { - @ .bg = 0, - @ .tilemapLeft = 15, - @ .tilemapTop = 10, - @ .width = 8, - @ .height = 2, - @ .paletteNum = 13, - @ .baseBlock = 0x0126 - @ } - .byte 0, 22, 10, 8, 2, 13 - .2byte 0x0136 - @ { - @ .bg = 0, - @ .tilemapLeft = 22, - @ .tilemapTop = 10, - @ .width = 8, - @ .height = 2, - @ .paletteNum = 13, - @ .baseBlock = 0x0136 - @ } - .byte 0, 15, 15, 8, 2, 13 - .2byte 0x0146 - @ { - @ .bg = 0, - @ .tilemapLeft = 15, - @ .tilemapTop = 15, - @ .width = 8, - @ .height = 2, - @ .paletteNum = 13, - @ .baseBlock = 0x0146 - @ } - .byte 0, 22, 15, 8, 2, 13 - .2byte 0x0156 - @ { - @ .bg = 0, - @ .tilemapLeft = 22, - @ .tilemapTop = 15, - @ .width = 8, - @ .height = 2, - @ .paletteNum = 13, - @ .baseBlock = 0x0156 - @ } - .byte 0, 2, 5, 14, 2, 13 - .2byte 0x0166 - @ { - @ .bg = 0, - @ .tilemapLeft = 2, - @ .tilemapTop = 5, - @ .width = 14, - @ .height = 2, - @ .paletteNum = 13, - @ .baseBlock = 0x0166 - @ } - .byte 0, 3, 8, 11, 8, 15 - .2byte 0x0182 - @ { - @ .bg = 0, - @ .tilemapLeft = 3, - @ .tilemapTop = 8, - @ .width = 11, - @ .height = 8, - @ .paletteNum = 15, - @ .baseBlock = 0x0182 - @ } - .byte 0, 17, 5, 14, 2, 15 - .2byte 0x01da - @ { - @ .bg = 0, - @ .tilemapLeft = 17, - @ .tilemapTop = 5, - @ .width = 14, - @ .height = 2, - @ .paletteNum = 15, - @ .baseBlock = 0x01da - @ } - .byte 0, 18, 8, 11, 8, 15 - .2byte 0x01f6 - @ { - @ .bg = 0, - @ .tilemapLeft = 18, - @ .tilemapTop = 8, - @ .width = 11, - @ .height = 8, - @ .paletteNum = 15, - @ .baseBlock = 0x01f6 - @ } - .byte 255, 0, 0, 0, 0, 0 - .2byte 0x0000 - @ { - @ .bg = 255, - @ .tilemapLeft = 0, - @ .tilemapTop = 0, - @ .width = 0, - @ .height = 0, - @ .paletteNum = 0, - @ .baseBlock = 0x0000 - @ } - -gUnknown_8261FC4:: @ 8261FC4 - .byte 0, 21, 13, 6, 4, 15 - .2byte 0x024e - @ { - @ .bg = 0, - @ .tilemapLeft = 21, - @ .tilemapTop = 13, - @ .width = 6, - @ .height = 4, - @ .paletteNum = 15, - @ .baseBlock = 0x024e - @ } - - .string "かいめの そうしん$", 13 - .string "かいめの じゅしん$", 13 - .string "ポケモンアイコンセット$", 13 - .string "OBJテキストセット$", 13 - .string "セルセット$", 13 - .string "OBJテキストADD$", 13 - .string "システムメッセージADD$", 13 - .string "はいけいセット$", 13 - -gJPText_Shedinja:: @ 8262034 - .string "ヌケニン$" - .string "こうかんせいりつ $" - .string "だめだたらしいよ $" - -gUnknown_8262055:: @ 8262055 - .byte 0x04, 0x03 - .byte 0x13, 0x03 - - .align 2 gUnknown_826205C:: .incbin "data/trade/unk_826207C.gbapal" diff --git a/include/graphics.h b/include/graphics.h index ba174b348..20e322bc1 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -4216,8 +4216,10 @@ extern const u8 gMonIcon_QuestionMark[]; // trade extern const u16 gUnknown_8E9CEDC[]; +extern const u16 gUnknown_8E9CF3C[]; extern const u16 gUnknown_8E9CF5C[]; extern const u16 gUnknown_8E9E9FC[]; +extern const u16 gUnknown_8E9E1DC[]; extern const u16 gUnknown_8E9F1FC[]; #endif //GUARD_GRAPHICS_H diff --git a/include/strings.h b/include/strings.h index ce5744a04..301bfb9c6 100644 --- a/include/strings.h +++ b/include/strings.h @@ -667,5 +667,23 @@ extern const u8 gText_ByeByeVar1[]; extern const u8 gText_XSentOverY[]; extern const u8 gText_TakeGoodCareOfX[]; extern const u8 gUnknown_841E325[]; +extern const u8 gUnknown_841E0B9[]; +extern const u8 gUnknown_841E0C0[]; +extern const u8 gUnknown_841E0D2[]; +extern const u8 gUnknown_841E0DA[]; +extern const u8 gUnknown_841E0E0[]; +extern const u8 gUnknown_841E0EE[]; +extern const u8 gUnknown_841E10A[]; +extern const u8 gUnknown_841E112[]; +extern const u8 gUnknown_841E118[]; +extern const u8 gUnknown_841E145[]; +extern const u8 gUnknown_841E16B[]; +extern const u8 gUnknown_8417094[]; +extern const u8 gUnknown_841E199[]; +extern const u8 gUnknown_841E1C5[]; +extern const u8 gUnknown_84170BC[]; +extern const u8 gUnknown_84170E0[]; +extern const u8 gUnknown_84170FC[]; +extern const u8 gUnknown_841E09F[]; #endif //GUARD_STRINGS_H diff --git a/include/trade.h b/include/trade.h index 02ed7d8c4..b1ae5669e 100644 --- a/include/trade.h +++ b/include/trade.h @@ -1,6 +1,11 @@ #ifndef GUARD_TRADE_H #define GUARD_TRADE_H +extern struct MailStruct gLinkPartnerMail[6]; +extern u8 gSelectedTradeMonPositions[2]; + +extern const u16 gUnknown_826601C[]; +void sub_804C718(void); s32 sub_804FB34(void); #endif //GUARD_TRADE_H diff --git a/include/trade_scene.h b/include/trade_scene.h new file mode 100644 index 000000000..025e2b237 --- /dev/null +++ b/include/trade_scene.h @@ -0,0 +1,6 @@ +#ifndef GUARD_TRADE_SCENE_H +#define GUARD_TRADE_SCENE_H + +void CB2_InitTradeAnim_LinkTrade(void); + +#endif //GUARD_TRADE_SCENE_H diff --git a/ld_script.txt b/ld_script.txt index 78c7d089d..b66aa6b85 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -86,6 +86,7 @@ SECTIONS { asm/pokeball.o(.text); src/load_save.o(.text); src/trade.o(.text); + src/trade_scene.o(.text); src/play_time.o(.text); src/new_game.o(.text); asm/overworld.o(.text); @@ -400,6 +401,7 @@ SECTIONS { data/battle_interface.o(.rodata); data/pokeball.o(.rodata); src/trade.o(.rodata); + src/trade_scene.o(.rodata); data/trade.o(.rodata); data/overworld.o(.rodata); data/tilesets.o(.rodata); diff --git a/src/trade.c b/src/trade.c index 6f35c1880..728258a50 100644 --- a/src/trade.c +++ b/src/trade.c @@ -41,6 +41,8 @@ #include "pokemon_summary_screen.h" #include "pokemon_storage_system.h" #include "new_menu_helpers.h" +#include "trade.h" +#include "trade_scene.h" #include "constants/species.h" #include "constants/items.h" #include "constants/easy_chat.h" @@ -48,22 +50,6 @@ #include "constants/region_map.h" #include "constants/moves.h" -struct InGameTrade { - /*0x00*/ u8 nickname[POKEMON_NAME_LENGTH + 1]; - /*0x0C*/ u16 species; - /*0x0E*/ u8 ivs[NUM_STATS]; - /*0x14*/ u8 abilityNum; - /*0x18*/ u32 otId; - /*0x1C*/ u8 conditions[5]; - /*0x24*/ u32 personality; - /*0x28*/ u16 heldItem; - /*0x2A*/ u8 mailNum; - /*0x2B*/ u8 otName[11]; - /*0x36*/ u8 otGender; - /*0x37*/ u8 sheen; - /*0x38*/ u16 requestedSpecies; -}; - struct TradeMenuResources { /*0x0000*/ u8 unk_0; @@ -104,56 +90,6 @@ struct TradeMenuResources /*0x08F0*/ u16 tilemapBuffer[BG_SCREEN_SIZE / 2]; }; -struct TradeAnimationResources { - /*0x00*/ struct Pokemon mon; - /*0x64*/ u32 timer; - /*0x68*/ u32 monPersonalities[2]; - /*0x70*/ u8 filler_70[2]; - /*0x72*/ u8 unk_72; - /*0x73*/ u8 unk_73; - /*0x74*/ u16 linkData[10]; - /*0x88*/ u8 unk_88; - /*0x89*/ u8 unk_89; - /*0x8A*/ u16 unk_8A; - /*0x8C*/ u16 unk_8C; - /*0x8E*/ u8 pokePicSpriteIdxs[2]; - /*0x90*/ u8 unk_90; - /*0x91*/ u8 unk_91; - /*0x92*/ u8 unk_92; - /*0x93*/ u8 unk_93; - /*0x94*/ u16 state; - /*0x96*/ u8 filler_96[0xD2 - 0x96]; - /*0xD2*/ u8 pokeballSpriteId; - /*0xD3*/ u8 unk_D3; - /*0xD4*/ u16 unk_D4; - /*0xD6*/ u16 unk_D6; - /*0xD8*/ u16 unk_D8; - /*0xDA*/ u16 unk_DA; - /*0xDC*/ u16 unk_DC; - /*0xDE*/ u16 unk_DE; - /*0xE0*/ s16 bg1vofs; - /*0xE2*/ s16 bg1hofs; - /*0xE4*/ s16 bg2vofs; - /*0xE6*/ s16 bg2hofs; - /*0xE8*/ u16 sXY; - /*0xEA*/ u16 unk_EA; - /*0xEC*/ u16 unk_EC; - /*0xEE*/ bool8 isLinkTrade; - /*0xF0*/ u16 tradeSpecies[2]; - /*0xF4*/ u16 cachedMapMusic; - /*0xF6*/ u8 unk_F6; - /*0xF8*/ u16 monSpecies[2]; - /*0xFC*/ u8 unk_FC[7]; - /*0x103*/ u8 filler_103[1]; - /*0x104*/ u8 textColor[3]; - /*0x107*/ u8 filler_107[1]; - /*0x108*/ u8 isCableTrade; - /*0x109*/ u8 win0left; - /*0x10A*/ u8 win0top; - /*0x10B*/ u8 win0right; - /*0x10C*/ u8 win0bottom; -}; - enum TradeStatusMsg { TRADESTATMSG_COMMSTANDBY = 0, @@ -174,7 +110,6 @@ EWRAM_DATA u8 *gUnknown_2031C94[14] = {}; EWRAM_DATA struct MailStruct gLinkPartnerMail[6] = {}; EWRAM_DATA u8 gSelectedTradeMonPositions[2] = {0}; EWRAM_DATA struct TradeMenuResources * sTradeMenuResourcesPtr = NULL; -EWRAM_DATA struct TradeAnimationResources * sTradeData = NULL; void sub_804C728(void); void sub_804D4F8(void); @@ -193,6 +128,8 @@ void sub_804F08C(u8 a0, u8 partyIdx, u8 a2, u8 a3, u8 a4, u8 a5); void sub_804F284(u8 side); void sub_804F3B4(void); void sub_804F3C8(u8 a0); +void TradeMenuAction_Summary(u8 taskId); +void TradeMenuAction_Trade(u8 taskId); void sub_804F488(u16 a0, u8 a1); static void sub_804F4DC(void); void PrintTradeErrorOrStatusMessage(u8 str_idx); @@ -203,32 +140,6 @@ void sub_804F890(u8 side); void sub_804F964(void); void sub_804F9D8(void); u32 sub_804FA14(struct Pokemon * party, int partyCount, int cursorPos); -void CB2_InitTradeAnim_LinkTrade(void); -void sub_805049C(void); -void sub_80504B0(void); -void TradeAnimInit_LoadGfx(void); -void CB2_RunTradeAnim_InGameTrade(void); -void SetTradeSequenceBgGpuRegs(u8 idx); -void sub_8050DE0(void); -void sub_8050E24(void); -u8 sub_8050F14(void); -u8 sub_8050F3C(void); -u8 sub_805232C(void); -void SpriteCB_TradePokeball_Outbound(struct Sprite * sprite); -void SpriteCB_TradePokeball_Outbound2(struct Sprite * sprite); -void SpriteCB_TradePokeball_Inbound(struct Sprite * sprite); -void BufferInGameTradeMonName(void); -static void GetInGameTradeMail(struct MailStruct * mail, const struct InGameTrade * inGameTrade); -void CB2_RunTradeAnim_LinkTrade(void); -void sub_8053E1C(void); -void sub_8053E8C(void); -void sub_80543C4(void); -void sub_8054470(u8 taskId); -void CheckPartnersMonForRibbons(void); -void DrawTextOnTradeWindow(u8 windowId, const u8 *str, s8 speed); -void Task_AnimateWirelessSignal(u8 taskId); -void c3_0805465C(u8 taskId); -void sub_8054734(u8 taskId); static const size_t gUnknown_8260814[] = { sizeof(struct SaveBlock2), @@ -241,65 +152,524 @@ static const size_t gUnknown_8260814[] = { 0x528 // unk }; -extern const u16 gUnknown_8260C30[]; -extern const u16 gUnknown_8261430[]; -extern const struct BgTemplate gUnknown_8261F1C[4]; -extern const struct WindowTemplate gUnknown_8261F2C[18]; -extern const u8 gTradeMonSpriteCoords[][2]; -extern const u8 *gUnknown_8261ECC[]; -extern const u8 gTradeUnknownSpriteCoords[][4]; -extern const struct SpriteTemplate gUnknown_8261CB0; -extern const struct SpriteTemplate gUnknown_8261CC8; -extern const u8 gJPText_Shedinja[]; -extern const u8 gUnknown_8261D08[][4][6]; -extern const u16 gTradePartyBoxTilemap[]; -extern const u16 gTradeMovesBoxTilemap[]; -extern const u8 gUnknown_8262055[][2]; -extern const u8 gUnknown_8261E5A[][12]; -extern const u8 gUnknown_8261E72[][12]; -extern const u8 gUnknown_8261F18[]; -extern const u8 gUnknown_8261EB6[]; -extern const u8 gUnknown_8261EC7[]; -extern const u8 gUnknown_841E09F[]; -extern const u8 *const sTradeErrorOrStatusMessagePtrs[]; -extern const struct SpritePalette gUnknown_8261D00; -extern const struct SpritePalette gUnknown_8261C60; -extern const struct SpriteSheet gUnknown_8261C58; -extern const u16 gTradeGlow2PaletteAnimTable[]; -extern const struct SpriteSheet gUnknown_826CDD4; -extern const struct SpritePalette gUnknown_826CDDC; -extern const struct BgTemplate gUnknown_826D1D4[4]; -extern const struct WindowTemplate gUnknown_826D1BC[]; -extern const u16 gUnknown_826AA5C[]; -extern const u16 gUnknown_8269A5C[]; -extern const u32 gUnknown_3379A0Bin[]; -extern const u16 gUnknown_826407C[]; -extern const u16 gUnknown_826601C[]; -extern const u16 gUnknown_826BB5C[]; -extern const u16 gUnknown_826BD5C[]; -extern const u16 gUnknown_826BF5C[]; -extern const u16 gUnknown_826701C[]; -extern const u16 gUnknown_826985C[]; -extern const u16 gUnknown_826995C[]; -extern const u32 gWirelessSignal4bpp[]; -extern const u32 gUnknown_826C60C[]; -extern const struct SpriteSheet gUnknown_826CE2C; -extern const struct SpriteSheet gUnknown_826CE7C; -extern const struct SpriteSheet gUnknown_826CEB0; -extern const struct SpriteSheet gUnknown_826CF28; -extern const struct SpritePalette gUnknown_826CE34; -extern const struct SpritePalette gUnknown_826CE3C; -extern const struct InGameTrade gInGameTrades[]; -extern const struct SpriteTemplate sTradePokeballSpriteTemplate; -extern const struct SpriteTemplate gUnknown_826CF30; -extern const struct SpriteTemplate sGameLinkCableEndSpriteTemplate; -extern const struct SpriteTemplate gUnknown_826CE44; -extern const struct SpriteTemplate sGlowBallSpriteTemplate; -extern const union AffineAnimCmd *const gUnknown_826CF88[]; -extern const struct SpriteTemplate gUnknown_826CF48; -extern const s8 gUnknown_826D1E4[]; -extern const u16 sInGameTradeMailMessages[][10]; -extern const u8 gUnknown_826D250[][2]; +const u16 gTradeMovesBoxTilemap[] = INCBIN_U16("data/trade/unk_8260834.bin"); +const u16 gTradePartyBoxTilemap[] = INCBIN_U16("data/trade/unk_8260A32.bin"); +const u16 gUnknown_8260C30[] = INCBIN_U16("data/trade/unk_8260C30.bin"); +const u16 gUnknown_8261430[] = INCBIN_U16("data/trade/unk_8261430.bin"); + +const struct OamData gOamData_8261C30 = { + .shape = SPRITE_SHAPE(32x16), + .size = SPRITE_SIZE(32x16), + .priority = 1 +}; + +const struct OamData gOamData_8261C38 = { + .shape = SPRITE_SHAPE(64x32), + .size = SPRITE_SIZE(64x32), + .priority = 1 +}; + +const union AnimCmd gSpriteAnim_8261C40[] = { + ANIMCMD_FRAME(0x00, 5), + ANIMCMD_END +}; + +const union AnimCmd gSpriteAnim_8261C48[] = { + ANIMCMD_FRAME(0x20, 5), + ANIMCMD_END +}; + +const union AnimCmd *const gSpriteAnimTable_8261C50[] = { + gSpriteAnim_8261C40, + gSpriteAnim_8261C48 +}; + +const struct SpriteSheet gUnknown_8261C58 = { + gUnknown_8E9E1DC, + 0x800, + 300 +}; + +const struct SpritePalette gUnknown_8261C60 = { + gUnknown_8E9CF3C, + 2345 +}; + + +const union AnimCmd gSpriteAnim_8261C68[] = { + ANIMCMD_FRAME(0x00, 5), + ANIMCMD_END +}; + +const union AnimCmd gSpriteAnim_8261C70[] = { + ANIMCMD_FRAME(0x08, 5), + ANIMCMD_END +}; + +const union AnimCmd gSpriteAnim_8261C78[] = { + ANIMCMD_FRAME(0x10, 5), + ANIMCMD_END +}; + +const union AnimCmd gSpriteAnim_8261C80[] = { + ANIMCMD_FRAME(0x18, 5), + ANIMCMD_END +}; + +const union AnimCmd gSpriteAnim_8261C88[] = { + ANIMCMD_FRAME(0x20, 5), + ANIMCMD_END +}; + +const union AnimCmd gSpriteAnim_8261C90[] = { + ANIMCMD_FRAME(0x28, 5), + ANIMCMD_END +}; + +const union AnimCmd *const gSpriteAnimTable_8261C98[] = { + gSpriteAnim_8261C68, + gSpriteAnim_8261C70, + gSpriteAnim_8261C78, + gSpriteAnim_8261C80, + gSpriteAnim_8261C88, + gSpriteAnim_8261C90 +}; + +const struct SpriteTemplate gUnknown_8261CB0 = { + .tileTag = 300, + .paletteTag = 2345, + .oam = &gOamData_8261C38, + .anims = gSpriteAnimTable_8261C50, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy +}; + +const struct SpriteTemplate gUnknown_8261CC8 = { + .tileTag = 200, + .paletteTag = 4925, + .oam = &gOamData_8261C30, + .anims = gSpriteAnimTable_8261C98, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy +}; + +const u16 gUnknown_8261CE0[] = INCBIN_U16("data/trade/unk_8261CE0.gbapal"); + +const struct SpritePalette gUnknown_8261D00 = { + gUnknown_8261CE0, + 4925 +}; + +#define DIR_UP 0 +#define DIR_DOWN 1 +#define DIR_LEFT 2 +#define DIR_RIGHT 3 + +const u8 sCursorMoveDestinations[][4][6] = { + // Player's party + [0] = { + [DIR_UP] = { 4, 2, 12, 12, 0, 0}, + [DIR_DOWN] = { 2, 4, 12, 12, 0, 0}, + [DIR_LEFT] = { 7, 6, 1, 0, 0, 0}, + [DIR_RIGHT] = { 1, 6, 7, 0, 0, 0} + }, + [1] = { + [DIR_UP] = { 5, 3, 12, 12, 0, 0}, + [DIR_DOWN] = { 3, 5, 12, 12, 0, 0}, + [DIR_LEFT] = { 0, 7, 6, 1, 0, 0}, + [DIR_RIGHT] = { 6, 7, 0, 1, 0, 0} + }, + [2] = { + [DIR_UP] = { 0, 0, 0, 0, 0, 0}, + [DIR_DOWN] = { 4, 0, 0, 0, 0, 0}, + [DIR_LEFT] = { 9, 8, 7, 6, 0, 0}, + [DIR_RIGHT] = { 3, 1, 0, 0, 0, 0} + }, + [3] = { + [DIR_UP] = { 1, 1, 1, 1, 0, 0}, + [DIR_DOWN] = { 5, 1, 1, 1, 0, 0}, + [DIR_LEFT] = { 2, 9, 8, 7, 0, 0}, + [DIR_RIGHT] = { 8, 9, 6, 6, 0, 0} + }, + [4] = { + [DIR_UP] = { 2, 2, 2, 2, 0, 0}, + [DIR_DOWN] = { 0, 0, 0, 0, 0, 0}, + [DIR_LEFT] = {11, 10, 9, 8, 7, 6}, + [DIR_RIGHT] = { 5, 3, 1, 0, 0, 0} + }, + [5] = { + [DIR_UP] = { 3, 3, 3, 3, 0, 0}, + [DIR_DOWN] = { 1, 1, 1, 1, 0, 0}, + [DIR_LEFT] = { 4, 4, 4, 4, 0, 0}, + [DIR_RIGHT] = {10, 8, 6, 0, 0, 0} + }, + // Partner's party + [6] = { + [DIR_UP] = {10, 8, 12, 0, 0, 0}, + [DIR_DOWN] = { 8, 10, 12, 0, 0, 0}, + [DIR_LEFT] = { 1, 0, 0, 0, 0, 0}, + [DIR_RIGHT] = { 7, 0, 1, 0, 0, 0} + }, + [7] = { + [DIR_UP] = {12, 0, 0, 0, 0, 0}, + [DIR_DOWN] = { 9, 12, 0, 0, 0, 0}, + [DIR_LEFT] = { 6, 0, 0, 0, 0, 0}, + [DIR_RIGHT] = { 0, 0, 0, 0, 0, 0} + }, + [8] = { + [DIR_UP] = { 6, 0, 0, 0, 0, 0}, + [DIR_DOWN] = {10, 6, 0, 0, 0, 0}, + [DIR_LEFT] = { 3, 2, 1, 0, 0, 0}, + [DIR_RIGHT] = { 9, 7, 0, 0, 0, 0} + }, + [9] = { + [DIR_UP] = { 7, 0, 0, 0, 0, 0}, + [DIR_DOWN] = {11, 12, 0, 0, 0, 0}, + [DIR_LEFT] = { 8, 0, 0, 0, 0, 0}, + [DIR_RIGHT] = { 2, 1, 0, 0, 0, 0} + }, + [10] = { + [DIR_UP] = { 8, 0, 0, 0, 0, 0}, + [DIR_DOWN] = { 6, 0, 0, 0, 0, 0}, + [DIR_LEFT] = { 5, 4, 3, 2, 1, 0}, + [DIR_RIGHT] = {11, 9, 7, 0, 0, 0} + }, + [11] = { + [DIR_UP] = { 9, 0, 0, 0, 0, 0}, + [DIR_DOWN] = {12, 0, 0, 0, 0, 0}, + [DIR_LEFT] = {10, 0, 0, 0, 0, 0}, + [DIR_RIGHT] = { 4, 2, 0, 0, 0, 0} + }, + // Cancel + [12] = { + [DIR_UP] = {11, 9, 7, 6, 0, 0}, + [DIR_DOWN] = { 7, 6, 0, 0, 0, 0}, + [DIR_LEFT] = {12, 0, 0, 0, 0, 0}, + [DIR_RIGHT] = {12, 0, 0, 0, 0, 0} + } +}; + +const u8 gTradeMonSpriteCoords[][2] = { + {0x01, 0x05}, + {0x08, 0x05}, + {0x01, 0x0a}, + {0x08, 0x0a}, + {0x01, 0x0f}, + {0x08, 0x0f}, + + {0x10, 0x05}, + {0x17, 0x05}, + {0x10, 0x0a}, + {0x17, 0x0a}, + {0x10, 0x0f}, + {0x17, 0x0f}, + + {0x17, 0x12}, +}; + +const u8 gUnknown_8261E5A[][2][6][2] = { + { + { + {0x05, 0x04}, + {0x0c, 0x04}, + {0x05, 0x09}, + {0x0c, 0x09}, + {0x05, 0x0e}, + {0x0c, 0x0e} + }, { + {0x14, 0x04}, + {0x1b, 0x04}, + {0x14, 0x09}, + {0x1b, 0x09}, + {0x14, 0x0e}, + {0x1b, 0x0e} + } + }, { + { + {0x01, 0x03}, + {0x08, 0x03}, + {0x01, 0x08}, + {0x08, 0x08}, + {0x01, 0x0d}, + {0x08, 0x0d} + }, { + {0x10, 0x03}, + {0x17, 0x03}, + {0x10, 0x08}, + {0x17, 0x08}, + {0x10, 0x0d}, + {0x17, 0x0d} + } + } +}; + +const u8 gTradeUnknownSpriteCoords[][4] = { + {0x3c, 0x09, 0xb4, 0x09}, + {0x30, 0x09, 0xa8, 0x09} +}; + +const u8 gUnknown_8261E92[] = { + 0x00, 0x0e, 0x0f, 0x1d, + 0x03, 0x05, 0x03, 0x07, + 0x12, 0x05, 0x12, 0x07, + 0x08, 0x07, 0x16, 0x0c, + 0x08, 0x07, 0x16, 0x0c, + 0x06, 0x07, 0x18, 0x0c, + 0x06, 0x07, 0x18, 0x0c, + 0x08, 0x07, 0x16, 0x0c, + 0x07, 0x07, 0x17, 0x0c +}; + +const u8 gUnknown_8261EB6[] = _(""); +const u8 gUnknown_8261EB7[] = _("{COLOR DARK_GREY}{HIGHLIGHT TRANSPARENT}{SHADOW RED}"); +const u8 gText_MaleSymbol4[] = _("♂"); +const u8 gText_FemaleSymbol4[] = _("♀"); +const u8 gText_GenderlessSymbol[] = _(""); +const u8 gUnknown_8261EC6[] = _(""); +const u8 gUnknown_8261EC7[] = _("\n"); +const u8 gUnknown_8261EC9[] = _("/"); + +const u8 *const gUnknown_8261ECC[] = { + gUnknown_841E0B9, + gUnknown_841E0C0, + gUnknown_841E0D2, + gUnknown_841E0DA, + gUnknown_841E0E0, + gUnknown_841E0EE +}; + +const struct MenuAction gUnknown_8261EE4[] = { + {gUnknown_841E10A, { .void_u8 = TradeMenuAction_Summary }}, + {gUnknown_841E112, { .void_u8 = TradeMenuAction_Trade }} +}; + +const u8 *const sTradeErrorOrStatusMessagePtrs[] = { + gUnknown_841E118, // Communication standby + gUnknown_841E145, // The trade has been canceled. + gUnknown_841E16B, // That's your only POKéMON for battle + gUnknown_8417094, // That's your only POKéMON for battle + gUnknown_841E199, // Waiting for your friend to finish + gUnknown_841E1C5, // Your friend wants to trade POKéMON + gUnknown_84170BC, // That POKéMON can't be traded now + gUnknown_84170E0, // An EGG can't be traded now + gUnknown_84170FC // The other TRAINER's POKéMON can't be traded now +}; + +const u8 gUnknown_8261F18[] = { 0, 1, 2 }; + +const struct BgTemplate gUnknown_8261F1C[] = { + { + .bg = 0, + .charBaseIndex = 2, + .mapBaseIndex = 31, + .screenSize = 0, + .paletteMode = 0, + .priority = 0, + .baseTile = 0x000 + }, { + .bg = 1, + .charBaseIndex = 0, + .mapBaseIndex = 5, + .screenSize = 0, + .paletteMode = 0, + .priority = 1, + .baseTile = 0x000 + }, { + .bg = 2, + .charBaseIndex = 0, + .mapBaseIndex = 6, + .screenSize = 0, + .paletteMode = 0, + .priority = 2, + .baseTile = 0x000 + }, { + .bg = 3, + .charBaseIndex = 0, + .mapBaseIndex = 7, + .screenSize = 0, + .paletteMode = 0, + .priority = 3, + .baseTile = 0x000 + } +}; + +const struct WindowTemplate gUnknown_8261F2C[] = { + { + .bg = 0, + .tilemapLeft = 4, + .tilemapTop = 7, + .width = 22, + .height = 4, + .paletteNum = 15, + .baseBlock = 0x01e + }, { + .bg = 0, + .tilemapLeft = 17, + .tilemapTop = 15, + .width = 12, + .height = 4, + .paletteNum = 15, + .baseBlock = 0x076 + }, { + .bg = 0, + .tilemapLeft = 0, + .tilemapTop = 5, + .width = 8, + .height = 2, + .paletteNum = 13, + .baseBlock = 0x0a6 + }, { + .bg = 0, + .tilemapLeft = 7, + .tilemapTop = 5, + .width = 8, + .height = 2, + .paletteNum = 13, + .baseBlock = 0x0b6 + }, { + .bg = 0, + .tilemapLeft = 0, + .tilemapTop = 10, + .width = 8, + .height = 2, + .paletteNum = 13, + .baseBlock = 0x0c6 + }, { + .bg = 0, + .tilemapLeft = 7, + .tilemapTop = 10, + .width = 8, + .height = 2, + .paletteNum = 13, + .baseBlock = 0x0d6 + }, { + .bg = 0, + .tilemapLeft = 0, + .tilemapTop = 15, + .width = 8, + .height = 2, + .paletteNum = 13, + .baseBlock = 0x0e6 + }, { + .bg = 0, + .tilemapLeft = 7, + .tilemapTop = 15, + .width = 8, + .height = 2, + .paletteNum = 13, + .baseBlock = 0x0f6 + }, { + .bg = 0, + .tilemapLeft = 15, + .tilemapTop = 5, + .width = 8, + .height = 2, + .paletteNum = 13, + .baseBlock = 0x106 + }, { + .bg = 0, + .tilemapLeft = 22, + .tilemapTop = 5, + .width = 8, + .height = 2, + .paletteNum = 13, + .baseBlock = 0x116 + }, { + .bg = 0, + .tilemapLeft = 15, + .tilemapTop = 10, + .width = 8, + .height = 2, + .paletteNum = 13, + .baseBlock = 0x126 + }, { + .bg = 0, + .tilemapLeft = 22, + .tilemapTop = 10, + .width = 8, + .height = 2, + .paletteNum = 13, + .baseBlock = 0x136 + }, { + .bg = 0, + .tilemapLeft = 15, + .tilemapTop = 15, + .width = 8, + .height = 2, + .paletteNum = 13, + .baseBlock = 0x146 + }, { + .bg = 0, + .tilemapLeft = 22, + .tilemapTop = 15, + .width = 8, + .height = 2, + .paletteNum = 13, + .baseBlock = 0x156 + }, { + .bg = 0, + .tilemapLeft = 2, + .tilemapTop = 5, + .width = 14, + .height = 2, + .paletteNum = 13, + .baseBlock = 0x166 + }, { + .bg = 0, + .tilemapLeft = 3, + .tilemapTop = 8, + .width = 11, + .height = 8, + .paletteNum = 15, + .baseBlock = 0x182 + }, { + .bg = 0, + .tilemapLeft = 17, + .tilemapTop = 5, + .width = 14, + .height = 2, + .paletteNum = 15, + .baseBlock = 0x1da + }, { + .bg = 0, + .tilemapLeft = 18, + .tilemapTop = 8, + .width = 11, + .height = 8, + .paletteNum = 15, + .baseBlock = 0x1f6 + }, DUMMY_WIN_TEMPLATE +}; + +const struct WindowTemplate gUnknown_8261FC4 = { + .bg = 0, + .tilemapLeft = 21, + .tilemapTop = 13, + .width = 6, + .height = 4, + .paletteNum = 15, + .baseBlock = 0x24e +}; + +const u8 gUnknown_8261FCC[][13] = { + _("かいめの そうしん"), + _("かいめの じゅしん"), + _("ポケモンアイコンセット"), + _("OBJテキストセット"), + _("セルセット"), + _("OBJテキストADD"), + _("システムメッセージADD"), + _("はいけいセット") +}; + +const u8 gJPText_Shedinja[] = _("ヌケニン"); +const u8 gUnknown_8262039[] = _("こうかんせいりつ "); +const u8 gUnknown_8262047[] = _("だめだたらしいよ "); + +const u8 gUnknown_8262055[][2] = { + { 4, 3}, + {19, 3} +}; void sub_804C600(void) { @@ -320,7 +690,7 @@ void sub_804C600(void) { DeactivateAllTextPrinters(); gUnknown_3000E78 = 590; // ? - for (i = 0; i < NELEMS(gUnknown_8261F2C); i++) + for (i = 0; i < NELEMS(gUnknown_8261F2C) - 1; i++) { ClearWindowTilemap(i); FillWindowPixelBuffer(i, PIXEL_FILL(0)); @@ -2882,11 +3252,11 @@ u8 sub_804E028(u8 oldPosition, u8 direction) int i; u8 newPosition = 0; - for (i = 0; i < PARTY_SIZE; i++) + for (i = 0; i < 6; i++) { - if (sTradeMenuResourcesPtr->tradeMenuOptionsActive[gUnknown_8261D08[oldPosition][direction][i]] == TRUE) + if (sTradeMenuResourcesPtr->tradeMenuOptionsActive[sCursorMoveDestinations[oldPosition][direction][i]] == TRUE) { - newPosition = gUnknown_8261D08[oldPosition][direction][i]; + newPosition = sCursorMoveDestinations[oldPosition][direction][i]; break; } } @@ -2937,9 +3307,6 @@ void sub_804E134(void) } } -extern const struct MenuAction gUnknown_8261EE4[]; -extern const struct WindowTemplate gUnknown_8261FC4; - void sub_804E194(void) { int i; @@ -3554,13 +3921,16 @@ void sub_804F08C(u8 whichParty, u8 monIdx, u8 a2, u8 a3, u8 a4, u8 a5) void sub_804F284(u8 whichParty) { s32 i; - const u8 *r5; - const u8 *r4; for (i = 0; i < sTradeMenuResourcesPtr->partyCounts[whichParty]; i++) { - r5 = gUnknown_8261E5A[whichParty]; - r4 = gUnknown_8261E72[whichParty]; - sub_804F08C(whichParty, i, r5[2 * i + 0], r5[2 * i + 1], r4[2 * i + 0], r4[2 * i + 1]); + sub_804F08C( + whichParty, + i, + gUnknown_8261E5A[0][whichParty][i][0], + gUnknown_8261E5A[0][whichParty][i][1], + gUnknown_8261E5A[1][whichParty][i][0], + gUnknown_8261E5A[1][whichParty][i][1] + ); } } #else @@ -3584,7 +3954,7 @@ void sub_804F284(u8 whichParty) "\tldr r1, _0804F2E0 @ =gUnknown_8261E5A\n" "\tlsls r0, 2\n" "\tadds r5, r0, r1\n" - "\tldr r1, _0804F2E4 @ =gUnknown_8261E72\n" + "\tldr r1, _0804F2E4 @ =gUnknown_8261E5A+24\n" "\tadds r4, r0, r1\n" "_0804F2AA:\n" "\tlsls r1, r7, 24\n" @@ -3615,7 +3985,7 @@ void sub_804F284(u8 whichParty) "\t.align 2, 0\n" "_0804F2DC: .4byte sTradeMenuResourcesPtr\n" "_0804F2E0: .4byte gUnknown_8261E5A\n" - "_0804F2E4: .4byte gUnknown_8261E72"); + "_0804F2E4: .4byte gUnknown_8261E5A+24"); } #endif //NONMATCHING @@ -3650,13 +4020,13 @@ void sub_804F3C8(u8 whichParty) sTradeMenuResourcesPtr->unk_74[whichParty] = 0; } -void sub_804F440(void) +void TradeMenuAction_Summary(u8 taskId) { FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 30, 20); CopyBgTilemapBufferToVram(0); } -void sub_804F464(void) +void TradeMenuAction_Trade(u8 taskId) { FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 30, 20); CopyBgTilemapBufferToVram(0); @@ -4120,2272 +4490,3 @@ int Trade_CanTradeSelectedMon(struct UnkLinkRfuStruct_02022B14Substruct a0, u16 return 0; } - -// Sprite callback for link cable trade glow -void SpriteCB_TradeGlowCable(struct Sprite * sprite) -{ - sprite->data[0]++; - if (sprite->data[0] == 10) - { - PlaySE(SE_BOWA); - sprite->data[0] = 0; - } -} - -// Sprite callback for wireless trade glow -void SpriteCB_TradeGlowWireless(struct Sprite * sprite) -{ - if (!sprite->invisible) - { - sprite->data[0]++; - if (sprite->data[0] == 10) - { - PlaySE(SE_W207B); - sprite->data[0] = 0; - } - } -} - -// Palette flash for trade glow core -void SpriteCB_TradeGlowCore(struct Sprite * sprite) -{ - if (sprite->data[1] == 0) - { - sprite->data[0]++; - if (sprite->data[0] == 12) - sprite->data[0] = 0; - LoadPalette(&gTradeGlow2PaletteAnimTable[sprite->data[0]], 16 * (sprite->oam.paletteNum + 16) + 4, 2); - } -} - -void SpriteCB_GameLinkCableEnd_Outbound(struct Sprite * sprite) -{ - sprite->data[0]++; - sprite->pos2.y++; - if (sprite->data[0] == 10) - DestroySprite(sprite); -} - -void SpriteCB_GameLinkCableEnd_Inbound(struct Sprite * sprite) -{ - sprite->data[0]++; - sprite->pos2.y--; - if (sprite->data[0] == 10) - DestroySprite(sprite); -} - -void sub_804FE00(struct Sprite * sprite) -{ - sprite->data[0]++; - if (sprite->data[0] == 15) - { - PlaySE(SE_W107); - sprite->data[0] = 0; - } -} - -void SetTradeBGAffine(void) -{ - struct BgAffineDstData affine; - DoBgAffineSet(&affine, sTradeData->unk_D4 * 0x100, sTradeData->unk_D6 * 0x100, sTradeData->unk_DC, sTradeData->unk_DE, sTradeData->sXY, sTradeData->sXY, sTradeData->unk_EC); - SetGpuReg(REG_OFFSET_BG2PA, affine.pa); - SetGpuReg(REG_OFFSET_BG2PB, affine.pb); - SetGpuReg(REG_OFFSET_BG2PC, affine.pc); - SetGpuReg(REG_OFFSET_BG2PD, affine.pd); - SetGpuReg(REG_OFFSET_BG2X, affine.dx); - SetGpuReg(REG_OFFSET_BG2Y, affine.dy); -} - -static void TradeAnim_UpdateBgRegs(void) -{ - u16 dispcnt; - - SetGpuReg(REG_OFFSET_BG1VOFS, sTradeData->bg1vofs); - SetGpuReg(REG_OFFSET_BG1HOFS, sTradeData->bg1hofs); - - dispcnt = GetGpuReg(REG_OFFSET_DISPCNT); - if ((dispcnt & 7) == DISPCNT_MODE_0) - { - SetGpuReg(REG_OFFSET_BG2VOFS, sTradeData->bg2vofs); - SetGpuReg(REG_OFFSET_BG2HOFS, sTradeData->bg2hofs); - } - else - { - SetTradeBGAffine(); - } -} - -static void VBlankCB_TradeAnim(void) -{ - TradeAnim_UpdateBgRegs(); - LoadOam(); - ProcessSpriteCopyRequests(); - TransferPlttBuffer(); -} - -void sub_804FF24(void) -{ - sTradeData->unk_8A = 0; - sTradeData->unk_88 = 0; - sTradeData->unk_89 = 0; -} - -void sub_804FF4C(void) -{ - if (sTradeData->unk_88 == sTradeData->unk_89) - sTradeData->unk_8A++; - else - sTradeData->unk_8A = 0; - - if (sTradeData->unk_8A > 300) - { - CloseLink(); - SetMainCallback2(CB2_LinkError); - sTradeData->unk_8A = 0; - sTradeData->unk_89 = 0; - sTradeData->unk_88 = 0; - } - - sTradeData->unk_89 = sTradeData->unk_88; -} - -u32 sub_804FFC4(void) -{ - if (gReceivedRemoteLinkPlayers) - return GetMultiplayerId(); - return 0; -} - -void sub_804FFE4(u8 whichParty, u8 a1) -{ - int pos = 0; - struct Pokemon *mon = NULL; - u16 species; - u32 personality; - - if (whichParty == 0) - { - mon = &gPlayerParty[gSelectedTradeMonPositions[0]]; - pos = 1; - } - - if (whichParty == 1) - { - mon = &gEnemyParty[gSelectedTradeMonPositions[1] % PARTY_SIZE]; - pos = 3; - } - - switch (a1) - { - case 0: - species = GetMonData(mon, MON_DATA_SPECIES2); - personality = GetMonData(mon, MON_DATA_PERSONALITY); - - if (whichParty == 0) - HandleLoadSpecialPokePic(&gMonFrontPicTable[species], gMonSpritesGfxPtr->sprites[1], species, personality); - else - HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonFrontPicTable[species], gMonSpritesGfxPtr->sprites[whichParty * 2 + 1], species, personality); - - LoadCompressedSpritePalette(GetMonSpritePalStruct(mon)); - sTradeData->tradeSpecies[whichParty] = species; - sTradeData->monPersonalities[whichParty] = personality; - break; - case 1: - SetMultiuseSpriteTemplateToPokemon(GetMonSpritePalStruct(mon)->tag, pos); - sTradeData->pokePicSpriteIdxs[whichParty] = CreateSprite(&gMultiuseSpriteTemplate, 120, 60, 6); - gSprites[sTradeData->pokePicSpriteIdxs[whichParty]].invisible = TRUE; - gSprites[sTradeData->pokePicSpriteIdxs[whichParty]].callback = SpriteCallbackDummy; - break; - } -} - -void CB2_InitTradeAnim_LinkTrade(void) -{ - switch (gMain.state) - { - case 0: - if (!gReceivedRemoteLinkPlayers) - { - gLinkType = 0x1144; - CloseLink(); - } - sTradeData = AllocZeroed(sizeof(struct TradeAnimationResources)); - AllocateMonSpritesGfx(); - ResetTasks(); - ResetSpriteData(); - FreeAllSpritePalettes(); - SetVBlankCallback(VBlankCB_TradeAnim); - TradeAnimInit_LoadGfx(); - sub_804FF24(); - gMain.state++; - sTradeData->unk_8C = 0; - sTradeData->state = 0; - sTradeData->isLinkTrade = TRUE; - sTradeData->unk_D4 = 64; - sTradeData->unk_D6 = 64; - sTradeData->unk_D8 = 0; - sTradeData->unk_DA = 0; - sTradeData->unk_DC = 120; - sTradeData->unk_DE = 80; - sTradeData->sXY = 256; - sTradeData->unk_EC = 0; - break; - case 1: - if (!gReceivedRemoteLinkPlayers) - { - sTradeData->isCableTrade = TRUE; - OpenLink(); - gMain.state++; - sTradeData->timer = 0; - } - else - { - gMain.state = 4; - } - break; - case 2: - sTradeData->timer++; - if (sTradeData->timer > 60) - { - sTradeData->timer = 0; - gMain.state++; - } - break; - case 3: - if (IsLinkMaster()) - { - if (GetLinkPlayerCount_2() >= GetSavedPlayerCount()) - { - sTradeData->timer++; - if (sTradeData->timer > 30) - { - CheckShouldAdvanceLinkState(); - gMain.state++; - } - } - else - { - sub_804FF4C(); - } - } - else - { - gMain.state++; - } - break; - case 4: - sub_804FF4C(); - if (gReceivedRemoteLinkPlayers == 1 && IsLinkPlayerDataExchangeComplete() == 1) - { - gMain.state++; - } - break; - case 5: - sTradeData->unk_72 = 0; - sTradeData->unk_73 = 0; - sTradeData->unk_93 = 0; - sub_804FFE4(0, 0); - gMain.state++; - break; - case 6: - sub_804FFE4(0, 1); - gMain.state++; - break; - case 7: - sub_804FFE4(1, 0); - gMain.state++; - break; - case 8: - sub_804FFE4(1, 1); - sub_80504B0(); - gMain.state++; - break; - case 9: - sub_8050DE0(); - LoadSpriteSheet(&gUnknown_826CDD4); - LoadSpritePalette(&gUnknown_826CDDC); - gMain.state++; - break; - case 10: - BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); - ShowBg(0); - sTradeData->monSpecies[0] = GetMonData(&gPlayerParty[gSelectedTradeMonPositions[0]], MON_DATA_SPECIES2); - sTradeData->monSpecies[1] = GetMonData(&gEnemyParty[gSelectedTradeMonPositions[1] % 6], MON_DATA_SPECIES2); - memcpy(sTradeData->unk_FC, gLinkPlayers[GetMultiplayerId() ^ 1].name, 7); - gMain.state++; - break; - case 11: - sub_805049C(); - sub_8050E24(); - gMain.state++; - break; - case 12: - if (!gPaletteFade.active) - { - if (gWirelessCommType != 0) - { - LoadWirelessStatusIndicatorSpriteGfx(); - CreateWirelessStatusIndicatorSprite(0, 0); - } - SetMainCallback2(CB2_RunTradeAnim_LinkTrade); - } - break; - } - RunTasks(); - RunTextPrinters(); - AnimateSprites(); - BuildOamBuffer(); - UpdatePaletteFade(); -} - -void sub_805049C(void) -{ - SetTradeSequenceBgGpuRegs(5); - SetTradeSequenceBgGpuRegs(0); -} - -void sub_80504B0(void) -{ - FillWindowPixelBuffer(0, PIXEL_FILL(15)); - PutWindowTilemap(0); - CopyWindowToVram(0, 3); -} - -void TradeAnimInit_LoadGfx(void) -{ - SetGpuReg(REG_OFFSET_DISPCNT, 0); - ResetBgsAndClearDma3BusyFlags(FALSE); - InitBgsFromTemplates(0, gUnknown_826D1D4, NELEMS(gUnknown_826D1D4)); - ChangeBgX(0, 0, 0); - ChangeBgY(0, 0, 0); - SetBgTilemapBuffer(0, Alloc(BG_SCREEN_SIZE)); - SetBgTilemapBuffer(1, Alloc(BG_SCREEN_SIZE)); - SetBgTilemapBuffer(3, Alloc(BG_SCREEN_SIZE)); - DeactivateAllTextPrinters(); - // Doing the graphics load... - DecompressAndLoadBgGfxUsingHeap(0, gBattleTextboxTiles, 0, 0, 0); - LZDecompressWram(gFile_graphics_interface_menu_map_tilemap, gDecompressionBuffer); - CopyToBgTilemapBuffer(0, gDecompressionBuffer, BG_SCREEN_SIZE, 0); - LoadCompressedPalette(gBattleTextboxPalette, 0x000, 0x20); - InitWindows(gUnknown_826D1BC); - // ... and doing the same load again - DecompressAndLoadBgGfxUsingHeap(0, gBattleTextboxTiles, 0, 0, 0); - LZDecompressWram(gFile_graphics_interface_menu_map_tilemap, gDecompressionBuffer); - CopyToBgTilemapBuffer(0, gDecompressionBuffer, BG_SCREEN_SIZE, 0); - LoadCompressedPalette(gBattleTextboxPalette, 0x000, 0x20); -} - -void CB2_InitTradeAnim_InGameTrade(void) -{ - u8 otName[11]; - - switch (gMain.state) - { - case 0: - gSelectedTradeMonPositions[0] = gSpecialVar_0x8005; - gSelectedTradeMonPositions[1] = 6; - StringCopy(gLinkPlayers[0].name, gSaveBlock2Ptr->playerName); - GetMonData(&gEnemyParty[0], MON_DATA_OT_NAME, otName); - StringCopy(gLinkPlayers[1].name, otName); - sTradeData = AllocZeroed(sizeof(*sTradeData)); - AllocateMonSpritesGfx(); - ResetTasks(); - ResetSpriteData(); - FreeAllSpritePalettes(); - SetVBlankCallback(VBlankCB_TradeAnim); - TradeAnimInit_LoadGfx(); - sTradeData->isLinkTrade = FALSE; - sTradeData->unk_8C = 0; - sTradeData->state = 0; - sTradeData->unk_D4 = 64; - sTradeData->unk_D6 = 64; - sTradeData->unk_D8 = 0; - sTradeData->unk_DA = 0; - sTradeData->unk_DC = 120; - sTradeData->unk_DE = 80; - sTradeData->sXY = 256; - sTradeData->unk_EC = 0; - sTradeData->timer = 0; - gMain.state = 5; - break; - case 5: - sub_804FFE4(0, 0); - gMain.state++; - break; - case 6: - sub_804FFE4(0, 1); - gMain.state++; - break; - case 7: - sub_804FFE4(1, 0); - ShowBg(0); - gMain.state++; - break; - case 8: - sub_804FFE4(1, 1); - FillWindowPixelBuffer(0, PIXEL_FILL(15)); - PutWindowTilemap(0); - CopyWindowToVram(0, 3); - gMain.state++; - break; - case 9: - sub_8050DE0(); - LoadSpriteSheet(&gUnknown_826CDD4); - LoadSpritePalette(&gUnknown_826CDDC); - gMain.state++; - break; - case 10: - ShowBg(0); - gMain.state++; - break; - case 11: - SetTradeSequenceBgGpuRegs(5); - SetTradeSequenceBgGpuRegs(0); - sub_8050E24(); - gMain.state++; - break; - case 12: - SetMainCallback2(CB2_RunTradeAnim_InGameTrade); - break; - } - - RunTasks(); - RunTextPrinters(); - AnimateSprites(); - BuildOamBuffer(); - UpdatePaletteFade(); -} - -static void ReceivedMonSetPokedexFlags(u8 partyIdx) -{ - struct Pokemon *mon = &gPlayerParty[partyIdx]; - - if (!GetMonData(mon, MON_DATA_IS_EGG)) - { - u16 species = GetMonData(mon, MON_DATA_SPECIES, NULL); - u32 personality = GetMonData(mon, MON_DATA_PERSONALITY, NULL); - species = SpeciesToNationalPokedexNum(species); - GetSetPokedexFlag(species, FLAG_SET_SEEN); - HandleSetPokedexFlag(species, FLAG_SET_CAUGHT, personality); - } -} - -static void RS_TryEnableNationalPokedex(void) -{ - u8 mpId = GetMultiplayerId(); - // Originally in Ruby but commented out - /*if (gLinkPlayers[mpId ^ 1].lp_field_2 == 0x8000) - EnableNationalPokedex();*/ -} - -void TradeMons(u8 playerPartyIdx, u8 partnerPartyIdx) -{ - u8 friendship; - - // Get whether the offered Pokemon have mail - struct Pokemon *playerMon = &gPlayerParty[playerPartyIdx]; - u16 playerMail = GetMonData(playerMon, MON_DATA_MAIL); - - struct Pokemon *partnerMon = &gEnemyParty[partnerPartyIdx]; - u16 partnerMail = GetMonData(partnerMon, MON_DATA_MAIL); - - // The mail attached to the sent Pokemon no longer exists in your file. - if (playerMail != 0xFF) - ClearMailStruct(&gSaveBlock1Ptr->mail[playerMail]); - - // This is where the actual trade happens!! - sTradeData->mon = *playerMon; - *playerMon = *partnerMon; - *partnerMon = sTradeData->mon; - - // By default, a Pokemon received from a trade will have 70 Friendship. - friendship = 70; - if (!GetMonData(playerMon, MON_DATA_IS_EGG)) - SetMonData(playerMon, MON_DATA_FRIENDSHIP, &friendship); - - // Associate your partner's mail with the Pokemon they sent over. - if (partnerMail != 0xFF) - GiveMailToMon2(playerMon, &gLinkPartnerMail[partnerMail]); - - ReceivedMonSetPokedexFlags(playerPartyIdx); - if (gReceivedRemoteLinkPlayers) - RS_TryEnableNationalPokedex(); -} - -void sub_80508F4(void) -{ - switch (sTradeData->unk_93) - { - case 1: - if (IsLinkTaskFinished()) - { - SendBlock(bitmask_all_link_players_but_self(), sTradeData->linkData, 20); - sTradeData->unk_93++; - } - case 2: - sTradeData->unk_93 = 0; - break; - } -} - -void CB2_RunTradeAnim_InGameTrade(void) -{ - sub_8050F14(); - RunTasks(); - RunTextPrinters(); - AnimateSprites(); - BuildOamBuffer(); - UpdatePaletteFade(); -} - -void SetTradeSequenceBgGpuRegs(u8 state) -{ - switch (state) - { - case 0: - sTradeData->bg2vofs = 0; - sTradeData->bg2hofs = 0xB4; - SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG2_ON | DISPCNT_OBJ_ON); - SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(2) | BGCNT_CHARBASE(1) | BGCNT_SCREENBASE(18) | BGCNT_TXT512x256); - LoadPalette(gTradeGba2_Pal, 0x10, 0x60); - DmaCopyLarge16(3, gTradeGba_Gfx, (void *)BG_CHAR_ADDR(1), 0x1420, 0x1000); - DmaCopy16Defvars(3, gUnknown_826601C, (void *)BG_SCREEN_ADDR(18), 0x1000); - break; - case 1: - sTradeData->bg1hofs = 0; - sTradeData->bg1vofs = 0x15C; - SetGpuReg(REG_OFFSET_BG1VOFS, 0x15C); - SetGpuReg(REG_OFFSET_BG1CNT, BGCNT_PRIORITY(2) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(5) | BGCNT_TXT256x512); - SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(2) | BGCNT_CHARBASE(1) | BGCNT_SCREENBASE(18) | BGCNT_TXT256x512); - if (sTradeData->isCableTrade) - { - DmaCopy16Defvars(3, gUnknown_826AA5C, (void *)BG_SCREEN_ADDR(5), 0x1000); - } - else - { - DmaCopy16Defvars(3, gUnknown_8269A5C, (void *)BG_SCREEN_ADDR(5), 0x1000); - } - DmaCopyLarge16(3, gTradeGba_Gfx, (void *)BG_CHAR_ADDR(0), 0x1420, 0x1000); - SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG1_ON | DISPCNT_OBJ_ON); - break; - case 2: - sTradeData->bg1vofs = 0; - sTradeData->bg1hofs = 0; - if (sTradeData->isCableTrade == FALSE) - { - SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG1_ON | DISPCNT_OBJ_ON); - LZ77UnCompVram(gUnknown_3379A0Bin, (void *)BG_SCREEN_ADDR(5)); - BlendPalettes(0x000000008, 0x10, RGB_BLACK); - } - else - { - SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG1_ON | DISPCNT_OBJ_ON); - DmaCopy16Defvars(3, gUnknown_826407C, (void *)BG_SCREEN_ADDR(5), 0x800); - BlendPalettes(0x00000001, 0x10, RGB_BLACK); - } - break; - case 3: - LoadPalette(gUnknown_826BF5C, 0x30, 0x20); - LZ77UnCompVram(gWirelessSignal4bpp, BG_CHAR_ADDR(1)); - LZ77UnCompVram(gUnknown_826C60C, BG_SCREEN_ADDR(18)); - sTradeData->bg2vofs = 0x50; - SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG1_ON | DISPCNT_BG2_ON | DISPCNT_OBJ_ON); - break; - case 4: - SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG2_ON | DISPCNT_OBJ_ON); - SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(3) | BGCNT_CHARBASE(1) | BGCNT_256COLOR | BGCNT_SCREENBASE(18) | BGCNT_AFF128x128); - sTradeData->unk_D4 = 0x40; - sTradeData->unk_D6 = 0x5C; - sTradeData->sXY = 0x20; - sTradeData->unk_EA = 0x400; - sTradeData->unk_EC = 0; - DmaCopyLarge16(3, gUnknown_826701C, (void *)BG_CHAR_ADDR(1), 0x2840, 0x1000); - if (sTradeData->isCableTrade) - { - DmaCopy16Defvars(3, gUnknown_826985C, (void *)BG_SCREEN_ADDR(18), 0x100); - } - else - { - DmaCopy16Defvars(3, gUnknown_826995C, (void *)BG_SCREEN_ADDR(18), 0x100); - } - break; - case 5: - sTradeData->bg1vofs = 0; - sTradeData->bg1hofs = 0; - break; - case 6: - SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG2_ON | DISPCNT_OBJ_ON); - SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(3) | BGCNT_CHARBASE(1) | BGCNT_256COLOR | BGCNT_SCREENBASE(18) | BGCNT_TXT256x256); - sTradeData->unk_D4 = 0x40; - sTradeData->unk_D6 = 0x5C; - sTradeData->sXY = 0x100; - sTradeData->unk_EA = 0x80; - sTradeData->unk_DC = 0x78; - sTradeData->unk_DE = 0x50; - sTradeData->unk_EC = 0; - DmaCopyLarge16(3, gUnknown_826701C, BG_CHAR_ADDR(1), 0x2840, 0x1000); - if (sTradeData->isCableTrade) - { - DmaCopy16Defvars(3, gUnknown_826985C, (void *)BG_SCREEN_ADDR(18), 0x100); - } - else - { - DmaCopy16Defvars(3, gUnknown_826995C, (void *)BG_SCREEN_ADDR(18), 0x100); - } - break; - case 7: - sTradeData->bg2vofs = 0; - sTradeData->bg2hofs = 0; - SetGpuReg(REG_OFFSET_BLDCNT, 0); - SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(2) | BGCNT_CHARBASE(1) | BGCNT_SCREENBASE(18) | BGCNT_TXT512x256); - LoadPalette(gTradeGba2_Pal, 0x10, 0x60); - DmaCopyLarge16(3, gTradeGba_Gfx, (void *)BG_CHAR_ADDR(1), 0x1420, 0x1000); - DmaCopy16Defvars(3, gUnknown_826601C, (void *)BG_SCREEN_ADDR(18), 0x1000); - break; - } -} - -void sub_8050DE0(void) -{ - LoadSpriteSheet(&gUnknown_826CE2C); - LoadSpriteSheet(&gUnknown_826CE7C); - LoadSpriteSheet(&gUnknown_826CEB0); - LoadSpriteSheet(&gUnknown_826CF28); - LoadSpritePalette(&gUnknown_826CE34); - LoadSpritePalette(&gUnknown_826CE3C); -} - -void sub_8050E24(void) -{ - u8 nickname[20]; - u8 mpId; - const struct InGameTrade * inGameTrade; - if (sTradeData->isLinkTrade) - { - mpId = GetMultiplayerId(); - StringCopy(gStringVar1, gLinkPlayers[mpId ^ 1].name); - GetMonData(&gEnemyParty[gSelectedTradeMonPositions[1] % 6], MON_DATA_NICKNAME, nickname); - StringCopy10(gStringVar3, nickname); - GetMonData(&gPlayerParty[gSelectedTradeMonPositions[0]], MON_DATA_NICKNAME, nickname); - StringCopy10(gStringVar2, nickname); - } - else - { - inGameTrade = &gInGameTrades[gSpecialVar_0x8004]; - StringCopy(gStringVar1, inGameTrade->otName); - StringCopy10(gStringVar3, inGameTrade->nickname); - GetMonData(&gPlayerParty[gSpecialVar_0x8005], MON_DATA_NICKNAME, nickname); - StringCopy10(gStringVar2, nickname); - } -} - -bool8 sub_8050F14(void) -{ - if (sTradeData->isCableTrade) - return sub_8050F3C(); - else - return sub_805232C(); -} - -bool8 sub_8050F3C(void) -{ - u16 evoTarget; - - switch (sTradeData->state) - { - case 0: - gSprites[sTradeData->pokePicSpriteIdxs[0]].invisible = FALSE; - gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.x = -180; - gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.y = gMonFrontPicCoords[sTradeData->tradeSpecies[0]].y_offset; - sTradeData->state++; - sTradeData->cachedMapMusic = GetCurrentMapMusic(); - PlayNewMapMusic(MUS_SHINKA); - break; - case 1: - if (sTradeData->bg2hofs > 0) - { - gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.x += 3; - sTradeData->bg2hofs -= 3; - } - else - { - gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.x = 0; - sTradeData->bg2hofs = 0; - sTradeData->state = 10; - } - break; - case 10: - StringExpandPlaceholders(gStringVar4, gText_XWillBeSentToY); - DrawTextOnTradeWindow(0, gStringVar4, 0); - - if (sTradeData->tradeSpecies[0] != SPECIES_EGG) - { - PlayCry1(sTradeData->tradeSpecies[0], 0); - } - - sTradeData->state = 11; - sTradeData->timer = 0; - break; - case 11: - if (++sTradeData->timer == 80) - { - sTradeData->pokeballSpriteId = CreateTradePokeballSprite(sTradeData->pokePicSpriteIdxs[0], gSprites[sTradeData->pokePicSpriteIdxs[0]].oam.paletteNum, 120, 32, 2, 1, 0x14, 0xfffff); - sTradeData->state++; - StringExpandPlaceholders(gStringVar4, gText_ByeByeVar1); - DrawTextOnTradeWindow(0, gStringVar4, 0); - } - break; - case 12: - if (gSprites[sTradeData->pokeballSpriteId].callback == SpriteCallbackDummy) - { - sTradeData->unk_D3 = CreateSprite(&sTradePokeballSpriteTemplate, 120, 32, 0); - gSprites[sTradeData->unk_D3].callback = SpriteCB_TradePokeball_Outbound; - DestroySprite(&gSprites[sTradeData->pokeballSpriteId]); - sTradeData->state++; - } - break; - case 13: - // The game waits here for the sprite to finish its animation sequence. - break; - case 14: - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); - sTradeData->state = 20; - break; - case 20: - if (!gPaletteFade.active) - { - SetTradeSequenceBgGpuRegs(4); - FillWindowPixelBuffer(0, PIXEL_FILL(15)); - CopyWindowToVram(0, 3); - sTradeData->state++; - } - break; - case 21: - BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK); - sTradeData->state++; - break; - case 22: - if (!gPaletteFade.active) - { - sTradeData->state = 23; - } - break; - case 23: - if (sTradeData->unk_EA > 0x100) - { - sTradeData->unk_EA -= 0x34; - } - else - { - SetTradeSequenceBgGpuRegs(1); - sTradeData->unk_EA = 0x80; - sTradeData->state++; - sTradeData->timer = 0; - } - sTradeData->sXY = 0x8000 / sTradeData->unk_EA; - break; - case 24: - if (++sTradeData->timer > 20) - { - SetTradeBGAffine(); - sTradeData->unk_91 = CreateSprite(&gUnknown_826CF30, 120, 80, 0); - sTradeData->state++; - } - break; - case 25: - if (gSprites[sTradeData->unk_91].animEnded) - { - DestroySprite(&gSprites[sTradeData->unk_91]); - SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_EFFECT_BLEND | - BLDCNT_TGT2_BG1 | - BLDCNT_TGT2_BG2); - SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(12, 4)); - sTradeData->state++; - } - break; - case 26: - if (--sTradeData->bg1vofs == 316) - { - sTradeData->state++; - } - if (sTradeData->bg1vofs == 328) - { - sTradeData->unk_92 = CreateSprite(&sGameLinkCableEndSpriteTemplate, 128, 65, 0); - } - break; - case 27: - sTradeData->unk_90 = CreateSprite(&gUnknown_826CE44, 128, 80, 3); - sTradeData->unk_91 = CreateSprite(&sGlowBallSpriteTemplate, 128, 80, 0); - StartSpriteAnim(&gSprites[sTradeData->unk_91], 1); - sTradeData->state++; - break; - case 28: - if ((sTradeData->bg1vofs -= 2) == 166) - { - sTradeData->state = 200; - } - SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1 | - DISPCNT_OBJ_1D_MAP | - DISPCNT_BG1_ON | - DISPCNT_OBJ_ON); - break; - case 200: - gSprites[sTradeData->unk_90].pos1.y -= 2; - gSprites[sTradeData->unk_91].pos1.y -= 2; - if (gSprites[sTradeData->unk_90].pos1.y < -8) - { - sTradeData->state = 29; - } - break; - case 29: - BeginNormalPaletteFade(0xFFFFFFFF, -1, 0, 16, RGB_BLACK); - sTradeData->state = 30; - break; - case 30: - if (!gPaletteFade.active) - { - DestroySprite(&gSprites[sTradeData->unk_90]); - DestroySprite(&gSprites[sTradeData->unk_91]); - SetTradeSequenceBgGpuRegs(2); - sTradeData->state++; - } - break; - case 31: - BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK); - sTradeData->unk_90 = CreateSprite(&sGlowBallSpriteTemplate, 111, 170, 0); - sTradeData->unk_91 = CreateSprite(&sGlowBallSpriteTemplate, 129, -10, 0); - sTradeData->state++; - break; - case 32: - if (!gPaletteFade.active) - { - PlaySE(SE_TK_WARPOUT); - sTradeData->state++; - } - gSprites[sTradeData->unk_90].pos2.y -= 3; - gSprites[sTradeData->unk_91].pos2.y += 3; - break; - case 33: - gSprites[sTradeData->unk_90].pos2.y -= 3; - gSprites[sTradeData->unk_91].pos2.y += 3; - if (gSprites[sTradeData->unk_90].pos2.y <= -90) - { - gSprites[sTradeData->unk_90].data[1] = 1; - gSprites[sTradeData->unk_91].data[1] = 1; - sTradeData->state++; - } - break; - case 34: - BlendPalettes(0x1, 16, RGB_WHITEALPHA); - sTradeData->state++; - break; - case 35: - BlendPalettes(0x1, 0, RGB_WHITEALPHA); - sTradeData->state++; - break; - case 36: - BlendPalettes(0x1, 16, RGB_WHITEALPHA); - sTradeData->state++; - break; - case 37: - if (!IsPokeSpriteNotFlipped(sTradeData->tradeSpecies[0])) - { - gSprites[sTradeData->pokePicSpriteIdxs[0]].affineAnims = gUnknown_826CF88; - gSprites[sTradeData->pokePicSpriteIdxs[0]].oam.affineMode = 3; - CalcCenterToCornerVec(&gSprites[sTradeData->pokePicSpriteIdxs[0]], 0, 3, 3); - StartSpriteAffineAnim(&gSprites[sTradeData->pokePicSpriteIdxs[0]], 0); - } - else - { - StartSpriteAffineAnim(&gSprites[sTradeData->pokePicSpriteIdxs[0]], 0); - } - StartSpriteAffineAnim(&gSprites[sTradeData->pokePicSpriteIdxs[1]], 0); - gSprites[sTradeData->pokePicSpriteIdxs[0]].pos1.x = 60; - gSprites[sTradeData->pokePicSpriteIdxs[1]].pos1.x = 180; - gSprites[sTradeData->pokePicSpriteIdxs[0]].pos1.y = 192; - gSprites[sTradeData->pokePicSpriteIdxs[1]].pos1.y = -32; - gSprites[sTradeData->pokePicSpriteIdxs[0]].invisible = FALSE; - gSprites[sTradeData->pokePicSpriteIdxs[1]].invisible = FALSE; - sTradeData->state++; - break; - case 38: - gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.y -= 3; - gSprites[sTradeData->pokePicSpriteIdxs[1]].pos2.y += 3; - if (gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.y < -160 && gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.y >= -163) - { - PlaySE(SE_TK_WARPIN); - } - if (gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.y < -222) - { - gSprites[sTradeData->unk_90].data[1] = 0; - gSprites[sTradeData->unk_91].data[1] = 0; - sTradeData->state++; - gSprites[sTradeData->pokePicSpriteIdxs[0]].invisible = TRUE; - gSprites[sTradeData->pokePicSpriteIdxs[1]].invisible = TRUE; - BlendPalettes(0x1, 0, RGB_WHITEALPHA); - } - break; - case 39: - gSprites[sTradeData->unk_90].pos2.y -= 3; - gSprites[sTradeData->unk_91].pos2.y += 3; - if (gSprites[sTradeData->unk_90].pos2.y <= -222) - { - BeginNormalPaletteFade(0xFFFFFFFF, -1, 0, 16, RGB_BLACK); - sTradeData->state++; - DestroySprite(&gSprites[sTradeData->unk_90]); - DestroySprite(&gSprites[sTradeData->unk_91]); - } - break; - case 40: - if (!gPaletteFade.active) - { - sTradeData->state++; - SetTradeSequenceBgGpuRegs(1); - sTradeData->bg1vofs = 166; - sTradeData->unk_90 = CreateSprite(&gUnknown_826CE44, 128, -20, 3); - sTradeData->unk_91 = CreateSprite(&sGlowBallSpriteTemplate, 128, -20, 0); - StartSpriteAnim(&gSprites[sTradeData->unk_91], 1); - } - break; - case 41: - BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK); - sTradeData->state++; - break; - case 42: - SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | - DISPCNT_OBJ_1D_MAP | - DISPCNT_BG1_ON | - DISPCNT_OBJ_ON); - if (!gPaletteFade.active) - { - sTradeData->state++; - } - break; - case 43: - gSprites[sTradeData->unk_90].pos2.y += 3; - gSprites[sTradeData->unk_91].pos2.y += 3; - if (gSprites[sTradeData->unk_90].pos2.y + gSprites[sTradeData->unk_90].pos1.y == 64) - { - sTradeData->state++; - } - break; - case 44: - if ((sTradeData->bg1vofs += 2) > 316) - { - sTradeData->bg1vofs = 316; - sTradeData->state++; - } - break; - case 45: - DestroySprite(&gSprites[sTradeData->unk_90]); - DestroySprite(&gSprites[sTradeData->unk_91]); - sTradeData->state++; - sTradeData->timer = 0; - break; - case 46: - if (++sTradeData->timer == 10) - { - sTradeData->state++; - } - break; - case 47: - if (++sTradeData->bg1vofs > 348) - { - sTradeData->bg1vofs = 348; - sTradeData->state++; - } - if (sTradeData->bg1vofs == 328 && sTradeData->isCableTrade) - { - sTradeData->unk_92 = CreateSprite(&sGameLinkCableEndSpriteTemplate, 128, 65, 0); - gSprites[sTradeData->unk_92].callback = SpriteCB_GameLinkCableEnd_Inbound; - } - break; - case 48: - sTradeData->unk_91 = CreateSprite(&gUnknown_826CF30, 120, 80, 0); - sTradeData->state = 50; - break; - case 50: - if (gSprites[sTradeData->unk_91].animEnded) - { - DestroySprite(&gSprites[sTradeData->unk_91]); - SetTradeSequenceBgGpuRegs(6); - sTradeData->state++; - PlaySE(SE_W028); - } - break; - case 51: - if (sTradeData->unk_EA < 0x400) - { - sTradeData->unk_EA += 0x34; - } - else - { - sTradeData->unk_EA = 0x400; - sTradeData->state++; - } - sTradeData->sXY = 0x8000 / sTradeData->unk_EA; - break; - case 52: - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); - sTradeData->state = 60; - break; - - case 60: - if (!gPaletteFade.active) - { - SetTradeSequenceBgGpuRegs(5); - SetTradeSequenceBgGpuRegs(7); - gPaletteFade.bufferTransferDisabled = TRUE; - sTradeData->state++; - } - break; - case 61: - gPaletteFade.bufferTransferDisabled = FALSE; - BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); - sTradeData->state++; - break; - case 62: - SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | - DISPCNT_OBJ_1D_MAP | - DISPCNT_BG2_ON | - DISPCNT_OBJ_ON); - if (!gPaletteFade.active) - { - sTradeData->state++; - } - break; - case 63: - sTradeData->unk_D3 = CreateSprite(&sTradePokeballSpriteTemplate, 120, -8, 0); - gSprites[sTradeData->unk_D3].data[3] = 74; - gSprites[sTradeData->unk_D3].callback = SpriteCB_TradePokeball_Inbound; - StartSpriteAnim(&gSprites[sTradeData->unk_D3], 1); - StartSpriteAffineAnim(&gSprites[sTradeData->unk_D3], 2); - BlendPalettes(1 << (16 + gSprites[sTradeData->unk_D3].oam.paletteNum), 16, RGB_WHITEALPHA); - sTradeData->state++; - sTradeData->timer = 0; - break; - case 64: - BeginNormalPaletteFade(1 << (16 + gSprites[sTradeData->unk_D3].oam.paletteNum), 1, 16, 0, RGB_WHITEALPHA); - sTradeData->state++; - break; - case 65: - if (gSprites[sTradeData->unk_D3].callback == SpriteCallbackDummy) - { - HandleLoadSpecialPokePic(&gMonFrontPicTable[sTradeData->tradeSpecies[1]], gMonSpritesGfxPtr->sprites[3], sTradeData->tradeSpecies[1], sTradeData->monPersonalities[1]); - sTradeData->state++; - } - break; - case 66: - gSprites[sTradeData->pokePicSpriteIdxs[1]].pos1.x = 120; - gSprites[sTradeData->pokePicSpriteIdxs[1]].pos1.y = gMonFrontPicCoords[sTradeData->tradeSpecies[1]].y_offset + 60; - gSprites[sTradeData->pokePicSpriteIdxs[1]].pos2.x = 0; - gSprites[sTradeData->pokePicSpriteIdxs[1]].pos2.y = 0; - StartSpriteAnim(&gSprites[sTradeData->pokePicSpriteIdxs[1]], 0); - CreatePokeballSpriteToReleaseMon(sTradeData->pokePicSpriteIdxs[1], gSprites[sTradeData->pokePicSpriteIdxs[1]].oam.paletteNum, 120, 84, 2, 1, 20, 0xFFFFF); - FreeSpriteOamMatrix(&gSprites[sTradeData->unk_D3]); - DestroySprite(&gSprites[sTradeData->unk_D3]); - sTradeData->state++; - break; - case 67: - SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | - DISPCNT_OBJ_1D_MAP | - DISPCNT_BG0_ON | - DISPCNT_BG2_ON | - DISPCNT_OBJ_ON); - StringExpandPlaceholders(gStringVar4, gText_XSentOverY); - DrawTextOnTradeWindow(0, gStringVar4, 0); - sTradeData->state = 167; - sTradeData->timer = 0; - break; - // 167 and 267 are extra cases added in for animations - case 167: - if (++sTradeData->timer > 60) - { - if (sTradeData->tradeSpecies[1] != SPECIES_EGG) - { - PlayCry1(sTradeData->tradeSpecies[1], 0); - } - sTradeData->state = 267; - sTradeData->timer = 0; - } - break; - case 267: - if (IsCryFinished()) - { - sTradeData->state = 68; - } - break; - case 68: - if (++sTradeData->timer == 10) - { - PlayFanfare(MUS_FANFA5); - } - if (sTradeData->timer == 250) - { - sTradeData->state++; - StringExpandPlaceholders(gStringVar4, gText_TakeGoodCareOfX); - DrawTextOnTradeWindow(0, gStringVar4, 0); - sTradeData->timer = 0; - } - break; - case 69: - if (++sTradeData->timer == 60) - { - sTradeData->state++; - } - break; - case 70: - CheckPartnersMonForRibbons(); - sTradeData->state++; - break; - case 71: - if (sTradeData->isLinkTrade) - { - return TRUE; - } - else if (JOY_NEW(A_BUTTON)) - { - sTradeData->state++; - } - break; - case 72: // Only if in-game trade - TradeMons(gSpecialVar_0x8005, 0); - gCB2_AfterEvolution = CB2_RunTradeAnim_InGameTrade; - evoTarget = GetEvolutionTargetSpecies(&gPlayerParty[gSelectedTradeMonPositions[0]], TRUE, ITEM_NONE); - if (evoTarget != SPECIES_NONE) - { - TradeEvolutionScene(&gPlayerParty[gSelectedTradeMonPositions[0]], evoTarget, sTradeData->pokePicSpriteIdxs[1], gSelectedTradeMonPositions[0]); - } - sTradeData->state++; - break; - case 73: - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); - sTradeData->state++; - break; - case 74: - if (!gPaletteFade.active) - { - PlayNewMapMusic(sTradeData->cachedMapMusic); - if (sTradeData) - { - FreeAllWindowBuffers(); - Free(GetBgTilemapBuffer(3)); - Free(GetBgTilemapBuffer(1)); - Free(GetBgTilemapBuffer(0)); - FreeMonSpritesGfx(); - FREE_AND_SET_NULL(sTradeData); - } - SetMainCallback2(CB2_ReturnToField); - BufferInGameTradeMonName(); - HelpSystem_Enable(); - } - break; - } - return FALSE; -} - -bool8 sub_805232C(void) -{ - u16 evoTarget; - - switch (sTradeData->state) - { - case 0: - gSprites[sTradeData->pokePicSpriteIdxs[0]].invisible = FALSE; - gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.x = -180; - gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.y = gMonFrontPicCoords[sTradeData->tradeSpecies[0]].y_offset; - sTradeData->state++; - sTradeData->cachedMapMusic = GetCurrentMapMusic(); - PlayNewMapMusic(MUS_SHINKA); - break; - case 1: - if (sTradeData->bg2hofs > 0) - { - gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.x += 3; - sTradeData->bg2hofs -= 3; - } - else - { - gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.x = 0; - sTradeData->bg2hofs = 0; - sTradeData->state = 10; - } - break; - case 10: - StringExpandPlaceholders(gStringVar4, gText_XWillBeSentToY); - DrawTextOnTradeWindow(0, gStringVar4, 0); - - if (sTradeData->tradeSpecies[0] != SPECIES_EGG) - { - PlayCry1(sTradeData->tradeSpecies[0], 0); - } - - sTradeData->state = 11; - sTradeData->timer = 0; - break; - case 11: - if (++sTradeData->timer == 80) - { - sTradeData->pokeballSpriteId = CreateTradePokeballSprite(sTradeData->pokePicSpriteIdxs[0], gSprites[sTradeData->pokePicSpriteIdxs[0]].oam.paletteNum, 120, 32, 2, 1, 0x14, 0xfffff); - sTradeData->state++; - StringExpandPlaceholders(gStringVar4, gText_ByeByeVar1); - DrawTextOnTradeWindow(0, gStringVar4, 0); - } - break; - case 12: - if (gSprites[sTradeData->pokeballSpriteId].callback == SpriteCallbackDummy) - { - sTradeData->unk_D3 = CreateSprite(&sTradePokeballSpriteTemplate, 120, 32, 0); - gSprites[sTradeData->unk_D3].callback = SpriteCB_TradePokeball_Outbound; - DestroySprite(&gSprites[sTradeData->pokeballSpriteId]); - sTradeData->state++; - } - break; - case 13: - // The game waits here for the sprite to finish its animation sequence. - break; - case 14: - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); - sTradeData->state = 20; - break; - case 20: - if (!gPaletteFade.active) - { - SetTradeSequenceBgGpuRegs(4); - FillWindowPixelBuffer(0, PIXEL_FILL(15)); - CopyWindowToVram(0, 3); - sTradeData->state++; - } - break; - case 21: - BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK); - sTradeData->state++; - break; - case 22: - if (!gPaletteFade.active) - { - sTradeData->state = 23; - } - break; - case 23: - if (sTradeData->unk_EA > 0x100) - { - sTradeData->unk_EA -= 0x34; - } - else - { - SetTradeSequenceBgGpuRegs(1); - sTradeData->unk_EA = 0x80; - sTradeData->state = 124; - sTradeData->timer = 0; - } - sTradeData->sXY = 0x8000 / sTradeData->unk_EA; - break; - case 124: - if (++sTradeData->timer > 20) - { - SetTradeSequenceBgGpuRegs(3); - sTradeData->unk_91 = CreateSprite(&gUnknown_826CF48, 120, 80, 0); - sTradeData->state++; - } - break; - case 125: - if (gSprites[sTradeData->unk_91].animEnded) - { - DestroySprite(&gSprites[sTradeData->unk_91]); - SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG1 | - BLDCNT_TGT1_OBJ | - BLDCNT_EFFECT_BLEND | - BLDCNT_TGT2_BG2); - SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16, 4)); - CreateTask(Task_AnimateWirelessSignal, 5); - sTradeData->state++; - } - break; - case 126: - if (!FuncIsActiveTask(Task_AnimateWirelessSignal)) - { - sTradeData->state = 26; - } - break; - case 26: - if (--sTradeData->bg1vofs == 316) - { - sTradeData->state++; - } - break; - case 27: - sTradeData->unk_90 = CreateSprite(&gUnknown_826CE44, 120, 80, 3); - gSprites[sTradeData->unk_90].callback = SpriteCB_TradeGlowWireless; - sTradeData->unk_91 = CreateSprite(&sGlowBallSpriteTemplate, 120, 80, 0); - StartSpriteAnim(&gSprites[sTradeData->unk_91], 1); - sTradeData->state++; - break; - case 28: - if ((sTradeData->bg1vofs -= 3) == 166) - { - sTradeData->state = 200; - } - SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1 | - DISPCNT_OBJ_1D_MAP | - DISPCNT_BG1_ON | - DISPCNT_OBJ_ON); - break; - case 200: - gSprites[sTradeData->unk_90].pos1.y -= 2; - gSprites[sTradeData->unk_91].pos1.y -= 2; - if (gSprites[sTradeData->unk_90].pos1.y < -8) - { - sTradeData->state = 29; - } - break; - case 29: - BeginNormalPaletteFade(0xFFFFFFFF, -1, 0, 16, RGB_BLACK); - sTradeData->state = 30; - break; - case 30: - if (!gPaletteFade.active) - { - DestroySprite(&gSprites[sTradeData->unk_90]); - DestroySprite(&gSprites[sTradeData->unk_91]); - SetTradeSequenceBgGpuRegs(2); - sTradeData->state++; - } - break; - case 31: - BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK); - sTradeData->unk_90 = CreateSprite(&sGlowBallSpriteTemplate, 111, 170, 0); - sTradeData->unk_91 = CreateSprite(&sGlowBallSpriteTemplate, 129, -10, 0); - sTradeData->state++; - break; - case 32: - if (!gPaletteFade.active) - { - PlaySE(SE_TK_WARPOUT); - sTradeData->state++; - } - gSprites[sTradeData->unk_90].pos2.y -= 3; - gSprites[sTradeData->unk_91].pos2.y += 3; - break; - case 33: - gSprites[sTradeData->unk_90].pos2.y -= 3; - gSprites[sTradeData->unk_91].pos2.y += 3; - if (gSprites[sTradeData->unk_90].pos2.y <= -90) - { - gSprites[sTradeData->unk_90].data[1] = 1; - gSprites[sTradeData->unk_91].data[1] = 1; - sTradeData->state++; - CreateTask(c3_0805465C, 5); - } - break; - case 34: - BlendPalettes(0x8, 16, RGB_WHITEALPHA); - sTradeData->state++; - break; - case 35: - BlendPalettes(0x8, 16, RGB_WHITEALPHA); - sTradeData->state++; - break; - case 36: - BlendPalettes(0x8, 16, RGB_WHITEALPHA); - sTradeData->state++; - break; - case 37: - if (!IsPokeSpriteNotFlipped(sTradeData->tradeSpecies[0])) - { - gSprites[sTradeData->pokePicSpriteIdxs[0]].affineAnims = gUnknown_826CF88; - gSprites[sTradeData->pokePicSpriteIdxs[0]].oam.affineMode = 3; - CalcCenterToCornerVec(&gSprites[sTradeData->pokePicSpriteIdxs[0]], 0, 3, 3); - StartSpriteAffineAnim(&gSprites[sTradeData->pokePicSpriteIdxs[0]], 0); - } - else - { - StartSpriteAffineAnim(&gSprites[sTradeData->pokePicSpriteIdxs[0]], 0); - } - StartSpriteAffineAnim(&gSprites[sTradeData->pokePicSpriteIdxs[1]], 0); - gSprites[sTradeData->pokePicSpriteIdxs[0]].pos1.x = 40; - gSprites[sTradeData->pokePicSpriteIdxs[1]].pos1.x = 200; - gSprites[sTradeData->pokePicSpriteIdxs[0]].pos1.y = 192; - gSprites[sTradeData->pokePicSpriteIdxs[1]].pos1.y = -32; - gSprites[sTradeData->pokePicSpriteIdxs[0]].invisible = FALSE; - gSprites[sTradeData->pokePicSpriteIdxs[1]].invisible = FALSE; - sTradeData->state++; - break; - case 38: - gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.y -= 3; - gSprites[sTradeData->pokePicSpriteIdxs[1]].pos2.y += 3; - if (gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.y < -160 && gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.y >= -163) - { - PlaySE(SE_TK_WARPIN); - } - if (gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.y < -222) - { - gSprites[sTradeData->unk_90].data[1] = 0; - gSprites[sTradeData->unk_91].data[1] = 0; - sTradeData->state++; - gSprites[sTradeData->pokePicSpriteIdxs[0]].invisible = TRUE; - gSprites[sTradeData->pokePicSpriteIdxs[1]].invisible = TRUE; - CreateTask(sub_8054734, 5); - } - break; - case 39: - gSprites[sTradeData->unk_90].pos2.y -= 3; - gSprites[sTradeData->unk_91].pos2.y += 3; - if (gSprites[sTradeData->unk_90].pos2.y <= -222) - { - BeginNormalPaletteFade(0xFFFFFFFF, -1, 0, 16, RGB_BLACK); - sTradeData->state++; - DestroySprite(&gSprites[sTradeData->unk_90]); - DestroySprite(&gSprites[sTradeData->unk_91]); - } - break; - case 40: - if (!gPaletteFade.active) - { - sTradeData->state++; - SetTradeSequenceBgGpuRegs(1); - sTradeData->bg1vofs = 166; - SetTradeSequenceBgGpuRegs(3); - sTradeData->bg2vofs = 412; - sTradeData->unk_90 = CreateSprite(&gUnknown_826CE44, 120, -20, 3); - gSprites[sTradeData->unk_90].callback = SpriteCB_TradeGlowWireless; - sTradeData->unk_91 = CreateSprite(&sGlowBallSpriteTemplate, 120, -20, 0); - StartSpriteAnim(&gSprites[sTradeData->unk_91], 1); - } - break; - case 41: - BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK); - sTradeData->state++; - break; - case 42: - SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | - DISPCNT_OBJ_1D_MAP | - DISPCNT_BG1_ON | - DISPCNT_OBJ_ON); - if (!gPaletteFade.active) - { - sTradeData->state++; - } - break; - case 43: - gSprites[sTradeData->unk_90].pos2.y += 4; - gSprites[sTradeData->unk_91].pos2.y += 4; - if (gSprites[sTradeData->unk_90].pos2.y + gSprites[sTradeData->unk_90].pos1.y == 64) - { - sTradeData->state = 144; - sTradeData->timer = 0; - } - break; - case 144: - SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | - DISPCNT_OBJ_1D_MAP | - DISPCNT_BG1_ON | - DISPCNT_BG2_ON | - DISPCNT_OBJ_ON); - sTradeData->bg1vofs += 3; - sTradeData->bg2vofs += 3; - if (++sTradeData->timer == 10) - { - u8 taskId = CreateTask(Task_AnimateWirelessSignal, 5); - gTasks[taskId].data[2] = TRUE; - } - if (sTradeData->bg1vofs > 316) - { - sTradeData->bg1vofs = 316; - sTradeData->state++; - } - break; - case 145: - DestroySprite(&gSprites[sTradeData->unk_90]); - DestroySprite(&gSprites[sTradeData->unk_91]); - sTradeData->state++; - sTradeData->timer = 0; - break; - case 146: - if (!FuncIsActiveTask(Task_AnimateWirelessSignal)) - { - sTradeData->state = 46; - sTradeData->timer = 0; - } - break; - case 46: - if (++sTradeData->timer == 10) - { - sTradeData->state++; - } - break; - case 47: - if (++sTradeData->bg1vofs > 348) - { - sTradeData->bg1vofs = 348; - sTradeData->state++; - } - break; - case 48: - sTradeData->unk_91 = CreateSprite(&gUnknown_826CF30, 120, 80, 0); - sTradeData->state = 50; - break; - case 50: - if (gSprites[sTradeData->unk_91].animEnded) - { - DestroySprite(&gSprites[sTradeData->unk_91]); - SetTradeSequenceBgGpuRegs(6); - sTradeData->state++; - PlaySE(SE_W028); - } - break; - case 51: - if (sTradeData->unk_EA < 0x400) - { - sTradeData->unk_EA += 0x34; - } - else - { - sTradeData->unk_EA = 0x400; - sTradeData->state++; - } - sTradeData->sXY = 0x8000 / sTradeData->unk_EA; - break; - case 52: - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); - sTradeData->state = 60; - break; - - case 60: - if (!gPaletteFade.active) - { - SetTradeSequenceBgGpuRegs(5); - SetTradeSequenceBgGpuRegs(7); - gPaletteFade.bufferTransferDisabled = TRUE; - sTradeData->state++; - } - break; - case 61: - gPaletteFade.bufferTransferDisabled = FALSE; - BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); - sTradeData->state++; - break; - case 62: - SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | - DISPCNT_OBJ_1D_MAP | - DISPCNT_BG2_ON | - DISPCNT_OBJ_ON); - if (!gPaletteFade.active) - { - sTradeData->state++; - } - break; - case 63: - sTradeData->unk_D3 = CreateSprite(&sTradePokeballSpriteTemplate, 120, -8, 0); - gSprites[sTradeData->unk_D3].data[3] = 74; - gSprites[sTradeData->unk_D3].callback = SpriteCB_TradePokeball_Inbound; - StartSpriteAnim(&gSprites[sTradeData->unk_D3], 1); - StartSpriteAffineAnim(&gSprites[sTradeData->unk_D3], 2); - BlendPalettes(1 << (16 + gSprites[sTradeData->unk_D3].oam.paletteNum), 16, RGB_WHITEALPHA); - sTradeData->state++; - sTradeData->timer = 0; - break; - case 64: - BeginNormalPaletteFade(1 << (16 + gSprites[sTradeData->unk_D3].oam.paletteNum), 1, 16, 0, RGB_WHITEALPHA); - sTradeData->state++; - break; - case 65: - if (gSprites[sTradeData->unk_D3].callback == SpriteCallbackDummy) - { - HandleLoadSpecialPokePic(&gMonFrontPicTable[sTradeData->tradeSpecies[1]], gMonSpritesGfxPtr->sprites[3], sTradeData->tradeSpecies[1], sTradeData->monPersonalities[1]); - sTradeData->state++; - } - break; - case 66: - gSprites[sTradeData->pokePicSpriteIdxs[1]].pos1.x = 120; - gSprites[sTradeData->pokePicSpriteIdxs[1]].pos1.y = gMonFrontPicCoords[sTradeData->tradeSpecies[1]].y_offset + 60; - gSprites[sTradeData->pokePicSpriteIdxs[1]].pos2.x = 0; - gSprites[sTradeData->pokePicSpriteIdxs[1]].pos2.y = 0; - StartSpriteAnim(&gSprites[sTradeData->pokePicSpriteIdxs[1]], 0); - CreatePokeballSpriteToReleaseMon(sTradeData->pokePicSpriteIdxs[1], gSprites[sTradeData->pokePicSpriteIdxs[1]].oam.paletteNum, 120, 84, 2, 1, 20, 0xFFFFF); - FreeSpriteOamMatrix(&gSprites[sTradeData->unk_D3]); - DestroySprite(&gSprites[sTradeData->unk_D3]); - sTradeData->state++; - break; - case 67: - SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | - DISPCNT_OBJ_1D_MAP | - DISPCNT_BG0_ON | - DISPCNT_BG2_ON | - DISPCNT_OBJ_ON); - StringExpandPlaceholders(gStringVar4, gText_XSentOverY); - DrawTextOnTradeWindow(0, gStringVar4, 0); - sTradeData->state = 167; - sTradeData->timer = 0; - break; - // 167 and 267 are extra cases added in for animations - case 167: - if (++sTradeData->timer > 60) - { - if (sTradeData->tradeSpecies[1] != SPECIES_EGG) - { - PlayCry1(sTradeData->tradeSpecies[1], 0); - } - sTradeData->state = 267; - sTradeData->timer = 0; - } - break; - case 267: - if (IsCryFinished()) - { - sTradeData->state = 68; - } - break; - case 68: - if (++sTradeData->timer == 10) - { - PlayFanfare(MUS_FANFA5); - } - if (sTradeData->timer == 250) - { - sTradeData->state++; - StringExpandPlaceholders(gStringVar4, gText_TakeGoodCareOfX); - DrawTextOnTradeWindow(0, gStringVar4, 0); - sTradeData->timer = 0; - } - break; - case 69: - if (++sTradeData->timer == 60) - { - sTradeData->state++; - } - break; - case 70: - CheckPartnersMonForRibbons(); - sTradeData->state++; - break; - case 71: - if (sTradeData->isLinkTrade) - { - return TRUE; - } - else if (JOY_NEW(A_BUTTON)) - { - sTradeData->state++; - } - break; - case 72: // Only if in-game trade - TradeMons(gSpecialVar_0x8005, 0); - gCB2_AfterEvolution = CB2_RunTradeAnim_InGameTrade; - evoTarget = GetEvolutionTargetSpecies(&gPlayerParty[gSelectedTradeMonPositions[0]], TRUE, ITEM_NONE); - if (evoTarget != SPECIES_NONE) - { - TradeEvolutionScene(&gPlayerParty[gSelectedTradeMonPositions[0]], evoTarget, sTradeData->pokePicSpriteIdxs[1], gSelectedTradeMonPositions[0]); - } - sTradeData->state++; - break; - case 73: - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); - sTradeData->state++; - break; - case 74: - if (!gPaletteFade.active) - { - PlayNewMapMusic(sTradeData->cachedMapMusic); - if (sTradeData) - { - FreeAllWindowBuffers(); - Free(GetBgTilemapBuffer(3)); - Free(GetBgTilemapBuffer(1)); - Free(GetBgTilemapBuffer(0)); - FreeMonSpritesGfx(); - FREE_AND_SET_NULL(sTradeData); - } - SetMainCallback2(CB2_ReturnToField); - BufferInGameTradeMonName(); - HelpSystem_Enable(); - } - break; - } - return FALSE; -} - -void sub_8053788(void) -{ - u16 evoSpecies; - switch (gMain.state) - { - case 0: - gMain.state = 4; - gSoftResetDisabled = TRUE; - break; - case 4: - gCB2_AfterEvolution = sub_8053E8C; - evoSpecies = GetEvolutionTargetSpecies(&gPlayerParty[gSelectedTradeMonPositions[0]], 1, 0); - if (evoSpecies != SPECIES_NONE) - TradeEvolutionScene(&gPlayerParty[gSelectedTradeMonPositions[0]], evoSpecies, sTradeData->pokePicSpriteIdxs[1], gSelectedTradeMonPositions[0]); - else - SetMainCallback2(sub_8053E8C); - gSelectedTradeMonPositions[0] = 0xFF; - break; - } - if (!HasLinkErrorOccurred()) - RunTasks(); - AnimateSprites(); - BuildOamBuffer(); - UpdatePaletteFade(); -} - -void sub_805383C(void) -{ - u8 recvStatus; - sub_804FFC4(); - recvStatus = GetBlockReceivedStatus(); - if (recvStatus & (1 << 0)) - { - if (gBlockRecvBuffer[0][0] == 0xDCBA) - SetMainCallback2(sub_8053788); - if (gBlockRecvBuffer[0][0] == 0xABCD) - sTradeData->unk_72 = 1; - ResetBlockReceivedFlag(0); - } - if (recvStatus & (1 << 1)) - { - if (gBlockRecvBuffer[1][0] == 0xABCD) - sTradeData->unk_73 = 1; - ResetBlockReceivedFlag(1); - } -} - -void SpriteCB_TradePokeball_Default(struct Sprite * sprite) -{ - sprite->pos1.y += sprite->data[0] / 10; - sprite->data[5] += sprite->data[1]; - sprite->pos1.x = sprite->data[5] / 10; - if (sprite->pos1.y > 76) - { - sprite->pos1.y = 76; - sprite->data[0] = -(sprite->data[0] * sprite->data[2]) / 100; - sprite->data[3]++; - } - if (sprite->pos1.x == 120) - sprite->data[1] = 0; - sprite->data[0] += sprite->data[4]; - if (sprite->data[3] == 4) - { - sprite->data[7] = 1; - sprite->callback = SpriteCallbackDummy; - } -} - -void SpriteCB_TradePokeball_Outbound(struct Sprite * sprite) -{ - sprite->pos2.y += gUnknown_826D1E4[sprite->data[0]]; - if (sprite->data[0] == 22) - PlaySE(SE_KON); - sprite->data[0]++; - if (sprite->data[0] == 44) - { - PlaySE(SE_W025); - sprite->callback = SpriteCB_TradePokeball_Outbound2; - sprite->data[0] = 0; - BeginNormalPaletteFade(1 << (sprite->oam.paletteNum + 16), -1, 0, 16, RGB_WHITEALPHA); - } -} - -void SpriteCB_TradePokeball_Outbound2(struct Sprite * sprite) -{ - if (sprite->data[1] == 20) - StartSpriteAffineAnim(sprite, 1); - sprite->data[1]++; - if (sprite->data[1] > 20) - { - sprite->pos2.y -= gUnknown_826D1E4[sprite->data[0]]; - sprite->data[0]++; - if (sprite->data[0] == 23) - { - DestroySprite(sprite); - sTradeData->state = 14; - } - } -} - -void SpriteCB_TradePokeball_Inbound(struct Sprite * sprite) -{ - if (sprite->data[2] == 0) - { - sprite->pos1.y += 4; - if (sprite->pos1.y > sprite->data[3]) - { - sprite->data[2]++; - sprite->data[0] = 22; - PlaySE(SE_KON); - } - } - else - { - if (sprite->data[0] == 66) - PlaySE(SE_KON2); - if (sprite->data[0] == 92) - PlaySE(SE_KON3); - if (sprite->data[0] == 107) - PlaySE(SE_KON4); - sprite->pos2.y += gUnknown_826D1E4[sprite->data[0]]; - sprite->data[0]++; - if (sprite->data[0] == 108) - sprite->callback = SpriteCallbackDummy; - } -} - -u16 GetInGameTradeSpeciesInfo(void) -{ - // Populates gStringVar1 with the name of the requested species and - // gStringVar2 with the name of the offered species. - // Returns the requested species. - const struct InGameTrade * inGameTrade = &gInGameTrades[gSpecialVar_0x8004]; - StringCopy(gStringVar1, gSpeciesNames[inGameTrade->requestedSpecies]); - StringCopy(gStringVar2, gSpeciesNames[inGameTrade->species]); - return inGameTrade->requestedSpecies; -} - -void BufferInGameTradeMonName(void) -{ - // Populates gStringVar1 with the nickname of the sent Pokemon and - // gStringVar2 with the name of the offered species. - u8 nickname[30]; - const struct InGameTrade * inGameTrade = &gInGameTrades[gSpecialVar_0x8004]; - GetMonData(&gPlayerParty[gSpecialVar_0x8005], MON_DATA_NICKNAME, nickname); - StringCopy10(gStringVar1, nickname); - StringCopy(gStringVar2, gSpeciesNames[inGameTrade->species]); -} - -void CreateInGameTradePokemonInternal(u8 playerSlot, u8 inGameTradeIdx) -{ - const struct InGameTrade *inGameTrade = &gInGameTrades[inGameTradeIdx]; - u8 level = GetMonData(&gPlayerParty[playerSlot], MON_DATA_LEVEL); - struct MailStruct mail; - u8 metLocation = MAPSEC_IN_GAME_TRADE; - struct Pokemon * tradeMon = &gEnemyParty[0]; - u8 mailNum; - CreateMon(tradeMon, inGameTrade->species, level, 32, TRUE, inGameTrade->personality, TRUE, inGameTrade->otId); - SetMonData(tradeMon, MON_DATA_HP_IV, &inGameTrade->ivs[0]); - SetMonData(tradeMon, MON_DATA_ATK_IV, &inGameTrade->ivs[1]); - SetMonData(tradeMon, MON_DATA_DEF_IV, &inGameTrade->ivs[2]); - SetMonData(tradeMon, MON_DATA_SPEED_IV, &inGameTrade->ivs[3]); - SetMonData(tradeMon, MON_DATA_SPATK_IV, &inGameTrade->ivs[4]); - SetMonData(tradeMon, MON_DATA_SPDEF_IV, &inGameTrade->ivs[5]); - SetMonData(tradeMon, MON_DATA_NICKNAME, inGameTrade->nickname); - SetMonData(tradeMon, MON_DATA_OT_NAME, inGameTrade->otName); - SetMonData(tradeMon, MON_DATA_OT_GENDER, &inGameTrade->otGender); - SetMonData(tradeMon, MON_DATA_ABILITY_NUM, &inGameTrade->abilityNum); - SetMonData(tradeMon, MON_DATA_BEAUTY, &inGameTrade->conditions[1]); - SetMonData(tradeMon, MON_DATA_CUTE, &inGameTrade->conditions[2]); - SetMonData(tradeMon, MON_DATA_COOL, &inGameTrade->conditions[0]); - SetMonData(tradeMon, MON_DATA_SMART, &inGameTrade->conditions[3]); - SetMonData(tradeMon, MON_DATA_TOUGH, &inGameTrade->conditions[4]); - SetMonData(tradeMon, MON_DATA_SHEEN, &inGameTrade->sheen); - SetMonData(tradeMon, MON_DATA_MET_LOCATION, &metLocation); - mailNum = 0; - if (inGameTrade->heldItem != ITEM_NONE) - { - if (ItemIsMail(inGameTrade->heldItem)) - { - GetInGameTradeMail(&mail, inGameTrade); - gLinkPartnerMail[0] = mail; - SetMonData(tradeMon, MON_DATA_MAIL, &mailNum); - SetMonData(tradeMon, MON_DATA_HELD_ITEM, &inGameTrade->heldItem); - } - else - { - SetMonData(tradeMon, MON_DATA_HELD_ITEM, &inGameTrade->heldItem); - } - } - CalculateMonStats(&gEnemyParty[0]); -} - -static void GetInGameTradeMail(struct MailStruct * mail, const struct InGameTrade * inGameTrade) -{ - int i; - for (i = 0; i < 9; i++) - mail->words[i] = sInGameTradeMailMessages[inGameTrade->mailNum][i]; - StringCopy(mail->playerName, inGameTrade->otName); - mail->trainerId[0] = inGameTrade->otId >> 24; - mail->trainerId[1] = inGameTrade->otId >> 16; - mail->trainerId[2] = inGameTrade->otId >> 8; - mail->trainerId[3] = inGameTrade->otId; - mail->species = inGameTrade->species; - mail->itemId = inGameTrade->heldItem; -} - -u16 GetTradeSpecies(void) -{ - if (GetMonData(&gPlayerParty[gSpecialVar_0x8005], MON_DATA_IS_EGG)) - return SPECIES_NONE; - else - return GetMonData(&gPlayerParty[gSpecialVar_0x8005], MON_DATA_SPECIES); -} - -void CreateInGameTradePokemon(void) -{ - CreateInGameTradePokemonInternal(gSpecialVar_0x8005, gSpecialVar_0x8004); -} - -void CB2_RunTradeAnim_LinkTrade(void) -{ - if (sub_8050F14() == TRUE) - { - DestroySprite(&gSprites[sTradeData->pokePicSpriteIdxs[0]]); - FreeSpriteOamMatrix(&gSprites[sTradeData->pokePicSpriteIdxs[1]]); - TradeMons(gSelectedTradeMonPositions[0], gSelectedTradeMonPositions[1] % 6); - sTradeData->linkData[0] = 0xABCD; - sTradeData->unk_93 = 1; - SetMainCallback2(sub_8053E1C); - } - sub_80508F4(); - sub_805383C(); - RunTasks(); - RunTextPrinters(); - AnimateSprites(); - BuildOamBuffer(); - UpdatePaletteFade(); -} - -void sub_8053E1C(void) -{ - u8 mpId = sub_804FFC4(); - sub_805383C(); - if (mpId == 0 && sTradeData->unk_72 == 1 && sTradeData->unk_73 == 1) - { - sTradeData->linkData[0] = 0xDCBA; - SendBlock(bitmask_all_link_players_but_self(), sTradeData->linkData, 20); - sTradeData->unk_72 = 2; - sTradeData->unk_73 = 2; - } - RunTasks(); - AnimateSprites(); - BuildOamBuffer(); - UpdatePaletteFade(); -} - -void sub_8053E8C(void) -{ - switch (gMain.state) - { - case 0: - gMain.state++; - StringExpandPlaceholders(gStringVar4, gUnknown_841E325); - DrawTextOnTradeWindow(0, gStringVar4, 0); - break; - case 1: - sub_800AB9C(); - gMain.state = 100; - sTradeData->timer = 0; - break; - case 100: - if (++sTradeData->timer > 180) - { - gMain.state = 101; - sTradeData->timer = 0; - } - if (IsLinkTaskFinished()) - { - gMain.state = 2; - } - break; - case 101: - if (IsLinkTaskFinished()) - { - gMain.state = 2; - } - break; - case 2: - gMain.state = 50; - StringExpandPlaceholders(gStringVar4, gText_SavingDontTurnOffThePower2); - DrawTextOnTradeWindow(0, gStringVar4, 0); - break; - case 50: - if (InUnionRoom()) - { - sub_8113550(18, sTradeData->monSpecies); - } - else - { - sub_8113550(12, sTradeData->monSpecies); - IncrementGameStat(GAME_STAT_POKEMON_TRADES); - } - if (gWirelessCommType) - { - sub_8144714(2, gLinkPlayers[GetMultiplayerId() ^ 1].trainerId); - } - SetContinueGameWarpStatusToDynamicWarp(); - sub_80DA3AC(); - gMain.state++; - sTradeData->timer = 0; - break; - case 51: - if (++sTradeData->timer == 5) - { - gMain.state++; - } - break; - case 52: - if (sub_80DA3D8()) - { - ClearContinueGameWarpStatus2(); - gMain.state = 4; - } - else - { - sTradeData->timer = 0; - gMain.state = 51; - } - break; - case 4: - sub_80DA40C(); - gMain.state = 40; - sTradeData->timer = 0; - break; - case 40: - if (++sTradeData->timer > 50) - { - if (GetMultiplayerId() == 0) - { - sTradeData->timer = Random() % 30; - } - else - { - sTradeData->timer = 0; - } - gMain.state = 41; - } - break; - case 41: - if (sTradeData->timer == 0) - { - sub_800AB9C(); - gMain.state = 42; - } - else - { - sTradeData->timer--; - } - break; - case 42: - if (IsLinkTaskFinished()) - { - sub_80DA434(); - gMain.state = 5; - } - break; - case 5: - if (++sTradeData->timer > 60) - { - gMain.state++; - sub_800AB9C(); - } - break; - case 6: - if (IsLinkTaskFinished()) - { - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); - gMain.state ++; - } - break; - case 7: - if (!gPaletteFade.active) - { - FadeOutBGM(3); - gMain.state++; - } - break; - case 8: - if (IsBGMStopped() == TRUE) - { - if (gWirelessCommType && gMain.savedCallback == sub_804C718) - { - sub_800AB9C(); - } - else - { - sub_800AAC0(); - } - gMain.state++; - } - break; - case 9: - if (gWirelessCommType && gMain.savedCallback == sub_804C718) - { - if (IsLinkRfuTaskFinished()) - { - gSoftResetDisabled = FALSE; - SetMainCallback2(sub_80543C4); - } - } - else if (!gReceivedRemoteLinkPlayers) - { - gSoftResetDisabled = FALSE; - SetMainCallback2(sub_80543C4); - } - break; - } - if (!HasLinkErrorOccurred()) - { - RunTasks(); - } - AnimateSprites(); - BuildOamBuffer(); - UpdatePaletteFade(); -} - -void sub_80543C4(void) -{ - if (!gPaletteFade.active) - { - FreeAllWindowBuffers(); - Free(GetBgTilemapBuffer(3)); - Free(GetBgTilemapBuffer(1)); - Free(GetBgTilemapBuffer(0)); - FreeMonSpritesGfx(); - FREE_AND_SET_NULL(sTradeData); - if (gWirelessCommType != 0) - DestroyWirelessStatusIndicatorSprite(); - SetMainCallback2(gMain.savedCallback); - } - RunTasks(); - AnimateSprites(); - BuildOamBuffer(); - UpdatePaletteFade(); -} - -void DoInGameTradeScene(void) -{ - ScriptContext2_Enable(); - CreateTask(sub_8054470, 10); - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); - HelpSystem_Disable(); -} - -void sub_8054470(u8 taskId) -{ - if (!gPaletteFade.active) - { - SetMainCallback2(CB2_InitTradeAnim_InGameTrade); - gFieldCallback = FieldCallback_ReturnToEventScript2; - DestroyTask(taskId); - } -} - -void CheckPartnersMonForRibbons(void) -{ - u8 nRibbons = 0; - u8 i; - for (i = 0; i < 12; i++) - { - nRibbons += GetMonData(&gEnemyParty[gSelectedTradeMonPositions[1] % 6], MON_DATA_CHAMPION_RIBBON + i); - } - if (nRibbons != 0) - FlagSet(FLAG_SYS_RIBBON_GET); -} - -void sub_80544FC(void) -{ - TradeAnimInit_LoadGfx(); -} - -void DrawTextOnTradeWindow(u8 windowId, const u8 *str, s8 speed) -{ - FillWindowPixelBuffer(windowId, PIXEL_FILL(15)); - sTradeData->textColor[0] = 15; - sTradeData->textColor[1] = 1; - sTradeData->textColor[2] = 6; - AddTextPrinterParameterized4(windowId, 2, 0, 2, 0, 2, sTradeData->textColor, speed, str); - CopyWindowToVram(windowId, 3); -} - -void Task_AnimateWirelessSignal(u8 taskId) -{ - s16 *data = gTasks[taskId].data; - u16 r2 = 16 * gUnknown_826D250[data[0]][0]; - if (data[2] == 0) - { - if (r2 == 0x100) - LoadPalette(gUnknown_826BF5C, 0x30, 0x20); - else - LoadPalette(&gUnknown_826BB5C[r2], 0x30, 0x20); - } - else - { - if (r2 == 0x100) - LoadPalette(gUnknown_826BF5C, 0x30, 0x20); - else - LoadPalette(&gUnknown_826BD5C[r2], 0x30, 0x20); - } - if (gUnknown_826D250[data[0]][0] == 0 && data[1] == 0) - PlaySE(SE_W215); - if (data[1] == gUnknown_826D250[data[0]][1]) - { - data[0]++; - data[1] = 0; - if (gUnknown_826D250[data[0]][1] == 0xFF) - DestroyTask(taskId); - } - else - data[1]++; -} - -void c3_0805465C(u8 taskId) -{ - s16 *data = gTasks[taskId].data; - - if (data[0] == 0) - { - sTradeData->win0left = sTradeData->win0right = 120; - sTradeData->win0top = 0; - sTradeData->win0bottom = 160; - SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); - SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_OBJ); - SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG0 | - WININ_WIN0_BG1 | - WININ_WIN0_OBJ); - } - - SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE2(sTradeData->win0left, sTradeData->win0right)); - SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE2(sTradeData->win0top, sTradeData->win0bottom)); - - data[0]++; - sTradeData->win0left -= 5; - sTradeData->win0right += 5; - - if (sTradeData->win0left < 80) - { - DestroyTask(taskId); - } -} - -void sub_8054734(u8 taskId) -{ - s16 *data = gTasks[taskId].data; - - if (data[0] == 0) - { - sTradeData->win0left = 80; - sTradeData->win0right = 160; - SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_OBJ); - SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG0 | - WININ_WIN0_BG1 | - WININ_WIN0_OBJ); - } - - SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE2(sTradeData->win0left, sTradeData->win0right)); - SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE2(sTradeData->win0top, sTradeData->win0bottom)); - - if (sTradeData->win0left != 120) - { - data[0]++; - sTradeData->win0left += 5; - sTradeData->win0right -= 5; - - if (sTradeData->win0left >= 116) - BlendPalettes(0x8, 0, RGB_WHITEALPHA); - } - else - { - ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); - DestroyTask(taskId); - } -} diff --git a/src/trade_scene.c b/src/trade_scene.c new file mode 100644 index 000000000..ebb788e3d --- /dev/null +++ b/src/trade_scene.c @@ -0,0 +1,2444 @@ +#include "global.h" +#include "task.h" +#include "malloc.h" +#include "bg.h" +#include "gpu_regs.h" +#include "util.h" +#include "window.h" +#include "sound.h" +#include "decompress.h" +#include "palette.h" +#include "trade.h" +#include "link.h" +#include "librfu.h" +#include "link_rfu.h" +#include "text.h" +#include "mevent.h" +#include "graphics.h" +#include "strings.h" +#include "menu.h" +#include "data.h" +#include "battle.h" +#include "script.h" +#include "event_data.h" +#include "string_util.h" +#include "mail_data.h" +#include "pokeball.h" +#include "evolution_scene.h" +#include "overworld.h" +#include "field_fadetransition.h" +#include "quest_log.h" +#include "help_system.h" +#include "new_menu_helpers.h" +#include "battle_interface.h" +#include "pokedex.h" +#include "save.h" +#include "load_save.h" +#include "random.h" +#include "constants/species.h" +#include "constants/items.h" +#include "constants/easy_chat.h" +#include "constants/songs.h" +#include "constants/region_map.h" +#include "constants/moves.h" + +struct InGameTrade { + /*0x00*/ u8 nickname[POKEMON_NAME_LENGTH + 1]; + /*0x0C*/ u16 species; + /*0x0E*/ u8 ivs[NUM_STATS]; + /*0x14*/ u8 abilityNum; + /*0x18*/ u32 otId; + /*0x1C*/ u8 conditions[5]; + /*0x24*/ u32 personality; + /*0x28*/ u16 heldItem; + /*0x2A*/ u8 mailNum; + /*0x2B*/ u8 otName[11]; + /*0x36*/ u8 otGender; + /*0x37*/ u8 sheen; + /*0x38*/ u16 requestedSpecies; +}; + +struct TradeAnimationResources { + /*0x00*/ struct Pokemon mon; + /*0x64*/ u32 timer; + /*0x68*/ u32 monPersonalities[2]; + /*0x70*/ u8 filler_70[2]; + /*0x72*/ u8 unk_72; + /*0x73*/ u8 unk_73; + /*0x74*/ u16 linkData[10]; + /*0x88*/ u8 unk_88; + /*0x89*/ u8 unk_89; + /*0x8A*/ u16 unk_8A; + /*0x8C*/ u16 unk_8C; + /*0x8E*/ u8 pokePicSpriteIdxs[2]; + /*0x90*/ u8 unk_90; + /*0x91*/ u8 unk_91; + /*0x92*/ u8 unk_92; + /*0x93*/ u8 unk_93; + /*0x94*/ u16 state; + /*0x96*/ u8 filler_96[0xD2 - 0x96]; + /*0xD2*/ u8 pokeballSpriteId; + /*0xD3*/ u8 unk_D3; + /*0xD4*/ u16 unk_D4; + /*0xD6*/ u16 unk_D6; + /*0xD8*/ u16 unk_D8; + /*0xDA*/ u16 unk_DA; + /*0xDC*/ u16 unk_DC; + /*0xDE*/ u16 unk_DE; + /*0xE0*/ s16 bg1vofs; + /*0xE2*/ s16 bg1hofs; + /*0xE4*/ s16 bg2vofs; + /*0xE6*/ s16 bg2hofs; + /*0xE8*/ u16 sXY; + /*0xEA*/ u16 unk_EA; + /*0xEC*/ u16 unk_EC; + /*0xEE*/ bool8 isLinkTrade; + /*0xF0*/ u16 tradeSpecies[2]; + /*0xF4*/ u16 cachedMapMusic; + /*0xF6*/ u8 unk_F6; + /*0xF8*/ u16 monSpecies[2]; + /*0xFC*/ u8 unk_FC[7]; + /*0x103*/ u8 filler_103[1]; + /*0x104*/ u8 textColor[3]; + /*0x107*/ u8 filler_107[1]; + /*0x108*/ u8 isCableTrade; + /*0x109*/ u8 win0left; + /*0x10A*/ u8 win0top; + /*0x10B*/ u8 win0right; + /*0x10C*/ u8 win0bottom; +}; + +EWRAM_DATA struct TradeAnimationResources * sTradeData = NULL; + +void CB2_InitTradeAnim_LinkTrade(void); +void sub_805049C(void); +void sub_80504B0(void); +void TradeAnimInit_LoadGfx(void); +void CB2_RunTradeAnim_InGameTrade(void); +void SetTradeSequenceBgGpuRegs(u8 idx); +void sub_8050DE0(void); +void sub_8050E24(void); +u8 sub_8050F14(void); +u8 sub_8050F3C(void); +u8 sub_805232C(void); +void SpriteCB_TradePokeball_Outbound(struct Sprite * sprite); +void SpriteCB_TradePokeball_Outbound2(struct Sprite * sprite); +void SpriteCB_TradePokeball_Inbound(struct Sprite * sprite); +void BufferInGameTradeMonName(void); +static void GetInGameTradeMail(struct MailStruct * mail, const struct InGameTrade * inGameTrade); +void CB2_RunTradeAnim_LinkTrade(void); +void sub_8053E1C(void); +void sub_8053E8C(void); +void sub_80543C4(void); +void sub_8054470(u8 taskId); +void CheckPartnersMonForRibbons(void); +void DrawTextOnTradeWindow(u8 windowId, const u8 *str, s8 speed); +void Task_AnimateWirelessSignal(u8 taskId); +void c3_0805465C(u8 taskId); +void sub_8054734(u8 taskId); + +extern const u8 gUnknown_8261EC7[]; +extern const u8 *const sTradeErrorOrStatusMessagePtrs[]; +extern const u16 gTradeGlow2PaletteAnimTable[]; +extern const struct SpriteSheet gUnknown_826CDD4; +extern const struct SpritePalette gUnknown_826CDDC; +extern const struct BgTemplate gUnknown_826D1D4[4]; +extern const struct WindowTemplate gUnknown_826D1BC[]; +extern const u16 gUnknown_826AA5C[]; +extern const u16 gUnknown_8269A5C[]; +extern const u32 gUnknown_3379A0Bin[]; +extern const u16 gUnknown_826407C[]; +extern const u16 gUnknown_826BB5C[]; +extern const u16 gUnknown_826BD5C[]; +extern const u16 gUnknown_826BF5C[]; +extern const u16 gUnknown_826701C[]; +extern const u16 gUnknown_826985C[]; +extern const u16 gUnknown_826995C[]; +extern const u32 gWirelessSignal4bpp[]; +extern const u32 gUnknown_826C60C[]; +extern const struct SpriteSheet gUnknown_826CE2C; +extern const struct SpriteSheet gUnknown_826CE7C; +extern const struct SpriteSheet gUnknown_826CEB0; +extern const struct SpriteSheet gUnknown_826CF28; +extern const struct SpritePalette gUnknown_826CE34; +extern const struct SpritePalette gUnknown_826CE3C; +extern const struct InGameTrade gInGameTrades[]; +extern const struct SpriteTemplate sTradePokeballSpriteTemplate; +extern const struct SpriteTemplate gUnknown_826CF30; +extern const struct SpriteTemplate sGameLinkCableEndSpriteTemplate; +extern const struct SpriteTemplate gUnknown_826CE44; +extern const struct SpriteTemplate sGlowBallSpriteTemplate; +extern const union AffineAnimCmd *const gUnknown_826CF88[]; +extern const struct SpriteTemplate gUnknown_826CF48; +extern const s8 gUnknown_826D1E4[]; +extern const u16 sInGameTradeMailMessages[][10]; +extern const u8 gUnknown_826D250[][2]; + +// Sprite callback for link cable trade glow +void SpriteCB_TradeGlowCable(struct Sprite * sprite) +{ + sprite->data[0]++; + if (sprite->data[0] == 10) + { + PlaySE(SE_BOWA); + sprite->data[0] = 0; + } +} + +// Sprite callback for wireless trade glow +void SpriteCB_TradeGlowWireless(struct Sprite * sprite) +{ + if (!sprite->invisible) + { + sprite->data[0]++; + if (sprite->data[0] == 10) + { + PlaySE(SE_W207B); + sprite->data[0] = 0; + } + } +} + +// Palette flash for trade glow core +void SpriteCB_TradeGlowCore(struct Sprite * sprite) +{ + if (sprite->data[1] == 0) + { + sprite->data[0]++; + if (sprite->data[0] == 12) + sprite->data[0] = 0; + LoadPalette(&gTradeGlow2PaletteAnimTable[sprite->data[0]], 16 * (sprite->oam.paletteNum + 16) + 4, 2); + } +} + +void SpriteCB_GameLinkCableEnd_Outbound(struct Sprite * sprite) +{ + sprite->data[0]++; + sprite->pos2.y++; + if (sprite->data[0] == 10) + DestroySprite(sprite); +} + +void SpriteCB_GameLinkCableEnd_Inbound(struct Sprite * sprite) +{ + sprite->data[0]++; + sprite->pos2.y--; + if (sprite->data[0] == 10) + DestroySprite(sprite); +} + +void sub_804FE00(struct Sprite * sprite) +{ + sprite->data[0]++; + if (sprite->data[0] == 15) + { + PlaySE(SE_W107); + sprite->data[0] = 0; + } +} + +void SetTradeBGAffine(void) +{ + struct BgAffineDstData affine; + DoBgAffineSet(&affine, sTradeData->unk_D4 * 0x100, sTradeData->unk_D6 * 0x100, sTradeData->unk_DC, sTradeData->unk_DE, sTradeData->sXY, sTradeData->sXY, sTradeData->unk_EC); + SetGpuReg(REG_OFFSET_BG2PA, affine.pa); + SetGpuReg(REG_OFFSET_BG2PB, affine.pb); + SetGpuReg(REG_OFFSET_BG2PC, affine.pc); + SetGpuReg(REG_OFFSET_BG2PD, affine.pd); + SetGpuReg(REG_OFFSET_BG2X, affine.dx); + SetGpuReg(REG_OFFSET_BG2Y, affine.dy); +} + +static void TradeAnim_UpdateBgRegs(void) +{ + u16 dispcnt; + + SetGpuReg(REG_OFFSET_BG1VOFS, sTradeData->bg1vofs); + SetGpuReg(REG_OFFSET_BG1HOFS, sTradeData->bg1hofs); + + dispcnt = GetGpuReg(REG_OFFSET_DISPCNT); + if ((dispcnt & 7) == DISPCNT_MODE_0) + { + SetGpuReg(REG_OFFSET_BG2VOFS, sTradeData->bg2vofs); + SetGpuReg(REG_OFFSET_BG2HOFS, sTradeData->bg2hofs); + } + else + { + SetTradeBGAffine(); + } +} + +static void VBlankCB_TradeAnim(void) +{ + TradeAnim_UpdateBgRegs(); + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +void sub_804FF24(void) +{ + sTradeData->unk_8A = 0; + sTradeData->unk_88 = 0; + sTradeData->unk_89 = 0; +} + +void sub_804FF4C(void) +{ + if (sTradeData->unk_88 == sTradeData->unk_89) + sTradeData->unk_8A++; + else + sTradeData->unk_8A = 0; + + if (sTradeData->unk_8A > 300) + { + CloseLink(); + SetMainCallback2(CB2_LinkError); + sTradeData->unk_8A = 0; + sTradeData->unk_89 = 0; + sTradeData->unk_88 = 0; + } + + sTradeData->unk_89 = sTradeData->unk_88; +} + +u32 sub_804FFC4(void) +{ + if (gReceivedRemoteLinkPlayers) + return GetMultiplayerId(); + return 0; +} + +void sub_804FFE4(u8 whichParty, u8 a1) +{ + int pos = 0; + struct Pokemon *mon = NULL; + u16 species; + u32 personality; + + if (whichParty == 0) + { + mon = &gPlayerParty[gSelectedTradeMonPositions[0]]; + pos = 1; + } + + if (whichParty == 1) + { + mon = &gEnemyParty[gSelectedTradeMonPositions[1] % PARTY_SIZE]; + pos = 3; + } + + switch (a1) + { + case 0: + species = GetMonData(mon, MON_DATA_SPECIES2); + personality = GetMonData(mon, MON_DATA_PERSONALITY); + + if (whichParty == 0) + HandleLoadSpecialPokePic(&gMonFrontPicTable[species], gMonSpritesGfxPtr->sprites[1], species, personality); + else + HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonFrontPicTable[species], gMonSpritesGfxPtr->sprites[whichParty * 2 + 1], species, personality); + + LoadCompressedSpritePalette(GetMonSpritePalStruct(mon)); + sTradeData->tradeSpecies[whichParty] = species; + sTradeData->monPersonalities[whichParty] = personality; + break; + case 1: + SetMultiuseSpriteTemplateToPokemon(GetMonSpritePalStruct(mon)->tag, pos); + sTradeData->pokePicSpriteIdxs[whichParty] = CreateSprite(&gMultiuseSpriteTemplate, 120, 60, 6); + gSprites[sTradeData->pokePicSpriteIdxs[whichParty]].invisible = TRUE; + gSprites[sTradeData->pokePicSpriteIdxs[whichParty]].callback = SpriteCallbackDummy; + break; + } +} + +void CB2_InitTradeAnim_LinkTrade(void) +{ + switch (gMain.state) + { + case 0: + if (!gReceivedRemoteLinkPlayers) + { + gLinkType = 0x1144; + CloseLink(); + } + sTradeData = AllocZeroed(sizeof(struct TradeAnimationResources)); + AllocateMonSpritesGfx(); + ResetTasks(); + ResetSpriteData(); + FreeAllSpritePalettes(); + SetVBlankCallback(VBlankCB_TradeAnim); + TradeAnimInit_LoadGfx(); + sub_804FF24(); + gMain.state++; + sTradeData->unk_8C = 0; + sTradeData->state = 0; + sTradeData->isLinkTrade = TRUE; + sTradeData->unk_D4 = 64; + sTradeData->unk_D6 = 64; + sTradeData->unk_D8 = 0; + sTradeData->unk_DA = 0; + sTradeData->unk_DC = 120; + sTradeData->unk_DE = 80; + sTradeData->sXY = 256; + sTradeData->unk_EC = 0; + break; + case 1: + if (!gReceivedRemoteLinkPlayers) + { + sTradeData->isCableTrade = TRUE; + OpenLink(); + gMain.state++; + sTradeData->timer = 0; + } + else + { + gMain.state = 4; + } + break; + case 2: + sTradeData->timer++; + if (sTradeData->timer > 60) + { + sTradeData->timer = 0; + gMain.state++; + } + break; + case 3: + if (IsLinkMaster()) + { + if (GetLinkPlayerCount_2() >= GetSavedPlayerCount()) + { + sTradeData->timer++; + if (sTradeData->timer > 30) + { + CheckShouldAdvanceLinkState(); + gMain.state++; + } + } + else + { + sub_804FF4C(); + } + } + else + { + gMain.state++; + } + break; + case 4: + sub_804FF4C(); + if (gReceivedRemoteLinkPlayers == 1 && IsLinkPlayerDataExchangeComplete() == 1) + { + gMain.state++; + } + break; + case 5: + sTradeData->unk_72 = 0; + sTradeData->unk_73 = 0; + sTradeData->unk_93 = 0; + sub_804FFE4(0, 0); + gMain.state++; + break; + case 6: + sub_804FFE4(0, 1); + gMain.state++; + break; + case 7: + sub_804FFE4(1, 0); + gMain.state++; + break; + case 8: + sub_804FFE4(1, 1); + sub_80504B0(); + gMain.state++; + break; + case 9: + sub_8050DE0(); + LoadSpriteSheet(&gUnknown_826CDD4); + LoadSpritePalette(&gUnknown_826CDDC); + gMain.state++; + break; + case 10: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); + ShowBg(0); + sTradeData->monSpecies[0] = GetMonData(&gPlayerParty[gSelectedTradeMonPositions[0]], MON_DATA_SPECIES2); + sTradeData->monSpecies[1] = GetMonData(&gEnemyParty[gSelectedTradeMonPositions[1] % 6], MON_DATA_SPECIES2); + memcpy(sTradeData->unk_FC, gLinkPlayers[GetMultiplayerId() ^ 1].name, 7); + gMain.state++; + break; + case 11: + sub_805049C(); + sub_8050E24(); + gMain.state++; + break; + case 12: + if (!gPaletteFade.active) + { + if (gWirelessCommType != 0) + { + LoadWirelessStatusIndicatorSpriteGfx(); + CreateWirelessStatusIndicatorSprite(0, 0); + } + SetMainCallback2(CB2_RunTradeAnim_LinkTrade); + } + break; + } + RunTasks(); + RunTextPrinters(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +void sub_805049C(void) +{ + SetTradeSequenceBgGpuRegs(5); + SetTradeSequenceBgGpuRegs(0); +} + +void sub_80504B0(void) +{ + FillWindowPixelBuffer(0, PIXEL_FILL(15)); + PutWindowTilemap(0); + CopyWindowToVram(0, 3); +} + +void TradeAnimInit_LoadGfx(void) +{ + SetGpuReg(REG_OFFSET_DISPCNT, 0); + ResetBgsAndClearDma3BusyFlags(FALSE); + InitBgsFromTemplates(0, gUnknown_826D1D4, NELEMS(gUnknown_826D1D4)); + ChangeBgX(0, 0, 0); + ChangeBgY(0, 0, 0); + SetBgTilemapBuffer(0, Alloc(BG_SCREEN_SIZE)); + SetBgTilemapBuffer(1, Alloc(BG_SCREEN_SIZE)); + SetBgTilemapBuffer(3, Alloc(BG_SCREEN_SIZE)); + DeactivateAllTextPrinters(); + // Doing the graphics load... + DecompressAndLoadBgGfxUsingHeap(0, gBattleTextboxTiles, 0, 0, 0); + LZDecompressWram(gFile_graphics_interface_menu_map_tilemap, gDecompressionBuffer); + CopyToBgTilemapBuffer(0, gDecompressionBuffer, BG_SCREEN_SIZE, 0); + LoadCompressedPalette(gBattleTextboxPalette, 0x000, 0x20); + InitWindows(gUnknown_826D1BC); + // ... and doing the same load again + DecompressAndLoadBgGfxUsingHeap(0, gBattleTextboxTiles, 0, 0, 0); + LZDecompressWram(gFile_graphics_interface_menu_map_tilemap, gDecompressionBuffer); + CopyToBgTilemapBuffer(0, gDecompressionBuffer, BG_SCREEN_SIZE, 0); + LoadCompressedPalette(gBattleTextboxPalette, 0x000, 0x20); +} + +void CB2_InitTradeAnim_InGameTrade(void) +{ + u8 otName[11]; + + switch (gMain.state) + { + case 0: + gSelectedTradeMonPositions[0] = gSpecialVar_0x8005; + gSelectedTradeMonPositions[1] = 6; + StringCopy(gLinkPlayers[0].name, gSaveBlock2Ptr->playerName); + GetMonData(&gEnemyParty[0], MON_DATA_OT_NAME, otName); + StringCopy(gLinkPlayers[1].name, otName); + sTradeData = AllocZeroed(sizeof(*sTradeData)); + AllocateMonSpritesGfx(); + ResetTasks(); + ResetSpriteData(); + FreeAllSpritePalettes(); + SetVBlankCallback(VBlankCB_TradeAnim); + TradeAnimInit_LoadGfx(); + sTradeData->isLinkTrade = FALSE; + sTradeData->unk_8C = 0; + sTradeData->state = 0; + sTradeData->unk_D4 = 64; + sTradeData->unk_D6 = 64; + sTradeData->unk_D8 = 0; + sTradeData->unk_DA = 0; + sTradeData->unk_DC = 120; + sTradeData->unk_DE = 80; + sTradeData->sXY = 256; + sTradeData->unk_EC = 0; + sTradeData->timer = 0; + gMain.state = 5; + break; + case 5: + sub_804FFE4(0, 0); + gMain.state++; + break; + case 6: + sub_804FFE4(0, 1); + gMain.state++; + break; + case 7: + sub_804FFE4(1, 0); + ShowBg(0); + gMain.state++; + break; + case 8: + sub_804FFE4(1, 1); + FillWindowPixelBuffer(0, PIXEL_FILL(15)); + PutWindowTilemap(0); + CopyWindowToVram(0, 3); + gMain.state++; + break; + case 9: + sub_8050DE0(); + LoadSpriteSheet(&gUnknown_826CDD4); + LoadSpritePalette(&gUnknown_826CDDC); + gMain.state++; + break; + case 10: + ShowBg(0); + gMain.state++; + break; + case 11: + SetTradeSequenceBgGpuRegs(5); + SetTradeSequenceBgGpuRegs(0); + sub_8050E24(); + gMain.state++; + break; + case 12: + SetMainCallback2(CB2_RunTradeAnim_InGameTrade); + break; + } + + RunTasks(); + RunTextPrinters(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +static void ReceivedMonSetPokedexFlags(u8 partyIdx) +{ + struct Pokemon *mon = &gPlayerParty[partyIdx]; + + if (!GetMonData(mon, MON_DATA_IS_EGG)) + { + u16 species = GetMonData(mon, MON_DATA_SPECIES, NULL); + u32 personality = GetMonData(mon, MON_DATA_PERSONALITY, NULL); + species = SpeciesToNationalPokedexNum(species); + GetSetPokedexFlag(species, FLAG_SET_SEEN); + HandleSetPokedexFlag(species, FLAG_SET_CAUGHT, personality); + } +} + +static void RS_TryEnableNationalPokedex(void) +{ + u8 mpId = GetMultiplayerId(); + // Originally in Ruby but commented out + /*if (gLinkPlayers[mpId ^ 1].lp_field_2 == 0x8000) + EnableNationalPokedex();*/ +} + +void TradeMons(u8 playerPartyIdx, u8 partnerPartyIdx) +{ + u8 friendship; + + // Get whether the offered Pokemon have mail + struct Pokemon *playerMon = &gPlayerParty[playerPartyIdx]; + u16 playerMail = GetMonData(playerMon, MON_DATA_MAIL); + + struct Pokemon *partnerMon = &gEnemyParty[partnerPartyIdx]; + u16 partnerMail = GetMonData(partnerMon, MON_DATA_MAIL); + + // The mail attached to the sent Pokemon no longer exists in your file. + if (playerMail != 0xFF) + ClearMailStruct(&gSaveBlock1Ptr->mail[playerMail]); + + // This is where the actual trade happens!! + sTradeData->mon = *playerMon; + *playerMon = *partnerMon; + *partnerMon = sTradeData->mon; + + // By default, a Pokemon received from a trade will have 70 Friendship. + friendship = 70; + if (!GetMonData(playerMon, MON_DATA_IS_EGG)) + SetMonData(playerMon, MON_DATA_FRIENDSHIP, &friendship); + + // Associate your partner's mail with the Pokemon they sent over. + if (partnerMail != 0xFF) + GiveMailToMon2(playerMon, &gLinkPartnerMail[partnerMail]); + + ReceivedMonSetPokedexFlags(playerPartyIdx); + if (gReceivedRemoteLinkPlayers) + RS_TryEnableNationalPokedex(); +} + +void sub_80508F4(void) +{ + switch (sTradeData->unk_93) + { + case 1: + if (IsLinkTaskFinished()) + { + SendBlock(bitmask_all_link_players_but_self(), sTradeData->linkData, 20); + sTradeData->unk_93++; + } + case 2: + sTradeData->unk_93 = 0; + break; + } +} + +void CB2_RunTradeAnim_InGameTrade(void) +{ + sub_8050F14(); + RunTasks(); + RunTextPrinters(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +void SetTradeSequenceBgGpuRegs(u8 state) +{ + switch (state) + { + case 0: + sTradeData->bg2vofs = 0; + sTradeData->bg2hofs = 0xB4; + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG2_ON | DISPCNT_OBJ_ON); + SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(2) | BGCNT_CHARBASE(1) | BGCNT_SCREENBASE(18) | BGCNT_TXT512x256); + LoadPalette(gTradeGba2_Pal, 0x10, 0x60); + DmaCopyLarge16(3, gTradeGba_Gfx, (void *)BG_CHAR_ADDR(1), 0x1420, 0x1000); + DmaCopy16Defvars(3, gUnknown_826601C, (void *)BG_SCREEN_ADDR(18), 0x1000); + break; + case 1: + sTradeData->bg1hofs = 0; + sTradeData->bg1vofs = 0x15C; + SetGpuReg(REG_OFFSET_BG1VOFS, 0x15C); + SetGpuReg(REG_OFFSET_BG1CNT, BGCNT_PRIORITY(2) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(5) | BGCNT_TXT256x512); + SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(2) | BGCNT_CHARBASE(1) | BGCNT_SCREENBASE(18) | BGCNT_TXT256x512); + if (sTradeData->isCableTrade) + { + DmaCopy16Defvars(3, gUnknown_826AA5C, (void *)BG_SCREEN_ADDR(5), 0x1000); + } + else + { + DmaCopy16Defvars(3, gUnknown_8269A5C, (void *)BG_SCREEN_ADDR(5), 0x1000); + } + DmaCopyLarge16(3, gTradeGba_Gfx, (void *)BG_CHAR_ADDR(0), 0x1420, 0x1000); + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG1_ON | DISPCNT_OBJ_ON); + break; + case 2: + sTradeData->bg1vofs = 0; + sTradeData->bg1hofs = 0; + if (sTradeData->isCableTrade == FALSE) + { + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG1_ON | DISPCNT_OBJ_ON); + LZ77UnCompVram(gUnknown_3379A0Bin, (void *)BG_SCREEN_ADDR(5)); + BlendPalettes(0x000000008, 0x10, RGB_BLACK); + } + else + { + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG1_ON | DISPCNT_OBJ_ON); + DmaCopy16Defvars(3, gUnknown_826407C, (void *)BG_SCREEN_ADDR(5), 0x800); + BlendPalettes(0x00000001, 0x10, RGB_BLACK); + } + break; + case 3: + LoadPalette(gUnknown_826BF5C, 0x30, 0x20); + LZ77UnCompVram(gWirelessSignal4bpp, BG_CHAR_ADDR(1)); + LZ77UnCompVram(gUnknown_826C60C, BG_SCREEN_ADDR(18)); + sTradeData->bg2vofs = 0x50; + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG1_ON | DISPCNT_BG2_ON | DISPCNT_OBJ_ON); + break; + case 4: + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG2_ON | DISPCNT_OBJ_ON); + SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(3) | BGCNT_CHARBASE(1) | BGCNT_256COLOR | BGCNT_SCREENBASE(18) | BGCNT_AFF128x128); + sTradeData->unk_D4 = 0x40; + sTradeData->unk_D6 = 0x5C; + sTradeData->sXY = 0x20; + sTradeData->unk_EA = 0x400; + sTradeData->unk_EC = 0; + DmaCopyLarge16(3, gUnknown_826701C, (void *)BG_CHAR_ADDR(1), 0x2840, 0x1000); + if (sTradeData->isCableTrade) + { + DmaCopy16Defvars(3, gUnknown_826985C, (void *)BG_SCREEN_ADDR(18), 0x100); + } + else + { + DmaCopy16Defvars(3, gUnknown_826995C, (void *)BG_SCREEN_ADDR(18), 0x100); + } + break; + case 5: + sTradeData->bg1vofs = 0; + sTradeData->bg1hofs = 0; + break; + case 6: + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG2_ON | DISPCNT_OBJ_ON); + SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(3) | BGCNT_CHARBASE(1) | BGCNT_256COLOR | BGCNT_SCREENBASE(18) | BGCNT_TXT256x256); + sTradeData->unk_D4 = 0x40; + sTradeData->unk_D6 = 0x5C; + sTradeData->sXY = 0x100; + sTradeData->unk_EA = 0x80; + sTradeData->unk_DC = 0x78; + sTradeData->unk_DE = 0x50; + sTradeData->unk_EC = 0; + DmaCopyLarge16(3, gUnknown_826701C, BG_CHAR_ADDR(1), 0x2840, 0x1000); + if (sTradeData->isCableTrade) + { + DmaCopy16Defvars(3, gUnknown_826985C, (void *)BG_SCREEN_ADDR(18), 0x100); + } + else + { + DmaCopy16Defvars(3, gUnknown_826995C, (void *)BG_SCREEN_ADDR(18), 0x100); + } + break; + case 7: + sTradeData->bg2vofs = 0; + sTradeData->bg2hofs = 0; + SetGpuReg(REG_OFFSET_BLDCNT, 0); + SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(2) | BGCNT_CHARBASE(1) | BGCNT_SCREENBASE(18) | BGCNT_TXT512x256); + LoadPalette(gTradeGba2_Pal, 0x10, 0x60); + DmaCopyLarge16(3, gTradeGba_Gfx, (void *)BG_CHAR_ADDR(1), 0x1420, 0x1000); + DmaCopy16Defvars(3, gUnknown_826601C, (void *)BG_SCREEN_ADDR(18), 0x1000); + break; + } +} + +void sub_8050DE0(void) +{ + LoadSpriteSheet(&gUnknown_826CE2C); + LoadSpriteSheet(&gUnknown_826CE7C); + LoadSpriteSheet(&gUnknown_826CEB0); + LoadSpriteSheet(&gUnknown_826CF28); + LoadSpritePalette(&gUnknown_826CE34); + LoadSpritePalette(&gUnknown_826CE3C); +} + +void sub_8050E24(void) +{ + u8 nickname[20]; + u8 mpId; + const struct InGameTrade * inGameTrade; + if (sTradeData->isLinkTrade) + { + mpId = GetMultiplayerId(); + StringCopy(gStringVar1, gLinkPlayers[mpId ^ 1].name); + GetMonData(&gEnemyParty[gSelectedTradeMonPositions[1] % 6], MON_DATA_NICKNAME, nickname); + StringCopy10(gStringVar3, nickname); + GetMonData(&gPlayerParty[gSelectedTradeMonPositions[0]], MON_DATA_NICKNAME, nickname); + StringCopy10(gStringVar2, nickname); + } + else + { + inGameTrade = &gInGameTrades[gSpecialVar_0x8004]; + StringCopy(gStringVar1, inGameTrade->otName); + StringCopy10(gStringVar3, inGameTrade->nickname); + GetMonData(&gPlayerParty[gSpecialVar_0x8005], MON_DATA_NICKNAME, nickname); + StringCopy10(gStringVar2, nickname); + } +} + +bool8 sub_8050F14(void) +{ + if (sTradeData->isCableTrade) + return sub_8050F3C(); + else + return sub_805232C(); +} + +bool8 sub_8050F3C(void) +{ + u16 evoTarget; + + switch (sTradeData->state) + { + case 0: + gSprites[sTradeData->pokePicSpriteIdxs[0]].invisible = FALSE; + gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.x = -180; + gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.y = gMonFrontPicCoords[sTradeData->tradeSpecies[0]].y_offset; + sTradeData->state++; + sTradeData->cachedMapMusic = GetCurrentMapMusic(); + PlayNewMapMusic(MUS_SHINKA); + break; + case 1: + if (sTradeData->bg2hofs > 0) + { + gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.x += 3; + sTradeData->bg2hofs -= 3; + } + else + { + gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.x = 0; + sTradeData->bg2hofs = 0; + sTradeData->state = 10; + } + break; + case 10: + StringExpandPlaceholders(gStringVar4, gText_XWillBeSentToY); + DrawTextOnTradeWindow(0, gStringVar4, 0); + + if (sTradeData->tradeSpecies[0] != SPECIES_EGG) + { + PlayCry1(sTradeData->tradeSpecies[0], 0); + } + + sTradeData->state = 11; + sTradeData->timer = 0; + break; + case 11: + if (++sTradeData->timer == 80) + { + sTradeData->pokeballSpriteId = CreateTradePokeballSprite(sTradeData->pokePicSpriteIdxs[0], gSprites[sTradeData->pokePicSpriteIdxs[0]].oam.paletteNum, 120, 32, 2, 1, 0x14, 0xfffff); + sTradeData->state++; + StringExpandPlaceholders(gStringVar4, gText_ByeByeVar1); + DrawTextOnTradeWindow(0, gStringVar4, 0); + } + break; + case 12: + if (gSprites[sTradeData->pokeballSpriteId].callback == SpriteCallbackDummy) + { + sTradeData->unk_D3 = CreateSprite(&sTradePokeballSpriteTemplate, 120, 32, 0); + gSprites[sTradeData->unk_D3].callback = SpriteCB_TradePokeball_Outbound; + DestroySprite(&gSprites[sTradeData->pokeballSpriteId]); + sTradeData->state++; + } + break; + case 13: + // The game waits here for the sprite to finish its animation sequence. + break; + case 14: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + sTradeData->state = 20; + break; + case 20: + if (!gPaletteFade.active) + { + SetTradeSequenceBgGpuRegs(4); + FillWindowPixelBuffer(0, PIXEL_FILL(15)); + CopyWindowToVram(0, 3); + sTradeData->state++; + } + break; + case 21: + BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK); + sTradeData->state++; + break; + case 22: + if (!gPaletteFade.active) + { + sTradeData->state = 23; + } + break; + case 23: + if (sTradeData->unk_EA > 0x100) + { + sTradeData->unk_EA -= 0x34; + } + else + { + SetTradeSequenceBgGpuRegs(1); + sTradeData->unk_EA = 0x80; + sTradeData->state++; + sTradeData->timer = 0; + } + sTradeData->sXY = 0x8000 / sTradeData->unk_EA; + break; + case 24: + if (++sTradeData->timer > 20) + { + SetTradeBGAffine(); + sTradeData->unk_91 = CreateSprite(&gUnknown_826CF30, 120, 80, 0); + sTradeData->state++; + } + break; + case 25: + if (gSprites[sTradeData->unk_91].animEnded) + { + DestroySprite(&gSprites[sTradeData->unk_91]); + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_EFFECT_BLEND | + BLDCNT_TGT2_BG1 | + BLDCNT_TGT2_BG2); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(12, 4)); + sTradeData->state++; + } + break; + case 26: + if (--sTradeData->bg1vofs == 316) + { + sTradeData->state++; + } + if (sTradeData->bg1vofs == 328) + { + sTradeData->unk_92 = CreateSprite(&sGameLinkCableEndSpriteTemplate, 128, 65, 0); + } + break; + case 27: + sTradeData->unk_90 = CreateSprite(&gUnknown_826CE44, 128, 80, 3); + sTradeData->unk_91 = CreateSprite(&sGlowBallSpriteTemplate, 128, 80, 0); + StartSpriteAnim(&gSprites[sTradeData->unk_91], 1); + sTradeData->state++; + break; + case 28: + if ((sTradeData->bg1vofs -= 2) == 166) + { + sTradeData->state = 200; + } + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1 | + DISPCNT_OBJ_1D_MAP | + DISPCNT_BG1_ON | + DISPCNT_OBJ_ON); + break; + case 200: + gSprites[sTradeData->unk_90].pos1.y -= 2; + gSprites[sTradeData->unk_91].pos1.y -= 2; + if (gSprites[sTradeData->unk_90].pos1.y < -8) + { + sTradeData->state = 29; + } + break; + case 29: + BeginNormalPaletteFade(0xFFFFFFFF, -1, 0, 16, RGB_BLACK); + sTradeData->state = 30; + break; + case 30: + if (!gPaletteFade.active) + { + DestroySprite(&gSprites[sTradeData->unk_90]); + DestroySprite(&gSprites[sTradeData->unk_91]); + SetTradeSequenceBgGpuRegs(2); + sTradeData->state++; + } + break; + case 31: + BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK); + sTradeData->unk_90 = CreateSprite(&sGlowBallSpriteTemplate, 111, 170, 0); + sTradeData->unk_91 = CreateSprite(&sGlowBallSpriteTemplate, 129, -10, 0); + sTradeData->state++; + break; + case 32: + if (!gPaletteFade.active) + { + PlaySE(SE_TK_WARPOUT); + sTradeData->state++; + } + gSprites[sTradeData->unk_90].pos2.y -= 3; + gSprites[sTradeData->unk_91].pos2.y += 3; + break; + case 33: + gSprites[sTradeData->unk_90].pos2.y -= 3; + gSprites[sTradeData->unk_91].pos2.y += 3; + if (gSprites[sTradeData->unk_90].pos2.y <= -90) + { + gSprites[sTradeData->unk_90].data[1] = 1; + gSprites[sTradeData->unk_91].data[1] = 1; + sTradeData->state++; + } + break; + case 34: + BlendPalettes(0x1, 16, RGB_WHITEALPHA); + sTradeData->state++; + break; + case 35: + BlendPalettes(0x1, 0, RGB_WHITEALPHA); + sTradeData->state++; + break; + case 36: + BlendPalettes(0x1, 16, RGB_WHITEALPHA); + sTradeData->state++; + break; + case 37: + if (!IsPokeSpriteNotFlipped(sTradeData->tradeSpecies[0])) + { + gSprites[sTradeData->pokePicSpriteIdxs[0]].affineAnims = gUnknown_826CF88; + gSprites[sTradeData->pokePicSpriteIdxs[0]].oam.affineMode = 3; + CalcCenterToCornerVec(&gSprites[sTradeData->pokePicSpriteIdxs[0]], 0, 3, 3); + StartSpriteAffineAnim(&gSprites[sTradeData->pokePicSpriteIdxs[0]], 0); + } + else + { + StartSpriteAffineAnim(&gSprites[sTradeData->pokePicSpriteIdxs[0]], 0); + } + StartSpriteAffineAnim(&gSprites[sTradeData->pokePicSpriteIdxs[1]], 0); + gSprites[sTradeData->pokePicSpriteIdxs[0]].pos1.x = 60; + gSprites[sTradeData->pokePicSpriteIdxs[1]].pos1.x = 180; + gSprites[sTradeData->pokePicSpriteIdxs[0]].pos1.y = 192; + gSprites[sTradeData->pokePicSpriteIdxs[1]].pos1.y = -32; + gSprites[sTradeData->pokePicSpriteIdxs[0]].invisible = FALSE; + gSprites[sTradeData->pokePicSpriteIdxs[1]].invisible = FALSE; + sTradeData->state++; + break; + case 38: + gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.y -= 3; + gSprites[sTradeData->pokePicSpriteIdxs[1]].pos2.y += 3; + if (gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.y < -160 && gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.y >= -163) + { + PlaySE(SE_TK_WARPIN); + } + if (gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.y < -222) + { + gSprites[sTradeData->unk_90].data[1] = 0; + gSprites[sTradeData->unk_91].data[1] = 0; + sTradeData->state++; + gSprites[sTradeData->pokePicSpriteIdxs[0]].invisible = TRUE; + gSprites[sTradeData->pokePicSpriteIdxs[1]].invisible = TRUE; + BlendPalettes(0x1, 0, RGB_WHITEALPHA); + } + break; + case 39: + gSprites[sTradeData->unk_90].pos2.y -= 3; + gSprites[sTradeData->unk_91].pos2.y += 3; + if (gSprites[sTradeData->unk_90].pos2.y <= -222) + { + BeginNormalPaletteFade(0xFFFFFFFF, -1, 0, 16, RGB_BLACK); + sTradeData->state++; + DestroySprite(&gSprites[sTradeData->unk_90]); + DestroySprite(&gSprites[sTradeData->unk_91]); + } + break; + case 40: + if (!gPaletteFade.active) + { + sTradeData->state++; + SetTradeSequenceBgGpuRegs(1); + sTradeData->bg1vofs = 166; + sTradeData->unk_90 = CreateSprite(&gUnknown_826CE44, 128, -20, 3); + sTradeData->unk_91 = CreateSprite(&sGlowBallSpriteTemplate, 128, -20, 0); + StartSpriteAnim(&gSprites[sTradeData->unk_91], 1); + } + break; + case 41: + BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK); + sTradeData->state++; + break; + case 42: + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | + DISPCNT_OBJ_1D_MAP | + DISPCNT_BG1_ON | + DISPCNT_OBJ_ON); + if (!gPaletteFade.active) + { + sTradeData->state++; + } + break; + case 43: + gSprites[sTradeData->unk_90].pos2.y += 3; + gSprites[sTradeData->unk_91].pos2.y += 3; + if (gSprites[sTradeData->unk_90].pos2.y + gSprites[sTradeData->unk_90].pos1.y == 64) + { + sTradeData->state++; + } + break; + case 44: + if ((sTradeData->bg1vofs += 2) > 316) + { + sTradeData->bg1vofs = 316; + sTradeData->state++; + } + break; + case 45: + DestroySprite(&gSprites[sTradeData->unk_90]); + DestroySprite(&gSprites[sTradeData->unk_91]); + sTradeData->state++; + sTradeData->timer = 0; + break; + case 46: + if (++sTradeData->timer == 10) + { + sTradeData->state++; + } + break; + case 47: + if (++sTradeData->bg1vofs > 348) + { + sTradeData->bg1vofs = 348; + sTradeData->state++; + } + if (sTradeData->bg1vofs == 328 && sTradeData->isCableTrade) + { + sTradeData->unk_92 = CreateSprite(&sGameLinkCableEndSpriteTemplate, 128, 65, 0); + gSprites[sTradeData->unk_92].callback = SpriteCB_GameLinkCableEnd_Inbound; + } + break; + case 48: + sTradeData->unk_91 = CreateSprite(&gUnknown_826CF30, 120, 80, 0); + sTradeData->state = 50; + break; + case 50: + if (gSprites[sTradeData->unk_91].animEnded) + { + DestroySprite(&gSprites[sTradeData->unk_91]); + SetTradeSequenceBgGpuRegs(6); + sTradeData->state++; + PlaySE(SE_W028); + } + break; + case 51: + if (sTradeData->unk_EA < 0x400) + { + sTradeData->unk_EA += 0x34; + } + else + { + sTradeData->unk_EA = 0x400; + sTradeData->state++; + } + sTradeData->sXY = 0x8000 / sTradeData->unk_EA; + break; + case 52: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + sTradeData->state = 60; + break; + + case 60: + if (!gPaletteFade.active) + { + SetTradeSequenceBgGpuRegs(5); + SetTradeSequenceBgGpuRegs(7); + gPaletteFade.bufferTransferDisabled = TRUE; + sTradeData->state++; + } + break; + case 61: + gPaletteFade.bufferTransferDisabled = FALSE; + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); + sTradeData->state++; + break; + case 62: + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | + DISPCNT_OBJ_1D_MAP | + DISPCNT_BG2_ON | + DISPCNT_OBJ_ON); + if (!gPaletteFade.active) + { + sTradeData->state++; + } + break; + case 63: + sTradeData->unk_D3 = CreateSprite(&sTradePokeballSpriteTemplate, 120, -8, 0); + gSprites[sTradeData->unk_D3].data[3] = 74; + gSprites[sTradeData->unk_D3].callback = SpriteCB_TradePokeball_Inbound; + StartSpriteAnim(&gSprites[sTradeData->unk_D3], 1); + StartSpriteAffineAnim(&gSprites[sTradeData->unk_D3], 2); + BlendPalettes(1 << (16 + gSprites[sTradeData->unk_D3].oam.paletteNum), 16, RGB_WHITEALPHA); + sTradeData->state++; + sTradeData->timer = 0; + break; + case 64: + BeginNormalPaletteFade(1 << (16 + gSprites[sTradeData->unk_D3].oam.paletteNum), 1, 16, 0, RGB_WHITEALPHA); + sTradeData->state++; + break; + case 65: + if (gSprites[sTradeData->unk_D3].callback == SpriteCallbackDummy) + { + HandleLoadSpecialPokePic(&gMonFrontPicTable[sTradeData->tradeSpecies[1]], gMonSpritesGfxPtr->sprites[3], sTradeData->tradeSpecies[1], sTradeData->monPersonalities[1]); + sTradeData->state++; + } + break; + case 66: + gSprites[sTradeData->pokePicSpriteIdxs[1]].pos1.x = 120; + gSprites[sTradeData->pokePicSpriteIdxs[1]].pos1.y = gMonFrontPicCoords[sTradeData->tradeSpecies[1]].y_offset + 60; + gSprites[sTradeData->pokePicSpriteIdxs[1]].pos2.x = 0; + gSprites[sTradeData->pokePicSpriteIdxs[1]].pos2.y = 0; + StartSpriteAnim(&gSprites[sTradeData->pokePicSpriteIdxs[1]], 0); + CreatePokeballSpriteToReleaseMon(sTradeData->pokePicSpriteIdxs[1], gSprites[sTradeData->pokePicSpriteIdxs[1]].oam.paletteNum, 120, 84, 2, 1, 20, 0xFFFFF); + FreeSpriteOamMatrix(&gSprites[sTradeData->unk_D3]); + DestroySprite(&gSprites[sTradeData->unk_D3]); + sTradeData->state++; + break; + case 67: + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | + DISPCNT_OBJ_1D_MAP | + DISPCNT_BG0_ON | + DISPCNT_BG2_ON | + DISPCNT_OBJ_ON); + StringExpandPlaceholders(gStringVar4, gText_XSentOverY); + DrawTextOnTradeWindow(0, gStringVar4, 0); + sTradeData->state = 167; + sTradeData->timer = 0; + break; + // 167 and 267 are extra cases added in for animations + case 167: + if (++sTradeData->timer > 60) + { + if (sTradeData->tradeSpecies[1] != SPECIES_EGG) + { + PlayCry1(sTradeData->tradeSpecies[1], 0); + } + sTradeData->state = 267; + sTradeData->timer = 0; + } + break; + case 267: + if (IsCryFinished()) + { + sTradeData->state = 68; + } + break; + case 68: + if (++sTradeData->timer == 10) + { + PlayFanfare(MUS_FANFA5); + } + if (sTradeData->timer == 250) + { + sTradeData->state++; + StringExpandPlaceholders(gStringVar4, gText_TakeGoodCareOfX); + DrawTextOnTradeWindow(0, gStringVar4, 0); + sTradeData->timer = 0; + } + break; + case 69: + if (++sTradeData->timer == 60) + { + sTradeData->state++; + } + break; + case 70: + CheckPartnersMonForRibbons(); + sTradeData->state++; + break; + case 71: + if (sTradeData->isLinkTrade) + { + return TRUE; + } + else if (JOY_NEW(A_BUTTON)) + { + sTradeData->state++; + } + break; + case 72: // Only if in-game trade + TradeMons(gSpecialVar_0x8005, 0); + gCB2_AfterEvolution = CB2_RunTradeAnim_InGameTrade; + evoTarget = GetEvolutionTargetSpecies(&gPlayerParty[gSelectedTradeMonPositions[0]], TRUE, ITEM_NONE); + if (evoTarget != SPECIES_NONE) + { + TradeEvolutionScene(&gPlayerParty[gSelectedTradeMonPositions[0]], evoTarget, sTradeData->pokePicSpriteIdxs[1], gSelectedTradeMonPositions[0]); + } + sTradeData->state++; + break; + case 73: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + sTradeData->state++; + break; + case 74: + if (!gPaletteFade.active) + { + PlayNewMapMusic(sTradeData->cachedMapMusic); + if (sTradeData) + { + FreeAllWindowBuffers(); + Free(GetBgTilemapBuffer(3)); + Free(GetBgTilemapBuffer(1)); + Free(GetBgTilemapBuffer(0)); + FreeMonSpritesGfx(); + FREE_AND_SET_NULL(sTradeData); + } + SetMainCallback2(CB2_ReturnToField); + BufferInGameTradeMonName(); + HelpSystem_Enable(); + } + break; + } + return FALSE; +} + +bool8 sub_805232C(void) +{ + u16 evoTarget; + + switch (sTradeData->state) + { + case 0: + gSprites[sTradeData->pokePicSpriteIdxs[0]].invisible = FALSE; + gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.x = -180; + gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.y = gMonFrontPicCoords[sTradeData->tradeSpecies[0]].y_offset; + sTradeData->state++; + sTradeData->cachedMapMusic = GetCurrentMapMusic(); + PlayNewMapMusic(MUS_SHINKA); + break; + case 1: + if (sTradeData->bg2hofs > 0) + { + gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.x += 3; + sTradeData->bg2hofs -= 3; + } + else + { + gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.x = 0; + sTradeData->bg2hofs = 0; + sTradeData->state = 10; + } + break; + case 10: + StringExpandPlaceholders(gStringVar4, gText_XWillBeSentToY); + DrawTextOnTradeWindow(0, gStringVar4, 0); + + if (sTradeData->tradeSpecies[0] != SPECIES_EGG) + { + PlayCry1(sTradeData->tradeSpecies[0], 0); + } + + sTradeData->state = 11; + sTradeData->timer = 0; + break; + case 11: + if (++sTradeData->timer == 80) + { + sTradeData->pokeballSpriteId = CreateTradePokeballSprite(sTradeData->pokePicSpriteIdxs[0], gSprites[sTradeData->pokePicSpriteIdxs[0]].oam.paletteNum, 120, 32, 2, 1, 0x14, 0xfffff); + sTradeData->state++; + StringExpandPlaceholders(gStringVar4, gText_ByeByeVar1); + DrawTextOnTradeWindow(0, gStringVar4, 0); + } + break; + case 12: + if (gSprites[sTradeData->pokeballSpriteId].callback == SpriteCallbackDummy) + { + sTradeData->unk_D3 = CreateSprite(&sTradePokeballSpriteTemplate, 120, 32, 0); + gSprites[sTradeData->unk_D3].callback = SpriteCB_TradePokeball_Outbound; + DestroySprite(&gSprites[sTradeData->pokeballSpriteId]); + sTradeData->state++; + } + break; + case 13: + // The game waits here for the sprite to finish its animation sequence. + break; + case 14: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + sTradeData->state = 20; + break; + case 20: + if (!gPaletteFade.active) + { + SetTradeSequenceBgGpuRegs(4); + FillWindowPixelBuffer(0, PIXEL_FILL(15)); + CopyWindowToVram(0, 3); + sTradeData->state++; + } + break; + case 21: + BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK); + sTradeData->state++; + break; + case 22: + if (!gPaletteFade.active) + { + sTradeData->state = 23; + } + break; + case 23: + if (sTradeData->unk_EA > 0x100) + { + sTradeData->unk_EA -= 0x34; + } + else + { + SetTradeSequenceBgGpuRegs(1); + sTradeData->unk_EA = 0x80; + sTradeData->state = 124; + sTradeData->timer = 0; + } + sTradeData->sXY = 0x8000 / sTradeData->unk_EA; + break; + case 124: + if (++sTradeData->timer > 20) + { + SetTradeSequenceBgGpuRegs(3); + sTradeData->unk_91 = CreateSprite(&gUnknown_826CF48, 120, 80, 0); + sTradeData->state++; + } + break; + case 125: + if (gSprites[sTradeData->unk_91].animEnded) + { + DestroySprite(&gSprites[sTradeData->unk_91]); + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG1 | + BLDCNT_TGT1_OBJ | + BLDCNT_EFFECT_BLEND | + BLDCNT_TGT2_BG2); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16, 4)); + CreateTask(Task_AnimateWirelessSignal, 5); + sTradeData->state++; + } + break; + case 126: + if (!FuncIsActiveTask(Task_AnimateWirelessSignal)) + { + sTradeData->state = 26; + } + break; + case 26: + if (--sTradeData->bg1vofs == 316) + { + sTradeData->state++; + } + break; + case 27: + sTradeData->unk_90 = CreateSprite(&gUnknown_826CE44, 120, 80, 3); + gSprites[sTradeData->unk_90].callback = SpriteCB_TradeGlowWireless; + sTradeData->unk_91 = CreateSprite(&sGlowBallSpriteTemplate, 120, 80, 0); + StartSpriteAnim(&gSprites[sTradeData->unk_91], 1); + sTradeData->state++; + break; + case 28: + if ((sTradeData->bg1vofs -= 3) == 166) + { + sTradeData->state = 200; + } + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1 | + DISPCNT_OBJ_1D_MAP | + DISPCNT_BG1_ON | + DISPCNT_OBJ_ON); + break; + case 200: + gSprites[sTradeData->unk_90].pos1.y -= 2; + gSprites[sTradeData->unk_91].pos1.y -= 2; + if (gSprites[sTradeData->unk_90].pos1.y < -8) + { + sTradeData->state = 29; + } + break; + case 29: + BeginNormalPaletteFade(0xFFFFFFFF, -1, 0, 16, RGB_BLACK); + sTradeData->state = 30; + break; + case 30: + if (!gPaletteFade.active) + { + DestroySprite(&gSprites[sTradeData->unk_90]); + DestroySprite(&gSprites[sTradeData->unk_91]); + SetTradeSequenceBgGpuRegs(2); + sTradeData->state++; + } + break; + case 31: + BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK); + sTradeData->unk_90 = CreateSprite(&sGlowBallSpriteTemplate, 111, 170, 0); + sTradeData->unk_91 = CreateSprite(&sGlowBallSpriteTemplate, 129, -10, 0); + sTradeData->state++; + break; + case 32: + if (!gPaletteFade.active) + { + PlaySE(SE_TK_WARPOUT); + sTradeData->state++; + } + gSprites[sTradeData->unk_90].pos2.y -= 3; + gSprites[sTradeData->unk_91].pos2.y += 3; + break; + case 33: + gSprites[sTradeData->unk_90].pos2.y -= 3; + gSprites[sTradeData->unk_91].pos2.y += 3; + if (gSprites[sTradeData->unk_90].pos2.y <= -90) + { + gSprites[sTradeData->unk_90].data[1] = 1; + gSprites[sTradeData->unk_91].data[1] = 1; + sTradeData->state++; + CreateTask(c3_0805465C, 5); + } + break; + case 34: + BlendPalettes(0x8, 16, RGB_WHITEALPHA); + sTradeData->state++; + break; + case 35: + BlendPalettes(0x8, 16, RGB_WHITEALPHA); + sTradeData->state++; + break; + case 36: + BlendPalettes(0x8, 16, RGB_WHITEALPHA); + sTradeData->state++; + break; + case 37: + if (!IsPokeSpriteNotFlipped(sTradeData->tradeSpecies[0])) + { + gSprites[sTradeData->pokePicSpriteIdxs[0]].affineAnims = gUnknown_826CF88; + gSprites[sTradeData->pokePicSpriteIdxs[0]].oam.affineMode = 3; + CalcCenterToCornerVec(&gSprites[sTradeData->pokePicSpriteIdxs[0]], 0, 3, 3); + StartSpriteAffineAnim(&gSprites[sTradeData->pokePicSpriteIdxs[0]], 0); + } + else + { + StartSpriteAffineAnim(&gSprites[sTradeData->pokePicSpriteIdxs[0]], 0); + } + StartSpriteAffineAnim(&gSprites[sTradeData->pokePicSpriteIdxs[1]], 0); + gSprites[sTradeData->pokePicSpriteIdxs[0]].pos1.x = 40; + gSprites[sTradeData->pokePicSpriteIdxs[1]].pos1.x = 200; + gSprites[sTradeData->pokePicSpriteIdxs[0]].pos1.y = 192; + gSprites[sTradeData->pokePicSpriteIdxs[1]].pos1.y = -32; + gSprites[sTradeData->pokePicSpriteIdxs[0]].invisible = FALSE; + gSprites[sTradeData->pokePicSpriteIdxs[1]].invisible = FALSE; + sTradeData->state++; + break; + case 38: + gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.y -= 3; + gSprites[sTradeData->pokePicSpriteIdxs[1]].pos2.y += 3; + if (gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.y < -160 && gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.y >= -163) + { + PlaySE(SE_TK_WARPIN); + } + if (gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.y < -222) + { + gSprites[sTradeData->unk_90].data[1] = 0; + gSprites[sTradeData->unk_91].data[1] = 0; + sTradeData->state++; + gSprites[sTradeData->pokePicSpriteIdxs[0]].invisible = TRUE; + gSprites[sTradeData->pokePicSpriteIdxs[1]].invisible = TRUE; + CreateTask(sub_8054734, 5); + } + break; + case 39: + gSprites[sTradeData->unk_90].pos2.y -= 3; + gSprites[sTradeData->unk_91].pos2.y += 3; + if (gSprites[sTradeData->unk_90].pos2.y <= -222) + { + BeginNormalPaletteFade(0xFFFFFFFF, -1, 0, 16, RGB_BLACK); + sTradeData->state++; + DestroySprite(&gSprites[sTradeData->unk_90]); + DestroySprite(&gSprites[sTradeData->unk_91]); + } + break; + case 40: + if (!gPaletteFade.active) + { + sTradeData->state++; + SetTradeSequenceBgGpuRegs(1); + sTradeData->bg1vofs = 166; + SetTradeSequenceBgGpuRegs(3); + sTradeData->bg2vofs = 412; + sTradeData->unk_90 = CreateSprite(&gUnknown_826CE44, 120, -20, 3); + gSprites[sTradeData->unk_90].callback = SpriteCB_TradeGlowWireless; + sTradeData->unk_91 = CreateSprite(&sGlowBallSpriteTemplate, 120, -20, 0); + StartSpriteAnim(&gSprites[sTradeData->unk_91], 1); + } + break; + case 41: + BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK); + sTradeData->state++; + break; + case 42: + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | + DISPCNT_OBJ_1D_MAP | + DISPCNT_BG1_ON | + DISPCNT_OBJ_ON); + if (!gPaletteFade.active) + { + sTradeData->state++; + } + break; + case 43: + gSprites[sTradeData->unk_90].pos2.y += 4; + gSprites[sTradeData->unk_91].pos2.y += 4; + if (gSprites[sTradeData->unk_90].pos2.y + gSprites[sTradeData->unk_90].pos1.y == 64) + { + sTradeData->state = 144; + sTradeData->timer = 0; + } + break; + case 144: + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | + DISPCNT_OBJ_1D_MAP | + DISPCNT_BG1_ON | + DISPCNT_BG2_ON | + DISPCNT_OBJ_ON); + sTradeData->bg1vofs += 3; + sTradeData->bg2vofs += 3; + if (++sTradeData->timer == 10) + { + u8 taskId = CreateTask(Task_AnimateWirelessSignal, 5); + gTasks[taskId].data[2] = TRUE; + } + if (sTradeData->bg1vofs > 316) + { + sTradeData->bg1vofs = 316; + sTradeData->state++; + } + break; + case 145: + DestroySprite(&gSprites[sTradeData->unk_90]); + DestroySprite(&gSprites[sTradeData->unk_91]); + sTradeData->state++; + sTradeData->timer = 0; + break; + case 146: + if (!FuncIsActiveTask(Task_AnimateWirelessSignal)) + { + sTradeData->state = 46; + sTradeData->timer = 0; + } + break; + case 46: + if (++sTradeData->timer == 10) + { + sTradeData->state++; + } + break; + case 47: + if (++sTradeData->bg1vofs > 348) + { + sTradeData->bg1vofs = 348; + sTradeData->state++; + } + break; + case 48: + sTradeData->unk_91 = CreateSprite(&gUnknown_826CF30, 120, 80, 0); + sTradeData->state = 50; + break; + case 50: + if (gSprites[sTradeData->unk_91].animEnded) + { + DestroySprite(&gSprites[sTradeData->unk_91]); + SetTradeSequenceBgGpuRegs(6); + sTradeData->state++; + PlaySE(SE_W028); + } + break; + case 51: + if (sTradeData->unk_EA < 0x400) + { + sTradeData->unk_EA += 0x34; + } + else + { + sTradeData->unk_EA = 0x400; + sTradeData->state++; + } + sTradeData->sXY = 0x8000 / sTradeData->unk_EA; + break; + case 52: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + sTradeData->state = 60; + break; + + case 60: + if (!gPaletteFade.active) + { + SetTradeSequenceBgGpuRegs(5); + SetTradeSequenceBgGpuRegs(7); + gPaletteFade.bufferTransferDisabled = TRUE; + sTradeData->state++; + } + break; + case 61: + gPaletteFade.bufferTransferDisabled = FALSE; + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); + sTradeData->state++; + break; + case 62: + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | + DISPCNT_OBJ_1D_MAP | + DISPCNT_BG2_ON | + DISPCNT_OBJ_ON); + if (!gPaletteFade.active) + { + sTradeData->state++; + } + break; + case 63: + sTradeData->unk_D3 = CreateSprite(&sTradePokeballSpriteTemplate, 120, -8, 0); + gSprites[sTradeData->unk_D3].data[3] = 74; + gSprites[sTradeData->unk_D3].callback = SpriteCB_TradePokeball_Inbound; + StartSpriteAnim(&gSprites[sTradeData->unk_D3], 1); + StartSpriteAffineAnim(&gSprites[sTradeData->unk_D3], 2); + BlendPalettes(1 << (16 + gSprites[sTradeData->unk_D3].oam.paletteNum), 16, RGB_WHITEALPHA); + sTradeData->state++; + sTradeData->timer = 0; + break; + case 64: + BeginNormalPaletteFade(1 << (16 + gSprites[sTradeData->unk_D3].oam.paletteNum), 1, 16, 0, RGB_WHITEALPHA); + sTradeData->state++; + break; + case 65: + if (gSprites[sTradeData->unk_D3].callback == SpriteCallbackDummy) + { + HandleLoadSpecialPokePic(&gMonFrontPicTable[sTradeData->tradeSpecies[1]], gMonSpritesGfxPtr->sprites[3], sTradeData->tradeSpecies[1], sTradeData->monPersonalities[1]); + sTradeData->state++; + } + break; + case 66: + gSprites[sTradeData->pokePicSpriteIdxs[1]].pos1.x = 120; + gSprites[sTradeData->pokePicSpriteIdxs[1]].pos1.y = gMonFrontPicCoords[sTradeData->tradeSpecies[1]].y_offset + 60; + gSprites[sTradeData->pokePicSpriteIdxs[1]].pos2.x = 0; + gSprites[sTradeData->pokePicSpriteIdxs[1]].pos2.y = 0; + StartSpriteAnim(&gSprites[sTradeData->pokePicSpriteIdxs[1]], 0); + CreatePokeballSpriteToReleaseMon(sTradeData->pokePicSpriteIdxs[1], gSprites[sTradeData->pokePicSpriteIdxs[1]].oam.paletteNum, 120, 84, 2, 1, 20, 0xFFFFF); + FreeSpriteOamMatrix(&gSprites[sTradeData->unk_D3]); + DestroySprite(&gSprites[sTradeData->unk_D3]); + sTradeData->state++; + break; + case 67: + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | + DISPCNT_OBJ_1D_MAP | + DISPCNT_BG0_ON | + DISPCNT_BG2_ON | + DISPCNT_OBJ_ON); + StringExpandPlaceholders(gStringVar4, gText_XSentOverY); + DrawTextOnTradeWindow(0, gStringVar4, 0); + sTradeData->state = 167; + sTradeData->timer = 0; + break; + // 167 and 267 are extra cases added in for animations + case 167: + if (++sTradeData->timer > 60) + { + if (sTradeData->tradeSpecies[1] != SPECIES_EGG) + { + PlayCry1(sTradeData->tradeSpecies[1], 0); + } + sTradeData->state = 267; + sTradeData->timer = 0; + } + break; + case 267: + if (IsCryFinished()) + { + sTradeData->state = 68; + } + break; + case 68: + if (++sTradeData->timer == 10) + { + PlayFanfare(MUS_FANFA5); + } + if (sTradeData->timer == 250) + { + sTradeData->state++; + StringExpandPlaceholders(gStringVar4, gText_TakeGoodCareOfX); + DrawTextOnTradeWindow(0, gStringVar4, 0); + sTradeData->timer = 0; + } + break; + case 69: + if (++sTradeData->timer == 60) + { + sTradeData->state++; + } + break; + case 70: + CheckPartnersMonForRibbons(); + sTradeData->state++; + break; + case 71: + if (sTradeData->isLinkTrade) + { + return TRUE; + } + else if (JOY_NEW(A_BUTTON)) + { + sTradeData->state++; + } + break; + case 72: // Only if in-game trade + TradeMons(gSpecialVar_0x8005, 0); + gCB2_AfterEvolution = CB2_RunTradeAnim_InGameTrade; + evoTarget = GetEvolutionTargetSpecies(&gPlayerParty[gSelectedTradeMonPositions[0]], TRUE, ITEM_NONE); + if (evoTarget != SPECIES_NONE) + { + TradeEvolutionScene(&gPlayerParty[gSelectedTradeMonPositions[0]], evoTarget, sTradeData->pokePicSpriteIdxs[1], gSelectedTradeMonPositions[0]); + } + sTradeData->state++; + break; + case 73: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + sTradeData->state++; + break; + case 74: + if (!gPaletteFade.active) + { + PlayNewMapMusic(sTradeData->cachedMapMusic); + if (sTradeData) + { + FreeAllWindowBuffers(); + Free(GetBgTilemapBuffer(3)); + Free(GetBgTilemapBuffer(1)); + Free(GetBgTilemapBuffer(0)); + FreeMonSpritesGfx(); + FREE_AND_SET_NULL(sTradeData); + } + SetMainCallback2(CB2_ReturnToField); + BufferInGameTradeMonName(); + HelpSystem_Enable(); + } + break; + } + return FALSE; +} + +void sub_8053788(void) +{ + u16 evoSpecies; + switch (gMain.state) + { + case 0: + gMain.state = 4; + gSoftResetDisabled = TRUE; + break; + case 4: + gCB2_AfterEvolution = sub_8053E8C; + evoSpecies = GetEvolutionTargetSpecies(&gPlayerParty[gSelectedTradeMonPositions[0]], 1, 0); + if (evoSpecies != SPECIES_NONE) + TradeEvolutionScene(&gPlayerParty[gSelectedTradeMonPositions[0]], evoSpecies, sTradeData->pokePicSpriteIdxs[1], gSelectedTradeMonPositions[0]); + else + SetMainCallback2(sub_8053E8C); + gSelectedTradeMonPositions[0] = 0xFF; + break; + } + if (!HasLinkErrorOccurred()) + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +void sub_805383C(void) +{ + u8 recvStatus; + sub_804FFC4(); + recvStatus = GetBlockReceivedStatus(); + if (recvStatus & (1 << 0)) + { + if (gBlockRecvBuffer[0][0] == 0xDCBA) + SetMainCallback2(sub_8053788); + if (gBlockRecvBuffer[0][0] == 0xABCD) + sTradeData->unk_72 = 1; + ResetBlockReceivedFlag(0); + } + if (recvStatus & (1 << 1)) + { + if (gBlockRecvBuffer[1][0] == 0xABCD) + sTradeData->unk_73 = 1; + ResetBlockReceivedFlag(1); + } +} + +void SpriteCB_TradePokeball_Default(struct Sprite * sprite) +{ + sprite->pos1.y += sprite->data[0] / 10; + sprite->data[5] += sprite->data[1]; + sprite->pos1.x = sprite->data[5] / 10; + if (sprite->pos1.y > 76) + { + sprite->pos1.y = 76; + sprite->data[0] = -(sprite->data[0] * sprite->data[2]) / 100; + sprite->data[3]++; + } + if (sprite->pos1.x == 120) + sprite->data[1] = 0; + sprite->data[0] += sprite->data[4]; + if (sprite->data[3] == 4) + { + sprite->data[7] = 1; + sprite->callback = SpriteCallbackDummy; + } +} + +void SpriteCB_TradePokeball_Outbound(struct Sprite * sprite) +{ + sprite->pos2.y += gUnknown_826D1E4[sprite->data[0]]; + if (sprite->data[0] == 22) + PlaySE(SE_KON); + sprite->data[0]++; + if (sprite->data[0] == 44) + { + PlaySE(SE_W025); + sprite->callback = SpriteCB_TradePokeball_Outbound2; + sprite->data[0] = 0; + BeginNormalPaletteFade(1 << (sprite->oam.paletteNum + 16), -1, 0, 16, RGB_WHITEALPHA); + } +} + +void SpriteCB_TradePokeball_Outbound2(struct Sprite * sprite) +{ + if (sprite->data[1] == 20) + StartSpriteAffineAnim(sprite, 1); + sprite->data[1]++; + if (sprite->data[1] > 20) + { + sprite->pos2.y -= gUnknown_826D1E4[sprite->data[0]]; + sprite->data[0]++; + if (sprite->data[0] == 23) + { + DestroySprite(sprite); + sTradeData->state = 14; + } + } +} + +void SpriteCB_TradePokeball_Inbound(struct Sprite * sprite) +{ + if (sprite->data[2] == 0) + { + sprite->pos1.y += 4; + if (sprite->pos1.y > sprite->data[3]) + { + sprite->data[2]++; + sprite->data[0] = 22; + PlaySE(SE_KON); + } + } + else + { + if (sprite->data[0] == 66) + PlaySE(SE_KON2); + if (sprite->data[0] == 92) + PlaySE(SE_KON3); + if (sprite->data[0] == 107) + PlaySE(SE_KON4); + sprite->pos2.y += gUnknown_826D1E4[sprite->data[0]]; + sprite->data[0]++; + if (sprite->data[0] == 108) + sprite->callback = SpriteCallbackDummy; + } +} + +u16 GetInGameTradeSpeciesInfo(void) +{ + // Populates gStringVar1 with the name of the requested species and + // gStringVar2 with the name of the offered species. + // Returns the requested species. + const struct InGameTrade * inGameTrade = &gInGameTrades[gSpecialVar_0x8004]; + StringCopy(gStringVar1, gSpeciesNames[inGameTrade->requestedSpecies]); + StringCopy(gStringVar2, gSpeciesNames[inGameTrade->species]); + return inGameTrade->requestedSpecies; +} + +void BufferInGameTradeMonName(void) +{ + // Populates gStringVar1 with the nickname of the sent Pokemon and + // gStringVar2 with the name of the offered species. + u8 nickname[30]; + const struct InGameTrade * inGameTrade = &gInGameTrades[gSpecialVar_0x8004]; + GetMonData(&gPlayerParty[gSpecialVar_0x8005], MON_DATA_NICKNAME, nickname); + StringCopy10(gStringVar1, nickname); + StringCopy(gStringVar2, gSpeciesNames[inGameTrade->species]); +} + +void CreateInGameTradePokemonInternal(u8 playerSlot, u8 inGameTradeIdx) +{ + const struct InGameTrade *inGameTrade = &gInGameTrades[inGameTradeIdx]; + u8 level = GetMonData(&gPlayerParty[playerSlot], MON_DATA_LEVEL); + struct MailStruct mail; + u8 metLocation = MAPSEC_IN_GAME_TRADE; + struct Pokemon * tradeMon = &gEnemyParty[0]; + u8 mailNum; + CreateMon(tradeMon, inGameTrade->species, level, 32, TRUE, inGameTrade->personality, TRUE, inGameTrade->otId); + SetMonData(tradeMon, MON_DATA_HP_IV, &inGameTrade->ivs[0]); + SetMonData(tradeMon, MON_DATA_ATK_IV, &inGameTrade->ivs[1]); + SetMonData(tradeMon, MON_DATA_DEF_IV, &inGameTrade->ivs[2]); + SetMonData(tradeMon, MON_DATA_SPEED_IV, &inGameTrade->ivs[3]); + SetMonData(tradeMon, MON_DATA_SPATK_IV, &inGameTrade->ivs[4]); + SetMonData(tradeMon, MON_DATA_SPDEF_IV, &inGameTrade->ivs[5]); + SetMonData(tradeMon, MON_DATA_NICKNAME, inGameTrade->nickname); + SetMonData(tradeMon, MON_DATA_OT_NAME, inGameTrade->otName); + SetMonData(tradeMon, MON_DATA_OT_GENDER, &inGameTrade->otGender); + SetMonData(tradeMon, MON_DATA_ABILITY_NUM, &inGameTrade->abilityNum); + SetMonData(tradeMon, MON_DATA_BEAUTY, &inGameTrade->conditions[1]); + SetMonData(tradeMon, MON_DATA_CUTE, &inGameTrade->conditions[2]); + SetMonData(tradeMon, MON_DATA_COOL, &inGameTrade->conditions[0]); + SetMonData(tradeMon, MON_DATA_SMART, &inGameTrade->conditions[3]); + SetMonData(tradeMon, MON_DATA_TOUGH, &inGameTrade->conditions[4]); + SetMonData(tradeMon, MON_DATA_SHEEN, &inGameTrade->sheen); + SetMonData(tradeMon, MON_DATA_MET_LOCATION, &metLocation); + mailNum = 0; + if (inGameTrade->heldItem != ITEM_NONE) + { + if (ItemIsMail(inGameTrade->heldItem)) + { + GetInGameTradeMail(&mail, inGameTrade); + gLinkPartnerMail[0] = mail; + SetMonData(tradeMon, MON_DATA_MAIL, &mailNum); + SetMonData(tradeMon, MON_DATA_HELD_ITEM, &inGameTrade->heldItem); + } + else + { + SetMonData(tradeMon, MON_DATA_HELD_ITEM, &inGameTrade->heldItem); + } + } + CalculateMonStats(&gEnemyParty[0]); +} + +static void GetInGameTradeMail(struct MailStruct * mail, const struct InGameTrade * inGameTrade) +{ + int i; + for (i = 0; i < 9; i++) + mail->words[i] = sInGameTradeMailMessages[inGameTrade->mailNum][i]; + StringCopy(mail->playerName, inGameTrade->otName); + mail->trainerId[0] = inGameTrade->otId >> 24; + mail->trainerId[1] = inGameTrade->otId >> 16; + mail->trainerId[2] = inGameTrade->otId >> 8; + mail->trainerId[3] = inGameTrade->otId; + mail->species = inGameTrade->species; + mail->itemId = inGameTrade->heldItem; +} + +u16 GetTradeSpecies(void) +{ + if (GetMonData(&gPlayerParty[gSpecialVar_0x8005], MON_DATA_IS_EGG)) + return SPECIES_NONE; + else + return GetMonData(&gPlayerParty[gSpecialVar_0x8005], MON_DATA_SPECIES); +} + +void CreateInGameTradePokemon(void) +{ + CreateInGameTradePokemonInternal(gSpecialVar_0x8005, gSpecialVar_0x8004); +} + +void CB2_RunTradeAnim_LinkTrade(void) +{ + if (sub_8050F14() == TRUE) + { + DestroySprite(&gSprites[sTradeData->pokePicSpriteIdxs[0]]); + FreeSpriteOamMatrix(&gSprites[sTradeData->pokePicSpriteIdxs[1]]); + TradeMons(gSelectedTradeMonPositions[0], gSelectedTradeMonPositions[1] % 6); + sTradeData->linkData[0] = 0xABCD; + sTradeData->unk_93 = 1; + SetMainCallback2(sub_8053E1C); + } + sub_80508F4(); + sub_805383C(); + RunTasks(); + RunTextPrinters(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +void sub_8053E1C(void) +{ + u8 mpId = sub_804FFC4(); + sub_805383C(); + if (mpId == 0 && sTradeData->unk_72 == 1 && sTradeData->unk_73 == 1) + { + sTradeData->linkData[0] = 0xDCBA; + SendBlock(bitmask_all_link_players_but_self(), sTradeData->linkData, 20); + sTradeData->unk_72 = 2; + sTradeData->unk_73 = 2; + } + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +void sub_8053E8C(void) +{ + switch (gMain.state) + { + case 0: + gMain.state++; + StringExpandPlaceholders(gStringVar4, gUnknown_841E325); + DrawTextOnTradeWindow(0, gStringVar4, 0); + break; + case 1: + sub_800AB9C(); + gMain.state = 100; + sTradeData->timer = 0; + break; + case 100: + if (++sTradeData->timer > 180) + { + gMain.state = 101; + sTradeData->timer = 0; + } + if (IsLinkTaskFinished()) + { + gMain.state = 2; + } + break; + case 101: + if (IsLinkTaskFinished()) + { + gMain.state = 2; + } + break; + case 2: + gMain.state = 50; + StringExpandPlaceholders(gStringVar4, gText_SavingDontTurnOffThePower2); + DrawTextOnTradeWindow(0, gStringVar4, 0); + break; + case 50: + if (InUnionRoom()) + { + sub_8113550(18, sTradeData->monSpecies); + } + else + { + sub_8113550(12, sTradeData->monSpecies); + IncrementGameStat(GAME_STAT_POKEMON_TRADES); + } + if (gWirelessCommType) + { + sub_8144714(2, gLinkPlayers[GetMultiplayerId() ^ 1].trainerId); + } + SetContinueGameWarpStatusToDynamicWarp(); + sub_80DA3AC(); + gMain.state++; + sTradeData->timer = 0; + break; + case 51: + if (++sTradeData->timer == 5) + { + gMain.state++; + } + break; + case 52: + if (sub_80DA3D8()) + { + ClearContinueGameWarpStatus2(); + gMain.state = 4; + } + else + { + sTradeData->timer = 0; + gMain.state = 51; + } + break; + case 4: + sub_80DA40C(); + gMain.state = 40; + sTradeData->timer = 0; + break; + case 40: + if (++sTradeData->timer > 50) + { + if (GetMultiplayerId() == 0) + { + sTradeData->timer = Random() % 30; + } + else + { + sTradeData->timer = 0; + } + gMain.state = 41; + } + break; + case 41: + if (sTradeData->timer == 0) + { + sub_800AB9C(); + gMain.state = 42; + } + else + { + sTradeData->timer--; + } + break; + case 42: + if (IsLinkTaskFinished()) + { + sub_80DA434(); + gMain.state = 5; + } + break; + case 5: + if (++sTradeData->timer > 60) + { + gMain.state++; + sub_800AB9C(); + } + break; + case 6: + if (IsLinkTaskFinished()) + { + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + gMain.state ++; + } + break; + case 7: + if (!gPaletteFade.active) + { + FadeOutBGM(3); + gMain.state++; + } + break; + case 8: + if (IsBGMStopped() == TRUE) + { + if (gWirelessCommType && gMain.savedCallback == sub_804C718) + { + sub_800AB9C(); + } + else + { + sub_800AAC0(); + } + gMain.state++; + } + break; + case 9: + if (gWirelessCommType && gMain.savedCallback == sub_804C718) + { + if (IsLinkRfuTaskFinished()) + { + gSoftResetDisabled = FALSE; + SetMainCallback2(sub_80543C4); + } + } + else if (!gReceivedRemoteLinkPlayers) + { + gSoftResetDisabled = FALSE; + SetMainCallback2(sub_80543C4); + } + break; + } + if (!HasLinkErrorOccurred()) + { + RunTasks(); + } + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +void sub_80543C4(void) +{ + if (!gPaletteFade.active) + { + FreeAllWindowBuffers(); + Free(GetBgTilemapBuffer(3)); + Free(GetBgTilemapBuffer(1)); + Free(GetBgTilemapBuffer(0)); + FreeMonSpritesGfx(); + FREE_AND_SET_NULL(sTradeData); + if (gWirelessCommType != 0) + DestroyWirelessStatusIndicatorSprite(); + SetMainCallback2(gMain.savedCallback); + } + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +void DoInGameTradeScene(void) +{ + ScriptContext2_Enable(); + CreateTask(sub_8054470, 10); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + HelpSystem_Disable(); +} + +void sub_8054470(u8 taskId) +{ + if (!gPaletteFade.active) + { + SetMainCallback2(CB2_InitTradeAnim_InGameTrade); + gFieldCallback = FieldCallback_ReturnToEventScript2; + DestroyTask(taskId); + } +} + +void CheckPartnersMonForRibbons(void) +{ + u8 nRibbons = 0; + u8 i; + for (i = 0; i < 12; i++) + { + nRibbons += GetMonData(&gEnemyParty[gSelectedTradeMonPositions[1] % 6], MON_DATA_CHAMPION_RIBBON + i); + } + if (nRibbons != 0) + FlagSet(FLAG_SYS_RIBBON_GET); +} + +void sub_80544FC(void) +{ + TradeAnimInit_LoadGfx(); +} + +void DrawTextOnTradeWindow(u8 windowId, const u8 *str, s8 speed) +{ + FillWindowPixelBuffer(windowId, PIXEL_FILL(15)); + sTradeData->textColor[0] = 15; + sTradeData->textColor[1] = 1; + sTradeData->textColor[2] = 6; + AddTextPrinterParameterized4(windowId, 2, 0, 2, 0, 2, sTradeData->textColor, speed, str); + CopyWindowToVram(windowId, 3); +} + +void Task_AnimateWirelessSignal(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + u16 r2 = 16 * gUnknown_826D250[data[0]][0]; + if (data[2] == 0) + { + if (r2 == 0x100) + LoadPalette(gUnknown_826BF5C, 0x30, 0x20); + else + LoadPalette(&gUnknown_826BB5C[r2], 0x30, 0x20); + } + else + { + if (r2 == 0x100) + LoadPalette(gUnknown_826BF5C, 0x30, 0x20); + else + LoadPalette(&gUnknown_826BD5C[r2], 0x30, 0x20); + } + if (gUnknown_826D250[data[0]][0] == 0 && data[1] == 0) + PlaySE(SE_W215); + if (data[1] == gUnknown_826D250[data[0]][1]) + { + data[0]++; + data[1] = 0; + if (gUnknown_826D250[data[0]][1] == 0xFF) + DestroyTask(taskId); + } + else + data[1]++; +} + +void c3_0805465C(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + + if (data[0] == 0) + { + sTradeData->win0left = sTradeData->win0right = 120; + sTradeData->win0top = 0; + sTradeData->win0bottom = 160; + SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); + SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_OBJ); + SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG0 | + WININ_WIN0_BG1 | + WININ_WIN0_OBJ); + } + + SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE2(sTradeData->win0left, sTradeData->win0right)); + SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE2(sTradeData->win0top, sTradeData->win0bottom)); + + data[0]++; + sTradeData->win0left -= 5; + sTradeData->win0right += 5; + + if (sTradeData->win0left < 80) + { + DestroyTask(taskId); + } +} + +void sub_8054734(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + + if (data[0] == 0) + { + sTradeData->win0left = 80; + sTradeData->win0right = 160; + SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_OBJ); + SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG0 | + WININ_WIN0_BG1 | + WININ_WIN0_OBJ); + } + + SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE2(sTradeData->win0left, sTradeData->win0right)); + SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE2(sTradeData->win0top, sTradeData->win0bottom)); + + if (sTradeData->win0left != 120) + { + data[0]++; + sTradeData->win0left += 5; + sTradeData->win0right -= 5; + + if (sTradeData->win0left >= 116) + BlendPalettes(0x8, 0, RGB_WHITEALPHA); + } + else + { + ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); + DestroyTask(taskId); + } +} diff --git a/sym_ewram.txt b/sym_ewram.txt index 67c1e4de8..d4c25d15f 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -31,6 +31,8 @@ .align 2 .include "src/trade.o" .align 2 + .include "src/trade_scene.o" + .align 2 .include "src/new_game.o" .align 2 -- cgit v1.2.3 From 6c209e32a8d4d5cc8851deef700011fbb04dcba4 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 30 Oct 2019 14:23:33 -0400 Subject: trade.c static symbols --- src/trade.c | 260 ++++++++++++++++++++++++++++++------------------------------ 1 file changed, 130 insertions(+), 130 deletions(-) diff --git a/src/trade.c b/src/trade.c index 728258a50..f23ff5400 100644 --- a/src/trade.c +++ b/src/trade.c @@ -105,41 +105,41 @@ enum TradeStatusMsg IWRAM_DATA vu16 gUnknown_3000E78; -EWRAM_DATA u8 *gUnknown_2031C90 = NULL; -EWRAM_DATA u8 *gUnknown_2031C94[14] = {}; +static EWRAM_DATA u8 *gUnknown_2031C90 = NULL; +static EWRAM_DATA u8 *gUnknown_2031C94[14] = {}; EWRAM_DATA struct MailStruct gLinkPartnerMail[6] = {}; EWRAM_DATA u8 gSelectedTradeMonPositions[2] = {0}; -EWRAM_DATA struct TradeMenuResources * sTradeMenuResourcesPtr = NULL; - -void sub_804C728(void); -void sub_804D4F8(void); -void sub_804D638(void); -void sub_804D694(u8 state); -void sub_804D764(void); -u8 shedinja_maker_maybe(void); -void sub_804DFF0(void); +static EWRAM_DATA struct TradeMenuResources * sTradeMenuResourcesPtr = NULL; + +static void sub_804C728(void); +static void sub_804D4F8(void); +static void sub_804D638(void); +static void sub_804D694(u8 state); +static void sub_804D764(void); +static u8 shedinja_maker_maybe(void); +static void sub_804DFF0(void); static void RunTradeMenuCallback(void); -void sub_804EAAC(u8 a0); -void sub_804EAE4(u8 side); -u8 sub_804EE6C(u8 *str, u8 whichParty, u8 partyIdx); -void sub_804EED4(u8 *str, u8 whichParty, u8 partyIdx); -void sub_804F020(u8 side); -void sub_804F08C(u8 a0, u8 partyIdx, u8 a2, u8 a3, u8 a4, u8 a5); -void sub_804F284(u8 side); -void sub_804F3B4(void); -void sub_804F3C8(u8 a0); -void TradeMenuAction_Summary(u8 taskId); -void TradeMenuAction_Trade(u8 taskId); -void sub_804F488(u16 a0, u8 a1); +static void sub_804EAAC(u8 a0); +static void sub_804EAE4(u8 side); +static u8 sub_804EE6C(u8 *str, u8 whichParty, u8 partyIdx); +static void sub_804EED4(u8 *str, u8 whichParty, u8 partyIdx); +static void sub_804F020(u8 side); +static void sub_804F08C(u8 a0, u8 partyIdx, u8 a2, u8 a3, u8 a4, u8 a5); +static void sub_804F284(u8 side); +static void sub_804F3B4(void); +static void sub_804F3C8(u8 a0); +static void TradeMenuAction_Summary(u8 taskId); +static void TradeMenuAction_Trade(u8 taskId); +static void sub_804F488(u16 a0, u8 a1); static void sub_804F4DC(void); -void PrintTradeErrorOrStatusMessage(u8 str_idx); -bool8 sub_804F610(void); -void sub_804F728(const u8 *name, u8 *a1, u8 unused); -void sub_804F748(u8 side); -void sub_804F890(u8 side); -void sub_804F964(void); -void sub_804F9D8(void); -u32 sub_804FA14(struct Pokemon * party, int partyCount, int cursorPos); +static void PrintTradeErrorOrStatusMessage(u8 str_idx); +static bool8 sub_804F610(void); +static void sub_804F728(const u8 *name, u8 *a1, u8 unused); +static void sub_804F748(u8 side); +static void sub_804F890(u8 side); +static void sub_804F964(void); +static void sub_804F9D8(void); +static u32 sub_804FA14(struct Pokemon * party, int partyCount, int cursorPos); static const size_t gUnknown_8260814[] = { sizeof(struct SaveBlock2), @@ -152,81 +152,81 @@ static const size_t gUnknown_8260814[] = { 0x528 // unk }; -const u16 gTradeMovesBoxTilemap[] = INCBIN_U16("data/trade/unk_8260834.bin"); -const u16 gTradePartyBoxTilemap[] = INCBIN_U16("data/trade/unk_8260A32.bin"); -const u16 gUnknown_8260C30[] = INCBIN_U16("data/trade/unk_8260C30.bin"); -const u16 gUnknown_8261430[] = INCBIN_U16("data/trade/unk_8261430.bin"); +static const u16 gTradeMovesBoxTilemap[] = INCBIN_U16("data/trade/unk_8260834.bin"); +static const u16 gTradePartyBoxTilemap[] = INCBIN_U16("data/trade/unk_8260A32.bin"); +static const u16 gUnknown_8260C30[] = INCBIN_U16("data/trade/unk_8260C30.bin"); +static const u16 gUnknown_8261430[] = INCBIN_U16("data/trade/unk_8261430.bin"); -const struct OamData gOamData_8261C30 = { +static const struct OamData gOamData_8261C30 = { .shape = SPRITE_SHAPE(32x16), .size = SPRITE_SIZE(32x16), .priority = 1 }; -const struct OamData gOamData_8261C38 = { +static const struct OamData gOamData_8261C38 = { .shape = SPRITE_SHAPE(64x32), .size = SPRITE_SIZE(64x32), .priority = 1 }; -const union AnimCmd gSpriteAnim_8261C40[] = { +static const union AnimCmd gSpriteAnim_8261C40[] = { ANIMCMD_FRAME(0x00, 5), ANIMCMD_END }; -const union AnimCmd gSpriteAnim_8261C48[] = { +static const union AnimCmd gSpriteAnim_8261C48[] = { ANIMCMD_FRAME(0x20, 5), ANIMCMD_END }; -const union AnimCmd *const gSpriteAnimTable_8261C50[] = { +static const union AnimCmd *const gSpriteAnimTable_8261C50[] = { gSpriteAnim_8261C40, gSpriteAnim_8261C48 }; -const struct SpriteSheet gUnknown_8261C58 = { +static const struct SpriteSheet gUnknown_8261C58 = { gUnknown_8E9E1DC, 0x800, 300 }; -const struct SpritePalette gUnknown_8261C60 = { +static const struct SpritePalette gUnknown_8261C60 = { gUnknown_8E9CF3C, 2345 }; -const union AnimCmd gSpriteAnim_8261C68[] = { +static const union AnimCmd gSpriteAnim_8261C68[] = { ANIMCMD_FRAME(0x00, 5), ANIMCMD_END }; -const union AnimCmd gSpriteAnim_8261C70[] = { +static const union AnimCmd gSpriteAnim_8261C70[] = { ANIMCMD_FRAME(0x08, 5), ANIMCMD_END }; -const union AnimCmd gSpriteAnim_8261C78[] = { +static const union AnimCmd gSpriteAnim_8261C78[] = { ANIMCMD_FRAME(0x10, 5), ANIMCMD_END }; -const union AnimCmd gSpriteAnim_8261C80[] = { +static const union AnimCmd gSpriteAnim_8261C80[] = { ANIMCMD_FRAME(0x18, 5), ANIMCMD_END }; -const union AnimCmd gSpriteAnim_8261C88[] = { +static const union AnimCmd gSpriteAnim_8261C88[] = { ANIMCMD_FRAME(0x20, 5), ANIMCMD_END }; -const union AnimCmd gSpriteAnim_8261C90[] = { +static const union AnimCmd gSpriteAnim_8261C90[] = { ANIMCMD_FRAME(0x28, 5), ANIMCMD_END }; -const union AnimCmd *const gSpriteAnimTable_8261C98[] = { +static const union AnimCmd *const gSpriteAnimTable_8261C98[] = { gSpriteAnim_8261C68, gSpriteAnim_8261C70, gSpriteAnim_8261C78, @@ -235,7 +235,7 @@ const union AnimCmd *const gSpriteAnimTable_8261C98[] = { gSpriteAnim_8261C90 }; -const struct SpriteTemplate gUnknown_8261CB0 = { +static const struct SpriteTemplate gUnknown_8261CB0 = { .tileTag = 300, .paletteTag = 2345, .oam = &gOamData_8261C38, @@ -244,7 +244,7 @@ const struct SpriteTemplate gUnknown_8261CB0 = { .callback = SpriteCallbackDummy }; -const struct SpriteTemplate gUnknown_8261CC8 = { +static const struct SpriteTemplate gUnknown_8261CC8 = { .tileTag = 200, .paletteTag = 4925, .oam = &gOamData_8261C30, @@ -253,9 +253,9 @@ const struct SpriteTemplate gUnknown_8261CC8 = { .callback = SpriteCallbackDummy }; -const u16 gUnknown_8261CE0[] = INCBIN_U16("data/trade/unk_8261CE0.gbapal"); +static const u16 gUnknown_8261CE0[] = INCBIN_U16("data/trade/unk_8261CE0.gbapal"); -const struct SpritePalette gUnknown_8261D00 = { +static const struct SpritePalette gUnknown_8261D00 = { gUnknown_8261CE0, 4925 }; @@ -265,7 +265,7 @@ const struct SpritePalette gUnknown_8261D00 = { #define DIR_LEFT 2 #define DIR_RIGHT 3 -const u8 sCursorMoveDestinations[][4][6] = { +static const u8 sCursorMoveDestinations[][4][6] = { // Player's party [0] = { [DIR_UP] = { 4, 2, 12, 12, 0, 0}, @@ -349,7 +349,7 @@ const u8 sCursorMoveDestinations[][4][6] = { } }; -const u8 gTradeMonSpriteCoords[][2] = { +static const u8 gTradeMonSpriteCoords[][2] = { {0x01, 0x05}, {0x08, 0x05}, {0x01, 0x0a}, @@ -367,7 +367,7 @@ const u8 gTradeMonSpriteCoords[][2] = { {0x17, 0x12}, }; -const u8 gUnknown_8261E5A[][2][6][2] = { +static const u8 gUnknown_8261E5A[][2][6][2] = { { { {0x05, 0x04}, @@ -403,12 +403,12 @@ const u8 gUnknown_8261E5A[][2][6][2] = { } }; -const u8 gTradeUnknownSpriteCoords[][4] = { +static const u8 gTradeUnknownSpriteCoords[][4] = { {0x3c, 0x09, 0xb4, 0x09}, {0x30, 0x09, 0xa8, 0x09} }; -const u8 gUnknown_8261E92[] = { +static const u8 gUnknown_8261E92[] = { 0x00, 0x0e, 0x0f, 0x1d, 0x03, 0x05, 0x03, 0x07, 0x12, 0x05, 0x12, 0x07, @@ -429,7 +429,7 @@ const u8 gUnknown_8261EC6[] = _(""); const u8 gUnknown_8261EC7[] = _("\n"); const u8 gUnknown_8261EC9[] = _("/"); -const u8 *const gUnknown_8261ECC[] = { +static const u8 *const gUnknown_8261ECC[] = { gUnknown_841E0B9, gUnknown_841E0C0, gUnknown_841E0D2, @@ -438,12 +438,12 @@ const u8 *const gUnknown_8261ECC[] = { gUnknown_841E0EE }; -const struct MenuAction gUnknown_8261EE4[] = { +static const struct MenuAction gUnknown_8261EE4[] = { {gUnknown_841E10A, { .void_u8 = TradeMenuAction_Summary }}, {gUnknown_841E112, { .void_u8 = TradeMenuAction_Trade }} }; -const u8 *const sTradeErrorOrStatusMessagePtrs[] = { +static const u8 *const sTradeErrorOrStatusMessagePtrs[] = { gUnknown_841E118, // Communication standby gUnknown_841E145, // The trade has been canceled. gUnknown_841E16B, // That's your only POKéMON for battle @@ -455,9 +455,9 @@ const u8 *const sTradeErrorOrStatusMessagePtrs[] = { gUnknown_84170FC // The other TRAINER's POKéMON can't be traded now }; -const u8 gUnknown_8261F18[] = { 0, 1, 2 }; +static const u8 gUnknown_8261F18[] = { 0, 1, 2 }; -const struct BgTemplate gUnknown_8261F1C[] = { +static const struct BgTemplate gUnknown_8261F1C[] = { { .bg = 0, .charBaseIndex = 2, @@ -493,7 +493,7 @@ const struct BgTemplate gUnknown_8261F1C[] = { } }; -const struct WindowTemplate gUnknown_8261F2C[] = { +static const struct WindowTemplate gUnknown_8261F2C[] = { { .bg = 0, .tilemapLeft = 4, @@ -641,7 +641,7 @@ const struct WindowTemplate gUnknown_8261F2C[] = { }, DUMMY_WIN_TEMPLATE }; -const struct WindowTemplate gUnknown_8261FC4 = { +static const struct WindowTemplate gUnknown_8261FC4 = { .bg = 0, .tilemapLeft = 21, .tilemapTop = 13, @@ -651,7 +651,7 @@ const struct WindowTemplate gUnknown_8261FC4 = { .baseBlock = 0x24e }; -const u8 gUnknown_8261FCC[][13] = { +static const u8 gUnknown_8261FCC[][13] = { _("かいめの そうしん"), _("かいめの じゅしん"), _("ポケモンアイコンセット"), @@ -662,16 +662,16 @@ const u8 gUnknown_8261FCC[][13] = { _("はいけいセット") }; -const u8 gJPText_Shedinja[] = _("ヌケニン"); -const u8 gUnknown_8262039[] = _("こうかんせいりつ "); -const u8 gUnknown_8262047[] = _("だめだたらしいよ "); +static const u8 gJPText_Shedinja[] = _("ヌケニン"); +static const u8 gUnknown_8262039[] = _("こうかんせいりつ "); +static const u8 gUnknown_8262047[] = _("だめだたらしいよ "); -const u8 gUnknown_8262055[][2] = { +static const u8 gUnknown_8262055[][2] = { { 4, 3}, {19, 3} }; -void sub_804C600(void) +static void sub_804C600(void) { int i; @@ -717,7 +717,7 @@ void sub_804C718(void) #ifdef NONMATCHING // See note on case 12 below -void sub_804C728(void) +static void sub_804C728(void) { int i; struct SpriteTemplate temp; @@ -992,7 +992,7 @@ void sub_804C728(void) } #else NAKED -void sub_804C728(void) +static void sub_804C728(void) { asm_unified("\tpush {r4-r7,lr}\n" "\tmov r7, r8\n" @@ -2779,14 +2779,14 @@ void sub_804CF14(void) } #endif //NONMATCHING -void sub_804D4F8(void) +static void sub_804D4F8(void) { LoadOam(); ProcessSpriteCopyRequests(); TransferPlttBuffer(); } -void sub_804D50C(void) +static void sub_804D50C(void) { if (++sTradeMenuResourcesPtr->unk_A8 >= 16) { @@ -2795,7 +2795,7 @@ void sub_804D50C(void) } } -void sub_804D548(void) +static void sub_804D548(void) { if (!gPaletteFade.active) { @@ -2813,7 +2813,7 @@ void sub_804D548(void) } } -void sub_804D5A4(void) +static void sub_804D5A4(void) { gMain.savedCallback = sub_804C718; if (gWirelessCommType != 0) @@ -2841,7 +2841,7 @@ void sub_804D5A4(void) } } -void sub_804D638(void) +static void sub_804D638(void) { RunTradeMenuCallback(); sub_804F4DC(); @@ -2856,7 +2856,7 @@ void sub_804D638(void) UpdatePaletteFade(); } -void sub_804D694(u8 state) +static void sub_804D694(u8 state) { int i; @@ -2888,7 +2888,7 @@ void sub_804D694(u8 state) } } -void sub_804D764(void) +static void sub_804D764(void) { int i; for (i = 0; i < PARTY_SIZE; i++) @@ -2924,7 +2924,7 @@ static void Trade_Memcpy(void *dest, const void *src, size_t size) _dest[i] = _src[i]; } -bool8 shedinja_maker_maybe(void) +static bool8 shedinja_maker_maybe(void) { u8 id = GetMultiplayerId(); int i; @@ -3078,12 +3078,12 @@ bool8 shedinja_maker_maybe(void) return FALSE; } -void sub_804DBAC(void) +static void sub_804DBAC(void) { sub_804F728(gUnknown_841E0A5, (u8 *)OBJ_VRAM0 + sTradeMenuResourcesPtr->unk_72 * 32, 0x18); } -void sub_804DBD4(u8 a0, u8 a1) +static void sub_804DBD4(u8 a0, u8 a1) { if (a1 & 1) { @@ -3127,7 +3127,7 @@ void sub_804DBD4(u8 a0, u8 a1) } } -void sub_804DCF4(u8 a0, u8 a1) +static void sub_804DCF4(u8 a0, u8 a1) { if (a1 & 1) { @@ -3164,7 +3164,7 @@ void sub_804DCF4(u8 a0, u8 a1) ResetBlockReceivedFlag(1); } -void sub_804DDF0(void) +static void sub_804DDF0(void) { if (sTradeMenuResourcesPtr->unk_78 && sTradeMenuResourcesPtr->unk_79) { @@ -3232,7 +3232,7 @@ void sub_804DDF0(void) } } -void sub_804DFF0(void) +static void sub_804DFF0(void) { u8 mpId = GetMultiplayerId(); u8 status; @@ -3247,7 +3247,7 @@ void sub_804DFF0(void) sub_804DDF0(); } -u8 sub_804E028(u8 oldPosition, u8 direction) +static u8 sub_804E028(u8 oldPosition, u8 direction) { int i; u8 newPosition = 0; @@ -3265,7 +3265,7 @@ u8 sub_804E028(u8 oldPosition, u8 direction) } -void TradeMenuMoveCursor(u8 *tradeMenuCursorPosition, u8 direction) +static void TradeMenuMoveCursor(u8 *tradeMenuCursorPosition, u8 direction) { u8 newPosition = sub_804E028(*tradeMenuCursorPosition, direction); @@ -3290,7 +3290,7 @@ void TradeMenuMoveCursor(u8 *tradeMenuCursorPosition, u8 direction) *tradeMenuCursorPosition = newPosition; } -void sub_804E134(void) +static void sub_804E134(void) { PrintTradeErrorOrStatusMessage(TRADESTATMSG_COMMSTANDBY); sTradeMenuResourcesPtr->unk_6F = 5; @@ -3307,7 +3307,7 @@ void sub_804E134(void) } } -void sub_804E194(void) +static void sub_804E194(void) { int i; @@ -3362,7 +3362,7 @@ void sub_804E194(void) } } -void sub_804E330(void) +static void sub_804E330(void) { sub_804F3B4(); sTradeMenuResourcesPtr->unk_6F = 0; @@ -3370,7 +3370,7 @@ void sub_804E330(void) sub_804F728(gUnknown_8261ECC[1], (void *)OBJ_VRAM0 + sTradeMenuResourcesPtr->unk_72 * 32, 24); } -void sub_804E388(void) +static void sub_804E388(void) { switch (Menu_ProcessInputNoWrapAround()) { @@ -3410,7 +3410,7 @@ void sub_804E388(void) } } -void sub_804E46C(void) +static void sub_804E46C(void) { if (JOY_NEW(A_BUTTON) || JOY_NEW(B_BUTTON)) { @@ -3419,7 +3419,7 @@ void sub_804E46C(void) } } -void sub_804E494(void) +static void sub_804E494(void) { if (!gPaletteFade.active) { @@ -3431,7 +3431,7 @@ void sub_804E494(void) } } -u8 sub_804E50C(u8 *a0, u8 a1, u8 a2) +static u8 sub_804E50C(u8 *a0, u8 a1, u8 a2) { s32 i; u16 species; @@ -3449,7 +3449,7 @@ u8 sub_804E50C(u8 *a0, u8 a1, u8 a2) return r4; } -void sub_804E5A0(void) +static void sub_804E5A0(void) { int i; u8 arr[12]; @@ -3482,7 +3482,7 @@ void sub_804E5A0(void) } } -void sub_804E674(void) +static void sub_804E674(void) { switch (Menu_ProcessInputNoWrapClearOnChoose()) { @@ -3505,7 +3505,7 @@ void sub_804E674(void) } } -void sub_804E6FC(void) +static void sub_804E6FC(void) { int i; @@ -3516,7 +3516,7 @@ void sub_804E6FC(void) } } -void sub_804E744(void) +static void sub_804E744(void) { switch (Menu_ProcessInputNoWrapClearOnChoose()) { @@ -3537,7 +3537,7 @@ void sub_804E744(void) } } -void sub_804E7C8(void) +static void sub_804E7C8(void) { if (GetMultiplayerId() == 0) { @@ -3548,7 +3548,7 @@ void sub_804E7C8(void) sTradeMenuResourcesPtr->unk_6F = 7; } -void sub_804E804(void) +static void sub_804E804(void) { if (sTradeMenuResourcesPtr->unk_74[0] == 5 && sTradeMenuResourcesPtr->unk_74[1] == 5) { @@ -3557,7 +3557,7 @@ void sub_804E804(void) } } -void sub_804E830(void) +static void sub_804E830(void) { sTradeMenuResourcesPtr->unk_A8++; @@ -3569,7 +3569,7 @@ void sub_804E830(void) } } -void sub_804E880(void) +static void sub_804E880(void) { int i; @@ -3592,7 +3592,7 @@ void sub_804E880(void) } } -void sub_804E908(void) +static void sub_804E908(void) { if (!gPaletteFade.active) { @@ -3609,7 +3609,7 @@ void sub_804E908(void) } } -void sub_804E944(void) +static void sub_804E944(void) { if (gWirelessCommType) { @@ -3634,7 +3634,7 @@ void sub_804E944(void) } } -void sub_804E9C0(void) +static void sub_804E9C0(void) { if (!sub_80FA484(FALSE)) { @@ -3698,7 +3698,7 @@ static void RunTradeMenuCallback(void) } } -void sub_804EAAC(u8 a0) +static void sub_804EAAC(u8 a0) { u8 whichParty = a0 / PARTY_SIZE; @@ -3709,7 +3709,7 @@ void sub_804EAAC(u8 a0) } } -void sub_804EAE4(u8 a0) +static void sub_804EAE4(u8 a0) { s8 nameStringWidth; u8 nickname[20]; @@ -3780,7 +3780,7 @@ void sub_804EAE4(u8 a0) } } -u8 sub_804EE6C(u8 *dest, u8 whichParty, u8 partyIdx) +static u8 sub_804EE6C(u8 *dest, u8 whichParty, u8 partyIdx) { u8 nickname[11]; if (whichParty == 0) @@ -3791,7 +3791,7 @@ u8 sub_804EE6C(u8 *dest, u8 whichParty, u8 partyIdx) return GetStringWidth(0, dest, GetFontAttribute(0, FONTATTR_LETTER_SPACING)); } -void sub_804EED4(u8 *a0, u8 a1, u8 a2) +static void sub_804EED4(u8 *a0, u8 a1, u8 a2) { u16 moves[MAX_MON_MOVES]; u16 i; @@ -3829,7 +3829,7 @@ void sub_804EED4(u8 *a0, u8 a1, u8 a2) } } -void sub_804EFB4(u8 whichParty, u8 windowId, const u8 *str) +static void sub_804EFB4(u8 whichParty, u8 windowId, const u8 *str) { u8 xPos; s8 speed; @@ -3841,7 +3841,7 @@ void sub_804EFB4(u8 whichParty, u8 windowId, const u8 *str) CopyWindowToVram(windowId, 3); } -void sub_804F020(u8 whichParty) +static void sub_804F020(u8 whichParty) { u8 buff[20]; u8 nickname[30]; @@ -3855,7 +3855,7 @@ void sub_804F020(u8 whichParty) } } -void sub_804F08C(u8 whichParty, u8 monIdx, u8 a2, u8 a3, u8 a4, u8 a5) +static void sub_804F08C(u8 whichParty, u8 monIdx, u8 a2, u8 a3, u8 a4, u8 a5) { u8 level; u32 r2; @@ -3918,7 +3918,7 @@ void sub_804F08C(u8 whichParty, u8 monIdx, u8 a2, u8 a3, u8 a4, u8 a5) #ifdef NONMATCHING // Instruction swap when setting r5 and r4 -void sub_804F284(u8 whichParty) +static void sub_804F284(u8 whichParty) { s32 i; for (i = 0; i < sTradeMenuResourcesPtr->partyCounts[whichParty]; i++) @@ -3935,7 +3935,7 @@ void sub_804F284(u8 whichParty) } #else NAKED -void sub_804F284(u8 whichParty) +static void sub_804F284(u8 whichParty) { asm_unified("\tpush {r4-r7,lr}\n" "\tsub sp, 0x8\n" @@ -3989,7 +3989,7 @@ void sub_804F284(u8 whichParty) } #endif //NONMATCHING -void sub_804F2E8(u8 whichParty) +static void sub_804F2E8(u8 whichParty) { int i; @@ -4003,13 +4003,13 @@ void sub_804F2E8(u8 whichParty) } } -void sub_804F3B4(void) +static void sub_804F3B4(void) { rbox_fill_rectangle(1); sub_804F020(1); } -void sub_804F3C8(u8 whichParty) +static void sub_804F3C8(u8 whichParty) { CopyToBgTilemapBufferRect_ChangePalette(1, gTradePartyBoxTilemap, 15 * whichParty, 0, 15, 17, 0); CopyBgTilemapBufferToVram(1); @@ -4020,19 +4020,19 @@ void sub_804F3C8(u8 whichParty) sTradeMenuResourcesPtr->unk_74[whichParty] = 0; } -void TradeMenuAction_Summary(u8 taskId) +static void TradeMenuAction_Summary(u8 taskId) { FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 30, 20); CopyBgTilemapBufferToVram(0); } -void TradeMenuAction_Trade(u8 taskId) +static void TradeMenuAction_Trade(u8 taskId) { FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 30, 20); CopyBgTilemapBufferToVram(0); } -void sub_804F488(u16 a0, u8 a1) +static void sub_804F488(u16 a0, u8 a1) { int i; for (i = 0; i < 4; i++) @@ -4093,7 +4093,7 @@ static void sub_804F4DC(void) } } -void PrintTradeErrorOrStatusMessage(u8 idx) +static void PrintTradeErrorOrStatusMessage(u8 idx) { FillWindowPixelBuffer(0, PIXEL_FILL(1)); AddTextPrinterParameterized(0, 3, sTradeErrorOrStatusMessagePtrs[idx], 0, 2, 0xFF, NULL); @@ -4102,7 +4102,7 @@ void PrintTradeErrorOrStatusMessage(u8 idx) CopyWindowToVram(0, 3); } -bool8 sub_804F610(void) +static bool8 sub_804F610(void) { struct SpriteSheet sheet; @@ -4147,12 +4147,12 @@ bool8 sub_804F610(void) return FALSE; } -void sub_804F728(const u8 *name, u8 *dest, u8 unused) +static void sub_804F728(const u8 *name, u8 *dest, u8 unused) { sub_808BEB4(name, dest, 0, 0, gDecompressionBuffer, 6); } -void sub_804F748(u8 who) +static void sub_804F748(u8 who) { int i; @@ -4201,7 +4201,7 @@ void sub_804F748(u8 who) } } -void sub_804F890(u8 who) +static void sub_804F890(u8 who) { u16 i, curHp, maxHp; @@ -4226,7 +4226,7 @@ void sub_804F890(u8 who) } } -void sub_804F964(void) +static void sub_804F964(void) { int i, j; for (i = 0; i < 2; i++) @@ -4238,7 +4238,7 @@ void sub_804F964(void) } } -void sub_804F9D8(void) +static void sub_804F9D8(void) { int i; for (i = 0; i < 11; i++) @@ -4248,7 +4248,7 @@ void sub_804F9D8(void) } } -u32 sub_804FA14(struct Pokemon *party, int partyCount, int cursorPos) +static u32 sub_804FA14(struct Pokemon *party, int partyCount, int cursorPos) { int i, sum; struct LinkPlayer *player; @@ -4374,7 +4374,7 @@ s32 sub_804FB34(void) return 0; } -bool32 IsDeoxysOrMewUntradable(u16 species, bool8 isObedientBitSet) +static bool32 IsDeoxysOrMewUntradable(u16 species, bool8 isObedientBitSet) { if (species == SPECIES_DEOXYS || species == SPECIES_MEW) { -- cgit v1.2.3 From 84e1b97eacadbf857847b173218176d9b22ab144 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 30 Oct 2019 15:09:13 -0400 Subject: Ape trade graphics from Emerald --- data/trade.s | 84 +--------- data/trade/unk_8260834.bin | Bin 510 -> 0 bytes data/trade/unk_8260A32.bin | Bin 510 -> 0 bytes data/trade/unk_8260C30.bin | 1 - data/trade/unk_8261430.bin | 1 - data/trade/unk_8261CE0.pal | 19 --- data/trade/unk_826207C.png | Bin 477 -> 0 bytes data/trade/unk_826407C.bin | Bin 2048 -> 0 bytes data/trade/unk_826499C.pal | 19 --- data/trade/unk_8264A1C.png | Bin 208 -> 0 bytes data/trade/unk_8264C1C.png | Bin 203 -> 0 bytes data/trade/unk_8264E1C.png | Bin 205 -> 0 bytes data/trade/unk_826501C.png | Bin 183 -> 0 bytes data/trade/unk_826601C.bin | Bin 4096 -> 0 bytes data/trade/unk_826701C.png | Bin 1833 -> 0 bytes data/trade/unk_826985C.bin | Bin 256 -> 0 bytes data/trade/unk_826995C.bin | Bin 256 -> 0 bytes data/trade/unk_8269A5C.bin | Bin 4096 -> 0 bytes data/trade/unk_826AA5C.bin | Bin 4096 -> 0 bytes data/trade/unk_826BB5C.pal | 259 ----------------------------- data/trade/unk_826BD5C.pal | 259 ----------------------------- data/trade/unk_826BF5C.pal | 19 --- data/trade/unk_826C60C.bin | Bin 2048 -> 0 bytes graphics/trade/ball.png | Bin 0 -> 464 bytes graphics/trade/black.pal | 19 +++ graphics/trade/buttons.png | Bin 0 -> 227 bytes graphics/trade/cable_closeup_map.bin | Bin 0 -> 2048 bytes graphics/trade/cable_end.png | Bin 0 -> 194 bytes graphics/trade/gba.pal | 19 +++ graphics/trade/gba_affine.png | Bin 0 -> 1897 bytes graphics/trade/gba_affine_map_cable.bin | Bin 0 -> 256 bytes graphics/trade/gba_affine_map_wireless.bin | Bin 0 -> 256 bytes graphics/trade/gba_map_cable.bin | Bin 0 -> 4096 bytes graphics/trade/gba_map_wireless.bin | Bin 0 -> 4096 bytes graphics/trade/gba_screen.png | Bin 0 -> 170 bytes graphics/trade/glow1.png | Bin 0 -> 195 bytes graphics/trade/glow2.png | Bin 0 -> 190 bytes graphics/trade/menu.pal | 51 ++++++ graphics/trade/menu.png | Bin 0 -> 608 bytes graphics/trade/misc.pal | 19 +++ graphics/trade/moves_box_map.bin | Bin 0 -> 510 bytes graphics/trade/party_box_map.bin | Bin 0 -> 510 bytes graphics/trade/pokeball_symbol.png | Bin 0 -> 1569 bytes graphics/trade/pokeball_symbol_map.bin | Bin 0 -> 256 bytes graphics/trade/shadow.pal | 19 +++ graphics/trade/shadow_map.bin | Bin 0 -> 4096 bytes graphics/trade/stripes_bg2_map.bin | 1 + graphics/trade/stripes_bg3_map.bin | 1 + graphics/trade/text.pal | 19 +++ graphics/trade/unknown_3308C0.pal | 19 +++ graphics/trade/unknown_338EA4.pal | 15 ++ graphics/trade/wireless_signal_receive.pal | 259 +++++++++++++++++++++++++++++ graphics/trade/wireless_signal_send.pal | 259 +++++++++++++++++++++++++++++ src/trade.c | 14 +- src/trade_scene.c | 138 ++++++++------- 55 files changed, 790 insertions(+), 723 deletions(-) delete mode 100644 data/trade/unk_8260834.bin delete mode 100644 data/trade/unk_8260A32.bin delete mode 100644 data/trade/unk_8260C30.bin delete mode 100644 data/trade/unk_8261430.bin delete mode 100644 data/trade/unk_8261CE0.pal delete mode 100644 data/trade/unk_826207C.png delete mode 100644 data/trade/unk_826407C.bin delete mode 100644 data/trade/unk_826499C.pal delete mode 100644 data/trade/unk_8264A1C.png delete mode 100644 data/trade/unk_8264C1C.png delete mode 100644 data/trade/unk_8264E1C.png delete mode 100644 data/trade/unk_826501C.png delete mode 100644 data/trade/unk_826601C.bin delete mode 100644 data/trade/unk_826701C.png delete mode 100644 data/trade/unk_826985C.bin delete mode 100644 data/trade/unk_826995C.bin delete mode 100644 data/trade/unk_8269A5C.bin delete mode 100644 data/trade/unk_826AA5C.bin delete mode 100644 data/trade/unk_826BB5C.pal delete mode 100644 data/trade/unk_826BD5C.pal delete mode 100644 data/trade/unk_826BF5C.pal delete mode 100644 data/trade/unk_826C60C.bin create mode 100644 graphics/trade/ball.png create mode 100644 graphics/trade/black.pal create mode 100644 graphics/trade/buttons.png create mode 100644 graphics/trade/cable_closeup_map.bin create mode 100644 graphics/trade/cable_end.png create mode 100644 graphics/trade/gba.pal create mode 100644 graphics/trade/gba_affine.png create mode 100644 graphics/trade/gba_affine_map_cable.bin create mode 100644 graphics/trade/gba_affine_map_wireless.bin create mode 100644 graphics/trade/gba_map_cable.bin create mode 100644 graphics/trade/gba_map_wireless.bin create mode 100644 graphics/trade/gba_screen.png create mode 100644 graphics/trade/glow1.png create mode 100644 graphics/trade/glow2.png create mode 100644 graphics/trade/menu.pal create mode 100644 graphics/trade/menu.png create mode 100644 graphics/trade/misc.pal create mode 100644 graphics/trade/moves_box_map.bin create mode 100644 graphics/trade/party_box_map.bin create mode 100644 graphics/trade/pokeball_symbol.png create mode 100644 graphics/trade/pokeball_symbol_map.bin create mode 100644 graphics/trade/shadow.pal create mode 100644 graphics/trade/shadow_map.bin create mode 100644 graphics/trade/stripes_bg2_map.bin create mode 100644 graphics/trade/stripes_bg3_map.bin create mode 100644 graphics/trade/text.pal create mode 100644 graphics/trade/unknown_3308C0.pal create mode 100644 graphics/trade/unknown_338EA4.pal create mode 100644 graphics/trade/wireless_signal_receive.pal create mode 100644 graphics/trade/wireless_signal_send.pal diff --git a/data/trade.s b/data/trade.s index f3c6f8b7e..16fde1e35 100644 --- a/data/trade.s +++ b/data/trade.s @@ -8,78 +8,6 @@ .section .rodata .align 2, 0 -gUnknown_826205C:: - .incbin "data/trade/unk_826207C.gbapal" - -gUnknown_826207C:: - .incbin "data/trade/unk_826207C.4bpp" - - .incbin "baserom.gba", 0x26267C, 0x1A00 - -gUnknown_826407C:: @ 826407C - .incbin "data/trade/unk_826407C.bin" - - .incbin "baserom.gba", 0x26487C, 0x120 - -gUnknown_826499C:: - .incbin "data/trade/unk_8264E1C.gbapal" - - .incbin "baserom.gba", 0x2649BC, 0x40 - -gUnknown_82649FC:: - .incbin "data/trade/unk_8264A1C.gbapal" - -gUnknown_8264A1C:: - .incbin "data/trade/unk_8264A1C.4bpp" - -gUnknown_8264C1C:: - .incbin "data/trade/unk_8264C1C.4bpp" - -gUnknown_8264E1C:: - .incbin "data/trade/unk_8264E1C.4bpp" - - .incbin "baserom.gba", 0x264F1C, 0x100 - -gUnknown_826501C:: - .incbin "data/trade/unk_826501C.4bpp" - -gUnknown_826601C:: @ 826601C - .incbin "data/trade/unk_826601C.bin" - -gUnknown_826701C:: @ 826701C - .incbin "data/trade/unk_826701C.8bpp" - -gUnknown_826985C:: @ 826985C - .incbin "data/trade/unk_826985C.bin" - -gUnknown_826995C:: @ 826995C - .incbin "data/trade/unk_826995C.bin" - -gUnknown_8269A5C:: @ 8269A5C - .incbin "data/trade/unk_8269A5C.bin" - -gUnknown_826AA5C:: @ 826AA5C - .incbin "data/trade/unk_826AA5C.bin" - - .align 2 -gUnknown_3379A0Bin:: @ 826BA5C - .incbin "graphics/trade/unknown_3379A0.bin.lz" - -gUnknown_826BB5C:: @ 826BB5C - .incbin "data/trade/unk_826BB5C.gbapal" - -gUnknown_826BD5C:: @ 826BD5C - .incbin "data/trade/unk_826BD5C.gbapal" - -gUnknown_826BF5C:: @ 826BF5C - .incbin "data/trade/unk_826BF5C.gbapal" - -gWirelessSignal4bpp:: @ 826BF7C - .incbin "graphics/trade/wireless_signal.4bpp.lz" - -gUnknown_826C60C:: @ 826C60C - .incbin "data/trade/unk_826C60C.bin.lz" - gOamData_826CD00:: .4byte 0x40000100, 0x00000000 @@ -141,10 +69,10 @@ gSpriteAffineAnimTable_826CDC8:: .4byte gAffineAnimCmd_826CDA8 gUnknown_826CDD4:: @ 826CDD4 - obj_tiles gUnknown_826207C, 0x0600, 5557 + obj_tiles gTradeBallTiles, 0x0600, 5557 gUnknown_826CDDC:: @ 826CDDC - obj_pal gUnknown_826205C, 5558 + obj_pal gTradeBallPalette, 5558 sTradePokeballSpriteTemplate:: @ 826CDE4 spr_template 5557, 5558, gOamData_826CD00, gSpriteAnimTable_826CD80, NULL, gSpriteAffineAnimTable_826CDC8, SpriteCB_TradePokeball_Default @@ -168,7 +96,7 @@ gSpriteAffineAnimTable_826CE28:: .4byte gAffineAnimCmd_826CE10 gUnknown_826CE2C:: @ 826CE2C - obj_tiles gUnknown_8264A1C, 0x0200, 5550 + obj_tiles gTradeGlow1Tiles, 0x0200, 5550 gUnknown_826CE34:: @ 826CE34 obj_pal gUnknown_82649FC, 5551 @@ -195,7 +123,7 @@ gSpriteAnimTable_826CE74:: .4byte gAnimCmd_826CE6C gUnknown_826CE7C:: @ 826CE7C - obj_tiles gUnknown_8264C1C, 0x0300, 5552 + obj_tiles gTradeGlow2Tiles, 0x0300, 5552 sGlowBallSpriteTemplate:: @ 826CE84 spr_template 5552, 5551, gOamData_826CE5C, gSpriteAnimTable_826CE74, NULL, gDummySpriteAffineAnimTable, SpriteCB_TradeGlowCore @@ -211,7 +139,7 @@ gSpriteAnimTable_826CEAC:: .4byte gAnimCmd_826CEA4 gUnknown_826CEB0:: @ 826CEB0 - obj_tiles gUnknown_8264E1C, 0x0100, 5554 + obj_tiles gTradeCableEndTiles, 0x0100, 5554 sGameLinkCableEndSpriteTemplate:: @ 826CEB8 spr_template 5554, 5555, gOamData_826CE9C, gSpriteAnimTable_826CEAC, NULL, gDummySpriteAffineAnimTable, SpriteCB_GameLinkCableEnd_Outbound @@ -248,7 +176,7 @@ gSpriteAnimTable_826CF24:: .4byte gAnimCmd_826CEFC gUnknown_826CF28:: @ 826CF28 - obj_tiles gUnknown_826501C, 0x1000, 5556 + obj_tiles gTradeGBAScreenTiles, 0x1000, 5556 gUnknown_826CF30:: @ 826CF30 spr_template 5556, 5555, gOamData_826CED0, gSpriteAnimTable_826CF20, NULL, gDummySpriteAffineAnimTable, sub_804FE00 diff --git a/data/trade/unk_8260834.bin b/data/trade/unk_8260834.bin deleted file mode 100644 index 123abf716..000000000 Binary files a/data/trade/unk_8260834.bin and /dev/null differ diff --git a/data/trade/unk_8260A32.bin b/data/trade/unk_8260A32.bin deleted file mode 100644 index 69304c5cb..000000000 Binary files a/data/trade/unk_8260A32.bin and /dev/null differ diff --git a/data/trade/unk_8260C30.bin b/data/trade/unk_8260C30.bin deleted file mode 100644 index 22f8f3b71..000000000 --- a/data/trade/unk_8260C30.bin +++ /dev/null @@ -1 +0,0 @@ -@ABCDEFGHIJKLMNOONMLKJIHHHFDCBA@@ABCDEFGHIJKLMNOONMLKJIHHHFDCBA@@ABCDEFGHIJKLMNOONMLKJIHHHFDCBA@@ABCDEFGHIJKLMNOONMLKJIHHHFDCBA@@ABCDEFGHIJKLMNOONMLKJIHHHFDCBA@@ABCDEFGHIJKLMNOONMLKJIHHHFDCBA@@ABCDEFGHIJKLMNOONMLKJIHHHFDCBA@@ABCDEFGHIJKLMNOONMLKJIHHHFDCBA@@ABCDEFGHIJKLMNOONMLKJIHHHFDCBA@@ABCDEFGHIJKLMNOONMLKJIHHHFDCBA@@ABCDEFGHIJKLMNOONMLKJIHHHFDCBA@@ABCDEFGHIJKLMNOONMLKJIHHHFDCBA@@ABCDEFGHIJKLMNOONMLKJIHHHFDCBA@@ABCDEFGHIJKLMNOONMLKJIHHHFDCBA@@ABCDEFGHIJKLMNOONMLKJIHHHFDCBA@@ABCDEFGHIJKLMNOONMLKJIHHHFDCBA@@ABCDEFGHIJKLMNOONMLKJIHHHFDCBA@@ABCDEFGHIJKLMNOONMLKJIHHHFDCBA@@ABCDEFGHIJKLMNOONMLKJIHHHFDCBA@@ABCDEFGHIJKLMNOONMLKJIHHHFDCBA@@ABCDEFGHIJKLMNOONMLKJIHHHFDCBA@@ABCDEFGHIJKLMNOONMLKJIHHHFDCBA@@ABCDEFGHIJKLMNOONMLKJIHHHFDCBA@@ABCDEFGHIJKLMNOONMLKJIHHHFDCBA@@ABCDEFGHIJKLMNOONMLKJIHHHFDCBA@@ABCDEFGHIJKLMNOONMLKJIHHHFDCBA@@ABCDEFGHIJKLMNOONMLKJIHHHFDCBA@@ABCDEFGHIJKLMNOONMLKJIHHHFDCBA@@ABCDEFGHIJKLMNOONMLKJIHHHFDCBA@@ABCDEFGHIJKLMNOONMLKJIHHHFDCBA@@ABCDEFGHIJKLMNOONMLKJIHHHFDCBA@@ABCDEFGHIJKLMNOONMLKJIHHHFDCBA@ \ No newline at end of file diff --git a/data/trade/unk_8261430.bin b/data/trade/unk_8261430.bin deleted file mode 100644 index e4168474a..000000000 --- a/data/trade/unk_8261430.bin +++ /dev/null @@ -1 +0,0 @@ -P Q R S T U V W X Y Z [ \ ] ^ _ ^ ] \ [ Z Y X W V V U T S R Q P P Q R S T U V W X Y Z [ \ ] ^ _ ^ ] \ [ Z Y X W V V U T S R Q P P Q R S T U V W X Y Z [ \ ] ^ _ ^ ] \ [ Z Y X W V V U T S R Q P P Q R S T U V W X Y Z [ \ ] ^ _ ^ ] \ [ Z Y X W V V U T S R Q P P Q R S T U V W X Y Z [ \ ] ^ _ ^ ] \ [ Z Y X W V V U T S R Q P P Q R S T U V W X Y Z [ \ ] ^ _ ^ ] \ [ Z Y X W V V U T S R Q P P Q R S T U V W X Y Z [ \ ] ^ _ ^ ] \ [ Z Y X W V V U T S R Q P P Q R S T U V W X Y Z [ \ ] ^ _ ^ ] \ [ Z Y X W V V U T S R Q P P Q R S T U V W X Y Z [ \ ] ^ _ ^ ] \ [ Z Y X W V V U T S R Q P P Q R S T U V W X Y Z [ \ ] ^ _ ^ ] \ [ Z Y X W V V U T S R Q P P Q R S T U V W X Y Z [ \ ] ^ _ ^ ] \ [ Z Y X W V V U T S R Q P P Q R S T U V W X Y Z [ \ ] ^ _ ^ ] \ [ Z Y X W V V U T S R Q P P Q R S T U V W X Y Z [ \ ] ^ _ ^ ] \ [ Z Y X W V V U T S R Q P P Q R S T U V W X Y Z [ \ ] ^ _ ^ ] \ [ Z Y X W V V U T S R Q P P Q R S T U V W X Y Z [ \ ] ^ _ ^ ] \ [ Z Y X W V V U T S R Q P P Q R S T U V W X Y Z [ \ ] ^ _ ^ ] \ [ Z Y X W V V U T S R Q P P Q R S T U V W X Y Z [ \ ] ^ _ ^ ] \ [ Z Y X W V V U T S R Q P P Q R S T U V W X Y Z [ \ ] ^ _ ^ ] \ [ Z Y X W V V U T S R Q P P Q R S T U V W X Y Z [ \ ] ^ _ ^ ] \ [ Z Y X W V V U T S R Q P P Q R S T U V W X Y Z [ \ ] ^ _ ^ ] \ [ Z Y X W V V U T S R Q P P Q R S T U V W X Y Z [ \ ] ^ _ ^ ] \ [ Z Y X W V V U T S R Q P P Q R S T U V W X Y Z [ \ ] ^ _ ^ ] \ [ Z Y X W V V U T S R Q P P Q R S T U V W X Y Z [ \ ] ^ _ ^ ] \ [ Z Y X W V V U T S R Q P P Q R S T U V W X Y Z [ \ ] ^ _ ^ ] \ [ Z Y X W V V U T S R Q P P Q R S T U V W X Y Z [ \ ] ^ _ ^ ] \ [ Z Y X W V V U T S R Q P P Q R S T U V W X Y Z [ \ ] ^ _ ^ ] \ [ Z Y X W V V U T S R Q P P Q R S T U V W X Y Z [ \ ] ^ _ ^ ] \ [ Z Y X W V V U T S R Q P P Q R S T U V W X Y Z [ \ ] ^ _ ^ ] \ [ Z Y X W V V U T S R Q P P Q R S T U V W X Y Z [ \ ] ^ _ ^ ] \ [ Z Y X W V V U T S R Q P P Q R S T U V W X Y Z [ \ ] ^ _ ^ ] \ [ Z Y X W V V U T S R Q P P Q R S T U V W X Y Z [ \ ] ^ _ ^ ] \ [ Z Y X W V V U T S R Q P P Q R S T U V W X Y Z [ \ ] ^ _ ^ ] \ [ Z Y X W V V U T S R Q P \ No newline at end of file diff --git a/data/trade/unk_8261CE0.pal b/data/trade/unk_8261CE0.pal deleted file mode 100644 index 40426b71f..000000000 --- a/data/trade/unk_8261CE0.pal +++ /dev/null @@ -1,19 +0,0 @@ -JASC-PAL -0100 -16 -0 0 0 -74 74 74 -255 0 0 -0 255 0 -0 0 255 -255 255 0 -0 255 255 -255 0 255 -213 213 205 -0 0 0 -0 0 0 -0 0 0 -255 255 255 -0 0 0 -115 115 115 -255 255 255 diff --git a/data/trade/unk_826207C.png b/data/trade/unk_826207C.png deleted file mode 100644 index 01e26de43..000000000 Binary files a/data/trade/unk_826207C.png and /dev/null differ diff --git a/data/trade/unk_826407C.bin b/data/trade/unk_826407C.bin deleted file mode 100644 index aad25ed83..000000000 Binary files a/data/trade/unk_826407C.bin and /dev/null differ diff --git a/data/trade/unk_826499C.pal b/data/trade/unk_826499C.pal deleted file mode 100644 index 64a442293..000000000 --- a/data/trade/unk_826499C.pal +++ /dev/null @@ -1,19 +0,0 @@ -JASC-PAL -0100 -16 -0 0 0 -255 255 255 -222 230 238 -189 205 230 -156 180 222 -131 131 139 -98 98 123 -65 74 106 -41 49 90 -230 230 230 -205 205 205 -180 180 180 -156 156 156 -213 180 106 -205 156 82 -49 255 106 diff --git a/data/trade/unk_8264A1C.png b/data/trade/unk_8264A1C.png deleted file mode 100644 index 4197d701c..000000000 Binary files a/data/trade/unk_8264A1C.png and /dev/null differ diff --git a/data/trade/unk_8264C1C.png b/data/trade/unk_8264C1C.png deleted file mode 100644 index 3dbbf845c..000000000 Binary files a/data/trade/unk_8264C1C.png and /dev/null differ diff --git a/data/trade/unk_8264E1C.png b/data/trade/unk_8264E1C.png deleted file mode 100644 index 48b16f034..000000000 Binary files a/data/trade/unk_8264E1C.png and /dev/null differ diff --git a/data/trade/unk_826501C.png b/data/trade/unk_826501C.png deleted file mode 100644 index a900dea3b..000000000 Binary files a/data/trade/unk_826501C.png and /dev/null differ diff --git a/data/trade/unk_826601C.bin b/data/trade/unk_826601C.bin deleted file mode 100644 index 8846e2d7d..000000000 Binary files a/data/trade/unk_826601C.bin and /dev/null differ diff --git a/data/trade/unk_826701C.png b/data/trade/unk_826701C.png deleted file mode 100644 index 91123d014..000000000 Binary files a/data/trade/unk_826701C.png and /dev/null differ diff --git a/data/trade/unk_826985C.bin b/data/trade/unk_826985C.bin deleted file mode 100644 index 19bab962b..000000000 Binary files a/data/trade/unk_826985C.bin and /dev/null differ diff --git a/data/trade/unk_826995C.bin b/data/trade/unk_826995C.bin deleted file mode 100644 index 53a511321..000000000 Binary files a/data/trade/unk_826995C.bin and /dev/null differ diff --git a/data/trade/unk_8269A5C.bin b/data/trade/unk_8269A5C.bin deleted file mode 100644 index 52f6232fc..000000000 Binary files a/data/trade/unk_8269A5C.bin and /dev/null differ diff --git a/data/trade/unk_826AA5C.bin b/data/trade/unk_826AA5C.bin deleted file mode 100644 index 80705aef5..000000000 Binary files a/data/trade/unk_826AA5C.bin and /dev/null differ diff --git a/data/trade/unk_826BB5C.pal b/data/trade/unk_826BB5C.pal deleted file mode 100644 index a5da8a543..000000000 --- a/data/trade/unk_826BB5C.pal +++ /dev/null @@ -1,259 +0,0 @@ -JASC-PAL -0100 -256 -0 0 0 -255 255 255 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -172 172 172 -255 255 255 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -172 172 172 -255 255 255 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -172 172 172 -255 255 255 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -172 172 172 -255 255 255 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -172 172 172 -255 255 255 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -172 172 172 -255 255 255 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -172 172 172 -255 255 255 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -172 172 172 -255 255 255 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -172 172 172 -255 255 255 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -172 172 172 -255 255 255 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -172 172 172 -255 255 255 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -172 172 172 -255 255 255 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -172 172 172 -255 255 255 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -172 172 172 -255 255 255 -0 0 0 -255 255 255 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -172 172 172 diff --git a/data/trade/unk_826BD5C.pal b/data/trade/unk_826BD5C.pal deleted file mode 100644 index 218390aa2..000000000 --- a/data/trade/unk_826BD5C.pal +++ /dev/null @@ -1,259 +0,0 @@ -JASC-PAL -0100 -256 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -255 255 255 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -255 255 255 -172 172 172 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -255 255 255 -172 172 172 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -255 255 255 -172 172 172 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -255 255 255 -172 172 172 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -255 255 255 -172 172 172 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -255 255 255 -172 172 172 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -255 255 255 -172 172 172 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -255 255 255 -172 172 172 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -255 255 255 -172 172 172 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -255 255 255 -172 172 172 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -255 255 255 -172 172 172 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -255 255 255 -172 172 172 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -255 255 255 -172 172 172 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -255 255 255 -172 172 172 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -172 172 172 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -255 255 255 diff --git a/data/trade/unk_826BF5C.pal b/data/trade/unk_826BF5C.pal deleted file mode 100644 index 4b0812f09..000000000 --- a/data/trade/unk_826BF5C.pal +++ /dev/null @@ -1,19 +0,0 @@ -JASC-PAL -0100 -16 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 diff --git a/data/trade/unk_826C60C.bin b/data/trade/unk_826C60C.bin deleted file mode 100644 index 4ce5d18b8..000000000 Binary files a/data/trade/unk_826C60C.bin and /dev/null differ diff --git a/graphics/trade/ball.png b/graphics/trade/ball.png new file mode 100644 index 000000000..97cc86a6f Binary files /dev/null and b/graphics/trade/ball.png differ diff --git a/graphics/trade/black.pal b/graphics/trade/black.pal new file mode 100644 index 000000000..4b0812f09 --- /dev/null +++ b/graphics/trade/black.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/trade/buttons.png b/graphics/trade/buttons.png new file mode 100644 index 000000000..568f40a42 Binary files /dev/null and b/graphics/trade/buttons.png differ diff --git a/graphics/trade/cable_closeup_map.bin b/graphics/trade/cable_closeup_map.bin new file mode 100644 index 000000000..aad25ed83 Binary files /dev/null and b/graphics/trade/cable_closeup_map.bin differ diff --git a/graphics/trade/cable_end.png b/graphics/trade/cable_end.png new file mode 100644 index 000000000..1d7828a00 Binary files /dev/null and b/graphics/trade/cable_end.png differ diff --git a/graphics/trade/gba.pal b/graphics/trade/gba.pal new file mode 100644 index 000000000..64a442293 --- /dev/null +++ b/graphics/trade/gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +255 255 255 +222 230 238 +189 205 230 +156 180 222 +131 131 139 +98 98 123 +65 74 106 +41 49 90 +230 230 230 +205 205 205 +180 180 180 +156 156 156 +213 180 106 +205 156 82 +49 255 106 diff --git a/graphics/trade/gba_affine.png b/graphics/trade/gba_affine.png new file mode 100644 index 000000000..b8c2623c4 Binary files /dev/null and b/graphics/trade/gba_affine.png differ diff --git a/graphics/trade/gba_affine_map_cable.bin b/graphics/trade/gba_affine_map_cable.bin new file mode 100644 index 000000000..19bab962b Binary files /dev/null and b/graphics/trade/gba_affine_map_cable.bin differ diff --git a/graphics/trade/gba_affine_map_wireless.bin b/graphics/trade/gba_affine_map_wireless.bin new file mode 100644 index 000000000..53a511321 Binary files /dev/null and b/graphics/trade/gba_affine_map_wireless.bin differ diff --git a/graphics/trade/gba_map_cable.bin b/graphics/trade/gba_map_cable.bin new file mode 100644 index 000000000..80705aef5 Binary files /dev/null and b/graphics/trade/gba_map_cable.bin differ diff --git a/graphics/trade/gba_map_wireless.bin b/graphics/trade/gba_map_wireless.bin new file mode 100644 index 000000000..52f6232fc Binary files /dev/null and b/graphics/trade/gba_map_wireless.bin differ diff --git a/graphics/trade/gba_screen.png b/graphics/trade/gba_screen.png new file mode 100644 index 000000000..4220e5e0d Binary files /dev/null and b/graphics/trade/gba_screen.png differ diff --git a/graphics/trade/glow1.png b/graphics/trade/glow1.png new file mode 100644 index 000000000..e223d97ce Binary files /dev/null and b/graphics/trade/glow1.png differ diff --git a/graphics/trade/glow2.png b/graphics/trade/glow2.png new file mode 100644 index 000000000..e7729bc84 Binary files /dev/null and b/graphics/trade/glow2.png differ diff --git a/graphics/trade/menu.pal b/graphics/trade/menu.pal new file mode 100644 index 000000000..98377bbb3 --- /dev/null +++ b/graphics/trade/menu.pal @@ -0,0 +1,51 @@ +JASC-PAL +0100 +48 +0 0 0 +57 57 172 +98 98 180 +123 106 222 +82 90 213 +82 148 205 +131 115 230 +148 156 189 +205 106 0 +246 148 0 +49 49 90 +255 213 115 +205 74 90 +255 98 32 +205 205 222 +255 255 213 +0 0 0 +0 8 16 +0 16 32 +0 24 49 +0 41 65 +0 49 82 +0 57 98 +0 65 115 +0 82 131 +0 90 148 +0 98 164 +0 106 180 +0 123 197 +0 131 213 +0 139 230 +0 156 255 +0 0 0 +0 8 16 +0 16 32 +0 24 49 +0 41 65 +0 49 82 +0 57 98 +0 65 115 +0 82 131 +0 90 148 +0 98 164 +0 106 180 +0 123 197 +0 131 213 +0 139 230 +0 156 255 diff --git a/graphics/trade/menu.png b/graphics/trade/menu.png new file mode 100644 index 000000000..91bc0f7eb Binary files /dev/null and b/graphics/trade/menu.png differ diff --git a/graphics/trade/misc.pal b/graphics/trade/misc.pal new file mode 100644 index 000000000..32fafddfc --- /dev/null +++ b/graphics/trade/misc.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +255 156 123 +164 123 197 +41 255 115 +0 139 255 +255 255 74 +255 255 255 +106 106 106 +255 156 123 +255 156 123 +255 156 123 +255 156 123 +255 156 123 +255 156 123 +255 156 123 +255 156 123 diff --git a/graphics/trade/moves_box_map.bin b/graphics/trade/moves_box_map.bin new file mode 100644 index 000000000..123abf716 Binary files /dev/null and b/graphics/trade/moves_box_map.bin differ diff --git a/graphics/trade/party_box_map.bin b/graphics/trade/party_box_map.bin new file mode 100644 index 000000000..69304c5cb Binary files /dev/null and b/graphics/trade/party_box_map.bin differ diff --git a/graphics/trade/pokeball_symbol.png b/graphics/trade/pokeball_symbol.png new file mode 100644 index 000000000..3b4a30f4f Binary files /dev/null and b/graphics/trade/pokeball_symbol.png differ diff --git a/graphics/trade/pokeball_symbol_map.bin b/graphics/trade/pokeball_symbol_map.bin new file mode 100644 index 000000000..8355c2f5c Binary files /dev/null and b/graphics/trade/pokeball_symbol_map.bin differ diff --git a/graphics/trade/shadow.pal b/graphics/trade/shadow.pal new file mode 100644 index 000000000..a4bec6478 --- /dev/null +++ b/graphics/trade/shadow.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +255 255 255 +222 230 238 +189 205 230 +156 180 222 +0 16 172 +32 32 106 +16 16 90 +0 0 74 +255 255 189 +230 230 164 +205 205 148 +189 180 115 +139 139 90 +74 74 57 +32 32 32 diff --git a/graphics/trade/shadow_map.bin b/graphics/trade/shadow_map.bin new file mode 100644 index 000000000..8846e2d7d Binary files /dev/null and b/graphics/trade/shadow_map.bin differ diff --git a/graphics/trade/stripes_bg2_map.bin b/graphics/trade/stripes_bg2_map.bin new file mode 100644 index 000000000..22f8f3b71 --- /dev/null +++ b/graphics/trade/stripes_bg2_map.bin @@ -0,0 +1 @@ +@ABCDEFGHIJKLMNOONMLKJIHHHFDCBA@@ABCDEFGHIJKLMNOONMLKJIHHHFDCBA@@ABCDEFGHIJKLMNOONMLKJIHHHFDCBA@@ABCDEFGHIJKLMNOONMLKJIHHHFDCBA@@ABCDEFGHIJKLMNOONMLKJIHHHFDCBA@@ABCDEFGHIJKLMNOONMLKJIHHHFDCBA@@ABCDEFGHIJKLMNOONMLKJIHHHFDCBA@@ABCDEFGHIJKLMNOONMLKJIHHHFDCBA@@ABCDEFGHIJKLMNOONMLKJIHHHFDCBA@@ABCDEFGHIJKLMNOONMLKJIHHHFDCBA@@ABCDEFGHIJKLMNOONMLKJIHHHFDCBA@@ABCDEFGHIJKLMNOONMLKJIHHHFDCBA@@ABCDEFGHIJKLMNOONMLKJIHHHFDCBA@@ABCDEFGHIJKLMNOONMLKJIHHHFDCBA@@ABCDEFGHIJKLMNOONMLKJIHHHFDCBA@@ABCDEFGHIJKLMNOONMLKJIHHHFDCBA@@ABCDEFGHIJKLMNOONMLKJIHHHFDCBA@@ABCDEFGHIJKLMNOONMLKJIHHHFDCBA@@ABCDEFGHIJKLMNOONMLKJIHHHFDCBA@@ABCDEFGHIJKLMNOONMLKJIHHHFDCBA@@ABCDEFGHIJKLMNOONMLKJIHHHFDCBA@@ABCDEFGHIJKLMNOONMLKJIHHHFDCBA@@ABCDEFGHIJKLMNOONMLKJIHHHFDCBA@@ABCDEFGHIJKLMNOONMLKJIHHHFDCBA@@ABCDEFGHIJKLMNOONMLKJIHHHFDCBA@@ABCDEFGHIJKLMNOONMLKJIHHHFDCBA@@ABCDEFGHIJKLMNOONMLKJIHHHFDCBA@@ABCDEFGHIJKLMNOONMLKJIHHHFDCBA@@ABCDEFGHIJKLMNOONMLKJIHHHFDCBA@@ABCDEFGHIJKLMNOONMLKJIHHHFDCBA@@ABCDEFGHIJKLMNOONMLKJIHHHFDCBA@@ABCDEFGHIJKLMNOONMLKJIHHHFDCBA@ \ No newline at end of file diff --git a/graphics/trade/stripes_bg3_map.bin b/graphics/trade/stripes_bg3_map.bin new file mode 100644 index 000000000..e4168474a --- /dev/null +++ b/graphics/trade/stripes_bg3_map.bin @@ -0,0 +1 @@ +P Q R S T U V W X Y Z [ \ ] ^ _ ^ ] \ [ Z Y X W V V U T S R Q P P Q R S T U V W X Y Z [ \ ] ^ _ ^ ] \ [ Z Y X W V V U T S R Q P P Q R S T U V W X Y Z [ \ ] ^ _ ^ ] \ [ Z Y X W V V U T S R Q P P Q R S T U V W X Y Z [ \ ] ^ _ ^ ] \ [ Z Y X W V V U T S R Q P P Q R S T U V W X Y Z [ \ ] ^ _ ^ ] \ [ Z Y X W V V U T S R Q P P Q R S T U V W X Y Z [ \ ] ^ _ ^ ] \ [ Z Y X W V V U T S R Q P P Q R S T U V W X Y Z [ \ ] ^ _ ^ ] \ [ Z Y X W V V U T S R Q P P Q R S T U V W X Y Z [ \ ] ^ _ ^ ] \ [ Z Y X W V V U T S R Q P P Q R S T U V W X Y Z [ \ ] ^ _ ^ ] \ [ Z Y X W V V U T S R Q P P Q R S T U V W X Y Z [ \ ] ^ _ ^ ] \ [ Z Y X W V V U T S R Q P P Q R S T U V W X Y Z [ \ ] ^ _ ^ ] \ [ Z Y X W V V U T S R Q P P Q R S T U V W X Y Z [ \ ] ^ _ ^ ] \ [ Z Y X W V V U T S R Q P P Q R S T U V W X Y Z [ \ ] ^ _ ^ ] \ [ Z Y X W V V U T S R Q P P Q R S T U V W X Y Z [ \ ] ^ _ ^ ] \ [ Z Y X W V V U T S R Q P P Q R S T U V W X Y Z [ \ ] ^ _ ^ ] \ [ Z Y X W V V U T S R Q P P Q R S T U V W X Y Z [ \ ] ^ _ ^ ] \ [ Z Y X W V V U T S R Q P P Q R S T U V W X Y Z [ \ ] ^ _ ^ ] \ [ Z Y X W V V U T S R Q P P Q R S T U V W X Y Z [ \ ] ^ _ ^ ] \ [ Z Y X W V V U T S R Q P P Q R S T U V W X Y Z [ \ ] ^ _ ^ ] \ [ Z Y X W V V U T S R Q P P Q R S T U V W X Y Z [ \ ] ^ _ ^ ] \ [ Z Y X W V V U T S R Q P P Q R S T U V W X Y Z [ \ ] ^ _ ^ ] \ [ Z Y X W V V U T S R Q P P Q R S T U V W X Y Z [ \ ] ^ _ ^ ] \ [ Z Y X W V V U T S R Q P P Q R S T U V W X Y Z [ \ ] ^ _ ^ ] \ [ Z Y X W V V U T S R Q P P Q R S T U V W X Y Z [ \ ] ^ _ ^ ] \ [ Z Y X W V V U T S R Q P P Q R S T U V W X Y Z [ \ ] ^ _ ^ ] \ [ Z Y X W V V U T S R Q P P Q R S T U V W X Y Z [ \ ] ^ _ ^ ] \ [ Z Y X W V V U T S R Q P P Q R S T U V W X Y Z [ \ ] ^ _ ^ ] \ [ Z Y X W V V U T S R Q P P Q R S T U V W X Y Z [ \ ] ^ _ ^ ] \ [ Z Y X W V V U T S R Q P P Q R S T U V W X Y Z [ \ ] ^ _ ^ ] \ [ Z Y X W V V U T S R Q P P Q R S T U V W X Y Z [ \ ] ^ _ ^ ] \ [ Z Y X W V V U T S R Q P P Q R S T U V W X Y Z [ \ ] ^ _ ^ ] \ [ Z Y X W V V U T S R Q P P Q R S T U V W X Y Z [ \ ] ^ _ ^ ] \ [ Z Y X W V V U T S R Q P \ No newline at end of file diff --git a/graphics/trade/text.pal b/graphics/trade/text.pal new file mode 100644 index 000000000..40426b71f --- /dev/null +++ b/graphics/trade/text.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +74 74 74 +255 0 0 +0 255 0 +0 0 255 +255 255 0 +0 255 255 +255 0 255 +213 213 205 +0 0 0 +0 0 0 +0 0 0 +255 255 255 +0 0 0 +115 115 115 +255 255 255 diff --git a/graphics/trade/unknown_3308C0.pal b/graphics/trade/unknown_3308C0.pal new file mode 100644 index 000000000..72cf8b7c9 --- /dev/null +++ b/graphics/trade/unknown_3308C0.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +255 57 8 +255 90 8 +255 131 8 +255 172 8 +255 213 8 +255 255 8 +255 255 131 +255 255 255 +255 255 0 +65 0 0 +115 16 0 +172 32 0 +230 57 8 +0 0 0 +0 0 0 diff --git a/graphics/trade/unknown_338EA4.pal b/graphics/trade/unknown_338EA4.pal new file mode 100644 index 000000000..346db3df8 --- /dev/null +++ b/graphics/trade/unknown_338EA4.pal @@ -0,0 +1,15 @@ +JASC-PAL +0100 +12 +148 197 255 +148 197 255 +148 197 255 +255 255 255 +255 255 255 +255 255 255 +148 197 255 +148 197 255 +148 197 255 +255 255 255 +255 255 255 +255 255 255 diff --git a/graphics/trade/wireless_signal_receive.pal b/graphics/trade/wireless_signal_receive.pal new file mode 100644 index 000000000..218390aa2 --- /dev/null +++ b/graphics/trade/wireless_signal_receive.pal @@ -0,0 +1,259 @@ +JASC-PAL +0100 +256 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +255 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +255 255 255 +172 172 172 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +255 255 255 +172 172 172 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +255 255 255 +172 172 172 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +255 255 255 +172 172 172 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +255 255 255 +172 172 172 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +255 255 255 +172 172 172 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +255 255 255 +172 172 172 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +255 255 255 +172 172 172 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +255 255 255 +172 172 172 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +255 255 255 +172 172 172 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +255 255 255 +172 172 172 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +255 255 255 +172 172 172 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +255 255 255 +172 172 172 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +255 255 255 +172 172 172 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +172 172 172 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +255 255 255 diff --git a/graphics/trade/wireless_signal_send.pal b/graphics/trade/wireless_signal_send.pal new file mode 100644 index 000000000..a5da8a543 --- /dev/null +++ b/graphics/trade/wireless_signal_send.pal @@ -0,0 +1,259 @@ +JASC-PAL +0100 +256 +0 0 0 +255 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +172 172 172 +255 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +172 172 172 +255 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +172 172 172 +255 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +172 172 172 +255 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +172 172 172 +255 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +172 172 172 +255 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +172 172 172 +255 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +172 172 172 +255 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +172 172 172 +255 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +172 172 172 +255 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +172 172 172 +255 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +172 172 172 +255 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +172 172 172 +255 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +172 172 172 +255 255 255 +0 0 0 +255 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +172 172 172 diff --git a/src/trade.c b/src/trade.c index f23ff5400..66c44a010 100644 --- a/src/trade.c +++ b/src/trade.c @@ -152,10 +152,10 @@ static const size_t gUnknown_8260814[] = { 0x528 // unk }; -static const u16 gTradeMovesBoxTilemap[] = INCBIN_U16("data/trade/unk_8260834.bin"); -static const u16 gTradePartyBoxTilemap[] = INCBIN_U16("data/trade/unk_8260A32.bin"); -static const u16 gUnknown_8260C30[] = INCBIN_U16("data/trade/unk_8260C30.bin"); -static const u16 gUnknown_8261430[] = INCBIN_U16("data/trade/unk_8261430.bin"); +static const u16 gTradeMovesBoxTilemap[] = INCBIN_U16("graphics/trade/moves_box_map.bin"); +static const u16 gTradePartyBoxTilemap[] = INCBIN_U16("graphics/trade/party_box_map.bin"); +static const u8 gTradeStripesBG2Tilemap[] = INCBIN_U8("graphics/trade/stripes_bg2_map.bin"); +static const u8 gTradeStripesBG3Tilemap[] = INCBIN_U8("graphics/trade/stripes_bg3_map.bin"); static const struct OamData gOamData_8261C30 = { .shape = SPRITE_SHAPE(32x16), @@ -253,7 +253,7 @@ static const struct SpriteTemplate gUnknown_8261CC8 = { .callback = SpriteCallbackDummy }; -static const u16 gUnknown_8261CE0[] = INCBIN_U16("data/trade/unk_8261CE0.gbapal"); +static const u16 gUnknown_8261CE0[] = INCBIN_U16("graphics/trade/text.gbapal"); static const struct SpritePalette gUnknown_8261D00 = { gUnknown_8261CE0, @@ -2866,10 +2866,10 @@ static void sub_804D694(u8 state) LoadPalette(gUnknown_8E9CEDC, 0x00, 0x60); LoadBgTiles(1, gUnknown_8E9CF5C, 0x1280, 0); CopyToBgTilemapBufferRect_ChangePalette(1, gUnknown_8E9E9FC, 0, 0, 32, 20, 0); - LoadBgTilemap(2, gUnknown_8260C30, 0x800, 0); + LoadBgTilemap(2, gTradeStripesBG2Tilemap, 0x800, 0); break; case 1: - LoadBgTilemap(3, gUnknown_8261430, 0x800, 0); + LoadBgTilemap(3, gTradeStripesBG3Tilemap, 0x800, 0); sub_804F284(0); sub_804F284(1); CopyBgTilemapBufferToVram(1); diff --git a/src/trade_scene.c b/src/trade_scene.c index ebb788e3d..3a80ba3de 100644 --- a/src/trade_scene.c +++ b/src/trade_scene.c @@ -78,20 +78,20 @@ struct TradeAnimationResources { /*0x94*/ u16 state; /*0x96*/ u8 filler_96[0xD2 - 0x96]; /*0xD2*/ u8 pokeballSpriteId; - /*0xD3*/ u8 unk_D3; - /*0xD4*/ u16 unk_D4; - /*0xD6*/ u16 unk_D6; + /*0xD3*/ u8 pokeballSpriteId2; + /*0xD4*/ u16 bg2texX; + /*0xD6*/ u16 bg2texY; /*0xD8*/ u16 unk_D8; /*0xDA*/ u16 unk_DA; - /*0xDC*/ u16 unk_DC; - /*0xDE*/ u16 unk_DE; + /*0xDC*/ u16 bg2srcX; + /*0xDE*/ u16 bg2srcY; /*0xE0*/ s16 bg1vofs; /*0xE2*/ s16 bg1hofs; /*0xE4*/ s16 bg2vofs; /*0xE6*/ s16 bg2hofs; /*0xE8*/ u16 sXY; /*0xEA*/ u16 unk_EA; - /*0xEC*/ u16 unk_EC; + /*0xEC*/ u16 bg2alpha; /*0xEE*/ bool8 isLinkTrade; /*0xF0*/ u16 tradeSpecies[2]; /*0xF4*/ u16 cachedMapMusic; @@ -137,6 +137,34 @@ void Task_AnimateWirelessSignal(u8 taskId); void c3_0805465C(u8 taskId); void sub_8054734(u8 taskId); +const u16 gTradeBallPalette[] = INCBIN_U16("graphics/trade/ball.gbapal"); +const u8 gTradeBallTiles[] = INCBIN_U8("graphics/trade/ball.4bpp"); +const u8 gUnknown_826267C[] = INCBIN_U8("graphics/trade/pokeball_symbol.8bpp"); +const u16 gUnknown_826407C[] = INCBIN_U16("graphics/trade/cable_closeup_map.bin"); +const u16 gUnknown_083307C0[] = INCBIN_U16("graphics/trade/pokeball_symbol_map.bin"); +const u16 sUnref_083308C0[] = INCBIN_U16("graphics/trade/unknown_3308C0.gbapal"); +const u16 gUnknown_826499C[] = INCBIN_U16("graphics/trade/gba.gbapal"); +const u16 gUnref_08330900[] = INCBIN_U16("graphics/trade/shadow.gbapal"); +const u16 gUnref_08330920[] = INCBIN_U16("graphics/trade/black.gbapal"); +const u16 gUnknown_82649FC[] = INCBIN_U16("graphics/trade/misc.gbapal"); +const u8 gTradeGlow1Tiles[] = INCBIN_U8("graphics/trade/glow1.4bpp"); +const u8 gTradeGlow2Tiles[] = INCBIN_U8("graphics/trade/glow2.4bpp"); +const u8 gTradeCableEndTiles[] = INCBIN_U8("graphics/trade/cable_end.4bpp"); +const u8 gTradeGBAScreenTiles[] = INCBIN_U8("graphics/trade/gba_screen.4bpp"); +const u16 gUnknown_826601C[] = INCBIN_U16("graphics/trade/shadow_map.bin"); +const u8 gUnknown_826701C[] = INCBIN_U8("graphics/trade/gba_affine.8bpp"); +const u8 sFiller_08335760[64] = {}; +const u8 gUnknown_826985C[] = INCBIN_U8("graphics/trade/gba_affine_map_cable.bin"); +const u8 gUnknown_826995C[] = INCBIN_U8("graphics/trade/gba_affine_map_wireless.bin"); +const u16 gUnknown_8269A5C[] = INCBIN_U16("graphics/trade/gba_map_wireless.bin"); +const u16 gUnknown_826AA5C[] = INCBIN_U16("graphics/trade/gba_map_cable.bin"); +const u32 gUnknown_3379A0Bin[] = INCBIN_U32("graphics/trade/unknown_3379A0.bin.lz"); +const u16 gUnknown_826BB5C[] = INCBIN_U16("graphics/trade/wireless_signal_send.gbapal"); +const u16 gUnknown_826BD5C[] = INCBIN_U16("graphics/trade/wireless_signal_receive.gbapal"); +const u16 gUnknown_826BF5C[] = INCBIN_U16("graphics/trade/black.gbapal"); +const u32 gWirelessSignal4bpp[] = INCBIN_U32("graphics/trade/wireless_signal.4bpp.lz"); +const u32 gUnknown_826C60C[] = INCBIN_U32("graphics/trade/wireless_signal.bin.lz"); + extern const u8 gUnknown_8261EC7[]; extern const u8 *const sTradeErrorOrStatusMessagePtrs[]; extern const u16 gTradeGlow2PaletteAnimTable[]; @@ -144,18 +172,6 @@ extern const struct SpriteSheet gUnknown_826CDD4; extern const struct SpritePalette gUnknown_826CDDC; extern const struct BgTemplate gUnknown_826D1D4[4]; extern const struct WindowTemplate gUnknown_826D1BC[]; -extern const u16 gUnknown_826AA5C[]; -extern const u16 gUnknown_8269A5C[]; -extern const u32 gUnknown_3379A0Bin[]; -extern const u16 gUnknown_826407C[]; -extern const u16 gUnknown_826BB5C[]; -extern const u16 gUnknown_826BD5C[]; -extern const u16 gUnknown_826BF5C[]; -extern const u16 gUnknown_826701C[]; -extern const u16 gUnknown_826985C[]; -extern const u16 gUnknown_826995C[]; -extern const u32 gWirelessSignal4bpp[]; -extern const u32 gUnknown_826C60C[]; extern const struct SpriteSheet gUnknown_826CE2C; extern const struct SpriteSheet gUnknown_826CE7C; extern const struct SpriteSheet gUnknown_826CEB0; @@ -240,7 +256,7 @@ void sub_804FE00(struct Sprite * sprite) void SetTradeBGAffine(void) { struct BgAffineDstData affine; - DoBgAffineSet(&affine, sTradeData->unk_D4 * 0x100, sTradeData->unk_D6 * 0x100, sTradeData->unk_DC, sTradeData->unk_DE, sTradeData->sXY, sTradeData->sXY, sTradeData->unk_EC); + DoBgAffineSet(&affine, sTradeData->bg2texX * 0x100, sTradeData->bg2texY * 0x100, sTradeData->bg2srcX, sTradeData->bg2srcY, sTradeData->sXY, sTradeData->sXY, sTradeData->bg2alpha); SetGpuReg(REG_OFFSET_BG2PA, affine.pa); SetGpuReg(REG_OFFSET_BG2PB, affine.pb); SetGpuReg(REG_OFFSET_BG2PC, affine.pc); @@ -374,14 +390,14 @@ void CB2_InitTradeAnim_LinkTrade(void) sTradeData->unk_8C = 0; sTradeData->state = 0; sTradeData->isLinkTrade = TRUE; - sTradeData->unk_D4 = 64; - sTradeData->unk_D6 = 64; + sTradeData->bg2texX = 64; + sTradeData->bg2texY = 64; sTradeData->unk_D8 = 0; sTradeData->unk_DA = 0; - sTradeData->unk_DC = 120; - sTradeData->unk_DE = 80; + sTradeData->bg2srcX = 120; + sTradeData->bg2srcY = 80; sTradeData->sXY = 256; - sTradeData->unk_EC = 0; + sTradeData->bg2alpha = 0; break; case 1: if (!gReceivedRemoteLinkPlayers) @@ -550,14 +566,14 @@ void CB2_InitTradeAnim_InGameTrade(void) sTradeData->isLinkTrade = FALSE; sTradeData->unk_8C = 0; sTradeData->state = 0; - sTradeData->unk_D4 = 64; - sTradeData->unk_D6 = 64; + sTradeData->bg2texX = 64; + sTradeData->bg2texY = 64; sTradeData->unk_D8 = 0; sTradeData->unk_DA = 0; - sTradeData->unk_DC = 120; - sTradeData->unk_DE = 80; + sTradeData->bg2srcX = 120; + sTradeData->bg2srcY = 80; sTradeData->sXY = 256; - sTradeData->unk_EC = 0; + sTradeData->bg2alpha = 0; sTradeData->timer = 0; gMain.state = 5; break; @@ -747,11 +763,11 @@ void SetTradeSequenceBgGpuRegs(u8 state) case 4: SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG2_ON | DISPCNT_OBJ_ON); SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(3) | BGCNT_CHARBASE(1) | BGCNT_256COLOR | BGCNT_SCREENBASE(18) | BGCNT_AFF128x128); - sTradeData->unk_D4 = 0x40; - sTradeData->unk_D6 = 0x5C; + sTradeData->bg2texX = 0x40; + sTradeData->bg2texY = 0x5C; sTradeData->sXY = 0x20; sTradeData->unk_EA = 0x400; - sTradeData->unk_EC = 0; + sTradeData->bg2alpha = 0; DmaCopyLarge16(3, gUnknown_826701C, (void *)BG_CHAR_ADDR(1), 0x2840, 0x1000); if (sTradeData->isCableTrade) { @@ -769,13 +785,13 @@ void SetTradeSequenceBgGpuRegs(u8 state) case 6: SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG2_ON | DISPCNT_OBJ_ON); SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(3) | BGCNT_CHARBASE(1) | BGCNT_256COLOR | BGCNT_SCREENBASE(18) | BGCNT_TXT256x256); - sTradeData->unk_D4 = 0x40; - sTradeData->unk_D6 = 0x5C; + sTradeData->bg2texX = 0x40; + sTradeData->bg2texY = 0x5C; sTradeData->sXY = 0x100; sTradeData->unk_EA = 0x80; - sTradeData->unk_DC = 0x78; - sTradeData->unk_DE = 0x50; - sTradeData->unk_EC = 0; + sTradeData->bg2srcX = 0x78; + sTradeData->bg2srcY = 0x50; + sTradeData->bg2alpha = 0; DmaCopyLarge16(3, gUnknown_826701C, BG_CHAR_ADDR(1), 0x2840, 0x1000); if (sTradeData->isCableTrade) { @@ -891,8 +907,8 @@ bool8 sub_8050F3C(void) case 12: if (gSprites[sTradeData->pokeballSpriteId].callback == SpriteCallbackDummy) { - sTradeData->unk_D3 = CreateSprite(&sTradePokeballSpriteTemplate, 120, 32, 0); - gSprites[sTradeData->unk_D3].callback = SpriteCB_TradePokeball_Outbound; + sTradeData->pokeballSpriteId2 = CreateSprite(&sTradePokeballSpriteTemplate, 120, 32, 0); + gSprites[sTradeData->pokeballSpriteId2].callback = SpriteCB_TradePokeball_Outbound; DestroySprite(&gSprites[sTradeData->pokeballSpriteId]); sTradeData->state++; } @@ -1208,21 +1224,21 @@ bool8 sub_8050F3C(void) } break; case 63: - sTradeData->unk_D3 = CreateSprite(&sTradePokeballSpriteTemplate, 120, -8, 0); - gSprites[sTradeData->unk_D3].data[3] = 74; - gSprites[sTradeData->unk_D3].callback = SpriteCB_TradePokeball_Inbound; - StartSpriteAnim(&gSprites[sTradeData->unk_D3], 1); - StartSpriteAffineAnim(&gSprites[sTradeData->unk_D3], 2); - BlendPalettes(1 << (16 + gSprites[sTradeData->unk_D3].oam.paletteNum), 16, RGB_WHITEALPHA); + sTradeData->pokeballSpriteId2 = CreateSprite(&sTradePokeballSpriteTemplate, 120, -8, 0); + gSprites[sTradeData->pokeballSpriteId2].data[3] = 74; + gSprites[sTradeData->pokeballSpriteId2].callback = SpriteCB_TradePokeball_Inbound; + StartSpriteAnim(&gSprites[sTradeData->pokeballSpriteId2], 1); + StartSpriteAffineAnim(&gSprites[sTradeData->pokeballSpriteId2], 2); + BlendPalettes(1 << (16 + gSprites[sTradeData->pokeballSpriteId2].oam.paletteNum), 16, RGB_WHITEALPHA); sTradeData->state++; sTradeData->timer = 0; break; case 64: - BeginNormalPaletteFade(1 << (16 + gSprites[sTradeData->unk_D3].oam.paletteNum), 1, 16, 0, RGB_WHITEALPHA); + BeginNormalPaletteFade(1 << (16 + gSprites[sTradeData->pokeballSpriteId2].oam.paletteNum), 1, 16, 0, RGB_WHITEALPHA); sTradeData->state++; break; case 65: - if (gSprites[sTradeData->unk_D3].callback == SpriteCallbackDummy) + if (gSprites[sTradeData->pokeballSpriteId2].callback == SpriteCallbackDummy) { HandleLoadSpecialPokePic(&gMonFrontPicTable[sTradeData->tradeSpecies[1]], gMonSpritesGfxPtr->sprites[3], sTradeData->tradeSpecies[1], sTradeData->monPersonalities[1]); sTradeData->state++; @@ -1235,8 +1251,8 @@ bool8 sub_8050F3C(void) gSprites[sTradeData->pokePicSpriteIdxs[1]].pos2.y = 0; StartSpriteAnim(&gSprites[sTradeData->pokePicSpriteIdxs[1]], 0); CreatePokeballSpriteToReleaseMon(sTradeData->pokePicSpriteIdxs[1], gSprites[sTradeData->pokePicSpriteIdxs[1]].oam.paletteNum, 120, 84, 2, 1, 20, 0xFFFFF); - FreeSpriteOamMatrix(&gSprites[sTradeData->unk_D3]); - DestroySprite(&gSprites[sTradeData->unk_D3]); + FreeSpriteOamMatrix(&gSprites[sTradeData->pokeballSpriteId2]); + DestroySprite(&gSprites[sTradeData->pokeballSpriteId2]); sTradeData->state++; break; case 67: @@ -1388,8 +1404,8 @@ bool8 sub_805232C(void) case 12: if (gSprites[sTradeData->pokeballSpriteId].callback == SpriteCallbackDummy) { - sTradeData->unk_D3 = CreateSprite(&sTradePokeballSpriteTemplate, 120, 32, 0); - gSprites[sTradeData->unk_D3].callback = SpriteCB_TradePokeball_Outbound; + sTradeData->pokeballSpriteId2 = CreateSprite(&sTradePokeballSpriteTemplate, 120, 32, 0); + gSprites[sTradeData->pokeballSpriteId2].callback = SpriteCB_TradePokeball_Outbound; DestroySprite(&gSprites[sTradeData->pokeballSpriteId]); sTradeData->state++; } @@ -1729,21 +1745,21 @@ bool8 sub_805232C(void) } break; case 63: - sTradeData->unk_D3 = CreateSprite(&sTradePokeballSpriteTemplate, 120, -8, 0); - gSprites[sTradeData->unk_D3].data[3] = 74; - gSprites[sTradeData->unk_D3].callback = SpriteCB_TradePokeball_Inbound; - StartSpriteAnim(&gSprites[sTradeData->unk_D3], 1); - StartSpriteAffineAnim(&gSprites[sTradeData->unk_D3], 2); - BlendPalettes(1 << (16 + gSprites[sTradeData->unk_D3].oam.paletteNum), 16, RGB_WHITEALPHA); + sTradeData->pokeballSpriteId2 = CreateSprite(&sTradePokeballSpriteTemplate, 120, -8, 0); + gSprites[sTradeData->pokeballSpriteId2].data[3] = 74; + gSprites[sTradeData->pokeballSpriteId2].callback = SpriteCB_TradePokeball_Inbound; + StartSpriteAnim(&gSprites[sTradeData->pokeballSpriteId2], 1); + StartSpriteAffineAnim(&gSprites[sTradeData->pokeballSpriteId2], 2); + BlendPalettes(1 << (16 + gSprites[sTradeData->pokeballSpriteId2].oam.paletteNum), 16, RGB_WHITEALPHA); sTradeData->state++; sTradeData->timer = 0; break; case 64: - BeginNormalPaletteFade(1 << (16 + gSprites[sTradeData->unk_D3].oam.paletteNum), 1, 16, 0, RGB_WHITEALPHA); + BeginNormalPaletteFade(1 << (16 + gSprites[sTradeData->pokeballSpriteId2].oam.paletteNum), 1, 16, 0, RGB_WHITEALPHA); sTradeData->state++; break; case 65: - if (gSprites[sTradeData->unk_D3].callback == SpriteCallbackDummy) + if (gSprites[sTradeData->pokeballSpriteId2].callback == SpriteCallbackDummy) { HandleLoadSpecialPokePic(&gMonFrontPicTable[sTradeData->tradeSpecies[1]], gMonSpritesGfxPtr->sprites[3], sTradeData->tradeSpecies[1], sTradeData->monPersonalities[1]); sTradeData->state++; @@ -1756,8 +1772,8 @@ bool8 sub_805232C(void) gSprites[sTradeData->pokePicSpriteIdxs[1]].pos2.y = 0; StartSpriteAnim(&gSprites[sTradeData->pokePicSpriteIdxs[1]], 0); CreatePokeballSpriteToReleaseMon(sTradeData->pokePicSpriteIdxs[1], gSprites[sTradeData->pokePicSpriteIdxs[1]].oam.paletteNum, 120, 84, 2, 1, 20, 0xFFFFF); - FreeSpriteOamMatrix(&gSprites[sTradeData->unk_D3]); - DestroySprite(&gSprites[sTradeData->unk_D3]); + FreeSpriteOamMatrix(&gSprites[sTradeData->pokeballSpriteId2]); + DestroySprite(&gSprites[sTradeData->pokeballSpriteId2]); sTradeData->state++; break; case 67: -- cgit v1.2.3 From 4fae033d1a6ba2520baca924c544a8d7195ff024 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 30 Oct 2019 16:01:31 -0400 Subject: Finish trade_scene data --- data/ingame_trades.inc | 174 ------------- data/trade.s | 372 --------------------------- include/trade_scene.h | 11 + ld_script.txt | 1 - src/data/ingame_trades.h | 144 +++++++++++ src/trade_scene.c | 641 ++++++++++++++++++++++++++++++++++++++--------- 6 files changed, 675 insertions(+), 668 deletions(-) delete mode 100644 data/ingame_trades.inc delete mode 100644 data/trade.s create mode 100644 src/data/ingame_trades.h diff --git a/data/ingame_trades.inc b/data/ingame_trades.inc deleted file mode 100644 index ef0bf0993..000000000 --- a/data/ingame_trades.inc +++ /dev/null @@ -1,174 +0,0 @@ -gInGameTrades:: @ 826CF8C - .string "MIMIEN$", 11 - .align 1 - .2byte SPECIES_MR_MIME @ species - .byte 20, 15, 17, 24, 23, 22 @ IVs - .byte FALSE @ has second ability - .align 2 - .4byte 1985 @ OT ID - .byte 5, 5, 5, 30, 5 @ contest stats - .align 2 - .4byte 0x00009cae @ personality - .2byte ITEM_NONE @ held item - .byte 255 @ mail index - .string "REYLEY$", 11 - .byte MALE @ OT gender - .byte 10 @ sheen - .2byte SPECIES_ABRA @ species requested - .align 2 - - .string "ZYNX$", 11 - .align 1 - .2byte SPECIES_JYNX @ species - .byte 18, 17, 18, 22, 25, 21 @ IVs - .byte FALSE @ has second ability - .align 2 - .4byte 36728 @ OT ID - .byte 5, 30, 5, 5, 5 @ contest stats - .align 2 - .4byte 0x498a2e1d @ personality - .2byte ITEM_FAB_MAIL @ held item - .byte 0 @ mail index - .string "DONTAE$", 11 - .byte MALE @ OT gender - .byte 10 @ sheen - .2byte SPECIES_POLIWHIRL @ species requested - .align 2 - - .string "MS. NIDO$", 11 - .align 1 - .2byte SPECIES_NIDORAN_F @ species - .byte 22, 18, 25, 19, 15, 22 @ IVs - .byte FALSE @ has second ability - .align 2 - .4byte 63184 @ OT ID - .byte 5, 5, 5, 5, 30 @ contest stats - .align 2 - .4byte 0x4c970b89 @ personality - .2byte ITEM_TINY_MUSHROOM @ held item - .byte 255 @ mail index - .string "SAIGE$", 11 - .byte FEMALE @ OT gender - .byte 10 @ sheen - .2byte SPECIES_NIDORAN_M @ species requested - .align 2 - - .string "CH'DING$", 11 - .align 1 - .2byte SPECIES_FARFETCHD @ species - .byte 20, 25, 21, 24, 15, 20 @ IVs - .byte FALSE @ has second ability - .align 2 - .4byte 8810 @ OT ID - .byte 30, 5, 5, 5, 5 @ contest stats - .align 2 - .4byte 0x151943d7 @ personality - .2byte ITEM_STICK @ held item - .byte 255 @ mail index - .string "ELYSSA$", 11 - .byte MALE @ OT gender - .byte 10 @ sheen - .2byte SPECIES_SPEAROW @ species requested - .align 2 - - .string "NINA$", 11 - .align 1 - .2byte SPECIES_NIDORINA @ species - .byte 22, 25, 18, 19, 22, 15 @ IVs - .byte FALSE @ has second ability - .align 2 - .4byte 13637 @ OT ID - .byte 5, 5, 30, 5, 5 @ contest stats - .align 2 - .4byte 0x00eeca15 @ personality - .2byte ITEM_NONE @ held item - .byte 255 @ mail index - .string "TURNER$", 11 - .byte MALE @ OT gender - .byte 10 @ sheen - .2byte SPECIES_NIDORINO @ species requested - .align 2 - - .string "MARC$", 11 - .align 1 - .2byte SPECIES_LICKITUNG @ species - .byte 24, 19, 21, 15, 23, 21 @ IVs - .byte FALSE @ has second ability - .align 2 - .4byte 1239 @ OT ID - .byte 5, 5, 5, 5, 30 @ contest stats - .align 2 - .4byte 0x451308ab @ personality - .2byte ITEM_NONE @ held item - .byte 255 @ mail index - .string "HADEN$", 11 - .byte MALE @ OT gender - .byte 10 @ sheen - .2byte SPECIES_GOLDUCK @ species requested - .align 2 - - .string "ESPHERE$", 11 - .align 1 - .2byte SPECIES_ELECTRODE @ species - .byte 19, 16, 18, 25, 25, 19 @ IVs - .byte TRUE @ has second ability - .align 2 - .4byte 50298 @ OT ID - .byte 30, 5, 5, 5, 5 @ contest stats - .align 2 - .4byte 0x06341016 @ personality - .2byte ITEM_NONE @ held item - .byte 255 @ mail index - .string "CLIFTON$", 11 - .byte MALE @ OT gender - .byte 10 @ sheen - .2byte SPECIES_RAICHU @ species requested - .align 2 - - .string "TANGENY$", 11 - .align 1 - .2byte SPECIES_TANGELA @ species - .byte 22, 17, 25, 16, 23, 20 @ IVs - .byte FALSE @ has second ability - .align 2 - .4byte 60042 @ OT ID - .byte 5, 5, 30, 5, 5 @ contest stats - .align 2 - .4byte 0x5c77ecfa @ personality - .2byte ITEM_STARDUST @ held item - .byte 255 @ mail index - .string "NORMA$", 11 - .byte FEMALE @ OT gender - .byte 10 @ sheen - .2byte SPECIES_VENONAT @ species requested - .align 2 - - .string "SEELOR$", 11 - .align 1 - .2byte SPECIES_SEEL @ species - .byte 24, 15, 22, 16, 23, 22 @ IVs - .byte FALSE @ has second ability - .align 2 - .4byte 9853 @ OT ID - .byte 5, 5, 5, 5, 30 @ contest stats - .align 2 - .4byte 0x482cac89 @ personality - .2byte ITEM_NONE @ held item - .byte 255 @ mail index - .string "GARETT$", 11 - .byte MALE @ OT gender - .byte 10 @ sheen - .2byte SPECIES_PONYTA @ species requested - .align 2 - -sInGameTradeMailMessages:: @ 826D1A8 - .2byte EC_WORD_THAT_S - .2byte EC_WORD_A - .2byte EC_WORD_HEALTHY - .2byte EC_POKEMON2(JYNX) - .2byte EC_WORD_EXCL - .2byte EC_WORD_BE - .2byte EC_WORD_KIND - .2byte EC_WORD_TO - .2byte EC_WORD_IT - .2byte 0 diff --git a/data/trade.s b/data/trade.s deleted file mode 100644 index 16fde1e35..000000000 --- a/data/trade.s +++ /dev/null @@ -1,372 +0,0 @@ -#include "constants/items.h" -#include "constants/species.h" -#include "constants/easy_chat.h" -#define RGB(r, g, b) ((r) | ((g) << 5) | ((b) << 10)) - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2, 0 - -gOamData_826CD00:: - .4byte 0x40000100, 0x00000000 - -gAnimCmd_826CD08:: - obj_image_anim_frame 0x00, 3 - obj_image_anim_frame 0x04, 3 - obj_image_anim_frame 0x08, 3 - obj_image_anim_frame 0x0c, 3 - obj_image_anim_frame 0x10, 3 - obj_image_anim_frame 0x14, 3 - obj_image_anim_frame 0x18, 3 - obj_image_anim_frame 0x1c, 3 - obj_image_anim_frame 0x20, 3 - obj_image_anim_frame 0x24, 3 - obj_image_anim_frame 0x28, 3 - obj_image_anim_frame 0x2c, 3 - obj_image_anim_loop 1 - obj_image_anim_frame 0x00, 3 - obj_image_anim_end - -gAnimCmd_826CD44:: - obj_image_anim_frame 0x00, 3 - obj_image_anim_frame 0x04, 3 - obj_image_anim_frame 0x08, 3 - obj_image_anim_frame 0x0c, 3 - obj_image_anim_frame 0x10, 3 - obj_image_anim_frame 0x14, 3 - obj_image_anim_frame 0x18, 3 - obj_image_anim_frame 0x1c, 3 - obj_image_anim_frame 0x20, 3 - obj_image_anim_frame 0x24, 3 - obj_image_anim_frame 0x28, 3 - obj_image_anim_frame 0x2c, 3 - obj_image_anim_loop 2 - obj_image_anim_frame 0x00, 3 - obj_image_anim_end - -gSpriteAnimTable_826CD80:: - .4byte gAnimCmd_826CD08 - .4byte gAnimCmd_826CD44 - -gAffineAnimCmd_826CD88:: - obj_rot_scal_anim_frame 0x0000, 0x0000, 0x00, 0x01 - obj_rot_scal_anim_end - -gAffineAnimCmd_826CD98:: - obj_rot_scal_anim_frame 0xfff8, 0x0000, 0x00, 0x14 - obj_rot_scal_anim_end - -gAffineAnimCmd_826CDA8:: - obj_rot_scal_anim_frame 0x0060, 0x0100, 0x00, 0x00 - obj_rot_scal_anim_frame 0x0000, 0x0000, 0x00, 0x05 - obj_rot_scal_anim_frame 0x0008, 0x0000, 0x00, 0x14 - obj_rot_scal_anim_end - -gSpriteAffineAnimTable_826CDC8:: - .4byte gAffineAnimCmd_826CD88 - .4byte gAffineAnimCmd_826CD98 - .4byte gAffineAnimCmd_826CDA8 - -gUnknown_826CDD4:: @ 826CDD4 - obj_tiles gTradeBallTiles, 0x0600, 5557 - -gUnknown_826CDDC:: @ 826CDDC - obj_pal gTradeBallPalette, 5558 - -sTradePokeballSpriteTemplate:: @ 826CDE4 - spr_template 5557, 5558, gOamData_826CD00, gSpriteAnimTable_826CD80, NULL, gSpriteAffineAnimTable_826CDC8, SpriteCB_TradePokeball_Default - -gOamData_826CDFC:: - .4byte 0x80000500, 0x00000400 - -gAnimCmd_826CE04:: - obj_image_anim_frame 0, 5, OBJ_IMAGE_ANIM_H_FLIP | OBJ_IMAGE_ANIM_V_FLIP - obj_image_anim_end - -gSpriteAnimTable_826CE0C:: - .4byte gAnimCmd_826CE04 - -gAffineAnimCmd_826CE10:: - obj_rot_scal_anim_frame -10, -10, 0, 5 - obj_rot_scal_anim_frame 10, 10, 0, 5 - obj_rot_scal_anim_jump 0 - -gSpriteAffineAnimTable_826CE28:: - .4byte gAffineAnimCmd_826CE10 - -gUnknown_826CE2C:: @ 826CE2C - obj_tiles gTradeGlow1Tiles, 0x0200, 5550 - -gUnknown_826CE34:: @ 826CE34 - obj_pal gUnknown_82649FC, 5551 - -gUnknown_826CE3C:: @ 826CE3C - obj_pal gUnknown_826499C, 5555 - -gUnknown_826CE44:: @ 826CE44 - spr_template 5550, 5551, gOamData_826CDFC, gSpriteAnimTable_826CE0C, NULL, gSpriteAffineAnimTable_826CE28, SpriteCB_TradeGlowCable - -gOamData_826CE5C:: - .4byte 0x80008000, 0x00000400 - -gAnimCmd_826CE64:: - obj_image_anim_frame 0, 5, OBJ_IMAGE_ANIM_H_FLIP | OBJ_IMAGE_ANIM_V_FLIP - obj_image_anim_end - -gAnimCmd_826CE6C:: - obj_image_anim_frame 8, 5, OBJ_IMAGE_ANIM_H_FLIP | OBJ_IMAGE_ANIM_V_FLIP - obj_image_anim_end - -gSpriteAnimTable_826CE74:: - .4byte gAnimCmd_826CE64 - .4byte gAnimCmd_826CE6C - -gUnknown_826CE7C:: @ 826CE7C - obj_tiles gTradeGlow2Tiles, 0x0300, 5552 - -sGlowBallSpriteTemplate:: @ 826CE84 - spr_template 5552, 5551, gOamData_826CE5C, gSpriteAnimTable_826CE74, NULL, gDummySpriteAffineAnimTable, SpriteCB_TradeGlowCore - -gOamData_826CE9C:: - .4byte 0x80008000, 0x00000400 - -gAnimCmd_826CEA4:: - obj_image_anim_frame 0, 10 - obj_image_anim_end - -gSpriteAnimTable_826CEAC:: - .4byte gAnimCmd_826CEA4 - -gUnknown_826CEB0:: @ 826CEB0 - obj_tiles gTradeCableEndTiles, 0x0100, 5554 - -sGameLinkCableEndSpriteTemplate:: @ 826CEB8 - spr_template 5554, 5555, gOamData_826CE9C, gSpriteAnimTable_826CEAC, NULL, gDummySpriteAffineAnimTable, SpriteCB_GameLinkCableEnd_Outbound - -gOamData_826CED0:: - .4byte 0xc0004000, 0x00000400 - -gAnimCmd_826CED8:: - obj_image_anim_frame 0x00, 2, OBJ_IMAGE_ANIM_H_FLIP | OBJ_IMAGE_ANIM_V_FLIP - obj_image_anim_frame 0x20, 2, OBJ_IMAGE_ANIM_H_FLIP | OBJ_IMAGE_ANIM_V_FLIP - obj_image_anim_frame 0x40, 2, OBJ_IMAGE_ANIM_H_FLIP | OBJ_IMAGE_ANIM_V_FLIP - obj_image_anim_frame 0x60, 2, OBJ_IMAGE_ANIM_H_FLIP | OBJ_IMAGE_ANIM_V_FLIP - obj_image_anim_frame 0x40, 2, OBJ_IMAGE_ANIM_H_FLIP | OBJ_IMAGE_ANIM_V_FLIP - obj_image_anim_frame 0x20, 2, OBJ_IMAGE_ANIM_H_FLIP | OBJ_IMAGE_ANIM_V_FLIP - obj_image_anim_frame 0x00, 2, OBJ_IMAGE_ANIM_H_FLIP | OBJ_IMAGE_ANIM_V_FLIP - obj_image_anim_loop 8 - obj_image_anim_end - -gAnimCmd_826CEFC:: - obj_image_anim_frame 0x00, 2, OBJ_IMAGE_ANIM_H_FLIP | OBJ_IMAGE_ANIM_V_FLIP - obj_image_anim_frame 0x20, 2, OBJ_IMAGE_ANIM_H_FLIP | OBJ_IMAGE_ANIM_V_FLIP - obj_image_anim_frame 0x40, 2, OBJ_IMAGE_ANIM_H_FLIP | OBJ_IMAGE_ANIM_V_FLIP - obj_image_anim_frame 0x60, 2, OBJ_IMAGE_ANIM_H_FLIP | OBJ_IMAGE_ANIM_V_FLIP - obj_image_anim_frame 0x40, 2, OBJ_IMAGE_ANIM_H_FLIP | OBJ_IMAGE_ANIM_V_FLIP - obj_image_anim_frame 0x20, 2, OBJ_IMAGE_ANIM_H_FLIP | OBJ_IMAGE_ANIM_V_FLIP - obj_image_anim_frame 0x00, 2, OBJ_IMAGE_ANIM_H_FLIP | OBJ_IMAGE_ANIM_V_FLIP - obj_image_anim_loop 2 - obj_image_anim_end - -gSpriteAnimTable_826CF20:: - .4byte gAnimCmd_826CED8 - -gSpriteAnimTable_826CF24:: - .4byte gAnimCmd_826CEFC - -gUnknown_826CF28:: @ 826CF28 - obj_tiles gTradeGBAScreenTiles, 0x1000, 5556 - -gUnknown_826CF30:: @ 826CF30 - spr_template 5556, 5555, gOamData_826CED0, gSpriteAnimTable_826CF20, NULL, gDummySpriteAffineAnimTable, sub_804FE00 - -gUnknown_826CF48:: @ 826CF48 - spr_template 5556, 5555, gOamData_826CED0, gSpriteAnimTable_826CF24, NULL, gDummySpriteAffineAnimTable, sub_804FE00 - -gTradeGlow2PaletteAnimTable:: @ 826CF60 - .2byte RGB(18, 24, 31) - .2byte RGB(18, 24, 31) - .2byte RGB(18, 24, 31) - .2byte RGB(31, 31, 31) - .2byte RGB(31, 31, 31) - .2byte RGB(31, 31, 31) - .2byte RGB(18, 24, 31) - .2byte RGB(18, 24, 31) - .2byte RGB(18, 24, 31) - .2byte RGB(31, 31, 31) - .2byte RGB(31, 31, 31) - .2byte RGB(31, 31, 31) - -gAffineAnimCmd_826CF78:: - obj_rot_scal_anim_frame 0xFF00, 0x0100, 0x00, 0x00 - obj_rot_scal_anim_jump 0 - -gUnknown_826CF88:: @ 826CF88 - .4byte gAffineAnimCmd_826CF78 - - .include "data/ingame_trades.inc" - -gUnknown_826D1BC:: @ 826D1BC - .byte 0, 2, 15, 26, 4, 0 - .2byte 0x0040 - @ { - @ .bg = 0, - @ .tilemapLeft = 2, - @ .tilemapTop = 15, - @ .width = 26, - @ .height = 4, - @ .paletteNum = 0, - @ .baseBlock = 0x0040 - @ } - .byte 255, 0, 0, 0, 0, 0 - .2byte 0x0000 - @ { - @ .bg = 255, - @ .tilemapLeft = 0, - @ .tilemapTop = 0, - @ .width = 0, - @ .height = 0, - @ .paletteNum = 0, - @ .baseBlock = 0x0000 - @ } - -gUnknown_826D1CC:: @ 826D1CC - .byte 0, 21, 9, 6, 4, 15 - .2byte 0x00bc - @ { - @ .bg = 0, - @ .tilemapLeft = 21, - @ .tilemapTop = 9, - @ .width = 6, - @ .height = 4, - @ .paletteNum = 15, - @ .baseBlock = 0x00bc - @ } - -gUnknown_826D1D4:: @ 826D1D4 - .4byte 0x000001fc - @ { - @ .bg = 0, - @ .charBaseIndex = 3, - @ .mapBaseIndex = 31, - @ .screenSize = 0, - @ .paletteMode = 0, - @ .priority = 0, - @ .baseTile = 0x0000 - @ } - .4byte 0x00002051 - @ { - @ .bg = 1, - @ .charBaseIndex = 0, - @ .mapBaseIndex = 5, - @ .screenSize = 0, - @ .paletteMode = 0, - @ .priority = 2, - @ .baseTile = 0x0000 - @ } - .4byte 0x00002326 - @ { - @ .bg = 2, - @ .charBaseIndex = 1, - @ .mapBaseIndex = 18, - @ .screenSize = 1, - @ .paletteMode = 0, - @ .priority = 2, - @ .baseTile = 0x0000 - @ } - .4byte 0x00003063 - @ { - @ .bg = 3, - @ .charBaseIndex = 0, - @ .mapBaseIndex = 6, - @ .screenSize = 0, - @ .paletteMode = 0, - @ .priority = 3, - @ .baseTile = 0x0000 - @ } - -gUnknown_826D1E4:: @ 826D1E4 - .byte 0x00 - .byte 0x00 - .byte 0x01 - .byte 0x00 - .byte 0x01 - .byte 0x00 - .byte 0x01 - .byte 0x01 - .byte 0x01 - .byte 0x01 - .byte 0x02 - .byte 0x02 - .byte 0x02 - .byte 0x02 - .byte 0x03 - .byte 0x03 - .byte 0x03 - .byte 0x03 - .byte 0x04 - .byte 0x04 - .byte 0x04 - .byte 0x04 - .byte 0xfc - .byte 0xfc - .byte 0xfc - .byte 0xfd - .byte 0xfd - .byte 0xfd - .byte 0xfd - .byte 0xfe - .byte 0xfe - .byte 0xfe - .byte 0xfe - .byte 0xff - .byte 0xff - .byte 0xff - .byte 0xff - .byte 0x00 - .byte 0xff - .byte 0x00 - .byte 0xff - .byte 0x00 - .byte 0x00 - .byte 0x00 - - .incbin "baserom.gba", 0x26D210, 0x40 - -gUnknown_826D250:: @ 826D250 - .byte 0x00, 0x01 - .byte 0x01, 0x01 - .byte 0x02, 0x01 - .byte 0x03, 0x01 - .byte 0x04, 0x01 - .byte 0x05, 0x02 - .byte 0x06, 0x02 - .byte 0x07, 0x02 - .byte 0x08, 0x02 - .byte 0x09, 0x02 - .byte 0x0a, 0x03 - .byte 0x0b, 0x03 - .byte 0x0c, 0x03 - .byte 0x0d, 0x04 - .byte 0x0e, 0x05 - .byte 0x0f, 0x02 - .byte 0x00, 0x01 - .byte 0x01, 0x01 - .byte 0x02, 0x01 - .byte 0x03, 0x01 - .byte 0x04, 0x01 - .byte 0x05, 0x02 - .byte 0x06, 0x02 - .byte 0x07, 0x02 - .byte 0x08, 0x02 - .byte 0x09, 0x02 - .byte 0x0a, 0x03 - .byte 0x0b, 0x03 - .byte 0x0c, 0x03 - .byte 0x0d, 0x04 - .byte 0x0e, 0x05 - .byte 0x10, 0x01 - .byte 0x10, 0xff - - .align 2, 0 diff --git a/include/trade_scene.h b/include/trade_scene.h index 025e2b237..347df033f 100644 --- a/include/trade_scene.h +++ b/include/trade_scene.h @@ -2,5 +2,16 @@ #define GUARD_TRADE_SCENE_H void CB2_InitTradeAnim_LinkTrade(void); +void CreateInGameTradePokemon(void); +void DoInGameTradeScene(void); +void DrawTextOnTradeWindow(u8 windowId, const u8 *str, s8 speed); +u16 GetInGameTradeSpeciesInfo(void); +u16 GetTradeSpecies(void); +void sub_805049C(void); +void sub_80504B0(void); +void sub_80544FC(void); + +extern const u16 gUnknown_826601C[]; +extern const struct WindowTemplate gUnknown_826D1CC; #endif //GUARD_TRADE_SCENE_H diff --git a/ld_script.txt b/ld_script.txt index b66aa6b85..f8e33aa9f 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -402,7 +402,6 @@ SECTIONS { data/pokeball.o(.rodata); src/trade.o(.rodata); src/trade_scene.o(.rodata); - data/trade.o(.rodata); data/overworld.o(.rodata); data/tilesets.o(.rodata); data/maps.o(.rodata); diff --git a/src/data/ingame_trades.h b/src/data/ingame_trades.h new file mode 100644 index 000000000..102b6865f --- /dev/null +++ b/src/data/ingame_trades.h @@ -0,0 +1,144 @@ +const struct InGameTrade gInGameTrades[] = { + { + .nickname = _("MIMIEN"), + .species = SPECIES_MR_MIME, + .ivs = {20, 15, 17, 24, 23, 22}, + .abilityNum = FALSE, + .otId = 1985, + .conditions = {5, 5, 5, 30, 5}, + .personality = 0x00009cae, + .heldItem = ITEM_NONE, + .mailNum = 255, + .otName = _("REYLEY"), + .otGender = MALE, + .sheen = 10, + .requestedSpecies = SPECIES_ABRA + }, { + .nickname = _("ZYNX"), + .species = SPECIES_JYNX, + .ivs = {18, 17, 18, 22, 25, 21}, + .abilityNum = FALSE, + .otId = 36728, + .conditions = {5, 30, 5, 5, 5}, + .personality = 0x498a2e1d, + .heldItem = ITEM_FAB_MAIL, + .mailNum = 0, + .otName = _("DONTAE"), + .otGender = MALE, + .sheen = 10, + .requestedSpecies = SPECIES_POLIWHIRL + }, { + .nickname = _("MS. NIDO"), + .species = SPECIES_NIDORAN_F, + .ivs = {22, 18, 25, 19, 15, 22}, + .abilityNum = FALSE, + .otId = 63184, + .conditions = {5, 5, 5, 5, 30}, + .personality = 0x4c970b89, + .heldItem = ITEM_TINY_MUSHROOM, + .mailNum = 255, + .otName = _("SAIGE"), + .otGender = FEMALE, + .sheen = 10, + .requestedSpecies = SPECIES_NIDORAN_M + }, { + .nickname = _("CH'DING"), + .species = SPECIES_FARFETCHD, + .ivs = {20, 25, 21, 24, 15, 20}, + .abilityNum = FALSE, + .otId = 8810, + .conditions = {30, 5, 5, 5, 5}, + .personality = 0x151943d7, + .heldItem = ITEM_STICK, + .mailNum = 255, + .otName = _("ELYSSA"), + .otGender = MALE, + .sheen = 10, + .requestedSpecies = SPECIES_SPEAROW + }, { + .nickname = _("NINA"), + .species = SPECIES_NIDORINA, + .ivs = {22, 25, 18, 19, 22, 15}, + .abilityNum = FALSE, + .otId = 13637, + .conditions = {5, 5, 30, 5, 5}, + .personality = 0x00eeca15, + .heldItem = ITEM_NONE, + .mailNum = 255, + .otName = _("TURNER"), + .otGender = MALE, + .sheen = 10, + .requestedSpecies = SPECIES_NIDORINO + }, { + .nickname = _("MARC"), + .species = SPECIES_LICKITUNG, + .ivs = {24, 19, 21, 15, 23, 21}, + .abilityNum = FALSE, + .otId = 1239, + .conditions = {5, 5, 5, 5, 30}, + .personality = 0x451308ab, + .heldItem = ITEM_NONE, + .mailNum = 255, + .otName = _("HADEN"), + .otGender = MALE, + .sheen = 10, + .requestedSpecies = SPECIES_GOLDUCK + }, { + .nickname = _("ESPHERE"), + .species = SPECIES_ELECTRODE, + .ivs = {19, 16, 18, 25, 25, 19}, + .abilityNum = TRUE, + .otId = 50298, + .conditions = {30, 5, 5, 5, 5}, + .personality = 0x06341016, + .heldItem = ITEM_NONE, + .mailNum = 255, + .otName = _("CLIFTON"), + .otGender = MALE, + .sheen = 10, + .requestedSpecies = SPECIES_RAICHU + }, { + .nickname = _("TANGENY"), + .species = SPECIES_TANGELA, + .ivs = {22, 17, 25, 16, 23, 20}, + .abilityNum = FALSE, + .otId = 60042, + .conditions = {5, 5, 30, 5, 5}, + .personality = 0x5c77ecfa, + .heldItem = ITEM_STARDUST, + .mailNum = 255, + .otName = _("NORMA"), + .otGender = FEMALE, + .sheen = 10, + .requestedSpecies = SPECIES_VENONAT + }, + { + .nickname = _("SEELOR"), + .species = SPECIES_SEEL, + .ivs = {24, 15, 22, 16, 23, 22}, + .abilityNum = FALSE, + .otId = 9853, + .conditions = {5, 5, 5, 5, 30}, + .personality = 0x482cac89, + .heldItem = ITEM_NONE, + .mailNum = 255, + .otName = _("GARETT"), + .otGender = MALE, + .sheen = 10, + .requestedSpecies = SPECIES_PONYTA + } +}; + +const u16 sInGameTradeMailMessages[][10] = { + { + EC_WORD_THAT_S, + EC_WORD_A, + EC_WORD_HEALTHY, + EC_POKEMON2(JYNX), + EC_WORD_EXCL, + EC_WORD_BE, + EC_WORD_KIND, + EC_WORD_TO, + EC_WORD_IT + } +}; diff --git a/src/trade_scene.c b/src/trade_scene.c index 3a80ba3de..bcde7a55d 100644 --- a/src/trade_scene.c +++ b/src/trade_scene.c @@ -35,6 +35,7 @@ #include "save.h" #include "load_save.h" #include "random.h" +#include "trade_scene.h" #include "constants/species.h" #include "constants/items.h" #include "constants/easy_chat.h" @@ -108,90 +109,488 @@ struct TradeAnimationResources { /*0x10C*/ u8 win0bottom; }; -EWRAM_DATA struct TradeAnimationResources * sTradeData = NULL; - -void CB2_InitTradeAnim_LinkTrade(void); -void sub_805049C(void); -void sub_80504B0(void); -void TradeAnimInit_LoadGfx(void); -void CB2_RunTradeAnim_InGameTrade(void); -void SetTradeSequenceBgGpuRegs(u8 idx); -void sub_8050DE0(void); -void sub_8050E24(void); -u8 sub_8050F14(void); -u8 sub_8050F3C(void); -u8 sub_805232C(void); -void SpriteCB_TradePokeball_Outbound(struct Sprite * sprite); -void SpriteCB_TradePokeball_Outbound2(struct Sprite * sprite); -void SpriteCB_TradePokeball_Inbound(struct Sprite * sprite); -void BufferInGameTradeMonName(void); +static EWRAM_DATA struct TradeAnimationResources * sTradeData = NULL; + +static void SpriteCB_TradeGlowCable(struct Sprite * sprite); +static void SpriteCB_TradeGlowWireless(struct Sprite * sprite); +static void SpriteCB_TradeGlowCore(struct Sprite * sprite); +static void SpriteCB_GameLinkCableEnd_Outbound(struct Sprite * sprite); +static void SpriteCB_GameLinkCableEnd_Inbound(struct Sprite * sprite); +static void sub_804FE00(struct Sprite * sprite); +static void TradeAnimInit_LoadGfx(void); +static void CB2_RunTradeAnim_InGameTrade(void); +static void SetTradeSequenceBgGpuRegs(u8 idx); +static void sub_8050DE0(void); +static void sub_8050E24(void); +static u8 sub_8050F14(void); +static u8 sub_8050F3C(void); +static u8 sub_805232C(void); +static void SpriteCB_TradePokeball_Default(struct Sprite * sprite); +static void SpriteCB_TradePokeball_Outbound(struct Sprite * sprite); +static void SpriteCB_TradePokeball_Outbound2(struct Sprite * sprite); +static void SpriteCB_TradePokeball_Inbound(struct Sprite * sprite); +static void BufferInGameTradeMonName(void); static void GetInGameTradeMail(struct MailStruct * mail, const struct InGameTrade * inGameTrade); -void CB2_RunTradeAnim_LinkTrade(void); -void sub_8053E1C(void); -void sub_8053E8C(void); -void sub_80543C4(void); -void sub_8054470(u8 taskId); -void CheckPartnersMonForRibbons(void); -void DrawTextOnTradeWindow(u8 windowId, const u8 *str, s8 speed); -void Task_AnimateWirelessSignal(u8 taskId); -void c3_0805465C(u8 taskId); -void sub_8054734(u8 taskId); - -const u16 gTradeBallPalette[] = INCBIN_U16("graphics/trade/ball.gbapal"); -const u8 gTradeBallTiles[] = INCBIN_U8("graphics/trade/ball.4bpp"); -const u8 gUnknown_826267C[] = INCBIN_U8("graphics/trade/pokeball_symbol.8bpp"); -const u16 gUnknown_826407C[] = INCBIN_U16("graphics/trade/cable_closeup_map.bin"); -const u16 gUnknown_083307C0[] = INCBIN_U16("graphics/trade/pokeball_symbol_map.bin"); -const u16 sUnref_083308C0[] = INCBIN_U16("graphics/trade/unknown_3308C0.gbapal"); -const u16 gUnknown_826499C[] = INCBIN_U16("graphics/trade/gba.gbapal"); -const u16 gUnref_08330900[] = INCBIN_U16("graphics/trade/shadow.gbapal"); -const u16 gUnref_08330920[] = INCBIN_U16("graphics/trade/black.gbapal"); -const u16 gUnknown_82649FC[] = INCBIN_U16("graphics/trade/misc.gbapal"); -const u8 gTradeGlow1Tiles[] = INCBIN_U8("graphics/trade/glow1.4bpp"); -const u8 gTradeGlow2Tiles[] = INCBIN_U8("graphics/trade/glow2.4bpp"); -const u8 gTradeCableEndTiles[] = INCBIN_U8("graphics/trade/cable_end.4bpp"); -const u8 gTradeGBAScreenTiles[] = INCBIN_U8("graphics/trade/gba_screen.4bpp"); +static void CB2_RunTradeAnim_LinkTrade(void); +static void sub_8053E1C(void); +static void sub_8053E8C(void); +static void sub_80543C4(void); +static void sub_8054470(u8 taskId); +static void CheckPartnersMonForRibbons(void); +static void Task_AnimateWirelessSignal(u8 taskId); +static void c3_0805465C(u8 taskId); +static void sub_8054734(u8 taskId); + +static const u16 gTradeBallPalette[] = INCBIN_U16("graphics/trade/ball.gbapal"); +static const u8 gTradeBallTiles[] = INCBIN_U8("graphics/trade/ball.4bpp"); +static const u8 gUnknown_826267C[] = INCBIN_U8("graphics/trade/pokeball_symbol.8bpp"); +static const u16 gUnknown_826407C[] = INCBIN_U16("graphics/trade/cable_closeup_map.bin"); +static const u16 gUnknown_083307C0[] = INCBIN_U16("graphics/trade/pokeball_symbol_map.bin"); +static const u16 sUnref_083308C0[] = INCBIN_U16("graphics/trade/unknown_3308C0.gbapal"); +static const u16 gUnknown_826499C[] = INCBIN_U16("graphics/trade/gba.gbapal"); +static const u16 gUnref_08330900[] = INCBIN_U16("graphics/trade/shadow.gbapal"); +static const u16 gUnref_08330920[] = INCBIN_U16("graphics/trade/black.gbapal"); +static const u16 gUnknown_82649FC[] = INCBIN_U16("graphics/trade/misc.gbapal"); +static const u8 gTradeGlow1Tiles[] = INCBIN_U8("graphics/trade/glow1.4bpp"); +static const u8 gTradeGlow2Tiles[] = INCBIN_U8("graphics/trade/glow2.4bpp"); +static const u8 gTradeCableEndTiles[] = INCBIN_U8("graphics/trade/cable_end.4bpp"); +static const u8 gTradeGBAScreenTiles[] = INCBIN_U8("graphics/trade/gba_screen.4bpp"); const u16 gUnknown_826601C[] = INCBIN_U16("graphics/trade/shadow_map.bin"); -const u8 gUnknown_826701C[] = INCBIN_U8("graphics/trade/gba_affine.8bpp"); -const u8 sFiller_08335760[64] = {}; -const u8 gUnknown_826985C[] = INCBIN_U8("graphics/trade/gba_affine_map_cable.bin"); -const u8 gUnknown_826995C[] = INCBIN_U8("graphics/trade/gba_affine_map_wireless.bin"); -const u16 gUnknown_8269A5C[] = INCBIN_U16("graphics/trade/gba_map_wireless.bin"); -const u16 gUnknown_826AA5C[] = INCBIN_U16("graphics/trade/gba_map_cable.bin"); -const u32 gUnknown_3379A0Bin[] = INCBIN_U32("graphics/trade/unknown_3379A0.bin.lz"); -const u16 gUnknown_826BB5C[] = INCBIN_U16("graphics/trade/wireless_signal_send.gbapal"); -const u16 gUnknown_826BD5C[] = INCBIN_U16("graphics/trade/wireless_signal_receive.gbapal"); -const u16 gUnknown_826BF5C[] = INCBIN_U16("graphics/trade/black.gbapal"); -const u32 gWirelessSignal4bpp[] = INCBIN_U32("graphics/trade/wireless_signal.4bpp.lz"); -const u32 gUnknown_826C60C[] = INCBIN_U32("graphics/trade/wireless_signal.bin.lz"); - -extern const u8 gUnknown_8261EC7[]; -extern const u8 *const sTradeErrorOrStatusMessagePtrs[]; -extern const u16 gTradeGlow2PaletteAnimTable[]; -extern const struct SpriteSheet gUnknown_826CDD4; -extern const struct SpritePalette gUnknown_826CDDC; -extern const struct BgTemplate gUnknown_826D1D4[4]; -extern const struct WindowTemplate gUnknown_826D1BC[]; -extern const struct SpriteSheet gUnknown_826CE2C; -extern const struct SpriteSheet gUnknown_826CE7C; -extern const struct SpriteSheet gUnknown_826CEB0; -extern const struct SpriteSheet gUnknown_826CF28; -extern const struct SpritePalette gUnknown_826CE34; -extern const struct SpritePalette gUnknown_826CE3C; -extern const struct InGameTrade gInGameTrades[]; -extern const struct SpriteTemplate sTradePokeballSpriteTemplate; -extern const struct SpriteTemplate gUnknown_826CF30; -extern const struct SpriteTemplate sGameLinkCableEndSpriteTemplate; -extern const struct SpriteTemplate gUnknown_826CE44; -extern const struct SpriteTemplate sGlowBallSpriteTemplate; -extern const union AffineAnimCmd *const gUnknown_826CF88[]; -extern const struct SpriteTemplate gUnknown_826CF48; -extern const s8 gUnknown_826D1E4[]; -extern const u16 sInGameTradeMailMessages[][10]; -extern const u8 gUnknown_826D250[][2]; +static const u8 gUnknown_826701C[] = INCBIN_U8("graphics/trade/gba_affine.8bpp"); +static const u8 sFiller_08335760[64] = {}; +static const u8 gUnknown_826985C[] = INCBIN_U8("graphics/trade/gba_affine_map_cable.bin"); +static const u8 gUnknown_826995C[] = INCBIN_U8("graphics/trade/gba_affine_map_wireless.bin"); +static const u16 gUnknown_8269A5C[] = INCBIN_U16("graphics/trade/gba_map_wireless.bin"); +static const u16 gUnknown_826AA5C[] = INCBIN_U16("graphics/trade/gba_map_cable.bin"); +static const u32 gUnknown_3379A0Bin[] = INCBIN_U32("graphics/trade/unknown_3379A0.bin.lz"); +static const u16 gUnknown_826BB5C[] = INCBIN_U16("graphics/trade/wireless_signal_send.gbapal"); +static const u16 gUnknown_826BD5C[] = INCBIN_U16("graphics/trade/wireless_signal_receive.gbapal"); +static const u16 gUnknown_826BF5C[] = INCBIN_U16("graphics/trade/black.gbapal"); +static const u32 gWirelessSignal4bpp[] = INCBIN_U32("graphics/trade/wireless_signal.4bpp.lz"); +static const u32 gUnknown_826C60C[] = INCBIN_U32("graphics/trade/wireless_signal.bin.lz"); + +static const struct OamData gOamData_826CD00 = { + .affineMode = ST_OAM_AFFINE_NORMAL, + .shape = SPRITE_SHAPE(16x16), + .size = SPRITE_SIZE(16x16) +}; + +static const union AnimCmd gAnimCmd_826CD08[] = { + ANIMCMD_FRAME(0x00, 3), + ANIMCMD_FRAME(0x04, 3), + ANIMCMD_FRAME(0x08, 3), + ANIMCMD_FRAME(0x0c, 3), + ANIMCMD_FRAME(0x10, 3), + ANIMCMD_FRAME(0x14, 3), + ANIMCMD_FRAME(0x18, 3), + ANIMCMD_FRAME(0x1c, 3), + ANIMCMD_FRAME(0x20, 3), + ANIMCMD_FRAME(0x24, 3), + ANIMCMD_FRAME(0x28, 3), + ANIMCMD_FRAME(0x2c, 3), + ANIMCMD_LOOP(1), + ANIMCMD_FRAME(0x00, 3), + ANIMCMD_END +}; + +static const union AnimCmd gAnimCmd_826CD44[] = { + ANIMCMD_FRAME(0x00, 3), + ANIMCMD_FRAME(0x04, 3), + ANIMCMD_FRAME(0x08, 3), + ANIMCMD_FRAME(0x0c, 3), + ANIMCMD_FRAME(0x10, 3), + ANIMCMD_FRAME(0x14, 3), + ANIMCMD_FRAME(0x18, 3), + ANIMCMD_FRAME(0x1c, 3), + ANIMCMD_FRAME(0x20, 3), + ANIMCMD_FRAME(0x24, 3), + ANIMCMD_FRAME(0x28, 3), + ANIMCMD_FRAME(0x2c, 3), + ANIMCMD_LOOP(2), + ANIMCMD_FRAME(0x00, 3), + ANIMCMD_END +}; + +static const union AnimCmd *const gSpriteAnimTable_826CD80[] = { + gAnimCmd_826CD08, + gAnimCmd_826CD44 +}; + +static const union AffineAnimCmd gAffineAnimCmd_826CD88[] = { + AFFINEANIMCMD_FRAME(0, 0, 0, 1), + AFFINEANIMCMD_END +}; + +static const union AffineAnimCmd gAffineAnimCmd_826CD98[] = { + AFFINEANIMCMD_FRAME(-8, 0, 0, 20), + AFFINEANIMCMD_END +}; + +static const union AffineAnimCmd gAffineAnimCmd_826CDA8[] = { + AFFINEANIMCMD_FRAME(96, 256, 0, 0), + AFFINEANIMCMD_FRAME(0, 0, 0, 5), + AFFINEANIMCMD_FRAME(8, 0, 0, 20), + AFFINEANIMCMD_END +}; + +static const union AffineAnimCmd *const gSpriteAffineAnimTable_826CDC8[] = { + gAffineAnimCmd_826CD88, + gAffineAnimCmd_826CD98, + gAffineAnimCmd_826CDA8 +}; + +static const struct SpriteSheet gUnknown_826CDD4 = { + gTradeBallTiles, + 0x600, + 5557 +}; + +static const struct SpritePalette gUnknown_826CDDC = { + gTradeBallPalette, + 5558 +}; + +static const struct SpriteTemplate sTradePokeballSpriteTemplate = { + .tileTag = 5557, + .paletteTag = 5558, + .oam = &gOamData_826CD00, + .anims = gSpriteAnimTable_826CD80, + .affineAnims = gSpriteAffineAnimTable_826CDC8, + .callback = SpriteCB_TradePokeball_Default +}; + +static const struct OamData gOamData_826CDFC = { + .affineMode = ST_OAM_AFFINE_NORMAL, + .objMode = ST_OAM_OBJ_BLEND, + .shape = SPRITE_SHAPE(32x32), + .size = SPRITE_SIZE(32x32), + .priority = 1 +}; + +static const union AnimCmd gAnimCmd_826CE04[] = { + ANIMCMD_FRAME(0, 5, .hFlip = TRUE, .vFlip = TRUE), + ANIMCMD_END +}; + +static const union AnimCmd *const gSpriteAnimTable_826CE0C[] = { + gAnimCmd_826CE04 +}; + +static const union AffineAnimCmd gAffineAnimCmd_826CE10[] = { + AFFINEANIMCMD_FRAME(-10, -10, 0, 5), + AFFINEANIMCMD_FRAME( 10, 10, 0, 5), + AFFINEANIMCMD_JUMP(0) +}; + +static const union AffineAnimCmd *const gSpriteAffineAnimTable_826CE28[] = { + gAffineAnimCmd_826CE10 +}; + +static const struct SpriteSheet gUnknown_826CE2C = { + gTradeGlow1Tiles, + 0x200, + 5550 +}; + +static const struct SpritePalette gUnknown_826CE34 = { + gUnknown_82649FC, + 5551 +}; + +static const struct SpritePalette gUnknown_826CE3C = { + gUnknown_826499C, + 5555 +}; + +static const struct SpriteTemplate gUnknown_826CE44 = { + .tileTag = 5550, + .paletteTag = 5551, + .oam = &gOamData_826CDFC, + .anims = gSpriteAnimTable_826CE0C, + .affineAnims = gSpriteAffineAnimTable_826CE28, + .callback = SpriteCB_TradeGlowCable +}; + +static const struct OamData gOamData_826CE5C = { + .shape = SPRITE_SHAPE(16x32), + .size = SPRITE_SIZE(16x32), + .priority = 1 +}; + +static const union AnimCmd gAnimCmd_826CE64[] = { + ANIMCMD_FRAME(0, 5, .hFlip = TRUE, .vFlip = TRUE), + ANIMCMD_END +}; + +static const union AnimCmd gAnimCmd_826CE6C[] = { + ANIMCMD_FRAME(8, 5, .hFlip = TRUE, .vFlip = TRUE), + ANIMCMD_END +}; + +static const union AnimCmd *const gSpriteAnimTable_826CE74[] = { + gAnimCmd_826CE64, + gAnimCmd_826CE6C +}; + +static const struct SpriteSheet gUnknown_826CE7C = { + gTradeGlow2Tiles, + 0x300, + 5552 +}; + +static const struct SpriteTemplate sGlowBallSpriteTemplate = { + .tileTag = 5552, + .paletteTag = 5551, + .oam = &gOamData_826CE5C, + .anims = gSpriteAnimTable_826CE74, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_TradeGlowCore +}; + +static const struct OamData gOamData_826CE9C = { + .shape = SPRITE_SHAPE(16x32), + .size = SPRITE_SIZE(16x32), + .priority = 1 +}; + +static const union AnimCmd gAnimCmd_826CEA4[] = { + ANIMCMD_FRAME(0, 10), + ANIMCMD_END +}; + +static const union AnimCmd *const gSpriteAnimTable_826CEAC[] = { + gAnimCmd_826CEA4 +}; + +static const struct SpriteSheet gUnknown_826CEB0 = { + gTradeCableEndTiles, + 0x100, + 5554 +}; + +static const struct SpriteTemplate sGameLinkCableEndSpriteTemplate = { + .tileTag = 5554, + .paletteTag = 5555, + .oam = &gOamData_826CE9C, + .anims = gSpriteAnimTable_826CEAC, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_GameLinkCableEnd_Outbound +}; + +static const struct OamData gOamData_826CED0 = { + .shape = SPRITE_SHAPE(64x32), + .size = SPRITE_SIZE(64x32), + .priority = 1 +}; + +static const union AnimCmd gAnimCmd_826CED8[] = { + ANIMCMD_FRAME(0x00, 2, .hFlip = TRUE, .vFlip = TRUE), + ANIMCMD_FRAME(0x20, 2, .hFlip = TRUE, .vFlip = TRUE), + ANIMCMD_FRAME(0x40, 2, .hFlip = TRUE, .vFlip = TRUE), + ANIMCMD_FRAME(0x60, 2, .hFlip = TRUE, .vFlip = TRUE), + ANIMCMD_FRAME(0x40, 2, .hFlip = TRUE, .vFlip = TRUE), + ANIMCMD_FRAME(0x20, 2, .hFlip = TRUE, .vFlip = TRUE), + ANIMCMD_FRAME(0x00, 2, .hFlip = TRUE, .vFlip = TRUE), + ANIMCMD_LOOP(8), + ANIMCMD_END +}; + +static const union AnimCmd gAnimCmd_826CEFC[] = { + ANIMCMD_FRAME(0x00, 2, .hFlip = TRUE, .vFlip = TRUE), + ANIMCMD_FRAME(0x20, 2, .hFlip = TRUE, .vFlip = TRUE), + ANIMCMD_FRAME(0x40, 2, .hFlip = TRUE, .vFlip = TRUE), + ANIMCMD_FRAME(0x60, 2, .hFlip = TRUE, .vFlip = TRUE), + ANIMCMD_FRAME(0x40, 2, .hFlip = TRUE, .vFlip = TRUE), + ANIMCMD_FRAME(0x20, 2, .hFlip = TRUE, .vFlip = TRUE), + ANIMCMD_FRAME(0x00, 2, .hFlip = TRUE, .vFlip = TRUE), + ANIMCMD_LOOP(2), + ANIMCMD_END +}; + +static const union AnimCmd *const gSpriteAnimTable_826CF20[] = { + gAnimCmd_826CED8 +}; + +static const union AnimCmd *const gSpriteAnimTable_826CF24[] = { + gAnimCmd_826CEFC +}; + +static const struct SpriteSheet gUnknown_826CF28 = { + gTradeGBAScreenTiles, + 0x1000, + 5556 +}; + +static const struct SpriteTemplate gUnknown_826CF30 = { + .tileTag = 5556, + .paletteTag = 5555, + .oam = &gOamData_826CED0, + .anims = gSpriteAnimTable_826CF20, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_804FE00 +}; + +static const struct SpriteTemplate gUnknown_826CF48 = { + .tileTag = 5556, + .paletteTag = 5555, + .oam = &gOamData_826CED0, + .anims = gSpriteAnimTable_826CF24, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_804FE00 +}; + +static const u16 gTradeGlow2PaletteAnimTable[] = { + RGB(18, 24, 31), + RGB(18, 24, 31), + RGB(18, 24, 31), + RGB(31, 31, 31), + RGB(31, 31, 31), + RGB(31, 31, 31), + RGB(18, 24, 31), + RGB(18, 24, 31), + RGB(18, 24, 31), + RGB(31, 31, 31), + RGB(31, 31, 31), + RGB(31, 31, 31) +}; + +static const union AffineAnimCmd gAffineAnimCmd_826CF78[] = { + AFFINEANIMCMD_FRAME(-0x100, 0x100, 0, 0), + AFFINEANIMCMD_JUMP(0) +}; + +static const union AffineAnimCmd *const gUnknown_826CF88[] = { + gAffineAnimCmd_826CF78 +}; + +#include "data/ingame_trades.h" + +static const struct WindowTemplate gUnknown_826D1BC[] = { + { + .bg = 0, + .tilemapLeft = 2, + .tilemapTop = 15, + .width = 26, + .height = 4, + .paletteNum = 0, + .baseBlock = 0x040 + }, DUMMY_WIN_TEMPLATE +}; + +const struct WindowTemplate gUnknown_826D1CC = { + .bg = 0, + .tilemapLeft = 21, + .tilemapTop = 9, + .width = 6, + .height = 4, + .paletteNum = 15, + .baseBlock = 0x0bc +}; + +static const struct BgTemplate gUnknown_826D1D4[] = { + { + .bg = 0, + .charBaseIndex = 3, + .mapBaseIndex = 31, + .screenSize = 0, + .paletteMode = 0, + .priority = 0, + .baseTile = 0x000 + }, { + .bg = 1, + .charBaseIndex = 0, + .mapBaseIndex = 5, + .screenSize = 0, + .paletteMode = 0, + .priority = 2, + .baseTile = 0x000 + }, { + .bg = 2, + .charBaseIndex = 1, + .mapBaseIndex = 18, + .screenSize = 1, + .paletteMode = 0, + .priority = 2, + .baseTile = 0x000 + }, { + .bg = 3, + .charBaseIndex = 0, + .mapBaseIndex = 6, + .screenSize = 0, + .paletteMode = 0, + .priority = 3, + .baseTile = 0x000 + } +}; + +static const s8 gTradeBallVerticalVelocityTable[] = { + 0, 0, 1, 0, + 1, 0, 1, 1, + 1, 1, 2, 2, + 2, 2, 3, 3, + 3, 3, 4, 4, + 4, 4, -4, -4, + -4, -3, -3, -3, + -3, -2, -2, -2, + -2, -1, -1, -1, + -1, 0, -1, 0, + -1, 0, 0, 0, + 0, 0, 1, 0, + 1, 0, 1, 1, + 1, 1, 2, 2, + 2, 2, 3, 3, + 3, 3, 4, 4, + 4, 4, -4, -3, + -3, -2, -2, -1, + -1, -1, 0, -1, + 0, 0, 0, 0, + 0, 0, 1, 0, + 1, 1, 1, 2, + 2, 3, 3, 4, + -4, -3, -2, -1, + -1, -1, 0, 0, + 0, 0, 1, 0, + 1, 1, 2, 3 +}; + +static const u8 gUnknown_826D250[][2] = { + {0, 1}, + {1, 1}, + {2, 1}, + {3, 1}, + {4, 1}, + {5, 2}, + {6, 2}, + {7, 2}, + {8, 2}, + {9, 2}, + {10, 3}, + {11, 3}, + {12, 3}, + {13, 4}, + {14, 5}, + {15, 2}, + {0, 1}, + {1, 1}, + {2, 1}, + {3, 1}, + {4, 1}, + {5, 2}, + {6, 2}, + {7, 2}, + {8, 2}, + {9, 2}, + {10, 3}, + {11, 3}, + {12, 3}, + {13, 4}, + {14, 5}, + {16, 1}, + {16, -1} +}; // Sprite callback for link cable trade glow -void SpriteCB_TradeGlowCable(struct Sprite * sprite) +static void SpriteCB_TradeGlowCable(struct Sprite * sprite) { sprite->data[0]++; if (sprite->data[0] == 10) @@ -202,7 +601,7 @@ void SpriteCB_TradeGlowCable(struct Sprite * sprite) } // Sprite callback for wireless trade glow -void SpriteCB_TradeGlowWireless(struct Sprite * sprite) +static void SpriteCB_TradeGlowWireless(struct Sprite * sprite) { if (!sprite->invisible) { @@ -216,7 +615,7 @@ void SpriteCB_TradeGlowWireless(struct Sprite * sprite) } // Palette flash for trade glow core -void SpriteCB_TradeGlowCore(struct Sprite * sprite) +static void SpriteCB_TradeGlowCore(struct Sprite * sprite) { if (sprite->data[1] == 0) { @@ -227,7 +626,7 @@ void SpriteCB_TradeGlowCore(struct Sprite * sprite) } } -void SpriteCB_GameLinkCableEnd_Outbound(struct Sprite * sprite) +static void SpriteCB_GameLinkCableEnd_Outbound(struct Sprite * sprite) { sprite->data[0]++; sprite->pos2.y++; @@ -235,7 +634,7 @@ void SpriteCB_GameLinkCableEnd_Outbound(struct Sprite * sprite) DestroySprite(sprite); } -void SpriteCB_GameLinkCableEnd_Inbound(struct Sprite * sprite) +static void SpriteCB_GameLinkCableEnd_Inbound(struct Sprite * sprite) { sprite->data[0]++; sprite->pos2.y--; @@ -243,7 +642,7 @@ void SpriteCB_GameLinkCableEnd_Inbound(struct Sprite * sprite) DestroySprite(sprite); } -void sub_804FE00(struct Sprite * sprite) +static void sub_804FE00(struct Sprite * sprite) { sprite->data[0]++; if (sprite->data[0] == 15) @@ -253,7 +652,7 @@ void sub_804FE00(struct Sprite * sprite) } } -void SetTradeBGAffine(void) +static void SetTradeBGAffine(void) { struct BgAffineDstData affine; DoBgAffineSet(&affine, sTradeData->bg2texX * 0x100, sTradeData->bg2texY * 0x100, sTradeData->bg2srcX, sTradeData->bg2srcY, sTradeData->sXY, sTradeData->sXY, sTradeData->bg2alpha); @@ -292,14 +691,14 @@ static void VBlankCB_TradeAnim(void) TransferPlttBuffer(); } -void sub_804FF24(void) +static void sub_804FF24(void) { sTradeData->unk_8A = 0; sTradeData->unk_88 = 0; sTradeData->unk_89 = 0; } -void sub_804FF4C(void) +static void sub_804FF4C(void) { if (sTradeData->unk_88 == sTradeData->unk_89) sTradeData->unk_8A++; @@ -318,14 +717,14 @@ void sub_804FF4C(void) sTradeData->unk_89 = sTradeData->unk_88; } -u32 sub_804FFC4(void) +static u32 sub_804FFC4(void) { if (gReceivedRemoteLinkPlayers) return GetMultiplayerId(); return 0; } -void sub_804FFE4(u8 whichParty, u8 a1) +static void sub_804FFE4(u8 whichParty, u8 a1) { int pos = 0; struct Pokemon *mon = NULL; @@ -520,7 +919,7 @@ void sub_80504B0(void) CopyWindowToVram(0, 3); } -void TradeAnimInit_LoadGfx(void) +static void TradeAnimInit_LoadGfx(void) { SetGpuReg(REG_OFFSET_DISPCNT, 0); ResetBgsAndClearDma3BusyFlags(FALSE); @@ -544,7 +943,7 @@ void TradeAnimInit_LoadGfx(void) LoadCompressedPalette(gBattleTextboxPalette, 0x000, 0x20); } -void CB2_InitTradeAnim_InGameTrade(void) +static void CB2_InitTradeAnim_InGameTrade(void) { u8 otName[11]; @@ -647,7 +1046,7 @@ static void RS_TryEnableNationalPokedex(void) EnableNationalPokedex();*/ } -void TradeMons(u8 playerPartyIdx, u8 partnerPartyIdx) +static void TradeMons(u8 playerPartyIdx, u8 partnerPartyIdx) { u8 friendship; @@ -681,7 +1080,7 @@ void TradeMons(u8 playerPartyIdx, u8 partnerPartyIdx) RS_TryEnableNationalPokedex(); } -void sub_80508F4(void) +static void sub_80508F4(void) { switch (sTradeData->unk_93) { @@ -697,7 +1096,7 @@ void sub_80508F4(void) } } -void CB2_RunTradeAnim_InGameTrade(void) +static void CB2_RunTradeAnim_InGameTrade(void) { sub_8050F14(); RunTasks(); @@ -707,7 +1106,7 @@ void CB2_RunTradeAnim_InGameTrade(void) UpdatePaletteFade(); } -void SetTradeSequenceBgGpuRegs(u8 state) +static void SetTradeSequenceBgGpuRegs(u8 state) { switch (state) { @@ -814,7 +1213,7 @@ void SetTradeSequenceBgGpuRegs(u8 state) } } -void sub_8050DE0(void) +static void sub_8050DE0(void) { LoadSpriteSheet(&gUnknown_826CE2C); LoadSpriteSheet(&gUnknown_826CE7C); @@ -824,7 +1223,7 @@ void sub_8050DE0(void) LoadSpritePalette(&gUnknown_826CE3C); } -void sub_8050E24(void) +static void sub_8050E24(void) { u8 nickname[20]; u8 mpId; @@ -848,7 +1247,7 @@ void sub_8050E24(void) } } -bool8 sub_8050F14(void) +static bool8 sub_8050F14(void) { if (sTradeData->isCableTrade) return sub_8050F3C(); @@ -856,7 +1255,7 @@ bool8 sub_8050F14(void) return sub_805232C(); } -bool8 sub_8050F3C(void) +static bool8 sub_8050F3C(void) { u16 evoTarget; @@ -1353,7 +1752,7 @@ bool8 sub_8050F3C(void) return FALSE; } -bool8 sub_805232C(void) +static bool8 sub_805232C(void) { u16 evoTarget; @@ -1874,7 +2273,7 @@ bool8 sub_805232C(void) return FALSE; } -void sub_8053788(void) +static void sub_8053788(void) { u16 evoSpecies; switch (gMain.state) @@ -1900,7 +2299,7 @@ void sub_8053788(void) UpdatePaletteFade(); } -void sub_805383C(void) +static void sub_805383C(void) { u8 recvStatus; sub_804FFC4(); @@ -1921,7 +2320,7 @@ void sub_805383C(void) } } -void SpriteCB_TradePokeball_Default(struct Sprite * sprite) +static void SpriteCB_TradePokeball_Default(struct Sprite * sprite) { sprite->pos1.y += sprite->data[0] / 10; sprite->data[5] += sprite->data[1]; @@ -1942,9 +2341,9 @@ void SpriteCB_TradePokeball_Default(struct Sprite * sprite) } } -void SpriteCB_TradePokeball_Outbound(struct Sprite * sprite) +static void SpriteCB_TradePokeball_Outbound(struct Sprite * sprite) { - sprite->pos2.y += gUnknown_826D1E4[sprite->data[0]]; + sprite->pos2.y += gTradeBallVerticalVelocityTable[sprite->data[0]]; if (sprite->data[0] == 22) PlaySE(SE_KON); sprite->data[0]++; @@ -1957,14 +2356,14 @@ void SpriteCB_TradePokeball_Outbound(struct Sprite * sprite) } } -void SpriteCB_TradePokeball_Outbound2(struct Sprite * sprite) +static void SpriteCB_TradePokeball_Outbound2(struct Sprite * sprite) { if (sprite->data[1] == 20) StartSpriteAffineAnim(sprite, 1); sprite->data[1]++; if (sprite->data[1] > 20) { - sprite->pos2.y -= gUnknown_826D1E4[sprite->data[0]]; + sprite->pos2.y -= gTradeBallVerticalVelocityTable[sprite->data[0]]; sprite->data[0]++; if (sprite->data[0] == 23) { @@ -1974,7 +2373,7 @@ void SpriteCB_TradePokeball_Outbound2(struct Sprite * sprite) } } -void SpriteCB_TradePokeball_Inbound(struct Sprite * sprite) +static void SpriteCB_TradePokeball_Inbound(struct Sprite * sprite) { if (sprite->data[2] == 0) { @@ -1994,7 +2393,7 @@ void SpriteCB_TradePokeball_Inbound(struct Sprite * sprite) PlaySE(SE_KON3); if (sprite->data[0] == 107) PlaySE(SE_KON4); - sprite->pos2.y += gUnknown_826D1E4[sprite->data[0]]; + sprite->pos2.y += gTradeBallVerticalVelocityTable[sprite->data[0]]; sprite->data[0]++; if (sprite->data[0] == 108) sprite->callback = SpriteCallbackDummy; @@ -2012,7 +2411,7 @@ u16 GetInGameTradeSpeciesInfo(void) return inGameTrade->requestedSpecies; } -void BufferInGameTradeMonName(void) +static void BufferInGameTradeMonName(void) { // Populates gStringVar1 with the nickname of the sent Pokemon and // gStringVar2 with the name of the offered species. @@ -2023,7 +2422,7 @@ void BufferInGameTradeMonName(void) StringCopy(gStringVar2, gSpeciesNames[inGameTrade->species]); } -void CreateInGameTradePokemonInternal(u8 playerSlot, u8 inGameTradeIdx) +static void CreateInGameTradePokemonInternal(u8 playerSlot, u8 inGameTradeIdx) { const struct InGameTrade *inGameTrade = &gInGameTrades[inGameTradeIdx]; u8 level = GetMonData(&gPlayerParty[playerSlot], MON_DATA_LEVEL); @@ -2094,7 +2493,7 @@ void CreateInGameTradePokemon(void) CreateInGameTradePokemonInternal(gSpecialVar_0x8005, gSpecialVar_0x8004); } -void CB2_RunTradeAnim_LinkTrade(void) +static void CB2_RunTradeAnim_LinkTrade(void) { if (sub_8050F14() == TRUE) { @@ -2114,7 +2513,7 @@ void CB2_RunTradeAnim_LinkTrade(void) UpdatePaletteFade(); } -void sub_8053E1C(void) +static void sub_8053E1C(void) { u8 mpId = sub_804FFC4(); sub_805383C(); @@ -2131,7 +2530,7 @@ void sub_8053E1C(void) UpdatePaletteFade(); } -void sub_8053E8C(void) +static void sub_8053E8C(void) { switch (gMain.state) { @@ -2301,7 +2700,7 @@ void sub_8053E8C(void) UpdatePaletteFade(); } -void sub_80543C4(void) +static void sub_80543C4(void) { if (!gPaletteFade.active) { @@ -2329,7 +2728,7 @@ void DoInGameTradeScene(void) HelpSystem_Disable(); } -void sub_8054470(u8 taskId) +static void sub_8054470(u8 taskId) { if (!gPaletteFade.active) { @@ -2339,7 +2738,7 @@ void sub_8054470(u8 taskId) } } -void CheckPartnersMonForRibbons(void) +static void CheckPartnersMonForRibbons(void) { u8 nRibbons = 0; u8 i; @@ -2366,7 +2765,7 @@ void DrawTextOnTradeWindow(u8 windowId, const u8 *str, s8 speed) CopyWindowToVram(windowId, 3); } -void Task_AnimateWirelessSignal(u8 taskId) +static void Task_AnimateWirelessSignal(u8 taskId) { s16 *data = gTasks[taskId].data; u16 r2 = 16 * gUnknown_826D250[data[0]][0]; @@ -2397,7 +2796,7 @@ void Task_AnimateWirelessSignal(u8 taskId) data[1]++; } -void c3_0805465C(u8 taskId) +static void c3_0805465C(u8 taskId) { s16 *data = gTasks[taskId].data; @@ -2426,7 +2825,7 @@ void c3_0805465C(u8 taskId) } } -void sub_8054734(u8 taskId) +static void sub_8054734(u8 taskId) { s16 *data = gTasks[taskId].data; -- cgit v1.2.3 From 1ba6cb22450b729cc2ac1b7fd72b2b27e5ec38c7 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 30 Oct 2019 16:51:43 -0400 Subject: Some renaming; resolve trade bss --- asm/pokemon_storage_system.s | 10 +- data/strings.s | 12 +-- include/pokemon_storage_system.h | 2 +- include/strings.h | 12 +-- src/trade.c | 201 ++++++++++++++++++++------------------- src/trade_scene.c | 4 +- sym_bss.txt | 7 +- 7 files changed, 128 insertions(+), 120 deletions(-) diff --git a/asm/pokemon_storage_system.s b/asm/pokemon_storage_system.s index 3a6f541b0..df7c4fbce 100644 --- a/asm/pokemon_storage_system.s +++ b/asm/pokemon_storage_system.s @@ -719,8 +719,8 @@ _0808BEA8: bx r1 thumb_func_end sub_808BDE8 - thumb_func_start sub_808BEB4 -sub_808BEB4: @ 808BEB4 + thumb_func_start PSS_RenderTextToVramViaBuffer +PSS_RenderTextToVramViaBuffer: @ 808BEB4 push {r4-r7,lr} mov r7, r10 mov r6, r9 @@ -868,7 +868,7 @@ _0808BFC4: bx r0 .align 2, 0 _0808BFDC: .4byte 0x001fffff - thumb_func_end sub_808BEB4 + thumb_func_end PSS_RenderTextToVramViaBuffer thumb_func_start sub_808BFE0 sub_808BFE0: @ 808BFE0 @@ -12353,7 +12353,7 @@ sub_8091A94: @ 8091A94 adds r0, r5, 0 movs r2, 0 movs r3, 0 - bl sub_808BEB4 + bl PSS_RenderTextToVramViaBuffer ldr r0, [sp, 0x30] bl LoadSpriteSheet mov r0, r8 @@ -12539,7 +12539,7 @@ _08091CFC: adds r0, r5, 0 movs r2, 0 movs r3, 0 - bl sub_808BEB4 + bl PSS_RenderTextToVramViaBuffer adds r0, r6, 0 bl LoadSpriteSheet ldr r0, [sp, 0x2C] diff --git a/data/strings.s b/data/strings.s index 5ebdc7afa..d81f72bac 100644 --- a/data/strings.s +++ b/data/strings.s @@ -4364,22 +4364,22 @@ gUnknown_841E09F:: @ 841E09F gUnknown_841E0A5:: @ 841E0A5 .string "Is this trade okay?$" -gUnknown_841E0B9:: +gTradeText_Cancel:: .string "CANCEL$" -gUnknown_841E0C0:: +gTradeText_ChooseAPokemon:: .string "Choose a POKéMON.$" -gUnknown_841E0D2:: +gTradeText_Summary:: .string "SUMMARY$" -gUnknown_841E0DA:: +gTradeText_Trade:: .string "TRADE$" -gUnknown_841E0E0:: +gTradeText_CancelTrade:: .string "Cancel trade?$" -gUnknown_841E0EE:: +gTradeText_PressBButtonToExit:: .string "Press the B Button to exit.$" gUnknown_841E10A:: diff --git a/include/pokemon_storage_system.h b/include/pokemon_storage_system.h index 2d881878f..81f50e1e9 100644 --- a/include/pokemon_storage_system.h +++ b/include/pokemon_storage_system.h @@ -16,6 +16,6 @@ u8 * GetBoxNamePtr(u8 boxId); void sub_808CE60(void); void ResetPokemonStorageSystem(void); u8 StorageGetCurrentBox(void); -void sub_808BEB4(const u8 *name, u8 *a1, u8 a2, u8 a3, u8 *buffer, u8 a5); +void PSS_RenderTextToVramViaBuffer(const u8 *name, u8 *a1, u8 a2, u8 a3, u8 *buffer, u8 a5); #endif // GUARD_POKEMON_STORAGE_SYSTEM_H diff --git a/include/strings.h b/include/strings.h index 301bfb9c6..7231755c5 100644 --- a/include/strings.h +++ b/include/strings.h @@ -667,12 +667,12 @@ extern const u8 gText_ByeByeVar1[]; extern const u8 gText_XSentOverY[]; extern const u8 gText_TakeGoodCareOfX[]; extern const u8 gUnknown_841E325[]; -extern const u8 gUnknown_841E0B9[]; -extern const u8 gUnknown_841E0C0[]; -extern const u8 gUnknown_841E0D2[]; -extern const u8 gUnknown_841E0DA[]; -extern const u8 gUnknown_841E0E0[]; -extern const u8 gUnknown_841E0EE[]; +extern const u8 gTradeText_Cancel[]; +extern const u8 gTradeText_ChooseAPokemon[]; +extern const u8 gTradeText_Summary[]; +extern const u8 gTradeText_Trade[]; +extern const u8 gTradeText_CancelTrade[]; +extern const u8 gTradeText_PressBButtonToExit[]; extern const u8 gUnknown_841E10A[]; extern const u8 gUnknown_841E112[]; extern const u8 gUnknown_841E118[]; diff --git a/src/trade.c b/src/trade.c index 66c44a010..817182efe 100644 --- a/src/trade.c +++ b/src/trade.c @@ -83,10 +83,10 @@ struct TradeMenuResources /*0x00A9*/ u8 unk_A9[11]; /*0x00B4*/ u8 filler_B4[0x8D0-0xB4]; /*0x08D0*/ struct { - bool8 unk_0; - u16 unk_2; - u8 unk_4; - } unk_8D0[4]; + bool8 active; + u16 delay; + u8 kind; + } cron[4]; /*0x08F0*/ u16 tilemapBuffer[BG_SCREEN_SIZE / 2]; }; @@ -103,10 +103,8 @@ enum TradeStatusMsg TRADESTATMSG_PARTNERMONCANTBETRADED }; -IWRAM_DATA vu16 gUnknown_3000E78; - -static EWRAM_DATA u8 *gUnknown_2031C90 = NULL; -static EWRAM_DATA u8 *gUnknown_2031C94[14] = {}; +static EWRAM_DATA u8 *sSpriteTextTileBuffer = NULL; +static EWRAM_DATA u8 *sSpriteTextTilePtrs[14] = {}; EWRAM_DATA struct MailStruct gLinkPartnerMail[6] = {}; EWRAM_DATA u8 gSelectedTradeMonPositions[2] = {0}; static EWRAM_DATA struct TradeMenuResources * sTradeMenuResourcesPtr = NULL; @@ -130,11 +128,11 @@ static void sub_804F3B4(void); static void sub_804F3C8(u8 a0); static void TradeMenuAction_Summary(u8 taskId); static void TradeMenuAction_Trade(u8 taskId); -static void sub_804F488(u16 a0, u8 a1); -static void sub_804F4DC(void); +static void ScheduleLinkTaskWithDelay(u16 delay, u8 kind); +static void RunScheduledLinkTasks(void); static void PrintTradeErrorOrStatusMessage(u8 str_idx); static bool8 sub_804F610(void); -static void sub_804F728(const u8 *name, u8 *a1, u8 unused); +static void RenderTextToVramViaBuffer(const u8 *name, u8 *a1, u8 unused); static void sub_804F748(u8 side); static void sub_804F890(u8 side); static void sub_804F964(void); @@ -429,13 +427,23 @@ const u8 gUnknown_8261EC6[] = _(""); const u8 gUnknown_8261EC7[] = _("\n"); const u8 gUnknown_8261EC9[] = _("/"); -static const u8 *const gUnknown_8261ECC[] = { - gUnknown_841E0B9, - gUnknown_841E0C0, - gUnknown_841E0D2, - gUnknown_841E0DA, - gUnknown_841E0E0, - gUnknown_841E0EE +enum TradeUIText +{ + TRADEUITEXT_CANCEL = 0, + TRADEUITEXT_CHOOSE, + TRADEUITEXT_SUMMARY, + TRADEUITEXT_TRADE, + TRADEUITEXT_ASKCANCEL, + TRADEUITEXT_PRESSBTOEXIT +}; + +static const u8 *const sTradeUITextPtrs[] = { + gTradeText_Cancel, + gTradeText_ChooseAPokemon, + gTradeText_Summary, + gTradeText_Trade, + gTradeText_CancelTrade, + gTradeText_PressBButtonToExit }; static const struct MenuAction gUnknown_8261EE4[] = { @@ -674,6 +682,7 @@ static const u8 gUnknown_8262055[][2] = { static void sub_804C600(void) { int i; + static vu16 dummy; ResetSpriteData(); FreeAllSpritePalettes(); @@ -689,7 +698,7 @@ static void sub_804C600(void) if (InitWindows(gUnknown_8261F2C)) { DeactivateAllTextPrinters(); - gUnknown_3000E78 = 590; // ? + dummy = 590; // ? for (i = 0; i < NELEMS(gUnknown_8261F2C) - 1; i++) { ClearWindowTilemap(i); @@ -730,11 +739,11 @@ static void sub_804C728(void) case 0: sTradeMenuResourcesPtr = AllocZeroed(sizeof(*sTradeMenuResourcesPtr)); sub_804C600(); - gUnknown_2031C90 = AllocZeroed(0xE00); + sSpriteTextTileBuffer = AllocZeroed(0xE00); for (i = 0; i < 14; i++) { - gUnknown_2031C94[i] = &gUnknown_2031C90[i * 256]; + sSpriteTextTilePtrs[i] = &sSpriteTextTileBuffer[i * 256]; } gMain.state++; @@ -877,11 +886,11 @@ static void sub_804C728(void) gMain.state++; break; case 10: - sub_808BEB4(gSaveBlock2Ptr->playerName, gUnknown_2031C94[0], 0, 0, gDecompressionBuffer, 3); + PSS_RenderTextToVramViaBuffer(gSaveBlock2Ptr->playerName, sSpriteTextTilePtrs[0], 0, 0, gDecompressionBuffer, 3); id = GetMultiplayerId(); - sub_808BEB4(gLinkPlayers[id ^ 1].name, gUnknown_2031C94[3], 0, 0, gDecompressionBuffer, 3); - sub_808BEB4(gUnknown_8261ECC[0], gUnknown_2031C94[6], 0, 0, gDecompressionBuffer, 2); - sub_804F728(gUnknown_8261ECC[1], gUnknown_2031C94[8], 24); + PSS_RenderTextToVramViaBuffer(gLinkPlayers[id ^ 1].name, sSpriteTextTilePtrs[3], 0, 0, gDecompressionBuffer, 3); + PSS_RenderTextToVramViaBuffer(sTradeUITextPtrs[TRADEUITEXT_CANCEL], sSpriteTextTilePtrs[6], 0, 0, gDecompressionBuffer, 2); + RenderTextToVramViaBuffer(sTradeUITextPtrs[TRADEUITEXT_CHOOSE], sSpriteTextTilePtrs[8], 24); gMain.state++; sTradeMenuResourcesPtr->unk_A8 = 0; break; @@ -1047,13 +1056,13 @@ static void sub_804C728(void) "\tbl AllocZeroed\n" "\tstr r0, [r4]\n" "\tbl sub_804C600\n" - "\tldr r4, _0804C7F0 @ =gUnknown_2031C90\n" + "\tldr r4, _0804C7F0 @ =sSpriteTextTileBuffer\n" "\tmovs r0, 0xE0\n" "\tlsls r0, 4\n" "\tbl AllocZeroed\n" "\tstr r0, [r4]\n" "\tmovs r6, 0\n" - "\tldr r2, _0804C7F4 @ =gUnknown_2031C94\n" + "\tldr r2, _0804C7F4 @ =sSpriteTextTilePtrs\n" "_0804C7CE:\n" "\tlsls r1, r6, 8\n" "\tldr r0, [r4]\n" @@ -1070,8 +1079,8 @@ static void sub_804C728(void) "\t.align 2, 0\n" "_0804C7E8: .4byte sTradeMenuResourcesPtr\n" "_0804C7EC: .4byte 0x000010f0\n" - "_0804C7F0: .4byte gUnknown_2031C90\n" - "_0804C7F4: .4byte gUnknown_2031C94\n" + "_0804C7F0: .4byte sSpriteTextTileBuffer\n" + "_0804C7F4: .4byte sSpriteTextTilePtrs\n" "_0804C7F8: .4byte gMain\n" "_0804C7FC:\n" "\tldr r2, _0804C864 @ =gPaletteFade\n" @@ -1501,7 +1510,7 @@ static void sub_804C728(void) "_0804CB9C:\n" "\tldr r0, _0804CC14 @ =gSaveBlock2Ptr\n" "\tldr r0, [r0]\n" - "\tldr r6, _0804CC18 @ =gUnknown_2031C94\n" + "\tldr r6, _0804CC18 @ =sSpriteTextTilePtrs\n" "\tldr r1, [r6]\n" "\tldr r5, _0804CC1C @ =gDecompressionBuffer\n" "\tstr r5, [sp]\n" @@ -1509,7 +1518,7 @@ static void sub_804C728(void) "\tstr r4, [sp, 0x4]\n" "\tmovs r2, 0\n" "\tmovs r3, 0\n" - "\tbl sub_808BEB4\n" + "\tbl PSS_RenderTextToVramViaBuffer\n" "\tbl GetMultiplayerId\n" "\tlsls r0, 24\n" "\tmovs r1, 0x80\n" @@ -1526,8 +1535,8 @@ static void sub_804C728(void) "\tstr r4, [sp, 0x4]\n" "\tmovs r2, 0\n" "\tmovs r3, 0\n" - "\tbl sub_808BEB4\n" - "\tldr r4, _0804CC24 @ =gUnknown_8261ECC\n" + "\tbl PSS_RenderTextToVramViaBuffer\n" + "\tldr r4, _0804CC24 @ =sTradeUITextPtrs\n" "\tldr r0, [r4]\n" "\tldr r1, [r6, 0x18]\n" "\tstr r5, [sp]\n" @@ -1535,11 +1544,11 @@ static void sub_804C728(void) "\tstr r2, [sp, 0x4]\n" "\tmovs r2, 0\n" "\tmovs r3, 0\n" - "\tbl sub_808BEB4\n" + "\tbl PSS_RenderTextToVramViaBuffer\n" "\tldr r0, [r4, 0x4]\n" "\tldr r1, [r6, 0x20]\n" "\tmovs r2, 0x18\n" - "\tbl sub_804F728\n" + "\tbl RenderTextToVramViaBuffer\n" "\tldr r1, _0804CC28 @ =gMain\n" "\tmovs r0, 0x87\n" "\tlsls r0, 3\n" @@ -1555,10 +1564,10 @@ static void sub_804C728(void) "\tb _0804CEE6\n" "\t.align 2, 0\n" "_0804CC14: .4byte gSaveBlock2Ptr\n" - "_0804CC18: .4byte gUnknown_2031C94\n" + "_0804CC18: .4byte sSpriteTextTilePtrs\n" "_0804CC1C: .4byte gDecompressionBuffer\n" "_0804CC20: .4byte gLinkPlayers + 8\n" - "_0804CC24: .4byte gUnknown_8261ECC\n" + "_0804CC24: .4byte sTradeUITextPtrs\n" "_0804CC28: .4byte gMain\n" "_0804CC2C: .4byte sTradeMenuResourcesPtr\n" "_0804CC30:\n" @@ -1987,11 +1996,11 @@ void sub_804CF14(void) gMain.state++; break; case 10: - sub_808BEB4(gSaveBlock2Ptr->playerName, gUnknown_2031C94[0], 0, 0, gDecompressionBuffer, 3); + PSS_RenderTextToVramViaBuffer(gSaveBlock2Ptr->playerName, sSpriteTextTilePtrs[0], 0, 0, gDecompressionBuffer, 3); id = GetMultiplayerId(); - sub_808BEB4(gLinkPlayers[id ^ 1].name, gUnknown_2031C94[3], 0, 0, gDecompressionBuffer, 3); - sub_808BEB4(gUnknown_8261ECC[0], gUnknown_2031C94[6], 0, 0, gDecompressionBuffer, 2); - sub_804F728(gUnknown_8261ECC[1], gUnknown_2031C94[8], 24); + PSS_RenderTextToVramViaBuffer(gLinkPlayers[id ^ 1].name, sSpriteTextTilePtrs[3], 0, 0, gDecompressionBuffer, 3); + PSS_RenderTextToVramViaBuffer(sTradeUITextPtrs[TRADEUITEXT_CANCEL], sSpriteTextTilePtrs[6], 0, 0, gDecompressionBuffer, 2); + RenderTextToVramViaBuffer(sTradeUITextPtrs[TRADEUITEXT_CHOOSE], sSpriteTextTilePtrs[8], 24); gMain.state++; sTradeMenuResourcesPtr->unk_A8 = 0; break; @@ -2383,7 +2392,7 @@ void sub_804CF14(void) "_0804D19C:\n" "\tldr r0, _0804D214 @ =gSaveBlock2Ptr\n" "\tldr r0, [r0]\n" - "\tldr r6, _0804D218 @ =gUnknown_2031C94\n" + "\tldr r6, _0804D218 @ =sSpriteTextTilePtrs\n" "\tldr r1, [r6]\n" "\tldr r5, _0804D21C @ =gDecompressionBuffer\n" "\tstr r5, [sp]\n" @@ -2391,7 +2400,7 @@ void sub_804CF14(void) "\tstr r4, [sp, 0x4]\n" "\tmovs r2, 0\n" "\tmovs r3, 0\n" - "\tbl sub_808BEB4\n" + "\tbl PSS_RenderTextToVramViaBuffer\n" "\tbl GetMultiplayerId\n" "\tlsls r0, 24\n" "\tmovs r1, 0x80\n" @@ -2408,8 +2417,8 @@ void sub_804CF14(void) "\tstr r4, [sp, 0x4]\n" "\tmovs r2, 0\n" "\tmovs r3, 0\n" - "\tbl sub_808BEB4\n" - "\tldr r4, _0804D224 @ =gUnknown_8261ECC\n" + "\tbl PSS_RenderTextToVramViaBuffer\n" + "\tldr r4, _0804D224 @ =sTradeUITextPtrs\n" "\tldr r0, [r4]\n" "\tldr r1, [r6, 0x18]\n" "\tstr r5, [sp]\n" @@ -2417,11 +2426,11 @@ void sub_804CF14(void) "\tstr r2, [sp, 0x4]\n" "\tmovs r2, 0\n" "\tmovs r3, 0\n" - "\tbl sub_808BEB4\n" + "\tbl PSS_RenderTextToVramViaBuffer\n" "\tldr r0, [r4, 0x4]\n" "\tldr r1, [r6, 0x20]\n" "\tmovs r2, 0x18\n" - "\tbl sub_804F728\n" + "\tbl RenderTextToVramViaBuffer\n" "\tldr r1, _0804D228 @ =gMain\n" "\tmovs r0, 0x87\n" "\tlsls r0, 3\n" @@ -2438,10 +2447,10 @@ void sub_804CF14(void) "\tb _0804D4D2\n" "\t.align 2, 0\n" "_0804D214: .4byte gSaveBlock2Ptr\n" - "_0804D218: .4byte gUnknown_2031C94\n" + "_0804D218: .4byte sSpriteTextTilePtrs\n" "_0804D21C: .4byte gDecompressionBuffer\n" "_0804D220: .4byte gLinkPlayers + 8\n" - "_0804D224: .4byte gUnknown_8261ECC\n" + "_0804D224: .4byte sTradeUITextPtrs\n" "_0804D228: .4byte gMain\n" "_0804D22C: .4byte sTradeMenuResourcesPtr\n" "_0804D230:\n" @@ -2820,7 +2829,7 @@ static void sub_804D5A4(void) { if (IsLinkRfuTaskFinished()) { - Free(gUnknown_2031C90); + Free(sSpriteTextTileBuffer); FreeAllWindowBuffers(); Free(sTradeMenuResourcesPtr); gMain.callback1 = NULL; @@ -2832,7 +2841,7 @@ static void sub_804D5A4(void) { if (gReceivedRemoteLinkPlayers == 0) { - Free(gUnknown_2031C90); + Free(sSpriteTextTileBuffer); FreeAllWindowBuffers(); Free(sTradeMenuResourcesPtr); gMain.callback1 = NULL; @@ -2844,7 +2853,7 @@ static void sub_804D5A4(void) static void sub_804D638(void) { RunTradeMenuCallback(); - sub_804F4DC(); + RunScheduledLinkTasks(); sub_804EAE4(0); sub_804EAE4(1); SetGpuReg(REG_OFFSET_BG2HOFS, sTradeMenuResourcesPtr->unk_0++); @@ -3080,7 +3089,7 @@ static bool8 shedinja_maker_maybe(void) static void sub_804DBAC(void) { - sub_804F728(gUnknown_841E0A5, (u8 *)OBJ_VRAM0 + sTradeMenuResourcesPtr->unk_72 * 32, 0x18); + RenderTextToVramViaBuffer(gUnknown_841E0A5, (u8 *)OBJ_VRAM0 + sTradeMenuResourcesPtr->unk_72 * 32, 0x18); } static void sub_804DBD4(u8 a0, u8 a1) @@ -3173,7 +3182,7 @@ static void sub_804DDF0(void) sTradeMenuResourcesPtr->unk_6F = 6; sTradeMenuResourcesPtr->linkData[0] = 0xDDDD; sTradeMenuResourcesPtr->linkData[1] = sTradeMenuResourcesPtr->tradeMenuCursorPosition; - sub_804F488(5, 0); + ScheduleLinkTaskWithDelay(5, 0); sTradeMenuResourcesPtr->unk_78 = sTradeMenuResourcesPtr->unk_79 = 0; } else if (sTradeMenuResourcesPtr->unk_78 == 1 && sTradeMenuResourcesPtr->unk_79 == 2) @@ -3181,7 +3190,7 @@ static void sub_804DDF0(void) PrintTradeErrorOrStatusMessage(TRADESTATMSG_CANCELED); sTradeMenuResourcesPtr->linkData[0] = 0xEECC; sTradeMenuResourcesPtr->linkData[1] = 0; - sub_804F488(5, 0); + ScheduleLinkTaskWithDelay(5, 0); sTradeMenuResourcesPtr->unk_7A = sTradeMenuResourcesPtr->unk_7B = 0; sTradeMenuResourcesPtr->unk_78 = sTradeMenuResourcesPtr->unk_79 = 0; sTradeMenuResourcesPtr->unk_6F = 8; @@ -3191,7 +3200,7 @@ static void sub_804DDF0(void) PrintTradeErrorOrStatusMessage(TRADESTATMSG_FRIENDWANTSTOTRADE); sTradeMenuResourcesPtr->linkData[0] = 0xDDEE; sTradeMenuResourcesPtr->linkData[1] = 0; - sub_804F488(5, 0); + ScheduleLinkTaskWithDelay(5, 0); sTradeMenuResourcesPtr->unk_7A = sTradeMenuResourcesPtr->unk_7B = 0; sTradeMenuResourcesPtr->unk_78 = sTradeMenuResourcesPtr->unk_79 = 0; sTradeMenuResourcesPtr->unk_6F = 8; @@ -3200,7 +3209,7 @@ static void sub_804DDF0(void) { sTradeMenuResourcesPtr->linkData[0] = 0xEEBB; sTradeMenuResourcesPtr->linkData[1] = 0; - sub_804F488(5, 0); + ScheduleLinkTaskWithDelay(5, 0); BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); sTradeMenuResourcesPtr->unk_78 = sTradeMenuResourcesPtr->unk_79 = 0; sTradeMenuResourcesPtr->unk_6F = 11; @@ -3213,7 +3222,7 @@ static void sub_804DDF0(void) { sTradeMenuResourcesPtr->linkData[0] = 0xCCDD; sTradeMenuResourcesPtr->linkData[1] = 0; - sub_804F488(5, 0); + ScheduleLinkTaskWithDelay(5, 0); sTradeMenuResourcesPtr->unk_7A = 0; sTradeMenuResourcesPtr->unk_7B = 0; sTradeMenuResourcesPtr->unk_6F = 9; @@ -3224,7 +3233,7 @@ static void sub_804DDF0(void) PrintTradeErrorOrStatusMessage(TRADESTATMSG_CANCELED); sTradeMenuResourcesPtr->linkData[0] = 0xDDEE; sTradeMenuResourcesPtr->linkData[1] = 0; - sub_804F488(5, 0); + ScheduleLinkTaskWithDelay(5, 0); sTradeMenuResourcesPtr->unk_7A = 0; sTradeMenuResourcesPtr->unk_7B = 0; sTradeMenuResourcesPtr->unk_6F = 8; @@ -3351,7 +3360,7 @@ static void sub_804E194(void) { CreateYesNoMenu(&gUnknown_8261FC4, 3, 0, 2, 0x001, 14, 0); sTradeMenuResourcesPtr->unk_6F = 4; - sub_804F728(gUnknown_8261ECC[4], (void *)OBJ_VRAM0 + sTradeMenuResourcesPtr->unk_72 * 32, 24); + RenderTextToVramViaBuffer(sTradeUITextPtrs[TRADEUITEXT_ASKCANCEL], (void *)OBJ_VRAM0 + sTradeMenuResourcesPtr->unk_72 * 32, 24); } } if (JOY_NEW(R_BUTTON)) @@ -3367,7 +3376,7 @@ static void sub_804E330(void) sub_804F3B4(); sTradeMenuResourcesPtr->unk_6F = 0; gSprites[sTradeMenuResourcesPtr->tradeMenuCursorSpriteIdx].invisible = FALSE; - sub_804F728(gUnknown_8261ECC[1], (void *)OBJ_VRAM0 + sTradeMenuResourcesPtr->unk_72 * 32, 24); + RenderTextToVramViaBuffer(sTradeUITextPtrs[TRADEUITEXT_CHOOSE], (void *)OBJ_VRAM0 + sTradeMenuResourcesPtr->unk_72 * 32, 24); } static void sub_804E388(void) @@ -3392,17 +3401,17 @@ static void sub_804E388(void) gSprites[sTradeMenuResourcesPtr->tradeMenuCursorSpriteIdx].invisible = TRUE; break; case 1: - sub_804F488(3, 3); + ScheduleLinkTaskWithDelay(3, 3); sTradeMenuResourcesPtr->unk_6F = 8; break; case 2: case 4: - sub_804F488(3, 6); + ScheduleLinkTaskWithDelay(3, 6); sTradeMenuResourcesPtr->unk_6F = 8; break; case 3: case 5: - sub_804F488(3, 7); + ScheduleLinkTaskWithDelay(3, 7); sTradeMenuResourcesPtr->unk_6F = 8; break; } @@ -3431,22 +3440,22 @@ static void sub_804E494(void) } } -static u8 sub_804E50C(u8 *a0, u8 a1, u8 a2) +static u8 sub_804E50C(u8 *flags, u8 partyCount, u8 cursorPos) { s32 i; u16 species; - u8 r4 = 0; - for (i = 0; i < a1; i++) + u8 count = 0; + for (i = 0; i < partyCount; i++) { - if (a2 != i) - r4 += a0[i]; + if (cursorPos != i) + count += flags[i]; } species = GetMonData(&gEnemyParty[sTradeMenuResourcesPtr->unk_7E % 6], MON_DATA_SPECIES); if ((species == SPECIES_DEOXYS || species == SPECIES_MEW) && !GetMonData(&gEnemyParty[sTradeMenuResourcesPtr->unk_7E % 6], MON_DATA_OBEDIENCE)) return 2; - if (r4 != 0) - r4 = 1; - return r4; + if (count != 0) + count = 1; + return count; } static void sub_804E5A0(void) @@ -3462,12 +3471,12 @@ static void sub_804E5A0(void) switch (sub_804E50C(arr, sTradeMenuResourcesPtr->partyCounts[0], sTradeMenuResourcesPtr->tradeMenuCursorPosition)) { case 0: - sub_804F488(3, 3); + ScheduleLinkTaskWithDelay(3, 3); sTradeMenuResourcesPtr->linkData[0] = 0xBBCC; - sub_804F488(0xB4, 0); + ScheduleLinkTaskWithDelay(0xB4, 0); break; case 1: - sub_804F488(3, 1); + ScheduleLinkTaskWithDelay(3, 1); sTradeMenuResourcesPtr->linkData[0] = 0xBBBB; if (IsLinkTaskFinished()) { @@ -3475,9 +3484,9 @@ static void sub_804E5A0(void) } break; case 2: - sub_804F488(3, 8); + ScheduleLinkTaskWithDelay(3, 8); sTradeMenuResourcesPtr->linkData[0] = 0xBBCC; - sub_804F488(0xB4, 0); + ScheduleLinkTaskWithDelay(0xB4, 0); break; } } @@ -3493,7 +3502,7 @@ static void sub_804E674(void) break; case 1: case MENU_B_PRESSED: - sub_804F488(3, 1); + ScheduleLinkTaskWithDelay(3, 1); if (IsLinkTaskFinished()) { sTradeMenuResourcesPtr->linkData[0] = 0xBBCC; @@ -3524,7 +3533,7 @@ static void sub_804E744(void) PrintTradeErrorOrStatusMessage(TRADESTATMSG_WAITINGFORFRIEND); sTradeMenuResourcesPtr->linkData[0] = 0xEEAA; sTradeMenuResourcesPtr->linkData[1] = 0; - sub_804F488(5, 0); + ScheduleLinkTaskWithDelay(5, 0); gSprites[sTradeMenuResourcesPtr->tradeMenuCursorSpriteIdx].invisible = TRUE; sTradeMenuResourcesPtr->unk_6F = 100; sub_804E6FC(); @@ -3615,7 +3624,7 @@ static void sub_804E944(void) { if (IsLinkTaskFinished()) { - Free(gUnknown_2031C90); + Free(sSpriteTextTileBuffer); Free(sTradeMenuResourcesPtr); FreeAllWindowBuffers(); DestroyWirelessStatusIndicatorSprite(); @@ -3626,7 +3635,7 @@ static void sub_804E944(void) { if (!gReceivedRemoteLinkPlayers) { - Free(gUnknown_2031C90); + Free(sSpriteTextTileBuffer); Free(sTradeMenuResourcesPtr); FreeAllWindowBuffers(); SetMainCallback2(c2_8056854); @@ -4016,7 +4025,7 @@ static void sub_804F3C8(u8 whichParty) sub_804F284(whichParty); sub_804F020(whichParty); sub_804F2E8(whichParty); - sub_804F728(gUnknown_8261ECC[1], (void *)OBJ_VRAM0 + 32 * sTradeMenuResourcesPtr->unk_72, 24); + RenderTextToVramViaBuffer(sTradeUITextPtrs[TRADEUITEXT_CHOOSE], (void *)OBJ_VRAM0 + 32 * sTradeMenuResourcesPtr->unk_72, 24); sTradeMenuResourcesPtr->unk_74[whichParty] = 0; } @@ -4032,36 +4041,36 @@ static void TradeMenuAction_Trade(u8 taskId) CopyBgTilemapBufferToVram(0); } -static void sub_804F488(u16 a0, u8 a1) +static void ScheduleLinkTaskWithDelay(u16 delay, u8 kind) { int i; for (i = 0; i < 4; i++) { - if (!sTradeMenuResourcesPtr->unk_8D0[i].unk_0) + if (!sTradeMenuResourcesPtr->cron[i].active) { - sTradeMenuResourcesPtr->unk_8D0[i].unk_2 = a0; - sTradeMenuResourcesPtr->unk_8D0[i].unk_4 = a1; - sTradeMenuResourcesPtr->unk_8D0[i].unk_0 = TRUE; + sTradeMenuResourcesPtr->cron[i].delay = delay; + sTradeMenuResourcesPtr->cron[i].kind = kind; + sTradeMenuResourcesPtr->cron[i].active = TRUE; break; } } } -static void sub_804F4DC(void) +static void RunScheduledLinkTasks(void) { int i; for (i = 0; i < 4; i++) { - if (sTradeMenuResourcesPtr->unk_8D0[i].unk_0) + if (sTradeMenuResourcesPtr->cron[i].active) { - if (sTradeMenuResourcesPtr->unk_8D0[i].unk_2) + if (sTradeMenuResourcesPtr->cron[i].delay != 0) { - sTradeMenuResourcesPtr->unk_8D0[i].unk_2--; + sTradeMenuResourcesPtr->cron[i].delay--; } else { - switch (sTradeMenuResourcesPtr->unk_8D0[i].unk_4) + switch (sTradeMenuResourcesPtr->cron[i].kind) { case 0: SendBlock(bitmask_all_link_players_but_self(), sTradeMenuResourcesPtr->linkData, 20); @@ -4087,7 +4096,7 @@ static void sub_804F4DC(void) PrintTradeErrorOrStatusMessage(TRADESTATMSG_PARTNERMONCANTBETRADED); break; } - sTradeMenuResourcesPtr->unk_8D0[i].unk_0 = FALSE; + sTradeMenuResourcesPtr->cron[i].active = FALSE; } } } @@ -4108,7 +4117,7 @@ static bool8 sub_804F610(void) if (sTradeMenuResourcesPtr->unk_A8 < 14) { - sheet.data = gUnknown_2031C94[sTradeMenuResourcesPtr->unk_A8]; + sheet.data = sSpriteTextTilePtrs[sTradeMenuResourcesPtr->unk_A8]; sheet.size = 0x100; sheet.tag = 200 + sTradeMenuResourcesPtr->unk_A8; } @@ -4147,9 +4156,9 @@ static bool8 sub_804F610(void) return FALSE; } -static void sub_804F728(const u8 *name, u8 *dest, u8 unused) +static void RenderTextToVramViaBuffer(const u8 *name, u8 *dest, u8 unused) { - sub_808BEB4(name, dest, 0, 0, gDecompressionBuffer, 6); + PSS_RenderTextToVramViaBuffer(name, dest, 0, 0, gDecompressionBuffer, 6); } static void sub_804F748(u8 who) diff --git a/src/trade_scene.c b/src/trade_scene.c index bcde7a55d..0c8029685 100644 --- a/src/trade_scene.c +++ b/src/trade_scene.c @@ -98,7 +98,7 @@ struct TradeAnimationResources { /*0xF4*/ u16 cachedMapMusic; /*0xF6*/ u8 unk_F6; /*0xF8*/ u16 monSpecies[2]; - /*0xFC*/ u8 unk_FC[7]; + /*0xFC*/ u8 linkPartnerName[7]; /*0x103*/ u8 filler_103[1]; /*0x104*/ u8 textColor[3]; /*0x107*/ u8 filler_107[1]; @@ -879,7 +879,7 @@ void CB2_InitTradeAnim_LinkTrade(void) ShowBg(0); sTradeData->monSpecies[0] = GetMonData(&gPlayerParty[gSelectedTradeMonPositions[0]], MON_DATA_SPECIES2); sTradeData->monSpecies[1] = GetMonData(&gEnemyParty[gSelectedTradeMonPositions[1] % 6], MON_DATA_SPECIES2); - memcpy(sTradeData->unk_FC, gLinkPlayers[GetMultiplayerId() ^ 1].name, 7); + memcpy(sTradeData->linkPartnerName, gLinkPlayers[GetMultiplayerId() ^ 1].name, 7); gMain.state++; break; case 11: diff --git a/sym_bss.txt b/sym_bss.txt index a8c5ba44c..1f9f5b3d8 100644 --- a/sym_bss.txt +++ b/sym_bss.txt @@ -20,10 +20,9 @@ .include "src/multiboot.o" .align 2 .include "src/daycare.o" - -gUnknown_3000E78: @ 3000E78 - .space 0x4 - + .align 2 + .include "src/trade.o" + .align 2 .include "src/play_time.o" .align 2 gUnknown_3000E80: @ 3000E80 -- cgit v1.2.3 From 518c4c09e9d1c43d07e67e55c19b600a05b90578 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 30 Oct 2019 16:53:54 -0400 Subject: Remove trainer_constants.inc, which is causing problems --- constants/constants.inc | 2 +- constants/trainer_constants.inc | 243 ---------------------------------------- 2 files changed, 1 insertion(+), 244 deletions(-) delete mode 100644 constants/trainer_constants.inc diff --git a/constants/constants.inc b/constants/constants.inc index 4365e90e1..4a513c355 100644 --- a/constants/constants.inc +++ b/constants/constants.inc @@ -4,7 +4,7 @@ .include "constants/contest_constants.inc" @ .include "constants/item_data_constants.inc" .include "constants/battle_move_constants.inc" - .include "constants/trainer_constants.inc" +@ .include "constants/trainer_constants.inc" .include "constants/berry_constants.inc" .include "constants/version.inc" .include "constants/battle.inc" diff --git a/constants/trainer_constants.inc b/constants/trainer_constants.inc deleted file mode 100644 index 48ed3036e..000000000 --- a/constants/trainer_constants.inc +++ /dev/null @@ -1,243 +0,0 @@ - .set TRAINER_CLASS_AQUA_LEADER, 0 - .set TRAINER_CLASS_TEAM_AQUA_M, 1 - .set TRAINER_CLASS_TEAM_AQUA_F, 2 - .set TRAINER_CLASS_AROMA_LADY, 3 - .set TRAINER_CLASS_RUIN_MANIAC, 4 - .set TRAINER_CLASS_INTERVIEWER, 5 - .set TRAINER_CLASS_TUBER_F, 6 - .set TRAINER_CLASS_TUBER_M, 7 - .set TRAINER_CLASS_COOL_TRAINER_M, 8 - .set TRAINER_CLASS_COOL_TRAINER_F, 9 - .set TRAINER_CLASS_HEX_MANIAC, 10 - .set TRAINER_CLASS_LADY, 11 - .set TRAINER_CLASS_BEAUTY, 12 - .set TRAINER_CLASS_RICH_BOY, 13 - .set TRAINER_CLASS_POKEMANIAC, 14 - .set TRAINER_CLASS_SWIMMER_M, 15 - .set TRAINER_CLASS_BLACK_BELT, 16 - .set TRAINER_CLASS_GUITARIST, 17 - .set TRAINER_CLASS_KINDLER, 18 - .set TRAINER_CLASS_CAMPER, 19 - .set TRAINER_CLASS_BUG_MANIAC, 20 - .set TRAINER_CLASS_PSYCHIC_M, 21 - .set TRAINER_CLASS_PSYCHIC_F, 22 - .set TRAINER_CLASS_GENTLEMAN, 23 - .set TRAINER_CLASS_ELITE_FOUR_M, 24 - .set TRAINER_CLASS_ELITE_FOUR_F, 25 - .set TRAINER_CLASS_LEADER_F, 26 - .set TRAINER_CLASS_LEADER_M, 27 - .set TRAINER_CLASS_LEADER_MF, 28 - .set TRAINER_CLASS_SCHOOL_KID_M, 29 - .set TRAINER_CLASS_SCHOOL_KID_F, 30 - .set TRAINER_CLASS_SR_AND_JR, 31 - .set TRAINER_CLASS_POKEFAN_M, 32 - .set TRAINER_CLASS_POKEFAN_F, 33 - .set TRAINER_CLASS_EXPERT_M, 34 - .set TRAINER_CLASS_EXPERT_F, 35 - .set TRAINER_CLASS_YOUNGSTER, 36 - .set TRAINER_CLASS_CHAMPION, 37 - .set TRAINER_CLASS_FISHERMAN, 38 - .set TRAINER_CLASS_CYCLING_TRIATHLETE_M, 39 - .set TRAINER_CLASS_CYCLING_TRIATHLETE_F, 40 - .set TRAINER_CLASS_RUNNING_TRIATHLETE_M, 41 - .set TRAINER_CLASS_RUNNING_TRIATHLETE_F, 42 - .set TRAINER_CLASS_SWIMMING_TRIATHLETE_M, 43 - .set TRAINER_CLASS_SWIMMING_TRIATHLETE_F, 44 - .set TRAINER_CLASS_DRAGON_TAMER, 45 - .set TRAINER_CLASS_BIRD_KEEPER, 46 - .set TRAINER_CLASS_NINJA_BOY, 47 - .set TRAINER_CLASS_BATTLE_GIRL, 48 - .set TRAINER_CLASS_PARASOL_LADY, 49 - .set TRAINER_CLASS_SWIMMER_F, 50 - .set TRAINER_CLASS_PICNICKER, 51 - .set TRAINER_CLASS_TWINS, 52 - .set TRAINER_CLASS_SAILOR, 53 - .set TRAINER_CLASS_BOARDER_1, 54 - .set TRAINER_CLASS_BOARDER_2, 55 - .set TRAINER_CLASS_COLLECTOR, 56 - .set TRAINER_CLASS_WALLY, 57 - .set TRAINER_CLASS_BRENDAN_1, 58 - .set TRAINER_CLASS_BRENDAN_2, 59 - .set TRAINER_CLASS_BRENDAN_3, 60 - .set TRAINER_CLASS_MAY_1, 61 - .set TRAINER_CLASS_MAY_2, 62 - .set TRAINER_CLASS_MAY_3, 63 - .set TRAINER_CLASS_POKEMON_BREEDER_M, 64 - .set TRAINER_CLASS_POKEMON_BREEDER_F, 65 - .set TRAINER_CLASS_POKEMON_RANGER_M, 66 - .set TRAINER_CLASS_POKEMON_RANGER_F, 67 - .set TRAINER_CLASS_MAGMA_LEADER, 68 - .set TRAINER_CLASS_TEAM_MAGMA_M, 69 - .set TRAINER_CLASS_TEAM_MAGMA_F, 70 - .set TRAINER_CLASS_LASS, 71 - .set TRAINER_CLASS_BUG_CATCHER, 72 - .set TRAINER_CLASS_HIKER, 73 - .set TRAINER_CLASS_YOUNG_COUPLE, 74 - .set TRAINER_CLASS_OLD_COUPLE, 75 - .set TRAINER_CLASS_SIS_AND_BRO, 76 - - .set TRAINER_PIC_BRENDAN, 0 - .set TRAINER_PIC_MAY, 1 - .set TRAINER_PIC_LASS, 2 - .set TRAINER_PIC_YOUNGSTER, 3 - .set TRAINER_PIC_HIKER, 4 - .set TRAINER_PIC_BEAUTY, 5 - .set TRAINER_PIC_FISHERMAN, 6 - .set TRAINER_PIC_LADY, 7 - .set TRAINER_PIC_CYCLING_TRIATHLETE_M, 8 - .set TRAINER_PIC_AQUA_GRUNT_M, 9 - .set TRAINER_PIC_TWINS, 10 - .set TRAINER_PIC_SWIMMER_F, 11 - .set TRAINER_PIC_BUG_CATCHER, 12 - .set TRAINER_PIC_SCHOOL_KID_M, 13 - .set TRAINER_PIC_RICH_BOY, 14 - .set TRAINER_PIC_SR_AND_JR, 15 - .set TRAINER_PIC_BLACK_BELT, 16 - .set TRAINER_PIC_WALLY, 17 - .set TRAINER_PIC_AQUA_GRUNT_F, 18 - .set TRAINER_PIC_TUBER_F, 19 - .set TRAINER_PIC_HEX_MANIAC, 20 - .set TRAINER_PIC_POKEMON_BREEDER_F, 21 - .set TRAINER_PIC_MAGMA_GRUNT_M, 22 - .set TRAINER_PIC_MAGMA_GRUNT_F, 23 - .set TRAINER_PIC_INTERVIEWER, 24 - .set TRAINER_PIC_TUBER_M, 25 - .set TRAINER_PIC_YOUNG_COUPLE, 26 - .set TRAINER_PIC_GUITARIST, 27 - .set TRAINER_PIC_GENTLEMAN, 28 - .set TRAINER_PIC_STEVEN, 29 - .set TRAINER_PIC_MAXIE, 30 - .set TRAINER_PIC_RUNNING_TRIATHLETE_F, 31 - .set TRAINER_PIC_RUNNING_TRIATHLETE_M, 32 - .set TRAINER_PIC_BATTLE_GIRL, 33 - .set TRAINER_PIC_CYCLING_TRIATHLETE_F, 34 - .set TRAINER_PIC_SWIMMER_M, 35 - .set TRAINER_PIC_POKEFAN_F, 36 - .set TRAINER_PIC_EXPERT_M, 37 - .set TRAINER_PIC_EXPERT_F, 38 - .set TRAINER_PIC_SWIMMING_TRIATHLETE_M, 39 - .set TRAINER_PIC_SWIMMING_TRIATHLETE_F, 40 - .set TRAINER_PIC_DRAGON_TAMER, 41 - .set TRAINER_PIC_BIRD_KEEPER, 42 - .set TRAINER_PIC_NINJA_BOY, 43 - .set TRAINER_PIC_PARASOL_LADY, 44 - .set TRAINER_PIC_BUG_MANIAC, 45 - .set TRAINER_PIC_SAILOR, 46 - .set TRAINER_PIC_COLLECTOR, 47 - .set TRAINER_PIC_POKEMON_BREEDER_M, 48 - .set TRAINER_PIC_POKEMON_RANGER_M, 49 - .set TRAINER_PIC_POKEMON_RANGER_F, 50 - .set TRAINER_PIC_MAGMA_ADMIN_M, 51 - .set TRAINER_PIC_MAGMA_ADMIN_F, 52 - .set TRAINER_PIC_AROMA_LADY, 53 - .set TRAINER_PIC_RUIN_MANIAC, 54 - .set TRAINER_PIC_COOL_TRAINER_M, 55 - .set TRAINER_PIC_COOL_TRAINER_F, 56 - .set TRAINER_PIC_POKEMANIAC, 57 - .set TRAINER_PIC_KINDLER, 58 - .set TRAINER_PIC_CAMPER, 59 - .set TRAINER_PIC_PICNICKER, 60 - .set TRAINER_PIC_PSYCHIC_M, 61 - .set TRAINER_PIC_PSYCHIC_F, 62 - .set TRAINER_PIC_SCHOOL_KID_F, 63 - .set TRAINER_PIC_POKEFAN_M, 64 - .set TRAINER_PIC_SIS_AND_BRO, 65 - .set TRAINER_PIC_OLD_COUPLE, 66 - .set TRAINER_PIC_AQUA_ADMIN_M, 67 - .set TRAINER_PIC_AQUA_ADMIN_F, 68 - .set TRAINER_PIC_UNUSED_AQUA, 69 - .set TRAINER_PIC_ARCHIE, 70 - .set TRAINER_PIC_ROXANNE, 71 - .set TRAINER_PIC_BRAWLY, 72 - .set TRAINER_PIC_WATTSON, 73 - .set TRAINER_PIC_FLANNERY, 74 - .set TRAINER_PIC_NORMAN, 75 - .set TRAINER_PIC_WINONA, 76 - .set TRAINER_PIC_TATE_AND_LIZA, 77 - .set TRAINER_PIC_WALLACE, 78 - .set TRAINER_PIC_SIDNEY, 79 - .set TRAINER_PIC_PHOEBE, 80 - .set TRAINER_PIC_GLACIA, 81 - .set TRAINER_PIC_DRAKE, 82 - - .set TRAINER_CLASS_NAME_POKEMON_TRAINER_1, 0 - .set TRAINER_CLASS_NAME_POKEMON_TRAINER_2, 1 - .set TRAINER_CLASS_NAME_AQUA_LEADER, 2 - .set TRAINER_CLASS_NAME_TEAM_AQUA, 3 - .set TRAINER_CLASS_NAME_AQUA_ADMIN, 4 - .set TRAINER_CLASS_NAME_AROMA_LADY, 5 - .set TRAINER_CLASS_NAME_RUIN_MANIAC, 6 - .set TRAINER_CLASS_NAME_INTERVIEWER, 7 - .set TRAINER_CLASS_NAME_TUBER_F, 8 - .set TRAINER_CLASS_NAME_TUBER_M, 9 - .set TRAINER_CLASS_NAME_COOL_TRAINER, 10 - .set TRAINER_CLASS_NAME_HEX_MANIAC, 11 - .set TRAINER_CLASS_NAME_LADY, 12 - .set TRAINER_CLASS_NAME_BEAUTY, 13 - .set TRAINER_CLASS_NAME_RICH_BOY, 14 - .set TRAINER_CLASS_NAME_POKEMANIAC, 15 - .set TRAINER_CLASS_NAME_SWIMMER_M, 16 - .set TRAINER_CLASS_NAME_BLACK_BELT, 17 - .set TRAINER_CLASS_NAME_GUITARIST, 18 - .set TRAINER_CLASS_NAME_KINDLER, 19 - .set TRAINER_CLASS_NAME_CAMPER, 20 - .set TRAINER_CLASS_NAME_BUG_MANIAC, 21 - .set TRAINER_CLASS_NAME_PSYCHIC, 22 - .set TRAINER_CLASS_NAME_GENTLEMAN, 23 - .set TRAINER_CLASS_NAME_ELITE_FOUR, 24 - .set TRAINER_CLASS_NAME_LEADER, 25 - .set TRAINER_CLASS_NAME_SCHOOL_KID, 26 - .set TRAINER_CLASS_NAME_SR_AND_JR, 27 - .set TRAINER_CLASS_NAME_WINSTRATE, 28 - .set TRAINER_CLASS_NAME_POKEFAN, 29 - .set TRAINER_CLASS_NAME_EXPERT, 30 - .set TRAINER_CLASS_NAME_YOUNGSTER, 31 - .set TRAINER_CLASS_NAME_CHAMPION, 32 - .set TRAINER_CLASS_NAME_FISHERMAN, 33 - .set TRAINER_CLASS_NAME_TRIATHLETE, 34 - .set TRAINER_CLASS_NAME_DRAGON_TAMER, 35 - .set TRAINER_CLASS_NAME_BIRD_KEEPER, 36 - .set TRAINER_CLASS_NAME_NINJA_BOY, 37 - .set TRAINER_CLASS_NAME_BATTLE_GIRL, 38 - .set TRAINER_CLASS_NAME_PARASOL_LADY, 39 - .set TRAINER_CLASS_NAME_SWIMMER_F, 40 - .set TRAINER_CLASS_NAME_PICNICKER, 41 - .set TRAINER_CLASS_NAME_TWINS, 42 - .set TRAINER_CLASS_NAME_SAILOR, 43 - .set TRAINER_CLASS_NAME_BOARDER, 44 - .set TRAINER_CLASS_NAME_COLLECTOR, 45 - .set TRAINER_CLASS_NAME_POKEMON_TRAINER_3, 46 - .set TRAINER_CLASS_NAME_POKEMON_BREEDER, 47 - .set TRAINER_CLASS_NAME_POKEMON_RANGER, 48 - .set TRAINER_CLASS_NAME_MAGMA_LEADER, 49 - .set TRAINER_CLASS_NAME_TEAM_MAGMA, 50 - .set TRAINER_CLASS_NAME_MAGMA_ADMIN, 51 - .set TRAINER_CLASS_NAME_LASS, 52 - .set TRAINER_CLASS_NAME_BUG_CATCHER, 53 - .set TRAINER_CLASS_NAME_HIKER, 54 - .set TRAINER_CLASS_NAME_YOUNG_COUPLE, 55 - .set TRAINER_CLASS_NAME_OLD_COUPLE, 56 - .set TRAINER_CLASS_NAME_SIS_AND_BRO, 57 - - .set TRAINER_ENCOUNTER_MUSIC_MALE, 0 @ standard male encounter music - .set TRAINER_ENCOUNTER_MUSIC_FEMALE, 1 @ standard female encounter music - .set TRAINER_ENCOUNTER_MUSIC_GIRL, 2 @ used for male Tubers and Young Couples too - .set TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, 3 - .set TRAINER_ENCOUNTER_MUSIC_INTENSE, 4 - .set TRAINER_ENCOUNTER_MUSIC_COOL, 5 - .set TRAINER_ENCOUNTER_MUSIC_AQUA, 6 - .set TRAINER_ENCOUNTER_MUSIC_MAGMA, 7 - .set TRAINER_ENCOUNTER_MUSIC_SWIMMER, 8 - .set TRAINER_ENCOUNTER_MUSIC_TWINS, 9 @ used for other trainer classes too - .set TRAINER_ENCOUNTER_MUSIC_ELITE_FOUR, 10 - .set TRAINER_ENCOUNTER_MUSIC_HIKER, 11 @ used for other trainer classes too - .set TRAINER_ENCOUNTER_MUSIC_INTERVIEWER, 12 - .set TRAINER_ENCOUNTER_MUSIC_RICH, 13 @ Rich Boys and Gentlemen - - .set F_TRAINER_FEMALE, 1 << 7 - -@ All trainer parties specify the IV, level, and species for each Pokémon in the -@ party. Some trainer parties also specify held items and custom moves for each -@ Pokémon. - .set F_TRAINER_PARTY_CUSTOM_MOVESET, 1 << 0 - .set F_TRAINER_PARTY_HELD_ITEM, 1 << 1 -- cgit v1.2.3 From 1907fdaccaddd00aa760389c4e8935bc48de2b50 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 30 Oct 2019 16:56:39 -0400 Subject: Ignore an IDE file --- .gitignore | 1 + _Deparsed_XSubs.pm | 11429 --------------------------------------------------- 2 files changed, 1 insertion(+), 11429 deletions(-) delete mode 100644 _Deparsed_XSubs.pm diff --git a/.gitignore b/.gitignore index 359d15abf..176611d4a 100644 --- a/.gitignore +++ b/.gitignore @@ -50,3 +50,4 @@ tools/br_ips/ips_patch types_*.taghl !.travis/calcrom/calcrom.pl !sound/programmable_wave_samples/*.pcm +_Deparsed_XSubs.pm diff --git a/_Deparsed_XSubs.pm b/_Deparsed_XSubs.pm deleted file mode 100644 index 9623040ce..000000000 --- a/_Deparsed_XSubs.pm +++ /dev/null @@ -1,11429 +0,0 @@ -# -# -# DO NOT EDIT THIS FILE, IT'S AUTOGENERATED FROM XS MODULES AND WILL BE UPDATED AUTOMATICALLY -# -# -package B { -sub CLONE; -sub address; -sub amagic_generation; -sub begin_av; -sub cast_I32; -sub cchar; -sub check_av; -sub comppadlist; -sub cstring; -sub curstash; -sub defstash; -sub diehook; -sub dowarn; -sub end_av; -sub formfeed; -sub hash; -sub inc_gv; -sub init_av; -sub main_cv; -sub main_root; -sub main_start; -sub minus_c; -sub opnumber; -sub perlstring; -sub ppname; -sub regex_padav; -sub save_BEGINs; -sub sub_generation; -sub sv_no; -sub sv_undef; -sub sv_yes; -sub svref_2object; -sub threadsv_names; -sub unitcheck_av; -sub walkoptree; -sub walkoptree_debug; -sub warnhook; -} -package B::AV { -sub ARRAY; -sub ARRAYelt; -sub FILL; -sub MAX; -} -package B::BINOP { -sub last; -} -package B::BM { -sub PREVIOUS; -sub RARE; -sub TABLE; -sub USEFUL; -} -package B::COP { -sub arybase; -sub cop_seq; -sub file; -sub filegv; -sub hints; -sub hints_hash; -sub io; -sub label; -sub line; -sub stash; -sub stashoff; -sub stashpv; -sub warnings; -} -package B::CV { -sub CONST; -sub CvFLAGS; -sub DEPTH; -sub FILE; -sub GV; -sub HSCXT; -sub NAME_HEK; -sub OUTSIDE; -sub OUTSIDE_SEQ; -sub PADLIST; -sub ROOT; -sub START; -sub STASH; -sub XSUB; -sub XSUBANY; -sub const_sv; -} -package B::Deparse { -sub main_cv; -sub main_root; -sub main_start; -sub opnumber; -sub perlstring; -sub svref_2object; -} -package B::FM { -sub LINES; -} -package B::GV { -sub AV; -sub CV; -sub CVGEN; -sub EGV; -sub FILE; -sub FILEGV; -sub FORM; -sub GP; -sub GPFLAGS; -sub GvFLAGS; -sub GvREFCNT; -sub HV; -sub IO; -sub LINE; -sub NAME; -sub STASH; -sub SV; -sub isGV_with_GP; -sub is_empty; -} -package B::HE { -sub HASH; -sub SVKEY_force; -sub VAL; -} -package B::HV { -sub ARRAY; -sub FILL; -sub KEYS; -sub MAX; -sub NAME; -sub RITER; -} -package B::IO { -sub BOTTOM_GV; -sub BOTTOM_NAME; -sub FMT_GV; -sub FMT_NAME; -sub IoFLAGS; -sub IoTYPE; -sub IsSTD; -sub LINES; -sub LINES_LEFT; -sub PAGE; -sub PAGE_LEN; -sub TOP_GV; -sub TOP_NAME; -} -package B::IV { -sub IV; -sub IVX; -sub RV; -sub UVX; -sub needs64bits; -sub packiv; -} -package B::LISTOP { -sub children; -} -package B::LOGOP { -sub other; -} -package B::LOOP { -sub lastop; -sub nextop; -sub redoop; -} -package B::MAGIC { -sub FLAGS; -sub LENGTH; -sub MOREMAGIC; -sub OBJ; -sub PRIVATE; -sub PTR; -sub REGEX; -sub TYPE; -sub precomp; -} -package B::METHOP { -sub first; -sub meth_sv; -sub rclass; -} -package B::NV { -sub NV; -sub NVX; -} -package B::OP { -sub desc; -sub flags; -sub folded; -sub moresib; -sub name; -sub next; -sub oplist; -sub opt; -sub parent; -sub ppaddr; -sub private; -sub savefree; -sub sibling; -sub size; -sub slabbed; -sub spare; -sub static; -sub targ; -sub type; -} -package B::PADLIST { -sub ARRAY; -sub ARRAYelt; -sub MAX; -sub NAMES; -sub REFCNT; -sub id; -sub outid; -} -package B::PADNAME { -sub COP_SEQ_RANGE_HIGH; -sub COP_SEQ_RANGE_LOW; -sub FLAGS; -sub LEN; -sub OURSTASH; -sub PARENT_FAKELEX_FLAGS; -sub PARENT_PAD_INDEX; -sub PROTOCV; -sub PV; -sub PVX; -sub REFCNT; -sub SvSTASH; -sub TYPE; -} -package B::PADNAMELIST { -sub ARRAY; -sub ARRAYelt; -sub MAX; -sub REFCNT; -} -package B::PADOP { -sub gv; -sub padix; -sub sv; -} -package B::PMOP { -sub code_list; -sub pmflags; -sub pmoffset; -sub pmregexp; -sub pmreplroot; -sub pmreplstart; -sub pmstash; -sub pmstashpv; -sub precomp; -sub reflags; -} -package B::PV { -sub CUR; -sub LEN; -sub PV; -sub PVBM; -sub PVX; -sub RV; -sub as_string; -} -package B::PVLV { -sub TARG; -sub TARGLEN; -sub TARGOFF; -sub TYPE; -} -package B::PVMG { -sub MAGIC; -sub SvSTASH; -} -package B::PVOP { -sub pv; -} -package B::REGEXP { -sub REGEX; -sub compflags; -sub precomp; -sub qr_anoncv; -} -package B::RHE { -sub HASH; -} -package B::SV { -sub FLAGS; -sub MAGICAL; -sub POK; -sub REFCNT; -sub ROK; -sub SvTYPE; -sub object_2svref; -} -package B::SVOP { -sub gv; -sub sv; -} -package B::UNOP { -sub first; -} -package B::UNOP_AUX { -sub aux_list; -sub string; -} -package B::Utils { -sub anon_sub; -sub blessed($) ; -sub main_cv; -sub main_root; -sub main_start; -sub ppname; -sub shuffle(@) ; -sub weaken($) ; -} -package BerkeleyDB { -sub _db_remove; -sub _db_rename; -sub _db_verify; -sub constant; -sub db_value_set; -sub db_version; -sub has_heap; -} -package BerkeleyDB::Btree { -sub _db_open_btree; -sub db_stat; -} -package BerkeleyDB::Common { -sub ArrayOffset; -sub _DESTROY; -sub _Txn; -sub __db_write_cursor; -sub _db_cursor; -sub _db_join; -sub associate; -sub associate_foreign; -sub byteswapped; -sub cds_enabled; -sub compact; -sub db_close; -sub db_create_sequence; -sub db_del; -sub db_exists; -sub db_fd; -sub db_get; -sub db_key_range; -sub db_pget; -sub db_put; -sub db_sync; -sub filter_fetch_key; -sub filter_fetch_value; -sub filter_store_key; -sub filter_store_value; -sub get_blob_dir; -sub get_blob_threshold; -sub partial_clear; -sub partial_set; -sub stat_print; -sub status; -sub truncate; -sub type; -} -package BerkeleyDB::Cursor { -sub _DESTROY; -sub _c_close; -sub _c_dup; -sub _c_get_db_stream; -sub _db_stream; -sub c_count; -sub c_del; -sub c_get; -sub c_pget; -sub c_put; -sub partial_clear; -sub partial_set; -sub status; -} -package BerkeleyDB::DbStream { -sub DESTROY; -sub close; -sub read; -sub size; -sub write; -} -package BerkeleyDB::Env { -sub DB_ENV; -sub O_ALIAS() ; -sub O_ASYNC() ; -sub O_DEFER() ; -sub O_DIRECT() ; -sub O_DIRECTORY() ; -sub O_DSYNC() ; -sub O_EXLOCK() ; -sub O_LARGEFILE() ; -sub O_NDELAY() ; -sub O_NOCTTY() ; -sub O_NOFOLLOW() ; -sub O_NONBLOCK() ; -sub O_RSRC() ; -sub O_RSYNC() ; -sub O_SHLOCK() ; -sub O_SYNC() ; -sub _DESTROY; -sub _TxnMgr; -sub _db_appinit; -sub _txn_begin; -sub cds_enabled; -sub close; -sub create; -sub db_appexit; -sub errPrefix; -sub failchk; -sub get_blob_dir; -sub get_blob_threshold; -sub get_region_dir; -sub get_shm_key; -sub get_slice_count; -sub get_timeout; -sub lock_detect; -sub lock_stat_print; -sub log_archive; -sub log_get_config; -sub log_set_config; -sub lsn_reset; -sub mutex_stat_print; -sub open; -sub printEnv; -sub set_blob_threshold; -sub set_data_dir; -sub set_encrypt; -sub set_flags; -sub set_isalive; -sub set_lg_bsize; -sub set_lg_dir; -sub set_lg_filemode; -sub set_lg_max; -sub set_mutexlocks; -sub set_region_dir; -sub set_timeout; -sub set_tmp_dir; -sub set_verbose; -sub stat_print; -sub status; -sub txn_checkpoint; -sub txn_stat; -sub txn_stat_print; -} -package BerkeleyDB::Hash { -sub _db_open_hash; -sub db_stat; -} -package BerkeleyDB::Heap { -sub _db_open_heap; -} -package BerkeleyDB::Queue { -sub FETCHSIZE; -sub _db_open_queue; -sub db_stat; -} -package BerkeleyDB::Recno { -sub FETCHSIZE; -sub _db_open_recno; -sub db_stat; -} -package BerkeleyDB::Sequence { -sub DESTROY; -sub close; -sub get; -sub get_cachesize; -sub get_flags; -sub get_key; -sub initial_value; -sub open; -sub remove; -sub set_cachesize; -sub set_flags; -sub set_range; -sub stat; -} -package BerkeleyDB::Term { -sub close_everything; -sub safeCroak; -} -package BerkeleyDB::Txn { -sub _DESTROY; -sub _txn_abort; -sub _txn_commit; -sub _txn_discard; -sub get_tx_max; -sub set_timeout; -sub set_tx_max; -sub status; -sub txn_id; -sub txn_prepare; -sub txn_unlink; -} -package BerkeleyDB::TxnMgr { -sub _DESTROY; -sub _txn_begin; -sub status; -sub txn_checkpoint; -sub txn_close; -sub txn_open; -sub txn_stat; -} -package BerkeleyDB::Unknown { -sub _db_open_unknown; -} -package BerkeleyDB::_tiedArray { -sub FETCHSIZE; -sub FIRSTKEY; -sub NEXTKEY; -sub length; -} -package BerkeleyDB::_tiedHash { -sub FIRSTKEY; -sub NEXTKEY; -} -package Carp { -sub _maybe_isa; -sub downgrade; -sub is_utf8; -} -package Class::Load { -sub is_class_loaded; -} -package Class::Load::XS { -sub is_class_loaded; -} -package Class::MOP { -sub blessed($) ; -sub check_package_cache_flag($) ; -sub get_code_info($) ; -sub isweak($) ; -sub weaken($) ; -} -package Class::MOP::Attribute { -sub associated_class; -sub associated_methods; -sub blessed($) ; -sub weaken($) ; -} -package Class::MOP::Class { -sub all(&@) ; -sub blessed($) ; -sub constructor_class; -sub constructor_name; -sub destructor_class; -sub immutable_trait; -sub instance_metaclass; -sub subname; -} -package Class::MOP::Instance { -sub associated_metaclass; -sub blessed($) ; -sub isweak($) ; -sub slot_hash; -sub slots; -sub weaken($) ; -} -package Class::MOP::Method { -sub blessed($) ; -sub body; -sub is_stub; -sub name; -sub package_name; -sub reftype($) ; -sub weaken($) ; -} -package Class::MOP::Method::Accessor { -sub blessed($) ; -sub weaken($) ; -} -package Class::MOP::Method::Constructor { -sub blessed($) ; -sub weaken($) ; -} -package Class::MOP::Method::Generated { -sub definition_context; -sub is_inline; -} -package Class::MOP::Method::Inlined { -sub _expected_method_class; -sub refaddr($) ; -} -package Class::MOP::Method::Meta { -sub blessed($) ; -sub weaken($) ; -} -package Class::MOP::Method::Wrapped { -sub blessed($) ; -sub subname; -} -package Class::MOP::Mixin { -sub blessed($) ; -} -package Class::MOP::Mixin::AttributeCore { -sub accessor; -sub blessed($) ; -sub builder; -sub clearer; -sub definition_context; -sub init_arg; -sub initializer; -sub insertion_order; -sub name; -sub predicate; -sub reader; -sub writer; -} -package Class::MOP::Mixin::HasAttributes { -sub _attribute_map; -sub attribute_metaclass; -sub blessed($) ; -} -package Class::MOP::Mixin::HasMethods { -sub _method_map; -sub blessed($) ; -sub method_metaclass; -sub reftype($) ; -sub subname; -sub wrapped_method_metaclass; -} -package Class::MOP::Mixin::HasOverloads { -sub blessed($) ; -} -package Class::MOP::Object { -sub blessed($) ; -} -package Class::MOP::Overload { -sub blessed($) ; -sub weaken($) ; -} -package Class::MOP::Package { -sub blessed($) ; -sub name; -sub weaken($) ; -} -package Class::XSAccessor { -sub __entersub_optimized__() ; -sub _newxs_compat_accessor; -sub _newxs_compat_setter; -sub accessor; -sub array_accessor; -sub array_accessor_init; -sub array_setter; -sub array_setter_init; -sub chained_accessor; -sub chained_setter; -sub constant_false; -sub constant_true; -sub constructor; -sub defined_predicate; -sub exists_predicate; -sub getter; -sub lvalue_accessor; -sub newxs_accessor; -sub newxs_boolean; -sub newxs_constructor; -sub newxs_defined_predicate; -sub newxs_exists_predicate; -sub newxs_getter; -sub newxs_lvalue_accessor; -sub newxs_predicate; -sub newxs_setter; -sub newxs_test; -sub setter; -sub test; -} -package Class::XSAccessor::Array { -sub accessor; -sub chained_accessor; -sub chained_setter; -sub constructor; -sub getter; -sub lvalue_accessor; -sub newxs_accessor; -sub newxs_constructor; -sub newxs_getter; -sub newxs_lvalue_accessor; -sub newxs_predicate; -sub newxs_setter; -sub predicate; -sub setter; -} -package Clone { -sub clone($;$) ; -} -package Compress::Raw::Bunzip2 { -sub DESTROY; -sub DispStream; -sub bzinflate; -sub compressedBytes; -sub inflateCount; -sub new; -sub status; -sub total_in_lo32; -sub total_out_lo32; -sub uncompressedBytes; -} -package Compress::Raw::Bzip2 { -sub DESTROY; -sub DispStream; -sub bzclose; -sub bzdeflate; -sub bzflush; -sub bzlibversion; -sub compressedBytes; -sub constant; -sub new; -sub total_in_lo32; -sub total_out_lo32; -sub uncompressedBytes; -} -package Compress::Raw::Lzma { -sub LZMA_BACKWARD_SIZE_MAX; -sub LZMA_FILTER_LZMA1; -sub LZMA_VERSION; -sub LZMA_VERSION_STRING; -sub blessed($) ; -sub constant; -sub lzma_alone_decoder; -sub lzma_alone_encoder; -sub lzma_auto_decoder; -sub lzma_check_is_supported; -sub lzma_check_size; -sub lzma_easy_decoder_memusage; -sub lzma_easy_encoder; -sub lzma_easy_encoder_memusage; -sub lzma_filter_decoder_is_supported; -sub lzma_filter_encoder_is_supported; -sub lzma_mf_is_supported; -sub lzma_mode_is_supported; -sub lzma_raw_decoder; -sub lzma_raw_encoder; -sub lzma_stream_buffer_bound; -sub lzma_stream_decoder; -sub lzma_stream_encoder; -sub lzma_version_number; -sub lzma_version_string; -} -package Compress::Raw::Lzma::Decoder { -sub DESTROY; -sub code; -sub compressedBytes; -sub uncompressedBytes; -} -package Compress::Raw::Lzma::Encoder { -sub DESTROY; -sub code; -sub compressedBytes; -sub flush; -sub uncompressedBytes; -} -package Compress::Raw::Lzma::Options { -sub DESTROY; -sub lzma_lzma_preset; -sub new; -} -package Compress::Raw::Zlib { -sub ZLIB_VERNUM; -sub _deflateInit; -sub _inflateInit; -sub _inflateScanInit; -sub adler32; -sub adler32_combine; -sub constant; -sub crc32; -sub crc32_combine; -sub zlibCompileFlags; -sub zlib_version; -} -package Compress::Raw::Zlib::deflateStream { -sub DESTROY; -sub DispStream; -sub _deflateParams; -sub adler32; -sub compressedBytes; -sub crc32; -sub deflate; -sub deflateReset; -sub deflateTune; -sub dict_adler; -sub flush; -sub get_Bufsize; -sub get_Level; -sub get_Strategy; -sub msg; -sub status; -sub total_in; -sub total_out; -sub uncompressedBytes; -} -package Compress::Raw::Zlib::inflateScanStream { -sub DESTROY; -sub DispStream; -sub _createDeflateStream; -sub adler32; -sub compressedBytes; -sub crc32; -sub getEndOffset; -sub getLastBlockOffset; -sub getLastBufferOffset; -sub inflateCount; -sub inflateReset; -sub resetLastBlockByte; -sub scan; -sub status; -sub uncompressedBytes; -} -package Compress::Raw::Zlib::inflateStream { -sub DESTROY; -sub DispStream; -sub adler32; -sub compressedBytes; -sub crc32; -sub dict_adler; -sub get_Bufsize; -sub inflate; -sub inflateCount; -sub inflateReset; -sub inflateSync; -sub msg; -sub set_Append; -sub status; -sub total_in; -sub total_out; -sub uncompressedBytes; -} -package Compress::unLZMA { -sub uncompressdata; -sub uncompressfile; -} -package Config { -sub AUTOLOAD; -} -package Cpanel::JSON::XS { -sub CLONE; -sub DESTROY; -sub _from_json($;$$) ; -sub _to_json($;$) ; -sub allow_barekey; -sub allow_bignum; -sub allow_blessed; -sub allow_dupkeys; -sub allow_nonref; -sub allow_singlequote; -sub allow_stringify; -sub allow_tags; -sub allow_unknown; -sub ascii; -sub binary; -sub canonical; -sub convert_blessed; -sub decode; -sub decode_json($;$$) ; -sub decode_prefix; -sub encode; -sub encode_json($;$) ; -sub escape_slash; -sub filter_json_object; -sub filter_json_single_key_object; -sub get_allow_barekey; -sub get_allow_bignum; -sub get_allow_blessed; -sub get_allow_dupkeys; -sub get_allow_nonref; -sub get_allow_singlequote; -sub get_allow_stringify; -sub get_allow_tags; -sub get_allow_unknown; -sub get_ascii; -sub get_binary; -sub get_canonical; -sub get_convert_blessed; -sub get_escape_slash; -sub get_indent; -sub get_indent_length; -sub get_latin1; -sub get_max_depth; -sub get_max_size; -sub get_relaxed; -sub get_shrink; -sub get_space_after; -sub get_space_before; -sub get_stringify_infnan; -sub get_unblessed_bool; -sub get_utf8; -sub incr_parse; -sub incr_reset; -sub incr_skip; -sub indent; -sub indent_length; -sub latin1; -sub max_depth; -sub max_size; -sub new; -sub pretty; -sub relaxed; -sub shrink; -sub sort_by; -sub space_after; -sub space_before; -sub stringify_infnan; -sub unblessed_bool; -sub utf8; -} -package Crypt::AuthEnc::CCM { -sub DESTROY; -sub ccm_decrypt_verify; -sub ccm_encrypt_authenticate; -sub clone; -sub decrypt_add; -sub decrypt_done; -sub encrypt_add; -sub encrypt_done; -sub new; -} -package Crypt::AuthEnc::ChaCha20Poly1305 { -sub DESTROY; -sub adata_add; -sub chacha20poly1305_decrypt_verify; -sub chacha20poly1305_encrypt_authenticate; -sub clone; -sub decrypt_add; -sub decrypt_done; -sub encrypt_add; -sub encrypt_done; -sub new; -sub set_iv; -sub set_iv_rfc7905; -} -package Crypt::AuthEnc::EAX { -sub DESTROY; -sub adata_add; -sub clone; -sub decrypt_add; -sub decrypt_done; -sub eax_decrypt_verify; -sub eax_encrypt_authenticate; -sub encrypt_add; -sub encrypt_done; -sub new; -} -package Crypt::AuthEnc::GCM { -sub DESTROY; -sub adata_add; -sub clone; -sub decrypt_add; -sub decrypt_done; -sub encrypt_add; -sub encrypt_done; -sub gcm_decrypt_verify; -sub gcm_encrypt_authenticate; -sub iv_add; -sub new; -sub reset; -} -package Crypt::AuthEnc::OCB { -sub DESTROY; -sub adata_add; -sub clone; -sub decrypt_add; -sub decrypt_done; -sub decrypt_last; -sub encrypt_add; -sub encrypt_done; -sub encrypt_last; -sub new; -sub ocb_decrypt_verify; -sub ocb_encrypt_authenticate; -} -package Crypt::Blowfish { -sub crypt; -sub init; -} -package Crypt::Checksum::Adler32 { -sub DESTROY; -sub add; -sub adler32_data; -sub adler32_data_hex; -sub adler32_data_int; -sub clone; -sub digest; -sub hexdigest; -sub intdigest; -sub new; -sub reset; -} -package Crypt::Checksum::CRC32 { -sub DESTROY; -sub add; -sub clone; -sub crc32_data; -sub crc32_data_hex; -sub crc32_data_int; -sub digest; -sub hexdigest; -sub intdigest; -sub new; -sub reset; -} -package Crypt::Cipher { -sub DESTROY; -sub blocksize; -sub decrypt; -sub default_rounds; -sub encrypt; -sub max_keysize; -sub min_keysize; -sub new; -} -package Crypt::DES { -sub crypt; -sub expand_key; -} -package Crypt::Digest { -sub DESTROY; -sub add; -sub b64digest; -sub b64udigest; -sub clone; -sub digest; -sub digest_data; -sub digest_data_b64; -sub digest_data_b64u; -sub digest_data_hex; -sub hashsize; -sub hexdigest; -sub new; -sub reset; -} -package Crypt::Digest::SHAKE { -sub DESTROY; -sub add; -sub clone; -sub done; -sub new; -sub reset; -} -package Crypt::IDEA { -sub crypt; -sub expand_key; -sub invert_key; -} -package Crypt::KeyDerivation { -sub hkdf; -sub hkdf_expand; -sub hkdf_extract; -sub pbkdf1; -sub pbkdf2; -} -package Crypt::Mac::BLAKE2b { -sub DESTROY; -sub add; -sub b64mac; -sub b64umac; -sub blake2b; -sub blake2b_b64; -sub blake2b_b64u; -sub blake2b_hex; -sub clone; -sub hexmac; -sub mac; -sub new; -} -package Crypt::Mac::BLAKE2s { -sub DESTROY; -sub add; -sub b64mac; -sub b64umac; -sub blake2s; -sub blake2s_b64; -sub blake2s_b64u; -sub blake2s_hex; -sub clone; -sub hexmac; -sub mac; -sub new; -} -package Crypt::Mac::F9 { -sub DESTROY; -sub add; -sub b64mac; -sub b64umac; -sub clone; -sub f9; -sub f9_b64; -sub f9_b64u; -sub f9_hex; -sub hexmac; -sub mac; -sub new; -} -package Crypt::Mac::HMAC { -sub DESTROY; -sub add; -sub b64mac; -sub b64umac; -sub clone; -sub hexmac; -sub hmac; -sub hmac_b64; -sub hmac_b64u; -sub hmac_hex; -sub mac; -sub new; -} -package Crypt::Mac::OMAC { -sub DESTROY; -sub add; -sub b64mac; -sub b64umac; -sub clone; -sub hexmac; -sub mac; -sub new; -sub omac; -sub omac_b64; -sub omac_b64u; -sub omac_hex; -} -package Crypt::Mac::PMAC { -sub DESTROY; -sub add; -sub b64mac; -sub b64umac; -sub clone; -sub hexmac; -sub mac; -sub new; -sub pmac; -sub pmac_b64; -sub pmac_b64u; -sub pmac_hex; -} -package Crypt::Mac::Pelican { -sub DESTROY; -sub add; -sub b64mac; -sub b64umac; -sub clone; -sub hexmac; -sub mac; -sub new; -sub pelican; -sub pelican_b64; -sub pelican_b64u; -sub pelican_hex; -} -package Crypt::Mac::Poly1305 { -sub DESTROY; -sub add; -sub b64mac; -sub b64umac; -sub clone; -sub hexmac; -sub mac; -sub new; -sub poly1305; -sub poly1305_b64; -sub poly1305_b64u; -sub poly1305_hex; -} -package Crypt::Mac::XCBC { -sub DESTROY; -sub add; -sub b64mac; -sub b64umac; -sub clone; -sub hexmac; -sub mac; -sub new; -sub xcbc; -sub xcbc_b64; -sub xcbc_b64u; -sub xcbc_hex; -} -package Crypt::Misc { -sub _bin_to_radix; -sub _radix_to_bin; -sub decode_b32b; -sub decode_b32c; -sub decode_b32r; -sub decode_b32z; -sub decode_b64; -sub decode_b64u; -sub encode_b32b; -sub encode_b32c; -sub encode_b32r; -sub encode_b32z; -sub encode_b64; -sub encode_b64u; -sub increment_octets_be; -sub increment_octets_le; -} -package Crypt::Mode::CBC { -sub DESTROY; -sub add; -sub finish; -sub new; -sub start_decrypt; -sub start_encrypt; -} -package Crypt::Mode::CFB { -sub DESTROY; -sub add; -sub finish; -sub new; -sub start_decrypt; -sub start_encrypt; -} -package Crypt::Mode::CTR { -sub DESTROY; -sub add; -sub finish; -sub new; -sub start_decrypt; -sub start_encrypt; -} -package Crypt::Mode::ECB { -sub DESTROY; -sub add; -sub finish; -sub new; -sub start_decrypt; -sub start_encrypt; -} -package Crypt::Mode::OFB { -sub DESTROY; -sub add; -sub finish; -sub new; -sub start_decrypt; -sub start_encrypt; -} -package Crypt::OpenSSL::AES { -sub DESTROY($) ; -sub decrypt($$) ; -sub encrypt($$) ; -sub new($$) ; -} -package Crypt::OpenSSL::Bignum { -sub DESTROY; -sub add; -sub bless_pointer; -sub cmp; -sub copy; -sub div; -sub equals; -sub exp; -sub gcd; -sub get_word; -sub is_odd; -sub is_one; -sub is_zero; -sub lshift; -sub mod; -sub mod_exp; -sub mod_inverse; -sub mod_mul; -sub mul; -sub new; -sub new_from_bin; -sub new_from_decimal; -sub new_from_hex; -sub new_from_word; -sub num_bits; -sub num_bytes; -sub one; -sub pointer_copy; -sub pseudo_rand; -sub rand; -sub rand_range; -sub rshift; -sub sqr; -sub sub; -sub swap; -sub to_bin; -sub to_decimal; -sub to_hex; -sub ucmp; -sub zero; -} -package Crypt::OpenSSL::Bignum::CTX { -sub DESTROY; -sub new; -} -package Crypt::OpenSSL::DSA { -sub DESTROY; -sub _load_key; -sub do_sign; -sub do_verify; -sub generate_key; -sub generate_parameters; -sub get_g; -sub get_p; -sub get_priv_key; -sub get_pub_key; -sub get_q; -sub new; -sub read_params; -sub read_priv_key; -sub read_pub_key; -sub set_g; -sub set_p; -sub set_priv_key; -sub set_pub_key; -sub set_q; -sub sign; -sub verify; -sub write_params; -sub write_priv_key; -sub write_pub_key; -} -package Crypt::OpenSSL::DSA::Signature { -sub DESTROY; -sub get_r; -sub get_s; -sub new; -sub set_r; -sub set_s; -} -package Crypt::OpenSSL::RSA { -sub DESTROY; -sub _get_key_parameters; -sub _new_key_from_parameters; -sub _new_public_key_pkcs1; -sub _new_public_key_x509; -sub _random_seed; -sub _random_status; -sub check_key; -sub decrypt; -sub encrypt; -sub generate_key; -sub get_key_parameters; -sub get_private_key_string; -sub get_public_key_string; -sub get_public_key_x509_string; -sub import_random_seed; -sub is_private; -sub new_key_from_parameters; -sub new_private_key; -sub new_public_key; -sub private_encrypt; -sub public_decrypt; -sub sign; -sub size; -sub use_md5_hash; -sub use_no_padding; -sub use_pkcs1_oaep_padding; -sub use_pkcs1_padding; -sub use_ripemd160_hash; -sub use_sha1_hash; -sub use_sha224_hash; -sub use_sha256_hash; -sub use_sha384_hash; -sub use_sha512_hash; -sub use_sslv23_padding; -sub verify; -} -package Crypt::OpenSSL::Random { -sub random_bytes; -sub random_pseudo_bytes; -sub random_seed; -sub random_status; -} -package Crypt::OpenSSL::X509 { -sub DESTROY; -sub __X509_cleanup; -sub accessor; -sub as_string; -sub bit_length; -sub checkend; -sub curve; -sub email; -sub exponent; -sub extension; -sub extensions; -sub extensions_by_long_name; -sub extensions_by_name; -sub extensions_by_oid; -sub fingerprint_md5; -sub fingerprint_sha1; -sub fingerprint_sha224; -sub fingerprint_sha256; -sub fingerprint_sha384; -sub fingerprint_sha512; -sub hash; -sub issuer; -sub issuer_hash; -sub issuer_name; -sub key_alg_name; -sub modulus; -sub new; -sub new_from_file; -sub new_from_string; -sub notAfter; -sub notBefore; -sub num_extensions; -sub pub_exponent; -sub pubkey; -sub pubkey_type; -sub serial; -sub sig_alg_name; -sub sig_print; -sub subject; -sub subject_hash; -sub subject_name; -sub version; -} -package Crypt::OpenSSL::X509::Extension { -sub auth_att; -sub basicC; -sub bit_string; -sub critical; -sub extendedKeyUsage; -sub ia5string; -sub keyid_data; -sub object; -sub to_string; -sub value; -} -package Crypt::OpenSSL::X509::Name { -sub as_string; -sub entries; -sub get_entry_by_long_type; -sub get_entry_by_type; -sub get_index_by_long_type; -sub get_index_by_oid_type; -sub get_index_by_type; -sub has_entry; -sub has_long_entry; -sub has_oid_entry; -} -package Crypt::OpenSSL::X509::Name_Entry { -sub as_long_string; -sub as_string; -sub encoding; -sub is_asn1_type; -sub is_ia5string; -sub is_printableString; -sub is_utf8string; -sub long_type; -sub type; -sub value; -} -package Crypt::OpenSSL::X509::ObjectID { -sub name; -sub oid; -} -package Crypt::OpenSSL::X509_CRL { -sub CRL_accessor; -sub CRL_issuer; -sub CRL_sig_alg_name; -sub new_from_crl_file; -sub new_from_crl_string; -} -package Crypt::PK::DH { -sub DESTROY; -sub _generate_key_dhparam; -sub _generate_key_gp; -sub _generate_key_size; -sub _import; -sub _import_raw; -sub _new; -sub export_key; -sub export_key_raw; -sub is_private; -sub key2hash; -sub params2hash; -sub shared_secret; -sub size; -} -package Crypt::PK::DSA { -sub DESTROY; -sub _generate_key_dsaparam; -sub _generate_key_pqg_hex; -sub _generate_key_size; -sub _import; -sub _import_hex; -sub _new; -sub decrypt; -sub encrypt; -sub export_key_der; -sub is_private; -sub key2hash; -sub sign_hash; -sub sign_message; -sub size; -sub size_q; -sub verify_hash; -sub verify_message; -} -package Crypt::PK::ECC { -sub DESTROY; -sub _import; -sub _import_old; -sub _import_pkcs8; -sub _import_x509; -sub _new; -sub decrypt; -sub encrypt; -sub export_key_der; -sub export_key_raw; -sub generate_key; -sub import_key_raw; -sub is_private; -sub key2hash; -sub shared_secret; -sub sign_hash; -sub sign_hash_rfc7518; -sub sign_message; -sub sign_message_rfc7518; -sub size; -sub verify_hash; -sub verify_hash_rfc7518; -sub verify_message; -sub verify_message_rfc7518; -} -package Crypt::PK::RSA { -sub DESTROY; -sub _import; -sub _import_hex; -sub _import_pkcs8; -sub _import_x509; -sub _new; -sub decrypt; -sub encrypt; -sub export_key_der; -sub generate_key; -sub is_private; -sub key2hash; -sub sign_hash; -sub sign_message; -sub size; -sub verify_hash; -sub verify_message; -} -package Crypt::PRNG { -sub DESTROY; -sub add_entropy; -sub bytes; -sub bytes_b64; -sub bytes_b64u; -sub bytes_hex; -sub double; -sub int32; -sub new; -} -package Crypt::RC6 { -sub DESTROY($) ; -sub decrypt($$) ; -sub encrypt($$) ; -sub new($$) ; -} -package Crypt::RIPEMD160 { -sub DESTROY; -sub add; -sub digest; -sub new; -sub reset; -} -package Crypt::Rijndael { -sub DESTROY; -sub decrypt; -sub encrypt; -sub new; -sub set_iv; -} -package Crypt::SSLeay::CTX { -sub check_private_key; -sub free; -sub new; -sub set_cipher_list; -sub set_verify; -sub use_PrivateKey_file; -sub use_certificate_file; -sub use_pkcs12_file; -} -package Crypt::SSLeay::Conn { -sub accept; -sub connect; -sub free; -sub get_cipher; -sub get_peer_certificate; -sub get_shared_ciphers; -sub get_verify_result; -sub new; -sub pending; -sub read; -sub set_fd; -sub set_tlsext_host_name; -sub write; -} -package Crypt::SSLeay::Err { -sub get_error_string; -} -package Crypt::SSLeay::Version { -sub openssl_built_on; -sub openssl_cflags; -sub openssl_dir; -sub openssl_platform; -sub openssl_version; -sub openssl_version_number; -} -package Crypt::SSLeay::X509 { -sub free; -sub get_notAfterString; -sub get_notBeforeString; -sub issuer_name; -sub subject_name; -} -package Crypt::Serpent { -sub DESTROY($) ; -sub decrypt($$) ; -sub encrypt($$) ; -sub new($$;$) ; -} -package Crypt::Stream::ChaCha { -sub DESTROY; -sub clone; -sub crypt; -sub keystream; -sub new; -} -package Crypt::Stream::RC4 { -sub DESTROY; -sub clone; -sub crypt; -sub keystream; -sub new; -} -package Crypt::Stream::Rabbit { -sub DESTROY; -sub clone; -sub crypt; -sub keystream; -sub new; -} -package Crypt::Stream::Salsa20 { -sub DESTROY; -sub clone; -sub crypt; -sub keystream; -sub new; -} -package Crypt::Stream::Sober128 { -sub DESTROY; -sub clone; -sub crypt; -sub keystream; -sub new; -} -package Crypt::Stream::Sosemanuk { -sub DESTROY; -sub clone; -sub crypt; -sub keystream; -sub new; -} -package Crypt::Twofish { -sub DESTROY; -sub crypt; -sub setup; -} -package CryptX { -sub _ltc_build_settings; -sub _ltc_mp_bits_per_digit; -sub _ltc_mp_name; -sub decode_json($;$$) ; -sub encode_json($;$) ; -} -package Cwd { -sub CLONE; -sub getdcwd(;@) ; -} -package DBD::ODBC::db { -sub DESTROY; -sub FETCH; -sub GetFunctions; -sub STORE; -sub _ExecDirect; -sub _GetForeignKeys; -sub _GetInfo; -sub _GetPrimaryKeys; -sub _GetSpecialColumns; -sub _GetStatistics; -sub _GetTypeInfo; -sub _columns; -sub _login; -sub commit; -sub disconnect; -sub odbc_getdiagfield; -sub odbc_getdiagrec; -sub rollback; -sub selectall_arrayref; -sub selectrow_array; -sub selectrow_arrayref; -} -package DBD::ODBC::dr { -sub _data_sources; -sub dbixs_revision; -sub discon_all_; -sub disconnect_all; -} -package DBD::ODBC::st { -sub DESTROY; -sub FETCH; -sub FETCH_attrib; -sub STORE; -sub _Cancel; -sub _ColAttributes; -sub _prepare; -sub _primary_keys; -sub _statistics; -sub _tables; -sub bind_col; -sub bind_param; -sub bind_param_inout; -sub blob_read; -sub execute; -sub fetch; -sub fetchall_arrayref; -sub fetchrow; -sub fetchrow_array; -sub fetchrow_arrayref; -sub finish; -sub odbc_describe_param; -sub odbc_execute_for_fetch; -sub odbc_getdiagfield; -sub odbc_getdiagrec; -sub odbc_lob_read($$$$;$) ; -sub odbc_rows; -} -package DBD::Oracle::db { -sub SQL_ALL_TYPES() ; -sub SQL_ARRAY() ; -sub SQL_ARRAY_LOCATOR() ; -sub SQL_BIGINT() ; -sub SQL_BINARY() ; -sub SQL_BIT() ; -sub SQL_BLOB() ; -sub SQL_BLOB_LOCATOR() ; -sub SQL_BOOLEAN() ; -sub SQL_CHAR() ; -sub SQL_CLOB() ; -sub SQL_CLOB_LOCATOR() ; -sub SQL_DATE() ; -sub SQL_DATETIME() ; -sub SQL_DECIMAL() ; -sub SQL_DOUBLE() ; -sub SQL_FLOAT() ; -sub SQL_GUID() ; -sub SQL_INTEGER() ; -sub SQL_INTERVAL() ; -sub SQL_INTERVAL_DAY() ; -sub SQL_INTERVAL_DAY_TO_HOUR() ; -sub SQL_INTERVAL_DAY_TO_MINUTE() ; -sub SQL_INTERVAL_DAY_TO_SECOND() ; -sub SQL_INTERVAL_HOUR() ; -sub SQL_INTERVAL_HOUR_TO_MINUTE() ; -sub SQL_INTERVAL_HOUR_TO_SECOND() ; -sub SQL_INTERVAL_MINUTE() ; -sub SQL_INTERVAL_MINUTE_TO_SECOND() ; -sub SQL_INTERVAL_MONTH() ; -sub SQL_INTERVAL_SECOND() ; -sub SQL_INTERVAL_YEAR() ; -sub SQL_INTERVAL_YEAR_TO_MONTH() ; -sub SQL_LONGVARBINARY() ; -sub SQL_LONGVARCHAR() ; -sub SQL_MULTISET() ; -sub SQL_MULTISET_LOCATOR() ; -sub SQL_NUMERIC() ; -sub SQL_REAL() ; -sub SQL_REF() ; -sub SQL_ROW() ; -sub SQL_SMALLINT() ; -sub SQL_TIME() ; -sub SQL_TIMESTAMP() ; -sub SQL_TINYINT() ; -sub SQL_TYPE_DATE() ; -sub SQL_TYPE_TIME() ; -sub SQL_TYPE_TIMESTAMP() ; -sub SQL_TYPE_TIMESTAMP_WITH_TIMEZONE() ; -sub SQL_TYPE_TIME_WITH_TIMEZONE() ; -sub SQL_UDT() ; -sub SQL_UDT_LOCATOR() ; -sub SQL_UNKNOWN_TYPE() ; -sub SQL_VARBINARY() ; -sub SQL_VARCHAR() ; -sub SQL_WCHAR() ; -sub SQL_WLONGVARCHAR() ; -sub SQL_WVARCHAR() ; -} -package DBD::Pg { -sub PG_ACLITEM() ; -sub PG_ACLITEMARRAY() ; -sub PG_ANY() ; -sub PG_ANYARRAY() ; -sub PG_ANYELEMENT() ; -sub PG_ANYENUM() ; -sub PG_ANYNONARRAY() ; -sub PG_ANYRANGE() ; -sub PG_ASYNC() ; -sub PG_BIT() ; -sub PG_BITARRAY() ; -sub PG_BOOL() ; -sub PG_BOOLARRAY() ; -sub PG_BOX() ; -sub PG_BOXARRAY() ; -sub PG_BPCHAR() ; -sub PG_BPCHARARRAY() ; -sub PG_BYTEA() ; -sub PG_BYTEAARRAY() ; -sub PG_CHAR() ; -sub PG_CHARARRAY() ; -sub PG_CID() ; -sub PG_CIDARRAY() ; -sub PG_CIDR() ; -sub PG_CIDRARRAY() ; -sub PG_CIRCLE() ; -sub PG_CIRCLEARRAY() ; -sub PG_CSTRING() ; -sub PG_CSTRINGARRAY() ; -sub PG_DATE() ; -sub PG_DATEARRAY() ; -sub PG_DATERANGE() ; -sub PG_DATERANGEARRAY() ; -sub PG_EVENT_TRIGGER() ; -sub PG_FDW_HANDLER() ; -sub PG_FLOAT4() ; -sub PG_FLOAT4ARRAY() ; -sub PG_FLOAT8() ; -sub PG_FLOAT8ARRAY() ; -sub PG_GTSVECTOR() ; -sub PG_GTSVECTORARRAY() ; -sub PG_INDEX_AM_HANDLER() ; -sub PG_INET() ; -sub PG_INETARRAY() ; -sub PG_INT2() ; -sub PG_INT2ARRAY() ; -sub PG_INT2VECTOR() ; -sub PG_INT2VECTORARRAY() ; -sub PG_INT4() ; -sub PG_INT4ARRAY() ; -sub PG_INT4RANGE() ; -sub PG_INT4RANGEARRAY() ; -sub PG_INT8() ; -sub PG_INT8ARRAY() ; -sub PG_INT8RANGE() ; -sub PG_INT8RANGEARRAY() ; -sub PG_INTERNAL() ; -sub PG_INTERVAL() ; -sub PG_INTERVALARRAY() ; -sub PG_JSON() ; -sub PG_JSONARRAY() ; -sub PG_JSONB() ; -sub PG_JSONBARRAY() ; -sub PG_JSONPATH() ; -sub PG_JSONPATHARRAY() ; -sub PG_LANGUAGE_HANDLER() ; -sub PG_LINE() ; -sub PG_LINEARRAY() ; -sub PG_LSEG() ; -sub PG_LSEGARRAY() ; -sub PG_MACADDR() ; -sub PG_MACADDR8() ; -sub PG_MACADDR8ARRAY() ; -sub PG_MACADDRARRAY() ; -sub PG_MONEY() ; -sub PG_MONEYARRAY() ; -sub PG_NAME() ; -sub PG_NAMEARRAY() ; -sub PG_NUMERIC() ; -sub PG_NUMERICARRAY() ; -sub PG_NUMRANGE() ; -sub PG_NUMRANGEARRAY() ; -sub PG_OID() ; -sub PG_OIDARRAY() ; -sub PG_OIDVECTOR() ; -sub PG_OIDVECTORARRAY() ; -sub PG_OLDQUERY_CANCEL() ; -sub PG_OLDQUERY_WAIT() ; -sub PG_OPAQUE() ; -sub PG_PATH() ; -sub PG_PATHARRAY() ; -sub PG_PG_ATTRIBUTE() ; -sub PG_PG_CLASS() ; -sub PG_PG_DDL_COMMAND() ; -sub PG_PG_DEPENDENCIES() ; -sub PG_PG_LSN() ; -sub PG_PG_LSNARRAY() ; -sub PG_PG_MCV_LIST() ; -sub PG_PG_NDISTINCT() ; -sub PG_PG_NODE_TREE() ; -sub PG_PG_PROC() ; -sub PG_PG_TYPE() ; -sub PG_POINT() ; -sub PG_POINTARRAY() ; -sub PG_POLYGON() ; -sub PG_POLYGONARRAY() ; -sub PG_RECORD() ; -sub PG_RECORDARRAY() ; -sub PG_REFCURSOR() ; -sub PG_REFCURSORARRAY() ; -sub PG_REGCLASS() ; -sub PG_REGCLASSARRAY() ; -sub PG_REGCONFIG() ; -sub PG_REGCONFIGARRAY() ; -sub PG_REGDICTIONARY() ; -sub PG_REGDICTIONARYARRAY() ; -sub PG_REGNAMESPACE() ; -sub PG_REGNAMESPACEARRAY() ; -sub PG_REGOPER() ; -sub PG_REGOPERARRAY() ; -sub PG_REGOPERATOR() ; -sub PG_REGOPERATORARRAY() ; -sub PG_REGPROC() ; -sub PG_REGPROCARRAY() ; -sub PG_REGPROCEDURE() ; -sub PG_REGPROCEDUREARRAY() ; -sub PG_REGROLE() ; -sub PG_REGROLEARRAY() ; -sub PG_REGTYPE() ; -sub PG_REGTYPEARRAY() ; -sub PG_TABLE_AM_HANDLER() ; -sub PG_TEXT() ; -sub PG_TEXTARRAY() ; -sub PG_TID() ; -sub PG_TIDARRAY() ; -sub PG_TIME() ; -sub PG_TIMEARRAY() ; -sub PG_TIMESTAMP() ; -sub PG_TIMESTAMPARRAY() ; -sub PG_TIMESTAMPTZ() ; -sub PG_TIMESTAMPTZARRAY() ; -sub PG_TIMETZ() ; -sub PG_TIMETZARRAY() ; -sub PG_TRIGGER() ; -sub PG_TSM_HANDLER() ; -sub PG_TSQUERY() ; -sub PG_TSQUERYARRAY() ; -sub PG_TSRANGE() ; -sub PG_TSRANGEARRAY() ; -sub PG_TSTZRANGE() ; -sub PG_TSTZRANGEARRAY() ; -sub PG_TSVECTOR() ; -sub PG_TSVECTORARRAY() ; -sub PG_TXID_SNAPSHOT() ; -sub PG_TXID_SNAPSHOTARRAY() ; -sub PG_UNKNOWN() ; -sub PG_UUID() ; -sub PG_UUIDARRAY() ; -sub PG_VARBIT() ; -sub PG_VARBITARRAY() ; -sub PG_VARCHAR() ; -sub PG_VARCHARARRAY() ; -sub PG_VOID() ; -sub PG_XID() ; -sub PG_XIDARRAY() ; -sub PG_XML() ; -sub PG_XMLARRAY() ; -sub constant() ; -} -package DBD::Pg::db { -sub DESTROY; -sub FETCH; -sub SQL_ALL_TYPES() ; -sub SQL_ARRAY() ; -sub SQL_ARRAY_LOCATOR() ; -sub SQL_BIGINT() ; -sub SQL_BINARY() ; -sub SQL_BIT() ; -sub SQL_BLOB() ; -sub SQL_BLOB_LOCATOR() ; -sub SQL_BOOLEAN() ; -sub SQL_CHAR() ; -sub SQL_CLOB() ; -sub SQL_CLOB_LOCATOR() ; -sub SQL_DATE() ; -sub SQL_DATETIME() ; -sub SQL_DECIMAL() ; -sub SQL_DOUBLE() ; -sub SQL_FLOAT() ; -sub SQL_GUID() ; -sub SQL_INTEGER() ; -sub SQL_INTERVAL() ; -sub SQL_INTERVAL_DAY() ; -sub SQL_INTERVAL_DAY_TO_HOUR() ; -sub SQL_INTERVAL_DAY_TO_MINUTE() ; -sub SQL_INTERVAL_DAY_TO_SECOND() ; -sub SQL_INTERVAL_HOUR() ; -sub SQL_INTERVAL_HOUR_TO_MINUTE() ; -sub SQL_INTERVAL_HOUR_TO_SECOND() ; -sub SQL_INTERVAL_MINUTE() ; -sub SQL_INTERVAL_MINUTE_TO_SECOND() ; -sub SQL_INTERVAL_MONTH() ; -sub SQL_INTERVAL_SECOND() ; -sub SQL_INTERVAL_YEAR() ; -sub SQL_INTERVAL_YEAR_TO_MONTH() ; -sub SQL_LONGVARBINARY() ; -sub SQL_LONGVARCHAR() ; -sub SQL_MULTISET() ; -sub SQL_MULTISET_LOCATOR() ; -sub SQL_NUMERIC() ; -sub SQL_REAL() ; -sub SQL_REF() ; -sub SQL_ROW() ; -sub SQL_SMALLINT() ; -sub SQL_TIME() ; -sub SQL_TIMESTAMP() ; -sub SQL_TINYINT() ; -sub SQL_TYPE_DATE() ; -sub SQL_TYPE_TIME() ; -sub SQL_TYPE_TIMESTAMP() ; -sub SQL_TYPE_TIMESTAMP_WITH_TIMEZONE() ; -sub SQL_TYPE_TIME_WITH_TIMEZONE() ; -sub SQL_UDT() ; -sub SQL_UDT_LOCATOR() ; -sub SQL_UNKNOWN_TYPE() ; -sub SQL_VARBINARY() ; -sub SQL_VARCHAR() ; -sub SQL_WCHAR() ; -sub SQL_WLONGVARCHAR() ; -sub SQL_WVARCHAR() ; -sub STORE; -sub _login; -sub _pg_type_info; -sub _ping; -sub commit; -sub disconnect; -sub do($$;$@) ; -sub endcopy; -sub getfd; -sub getline; -sub lo_close; -sub lo_creat; -sub lo_export; -sub lo_import; -sub lo_lseek; -sub lo_open; -sub lo_read; -sub lo_tell; -sub lo_unlink; -sub lo_write; -sub pg_cancel; -sub pg_endcopy; -sub pg_getcopydata; -sub pg_getcopydata_async; -sub pg_getline; -sub pg_lo_close; -sub pg_lo_creat; -sub pg_lo_export; -sub pg_lo_import; -sub pg_lo_import_with_oid; -sub pg_lo_lseek; -sub pg_lo_open; -sub pg_lo_read; -sub pg_lo_tell; -sub pg_lo_truncate; -sub pg_lo_unlink; -sub pg_lo_write; -sub pg_notifies; -sub pg_putcopydata; -sub pg_putcopyend; -sub pg_putline; -sub pg_ready; -sub pg_release; -sub pg_result; -sub pg_rollback_to; -sub pg_savepoint; -sub pg_server_trace; -sub pg_server_untrace; -sub putline; -sub quote; -sub rollback; -sub selectall_arrayref; -sub selectrow_array; -sub selectrow_arrayref; -sub state; -} -package DBD::Pg::dr { -sub dbixs_revision; -sub discon_all_; -sub disconnect_all; -} -package DBD::Pg::st { -sub DESTROY; -sub FETCH; -sub FETCH_attrib; -sub STORE; -sub _prepare; -sub bind_param; -sub bind_param_inout; -sub blob_read; -sub cancel; -sub execute; -sub fetch; -sub fetchall_arrayref; -sub fetchrow; -sub fetchrow_array; -sub fetchrow_arrayref; -sub finish; -sub pg_cancel; -sub pg_canonical_ids; -sub pg_canonical_names; -sub pg_ready; -sub pg_result; -sub rows; -sub state; -} -package DBD::SQLite { -sub ALTER_TABLE() ; -sub ANALYZE() ; -sub ATTACH() ; -sub COPY() ; -sub CREATE_INDEX() ; -sub CREATE_TABLE() ; -sub CREATE_TEMP_INDEX() ; -sub CREATE_TEMP_TABLE() ; -sub CREATE_TEMP_TRIGGER() ; -sub CREATE_TEMP_VIEW() ; -sub CREATE_TRIGGER() ; -sub CREATE_VIEW() ; -sub CREATE_VTABLE() ; -sub DELETE() ; -sub DENY() ; -sub DETACH() ; -sub DROP_INDEX() ; -sub DROP_TABLE() ; -sub DROP_TEMP_INDEX() ; -sub DROP_TEMP_TABLE() ; -sub DROP_TEMP_TRIGGER() ; -sub DROP_TEMP_VIEW() ; -sub DROP_TRIGGER() ; -sub DROP_VIEW() ; -sub DROP_VTABLE() ; -sub FUNCTION() ; -sub IGNORE() ; -sub INSERT() ; -sub OK() ; -sub OPEN_CREATE() ; -sub OPEN_FULLMUTEX() ; -sub OPEN_MEMORY() ; -sub OPEN_NOMUTEX() ; -sub OPEN_PRIVATECACHE() ; -sub OPEN_READONLY() ; -sub OPEN_READWRITE() ; -sub OPEN_SHAREDCACHE() ; -sub OPEN_URI() ; -sub PRAGMA() ; -sub READ() ; -sub RECURSIVE() ; -sub REINDEX() ; -sub SAVEPOINT() ; -sub SELECT() ; -sub TRANSACTION() ; -sub UPDATE() ; -sub _const__authorizer_action_codes() ; -sub _const__authorizer_action_codes_3006008() ; -sub _const__authorizer_action_codes_3008003() ; -sub _const__authorizer_return_codes() ; -sub _const__flags_for_file_open_operations() ; -sub _const__flags_for_file_open_operations_3006002() ; -sub _const__flags_for_file_open_operations_3006018() ; -sub _const__flags_for_file_open_operations_3007007() ; -sub _const__flags_for_file_open_operations_3007013() ; -sub compile_options; -sub sqlite_status; -sub strglob; -sub strlike; -} -package DBD::SQLite::Constants { -sub SQLITE_ABORT() ; -sub SQLITE_ABORT_ROLLBACK() ; -sub SQLITE_ALTER_TABLE() ; -sub SQLITE_ANALYZE() ; -sub SQLITE_ATTACH() ; -sub SQLITE_AUTH() ; -sub SQLITE_AUTH_USER() ; -sub SQLITE_BLOB() ; -sub SQLITE_BUSY() ; -sub SQLITE_BUSY_RECOVERY() ; -sub SQLITE_BUSY_SNAPSHOT() ; -sub SQLITE_CANTOPEN() ; -sub SQLITE_CANTOPEN_CONVPATH() ; -sub SQLITE_CANTOPEN_DIRTYWAL() ; -sub SQLITE_CANTOPEN_FULLPATH() ; -sub SQLITE_CANTOPEN_ISDIR() ; -sub SQLITE_CANTOPEN_NOTEMPDIR() ; -sub SQLITE_CONSTRAINT() ; -sub SQLITE_CONSTRAINT_CHECK() ; -sub SQLITE_CONSTRAINT_COMMITHOOK() ; -sub SQLITE_CONSTRAINT_FOREIGNKEY() ; -sub SQLITE_CONSTRAINT_FUNCTION() ; -sub SQLITE_CONSTRAINT_NOTNULL() ; -sub SQLITE_CONSTRAINT_PRIMARYKEY() ; -sub SQLITE_CONSTRAINT_ROWID() ; -sub SQLITE_CONSTRAINT_TRIGGER() ; -sub SQLITE_CONSTRAINT_UNIQUE() ; -sub SQLITE_CONSTRAINT_VTAB() ; -sub SQLITE_COPY() ; -sub SQLITE_CORRUPT() ; -sub SQLITE_CORRUPT_SEQUENCE() ; -sub SQLITE_CORRUPT_VTAB() ; -sub SQLITE_CREATE_INDEX() ; -sub SQLITE_CREATE_TABLE() ; -sub SQLITE_CREATE_TEMP_INDEX() ; -sub SQLITE_CREATE_TEMP_TABLE() ; -sub SQLITE_CREATE_TEMP_TRIGGER() ; -sub SQLITE_CREATE_TEMP_VIEW() ; -sub SQLITE_CREATE_TRIGGER() ; -sub SQLITE_CREATE_VIEW() ; -sub SQLITE_CREATE_VTABLE() ; -sub SQLITE_DBCONFIG_DEFENSIVE() ; -sub SQLITE_DBCONFIG_ENABLE_FKEY() ; -sub SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER() ; -sub SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION() ; -sub SQLITE_DBCONFIG_ENABLE_QPSG() ; -sub SQLITE_DBCONFIG_ENABLE_TRIGGER() ; -sub SQLITE_DBCONFIG_LOOKASIDE() ; -sub SQLITE_DBCONFIG_MAINDBNAME() ; -sub SQLITE_DBCONFIG_MAX() ; -sub SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE() ; -sub SQLITE_DBCONFIG_RESET_DATABASE() ; -sub SQLITE_DBCONFIG_TRIGGER_EQP() ; -sub SQLITE_DELETE() ; -sub SQLITE_DENY() ; -sub SQLITE_DETACH() ; -sub SQLITE_DETERMINISTIC() ; -sub SQLITE_DONE() ; -sub SQLITE_DROP_INDEX() ; -sub SQLITE_DROP_TABLE() ; -sub SQLITE_DROP_TEMP_INDEX() ; -sub SQLITE_DROP_TEMP_TABLE() ; -sub SQLITE_DROP_TEMP_TRIGGER() ; -sub SQLITE_DROP_TEMP_VIEW() ; -sub SQLITE_DROP_TRIGGER() ; -sub SQLITE_DROP_VIEW() ; -sub SQLITE_DROP_VTABLE() ; -sub SQLITE_EMPTY() ; -sub SQLITE_ERROR() ; -sub SQLITE_ERROR_MISSING_COLLSEQ() ; -sub SQLITE_ERROR_RETRY() ; -sub SQLITE_ERROR_SNAPSHOT() ; -sub SQLITE_FLOAT() ; -sub SQLITE_FORMAT() ; -sub SQLITE_FULL() ; -sub SQLITE_FUNCTION() ; -sub SQLITE_IGNORE() ; -sub SQLITE_INSERT() ; -sub SQLITE_INTEGER() ; -sub SQLITE_INTERNAL() ; -sub SQLITE_INTERRUPT() ; -sub SQLITE_IOERR() ; -sub SQLITE_IOERR_ACCESS() ; -sub SQLITE_IOERR_AUTH() ; -sub SQLITE_IOERR_BEGIN_ATOMIC() ; -sub SQLITE_IOERR_BLOCKED() ; -sub SQLITE_IOERR_CHECKRESERVEDLOCK() ; -sub SQLITE_IOERR_CLOSE() ; -sub SQLITE_IOERR_COMMIT_ATOMIC() ; -sub SQLITE_IOERR_CONVPATH() ; -sub SQLITE_IOERR_DELETE() ; -sub SQLITE_IOERR_DELETE_NOENT() ; -sub SQLITE_IOERR_DIR_CLOSE() ; -sub SQLITE_IOERR_DIR_FSYNC() ; -sub SQLITE_IOERR_FSTAT() ; -sub SQLITE_IOERR_FSYNC() ; -sub SQLITE_IOERR_GETTEMPPATH() ; -sub SQLITE_IOERR_LOCK() ; -sub SQLITE_IOERR_MMAP() ; -sub SQLITE_IOERR_NOMEM() ; -sub SQLITE_IOERR_RDLOCK() ; -sub SQLITE_IOERR_READ() ; -sub SQLITE_IOERR_ROLLBACK_ATOMIC() ; -sub SQLITE_IOERR_SEEK() ; -sub SQLITE_IOERR_SHMLOCK() ; -sub SQLITE_IOERR_SHMMAP() ; -sub SQLITE_IOERR_SHMOPEN() ; -sub SQLITE_IOERR_SHMSIZE() ; -sub SQLITE_IOERR_SHORT_READ() ; -sub SQLITE_IOERR_TRUNCATE() ; -sub SQLITE_IOERR_UNLOCK() ; -sub SQLITE_IOERR_VNODE() ; -sub SQLITE_IOERR_WRITE() ; -sub SQLITE_LIMIT_ATTACHED() ; -sub SQLITE_LIMIT_COLUMN() ; -sub SQLITE_LIMIT_COMPOUND_SELECT() ; -sub SQLITE_LIMIT_EXPR_DEPTH() ; -sub SQLITE_LIMIT_FUNCTION_ARG() ; -sub SQLITE_LIMIT_LENGTH() ; -sub SQLITE_LIMIT_LIKE_PATTERN_LENGTH() ; -sub SQLITE_LIMIT_SQL_LENGTH() ; -sub SQLITE_LIMIT_TRIGGER_DEPTH() ; -sub SQLITE_LIMIT_VARIABLE_NUMBER() ; -sub SQLITE_LIMIT_VDBE_OP() ; -sub SQLITE_LIMIT_WORKER_THREADS() ; -sub SQLITE_LOCKED() ; -sub SQLITE_LOCKED_SHAREDCACHE() ; -sub SQLITE_LOCKED_VTAB() ; -sub SQLITE_MISMATCH() ; -sub SQLITE_MISUSE() ; -sub SQLITE_NOLFS() ; -sub SQLITE_NOMEM() ; -sub SQLITE_NOTADB() ; -sub SQLITE_NOTFOUND() ; -sub SQLITE_NOTICE() ; -sub SQLITE_NOTICE_RECOVER_ROLLBACK() ; -sub SQLITE_NOTICE_RECOVER_WAL() ; -sub SQLITE_NULL() ; -sub SQLITE_OK() ; -sub SQLITE_OPEN_CREATE() ; -sub SQLITE_OPEN_FULLMUTEX() ; -sub SQLITE_OPEN_MEMORY() ; -sub SQLITE_OPEN_NOMUTEX() ; -sub SQLITE_OPEN_PRIVATECACHE() ; -sub SQLITE_OPEN_READONLY() ; -sub SQLITE_OPEN_READWRITE() ; -sub SQLITE_OPEN_SHAREDCACHE() ; -sub SQLITE_OPEN_URI() ; -sub SQLITE_PERM() ; -sub SQLITE_PRAGMA() ; -sub SQLITE_PROTOCOL() ; -sub SQLITE_RANGE() ; -sub SQLITE_READ() ; -sub SQLITE_READONLY() ; -sub SQLITE_READONLY_CANTINIT() ; -sub SQLITE_READONLY_CANTLOCK() ; -sub SQLITE_READONLY_DBMOVED() ; -sub SQLITE_READONLY_DIRECTORY() ; -sub SQLITE_READONLY_RECOVERY() ; -sub SQLITE_READONLY_ROLLBACK() ; -sub SQLITE_RECURSIVE() ; -sub SQLITE_REINDEX() ; -sub SQLITE_ROW() ; -sub SQLITE_SAVEPOINT() ; -sub SQLITE_SCHEMA() ; -sub SQLITE_SELECT() ; -sub SQLITE_TOOBIG() ; -sub SQLITE_TRANSACTION() ; -sub SQLITE_UPDATE() ; -sub SQLITE_VERSION_NUMBER() ; -sub SQLITE_WARNING() ; -sub SQLITE_WARNING_AUTOINDEX() ; -sub _const_authorizer_action_codes() ; -sub _const_authorizer_action_codes_3006008() ; -sub _const_authorizer_action_codes_3008003() ; -sub _const_authorizer_return_codes() ; -sub _const_compile_time_library_version_numbers() ; -sub _const_database_connection_configuration_options_3007000() ; -sub _const_database_connection_configuration_options_3007006() ; -sub _const_database_connection_configuration_options_3012002() ; -sub _const_database_connection_configuration_options_3013000() ; -sub _const_database_connection_configuration_options_3015000() ; -sub _const_database_connection_configuration_options_3016000() ; -sub _const_database_connection_configuration_options_3020000() ; -sub _const_database_connection_configuration_options_3022000() ; -sub _const_database_connection_configuration_options_3024000() ; -sub _const_database_connection_configuration_options_3026000() ; -sub _const_extended_result_codes_3006002() ; -sub _const_extended_result_codes_3006005() ; -sub _const_extended_result_codes_3006007() ; -sub _const_extended_result_codes_3006012() ; -sub _const_extended_result_codes_3007000() ; -sub _const_extended_result_codes_3007007() ; -sub _const_extended_result_codes_3007011() ; -sub _const_extended_result_codes_3007012() ; -sub _const_extended_result_codes_3007015() ; -sub _const_extended_result_codes_3007016() ; -sub _const_extended_result_codes_3007017() ; -sub _const_extended_result_codes_3008000() ; -sub _const_extended_result_codes_3008001() ; -sub _const_extended_result_codes_3008002() ; -sub _const_extended_result_codes_3008003() ; -sub _const_extended_result_codes_3008007() ; -sub _const_extended_result_codes_3009000() ; -sub _const_extended_result_codes_3010000() ; -sub _const_extended_result_codes_3021000() ; -sub _const_extended_result_codes_3022000() ; -sub _const_extended_result_codes_3024000() ; -sub _const_extended_result_codes_3025000() ; -sub _const_flags_for_file_open_operations() ; -sub _const_flags_for_file_open_operations_3006002() ; -sub _const_flags_for_file_open_operations_3006018() ; -sub _const_flags_for_file_open_operations_3007007() ; -sub _const_flags_for_file_open_operations_3007013() ; -sub _const_function_flags_3008003() ; -sub _const_fundamental_datatypes() ; -sub _const_result_codes() ; -sub _const_result_codes_3007017() ; -sub _const_run_time_limit_categories() ; -sub _const_run_time_limit_categories_3006018() ; -sub _const_run_time_limit_categories_3008007() ; -} -package DBD::SQLite::db { -sub DESTROY; -sub FETCH; -sub SQL_ALL_TYPES() ; -sub SQL_ARRAY() ; -sub SQL_ARRAY_LOCATOR() ; -sub SQL_BIGINT() ; -sub SQL_BINARY() ; -sub SQL_BIT() ; -sub SQL_BLOB() ; -sub SQL_BLOB_LOCATOR() ; -sub SQL_BOOLEAN() ; -sub SQL_CHAR() ; -sub SQL_CLOB() ; -sub SQL_CLOB_LOCATOR() ; -sub SQL_DATE() ; -sub SQL_DATETIME() ; -sub SQL_DECIMAL() ; -sub SQL_DOUBLE() ; -sub SQL_FLOAT() ; -sub SQL_GUID() ; -sub SQL_INTEGER() ; -sub SQL_INTERVAL() ; -sub SQL_INTERVAL_DAY() ; -sub SQL_INTERVAL_DAY_TO_HOUR() ; -sub SQL_INTERVAL_DAY_TO_MINUTE() ; -sub SQL_INTERVAL_DAY_TO_SECOND() ; -sub SQL_INTERVAL_HOUR() ; -sub SQL_INTERVAL_HOUR_TO_MINUTE() ; -sub SQL_INTERVAL_HOUR_TO_SECOND() ; -sub SQL_INTERVAL_MINUTE() ; -sub SQL_INTERVAL_MINUTE_TO_SECOND() ; -sub SQL_INTERVAL_MONTH() ; -sub SQL_INTERVAL_SECOND() ; -sub SQL_INTERVAL_YEAR() ; -sub SQL_INTERVAL_YEAR_TO_MONTH() ; -sub SQL_LONGVARBINARY() ; -sub SQL_LONGVARCHAR() ; -sub SQL_MULTISET() ; -sub SQL_MULTISET_LOCATOR() ; -sub SQL_NUMERIC() ; -sub SQL_REAL() ; -sub SQL_REF() ; -sub SQL_ROW() ; -sub SQL_SMALLINT() ; -sub SQL_TIME() ; -sub SQL_TIMESTAMP() ; -sub SQL_TINYINT() ; -sub SQL_TYPE_DATE() ; -sub SQL_TYPE_TIME() ; -sub SQL_TYPE_TIMESTAMP() ; -sub SQL_TYPE_TIMESTAMP_WITH_TIMEZONE() ; -sub SQL_TYPE_TIME_WITH_TIMEZONE() ; -sub SQL_UDT() ; -sub SQL_UDT_LOCATOR() ; -sub SQL_UNKNOWN_TYPE() ; -sub SQL_VARBINARY() ; -sub SQL_VARCHAR() ; -sub SQL_WCHAR() ; -sub SQL_WLONGVARCHAR() ; -sub SQL_WVARCHAR() ; -sub STORE; -sub _do; -sub _login; -sub backup_from_dbh; -sub backup_from_file; -sub backup_to_dbh; -sub backup_to_file; -sub busy_timeout; -sub collation_needed; -sub commit; -sub commit_hook; -sub create_aggregate; -sub create_collation; -sub create_function; -sub create_module; -sub db_config; -sub db_filename; -sub db_status; -sub disconnect; -sub enable_load_extension; -sub last_insert_id; -sub last_insert_rowid; -sub limit; -sub load_extension; -sub profile; -sub progress_handler; -sub register_fts3_perl_tokenizer; -sub rollback; -sub rollback_hook; -sub selectall_arrayref; -sub selectrow_array; -sub selectrow_arrayref; -sub set_authorizer; -sub sqlite_backup_from_dbh; -sub sqlite_backup_from_file; -sub sqlite_backup_to_dbh; -sub sqlite_backup_to_file; -sub sqlite_busy_timeout; -sub sqlite_collation_needed; -sub sqlite_commit_hook; -sub sqlite_create_aggregate; -sub sqlite_create_collation; -sub sqlite_create_function; -sub sqlite_create_module; -sub sqlite_db_config; -sub sqlite_db_filename; -sub sqlite_db_status; -sub sqlite_enable_load_extension; -sub sqlite_last_insert_rowid; -sub sqlite_limit; -sub sqlite_load_extension; -sub sqlite_profile; -sub sqlite_progress_handler; -sub sqlite_register_fts3_perl_tokenizer; -sub sqlite_rollback_hook; -sub sqlite_set_authorizer; -sub sqlite_table_column_metadata; -sub sqlite_trace; -sub sqlite_update_hook; -sub table_column_metadata; -sub update_hook; -} -package DBD::SQLite::dr { -sub dbixs_revision; -sub discon_all_; -sub disconnect_all; -} -package DBD::SQLite::st { -sub DESTROY; -sub FETCH; -sub FETCH_attrib; -sub STORE; -sub _prepare; -sub bind_col; -sub bind_param; -sub bind_param_inout; -sub blob_read; -sub execute; -sub fetch; -sub fetchall_arrayref; -sub fetchrow; -sub fetchrow_array; -sub fetchrow_arrayref; -sub finish; -sub rows; -sub sqlite_st_status; -sub st_status; -} -package DBD::_::common { -sub DELETE; -sub DESTROY; -sub FETCH; -sub STORE; -sub debug; -sub dump_handle; -sub err; -sub errstr; -sub private_data; -sub rows; -sub set_err; -sub state; -sub swap_inner_handle; -sub trace; -sub trace_msg; -} -package DBD::_::db { -sub connected; -sub preparse; -sub take_imp_data; -} -package DBD::_::dr { -sub dbixs_revision; -} -package DBD::_::st { -sub DESTROY; -sub _get_fbav; -sub _set_fbav; -sub bind_col; -sub fetch; -sub fetchrow; -sub fetchrow_array; -sub fetchrow_arrayref; -sub fetchrow_hashref; -sub finish; -sub rows; -} -package DBD::_mem::common { -sub DESTROY; -} -package DBD::mysql { -sub constant; -} -package DBD::mysql::GetInfo { -sub dbd_mysql_get_info; -} -package DBD::mysql::db { -sub DESTROY; -sub FETCH; -sub SQL_ALL_TYPES() ; -sub SQL_ARRAY() ; -sub SQL_ARRAY_LOCATOR() ; -sub SQL_BIGINT() ; -sub SQL_BINARY() ; -sub SQL_BIT() ; -sub SQL_BLOB() ; -sub SQL_BLOB_LOCATOR() ; -sub SQL_BOOLEAN() ; -sub SQL_CHAR() ; -sub SQL_CLOB() ; -sub SQL_CLOB_LOCATOR() ; -sub SQL_DATE() ; -sub SQL_DATETIME() ; -sub SQL_DECIMAL() ; -sub SQL_DOUBLE() ; -sub SQL_FLOAT() ; -sub SQL_GUID() ; -sub SQL_INTEGER() ; -sub SQL_INTERVAL() ; -sub SQL_INTERVAL_DAY() ; -sub SQL_INTERVAL_DAY_TO_HOUR() ; -sub SQL_INTERVAL_DAY_TO_MINUTE() ; -sub SQL_INTERVAL_DAY_TO_SECOND() ; -sub SQL_INTERVAL_HOUR() ; -sub SQL_INTERVAL_HOUR_TO_MINUTE() ; -sub SQL_INTERVAL_HOUR_TO_SECOND() ; -sub SQL_INTERVAL_MINUTE() ; -sub SQL_INTERVAL_MINUTE_TO_SECOND() ; -sub SQL_INTERVAL_MONTH() ; -sub SQL_INTERVAL_SECOND() ; -sub SQL_INTERVAL_YEAR() ; -sub SQL_INTERVAL_YEAR_TO_MONTH() ; -sub SQL_LONGVARBINARY() ; -sub SQL_LONGVARCHAR() ; -sub SQL_MULTISET() ; -sub SQL_MULTISET_LOCATOR() ; -sub SQL_NUMERIC() ; -sub SQL_REAL() ; -sub SQL_REF() ; -sub SQL_ROW() ; -sub SQL_SMALLINT() ; -sub SQL_TIME() ; -sub SQL_TIMESTAMP() ; -sub SQL_TINYINT() ; -sub SQL_TYPE_DATE() ; -sub SQL_TYPE_TIME() ; -sub SQL_TYPE_TIMESTAMP() ; -sub SQL_TYPE_TIMESTAMP_WITH_TIMEZONE() ; -sub SQL_TYPE_TIME_WITH_TIMEZONE() ; -sub SQL_UDT() ; -sub SQL_UDT_LOCATOR() ; -sub SQL_UNKNOWN_TYPE() ; -sub SQL_VARBINARY() ; -sub SQL_VARCHAR() ; -sub SQL_WCHAR() ; -sub SQL_WLONGVARCHAR() ; -sub SQL_WVARCHAR() ; -sub STORE; -sub _ListDBs; -sub _async_check; -sub _login; -sub commit; -sub disconnect; -sub do($$;$@) ; -sub last_insert_id; -sub mysql_async_ready; -sub mysql_async_result; -sub mysql_fd; -sub ping($) ; -sub quote($$;$) ; -sub rollback; -sub selectall_arrayref; -sub selectrow_array; -sub selectrow_arrayref; -sub type_info_all; -} -package DBD::mysql::dr { -sub SQL_ALL_TYPES() ; -sub SQL_ARRAY() ; -sub SQL_ARRAY_LOCATOR() ; -sub SQL_BIGINT() ; -sub SQL_BINARY() ; -sub SQL_BIT() ; -sub SQL_BLOB() ; -sub SQL_BLOB_LOCATOR() ; -sub SQL_BOOLEAN() ; -sub SQL_CHAR() ; -sub SQL_CLOB() ; -sub SQL_CLOB_LOCATOR() ; -sub SQL_DATE() ; -sub SQL_DATETIME() ; -sub SQL_DECIMAL() ; -sub SQL_DOUBLE() ; -sub SQL_FLOAT() ; -sub SQL_GUID() ; -sub SQL_INTEGER() ; -sub SQL_INTERVAL() ; -sub SQL_INTERVAL_DAY() ; -sub SQL_INTERVAL_DAY_TO_HOUR() ; -sub SQL_INTERVAL_DAY_TO_MINUTE() ; -sub SQL_INTERVAL_DAY_TO_SECOND() ; -sub SQL_INTERVAL_HOUR() ; -sub SQL_INTERVAL_HOUR_TO_MINUTE() ; -sub SQL_INTERVAL_HOUR_TO_SECOND() ; -sub SQL_INTERVAL_MINUTE() ; -sub SQL_INTERVAL_MINUTE_TO_SECOND() ; -sub SQL_INTERVAL_MONTH() ; -sub SQL_INTERVAL_SECOND() ; -sub SQL_INTERVAL_YEAR() ; -sub SQL_INTERVAL_YEAR_TO_MONTH() ; -sub SQL_LONGVARBINARY() ; -sub SQL_LONGVARCHAR() ; -sub SQL_MULTISET() ; -sub SQL_MULTISET_LOCATOR() ; -sub SQL_NUMERIC() ; -sub SQL_REAL() ; -sub SQL_REF() ; -sub SQL_ROW() ; -sub SQL_SMALLINT() ; -sub SQL_TIME() ; -sub SQL_TIMESTAMP() ; -sub SQL_TINYINT() ; -sub SQL_TYPE_DATE() ; -sub SQL_TYPE_TIME() ; -sub SQL_TYPE_TIMESTAMP() ; -sub SQL_TYPE_TIMESTAMP_WITH_TIMEZONE() ; -sub SQL_TYPE_TIME_WITH_TIMEZONE() ; -sub SQL_UDT() ; -sub SQL_UDT_LOCATOR() ; -sub SQL_UNKNOWN_TYPE() ; -sub SQL_VARBINARY() ; -sub SQL_VARCHAR() ; -sub SQL_WCHAR() ; -sub SQL_WLONGVARCHAR() ; -sub SQL_WVARCHAR() ; -sub _ListDBs; -sub _admin_internal; -sub dbixs_revision; -} -package DBD::mysql::st { -sub DESTROY; -sub FETCH; -sub FETCH_attrib; -sub STORE; -sub _async_check; -sub _prepare; -sub bind_param; -sub bind_param_inout; -sub blob_read; -sub dataseek($$) ; -sub execute; -sub fetch; -sub fetchall_arrayref; -sub fetchrow; -sub fetchrow_array; -sub fetchrow_arrayref; -sub finish; -sub more_results; -sub mysql_async_ready; -sub mysql_async_result; -sub rows; -} -package DBI { -sub DBIf_TRACE_CON() ; -sub DBIf_TRACE_DBD() ; -sub DBIf_TRACE_ENC() ; -sub DBIf_TRACE_SQL() ; -sub DBIf_TRACE_TXN() ; -sub DBIpp_cm_XX() ; -sub DBIpp_cm_br() ; -sub DBIpp_cm_cs() ; -sub DBIpp_cm_dd() ; -sub DBIpp_cm_dw() ; -sub DBIpp_cm_hs() ; -sub DBIpp_ph_XX() ; -sub DBIpp_ph_cn() ; -sub DBIpp_ph_cs() ; -sub DBIpp_ph_qm() ; -sub DBIpp_ph_sp() ; -sub DBIpp_st_XX() ; -sub DBIpp_st_bs() ; -sub DBIpp_st_qq() ; -sub DBIstcf_DISCARD_STRING() ; -sub DBIstcf_STRICT() ; -sub SQL_ALL_TYPES() ; -sub SQL_ARRAY() ; -sub SQL_ARRAY_LOCATOR() ; -sub SQL_BIGINT() ; -sub SQL_BINARY() ; -sub SQL_BIT() ; -sub SQL_BLOB() ; -sub SQL_BLOB_LOCATOR() ; -sub SQL_BOOLEAN() ; -sub SQL_CHAR() ; -sub SQL_CLOB() ; -sub SQL_CLOB_LOCATOR() ; -sub SQL_CURSOR_DYNAMIC() ; -sub SQL_CURSOR_FORWARD_ONLY() ; -sub SQL_CURSOR_KEYSET_DRIVEN() ; -sub SQL_CURSOR_STATIC() ; -sub SQL_CURSOR_TYPE_DEFAULT() ; -sub SQL_DATE() ; -sub SQL_DATETIME() ; -sub SQL_DECIMAL() ; -sub SQL_DOUBLE() ; -sub SQL_FLOAT() ; -sub SQL_GUID() ; -sub SQL_INTEGER() ; -sub SQL_INTERVAL() ; -sub SQL_INTERVAL_DAY() ; -sub SQL_INTERVAL_DAY_TO_HOUR() ; -sub SQL_INTERVAL_DAY_TO_MINUTE() ; -sub SQL_INTERVAL_DAY_TO_SECOND() ; -sub SQL_INTERVAL_HOUR() ; -sub SQL_INTERVAL_HOUR_TO_MINUTE() ; -sub SQL_INTERVAL_HOUR_TO_SECOND() ; -sub SQL_INTERVAL_MINUTE() ; -sub SQL_INTERVAL_MINUTE_TO_SECOND() ; -sub SQL_INTERVAL_MONTH() ; -sub SQL_INTERVAL_SECOND() ; -sub SQL_INTERVAL_YEAR() ; -sub SQL_INTERVAL_YEAR_TO_MONTH() ; -sub SQL_LONGVARBINARY() ; -sub SQL_LONGVARCHAR() ; -sub SQL_MULTISET() ; -sub SQL_MULTISET_LOCATOR() ; -sub SQL_NUMERIC() ; -sub SQL_REAL() ; -sub SQL_REF() ; -sub SQL_ROW() ; -sub SQL_SMALLINT() ; -sub SQL_TIME() ; -sub SQL_TIMESTAMP() ; -sub SQL_TINYINT() ; -sub SQL_TYPE_DATE() ; -sub SQL_TYPE_TIME() ; -sub SQL_TYPE_TIMESTAMP() ; -sub SQL_TYPE_TIMESTAMP_WITH_TIMEZONE() ; -sub SQL_TYPE_TIME_WITH_TIMEZONE() ; -sub SQL_UDT() ; -sub SQL_UDT_LOCATOR() ; -sub SQL_UNKNOWN_TYPE() ; -sub SQL_VARBINARY() ; -sub SQL_VARCHAR() ; -sub SQL_WCHAR() ; -sub SQL_WLONGVARCHAR() ; -sub SQL_WVARCHAR() ; -sub _clone_dbis; -sub _concat_hash_sorted; -sub _dbi_state_lval; -sub _debug_dispatch; -sub _get_imp_data; -sub _handles; -sub _install_method; -sub _new_handle; -sub _setup_handle; -sub _svdump; -sub constant() ; -sub dbi_profile; -sub dbi_profile_merge; -sub dbi_profile_merge_nodes; -sub dbi_time; -sub dump_handle; -sub hash; -sub looks_like_number; -sub neat; -sub set_err; -sub sql_type_cast; -sub trace; -sub trace_msg; -} -package DBI::common { -sub CLEAR; -sub DELETE; -sub DESTROY; -sub EXISTS; -sub FETCH; -sub FETCH_many; -sub FIRSTKEY; -sub NEXTKEY; -sub STORE; -sub can; -sub debug; -sub dump_handle; -sub err; -sub errstr; -sub func; -sub parse_trace_flag; -sub parse_trace_flags; -sub private_attribute_info; -sub private_data; -sub set_err; -sub state; -sub swap_inner_handle; -sub trace; -sub trace_msg; -sub visit_child_handles; -} -package DBI::db { -sub TIEHASH; -sub begin_work; -sub clone; -sub column_info; -sub commit; -sub connected; -sub data_sources; -sub disconnect; -sub do; -sub foreign_key_info; -sub get_info; -sub last_insert_id; -sub ping; -sub prepare; -sub prepare_cached; -sub preparse; -sub primary_key; -sub primary_key_info; -sub quote; -sub quote_identifier; -sub rollback; -sub rows; -sub selectall_array; -sub selectall_arrayref; -sub selectall_hashref; -sub selectcol_arrayref; -sub selectrow_array; -sub selectrow_arrayref; -sub selectrow_hashref; -sub statistics_info; -sub table_info; -sub tables; -sub take_imp_data; -sub type_info; -sub type_info_all; -} -package DBI::dr { -sub TIEHASH; -sub connect; -sub connect_cached; -sub data_sources; -sub dbixs_revision; -sub default_user; -sub disconnect_all; -} -package DBI::st { -sub TIEHASH; -sub _get_fbav; -sub _set_fbav; -sub bind_col; -sub bind_columns; -sub bind_param; -sub bind_param_array; -sub bind_param_inout; -sub bind_param_inout_array; -sub blob_copy_to_file; -sub blob_read; -sub cancel; -sub dump_results; -sub execute; -sub execute_array; -sub execute_for_fetch; -sub fetch; -sub fetchall_arrayref; -sub fetchall_hashref; -sub fetchrow; -sub fetchrow_array; -sub fetchrow_arrayref; -sub fetchrow_hashref; -sub finish; -sub last_insert_id; -sub more_results; -sub rows; -} -package DBI::var { -sub FETCH; -} -package DB_File { -sub DELETE; -sub DESTROY; -sub DoTie_; -sub EXISTS; -sub FETCH; -sub FETCHSIZE; -sub FIRSTKEY; -sub NEXTKEY; -sub O_ALIAS() ; -sub O_ASYNC() ; -sub O_DEFER() ; -sub O_DIRECT() ; -sub O_DIRECTORY() ; -sub O_DSYNC() ; -sub O_EXLOCK() ; -sub O_LARGEFILE() ; -sub O_NDELAY() ; -sub O_NOCTTY() ; -sub O_NOFOLLOW() ; -sub O_NONBLOCK() ; -sub O_RSRC() ; -sub O_RSYNC() ; -sub O_SHLOCK() ; -sub O_SYNC() ; -sub POP; -sub PUSH; -sub SHIFT; -sub STORE; -sub UNSHIFT; -sub constant; -sub del; -sub fd; -sub filter_fetch_key; -sub filter_fetch_value; -sub filter_store_key; -sub filter_store_value; -sub get; -sub length; -sub pop; -sub push; -sub put; -sub seq; -sub shift; -sub sync; -sub unshift; -} -package Data::Dump::Streamer { -sub SvREADONLY_ref($;$) ; -sub SvREFCNT_ref($;$) ; -sub _could_be_dualvar($) ; -sub _globname($) ; -sub _make_ro($) ; -sub alias_av(\@$$) ; -sub alias_hv(\%$$) ; -sub alias_ref; -sub all_keys(\%\@\@) ; -sub blessed($) ; -sub dualvar($$) ; -sub globname($) ; -sub hidden_keys(\%) ; -sub is_numeric($) ; -sub is_regexp($) ; -sub isweak($) ; -sub legal_keys(\%) ; -sub looks_like_number($) ; -sub make_ro($) ; -sub push_alias(\@$) ; -sub readonly($) ; -sub readonly_set($) ; -sub refaddr($) ; -sub refaddr_or_glob($) ; -sub refcount($) ; -sub reftype($) ; -sub reftype_or_glob($) ; -sub regex($) ; -sub regexp_pattern($) ; -sub sv_refcount($) ; -sub weak_refcount($) ; -sub weaken($) ; -} -package Data::Dumper { -sub Dumpxs($;$$) ; -sub _vstring($) ; -} -package DateTime { -sub _accumulated_leap_seconds($$) ; -sub _day_has_leap_second($$) ; -sub _day_length($$) ; -sub _is_leap_year($$) ; -sub _normalize_leap_seconds($$$) ; -sub _normalize_tai_seconds($$$) ; -sub _rd2ymd($$;$) ; -sub _seconds_as_components($$;$$) ; -sub _time_as_seconds($$$$) ; -sub _ymd2rd($$$$) ; -} -package Devel::Declare { -sub clear_lex_stuff; -sub get_curstash_name; -sub get_in_declare; -sub get_lex_stuff; -sub get_linestr; -sub get_linestr_offset; -sub initialize; -sub set_in_declare; -sub set_linestr; -sub setup; -sub toke_move_past_token; -sub toke_scan_ident; -sub toke_scan_str; -sub toke_scan_word; -sub toke_skipspace; -} -package Devel::OverloadInfo { -sub blessed($) ; -} -package Devel::Peek { -sub CvGV; -sub DeadCode; -sub Dump; -sub DumpArray; -sub DumpProg; -sub SvREFCNT(\[$@%&*]) ; -sub fill_mstats; -sub mstat; -sub mstats2hash($\%;$) ; -sub mstats_fillhash(\%;$) ; -sub runops_debug; -} -package Devel::StackTrace { -sub blessed($) ; -} -package Digest::MD2 { -sub DESTROY; -sub add; -sub addfile; -sub b64digest; -sub clone; -sub digest; -sub hexdigest; -sub md2; -sub md2_base64; -sub md2_hex; -sub new; -sub reset; -} -package Digest::MD5 { -sub DESTROY; -sub add; -sub addfile; -sub b64digest; -sub clone; -sub context; -sub digest; -sub hexdigest; -sub md5; -sub md5_base64; -sub md5_hex; -sub new; -sub reset; -} -package Digest::SHA { -sub DESTROY($) ; -sub _addfilebin($$) ; -sub _addfileuniv($$) ; -sub _getstate($) ; -sub _putstate($$) ; -sub add($;@) ; -sub algorithm($) ; -sub b64digest($) ; -sub clone($) ; -sub digest($) ; -sub hashsize($) ; -sub hexdigest($) ; -sub hmac_sha1(;@) ; -sub hmac_sha1_base64(;@) ; -sub hmac_sha1_hex(;@) ; -sub hmac_sha224(;@) ; -sub hmac_sha224_base64(;@) ; -sub hmac_sha224_hex(;@) ; -sub hmac_sha256(;@) ; -sub hmac_sha256_base64(;@) ; -sub hmac_sha256_hex(;@) ; -sub hmac_sha384(;@) ; -sub hmac_sha384_base64(;@) ; -sub hmac_sha384_hex(;@) ; -sub hmac_sha512(;@) ; -sub hmac_sha512224(;@) ; -sub hmac_sha512224_base64(;@) ; -sub hmac_sha512224_hex(;@) ; -sub hmac_sha512256(;@) ; -sub hmac_sha512256_base64(;@) ; -sub hmac_sha512256_hex(;@) ; -sub hmac_sha512_base64(;@) ; -sub hmac_sha512_hex(;@) ; -sub newSHA($$) ; -sub sha1(;@) ; -sub sha1_base64(;@) ; -sub sha1_hex(;@) ; -sub sha224(;@) ; -sub sha224_base64(;@) ; -sub sha224_hex(;@) ; -sub sha256(;@) ; -sub sha256_base64(;@) ; -sub sha256_hex(;@) ; -sub sha384(;@) ; -sub sha384_base64(;@) ; -sub sha384_hex(;@) ; -sub sha512(;@) ; -sub sha512224(;@) ; -sub sha512224_base64(;@) ; -sub sha512224_hex(;@) ; -sub sha512256(;@) ; -sub sha512256_base64(;@) ; -sub sha512256_hex(;@) ; -sub sha512_base64(;@) ; -sub sha512_hex(;@) ; -sub shainit($$) ; -sub sharewind($) ; -sub shawrite($$$) ; -} -package Digest::SHA1 { -sub DESTROY; -sub add; -sub addfile; -sub b64digest; -sub clone; -sub digest; -sub hexdigest; -sub new; -sub sha1; -sub sha1_base64; -sub sha1_hex; -sub sha1_transform; -} -package Digest::Whirlpool { -sub DESTROY; -sub add; -sub clone; -sub digest; -sub hashsize; -sub new; -sub reset; -} -package Digest::base { -sub add; -sub clone; -sub digest; -sub new; -} -package DynaLoader { -sub CLONE; -sub boot_DynaLoader; -sub dl_error; -sub dl_find_symbol; -sub dl_install_xsub; -sub dl_load_file; -sub dl_undef_symbols; -sub dl_unload_file; -} -package EV { -sub _ae_io($$$) ; -sub async($) ; -sub async_ns($) ; -sub backend() ; -sub break(;$) ; -sub check($) ; -sub check_ns($) ; -sub child($$$) ; -sub child_ns($$$) ; -sub default_destroy() ; -sub default_loop(;$) ; -sub depth() ; -sub embed($;$) ; -sub embed_ns($;$) ; -sub embeddable_backends() ; -sub feed_fd_event($;$) ; -sub feed_signal($) ; -sub feed_signal_event($) ; -sub fork($) ; -sub fork_ns($) ; -sub idle($) ; -sub idle_ns($) ; -sub invoke_pending() ; -sub io($$$) ; -sub io_ns($$$) ; -sub iteration() ; -sub loop(;$) ; -sub loop_count() ; -sub loop_depth() ; -sub loop_verify() ; -sub now() ; -sub now_update() ; -sub once($$$$) ; -sub pending_count() ; -sub periodic($$$$) ; -sub periodic_ns($$$$) ; -sub prepare($) ; -sub prepare_ns($) ; -sub recommended_backends() ; -sub resume() ; -sub run(;$) ; -sub set_io_collect_interval($) ; -sub set_timeout_collect_interval($) ; -sub signal($$) ; -sub signal_ns($$) ; -sub sleep($) ; -sub stat($$$) ; -sub stat_ns($$$) ; -sub supported_backends() ; -sub suspend() ; -sub time() ; -sub timer($$$) ; -sub timer_ns($$$) ; -sub unloop(;$) ; -sub verify() ; -} -package EV::Async { -sub DESTROY; -sub async_pending; -sub send; -sub start; -sub stop; -} -package EV::Check { -sub DESTROY; -sub start; -sub stop; -} -package EV::Embed { -sub DESTROY; -sub other; -sub set; -sub start; -sub stop; -sub sweep; -} -package EV::Fork { -sub DESTROY; -sub start; -sub stop; -} -package EV::IO { -sub DESTROY; -sub events; -sub fh; -sub set; -sub start; -sub stop; -} -package EV::Idle { -sub DESTROY; -sub start; -sub stop; -} -package EV::Loop { -sub DESTROY; -sub async; -sub async_ns; -sub backend; -sub break; -sub check; -sub check_ns; -sub child; -sub child_ns; -sub depth; -sub embed; -sub embed_ns; -sub feed_fd_event; -sub fork; -sub fork_ns; -sub idle; -sub idle_ns; -sub invoke_pending; -sub io; -sub io_ns; -sub iteration; -sub loop; -sub loop_count; -sub loop_depth; -sub loop_fork; -sub loop_verify; -sub new; -sub now; -sub now_update; -sub once; -sub pending_count; -sub periodic; -sub periodic_ns; -sub prepare; -sub prepare_ns; -sub resume; -sub run; -sub set_io_collect_interval; -sub set_timeout_collect_interval; -sub signal; -sub signal_ns; -sub stat; -sub stat_ns; -sub suspend; -sub timer; -sub timer_ns; -sub unloop; -sub verify; -} -package EV::Periodic { -sub DESTROY; -sub again; -sub at; -sub set; -sub start; -sub stop; -} -package EV::Prepare { -sub DESTROY; -sub start; -sub stop; -} -package EV::Signal { -sub DESTROY; -sub set; -sub signal; -sub start; -sub stop; -} -package EV::Stat { -sub DESTROY; -sub attr; -sub interval; -sub path; -sub prev; -sub set; -sub start; -sub stat; -sub stop; -} -package EV::Timer { -sub DESTROY; -sub again; -sub remaining; -sub set; -sub start; -sub stop; -} -package EV::Watcher { -sub cb; -sub clear_pending; -sub data; -sub feed_event; -sub invoke; -sub is_active; -sub is_pending; -sub keepalive; -sub loop; -sub priority; -} -package Email::Address::XS { -sub compose_address; -sub format_email_groups; -sub is_obj; -sub parse_email_groups; -sub split_address; -} -package Encode { -sub _utf8_off($) ; -sub _utf8_on($) ; -sub bytes2str($$;$) ; -sub decode($$;$) ; -sub decode_utf8($;$) ; -sub encode($$;$) ; -sub encode_utf8($) ; -sub from_to($$$;$) ; -sub is_utf8($;$) ; -sub onBOOT() ; -sub str2bytes($$;$) ; -} -package Encode::Byte { -sub bytes2str($$;$) ; -sub decode($$;$) ; -sub decode_utf8($;$) ; -sub encode($$;$) ; -sub encode_utf8($) ; -sub str2bytes($$;$) ; -} -package Encode::CN { -sub bytes2str($$;$) ; -sub decode($$;$) ; -sub decode_utf8($;$) ; -sub encode($$;$) ; -sub encode_utf8($) ; -sub str2bytes($$;$) ; -} -package Encode::EBCDIC { -sub bytes2str($$;$) ; -sub decode($$;$) ; -sub decode_utf8($;$) ; -sub encode($$;$) ; -sub encode_utf8($) ; -sub str2bytes($$;$) ; -} -package Encode::JP { -sub bytes2str($$;$) ; -sub decode($$;$) ; -sub decode_utf8($;$) ; -sub encode($$;$) ; -sub encode_utf8($) ; -sub str2bytes($$;$) ; -} -package Encode::KR { -sub bytes2str($$;$) ; -sub decode($$;$) ; -sub decode_utf8($;$) ; -sub encode($$;$) ; -sub encode_utf8($) ; -sub str2bytes($$;$) ; -} -package Encode::Symbol { -sub bytes2str($$;$) ; -sub decode($$;$) ; -sub decode_utf8($;$) ; -sub encode($$;$) ; -sub encode_utf8($) ; -sub str2bytes($$;$) ; -} -package Encode::TW { -sub bytes2str($$;$) ; -sub decode($$;$) ; -sub decode_utf8($;$) ; -sub encode($$;$) ; -sub encode_utf8($) ; -sub str2bytes($$;$) ; -} -package Encode::Unicode { -sub decode; -sub encode; -} -package Encode::XS { -sub cat_decode; -sub decode; -sub encode; -sub mime_name; -sub name; -sub needs_lines; -sub perlio_ok; -sub renew; -sub renewed; -} -package Encode::utf8 { -sub decode; -sub encode; -} -package Eval::Closure { -sub reftype($) ; -} -package Exception::Class { -sub blessed($) ; -sub reftype($) ; -} -package Exception::Class::Base { -sub blessed($) ; -} -package FCGI { -sub Accept($) ; -sub Attach($) ; -sub CloseSocket($) ; -sub DESTROY; -sub Detach($) ; -sub Finish($) ; -sub Flush($) ; -sub GetEnvironment($) ; -sub GetHandles($) ; -sub IsFastCGI($) ; -sub LastCall($) ; -sub OpenSocket($$) ; -sub RequestX(***$$$) ; -sub StartFilterData($) ; -} -package FCGI::Stream { -sub CLOSE; -sub EOF; -sub FILENO; -sub GETC; -sub PRINT; -sub READ; -sub WRITE; -} -package FFI::Raw { -sub DESTROY; -sub call; -sub new; -sub new_from_ptr; -} -package FFI::Raw::Callback { -sub DESTROY; -sub new; -} -package FFI::Raw::MemPtr { -sub DESTROY; -sub new; -sub new_from_buf; -sub new_from_ptr; -sub tostr($;$) ; -} -package Fcntl { -sub AUTOLOAD; -sub DN_ACCESS() ; -sub DN_ATTRIB() ; -sub DN_CREATE() ; -sub DN_DELETE() ; -sub DN_MODIFY() ; -sub DN_MULTISHOT() ; -sub DN_RENAME() ; -sub FAPPEND() ; -sub FASYNC() ; -sub FCREAT() ; -sub FDEFER() ; -sub FDSYNC() ; -sub FD_CLOEXEC() ; -sub FEXCL() ; -sub FLARGEFILE() ; -sub FNDELAY() ; -sub FNONBLOCK() ; -sub FRSYNC() ; -sub FSYNC() ; -sub FTRUNC() ; -sub F_ALLOCSP() ; -sub F_ALLOCSP64() ; -sub F_COMPAT() ; -sub F_DUP2FD() ; -sub F_DUPFD() ; -sub F_EXLCK() ; -sub F_FREESP() ; -sub F_FREESP64() ; -sub F_FSYNC() ; -sub F_FSYNC64() ; -sub F_GETFD() ; -sub F_GETFL() ; -sub F_GETLEASE() ; -sub F_GETLK() ; -sub F_GETLK64() ; -sub F_GETOWN() ; -sub F_GETPIPE_SZ() ; -sub F_GETSIG() ; -sub F_NODNY() ; -sub F_NOTIFY() ; -sub F_POSIX() ; -sub F_RDACC() ; -sub F_RDDNY() ; -sub F_RDLCK() ; -sub F_RWACC() ; -sub F_RWDNY() ; -sub F_SETFD() ; -sub F_SETFL() ; -sub F_SETLEASE() ; -sub F_SETLK() ; -sub F_SETLK64() ; -sub F_SETLKW() ; -sub F_SETLKW64() ; -sub F_SETOWN() ; -sub F_SETPIPE_SZ() ; -sub F_SETSIG() ; -sub F_SHARE() ; -sub F_SHLCK() ; -sub F_UNLCK() ; -sub F_UNSHARE() ; -sub F_WRACC() ; -sub F_WRDNY() ; -sub F_WRLCK() ; -sub LOCK_MAND() ; -sub LOCK_READ() ; -sub LOCK_RW() ; -sub LOCK_WRITE() ; -sub O_ALIAS() ; -sub O_ALT_IO() ; -sub O_ASYNC() ; -sub O_DEFER() ; -sub O_DIRECT() ; -sub O_DIRECTORY() ; -sub O_DSYNC() ; -sub O_EVTONLY() ; -sub O_EXLOCK() ; -sub O_IGNORE_CTTY() ; -sub O_LARGEFILE() ; -sub O_NDELAY() ; -sub O_NOATIME() ; -sub O_NOCTTY() ; -sub O_NOFOLLOW() ; -sub O_NOLINK() ; -sub O_NONBLOCK() ; -sub O_NOSIGPIPE() ; -sub O_NOTRANS() ; -sub O_RSRC() ; -sub O_RSYNC() ; -sub O_SHLOCK() ; -sub O_SYMLINK() ; -sub O_SYNC() ; -sub O_TTY_INIT() ; -sub S_ENFMT() ; -sub S_IFLNK() ; -sub S_IFMT; -sub S_IFSOCK() ; -sub S_IFWHT() ; -sub S_IMODE; -sub S_ISBLK; -sub S_ISCHR; -sub S_ISDIR; -sub S_ISFIFO; -sub S_ISREG; -sub S_ISTXT() ; -sub S_ISVTX() ; -} -package File::DosGlob { -sub _callsite; -} -package File::Find { -sub is_tainted($) ; -} -package File::Glob { -sub AUTOLOAD; -sub CLONE; -sub GLOB_ERROR; -sub bsd_glob; -sub bsd_glob_override; -sub csh_glob; -} -package File::Map { -sub _mmap_impl; -sub _protection_value; -sub advise; -sub broadcast; -sub lock_map; -sub notify; -sub pin; -sub protect; -sub sync; -sub unmap; -sub unpin; -sub wait_until(&@) ; -} -package File::ShareDir { -sub _STRING($) ; -sub firstres(&@) ; -} -package File::Spec::Unix { -sub _fn_canonpath; -sub _fn_catdir; -sub _fn_catfile; -sub canonpath; -sub catdir; -sub catfile; -} -package FileHandle { -sub clearerr; -sub error; -sub flush; -sub getpos; -sub new_tmpfile; -sub setbuf; -sub setpos; -sub setvbuf; -sub ungetc; -} -package Filter::Util::Call { -sub filter_del() ; -sub filter_read(;$) ; -sub real_import($$$) ; -sub unimport(;$@) ; -} -package GD { -sub LIBGD_VERSION; -sub VERSION_STRING; -sub constant; -sub supportsFileType($;$) ; -} -package GD::Font { -sub DESTROY($) ; -sub Giant($) ; -sub Large($) ; -sub MediumBold($) ; -sub Small($) ; -sub Tiny($) ; -sub height($) ; -sub load($$) ; -sub nchars($) ; -sub offset($) ; -sub width($) ; -} -package GD::Image { -sub DESTROY($) ; -sub STORABLE_freeze($$) ; -sub STORABLE_thaw; -sub _file($$) ; -sub _new($;$$$) ; -sub _newFromGd($$) ; -sub _newFromGd2($$) ; -sub _newFromGd2Part($$$$$$) ; -sub _newFromGif($$;$) ; -sub _newFromJpeg($$;$) ; -sub _newFromPng($$;$) ; -sub _newFromWBMP($$) ; -sub _newFromXbm($$) ; -sub alpha($$) ; -sub alphaBlending($$) ; -sub arc($$$$$$$$) ; -sub boundsSafe($$$) ; -sub brightness($$) ; -sub char($$$$$$) ; -sub charUp($$$$$$) ; -sub clip($;$$$$) ; -sub color($$$$$) ; -sub colorAllocate($$$$) ; -sub colorAllocateAlpha($$$$$) ; -sub colorClosest($$$$) ; -sub colorClosestAlpha($$$$$) ; -sub colorClosestHWB($$$$) ; -sub colorDeallocate($$) ; -sub colorExact($$$$) ; -sub colorExactAlpha($$$$$) ; -sub colorMatch($$) ; -sub colorResolve($$$$) ; -sub colorResolveAlpha($$$$$) ; -sub colorsTotal($) ; -sub compare($$) ; -sub contrast($$) ; -sub copy($$$$$$$$) ; -sub copyFlipHorizontal($) ; -sub copyFlipVertical($) ; -sub copyGaussianBlurred($$$) ; -sub copyMerge($$$$$$$$$) ; -sub copyMergeGray($$$$$$$$$) ; -sub copyResampled($$$$$$$$$$) ; -sub copyResized($$$$$$$$$$) ; -sub copyReverseTranspose($) ; -sub copyRotate180($) ; -sub copyRotate270($) ; -sub copyRotate90($) ; -sub copyRotateInterpolated($$$) ; -sub copyRotated($$$$$$$$$) ; -sub copyScaleInterpolated($$$) ; -sub copyTranspose($) ; -sub createPaletteFromTrueColor($;$$) ; -sub dashedLine($$$$$$) ; -sub edgeDetectQuick($) ; -sub emboss($) ; -sub fill($$$$) ; -sub fillToBorder($$$$$) ; -sub filledArc($$$$$$$$$) ; -sub filledEllipse($$$$$$) ; -sub filledPolygon($$$) ; -sub filledRectangle($$$$$$) ; -sub flipHorizontal($) ; -sub flipVertical($) ; -sub gaussianBlur($) ; -sub gd($) ; -sub gd2($) ; -sub getBounds($) ; -sub getPixel($$$) ; -sub gif($) ; -sub gifanimadd($$$$$$$) ; -sub gifanimbegin($$$) ; -sub gifanimend($) ; -sub grayscale($) ; -sub interlaced($;$) ; -sub interpolationMethod($;$) ; -sub isTrueColor($) ; -sub jpeg($) ; -sub line($$$$$$) ; -sub meanRemoval($) ; -sub negate($) ; -sub neuQuant($;$$) ; -sub newFromGd2Data($$) ; -sub newFromGdData($$) ; -sub newFromGifData($$;$) ; -sub newFromJpegData($$;$) ; -sub newFromPngData($$;$) ; -sub newFromWBMPData($$;$) ; -sub newFromXpm($$) ; -sub openPolygon($$$) ; -sub paletteCopy($$) ; -sub pixelate($$$) ; -sub png($;$) ; -sub rectangle($$$$$$) ; -sub rgb($$) ; -sub rotate180($) ; -sub saveAlpha($$) ; -sub scatter($$$) ; -sub scatterColor($$$\@) ; -sub selectiveBlur($) ; -sub setAntiAliased($$) ; -sub setAntiAliasedDontBlend($$$) ; -sub setBrush($$) ; -sub setPixel($$$$) ; -sub setStyle($;$) ; -sub setThickness($$) ; -sub setTile($$) ; -sub smooth($$) ; -sub string($$$$$$) ; -sub stringFT($$$$$$$$;$) ; -sub stringFTCircle($$$$$$$$$$$) ; -sub stringTTF($$$$$$$$;$) ; -sub stringUp($$$$$$) ; -sub transparent($;$) ; -sub trueColor($$) ; -sub trueColorToPalette($;$$) ; -sub unclosedPolygon($$$) ; -sub useFontConfig($$) ; -sub wbmp($) ; -} -package GDBM_File { -sub AUTOLOAD; -sub DELETE; -sub DESTROY; -sub EXISTS; -sub FETCH; -sub FIRSTKEY; -sub NEXTKEY; -sub STORE; -sub TIEHASH; -sub close; -sub filter_fetch_key; -sub filter_fetch_value; -sub filter_store_key; -sub filter_store_value; -sub reorganize; -sub setopt; -sub sync; -} -package HTML::Entities { -sub UNICODE_SUPPORT() ; -sub _decode_entities; -sub _probably_utf8_chunk; -sub decode; -sub decode_entities; -} -package HTML::Parser { -sub _alloc_pstate; -sub attr_encoded; -sub backquote; -sub boolean_attribute_value; -sub case_sensitive; -sub closing_plaintext; -sub empty_element_tags; -sub eof; -sub handler; -sub ignore_elements; -sub ignore_tags; -sub marked_sections; -sub parse; -sub report_tags; -sub strict_comment; -sub strict_end; -sub strict_names; -sub unbroken_text; -sub utf8_mode; -sub xml_mode; -sub xml_pic; -} -package Hash::Util { -sub _clear_placeholders(\%) ; -sub all_keys(\%\@\@) ; -sub bucket_array; -sub bucket_info; -sub bucket_ratio(\%) ; -sub hash_seed() ; -sub hash_traversal_mask; -sub hash_value($;$) ; -sub hidden_ref_keys; -sub hv_store(\%$$) ; -sub legal_ref_keys; -sub num_buckets(\%) ; -sub reftype($) ; -sub used_buckets(\%) ; -} -package Hash::Util::FieldHash { -sub CLONE; -sub _active_fields; -sub _fieldhash($$) ; -sub _test_uvar_get; -sub _test_uvar_same; -sub _test_uvar_set; -sub id($) ; -sub id_2obj($) ; -sub reftype($) ; -sub register($@) ; -} -package I18N::Langinfo { -sub AUTOLOAD; -sub langinfo(_) ; -} -package IO::File { -sub O_ALIAS() ; -sub O_ASYNC() ; -sub O_DEFER() ; -sub O_DIRECT() ; -sub O_DIRECTORY() ; -sub O_DSYNC() ; -sub O_EXLOCK() ; -sub O_LARGEFILE() ; -sub O_NDELAY() ; -sub O_NOCTTY() ; -sub O_NOFOLLOW() ; -sub O_NONBLOCK() ; -sub O_RSRC() ; -sub O_RSYNC() ; -sub O_SHLOCK() ; -sub O_SYNC() ; -sub new_tmpfile; -} -package IO::Handle { -sub _create_getline_subs; -sub blocking($;$) ; -sub clearerr; -sub error; -sub flush; -sub setbuf; -sub setvbuf; -sub sync; -sub ungetc; -sub untaint; -} -package IO::Poll { -sub _poll; -} -package IO::Seekable { -sub getpos; -sub setpos; -} -package IO::Socket { -sub AF_802() ; -sub AF_AAL() ; -sub AF_CTF() ; -sub AF_GOSIP() ; -sub AF_KEY() ; -sub AF_LAST() ; -sub AF_LINK() ; -sub AF_NBS() ; -sub AF_NIT() ; -sub AF_OSINET() ; -sub AF_ROUTE() ; -sub AF_USER() ; -sub AF_WAN() ; -sub AF_X25() ; -sub IOV_MAX() ; -sub IP_RECVOPTS() ; -sub IP_RECVRETOPTS() ; -sub IP_RETOPTS() ; -sub MSG_BCAST() ; -sub MSG_BTAG() ; -sub MSG_CTLFLAGS() ; -sub MSG_CTLIGNORE() ; -sub MSG_CTRUNC() ; -sub MSG_DONTWAIT() ; -sub MSG_EOF() ; -sub MSG_EOR() ; -sub MSG_ERRQUEUE() ; -sub MSG_ETAG() ; -sub MSG_FASTOPEN() ; -sub MSG_FIN() ; -sub MSG_MCAST() ; -sub MSG_NOSIGNAL() ; -sub MSG_PROXY() ; -sub MSG_RST() ; -sub MSG_SYN() ; -sub MSG_TRUNC() ; -sub MSG_URG() ; -sub MSG_WIRE() ; -sub PF_802() ; -sub PF_AAL() ; -sub PF_CTF() ; -sub PF_GOSIP() ; -sub PF_KEY() ; -sub PF_LAST() ; -sub PF_LINK() ; -sub PF_NBS() ; -sub PF_NIT() ; -sub PF_OSINET() ; -sub PF_ROUTE() ; -sub PF_USER() ; -sub PF_WAN() ; -sub PF_X25() ; -sub SCM_CONNECT() ; -sub SCM_CREDENTIALS() ; -sub SCM_CREDS() ; -sub SCM_RIGHTS() ; -sub SCM_TIMESTAMP() ; -sub SO_ATTACH_FILTER() ; -sub SO_BACKLOG() ; -sub SO_CHAMELEON() ; -sub SO_DETACH_FILTER() ; -sub SO_DGRAM_ERRIND() ; -sub SO_DOMAIN() ; -sub SO_FAMILY() ; -sub SO_PASSCRED() ; -sub SO_PASSIFNAME() ; -sub SO_PEERCRED() ; -sub SO_PROTOCOL() ; -sub SO_PROTOTYPE() ; -sub SO_REUSEPORT() ; -sub SO_SECURITY_AUTHENTICATION() ; -sub SO_SECURITY_ENCRYPTION_NETWORK() ; -sub SO_SECURITY_ENCRYPTION_TRANSPORT() ; -sub SO_STATE() ; -sub SO_XOPEN() ; -sub SO_XSE() ; -sub UIO_MAXIOV() ; -sub inet_aton; -sub inet_ntoa; -sub pack_sockaddr_in6; -sub pack_sockaddr_in; -sub pack_sockaddr_un; -sub sockaddr_family; -sub sockatmark($) ; -sub unpack_sockaddr_in6; -sub unpack_sockaddr_in; -sub unpack_sockaddr_un; -} -package IO::Socket::INET { -sub AF_802() ; -sub AF_AAL() ; -sub AF_CTF() ; -sub AF_GOSIP() ; -sub AF_KEY() ; -sub AF_LAST() ; -sub AF_LINK() ; -sub AF_NBS() ; -sub AF_NIT() ; -sub AF_OSINET() ; -sub AF_ROUTE() ; -sub AF_USER() ; -sub AF_WAN() ; -sub AF_X25() ; -sub IOV_MAX() ; -sub IP_RECVOPTS() ; -sub IP_RECVRETOPTS() ; -sub IP_RETOPTS() ; -sub MSG_BCAST() ; -sub MSG_BTAG() ; -sub MSG_CTLFLAGS() ; -sub MSG_CTLIGNORE() ; -sub MSG_CTRUNC() ; -sub MSG_DONTWAIT() ; -sub MSG_EOF() ; -sub MSG_EOR() ; -sub MSG_ERRQUEUE() ; -sub MSG_ETAG() ; -sub MSG_FASTOPEN() ; -sub MSG_FIN() ; -sub MSG_MCAST() ; -sub MSG_NOSIGNAL() ; -sub MSG_PROXY() ; -sub MSG_RST() ; -sub MSG_SYN() ; -sub MSG_TRUNC() ; -sub MSG_URG() ; -sub MSG_WIRE() ; -sub PF_802() ; -sub PF_AAL() ; -sub PF_CTF() ; -sub PF_GOSIP() ; -sub PF_KEY() ; -sub PF_LAST() ; -sub PF_LINK() ; -sub PF_NBS() ; -sub PF_NIT() ; -sub PF_OSINET() ; -sub PF_ROUTE() ; -sub PF_USER() ; -sub PF_WAN() ; -sub PF_X25() ; -sub SCM_CONNECT() ; -sub SCM_CREDENTIALS() ; -sub SCM_CREDS() ; -sub SCM_RIGHTS() ; -sub SCM_TIMESTAMP() ; -sub SO_ATTACH_FILTER() ; -sub SO_BACKLOG() ; -sub SO_CHAMELEON() ; -sub SO_DETACH_FILTER() ; -sub SO_DGRAM_ERRIND() ; -sub SO_DOMAIN() ; -sub SO_FAMILY() ; -sub SO_PASSCRED() ; -sub SO_PASSIFNAME() ; -sub SO_PEERCRED() ; -sub SO_PROTOCOL() ; -sub SO_PROTOTYPE() ; -sub SO_REUSEPORT() ; -sub SO_SECURITY_AUTHENTICATION() ; -sub SO_SECURITY_ENCRYPTION_NETWORK() ; -sub SO_SECURITY_ENCRYPTION_TRANSPORT() ; -sub SO_STATE() ; -sub SO_XOPEN() ; -sub SO_XSE() ; -sub UIO_MAXIOV() ; -sub inet_aton; -sub inet_ntoa; -sub pack_sockaddr_in6; -sub pack_sockaddr_in; -sub pack_sockaddr_un; -sub sockaddr_family; -sub unpack_sockaddr_in6; -sub unpack_sockaddr_in; -sub unpack_sockaddr_un; -} -package IO::Socket::IP { -sub SO_REUSEPORT() ; -sub dup2; -sub getaddrinfo; -sub getnameinfo; -sub sockaddr_family; -} -package IO::Socket::UNIX { -sub AF_802() ; -sub AF_AAL() ; -sub AF_CTF() ; -sub AF_GOSIP() ; -sub AF_KEY() ; -sub AF_LAST() ; -sub AF_LINK() ; -sub AF_NBS() ; -sub AF_NIT() ; -sub AF_OSINET() ; -sub AF_ROUTE() ; -sub AF_USER() ; -sub AF_WAN() ; -sub AF_X25() ; -sub IOV_MAX() ; -sub IP_RECVOPTS() ; -sub IP_RECVRETOPTS() ; -sub IP_RETOPTS() ; -sub MSG_BCAST() ; -sub MSG_BTAG() ; -sub MSG_CTLFLAGS() ; -sub MSG_CTLIGNORE() ; -sub MSG_CTRUNC() ; -sub MSG_DONTWAIT() ; -sub MSG_EOF() ; -sub MSG_EOR() ; -sub MSG_ERRQUEUE() ; -sub MSG_ETAG() ; -sub MSG_FASTOPEN() ; -sub MSG_FIN() ; -sub MSG_MCAST() ; -sub MSG_NOSIGNAL() ; -sub MSG_PROXY() ; -sub MSG_RST() ; -sub MSG_SYN() ; -sub MSG_TRUNC() ; -sub MSG_URG() ; -sub MSG_WIRE() ; -sub PF_802() ; -sub PF_AAL() ; -sub PF_CTF() ; -sub PF_GOSIP() ; -sub PF_KEY() ; -sub PF_LAST() ; -sub PF_LINK() ; -sub PF_NBS() ; -sub PF_NIT() ; -sub PF_OSINET() ; -sub PF_ROUTE() ; -sub PF_USER() ; -sub PF_WAN() ; -sub PF_X25() ; -sub SCM_CONNECT() ; -sub SCM_CREDENTIALS() ; -sub SCM_CREDS() ; -sub SCM_RIGHTS() ; -sub SCM_TIMESTAMP() ; -sub SO_ATTACH_FILTER() ; -sub SO_BACKLOG() ; -sub SO_CHAMELEON() ; -sub SO_DETACH_FILTER() ; -sub SO_DGRAM_ERRIND() ; -sub SO_DOMAIN() ; -sub SO_FAMILY() ; -sub SO_PASSCRED() ; -sub SO_PASSIFNAME() ; -sub SO_PEERCRED() ; -sub SO_PROTOCOL() ; -sub SO_PROTOTYPE() ; -sub SO_REUSEPORT() ; -sub SO_SECURITY_AUTHENTICATION() ; -sub SO_SECURITY_ENCRYPTION_NETWORK() ; -sub SO_SECURITY_ENCRYPTION_TRANSPORT() ; -sub SO_STATE() ; -sub SO_XOPEN() ; -sub SO_XSE() ; -sub UIO_MAXIOV() ; -sub inet_aton; -sub inet_ntoa; -sub pack_sockaddr_in6; -sub pack_sockaddr_in; -sub pack_sockaddr_un; -sub sockaddr_family; -sub unpack_sockaddr_in6; -sub unpack_sockaddr_in; -sub unpack_sockaddr_un; -} -package Imager { -sub DSO_call($$$) ; -sub DSO_close($) ; -sub DSO_funclist($) ; -sub DSO_open($) ; -sub O_ALIAS() ; -sub O_ASYNC() ; -sub O_DEFER() ; -sub O_DIRECT() ; -sub O_DIRECTORY() ; -sub O_DSYNC() ; -sub O_EXLOCK() ; -sub O_LARGEFILE() ; -sub O_NDELAY() ; -sub O_NOCTTY() ; -sub O_NOFOLLOW() ; -sub O_NONBLOCK() ; -sub O_RSRC() ; -sub O_RSYNC() ; -sub O_SHLOCK() ; -sub O_SYNC() ; -sub _is_color_object($) ; -sub i_add_file_magic($$$) ; -sub i_addcolors($;@) ; -sub i_arc($$$$$$$) ; -sub i_arc_aa($$$$$$$) ; -sub i_arc_aa_cfill($$$$$$$) ; -sub i_arc_cfill($$$$$$$) ; -sub i_arc_out($$$$$$$) ; -sub i_arc_out_aa($$$$$$$) ; -sub i_autolevels($$$$) ; -sub i_autolevels_mono($$$) ; -sub i_bezier_multi($$$$) ; -sub i_box($$$$$$) ; -sub i_box_cfill($$$$$$) ; -sub i_box_filled($$$$$$) ; -sub i_box_filledf($$$$$$) ; -sub i_bumpmap($$$$$$) ; -sub i_bumpmap_complex($$$$$$$$$$$$$$) ; -sub i_circle_aa($$$$$) ; -sub i_circle_aa_fill($$$$$) ; -sub i_circle_out($$$$$) ; -sub i_circle_out_aa($$$$$) ; -sub i_clear_error() ; -sub i_colorcount($) ; -sub i_combine($;$) ; -sub i_compose($$$$$$$$;$$) ; -sub i_compose_mask($$$$$$$$$$$;$$) ; -sub i_contrast($$) ; -sub i_conv($$) ; -sub i_convert($$) ; -sub i_copy($) ; -sub i_copyto($$$$$$$$) ; -sub i_copyto_trans($$$$$$$$$) ; -sub i_count_colors($$) ; -sub i_diff_image($$;$) ; -sub i_errors() ; -sub i_findcolor($$) ; -sub i_flipxy($$) ; -sub i_flood_cfill($$$$) ; -sub i_flood_cfill_border($$$$$) ; -sub i_flood_fill($$$$) ; -sub i_flood_fill_border($$$$$) ; -sub i_fountain($$$$$$$$$$$) ; -sub i_gaussian($$) ; -sub i_get_anonymous_color_histo($;$) ; -sub i_get_image_file_limits() ; -sub i_get_pixel($$$) ; -sub i_getcolors($$;$) ; -sub i_glin($$$$) ; -sub i_glinf($$$$) ; -sub i_gpal($$$$) ; -sub i_gpixf($$$) ; -sub i_gradgen($$$$$) ; -sub i_gsamp($$$$$) ; -sub i_gsamp_bits($$$$$$$$) ; -sub i_gsampf($$$$$) ; -sub i_haar($) ; -sub i_hardinvert($) ; -sub i_hardinvertall($) ; -sub i_img_16_new($$$) ; -sub i_img_8_new($$$) ; -sub i_img_alpha_channel($) ; -sub i_img_bits($) ; -sub i_img_color_channels($) ; -sub i_img_color_model($) ; -sub i_img_diff($$) ; -sub i_img_diffd($$) ; -sub i_img_double_new($$$) ; -sub i_img_epsilonf() ; -sub i_img_get_height($) ; -sub i_img_get_width($) ; -sub i_img_getchannels($) ; -sub i_img_getdata($) ; -sub i_img_getmask($) ; -sub i_img_info($) ; -sub i_img_is_monochrome($) ; -sub i_img_make_palette($;@) ; -sub i_img_masked_new($$$$$$) ; -sub i_img_pal_new($$$$) ; -sub i_img_samef($$;$$) ; -sub i_img_setmask($$) ; -sub i_img_to_drgb($) ; -sub i_img_to_pal($$) ; -sub i_img_to_rgb($) ; -sub i_img_to_rgb16($) ; -sub i_img_type($) ; -sub i_img_virtual($) ; -sub i_init_log($$) ; -sub i_int_check_image_file_limits; -sub i_line($$$$$$$) ; -sub i_line_aa($$$$$$$) ; -sub i_list_formats() ; -sub i_log_enabled() ; -sub i_log_entry($$) ; -sub i_map($$) ; -sub i_matrix_transform($$$$;@) ; -sub i_maxcolors($) ; -sub i_mosaic($$) ; -sub i_nearest_color($;@) ; -sub i_new_fill_fount($$$$$$$$$$) ; -sub i_new_fill_hatch($$$$$$$) ; -sub i_new_fill_hatchf($$$$$$$) ; -sub i_new_fill_image($$$$$) ; -sub i_new_fill_opacity($$) ; -sub i_new_fill_solid($$) ; -sub i_new_fill_solidf($$) ; -sub i_noise($$$) ; -sub i_plin($$$;@) ; -sub i_plinf($$$;@) ; -sub i_poly_aa_cfill_m($$$$$) ; -sub i_poly_aa_m($$$$$) ; -sub i_poly_poly_aa($$$$) ; -sub i_poly_poly_aa_cfill($$$$) ; -sub i_postlevels($$) ; -sub i_ppal($$$;@) ; -sub i_ppal_p($$$$) ; -sub i_ppix($$$$) ; -sub i_ppixf($$$$) ; -sub i_psamp($$$$$;$$) ; -sub i_psamp_bits($$$$$$;$$) ; -sub i_psampf($$$$$;$$) ; -sub i_push_error($$) ; -sub i_radnoise($$$$$) ; -sub i_readbmp_wiol($;$) ; -sub i_readpnm_multi_wiol($$) ; -sub i_readpnm_wiol($$) ; -sub i_readraw_wiol($$$$$$) ; -sub i_readtga_wiol($$) ; -sub i_rotate90($$) ; -sub i_rotate_exact($$;@) ; -sub i_rubthru($$$$$$$$) ; -sub i_sametype($$$) ; -sub i_sametype_chans($$$$) ; -sub i_scale_mixing($$$) ; -sub i_scale_nn($$$) ; -sub i_scaleaxis($$$) ; -sub i_set_image_file_limits($$$) ; -sub i_setcolors($$;@) ; -sub i_tags_add($$$$$) ; -sub i_tags_addn($$$$) ; -sub i_tags_count($) ; -sub i_tags_delbycode($$) ; -sub i_tags_delbyname($$) ; -sub i_tags_delete($$) ; -sub i_tags_find($$$) ; -sub i_tags_findn($$$) ; -sub i_tags_get($$) ; -sub i_tags_get_string($$) ; -sub i_test_format_probe($$) ; -sub i_transform($$$$) ; -sub i_transform2($$$$$$$) ; -sub i_turbnoise($$$$) ; -sub i_unsharp_mask($$$) ; -sub i_watermark($$$$$) ; -sub i_writebmp_wiol($$) ; -sub i_writeppm_wiol($$) ; -sub i_writeraw_wiol($$) ; -sub i_writetga_wiol($$$$$) ; -sub io_new_bufchain() ; -sub io_new_buffer($) ; -sub io_new_cb($$$$;$) ; -sub io_new_fd($) ; -sub io_slurp($) ; -sub malloc_state() ; -} -package Imager::Color { -sub DESTROY; -sub i_hsv_to_rgb; -sub i_rgb_to_hsv; -sub info; -sub new_internal; -sub rgba; -sub set_internal; -} -package Imager::Color::Float { -sub DESTROY; -sub i_hsv_to_rgb; -sub i_rgb_to_hsv; -sub new_internal; -sub rgba; -sub set_internal; -} -package Imager::Context { -sub CLONE(;@) ; -sub DESTROY($) ; -} -package Imager::CountColor { -sub count_color($$) ; -} -package Imager::File::GIF { -sub i_giflib_version; -sub i_readgif_multi_wiol; -sub i_readgif_single_wiol; -sub i_readgif_wiol; -sub i_writegif_wiol; -} -package Imager::File::ICO { -sub i_readico_multi; -sub i_readico_single; -sub i_writecur_multi_wiol; -sub i_writecur_wiol; -sub i_writeico_multi_wiol; -sub i_writeico_wiol; -} -package Imager::File::JPEG { -sub i_libjpeg_version; -sub i_readjpeg_wiol; -sub i_writejpeg_wiol; -} -package Imager::File::PNG { -sub IMPNG_READ_IGNORE_BENIGN_ERRORS; -sub features; -sub i_png_lib_version; -sub i_readpng_wiol; -sub i_writepng_wiol; -} -package Imager::File::SGI { -sub i_readsgi_wiol; -sub i_writesgi_wiol; -} -package Imager::File::TIFF { -sub i_readtiff_multi_wiol; -sub i_readtiff_wiol; -sub i_tiff_has_compression; -sub i_tiff_ieeefp; -sub i_tiff_libversion; -sub i_writetiff_multi_wiol; -sub i_writetiff_multi_wiol_faxable; -sub i_writetiff_wiol; -sub i_writetiff_wiol_faxable; -} -package Imager::FillHandle { -sub CLONE_SKIP(;@) ; -sub DESTROY($) ; -} -package Imager::Filter::DynTest { -sub lin_stretch($$$) ; -} -package Imager::Filter::Flines { -sub flines($) ; -} -package Imager::Filter::Mandelbrot { -sub mandelbrot($;$$$$$) ; -} -package Imager::Font::FT2 { -sub ft2_transform_box; -sub i_ft2_bbox; -sub i_ft2_bbox_r; -sub i_ft2_can_do_glyph_names; -sub i_ft2_can_face_name; -sub i_ft2_cp; -sub i_ft2_face_has_glyph_names; -sub i_ft2_face_name; -sub i_ft2_get_multiple_masters; -sub i_ft2_getdpi; -sub i_ft2_glyph_name; -sub i_ft2_has_chars; -sub i_ft2_is_multiple_master; -sub i_ft2_new; -sub i_ft2_set_mm_coords; -sub i_ft2_setdpi; -sub i_ft2_sethinting; -sub i_ft2_settransform; -sub i_ft2_text; -sub i_ft2_version; -} -package Imager::Font::FT2x { -sub CLONE_SKIP; -sub DESTROY; -} -package Imager::Font::T1 { -sub i_init_t1; -} -package Imager::Font::T1xs { -sub CLONE_SKIP; -sub DESTROY; -sub bbox; -sub cp; -sub face_name; -sub glyph_names; -sub has_chars; -sub new; -sub text; -} -package Imager::Font::W32 { -sub i_wf_addfont; -sub i_wf_bbox; -sub i_wf_cp; -sub i_wf_delfont; -sub i_wf_text; -} -package Imager::IO { -sub CLONE_SKIP(;@) ; -sub DESTROY($) ; -sub _new_perlio($$) ; -sub close($) ; -sub dump($;$) ; -sub eof($) ; -sub error($) ; -sub flush($) ; -sub getc($) ; -sub gets($;$$) ; -sub is_buffered($) ; -sub new_bufchain($) ; -sub new_buffer($$) ; -sub new_cb($$$$$) ; -sub new_fd($$) ; -sub nextc($) ; -sub peekc($) ; -sub peekn($$) ; -sub putc($$) ; -sub raw_close($) ; -sub raw_read($$$) ; -sub raw_read2($$) ; -sub raw_seek($$$) ; -sub raw_write($$) ; -sub read($$$) ; -sub read2($$) ; -sub seek($$$) ; -sub set_buffered($;$) ; -sub slurp($$) ; -sub write($$) ; -} -package Imager::ImgRaw { -sub DESTROY; -sub new; -} -package Imager::Internal::Hlines { -sub CLONE_SKIP($) ; -sub DESTROY($) ; -sub add($$$$) ; -sub dump($) ; -sub new($$$$) ; -sub new_img($) ; -sub testing() ; -} -package Internals { -sub SvREADONLY(\[$%@];$) ; -sub SvREFCNT(\[$%@];$) ; -sub V; -sub getcwd() ; -sub hv_clear_placeholders(\%) ; -} -package JSON::XS { -sub CLONE; -sub DESTROY; -sub allow_blessed; -sub allow_nonref; -sub allow_tags; -sub allow_unknown; -sub ascii; -sub boolean_values; -sub canonical; -sub convert_blessed; -sub decode; -sub decode_json($) ; -sub decode_prefix; -sub encode; -sub encode_json($) ; -sub filter_json_object; -sub filter_json_single_key_object; -sub get_allow_blessed; -sub get_allow_nonref; -sub get_allow_tags; -sub get_allow_unknown; -sub get_ascii; -sub get_boolean_values; -sub get_canonical; -sub get_convert_blessed; -sub get_indent; -sub get_latin1; -sub get_max_depth; -sub get_max_size; -sub get_relaxed; -sub get_shrink; -sub get_space_after; -sub get_space_before; -sub get_utf8; -sub incr_parse; -sub incr_reset; -sub incr_skip; -sub indent; -sub latin1; -sub max_depth; -sub max_size; -sub new; -sub pretty; -sub relaxed; -sub shrink; -sub space_after; -sub space_before; -sub utf8; -} -package List::MoreUtils { -sub _XScompiled; -sub after(&@) ; -sub after_incl(&@) ; -sub all(&@) ; -sub all_u(&@) ; -sub any(&@) ; -sub any_u(&@) ; -sub apply(&@) ; -sub arrayify; -sub before(&@) ; -sub before_incl(&@) ; -sub binsert(&$\@) ; -sub bremove(&\@) ; -sub bsearch(&@) ; -sub bsearch_index(&@) ; -sub bsearch_insert(&$\@) ; -sub bsearch_remove(&\@) ; -sub bsearchidx(&@) ; -sub distinct(@) ; -sub duplicates(@) ; -sub each_array(\@;\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@) ; -sub each_arrayref; -sub equal_range(&@) ; -sub false(&@) ; -sub first_index(&@) ; -sub first_result(&@) ; -sub first_value(&@) ; -sub firstidx(&@) ; -sub firstres(&@) ; -sub firstval(&@) ; -sub frequency(@) ; -sub indexes(&@) ; -sub insert_after(&$\@) ; -sub insert_after_string($$\@) ; -sub last_index(&@) ; -sub last_result(&@) ; -sub last_value(&@) ; -sub lastidx(&@) ; -sub lastres(&@) ; -sub lastval(&@) ; -sub listcmp(\@\@;\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@) ; -sub lower_bound(&@) ; -sub mesh(\@\@;\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@) ; -sub minmax(@) ; -sub minmaxstr(@) ; -sub mode(@) ; -sub natatime($@) ; -sub none(&@) ; -sub none_u(&@) ; -sub notall(&@) ; -sub notall_u(&@) ; -sub occurrences(@) ; -sub one(&@) ; -sub one_u(&@) ; -sub only_index(&@) ; -sub only_result(&@) ; -sub only_value(&@) ; -sub onlyidx(&@) ; -sub onlyres(&@) ; -sub onlyval(&@) ; -sub pairwise(&\@\@) ; -sub part(&@) ; -sub qsort(&\@) ; -sub reduce_0(&@) ; -sub reduce_1(&@) ; -sub reduce_u(&@) ; -sub samples($@) ; -sub singleton(@) ; -sub true(&@) ; -sub uniq(@) ; -sub upper_bound(&@) ; -sub zip(\@\@;\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@) ; -sub zip6(\@\@;\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@) ; -sub zip_unflatten(\@\@;\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@) ; -} -package List::MoreUtils::XS { -sub _XScompiled; -sub _array_iterator(;$) ; -sub _natatime_iterator() ; -sub after(&@) ; -sub after_incl(&@) ; -sub all(&@) ; -sub all_u(&@) ; -sub any(&@) ; -sub any_u(&@) ; -sub apply(&@) ; -sub arrayify; -sub before(&@) ; -sub before_incl(&@) ; -sub binsert(&$\@) ; -sub bremove(&\@) ; -sub bsearch(&@) ; -sub bsearchidx(&@) ; -sub duplicates(@) ; -sub each_array(\@;\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@) ; -sub each_arrayref; -sub equal_range(&@) ; -sub false(&@) ; -sub firstidx(&@) ; -sub firstres(&@) ; -sub firstval(&@) ; -sub frequency(@) ; -sub indexes(&@) ; -sub insert_after(&$\@) ; -sub insert_after_string($$\@) ; -sub lastidx(&@) ; -sub lastres(&@) ; -sub lastval(&@) ; -sub listcmp(\@\@;\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@) ; -sub lower_bound(&@) ; -sub mesh(\@\@;\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@) ; -sub minmax(@) ; -sub minmaxstr(@) ; -sub mode(@) ; -sub natatime($@) ; -sub none(&@) ; -sub none_u(&@) ; -sub notall(&@) ; -sub notall_u(&@) ; -sub occurrences(@) ; -sub one(&@) ; -sub one_u(&@) ; -sub onlyidx(&@) ; -sub onlyres(&@) ; -sub onlyval(&@) ; -sub pairwise(&\@\@) ; -sub part(&@) ; -sub qsort(&\@) ; -sub reduce_0(&@) ; -sub reduce_1(&@) ; -sub reduce_u(&@) ; -sub samples($@) ; -sub singleton(@) ; -sub true(&@) ; -sub uniq(@) ; -sub upper_bound(&@) ; -sub zip6(\@\@;\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@) ; -} -package List::MoreUtils::XS_ea { -sub DESTROY; -} -package List::MoreUtils::XS_na { -sub DESTROY; -} -package List::Util { -sub all(&@) ; -sub any(&@) ; -sub first(&@) ; -sub head($@) ; -sub max(@) ; -sub maxstr(@) ; -sub min(@) ; -sub minstr(@) ; -sub none(&@) ; -sub notall(&@) ; -sub pairfirst(&@) ; -sub pairgrep(&@) ; -sub pairkeys(@) ; -sub pairmap(&@) ; -sub pairs(@) ; -sub pairvalues(@) ; -sub product(@) ; -sub reduce(&@) ; -sub shuffle(@) ; -sub sum(@) ; -sub sum0(@) ; -sub tail($@) ; -sub uniq(@) ; -sub uniqnum(@) ; -sub uniqstr(@) ; -sub unpairs(@) ; -} -package Lzma::Filter { -sub DESTROY; -sub id; -} -package Lzma::Filter::BCJ { -sub _mk; -} -package Lzma::Filter::Delta { -sub _mk; -} -package Lzma::Filter::Lzma { -sub _mk; -sub _mkPreset; -} -package MIME::Base64 { -sub decode($) ; -sub decode_base64($) ; -sub decoded_base64_length($) ; -sub encode($;$) ; -sub encode_base64($;$) ; -sub encoded_base64_length($;$) ; -} -package MIME::Charset { -sub is_utf8($;$) ; -} -package MIME::QuotedPrint { -sub decode_qp($) ; -sub encode_qp($;$$) ; -} -package Math::BigInt::FastCalc { -sub __strip_zeros; -sub _acmp; -sub _copy; -sub _dec; -sub _inc; -sub _is_even; -sub _is_odd; -sub _is_one; -sub _is_ten; -sub _is_two; -sub _is_zero; -sub _len; -sub _new; -sub _one; -sub _ten; -sub _two; -sub _zero; -} -package Math::BigInt::GMP { -sub DESTROY($) ; -sub _1ex($$) ; -sub _acmp($$$) ; -sub _add($$$) ; -sub _alen($$) ; -sub _and($$$) ; -sub _as_bin($$) ; -sub _as_hex($$) ; -sub _as_oct($$) ; -sub _copy($$) ; -sub _dec($$) ; -sub _div($$$) ; -sub _fac($$) ; -sub _from_bin($$) ; -sub _from_hex($$) ; -sub _from_oct($$) ; -sub _gcd($$$) ; -sub _inc($$) ; -sub _is_even($$) ; -sub _is_odd($$) ; -sub _is_one($$) ; -sub _is_ten($$) ; -sub _is_two($$) ; -sub _is_zero($$) ; -sub _len($$) ; -sub _lsft($$$$) ; -sub _mod($$$) ; -sub _modinv($$$) ; -sub _modpow($$$$) ; -sub _mul($$$) ; -sub _new($$) ; -sub _new_attach($$$) ; -sub _one($) ; -sub _or($$$) ; -sub _pow($$$) ; -sub _root($$$) ; -sub _rsft($$$$) ; -sub _set($$$) ; -sub _sqrt($$) ; -sub _str($$) ; -sub _sub($$$;@) ; -sub _ten($) ; -sub _two($) ; -sub _xor($$$) ; -sub _zero($) ; -sub _zeros($$) ; -} -package Math::BigInt::LTM { -sub DESTROY; -sub STORABLE_freeze; -sub STORABLE_thaw; -sub _1ex; -sub _acmp; -sub _add; -sub _alen; -sub _and; -sub _as_bytes; -sub _copy; -sub _dec; -sub _div; -sub _from_base; -sub _from_bin; -sub _from_bytes; -sub _from_hex; -sub _from_oct; -sub _gcd; -sub _inc; -sub _is_even; -sub _is_odd; -sub _is_one; -sub _is_ten; -sub _is_two; -sub _is_zero; -sub _lcm; -sub _len; -sub _lsft; -sub _mod; -sub _modinv; -sub _modpow; -sub _mul; -sub _new; -sub _one; -sub _or; -sub _pow; -sub _root; -sub _rsft; -sub _set; -sub _sqrt; -sub _str; -sub _sub; -sub _ten; -sub _to_base; -sub _to_bin; -sub _to_bytes; -sub _to_hex; -sub _to_oct; -sub _two; -sub _xor; -sub _zero; -sub _zeros; -} -package Math::GMP { -sub DESTROY($) ; -sub _gmp_build_version() ; -sub _gmp_lib_version() ; -sub add_ui_gmp($$) ; -sub band($$;@) ; -sub bdiv($$) ; -sub bfac($) ; -sub bgcd($$) ; -sub bior($$;@) ; -sub blcm($$) ; -sub blshift($$$) ; -sub bmodinv($$) ; -sub broot($$) ; -sub brootrem($$) ; -sub brshift($$$) ; -sub bsqrt($) ; -sub bsqrtrem($) ; -sub bxor($$;@) ; -sub destroy($) ; -sub div_2exp_gmp($$) ; -sub fibonacci($) ; -sub gcd($$) ; -sub get_str_gmp($$) ; -sub gmp_copy($) ; -sub gmp_tstbit($$) ; -sub intify($) ; -sub is_perfect_power($) ; -sub is_perfect_square($) ; -sub jacobi($$) ; -sub lcm($$) ; -sub legendre($$) ; -sub mmod_gmp($$) ; -sub mod_2exp_gmp($$) ; -sub mul_2exp_gmp($$) ; -sub new_from_scalar($) ; -sub new_from_scalar_with_base($$) ; -sub op_add($$$) ; -sub op_div($$$) ; -sub op_eq($$$) ; -sub op_mod($$$) ; -sub op_mul($$$) ; -sub op_pow($$) ; -sub op_spaceship($$$) ; -sub op_sub($$$) ; -sub powm_gmp($$$) ; -sub probab_prime($$) ; -sub sizeinbase_gmp($$) ; -sub stringify($) ; -sub uintify($) ; -} -package Math::Int64 { -sub BER_length; -sub BER_to_int64; -sub BER_to_uint64; -sub STORABLE_freeze; -sub STORABLE_thaw; -sub _add; -sub _and; -sub _backend; -sub _bnot; -sub _bool; -sub _clone; -sub _dec; -sub _div; -sub _eqn; -sub _gen; -sub _gtn; -sub _inc; -sub _left; -sub _len; -sub _ltn; -sub _mul; -sub _neg; -sub _nen; -sub _not; -sub _number; -sub _or; -sub _pow; -sub _rest; -sub _right; -sub _set_may_die_on_overflow; -sub _set_may_use_native; -sub _spaceship; -sub _string; -sub _sub; -sub _xor; -sub hex_to_int64; -sub hex_to_uint64; -sub int64; -sub int64_rand; -sub int64_srand; -sub int64_to_BER; -sub int64_to_hex; -sub int64_to_native; -sub int64_to_net; -sub int64_to_number; -sub int64_to_string; -sub native_to_int64; -sub native_to_uint64; -sub net_to_int64; -sub net_to_uint64; -sub string_to_int64; -sub string_to_uint64; -sub uint64; -sub uint64_rand; -sub uint64_to_BER; -sub uint64_to_hex; -sub uint64_to_native; -sub uint64_to_net; -sub uint64_to_number; -sub uint64_to_string; -} -package Math::MPC { -sub CLONE; -sub DESTROY; -sub NOK_POK_val; -sub RMPC_IM; -sub RMPC_INEX_IM; -sub RMPC_INEX_RE; -sub RMPC_RE; -sub Rmpc_abs; -sub Rmpc_acos; -sub Rmpc_acosh; -sub Rmpc_add; -sub Rmpc_add_fr; -sub Rmpc_add_ui; -sub Rmpc_arg; -sub Rmpc_asin; -sub Rmpc_asinh; -sub Rmpc_atan; -sub Rmpc_atanh; -sub Rmpc_clear; -sub Rmpc_clear_mpc; -sub Rmpc_clear_ptr; -sub Rmpc_cmp; -sub Rmpc_cmp_abs; -sub Rmpc_cmp_si; -sub Rmpc_cmp_si_si; -sub Rmpc_conj; -sub Rmpc_cos; -sub Rmpc_cosh; -sub Rmpc_d_div; -sub Rmpc_div; -sub Rmpc_div_2exp; -sub Rmpc_div_2si; -sub Rmpc_div_2ui; -sub Rmpc_div_d; -sub Rmpc_div_fr; -sub Rmpc_div_ld; -sub Rmpc_div_sj; -sub Rmpc_div_ui; -sub Rmpc_exp; -sub Rmpc_get_DC; -sub Rmpc_get_LDC; -sub Rmpc_get_dc; -sub Rmpc_get_default_prec2; -sub Rmpc_get_default_prec; -sub Rmpc_get_default_rounding_mode; -sub Rmpc_get_im_prec; -sub Rmpc_get_ldc; -sub Rmpc_get_prec2; -sub Rmpc_get_prec; -sub Rmpc_get_re_prec; -sub Rmpc_get_str; -sub Rmpc_get_version; -sub Rmpc_imag; -sub Rmpc_init2; -sub Rmpc_init2_nobless; -sub Rmpc_init3; -sub Rmpc_init3_nobless; -sub Rmpc_inp_str; -sub Rmpc_ld_div; -sub Rmpc_log10; -sub Rmpc_log; -sub Rmpc_mul; -sub Rmpc_mul_2exp; -sub Rmpc_mul_2si; -sub Rmpc_mul_2ui; -sub Rmpc_mul_d; -sub Rmpc_mul_fr; -sub Rmpc_mul_i; -sub Rmpc_mul_ld; -sub Rmpc_mul_si; -sub Rmpc_mul_sj; -sub Rmpc_mul_ui; -sub Rmpc_neg; -sub Rmpc_norm; -sub Rmpc_pow; -sub Rmpc_pow_d; -sub Rmpc_pow_fr; -sub Rmpc_pow_ld; -sub Rmpc_pow_si; -sub Rmpc_pow_ui; -sub Rmpc_pow_z; -sub Rmpc_proj; -sub Rmpc_real; -sub Rmpc_rootofunity; -sub Rmpc_set; -sub Rmpc_set_DC; -sub Rmpc_set_LDC; -sub Rmpc_set_NV; -sub Rmpc_set_NV_NV; -sub Rmpc_set_d; -sub Rmpc_set_d_d; -sub Rmpc_set_d_f; -sub Rmpc_set_d_fr; -sub Rmpc_set_d_ld; -sub Rmpc_set_d_q; -sub Rmpc_set_d_si; -sub Rmpc_set_d_sj; -sub Rmpc_set_d_ui; -sub Rmpc_set_d_uj; -sub Rmpc_set_d_z; -sub Rmpc_set_dc; -sub Rmpc_set_default_prec2; -sub Rmpc_set_default_prec; -sub Rmpc_set_default_rounding_mode; -sub Rmpc_set_f; -sub Rmpc_set_f_d; -sub Rmpc_set_f_f; -sub Rmpc_set_f_fr; -sub Rmpc_set_f_ld; -sub Rmpc_set_f_q; -sub Rmpc_set_f_si; -sub Rmpc_set_f_sj; -sub Rmpc_set_f_ui; -sub Rmpc_set_f_uj; -sub Rmpc_set_f_z; -sub Rmpc_set_fr; -sub Rmpc_set_fr_d; -sub Rmpc_set_fr_f; -sub Rmpc_set_fr_fr; -sub Rmpc_set_fr_ld; -sub Rmpc_set_fr_q; -sub Rmpc_set_fr_si; -sub Rmpc_set_fr_sj; -sub Rmpc_set_fr_ui; -sub Rmpc_set_fr_uj; -sub Rmpc_set_fr_z; -sub Rmpc_set_im_prec; -sub Rmpc_set_ld; -sub Rmpc_set_ld_d; -sub Rmpc_set_ld_f; -sub Rmpc_set_ld_fr; -sub Rmpc_set_ld_ld; -sub Rmpc_set_ld_q; -sub Rmpc_set_ld_si; -sub Rmpc_set_ld_sj; -sub Rmpc_set_ld_ui; -sub Rmpc_set_ld_uj; -sub Rmpc_set_ld_z; -sub Rmpc_set_ldc; -sub Rmpc_set_nan; -sub Rmpc_set_prec; -sub Rmpc_set_q; -sub Rmpc_set_q_d; -sub Rmpc_set_q_f; -sub Rmpc_set_q_fr; -sub Rmpc_set_q_ld; -sub Rmpc_set_q_q; -sub Rmpc_set_q_si; -sub Rmpc_set_q_sj; -sub Rmpc_set_q_ui; -sub Rmpc_set_q_uj; -sub Rmpc_set_q_z; -sub Rmpc_set_re_prec; -sub Rmpc_set_si; -sub Rmpc_set_si_d; -sub Rmpc_set_si_f; -sub Rmpc_set_si_fr; -sub Rmpc_set_si_ld; -sub Rmpc_set_si_q; -sub Rmpc_set_si_si; -sub Rmpc_set_si_sj; -sub Rmpc_set_si_ui; -sub Rmpc_set_si_uj; -sub Rmpc_set_si_z; -sub Rmpc_set_sj; -sub Rmpc_set_sj_d; -sub Rmpc_set_sj_f; -sub Rmpc_set_sj_fr; -sub Rmpc_set_sj_ld; -sub Rmpc_set_sj_q; -sub Rmpc_set_sj_si; -sub Rmpc_set_sj_sj; -sub Rmpc_set_sj_ui; -sub Rmpc_set_sj_uj; -sub Rmpc_set_sj_z; -sub Rmpc_set_str; -sub Rmpc_set_ui; -sub Rmpc_set_ui_d; -sub Rmpc_set_ui_f; -sub Rmpc_set_ui_fr; -sub Rmpc_set_ui_ld; -sub Rmpc_set_ui_q; -sub Rmpc_set_ui_si; -sub Rmpc_set_ui_sj; -sub Rmpc_set_ui_ui; -sub Rmpc_set_ui_uj; -sub Rmpc_set_ui_z; -sub Rmpc_set_uj; -sub Rmpc_set_uj_d; -sub Rmpc_set_uj_f; -sub Rmpc_set_uj_fr; -sub Rmpc_set_uj_ld; -sub Rmpc_set_uj_q; -sub Rmpc_set_uj_si; -sub Rmpc_set_uj_sj; -sub Rmpc_set_uj_ui; -sub Rmpc_set_uj_uj; -sub Rmpc_set_uj_z; -sub Rmpc_set_z; -sub Rmpc_set_z_d; -sub Rmpc_set_z_f; -sub Rmpc_set_z_fr; -sub Rmpc_set_z_ld; -sub Rmpc_set_z_q; -sub Rmpc_set_z_si; -sub Rmpc_set_z_sj; -sub Rmpc_set_z_ui; -sub Rmpc_set_z_uj; -sub Rmpc_set_z_z; -sub Rmpc_sin; -sub Rmpc_sin_cos; -sub Rmpc_sinh; -sub Rmpc_sj_div; -sub Rmpc_sqr; -sub Rmpc_sqrt; -sub Rmpc_strtoc; -sub Rmpc_sub; -sub Rmpc_sub_ui; -sub Rmpc_swap; -sub Rmpc_tan; -sub Rmpc_tanh; -sub Rmpc_ui_div; -sub Rmpc_ui_sub; -sub Rmpc_ui_ui_sub; -sub TRmpc_inp_str; -sub _MPC_VERSION; -sub _MPC_VERSION_MAJOR; -sub _MPC_VERSION_MINOR; -sub _MPC_VERSION_NUM; -sub _MPC_VERSION_PATCHLEVEL; -sub _MPC_VERSION_STRING; -sub _Rmpc_out_str; -sub _Rmpc_out_strP; -sub _Rmpc_out_strPS; -sub _Rmpc_out_strS; -sub _SvNOK; -sub _SvPOK; -sub _can_pass_float128; -sub _get_i_string; -sub _get_nv_precision; -sub _get_r_string; -sub _get_xs_version; -sub _has_inttypes; -sub _has_longdouble; -sub _has_longlong; -sub _have_Complex_h; -sub _itsa; -sub _mpfr_buildopt_tls_p; -sub _mpfr_set_NV; -sub _new_real_im; -sub _win32_infnanstring; -sub _wrap_count; -sub clear_nok_pok; -sub gmp_v; -sub mpfr_v; -sub nok_pokflag; -sub overload_abs; -sub overload_add; -sub overload_add_eq; -sub overload_atan2; -sub overload_copy; -sub overload_cos; -sub overload_div; -sub overload_div_eq; -sub overload_equiv; -sub overload_exp; -sub overload_log; -sub overload_mul; -sub overload_mul_eq; -sub overload_not; -sub overload_pow; -sub overload_pow_eq; -sub overload_sin; -sub overload_sqrt; -sub overload_sub; -sub overload_sub_eq; -sub overload_true; -sub set_nok_pok; -} -package Math::MPFR { -sub ARG_MAX() ; -sub B0() ; -sub B110() ; -sub B1200() ; -sub B134() ; -sub B150() ; -sub B1800() ; -sub B19200() ; -sub B200() ; -sub B2400() ; -sub B300() ; -sub B38400() ; -sub B4800() ; -sub B50() ; -sub B600() ; -sub B75() ; -sub B9600() ; -sub BRKINT() ; -sub CHILD_MAX() ; -sub CLOCAL() ; -sub CREAD() ; -sub CS5() ; -sub CS6() ; -sub CS7() ; -sub CS8() ; -sub CSIZE() ; -sub CSTOPB() ; -sub DESTROY; -sub ECHO() ; -sub ECHOE() ; -sub ECHOK() ; -sub ECHONL() ; -sub EHOSTDOWN() ; -sub ENOTBLK() ; -sub EOTHER() ; -sub ERESTART() ; -sub FD_CLOEXEC() ; -sub F_DUPFD() ; -sub F_GETFD() ; -sub F_GETFL() ; -sub F_GETLK() ; -sub F_RDLCK() ; -sub F_SETFD() ; -sub F_SETFL() ; -sub F_SETLK() ; -sub F_SETLKW() ; -sub F_UNLCK() ; -sub F_WRLCK() ; -sub HUPCL() ; -sub ICANON() ; -sub ICRNL() ; -sub IEXTEN() ; -sub IGNBRK() ; -sub IGNCR() ; -sub IGNPAR() ; -sub INLCR() ; -sub INPCK() ; -sub ISIG() ; -sub ISTRIP() ; -sub IXOFF() ; -sub IXON() ; -sub LC_ADDRESS() ; -sub LC_IDENTIFICATION() ; -sub LC_MEASUREMENT() ; -sub LC_MESSAGES() ; -sub LC_PAPER() ; -sub LC_TELEPHONE() ; -sub LDBL_EPSILON() ; -sub LDBL_MAX() ; -sub LDBL_MIN() ; -sub LINK_MAX() ; -sub L_ctermid() ; -sub L_cuserid() ; -sub MAX_CANON() ; -sub MAX_INPUT() ; -sub NAME_MAX() ; -sub NCCS() ; -sub NDEBUG; -sub NGROUPS_MAX() ; -sub NNW_val; -sub NOFLSH() ; -sub NOK_POK_val; -sub OPEN_MAX() ; -sub OPOST() ; -sub O_NOCTTY() ; -sub O_NONBLOCK() ; -sub PARENB() ; -sub PARMRK() ; -sub PARODD() ; -sub PIPE_BUF() ; -sub RMPFR_PREC_MAX() ; -sub RMPFR_PREC_MIN() ; -sub RMPFR_VERSION_NUM; -sub Rmpfr_abs; -sub Rmpfr_acos; -sub Rmpfr_acosh; -sub Rmpfr_add; -sub Rmpfr_add_d; -sub Rmpfr_add_q; -sub Rmpfr_add_si; -sub Rmpfr_add_ui; -sub Rmpfr_add_z; -sub Rmpfr_agm; -sub Rmpfr_ai; -sub Rmpfr_asin; -sub Rmpfr_asinh; -sub Rmpfr_atan2; -sub Rmpfr_atan; -sub Rmpfr_atanh; -sub Rmpfr_beta; -sub Rmpfr_buildopt_decimal_p; -sub Rmpfr_buildopt_float128_p; -sub Rmpfr_buildopt_gmpinternals_p; -sub Rmpfr_buildopt_sharedcache_p; -sub Rmpfr_buildopt_tls_p; -sub Rmpfr_buildopt_tune_case; -sub Rmpfr_can_round; -sub Rmpfr_cbrt; -sub Rmpfr_ceil; -sub Rmpfr_check_range; -sub Rmpfr_clear; -sub Rmpfr_clear_divby0; -sub Rmpfr_clear_erangeflag; -sub Rmpfr_clear_flags; -sub Rmpfr_clear_inexflag; -sub Rmpfr_clear_mpfr; -sub Rmpfr_clear_nanflag; -sub Rmpfr_clear_overflow; -sub Rmpfr_clear_ptr; -sub Rmpfr_clear_underflow; -sub Rmpfr_clears; -sub Rmpfr_cmp; -sub Rmpfr_cmp_NV; -sub Rmpfr_cmp_d; -sub Rmpfr_cmp_f; -sub Rmpfr_cmp_ld; -sub Rmpfr_cmp_q; -sub Rmpfr_cmp_si; -sub Rmpfr_cmp_si_2exp; -sub Rmpfr_cmp_ui; -sub Rmpfr_cmp_ui_2exp; -sub Rmpfr_cmp_z; -sub Rmpfr_cmpabs; -sub Rmpfr_const_catalan; -sub Rmpfr_const_euler; -sub Rmpfr_const_log2; -sub Rmpfr_const_pi; -sub Rmpfr_copysign; -sub Rmpfr_cos; -sub Rmpfr_cosh; -sub Rmpfr_cot; -sub Rmpfr_coth; -sub Rmpfr_csc; -sub Rmpfr_csch; -sub Rmpfr_d_div; -sub Rmpfr_d_sub; -sub Rmpfr_deref2; -sub Rmpfr_digamma; -sub Rmpfr_dim; -sub Rmpfr_div; -sub Rmpfr_div_2exp; -sub Rmpfr_div_2si; -sub Rmpfr_div_2ui; -sub Rmpfr_div_d; -sub Rmpfr_div_q; -sub Rmpfr_div_si; -sub Rmpfr_div_ui; -sub Rmpfr_div_z; -sub Rmpfr_divby0_p; -sub Rmpfr_dot; -sub Rmpfr_dump; -sub Rmpfr_eint; -sub Rmpfr_eq; -sub Rmpfr_equal_p; -sub Rmpfr_erandom; -sub Rmpfr_erangeflag_p; -sub Rmpfr_erf; -sub Rmpfr_erfc; -sub Rmpfr_exp10; -sub Rmpfr_exp2; -sub Rmpfr_exp; -sub Rmpfr_expm1; -sub Rmpfr_fac_ui; -sub Rmpfr_fits_IV_p; -sub Rmpfr_fits_UV_p; -sub Rmpfr_fits_intmax_p; -sub Rmpfr_fits_sint_p; -sub Rmpfr_fits_slong_p; -sub Rmpfr_fits_sshort_p; -sub Rmpfr_fits_uint_p; -sub Rmpfr_fits_uintmax_p; -sub Rmpfr_fits_ulong_p; -sub Rmpfr_fits_ushort_p; -sub Rmpfr_flags_clear; -sub Rmpfr_flags_restore; -sub Rmpfr_flags_save; -sub Rmpfr_flags_set; -sub Rmpfr_flags_test; -sub Rmpfr_floor; -sub Rmpfr_fma; -sub Rmpfr_fmma; -sub Rmpfr_fmms; -sub Rmpfr_fmod; -sub Rmpfr_fmodquo; -sub Rmpfr_fms; -sub Rmpfr_fpif_export; -sub Rmpfr_fpif_import; -sub Rmpfr_frac; -sub Rmpfr_free_cache2; -sub Rmpfr_free_cache; -sub Rmpfr_free_pool; -sub Rmpfr_frexp; -sub Rmpfr_gamma; -sub Rmpfr_gamma_inc; -sub Rmpfr_get_DECIMAL128; -sub Rmpfr_get_DECIMAL64; -sub Rmpfr_get_FLOAT128; -sub Rmpfr_get_IV; -sub Rmpfr_get_LD; -sub Rmpfr_get_NV; -sub Rmpfr_get_UV; -sub Rmpfr_get_d1; -sub Rmpfr_get_d; -sub Rmpfr_get_d_2exp; -sub Rmpfr_get_default_prec; -sub Rmpfr_get_default_rounding_mode; -sub Rmpfr_get_emax; -sub Rmpfr_get_emax_max; -sub Rmpfr_get_emax_min; -sub Rmpfr_get_emin; -sub Rmpfr_get_emin_max; -sub Rmpfr_get_emin_min; -sub Rmpfr_get_exp; -sub Rmpfr_get_f; -sub Rmpfr_get_float128; -sub Rmpfr_get_flt; -sub Rmpfr_get_ld; -sub Rmpfr_get_ld_2exp; -sub Rmpfr_get_patches; -sub Rmpfr_get_prec; -sub Rmpfr_get_q; -sub Rmpfr_get_si; -sub Rmpfr_get_sj; -sub Rmpfr_get_str_ndigits; -sub Rmpfr_get_ui; -sub Rmpfr_get_uj; -sub Rmpfr_get_version; -sub Rmpfr_get_z; -sub Rmpfr_get_z_2exp; -sub Rmpfr_get_z_exp; -sub Rmpfr_grandom; -sub Rmpfr_greater_p; -sub Rmpfr_greaterequal_p; -sub Rmpfr_hypot; -sub Rmpfr_inexflag_p; -sub Rmpfr_inf_p; -sub Rmpfr_init2; -sub Rmpfr_init2_nobless; -sub Rmpfr_init; -sub Rmpfr_init_nobless; -sub Rmpfr_init_set; -sub Rmpfr_init_set_d; -sub Rmpfr_init_set_d_nobless; -sub Rmpfr_init_set_f; -sub Rmpfr_init_set_f_nobless; -sub Rmpfr_init_set_ld; -sub Rmpfr_init_set_ld_nobless; -sub Rmpfr_init_set_nobless; -sub Rmpfr_init_set_q; -sub Rmpfr_init_set_q_nobless; -sub Rmpfr_init_set_si; -sub Rmpfr_init_set_si_nobless; -sub Rmpfr_init_set_str; -sub Rmpfr_init_set_str_nobless; -sub Rmpfr_init_set_ui; -sub Rmpfr_init_set_ui_nobless; -sub Rmpfr_init_set_z; -sub Rmpfr_init_set_z_nobless; -sub Rmpfr_inp_str; -sub Rmpfr_integer_p; -sub Rmpfr_j0; -sub Rmpfr_j1; -sub Rmpfr_jn; -sub Rmpfr_less_p; -sub Rmpfr_lessequal_p; -sub Rmpfr_lessgreater_p; -sub Rmpfr_lgamma; -sub Rmpfr_li2; -sub Rmpfr_lngamma; -sub Rmpfr_log10; -sub Rmpfr_log1p; -sub Rmpfr_log2; -sub Rmpfr_log; -sub Rmpfr_log_ui; -sub Rmpfr_max; -sub Rmpfr_min; -sub Rmpfr_min_prec; -sub Rmpfr_modf; -sub Rmpfr_mul; -sub Rmpfr_mul_2exp; -sub Rmpfr_mul_2si; -sub Rmpfr_mul_2ui; -sub Rmpfr_mul_d; -sub Rmpfr_mul_q; -sub Rmpfr_mul_si; -sub Rmpfr_mul_ui; -sub Rmpfr_mul_z; -sub Rmpfr_nan_p; -sub Rmpfr_nanflag_p; -sub Rmpfr_neg; -sub Rmpfr_nextabove; -sub Rmpfr_nextbelow; -sub Rmpfr_nexttoward; -sub Rmpfr_nrandom; -sub Rmpfr_number_p; -sub Rmpfr_overflow_p; -sub Rmpfr_pow; -sub Rmpfr_pow_si; -sub Rmpfr_pow_ui; -sub Rmpfr_pow_z; -sub Rmpfr_prec_round; -sub Rmpfr_print_rnd_mode; -sub Rmpfr_q_div; -sub Rmpfr_randclear; -sub Rmpfr_randinit_default; -sub Rmpfr_randinit_default_nobless; -sub Rmpfr_randinit_lc_2exp; -sub Rmpfr_randinit_lc_2exp_nobless; -sub Rmpfr_randinit_lc_2exp_size; -sub Rmpfr_randinit_lc_2exp_size_nobless; -sub Rmpfr_randinit_mt; -sub Rmpfr_randinit_mt_nobless; -sub Rmpfr_random2; -sub Rmpfr_randseed; -sub Rmpfr_randseed_ui; -sub Rmpfr_rec_root; -sub Rmpfr_rec_sqrt; -sub Rmpfr_regular_p; -sub Rmpfr_reldiff; -sub Rmpfr_remainder; -sub Rmpfr_remquo; -sub Rmpfr_rint; -sub Rmpfr_rint_ceil; -sub Rmpfr_rint_floor; -sub Rmpfr_rint_round; -sub Rmpfr_rint_roundeven; -sub Rmpfr_rint_trunc; -sub Rmpfr_root; -sub Rmpfr_rootn_ui; -sub Rmpfr_round; -sub Rmpfr_roundeven; -sub Rmpfr_sec; -sub Rmpfr_sech; -sub Rmpfr_set; -sub Rmpfr_set_DECIMAL128; -sub Rmpfr_set_DECIMAL64; -sub Rmpfr_set_FLOAT128; -sub Rmpfr_set_LD; -sub Rmpfr_set_NV; -sub Rmpfr_set_d; -sub Rmpfr_set_default_prec; -sub Rmpfr_set_default_rounding_mode; -sub Rmpfr_set_divby0; -sub Rmpfr_set_emax; -sub Rmpfr_set_emin; -sub Rmpfr_set_erangeflag; -sub Rmpfr_set_exp; -sub Rmpfr_set_f; -sub Rmpfr_set_float128; -sub Rmpfr_set_flt; -sub Rmpfr_set_inexflag; -sub Rmpfr_set_inf; -sub Rmpfr_set_ld; -sub Rmpfr_set_nan; -sub Rmpfr_set_nanflag; -sub Rmpfr_set_overflow; -sub Rmpfr_set_prec; -sub Rmpfr_set_prec_raw; -sub Rmpfr_set_q; -sub Rmpfr_set_si; -sub Rmpfr_set_si_2exp; -sub Rmpfr_set_sj; -sub Rmpfr_set_sj_2exp; -sub Rmpfr_set_str; -sub Rmpfr_set_ui; -sub Rmpfr_set_ui_2exp; -sub Rmpfr_set_uj; -sub Rmpfr_set_uj_2exp; -sub Rmpfr_set_underflow; -sub Rmpfr_set_z; -sub Rmpfr_set_z_2exp; -sub Rmpfr_set_zero; -sub Rmpfr_setsign; -sub Rmpfr_sgn; -sub Rmpfr_si_div; -sub Rmpfr_si_sub; -sub Rmpfr_signbit; -sub Rmpfr_sin; -sub Rmpfr_sin_cos; -sub Rmpfr_sinh; -sub Rmpfr_sinh_cosh; -sub Rmpfr_sqr; -sub Rmpfr_sqrt; -sub Rmpfr_sqrt_ui; -sub Rmpfr_strtofr; -sub Rmpfr_sub; -sub Rmpfr_sub_d; -sub Rmpfr_sub_q; -sub Rmpfr_sub_si; -sub Rmpfr_sub_ui; -sub Rmpfr_sub_z; -sub Rmpfr_subnormalize; -sub Rmpfr_sum; -sub Rmpfr_swap; -sub Rmpfr_tan; -sub Rmpfr_tanh; -sub Rmpfr_trunc; -sub Rmpfr_ui_div; -sub Rmpfr_ui_pow; -sub Rmpfr_ui_pow_ui; -sub Rmpfr_ui_sub; -sub Rmpfr_underflow_p; -sub Rmpfr_unordered_p; -sub Rmpfr_urandom; -sub Rmpfr_urandomb; -sub Rmpfr_y0; -sub Rmpfr_y1; -sub Rmpfr_yn; -sub Rmpfr_z_div; -sub Rmpfr_z_sub; -sub Rmpfr_zero_p; -sub Rmpfr_zeta; -sub Rmpfr_zeta_ui; -sub SA_NOCLDSTOP() ; -sub SA_NOCLDWAIT() ; -sub SA_NODEFER() ; -sub SA_ONSTACK() ; -sub SA_RESETHAND() ; -sub SA_RESTART() ; -sub SA_SIGINFO() ; -sub SIGALRM() ; -sub SIGBUS() ; -sub SIGCHLD() ; -sub SIGCONT() ; -sub SIGHUP() ; -sub SIGKILL() ; -sub SIGPIPE() ; -sub SIGPOLL() ; -sub SIGPROF() ; -sub SIGQUIT() ; -sub SIGRTMAX() ; -sub SIGRTMIN() ; -sub SIGSTOP() ; -sub SIGSYS() ; -sub SIGTRAP() ; -sub SIGTSTP() ; -sub SIGTTIN() ; -sub SIGTTOU() ; -sub SIGURG() ; -sub SIGUSR1() ; -sub SIGUSR2() ; -sub SIGVTALRM() ; -sub SIGXCPU() ; -sub SIGXFSZ() ; -sub SIG_BLOCK() ; -sub SIG_SETMASK() ; -sub SIG_UNBLOCK() ; -sub STREAM_MAX() ; -sub S_ISBLK; -sub S_ISCHR; -sub S_ISDIR; -sub S_ISFIFO; -sub S_ISREG; -sub TCIFLUSH() ; -sub TCIOFF() ; -sub TCIOFLUSH() ; -sub TCION() ; -sub TCOFLUSH() ; -sub TCOOFF() ; -sub TCOON() ; -sub TCSADRAIN() ; -sub TCSAFLUSH() ; -sub TCSANOW() ; -sub TOSTOP() ; -sub TRmpfr_inp_str; -sub TZNAME_MAX() ; -sub VEOF() ; -sub VEOL() ; -sub VERASE() ; -sub VINTR() ; -sub VKILL() ; -sub VMIN() ; -sub VQUIT() ; -sub VSTART() ; -sub VSTOP() ; -sub VSUSP() ; -sub VTIME() ; -sub WEXITSTATUS; -sub WIFEXITED; -sub WIFSIGNALED; -sub WIFSTOPPED; -sub WSTOPSIG; -sub WTERMSIG; -sub WUNTRACED() ; -sub _DBL_DIG; -sub _DBL_MANT_DIG; -sub _FLT128_DIG; -sub _FLT128_MANT_DIG; -sub _GMP_LIMB_BITS; -sub _GMP_NAIL_BITS; -sub _LDBL_DIG; -sub _LDBL_MANT_DIG; -sub _MPFR_VERSION; -sub _MPFR_VERSION_MAJOR; -sub _MPFR_VERSION_MINOR; -sub _MPFR_VERSION_PATCHLEVEL; -sub _MPFR_VERSION_STRING; -sub _MPFR_WANT_DECIMAL128; -sub _MPFR_WANT_DECIMAL64; -sub _MPFR_WANT_DECIMAL_FLOATS; -sub _MPFR_WANT_FLOAT128; -sub _PC_CHOWN_RESTRICTED() ; -sub _PC_LINK_MAX() ; -sub _PC_MAX_CANON() ; -sub _PC_MAX_INPUT() ; -sub _PC_NAME_MAX() ; -sub _PC_NO_TRUNC() ; -sub _PC_PATH_MAX() ; -sub _PC_PIPE_BUF() ; -sub _PC_VDISABLE() ; -sub _Rmpfr_out_str; -sub _Rmpfr_out_strP; -sub _Rmpfr_out_strPS; -sub _Rmpfr_out_strS; -sub _SC_ARG_MAX() ; -sub _SC_CHILD_MAX() ; -sub _SC_CLK_TCK() ; -sub _SC_JOB_CONTROL() ; -sub _SC_NGROUPS_MAX() ; -sub _SC_OPEN_MAX() ; -sub _SC_PAGESIZE() ; -sub _SC_SAVED_IDS() ; -sub _SC_STREAM_MAX() ; -sub _SC_TZNAME_MAX() ; -sub _SC_VERSION() ; -sub _SvNOK; -sub _SvPOK; -sub _TRmpfr_out_str; -sub _TRmpfr_out_strP; -sub _TRmpfr_out_strPS; -sub _TRmpfr_out_strS; -sub _can_pass_float128; -sub _d_bytes; -sub _d_bytes_fr; -sub _dd_bytes; -sub _dd_bytes_fr; -sub _exit; -sub _f128_bytes; -sub _f128_bytes_fr; -sub _fr_to_q; -sub _get_xs_version; -sub _has_inttypes; -sub _has_longdouble; -sub _has_longlong; -sub _have_IEEE_754_long_double; -sub _have_extended_precision_long_double; -sub _is_readonly; -sub _isobject; -sub _itsa; -sub _ivsize; -sub _ivsize_bits; -sub _ld_bytes; -sub _ld_bytes_fr; -sub _ld_subnormal_bug; -sub _lsb; -sub _max_base; -sub _mp_sizes; -sub _mpfr_want_float128; -sub _nv_is_float128; -sub _nvsize; -sub _readonly_off; -sub _readonly_on; -sub _required_ldbl_mant_dig; -sub _win32_infnanstring; -sub _wrap_count; -sub abort; -sub access; -sub acos; -sub asctime; -sub asin; -sub assert; -sub atan; -sub atexit; -sub atodouble; -sub atof; -sub atoi; -sub atol; -sub atonv; -sub bsearch; -sub calloc; -sub ceil; -sub cfgetispeed; -sub cfgetospeed; -sub cfsetispeed; -sub cfsetospeed; -sub clear_nnum; -sub clear_nok_pok; -sub clearerr; -sub clock; -sub cosh; -sub creat; -sub ctermid; -sub ctime; -sub cuserid; -sub difftime; -sub div; -sub dup2; -sub dup; -sub errno; -sub execl; -sub execle; -sub execlp; -sub execv; -sub execve; -sub execvp; -sub fabs; -sub fclose; -sub fdopen; -sub feof; -sub ferror; -sub fflush; -sub fgetc; -sub fgetpos; -sub fgets; -sub floor; -sub fmod; -sub fopen; -sub fpathconf; -sub fprintf; -sub fputc; -sub fputs; -sub fread; -sub free; -sub freopen; -sub frexp; -sub fscanf; -sub fseek; -sub fsetpos; -sub fstat; -sub fsync; -sub ftell; -sub fwrite; -sub get_package_name; -sub get_refcnt; -sub getchar; -sub getcwd; -sub getegid; -sub getenv; -sub geteuid; -sub getgid; -sub getgroups; -sub getpid; -sub gets; -sub getuid; -sub gmp_v; -sub isatty; -sub labs; -sub ldexp; -sub ldiv; -sub localeconv; -sub log10; -sub longjmp; -sub lseek; -sub malloc; -sub mblen; -sub mbstowcs; -sub mbtowc; -sub memchr; -sub memcmp; -sub memcpy; -sub memmove; -sub memset; -sub mkfifo; -sub mktime; -sub modf; -sub nanflag_bug; -sub nnumflag; -sub nok_pokflag; -sub nvtoa; -sub offsetof; -sub overload_abs; -sub overload_add; -sub overload_add_eq; -sub overload_atan2; -sub overload_copy; -sub overload_cos; -sub overload_dec; -sub overload_div; -sub overload_div_eq; -sub overload_equiv; -sub overload_exp; -sub overload_gt; -sub overload_gte; -sub overload_inc; -sub overload_int; -sub overload_log; -sub overload_lt; -sub overload_lte; -sub overload_mul; -sub overload_mul_eq; -sub overload_not; -sub overload_not_equiv; -sub overload_pow; -sub overload_pow_eq; -sub overload_sin; -sub overload_spaceship; -sub overload_sqrt; -sub overload_sub; -sub overload_sub_eq; -sub overload_true; -sub pathconf; -sub pause; -sub pow; -sub prec_cast; -sub putc; -sub putchar; -sub puts; -sub qsort; -sub raise; -sub realloc; -sub remove; -sub rewind; -sub scanf; -sub set_nnum; -sub set_nok_pok; -sub setbuf; -sub setgid; -sub setjmp; -sub setlocale; -sub setpgid; -sub setsid; -sub setuid; -sub setvbuf; -sub sigaction; -sub siglongjmp; -sub signal; -sub sigpending; -sub sigprocmask; -sub sigsetjmp; -sub sigsuspend; -sub sinh; -sub sscanf; -sub stderr; -sub stdin; -sub stdout; -sub strcat; -sub strchr; -sub strcmp; -sub strcoll; -sub strcpy; -sub strcspn; -sub strerror; -sub strftime; -sub strlen; -sub strncat; -sub strncmp; -sub strncpy; -sub strpbrk; -sub strrchr; -sub strspn; -sub strstr; -sub strtod; -sub strtok; -sub strtol; -sub strtoul; -sub strxfrm; -sub sysconf; -sub tan; -sub tanh; -sub tcdrain; -sub tcflow; -sub tcflush; -sub tcgetattr; -sub tcgetpgrp; -sub tcsendbreak; -sub tcsetattr; -sub tcsetpgrp; -sub tmpfile; -sub tmpnam; -sub ttyname; -sub tzname; -sub tzset; -sub uname; -sub ungetc; -sub vfprintf; -sub vprintf; -sub vsprintf; -sub wcstombs; -sub wctomb; -sub wrap_mpfr_fprintf; -sub wrap_mpfr_fprintf_rnd; -sub wrap_mpfr_printf; -sub wrap_mpfr_printf_rnd; -sub wrap_mpfr_snprintf; -sub wrap_mpfr_snprintf_rnd; -sub wrap_mpfr_sprintf; -sub wrap_mpfr_sprintf_rnd; -} -package Math::MPFR::Prec { -sub DESTROY; -sub prec_cast; -} -package Math::MPFR::Random { -sub Rmpfr_randinit_default; -sub Rmpfr_randinit_lc_2exp; -sub Rmpfr_randinit_lc_2exp_size; -sub Rmpfr_randinit_mt; -} -package Math::MPFR::V { -sub _MPFR_VERSION; -sub _MPFR_VERSION_MAJOR; -sub _MPFR_VERSION_MINOR; -sub _MPFR_VERSION_PATCHLEVEL; -sub _MPFR_VERSION_STRING; -sub ___GMP_CC; -sub ___GMP_CFLAGS; -sub ___GNU_MP_VERSION; -sub ___GNU_MP_VERSION_MINOR; -sub ___GNU_MP_VERSION_PATCHLEVEL; -} -package Math::Prime::Util { -sub CLONE(;@) ; -sub Pi(;$) ; -sub _LMOS_pi($) ; -sub _LMO_pi($) ; -sub _XS_ExponentialIntegral($) ; -sub _XS_LambertW($) ; -sub _XS_LogarithmicIntegral($) ; -sub _XS_RiemannR($) ; -sub _XS_RiemannZeta($) ; -sub _XS_get_callgmp() ; -sub _XS_get_secure() ; -sub _XS_get_verbose() ; -sub _XS_set_callgmp($) ; -sub _XS_set_secure() ; -sub _XS_set_verbose($) ; -sub _end_for_loop($) ; -sub _get_forexit() ; -sub _get_prime_cache_size() ; -sub _is_csprng_well_seeded() ; -sub _legendre_pi($) ; -sub _lehmer_pi($) ; -sub _meissel_pi($) ; -sub _n_ramanujan_primes($$) ; -sub _pidigits($) ; -sub _ramanujan_primes($$) ; -sub _segment_pi($) ; -sub _start_for_loop() ; -sub _validate_num($;@) ; -sub addmod($$$) ; -sub binomial($$) ; -sub carmichael_lambda($) ; -sub chebyshev_psi($) ; -sub chebyshev_theta($) ; -sub chinese(@) ; -sub csrand(;$) ; -sub divisor_sum($;@) ; -sub divisors($) ; -sub divmod($$$) ; -sub drand(;$) ; -sub ecm_factor($;@) ; -sub entropy_bytes($) ; -sub erat_primes($$) ; -sub euler_phi($;$) ; -sub exp_mangoldt($) ; -sub factor($) ; -sub factor_exp($) ; -sub factorial($) ; -sub factorialmod($$) ; -sub fermat_factor($;@) ; -sub forcomb(&$;$) ; -sub forcomp(&$;$) ; -sub forcomposites(&$;$) ; -sub forderange(&$;$) ; -sub fordivisors(&$) ; -sub forfactored(&$;$) ; -sub foroddcomposites(&$;$) ; -sub forpart(&$;$) ; -sub forperm(&$;$) ; -sub forprimes(&$;$) ; -sub forsemiprimes(&$;$) ; -sub forsetproduct(&@) ; -sub forsquarefree(&$;$) ; -sub fromdigits($;$$) ; -sub gcd(@) ; -sub gcdext($$) ; -sub hammingweight($) ; -sub hclassno($) ; -sub holf_factor($;@) ; -sub inverse_li($) ; -sub inverse_totient($) ; -sub invmod($$) ; -sub irand() ; -sub irand64() ; -sub is_aks_prime($) ; -sub is_almost_extra_strong_lucas_pseudoprime($;$) ; -sub is_bpsw_prime($) ; -sub is_carmichael($) ; -sub is_catalan_pseudoprime($) ; -sub is_euler_plumb_pseudoprime($) ; -sub is_euler_pseudoprime($;@) ; -sub is_extra_strong_lucas_pseudoprime($) ; -sub is_frobenius_khashin_pseudoprime($) ; -sub is_frobenius_pseudoprime($;$$) ; -sub is_frobenius_underwood_pseudoprime($) ; -sub is_fundamental($) ; -sub is_lucas_pseudoprime($) ; -sub is_mersenne_prime($) ; -sub is_perrin_pseudoprime($;$) ; -sub is_pillai($) ; -sub is_polygonal($$;$) ; -sub is_power($;$$) ; -sub is_prime($) ; -sub is_prime_power($;$) ; -sub is_primitive_root($$) ; -sub is_prob_prime($) ; -sub is_provable_prime($) ; -sub is_pseudoprime($;@) ; -sub is_quasi_carmichael($) ; -sub is_ramanujan_prime($) ; -sub is_semiprime($) ; -sub is_square($) ; -sub is_square_free($) ; -sub is_strong_lucas_pseudoprime($) ; -sub is_strong_pseudoprime($;@) ; -sub is_totient($) ; -sub jordan_totient($$) ; -sub kronecker($$) ; -sub lastfor() ; -sub lcm(@) ; -sub legendre_phi($$) ; -sub lehman_factor($;@) ; -sub liouville($) ; -sub logint($$;$) ; -sub lucas_sequence(;@) ; -sub lucasu(;@) ; -sub lucasv(;@) ; -sub mertens($) ; -sub miller_rabin_random($;$$) ; -sub moebius($;$) ; -sub mulmod($$$) ; -sub next_prime($) ; -sub nth_prime($) ; -sub nth_prime_approx($) ; -sub nth_prime_lower($) ; -sub nth_prime_upper($) ; -sub nth_ramanujan_prime($) ; -sub nth_ramanujan_prime_approx($) ; -sub nth_ramanujan_prime_lower($) ; -sub nth_ramanujan_prime_upper($) ; -sub nth_semiprime($) ; -sub nth_semiprime_approx($) ; -sub nth_twin_prime($) ; -sub nth_twin_prime_approx($) ; -sub numtoperm($$) ; -sub pbrent_factor($;@) ; -sub permtonum($) ; -sub pminus1_factor($;@) ; -sub powmod($$$) ; -sub pplus1_factor($;@) ; -sub prev_prime($) ; -sub prho_factor($;@) ; -sub prime_count($;@) ; -sub prime_count_approx($) ; -sub prime_count_lower($) ; -sub prime_count_upper($) ; -sub prime_memfree() ; -sub prime_precalc($) ; -sub print_primes($;@) ; -sub ramanujan_prime_count($;@) ; -sub ramanujan_prime_count_approx($;@) ; -sub ramanujan_prime_count_lower($) ; -sub ramanujan_prime_count_upper($) ; -sub ramanujan_sum($$) ; -sub ramanujan_tau($) ; -sub rand(;$) ; -sub random_bytes($) ; -sub random_factored_integer($) ; -sub random_maurer_prime($) ; -sub random_nbit_prime($) ; -sub random_ndigit_prime($) ; -sub random_prime($;$) ; -sub random_proven_prime($) ; -sub random_semiprime($) ; -sub random_shawe_taylor_prime($) ; -sub random_strong_prime($) ; -sub random_unrestricted_semiprime($) ; -sub randperm($;$) ; -sub rootint($$;$) ; -sub segment_primes($$) ; -sub segment_twin_primes($$) ; -sub semi_prime_sieve($$) ; -sub semiprime_count($;@) ; -sub semiprime_count_approx($) ; -sub shuffle(@) ; -sub sieve_prime_cluster($$;@) ; -sub sieve_primes($$) ; -sub sieve_range($$$) ; -sub sqrtint($) ; -sub sqrtmod($$) ; -sub squfof_factor($;@) ; -sub srand(;$) ; -sub stirling($$;$) ; -sub sum_primes($;@) ; -sub sumdigits($;$) ; -sub todigits($;$$) ; -sub todigitstring($;$$) ; -sub trial_factor($;@) ; -sub trial_primes($$) ; -sub twin_prime_count($;@) ; -sub twin_prime_count_approx($) ; -sub urandomb($) ; -sub urandomm($) ; -sub valuation($$) ; -sub vecall(&@) ; -sub vecany(&@) ; -sub vecextract($$) ; -sub vecfirst(&@) ; -sub vecfirstidx(&@) ; -sub vecmax(@) ; -sub vecmin(@) ; -sub vecnone(&@) ; -sub vecnotall(&@) ; -sub vecprod(@) ; -sub vecreduce(&@) ; -sub vecsum(@) ; -sub znlog($$$) ; -sub znorder($$) ; -sub znprimroot($) ; -} -package Math::Prime::Util::GMP { -sub Euler($) ; -sub FD_CLOEXEC() ; -sub F_ALLOCSP() ; -sub F_ALLOCSP64() ; -sub F_COMPAT() ; -sub F_DUP2FD() ; -sub F_DUPFD() ; -sub F_EXLCK() ; -sub F_FREESP() ; -sub F_FREESP64() ; -sub F_FSYNC() ; -sub F_FSYNC64() ; -sub F_GETFD() ; -sub F_GETFL() ; -sub F_GETLK() ; -sub F_GETLK64() ; -sub F_GETOWN() ; -sub F_NODNY() ; -sub F_POSIX() ; -sub F_RDACC() ; -sub F_RDDNY() ; -sub F_RDLCK() ; -sub F_RWACC() ; -sub F_RWDNY() ; -sub F_SETFD() ; -sub F_SETFL() ; -sub F_SETLK() ; -sub F_SETLK64() ; -sub F_SETLKW() ; -sub F_SETLKW64() ; -sub F_SETOWN() ; -sub F_SHARE() ; -sub F_SHLCK() ; -sub F_UNLCK() ; -sub F_UNSHARE() ; -sub F_WRACC() ; -sub F_WRDNY() ; -sub F_WRLCK() ; -sub O_ALIAS() ; -sub O_ASYNC() ; -sub O_DEFER() ; -sub O_DIRECT() ; -sub O_DIRECTORY() ; -sub O_DSYNC() ; -sub O_EXLOCK() ; -sub O_LARGEFILE() ; -sub O_NDELAY() ; -sub O_NOCTTY() ; -sub O_NOFOLLOW() ; -sub O_NONBLOCK() ; -sub O_RSRC() ; -sub O_RSYNC() ; -sub O_SHLOCK() ; -sub O_SYNC() ; -sub Pi($) ; -sub _GMP_destroy() ; -sub _GMP_init() ; -sub _GMP_memfree() ; -sub _GMP_set_verbose($) ; -sub _is_provable_prime($;$) ; -sub _validate_ecpp_curve($$$$$$$) ; -sub addmod($$$) ; -sub addreal($$;$) ; -sub agmreal($$;$) ; -sub bernfrac($) ; -sub bernreal($;$) ; -sub binomial($$) ; -sub carmichael_lambda($) ; -sub chinese(@) ; -sub consecutive_integer_lcm($) ; -sub divisors($) ; -sub divmod($$$) ; -sub divreal($$;$) ; -sub drand(;$) ; -sub ecm_factor($;@) ; -sub ei($;$) ; -sub exp_mangoldt($) ; -sub expreal($;$) ; -sub factor($) ; -sub factorial($) ; -sub factorial_sum($) ; -sub factorialmod($$) ; -sub gcd(@) ; -sub gcdext($$) ; -sub hammingweight($) ; -sub harmfrac($) ; -sub harmreal($;$) ; -sub holf_factor($;@) ; -sub invmod($$) ; -sub irand() ; -sub irand64() ; -sub is_aks_prime($) ; -sub is_almost_extra_strong_lucas_pseudoprime($;$) ; -sub is_bls75_prime($) ; -sub is_bpsw_prime($) ; -sub is_carmichael($) ; -sub is_csprng_well_seeded() ; -sub is_ecpp_prime($) ; -sub is_euler_plumb_pseudoprime($) ; -sub is_euler_pseudoprime($;@) ; -sub is_extra_strong_lucas_pseudoprime($) ; -sub is_frobenius_khashin_pseudoprime($) ; -sub is_frobenius_pseudoprime($;$$) ; -sub is_frobenius_underwood_pseudoprime($) ; -sub is_fundamental($) ; -sub is_llr_prime($) ; -sub is_lucas_pseudoprime($) ; -sub is_mersenne_prime($) ; -sub is_miller_prime($;$) ; -sub is_nminus1_prime($) ; -sub is_nplus1_prime($) ; -sub is_perrin_pseudoprime($;$) ; -sub is_polygonal($$) ; -sub is_power($;$) ; -sub is_prime($) ; -sub is_prime_power($) ; -sub is_primitive_root($$) ; -sub is_prob_prime($) ; -sub is_proth_prime($) ; -sub is_pseudoprime($;@) ; -sub is_semiprime($) ; -sub is_square($) ; -sub is_strong_lucas_pseudoprime($) ; -sub is_strong_pseudoprime($;@) ; -sub is_totient($) ; -sub jordan_totient($$) ; -sub kronecker($$) ; -sub lambertw($;$) ; -sub lcm(@) ; -sub li($;$) ; -sub liouville($) ; -sub logint($$) ; -sub logreal($;$) ; -sub lucas_sequence($$$$) ; -sub lucasu($$$) ; -sub lucasv($$$) ; -sub miller_rabin_random($;$$) ; -sub moebius($;$) ; -sub mulmod($$$) ; -sub mulreal($$;$) ; -sub multifactorial($$) ; -sub next_prime($) ; -sub numtoperm($$) ; -sub partitions($) ; -sub pbrent_factor($;@) ; -sub permtonum($) ; -sub pminus1_factor($;@) ; -sub pn_primorial($) ; -sub polygonal_nth($$) ; -sub powmod($$$) ; -sub powreal($$;$) ; -sub pplus1_factor($;@) ; -sub prev_prime($) ; -sub prho_factor($;@) ; -sub prime_count($;$) ; -sub prime_count_lower($) ; -sub prime_count_upper($) ; -sub primorial($) ; -sub qs_factor($;@) ; -sub ramanujan_tau($) ; -sub random_bytes($) ; -sub random_maurer_prime($) ; -sub random_maurer_prime_with_cert($) ; -sub random_nbit_prime($) ; -sub random_ndigit_prime($) ; -sub random_prime($;$) ; -sub random_shawe_taylor_prime($) ; -sub random_shawe_taylor_prime_with_cert($) ; -sub random_strong_prime($) ; -sub riemannr($;$) ; -sub rootint($$) ; -sub rootreal($$;$) ; -sub seed_csprng($$) ; -sub sieve_prime_cluster($$;@) ; -sub sieve_primes($$;@) ; -sub sieve_range($$$) ; -sub sieve_twin_primes($$;@) ; -sub sigma($;$) ; -sub sqrtint($) ; -sub sqrtmod($$) ; -sub squfof_factor($;@) ; -sub stirling($$;$) ; -sub subfactorial($) ; -sub subreal($$;$) ; -sub surround_primes($;$) ; -sub todigits($;$$) ; -sub totient($) ; -sub trial_factor($;@) ; -sub urandomb($) ; -sub urandomm($) ; -sub urandomr($;$) ; -sub valuation($$) ; -sub vecprod(@) ; -sub vecsum(@) ; -sub zeta($;$) ; -sub znorder($$) ; -sub znprimroot($) ; -} -package Math::UInt64 { -sub STORABLE_freeze; -sub STORABLE_thaw; -sub _add; -sub _and; -sub _bnot; -sub _bool; -sub _clone; -sub _dec; -sub _div; -sub _eqn; -sub _gen; -sub _gtn; -sub _inc; -sub _left; -sub _len; -sub _ltn; -sub _mul; -sub _neg; -sub _nen; -sub _not; -sub _number; -sub _or; -sub _pow; -sub _rest; -sub _right; -sub _spaceship; -sub _string; -sub _sub; -sub _xor; -} -package Moose { -sub is_class_loaded; -} -package Moose::Exporter { -sub _export_is_flagged; -sub _flag_as_reexport; -sub is_class_loaded; -sub reftype($) ; -sub subname; -sub uniq(@) ; -} -package Moose::Meta::Attribute { -sub any(&@) ; -sub blessed($) ; -} -package Moose::Meta::Class { -sub any(&@) ; -sub blessed($) ; -} -package Moose::Meta::Class::Immutable::Trait { -sub blessed($) ; -} -package Moose::Meta::Method::Constructor { -sub weaken($) ; -} -package Moose::Meta::Method::Delegation { -sub blessed($) ; -sub weaken($) ; -} -package Moose::Meta::Method::Destructor { -sub blessed($) ; -sub weaken($) ; -} -package Moose::Meta::Object::Trait { -sub blessed($) ; -} -package Moose::Meta::Role { -sub blessed($) ; -} -package Moose::Meta::Role::Application { -sub all(&@) ; -} -package Moose::Meta::Role::Application::RoleSummation { -sub all(&@) ; -sub blessed($) ; -} -package Moose::Meta::Role::Application::ToClass { -sub first(&@) ; -sub weaken($) ; -} -package Moose::Meta::Role::Application::ToInstance { -sub _reset_amagic; -sub all(&@) ; -sub blessed($) ; -} -package Moose::Meta::Role::Attribute { -sub all(&@) ; -sub blessed($) ; -sub weaken($) ; -} -package Moose::Meta::Role::Composite { -sub blessed($) ; -} -package Moose::Meta::TypeCoercion::Union { -sub blessed($) ; -} -package Moose::Meta::TypeConstraint { -sub refaddr($) ; -sub subname; -} -package Moose::Meta::TypeConstraint::DuckType { -sub all(&@) ; -sub blessed($) ; -} -package Moose::Meta::TypeConstraint::Parameterized { -sub blessed($) ; -} -package Moose::Meta::TypeConstraint::Registry { -sub blessed($) ; -} -package Moose::Meta::TypeConstraint::Union { -sub all(&@) ; -sub first(&@) ; -} -package Moose::Role { -sub is_class_loaded; -} -package Moose::Util { -sub all(&@) ; -sub any(&@) ; -sub blessed($) ; -sub first(&@) ; -} -package Moose::Util::MetaRole { -sub all(&@) ; -sub blessed($) ; -sub first(&@) ; -} -package Moose::Util::TypeConstraints { -sub blessed($) ; -} -package Moose::Util::TypeConstraints::Builtins { -sub _RegexpRef; -sub blessed($) ; -sub is_class_loaded; -} -package NDBM_File { -sub DELETE; -sub DESTROY; -sub FETCH; -sub FIRSTKEY; -sub NEXTKEY; -sub STORE; -sub TIEHASH; -sub clearerr; -sub error; -sub filter_fetch_key; -sub filter_fetch_value; -sub filter_store_key; -sub filter_store_value; -} -package Net::SSH2 { -sub AF_802() ; -sub AF_AAL() ; -sub AF_CTF() ; -sub AF_GOSIP() ; -sub AF_KEY() ; -sub AF_LAST() ; -sub AF_LINK() ; -sub AF_NBS() ; -sub AF_NIT() ; -sub AF_OSINET() ; -sub AF_ROUTE() ; -sub AF_USER() ; -sub AF_WAN() ; -sub AF_X25() ; -sub CLONE; -sub DESTROY; -sub IOV_MAX() ; -sub IP_RECVOPTS() ; -sub IP_RECVRETOPTS() ; -sub IP_RETOPTS() ; -sub MSG_BCAST() ; -sub MSG_BTAG() ; -sub MSG_CTLFLAGS() ; -sub MSG_CTLIGNORE() ; -sub MSG_CTRUNC() ; -sub MSG_DONTWAIT() ; -sub MSG_EOF() ; -sub MSG_EOR() ; -sub MSG_ERRQUEUE() ; -sub MSG_ETAG() ; -sub MSG_FASTOPEN() ; -sub MSG_FIN() ; -sub MSG_MCAST() ; -sub MSG_NOSIGNAL() ; -sub MSG_PROXY() ; -sub MSG_RST() ; -sub MSG_SYN() ; -sub MSG_TRUNC() ; -sub MSG_URG() ; -sub MSG_WIRE() ; -sub O_ALIAS() ; -sub O_ASYNC() ; -sub O_DEFER() ; -sub O_DIRECT() ; -sub O_DIRECTORY() ; -sub O_DSYNC() ; -sub O_EXLOCK() ; -sub O_LARGEFILE() ; -sub O_NDELAY() ; -sub O_NOCTTY() ; -sub O_NOFOLLOW() ; -sub O_NONBLOCK() ; -sub O_RSRC() ; -sub O_RSYNC() ; -sub O_SHLOCK() ; -sub O_SYNC() ; -sub PF_802() ; -sub PF_AAL() ; -sub PF_CTF() ; -sub PF_GOSIP() ; -sub PF_KEY() ; -sub PF_LAST() ; -sub PF_LINK() ; -sub PF_NBS() ; -sub PF_NIT() ; -sub PF_OSINET() ; -sub PF_ROUTE() ; -sub PF_USER() ; -sub PF_WAN() ; -sub PF_X25() ; -sub SCM_CONNECT() ; -sub SCM_CREDENTIALS() ; -sub SCM_CREDS() ; -sub SCM_RIGHTS() ; -sub SCM_TIMESTAMP() ; -sub SO_ATTACH_FILTER() ; -sub SO_BACKLOG() ; -sub SO_CHAMELEON() ; -sub SO_DETACH_FILTER() ; -sub SO_DGRAM_ERRIND() ; -sub SO_DOMAIN() ; -sub SO_FAMILY() ; -sub SO_PASSCRED() ; -sub SO_PASSIFNAME() ; -sub SO_PEERCRED() ; -sub SO_PROTOCOL() ; -sub SO_PROTOTYPE() ; -sub SO_REUSEPORT() ; -sub SO_SECURITY_AUTHENTICATION() ; -sub SO_SECURITY_ENCRYPTION_NETWORK() ; -sub SO_SECURITY_ENCRYPTION_TRANSPORT() ; -sub SO_STATE() ; -sub SO_XOPEN() ; -sub SO_XSE() ; -sub UIO_MAXIOV() ; -sub _auth_list; -sub _method; -sub _new; -sub _parse_constant; -sub _poll; -sub _scp_get; -sub _scp_put; -sub _set_error; -sub _startup; -sub auth_agent; -sub auth_hostbased; -sub auth_keyboard; -sub auth_ok; -sub auth_password; -sub auth_publickey; -sub auth_publickey_frommemory; -sub banner; -sub block_directions; -sub blocking; -sub callback; -sub channel; -sub constant; -sub debug; -sub disconnect; -sub error; -sub flag; -sub hostkey_hash; -sub hostname; -sub inet_aton; -sub inet_ntoa; -sub keepalive_config; -sub keepalive_send; -sub known_hosts; -sub listen; -sub pack_sockaddr_in6; -sub pack_sockaddr_in; -sub pack_sockaddr_un; -sub port; -sub public_key; -sub remote_hostkey; -sub sftp; -sub sock; -sub sockaddr_family; -sub tcpip; -sub timeout; -sub trace; -sub unpack_sockaddr_in6; -sub unpack_sockaddr_in; -sub unpack_sockaddr_un; -sub version; -} -package Net::SSH2::Channel { -sub DESTROY; -sub GETC; -sub _exit_signal; -sub _exit_status; -sub _pty; -sub _setenv; -sub _wait_closed; -sub close; -sub eof; -sub ext_data; -sub flush; -sub getc; -sub process; -sub pty_size; -sub read; -sub receive_window_adjust; -sub send_eof; -sub session; -sub wait_eof; -sub window_read; -sub window_write; -sub write; -} -package Net::SSH2::Dir { -sub DESTROY; -sub read; -} -package Net::SSH2::File { -sub DESTROY; -sub GETC; -sub getc; -sub read; -sub seek; -sub setstat; -sub stat; -sub tell; -sub write; -} -package Net::SSH2::KnownHosts { -sub DESTROY; -sub add; -sub check; -sub readfile; -sub readline; -sub writefile; -sub writeline; -} -package Net::SSH2::Listener { -sub DESTROY; -sub accept; -} -package Net::SSH2::PublicKey { -sub DESTROY; -sub add; -sub fetch; -sub remove; -} -package Net::SSH2::SFTP { -sub DESTROY; -sub error; -sub mkdir; -sub open; -sub opendir; -sub readlink; -sub realpath; -sub rename; -sub rmdir; -sub session; -sub setstat; -sub stat; -sub symlink; -sub unlink; -} -package Net::SSLeay { -sub AF_802() ; -sub AF_AAL() ; -sub AF_CTF() ; -sub AF_GOSIP() ; -sub AF_KEY() ; -sub AF_LAST() ; -sub AF_LINK() ; -sub AF_NBS() ; -sub AF_NIT() ; -sub AF_OSINET() ; -sub AF_ROUTE() ; -sub AF_USER() ; -sub AF_WAN() ; -sub AF_X25() ; -sub ASN1_INTEGER_free($) ; -sub ASN1_INTEGER_get($) ; -sub ASN1_INTEGER_new() ; -sub ASN1_INTEGER_set($$) ; -sub ASN1_TIME_free($) ; -sub ASN1_TIME_new() ; -sub ASN1_TIME_set($$) ; -sub ASN1_TIME_timet($) ; -sub BIO_eof($) ; -sub BIO_f_ssl() ; -sub BIO_free($) ; -sub BIO_new($) ; -sub BIO_new_buffer_ssl_connect($) ; -sub BIO_new_file($$) ; -sub BIO_new_ssl($$) ; -sub BIO_new_ssl_connect($) ; -sub BIO_pending($) ; -sub BIO_read($;$) ; -sub BIO_s_mem() ; -sub BIO_ssl_copy_session_id($$) ; -sub BIO_ssl_shutdown($) ; -sub BIO_wpending($) ; -sub BIO_write($$) ; -sub CIPHER_description($$$) ; -sub CIPHER_get_bits($;$) ; -sub CIPHER_get_name($) ; -sub CLONE(;@) ; -sub COMP_add_compression_method($$) ; -sub CTX_add_client_CA($$) ; -sub CTX_add_extra_chain_cert($$) ; -sub CTX_add_session($$) ; -sub CTX_callback_ctrl($$$) ; -sub CTX_check_private_key($) ; -sub CTX_ctrl($$$$) ; -sub CTX_flush_sessions($$) ; -sub CTX_free($) ; -sub CTX_get0_param($) ; -sub CTX_get_app_data($) ; -sub CTX_get_cert_store($) ; -sub CTX_get_client_CA_list($) ; -sub CTX_get_ex_data($$) ; -sub CTX_get_ex_new_index($;$$$$) ; -sub CTX_get_max_proto_version($) ; -sub CTX_get_min_proto_version($) ; -sub CTX_get_mode($) ; -sub CTX_get_num_tickets($) ; -sub CTX_get_options($) ; -sub CTX_get_quiet_shutdown($) ; -sub CTX_get_read_ahead($) ; -sub CTX_get_security_level($) ; -sub CTX_get_session_cache_mode($) ; -sub CTX_get_timeout($) ; -sub CTX_get_verify_depth($) ; -sub CTX_get_verify_mode($) ; -sub CTX_load_verify_locations($$$) ; -sub CTX_new() ; -sub CTX_new_with_method($) ; -sub CTX_remove_session($$) ; -sub CTX_sess_accept($) ; -sub CTX_sess_accept_good($) ; -sub CTX_sess_accept_renegotiate($) ; -sub CTX_sess_cache_full($) ; -sub CTX_sess_cb_hits($) ; -sub CTX_sess_connect($) ; -sub CTX_sess_connect_good($) ; -sub CTX_sess_connect_renegotiate($) ; -sub CTX_sess_get_cache_size($) ; -sub CTX_sess_hits($) ; -sub CTX_sess_misses($) ; -sub CTX_sess_number($) ; -sub CTX_sess_set_cache_size($$) ; -sub CTX_sess_set_new_cb($$) ; -sub CTX_sess_set_remove_cb($$) ; -sub CTX_sess_timeouts($) ; -sub CTX_sessions($) ; -sub CTX_set1_curves_list($$) ; -sub CTX_set1_groups_list($$) ; -sub CTX_set1_param($$) ; -sub CTX_set_alpn_protos($;$) ; -sub CTX_set_alpn_select_cb($$;$) ; -sub CTX_set_app_data($$) ; -sub CTX_set_cert_store($$) ; -sub CTX_set_cert_verify_callback($$;$) ; -sub CTX_set_cipher_list($$) ; -sub CTX_set_ciphersuites($$) ; -sub CTX_set_client_CA_list($$) ; -sub CTX_set_default_passwd_cb($;$) ; -sub CTX_set_default_passwd_cb_userdata($;$) ; -sub CTX_set_default_verify_paths($) ; -sub CTX_set_ex_data($$$) ; -sub CTX_set_info_callback($$;$) ; -sub CTX_set_max_proto_version($$) ; -sub CTX_set_min_proto_version($$) ; -sub CTX_set_mode($$) ; -sub CTX_set_next_proto_select_cb($$;$) ; -sub CTX_set_next_protos_advertised_cb($$;$) ; -sub CTX_set_num_tickets($$) ; -sub CTX_set_options($$) ; -sub CTX_set_post_handshake_auth($$) ; -sub CTX_set_psk_client_callback($;$) ; -sub CTX_set_purpose($$) ; -sub CTX_set_quiet_shutdown($$) ; -sub CTX_set_read_ahead($$) ; -sub CTX_set_security_level($$) ; -sub CTX_set_session_cache_mode($$) ; -sub CTX_set_session_id_context($$$) ; -sub CTX_set_ssl_version($$) ; -sub CTX_set_timeout($$) ; -sub CTX_set_tlsext_servername_callback($;$$) ; -sub CTX_set_tlsext_status_cb($$;$) ; -sub CTX_set_tlsext_ticket_getkey_cb($;$$) ; -sub CTX_set_tmp_dh($$) ; -sub CTX_set_tmp_dh_callback($$) ; -sub CTX_set_tmp_ecdh($$) ; -sub CTX_set_trust($$) ; -sub CTX_set_verify($$;$) ; -sub CTX_set_verify_depth($$) ; -sub CTX_tlsv1_1_new() ; -sub CTX_tlsv1_2_new() ; -sub CTX_tlsv1_new() ; -sub CTX_use_PKCS12_file($$;$) ; -sub CTX_use_PrivateKey($$) ; -sub CTX_use_PrivateKey_file($$$) ; -sub CTX_use_RSAPrivateKey($$) ; -sub CTX_use_RSAPrivateKey_file($$$) ; -sub CTX_use_certificate($$) ; -sub CTX_use_certificate_chain_file($$) ; -sub CTX_use_certificate_file($$$) ; -sub CTX_v23_new() ; -sub DH_free($) ; -sub EC_KEY_free($) ; -sub EC_KEY_generate_key($) ; -sub EC_KEY_new_by_curve_name($) ; -sub ENGINE_by_id($) ; -sub ENGINE_load_builtin_engines() ; -sub ENGINE_register_all_complete() ; -sub ENGINE_set_default($$) ; -sub ERR_clear_error() ; -sub ERR_error_string($;$) ; -sub ERR_get_error() ; -sub ERR_load_RAND_strings() ; -sub ERR_load_SSL_strings() ; -sub ERR_load_crypto_strings() ; -sub ERR_peek_error() ; -sub ERR_put_error($$$$$) ; -sub EVP_Digest(;@) ; -sub EVP_DigestFinal($) ; -sub EVP_DigestFinal_ex($) ; -sub EVP_DigestInit($$) ; -sub EVP_DigestInit_ex($$$) ; -sub EVP_DigestUpdate($$) ; -sub EVP_MD_CTX_create() ; -sub EVP_MD_CTX_destroy($) ; -sub EVP_MD_CTX_md($) ; -sub EVP_MD_size($) ; -sub EVP_MD_type($) ; -sub EVP_PKEY_assign_EC_KEY($$) ; -sub EVP_PKEY_assign_RSA($$) ; -sub EVP_PKEY_bits($) ; -sub EVP_PKEY_copy_parameters($$) ; -sub EVP_PKEY_free($) ; -sub EVP_PKEY_id($) ; -sub EVP_PKEY_new() ; -sub EVP_PKEY_size($) ; -sub EVP_add_digest($) ; -sub EVP_get_cipherbyname($) ; -sub EVP_get_digestbyname($) ; -sub EVP_sha1() ; -sub EVP_sha256() ; -sub EVP_sha512() ; -sub FIPS_mode_set($) ; -sub IOV_MAX() ; -sub IP_RECVOPTS() ; -sub IP_RECVRETOPTS() ; -sub IP_RETOPTS() ; -sub MD4($) ; -sub MD5($) ; -sub MSG_BCAST() ; -sub MSG_BTAG() ; -sub MSG_CTLFLAGS() ; -sub MSG_CTLIGNORE() ; -sub MSG_CTRUNC() ; -sub MSG_DONTWAIT() ; -sub MSG_EOF() ; -sub MSG_EOR() ; -sub MSG_ERRQUEUE() ; -sub MSG_ETAG() ; -sub MSG_FASTOPEN() ; -sub MSG_FIN() ; -sub MSG_MCAST() ; -sub MSG_NOSIGNAL() ; -sub MSG_PROXY() ; -sub MSG_RST() ; -sub MSG_SYN() ; -sub MSG_TRUNC() ; -sub MSG_URG() ; -sub MSG_WIRE() ; -sub OBJ_cmp($$) ; -sub OBJ_dup($) ; -sub OBJ_ln2nid($) ; -sub OBJ_nid2ln($) ; -sub OBJ_nid2obj($) ; -sub OBJ_nid2sn($) ; -sub OBJ_obj2nid($) ; -sub OBJ_obj2txt($;$) ; -sub OBJ_sn2nid($) ; -sub OBJ_txt2nid($) ; -sub OBJ_txt2obj($;$) ; -sub OCSP_REQUEST_free($) ; -sub OCSP_RESPONSE_free($) ; -sub OCSP_cert2ids($;@) ; -sub OCSP_ids2req(;@) ; -sub OCSP_response_results($;@) ; -sub OCSP_response_status($) ; -sub OCSP_response_status_str($) ; -sub OCSP_response_verify($$;$$) ; -sub OPENSSL_add_all_algorithms_conf() ; -sub OPENSSL_add_all_algorithms_noconf() ; -sub OpenSSL_add_all_algorithms() ; -sub OpenSSL_add_all_digests() ; -sub OpenSSL_add_ssl_algorithms() ; -sub OpenSSL_version(;$) ; -sub OpenSSL_version_num() ; -sub PEM_X509_INFO_read_bio($;$$$) ; -sub PEM_get_string_PrivateKey($;$$) ; -sub PEM_get_string_X509($) ; -sub PEM_get_string_X509_CRL($) ; -sub PEM_get_string_X509_REQ($) ; -sub PEM_read_bio_DHparams($;$$$) ; -sub PEM_read_bio_PrivateKey($;$$) ; -sub PEM_read_bio_X509($;$$$) ; -sub PEM_read_bio_X509_CRL($;$$$) ; -sub PEM_read_bio_X509_REQ($;$$$) ; -sub PF_802() ; -sub PF_AAL() ; -sub PF_CTF() ; -sub PF_GOSIP() ; -sub PF_KEY() ; -sub PF_LAST() ; -sub PF_LINK() ; -sub PF_NBS() ; -sub PF_NIT() ; -sub PF_OSINET() ; -sub PF_ROUTE() ; -sub PF_USER() ; -sub PF_WAN() ; -sub PF_X25() ; -sub P_ASN1_INTEGER_get_dec($) ; -sub P_ASN1_INTEGER_get_hex($) ; -sub P_ASN1_INTEGER_set_dec($$) ; -sub P_ASN1_INTEGER_set_hex($$) ; -sub P_ASN1_STRING_get($;$) ; -sub P_ASN1_TIME_get_isotime($) ; -sub P_ASN1_TIME_put2string($) ; -sub P_ASN1_TIME_set_isotime($$) ; -sub P_ASN1_UTCTIME_put2string($) ; -sub P_EVP_MD_list_all() ; -sub P_PKCS12_load_file($;$$) ; -sub P_X509_CRL_add_revoked_serial_hex($$$;$$) ; -sub P_X509_CRL_get_serial($) ; -sub P_X509_CRL_set_serial($$) ; -sub P_X509_INFO_get_x509($) ; -sub P_X509_REQ_add_extensions($;@) ; -sub P_X509_REQ_get_attr($$) ; -sub P_X509_add_extensions($$;@) ; -sub P_X509_copy_extensions($$;$) ; -sub P_X509_get_crl_distribution_points($) ; -sub P_X509_get_ext_key_usage($;$) ; -sub P_X509_get_key_usage($) ; -sub P_X509_get_netscape_cert_type($) ; -sub P_X509_get_ocsp_uri($) ; -sub P_X509_get_pubkey_alg($) ; -sub P_X509_get_signature_alg($) ; -sub P_alpn_selected($) ; -sub P_next_proto_last_status($) ; -sub P_next_proto_negotiated($) ; -sub RAND_add($$$) ; -sub RAND_bytes($$) ; -sub RAND_cleanup() ; -sub RAND_file_name($) ; -sub RAND_load_file($$) ; -sub RAND_poll() ; -sub RAND_priv_bytes($$) ; -sub RAND_pseudo_bytes($$) ; -sub RAND_seed($) ; -sub RAND_status() ; -sub RAND_write_file($) ; -sub RIPEMD160($) ; -sub RSA_free($) ; -sub RSA_generate_key($$;$$) ; -sub SCM_CONNECT() ; -sub SCM_CREDENTIALS() ; -sub SCM_CREDS() ; -sub SCM_RIGHTS() ; -sub SCM_TIMESTAMP() ; -sub SESSION_dup($) ; -sub SESSION_free($) ; -sub SESSION_get_app_data($) ; -sub SESSION_get_ex_data($$) ; -sub SESSION_get_ex_new_index($;$$$$) ; -sub SESSION_get_master_key($) ; -sub SESSION_get_time($) ; -sub SESSION_get_timeout($) ; -sub SESSION_is_resumable($) ; -sub SESSION_new() ; -sub SESSION_print($$) ; -sub SESSION_print_fp($$) ; -sub SESSION_set_app_data($$) ; -sub SESSION_set_ex_data($$$) ; -sub SESSION_set_time($$) ; -sub SESSION_set_timeout($$) ; -sub SESSION_up_ref($) ; -sub SHA1($) ; -sub SHA256($) ; -sub SHA512($) ; -sub SO_ATTACH_FILTER() ; -sub SO_BACKLOG() ; -sub SO_CHAMELEON() ; -sub SO_DETACH_FILTER() ; -sub SO_DGRAM_ERRIND() ; -sub SO_DOMAIN() ; -sub SO_FAMILY() ; -sub SO_PASSCRED() ; -sub SO_PASSIFNAME() ; -sub SO_PEERCRED() ; -sub SO_PROTOCOL() ; -sub SO_PROTOTYPE() ; -sub SO_REUSEPORT() ; -sub SO_SECURITY_AUTHENTICATION() ; -sub SO_SECURITY_ENCRYPTION_NETWORK() ; -sub SO_SECURITY_ENCRYPTION_TRANSPORT() ; -sub SO_STATE() ; -sub SO_XOPEN() ; -sub SO_XSE() ; -sub SSL_get0_session($) ; -sub SSLeay() ; -sub SSLeay_add_ssl_algorithms() ; -sub SSLeay_version(;$) ; -sub SSLv23_client_method() ; -sub SSLv23_method() ; -sub SSLv23_server_method() ; -sub TLS_client_method() ; -sub TLS_method() ; -sub TLS_server_method() ; -sub TLSv1_1_client_method() ; -sub TLSv1_1_method() ; -sub TLSv1_1_server_method() ; -sub TLSv1_2_client_method() ; -sub TLSv1_2_method() ; -sub TLSv1_2_server_method() ; -sub TLSv1_client_method() ; -sub TLSv1_method() ; -sub TLSv1_server_method() ; -sub UIO_MAXIOV() ; -sub X509V3_EXT_d2i($) ; -sub X509V3_EXT_print($;$$) ; -sub X509_CRL_digest($$) ; -sub X509_CRL_free($) ; -sub X509_CRL_get_ext($$) ; -sub X509_CRL_get_ext_by_NID($$;$) ; -sub X509_CRL_get_ext_count($) ; -sub X509_CRL_get_issuer($) ; -sub X509_CRL_get_lastUpdate($) ; -sub X509_CRL_get_nextUpdate($) ; -sub X509_CRL_get_version($) ; -sub X509_CRL_new() ; -sub X509_CRL_set_issuer_name($$) ; -sub X509_CRL_set_lastUpdate($$) ; -sub X509_CRL_set_nextUpdate($$) ; -sub X509_CRL_set_version($$) ; -sub X509_CRL_sign($$$) ; -sub X509_CRL_sort($) ; -sub X509_CRL_verify($$) ; -sub X509_EXTENSION_get_critical($) ; -sub X509_EXTENSION_get_data($) ; -sub X509_EXTENSION_get_object($) ; -sub X509_LOOKUP_add_dir($$$) ; -sub X509_LOOKUP_hash_dir() ; -sub X509_NAME_ENTRY_get_data($) ; -sub X509_NAME_ENTRY_get_object($) ; -sub X509_NAME_add_entry_by_NID($$$$;$$) ; -sub X509_NAME_add_entry_by_OBJ($$$$;$$) ; -sub X509_NAME_add_entry_by_txt($$$$;$$) ; -sub X509_NAME_cmp($$) ; -sub X509_NAME_digest($$) ; -sub X509_NAME_entry_count($) ; -sub X509_NAME_get_entry($$) ; -sub X509_NAME_get_text_by_NID($$) ; -sub X509_NAME_hash($) ; -sub X509_NAME_new() ; -sub X509_NAME_oneline($) ; -sub X509_NAME_print_ex($;$$) ; -sub X509_REQ_add1_attr_by_NID($$$$) ; -sub X509_REQ_digest($$) ; -sub X509_REQ_free($) ; -sub X509_REQ_get_attr_by_NID($$;$) ; -sub X509_REQ_get_attr_by_OBJ($$;$) ; -sub X509_REQ_get_attr_count($) ; -sub X509_REQ_get_pubkey($) ; -sub X509_REQ_get_subject_name($) ; -sub X509_REQ_get_version($) ; -sub X509_REQ_new() ; -sub X509_REQ_set_pubkey($$) ; -sub X509_REQ_set_subject_name($$) ; -sub X509_REQ_set_version($$) ; -sub X509_REQ_sign($$$) ; -sub X509_REQ_verify($$) ; -sub X509_STORE_CTX_free($) ; -sub X509_STORE_CTX_get_app_data($) ; -sub X509_STORE_CTX_get_current_cert($) ; -sub X509_STORE_CTX_get_error($) ; -sub X509_STORE_CTX_get_error_depth($) ; -sub X509_STORE_CTX_get_ex_data($$) ; -sub X509_STORE_CTX_get_ex_new_index($;$$$$) ; -sub X509_STORE_CTX_init($;$$$) ; -sub X509_STORE_CTX_new() ; -sub X509_STORE_CTX_set_app_data($$) ; -sub X509_STORE_CTX_set_cert($$) ; -sub X509_STORE_CTX_set_error($$) ; -sub X509_STORE_CTX_set_ex_data($$$) ; -sub X509_STORE_add_cert($$) ; -sub X509_STORE_add_crl($$) ; -sub X509_STORE_add_lookup($$) ; -sub X509_STORE_free($) ; -sub X509_STORE_new() ; -sub X509_STORE_set1_param($$) ; -sub X509_STORE_set_flags($$) ; -sub X509_STORE_set_purpose($$) ; -sub X509_STORE_set_trust($$) ; -sub X509_VERIFY_PARAM_add0_policy($$) ; -sub X509_VERIFY_PARAM_add0_table($) ; -sub X509_VERIFY_PARAM_add1_host($$) ; -sub X509_VERIFY_PARAM_clear_flags($$) ; -sub X509_VERIFY_PARAM_free($) ; -sub X509_VERIFY_PARAM_get0_peername($) ; -sub X509_VERIFY_PARAM_get_depth($) ; -sub X509_VERIFY_PARAM_get_flags($) ; -sub X509_VERIFY_PARAM_inherit($$) ; -sub X509_VERIFY_PARAM_lookup($) ; -sub X509_VERIFY_PARAM_new() ; -sub X509_VERIFY_PARAM_set1($$) ; -sub X509_VERIFY_PARAM_set1_email($$) ; -sub X509_VERIFY_PARAM_set1_host($$) ; -sub X509_VERIFY_PARAM_set1_ip($$) ; -sub X509_VERIFY_PARAM_set1_ip_asc($$) ; -sub X509_VERIFY_PARAM_set1_name($$) ; -sub X509_VERIFY_PARAM_set1_policies($$) ; -sub X509_VERIFY_PARAM_set_depth($$) ; -sub X509_VERIFY_PARAM_set_flags($$) ; -sub X509_VERIFY_PARAM_set_hostflags($$) ; -sub X509_VERIFY_PARAM_set_purpose($$) ; -sub X509_VERIFY_PARAM_set_time($$) ; -sub X509_VERIFY_PARAM_set_trust($$) ; -sub X509_VERIFY_PARAM_table_cleanup() ; -sub X509_certificate_type($;$) ; -sub X509_check_email($$;$) ; -sub X509_check_host($$;$$) ; -sub X509_check_ip($$;$) ; -sub X509_check_ip_asc($$;$) ; -sub X509_digest($$) ; -sub X509_free($) ; -sub X509_get0_serialNumber($) ; -sub X509_get_X509_PUBKEY($) ; -sub X509_get_app_data($) ; -sub X509_get_ex_data($$) ; -sub X509_get_ex_new_index($;$$$$) ; -sub X509_get_ext($$) ; -sub X509_get_ext_by_NID($$;$) ; -sub X509_get_ext_count($) ; -sub X509_get_fingerprint($$) ; -sub X509_get_issuer_name($) ; -sub X509_get_notAfter($) ; -sub X509_get_notBefore($) ; -sub X509_get_pubkey($) ; -sub X509_get_serialNumber($) ; -sub X509_get_subjectAltNames($) ; -sub X509_get_subject_name($) ; -sub X509_get_version($) ; -sub X509_gmtime_adj($$) ; -sub X509_issuer_and_serial_hash($) ; -sub X509_issuer_name_hash($) ; -sub X509_load_cert_crl_file($$$) ; -sub X509_load_cert_file($$$) ; -sub X509_load_crl_file($$$) ; -sub X509_new() ; -sub X509_policy_level_get0_node($$) ; -sub X509_policy_level_node_count($) ; -sub X509_policy_node_get0_parent($) ; -sub X509_policy_node_get0_policy($) ; -sub X509_policy_node_get0_qualifiers($) ; -sub X509_policy_tree_free($) ; -sub X509_policy_tree_get0_level($$) ; -sub X509_policy_tree_get0_policies($) ; -sub X509_policy_tree_get0_user_policies($) ; -sub X509_policy_tree_level_count($) ; -sub X509_pubkey_digest($$) ; -sub X509_set_app_data($$) ; -sub X509_set_ex_data($$$) ; -sub X509_set_issuer_name($$) ; -sub X509_set_pubkey($$) ; -sub X509_set_serialNumber($$) ; -sub X509_set_subject_name($$) ; -sub X509_set_version($$) ; -sub X509_sign($$$) ; -sub X509_subject_name_hash($) ; -sub X509_verify($$) ; -sub X509_verify_cert($) ; -sub X509_verify_cert_error_string($) ; -sub accept($) ; -sub add_client_CA($$) ; -sub add_file_cert_subjects_to_stack($$) ; -sub add_ssl_algorithms() ; -sub alert_desc_string($) ; -sub alert_desc_string_long($) ; -sub alert_type_string($) ; -sub alert_type_string_long($) ; -sub callback_ctrl($$$) ; -sub check_private_key($) ; -sub clear($) ; -sub clear_num_renegotiations($) ; -sub client_version($) ; -sub connect($) ; -sub constant($) ; -sub copy_session_id($$) ; -sub ctrl($$$$) ; -sub d2i_OCSP_REQUEST($) ; -sub d2i_OCSP_RESPONSE($) ; -sub d2i_SSL_SESSION($) ; -sub d2i_X509_CRL_bio($;$) ; -sub d2i_X509_REQ_bio($;$) ; -sub d2i_X509_bio($;$) ; -sub debug_read; -sub do_handshake($) ; -sub do_https2; -sub do_https3; -sub do_https4; -sub do_https; -sub do_httpx2; -sub do_httpx3; -sub do_httpx4; -sub dump_peer_certificate($) ; -sub dup($) ; -sub export_keying_material($$$;$) ; -sub free($) ; -sub get0_param($) ; -sub get1_session($) ; -sub get_SSL_CTX($) ; -sub get_app_data($) ; -sub get_certificate($) ; -sub get_cipher($) ; -sub get_cipher_bits($;$) ; -sub get_cipher_list($$) ; -sub get_client_CA_list($) ; -sub get_client_random($) ; -sub get_current_cipher($) ; -sub get_default_timeout($) ; -sub get_error($$) ; -sub get_ex_data($$) ; -sub get_ex_new_index($;$$$$) ; -sub get_fd($) ; -sub get_finished($$;$) ; -sub get_http3; -sub get_http4; -sub get_http; -sub get_https3; -sub get_https4; -sub get_https; -sub get_httpx3; -sub get_httpx4; -sub get_httpx; -sub get_keyblock_size($) ; -sub get_max_proto_version($) ; -sub get_min_proto_version($) ; -sub get_mode($) ; -sub get_num_tickets($) ; -sub get_options($) ; -sub get_peer_cert_chain($) ; -sub get_peer_certificate($) ; -sub get_peer_finished($$;$) ; -sub get_quiet_shutdown($) ; -sub get_rbio($) ; -sub get_read_ahead($) ; -sub get_security_level($) ; -sub get_server_random($) ; -sub get_servername($;$) ; -sub get_servername_type($) ; -sub get_session($) ; -sub get_shared_ciphers($;$$) ; -sub get_shutdown($) ; -sub get_ssl_method($) ; -sub get_state($) ; -sub get_time($) ; -sub get_timeout($) ; -sub get_verify_depth($) ; -sub get_verify_mode($) ; -sub get_verify_result($) ; -sub get_version($) ; -sub get_wbio($) ; -sub has_pending($) ; -sub head_http3; -sub head_http4; -sub head_http; -sub head_https3; -sub head_https4; -sub head_https; -sub head_httpx3; -sub head_httpx4; -sub head_httpx; -sub hello() ; -sub http_cat; -sub https_cat; -sub httpx_cat; -sub i2d_OCSP_REQUEST($) ; -sub i2d_OCSP_RESPONSE($) ; -sub i2d_SSL_SESSION($) ; -sub in_accept_init($) ; -sub in_before($) ; -sub in_connect_init($) ; -sub in_init($) ; -sub inet_aton; -sub inet_ntoa; -sub initialize; -sub is_dtls($) ; -sub is_init_finished($) ; -sub library_init() ; -sub load_client_CA_file($) ; -sub load_error_strings() ; -sub make_form; -sub make_headers; -sub new($) ; -sub new_x_ctx; -sub num_renegotiations($) ; -sub open_proxy_tcp_connection; -sub open_tcp_connection; -sub pack_sockaddr_in6; -sub pack_sockaddr_in; -sub pack_sockaddr_un; -sub peek($;$) ; -sub peek_ex($;$) ; -sub pending($) ; -sub post_http3; -sub post_http4; -sub post_http; -sub post_https3; -sub post_https4; -sub post_https; -sub post_httpx3; -sub post_httpx4; -sub post_httpx; -sub put_http3; -sub put_http4; -sub put_http; -sub put_https3; -sub put_https4; -sub put_https; -sub put_httpx3; -sub put_httpx4; -sub put_httpx; -sub randomize(;$$$) ; -sub read($;$) ; -sub read_ex($;$) ; -sub renegotiate($) ; -sub rstate_string($) ; -sub rstate_string_long($) ; -sub session_reused($) ; -sub set1_curves_list($$) ; -sub set1_groups_list($$) ; -sub set1_param($$) ; -sub set_SSL_CTX($$) ; -sub set_accept_state($) ; -sub set_alpn_protos($;$) ; -sub set_app_data($$) ; -sub set_bio($$$) ; -sub set_cert_and_key($$$) ; -sub set_cipher_list($$) ; -sub set_ciphersuites($$) ; -sub set_client_CA_list($$) ; -sub set_connect_state($) ; -sub set_default_passwd_cb($;$) ; -sub set_default_passwd_cb_userdata($;$) ; -sub set_ex_data($$$) ; -sub set_fd($$) ; -sub set_info_callback($$;$) ; -sub set_max_proto_version($$) ; -sub set_min_proto_version($$) ; -sub set_mode($$) ; -sub set_num_tickets($$) ; -sub set_options($$) ; -sub set_post_handshake_auth($$) ; -sub set_pref_cipher($$) ; -sub set_proxy($$;**) ; -sub set_psk_client_callback($;$) ; -sub set_purpose($$) ; -sub set_quiet_shutdown($$) ; -sub set_read_ahead($;$) ; -sub set_rfd($$) ; -sub set_security_level($$) ; -sub set_server_cert_and_key($$$) ; -sub set_session($$) ; -sub set_session_id_context($$$) ; -sub set_session_secret_cb($;$$) ; -sub set_session_ticket_ext($$) ; -sub set_session_ticket_ext_cb($$;$) ; -sub set_shutdown($$) ; -sub set_ssl_method($$) ; -sub set_state($$) ; -sub set_time($$) ; -sub set_timeout($$) ; -sub set_tlsext_host_name($$) ; -sub set_tlsext_status_ocsp_resp($$) ; -sub set_tlsext_status_type($$) ; -sub set_tmp_dh($$) ; -sub set_tmp_dh_callback($$) ; -sub set_trust($$) ; -sub set_verify($$$) ; -sub set_verify_depth($$) ; -sub set_verify_result($$) ; -sub set_wfd($$) ; -sub shutdown($) ; -sub sk_X509_INFO_free($) ; -sub sk_X509_INFO_num($) ; -sub sk_X509_INFO_value($$) ; -sub sk_X509_NAME_free($) ; -sub sk_X509_NAME_num($) ; -sub sk_X509_NAME_value($$) ; -sub sk_X509_free($) ; -sub sk_X509_new_null() ; -sub sk_X509_push($$) ; -sub sockaddr_family; -sub ssl_read_CRLF($;$) ; -sub ssl_read_all; -sub ssl_read_until($;$$) ; -sub ssl_write_CRLF($$) ; -sub ssl_write_all; -sub sslcat; -sub state($) ; -sub state_string($) ; -sub state_string_long($) ; -sub tcp_read_CRLF; -sub tcp_read_all; -sub tcp_read_until; -sub tcp_write_CRLF; -sub tcp_write_all; -sub tcpcat; -sub tcpxcat; -sub total_renegotiations($) ; -sub unpack_sockaddr_in6; -sub unpack_sockaddr_in; -sub unpack_sockaddr_un; -sub use_PrivateKey($$) ; -sub use_PrivateKey_ASN1($$$$) ; -sub use_PrivateKey_file($$$) ; -sub use_RSAPrivateKey($$) ; -sub use_RSAPrivateKey_ASN1($$$) ; -sub use_RSAPrivateKey_file($$$) ; -sub use_certificate($$) ; -sub use_certificate_ASN1($$$) ; -sub use_certificate_chain_file($$) ; -sub use_certificate_file($$$) ; -sub verify_client_post_handshake($) ; -sub version($) ; -sub want($) ; -sub want_X509_lookup; -sub want_nothing; -sub want_read; -sub want_write; -sub write($$) ; -sub write_ex($$) ; -sub write_partial($$$$) ; -} -package ODBM_File { -sub DELETE; -sub DESTROY; -sub FETCH; -sub FIRSTKEY; -sub NEXTKEY; -sub STORE; -sub TIEHASH; -sub filter_fetch_key; -sub filter_fetch_value; -sub filter_store_key; -sub filter_store_value; -} -package Opcode { -sub _safe_call_sv($$$) ; -sub _safe_pkg_prep($) ; -sub define_optag($$) ; -sub deny($;@) ; -sub deny_only($;@) ; -sub empty_opset() ; -sub full_opset() ; -sub invert_opset($) ; -sub opcodes() ; -sub opdesc(;@) ; -sub opmask() ; -sub opmask_add($) ; -sub opset(;@) ; -sub opset_to_ops($;$) ; -sub permit($;@) ; -sub permit_only($;@) ; -sub verify_opset($;$) ; -} -package OpenGL { -sub __had_dbuffer_hack; -sub _have_freeglut; -sub _have_gl; -sub _have_glp; -sub _have_glu; -sub _have_glut; -sub _have_glx; -sub constant; -sub done_glutInit; -sub glAccum; -sub glAlphaFunc; -sub glAreTexturesResident_c; -sub glAreTexturesResident_p; -sub glAreTexturesResident_s; -sub glArrayElement; -sub glBegin; -sub glBindTexture; -sub glBitmap_c; -sub glBitmap_p; -sub glBitmap_s; -sub glBlendFunc; -sub glCallList; -sub glCallLists_c; -sub glCallLists_p; -sub glCallLists_s; -sub glClear; -sub glClearAccum; -sub glClearColor; -sub glClearDepth; -sub glClearIndex; -sub glClearStencil; -sub glClipPlane_c; -sub glClipPlane_p; -sub glClipPlane_s; -sub glColor3b; -sub glColor3bv_c; -sub glColor3bv_p; -sub glColor3bv_s; -sub glColor3d; -sub glColor3dv_c; -sub glColor3dv_p; -sub glColor3dv_s; -sub glColor3f; -sub glColor3fv_c; -sub glColor3fv_p; -sub glColor3fv_s; -sub glColor3i; -sub glColor3iv_c; -sub glColor3iv_p; -sub glColor3iv_s; -sub glColor3s; -sub glColor3sv_c; -sub glColor3sv_p; -sub glColor3sv_s; -sub glColor3ub; -sub glColor3ubv_c; -sub glColor3ubv_p; -sub glColor3ubv_s; -sub glColor3ui; -sub glColor3uiv_c; -sub glColor3uiv_p; -sub glColor3uiv_s; -sub glColor3us; -sub glColor3usv_c; -sub glColor3usv_p; -sub glColor3usv_s; -sub glColor4b; -sub glColor4bv_c; -sub glColor4bv_p; -sub glColor4bv_s; -sub glColor4d; -sub glColor4dv_c; -sub glColor4dv_p; -sub glColor4dv_s; -sub glColor4f; -sub glColor4fv_c; -sub glColor4fv_p; -sub glColor4fv_s; -sub glColor4i; -sub glColor4iv_c; -sub glColor4iv_p; -sub glColor4iv_s; -sub glColor4s; -sub glColor4sv_c; -sub glColor4sv_p; -sub glColor4sv_s; -sub glColor4ub; -sub glColor4ubv_c; -sub glColor4ubv_p; -sub glColor4ubv_s; -sub glColor4ui; -sub glColor4uiv_c; -sub glColor4uiv_p; -sub glColor4uiv_s; -sub glColor4us; -sub glColor4usv_c; -sub glColor4usv_p; -sub glColor4usv_s; -sub glColorMask; -sub glColorMaterial; -sub glColorPointerEXT_c; -sub glColorPointerEXT_p; -sub glColorPointerEXT_s; -sub glColorPointer_c; -sub glColorPointer_p; -sub glColorPointer_s; -sub glCopyPixels; -sub glCopyTexImage1D; -sub glCopyTexImage2D; -sub glCopyTexSubImage1D; -sub glCopyTexSubImage2D; -sub glCullFace; -sub glDeleteLists; -sub glDeleteTextures_c; -sub glDeleteTextures_p; -sub glDeleteTextures_s; -sub glDepthFunc; -sub glDepthMask; -sub glDepthRange; -sub glDisable; -sub glDisableClientState; -sub glDrawArrays; -sub glDrawBuffer; -sub glDrawElements_c; -sub glDrawElements_p; -sub glDrawElements_s; -sub glDrawPixels_c; -sub glDrawPixels_p; -sub glDrawPixels_s; -sub glEdgeFlag; -sub glEdgeFlagPointerEXT_c; -sub glEdgeFlagPointerEXT_p; -sub glEdgeFlagPointerEXT_s; -sub glEdgeFlagPointer_c; -sub glEdgeFlagPointer_p; -sub glEdgeFlagPointer_s; -sub glEnable; -sub glEnableClientState; -sub glEnd; -sub glEndList; -sub glEvalCoord1d; -sub glEvalCoord1f; -sub glEvalCoord2d; -sub glEvalCoord2f; -sub glEvalMesh1; -sub glEvalMesh2; -sub glEvalPoint1; -sub glEvalPoint2; -sub glFeedbackBuffer_c; -sub glFinish; -sub glFlush; -sub glFogf; -sub glFogfv_c; -sub glFogfv_p; -sub glFogfv_s; -sub glFogi; -sub glFogiv_c; -sub glFogiv_p; -sub glFogiv_s; -sub glFrontFace; -sub glFrustum; -sub glGenLists; -sub glGenTextures_c; -sub glGenTextures_p; -sub glGenTextures_s; -sub glGetBooleanv_c; -sub glGetBooleanv_p; -sub glGetBooleanv_s; -sub glGetClipPlane_c; -sub glGetClipPlane_p; -sub glGetClipPlane_s; -sub glGetDoublev_c; -sub glGetDoublev_p; -sub glGetDoublev_s; -sub glGetError; -sub glGetFloatv_c; -sub glGetFloatv_p; -sub glGetFloatv_s; -sub glGetIntegerv_c; -sub glGetIntegerv_p; -sub glGetIntegerv_s; -sub glGetLightfv_c; -sub glGetLightfv_p; -sub glGetLightfv_s; -sub glGetLightiv_c; -sub glGetLightiv_p; -sub glGetLightiv_s; -sub glGetMapdv_c; -sub glGetMapdv_p; -sub glGetMapdv_s; -sub glGetMapfv_c; -sub glGetMapfv_p; -sub glGetMapfv_s; -sub glGetMapiv_c; -sub glGetMapiv_p; -sub glGetMapiv_s; -sub glGetMaterialfv_c; -sub glGetMaterialfv_p; -sub glGetMaterialfv_s; -sub glGetMaterialiv_c; -sub glGetMaterialiv_p; -sub glGetMaterialiv_s; -sub glGetPixelMapfv_c; -sub glGetPixelMapfv_p; -sub glGetPixelMapfv_s; -sub glGetPixelMapuiv_c; -sub glGetPixelMapuiv_p; -sub glGetPixelMapuiv_s; -sub glGetPixelMapusv_c; -sub glGetPixelMapusv_p; -sub glGetPixelMapusv_s; -sub glGetPointerv_c; -sub glGetPointerv_p; -sub glGetPointerv_s; -sub glGetPolygonStipple_c; -sub glGetPolygonStipple_p; -sub glGetPolygonStipple_s; -sub glGetString; -sub glGetTexEnvfv_c; -sub glGetTexEnvfv_p; -sub glGetTexEnvfv_s; -sub glGetTexEnviv_c; -sub glGetTexEnviv_p; -sub glGetTexEnviv_s; -sub glGetTexGendv_c; -sub glGetTexGendv_p; -sub glGetTexGendv_s; -sub glGetTexGenfv_c; -sub glGetTexGenfv_p; -sub glGetTexGenfv_s; -sub glGetTexGeniv_c; -sub glGetTexGeniv_p; -sub glGetTexGeniv_s; -sub glGetTexImage_c; -sub glGetTexImage_p; -sub glGetTexImage_s; -sub glGetTexLevelParameterfv_c; -sub glGetTexLevelParameterfv_p; -sub glGetTexLevelParameterfv_s; -sub glGetTexLevelParameteriv_c; -sub glGetTexLevelParameteriv_p; -sub glGetTexLevelParameteriv_s; -sub glGetTexParameterfv_c; -sub glGetTexParameterfv_p; -sub glGetTexParameterfv_s; -sub glGetTexParameteriv_c; -sub glGetTexParameteriv_p; -sub glGetTexParameteriv_s; -sub glHint; -sub glIndexMask; -sub glIndexPointerEXT_c; -sub glIndexPointerEXT_p; -sub glIndexPointerEXT_s; -sub glIndexPointer_c; -sub glIndexPointer_p; -sub glIndexPointer_s; -sub glIndexd; -sub glIndexi; -sub glInitNames; -sub glInterleavedArrays_c; -sub glIsEnabled; -sub glIsList; -sub glIsTexture; -sub glLightModelf; -sub glLightModelfv_c; -sub glLightModelfv_p; -sub glLightModelfv_s; -sub glLightModeli; -sub glLightModeliv_c; -sub glLightModeliv_p; -sub glLightModeliv_s; -sub glLightf; -sub glLightfv_c; -sub glLightfv_p; -sub glLightfv_s; -sub glLighti; -sub glLightiv_c; -sub glLightiv_p; -sub glLightiv_s; -sub glLineStipple; -sub glLineWidth; -sub glListBase; -sub glLoadIdentity; -sub glLoadMatrixd_c; -sub glLoadMatrixd_p; -sub glLoadMatrixd_s; -sub glLoadMatrixf_c; -sub glLoadMatrixf_p; -sub glLoadMatrixf_s; -sub glLoadName; -sub glLogicOp; -sub glMap1d_c; -sub glMap1d_p; -sub glMap1d_s; -sub glMap1f_c; -sub glMap1f_p; -sub glMap1f_s; -sub glMap2d_c; -sub glMap2d_p; -sub glMap2d_s; -sub glMap2f_c; -sub glMap2f_p; -sub glMap2f_s; -sub glMapGrid1d; -sub glMapGrid1f; -sub glMapGrid2d; -sub glMapGrid2f; -sub glMaterialf; -sub glMaterialfv_c; -sub glMaterialfv_p; -sub glMaterialfv_s; -sub glMateriali; -sub glMaterialiv_c; -sub glMaterialiv_p; -sub glMaterialiv_s; -sub glMatrixMode; -sub glMultMatrixd_p; -sub glMultMatrixf_p; -sub glNewList; -sub glNormal3b; -sub glNormal3bv_c; -sub glNormal3bv_p; -sub glNormal3bv_s; -sub glNormal3d; -sub glNormal3dv_c; -sub glNormal3dv_p; -sub glNormal3dv_s; -sub glNormal3f; -sub glNormal3fv_c; -sub glNormal3fv_p; -sub glNormal3fv_s; -sub glNormal3i; -sub glNormal3iv_c; -sub glNormal3iv_p; -sub glNormal3iv_s; -sub glNormal3s; -sub glNormal3sv_c; -sub glNormal3sv_p; -sub glNormal3sv_s; -sub glNormalPointerEXT_c; -sub glNormalPointerEXT_p; -sub glNormalPointerEXT_s; -sub glNormalPointer_c; -sub glNormalPointer_p; -sub glNormalPointer_s; -sub glOrtho; -sub glPassThrough; -sub glPixelMapfv_c; -sub glPixelMapfv_p; -sub glPixelMapfv_s; -sub glPixelMapuiv_c; -sub glPixelMapuiv_p; -sub glPixelMapuiv_s; -sub glPixelMapusv_c; -sub glPixelMapusv_p; -sub glPixelMapusv_s; -sub glPixelStoref; -sub glPixelStorei; -sub glPixelTransferf; -sub glPixelTransferi; -sub glPixelZoom; -sub glPointSize; -sub glPolygonMode; -sub glPolygonOffset; -sub glPolygonStipple_c; -sub glPolygonStipple_p; -sub glPolygonStipple_s; -sub glPopAttrib; -sub glPopClientAttrib; -sub glPopMatrix; -sub glPopName; -sub glPrioritizeTextures_c; -sub glPrioritizeTextures_p; -sub glPrioritizeTextures_s; -sub glPushAttrib; -sub glPushClientAttrib; -sub glPushMatrix; -sub glPushName; -sub glRasterPos2d; -sub glRasterPos2dv_c; -sub glRasterPos2dv_p; -sub glRasterPos2dv_s; -sub glRasterPos2f; -sub glRasterPos2fv_c; -sub glRasterPos2fv_p; -sub glRasterPos2fv_s; -sub glRasterPos2i; -sub glRasterPos2iv_c; -sub glRasterPos2iv_p; -sub glRasterPos2iv_s; -sub glRasterPos2s; -sub glRasterPos2sv_c; -sub glRasterPos2sv_p; -sub glRasterPos2sv_s; -sub glRasterPos3d; -sub glRasterPos3dv_c; -sub glRasterPos3dv_p; -sub glRasterPos3dv_s; -sub glRasterPos3f; -sub glRasterPos3fv_c; -sub glRasterPos3fv_p; -sub glRasterPos3fv_s; -sub glRasterPos3i; -sub glRasterPos3iv_c; -sub glRasterPos3iv_p; -sub glRasterPos3iv_s; -sub glRasterPos3s; -sub glRasterPos3sv_c; -sub glRasterPos3sv_p; -sub glRasterPos3sv_s; -sub glRasterPos4d; -sub glRasterPos4dv_c; -sub glRasterPos4dv_p; -sub glRasterPos4dv_s; -sub glRasterPos4f; -sub glRasterPos4fv_c; -sub glRasterPos4fv_p; -sub glRasterPos4fv_s; -sub glRasterPos4i; -sub glRasterPos4iv_c; -sub glRasterPos4iv_p; -sub glRasterPos4iv_s; -sub glRasterPos4s; -sub glRasterPos4sv_c; -sub glRasterPos4sv_p; -sub glRasterPos4sv_s; -sub glReadBuffer; -sub glReadPixels_c; -sub glReadPixels_p; -sub glReadPixels_s; -sub glRectd; -sub glRectdv_c; -sub glRectdv_p; -sub glRectdv_s; -sub glRectf; -sub glRectfv_c; -sub glRectfv_p; -sub glRectfv_s; -sub glRecti; -sub glRectiv_c; -sub glRectiv_p; -sub glRectiv_s; -sub glRects; -sub glRectsv_c; -sub glRectsv_p; -sub glRectsv_s; -sub glRenderMode; -sub glRotated; -sub glRotatef; -sub glScaled; -sub glScalef; -sub glScissor; -sub glSelectBuffer_c; -sub glShadeModel; -sub glStencilFunc; -sub glStencilMask; -sub glStencilOp; -sub glTexCoord1d; -sub glTexCoord1dv_c; -sub glTexCoord1dv_p; -sub glTexCoord1dv_s; -sub glTexCoord1f; -sub glTexCoord1fv_c; -sub glTexCoord1fv_p; -sub glTexCoord1fv_s; -sub glTexCoord1i; -sub glTexCoord1iv_c; -sub glTexCoord1iv_p; -sub glTexCoord1iv_s; -sub glTexCoord1s; -sub glTexCoord1sv_c; -sub glTexCoord1sv_p; -sub glTexCoord1sv_s; -sub glTexCoord2d; -sub glTexCoord2dv_c; -sub glTexCoord2dv_p; -sub glTexCoord2dv_s; -sub glTexCoord2f; -sub glTexCoord2fv_c; -sub glTexCoord2fv_p; -sub glTexCoord2fv_s; -sub glTexCoord2i; -sub glTexCoord2iv_c; -sub glTexCoord2iv_p; -sub glTexCoord2iv_s; -sub glTexCoord2s; -sub glTexCoord2sv_c; -sub glTexCoord2sv_p; -sub glTexCoord2sv_s; -sub glTexCoord3d; -sub glTexCoord3dv_c; -sub glTexCoord3dv_p; -sub glTexCoord3dv_s; -sub glTexCoord3f; -sub glTexCoord3fv_c; -sub glTexCoord3fv_p; -sub glTexCoord3fv_s; -sub glTexCoord3i; -sub glTexCoord3iv_c; -sub glTexCoord3iv_p; -sub glTexCoord3iv_s; -sub glTexCoord3s; -sub glTexCoord3sv_c; -sub glTexCoord3sv_p; -sub glTexCoord3sv_s; -sub glTexCoord4d; -sub glTexCoord4dv_c; -sub glTexCoord4dv_p; -sub glTexCoord4dv_s; -sub glTexCoord4f; -sub glTexCoord4fv_c; -sub glTexCoord4fv_p; -sub glTexCoord4fv_s; -sub glTexCoord4i; -sub glTexCoord4iv_c; -sub glTexCoord4iv_p; -sub glTexCoord4iv_s; -sub glTexCoord4s; -sub glTexCoord4sv_c; -sub glTexCoord4sv_p; -sub glTexCoord4sv_s; -sub glTexCoordPointerEXT_c; -sub glTexCoordPointerEXT_p; -sub glTexCoordPointerEXT_s; -sub glTexCoordPointer_c; -sub glTexCoordPointer_p; -sub glTexCoordPointer_s; -sub glTexEnvf; -sub glTexEnvfv_p; -sub glTexEnvfv_s; -sub glTexEnvi; -sub glTexEnviv_p; -sub glTexEnviv_s; -sub glTexGend; -sub glTexGendv_c; -sub glTexGendv_p; -sub glTexGendv_s; -sub glTexGenf; -sub glTexGenfv_c; -sub glTexGenfv_p; -sub glTexGenfv_s; -sub glTexGeni; -sub glTexGeniv_c; -sub glTexGeniv_p; -sub glTexGeniv_s; -sub glTexImage1D_c; -sub glTexImage1D_p; -sub glTexImage1D_s; -sub glTexImage2D_c; -sub glTexImage2D_p; -sub glTexImage2D_s; -sub glTexParameterf; -sub glTexParameterfv_c; -sub glTexParameterfv_p; -sub glTexParameterfv_s; -sub glTexParameteri; -sub glTexParameteriv_c; -sub glTexParameteriv_p; -sub glTexParameteriv_s; -sub glTexSubImage1D_c; -sub glTexSubImage1D_p; -sub glTexSubImage1D_s; -sub glTexSubImage2D_c; -sub glTexSubImage2D_p; -sub glTexSubImage2D_s; -sub glTranslated; -sub glTranslatef; -sub glVertex2d; -sub glVertex2dv_c; -sub glVertex2dv_p; -sub glVertex2dv_s; -sub glVertex2f; -sub glVertex2fv_c; -sub glVertex2fv_p; -sub glVertex2fv_s; -sub glVertex2i; -sub glVertex2iv_c; -sub glVertex2iv_p; -sub glVertex2iv_s; -sub glVertex2s; -sub glVertex2sv_c; -sub glVertex2sv_p; -sub glVertex2sv_s; -sub glVertex3d; -sub glVertex3dv_c; -sub glVertex3dv_p; -sub glVertex3dv_s; -sub glVertex3f; -sub glVertex3fv_c; -sub glVertex3fv_p; -sub glVertex3fv_s; -sub glVertex3i; -sub glVertex3iv_c; -sub glVertex3iv_p; -sub glVertex3iv_s; -sub glVertex3s; -sub glVertex3sv_c; -sub glVertex3sv_p; -sub glVertex3sv_s; -sub glVertex4d; -sub glVertex4dv_c; -sub glVertex4dv_p; -sub glVertex4dv_s; -sub glVertex4f; -sub glVertex4fv_c; -sub glVertex4fv_p; -sub glVertex4fv_s; -sub glVertex4i; -sub glVertex4iv_c; -sub glVertex4iv_p; -sub glVertex4iv_s; -sub glVertex4s; -sub glVertex4sv_c; -sub glVertex4sv_p; -sub glVertex4sv_s; -sub glVertexPointerEXT_c; -sub glVertexPointerEXT_p; -sub glVertexPointerEXT_s; -sub glVertexPointer_c; -sub glVertexPointer_p; -sub glVertexPointer_s; -sub glViewport; -sub glpHasGLUT; -sub glpHasGPGPU; -sub glpReadTex; -sub glpSetDebug; -sub gluBeginCurve; -sub gluBeginPolygon; -sub gluBeginSurface; -sub gluBeginTrim; -sub gluBuild1DMipmaps_c; -sub gluBuild1DMipmaps_s; -sub gluBuild2DMipmaps_c; -sub gluBuild2DMipmaps_s; -sub gluCylinder; -sub gluDeleteNurbsRenderer; -sub gluDeleteQuadric; -sub gluDeleteTess; -sub gluDisk; -sub gluEndCurve; -sub gluEndPolygon; -sub gluEndSurface; -sub gluEndTrim; -sub gluErrorString; -sub gluGetNurbsProperty_p; -sub gluGetString; -sub gluGetTessProperty_p; -sub gluLoadSamplingMatrices_p; -sub gluLookAt; -sub gluNewNurbsRenderer; -sub gluNewQuadric; -sub gluNewTess; -sub gluNextContour; -sub gluNurbsCurve_c; -sub gluNurbsProperty; -sub gluNurbsSurface_c; -sub gluOrtho2D; -sub gluPartialDisk; -sub gluPerspective; -sub gluPickMatrix_p; -sub gluProject_p; -sub gluPwlCurve_c; -sub gluQuadricDrawStyle; -sub gluQuadricNormals; -sub gluQuadricOrientation; -sub gluQuadricTexture; -sub gluScaleImage_s; -sub gluSphere; -sub gluTessBeginContour; -sub gluTessBeginPolygon; -sub gluTessCallback; -sub gluTessEndContour; -sub gluTessEndPolygon; -sub gluTessNormal; -sub gluTessProperty; -sub gluTessVertex_p; -sub gluUnProject_p; -sub glutAddMenuEntry; -sub glutAddSubMenu; -sub glutAttachMenu; -sub glutBitmapCharacter; -sub glutBitmapHeight; -sub glutBitmapLength; -sub glutBitmapString; -sub glutBitmapWidth; -sub glutButtonBoxFunc; -sub glutChangeToMenuEntry; -sub glutChangeToSubMenu; -sub glutCloseFunc; -sub glutCopyColormap; -sub glutCreateMenu; -sub glutCreateSubWindow; -sub glutCreateWindow; -sub glutDestroyMenu; -sub glutDestroyWindow; -sub glutDetachMenu; -sub glutDeviceGet; -sub glutDialsFunc; -sub glutDisplayFunc; -sub glutEnterGameMode; -sub glutEntryFunc; -sub glutEstablishOverlay; -sub glutExtensionSupported; -sub glutForceJoystickFunc; -sub glutFullScreen; -sub glutGameModeGet; -sub glutGameModeString; -sub glutGet; -sub glutGetColor; -sub glutGetMenu; -sub glutGetModifiers; -sub glutGetWindow; -sub glutHideOverlay; -sub glutHideWindow; -sub glutIconifyWindow; -sub glutIdleFunc; -sub glutIgnoreKeyRepeat; -sub glutInit; -sub glutInitDisplayMode; -sub glutInitDisplayString; -sub glutInitWindowPosition; -sub glutInitWindowSize; -sub glutKeyboardFunc; -sub glutKeyboardUpFunc; -sub glutLayerGet; -sub glutLeaveGameMode; -sub glutLeaveMainLoop; -sub glutMainLoop; -sub glutMainLoopEvent; -sub glutMenuDestroyFunc; -sub glutMenuStateFunc; -sub glutMenuStatusFunc; -sub glutMotionFunc; -sub glutMouseFunc; -sub glutMouseWheelFunc; -sub glutOverlayDisplayFunc; -sub glutPassiveMotionFunc; -sub glutPopWindow; -sub glutPositionWindow; -sub glutPostOverlayRedisplay; -sub glutPostRedisplay; -sub glutPostWindowOverlayRedisplay; -sub glutPostWindowRedisplay; -sub glutPushWindow; -sub glutRemoveMenuItem; -sub glutRemoveOverlay; -sub glutReportErrors; -sub glutReshapeFunc; -sub glutReshapeWindow; -sub glutSetColor; -sub glutSetCursor; -sub glutSetIconTitle; -sub glutSetKeyRepeat; -sub glutSetMenu; -sub glutSetOption; -sub glutSetWindow; -sub glutSetWindowTitle; -sub glutShowOverlay; -sub glutShowWindow; -sub glutSolidCone; -sub glutSolidCube; -sub glutSolidCylinder; -sub glutSolidDodecahedron; -sub glutSolidIcosahedron; -sub glutSolidOctahedron; -sub glutSolidRhombicDodecahedron; -sub glutSolidSphere; -sub glutSolidTeapot; -sub glutSolidTetrahedron; -sub glutSolidTorus; -sub glutSpaceballButtonFunc; -sub glutSpaceballMotionFunc; -sub glutSpaceballRotateFunc; -sub glutSpecialFunc; -sub glutSpecialUpFunc; -sub glutStrokeCharacter; -sub glutStrokeHeight; -sub glutStrokeLength; -sub glutStrokeString; -sub glutStrokeWidth; -sub glutSwapBuffers; -sub glutTabletButtonFunc; -sub glutTabletMotionFunc; -sub glutTimerFunc; -sub glutUseLayer; -sub glutVisibilityFunc; -sub glutWarpPointer; -sub glutWindowStatusFunc; -sub glutWireCone; -sub glutWireCube; -sub glutWireCylinder; -sub glutWireDodecahedron; -sub glutWireIcosahedron; -sub glutWireOctahedron; -sub glutWireRhombicDodecahedron; -sub glutWireSphere; -sub glutWireTeapot; -sub glutWireTetrahedron; -sub glutWireTorus; -} -package OpenGL::Array { -sub DESTROY; -sub affine; -sub assign; -sub assign_data; -sub bind; -sub bound; -sub calc; -sub elements; -sub get_dimensions; -sub length; -sub new; -sub new_from_pointer; -sub new_list; -sub new_pointer; -sub new_scalar; -sub offset; -sub ptr; -sub retrieve; -sub retrieve_data; -sub update_pointer; -} -package OpenGL::Matrix { -sub column; -sub dot_product; -sub element; -sub invert; -sub new; -sub new_identity; -sub new_product; -sub rotate_x; -sub rotate_y; -sub rotate_z; -sub row; -sub scale; -sub set_frustrum; -sub set_lookat; -sub set_ortho; -sub set_perspective; -sub set_quaternion; -sub translate; -sub transpose; -} -package POSIX { -sub ARG_MAX() ; -sub B0() ; -sub B110() ; -sub B1200() ; -sub B134() ; -sub B150() ; -sub B1800() ; -sub B19200() ; -sub B200() ; -sub B2400() ; -sub B300() ; -sub B38400() ; -sub B4800() ; -sub B50() ; -sub B600() ; -sub B75() ; -sub B9600() ; -sub BRKINT() ; -sub BUS_ADRALN() ; -sub BUS_ADRERR() ; -sub BUS_OBJERR() ; -sub CHILD_MAX() ; -sub CLD_CONTINUED() ; -sub CLD_DUMPED() ; -sub CLD_EXITED() ; -sub CLD_KILLED() ; -sub CLD_STOPPED() ; -sub CLD_TRAPPED() ; -sub CLOCAL() ; -sub CREAD() ; -sub CS5() ; -sub CS6() ; -sub CS7() ; -sub CS8() ; -sub CSIZE() ; -sub CSTOPB() ; -sub EAI_OVERFLOW() ; -sub EAI_SYSTEM() ; -sub ECHO() ; -sub ECHOE() ; -sub ECHOK() ; -sub ECHONL() ; -sub EHOSTDOWN() ; -sub ENOTBLK() ; -sub EOTHER() ; -sub ERESTART() ; -sub FD_CLOEXEC() ; -sub FPE_FLTDIV() ; -sub FPE_FLTINV() ; -sub FPE_FLTOVF() ; -sub FPE_FLTRES() ; -sub FPE_FLTSUB() ; -sub FPE_FLTUND() ; -sub FPE_INTDIV() ; -sub FPE_INTOVF() ; -sub F_DUPFD() ; -sub F_GETFD() ; -sub F_GETFL() ; -sub F_GETLK() ; -sub F_RDLCK() ; -sub F_SETFD() ; -sub F_SETFL() ; -sub F_SETLK() ; -sub F_SETLKW() ; -sub F_UNLCK() ; -sub F_WRLCK() ; -sub HUPCL() ; -sub ICANON() ; -sub ICRNL() ; -sub IEXTEN() ; -sub IGNBRK() ; -sub IGNCR() ; -sub IGNPAR() ; -sub ILL_BADSTK() ; -sub ILL_COPROC() ; -sub ILL_ILLADR() ; -sub ILL_ILLOPC() ; -sub ILL_ILLOPN() ; -sub ILL_ILLTRP() ; -sub ILL_PRVOPC() ; -sub ILL_PRVREG() ; -sub INLCR() ; -sub INPCK() ; -sub ISIG() ; -sub ISTRIP() ; -sub IXOFF() ; -sub IXON() ; -sub LC_ADDRESS() ; -sub LC_IDENTIFICATION() ; -sub LC_MEASUREMENT() ; -sub LC_MESSAGES() ; -sub LC_PAPER() ; -sub LC_TELEPHONE() ; -sub LDBL_EPSILON() ; -sub LDBL_MAX() ; -sub LDBL_MIN() ; -sub LINK_MAX() ; -sub L_ctermid() ; -sub L_cuserid() ; -sub L_tmpnam; -sub MAX_CANON() ; -sub MAX_INPUT() ; -sub MSG_CTRUNC() ; -sub MSG_EOR() ; -sub MSG_TRUNC() ; -sub NAME_MAX() ; -sub NCCS() ; -sub NDEBUG; -sub NGROUPS_MAX() ; -sub NOFLSH() ; -sub OPEN_MAX() ; -sub OPOST() ; -sub O_NOCTTY() ; -sub O_NONBLOCK() ; -sub PARENB() ; -sub PARMRK() ; -sub PARODD() ; -sub PIPE_BUF() ; -sub POLL_ERR() ; -sub POLL_HUP() ; -sub POLL_IN() ; -sub POLL_MSG() ; -sub POLL_OUT() ; -sub POLL_PRI() ; -sub PRIO_PGRP() ; -sub PRIO_PROCESS() ; -sub PRIO_USER() ; -sub SA_NOCLDSTOP() ; -sub SA_NOCLDWAIT() ; -sub SA_NODEFER() ; -sub SA_ONSTACK() ; -sub SA_RESETHAND() ; -sub SA_RESTART() ; -sub SA_SIGINFO() ; -sub SEGV_ACCERR() ; -sub SEGV_MAPERR() ; -sub SIGALRM() ; -sub SIGBUS() ; -sub SIGCHLD() ; -sub SIGCONT() ; -sub SIGHUP() ; -sub SIGKILL() ; -sub SIGPIPE() ; -sub SIGPOLL() ; -sub SIGPROF() ; -sub SIGQUIT() ; -sub SIGRTMAX() ; -sub SIGRTMIN() ; -sub SIGSTOP() ; -sub SIGSYS() ; -sub SIGTRAP() ; -sub SIGTSTP() ; -sub SIGTTIN() ; -sub SIGTTOU() ; -sub SIGURG() ; -sub SIGUSR1() ; -sub SIGUSR2() ; -sub SIGVTALRM() ; -sub SIGXCPU() ; -sub SIGXFSZ() ; -sub SIG_BLOCK() ; -sub SIG_SETMASK() ; -sub SIG_UNBLOCK() ; -sub SI_ASYNCIO() ; -sub SI_MESGQ() ; -sub SI_QUEUE() ; -sub SI_TIMER() ; -sub SI_USER() ; -sub STREAM_MAX() ; -sub S_ISBLK; -sub S_ISCHR; -sub S_ISDIR; -sub S_ISFIFO; -sub S_ISREG; -sub TCIFLUSH() ; -sub TCIOFF() ; -sub TCIOFLUSH() ; -sub TCION() ; -sub TCOFLUSH() ; -sub TCOOFF() ; -sub TCOON() ; -sub TCSADRAIN() ; -sub TCSAFLUSH() ; -sub TCSANOW() ; -sub TOSTOP() ; -sub TRAP_BRKPT() ; -sub TRAP_TRACE() ; -sub TZNAME_MAX() ; -sub VEOF() ; -sub VEOL() ; -sub VERASE() ; -sub VINTR() ; -sub VKILL() ; -sub VMIN() ; -sub VQUIT() ; -sub VSTART() ; -sub VSTOP() ; -sub VSUSP() ; -sub VTIME() ; -sub WEXITSTATUS; -sub WIFEXITED; -sub WIFSIGNALED; -sub WIFSTOPPED; -sub WSTOPSIG; -sub WTERMSIG; -sub WUNTRACED() ; -sub _PC_CHOWN_RESTRICTED() ; -sub _PC_LINK_MAX() ; -sub _PC_MAX_CANON() ; -sub _PC_MAX_INPUT() ; -sub _PC_NAME_MAX() ; -sub _PC_NO_TRUNC() ; -sub _PC_PATH_MAX() ; -sub _PC_PIPE_BUF() ; -sub _PC_VDISABLE() ; -sub _SC_ARG_MAX() ; -sub _SC_CHILD_MAX() ; -sub _SC_CLK_TCK() ; -sub _SC_JOB_CONTROL() ; -sub _SC_NGROUPS_MAX() ; -sub _SC_OPEN_MAX() ; -sub _SC_PAGESIZE() ; -sub _SC_SAVED_IDS() ; -sub _SC_STREAM_MAX() ; -sub _SC_TZNAME_MAX() ; -sub _SC_VERSION() ; -sub _exit; -sub abort; -sub abs; -sub access; -sub acos; -sub acosh; -sub alarm; -sub asctime; -sub asin; -sub asinh; -sub assert; -sub atan2; -sub atan; -sub atanh; -sub atexit; -sub atof; -sub atoi; -sub atol; -sub bsearch; -sub calloc; -sub cbrt; -sub ceil; -sub cfgetispeed; -sub cfgetospeed; -sub cfsetispeed; -sub cfsetospeed; -sub chdir; -sub chmod; -sub chown; -sub clearerr; -sub clock; -sub close; -sub closedir; -sub constant; -sub copysign; -sub cos; -sub cosh; -sub creat; -sub ctermid; -sub ctime; -sub cuserid; -sub difftime; -sub div; -sub dup2; -sub dup; -sub erf; -sub erfc; -sub errno; -sub execl; -sub execle; -sub execlp; -sub execv; -sub execve; -sub execvp; -sub exit; -sub exp2; -sub exp; -sub expm1; -sub fabs; -sub fclose; -sub fcntl; -sub fdim; -sub fdopen; -sub fegetround; -sub feof; -sub ferror; -sub fesetround; -sub fflush; -sub fgetc; -sub fgetpos; -sub fgets; -sub fileno; -sub floor; -sub fma; -sub fmax; -sub fmin; -sub fmod; -sub fopen; -sub fork; -sub fpathconf; -sub fpclassify; -sub fprintf; -sub fputc; -sub fputs; -sub fread; -sub free; -sub freopen; -sub frexp; -sub fscanf; -sub fseek; -sub fsetpos; -sub fstat; -sub fsync; -sub ftell; -sub fwrite; -sub getc; -sub getchar; -sub getcwd; -sub getegid; -sub getenv; -sub geteuid; -sub getgid; -sub getgrgid; -sub getgrnam; -sub getgroups; -sub getlogin; -sub getpayload; -sub getpgrp; -sub getpid; -sub getppid; -sub getpwnam; -sub getpwuid; -sub gets; -sub getuid; -sub gmtime; -sub hypot; -sub ilogb; -sub isatty; -sub isfinite; -sub isgreater; -sub isgreaterequal; -sub isinf; -sub isless; -sub islessequal; -sub islessgreater; -sub isnan; -sub isnormal; -sub issignaling; -sub isunordered; -sub j0; -sub j1; -sub jn; -sub kill; -sub labs; -sub lchown; -sub ldexp; -sub ldiv; -sub lgamma; -sub link; -sub localeconv; -sub localtime; -sub log10; -sub log1p; -sub log2; -sub log; -sub logb; -sub longjmp; -sub lrint; -sub lround; -sub lseek; -sub malloc; -sub mblen; -sub mbstowcs; -sub mbtowc; -sub memchr; -sub memcmp; -sub memcpy; -sub memmove; -sub memset; -sub mkdir; -sub mkfifo; -sub mktime; -sub modf; -sub nan; -sub nearbyint; -sub nextafter; -sub nexttoward; -sub nice; -sub offsetof; -sub open; -sub opendir; -sub pathconf; -sub pause; -sub pipe; -sub pow; -sub putc; -sub putchar; -sub puts; -sub qsort; -sub raise; -sub rand; -sub read; -sub readdir; -sub realloc; -sub remainder; -sub remove; -sub remquo; -sub rename; -sub rewind; -sub rewinddir; -sub rint; -sub rmdir; -sub round; -sub scalbn; -sub scanf; -sub setbuf; -sub setgid; -sub setjmp; -sub setlocale; -sub setpayload; -sub setpayloadsig; -sub setpgid; -sub setsid; -sub setuid; -sub setvbuf; -sub sigaction; -sub siglongjmp; -sub signal; -sub signbit; -sub sigpending; -sub sigprocmask; -sub sigsetjmp; -sub sigsuspend; -sub sin; -sub sinh; -sub sleep; -sub sqrt; -sub srand; -sub sscanf; -sub stat; -sub stderr; -sub stdin; -sub stdout; -sub strcat; -sub strchr; -sub strcmp; -sub strcoll; -sub strcpy; -sub strcspn; -sub strerror; -sub strftime; -sub strlen; -sub strncat; -sub strncmp; -sub strncpy; -sub strpbrk; -sub strrchr; -sub strspn; -sub strstr; -sub strtod; -sub strtok; -sub strtol; -sub strtoul; -sub strxfrm; -sub sysconf; -sub system; -sub tan; -sub tanh; -sub tcdrain; -sub tcflow; -sub tcflush; -sub tcgetattr; -sub tcgetpgrp; -sub tcsendbreak; -sub tcsetattr; -sub tcsetpgrp; -sub tgamma; -sub time; -sub times; -sub tmpfile; -sub tmpnam; -sub trunc; -sub ttyname; -sub tzname; -sub tzset; -sub umask; -sub uname; -sub ungetc; -sub unlink; -sub utime; -sub vfprintf; -sub vprintf; -sub vsprintf; -sub wait; -sub waitpid; -sub wcstombs; -sub wctomb; -sub write; -sub y0; -sub y1; -sub yn; -} -package POSIX::SigSet { -sub addset; -sub delset; -sub emptyset; -sub fillset; -sub ismember; -sub new; -} -package POSIX::Termios { -sub getattr; -sub getcc; -sub getcflag; -sub getiflag; -sub getispeed; -sub getlflag; -sub getoflag; -sub getospeed; -sub new; -sub setattr; -sub setcc; -sub setcflag; -sub setiflag; -sub setispeed; -sub setlflag; -sub setoflag; -sub setospeed; -} -package Package::DeprecationManager { -sub _HASH0($) ; -sub any(&@) ; -sub subname; -} -package Package::Stash { -sub add_symbol; -sub get_all_symbols; -sub get_or_add_symbol; -sub get_symbol; -sub has_symbol; -sub list_all_symbols; -sub name; -sub namespace; -sub new; -sub remove_glob; -sub remove_symbol; -} -package Package::Stash::XS { -sub add_symbol; -sub get_all_symbols; -sub get_or_add_symbol; -sub get_symbol; -sub has_symbol; -sub list_all_symbols; -sub name; -sub namespace; -sub new; -sub remove_glob; -sub remove_symbol; -} -package PadWalker { -sub _upcontext; -sub closed_over; -sub peek_my; -sub peek_our; -sub peek_sub; -sub set_closed_over; -sub var_name; -} -package Params::Util { -sub _ARRAY($) ; -sub _ARRAY0($) ; -sub _ARRAYLIKE($) ; -sub _CODE($) ; -sub _CODELIKE($) ; -sub _HASH($) ; -sub _HASH0($) ; -sub _HASHLIKE($) ; -sub _INSTANCE($$) ; -sub _NUMBER($) ; -sub _REGEX($) ; -sub _SCALAR($) ; -sub _SCALAR0($) ; -sub _STRING($) ; -sub looks_like_number($) ; -} -package Params::ValidationCompiler::Compiler { -sub blessed($) ; -sub looks_like_number($) ; -sub pairkeys(@) ; -sub pairvalues(@) ; -sub perlstring; -sub reftype($) ; -sub set_subname; -} -package Parse::Binary { -sub FORMAT() ; -sub PROPERTIES() ; -} -package PerlIO { -sub get_layers(*;@) ; -} -package PerlIO::Layer { -sub NoWarnings; -sub find; -} -package PerlIO::Layers { -sub _get_kinds; -sub get_buffer_sizes; -sub max(@) ; -sub reduce(&@) ; -} -package Regexp { -sub DESTROY() ; -} -package SDBM_File { -sub DELETE; -sub DESTROY; -sub EXISTS; -sub FETCH; -sub FIRSTKEY; -sub NEXTKEY; -sub STORE; -sub TIEHASH; -sub error; -sub filter_fetch_key; -sub filter_fetch_value; -sub filter_store_key; -sub filter_store_value; -sub sdbm_clearerr; -} -package Scalar::Util { -sub blessed($) ; -sub dualvar($$) ; -sub isdual($) ; -sub isvstring($) ; -sub isweak($) ; -sub looks_like_number($) ; -sub openhandle($) ; -sub readonly($) ; -sub refaddr($) ; -sub reftype($) ; -sub tainted($) ; -sub unweaken($) ; -sub weaken($) ; -} -package Socket { -sub AF_802() ; -sub AF_AAL() ; -sub AF_CTF() ; -sub AF_GOSIP() ; -sub AF_KEY() ; -sub AF_LAST() ; -sub AF_LINK() ; -sub AF_LOCAL() ; -sub AF_NBS() ; -sub AF_NIT() ; -sub AF_OSINET() ; -sub AF_ROUTE() ; -sub AF_USER() ; -sub AF_WAN() ; -sub AF_X25() ; -sub AI_ADDRCONFIG() ; -sub AI_ALL() ; -sub AI_CANONIDN() ; -sub AI_IDN() ; -sub AI_IDN_ALLOW_UNASSIGNED() ; -sub AI_IDN_USE_STD3_ASCII_RULES() ; -sub AI_NUMERICSERV() ; -sub AI_V4MAPPED() ; -sub AUTOLOAD; -sub EAI_ADDRFAMILY() ; -sub EAI_BADHINTS() ; -sub EAI_PROTOCOL() ; -sub EAI_SYSTEM() ; -sub IOV_MAX() ; -sub IPTOS_LOWDELAY() ; -sub IPTOS_MINCOST() ; -sub IPTOS_RELIABILITY() ; -sub IPTOS_THROUGHPUT() ; -sub IPV6_ADDRFROM() ; -sub IPV6_MTU() ; -sub IPV6_MTU_DISCOVER() ; -sub IPV6_RECVERR() ; -sub IPV6_ROUTER_ALERT() ; -sub IP_BIND_ADDRESS_NO_PORT() ; -sub IP_FREEBIND() ; -sub IP_MTU() ; -sub IP_MTU_DISCOVER() ; -sub IP_MULTICAST_ALL() ; -sub IP_NODEFRAG() ; -sub IP_PMTUDISC_DO() ; -sub IP_PMTUDISC_DONT() ; -sub IP_PMTUDISC_PROBE() ; -sub IP_PMTUDISC_WANT() ; -sub IP_RECVERR() ; -sub IP_RECVOPTS() ; -sub IP_RECVRETOPTS() ; -sub IP_RETOPTS() ; -sub IP_TRANSPARENT() ; -sub MSG_BCAST() ; -sub MSG_BTAG() ; -sub MSG_CTLFLAGS() ; -sub MSG_CTLIGNORE() ; -sub MSG_CTRUNC() ; -sub MSG_DONTWAIT() ; -sub MSG_EOF() ; -sub MSG_EOR() ; -sub MSG_ERRQUEUE() ; -sub MSG_ETAG() ; -sub MSG_FASTOPEN() ; -sub MSG_FIN() ; -sub MSG_MCAST() ; -sub MSG_NOSIGNAL() ; -sub MSG_PROXY() ; -sub MSG_RST() ; -sub MSG_SYN() ; -sub MSG_TRUNC() ; -sub MSG_URG() ; -sub MSG_WIRE() ; -sub NI_IDN() ; -sub NI_IDN_ALLOW_UNASSIGNED() ; -sub NI_IDN_USE_STD3_ASCII_RULES() ; -sub PF_802() ; -sub PF_AAL() ; -sub PF_CTF() ; -sub PF_GOSIP() ; -sub PF_KEY() ; -sub PF_LAST() ; -sub PF_LINK() ; -sub PF_LOCAL() ; -sub PF_NBS() ; -sub PF_NIT() ; -sub PF_OSINET() ; -sub PF_ROUTE() ; -sub PF_USER() ; -sub PF_WAN() ; -sub PF_X25() ; -sub SCM_CONNECT() ; -sub SCM_CREDENTIALS() ; -sub SCM_CREDS() ; -sub SCM_RIGHTS() ; -sub SCM_TIMESTAMP() ; -sub SOCK_CLOEXEC() ; -sub SOCK_NONBLOCK() ; -sub SO_ATTACH_FILTER() ; -sub SO_BACKLOG() ; -sub SO_BINDTODEVICE() ; -sub SO_BSDCOMPAT() ; -sub SO_BUSY_POLL() ; -sub SO_CHAMELEON() ; -sub SO_DETACH_FILTER() ; -sub SO_DGRAM_ERRIND() ; -sub SO_DOMAIN() ; -sub SO_FAMILY() ; -sub SO_LOCK_FILTER() ; -sub SO_MARK() ; -sub SO_PASSCRED() ; -sub SO_PASSIFNAME() ; -sub SO_PEEK_OFF() ; -sub SO_PEERCRED() ; -sub SO_PRIORITY() ; -sub SO_PROTOCOL() ; -sub SO_PROTOTYPE() ; -sub SO_RCVBUFFORCE() ; -sub SO_REUSEPORT() ; -sub SO_RXQ_OVFL() ; -sub SO_SECURITY_AUTHENTICATION() ; -sub SO_SECURITY_ENCRYPTION_NETWORK() ; -sub SO_SECURITY_ENCRYPTION_TRANSPORT() ; -sub SO_SNDBUFFORCE() ; -sub SO_STATE() ; -sub SO_TIMESTAMP() ; -sub SO_XOPEN() ; -sub SO_XSE() ; -sub TCP_CONGESTION() ; -sub TCP_CONNECTIONTIMEOUT() ; -sub TCP_CORK() ; -sub TCP_DEFER_ACCEPT() ; -sub TCP_FASTOPEN() ; -sub TCP_INFO() ; -sub TCP_INIT_CWND() ; -sub TCP_KEEPALIVE() ; -sub TCP_KEEPCNT() ; -sub TCP_KEEPIDLE() ; -sub TCP_KEEPINTVL() ; -sub TCP_LINGER2() ; -sub TCP_MAXRT() ; -sub TCP_MAXSEG() ; -sub TCP_MD5SIG() ; -sub TCP_NOOPT() ; -sub TCP_NOPUSH() ; -sub TCP_QUICKACK() ; -sub TCP_SACK_ENABLE() ; -sub TCP_STDURG() ; -sub TCP_SYNCNT() ; -sub TCP_USER_TIMEOUT() ; -sub TCP_WINDOW_CLAMP() ; -sub UIO_MAXIOV() ; -sub getaddrinfo; -sub getnameinfo; -sub inet_aton; -sub inet_ntoa; -sub inet_ntop; -sub inet_pton; -sub pack_ip_mreq; -sub pack_ip_mreq_source; -sub pack_ipv6_mreq; -sub pack_sockaddr_in6; -sub pack_sockaddr_in; -sub pack_sockaddr_un; -sub sockaddr_family; -sub unpack_ip_mreq; -sub unpack_ip_mreq_source; -sub unpack_ipv6_mreq; -sub unpack_sockaddr_in6; -sub unpack_sockaddr_in; -sub unpack_sockaddr_un; -} -package Socket6 { -sub constant; -sub gai_strerror; -sub getaddrinfo; -sub gethostbyname2; -sub getipnodebyaddr; -sub getipnodebyname; -sub getnameinfo; -sub in6addr_any; -sub in6addr_loopback; -sub inet_ntop; -sub inet_pton; -sub pack_sockaddr_in6; -sub pack_sockaddr_in6_all; -sub unpack_sockaddr_in6; -sub unpack_sockaddr_in6_all; -} -package Specio::Constraint::Enum { -sub dclone($) ; -sub refaddr($) ; -} -package Specio::Constraint::Parameterized { -sub dclone($) ; -} -package Specio::Constraint::Role::CanType { -sub blessed($) ; -sub dclone($) ; -} -package Specio::Constraint::Role::Interface { -sub all(&@) ; -sub any(&@) ; -sub first(&@) ; -} -package Specio::Constraint::Role::IsaType { -sub blessed($) ; -sub dclone($) ; -} -package Specio::Constraint::Union { -sub all(&@) ; -sub any(&@) ; -sub dclone($) ; -} -package Specio::Exception { -sub blessed($) ; -} -package Specio::Helpers { -sub blessed($) ; -} -package Specio::OO { -sub all(&@) ; -sub dclone($) ; -sub perlstring; -sub weaken($) ; -} -package Specio::PartialDump { -sub blessed($) ; -sub looks_like_number($) ; -sub reftype($) ; -} -package Specio::TypeChecks { -sub blessed($) ; -} -package Storable { -sub dclone($) ; -sub init_perinterp() ; -sub is_retrieving() ; -sub is_storing() ; -sub last_op_in_netorder() ; -sub mretrieve($;$) ; -sub mstore($) ; -sub net_mstore($) ; -sub net_pstore($$) ; -sub pretrieve($;$) ; -sub pstore($$) ; -sub stack_depth() ; -sub stack_depth_hash() ; -} -package Sub::Identify { -sub get_code_info($) ; -sub get_code_location($) ; -sub is_sub_constant($) ; -} -package Sub::Name { -sub subname; -} -package Sub::Util { -sub set_prototype; -sub set_subname; -sub subname; -} -package Sys::Hostname { -sub ghname; -} -package Sys::Syslog { -sub AF_802() ; -sub AF_AAL() ; -sub AF_CTF() ; -sub AF_GOSIP() ; -sub AF_KEY() ; -sub AF_LAST() ; -sub AF_LINK() ; -sub AF_NBS() ; -sub AF_NIT() ; -sub AF_OSINET() ; -sub AF_ROUTE() ; -sub AF_USER() ; -sub AF_WAN() ; -sub AF_X25() ; -sub AI_ADDRCONFIG() ; -sub AI_ALL() ; -sub AI_CANONIDN() ; -sub AI_IDN() ; -sub AI_IDN_ALLOW_UNASSIGNED() ; -sub AI_IDN_USE_STD3_ASCII_RULES() ; -sub AI_NUMERICSERV() ; -sub AI_V4MAPPED() ; -sub EAI_ADDRFAMILY() ; -sub EAI_BADHINTS() ; -sub EAI_PROTOCOL() ; -sub EAI_SYSTEM() ; -sub IOV_MAX() ; -sub IPTOS_LOWDELAY() ; -sub IPTOS_MINCOST() ; -sub IPTOS_RELIABILITY() ; -sub IPTOS_THROUGHPUT() ; -sub IPV6_ADDRFROM() ; -sub IPV6_MTU() ; -sub IPV6_MTU_DISCOVER() ; -sub IPV6_RECVERR() ; -sub IPV6_ROUTER_ALERT() ; -sub IP_BIND_ADDRESS_NO_PORT() ; -sub IP_FREEBIND() ; -sub IP_MTU() ; -sub IP_MTU_DISCOVER() ; -sub IP_MULTICAST_ALL() ; -sub IP_NODEFRAG() ; -sub IP_PMTUDISC_DO() ; -sub IP_PMTUDISC_DONT() ; -sub IP_PMTUDISC_PROBE() ; -sub IP_PMTUDISC_WANT() ; -sub IP_RECVERR() ; -sub IP_RECVOPTS() ; -sub IP_RECVRETOPTS() ; -sub IP_RETOPTS() ; -sub IP_TRANSPARENT() ; -sub LOG_FAC; -sub LOG_MAKEPRI; -sub LOG_MASK; -sub LOG_PRI; -sub LOG_UPTO; -sub MSG_BCAST() ; -sub MSG_BTAG() ; -sub MSG_CTLFLAGS() ; -sub MSG_CTLIGNORE() ; -sub MSG_CTRUNC() ; -sub MSG_DONTWAIT() ; -sub MSG_EOF() ; -sub MSG_EOR() ; -sub MSG_ERRQUEUE() ; -sub MSG_ETAG() ; -sub MSG_FASTOPEN() ; -sub MSG_FIN() ; -sub MSG_MCAST() ; -sub MSG_NOSIGNAL() ; -sub MSG_PROXY() ; -sub MSG_RST() ; -sub MSG_SYN() ; -sub MSG_TRUNC() ; -sub MSG_URG() ; -sub MSG_WIRE() ; -sub NI_IDN() ; -sub NI_IDN_ALLOW_UNASSIGNED() ; -sub NI_IDN_USE_STD3_ASCII_RULES() ; -sub PF_802() ; -sub PF_AAL() ; -sub PF_CTF() ; -sub PF_GOSIP() ; -sub PF_KEY() ; -sub PF_LAST() ; -sub PF_LINK() ; -sub PF_NBS() ; -sub PF_NIT() ; -sub PF_OSINET() ; -sub PF_ROUTE() ; -sub PF_USER() ; -sub PF_WAN() ; -sub PF_X25() ; -sub SCM_CONNECT() ; -sub SCM_CREDENTIALS() ; -sub SCM_CREDS() ; -sub SCM_RIGHTS() ; -sub SCM_TIMESTAMP() ; -sub SOCK_CLOEXEC() ; -sub SOCK_NONBLOCK() ; -sub SO_ATTACH_FILTER() ; -sub SO_BACKLOG() ; -sub SO_CHAMELEON() ; -sub SO_DETACH_FILTER() ; -sub SO_DGRAM_ERRIND() ; -sub SO_DOMAIN() ; -sub SO_FAMILY() ; -sub SO_LOCK_FILTER() ; -sub SO_PASSCRED() ; -sub SO_PASSIFNAME() ; -sub SO_PEERCRED() ; -sub SO_PROTOCOL() ; -sub SO_PROTOTYPE() ; -sub SO_RCVBUFFORCE() ; -sub SO_REUSEPORT() ; -sub SO_SECURITY_AUTHENTICATION() ; -sub SO_SECURITY_ENCRYPTION_NETWORK() ; -sub SO_SECURITY_ENCRYPTION_TRANSPORT() ; -sub SO_SNDBUFFORCE() ; -sub SO_STATE() ; -sub SO_XOPEN() ; -sub SO_XSE() ; -sub TCP_CONGESTION() ; -sub TCP_CONNECTIONTIMEOUT() ; -sub TCP_CORK() ; -sub TCP_DEFER_ACCEPT() ; -sub TCP_FASTOPEN() ; -sub TCP_INFO() ; -sub TCP_INIT_CWND() ; -sub TCP_KEEPALIVE() ; -sub TCP_KEEPCNT() ; -sub TCP_KEEPIDLE() ; -sub TCP_KEEPINTVL() ; -sub TCP_LINGER2() ; -sub TCP_MAXRT() ; -sub TCP_MAXSEG() ; -sub TCP_MD5SIG() ; -sub TCP_NOOPT() ; -sub TCP_NOPUSH() ; -sub TCP_QUICKACK() ; -sub TCP_SACK_ENABLE() ; -sub TCP_STDURG() ; -sub TCP_SYNCNT() ; -sub TCP_USER_TIMEOUT() ; -sub TCP_WINDOW_CLAMP() ; -sub UIO_MAXIOV() ; -sub closelog_xs; -sub constant; -sub getaddrinfo; -sub getnameinfo; -sub inet_aton; -sub inet_ntoa; -sub inet_ntop; -sub inet_pton; -sub openlog_xs; -sub pack_ip_mreq; -sub pack_ip_mreq_source; -sub pack_ipv6_mreq; -sub pack_sockaddr_in6; -sub pack_sockaddr_in; -sub pack_sockaddr_un; -sub setlocale; -sub setlogmask_xs; -sub sockaddr_family; -sub strftime; -sub syslog_xs; -sub unpack_ip_mreq; -sub unpack_ip_mreq_source; -sub unpack_ipv6_mreq; -sub unpack_sockaddr_in6; -sub unpack_sockaddr_in; -sub unpack_sockaddr_un; -} -package Sys::Syslog::Win32 { -sub EVENTLOG_AUDIT_FAILURE; -sub EVENTLOG_AUDIT_SUCCESS; -sub EVENTLOG_BACKWARDS_READ; -sub EVENTLOG_END_ALL_PAIRED_EVENTS; -sub EVENTLOG_END_PAIRED_EVENT; -sub EVENTLOG_FORWARDS_READ; -sub EVENTLOG_PAIRED_EVENT_ACTIVE; -sub EVENTLOG_PAIRED_EVENT_INACTIVE; -sub EVENTLOG_SEEK_READ; -sub EVENTLOG_SEQUENTIAL_READ; -sub EVENTLOG_START_PAIRED_EVENT; -sub EVENTLOG_SUCCESS; -} -package Template { -sub blessed($) ; -} -package Template::Document { -sub is_utf8; -} -package Template::Filters { -sub blessed($) ; -} -package Template::Service { -sub blessed($) ; -} -package Template::Stash { -sub blessed($) ; -sub reftype($) ; -} -package Template::Stash::XS { -sub get; -sub set; -} -package Template::VMethods { -sub blessed($) ; -sub looks_like_number($) ; -} -package Term::ReadKey { -sub GetControlChars; -sub GetSpeed; -sub GetTermSizeGSIZE; -sub GetTermSizeGWINSZ; -sub GetTermSizeVIO; -sub GetTermSizeWin32; -sub SetControlChars; -sub SetReadMode; -sub SetTerminalSize; -sub Win32PeekChar; -sub blockoptions; -sub pollfile; -sub selectfile; -sub setnodelay; -sub termoptions; -sub termsizeoptions; -} -package Term::Table { -sub blessed($) ; -sub max(@) ; -sub sum(@) ; -} -package Term::Table::Cell { -sub sum(@) ; -} -package Term::Table::HashBase { -sub _isa($;$) ; -} -package Term::Table::LineBreak { -sub blessed($) ; -} -package Test2::API { -sub blessed($) ; -sub weaken($) ; -} -package Test2::API::Context { -sub blessed($) ; -sub weaken($) ; -} -package Test2::API::Instance { -sub reftype($) ; -} -package Test2::Event { -sub blessed($) ; -sub reftype($) ; -} -package Test2::Event::V2 { -sub reftype($) ; -} -package Test2::Hub { -sub first(&@) ; -sub weaken($) ; -} -package Test2::Util::Facets2Legacy { -sub blessed($) ; -} -package Test2::Util::HashBase { -sub _isa($;$) ; -} -package Test::Builder { -sub blessed($) ; -sub reftype($) ; -sub weaken($) ; -} -package Test::LeakTrace { -sub CLONE; -sub _finish; -sub _runops_installed; -sub _start; -sub count_sv; -} -package Text::CSV_XS { -sub Combine; -sub Parse; -sub SetDiag; -sub _cache_diag; -sub _cache_set; -sub error_input; -sub getline; -sub getline_all; -sub print; -} -package Text::Soundex { -sub soundex; -sub soundex_xs; -} -package Tie::Hash::NamedCapture { -sub CLEAR; -sub DELETE; -sub EXISTS; -sub FETCH; -sub FIRSTKEY; -sub NEXTKEY; -sub SCALAR; -sub STORE; -sub TIEHASH; -sub _tie_it; -sub flags; -} -package Time::HiRes { -sub CLONE(;@) ; -sub alarm($;$) ; -sub clock() ; -sub clock_getres(;$) ; -sub clock_gettime(;$) ; -sub clock_nanosleep($$;$) ; -sub constant($) ; -sub gettimeofday() ; -sub lstat(;$) ; -sub nanosleep($) ; -sub sleep(;@) ; -sub stat(;$) ; -sub time() ; -sub ualarm($;$) ; -sub usleep($) ; -sub utime($$;@) ; -} -package Time::Moment { -sub CLONE; -sub at_last_day_of_month; -sub at_last_day_of_quarter; -sub at_last_day_of_year; -sub at_midnight; -sub at_noon; -sub at_utc; -sub compare; -sub day_of_month; -sub day_of_quarter; -sub day_of_week; -sub day_of_year; -sub delta_days; -sub delta_hours; -sub delta_microseconds; -sub delta_milliseconds; -sub delta_minutes; -sub delta_months; -sub delta_nanoseconds; -sub delta_seconds; -sub delta_weeks; -sub delta_years; -sub epoch; -sub from_epoch; -sub from_jd; -sub from_mjd; -sub from_object; -sub from_rd; -sub from_string; -sub hour; -sub is_after; -sub is_before; -sub is_equal; -sub is_leap_year; -sub jd; -sub length_of_month; -sub length_of_quarter; -sub length_of_week_year; -sub length_of_year; -sub local_rd_as_seconds; -sub local_rd_values; -sub microsecond; -sub microsecond_of_day; -sub millisecond; -sub millisecond_of_day; -sub minus_days; -sub minus_hours; -sub minus_microseconds; -sub minus_milliseconds; -sub minus_minutes; -sub minus_months; -sub minus_nanoseconds; -sub minus_seconds; -sub minus_weeks; -sub minus_years; -sub minute; -sub minute_of_day; -sub mjd; -sub month; -sub nanosecond; -sub nanosecond_of_day; -sub new; -sub now; -sub now_utc; -sub offset; -sub plus_days; -sub plus_hours; -sub plus_microseconds; -sub plus_milliseconds; -sub plus_minutes; -sub plus_months; -sub plus_nanoseconds; -sub plus_seconds; -sub plus_weeks; -sub plus_years; -sub precision; -sub quarter; -sub rd; -sub rdn; -sub second; -sub second_of_day; -sub strftime; -sub to_string; -sub utc_rd_as_seconds; -sub utc_rd_values; -sub week; -sub with; -sub with_day_of_month; -sub with_day_of_quarter; -sub with_day_of_week; -sub with_day_of_year; -sub with_hour; -sub with_microsecond; -sub with_microsecond_of_day; -sub with_millisecond; -sub with_millisecond_of_day; -sub with_minute; -sub with_minute_of_day; -sub with_month; -sub with_nanosecond; -sub with_nanosecond_of_day; -sub with_offset; -sub with_offset_same_instant; -sub with_offset_same_local; -sub with_precision; -sub with_quarter; -sub with_rdn; -sub with_second; -sub with_second_of_day; -sub with_week; -sub with_year; -sub year; -} -package Time::Moment::Internal { -sub orthodox_easter_sunday; -sub western_easter_sunday; -} -package Time::Piece { -sub _crt_gmtime($) ; -sub _crt_localtime($) ; -sub _get_localization() ; -sub _mini_mktime($$$$$$) ; -sub _strftime($$;$) ; -sub _strptime($$$$) ; -sub _tzset() ; -sub blessed($) ; -} -package Try::Tiny { -sub _subname; -} -package UNIVERSAL { -sub DOES; -sub VERSION; -sub can; -sub isa; -} -package Unicode::Collate { -sub _decompHangul; -sub _derivCE_14; -sub _derivCE_18; -sub _derivCE_20; -sub _derivCE_22; -sub _derivCE_24; -sub _derivCE_32; -sub _derivCE_34; -sub _derivCE_36; -sub _derivCE_8; -sub _derivCE_9; -sub _exists_simple; -sub _fetch_rest; -sub _fetch_simple; -sub _getHexArray; -sub _ignorable_simple; -sub _isIllegal; -sub _isUIdeo; -sub _uideoCE_8; -sub getHST; -sub mk_SortKey; -sub varCE; -sub visualizeSortKey; -} -package Unicode::GCString { -sub DESTROY($) ; -sub _new($$;$) ; -sub as_array($) ; -sub as_scalarref; -sub as_string($;$;$) ; -sub chars($) ; -sub cmp($$;$) ; -sub columns; -sub concat($$;$) ; -sub copy($) ; -sub eos; -sub flag($;$;$) ; -sub item($;$) ; -sub join; -sub lbc($) ; -sub lbcext($) ; -sub lbclass($;$) ; -sub lbclass_ext($;$) ; -sub length($) ; -sub next($;$;$) ; -sub pos($;$) ; -sub substr($$;$;$) ; -} -package Unicode::LineBreak { -sub DESTROY($) ; -sub EAWidths; -sub LBClasses; -sub SOMBOK_VERSION; -sub UNICODE_VERSION; -sub _config; -sub _new($) ; -sub as_hashref; -sub as_scalarref; -sub as_string; -sub break($$) ; -sub break_partial($$) ; -sub breakingRule($$$) ; -sub copy($) ; -sub is_utf8($;$) ; -sub lbrule($$$) ; -sub reset($) ; -sub strsize($$$$$;$) ; -} -package Unicode::LineBreak::SouthEastAsian { -sub supported() ; -} -package Unicode::Normalize { -sub FCC($) ; -sub NFC($) ; -sub NFD($) ; -sub NFKC($) ; -sub NFKD($) ; -sub checkFCC($) ; -sub checkFCD($) ; -sub checkNFC($) ; -sub checkNFD($) ; -sub checkNFKC($) ; -sub checkNFKD($) ; -sub compose($) ; -sub composeContiguous($) ; -sub decompose($;$) ; -sub getCanon($) ; -sub getCombinClass($) ; -sub getCompat($) ; -sub getComposite($$) ; -sub isComp2nd($) ; -sub isComp_Ex($) ; -sub isExclusion($) ; -sub isNFC_MAYBE($) ; -sub isNFC_NO($) ; -sub isNFD_NO($) ; -sub isNFKC_MAYBE($) ; -sub isNFKC_NO($) ; -sub isNFKD_NO($) ; -sub isNonStDecomp($) ; -sub isSingleton($) ; -sub reorder($) ; -sub splitOnLastStarter; -} -package Unicode::UTF8 { -sub decode_utf8; -sub encode_utf8; -sub valid_utf8; -} -package Variable::Magic { -sub CLONE; -sub _wizard; -sub cast(\[$@%&*]$@) ; -sub dispell(\[$@%&*]$) ; -sub getdata(\[$@%&*]$) ; -} -package Win32 { -sub AbortSystemShutdown; -sub CopyFile; -sub CreateDirectory; -sub CreateFile; -sub DomainName; -sub ExpandEnvironmentStrings; -sub FormatMessage; -sub FreeLibrary; -sub FsType; -sub GetACP; -sub GetANSIPathName; -sub GetArchName; -sub GetChipName; -sub GetConsoleCP; -sub GetConsoleOutputCP; -sub GetCurrentProcessId; -sub GetCurrentThreadId; -sub GetCwd; -sub GetFileVersion; -sub GetFolderPath; -sub GetFullPathName; -sub GetLastError; -sub GetLongPathName; -sub GetNextAvailDrive; -sub GetOEMCP; -sub GetOSVersion; -sub GetProcAddress; -sub GetProductInfo; -sub GetShortPathName; -sub GetSystemMetrics; -sub GetTickCount; -sub GuidGen; -sub InitiateSystemShutdown; -sub IsAdminUser; -sub IsWin95; -sub IsWinNT; -sub LoadLibrary; -sub LoginName; -sub LookupAccountName; -sub LookupAccountSID; -sub MsgBox; -sub NodeName; -sub OutputDebugString; -sub RegisterServer; -sub SetChildShowWindow; -sub SetConsoleCP; -sub SetConsoleOutputCP; -sub SetCwd; -sub SetLastError; -sub Sleep; -sub Spawn; -sub UnregisterServer; -} -package Win32::API { -sub Call; -sub FreeLibrary; -sub FromUnicode; -sub GetMagicSV; -sub GetModuleFileName; -sub GetProcAddress; -sub IsBadReadPtr; -sub IsBadStringPtr; -sub LoadLibrary; -sub MoveMemory; -sub PointerAt; -sub PointerTo; -sub ReadMemory; -sub SafeReadWideCString; -sub SetMagicSV; -sub ToUnicode; -sub WriteMemory; -sub _Align; -sub _ImportXS; -sub _TruncateToWideNull; -sub _my_cxt_clone; -sub looks_like_number($) ; -sub weaken($) ; -} -package Win32::API::Callback { -sub IsBadStringPtr; -sub MakeParamArr; -sub PackedRVTarget; -sub WriteMemory; -} -package Win32::API::Callback::HeapBlock { -sub DESTROY; -sub new; -} -package Win32::API::Callback::IATPatch { -sub CLONE_SKIP; -sub DESTROY; -sub GetOriginalFunctionPtr; -sub Unpatch; -sub new; -} -package Win32::Clipboard { -sub Empty; -sub EnumFormats; -sub GetAs; -sub GetBitmap; -sub GetFiles; -sub GetFormatName; -sub GetText; -sub IsBitmap; -sub IsFiles; -sub IsFormatAvailable; -sub IsText; -sub Set; -sub StartClipboardViewer; -sub StopClipboardViewer; -sub WaitForChange; -sub constant; -} -package Win32::Console { -sub Alloc; -sub Free; -sub MouseButtons; -sub _CloseHandle; -sub _CreateConsoleScreenBuffer; -sub _FillConsoleOutputAttribute; -sub _FillConsoleOutputCharacter; -sub _FlushConsoleInputBuffer; -sub _GenerateConsoleCtrlEvent; -sub _GetConsoleCP; -sub _GetConsoleCursorInfo; -sub _GetConsoleMode; -sub _GetConsoleOutputCP; -sub _GetConsoleScreenBufferInfo; -sub _GetConsoleTitle; -sub _GetLargestConsoleWindowSize; -sub _GetNumberOfConsoleInputEvents; -sub _GetStdHandle; -sub _PeekConsoleInput; -sub _ReadConsole; -sub _ReadConsoleInput; -sub _ReadConsoleOutput; -sub _ReadConsoleOutputAttribute; -sub _ReadConsoleOutputCharacter; -sub _ScrollConsoleScreenBuffer; -sub _SetConsoleActiveScreenBuffer; -sub _SetConsoleCP; -sub _SetConsoleCursorInfo; -sub _SetConsoleCursorPosition; -sub _SetConsoleIcon; -sub _SetConsoleMode; -sub _SetConsoleOutputCP; -sub _SetConsoleScreenBufferSize; -sub _SetConsoleTextAttribute; -sub _SetConsoleTitle; -sub _SetConsoleWindowInfo; -sub _SetStdHandle; -sub _WriteConsole; -sub _WriteConsoleInput; -sub _WriteConsoleOutput; -sub _WriteConsoleOutputAttribute; -sub _WriteConsoleOutputCharacter; -sub constant; -} -package Win32::Console::ANSI { -sub Cls() ; -sub Cursor(;@) ; -sub CursorSize(;@) ; -sub MinimizeAll() ; -sub ScriptCP(;@) ; -sub SetCloseButton($) ; -sub SetConsoleFullScreen($) ; -sub SetConsoleSize($$) ; -sub SetMonitorState($) ; -sub ShowConsoleWindow($) ; -sub Title(;@) ; -sub XYMax() ; -sub _GetConsoleColors() ; -sub _GetCursorInfo() ; -sub _ScreenDump() ; -sub _SetConsoleStandard() ; -sub _chcp($$) ; -} -package Win32::Daemon { -sub AcceptedControls; -sub CallbackTimer; -sub ConfigureService; -sub CreateService; -sub DebugOutputPath; -sub DeleteService; -sub GetLastError; -sub GetSecurity; -sub GetServiceHandle; -sub GetVersion; -sub HideService; -sub IsDebugBuild; -sub QueryLastMessage; -sub QueryServiceConfig; -sub RegisterCallbacks; -sub RestoreService; -sub SetSecurity; -sub SetServiceBits; -sub ShowService; -sub StartService; -sub State; -sub StopService; -sub Timeout; -} -package Win32::EventLog { -sub BackupEventLog; -sub ClearEventLog; -sub CloseEventLog; -sub DeregisterEventSource; -sub EVENTLOG_AUDIT_FAILURE; -sub EVENTLOG_AUDIT_SUCCESS; -sub EVENTLOG_BACKWARDS_READ; -sub EVENTLOG_END_ALL_PAIRED_EVENTS; -sub EVENTLOG_END_PAIRED_EVENT; -sub EVENTLOG_FORWARDS_READ; -sub EVENTLOG_PAIRED_EVENT_ACTIVE; -sub EVENTLOG_PAIRED_EVENT_INACTIVE; -sub EVENTLOG_SEEK_READ; -sub EVENTLOG_SEQUENTIAL_READ; -sub EVENTLOG_START_PAIRED_EVENT; -sub EVENTLOG_SUCCESS; -sub GetEventLogText; -sub GetNumberOfEventLogRecords; -sub GetOldestEventLogRecord; -sub OpenBackupEventLog; -sub OpenEventLog; -sub ReadEventLog; -sub RegisterEventSource; -sub WriteEventLog; -sub constant; -} -package Win32::Exe { -sub DELEGATE_SUBS() ; -sub DISPATCH_TABLE() ; -sub FORMAT() ; -} -package Win32::Exe::Base { -sub FORMAT() ; -} -package Win32::Exe::DebugTable { -sub FORMAT() ; -} -package Win32::Exe::IconFile { -sub DEFAULT_ARGS() ; -sub DISPATCH_TABLE() ; -sub FORMAT() ; -} -package Win32::Exe::InsertResourceSection { -sub _insert_resource_section; -} -package Win32::File { -sub GetAttributes($$) ; -sub SetAttributes($$) ; -sub constant($) ; -} -package Win32::GuiTest { -sub AllocateVirtualBufferImp; -sub CheckButton; -sub ClientToScreen; -sub EnableWindow; -sub FreeVirtualBufferImp; -sub GetActiveWindow; -sub GetAsyncKeyState; -sub GetCaretPos; -sub GetChildDepth; -sub GetChildWindows; -sub GetClassName; -sub GetComboContents; -sub GetComboText; -sub GetCursorPos; -sub GetDesktopWindow; -sub GetFocus; -sub GetForegroundWindow; -sub GetHeaderColumnCount; -sub GetListContents; -sub GetListText; -sub GetListViewHeader; -sub GetListViewItem; -sub GetListViewItemCount; -sub GetMenu; -sub GetMenuItemCount; -sub GetMenuItemID; -sub GetMenuItemIndex; -sub GetMenuItemInfo; -sub GetParent; -sub GetPopupHandle; -sub GetScreenRes; -sub GetSubMenu; -sub GetSystemMenu; -sub GetTabItems; -sub GetTreeViewSelPath; -sub GetWindow; -sub GetWindowLong; -sub GetWindowRect; -sub GetWindowText; -sub GrayOutButton; -sub IsCheckedButton; -sub IsChild; -sub IsGrayedButton; -sub IsListViewItemSel; -sub IsTabItemSel; -sub IsWindow; -sub IsWindowEnabled; -sub IsWindowVisible; -sub MouseMoveAbsPix; -sub MouseMoveWheel; -sub NormToScreen; -sub PostMessage; -sub ReadFromVirtualBufferImp; -sub ScreenToClient; -sub ScreenToNorm; -sub SelComboItem; -sub SelComboItemText; -sub SelComboString; -sub SelListViewItem; -sub SelListViewItemText; -sub SelTabItem; -sub SelTabItemText; -sub SendLButtonDown; -sub SendLButtonUp; -sub SendMButtonDown; -sub SendMButtonUp; -sub SendMessage; -sub SendMouseMoveAbs; -sub SendMouseMoveRel; -sub SendRButtonDown; -sub SendRButtonUp; -sub SendRawKey; -sub SetActiveWindow; -sub SetFocus; -sub SetForegroundWindow; -sub SetWindowPos; -sub ShowWindow; -sub TabCtrl_GetCurFocus; -sub TabCtrl_GetItemCount; -sub TabCtrl_SetCurFocus; -sub TabCtrl_SetCurSel; -sub UnCheckButton; -sub UnicodeSemantics; -sub VkKeyScan; -sub WMGetText; -sub WMSetText; -sub WaitForReady; -sub WindowFromPoint; -sub WriteToVirtualBufferImp; -} -package Win32::GuiTest::DibSect { -sub CopyClient; -sub CopyWindow; -sub DESTROY; -sub Destroy; -sub Invert; -sub SaveAs; -sub ToClipboard; -sub ToGrayScale; -sub new; -} -package Win32::Job { -sub DESTROY; -sub kill; -sub new; -sub run; -sub spawn; -sub status; -sub watch; -} -package Win32::Job::_handle { -sub DESTROY; -} -package Win32::OLE { -sub DESTROY; -sub Dispatch; -sub EnumAllObjects; -sub Forward; -sub FreeUnusedLibraries; -sub GetActiveObject; -sub GetIDsOfNames; -sub GetObject; -sub GetTypeInfo; -sub Initialize; -sub MessageLoop; -sub QueryInterface; -sub QueryObjectType; -sub QuitMessageLoop; -sub SpinMessageLoop; -sub Uninitialize; -sub WithEvents; -sub _Unique; -sub new; -} -package Win32::OLE::Const { -sub _Constants; -sub _LoadRegTypeLib; -sub _ShowHelpContext; -sub _Typelibs; -} -package Win32::OLE::Enum { -sub All; -sub Clone; -sub DESTROY; -sub Next; -sub Reset; -sub Skip; -sub new; -} -package Win32::OLE::NLS { -sub CompareString; -sub GetLocaleInfo; -sub GetStringType; -sub GetSystemDefaultLCID; -sub GetSystemDefaultLangID; -sub GetUserDefaultLCID; -sub GetUserDefaultLangID; -sub LCMapString; -sub SendSettingChange; -sub SetLocaleInfo; -} -package Win32::OLE::Tie { -sub DESTROY; -sub FIRSTENUM; -sub FIRSTKEY; -sub Fetch; -sub NEXTENUM; -sub NEXTKEY; -sub Store; -} -package Win32::OLE::TypeInfo { -sub DESTROY; -sub GetContainingTypeLib; -sub _GetDocumentation; -sub _GetFuncDesc; -sub _GetImplTypeFlags; -sub _GetImplTypeInfo; -sub _GetNames; -sub _GetTypeAttr; -sub _GetVarDesc; -sub _new; -} -package Win32::OLE::TypeLib { -sub DESTROY; -sub GetTypeInfo; -sub _GetDocumentation; -sub _GetLibAttr; -sub _GetTypeInfo; -sub _GetTypeInfoCount; -sub new; -} -package Win32::OLE::Variant { -sub As; -sub ChangeType; -sub Copy; -sub Currency; -sub DESTROY; -sub Date; -sub Dim; -sub Get; -sub IsNothing; -sub IsNullString; -sub LastError; -sub Number; -sub Put; -sub Time; -sub Type; -sub Unicode; -sub Value; -sub _Clone; -sub _RefType; -sub _Value; -sub new; -} -package Win32::Pipe { -sub Info; -sub PipeBufferSize; -sub PipeClose; -sub PipeConnect; -sub PipeCreate; -sub PipeDisconnect; -sub PipeError; -sub PipeRead; -sub PipeResizeBuffer; -sub PipeWrite; -sub constant; -} -package Win32::Process { -sub Create; -sub DESTROY; -sub GetCurrentProcessID; -sub GetExitCode; -sub GetPriorityClass; -sub GetProcessAffinityMask; -sub GetProcessID; -sub Kill; -sub KillProcess; -sub Open; -sub Resume; -sub SetPriorityClass; -sub SetProcessAffinityMask; -sub Suspend; -sub Wait; -sub constant; -sub get_Win32_IPC_HANDLE; -sub get_process_handle; -} -package Win32::Service { -sub GetServices; -sub GetStatus; -sub PauseService; -sub ResumeService; -sub StartService; -sub StopService; -sub constant; -} -package Win32::UTCFileTime { -sub CLONE(;@) ; -sub _alt_stat($) ; -sub _get_utc_file_times($) ; -sub _set_error_mode($) ; -sub _set_utc_file_times($$$) ; -sub constant($) ; -} -package Win32::WinError { -sub constant; -} -package Win32API::File { -sub CloseHandle; -sub CopyFileA; -sub CopyFileW; -sub CreateFileA; -sub CreateFileW; -sub DefineDosDeviceA; -sub DefineDosDeviceW; -sub DeleteFileA; -sub DeleteFileW; -sub DeviceIoControl; -sub FdGetOsFHandle; -sub GetDriveTypeA; -sub GetDriveTypeW; -sub GetFileAttributesA; -sub GetFileAttributesW; -sub GetFileSize; -sub GetFileType; -sub GetHandleInformation; -sub GetLogicalDriveStringsA; -sub GetLogicalDriveStringsW; -sub GetLogicalDrives; -sub GetOverlappedResult; -sub GetStdHandle; -sub GetVolumeInformationA; -sub GetVolumeInformationW; -sub IsContainerPartition; -sub IsRecognizedPartition; -sub MoveFileA; -sub MoveFileExA; -sub MoveFileExW; -sub MoveFileW; -sub OsFHandleOpenFd; -sub QueryDosDeviceA; -sub QueryDosDeviceW; -sub ReadFile; -sub SetErrorMode; -sub SetFilePointer; -sub SetHandleInformation; -sub SetStdHandle; -sub WriteFile; -sub _fileLastError; -} -package Win32API::Registry { -sub AbortSystemShutdownA; -sub AbortSystemShutdownW; -sub AllowPriv; -sub InitiateSystemShutdownA; -sub InitiateSystemShutdownW; -sub RegCloseKey; -sub RegConnectRegistryA; -sub RegConnectRegistryW; -sub RegCreateKeyA; -sub RegCreateKeyExA; -sub RegCreateKeyExW; -sub RegCreateKeyW; -sub RegDeleteKeyA; -sub RegDeleteKeyW; -sub RegDeleteValueA; -sub RegDeleteValueW; -sub RegFlushKey; -sub RegLoadKeyA; -sub RegLoadKeyW; -sub RegNotifyChangeKeyValue; -sub RegOpenKeyA; -sub RegOpenKeyExA; -sub RegOpenKeyExW; -sub RegOpenKeyW; -sub RegReplaceKeyA; -sub RegReplaceKeyW; -sub RegRestoreKeyA; -sub RegRestoreKeyW; -sub RegSaveKeyA; -sub RegSaveKeyW; -sub RegSetKeySecurity; -sub RegUnLoadKeyA; -sub RegUnLoadKeyW; -sub _RegEnumKeyA; -sub _RegEnumKeyExA; -sub _RegEnumKeyExW; -sub _RegEnumKeyW; -sub _RegEnumValueA; -sub _RegEnumValueW; -sub _RegGetKeySecurity; -sub _RegQueryInfoKeyA; -sub _RegQueryInfoKeyW; -sub _RegQueryMultipleValuesA; -sub _RegQueryMultipleValuesW; -sub _RegQueryValueA; -sub _RegQueryValueExA; -sub _RegQueryValueExW; -sub _RegQueryValueW; -sub _RegSetValueA; -sub _RegSetValueExA; -sub _RegSetValueExW; -sub _RegSetValueW; -sub _regLastError; -} -package XML::LibXML { -sub AUTOLOAD; -sub DISABLE_THREAD_SUPPORT; -sub HAVE_READER; -sub HAVE_SCHEMAS; -sub HAVE_STRUCT_ERRORS; -sub HAVE_THREAD_SUPPORT; -sub INIT_THREAD_SUPPORT; -sub LIBXML_DOTTED_VERSION; -sub LIBXML_RUNTIME_VERSION; -sub LIBXML_VERSION; -sub _CLONE; -sub _default_catalog; -sub _dump_registry; -sub _end_push; -sub _end_sax_push; -sub _externalEntityLoader; -sub _leaked_nodes; -sub _parse_fh; -sub _parse_file; -sub _parse_html_fh; -sub _parse_html_file; -sub _parse_html_string; -sub _parse_sax_fh; -sub _parse_sax_file; -sub _parse_sax_string; -sub _parse_sax_xml_chunk; -sub _parse_string; -sub _parse_xml_chunk; -sub _processXIncludes; -sub _push; -sub _start_push; -sub decodeFromUTF8; -sub encodeToUTF8; -sub export_GDOME; -sub import_GDOME; -sub load_catalog; -} -package XML::LibXML::Attr { -sub _setNamespace; -sub getNextSibling; -sub getOwnerElement; -sub getParentNode; -sub getPreviousSibling; -sub getValue; -sub isId; -sub name; -sub new; -sub nextSibling; -sub ownerElement; -sub parentElement; -sub previousSibling; -sub serialize; -sub serializeContent; -sub setValue; -sub toString; -sub value; -} -package XML::LibXML::CDATASection { -sub new; -} -package XML::LibXML::Comment { -sub new; -} -package XML::LibXML::Common { -sub decodeFromUTF8; -sub encodeToUTF8; -} -package XML::LibXML::Devel { -sub fix_owner; -sub mem_used; -sub node_from_perl; -sub node_to_perl; -sub refcnt; -sub refcnt_dec; -sub refcnt_inc; -} -package XML::LibXML::Document { -sub URI; -sub _setDocumentElement; -sub _toString; -sub adoptNode; -sub cloneNode; -sub compression; -sub createAttribute; -sub createAttributeNS; -sub createCDATASection; -sub createComment; -sub createDTD; -sub createDocument; -sub createDocumentFragment; -sub createElement; -sub createElementNS; -sub createEntityReference; -sub createExternalSubset; -sub createInternalSubset; -sub createPI; -sub createProcessingInstruction; -sub createRawElement; -sub createRawElementNS; -sub createTextNode; -sub documentElement; -sub documentURI; -sub encoding; -sub externalSubset; -sub getDocumentElement; -sub getElementById; -sub getElementsById; -sub getEncoding; -sub getVersion; -sub importNode; -sub indexElements; -sub internalSubset; -sub is_valid; -sub new; -sub removeExternalSubset; -sub removeInternalSubset; -sub serialize_html; -sub setCompression; -sub setEncoding; -sub setExternalSubset; -sub setInternalSubset; -sub setStandalone; -sub setURI; -sub setVersion; -sub standalone; -sub toFH; -sub toFile; -sub toStringHTML; -sub validate; -sub version; -sub xmlEncoding; -sub xmlStandalone; -sub xmlVersion; -} -package XML::LibXML::DocumentFragment { -sub addNewChild; -sub appendText; -sub appendTextNode; -sub new; -} -package XML::LibXML::Dtd { -sub getPublicId; -sub getSystemId; -sub new; -sub parse_string; -sub parse_uri; -sub publicId; -sub systemId; -} -package XML::LibXML::Element { -sub _getAttribute; -sub _getAttributeNS; -sub _getNamespaceDeclURI; -sub _setAttribute; -sub _setAttributeNS; -sub _setNamespace; -sub addNewChild; -sub appendText; -sub appendTextChild; -sub appendTextNode; -sub blessed($) ; -sub getAttributeNode; -sub getAttributeNodeNS; -sub hasAttribute; -sub hasAttributeNS; -sub new; -sub removeAttribute; -sub removeAttributeNS; -sub removeAttributeNode; -sub setAttributeNode; -sub setAttributeNodeNS; -sub setNamespaceDeclPrefix; -sub setNamespaceDeclURI; -sub tagName; -} -package XML::LibXML::HashTable { -sub DESTROY; -sub new; -} -package XML::LibXML::InputCallback { -sub lib_cleanup_callbacks; -sub lib_init_callbacks; -} -package XML::LibXML::LibError { -sub code; -sub context_and_column; -sub domain; -sub file; -sub int1; -sub int2; -sub level; -sub line; -sub message; -sub num1; -sub num2; -sub str1; -sub str2; -sub str3; -} -package XML::LibXML::Namespace { -sub DESTROY; -sub _isEqual; -sub declaredPrefix; -sub declaredURI; -sub getData; -sub getLocalName; -sub getType; -sub getValue; -sub href; -sub localname; -sub new; -sub nodeType; -sub nodeValue; -sub unique_key; -sub value2; -sub value; -} -package XML::LibXML::Node { -sub DESTROY; -sub _attributes; -sub _childNodes; -sub _find; -sub _findnodes; -sub _getChildrenByTagNameNS; -sub _toStringC14N; -sub addChild; -sub addSibling; -sub appendChild; -sub baseURI; -sub cloneNode; -sub firstChild; -sub firstNonBlankChild; -sub getAttributes; -sub getChildnodes; -sub getData; -sub getFirstChild; -sub getLastChild; -sub getLocalName; -sub getName; -sub getNamespace; -sub getNamespaceURI; -sub getNamespaces; -sub getNextSibling; -sub getOwner; -sub getOwnerDocument; -sub getOwnerElement; -sub getParentNode; -sub getPrefix; -sub getPreviousSibling; -sub getType; -sub getValue; -sub hasAttributes; -sub hasChildNodes; -sub insertAfter; -sub insertBefore; -sub isEqual; -sub isSameNode; -sub lastChild; -sub line_number; -sub localNS; -sub localName; -sub localNamespace; -sub localname; -sub lookupNamespacePrefix; -sub lookupNamespaceURI; -sub namespaceURI; -sub namespaces; -sub nextNonBlankSibling; -sub nextSibling; -sub nodeName; -sub nodePath; -sub nodeType; -sub nodeValue; -sub normalize; -sub ownerDocument; -sub ownerNode; -sub parentNode; -sub prefix; -sub previousNonBlankSibling; -sub previousSibling; -sub removeChild; -sub removeChildNodes; -sub replaceChild; -sub replaceNode; -sub serialize; -sub setBaseURI; -sub setName; -sub setNodeName; -sub setRawName; -sub string_value; -sub textContent; -sub toString; -sub to_literal; -sub to_number; -sub unbindNode; -sub unique_key; -sub unlink; -sub unlinkNode; -} -package XML::LibXML::PI { -sub _setData; -} -package XML::LibXML::ParserContext { -sub DESTROY; -} -package XML::LibXML::Pattern { -sub DESTROY; -sub _compilePattern; -sub matchesNode; -} -package XML::LibXML::Reader { -sub _DESTROY; -sub _close; -sub _getParserProp; -sub _newForDOM; -sub _newForFd; -sub _newForFile; -sub _newForIO; -sub _newForString; -sub _nodePath; -sub _preservePattern; -sub _setParserProp; -sub _setRelaxNG; -sub _setRelaxNGFile; -sub _setXSD; -sub _setXSDFile; -sub attributeCount; -sub baseURI; -sub byteConsumed; -sub columnNumber; -sub copyCurrentNode; -sub depth; -sub document; -sub encoding; -sub finish; -sub getAttribute; -sub getAttributeHash; -sub getAttributeNo; -sub getAttributeNs; -sub hasAttributes; -sub hasValue; -sub isDefault; -sub isEmptyElement; -sub isNamespaceDecl; -sub isValid; -sub lineNumber; -sub localName; -sub lookupNamespace; -sub matchesPattern; -sub moveToAttribute; -sub moveToAttributeNo; -sub moveToAttributeNs; -sub moveToElement; -sub moveToFirstAttribute; -sub moveToNextAttribute; -sub name; -sub namespaceURI; -sub next; -sub nextElement; -sub nextPatternMatch; -sub nextSibling; -sub nextSiblingElement; -sub nodeType; -sub prefix; -sub preserveNode; -sub quoteChar; -sub read; -sub readAttributeValue; -sub readInnerXml; -sub readOuterXml; -sub readState; -sub skipSiblings; -sub standalone; -sub value; -sub xmlLang; -sub xmlVersion; -} -package XML::LibXML::RegExp { -sub DESTROY; -sub _compile; -sub isDeterministic; -sub matches; -} -package XML::LibXML::RelaxNG { -sub DESTROY; -sub parse_buffer; -sub parse_document; -sub parse_location; -sub validate; -} -package XML::LibXML::Schema { -sub DESTROY; -sub parse_buffer; -sub parse_location; -sub validate; -} -package XML::LibXML::Text { -sub appendData; -sub data; -sub deleteData; -sub insertData; -sub new; -sub replaceData; -sub setData; -sub substringData; -} -package XML::LibXML::XPathContext { -sub DESTROY; -sub _find; -sub _findnodes; -sub _free_node_pool; -sub getContextNode; -sub getContextPosition; -sub getContextSize; -sub getVarLookupData; -sub getVarLookupFunc; -sub lookupNs; -sub new; -sub registerFunctionNS; -sub registerNs; -sub registerVarLookupFunc; -sub setContextNode; -sub setContextPosition; -sub setContextSize; -} -package XML::LibXML::XPathExpression { -sub DESTROY; -sub new; -} -package XML::LibXSLT { -sub HAVE_EXSLT; -sub INIT_THREAD_SUPPORT; -sub LIBXSLT_DOTTED_VERSION; -sub LIBXSLT_RUNTIME_VERSION; -sub LIBXSLT_VERSION; -sub _parse_stylesheet; -sub _parse_stylesheet_file; -sub debug_callback; -sub decodeFromUTF8; -sub encodeToUTF8; -sub max_depth; -sub max_vars; -sub register_function; -sub xinclude_default; -} -package XML::LibXSLT::Stylesheet { -sub DESTROY; -sub _output_string; -sub media_type; -sub output_encoding; -sub output_fh; -sub output_file; -sub output_method; -sub transform; -sub transform_file; -} -package XML::LibXSLT::StylesheetWrapper { -sub decodeFromUTF8; -sub encodeToUTF8; -} -package XML::LibXSLT::TransformContext { -sub stylesheet; -} -package XML::Parser::Expat { -sub DefaultCurrent; -sub Do_External_Parse; -sub ElementIndex; -sub ErrorString; -sub FreeEncoding; -sub GenerateNSName; -sub GetBase; -sub GetCurrentByteIndex; -sub GetCurrentColumnNumber; -sub GetCurrentLineNumber; -sub GetErrorCode; -sub GetSpecifiedAttributeCount; -sub LoadEncoding; -sub OriginalString; -sub ParseDone; -sub ParsePartial; -sub ParseStream; -sub ParseString; -sub ParserCreate; -sub ParserFree; -sub ParserRelease; -sub PositionContext; -sub RecognizedString; -sub SetAttListDeclHandler; -sub SetBase; -sub SetCharacterDataHandler; -sub SetCommentHandler; -sub SetDefaultHandler; -sub SetDoctypeHandler; -sub SetElementDeclHandler; -sub SetEndCdataHandler; -sub SetEndDoctypeHandler; -sub SetEndElementHandler; -sub SetEntityDeclHandler; -sub SetExtEntFinishHandler; -sub SetExternalEntityRefHandler; -sub SetNotationDeclHandler; -sub SetProcessingInstructionHandler; -sub SetStartCdataHandler; -sub SetStartElementHandler; -sub SetUnparsedEntityDeclHandler; -sub SetXMLDeclHandler; -sub SkipUntil; -sub UnsetAllHandlers; -} -package YAML::XS::LibYAML { -sub Dump; -sub Load; -} -package attributes { -sub _fetch_attrs($) ; -sub _guess_stash($) ; -sub _modify_attrs; -sub reftype($) ; -} -package bytes { -sub chr(_) ; -sub index($$;$) ; -sub length(_) ; -sub ord(_) ; -sub rindex($$;$) ; -sub substr($$;$$) ; -} -package constant { -sub _make_const(\[$@]) ; -} -package mro { -sub _nextcan; -sub get_isarev($) ; -sub get_linear_isa($;$) ; -sub get_mro($) ; -sub get_pkg_gen($) ; -sub invalidate_all_method_caches() ; -sub is_universal($) ; -sub method_changed_in($) ; -sub set_mro($$) ; -} -package re { -sub install; -sub is_regexp($) ; -sub regexp_pattern($) ; -sub regmust($) ; -sub regname(;$$) ; -sub regnames(;$) ; -sub regnames_count() ; -} -package threads { -sub DESTROY; -sub _handle; -sub create; -sub detach; -sub equal; -sub error; -sub get_stack_size; -sub is_detached; -sub is_joinable; -sub is_running; -sub join; -sub kill; -sub list; -sub new; -sub object; -sub self; -sub set_stack_size; -sub set_thread_exit_only; -sub tid; -sub wantarray; -sub yield; -} -package threads::shared { -sub _id(\[$@%]) ; -sub _refcnt(\[$@%]) ; -sub bless($;$) ; -sub blessed($) ; -sub cond_broadcast(\[$@%]) ; -sub cond_signal(\[$@%]) ; -sub cond_timedwait(\[$@%]$;\[$@%]) ; -sub cond_wait(\[$@%];\[$@%]) ; -sub is_shared(\[$@%]) ; -sub refaddr($) ; -sub reftype($) ; -sub share(\[$@%]) ; -} -package threads::shared::tie { -sub EXISTS; -sub EXTEND; -sub FIRSTKEY; -sub NEXTKEY; -sub POP; -sub PUSH; -sub SHIFT; -sub STORESIZE; -sub UNSHIFT; -} -package utf8 { -sub decode; -sub downgrade; -sub encode; -sub is_utf8; -sub native_to_unicode; -sub unicode_to_native; -sub upgrade; -sub valid; -} -package version { -sub _VERSION; -sub boolean; -sub declare; -sub is_alpha; -sub is_qv; -sub new; -sub noop; -sub normal; -sub numify; -sub parse; -sub qv; -sub stringify; -sub vcmp; -} -- cgit v1.2.3 From 71dbb008004342bdb9a6e9ac0a181408a016d07b Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 30 Oct 2019 18:47:02 -0400 Subject: Address review comments --- include/decompress.h | 1 - src/data/ingame_trades.h | 18 +++++++++--------- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/include/decompress.h b/include/decompress.h index 37600e8d3..3f3a02d7b 100644 --- a/include/decompress.h +++ b/include/decompress.h @@ -24,7 +24,6 @@ void DecompressPicFromTable_DontHandleDeoxys(const struct CompressedSpriteSheet void HandleLoadSpecialPokePic(const struct CompressedSpriteSheet *src, void *dest, s32 species, u32 personality); void HandleLoadSpecialPokePic_DontHandleDeoxys(const struct CompressedSpriteSheet *src, void *dest, s32 species, u32 personality); -void HandleLoadSpecialPokePic(const struct CompressedSpriteSheet *src, void *dest, s32 species, u32 personality); void LoadSpecialPokePic(const struct CompressedSpriteSheet *src, void *dest, s32 species, u32 personality, bool8 isFrontPic); void LoadSpecialPokePic_2(const struct CompressedSpriteSheet *src, void *dest, s32 species, u32 personality, bool8 isFrontPic); diff --git a/src/data/ingame_trades.h b/src/data/ingame_trades.h index 102b6865f..ba8abb47b 100644 --- a/src/data/ingame_trades.h +++ b/src/data/ingame_trades.h @@ -3,7 +3,7 @@ const struct InGameTrade gInGameTrades[] = { .nickname = _("MIMIEN"), .species = SPECIES_MR_MIME, .ivs = {20, 15, 17, 24, 23, 22}, - .abilityNum = FALSE, + .abilityNum = 0, .otId = 1985, .conditions = {5, 5, 5, 30, 5}, .personality = 0x00009cae, @@ -17,7 +17,7 @@ const struct InGameTrade gInGameTrades[] = { .nickname = _("ZYNX"), .species = SPECIES_JYNX, .ivs = {18, 17, 18, 22, 25, 21}, - .abilityNum = FALSE, + .abilityNum = 0, .otId = 36728, .conditions = {5, 30, 5, 5, 5}, .personality = 0x498a2e1d, @@ -31,7 +31,7 @@ const struct InGameTrade gInGameTrades[] = { .nickname = _("MS. NIDO"), .species = SPECIES_NIDORAN_F, .ivs = {22, 18, 25, 19, 15, 22}, - .abilityNum = FALSE, + .abilityNum = 0, .otId = 63184, .conditions = {5, 5, 5, 5, 30}, .personality = 0x4c970b89, @@ -45,7 +45,7 @@ const struct InGameTrade gInGameTrades[] = { .nickname = _("CH'DING"), .species = SPECIES_FARFETCHD, .ivs = {20, 25, 21, 24, 15, 20}, - .abilityNum = FALSE, + .abilityNum = 0, .otId = 8810, .conditions = {30, 5, 5, 5, 5}, .personality = 0x151943d7, @@ -59,7 +59,7 @@ const struct InGameTrade gInGameTrades[] = { .nickname = _("NINA"), .species = SPECIES_NIDORINA, .ivs = {22, 25, 18, 19, 22, 15}, - .abilityNum = FALSE, + .abilityNum = 0, .otId = 13637, .conditions = {5, 5, 30, 5, 5}, .personality = 0x00eeca15, @@ -73,7 +73,7 @@ const struct InGameTrade gInGameTrades[] = { .nickname = _("MARC"), .species = SPECIES_LICKITUNG, .ivs = {24, 19, 21, 15, 23, 21}, - .abilityNum = FALSE, + .abilityNum = 0, .otId = 1239, .conditions = {5, 5, 5, 5, 30}, .personality = 0x451308ab, @@ -87,7 +87,7 @@ const struct InGameTrade gInGameTrades[] = { .nickname = _("ESPHERE"), .species = SPECIES_ELECTRODE, .ivs = {19, 16, 18, 25, 25, 19}, - .abilityNum = TRUE, + .abilityNum = 1, .otId = 50298, .conditions = {30, 5, 5, 5, 5}, .personality = 0x06341016, @@ -101,7 +101,7 @@ const struct InGameTrade gInGameTrades[] = { .nickname = _("TANGENY"), .species = SPECIES_TANGELA, .ivs = {22, 17, 25, 16, 23, 20}, - .abilityNum = FALSE, + .abilityNum = 0, .otId = 60042, .conditions = {5, 5, 30, 5, 5}, .personality = 0x5c77ecfa, @@ -116,7 +116,7 @@ const struct InGameTrade gInGameTrades[] = { .nickname = _("SEELOR"), .species = SPECIES_SEEL, .ivs = {24, 15, 22, 16, 23, 22}, - .abilityNum = FALSE, + .abilityNum = 0, .otId = 9853, .conditions = {5, 5, 5, 5, 30}, .personality = 0x482cac89, -- cgit v1.2.3 From f86bb07027d2a93b3d0abc572d2741f9ee2e795d Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 30 Oct 2019 21:06:15 -0400 Subject: Review comments and documentation --- asm/battle_tower.s | 4 +- asm/cable_club.s | 4 +- asm/evolution_scene.s | 2 +- asm/link_rfu_3.s | 2 +- asm/party_menu.s | 20 +- baserom.ips | Bin 553618 -> 537206 bytes data/graphics.s | 26 +- graphics/trade/menu.png | Bin 608 -> 609 bytes graphics/trade/menu_mon_box.bin | Bin 0 -> 36 bytes graphics/trade/pokeball.png | Bin 0 -> 464 bytes graphics/trade/unknown_DDB444.pal | 19 ++ graphics/trade/unknown_DDCF04.bin | Bin 0 -> 2048 bytes graphics/unused/unused_DDCEE4.bin | Bin 0 -> 32 bytes include/graphics.h | 10 +- include/pokemon_icon.h | 8 +- include/trade.h | 2 +- include/trade_scene.h | 2 +- include/util.h | 2 +- src/data/ingame_trades.h | 4 +- src/trade.c | 199 ++++++------- src/trade_scene.c | 595 +++++++++++++++++++------------------- 21 files changed, 467 insertions(+), 432 deletions(-) create mode 100644 graphics/trade/menu_mon_box.bin create mode 100644 graphics/trade/pokeball.png create mode 100644 graphics/trade/unknown_DDB444.pal create mode 100644 graphics/trade/unknown_DDCF04.bin create mode 100644 graphics/unused/unused_DDCEE4.bin diff --git a/asm/battle_tower.s b/asm/battle_tower.s index 87f01b7fb..fe6aac664 100644 --- a/asm/battle_tower.s +++ b/asm/battle_tower.s @@ -2832,7 +2832,7 @@ _080E6F68: ldrb r1, [r0] movs r0, 0x64 muls r0, r1 - ldr r1, _080E6FB4 @ =gEnemyParty + 0x1f4 + ldr r1, _080E6FB4 @ =gEnemyParty + 500 @ &gEnemyParty[5] adds r0, r1 movs r1, 0x2C muls r1, r4 @@ -2855,7 +2855,7 @@ _080E6FA4: .4byte gSaveBlock2Ptr _080E6FA8: .4byte gSaveBlock1Ptr _080E6FAC: .4byte 0x00002cac _080E6FB0: .4byte 0x0000056d -_080E6FB4: .4byte gEnemyParty + 0x1f4 +_080E6FB4: .4byte gEnemyParty + 500 @ &gEnemyParty[5] thumb_func_end sub_80E6EE0 thumb_func_start SaveBattleTowerProgress diff --git a/asm/cable_club.s b/asm/cable_club.s index 9b4c173c9..d19bb3a35 100644 --- a/asm/cable_club.s +++ b/asm/cable_club.s @@ -2211,7 +2211,7 @@ _080818C4: ldrb r0, [r0] cmp r0, 0 bne _080818D8 - ldr r0, _080818E4 @ =sub_804C718 + ldr r0, _080818E4 @ =CB2_ReturnFromLinkTrade bl SetMainCallback2 adds r0, r5, 0 bl DestroyTask @@ -2221,7 +2221,7 @@ _080818D8: bx r0 .align 2, 0 _080818E0: .4byte gReceivedRemoteLinkPlayers -_080818E4: .4byte sub_804C718 +_080818E4: .4byte CB2_ReturnFromLinkTrade thumb_func_end sub_8081850 thumb_func_start sub_80818E8 diff --git a/asm/evolution_scene.s b/asm/evolution_scene.s index 710ee2b67..dac85320e 100644 --- a/asm/evolution_scene.s +++ b/asm/evolution_scene.s @@ -738,7 +738,7 @@ _080CE3D8: .4byte nullsub_76 _080CE3DC: .4byte sub_80D00D8 _080CE3E0: .4byte gMain _080CE3E4: - bl sub_80544FC + bl LoadTradeAnimGfx b _080CE4EC _080CE3EA: movs r0, 0x20 diff --git a/asm/link_rfu_3.s b/asm/link_rfu_3.s index 4decd66ff..63a894247 100644 --- a/asm/link_rfu_3.s +++ b/asm/link_rfu_3.s @@ -2939,7 +2939,7 @@ sub_8117100: @ 8117100 adds r4, r0, 0 lsls r4, 24 lsrs r4, 24 - bl sub_804C718 + bl CB2_ReturnFromLinkTrade adds r0, r4, 0 bl DestroyTask pop {r4} diff --git a/asm/party_menu.s b/asm/party_menu.s index 91e19ebf2..43a7a6e31 100644 --- a/asm/party_menu.s +++ b/asm/party_menu.s @@ -3033,7 +3033,7 @@ _081201C0: lsrs r6, r0, 29 cmp r6, 0x3 bne _081201F0 - ldr r0, _081201EC @ =gPlayerParty + 0x12C + ldr r0, _081201EC @ =gPlayerParty + 300 @ &gPlayerParty[3] movs r1, 0xB bl GetMonData cmp r0, 0 @@ -3042,12 +3042,12 @@ _081201C0: b _08120290 .align 2, 0 _081201E8: .4byte gUnknown_203B09C -_081201EC: .4byte gPlayerParty + 0x12C +_081201EC: .4byte gPlayerParty + 300 @ &gPlayerParty[3] _081201F0: - ldr r0, _081201F4 @ =gPlayerParty + 0xC8 + ldr r0, _081201F4 @ =gPlayerParty + 200 @ &gPlayerParty[2] b _0812020C .align 2, 0 -_081201F4: .4byte gPlayerParty + 0xC8 +_081201F4: .4byte gPlayerParty + 200 @ &gPlayerParty[2] _081201F8: cmp r0, 0x1 bne _08120290 @@ -3058,7 +3058,7 @@ _081201F8: lsrs r5, r0, 29 cmp r5, 0x5 bne _08120224 - ldr r0, _08120220 @ =gPlayerParty + 0x1F4 + ldr r0, _08120220 @ =gPlayerParty + 500 @ &gPlayerParty[5] _0812020C: movs r1, 0xB bl GetMonData @@ -3068,9 +3068,9 @@ _0812020C: b _08120290 .align 2, 0 _0812021C: .4byte gUnknown_203B09C -_08120220: .4byte gPlayerParty + 0x1F4 +_08120220: .4byte gPlayerParty + 500 @ &gPlayerParty[5] _08120224: - ldr r0, _08120234 @ =gPlayerParty + 0x190 + ldr r0, _08120234 @ =gPlayerParty + 400 @ &gPlayerParty[4] movs r1, 0xB bl GetMonData cmp r0, 0 @@ -3078,7 +3078,7 @@ _08120224: movs r0, 0x4 b _0812028E .align 2, 0 -_08120234: .4byte gPlayerParty + 0x190 +_08120234: .4byte gPlayerParty + 400 @ &gPlayerParty[4] _08120238: ldrb r1, [r4] subs r0, r1, 0x2 @@ -18129,7 +18129,7 @@ _08127A80: .4byte sub_811FB28 sub_8127A84: @ 8127A84 push {r4,lr} adds r4, r0, 0 - ldr r0, _08127AA4 @ =gPlayerParty + 0x64 + ldr r0, _08127AA4 @ =gPlayerParty + 100 @ &gPlayerParty[1] movs r1, 0xB bl GetMonData cmp r0, 0 @@ -18143,7 +18143,7 @@ _08127AA0: movs r0, 0x7 b _08127ABA .align 2, 0 -_08127AA4: .4byte gPlayerParty + 0x64 +_08127AA4: .4byte gPlayerParty + 100 @ &gPlayerParty[1] _08127AA8: ldr r0, _08127AB4 @ =gUnknown_203B0A0 ldrb r0, [r0, 0xB] diff --git a/baserom.ips b/baserom.ips index 02b5aab21..5fc13b159 100644 Binary files a/baserom.ips and b/baserom.ips differ diff --git a/data/graphics.s b/data/graphics.s index 93c5b6614..67e88a6cd 100644 --- a/data/graphics.s +++ b/data/graphics.s @@ -16214,26 +16214,26 @@ gUnknown_8E9CB9C:: @ 8E9CB9C gUnknown_8E9CBBC:: @ 8E9CBBC .incbin "baserom.gba", 0xE9CBBC, 0x320 @UNKNOWN -gUnknown_8E9CEDC:: @ 8E9CEDC - .incbin "baserom.gba", 0xE9CEDC, 0x60 @UNKNOWN +gTradeMenu_Pal:: @ 8E9CEDC + .incbin "graphics/trade/menu.gbapal" -gUnknown_8E9CF3C:: - .incbin "baserom.gba", 0xE9CF3C, 0x20 @UNKNOWN +gTradeButtons_Pal:: @ E9CF3C + .incbin "graphics/trade/unknown_DDB444.gbapal" -gUnknown_8E9CF5C:: @ 8E9CF5C - .incbin "baserom.gba", 0xE9CF5C, 0x1280 @UNKNOWN +gTradeMenu_Gfx:: @ 8E9CF5C + .incbin "graphics/trade/menu.4bpp" -gUnknown_8E9E1DC:: - .incbin "baserom.gba", 0xE9E1DC, 0x800 @UNKNOWN +gTradeButtons_Gfx:: @ E9E1DC + .incbin "graphics/trade/buttons.4bpp" -gUnknown_8E9E9DC:: - .incbin "baserom.gba", 0xE9E9DC, 0x20 @UNKNOWN +gUnknown_8E9E9DC:: @ E9E9DC + .incbin "graphics/unused/unused_DDCEE4.bin" gUnknown_8E9E9FC:: @ 8E9E9FC - .incbin "baserom.gba", 0xE9E9FC, 0x800 @UNKNOWN + .incbin "graphics/trade/unknown_DDCF04.bin" -gUnknown_8E9F1FC:: @ 8E9F1FC - .incbin "baserom.gba", 0xE9F1FC, 0x24 @UNKNOWN +gTradeMenuMonBox_Tilemap:: @ 8E9F1FC + .incbin "graphics/trade/menu_mon_box.bin" gFameCheckerBgPals:: @ 8E9F220 .incbin "data/graphics/fame_checker_bg.gbapal" diff --git a/graphics/trade/menu.png b/graphics/trade/menu.png index 91bc0f7eb..f06e5b35c 100644 Binary files a/graphics/trade/menu.png and b/graphics/trade/menu.png differ diff --git a/graphics/trade/menu_mon_box.bin b/graphics/trade/menu_mon_box.bin new file mode 100644 index 000000000..354866137 Binary files /dev/null and b/graphics/trade/menu_mon_box.bin differ diff --git a/graphics/trade/pokeball.png b/graphics/trade/pokeball.png new file mode 100644 index 000000000..97cc86a6f Binary files /dev/null and b/graphics/trade/pokeball.png differ diff --git a/graphics/trade/unknown_DDB444.pal b/graphics/trade/unknown_DDB444.pal new file mode 100644 index 000000000..bb74b34a2 --- /dev/null +++ b/graphics/trade/unknown_DDB444.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +123 131 222 +98 98 180 +123 106 222 +106 172 238 +82 148 205 +180 189 230 +148 156 189 +205 106 0 +255 189 49 +246 148 0 +255 213 115 +205 74 90 +255 98 32 +205 205 222 +255 98 32 diff --git a/graphics/trade/unknown_DDCF04.bin b/graphics/trade/unknown_DDCF04.bin new file mode 100644 index 000000000..46218245f Binary files /dev/null and b/graphics/trade/unknown_DDCF04.bin differ diff --git a/graphics/unused/unused_DDCEE4.bin b/graphics/unused/unused_DDCEE4.bin new file mode 100644 index 000000000..481183cbd Binary files /dev/null and b/graphics/unused/unused_DDCEE4.bin differ diff --git a/include/graphics.h b/include/graphics.h index 20e322bc1..56a51e67c 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -4215,11 +4215,11 @@ extern const u8 gMonIcon_Unown_QuestionMark[]; extern const u8 gMonIcon_QuestionMark[]; // trade -extern const u16 gUnknown_8E9CEDC[]; -extern const u16 gUnknown_8E9CF3C[]; -extern const u16 gUnknown_8E9CF5C[]; +extern const u16 gTradeMenu_Pal[]; +extern const u16 gTradeButtons_Pal[]; +extern const u16 gTradeMenu_Gfx[]; extern const u16 gUnknown_8E9E9FC[]; -extern const u16 gUnknown_8E9E1DC[]; -extern const u16 gUnknown_8E9F1FC[]; +extern const u16 gTradeButtons_Gfx[]; +extern const u16 gTradeMenuMonBox_Tilemap[]; #endif //GUARD_GRAPHICS_H diff --git a/include/pokemon_icon.h b/include/pokemon_icon.h index 13228e55e..cfc3c18f0 100644 --- a/include/pokemon_icon.h +++ b/include/pokemon_icon.h @@ -8,18 +8,18 @@ const u8 *GetMonIconTiles(u16 iconSpecies, bool32 extra); const u16 *GetValidMonIconPalettePtr(u16 speciesId); u16 sub_80D2E84(u16 speciesId); void sub_80D2F68(u16 iconId); -u8 sub_80D2D78(u16 iconId, void callback(struct Sprite *), u16 x, u16 y, u16 a4, u8 a5); +u8 sub_80D2D78(u16 iconId, SpriteCallback callback, u16 x, u16 y, u16 a4, u8 a5); void sub_80D2FF0(u16 iconId); -void sub_80D2EF8(struct Sprite *sprite); +void sub_80D2EF8(struct Sprite * sprite); void LoadMonIconPalettes(void); void FreeMonIconPalettes(void); u16 MailSpeciesToIconSpecies(u16); -u8 CreateMonIcon_HandleDeoxys(u16 species, void (*callback)(struct Sprite *), s16 x, s16 y, u8 subpriority, bool32 extra); +u8 CreateMonIcon_HandleDeoxys(u16 species, SpriteCallback callback, s16 x, s16 y, u8 subpriority, bool32 extra); void DestroyMonIcon(struct Sprite *); u16 GetUnownLetterByPersonality(u32 personality); void SpriteCB_MonIcon(struct Sprite *); u8 CreateMonIcon(u16 species, SpriteCallback callback, s16 x, s16 y, u8 subpriority, u32 personality, bool32 extra); -u8 UpdateMonIconFrame(struct Sprite *sprite); +u8 UpdateMonIconFrame(struct Sprite * sprite); void LoadMonIconPalette(u16 iconId); void FreeMonIconPalette(u16 iconId); void MonIcon_SetAnim(struct Sprite * sprite, u8 animNum); diff --git a/include/trade.h b/include/trade.h index b1ae5669e..257357053 100644 --- a/include/trade.h +++ b/include/trade.h @@ -5,7 +5,7 @@ extern struct MailStruct gLinkPartnerMail[6]; extern u8 gSelectedTradeMonPositions[2]; extern const u16 gUnknown_826601C[]; -void sub_804C718(void); +void CB2_ReturnFromLinkTrade(void); s32 sub_804FB34(void); #endif //GUARD_TRADE_H diff --git a/include/trade_scene.h b/include/trade_scene.h index 347df033f..13cb1a56c 100644 --- a/include/trade_scene.h +++ b/include/trade_scene.h @@ -9,7 +9,7 @@ u16 GetInGameTradeSpeciesInfo(void); u16 GetTradeSpecies(void); void sub_805049C(void); void sub_80504B0(void); -void sub_80544FC(void); +void LoadTradeAnimGfx(void); extern const u16 gUnknown_826601C[]; extern const struct WindowTemplate gUnknown_826D1CC; diff --git a/include/util.h b/include/util.h index db86c184c..ef1c15faa 100644 --- a/include/util.h +++ b/include/util.h @@ -14,7 +14,7 @@ void LoadWordFromTwoHalfwords(u16 *, u32 *); int CountTrailingZeroBits(u32 value); u16 CalcCRC16(const u8 *data, u32 length); u16 CalcCRC16WithTable(const u8 *data, u32 length); -u32 CalcByteArraySum(const u8* data, u32 length); +u32 CalcByteArraySum(const u8 *data, u32 length); void BlendPalette(u16 palOffset, u16 numEntries, u8 coeff, u16 blendColor); void DoBgAffineSet(struct BgAffineDstData * dest, u32 texX, u32 texY, s16 srcX, s16 srcY, s16 sx, s16 sy, u16 alpha); diff --git a/src/data/ingame_trades.h b/src/data/ingame_trades.h index ba8abb47b..59304242b 100644 --- a/src/data/ingame_trades.h +++ b/src/data/ingame_trades.h @@ -1,4 +1,4 @@ -const struct InGameTrade gInGameTrades[] = { +static const struct InGameTrade sInGameTrades[] = { { .nickname = _("MIMIEN"), .species = SPECIES_MR_MIME, @@ -129,7 +129,7 @@ const struct InGameTrade gInGameTrades[] = { } }; -const u16 sInGameTradeMailMessages[][10] = { +static const u16 sInGameTradeMailMessages[][10] = { { EC_WORD_THAT_S, EC_WORD_A, diff --git a/src/trade.c b/src/trade.c index 817182efe..5151ecedd 100644 --- a/src/trade.c +++ b/src/trade.c @@ -130,7 +130,7 @@ static void TradeMenuAction_Summary(u8 taskId); static void TradeMenuAction_Trade(u8 taskId); static void ScheduleLinkTaskWithDelay(u16 delay, u8 kind); static void RunScheduledLinkTasks(void); -static void PrintTradeErrorOrStatusMessage(u8 str_idx); +static void PrintTradeErrorOrStatusMessage(u8 strIdx); static bool8 sub_804F610(void); static void RenderTextToVramViaBuffer(const u8 *name, u8 *a1, u8 unused); static void sub_804F748(u8 side); @@ -150,10 +150,10 @@ static const size_t gUnknown_8260814[] = { 0x528 // unk }; -static const u16 gTradeMovesBoxTilemap[] = INCBIN_U16("graphics/trade/moves_box_map.bin"); -static const u16 gTradePartyBoxTilemap[] = INCBIN_U16("graphics/trade/party_box_map.bin"); -static const u8 gTradeStripesBG2Tilemap[] = INCBIN_U8("graphics/trade/stripes_bg2_map.bin"); -static const u8 gTradeStripesBG3Tilemap[] = INCBIN_U8("graphics/trade/stripes_bg3_map.bin"); +static const u16 sTradeMovesBoxTilemap[] = INCBIN_U16("graphics/trade/moves_box_map.bin"); +static const u16 sTradePartyBoxTilemap[] = INCBIN_U16("graphics/trade/party_box_map.bin"); +static const u8 sTradeStripesBG2Tilemap[] = INCBIN_U8("graphics/trade/stripes_bg2_map.bin"); +static const u8 sTradeStripesBG3Tilemap[] = INCBIN_U8("graphics/trade/stripes_bg3_map.bin"); static const struct OamData gOamData_8261C30 = { .shape = SPRITE_SHAPE(32x16), @@ -182,14 +182,14 @@ static const union AnimCmd *const gSpriteAnimTable_8261C50[] = { gSpriteAnim_8261C48 }; -static const struct SpriteSheet gUnknown_8261C58 = { - gUnknown_8E9E1DC, +static const struct SpriteSheet sTradeButtons_SpriteSheet = { + gTradeButtons_Gfx, 0x800, 300 }; -static const struct SpritePalette gUnknown_8261C60 = { - gUnknown_8E9CF3C, +static const struct SpritePalette sTradeButtons_SpritePal = { + gTradeButtons_Pal, 2345 }; @@ -233,7 +233,7 @@ static const union AnimCmd *const gSpriteAnimTable_8261C98[] = { gSpriteAnim_8261C90 }; -static const struct SpriteTemplate gUnknown_8261CB0 = { +static const struct SpriteTemplate sSpriteTemplate_TradeButtons = { .tileTag = 300, .paletteTag = 2345, .oam = &gOamData_8261C38, @@ -242,7 +242,7 @@ static const struct SpriteTemplate gUnknown_8261CB0 = { .callback = SpriteCallbackDummy }; -static const struct SpriteTemplate gUnknown_8261CC8 = { +static const struct SpriteTemplate sSpriteTemplate_Text = { .tileTag = 200, .paletteTag = 4925, .oam = &gOamData_8261C30, @@ -251,10 +251,10 @@ static const struct SpriteTemplate gUnknown_8261CC8 = { .callback = SpriteCallbackDummy }; -static const u16 gUnknown_8261CE0[] = INCBIN_U16("graphics/trade/text.gbapal"); +static const u16 sTradeTextPal[] = INCBIN_U16("graphics/trade/text.gbapal"); -static const struct SpritePalette gUnknown_8261D00 = { - gUnknown_8261CE0, +static const struct SpritePalette sSpritePalette_Text = { + sTradeTextPal, 4925 }; @@ -347,7 +347,7 @@ static const u8 sCursorMoveDestinations[][4][6] = { } }; -static const u8 gTradeMonSpriteCoords[][2] = { +static const u8 sTradeMonSpriteCoords[][2] = { {0x01, 0x05}, {0x08, 0x05}, {0x01, 0x0a}, @@ -365,6 +365,7 @@ static const u8 gTradeMonSpriteCoords[][2] = { {0x17, 0x12}, }; +// No idea if a 4D array is correct static const u8 gUnknown_8261E5A[][2][6][2] = { { { @@ -401,7 +402,7 @@ static const u8 gUnknown_8261E5A[][2][6][2] = { } }; -static const u8 gTradeUnknownSpriteCoords[][4] = { +static const u8 sTradeUnknownSpriteCoords[][4] = { {0x3c, 0x09, 0xb4, 0x09}, {0x30, 0x09, 0xa8, 0x09} }; @@ -719,7 +720,7 @@ static void sub_804C600(void) } } -void sub_804C718(void) +void CB2_ReturnFromLinkTrade(void) { SetMainCallback2(sub_804C728); } @@ -853,11 +854,11 @@ static void sub_804C728(void) for (i = 0; i < sTradeMenuResourcesPtr->partyCounts[0]; i++) { - struct Pokemon *mon = &gPlayerParty[i]; + struct Pokemon * mon = &gPlayerParty[i]; sTradeMenuResourcesPtr->partyIcons[0][i] = CreateMonIcon(GetMonData(mon, MON_DATA_SPECIES2), SpriteCB_MonIcon, - (gTradeMonSpriteCoords[i][0] * 8) + 14, - (gTradeMonSpriteCoords[i][1] * 8) - 12, + (sTradeMonSpriteCoords[i][0] * 8) + 14, + (sTradeMonSpriteCoords[i][1] * 8) - 12, 1, GetMonData(mon, MON_DATA_PERSONALITY), TRUE); @@ -865,11 +866,11 @@ static void sub_804C728(void) for (i = 0; i < sTradeMenuResourcesPtr->partyCounts[1]; i++) { - struct Pokemon *mon = &gEnemyParty[i]; + struct Pokemon * mon = &gEnemyParty[i]; sTradeMenuResourcesPtr->partyIcons[1][i] = CreateMonIcon(GetMonData(mon, MON_DATA_SPECIES2, NULL), SpriteCB_MonIcon, - (gTradeMonSpriteCoords[i + PARTY_SIZE][0] * 8) + 14, - (gTradeMonSpriteCoords[i + PARTY_SIZE][1] * 8) - 12, + (sTradeMonSpriteCoords[i + PARTY_SIZE][0] * 8) + 14, + (sTradeMonSpriteCoords[i + PARTY_SIZE][1] * 8) - 12, 1, GetMonData(mon, MON_DATA_PERSONALITY), FALSE); @@ -903,9 +904,9 @@ static void sub_804C728(void) xPos = (56 - width) / 2; for (i = 0; i < 3; i++) { - temp = gUnknown_8261CC8; + temp = sSpriteTemplate_Text; temp.tileTag += i; - CreateSprite(&temp, xPos + gTradeUnknownSpriteCoords[LANGUAGE_ENGLISH - 1][0] + (i * 32), gTradeUnknownSpriteCoords[LANGUAGE_ENGLISH - 1][1], 1); + CreateSprite(&temp, xPos + sTradeUnknownSpriteCoords[LANGUAGE_ENGLISH - 1][0] + (i * 32), sTradeUnknownSpriteCoords[LANGUAGE_ENGLISH - 1][1], 1); } /* @@ -918,28 +919,28 @@ static void sub_804C728(void) xPos = (56 - width) / 2; for (i = 0; i < 3; i++) { - temp = gUnknown_8261CC8; + temp = sSpriteTemplate_Text; temp.tileTag += i + 3; - CreateSprite(&temp, xPos + gTradeUnknownSpriteCoords[LANGUAGE_ENGLISH - 1][2] + (i * 32), gTradeUnknownSpriteCoords[LANGUAGE_ENGLISH - 1][3], 1); + CreateSprite(&temp, xPos + sTradeUnknownSpriteCoords[LANGUAGE_ENGLISH - 1][2] + (i * 32), sTradeUnknownSpriteCoords[LANGUAGE_ENGLISH - 1][3], 1); } gMain.state++; break; case 13: - temp = gUnknown_8261CC8; + temp = sSpriteTemplate_Text; temp.tileTag += 6; CreateSprite(&temp, 215, 151, 1); - temp = gUnknown_8261CC8; + temp = sSpriteTemplate_Text; temp.tileTag += 7; CreateSprite(&temp, 247, 151, 1); for (i = 0; i < PARTY_SIZE; i++) { - temp = gUnknown_8261CC8; + temp = sSpriteTemplate_Text; temp.tileTag += i + 8; CreateSprite(&temp, (i * 32) + 24, 150, 1); } - sTradeMenuResourcesPtr->tradeMenuCursorSpriteIdx = CreateSprite(&gUnknown_8261CB0, gTradeMonSpriteCoords[0][0] * 8 + 32, gTradeMonSpriteCoords[0][1] * 8, 2); + sTradeMenuResourcesPtr->tradeMenuCursorSpriteIdx = CreateSprite(&sSpriteTemplate_TradeButtons, sTradeMonSpriteCoords[0][0] * 8 + 32, sTradeMonSpriteCoords[0][1] * 8, 2); sTradeMenuResourcesPtr->tradeMenuCursorPosition = 0; gMain.state++; rbox_fill_rectangle(0); @@ -1353,7 +1354,7 @@ static void sub_804C728(void) "\tcmp r6, r0\n" "\tbge _0804CAA8\n" "\tmov r8, r2\n" - "\tldr r7, _0804CB38 @ =gTradeMonSpriteCoords\n" + "\tldr r7, _0804CB38 @ =sTradeMonSpriteCoords\n" "_0804CA4A:\n" "\tmovs r0, 0x64\n" "\tadds r4, r6, 0\n" @@ -1407,7 +1408,7 @@ static void sub_804C728(void) "\tldrb r0, [r0]\n" "\tcmp r6, r0\n" "\tbge _0804CB20\n" - "\tldr r0, _0804CB38 @ =gTradeMonSpriteCoords\n" + "\tldr r0, _0804CB38 @ =sTradeMonSpriteCoords\n" "\tmov r8, r1\n" "\tadds r7, r0, 0\n" "\tadds r7, 0xC\n" @@ -1468,7 +1469,7 @@ static void sub_804C728(void) "_0804CB2C: .4byte sTradeMenuResourcesPtr\n" "_0804CB30: .4byte gPlayerPartyCount\n" "_0804CB34: .4byte gEnemyPartyCount\n" - "_0804CB38: .4byte gTradeMonSpriteCoords\n" + "_0804CB38: .4byte sTradeMonSpriteCoords\n" "_0804CB3C: .4byte gPlayerParty\n" "_0804CB40: .4byte 0xfff40000\n" "_0804CB44: .4byte SpriteCB_MonIcon\n" @@ -1591,14 +1592,14 @@ static void sub_804C728(void) "\tadds r0, r1\n" "\tmovs r6, 0\n" "\tadd r5, sp, 0x10\n" - "\tldr r3, _0804CD00 @ =gTradeUnknownSpriteCoords\n" + "\tldr r3, _0804CD00 @ =sTradeUnknownSpriteCoords\n" "\tmov r8, r3\n" "\tasrs r0, 1\n" "\tldrb r7, [r3, 0x4]\n" "\tadds r4, r0, r7\n" "_0804CC62:\n" "\tadd r1, sp, 0x10\n" - "\tldr r0, _0804CD04 @ =gUnknown_8261CC8\n" + "\tldr r0, _0804CD04 @ =sSpriteTemplate_Text\n" "\tldm r0!, {r2,r3,r7}\n" "\tstm r1!, {r2,r3,r7}\n" "\tldm r0!, {r2,r3,r7}\n" @@ -1638,7 +1639,7 @@ static void sub_804C728(void) "\tadds r0, r1\n" "\tmovs r6, 0\n" "\tadd r5, sp, 0x10\n" - "\tldr r7, _0804CD00 @ =gTradeUnknownSpriteCoords\n" + "\tldr r7, _0804CD00 @ =sTradeUnknownSpriteCoords\n" "\tmov r8, r7\n" "\tasrs r0, 1\n" "\tmov r1, r8\n" @@ -1646,7 +1647,7 @@ static void sub_804C728(void) "\tadds r4, r0, r1\n" "_0804CCC6:\n" "\tadd r1, sp, 0x10\n" - "\tldr r0, _0804CD04 @ =gUnknown_8261CC8\n" + "\tldr r0, _0804CD04 @ =sSpriteTemplate_Text\n" "\tldm r0!, {r2,r3,r7}\n" "\tstm r1!, {r2,r3,r7}\n" "\tldm r0!, {r2,r3,r7}\n" @@ -1673,12 +1674,12 @@ static void sub_804C728(void) "\tb _0804CEC2\n" "\t.align 2, 0\n" "_0804CCFC: .4byte gSaveBlock2Ptr\n" - "_0804CD00: .4byte gTradeUnknownSpriteCoords\n" - "_0804CD04: .4byte gUnknown_8261CC8\n" + "_0804CD00: .4byte sTradeUnknownSpriteCoords\n" + "_0804CD04: .4byte sSpriteTemplate_Text\n" "_0804CD08: .4byte gLinkPlayers + 8\n" "_0804CD0C: .4byte gMain\n" "_0804CD10:\n" - "\tldr r4, _0804CDCC @ =gUnknown_8261CC8\n" + "\tldr r4, _0804CDCC @ =sSpriteTemplate_Text\n" "\tadd r1, sp, 0x10\n" "\tadds r0, r4, 0\n" "\tldm r0!, {r2,r3,r7}\n" @@ -1716,7 +1717,7 @@ static void sub_804C728(void) "\tlsls r5, 13\n" "_0804CD5C:\n" "\tadd r1, sp, 0x10\n" - "\tldr r0, _0804CDCC @ =gUnknown_8261CC8\n" + "\tldr r0, _0804CDCC @ =sSpriteTemplate_Text\n" "\tldm r0!, {r2,r3,r7}\n" "\tstm r1!, {r2,r3,r7}\n" "\tldm r0!, {r2,r3,r7}\n" @@ -1737,8 +1738,8 @@ static void sub_804C728(void) "\tadds r6, 0x1\n" "\tcmp r6, 0x5\n" "\tble _0804CD5C\n" - "\tldr r0, _0804CDD0 @ =gUnknown_8261CB0\n" - "\tldr r2, _0804CDD4 @ =gTradeMonSpriteCoords\n" + "\tldr r0, _0804CDD0 @ =sSpriteTemplate_TradeButtons\n" + "\tldr r2, _0804CDD4 @ =sTradeMonSpriteCoords\n" "\tldrb r1, [r2]\n" "\tlsls r1, 19\n" "\tmovs r3, 0x80\n" @@ -1768,9 +1769,9 @@ static void sub_804C728(void) "\tbl rbox_fill_rectangle\n" "\tb _0804CEE6\n" "\t.align 2, 0\n" - "_0804CDCC: .4byte gUnknown_8261CC8\n" - "_0804CDD0: .4byte gUnknown_8261CB0\n" - "_0804CDD4: .4byte gTradeMonSpriteCoords\n" + "_0804CDCC: .4byte sSpriteTemplate_Text\n" + "_0804CDD0: .4byte sSpriteTemplate_TradeButtons\n" + "_0804CDD4: .4byte sTradeMonSpriteCoords\n" "_0804CDD8: .4byte sTradeMenuResourcesPtr\n" "_0804CDDC: .4byte gMain\n" "_0804CDE0:\n" @@ -1965,8 +1966,8 @@ void sub_804CF14(void) sTradeMenuResourcesPtr->partyIcons[0][i] = CreateMonIcon( GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2, NULL), SpriteCB_MonIcon, - gTradeMonSpriteCoords[i][0] * 8 + 14, - gTradeMonSpriteCoords[i][1] * 8 - 12, + sTradeMonSpriteCoords[i][0] * 8 + 14, + sTradeMonSpriteCoords[i][1] * 8 - 12, 1, GetMonData(&gPlayerParty[i], MON_DATA_PERSONALITY), TRUE @@ -1977,8 +1978,8 @@ void sub_804CF14(void) sTradeMenuResourcesPtr->partyIcons[1][i] = CreateMonIcon( GetMonData(&gEnemyParty[i], MON_DATA_SPECIES2, NULL), SpriteCB_MonIcon, - gTradeMonSpriteCoords[i + 6][0] * 8 + 14, - gTradeMonSpriteCoords[i + 6][1] * 8 - 12, + sTradeMonSpriteCoords[i + 6][0] * 8 + 14, + sTradeMonSpriteCoords[i + 6][1] * 8 - 12, 1, GetMonData(&gEnemyParty[i], MON_DATA_PERSONALITY), FALSE @@ -2015,9 +2016,9 @@ void sub_804CF14(void) xPos = (56 - width) / 2; for (i = 0; i < 3; i++) { - temp = gUnknown_8261CC8; + temp = sSpriteTemplate_Text; temp.tileTag += i; - CreateSprite(&temp, xPos + gTradeUnknownSpriteCoords[LANGUAGE_ENGLISH - 1][0] + (i * 32), gTradeUnknownSpriteCoords[LANGUAGE_ENGLISH - 1][1], 1); + CreateSprite(&temp, xPos + sTradeUnknownSpriteCoords[LANGUAGE_ENGLISH - 1][0] + (i * 32), sTradeUnknownSpriteCoords[LANGUAGE_ENGLISH - 1][1], 1); } /* @@ -2030,23 +2031,23 @@ void sub_804CF14(void) xPos = (56 - width) / 2; for (i = 0; i < 3; i++) { - temp = gUnknown_8261CC8; + temp = sSpriteTemplate_Text; temp.tileTag += i + 3; - CreateSprite(&temp, xPos + gTradeUnknownSpriteCoords[LANGUAGE_ENGLISH - 1][2] + (i * 32), gTradeUnknownSpriteCoords[LANGUAGE_ENGLISH - 1][3], 1); + CreateSprite(&temp, xPos + sTradeUnknownSpriteCoords[LANGUAGE_ENGLISH - 1][2] + (i * 32), sTradeUnknownSpriteCoords[LANGUAGE_ENGLISH - 1][3], 1); } gMain.state++; break; case 13: - temp = gUnknown_8261CC8; + temp = sSpriteTemplate_Text; temp.tileTag += 6; CreateSprite(&temp, 215, 151, 1); - temp = gUnknown_8261CC8; + temp = sSpriteTemplate_Text; temp.tileTag += 7; CreateSprite(&temp, 247, 151, 1); for (i = 0; i < PARTY_SIZE; i++) { - temp = gUnknown_8261CC8; + temp = sSpriteTemplate_Text; temp.tileTag += i + 8; CreateSprite(&temp, (i * 32) + 24, 150, 1); } @@ -2056,7 +2057,7 @@ void sub_804CF14(void) else sTradeMenuResourcesPtr->tradeMenuCursorPosition = sub_8138B20() + 6; - sTradeMenuResourcesPtr->tradeMenuCursorSpriteIdx = CreateSprite(&gUnknown_8261CB0, gTradeMonSpriteCoords[sTradeMenuResourcesPtr->tradeMenuCursorPosition][0] * 8 + 32, gTradeMonSpriteCoords[sTradeMenuResourcesPtr->tradeMenuCursorPosition][1] * 8, 2); + sTradeMenuResourcesPtr->tradeMenuCursorSpriteIdx = CreateSprite(&sSpriteTemplate_TradeButtons, sTradeMonSpriteCoords[sTradeMenuResourcesPtr->tradeMenuCursorPosition][0] * 8 + 32, sTradeMonSpriteCoords[sTradeMenuResourcesPtr->tradeMenuCursorPosition][1] * 8, 2); gMain.state = 16; break; case 16: @@ -2234,7 +2235,7 @@ void sub_804CF14(void) "\tcmp r6, r0\n" "\tbge _0804D0A8\n" "\tmov r8, r4\n" - "\tldr r7, _0804D138 @ =gTradeMonSpriteCoords\n" + "\tldr r7, _0804D138 @ =sTradeMonSpriteCoords\n" "_0804D048:\n" "\tmovs r0, 0x64\n" "\tadds r4, r6, 0\n" @@ -2289,7 +2290,7 @@ void sub_804CF14(void) "\tldrb r0, [r0]\n" "\tcmp r6, r0\n" "\tbge _0804D120\n" - "\tldr r0, _0804D138 @ =gTradeMonSpriteCoords\n" + "\tldr r0, _0804D138 @ =sTradeMonSpriteCoords\n" "\tmov r8, r1\n" "\tadds r7, r0, 0\n" "\tadds r7, 0xC\n" @@ -2350,7 +2351,7 @@ void sub_804CF14(void) "_0804D12C: .4byte sTradeMenuResourcesPtr\n" "_0804D130: .4byte gPlayerPartyCount\n" "_0804D134: .4byte gEnemyPartyCount\n" - "_0804D138: .4byte gTradeMonSpriteCoords\n" + "_0804D138: .4byte sTradeMonSpriteCoords\n" "_0804D13C: .4byte gPlayerParty\n" "_0804D140: .4byte 0xfff40000\n" "_0804D144: .4byte SpriteCB_MonIcon\n" @@ -2480,14 +2481,14 @@ void sub_804CF14(void) "\tadds r0, r1\n" "\tmovs r6, 0\n" "\tadd r5, sp, 0xC\n" - "\tldr r3, _0804D310 @ =gTradeUnknownSpriteCoords\n" + "\tldr r3, _0804D310 @ =sTradeUnknownSpriteCoords\n" "\tmov r8, r3\n" "\tasrs r0, 1\n" "\tldrb r7, [r3, 0x4]\n" "\tadds r4, r0, r7\n" "_0804D270:\n" "\tadd r1, sp, 0xC\n" - "\tldr r0, _0804D314 @ =gUnknown_8261CC8\n" + "\tldr r0, _0804D314 @ =sSpriteTemplate_Text\n" "\tldm r0!, {r2,r3,r7}\n" "\tstm r1!, {r2,r3,r7}\n" "\tldm r0!, {r2,r3,r7}\n" @@ -2527,7 +2528,7 @@ void sub_804CF14(void) "\tadds r0, r1\n" "\tmovs r6, 0\n" "\tadd r5, sp, 0xC\n" - "\tldr r7, _0804D310 @ =gTradeUnknownSpriteCoords\n" + "\tldr r7, _0804D310 @ =sTradeUnknownSpriteCoords\n" "\tmov r8, r7\n" "\tasrs r0, 1\n" "\tmov r1, r8\n" @@ -2535,7 +2536,7 @@ void sub_804CF14(void) "\tadds r4, r0, r1\n" "_0804D2D4:\n" "\tadd r1, sp, 0xC\n" - "\tldr r0, _0804D314 @ =gUnknown_8261CC8\n" + "\tldr r0, _0804D314 @ =sSpriteTemplate_Text\n" "\tldm r0!, {r2,r3,r7}\n" "\tstm r1!, {r2,r3,r7}\n" "\tldm r0!, {r2,r3,r7}\n" @@ -2562,12 +2563,12 @@ void sub_804CF14(void) "\tb _0804D4B4\n" "\t.align 2, 0\n" "_0804D30C: .4byte gSaveBlock2Ptr\n" - "_0804D310: .4byte gTradeUnknownSpriteCoords\n" - "_0804D314: .4byte gUnknown_8261CC8\n" + "_0804D310: .4byte sTradeUnknownSpriteCoords\n" + "_0804D314: .4byte sSpriteTemplate_Text\n" "_0804D318: .4byte gLinkPlayers + 8\n" "_0804D31C: .4byte gMain\n" "_0804D320:\n" - "\tldr r4, _0804D3B0 @ =gUnknown_8261CC8\n" + "\tldr r4, _0804D3B0 @ =sSpriteTemplate_Text\n" "\tadd r1, sp, 0xC\n" "\tadds r0, r4, 0\n" "\tldm r0!, {r2,r3,r7}\n" @@ -2605,7 +2606,7 @@ void sub_804CF14(void) "\tlsls r5, 13\n" "_0804D36C:\n" "\tadd r1, sp, 0xC\n" - "\tldr r0, _0804D3B0 @ =gUnknown_8261CC8\n" + "\tldr r0, _0804D3B0 @ =sSpriteTemplate_Text\n" "\tldm r0!, {r2,r3,r7}\n" "\tstm r1!, {r2,r3,r7}\n" "\tldm r0!, {r2,r3,r7}\n" @@ -2636,7 +2637,7 @@ void sub_804CF14(void) "\tldr r1, [r4]\n" "\tb _0804D3C0\n" "\t.align 2, 0\n" - "_0804D3B0: .4byte gUnknown_8261CC8\n" + "_0804D3B0: .4byte sSpriteTemplate_Text\n" "_0804D3B4: .4byte sTradeMenuResourcesPtr\n" "_0804D3B8:\n" "\tbl sub_8138B20\n" @@ -2645,8 +2646,8 @@ void sub_804CF14(void) "_0804D3C0:\n" "\tadds r1, 0x35\n" "\tstrb r0, [r1]\n" - "\tldr r0, _0804D404 @ =gUnknown_8261CB0\n" - "\tldr r3, _0804D408 @ =gTradeMonSpriteCoords\n" + "\tldr r0, _0804D404 @ =sSpriteTemplate_TradeButtons\n" + "\tldr r3, _0804D408 @ =sTradeMonSpriteCoords\n" "\tldr r4, _0804D40C @ =sTradeMenuResourcesPtr\n" "\tldr r1, [r4]\n" "\tadds r1, 0x35\n" @@ -2676,8 +2677,8 @@ void sub_804CF14(void) "\tstrb r1, [r0]\n" "\tb _0804D4D2\n" "\t.align 2, 0\n" - "_0804D404: .4byte gUnknown_8261CB0\n" - "_0804D408: .4byte gTradeMonSpriteCoords\n" + "_0804D404: .4byte sSpriteTemplate_TradeButtons\n" + "_0804D408: .4byte sTradeMonSpriteCoords\n" "_0804D40C: .4byte sTradeMenuResourcesPtr\n" "_0804D410: .4byte gMain\n" "_0804D414:\n" @@ -2824,7 +2825,7 @@ static void sub_804D548(void) static void sub_804D5A4(void) { - gMain.savedCallback = sub_804C718; + gMain.savedCallback = CB2_ReturnFromLinkTrade; if (gWirelessCommType != 0) { if (IsLinkRfuTaskFinished()) @@ -2872,13 +2873,13 @@ static void sub_804D694(u8 state) switch (state) { case 0: - LoadPalette(gUnknown_8E9CEDC, 0x00, 0x60); - LoadBgTiles(1, gUnknown_8E9CF5C, 0x1280, 0); + LoadPalette(gTradeMenu_Pal, 0x00, 0x60); + LoadBgTiles(1, gTradeMenu_Gfx, 0x1280, 0); CopyToBgTilemapBufferRect_ChangePalette(1, gUnknown_8E9E9FC, 0, 0, 32, 20, 0); - LoadBgTilemap(2, gTradeStripesBG2Tilemap, 0x800, 0); + LoadBgTilemap(2, sTradeStripesBG2Tilemap, 0x800, 0); break; case 1: - LoadBgTilemap(3, gTradeStripesBG3Tilemap, 0x800, 0); + LoadBgTilemap(3, sTradeStripesBG3Tilemap, 0x800, 0); sub_804F284(0); sub_804F284(1); CopyBgTilemapBufferToVram(1); @@ -2937,7 +2938,7 @@ static bool8 shedinja_maker_maybe(void) { u8 id = GetMultiplayerId(); int i; - struct Pokemon *mon; + struct Pokemon * mon; switch (sTradeMenuResourcesPtr->unk_69) { @@ -3287,8 +3288,8 @@ static void TradeMenuMoveCursor(u8 *tradeMenuCursorPosition, u8 direction) else { StartSpriteAnim(&gSprites[sTradeMenuResourcesPtr->tradeMenuCursorSpriteIdx], 0); - gSprites[sTradeMenuResourcesPtr->tradeMenuCursorSpriteIdx].pos1.x = gTradeMonSpriteCoords[newPosition][0] * 8 + 32; - gSprites[sTradeMenuResourcesPtr->tradeMenuCursorSpriteIdx].pos1.y = gTradeMonSpriteCoords[newPosition][1] * 8; + gSprites[sTradeMenuResourcesPtr->tradeMenuCursorSpriteIdx].pos1.x = sTradeMonSpriteCoords[newPosition][0] * 8 + 32; + gSprites[sTradeMenuResourcesPtr->tradeMenuCursorSpriteIdx].pos1.y = sTradeMonSpriteCoords[newPosition][1] * 8; } if (*tradeMenuCursorPosition != newPosition) @@ -3582,7 +3583,7 @@ static void sub_804E880(void) { int i; - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) { PlaySE(SE_SELECT); rbox_fill_rectangle(0); @@ -3749,12 +3750,12 @@ static void sub_804EAE4(u8 a0) gSprites[sTradeMenuResourcesPtr->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].invisible = FALSE; gSprites[sTradeMenuResourcesPtr->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].data[0] = 20; - gSprites[sTradeMenuResourcesPtr->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].data[2] = (gTradeMonSpriteCoords[whichParty * PARTY_SIZE][0] + gTradeMonSpriteCoords[whichParty * PARTY_SIZE + 1][0]) / 2 * 8 + 14; - gSprites[sTradeMenuResourcesPtr->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].data[4] = (gTradeMonSpriteCoords[whichParty * PARTY_SIZE][1] * 8) - 12; + gSprites[sTradeMenuResourcesPtr->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].data[2] = (sTradeMonSpriteCoords[whichParty * PARTY_SIZE][0] + sTradeMonSpriteCoords[whichParty * PARTY_SIZE + 1][0]) / 2 * 8 + 14; + gSprites[sTradeMenuResourcesPtr->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].data[4] = (sTradeMonSpriteCoords[whichParty * PARTY_SIZE][1] * 8) - 12; StoreSpriteCallbackInData6(&gSprites[sTradeMenuResourcesPtr->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]], SpriteCB_MonIcon); sTradeMenuResourcesPtr->unk_74[a0]++; sub_8075490(&gSprites[sTradeMenuResourcesPtr->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]]); - CopyToBgTilemapBufferRect_ChangePalette(1, gTradePartyBoxTilemap, a0 * 15, 0, 15, 17, 0); + CopyToBgTilemapBufferRect_ChangePalette(1, sTradePartyBoxTilemap, a0 * 15, 0, 15, 17, 0); CopyBgTilemapBufferToVram(1); CopyBgTilemapBufferToVram(0); @@ -3766,10 +3767,10 @@ static void sub_804EAE4(u8 a0) sTradeMenuResourcesPtr->unk_74[a0] = 3; break; case 3: - CopyToBgTilemapBufferRect_ChangePalette(1, gTradeMovesBoxTilemap, whichParty * 15, 0, 15, 17, 0); + CopyToBgTilemapBufferRect_ChangePalette(1, sTradeMovesBoxTilemap, whichParty * 15, 0, 15, 17, 0); CopyBgTilemapBufferToVram(1); - gSprites[sTradeMenuResourcesPtr->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].pos1.x = (gTradeMonSpriteCoords[whichParty * PARTY_SIZE][0] + gTradeMonSpriteCoords[whichParty * PARTY_SIZE + 1][0]) / 2 * 8 + 14; - gSprites[sTradeMenuResourcesPtr->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].pos1.y = (gTradeMonSpriteCoords[whichParty * PARTY_SIZE][1] * 8) - 12; + gSprites[sTradeMenuResourcesPtr->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].pos1.x = (sTradeMonSpriteCoords[whichParty * PARTY_SIZE][0] + sTradeMonSpriteCoords[whichParty * PARTY_SIZE + 1][0]) / 2 * 8 + 14; + gSprites[sTradeMenuResourcesPtr->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].pos1.y = (sTradeMonSpriteCoords[whichParty * PARTY_SIZE][1] * 8) - 12; gSprites[sTradeMenuResourcesPtr->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].pos2.x = 0; gSprites[sTradeMenuResourcesPtr->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].pos2.y = 0; nameStringWidth = sub_804EE6C(nickname, whichParty, partyIdx); @@ -3871,7 +3872,7 @@ static void sub_804F08C(u8 whichParty, u8 monIdx, u8 a2, u8 a3, u8 a4, u8 a5) u8 gender; u8 nickname[12]; - CopyToBgTilemapBufferRect_ChangePalette(1, gUnknown_8E9F1FC, a4, a5, 6, 3, 0); + CopyToBgTilemapBufferRect_ChangePalette(1, gTradeMenuMonBox_Tilemap, a4, a5, 6, 3, 0); CopyBgTilemapBufferToVram(1); if (whichParty == 0) @@ -4005,8 +4006,8 @@ static void sub_804F2E8(u8 whichParty) for (i = 0; i < sTradeMenuResourcesPtr->partyCounts[whichParty]; i++) { gSprites[sTradeMenuResourcesPtr->partyIcons[whichParty][i]].invisible = FALSE; - gSprites[sTradeMenuResourcesPtr->partyIcons[whichParty][i]].pos1.x = gTradeMonSpriteCoords[(whichParty * PARTY_SIZE) + i][0] * 8 + 14; - gSprites[sTradeMenuResourcesPtr->partyIcons[whichParty][i]].pos1.y = gTradeMonSpriteCoords[(whichParty * PARTY_SIZE) + i][1] * 8 - 12; + gSprites[sTradeMenuResourcesPtr->partyIcons[whichParty][i]].pos1.x = sTradeMonSpriteCoords[(whichParty * PARTY_SIZE) + i][0] * 8 + 14; + gSprites[sTradeMenuResourcesPtr->partyIcons[whichParty][i]].pos1.y = sTradeMonSpriteCoords[(whichParty * PARTY_SIZE) + i][1] * 8 - 12; gSprites[sTradeMenuResourcesPtr->partyIcons[whichParty][i]].pos2.x = 0; gSprites[sTradeMenuResourcesPtr->partyIcons[whichParty][i]].pos2.y = 0; } @@ -4020,7 +4021,7 @@ static void sub_804F3B4(void) static void sub_804F3C8(u8 whichParty) { - CopyToBgTilemapBufferRect_ChangePalette(1, gTradePartyBoxTilemap, 15 * whichParty, 0, 15, 17, 0); + CopyToBgTilemapBufferRect_ChangePalette(1, sTradePartyBoxTilemap, 15 * whichParty, 0, 15, 17, 0); CopyBgTilemapBufferToVram(1); sub_804F284(whichParty); sub_804F020(whichParty); @@ -4137,15 +4138,15 @@ static bool8 sub_804F610(void) sTradeMenuResourcesPtr->unk_A8++; break; case 14: - LoadSpritePalette(&gUnknown_8261D00); + LoadSpritePalette(&sSpritePalette_Text); sTradeMenuResourcesPtr->unk_A8++; break; case 15: - LoadSpritePalette(&gUnknown_8261C60); + LoadSpritePalette(&sTradeButtons_SpritePal); sTradeMenuResourcesPtr->unk_A8++; break; case 16: - LoadSpriteSheet(&gUnknown_8261C58); + LoadSpriteSheet(&sTradeButtons_SpriteSheet); sTradeMenuResourcesPtr->unk_A8++; break; case 17: @@ -4257,10 +4258,10 @@ static void sub_804F9D8(void) } } -static u32 sub_804FA14(struct Pokemon *party, int partyCount, int cursorPos) +static u32 sub_804FA14(struct Pokemon * party, int partyCount, int cursorPos) { int i, sum; - struct LinkPlayer *player; + struct LinkPlayer * player; int species[6]; int species2[6]; diff --git a/src/trade_scene.c b/src/trade_scene.c index 0c8029685..6adec72d8 100644 --- a/src/trade_scene.c +++ b/src/trade_scene.c @@ -43,6 +43,16 @@ #include "constants/region_map.h" #include "constants/moves.h" +#define TAG_GLOW1_TILES 5550 +#define TAG_GLOW_PAL 5551 +#define TAG_GLOW2_TILES 5552 +#define TAG_UNUSED_5553 5553 +#define TAG_CABLE_END_TILES 5554 +#define TAG_GBA_PAL 5555 +#define TAG_GBA_SCREEN_TILES 5556 +#define TAG_BALL_TILES 5557 +#define TAG_BALL_PAL 5558 + struct InGameTrade { /*0x00*/ u8 nickname[POKEMON_NAME_LENGTH + 1]; /*0x0C*/ u16 species; @@ -64,18 +74,18 @@ struct TradeAnimationResources { /*0x64*/ u32 timer; /*0x68*/ u32 monPersonalities[2]; /*0x70*/ u8 filler_70[2]; - /*0x72*/ u8 unk_72; - /*0x73*/ u8 unk_73; + /*0x72*/ u8 tradeStatus1; + /*0x73*/ u8 tradeStatus2; /*0x74*/ u16 linkData[10]; - /*0x88*/ u8 unk_88; - /*0x89*/ u8 unk_89; - /*0x8A*/ u16 unk_8A; + /*0x88*/ u8 linkTimeoutCheck1; + /*0x89*/ u8 linkTimeoutCheck2; + /*0x8A*/ u16 linkTimeoutTimer; /*0x8C*/ u16 unk_8C; /*0x8E*/ u8 pokePicSpriteIdxs[2]; - /*0x90*/ u8 unk_90; - /*0x91*/ u8 unk_91; - /*0x92*/ u8 unk_92; - /*0x93*/ u8 unk_93; + /*0x90*/ u8 tradeGlow1SpriteId; + /*0x91*/ u8 gbaScreenSpriteID; + /*0x92*/ u8 linkCableEndSpriteId; + /*0x93*/ u8 scheduleLinkTransfer; /*0x94*/ u16 state; /*0x96*/ u8 filler_96[0xD2 - 0x96]; /*0xD2*/ u8 pokeballSpriteId; @@ -91,7 +101,7 @@ struct TradeAnimationResources { /*0xE4*/ s16 bg2vofs; /*0xE6*/ s16 bg2hofs; /*0xE8*/ u16 sXY; - /*0xEA*/ u16 unk_EA; + /*0xEA*/ u16 bg2Zoom; /*0xEC*/ u16 bg2alpha; /*0xEE*/ bool8 isLinkTrade; /*0xF0*/ u16 tradeSpecies[2]; @@ -102,7 +112,7 @@ struct TradeAnimationResources { /*0x103*/ u8 filler_103[1]; /*0x104*/ u8 textColor[3]; /*0x107*/ u8 filler_107[1]; - /*0x108*/ u8 isCableTrade; + /*0x108*/ bool8 isCableTrade; /*0x109*/ u8 win0left; /*0x10A*/ u8 win0top; /*0x10B*/ u8 win0right; @@ -116,15 +126,15 @@ static void SpriteCB_TradeGlowWireless(struct Sprite * sprite); static void SpriteCB_TradeGlowCore(struct Sprite * sprite); static void SpriteCB_GameLinkCableEnd_Outbound(struct Sprite * sprite); static void SpriteCB_GameLinkCableEnd_Inbound(struct Sprite * sprite); -static void sub_804FE00(struct Sprite * sprite); +static void SpriteCB_TradeGBAScreen(struct Sprite * sprite); static void TradeAnimInit_LoadGfx(void); static void CB2_RunTradeAnim_InGameTrade(void); static void SetTradeSequenceBgGpuRegs(u8 idx); -static void sub_8050DE0(void); -static void sub_8050E24(void); -static u8 sub_8050F14(void); -static u8 sub_8050F3C(void); -static u8 sub_805232C(void); +static void LoadTradeGbaSpriteGfx(void); +static void TradeBufferOTnameAndNicknames(void); +static u8 DoTradeAnim(void); +static u8 DoTradeAnim_Cable(void); +static u8 DoTradeAnim_Wireless(void); static void SpriteCB_TradePokeball_Default(struct Sprite * sprite); static void SpriteCB_TradePokeball_Outbound(struct Sprite * sprite); static void SpriteCB_TradePokeball_Outbound2(struct Sprite * sprite); @@ -132,29 +142,29 @@ static void SpriteCB_TradePokeball_Inbound(struct Sprite * sprite); static void BufferInGameTradeMonName(void); static void GetInGameTradeMail(struct MailStruct * mail, const struct InGameTrade * inGameTrade); static void CB2_RunTradeAnim_LinkTrade(void); -static void sub_8053E1C(void); +static void CB2_WaitAndAckTradeComplete(void); static void sub_8053E8C(void); -static void sub_80543C4(void); -static void sub_8054470(u8 taskId); +static void LinkTrade_TearDownAssets(void); +static void Task_WaitFadeAndStartInGameTradeAnim(u8 taskId); static void CheckPartnersMonForRibbons(void); static void Task_AnimateWirelessSignal(u8 taskId); -static void c3_0805465C(u8 taskId); -static void sub_8054734(u8 taskId); +static void Task_OpenCetnerWhiteColumn(u8 taskId); +static void Task_CloseCetnerWhiteColumn(u8 taskId); -static const u16 gTradeBallPalette[] = INCBIN_U16("graphics/trade/ball.gbapal"); -static const u8 gTradeBallTiles[] = INCBIN_U8("graphics/trade/ball.4bpp"); +static const u16 sTradeBallPalette[] = INCBIN_U16("graphics/trade/ball.gbapal"); +static const u8 sTradeBallTiles[] = INCBIN_U8("graphics/trade/ball.4bpp"); static const u8 gUnknown_826267C[] = INCBIN_U8("graphics/trade/pokeball_symbol.8bpp"); static const u16 gUnknown_826407C[] = INCBIN_U16("graphics/trade/cable_closeup_map.bin"); static const u16 gUnknown_083307C0[] = INCBIN_U16("graphics/trade/pokeball_symbol_map.bin"); static const u16 sUnref_083308C0[] = INCBIN_U16("graphics/trade/unknown_3308C0.gbapal"); -static const u16 gUnknown_826499C[] = INCBIN_U16("graphics/trade/gba.gbapal"); +static const u16 sTradeGbaPal[] = INCBIN_U16("graphics/trade/gba.gbapal"); static const u16 gUnref_08330900[] = INCBIN_U16("graphics/trade/shadow.gbapal"); static const u16 gUnref_08330920[] = INCBIN_U16("graphics/trade/black.gbapal"); -static const u16 gUnknown_82649FC[] = INCBIN_U16("graphics/trade/misc.gbapal"); -static const u8 gTradeGlow1Tiles[] = INCBIN_U8("graphics/trade/glow1.4bpp"); -static const u8 gTradeGlow2Tiles[] = INCBIN_U8("graphics/trade/glow2.4bpp"); -static const u8 gTradeCableEndTiles[] = INCBIN_U8("graphics/trade/cable_end.4bpp"); -static const u8 gTradeGBAScreenTiles[] = INCBIN_U8("graphics/trade/gba_screen.4bpp"); +static const u16 sTradeGlowPal[] = INCBIN_U16("graphics/trade/misc.gbapal"); +static const u8 sTradeGlow1Tiles[] = INCBIN_U8("graphics/trade/glow1.4bpp"); +static const u8 sTradeGlow2Tiles[] = INCBIN_U8("graphics/trade/glow2.4bpp"); +static const u8 sTradeCableEndTiles[] = INCBIN_U8("graphics/trade/cable_end.4bpp"); +static const u8 sTradeGBAScreenTiles[] = INCBIN_U8("graphics/trade/gba_screen.4bpp"); const u16 gUnknown_826601C[] = INCBIN_U16("graphics/trade/shadow_map.bin"); static const u8 gUnknown_826701C[] = INCBIN_U8("graphics/trade/gba_affine.8bpp"); static const u8 sFiller_08335760[64] = {}; @@ -162,12 +172,12 @@ static const u8 gUnknown_826985C[] = INCBIN_U8("graphics/trade/gba_affine_map_ca static const u8 gUnknown_826995C[] = INCBIN_U8("graphics/trade/gba_affine_map_wireless.bin"); static const u16 gUnknown_8269A5C[] = INCBIN_U16("graphics/trade/gba_map_wireless.bin"); static const u16 gUnknown_826AA5C[] = INCBIN_U16("graphics/trade/gba_map_cable.bin"); -static const u32 gUnknown_3379A0Bin[] = INCBIN_U32("graphics/trade/unknown_3379A0.bin.lz"); -static const u16 gUnknown_826BB5C[] = INCBIN_U16("graphics/trade/wireless_signal_send.gbapal"); -static const u16 gUnknown_826BD5C[] = INCBIN_U16("graphics/trade/wireless_signal_receive.gbapal"); -static const u16 gUnknown_826BF5C[] = INCBIN_U16("graphics/trade/black.gbapal"); -static const u32 gWirelessSignal4bpp[] = INCBIN_U32("graphics/trade/wireless_signal.4bpp.lz"); -static const u32 gUnknown_826C60C[] = INCBIN_U32("graphics/trade/wireless_signal.bin.lz"); +static const u32 sUnknown_3379A0Bin[] = INCBIN_U32("graphics/trade/unknown_3379A0.bin.lz"); +static const u16 sWirelessSignalAnimPals_Outbound[] = INCBIN_U16("graphics/trade/wireless_signal_send.gbapal"); +static const u16 sWirelessSignalAnimPals_Inbound[] = INCBIN_U16("graphics/trade/wireless_signal_receive.gbapal"); +static const u16 sWirelessSignalAnimPals_Off[] = INCBIN_U16("graphics/trade/black.gbapal"); +static const u32 sWirelessSignal4bpp[] = INCBIN_U32("graphics/trade/wireless_signal.4bpp.lz"); +static const u32 sWirelessSignalTilemap[] = INCBIN_U32("graphics/trade/wireless_signal.bin.lz"); static const struct OamData gOamData_826CD00 = { .affineMode = ST_OAM_AFFINE_NORMAL, @@ -239,20 +249,20 @@ static const union AffineAnimCmd *const gSpriteAffineAnimTable_826CDC8[] = { gAffineAnimCmd_826CDA8 }; -static const struct SpriteSheet gUnknown_826CDD4 = { - gTradeBallTiles, +static const struct SpriteSheet sTradeBallSpriteSheet = { + sTradeBallTiles, 0x600, - 5557 + TAG_BALL_TILES }; -static const struct SpritePalette gUnknown_826CDDC = { - gTradeBallPalette, - 5558 +static const struct SpritePalette sTradeBallSpritePal = { + sTradeBallPalette, + TAG_BALL_PAL }; static const struct SpriteTemplate sTradePokeballSpriteTemplate = { - .tileTag = 5557, - .paletteTag = 5558, + .tileTag = TAG_BALL_TILES, + .paletteTag = TAG_BALL_PAL, .oam = &gOamData_826CD00, .anims = gSpriteAnimTable_826CD80, .affineAnims = gSpriteAffineAnimTable_826CDC8, @@ -286,25 +296,25 @@ static const union AffineAnimCmd *const gSpriteAffineAnimTable_826CE28[] = { gAffineAnimCmd_826CE10 }; -static const struct SpriteSheet gUnknown_826CE2C = { - gTradeGlow1Tiles, +static const struct SpriteSheet sTradeGlow1SpriteSheet = { + sTradeGlow1Tiles, 0x200, - 5550 + TAG_GLOW1_TILES }; -static const struct SpritePalette gUnknown_826CE34 = { - gUnknown_82649FC, - 5551 +static const struct SpritePalette sTradeGlowSpritePal = { + sTradeGlowPal, + TAG_GLOW_PAL }; -static const struct SpritePalette gUnknown_826CE3C = { - gUnknown_826499C, - 5555 +static const struct SpritePalette sTradeGbaSpritePal = { + sTradeGbaPal, + TAG_GBA_PAL }; -static const struct SpriteTemplate gUnknown_826CE44 = { - .tileTag = 5550, - .paletteTag = 5551, +static const struct SpriteTemplate sTradeGlow1SpriteTemplate = { + .tileTag = TAG_GLOW1_TILES, + .paletteTag = TAG_GLOW_PAL, .oam = &gOamData_826CDFC, .anims = gSpriteAnimTable_826CE0C, .affineAnims = gSpriteAffineAnimTable_826CE28, @@ -332,15 +342,15 @@ static const union AnimCmd *const gSpriteAnimTable_826CE74[] = { gAnimCmd_826CE6C }; -static const struct SpriteSheet gUnknown_826CE7C = { - gTradeGlow2Tiles, +static const struct SpriteSheet sTradeGlow2SpriteSheet = { + sTradeGlow2Tiles, 0x300, - 5552 + TAG_GLOW2_TILES }; static const struct SpriteTemplate sGlowBallSpriteTemplate = { - .tileTag = 5552, - .paletteTag = 5551, + .tileTag = TAG_GLOW2_TILES, + .paletteTag = TAG_GLOW_PAL, .oam = &gOamData_826CE5C, .anims = gSpriteAnimTable_826CE74, .affineAnims = gDummySpriteAffineAnimTable, @@ -362,15 +372,15 @@ static const union AnimCmd *const gSpriteAnimTable_826CEAC[] = { gAnimCmd_826CEA4 }; -static const struct SpriteSheet gUnknown_826CEB0 = { - gTradeCableEndTiles, +static const struct SpriteSheet sTradeCableEndSpriteSheet = { + sTradeCableEndTiles, 0x100, - 5554 + TAG_CABLE_END_TILES }; static const struct SpriteTemplate sGameLinkCableEndSpriteTemplate = { - .tileTag = 5554, - .paletteTag = 5555, + .tileTag = TAG_CABLE_END_TILES, + .paletteTag = TAG_GBA_PAL, .oam = &gOamData_826CE9C, .anims = gSpriteAnimTable_826CEAC, .affineAnims = gDummySpriteAffineAnimTable, @@ -415,28 +425,28 @@ static const union AnimCmd *const gSpriteAnimTable_826CF24[] = { gAnimCmd_826CEFC }; -static const struct SpriteSheet gUnknown_826CF28 = { - gTradeGBAScreenTiles, +static const struct SpriteSheet sTradeGBAScreenSpriteSheet = { + sTradeGBAScreenTiles, 0x1000, - 5556 + TAG_GBA_SCREEN_TILES }; -static const struct SpriteTemplate gUnknown_826CF30 = { - .tileTag = 5556, - .paletteTag = 5555, +static const struct SpriteTemplate sTradeGBAScreenSpriteTemplate1 = { + .tileTag = TAG_GBA_SCREEN_TILES, + .paletteTag = TAG_GBA_PAL, .oam = &gOamData_826CED0, .anims = gSpriteAnimTable_826CF20, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_804FE00 + .callback = SpriteCB_TradeGBAScreen }; -static const struct SpriteTemplate gUnknown_826CF48 = { - .tileTag = 5556, - .paletteTag = 5555, +static const struct SpriteTemplate sTradeGBAScreenSpriteTemplate2 = { + .tileTag = TAG_GBA_SCREEN_TILES, + .paletteTag = TAG_GBA_PAL, .oam = &gOamData_826CED0, .anims = gSpriteAnimTable_826CF24, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_804FE00 + .callback = SpriteCB_TradeGBAScreen }; static const u16 gTradeGlow2PaletteAnimTable[] = { @@ -459,7 +469,7 @@ static const union AffineAnimCmd gAffineAnimCmd_826CF78[] = { AFFINEANIMCMD_JUMP(0) }; -static const union AffineAnimCmd *const gUnknown_826CF88[] = { +static const union AffineAnimCmd *const sSpriteAffineAnimTable_PlayerPokePicAlt[] = { gAffineAnimCmd_826CF78 }; @@ -523,7 +533,7 @@ static const struct BgTemplate gUnknown_826D1D4[] = { } }; -static const s8 gTradeBallVerticalVelocityTable[] = { +static const s8 sTradeBallVerticalVelocityTable[] = { 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 2, 2, @@ -553,7 +563,7 @@ static const s8 gTradeBallVerticalVelocityTable[] = { 1, 1, 2, 3 }; -static const u8 gUnknown_826D250[][2] = { +static const u8 sWirelessSignalAnimParams[][2] = { {0, 1}, {1, 1}, {2, 1}, @@ -626,6 +636,7 @@ static void SpriteCB_TradeGlowCore(struct Sprite * sprite) } } +// Move down for 10 frames static void SpriteCB_GameLinkCableEnd_Outbound(struct Sprite * sprite) { sprite->data[0]++; @@ -634,6 +645,7 @@ static void SpriteCB_GameLinkCableEnd_Outbound(struct Sprite * sprite) DestroySprite(sprite); } +// Move up for 10 frames static void SpriteCB_GameLinkCableEnd_Inbound(struct Sprite * sprite) { sprite->data[0]++; @@ -642,7 +654,8 @@ static void SpriteCB_GameLinkCableEnd_Inbound(struct Sprite * sprite) DestroySprite(sprite); } -static void sub_804FE00(struct Sprite * sprite) +// Play a sound every 15 frames +static void SpriteCB_TradeGBAScreen(struct Sprite * sprite) { sprite->data[0]++; if (sprite->data[0] == 15) @@ -691,43 +704,43 @@ static void VBlankCB_TradeAnim(void) TransferPlttBuffer(); } -static void sub_804FF24(void) +static void InitLinkTimeoutTracker(void) { - sTradeData->unk_8A = 0; - sTradeData->unk_88 = 0; - sTradeData->unk_89 = 0; + sTradeData->linkTimeoutTimer = 0; + sTradeData->linkTimeoutCheck1 = 0; + sTradeData->linkTimeoutCheck2 = 0; } -static void sub_804FF4C(void) +static void CheckLinkTimeout(void) { - if (sTradeData->unk_88 == sTradeData->unk_89) - sTradeData->unk_8A++; + if (sTradeData->linkTimeoutCheck1 == sTradeData->linkTimeoutCheck2) + sTradeData->linkTimeoutTimer++; else - sTradeData->unk_8A = 0; + sTradeData->linkTimeoutTimer = 0; - if (sTradeData->unk_8A > 300) + if (sTradeData->linkTimeoutTimer > 300) { CloseLink(); SetMainCallback2(CB2_LinkError); - sTradeData->unk_8A = 0; - sTradeData->unk_89 = 0; - sTradeData->unk_88 = 0; + sTradeData->linkTimeoutTimer = 0; + sTradeData->linkTimeoutCheck2 = 0; + sTradeData->linkTimeoutCheck1 = 0; } - sTradeData->unk_89 = sTradeData->unk_88; + sTradeData->linkTimeoutCheck2 = sTradeData->linkTimeoutCheck1; } -static u32 sub_804FFC4(void) +static u32 GetMultiplayerIdIfLinkTrade(void) { if (gReceivedRemoteLinkPlayers) return GetMultiplayerId(); return 0; } -static void sub_804FFE4(u8 whichParty, u8 a1) +static void LoadTradeMonPic(u8 whichParty, u8 action) { int pos = 0; - struct Pokemon *mon = NULL; + struct Pokemon * mon = NULL; u16 species; u32 personality; @@ -737,15 +750,16 @@ static void sub_804FFE4(u8 whichParty, u8 a1) pos = 1; } - if (whichParty == 1) + /*else*/ if (whichParty == 1) { mon = &gEnemyParty[gSelectedTradeMonPositions[1] % PARTY_SIZE]; pos = 3; } - switch (a1) + switch (action) { case 0: + // Load graphics species = GetMonData(mon, MON_DATA_SPECIES2); personality = GetMonData(mon, MON_DATA_PERSONALITY); @@ -759,6 +773,7 @@ static void sub_804FFE4(u8 whichParty, u8 a1) sTradeData->monPersonalities[whichParty] = personality; break; case 1: + // Create sprite SetMultiuseSpriteTemplateToPokemon(GetMonSpritePalStruct(mon)->tag, pos); sTradeData->pokePicSpriteIdxs[whichParty] = CreateSprite(&gMultiuseSpriteTemplate, 120, 60, 6); gSprites[sTradeData->pokePicSpriteIdxs[whichParty]].invisible = TRUE; @@ -784,7 +799,7 @@ void CB2_InitTradeAnim_LinkTrade(void) FreeAllSpritePalettes(); SetVBlankCallback(VBlankCB_TradeAnim); TradeAnimInit_LoadGfx(); - sub_804FF24(); + InitLinkTimeoutTracker(); gMain.state++; sTradeData->unk_8C = 0; sTradeData->state = 0; @@ -833,7 +848,7 @@ void CB2_InitTradeAnim_LinkTrade(void) } else { - sub_804FF4C(); + CheckLinkTimeout(); } } else @@ -842,36 +857,36 @@ void CB2_InitTradeAnim_LinkTrade(void) } break; case 4: - sub_804FF4C(); + CheckLinkTimeout(); if (gReceivedRemoteLinkPlayers == 1 && IsLinkPlayerDataExchangeComplete() == 1) { gMain.state++; } break; case 5: - sTradeData->unk_72 = 0; - sTradeData->unk_73 = 0; - sTradeData->unk_93 = 0; - sub_804FFE4(0, 0); + sTradeData->tradeStatus1 = 0; + sTradeData->tradeStatus2 = 0; + sTradeData->scheduleLinkTransfer = 0; + LoadTradeMonPic(0, 0); gMain.state++; break; case 6: - sub_804FFE4(0, 1); + LoadTradeMonPic(0, 1); gMain.state++; break; case 7: - sub_804FFE4(1, 0); + LoadTradeMonPic(1, 0); gMain.state++; break; case 8: - sub_804FFE4(1, 1); + LoadTradeMonPic(1, 1); sub_80504B0(); gMain.state++; break; case 9: - sub_8050DE0(); - LoadSpriteSheet(&gUnknown_826CDD4); - LoadSpritePalette(&gUnknown_826CDDC); + LoadTradeGbaSpriteGfx(); + LoadSpriteSheet(&sTradeBallSpriteSheet); + LoadSpritePalette(&sTradeBallSpritePal); gMain.state++; break; case 10: @@ -884,7 +899,7 @@ void CB2_InitTradeAnim_LinkTrade(void) break; case 11: sub_805049C(); - sub_8050E24(); + TradeBufferOTnameAndNicknames(); gMain.state++; break; case 12: @@ -977,29 +992,29 @@ static void CB2_InitTradeAnim_InGameTrade(void) gMain.state = 5; break; case 5: - sub_804FFE4(0, 0); + LoadTradeMonPic(0, 0); gMain.state++; break; case 6: - sub_804FFE4(0, 1); + LoadTradeMonPic(0, 1); gMain.state++; break; case 7: - sub_804FFE4(1, 0); + LoadTradeMonPic(1, 0); ShowBg(0); gMain.state++; break; case 8: - sub_804FFE4(1, 1); + LoadTradeMonPic(1, 1); FillWindowPixelBuffer(0, PIXEL_FILL(15)); PutWindowTilemap(0); CopyWindowToVram(0, 3); gMain.state++; break; case 9: - sub_8050DE0(); - LoadSpriteSheet(&gUnknown_826CDD4); - LoadSpritePalette(&gUnknown_826CDDC); + LoadTradeGbaSpriteGfx(); + LoadSpriteSheet(&sTradeBallSpriteSheet); + LoadSpritePalette(&sTradeBallSpritePal); gMain.state++; break; case 10: @@ -1009,7 +1024,7 @@ static void CB2_InitTradeAnim_InGameTrade(void) case 11: SetTradeSequenceBgGpuRegs(5); SetTradeSequenceBgGpuRegs(0); - sub_8050E24(); + TradeBufferOTnameAndNicknames(); gMain.state++; break; case 12: @@ -1026,7 +1041,7 @@ static void CB2_InitTradeAnim_InGameTrade(void) static void ReceivedMonSetPokedexFlags(u8 partyIdx) { - struct Pokemon *mon = &gPlayerParty[partyIdx]; + struct Pokemon * mon = &gPlayerParty[partyIdx]; if (!GetMonData(mon, MON_DATA_IS_EGG)) { @@ -1051,10 +1066,10 @@ static void TradeMons(u8 playerPartyIdx, u8 partnerPartyIdx) u8 friendship; // Get whether the offered Pokemon have mail - struct Pokemon *playerMon = &gPlayerParty[playerPartyIdx]; + struct Pokemon * playerMon = &gPlayerParty[playerPartyIdx]; u16 playerMail = GetMonData(playerMon, MON_DATA_MAIL); - struct Pokemon *partnerMon = &gEnemyParty[partnerPartyIdx]; + struct Pokemon * partnerMon = &gEnemyParty[partnerPartyIdx]; u16 partnerMail = GetMonData(partnerMon, MON_DATA_MAIL); // The mail attached to the sent Pokemon no longer exists in your file. @@ -1080,25 +1095,25 @@ static void TradeMons(u8 playerPartyIdx, u8 partnerPartyIdx) RS_TryEnableNationalPokedex(); } -static void sub_80508F4(void) +static void HandleLinkDataSend(void) { - switch (sTradeData->unk_93) + switch (sTradeData->scheduleLinkTransfer) { case 1: if (IsLinkTaskFinished()) { SendBlock(bitmask_all_link_players_but_self(), sTradeData->linkData, 20); - sTradeData->unk_93++; + sTradeData->scheduleLinkTransfer++; } case 2: - sTradeData->unk_93 = 0; + sTradeData->scheduleLinkTransfer = 0; break; } } static void CB2_RunTradeAnim_InGameTrade(void) { - sub_8050F14(); + DoTradeAnim(); RunTasks(); RunTextPrinters(); AnimateSprites(); @@ -1139,10 +1154,10 @@ static void SetTradeSequenceBgGpuRegs(u8 state) case 2: sTradeData->bg1vofs = 0; sTradeData->bg1hofs = 0; - if (sTradeData->isCableTrade == FALSE) + if (!sTradeData->isCableTrade) { SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG1_ON | DISPCNT_OBJ_ON); - LZ77UnCompVram(gUnknown_3379A0Bin, (void *)BG_SCREEN_ADDR(5)); + LZ77UnCompVram(sUnknown_3379A0Bin, (void *)BG_SCREEN_ADDR(5)); BlendPalettes(0x000000008, 0x10, RGB_BLACK); } else @@ -1153,9 +1168,9 @@ static void SetTradeSequenceBgGpuRegs(u8 state) } break; case 3: - LoadPalette(gUnknown_826BF5C, 0x30, 0x20); - LZ77UnCompVram(gWirelessSignal4bpp, BG_CHAR_ADDR(1)); - LZ77UnCompVram(gUnknown_826C60C, BG_SCREEN_ADDR(18)); + LoadPalette(sWirelessSignalAnimPals_Off, 0x30, 0x20); + LZ77UnCompVram(sWirelessSignal4bpp, BG_CHAR_ADDR(1)); + LZ77UnCompVram(sWirelessSignalTilemap, BG_SCREEN_ADDR(18)); sTradeData->bg2vofs = 0x50; SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG1_ON | DISPCNT_BG2_ON | DISPCNT_OBJ_ON); break; @@ -1165,7 +1180,7 @@ static void SetTradeSequenceBgGpuRegs(u8 state) sTradeData->bg2texX = 0x40; sTradeData->bg2texY = 0x5C; sTradeData->sXY = 0x20; - sTradeData->unk_EA = 0x400; + sTradeData->bg2Zoom = 0x400; sTradeData->bg2alpha = 0; DmaCopyLarge16(3, gUnknown_826701C, (void *)BG_CHAR_ADDR(1), 0x2840, 0x1000); if (sTradeData->isCableTrade) @@ -1187,7 +1202,7 @@ static void SetTradeSequenceBgGpuRegs(u8 state) sTradeData->bg2texX = 0x40; sTradeData->bg2texY = 0x5C; sTradeData->sXY = 0x100; - sTradeData->unk_EA = 0x80; + sTradeData->bg2Zoom = 0x80; sTradeData->bg2srcX = 0x78; sTradeData->bg2srcY = 0x50; sTradeData->bg2alpha = 0; @@ -1213,17 +1228,17 @@ static void SetTradeSequenceBgGpuRegs(u8 state) } } -static void sub_8050DE0(void) +static void LoadTradeGbaSpriteGfx(void) { - LoadSpriteSheet(&gUnknown_826CE2C); - LoadSpriteSheet(&gUnknown_826CE7C); - LoadSpriteSheet(&gUnknown_826CEB0); - LoadSpriteSheet(&gUnknown_826CF28); - LoadSpritePalette(&gUnknown_826CE34); - LoadSpritePalette(&gUnknown_826CE3C); + LoadSpriteSheet(&sTradeGlow1SpriteSheet); + LoadSpriteSheet(&sTradeGlow2SpriteSheet); + LoadSpriteSheet(&sTradeCableEndSpriteSheet); + LoadSpriteSheet(&sTradeGBAScreenSpriteSheet); + LoadSpritePalette(&sTradeGlowSpritePal); + LoadSpritePalette(&sTradeGbaSpritePal); } -static void sub_8050E24(void) +static void TradeBufferOTnameAndNicknames(void) { u8 nickname[20]; u8 mpId; @@ -1239,7 +1254,7 @@ static void sub_8050E24(void) } else { - inGameTrade = &gInGameTrades[gSpecialVar_0x8004]; + inGameTrade = &sInGameTrades[gSpecialVar_0x8004]; StringCopy(gStringVar1, inGameTrade->otName); StringCopy10(gStringVar3, inGameTrade->nickname); GetMonData(&gPlayerParty[gSpecialVar_0x8005], MON_DATA_NICKNAME, nickname); @@ -1247,15 +1262,15 @@ static void sub_8050E24(void) } } -static bool8 sub_8050F14(void) +static bool8 DoTradeAnim(void) { if (sTradeData->isCableTrade) - return sub_8050F3C(); + return DoTradeAnim_Cable(); else - return sub_805232C(); + return DoTradeAnim_Wireless(); } -static bool8 sub_8050F3C(void) +static bool8 DoTradeAnim_Cable(void) { u16 evoTarget; @@ -1339,31 +1354,31 @@ static bool8 sub_8050F3C(void) } break; case 23: - if (sTradeData->unk_EA > 0x100) + if (sTradeData->bg2Zoom > 0x100) { - sTradeData->unk_EA -= 0x34; + sTradeData->bg2Zoom -= 0x34; } else { SetTradeSequenceBgGpuRegs(1); - sTradeData->unk_EA = 0x80; + sTradeData->bg2Zoom = 0x80; sTradeData->state++; sTradeData->timer = 0; } - sTradeData->sXY = 0x8000 / sTradeData->unk_EA; + sTradeData->sXY = 0x8000 / sTradeData->bg2Zoom; break; case 24: if (++sTradeData->timer > 20) { SetTradeBGAffine(); - sTradeData->unk_91 = CreateSprite(&gUnknown_826CF30, 120, 80, 0); + sTradeData->gbaScreenSpriteID = CreateSprite(&sTradeGBAScreenSpriteTemplate1, 120, 80, 0); sTradeData->state++; } break; case 25: - if (gSprites[sTradeData->unk_91].animEnded) + if (gSprites[sTradeData->gbaScreenSpriteID].animEnded) { - DestroySprite(&gSprites[sTradeData->unk_91]); + DestroySprite(&gSprites[sTradeData->gbaScreenSpriteID]); SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_BG1 | BLDCNT_TGT2_BG2); @@ -1378,13 +1393,13 @@ static bool8 sub_8050F3C(void) } if (sTradeData->bg1vofs == 328) { - sTradeData->unk_92 = CreateSprite(&sGameLinkCableEndSpriteTemplate, 128, 65, 0); + sTradeData->linkCableEndSpriteId = CreateSprite(&sGameLinkCableEndSpriteTemplate, 128, 65, 0); } break; case 27: - sTradeData->unk_90 = CreateSprite(&gUnknown_826CE44, 128, 80, 3); - sTradeData->unk_91 = CreateSprite(&sGlowBallSpriteTemplate, 128, 80, 0); - StartSpriteAnim(&gSprites[sTradeData->unk_91], 1); + sTradeData->tradeGlow1SpriteId = CreateSprite(&sTradeGlow1SpriteTemplate, 128, 80, 3); + sTradeData->gbaScreenSpriteID = CreateSprite(&sGlowBallSpriteTemplate, 128, 80, 0); + StartSpriteAnim(&gSprites[sTradeData->gbaScreenSpriteID], 1); sTradeData->state++; break; case 28: @@ -1398,9 +1413,9 @@ static bool8 sub_8050F3C(void) DISPCNT_OBJ_ON); break; case 200: - gSprites[sTradeData->unk_90].pos1.y -= 2; - gSprites[sTradeData->unk_91].pos1.y -= 2; - if (gSprites[sTradeData->unk_90].pos1.y < -8) + gSprites[sTradeData->tradeGlow1SpriteId].pos1.y -= 2; + gSprites[sTradeData->gbaScreenSpriteID].pos1.y -= 2; + if (gSprites[sTradeData->tradeGlow1SpriteId].pos1.y < -8) { sTradeData->state = 29; } @@ -1412,16 +1427,16 @@ static bool8 sub_8050F3C(void) case 30: if (!gPaletteFade.active) { - DestroySprite(&gSprites[sTradeData->unk_90]); - DestroySprite(&gSprites[sTradeData->unk_91]); + DestroySprite(&gSprites[sTradeData->tradeGlow1SpriteId]); + DestroySprite(&gSprites[sTradeData->gbaScreenSpriteID]); SetTradeSequenceBgGpuRegs(2); sTradeData->state++; } break; case 31: BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK); - sTradeData->unk_90 = CreateSprite(&sGlowBallSpriteTemplate, 111, 170, 0); - sTradeData->unk_91 = CreateSprite(&sGlowBallSpriteTemplate, 129, -10, 0); + sTradeData->tradeGlow1SpriteId = CreateSprite(&sGlowBallSpriteTemplate, 111, 170, 0); + sTradeData->gbaScreenSpriteID = CreateSprite(&sGlowBallSpriteTemplate, 129, -10, 0); sTradeData->state++; break; case 32: @@ -1430,16 +1445,16 @@ static bool8 sub_8050F3C(void) PlaySE(SE_TK_WARPOUT); sTradeData->state++; } - gSprites[sTradeData->unk_90].pos2.y -= 3; - gSprites[sTradeData->unk_91].pos2.y += 3; + gSprites[sTradeData->tradeGlow1SpriteId].pos2.y -= 3; + gSprites[sTradeData->gbaScreenSpriteID].pos2.y += 3; break; case 33: - gSprites[sTradeData->unk_90].pos2.y -= 3; - gSprites[sTradeData->unk_91].pos2.y += 3; - if (gSprites[sTradeData->unk_90].pos2.y <= -90) + gSprites[sTradeData->tradeGlow1SpriteId].pos2.y -= 3; + gSprites[sTradeData->gbaScreenSpriteID].pos2.y += 3; + if (gSprites[sTradeData->tradeGlow1SpriteId].pos2.y <= -90) { - gSprites[sTradeData->unk_90].data[1] = 1; - gSprites[sTradeData->unk_91].data[1] = 1; + gSprites[sTradeData->tradeGlow1SpriteId].data[1] = 1; + gSprites[sTradeData->gbaScreenSpriteID].data[1] = 1; sTradeData->state++; } break; @@ -1458,7 +1473,7 @@ static bool8 sub_8050F3C(void) case 37: if (!IsPokeSpriteNotFlipped(sTradeData->tradeSpecies[0])) { - gSprites[sTradeData->pokePicSpriteIdxs[0]].affineAnims = gUnknown_826CF88; + gSprites[sTradeData->pokePicSpriteIdxs[0]].affineAnims = sSpriteAffineAnimTable_PlayerPokePicAlt; gSprites[sTradeData->pokePicSpriteIdxs[0]].oam.affineMode = 3; CalcCenterToCornerVec(&gSprites[sTradeData->pokePicSpriteIdxs[0]], 0, 3, 3); StartSpriteAffineAnim(&gSprites[sTradeData->pokePicSpriteIdxs[0]], 0); @@ -1485,8 +1500,8 @@ static bool8 sub_8050F3C(void) } if (gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.y < -222) { - gSprites[sTradeData->unk_90].data[1] = 0; - gSprites[sTradeData->unk_91].data[1] = 0; + gSprites[sTradeData->tradeGlow1SpriteId].data[1] = 0; + gSprites[sTradeData->gbaScreenSpriteID].data[1] = 0; sTradeData->state++; gSprites[sTradeData->pokePicSpriteIdxs[0]].invisible = TRUE; gSprites[sTradeData->pokePicSpriteIdxs[1]].invisible = TRUE; @@ -1494,14 +1509,14 @@ static bool8 sub_8050F3C(void) } break; case 39: - gSprites[sTradeData->unk_90].pos2.y -= 3; - gSprites[sTradeData->unk_91].pos2.y += 3; - if (gSprites[sTradeData->unk_90].pos2.y <= -222) + gSprites[sTradeData->tradeGlow1SpriteId].pos2.y -= 3; + gSprites[sTradeData->gbaScreenSpriteID].pos2.y += 3; + if (gSprites[sTradeData->tradeGlow1SpriteId].pos2.y <= -222) { BeginNormalPaletteFade(0xFFFFFFFF, -1, 0, 16, RGB_BLACK); sTradeData->state++; - DestroySprite(&gSprites[sTradeData->unk_90]); - DestroySprite(&gSprites[sTradeData->unk_91]); + DestroySprite(&gSprites[sTradeData->tradeGlow1SpriteId]); + DestroySprite(&gSprites[sTradeData->gbaScreenSpriteID]); } break; case 40: @@ -1510,9 +1525,9 @@ static bool8 sub_8050F3C(void) sTradeData->state++; SetTradeSequenceBgGpuRegs(1); sTradeData->bg1vofs = 166; - sTradeData->unk_90 = CreateSprite(&gUnknown_826CE44, 128, -20, 3); - sTradeData->unk_91 = CreateSprite(&sGlowBallSpriteTemplate, 128, -20, 0); - StartSpriteAnim(&gSprites[sTradeData->unk_91], 1); + sTradeData->tradeGlow1SpriteId = CreateSprite(&sTradeGlow1SpriteTemplate, 128, -20, 3); + sTradeData->gbaScreenSpriteID = CreateSprite(&sGlowBallSpriteTemplate, 128, -20, 0); + StartSpriteAnim(&gSprites[sTradeData->gbaScreenSpriteID], 1); } break; case 41: @@ -1530,9 +1545,9 @@ static bool8 sub_8050F3C(void) } break; case 43: - gSprites[sTradeData->unk_90].pos2.y += 3; - gSprites[sTradeData->unk_91].pos2.y += 3; - if (gSprites[sTradeData->unk_90].pos2.y + gSprites[sTradeData->unk_90].pos1.y == 64) + gSprites[sTradeData->tradeGlow1SpriteId].pos2.y += 3; + gSprites[sTradeData->gbaScreenSpriteID].pos2.y += 3; + if (gSprites[sTradeData->tradeGlow1SpriteId].pos2.y + gSprites[sTradeData->tradeGlow1SpriteId].pos1.y == 64) { sTradeData->state++; } @@ -1545,8 +1560,8 @@ static bool8 sub_8050F3C(void) } break; case 45: - DestroySprite(&gSprites[sTradeData->unk_90]); - DestroySprite(&gSprites[sTradeData->unk_91]); + DestroySprite(&gSprites[sTradeData->tradeGlow1SpriteId]); + DestroySprite(&gSprites[sTradeData->gbaScreenSpriteID]); sTradeData->state++; sTradeData->timer = 0; break; @@ -1564,34 +1579,34 @@ static bool8 sub_8050F3C(void) } if (sTradeData->bg1vofs == 328 && sTradeData->isCableTrade) { - sTradeData->unk_92 = CreateSprite(&sGameLinkCableEndSpriteTemplate, 128, 65, 0); - gSprites[sTradeData->unk_92].callback = SpriteCB_GameLinkCableEnd_Inbound; + sTradeData->linkCableEndSpriteId = CreateSprite(&sGameLinkCableEndSpriteTemplate, 128, 65, 0); + gSprites[sTradeData->linkCableEndSpriteId].callback = SpriteCB_GameLinkCableEnd_Inbound; } break; case 48: - sTradeData->unk_91 = CreateSprite(&gUnknown_826CF30, 120, 80, 0); + sTradeData->gbaScreenSpriteID = CreateSprite(&sTradeGBAScreenSpriteTemplate1, 120, 80, 0); sTradeData->state = 50; break; case 50: - if (gSprites[sTradeData->unk_91].animEnded) + if (gSprites[sTradeData->gbaScreenSpriteID].animEnded) { - DestroySprite(&gSprites[sTradeData->unk_91]); + DestroySprite(&gSprites[sTradeData->gbaScreenSpriteID]); SetTradeSequenceBgGpuRegs(6); sTradeData->state++; PlaySE(SE_W028); } break; case 51: - if (sTradeData->unk_EA < 0x400) + if (sTradeData->bg2Zoom < 0x400) { - sTradeData->unk_EA += 0x34; + sTradeData->bg2Zoom += 0x34; } else { - sTradeData->unk_EA = 0x400; + sTradeData->bg2Zoom = 0x400; sTradeData->state++; } - sTradeData->sXY = 0x8000 / sTradeData->unk_EA; + sTradeData->sXY = 0x8000 / sTradeData->bg2Zoom; break; case 52: BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); @@ -1752,7 +1767,7 @@ static bool8 sub_8050F3C(void) return FALSE; } -static bool8 sub_805232C(void) +static bool8 DoTradeAnim_Wireless(void) { u16 evoTarget; @@ -1836,31 +1851,31 @@ static bool8 sub_805232C(void) } break; case 23: - if (sTradeData->unk_EA > 0x100) + if (sTradeData->bg2Zoom > 0x100) { - sTradeData->unk_EA -= 0x34; + sTradeData->bg2Zoom -= 0x34; } else { SetTradeSequenceBgGpuRegs(1); - sTradeData->unk_EA = 0x80; + sTradeData->bg2Zoom = 0x80; sTradeData->state = 124; sTradeData->timer = 0; } - sTradeData->sXY = 0x8000 / sTradeData->unk_EA; + sTradeData->sXY = 0x8000 / sTradeData->bg2Zoom; break; case 124: if (++sTradeData->timer > 20) { SetTradeSequenceBgGpuRegs(3); - sTradeData->unk_91 = CreateSprite(&gUnknown_826CF48, 120, 80, 0); + sTradeData->gbaScreenSpriteID = CreateSprite(&sTradeGBAScreenSpriteTemplate2, 120, 80, 0); sTradeData->state++; } break; case 125: - if (gSprites[sTradeData->unk_91].animEnded) + if (gSprites[sTradeData->gbaScreenSpriteID].animEnded) { - DestroySprite(&gSprites[sTradeData->unk_91]); + DestroySprite(&gSprites[sTradeData->gbaScreenSpriteID]); SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG1 | BLDCNT_TGT1_OBJ | BLDCNT_EFFECT_BLEND | @@ -1883,10 +1898,10 @@ static bool8 sub_805232C(void) } break; case 27: - sTradeData->unk_90 = CreateSprite(&gUnknown_826CE44, 120, 80, 3); - gSprites[sTradeData->unk_90].callback = SpriteCB_TradeGlowWireless; - sTradeData->unk_91 = CreateSprite(&sGlowBallSpriteTemplate, 120, 80, 0); - StartSpriteAnim(&gSprites[sTradeData->unk_91], 1); + sTradeData->tradeGlow1SpriteId = CreateSprite(&sTradeGlow1SpriteTemplate, 120, 80, 3); + gSprites[sTradeData->tradeGlow1SpriteId].callback = SpriteCB_TradeGlowWireless; + sTradeData->gbaScreenSpriteID = CreateSprite(&sGlowBallSpriteTemplate, 120, 80, 0); + StartSpriteAnim(&gSprites[sTradeData->gbaScreenSpriteID], 1); sTradeData->state++; break; case 28: @@ -1900,9 +1915,9 @@ static bool8 sub_805232C(void) DISPCNT_OBJ_ON); break; case 200: - gSprites[sTradeData->unk_90].pos1.y -= 2; - gSprites[sTradeData->unk_91].pos1.y -= 2; - if (gSprites[sTradeData->unk_90].pos1.y < -8) + gSprites[sTradeData->tradeGlow1SpriteId].pos1.y -= 2; + gSprites[sTradeData->gbaScreenSpriteID].pos1.y -= 2; + if (gSprites[sTradeData->tradeGlow1SpriteId].pos1.y < -8) { sTradeData->state = 29; } @@ -1914,16 +1929,16 @@ static bool8 sub_805232C(void) case 30: if (!gPaletteFade.active) { - DestroySprite(&gSprites[sTradeData->unk_90]); - DestroySprite(&gSprites[sTradeData->unk_91]); + DestroySprite(&gSprites[sTradeData->tradeGlow1SpriteId]); + DestroySprite(&gSprites[sTradeData->gbaScreenSpriteID]); SetTradeSequenceBgGpuRegs(2); sTradeData->state++; } break; case 31: BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK); - sTradeData->unk_90 = CreateSprite(&sGlowBallSpriteTemplate, 111, 170, 0); - sTradeData->unk_91 = CreateSprite(&sGlowBallSpriteTemplate, 129, -10, 0); + sTradeData->tradeGlow1SpriteId = CreateSprite(&sGlowBallSpriteTemplate, 111, 170, 0); + sTradeData->gbaScreenSpriteID = CreateSprite(&sGlowBallSpriteTemplate, 129, -10, 0); sTradeData->state++; break; case 32: @@ -1932,18 +1947,18 @@ static bool8 sub_805232C(void) PlaySE(SE_TK_WARPOUT); sTradeData->state++; } - gSprites[sTradeData->unk_90].pos2.y -= 3; - gSprites[sTradeData->unk_91].pos2.y += 3; + gSprites[sTradeData->tradeGlow1SpriteId].pos2.y -= 3; + gSprites[sTradeData->gbaScreenSpriteID].pos2.y += 3; break; case 33: - gSprites[sTradeData->unk_90].pos2.y -= 3; - gSprites[sTradeData->unk_91].pos2.y += 3; - if (gSprites[sTradeData->unk_90].pos2.y <= -90) + gSprites[sTradeData->tradeGlow1SpriteId].pos2.y -= 3; + gSprites[sTradeData->gbaScreenSpriteID].pos2.y += 3; + if (gSprites[sTradeData->tradeGlow1SpriteId].pos2.y <= -90) { - gSprites[sTradeData->unk_90].data[1] = 1; - gSprites[sTradeData->unk_91].data[1] = 1; + gSprites[sTradeData->tradeGlow1SpriteId].data[1] = 1; + gSprites[sTradeData->gbaScreenSpriteID].data[1] = 1; sTradeData->state++; - CreateTask(c3_0805465C, 5); + CreateTask(Task_OpenCetnerWhiteColumn, 5); } break; case 34: @@ -1961,7 +1976,7 @@ static bool8 sub_805232C(void) case 37: if (!IsPokeSpriteNotFlipped(sTradeData->tradeSpecies[0])) { - gSprites[sTradeData->pokePicSpriteIdxs[0]].affineAnims = gUnknown_826CF88; + gSprites[sTradeData->pokePicSpriteIdxs[0]].affineAnims = sSpriteAffineAnimTable_PlayerPokePicAlt; gSprites[sTradeData->pokePicSpriteIdxs[0]].oam.affineMode = 3; CalcCenterToCornerVec(&gSprites[sTradeData->pokePicSpriteIdxs[0]], 0, 3, 3); StartSpriteAffineAnim(&gSprites[sTradeData->pokePicSpriteIdxs[0]], 0); @@ -1988,23 +2003,23 @@ static bool8 sub_805232C(void) } if (gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.y < -222) { - gSprites[sTradeData->unk_90].data[1] = 0; - gSprites[sTradeData->unk_91].data[1] = 0; + gSprites[sTradeData->tradeGlow1SpriteId].data[1] = 0; + gSprites[sTradeData->gbaScreenSpriteID].data[1] = 0; sTradeData->state++; gSprites[sTradeData->pokePicSpriteIdxs[0]].invisible = TRUE; gSprites[sTradeData->pokePicSpriteIdxs[1]].invisible = TRUE; - CreateTask(sub_8054734, 5); + CreateTask(Task_CloseCetnerWhiteColumn, 5); } break; case 39: - gSprites[sTradeData->unk_90].pos2.y -= 3; - gSprites[sTradeData->unk_91].pos2.y += 3; - if (gSprites[sTradeData->unk_90].pos2.y <= -222) + gSprites[sTradeData->tradeGlow1SpriteId].pos2.y -= 3; + gSprites[sTradeData->gbaScreenSpriteID].pos2.y += 3; + if (gSprites[sTradeData->tradeGlow1SpriteId].pos2.y <= -222) { BeginNormalPaletteFade(0xFFFFFFFF, -1, 0, 16, RGB_BLACK); sTradeData->state++; - DestroySprite(&gSprites[sTradeData->unk_90]); - DestroySprite(&gSprites[sTradeData->unk_91]); + DestroySprite(&gSprites[sTradeData->tradeGlow1SpriteId]); + DestroySprite(&gSprites[sTradeData->gbaScreenSpriteID]); } break; case 40: @@ -2015,10 +2030,10 @@ static bool8 sub_805232C(void) sTradeData->bg1vofs = 166; SetTradeSequenceBgGpuRegs(3); sTradeData->bg2vofs = 412; - sTradeData->unk_90 = CreateSprite(&gUnknown_826CE44, 120, -20, 3); - gSprites[sTradeData->unk_90].callback = SpriteCB_TradeGlowWireless; - sTradeData->unk_91 = CreateSprite(&sGlowBallSpriteTemplate, 120, -20, 0); - StartSpriteAnim(&gSprites[sTradeData->unk_91], 1); + sTradeData->tradeGlow1SpriteId = CreateSprite(&sTradeGlow1SpriteTemplate, 120, -20, 3); + gSprites[sTradeData->tradeGlow1SpriteId].callback = SpriteCB_TradeGlowWireless; + sTradeData->gbaScreenSpriteID = CreateSprite(&sGlowBallSpriteTemplate, 120, -20, 0); + StartSpriteAnim(&gSprites[sTradeData->gbaScreenSpriteID], 1); } break; case 41: @@ -2036,9 +2051,9 @@ static bool8 sub_805232C(void) } break; case 43: - gSprites[sTradeData->unk_90].pos2.y += 4; - gSprites[sTradeData->unk_91].pos2.y += 4; - if (gSprites[sTradeData->unk_90].pos2.y + gSprites[sTradeData->unk_90].pos1.y == 64) + gSprites[sTradeData->tradeGlow1SpriteId].pos2.y += 4; + gSprites[sTradeData->gbaScreenSpriteID].pos2.y += 4; + if (gSprites[sTradeData->tradeGlow1SpriteId].pos2.y + gSprites[sTradeData->tradeGlow1SpriteId].pos1.y == 64) { sTradeData->state = 144; sTradeData->timer = 0; @@ -2064,8 +2079,8 @@ static bool8 sub_805232C(void) } break; case 145: - DestroySprite(&gSprites[sTradeData->unk_90]); - DestroySprite(&gSprites[sTradeData->unk_91]); + DestroySprite(&gSprites[sTradeData->tradeGlow1SpriteId]); + DestroySprite(&gSprites[sTradeData->gbaScreenSpriteID]); sTradeData->state++; sTradeData->timer = 0; break; @@ -2090,29 +2105,29 @@ static bool8 sub_805232C(void) } break; case 48: - sTradeData->unk_91 = CreateSprite(&gUnknown_826CF30, 120, 80, 0); + sTradeData->gbaScreenSpriteID = CreateSprite(&sTradeGBAScreenSpriteTemplate1, 120, 80, 0); sTradeData->state = 50; break; case 50: - if (gSprites[sTradeData->unk_91].animEnded) + if (gSprites[sTradeData->gbaScreenSpriteID].animEnded) { - DestroySprite(&gSprites[sTradeData->unk_91]); + DestroySprite(&gSprites[sTradeData->gbaScreenSpriteID]); SetTradeSequenceBgGpuRegs(6); sTradeData->state++; PlaySE(SE_W028); } break; case 51: - if (sTradeData->unk_EA < 0x400) + if (sTradeData->bg2Zoom < 0x400) { - sTradeData->unk_EA += 0x34; + sTradeData->bg2Zoom += 0x34; } else { - sTradeData->unk_EA = 0x400; + sTradeData->bg2Zoom = 0x400; sTradeData->state++; } - sTradeData->sXY = 0x8000 / sTradeData->unk_EA; + sTradeData->sXY = 0x8000 / sTradeData->bg2Zoom; break; case 52: BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); @@ -2299,23 +2314,23 @@ static void sub_8053788(void) UpdatePaletteFade(); } -static void sub_805383C(void) +static void HandleLinkDataReceive(void) { u8 recvStatus; - sub_804FFC4(); + GetMultiplayerIdIfLinkTrade(); recvStatus = GetBlockReceivedStatus(); if (recvStatus & (1 << 0)) { if (gBlockRecvBuffer[0][0] == 0xDCBA) SetMainCallback2(sub_8053788); if (gBlockRecvBuffer[0][0] == 0xABCD) - sTradeData->unk_72 = 1; + sTradeData->tradeStatus1 = 1; ResetBlockReceivedFlag(0); } if (recvStatus & (1 << 1)) { if (gBlockRecvBuffer[1][0] == 0xABCD) - sTradeData->unk_73 = 1; + sTradeData->tradeStatus2 = 1; ResetBlockReceivedFlag(1); } } @@ -2343,7 +2358,7 @@ static void SpriteCB_TradePokeball_Default(struct Sprite * sprite) static void SpriteCB_TradePokeball_Outbound(struct Sprite * sprite) { - sprite->pos2.y += gTradeBallVerticalVelocityTable[sprite->data[0]]; + sprite->pos2.y += sTradeBallVerticalVelocityTable[sprite->data[0]]; if (sprite->data[0] == 22) PlaySE(SE_KON); sprite->data[0]++; @@ -2363,7 +2378,7 @@ static void SpriteCB_TradePokeball_Outbound2(struct Sprite * sprite) sprite->data[1]++; if (sprite->data[1] > 20) { - sprite->pos2.y -= gTradeBallVerticalVelocityTable[sprite->data[0]]; + sprite->pos2.y -= sTradeBallVerticalVelocityTable[sprite->data[0]]; sprite->data[0]++; if (sprite->data[0] == 23) { @@ -2393,7 +2408,7 @@ static void SpriteCB_TradePokeball_Inbound(struct Sprite * sprite) PlaySE(SE_KON3); if (sprite->data[0] == 107) PlaySE(SE_KON4); - sprite->pos2.y += gTradeBallVerticalVelocityTable[sprite->data[0]]; + sprite->pos2.y += sTradeBallVerticalVelocityTable[sprite->data[0]]; sprite->data[0]++; if (sprite->data[0] == 108) sprite->callback = SpriteCallbackDummy; @@ -2405,7 +2420,7 @@ u16 GetInGameTradeSpeciesInfo(void) // Populates gStringVar1 with the name of the requested species and // gStringVar2 with the name of the offered species. // Returns the requested species. - const struct InGameTrade * inGameTrade = &gInGameTrades[gSpecialVar_0x8004]; + const struct InGameTrade * inGameTrade = &sInGameTrades[gSpecialVar_0x8004]; StringCopy(gStringVar1, gSpeciesNames[inGameTrade->requestedSpecies]); StringCopy(gStringVar2, gSpeciesNames[inGameTrade->species]); return inGameTrade->requestedSpecies; @@ -2416,7 +2431,7 @@ static void BufferInGameTradeMonName(void) // Populates gStringVar1 with the nickname of the sent Pokemon and // gStringVar2 with the name of the offered species. u8 nickname[30]; - const struct InGameTrade * inGameTrade = &gInGameTrades[gSpecialVar_0x8004]; + const struct InGameTrade * inGameTrade = &sInGameTrades[gSpecialVar_0x8004]; GetMonData(&gPlayerParty[gSpecialVar_0x8005], MON_DATA_NICKNAME, nickname); StringCopy10(gStringVar1, nickname); StringCopy(gStringVar2, gSpeciesNames[inGameTrade->species]); @@ -2424,7 +2439,7 @@ static void BufferInGameTradeMonName(void) static void CreateInGameTradePokemonInternal(u8 playerSlot, u8 inGameTradeIdx) { - const struct InGameTrade *inGameTrade = &gInGameTrades[inGameTradeIdx]; + const struct InGameTrade * inGameTrade = &sInGameTrades[inGameTradeIdx]; u8 level = GetMonData(&gPlayerParty[playerSlot], MON_DATA_LEVEL); struct MailStruct mail; u8 metLocation = MAPSEC_IN_GAME_TRADE; @@ -2495,17 +2510,17 @@ void CreateInGameTradePokemon(void) static void CB2_RunTradeAnim_LinkTrade(void) { - if (sub_8050F14() == TRUE) + if (DoTradeAnim() == TRUE) { DestroySprite(&gSprites[sTradeData->pokePicSpriteIdxs[0]]); FreeSpriteOamMatrix(&gSprites[sTradeData->pokePicSpriteIdxs[1]]); TradeMons(gSelectedTradeMonPositions[0], gSelectedTradeMonPositions[1] % 6); sTradeData->linkData[0] = 0xABCD; - sTradeData->unk_93 = 1; - SetMainCallback2(sub_8053E1C); + sTradeData->scheduleLinkTransfer = 1; + SetMainCallback2(CB2_WaitAndAckTradeComplete); } - sub_80508F4(); - sub_805383C(); + HandleLinkDataSend(); + HandleLinkDataReceive(); RunTasks(); RunTextPrinters(); AnimateSprites(); @@ -2513,16 +2528,16 @@ static void CB2_RunTradeAnim_LinkTrade(void) UpdatePaletteFade(); } -static void sub_8053E1C(void) +static void CB2_WaitAndAckTradeComplete(void) { - u8 mpId = sub_804FFC4(); - sub_805383C(); - if (mpId == 0 && sTradeData->unk_72 == 1 && sTradeData->unk_73 == 1) + u8 mpId = GetMultiplayerIdIfLinkTrade(); + HandleLinkDataReceive(); + if (mpId == 0 && sTradeData->tradeStatus1 == 1 && sTradeData->tradeStatus2 == 1) { sTradeData->linkData[0] = 0xDCBA; SendBlock(bitmask_all_link_players_but_self(), sTradeData->linkData, 20); - sTradeData->unk_72 = 2; - sTradeData->unk_73 = 2; + sTradeData->tradeStatus1 = 2; + sTradeData->tradeStatus2 = 2; } RunTasks(); AnimateSprites(); @@ -2664,7 +2679,7 @@ static void sub_8053E8C(void) case 8: if (IsBGMStopped() == TRUE) { - if (gWirelessCommType && gMain.savedCallback == sub_804C718) + if (gWirelessCommType && gMain.savedCallback == CB2_ReturnFromLinkTrade) { sub_800AB9C(); } @@ -2676,18 +2691,18 @@ static void sub_8053E8C(void) } break; case 9: - if (gWirelessCommType && gMain.savedCallback == sub_804C718) + if (gWirelessCommType && gMain.savedCallback == CB2_ReturnFromLinkTrade) { if (IsLinkRfuTaskFinished()) { gSoftResetDisabled = FALSE; - SetMainCallback2(sub_80543C4); + SetMainCallback2(LinkTrade_TearDownAssets); } } else if (!gReceivedRemoteLinkPlayers) { gSoftResetDisabled = FALSE; - SetMainCallback2(sub_80543C4); + SetMainCallback2(LinkTrade_TearDownAssets); } break; } @@ -2700,7 +2715,7 @@ static void sub_8053E8C(void) UpdatePaletteFade(); } -static void sub_80543C4(void) +static void LinkTrade_TearDownAssets(void) { if (!gPaletteFade.active) { @@ -2723,12 +2738,12 @@ static void sub_80543C4(void) void DoInGameTradeScene(void) { ScriptContext2_Enable(); - CreateTask(sub_8054470, 10); + CreateTask(Task_WaitFadeAndStartInGameTradeAnim, 10); BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); HelpSystem_Disable(); } -static void sub_8054470(u8 taskId) +static void Task_WaitFadeAndStartInGameTradeAnim(u8 taskId) { if (!gPaletteFade.active) { @@ -2750,7 +2765,7 @@ static void CheckPartnersMonForRibbons(void) FlagSet(FLAG_SYS_RIBBON_GET); } -void sub_80544FC(void) +void LoadTradeAnimGfx(void) { TradeAnimInit_LoadGfx(); } @@ -2768,35 +2783,35 @@ void DrawTextOnTradeWindow(u8 windowId, const u8 *str, s8 speed) static void Task_AnimateWirelessSignal(u8 taskId) { s16 *data = gTasks[taskId].data; - u16 r2 = 16 * gUnknown_826D250[data[0]][0]; + u16 r2 = 16 * sWirelessSignalAnimParams[data[0]][0]; if (data[2] == 0) { if (r2 == 0x100) - LoadPalette(gUnknown_826BF5C, 0x30, 0x20); + LoadPalette(sWirelessSignalAnimPals_Off, 0x30, 0x20); else - LoadPalette(&gUnknown_826BB5C[r2], 0x30, 0x20); + LoadPalette(&sWirelessSignalAnimPals_Outbound[r2], 0x30, 0x20); } else { if (r2 == 0x100) - LoadPalette(gUnknown_826BF5C, 0x30, 0x20); + LoadPalette(sWirelessSignalAnimPals_Off, 0x30, 0x20); else - LoadPalette(&gUnknown_826BD5C[r2], 0x30, 0x20); + LoadPalette(&sWirelessSignalAnimPals_Inbound[r2], 0x30, 0x20); } - if (gUnknown_826D250[data[0]][0] == 0 && data[1] == 0) + if (sWirelessSignalAnimParams[data[0]][0] == 0 && data[1] == 0) PlaySE(SE_W215); - if (data[1] == gUnknown_826D250[data[0]][1]) + if (data[1] == sWirelessSignalAnimParams[data[0]][1]) { data[0]++; data[1] = 0; - if (gUnknown_826D250[data[0]][1] == 0xFF) + if (sWirelessSignalAnimParams[data[0]][1] == 0xFF) DestroyTask(taskId); } else data[1]++; } -static void c3_0805465C(u8 taskId) +static void Task_OpenCetnerWhiteColumn(u8 taskId) { s16 *data = gTasks[taskId].data; @@ -2825,7 +2840,7 @@ static void c3_0805465C(u8 taskId) } } -static void sub_8054734(u8 taskId) +static void Task_CloseCetnerWhiteColumn(u8 taskId) { s16 *data = gTasks[taskId].data; -- cgit v1.2.3 From eff29ff7ae2e84fd8e9d92c8509c148912f4db20 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Thu, 31 Oct 2019 09:04:51 -0400 Subject: Fix typos --- src/trade_scene.c | 102 +++++++++++++++++++++++++++--------------------------- 1 file changed, 51 insertions(+), 51 deletions(-) diff --git a/src/trade_scene.c b/src/trade_scene.c index 6adec72d8..94fdadd5d 100644 --- a/src/trade_scene.c +++ b/src/trade_scene.c @@ -83,7 +83,7 @@ struct TradeAnimationResources { /*0x8C*/ u16 unk_8C; /*0x8E*/ u8 pokePicSpriteIdxs[2]; /*0x90*/ u8 tradeGlow1SpriteId; - /*0x91*/ u8 gbaScreenSpriteID; + /*0x91*/ u8 gbaScreenSpriteId; /*0x92*/ u8 linkCableEndSpriteId; /*0x93*/ u8 scheduleLinkTransfer; /*0x94*/ u16 state; @@ -148,8 +148,8 @@ static void LinkTrade_TearDownAssets(void); static void Task_WaitFadeAndStartInGameTradeAnim(u8 taskId); static void CheckPartnersMonForRibbons(void); static void Task_AnimateWirelessSignal(u8 taskId); -static void Task_OpenCetnerWhiteColumn(u8 taskId); -static void Task_CloseCetnerWhiteColumn(u8 taskId); +static void Task_OpenCenterWhiteColumn(u8 taskId); +static void Task_CloseCenterWhiteColumn(u8 taskId); static const u16 sTradeBallPalette[] = INCBIN_U16("graphics/trade/ball.gbapal"); static const u8 sTradeBallTiles[] = INCBIN_U8("graphics/trade/ball.4bpp"); @@ -449,7 +449,7 @@ static const struct SpriteTemplate sTradeGBAScreenSpriteTemplate2 = { .callback = SpriteCB_TradeGBAScreen }; -static const u16 gTradeGlow2PaletteAnimTable[] = { +static const u16 sTradeGlow2PaletteAnimTable[] = { RGB(18, 24, 31), RGB(18, 24, 31), RGB(18, 24, 31), @@ -632,7 +632,7 @@ static void SpriteCB_TradeGlowCore(struct Sprite * sprite) sprite->data[0]++; if (sprite->data[0] == 12) sprite->data[0] = 0; - LoadPalette(&gTradeGlow2PaletteAnimTable[sprite->data[0]], 16 * (sprite->oam.paletteNum + 16) + 4, 2); + LoadPalette(&sTradeGlow2PaletteAnimTable[sprite->data[0]], 16 * (sprite->oam.paletteNum + 16) + 4, 2); } } @@ -1371,14 +1371,14 @@ static bool8 DoTradeAnim_Cable(void) if (++sTradeData->timer > 20) { SetTradeBGAffine(); - sTradeData->gbaScreenSpriteID = CreateSprite(&sTradeGBAScreenSpriteTemplate1, 120, 80, 0); + sTradeData->gbaScreenSpriteId = CreateSprite(&sTradeGBAScreenSpriteTemplate1, 120, 80, 0); sTradeData->state++; } break; case 25: - if (gSprites[sTradeData->gbaScreenSpriteID].animEnded) + if (gSprites[sTradeData->gbaScreenSpriteId].animEnded) { - DestroySprite(&gSprites[sTradeData->gbaScreenSpriteID]); + DestroySprite(&gSprites[sTradeData->gbaScreenSpriteId]); SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_BG1 | BLDCNT_TGT2_BG2); @@ -1398,8 +1398,8 @@ static bool8 DoTradeAnim_Cable(void) break; case 27: sTradeData->tradeGlow1SpriteId = CreateSprite(&sTradeGlow1SpriteTemplate, 128, 80, 3); - sTradeData->gbaScreenSpriteID = CreateSprite(&sGlowBallSpriteTemplate, 128, 80, 0); - StartSpriteAnim(&gSprites[sTradeData->gbaScreenSpriteID], 1); + sTradeData->gbaScreenSpriteId = CreateSprite(&sGlowBallSpriteTemplate, 128, 80, 0); + StartSpriteAnim(&gSprites[sTradeData->gbaScreenSpriteId], 1); sTradeData->state++; break; case 28: @@ -1414,7 +1414,7 @@ static bool8 DoTradeAnim_Cable(void) break; case 200: gSprites[sTradeData->tradeGlow1SpriteId].pos1.y -= 2; - gSprites[sTradeData->gbaScreenSpriteID].pos1.y -= 2; + gSprites[sTradeData->gbaScreenSpriteId].pos1.y -= 2; if (gSprites[sTradeData->tradeGlow1SpriteId].pos1.y < -8) { sTradeData->state = 29; @@ -1428,7 +1428,7 @@ static bool8 DoTradeAnim_Cable(void) if (!gPaletteFade.active) { DestroySprite(&gSprites[sTradeData->tradeGlow1SpriteId]); - DestroySprite(&gSprites[sTradeData->gbaScreenSpriteID]); + DestroySprite(&gSprites[sTradeData->gbaScreenSpriteId]); SetTradeSequenceBgGpuRegs(2); sTradeData->state++; } @@ -1436,7 +1436,7 @@ static bool8 DoTradeAnim_Cable(void) case 31: BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK); sTradeData->tradeGlow1SpriteId = CreateSprite(&sGlowBallSpriteTemplate, 111, 170, 0); - sTradeData->gbaScreenSpriteID = CreateSprite(&sGlowBallSpriteTemplate, 129, -10, 0); + sTradeData->gbaScreenSpriteId = CreateSprite(&sGlowBallSpriteTemplate, 129, -10, 0); sTradeData->state++; break; case 32: @@ -1446,15 +1446,15 @@ static bool8 DoTradeAnim_Cable(void) sTradeData->state++; } gSprites[sTradeData->tradeGlow1SpriteId].pos2.y -= 3; - gSprites[sTradeData->gbaScreenSpriteID].pos2.y += 3; + gSprites[sTradeData->gbaScreenSpriteId].pos2.y += 3; break; case 33: gSprites[sTradeData->tradeGlow1SpriteId].pos2.y -= 3; - gSprites[sTradeData->gbaScreenSpriteID].pos2.y += 3; + gSprites[sTradeData->gbaScreenSpriteId].pos2.y += 3; if (gSprites[sTradeData->tradeGlow1SpriteId].pos2.y <= -90) { gSprites[sTradeData->tradeGlow1SpriteId].data[1] = 1; - gSprites[sTradeData->gbaScreenSpriteID].data[1] = 1; + gSprites[sTradeData->gbaScreenSpriteId].data[1] = 1; sTradeData->state++; } break; @@ -1501,7 +1501,7 @@ static bool8 DoTradeAnim_Cable(void) if (gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.y < -222) { gSprites[sTradeData->tradeGlow1SpriteId].data[1] = 0; - gSprites[sTradeData->gbaScreenSpriteID].data[1] = 0; + gSprites[sTradeData->gbaScreenSpriteId].data[1] = 0; sTradeData->state++; gSprites[sTradeData->pokePicSpriteIdxs[0]].invisible = TRUE; gSprites[sTradeData->pokePicSpriteIdxs[1]].invisible = TRUE; @@ -1510,13 +1510,13 @@ static bool8 DoTradeAnim_Cable(void) break; case 39: gSprites[sTradeData->tradeGlow1SpriteId].pos2.y -= 3; - gSprites[sTradeData->gbaScreenSpriteID].pos2.y += 3; + gSprites[sTradeData->gbaScreenSpriteId].pos2.y += 3; if (gSprites[sTradeData->tradeGlow1SpriteId].pos2.y <= -222) { BeginNormalPaletteFade(0xFFFFFFFF, -1, 0, 16, RGB_BLACK); sTradeData->state++; DestroySprite(&gSprites[sTradeData->tradeGlow1SpriteId]); - DestroySprite(&gSprites[sTradeData->gbaScreenSpriteID]); + DestroySprite(&gSprites[sTradeData->gbaScreenSpriteId]); } break; case 40: @@ -1526,8 +1526,8 @@ static bool8 DoTradeAnim_Cable(void) SetTradeSequenceBgGpuRegs(1); sTradeData->bg1vofs = 166; sTradeData->tradeGlow1SpriteId = CreateSprite(&sTradeGlow1SpriteTemplate, 128, -20, 3); - sTradeData->gbaScreenSpriteID = CreateSprite(&sGlowBallSpriteTemplate, 128, -20, 0); - StartSpriteAnim(&gSprites[sTradeData->gbaScreenSpriteID], 1); + sTradeData->gbaScreenSpriteId = CreateSprite(&sGlowBallSpriteTemplate, 128, -20, 0); + StartSpriteAnim(&gSprites[sTradeData->gbaScreenSpriteId], 1); } break; case 41: @@ -1546,7 +1546,7 @@ static bool8 DoTradeAnim_Cable(void) break; case 43: gSprites[sTradeData->tradeGlow1SpriteId].pos2.y += 3; - gSprites[sTradeData->gbaScreenSpriteID].pos2.y += 3; + gSprites[sTradeData->gbaScreenSpriteId].pos2.y += 3; if (gSprites[sTradeData->tradeGlow1SpriteId].pos2.y + gSprites[sTradeData->tradeGlow1SpriteId].pos1.y == 64) { sTradeData->state++; @@ -1561,7 +1561,7 @@ static bool8 DoTradeAnim_Cable(void) break; case 45: DestroySprite(&gSprites[sTradeData->tradeGlow1SpriteId]); - DestroySprite(&gSprites[sTradeData->gbaScreenSpriteID]); + DestroySprite(&gSprites[sTradeData->gbaScreenSpriteId]); sTradeData->state++; sTradeData->timer = 0; break; @@ -1584,13 +1584,13 @@ static bool8 DoTradeAnim_Cable(void) } break; case 48: - sTradeData->gbaScreenSpriteID = CreateSprite(&sTradeGBAScreenSpriteTemplate1, 120, 80, 0); + sTradeData->gbaScreenSpriteId = CreateSprite(&sTradeGBAScreenSpriteTemplate1, 120, 80, 0); sTradeData->state = 50; break; case 50: - if (gSprites[sTradeData->gbaScreenSpriteID].animEnded) + if (gSprites[sTradeData->gbaScreenSpriteId].animEnded) { - DestroySprite(&gSprites[sTradeData->gbaScreenSpriteID]); + DestroySprite(&gSprites[sTradeData->gbaScreenSpriteId]); SetTradeSequenceBgGpuRegs(6); sTradeData->state++; PlaySE(SE_W028); @@ -1868,14 +1868,14 @@ static bool8 DoTradeAnim_Wireless(void) if (++sTradeData->timer > 20) { SetTradeSequenceBgGpuRegs(3); - sTradeData->gbaScreenSpriteID = CreateSprite(&sTradeGBAScreenSpriteTemplate2, 120, 80, 0); + sTradeData->gbaScreenSpriteId = CreateSprite(&sTradeGBAScreenSpriteTemplate2, 120, 80, 0); sTradeData->state++; } break; case 125: - if (gSprites[sTradeData->gbaScreenSpriteID].animEnded) + if (gSprites[sTradeData->gbaScreenSpriteId].animEnded) { - DestroySprite(&gSprites[sTradeData->gbaScreenSpriteID]); + DestroySprite(&gSprites[sTradeData->gbaScreenSpriteId]); SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG1 | BLDCNT_TGT1_OBJ | BLDCNT_EFFECT_BLEND | @@ -1900,8 +1900,8 @@ static bool8 DoTradeAnim_Wireless(void) case 27: sTradeData->tradeGlow1SpriteId = CreateSprite(&sTradeGlow1SpriteTemplate, 120, 80, 3); gSprites[sTradeData->tradeGlow1SpriteId].callback = SpriteCB_TradeGlowWireless; - sTradeData->gbaScreenSpriteID = CreateSprite(&sGlowBallSpriteTemplate, 120, 80, 0); - StartSpriteAnim(&gSprites[sTradeData->gbaScreenSpriteID], 1); + sTradeData->gbaScreenSpriteId = CreateSprite(&sGlowBallSpriteTemplate, 120, 80, 0); + StartSpriteAnim(&gSprites[sTradeData->gbaScreenSpriteId], 1); sTradeData->state++; break; case 28: @@ -1916,7 +1916,7 @@ static bool8 DoTradeAnim_Wireless(void) break; case 200: gSprites[sTradeData->tradeGlow1SpriteId].pos1.y -= 2; - gSprites[sTradeData->gbaScreenSpriteID].pos1.y -= 2; + gSprites[sTradeData->gbaScreenSpriteId].pos1.y -= 2; if (gSprites[sTradeData->tradeGlow1SpriteId].pos1.y < -8) { sTradeData->state = 29; @@ -1930,7 +1930,7 @@ static bool8 DoTradeAnim_Wireless(void) if (!gPaletteFade.active) { DestroySprite(&gSprites[sTradeData->tradeGlow1SpriteId]); - DestroySprite(&gSprites[sTradeData->gbaScreenSpriteID]); + DestroySprite(&gSprites[sTradeData->gbaScreenSpriteId]); SetTradeSequenceBgGpuRegs(2); sTradeData->state++; } @@ -1938,7 +1938,7 @@ static bool8 DoTradeAnim_Wireless(void) case 31: BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK); sTradeData->tradeGlow1SpriteId = CreateSprite(&sGlowBallSpriteTemplate, 111, 170, 0); - sTradeData->gbaScreenSpriteID = CreateSprite(&sGlowBallSpriteTemplate, 129, -10, 0); + sTradeData->gbaScreenSpriteId = CreateSprite(&sGlowBallSpriteTemplate, 129, -10, 0); sTradeData->state++; break; case 32: @@ -1948,17 +1948,17 @@ static bool8 DoTradeAnim_Wireless(void) sTradeData->state++; } gSprites[sTradeData->tradeGlow1SpriteId].pos2.y -= 3; - gSprites[sTradeData->gbaScreenSpriteID].pos2.y += 3; + gSprites[sTradeData->gbaScreenSpriteId].pos2.y += 3; break; case 33: gSprites[sTradeData->tradeGlow1SpriteId].pos2.y -= 3; - gSprites[sTradeData->gbaScreenSpriteID].pos2.y += 3; + gSprites[sTradeData->gbaScreenSpriteId].pos2.y += 3; if (gSprites[sTradeData->tradeGlow1SpriteId].pos2.y <= -90) { gSprites[sTradeData->tradeGlow1SpriteId].data[1] = 1; - gSprites[sTradeData->gbaScreenSpriteID].data[1] = 1; + gSprites[sTradeData->gbaScreenSpriteId].data[1] = 1; sTradeData->state++; - CreateTask(Task_OpenCetnerWhiteColumn, 5); + CreateTask(Task_OpenCenterWhiteColumn, 5); } break; case 34: @@ -2004,22 +2004,22 @@ static bool8 DoTradeAnim_Wireless(void) if (gSprites[sTradeData->pokePicSpriteIdxs[0]].pos2.y < -222) { gSprites[sTradeData->tradeGlow1SpriteId].data[1] = 0; - gSprites[sTradeData->gbaScreenSpriteID].data[1] = 0; + gSprites[sTradeData->gbaScreenSpriteId].data[1] = 0; sTradeData->state++; gSprites[sTradeData->pokePicSpriteIdxs[0]].invisible = TRUE; gSprites[sTradeData->pokePicSpriteIdxs[1]].invisible = TRUE; - CreateTask(Task_CloseCetnerWhiteColumn, 5); + CreateTask(Task_CloseCenterWhiteColumn, 5); } break; case 39: gSprites[sTradeData->tradeGlow1SpriteId].pos2.y -= 3; - gSprites[sTradeData->gbaScreenSpriteID].pos2.y += 3; + gSprites[sTradeData->gbaScreenSpriteId].pos2.y += 3; if (gSprites[sTradeData->tradeGlow1SpriteId].pos2.y <= -222) { BeginNormalPaletteFade(0xFFFFFFFF, -1, 0, 16, RGB_BLACK); sTradeData->state++; DestroySprite(&gSprites[sTradeData->tradeGlow1SpriteId]); - DestroySprite(&gSprites[sTradeData->gbaScreenSpriteID]); + DestroySprite(&gSprites[sTradeData->gbaScreenSpriteId]); } break; case 40: @@ -2032,8 +2032,8 @@ static bool8 DoTradeAnim_Wireless(void) sTradeData->bg2vofs = 412; sTradeData->tradeGlow1SpriteId = CreateSprite(&sTradeGlow1SpriteTemplate, 120, -20, 3); gSprites[sTradeData->tradeGlow1SpriteId].callback = SpriteCB_TradeGlowWireless; - sTradeData->gbaScreenSpriteID = CreateSprite(&sGlowBallSpriteTemplate, 120, -20, 0); - StartSpriteAnim(&gSprites[sTradeData->gbaScreenSpriteID], 1); + sTradeData->gbaScreenSpriteId = CreateSprite(&sGlowBallSpriteTemplate, 120, -20, 0); + StartSpriteAnim(&gSprites[sTradeData->gbaScreenSpriteId], 1); } break; case 41: @@ -2052,7 +2052,7 @@ static bool8 DoTradeAnim_Wireless(void) break; case 43: gSprites[sTradeData->tradeGlow1SpriteId].pos2.y += 4; - gSprites[sTradeData->gbaScreenSpriteID].pos2.y += 4; + gSprites[sTradeData->gbaScreenSpriteId].pos2.y += 4; if (gSprites[sTradeData->tradeGlow1SpriteId].pos2.y + gSprites[sTradeData->tradeGlow1SpriteId].pos1.y == 64) { sTradeData->state = 144; @@ -2080,7 +2080,7 @@ static bool8 DoTradeAnim_Wireless(void) break; case 145: DestroySprite(&gSprites[sTradeData->tradeGlow1SpriteId]); - DestroySprite(&gSprites[sTradeData->gbaScreenSpriteID]); + DestroySprite(&gSprites[sTradeData->gbaScreenSpriteId]); sTradeData->state++; sTradeData->timer = 0; break; @@ -2105,13 +2105,13 @@ static bool8 DoTradeAnim_Wireless(void) } break; case 48: - sTradeData->gbaScreenSpriteID = CreateSprite(&sTradeGBAScreenSpriteTemplate1, 120, 80, 0); + sTradeData->gbaScreenSpriteId = CreateSprite(&sTradeGBAScreenSpriteTemplate1, 120, 80, 0); sTradeData->state = 50; break; case 50: - if (gSprites[sTradeData->gbaScreenSpriteID].animEnded) + if (gSprites[sTradeData->gbaScreenSpriteId].animEnded) { - DestroySprite(&gSprites[sTradeData->gbaScreenSpriteID]); + DestroySprite(&gSprites[sTradeData->gbaScreenSpriteId]); SetTradeSequenceBgGpuRegs(6); sTradeData->state++; PlaySE(SE_W028); @@ -2811,7 +2811,7 @@ static void Task_AnimateWirelessSignal(u8 taskId) data[1]++; } -static void Task_OpenCetnerWhiteColumn(u8 taskId) +static void Task_OpenCenterWhiteColumn(u8 taskId) { s16 *data = gTasks[taskId].data; @@ -2840,7 +2840,7 @@ static void Task_OpenCetnerWhiteColumn(u8 taskId) } } -static void Task_CloseCetnerWhiteColumn(u8 taskId) +static void Task_CloseCenterWhiteColumn(u8 taskId) { s16 *data = gTasks[taskId].data; -- cgit v1.2.3 From 2b0bcdcad9336defc82f50a329b12e631b1f33ce Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Thu, 31 Oct 2019 09:19:33 -0400 Subject: Resolve externed prototypes in C files --- include/berry_powder.h | 1 + include/item.h | 2 ++ include/overworld.h | 2 ++ include/quest_log.h | 1 + include/save_failed_screen.h | 6 ++++++ src/load_save.c | 11 ++++------- src/save.c | 9 ++------- 7 files changed, 18 insertions(+), 14 deletions(-) create mode 100644 include/save_failed_screen.h diff --git a/include/berry_powder.h b/include/berry_powder.h index f0e77c44b..d944ae44d 100644 --- a/include/berry_powder.h +++ b/include/berry_powder.h @@ -3,5 +3,6 @@ u32 GetBerryPowder(void); void SetBerryPowder(u32 *powder, u32 amount); +void sub_815EE6C(u32 newKey); #endif //GUARD_BERRY_POWDER_H diff --git a/include/item.h b/include/item.h index dd6271d13..ccc9cd3bb 100644 --- a/include/item.h +++ b/include/item.h @@ -72,10 +72,12 @@ u16 BagGetQuantityByPocketPosition(u8 pocketId, u16 itemId); bool8 itemid_is_unique(u16 itemId); void BagPocketCompaction(struct ItemSlot * slots, u8 capacity); u16 GetPcItemQuantity(u16 *); +void SetBagPocketsPointers(void); void ItemPcCompaction(void); void RemoveItemFromPC(u16 itemId, u16 quantity); void SortAndCompactBagPocket(struct BagPocket * pocket); u8 CountItemsInPC(void); +void ApplyNewEncryptionKeyToBagItems_(u32 newKey); #endif // GUARD_ITEM_H diff --git a/include/overworld.h b/include/overworld.h index 2e591a599..36c890eb5 100644 --- a/include/overworld.h +++ b/include/overworld.h @@ -143,5 +143,7 @@ bool32 sub_8058318(void); void CB2_ReturnToStartMenu(void); void CB2_WhiteOut(void); void c2_8056854(void); +void sub_8054F38(u32 newKey); +void sub_8055778(int); #endif //GUARD_OVERWORLD_H diff --git a/include/quest_log.h b/include/quest_log.h index 8165486ce..3f6c94de5 100644 --- a/include/quest_log.h +++ b/include/quest_log.h @@ -46,6 +46,7 @@ void sub_811231C(void); void sub_81139BC(void); void *QuestLogGetFlagOrVarPtr(bool8 isFlag, u16 idx); void QuestLogSetFlagOrVar(bool8 isFlag, u16 idx, u16 value); +void sub_8110840(void *oldSave); extern u8 gUnknown_203ADFA; diff --git a/include/save_failed_screen.h b/include/save_failed_screen.h new file mode 100644 index 000000000..feffa2014 --- /dev/null +++ b/include/save_failed_screen.h @@ -0,0 +1,6 @@ +#ifndef GUARD_SAVE_FAILED_SCREEN_H +#define GUARD_SAVE_FAILED_SCREEN_H + +extern void DoSaveFailedScreen(u8 saveType); // save_failed_screen + +#endif //GUARD_SAVE_FAILED_SCREEN_H diff --git a/src/load_save.c b/src/load_save.c index 583844d17..da469d4e6 100644 --- a/src/load_save.c +++ b/src/load_save.c @@ -7,13 +7,10 @@ #include "malloc.h" #include "item.h" #include "save_location.h" - -extern void SetBagPocketsPointers(void); -extern void sub_8110840(void *oldSave); -extern void sub_8055778(int); -extern void sub_8054F38(u32 newKey); -extern void ApplyNewEncryptionKeyToBagItems_(u32 newKey); -extern void sub_815EE6C(u32 newKey); +#include "berry_powder.h" +#include "item.h" +#include "overworld.h" +#include "quest_log.h" #define SAVEBLOCK_MOVE_RANGE 128 diff --git a/src/save.c b/src/save.c index 30d2c22a9..57364b10b 100644 --- a/src/save.c +++ b/src/save.c @@ -6,6 +6,8 @@ #include "load_save.h" #include "task.h" #include "link.h" +#include "save_failed_screen.h" +#include "fieldmap.h" #include "gba/flash_internal.h" #define FILE_SIGNATURE 0x08012025 // signature value to determine if a sector is in use @@ -66,13 +68,6 @@ const struct SaveSectionOffsets gSaveSectionOffsets[] = SAVEBLOCK_CHUNK(struct PokemonStorage, 8) }; -extern void DoSaveFailedScreen(u8 saveType); // save_failed_screen -extern void sub_800AB9C(void); // link -extern bool8 IsLinkTaskFinished(void); // link -extern void save_serialize_map(void); // fieldmap -extern void SetContinueGameWarpStatusToDynamicWarp(void); // load_save -extern void ClearContinueGameWarpStatus2(void); // load_save - // Sector num to begin writing save data. Sectors are rotated each time the game is saved. (possibly to avoid wear on flash memory?) u16 gFirstSaveSector; u32 gPrevSaveCounter; -- cgit v1.2.3