Merge pull request #453 from huderlem/battle_tower

Decompile battle_tower
This commit is contained in:
Marcus Huderle
2017-11-02 21:03:52 -07:00
committed by GitHub
39 changed files with 13484 additions and 12112 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -1,70 +0,0 @@
.set F_EV_SPREAD_HP, 1 << 0
.set F_EV_SPREAD_ATTACK, 1 << 1
.set F_EV_SPREAD_DEFENSE, 1 << 2
.set F_EV_SPREAD_SPEED, 1 << 3
.set F_EV_SPREAD_SP_ATTACK, 1 << 4
.set F_EV_SPREAD_SP_DEFENSE, 1 << 5
.set BATTLE_TOWER_ITEM_NONE, 0
.set BATTLE_TOWER_ITEM_KINGS_ROCK, 1
.set BATTLE_TOWER_ITEM_SITRUS_BERRY, 2
.set BATTLE_TOWER_ITEM_ORAN_BERRY, 3
.set BATTLE_TOWER_ITEM_CHESTO_BERRY, 4
.set BATTLE_TOWER_ITEM_HARD_STONE, 5
.set BATTLE_TOWER_ITEM_FOCUS_BAND, 6
.set BATTLE_TOWER_ITEM_PERSIM_BERRY, 7
.set BATTLE_TOWER_ITEM_MIRACLE_SEED, 8
.set BATTLE_TOWER_ITEM_BERRY_JUICE, 9
.set BATTLE_TOWER_ITEM_MACHO_BRACE, 10
.set BATTLE_TOWER_ITEM_SILVER_POWDER, 11
.set BATTLE_TOWER_ITEM_CHERI_BERRY, 12
.set BATTLE_TOWER_ITEM_BLACK_GLASSES, 13
.set BATTLE_TOWER_ITEM_BLACK_BELT, 14
.set BATTLE_TOWER_ITEM_SOUL_DEW, 15
.set BATTLE_TOWER_ITEM_CHOICE_BAND, 16
.set BATTLE_TOWER_ITEM_MAGNET, 17
.set BATTLE_TOWER_ITEM_SILK_SCARF, 18
.set BATTLE_TOWER_ITEM_WHITE_HERB, 19
.set BATTLE_TOWER_ITEM_DEEP_SEA_SCALE, 20
.set BATTLE_TOWER_ITEM_DEEP_SEA_TOOTH, 21
.set BATTLE_TOWER_ITEM_MYSTIC_WATER, 22
.set BATTLE_TOWER_ITEM_SHARP_BEAK, 23
.set BATTLE_TOWER_ITEM_QUICK_CLAW, 24
.set BATTLE_TOWER_ITEM_LEFTOVERS, 25
.set BATTLE_TOWER_ITEM_RAWST_BERRY, 26
.set BATTLE_TOWER_ITEM_LIGHT_BALL, 27
.set BATTLE_TOWER_ITEM_POISON_BARB, 28
.set BATTLE_TOWER_ITEM_NEVER_MELT_ICE, 29
.set BATTLE_TOWER_ITEM_ASPEAR_BERRY, 30
.set BATTLE_TOWER_ITEM_SPELL_TAG, 31
.set BATTLE_TOWER_ITEM_BRIGHT_POWDER, 32
.set BATTLE_TOWER_ITEM_LEPPA_BERRY, 33
.set BATTLE_TOWER_ITEM_SCOPE_LENS, 34
.set BATTLE_TOWER_ITEM_TWISTED_SPOON, 35
.set BATTLE_TOWER_ITEM_METAL_COAT, 36
.set BATTLE_TOWER_ITEM_MENTAL_HERB, 37
.set BATTLE_TOWER_ITEM_CHARCOAL, 38
.set BATTLE_TOWER_ITEM_PECHA_BERRY, 39
.set BATTLE_TOWER_ITEM_SOFT_SAND, 40
.set BATTLE_TOWER_ITEM_LUM_BERRY, 41
.set BATTLE_TOWER_ITEM_DRAGON_SCALE, 42
.set BATTLE_TOWER_ITEM_DRAGON_FANG, 43
.set BATTLE_TOWER_ITEM_IAPAPA_BERRY, 44
.set BATTLE_TOWER_ITEM_WIKI_BERRY, 45
.set BATTLE_TOWER_ITEM_SEA_INCENSE, 46
.set BATTLE_TOWER_ITEM_SHELL_BELL, 47
.set BATTLE_TOWER_ITEM_SALAC_BERRY, 48
.set BATTLE_TOWER_ITEM_LANSAT_BERRY, 49
.set BATTLE_TOWER_ITEM_APICOT_BERRY, 50
.set BATTLE_TOWER_ITEM_STARF_BERRY, 51
.set BATTLE_TOWER_ITEM_LIECHI_BERRY, 52
.set BATTLE_TOWER_ITEM_STICK, 53
.set BATTLE_TOWER_ITEM_LAX_INCENSE, 54
.set BATTLE_TOWER_ITEM_AGUAV_BERRY, 55
.set BATTLE_TOWER_ITEM_FIGY_BERRY, 56
.set BATTLE_TOWER_ITEM_THICK_CLUB, 57
.set BATTLE_TOWER_ITEM_MAGO_BERRY, 58
.set BATTLE_TOWER_ITEM_METAL_POWDER, 59
.set BATTLE_TOWER_ITEM_PETAYA_BERRY, 60
.set BATTLE_TOWER_ITEM_LUCKY_PUNCH, 61
.set BATTLE_TOWER_ITEM_GANLON_BERRY, 62

View File

@@ -14,7 +14,6 @@
.include "constants/map_constants.inc"
.include "constants/berry_constants.inc"
.include "constants/map_object_constants.inc"
.include "constants/battle_tower_constants.inc"
.include "constants/opponent_constants.inc"
.include "constants/decorations.inc"
.include "constants/songs.inc"

File diff suppressed because it is too large Load Diff

View File

