summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGriffinR <griffin.richards@comcast.net>2019-11-13 16:10:05 -0500
committerhuderlem <huderlem@gmail.com>2019-11-16 13:02:35 -0600
commit5e01871f8b00d6b0ef4921a35e0b2bf18c7b4183 (patch)
tree1f13aaa2e3ca31bf6be17aef7bc2c3085d6fdb9f
parent2c3726a328e8a1a9dde36796c431d1cd3608bfef (diff)
Document Trainer Hill
-rw-r--r--asm/macros/event.inc2
-rw-r--r--data/maps/BattleFrontier_BattlePyramidEmptySquare/scripts.inc1
-rw-r--r--data/maps/TrainerHill_1F/scripts.inc6
-rw-r--r--data/maps/TrainerHill_2F/scripts.inc6
-rw-r--r--data/maps/TrainerHill_3F/scripts.inc4
-rw-r--r--data/maps/TrainerHill_4F/scripts.inc4
-rw-r--r--data/maps/TrainerHill_Elevator/map.json2
-rw-r--r--data/maps/TrainerHill_Elevator/scripts.inc50
-rw-r--r--data/maps/TrainerHill_Entrance/map.json14
-rw-r--r--data/maps/TrainerHill_Entrance/scripts.inc293
-rw-r--r--data/maps/TrainerHill_Roof/map.json2
-rw-r--r--data/maps/TrainerHill_Roof/scripts.inc78
-rw-r--r--data/scripts/field_poison.inc2
-rw-r--r--data/scripts/trainer_hill.inc53
-rw-r--r--include/constants/battle_setup.h2
-rw-r--r--include/constants/trainer_hill.h48
-rw-r--r--include/event_scripts.h2
-rw-r--r--include/global.h22
-rw-r--r--include/trainer_hill.h19
-rw-r--r--src/battle_message.c9
-rw-r--r--src/battle_setup.c25
-rw-r--r--src/data/battle_frontier/trainer_hill.h119
-rwxr-xr-xsrc/ereader_helpers.c6
-rw-r--r--src/field_control_avatar.c13
-rw-r--r--src/fieldmap.c2
-rw-r--r--src/overworld.c7
-rw-r--r--src/trainer_hill.c467
27 files changed, 645 insertions, 613 deletions
diff --git a/asm/macros/event.inc b/asm/macros/event.inc
index af4ada031..ba617f629 100644
--- a/asm/macros/event.inc
+++ b/asm/macros/event.inc
@@ -677,7 +677,7 @@
.elseif \type == TRAINER_BATTLE_SET_TRAINER_B
.4byte \pointer1 @ text
.4byte \pointer2 @ text
- .elseif \type == TRAINER_BATTLE_12
+ .elseif \type == TRAINER_BATTLE_HILL
.4byte \pointer1 @ text
.4byte \pointer2 @ text
.endif
diff --git a/data/maps/BattleFrontier_BattlePyramidEmptySquare/scripts.inc b/data/maps/BattleFrontier_BattlePyramidEmptySquare/scripts.inc
index 98d7a22b0..1bcf1814a 100644
--- a/data/maps/BattleFrontier_BattlePyramidEmptySquare/scripts.inc
+++ b/data/maps/BattleFrontier_BattlePyramidEmptySquare/scripts.inc
@@ -152,6 +152,7 @@ BattleFrontier_BattlePyramidEmptySquare_EventScript_252C45:: @ 8252C45
waitstate
end
+@ TRAINER_PHILLIP is used as a placeholder
BattlePyramid_TrainerBattle:: @ 8252C4F
trainerbattle TRAINER_BATTLE_PYRAMID, TRAINER_PHILLIP, 0, BattleFacility_TrainerBattle_PlaceholderText, BattleFacility_TrainerBattle_PlaceholderText
setvar VAR_0x8004, BATTLE_PYRAMID_FUNC_SHOW_HINT_TEXT
diff --git a/data/maps/TrainerHill_1F/scripts.inc b/data/maps/TrainerHill_1F/scripts.inc
index e726f8566..59f90b8bd 100644
--- a/data/maps/TrainerHill_1F/scripts.inc
+++ b/data/maps/TrainerHill_1F/scripts.inc
@@ -1,6 +1,6 @@
TrainerHill_1F_MapScripts:: @ 8268F71
- map_script MAP_SCRIPT_ON_RESUME, TrainerHill_1F_MapScript1_2C8336
- map_script MAP_SCRIPT_ON_WARP_INTO_MAP_TABLE, TrainerHill_1F_MapScript2_2C8372
- map_script MAP_SCRIPT_ON_FRAME_TABLE, TrainerHill_1F_MapScript2_2C8381
+ map_script MAP_SCRIPT_ON_RESUME, TrainerHill_OnResume
+ map_script MAP_SCRIPT_ON_WARP_INTO_MAP_TABLE, TrainerHill_OnWarp
+ map_script MAP_SCRIPT_ON_FRAME_TABLE, TrainerHill_OnFrame
.byte 0
diff --git a/data/maps/TrainerHill_2F/scripts.inc b/data/maps/TrainerHill_2F/scripts.inc
index dd1f356de..0e8775cd5 100644
--- a/data/maps/TrainerHill_2F/scripts.inc
+++ b/data/maps/TrainerHill_2F/scripts.inc
@@ -1,6 +1,6 @@
TrainerHill_2F_MapScripts:: @ 8268F81
- map_script MAP_SCRIPT_ON_RESUME, TrainerHill_2F_MapScript1_2C8336
- map_script MAP_SCRIPT_ON_WARP_INTO_MAP_TABLE, TrainerHill_2F_MapScript2_2C8372
- map_script MAP_SCRIPT_ON_FRAME_TABLE, TrainerHill_2F_MapScript2_2C8381
+ map_script MAP_SCRIPT_ON_RESUME, TrainerHill_OnResume
+ map_script MAP_SCRIPT_ON_WARP_INTO_MAP_TABLE, TrainerHill_OnWarp
+ map_script MAP_SCRIPT_ON_FRAME_TABLE, TrainerHill_OnFrame
.byte 0
diff --git a/data/maps/TrainerHill_3F/scripts.inc b/data/maps/TrainerHill_3F/scripts.inc
index b4793f457..eee6bd99d 100644
--- a/data/maps/TrainerHill_3F/scripts.inc
+++ b/data/maps/TrainerHill_3F/scripts.inc
@@ -1,5 +1,5 @@
TrainerHill_3F_MapScripts:: @ 8268F91
- map_script MAP_SCRIPT_ON_RESUME, TrainerHill_3F_MapScript1_2C8336
- map_script MAP_SCRIPT_ON_FRAME_TABLE, TrainerHill_3F_MapScript2_2C8381
+ map_script MAP_SCRIPT_ON_RESUME, TrainerHill_OnResume
+ map_script MAP_SCRIPT_ON_FRAME_TABLE, TrainerHill_OnFrame
.byte 0
diff --git a/data/maps/TrainerHill_4F/scripts.inc b/data/maps/TrainerHill_4F/scripts.inc
index 66b8ed3bb..74ce0bf08 100644
--- a/data/maps/TrainerHill_4F/scripts.inc
+++ b/data/maps/TrainerHill_4F/scripts.inc
@@ -1,5 +1,5 @@
TrainerHill_4F_MapScripts:: @ 8268F9C
- map_script MAP_SCRIPT_ON_RESUME, TrainerHill_4F_MapScript1_2C8336
- map_script MAP_SCRIPT_ON_FRAME_TABLE, TrainerHill_4F_MapScript2_2C8381
+ map_script MAP_SCRIPT_ON_RESUME, TrainerHill_OnResume
+ map_script MAP_SCRIPT_ON_FRAME_TABLE, TrainerHill_OnFrame
.byte 0
diff --git a/data/maps/TrainerHill_Elevator/map.json b/data/maps/TrainerHill_Elevator/map.json
index 03354b0da..07cdaa80d 100644
--- a/data/maps/TrainerHill_Elevator/map.json
+++ b/data/maps/TrainerHill_Elevator/map.json
@@ -24,7 +24,7 @@
"movement_range_y": 1,
"trainer_type": "0",
"trainer_sight_or_berry_tree_id": "0",
- "script": "TrainerHill_Elevator_EventScript_26935F",
+ "script": "TrainerHill_Elevator_EventScript_Attendant",
"flag": "0"
}
],
diff --git a/data/maps/TrainerHill_Elevator/scripts.inc b/data/maps/TrainerHill_Elevator/scripts.inc
index 39fa51db4..498f7a3c0 100644
--- a/data/maps/TrainerHill_Elevator/scripts.inc
+++ b/data/maps/TrainerHill_Elevator/scripts.inc
@@ -1,89 +1,89 @@
TrainerHill_Elevator_MapScripts:: @ 826934F
- map_script MAP_SCRIPT_ON_FRAME_TABLE, TrainerHill_Elevator_MapScript2_269355
+ map_script MAP_SCRIPT_ON_FRAME_TABLE, TrainerHill_Elevator_OnFrame
.byte 0
-TrainerHill_Elevator_MapScript2_269355: @ 8269355
- map_script_2 VAR_TEMP_4, 0, TrainerHill_Elevator_EventScript_269375
+TrainerHill_Elevator_OnFrame: @ 8269355
+ map_script_2 VAR_TEMP_4, 0, TrainerHill_Elevator_EventScript_EnterElevator
.2byte 0
-TrainerHill_Elevator_EventScript_26935F:: @ 826935F
+TrainerHill_Elevator_EventScript_Attendant:: @ 826935F
end
-TrainerHill_Elevator_EventScript_269360:: @ 8269360
- applymovement EVENT_OBJ_ID_PLAYER, TrainerHill_Elevator_Movement_2693EB
+TrainerHill_Elevator_EventScript_ExitToRoof:: @ 8269360
+ applymovement EVENT_OBJ_ID_PLAYER, TrainerHill_Elevator_Movement_PlayerExitElevatorToRoof
waitmovement 0
releaseall
warp MAP_TRAINER_HILL_ROOF, 255, 15, 5
waitstate
end
-TrainerHill_Elevator_EventScript_269375:: @ 8269375
- applymovement EVENT_OBJ_ID_PLAYER, TrainerHill_Elevator_Movement_2693E4
+TrainerHill_Elevator_EventScript_EnterElevator:: @ 8269375
+ applymovement EVENT_OBJ_ID_PLAYER, TrainerHill_Elevator_Movement_PlayerApproachAttendant
waitmovement 0
- applymovement 1, TrainerHill_Elevator_Movement_2693EE
+ applymovement 1, TrainerHill_Elevator_Movement_AttendantFacePlayer
waitmovement 0
lockall
- msgbox TrainerHill_Elevator_Text_268F3E, MSGBOX_YESNO
+ msgbox TrainerHill_Elevator_Text_ReturnToReception, MSGBOX_YESNO
compare VAR_RESULT, NO
- goto_if_eq TrainerHill_Elevator_EventScript_269360
+ goto_if_eq TrainerHill_Elevator_EventScript_ExitToRoof
releaseall
- applymovement 1, TrainerHill_Elevator_Movement_2693F0
+ applymovement 1, TrainerHill_Elevator_Movement_AttendantFaceDown
waitmovement 0
- applymovement EVENT_OBJ_ID_PLAYER, TrainerHill_Elevator_Movement_2693DF
+ applymovement EVENT_OBJ_ID_PLAYER, TrainerHill_Elevator_Movement_PlayerMoveToCenterOfElevator
waitmovement 0
- call TrainerHill_Elevator_EventScript_2693D9
+ call TrainerHill_Elevator_EventScript_MoveElevator
delay 25
- applymovement EVENT_OBJ_ID_PLAYER, TrainerHill_Elevator_Movement_2693E7
+ applymovement EVENT_OBJ_ID_PLAYER, TrainerHill_Elevator_Movement_PlayerExitElevator
waitmovement 0
warp MAP_TRAINER_HILL_ENTRANCE, 255, 17, 8
waitstate
end
@ Unused
-TrainerHill_Elevator_EventScript_2693CE:: @ 82693CE
- goto TrainerHill_Elevator_EventScript_2693D4
+TrainerHill_Elevator_EventScript_ExitFloorSelect:: @ 82693CE
+ goto TrainerHill_Elevator_EventScript_CloseFloorSelect
end
@ Functionally unused
-TrainerHill_Elevator_EventScript_2693D4:: @ 82693D4
+TrainerHill_Elevator_EventScript_CloseFloorSelect:: @ 82693D4
special CloseDeptStoreElevatorWindow
releaseall
end
-TrainerHill_Elevator_EventScript_2693D9:: @ 82693D9
+TrainerHill_Elevator_EventScript_MoveElevator:: @ 82693D9
waitse
special MoveElevator
waitstate
return
-TrainerHill_Elevator_Movement_2693DF: @ 82693DF
+TrainerHill_Elevator_Movement_PlayerMoveToCenterOfElevator: @ 82693DF
walk_up
walk_up
walk_right
face_down
step_end
-TrainerHill_Elevator_Movement_2693E4: @ 82693E4
+TrainerHill_Elevator_Movement_PlayerApproachAttendant: @ 82693E4
delay_16
walk_left
step_end
-TrainerHill_Elevator_Movement_2693E7: @ 82693E7
+TrainerHill_Elevator_Movement_PlayerExitElevator: @ 82693E7
delay_16
walk_down
walk_down
step_end
-TrainerHill_Elevator_Movement_2693EB: @ 82693EB
+TrainerHill_Elevator_Movement_PlayerExitElevatorToRoof: @ 82693EB
face_down
delay_16
step_end
-TrainerHill_Elevator_Movement_2693EE: @ 82693EE
+TrainerHill_Elevator_Movement_AttendantFacePlayer: @ 82693EE
face_right
step_end
-TrainerHill_Elevator_Movement_2693F0: @ 82693F0
+TrainerHill_Elevator_Movement_AttendantFaceDown: @ 82693F0
face_down
step_end
diff --git a/data/maps/TrainerHill_Entrance/map.json b/data/maps/TrainerHill_Entrance/map.json
index 42f1daa9d..f581988b6 100644
--- a/data/maps/TrainerHill_Entrance/map.json
+++ b/data/maps/TrainerHill_Entrance/map.json
@@ -24,7 +24,7 @@
"movement_range_y": 1,
"trainer_type": "0",
"trainer_sight_or_berry_tree_id": "0",
- "script": "TrainerHill_Entrance_EventScript_2681FD",
+ "script": "TrainerHill_Entrance_EventScript_Attendant",
"flag": "0"
},
{
@@ -37,7 +37,7 @@
"movement_range_y": 1,
"trainer_type": "0",
"trainer_sight_or_berry_tree_id": "0",
- "script": "TrainerHill_Entrance_EventScript_2681EF",
+ "script": "TrainerHill_Entrance_EventScript_Nurse",
"flag": "0"
},
{
@@ -50,7 +50,7 @@
"movement_range_y": 1,
"trainer_type": "0",
"trainer_sight_or_berry_tree_id": "0",
- "script": "TrainerHill_Entrance_EventScript_2683C7",
+ "script": "TrainerHill_Entrance_EventScript_Clerk",
"flag": "0"
},
{
@@ -63,7 +63,7 @@
"movement_range_y": 1,
"trainer_type": "0",
"trainer_sight_or_berry_tree_id": "0",
- "script": "TrainerHill_Entrance_EventScript_2683AC",
+ "script": "TrainerHill_Entrance_EventScript_Girl",
"flag": "0"
},
{
@@ -76,7 +76,7 @@
"movement_range_y": 1,
"trainer_type": "0",
"trainer_sight_or_berry_tree_id": "0",
- "script": "TrainerHill_Entrance_EventScript_268391",
+ "script": "TrainerHill_Entrance_EventScript_Man",
"flag": "0"
}
],
@@ -111,7 +111,7 @@
"elevation": 3,
"var": "VAR_TRAINER_HILL_IS_ACTIVE",
"var_value": "0",
- "script": "TrainerHill_Entrance_EventScript_268229"
+ "script": "TrainerHill_Entrance_EventScript_EntryTrigger"
}
],
"bg_events": [
@@ -121,7 +121,7 @@
"y": 10,
"elevation": 0,
"player_facing_dir": "BG_EVENT_PLAYER_FACING_NORTH",
- "script": "TrainerHill_Entrance_EventScript_268388"
+ "script": "TrainerHill_Entrance_EventScript_Records"
}
]
} \ No newline at end of file
diff --git a/data/maps/TrainerHill_Entrance/scripts.inc b/data/maps/TrainerHill_Entrance/scripts.inc
index 3b9fb77a4..77cd8daa0 100644
--- a/data/maps/TrainerHill_Entrance/scripts.inc
+++ b/data/maps/TrainerHill_Entrance/scripts.inc
@@ -1,9 +1,9 @@
TrainerHill_Entrance_MapScripts:: @ 82680AC
- map_script MAP_SCRIPT_ON_RESUME, TrainerHill_Entrance_MapScript1_2680D0
- map_script MAP_SCRIPT_ON_RETURN_TO_FIELD, TrainerHill_Entrance_MapScript1_26811B
+ map_script MAP_SCRIPT_ON_RESUME, TrainerHill_Entrance_OnResume
+ map_script MAP_SCRIPT_ON_RETURN_TO_FIELD, TrainerHill_Entrance_OnReturn
map_script MAP_SCRIPT_ON_TRANSITION, TrainerHill_Entrance_OnTransition
- map_script MAP_SCRIPT_ON_LOAD, TrainerHill_Entrance_MapScript1_268128
- map_script MAP_SCRIPT_ON_FRAME_TABLE, TrainerHill_Entrance_MapScript2_26813E
+ map_script MAP_SCRIPT_ON_LOAD, TrainerHill_Entrance_OnLoad
+ map_script MAP_SCRIPT_ON_FRAME_TABLE, TrainerHill_Entrance_OnFrame
.byte 0
TrainerHill_Entrance_OnTransition: @ 82680C6
@@ -11,58 +11,59 @@ TrainerHill_Entrance_OnTransition: @ 82680C6
getplayerxy VAR_TEMP_D, VAR_RESULT
end
-TrainerHill_Entrance_MapScript1_2680CF: @ 82680CF
+@ Unused
+TrainerHill_Entrance_OnWarp: @ 82680CF
end
-TrainerHill_Entrance_MapScript1_2680D0: @ 82680D0
+TrainerHill_Entrance_OnResume: @ 82680D0
setvar VAR_0x8004, TRAINER_HILL_FUNC_RESUME_TIMER
special CallTrainerHillFunction
setvar VAR_TEMP_0, 0
- setvar VAR_0x8004, TRAINER_HILL_FUNC_9
+ setvar VAR_0x8004, TRAINER_HILL_FUNC_CLEAR_RESULT
special CallTrainerHillFunction
- compare VAR_RESULT, 0
- goto_if_eq TrainerHill_Entrance_EventScript_2680FF
+ compare VAR_RESULT, 0 @ VAR_RESULT always 0 here
+ goto_if_eq TrainerHill_Entrance_EventScript_TryFaceAttendant
setobjectxy EVENT_OBJ_ID_PLAYER, 9, 6
- applymovement EVENT_OBJ_ID_PLAYER, TrainerHill_Entrance_Movement_26837F
+ applymovement EVENT_OBJ_ID_PLAYER, TrainerHill_Entrance_Movement_PlayerFaceAttendant
end
-TrainerHill_Entrance_EventScript_2680FF:: @ 82680FF
- setvar VAR_0x8004, TRAINER_HILL_FUNC_16
+TrainerHill_Entrance_EventScript_TryFaceAttendant:: @ 82680FF
+ setvar VAR_0x8004, TRAINER_HILL_FUNC_GET_WON
special CallTrainerHillFunction
- compare VAR_RESULT, 1
- goto_if_eq TrainerHill_Entrance_EventScript_26811A
- applymovement EVENT_OBJ_ID_PLAYER, TrainerHill_Entrance_Movement_26837F
+ compare VAR_RESULT, TRUE
+ goto_if_eq TrainerHill_Entrance_EventScript_PlayerDontFaceAttendant
+ applymovement EVENT_OBJ_ID_PLAYER, TrainerHill_Entrance_Movement_PlayerFaceAttendant
end
-TrainerHill_Entrance_EventScript_26811A:: @ 826811A
+TrainerHill_Entrance_EventScript_PlayerDontFaceAttendant:: @ 826811A
end
-TrainerHill_Entrance_MapScript1_26811B: @ 826811B
+TrainerHill_Entrance_OnReturn: @ 826811B
addobject 2
addobject 1
addobject 5
addobject 4
end
-TrainerHill_Entrance_MapScript1_268128: @ 8268128
+TrainerHill_Entrance_OnLoad: @ 8268128
compare VAR_TEMP_D, 17
- call_if_eq TrainerHill_Entrance_EventScript_268134
+ call_if_eq TrainerHill_Entrance_EventScript_OpenCounterDoor
end
-TrainerHill_Entrance_EventScript_268134:: @ 8268134
+TrainerHill_Entrance_EventScript_OpenCounterDoor:: @ 8268134
setmetatile 17, 10, METATILE_TrainerHill_GreenFloorTile, 0
return
-TrainerHill_Entrance_MapScript2_26813E: @ 826813E
- map_script_2 VAR_TEMP_0, 0, TrainerHill_Entrance_EventScript_268182
- map_script_2 VAR_TEMP_D, 17, TrainerHill_Entrance_EventScript_268160
- map_script_2 VAR_TEMP_5, 1, TrainerHill_Entrance_EventScript_268229
- map_script_2 VAR_TEMP_1, 1, TrainerHill_Entrance_EventScript_2C83DF
+TrainerHill_Entrance_OnFrame: @ 826813E
+ map_script_2 VAR_TEMP_0, 0, TrainerHill_Entrance_EventScript_ExitChallenge
+ map_script_2 VAR_TEMP_D, 17, TrainerHill_Entrance_EventScript_ExitElevator
+ map_script_2 VAR_TEMP_5, 1, TrainerHill_Entrance_EventScript_EntryTrigger
+ map_script_2 VAR_TEMP_1, 1, TrainerHill_EventScript_WarpToEntranceCounter
.2byte 0
-TrainerHill_Entrance_EventScript_268160:: @ 8268160
+TrainerHill_Entrance_EventScript_ExitElevator:: @ 8268160
lockall
- applymovement EVENT_OBJ_ID_PLAYER, TrainerHill_Entrance_Movement_268385
+ applymovement EVENT_OBJ_ID_PLAYER, TrainerHill_Entrance_Movement_PlayerExitElevator
waitmovement 0
setmetatile 17, 10, METATILE_TrainerHill_CounterDoor, 1
special DrawWholeMapView
@@ -72,38 +73,36 @@ TrainerHill_Entrance_EventScript_268160:: @ 8268160
releaseall
end
-TrainerHill_Entrance_EventScript_268182:: @ 8268182
+TrainerHill_Entrance_EventScript_ExitChallenge:: @ 8268182
setvar VAR_TEMP_0, 1
setvar VAR_0x8004, TRAINER_HILL_FUNC_GET_CHALLENGE_STATUS
special CallTrainerHillFunction
switch VAR_RESULT
- case TRAINER_HILL_PLAYER_STATUS_LOST, TrainerHill_Entrance_EventScript_2681B5
- case TRAINER_HILL_PLAYER_STATUS_ECARD_SCANNED, TrainerHill_Entrance_EventScript_2681CA
- case TRAINER_HILL_PLAYER_STATUS_NORMAL, TrainerHill_Entrance_EventScript_2681EE
+ case TRAINER_HILL_PLAYER_STATUS_LOST, TrainerHill_Entrance_EventScript_ExitChallengeLost
+ case TRAINER_HILL_PLAYER_STATUS_ECARD_SCANNED, TrainerHill_Entrance_EventScript_ExitChallengeECard
+ case TRAINER_HILL_PLAYER_STATUS_NORMAL, TrainerHill_Entrance_EventScript_EndExitChallenge
-TrainerHill_Entrance_EventScript_2681B5:: @ 82681B5
+TrainerHill_Entrance_EventScript_ExitChallengeLost:: @ 82681B5
lockall
- applymovement EVENT_OBJ_ID_PLAYER, TrainerHill_Entrance_Movement_26837F
- msgbox TrainerHill_Entrance_Text_268689, MSGBOX_DEFAULT
- goto TrainerHill_Entrance_EventScript_2681DA
+ applymovement EVENT_OBJ_ID_PLAYER, TrainerHill_Entrance_Movement_PlayerFaceAttendant
+ msgbox TrainerHill_Entrance_Text_TooBadTremendousEffort, MSGBOX_DEFAULT
+ goto TrainerHill_Entrance_EventScript_PlayerExitChallenge
-TrainerHill_Entrance_EventScript_2681CA:: @ 82681CA
+TrainerHill_Entrance_EventScript_ExitChallengeECard:: @ 82681CA
lockall
- applymovement EVENT_OBJ_ID_PLAYER, TrainerHill_Entrance_Movement_26837F
- msgbox TrainerHill_Entrance_Text_268712, MSGBOX_DEFAULT
-
-TrainerHill_Entrance_EventScript_2681DA:: @ 82681DA
+ applymovement EVENT_OBJ_ID_PLAYER, TrainerHill_Entrance_Movement_PlayerFaceAttendant
+ msgbox TrainerHill_Entrance_Text_MovedReceptionHereForSwitch, MSGBOX_DEFAULT
+TrainerHill_Entrance_EventScript_PlayerExitChallenge:: @ 82681DA
closemessage
- applymovement EVENT_OBJ_ID_PLAYER, TrainerHill_Entrance_Movement_268381
+ applymovement EVENT_OBJ_ID_PLAYER, TrainerHill_Entrance_Movement_PushPlayerBackFromCounter
waitmovement 0
setvar VAR_TRAINER_HILL_IS_ACTIVE, 0
special HealPlayerParty
releaseall
-
-TrainerHill_Entrance_EventScript_2681EE:: @ 82681EE
+TrainerHill_Entrance_EventScript_EndExitChallenge:: @ 82681EE
end
-TrainerHill_Entrance_EventScript_2681EF:: @ 82681EF
+TrainerHill_Entrance_EventScript_Nurse:: @ 82681EF
setvar VAR_0x800B, 2
call Common_EventScript_PkmnCenterNurse
waitmessage
@@ -111,115 +110,113 @@ TrainerHill_Entrance_EventScript_2681EF:: @ 82681EF
release
end
-TrainerHill_Entrance_EventScript_2681FD:: @ 82681FD
+TrainerHill_Entrance_EventScript_Attendant:: @ 82681FD
lock
faceplayer
- setvar VAR_0x8004, TRAINER_HILL_FUNC_IS_IN
+ setvar VAR_0x8004, TRAINER_HILL_FUNC_IN_CHALLENGE
special CallTrainerHillFunction
- compare VAR_RESULT, 0
- goto_if_eq TrainerHill_Entrance_EventScript_26821F
- msgbox TrainerHill_Entrance_Text_2686F4, MSGBOX_DEFAULT
- goto TrainerHill_Entrance_EventScript_268227
-
-TrainerHill_Entrance_EventScript_26821F:: @ 826821F
- msgbox TrainerHill_Entrance_Text_2687AC, MSGBOX_DEFAULT
-
-TrainerHill_Entrance_EventScript_268227:: @ 8268227
+ compare VAR_RESULT, FALSE
+ goto_if_eq TrainerHill_Entrance_EventScript_ThanksForPlaying
+ msgbox TrainerHill_Entrance_Text_HopeYouGiveItYourBest, MSGBOX_DEFAULT
+ goto TrainerHill_Entrance_EventScript_AttendantEnd
+
+TrainerHill_Entrance_EventScript_ThanksForPlaying:: @ 826821F
+ msgbox TrainerHill_Entrance_Text_ThankYouForPlaying, MSGBOX_DEFAULT
+TrainerHill_Entrance_EventScript_AttendantEnd:: @ 8268227
release
end
-TrainerHill_Entrance_EventScript_268229:: @ 8268229
+TrainerHill_Entrance_EventScript_EntryTrigger:: @ 8268229
lockall
- applymovement EVENT_OBJ_ID_PLAYER, TrainerHill_Entrance_Movement_26837F
- goto_if_unset FLAG_SYS_GAME_CLEAR, TrainerHill_Entrance_EventScript_26836A
- msgbox TrainerHill_Entrance_Text_2684C6, MSGBOX_DEFAULT
- setvar VAR_0x8004, TRAINER_HILL_FUNC_13
+ applymovement EVENT_OBJ_ID_PLAYER, TrainerHill_Entrance_Movement_PlayerFaceAttendant
+ goto_if_unset FLAG_SYS_GAME_CLEAR, TrainerHill_Entrance_EventScript_Closed
+ msgbox TrainerHill_Entrance_Text_WelcomeToTrainerHill, MSGBOX_DEFAULT
+ setvar VAR_0x8004, TRAINER_HILL_FUNC_GET_GAME_SAVED
special CallTrainerHillFunction
- compare VAR_RESULT, 0
- call_if_eq TrainerHill_Entrance_EventScript_26832E
- setvar VAR_0x8004, TRAINER_HILL_FUNC_8
+ compare VAR_RESULT, FALSE
+ call_if_eq TrainerHill_Entrance_EventScript_SaveGame
+ setvar VAR_0x8004, TRAINER_HILL_FUNC_GET_ALL_FLOORS_USED
special CallTrainerHillFunction
- compare VAR_RESULT, 1
- goto_if_eq TrainerHill_Entrance_EventScript_268275
- msgbox TrainerHill_Entrance_Text_268564, MSGBOX_DEFAULT
- goto TrainerHill_Entrance_EventScript_26827D
-
-TrainerHill_Entrance_EventScript_268275:: @ 8268275
- msgbox TrainerHill_Entrance_Text_26859E, MSGBOX_DEFAULT
-
-TrainerHill_Entrance_EventScript_26827D:: @ 826827D
- message TrainerHill_Entrance_Text_2685F8
+ compare VAR_RESULT, TRUE
+ goto_if_eq TrainerHill_Entrance_EventScript_AllFloorsUsed
+ msgbox TrainerHill_Entrance_Text_TrainersUpToFloorX, MSGBOX_DEFAULT
+ goto TrainerHill_Entrance_EventScript_AskChallengeTrainers
+
+TrainerHill_Entrance_EventScript_AllFloorsUsed:: @ 8268275
+ msgbox TrainerHill_Entrance_Text_TrainersInEveryRoom, MSGBOX_DEFAULT
+TrainerHill_Entrance_EventScript_AskChallengeTrainers:: @ 826827D
+ message TrainerHill_Entrance_Text_LikeToChallengeTrainers
waitmessage
multichoice 15, 6, MULTI_YESNOINFO, 0
switch VAR_RESULT
- case 0, TrainerHill_Entrance_EventScript_2682C8
- case 1, TrainerHill_Entrance_EventScript_268314
- case 2, TrainerHill_Entrance_EventScript_2682BA
- case MULTI_B_PRESSED, TrainerHill_Entrance_EventScript_268314
+ case 0, TrainerHill_Entrance_EventScript_ChooseChallenge
+ case 1, TrainerHill_Entrance_EventScript_CancelEntry
+ case 2, TrainerHill_Entrance_EventScript_Info
+ case MULTI_B_PRESSED, TrainerHill_Entrance_EventScript_CancelEntry
end
-TrainerHill_Entrance_EventScript_2682BA:: @ 82682BA
- msgbox TrainerHill_Entrance_Text_2687C3, MSGBOX_DEFAULT
- goto TrainerHill_Entrance_EventScript_26827D
+TrainerHill_Entrance_EventScript_Info:: @ 82682BA
+ msgbox TrainerHill_Entrance_Text_ExplainTrainerHill, MSGBOX_DEFAULT
+ goto TrainerHill_Entrance_EventScript_AskChallengeTrainers
end
-TrainerHill_Entrance_EventScript_2682C8:: @ 82682C8
+TrainerHill_Entrance_EventScript_ChooseChallenge:: @ 82682C8
multichoice 13, 2, MULTI_TAG_MATCH_TYPE, 0
switch VAR_RESULT
- case 4, TrainerHill_Entrance_EventScript_268314
- case MULTI_B_PRESSED, TrainerHill_Entrance_EventScript_268314
+ case 4, TrainerHill_Entrance_EventScript_CancelEntry
+ case MULTI_B_PRESSED, TrainerHill_Entrance_EventScript_CancelEntry
setvar VAR_0x8004, TRAINER_HILL_FUNC_SET_TAG
copyvar VAR_0x8005, VAR_RESULT
special CallTrainerHillFunction
setvar VAR_TRAINER_HILL_IS_ACTIVE, 1
setvar VAR_TEMP_5, 0
special HealPlayerParty
- msgbox TrainerHill_Entrance_Text_26862A, MSGBOX_DEFAULT
+ msgbox TrainerHill_Entrance_Text_TimeProgessGetSetGo, MSGBOX_DEFAULT
setvar VAR_0x8004, TRAINER_HILL_FUNC_START
special CallTrainerHillFunction
releaseall
end
-TrainerHill_Entrance_EventScript_268314:: @ 8268314
+TrainerHill_Entrance_EventScript_CancelEntry:: @ 8268314
setvar VAR_TEMP_5, 0
- msgbox TrainerHill_Entrance_Text_26866F, MSGBOX_DEFAULT
+ msgbox TrainerHill_Entrance_Text_PleaseVisitUsAgain, MSGBOX_DEFAULT
closemessage
- applymovement EVENT_OBJ_ID_PLAYER, TrainerHill_Entrance_Movement_268381
+ applymovement EVENT_OBJ_ID_PLAYER, TrainerHill_Entrance_Movement_PushPlayerBackFromCounter
waitmovement 0
releaseall
end
-TrainerHill_Entrance_EventScript_26832E:: @ 826832E
- msgbox TrainerHill_Entrance_Text_26851C, MSGBOX_DEFAULT
- setvar VAR_0x8004, TRAINER_HILL_FUNC_14
+TrainerHill_Entrance_EventScript_SaveGame:: @ 826832E
+ msgbox TrainerHill_Entrance_Text_SaveGameBeforeEnter, MSGBOX_DEFAULT
+ setvar VAR_0x8004, TRAINER_HILL_FUNC_SET_GAME_SAVED
special CallTrainerHillFunction
setvar VAR_TEMP_5, 1
call Common_EventScript_SaveGame
- compare VAR_RESULT, 0
- goto_if_eq TrainerHill_Entrance_EventScript_26835C
- setvar VAR_0x8004, TRAINER_HILL_FUNC_14
+ compare VAR_RESULT, FALSE
+ goto_if_eq TrainerHill_Entrance_EventScript_SaveFailed
+ setvar VAR_0x8004, TRAINER_HILL_FUNC_SET_GAME_SAVED
special CallTrainerHillFunction
return
-TrainerHill_Entrance_EventScript_26835C:: @ 826835C
- setvar VAR_0x8004, TRAINER_HILL_FUNC_15
+TrainerHill_Entrance_EventScript_SaveFailed:: @ 826835C
+ setvar VAR_0x8004, TRAINER_HILL_FUNC_CLEAR_GAME_SAVED
special CallTrainerHillFunction
- goto TrainerHill_Entrance_EventScript_268314
+ goto TrainerHill_Entrance_EventScript_CancelEntry
end
-TrainerHill_Entrance_EventScript_26836A:: @ 826836A
- msgbox TrainerHill_Entrance_Text_268430, MSGBOX_DEFAULT
+TrainerHill_Entrance_EventScript_Closed:: @ 826836A
+ msgbox TrainerHill_Entrance_Text_StillGettingReady, MSGBOX_DEFAULT
closemessage
- applymovement EVENT_OBJ_ID_PLAYER, TrainerHill_Entrance_Movement_268381
+ applymovement EVENT_OBJ_ID_PLAYER, TrainerHill_Entrance_Movement_PushPlayerBackFromCounter
waitmovement 0
releaseall
end
-TrainerHill_Entrance_Movement_26837F: @ 826837F
+TrainerHill_Entrance_Movement_PlayerFaceAttendant: @ 826837F
face_right
step_end
-TrainerHill_Entrance_Movement_268381: @ 8268381
+TrainerHill_Entrance_Movement_PushPlayerBackFromCounter: @ 8268381
walk_down
step_end
@@ -227,12 +224,12 @@ TrainerHill_Entrance_Movement_268383: @ 8268383
face_up
step_end
-TrainerHill_Entrance_Movement_268385: @ 8268385
+TrainerHill_Entrance_Movement_PlayerExitElevator: @ 8268385
walk_down
walk_down
step_end
-TrainerHill_Entrance_EventScript_268388:: @ 8268388
+TrainerHill_Entrance_EventScript_Records:: @ 8268388
lockall
fadescreen 1
special ShowTrainerHillRecords
@@ -240,37 +237,37 @@ TrainerHill_Entrance_EventScript_268388:: @ 8268388
releaseall
end
-TrainerHill_Entrance_EventScript_268391:: @ 8268391
- goto_if_unset FLAG_SYS_GAME_CLEAR, TrainerHill_Entrance_EventScript_2683A3
- msgbox TrainerHill_Entrance_Text_268D5A, MSGBOX_NPC
+TrainerHill_Entrance_EventScript_Man:: @ 8268391
+ goto_if_unset FLAG_SYS_GAME_CLEAR, TrainerHill_Entrance_EventScript_ManTrainerHillClosed
+ msgbox TrainerHill_Entrance_Text_WhatSortOfTrainersAreAhead, MSGBOX_NPC
end
-TrainerHill_Entrance_EventScript_2683A3:: @ 82683A3
- msgbox TrainerHill_Entrance_Text_268DDA, MSGBOX_NPC
+TrainerHill_Entrance_EventScript_ManTrainerHillClosed:: @ 82683A3
+ msgbox TrainerHill_Entrance_Text_CantWaitToTestTheWaters, MSGBOX_NPC
end
-TrainerHill_Entrance_EventScript_2683AC:: @ 82683AC
- goto_if_unset FLAG_SYS_GAME_CLEAR, TrainerHill_Entrance_EventScript_2683BE
- msgbox TrainerHill_Entrance_Text_268E6A, MSGBOX_NPC
+TrainerHill_Entrance_EventScript_Girl:: @ 82683AC
+ goto_if_unset FLAG_SYS_GAME_CLEAR, TrainerHill_Entrance_EventScript_GirlTrainerHillClosed
+ msgbox TrainerHill_Entrance_Text_FriendsTryingToReachTimeBoardTop, MSGBOX_NPC
end
-TrainerHill_Entrance_EventScript_2683BE:: @ 82683BE
- msgbox TrainerHill_Entrance_Text_268EDC, MSGBOX_NPC
+TrainerHill_Entrance_EventScript_GirlTrainerHillClosed:: @ 82683BE
+ msgbox TrainerHill_Entrance_Text_DoYouKnowWhenTheyOpen, MSGBOX_NPC
end
-TrainerHill_Entrance_EventScript_2683C7:: @ 82683C7
+TrainerHill_Entrance_EventScript_Clerk:: @ 82683C7
lock
faceplayer
message gText_HowMayIServeYou
waitmessage
- goto_if_set FLAG_SYS_GAME_CLEAR, TrainerHill_Entrance_EventScript_268402
- pokemart TrainerHill_Entrance_Pokemart_2683E8
+ goto_if_set FLAG_SYS_GAME_CLEAR, TrainerHill_Entrance_EventScript_ExpandedPokemart
+ pokemart TrainerHill_Entrance_Pokemart_Basic
msgbox gText_PleaseComeAgain, MSGBOX_DEFAULT
release
end
.align 2
-TrainerHill_Entrance_Pokemart_2683E8: @ 82683E8
+TrainerHill_Entrance_Pokemart_Basic: @ 82683E8
.2byte ITEM_SUPER_POTION
.2byte ITEM_ANTIDOTE
.2byte ITEM_PARALYZE_HEAL
@@ -286,14 +283,14 @@ TrainerHill_Entrance_Pokemart_2683E8: @ 82683E8
release
end
-TrainerHill_Entrance_EventScript_268402:: @ 8268402
- pokemart TrainerHill_Entrance_Pokemart_268414
+TrainerHill_Entrance_EventScript_ExpandedPokemart:: @ 8268402
+ pokemart TrainerHill_Entrance_Pokemart_Expanded
msgbox gText_PleaseComeAgain, MSGBOX_DEFAULT
release
end
.align 2
-TrainerHill_Entrance_Pokemart_268414: @ 8268414
+TrainerHill_Entrance_Pokemart_Expanded: @ 8268414
.2byte ITEM_HYPER_POTION
.2byte ITEM_MAX_POTION
.2byte ITEM_FULL_RESTORE
@@ -310,69 +307,69 @@ TrainerHill_Entrance_Pokemart_268414: @ 8268414
release
end
-TrainerHill_Entrance_Text_268430: @ 8268430
+TrainerHill_Entrance_Text_StillGettingReady: @ 8268430
.string "This is the TRAINER HILL where\n"
.string "you may enjoy tag battles with many\l"
.string "TRAINERS.\p"
.string "Unfortunately, we're still getting\n"
.string "things ready. Please come back later!$"
-TrainerHill_Entrance_Text_2684C6: @ 82684C6
+TrainerHill_Entrance_Text_WelcomeToTrainerHill: @ 82684C6
.string "Welcome!\p"
.string "This is the TRAINER HILL where\n"
.string "you may enjoy tag battles with many\l"
.string "TRAINERS!$"
-TrainerHill_Entrance_Text_26851C: @ 826851C
+TrainerHill_Entrance_Text_SaveGameBeforeEnter: @ 826851C
.string "Is this your first visit here?\p"
.string "Before you enter, please save\n"
.string "your game.$"
-TrainerHill_Entrance_Text_268564: @ 8268564
+TrainerHill_Entrance_Text_TrainersUpToFloorX: @ 8268564
.string "Let's see…\n"
.string "The TRAINERS here now are…\p"
.string "Up to floor no. {STR_VAR_1}.$"
-TrainerHill_Entrance_Text_26859E: @ 826859E
+TrainerHill_Entrance_Text_TrainersInEveryRoom: @ 826859E
.string "Let's see…\n"
.string "The TRAINERS here now are…\p"
.string "There appear to be TRAINERS gathered\n"
.string "in every room.$"
-TrainerHill_Entrance_Text_2685F8: @ 82685F8
+TrainerHill_Entrance_Text_LikeToChallengeTrainers: @ 82685F8
.string "Would you like to challenge the\n"
.string "waiting TRAINERS?$"
-TrainerHill_Entrance_Text_26862A: @ 826862A
+TrainerHill_Entrance_Text_TimeProgessGetSetGo: @ 826862A
.string "I will time your progress.\n"
.string "Best of luck!\p"
.string "On your marks…\p"
.string "Get set…\p"
.string "Go!$"
-TrainerHill_Entrance_Text_26866F: @ 826866F
+TrainerHill_Entrance_Text_PleaseVisitUsAgain: @ 826866F
.string "Please do visit us again!$"
-TrainerHill_Entrance_Text_268689: @ 8268689
+TrainerHill_Entrance_Text_TooBadTremendousEffort: @ 8268689
.string "That was too bad.\p"
.string "I think you put in a tremendous\n"
.string "effort in your battling.\p"
.string "Please come back and try again!$"
-TrainerHill_Entrance_Text_2686F4: @ 82686F4
+TrainerHill_Entrance_Text_HopeYouGiveItYourBest: @ 82686F4
.string "I hope you give it your best.$"
-TrainerHill_Entrance_Text_268712: @ 8268712
+TrainerHill_Entrance_Text_MovedReceptionHereForSwitch: @ 8268712
.string "When the TRAINERS switch places,\n"
.string "the movement can be hectic.\p"
.string "To avoid the stampede, we moved\n"
.string "the reception counter here.\p"
.string "I'm sorry for the inconvenience.$"
-TrainerHill_Entrance_Text_2687AC: @ 82687AC
+TrainerHill_Entrance_Text_ThankYouForPlaying: @ 82687AC
.string "Thank you for playing!$"
-TrainerHill_Entrance_Text_2687C3: @ 82687C3
+TrainerHill_Entrance_Text_ExplainTrainerHill: @ 82687C3
.string "Here at the TRAINER HILL, we conduct\n"
.string "an event called the Time Attack.\p"
.string "It is a race that measures how long\n"
@@ -385,13 +382,14 @@ TrainerHill_Entrance_Text_2687C3: @ 82687C3
.string "neither Exp. Points nor money will\l"
.string "be awarded.$"
-TrainerHill_Entrance_Text_26890D: @ 826890D
+@ Unused
+TrainerHill_Entrance_Text_NeedAtLeastTwoPokemon: @ 826890D
.string "Oh, I'm sorry, but you appear to have\n"
.string "only one POKéMON with you.\p"
.string "You will need at least two POKéMON\n"
.string "to enter this event.$"
-TrainerHill_Roof_Text_268986: @ 8268986
+TrainerHill_Roof_Text_YouFinallyCameBravo: @ 8268986
.string "Hm! Hm!\p"
.string "You finally came!\n"
.string "Yes, you have arrived!\p"
@@ -407,15 +405,15 @@ TrainerHill_Roof_Text_268986: @ 8268986
.string "Anyway, I watched you on your way up.\n"
.string "Marvelous battling! Bravo, indeed!$"
-TrainerHill_Roof_Text_268AC5: @ 8268AC5
+TrainerHill_Roof_Text_HaveTheMostMarvelousGift: @ 8268AC5
.string "For a marvelous someone like you,\n"
.string "I have the most marvelous gift!$"
-TrainerHill_Roof_Text_268B07: @ 8268B07
+TrainerHill_Roof_Text_FullUpBeBackLaterForThis: @ 8268B07
.string "Oh, no, full up with things!\n"
.string "You'll be back later for this!$"
-TrainerHill_Roof_Text_268B43: @ 8268B43
+TrainerHill_Roof_Text_GotHereMarvelouslyQuickly: @ 8268B43
.string "Oh, hold on here! Did you possibly get\n"
.string "here marvelously quickly?\p"
.string "How splendid! You needn't have\n"
@@ -423,50 +421,51 @@ TrainerHill_Roof_Text_268B43: @ 8268B43
.string "That is so delightful. I'll have the Time\n"
.string "Board at the reception updated!$"
-TrainerHill_Roof_Text_268C03: @ 8268C03
+TrainerHill_Roof_Text_YouWerentVeryQuick: @ 8268C03
.string "But, oh…\n"
.string "You weren't very quick getting here.$"
-TrainerHill_Roof_Text_268C31: @ 8268C31
+TrainerHill_Roof_Text_ArriveZippierNextTime: @ 8268C31
.string "Perhaps it would please me more if you\n"
.string "arrived zippier next time.\p"
.string "Then, I should be pleased to form\n"
.string "a tag team with you!\p"
.string "Until we meet again, amigo!$"
-TrainerHill_Roof_Text_268CC6: @ 8268CC6
+@ Unused
+TrainerHill_Roof_Text_BuiltTrainerHillToFindPartner: @ 8268CC6
.string "I had the TRAINER HILL built for but\n"
.string "one reason and one only!\p"
.string "To find the most suitable partner\n"
.string "with whom I may form a tag team!$"
-TrainerHill_Entrance_Text_268D47: @ 8268D47
+TrainerHill_Entrance_Text_ChallengeTime: @ 8268D47
.string "{STR_VAR_1} min. {STR_VAR_2}.{STR_VAR_3} sec.$"
-TrainerHill_Entrance_Text_268D5A: @ 8268D5A
+TrainerHill_Entrance_Text_WhatSortOfTrainersAreAhead: @ 8268D5A
.string "Who knows what sort of TRAINERS\n"
.string "and POKéMON combos are ahead?\p"
.string "All I know is that I'll knock aside\n"
.string "anyone that stands in my way!$"
-TrainerHill_Entrance_Text_268DDA: @ 8268DDA
+TrainerHill_Entrance_Text_CantWaitToTestTheWaters: @ 8268DDA
.string "I heard tough TRAINERS come to this\n"
.string "TRAINER HILL from all over.\p"
.string "I can't wait to test the waters!\p"
.string "I'll knock aside anyone that stands\n"
.string "in my way!$"
-TrainerHill_Entrance_Text_268E6A: @ 8268E6A
+TrainerHill_Entrance_Text_FriendsTryingToReachTimeBoardTop: @ 8268E6A
.string "Do you see the Time Board over there?\p"
.string "My friends and I are trying to see who\n"
.string "can reach the top in the least time.$"
-TrainerHill_Entrance_Text_268EDC: @ 8268EDC
+TrainerHill_Entrance_Text_DoYouKnowWhenTheyOpen: @ 8268EDC
.string "Do you know when they're opening\n"
.string "this place up?\p"
.string "I'm waiting here to be the first\n"
.string "challenger ever!$"
-TrainerHill_Elevator_Text_268F3E: @ 8268F3E
+TrainerHill_Elevator_Text_ReturnToReception: @ 8268F3E
.string "Would you like to return to\n"
.string "the reception counter?$"
diff --git a/data/maps/TrainerHill_Roof/map.json b/data/maps/TrainerHill_Roof/map.json
index 8a623028e..280494788 100644
--- a/data/maps/TrainerHill_Roof/map.json
+++ b/data/maps/TrainerHill_Roof/map.json
@@ -24,7 +24,7 @@
"movement_range_y": 1,
"trainer_type": "0",
"trainer_sight_or_berry_tree_id": "0",
- "script": "TrainerHill_Roof_EventScript_268FB2",
+ "script": "TrainerHill_Roof_EventScript_Owner",
"flag": "0"
}
],
diff --git a/data/maps/TrainerHill_Roof/scripts.inc b/data/maps/TrainerHill_Roof/scripts.inc
index f7ced5d07..af4c9ea5a 100644
--- a/data/maps/TrainerHill_Roof/scripts.inc
+++ b/data/maps/TrainerHill_Roof/scripts.inc
@@ -1,70 +1,66 @@
TrainerHill_Roof_MapScripts:: @ 8268FA7
- map_script MAP_SCRIPT_ON_RESUME, TrainerHill_Roof_MapScript1_2C8336
- map_script MAP_SCRIPT_ON_FRAME_TABLE, TrainerHill_Roof_MapScript2_2C8381
+ map_script MAP_SCRIPT_ON_RESUME, TrainerHill_OnResume
+ map_script MAP_SCRIPT_ON_FRAME_TABLE, TrainerHill_OnFrame
.byte 0
-TrainerHill_Roof_EventScript_268FB2:: @ 8268FB2
- setvar VAR_0x8004, TRAINER_HILL_FUNC_12
+TrainerHill_Roof_EventScript_Owner:: @ 8268FB2
+ setvar VAR_0x8004, TRAINER_HILL_FUNC_SET_ALL_TRAINER_FLAGS
special CallTrainerHillFunction
lock
faceplayer
- setvar VAR_0x8004, TRAINER_HILL_FUNC_1
+ setvar VAR_0x8004, TRAINER_HILL_FUNC_GET_OWNER_STATE
special CallTrainerHillFunction
switch VAR_RESULT
- case 0, TrainerHill_Roof_EventScript_268FEA
- case 1, TrainerHill_Roof_EventScript_268FF2
- case 2, TrainerHill_Roof_EventScript_2690A8
-
-TrainerHill_Roof_EventScript_268FEA:: @ 8268FEA
- msgbox TrainerHill_Roof_Text_268986, MSGBOX_DEFAULT
-
-TrainerHill_Roof_EventScript_268FF2:: @ 8268FF2
- setvar VAR_0x8004, TRAINER_HILL_FUNC_2
+ case 0, TrainerHill_Roof_EventScript_Arrived
+ case 1, TrainerHill_Roof_EventScript_GivePrize
+ case 2, TrainerHill_Roof_EventScript_AlreadyReceivedPrize
+TrainerHill_Roof_EventScript_Arrived:: @ 8268FEA
+ msgbox TrainerHill_Roof_Text_YouFinallyCameBravo, MSGBOX_DEFAULT
+TrainerHill_Roof_EventScript_GivePrize:: @ 8268FF2
+ setvar VAR_0x8004, TRAINER_HILL_FUNC_GIVE_PRIZE
special CallTrainerHillFunction
switch VAR_RESULT
- case 0, TrainerHill_Roof_EventScript_269020
- case 1, TrainerHill_Roof_EventScript_269037
- case 2, TrainerHill_Roof_EventScript_269054
-
-TrainerHill_Roof_EventScript_269020:: @ 8269020
- msgbox TrainerHill_Roof_Text_268AC5, MSGBOX_DEFAULT
+ case 0, TrainerHill_Roof_EventScript_ReceivePrize
+ case 1, TrainerHill_Roof_EventScript_NoRoomForPrize
+ case 2, TrainerHill_Roof_EventScript_CheckFinalTime
+TrainerHill_Roof_EventScript_ReceivePrize:: @ 8269020
+ msgbox TrainerHill_Roof_Text_HaveTheMostMarvelousGift, MSGBOX_DEFAULT
playfanfare MUS_FANFA1
message gText_ObtainedTheItem
waitfanfare
waitmessage
- goto TrainerHill_Roof_EventScript_269054
+ goto TrainerHill_Roof_EventScript_CheckFinalTime
-TrainerHill_Roof_EventScript_269037:: @ 8269037
- msgbox TrainerHill_Roof_Text_268AC5, MSGBOX_DEFAULT
+TrainerHill_Roof_EventScript_NoRoomForPrize:: @ 8269037
+ msgbox TrainerHill_Roof_Text_HaveTheMostMarvelousGift, MSGBOX_DEFAULT
msgbox gText_TheBagIsFull, MSGBOX_DEFAULT
- msgbox TrainerHill_Roof_Text_268B07, MSGBOX_DEFAULT
- goto TrainerHill_Roof_EventScript_269054
+ msgbox TrainerHill_Roof_Text_FullUpBeBackLaterForThis, MSGBOX_DEFAULT
+ goto TrainerHill_Roof_EventScript_CheckFinalTime
-TrainerHill_Roof_EventScript_269054:: @ 8269054
- setvar VAR_0x8004, TRAINER_HILL_FUNC_3
+TrainerHill_Roof_EventScript_CheckFinalTime:: @ 8269054
+ setvar VAR_0x8004, TRAINER_HILL_FUNC_CHECK_FINAL_TIME
special CallTrainerHillFunction
switch VAR_RESULT
- case 0, TrainerHill_Roof_EventScript_269082
- case 1, TrainerHill_Roof_EventScript_269090
- case 2, TrainerHill_Roof_EventScript_26909E
-
-TrainerHill_Roof_EventScript_269082:: @ 8269082
- msgbox TrainerHill_Roof_Text_268B43, MSGBOX_DEFAULT
- goto TrainerHill_Roof_EventScript_26909E
+ case 0, TrainerHill_Roof_EventScript_NewRecord
+ case 1, TrainerHill_Roof_EventScript_NoNewRecord
+ case 2, TrainerHill_Roof_EventScript_EndSpeakToOwner
+TrainerHill_Roof_EventScript_NewRecord:: @ 8269082
+ msgbox TrainerHill_Roof_Text_GotHereMarvelouslyQuickly, MSGBOX_DEFAULT
+ goto TrainerHill_Roof_EventScript_EndSpeakToOwner
end
-TrainerHill_Roof_EventScript_269090:: @ 8269090
- msgbox TrainerHill_Roof_Text_268C03, MSGBOX_DEFAULT
- goto TrainerHill_Roof_EventScript_26909E
+TrainerHill_Roof_EventScript_NoNewRecord:: @ 8269090
+ msgbox TrainerHill_Roof_Text_YouWerentVeryQuick, MSGBOX_DEFAULT
+ goto TrainerHill_Roof_EventScript_EndSpeakToOwner
end
-TrainerHill_Roof_EventScript_26909E:: @ 826909E
- msgbox TrainerHill_Roof_Text_268C31, MSGBOX_DEFAULT
+TrainerHill_Roof_EventScript_EndSpeakToOwner:: @ 826909E
+ msgbox TrainerHill_Roof_Text_ArriveZippierNextTime, MSGBOX_DEFAULT
release
end
-TrainerHill_Roof_EventScript_2690A8:: @ 82690A8
- msgbox TrainerHill_Roof_Text_268C31, MSGBOX_DEFAULT
+TrainerHill_Roof_EventScript_AlreadyReceivedPrize:: @ 82690A8
+ msgbox TrainerHill_Roof_Text_ArriveZippierNextTime, MSGBOX_DEFAULT
release
end
diff --git a/data/scripts/field_poison.inc b/data/scripts/field_poison.inc
index 40b4cf658..d45b480d1 100644
--- a/data/scripts/field_poison.inc
+++ b/data/scripts/field_poison.inc
@@ -39,7 +39,7 @@ EventScript_FrontierFieldWhiteOut:: @ 82736F8
goto_if_eq BattleFrontier_BattlePyramidTop_EventScript_252B42
compare VAR_RESULT, 2
goto_if_eq BattleFrontier_BattlePyramidTop_EventScript_252B42
- setvar VAR_0x8004, TRAINER_HILL_FUNC_IS_IN
+ setvar VAR_0x8004, TRAINER_HILL_FUNC_IN_CHALLENGE
special CallTrainerHillFunction
compare VAR_RESULT, 1
goto_if_eq TrainerHill_1F_EventScript_Lost
diff --git a/data/scripts/trainer_hill.inc b/data/scripts/trainer_hill.inc
index db6105249..805c63264 100644
--- a/data/scripts/trainer_hill.inc
+++ b/data/scripts/trainer_hill.inc
@@ -1,8 +1,4 @@
-TrainerHill_1F_MapScript1_2C8336: @ 82C8336
-TrainerHill_2F_MapScript1_2C8336: @ 82C8336
-TrainerHill_3F_MapScript1_2C8336: @ 82C8336
-TrainerHill_4F_MapScript1_2C8336: @ 82C8336
-TrainerHill_Roof_MapScript1_2C8336: @ 82C8336
+TrainerHill_OnResume: @ 82C8336
setvar VAR_TEMP_2, 0
setvar VAR_0x8004, TRAINER_HILL_FUNC_RESUME_TIMER
special CallTrainerHillFunction
@@ -17,67 +13,64 @@ TrainerHill_Roof_MapScript1_2C8336: @ 82C8336
goto_if_eq TrainerHill_1F_EventScript_Lost
end
-TrainerHill_1F_MapScript2_2C8372: @ 82C8372
-TrainerHill_2F_MapScript2_2C8372: @ 82C8372
- map_script_2 VAR_TEMP_3, 0, TrainerHill_1F_EventScript_2C837C
+TrainerHill_OnWarp: @ 82C8372
+ map_script_2 VAR_TEMP_3, 0, TrainerHill_1F_EventScript_DummyOnWarp
.2byte 0
-TrainerHill_1F_EventScript_2C837C:: @ 82C837C
+TrainerHill_1F_EventScript_DummyOnWarp:: @ 82C837C
setvar VAR_TEMP_3, 1
@ forced stop
-TrainerHill_1F_MapScript2_2C8381: @ 82C8381
-TrainerHill_2F_MapScript2_2C8381: @ 82C8381
-TrainerHill_3F_MapScript2_2C8381: @ 82C8381
-TrainerHill_4F_MapScript2_2C8381: @ 82C8381
-TrainerHill_Roof_MapScript2_2C8381: @ 82C8381
- map_script_2 VAR_TEMP_2, 0, TrainerHill_1F_EventScript_2C83A6
- map_script_2 VAR_TEMP_1, 1, TrainerHill_1F_EventScript_2C83DF
+TrainerHill_OnFrame: @ 82C8381
+ map_script_2 VAR_TEMP_2, 0, TrainerHill_1F_EventScript_DummyWarpToEntranceCounter
+ map_script_2 VAR_TEMP_1, 1, TrainerHill_EventScript_WarpToEntranceCounter
.2byte 0
EventScript_TrainerHillTimer:: @ 82C8393
lockall
- setvar VAR_0x8004, TRAINER_HILL_FUNC_7
+ setvar VAR_0x8004, TRAINER_HILL_FUNC_GET_CHALLENGE_TIME
special CallTrainerHillFunction
- msgbox TrainerHill_Entrance_Text_268D47, MSGBOX_DEFAULT
+ msgbox TrainerHill_Entrance_Text_ChallengeTime, MSGBOX_DEFAULT
releaseall
end
-TrainerHill_1F_EventScript_2C83A6:: @ 82C83A6
+TrainerHill_1F_EventScript_DummyWarpToEntranceCounter:: @ 82C83A6
setvar VAR_TEMP_2, 1
- setvar VAR_0x8004, TRAINER_HILL_FUNC_9
+ setvar VAR_0x8004, TRAINER_HILL_FUNC_CLEAR_RESULT
special CallTrainerHillFunction
- compare VAR_RESULT, 1
- goto_if_eq TrainerHill_1F_EventScript_2C83BF
+ compare VAR_RESULT, 1 @ VAR_RESULT always 0 here
+ goto_if_eq TrainerHill_1F_EventScript_WarpSilentToEntranceCounter
end
-TrainerHill_1F_EventScript_2C83BF:: @ 82C83BF
+@ Never reached
+TrainerHill_1F_EventScript_WarpSilentToEntranceCounter:: @ 82C83BF
warpsilent MAP_TRAINER_HILL_ENTRANCE, 255, 9, 6
waitstate
end
TrainerHill_1F_EventScript_Lost:: @ 82C83C9
- setvar VAR_0x8004, TRAINER_HILL_FUNC_12
+ setvar VAR_0x8004, TRAINER_HILL_FUNC_SET_ALL_TRAINER_FLAGS
special CallTrainerHillFunction
setvar VAR_0x8004, TRAINER_HILL_FUNC_SET_LOST
special CallTrainerHillFunction
setvar VAR_TEMP_1, 1
end
-TrainerHill_1F_EventScript_2C83DF:: @ 82C83DF
-TrainerHill_Entrance_EventScript_2C83DF:: @ 82C83DF
+TrainerHill_EventScript_WarpToEntranceCounter:: @ 82C83DF
setvar VAR_TEMP_1, 0
warp MAP_TRAINER_HILL_ENTRANCE, 255, 9, 6
waitstate
end
-TrainerHill_1F_Movement_2C83EE:: @ 82C83EE
+@ Unused
+TrainerHill_1F_Movement_SetInvisible:: @ 82C83EE
set_invisible
step_end
-EventScript_2C83F0:: @ 82C83F0
- trainerbattle TRAINER_BATTLE_12, TRAINER_PHILLIP, 0, BattleFacility_TrainerBattle_PlaceholderText, BattleFacility_TrainerBattle_PlaceholderText
- setvar VAR_0x8004, TRAINER_HILL_FUNC_11
+@ TRAINER_PHILLIP is an actual Trainer on the SS Tidal, but is used as a placeholder here
+TrainerHill_EventScript_TrainerBattle:: @ 82C83F0
+ trainerbattle TRAINER_BATTLE_HILL, TRAINER_PHILLIP, 0, BattleFacility_TrainerBattle_PlaceholderText, BattleFacility_TrainerBattle_PlaceholderText
+ setvar VAR_0x8004, TRAINER_HILL_FUNC_POST_BATTLE_TEXT
special CallTrainerHillFunction
waitmessage
waitbuttonpress
diff --git a/include/constants/battle_setup.h b/include/constants/battle_setup.h
index d98e1762f..d825c88bc 100644
--- a/include/constants/battle_setup.h
+++ b/include/constants/battle_setup.h
@@ -13,6 +13,6 @@
#define TRAINER_BATTLE_PYRAMID 9
#define TRAINER_BATTLE_SET_TRAINER_A 10
#define TRAINER_BATTLE_SET_TRAINER_B 11
-#define TRAINER_BATTLE_12 12
+#define TRAINER_BATTLE_HILL 12
#endif // GUARD_CONSTANTS_BATTLE_SETUP_H
diff --git a/include/constants/trainer_hill.h b/include/constants/trainer_hill.h
index cab56a5ac..09dad5212 100644
--- a/include/constants/trainer_hill.h
+++ b/include/constants/trainer_hill.h
@@ -1,27 +1,45 @@
#ifndef GUARD_CONSTANTS_TRAINER_HILL_H
#define GUARD_CONSTANTS_TRAINER_HILL_H
+#define TRAINER_HILL_1F 1
+#define TRAINER_HILL_2F 2
+#define TRAINER_HILL_3F 3
+#define TRAINER_HILL_4F 4
+#define TRAINER_HILL_ROOF 5
+#define TRAINER_HILL_ENTRANCE 6
+
+#define NUM_TRAINER_HILL_FLOORS 4
+
+#define NUM_TRAINER_HILL_PRIZE_LISTS 10
+
#define TRAINER_HILL_FUNC_START 0
-#define TRAINER_HILL_FUNC_1 1
-#define TRAINER_HILL_FUNC_2 2
-#define TRAINER_HILL_FUNC_3 3
+#define TRAINER_HILL_FUNC_GET_OWNER_STATE 1
+#define TRAINER_HILL_FUNC_GIVE_PRIZE 2
+#define TRAINER_HILL_FUNC_CHECK_FINAL_TIME 3
#define TRAINER_HILL_FUNC_RESUME_TIMER 4
#define TRAINER_HILL_FUNC_SET_LOST 5
#define TRAINER_HILL_FUNC_GET_CHALLENGE_STATUS 6
-#define TRAINER_HILL_FUNC_7 7
-#define TRAINER_HILL_FUNC_8 8
-#define TRAINER_HILL_FUNC_9 9
-#define TRAINER_HILL_FUNC_IS_IN 10
-#define TRAINER_HILL_FUNC_11 11
-#define TRAINER_HILL_FUNC_12 12
-#define TRAINER_HILL_FUNC_13 13
-#define TRAINER_HILL_FUNC_14 14
-#define TRAINER_HILL_FUNC_15 15
-#define TRAINER_HILL_FUNC_16 16
+#define TRAINER_HILL_FUNC_GET_CHALLENGE_TIME 7
+#define TRAINER_HILL_FUNC_GET_ALL_FLOORS_USED 8
+#define TRAINER_HILL_FUNC_CLEAR_RESULT 9
+#define TRAINER_HILL_FUNC_IN_CHALLENGE 10
+#define TRAINER_HILL_FUNC_POST_BATTLE_TEXT 11
+#define TRAINER_HILL_FUNC_SET_ALL_TRAINER_FLAGS 12
+#define TRAINER_HILL_FUNC_GET_GAME_SAVED 13
+#define TRAINER_HILL_FUNC_SET_GAME_SAVED 14
+#define TRAINER_HILL_FUNC_CLEAR_GAME_SAVED 15
+#define TRAINER_HILL_FUNC_GET_WON 16
#define TRAINER_HILL_FUNC_SET_TAG 17
-// Values returned by the TrainerHillGetChallengeStatus
-// function.
+#define TRAINER_HILL_TEXT_INTRO 2
+#define TRAINER_HILL_TEXT_PLAYER_LOST 3
+#define TRAINER_HILL_TEXT_PLAYER_WON 4
+#define TRAINER_HILL_TEXT_AFTER 5
+
+#define HILL_TRAINER_TYPE_EREADER 4
+#define HILL_TRAINER_TYPE_NPC 8
+
+// Values returned by TrainerHillGetChallengeStatus
#define TRAINER_HILL_PLAYER_STATUS_LOST 0
#define TRAINER_HILL_PLAYER_STATUS_ECARD_SCANNED 1
#define TRAINER_HILL_PLAYER_STATUS_NORMAL 2
diff --git a/include/event_scripts.h b/include/event_scripts.h
index f79f0adcc..3e4251cf6 100644
--- a/include/event_scripts.h
+++ b/include/event_scripts.h
@@ -582,6 +582,6 @@ extern const u8 SecretBase_EventScript_TreeUseSecretPower[];
extern const u8 SecretBase_EventScript_ShrubUseSecretPower[];
// trainer hill
-extern const u8 EventScript_2C83F0[];
+extern const u8 TrainerHill_EventScript_TrainerBattle[];
#endif // GUARD_EVENT_SCRIPTS_H
diff --git a/include/global.h b/include/global.h
index 94dfebc28..b976a247d 100644
--- a/include/global.h
+++ b/include/global.h
@@ -391,11 +391,11 @@ struct BattleFrontier
/*0xEBA*/ u16 field_EBA;
/*0xEBC*/ u32 battlesCount;
/*0xEC0*/ u16 field_EC0[16];
- /*0xEE0*/ u8 field_EE0;
+ /*0xEE0*/ u8 trainerFlags;
/*0xEE1*/ u8 opponentName[2][PLAYER_NAME_LENGTH + 1];
/*0xEF1*/ u8 field_EF1[2][4];
- /*0xEF9*/ u8 field_EF9_0:7;
- /*0xEF9*/ u8 field_EF9_1:1;
+ /*0xEF9*/ u8 neverRead:7;
+ /*0xEF9*/ u8 savedGame:1;
/*0xEFA*/ u8 field_EFA;
/*0xEFB*/ u8 field_EFB;
/*0xEFC*/ struct FrontierMonData field_EFC[3];
@@ -806,15 +806,15 @@ struct SaveTrainerHill
{
/*0x3D64*/ u32 timer;
/*0x3D68*/ u32 bestTime;
- /*0x3D6C*/ u8 field_3D6C;
+ /*0x3D6C*/ u8 neverRead;
/*0x3D6D*/ u8 unused;
- /*0x3D6E*/ u16 field_3D6E_0a:1; // 1
- /*0x3D6E*/ u16 field_3D6E_0b:1; // 2
- /*0x3D6E*/ u16 field_3D6E_0c:1; // 4
- /*0x3D6E*/ u16 hasLost:1; // 8
- /*0x3D6E*/ u16 maybeECardScanDuringChallenge:1; // x10
- /*0x3D6E*/ u16 field_3D6E_0f:1; // x20
- /*0x3D6E*/ u16 tag:2; // x40, x80 = xC0
+ /*0x3D6E*/ u16 receivedPrize:1;
+ /*0x3D6E*/ u16 checkedFinalTime:1;
+ /*0x3D6E*/ u16 spokeToOwner:1;
+ /*0x3D6E*/ u16 hasLost:1;
+ /*0x3D6E*/ u16 maybeECardScanDuringChallenge:1;
+ /*0x3D6E*/ u16 field_3D6E_0f:1;
+ /*0x3D6E*/ u16 tag:2;
};
struct MysteryEventStruct
diff --git a/include/trainer_hill.h b/include/trainer_hill.h
index a592ef580..dec38b2f3 100644
--- a/include/trainer_hill.h
+++ b/include/trainer_hill.h
@@ -32,15 +32,15 @@ struct TrHillDisplay
struct TrHillFloor
{
- u8 unk0;
- u8 unk1;
+ u8 trainerNum1;
+ u8 trainerNum2;
struct TrainerHillTrainer trainers[2];
struct TrHillDisplay display;
};
struct TrHillTag
{
- u8 unkField_0;
+ u8 trainerType;
u8 unused1;
u8 numFloors;
u32 checksum;
@@ -60,22 +60,21 @@ void CopyTrainerHillTrainerText(u8 which, u16 trainerId);
bool8 InTrainerHillChallenge(void);
void nullsub_129(void);
void PrintOnTrainerHillRecordsWindow(void);
-void sub_81D5DF8(void);
-bool32 sub_81D5F48(void);
-void sub_81D5FB4(u16 *mapArg);
+void LoadTrainerHillEventObjectTemplates(void);
+bool32 LoadTrainerHillFloorEventObjectScripts(void);
+void GenerateTrainerHillFloorLayout(u16 *mapArg);
bool32 InTrainerHill(void);
u8 GetCurrentTrainerHillMapId(void);
-const struct WarpEvent* sub_81D6120(void);
-const struct WarpEvent* sub_81D6134(u8 warpEventId);
+const struct WarpEvent* SetWarpDestinationTrainerHill4F(void);
+const struct WarpEvent* SetWarpDestinationTrainerHillFinalFloor(u8 warpEventId);
u16 LocalIdToHillTrainerId(u8 localId);
bool8 GetHillTrainerFlag(u8 eventObjectId);
void SetHillTrainerFlag(void);
const u8 *GetTrainerHillTrainerScript(void);
void FillHillTrainerParty(void);
void FillHillTrainersParties(void);
-u32 sub_81D63C4(void);
u8 GetTrainerEncounterMusicIdInTrainerHill(u16 trainerId);
-u8 sub_81D6490(void);
+u8 GetNumFloorsInTrainerHillChallenge(void);
void sub_81D64C0(void);
bool32 sub_81D6534(void);
diff --git a/src/battle_message.c b/src/battle_message.c
index fd4213baf..1701f26ec 100644
--- a/src/battle_message.c
+++ b/src/battle_message.c
@@ -24,6 +24,7 @@
#include "constants/items.h"
#include "constants/moves.h"
#include "constants/trainers.h"
+#include "constants/trainer_hill.h"
struct BattleWindowText
{
@@ -2574,7 +2575,7 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst)
}
else if (gBattleTypeFlags & BATTLE_TYPE_TRAINER_HILL)
{
- CopyTrainerHillTrainerText(4, gTrainerBattleOpponent_A);
+ CopyTrainerHillTrainerText(TRAINER_HILL_TEXT_PLAYER_WON, gTrainerBattleOpponent_A);
toCpy = gStringVar4;
}
else
@@ -2590,7 +2591,7 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst)
}
else if (gBattleTypeFlags & BATTLE_TYPE_TRAINER_HILL)
{
- CopyTrainerHillTrainerText(3, gTrainerBattleOpponent_A);
+ CopyTrainerHillTrainerText(TRAINER_HILL_TEXT_PLAYER_LOST, gTrainerBattleOpponent_A);
toCpy = gStringVar4;
}
break;
@@ -2671,7 +2672,7 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst)
}
else if (gBattleTypeFlags & BATTLE_TYPE_TRAINER_HILL)
{
- CopyTrainerHillTrainerText(4, gTrainerBattleOpponent_B);
+ CopyTrainerHillTrainerText(TRAINER_HILL_TEXT_PLAYER_WON, gTrainerBattleOpponent_B);
toCpy = gStringVar4;
}
else
@@ -2687,7 +2688,7 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst)
}
else if (gBattleTypeFlags & BATTLE_TYPE_TRAINER_HILL)
{
- CopyTrainerHillTrainerText(3, gTrainerBattleOpponent_B);
+ CopyTrainerHillTrainerText(TRAINER_HILL_TEXT_PLAYER_LOST, gTrainerBattleOpponent_B);
toCpy = gStringVar4;
}
break;
diff --git a/src/battle_setup.c b/src/battle_setup.c
index 77d98def7..b98b5df06 100644
--- a/src/battle_setup.c
+++ b/src/battle_setup.c
@@ -1,25 +1,18 @@
#include "global.h"
-#include "constants/trainers.h"
#include "battle.h"
-#include "constants/battle_setup.h"
#include "battle_setup.h"
#include "battle_transition.h"
#include "main.h"
#include "task.h"
#include "safari_zone.h"
#include "script.h"
-#include "constants/game_stat.h"
#include "event_data.h"
-#include "constants/species.h"
-#include "constants/songs.h"
#include "metatile_behavior.h"
-#include "constants/maps.h"
#include "field_player_avatar.h"
#include "fieldmap.h"
#include "random.h"
#include "starter_choose.h"
#include "script_pokemon_80F8.h"
-#include "constants/items.h"
#include "palette.h"
#include "window.h"
#include "event_object_movement.h"
@@ -42,10 +35,18 @@
#include "fldeff_misc.h"
#include "field_control_avatar.h"
#include "mirage_tower.h"
-#include "constants/map_types.h"
-#include "constants/battle_frontier.h"
#include "field_screen_effect.h"
#include "data.h"
+#include "constants/battle_frontier.h"
+#include "constants/battle_setup.h"
+#include "constants/game_stat.h"
+#include "constants/items.h"
+#include "constants/songs.h"
+#include "constants/map_types.h"
+#include "constants/maps.h"
+#include "constants/species.h"
+#include "constants/trainers.h"
+#include "constants/trainer_hill.h"
enum
{
@@ -1140,7 +1141,7 @@ const u8 *BattleSetup_ConfigureTrainerBattle(const u8 *data)
case TRAINER_BATTLE_SET_TRAINER_B:
TrainerBattleLoadArgs(sTrainerBOrdinaryBattleParams, data);
return NULL;
- case TRAINER_BATTLE_12:
+ case TRAINER_BATTLE_HILL:
if (gApproachingTrainerId == 0)
{
TrainerBattleLoadArgs(sOrdinaryBattleParams, data);
@@ -1364,9 +1365,9 @@ void ShowTrainerIntroSpeech(void)
else if (InTrainerHillChallenge())
{
if (gNoOfApproachingTrainers == 0 || gNoOfApproachingTrainers == 1)
- CopyTrainerHillTrainerText(2, LocalIdToHillTrainerId(gSpecialVar_LastTalked));
+ CopyTrainerHillTrainerText(TRAINER_HILL_TEXT_INTRO, LocalIdToHillTrainerId(gSpecialVar_LastTalked));
else
- CopyTrainerHillTrainerText(2, LocalIdToHillTrainerId(gEventObjects[gApproachingTrainers[gApproachingTrainerId].eventObjectId].localId));
+ CopyTrainerHillTrainerText(TRAINER_HILL_TEXT_INTRO, LocalIdToHillTrainerId(gEventObjects[gApproachingTrainers[gApproachingTrainerId].eventObjectId].localId));
sub_80982B8();
}
diff --git a/src/data/battle_frontier/trainer_hill.h b/src/data/battle_frontier/trainer_hill.h
index 54d49422a..fe98477b9 100644
--- a/src/data/battle_frontier/trainer_hill.h
+++ b/src/data/battle_frontier/trainer_hill.h
@@ -1,16 +1,17 @@
#define TRAINER_HILL_OTID 0x10000000
-static const struct TrHillTag gUnknown_0862609C = {
- .unkField_0 = 4,
+static const struct TrHillTag sDataTagEReader = {
+ .trainerType = HILL_TRAINER_TYPE_EREADER,
.unused1 = 1,
.numFloors = 2,
.checksum = 0x0
};
-static const struct TrHillFloor gUnknown_0862609C_floors[] = {
+// In the JP Version of Trainer Hill, if there was an odd number of E-Reader trainers then one would be paired with an NPC
+static const struct TrHillFloor sDataTagEReader_Floors[] = {
[0] = {
- .unk0 = 0,
- .unk1 = 0,
+ .trainerNum1 = 0,
+ .trainerNum2 = 0,
.trainers = {
[0] = {
.name = __("シゲノブ$$$$ "),
@@ -33,7 +34,7 @@ static const struct TrHillFloor gUnknown_0862609C_floors[] = {
.speedEV = 100,
.spAttackEV = 0,
.spDefenseEV = 100,
- .otId = 0x10000000,
+ .otId = TRAINER_HILL_OTID,
.hpIV = 5,
.attackIV = 5,
.defenseIV = 5,
@@ -57,7 +58,7 @@ static const struct TrHillFloor gUnknown_0862609C_floors[] = {
.speedEV = 0,
.spAttackEV = 150,
.spDefenseEV = 120,
- .otId = 0x10000000,
+ .otId = TRAINER_HILL_OTID,
.hpIV = 5,
.attackIV = 5,
.defenseIV = 5,
@@ -81,7 +82,7 @@ static const struct TrHillFloor gUnknown_0862609C_floors[] = {
.speedEV = 0,
.spAttackEV = 0,
.spDefenseEV = 200,
- .otId = 0x10000000,
+ .otId = TRAINER_HILL_OTID,
.hpIV = 5,
.attackIV = 5,
.defenseIV = 5,
@@ -122,7 +123,7 @@ static const struct TrHillFloor gUnknown_0862609C_floors[] = {
.speedEV = 0,
.spAttackEV = 100,
.spDefenseEV = 100,
- .otId = 0x10000000,
+ .otId = TRAINER_HILL_OTID,
.hpIV = 5,
.attackIV = 5,
.defenseIV = 5,
@@ -146,7 +147,7 @@ static const struct TrHillFloor gUnknown_0862609C_floors[] = {
.speedEV = 0,
.spAttackEV = 100,
.spDefenseEV = 100,
- .otId = 0x10000000,
+ .otId = TRAINER_HILL_OTID,
.hpIV = 5,
.attackIV = 5,
.defenseIV = 5,
@@ -170,7 +171,7 @@ static const struct TrHillFloor gUnknown_0862609C_floors[] = {
.speedEV = 0,
.spAttackEV = 100,
.spDefenseEV = 100,
- .otId = 0x10000000,
+ .otId = TRAINER_HILL_OTID,
.hpIV = 5,
.attackIV = 5,
.defenseIV = 5,
@@ -194,8 +195,8 @@ static const struct TrHillFloor gUnknown_0862609C_floors[] = {
}
},
[1] = {
- .unk0 = 0,
- .unk1 = 0,
+ .trainerNum1 = 0,
+ .trainerNum2 = 0,
.trainers = {
[0] = {
.name = __("シゲゾウ$$$$ "),
@@ -218,7 +219,7 @@ static const struct TrHillFloor gUnknown_0862609C_floors[] = {
.speedEV = 120,
.spAttackEV = 150,
.spDefenseEV = 0,
- .otId = 0x10000000,
+ .otId = TRAINER_HILL_OTID,
.hpIV = 5,
.attackIV = 5,
.defenseIV = 5,
@@ -242,7 +243,7 @@ static const struct TrHillFloor gUnknown_0862609C_floors[] = {
.speedEV = 0,
.spAttackEV = 100,
.spDefenseEV = 100,
- .otId = 0x10000000,
+ .otId = TRAINER_HILL_OTID,
.hpIV = 5,
.attackIV = 5,
.defenseIV = 5,
@@ -266,7 +267,7 @@ static const struct TrHillFloor gUnknown_0862609C_floors[] = {
.speedEV = 0,
.spAttackEV = 110,
.spDefenseEV = 100,
- .otId = 0x10000000,
+ .otId = TRAINER_HILL_OTID,
.hpIV = 5,
.attackIV = 5,
.defenseIV = 5,
@@ -307,7 +308,7 @@ static const struct TrHillFloor gUnknown_0862609C_floors[] = {
.speedEV = 0,
.spAttackEV = 110,
.spDefenseEV = 100,
- .otId = 0x10000000,
+ .otId = TRAINER_HILL_OTID,
.hpIV = 5,
.attackIV = 5,
.defenseIV = 5,
@@ -331,7 +332,7 @@ static const struct TrHillFloor gUnknown_0862609C_floors[] = {
.speedEV = 100,
.spAttackEV = 110,
.spDefenseEV = 100,
- .otId = 0x10000000,
+ .otId = TRAINER_HILL_OTID,
.hpIV = 5,
.attackIV = 5,
.defenseIV = 5,
@@ -355,7 +356,7 @@ static const struct TrHillFloor gUnknown_0862609C_floors[] = {
.speedEV = 80,
.spAttackEV = 80,
.spDefenseEV = 80,
- .otId = 0x10000000,
+ .otId = TRAINER_HILL_OTID,
.hpIV = 5,
.attackIV = 5,
.defenseIV = 5,
@@ -382,18 +383,18 @@ static const struct TrHillFloor gUnknown_0862609C_floors[] = {
static const struct TrHillTag sDataTagNormal =
{
- .unkField_0 = 8,
+ .trainerType = HILL_TRAINER_TYPE_NPC,
.unused1 = 2,
.numFloors = 4,
.checksum = 0x00051E05
};
-static const struct TrHillFloor sDataTagNormal_floors[] =
+static const struct TrHillFloor sDataTagNormal_Floors[] =
{
[0] =
{
- .unk0 = 0x11,
- .unk1 = 0x12,
+ .trainerNum1 = 17,
+ .trainerNum2 = 18,
.trainers =
{
[0] =
@@ -694,8 +695,8 @@ static const struct TrHillFloor sDataTagNormal_floors[] =
},
[1] =
{
- .unk0 = 0x13,
- .unk1 = 0x14,
+ .trainerNum1 = 19,
+ .trainerNum2 = 20,
.trainers =
{
[0] =
@@ -999,8 +1000,8 @@ static const struct TrHillFloor sDataTagNormal_floors[] =
},
[2] =
{
- .unk0 = 0x15,
- .unk1 = 0x16,
+ .trainerNum1 = 21,
+ .trainerNum2 = 22,
.trainers =
{
[0] =
@@ -1303,8 +1304,8 @@ static const struct TrHillFloor sDataTagNormal_floors[] =
},
[3] =
{
- .unk0 = 0x17,
- .unk1 = 0x18,
+ .trainerNum1 = 23,
+ .trainerNum2 = 24,
.trainers =
{
[0] =
@@ -1602,17 +1603,17 @@ static const struct TrHillFloor sDataTagNormal_floors[] =
static const struct TrHillTag sDataTagVariety =
{
- .unkField_0 = 8,
+ .trainerType = HILL_TRAINER_TYPE_NPC,
.unused1 = 1,
.numFloors = 4,
.checksum = 0x00054C15
};
-static const struct TrHillFloor sDataTagVariety_floors[] = {
+static const struct TrHillFloor sDataTagVariety_Floors[] = {
[0] =
{
- .unk0 = 0x29,
- .unk1 = 0x2A,
+ .trainerNum1 = 41,
+ .trainerNum2 = 42,
.trainers =
{
[0] =
@@ -1904,8 +1905,8 @@ static const struct TrHillFloor sDataTagVariety_floors[] = {
},
[1] =
{
- .unk0 = 0x2B,
- .unk1 = 0x2C,
+ .trainerNum1 = 43,
+ .trainerNum2 = 44,
.trainers =
{
[0] =
@@ -2227,8 +2228,8 @@ static const struct TrHillFloor sDataTagVariety_floors[] = {
},
[2] =
{
- .unk0 = 0x2D,
- .unk1 = 0x2E,
+ .trainerNum1 = 45,
+ .trainerNum2 = 46,
.trainers =
{
[0] =
@@ -2531,8 +2532,8 @@ static const struct TrHillFloor sDataTagVariety_floors[] = {
},
[3] =
{
- .unk0 = 0x2F,
- .unk1 = 0x30,
+ .trainerNum1 = 47,
+ .trainerNum2 = 48,
.trainers =
{
[0] =
@@ -2828,17 +2829,17 @@ static const struct TrHillFloor sDataTagVariety_floors[] = {
static const struct TrHillTag sDataTagUnique =
{
- .unkField_0 = 8,
+ .trainerType = HILL_TRAINER_TYPE_NPC,
.unused1 = 3,
.numFloors = 4,
.checksum = 0x000652F3
};
-static const struct TrHillFloor sDataTagUnique_floors[] = {
+static const struct TrHillFloor sDataTagUnique_Floors[] = {
[0] =
{
- .unk0 = 0x31,
- .unk1 = 0x32,
+ .trainerNum1 = 49,
+ .trainerNum2 = 50,
.trainers =
{
[0] =
@@ -3135,8 +3136,8 @@ static const struct TrHillFloor sDataTagUnique_floors[] = {
},
[1] =
{
- .unk0 = 0x33,
- .unk1 = 0x34,
+ .trainerNum1 = 51,
+ .trainerNum2 = 52,
.trainers =
{
[0] =
@@ -3439,8 +3440,8 @@ static const struct TrHillFloor sDataTagUnique_floors[] = {
},
[2] =
{
- .unk0 = 0x35,
- .unk1 = 0x36,
+ .trainerNum1 = 53,
+ .trainerNum2 = 54,
.trainers =
{
[0] =
@@ -3743,8 +3744,8 @@ static const struct TrHillFloor sDataTagUnique_floors[] = {
},
[3] =
{
- .unk0 = 0x38,
- .unk1 = 0x37,
+ .trainerNum1 = 56,
+ .trainerNum2 = 55,
.trainers =
{
[0] =
@@ -4039,17 +4040,17 @@ static const struct TrHillFloor sDataTagUnique_floors[] = {
static const struct TrHillTag sDataTagExpert =
{
- .unkField_0 = 8,
+ .trainerType = HILL_TRAINER_TYPE_NPC,
.unused1 = 1,
.numFloors = 4,
.checksum = 0x00061F3F
};
-static const struct TrHillFloor sDataTagExpert_floors[] = {
+static const struct TrHillFloor sDataTagExpert_Floors[] = {
[0] =
{
- .unk0 = 0x39,
- .unk1 = 0x3A,
+ .trainerNum1 = 57,
+ .trainerNum2 = 58,
.trainers =
{
[0] =
@@ -4353,8 +4354,8 @@ static const struct TrHillFloor sDataTagExpert_floors[] = {
},
[1] =
{
- .unk0 = 0x3B,
- .unk1 = 0x3C,
+ .trainerNum1 = 59,
+ .trainerNum2 = 60,
.trainers =
{
[0] =
@@ -4658,8 +4659,8 @@ static const struct TrHillFloor sDataTagExpert_floors[] = {
},
[2] =
{
- .unk0 = 0x3D,
- .unk1 = 0x3E,
+ .trainerNum1 = 61,
+ .trainerNum2 = 62,
.trainers =
{
[0] =
@@ -4963,8 +4964,8 @@ static const struct TrHillFloor sDataTagExpert_floors[] = {
},
[3] =
{
- .unk0 = 0x3F,
- .unk1 = 0x40,
+ .trainerNum1 = 63,
+ .trainerNum2 = 64,
.trainers =
{
[0] =
diff --git a/src/ereader_helpers.c b/src/ereader_helpers.c
index 7f0887790..229c214ad 100755
--- a/src/ereader_helpers.c
+++ b/src/ereader_helpers.c
@@ -448,7 +448,7 @@ static bool32 TryWriteTrainerHill_r(struct EReaderTrainerHillSet *ttdata, struct
AGB_ASSERT_EX(ttdata->id == 0, "cereader_tool.c", 452);
memset(buffer2, 0, 0x1000);
- buffer2->unkField_0 = ttdata->count;
+ buffer2->trainerType = ttdata->count;
buffer2->unused1 = sub_81D38D4();
buffer2->numFloors = (ttdata->count + 1) / 2;
@@ -456,13 +456,13 @@ static bool32 TryWriteTrainerHill_r(struct EReaderTrainerHillSet *ttdata, struct
{
if (!(i & 1))
{
- buffer2->floors[i / 2].unk0 = ttdata->unk_8[i].unk0;
+ buffer2->floors[i / 2].trainerNum1 = ttdata->unk_8[i].unk0;
buffer2->floors[i / 2].display = ttdata->unk_8[i].unk14C;
buffer2->floors[i / 2].trainers[0] = ttdata->unk_8[i].unk4;
}
else
{
- buffer2->floors[i / 2].unk1 = ttdata->unk_8[i].unk0;
+ buffer2->floors[i / 2].trainerNum2 = ttdata->unk_8[i].unk0;
buffer2->floors[i / 2].trainers[1] = ttdata->unk_8[i].unk4;
}
}
diff --git a/src/field_control_avatar.c b/src/field_control_avatar.c
index faa906637..41b7a4dbf 100644
--- a/src/field_control_avatar.c
+++ b/src/field_control_avatar.c
@@ -33,6 +33,7 @@
#include "constants/map_types.h"
#include "constants/maps.h"
#include "constants/songs.h"
+#include "constants/trainer_hill.h"
static EWRAM_DATA u8 sWildEncounterImmunitySteps = 0;
static EWRAM_DATA u16 sPreviousPlayerMetatileBehavior = 0;
@@ -792,20 +793,16 @@ static void SetupWarp(struct MapHeader *unused, s8 warpEventId, struct MapPositi
if (trainerHillMapId)
{
- if (trainerHillMapId == sub_81D6490())
+ if (trainerHillMapId == GetNumFloorsInTrainerHillChallenge())
{
if (warpEventId == 0)
- {
warpEvent = &gMapHeader.events->warps[0];
- }
else
- {
- warpEvent = sub_81D6120();
- }
+ warpEvent = SetWarpDestinationTrainerHill4F();
}
- else if (trainerHillMapId == 5)
+ else if (trainerHillMapId == TRAINER_HILL_ROOF)
{
- warpEvent = sub_81D6134(warpEventId);
+ warpEvent = SetWarpDestinationTrainerHillFinalFloor(warpEventId);
}
else
{
diff --git a/src/fieldmap.c b/src/fieldmap.c
index b2b80a2df..f595803ff 100644
--- a/src/fieldmap.c
+++ b/src/fieldmap.c
@@ -75,7 +75,7 @@ void InitBattlePyramidMap(bool8 setPlayerPosition)
void InitTrainerHillMap(void)
{
CpuFastFill(0x03ff03ff, gBackupMapData, sizeof(gBackupMapData));
- sub_81D5FB4(gBackupMapData);
+ GenerateTrainerHillFloorLayout(gBackupMapData);
}
static void InitMapLayoutData(struct MapHeader *mapHeader)
diff --git a/src/overworld.c b/src/overworld.c
index 42a39d03e..c2e3d2789 100644
--- a/src/overworld.c
+++ b/src/overworld.c
@@ -64,6 +64,7 @@
#include "constants/region_map_sections.h"
#include "constants/songs.h"
#include "constants/species.h"
+#include "constants/trainer_hill.h"
#include "constants/weather.h"
#define PLAYER_TRADING_STATE_IDLE 0x80
@@ -854,7 +855,7 @@ static void mli0_load_map(u32 a1)
if (gMapHeader.mapLayoutId == LAYOUT_BATTLE_FRONTIER_BATTLE_PYRAMID_EMPTY_SQUARE)
LoadBattlePyramidEventObjectTemplates();
else if (InTrainerHill())
- sub_81D5DF8();
+ LoadTrainerHillEventObjectTemplates();
else
LoadEventObjTemplatesFromHeader();
}
@@ -1721,8 +1722,8 @@ void CB2_ContinueSavedGame(void)
trainerHillMapId = GetCurrentTrainerHillMapId();
if (gMapHeader.mapLayoutId == LAYOUT_BATTLE_FRONTIER_BATTLE_PYRAMID_EMPTY_SQUARE)
LoadBattlePyramidFloorEventObjectScripts();
- else if (trainerHillMapId != 0 && trainerHillMapId != 6)
- sub_81D5F48();
+ else if (trainerHillMapId != 0 && trainerHillMapId != TRAINER_HILL_ENTRANCE)
+ LoadTrainerHillFloorEventObjectScripts();
else
LoadSaveblockEventObjScripts();
diff --git a/src/trainer_hill.c b/src/trainer_hill.c
index af6b0621d..40b5750f4 100644
--- a/src/trainer_hill.c
+++ b/src/trainer_hill.c
@@ -22,6 +22,7 @@
#include "trainer_hill.h"
#include "window.h"
#include "util.h"
+#include "constants/battle_ai.h"
#include "constants/event_object_movement_constants.h"
#include "constants/event_objects.h"
#include "constants/items.h"
@@ -45,7 +46,7 @@ struct TrHillStruct2
{
u8 floorId;
struct TrHillTag tag;
- struct TrHillFloor floors[4];
+ struct TrHillFloor floors[NUM_TRAINER_HILL_FLOORS];
};
static EWRAM_DATA struct TrHillStruct2 *sHillData = NULL;
@@ -54,30 +55,30 @@ EWRAM_DATA u32 *gTrainerHillVBlankCounter = NULL;
// This file's functions.
static void TrainerHillStartChallenge(void);
-static void sub_81D58D8(void);
-static void sub_81D5924(void);
-static void sub_81D59D0(void);
+static void GetOwnerState(void);
+static void GiveChallengePrize(void);
+static void CheckFinalTime(void);
static void TrainerHillResumeTimer(void);
static void TrainerHillSetPlayerLost(void);
static void TrainerHillGetChallengeStatus(void);
-static void sub_81D5B2C(void);
-static void sub_81D5BBC(void);
-static void sub_81D5C00(void);
-static void GetInTrainerHill(void);
-static void sub_81D62B4(void);
-static void sub_81D64AC(void);
-static void sub_81D64DC(void);
-static void sub_81D64FC(void);
-static void sub_81D6518(void);
-static void sub_81D6568(void);
+static void BufferChallengeTime(void);
+static void GetAllFloorsUsed(void);
+static void ClearVarResult(void);
+static void IsTrainerHillChallengeActive(void);
+static void ShowTrainerHillPostBattleText(void);
+static void SetAllTrainerFlags(void);
+static void GetGameSaved(void);
+static void SetGameSaved(void);
+static void ClearGameSaved(void);
+static void GetChallengeWon(void);
static void TrainerHillSetTag(void);
static void SetUpDataStruct(void);
static void FreeDataStruct(void);
static void nullsub_2(void);
static void SetTimerValue(u32 *dst, u32 val);
static u32 GetTimerValue(u32 *src);
-static void sub_81D642C(struct Pokemon *mon, u8 level);
-static u16 sub_81D6640(void);
+static void SetTrainerHillMonLevel(struct Pokemon *mon, u8 level);
+static u16 GetPrizeItemId(void);
// const data
#include "data/battle_frontier/trainer_hill.h"
@@ -86,7 +87,7 @@ struct
{
u8 trainerClass;
u8 musicId;
-} static const gUnknown_0862A3B4[] =
+} static const sTrainerClassesAndMusic[] =
{
{TRAINER_CLASS_TEAM_AQUA, TRAINER_ENCOUNTER_MUSIC_AQUA},
{TRAINER_CLASS_AQUA_ADMIN, TRAINER_ENCOUNTER_MUSIC_AQUA},
@@ -144,63 +145,64 @@ struct
{TRAINER_CLASS_SCHOOL_KID, TRAINER_ENCOUNTER_MUSIC_MALE},
};
-static const u16 gUnknown_0862A48C[] = {ITEM_RARE_CANDY, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL};
-static const u16 gUnknown_0862A498[] = {ITEM_LUXURY_BALL, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL};
-static const u16 gUnknown_0862A4A4[] = {ITEM_MAX_REVIVE, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL};
-static const u16 gUnknown_0862A4B0[] = {ITEM_MAX_ETHER, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL};
-static const u16 gUnknown_0862A4BC[] = {ITEM_ELIXIR, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL};
-static const u16 gUnknown_0862A4C8[] = {ITEM_TM05_ROAR, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL};
-static const u16 gUnknown_0862A4D4[] = {ITEM_TM36_SLUDGE_BOMB, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL};
-static const u16 gUnknown_0862A4E0[] = {ITEM_TM06_TOXIC, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL};
-static const u16 gUnknown_0862A4EC[] = {ITEM_TM11_SUNNY_DAY, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL};
-static const u16 gUnknown_0862A4F8[] = {ITEM_TM26_EARTHQUAKE, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL};
-static const u16 gUnknown_0862A504[] = {ITEM_RARE_CANDY, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL};
-static const u16 gUnknown_0862A510[] = {ITEM_LUXURY_BALL, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL};
-static const u16 gUnknown_0862A51C[] = {ITEM_MAX_REVIVE, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL};
-static const u16 gUnknown_0862A528[] = {ITEM_MAX_ETHER, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL};
-static const u16 gUnknown_0862A534[] = {ITEM_ELIXIR, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL};
-static const u16 gUnknown_0862A540[] = {ITEM_TM31_BRICK_BREAK, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL};
-static const u16 gUnknown_0862A54C[] = {ITEM_TM41_TORMENT, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL};
-static const u16 gUnknown_0862A558[] = {ITEM_TM48_SKILL_SWAP, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL};
-static const u16 gUnknown_0862A564[] = {ITEM_TM19_GIGA_DRAIN, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL};
-static const u16 gUnknown_0862A570[] = {ITEM_TM45_ATTRACT, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL};
-
-static const u16 *const gUnknown_0862A57C[] =
-{
- gUnknown_0862A48C,
- gUnknown_0862A498,
- gUnknown_0862A4A4,
- gUnknown_0862A4B0,
- gUnknown_0862A4BC,
- gUnknown_0862A4C8,
- gUnknown_0862A4D4,
- gUnknown_0862A4E0,
- gUnknown_0862A4EC,
- gUnknown_0862A4F8
+static const u16 sPrizeListRareCandy1[] = {ITEM_RARE_CANDY, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL};
+static const u16 sPrizeListLuxuryBall1[] = {ITEM_LUXURY_BALL, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL};
+static const u16 sPrizeListMaxRevive1[] = {ITEM_MAX_REVIVE, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL};
+static const u16 sPrizeListMaxEther1[] = {ITEM_MAX_ETHER, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL};
+static const u16 sPrizeListElixir1[] = {ITEM_ELIXIR, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL};
+static const u16 sPrizeListRoar[] = {ITEM_TM05_ROAR, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL};
+static const u16 sPrizeListSludgeBomb[] = {ITEM_TM36_SLUDGE_BOMB, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL};
+static const u16 sPrizeListToxic[] = {ITEM_TM06_TOXIC, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL};
+static const u16 sPrizeListSunnyDay[] = {ITEM_TM11_SUNNY_DAY, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL};
+static const u16 sPrizeListEarthQuake[] = {ITEM_TM26_EARTHQUAKE, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL};
+
+static const u16 sPrizeListRareCandy2[] = {ITEM_RARE_CANDY, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL};
+static const u16 sPrizeListLuxuryBall2[] = {ITEM_LUXURY_BALL, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL};
+static const u16 sPrizeListMaxRevive2[] = {ITEM_MAX_REVIVE, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL};
+static const u16 sPrizeListMaxEther2[] = {ITEM_MAX_ETHER, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL};
+static const u16 sPrizeListElixir2[] = {ITEM_ELIXIR, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL};
+static const u16 sPrizeListBrickBreak[] = {ITEM_TM31_BRICK_BREAK, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL};
+static const u16 sPrizeListTorment[] = {ITEM_TM41_TORMENT, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL};
+static const u16 sPrizeListSkillSwap[] = {ITEM_TM48_SKILL_SWAP, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL};
+static const u16 sPrizeListGigaSwap[] = {ITEM_TM19_GIGA_DRAIN, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL};
+static const u16 sPrizeListAttract[] = {ITEM_TM45_ATTRACT, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL};
+
+static const u16 *const sPrizeLists1[NUM_TRAINER_HILL_PRIZE_LISTS] =
+{
+ sPrizeListRareCandy1,
+ sPrizeListLuxuryBall1,
+ sPrizeListMaxRevive1,
+ sPrizeListMaxEther1,
+ sPrizeListElixir1,
+ sPrizeListRoar,
+ sPrizeListSludgeBomb,
+ sPrizeListToxic,
+ sPrizeListSunnyDay,
+ sPrizeListEarthQuake
};
-static const u16 *const gUnknown_0862A5A4[] =
-{
- gUnknown_0862A504,
- gUnknown_0862A510,
- gUnknown_0862A51C,
- gUnknown_0862A528,
- gUnknown_0862A534,
- gUnknown_0862A540,
- gUnknown_0862A54C,
- gUnknown_0862A558,
- gUnknown_0862A564,
- gUnknown_0862A570
+static const u16 *const sPrizeLists2[NUM_TRAINER_HILL_PRIZE_LISTS] =
+{
+ sPrizeListRareCandy2,
+ sPrizeListLuxuryBall2,
+ sPrizeListMaxRevive2,
+ sPrizeListMaxEther2,
+ sPrizeListElixir2,
+ sPrizeListBrickBreak,
+ sPrizeListTorment,
+ sPrizeListSkillSwap,
+ sPrizeListGigaSwap,
+ sPrizeListAttract
};
-static const u16 *const *const gUnknown_0862A5CC[] =
+static const u16 *const *const sPrizeListSets[] =
{
- gUnknown_0862A57C,
- gUnknown_0862A5A4
+ sPrizeLists1,
+ sPrizeLists2
};
-static const u16 gUnknown_0862A5D4[] = INCBIN_U16("graphics/pokenav/862A5D4.gbapal");
-static const u8 sRecordWinColors[] = {0, 2, 3};
+static const u16 sUnknown_0862A5D4[] = INCBIN_U16("graphics/pokenav/862A5D4.gbapal");
+static const u8 sRecordWinColors[] = {TEXT_COLOR_TRANSPARENT, TEXT_COLOR_DARK_GREY, TEXT_COLOR_LIGHT_GREY};
static const struct TrHillTag *const sDataPerTag[] =
{
@@ -221,24 +223,24 @@ static const u8 *const sFloorStrings[] =
static void (* const sHillFunctions[])(void) =
{
- TrainerHillStartChallenge,
- sub_81D58D8,
- sub_81D5924,
- sub_81D59D0,
- TrainerHillResumeTimer,
- TrainerHillSetPlayerLost,
- TrainerHillGetChallengeStatus,
- sub_81D5B2C,
- sub_81D5BBC,
- sub_81D5C00,
- GetInTrainerHill,
- sub_81D62B4,
- sub_81D64AC,
- sub_81D64DC,
- sub_81D64FC,
- sub_81D6518,
- sub_81D6568,
- TrainerHillSetTag,
+ [TRAINER_HILL_FUNC_START] = TrainerHillStartChallenge,
+ [TRAINER_HILL_FUNC_GET_OWNER_STATE] = GetOwnerState,
+ [TRAINER_HILL_FUNC_GIVE_PRIZE] = GiveChallengePrize,
+ [TRAINER_HILL_FUNC_CHECK_FINAL_TIME] = CheckFinalTime,
+ [TRAINER_HILL_FUNC_RESUME_TIMER] = TrainerHillResumeTimer,
+ [TRAINER_HILL_FUNC_SET_LOST] = TrainerHillSetPlayerLost,
+ [TRAINER_HILL_FUNC_GET_CHALLENGE_STATUS] = TrainerHillGetChallengeStatus,
+ [TRAINER_HILL_FUNC_GET_CHALLENGE_TIME] = BufferChallengeTime,
+ [TRAINER_HILL_FUNC_GET_ALL_FLOORS_USED] = GetAllFloorsUsed,
+ [TRAINER_HILL_FUNC_CLEAR_RESULT] = ClearVarResult,
+ [TRAINER_HILL_FUNC_IN_CHALLENGE] = IsTrainerHillChallengeActive,
+ [TRAINER_HILL_FUNC_POST_BATTLE_TEXT] = ShowTrainerHillPostBattleText,
+ [TRAINER_HILL_FUNC_SET_ALL_TRAINER_FLAGS] = SetAllTrainerFlags,
+ [TRAINER_HILL_FUNC_GET_GAME_SAVED] = GetGameSaved,
+ [TRAINER_HILL_FUNC_SET_GAME_SAVED] = SetGameSaved,
+ [TRAINER_HILL_FUNC_CLEAR_GAME_SAVED] = ClearGameSaved,
+ [TRAINER_HILL_FUNC_GET_WON] = GetChallengeWon,
+ [TRAINER_HILL_FUNC_SET_TAG] = TrainerHillSetTag,
};
static const u8 *const sTagMatchStrings[] =
@@ -249,7 +251,7 @@ static const u8 *const sTagMatchStrings[] =
gText_ExpertTagMatch,
};
-static const struct EventObjectTemplate gUnknown_0862A670 =
+static const struct EventObjectTemplate sTrainerEventObjectTemplate =
{
.graphicsId = EVENT_OBJ_GFX_RIVAL_BRENDAN_NORMAL,
.elevation = 3,
@@ -259,8 +261,18 @@ static const struct EventObjectTemplate gUnknown_0862A670 =
.trainerType = 1,
};
-static const u32 gUnknown_0862A688[] = {MAP_NUM(TRAINER_HILL_2F), MAP_NUM(TRAINER_HILL_3F), MAP_NUM(TRAINER_HILL_4F), MAP_NUM(TRAINER_HILL_ROOF)};
-static const u8 gUnknown_0862A698[][3] = {{0, 1, 2}, {3, 4, 5}};
+static const u32 sNextFloorMapNum[NUM_TRAINER_HILL_FLOORS] =
+{
+ MAP_NUM(TRAINER_HILL_2F),
+ MAP_NUM(TRAINER_HILL_3F),
+ MAP_NUM(TRAINER_HILL_4F),
+ MAP_NUM(TRAINER_HILL_ROOF)
+};
+static const u8 sTrainerPartySlots[][PARTY_SIZE / 2] =
+{
+ {0, 1, 2},
+ {3, 4, 5}
+};
// code
void CallTrainerHillFunction(void)
@@ -274,8 +286,8 @@ void ResetTrainerHillResults(void)
{
s32 i;
- gSaveBlock2Ptr->frontier.field_EF9_1 = 0;
- gSaveBlock2Ptr->frontier.field_EF9_0 = 0;
+ gSaveBlock2Ptr->frontier.savedGame = FALSE;
+ gSaveBlock2Ptr->frontier.neverRead = 0;
gSaveBlock1Ptr->trainerHill.bestTime = 0;
for (i = 0; i < 4; i++)
SetTimerValue(&gSaveBlock1Ptr->trainerHillTimes[i], HILL_MAX_TIME);
@@ -366,16 +378,16 @@ void CopyTrainerHillTrainerText(u8 which, u16 trainerId)
switch (which)
{
- case 2:
+ case TRAINER_HILL_TEXT_INTRO:
FrontierSpeechToString(sHillData->floors[floorId].trainers[id].speechBefore);
break;
- case 3:
+ case TRAINER_HILL_TEXT_PLAYER_LOST:
FrontierSpeechToString(sHillData->floors[floorId].trainers[id].speechWin);
break;
- case 4:
+ case TRAINER_HILL_TEXT_PLAYER_WON:
FrontierSpeechToString(sHillData->floors[floorId].trainers[id].speechLose);
break;
- case 5:
+ case TRAINER_HILL_TEXT_AFTER:
FrontierSpeechToString(sHillData->floors[floorId].trainers[id].speechAfter);
break;
}
@@ -391,42 +403,42 @@ static void TrainerHillStartChallenge(void)
else
gSaveBlock1Ptr->trainerHill.field_3D6E_0f = 0;
- gSaveBlock1Ptr->trainerHill.field_3D6C = 0;
+ gSaveBlock1Ptr->trainerHill.neverRead = 0;
SetTrainerHillVBlankCounter(&gSaveBlock1Ptr->trainerHill.timer);
gSaveBlock1Ptr->trainerHill.timer = 0;
- gSaveBlock1Ptr->trainerHill.field_3D6E_0c = 0;
- gSaveBlock1Ptr->trainerHill.field_3D6E_0b = 0;
+ gSaveBlock1Ptr->trainerHill.spokeToOwner = 0;
+ gSaveBlock1Ptr->trainerHill.checkedFinalTime = 0;
gSaveBlock1Ptr->trainerHill.maybeECardScanDuringChallenge = 0;
- gSaveBlock2Ptr->frontier.field_EE0 = 0;
+ gSaveBlock2Ptr->frontier.trainerFlags = 0;
gBattleOutcome = 0;
- gSaveBlock1Ptr->trainerHill.field_3D6E_0a = 0;
+ gSaveBlock1Ptr->trainerHill.receivedPrize = 0;
}
-static void sub_81D58D8(void)
+static void GetOwnerState(void)
{
ClearTrainerHillVBlankCounter();
gSpecialVar_Result = 0;
- if (gSaveBlock1Ptr->trainerHill.field_3D6E_0c)
+ if (gSaveBlock1Ptr->trainerHill.spokeToOwner)
gSpecialVar_Result++;
- if (gSaveBlock1Ptr->trainerHill.field_3D6E_0a && gSaveBlock1Ptr->trainerHill.field_3D6E_0b)
+ if (gSaveBlock1Ptr->trainerHill.receivedPrize && gSaveBlock1Ptr->trainerHill.checkedFinalTime)
gSpecialVar_Result++;
- gSaveBlock1Ptr->trainerHill.field_3D6E_0c = 1;
+ gSaveBlock1Ptr->trainerHill.spokeToOwner = TRUE;
}
-static void sub_81D5924(void)
+static void GiveChallengePrize(void)
{
- u16 itemId = sub_81D6640();
+ u16 itemId = GetPrizeItemId();
- if (sHillData->tag.numFloors != 4 || gSaveBlock1Ptr->trainerHill.field_3D6E_0a)
+ if (sHillData->tag.numFloors != NUM_TRAINER_HILL_FLOORS || gSaveBlock1Ptr->trainerHill.receivedPrize)
{
gSpecialVar_Result = 2;
}
else if (AddBagItem(itemId, 1) == TRUE)
{
CopyItemName(itemId, gStringVar2);
- gSaveBlock1Ptr->trainerHill.field_3D6E_0a = 1;
- gSaveBlock2Ptr->frontier.field_EF9_0 = 0;
+ gSaveBlock1Ptr->trainerHill.receivedPrize = TRUE;
+ gSaveBlock2Ptr->frontier.neverRead = 0;
gSpecialVar_Result = 0;
}
else
@@ -435,9 +447,12 @@ static void sub_81D5924(void)
}
}
-static void sub_81D59D0(void)
+// Either the bestTime and Timer field names are incorrect or something weird is going on
+// Because when gSpecialVar_Result == 0 after this call the player is complimented on their fast time
+// And when gSpecialVar_Result == 1 theyre told that they werent very quick
+static void CheckFinalTime(void)
{
- if (gSaveBlock1Ptr->trainerHill.field_3D6E_0b)
+ if (gSaveBlock1Ptr->trainerHill.checkedFinalTime)
{
gSpecialVar_Result = 2;
}
@@ -452,12 +467,12 @@ static void sub_81D59D0(void)
gSpecialVar_Result = 1;
}
- gSaveBlock1Ptr->trainerHill.field_3D6E_0b = 1;
+ gSaveBlock1Ptr->trainerHill.checkedFinalTime = TRUE;
}
static void TrainerHillResumeTimer(void)
{
- if (!gSaveBlock1Ptr->trainerHill.field_3D6E_0c)
+ if (!gSaveBlock1Ptr->trainerHill.spokeToOwner)
{
if (gSaveBlock1Ptr->trainerHill.timer >= HILL_MAX_TIME)
gSaveBlock1Ptr->trainerHill.timer = HILL_MAX_TIME;
@@ -468,7 +483,7 @@ static void TrainerHillResumeTimer(void)
static void TrainerHillSetPlayerLost(void)
{
- gSaveBlock1Ptr->trainerHill.hasLost = 1;
+ gSaveBlock1Ptr->trainerHill.hasLost = TRUE;
}
static void TrainerHillGetChallengeStatus(void)
@@ -476,7 +491,7 @@ static void TrainerHillGetChallengeStatus(void)
if (gSaveBlock1Ptr->trainerHill.hasLost)
{
// The player lost their last match.
- gSaveBlock1Ptr->trainerHill.hasLost = 0;
+ gSaveBlock1Ptr->trainerHill.hasLost = FALSE;
gSpecialVar_Result = TRAINER_HILL_PLAYER_STATUS_LOST;
}
else if (gSaveBlock1Ptr->trainerHill.maybeECardScanDuringChallenge)
@@ -492,7 +507,7 @@ static void TrainerHillGetChallengeStatus(void)
}
}
-static void sub_81D5B2C(void)
+static void BufferChallengeTime(void)
{
s32 total, minutes, secondsWhole, secondsFraction;
@@ -511,23 +526,26 @@ static void sub_81D5B2C(void)
ConvertIntToDecimalStringN(gStringVar3, secondsFraction, STR_CONV_MODE_LEADING_ZEROS, 2);
}
-static void sub_81D5BBC(void)
+// Returns TRUE if all 4 floors are used
+// Returns FALSE otherwise, and buffers the number of floors used
+static void GetAllFloorsUsed(void)
{
SetUpDataStruct();
- if (sHillData->tag.numFloors != 4)
+ if (sHillData->tag.numFloors != NUM_TRAINER_HILL_FLOORS)
{
ConvertIntToDecimalStringN(gStringVar1, sHillData->tag.numFloors, STR_CONV_MODE_LEFT_ALIGN, 1);
- gSpecialVar_Result = 0;
+ gSpecialVar_Result = FALSE;
}
else
{
- gSpecialVar_Result = 1;
+ gSpecialVar_Result = TRUE;
}
FreeDataStruct();
}
-static void sub_81D5C00(void)
+// May have been dummied. Every time this is called a conditional for var result occurs afterwards
+static void ClearVarResult(void)
{
SetUpDataStruct();
gSpecialVar_Result = 0;
@@ -538,7 +556,7 @@ bool8 InTrainerHillChallenge(void)
{
if (VarGet(VAR_TRAINER_HILL_IS_ACTIVE) == 0)
return FALSE;
- else if (gSaveBlock1Ptr->trainerHill.field_3D6E_0c)
+ else if (gSaveBlock1Ptr->trainerHill.spokeToOwner)
return FALSE;
else if (GetCurrentTrainerHillMapId() != 0)
return TRUE;
@@ -546,12 +564,12 @@ bool8 InTrainerHillChallenge(void)
return FALSE;
}
-static void GetInTrainerHill(void)
+static void IsTrainerHillChallengeActive(void)
{
if (!InTrainerHillChallenge())
- gSpecialVar_Result = 0;
+ gSpecialVar_Result = FALSE;
else
- gSpecialVar_Result = 1;
+ gSpecialVar_Result = TRUE;
}
void nullsub_129(void)
@@ -611,12 +629,12 @@ static void SetTimerValue(u32 *dst, u32 val)
*dst = val;
}
-void sub_81D5DF8(void)
+void LoadTrainerHillEventObjectTemplates(void)
{
u8 i, floorId;
struct EventObjectTemplate *eventTemplates = gSaveBlock1Ptr->eventObjectTemplates;
- if (!sub_81D5F48())
+ if (!LoadTrainerHillFloorEventObjectScripts())
return;
SetUpDataStruct();
@@ -629,7 +647,7 @@ void sub_81D5DF8(void)
{
u8 bits;
- eventTemplates[i] = gUnknown_0862A670;
+ eventTemplates[i] = sTrainerEventObjectTemplate;
eventTemplates[i].localId = i + 1;
eventTemplates[i].graphicsId = FacilityClassToGraphicsId(sHillData->floors[floorId].trainers[i].facilityClass);
eventTemplates[i].x = sHillData->floors[floorId].display.coords[i] & 0xF;
@@ -637,16 +655,17 @@ void sub_81D5DF8(void)
bits = i << 2;
eventTemplates[i].movementType = ((sHillData->floors[floorId].display.direction >> bits) & 0xF) + MOVEMENT_TYPE_FACE_UP;
eventTemplates[i].trainerRange_berryTreeId = (sHillData->floors[floorId].display.range >> bits) & 0xF;
- eventTemplates[i].script = EventScript_2C83F0;
+ eventTemplates[i].script = TrainerHill_EventScript_TrainerBattle;
gSaveBlock2Ptr->frontier.trainerIds[i] = i + 1;
}
FreeDataStruct();
}
-bool32 sub_81D5F48(void)
+bool32 LoadTrainerHillFloorEventObjectScripts(void)
{
SetUpDataStruct();
+ // Something may have been dummied here
FreeDataStruct();
return TRUE;
}
@@ -657,8 +676,8 @@ static u32 sub_81D5F58(u8 floorId, u32 bit, u32 arg2, u32 arg3)
{
u32 var0, var1, var2, var3;
- var0 = (sHillData->floors[floorId].unk3A0[arg2] >> (15 - bit)) & 1;
- var1 = sHillData->floors[floorId].data[arg2 * arg3 + bit];
+ var0 = (sHillData->floors[floorId].display.unk3A0[arg2] >> (15 - bit)) & 1;
+ var1 = sHillData->floors[floorId].display.data[arg2 * arg3 + bit];
var3 = 0x200;
var2 = 0x3000;
@@ -716,20 +735,20 @@ static u32 sub_81D5F58(u8 floorId, u32 bit, u32 arg2, u32 arg3)
}
#endif // NONMATCHING
-void sub_81D5FB4(u16 *mapArg)
+void GenerateTrainerHillFloorLayout(u16 *mapArg)
{
s32 i, j;
u16 *src, *dst;
u8 mapId = GetCurrentTrainerHillMapId();
- if (mapId == 6)
+ if (mapId == TRAINER_HILL_ENTRANCE)
{
InitMapFromSavedGame();
return;
}
SetUpDataStruct();
- if (mapId == 5)
+ if (mapId == TRAINER_HILL_ROOF)
{
InitMapFromSavedGame();
FreeDataStruct();
@@ -766,9 +785,9 @@ bool32 InTrainerHill(void)
bool32 ret;
if (gMapHeader.mapLayoutId == LAYOUT_TRAINER_HILL_1F
- || gMapHeader.mapLayoutId == LAYOUT_TRAINER_HILL_2F
- || gMapHeader.mapLayoutId == LAYOUT_TRAINER_HILL_3F
- || gMapHeader.mapLayoutId == LAYOUT_TRAINER_HILL_4F)
+ || gMapHeader.mapLayoutId == LAYOUT_TRAINER_HILL_2F
+ || gMapHeader.mapLayoutId == LAYOUT_TRAINER_HILL_3F
+ || gMapHeader.mapLayoutId == LAYOUT_TRAINER_HILL_4F)
ret = TRUE;
else
ret = FALSE;
@@ -778,58 +797,61 @@ bool32 InTrainerHill(void)
u8 GetCurrentTrainerHillMapId(void)
{
- u8 ret;
+ u8 mapId;
if (gMapHeader.mapLayoutId == LAYOUT_TRAINER_HILL_1F)
- ret = 1;
+ mapId = TRAINER_HILL_1F;
else if (gMapHeader.mapLayoutId == LAYOUT_TRAINER_HILL_2F)
- ret = 2;
+ mapId = TRAINER_HILL_2F;
else if (gMapHeader.mapLayoutId == LAYOUT_TRAINER_HILL_3F)
- ret = 3;
+ mapId = TRAINER_HILL_3F;
else if (gMapHeader.mapLayoutId == LAYOUT_TRAINER_HILL_4F)
- ret = 4;
+ mapId = TRAINER_HILL_4F;
else if (gMapHeader.mapLayoutId == LAYOUT_TRAINER_HILL_ROOF)
- ret = 5;
+ mapId = TRAINER_HILL_ROOF;
else if (gMapHeader.mapLayoutId == LAYOUT_TRAINER_HILL_ENTRANCE)
- ret = 6;
+ mapId = TRAINER_HILL_ENTRANCE;
else
- ret = 0;
+ mapId = 0;
- return ret;
+ return mapId;
}
-static bool32 sub_81D6100(void)
+// Unused
+static bool32 OnTrainerHillRoof(void)
{
- bool32 ret;
+ bool32 onRoof;
if (gMapHeader.mapLayoutId == LAYOUT_TRAINER_HILL_ROOF)
- ret = TRUE;
+ onRoof = TRUE;
else
- ret = FALSE;
+ onRoof = FALSE;
- return ret;
+ return onRoof;
}
-const struct WarpEvent* sub_81D6120(void)
+const struct WarpEvent* SetWarpDestinationTrainerHill4F(void)
{
const struct MapHeader *header = Overworld_GetMapHeaderByGroupAndId(MAP_GROUP(TRAINER_HILL_4F), MAP_NUM(TRAINER_HILL_4F));
return &header->events->warps[1];
}
-const struct WarpEvent* sub_81D6134(u8 warpEventId)
+// For warping from the roof in challenges where the 4F is not the final challenge floor
+// This would only occur in an E-Reader challenge, which is exclusive to JP Emerald
+const struct WarpEvent* SetWarpDestinationTrainerHillFinalFloor(u8 warpEventId)
{
- u8 id;
+ u8 numFloors;
const struct MapHeader *header;
if (warpEventId == 1)
return &gMapHeader.events->warps[1];
- id = sub_81D6490();
- if (id == 0 || id >= 5)
- id = 4;
+ numFloors = GetNumFloorsInTrainerHillChallenge();
+ if (numFloors == 0 || numFloors > NUM_TRAINER_HILL_FLOORS)
+ numFloors = NUM_TRAINER_HILL_FLOORS;
- header = Overworld_GetMapHeaderByGroupAndId(MAP_GROUP(TRAINER_HILL_4F), gUnknown_0862A688[id - 1]);
+ header = Overworld_GetMapHeaderByGroupAndId(MAP_GROUP(TRAINER_HILL_4F), sNextFloorMapNum[numFloors - 1]);
return &header->events->warps[0];
}
@@ -843,7 +865,7 @@ bool8 GetHillTrainerFlag(u8 eventObjectId)
u32 floorId = GetFloorId() * 2;
u8 bitId = gEventObjects[eventObjectId].localId - 1 + floorId;
- return gSaveBlock2Ptr->frontier.field_EE0 & gBitTable[bitId];
+ return gSaveBlock2Ptr->frontier.trainerFlags & gBitTable[bitId];
}
void SetHillTrainerFlag(void)
@@ -855,7 +877,7 @@ void SetHillTrainerFlag(void)
{
if (gSaveBlock2Ptr->frontier.trainerIds[i] == gTrainerBattleOpponent_A)
{
- gSaveBlock2Ptr->frontier.field_EE0 |= gBitTable[floorId + i];
+ gSaveBlock2Ptr->frontier.trainerFlags |= gBitTable[floorId + i];
break;
}
}
@@ -866,7 +888,7 @@ void SetHillTrainerFlag(void)
{
if (gSaveBlock2Ptr->frontier.trainerIds[i] == gTrainerBattleOpponent_B)
{
- gSaveBlock2Ptr->frontier.field_EE0 |= gBitTable[floorId + i];
+ gSaveBlock2Ptr->frontier.trainerFlags |= gBitTable[floorId + i];
break;
}
}
@@ -875,19 +897,19 @@ void SetHillTrainerFlag(void)
const u8 *GetTrainerHillTrainerScript(void)
{
- return EventScript_2C83F0;
+ return TrainerHill_EventScript_TrainerBattle;
}
-static void sub_81D62B4(void)
+static void ShowTrainerHillPostBattleText(void)
{
- CopyTrainerHillTrainerText(5, gSpecialVar_LastTalked);
+ CopyTrainerHillTrainerText(TRAINER_HILL_TEXT_AFTER, gSpecialVar_LastTalked);
sub_80982B8();
}
-static void sub_81D62CC(u16 trainerId, u8 firstMonId)
+static void CreateNPCTrainerHillParty(u16 trainerId, u8 firstMonId)
{
u8 trId, level;
- s32 i, floorId, arrId;
+ s32 i, floorId, partySlot;
if (trainerId == 0 || trainerId > 2)
return;
@@ -896,13 +918,13 @@ static void sub_81D62CC(u16 trainerId, u8 firstMonId)
SetUpDataStruct();
level = GetHighestLevelInPlayerParty();
floorId = GetFloorId();
- for (i = firstMonId, arrId = 0; i < firstMonId + 3; i++, arrId++)
+ for (i = firstMonId, partySlot = 0; i < firstMonId + 3; i++, partySlot++)
{
- u8 id = gUnknown_0862A698[trId][arrId];
+ u8 id = sTrainerPartySlots[trId][partySlot];
struct Pokemon *mon = &gEnemyParty[i];
CreateBattleTowerMon(mon, &sHillData->floors[floorId].trainers[trId].mons[id]);
- sub_81D642C(mon, level);
+ SetTrainerHillMonLevel(mon, level);
}
FreeDataStruct();
@@ -911,22 +933,22 @@ static void sub_81D62CC(u16 trainerId, u8 firstMonId)
void FillHillTrainerParty(void)
{
ZeroEnemyPartyMons();
- sub_81D62CC(gTrainerBattleOpponent_A, 0);
+ CreateNPCTrainerHillParty(gTrainerBattleOpponent_A, 0);
}
void FillHillTrainersParties(void)
{
ZeroEnemyPartyMons();
- sub_81D62CC(gTrainerBattleOpponent_A, 0);
- sub_81D62CC(gTrainerBattleOpponent_B, 3);
+ CreateNPCTrainerHillParty(gTrainerBattleOpponent_A, 0);
+ CreateNPCTrainerHillParty(gTrainerBattleOpponent_B, 3);
}
// This function is unused, but my best guess is
// it was supposed to return AI scripts for trainer
// hill trainers.
-u32 sub_81D63C4(void)
+u32 GetTrainerHillAIFlags(void)
{
- return 7;
+ return (AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY);
}
u8 GetTrainerEncounterMusicIdInTrainerHill(u16 trainerId)
@@ -939,16 +961,16 @@ u8 GetTrainerEncounterMusicIdInTrainerHill(u16 trainerId)
facilityClass = sHillData->floors[sHillData->floorId].trainers[trId].facilityClass;
FreeDataStruct();
- for (i = 0; i < ARRAY_COUNT(gUnknown_0862A3B4); i++)
+ for (i = 0; i < ARRAY_COUNT(sTrainerClassesAndMusic); i++)
{
- if (gUnknown_0862A3B4[i].trainerClass == gFacilityClassToTrainerClass[facilityClass])
- return gUnknown_0862A3B4[i].musicId;
+ if (sTrainerClassesAndMusic[i].trainerClass == gFacilityClassToTrainerClass[facilityClass])
+ return sTrainerClassesAndMusic[i].musicId;
}
return 0;
}
-static void sub_81D642C(struct Pokemon *mon, u8 level)
+static void SetTrainerHillMonLevel(struct Pokemon *mon, u8 level)
{
u16 species = GetMonData(mon, MON_DATA_SPECIES, NULL);
u32 exp = gExperienceTables[gBaseStats[species].growthRate][level];
@@ -958,61 +980,63 @@ static void sub_81D642C(struct Pokemon *mon, u8 level)
CalculateMonStats(mon);
}
-u8 sub_81D6490(void)
+u8 GetNumFloorsInTrainerHillChallenge(void)
{
- u8 ret;
+ u8 floors;
SetUpDataStruct();
- ret = sHillData->tag.numFloors;
+ floors = sHillData->tag.numFloors;
FreeDataStruct();
- return ret;
+ return floors;
}
-static void sub_81D64AC(void)
+static void SetAllTrainerFlags(void)
{
- gSaveBlock2Ptr->frontier.field_EE0 = 0xFF;
+ gSaveBlock2Ptr->frontier.trainerFlags = 0xFF;
}
+// Palette never loaded, sub_81D6534 always FALSE
void sub_81D64C0(void)
{
if (sub_81D6534() == TRUE)
- LoadPalette(gUnknown_0862A5D4, 0x70, 0x20);
+ LoadPalette(sUnknown_0862A5D4, 0x70, 0x20);
}
-static void sub_81D64DC(void)
+static void GetGameSaved(void)
{
- gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_EF9_1;
+ gSpecialVar_Result = gSaveBlock2Ptr->frontier.savedGame;
}
-static void sub_81D64FC(void)
+static void SetGameSaved(void)
{
- gSaveBlock2Ptr->frontier.field_EF9_1 = 1;
+ gSaveBlock2Ptr->frontier.savedGame = TRUE;
}
-static void sub_81D6518(void)
+static void ClearGameSaved(void)
{
- gSaveBlock2Ptr->frontier.field_EF9_1 = 0;
+ gSaveBlock2Ptr->frontier.savedGame = FALSE;
}
+// Always FALSE
bool32 sub_81D6534(void)
{
- if (!InTrainerHillChallenge() || GetCurrentTrainerHillMapId() == 6)
+ if (!InTrainerHillChallenge() || GetCurrentTrainerHillMapId() == TRAINER_HILL_ENTRANCE)
return FALSE;
- sub_81D5C00();
+ ClearVarResult();
if (gSpecialVar_Result == 0)
return FALSE;
else
return TRUE;
}
-static void sub_81D6568(void)
+static void GetChallengeWon(void)
{
if (gSaveBlock1Ptr->trainerHill.hasLost)
- gSpecialVar_Result = 0;
+ gSpecialVar_Result = FALSE;
else
- gSpecialVar_Result = 1;
+ gSpecialVar_Result = TRUE;
}
static void TrainerHillSetTag(void)
@@ -1021,49 +1045,50 @@ static void TrainerHillSetTag(void)
gSaveBlock1Ptr->trainerHill.bestTime = gSaveBlock1Ptr->trainerHillTimes[gSpecialVar_0x8005];
}
-static u8 sub_81D65E8(u8 arg0)
+static u8 GetPrizeListId(bool8 npcChallenge)
{
- u8 var, i, modBy;
+ u8 prizeListId, i, modBy;
- var = 0;
- for (i = 0; i < 4; i++)
+ prizeListId = 0;
+ for (i = 0; i < NUM_TRAINER_HILL_FLOORS; i++)
{
- var ^= sHillData->floors[i].unk0 & 0x1F;
- var ^= sHillData->floors[i].unk1 & 0x1F;
+ prizeListId ^= sHillData->floors[i].trainerNum1 & 0x1F;
+ prizeListId ^= sHillData->floors[i].trainerNum2 & 0x1F;
}
- if (arg0)
- modBy = 10;
+ // Not possible to win TMs from E-Reader challenges
+ if (npcChallenge)
+ modBy = NUM_TRAINER_HILL_PRIZE_LISTS;
else
- modBy = 5;
+ modBy = NUM_TRAINER_HILL_PRIZE_LISTS / 2;
- var %= modBy;
- return var;
+ prizeListId %= modBy;
+ return prizeListId;
}
-static u16 sub_81D6640(void)
+static u16 GetPrizeItemId(void)
{
u8 i;
- const u16 *ptr;
- s32 var = 0, var2, minutes, id;
+ const u16 *prizeList;
+ s32 var = 0, prizeListSetId, minutes, id;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < NUM_TRAINER_HILL_FLOORS; i++)
{
- var += sHillData->floors[i].unk0;
- var += sHillData->floors[i].unk1;
+ var += sHillData->floors[i].trainerNum1;
+ var += sHillData->floors[i].trainerNum2;
}
- var2 = var / 256;
- var2 %= 2;
- if (FlagGet(FLAG_SYS_GAME_CLEAR) && sHillData->tag.unkField_0 == 8)
- i = sub_81D65E8(1);
+ prizeListSetId = var / 256;
+ prizeListSetId %= 2;
+ if (FlagGet(FLAG_SYS_GAME_CLEAR) && sHillData->tag.trainerType == HILL_TRAINER_TYPE_NPC)
+ i = GetPrizeListId(TRUE);
else
- i = sub_81D65E8(0);
+ i = GetPrizeListId(FALSE);
if (gSaveBlock1Ptr->trainerHill.tag == HILL_TAG_EXPERT)
- i = (i + 1) % 10;
+ i = (i + 1) % NUM_TRAINER_HILL_PRIZE_LISTS;
- ptr = gUnknown_0862A5CC[var2][i];
+ prizeList = sPrizeListSets[prizeListSetId][i];
minutes = (signed)(gSaveBlock1Ptr->trainerHill.timer) / (60 * 60);
if (minutes < 12)
id = 0;
@@ -1078,5 +1103,5 @@ static u16 sub_81D6640(void)
else
id = 5;
- return ptr[id];
+ return prizeList[id];
}