mirror of
https://github.com/pret/pokeruby.git
synced 2026-09-09 03:26:38 -05:00
Merge pull request #453 from huderlem/battle_tower
Decompile battle_tower
This commit is contained in:
3663
asm/battle_tower.s
3663
asm/battle_tower.s
File diff suppressed because it is too large
Load Diff
@@ -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
|
||||
@@ -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
@@ -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
|
||||
@@ -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
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
3903
src/data/battle_tower/level_100_mons.h
Normal file
3903
src/data/battle_tower/level_100_mons.h
Normal file
File diff suppressed because it is too large
Load Diff
3903
src/data/battle_tower/level_50_mons.h
Normal file
3903
src/data/battle_tower/level_50_mons.h
Normal file
File diff suppressed because it is too large
Load Diff
1503
src/data/battle_tower/trainers.h
Normal file
1503
src/data/battle_tower/trainers.h
Normal file
File diff suppressed because it is too large
Load Diff
1503
src/data/battle_tower/trainers_de.h
Normal file
1503
src/data/battle_tower/trainers_de.h
Normal file
File diff suppressed because it is too large
Load Diff
@@ -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\
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
2375
src/field/battle_tower.c
Normal file
File diff suppressed because it is too large
Load Diff
@@ -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++;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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};
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user