@@ -1,159 +0,0 @@
.include "asm/macros.inc"
.include "constants/constants.inc"
.section .rodata
@ 8402F00
.include "data/battle_tower/trainers.inc"
@ 8403860
.include "data/battle_tower/held_items.inc"
@ 84038E0
.include "data/battle_tower/level_50_mons.inc"
@ 8404BA0
.include "data/battle_tower/level_100_mons.inc"
gUnknown_08405E60:: @ 8405E60
.byte 4
.byte 7
.byte 8
.byte 13
.byte 14
.byte 15
.byte 16
.byte 17
.byte 18
.byte 19
.byte 20
.byte 21
.byte 23
.byte 29
.byte 32
.byte 34
.byte 36
.byte 38
.byte 39
.byte 41
.byte 43
.byte 45
.byte 46
.byte 47
.byte 53
.byte 56
.byte 64
.byte 66
.byte 72
.byte 73
gUnknown_08405E7E:: @ 8405E7E
.byte 3
.byte 6
.byte 9
.byte 10
.byte 11
.byte 12
.byte 22
.byte 30
.byte 33
.byte 35
.byte 40
.byte 42
.byte 44
.byte 48
.byte 49
.byte 50
.byte 51
.byte 65
.byte 67
.byte 71
gUnknown_08405E92:: @ 8405E92
.byte MAP_OBJ_GFX_HIKER
.byte MAP_OBJ_GFX_TUBER_M
.byte MAP_OBJ_GFX_MAN_4
.byte MAP_OBJ_GFX_BOY_4
.byte MAP_OBJ_GFX_MANIAC
.byte MAP_OBJ_GFX_RUNNING_TRIATHLETE_M
.byte MAP_OBJ_GFX_BLACK_BELT
.byte MAP_OBJ_GFX_MAN_6
.byte MAP_OBJ_GFX_MAN_6
.byte MAP_OBJ_GFX_CAMPER
.byte MAP_OBJ_GFX_MANIAC
.byte MAP_OBJ_GFX_PSYCHIC_M
.byte MAP_OBJ_GFX_GENTLEMAN
.byte MAP_OBJ_GFX_SCHOOL_KID_M
.byte MAP_OBJ_GFX_MAN_3
.byte MAP_OBJ_GFX_OLD_MAN_1
.byte MAP_OBJ_GFX_YOUNGSTER
.byte MAP_OBJ_GFX_FISHERMAN
.byte MAP_OBJ_GFX_CYCLING_TRIATHLETE_M
.byte MAP_OBJ_GFX_RUNNING_TRIATHLETE_M
.byte MAP_OBJ_GFX_RUNNING_TRIATHLETE_M
.byte MAP_OBJ_GFX_MAN_4
.byte MAP_OBJ_GFX_MAN_6
.byte MAP_OBJ_GFX_LITTLE_BOY_1
.byte MAP_OBJ_GFX_SAILOR
.byte MAP_OBJ_GFX_MANIAC
.byte MAP_OBJ_GFX_MAN_5
.byte MAP_OBJ_GFX_CAMPER
.byte MAP_OBJ_GFX_BUG_CATCHER
.byte MAP_OBJ_GFX_HIKER
gUnknown_08405EB0:: @ 8405EB0
.byte MAP_OBJ_GFX_WOMAN_3
.byte MAP_OBJ_GFX_TUBER_F
.byte MAP_OBJ_GFX_WOMAN_7
.byte MAP_OBJ_GFX_WOMAN_1
.byte MAP_OBJ_GFX_WOMAN_3
.byte MAP_OBJ_GFX_BEAUTY
.byte MAP_OBJ_GFX_LASS
.byte MAP_OBJ_GFX_GIRL_3
.byte MAP_OBJ_GFX_WOMAN_2
.byte MAP_OBJ_GFX_OLD_WOMAN_1
.byte MAP_OBJ_GFX_CYCLING_TRIATHLETE_F
.byte MAP_OBJ_GFX_RUNNING_TRIATHLETE_F
.byte MAP_OBJ_GFX_RUNNING_TRIATHLETE_F
.byte MAP_OBJ_GFX_GIRL_3
.byte MAP_OBJ_GFX_WOMAN_7
.byte MAP_OBJ_GFX_RUNNING_TRIATHLETE_F
.byte MAP_OBJ_GFX_PICNICKER
.byte MAP_OBJ_GFX_WOMAN_3
.byte MAP_OBJ_GFX_PICNICKER
.byte MAP_OBJ_GFX_LASS
.align 1
gBattleTowerBanlist:: @ 8405EC4
.2byte SPECIES_MEW
.2byte SPECIES_MEWTWO
.2byte SPECIES_HO_OH
.2byte SPECIES_LUGIA
.2byte SPECIES_CELEBI
.2byte SPECIES_KYOGRE
.2byte SPECIES_GROUDON
.2byte SPECIES_RAYQUAZA
.2byte SPECIES_JIRACHI
.2byte SPECIES_DEOXYS
.2byte -1
.align 1
gUnknown_08405EDA:: @ 8405EDA
.2byte ITEM_HP_UP
.2byte ITEM_PROTEIN
.2byte ITEM_IRON
.2byte ITEM_CALCIUM
.2byte ITEM_CARBOS
.2byte ITEM_ZINC
.align 1
gUnknown_08405EE6:: @ 8405EE6
.2byte ITEM_BRIGHT_POWDER
.2byte ITEM_WHITE_HERB
.2byte ITEM_QUICK_CLAW
.2byte ITEM_LEFTOVERS
.2byte ITEM_MENTAL_HERB
.2byte ITEM_KINGS_ROCK
.2byte ITEM_FOCUS_BAND
.2byte ITEM_SCOPE_LENS
.2byte ITEM_CHOICE_BAND

View File

@@ -1,65 +0,0 @@
.align 1
gBattleTowerHeldItems:: @ 8403860
.2byte ITEM_NONE
.2byte ITEM_KINGS_ROCK
.2byte ITEM_SITRUS_BERRY
.2byte ITEM_ORAN_BERRY
.2byte ITEM_CHESTO_BERRY
.2byte ITEM_HARD_STONE
.2byte ITEM_FOCUS_BAND
.2byte ITEM_PERSIM_BERRY
.2byte ITEM_MIRACLE_SEED
.2byte ITEM_BERRY_JUICE
.2byte ITEM_MACHO_BRACE
.2byte ITEM_SILVER_POWDER
.2byte ITEM_CHERI_BERRY
.2byte ITEM_BLACK_GLASSES
.2byte ITEM_BLACK_BELT
.2byte ITEM_SOUL_DEW
.2byte ITEM_CHOICE_BAND
.2byte ITEM_MAGNET
.2byte ITEM_SILK_SCARF
.2byte ITEM_WHITE_HERB
.2byte ITEM_DEEP_SEA_SCALE
.2byte ITEM_DEEP_SEA_TOOTH
.2byte ITEM_MYSTIC_WATER
.2byte ITEM_SHARP_BEAK
.2byte ITEM_QUICK_CLAW
.2byte ITEM_LEFTOVERS
.2byte ITEM_RAWST_BERRY
.2byte ITEM_LIGHT_BALL
.2byte ITEM_POISON_BARB
.2byte ITEM_NEVER_MELT_ICE
.2byte ITEM_ASPEAR_BERRY
.2byte ITEM_SPELL_TAG
.2byte ITEM_BRIGHT_POWDER
.2byte ITEM_LEPPA_BERRY
.2byte ITEM_SCOPE_LENS
.2byte ITEM_TWISTED_SPOON
.2byte ITEM_METAL_COAT
.2byte ITEM_MENTAL_HERB
.2byte ITEM_CHARCOAL
.2byte ITEM_PECHA_BERRY
.2byte ITEM_SOFT_SAND
.2byte ITEM_LUM_BERRY
.2byte ITEM_DRAGON_SCALE
.2byte ITEM_DRAGON_FANG
.2byte ITEM_IAPAPA_BERRY
.2byte ITEM_WIKI_BERRY
.2byte ITEM_SEA_INCENSE
.2byte ITEM_SHELL_BELL
.2byte ITEM_SALAC_BERRY
.2byte ITEM_LANSAT_BERRY
.2byte ITEM_APICOT_BERRY
.2byte ITEM_STARF_BERRY
.2byte ITEM_LIECHI_BERRY
.2byte ITEM_STICK
.2byte ITEM_LAX_INCENSE
.2byte ITEM_AGUAV_BERRY
.2byte ITEM_FIGY_BERRY
.2byte ITEM_THICK_CLUB
.2byte ITEM_MAGO_BERRY
.2byte ITEM_METAL_POWDER
.2byte ITEM_PETAYA_BERRY
.2byte ITEM_LUCKY_PUNCH
.2byte ITEM_GANLON_BERRY

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -16,7 +16,7 @@ BattleTower_BattleRoom_EventScript_1608FA:: @ 81608FA
addobject 1
applymovement 1, BattleTower_BattleRoom_Movement_160AC0
waitmovement 0
special sub_8135474
special PrintBattleTowerTrainerGreeting
msgbox 0x20234cc, 4
waitmessage
closemessage
@@ -116,7 +116,7 @@ BattleTower_BattleRoom_EventScript_160A94:: @ 8160A94
BattleTower_BattleRoom_EventScript_160AB1:: @ 8160AB1
fadescreen 1
special sub_8135C38
special BattleTower_SoftReset
end
BattleTower_BattleRoom_Movement_160AB7:: @ 8160AB7

