Document Trainer Hill

This commit is contained in:
GriffinR
2019-11-13 16:10:05 -05:00
committed by huderlem
parent 2c3726a328
commit 5e01871f8b
27 changed files with 640 additions and 608 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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"
}
],

View File

@@ -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

View File

@@ -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"
}
]
}

View File

@@ -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
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_26821F:: @ 826821F
msgbox TrainerHill_Entrance_Text_2687AC, MSGBOX_DEFAULT
TrainerHill_Entrance_EventScript_268227:: @ 8268227
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
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_268275:: @ 8268275
msgbox TrainerHill_Entrance_Text_26859E, MSGBOX_DEFAULT
TrainerHill_Entrance_EventScript_26827D:: @ 826827D
message TrainerHill_Entrance_Text_2685F8
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?$"

View File

@@ -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"
}
],

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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);

View File

@@ -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;

View File

@@ -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();
}

View File

@@ -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] =

View File

@@ -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;
}
}

View File

@@ -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
{

View File

@@ -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)

View File

@@ -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();

View File

@@ -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 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 *const gUnknown_0862A57C[] =
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] =
{
gUnknown_0862A48C,
gUnknown_0862A498,
gUnknown_0862A4A4,
gUnknown_0862A4B0,
gUnknown_0862A4BC,
gUnknown_0862A4C8,
gUnknown_0862A4D4,
gUnknown_0862A4E0,
gUnknown_0862A4EC,
gUnknown_0862A4F8
sPrizeListRareCandy1,
sPrizeListLuxuryBall1,
sPrizeListMaxRevive1,
sPrizeListMaxEther1,
sPrizeListElixir1,
sPrizeListRoar,
sPrizeListSludgeBomb,
sPrizeListToxic,
sPrizeListSunnyDay,
sPrizeListEarthQuake
};
static const u16 *const gUnknown_0862A5A4[] =
static const u16 *const sPrizeLists2[NUM_TRAINER_HILL_PRIZE_LISTS] =
{
gUnknown_0862A504,
gUnknown_0862A510,
gUnknown_0862A51C,
gUnknown_0862A528,
gUnknown_0862A534,
gUnknown_0862A540,
gUnknown_0862A54C,
gUnknown_0862A558,
gUnknown_0862A564,
gUnknown_0862A570
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];
}