Merge pull request #1069 from GriffinRichards/doc-link

Document linking
This commit is contained in:
PikalaxALT
2020-07-08 15:43:45 -04:00
committed by GitHub
101 changed files with 7537 additions and 6613 deletions
+7 -9
View File
@@ -3,15 +3,15 @@ gLinkDebugSeed
gLocalLinkPlayerBlock gLocalLinkPlayerBlock
gLinkErrorOccurred gLinkErrorOccurred
gLinkDebugFlags gLinkDebugFlags
gFiller_03003074 gLinkFiller1
gRemoteLinkPlayersNotReceived gRemoteLinkPlayersNotReceived
gBlockReceivedStatus gBlockReceivedStatus
gFiller_03003080 gLinkFiller2
gLinkHeldKeys gLinkHeldKeys
gRecvCmds gRecvCmds
gLinkStatus gLinkStatus
gUnknown_030030E4 gLinkDummy1
gUnknown_030030E8 gLinkDummy2
gUnknown_030030EC gUnknown_030030EC
gUnknown_030030F0 gUnknown_030030F0
gUnknown_030030F4 gUnknown_030030F4
@@ -26,12 +26,10 @@ gLinkCallback
gShouldAdvanceLinkState gShouldAdvanceLinkState
gLinkTestBlockChecksums gLinkTestBlockChecksums
gBlockRequestType gBlockRequestType
gFiller_03003154 gLinkFiller3
gFiller_03003158 gLinkFiller4
gFiller_0300315c gLinkFiller5
gLastSendQueueCount gLastSendQueueCount
gLink gLink
gLastRecvQueueCount gLastRecvQueueCount
gLinkSavedIme gLinkSavedIme
gFiller_03004138
gFiller_0300413C
@@ -786,19 +786,19 @@ BattleFrontier_BattleTowerLobby_EventScript_TryCableLink:: @ 823F2C5
setvar VAR_0x8005, 0 setvar VAR_0x8005, 0
special TryBattleLinkup special TryBattleLinkup
waitstate waitstate
compare VAR_RESULT, 1 compare VAR_RESULT, LINKUP_SUCCESS
goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_CableLinkSuccessful goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_CableLinkSuccessful
compare VAR_RESULT, 2 compare VAR_RESULT, LINKUP_SOMEONE_NOT_READY
goto_if_eq CableClub_EventScript_AbortLinkSomeoneNotReady goto_if_eq CableClub_EventScript_AbortLinkSomeoneNotReady
compare VAR_RESULT, 3 compare VAR_RESULT, LINKUP_DIFF_SELECTIONS
goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_AbortLinkDifferentSelections goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_AbortLinkDifferentSelections
compare VAR_RESULT, 4 compare VAR_RESULT, LINKUP_WRONG_NUM_PLAYERS
goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_AbortLinkIncorrectNumberOfPlayers goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_AbortLinkIncorrectNumberOfPlayers
compare VAR_RESULT, 5 compare VAR_RESULT, LINKUP_FAILED
goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_CancelChallenge goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_CancelChallenge
compare VAR_RESULT, 6 compare VAR_RESULT, LINKUP_CONNECTION_ERROR
goto_if_eq CableClub_EventScript_AbortLinkConnectionError goto_if_eq CableClub_EventScript_AbortLinkConnectionError
compare VAR_RESULT, 11 compare VAR_RESULT, LINKUP_FAILED_BATTLE_TOWER
goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_AbortLink goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_AbortLink
end end
@@ -853,7 +853,7 @@ BattleFrontier_BattleTowerLobby_EventScript_CableLinkSuccessful:: @ 823F3AF
message BattleFrontier_BattleTowerLobby_Text_SaveGameBeforeShowingIn message BattleFrontier_BattleTowerLobby_Text_SaveGameBeforeShowingIn
waitmessage waitmessage
tower_save CHALLENGE_STATUS_SAVING tower_save CHALLENGE_STATUS_SAVING
special sub_80A08CC special SaveForBattleTowerLink
waitstate waitstate
playse SE_SAVE playse SE_SAVE
waitse waitse
@@ -884,26 +884,26 @@ BattleFrontier_BattleTowerLobby_EventScript_ChooseLeader:: @ 823F3F3
BattleFrontier_BattleTowerLobby_EventScript_TryBecomeLeader:: @ 823F430 BattleFrontier_BattleTowerLobby_EventScript_TryBecomeLeader:: @ 823F430
call CableClub_EventScript_TryBecomeLinkLeader call CableClub_EventScript_TryBecomeLinkLeader
compare VAR_RESULT, 1 compare VAR_RESULT, LINKUP_SUCCESS
goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_WirelessLinkSuccessful goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_WirelessLinkSuccessful
compare VAR_RESULT, 5 compare VAR_RESULT, LINKUP_FAILED
goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_ChooseLeader goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_ChooseLeader
compare VAR_RESULT, 8 compare VAR_RESULT, LINKUP_RETRY_ROLE_ASSIGN
goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_TryBecomeLeader goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_TryBecomeLeader
compare VAR_RESULT, 11 compare VAR_RESULT, LINKUP_FAILED_BATTLE_TOWER
goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_AbortLink goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_AbortLink
release release
return return
BattleFrontier_BattleTowerLobby_EventScript_TryJoinGroup:: @ 823F463 BattleFrontier_BattleTowerLobby_EventScript_TryJoinGroup:: @ 823F463
call CableClub_EventScript_TryJoinLinkGroup call CableClub_EventScript_TryJoinLinkGroup
compare VAR_RESULT, 1 compare VAR_RESULT, LINKUP_SUCCESS
goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_WirelessLinkSuccessful goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_WirelessLinkSuccessful
compare VAR_RESULT, 5 compare VAR_RESULT, LINKUP_FAILED
goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_ChooseLeader goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_ChooseLeader
compare VAR_RESULT, 8 compare VAR_RESULT, LINKUP_RETRY_ROLE_ASSIGN
goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_TryJoinGroup goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_TryJoinGroup
compare VAR_RESULT, 11 compare VAR_RESULT, LINKUP_FAILED_BATTLE_TOWER
goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_AbortLink goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_AbortLink
release release
return return
@@ -914,7 +914,7 @@ BattleFrontier_BattleTowerLobby_EventScript_WirelessLinkSuccessful:: @ 823F496
message BattleFrontier_BattleTowerLobby_Text_SaveGameBeforeShowingIn message BattleFrontier_BattleTowerLobby_Text_SaveGameBeforeShowingIn
waitmessage waitmessage
tower_save CHALLENGE_STATUS_SAVING tower_save CHALLENGE_STATUS_SAVING
special sub_80A08CC special SaveForBattleTowerLink
waitstate waitstate
playse SE_SAVE playse SE_SAVE
waitse waitse
+11 -11
View File
@@ -767,15 +767,15 @@ LilycoveCity_ContestLobby_EventScript_TrySetUpLinkContest:: @ 821AA15
call_if_eq LilycoveCity_ContestLobby_EventScript_TryLinkGMode call_if_eq LilycoveCity_ContestLobby_EventScript_TryLinkGMode
compare VAR_TEMP_C, 2 compare VAR_TEMP_C, 2
goto_if_ge LilycoveCity_ContestLobby_EventScript_CancelLinkContest goto_if_ge LilycoveCity_ContestLobby_EventScript_CancelLinkContest
compare VAR_RESULT, 4 compare VAR_RESULT, LINKUP_WRONG_NUM_PLAYERS
goto_if_eq LilycoveCity_ContestLobby_EventScript_CancelLinkDifferentChoices goto_if_eq LilycoveCity_ContestLobby_EventScript_CancelLinkDifferentChoices
compare VAR_RESULT, 3 compare VAR_RESULT, LINKUP_DIFF_SELECTIONS
goto_if_eq LilycoveCity_ContestLobby_EventScript_CancelLinkDifferentChoices goto_if_eq LilycoveCity_ContestLobby_EventScript_CancelLinkDifferentChoices
compare VAR_RESULT, 5 compare VAR_RESULT, LINKUP_FAILED
goto_if_eq LilycoveCity_ContestLobby_EventScript_CancelLinkContest goto_if_eq LilycoveCity_ContestLobby_EventScript_CancelLinkContest
compare VAR_RESULT, 6 compare VAR_RESULT, LINKUP_CONNECTION_ERROR
goto_if_eq LilycoveCity_ContestLobby_EventScript_CancelLinkError goto_if_eq LilycoveCity_ContestLobby_EventScript_CancelLinkError
compare VAR_RESULT, 10 compare VAR_RESULT, LINKUP_FAILED_CONTEST_GMODE
goto_if_eq LilycoveCity_ContestLobby_EventScript_CancelLinkModeDifference goto_if_eq LilycoveCity_ContestLobby_EventScript_CancelLinkModeDifference
message3 LilycoveCity_ContestLobby_Text_Transmitting message3 LilycoveCity_ContestLobby_Text_Transmitting
contestlinktransfer contestlinktransfer
@@ -889,22 +889,22 @@ LilycoveCity_ContestLobby_EventScript_DecideLinkLeader:: @ 821ABA6
LilycoveCity_ContestLobby_EventScript_TryLeadGroup:: @ 821ABE3 LilycoveCity_ContestLobby_EventScript_TryLeadGroup:: @ 821ABE3
call LilycoveCity_ContestLobby_EventScript_TryBecomeLinkLeader call LilycoveCity_ContestLobby_EventScript_TryBecomeLinkLeader
compare VAR_RESULT, 1 compare VAR_RESULT, LINKUP_SUCCESS
goto_if_eq LilycoveCity_ContestLobby_EventScript_LinkLeaderDecided goto_if_eq LilycoveCity_ContestLobby_EventScript_LinkLeaderDecided
compare VAR_RESULT, 5 compare VAR_RESULT, LINKUP_FAILED
goto_if_eq LilycoveCity_ContestLobby_EventScript_DecideLinkLeader goto_if_eq LilycoveCity_ContestLobby_EventScript_DecideLinkLeader
compare VAR_RESULT, 8 compare VAR_RESULT, LINKUP_RETRY_ROLE_ASSIGN
goto_if_eq LilycoveCity_ContestLobby_EventScript_TryLeadGroup goto_if_eq LilycoveCity_ContestLobby_EventScript_TryLeadGroup
release release
end end
LilycoveCity_ContestLobby_EventScript_TryJoinGroup:: @ 821AC0B LilycoveCity_ContestLobby_EventScript_TryJoinGroup:: @ 821AC0B
call LilycoveCity_ContestLobby_EventScript_TryJoinLinkGroup call LilycoveCity_ContestLobby_EventScript_TryJoinLinkGroup
compare VAR_RESULT, 1 compare VAR_RESULT, LINKUP_SUCCESS
goto_if_eq LilycoveCity_ContestLobby_EventScript_LinkLeaderDecided goto_if_eq LilycoveCity_ContestLobby_EventScript_LinkLeaderDecided
compare VAR_RESULT, 5 compare VAR_RESULT, LINKUP_FAILED
goto_if_eq LilycoveCity_ContestLobby_EventScript_DecideLinkLeader goto_if_eq LilycoveCity_ContestLobby_EventScript_DecideLinkLeader
compare VAR_RESULT, 8 compare VAR_RESULT, LINKUP_RETRY_ROLE_ASSIGN
goto_if_eq LilycoveCity_ContestLobby_EventScript_TryJoinGroup goto_if_eq LilycoveCity_ContestLobby_EventScript_TryJoinGroup
release release
end end
+11 -11
View File
@@ -20,7 +20,7 @@ UnionRoom_OnResume: @ 823D1B1
removeobject 5 removeobject 5
removeobject 4 removeobject 4
removeobject 3 removeobject 3
special UnionRoomSpecial special RunUnionRoom
end end
UnionRoom_OnTransition: @ 823D1E5 UnionRoom_OnTransition: @ 823D1E5
@@ -29,7 +29,7 @@ UnionRoom_OnTransition: @ 823D1E5
UnionRoom_EventScript_Player1:: @ 823D1E6 UnionRoom_EventScript_Player1:: @ 823D1E6
lock lock
faceplayer faceplayer
setvar VAR_RESULT, 1 setvar VAR_RESULT, UR_INTERACT_PLAYER_1
waitstate waitstate
release release
end end
@@ -37,7 +37,7 @@ UnionRoom_EventScript_Player1:: @ 823D1E6
UnionRoom_EventScript_Player2:: @ 823D1F0 UnionRoom_EventScript_Player2:: @ 823D1F0
lock lock
faceplayer faceplayer
setvar VAR_RESULT, 2 setvar VAR_RESULT, UR_INTERACT_PLAYER_2
waitstate waitstate
release release
end end
@@ -45,7 +45,7 @@ UnionRoom_EventScript_Player2:: @ 823D1F0
UnionRoom_EventScript_Player3:: @ 823D1FA UnionRoom_EventScript_Player3:: @ 823D1FA
lock lock
faceplayer faceplayer
setvar VAR_RESULT, 3 setvar VAR_RESULT, UR_INTERACT_PLAYER_3
waitstate waitstate
release release
end end
@@ -53,7 +53,7 @@ UnionRoom_EventScript_Player3:: @ 823D1FA
UnionRoom_EventScript_Player4:: @ 823D204 UnionRoom_EventScript_Player4:: @ 823D204
lock lock
faceplayer faceplayer
setvar VAR_RESULT, 4 setvar VAR_RESULT, UR_INTERACT_PLAYER_4
waitstate waitstate
release release
end end
@@ -61,7 +61,7 @@ UnionRoom_EventScript_Player4:: @ 823D204
UnionRoom_EventScript_Player5:: @ 823D20E UnionRoom_EventScript_Player5:: @ 823D20E
lock lock
faceplayer faceplayer
setvar VAR_RESULT, 5 setvar VAR_RESULT, UR_INTERACT_PLAYER_5
waitstate waitstate
release release
end end
@@ -69,7 +69,7 @@ UnionRoom_EventScript_Player5:: @ 823D20E
UnionRoom_EventScript_Player6:: @ 823D218 UnionRoom_EventScript_Player6:: @ 823D218
lock lock
faceplayer faceplayer
setvar VAR_RESULT, 6 setvar VAR_RESULT, UR_INTERACT_PLAYER_6
waitstate waitstate
release release
end end
@@ -77,7 +77,7 @@ UnionRoom_EventScript_Player6:: @ 823D218
UnionRoom_EventScript_Player7:: @ 823D222 UnionRoom_EventScript_Player7:: @ 823D222
lock lock
faceplayer faceplayer
setvar VAR_RESULT, 7 setvar VAR_RESULT, UR_INTERACT_PLAYER_7
waitstate waitstate
release release
end end
@@ -85,7 +85,7 @@ UnionRoom_EventScript_Player7:: @ 823D222
UnionRoom_EventScript_Player8:: @ 823D22C UnionRoom_EventScript_Player8:: @ 823D22C
lock lock
faceplayer faceplayer
setvar VAR_RESULT, 8 setvar VAR_RESULT, UR_INTERACT_PLAYER_8
waitstate waitstate
release release
end end
@@ -93,14 +93,14 @@ UnionRoom_EventScript_Player8:: @ 823D22C
UnionRoom_EventScript_Attendant:: @ 823D236 UnionRoom_EventScript_Attendant:: @ 823D236
lock lock
faceplayer faceplayer
setvar VAR_RESULT, 9 setvar VAR_RESULT, UR_INTERACT_ATTENDANT
waitstate waitstate
release release
end end
UnionRoom_EventScript_Unused:: @ 823D240 UnionRoom_EventScript_Unused:: @ 823D240
lockall lockall
setvar VAR_RESULT, 10 setvar VAR_RESULT, UR_INTERACT_UNUSED
waitstate waitstate
releaseall releaseall
end end
+11 -11
View File
@@ -600,15 +600,15 @@ BerryBlender_EventScript_TryDoLinkBlender: @ 82940BB
waitmessage waitmessage
special TryBerryBlenderLinkup special TryBerryBlenderLinkup
waitstate waitstate
compare VAR_RESULT, 1 compare VAR_RESULT, LINKUP_SUCCESS
goto_if_eq BerryBlender_EventScript_SpawnLinkPartners goto_if_eq BerryBlender_EventScript_SpawnLinkPartners
compare VAR_RESULT, 2 compare VAR_RESULT, LINKUP_SOMEONE_NOT_READY
goto_if_eq BerryBlender_EventScript_CloseLinkNotReady goto_if_eq BerryBlender_EventScript_CloseLinkNotReady
compare VAR_RESULT, 3 compare VAR_RESULT, LINKUP_DIFF_SELECTIONS
goto_if_eq BerryBlender_EventScript_CloseLinkDifferentSelections goto_if_eq BerryBlender_EventScript_CloseLinkDifferentSelections
compare VAR_RESULT, 5 compare VAR_RESULT, LINKUP_FAILED
goto_if_eq BerryBlender_EventScript_CloseLink goto_if_eq BerryBlender_EventScript_CloseLink
compare VAR_RESULT, 6 compare VAR_RESULT, LINKUP_CONNECTION_ERROR
goto_if_eq BerryBlender_EventScript_LinkError goto_if_eq BerryBlender_EventScript_LinkError
end end
@@ -712,22 +712,22 @@ BerryBlender_EventScript_DecideLinkLeader: @ 82941F8
BerryBlender_EventScript_TryLeadGroup: @ 8294235 BerryBlender_EventScript_TryLeadGroup: @ 8294235
call BerryBlender_EventScript_TryBecomeLinkLeader call BerryBlender_EventScript_TryBecomeLinkLeader
compare VAR_RESULT, 1 compare VAR_RESULT, LINKUP_SUCCESS
goto_if_eq BerryBlender_EventScript_LinkLeaderDecided goto_if_eq BerryBlender_EventScript_LinkLeaderDecided
compare VAR_RESULT, 5 compare VAR_RESULT, LINKUP_FAILED
goto_if_eq BerryBlender_EventScript_DecideLinkLeader goto_if_eq BerryBlender_EventScript_DecideLinkLeader
compare VAR_RESULT, 8 compare VAR_RESULT, LINKUP_RETRY_ROLE_ASSIGN
goto_if_eq BerryBlender_EventScript_TryLeadGroup goto_if_eq BerryBlender_EventScript_TryLeadGroup
release release
end end
BerryBlender_EventScript_TryJoinGroup: @ 829425D BerryBlender_EventScript_TryJoinGroup: @ 829425D
call BerryBlender_EventScript_TryJoinLinkGroup call BerryBlender_EventScript_TryJoinLinkGroup
compare VAR_RESULT, 1 compare VAR_RESULT, LINKUP_SUCCESS
goto_if_eq BerryBlender_EventScript_LinkLeaderDecided goto_if_eq BerryBlender_EventScript_LinkLeaderDecided
compare VAR_RESULT, 5 compare VAR_RESULT, LINKUP_FAILED
goto_if_eq BerryBlender_EventScript_DecideLinkLeader goto_if_eq BerryBlender_EventScript_DecideLinkLeader
compare VAR_RESULT, 8 compare VAR_RESULT, LINKUP_RETRY_ROLE_ASSIGN
goto_if_eq BerryBlender_EventScript_TryJoinGroup goto_if_eq BerryBlender_EventScript_TryJoinGroup
release release
end end
+48 -48
View File
@@ -349,17 +349,17 @@ CableClub_EventScript_TryEnterColosseum:: @ 8276F60
waitmessage waitmessage
special TryBattleLinkup special TryBattleLinkup
waitstate waitstate
compare VAR_RESULT, 1 compare VAR_RESULT, LINKUP_SUCCESS
goto_if_eq CableClub_EventScript_EnterColosseum goto_if_eq CableClub_EventScript_EnterColosseum
compare VAR_RESULT, 2 compare VAR_RESULT, LINKUP_SOMEONE_NOT_READY
goto_if_eq CableClub_EventScript_AbortLinkSomeoneNotReady goto_if_eq CableClub_EventScript_AbortLinkSomeoneNotReady
compare VAR_RESULT, 3 compare VAR_RESULT, LINKUP_DIFF_SELECTIONS
goto_if_eq CableClub_EventScript_AbortLinkDifferentSelections goto_if_eq CableClub_EventScript_AbortLinkDifferentSelections
compare VAR_RESULT, 4 compare VAR_RESULT, LINKUP_WRONG_NUM_PLAYERS
goto_if_eq CableClub_EventScript_AbortLinkIncorrectNumberOfBattlers goto_if_eq CableClub_EventScript_AbortLinkIncorrectNumberOfBattlers
compare VAR_RESULT, 5 compare VAR_RESULT, LINKUP_FAILED
goto_if_eq CableClub_EventScript_AbortLink goto_if_eq CableClub_EventScript_AbortLink
compare VAR_RESULT, 6 compare VAR_RESULT, LINKUP_CONNECTION_ERROR
goto_if_eq CableClub_EventScript_AbortLinkConnectionError goto_if_eq CableClub_EventScript_AbortLinkConnectionError
end end
@@ -452,21 +452,21 @@ CableClub_EventScript_TradeCenter:: @ 82770B2
waitmessage waitmessage
special TryTradeLinkup special TryTradeLinkup
waitstate waitstate
compare VAR_RESULT, 1 compare VAR_RESULT, LINKUP_SUCCESS
goto_if_eq CableClub_EventScript_EnterTradeCenter goto_if_eq CableClub_EventScript_EnterTradeCenter
compare VAR_RESULT, 2 compare VAR_RESULT, LINKUP_SOMEONE_NOT_READY
goto_if_eq CableClub_EventScript_AbortLinkSomeoneNotReady goto_if_eq CableClub_EventScript_AbortLinkSomeoneNotReady
compare VAR_RESULT, 3 compare VAR_RESULT, LINKUP_DIFF_SELECTIONS
goto_if_eq CableClub_EventScript_AbortLinkDifferentSelections goto_if_eq CableClub_EventScript_AbortLinkDifferentSelections
compare VAR_RESULT, 4 compare VAR_RESULT, LINKUP_WRONG_NUM_PLAYERS
goto_if_eq CableClub_EventScript_AbortLinkIncorrectNumberOfParticipants goto_if_eq CableClub_EventScript_AbortLinkIncorrectNumberOfParticipants
compare VAR_RESULT, 5 compare VAR_RESULT, LINKUP_FAILED
goto_if_eq CableClub_EventScript_AbortLink goto_if_eq CableClub_EventScript_AbortLink
compare VAR_RESULT, 6 compare VAR_RESULT, LINKUP_CONNECTION_ERROR
goto_if_eq CableClub_EventScript_AbortLinkConnectionError goto_if_eq CableClub_EventScript_AbortLinkConnectionError
compare VAR_RESULT, 7 compare VAR_RESULT, LINKUP_PLAYER_NOT_READY
goto_if_eq CableClub_EventScript_AbortLinkPlayerNotReady goto_if_eq CableClub_EventScript_AbortLinkPlayerNotReady
compare VAR_RESULT, 9 compare VAR_RESULT, LINKUP_PARTNER_NOT_READY
goto_if_eq CableClub_EventScript_AbortLinkOtherTrainerNotReady goto_if_eq CableClub_EventScript_AbortLinkOtherTrainerNotReady
end end
@@ -527,21 +527,21 @@ CableClub_EventScript_RecordCorner:: @ 82771DB
waitmessage waitmessage
special TryRecordMixLinkup special TryRecordMixLinkup
waitstate waitstate
special sub_80B2EA8 special ValidateMixingGameLanguage
waitstate waitstate
compare VAR_RESULT, 12 compare VAR_RESULT, LINKUP_FOREIGN_GAME
goto_if_eq CableClub_EventScript_AbortLinkForeignGame goto_if_eq CableClub_EventScript_AbortLinkForeignGame
compare VAR_RESULT, 1 compare VAR_RESULT, LINKUP_SUCCESS
goto_if_eq CableClub_EventScript_EnterRecordCorner goto_if_eq CableClub_EventScript_EnterRecordCorner
compare VAR_RESULT, 2 compare VAR_RESULT, LINKUP_SOMEONE_NOT_READY
goto_if_eq CableClub_EventScript_AbortLinkSomeoneNotReady goto_if_eq CableClub_EventScript_AbortLinkSomeoneNotReady
compare VAR_RESULT, 3 compare VAR_RESULT, LINKUP_DIFF_SELECTIONS
goto_if_eq CableClub_EventScript_AbortLinkDifferentSelections goto_if_eq CableClub_EventScript_AbortLinkDifferentSelections
compare VAR_RESULT, 4 compare VAR_RESULT, LINKUP_WRONG_NUM_PLAYERS
goto_if_eq CableClub_EventScript_AbortLinkIncorrectNumberOfParticipants goto_if_eq CableClub_EventScript_AbortLinkIncorrectNumberOfParticipants
compare VAR_RESULT, 5 compare VAR_RESULT, LINKUP_FAILED
goto_if_eq CableClub_EventScript_AbortLink goto_if_eq CableClub_EventScript_AbortLink
compare VAR_RESULT, 6 compare VAR_RESULT, LINKUP_CONNECTION_ERROR
goto_if_eq CableClub_EventScript_AbortLinkConnectionError goto_if_eq CableClub_EventScript_AbortLinkConnectionError
end end
@@ -972,7 +972,7 @@ CableClub_EventScript_EnterUnionRoom:: @ 827759F
special SetCableClubWarp special SetCableClubWarp
warpteleport2 MAP_UNION_ROOM, 255, 7, 11 warpteleport2 MAP_UNION_ROOM, 255, 7, 11
waitstate waitstate
special UnionRoomSpecial special RunUnionRoom
waitstate waitstate
end end
@@ -1181,22 +1181,22 @@ CableClub_EventScript_ChooseLinkLeaderFrom2:: @ 8277989
CableClub_EventScript_TryLeadGroup2Players:: @ 82779C6 CableClub_EventScript_TryLeadGroup2Players:: @ 82779C6
call CableClub_EventScript_TryBecomeLinkLeader call CableClub_EventScript_TryBecomeLinkLeader
compare VAR_RESULT, 1 compare VAR_RESULT, LINKUP_SUCCESS
goto_if_eq CableClub_EventScript_EnterWirelessLinkRoom goto_if_eq CableClub_EventScript_EnterWirelessLinkRoom
compare VAR_RESULT, 5 compare VAR_RESULT, LINKUP_FAILED
goto_if_eq CableClub_EventScript_ChooseLinkLeaderFrom2 goto_if_eq CableClub_EventScript_ChooseLinkLeaderFrom2
compare VAR_RESULT, 8 compare VAR_RESULT, LINKUP_RETRY_ROLE_ASSIGN
goto_if_eq CableClub_EventScript_TryLeadGroup2Players goto_if_eq CableClub_EventScript_TryLeadGroup2Players
release release
return return
CableClub_EventScript_TryJoinGroup2Players:: @ 82779EE CableClub_EventScript_TryJoinGroup2Players:: @ 82779EE
call CableClub_EventScript_TryJoinLinkGroup call CableClub_EventScript_TryJoinLinkGroup
compare VAR_RESULT, 1 compare VAR_RESULT, LINKUP_SUCCESS
goto_if_eq CableClub_EventScript_EnterWirelessLinkRoom goto_if_eq CableClub_EventScript_EnterWirelessLinkRoom
compare VAR_RESULT, 5 compare VAR_RESULT, LINKUP_FAILED
goto_if_eq CableClub_EventScript_ChooseLinkLeaderFrom2 goto_if_eq CableClub_EventScript_ChooseLinkLeaderFrom2
compare VAR_RESULT, 8 compare VAR_RESULT, LINKUP_RETRY_ROLE_ASSIGN
goto_if_eq CableClub_EventScript_TryJoinGroup2Players goto_if_eq CableClub_EventScript_TryJoinGroup2Players
release release
return return
@@ -1214,22 +1214,22 @@ CableClub_EventScript_ChooseLinkLeaderFrom4:: @ 8277A16
CableClub_EventScript_TryLeadGroup4Players:: @ 8277A53 CableClub_EventScript_TryLeadGroup4Players:: @ 8277A53
call CableClub_EventScript_TryBecomeLinkLeader call CableClub_EventScript_TryBecomeLinkLeader
compare VAR_RESULT, 1 compare VAR_RESULT, LINKUP_SUCCESS
goto_if_eq CableClub_EventScript_EnterWirelessLinkRoom goto_if_eq CableClub_EventScript_EnterWirelessLinkRoom
compare VAR_RESULT, 5 compare VAR_RESULT, LINKUP_FAILED
goto_if_eq CableClub_EventScript_ChooseLinkLeaderFrom4 goto_if_eq CableClub_EventScript_ChooseLinkLeaderFrom4
compare VAR_RESULT, 8 compare VAR_RESULT, LINKUP_RETRY_ROLE_ASSIGN
goto_if_eq CableClub_EventScript_TryLeadGroup4Players goto_if_eq CableClub_EventScript_TryLeadGroup4Players
release release
return return
CableClub_EventScript_TryJoinGroup4Players:: @ 8277A7B CableClub_EventScript_TryJoinGroup4Players:: @ 8277A7B
call CableClub_EventScript_TryJoinLinkGroup call CableClub_EventScript_TryJoinLinkGroup
compare VAR_RESULT, 1 compare VAR_RESULT, LINKUP_SUCCESS
goto_if_eq CableClub_EventScript_EnterWirelessLinkRoom goto_if_eq CableClub_EventScript_EnterWirelessLinkRoom
compare VAR_RESULT, 5 compare VAR_RESULT, LINKUP_FAILED
goto_if_eq CableClub_EventScript_ChooseLinkLeaderFrom4 goto_if_eq CableClub_EventScript_ChooseLinkLeaderFrom4
compare VAR_RESULT, 8 compare VAR_RESULT, LINKUP_RETRY_ROLE_ASSIGN
goto_if_eq CableClub_EventScript_TryJoinGroup4Players goto_if_eq CableClub_EventScript_TryJoinGroup4Players
release release
return return
@@ -1247,22 +1247,22 @@ CableClub_EventScript_ChooseLinkLeader:: @ 8277AA3
CableClub_EventScript_TryLeadGroupXPlayers:: @ 8277AE0 CableClub_EventScript_TryLeadGroupXPlayers:: @ 8277AE0
call CableClub_EventScript_TryBecomeLinkLeader call CableClub_EventScript_TryBecomeLinkLeader
compare VAR_RESULT, 1 compare VAR_RESULT, LINKUP_SUCCESS
goto_if_eq CableClub_EventScript_EnterWirelessLinkRoom goto_if_eq CableClub_EventScript_EnterWirelessLinkRoom
compare VAR_RESULT, 5 compare VAR_RESULT, LINKUP_FAILED
goto_if_eq CableClub_EventScript_ChooseLinkLeader goto_if_eq CableClub_EventScript_ChooseLinkLeader
compare VAR_RESULT, 8 compare VAR_RESULT, LINKUP_RETRY_ROLE_ASSIGN
goto_if_eq CableClub_EventScript_TryLeadGroupXPlayers goto_if_eq CableClub_EventScript_TryLeadGroupXPlayers
release release
return return
CableClub_EventScript_TryJoinGroupXPlayers:: @ 8277B08 CableClub_EventScript_TryJoinGroupXPlayers:: @ 8277B08
call CableClub_EventScript_TryJoinLinkGroup call CableClub_EventScript_TryJoinLinkGroup
compare VAR_RESULT, 1 compare VAR_RESULT, LINKUP_SUCCESS
goto_if_eq CableClub_EventScript_EnterWirelessLinkRoom goto_if_eq CableClub_EventScript_EnterWirelessLinkRoom
compare VAR_RESULT, 5 compare VAR_RESULT, LINKUP_FAILED
goto_if_eq CableClub_EventScript_ChooseLinkLeader goto_if_eq CableClub_EventScript_ChooseLinkLeader
compare VAR_RESULT, 8 compare VAR_RESULT, LINKUP_RETRY_ROLE_ASSIGN
goto_if_eq CableClub_EventScript_TryJoinGroupXPlayers goto_if_eq CableClub_EventScript_TryJoinGroupXPlayers
release release
return return
@@ -1310,7 +1310,7 @@ EventScript_WirelessBoxResults:: @ 8277B8A
compare VAR_RESULT, FALSE compare VAR_RESULT, FALSE
goto_if_eq CableClub_EventScript_AdapterNotConnected goto_if_eq CableClub_EventScript_AdapterNotConnected
fadescreen FADE_TO_BLACK fadescreen FADE_TO_BLACK
special sub_801A42C special ShowWirelessCommunicationScreen
waitstate waitstate
msgbox CableClub_Text_ParticipantsStepUpToCounter, MSGBOX_DEFAULT msgbox CableClub_Text_ParticipantsStepUpToCounter, MSGBOX_DEFAULT
releaseall releaseall
@@ -1453,22 +1453,22 @@ MossdeepCity_GameCorner_1F_EventScript_ChooseLinkLeader:: @ 8277D81
MossdeepCity_GameCorner_1F_EventScript_TryBecomeLinkLeader:: @ 8277DBE MossdeepCity_GameCorner_1F_EventScript_TryBecomeLinkLeader:: @ 8277DBE
call CableClub_EventScript_TryBecomeLinkLeader call CableClub_EventScript_TryBecomeLinkLeader
compare VAR_RESULT, 1 compare VAR_RESULT, LINKUP_SUCCESS
goto_if_eq MossdeepCity_GameCorner_1F_EventScript_EnterMinigameRoom goto_if_eq MossdeepCity_GameCorner_1F_EventScript_EnterMinigameRoom
compare VAR_RESULT, 5 compare VAR_RESULT, LINKUP_FAILED
goto_if_eq MossdeepCity_GameCorner_1F_EventScript_ChooseLinkLeader goto_if_eq MossdeepCity_GameCorner_1F_EventScript_ChooseLinkLeader
compare VAR_RESULT, 8 compare VAR_RESULT, LINKUP_RETRY_ROLE_ASSIGN
goto_if_eq MossdeepCity_GameCorner_1F_EventScript_TryBecomeLinkLeader goto_if_eq MossdeepCity_GameCorner_1F_EventScript_TryBecomeLinkLeader
release release
return return
MossdeepCity_GameCorner_1F_EventScript_TryJoinLinkGroup:: @ 8277DE6 MossdeepCity_GameCorner_1F_EventScript_TryJoinLinkGroup:: @ 8277DE6
call CableClub_EventScript_TryJoinLinkGroup call CableClub_EventScript_TryJoinLinkGroup
compare VAR_RESULT, 1 compare VAR_RESULT, LINKUP_SUCCESS
goto_if_eq MossdeepCity_GameCorner_1F_EventScript_EnterMinigameRoom goto_if_eq MossdeepCity_GameCorner_1F_EventScript_EnterMinigameRoom
compare VAR_RESULT, 5 compare VAR_RESULT, LINKUP_FAILED
goto_if_eq MossdeepCity_GameCorner_1F_EventScript_ChooseLinkLeader goto_if_eq MossdeepCity_GameCorner_1F_EventScript_ChooseLinkLeader
compare VAR_RESULT, 8 compare VAR_RESULT, LINKUP_RETRY_ROLE_ASSIGN
goto_if_eq MossdeepCity_GameCorner_1F_EventScript_TryJoinLinkGroup goto_if_eq MossdeepCity_GameCorner_1F_EventScript_TryJoinLinkGroup
release release
return return
+4 -4
View File
@@ -39,7 +39,7 @@ gSpecials:: @ 81DBA64
def_special TryBattleLinkup def_special TryBattleLinkup
def_special TryTradeLinkup def_special TryTradeLinkup
def_special TryRecordMixLinkup def_special TryRecordMixLinkup
def_special sub_80B2EA8 def_special ValidateMixingGameLanguage
def_special CloseLink def_special CloseLink
def_special ColosseumPlayerSpotTriggered def_special ColosseumPlayerSpotTriggered
def_special PlayerEnteredTradeSeat def_special PlayerEnteredTradeSeat
@@ -426,8 +426,8 @@ gSpecials:: @ 81DBA64
def_special IsWirelessAdapterConnected def_special IsWirelessAdapterConnected
def_special TryBecomeLinkLeader def_special TryBecomeLinkLeader
def_special TryJoinLinkGroup def_special TryJoinLinkGroup
def_special UnionRoomSpecial def_special RunUnionRoom
def_special sub_801A42C def_special ShowWirelessCommunicationScreen
def_special InitUnionRoom def_special InitUnionRoom
def_special BufferUnionRoomPlayerName def_special BufferUnionRoomPlayerName
def_special sub_801DC20 def_special sub_801DC20
@@ -502,7 +502,7 @@ gSpecials:: @ 81DBA64
def_special CreateAbnormalWeatherEvent def_special CreateAbnormalWeatherEvent
def_special GetAbnormalWeatherMapNameAndType def_special GetAbnormalWeatherMapNameAndType
def_special GetMartEmployeeObjectEventId def_special GetMartEmployeeObjectEventId
def_special sub_80A08CC def_special SaveForBattleTowerLink
def_special Unused_SetWeatherSunny def_special Unused_SetWeatherSunny
def_special SetUnlockedPokedexFlags def_special SetUnlockedPokedexFlags
def_special IsTrainerRegistered def_special IsTrainerRegistered
+177 -89
View File
@@ -1,95 +1,183 @@
#ifndef GUARD_TEXT_H #ifndef GUARD_TEXT_H
#define GUARD_TEXT_H #define GUARD_TEXT_H
#define CHAR_SPACE 0x00 #define CHAR_SPACE 0x00
#define CHAR_PLUS 0x2E #define CHAR_A_GRAVE 0x01
#define CHAR_0 0xA1 #define CHAR_A_ACUTE 0x02
#define CHAR_1 0xA2 #define CHAR_A_CIRCUMFLEX 0x03
#define CHAR_2 0xA3 #define CHAR_C_CEDILLA 0x04
#define CHAR_3 0xA4 #define CHAR_E_GRAVE 0x05
#define CHAR_4 0xA5 #define CHAR_E_ACUTE 0x06
#define CHAR_5 0xA6 #define CHAR_E_CIRCUMFLEX 0x07
#define CHAR_6 0xA7 #define CHAR_E_DIAERESIS 0x08
#define CHAR_7 0xA8 #define CHAR_I_GRAVE 0x09
#define CHAR_8 0xA9 //#define CHAR_I_ACUTE 0x0A // Is 0x5A instead
#define CHAR_9 0xAA #define CHAR_I_CIRCUMFLEX 0x0B
#define CHAR_EXCL_MARK 0xAB #define CHAR_I_DIAERESIS 0x0C
#define CHAR_QUESTION_MARK 0xAC #define CHAR_O_GRAVE 0x0D
#define CHAR_PERIOD 0xAD #define CHAR_O_ACUTE 0x0E
#define CHAR_HYPHEN 0xAE #define CHAR_O_CIRCUMFLEX 0x0F
#define CHAR_ELLIPSIS 0xB0 #define CHAR_OE 0x10
#define CHAR_DBL_QUOT_LEFT 0xB1 #define CHAR_U_GRAVE 0x11
#define CHAR_DBL_QUOT_RIGHT 0xB2 #define CHAR_U_ACUTE 0x12
#define CHAR_SGL_QUOT_LEFT 0xB3 #define CHAR_U_CIRCUMFLEX 0x13
#define CHAR_SGL_QUOT_RIGHT 0xB4 #define CHAR_N_TILDE 0x14
#define CHAR_MALE 0xB5 #define CHAR_ESZETT 0x15
#define CHAR_FEMALE 0xB6 #define CHAR_a_GRAVE 0x16
#define CHAR_CURRENCY 0xB7 #define CHAR_a_ACUTE 0x17
#define CHAR_COMMA 0xB8 //#define CHAR_a_CIRCUMFLEX 0x18 // Is 0x68 instead
#define CHAR_MULT_SIGN 0xB9 #define CHAR_c_CEDILLA 0x19
#define CHAR_SLASH 0xBA #define CHAR_e_GRAVE 0x1A
#define CHAR_A 0xBB #define CHAR_e_ACUTE 0x1B
#define CHAR_B 0xBC #define CHAR_e_CIRCUMFLEX 0x1C
#define CHAR_C 0xBD #define CHAR_e_DIAERESIS 0x1D
#define CHAR_D 0xBE #define CHAR_i_GRAVE 0x1E
#define CHAR_E 0xBF //#define CHAR_i_ACUTE 0x1F // Is 0x6F instead
#define CHAR_F 0xC0 #define CHAR_i_CIRCUMFLEX 0x20
#define CHAR_G 0xC1 #define CHAR_i_DIAERESIS 0x21
#define CHAR_H 0xC2 #define CHAR_o_GRAVE 0x22
#define CHAR_I 0xC3 #define CHAR_o_ACUTE 0x23
#define CHAR_J 0xC4 #define CHAR_o_CIRCUMFLEX 0x24
#define CHAR_K 0xC5 #define CHAR_oe 0x25
#define CHAR_L 0xC6 #define CHAR_u_GRAVE 0x26
#define CHAR_M 0xC7 #define CHAR_u_ACUTE 0x27
#define CHAR_N 0xC8 #define CHAR_u_CIRCUMFLEX 0x28
#define CHAR_O 0xC9 #define CHAR_n_TILDE 0x29
#define CHAR_P 0xCA #define CHAR_MASCULINE_ORDINAL 0x2A
#define CHAR_Q 0xCB #define CHAR_FEMININE_ORDINAL 0x2B
#define CHAR_R 0xCC #define CHAR_SUPER_ER 0x2C
#define CHAR_S 0xCD #define CHAR_AMPERSAND 0x2D
#define CHAR_T 0xCE #define CHAR_PLUS 0x2E
#define CHAR_U 0xCF //
#define CHAR_V 0xD0 #define CHAR_LV 0x34
#define CHAR_W 0xD1 #define CHAR_EQUALS 0x35
#define CHAR_X 0xD2 #define CHAR_SEMICOLON 0x36
#define CHAR_Y 0xD3 //
#define CHAR_Z 0xD4 #define CHAR_INV_QUESTION_MARK 0x51
#define CHAR_a 0xD5 #define CHAR_INV_EXCL_MARK 0x52
#define CHAR_b 0xD6 #define CHAR_PK 0x53
#define CHAR_c 0xD7 #define CHAR_MN 0x54
#define CHAR_d 0xD8 #define CHAR_PO 0x55
#define CHAR_e 0xD9 #define CHAR_KE 0x56
#define CHAR_f 0xDA #define CHAR_BLOCK_1 0x57 // Each of these 3
#define CHAR_g 0xDB #define CHAR_BLOCK_2 0x58 // chars contains 1/3
#define CHAR_h 0xDC #define CHAR_BLOCK_3 0x59 // of the word BLOCK
#define CHAR_i 0xDD #define CHAR_I_ACUTE 0x5A
#define CHAR_j 0xDE #define CHAR_PERCENT 0x5B
#define CHAR_k 0xDF #define CHAR_LEFT_PAREN 0x5C
#define CHAR_l 0xE0 #define CHAR_RIGHT_PAREN 0x5D
#define CHAR_m 0xE1 //
#define CHAR_n 0xE2 #define CHAR_a_CIRCUMFLEX 0x68
#define CHAR_o 0xE3 //
#define CHAR_p 0xE4 #define CHAR_i_ACUTE 0x6F
#define CHAR_q 0xE5 //
#define CHAR_r 0xE6 #define CHAR_UNK_SPACER 0x77
#define CHAR_s 0xE7 //
#define CHAR_t 0xE8 #define CHAR_UP_ARROW 0x79
#define CHAR_u 0xE9 #define CHAR_DOWN_ARROW 0x7A
#define CHAR_v 0xEA #define CHAR_LEFT_ARROW 0x7B
#define CHAR_w 0xEB #define CHAR_RIGHT_ARROW 0x7C
#define CHAR_x 0xEC //
#define CHAR_y 0xED #define CHAR_SUPER_E 0x84
#define CHAR_z 0xEE #define CHAR_LESS_THAN 0x85
#define CHAR_SPECIAL_F7 0xF7 #define CHAR_GREATER_THAN 0x86
#define CHAR_SPECIAL_F8 0xF8 //
#define CHAR_SPECIAL_F9 0xF9 #define CHAR_SUPER_RE 0xA0
#define CHAR_COLON 0xF0 #define CHAR_0 0xA1
#define CHAR_PROMPT_SCROLL 0xFA // waits for button press and scrolls dialog #define CHAR_1 0xA2
#define CHAR_PROMPT_CLEAR 0xFB // waits for button press and clears dialog #define CHAR_2 0xA3
#define EXT_CTRL_CODE_BEGIN 0xFC // extended control code #define CHAR_3 0xA4
#define PLACEHOLDER_BEGIN 0xFD // string placeholder #define CHAR_4 0xA5
#define CHAR_NEWLINE 0xFE #define CHAR_5 0xA6
#define EOS 0xFF // end of string #define CHAR_6 0xA7
#define CHAR_7 0xA8
#define CHAR_8 0xA9
#define CHAR_9 0xAA
#define CHAR_EXCL_MARK 0xAB
#define CHAR_QUESTION_MARK 0xAC
#define CHAR_PERIOD 0xAD
#define CHAR_HYPHEN 0xAE
#define CHAR_BULLET 0xAF
#define CHAR_ELLIPSIS 0xB0
#define CHAR_DBL_QUOT_LEFT 0xB1
#define CHAR_DBL_QUOT_RIGHT 0xB2
#define CHAR_SGL_QUOT_LEFT 0xB3
#define CHAR_SGL_QUOT_RIGHT 0xB4
#define CHAR_MALE 0xB5
#define CHAR_FEMALE 0xB6
#define CHAR_CURRENCY 0xB7
#define CHAR_COMMA 0xB8
#define CHAR_MULT_SIGN 0xB9
#define CHAR_SLASH 0xBA
#define CHAR_A 0xBB
#define CHAR_B 0xBC
#define CHAR_C 0xBD
#define CHAR_D 0xBE
#define CHAR_E 0xBF
#define CHAR_F 0xC0
#define CHAR_G 0xC1
#define CHAR_H 0xC2
#define CHAR_I 0xC3
#define CHAR_J 0xC4
#define CHAR_K 0xC5
#define CHAR_L 0xC6
#define CHAR_M 0xC7
#define CHAR_N 0xC8
#define CHAR_O 0xC9
#define CHAR_P 0xCA
#define CHAR_Q 0xCB
#define CHAR_R 0xCC
#define CHAR_S 0xCD
#define CHAR_T 0xCE
#define CHAR_U 0xCF
#define CHAR_V 0xD0
#define CHAR_W 0xD1
#define CHAR_X 0xD2
#define CHAR_Y 0xD3
#define CHAR_Z 0xD4
#define CHAR_a 0xD5
#define CHAR_b 0xD6
#define CHAR_c 0xD7
#define CHAR_d 0xD8
#define CHAR_e 0xD9
#define CHAR_f 0xDA
#define CHAR_g 0xDB
#define CHAR_h 0xDC
#define CHAR_i 0xDD
#define CHAR_j 0xDE
#define CHAR_k 0xDF
#define CHAR_l 0xE0
#define CHAR_m 0xE1
#define CHAR_n 0xE2
#define CHAR_o 0xE3
#define CHAR_p 0xE4
#define CHAR_q 0xE5
#define CHAR_r 0xE6
#define CHAR_s 0xE7
#define CHAR_t 0xE8
#define CHAR_u 0xE9
#define CHAR_v 0xEA
#define CHAR_w 0xEB
#define CHAR_x 0xEC
#define CHAR_y 0xED
#define CHAR_z 0xEE
#define CHAR_BLACK_TRIANGLE 0xEF
#define CHAR_COLON 0xF0
#define CHAR_A_DIAERESIS 0xF1
#define CHAR_O_DIAERESIS 0xF2
#define CHAR_U_DIAERESIS 0xF3
#define CHAR_a_DIAERESIS 0xF4
#define CHAR_o_DIAERESIS 0xF5
#define CHAR_u_DIAERESIS 0xF6
#define CHAR_SPECIAL_F7 0xF7
#define CHAR_SPECIAL_F8 0xF8
#define CHAR_SPECIAL_F9 0xF9
#define CHAR_PROMPT_SCROLL 0xFA // waits for button press and scrolls dialog
#define CHAR_PROMPT_CLEAR 0xFB // waits for button press and clears dialog
#define EXT_CTRL_CODE_BEGIN 0xFC // extended control code
#define PLACEHOLDER_BEGIN 0xFD // string placeholder
#define CHAR_NEWLINE 0xFE
#define EOS 0xFF // end of string
// Special F9 chars // Special F9 chars
#define CHAR_UP_ARROW_2 0x00 #define CHAR_UP_ARROW_2 0x00

Before

Width:  |  Height:  |  Size: 513 B

After

Width:  |  Height:  |  Size: 513 B

Before

Width:  |  Height:  |  Size: 189 B

After

Width:  |  Height:  |  Size: 189 B

Before

Width:  |  Height:  |  Size: 307 B

After

Width:  |  Height:  |  Size: 307 B

Before

Width:  |  Height:  |  Size: 188 B

After

Width:  |  Height:  |  Size: 188 B

Before

Width:  |  Height:  |  Size: 247 B

After

Width:  |  Height:  |  Size: 247 B

Before

Width:  |  Height:  |  Size: 157 B

After

Width:  |  Height:  |  Size: 157 B

Before

Width:  |  Height:  |  Size: 146 B

After

Width:  |  Height:  |  Size: 146 B

+1 -1
View File
@@ -3,6 +3,6 @@
#include "main.h" #include "main.h"
void sub_8020C70(MainCallback callback); void StartBerryCrush(MainCallback callback);
#endif // GUARD_BERRY_CRUSH_H #endif // GUARD_BERRY_CRUSH_H
+5 -11
View File
@@ -3,18 +3,12 @@
#include "task.h" #include "task.h"
// Exported type declarations void CreateTask_EnterCableClubSeat(TaskFunc taskFunc);
u8 CreateTask_ReestablishCableClubLink(void);
// Exported RAM declarations void CB2_ReturnFromCableClubBattle(void);
bool32 AreBattleTowerLinkSpeciesSame(u16 *speciesList1, u16 *speciesList2);
// Exported ROM declarations
void sub_80B37D4(TaskFunc taskFunc);
u8 sub_80B3050(void);
void sub_80B360C(void);
bool32 sub_80B2AF4(u16 *arg0, u16 *arg1);
void sub_80B3AF8(u8 taskId); void sub_80B3AF8(u8 taskId);
void task00_08081A90(u8 taskId); void Task_WaitForLinkPlayerConnection(u8 taskId);
bool32 GetLinkTrainerCardColor(u8 linkPlayerIndex); bool32 GetLinkTrainerCardColor(u8 linkPlayerIndex);
#endif //GUARD_CABLE_CLUB_H #endif //GUARD_CABLE_CLUB_H
+16
View File
@@ -12,4 +12,20 @@
#define USING_MINIGAME 8 #define USING_MINIGAME 8
#define USING_BATTLE_TOWER 9 #define USING_BATTLE_TOWER 9
// Return states for the group of specials that use CreateLinkupTask
// A few also used by TryBecomeLinkLeader and TryJoinLinkGroup
#define LINKUP_ONGOING 0
#define LINKUP_SUCCESS 1
#define LINKUP_SOMEONE_NOT_READY 2
#define LINKUP_DIFF_SELECTIONS 3
#define LINKUP_WRONG_NUM_PLAYERS 4
#define LINKUP_FAILED 5
#define LINKUP_CONNECTION_ERROR 6
#define LINKUP_PLAYER_NOT_READY 7
#define LINKUP_RETRY_ROLE_ASSIGN 8
#define LINKUP_PARTNER_NOT_READY 9
#define LINKUP_FAILED_CONTEST_GMODE 10
#define LINKUP_FAILED_BATTLE_TOWER 11
#define LINKUP_FOREIGN_GAME 12
#endif //GUARD_CONSTANTS_CABLE_CLUB_H #endif //GUARD_CONSTANTS_CABLE_CLUB_H
+1
View File
@@ -52,6 +52,7 @@
#define APPRENTICE_COUNT 4 #define APPRENTICE_COUNT 4
#define APPRENTICE_MAX_QUESTIONS 9 #define APPRENTICE_MAX_QUESTIONS 9
#define MAX_REMATCH_ENTRIES 100 // only REMATCH_TABLE_ENTRIES (78) are used #define MAX_REMATCH_ENTRIES 100 // only REMATCH_TABLE_ENTRIES (78) are used
#define UNION_ROOM_KB_ROW_COUNT 10
#define PYRAMID_BAG_ITEMS_COUNT 10 #define PYRAMID_BAG_ITEMS_COUNT 10
#define HALL_FACILITIES_COUNT 9 // 7 facilities for single mode + tower double mode + tower multi mode. #define HALL_FACILITIES_COUNT 9 // 7 facilities for single mode + tower double mode + tower multi mode.
+1 -1
View File
@@ -13,7 +13,7 @@
#define TRAINER_PLAYER 1023 #define TRAINER_PLAYER 1023
#define TRAINER_SECRET_BASE 1024 #define TRAINER_SECRET_BASE 1024
#define TRAINER_LINK_OPPONENT 2048 #define TRAINER_LINK_OPPONENT 2048
#define TRAINER_OPPONENT_C00 3072 #define TRAINER_UNION_ROOM 3072
#define TRAINER_STEVEN_PARTNER 3075 #define TRAINER_STEVEN_PARTNER 3075
#define TRAINER_PIC_HIKER 0 #define TRAINER_PIC_HIKER 0
+76 -2
View File
@@ -1,6 +1,60 @@
#ifndef GUARD_CONSTANTS_UNION_ROOM_H #ifndef GUARD_CONSTANTS_UNION_ROOM_H
#define GUARD_CONSTANTS_UNION_ROOM_H #define GUARD_CONSTANTS_UNION_ROOM_H
#define MAX_UNION_ROOM_PLAYERS 8
#define UNION_ROOM_SPAWN_NONE 0
#define UNION_ROOM_SPAWN_IN 1
#define UNION_ROOM_SPAWN_OUT 2
#define ACTIVITY_NONE 0
#define ACTIVITY_BATTLE_SINGLE 1
#define ACTIVITY_BATTLE_DOUBLE 2
#define ACTIVITY_BATTLE_MULTI 3
#define ACTIVITY_TRADE 4
#define ACTIVITY_CHAT 5
#define ACTIVITY_WONDER_CARD 6
#define ACTIVITY_WONDER_NEWS 7
#define ACTIVITY_CARD 8
#define ACTIVITY_POKEMON_JUMP 9
#define ACTIVITY_BERRY_CRUSH 10
#define ACTIVITY_BERRY_PICK 11
#define ACTIVITY_SEARCH 12
#define ACTIVITY_SPIN_TRADE 13
#define ACTIVITY_BATTLE_TOWER_OPEN 14
#define ACTIVITY_RECORD_CORNER 15
#define ACTIVITY_BERRY_BLENDER 16
// Player response
#define ACTIVITY_ACCEPT 17
#define ACTIVITY_DECLINE 18
#define ACTIVITY_NPCTALK 19
#define ACTIVITY_PLYRTALK 20
// Duplicate IDs?
#define ACTIVITY_WONDER_CARD2 21
#define ACTIVITY_WONDER_NEWS2 22
#define ACTIVITY_CONTEST_COOL 23
#define ACTIVITY_CONTEST_BEAUTY 24
#define ACTIVITY_CONTEST_CUTE 25
#define ACTIVITY_CONTEST_SMART 26
#define ACTIVITY_CONTEST_TOUGH 27
#define ACTIVITY_BATTLE_TOWER 28
#define ACTIVITY_29 29
#define IN_UNION_ROOM (1 << 6)
// Used in UR_AddTextPrinterParameterized
#define UR_COLOR_DKE_WHT_LTE 0
#define UR_COLOR_RED_WHT_LTR 1
#define UR_COLOR_GRN_WHT_LTG 2
#define UR_COLOR_WHT_WHT_LTE 3
#define UR_COLOR_WHT_DKE_LTE 4
#define UR_COLOR_GRN_DN6_LTB 5
#define UR_COLOR_DN5_DN6_LTB 6
#define LINK_GROUP_SINGLE_BATTLE 0 #define LINK_GROUP_SINGLE_BATTLE 0
#define LINK_GROUP_DOUBLE_BATTLE 1 #define LINK_GROUP_DOUBLE_BATTLE 1
#define LINK_GROUP_MULTI_BATTLE 2 #define LINK_GROUP_MULTI_BATTLE 2
@@ -10,8 +64,8 @@
#define LINK_GROUP_BERRY_PICKING 6 #define LINK_GROUP_BERRY_PICKING 6
#define LINK_GROUP_WONDER_CARD 7 #define LINK_GROUP_WONDER_CARD 7
#define LINK_GROUP_WONDER_NEWS 8 #define LINK_GROUP_WONDER_NEWS 8
#define LINK_GROUP_UNK_9 9 #define LINK_GROUP_UNION_ROOM_RESUME 9
#define LINK_GROUP_UNK_10 10 #define LINK_GROUP_UNION_ROOM_INIT 10
#define LINK_GROUP_UNK_11 11 #define LINK_GROUP_UNK_11 11
#define LINK_GROUP_RECORD_CORNER 12 #define LINK_GROUP_RECORD_CORNER 12
#define LINK_GROUP_BERRY_BLENDER 13 #define LINK_GROUP_BERRY_BLENDER 13
@@ -25,4 +79,24 @@
#define LINK_GROUP_BATTLE_TOWER_OPEN 21 #define LINK_GROUP_BATTLE_TOWER_OPEN 21
#define NUM_LINK_GROUP_TYPES 22 #define NUM_LINK_GROUP_TYPES 22
#define UR_TRADE_MATCH 0
#define UR_TRADE_NOTYPE 1
#define UR_TRADE_NOEGG 2
#define UR_TRADE_READY 0
#define UR_TRADE_PLAYER_NOT_READY 1
#define UR_TRADE_PARTNER_NOT_READY 2
#define UR_INTERACT_PLAYER_1 1
#define UR_INTERACT_PLAYER_2 2
#define UR_INTERACT_PLAYER_3 3
#define UR_INTERACT_PLAYER_4 4
#define UR_INTERACT_PLAYER_5 5
#define UR_INTERACT_PLAYER_6 6
#define UR_INTERACT_PLAYER_7 7
#define UR_INTERACT_PLAYER_8 8
#define UR_INTERACT_ATTENDANT 9
#define UR_INTERACT_UNUSED 10
#define UR_INTERACT_START_MENU 11
#endif //GUARD_CONSTANTS_UNION_ROOM_H #endif //GUARD_CONSTANTS_UNION_ROOM_H
+1 -1
View File
@@ -1,7 +1,7 @@
#ifndef GUARD_DODRIO_BERRY_PICKING_H #ifndef GUARD_DODRIO_BERRY_PICKING_H
#define GUARD_DODRIO_BERRY_PICKING_H #define GUARD_DODRIO_BERRY_PICKING_H
void sub_802493C(u16 a0, void (*callback)(void)); void StartDodrioBerryPicking(u16 a0, void (*callback)(void));
void IsDodrioInParty(void); void IsDodrioInParty(void);
void ShowDodrioBerryPickingRecords(void); void ShowDodrioBerryPickingRecords(void);
+1 -1
View File
@@ -8,6 +8,6 @@ void LockSelectedObjectEvent(void);
void sub_8098630(void); void sub_8098630(void);
bool8 sub_8098734(void); bool8 sub_8098734(void);
void ScriptUnfreezeObjectEvents(void); void ScriptUnfreezeObjectEvents(void);
void sub_8098524(void); void UnionRoom_UnlockPlayerAndChatPartner(void);
#endif // GUARD_EVENT_OBJECT_LOCK_H #endif // GUARD_EVENT_OBJECT_LOCK_H
+9 -9
View File
@@ -81,11 +81,11 @@ void sub_808E16C(s16, s16);
void OverrideSecretBaseDecorationSpriteScript(u8 localId, u8 mapNum, u8 mapGroup, u8 decorCat); void OverrideSecretBaseDecorationSpriteScript(u8 localId, u8 mapNum, u8 mapGroup, u8 decorCat);
void sub_8092FF0(s16, s16, s16 *, s16 *); void sub_8092FF0(s16, s16, s16 *, s16 *);
u8 GetFaceDirectionAnimNum(u8); u8 GetFaceDirectionAnimNum(u8);
void sub_80930E0(s16 *, s16 *, s16, s16); void SetSpritePosToOffsetMapCoords(s16 *, s16 *, s16, s16);
void ObjectEventClearHeldMovement(struct ObjectEvent *); void ObjectEventClearHeldMovement(struct ObjectEvent *);
void ObjectEventClearHeldMovementIfActive(struct ObjectEvent *); void ObjectEventClearHeldMovementIfActive(struct ObjectEvent *);
void TrySpawnObjectEvents(s16, s16); void TrySpawnObjectEvents(s16, s16);
u8 sprite_new(u8 graphicsId, u8 a1, s16 x, s16 y, u8 z, u8 direction); u8 CreateObjectSprite(u8 graphicsId, u8 a1, s16 x, s16 y, u8 z, u8 direction);
u8 AddPseudoObjectEvent(u16, void (*)(struct Sprite *), s16 x, s16 y, u8 subpriority); u8 AddPseudoObjectEvent(u16, void (*)(struct Sprite *), s16 x, s16 y, u8 subpriority);
u8 TrySpawnObjectEvent(u8, u8, u8); u8 TrySpawnObjectEvent(u8, u8, u8);
u8 SpawnSpecialObjectEventParameterized(u8 graphicsId, u8 movementBehavior, u8 localId, s16 x, s16 y, u8 z); u8 SpawnSpecialObjectEventParameterized(u8 graphicsId, u8 movementBehavior, u8 localId, s16 x, s16 y, u8 z);
@@ -180,7 +180,7 @@ void CreateLevitateMovementTask(struct ObjectEvent *);
void DestroyExtraMovementTask(u8); void DestroyExtraMovementTask(u8);
void UnfreezeObjectEvents(void); void UnfreezeObjectEvents(void);
void FreezeObjectEventsExceptOne(u8 objectEventId); void FreezeObjectEventsExceptOne(u8 objectEventId);
void sub_8097B78(u8, u8); void TurnObjectEventSprite(u8, u8);
void sub_8098074(u8 var1, u8 var2); void sub_8098074(u8 var1, u8 var2);
void FreezeObjectEvents(void); void FreezeObjectEvents(void);
bool8 FreezeObjectEvent(struct ObjectEvent *objectEvent); bool8 FreezeObjectEvent(struct ObjectEvent *objectEvent);
@@ -194,7 +194,7 @@ void UpdateObjectEventSpriteVisibility(struct Sprite *sprite, bool8 invisible);
s16 sub_809773C(s16 a1); s16 sub_809773C(s16 a1);
s16 sub_8097728(s16 a1); s16 sub_8097728(s16 a1);
void CameraObjectReset2(void); void CameraObjectReset2(void);
u8 ObjectEventGetBerryTreeId(u8 objectEventId); u8 GetObjectEventBerryTreeId(u8 objectEventId);
void sub_8092EF0(u8 mapId, u8 mapNumber, u8 mapGroup); void sub_8092EF0(u8 mapId, u8 mapNumber, u8 mapGroup);
bool8 IsBerryTreeSparkling(u8, u8, u8); bool8 IsBerryTreeSparkling(u8, u8, u8);
@@ -414,10 +414,10 @@ u8 MovementType_RunInPlace_Step0(struct ObjectEvent *, struct Sprite *);
u8 MovementType_Invisible_Step0(struct ObjectEvent *, struct Sprite *); u8 MovementType_Invisible_Step0(struct ObjectEvent *, struct Sprite *);
u8 MovementType_Invisible_Step1(struct ObjectEvent *, struct Sprite *); u8 MovementType_Invisible_Step1(struct ObjectEvent *, struct Sprite *);
u8 MovementType_Invisible_Step2(struct ObjectEvent *, struct Sprite *); u8 MovementType_Invisible_Step2(struct ObjectEvent *, struct Sprite *);
void sub_8097C44(u8 var, bool32 var2); void SetObjectEventSpriteInvisibility(u8 var, bool32 var2);
bool32 sub_8097C8C(u8 var); bool32 IsObjectEventSpriteInvisible(u8 var);
void sub_8097BB4(u8 var1, u8 graphicsId); void SetObjectEventSpriteGraphics(u8 var1, u8 graphicsId);
void sub_8097CC4(u8 var1, u8 var2); void SetObjectEventSpriteAnim(u8 var1, u8 var2);
bool32 sub_8097D9C(u8 var); bool32 IsObjectEventSpriteAnimating(u8 var);
#endif //GUARD_EVENT_OBJECT_MOVEMENT_H #endif //GUARD_EVENT_OBJECT_MOVEMENT_H
+1 -1
View File
@@ -43,6 +43,7 @@ void copy_map_tileset1_to_vram(const struct MapLayout *);
void copy_map_tileset2_to_vram(const struct MapLayout *); void copy_map_tileset2_to_vram(const struct MapLayout *);
struct MapHeader const *const mapconnection_get_mapheader(struct MapConnection *connection); struct MapHeader const *const mapconnection_get_mapheader(struct MapConnection *connection);
struct MapConnection *GetConnectionAtCoords(s16 x, s16 y); struct MapConnection *GetConnectionAtCoords(s16 x, s16 y);
void MapGridSetMetatileImpassabilityAt(int x, int y, bool32 impassable);
void SpriteCB_PokeballGlow(struct Sprite *); void SpriteCB_PokeballGlow(struct Sprite *);
void SpriteCB_PokecenterMonitor(struct Sprite *); void SpriteCB_PokecenterMonitor(struct Sprite *);
@@ -50,6 +51,5 @@ void SpriteCB_HallOfFameMonitor(struct Sprite *);
// field_region_map.c // field_region_map.c
void FieldInitRegionMap(MainCallback callback); void FieldInitRegionMap(MainCallback callback);
void sub_8088B94(int x, int y, int a2);
#endif //GUARD_FIELDMAP_H #endif //GUARD_FIELDMAP_H
+3
View File
@@ -27,6 +27,9 @@ typedef double f64;
typedef u8 bool8; typedef u8 bool8;
typedef u16 bool16; typedef u16 bool16;
typedef u32 bool32; typedef u32 bool32;
typedef vu8 vbool8;
typedef vu16 vbool16;
typedef vu32 vbool32;
struct BgCnt struct BgCnt
{ {
+1 -1
View File
@@ -974,7 +974,7 @@ struct SaveBlock1
/*0x3B24*/ u8 seen2[DEX_FLAGS_NO]; /*0x3B24*/ u8 seen2[DEX_FLAGS_NO];
/*0x3B58*/ LilycoveLady lilycoveLady; /*0x3B58*/ LilycoveLady lilycoveLady;
/*0x3B98*/ struct TrainerNameRecord trainerNameRecords[20]; /*0x3B98*/ struct TrainerNameRecord trainerNameRecords[20];
/*0x3C88*/ u8 unk3C88[10][21]; /*0x3C88*/ u8 registeredTexts[UNION_ROOM_KB_ROW_COUNT][21];
/*0x3D5A*/ u8 filler3D5A[0xA]; /*0x3D5A*/ u8 filler3D5A[0xA];
/*0x3D64*/ struct SaveTrainerHill trainerHill; /*0x3D64*/ struct SaveTrainerHill trainerHill;
/*0x3D70*/ struct WaldaPhrase waldaPhrase; /*0x3D70*/ struct WaldaPhrase waldaPhrase;
+8 -8
View File
@@ -4986,14 +4986,14 @@ extern const u16 gEasyChatRightWindow_Pal[];
extern const u32 gUsePokeblockCondition_Gfx[]; extern const u32 gUsePokeblockCondition_Gfx[];
// Union Room Chat // Union Room Chat
extern const u16 gUnknown_08DD4BB0[]; extern const u16 gUnionRoomChat_Background_Pal[];
extern const u16 gUnknown_08DD4BD0[]; extern const u32 gUnionRoomChat_Background_Gfx[];
extern const u32 gUnknown_08DD4BF0[]; extern const u32 gUnionRoomChat_Background_Tilemap[];
extern const u32 gUnknown_08DD4C4C[]; extern const u16 gUnionRoomChat_Window_Pal1[];
extern const u32 gUnknown_08DD4CF8[]; extern const u16 gUnionRoomChat_Window_Pal2[];
extern const u16 gLinkMiscMenu_Pal[]; extern const u32 gUnionRoomChat_Border_Gfx[];
extern const u32 gLinkMiscMenu_Gfx[]; extern const u32 gUnionRoomChat_Border_Tilemap[];
extern const u32 gLinkMiscMenu_Tilemap[]; extern const u32 gUnionRoomChat_RButtonLabels[];
// Use Pokeblock // Use Pokeblock
extern const u8 gPokenavConditionCancel_Gfx[]; extern const u8 gPokenavConditionCancel_Gfx[];
+23 -24
View File
@@ -73,10 +73,10 @@
#define LINKCMD_CANCEL_TRADE 0xEEBB #define LINKCMD_CANCEL_TRADE 0xEEBB
#define LINKCMD_0xEECC 0xEECC #define LINKCMD_0xEECC 0xEECC
#define LINKTYPE_0x1111 0x1111 // trade #define LINKTYPE_TRADE 0x1111
#define LINKTYPE_0x1122 0x1122 // trade #define LINKTYPE_TRADE_CONNECTING 0x1122
#define LINKTYPE_0x1133 0x1133 // trade #define LINKTYPE_TRADE_SETUP 0x1133
#define LINKTYPE_0x1144 0x1144 // trade #define LINKTYPE_TRADE_DISCONNECTED 0x1144
#define LINKTYPE_BATTLE 0x2211 #define LINKTYPE_BATTLE 0x2211
#define LINKTYPE_0x2222 0x2222 // unused battle? #define LINKTYPE_0x2222 0x2222 // unused battle?
#define LINKTYPE_SINGLE_BATTLE 0x2233 #define LINKTYPE_SINGLE_BATTLE 0x2233
@@ -85,13 +85,13 @@
#define LINKTYPE_BATTLE_TOWER_50 0x2266 #define LINKTYPE_BATTLE_TOWER_50 0x2266
#define LINKTYPE_BATTLE_TOWER_OPEN 0x2277 #define LINKTYPE_BATTLE_TOWER_OPEN 0x2277
#define LINKTYPE_BATTLE_TOWER 0x2288 #define LINKTYPE_BATTLE_TOWER 0x2288
#define LINKTYPE_0x3311 0x3311 #define LINKTYPE_RECORD_MIX_BEFORE 0x3311
#define LINKTYPE_0x3322 0x3322 #define LINKTYPE_RECORD_MIX_AFTER 0x3322
#define LINKTYPE_BERRY_BLENDER_SETUP 0x4411 #define LINKTYPE_BERRY_BLENDER_SETUP 0x4411
#define LINKTYPE_BERRY_BLENDER 0x4422 #define LINKTYPE_BERRY_BLENDER 0x4422
#define LINKTYPE_0x5501 0x5501 // mystery event #define LINKTYPE_MYSTERY_EVENT 0x5501
#define LINKTYPE_0x5502 0x5502 // unused? #define LINKTYPE_0x5502 0x5502 // unused?
#define LINKTYPE_0x5503 0x5503 // eReader #define LINKTYPE_EREADER 0x5503
#define LINKTYPE_CONTEST_GMODE 0x6601 #define LINKTYPE_CONTEST_GMODE 0x6601
#define LINKTYPE_CONTEST_EMODE 0x6602 #define LINKTYPE_CONTEST_EMODE 0x6602
@@ -126,10 +126,10 @@ enum
EXCHANGE_NOT_STARTED, EXCHANGE_NOT_STARTED,
EXCHANGE_COMPLETE, EXCHANGE_COMPLETE,
EXCHANGE_TIMED_OUT, EXCHANGE_TIMED_OUT,
EXCHANGE_IN_PROGRESS, EXCHANGE_DIFF_SELECTIONS,
EXCHANGE_PLAYER_NOT_READY, EXCHANGE_PLAYER_NOT_READY,
EXCHANGE_PARTNER_NOT_READY, EXCHANGE_PARTNER_NOT_READY,
EXCHANGE_STAT_6, EXCHANGE_WRONG_NUM_PLAYERS,
EXCHANGE_STAT_7 EXCHANGE_STAT_7
}; };
@@ -274,9 +274,8 @@ void LoadWirelessStatusIndicatorSpriteGfx(void);
bool8 IsLinkTaskFinished(void); bool8 IsLinkTaskFinished(void);
void CreateWirelessStatusIndicatorSprite(u8, u8); void CreateWirelessStatusIndicatorSprite(u8, u8);
void sub_800ADF8(void); void sub_800ADF8(void);
void sub_800B488(void); void SetWirelessCommType1(void);
void CheckShouldAdvanceLinkState(void); void CheckShouldAdvanceLinkState(void);
void sub_8011BD0(void);
u8 IsLinkMaster(void); u8 IsLinkMaster(void);
void sub_800AC34(void); void sub_800AC34(void);
bool8 HandleLinkConnection(void); bool8 HandleLinkConnection(void);
@@ -285,14 +284,14 @@ void sub_800A418(void);
void SetSuppressLinkErrorMessage(bool8 flag); void SetSuppressLinkErrorMessage(bool8 flag);
void sub_800B524(struct LinkPlayer *linkPlayer); void sub_800B524(struct LinkPlayer *linkPlayer);
u8 GetSioMultiSI(void); u8 GetSioMultiSI(void);
void sub_800AAF4(void); void ClearSavedLinkPlayers(void);
void sub_800AF18(u32 status, u8 lastSendQueueCount, u8 lastRecvQueueCount, u8 unk_06); void BufferLinkErrorInfo(u32 status, u8 lastSendQueueCount, u8 lastRecvQueueCount, u8 unk_06);
void sub_800B348(void); void sub_800B348(void);
void sub_800B3A4(u32 who); void LinkPlayerFromBlock(u32 who);
bool32 sub_800A07C(void); bool32 Link_AnyPartnersPlayingFRLG_JP(void);
void ResetLinkPlayerCount(void); void ResetLinkPlayerCount(void);
void sub_800AA04(u8 a0); void SaveLinkPlayers(u8 a0);
void sub_800B4C0(void); void SetWirelessCommType0(void);
bool32 sub_800B504(void); bool32 sub_800B504(void);
extern u16 gLinkPartnersHeldKeys[6]; extern u16 gLinkPartnersHeldKeys[6];
@@ -331,18 +330,18 @@ extern u32 gFiller_03003080;
extern struct LinkPlayer gLocalLinkPlayer; extern struct LinkPlayer gLocalLinkPlayer;
bool32 Link_AnyPartnersPlayingRubyOrSapphire(void); bool32 Link_AnyPartnersPlayingRubyOrSapphire(void);
bool32 sub_800A03C(void); bool32 LinkDummy_Return2(void);
void SetLocalLinkPlayerId(u8); void SetLocalLinkPlayerId(u8);
u8 GetSavedPlayerCount(void); u8 GetSavedPlayerCount(void);
void sub_8009FAC(void); void sub_8009FAC(void);
bool8 sub_800A4D8(u8 a0); bool8 sub_800A4D8(u8 a0);
u8 sub_800A9D8(void); u8 GetLinkPlayerCountAsBitFlags(void);
u8 sub_800A0C8(s32, s32); u8 sub_800A0C8(s32, s32);
u8 sub_800A9A8(void); u8 GetSavedLinkPlayerCountAsBitFlags(void);
void sub_800AD10(void); void sub_800AD10(void);
void sub_800AB18(void); void CheckLinkPlayersMatchSaved(void);
void sub_8009F18(void); void StartSendingKeysToLink(void);
bool8 sub_800AA60(void); bool8 DoesLinkPlayerCountMatchSaved(void);
void sub_800ABF4(u16 a0); void sub_800ABF4(u16 a0);
bool32 IsSendingKeysToLink(void); bool32 IsSendingKeysToLink(void);
u32 GetLinkRecvQueueLength(void); u32 GetLinkRecvQueueLength(void);
+154 -213
View File
@@ -5,7 +5,43 @@
#include "link.h" #include "link.h"
#include "AgbRfu_LinkManager.h" #include "AgbRfu_LinkManager.h"
// Exported type declarations #define RFU_COMMAND_0x4400 0x4400
#define RFU_COMMAND_0x8800 0x8800
#define RFU_COMMAND_0x8900 0x8900
#define RFU_COMMAND_0xA100 0xA100
#define RFU_COMMAND_0x7700 0x7700
#define RFU_COMMAND_0x7800 0x7800
#define RFU_COMMAND_0x6600 0x6600
#define RFU_COMMAND_0x5F00 0x5F00
#define RFU_COMMAND_0x2F00 0x2F00
#define RFU_COMMAND_0xBE00 0xBE00
#define RFU_COMMAND_0xEE00 0xEE00
#define RFU_COMMAND_0xED00 0xED00
#define RFU_SERIAL_7F7D 0x7F7D
#define RECV_QUEUE_NUM_SLOTS 32
#define RECV_QUEUE_SLOT_LENGTH (14 * MAX_RFU_PLAYERS)
#define SEND_QUEUE_NUM_SLOTS 40
#define SEND_QUEUE_SLOT_LENGTH 14
#define BACKUP_QUEUE_NUM_SLOTS 2
#define BACKUP_QUEUE_SLOT_LENGTH 14
#define RFU_STATUS_OK 0
#define RFU_STATUS_FATAL_ERROR 1
#define RFU_STATUS_CONNECTION_ERROR 2
#define RFU_STATUS_CHILD_SEND_COMPLETE 3
#define RFU_STATUS_NEW_CHILD_DETECTED 4
#define RFU_STATUS_JOIN_GROUP_OK 5
#define RFU_STATUS_JOIN_GROUP_NO 6
#define RFU_STATUS_WAIT_ACK_JOIN_GROUP 7
#define RFU_STATUS_LEAVE_GROUP_NOTICE 8
#define RFU_STATUS_LEAVE_GROUP 9
#define RFU_STATUS_10 10
#define RFU_STATUS_11 11
#define RFU_STATUS_ACK_JOIN_GROUP 12
// RfuTgtData.gname is read as these structs. // RfuTgtData.gname is read as these structs.
struct GFtgtGnameSub struct GFtgtGnameSub
@@ -13,12 +49,11 @@ struct GFtgtGnameSub
u16 language:4; u16 language:4;
u16 hasNews:1; u16 hasNews:1;
u16 hasCard:1; u16 hasCard:1;
u16 unk_00_6:1; u16 unknown:1; // Never read
u16 isChampion:1; u16 isChampion:1;
u16 hasNationalDex:1; u16 hasNationalDex:1;
u16 gameClear:1; u16 gameClear:1;
u16 version:4; u16 version:4;
u16 unk_01_6:2;
u8 playerTrainerId[2]; u8 playerTrainerId[2];
}; };
@@ -38,111 +73,73 @@ struct __attribute__((packed, aligned(2))) GFtgtGname
u8 padding; u8 padding;
}; // size: RFU_GNAME_SIZE }; // size: RFU_GNAME_SIZE
struct UnkLinkRfuStruct_02022B2C struct RfuBlockSend
{ {
u8 unk_00; /* 0x00 */ u16 next;
u8 unk_01; /* 0x02 */ u16 count;
u16 unk_02; /* 0x04 */ const u8 *payload;
u8 unk_04; /* 0x08 */ u32 receivedFlags;
u16 unk_06; /* 0x0c */ u32 failedFlags;
struct GFtgtGname *unk_08; /* 0x10 */ bool8 sending;
u8 *unk_0c; /* 0x11 */ u8 owner;
u8 unk_10; /* 0x12 */ u8 receiving;
u8 unk_11;
u16 unk_12;
u16 unk_14;
}; };
struct UnkLinkRfuStruct_02022B44 struct RfuRecvQueue
{ {
u8 fill_00[6]; /* 0x000 */ u8 slots[RECV_QUEUE_NUM_SLOTS][RECV_QUEUE_SLOT_LENGTH];
u16 unk_06; /* 0x8c0 */ vu8 recvSlot;
u8 fill_08[6]; /* 0x8c1 */ vu8 sendSlot;
vu8 unk_0e; /* 0x8c2 */ vu8 count;
u8 unk_0f; /* 0x8c3 */ vu8 full;
u8 fill_10[0x54];
u16 unk_64;
u8 fill_66[0x1d];
u8 unk_83;
u8 fill_84[0x58];
}; };
struct UnkRfuStruct_2_Sub_6c struct RfuSendQueue
{ {
/* 0x00 */ u16 unk_00; /* 0x000 */ u8 slots[SEND_QUEUE_NUM_SLOTS][SEND_QUEUE_SLOT_LENGTH];
/* 0x02 */ u16 unk_02; /* 0x230 */ vu8 recvSlot;
/* 0x04 */ const u8 *unk_04; /* 0x231 */ vu8 sendSlot;
/* 0x08 */ u32 unk_08; /* 0x232 */ vu8 count;
/* 0x0c */ u32 unk_0c; /* 0x233 */ vu8 full;
/* 0x10 */ u8 unk_10;
/* 0x11 */ u8 unk_11;
/* 0x12 */ u8 unk_12;
}; };
struct UnkRfuStruct_2_Sub_124 struct RfuBackupQueue
{ {
/* 0x000 */ u8 unk_00[32][70]; /* 0x00 */ u8 slots[BACKUP_QUEUE_NUM_SLOTS][BACKUP_QUEUE_SLOT_LENGTH];
/* 0x8c0 */ vu8 unk_8c0; /* 0x1c */ vu8 recvSlot;
/* 0x8c1 */ vu8 unk_8c1; /* 0x1d */ vu8 sendSlot;
/* 0x8c2 */ vu8 unk_8c2; /* 0x1e */ vu8 count;
/* 0x8c3 */ vu8 unk_8c3;
}; };
struct UnkRfuStruct_2_Sub_9e8 struct GFRfuManager
{ {
/* 0x000 */ u8 unk_00[40][14]; /* 0x000 */ void (*callback)(void);
/* 0x230 */ vu8 unk_230; /* 0x004 */ u16 state;
/* 0x231 */ vu8 unk_231;
/* 0x232 */ vu8 unk_232;
/* 0x233 */ vu8 unk_233;
};
struct UnkRfuStruct_2_Sub_c1c
{
/* 0x00 */ u8 unk_00[2][14];
/* 0x1c */ vu8 unk_1c;
/* 0x1d */ vu8 unk_1d;
/* 0x1e */ vu8 unk_1e;
};
struct UnkRfuStruct_Sub_Unused
{
/* 0x000 */ u8 unk_00[2][256];
/* 0x200 */ vu8 unk_200;
/* 0x201 */ vu8 unk_201;
/* 0x202 */ vu8 unk_202;
/* 0x203 */ vu8 unk_203;
};
struct UnkRfuStruct_2
{
/* 0x000 */ void (*linkRfuCallback)(void);
/* 0x004 */ u16 unk_04;
/* 0x006 */ u8 filler_06[4]; /* 0x006 */ u8 filler_06[4];
/* 0x00a */ u16 unk_0a; /* 0x00a */ u16 linkmanMsg;
/* 0x00c */ u8 unk_0c; /* 0x00c */ u8 parentChild;
/* 0x00d */ u8 playerCount; /* 0x00d */ u8 playerCount;
/* 0x00e */ u8 unk_0e; /* 0x00e */ bool8 unk_0e;
/* 0x00f */ u8 unk_0f; /* 0x00f */ u8 unk_0f;
/* 0x010 */ u16 unk_10; /* 0x010 */ u16 unk_10;
/* 0x012 */ u16 unk_12; /* 0x012 */ u16 unk_12;
/* 0x014 */ u8 unk_14[4][14]; /* 0x014 */ u8 unk_14[RFU_CHILD_MAX][14];
/* 0x04c */ u8 unk_4c[14]; /* 0x04c */ u8 unk_4c[14];
/* 0x05a */ u8 unk_5a; /* 0x05a */ u8 unk_5a;
/* 0x05b */ u8 unk_5b; /* 0x05b */ u8 unk_5b;
/* 0x05c */ u8 unk_5c[5]; /* 0x05c */ bool8 blockReceived[MAX_RFU_PLAYERS];
/* 0x061 */ u8 unk_61[5]; /* 0x061 */ bool8 numBlocksReceived[MAX_RFU_PLAYERS];
/* 0x066 */ u8 unk_66; /* 0x066 */ u8 idleTaskId;
/* 0x067 */ u8 unk_67; /* 0x067 */ u8 searchTaskId;
/* 0x068 */ u8 filler_68[4]; /* 0x068 */ u8 filler_68[4];
/* 0x06c */ struct UnkRfuStruct_2_Sub_6c unk_6c; /* 0x06c */ struct RfuBlockSend sendBlock;
/* 0x080 */ struct UnkRfuStruct_2_Sub_6c unk_80[5]; /* 0x080 */ struct RfuBlockSend recvBlock[MAX_RFU_PLAYERS];
/* 0x0e4 */ u8 unk_e4[5]; /* 0x0e4 */ u8 unk_e4[5];
/* 0x0e9 */ u8 unk_e9[5]; /* 0x0e9 */ u8 unk_e9[5];
/* 0x0ee */ vu8 unk_ee; /* 0x0ee */ vu8 errorState;
/* 0x0ef */ u8 unk_ef; /* 0x0ef */ bool8 isShuttingDown;
/* 0x0f0 */ u8 unk_f0; /* 0x0f0 */ u8 linkLossRecoveryState;
/* 0x0f1 */ u8 unk_f1; /* 0x0f1 */ u8 status;
/* 0x0f2 */ u16 unk_f2[6]; /* 0x0f2 */ u16 unk_f2[6];
/* 0x0fe */ u16 unk_fe; /* 0x0fe */ u16 unk_fe;
/* 0x100 */ u16 unk_100; /* 0x100 */ u16 unk_100;
@@ -151,193 +148,137 @@ struct UnkRfuStruct_2
/* 0x10A */ struct GFtgtGname unk_10A; /* 0x10A */ struct GFtgtGname unk_10A;
u8 filler_; u8 filler_;
u8 playerName[PLAYER_NAME_LENGTH + 1]; u8 playerName[PLAYER_NAME_LENGTH + 1];
/* 0x124 */ struct UnkRfuStruct_2_Sub_124 unk_124; /* 0x124 */ struct RfuRecvQueue recvQueue;
/* 0x9e8 */ struct UnkRfuStruct_2_Sub_9e8 unk_9e8; /* 0x9e8 */ struct RfuSendQueue sendQueue;
/* 0xc1c */ struct UnkRfuStruct_2_Sub_c1c unk_c1c; /* 0xc1c */ struct RfuBackupQueue backupQueue;
/* 0xc3c */ vu8 unk_c3c; /* 0xc3c */ vu8 linkRecovered;
/* 0xc3d */ u8 unk_c3d; /* 0xc3d */ u8 unk_c3d;
/* 0xc3e */ vu8 unk_c3e; /* 0xc3e */ vu8 childSlot;
/* 0xc3f */ u8 unk_c3f[70]; /* 0xc3f */ u8 unk_c3f[70];
/* 0xc85 */ u8 unk_c85; /* 0xc85 */ u8 unk_c85;
/* 0xc86 */ u8 unk_c86; /* 0xc86 */ u8 recvStatus;
/* 0xc87 */ u8 unk_c87[5][7][2]; /* 0xc87 */ u8 recvCmds[5][7][2];
/* 0xccd */ u8 unk_ccd; /* 0xccd */ u8 parentId;
/* 0xcce */ u8 unk_cce; /* 0xcce */ u8 multiplayerId;
/* 0xccf */ u8 unk_ccf; /* 0xccf */ u8 unk_ccf;
/* 0xcd0 */ vu8 unk_cd0; /* 0xcd0 */ vu8 unk_cd0;
/* 0xcd1 */ u8 unk_cd1[4]; /* 0xcd1 */ u8 partnerSendStatuses[RFU_CHILD_MAX];
/* 0xcd5 */ u8 unk_cd5[4]; /* 0xcd5 */ u8 partnerRecvStatuses[RFU_CHILD_MAX];
/* 0xcd9 */ u8 unk_cd9; /* 0xcd9 */ u8 unk_cd9;
/* 0xcda */ u8 unk_cda; /* 0xcda */ u8 unk_cda;
/* 0xcdb */ vu8 unk_cdb; /* 0xcdb */ vbool8 unk_cdb;
/* 0xcdc */ vu8 unk_cdc; /* 0xcdc */ vbool8 unk_cdc;
/* 0xcdd */ u8 unk_cdd; /* 0xcdd */ u8 unk_cdd;
/* 0xcde */ u8 unk_cde[4]; /* 0xcde */ u8 linkPlayerIdx[RFU_CHILD_MAX];
/* 0xce2 */ u8 unk_ce2; /* 0xce2 */ u8 unk_ce2;
/* 0xce2 */ u8 unk_ce3; /* 0xce2 */ u8 unk_ce3;
/* 0xce4 */ u8 unk_ce4; /* 0xce4 */ u8 unk_ce4;
/* 0xce5 */ u8 unk_ce5; /* 0xce5 */ u8 unk_ce5;
/* 0xce5 */ u8 unk_ce6; /* 0xce5 */ u8 unk_ce6;
/* 0xce7 */ u8 unk_ce7; /* 0xce7 */ u8 acceptSlot_flag;
/* 0xce8 */ u8 unk_ce8; /* 0xce8 */ u8 unk_ce8;
/* 0xce9 */ u8 unk_ce9; /* 0xce9 */ u8 unk_ce9;
/* 0xcea */ u8 unk_cea[4]; /* 0xcea */ u8 unk_cea[4];
/* 0xcee */ u8 unk_cee[4]; /* 0xcee */ u8 unk_cee[4];
}; // size = 0xcf4 }; // size = 0xcf4
struct UnkRfuStruct_8010A14
{
char unk_00[15];
u8 unk_0f;
u8 unk_10[4];
struct LinkPlayer unk_14[5];
u8 fill_a0[0x5c];
};
// Exported RAM declarations // Exported RAM declarations
extern struct GFtgtGname gUnknown_02022B14; extern struct GFtgtGname gHostRFUtgtGnameBuffer;
extern u8 gUnknown_02022B22[]; extern u8 gHostRFUtgtUnameBuffer[];
extern struct UnkRfuStruct_2 Rfu; extern struct GFRfuManager Rfu;
extern u8 gWirelessStatusIndicatorSpriteId; extern u8 gWirelessStatusIndicatorSpriteId;
// Exported ROM declarations // Exported ROM declarations
void WipeTrainerNameRecords(void); void WipeTrainerNameRecords(void);
void sub_800E700(void); void InitRFUAPI(void);
void sub_800EDD4(void); void LinkRfu_Shutdown(void);
void sub_800F6FC(u8 who); void Rfu_SetBlockReceivedFlag(u8 who);
void sub_800F728(u8 who); void Rfu_ResetBlockReceivedFlag(u8 who);
bool32 IsSendingKeysToRfu(void); bool32 IsSendingKeysToRfu(void);
void sub_800F804(void); void StartSendingKeysToRfu(void);
void sub_800F850(void); void sub_800F850(void);
u8 sub_800FCD8(void); u8 Rfu_GetBlockReceivedStatus(void);
bool32 sub_800FE84(const u8 *src, size_t size); bool32 Rfu_InitBlockSend(const u8 *src, size_t size);
void ClearLinkRfuCallback(void); void ClearLinkRfuCallback(void);
u8 sub_80104F4(void); u8 Rfu_GetLinkPlayerCount(void);
u8 rfu_get_multiplayer_id(void); u8 Rfu_GetMultiplayerId(void);
bool8 sub_8010100(u8 a0); bool8 sub_8010100(u8 a0);
bool8 IsLinkRfuTaskFinished(void); bool8 IsLinkRfuTaskFinished(void);
bool8 Rfu_IsMaster(void); bool8 Rfu_IsMaster(void);
void task_add_05_task_del_08FA224_when_no_RfuFunc(void); void task_add_05_task_del_08FA224_when_no_RfuFunc(void);
void sub_8010434(void); void sub_8010434(void);
void sub_800E604(void); void ResetLinkRfuGFLayer(void);
void sub_800E174(void); void UpdateWirelessStatusIndicatorSprite(void);
void sub_800E6D0(void); void InitRFU(void);
bool32 sub_8010EC0(void); bool32 sub_8010EC0(void);
bool32 sub_8010F1C(void); bool32 sub_8010F1C(void);
bool32 sub_8011A80(void); bool32 RfuHasErrored(void);
bool32 IsRfuRecvQueueEmpty(void); bool32 IsRfuRecvQueueEmpty(void);
u32 GetRfuRecvQueueLength(void); u32 GetRfuRecvQueueLength(void);
void RfuVSync(void); void RfuVSync(void);
void sub_80111B0(bool32 a0); void sub_80111B0(bool32 a0);
u8 sub_8011A74(void); u8 RfuGetStatus(void);
struct GFtgtGname *sub_800F7DC(void); struct GFtgtGname *GetHostRFUtgtGname(void);
void sub_8011068(u8 a0); void UpdateGameData_GroupLockedIn(u8 a0);
void sub_8011170(u32 a0); void GetLinkmanErrorParams(u32 a0);
void sub_8011A64(u8 a0, u16 a1); void RfuSetStatus(u8 a0, u16 a1);
u8 sub_801048C(bool32 a0); u8 sub_801048C(bool32 a0);
void sub_800DF90(struct GFtgtGname *buff1, u8 *buff2); void LinkRfu3_SetGnameUnameFromStaticBuffers(struct GFtgtGname *buff1, u8 *buff2);
void sub_8010F84(u8 a0, u32 a1, u32 a2); void SetHostRFUtgtGname(u8 activity, u32 child_sprite_genders, bool32 started);
void sub_8011C10(u32 a0); void InitializeRfuLinkManager_LinkLeader(u32 a0);
bool32 sub_8012240(void); bool32 sub_8012240(void);
void sub_800EF38(void); void LinkRfu_StopManagerAndFinalizeSlots(void);
bool32 sub_80105EC(void); bool32 sub_80105EC(void);
bool32 sub_801064C(u16 a0, const u8 *a1); bool32 HasTrainerLeftPartnersList(u16 trainerId, const u8 *name);
void sub_8010688(u8 a0, u16 a1, const u8 *a2); void SendRfuStatusToPartner(u8 status, u16 trainerId, const u8 *name);
u32 sub_8010714(u16 a0, const u8 *a1); u32 WaitSendRfuStatusToPartner(u16 trainerId, const u8 *name);
void sub_8011DC0(const u8 *a0, u16 a1); void RequestDisconnectSlotByTrainerNameAndId(const u8 *a0, u16 a1);
bool8 sub_800EF1C(void); bool8 LmanAcceptSlotFlagIsNotZero(void);
bool32 sub_800EF58(bool32 a0); bool32 WaitRfuState(bool32 a0);
void DestroyWirelessStatusIndicatorSprite(void);
void sub_801103C(void); void sub_801103C(void);
void sub_8011C5C(void); void InitializeRfuLinkManager_JoinGroup(void);
void sub_80106D4(void); void SendLeaveGroupNotice(void);
void RecordMixTrainerNames(void); void RecordMixTrainerNames(void);
void sub_800ED10(void); void LinkRfu_CreateConnectionAsParent(void);
void sub_800ED28(void); void LinkRfu_StopManagerBeforeEnteringChat(void);
void sub_8011090(u8 a0, u32 a1, u32 a2); void UpdateGameData_SetActivity(u8 activity, u32 flags, bool32 started);
void sub_8011FC8(const u8 *src, u16 trainerId); void CreateTask_RfuReconnectWithParent(const u8 *src, u16 trainerId);
void sub_8010FA0(bool32 a0, bool32 a1); void SetGnameBufferWonderFlags(bool32 a0, bool32 a1);
void sub_8010F60(void); void ClearAndInitHostRFUtgtGname(void);
void sub_8010FCC(u32 a0, u32 a1, u32 a2); void SetTradeBoardRegisteredMonInfo(u32 type, u32 species, u32 level);
void sub_8011C84(void); void InitializeRfuLinkManager_EnterUnionRoom(void);
void sub_8012188(const u8 *name, struct GFtgtGname *structPtr, u8 a2); void sub_8012188(const u8 *name, struct GFtgtGname *structPtr, u8 a2);
bool32 sub_8011B90(void); bool32 IsUnionRoomListenTaskActive(void);
void sub_800FE50(void *a0); void sub_800FE50(void *a0);
bool32 sub_800E540(u16 id, u8 *name); bool32 PlayerHasMetTrainerBefore(u16 id, u8 *name);
void sub_8011DE0(u32 arg0); void sub_8011DE0(u32 arg0);
u8 sub_801100C(s32 a0); u8 sub_801100C(s32 a0);
void sub_800EF7C(void); void sub_800EF7C(void);
bool8 sub_800DE7C(struct GFtgtGname *buff1, u8 *buff2, u8 idx); bool8 LinkRfu_GetNameIfCompatible(struct GFtgtGname *buff1, u8 *buff2, u8 idx);
bool8 sub_800DF34(struct GFtgtGname *buff1, u8 *buff2, u8 idx); bool8 LinkRfu_GetNameIfSerial7F7D(struct GFtgtGname *buff1, u8 *buff2, u8 idx);
s32 sub_800E87C(u8 idx); s32 sub_800E87C(u8 idx);
void sub_8011BA4(void); void CreateTask_RfuIdle(void);
void sub_8010198(void); void DestroyTask_RfuIdle(void);
void sub_8011AC8(void); void sub_8011AC8(void);
void LinkRfu_FatalError(void); void LinkRfu_FatalError(void);
bool32 sub_8011A9C(void); bool32 sub_8011A9C(void);
void sub_80104B0(void); void sub_80104B0(void);
void sub_8011A50(void); void sub_8011A50(void);
void sub_80110B8(u32 a0); void sub_80110B8(u32 a0);
bool8 sub_800DAC8(struct UnkRfuStruct_2_Sub_c1c *q1, u8 *q2); bool32 IsRfuSerialNumberValid(u32 serialNo);
void sub_800EAB4(void); bool8 IsRfuRecoveringFromLinkLoss(void);
void sub_800EAFC(void); void RfuRecvQueue_Reset(struct RfuRecvQueue *queue);
void sub_800ED34(u16 unused); void RfuSendQueue_Reset(struct RfuSendQueue *queue);
void sub_800EDBC(u16 unused); void RfuRecvQueue_Enqueue(struct RfuRecvQueue *queue, u8 *data);
void sub_800F048(void); void RfuSendQueue_Enqueue(struct RfuSendQueue *queue, u8 *data);
void sub_800F86C(u8 unused); bool8 RfuRecvQueue_Dequeue(struct RfuRecvQueue *queue, u8 *dest);
void sub_800FCC4(struct UnkRfuStruct_2_Sub_6c *data); bool8 RfuSendQueue_Dequeue(struct RfuSendQueue *queue, u8 *dest);
void sub_800FD14(u16 command); void RfuBackupQueue_Enqueue(struct RfuBackupQueue *queue, const u8 *q2);
void rfufunc_80F9F44(void); bool8 RfuBackupQueue_Dequeue(struct RfuBackupQueue *queue, u8 *q2);
void sub_800FFB0(void); void InitHostRFUtgtGname(struct GFtgtGname *data, u8 activity, bool32 started, s32 child_sprite_genders);
void rfufunc_80FA020(void);
bool32 sub_8010454(u32 a0);
void sub_8010528(void);
void sub_8010750(void);
s32 sub_80107A0(void);
void sub_801084C(u8 taskId);
void sub_80109E8(u16 a0);
void sub_8010A70(void *a0);
void sub_8010AAC(u8 taskId);
void sub_8010D0C(u8 taskId);
void sub_80115EC(s32 a0);
u8 sub_8011CE4(const u8 *a0, u16 a1);
void sub_8011D6C(u32 a0);
void sub_8011E94(u32 a0, u32 a1);
bool8 sub_8012224(void);
void sub_801227C(void);
void sub_801209C(u8 taskId);
void sub_8011BF8(void);
void sub_8011BA4(void);
void sub_800D6C8(struct UnkRfuStruct_2_Sub_124 *ptr);
void sub_800D724(struct UnkRfuStruct_2_Sub_9e8 *ptr);
void sub_800D780(struct UnkRfuStruct_Sub_Unused *ptr);
void sub_800D7D8(struct UnkRfuStruct_2_Sub_124 *q1, u8 *q2);
void sub_800D888(struct UnkRfuStruct_2_Sub_9e8 *q1, u8 *q2);
bool8 sub_800D934(struct UnkRfuStruct_2_Sub_124 *q1, u8 *q2);
bool8 sub_800D9DC(struct UnkRfuStruct_2_Sub_9e8 *q1, u8 *q2);
void sub_800DA68(struct UnkRfuStruct_2_Sub_c1c *q1, const u8 *q2);
bool8 sub_800DAC8(struct UnkRfuStruct_2_Sub_c1c *q1, u8 *q2);
void sub_800DB18(struct UnkRfuStruct_Sub_Unused *q1, u8 *q2);
bool8 sub_800DB84(struct UnkRfuStruct_Sub_Unused *q1, u8 *q2);
void sub_800DBF8(u8 *q1, u8 mode);
void PkmnStrToASCII(u8 *q1, const u8 *q2);
void ASCIIToPkmnStr(u8 *q1, const u8 *q2);
u8 sub_800DD1C(u8 maxFlags);
void sub_800DD94(struct GFtgtGname *data, u8 r9, bool32 r2, s32 r3);
bool8 sub_800DE7C(struct GFtgtGname *buff1, u8 *buff2, u8 idx);
bool8 sub_800DF34(struct GFtgtGname *buff1, u8 *buff2, u8 idx);
void sub_800DF90(struct GFtgtGname *buff1, u8 *buff2);
void CreateWirelessStatusIndicatorSprite(u8 x, u8 y); void CreateWirelessStatusIndicatorSprite(u8 x, u8 y);
void DestroyWirelessStatusIndicatorSprite(void); void DestroyWirelessStatusIndicatorSprite(void);
void LoadWirelessStatusIndicatorSpriteGfx(void); void LoadWirelessStatusIndicatorSpriteGfx(void);
u8 sub_800E124(void);
void sub_800E15C(struct Sprite *sprite, s32 signalStrengthAnimNum);
void sub_800E174(void);
void CopyTrainerRecord(struct TrainerNameRecord *dest, u32 trainerId, const u8 *name);
bool32 NameIsNotEmpty(const u8 *name);
void RecordMixTrainerNames(void);
bool32 sub_800E540(u16 id, u8 *name);
void WipeTrainerNameRecords(void);
#endif //GUARD_LINK_RFU_H #endif //GUARD_LINK_RFU_H
+1 -1
View File
@@ -79,7 +79,7 @@ void sub_8198DBC(u8 windowId, u8 fontId, u8 left, u8 top, u8 a4, u8 itemCount, u
u8 sub_8199944(u8 windowId, u8 optionWidth, u8 columns, u8 rows, u8 initialCursorPos); u8 sub_8199944(u8 windowId, u8 optionWidth, u8 columns, u8 rows, u8 initialCursorPos);
u8 sub_8199134(s8, s8); u8 sub_8199134(s8, s8);
u8 GetStartMenuWindowId(void); u8 GetStartMenuWindowId(void);
void sub_819A2BC(u8, u8); void ListMenuLoadStdPalAt(u8, u8);
u8 Menu_MoveCursor(s8 cursorDelta); u8 Menu_MoveCursor(s8 cursorDelta);
u8 Menu_MoveCursorNoWrapAround(s8 cursorDelta); u8 Menu_MoveCursorNoWrapAround(s8 cursorDelta);
void DrawStdWindowFrame(u8 windowId, bool8 CopyToVram); void DrawStdWindowFrame(u8 windowId, bool8 CopyToVram);
+2 -2
View File
@@ -57,7 +57,7 @@ u32 sub_801B708(const u16 *a0, const struct MEventStruct_Unk1442CC *a1, const vo
bool32 MEventStruct_Unk1442CC_CompareField_unk_16(const struct MEventStruct_Unk1442CC *a0, const u16 *a1); bool32 MEventStruct_Unk1442CC_CompareField_unk_16(const struct MEventStruct_Unk1442CC *a0, const u16 *a1);
u16 MEventStruct_Unk1442CC_GetValueNFrom_unk_20(const struct MEventStruct_Unk1442CC *a0, u32 command); u16 MEventStruct_Unk1442CC_GetValueNFrom_unk_20(const struct MEventStruct_Unk1442CC *a0, u32 command);
u16 mevent_081445C0(u32 command); u16 mevent_081445C0(u32 command);
void sub_801B940(void); void ResetReceivedWonderCardFlag(void);
bool32 sub_801B94C(u16 a0); bool32 MEventHandleReceivedWonderCard(u16 a0);
#endif //GUARD_MEVENT_H #endif //GUARD_MEVENT_H
+1 -1
View File
@@ -1,6 +1,6 @@
#ifndef GUARD_MEVENT2_H #ifndef GUARD_MEVENT2_H
#define GUARD_MEVENT2_H #define GUARD_MEVENT2_H
void sub_801B990(u32, u32); void RecordIdOfWonderCardSenderByEventType(u32, u32);
#endif //GUARD_MEVENT2_H #endif //GUARD_MEVENT2_H
+2
View File
@@ -12,5 +12,7 @@ bool32 MG_PrintTextOnWindow1AndWaitButton(u8 *textState, const u8 *str);
void AddTextPrinterToWindow1(const u8 *src); void AddTextPrinterToWindow1(const u8 *src);
void c2_ereader(void); void c2_ereader(void);
void c2_mystery_gift(void); void c2_mystery_gift(void);
void MG_DrawTextBorder(u8 windowId);
s8 mevent_message_print_and_prompt_yes_no(u8 *textState, u16 *windowId, bool8 yesNoBoxPlacement, const u8 *str);
#endif //GUARD_MYSTERY_GIFT_H #endif //GUARD_MYSTERY_GIFT_H
+2 -2
View File
@@ -279,8 +279,8 @@ void sub_80686FC(struct Pokemon *mon, struct BattleTowerPokemon *dest);
void CreateObedientMon(struct Pokemon *mon, u16 species, u8 level, u8 fixedIV, u8 hasFixedPersonality, u32 fixedPersonality, u8 otIdType, u32 fixedOtId); void CreateObedientMon(struct Pokemon *mon, u16 species, u8 level, u8 fixedIV, u8 hasFixedPersonality, u32 fixedPersonality, u8 otIdType, u32 fixedOtId);
bool8 sub_80688F8(u8 caseId, u8 battlerId); bool8 sub_80688F8(u8 caseId, u8 battlerId);
void SetDeoxysStats(void); void SetDeoxysStats(void);
u16 sub_8068B48(void); u16 GetUnionRoomTrainerPic(void);
u16 sub_8068BB0(void); u16 GetUnionRoomTrainerClass(void);
void CreateObedientEnemyMon(void); void CreateObedientEnemyMon(void);
void CalculateMonStats(struct Pokemon *mon); void CalculateMonStats(struct Pokemon *mon);
void BoxMonToMon(const struct BoxPokemon *src, struct Pokemon *dest); void BoxMonToMon(const struct BoxPokemon *src, struct Pokemon *dest);
+1 -1
View File
@@ -3,7 +3,7 @@
#include "main.h" #include "main.h"
void sub_802A9A8(u16 monId, MainCallback callback); void StartPokemonJump(u16 monId, MainCallback callback);
bool32 IsSpeciesAllowedInPokemonJump(u16 species); bool32 IsSpeciesAllowedInPokemonJump(u16 species);
void IsPokemonJumpSpeciesInParty(void); void IsPokemonJumpSpeciesInParty(void);
void ResetPokeJumpResults(void); void ResetPokeJumpResults(void);
+1 -1
View File
@@ -102,7 +102,7 @@ u8 Save_LoadGameData(u8 saveType);
u16 sub_815355C(void); u16 sub_815355C(void);
u32 TryReadSpecialSaveSection(u8 sector, u8* dst); u32 TryReadSpecialSaveSection(u8 sector, u8* dst);
u32 TryWriteSpecialSaveSection(u8 sector, u8* src); u32 TryWriteSpecialSaveSection(u8 sector, u8* src);
void sub_8153688(u8 taskId); void Task_LinkSave(u8 taskId);
// save_failed_screen.c // save_failed_screen.c
void DoSaveFailedScreen(u8 saveType); void DoSaveFailedScreen(u8 saveType);
+2 -2
View File
@@ -8,8 +8,8 @@ void Task_ShowStartMenu(u8 taskId);
void ShowStartMenu(void); void ShowStartMenu(void);
void ShowBattlePyramidStartMenu(void); void ShowBattlePyramidStartMenu(void);
void SaveGame(void); void SaveGame(void);
void sub_80A0514(void); void CB2_SetUpSaveAfterLinkBattle(void);
void sub_80A08CC(void); void SaveForBattleTowerLink(void);
void HideStartMenu(void); void HideStartMenu(void);
void AppendToList(u8* list, u8* pos, u8 newEntry); void AppendToList(u8* list, u8* pos, u8 newEntry);
+5 -5
View File
@@ -962,7 +962,7 @@ extern const u8 gText_TwoDashes[];
extern const u8 *const gReturnToXStringsTable2[]; extern const u8 *const gReturnToXStringsTable2[];
extern const u8 gText_XPLink[]; extern const u8 gText_NumPlayerLink[];
extern const u8 gText_ConfirmLinkWhenPlayersReady[]; extern const u8 gText_ConfirmLinkWhenPlayersReady[];
extern const u8 gText_ConfirmStartLinkWithXPlayers[]; extern const u8 gText_ConfirmStartLinkWithXPlayers[];
extern const u8 gText_AwaitingLinkup[]; extern const u8 gText_AwaitingLinkup[];
@@ -2815,10 +2815,10 @@ extern const u8 gText_RegisterTextHere[];
extern const u8 gText_InputText[]; extern const u8 gText_InputText[];
extern const u8 gText_ExitingChat[]; extern const u8 gText_ExitingChat[];
extern const u8 gText_LeaderLeftEndingChat[]; extern const u8 gText_LeaderLeftEndingChat[];
extern const u8 gText_RegisteredTextChanged[]; extern const u8 gText_RegisteredTextChangedOKToSave[];
extern const u8 gText_AlreadySavedFile_Unused[]; extern const u8 gText_AlreadySavedFile_Chat[];
extern const u8 gText_SavingDontTurnOff_Unused[]; extern const u8 gText_SavingDontTurnOff_Chat[];
extern const u8 gText_PlayerSavedGame_Unused[]; extern const u8 gText_PlayerSavedGame_Chat[];
extern const u8 gText_IfLeaderLeavesChatEnds[]; extern const u8 gText_IfLeaderLeavesChatEnds[];
extern const u8 gText_Upper[]; extern const u8 gText_Upper[];
extern const u8 gText_Lower[]; extern const u8 gText_Lower[];
+71 -74
View File
@@ -2,71 +2,70 @@
#define GUARD_UNION_ROOM_H #define GUARD_UNION_ROOM_H
#include "link_rfu.h" #include "link_rfu.h"
#include "link.h"
#include "constants/union_room.h"
// Exported type declarations // Exported type declarations
struct UnkStruct_Shared struct WirelessGnameUnamePair
{ {
struct GFtgtGname field_0; struct GFtgtGname gname;
u8 ALIGNED(4) playerName[PLAYER_NAME_LENGTH + 1]; u8 ALIGNED(4) playerName[PLAYER_NAME_LENGTH + 1];
}; };
struct UnkStruct_x1C struct UnkStruct_x1C
{ {
struct UnkStruct_Shared unk0; struct WirelessGnameUnamePair gname_uname;
u8 unk18:1; u8 active:1;
}; };
struct UnkStruct_x20 struct UnkStruct_x20
{ {
struct UnkStruct_Shared unk; struct WirelessGnameUnamePair gname_uname;
u16 field_18; u16 timeoutCounter;
u8 field_1A_0:2; u8 groupScheduledAnim:2;
u8 field_1A_1:1; bool8 useRedText:1; // Never set
u8 field_1B; u8 field_1B;
u8 field_1D; u8 filler[3];
u8 field_1E;
u8 field_1F;
}; };
struct UnkStruct_Main0 struct UnkStruct_Main0
{ {
struct UnkStruct_x20 arr[8]; struct UnkStruct_x20 arr[MAX_UNION_ROOM_PLAYERS];
}; };
struct UnkStruct_Main4 struct UnkStruct_Main4
{ {
struct UnkStruct_x1C arr[5]; struct UnkStruct_x1C arr[MAX_RFU_PLAYERS];
}; };
struct UnkStruct_Main8 struct UnkStruct_Main8
{ {
struct UnkStruct_x20 arr[5]; struct UnkStruct_x20 arr[MAX_RFU_PLAYERS];
}; };
struct UnkStruct_Leader struct WirelessLink_Leader
{ {
struct UnkStruct_Main0 *field_0; struct UnkStruct_Main0 *field_0;
struct UnkStruct_Main4 *field_4; struct UnkStruct_Main4 *field_4;
struct UnkStruct_Main8 *field_8; struct UnkStruct_Main8 *field_8;
u8 state; u8 state;
u8 textState; u8 textState;
u8 field_E; u8 delayTimerAfterOk;
u8 listWindowId; u8 listWindowId;
u8 field_10; u8 bButtonCancelWindowId;
u8 field_11; u8 nPlayerModeWindowId;
u8 listTaskId; u8 listTaskId;
u8 field_13; u8 playerCount;
u8 field_14; u16 field_14;
u8 field_15;
u8 field_16; u8 field_16;
u8 field_17; u8 listenTaskId;
u8 field_18; u8 activity;
u8 field_19; u8 joinRequestAnswer;
u16 field_1A; u16 memberConfirmTimeout;
}; };
struct UnkStruct_Group struct WirelessLink_Group
{ {
struct UnkStruct_Main0 *field_0; struct UnkStruct_Main0 *field_0;
struct UnkStruct_Main4 *field_4; struct UnkStruct_Main4 *field_4;
@@ -74,98 +73,96 @@ struct UnkStruct_Group
u8 textState; u8 textState;
u8 field_A; u8 field_A;
u8 listWindowId; u8 listWindowId;
u8 field_C; u8 bButtonCancelWindowId;
u8 field_D; u8 playerNameAndIdWindowId;
u8 listTaskId; u8 listTaskId;
u8 field_F; u8 leaderId;
u8 field_10; u8 field_10;
u8 field_11; u8 listenTaskId;
u8 field_12; u8 isWonderNews;
u8 field_13; u8 field_13;
u8 field_14; u8 refreshTimer;
u8 field_15; u8 delayBeforePrint;
}; };
struct UnkStruct_8019BA8 struct UnionRoomObject
{ {
u8 field_0; u8 state;
u8 field_1; u8 gfxId;
s8 field_2; s8 animState;
u8 field_3; u8 schedAnim;
}; };
struct UnkStruct_URoom struct WirelessLink_URoom
{ {
struct UnkStruct_Main0 *field_0; struct UnkStruct_Main0 *field_0;
struct UnkStruct_Main4 *field_4; struct UnkStruct_Main4 *field_4;
struct UnkStruct_Main0 *field_8; struct UnkStruct_Main0 *field_8;
struct UnkStruct_Main4 *field_C; struct UnkStruct_Main4 *field_C;
u16 field_10; u16 unknown; // Never read
u16 field_12; u16 field_12;
u8 state; u8 state;
u8 stateAfterPrint; u8 stateAfterPrint;
u8 textState; u8 textState;
u8 field_17; u8 filler[4];
u8 field_18; u8 topListMenuWindowId;
u8 field_19; u8 topListMenuId;
u8 field_1A; u8 tradeBoardSelectWindowId;
u8 field_1B; u8 tradeBoardDetailsWindowId;
u8 field_1C; u8 unused1;
u8 field_1D; u8 searchTaskId;
u8 field_1E;
u8 field_1F;
u8 field_20;
u8 spriteIds[40]; u8 spriteIds[40];
u8 field_49; u8 unused2;
u8 field_4A; u8 tradeBoardListMenuId;
u16 field_4C[6]; u16 playerSendBuffer[6];
u8 field_58[0x98 - 0x58]; u8 activityRequestStrbufs[4][16];
u16 field_98; u16 partnerYesNoResponse;
u16 field_9A[3]; u16 recvActivityRequest[3];
struct UnkStruct_8019BA8 field_A0[8]; struct UnionRoomObject objects[MAX_UNION_ROOM_PLAYERS];
u8 field_C0[12][15]; u8 trainerCardStrBuffer[12][15];
u8 field_174[48]; u8 trainerCardColorStrBuffer[48];
u8 field_1A4[200]; u8 trainerCardMsgStrBuffer[200];
}; };
union UnkUnion_Main union WirelessLink_Main
{ {
struct UnkStruct_Leader *leader; struct WirelessLink_Leader *leader;
struct UnkStruct_Group *group; struct WirelessLink_Group *group;
struct UnkStruct_URoom *uRoom; struct WirelessLink_URoom *uRoom;
}; };
struct UnionRoomTrade struct UnionRoomTrade
{ {
u16 field_0; u16 state;
u16 type; u16 type;
u32 playerPersonality; u32 playerPersonality;
u8 field_8; u8 offerPlayerId;
u8 field_9; u8 filler1;
u16 playerSpecies; u16 playerSpecies;
u16 playerLevel; u16 playerLevel;
u16 species; u16 species;
u16 level; u16 level;
u16 field_12; u16 filler2;
u32 personality; u32 personality;
}; };
// Exported RAM declarations // Exported RAM declarations
extern u8 gUnknown_02022C2C; extern u8 gPlayerCurrActivity;
extern union UnkUnion_Main gUnknown_02022C30; extern union WirelessLink_Main gUnknown_02022C30;
extern struct GFtgtGnameSub gUnknown_02022C38; extern struct GFtgtGnameSub gPartnerTgtGnameSub;
extern u16 gUnionRoomOfferedSpecies; extern u16 gUnionRoomOfferedSpecies;
extern u8 gUnionRoomRequestedMonType; extern u8 gUnionRoomRequestedMonType;
// Exported ROM declarations // Exported ROM declarations
u8 sub_8013F78(void); u8 CreateTask_CreateTradeMenu(void);
void nullsub_89(u8 taskId); void SetUsingUnionRoomStartMenu(void);
void var_800D_set_xB(void);
void MEvent_CreateTask_CardOrNewsWithFriend(u32 arg0); void MEvent_CreateTask_CardOrNewsWithFriend(u32 arg0);
void MEvent_CreateTask_CardOrNewsOverWireless(u32 arg0); void MEvent_CreateTask_CardOrNewsOverWireless(u32 arg0);
void MEvent_CreateTask_Leader(u32 arg0); void MEvent_CreateTask_Leader(u32 arg0);
u8 CreateTask_ListenToWireless(void);
void StartUnionRoomBattle(u16 battleFlags);
#endif //GUARD_UNION_ROOM_H #endif //GUARD_UNION_ROOM_H
+1 -2
View File
@@ -1,7 +1,6 @@
#ifndef GUARD_UNION_ROOM_BATTLE_H #ifndef GUARD_UNION_ROOM_BATTLE_H
#define GUARD_UNION_ROOM_BATTLE_H #define GUARD_UNION_ROOM_BATTLE_H
u8 sub_8013C40(void); void CB2_UnionRoomBattle(void);
void sub_8014210(u16 battleFlags);
#endif //GUARD_UNION_ROOM_BATTLE_H #endif //GUARD_UNION_ROOM_BATTLE_H
+2 -13
View File
@@ -1,18 +1,7 @@
#ifndef GUARD_UNION_ROOM_CHAT_H #ifndef GUARD_UNION_ROOM_CHAT_H
#define GUARD_UNION_ROOM_CHAT_H #define GUARD_UNION_ROOM_CHAT_H
enum void EnterUnionRoomChat(void);
{ void InitUnionRoomChatRegisteredTexts(void);
UNION_ROOM_KB_PAGE_UPPER,
UNION_ROOM_KB_PAGE_LOWER,
UNION_ROOM_KB_PAGE_EMOJI,
UNION_ROOM_KB_PAGE_COUNT
};
#define UNION_ROOM_KB_ROW_COUNT 10
void sub_801DD98(void);
void copy_strings_to_sav1(void);
#endif // GUARD_UNION_ROOM_CHAT_H #endif // GUARD_UNION_ROOM_CHAT_H
+9 -9
View File
@@ -1,14 +1,14 @@
#ifndef GUARD_UNION_ROOM_PLAYER_AVATAR_H #ifndef GUARD_UNION_ROOM_PLAYER_AVATAR_H
#define GUARD_UNION_ROOM_PLAYER_AVATAR_H #define GUARD_UNION_ROOM_PLAYER_AVATAR_H
u8 sub_8019BA8(struct UnkStruct_8019BA8 * ptr); u8 InitUnionRoomPlayerObjects(struct UnionRoomObject *players);
void sub_8019E3C(void); void DestroyUnionRoomPlayerObjects(void);
void sub_8019E70(u8 *arg0, s32 arg1); void CreateGroupMemberSpritesInvisible(u8 *spriteIds, s32 playerIdx);
void sub_8019F04(u8 *spriteIds); void DestroyGroupMemberSprites(u8 *spriteIds);
void sub_8019F2C(void); void SetTilesAroundUnionRoomPlayersPassable(void);
void sub_801A274(struct UnkStruct_URoom *arg0); void ScheduleUnionRoomPlayerRefresh(struct WirelessLink_URoom *uroom);
void sub_801A284(struct UnkStruct_URoom *arg0); void HandleUnionRoomPlayerRefresh(struct WirelessLink_URoom *uroom);
bool32 sub_801A2A8(struct UnkStruct_Main0 *arg0, s16 *arg1, s16 *arg2, u8 *arg3); bool32 TryInteractWithUnionRoomMember(struct UnkStruct_Main0 *main0, s16 *directionPtr, s16 *playerIdxPtr, u8 *spriteIds);
void sub_801A3D0(u32 arg0, u32 arg1, struct UnkStruct_Main0 *arg2); void UpdateUnionRoomMemberFacing(u32 currDirection, u32 playerIdx, struct UnkStruct_Main0 *main0);
#endif //GUARD_UNION_ROOM_PLAYER_AVATAR_H #endif //GUARD_UNION_ROOM_PLAYER_AVATAR_H
+2
View File
@@ -65,6 +65,7 @@ SECTIONS {
src/union_room.o(.text); src/union_room.o(.text);
src/mystery_gift.o(.text); src/mystery_gift.o(.text);
src/union_room_player_avatar.o(.text); src/union_room_player_avatar.o(.text);
src/wireless_communication_status_screen.o(.text);
src/union_room_battle.o(.text); src/union_room_battle.o(.text);
src/mevent2.o(.text); src/mevent2.o(.text);
src/mevent_801BAAC.o(.text); src/mevent_801BAAC.o(.text);
@@ -450,6 +451,7 @@ SECTIONS {
src/union_room.o(.rodata); src/union_room.o(.rodata);
src/mystery_gift.o(.rodata); src/mystery_gift.o(.rodata);
src/union_room_player_avatar.o(.rodata); src/union_room_player_avatar.o(.rodata);
src/wireless_communication_status_screen.o(.rodata);
src/union_room_battle.o(.rodata); src/union_room_battle.o(.rodata);
src/mevent2.o(.rodata); src/mevent2.o(.rodata);
src/mevent_801BAAC.o(.rodata); src/mevent_801BAAC.o(.rodata);
+2 -2
View File
@@ -1267,9 +1267,9 @@ static void LinkOpponentHandleDrawTrainerPic(void)
else else
{ {
xPos = 176; xPos = 176;
if (gTrainerBattleOpponent_A == TRAINER_OPPONENT_C00) if (gTrainerBattleOpponent_A == TRAINER_UNION_ROOM)
{ {
trainerPicId = sub_8068B48(); trainerPicId = GetUnionRoomTrainerPic();
} }
else if ((gLinkPlayers[GetMultiplayerId() ^ BIT_SIDE].version & 0xFF) == VERSION_FIRE_RED else if ((gLinkPlayers[GetMultiplayerId() ^ BIT_SIDE].version & 0xFF) == VERSION_FIRE_RED
|| (gLinkPlayers[GetMultiplayerId() ^ BIT_SIDE].version & 0xFF) == VERSION_LEAF_GREEN) || (gLinkPlayers[GetMultiplayerId() ^ BIT_SIDE].version & 0xFF) == VERSION_LEAF_GREEN)
+2 -2
View File
@@ -1229,9 +1229,9 @@ static void RecordedOpponentHandleDrawTrainerPic(void)
else else
{ {
xPos = 176; xPos = 176;
if (gTrainerBattleOpponent_A == TRAINER_OPPONENT_C00) if (gTrainerBattleOpponent_A == TRAINER_UNION_ROOM)
{ {
trainerPicId = sub_8068B48(); trainerPicId = GetUnionRoomTrainerPic();
} }
else else
{ {
+4 -3
View File
@@ -6,6 +6,7 @@
#include "battle_message.h" #include "battle_message.h"
#include "cable_club.h" #include "cable_club.h"
#include "link.h" #include "link.h"
#include "link_rfu.h"
#include "party_menu.h" #include "party_menu.h"
#include "pokemon.h" #include "pokemon.h"
#include "recorded_battle.h" #include "recorded_battle.h"
@@ -33,10 +34,10 @@ void HandleLinkBattleSetup(void)
if (gBattleTypeFlags & BATTLE_TYPE_LINK) if (gBattleTypeFlags & BATTLE_TYPE_LINK)
{ {
if (gWirelessCommType) if (gWirelessCommType)
sub_800B488(); SetWirelessCommType1();
if (!gReceivedRemoteLinkPlayers) if (!gReceivedRemoteLinkPlayers)
OpenLink(); OpenLink();
CreateTask(task00_08081A90, 0); CreateTask(Task_WaitForLinkPlayerConnection, 0);
CreateTasksForSendRecvLinkBuffers(); CreateTasksForSendRecvLinkBuffers();
} }
} }
@@ -827,7 +828,7 @@ void sub_8033648(void)
if (gReceivedRemoteLinkPlayers != 0 && (gBattleTypeFlags & BATTLE_TYPE_20)) if (gReceivedRemoteLinkPlayers != 0 && (gBattleTypeFlags & BATTLE_TYPE_20))
{ {
sub_8011BD0(); DestroyTask_RfuIdle();
for (i = 0; i < GetLinkPlayerCount(); i++) for (i = 0; i < GetLinkPlayerCount(); i++)
{ {
if (GetBlockReceivedStatus() & gBitTable[i]) if (GetBlockReceivedStatus() & gBitTable[i])
+1 -1
View File
@@ -995,7 +995,7 @@ static void CB2_HandleStartBattle(void)
sub_8036A5C(); sub_8036A5C();
SetPlayerBerryDataInBattleStruct(); SetPlayerBerryDataInBattleStruct();
if (gTrainerBattleOpponent_A == TRAINER_OPPONENT_C00) if (gTrainerBattleOpponent_A == TRAINER_UNION_ROOM)
{ {
gLinkPlayers[0].id = 0; gLinkPlayers[0].id = 0;
gLinkPlayers[1].id = 1; gLinkPlayers[1].id = 1;
+7 -7
View File
@@ -1981,7 +1981,7 @@ void BufferStringBattle(u16 stringID)
} }
else else
{ {
if (gTrainerBattleOpponent_A == TRAINER_OPPONENT_C00) if (gTrainerBattleOpponent_A == TRAINER_UNION_ROOM)
stringPtr = sText_Trainer1WantsToBattle; stringPtr = sText_Trainer1WantsToBattle;
else if (gBattleTypeFlags & BATTLE_TYPE_RECORDED) else if (gBattleTypeFlags & BATTLE_TYPE_RECORDED)
stringPtr = sText_LinkTrainerWantsToBattlePause; stringPtr = sText_LinkTrainerWantsToBattlePause;
@@ -2049,7 +2049,7 @@ void BufferStringBattle(u16 stringID)
{ {
if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_x2000000))) if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_x2000000)))
stringPtr = sText_Trainer1SentOutPkmn; stringPtr = sText_Trainer1SentOutPkmn;
else if (gTrainerBattleOpponent_A == TRAINER_OPPONENT_C00) else if (gTrainerBattleOpponent_A == TRAINER_UNION_ROOM)
stringPtr = sText_Trainer1SentOutPkmn; stringPtr = sText_Trainer1SentOutPkmn;
else else
stringPtr = sText_LinkTrainerSentOutPkmn; stringPtr = sText_LinkTrainerSentOutPkmn;
@@ -2110,7 +2110,7 @@ void BufferStringBattle(u16 stringID)
{ {
if (gBattleTypeFlags & BATTLE_TYPE_MULTI) if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
stringPtr = sText_LinkTrainerMultiSentOutPkmn; stringPtr = sText_LinkTrainerMultiSentOutPkmn;
else if (gTrainerBattleOpponent_A == TRAINER_OPPONENT_C00) else if (gTrainerBattleOpponent_A == TRAINER_UNION_ROOM)
stringPtr = sText_Trainer1SentOutPkmn2; stringPtr = sText_Trainer1SentOutPkmn2;
else else
stringPtr = sText_LinkTrainerSentOutPkmn2; stringPtr = sText_LinkTrainerSentOutPkmn2;
@@ -2180,7 +2180,7 @@ void BufferStringBattle(u16 stringID)
break; break;
} }
} }
else if (gTrainerBattleOpponent_A == TRAINER_OPPONENT_C00) else if (gTrainerBattleOpponent_A == TRAINER_UNION_ROOM)
{ {
switch (gBattleTextBuff1[0]) switch (gBattleTextBuff1[0])
{ {
@@ -2495,8 +2495,8 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst)
case B_TXT_TRAINER1_CLASS: // trainer class name case B_TXT_TRAINER1_CLASS: // trainer class name
if (gBattleTypeFlags & BATTLE_TYPE_SECRET_BASE) if (gBattleTypeFlags & BATTLE_TYPE_SECRET_BASE)
toCpy = gTrainerClassNames[GetSecretBaseTrainerClass()]; toCpy = gTrainerClassNames[GetSecretBaseTrainerClass()];
else if (gTrainerBattleOpponent_A == TRAINER_OPPONENT_C00) else if (gTrainerBattleOpponent_A == TRAINER_UNION_ROOM)
toCpy = gTrainerClassNames[sub_8068BB0()]; toCpy = gTrainerClassNames[GetUnionRoomTrainerClass()];
else if (gTrainerBattleOpponent_A == TRAINER_FRONTIER_BRAIN) else if (gTrainerBattleOpponent_A == TRAINER_FRONTIER_BRAIN)
toCpy = gTrainerClassNames[GetFrontierBrainTrainerClass()]; toCpy = gTrainerClassNames[GetFrontierBrainTrainerClass()];
else if (gBattleTypeFlags & BATTLE_TYPE_FRONTIER) else if (gBattleTypeFlags & BATTLE_TYPE_FRONTIER)
@@ -2517,7 +2517,7 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst)
ConvertInternationalString(text, gBattleResources->secretBase->language); ConvertInternationalString(text, gBattleResources->secretBase->language);
toCpy = text; toCpy = text;
} }
else if (gTrainerBattleOpponent_A == TRAINER_OPPONENT_C00) else if (gTrainerBattleOpponent_A == TRAINER_UNION_ROOM)
{ {
toCpy = gLinkPlayers[multiplayerId ^ BIT_SIDE].name; toCpy = gLinkPlayers[multiplayerId ^ BIT_SIDE].name;
} }
+8 -8
View File
@@ -997,7 +997,7 @@ struct BerryTree *GetBerryTreeInfo(u8 id)
bool32 ObjectEventInteractionWaterBerryTree(void) bool32 ObjectEventInteractionWaterBerryTree(void)
{ {
struct BerryTree *tree = GetBerryTreeInfo(ObjectEventGetBerryTreeId(gSelectedObjectEvent)); struct BerryTree *tree = GetBerryTreeInfo(GetObjectEventBerryTreeId(gSelectedObjectEvent));
switch (tree->stage) switch (tree->stage)
{ {
@@ -1022,7 +1022,7 @@ bool32 ObjectEventInteractionWaterBerryTree(void)
bool8 IsPlayerFacingEmptyBerryTreePatch(void) bool8 IsPlayerFacingEmptyBerryTreePatch(void)
{ {
if (GetObjectEventScriptPointerPlayerFacing() == BerryTreeScript if (GetObjectEventScriptPointerPlayerFacing() == BerryTreeScript
&& GetStageByBerryTreeId(ObjectEventGetBerryTreeId(gSelectedObjectEvent)) == BERRY_STAGE_NO_BERRY) && GetStageByBerryTreeId(GetObjectEventBerryTreeId(gSelectedObjectEvent)) == BERRY_STAGE_NO_BERRY)
return TRUE; return TRUE;
else else
return FALSE; return FALSE;
@@ -1260,7 +1260,7 @@ void ObjectEventInteractionGetBerryTreeData(void)
u8 group; u8 group;
u8 num; u8 num;
id = ObjectEventGetBerryTreeId(gSelectedObjectEvent); id = GetObjectEventBerryTreeId(gSelectedObjectEvent);
berry = GetBerryTypeByBerryTreeId(id); berry = GetBerryTypeByBerryTreeId(id);
ResetBerryTreeSparkleFlag(id); ResetBerryTreeSparkleFlag(id);
localId = gSpecialVar_LastTalked; localId = gSpecialVar_LastTalked;
@@ -1277,13 +1277,13 @@ void ObjectEventInteractionGetBerryTreeData(void)
void ObjectEventInteractionGetBerryName(void) void ObjectEventInteractionGetBerryName(void)
{ {
u8 berryType = GetBerryTypeByBerryTreeId(ObjectEventGetBerryTreeId(gSelectedObjectEvent)); u8 berryType = GetBerryTypeByBerryTreeId(GetObjectEventBerryTreeId(gSelectedObjectEvent));
GetBerryNameByBerryType(berryType, gStringVar1); GetBerryNameByBerryType(berryType, gStringVar1);
} }
void ObjectEventInteractionGetBerryCountString(void) void ObjectEventInteractionGetBerryCountString(void)
{ {
u8 treeId = ObjectEventGetBerryTreeId(gSelectedObjectEvent); u8 treeId = GetObjectEventBerryTreeId(gSelectedObjectEvent);
u8 berry = GetBerryTypeByBerryTreeId(treeId); u8 berry = GetBerryTypeByBerryTreeId(treeId);
u8 count = GetBerryCountByBerryTreeId(treeId); u8 count = GetBerryCountByBerryTreeId(treeId);
GetBerryCountStringByBerryType(berry, gStringVar1, count); GetBerryCountStringByBerryType(berry, gStringVar1, count);
@@ -1298,13 +1298,13 @@ void ObjectEventInteractionPlantBerryTree(void)
{ {
u8 berry = ItemIdToBerryType(gSpecialVar_ItemId); u8 berry = ItemIdToBerryType(gSpecialVar_ItemId);
PlantBerryTree(ObjectEventGetBerryTreeId(gSelectedObjectEvent), berry, 1, TRUE); PlantBerryTree(GetObjectEventBerryTreeId(gSelectedObjectEvent), berry, 1, TRUE);
ObjectEventInteractionGetBerryTreeData(); ObjectEventInteractionGetBerryTreeData();
} }
void ObjectEventInteractionPickBerryTree(void) void ObjectEventInteractionPickBerryTree(void)
{ {
u8 id = ObjectEventGetBerryTreeId(gSelectedObjectEvent); u8 id = GetObjectEventBerryTreeId(gSelectedObjectEvent);
u8 berry = GetBerryTypeByBerryTreeId(id); u8 berry = GetBerryTypeByBerryTreeId(id);
gSpecialVar_0x8004 = AddBagItem(BerryTypeToItemId(berry), GetBerryCountByBerryTreeId(id)); gSpecialVar_0x8004 = AddBagItem(BerryTypeToItemId(berry), GetBerryCountByBerryTreeId(id));
@@ -1312,7 +1312,7 @@ void ObjectEventInteractionPickBerryTree(void)
void ObjectEventInteractionRemoveBerryTree(void) void ObjectEventInteractionRemoveBerryTree(void)
{ {
RemoveBerryTree(ObjectEventGetBerryTreeId(gSelectedObjectEvent)); RemoveBerryTree(GetObjectEventBerryTreeId(gSelectedObjectEvent));
sub_8092EF0(gSpecialVar_LastTalked, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup); sub_8092EF0(gSpecialVar_LastTalked, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup);
} }
+3 -3
View File
@@ -1246,7 +1246,7 @@ static void sub_8080018(void)
if (++sBerryBlenderData->framesToWait > 20) if (++sBerryBlenderData->framesToWait > 20)
{ {
ClearDialogWindowAndFrameToTransparent(4, TRUE); ClearDialogWindowAndFrameToTransparent(4, TRUE);
if (GetBlockReceivedStatus() == sub_800A9D8()) if (GetBlockReceivedStatus() == GetLinkPlayerCountAsBitFlags())
{ {
for (i = 0; i < GetLinkPlayerCount(); i++) for (i = 0; i < GetLinkPlayerCount(); i++)
{ {
@@ -1500,7 +1500,7 @@ static void sub_80808D4(void)
switch (sBerryBlenderData->mainState) switch (sBerryBlenderData->mainState)
{ {
case 0: case 0:
sub_800B4C0(); SetWirelessCommType0();
sub_8080588(); sub_8080588();
Blender_SetParticipantBerryData(0, gSpecialVar_ItemId); Blender_SetParticipantBerryData(0, gSpecialVar_ItemId);
Blender_CopyBerryData(&sBerryBlenderData->blendedBerries[0], gSpecialVar_ItemId); Blender_CopyBerryData(&sBerryBlenderData->blendedBerries[0], gSpecialVar_ItemId);
@@ -1664,7 +1664,7 @@ static void sub_80808D4(void)
static void sub_8080DF8(void) static void sub_8080DF8(void)
{ {
s32 i; s32 i;
for (i = 0; i < 4; i++) for (i = 0; i < CMD_LENGTH / 2; i++)
{ {
gSendCmd[0] = 0; gSendCmd[0] = 0;
gSendCmd[2] = 0; gSendCmd[2] = 0;
+6 -6
View File
@@ -832,7 +832,7 @@ u32 sub_8020C0C(MainCallback callback)
return 0; return 0;
} }
void sub_8020C70(MainCallback callback) void StartBerryCrush(MainCallback callback)
{ {
u8 playerCount = 0; u8 playerCount = 0;
u8 multiplayerId; u8 multiplayerId;
@@ -842,7 +842,7 @@ void sub_8020C70(MainCallback callback)
SetMainCallback2(callback); SetMainCallback2(callback);
Rfu.unk_10 = 0; Rfu.unk_10 = 0;
Rfu.unk_12 = 0; Rfu.unk_12 = 0;
Rfu.unk_ee = 1; Rfu.errorState = 1;
return; return;
} }
@@ -853,7 +853,7 @@ void sub_8020C70(MainCallback callback)
SetMainCallback2(callback); SetMainCallback2(callback);
Rfu.unk_10 = 0; Rfu.unk_10 = 0;
Rfu.unk_12 = 0; Rfu.unk_12 = 0;
Rfu.unk_ee = 1; Rfu.errorState = 1;
return; return;
} }
@@ -863,7 +863,7 @@ void sub_8020C70(MainCallback callback)
SetMainCallback2(callback); SetMainCallback2(callback);
Rfu.unk_10 = 0; Rfu.unk_10 = 0;
Rfu.unk_12 = 0; Rfu.unk_12 = 0;
Rfu.unk_ee = 1; Rfu.errorState = 1;
return; return;
} }
@@ -3013,10 +3013,10 @@ static u32 sub_8024134(struct BerryCrushGame *r5, u8 *r4)
DrawDialogueFrame(0, 0); DrawDialogueFrame(0, 0);
AddTextPrinterParameterized2(0, 1, gText_SavingDontTurnOffPower, 0, 0, 2, 1, 3); AddTextPrinterParameterized2(0, 1, gText_SavingDontTurnOffPower, 0, 0, 2, 1, 3);
CopyWindowToVram(0, 3); CopyWindowToVram(0, 3);
CreateTask(sub_8153688, 0); CreateTask(Task_LinkSave, 0);
break; break;
case 3: case 3:
if (FuncIsActiveTask(sub_8153688)) if (FuncIsActiveTask(Task_LinkSave))
return 0; return 0;
break; break;
case 4: case 4:
+398 -374
View File
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -36,7 +36,7 @@ bool8 sub_80FC530(u8 arg0)
bool8 sub_80FC55C(void) bool8 sub_80FC55C(void)
{ {
if (GetBlockReceivedStatus() == sub_800A9D8()) if (GetBlockReceivedStatus() == GetLinkPlayerCountAsBitFlags())
{ {
ResetBlockReceivedFlags(); ResetBlockReceivedFlags();
return TRUE; return TRUE;
+255 -213
View File
@@ -50,27 +50,36 @@ const u8 sText_4PlayerMode[] = _("4-PLAYER\nMODE");
const u8 sText_5PlayerMode[] = _("5-PLAYER\nMODE"); const u8 sText_5PlayerMode[] = _("5-PLAYER\nMODE");
static const u8 *const sPlayersNeededOrModeTexts[][5] = { static const u8 *const sPlayersNeededOrModeTexts[][5] = {
// 2 players required
{ {
sText_1PlayerNeeded, sText_1PlayerNeeded,
sText_2PlayerMode sText_2PlayerMode
}, { },
// 4 players required
{
sText_3PlayersNeeded, sText_3PlayersNeeded,
sText_2PlayersNeeded, sText_2PlayersNeeded,
sText_1PlayerNeeded, sText_1PlayerNeeded,
sText_4PlayerMode sText_4PlayerMode
}, { },
// 2-5 players required
{
sText_1PlayerNeeded, sText_1PlayerNeeded,
sText_2PlayerMode, sText_2PlayerMode,
sText_3PlayerMode, sText_3PlayerMode,
sText_4PlayerMode, sText_4PlayerMode,
sText_5PlayerMode sText_5PlayerMode
}, { },
// 3-5 players required
{
sText_2PlayersNeeded, sText_2PlayersNeeded,
sText_1PlayerNeeded, sText_1PlayerNeeded,
sText_3PlayerMode, sText_3PlayerMode,
sText_4PlayerMode, sText_4PlayerMode,
sText_5PlayerMode sText_5PlayerMode
}, { },
// 2-4 players required
{
sText_1PlayerNeeded, sText_1PlayerNeeded,
sText_2PlayerMode, sText_2PlayerMode,
sText_3PlayerMode, sText_3PlayerMode,
@@ -90,15 +99,15 @@ ALIGNED(4) const u8 sText_OtherTrainerUnavailableNow[] = _("The other TRAINER do
ALIGNED(4) const u8 sText_CantTransmitTrainerTooFar[] = _("You can't transmit with a TRAINER\nwho is too far away.\p"); ALIGNED(4) const u8 sText_CantTransmitTrainerTooFar[] = _("You can't transmit with a TRAINER\nwho is too far away.\p");
ALIGNED(4) const u8 sText_TrainersNotReadyYet[] = _("The other TRAINER(S) is/are not\nready yet.\p"); ALIGNED(4) const u8 sText_TrainersNotReadyYet[] = _("The other TRAINER(S) is/are not\nready yet.\p");
const u8 *const sCantTransmitToTrainerTexts[] = { static const u8 *const sCantTransmitToTrainerTexts[] = {
sText_CantTransmitTrainerTooFar, [UR_TRADE_PLAYER_NOT_READY - 1] = sText_CantTransmitTrainerTooFar,
sText_TrainersNotReadyYet [UR_TRADE_PARTNER_NOT_READY - 1] = sText_TrainersNotReadyYet
}; };
ALIGNED(4) const u8 sText_ModeWithTheseMembersWillBeCanceled[] = _("The {STR_VAR_1} MODE with\nthese members will be canceled.{PAUSE 60}"); ALIGNED(4) const u8 sText_ModeWithTheseMembersWillBeCanceled[] = _("The {STR_VAR_1} MODE with\nthese members will be canceled.{PAUSE 60}");
ALIGNED(4) const u8 sText_MemberNoLongerAvailable[] = _("There is a member who can no\nlonger remain available.\p"); ALIGNED(4) const u8 sText_MemberNoLongerAvailable[] = _("There is a member who can no\nlonger remain available.\p");
const u8 *const sPlayerUnavailableTexts[] = { static const u8 *const sPlayerUnavailableTexts[] = {
sText_OtherTrainerUnavailableNow, sText_OtherTrainerUnavailableNow,
sText_MemberNoLongerAvailable sText_MemberNoLongerAvailable
}; };
@@ -111,17 +120,17 @@ ALIGNED(4) const u8 sText_AwaitingOtherMembers[] = _("{STR_VAR_1}!\nAwaiting oth
ALIGNED(4) const u8 sText_QuitBeingMember[] = _("Quit being a member?"); ALIGNED(4) const u8 sText_QuitBeingMember[] = _("Quit being a member?");
ALIGNED(4) const u8 sText_StoppedBeingMember[] = _("You stopped being a member.\p"); ALIGNED(4) const u8 sText_StoppedBeingMember[] = _("You stopped being a member.\p");
const u8 *const sPlayerDisconnectedTexts[] = { static const u8 *const sPlayerDisconnectedTexts[] = {
NULL, [RFU_STATUS_OK] = NULL,
sText_MemberNoLongerAvailable, [RFU_STATUS_FATAL_ERROR] = sText_MemberNoLongerAvailable,
sText_TrainerAppearsUnavailable, [RFU_STATUS_CONNECTION_ERROR] = sText_TrainerAppearsUnavailable,
NULL, [RFU_STATUS_CHILD_SEND_COMPLETE] = NULL,
NULL, [RFU_STATUS_NEW_CHILD_DETECTED] = NULL,
NULL, [RFU_STATUS_JOIN_GROUP_OK] = NULL,
sText_PlayerRepliedNo, [RFU_STATUS_JOIN_GROUP_NO] = sText_PlayerRepliedNo,
NULL, [RFU_STATUS_WAIT_ACK_JOIN_GROUP] = NULL,
NULL, [RFU_STATUS_LEAVE_GROUP_NOTICE] = NULL,
sText_StoppedBeingMember [RFU_STATUS_LEAVE_GROUP] = sText_StoppedBeingMember
}; };
ALIGNED(4) const u8 sText_WirelessLinkEstablished[] = _("The WIRELESS COMMUNICATION\nSYSTEM link has been established."); ALIGNED(4) const u8 sText_WirelessLinkEstablished[] = _("The WIRELESS COMMUNICATION\nSYSTEM link has been established.");
@@ -130,16 +139,16 @@ ALIGNED(4) const u8 sText_LinkWithFriendDropped[] = _("The link with your friend
ALIGNED(4) const u8 sText_PlayerRepliedNo2[] = _("{STR_VAR_1} replied, “No…”"); ALIGNED(4) const u8 sText_PlayerRepliedNo2[] = _("{STR_VAR_1} replied, “No…”");
const u8 *const sLinkDroppedTexts[] = { const u8 *const sLinkDroppedTexts[] = {
NULL, [RFU_STATUS_OK] = NULL,
sText_LinkWithFriendDropped, [RFU_STATUS_FATAL_ERROR] = sText_LinkWithFriendDropped,
sText_LinkWithFriendDropped, [RFU_STATUS_CONNECTION_ERROR] = sText_LinkWithFriendDropped,
NULL, [RFU_STATUS_CHILD_SEND_COMPLETE] = NULL,
NULL, [RFU_STATUS_NEW_CHILD_DETECTED] = NULL,
NULL, [RFU_STATUS_JOIN_GROUP_OK] = NULL,
sText_PlayerRepliedNo2, [RFU_STATUS_JOIN_GROUP_NO] = sText_PlayerRepliedNo2,
NULL, [RFU_STATUS_WAIT_ACK_JOIN_GROUP] = NULL,
NULL, [RFU_STATUS_LEAVE_GROUP_NOTICE] = NULL,
NULL [RFU_STATUS_LEAVE_GROUP] = NULL
}; };
ALIGNED(4) const u8 sText_DoYouWantXMode[] = _("Do you want the {STR_VAR_2}\nMODE?"); ALIGNED(4) const u8 sText_DoYouWantXMode[] = _("Do you want the {STR_VAR_2}\nMODE?");
@@ -251,7 +260,7 @@ ALIGNED(4) const u8 sText_WaitForBattleFemale[] = _("A battle? Of course, but I
ALIGNED(4) const u8 sText_WaitForChatFemale[] = _("Did you want to chat?\nOkay, but please wait a moment."); ALIGNED(4) const u8 sText_WaitForChatFemale[] = _("Did you want to chat?\nOkay, but please wait a moment.");
ALIGNED(4) const u8 sText_ShowTrainerCardFemale[] = _("As my introduction, I'll show you\nmy TRAINER CARD."); ALIGNED(4) const u8 sText_ShowTrainerCardFemale[] = _("As my introduction, I'll show you\nmy TRAINER CARD.");
const u8 *const sText_WaitOrShowCardTexts[GENDER_COUNT][4] = { static const u8 *const sText_WaitOrShowCardTexts[GENDER_COUNT][4] = {
{ {
sText_WaitForBattleMale, sText_WaitForBattleMale,
sText_WaitForChatMale, sText_WaitForChatMale,
@@ -274,7 +283,7 @@ ALIGNED(4) const u8 sText_TradeWillBeStarted[] = _("The trade will be started.{P
ALIGNED(4) const u8 sText_BattleWillBeStarted[] = _("The battle will be started.{PAUSE 60}"); ALIGNED(4) const u8 sText_BattleWillBeStarted[] = _("The battle will be started.{PAUSE 60}");
ALIGNED(4) const u8 sText_EnteringChat[] = _("Entering the chat…{PAUSE 60}"); ALIGNED(4) const u8 sText_EnteringChat[] = _("Entering the chat…{PAUSE 60}");
const u8 *const sStartActivityTexts[][GENDER_COUNT][3] = { static const u8 *const sStartActivityTexts[][GENDER_COUNT][3] = {
{ {
{ {
sText_BattleWillBeStarted, sText_BattleWillBeStarted,
@@ -325,18 +334,21 @@ const u8 *const sIfYouWantToDoSomethingTexts[GENDER_COUNT] = {
ALIGNED(4) const u8 sText_TrainerBattleBusy[] = _("Whoops! Sorry, but I have to do\nsomething else.\lAnother time, okay?\p"); ALIGNED(4) const u8 sText_TrainerBattleBusy[] = _("Whoops! Sorry, but I have to do\nsomething else.\lAnother time, okay?\p");
ALIGNED(4) const u8 sText_NeedTwoMonsOfLevel30OrLower1[] = _("If you want to battle, you need\ntwo POKéMON that are below\lLv. 30.\p"); ALIGNED(4) const u8 sText_NeedTwoMonsOfLevel30OrLower1[] = _("If you want to battle, you need\ntwo POKéMON that are below\lLv. 30.\p");
ALIGNED(4) const u8 sText_NeedTwoMonsOfLevel30OrLower2[] = _("For a battle, you need two\nPOKéMON that are below Lv. 30.\p"); ALIGNED(4) const u8 sText_NeedTwoMonsOfLevel30OrLower2[] = _("For a battle, you need two\nPOKéMON that are below Lv. 30.\p");
ALIGNED(4) const u8 sText_DeclineBattleMale[] = _("Oh, all right.\nCome see me anytime, okay?\p");
ALIGNED(4) const u8 stext_DeclineBattleFemale[] = _("Oh…\nPlease come by anytime.\p");
static const u8 *const sDeclineBattleTexts[GENDER_COUNT] = { ALIGNED(4) const u8 sText_DeclineChatMale[] = _("Oh, all right.\nCome see me anytime, okay?\p");
sText_DeclineBattleMale, ALIGNED(4) const u8 stext_DeclineChatFemale[] = _("Oh…\nPlease come by anytime.\p");
stext_DeclineBattleFemale
// Response from partner when player declines chat
static const u8 *const sDeclineChatTexts[GENDER_COUNT] = {
sText_DeclineChatMale,
stext_DeclineChatFemale
}; };
ALIGNED(4) const u8 sText_ChatDeclinedMale[] = _("Oh, sorry!\nI just can't right this instant.\lLet's chat another time.\p"); ALIGNED(4) const u8 sText_ChatDeclinedMale[] = _("Oh, sorry!\nI just can't right this instant.\lLet's chat another time.\p");
ALIGNED(4) const u8 sText_ChatDeclinedFemale[] = _("Oh, I'm sorry.\nI have too much to do right now.\lLet's chat some other time.\p"); ALIGNED(4) const u8 sText_ChatDeclinedFemale[] = _("Oh, I'm sorry.\nI have too much to do right now.\lLet's chat some other time.\p");
const u8 *const sChatDeclinedTexts[GENDER_COUNT] = { // Response from partner when they decline chat
static const u8 *const sChatDeclinedTexts[GENDER_COUNT] = {
sText_ChatDeclinedMale, sText_ChatDeclinedMale,
sText_ChatDeclinedFemale sText_ChatDeclinedFemale
}; };
@@ -484,8 +496,8 @@ static const u8 *const sChooseTrainerTexts[NUM_LINK_GROUP_TYPES] =
[LINK_GROUP_BERRY_PICKING] = sText_ChooseLeaderBerryPicking, [LINK_GROUP_BERRY_PICKING] = sText_ChooseLeaderBerryPicking,
[LINK_GROUP_WONDER_CARD] = sText_ChooseTrainerToShareWonderCards, [LINK_GROUP_WONDER_CARD] = sText_ChooseTrainerToShareWonderCards,
[LINK_GROUP_WONDER_NEWS] = sText_ChooseTrainerToShareWonderNews, [LINK_GROUP_WONDER_NEWS] = sText_ChooseTrainerToShareWonderNews,
[LINK_GROUP_UNK_9] = NULL, [LINK_GROUP_UNION_ROOM_RESUME] = NULL,
[LINK_GROUP_UNK_10] = NULL, [LINK_GROUP_UNION_ROOM_INIT] = NULL,
[LINK_GROUP_UNK_11] = NULL, [LINK_GROUP_UNK_11] = NULL,
[LINK_GROUP_RECORD_CORNER] = sText_ChooseLeaderRecordCorner, [LINK_GROUP_RECORD_CORNER] = sText_ChooseLeaderRecordCorner,
[LINK_GROUP_BERRY_BLENDER] = sText_ChooseLeaderBerryBlender, [LINK_GROUP_BERRY_BLENDER] = sText_ChooseLeaderBerryBlender,
@@ -567,39 +579,39 @@ const u8 *const sGladToMeetYouTexts[GENDER_COUNT] = {
ALIGNED(4) const u8 sText_FinishedCheckingPlayersTrainerCard[] = _("Finished checking {SPECIAL_F7 0x01}'s\nTRAINER CARD.{PAUSE 60}"); ALIGNED(4) const u8 sText_FinishedCheckingPlayersTrainerCard[] = _("Finished checking {SPECIAL_F7 0x01}'s\nTRAINER CARD.{PAUSE 60}");
const u8 *const sLinkGroupActivityTexts[] = { static const u8 *const sLinkGroupActivityNameTexts[] = {
sText_EmptyString, [ACTIVITY_NONE] = sText_EmptyString,
sText_SingleBattle, [ACTIVITY_BATTLE_SINGLE] = sText_SingleBattle,
sText_DoubleBattle, [ACTIVITY_BATTLE_DOUBLE] = sText_DoubleBattle,
sText_MultiBattle, [ACTIVITY_BATTLE_MULTI] = sText_MultiBattle,
sText_PokemonTrades, [ACTIVITY_TRADE] = sText_PokemonTrades,
sText_Chat, [ACTIVITY_CHAT] = sText_Chat,
sText_WonderCards, [ACTIVITY_WONDER_CARD] = sText_WonderCards,
sText_WonderNews, [ACTIVITY_WONDER_NEWS] = sText_WonderNews,
sText_Cards, [ACTIVITY_CARD] = sText_Cards,
sText_PokemonJump, [ACTIVITY_POKEMON_JUMP] = sText_PokemonJump,
sText_BerryCrush, [ACTIVITY_BERRY_CRUSH] = sText_BerryCrush,
sText_BerryPicking, [ACTIVITY_BERRY_PICK] = sText_BerryPicking,
sText_Search, [ACTIVITY_SEARCH] = sText_Search,
sText_EmptyString, [ACTIVITY_SPIN_TRADE] = sText_EmptyString,
sText_BattleTowerOpenLv, [ACTIVITY_BATTLE_TOWER_OPEN] = sText_BattleTowerOpenLv,
sText_RecordCorner, [ACTIVITY_RECORD_CORNER] = sText_RecordCorner,
sText_BerryBlender, [ACTIVITY_BERRY_BLENDER] = sText_BerryBlender,
sText_EmptyString, [ACTIVITY_ACCEPT] = sText_EmptyString,
sText_EmptyString, [ACTIVITY_DECLINE] = sText_EmptyString,
sText_EmptyString, [ACTIVITY_NPCTALK] = sText_EmptyString,
sText_EmptyString, [ACTIVITY_PLYRTALK] = sText_EmptyString,
sText_WonderCards, [ACTIVITY_WONDER_CARD2] = sText_WonderCards,
sText_WonderNews, [ACTIVITY_WONDER_NEWS2] = sText_WonderNews,
sText_CoolContest, [ACTIVITY_CONTEST_COOL] = sText_CoolContest,
sText_BeautyContest, [ACTIVITY_CONTEST_BEAUTY] = sText_BeautyContest,
sText_CuteContest, [ACTIVITY_CONTEST_CUTE] = sText_CuteContest,
sText_SmartContest, [ACTIVITY_CONTEST_SMART] = sText_SmartContest,
sText_ToughContest, [ACTIVITY_CONTEST_TOUGH] = sText_ToughContest,
sText_BattleTowerLv50 [ACTIVITY_BATTLE_TOWER] = sText_BattleTowerLv50
}; };
const struct WindowTemplate gUnknown_082F00BC = { static const struct WindowTemplate sWindowTemplate_BButtonCancel = {
.bg = 0x00, .bg = 0x00,
.tilemapLeft = 0x00, .tilemapLeft = 0x00,
.tilemapTop = 0x00, .tilemapTop = 0x00,
@@ -609,62 +621,69 @@ const struct WindowTemplate gUnknown_082F00BC = {
.baseBlock = 0x0008 .baseBlock = 0x0008
}; };
const u32 gUnknown_082F00C4[NUM_LINK_GROUP_TYPES] = { // Minimum and maximum number of players for a link group
0x0201, // A minimum of 0 means the min and max are equal
0x0202, #define LINK_GROUP_CAPACITY(min, max)(((min) << 12) | ((max) << 8))
0x0403, #define GROUP_MAX(capacity)(capacity & 0x0F)
0x0204, #define GROUP_MIN(capacity)(capacity >> 4)
0x2509, #define GROUP_MIN2(capacity)(capacity & 0xF0) // Unnecessary to have both, but needed to match
0x250a,
0x350b, static const u32 sLinkGroupToActivityAndCapacity[NUM_LINK_GROUP_TYPES] = {
0x0000, [LINK_GROUP_SINGLE_BATTLE] = ACTIVITY_BATTLE_SINGLE | LINK_GROUP_CAPACITY(0, 2),
0x0000, [LINK_GROUP_DOUBLE_BATTLE] = ACTIVITY_BATTLE_DOUBLE | LINK_GROUP_CAPACITY(0, 2),
0x0000, [LINK_GROUP_MULTI_BATTLE] = ACTIVITY_BATTLE_MULTI | LINK_GROUP_CAPACITY(0, 4),
0x0000, [LINK_GROUP_TRADE] = ACTIVITY_TRADE | LINK_GROUP_CAPACITY(0, 2),
0x0000, [LINK_GROUP_POKEMON_JUMP] = ACTIVITY_POKEMON_JUMP | LINK_GROUP_CAPACITY(2, 5),
0x240f, [LINK_GROUP_BERRY_CRUSH] = ACTIVITY_BERRY_CRUSH | LINK_GROUP_CAPACITY(2, 5),
0x2410, [LINK_GROUP_BERRY_PICKING] = ACTIVITY_BERRY_PICK | LINK_GROUP_CAPACITY(3, 5),
0x0000, [LINK_GROUP_WONDER_CARD] = ACTIVITY_NONE | LINK_GROUP_CAPACITY(0, 0),
0x2417, [LINK_GROUP_WONDER_NEWS] = ACTIVITY_NONE | LINK_GROUP_CAPACITY(0, 0),
0x2418, [LINK_GROUP_UNION_ROOM_RESUME] = ACTIVITY_NONE | LINK_GROUP_CAPACITY(0, 0),
0x2419, [LINK_GROUP_UNION_ROOM_INIT] = ACTIVITY_NONE | LINK_GROUP_CAPACITY(0, 0),
0x241a, [LINK_GROUP_UNK_11] = ACTIVITY_NONE | LINK_GROUP_CAPACITY(0, 0),
0x241b, [LINK_GROUP_RECORD_CORNER] = ACTIVITY_RECORD_CORNER | LINK_GROUP_CAPACITY(2, 4),
0x021c, [LINK_GROUP_BERRY_BLENDER] = ACTIVITY_BERRY_BLENDER | LINK_GROUP_CAPACITY(2, 4),
0x020e [LINK_GROUP_UNK_14] = ACTIVITY_NONE | LINK_GROUP_CAPACITY(0, 0),
[LINK_GROUP_COOL_CONTEST] = ACTIVITY_CONTEST_COOL | LINK_GROUP_CAPACITY(2, 4),
[LINK_GROUP_BEAUTY_CONTEST] = ACTIVITY_CONTEST_BEAUTY | LINK_GROUP_CAPACITY(2, 4),
[LINK_GROUP_CUTE_CONTEST] = ACTIVITY_CONTEST_CUTE | LINK_GROUP_CAPACITY(2, 4),
[LINK_GROUP_SMART_CONTEST] = ACTIVITY_CONTEST_SMART | LINK_GROUP_CAPACITY(2, 4),
[LINK_GROUP_TOUGH_CONTEST] = ACTIVITY_CONTEST_TOUGH | LINK_GROUP_CAPACITY(2, 4),
[LINK_GROUP_BATTLE_TOWER] = ACTIVITY_BATTLE_TOWER | LINK_GROUP_CAPACITY(0, 2),
[LINK_GROUP_BATTLE_TOWER_OPEN] = ACTIVITY_BATTLE_TOWER_OPEN | LINK_GROUP_CAPACITY(0, 2)
}; };
const struct WindowTemplate gUnknown_082F011C = { static const struct WindowTemplate sWindowTemplate_PlayerList = {
.bg = 0x00, .bg = 0,
.tilemapLeft = 0x01, .tilemapLeft = 1,
.tilemapTop = 0x03, .tilemapTop = 3,
.width = 0x0d, .width = 13,
.height = 0x08, .height = 8,
.paletteNum = 0x0f, .paletteNum = 15,
.baseBlock = 0x0044 .baseBlock = 0x0044
}; };
const struct WindowTemplate gUnknown_082F0124 = { static const struct WindowTemplate sWindowTemplate_5PlayerList = {
.bg = 0x00, .bg = 0,
.tilemapLeft = 0x01, .tilemapLeft = 1,
.tilemapTop = 0x03, .tilemapTop = 3,
.width = 0x0d, .width = 13,
.height = 0x0a, .height = 10,
.paletteNum = 0x0f, .paletteNum = 15,
.baseBlock = 0x0044 .baseBlock = 0x0044
}; };
const struct WindowTemplate gUnknown_082F012C = { static const struct WindowTemplate sWindowTemplate_NumPlayerMode = {
.bg = 0x00, .bg = 0,
.tilemapLeft = 0x10, .tilemapLeft = 16,
.tilemapTop = 0x03, .tilemapTop = 3,
.width = 0x07, .width = 7,
.height = 0x04, .height = 4,
.paletteNum = 0x0f, .paletteNum = 15,
.baseBlock = 0x00c6 .baseBlock = 0x00c6
}; };
const struct ListMenuItem gUnknown_082F0134[] = { static const struct ListMenuItem sPossibleGroupMembersListMenuItems[] = {
{ sText_EmptyString, 0 }, { sText_EmptyString, 0 },
{ sText_EmptyString, 1 }, { sText_EmptyString, 1 },
{ sText_EmptyString, 2 }, { sText_EmptyString, 2 },
@@ -672,11 +691,11 @@ const struct ListMenuItem gUnknown_082F0134[] = {
{ sText_EmptyString, 4 } { sText_EmptyString, 4 }
}; };
const struct ListMenuTemplate gUnknown_082F015C = { static const struct ListMenuTemplate sListMenuTemplate_PossibleGroupMembers = {
.items = gUnknown_082F0134, .items = sPossibleGroupMembersListMenuItems,
.moveCursorFunc = NULL, .moveCursorFunc = NULL,
.itemPrintFunc = sub_8013278, .itemPrintFunc = ItemPrintFunc_PossibleGroupMembers,
.totalItems = 5, .totalItems = ARRAY_COUNT(sPossibleGroupMembersListMenuItems),
.maxShowed = 5, .maxShowed = 5,
.windowId = 0, .windowId = 0,
.header_X = 0, .header_X = 0,
@@ -732,11 +751,11 @@ const struct ListMenuItem gUnknown_082F0184[] = {
{ sText_EmptyString, 15 } { sText_EmptyString, 15 }
}; };
const struct ListMenuTemplate gUnknown_082F0204 = { static const struct ListMenuTemplate sListMenuTemplate_UnionRoomGroups = {
.items = gUnknown_082F0184, .items = gUnknown_082F0184,
.moveCursorFunc = ListMenuDefaultCursorMoveFunc, .moveCursorFunc = ListMenuDefaultCursorMoveFunc,
.itemPrintFunc = sub_8013DF4, .itemPrintFunc = ListMenuItemPrintFunc_UnionRoomGroups,
.totalItems = 16, .totalItems = ARRAY_COUNT(gUnknown_082F0184),
.maxShowed = 5, .maxShowed = 5,
.windowId = 0, .windowId = 0,
.header_X = 0, .header_X = 0,
@@ -753,7 +772,7 @@ const struct ListMenuTemplate gUnknown_082F0204 = {
.cursorKind = 0 .cursorKind = 0
}; };
const struct WindowTemplate gUnknown_082F021C = { static const struct WindowTemplate sWindowTemplate_InviteToActivity = {
.bg = 0x00, .bg = 0x00,
.tilemapLeft = 0x14, .tilemapLeft = 0x14,
.tilemapTop = 0x05, .tilemapTop = 0x05,
@@ -770,11 +789,11 @@ const struct ListMenuItem gUnknown_082F0224[] = {
{ sText_Exit, 0x040 } { sText_Exit, 0x040 }
}; };
const struct ListMenuTemplate gUnknown_082F0244 = { static const struct ListMenuTemplate sListMenuTemplate_InviteToActivity = {
.items = gUnknown_082F0224, .items = gUnknown_082F0224,
.moveCursorFunc = ListMenuDefaultCursorMoveFunc, .moveCursorFunc = ListMenuDefaultCursorMoveFunc,
.itemPrintFunc = NULL, .itemPrintFunc = NULL,
.totalItems = 4, .totalItems = ARRAY_COUNT(gUnknown_082F0224),
.maxShowed = 4, .maxShowed = 4,
.windowId = 0, .windowId = 0,
.header_X = 0, .header_X = 0,
@@ -791,7 +810,7 @@ const struct ListMenuTemplate gUnknown_082F0244 = {
.cursorKind = 0 .cursorKind = 0
}; };
const struct WindowTemplate gUnknown_082F025C = { static const struct WindowTemplate sWindowTemplate_RegisterForTrade = {
.bg = 0x00, .bg = 0x00,
.tilemapLeft = 0x12, .tilemapLeft = 0x12,
.tilemapTop = 0x07, .tilemapTop = 0x07,
@@ -801,17 +820,17 @@ const struct WindowTemplate gUnknown_082F025C = {
.baseBlock = 0x0001 .baseBlock = 0x0001
}; };
const struct ListMenuItem gUnknown_082F0264[] = { static const struct ListMenuItem sRegisterForTradeListMenuItems[] = {
{ gText_Register, 1 }, { gText_Register, 1 },
{ sText_Info, 2 }, { sText_Info, 2 },
{ sText_Exit, 3 } { sText_Exit, 3 }
}; };
const struct ListMenuTemplate gUnknown_082F027C = { static const struct ListMenuTemplate sListMenuTemplate_RegisterForTrade = {
.items = gUnknown_082F0264, .items = sRegisterForTradeListMenuItems,
.moveCursorFunc = ListMenuDefaultCursorMoveFunc, .moveCursorFunc = ListMenuDefaultCursorMoveFunc,
.itemPrintFunc = NULL, .itemPrintFunc = NULL,
.totalItems = 3, .totalItems = ARRAY_COUNT(sRegisterForTradeListMenuItems),
.maxShowed = 3, .maxShowed = 3,
.windowId = 0, .windowId = 0,
.header_X = 0, .header_X = 0,
@@ -838,7 +857,7 @@ const struct WindowTemplate gUnknown_082F0294 = {
.baseBlock = 0x0001 .baseBlock = 0x0001
}; };
static const struct ListMenuItem sTradingBoardTypes[] = { static const struct ListMenuItem sTradingBoardTypes[NUMBER_OF_MON_TYPES] = {
{ gTypeNames[TYPE_NORMAL], TYPE_NORMAL }, { gTypeNames[TYPE_NORMAL], TYPE_NORMAL },
{ gTypeNames[TYPE_FIRE], TYPE_FIRE }, { gTypeNames[TYPE_FIRE], TYPE_FIRE },
{ gTypeNames[TYPE_WATER], TYPE_WATER }, { gTypeNames[TYPE_WATER], TYPE_WATER },
@@ -856,14 +875,14 @@ static const struct ListMenuItem sTradingBoardTypes[] = {
{ gTypeNames[TYPE_DRAGON], TYPE_DRAGON }, { gTypeNames[TYPE_DRAGON], TYPE_DRAGON },
{ gTypeNames[TYPE_STEEL], TYPE_STEEL }, { gTypeNames[TYPE_STEEL], TYPE_STEEL },
{ gTypeNames[TYPE_DARK], TYPE_DARK }, { gTypeNames[TYPE_DARK], TYPE_DARK },
{ sText_Exit, NUMBER_OF_MON_TYPES } { sText_Exit, NUMBER_OF_MON_TYPES }
}; };
const struct ListMenuTemplate sMenuTemplate_TradingBoardRequestType = { static const struct ListMenuTemplate sMenuTemplate_TradingBoardRequestType = {
.items = sTradingBoardTypes, .items = sTradingBoardTypes,
.moveCursorFunc = ListMenuDefaultCursorMoveFunc, .moveCursorFunc = ListMenuDefaultCursorMoveFunc,
.itemPrintFunc = NULL, .itemPrintFunc = NULL,
.totalItems = NUMBER_OF_MON_TYPES, .totalItems = ARRAY_COUNT(sTradingBoardTypes),
.maxShowed = 6, .maxShowed = 6,
.windowId = 0, .windowId = 0,
.header_X = 0, .header_X = 0,
@@ -880,7 +899,7 @@ const struct ListMenuTemplate sMenuTemplate_TradingBoardRequestType = {
.cursorKind = 0 .cursorKind = 0
}; };
const struct WindowTemplate gUnknown_082F0344 = { static const struct WindowTemplate sWindowTemplate_TradingBoard = {
.bg = 0x00, .bg = 0x00,
.tilemapLeft = 0x01, .tilemapLeft = 0x01,
.tilemapTop = 0x01, .tilemapTop = 0x01,
@@ -900,7 +919,7 @@ const struct WindowTemplate gUnknown_082F034C = {
.baseBlock = 0x0039 .baseBlock = 0x0039
}; };
const struct ListMenuItem gUnknown_082F0354[] = { static const struct ListMenuItem sTradeBoardListMenuItems[] = {
{ sText_EmptyString, -3 }, { sText_EmptyString, -3 },
{ sText_EmptyString, 0 }, { sText_EmptyString, 0 },
{ sText_EmptyString, 1 }, { sText_EmptyString, 1 },
@@ -913,11 +932,11 @@ const struct ListMenuItem gUnknown_082F0354[] = {
{ sText_Exit2, 8 } { sText_Exit2, 8 }
}; };
const struct ListMenuTemplate gUnknown_082F03A4 = { static const struct ListMenuTemplate sTradeBoardListMenuTemplate = {
.items = gUnknown_082F0354, .items = sTradeBoardListMenuItems,
.moveCursorFunc = ListMenuDefaultCursorMoveFunc, .moveCursorFunc = ListMenuDefaultCursorMoveFunc,
.itemPrintFunc = sub_8017BE8, .itemPrintFunc = TradeBoardListMenuItemPrintFunc,
.totalItems = 10, .totalItems = ARRAY_COUNT(sTradeBoardListMenuItems),
.maxShowed = 6, .maxShowed = 6,
.windowId = 0, .windowId = 0,
.header_X = 0, .header_X = 0,
@@ -944,7 +963,7 @@ const struct WindowTemplate UnrefWindowTemplate_082F03B4 = {
.baseBlock = 0x0039 .baseBlock = 0x0039
}; };
const struct ListMenuItem gUnknown_082F03C4[] = { static const struct ListMenuItem sEmptyListMenuItems[] = {
{ sText_EmptyString, 0 }, { sText_EmptyString, 0 },
{ sText_EmptyString, 1 }, { sText_EmptyString, 1 },
{ sText_EmptyString, 2 }, { sText_EmptyString, 2 },
@@ -963,11 +982,12 @@ const struct ListMenuItem gUnknown_082F03C4[] = {
{ sText_EmptyString, 15 } { sText_EmptyString, 15 }
}; };
const struct ListMenuTemplate UnrefListMenuTemplate_082F0444 = { // Unused
.items = gUnknown_082F03C4, static const struct ListMenuTemplate sUnknownListMenuTemplate = {
.items = sEmptyListMenuItems,
.moveCursorFunc = ListMenuDefaultCursorMoveFunc, .moveCursorFunc = ListMenuDefaultCursorMoveFunc,
.itemPrintFunc = nullsub_14, .itemPrintFunc = nullsub_14,
.totalItems = 16, .totalItems = ARRAY_COUNT(sEmptyListMenuItems),
.maxShowed = 4, .maxShowed = 4,
.windowId = 0, .windowId = 0,
.header_X = 0, .header_X = 0,
@@ -984,78 +1004,100 @@ const struct ListMenuTemplate UnrefListMenuTemplate_082F0444 = {
.cursorKind = 0 .cursorKind = 0
}; };
const struct UnkStruct_Shared gUnknown_082F045C = {0}; const struct WirelessGnameUnamePair sWirelessGnameUnamePair_Dummy = {0};
ALIGNED(4) const u8 gUnknown_082F0474[] = {0x01, 0xff}; ALIGNED(4) const u8 sAcceptedActivityIds_SingleBattle[] = {ACTIVITY_BATTLE_SINGLE, 0xff};
ALIGNED(4) const u8 gUnknown_082F0478[] = {0x02, 0xff}; ALIGNED(4) const u8 sAcceptedActivityIds_DoubleBattle[] = {ACTIVITY_BATTLE_DOUBLE, 0xff};
ALIGNED(4) const u8 gUnknown_082F047C[] = {0x03, 0xff}; ALIGNED(4) const u8 sAcceptedActivityIds_MultiBattle[] = {ACTIVITY_BATTLE_MULTI, 0xff};
ALIGNED(4) const u8 gUnknown_082F0480[] = {0x04, 0xff}; ALIGNED(4) const u8 sAcceptedActivityIds_Trade[] = {ACTIVITY_TRADE, 0xff};
ALIGNED(4) const u8 gUnknown_082F0484[] = {0x09, 0xff}; ALIGNED(4) const u8 sAcceptedActivityIds_PokemonJump[] = {ACTIVITY_POKEMON_JUMP, 0xff};
ALIGNED(4) const u8 gUnknown_082F0488[] = {0x0a, 0xff}; ALIGNED(4) const u8 sAcceptedActivityIds_BerryCrush[] = {ACTIVITY_BERRY_CRUSH, 0xff};
ALIGNED(4) const u8 gUnknown_082F048C[] = {0x0b, 0xff}; ALIGNED(4) const u8 sAcceptedActivityIds_BerryPicking[] = {ACTIVITY_BERRY_PICK, 0xff};
ALIGNED(4) const u8 gUnknown_082F0490[] = {0x15, 0xff}; ALIGNED(4) const u8 sAcceptedActivityIds_WonderCard[] = {ACTIVITY_WONDER_CARD2, 0xff};
ALIGNED(4) const u8 gUnknown_082F0494[] = {0x16, 0xff}; ALIGNED(4) const u8 sAcceptedActivityIds_WonderNews[] = {ACTIVITY_WONDER_NEWS2, 0xff};
ALIGNED(4) const u8 gUnknown_082F0498[] = {0x40, 0x41, 0x44, 0x45, 0x48, 0x51, 0x52, 0x53, 0x54, 0xff}; ALIGNED(4) const u8 sAcceptedActivityIds_Resume[] = {
ALIGNED(4) const u8 gUnknown_082F04A4[] = {0x0c, 0xff}; IN_UNION_ROOM | ACTIVITY_NONE,
ALIGNED(4) const u8 gUnknown_082F04A8[] = {0x01, 0x02, 0x03, 0x04, 0x09, 0x0a, 0x0b, 0x15, 0x16, 0x0d, 0xff}; IN_UNION_ROOM | ACTIVITY_BATTLE_SINGLE,
ALIGNED(4) const u8 gUnknown_082F04B4[] = {0x0f, 0xff}; IN_UNION_ROOM | ACTIVITY_TRADE,
ALIGNED(4) const u8 gUnknown_082F04B8[] = {0x10, 0xff}; IN_UNION_ROOM | ACTIVITY_CHAT,
ALIGNED(4) const u8 gUnknown_082F04BC[] = {0x17, 0xff}; IN_UNION_ROOM | ACTIVITY_CARD,
ALIGNED(4) const u8 gUnknown_082F04C0[] = {0x18, 0xff}; IN_UNION_ROOM | ACTIVITY_ACCEPT,
ALIGNED(4) const u8 gUnknown_082F04C4[] = {0x19, 0xff}; IN_UNION_ROOM | ACTIVITY_DECLINE,
ALIGNED(4) const u8 gUnknown_082F04C8[] = {0x1a, 0xff}; IN_UNION_ROOM | ACTIVITY_NPCTALK,
ALIGNED(4) const u8 gUnknown_082F04CC[] = {0x1b, 0xff}; IN_UNION_ROOM | ACTIVITY_PLYRTALK,
ALIGNED(4) const u8 gUnknown_082F04D0[] = {0x1c, 0xff}; 0xff
ALIGNED(4) const u8 gUnknown_082F04D4[] = {0x0e, 0xff}; };
ALIGNED(4) const u8 sAcceptedActivityIds_Init[] = {ACTIVITY_SEARCH, 0xff};
ALIGNED(4) const u8 sAcceptedActivityIds_Unk11[] = {
ACTIVITY_BATTLE_SINGLE,
ACTIVITY_BATTLE_DOUBLE,
ACTIVITY_BATTLE_MULTI,
ACTIVITY_TRADE,
ACTIVITY_POKEMON_JUMP,
ACTIVITY_BERRY_CRUSH,
ACTIVITY_BERRY_PICK,
ACTIVITY_WONDER_CARD2,
ACTIVITY_WONDER_NEWS2,
ACTIVITY_SPIN_TRADE,
0xff
};
ALIGNED(4) const u8 sAcceptedActivityIds_RecordCorner[] = {ACTIVITY_RECORD_CORNER, 0xff};
ALIGNED(4) const u8 sAcceptedActivityIds_BerryBlender[] = {ACTIVITY_BERRY_BLENDER, 0xff};
ALIGNED(4) const u8 sAcceptedActivityIds_CoolContest[] = {ACTIVITY_CONTEST_COOL, 0xff};
ALIGNED(4) const u8 sAcceptedActivityIds_BeautyContest[] = {ACTIVITY_CONTEST_BEAUTY, 0xff};
ALIGNED(4) const u8 sAcceptedActivityIds_CuteContest[] = {ACTIVITY_CONTEST_CUTE, 0xff};
ALIGNED(4) const u8 sAcceptedActivityIds_SmartContest[] = {ACTIVITY_CONTEST_SMART, 0xff};
ALIGNED(4) const u8 sAcceptedActivityIds_ToughContest[] = {ACTIVITY_CONTEST_TOUGH, 0xff};
ALIGNED(4) const u8 sAcceptedActivityIds_BattleTower[] = {ACTIVITY_BATTLE_TOWER, 0xff};
ALIGNED(4) const u8 sAcceptedActivityIds_BattleTowerOpen[] = {ACTIVITY_BATTLE_TOWER_OPEN, 0xff};
const u8 *const gUnknown_082F04D8[NUM_LINK_GROUP_TYPES] = { const u8 *const sAcceptedActivityIds[NUM_LINK_GROUP_TYPES] = {
gUnknown_082F0474, [LINK_GROUP_SINGLE_BATTLE] = sAcceptedActivityIds_SingleBattle,
gUnknown_082F0478, [LINK_GROUP_DOUBLE_BATTLE] = sAcceptedActivityIds_DoubleBattle,
gUnknown_082F047C, [LINK_GROUP_MULTI_BATTLE] = sAcceptedActivityIds_MultiBattle,
gUnknown_082F0480, [LINK_GROUP_TRADE] = sAcceptedActivityIds_Trade,
gUnknown_082F0484, [LINK_GROUP_POKEMON_JUMP] = sAcceptedActivityIds_PokemonJump,
gUnknown_082F0488, [LINK_GROUP_BERRY_CRUSH] = sAcceptedActivityIds_BerryCrush,
gUnknown_082F048C, [LINK_GROUP_BERRY_PICKING] = sAcceptedActivityIds_BerryPicking,
gUnknown_082F0490, [LINK_GROUP_WONDER_CARD] = sAcceptedActivityIds_WonderCard,
gUnknown_082F0494, [LINK_GROUP_WONDER_NEWS] = sAcceptedActivityIds_WonderNews,
gUnknown_082F0498, [LINK_GROUP_UNION_ROOM_RESUME] = sAcceptedActivityIds_Resume,
gUnknown_082F04A4, [LINK_GROUP_UNION_ROOM_INIT] = sAcceptedActivityIds_Init,
gUnknown_082F04A8, [LINK_GROUP_UNK_11] = sAcceptedActivityIds_Unk11,
gUnknown_082F04B4, [LINK_GROUP_RECORD_CORNER] = sAcceptedActivityIds_RecordCorner,
gUnknown_082F04B8, [LINK_GROUP_BERRY_BLENDER] = sAcceptedActivityIds_BerryBlender,
NULL, [LINK_GROUP_UNK_14] = NULL,
gUnknown_082F04BC, [LINK_GROUP_COOL_CONTEST] = sAcceptedActivityIds_CoolContest,
gUnknown_082F04C0, [LINK_GROUP_BEAUTY_CONTEST] = sAcceptedActivityIds_BeautyContest,
gUnknown_082F04C4, [LINK_GROUP_CUTE_CONTEST] = sAcceptedActivityIds_CuteContest,
gUnknown_082F04C8, [LINK_GROUP_SMART_CONTEST] = sAcceptedActivityIds_SmartContest,
gUnknown_082F04CC, [LINK_GROUP_TOUGH_CONTEST] = sAcceptedActivityIds_ToughContest,
gUnknown_082F04D0, [LINK_GROUP_BATTLE_TOWER] = sAcceptedActivityIds_BattleTower,
gUnknown_082F04D4 [LINK_GROUP_BATTLE_TOWER_OPEN] = sAcceptedActivityIds_BattleTowerOpen
}; };
// Link group type to ID for gUnknown_02022C2C static const u8 sLinkGroupToURoomActivity[NUM_LINK_GROUP_TYPES + 2] =
const u8 gUnknown_082F0530[NUM_LINK_GROUP_TYPES + 2] =
{ {
0x01, [LINK_GROUP_SINGLE_BATTLE] = ACTIVITY_BATTLE_SINGLE,
0x02, [LINK_GROUP_DOUBLE_BATTLE] = ACTIVITY_BATTLE_DOUBLE,
0x03, [LINK_GROUP_MULTI_BATTLE] = ACTIVITY_BATTLE_MULTI,
0x04, [LINK_GROUP_TRADE] = ACTIVITY_TRADE,
0x09, [LINK_GROUP_POKEMON_JUMP] = ACTIVITY_POKEMON_JUMP,
0x0a, [LINK_GROUP_BERRY_CRUSH] = ACTIVITY_BERRY_CRUSH,
0x0b, [LINK_GROUP_BERRY_PICKING] = ACTIVITY_BERRY_PICK,
0x15, [LINK_GROUP_WONDER_CARD] = ACTIVITY_WONDER_CARD2,
0x16, [LINK_GROUP_WONDER_NEWS] = ACTIVITY_WONDER_NEWS2,
0x00, [LINK_GROUP_UNION_ROOM_RESUME] = ACTIVITY_NONE,
0x00, [LINK_GROUP_UNION_ROOM_INIT] = ACTIVITY_NONE,
0x00, [LINK_GROUP_UNK_11] = ACTIVITY_NONE,
0x0f, [LINK_GROUP_RECORD_CORNER] = ACTIVITY_RECORD_CORNER,
0x10, [LINK_GROUP_BERRY_BLENDER] = ACTIVITY_BERRY_BLENDER,
0x00, [LINK_GROUP_UNK_14] = ACTIVITY_NONE,
0x17, [LINK_GROUP_COOL_CONTEST] = ACTIVITY_CONTEST_COOL,
0x18, [LINK_GROUP_BEAUTY_CONTEST] = ACTIVITY_CONTEST_BEAUTY,
0x19, [LINK_GROUP_CUTE_CONTEST] = ACTIVITY_CONTEST_CUTE,
0x1a, [LINK_GROUP_SMART_CONTEST] = ACTIVITY_CONTEST_SMART,
0x1b, [LINK_GROUP_TOUGH_CONTEST] = ACTIVITY_CONTEST_TOUGH,
0x1c, [LINK_GROUP_BATTLE_TOWER] = ACTIVITY_BATTLE_TOWER,
0x0e [LINK_GROUP_BATTLE_TOWER_OPEN] = ACTIVITY_BATTLE_TOWER_OPEN
}; };
+6 -6
View File
@@ -450,7 +450,7 @@ static void (*const gUnknown_082F7AF4[])(void) =
}; };
// code // code
void sub_802493C(u16 a0, void (*callback)(void)) void StartDodrioBerryPicking(u16 a0, void (*callback)(void))
{ {
gUnknown_03000DB0 = FALSE; gUnknown_03000DB0 = FALSE;
@@ -832,9 +832,9 @@ static void sub_8025158(void)
static bool32 sub_8025170(void) static bool32 sub_8025170(void)
{ {
u8 r4 = GetBlockReceivedStatus(); u8 recvStatus = GetBlockReceivedStatus();
u8 r0 = sub_800A9D8(); u8 playerFlags = GetLinkPlayerCountAsBitFlags();
if (r4 == r0) if (recvStatus == playerFlags)
{ {
ResetBlockReceivedFlags(); ResetBlockReceivedFlags();
return TRUE; return TRUE;
@@ -4483,12 +4483,12 @@ static void sub_802A380(void)
case 2: case 2:
if (!IsDma3ManagerBusyWithBgCopy()) if (!IsDma3ManagerBusyWithBgCopy())
{ {
CreateTask(sub_8153688, 0); CreateTask(Task_LinkSave, 0);
gUnknown_02022CF8->state++; gUnknown_02022CF8->state++;
} }
break; break;
case 3: case 3:
if (!FuncIsActiveTask(sub_8153688)) if (!FuncIsActiveTask(Task_LinkSave))
gUnknown_02022CF8->state++; gUnknown_02022CF8->state++;
break; break;
default: default:
+6 -6
View File
@@ -85,10 +85,10 @@ static u8 sub_81D4DE8(struct Unk03006370 *arg0)
return var0; return var0;
} }
static void sub_81D4E30(void) static void OpenEReaderLink(void)
{ {
memset(gDecompressionBuffer, 0, 0x2000); memset(gDecompressionBuffer, 0, 0x2000);
gLinkType = LINKTYPE_0x5503; gLinkType = LINKTYPE_EREADER;
OpenLink(); OpenLink();
SetSuppressLinkErrorMessage(TRUE); SetSuppressLinkErrorMessage(TRUE);
} }
@@ -255,7 +255,7 @@ static void sub_81D5084(u8 taskId)
data->unk8 = 1; data->unk8 = 1;
break; break;
case 1: case 1:
sub_81D4E30(); OpenEReaderLink();
sub_81D505C(&data->unk0); sub_81D505C(&data->unk0);
data->unk8 = 2; data->unk8 = 2;
break; break;
@@ -285,7 +285,7 @@ static void sub_81D5084(u8 taskId)
case 5: case 5:
if (sub_81D5064(&data->unk0, 90)) if (sub_81D5064(&data->unk0, 90))
{ {
sub_81D4E30(); OpenEReaderLink();
data->unk8 = 6; data->unk8 = 6;
} }
else if (gMain.newKeys & B_BUTTON) else if (gMain.newKeys & B_BUTTON)
@@ -319,7 +319,7 @@ static void sub_81D5084(u8 taskId)
else if (sub_81D5064(&data->unk0, 10)) else if (sub_81D5064(&data->unk0, 10))
{ {
CloseLink(); CloseLink();
sub_81D4E30(); OpenEReaderLink();
sub_81D505C(&data->unk0); sub_81D505C(&data->unk0);
} }
break; break;
@@ -360,7 +360,7 @@ static void sub_81D5084(u8 taskId)
data->unk8 = 12; data->unk8 = 12;
break; break;
case 12: case 12:
sub_81D4E30(); OpenEReaderLink();
AddTextPrinterToWindow1(gJPText_AllowEReaderToLoadCard); AddTextPrinterToWindow1(gJPText_AllowEReaderToLoadCard);
data->unk8 = 13; data->unk8 = 13;
break; break;
+1 -1
View File
@@ -96,7 +96,7 @@ void ScriptUnfreezeObjectEvents(void)
UnfreezeObjectEvents(); UnfreezeObjectEvents();
} }
void sub_8098524(void) void UnionRoom_UnlockPlayerAndChatPartner(void)
{ {
u8 playerObjectId; u8 playerObjectId;
+76 -67
View File
@@ -28,6 +28,7 @@
#include "constants/items.h" #include "constants/items.h"
#include "constants/mauville_old_man.h" #include "constants/mauville_old_man.h"
#include "constants/trainer_types.h" #include "constants/trainer_types.h"
#include "constants/union_room.h"
// this file was known as evobjmv.c in Game Freak's original source // this file was known as evobjmv.c in Game Freak's original source
@@ -97,7 +98,7 @@ static void DoRippleFieldEffect(struct ObjectEvent*, struct Sprite*);
static void DoGroundEffects_OnSpawn(struct ObjectEvent*, struct Sprite*); static void DoGroundEffects_OnSpawn(struct ObjectEvent*, struct Sprite*);
static void DoGroundEffects_OnBeginStep(struct ObjectEvent*, struct Sprite*); static void DoGroundEffects_OnBeginStep(struct ObjectEvent*, struct Sprite*);
static void DoGroundEffects_OnFinishStep(struct ObjectEvent*, struct Sprite*); static void DoGroundEffects_OnFinishStep(struct ObjectEvent*, struct Sprite*);
static void sub_8097D68(struct Sprite*); static void UpdateObjectEventSpritePosition(struct Sprite*);
static void ApplyLevitateMovement(u8); static void ApplyLevitateMovement(u8);
static bool8 MovementType_Disguise_Callback(struct ObjectEvent *, struct Sprite *); static bool8 MovementType_Disguise_Callback(struct ObjectEvent *, struct Sprite *);
static bool8 MovementType_Hidden_Callback(struct ObjectEvent *, struct Sprite *); static bool8 MovementType_Hidden_Callback(struct ObjectEvent *, struct Sprite *);
@@ -129,7 +130,7 @@ static struct ObjectEventTemplate *FindObjectEventTemplateByLocalId(u8 localId,
static void ClearObjectEventMovement(struct ObjectEvent *, struct Sprite *); static void ClearObjectEventMovement(struct ObjectEvent *, struct Sprite *);
static void ObjectEventSetSingleMovement(struct ObjectEvent *, struct Sprite *, u8); static void ObjectEventSetSingleMovement(struct ObjectEvent *, struct Sprite *, u8);
static void oamt_npc_ministep_reset(struct Sprite *, u8, u8); static void oamt_npc_ministep_reset(struct Sprite *, u8, u8);
static void UpdateObjectEventSpriteSubpriorityAndVisibility(struct Sprite *); static void UpdateObjectEventSprite(struct Sprite *);
const u8 gReflectionEffectPaletteMap[] = {1, 1, 6, 7, 8, 9, 6, 7, 8, 9, 11, 11, 0, 0, 0, 0}; const u8 gReflectionEffectPaletteMap[] = {1, 1, 6, 7, 8, 9, 6, 7, 8, 9, 11, 11, 0, 0, 0, 0};
@@ -1522,7 +1523,9 @@ u8 AddPseudoObjectEvent(u16 graphicsId, void (*callback)(struct Sprite *), s16 x
return spriteId; return spriteId;
} }
u8 sprite_new(u8 graphicsId, u8 a1, s16 x, s16 y, u8 z, u8 direction) // Used to create sprite object events instead of a full object event
// Used when resources are limiting, e.g. for the audience in contests or group members in Union Room
u8 CreateObjectSprite(u8 graphicsId, u8 a1, s16 x, s16 y, u8 z, u8 direction)
{ {
u8 spriteId; u8 spriteId;
struct Sprite *sprite; struct Sprite *sprite;
@@ -1531,11 +1534,11 @@ u8 sprite_new(u8 graphicsId, u8 a1, s16 x, s16 y, u8 z, u8 direction)
const struct ObjectEventGraphicsInfo *graphicsInfo; const struct ObjectEventGraphicsInfo *graphicsInfo;
graphicsInfo = GetObjectEventGraphicsInfo(graphicsId); graphicsInfo = GetObjectEventGraphicsInfo(graphicsId);
MakeObjectTemplateFromObjectEventGraphicsInfo(graphicsId, UpdateObjectEventSpriteSubpriorityAndVisibility, &spriteTemplate, &subspriteTables); MakeObjectTemplateFromObjectEventGraphicsInfo(graphicsId, UpdateObjectEventSprite, &spriteTemplate, &subspriteTables);
*(u16 *)&spriteTemplate.paletteTag = 0xFFFF; *(u16 *)&spriteTemplate.paletteTag = 0xFFFF;
x += 7; x += 7;
y += 7; y += 7;
sub_80930E0(&x, &y, 8, 16); SetSpritePosToOffsetMapCoords(&x, &y, 8, 16);
spriteId = CreateSpriteAtEnd(&spriteTemplate, x, y, 0); spriteId = CreateSpriteAtEnd(&spriteTemplate, x, y, 0);
if (spriteId != MAX_SPRITES) if (spriteId != MAX_SPRITES)
{ {
@@ -2363,7 +2366,8 @@ static u8 GetObjectTrainerTypeByObjectEventId(u8 objectEventId)
return gObjectEvents[objectEventId].trainerType; return gObjectEvents[objectEventId].trainerType;
} }
u8 sub_808F0D4(u8 localId, u8 mapNum, u8 mapGroup) // Unused
u8 GetObjectEventBerryTreeIdByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup)
{ {
u8 objectEventId; u8 objectEventId;
@@ -2374,7 +2378,7 @@ u8 sub_808F0D4(u8 localId, u8 mapNum, u8 mapGroup)
return gObjectEvents[objectEventId].trainerRange_berryTreeId; return gObjectEvents[objectEventId].trainerRange_berryTreeId;
} }
u8 ObjectEventGetBerryTreeId(u8 objectEventId) u8 GetObjectEventBerryTreeId(u8 objectEventId)
{ {
return gObjectEvents[objectEventId].trainerRange_berryTreeId; return gObjectEvents[objectEventId].trainerRange_berryTreeId;
} }
@@ -4864,22 +4868,22 @@ void SetSpritePosToMapCoords(s16 mapX, s16 mapY, s16 *destX, s16 *destY)
s16 dx = -gTotalCameraPixelOffsetX - gFieldCamera.x; s16 dx = -gTotalCameraPixelOffsetX - gFieldCamera.x;
s16 dy = -gTotalCameraPixelOffsetY - gFieldCamera.y; s16 dy = -gTotalCameraPixelOffsetY - gFieldCamera.y;
if (gFieldCamera.x > 0) if (gFieldCamera.x > 0)
dx += 1 << 4; dx += 16;
if (gFieldCamera.x < 0) if (gFieldCamera.x < 0)
dx -= 1 << 4; dx -= 16;
if (gFieldCamera.y > 0) if (gFieldCamera.y > 0)
dy += 1 << 4; dy += 16;
if (gFieldCamera.y < 0) if (gFieldCamera.y < 0)
dy -= 1 << 4; dy -= 16;
*destX = ((mapX - gSaveBlock1Ptr->pos.x) << 4) + dx; *destX = ((mapX - gSaveBlock1Ptr->pos.x) << 4) + dx;
*destY = ((mapY - gSaveBlock1Ptr->pos.y) << 4) + dy; *destY = ((mapY - gSaveBlock1Ptr->pos.y) << 4) + dy;
} }
void sub_80930E0(s16 *x, s16 *y, s16 dx, s16 dy) void SetSpritePosToOffsetMapCoords(s16 *x, s16 *y, s16 dx, s16 dy)
{ {
SetSpritePosToMapCoords(*x, *y, x, y); SetSpritePosToMapCoords(*x, *y, x, y);
*x += dx; *x += dx;
@@ -8630,51 +8634,56 @@ void UpdateObjectEventSpriteVisibility(struct Sprite *sprite, bool8 invisible)
sprite->invisible = TRUE; sprite->invisible = TRUE;
} }
static void UpdateObjectEventSpriteSubpriorityAndVisibility(struct Sprite *sprite) #define tInvisible data[2]
#define tAnimNum data[3]
#define tAnimState data[4]
static void UpdateObjectEventSprite(struct Sprite *sprite)
{ {
sub_8097D68(sprite); UpdateObjectEventSpritePosition(sprite);
SetObjectSubpriorityByZCoord(sprite->data[1], sprite, 1); SetObjectSubpriorityByZCoord(sprite->data[1], sprite, 1);
UpdateObjectEventSpriteVisibility(sprite, sprite->data[2]); UpdateObjectEventSpriteVisibility(sprite, sprite->tInvisible);
} }
void sub_8097AF0(void) // Unused
static void DestroyObjectEventSprites(void)
{ {
int i; int i;
for(i = 0; i < MAX_SPRITES; i++) for (i = 0; i < MAX_SPRITES; i++)
{ {
struct Sprite *sprite = &gSprites[i]; struct Sprite *sprite = &gSprites[i];
if(sprite->inUse && sprite->callback == UpdateObjectEventSpriteSubpriorityAndVisibility) if(sprite->inUse && sprite->callback == UpdateObjectEventSprite)
DestroySprite(sprite); DestroySprite(sprite);
} }
} }
int sub_8097B2C(u8 var) // this should return a u8, because all that call this shifts to u8, but it wont match because it doesnt shift u8 at the end. static int GetObjectEventSpriteId(u8 var) // this should return a u8, because all that call this shifts to u8, but it wont match because it doesnt shift u8 at the end.
{ {
int i; int i;
for(i = 0; i < MAX_SPRITES; i++) for (i = 0; i < MAX_SPRITES; i++)
{ {
struct Sprite *sprite = &gSprites[i]; struct Sprite *sprite = &gSprites[i];
if(sprite->inUse && sprite->callback == UpdateObjectEventSpriteSubpriorityAndVisibility && (u8)sprite->data[0] == var) if(sprite->inUse && sprite->callback == UpdateObjectEventSprite && (u8)sprite->data[0] == var)
return i; return i;
} }
return MAX_SPRITES; return MAX_SPRITES;
} }
void sub_8097B78(u8 var1, u8 var2) void TurnObjectEventSprite(u8 objectEventId, u8 direction)
{ {
u8 spriteId = sub_8097B2C(var1); u8 spriteId = GetObjectEventSpriteId(objectEventId);
if(spriteId != MAX_SPRITES) if (spriteId != MAX_SPRITES)
StartSpriteAnim(&gSprites[spriteId], GetFaceDirectionAnimNum(var2)); StartSpriteAnim(&gSprites[spriteId], GetFaceDirectionAnimNum(direction));
} }
void sub_8097BB4(u8 var1, u8 graphicsId) void SetObjectEventSpriteGraphics(u8 objectEventId, u8 graphicsId)
{ {
int spriteId = sub_8097B2C(var1); int spriteId = GetObjectEventSpriteId(objectEventId);
if(spriteId != MAX_SPRITES) if (spriteId != MAX_SPRITES)
{ {
struct Sprite *sprite = &gSprites[spriteId]; struct Sprite *sprite = &gSprites[spriteId];
const struct ObjectEventGraphicsInfo *graphicsInfo = GetObjectEventGraphicsInfo(graphicsId); const struct ObjectEventGraphicsInfo *graphicsInfo = GetObjectEventGraphicsInfo(graphicsId);
@@ -8685,7 +8694,7 @@ void sub_8097BB4(u8 var1, u8 graphicsId)
sprite->oam.paletteNum = graphicsInfo->paletteSlot; sprite->oam.paletteNum = graphicsInfo->paletteSlot;
sprite->images = graphicsInfo->images; sprite->images = graphicsInfo->images;
if(graphicsInfo->subspriteTables == NULL) if (graphicsInfo->subspriteTables == NULL)
{ {
sprite->subspriteTables = NULL; sprite->subspriteTables = NULL;
sprite->subspriteTableNum = 0; sprite->subspriteTableNum = 0;
@@ -8700,102 +8709,102 @@ void sub_8097BB4(u8 var1, u8 graphicsId)
} }
} }
void sub_8097C44(u8 var, bool32 var2) void SetObjectEventSpriteInvisibility(u8 objectEventId, bool32 invisible)
{ {
u8 spriteId = sub_8097B2C(var); u8 spriteId = GetObjectEventSpriteId(objectEventId);
if(spriteId == MAX_SPRITES) if (spriteId == MAX_SPRITES)
return; return;
if(var2) if (invisible)
gSprites[spriteId].data[2] = 1; gSprites[spriteId].tInvisible = TRUE;
else else
gSprites[spriteId].data[2] = 0; gSprites[spriteId].tInvisible = FALSE;
} }
bool32 sub_8097C8C(u8 var) bool32 IsObjectEventSpriteInvisible(u8 objectEventId)
{ {
u8 spriteId = sub_8097B2C(var); u8 spriteId = GetObjectEventSpriteId(objectEventId);
if(spriteId == MAX_SPRITES) if (spriteId == MAX_SPRITES)
return FALSE; return FALSE;
return (gSprites[spriteId].data[2] == TRUE); return (gSprites[spriteId].tInvisible == TRUE);
} }
void sub_8097CC4(u8 var1, u8 var2) void SetObjectEventSpriteAnim(u8 objectEventId, u8 animNum)
{ {
u8 spriteId = sub_8097B2C(var1); u8 spriteId = GetObjectEventSpriteId(objectEventId);
if(spriteId != MAX_SPRITES) if (spriteId != MAX_SPRITES)
{ {
gSprites[spriteId].data[3] = var2; gSprites[spriteId].tAnimNum = animNum;
gSprites[spriteId].data[4] = 0; gSprites[spriteId].tAnimState = 0;
} }
} }
void sub_8097CF4(struct Sprite *sprite) static void MoveUnionRoomObjectUp(struct Sprite *sprite)
{ {
switch(sprite->data[4]) switch(sprite->tAnimState)
{ {
case 0: case 0:
sprite->pos2.y = 0; sprite->pos2.y = 0;
sprite->data[4]++; sprite->tAnimState++;
case 1: case 1:
sprite->pos2.y -= 8; sprite->pos2.y -= 8;
if(sprite->pos2.y == -160) if (sprite->pos2.y == -160)
{ {
sprite->pos2.y = 0; sprite->pos2.y = 0;
sprite->data[2] = 1; sprite->tInvisible = TRUE;
sprite->data[3] = 0; sprite->tAnimNum = 0;
sprite->data[4] = 0; sprite->tAnimState = 0;
} }
} }
} }
void sub_8097D30(struct Sprite *sprite) static void MoveUnionRoomObjectDown(struct Sprite *sprite)
{ {
switch(sprite->data[4]) switch(sprite->tAnimState)
{ {
case 0: case 0:
sprite->pos2.y = -160; sprite->pos2.y = -160;
sprite->data[4]++; sprite->tAnimState++;
case 1: case 1:
sprite->pos2.y += 8; sprite->pos2.y += 8;
if(sprite->pos2.y == 0) if(sprite->pos2.y == 0)
{ {
sprite->data[3] = 0; sprite->tAnimNum = 0;
sprite->data[4] = 0; sprite->tAnimState = 0;
} }
} }
} }
static void sub_8097D68(struct Sprite *sprite) static void UpdateObjectEventSpritePosition(struct Sprite *sprite)
{ {
switch(sprite->data[3]) switch(sprite->tAnimNum)
{ {
case 1: case UNION_ROOM_SPAWN_IN:
sub_8097D30(sprite); MoveUnionRoomObjectDown(sprite);
break; break;
case 2: case UNION_ROOM_SPAWN_OUT:
sub_8097CF4(sprite); MoveUnionRoomObjectUp(sprite);
break; break;
case 0: case 0:
break; break;
default: default:
sprite->data[3] = 0; sprite->tAnimNum = 0;
break; break;
} }
} }
bool32 sub_8097D9C(u8 var) bool32 IsObjectEventSpriteAnimating(u8 var)
{ {
u8 spriteId = sub_8097B2C(var); u8 spriteId = GetObjectEventSpriteId(var);
if(spriteId == MAX_SPRITES) if (spriteId == MAX_SPRITES)
return FALSE; return FALSE;
if(gSprites[spriteId].data[3] != FALSE) if (gSprites[spriteId].tAnimNum != 0)
return TRUE; return TRUE;
return FALSE; return FALSE;
+1 -1
View File
@@ -378,7 +378,7 @@ void sub_81D4A90(void)
x = mew->currentCoords.x; x = mew->currentCoords.x;
y = mew->currentCoords.y; y = mew->currentCoords.y;
sub_80930E0(&x, &y, 8, 8); SetSpritePosToOffsetMapCoords(&x, &y, 8, 8);
sUnknown_0203CF50 = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[15], x, y, gSprites[mew->spriteId].subpriority - 1); sUnknown_0203CF50 = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[15], x, y, gSprites[mew->spriteId].subpriority - 1);
if (sUnknown_0203CF50 != MAX_SPRITES) if (sUnknown_0203CF50 != MAX_SPRITES)
{ {
+2 -2
View File
@@ -2043,7 +2043,7 @@ static bool8 LavaridgeGymB1FWarpExitEffect_4(struct Task *task, struct ObjectEve
u8 FldEff_LavaridgeGymWarp(void) u8 FldEff_LavaridgeGymWarp(void)
{ {
u8 spriteId; u8 spriteId;
sub_80930E0((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8); SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[33], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[33], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
gSprites[spriteId].oam.priority = gFieldEffectArguments[3]; gSprites[spriteId].oam.priority = gFieldEffectArguments[3];
gSprites[spriteId].coordOffsetEnabled = 1; gSprites[spriteId].coordOffsetEnabled = 1;
@@ -2136,7 +2136,7 @@ static bool8 LavaridgeGym1FWarpEffect_5(struct Task *task, struct ObjectEvent *o
u8 FldEff_PopOutOfAsh(void) u8 FldEff_PopOutOfAsh(void)
{ {
u8 spriteId; u8 spriteId;
sub_80930E0((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8); SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[32], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[32], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
gSprites[spriteId].oam.priority = gFieldEffectArguments[3]; gSprites[spriteId].oam.priority = gFieldEffectArguments[3];
gSprites[spriteId].coordOffsetEnabled = 1; gSprites[spriteId].coordOffsetEnabled = 1;
+19 -19
View File
@@ -274,7 +274,7 @@ u32 FldEff_TallGrass(void)
x = gFieldEffectArguments[0]; x = gFieldEffectArguments[0];
y = gFieldEffectArguments[1]; y = gFieldEffectArguments[1];
sub_80930E0(&x, &y, 8, 8); SetSpritePosToOffsetMapCoords(&x, &y, 8, 8);
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[4], x, y, 0); spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[4], x, y, 0);
if (spriteId != MAX_SPRITES) if (spriteId != MAX_SPRITES)
{ {
@@ -340,7 +340,7 @@ u32 FldEff_JumpTallGrass(void)
u8 spriteId; u8 spriteId;
struct Sprite *sprite; struct Sprite *sprite;
sub_80930E0((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 12); SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 12);
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[10], gFieldEffectArguments[0], gFieldEffectArguments[1], 0); spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[10], gFieldEffectArguments[0], gFieldEffectArguments[1], 0);
if (spriteId != MAX_SPRITES) if (spriteId != MAX_SPRITES)
{ {
@@ -380,7 +380,7 @@ u32 FldEff_LongGrass(void)
x = gFieldEffectArguments[0]; x = gFieldEffectArguments[0];
y = gFieldEffectArguments[1]; y = gFieldEffectArguments[1];
sub_80930E0(&x, &y, 8, 8); SetSpritePosToOffsetMapCoords(&x, &y, 8, 8);
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[15], x, y, 0); spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[15], x, y, 0);
if (spriteId != MAX_SPRITES) if (spriteId != MAX_SPRITES)
{ {
@@ -443,7 +443,7 @@ u32 FldEff_JumpLongGrass(void)
u8 spriteId; u8 spriteId;
struct Sprite *sprite; struct Sprite *sprite;
sub_80930E0((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8); SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[16], gFieldEffectArguments[0], gFieldEffectArguments[1], 0); spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[16], gFieldEffectArguments[0], gFieldEffectArguments[1], 0);
if (spriteId != MAX_SPRITES) if (spriteId != MAX_SPRITES)
{ {
@@ -521,7 +521,7 @@ u32 FldEff_SandFootprints(void)
u8 spriteId; u8 spriteId;
struct Sprite *sprite; struct Sprite *sprite;
sub_80930E0((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8); SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[11], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[11], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
if (spriteId != MAX_SPRITES) if (spriteId != MAX_SPRITES)
{ {
@@ -539,7 +539,7 @@ u32 FldEff_DeepSandFootprints(void)
u8 spriteId; u8 spriteId;
struct Sprite *sprite; struct Sprite *sprite;
sub_80930E0((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8); SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[23], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[23], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
if (spriteId != MAX_SPRITES) if (spriteId != MAX_SPRITES)
{ {
@@ -557,7 +557,7 @@ u32 FldEff_BikeTireTracks(void)
u8 spriteId; u8 spriteId;
struct Sprite *sprite; struct Sprite *sprite;
sub_80930E0((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8); SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[27], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[27], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
if (spriteId != MAX_SPRITES) if (spriteId != MAX_SPRITES)
{ {
@@ -649,7 +649,7 @@ u32 FldEff_JumpSmallSplash(void)
u8 spriteId; u8 spriteId;
struct Sprite *sprite; struct Sprite *sprite;
sub_80930E0((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 12); SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 12);
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[14], gFieldEffectArguments[0], gFieldEffectArguments[1], 0); spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[14], gFieldEffectArguments[0], gFieldEffectArguments[1], 0);
if (spriteId != MAX_SPRITES) if (spriteId != MAX_SPRITES)
{ {
@@ -667,7 +667,7 @@ u32 FldEff_JumpBigSplash(void)
u8 spriteId; u8 spriteId;
struct Sprite *sprite; struct Sprite *sprite;
sub_80930E0((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8); SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[12], gFieldEffectArguments[0], gFieldEffectArguments[1], 0); spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[12], gFieldEffectArguments[0], gFieldEffectArguments[1], 0);
if (spriteId != MAX_SPRITES) if (spriteId != MAX_SPRITES)
{ {
@@ -805,7 +805,7 @@ u32 FldEff_Unknown19(void)
u8 spriteId; u8 spriteId;
struct Sprite *sprite; struct Sprite *sprite;
sub_80930E0((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8); SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[17], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[17], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
if (spriteId != MAX_SPRITES) if (spriteId != MAX_SPRITES)
{ {
@@ -822,7 +822,7 @@ u32 FldEff_Unknown20(void)
u8 spriteId; u8 spriteId;
struct Sprite *sprite; struct Sprite *sprite;
sub_80930E0((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8); SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[18], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[18], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
if (spriteId != MAX_SPRITES) if (spriteId != MAX_SPRITES)
{ {
@@ -839,7 +839,7 @@ u32 FldEff_Unknown21(void)
u8 spriteId; u8 spriteId;
struct Sprite *sprite; struct Sprite *sprite;
sub_80930E0((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8); SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[19], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[19], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
if (spriteId != MAX_SPRITES) if (spriteId != MAX_SPRITES)
{ {
@@ -856,7 +856,7 @@ u32 FldEff_Unknown22(void)
u8 spriteId; u8 spriteId;
struct Sprite *sprite; struct Sprite *sprite;
sub_80930E0((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8); SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[20], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[20], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
if (spriteId != MAX_SPRITES) if (spriteId != MAX_SPRITES)
{ {
@@ -888,7 +888,7 @@ u32 FldEff_Ash(void)
x = gFieldEffectArguments[0]; x = gFieldEffectArguments[0];
y = gFieldEffectArguments[1]; y = gFieldEffectArguments[1];
sub_80930E0(&x, &y, 8, 8); SetSpritePosToOffsetMapCoords(&x, &y, 8, 8);
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[6], x, y, gFieldEffectArguments[2]); spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[6], x, y, gFieldEffectArguments[2]);
if (spriteId != MAX_SPRITES) if (spriteId != MAX_SPRITES)
{ {
@@ -944,7 +944,7 @@ u32 FldEff_SurfBlob(void)
u8 spriteId; u8 spriteId;
struct Sprite *sprite; struct Sprite *sprite;
sub_80930E0((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8); SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[7], gFieldEffectArguments[0], gFieldEffectArguments[1], 0x96); spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[7], gFieldEffectArguments[0], gFieldEffectArguments[1], 0x96);
if (spriteId !=MAX_SPRITES) if (spriteId !=MAX_SPRITES)
{ {
@@ -1106,7 +1106,7 @@ u32 FldEff_Dust(void)
u8 spriteId; u8 spriteId;
struct Sprite *sprite; struct Sprite *sprite;
sub_80930E0((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 12); SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 12);
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[9], gFieldEffectArguments[0], gFieldEffectArguments[1], 0); spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[9], gFieldEffectArguments[0], gFieldEffectArguments[1], 0);
if (spriteId != MAX_SPRITES) if (spriteId != MAX_SPRITES)
{ {
@@ -1182,7 +1182,7 @@ u32 FldEff_Bubbles(void)
u8 spriteId; u8 spriteId;
struct Sprite *sprite; struct Sprite *sprite;
sub_80930E0((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 0); SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 0);
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[34], gFieldEffectArguments[0], gFieldEffectArguments[1], 0x52); spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[34], gFieldEffectArguments[0], gFieldEffectArguments[1], 0x52);
if (spriteId != MAX_SPRITES) if (spriteId != MAX_SPRITES)
{ {
@@ -1210,7 +1210,7 @@ u32 FldEff_BerryTreeGrowthSparkle(void)
u8 spriteId; u8 spriteId;
struct Sprite *sprite; struct Sprite *sprite;
sub_80930E0((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 4); SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 4);
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[22], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[22], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
if (spriteId != MAX_SPRITES) if (spriteId != MAX_SPRITES)
{ {
@@ -1330,7 +1330,7 @@ u32 FldEff_Sparkle(void)
gFieldEffectArguments[0] += 7; gFieldEffectArguments[0] += 7;
gFieldEffectArguments[1] += 7; gFieldEffectArguments[1] += 7;
sub_80930E0((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8); SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[35], gFieldEffectArguments[0], gFieldEffectArguments[1], 0x52); spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[35], gFieldEffectArguments[0], gFieldEffectArguments[1], 0x52);
if (spriteId != MAX_SPRITES) if (spriteId != MAX_SPRITES)
{ {
+4 -4
View File
@@ -162,7 +162,7 @@ static void Task_ReturnToFieldCableLink(u8 taskId)
switch (task->data[0]) switch (task->data[0])
{ {
case 0: case 0:
task->data[1] = sub_80B3050(); task->data[1] = CreateTask_ReestablishCableClubLink();
task->data[0]++; task->data[0]++;
break; break;
case 1: case 1:
@@ -204,7 +204,7 @@ static void Task_ReturnToFieldWirelessLink(u8 taskId)
if (!IsLinkTaskFinished()) if (!IsLinkTaskFinished())
{ {
if (++task->data[1] > 1800) if (++task->data[1] > 1800)
sub_8011170(0x6000); GetLinkmanErrorParams(0x6000);
} }
else else
{ {
@@ -215,7 +215,7 @@ static void Task_ReturnToFieldWirelessLink(u8 taskId)
case 2: case 2:
if (WaitForWeatherFadeIn() == TRUE) if (WaitForWeatherFadeIn() == TRUE)
{ {
sub_8009F18(); StartSendingKeysToLink();
ScriptContext2_Disable(); ScriptContext2_Disable();
DestroyTask(taskId); DestroyTask(taskId);
} }
@@ -240,7 +240,7 @@ void Task_ReturnToFieldRecordMixing(u8 taskId)
} }
break; break;
case 2: case 2:
sub_8009F18(); StartSendingKeysToLink();
ResetAllMultiplayerState(); ResetAllMultiplayerState();
ScriptContext2_Disable(); ScriptContext2_Disable();
DestroyTask(taskId); DestroyTask(taskId);
+2 -2
View File
@@ -924,11 +924,11 @@ void GetCameraCoords(u16 *x, u16 *y)
*y = gSaveBlock1Ptr->pos.y; *y = gSaveBlock1Ptr->pos.y;
} }
void sub_8088B94(int x, int y, int a2) void MapGridSetMetatileImpassabilityAt(int x, int y, bool32 impassable)
{ {
if (x >= 0 && x < gBackupMapLayout.width && y >= 0 && y < gBackupMapLayout.height) if (x >= 0 && x < gBackupMapLayout.width && y >= 0 && y < gBackupMapLayout.height)
{ {
if (a2 != 0) if (impassable)
gBackupMapLayout.map[x + gBackupMapLayout.width * y] |= METATILE_COLLISION_MASK; gBackupMapLayout.map[x + gBackupMapLayout.width * y] |= METATILE_COLLISION_MASK;
else else
gBackupMapLayout.map[x + gBackupMapLayout.width * y] &= ~METATILE_COLLISION_MASK; gBackupMapLayout.map[x + gBackupMapLayout.width * y] &= ~METATILE_COLLISION_MASK;
+1 -1
View File
@@ -1008,7 +1008,7 @@ void DoSecretBaseGlitterMatSparkle(void)
s16 y = gObjectEvents[gPlayerAvatar.objectEventId].currentCoords.y; s16 y = gObjectEvents[gPlayerAvatar.objectEventId].currentCoords.y;
u8 spriteId; u8 spriteId;
sub_80930E0(&x, &y, 8, 4); SetSpritePosToOffsetMapCoords(&x, &y, 8, 4);
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[22], x, y, 0); spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[22], x, y, 0);
if (spriteId != MAX_SPRITES) if (spriteId != MAX_SPRITES)
+9 -13
View File
@@ -1447,19 +1447,15 @@ const u32 gUnknown_08DD4620[] = INCBIN_U32("graphics/unknown/unknown_DD4620.bin.
const u32 gUnknown_08DD46E0[] = INCBIN_U32("graphics/unknown/unknown_DD46E0.bin.lz"); const u32 gUnknown_08DD46E0[] = INCBIN_U32("graphics/unknown/unknown_DD46E0.bin.lz");
const u32 gUnknown_08DD47A0[] = INCBIN_U32("graphics/unknown/unknown_DD47A0.bin.lz"); const u32 gUnknown_08DD47A0[] = INCBIN_U32("graphics/unknown/unknown_DD47A0.bin.lz");
// link // union room chat
const u16 gUnionRoomChat_Background_Pal[] = INCBIN_U16("graphics/union_room_chat/background.gbapal");
const u16 gLinkMiscMenu_Pal[] = INCBIN_U16("graphics/link/misc.gbapal"); const u32 gUnionRoomChat_Background_Gfx[] = INCBIN_U32("graphics/union_room_chat/background.4bpp.lz");
const u32 gLinkMiscMenu_Gfx[] = INCBIN_U32("graphics/link/misc.4bpp.lz"); const u32 gUnionRoomChat_Background_Tilemap[] = INCBIN_U32("graphics/union_room_chat/background.bin.lz");
const u32 gLinkMiscMenu_Tilemap[] = INCBIN_U32("graphics/link/misc.bin.lz"); const u16 gUnionRoomChat_Window_Pal1[] = INCBIN_U16("graphics/union_room_chat/window_1.gbapal");
const u16 gUnionRoomChat_Window_Pal2[] = INCBIN_U16("graphics/union_room_chat/window_2.gbapal");
const u16 gUnknown_08DD4BB0[] = INCBIN_U16("graphics/link/link1.gbapal"); const u32 gUnionRoomChat_Border_Gfx[] = INCBIN_U32("graphics/union_room_chat/border.4bpp.lz");
const u16 gUnknown_08DD4BD0[] = INCBIN_U16("graphics/link/link2.gbapal"); const u32 gUnionRoomChat_Border_Tilemap[] = INCBIN_U32("graphics/union_room_chat/border.bin.lz");
const u32 gUnionRoomChat_RButtonLabels[] = INCBIN_U32("graphics/union_room_chat/r_button_labels.4bpp.lz");
const u32 gUnknown_08DD4BF0[] = INCBIN_U32("graphics/link/link_winedge.4bpp.lz");
const u32 gUnknown_08DD4C4C[] = INCBIN_U32("graphics/link/link_winedge.bin.lz");
const u32 gUnknown_08DD4CF8[] = INCBIN_U32("graphics/interface/unk_change_case.4bpp.lz");
const u16 gTilesetPalettes_General[][16] = const u16 gTilesetPalettes_General[][16] =
{ {
+1 -1
View File
@@ -2359,7 +2359,7 @@ void SetupBagMenu_Textboxes(void)
DeactivateAllTextPrinters(); DeactivateAllTextPrinters();
LoadUserWindowBorderGfx(0, 1, 0xE0); LoadUserWindowBorderGfx(0, 1, 0xE0);
LoadMessageBoxGfx(0, 10, 0xD0); LoadMessageBoxGfx(0, 10, 0xD0);
sub_819A2BC(0xC0, 1); ListMenuLoadStdPalAt(0xC0, 1);
LoadPalette(&gUnknown_0860F074, 0xF0, 0x20); LoadPalette(&gUnknown_0860F074, 0xF0, 0x20);
for (i = 0; i < 3; i++) for (i = 0; i < 3; i++)
{ {
+2 -2
View File
@@ -488,7 +488,7 @@ static void rfu_CB_configGameData(u8 reqCommand, u16 reqResult)
for (i = 0; i < RFU_GAME_NAME_LENGTH; ++i) for (i = 0; i < RFU_GAME_NAME_LENGTH; ++i)
gRfuLinkStatus->my.gname[i] = *gname_uname_p++; gRfuLinkStatus->my.gname[i] = *gname_uname_p++;
++gname_uname_p; ++gname_uname_p;
for (i = 0; i < RFU_USER_NAME_LENGTH; ++i) for (i = 0; i < PLAYER_NAME_LENGTH + 1; ++i)
gRfuLinkStatus->my.uname[i] = *gname_uname_p++; gRfuLinkStatus->my.uname[i] = *gname_uname_p++;
} }
rfu_STC_REQ_callback(reqCommand, reqResult); rfu_STC_REQ_callback(reqCommand, reqResult);
@@ -718,7 +718,7 @@ static void rfu_STC_readParentCandidateList(void)
for (j = 0; j < RFU_GAME_NAME_LENGTH; ++j) for (j = 0; j < RFU_GAME_NAME_LENGTH; ++j)
target->gname[j] = *packet_p++; target->gname[j] = *packet_p++;
++packet_p; ++packet_p;
for (j = 0; j < RFU_USER_NAME_LENGTH; ++j) for (j = 0; j < PLAYER_NAME_LENGTH + 1; ++j)
target->uname[j] = *packet_p++; target->uname[j] = *packet_p++;
++gRfuLinkStatus->findParentCount; ++gRfuLinkStatus->findParentCount;
} }
+173 -173
View File
@@ -1,5 +1,3 @@
// Includes
#include "global.h" #include "global.h"
#include "m4a.h" #include "m4a.h"
#include "malloc.h" #include "malloc.h"
@@ -30,10 +28,6 @@
#include "constants/rgb.h" #include "constants/rgb.h"
#include "constants/trade.h" #include "constants/trade.h"
extern u16 gHeldKeyCodeToSend;
// Static type declarations
struct BlockTransfer struct BlockTransfer
{ {
u16 pos; u16 pos;
@@ -51,15 +45,13 @@ struct LinkTestBGInfo
u32 dummy_C; u32 dummy_C;
}; };
// Static RAM declarations
static struct BlockTransfer sBlockSend; static struct BlockTransfer sBlockSend;
static struct BlockTransfer sBlockRecv[MAX_LINK_PLAYERS]; static struct BlockTransfer sBlockRecv[MAX_LINK_PLAYERS];
static u32 sBlockSendDelayCounter; static u32 sBlockSendDelayCounter;
static u32 gUnknown_03000D54; static bool32 sDummy1; // Never read
static u8 gUnknown_03000D58; static bool8 sDummy2; // Never assigned, read in unused function
static u32 sPlayerDataExchangeStatus; static u32 sPlayerDataExchangeStatus;
static u32 gUnknown_03000D60; static bool32 sDummy3; // Never read
static u8 sLinkTestLastBlockSendPos; static u8 sLinkTestLastBlockSendPos;
static u8 sLinkTestLastBlockRecvPos[MAX_LINK_PLAYERS]; static u8 sLinkTestLastBlockRecvPos[MAX_LINK_PLAYERS];
static u8 sNumVBlanksWithoutSerialIntr; static u8 sNumVBlanksWithoutSerialIntr;
@@ -74,15 +66,15 @@ u32 gLinkDebugSeed;
struct LinkPlayerBlock gLocalLinkPlayerBlock; struct LinkPlayerBlock gLocalLinkPlayerBlock;
bool8 gLinkErrorOccurred; bool8 gLinkErrorOccurred;
u32 gLinkDebugFlags; u32 gLinkDebugFlags;
u32 gFiller_03003074; u32 gLinkFiller1;
bool8 gRemoteLinkPlayersNotReceived[MAX_LINK_PLAYERS]; bool8 gRemoteLinkPlayersNotReceived[MAX_LINK_PLAYERS];
u8 gBlockReceivedStatus[MAX_LINK_PLAYERS]; u8 gBlockReceivedStatus[MAX_LINK_PLAYERS];
u32 gFiller_03003080; u32 gLinkFiller2;
u16 gLinkHeldKeys; u16 gLinkHeldKeys;
u16 gRecvCmds[MAX_RFU_PLAYERS][CMD_LENGTH]; u16 gRecvCmds[MAX_RFU_PLAYERS][CMD_LENGTH];
u32 gLinkStatus; u32 gLinkStatus;
bool8 gUnknown_030030E4; bool8 gLinkDummy1; // Never read
bool8 gUnknown_030030E8; bool8 gLinkDummy2; // Never read
bool8 gUnknown_030030EC[MAX_LINK_PLAYERS]; bool8 gUnknown_030030EC[MAX_LINK_PLAYERS];
bool8 gUnknown_030030F0[MAX_LINK_PLAYERS]; bool8 gUnknown_030030F0[MAX_LINK_PLAYERS];
u16 gUnknown_030030F4; u16 gUnknown_030030F4;
@@ -97,15 +89,13 @@ void (*gLinkCallback)(void);
u8 gShouldAdvanceLinkState; u8 gShouldAdvanceLinkState;
u16 gLinkTestBlockChecksums[MAX_LINK_PLAYERS]; u16 gLinkTestBlockChecksums[MAX_LINK_PLAYERS];
u8 gBlockRequestType; u8 gBlockRequestType;
u32 gFiller_03003154; u32 gLinkFiller3;
u32 gFiller_03003158; u32 gLinkFiller4;
u32 gFiller_0300315c; u32 gLinkFiller5;
u8 gLastSendQueueCount; u8 gLastSendQueueCount;
struct Link gLink; struct Link gLink;
u8 gLastRecvQueueCount; u8 gLastRecvQueueCount;
u16 gLinkSavedIme; u16 gLinkSavedIme;
u32 gFiller_03004138;
u32 gFiller_0300413C;
EWRAM_DATA u8 gLinkTestDebugValuesEnabled = 0; EWRAM_DATA u8 gLinkTestDebugValuesEnabled = 0;
EWRAM_DATA u8 gUnknown_020223BD = 0; EWRAM_DATA u8 gUnknown_020223BD = 0;
@@ -124,16 +114,16 @@ EWRAM_DATA struct {
u8 lastSendQueueCount; u8 lastSendQueueCount;
u8 unk_06; u8 unk_06;
} sLinkErrorBuffer = {}; } sLinkErrorBuffer = {};
EWRAM_DATA u16 gUnknown_02022B08 = 0; static EWRAM_DATA u16 sUnknown_02022B08 = 0;
EWRAM_DATA void *gUnknown_02022B0C = NULL; static EWRAM_DATA void *sLinkErrorBgTilemapBuffer = NULL;
// Static ROM declarations // Static ROM declarations
static void InitLocalLinkPlayer(void); static void InitLocalLinkPlayer(void);
static void sub_80096BC(void); static void VBlankCB_LinkError(void);
static void CB2_LinkTest(void); static void CB2_LinkTest(void);
static void ProcessRecvCmds(u8 unused); static void ProcessRecvCmds(u8 unused);
static void sub_8009F70(void); static void LinkCB_SendHeldKeys(void);
static void ResetBlockSend(void); static void ResetBlockSend(void);
static bool32 InitBlockSend(const void *src, size_t size); static bool32 InitBlockSend(const void *src, size_t size);
static void LinkCB_BlockSendBegin(void); static void LinkCB_BlockSendBegin(void);
@@ -155,7 +145,7 @@ static void sub_800AE5C(void);
static void CheckErrorStatus(void); static void CheckErrorStatus(void);
static void CB2_PrintErrorMessage(void); static void CB2_PrintErrorMessage(void);
static bool8 IsSioMultiMaster(void); static bool8 IsSioMultiMaster(void);
static void sub_800B4A4(void); static void SetWirelessCommType0_Internal(void);
static void DisableSerial(void); static void DisableSerial(void);
static void EnableSerial(void); static void EnableSerial(void);
static void CheckMasterOrSlave(void); static void CheckMasterOrSlave(void);
@@ -172,29 +162,29 @@ static void SendRecvDone(void);
// .rodata // .rodata
ALIGNED(4) const u16 gWirelessLinkDisplayPal[] = INCBIN_U16("graphics/interface/wireless_link_display.gbapal"); static const u16 sWirelessLinkDisplayPal[] = INCBIN_U16("graphics/interface/wireless_link_display.gbapal");
const u32 gWirelessLinkDisplayGfx[] = INCBIN_U32("graphics/interface/wireless_link_display.4bpp.lz"); static const u32 sWirelessLinkDisplayGfx[] = INCBIN_U32("graphics/interface/wireless_link_display.4bpp.lz");
const u32 gWirelessLinkDisplayTilemap[] = INCBIN_U32("graphics/interface/wireless_link_display.bin.lz"); static const u32 sWirelessLinkDisplayTilemap[] = INCBIN_U32("graphics/interface/wireless_link_display.bin.lz");
const u16 gLinkTestDigitsPal[] = INCBIN_U16("graphics/interface/link_test_digits.gbapal"); static const u16 sLinkTestDigitsPal[] = INCBIN_U16("graphics/interface/link_test_digits.gbapal");
const u16 gLinkTestDigitsGfx[] = INCBIN_U16("graphics/interface/link_test_digits.4bpp"); static const u16 sLinkTestDigitsGfx[] = INCBIN_U16("graphics/interface/link_test_digits.4bpp");
const u8 unkstring_82ed160[] = _("{HIGHLIGHT TRANSPARENT}{COLOR WHITE}"); static const u8 sUnusedTransparentWhite[] = _("{HIGHLIGHT TRANSPARENT}{COLOR WHITE}");
const u16 g2BlankTilesGfx[] = INCBIN_U16("graphics/interface/blank_1x2.4bpp"); static const u16 s2BlankTilesGfx[] = INCBIN_U16("graphics/interface/blank_1x2.4bpp");
const struct BlockRequest gUnknown_082ED1A8[] = { static const struct BlockRequest sBlockRequests[] = {
{gBlockSendBuffer, 200}, {gBlockSendBuffer, 200},
{gBlockSendBuffer, 200}, {gBlockSendBuffer, 200},
{gBlockSendBuffer, 100}, {gBlockSendBuffer, 100},
{gBlockSendBuffer, 220}, {gBlockSendBuffer, 220},
{gBlockSendBuffer, 40} {gBlockSendBuffer, 40}
}; };
const u8 gBGControlRegs[] = { static const u8 sBGControlRegs[] = {
REG_OFFSET_BG0CNT, REG_OFFSET_BG0CNT,
REG_OFFSET_BG1CNT, REG_OFFSET_BG1CNT,
REG_OFFSET_BG2CNT, REG_OFFSET_BG2CNT,
REG_OFFSET_BG3CNT REG_OFFSET_BG3CNT
}; };
const char gASCIIGameFreakInc[] = "GameFreak inc."; static const char sASCIIGameFreakInc[] = "GameFreak inc.";
const char gASCIITestPrint[] = "TEST PRINT\nP0\nP1\nP2\nP3"; static const char sASCIITestPrint[] = "TEST PRINT\nP0\nP1\nP2\nP3";
const struct BgTemplate gUnknown_082ED1FC[] = { static const struct BgTemplate sLinkErrorBgTemplates[] = {
{ {
.bg = 0, .bg = 0,
.charBaseIndex = 2, .charBaseIndex = 2,
@@ -207,29 +197,50 @@ const struct BgTemplate gUnknown_082ED1FC[] = {
.priority = 1 .priority = 1
} }
}; };
const struct WindowTemplate gUnknown_082ED204[] = { static const struct WindowTemplate sLinkErrorWindowTemplates[] = {
{0x00, 0x00, 0x00, 0x1E, 0x05, 0x0F, 0x0002}, {
{0x00, 0x00, 0x06, 0x1E, 0x07, 0x0F, 0x0098}, .bg = 0,
{0x00, 0x00, 0x0D, 0x1E, 0x07, 0x0F, 0x016A}, .tilemapLeft = 0,
DUMMY_WIN_TEMPLATE .tilemapTop = 0,
.width = 30,
.height = 5,
.paletteNum = 15,
.baseBlock = 0x002
}, {
.bg = 0,
.tilemapLeft = 0,
.tilemapTop = 6,
.width = 30,
.height = 7,
.paletteNum = 15,
.baseBlock = 0x098
}, {
.bg = 0,
.tilemapLeft = 0,
.tilemapTop = 13,
.width = 30,
.height = 7,
.paletteNum = 15,
.baseBlock = 0x16A
}, DUMMY_WIN_TEMPLATE
}; };
static const u8 sTextColors[] = { TEXT_COLOR_TRANSPARENT, TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GREY }; static const u8 sTextColors[] = { TEXT_COLOR_TRANSPARENT, TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GREY };
static const u8 sUnused_082ED224[] = {0x00, 0xff, 0xfe, 0xff, 0x00}; static const u8 sUnused_082ED224[] = {0x00, 0xFF, 0xFE, 0xFF, 0x00};
// .text // .text
bool8 IsWirelessAdapterConnected(void) bool8 IsWirelessAdapterConnected(void)
{ {
sub_800B488(); SetWirelessCommType1();
sub_800E700(); InitRFUAPI();
if (rfu_LMAN_REQBN_softReset_and_checkID() == 0x8001) if (rfu_LMAN_REQBN_softReset_and_checkID() == 0x8001)
{ {
rfu_REQ_stopMode(); rfu_REQ_stopMode();
rfu_waitREQComplete(); rfu_waitREQComplete();
return TRUE; return TRUE;
} }
sub_800B4A4(); SetWirelessCommType0_Internal();
CloseLink(); CloseLink();
RestoreSerialTimer3IntrHandlers(); RestoreSerialTimer3IntrHandlers();
return FALSE; return FALSE;
@@ -242,8 +253,8 @@ void Task_DestroySelf(u8 taskId)
static void InitLinkTestBG(u8 paletteNum, u8 bgNum, u8 screenBaseBlock, u8 charBaseBlock, u16 a4) static void InitLinkTestBG(u8 paletteNum, u8 bgNum, u8 screenBaseBlock, u8 charBaseBlock, u16 a4)
{ {
LoadPalette(gLinkTestDigitsPal, paletteNum * 16, 0x20); LoadPalette(sLinkTestDigitsPal, paletteNum * 16, 0x20);
DmaCopy16(3, gLinkTestDigitsGfx, (u16 *)BG_CHAR_ADDR(charBaseBlock) + (16 * a4), sizeof gLinkTestDigitsGfx); DmaCopy16(3, sLinkTestDigitsGfx, (u16 *)BG_CHAR_ADDR(charBaseBlock) + (16 * a4), sizeof sLinkTestDigitsGfx);
gLinkTestBGInfo.screenBaseBlock = screenBaseBlock; gLinkTestBGInfo.screenBaseBlock = screenBaseBlock;
gLinkTestBGInfo.paletteNum = paletteNum; gLinkTestBGInfo.paletteNum = paletteNum;
gLinkTestBGInfo.dummy_8 = a4; gLinkTestBGInfo.dummy_8 = a4;
@@ -265,12 +276,12 @@ static void InitLinkTestBG(u8 paletteNum, u8 bgNum, u8 screenBaseBlock, u8 charB
void sub_80094EC(u8 paletteNum, u8 bgNum, u8 screenBaseBlock, u8 charBaseBlock) void sub_80094EC(u8 paletteNum, u8 bgNum, u8 screenBaseBlock, u8 charBaseBlock)
{ {
LoadPalette(gLinkTestDigitsPal, paletteNum * 16, 0x20); LoadPalette(sLinkTestDigitsPal, paletteNum * 16, 0x20);
DmaCopy16(3, gLinkTestDigitsGfx, (u16 *)BG_CHAR_ADDR(charBaseBlock), sizeof gLinkTestDigitsGfx); DmaCopy16(3, sLinkTestDigitsGfx, (u16 *)BG_CHAR_ADDR(charBaseBlock), sizeof sLinkTestDigitsGfx);
gLinkTestBGInfo.screenBaseBlock = screenBaseBlock; gLinkTestBGInfo.screenBaseBlock = screenBaseBlock;
gLinkTestBGInfo.paletteNum = paletteNum; gLinkTestBGInfo.paletteNum = paletteNum;
gLinkTestBGInfo.dummy_8 = 0; gLinkTestBGInfo.dummy_8 = 0;
SetGpuReg(gBGControlRegs[bgNum], BGCNT_SCREENBASE(screenBaseBlock) | BGCNT_CHARBASE(charBaseBlock)); SetGpuReg(sBGControlRegs[bgNum], BGCNT_SCREENBASE(screenBaseBlock) | BGCNT_CHARBASE(charBaseBlock));
} }
void LinkTestScreen(void) void LinkTestScreen(void)
@@ -280,9 +291,9 @@ void LinkTestScreen(void)
ResetSpriteData(); ResetSpriteData();
FreeAllSpritePalettes(); FreeAllSpritePalettes();
ResetTasks(); ResetTasks();
SetVBlankCallback(sub_80096BC); SetVBlankCallback(VBlankCB_LinkError);
ResetBlockSend(); ResetBlockSend();
gLinkType = LINKTYPE_0x1111; gLinkType = LINKTYPE_TRADE;
OpenLink(); OpenLink();
SeedRng(gMain.vblankCounter2); SeedRng(gMain.vblankCounter2);
for (i = 0; i < MAX_LINK_PLAYERS; i++) for (i = 0; i < MAX_LINK_PLAYERS; i++)
@@ -296,7 +307,7 @@ void LinkTestScreen(void)
AnimateSprites(); AnimateSprites();
BuildOamBuffer(); BuildOamBuffer();
UpdatePaletteFade(); UpdatePaletteFade();
gUnknown_03000D60 = 0; sDummy3 = FALSE;
InitLocalLinkPlayer(); InitLocalLinkPlayer();
CreateTask(Task_PrintTestData, 0); CreateTask(Task_PrintTestData, 0);
SetMainCallback2(CB2_LinkTest); SetMainCallback2(CB2_LinkTest);
@@ -323,7 +334,7 @@ static void InitLocalLinkPlayer(void)
} }
} }
static void sub_80096BC(void) static void VBlankCB_LinkError(void)
{ {
LoadOam(); LoadOam();
ProcessSpriteCopyRequests(); ProcessSpriteCopyRequests();
@@ -334,9 +345,9 @@ static void InitLink(void)
{ {
int i; int i;
for (i = 0; i < 8; i++) for (i = 0; i < CMD_LENGTH; i++)
{ {
gSendCmd[i] = 0xefff; gSendCmd[i] = 0xEfff;
} }
gLinkOpen = TRUE; gLinkOpen = TRUE;
EnableSerial(); EnableSerial();
@@ -365,15 +376,15 @@ void OpenLink(void)
gSuppressLinkErrorMessage = FALSE; gSuppressLinkErrorMessage = FALSE;
ResetBlockReceivedFlags(); ResetBlockReceivedFlags();
ResetBlockSend(); ResetBlockSend();
gUnknown_03000D54 = 0; sDummy1 = FALSE;
gUnknown_030030E8 = FALSE; gLinkDummy2 = FALSE;
gUnknown_030030E4 = FALSE; gLinkDummy1 = FALSE;
gUnknown_030030F4 = 0; gUnknown_030030F4 = 0;
CreateTask(Task_TriggerHandshake, 2); CreateTask(Task_TriggerHandshake, 2);
} }
else else
{ {
sub_800E700(); InitRFUAPI();
} }
gReceivedRemoteLinkPlayers = 0; gReceivedRemoteLinkPlayers = 0;
for (i = 0; i < MAX_LINK_PLAYERS; i++) for (i = 0; i < MAX_LINK_PLAYERS; i++)
@@ -389,7 +400,7 @@ void CloseLink(void)
gReceivedRemoteLinkPlayers = FALSE; gReceivedRemoteLinkPlayers = FALSE;
if (gWirelessCommType) if (gWirelessCommType)
{ {
sub_800EDD4(); LinkRfu_Shutdown();
} }
gLinkOpen = FALSE; gLinkOpen = FALSE;
DisableSerial(); DisableSerial();
@@ -482,7 +493,7 @@ u16 LinkMain2(const u16 *heldKeys)
{ {
return 0; return 0;
} }
for (i = 0; i < 8; i++) for (i = 0; i < CMD_LENGTH; i++)
{ {
gSendCmd[i] = 0; gSendCmd[i] = 0;
} }
@@ -536,8 +547,8 @@ static void ProcessRecvCmds(u8 unused)
InitLocalLinkPlayer(); InitLocalLinkPlayer();
block = &gLocalLinkPlayerBlock; block = &gLocalLinkPlayerBlock;
block->linkPlayer = gLocalLinkPlayer; block->linkPlayer = gLocalLinkPlayer;
memcpy(block->magic1, gASCIIGameFreakInc, sizeof(block->magic1) - 1); memcpy(block->magic1, sASCIIGameFreakInc, sizeof(block->magic1) - 1);
memcpy(block->magic2, gASCIIGameFreakInc, sizeof(block->magic2) - 1); memcpy(block->magic2, sASCIIGameFreakInc, sizeof(block->magic2) - 1);
InitBlockSend(block, sizeof(*block)); InitBlockSend(block, sizeof(*block));
break; break;
} }
@@ -545,10 +556,10 @@ static void ProcessRecvCmds(u8 unused)
gLinkPartnersHeldKeys[i] = gRecvCmds[i][1]; gLinkPartnersHeldKeys[i] = gRecvCmds[i][1];
break; break;
case LINKCMD_0x5555: case LINKCMD_0x5555:
gUnknown_030030E8 = TRUE; gLinkDummy2 = TRUE;
break; break;
case LINKCMD_0x5566: case LINKCMD_0x5566:
gUnknown_030030E8 = TRUE; gLinkDummy2 = TRUE;
break; break;
case LINKCMD_INIT_BLOCK: case LINKCMD_INIT_BLOCK:
{ {
@@ -602,8 +613,8 @@ static void ProcessRecvCmds(u8 unused)
linkPlayer->progressFlags = 0; linkPlayer->progressFlags = 0;
} }
sub_800B524(linkPlayer); sub_800B524(linkPlayer);
if (strcmp(block->magic1, gASCIIGameFreakInc) != 0 if (strcmp(block->magic1, sASCIIGameFreakInc) != 0
|| strcmp(block->magic2, gASCIIGameFreakInc) != 0) || strcmp(block->magic2, sASCIIGameFreakInc) != 0)
{ {
SetMainCallback2(CB2_LinkError); SetMainCallback2(CB2_LinkError);
} }
@@ -629,7 +640,7 @@ static void ProcessRecvCmds(u8 unused)
sub_800A418(); sub_800A418();
break; break;
case LINKCMD_0xCCCC: case LINKCMD_0xCCCC:
SendBlock(0, gUnknown_082ED1A8[gRecvCmds[i][1]].address, gUnknown_082ED1A8[gRecvCmds[i][1]].size); SendBlock(0, sBlockRequests[gRecvCmds[i][1]].address, sBlockRequests[gRecvCmds[i][1]].size);
break; break;
case LINKCMD_SEND_HELD_KEYS_2: case LINKCMD_SEND_HELD_KEYS_2:
gLinkPartnersHeldKeys[i] = gRecvCmds[i][1]; gLinkPartnersHeldKeys[i] = gRecvCmds[i][1];
@@ -705,70 +716,56 @@ static void BuildSendCmd(u16 command)
} }
} }
void sub_8009F18(void) void StartSendingKeysToLink(void)
{ {
if (gWirelessCommType) if (gWirelessCommType)
{ StartSendingKeysToRfu();
sub_800F804();
} gLinkCallback = LinkCB_SendHeldKeys;
gLinkCallback = sub_8009F70;
} }
bool32 IsSendingKeysToLink(void) bool32 IsSendingKeysToLink(void)
{ {
if (gWirelessCommType) if (gWirelessCommType)
{
return IsSendingKeysToRfu(); return IsSendingKeysToRfu();
}
if (gLinkCallback == sub_8009F70) if (gLinkCallback == LinkCB_SendHeldKeys)
{
return TRUE; return TRUE;
}
return FALSE; return FALSE;
} }
static void sub_8009F70(void) static void LinkCB_SendHeldKeys(void)
{ {
if (gReceivedRemoteLinkPlayers == TRUE) if (gReceivedRemoteLinkPlayers == TRUE)
{
BuildSendCmd(LINKCMD_SEND_HELD_KEYS_2); BuildSendCmd(LINKCMD_SEND_HELD_KEYS_2);
}
} }
void ClearLinkCallback(void) void ClearLinkCallback(void)
{ {
if (gWirelessCommType) if (gWirelessCommType)
{
ClearLinkRfuCallback(); ClearLinkRfuCallback();
}
else else
{
gLinkCallback = NULL; gLinkCallback = NULL;
}
} }
void ClearLinkCallback_2(void) void ClearLinkCallback_2(void)
{ {
if (gWirelessCommType) if (gWirelessCommType)
{
ClearLinkRfuCallback(); ClearLinkRfuCallback();
}
else else
{
gLinkCallback = NULL; gLinkCallback = NULL;
}
} }
u8 GetLinkPlayerCount(void) u8 GetLinkPlayerCount(void)
{ {
if (gWirelessCommType) if (gWirelessCommType)
{ return Rfu_GetLinkPlayerCount();
return sub_80104F4();
}
return EXTRACT_PLAYER_COUNT(gLinkStatus); return EXTRACT_PLAYER_COUNT(gLinkStatus);
} }
static int sub_8009FF8(u32 version1, u32 version2) static int AreAnyLinkPlayersUsingVersions(u32 version1, u32 version2)
{ {
int i; int i;
u8 nPlayers; u8 nPlayers;
@@ -776,22 +773,22 @@ static int sub_8009FF8(u32 version1, u32 version2)
nPlayers = GetLinkPlayerCount(); nPlayers = GetLinkPlayerCount();
for (i = 0; i < nPlayers; i++) for (i = 0; i < nPlayers; i++)
{ {
if ((gLinkPlayers[i].version & 0xFF) == version1 || (gLinkPlayers[i].version & 0xFF) == version2) if ((gLinkPlayers[i].version & 0xFF) == version1
{ || (gLinkPlayers[i].version & 0xFF) == version2)
return 1; return 1;
}
} }
return -1; return -1;
} }
u32 sub_800A03C(void) u32 LinkDummy_Return2(void)
{ {
return 2; return 2;
} }
bool32 sub_800A040(void) // Unused
static bool32 IsFullLinkGroupWithNoRS(void)
{ {
if (GetLinkPlayerCount() != 4 || sub_8009FF8(VERSION_RUBY, VERSION_SAPPHIRE) < 0) if (GetLinkPlayerCount() != MAX_LINK_PLAYERS || AreAnyLinkPlayersUsingVersions(VERSION_RUBY, VERSION_SAPPHIRE) < 0)
{ {
return FALSE; return FALSE;
} }
@@ -800,18 +797,18 @@ bool32 sub_800A040(void)
bool32 Link_AnyPartnersPlayingRubyOrSapphire(void) bool32 Link_AnyPartnersPlayingRubyOrSapphire(void)
{ {
if (sub_8009FF8(VERSION_RUBY, VERSION_SAPPHIRE) >= 0) if (AreAnyLinkPlayersUsingVersions(VERSION_RUBY, VERSION_SAPPHIRE) >= 0)
{ {
return TRUE; return TRUE;
} }
return FALSE; return FALSE;
} }
bool32 sub_800A07C(void) bool32 Link_AnyPartnersPlayingFRLG_JP(void)
{ {
int i; int i;
i = sub_8009FF8(VERSION_FIRE_RED, VERSION_LEAF_GREEN); i = AreAnyLinkPlayersUsingVersions(VERSION_FIRE_RED, VERSION_LEAF_GREEN);
if (i >= 0 && gLinkPlayers[i].language == LANGUAGE_JAPANESE) if (i >= 0 && gLinkPlayers[i].language == LANGUAGE_JAPANESE)
{ {
return TRUE; return TRUE;
@@ -826,23 +823,23 @@ void OpenLinkTimed(void)
OpenLink(); OpenLink();
} }
u8 GetLinkPlayerDataExchangeStatusTimed(int lower, int upper) u8 GetLinkPlayerDataExchangeStatusTimed(int minPlayers, int maxPlayers)
{ {
int i; int i;
int count; int count;
u32 index; u32 index;
u8 cmpVal; u8 numPlayers;
u32 linkType1; u32 linkType1;
u32 linkType2; u32 linkType2;
count = 0; count = 0;
if (gReceivedRemoteLinkPlayers == TRUE) if (gReceivedRemoteLinkPlayers == TRUE)
{ {
cmpVal = GetLinkPlayerCount_2(); numPlayers = GetLinkPlayerCount_2();
if (lower > cmpVal || cmpVal > upper) if (minPlayers > numPlayers || numPlayers > maxPlayers)
{ {
sPlayerDataExchangeStatus = EXCHANGE_STAT_6; sPlayerDataExchangeStatus = EXCHANGE_WRONG_NUM_PLAYERS;
return 6; return sPlayerDataExchangeStatus;
} }
else else
{ {
@@ -860,19 +857,19 @@ u8 GetLinkPlayerDataExchangeStatusTimed(int lower, int upper)
} }
if (count == GetLinkPlayerCount()) if (count == GetLinkPlayerCount())
{ {
if (gLinkPlayers[0].linkType == 0x1133) if (gLinkPlayers[0].linkType == LINKTYPE_TRADE_SETUP)
{ {
switch (GetGameProgressForLinkTrade()) switch (GetGameProgressForLinkTrade())
{ {
case TRADE_PLAYER_NOT_READY: case TRADE_PLAYER_NOT_READY:
sPlayerDataExchangeStatus = EXCHANGE_PLAYER_NOT_READY; sPlayerDataExchangeStatus = EXCHANGE_PLAYER_NOT_READY;
break; break;
case TRADE_PARTNER_NOT_READY: case TRADE_PARTNER_NOT_READY:
sPlayerDataExchangeStatus = EXCHANGE_PARTNER_NOT_READY; sPlayerDataExchangeStatus = EXCHANGE_PARTNER_NOT_READY;
break; break;
case TRADE_BOTH_PLAYERS_READY: case TRADE_BOTH_PLAYERS_READY:
sPlayerDataExchangeStatus = EXCHANGE_COMPLETE; sPlayerDataExchangeStatus = EXCHANGE_COMPLETE;
break; break;
} }
} }
else else
@@ -882,11 +879,14 @@ u8 GetLinkPlayerDataExchangeStatusTimed(int lower, int upper)
} }
else else
{ {
sPlayerDataExchangeStatus = EXCHANGE_IN_PROGRESS; sPlayerDataExchangeStatus = EXCHANGE_DIFF_SELECTIONS;
linkType1 = gLinkPlayers[GetMultiplayerId()].linkType; linkType1 = gLinkPlayers[GetMultiplayerId()].linkType;
linkType2 = gLinkPlayers[GetMultiplayerId() ^ 1].linkType; linkType2 = gLinkPlayers[GetMultiplayerId() ^ 1].linkType;
if ((linkType1 == 0x2266 && linkType2 == 0x2277) || (linkType1 == 0x2277 && linkType2 == 0x2266)) if ((linkType1 == LINKTYPE_BATTLE_TOWER_50 && linkType2 == LINKTYPE_BATTLE_TOWER_OPEN)
|| (linkType1 == LINKTYPE_BATTLE_TOWER_OPEN && linkType2 == LINKTYPE_BATTLE_TOWER_50))
{ {
// 3 below indicates partner made different level mode selection
// See BattleFrontier_BattleTowerLobby_EventScript_AbortLinkDifferentSelections
gSpecialVar_0x8005 = 3; gSpecialVar_0x8005 = 3;
} }
} }
@@ -921,7 +921,7 @@ bool8 IsLinkPlayerDataExchangeComplete(void)
else else
{ {
retval = FALSE; retval = FALSE;
sPlayerDataExchangeStatus = EXCHANGE_IN_PROGRESS; sPlayerDataExchangeStatus = EXCHANGE_DIFF_SELECTIONS;
} }
return retval; return retval;
} }
@@ -959,7 +959,7 @@ static bool32 InitBlockSend(const void *src, size_t size)
sBlockSend.active = TRUE; sBlockSend.active = TRUE;
sBlockSend.size = size; sBlockSend.size = size;
sBlockSend.pos = 0; sBlockSend.pos = 0;
if (size > 0x100) if (size > BLOCK_BUFFER_SIZE)
{ {
sBlockSend.src = src; sBlockSend.src = src;
} }
@@ -992,7 +992,7 @@ static void LinkCB_BlockSend(void)
src = sBlockSend.src; src = sBlockSend.src;
gSendCmd[0] = LINKCMD_CONT_BLOCK; gSendCmd[0] = LINKCMD_CONT_BLOCK;
for (i = 0; i < 7; i++) for (i = 0; i < CMD_LENGTH - 1; i++)
{ {
gSendCmd[i + 1] = (src[sBlockSend.pos + i * 2 + 1] << 8) | src[sBlockSend.pos + i * 2]; gSendCmd[i + 1] = (src[sBlockSend.pos + i * 2 + 1] << 8) | src[sBlockSend.pos + i * 2];
} }
@@ -1043,7 +1043,7 @@ u8 GetMultiplayerId(void)
{ {
if (gWirelessCommType == TRUE) if (gWirelessCommType == TRUE)
{ {
return rfu_get_multiplayer_id(); return Rfu_GetMultiplayerId();
} }
return SIO_MULTI_CNT->id; return SIO_MULTI_CNT->id;
} }
@@ -1060,7 +1060,7 @@ bool8 SendBlock(u8 unused, const void *src, u16 size)
{ {
if (gWirelessCommType == TRUE) if (gWirelessCommType == TRUE)
{ {
return sub_800FE84(src, size); return Rfu_InitBlockSend(src, size);
} }
return InitBlockSend(src, size); return InitBlockSend(src, size);
} }
@@ -1093,7 +1093,7 @@ u8 GetBlockReceivedStatus(void)
{ {
if (gWirelessCommType == TRUE) if (gWirelessCommType == TRUE)
{ {
return sub_800FCD8(); return Rfu_GetBlockReceivedStatus();
} }
return (gBlockReceivedStatus[3] << 3) | (gBlockReceivedStatus[2] << 2) | (gBlockReceivedStatus[1] << 1) | (gBlockReceivedStatus[0] << 0); return (gBlockReceivedStatus[3] << 3) | (gBlockReceivedStatus[2] << 2) | (gBlockReceivedStatus[1] << 1) | (gBlockReceivedStatus[0] << 0);
} }
@@ -1102,7 +1102,7 @@ static void SetBlockReceivedFlag(u8 who)
{ {
if (gWirelessCommType == TRUE) if (gWirelessCommType == TRUE)
{ {
sub_800F6FC(who); Rfu_SetBlockReceivedFlag(who);
} }
else else
{ {
@@ -1118,7 +1118,7 @@ void ResetBlockReceivedFlags(void)
{ {
for (i = 0; i < MAX_RFU_PLAYERS; i++) for (i = 0; i < MAX_RFU_PLAYERS; i++)
{ {
sub_800F728(i); Rfu_ResetBlockReceivedFlag(i);
} }
} }
else else
@@ -1134,7 +1134,7 @@ void ResetBlockReceivedFlag(u8 who)
{ {
if (gWirelessCommType == TRUE) if (gWirelessCommType == TRUE)
{ {
sub_800F728(who); Rfu_ResetBlockReceivedFlag(who);
} }
else if (gBlockReceivedStatus[who]) else if (gBlockReceivedStatus[who])
{ {
@@ -1261,7 +1261,7 @@ static void Task_PrintTestData(u8 taskId)
char sp[32]; char sp[32];
int i; int i;
strcpy(sp, gASCIITestPrint); strcpy(sp, sASCIITestPrint);
LinkTest_prntstr(sp, 5, 2); LinkTest_prntstr(sp, 5, 2);
LinkTest_prnthex(gShouldAdvanceLinkState, 2, 1, 2); LinkTest_prnthex(gShouldAdvanceLinkState, 2, 1, 2);
LinkTest_prnthex(gLinkStatus, 15, 1, 8); LinkTest_prnthex(gLinkStatus, 15, 1, 8);
@@ -1289,7 +1289,7 @@ void SetLinkDebugValues(u32 seed, u32 flags)
gLinkDebugFlags = flags; gLinkDebugFlags = flags;
} }
u8 sub_800A9A8(void) u8 GetSavedLinkPlayerCountAsBitFlags(void)
{ {
int i; int i;
u8 flags; u8 flags;
@@ -1302,7 +1302,7 @@ u8 sub_800A9A8(void)
return flags; return flags;
} }
u8 sub_800A9D8(void) u8 GetLinkPlayerCountAsBitFlags(void)
{ {
int i; int i;
u8 flags; u8 flags;
@@ -1315,11 +1315,11 @@ u8 sub_800A9D8(void)
return flags; return flags;
} }
void sub_800AA04(u8 a0) void SaveLinkPlayers(u8 playerCount)
{ {
int i; int i;
gSavedLinkPlayerCount = a0; gSavedLinkPlayerCount = playerCount;
gSavedMultiplayerId = GetMultiplayerId(); gSavedMultiplayerId = GetMultiplayerId();
for (i = 0; i < MAX_RFU_PLAYERS; i++) for (i = 0; i < MAX_RFU_PLAYERS; i++)
{ {
@@ -1334,17 +1334,17 @@ u8 GetSavedPlayerCount(void)
return gSavedLinkPlayerCount; return gSavedLinkPlayerCount;
} }
u8 sub_800AA54(void) // Unused
static u8 GetSavedMultiplayerId(void)
{ {
return gSavedMultiplayerId; return gSavedMultiplayerId;
} }
bool8 sub_800AA60(void) bool8 DoesLinkPlayerCountMatchSaved(void)
{ {
int i; int i;
unsigned count; u32 count = 0;
count = 0;
for (i = 0; i < gSavedLinkPlayerCount; i++) for (i = 0; i < gSavedLinkPlayerCount; i++)
{ {
if (gLinkPlayers[i].trainerId == gSavedLinkPlayers[i].trainerId) if (gLinkPlayers[i].trainerId == gSavedLinkPlayers[i].trainerId)
@@ -1352,9 +1352,7 @@ bool8 sub_800AA60(void)
if (gLinkType == LINKTYPE_BATTLE_TOWER) if (gLinkType == LINKTYPE_BATTLE_TOWER)
{ {
if (gLinkType == gLinkPlayers[i].linkType) if (gLinkType == gLinkPlayers[i].linkType)
{
count++; count++;
}
} }
else else
{ {
@@ -1372,7 +1370,7 @@ bool8 sub_800AA60(void)
return FALSE; return FALSE;
} }
void sub_800AAF4(void) void ClearSavedLinkPlayers(void)
{ {
int i; int i;
@@ -1383,13 +1381,14 @@ void sub_800AAF4(void)
} }
} }
void sub_800AB18(void) void CheckLinkPlayersMatchSaved(void)
{ {
u8 i; u8 i;
for (i = 0; i < gSavedLinkPlayerCount; i++) for (i = 0; i < gSavedLinkPlayerCount; i++)
{ {
if (gSavedLinkPlayers[i].trainerId != gLinkPlayers[i].trainerId || StringCompare(gSavedLinkPlayers[i].name, gLinkPlayers[i].name) != 0) if (gSavedLinkPlayers[i].trainerId != gLinkPlayers[i].trainerId
|| StringCompare(gSavedLinkPlayers[i].name, gLinkPlayers[i].name) != 0)
{ {
gLinkErrorOccurred = TRUE; gLinkErrorOccurred = TRUE;
CloseLink(); CloseLink();
@@ -1418,9 +1417,10 @@ bool8 IsLinkMaster(void)
return EXTRACT_MASTER(gLinkStatus); return EXTRACT_MASTER(gLinkStatus);
} }
u8 sub_800ABE8(void) // Unused
static u8 GetDummy2(void)
{ {
return gUnknown_03000D58; return sDummy2;
} }
void sub_800ABF4(u16 a0) void sub_800ABF4(u16 a0)
@@ -1434,7 +1434,7 @@ void sub_800ABF4(u16 a0)
if (gLinkCallback == NULL) if (gLinkCallback == NULL)
{ {
gLinkCallback = sub_800AC80; gLinkCallback = sub_800AC80;
gUnknown_030030E4 = FALSE; gLinkDummy1 = FALSE;
gUnknown_030030F4 = a0; gUnknown_030030F4 = a0;
} }
} }
@@ -1450,12 +1450,12 @@ void sub_800AC34(void)
{ {
if (gLinkCallback != NULL) if (gLinkCallback != NULL)
{ {
gUnknown_02022B08++; sUnknown_02022B08++;
} }
else else
{ {
gLinkCallback = sub_800AC80; gLinkCallback = sub_800AC80;
gUnknown_030030E4 = FALSE; gLinkDummy1 = FALSE;
gUnknown_030030F4 = 0; gUnknown_030030F4 = 0;
} }
} }
@@ -1491,7 +1491,7 @@ static void sub_800ACAC(void)
gLinkVSyncDisabled = TRUE; gLinkVSyncDisabled = TRUE;
CloseLink(); CloseLink();
gLinkCallback = NULL; gLinkCallback = NULL;
gUnknown_030030E4 = TRUE; gLinkDummy1 = TRUE;
} }
} }
@@ -1505,12 +1505,12 @@ void sub_800AD10(void)
{ {
if (gLinkCallback != NULL) if (gLinkCallback != NULL)
{ {
gUnknown_02022B08++; sUnknown_02022B08++;
} }
else else
{ {
gLinkCallback = sub_800AD5C; gLinkCallback = sub_800AD5C;
gUnknown_030030E4 = FALSE; gLinkDummy1 = FALSE;
gUnknown_030030F4 = 0; gUnknown_030030F4 = 0;
} }
} }
@@ -1550,7 +1550,7 @@ static void sub_800AD88(void)
gLinkVSyncDisabled = TRUE; gLinkVSyncDisabled = TRUE;
CloseLink(); CloseLink();
gLinkCallback = NULL; gLinkCallback = NULL;
gUnknown_030030E4 = TRUE; gLinkDummy1 = TRUE;
} }
} }
@@ -1566,7 +1566,7 @@ void sub_800ADF8(void)
{ {
gLinkCallback = sub_800AE30; gLinkCallback = sub_800AE30;
} }
gUnknown_030030E4 = FALSE; gLinkDummy1 = FALSE;
} }
} }
@@ -1618,7 +1618,7 @@ static void CheckErrorStatus(void)
} }
} }
void sub_800AF18(u32 status, u8 lastSendQueueCount, u8 lastRecvQueueCount, u8 unk_06) void BufferLinkErrorInfo(u32 status, u8 lastSendQueueCount, u8 lastRecvQueueCount, bool8 unk_06)
{ {
sLinkErrorBuffer.status = status; sLinkErrorBuffer.status = status;
sLinkErrorBuffer.lastSendQueueCount = lastSendQueueCount; sLinkErrorBuffer.lastSendQueueCount = lastSendQueueCount;
@@ -1647,14 +1647,14 @@ void CB2_LinkError(void)
{ {
gWirelessCommType = 3; gWirelessCommType = 3;
} }
sub_800E604(); ResetLinkRfuGFLayer();
} }
SetVBlankCallback(sub_80096BC); SetVBlankCallback(VBlankCB_LinkError);
ResetBgsAndClearDma3BusyFlags(0); ResetBgsAndClearDma3BusyFlags(0);
InitBgsFromTemplates(0, gUnknown_082ED1FC, 2); InitBgsFromTemplates(0, sLinkErrorBgTemplates, ARRAY_COUNT(sLinkErrorBgTemplates));
gUnknown_02022B0C = tilemapBuffer = malloc(0x800); sLinkErrorBgTilemapBuffer = tilemapBuffer = malloc(0x800);
SetBgTilemapBuffer(1, tilemapBuffer); SetBgTilemapBuffer(1, tilemapBuffer);
if (InitWindows(gUnknown_082ED204)) if (InitWindows(sLinkErrorWindowTemplates))
{ {
DeactivateAllTextPrinters(); DeactivateAllTextPrinters();
ResetTempTileDataBuffers(); ResetTempTileDataBuffers();
@@ -1680,11 +1680,11 @@ void CB2_LinkError(void)
static void sub_800B080(void) static void sub_800B080(void)
{ {
LoadBgTiles(0, g2BlankTilesGfx, 0x20, 0); LoadBgTiles(0, s2BlankTilesGfx, 0x20, 0);
DecompressAndLoadBgGfxUsingHeap(1, gWirelessLinkDisplayGfx, FALSE, 0, 0); DecompressAndLoadBgGfxUsingHeap(1, sWirelessLinkDisplayGfx, FALSE, 0, 0);
CopyToBgTilemapBuffer(1, gWirelessLinkDisplayTilemap, 0, 0); CopyToBgTilemapBuffer(1, sWirelessLinkDisplayTilemap, 0, 0);
CopyBgTilemapBufferToVram(1); CopyBgTilemapBufferToVram(1);
LoadPalette(gWirelessLinkDisplayPal, 0, 0x20); LoadPalette(sWirelessLinkDisplayPal, 0, 0x20);
FillWindowPixelBuffer(0, PIXEL_FILL(0)); FillWindowPixelBuffer(0, PIXEL_FILL(0));
FillWindowPixelBuffer(2, PIXEL_FILL(0)); FillWindowPixelBuffer(2, PIXEL_FILL(0));
AddTextPrinterParameterized3(0, 3, 2, 6, sTextColors, 0, gText_CommErrorEllipsis); AddTextPrinterParameterized3(0, 3, 2, 6, sTextColors, 0, gText_CommErrorEllipsis);
@@ -1697,7 +1697,7 @@ static void sub_800B080(void)
static void sub_800B138(void) static void sub_800B138(void)
{ {
LoadBgTiles(0, g2BlankTilesGfx, 0x20, 0); LoadBgTiles(0, s2BlankTilesGfx, 0x20, 0);
FillWindowPixelBuffer(1, PIXEL_FILL(0)); FillWindowPixelBuffer(1, PIXEL_FILL(0));
FillWindowPixelBuffer(2, PIXEL_FILL(0)); FillWindowPixelBuffer(2, PIXEL_FILL(0));
AddTextPrinterParameterized3(1, 3, 2, 0, sTextColors, 0, gText_CommErrorCheckConnections); AddTextPrinterParameterized3(1, 3, 2, 0, sTextColors, 0, gText_CommErrorCheckConnections);
@@ -1810,12 +1810,12 @@ void sub_800B348(void)
InitLocalLinkPlayer(); InitLocalLinkPlayer();
block = &gLocalLinkPlayerBlock; block = &gLocalLinkPlayerBlock;
block->linkPlayer = gLocalLinkPlayer; block->linkPlayer = gLocalLinkPlayer;
memcpy(block->magic1, gASCIIGameFreakInc, sizeof(block->magic1) - 1); memcpy(block->magic1, sASCIIGameFreakInc, sizeof(block->magic1) - 1);
memcpy(block->magic2, gASCIIGameFreakInc, sizeof(block->magic2) - 1); memcpy(block->magic2, sASCIIGameFreakInc, sizeof(block->magic2) - 1);
memcpy(gBlockSendBuffer, block, sizeof(*block)); memcpy(gBlockSendBuffer, block, sizeof(*block));
} }
void sub_800B3A4(u32 who) void LinkPlayerFromBlock(u32 who)
{ {
u8 who_ = who; u8 who_ = who;
struct LinkPlayerBlock *block; struct LinkPlayerBlock *block;
@@ -1825,7 +1825,7 @@ void sub_800B3A4(u32 who)
player = &gLinkPlayers[who_]; player = &gLinkPlayers[who_];
*player = block->linkPlayer; *player = block->linkPlayer;
sub_800B524(player); sub_800B524(player);
if (strcmp(block->magic1, gASCIIGameFreakInc) != 0 || strcmp(block->magic2, gASCIIGameFreakInc) != 0) if (strcmp(block->magic1, sASCIIGameFreakInc) != 0 || strcmp(block->magic2, sASCIIGameFreakInc) != 0)
{ {
SetMainCallback2(CB2_LinkError); SetMainCallback2(CB2_LinkError);
} }
@@ -1860,7 +1860,7 @@ bool8 HandleLinkConnection(void)
return FALSE; return FALSE;
} }
void sub_800B488(void) void SetWirelessCommType1(void)
{ {
if (gReceivedRemoteLinkPlayers == 0) if (gReceivedRemoteLinkPlayers == 0)
{ {
@@ -1868,7 +1868,7 @@ void sub_800B488(void)
} }
} }
static void sub_800B4A4(void) static void SetWirelessCommType0_Internal(void)
{ {
if (gReceivedRemoteLinkPlayers == 0) if (gReceivedRemoteLinkPlayers == 0)
{ {
@@ -1876,7 +1876,7 @@ static void sub_800B4A4(void)
} }
} }
void sub_800B4C0(void) void SetWirelessCommType0(void)
{ {
if (gReceivedRemoteLinkPlayers == 0) if (gReceivedRemoteLinkPlayers == 0)
{ {
+1219 -1133
View File
File diff suppressed because it is too large Load Diff
+445 -309
View File
File diff suppressed because it is too large Load Diff
+2 -2
View File
@@ -113,7 +113,7 @@ void AgbMain()
InitIntrHandlers(); InitIntrHandlers();
m4aSoundInit(); m4aSoundInit();
EnableVCountIntrAtLine150(); EnableVCountIntrAtLine150();
sub_800E6D0(); InitRFU();
RtcInit(); RtcInit();
CheckForFlashMemory(); CheckForFlashMemory();
InitMainCallbacks(); InitMainCallbacks();
@@ -367,7 +367,7 @@ static void VBlankIntr(void)
if (!gMain.inBattle || !(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_FRONTIER | BATTLE_TYPE_RECORDED))) if (!gMain.inBattle || !(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_FRONTIER | BATTLE_TYPE_RECORDED)))
Random(); Random();
sub_800E174(); UpdateWirelessStatusIndicatorSprite();
INTR_CHECK |= INTR_FLAG_VBLANK; INTR_CHECK |= INTR_FLAG_VBLANK;
gMain.intrCheck |= INTR_FLAG_VBLANK; gMain.intrCheck |= INTR_FLAG_VBLANK;
+1 -1
View File
@@ -2107,7 +2107,7 @@ void sub_819A27C(u8 windowId, u16 speciesId, u32 personality, u16 x, u16 y)
BlitBitmapToWindow(windowId, GetMonIconPtr(speciesId, personality, 1), x, y, 32, 32); BlitBitmapToWindow(windowId, GetMonIconPtr(speciesId, personality, 1), x, y, 32, 32);
} }
void sub_819A2BC(u8 palOffset, u8 palId) void ListMenuLoadStdPalAt(u8 palOffset, u8 palId)
{ {
const u16 *palette; const u16 *palette;
+3 -3
View File
@@ -548,12 +548,12 @@ u16 mevent_081445C0(u32 command)
return 0; return 0;
} }
void sub_801B940(void) void ResetReceivedWonderCardFlag(void)
{ {
gUnknown_02022C70 = FALSE; gUnknown_02022C70 = FALSE;
} }
bool32 sub_801B94C(u16 a0) bool32 MEventHandleReceivedWonderCard(u16 a0)
{ {
gUnknown_02022C70 = FALSE; gUnknown_02022C70 = FALSE;
if (a0 == 0) if (a0 == 0)
@@ -569,7 +569,7 @@ bool32 sub_801B94C(u16 a0)
return TRUE; return TRUE;
} }
void sub_801B990(u32 a0, u32 a1) void RecordIdOfWonderCardSenderByEventType(u32 a0, u32 a1)
{ {
if (gUnknown_02022C70) if (gUnknown_02022C70)
{ {
+2 -2
View File
@@ -152,7 +152,7 @@ static void CB2_MysteryEventMenu(void)
if (!IsTextPrinterActive(0)) if (!IsTextPrinterActive(0))
{ {
gMain.state++; gMain.state++;
gLinkType = LINKTYPE_0x5501; gLinkType = LINKTYPE_MYSTERY_EVENT;
OpenLink(); OpenLink();
} }
break; break;
@@ -206,7 +206,7 @@ static void CB2_MysteryEventMenu(void)
{ {
if (gReceivedRemoteLinkPlayers != 0) if (gReceivedRemoteLinkPlayers != 0)
{ {
if (GetLinkPlayerDataExchangeStatusTimed(2, 2) == 3) if (GetLinkPlayerDataExchangeStatusTimed(2, 2) == EXCHANGE_DIFF_SELECTIONS)
{ {
sub_800AC34(); sub_800AC34();
GetEventLoadMessage(gStringVar4, 1); GetEventLoadMessage(gStringVar4, 1);
+9 -8
View File
@@ -30,6 +30,7 @@
#include "link_rfu.h" #include "link_rfu.h"
#include "mevent_news.h" #include "mevent_news.h"
#include "mevent_server.h" #include "mevent_server.h"
#include "constants/cable_club.h"
void bgid_upload_textbox_1(u8 bgId); void bgid_upload_textbox_1(u8 bgId);
void task_add_00_mystery_gift(void); void task_add_00_mystery_gift(void);
@@ -1242,21 +1243,21 @@ void task00_mystery_gift(u8 taskId)
case 0: case 0:
if (data->source == 1) if (data->source == 1)
{ {
MEvent_CreateTask_CardOrNewsWithFriend(0x15); MEvent_CreateTask_CardOrNewsWithFriend(ACTIVITY_WONDER_CARD2);
} }
else if (data->source == 0) else if (data->source == 0)
{ {
MEvent_CreateTask_CardOrNewsOverWireless(0x15); MEvent_CreateTask_CardOrNewsOverWireless(ACTIVITY_WONDER_CARD2);
} }
break; break;
case 1: case 1:
if (data->source == 1) if (data->source == 1)
{ {
MEvent_CreateTask_CardOrNewsWithFriend(0x16); MEvent_CreateTask_CardOrNewsWithFriend(ACTIVITY_WONDER_NEWS2);
} }
else if (data->source == 0) else if (data->source == 0)
{ {
MEvent_CreateTask_CardOrNewsOverWireless(0x16); MEvent_CreateTask_CardOrNewsOverWireless(ACTIVITY_WONDER_NEWS2);
} }
break; break;
} }
@@ -1269,7 +1270,7 @@ void task00_mystery_gift(u8 taskId)
data->state = 7; data->state = 7;
mevent_client_do_init(data->IsCardOrNews); mevent_client_do_init(data->IsCardOrNews);
} }
else if (gSpecialVar_Result == 5) else if (gSpecialVar_Result == LINKUP_FAILED)
{ {
ClearScreenInBg0(TRUE); ClearScreenInBg0(TRUE);
data->state = 3; data->state = 3;
@@ -1599,10 +1600,10 @@ void task00_mystery_gift(u8 taskId)
switch (data->IsCardOrNews) switch (data->IsCardOrNews)
{ {
case 0: case 0:
MEvent_CreateTask_Leader(21); MEvent_CreateTask_Leader(ACTIVITY_WONDER_CARD2);
break; break;
case 1: case 1:
MEvent_CreateTask_Leader(22); MEvent_CreateTask_Leader(ACTIVITY_WONDER_NEWS2);
break; break;
} }
data->source = 1; data->source = 1;
@@ -1615,7 +1616,7 @@ void task00_mystery_gift(u8 taskId)
ClearScreenInBg0(1); ClearScreenInBg0(1);
data->state = 31; data->state = 31;
} }
else if (gSpecialVar_Result == 5) else if (gSpecialVar_Result == LINKUP_FAILED)
{ {
ClearScreenInBg0(1); ClearScreenInBg0(1);
data->state = 18; data->state = 18;
+1 -1
View File
@@ -197,7 +197,7 @@ void NewGameInitData(void)
WarpToTruck(); WarpToTruck();
ScriptContext2_RunNewScript(EventScript_ResetAllMapFlags); ScriptContext2_RunNewScript(EventScript_ResetAllMapFlags);
ResetMiniGamesResults(); ResetMiniGamesResults();
copy_strings_to_sav1(); InitUnionRoomChatRegisteredTexts();
InitLilycoveLady(); InitLilycoveLady();
ResetAllApprenticeData(); ResetAllApprenticeData();
ClearRankingHallRecords(); ClearRankingHallRecords();
+1 -1
View File
@@ -2913,7 +2913,7 @@ bool32 sub_808766C(void)
static u32 GetLinkSendQueueLength(void) static u32 GetLinkSendQueueLength(void)
{ {
if (gWirelessCommType != 0) if (gWirelessCommType != 0)
return Rfu.unk_9e8.unk_232; return Rfu.sendQueue.count;
else else
return gLink.sendQueue.count; return gLink.sendQueue.count;
} }
+2 -2
View File
@@ -3527,7 +3527,7 @@ static void CursorCb_Register(u8 taskId)
u16 species = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES); u16 species = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES);
u8 obedience = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_OBEDIENCE); u8 obedience = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_OBEDIENCE);
switch (CanRegisterMonForTradingBoard(*(struct GFtgtGnameSub *)sub_800F7DC(), species2, species, obedience)) switch (CanRegisterMonForTradingBoard(*(struct GFtgtGnameSub *)GetHostRFUtgtGname(), species2, species, obedience))
{ {
case CANT_REGISTER_MON: case CANT_REGISTER_MON:
StringExpandPlaceholders(gStringVar4, gText_PkmnCantBeTradedNow); StringExpandPlaceholders(gStringVar4, gText_PkmnCantBeTradedNow);
@@ -3553,7 +3553,7 @@ static void CursorCb_Trade1(u8 taskId)
u16 species2 = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES2); u16 species2 = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES2);
u16 species = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES); u16 species = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES);
u8 obedience = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_OBEDIENCE); u8 obedience = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_OBEDIENCE);
u32 stringId = GetUnionRoomTradeMessageId(*(struct GFtgtGnameSub *)sub_800F7DC(), gUnknown_02022C38, species2, gUnionRoomOfferedSpecies, gUnionRoomRequestedMonType, species, obedience); u32 stringId = GetUnionRoomTradeMessageId(*(struct GFtgtGnameSub *)GetHostRFUtgtGname(), gPartnerTgtGnameSub, species2, gUnionRoomOfferedSpecies, gUnionRoomRequestedMonType, species, obedience);
if (stringId != UR_TRADE_MSG_NONE) if (stringId != UR_TRADE_MSG_NONE)
{ {
+2 -2
View File
@@ -2725,7 +2725,7 @@ void SetDeoxysStats(void)
} }
} }
u16 sub_8068B48(void) u16 GetUnionRoomTrainerPic(void)
{ {
u8 linkId; u8 linkId;
u32 arrId; u32 arrId;
@@ -2740,7 +2740,7 @@ u16 sub_8068B48(void)
return FacilityClassToPicIndex(gLinkPlayerFacilityClasses[arrId]); return FacilityClassToPicIndex(gLinkPlayerFacilityClasses[arrId]);
} }
u16 sub_8068BB0(void) u16 GetUnionRoomTrainerClass(void)
{ {
u8 linkId; u8 linkId;
u32 arrId; u32 arrId;
+8 -8
View File
@@ -216,7 +216,7 @@ static bool32 sub_802C618(void);
static bool32 sub_802C650(void); static bool32 sub_802C650(void);
static void sub_802C688(int); static void sub_802C688(int);
static int sub_802C6B0(void); static int sub_802C6B0(void);
static bool32 sub_802C70C(void); static bool32 AreLinkQueuesEmpty(void);
static int sub_802C73C(u8 *); static int sub_802C73C(u8 *);
static void sub_802C780(void); static void sub_802C780(void);
static int sub_802C790(int); static int sub_802C790(int);
@@ -400,7 +400,7 @@ static const struct PokemonJumpMons gPkmnJumpSpecies[] =
{ .species = SPECIES_BAGON, .unk2 = 1, }, { .species = SPECIES_BAGON, .unk2 = 1, },
}; };
void sub_802A9A8(u16 partyIndex, MainCallback callback) void StartPokemonJump(u16 partyIndex, MainCallback callback)
{ {
u8 taskId; u8 taskId;
@@ -876,7 +876,7 @@ static bool32 sub_802B31C(void)
gUnknown_02022CFC->unk8++; gUnknown_02022CFC->unk8++;
// fall through // fall through
case 1: case 1:
if (sub_802C70C()) if (AreLinkQueuesEmpty())
return FALSE; return FALSE;
break; break;
} }
@@ -1146,14 +1146,14 @@ static bool32 sub_802B720(void)
} }
break; break;
case 2: case 2:
if (sub_802C70C()) if (AreLinkQueuesEmpty())
{ {
CreateTask(sub_8153688, 6); CreateTask(Task_LinkSave, 6);
gUnknown_02022CFC->unk8++; gUnknown_02022CFC->unk8++;
} }
break; break;
case 3: case 3:
if (!FuncIsActiveTask(sub_8153688)) if (!FuncIsActiveTask(Task_LinkSave))
{ {
sub_802DA14(); sub_802DA14();
gUnknown_02022CFC->unk8++; gUnknown_02022CFC->unk8++;
@@ -2025,9 +2025,9 @@ static int sub_802C6B0(void)
return count; return count;
} }
static bool32 sub_802C70C(void) static bool32 AreLinkQueuesEmpty(void)
{ {
return !Rfu.unk_124.unk_8c2 && !Rfu.unk_9e8.unk_232; return !Rfu.recvQueue.count && !Rfu.sendQueue.count;
} }
static int sub_802C73C(u8 *arg0) static int sub_802C73C(u8 *arg0)
+7 -8
View File
@@ -169,10 +169,9 @@ static const u8 gUnknown_0858CFBE[3][4] =
#define BUFFER_CHUNK_SIZE 200 #define BUFFER_CHUNK_SIZE 200
// Note: VAR_0x8005 contains the spotId.
void RecordMixingPlayerSpotTriggered(void) void RecordMixingPlayerSpotTriggered(void)
{ {
sub_80B37D4(Task_RecordMixing_Main); CreateTask_EnterCableClubSeat(Task_RecordMixing_Main);
} }
// these variables were const in R/S, but had to become changeable because of saveblocks changing RAM position // these variables were const in R/S, but had to become changeable because of saveblocks changing RAM position
@@ -232,7 +231,7 @@ static void PrepareExchangePacket(void)
if (Link_AnyPartnersPlayingRubyOrSapphire()) if (Link_AnyPartnersPlayingRubyOrSapphire())
{ {
if (sub_800A03C() == 0) if (LinkDummy_Return2() == 0)
PrepareUnknownExchangePacket(&sSentRecord->ruby); PrepareUnknownExchangePacket(&sSentRecord->ruby);
else else
PrepareExchangePacketForRubySapphire(&sSentRecord->ruby); PrepareExchangePacketForRubySapphire(&sSentRecord->ruby);
@@ -351,7 +350,7 @@ static void Task_RecordMixing_Main(u8 taskId)
{ {
tState = 4; tState = 4;
if (gWirelessCommType == 0) if (gWirelessCommType == 0)
data[10] = sub_80B3050(); data[10] = CreateTask_ReestablishCableClubLink();
PrintTextOnRecordMixing(gText_RecordMixingComplete); PrintTextOnRecordMixing(gText_RecordMixingComplete);
data[8] = 0; data[8] = 0;
@@ -527,7 +526,7 @@ static void Task_CopyReceiveBuffer(u8 taskId)
u8 status = GetBlockReceivedStatus(); u8 status = GetBlockReceivedStatus();
u8 handledPlayers = 0; u8 handledPlayers = 0;
if (status == sub_800A9D8()) if (status == GetLinkPlayerCountAsBitFlags())
{ {
u8 i; u8 i;
@@ -987,12 +986,12 @@ static void Task_DoRecordMixing(u8 taskId)
case 6: case 6:
if (!sub_801048C(FALSE)) if (!sub_801048C(FALSE))
{ {
CreateTask(sub_8153688, 5); CreateTask(Task_LinkSave, 5);
task->data[0] ++; task->data[0] ++;
} }
break; break;
case 7: // wait for sub_8153688 to finish. case 7: // wait for Task_LinkSave to finish.
if (!FuncIsActiveTask(sub_8153688)) if (!FuncIsActiveTask(Task_LinkSave))
{ {
if (gWirelessCommType) if (gWirelessCommType)
{ {
+30 -22
View File
@@ -897,74 +897,78 @@ u32 TryWriteSpecialSaveSection(u8 sector, u8* src)
return SAVE_STATUS_OK; return SAVE_STATUS_OK;
} }
void sub_8153688(u8 taskId) #define tState data[0]
{ #define tTimer data[1]
s16* taskData = gTasks[taskId].data; #define tPartialSave data[2]
switch (taskData[0]) void Task_LinkSave(u8 taskId)
{
s16* data = gTasks[taskId].data;
switch (tState)
{ {
case 0: case 0:
gSoftResetDisabled = TRUE; gSoftResetDisabled = TRUE;
taskData[0] = 1; tState = 1;
break; break;
case 1: case 1:
sub_800ADF8(); sub_800ADF8();
taskData[0] = 2; tState = 2;
break; break;
case 2: case 2:
if (IsLinkTaskFinished()) if (IsLinkTaskFinished())
{ {
if (taskData[2] == 0) if (!tPartialSave)
save_serialize_map(); save_serialize_map();
taskData[0] = 3; tState = 3;
} }
break; break;
case 3: case 3:
if (taskData[2] == 0) if (!tPartialSave)
SetContinueGameWarpStatusToDynamicWarp(); SetContinueGameWarpStatusToDynamicWarp();
sub_8153380(); sub_8153380();
taskData[0] = 4; tState = 4;
break; break;
case 4: case 4:
if (++taskData[1] == 5) if (++tTimer == 5)
{ {
taskData[1] = 0; tTimer = 0;
taskData[0] = 5; tState = 5;
} }
break; break;
case 5: case 5:
if (sub_81533AC()) if (sub_81533AC())
taskData[0] = 6; tState = 6;
else else
taskData[0] = 4; tState = 4;
break; break;
case 6: case 6:
sub_81533E0(); sub_81533E0();
taskData[0] = 7; tState = 7;
break; break;
case 7: case 7:
if (taskData[2] == 0) if (!tPartialSave)
ClearContinueGameWarpStatus2(); ClearContinueGameWarpStatus2();
sub_800ADF8(); sub_800ADF8();
taskData[0] = 8; tState = 8;
break; break;
case 8: case 8:
if (IsLinkTaskFinished()) if (IsLinkTaskFinished())
{ {
sub_8153408(); sub_8153408();
taskData[0] = 9; tState = 9;
} }
break; break;
case 9: case 9:
sub_800ADF8(); sub_800ADF8();
taskData[0] = 10; tState = 10;
break; break;
case 10: case 10:
if (IsLinkTaskFinished()) if (IsLinkTaskFinished())
taskData[0]++; tState++;
break; break;
case 11: case 11:
if (++taskData[1] > 5) if (++tTimer > 5)
{ {
gSoftResetDisabled = FALSE; gSoftResetDisabled = FALSE;
DestroyTask(taskId); DestroyTask(taskId);
@@ -972,3 +976,7 @@ void sub_8153688(u8 taskId)
break; break;
} }
} }
#undef tState
#undef tTimer
#undef tPartialSave
+4 -4
View File
@@ -1185,22 +1185,22 @@ bool8 ScrCmd_setobjectmovementtype(struct ScriptContext *ctx)
bool8 ScrCmd_createvobject(struct ScriptContext *ctx) bool8 ScrCmd_createvobject(struct ScriptContext *ctx)
{ {
u8 graphicsId = ScriptReadByte(ctx); u8 graphicsId = ScriptReadByte(ctx);
u8 v2 = ScriptReadByte(ctx); u8 objectEventId = ScriptReadByte(ctx);
u16 x = VarGet(ScriptReadHalfword(ctx)); u16 x = VarGet(ScriptReadHalfword(ctx));
u32 y = VarGet(ScriptReadHalfword(ctx)); u32 y = VarGet(ScriptReadHalfword(ctx));
u8 elevation = ScriptReadByte(ctx); u8 elevation = ScriptReadByte(ctx);
u8 direction = ScriptReadByte(ctx); u8 direction = ScriptReadByte(ctx);
sprite_new(graphicsId, v2, x, y, elevation, direction); CreateObjectSprite(graphicsId, objectEventId, x, y, elevation, direction);
return FALSE; return FALSE;
} }
bool8 ScrCmd_turnvobject(struct ScriptContext *ctx) bool8 ScrCmd_turnvobject(struct ScriptContext *ctx)
{ {
u8 v1 = ScriptReadByte(ctx); u8 objectEventId = ScriptReadByte(ctx);
u8 direction = ScriptReadByte(ctx); u8 direction = ScriptReadByte(ctx);
sub_8097B78(v1, direction); TurnObjectEventSprite(objectEventId, direction);
return FALSE; return FALSE;
} }
+41 -37
View File
@@ -133,8 +133,8 @@ static u8 BattlePyramidRetireInputCallback(void);
// Task callbacks // Task callbacks
static void StartMenuTask(u8 taskId); static void StartMenuTask(u8 taskId);
static void SaveGameTask(u8 taskId); static void SaveGameTask(u8 taskId);
static void sub_80A0550(u8 taskId); static void Task_SaveAfterLinkBattle(u8 taskId);
static void sub_80A08A4(u8 taskId); static void Task_WaitForBattleTowerLinkSave(u8 taskId);
static bool8 FieldCB_ReturnToFieldStartMenu(void); static bool8 FieldCB_ReturnToFieldStartMenu(void);
static const struct WindowTemplate sSafariBallsWindowTemplate = {0, 1, 1, 9, 4, 0xF, 8}; static const struct WindowTemplate sSafariBallsWindowTemplate = {0, 1, 1, 9, 4, 0xF, 8};
@@ -219,8 +219,8 @@ static bool8 SaveSuccesTimer(void);
static bool8 SaveErrorTimer(void); static bool8 SaveErrorTimer(void);
static void InitBattlePyramidRetire(void); static void InitBattlePyramidRetire(void);
static void sub_80A03D8(void); static void sub_80A03D8(void);
static bool32 sub_80A03E4(u8 *par1); static bool32 InitSaveWindowAfterLinkBattle(u8 *par1);
static void sub_80A0540(void); static void CB2_SaveAfterLinkBattle(void);
static void ShowSaveInfoWindow(void); static void ShowSaveInfoWindow(void);
static void RemoveSaveInfoWindow(void); static void RemoveSaveInfoWindow(void);
static void HideStartMenuWindow(void); static void HideStartMenuWindow(void);
@@ -525,7 +525,7 @@ void Task_ShowStartMenu(u8 taskId)
{ {
case 0: case 0:
if (InUnionRoom() == TRUE) if (InUnionRoom() == TRUE)
var_800D_set_xB(); SetUsingUnionRoomStartMenu();
gMenuCallback = HandleStartMenuInput; gMenuCallback = HandleStartMenuInput;
task->data[0]++; task->data[0]++;
@@ -1159,9 +1159,9 @@ static void sub_80A03D8(void)
TransferPlttBuffer(); TransferPlttBuffer();
} }
static bool32 sub_80A03E4(u8 *par1) static bool32 InitSaveWindowAfterLinkBattle(u8 *state)
{ {
switch (*par1) switch (*state)
{ {
case 0: case 0:
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0); SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0);
@@ -1193,43 +1193,43 @@ static bool32 sub_80A03E4(u8 *par1)
return TRUE; return TRUE;
} }
(*par1)++; (*state)++;
return FALSE; return FALSE;
} }
void sub_80A0514(void) void CB2_SetUpSaveAfterLinkBattle(void)
{ {
if (sub_80A03E4(&gMain.state)) if (InitSaveWindowAfterLinkBattle(&gMain.state))
{ {
CreateTask(sub_80A0550, 0x50); CreateTask(Task_SaveAfterLinkBattle, 0x50);
SetMainCallback2(sub_80A0540); SetMainCallback2(CB2_SaveAfterLinkBattle);
} }
} }
static void sub_80A0540(void) static void CB2_SaveAfterLinkBattle(void)
{ {
RunTasks(); RunTasks();
UpdatePaletteFade(); UpdatePaletteFade();
} }
static void sub_80A0550(u8 taskId) static void Task_SaveAfterLinkBattle(u8 taskId)
{ {
s16 *step = gTasks[taskId].data; s16 *state = gTasks[taskId].data;
if (!gPaletteFade.active) if (!gPaletteFade.active)
{ {
switch (*step) switch (*state)
{ {
case 0: case 0:
FillWindowPixelBuffer(0, PIXEL_FILL(1)); FillWindowPixelBuffer(0, PIXEL_FILL(1));
AddTextPrinterParameterized2(0, AddTextPrinterParameterized2(0,
1, 1,
gText_SavingDontTurnOffPower, gText_SavingDontTurnOffPower,
255, TEXT_SPEED_FF,
NULL, NULL,
2, TEXT_COLOR_DARK_GREY,
1, TEXT_COLOR_WHITE,
3); TEXT_COLOR_LIGHT_GREY);
DrawTextBorderOuter(0, 8, 14); DrawTextBorderOuter(0, 8, 14);
PutWindowTilemap(0); PutWindowTilemap(0);
CopyWindowToVram(0, 3); CopyWindowToVram(0, 3);
@@ -1237,37 +1237,37 @@ static void sub_80A0550(u8 taskId)
if (gWirelessCommType != 0 && InUnionRoom()) if (gWirelessCommType != 0 && InUnionRoom())
{ {
if (sub_800A07C()) if (Link_AnyPartnersPlayingFRLG_JP())
{ {
*step = 1; *state = 1;
} }
else else
{ {
*step = 5; *state = 5;
} }
} }
else else
{ {
gSoftResetDisabled = 1; gSoftResetDisabled = 1;
*step = 1; *state = 1;
} }
break; break;
case 1: case 1:
SetContinueGameWarpStatusToDynamicWarp(); SetContinueGameWarpStatusToDynamicWarp();
FullSaveGame(); FullSaveGame();
*step = 2; *state = 2;
break; break;
case 2: case 2:
if (CheckSaveFile()) if (CheckSaveFile())
{ {
ClearContinueGameWarpStatus2(); ClearContinueGameWarpStatus2();
*step = 3; *state = 3;
gSoftResetDisabled = 0; gSoftResetDisabled = 0;
} }
break; break;
case 3: case 3:
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
*step = 4; *state = 4;
break; break;
case 4: case 4:
FreeAllWindowBuffers(); FreeAllWindowBuffers();
@@ -1275,13 +1275,13 @@ static void sub_80A0550(u8 taskId)
DestroyTask(taskId); DestroyTask(taskId);
break; break;
case 5: case 5:
CreateTask(sub_8153688, 0x5); CreateTask(Task_LinkSave, 5);
*step = 6; *state = 6;
break; break;
case 6: case 6:
if (!FuncIsActiveTask(sub_8153688)) if (!FuncIsActiveTask(Task_LinkSave))
{ {
*step = 3; *state = 3;
} }
break; break;
} }
@@ -1357,22 +1357,26 @@ static void RemoveSaveInfoWindow(void)
RemoveWindow(sSaveInfoWindowId); RemoveWindow(sSaveInfoWindowId);
} }
static void sub_80A08A4(u8 taskId) static void Task_WaitForBattleTowerLinkSave(u8 taskId)
{ {
if (!FuncIsActiveTask(sub_8153688)) if (!FuncIsActiveTask(Task_LinkSave))
{ {
DestroyTask(taskId); DestroyTask(taskId);
EnableBothScriptContexts(); EnableBothScriptContexts();
} }
} }
void sub_80A08CC(void) #define tPartialSave data[2]
void SaveForBattleTowerLink(void)
{ {
u8 taskId = CreateTask(sub_8153688, 0x5); u8 taskId = CreateTask(Task_LinkSave, 5);
gTasks[taskId].data[2] = 1; gTasks[taskId].tPartialSave = TRUE;
gTasks[CreateTask(sub_80A08A4, 0x6)].data[1] = taskId; gTasks[CreateTask(Task_WaitForBattleTowerLinkSave, 6)].data[1] = taskId;
} }
#undef tPartialSave
static void HideStartMenuWindow(void) static void HideStartMenuWindow(void)
{ {
ClearStdWindowAndFrame(GetStartMenuWindowId(), TRUE); ClearStdWindowAndFrame(GetStartMenuWindowId(), TRUE);
+5 -5
View File
@@ -1261,10 +1261,10 @@ const u8 gJPText_PlayersXPokemon[] = _("{SPECIAL_F7 0x00}の{SPECIAL_F7 0x01}ひ
const u8 gJPText_PlayersXPokmonDoesNotExist[] = _("{SPECIAL_F7 0x00}の{SPECIAL_F7 0x01}ひきめは いません"); // Unused const u8 gJPText_PlayersXPokmonDoesNotExist[] = _("{SPECIAL_F7 0x00}の{SPECIAL_F7 0x01}ひきめは いません"); // Unused
const u8 gText_ExitingChat[] = _("Exiting the chat…"); const u8 gText_ExitingChat[] = _("Exiting the chat…");
const u8 gText_LeaderLeftEndingChat[] = _("The LEADER, {SPECIAL_F7 0x00}, has\nleft, ending the chat."); const u8 gText_LeaderLeftEndingChat[] = _("The LEADER, {SPECIAL_F7 0x00}, has\nleft, ending the chat.");
const u8 gText_RegisteredTextChanged[] = _("The registered text has been changed.\nIs it okay to save the game?"); const u8 gText_RegisteredTextChangedOKToSave[] = _("The registered text has been changed.\nIs it okay to save the game?");
const u8 gText_AlreadySavedFile_Unused[] = _("There is already a saved file.\nIs it okay to overwrite it?"); const u8 gText_AlreadySavedFile_Chat[] = _("There is already a saved file.\nIs it okay to overwrite it?");
const u8 gText_SavingDontTurnOff_Unused[] = _("SAVING…\nDON'T TURN OFF THE POWER."); const u8 gText_SavingDontTurnOff_Chat[] = _("SAVING…\nDON'T TURN OFF THE POWER.");
const u8 gText_PlayerSavedGame_Unused[] = _("{SPECIAL_F7 0x00} saved the game."); const u8 gText_PlayerSavedGame_Chat[] = _("{SPECIAL_F7 0x00} saved the game.");
const u8 gText_IfLeaderLeavesChatEnds[] = _("If the LEADER leaves, the chat\nwill end. Is that okay?"); const u8 gText_IfLeaderLeavesChatEnds[] = _("If the LEADER leaves, the chat\nwill end. Is that okay?");
const u8 gText_Hello[] = _("HELLO"); const u8 gText_Hello[] = _("HELLO");
const u8 gText_Pokemon2[] = _("POKéMON"); const u8 gText_Pokemon2[] = _("POKéMON");
@@ -1492,7 +1492,7 @@ const u8 gText_FrameTypeNumber[] = _("{COLOR GREEN}{SHADOW LIGHT_GREEN}");
const u8 gText_ButtonTypeNormal[] = _("{COLOR GREEN}{SHADOW LIGHT_GREEN}NORMAL"); const u8 gText_ButtonTypeNormal[] = _("{COLOR GREEN}{SHADOW LIGHT_GREEN}NORMAL");
const u8 gText_ButtonTypeLR[] = _("{COLOR GREEN}{SHADOW LIGHT_GREEN}LR"); const u8 gText_ButtonTypeLR[] = _("{COLOR GREEN}{SHADOW LIGHT_GREEN}LR");
const u8 gText_ButtonTypeLEqualsA[] = _("{COLOR GREEN}{SHADOW LIGHT_GREEN}L=A"); const u8 gText_ButtonTypeLEqualsA[] = _("{COLOR GREEN}{SHADOW LIGHT_GREEN}L=A");
const u8 gText_XPLink[] = _("{STR_VAR_1}P LINK"); const u8 gText_NumPlayerLink[] = _("{STR_VAR_1}P LINK");
const u8 gText_BronzeCard[] = _("BRONZE"); const u8 gText_BronzeCard[] = _("BRONZE");
const u8 gText_CopperCard[] = _("COPPER"); const u8 gText_CopperCard[] = _("COPPER");
const u8 gText_SilverCard[] = _("SILVER"); const u8 gText_SilverCard[] = _("SILVER");
+11 -10
View File
@@ -52,6 +52,7 @@
#include "constants/rgb.h" #include "constants/rgb.h"
#include "constants/species.h" #include "constants/species.h"
#include "constants/songs.h" #include "constants/songs.h"
#include "constants/union_room.h"
#define Trade_SendData(ptr) (SendBlock(bitmask_all_link_players_but_self(), ptr->linkData, 20)) #define Trade_SendData(ptr) (SendBlock(bitmask_all_link_players_but_self(), ptr->linkData, 20))
@@ -234,7 +235,7 @@ static void CB2_SaveAndEndWirelessTrade(void);
static bool8 SendLinkData(const void *linkData, u32 size) static bool8 SendLinkData(const void *linkData, u32 size)
{ {
if (gUnknown_02022C2C == 29) if (gPlayerCurrActivity == ACTIVITY_29)
{ {
rfu_NI_setSendData(lman.acceptSlot_flag, 84, linkData, size); rfu_NI_setSendData(lman.acceptSlot_flag, 84, linkData, size);
return TRUE; return TRUE;
@@ -252,7 +253,7 @@ static void sub_80771AC(u8 a0)
static bool32 sub_80771BC(void) static bool32 sub_80771BC(void)
{ {
if (gUnknown_02022C2C == 29) if (gPlayerCurrActivity == ACTIVITY_29)
{ {
if (gRfuSlotStatusNI[sub_800E87C(lman.acceptSlot_flag)]->send.state == 0) if (gRfuSlotStatusNI[sub_800E87C(lman.acceptSlot_flag)]->send.state == 0)
return TRUE; return TRUE;
@@ -288,7 +289,7 @@ static void TradeResetReceivedFlag(u32 who)
static bool32 IsWirelessTrade(void) static bool32 IsWirelessTrade(void)
{ {
if (gWirelessCommType && gUnknown_02022C2C == 29) if (gWirelessCommType && gPlayerCurrActivity == ACTIVITY_29)
return TRUE; return TRUE;
else else
return FALSE; return FALSE;
@@ -388,20 +389,20 @@ static void CB2_CreateTradeMenu(void)
if (!gReceivedRemoteLinkPlayers) if (!gReceivedRemoteLinkPlayers)
{ {
gLinkType = LINKTYPE_0x1122; gLinkType = LINKTYPE_TRADE_CONNECTING;
sTradeMenuData->timer = 0; sTradeMenuData->timer = 0;
if (gWirelessCommType) if (gWirelessCommType)
{ {
sub_800B488(); SetWirelessCommType1();
OpenLink(); OpenLink();
sub_8011BA4(); CreateTask_RfuIdle();
} }
else else
{ {
OpenLink(); OpenLink();
gMain.state++; gMain.state++;
CreateTask(task00_08081A90, 1); CreateTask(Task_WaitForLinkPlayerConnection, 1);
} }
} }
else else
@@ -437,7 +438,7 @@ static void CB2_CreateTradeMenu(void)
case 4: case 4:
if (gReceivedRemoteLinkPlayers == TRUE && IsLinkPlayerDataExchangeComplete() == TRUE) if (gReceivedRemoteLinkPlayers == TRUE && IsLinkPlayerDataExchangeComplete() == TRUE)
{ {
sub_8011BD0(); DestroyTask_RfuIdle();
CalculatePlayerPartyCount(); CalculatePlayerPartyCount();
gMain.state++; gMain.state++;
sTradeMenuData->timer = 0; sTradeMenuData->timer = 0;
@@ -2749,7 +2750,7 @@ void CB2_LinkTrade(void)
case 0: case 0:
if (!gReceivedRemoteLinkPlayers) if (!gReceivedRemoteLinkPlayers)
{ {
gLinkType = LINKTYPE_0x1144; gLinkType = LINKTYPE_TRADE_DISCONNECTED;
CloseLink(); CloseLink();
} }
sTradeData = AllocZeroed(sizeof(*sTradeData)); sTradeData = AllocZeroed(sizeof(*sTradeData));
@@ -4596,7 +4597,7 @@ static void CB2_SaveAndEndTrade(void)
IncrementGameStat(GAME_STAT_POKEMON_TRADES); IncrementGameStat(GAME_STAT_POKEMON_TRADES);
if (gWirelessCommType) if (gWirelessCommType)
{ {
sub_801B990(2, gLinkPlayers[GetMultiplayerId() ^ 1].trainerId); RecordIdOfWonderCardSenderByEventType(2, gLinkPlayers[GetMultiplayerId() ^ 1].trainerId);
} }
SetContinueGameWarpStatusToDynamicWarp(); SetContinueGameWarpStatusToDynamicWarp();
sub_8153380(); sub_8153380();
+1904 -1740
View File
File diff suppressed because it is too large Load Diff
+38 -435
View File
@@ -11,134 +11,24 @@
#include "window.h" #include "window.h"
#include "text_window.h" #include "text_window.h"
#include "scanline_effect.h" #include "scanline_effect.h"
#include "m4a.h"
#include "dynamic_placeholder_text_util.h"
#include "overworld.h" #include "overworld.h"
#include "strings.h" #include "strings.h"
#include "string_util.h"
#include "international_string_util.h"
#include "sound.h"
#include "constants/songs.h"
#include "party_menu.h" #include "party_menu.h"
#include "battle_setup.h" #include "battle_setup.h"
#include "link.h" #include "link.h"
#include "union_room.h" #include "union_room.h"
#include "union_room_battle.h" #include "union_room_battle.h"
#include "constants/rgb.h"
#include "constants/trainers.h"
struct UnkStruct_3000DAC struct UnionRoomBattle
{ {
/*0x00*/ u32 unk00[4]; s16 textState;
/*0x10*/ u32 unk10[4];
/*0x20*/ u32 unk20[16];
/*0x60*/ u8 taskId;
/*0x61*/ u8 unk61;
/*0x62*/ u8 filler_62[10];
}; };
struct UnkStruct_2022C6C static EWRAM_DATA struct UnionRoomBattle * sBattle = NULL;
{
s16 a0;
};
static struct UnkStruct_3000DAC * gUnknown_03000DAC; static const struct BgTemplate sBgTemplates[] = {
EWRAM_DATA struct UnkStruct_2022C6C * gUnknown_02022C6C = NULL;
void sub_801A43C(void);
void sub_801A6C0(u8 taskId);
static void sub_801A8B0(u8 windowId, u8 fontId, const u8 * str, u8 x, u8 y, u8 mode);
bool32 sub_801AA30(u32 * a0, u32 * a1, u32 * a2, u8 taskId);
const u16 gWirelessInfoScreenPal[] = INCBIN_U16("graphics/interface/wireless_info_screen.gbapal");
const u32 gWirelessInfoScreenGfx[] = INCBIN_U32("graphics/interface/wireless_info_screen.4bpp.lz");
const u32 gWirelessInfoScreenTilemap[] = INCBIN_U32("graphics/interface/wireless_info_screen.bin.lz");
const struct BgTemplate gUnknown_082F0D34[] = {
{
.bg = 0,
.charBaseIndex = 2,
.mapBaseIndex = 0x1F,
.priority = 0
}, {
.bg = 1,
.charBaseIndex = 0,
.mapBaseIndex = 0x08,
.priority = 1
}
};
const struct WindowTemplate gUnknown_082F0D3C[] = {
{
.bg = 0x00,
.tilemapLeft = 0x03,
.tilemapTop = 0x00,
.width = 0x18,
.height = 0x03,
.paletteNum = 0x0f,
.baseBlock = 0x0001
}, {
.bg = 0x00,
.tilemapLeft = 0x03,
.tilemapTop = 0x04,
.width = 0x15,
.height = 0x0f,
.paletteNum = 0x0f,
.baseBlock = 0x0049
}, {
.bg = 0x00,
.tilemapLeft = 0x18,
.tilemapTop = 0x04,
.width = 0x03,
.height = 0x0f,
.paletteNum = 0x0f,
.baseBlock = 0x0184
},
{ 0xFF }
};
const u8 *const gUnknown_082F0D5C[] = {
gText_WirelessCommStatus,
gText_PeopleTrading,
gText_PeopleBattling,
gText_PeopleInUnionRoom,
gText_PeopleCommunicating
};
const u8 gUnknown_082F0D70[][3] = {
{0x01, 0x01, 0x02},
{0x02, 0x01, 0x02},
{0x03, 0x01, 0x04},
{0x04, 0x00, 0x02},
{0x06, 0x03, 0x02},
{0x07, 0x03, 0x02},
{0x09, 0x03, 0x00},
{0x0a, 0x03, 0x00},
{0x0b, 0x03, 0x00},
{0x0c, 0xff, 0x00},
{0x0d, 0x00, 0x00},
{0x10, 0x03, 0x00},
{0x0f, 0x03, 0x00},
{0x40, 0x02, 0x01},
{0x41, 0x02, 0x02},
{0x44, 0x02, 0x02},
{0x45, 0x02, 0x00},
{0x48, 0x02, 0x02},
{0x54, 0x02, 0x01},
{0x53, 0x02, 0x02},
{0x51, 0x02, 0x01},
{0x52, 0x02, 0x01},
{0x15, 0x03, 0x02},
{0x16, 0x03, 0x02},
{0x17, 0x03, 0x00},
{0x18, 0x03, 0x00},
{0x19, 0x03, 0x00},
{0x1a, 0x03, 0x00},
{0x1b, 0x03, 0x00},
{0x1c, 0x01, 0x02},
{0x0e, 0x01, 0x02}
};
const struct BgTemplate gUnknown_082F0DD0[] = {
{ {
.bg = 0, .bg = 0,
.charBaseIndex = 3, .charBaseIndex = 3,
@@ -146,7 +36,7 @@ const struct BgTemplate gUnknown_082F0DD0[] = {
} }
}; };
const struct WindowTemplate gUnknown_082F0DD4[] = { static const struct WindowTemplate sWindowTemplates[] = {
{ {
.bg = 0, .bg = 0,
.tilemapLeft = 3, .tilemapLeft = 3,
@@ -156,301 +46,15 @@ const struct WindowTemplate gUnknown_082F0DD4[] = {
.paletteNum = 0xE, .paletteNum = 0xE,
.baseBlock = 0x014 .baseBlock = 0x014
}, },
{ 0xFF } DUMMY_WIN_TEMPLATE
}; };
const u8 gUnknown_082F0DE4[] = { 1, 2, 3 }; static const u8 sTextColors[] = { TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GREY, TEXT_COLOR_LIGHT_GREY };
void sub_801A3F4(void) static void CB2_SetUpPartiesAndStartBattle(void)
{
if (!IsDma3ManagerBusyWithBgCopy())
{
RunTasks();
RunTextPrinters();
AnimateSprites();
BuildOamBuffer();
UpdatePaletteFade();
}
}
void sub_801A418(void)
{
LoadOam();
ProcessSpriteCopyRequests();
TransferPlttBuffer();
}
void sub_801A42C(void)
{
SetMainCallback2(sub_801A43C);
}
void sub_801A43C(void)
{
SetGpuReg(REG_OFFSET_DISPCNT, 0x0000);
gUnknown_03000DAC = AllocZeroed(sizeof(struct UnkStruct_3000DAC));
SetVBlankCallback(NULL);
ResetBgsAndClearDma3BusyFlags(0);
InitBgsFromTemplates(0, gUnknown_082F0D34, ARRAY_COUNT(gUnknown_082F0D34));
SetBgTilemapBuffer(1, Alloc(0x800));
SetBgTilemapBuffer(0, Alloc(0x800));
DecompressAndLoadBgGfxUsingHeap(1, gWirelessInfoScreenGfx, 0, 0, 0);
CopyToBgTilemapBuffer(1, gWirelessInfoScreenTilemap, 0, 0);
InitWindows(gUnknown_082F0D3C);
DeactivateAllTextPrinters();
ResetPaletteFade();
ResetSpriteData();
ResetTasks();
ScanlineEffect_Stop();
m4aSoundVSyncOn();
SetVBlankCallback(sub_801A418);
gUnknown_03000DAC->taskId = CreateTask(sub_801A6C0, 0);
gUnknown_03000DAC->unk61 = sub_8013C40();
gUnknown_03000DAC->unk10[3] = 1;
ChangeBgX(0, 0, 0);
ChangeBgY(0, 0, 0);
ChangeBgX(1, 0, 0);
ChangeBgY(1, 0, 0);
LoadPalette(gWirelessInfoScreenPal, 0x00, 0x20);
Menu_LoadStdPalAt(0xF0);
DynamicPlaceholderTextUtil_Reset();
FillBgTilemapBufferRect(0, 0, 0, 0, 32, 32, 0x0F);
CopyBgTilemapBufferToVram(1);
SetMainCallback2(sub_801A3F4);
RunTasks();
RunTextPrinters();
AnimateSprites();
BuildOamBuffer();
UpdatePaletteFade();
}
void sub_801A584(void)
{ {
s32 i; s32 i;
FreeAllWindowBuffers(); StartUnionRoomBattle(BATTLE_TYPE_LINK | BATTLE_TYPE_TRAINER);
for (i = 0; i < 2; i++)
{
Free(GetBgTilemapBuffer(i));
}
Free(gUnknown_03000DAC);
SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic);
}
void sub_801A5BC(s16 * a0, s16 * a1)
{
if (++(*a0) > 5)
{
if (++(*a1) == 14)
{
*a1 = 0;
}
*a0 = 0;
}
LoadPalette(gWirelessInfoScreenPal + 16 * (*a1 + 2), 0, 0x10);
}
void sub_801A600(void)
{
s32 i;
FillWindowPixelBuffer(0, 0);
FillWindowPixelBuffer(1, 0);
FillWindowPixelBuffer(2, 0);
sub_801A8B0(0, 1, gUnknown_082F0D5C[0], GetStringCenterAlignXOffset(1, gUnknown_082F0D5C[0], 0xC0), 6, 3);
for (i = 0; i < 3; i++)
{
sub_801A8B0(1, 1, gUnknown_082F0D5C[i + 1], 0, 30 * i + 8, 1);
}
sub_801A8B0(1, 1, gUnknown_082F0D5C[i + 1], 0, 30 * i + 8, 2);
PutWindowTilemap(0);
CopyWindowToVram(0, 2);
PutWindowTilemap(1);
CopyWindowToVram(1, 2);
}
void sub_801A6C0(u8 taskId)
{
s32 i;
switch (gTasks[taskId].data[0])
{
case 0:
sub_801A600();
gTasks[taskId].data[0]++;
break;
case 1:
BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0);
ShowBg(1);
CopyBgTilemapBufferToVram(0);
ShowBg(0);
gTasks[taskId].data[0]++;
break;
case 2:
if (!gPaletteFade.active)
{
gTasks[taskId].data[0]++;
}
break;
case 3:
if (sub_801AA30(gUnknown_03000DAC->unk00, gUnknown_03000DAC->unk10, gUnknown_03000DAC->unk20, gUnknown_03000DAC->unk61))
{
FillWindowPixelBuffer(2, 0);
for (i = 0; i < 4; i++)
{
ConvertIntToDecimalStringN(gStringVar4, gUnknown_03000DAC->unk00[i], STR_CONV_MODE_RIGHT_ALIGN, 2);
if (i != 3)
{
sub_801A8B0(2, 1, gStringVar4, 12, 30 * i + 8, 1);
}
else
{
sub_801A8B0(2, 1, gStringVar4, 12, 98, 2);
}
}
PutWindowTilemap(2);
CopyWindowToVram(2, 3);
}
if (({gMain.newKeys & A_BUTTON;}) || ({gMain.newKeys & B_BUTTON;}))
{
PlaySE(SE_SELECT);
gTasks[gUnknown_03000DAC->unk61].data[15] = 0xFF;
gTasks[taskId].data[0]++;
}
sub_801A5BC(&gTasks[taskId].data[7], &gTasks[taskId].data[8]);
break;
case 4:
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0);
gTasks[taskId].data[0]++;
break;
case 5:
if (!gPaletteFade.active)
{
SetMainCallback2(sub_801A584);
DestroyTask(taskId);
}
break;
}
}
static void sub_801A8B0(u8 windowId, u8 fontId, const u8 * str, u8 x, u8 y, u8 mode)
{
u8 color[3];
switch (mode)
{
case 0:
color[0] = 0;
color[1] = 2;
color[2] = 3;
break;
case 1:
color[0] = 0;
color[1] = 1;
color[2] = 3;
break;
case 2:
color[0] = 0;
color[1] = 4;
color[2] = 5;
break;
case 3:
color[0] = 0;
color[1] = 7;
color[2] = 6;
break;
case 4:
color[0] = 0;
color[1] = 1;
color[2] = 2;
break;
}
AddTextPrinterParameterized4(windowId, fontId, x, y, 0, 0, color, -1, str);
}
u32 sub_801A960(struct UnkStruct_x20 * a0, u32 * a1)
{
s32 i, j, r2;
u32 result = a0->unk.field_0.activity;
for (i = 0; i < (unsigned)ARRAY_COUNT(gUnknown_082F0D70); i++)
{
if (result != gUnknown_082F0D70[i][0])
{
continue;
}
if (a0->field_1A_0 != 1)
{
continue;
}
if (gUnknown_082F0D70[i][2] == 0)
{
r2 = 0;
for (j = 0; j < 4; j++)
{
if (a0->unk.field_0.child_sprite_gender[j] != 0)
{
r2++;
}
}
r2++;
a1[gUnknown_082F0D70[i][1]] += r2;
}
else
{
a1[gUnknown_082F0D70[i][1]] += gUnknown_082F0D70[i][2];
}
}
return result;
}
bool32 sub_801AA08(u32 * a0, u32 * a1)
{
s32 i;
for (i = 0; i < 4; i++)
{
if (a0[i] != a1[i])
{
return TRUE;
}
}
return FALSE;
}
bool32 sub_801AA30(u32 * a0, u32 * a1, u32 * a2, u8 taskId)
{
bool32 r8 = FALSE;
u32 sp0[4] = {0, 0, 0, 0};
struct UnkStruct_x20 ** data = (void *)gTasks[taskId].data;
s32 i;
for (i = 0; i < 16; i++)
{
u32 r1 = sub_801A960(&(*data)[i], sp0);
if (r1 != a2[i])
{
a2[i] = r1;
r8 = TRUE;
}
}
if (sub_801AA08(sp0, a1) == 0)
{
if (r8 != TRUE)
{
return FALSE;
}
}
else
{
memcpy(a0, sp0, sizeof(sp0));
memcpy(a1, sp0, sizeof(sp0));
a0[3] = a0[0] + a0[1] + a0[2] + a0[3];
}
return TRUE;
}
void sub_801AAD4(void)
{
s32 i;
sub_8014210(10);
for (i = 0; i < UNION_ROOM_PARTY_SIZE; i++) for (i = 0; i < UNION_ROOM_PARTY_SIZE; i++)
{ {
gEnemyParty[i] = gPlayerParty[gSelectedOrderFromParty[i] - 1]; gEnemyParty[i] = gPlayerParty[gSelectedOrderFromParty[i] - 1];
@@ -465,25 +69,25 @@ void sub_801AAD4(void)
} }
IncrementGameStat(GAME_STAT_NUM_UNION_ROOM_BATTLES); IncrementGameStat(GAME_STAT_NUM_UNION_ROOM_BATTLES);
CalculatePlayerPartyCount(); CalculatePlayerPartyCount();
gTrainerBattleOpponent_A = 0xC00; gTrainerBattleOpponent_A = TRAINER_UNION_ROOM;
SetMainCallback2(CB2_InitBattle); SetMainCallback2(CB2_InitBattle);
} }
void sub_801AB68(u8 windowId, const u8 * str, u8 x, u8 y, s32 speed) static void AddTextPrinterForUnionRoomBattle(u8 windowId, const u8 * str, u8 x, u8 y, s32 speed)
{ {
s32 letterSpacing = 0; s32 letterSpacing = 0;
s32 lineSpacing = 1; s32 lineSpacing = 1;
FillWindowPixelBuffer(windowId, (gUnknown_082F0DE4[0] << 4) | gUnknown_082F0DE4[0]); FillWindowPixelBuffer(windowId, (sTextColors[0] << 4) | sTextColors[0]);
AddTextPrinterParameterized4(windowId, 1, x, y, letterSpacing, lineSpacing, gUnknown_082F0DE4, speed, str); AddTextPrinterParameterized4(windowId, 1, x, y, letterSpacing, lineSpacing, sTextColors, speed, str);
} }
bool32 sub_801ABDC(s16 * state, const u8 * str, s32 speed) static bool32 PrintUnionRoomBattleMessage(s16 * state, const u8 * str, s32 speed)
{ {
switch (*state) switch (*state)
{ {
case 0: case 0:
DrawTextBorderOuter(0, 0x001, 0xD); DrawTextBorderOuter(0, 0x001, 0xD);
sub_801AB68(0, str, 0, 1, speed); AddTextPrinterForUnionRoomBattle(0, str, 0, 1, speed);
PutWindowTilemap(0); PutWindowTilemap(0);
CopyWindowToVram(0, 3); CopyWindowToVram(0, 3);
(*state)++; (*state)++;
@@ -499,49 +103,47 @@ bool32 sub_801ABDC(s16 * state, const u8 * str, s32 speed)
return FALSE; return FALSE;
} }
void sub_801AC40(void) static void VBlankCB_UnionRoomBattle(void)
{ {
LoadOam(); LoadOam();
ProcessSpriteCopyRequests(); ProcessSpriteCopyRequests();
TransferPlttBuffer(); TransferPlttBuffer();
} }
void sub_801AC54(void) void CB2_UnionRoomBattle(void)
{ {
switch (gMain.state) switch (gMain.state)
{ {
case 0: case 0:
SetGpuReg(REG_OFFSET_DISPCNT, 0x0000); SetGpuReg(REG_OFFSET_DISPCNT, 0x0000);
gUnknown_02022C6C = AllocZeroed(4); sBattle = AllocZeroed(sizeof(struct UnionRoomBattle));
ResetSpriteData(); ResetSpriteData();
FreeAllSpritePalettes(); FreeAllSpritePalettes();
ResetTasks(); ResetTasks();
ResetBgsAndClearDma3BusyFlags(0); ResetBgsAndClearDma3BusyFlags(0);
InitBgsFromTemplates(0, gUnknown_082F0DD0, 1); InitBgsFromTemplates(0, sBgTemplates, ARRAY_COUNT(sBgTemplates));
ResetTempTileDataBuffers(); ResetTempTileDataBuffers();
if (!InitWindows(gUnknown_082F0DD4)) if (!InitWindows(sWindowTemplates))
{
return; return;
}
DeactivateAllTextPrinters(); DeactivateAllTextPrinters();
ClearWindowTilemap(0); ClearWindowTilemap(0);
FillWindowPixelBuffer(0, 0x00); FillWindowPixelBuffer(0, PIXEL_FILL(0));
FillWindowPixelBuffer(0, 0x11); FillWindowPixelBuffer(0, PIXEL_FILL(1));
FillBgTilemapBufferRect(0, 0, 0, 0, 30, 20, 0xF); FillBgTilemapBufferRect(0, 0, 0, 0, 30, 20, 0xF);
LoadUserWindowBorderGfx(0, 1, 0xD0); LoadUserWindowBorderGfx(0, 1, 0xD0);
LoadUserWindowBorderGfx_(0, 1, 0xD0); LoadUserWindowBorderGfx_(0, 1, 0xD0);
sub_819789C(); sub_819789C();
SetVBlankCallback(sub_801AC40); SetVBlankCallback(VBlankCB_UnionRoomBattle);
gMain.state++; gMain.state++;
break; break;
case 1: case 1:
if (sub_801ABDC(&gUnknown_02022C6C->a0, gText_CommStandbyAwaitingOtherPlayer, 0)) if (PrintUnionRoomBattleMessage(&sBattle->textState, gText_CommStandbyAwaitingOtherPlayer, 0))
{ {
gMain.state++; gMain.state++;
} }
break; break;
case 2: case 2:
BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0); BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK);
ShowBg(0); ShowBg(0);
gMain.state++; gMain.state++;
break; break;
@@ -551,11 +153,11 @@ void sub_801AC54(void)
memset(gBlockSendBuffer, 0, 0x20); memset(gBlockSendBuffer, 0, 0x20);
if (gSelectedOrderFromParty[0] == -gSelectedOrderFromParty[1]) if (gSelectedOrderFromParty[0] == -gSelectedOrderFromParty[1])
{ {
gBlockSendBuffer[0] = 0x52; gBlockSendBuffer[0] = ACTIVITY_DECLINE | IN_UNION_ROOM;
} }
else else
{ {
gBlockSendBuffer[0] = 0x51; gBlockSendBuffer[0] = ACTIVITY_ACCEPT | IN_UNION_ROOM;
} }
SendBlock(0, gBlockSendBuffer, 0x20); SendBlock(0, gBlockSendBuffer, 0x20);
gMain.state++; gMain.state++;
@@ -564,15 +166,16 @@ void sub_801AC54(void)
case 4: case 4:
if (GetBlockReceivedStatus() == 3) if (GetBlockReceivedStatus() == 3)
{ {
if (gBlockRecvBuffer[0][0] == 0x51 && gBlockRecvBuffer[1][0] == 0x51) if (gBlockRecvBuffer[0][0] == (ACTIVITY_ACCEPT | IN_UNION_ROOM)
&& gBlockRecvBuffer[1][0] == (ACTIVITY_ACCEPT | IN_UNION_ROOM))
{ {
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
gMain.state = 50; gMain.state = 50;
} }
else else
{ {
sub_800AC34(); sub_800AC34();
if (gBlockRecvBuffer[GetMultiplayerId()][0] == 0x52) if (gBlockRecvBuffer[GetMultiplayerId()][0] == (ACTIVITY_DECLINE | IN_UNION_ROOM))
{ {
gMain.state = 6; gMain.state = 6;
} }
@@ -594,29 +197,29 @@ void sub_801AC54(void)
case 51: case 51:
if (IsLinkTaskFinished()) if (IsLinkTaskFinished())
{ {
SetMainCallback2(sub_801AAD4); SetMainCallback2(CB2_SetUpPartiesAndStartBattle);
} }
break; break;
case 6: case 6:
if (gReceivedRemoteLinkPlayers == 0) if (!gReceivedRemoteLinkPlayers)
{ {
gMain.state++; gMain.state++;
} }
break; break;
case 7: case 7:
if (sub_801ABDC(&gUnknown_02022C6C->a0, gText_RefusedBattle, 1)) if (PrintUnionRoomBattleMessage(&sBattle->textState, gText_RefusedBattle, 1))
{ {
SetMainCallback2(CB2_ReturnToField); SetMainCallback2(CB2_ReturnToField);
} }
break; break;
case 8: case 8:
if (gReceivedRemoteLinkPlayers == 0) if (!gReceivedRemoteLinkPlayers)
{ {
gMain.state++; gMain.state++;
} }
break; break;
case 9: case 9:
if (sub_801ABDC(&gUnknown_02022C6C->a0, gText_BattleWasRefused, 1)) if (PrintUnionRoomBattleMessage(&sBattle->textState, gText_BattleWasRefused, 1))
{ {
SetMainCallback2(CB2_ReturnToField); SetMainCallback2(CB2_ReturnToField);
} }
+1438 -1138
View File
File diff suppressed because it is too large Load Diff
+251 -238
View File
@@ -10,98 +10,124 @@
#include "constants/event_object_movement.h" #include "constants/event_object_movement.h"
#include "constants/flags.h" #include "constants/flags.h"
EWRAM_DATA struct UnkStruct_8019BA8 * gUnknown_02022C64 = NULL; #define UR_SPRITE_START_ID (MAX_SPRITES - MAX_UNION_ROOM_PLAYERS)
EWRAM_DATA u32 gUnknown_02022C68 = 0; #define UR_PLAYER_SPRITE_ID(playerIdx, facingDir)(5 * playerIdx + facingDir)
static u8 sub_8019DF4(void); static EWRAM_DATA struct UnionRoomObject * sUnionObjWork = NULL;
static u32 sub_8019F8C(u32 playerIdx, u32 arg1); static EWRAM_DATA u32 sUnionObjRefreshTimer = 0;
static void sub_801A3B0(s32 arg0, s32 arg1, u8 arg2);
ALIGNED(4) const u8 gUnknown_082F072C[][10] = { static u8 CreateTask_AnimateUnionRoomPlayers(void);
{0x21, 0x2c, 0x1f, 0x23, 0x25, 0x24, 0x41, 0x42}, static u32 IsUnionRoomPlayerInvisible(u32, u32);
{0x22, 0x28, 0x20, 0x2f, 0x2f, 0x0e, 0x14, 0x2d} static void SetUnionRoomObjectFacingDirection(s32, s32, u8);
static const u8 sUnionRoomObjGfxIds[GENDER_COUNT][MAX_UNION_ROOM_PLAYERS + 2] = {
[MALE] = {
OBJ_EVENT_GFX_MAN_3,
OBJ_EVENT_GFX_BLACK_BELT,
OBJ_EVENT_GFX_CAMPER,
OBJ_EVENT_GFX_YOUNGSTER,
OBJ_EVENT_GFX_PSYCHIC_M,
OBJ_EVENT_GFX_BUG_CATCHER,
OBJ_EVENT_GFX_MAN_4,
OBJ_EVENT_GFX_MAN_5
},
[FEMALE] = {
OBJ_EVENT_GFX_WOMAN_5,
OBJ_EVENT_GFX_HEX_MANIAC,
OBJ_EVENT_GFX_PICNICKER,
OBJ_EVENT_GFX_LASS,
OBJ_EVENT_GFX_LASS,
OBJ_EVENT_GFX_GIRL_3,
OBJ_EVENT_GFX_WOMAN_2,
OBJ_EVENT_GFX_BEAUTY
}
}; };
static const s16 gUnknown_082F0740[][2] = { static const s16 sUnionRoomPlayerCoords[MAX_UNION_ROOM_PLAYERS][2] = {
{0x4, 0x6}, { 4, 6},
{0xd, 0x8}, {13, 8},
{0xa, 0x6}, {10, 6},
{0x1, 0x8}, { 1, 8},
{0xd, 0x4}, {13, 4},
{0x7, 0x4}, { 7, 4},
{0x1, 0x4}, { 1, 4},
{0x7, 0x8} { 7, 8}
}; };
static const s8 gUnknown_082F0760[][2] = { static const s8 sFacingDirectionOffsets[][2] = {
{ 0, 0}, [DIR_NONE] = { 0, 0},
{ 1, 0}, [DIR_SOUTH] = { 1, 0},
{ 0, -1}, [DIR_NORTH] = { 0, -1},
{-1, 0}, [DIR_WEST] = {-1, 0},
{ 0, 1} [DIR_EAST] = { 0, 1}
}; };
static const u8 gUnknown_082F076A[] = { static const u8 sOppositeFacingDirection[] = {
0x00, 0x02, 0x01, 0x04, 0x03 [DIR_NONE] = DIR_NONE,
[DIR_SOUTH] = DIR_NORTH,
[DIR_NORTH] = DIR_SOUTH,
[DIR_WEST] = DIR_EAST,
[DIR_EAST] = DIR_WEST
}; };
static const u8 gUnknown_082F076F[] = { static const u8 sNextFacingDirection[] = {
0x01, 0x03, 0x01, 0x04, 0x02 [DIR_NONE] = DIR_SOUTH,
[DIR_SOUTH] = DIR_WEST,
[DIR_NORTH] = DIR_SOUTH,
[DIR_WEST] = DIR_EAST,
[DIR_EAST] = DIR_NORTH
}; };
static const u8 gUnknown_082F0774[] = { // Local id 1 is the Nurse/Attendant, 2-9 are link players
0x09, 0x08, 0x07, 0x02, 0x06, 0x05, 0x04, 0x03, static const u8 sUnionRoomLocalIds[] = { 9, 8, 7, 2, 6, 5, 4, 3 };
0xbf, 0x02, 0xc0, 0x02, 0xc1, 0x02, 0xc2, 0x02,
0xc3, 0x02, 0xc4, 0x02, 0xc5, 0x02, 0xc6, 0x02 static const u16 sUnknown[] = {
0x2BF,
0x2C0,
0x2C1,
0x2C2,
0x2C3,
0x2C4,
0x2C5,
0x2C6
}; };
static const u8 gUnknown_082F078C[2] = { static const u8 sMovement_UnionPlayerExit[2] = {
MOVEMENT_ACTION_FLY_UP, MOVEMENT_ACTION_FLY_UP,
MOVEMENT_ACTION_STEP_END MOVEMENT_ACTION_STEP_END
}; };
static const u8 gUnknown_082F078E[2] = { static const u8 sMovement_UnionPlayerEnter[2] = {
MOVEMENT_ACTION_FLY_DOWN, MOVEMENT_ACTION_FLY_DOWN,
MOVEMENT_ACTION_STEP_END MOVEMENT_ACTION_STEP_END
}; };
static bool32 is_walking_or_running(void) static bool32 IsPlayerStandingStill(void)
{ {
if (gPlayerAvatar.tileTransitionState == 2 || gPlayerAvatar.tileTransitionState == 0) if (gPlayerAvatar.tileTransitionState == T_TILE_CENTER || gPlayerAvatar.tileTransitionState == T_NOT_MOVING)
{
return TRUE; return TRUE;
}
else else
{
return FALSE; return FALSE;
}
} }
static u8 sub_8019978(u32 a0, u32 a1) static u8 GetUnionRoomPlayerGraphicsId(u32 gender, u32 id)
{ {
return gUnknown_082F072C[a0][a1 % 8]; return sUnionRoomObjGfxIds[gender][id % MAX_UNION_ROOM_PLAYERS];
} }
static void sub_8019990(u32 a0, u32 a1, s32 * a2, s32 * a3) static void GetUnionRoomPlayerFacingCoords(u32 playerIdx, u32 direction, s32 * x, s32 * y)
{ {
*a2 = gUnknown_082F0740[a0][0] + gUnknown_082F0760[a1][0] + 7; *x = sUnionRoomPlayerCoords[playerIdx][0] + sFacingDirectionOffsets[direction][0] + 7;
*a3 = gUnknown_082F0740[a0][1] + gUnknown_082F0760[a1][1] + 7; *y = sUnionRoomPlayerCoords[playerIdx][1] + sFacingDirectionOffsets[direction][1] + 7;
} }
static bool32 sub_80199E0(u32 a0, u32 a1, s32 a2, s32 a3) static bool32 IsUnionRoomPlayerFacingTileAt(u32 playerIdx, u32 direction, s32 x, s32 y)
{ {
if (gUnknown_082F0740[a0][0] + gUnknown_082F0760[a1][0] + 7 != a2) if ((sUnionRoomPlayerCoords[playerIdx][0] + sFacingDirectionOffsets[direction][0] + 7 == x)
{ && (sUnionRoomPlayerCoords[playerIdx][1] + sFacingDirectionOffsets[direction][1] + 7 == y))
return FALSE;
}
else if (gUnknown_082F0740[a0][1] + gUnknown_082F0760[a1][1] + 7 != a3)
{
return FALSE;
}
else
{
return TRUE; return TRUE;
} else
return FALSE;
} }
static bool32 IsUnionRoomPlayerHidden(u32 player_idx) static bool32 IsUnionRoomPlayerHidden(u32 player_idx)
@@ -126,19 +152,19 @@ static void SetUnionRoomPlayerGfx(u32 playerIdx, u32 gfxId)
static void CreateUnionRoomPlayerObjectEvent(u32 playerIdx) static void CreateUnionRoomPlayerObjectEvent(u32 playerIdx)
{ {
TrySpawnObjectEvent(gUnknown_082F0774[playerIdx], gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup); TrySpawnObjectEvent(sUnionRoomLocalIds[playerIdx], gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup);
} }
static void RemoveUnionRoomPlayerObjectEvent(u32 playerIdx) static void RemoveUnionRoomPlayerObjectEvent(u32 playerIdx)
{ {
RemoveObjectEventByLocalIdAndMap(gUnknown_082F0774[playerIdx], gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup); RemoveObjectEventByLocalIdAndMap(sUnionRoomLocalIds[playerIdx], gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup);
} }
static bool32 SetUnionRoomPlayerEnterExitMovement(u32 playerIdx, const u8 * movement) static bool32 SetUnionRoomPlayerEnterExitMovement(u32 playerIdx, const u8 * movement)
{ {
u8 objectId; u8 objectId;
struct ObjectEvent * object; struct ObjectEvent * object;
if (TryGetObjectEventIdByLocalIdAndMap(gUnknown_082F0774[playerIdx], gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, &objectId)) if (TryGetObjectEventIdByLocalIdAndMap(sUnionRoomLocalIds[playerIdx], gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, &objectId))
{ {
return FALSE; return FALSE;
} }
@@ -154,11 +180,11 @@ static bool32 SetUnionRoomPlayerEnterExitMovement(u32 playerIdx, const u8 * move
return TRUE; return TRUE;
} }
static bool32 sub_8019B3C(u32 playerIdx) static bool32 TryReleaseUnionRoomPlayerObjectEvent(u32 playerIdx)
{ {
u8 objectId; u8 objectId;
struct ObjectEvent * object; struct ObjectEvent * object;
if (TryGetObjectEventIdByLocalIdAndMap(gUnknown_082F0774[playerIdx], gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, &objectId)) if (TryGetObjectEventIdByLocalIdAndMap(sUnionRoomLocalIds[playerIdx], gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, &objectId))
{ {
return TRUE; return TRUE;
} }
@@ -178,39 +204,39 @@ static bool32 sub_8019B3C(u32 playerIdx)
return TRUE; return TRUE;
} }
u8 sub_8019BA8(struct UnkStruct_8019BA8 * ptr) u8 InitUnionRoomPlayerObjects(struct UnionRoomObject * players)
{ {
s32 i; s32 i;
gUnknown_02022C68 = 0; sUnionObjRefreshTimer = 0;
gUnknown_02022C64 = ptr; sUnionObjWork = players;
for (i = 0; i < 8; i++) for (i = 0; i < MAX_UNION_ROOM_PLAYERS; i++)
{ {
ptr[i].field_0 = 0; players[i].state = 0;
ptr[i].field_1 = 0; players[i].gfxId = 0;
ptr[i].field_2 = 0; players[i].animState = 0;
ptr[i].field_3 = 0; players[i].schedAnim = UNION_ROOM_SPAWN_NONE;
} }
return sub_8019DF4(); return CreateTask_AnimateUnionRoomPlayers();
} }
static bool32 sub_8019BDC(s8 * a0, u32 playerIdx, struct UnkStruct_8019BA8 * ptr) static bool32 AnimateUnionRoomPlayerDespawn(s8 * state, u32 playerIdx, struct UnionRoomObject * ptr)
{ {
switch (*a0) switch (*state)
{ {
case 0: case 0:
if (SetUnionRoomPlayerEnterExitMovement(playerIdx, gUnknown_082F078C) == TRUE) if (SetUnionRoomPlayerEnterExitMovement(playerIdx, sMovement_UnionPlayerExit) == TRUE)
{ {
HideUnionRoomPlayer(playerIdx); HideUnionRoomPlayer(playerIdx);
(*a0)++; (*state)++;
} }
break; break;
case 1: case 1:
if (sub_8019B3C(playerIdx)) if (TryReleaseUnionRoomPlayerObjectEvent(playerIdx))
{ {
RemoveUnionRoomPlayerObjectEvent(playerIdx); RemoveUnionRoomPlayerObjectEvent(playerIdx);
HideUnionRoomPlayer(playerIdx); HideUnionRoomPlayer(playerIdx);
*a0 = 0; *state = 0;
return TRUE; return TRUE;
} }
break; break;
@@ -218,42 +244,42 @@ static bool32 sub_8019BDC(s8 * a0, u32 playerIdx, struct UnkStruct_8019BA8 * ptr
return FALSE; return FALSE;
} }
static bool32 sub_8019C38(s8 * a0, u32 playerIdx, struct UnkStruct_8019BA8 * ptr) static bool32 AnimateUnionRoomPlayerSpawn(s8 * state, u32 playerIdx, struct UnionRoomObject * ptr)
{ {
s16 x, y; s16 x, y;
switch (*a0) switch (*state)
{ {
case 0: case 0:
if (!is_walking_or_running()) if (!IsPlayerStandingStill())
{ {
break; break;
} }
PlayerGetDestCoords(&x, &y); PlayerGetDestCoords(&x, &y);
if (sub_80199E0(playerIdx, 0, x, y) == 1) if (IsUnionRoomPlayerFacingTileAt(playerIdx, 0, x, y) == TRUE)
{ {
break; break;
} }
player_get_pos_including_state_based_drift(&x, &y); player_get_pos_including_state_based_drift(&x, &y);
if (sub_80199E0(playerIdx, 0, x, y) == 1) if (IsUnionRoomPlayerFacingTileAt(playerIdx, 0, x, y) == TRUE)
{ {
break; break;
} }
SetUnionRoomPlayerGfx(playerIdx, ptr->field_1); SetUnionRoomPlayerGfx(playerIdx, ptr->gfxId);
CreateUnionRoomPlayerObjectEvent(playerIdx); CreateUnionRoomPlayerObjectEvent(playerIdx);
ShowUnionRoomPlayer(playerIdx); ShowUnionRoomPlayer(playerIdx);
(*a0)++; (*state)++;
// fallthrough // fallthrough
case 3: // incorrect? case 3: // incorrect?
if (SetUnionRoomPlayerEnterExitMovement(playerIdx, gUnknown_082F078E) == 1) if (SetUnionRoomPlayerEnterExitMovement(playerIdx, sMovement_UnionPlayerEnter) == TRUE)
{ {
(*a0)++; (*state)++;
} }
break; break;
case 2: case 2:
if (sub_8019B3C(playerIdx)) if (TryReleaseUnionRoomPlayerObjectEvent(playerIdx))
{ {
*a0 = 0; *state = 0;
return TRUE; return TRUE;
} }
break; break;
@@ -261,44 +287,38 @@ static bool32 sub_8019C38(s8 * a0, u32 playerIdx, struct UnkStruct_8019BA8 * ptr
return FALSE; return FALSE;
} }
static bool32 sub_8019CF0(u32 playerIdx, u32 a1, u32 a2) static bool32 SpawnGroupLeader(u32 playerIdx, u32 gender, u32 id)
{ {
struct UnkStruct_8019BA8 * ptr = &gUnknown_02022C64[playerIdx]; struct UnionRoomObject * ptr = &sUnionObjWork[playerIdx];
ptr->field_3 = 1; ptr->schedAnim = UNION_ROOM_SPAWN_IN;
ptr->field_1 = sub_8019978(a1, a2); ptr->gfxId = GetUnionRoomPlayerGraphicsId(gender, id);
if (ptr->field_0 == 0)
{ if (ptr->state == 0)
return TRUE; return TRUE;
}
else else
{
return FALSE; return FALSE;
}
} }
static bool32 sub_8019D20(u32 playerIdx) static bool32 DespawnGroupLeader(u32 playerIdx)
{ {
struct UnkStruct_8019BA8 * ptr = &gUnknown_02022C64[playerIdx]; struct UnionRoomObject * ptr = &sUnionObjWork[playerIdx];
ptr->field_3 = 2; ptr->schedAnim = UNION_ROOM_SPAWN_OUT;
if (ptr->field_0 == 1)
{ if (ptr->state == 1)
return TRUE; return TRUE;
}
else else
{
return FALSE; return FALSE;
}
} }
static void sub_8019D44(u32 playerIdx, struct UnkStruct_8019BA8 * ptr) static void AnimateUnionRoomPlayer(u32 playerIdx, struct UnionRoomObject * ptr)
{ {
switch (ptr->field_0) switch (ptr->state)
{ {
case 0: case 0:
if (ptr->field_3 == 1) if (ptr->schedAnim == UNION_ROOM_SPAWN_IN)
{ {
ptr->field_0 = 2; ptr->state = 2;
ptr->field_2 = 0; ptr->animState = 0;
} }
else else
{ {
@@ -306,23 +326,23 @@ static void sub_8019D44(u32 playerIdx, struct UnkStruct_8019BA8 * ptr)
} }
// fallthrough // fallthrough
case 2: case 2:
if (!sub_8019F8C(playerIdx, 0) && ptr->field_3 == 2) if (!IsUnionRoomPlayerInvisible(playerIdx, 0) && ptr->schedAnim == UNION_ROOM_SPAWN_OUT)
{ {
ptr->field_0 = 0; ptr->state = 0;
ptr->field_2 = 0; ptr->animState = 0;
RemoveUnionRoomPlayerObjectEvent(playerIdx); RemoveUnionRoomPlayerObjectEvent(playerIdx);
HideUnionRoomPlayer(playerIdx); HideUnionRoomPlayer(playerIdx);
} }
else if (sub_8019C38(&ptr->field_2, playerIdx, ptr) == 1) else if (AnimateUnionRoomPlayerSpawn(&ptr->animState, playerIdx, ptr) == TRUE)
{ {
ptr->field_0 = 1; ptr->state = 1;
} }
break; break;
case 1: case 1:
if (ptr->field_3 == 2) if (ptr->schedAnim == UNION_ROOM_SPAWN_OUT)
{ {
ptr->field_0 = 3; ptr->state = 3;
ptr->field_2 = 0; ptr->animState = 0;
} }
else else
{ {
@@ -330,49 +350,43 @@ static void sub_8019D44(u32 playerIdx, struct UnkStruct_8019BA8 * ptr)
} }
// fallthrough // fallthrough
case 3: case 3:
if (sub_8019BDC(&ptr->field_2, playerIdx, ptr) == 1) if (AnimateUnionRoomPlayerDespawn(&ptr->animState, playerIdx, ptr) == 1)
{ {
ptr->field_0 = 0; ptr->state = 0;
} }
break; break;
} }
ptr->field_3 = 0; ptr->schedAnim = UNION_ROOM_SPAWN_NONE;
} }
static void sub_8019DD0(u8 taskId) static void Task_AnimateUnionRoomPlayers(u8 taskId)
{ {
s32 i; s32 i;
for (i = 0; i < 8; i++) for (i = 0; i < MAX_UNION_ROOM_PLAYERS; i++)
{ AnimateUnionRoomPlayer(i, &sUnionObjWork[i]);
sub_8019D44(i, &gUnknown_02022C64[i]);
}
} }
static u8 sub_8019DF4(void) static u8 CreateTask_AnimateUnionRoomPlayers(void)
{ {
if (FuncIsActiveTask(sub_8019DD0) == 1) if (FuncIsActiveTask(Task_AnimateUnionRoomPlayers) == TRUE)
{
return NUM_TASKS; return NUM_TASKS;
}
else else
{ return CreateTask(Task_AnimateUnionRoomPlayers, 5);
return CreateTask(sub_8019DD0, 5);
}
} }
static void sub_8019E20(void) static void DestroyTask_AnimateUnionRoomPlayers(void)
{ {
u8 taskId = FindTaskIdByFunc(sub_8019DD0); u8 taskId = FindTaskIdByFunc(Task_AnimateUnionRoomPlayers);
if (taskId < NUM_TASKS) if (taskId < NUM_TASKS)
{ {
DestroyTask(taskId); DestroyTask(taskId);
} }
} }
void sub_8019E3C(void) void DestroyUnionRoomPlayerObjects(void)
{ {
s32 i; s32 i;
for (i = 0; i < 8; i++) for (i = 0; i < MAX_UNION_ROOM_PLAYERS; i++)
{ {
if (!IsUnionRoomPlayerHidden(i)) if (!IsUnionRoomPlayerHidden(i))
{ {
@@ -380,233 +394,232 @@ void sub_8019E3C(void)
HideUnionRoomPlayer(i); HideUnionRoomPlayer(i);
} }
} }
gUnknown_02022C64 = NULL; sUnionObjWork = NULL;
sub_8019E20(); DestroyTask_AnimateUnionRoomPlayers();
} }
void sub_8019E70(u8 * sp8, s32 r9) void CreateGroupMemberSpritesInvisible(u8 * spriteIds, s32 playerIdx)
{ {
s32 r7; s32 direction;
for (r7 = 0; r7 < 5; r7++) for (direction = DIR_NONE; direction <= DIR_EAST; direction++)
{ {
s32 r5 = 5 * r9 + r7; s32 id = UR_PLAYER_SPRITE_ID(playerIdx, direction);
sp8[r5] = sprite_new(OBJ_EVENT_GFX_MAN_4, r5 - 0x38, gUnknown_082F0740[r9][0] + gUnknown_082F0760[r7][0], gUnknown_082F0740[r9][1] + gUnknown_082F0760[r7][1], 3, 1); spriteIds[id] = CreateObjectSprite(OBJ_EVENT_GFX_MAN_4,
sub_8097C44(r5 - 0x38, TRUE); id - UR_SPRITE_START_ID,
sUnionRoomPlayerCoords[playerIdx][0] + sFacingDirectionOffsets[direction][0],
sUnionRoomPlayerCoords[playerIdx][1] + sFacingDirectionOffsets[direction][1],
3, 1);
SetObjectEventSpriteInvisibility(id - UR_SPRITE_START_ID, TRUE);
} }
} }
void sub_8019F04(u8 * r5) void DestroyGroupMemberSprites(u8 * spriteIds)
{ {
s32 i; s32 i;
for (i = 0; i < 40; i++) for (i = 0; i < UR_PLAYER_SPRITE_ID(MAX_UNION_ROOM_PLAYERS, 0); i++)
{ DestroySprite(&gSprites[spriteIds[i]]);
DestroySprite(&gSprites[r5[i]]);
}
} }
void sub_8019F2C(void) void SetTilesAroundUnionRoomPlayersPassable(void)
{ {
s32 i, j, x, y; s32 i, direction, x, y;
for (i = 0; i < 8; i++) for (i = 0; i < MAX_UNION_ROOM_PLAYERS; i++)
{ {
for (j = 0; j < 5; j++) for (direction = DIR_NONE; direction <= DIR_EAST; direction++)
{ {
sub_8019990(i, j, &x, &y); GetUnionRoomPlayerFacingCoords(i, direction, &x, &y);
sub_8088B94(x, y, 0); MapGridSetMetatileImpassabilityAt(x, y, FALSE);
} }
} }
} }
static u8 sub_8019F64(u32 r1, u32 unused, struct GFtgtGname * r2) static u8 GetNewFacingDirectionForUnionRoomPlayer(u32 direction, u32 playerIdx, struct GFtgtGname * gname)
{ {
if (r1 != 0) if (direction != DIR_NONE)
{ return sNextFacingDirection[direction];
return gUnknown_082F076F[r1]; else if (gname->activity == (ACTIVITY_CHAT | IN_UNION_ROOM))
} return DIR_SOUTH;
else if (r2->activity == 0x45)
{
return 1;
}
else else
{ return DIR_EAST;
return 4;
}
} }
static u32 sub_8019F8C(u32 a0, u32 a1) static bool32 IsUnionRoomPlayerInvisible(u32 playerIdx, u32 direction)
{ {
return sub_8097C8C(5 * a0 + a1 - 0x38); return IsObjectEventSpriteInvisible(UR_PLAYER_SPRITE_ID(playerIdx, direction) - UR_SPRITE_START_ID);
} }
static void sub_8019FA4(u32 r5, u32 r6, u8 r8, struct GFtgtGname * r9) static void SpawnGroupMember(u32 playerIdx, u32 direction, u8 graphicsId, struct GFtgtGname * gname)
{ {
s32 x, y; s32 x, y;
s32 r7 = 5 * r5 + r6; s32 id = UR_PLAYER_SPRITE_ID(playerIdx, direction);
if (sub_8019F8C(r5, r6) == 1) if (IsUnionRoomPlayerInvisible(playerIdx, direction) == TRUE)
{ {
sub_8097C44(r7 - 0x38, FALSE); SetObjectEventSpriteInvisibility(id - UR_SPRITE_START_ID, FALSE);
sub_8097CC4(r7 - 0x38, 1); SetObjectEventSpriteAnim(id - UR_SPRITE_START_ID, UNION_ROOM_SPAWN_IN);
} }
sub_8097BB4(r7 - 0x38, r8); SetObjectEventSpriteGraphics(id - UR_SPRITE_START_ID, graphicsId);
sub_801A3B0(r6, r5, sub_8019F64(r6, r5, r9)); SetUnionRoomObjectFacingDirection(direction, playerIdx, GetNewFacingDirectionForUnionRoomPlayer(direction, playerIdx, gname));
sub_8019990(r5, r6, &x, &y); GetUnionRoomPlayerFacingCoords(playerIdx, direction, &x, &y);
sub_8088B94(x, y, 1); MapGridSetMetatileImpassabilityAt(x, y, TRUE);
} }
static void sub_801A02C(u32 a0, u32 a1) static void DespawnGroupMember(u32 playerIdx, u32 direction)
{ {
s32 x, y; s32 x, y;
sub_8097CC4(5 * a0 + a1 - 0x38, 2); SetObjectEventSpriteAnim(UR_PLAYER_SPRITE_ID(playerIdx, direction) - UR_SPRITE_START_ID, UNION_ROOM_SPAWN_OUT);
sub_8019990(a0, a1, &x, &y); GetUnionRoomPlayerFacingCoords(playerIdx, direction, &x, &y);
sub_8088B94(x, y, 0); MapGridSetMetatileImpassabilityAt(x, y, FALSE);
} }
static void sub_801A064(u32 r7, struct GFtgtGname * r8) static void AssembleGroup(u32 playerIdx, struct GFtgtGname * gname)
{ {
s16 x, y, x2, y2; s16 x, y, x2, y2;
s32 i; s32 i;
PlayerGetDestCoords(&x, &y); PlayerGetDestCoords(&x, &y);
player_get_pos_including_state_based_drift(&x2, &y2); player_get_pos_including_state_based_drift(&x2, &y2);
if (sub_8097C8C(5 * r7 - 0x38) == 1) if (IsObjectEventSpriteInvisible(UR_PLAYER_SPRITE_ID(playerIdx, 0) - UR_SPRITE_START_ID) == TRUE)
{ {
if (sub_80199E0(r7, 0, x, y) == 1 || sub_80199E0(r7, 0, x2, y2) == 1) if (IsUnionRoomPlayerFacingTileAt(playerIdx, 0, x, y) == TRUE || IsUnionRoomPlayerFacingTileAt(playerIdx, 0, x2, y2) == TRUE)
{ {
return; return;
} }
sub_8019FA4(r7, 0, sub_8019978(r8->playerGender, r8->unk_00.playerTrainerId[0]), r8); SpawnGroupMember(playerIdx, 0, GetUnionRoomPlayerGraphicsId(gname->playerGender, gname->unk_00.playerTrainerId[0]), gname);
} }
for (i = 1; i < 5; i++) for (i = 1; i < 5; i++)
{ {
if (r8->child_sprite_gender[i - 1] == 0) if (gname->child_sprite_gender[i - 1] == 0)
{ {
sub_801A02C(r7, i); DespawnGroupMember(playerIdx, i);
} }
else if (sub_80199E0(r7, i, x, y) == 0 && sub_80199E0(r7, i, x2, y2) == 0) else if (IsUnionRoomPlayerFacingTileAt(playerIdx, i, x, y) == FALSE && IsUnionRoomPlayerFacingTileAt(playerIdx, i, x2, y2) == FALSE)
{ {
sub_8019FA4(r7, i, sub_8019978((r8->child_sprite_gender[i - 1] >> 3) & 1, r8->child_sprite_gender[i - 1] & 7), r8); SpawnGroupMember(playerIdx, i, GetUnionRoomPlayerGraphicsId((gname->child_sprite_gender[i - 1] >> 3) & 1, gname->child_sprite_gender[i - 1] & 7), gname);
} }
} }
} }
static void sub_801A16C(u32 r5, struct GFtgtGname * r4) static void SpawnGroupLeaderAndMembers(u32 playerIdx, struct GFtgtGname * gname)
{ {
u32 i; u32 i;
switch (r4->activity) switch (gname->activity)
{ {
case 0x40: case ACTIVITY_NONE | IN_UNION_ROOM:
case 0x54: case ACTIVITY_PLYRTALK | IN_UNION_ROOM:
sub_8019CF0(r5, r4->playerGender, r4->unk_00.playerTrainerId[0]); SpawnGroupLeader(playerIdx, gname->playerGender, gname->unk_00.playerTrainerId[0]);
for (i = 0; i < 5; i++) for (i = 0; i < 5; i++)
{ {
sub_801A02C(r5, i); DespawnGroupMember(playerIdx, i);
} }
break; break;
case 0x41: case ACTIVITY_BATTLE_SINGLE | IN_UNION_ROOM:
case 0x44: case ACTIVITY_TRADE | IN_UNION_ROOM:
case 0x45: case ACTIVITY_CHAT | IN_UNION_ROOM:
case 0x48: case ACTIVITY_CARD | IN_UNION_ROOM:
case 0x51: case ACTIVITY_ACCEPT | IN_UNION_ROOM:
case 0x52: case ACTIVITY_DECLINE | IN_UNION_ROOM:
case 0x53: case ACTIVITY_NPCTALK | IN_UNION_ROOM:
sub_8019D20(r5); DespawnGroupLeader(playerIdx);
sub_801A064(r5, r4); AssembleGroup(playerIdx, gname);
break; break;
} }
} }
static void sub_801A214(u32 r5, struct GFtgtGname * unused) static void DespawnGroupLeaderAndMembers(u32 r5, struct GFtgtGname *gname)
{ {
s32 i; s32 i;
sub_8019D20(r5); DespawnGroupLeader(r5);
for (i = 0; i < 5; i++) for (i = 0; i < 5; i++)
{ {
sub_801A02C(r5, i); DespawnGroupMember(r5, i);
} }
} }
static void sub_801A234(struct UnkStruct_URoom *r0) static void UpdateUnionRoomPlayerSprites(struct WirelessLink_URoom *uroom)
{ {
s32 i; s32 i;
struct UnkStruct_x20 * r4; struct UnkStruct_x20 * r4;
gUnknown_02022C68 = 0; sUnionObjRefreshTimer = 0;
for (i = 0, r4 = r0->field_0->arr; i < 8; i++) for (i = 0, r4 = uroom->field_0->arr; i < MAX_UNION_ROOM_PLAYERS; i++)
{ {
if (r4[i].field_1A_0 == 1) if (r4[i].groupScheduledAnim == UNION_ROOM_SPAWN_IN)
{ {
sub_801A16C(i, &r4[i].unk.field_0); SpawnGroupLeaderAndMembers(i, &r4[i].gname_uname.gname);
} }
else if (r4[i].field_1A_0 == 2) else if (r4[i].groupScheduledAnim == UNION_ROOM_SPAWN_OUT)
{ {
sub_801A214(i, &r4[i].unk.field_0); DespawnGroupLeaderAndMembers(i, &r4[i].gname_uname.gname);
} }
} }
} }
void sub_801A274(struct UnkStruct_URoom *unused) void ScheduleUnionRoomPlayerRefresh(struct WirelessLink_URoom *uroom)
{ {
gUnknown_02022C68 = 300; sUnionObjRefreshTimer = 300;
} }
void sub_801A284(struct UnkStruct_URoom *r2) void HandleUnionRoomPlayerRefresh(struct WirelessLink_URoom *uroom)
{ {
if (++gUnknown_02022C68 > 300) if (++sUnionObjRefreshTimer > 300)
{ {
sub_801A234(r2); UpdateUnionRoomPlayerSprites(uroom);
} }
} }
bool32 sub_801A2A8(struct UnkStruct_Main0 *arg0, s16 *arg1, s16 *arg2, u8 *arg3) bool32 TryInteractWithUnionRoomMember(struct UnkStruct_Main0 *main0, s16 *directionPtr, s16 *playerIdxPtr, u8 *spriteIds)
{ {
s16 x, y; s16 x, y;
s32 i, j; s32 i, direction;
struct UnkStruct_x20 * r4; struct UnkStruct_x20 * r4;
if (!is_walking_or_running()) if (!IsPlayerStandingStill())
{ {
return FALSE; return FALSE;
} }
GetXYCoordsOneStepInFrontOfPlayer(&x, &y); GetXYCoordsOneStepInFrontOfPlayer(&x, &y);
for (i = 0, r4 = arg0->arr; i < 8; i++) for (i = 0, r4 = main0->arr; i < MAX_UNION_ROOM_PLAYERS; i++)
{ {
for (j = 0; j < 5; j++) for (direction = DIR_NONE; direction <= DIR_EAST; direction++)
{ {
s32 r3 = 5 * i + j; s32 id = UR_PLAYER_SPRITE_ID(i, direction);
if (x != gUnknown_082F0740[i][0] + gUnknown_082F0760[j][0] + 7) if (x != sUnionRoomPlayerCoords[i][0] + sFacingDirectionOffsets[direction][0] + 7)
{ {
continue; continue;
} }
if (y != gUnknown_082F0740[i][1] + gUnknown_082F0760[j][1] + 7) if (y != sUnionRoomPlayerCoords[i][1] + sFacingDirectionOffsets[direction][1] + 7)
{ {
continue; continue;
} }
if (sub_8097C8C(r3 - 0x38) != 0) if (IsObjectEventSpriteInvisible(id - UR_SPRITE_START_ID))
{ {
continue; continue;
} }
if (sub_8097D9C(r3 - 0x38) != 0) if (IsObjectEventSpriteAnimating(id - UR_SPRITE_START_ID))
{ {
continue; continue;
} }
if (r4[i].field_1A_0 != 1) if (r4[i].groupScheduledAnim != UNION_ROOM_SPAWN_IN)
{ {
continue; continue;
} }
sub_801A3B0(j, i, gUnknown_082F076A[GetPlayerFacingDirection()]); // Face player
*arg1 = j; SetUnionRoomObjectFacingDirection(direction, i, sOppositeFacingDirection[GetPlayerFacingDirection()]);
*arg2 = i; *directionPtr = direction;
*playerIdxPtr = i;
return TRUE; return TRUE;
} }
} }
return FALSE; return FALSE;
} }
static void sub_801A3B0(s32 arg0, s32 arg1, u8 arg2) static void SetUnionRoomObjectFacingDirection(s32 currDirection, s32 playerIdx, u8 newDirection)
{ {
sub_8097B78(5 * arg1 - 0x38 + arg0, arg2); TurnObjectEventSprite(5 * playerIdx - UR_SPRITE_START_ID + currDirection, newDirection);
// should be line below, but order is swapped here
// TurnObjectEventSprite(UR_PLAYER_SPRITE_ID(playerIdx, currDirection) - UR_SPRITE_START_ID, newDirection);
} }
void sub_801A3D0(u32 arg0, u32 arg1, struct UnkStruct_Main0 *arg2) void UpdateUnionRoomMemberFacing(u32 currDirection, u32 playerIdx, struct UnkStruct_Main0 *main0)
{ {
return sub_801A3B0(arg0, arg1, sub_8019F64(arg0, arg1, &arg2->arr[arg1].unk.field_0)); return SetUnionRoomObjectFacingDirection(currDirection, playerIdx, GetNewFacingDirectionForUnionRoomPlayer(currDirection, playerIdx, &main0->arr[playerIdx].gname_uname.gname));
} }
+432
View File
@@ -0,0 +1,432 @@
#include "global.h"
#include "task.h"
#include "bg.h"
#include "palette.h"
#include "gpu_regs.h"
#include "malloc.h"
#include "scanline_effect.h"
#include "m4a.h"
#include "dynamic_placeholder_text_util.h"
#include "overworld.h"
#include "strings.h"
#include "string_util.h"
#include "international_string_util.h"
#include "sound.h"
#include "menu.h"
#include "librfu.h"
#include "link_rfu.h"
#include "union_room.h"
#include "constants/songs.h"
#include "constants/union_room.h"
enum {
COLORMODE_NORMAL,
COLORMODE_WHITE_LGRAY,
COLORMODE_RED,
COLORMODE_GREEN,
COLORMODE_WHITE_DGRAY,
};
#define GROUPTYPE_TRADE 0
#define GROUPTYPE_BATTLE 1
#define GROUPTYPE_UNION 2
#define GROUPTYPE_TOTAL 3
#define GROUPTYPE_NONE -1
#define NUM_GROUPTYPES 4
struct WirelessCommunicationStatusScreen
{
u32 groupCounts[NUM_GROUPTYPES];
u32 prevGroupCounts[NUM_GROUPTYPES];
u32 activities[NUM_TASK_DATA];
u8 taskId;
u8 rfuTaskId;
u8 filler[10];
};
static struct WirelessCommunicationStatusScreen * sStatusScreen;
static void CB2_InitWirelessCommunicationScreen(void);
static void Task_WirelessCommunicationScreen(u8);
static void WCSS_AddTextPrinterParameterized(u8, u8, const u8 *, u8, u8, u8);
static bool32 UpdateCommunicationCounts(u32 *, u32 *, u32 *, u8);
static const u16 sBgTiles_Pal[] = INCBIN_U16("graphics/interface/wireless_info_screen.gbapal");
static const u32 sBgTiles_Gfx[] = INCBIN_U32("graphics/interface/wireless_info_screen.4bpp.lz");
static const u32 sBgTiles_Tilemap[] = INCBIN_U32("graphics/interface/wireless_info_screen.bin.lz");
static const struct BgTemplate sBgTemplates[] = {
{
.bg = 0,
.charBaseIndex = 2,
.mapBaseIndex = 31,
.priority = 0
}, {
.bg = 1,
.charBaseIndex = 0,
.mapBaseIndex = 8,
.priority = 1
}
};
static const struct WindowTemplate sWindowTemplates[] = {
{
.bg = 0,
.tilemapLeft = 3,
.tilemapTop = 0,
.width = 24,
.height = 3,
.paletteNum = 15,
.baseBlock = 0x0001
}, {
.bg = 0,
.tilemapLeft = 3,
.tilemapTop = 4,
.width = 21,
.height = 15,
.paletteNum = 15,
.baseBlock = 0x0049
}, {
.bg = 0,
.tilemapLeft = 24,
.tilemapTop = 4,
.width = 3,
.height = 15,
.paletteNum = 15,
.baseBlock = 0x0184
}, DUMMY_WIN_TEMPLATE
};
static const u8 *const sHeaderTexts[NUM_GROUPTYPES + 1] = {
[0] = gText_WirelessCommStatus,
[GROUPTYPE_TRADE + 1] = gText_PeopleTrading,
[GROUPTYPE_BATTLE + 1] = gText_PeopleBattling,
[GROUPTYPE_UNION + 1] = gText_PeopleInUnionRoom,
[GROUPTYPE_TOTAL + 1] = gText_PeopleCommunicating
};
// Activity, group type, number of players
// 0 players means the number of players can change and should be counted dynamically
// GROUPTYPE_TOTAL have no unique group and are simply counted in the total of "people communicating"
// UB: GROUPTYPE_NONE (-1) can potentially be used as an index into a u8[4] in CountPlayersInGroupAndGetActivity
static const u8 sActivityGroupInfo[][3] = {
{ACTIVITY_BATTLE_SINGLE, GROUPTYPE_BATTLE, 2},
{ACTIVITY_BATTLE_DOUBLE, GROUPTYPE_BATTLE, 2},
{ACTIVITY_BATTLE_MULTI, GROUPTYPE_BATTLE, 4},
{ACTIVITY_TRADE, GROUPTYPE_TRADE, 2},
{ACTIVITY_WONDER_CARD, GROUPTYPE_TOTAL, 2},
{ACTIVITY_WONDER_NEWS, GROUPTYPE_TOTAL, 2},
{ACTIVITY_POKEMON_JUMP, GROUPTYPE_TOTAL, 0},
{ACTIVITY_BERRY_CRUSH, GROUPTYPE_TOTAL, 0},
{ACTIVITY_BERRY_PICK, GROUPTYPE_TOTAL, 0},
{ACTIVITY_SEARCH, GROUPTYPE_NONE, 0},
{ACTIVITY_SPIN_TRADE, GROUPTYPE_TRADE, 0},
{ACTIVITY_BERRY_BLENDER, GROUPTYPE_TOTAL, 0},
{ACTIVITY_RECORD_CORNER, GROUPTYPE_TOTAL, 0},
{ACTIVITY_NONE | IN_UNION_ROOM, GROUPTYPE_UNION, 1},
{ACTIVITY_BATTLE_SINGLE | IN_UNION_ROOM, GROUPTYPE_UNION, 2},
{ACTIVITY_TRADE | IN_UNION_ROOM, GROUPTYPE_UNION, 2},
{ACTIVITY_CHAT | IN_UNION_ROOM, GROUPTYPE_UNION, 0},
{ACTIVITY_CARD | IN_UNION_ROOM, GROUPTYPE_UNION, 2},
{ACTIVITY_PLYRTALK | IN_UNION_ROOM, GROUPTYPE_UNION, 1},
{ACTIVITY_NPCTALK | IN_UNION_ROOM, GROUPTYPE_UNION, 2},
{ACTIVITY_ACCEPT | IN_UNION_ROOM, GROUPTYPE_UNION, 1},
{ACTIVITY_DECLINE | IN_UNION_ROOM, GROUPTYPE_UNION, 1},
{ACTIVITY_WONDER_CARD2, GROUPTYPE_TOTAL, 2},
{ACTIVITY_WONDER_NEWS2, GROUPTYPE_TOTAL, 2},
{ACTIVITY_CONTEST_COOL, GROUPTYPE_TOTAL, 0},
{ACTIVITY_CONTEST_BEAUTY, GROUPTYPE_TOTAL, 0},
{ACTIVITY_CONTEST_CUTE, GROUPTYPE_TOTAL, 0},
{ACTIVITY_CONTEST_SMART, GROUPTYPE_TOTAL, 0},
{ACTIVITY_CONTEST_TOUGH, GROUPTYPE_TOTAL, 0},
{ACTIVITY_BATTLE_TOWER, GROUPTYPE_BATTLE, 2},
{ACTIVITY_BATTLE_TOWER_OPEN, GROUPTYPE_BATTLE, 2}
};
static void CB2_RunWirelessCommunicationScreen(void)
{
if (!IsDma3ManagerBusyWithBgCopy())
{
RunTasks();
RunTextPrinters();
AnimateSprites();
BuildOamBuffer();
UpdatePaletteFade();
}
}
static void VBlankCB_WirelessCommunicationScreen(void)
{
LoadOam();
ProcessSpriteCopyRequests();
TransferPlttBuffer();
}
void ShowWirelessCommunicationScreen(void)
{
SetMainCallback2(CB2_InitWirelessCommunicationScreen);
}
static void CB2_InitWirelessCommunicationScreen(void)
{
SetGpuReg(REG_OFFSET_DISPCNT, 0);
sStatusScreen = AllocZeroed(sizeof(struct WirelessCommunicationStatusScreen));
SetVBlankCallback(NULL);
ResetBgsAndClearDma3BusyFlags(0);
InitBgsFromTemplates(0, sBgTemplates, ARRAY_COUNT(sBgTemplates));
SetBgTilemapBuffer(1, Alloc(0x800));
SetBgTilemapBuffer(0, Alloc(0x800));
DecompressAndLoadBgGfxUsingHeap(1, sBgTiles_Gfx, 0, 0, 0);
CopyToBgTilemapBuffer(1, sBgTiles_Tilemap, 0, 0);
InitWindows(sWindowTemplates);
DeactivateAllTextPrinters();
ResetPaletteFade();
ResetSpriteData();
ResetTasks();
ScanlineEffect_Stop();
m4aSoundVSyncOn();
SetVBlankCallback(VBlankCB_WirelessCommunicationScreen);
sStatusScreen->taskId = CreateTask(Task_WirelessCommunicationScreen, 0);
sStatusScreen->rfuTaskId = CreateTask_ListenToWireless();
sStatusScreen->prevGroupCounts[GROUPTYPE_TOTAL] = 1;
ChangeBgX(0, 0, 0);
ChangeBgY(0, 0, 0);
ChangeBgX(1, 0, 0);
ChangeBgY(1, 0, 0);
LoadPalette(sBgTiles_Pal, 0x00, 0x20);
Menu_LoadStdPalAt(0xF0);
DynamicPlaceholderTextUtil_Reset();
FillBgTilemapBufferRect(0, 0, 0, 0, 32, 32, 0x0F);
CopyBgTilemapBufferToVram(1);
SetMainCallback2(CB2_RunWirelessCommunicationScreen);
RunTasks();
RunTextPrinters();
AnimateSprites();
BuildOamBuffer();
UpdatePaletteFade();
}
static void CB2_ExitWirelessCommunicationStatusScreen(void)
{
s32 i;
FreeAllWindowBuffers();
for (i = 0; i < (int)ARRAY_COUNT(sBgTemplates); i++)
{
Free(GetBgTilemapBuffer(i));
}
Free(sStatusScreen);
SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic);
}
static void WCSS_CyclePalette(s16 * counter, s16 * palIdx)
{
if (++(*counter) > 5)
{
if (++(*palIdx) == 14)
*palIdx = 0;
*counter = 0;
}
LoadPalette(sBgTiles_Pal + 16 * (*palIdx + 2), 0, 0x10);
}
static void PrintHeaderTexts(void)
{
s32 i;
FillWindowPixelBuffer(0, PIXEL_FILL(0));
FillWindowPixelBuffer(1, PIXEL_FILL(0));
FillWindowPixelBuffer(2, PIXEL_FILL(0));
WCSS_AddTextPrinterParameterized(0, 1, sHeaderTexts[0], GetStringCenterAlignXOffset(1, sHeaderTexts[0], 0xC0), 6, COLORMODE_GREEN);
for (i = 0; i < (int)ARRAY_COUNT(*sHeaderTexts) - 1; i++)
{
WCSS_AddTextPrinterParameterized(1, 1, sHeaderTexts[i + 1], 0, 30 * i + 8, COLORMODE_WHITE_LGRAY);
}
WCSS_AddTextPrinterParameterized(1, 1, sHeaderTexts[i + 1], 0, 30 * i + 8, COLORMODE_RED);
PutWindowTilemap(0);
CopyWindowToVram(0, 2);
PutWindowTilemap(1);
CopyWindowToVram(1, 2);
}
#define tState data[0]
static void Task_WirelessCommunicationScreen(u8 taskId)
{
s32 i;
switch (gTasks[taskId].tState)
{
case 0:
PrintHeaderTexts();
gTasks[taskId].tState++;
break;
case 1:
BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0);
ShowBg(1);
CopyBgTilemapBufferToVram(0);
ShowBg(0);
gTasks[taskId].tState++;
break;
case 2:
if (!gPaletteFade.active)
{
gTasks[taskId].tState++;
}
break;
case 3:
if (UpdateCommunicationCounts(sStatusScreen->groupCounts, sStatusScreen->prevGroupCounts, sStatusScreen->activities, sStatusScreen->rfuTaskId))
{
FillWindowPixelBuffer(2, PIXEL_FILL(0));
for (i = 0; i < NUM_GROUPTYPES; i++)
{
ConvertIntToDecimalStringN(gStringVar4, sStatusScreen->groupCounts[i], STR_CONV_MODE_RIGHT_ALIGN, 2);
if (i != GROUPTYPE_TOTAL)
WCSS_AddTextPrinterParameterized(2, 1, gStringVar4, 12, 30 * i + 8, COLORMODE_WHITE_LGRAY);
else
WCSS_AddTextPrinterParameterized(2, 1, gStringVar4, 12, 98, COLORMODE_RED);
}
PutWindowTilemap(2);
CopyWindowToVram(2, 3);
}
if (JOY_NEW(A_BUTTON) || JOY_NEW(B_BUTTON))
{
PlaySE(SE_SELECT);
gTasks[sStatusScreen->rfuTaskId].data[15] = 0xFF;
gTasks[taskId].tState++;
}
WCSS_CyclePalette(&gTasks[taskId].data[7], &gTasks[taskId].data[8]);
break;
case 4:
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0);
gTasks[taskId].tState++;
break;
case 5:
if (!gPaletteFade.active)
{
SetMainCallback2(CB2_ExitWirelessCommunicationStatusScreen);
DestroyTask(taskId);
}
break;
}
}
#undef tState
static void WCSS_AddTextPrinterParameterized(u8 windowId, u8 fontId, const u8 * str, u8 x, u8 y, u8 mode)
{
u8 color[3];
switch (mode)
{
case COLORMODE_NORMAL:
color[0] = TEXT_COLOR_TRANSPARENT;
color[1] = TEXT_COLOR_DARK_GREY;
color[2] = TEXT_COLOR_LIGHT_GREY;
break;
case COLORMODE_WHITE_LGRAY:
color[0] = TEXT_COLOR_TRANSPARENT;
color[1] = TEXT_COLOR_WHITE;
color[2] = TEXT_COLOR_LIGHT_GREY;
break;
case COLORMODE_RED:
color[0] = TEXT_COLOR_TRANSPARENT;
color[1] = TEXT_COLOR_RED;
color[2] = TEXT_COLOR_LIGHT_RED;
break;
case COLORMODE_GREEN:
color[0] = TEXT_COLOR_TRANSPARENT;
color[1] = TEXT_COLOR_LIGHT_GREEN;
color[2] = TEXT_COLOR_GREEN;
break;
case COLORMODE_WHITE_DGRAY:
color[0] = TEXT_COLOR_TRANSPARENT;
color[1] = TEXT_COLOR_WHITE;
color[2] = TEXT_COLOR_DARK_GREY;
break;
}
AddTextPrinterParameterized4(windowId, fontId, x, y, 0, 0, color, -1, str);
}
static u32 CountPlayersInGroupAndGetActivity(struct UnkStruct_x20 * unk20, u32 * groupCounts)
{
int i, j, k;
u32 activity = unk20->gname_uname.gname.activity;
#define group_activity(i) (sActivityGroupInfo[(i)][0])
#define group_type(i) (sActivityGroupInfo[(i)][1])
#define group_players(i) (sActivityGroupInfo[(i)][2])
for (i = 0; i < ARRAY_COUNT(sActivityGroupInfo); i++)
{
if (activity == group_activity(i) && unk20->groupScheduledAnim == UNION_ROOM_SPAWN_IN)
{
if (group_players(i) == 0)
{
k = 0;
for (j = 0; j < RFU_CHILD_MAX; j++)
{
if (unk20->gname_uname.gname.child_sprite_gender[j] != 0) k++;
}
k++;
groupCounts[group_type(i)] += k;
}
else
{
groupCounts[group_type(i)] += group_players(i);
}
}
}
return activity;
#undef group_activity
#undef group_type
#undef group_players
}
static bool32 HaveCountsChanged(u32 * currCounts, u32 * prevCounts)
{
s32 i;
for (i = 0; i < NUM_GROUPTYPES; i++)
{
if (currCounts[i] != prevCounts[i])
return TRUE;
}
return FALSE;
}
static bool32 UpdateCommunicationCounts(u32 * groupCounts, u32 * prevGroupCounts, u32 * activities, u8 taskId)
{
bool32 activitiesChanged = FALSE;
u32 groupCountBuffer[NUM_GROUPTYPES] = {0, 0, 0, 0};
struct UnkStruct_x20 ** data = (void *)gTasks[taskId].data;
s32 i;
for (i = 0; i < NUM_TASK_DATA; i++)
{
u32 activity = CountPlayersInGroupAndGetActivity(&(*data)[i], groupCountBuffer);
if (activity != activities[i])
{
activities[i] = activity;
activitiesChanged = TRUE;
}
}
if (!HaveCountsChanged(groupCountBuffer, prevGroupCounts))
{
if (activitiesChanged == TRUE)
return TRUE;
else
return FALSE;
}
else
{
memcpy(groupCounts, groupCountBuffer, sizeof(groupCountBuffer));
memcpy(prevGroupCounts, groupCountBuffer, sizeof(groupCountBuffer));
groupCounts[GROUPTYPE_TOTAL] = groupCounts[GROUPTYPE_TRADE]
+ groupCounts[GROUPTYPE_BATTLE]
+ groupCounts[GROUPTYPE_UNION]
+ groupCounts[GROUPTYPE_TOTAL];
return TRUE;
}
}
+1
View File
@@ -10,6 +10,7 @@
.include "src/link_rfu_3.o" .include "src/link_rfu_3.o"
.include "src/link_rfu_2.o" .include "src/link_rfu_2.o"
.include "src/union_room.o" .include "src/union_room.o"
.include "src/wireless_communication_status_screen.o"
.include "src/union_room_battle.o" .include "src/union_room_battle.o"
.include "src/dodrio_berry_picking.o" .include "src/dodrio_berry_picking.o"
.include "src/rtc.o" .include "src/rtc.o"

Some files were not shown because too many files have changed in this diff Show More