View File

@@ -79,7 +79,7 @@ BattleTower_Lobby_EventScript_160342:: @ 8160342
special sub_81358A4
compare RESULT, 6
goto_if_eq BattleTower_Lobby_EventScript_16037D
special sub_8135E50
special AwardBattleTowerRibbons
compare RESULT, 0
goto_if_eq BattleTower_Lobby_EventScript_16037D
message BattleTower_Lobby_Text_19A6BE
@@ -97,7 +97,7 @@ BattleTower_Lobby_EventScript_16037D:: @ 816037D
waitmessage
setvar 0x8004, 13
special sub_8135668
special sub_8135D84
special DetermineBattleTowerPrize
setvar 0x8004, 3
special sub_8135BA0
playse 55
@@ -109,7 +109,7 @@ BattleTower_Lobby_EventScript_1603AD:: @ 81603AD
special sub_8135668
message BattleTower_Lobby_Text_19A4BB
waitmessage
special sub_8135DEC
special GiveBattleTowerPrize
switch RESULT
case 0, BattleTower_Lobby_EventScript_160408
message BattleTower_Lobby_Text_19A506

View File

@@ -5,7 +5,7 @@ MossdeepCity_GameCorner_1F_MapScripts:: @ 815AC52
.byte 0
MossdeepCity_GameCorner_1F_MapScript1_15AC62:: @ 815AC62
special sub_813601C
special ValidateEReaderTrainer
compare RESULT, 1
call_if 1, MossdeepCity_GameCorner_1F_EventScript_15AC71
end
@@ -16,7 +16,7 @@ MossdeepCity_GameCorner_1F_EventScript_15AC71:: @ 815AC71
return
MossdeepCity_GameCorner_1F_MapScript1_15AC84:: @ 815AC84
special sub_813601C
special ValidateEReaderTrainer
compare RESULT, 0
call_if 1, MossdeepCity_GameCorner_1F_EventScript_15AC9E
compare 0x40c0, 0

View File

@@ -4,7 +4,7 @@ MossdeepCity_GameCorner_B1F_MapScripts:: @ 815AE55
.byte 0
MossdeepCity_GameCorner_B1F_MapScript1_15AE60:: @ 815AE60
special sub_8134AB4
special SetEReaderTrainerGfxId
end
MossdeepCity_GameCorner_B1F_MapScript2_15AE64:: @ 815AE64
@@ -15,7 +15,7 @@ MossdeepCity_GameCorner_B1F_EventScript_15AE6E:: @ 815AE6E
lockall
applymovement 255, MossdeepCity_GameCorner_B1F_Movement_15AEF9
waitmovement 0
special sub_81360C0
special PrintEReaderTrainerGreeting
msgbox 0x20234cc, 4
closemessage
setvar 0x8004, 2

View File

@@ -241,19 +241,19 @@ gSpecials::
def_special sub_8134548
def_special sub_81347F8
def_special CheckPartyBattleTowerBanlist
def_special sub_8135474
def_special sub_81360C0
def_special PrintBattleTowerTrainerGreeting
def_special PrintEReaderTrainerGreeting
def_special sub_813556C
def_special sub_8135668
def_special sub_81358A4
def_special sub_8135A14
def_special sub_8135BA0
def_special sub_8135C38
def_special sub_8135D84
def_special sub_8135DEC
def_special sub_8135E50
def_special BattleTower_SoftReset
def_special DetermineBattleTowerPrize
def_special GiveBattleTowerPrize
def_special AwardBattleTowerRibbons
def_special ChooseBattleTowerPlayerParty
def_special sub_813601C
def_special ValidateEReaderTrainer
def_special sub_810F404
def_special ReducePlayerPartyToThree
def_special BedroomPC
@@ -329,7 +329,7 @@ gSpecials::
def_special sp13F_fall_to_last_warp
def_special ShowContestEntryMonPic
def_special sub_80C5164
def_special sub_8134AB4
def_special SetEReaderTrainerGfxId
def_special ScrSpecial_StartSouthernIslandBattle
def_special SetRoute119Weather
def_special SetRoute123Weather

View File

