battle_record: through sub_80CD98C

This commit is contained in:
PikalaxALT
2019-07-13 14:00:58 -04:00
parent be422beca6
commit b4677561d5
14 changed files with 539 additions and 1065 deletions
File diff suppressed because it is too large Load Diff
+4 -4
View File
@@ -2407,7 +2407,7 @@ _080E6C00:
adds r0, r2
ldrh r1, [r0]
movs r0, 0x20
bl sub_8054F00
bl SetGameStat
b _080E6C80
.align 2, 0
_080E6C10: .4byte 0x0000057a
@@ -2599,7 +2599,7 @@ _080E6D9C:
adds r0, r1
ldrh r1, [r0]
movs r0, 0x20
bl sub_8054F00
bl SetGameStat
b _080E6E08
.align 2, 0
_080E6DAC: .4byte 0x0000057a
@@ -2717,7 +2717,7 @@ _080E6E76:
adds r5, r0, 0
movs r0, 0x20
adds r1, r5, 0
bl sub_8054F00
bl SetGameStat
ldr r1, _080E6EA4 @ =0x0000270f
cmp r5, r1
bhi _080E6EB8
@@ -2731,7 +2731,7 @@ _080E6EA8:
ldrh r5, [r1]
movs r0, 0x20
adds r1, r5, 0
bl sub_8054F00
bl SetGameStat
ldr r1, _080E6EC4 @ =0x0000270f
cmp r5, r1
bls _080E6ECC
+4 -4
View File
@@ -943,7 +943,7 @@ _08080E9A:
lsls r1, r5, 8
ldr r0, _08080ED4 @ =gBlockRecvBuffer
adds r1, r0
ldr r0, _08080ED8 @ =gUnknown_2039624
ldr r0, _08080ED8 @ =gTrainerCards
lsls r4, r5, 1
adds r4, r5
lsls r4, 5
@@ -958,12 +958,12 @@ _08080E9A:
.align 2, 0
_08080ED0: .4byte gLinkPlayers
_08080ED4: .4byte gBlockRecvBuffer
_08080ED8: .4byte gUnknown_2039624
_08080ED8: .4byte gTrainerCards
_08080EDC:
lsls r1, r5, 8
ldr r0, _08080F3C @ =gBlockRecvBuffer
adds r1, r0
ldr r2, _08080F40 @ =gUnknown_2039624
ldr r2, _08080F40 @ =gTrainerCards
lsls r0, r5, 1
adds r0, r5
lsls r0, 5
@@ -1004,7 +1004,7 @@ _08080EF8:
b _08080F66
.align 2, 0
_08080F3C: .4byte gBlockRecvBuffer
_08080F40: .4byte gUnknown_2039624
_08080F40: .4byte gTrainerCards
_08080F44: .4byte gSpecialVar_Result
_08080F48: .4byte gLinkType
_08080F4C: .4byte 0x00004411
+4 -4
View File
@@ -3154,14 +3154,14 @@ _081172C0:
cmp r4, r0
bne _0811734A
movs r4, 0
ldr r0, _081172E0 @ =gUnknown_2039624
ldr r0, _081172E0 @ =gTrainerCards
adds r7, r0, 0
adds r7, 0x38
ldr r6, _081172E4 @ =gLinkPlayers
adds r5, r0, 0
b _08117302
.align 2, 0
_081172E0: .4byte gUnknown_2039624
_081172E0: .4byte gTrainerCards
_081172E4: .4byte gLinkPlayers
_081172E8:
lsls r0, r4, 8
@@ -10949,7 +10949,7 @@ sub_811B31C: @ 811B31C
lsls r1, r0, 1
adds r1, r0
lsls r1, 5
ldr r0, _0811B4B0 @ =gUnknown_2039624
ldr r0, _0811B4B0 @ =gTrainerCards
adds r1, r0
mov r8, r1
bl DynamicPlaceholderTextUtil_Reset
@@ -11108,7 +11108,7 @@ _0811B45E:
bl StringAppend
b _0811B4F0
.align 2, 0
_0811B4B0: .4byte gUnknown_2039624
_0811B4B0: .4byte gTrainerCards
_0811B4B4: .4byte gTrainerClassNames
_0811B4B8: .4byte gUnknown_84594B0
_0811B4BC: .4byte gUnknown_84594C4
+4 -4
View File
@@ -334,7 +334,7 @@ _08054EB0:
ldr r1, _08054EC0 @ =0x00ffffff
_08054EB2:
adds r0, r4, 0
bl sub_8054F00
bl SetGameStat
_08054EB8:
pop {r4}
pop {r0}
@@ -376,8 +376,8 @@ _08054EFA:
bx r1
thumb_func_end GetGameStat
thumb_func_start sub_8054F00
sub_8054F00: @ 8054F00
thumb_func_start SetGameStat
SetGameStat: @ 8054F00
push {lr}
adds r3, r1, 0
lsls r0, 24
@@ -405,7 +405,7 @@ _08054F2A:
.align 2, 0
_08054F30: .4byte gSaveBlock1Ptr
_08054F34: .4byte gSaveBlock2Ptr
thumb_func_end sub_8054F00
thumb_func_end SetGameStat
thumb_func_start sub_8054F38
sub_8054F38: @ 8054F38
+1 -1
View File
@@ -44,7 +44,7 @@ _080CA318:
ldrb r0, [r2, 0x11]
orrs r1, r0
movs r0, 0x1
bl sub_8054F00
bl SetGameStat
_080CA33A:
bl sub_804C1AC
movs r0, 0x1
+8 -8
View File
@@ -4090,7 +4090,7 @@ _0808B1B8: .4byte 0x00007bce
sub_808B1BC: @ 808B1BC
lsls r0, 24
lsrs r0, 24
ldr r2, _0808B1D0 @ =gUnknown_2039624
ldr r2, _0808B1D0 @ =gTrainerCards
lsls r1, r0, 1
adds r1, r0
lsls r1, 5
@@ -4098,7 +4098,7 @@ sub_808B1BC: @ 808B1BC
ldrb r0, [r1, 0x1]
bx lr
.align 2, 0
_0808B1D0: .4byte gUnknown_2039624
_0808B1D0: .4byte gTrainerCards
thumb_func_end sub_808B1BC
thumb_func_start sub_808B1D4
@@ -4792,7 +4792,7 @@ sub_808B700: @ 808B700
ldr r0, [r5]
ldr r1, _0808B760 @ =0x0000045c
adds r0, r1
ldr r2, _0808B764 @ =gUnknown_2039624
ldr r2, _0808B764 @ =gTrainerCards
lsls r1, r4, 1
adds r1, r4
lsls r1, 5
@@ -4818,7 +4818,7 @@ sub_808B700: @ 808B700
_0808B758: .4byte gUnknown_20397A4
_0808B75C: .4byte 0x00007bd0
_0808B760: .4byte 0x0000045c
_0808B764: .4byte gUnknown_2039624
_0808B764: .4byte gTrainerCards
_0808B768: .4byte gLinkPlayers
_0808B76C: .4byte 0x00007bcf
_0808B770: .4byte sub_80895B8
@@ -5070,7 +5070,7 @@ _0808B95C: .4byte sub_80895B8
sub_808B960: @ 808B960
push {r4,lr}
adds r4, r0, 0
ldr r0, _0808B984 @ =gUnknown_2039624
ldr r0, _0808B984 @ =gTrainerCards
ldr r1, _0808B988 @ =gUnknown_83CD960
movs r2, 0x60
bl memcpy
@@ -5083,7 +5083,7 @@ sub_808B960: @ 808B960
pop {r0}
bx r0
.align 2, 0
_0808B984: .4byte gUnknown_2039624
_0808B984: .4byte gTrainerCards
_0808B988: .4byte gUnknown_83CD960
_0808B98C: .4byte sub_80895B8
thumb_func_end sub_808B960
@@ -5092,7 +5092,7 @@ _0808B98C: .4byte sub_80895B8
sub_808B990: @ 808B990
push {r4,lr}
adds r4, r0, 0
ldr r0, _0808B9B4 @ =gUnknown_2039624
ldr r0, _0808B9B4 @ =gTrainerCards
ldr r1, _0808B9B8 @ =gUnknown_83CD9C0
movs r2, 0x60
bl memcpy
@@ -5105,7 +5105,7 @@ sub_808B990: @ 808B990
pop {r0}
bx r0
.align 2, 0
_0808B9B4: .4byte gUnknown_2039624
_0808B9B4: .4byte gTrainerCards
_0808B9B8: .4byte gUnknown_83CD9C0
_0808B9BC: .4byte sub_80895B8
thumb_func_end sub_808B990
+41 -41
View File
@@ -670,7 +670,7 @@ gUnknown_8416741:: @ 0x8416741
.string "SEE YA!$"
gUnknown_8416749:: @ 8416749
.string "IN BAG:{SIZE 0x00} {STR_VAR_1}$"
.string "IN BAG:{SMALL} {STR_VAR_1}$"
gUnknown_8416757:: @ 8416757
.string "Quit shopping.$"
@@ -1293,19 +1293,19 @@ gUnknown_841797F:: @ 0x841797F
.string "INFO$"
gUnknown_8417984:: @ 0x8417984
.string "FRESH WATER{CLEAR_TO 0x57}{SIZE 0x00}¥200$"
.string "FRESH WATER{CLEAR_TO 0x57}{SMALL}¥200$"
gUnknown_841799A:: @ 0x841799A
.string "SODA POP{CLEAR_TO 0x57}{SIZE 0x00}¥300$"
.string "SODA POP{CLEAR_TO 0x57}{SMALL}¥300$"
gUnknown_84179AD:: @ 0x84179AD
.string "LEMONADE{CLEAR_TO 0x57}{SIZE 0x00}¥350$"
.string "LEMONADE{CLEAR_TO 0x57}{SMALL}¥350$"
gUnknown_84179C0:: @ 0x84179C0
.string "{SIZE 0x00} 50 COINS{CLEAR_TO 0x45}¥1,000$"
.string "{SMALL} 50 COINS{CLEAR_TO 0x45}¥1,000$"
gUnknown_84179D6:: @ 0x84179D6
.string "{SIZE 0x00}500 COINS{CLEAR_TO 0x40}¥10,000$"
.string "{SMALL}500 COINS{CLEAR_TO 0x40}¥10,000$"
gUnknown_84179ED:: @ 0x84179ED
.string "Excellent$"
@@ -1335,19 +1335,19 @@ gUnknown_8417A3D:: @ 0x8417A3D
.string "Left$"
gUnknown_8417A42:: @ 0x8417A42
.string "TM13{CLEAR_TO 0x48}{SIZE 0x00}4,000 COINS$"
.string "TM13{CLEAR_TO 0x48}{SMALL}4,000 COINS$"
gUnknown_8417A58:: @ 0x8417A58
.string "TM23{CLEAR_TO 0x48}{SIZE 0x00}3,500 COINS$"
.string "TM23{CLEAR_TO 0x48}{SMALL}3,500 COINS$"
gUnknown_8417A6E:: @ 0x8417A6E
.string "TM24{CLEAR_TO 0x48}{SIZE 0x00}4,000 COINS$"
.string "TM24{CLEAR_TO 0x48}{SMALL}4,000 COINS$"
gUnknown_8417A84:: @ 0x8417A84
.string "TM30{CLEAR_TO 0x48}{SIZE 0x00}4,500 COINS$"
.string "TM30{CLEAR_TO 0x48}{SMALL}4,500 COINS$"
gUnknown_8417A9A:: @ 0x8417A9A
.string "TM35{CLEAR_TO 0x48}{SIZE 0x00}4,000 COINS$"
.string "TM35{CLEAR_TO 0x48}{SMALL}4,000 COINS$"
gUnknown_8417AB0:: @ 0x8417AB0
.string "1F$"
@@ -1491,40 +1491,40 @@ gUnknown_8417C2D:: @ 8417C2D
.string "COINS$"
gUnknown_8417C33:: @ 0x8417C33
.string "BICYCLE{CLEAR_TO 0x49}{SIZE 0x00}¥1,000,000$"
.string "BICYCLE{CLEAR_TO 0x49}{SMALL}¥1,000,000$"
gUnknown_8417C4B:: @ 0x8417C4B
.string "NO THANKS$"
gUnknown_8417C55:: @ 0x8417C55
.string "ABRA{CLEAR_TO 0x55}{SIZE 0x00} 180 COINS$"
.string "ABRA{CLEAR_TO 0x55}{SMALL} 180 COINS$"
gUnknown_8417C6A:: @ 0x8417C6A
.string "CLEFAIRY{CLEAR_TO 0x55}{SIZE 0x00} 500 COINS$"
.string "CLEFAIRY{CLEAR_TO 0x55}{SMALL} 500 COINS$"
gUnknown_8417C83:: @ 0x8417C83
.string "DRATINI{CLEAR_TO 0x4B}{SIZE 0x00} 2,800 COINS$"
.string "DRATINI{CLEAR_TO 0x4B}{SMALL} 2,800 COINS$"
gUnknown_8417C9D:: @ 0x8417C9D
.string "SCYTHER{CLEAR_TO 0x4B}{SIZE 0x00} 5,500 COINS$"
.string "SCYTHER{CLEAR_TO 0x4B}{SMALL} 5,500 COINS$"
gUnknown_8417CB7:: @ 0x8417CB7
.string "PORYGON{CLEAR_TO 0x4B}{SIZE 0x00} 9,999 COINS$"
.string "PORYGON{CLEAR_TO 0x4B}{SMALL} 9,999 COINS$"
gUnknown_8417CD1:: @ 0x8417CD1
.string "ABRA{CLEAR_TO 0x55}{SIZE 0x00} 120 COINS$"
.string "ABRA{CLEAR_TO 0x55}{SMALL} 120 COINS$"
gUnknown_8417CE6:: @ 0x8417CE6
.string "CLEFAIRY{CLEAR_TO 0x55}{SIZE 0x00} 750 COINS$"
.string "CLEFAIRY{CLEAR_TO 0x55}{SMALL} 750 COINS$"
gUnknown_8417CFF:: @ 0x8417CFF
.string "PINSIR{CLEAR_TO 0x4B}{SIZE 0x00} 2,500 COINS$"
.string "PINSIR{CLEAR_TO 0x4B}{SMALL} 2,500 COINS$"
gUnknown_8417D18:: @ 0x8417D18
.string "DRATINI{CLEAR_TO 0x4B}{SIZE 0x00} 4,600 COINS$"
.string "DRATINI{CLEAR_TO 0x4B}{SMALL} 4,600 COINS$"
gUnknown_8417D32:: @ 0x8417D32
.string "PORYGON{CLEAR_TO 0x4B}{SIZE 0x00} 6,500 COINS$"
.string "PORYGON{CLEAR_TO 0x4B}{SMALL} 6,500 COINS$"
gUnknown_8417D4C:: @ 0x8417D4C
.string "NO THANKS$"
@@ -1632,19 +1632,19 @@ gUnknown_8417ECC:: @ 0x8417ECC
.string "BIRTH ISLAND$"
gUnknown_8417ED9:: @ 0x8417ED9
.string "MIRACLE SEED{CLEAR_TO 0x50}{SIZE 0x00}1,000 COINS$"
.string "MIRACLE SEED{CLEAR_TO 0x50}{SMALL}1,000 COINS$"
gUnknown_8417EF7:: @ 0x8417EF7
.string "CHARCOAL{CLEAR_TO 0x50}{SIZE 0x00}1,000 COINS$"
.string "CHARCOAL{CLEAR_TO 0x50}{SMALL}1,000 COINS$"
gUnknown_8417F11:: @ 0x8417F11
.string "MYSTIC WATER{CLEAR_TO 0x50}{SIZE 0x00}1,000 COINS$"
.string "MYSTIC WATER{CLEAR_TO 0x50}{SMALL}1,000 COINS$"
gUnknown_8417F2F:: @ 0x8417F2F
.string "YELLOW FLUTE{CLEAR_TO 0x50}{SIZE 0x00}1,600 COINS$"
.string "YELLOW FLUTE{CLEAR_TO 0x50}{SMALL}1,600 COINS$"
gUnknown_8417F4D:: @ 0x8417F4D
.string "SMOKE BALL{CLEAR_TO 0x5A}{SIZE 0x00}800 COINS$"
.string "SMOKE BALL{CLEAR_TO 0x5A}{SMALL}800 COINS$"
gUnknown_8417F67:: @ 0x8417F67
.string "$"
@@ -1782,37 +1782,37 @@ gUnknown_841809C:: @ 0x841809C
.string "UNION ROOM$"
gUnknown_84180A7:: @ 0x84180A7
.string "ENERGYPOWDER{CLEAR_TO 0x74}{SIZE 0x00}50$"
.string "ENERGYPOWDER{CLEAR_TO 0x74}{SMALL}50$"
gUnknown_84180BC:: @ 0x84180BC
.string "ENERGY ROOT{CLEAR_TO 0x74}{SIZE 0x00}80$"
.string "ENERGY ROOT{CLEAR_TO 0x74}{SMALL}80$"
gUnknown_84180D0:: @ 0x84180D0
.string "HEAL POWDER{CLEAR_TO 0x74}{SIZE 0x00}50$"
.string "HEAL POWDER{CLEAR_TO 0x74}{SMALL}50$"
gUnknown_84180E4:: @ 0x84180E4
.string "REVIVAL HERB{CLEAR_TO 0x6F}{SIZE 0x00}300$"
.string "REVIVAL HERB{CLEAR_TO 0x6F}{SMALL}300$"
gUnknown_84180FA:: @ 0x84180FA
.string "PROTEIN{CLEAR_TO 0x65}{SIZE 0x00}1,000$"
.string "PROTEIN{CLEAR_TO 0x65}{SMALL}1,000$"
gUnknown_841810D:: @ 0x841810D
.string "IRON{CLEAR_TO 0x65}{SIZE 0x00}1,000$"
.string "IRON{CLEAR_TO 0x65}{SMALL}1,000$"
gUnknown_841811D:: @ 0x841811D
.string "CARBOS{CLEAR_TO 0x65}{SIZE 0x00}1,000$"
.string "CARBOS{CLEAR_TO 0x65}{SMALL}1,000$"
gUnknown_841812F:: @ 0x841812F
.string "CALCIUM{CLEAR_TO 0x65}{SIZE 0x00}1,000$"
.string "CALCIUM{CLEAR_TO 0x65}{SMALL}1,000$"
gUnknown_8418142:: @ 0x8418142
.string "ZINC{CLEAR_TO 0x65}{SIZE 0x00}1,000$"
.string "ZINC{CLEAR_TO 0x65}{SMALL}1,000$"
gUnknown_8418152:: @ 0x8418152
.string "HP UP{CLEAR_TO 0x65}{SIZE 0x00}1,000$"
.string "HP UP{CLEAR_TO 0x65}{SMALL}1,000$"
gUnknown_8418163:: @ 0x8418163
.string "PP UP{CLEAR_TO 0x65}{SIZE 0x00}3,000$"
.string "PP UP{CLEAR_TO 0x65}{SMALL}3,000$"
gUnknown_8418174:: @ 8418174
.string "{PLAYER}'s BATTLE RESULTS$"
@@ -2870,7 +2870,7 @@ gUnknown_841B2A7:: @ 841B2A7
.string ".$"
gUnknown_841B2A9:: @ 0x841B2A9
.string "{SIZE 0x00}MAX.{SIZE 0x02} HP$"
.string "{SMALL}MAX.{SIZE 0x02} HP$"
gUnknown_841B2B7:: @ 0x841B2B7
.string "ATTACK$"
@@ -2888,10 +2888,10 @@ gUnknown_841B2D4:: @ 0x841B2D4
.string "SP. DEF$"
gUnknown_841B2DC:: @ 841B2DC
.string "{SIZE 0x00}{EXTRA_PLUS}{SIZE 0x02}$"
.string "{SMALL}{EXTRA_PLUS}{SIZE 0x02}$"
gUnknown_841B2E5:: @ 841B2E5
.string "{SIZE 0x00}-{SIZE 0x02}$"
.string "{SMALL}-{SIZE 0x02}$"
gUnknown_841B2ED:: @ 841B2ED
.string "1, $"
+2 -1
View File
@@ -78,7 +78,8 @@ void c2_load_new_map(void);
void copy_saved_warp2_bank_and_enter_x_to_warp1(u8 unused);
void mapldr_default(void);
u32 GetGameStat(u8);
u32 GetGameStat(u8 statId);
u32 SetGameStat(u8 statId, u32 value);
void CB2_ContinueSavedGame(void);
void sub_8055D5C(struct WarpData *);
+43
View File
@@ -0,0 +1,43 @@
#ifndef GUARD_TRAINER_CARD_H
#define GUARD_TRAINER_CARD_H
struct TrainerCard
{
/*0x00*/ u8 gender;
/*0x01*/ u8 stars;
/*0x02*/ bool8 hasPokedex;
/*0x03*/ bool8 caughtAllHoenn;
/*0x04*/ bool8 hasAllPaintings;
/*0x06*/ u16 hofDebutHours;
/*0x08*/ u16 hofDebutMinutes;
/*0x0A*/ u16 hofDebutSeconds;
/*0x0C*/ u16 caughtMonsCount;
/*0x0E*/ u16 trainerId;
/*0x10*/ u16 playTimeHours;
/*0x12*/ u16 playTimeMinutes;
/*0x14*/ u16 linkBattleWins;
/*0x16*/ u16 linkBattleLosses;
/*0x18*/ u16 battleTowerWins;
/*0x1A*/ u16 battleTowerStraightWins;
/*0x1C*/ u16 contestsWithFriends;
/*0x1E*/ u16 pokeblocksWithFriends;
/*0x20*/ u16 pokemonTrades;
/*0x24*/ u32 money;
/*0x28*/ u16 var_28[4];
/*0x30*/ u8 playerName[PLAYER_NAME_LENGTH + 1];
/*0x38*/ u8 version;
/*0x3A*/ u16 var_3A;
/*0x3C*/ u32 berryCrushPoints;
/*0x40*/ u32 unionRoomNum;
/*0x44*/ u8 filler44[0x8];
/*0x4C*/ u8 var_4C;
/*0x4D*/ u8 var_4D;
/*0x4E*/ u8 var_4E;
/*0x4F*/ u8 var_4F;
/*0x50*/ u8 var_50[0x4];
/*0x54*/ u16 monSpecies[PARTY_SIZE];
};
extern struct TrainerCard gTrainerCards[4];
#endif //GUARD_TRAINER_CARD_H
+6
View File
@@ -0,0 +1,6 @@
#ifndef GUARD_TRAINER_TOWER_H
#define GUARD_TRAINER_TOWER_H
void sub_815EC8C(void);
#endif //GUARD_TRAINER_TOWER_H
+1
View File
@@ -188,6 +188,7 @@ SECTIONS {
src/prof_pc.o(.text);
src/hof_pc.o(.text);
asm/field_specials.o(.text);
src/battle_records.o(.text);
asm/battle_records.o(.text);
asm/evolution_scene.o(.text);
src/coins.o(.text);
+420
View File
@@ -0,0 +1,420 @@
#include "global.h"
#include "malloc.h"
#include "main.h"
#include "bg.h"
#include "gpu_regs.h"
#include "event_data.h"
#include "palette.h"
#include "task.h"
#include "text.h"
#include "window.h"
#include "text_window.h"
#include "battle.h"
#include "trainer_tower.h"
#include "trainer_pokemon_sprites.h"
#include "scanline_effect.h"
#include "sound.h"
#include "string_util.h"
#include "link.h"
#include "overworld.h"
#include "trainer_card.h"
#include "constants/battle.h"
#include "constants/songs.h"
#include "constants/maps.h"
struct LinkBattleRecordState
{
u16 unk_00;
u16 unk_02;
u8 filler_04[92];
};
EWRAM_DATA struct LinkBattleRecordState gUnknown_2039638[10] = {};
EWRAM_DATA u16 * gUnknown_2039A1C = NULL;
void sub_80CD240(void);
void sub_80CD38C(void);
void sub_80CD3A0(void);
void sub_80CD3B8(u8 taskId);
void sub_80CD3E8(u8 taskId);
void sub_80CD428(u8 taskId);
void sub_80CD460(u8 taskId);
void sub_80CD4A4(u8 winddowId);
void sub_80CD4D0(void);
void sub_80CD608(void);
void sub_80CD628(void);
void sub_80CD638(void);
void sub_80CDBE4(void);
void sub_80CDCD0(u8 bgId);
extern const struct WindowTemplate gUnknown_83F6C68[];
extern const struct BgTemplate gUnknown_83F6C7C[2];
void sub_80CD228(void)
{
SetVBlankCallback(NULL);
SetMainCallback2(sub_80CD240);
}
void sub_80CD240(void)
{
switch (gMain.state)
{
case 0:
SetVBlankCallback(NULL);
sub_80CD4D0();
gMain.state++;
break;
case 1:
sub_80CD608();
gMain.state++;
break;
case 2:
gUnknown_2039A1C = AllocZeroed(0x800);
ResetBgsAndClearDma3BusyFlags(0);
InitBgsFromTemplates(0, gUnknown_83F6C7C, NELEMS(gUnknown_83F6C7C));
SetBgTilemapBuffer(3, gUnknown_2039A1C);
sub_80CD638();
gMain.state++;
break;
case 3:
sub_80CDCD0(3);
LoadPalette(stdpal_get(0), 0xF0, 0x20);
gMain.state++;
break;
case 4:
if (IsDma3ManagerBusyWithBgCopy() != TRUE)
{
ShowBg(0);
ShowBg(3);
CopyBgTilemapBufferToVram(3);
gMain.state++;
}
break;
case 5:
InitWindows(gUnknown_83F6C68);
DeactivateAllTextPrinters();
gMain.state++;
break;
case 6:
BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK);
gMain.state++;
break;
case 7:
sub_80CD628();
SetVBlankCallback(sub_80CD38C);
if (gSpecialVar_0x8004)
sub_815EC8C();
else
sub_80CDBE4();
CreateTask(sub_80CD3B8, 8);
SetMainCallback2(sub_80CD3A0);
gMain.state = 0;
break;
}
}
void sub_80CD38C(void)
{
LoadOam();
ProcessSpriteCopyRequests();
TransferPlttBuffer();
}
void sub_80CD3A0(void)
{
RunTasks();
AnimateSprites();
BuildOamBuffer();
UpdatePaletteFade();
}
void sub_80CD3B8(u8 taskId)
{
if (!gPaletteFade.active)
gTasks[taskId].func = sub_80CD3E8;
}
void sub_80CD3E8(u8 taskId)
{
struct Task * task = &gTasks[taskId];
if (JOY_NEW(A_BUTTON) || JOY_NEW(B_BUTTON))
{
PlaySE(SE_SELECT);
task->func = sub_80CD428;
}
}
void sub_80CD428(u8 taskId)
{
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
gTasks[taskId].func = sub_80CD460;
}
void sub_80CD460(u8 taskId)
{
if (!gPaletteFade.active)
{
SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic);
Free(gUnknown_2039A1C);
sub_80CD4A4(0);
FreeAllWindowBuffers();
DestroyTask(taskId);
}
}
void sub_80CD4A4(u8 windowId)
{
FillWindowPixelBuffer(windowId, PIXEL_FILL(0));
ClearWindowTilemap(windowId);
CopyWindowToVram(windowId, 2);
RemoveWindow(windowId);
}
void sub_80CD4D0(void)
{
{
void * dest = (void *)VRAM;
u32 size = VRAM_SIZE;
DmaClearLarge16(3, dest, size, 0x1000);
}
{
void * dest = (void *)OAM;
u32 size = OAM_SIZE;
DmaClear32(3, dest, size);
}
{
void * dest = (void *)PLTT;
u32 size = PLTT_SIZE;
DmaClear16(3, dest, size);
}
SetGpuReg(REG_OFFSET_DISPCNT, 0);
SetGpuReg(REG_OFFSET_BG0CNT, 0);
SetGpuReg(REG_OFFSET_BG0HOFS, 0);
SetGpuReg(REG_OFFSET_BG0VOFS, 0);
SetGpuReg(REG_OFFSET_BG1CNT, 0);
SetGpuReg(REG_OFFSET_BG1HOFS, 0);
SetGpuReg(REG_OFFSET_BG1VOFS, 0);
SetGpuReg(REG_OFFSET_BG2CNT, 0);
SetGpuReg(REG_OFFSET_BG2HOFS, 0);
SetGpuReg(REG_OFFSET_BG2VOFS, 0);
SetGpuReg(REG_OFFSET_BG3CNT, 0);
SetGpuReg(REG_OFFSET_BG3HOFS, 0);
SetGpuReg(REG_OFFSET_BG3VOFS, 0);
SetGpuReg(REG_OFFSET_WIN0H, 0);
SetGpuReg(REG_OFFSET_WIN0V, 0);
SetGpuReg(REG_OFFSET_WININ, 0);
SetGpuReg(REG_OFFSET_WINOUT, 0);
SetGpuReg(REG_OFFSET_BLDCNT, 0);
SetGpuReg(REG_OFFSET_BLDALPHA, 0);
SetGpuReg(REG_OFFSET_BLDY, 0);
}
void sub_80CD608(void)
{
ScanlineEffect_Stop();
ResetTasks();
ResetSpriteData();
ResetAllPicSprites();
ResetPaletteFade();
FreeAllSpritePalettes();
}
void sub_80CD628(void)
{
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG3_ON);
}
void sub_80CD638(void)
{
ChangeBgX(0, 0, 0);
ChangeBgY(0, 0, 0);
ChangeBgX(1, 0, 0);
ChangeBgY(1, 0, 0);
ChangeBgX(2, 0, 0);
ChangeBgY(2, 0, 0);
ChangeBgX(3, 0, 0);
ChangeBgY(3, 0, 0);
}
void InitLinkBattleRecord(struct LinkBattleRecord * record)
{
CpuFill16(0, record, sizeof(*record));
record->name[0] = EOS;
record->trainerId = 0;
record->wins = 0;
record->losses = 0;
record->draws = 0;
}
void InitLinkBattleRecords_(struct LinkBattleRecords * records)
{
s32 i;
for (i = 0; i < LINK_B_RECORDS_COUNT; i++)
InitLinkBattleRecord(&records->entries[i]);
SetGameStat(GAME_STAT_LINK_BATTLE_WINS, 0);
SetGameStat(GAME_STAT_LINK_BATTLE_LOSSES, 0);
SetGameStat(GAME_STAT_LINK_BATTLE_DRAWS, 0);
}
s32 GetLinkBattleRecordTotalBattles(struct LinkBattleRecord * record)
{
return record->wins + record->losses + record->draws;
}
s32 sub_80CD704(struct LinkBattleRecords * records, const u8 * name, u16 trainerId)
{
s32 i;
for (i = 0; i < LINK_B_RECORDS_COUNT; i++)
{
if (StringCompareN(records->entries[i].name, name, OT_NAME_LENGTH) == 0 && records->entries[i].trainerId == trainerId)
return i;
}
return LINK_B_RECORDS_COUNT;
}
void SortLinkBattleRecords(struct LinkBattleRecords * records)
{
struct LinkBattleRecord tmp;
s32 i;
s32 j;
for (i = LINK_B_RECORDS_COUNT - 1; i > 0; i--)
{
for (j = i - 1; j >= 0; j--)
{
if (GetLinkBattleRecordTotalBattles(&records->entries[i]) > GetLinkBattleRecordTotalBattles(&records->entries[j]))
{
tmp = records->entries[i];
records->entries[i] = records->entries[j];
records->entries[j] = tmp;
}
}
}
}
void UpdateLinkBattleRecord(struct LinkBattleRecord * record, s32 outcome)
{
switch (outcome)
{
case B_OUTCOME_WON:
record->wins++;
if (record->wins > 9999)
record->wins = 9999;
break;
case B_OUTCOME_LOST:
record->losses++;
if (record->losses > 9999)
record->losses = 9999;
break;
case B_OUTCOME_DREW:
record->draws++;
if (record->draws > 9999)
record->draws = 9999;
break;
}
}
void UpdateLinkBattleGameStats(s32 outcome)
{
u8 statId;
switch (outcome)
{
case B_OUTCOME_WON:
statId = GAME_STAT_LINK_BATTLE_WINS;
break;
case B_OUTCOME_LOST:
statId = GAME_STAT_LINK_BATTLE_LOSSES;
break;
case B_OUTCOME_DREW:
statId = GAME_STAT_LINK_BATTLE_DRAWS;
break;
default:
return;
}
if (GetGameStat(statId) < 9999)
IncrementGameStat(statId);
}
void sub_80CD854(struct LinkBattleRecords * records, const u8 * name, u16 trainerId, s32 outcome, u32 language)
{
u8 namebuf[OT_NAME_LENGTH + 1];
s32 i;
struct LinkBattleRecord * record;
if (language == LANGUAGE_JAPANESE)
{
namebuf[0] = EXT_CTRL_CODE_BEGIN;
namebuf[1] = EXT_CTRL_CODE_JPN;
StringCopy(&namebuf[2], name);
}
else
StringCopy(namebuf, name);
UpdateLinkBattleGameStats(outcome);
SortLinkBattleRecords(records);
i = sub_80CD704(records, namebuf, trainerId);
if (i == LINK_B_RECORDS_COUNT)
{
i = LINK_B_RECORDS_COUNT - 1;
record = &records->entries[LINK_B_RECORDS_COUNT - 1];
InitLinkBattleRecord(record);
StringCopyN(record->name, namebuf, OT_NAME_LENGTH);
record->trainerId = trainerId;
}
UpdateLinkBattleRecord(&records->entries[i], outcome);
SortLinkBattleRecords(records);
}
void InitLinkBattleRecords(void)
{
InitLinkBattleRecords_(&gSaveBlock2Ptr->linkBattleRecords);
}
void sub_80CD8F8(s32 battlerId)
{
u16 *wins = &gTrainerCards[battlerId].linkBattleWins;
(*wins)++;
if (*wins > 9999)
*wins = 9999;
}
void sub_80CD924(s32 battlerId)
{
u16 *losses = &gTrainerCards[battlerId].linkBattleLosses;
(*losses)++;
if (*losses > 9999)
*losses = 9999;
}
void sub_80CD950(s32 battlerId)
{
switch (gBattleOutcome)
{
case B_OUTCOME_WON:
sub_80CD8F8(battlerId ^ 1);
sub_80CD924(battlerId);
break;
case B_OUTCOME_LOST:
sub_80CD924(battlerId ^ 1);
sub_80CD8F8(battlerId);
break;
}
}
void sub_80CD98C(s32 battlerId)
{
if (gSaveBlock1Ptr->location.mapGroup != MAP_GROUP(UNKNOWN_MAP_00_04) || gSaveBlock1Ptr->location.mapNum != MAP_NUM(UNKNOWN_MAP_00_04))
{
sub_80CD950(battlerId);
sub_80CD854(&gSaveBlock2Ptr->linkBattleRecords, gTrainerCards[battlerId].playerName, gTrainerCards[battlerId].trainerId, gBattleOutcome, gLinkPlayers[battlerId].language);
}
}
+1 -1
View File
@@ -841,7 +841,7 @@ gFieldEffectArguments: @ 20386E0
gUnknown_2039620: @ 2039620
.space 0x4
gUnknown_2039624: @ 2039624
gTrainerCards: @ 2039624
.space 0x14
gUnknown_2039638: @ 2039638