@@ -1,8 +1,102 @@
#ifndef GUARD_BATTLE_TOWER_H
#define GUARD_BATTLE_TOWER_H
void sub_8134AC0(void *);
#define BATTLE_TOWER_EREADER_TRAINER_ID 200
#define BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID 100
enum
{
F_EV_SPREAD_HP = 1 << 0,
F_EV_SPREAD_ATTACK = 1 << 1,
F_EV_SPREAD_DEFENSE = 1 << 2,
F_EV_SPREAD_SPEED = 1 << 3,
F_EV_SPREAD_SP_ATTACK = 1 << 4,
F_EV_SPREAD_SP_DEFENSE = 1 << 5,
};
enum
{
BATTLE_TOWER_ITEM_NONE,
BATTLE_TOWER_ITEM_KINGS_ROCK,
BATTLE_TOWER_ITEM_SITRUS_BERRY,
BATTLE_TOWER_ITEM_ORAN_BERRY,
BATTLE_TOWER_ITEM_CHESTO_BERRY,
BATTLE_TOWER_ITEM_HARD_STONE,
BATTLE_TOWER_ITEM_FOCUS_BAND,
BATTLE_TOWER_ITEM_PERSIM_BERRY,
BATTLE_TOWER_ITEM_MIRACLE_SEED,
BATTLE_TOWER_ITEM_BERRY_JUICE,
BATTLE_TOWER_ITEM_MACHO_BRACE,
BATTLE_TOWER_ITEM_SILVER_POWDER,
BATTLE_TOWER_ITEM_CHERI_BERRY,
BATTLE_TOWER_ITEM_BLACK_GLASSES,
BATTLE_TOWER_ITEM_BLACK_BELT,
BATTLE_TOWER_ITEM_SOUL_DEW,
BATTLE_TOWER_ITEM_CHOICE_BAND,
BATTLE_TOWER_ITEM_MAGNET,
BATTLE_TOWER_ITEM_SILK_SCARF,
BATTLE_TOWER_ITEM_WHITE_HERB,
BATTLE_TOWER_ITEM_DEEP_SEA_SCALE,
BATTLE_TOWER_ITEM_DEEP_SEA_TOOTH,
BATTLE_TOWER_ITEM_MYSTIC_WATER,
BATTLE_TOWER_ITEM_SHARP_BEAK,
BATTLE_TOWER_ITEM_QUICK_CLAW,
BATTLE_TOWER_ITEM_LEFTOVERS,
BATTLE_TOWER_ITEM_RAWST_BERRY,
BATTLE_TOWER_ITEM_LIGHT_BALL,
BATTLE_TOWER_ITEM_POISON_BARB,
BATTLE_TOWER_ITEM_NEVER_MELT_ICE,
BATTLE_TOWER_ITEM_ASPEAR_BERRY,
BATTLE_TOWER_ITEM_SPELL_TAG,
BATTLE_TOWER_ITEM_BRIGHT_POWDER,
BATTLE_TOWER_ITEM_LEPPA_BERRY,
BATTLE_TOWER_ITEM_SCOPE_LENS,
BATTLE_TOWER_ITEM_TWISTED_SPOON,
BATTLE_TOWER_ITEM_METAL_COAT,
BATTLE_TOWER_ITEM_MENTAL_HERB,
BATTLE_TOWER_ITEM_CHARCOAL,
BATTLE_TOWER_ITEM_PECHA_BERRY,
BATTLE_TOWER_ITEM_SOFT_SAND,
BATTLE_TOWER_ITEM_LUM_BERRY,
BATTLE_TOWER_ITEM_DRAGON_SCALE,
BATTLE_TOWER_ITEM_DRAGON_FANG,
BATTLE_TOWER_ITEM_IAPAPA_BERRY,
BATTLE_TOWER_ITEM_WIKI_BERRY,
BATTLE_TOWER_ITEM_SEA_INCENSE,
BATTLE_TOWER_ITEM_SHELL_BELL,
BATTLE_TOWER_ITEM_SALAC_BERRY,
BATTLE_TOWER_ITEM_LANSAT_BERRY,
BATTLE_TOWER_ITEM_APICOT_BERRY,
BATTLE_TOWER_ITEM_STARF_BERRY,
BATTLE_TOWER_ITEM_LIECHI_BERRY,
BATTLE_TOWER_ITEM_STICK,
BATTLE_TOWER_ITEM_LAX_INCENSE,
BATTLE_TOWER_ITEM_AGUAV_BERRY,
BATTLE_TOWER_ITEM_FIGY_BERRY,
BATTLE_TOWER_ITEM_THICK_CLUB,
BATTLE_TOWER_ITEM_MAGO_BERRY,
BATTLE_TOWER_ITEM_METAL_POWDER,
BATTLE_TOWER_ITEM_PETAYA_BERRY,
BATTLE_TOWER_ITEM_LUCKY_PUNCH,
BATTLE_TOWER_ITEM_GANLON_BERRY,
};
struct BattleTowerPokemon
{
/*0x00*/u16 species;
/*0x02*/u8 heldItem; // entry in sBattleTowerHeldItems
/*0x03*/u8 teamFlags;
/*0x04*/u16 moves[4];
/*0x0C*/u8 evSpread;
/*0x0D*/u8 nature;
};
u16 GetCurrentBattleTowerWinStreak(u8);
void sub_8134AC0(struct BattleTowerRecord *);
u16 sub_8135D3C(u8);
void sub_8135FF4(u8*);
void SetEReaderTrainerName(u8*);
u8 GetEReaderTrainerPicIndex(void);
u8 GetEReaderTrainerClassNameIndex(void);
void ValidateEReaderTrainer(void);
#endif // GUARD_BATTLE_TOWER_H

View File

@@ -1080,6 +1080,7 @@ u8 sub_80EB868(u8);
void sub_80EB890(u8);
u8 sub_80EB8C0(void);
u16 sub_80EB8EC(void);
u8 *sub_80EB544(u8 *dst, u16 *words, u16 arg2, u16 arg3);
#if GERMAN
u32 de_sub_80EB748(u32, u32);

View File

@@ -681,10 +681,12 @@ struct SaveBlock1 /* 0x02025734 */
/*0x2B0D*/ u8 outbreakPokemonProbability;
/*0x2B0E*/ u16 outbreakUnk5;
/*0x2B10*/ struct GabbyAndTyData gabbyAndTyData;
/*0x2B1C*/ u16 unk2B1C[6];
/*0x2B28*/ u16 unk2B28[6];
/*0x2B34*/ u16 unk2B34[6];
/*0x2B40*/ u16 unk2B40[6];
/*0x2B1C*/ struct {
/*0x2B1C*/ u16 unk2B1C[6];
/*0x2B28*/ u16 unk2B28[6];
/*0x2B34*/ u16 unk2B34[6];
/*0x2B40*/ u16 unk2B40[6];
} easyChats;
/*0x2B4C*/ struct MailStruct mail[16];
/*0x2D8C*/ u8 unk2D8C[4];
/*0x2D90*/ u8 filler_2D90[0x4];
@@ -727,26 +729,74 @@ struct Pokedex
/*0x44*/ u8 seen[DEX_FLAGS_NO];
};
struct SaveBlock2_Sub
struct BattleTowerTrainer
{
/*0x0000, 0x00A8*/ u8 filler_000[0x3D8];
/*0x03D8, 0x0480*/ u16 var_480;
/*0x03DA, 0x0482*/ u16 var_482;
/*0x03DC, 0x0484*/ u8 filler_3DC[0x14];
/*0x03F0, 0x0498*/ u8 ereaderTrainer[0xBC];
/*0x04AC, 0x0554*/ u8 var_4AC;
/*0x04AD, 0x0555*/ u8 var_4AD;
u8 trainerClass;
u8 name[8];
u8 teamFlags;
struct {
u16 easyChat[6];
} greeting;
};
struct BattleTowerRecord // record mixing
{
/*0x00*/u8 battleTowerLevelType; // 0 = level 50, 1 = level 100
/*0x01*/u8 trainerClass;
/*0x02*/u16 winStreak;
/*0x04*/u8 name[8];
/*0x0C*/u8 trainerId[4];
/*0x10*/struct {
u16 easyChat[6];
} greeting;
/*0x1C*/struct UnknownPokemonStruct party[3];
/*0xA0*/u32 checksum;
};
struct BattleTowerEReaderTrainer
{
/*0x00*/u8 unk0;
/*0x01*/u8 trainerClass;
/*0x02*/u16 winStreak;
/*0x04*/u8 name[8];
/*0x0C*/u8 trainerId[4];
/*0x10*/struct {
u16 easyChat[6];
} greeting;
/*0x1C*/struct {
u16 easyChat[6];
} farewellPlayerLost;
/*0x28*/struct {
u16 easyChat[6];
} farewellPlayerWon;
/*0x34*/struct UnknownPokemonStruct party[3];
/*0xB8*/u32 checksum;
};
struct BattleTowerData
{
/*0x0000, 0x00A8*/ struct BattleTowerRecord playerRecord;
/*0x00A4, 0x014C*/ struct BattleTowerRecord records[5]; // from record mixing
/*0x03D8, 0x0480*/ u16 firstMonSpecies; // species of the first pokemon in the player's battle tower party
/*0x03DA, 0x0482*/ u16 defeatedBySpecies; // species of the pokemon that defated the player
/*0x03DC, 0x0484*/ u8 defeatedByTrainerName[8];
/*0x03E4, 0x048C*/ u8 firstMonNickname[POKEMON_NAME_LENGTH]; // nickname of the first pokemon in the player's battle tower party
/*0x03F0, 0x0498*/ struct BattleTowerEReaderTrainer ereaderTrainer;
/*0x04AC, 0x0554*/ u8 battleTowerLevelType:1; // 0 = level 50; 1 = level 100
/*0x04AC, 0x0554*/ u8 unk_554:1;
/*0x04AD, 0x0555*/ u8 battleOutcome;
/*0x04AE, 0x0556*/ u8 var_4AE[2];
/*0x04B0, 0x0558*/ u16 var_4B0;
/*0x04B2, 0x055A*/ u16 var_4B2;
/*0x04B4, 0x055C*/ u16 var_4B4;
/*0x04B6, 0x055E*/ u16 var_4B6;
/*0x04B8, 0x0560*/ u16 recordWinStreak[2];
/*0x04BC, 0x0564*/ u8 filler_4BC[0xC];
/*0x04C8, 0x0570*/ u16 var_4C8;
/*0x04CA, 0x0572*/ u16 var_4CA;
/*0x04CC, 0x0574*/ u16 winStreak[2];
/*0x04D0, 0x0578*/ u8 var_4D0;
/*0x04B0, 0x0558*/ u16 curChallengeBattleNum[2]; // 1-based index of battle in the current challenge. (challenges consist of 7 battles)
/*0x04B4, 0x055C*/ u16 curStreakChallengesNum[2]; // 1-based index of the current challenge in the current streak.
/*0x04B8, 0x0560*/ u16 recordWinStreaks[2];
/*0x04BC, 0x0564*/ u8 battleTowerTrainerId; // index for gBattleTowerTrainers table
/*0x04BD, 0x0565*/ u8 selectedPartyMons[0x3]; // indices of the 3 selected player party mons.
/*0x04C0, 0x0568*/ u16 prizeItem;
/*0x04C2, 0x056A*/ u8 filler_4C2[0x6];
/*0x04C8, 0x0570*/ u16 totalBattleTowerWins;
/*0x04CA, 0x0572*/ u16 bestBattleTowerWinStreak;
/*0x04CC, 0x0574*/ u16 currentWinStreaks[2];
/*0x04D0, 0x0578*/ u8 lastStreakLevelType; // 0 = level 50, 1 = level 100. level type of the last streak. Used by tv to report the level mode.
/*0x04D1, 0x0579*/ u8 filler_4D1[0x317];
};
@@ -771,7 +821,7 @@ struct SaveBlock2 /* 0x02024EA4 */
/*0x90*/ u8 filler_90[0x8];
/*0x98*/ struct Time localTimeOffset;
/*0xA0*/ struct Time lastBerryTreeUpdate;
/*0xA8*/ struct SaveBlock2_Sub filler_A8;
/*0xA8*/ struct BattleTowerData battleTower;
};
struct MapPosition

View File

@@ -288,29 +288,29 @@ struct Pokemon
struct UnknownPokemonStruct
{
u16 species;
u16 heldItem;
u16 moves[4];
u8 level;
u8 ppBonuses;
u8 hpEV;
u8 attackEV;
u8 defenseEV;
u8 speedEV;
u8 spAttackEV;
u8 spDefenseEV;
u32 otId;
u32 hpIV:5;
u32 attackIV:5;
u32 defenseIV:5;
u32 speedIV:5;
u32 spAttackIV:5;
u32 spDefenseIV:5;
u32 gap:1;
u32 altAbility:1;
u32 personality;
u8 nickname[POKEMON_NAME_LENGTH + 1];
u8 friendship;
/*0x00*/u16 species;
/*0x02*/u16 heldItem;
/*0x04*/u16 moves[4];
/*0x0C*/u8 level;
/*0x0D*/u8 ppBonuses;
/*0x0E*/u8 hpEV;
/*0x0F*/u8 attackEV;
/*0x10*/u8 defenseEV;
/*0x11*/u8 speedEV;
/*0x12*/u8 spAttackEV;
/*0x13*/u8 spDefenseEV;
/*0x14*/u32 otId;
/*0x18*/u32 hpIV:5;
/*0x18*/u32 attackIV:5;
/*0x19*/u32 defenseIV:5;
/*0x19*/u32 speedIV:5;
/*0x1A*/u32 spAttackIV:5;
/*0x1A*/u32 spDefenseIV:5;
/*0x1B*/u32 gap:1;
/*0x1B*/u32 altAbility:1;
/*0x1C*/u32 personality;
/*0x20*/u8 nickname[POKEMON_NAME_LENGTH + 1];
/*0x2B*/u8 friendship;
};
struct BattlePokemon

View File

@@ -21,7 +21,7 @@ u16 *GetPlayerRecvBuffer(u8 player);
void sub_80B9A78(void);
void sub_80B9A88(u8 *a);
void sub_80B9B1C(u8 *a, size_t size, u8 index);
void sub_80B9B70(u8 *a, size_t size, u8 index);
void sub_80B9B70(void *a, u32 size, u8 index);
u8 sub_80B9BBC(u16 *a);
void sub_80B9BC4(u8 *, size_t, u8[][2], u8 d, u8 e);
u8 sub_80B9C4C(u8 *a);

View File

@@ -107,5 +107,6 @@ void sub_80BE3BC(void);
void UpdateTVShowsPerDay(u16);
void sub_80C045C();
void sub_80BF088(u8, s32);
void sub_80BFD20(void);
#endif // GUARD_TV_H

View File

@@ -231,7 +231,7 @@ SECTIONS {
src/field/fldeff_softboiled.o(.text);
src/field/decoration_inventory.o(.text);
src/field/roamer.o(.text);
asm/battle_tower.o(.text);
src/field/battle_tower.o(.text);
src/field/use_pokeblock.o(.text);
src/battle/battle_controller_wally.o(.text);
src/field/player_pc.o(.text);
@@ -443,7 +443,7 @@ SECTIONS {
src/pokemon/learn_move.o(.rodata);
src/field/decoration_inventory.o(.rodata);
src/field/roamer.o(.rodata);
data/battle_tower.o(.rodata);
src/field/battle_tower.o(.rodata);
src/field/use_pokeblock.o(.rodata);
src/battle/battle_controller_wally.o(.rodata);
src/field/player_pc.o(.rodata);

View File

@@ -4,6 +4,7 @@
#include "data2.h"
#include "battle_811DA74.h"
#include "battle_anim_813F0F4.h"
#include "battle_tower.h"
#include "link.h"
#include "m4a.h"
#include "main.h"
@@ -76,7 +77,6 @@ extern u8 sub_8046400();
extern void sub_8032A08();
extern void sub_8043DB0();
extern void sub_8033160(void);
extern u8 sub_8135FBC(void);
extern u8 get_trainer_class_pic_index(void);
extern void sub_80313A0(struct Sprite *);
extern void sub_8032B4C(void);
@@ -1222,7 +1222,7 @@ void OpponentHandleTrainerThrow(void)
else if (gBattleTypeFlags & BATTLE_TYPE_BATTLE_TOWER)
trainerPicIndex = get_trainer_class_pic_index();
else if (gBattleTypeFlags & BATTLE_TYPE_EREADER_TRAINER)
trainerPicIndex = sub_8135FBC();
trainerPicIndex = GetEReaderTrainerPicIndex();
else
trainerPicIndex = gTrainers[gTrainerBattleOpponent].trainerPic;
@@ -1252,7 +1252,7 @@ void OpponentHandleTrainerSlide(void)
else if (gBattleTypeFlags & BATTLE_TYPE_BATTLE_TOWER)
trainerPicIndex = get_trainer_class_pic_index();
else if (gBattleTypeFlags & BATTLE_TYPE_EREADER_TRAINER)
trainerPicIndex = sub_8135FBC();
trainerPicIndex = GetEReaderTrainerPicIndex();
else
trainerPicIndex = gTrainers[gTrainerBattleOpponent].trainerPic;

View File

@@ -1,6 +1,7 @@
#include "global.h"
#include "battle_message.h"
#include "battle.h"
#include "battle_message.h"
#include "battle_tower.h"
#include "item.h"
#include "items.h"
#include "pokemon.h"
@@ -127,7 +128,6 @@ u8 GetBankSide(u8 bank);
s32 sub_803FC34(u16);
void get_trainer_name(u8* dst);
u8 get_trainer_class_name_index(void);
u8 sub_8135FD8(void);
u8 GetMultiplayerId(void);
u8 GetBankByPlayerAI(u8 ID);
u8 GetBankSide(u8 bank);
@@ -632,7 +632,7 @@ u32 StrCpyDecodeBattle(const u8* src, u8* dst)
else if (gBattleTypeFlags & BATTLE_TYPE_BATTLE_TOWER)
toCpy = gTrainerClassNames[get_trainer_class_name_index()];
else if (gBattleTypeFlags & BATTLE_TYPE_EREADER_TRAINER)
toCpy = gTrainerClassNames[sub_8135FD8()];
toCpy = gTrainerClassNames[GetEReaderTrainerClassNameIndex()];
else
toCpy = gTrainerClassNames[gTrainers[gTrainerBattleOpponent].trainerClass];
break;
@@ -661,7 +661,7 @@ u32 StrCpyDecodeBattle(const u8* src, u8* dst)
}
else if (gBattleTypeFlags & BATTLE_TYPE_EREADER_TRAINER)
{
sub_8135FF4(text);
SetEReaderTrainerName(text);
toCpy = text;
}
else

View File

@@ -260,9 +260,9 @@ void ShowLinkBattleRecords(void) {
static bool32 sub_8110494(u8 level)
{
struct SaveBlock2_Sub *sb2sub = &gSaveBlock2.filler_A8;
struct BattleTowerData *battleTower = &gSaveBlock2.battleTower;
switch (sb2sub->var_4AE[level])
switch (battleTower->var_4AE[level])
{
case 0:
return FALSE;
@@ -294,17 +294,18 @@ static void PrintWinStreak(const u8 *str, u16 streak, u8 left, u8 top)
static void PrintRecordWinStreak(u8 level, u8 left, u8 top)
{
struct SaveBlock2_Sub *sb2sub = &gSaveBlock2.filler_A8;
u16 winStreak = sb2sub->recordWinStreak[level];
struct BattleTowerData *battleTower = &gSaveBlock2.battleTower;
u16 winStreak = battleTower->recordWinStreaks[level];
PrintWinStreak(gOtherText_Record, winStreak, left, top);
}
static u16 GetLastWinStreak(u8 level)
{
u16 result = gSaveBlock2.filler_A8.winStreak[level];
if (result > 9999)
result = 9999;
return result;
u16 winStreak = gSaveBlock2.battleTower.currentWinStreaks[level];
if (winStreak > 9999)
winStreak = 9999;
return winStreak;
}
static void PrintLastWinStreak(u8 level, u8 left, u8 top)

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,5 +1,6 @@
#include "global.h"
#include "battle.h"
#include "battle_tower.h"
#if GERMAN
@@ -59,7 +60,6 @@ u8 *de_sub_804100C(u8 gender) {
u8 de_sub_81364AC(void);
u8 get_trainer_class_name_index(void);
u8 de_sub_81364F8(void);
u8 sub_8135FD8(void);
u8 *de_sub_8041024(s32 arg0, u32 arg1) {
u8 nameIndex, trainerClass, gender;
@@ -94,7 +94,7 @@ u8 *de_sub_8041024(s32 arg0, u32 arg1) {
case 0x800:
trainerClass = de_sub_81364F8();
nameIndex = sub_8135FD8();
nameIndex = GetEReaderTrainerClassNameIndex();
if (trainerClass == TRAINER_CLASS_SCHOOL_KID_F)
{
return de_sub_8040FE0(FEMALE);
@@ -196,7 +196,7 @@ _08041086:\n\
bl de_sub_81364F8\n\
lsls r0, 24\n\
lsrs r4, r0, 24\n\
bl sub_8135FD8\n\
bl GetEReaderTrainerClassNameIndex\n\
b _08041070\n\
_08041094:\n\
movs r0, 0x1\n\

View File

@@ -1,4 +1,5 @@
#include "global.h"
#include "battle_tower.h"
#include "menu.h"
extern u8 gBattleCommunication[];
@@ -41,12 +42,12 @@ static u8 sub_814A464(void)
u8 sub_814A4B8(void)
{
gSaveBlock2.filler_A8.var_4AE[0] = 3;
gSaveBlock2.filler_A8.var_4AE[1] = 3;
gSaveBlock2.filler_A8.var_4B4 = gBattleCommunication[0] + 1;
gSaveBlock2.filler_A8.var_4B6 = gBattleCommunication[0] + 1;
gSaveBlock2.filler_A8.var_4B0 = 1;
gSaveBlock2.filler_A8.var_4B2 = 1;
gSaveBlock2.battleTower.var_4AE[0] = 3;
gSaveBlock2.battleTower.var_4AE[1] = 3;
gSaveBlock2.battleTower.curStreakChallengesNum[0] = gBattleCommunication[0] + 1;
gSaveBlock2.battleTower.curStreakChallengesNum[1] = gBattleCommunication[0] + 1;
gSaveBlock2.battleTower.curChallengeBattleNum[0] = 1;
gSaveBlock2.battleTower.curChallengeBattleNum[1] = 1;
CloseMenu();
return 1;
}

View File

@@ -1,5 +1,6 @@
#include "global.h"
#include "berry.h"
#include "battle_tower.h"
#include "easy_chat.h"
#include "event_data.h"
#include "mail_data.h"
@@ -27,7 +28,6 @@
#endif
extern void party_compaction(void);
extern void sub_813601C(void);
extern ScrCmdFunc gMysteryEventScriptCmdTable[];
extern ScrCmdFunc gMysteryEventScriptCmdTableEnd[];
@@ -420,8 +420,8 @@ bool8 MEScrCmd_givepokemon(struct ScriptContext *ctx)
bool8 MEScrCmd_addtrainer(struct ScriptContext *ctx)
{
u32 data = ScriptReadWord(ctx) - ctx->data[1] + ctx->data[0];
memcpy(gSaveBlock2.filler_A8.ereaderTrainer, (void *)data, sizeof(gSaveBlock2.filler_A8.ereaderTrainer));
sub_813601C();
memcpy(&gSaveBlock2.battleTower.ereaderTrainer, (void *)data, sizeof(gSaveBlock2.battleTower.ereaderTrainer));
ValidateEReaderTrainer();
StringExpandPlaceholders(gStringVar4, gOtherText_NewTrainerInHoenn);
ctx->data[2] = 2;
return FALSE;

View File

@@ -43,7 +43,7 @@ void *gUnknown_083D0274 = &gSaveBlock1.unknown_2ABC;
void *gUnknown_083D0278 = &gSaveBlock1.mauvilleMan;
void *recordMixingEasyChatPairs = &gSaveBlock1.easyChatPairs;
struct RecordMixingDayCareMail *gUnknown_083D0280 = &gUnknown_02038738;
void *gUnknown_083D0284 = &gSaveBlock2.filler_A8;
void *gBattleTowerPlayerRecord = &gSaveBlock2.battleTower.playerRecord;
#define BUFFER_CHUNK_SIZE 200
@@ -60,7 +60,7 @@ struct PlayerRecords
u8 filler1044[0x40];
struct EasyChatPair easyChatPairs[5];
struct RecordMixingDayCareMail filler10AC;
u8 filler1124[0xA4];
struct BattleTowerRecord battleTowerRecord;
u16 filler11C8[0x34];
};
@@ -78,7 +78,7 @@ void RecordMixing_PrepareExchangePacket(void)
gUnknown_02038738.mail[1] = gSaveBlock1.daycareData.misc.mail[1];
sub_8041324(gSaveBlock1.daycareData.mons, &gUnknown_02038738);
memcpy(&unk_2018000.filler10AC, gUnknown_083D0280, sizeof(struct RecordMixingDayCareMail));
memcpy(unk_2018000.filler1124, gUnknown_083D0284, sizeof(unk_2018000.filler1124));
memcpy(&unk_2018000.battleTowerRecord, gBattleTowerPlayerRecord, sizeof(struct BattleTowerRecord));
if (GetMultiplayerId() == 0)
unk_2018000.filler11C8[0] = GetRecordMixingGift();
@@ -92,7 +92,7 @@ void RecordMixing_ReceiveExchangePacket(u32 a)
sub_80B9B1C(unk_2008000.filler1044, sizeof(struct PlayerRecords), a);
sub_80FA4E4(unk_2008000.easyChatPairs, sizeof(struct PlayerRecords), a);
sub_80B9C6C((u8 *)&unk_2008000.filler10AC, sizeof(struct PlayerRecords), a, unk_2008000.tvShows);
sub_80B9B70(unk_2008000.filler1124, sizeof(struct PlayerRecords), a);
sub_80B9B70(&unk_2008000.battleTowerRecord, sizeof(struct PlayerRecords), a);
sub_80B9F3C(unk_2008000.filler11C8, a);
}
@@ -447,11 +447,11 @@ void sub_80B9B1C(u8 *a, size_t size, u8 index)
sub_80F7F30();
}
void sub_80B9B70(u8 *a, size_t size, u8 index)
void sub_80B9B70(void *battleTowerRecord, u32 size, u8 index)
{
sub_80B9A88(gUnknown_0300071C);
memcpy(a + size * index, a + size * gUnknown_0300071C[index], 0xA4);
sub_8134AC0(a + size * index);
memcpy(battleTowerRecord + size * index, battleTowerRecord + size * gUnknown_0300071C[index], sizeof(struct BattleTowerRecord));
sub_8134AC0(battleTowerRecord + size * index);
}
u8 sub_80B9BBC(u16 *a)

View File

@@ -311,16 +311,16 @@ static void nullsub_60(u8 taskid)
{
}
void sub_8093390(struct TrainerCard *arg1)
void sub_8093390(struct TrainerCard *trainerCard)
{
u32 playTime;
bool32 enteredHallOfFame;
bool8 r4;
u8 i;
arg1->gender = gSaveBlock2.playerGender;
arg1->playTimeHours = gSaveBlock2.playTimeHours;
arg1->playTimeMinutes = gSaveBlock2.playTimeMinutes;
trainerCard->gender = gSaveBlock2.playerGender;
trainerCard->playTimeHours = gSaveBlock2.playTimeHours;
trainerCard->playTimeMinutes = gSaveBlock2.playTimeMinutes;
playTime = GetGameStat(GAME_STAT_FIRST_HOF_PLAY_TIME);
enteredHallOfFame = GetGameStat(GAME_STAT_ENTERED_HOF);
@@ -328,39 +328,39 @@ void sub_8093390(struct TrainerCard *arg1)
{
playTime = 0;
}
arg1->firstHallOfFameA = playTime >> 16;
arg1->firstHallOfFameB = (playTime >> 8) & 0xFF;
arg1->firstHallOfFameC = playTime & 0xFF;
trainerCard->firstHallOfFameA = playTime >> 16;
trainerCard->firstHallOfFameB = (playTime >> 8) & 0xFF;
trainerCard->firstHallOfFameC = playTime & 0xFF;
arg1->hasPokedex = FlagGet(SYS_POKEDEX_GET);
arg1->var_3 = sub_8090FC0();
arg1->pokedexSeen = GetPokedexSeenCount();
trainerCard->hasPokedex = FlagGet(SYS_POKEDEX_GET);
trainerCard->var_3 = sub_8090FC0();
trainerCard->pokedexSeen = GetPokedexSeenCount();
arg1->trainerId = (gSaveBlock2.playerTrainerId[1] << 8) | gSaveBlock2.playerTrainerId[0];
trainerCard->trainerId = (gSaveBlock2.playerTrainerId[1] << 8) | gSaveBlock2.playerTrainerId[0];
// Link Cable Battles
arg1->linkBattleWins = sav12_xor_get_clamped_above(GAME_STAT_LINK_BATTLE_WINS, 9999);
arg1->linkBattleLosses = sav12_xor_get_clamped_above(GAME_STAT_LINK_BATTLE_LOSSES, 9999);
trainerCard->linkBattleWins = sav12_xor_get_clamped_above(GAME_STAT_LINK_BATTLE_WINS, 9999);
trainerCard->linkBattleLosses = sav12_xor_get_clamped_above(GAME_STAT_LINK_BATTLE_LOSSES, 9999);
// Contests w/ Friends
arg1->contestsWithFriends = sav12_xor_get_clamped_above(GAME_STAT_WON_LINK_CONTEST, 999);
trainerCard->contestsWithFriends = sav12_xor_get_clamped_above(GAME_STAT_WON_LINK_CONTEST, 999);
// Pokéblocks w/ Friends
arg1->pokeblocksWithFriends = sav12_xor_get_clamped_above(GAME_STAT_POKEBLOCKS_WITH_FRIENDS, 0xFFFF);
trainerCard->pokeblocksWithFriends = sav12_xor_get_clamped_above(GAME_STAT_POKEBLOCKS_WITH_FRIENDS, 0xFFFF);
// Pokémon Trades
arg1->pokemonTrades = sav12_xor_get_clamped_above(GAME_STAT_POKEMON_TRADES, 0xFFFF);
trainerCard->pokemonTrades = sav12_xor_get_clamped_above(GAME_STAT_POKEMON_TRADES, 0xFFFF);
// Battle tower?
arg1->battleTowerWins = gSaveBlock2.filler_A8.var_4C8;
arg1->battleTowerLosses = gSaveBlock2.filler_A8.var_4CA;
if (arg1->battleTowerWins > 9999)
// Battle Tower
trainerCard->battleTowerWins = gSaveBlock2.battleTower.totalBattleTowerWins;
trainerCard->battleTowerLosses = gSaveBlock2.battleTower.bestBattleTowerWinStreak;
if (trainerCard->battleTowerWins > 9999)
{
arg1->battleTowerWins = 9999;
trainerCard->battleTowerWins = 9999;
}
if (arg1->battleTowerLosses > 9999)
if (trainerCard->battleTowerLosses > 9999)
{
arg1->battleTowerLosses = 9999;
trainerCard->battleTowerLosses = 9999;
}
r4 = FALSE;
@@ -368,21 +368,21 @@ void sub_8093390(struct TrainerCard *arg1)
{
r4 = TRUE;
}
arg1->var_4 = r4;
trainerCard->var_4 = r4;
arg1->money = gSaveBlock1.money;
trainerCard->money = gSaveBlock1.money;
for (i = 0; i < 4; i++)
{
arg1->var_28[i] = gSaveBlock1.unk2B1C[i];
trainerCard->var_28[i] = gSaveBlock1.easyChats.unk2B1C[i];
}
for (i = 0; i < 8; i++)
{
arg1->playerName[i] = gSaveBlock2.playerName[i];
trainerCard->playerName[i] = gSaveBlock2.playerName[i];
}
arg1->stars = sub_80934F4(arg1);
trainerCard->stars = sub_80934F4(trainerCard);
}
u8 sub_80934C4(u8 id)

2375
src/field/battle_tower.c Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -24,7 +24,7 @@ extern u8 gUnknown_020384F0;
extern struct UnknownPokemonStruct2 gUnknown_02023A00[];
extern u8 gUnknown_0202E8F6;
extern struct Pokemon gUnknown_030042FC[];
extern const u16 gBattleTowerBanlist[];
extern const u16 gBattleTowerBannedSpecies[];
EWRAM_DATA u8 gSelectedOrderFromParty[3] = {0};
@@ -176,15 +176,15 @@ static bool8 IsMonAllowedInBattleTower(struct Pokemon *pkmn)
return TRUE;
}
if ((gSaveBlock2.filler_A8.var_4AC & 1) == 0
if ((gSaveBlock2.battleTower.battleTowerLevelType) == 0
&& GetMonData(pkmn, MON_DATA_LEVEL) > 50)
return FALSE;
// Check if the pkmn is in the ban list
species = GetMonData(pkmn, MON_DATA_SPECIES);
while (gBattleTowerBanlist[i] != 0xFFFF)
while (gBattleTowerBannedSpecies[i] != 0xFFFF)
{
if (gBattleTowerBanlist[i] == species)
if (gBattleTowerBannedSpecies[i] == species)
return FALSE;
i++;
}

View File

@@ -278,13 +278,13 @@ void sub_80EB7C4(void)
switch (gSpecialVar_0x8004)
{
case 0:
words = gSaveBlock1.unk2B1C;
words = gSaveBlock1.easyChats.unk2B1C;
arg1 = 2;
arg2 = 2;
break;
case 1:
words = gSaveBlock1.unk2B28;
if (sub_80EB680(gSaveBlock1.unk2B28, 3, 2, 20))
words = gSaveBlock1.easyChats.unk2B28;
if (sub_80EB680(gSaveBlock1.easyChats.unk2B28, 3, 2, 20))
{
arg1 = 2;
arg2 = 3;
@@ -296,12 +296,12 @@ void sub_80EB7C4(void)
}
break;
case 2:
words = gSaveBlock1.unk2B34;
words = gSaveBlock1.easyChats.unk2B34;
arg1 = 3;
arg2 = 2;
break;
case 3:
words = gSaveBlock1.unk2B40;
words = gSaveBlock1.easyChats.unk2B40;
arg1 = 3;
arg2 = 2;
break;

View File

@@ -1789,7 +1789,7 @@ u16 sub_810F404(void)
void sub_810F414(void)
{
sub_8135FF4(gStringVar1);
SetEReaderTrainerName(gStringVar1);
}
const u8 gUnknown_083F83E0[] = {12, 2, 4, 5, 1, 8, 7, 11, 3, 10, 9, 6};

View File

@@ -123,7 +123,6 @@ void ClearTVShowData(void)
bool8 sub_80BF1B4(u8);
void sub_80BF20C(void);
extern u16 sub_8135D3C(u8);
extern u8 gScriptContestCategory;
extern u8 gScriptContestRank;
extern u8 gUnknown_03004316[11];
@@ -674,12 +673,12 @@ void sub_80BE320(void)
bravoTrainerTower->var00 = TVSHOW_BRAVO_TRAINER_BATTLE_TOWER_PROFILE;
bravoTrainerTower->var01 = 1;
StringCopy(bravoTrainerTower->trainerName, gSaveBlock2.playerName);
StringCopy(bravoTrainerTower->pokemonName, gSaveBlock2.filler_A8.filler_3DC);
bravoTrainerTower->species = gSaveBlock2.filler_A8.var_480;
bravoTrainerTower->defeatedSpecies = gSaveBlock2.filler_A8.var_482;
bravoTrainerTower->var16 = sub_8135D3C(gSaveBlock2.filler_A8.var_4D0);
bravoTrainerTower->var1c = gSaveBlock2.filler_A8.var_4AD;
if (gSaveBlock2.filler_A8.var_4D0 == 0)
StringCopy(bravoTrainerTower->pokemonName, gSaveBlock2.battleTower.defeatedByTrainerName);
bravoTrainerTower->species = gSaveBlock2.battleTower.firstMonSpecies;
bravoTrainerTower->defeatedSpecies = gSaveBlock2.battleTower.defeatedBySpecies;
bravoTrainerTower->var16 = GetCurrentBattleTowerWinStreak(gSaveBlock2.battleTower.lastStreakLevelType);
bravoTrainerTower->var1c = gSaveBlock2.battleTower.battleOutcome;
if (gSaveBlock2.battleTower.lastStreakLevelType == 0)
bravoTrainerTower->btLevel = 50;
else
bravoTrainerTower->btLevel = 100;

View File

@@ -92,9 +92,9 @@ void sub_8052DA8(void)
gSaveBlock1.sbStruct.unkSB1.sb1_2EFC_struct[i] = gUnknown_08216604;
}
void sub_8052DE4(void)
void ZeroBattleTowerData(void)
{
CpuFill32(0, &gSaveBlock2.filler_A8, sizeof(gSaveBlock2.filler_A8));
CpuFill32(0, &gSaveBlock2.battleTower, sizeof(gSaveBlock2.battleTower));
}
void WarpToTruck(void)
@@ -127,7 +127,7 @@ void NewGameInitData(void)
ZeroPlayerPartyMons();
ZeroEnemyPartyMons();
ResetPokedex();
sub_8052DE4();
ZeroBattleTowerData();
memset(&gSaveBlock1, 0, sizeof(gSaveBlock1));
ClearMailData();
gSaveBlock2.specialSaveWarp = 0;